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: Anirban Chakraborty <anirban.chakraborty@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
 
 struct __cache {
        __le32  addr;
-       u8      stride;
-       u8      rsvd;
+       __le16  stride;
        __le16  init_tag_val;
        __le32  size;
        __le32  no_ops;
 #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
 
 
 
        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) {