mwifiex: dump pcie scratch registers
This patch prints pcie scratch registers during firmware dump. They will be useful for analysing firmware status. Signed-off-by: Xinming Hu <huxm@marvell.com> Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
bf00dc22bc
commit
4646968b94
@ -1074,12 +1074,14 @@ void mwifiex_drv_info_dump(struct mwifiex_adapter *adapter)
|
|||||||
priv->netdev->name, priv->num_tx_timeout);
|
priv->netdev->name, priv->num_tx_timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (adapter->iface_type == MWIFIEX_SDIO) {
|
if (adapter->iface_type == MWIFIEX_SDIO ||
|
||||||
p += sprintf(p, "\n=== SDIO register dump===\n");
|
adapter->iface_type == MWIFIEX_PCIE) {
|
||||||
|
p += sprintf(p, "\n=== %s register dump===\n",
|
||||||
|
adapter->iface_type == MWIFIEX_SDIO ?
|
||||||
|
"SDIO" : "PCIE");
|
||||||
if (adapter->if_ops.reg_dump)
|
if (adapter->if_ops.reg_dump)
|
||||||
p += adapter->if_ops.reg_dump(adapter, p);
|
p += adapter->if_ops.reg_dump(adapter, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
p += sprintf(p, "\n=== more debug information\n");
|
p += sprintf(p, "\n=== more debug information\n");
|
||||||
debug_info = kzalloc(sizeof(*debug_info), GFP_KERNEL);
|
debug_info = kzalloc(sizeof(*debug_info), GFP_KERNEL);
|
||||||
if (debug_info) {
|
if (debug_info) {
|
||||||
|
@ -2355,6 +2355,47 @@ static int mwifiex_pcie_host_to_card(struct mwifiex_adapter *adapter, u8 type,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Function to dump PCIE scratch registers in case of FW crash
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
mwifiex_pcie_reg_dump(struct mwifiex_adapter *adapter, char *drv_buf)
|
||||||
|
{
|
||||||
|
char *p = drv_buf;
|
||||||
|
char buf[256], *ptr;
|
||||||
|
int i;
|
||||||
|
u32 value;
|
||||||
|
struct pcie_service_card *card = adapter->card;
|
||||||
|
const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
|
||||||
|
int pcie_scratch_reg[] = {PCIE_SCRATCH_12_REG,
|
||||||
|
PCIE_SCRATCH_13_REG,
|
||||||
|
PCIE_SCRATCH_14_REG};
|
||||||
|
|
||||||
|
if (!p)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
mwifiex_dbg(adapter, MSG, "PCIE register dump start\n");
|
||||||
|
|
||||||
|
if (mwifiex_read_reg(adapter, reg->fw_status, &value)) {
|
||||||
|
mwifiex_dbg(adapter, ERROR, "failed to read firmware status");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ptr = buf;
|
||||||
|
mwifiex_dbg(adapter, MSG, "pcie scratch register:");
|
||||||
|
for (i = 0; i < ARRAY_SIZE(pcie_scratch_reg); i++) {
|
||||||
|
mwifiex_read_reg(adapter, pcie_scratch_reg[i], &value);
|
||||||
|
ptr += sprintf(ptr, "reg:0x%x, value=0x%x\n",
|
||||||
|
pcie_scratch_reg[i], value);
|
||||||
|
}
|
||||||
|
|
||||||
|
mwifiex_dbg(adapter, MSG, "%s\n", buf);
|
||||||
|
p += sprintf(p, "%s\n", buf);
|
||||||
|
|
||||||
|
mwifiex_dbg(adapter, MSG, "PCIE register dump end\n");
|
||||||
|
|
||||||
|
return p - drv_buf;
|
||||||
|
}
|
||||||
|
|
||||||
/* This function read/write firmware */
|
/* This function read/write firmware */
|
||||||
static enum rdwr_status
|
static enum rdwr_status
|
||||||
mwifiex_pcie_rdwr_firmware(struct mwifiex_adapter *adapter, u8 doneflag)
|
mwifiex_pcie_rdwr_firmware(struct mwifiex_adapter *adapter, u8 doneflag)
|
||||||
@ -2899,6 +2940,7 @@ static struct mwifiex_if_ops pcie_ops = {
|
|||||||
.cleanup_mpa_buf = NULL,
|
.cleanup_mpa_buf = NULL,
|
||||||
.init_fw_port = mwifiex_pcie_init_fw_port,
|
.init_fw_port = mwifiex_pcie_init_fw_port,
|
||||||
.clean_pcie_ring = mwifiex_clean_pcie_ring_buf,
|
.clean_pcie_ring = mwifiex_clean_pcie_ring_buf,
|
||||||
|
.reg_dump = mwifiex_pcie_reg_dump,
|
||||||
.device_dump = mwifiex_pcie_device_dump,
|
.device_dump = mwifiex_pcie_device_dump,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -73,6 +73,8 @@
|
|||||||
#define PCIE_SCRATCH_10_REG 0xCE8
|
#define PCIE_SCRATCH_10_REG 0xCE8
|
||||||
#define PCIE_SCRATCH_11_REG 0xCEC
|
#define PCIE_SCRATCH_11_REG 0xCEC
|
||||||
#define PCIE_SCRATCH_12_REG 0xCF0
|
#define PCIE_SCRATCH_12_REG 0xCF0
|
||||||
|
#define PCIE_SCRATCH_13_REG 0xCF8
|
||||||
|
#define PCIE_SCRATCH_14_REG 0xCFC
|
||||||
#define PCIE_RD_DATA_PTR_Q0_Q1 0xC08C
|
#define PCIE_RD_DATA_PTR_Q0_Q1 0xC08C
|
||||||
#define PCIE_WR_DATA_PTR_Q0_Q1 0xC05C
|
#define PCIE_WR_DATA_PTR_Q0_Q1 0xC05C
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user