--- ./source/private_module/devm/src/eam/entity/ctrl/fru/eam_ctrl_comm.c	2018-04-27 09:52:08.000000000 +0000
+++ ./source/private_module/devm/src/eam/entity/ctrl/fru/eam_ctrl_comm.c.hotpatch	2020-01-11 07:56:46.000000000 +0000
@@ -76,7 +76,7 @@
 MODULE_ID(OSP_DEV);
 
 #define IP_NUM_PER_TYPE (1)
-
+#define EAM_PRINT_LOG_ONCE_PER_HOUR 1
 #define EAM_LIF_SERICEPROTOCOL_STR      "NFS+CIFS"
 #define EAM_LIF_MANAGEMENTPROTOCOL_STR  "--"
 #define EAM_LIF_MIXPROTOCOL_STR         "NFS+CIFS"
@@ -3884,7 +3884,7 @@
     DBG_LogDebug(LOG_ID_0F96, "EAM_FRU: Ignore fru event disMatch objType(%u) ignoreObjType(%u).", objType, ignoreObjType);
     return B_FALSE;
 }
-
+EAM_BOOL g_isEamDDInited = B_TRUE;
 /**************************************************************************
      :  fruı䴦
  :  eventType   -- ¼(/ɾ/ı), om_msg_opcode.h
@@ -3908,22 +3908,22 @@
     EAM_FRU_CHANGE_TASK_S* fruChangeTask = NULL;
     DMI_FRU_CHANGE_INFO_S* fruState = NULL;
 
-    /* (stateChangeΪ ) */
-    /*DTS2014112001381 l00268931 begin*/
     if (NULL == objId)
     {
         DBG_LogWarning(LOG_ID_0F95, "objId is NULL pointer.");
         return;
     }
 
-    /*DTS2014112001381 l00268931 end*/
-
-    /* ģ鿪֮ǰ ¼ */
     if (EAM_STATE_NORMAL != getEamState())
     {
         return;
     }
 
+    if ((!g_isEamDDInited) && (OM_OPCODE_NOTIFY_CHANGE == eventType))
+    {
+		EAM_PRINT_LIMIT_PER_HOUR(EAM_PRINT_LOG_ONCE_PER_HOUR, LOG_ID_0716, DBG_LOG_INFO, "EAM_FRU: Eam DD not inited, ignore change event.");
+        return;
+    }
     if (checkIgnoreFruChangeEvent(objType))
     {
         return;
--- ./source/private_module/devm/src/eam/entity/ctrl/poweron/eam_power_on.c	2018-04-12 08:33:01.000000000 +0000
+++ ./source/private_module/devm/src/eam/entity/ctrl/poweron/eam_power_on.c.hotpatch	2020-01-11 13:17:00.000000000 +0000
@@ -7825,7 +7825,7 @@
     DESTROY_EAM_TASK(task);
     return ret;
 }
-
+extern EAM_BOOL g_isEamDDInited;
 /**************************************************************************
 *     :  ڵ㿪ɹռeam version
 * :  TASK_S *task
@@ -7898,7 +7898,7 @@
     uint32_t* bitmap = 0;
     TASK_S* baseTask = NULL;
     CREATE_EAM_VERSION_TASK_S* nodeCreateEamVersionTask = NULL;
-
+    g_isEamDDInited = B_FALSE;
     /* μ */
     CHECK_FIRM_PARA_IF_FALSE_DBG_AND_RETURN_VOID(NULL != rpcContext);
 
