|
@@ -7866,6 +7866,20 @@ int bnx2x_init_hw_func_cnic(struct bnx2x *bp)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/* previous driver DMAE transaction may have occurred when pre-boot stage ended
|
|
|
+ * and boot began, or when kdump kernel was loaded. Either case would invalidate
|
|
|
+ * the addresses of the transaction, resulting in was-error bit set in the pci
|
|
|
+ * causing all hw-to-host pcie transactions to timeout. If this happened we want
|
|
|
+ * to clear the interrupt which detected this from the pglueb and the was done
|
|
|
+ * bit
|
|
|
+ */
|
|
|
+static void bnx2x_clean_pglue_errors(struct bnx2x *bp)
|
|
|
+{
|
|
|
+ if (!CHIP_IS_E1x(bp))
|
|
|
+ REG_WR(bp, PGLUE_B_REG_WAS_ERROR_PF_7_0_CLR,
|
|
|
+ 1 << BP_ABS_FUNC(bp));
|
|
|
+}
|
|
|
+
|
|
|
static int bnx2x_init_hw_func(struct bnx2x *bp)
|
|
|
{
|
|
|
int port = BP_PORT(bp);
|
|
@@ -7958,8 +7972,7 @@ static int bnx2x_init_hw_func(struct bnx2x *bp)
|
|
|
|
|
|
bnx2x_init_block(bp, BLOCK_PGLUE_B, init_phase);
|
|
|
|
|
|
- if (!CHIP_IS_E1x(bp))
|
|
|
- REG_WR(bp, PGLUE_B_REG_WAS_ERROR_PF_7_0_CLR, func);
|
|
|
+ bnx2x_clean_pglue_errors(bp);
|
|
|
|
|
|
bnx2x_init_block(bp, BLOCK_ATC, init_phase);
|
|
|
bnx2x_init_block(bp, BLOCK_DMAE, init_phase);
|
|
@@ -10588,26 +10601,6 @@ static int bnx2x_prev_unload_common(struct bnx2x *bp)
|
|
|
return bnx2x_prev_mcp_done(bp);
|
|
|
}
|
|
|
|
|
|
-/* previous driver DMAE transaction may have occurred when pre-boot stage ended
|
|
|
- * and boot began, or when kdump kernel was loaded. Either case would invalidate
|
|
|
- * the addresses of the transaction, resulting in was-error bit set in the pci
|
|
|
- * causing all hw-to-host pcie transactions to timeout. If this happened we want
|
|
|
- * to clear the interrupt which detected this from the pglueb and the was done
|
|
|
- * bit
|
|
|
- */
|
|
|
-static void bnx2x_prev_interrupted_dmae(struct bnx2x *bp)
|
|
|
-{
|
|
|
- if (!CHIP_IS_E1x(bp)) {
|
|
|
- u32 val = REG_RD(bp, PGLUE_B_REG_PGLUE_B_INT_STS);
|
|
|
- if (val & PGLUE_B_PGLUE_B_INT_STS_REG_WAS_ERROR_ATTN) {
|
|
|
- DP(BNX2X_MSG_SP,
|
|
|
- "'was error' bit was found to be set in pglueb upon startup. Clearing\n");
|
|
|
- REG_WR(bp, PGLUE_B_REG_WAS_ERROR_PF_7_0_CLR,
|
|
|
- 1 << BP_FUNC(bp));
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
static int bnx2x_prev_unload(struct bnx2x *bp)
|
|
|
{
|
|
|
int time_counter = 10;
|
|
@@ -10617,7 +10610,7 @@ static int bnx2x_prev_unload(struct bnx2x *bp)
|
|
|
/* clear hw from errors which may have resulted from an interrupted
|
|
|
* dmae transaction.
|
|
|
*/
|
|
|
- bnx2x_prev_interrupted_dmae(bp);
|
|
|
+ bnx2x_clean_pglue_errors(bp);
|
|
|
|
|
|
/* Release previously held locks */
|
|
|
hw_lock_reg = (BP_FUNC(bp) <= 5) ?
|