Message ID | 1479335701-149961-6-git-send-email-agraf@suse.de |
---|---|
State | Superseded |
Delegated to: | York Sun |
Headers | show |
On 11/16/2016 02:34 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> Got compiling errors here +(ls2080ardb_nand,ls2080aqds_nand,ls1043ardb_nand,ls1043ardb_sdcard) ../include/efi_loader.h:184:91: note: expected 'void **' but argument is of type 'u32 **' This error seems gone after "7/7 efi_loader: Fix efi_add_runtime_mmio definition". Maybe reorder them? Another one +(ls1046aqds_sdcard_ifc,ls1043aqds,ls1046aqds_nand,ls1046aqds,ls1046ardb_qspi,ls1043aqds_qspi,ls1043aqds_nand,ls1046aqds_lpuart,ls1043aqds_lpuart,ls1046aqds_sdcard_qspi,ls1043aqds_sdcard_qspi,ls1043aqds_nor_ddr3,ls1046ardb_sdcard,ls1046aqds_qspi,ls1043aqds_sdcard_ifc,ls1046ardb_emmc) build/../arch/arm/cpu/armv8/fsl-layerscape/cpu.c:484: multiple definition of `efi_reset_system' York
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;