--- ./source/private_module/SRC/mpa_adapter_app.c	2019-06-24 09:48:55.208962597 +0000
+++ ./source/private_module/SRC/mpa_adapter_app.c.hotpatch	2019-07-16 13:53:09.715935000 +0000
@@ -10210,22 +10210,6 @@
     return RETURN_INVALID;
 }
  
-  /******************************************************************************
-  *     : MPAIntf_GetFruAllAlarmInfo
-  *   : ȡFRUۺϸ澯״̬
-  *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
-  *             DriverId    : ID ͡FRUIDDEVICE IDϢ
-  *             Alarm       : 澯״̬
-  *   : Alarm       : 澯״̬
-  *   ֵ  : OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ      :
-  *  1.       : 2014418
-  *           : shufan 204084
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
 OSP_S32 MPAIntf_GetFruAllAlarmInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Alarm, OSP_U32 Length)
 {
     MPA_CMD_INFO_S MpaCmd;
@@ -10233,6 +10217,10 @@
     DAL_MPA_ADDR_S *MpaAddr = NULL;
     OSP_U32 CmdIndex = 0;
     OSP_U32 SimulateFlag = FALSE;
+    OSP_S32 ret = DRV_RETURN_ERROR;
+    static OSP_U64 Alarm9545KeepTime[32] = {0};
+    OSP_U32 i = 0;  ALARM_E *Type = NULL;
+    OSP_U32 Alarm9545Index = 0;
 
     if ((NULL == EnclAddr) || (NULL == Alarm))
     {
@@ -10254,24 +10242,18 @@
     {
         BmcDataIn[0] = sizeof(OSP_U8);
         BmcDataIn[1] = (OSP_U8)(Length / sizeof(ALARM_E));
-
-        /*2015-7-25 c00221000 for DTS2015072500001 begin: 汾H1汾,Ϊ澯ۺϸ⵼½ӿڵʧ */
         if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_ENCL, 0) == MpaCmd.FruId)
         {
             if(DRV_FRAMEMODEL_PCIE_CTRL_2U_C1_BMC == MpaAddr->DevFrame)
                 return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Alarm);
             return MPA_V2BmcFrameAlarmInfoProcess((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, BmcDataIn, Alarm);
         }
-        /*2015-7-25 c00221000 for DTS2015072500001 end*/
-
         return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Alarm);
     }
 
     /*ģӲ̿AR-0000223578-023-004*/
     for (CmdIndex = 0; CmdIndex < g_MpaAlarmTableLen; CmdIndex++)
     {
-        /* BEGIN: Added by liwei 90003951, 2016/3/01  ⵥ:DTS2016022706945 
-        , PANGEA_V200R002C20ģ⼶Ϻ󣬸λSESoopsλ */
         if(((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame == g_MpaAlarmId[CmdIndex].DevFrame
             && (g_MpaAlarmId[CmdIndex].FruId == DAL_FRU_ID(DriverId)))
         {
@@ -10287,37 +10269,55 @@
                 Alarm[g_MpaAlarmId[CmdIndex].DeviceId] = g_MpaAlarmId[CmdIndex].Simulate;
                 SimulateFlag = TRUE;
             }
-        }
-        /* END: Added by liwei 90003951, 2016/3/01  ⵥ:DTS2016022706945 
-        , PANGEA_V200R002C20ģ⼶Ϻ󣬸λSESoopsλ */    
+        } 
     }
-
     if(TRUE == SimulateFlag)
     {
         return DRV_RETURN_OK;
+    }else{
+        ret = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Alarm);
+        if (DRV_RETURN_OK != ret){ 
+            return ret; }
+        if ((DAL_FRU_LOGIC_TYPE(DriverId) == DAL_FRU_LOGIC_TYPE_CTRLBOARD) 
+            && (DRV_FRAMEMODEL_12GSAS_CTL_2U25_EAR <= MpaAddr->DevFrame) 
+            && (DRV_FRAMEMODEL_12GSAS_EXP_END >= MpaAddr->DevFrame))
+        {
+            Type = (ALARM_E *)MPA_Malloc(Length + 1);
+            if(NULL == Type){ return ret; }
+            OSAL_MemSet_s(Type, Length + 1, 0, Length + 1);
+            if(DRV_RETURN_OK != MPAIntf_GetFruAllAlarmType((OSP_VOID *)MpaAddr, DriverId, Type, Length))
+            { MPA_Free(Type); return ret; }
+            for(i = 0; i < (Length/sizeof(ALARM_E)); i++)
+            {
+                if(*(Type + i) == ALARM_9545)
+                {
+                    if(*(OSP_U8 *)(Alarm + i) == 1)
+                    {
+                        if(Alarm9545KeepTime[Alarm9545Index] == 0)
+                        {
+                            Alarm9545KeepTime[Alarm9545Index] = jiffies;
+                            *(OSP_U8 *)(Alarm + i) = 0;
+                        }
+                        else
+                        {
+                            if(jiffies - Alarm9545KeepTime[Alarm9545Index] <= (60 * HZ))
+                            {
+                                *(OSP_U8 *)(Alarm + i) = 0;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        Alarm9545KeepTime[Alarm9545Index] = 0;
+                    }
+                    Alarm9545Index++;
+                }
+            }
+            MPA_Free(Type);
+        }
     }
-    else
-    {
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Alarm);
-    }
- }
-
- /******************************************************************************
- *     : MPAIntf_SetAlarmInfo
- *   : ģ澯״̬
- *   : EnclAddr  
- *             DriverId  
- *             Alarm     
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131211
- *           : zhanwenbin 90003961
- *    ޸   : ɺ
- *
- ******************************************************************************/
+    return ret;
+}
 OSP_S32 MPAIntf_SetAlarmInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 Alarm)
 {
     MPA_CMD_INFO_S MpaCmd;
@@ -10804,7 +10804,7 @@
     
 }
 
-
+
  /******************************************************************************
  *     : MPAIntf_GetEnclFruVisibleMap
  *   : ѯfruؿɼ
