summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShohei Sakamoto <sakamotos@casio.co.jp>2015-12-08 22:15:51 +0900
committerShohei Sakamoto <sakamotos@casio.co.jp>2015-12-10 11:14:07 +0900
commit11025bcb995a46418cfb3d960b417157933b175e (patch)
tree7c60bbc5c6f2fbb14ab5501dd4031af708bb94dd
parenta4242697392ceeb27bbe652099575eea455be212 (diff)
downloadkoi-uboot-11025bcb995a46418cfb3d960b417157933b175e.tar.gz
Add UI for select recovery mode
Added fastboot/recovery selector. Fixed "fastboot flash kernel/ramdisk" fails when entering fastboot-mode by pressing VOLUME-UP key. Change-Id: Ibb35cd4630f7a16812da2032dd88185c61ae2e94 Signed-off-by: Shohei Sakamoto <sakamotos@casio.co.jp>
-rw-r--r--board/samsung/koi/koi.c222
-rw-r--r--common/cmd_lcd.c2
-rw-r--r--include/configs/koi.h3
3 files changed, 68 insertions, 159 deletions
diff --git a/board/samsung/koi/koi.c b/board/samsung/koi/koi.c
index beb27f1d8..4a5073b94 100644
--- a/board/samsung/koi/koi.c
+++ b/board/samsung/koi/koi.c
@@ -306,7 +306,7 @@ unsigned int check_key(void)
unsigned int pwr, home, back;
- /* GPX1_7 : Volume Down (F1) Key */
+ /* GPX1_7 : Volume Up */
s5p_gpio_direction_input(&gpio2->x1, 7);
s5p_gpio_set_pull(&gpio2->x1, 7, GPIO_PULL_UP);
@@ -314,7 +314,7 @@ unsigned int check_key(void)
s5p_gpio_direction_input(&gpio2->x2, 7);
s5p_gpio_set_pull(&gpio2->x2, 7, GPIO_PULL_UP);
- /* GPX0_0 : Volume Up (F2) Key */
+ /* GPX0_0 : Volume Down */
s5p_gpio_direction_input(&gpio2->x0, 0);
s5p_gpio_set_pull(&gpio2->x0, 0, GPIO_PULL_UP);
@@ -351,112 +351,10 @@ unsigned int check_key(void)
}
}
- return cur_key_val;
+ return cur_key_val ^ 7; /* low->high active */
}
#endif
-#ifdef CONFIG_EMERGENCY_MODE
-#define RECOVERY_MENU_CNT 3
-char func_name[RECOVERY_MENU_CNT][30] = {"Reset", "Wipe", "Update"};
-
-int menu_select(int i)
-{
- switch(i) {
- case 0:
- setenv("bootcmd", "reset");
- break;
- case 1:
-#ifdef CONFIG_CMD_LCD
- run_command("lcd 0", 0);
- run_command("lcd 2", 0);
-#endif
-#ifdef CONFIG_CMD_LCDTEXT
- run_command("lcdtext 0 30 \"Formatting ...\"", 0);
-#endif
- run_command(CONFIG_FACTORY_RESET_COMMAND, 0);
- break;
- case 2:
- setenv("bootcmd", CONFIG_BOOTCOMMAND_VIA_SCRIPT);
- break;
- }
- return 0;
-}
-
-int menu_up(int i)
-{
- int ret;
-
- if (i <= 0)
- ret = RECOVERY_MENU_CNT - 1;
- else
- ret = i - 1;
-
- return ret;
-}
-
-int menu_down(int i)
-{
- int ret;
-
- if (i >= RECOVERY_MENU_CNT - 1)
- ret = 0;
- else
- ret = i + 1;
-
- return ret;
-}
-
-int recovery_mode(void)
-{
- int i = 0, init = 1;
- unsigned int cur_key_val = 0, old_key_val = 7, temp_key_val = 0;
-
-#ifdef CONFIG_CMD_LCD
- run_command("lcd 0", 0);
- run_command("lcd 2", 0);
-#endif
- while (1) {
- temp_key_val = check_key();
- if (temp_key_val != 0x7 || init) {
- init = 0;
- old_key_val = cur_key_val;
- cur_key_val = temp_key_val;
-#ifdef CONFIG_CMD_LCD
- run_command("lcd 2", 0);
-#endif
- switch(cur_key_val) {
- case 0x3: // Power Key Pressed : Select
- menu_select(i);
- return 0;
- case 0x5: // Home Key Pressed : Up
- i = menu_up(i);
- break;
- case 0x6: // Back Key Pressed : Down
- i = menu_down(i);
- break;
- }
-#ifdef CONFIG_CMD_LCDTEXT
- if (i == 0)
- run_command("lcdtext 0 30 \"v Reset\"", 0);
- else
- run_command("lcdtext 0 30 \" Reset\"", 0);
-
- if (i == 1)
- run_command("lcdtext \"v Wipe the partition\"", 0);
- else
- run_command("lcdtext \" Wipe the partition\"", 0);
-
- if (i == 2)
- run_command("lcdtext \"v Update from SDcard\"", 0);
- else
- run_command("lcdtext \" Update from SDcard\"", 0);
-#endif
- printf("%s \n", func_name[i]);
- }
- }
- return 0;
-}
-#endif
static void set_dieid(char *buf)
{
@@ -712,6 +610,55 @@ int write_raw_kernel(unsigned char *buffer, unsigned size)
return ret;
}
+static void show_selected(int num, int fin)
+{
+ if (num == 0) {
+ if (fin)
+ run_command("lcdtextcolor 255 0 0", 0);
+ else
+ run_command("lcdtextcolor 255 255 255", 0);
+ run_command("lcdtext 80 70 \"FASTBOOT MODE\"", 0);
+ run_command("lcdtextcolor 80 80 80", 0);
+ run_command("lcdtext \"RECOVERY MODE\"", 0);
+ } else {
+ run_command("lcdtextcolor 80 80 80", 0);
+ run_command("lcdtext 80 70 \"FASTBOOT MODE\"", 0);
+ if (fin)
+ run_command("lcdtextcolor 255 0 0", 0);
+ else
+ run_command("lcdtextcolor 255 255 255", 0);
+ run_command("lcdtext \"RECOVERY MODE\"", 0);
+ }
+}
+
+static int select_mode(void)
+{
+ int i = 0, init = 1;
+ unsigned int key_val;
+ int num = 0;
+
+ show_selected(num, 0);
+
+ // wait for key release
+ while (1) {
+ key_val = check_key();
+ if (key_val == 0)
+ break;
+ }
+
+ while (1) {
+ key_val = check_key();
+ if (key_val == 1 || // vol up
+ key_val == 2) { // vol down
+ num ^= 1;
+ show_selected(num, 0);
+ } else if(key_val == 4) {//power
+ break;
+ }
+ }
+ return num;
+}
+
static char tmp_buf[512];
int board_late_init(void)
@@ -744,52 +691,6 @@ int board_late_init(void)
reason, VERSION_BOOTLOADER);
strcat(tmp_buf, CONFIG_BOOTARGS);
-#if defined(CONFIG_EMERGENCY_MODE) || defined(CONFIG_FASTBOOT_MODE)
- pressed_key = check_key();
- switch(pressed_key) {
-#ifdef CONFIG_EMERGENCY_MODE
- case 0x1:
- if ((om_status >> 1) == OM_1stSDMMC_2ndUSB) {
- printf("RecoveryMode from microSD \n");
-#ifdef CONFIG_CMD_LCD
- run_command("lcd 0", 0);
- run_command("lcd 2", 0);
-#endif
-#ifdef CONFIG_CMD_LCDTEXT
- run_command("lcdtext \"Copying Bootloaders\"", 0);
- run_command("lcdtext \" from microSD to eMMC...\"", 0);
-#endif
- run_command(CONFIG_RECOVERYCOMMAND_1st_SDMMC, 0);
-#ifdef CONFIG_CMD_LCDTEXT
- run_command("lcdtext \"Done...\"", 0);
-#endif
- mdelay(1000);
- setenv("bootcmd", " ");
- setenv("bootdelay", "0");
-#ifdef CONFIG_CMD_LCDTEXT
- run_command("lcd 1", 0);
-#endif
- } else {
- printf("Recovery Mode \n");
- setenv("bootdelay", "0");
- recovery_mode();
- }
- break;
-#endif
-#ifdef CONFIG_FASTBOOT_MODE
- case 0x2:
- printf("Download Mode \n");
-#ifdef CONFIG_CMD_LCD
- run_command("lcd 0", 0);
-#endif
-#ifdef CONFIG_CMD_LCDTEXT
- run_command("lcdtext \"Downlaod Mode\"", 0);
-#endif
- run_command("fastboot", 0);
- break;
-#endif
- }
-#endif
#ifdef CONFIG_RECOVERY_MODE
u32 second_boot_info = readl(CONFIG_SECONDARY_BOOT_INFORM_BASE);
@@ -811,8 +712,24 @@ int board_late_init(void)
}
#endif
#endif
+ run_command("lcd 0", 0);
+ run_command("lcd 2", 0);
mode = readl(&pmu->inform4);
+ if (mode == 0) {
+ pressed_key = check_key();
+ if (pressed_key & 1) { // Volume up
+ if (select_mode() == 0)
+ mode = CONFIG_FASTBOOT_MODE;
+ else
+ mode = CONFIG_FACTORY_RESET_MODE;
+ }
+ }
+ if (mode == CONFIG_FASTBOOT_MODE) {
+ show_selected(0, 1);
+ } else if (mode == CONFIG_FACTORY_RESET_MODE) {
+ show_selected(1, 1);
+ }
#ifdef CONFIG_EFI_PARTITION
if (OmPin == BOOT_MMCSD) {
@@ -895,9 +812,6 @@ int board_late_init(void)
if(mode == CONFIG_FASTBOOT_MODE) {
writel(0x0, &pmu->inform4);
printf("Download Mode \n");
-#ifdef CONFIG_CMD_LCD
- run_command("lcd 0", 0);
-#endif
run_command("fastboot", 0);
printf("board late init fastboot execute!!\n");
}
diff --git a/common/cmd_lcd.c b/common/cmd_lcd.c
index a83e22097..c6c925070 100644
--- a/common/cmd_lcd.c
+++ b/common/cmd_lcd.c
@@ -51,8 +51,6 @@ int do_lcd (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
case 0:
printf("turnon\n");
Display_Turnon();
- Lcd_read_bootlogo();
- s5p_lcd_draw_bootlogo();
mdelay(200);
Backlight_Turnon();
break;
diff --git a/include/configs/koi.h b/include/configs/koi.h
index 0516b95cf..d712e22e3 100644
--- a/include/configs/koi.h
+++ b/include/configs/koi.h
@@ -394,9 +394,6 @@
/* Bootloader Recovery */
#undef CONFIG_RECOVERY_MODE
-/* Emergency Mode */
-#define CONFIG_EMERGENCY_MODE
-
/* Boot configuration */
#define BOOT_ONENAND 0x1
#define BOOT_NAND 0x40000