diff options
author | Bill Schwartz <whs@us.ibm.com> | 2015-01-10 09:53:02 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2015-01-16 11:42:15 -0600 |
commit | 40bdceb3643cc691ef5caf0160abb48c834a9c4a (patch) | |
tree | 6d195111a704c87f8718449eaf1c365f34399930 /src/usr | |
parent | 54f90468fb55fbb11fb6fdff819f55c27d396e6e (diff) | |
download | talos-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>
Diffstat (limited to 'src/usr')
-rw-r--r-- | src/usr/initservice/istepdispatcher/istepdispatcher.C | 14 | ||||
-rw-r--r-- | src/usr/ipmi/ipmipowerstate.C | 86 | ||||
-rw-r--r-- | src/usr/ipmi/makefile | 3 |
3 files changed, 102 insertions, 1 deletions
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 |