diff --git a/drivers/net/wireless/cnss2/pci.c b/drivers/net/wireless/cnss2/pci.c index 3814cee6b3be..b3f002e9e7aa 100644 --- a/drivers/net/wireless/cnss2/pci.c +++ b/drivers/net/wireless/cnss2/pci.c @@ -78,7 +78,8 @@ static DEFINE_SPINLOCK(time_sync_lock); #define CNSS_DEBUG_DUMP_SRAM_SIZE 10 #define HANG_DATA_LENGTH 384 -#define HANG_DATA_OFFSET ((3 * 1024 * 1024) - HANG_DATA_LENGTH) +#define HST_HANG_DATA_OFFSET ((3 * 1024 * 1024) - HANG_DATA_LENGTH) +#define HSP_HANG_DATA_OFFSET ((2 * 1024 * 1024) - HANG_DATA_LENGTH) static struct cnss_pci_reg ce_src[] = { { "SRC_RING_BASE_LSB", QCA6390_CE_SRC_RING_BASE_LSB_OFFSET }, @@ -3883,16 +3884,30 @@ static void cnss_pci_send_hang_event(struct cnss_pci_data *pci_priv) struct cnss_fw_mem *fw_mem = plat_priv->fw_mem; struct cnss_hang_event hang_event; void *hang_data_va = NULL; + u64 offset = 0; int i = 0; if (!fw_mem || !plat_priv->fw_mem_seg_len) return; memset(&hang_event, 0, sizeof(hang_event)); + switch (pci_priv->device_id) { + case QCA6390_DEVICE_ID: + offset = HST_HANG_DATA_OFFSET; + break; + case QCA6490_DEVICE_ID: + offset = HSP_HANG_DATA_OFFSET; + break; + default: + cnss_pr_err("Skip Hang Event Data as unsupported Device ID received: %d\n", + pci_priv->device_id); + return; + } + for (i = 0; i < plat_priv->fw_mem_seg_len; i++) { if (fw_mem[i].type == QMI_WLFW_MEM_TYPE_DDR_V01 && fw_mem[i].va) { - hang_data_va = fw_mem[i].va + HANG_DATA_OFFSET; + hang_data_va = fw_mem[i].va + offset; hang_event.hang_event_data = kmemdup(hang_data_va, HANG_DATA_LENGTH, GFP_ATOMIC);