
On 17/11/2016 17:41, york sun wrote:
On 11/16/2016 04:02 PM, Alexander Graf wrote:
When implementing efi loader support, we can expose runtime services for payloads. One such service is CPU reset.
This patch implements RTS CPU reset support for layerscape systems.
Signed-off-by: Alexander Graf agraf@suse.de Reviewed-by: York Sun york.sun@nxp.com
v4 -> v5:
- Use __efi_runtime tags
arch/arm/cpu/armv8/fsl-layerscape/cpu.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-)
diff --git a/arch/arm/cpu/armv8/fsl-layerscape/cpu.c b/arch/arm/cpu/armv8/fsl-layerscape/cpu.c index b7a2e0c..0b516e3 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/cpu.c +++ b/arch/arm/cpu/armv8/fsl-layerscape/cpu.c @@ -17,6 +17,7 @@ #ifdef CONFIG_MP #include <asm/arch/mp.h> #endif +#include <efi_loader.h> #include <fm_eth.h> #include <fsl-mc/fsl_mc.h> #ifdef CONFIG_FSL_ESDHC @@ -462,9 +463,10 @@ int timer_init(void) return 0; }
-void reset_cpu(ulong addr) +__efi_runtime_data u32 __iomem *rstcr = (u32 *)CONFIG_SYS_FSL_RST_ADDR;
+void __efi_runtime reset_cpu(ulong addr) {
u32 __iomem *rstcr = (u32 *)CONFIG_SYS_FSL_RST_ADDR; u32 val;
/* Raise RESET_REQ_B */
@@ -473,6 +475,33 @@ void reset_cpu(ulong addr) scfg_out32(rstcr, val); }
+#ifdef CONFIG_EFI_LOADER
+void __efi_runtime EFIAPI efi_reset_system(
enum efi_reset_type reset_type,
efi_status_t reset_status,
unsigned long data_size, void *reset_data)
+{
- switch (reset_type) {
- case EFI_RESET_COLD:
- case EFI_RESET_WARM:
reset_cpu(0);
break;
- case EFI_RESET_SHUTDOWN:
/* Nothing we can do */
break;
- }
- while (1) { }
+}
+void efi_reset_system_init(void) +{
efi_add_runtime_mmio(&rstcr, sizeof(*rstcr));
+}
+#endif
phys_size_t board_reserve_ram_top(phys_size_t ram_size) { phys_size_t ram_top = ram_size;
I still have this compiling error
Can you please try my efi-next branch? It should hopefully be properly fixed in there.
Alex