From d6d23c957d9fdb5791efc55beca15912f73bd3a5 Mon Sep 17 00:00:00 2001 From: Anirban Chakraborty Date: Wed, 22 Jun 2011 02:52:19 +0000 Subject: [PATCH] --- yaml --- r: 255682 b: refs/heads/master c: c40f4ef77e5123a1d4064d7a34f708483b32b8be h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/net/qlcnic/qlcnic.h | 5 ++--- trunk/drivers/net/qlcnic/qlcnic_hw.c | 14 +++++++++++--- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 8819dae403d6..cb0b24bf1d23 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 287e38aa1adee01f63bb28e270afd3f738a6ab8c +refs/heads/master: c40f4ef77e5123a1d4064d7a34f708483b32b8be diff --git a/trunk/drivers/net/qlcnic/qlcnic.h b/trunk/drivers/net/qlcnic/qlcnic.h index 194376e584e6..e5bb33253f94 100644 --- a/trunk/drivers/net/qlcnic/qlcnic.h +++ b/trunk/drivers/net/qlcnic/qlcnic.h @@ -1220,8 +1220,7 @@ struct __ctrl { struct __cache { __le32 addr; - u8 stride; - u8 rsvd; + __le16 stride; __le16 init_tag_val; __le32 size; __le32 no_ops; @@ -1319,7 +1318,7 @@ enum op_codes { #define QLCNIC_DUMP_SKIP BIT_7 #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_FORCE_FW_DUMP_KEY 0xdeadfeed diff --git a/trunk/drivers/net/qlcnic/qlcnic_hw.c b/trunk/drivers/net/qlcnic/qlcnic_hw.c index 1947f817bf23..81de563ee96c 100644 --- a/trunk/drivers/net/qlcnic/qlcnic_hw.c +++ b/trunk/drivers/net/qlcnic/qlcnic_hw.c @@ -1509,18 +1509,26 @@ qlcnic_dump_l2_cache(struct qlcnic_adapter *adapter, for (i = 0; i < l2->no_ops; i++) { QLCNIC_WR_DUMP_REG(l2->addr, base, val); - do { + if (LSW(l2->ctrl_val)) QLCNIC_WR_DUMP_REG(l2->ctrl_addr, base, LSW(l2->ctrl_val)); + if (!poll_mask) + goto skip_poll; + do { QLCNIC_RD_DUMP_REG(l2->ctrl_addr, base, &data); if (!(data & poll_mask)) break; msleep(1); time_out++; } 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; cnt = l2->read_addr_num; while (cnt) {