From 8c9e1af0b5df7ee1ff32e6192ee0252315900895 Mon Sep 17 00:00:00 2001 From: Sandrine Bailleux Date: Thu, 18 Aug 2016 09:24:40 +0100 Subject: [PATCH] Add WFI in platform's unexpected error handlers This patch adds a WFI instruction in the default implementations of plat_error_handler() and plat_panic_handler(). This potentially reduces power consumption by allowing the hardware to enter a low-power state. The same change has been made to the FVP and Juno platform ports. Change-Id: Ia4e6e1e5bf1ed42efbba7d0ebbad7be8d5f9f173 --- plat/arm/board/fvp/fvp_err.c | 5 +++-- plat/arm/board/juno/juno_err.c | 5 +++-- plat/common/aarch64/platform_helpers.S | 2 ++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/plat/arm/board/fvp/fvp_err.c b/plat/arm/board/fvp/fvp_err.c index 7867e49c4..f8ea6a032 100644 --- a/plat/arm/board/fvp/fvp_err.c +++ b/plat/arm/board/fvp/fvp_err.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -28,6 +28,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include @@ -61,5 +62,5 @@ void plat_error_handler(int err) /* Loop until the watchdog resets the system */ for (;;) - ; + wfi(); } diff --git a/plat/arm/board/juno/juno_err.c b/plat/arm/board/juno/juno_err.c index 497cc7fa3..fa19da764 100644 --- a/plat/arm/board/juno/juno_err.c +++ b/plat/arm/board/juno/juno_err.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -28,6 +28,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include @@ -45,5 +46,5 @@ void plat_error_handler(int err) /* Loop until the watchdog resets the system */ for (;;) - ; + wfi(); } diff --git a/plat/common/aarch64/platform_helpers.S b/plat/common/aarch64/platform_helpers.S index 08638303a..a134ded02 100644 --- a/plat/common/aarch64/platform_helpers.S +++ b/plat/common/aarch64/platform_helpers.S @@ -130,6 +130,7 @@ endfunc bl1_plat_prepare_exit * ----------------------------------------------------- */ func plat_error_handler + wfi b plat_error_handler endfunc plat_error_handler @@ -139,5 +140,6 @@ endfunc plat_error_handler * ----------------------------------------------------- */ func plat_panic_handler + wfi b plat_panic_handler endfunc plat_panic_handler