--- ./source/private_module/devm/src/net/entity/ifm/base/net_port_ctrl.c	2018-02-09 07:36:26.000000000 +0000
+++ ./source/private_module/devm/src/net/entity/ifm/base/net_port_ctrl.c.hotpatch	2020-01-11 07:56:46.000000000 +0000
@@ -1455,6 +1455,7 @@
 {
     int32_t  ret = RETURN_OK;
     uint32_t buffLen = 0;
+    uint32_t portType = 0;
     EAM_FRU_CHANGE_TASK_S*  fruChangeTask = NULL;
     FRU_CHANGE_INFO_S* fruChangeInfo = NULL;
 
@@ -1462,6 +1463,12 @@
 
     fruChangeTask = (EAM_FRU_CHANGE_TASK_S*)contex;
 
+    portType = getPortTypeByObjType(fruChangeTask->objType);
+    if (portType >= IFM_PORT_TYPE_BUTT)
+    {
+        return RETURN_OK;
+    }
+
     fruChangeInfo = (FRU_CHANGE_INFO_S*)EAM_MALLOC_RSV_MEM(EAM_RSV_MEM_TYPE_TEMP_DATA, 
         sizeof(FRU_CHANGE_INFO_S));
     if (NULL == fruChangeInfo)
@@ -1481,26 +1488,20 @@
         fruChangeInfo->changeInfo = 
                 (DMI_FRU_CHANGE_INFO_S*)EAM_MALLOC_RSV_MEM(EAM_RSV_MEM_TYPE_FRU_STATE_INFO,
                                             buffLen + sizeof(DMI_FRU_CHANGE_INFO_S));
-
         if (NULL == fruChangeInfo->changeInfo)
         {
             EAM_DBG_LOG_WARNING("Alloc memory for fru change state failed.");
             EAM_FREE_RSV_MEM(EAM_RSV_MEM_TYPE_TEMP_DATA, fruChangeInfo);
             return RETURN_ERROR;
         }
-
         fruChangeInfo->changeInfo->AttributCnt = fruChangeTask->changeInfo->AttributCnt;
-        
         fruChangeInfo->changeInfo->BuffLen = fruChangeTask->changeInfo->BuffLen;
-        
         fruChangeInfo->changeInfo->StateInfo 
                 = (DMI_FRU_CHANGE_STATE_S*)(void*)((char*)fruChangeInfo->changeInfo
                     + sizeof(DMI_FRU_CHANGE_INFO_S));
-        
         (void)EAM_memcpy(fruChangeInfo->changeInfo->StateInfo,
             fruChangeTask->changeInfo->StateInfo, buffLen);
     }
-
     ret = TASK_AsynWork(handlePortFruChange, (void*)fruChangeInfo);
     if (RETURN_OK != ret)
     {
@@ -1508,7 +1509,6 @@
         EAM_FREE_RSV_MEM(EAM_RSV_MEM_TYPE_FRU_STATE_INFO, fruChangeInfo->changeInfo);
         EAM_FREE_RSV_MEM(EAM_RSV_MEM_TYPE_TEMP_DATA, fruChangeInfo);
     }
-    
     return ret;
 }
 
--- ./source/private_module/devm/src/ssp/cfgapp/eam_cfg_comm.c	2018-04-26 09:57:48.000000000 +0000
+++ ./source/private_module/devm/src/ssp/cfgapp/eam_cfg_comm.c.hotpatch	2020-01-11 07:56:46.000000000 +0000
@@ -527,8 +527,8 @@
 char g_bbuOutAlarmMask[BBU_OUT_ALARM_MASK_LEN] = {0};
 EAM_PORT_CONFIG_S g_portConfig = {0};
 EAM_MNT_ETH_INFO_S g_mntEthInfo = {0};
-
-
+#define GET_MAX_ENGINE_NUM(cfgNodeCount, maxNodeOfSingleEngine) \
+    (((cfgNodeCount) + (maxNodeOfSingleEngine) - 1) / (maxNodeOfSingleEngine))
 /*ǷҪSSD̵ٶ*/
 STATIC uint32_t g_uiNeedCheckMgtBoardSpeed = 0;
 EAM_MGT_SERVIE_CONFIG_S g_mgtServiceConfig = {0};
@@ -3888,7 +3888,7 @@
     getConfigNodeNum(&ctrlNum);
     nodeCount = (uint16_t)getNodeCount();
     CHECK_FIRM_PARA_IF_FALSE_DBG_AND_RETURN_ERR(0 != nodeCount);
-    engNum = ctrlNum / nodeCount;
+    engNum = GET_MAX_ENGINE_NUM(ctrlNum, nodeCount);;
 
     DBG_LogDebug(LOG_ID_1387, "EAM_CFG: Receive command to config delay power off. ");
 
@@ -4930,7 +4930,7 @@
 
     return;
 }
