From: Jaehoon Chung Date: Tue, 24 Oct 2017 10:51:34 +0000 (+0900) Subject: artik530: check the ALIVESCRATCH7 register to determine reboot mode X-Git-Tag: submit/tizen/20180327.075642~42 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5c11aa5d2ce2cbc2580f73fe8559ce4c9b49dc11;p=profile%2Fcommon%2Fplatform%2Fkernel%2Fu-boot-artik7.git artik530: check the ALIVESCRATCH7 register to determine reboot mode If kernel sets the reboot mode at ALIVESCRATCH7 register, bootloader should check it to enter proper mode (e.g., download/fota/recovery). Check the ALIVESCRATCH7 register to determine reboot mode. Change-Id: Ia30f562f9c2fd8c07c27df53299171e8721bccc5 Signed-off-by: Jaehoon Chung Signed-off-by: Junghoon Kim --- diff --git a/arch/arm/mach-nexell/include/mach/nexell.h b/arch/arm/mach-nexell/include/mach/nexell.h index b8a0831719..9fd4de9906 100644 --- a/arch/arm/mach-nexell/include/mach/nexell.h +++ b/arch/arm/mach-nexell/include/mach/nexell.h @@ -350,4 +350,14 @@ #endif /* __ASSEMBLY__ */ +/* Use the ALIVESCRATCH7 For Tizen artik reboot */ +#define SCRATCHRSTREG7 0xF4 +#define SCRATCHSETREG7 0xF8 +#define SCRATCHREADREG7 0xFC +#define REBOOT_PREFIX 0x12345670 +#define REBOOT_PREFIX_MASK 0xFFFFFFF0 +#define REBOOT_DOWNLOAD 0x1 +#define REBOOT_RECOVERY 0x2 +#define REBOOT_FOTA 0x3 + #endif /* __NEXELL_H__ */ diff --git a/board/nexell/s5p4418/artik530_raptor/board.c b/board/nexell/s5p4418/artik530_raptor/board.c index 70e608dce9..2fd0e11488 100644 --- a/board/nexell/s5p4418/artik530_raptor/board.c +++ b/board/nexell/s5p4418/artik530_raptor/board.c @@ -277,6 +277,32 @@ void dram_init_banksize(void) gd->bd->bi_dram[0].size = CONFIG_SYS_SDRAM_SIZE; } +static void check_reboot_mode(void) +{ + u32 val; + + val = readl(PHY_BASEADDR_ALIVE + SCRATCHREADREG7); + + /* Clear the reboot mode */ + writel(0xFFFFFFFF, PHY_BASEADDR_ALIVE + SCRATCHRSTREG7); + writel(0x0, PHY_BASEADDR_ALIVE + SCRATCHSETREG7); + + if ((val & REBOOT_PREFIX_MASK) == REBOOT_PREFIX) { + val &= ~REBOOT_PREFIX; + + if (val == REBOOT_DOWNLOAD) + run_command("thordown", 0); + else if (val == REBOOT_RECOVERY) + setenv("bootmode", "recovery"); + else if (val == REBOOT_FOTA) + setenv("bootmode", "fota"); + else + setenv("bootmode", "ramdisk"); + + saveenv(); + } +} + #ifdef CONFIG_DM_PMIC_NXE2000 void pmic_init(void) { @@ -394,6 +420,8 @@ int board_late_init(void) #ifdef CONFIG_ARTIK_OTA check_ota_update(); #endif + check_reboot_mode(); + set_booting_device(); return 0;