From 73ba34b74551c5f61a1f2c93f48a7f59cb576cd6 Mon Sep 17 00:00:00 2001 From: Jim Yuan Date: Tue, 11 Oct 2016 10:26:14 -0700 Subject: [PATCH 06/14] send board ID to ipmi Signed-off-by: Jim Yuan --- src/include/usr/ipmi/ipmiif.H | 6 ++++- src/include/usr/ipmi/ipmipowerstate.H | 2 +- .../initservice/istepdispatcher/istepdispatcher.C | 11 ++++++++ src/usr/ipmiext/ipmipowerstate.C | 29 ++++++++++++++++++++++ 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/include/usr/ipmi/ipmiif.H b/src/include/usr/ipmi/ipmiif.H index 4b41cb3bc..8039adbf7 100644 --- a/src/include/usr/ipmi/ipmiif.H +++ b/src/include/usr/ipmi/ipmiif.H @@ -299,7 +299,11 @@ namespace IPMI // user defined power limit from the BMC. inline const command_t get_power_limit(void) { return std::make_pair(NETFUN_GRPEXT, 0x03); } - + + //SMC + inline const command_t set_board_id(void) + { return std::make_pair(NETFUN_NONE, 0x20); } + // Some helper messages // Used to create an empty message for reception inline const command_t no_command(void) diff --git a/src/include/usr/ipmi/ipmipowerstate.H b/src/include/usr/ipmi/ipmipowerstate.H index b65275075..e943e8b66 100644 --- a/src/include/usr/ipmi/ipmipowerstate.H +++ b/src/include/usr/ipmi/ipmipowerstate.H @@ -78,7 +78,7 @@ enum ACPI_DEVICE_POWER_STATE_TO_SET */ errlHndl_t setACPIPowerState(); - +errlHndl_t SmcsetBoardId(); } // namespace #endif diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.C b/src/usr/initservice/istepdispatcher/istepdispatcher.C index 16f1c8a01..0f9731094 100644 --- a/src/usr/initservice/istepdispatcher/istepdispatcher.C +++ b/src/usr/initservice/istepdispatcher/istepdispatcher.C @@ -284,6 +284,17 @@ void IStepDispatcher::init(errlHndl_t &io_rtaskRetErrl) err_ipmi->collectTrace("INITSVC", 1024); errlCommit(err_ipmi, INITSVC_COMP_ID ); } + //send board ID + errlHndl_t err_ipmi1 = IPMI::SmcsetBoardId(); + + if(err_ipmi1) + { + TRACFCOMP(g_trac_initsvc, + "init: ERROR: IPMI set Board Id Failed"); + err_ipmi->collectTrace("INITSVC", 1024); + errlCommit(err_ipmi1, INITSVC_COMP_ID ); + } + #endif diff --git a/src/usr/ipmiext/ipmipowerstate.C b/src/usr/ipmiext/ipmipowerstate.C index 30c2a70ef..f8e61f82b 100644 --- a/src/usr/ipmiext/ipmipowerstate.C +++ b/src/usr/ipmiext/ipmipowerstate.C @@ -50,6 +50,35 @@ namespace IPMI /******************************************************************************/ // Functions /******************************************************************************/ +errlHndl_t SmcsetBoardId() +{ + errlHndl_t err_ipmi = NULL; + + size_t len = 10; + + //create request data buffer + uint8_t* data = new uint8_t[len]; + + IPMI::completion_code cc = IPMI::CC_UNKBAD; + //P8DTU board ID 0933 + data[0] = 0x33; + data[1] = 0x9; + memset(&data[2], 0, 8); + err_ipmi = IPMI::sendrecv(IPMI::set_board_id(), cc, len, data); + + //cleanup buffer + delete[] data; + + if(cc != IPMI::CC_OK) + { + IPMI_TRAC("Set board id: BMC returned not ok CC[%x]",cc); + // should we log error and then retry? + // what happens if the communication is broken + // reset will try and set it again. + } + + return err_ipmi; +} errlHndl_t setACPIPowerState() { -- 2.16.2.windows.1