Add support for OEM Power Modes
- Allow mode to be set via PassThrough interface
- Allow non-customer OEM power modes to be persisted
- Persist any OEM power mode settings
- moved mode related code from Status to PowerMode object
- merged PowerIPS into PowerMode object
Tested on Everest and Rainier.
Setting mode through PassThrough/ce-login:
busctl call org.open_power.OCC.Control /org/open_power/control/occ0 org.open_power.OCC.PassThrough SetMode yq 11 3600
Trace (via PassThrough interface)
openpower-occ-control[4440]: PassThrough::setMode() Setting Power Mode 11 (data: 3600)
openpower-occ-control[4440]: PowerMode::sendModeChange: SET_MODE(11,3600) command to OCC0 (9 bytes)
Trace (setting mode via GUI/Redfish):
openpower-occ-control[4440]: Power Mode Change Requested: xyz.openbmc_project.Control.Power.Mode.PowerMode.MaximumPerformance
openpower-occ-control[4440]: PowerMode::sendModeChange: SET_MODE(12,0) command to OCC0 (9 bytes)
Verified when system in any OEM mode that Redfish also reports OEM
Verified all modes are persisted across PM Complex resets and reboots
Change-Id: Idd0be05cb6fd74dbd0776145f212c49addd1c365
Signed-off-by: Chris Cain <cjcain@us.ibm.com>
diff --git a/occ_command.hpp b/occ_command.hpp
index ff8347b..aee4c58 100644
--- a/occ_command.hpp
+++ b/occ_command.hpp
@@ -45,10 +45,11 @@
enum class SysPwrMode
{
NO_CHANGE = 0,
- DISABLE = 0x01, // Disable / Static Base Frequencey
+ STATIC = 0x01, // Static Base Frequencey
SFP = 0x03, // Static Frequency Point (requires freqPt)
SAFE = 0x04, // reported when system is in SAFE mode (not settable)
POWER_SAVING = 0x05, // Static Power Saving
+ MAX_FREQ = 0x09, // Maximum Frequency (per chip)
DYNAMIC_PERF = 0x0A, // Dynamic / Balanced Performance
FFO = 0x0B, // Fixed Frequency Override (requires freqPt)
MAX_PERF = 0x0C // Maximum Performance
@@ -56,8 +57,11 @@
// Only some of the SysPwrModes are currently supported and allowed to be set
#define VALID_POWER_MODE_SETTING(mode) \
- ((mode == SysPwrMode::DISABLE) || (mode == SysPwrMode::POWER_SAVING) || \
+ ((mode == SysPwrMode::STATIC) || (mode == SysPwrMode::POWER_SAVING) || \
(mode == SysPwrMode::DYNAMIC_PERF) || (mode == SysPwrMode::MAX_PERF))
+#define VALID_OEM_POWER_MODE_SETTING(mode) \
+ ((mode == SysPwrMode::SFP) || (mode == SysPwrMode::FFO) || \
+ (mode == SysPwrMode::MAX_FREQ))
enum class RspStatus
{