|
@@ -5447,26 +5447,24 @@ static void bnx2x_timer(unsigned long data)
|
|
|
if (IS_PF(bp) &&
|
|
|
!BP_NOMCP(bp)) {
|
|
|
int mb_idx = BP_FW_MB_IDX(bp);
|
|
|
- u32 drv_pulse;
|
|
|
- u32 mcp_pulse;
|
|
|
+ u16 drv_pulse;
|
|
|
+ u16 mcp_pulse;
|
|
|
|
|
|
++bp->fw_drv_pulse_wr_seq;
|
|
|
bp->fw_drv_pulse_wr_seq &= DRV_PULSE_SEQ_MASK;
|
|
|
- /* TBD - add SYSTEM_TIME */
|
|
|
drv_pulse = bp->fw_drv_pulse_wr_seq;
|
|
|
bnx2x_drv_pulse(bp);
|
|
|
|
|
|
mcp_pulse = (SHMEM_RD(bp, func_mb[mb_idx].mcp_pulse_mb) &
|
|
|
MCP_PULSE_SEQ_MASK);
|
|
|
/* The delta between driver pulse and mcp response
|
|
|
- * should be 1 (before mcp response) or 0 (after mcp response)
|
|
|
+ * should not get too big. If the MFW is more than 5 pulses
|
|
|
+ * behind, we should worry about it enough to generate an error
|
|
|
+ * log.
|
|
|
*/
|
|
|
- if ((drv_pulse != mcp_pulse) &&
|
|
|
- (drv_pulse != ((mcp_pulse + 1) & MCP_PULSE_SEQ_MASK))) {
|
|
|
- /* someone lost a heartbeat... */
|
|
|
- BNX2X_ERR("drv_pulse (0x%x) != mcp_pulse (0x%x)\n",
|
|
|
+ if (((drv_pulse - mcp_pulse) & MCP_PULSE_SEQ_MASK) > 5)
|
|
|
+ BNX2X_ERR("MFW seems hanged: drv_pulse (0x%x) != mcp_pulse (0x%x)\n",
|
|
|
drv_pulse, mcp_pulse);
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
if (bp->state == BNX2X_STATE_OPEN)
|