aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/opal-api/opal-cec-power-down-5.rst18
-rw-r--r--doc/opal-api/return-codes.rst6
-rw-r--r--platforms/ibm-fsp/common.c2
3 files changed, 21 insertions, 5 deletions
diff --git a/doc/opal-api/opal-cec-power-down-5.rst b/doc/opal-api/opal-cec-power-down-5.rst
index 6daea3d..bdcb84e 100644
--- a/doc/opal-api/opal-cec-power-down-5.rst
+++ b/doc/opal-api/opal-cec-power-down-5.rst
@@ -24,16 +24,28 @@ Return Values
-------------
``OPAL_SUCCESS``
- the power down was updated successful
+ the power down request was successful.
+ This may/may not result in immediate power down. An OS should
+ spin in a loop after getting `OPAL_SUCCESS` as it is likely that there
+ will be a delay before instructions stop being executed.
``OPAL_BUSY``
- unable to power down, try again later
+ unable to power down, try again later.
+
+``OPAL_BUSY_EVENT``
+ Unable to power down, call `opal_run_pollers` and try again.
``OPAL_PARAMETER``
a parameter was incorrect
``OPAL_INTERNAL_ERROR``
- hal code sent incorrect data to hardware device
+ Something went wrong, and waiting and trying again is unlikely to be
+ successful. Although, considering that in a shutdown code path, there's
+ unlikely to be any other valid option to take, retrying is perfectly valid.
+
+ In older OPAL versions (prior to skiboot v5.9), on IBM FSP systems, this
+ return code was returned erroneously instead of OPAL_BUSY_EVENT during an
+ FSP Reset/Reload.
``OPAL_UNSUPPORTED``
this platform does not support being powered off.
diff --git a/doc/opal-api/return-codes.rst b/doc/opal-api/return-codes.rst
index 03ea5c1..3ea4a3d 100644
--- a/doc/opal-api/return-codes.rst
+++ b/doc/opal-api/return-codes.rst
@@ -40,7 +40,8 @@ OPAL_BUSY
#define OPAL_BUSY -2
-Try again later.
+Try again later. Related to `OPAL_BUSY_EVENT`, but `OPAL_BUSY` indicates that the
+caller need not call `OPAL_POLL_EVENTS` itself. **TODO** Clarify current situation.
OPAL_PARTIAL
------------
@@ -126,6 +127,9 @@ OPAL_BUSY_EVENT
#define OPAL_BUSY_EVENT -12
+The same as `OPAL_BUSY` but signals that the OS should call `OPAL_POLL_EVENTS` as
+that may be required to get into a state where the call will succeed.
+
OPAL_HARDWARE_FROZEN
--------------------
::
diff --git a/platforms/ibm-fsp/common.c b/platforms/ibm-fsp/common.c
index 237b63f..0a9b06f 100644
--- a/platforms/ibm-fsp/common.c
+++ b/platforms/ibm-fsp/common.c
@@ -223,7 +223,7 @@ int64_t ibm_fsp_cec_power_down(uint64_t request)
printf("FSP: Sending shutdown command to FSP...\n");
if (fsp_sync_msg(fsp_mkmsg(FSP_CMD_POWERDOWN_NORM, 1, request), true))
- return OPAL_INTERNAL_ERROR;
+ return OPAL_BUSY_EVENT;
fsp_reset_links();
return OPAL_SUCCESS;