artik710: check the ALIVESCRATCH7 register to determine reboot mode
authorJaehoon Chung <jh80.chung@samsung.com>
Mon, 4 Dec 2017 09:32:48 +0000 (18:32 +0900)
committerJaehoon Chung <jh80.chung@samsung.com>
Mon, 21 Jan 2019 07:08:00 +0000 (16:08 +0900)
Check the ALIVESCRATCH7 register to determine reboot mode
(download/fota/recovery).

Change-Id: I2a045eb7fbeaea5b3b7306ecdafb3148bd4ae3cf
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
board/nexell/s5p6818/artik710_raptor/board.c

index c0ae7b150737b5f66e3d606a2d8318e82601e8d2..fbfe46b557afaebe83147cf79b2985fbbf157fc2 100644 (file)
@@ -226,6 +226,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)
 {
@@ -326,6 +352,8 @@ int board_late_init(void)
 #ifdef CONFIG_ARTIK_OTA
        check_ota_update();
 #endif
+       check_reboot_mode();
+
        return 0;
 }