diff options
| author | Yu Wang <yyuwang@codeaurora.org> | 2017-02-23 15:33:42 +0800 |
|---|---|---|
| committer | Sandeep Puligilla <spuligil@codeaurora.org> | 2017-03-24 23:19:00 -0700 |
| commit | 88a87e18792bbd84ea57aae3a601e76932204fc3 (patch) | |
| tree | a113110ee7ba65a0d00beec5ee9716c321550db3 | |
| parent | 18aa85def164b0bd9166e80f6ec5d3c5ab057969 (diff) | |
qcacld-3.0: enable FW dump for SDIO
When FW assert happen, it won't do FW dump
if the bus type is SDIO.
Enable FW dump for SDIO target
Change-Id: I24655ca74003c915d9eda1106aad7cf87856947e
CRs-Fixed: 2010613
| -rw-r--r-- | core/bmi/src/i_ar6320v2_regtable.h | 278 | ||||
| -rw-r--r-- | core/bmi/src/ol_fw.c | 25 | ||||
| -rw-r--r-- | core/pld/src/pld_common.c | 2 | ||||
| -rw-r--r-- | core/pld/src/pld_sdio.h | 23 |
4 files changed, 312 insertions, 16 deletions
diff --git a/core/bmi/src/i_ar6320v2_regtable.h b/core/bmi/src/i_ar6320v2_regtable.h index 7bfc1b6e767f..9b2a6c472860 100644 --- a/core/bmi/src/i_ar6320v2_regtable.h +++ b/core/bmi/src/i_ar6320v2_regtable.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014,2016 The Linux Foundation. All rights reserved. + * Copyright (c) 2014,2016-2017 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -321,6 +321,281 @@ static const tgt_reg_section ar6320v2_reg_table[] = { {0x80010, 0x80020}, }; +#ifdef HIF_SDIO +static const tgt_reg_section ar6320v3_reg_table[] = { + {0x800, 0x810}, + {0x820, 0x82C}, + {0x830, 0x8F4}, + {0x90C, 0x91C}, + {0xA14, 0xA18}, + {0xA84, 0xA94}, + {0xAA8, 0xAD4}, + {0xADC, 0xB40}, + {0x1000, 0x10A4}, + {0x10BC, 0x111C}, + {0x1134, 0x1138}, + {0x1144, 0x114C}, + {0x1150, 0x115C}, + {0x1160, 0x1178}, + {0x1240, 0x1260}, + {0x2000, 0x207C}, + {0x3000, 0x3014}, + {0x4000, 0x4014}, + {0x5000, 0x5124}, + {0x6000, 0x6040}, + {0x6080, 0x60CC}, + {0x6100, 0x611C}, + {0x6140, 0x61D8}, + {0x6200, 0x6238}, + {0x6240, 0x628C}, + {0x62C0, 0x62EC}, + {0x6380, 0x63E8}, + {0x6400, 0x6440}, + {0x6480, 0x64CC}, + {0x6500, 0x651C}, + {0x6540, 0x6580}, + {0x6600, 0x6638}, + {0x6640, 0x668C}, + {0x66C0, 0x66EC}, + {0x6780, 0x67E8}, + {0x7080, 0x708C}, + {0x70C0, 0x70C8}, + {0x7400, 0x741C}, + {0x7440, 0x7454}, + {0x7800, 0x7818}, + {0x8010, 0x8060}, + {0x8080, 0x8084}, + {0x80A0, 0x80A4}, + {0x80C0, 0x80C4}, + {0x80E0, 0x80ec}, + {0x8110, 0x8128}, + {0x9000, 0x9004}, + {0xF000, 0xF0E0}, + {0xF140, 0xF190}, + {0xF250, 0xF25C}, + {0xF260, 0xF268}, + {0xF26C, 0xF2A8}, + {0x10008, 0x1000C}, + {0x10014, 0x10018}, + {0x1001C, 0x10020}, + {0x10024, 0x10028}, + {0x10030, 0x10034}, + {0x10040, 0x10054}, + {0x10058, 0x1007C}, + {0x10080, 0x100C4}, + {0x100C8, 0x10114}, + {0x1012C, 0x10130}, + {0x10138, 0x10144}, + {0x10200, 0x10220}, + {0x10230, 0x10250}, + {0x10260, 0x10280}, + {0x10290, 0x102B0}, + {0x102C0, 0x102DC}, + {0x102E0, 0x102F4}, + {0x102FC, 0x1037C}, + {0x10380, 0x10390}, + {0x10800, 0x10828}, + {0x10840, 0x10844}, + {0x10880, 0x10884}, + {0x108C0, 0x108E8}, + {0x10900, 0x10928}, + {0x10940, 0x10944}, + {0x10980, 0x10984}, + {0x109C0, 0x109E8}, + {0x10A00, 0x10A28}, + {0x10A40, 0x10A50}, + {0x11000, 0x11028}, + {0x11030, 0x11034}, + {0x11038, 0x11068}, + {0x11070, 0x11074}, + {0x11078, 0x110A8}, + {0x110B0, 0x110B4}, + {0x110B8, 0x110E8}, + {0x110F0, 0x110F4}, + {0x110F8, 0x11128}, + {0x11138, 0x11144}, + {0x11178, 0x11180}, + {0x111B8, 0x111C0}, + {0x111F8, 0x11200}, + {0x11238, 0x1123C}, + {0x11270, 0x11274}, + {0x11278, 0x1127C}, + {0x112B0, 0x112B4}, + {0x112B8, 0x112BC}, + {0x112F0, 0x112F4}, + {0x112F8, 0x112FC}, + {0x11338, 0x1133C}, + {0x11378, 0x1137C}, + {0x113B8, 0x113BC}, + {0x113F8, 0x113FC}, + {0x11438, 0x11440}, + {0x11478, 0x11480}, + {0x114B8, 0x114BC}, + {0x114F8, 0x114FC}, + {0x11538, 0x1153C}, + {0x11578, 0x1157C}, + {0x115B8, 0x115BC}, + {0x115F8, 0x115FC}, + {0x11638, 0x1163C}, + {0x11678, 0x1167C}, + {0x116B8, 0x116BC}, + {0x116F8, 0x116FC}, + {0x11738, 0x1173C}, + {0x11778, 0x1177C}, + {0x117B8, 0x117BC}, + {0x117F8, 0x117FC}, + {0x17000, 0x1701C}, + {0x17020, 0x170AC}, + {0x18000, 0x18050}, + {0x18054, 0x18074}, + {0x18080, 0x180D4}, + {0x180DC, 0x18104}, + {0x18108, 0x1813C}, + {0x18144, 0x18148}, + {0x18168, 0x18174}, + {0x18178, 0x18180}, + {0x181C8, 0x181E0}, + {0x181E4, 0x181E8}, + {0x181EC, 0x1820C}, + {0x1825C, 0x18280}, + {0x18284, 0x18290}, + {0x18294, 0x182A0}, + {0x18300, 0x18304}, + {0x18314, 0x18320}, + {0x18328, 0x18350}, + {0x1835C, 0x1836C}, + {0x18370, 0x18390}, + {0x18398, 0x183AC}, + {0x183BC, 0x183D8}, + {0x183DC, 0x183F4}, + {0x18400, 0x186F4}, + {0x186F8, 0x1871C}, + {0x18720, 0x18790}, + {0x19800, 0x19830}, + {0x19834, 0x19840}, + {0x19880, 0x1989C}, + {0x198A4, 0x198B0}, + {0x198BC, 0x19900}, + {0x19C00, 0x19C88}, + {0x19D00, 0x19D20}, + {0x19E00, 0x19E7C}, + {0x19E80, 0x19E94}, + {0x19E98, 0x19EAC}, + {0x19EB0, 0x19EBC}, + {0x19F70, 0x19F74}, + {0x19F80, 0x19F8C}, + {0x19FA0, 0x19FB4}, + {0x19FC0, 0x19FD8}, + {0x1A000, 0x1A200}, + {0x1A204, 0x1A210}, + {0x1A228, 0x1A22C}, + {0x1A230, 0x1A248}, + {0x1A250, 0x1A270}, + {0x1A280, 0x1A290}, + {0x1A2A0, 0x1A2A4}, + {0x1A2C0, 0x1A2EC}, + {0x1A300, 0x1A3BC}, + {0x1A3F0, 0x1A3F4}, + {0x1A3F8, 0x1A434}, + {0x1A438, 0x1A444}, + {0x1A448, 0x1A468}, + {0x1A580, 0x1A58C}, + {0x1A644, 0x1A654}, + {0x1A670, 0x1A698}, + {0x1A6AC, 0x1A6B0}, + {0x1A6D0, 0x1A6D4}, + {0x1A6EC, 0x1A70C}, + {0x1A710, 0x1A738}, + {0x1A7C0, 0x1A7D0}, + {0x1A7D4, 0x1A7D8}, + {0x1A7DC, 0x1A7E4}, + {0x1A7F0, 0x1A7F8}, + {0x1A888, 0x1A89C}, + {0x1A8A8, 0x1A8AC}, + {0x1A8C0, 0x1A8DC}, + {0x1A8F0, 0x1A8FC}, + {0x1AE04, 0x1AE08}, + {0x1AE18, 0x1AE24}, + {0x1AF80, 0x1AF8C}, + {0x1AFA0, 0x1AFB4}, + {0x1B000, 0x1B200}, + {0x1B284, 0x1B288}, + {0x1B2D0, 0x1B2D8}, + {0x1B2DC, 0x1B2EC}, + {0x1B300, 0x1B340}, + {0x1B374, 0x1B378}, + {0x1B380, 0x1B384}, + {0x1B388, 0x1B38C}, + {0x1B404, 0x1B408}, + {0x1B420, 0x1B428}, + {0x1B440, 0x1B444}, + {0x1B448, 0x1B44C}, + {0x1B450, 0x1B458}, + {0x1B45C, 0x1B468}, + {0x1B584, 0x1B58C}, + {0x1B68C, 0x1B690}, + {0x1B6AC, 0x1B6B0}, + {0x1B7F0, 0x1B7F8}, + {0x1C800, 0x1CC00}, + {0x1CE00, 0x1CE04}, + {0x1CF80, 0x1CF84}, + {0x1D200, 0x1D800}, + {0x1E000, 0x20014}, + {0x20100, 0x20124}, + {0x21400, 0x217A8}, + {0x21800, 0x21BA8}, + {0x21C00, 0x21FA8}, + {0x22000, 0x223A8}, + {0x22400, 0x227A8}, + {0x22800, 0x22BA8}, + {0x22C00, 0x22FA8}, + {0x23000, 0x233A8}, + {0x24000, 0x24034}, + + /* + * EFUSE0,1,2 is disabled here + * because it's state may be reset + * + * {0x24800, 0x24804}, + * {0x25000, 0x25004}, + * {0x25800, 0x25804}, + */ + + {0x26000, 0x26064}, + {0x27000, 0x27024}, + {0x34000, 0x3400C}, + {0x34400, 0x3445C}, + {0x34800, 0x3485C}, + {0x34C00, 0x34C5C}, + {0x35000, 0x3505C}, + {0x35400, 0x3545C}, + {0x35800, 0x3585C}, + {0x35C00, 0x35C5C}, + {0x36000, 0x3605C}, + {0x38000, 0x38064}, + {0x38070, 0x380E0}, + {0x3A000, 0x3A074}, + + /* + * DBI windows is skipped here, it can be only accessed when pcie + * is active (not in reset) and CORE_CTRL_PCIE_LTSSM_EN = 0 && + * PCIE_CTRL_APP_LTSSM_ENALBE=0. + * {0x3C000 , 0x3C004}, + */ + + {0x40000, 0x400A4}, + + /* + * SI register is skiped here. + * Because it will cause bus hang + * + * {0x50000, 0x50018}, + */ + + {0x80000, 0x8000C}, + {0x80010, 0x80020}, +}; +#else static const tgt_reg_section ar6320v3_reg_table[] = { {0x800, 0x810}, {0x820, 0x82C}, @@ -602,4 +877,5 @@ static const tgt_reg_section ar6320v3_reg_table[] = { {0x80000, 0x8000C}, {0x80010, 0x80020}, }; +#endif #endif /* #ifndef _AR6320V2_DBG_REGTABLE_H_ */ diff --git a/core/bmi/src/ol_fw.c b/core/bmi/src/ol_fw.c index 70321ab8024d..fd0e364f81cd 100644 --- a/core/bmi/src/ol_fw.c +++ b/core/bmi/src/ol_fw.c @@ -494,9 +494,6 @@ int ol_copy_ramdump(struct hif_opaque_softc *scn) return -EINVAL; } - if (hif_get_bus_type(scn) == QDF_BUS_TYPE_SDIO) - return 0; - info = qdf_mem_malloc(sizeof(struct ramdump_info)); if (!info) { BMI_ERR("%s Memory for Ramdump Allocation failed", __func__); @@ -1450,23 +1447,20 @@ static int ol_ath_get_reg_table(uint32_t target_version, switch (target_version) { case AR6320_REV2_1_VERSION: - reg_table->section = - (tgt_reg_section *) &ar6320v2_reg_table[0]; - reg_table->section_size = sizeof(ar6320v2_reg_table) - / sizeof(ar6320v2_reg_table[0]); + reg_table->section = ar6320v2_reg_table; + reg_table->section_size = ARRAY_SIZE(ar6320v2_reg_table); section_len = AR6320_REV2_1_REG_SIZE; break; case AR6320_REV3_VERSION: case AR6320_REV3_2_VERSION: case QCA9379_REV1_VERSION: - reg_table->section = - (tgt_reg_section *) &ar6320v3_reg_table[0]; - reg_table->section_size = sizeof(ar6320v3_reg_table) - / sizeof(ar6320v3_reg_table[0]); + case QCA9377_REV1_1_VERSION: + reg_table->section = ar6320v3_reg_table; + reg_table->section_size = ARRAY_SIZE(ar6320v3_reg_table); section_len = AR6320_REV3_REG_SIZE; break; default: - reg_table->section = (void *)NULL; + reg_table->section = NULL; reg_table->section_size = 0; section_len = 0; } @@ -1480,7 +1474,7 @@ static int ol_diag_read_reg_loc(struct hif_opaque_softc *scn, uint8_t *buffer, int i, len, section_len, fill_len; int dump_len, result = 0; tgt_reg_table reg_table; - tgt_reg_section *curr_sec, *next_sec; + const tgt_reg_section *curr_sec, *next_sec; struct hif_target_info *tgt_info = hif_get_target_info_handle(scn); uint32_t target_version = tgt_info->target_version; @@ -1663,8 +1657,9 @@ static int ol_target_coredump(void *inst, void *memory_block, } if ((block_len - amount_read) >= read_len) { - if ((hif_get_bus_type(scn) == QDF_BUS_TYPE_PCI) && - (pos == REGISTER_LOCATION)) { + if (((hif_get_bus_type(scn) == QDF_BUS_TYPE_PCI) || + (hif_get_bus_type(scn) == QDF_BUS_TYPE_SDIO)) && + (pos == REGISTER_LOCATION)) { result = ol_diag_read_reg_loc(scn, buffer_loc, block_len - amount_read); diff --git a/core/pld/src/pld_common.c b/core/pld/src/pld_common.c index 2ab192158748..610781fe9bfe 100644 --- a/core/pld/src/pld_common.c +++ b/core/pld/src/pld_common.c @@ -745,6 +745,7 @@ void *pld_get_virt_ramdump_mem(struct device *dev, unsigned long *size) case PLD_BUS_TYPE_SNOC: break; case PLD_BUS_TYPE_SDIO: + mem = pld_sdio_get_virt_ramdump_mem(dev, size); break; default: pr_err("Invalid device type\n"); @@ -772,6 +773,7 @@ void pld_device_crashed(struct device *dev) case PLD_BUS_TYPE_SNOC: break; case PLD_BUS_TYPE_SDIO: + pld_sdio_device_crashed(dev); break; default: pr_err("Invalid device type\n"); diff --git a/core/pld/src/pld_sdio.h b/core/pld/src/pld_sdio.h index 77cf0ddd1b8c..c50ecf822d46 100644 --- a/core/pld/src/pld_sdio.h +++ b/core/pld/src/pld_sdio.h @@ -97,4 +97,27 @@ static inline uint8_t *pld_sdio_get_wlan_mac_address(struct device *dev, } #endif +#ifdef CONFIG_PLD_SDIO_CNSS +static inline void *pld_sdio_get_virt_ramdump_mem(struct device *dev, + unsigned long *size) +{ + return cnss_common_get_virt_ramdump_mem(dev, size); +} + +static inline void pld_sdio_device_crashed(struct device *dev) +{ + cnss_common_device_crashed(dev); +} + +#else +static inline void *pld_sdio_get_virt_ramdump_mem(struct device *dev, + unsigned long *size) +{ + return NULL; +} + +static inline void pld_sdio_device_crashed(struct device *dev) +{ +} +#endif #endif |
