diff options
-rw-r--r-- | core/utils.c | 4 | ||||
-rw-r--r-- | include/platform.h | 5 | ||||
-rw-r--r-- | platforms/ibm-fsp/apollo.c | 1 | ||||
-rw-r--r-- | platforms/ibm-fsp/firenze.c | 1 |
4 files changed, 10 insertions, 1 deletions
diff --git a/core/utils.c b/core/utils.c index df9a815..5d86ed0 100644 --- a/core/utils.c +++ b/core/utils.c @@ -17,6 +17,7 @@ #include <skiboot.h> #include <lock.h> #include <fsp.h> +#include <platform.h> #include <processor.h> #include <cpu.h> #include <stack.h> @@ -40,7 +41,8 @@ void __noreturn _abort(const char *msg) prlog(PR_EMERG, "Aborting!\n"); backtrace(); - ibm_fsp_terminate(msg); + if (platform.terminate) + platform.terminate(msg); for (;;) ; } diff --git a/include/platform.h b/include/platform.h index 80aa8ba..f1bdc30 100644 --- a/include/platform.h +++ b/include/platform.h @@ -158,6 +158,11 @@ struct platform { */ int64_t (*sensor_read)(uint32_t sensor_hndl, int token, uint32_t *sensor_data); + + /* + * OPAL terminate + */ + void __attribute__((noreturn)) (*terminate)(const char *msg); }; extern struct platform __platforms_start; diff --git a/platforms/ibm-fsp/apollo.c b/platforms/ibm-fsp/apollo.c index be7e6cc..e9616d5 100644 --- a/platforms/ibm-fsp/apollo.c +++ b/platforms/ibm-fsp/apollo.c @@ -63,4 +63,5 @@ DECLARE_PLATFORM(apollo) = { .start_preload_resource = fsp_start_preload_resource, .resource_loaded = fsp_resource_loaded, .sensor_read = ibm_fsp_sensor_read, + .terminate = ibm_fsp_terminate, }; diff --git a/platforms/ibm-fsp/firenze.c b/platforms/ibm-fsp/firenze.c index 4dd07a1..d093802 100644 --- a/platforms/ibm-fsp/firenze.c +++ b/platforms/ibm-fsp/firenze.c @@ -556,4 +556,5 @@ DECLARE_PLATFORM(firenze) = { .start_preload_resource = fsp_start_preload_resource, .resource_loaded = fsp_resource_loaded, .sensor_read = ibm_fsp_sensor_read, + .terminate = ibm_fsp_terminate, } ; |