cnic: Reset iSCSI EQ during shutdown.
[cascardo/linux.git] / drivers / net / ethernet / broadcom / cnic.c
index 3b825f4..5437e2a 100644 (file)
@@ -5344,8 +5344,27 @@ static void cnic_stop_bnx2_hw(struct cnic_dev *dev)
 static void cnic_stop_bnx2x_hw(struct cnic_dev *dev)
 {
        struct cnic_local *cp = dev->cnic_priv;
+       u32 hc_index = HC_INDEX_ISCSI_EQ_CONS;
+       u32 sb_id = cp->status_blk_num;
+       u32 idx_off, syn_off;
 
        cnic_free_irq(dev);
+
+       if (BNX2X_CHIP_IS_E2_PLUS(cp->chip_id)) {
+               idx_off = offsetof(struct hc_status_block_e2, index_values) +
+                         (hc_index * sizeof(u16));
+
+               syn_off = CSTORM_HC_SYNC_LINE_INDEX_E2_OFFSET(hc_index, sb_id);
+       } else {
+               idx_off = offsetof(struct hc_status_block_e1x, index_values) +
+                         (hc_index * sizeof(u16));
+
+               syn_off = CSTORM_HC_SYNC_LINE_INDEX_E1X_OFFSET(hc_index, sb_id);
+       }
+       CNIC_WR16(dev, BAR_CSTRORM_INTMEM + syn_off, 0);
+       CNIC_WR16(dev, BAR_CSTRORM_INTMEM + CSTORM_STATUS_BLOCK_OFFSET(sb_id) +
+                 idx_off, 0);
+
        *cp->kcq1.hw_prod_idx_ptr = 0;
        CNIC_WR(dev, BAR_CSTRORM_INTMEM +
                CSTORM_ISCSI_EQ_CONS_OFFSET(cp->pfid, 0), 0);