summaryrefslogtreecommitdiffstats
path: root/openpower/patches/p8dtu-patches/hostboot-p8/0006-send-board-ID-to-ipmi.patch
diff options
context:
space:
mode:
Diffstat (limited to 'openpower/patches/p8dtu-patches/hostboot-p8/0006-send-board-ID-to-ipmi.patch')
-rw-r--r--openpower/patches/p8dtu-patches/hostboot-p8/0006-send-board-ID-to-ipmi.patch108
1 files changed, 108 insertions, 0 deletions
diff --git a/openpower/patches/p8dtu-patches/hostboot-p8/0006-send-board-ID-to-ipmi.patch b/openpower/patches/p8dtu-patches/hostboot-p8/0006-send-board-ID-to-ipmi.patch
new file mode 100644
index 00000000..58ddb2d4
--- /dev/null
+++ b/openpower/patches/p8dtu-patches/hostboot-p8/0006-send-board-ID-to-ipmi.patch
@@ -0,0 +1,108 @@
+From 73ba34b74551c5f61a1f2c93f48a7f59cb576cd6 Mon Sep 17 00:00:00 2001
+From: Jim Yuan <jim.yuan@supermicro.com>
+Date: Tue, 11 Oct 2016 10:26:14 -0700
+Subject: [PATCH 06/14] send board ID to ipmi
+
+Signed-off-by: Jim Yuan <jim.yuan@supermicro.com>
+---
+ 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
+
OpenPOWER on IntegriCloud