Commit c40f4ef7 authored by Anirban Chakraborty's avatar Anirban Chakraborty Committed by David S. Miller

qlcnic: Add code to tune FW dump

To accommodate change in FW dump template, it is required to modify the
FW dump routine that captures cache data. Also, the default mask is changed
to capture a dump that would cover all the protocols that this FW supports.
Signed-off-by: default avatarAnirban Chakraborty <anirban.chakraborty@qlogic.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 287e38aa
...@@ -1220,8 +1220,7 @@ struct __ctrl { ...@@ -1220,8 +1220,7 @@ struct __ctrl {
struct __cache { struct __cache {
__le32 addr; __le32 addr;
u8 stride; __le16 stride;
u8 rsvd;
__le16 init_tag_val; __le16 init_tag_val;
__le32 size; __le32 size;
__le32 no_ops; __le32 no_ops;
...@@ -1319,7 +1318,7 @@ enum op_codes { ...@@ -1319,7 +1318,7 @@ enum op_codes {
#define QLCNIC_DUMP_SKIP BIT_7 #define QLCNIC_DUMP_SKIP BIT_7
#define QLCNIC_DUMP_MASK_MIN 3 #define QLCNIC_DUMP_MASK_MIN 3
#define QLCNIC_DUMP_MASK_DEF 0x0f #define QLCNIC_DUMP_MASK_DEF 0x7f
#define QLCNIC_DUMP_MASK_MAX 0xff #define QLCNIC_DUMP_MASK_MAX 0xff
#define QLCNIC_FORCE_FW_DUMP_KEY 0xdeadfeed #define QLCNIC_FORCE_FW_DUMP_KEY 0xdeadfeed
......
...@@ -1509,18 +1509,26 @@ qlcnic_dump_l2_cache(struct qlcnic_adapter *adapter, ...@@ -1509,18 +1509,26 @@ qlcnic_dump_l2_cache(struct qlcnic_adapter *adapter,
for (i = 0; i < l2->no_ops; i++) { for (i = 0; i < l2->no_ops; i++) {
QLCNIC_WR_DUMP_REG(l2->addr, base, val); QLCNIC_WR_DUMP_REG(l2->addr, base, val);
do { if (LSW(l2->ctrl_val))
QLCNIC_WR_DUMP_REG(l2->ctrl_addr, base, QLCNIC_WR_DUMP_REG(l2->ctrl_addr, base,
LSW(l2->ctrl_val)); LSW(l2->ctrl_val));
if (!poll_mask)
goto skip_poll;
do {
QLCNIC_RD_DUMP_REG(l2->ctrl_addr, base, &data); QLCNIC_RD_DUMP_REG(l2->ctrl_addr, base, &data);
if (!(data & poll_mask)) if (!(data & poll_mask))
break; break;
msleep(1); msleep(1);
time_out++; time_out++;
} while (time_out <= poll_to); } while (time_out <= poll_to);
if (time_out > poll_to)
return -EINVAL;
if (time_out > poll_to) {
dev_err(&adapter->pdev->dev,
"Timeout exceeded in %s, aborting dump\n",
__func__);
return -EINVAL;
}
skip_poll:
addr = l2->read_addr; addr = l2->read_addr;
cnt = l2->read_addr_num; cnt = l2->read_addr_num;
while (cnt) { while (cnt) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment