summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBill Schwartz <whs@us.ibm.com>2015-01-10 09:53:02 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2015-01-16 11:42:15 -0600
commit40bdceb3643cc691ef5caf0160abb48c834a9c4a (patch)
tree6d195111a704c87f8718449eaf1c365f34399930
parent54f90468fb55fbb11fb6fdff819f55c27d396e6e (diff)
downloadtalos-hostboot-40bdceb3643cc691ef5caf0160abb48c834a9c4a.tar.gz
talos-hostboot-40bdceb3643cc691ef5caf0160abb48c834a9c4a.zip
Sensor: System ACPI Power state
Upon establishing BMC communication, set "System ACPI Power State" Sensor to "Legacy ON" Change-Id: I96f771305547ccba2fa9ef34edbdc2fc34c5418e RTC: 108825 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/15079 Tested-by: Jenkins Server Reviewed-by: Brian Silver <bsilver@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
-rw-r--r--src/include/usr/ipmi/ipmiif.H5
-rw-r--r--src/include/usr/ipmi/ipmipowerstate.H84
-rw-r--r--src/usr/initservice/istepdispatcher/istepdispatcher.C14
-rw-r--r--src/usr/ipmi/ipmipowerstate.C86
-rw-r--r--src/usr/ipmi/makefile3
5 files changed, 190 insertions, 2 deletions
diff --git a/src/include/usr/ipmi/ipmiif.H b/src/include/usr/ipmi/ipmiif.H
index cd3c26161..a3f11aebb 100644
--- a/src/include/usr/ipmi/ipmiif.H
+++ b/src/include/usr/ipmi/ipmiif.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2014 */
+/* Contributors Listed Below - COPYRIGHT 2012,2015 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -117,6 +117,9 @@ namespace IPMI
inline const command_t get_device_id(void)
{ return std::make_pair(NETFUN_APP, 0x01); }
+ inline const command_t set_acpi_power_state(void)
+ { return std::make_pair(NETFUN_APP, 0x06); }
+
inline const command_t set_watchdog(void)
{ return std::make_pair(NETFUN_APP, 0x24); }
diff --git a/src/include/usr/ipmi/ipmipowerstate.H b/src/include/usr/ipmi/ipmipowerstate.H
new file mode 100644
index 000000000..b65275075
--- /dev/null
+++ b/src/include/usr/ipmi/ipmipowerstate.H
@@ -0,0 +1,84 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/include/usr/ipmi/ipmipowerstate.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2014,2015 */
+/* [+] International Business Machines Corp. */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+#ifndef __IPMIPOWERSTATE_H
+#define __IPMIPOWERSTATE_H
+/**
+ * @file ipmiPowerState.H
+ *
+ * IPMI set ACPI Power State
+ *
+ */
+
+/******************************************************************************/
+// Includes
+/******************************************************************************/
+#include <stdint.h>
+#include <errl/errlentry.H>
+
+namespace IPMI
+{
+
+/******************************************************************************/
+// Enumerations
+/******************************************************************************/
+/**
+ * @brief Used in Byte 1 field of the set ACPI Power State command
+ */
+enum ACPI_SYSTEM_POWER_STATE_TO_SET
+{
+ SET_SYSTEM_POWER_STATE = 0x80, // bit 7 set system power state
+ SET_LEGACY_ON = 0x20, // bit 6:0 indicates On for systems that
+ // don't support ACPI or have ACPI
+ // capabilities disabled
+
+};
+
+/**
+ * @brief Used in Byte 2 field of the set ACPI Power State command
+ */
+enum ACPI_DEVICE_POWER_STATE_TO_SET
+{
+ NO_CHANGE_DEVICE_POWER = 0x7F, // Use this value when communicating a
+ // change to the system power state
+ // without a change to the device
+ // power state
+
+};
+
+/******************************************************************************/
+// Functions
+/******************************************************************************/
+
+/**
+ * @brief sets the ACPI Power State to Legacy On
+ *
+ * @return error
+ */
+errlHndl_t setACPIPowerState();
+
+
+} // namespace
+
+#endif
diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.C b/src/usr/initservice/istepdispatcher/istepdispatcher.C
index 50aac0a73..7aae59bd2 100644
--- a/src/usr/initservice/istepdispatcher/istepdispatcher.C
+++ b/src/usr/initservice/istepdispatcher/istepdispatcher.C
@@ -66,6 +66,7 @@
#include <hwpisteperror.H>
#include <pnor/pnorif.H>
#include <ipmi/ipmiwatchdog.H> //IPMI watchdog timer
+#include <ipmi/ipmipowerstate.H> //IPMI System ACPI Power State
#include <config.h>
namespace ISTEPS_TRACE
@@ -197,6 +198,19 @@ void IStepDispatcher::init(errlHndl_t &io_rtaskRetErrl)
break;
}
}
+#ifdef CONFIG_BMC_IPMI
+ //set ACPI power state
+ errlHndl_t err_ipmi = IPMI::setACPIPowerState();
+
+ if(err_ipmi)
+ {
+ TRACFCOMP(g_trac_initsvc,
+ "init: ERROR: IPMI set ACPI Power State Failed");
+ err_ipmi->collectTrace("INITSVC", 1024);
+ errlCommit(err_ipmi, INITSVC_COMP_ID );
+ }
+#endif
+
if(iv_istepMode)
{
diff --git a/src/usr/ipmi/ipmipowerstate.C b/src/usr/ipmi/ipmipowerstate.C
new file mode 100644
index 000000000..0d07cf180
--- /dev/null
+++ b/src/usr/ipmi/ipmipowerstate.C
@@ -0,0 +1,86 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/ipmi/ipmipowerstate.C $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2014,2015 */
+/* [+] International Business Machines Corp. */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+/**
+ * @file ipmipowerstate.C
+ *
+ * Ipmi set ACPI Power State
+ *
+ */
+
+/******************************************************************************/
+// Includes
+/******************************************************************************/
+#include <stdint.h>
+#include <errl/errlentry.H>
+#include <ipmi/ipmipowerstate.H>
+#include <ipmi/ipmiif.H>
+
+/******************************************************************************/
+// Globals/Constants
+/******************************************************************************/
+// Defined in ipmidd.C
+extern trace_desc_t * g_trac_ipmi;
+#define IPMI_TRAC(printf_string,args...) \
+ TRACFCOMP(g_trac_ipmi,"ps: "printf_string,##args)
+
+namespace IPMI
+{
+
+/******************************************************************************/
+// Functions
+/******************************************************************************/
+
+errlHndl_t setACPIPowerState()
+{
+ errlHndl_t err_ipmi = NULL;
+
+ size_t len = 2; // IPMI spec has request data at 2 bytes
+
+ //create request data buffer
+ uint8_t* data = new uint8_t[len];
+
+ IPMI::completion_code cc = IPMI::CC_UNKBAD;
+
+ data[0] = SET_SYSTEM_POWER_STATE | SET_LEGACY_ON;
+ data[1] = NO_CHANGE_DEVICE_POWER;
+
+ err_ipmi = IPMI::sendrecv(IPMI::set_acpi_power_state(), cc, len, data);
+
+ //cleanup buffer
+ delete[] data;
+
+ if(cc != IPMI::CC_OK)
+ {
+ IPMI_TRAC("Set ACPI Power State: 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;
+}
+
+} // namespace
+
diff --git a/src/usr/ipmi/makefile b/src/usr/ipmi/makefile
index 00a60052e..68b77d236 100644
--- a/src/usr/ipmi/makefile
+++ b/src/usr/ipmi/makefile
@@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2011,2014
+# Contributors Listed Below - COPYRIGHT 2011,2015
# [+] International Business Machines Corp.
#
#
@@ -34,6 +34,7 @@ OBJS += ipmiconfig.o
OBJS += ipmisensor.o
OBJS += ipmiwatchdog.o
OBJS += ipmifruinv.o
+OBJS += ipmipowerstate.o
#SUBDIRS += test.d
OpenPOWER on IntegriCloud