ARM: meson: Add support for fastboot_set_reboot_flag()
authorNeil Armstrong <narmstrong@baylibre.com>
Wed, 22 May 2019 11:30:25 +0000 (13:30 +0200)
committerNeil Armstrong <narmstrong@baylibre.com>
Mon, 12 Aug 2019 08:05:10 +0000 (10:05 +0200)
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 <narmstrong@baylibre.com>
arch/arm/mach-meson/board-common.c

index 18383f7..9b3fb47 100644 (file)
 #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