-
+extern EAM_BOOL g_isEamDDInited;
 /**************************************************************************
 *     :  ʼDDλͼ¼
 * :  eventId      --  ¼id
@@ -4950,8 +4950,8 @@
     {
         DBG_LogWarning(LOG_ID_036E, "EAM_EVENT: Local node(id %u) init ethPerf failed.", GET_LOCAL_NID());
     }
-    
-    /* ɾֻڼȺϴ */
+    g_isEamDDInited = B_TRUE;
+    DBG_LogInfo(LOG_ID_036E, "EAM_EVENT: Set EAM DD Status Success.");
     if (getEamMasterNodeId() != GET_LOCAL_NID())
     {
         DBG_LogDebug(LOG_ID_036E, "EAM_EVENT: Local node(id %u) is not master.", GET_LOCAL_NID());
--- ./source/private_module/devm/src/ssp/debug/eam_debug.c	2018-04-26 09:57:48.000000000 +0000
+++ ./source/private_module/devm/src/ssp/debug/eam_debug.c.hotpatch	2020-01-11 09:34:54.000000000 +0000
@@ -3488,8 +3488,8 @@
     return;
 }
 #endif
+int32_t diagEamSetDelayPowerOffPatch(int32_t argCnt, char* argBuff[]);
 /**************************************************************************
-     :  ѯenclosureϢ
  :  int32_t argCnt  - 
             char *argBuff[] - 
  :  
@@ -3502,7 +3502,13 @@
     TLV_MSG_OBJ_ENCLOSURE_S* enclosure = NULL;
     char* buffer = NULL;
     char* tmpBuffer = NULL;
-
+    
+    ret = diagEamSetDelayPowerOffPatch(argCnt, argBuff);
+    if (RETURN_OK == ret)
+    {
+        return;
+    }
+    
     if (3 != argCnt)
     {
         DBG_Print("Please input: eam getenclosureinfo [frameWwn].\n");
@@ -3518,18 +3524,14 @@
         DBG_Print("Alloc mem for enclosure failed.\n");
         return;
     }
-
     buffer = EAM_MALLOC_RSV_MEM(EAM_RSV_MEM_TYPE_MIDDLE_TEMP_DATA, DBG_MAX_BUFFER_LEN);
-
     if (NULL == buffer)
     {
         DBG_Print("Buffer is NULL.\n");
         EAM_FREE_RSV_MEM(EAM_RSV_MEM_TYPE_TEMP_DATA, enclosure);
         return;
     }
-
     tmpBuffer = buffer;
-
     /*ӡbuffer 10kӡ¼ܳȣԱԽ*/
     ret = getSingleFrameInfo(LVOS_StrToU64(argBuff[2]), enclosure);
 
@@ -3561,11 +3563,9 @@
         tmpBuffer += snprintf(tmpBuffer, DBG_MAX_LINE_LEN, "temperature:             %d\n", enclosure->temperature);
         tmpBuffer += snprintf(tmpBuffer, DBG_MAX_LINE_LEN, "type:                    %d\n", enclosure->type);
     }
-
     *tmpBuffer = '\0';
     DBG_Print(buffer);
     EAM_FREE_RSV_MEM(EAM_RSV_MEM_TYPE_MIDDLE_TEMP_DATA, buffer);
-
     /*add by c00285210, DTS2014101801086, begin*/
     EAM_FREE_RSV_MEM(EAM_RSV_MEM_TYPE_TEMP_DATA, enclosure);
     /*add by c00285210, DTS2014101801086, end*/
@@ -8465,3 +8465,17 @@
     return;
 }
 #endif  /* End defined(EAM_DT) */
+
+int32_t diagEamSetDelayPowerOffPatch(int32_t argCnt, char* argBuff[])
+{
+    int32_t ret = RETURN_OK;
+
+    if (3 != argCnt || EAM_strncmp(argBuff[2], "sph018", EAM_strlen("sph018")) != 0)
+    {
+       return RETURN_ERROR;
+    }
+    
+    ret = setIntfBoardDelayPowerOff();
+    DBG_LogInfo(LOG_ID_1391, "EAM_CFG: Config delay power off (%d).", ret);
+    return RETURN_OK;
+}
\ No newline at end of file
