--- ./source/private_module/unf_common/unf_portman.c	2020-11-02 03:31:36.898501375 +0000
+++ ./source/private_module/unf_common/unf_portman.c.hotpatch	2020-10-31 02:46:04.590501375 +0000
@@ -12050,6 +12050,13 @@
     
     UNF_CHECK_VALID(0x2328, B_TRUE, (NULL != v_pstLPort), return RETURN_ERROR);
     UNF_CHECK_VALID(0x2329, B_TRUE, (NULL != v_pstFcErrCode), return RETURN_ERROR);
+	
+    if ((0 != pstLPort->uiGetFwStateFailCnt) || (0 != pstLPort->uiGetFwStateFailResetCnt))
+    {
+        UNF_OS_MEMCPY(v_pstFcErrCode, &pstLPort->stErrCodeSum, sizeof(UNF_ERRCODE_S));
+        
+        return RETURN_OK;
+    }
 
     UNF_OS_MEMSET(&stFcErrCode, 0, sizeof(UNF_ERRCODE_S));
 
@@ -12105,13 +12112,6 @@
    : 
    ֵ  : UNF_S32
  ú  : 
-   : 
- 
- ޸ʷ      :
-  1.       : 201363
-           : wuping
-    ޸   : ɺ
-DTS2013052902333 
 *****************************************************************************/
 UNF_S32 UNF_CmGetErrorCodeSum(UNF_U32 v_uiPortId, UNF_U8 v_ucPhyId, UNF_VOID * v_puiData)
 {
@@ -16557,7 +16557,7 @@
 
     return;
 }
-
+UNF_VOID UNF_CheckChipNeedRecovery(UNF_LPORT_S * v_pstLPort);
 /*****************************************************************************
      : UNF_CheckPortNeedRecovery
    : Զ˿ͳƣжǷҪreset ϱchip error 
@@ -16583,6 +16583,12 @@
 
     UNF_CHECK_VALID(0x2382, UNF_TRUE, NULL != v_pstLPort, return);
     pstLPort = v_pstLPort;
+    
+    if (UNF_LOW_LEVEL_MGR_TYPE_PASSTIVE == pstLPort->stLowlevelFunc.uiXchgMgrType)
+    {
+        UNF_CheckChipNeedRecovery(pstLPort);
+        return;
+    } 
 
     pstLPort->uiGetFwStateFailCnt++;
     if(GET_STATE_FAIL_CNT < pstLPort->uiGetFwStateFailCnt)
@@ -16628,12 +16634,6 @@
    : ϱģ¼
    : UNF_LPORT_S *v_pstLPort
              UNF_PORT_DYNAMIC_INFO_S *v_pstPortDynamicInfo
-   : 
-   ֵ  : 
- ú  : 
-   : 
- 
- ޸ʷ      :
   1.       : 2014109
            : w90006009
     ޸   : DTS2014091609162 ˿ڲģϢ
@@ -20608,3 +20608,32 @@
     return RETURN_OK;
 }
 
+UNF_VOID UNF_CheckChipNeedRecovery(UNF_LPORT_S * v_pstLPort)
+{
+    UNF_LPORT_S * pstLPort = NULL;
+
+    UNF_CHECK_VALID(0x2382, UNF_TRUE, NULL != v_pstLPort, return);
+    pstLPort = v_pstLPort;
+
+    pstLPort->uiGetFwStateFailCnt++;
+    if (6 <= pstLPort->uiGetFwStateFailCnt)
+    {
+        
+        pstLPort->uiGetFwStateFailCnt = 0;
+        pstLPort->uiGetFwStateFailResetCnt++;   /* ȻFailCntResetCntжϣFailCnt0лͨmailboxϢ */
+        if (1 <= pstLPort->uiGetFwStateFailResetCnt)
+        {
+            UNF_TRACE(0x2631, UNF_LOG_EQUIP_ATT, UNF_MAJOR,
+                      "LPort(0x%x) get firmware state unsuccessful 6 times, begin to report chip error.", 
+                      pstLPort->uiPortId);
+            (UNF_VOID)UNF_SendEvent(pstLPort->uiPortId, 
+                                    UNF_EVENT_ASYN, 
+                                    (UNF_VOID *)pstLPort, 
+                                    (UNF_VOID *)NULL,
+                                    UNF_ProcessCoreErrorTask);
+        }
+    }
+    
+    return;
+}
+
