summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/cpu/armv8/fwcall.c14
-rw-r--r--arch/arm/include/asm/system.h11
-rw-r--r--arch/arm/mach-meson/board.c2
-rw-r--r--board/xilinx/zynqmp/zynqmp.c2
4 files changed, 14 insertions, 15 deletions
diff --git a/arch/arm/cpu/armv8/fwcall.c b/arch/arm/cpu/armv8/fwcall.c
index 079e250cbe..6bb68f2ed3 100644
--- a/arch/arm/cpu/armv8/fwcall.c
+++ b/arch/arm/cpu/armv8/fwcall.c
@@ -17,7 +17,7 @@
* x0~x7: input arguments
* x0~x3: output arguments
*/
-void hvc_call(struct pt_regs *args)
+static void hvc_call(struct pt_regs *args)
{
asm volatile(
"ldr x0, %0\n"
@@ -75,13 +75,21 @@ void smc_call(struct pt_regs *args)
"x16", "x17");
}
-void __noreturn psci_system_reset(bool conduit_smc)
+/*
+ * For now, all systems we support run at least in EL2 and thus
+ * trigger PSCI calls to EL3 using SMC. If anyone ever wants to
+ * use PSCI on U-Boot running below a hypervisor, please detect
+ * this and set the flag accordingly.
+ */
+static const bool use_smc_for_psci = true;
+
+void __noreturn psci_system_reset(void)
{
struct pt_regs regs;
regs.regs[0] = ARM_PSCI_0_2_FN_SYSTEM_RESET;
- if (conduit_smc)
+ if (use_smc_for_psci)
smc_call(&regs);
else
hvc_call(&regs);
diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h
index c18e1e3a10..5166c653f3 100644
--- a/arch/arm/include/asm/system.h
+++ b/arch/arm/include/asm/system.h
@@ -107,15 +107,6 @@ void smp_kick_all_cpus(void);
void flush_l3_cache(void);
/*
- *Issue a hypervisor call in accordance with ARM "SMC Calling convention",
- * DEN0028A
- *
- * @args: input and output arguments
- *
- */
-void hvc_call(struct pt_regs *args);
-
-/*
*Issue a secure monitor call in accordance with ARM "SMC Calling convention",
* DEN0028A
*
@@ -124,7 +115,7 @@ void hvc_call(struct pt_regs *args);
*/
void smc_call(struct pt_regs *args);
-void __noreturn psci_system_reset(bool smc);
+void __noreturn psci_system_reset(void);
#endif /* __ASSEMBLY__ */
diff --git a/arch/arm/mach-meson/board.c b/arch/arm/mach-meson/board.c
index 1dd53e2313..f159cbf849 100644
--- a/arch/arm/mach-meson/board.c
+++ b/arch/arm/mach-meson/board.c
@@ -43,7 +43,7 @@ void dram_init_banksize(void)
void reset_cpu(ulong addr)
{
- psci_system_reset(true);
+ psci_system_reset();
}
static struct mm_region gxbb_mem_map[] = {
diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c
index 566b5e8d2a..94132f809f 100644
--- a/board/xilinx/zynqmp/zynqmp.c
+++ b/board/xilinx/zynqmp/zynqmp.c
@@ -430,5 +430,5 @@ int board_usb_cleanup(int index, enum usb_init_type init)
void reset_misc(void)
{
- psci_system_reset(true);
+ psci_system_reset();
}