Add support for fastboot_set_reboot_flag() by storing the reboot
flag in the common code to be used by the custom PSCI reboot handler.

Signed-off-by: Neil Armstrong <narmstr...@baylibre.com>
---
 arch/arm/mach-meson/board-common.c | 33 ++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/arch/arm/mach-meson/board-common.c 
b/arch/arm/mach-meson/board-common.c
index 18383f774e..9b3fb4707d 100644
--- a/arch/arm/mach-meson/board-common.c
+++ b/arch/arm/mach-meson/board-common.c
@@ -14,6 +14,11 @@
 #include <asm/unaligned.h>
 #include <efi_loader.h>
 
+#if CONFIG_IS_ENABLED(FASTBOOT)
+#include <asm/psci.h>
+#include <fastboot.h>
+#endif
+
 DECLARE_GLOBAL_DATA_PTR;
 
 __weak int board_init(void)
@@ -142,7 +147,35 @@ int board_late_init(void)
        return meson_board_late_init();
 }
 
+#if CONFIG_IS_ENABLED(FASTBOOT)
+static unsigned int reboot_reason = REBOOT_REASON_NORMAL;
+
+int fastboot_set_reboot_flag()
+{
+       reboot_reason = REBOOT_REASON_BOOTLOADER;
+
+       printf("Using reboot reason: 0x%x\n", reboot_reason);
+
+       return 0;
+}
+
+void reset_cpu(ulong addr)
+{
+       struct pt_regs regs;
+
+       regs.regs[0] = ARM_PSCI_0_2_FN_SYSTEM_RESET;
+       regs.regs[1] = reboot_reason;
+
+       printf("Rebooting with reason: 0x%lx\n", regs.regs[1]);
+
+       smc_call(&regs);
+
+       while (1)
+               ;
+}
+#else
 void reset_cpu(ulong addr)
 {
        psci_system_reset();
 }
+#endif
-- 
2.22.0

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to