samsung: misc: support to check reboot mode with inform register 80/81380/2
authorJaehoon Chung <jh80.chung@samsung.com>
Mon, 25 Jul 2016 12:04:15 +0000 (21:04 +0900)
committerJaehoon Chung <jh80.chung@samsung.com>
Tue, 26 Jul 2016 05:40:52 +0000 (22:40 -0700)
To support the reboot mode, add the check_reboot_mode() function.
This function is checking which reboot mode is with INFORM register.
"inform-num" can get from device-tree with "samsung,reboot-mode"
compatible.

Change-Id: Ib3e201a6ab17afbc163376b139b1a9977fbf7fb6
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
board/samsung/common/misc.c
include/samsung/misc.h

index 16e51fc9cd1927653dd220d70e9d9981db4af318..9dec4849468a35ddfa55ec6204bc62d6d095c073 100644 (file)
@@ -17,6 +17,7 @@
 #include <memalign.h>
 #include <linux/sizes.h>
 #include <asm/arch/cpu.h>
+#include <asm/arch/power.h>
 #include <asm/gpio.h>
 #include <dm.h>
 #include <power/pmic.h>
@@ -905,6 +906,32 @@ void keys_init(void)
 }
 #endif /* CONFIG_LCD_MENU */
 
+void check_reboot_mode(void) {
+       u32 val;
+       int node, inform_num;
+
+       node = fdt_node_offset_by_compatible(gd->fdt_blob, 0,
+                       "samsung,reboot-mode");
+       if (node < 0)
+               return;
+
+       inform_num = fdtdec_get_int(gd->fdt_blob, node, "inform-num", -1);
+       if (inform_num < 0)
+               return;
+
+       /* Get the value from INFORM register */
+       val = get_inform_value(inform_num);
+       if (val < 0)
+               return;
+
+       clear_inform_value(inform_num);
+
+       val &= ~REBOOT_MODE_PREFIX;
+       if (val & REBOOT_DOWNLOAD) {
+               run_command("thordown", 0);
+       }
+}
+
 #ifdef CONFIG_CMD_BMP
 void draw_logo(void)
 {
index a58c5e06ac0233d1aed5e6519a62807d39bb01b3..0a0e99cd4d6fab3b3e075434fad7ba48607fdfc5 100644 (file)
@@ -11,6 +11,11 @@ u32 get_board_rev(void);
 void set_board_info(void);
 #endif
 
+/* Check which reboot mode is */
+#define REBOOT_MODE_PREFIX     0x12345670
+#define REBOOT_DOWNLOAD                0x1
+void check_reboot_mode(void);
+
 #if defined(CONFIG_LCD_MENU) || defined(CONFIG_INTERACTIVE_CHARGER)
 void keys_init(void);
 int check_keys(void);