rockchip: unify boot mode in rockchip_get_boot_mode()
There are two ways to get boot mode: misc partition and CONFIG_ROCKCHIP_BOOT_MODE_REG, we unify them in the rockchip_get_boot_mode() function. Change-Id: Ia2dd452e8df8a8d736300048f131ed43ec2ec3a3 Signed-off-by: Joseph Chen <chenjh@rock-chips.com>
This commit is contained in:
parent
d2975239b8
commit
b7195498ca
|
|
@ -11,6 +11,7 @@
|
||||||
#include <cli.h>
|
#include <cli.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <fdtdec.h>
|
#include <fdtdec.h>
|
||||||
|
#include <boot_rkimg.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
|
@ -67,23 +68,15 @@ void rockchip_dnl_mode_check(void)
|
||||||
|
|
||||||
int setup_boot_mode(void)
|
int setup_boot_mode(void)
|
||||||
{
|
{
|
||||||
void *reg;
|
int boot_mode = BOOT_MODE_NORMAL;
|
||||||
int boot_mode;
|
|
||||||
char env_preboot[256] = {0};
|
char env_preboot[256] = {0};
|
||||||
|
|
||||||
rockchip_dnl_mode_check();
|
rockchip_dnl_mode_check();
|
||||||
|
#ifdef CONFIG_RKIMG_BOOTLOADER
|
||||||
reg = (void *)CONFIG_ROCKCHIP_BOOT_MODE_REG;
|
boot_mode = rockchip_get_boot_mode();
|
||||||
|
#endif
|
||||||
boot_mode = readl(reg);
|
|
||||||
|
|
||||||
debug("boot mode %x.\n", boot_mode);
|
|
||||||
|
|
||||||
/* Clear boot mode */
|
|
||||||
writel(BOOT_NORMAL, reg);
|
|
||||||
|
|
||||||
switch (boot_mode) {
|
switch (boot_mode) {
|
||||||
case BOOT_FASTBOOT:
|
case BOOT_MODE_BOOTLOADER:
|
||||||
printf("enter fastboot!\n");
|
printf("enter fastboot!\n");
|
||||||
#if defined(CONFIG_FASTBOOT_FLASH_MMC_DEV)
|
#if defined(CONFIG_FASTBOOT_FLASH_MMC_DEV)
|
||||||
snprintf(env_preboot, 256,
|
snprintf(env_preboot, 256,
|
||||||
|
|
@ -95,19 +88,19 @@ int setup_boot_mode(void)
|
||||||
#endif
|
#endif
|
||||||
env_set("preboot", env_preboot);
|
env_set("preboot", env_preboot);
|
||||||
break;
|
break;
|
||||||
case BOOT_UMS:
|
case BOOT_MODE_UMS:
|
||||||
printf("enter UMS!\n");
|
printf("enter UMS!\n");
|
||||||
env_set("preboot", "setenv preboot; ums mmc 0");
|
env_set("preboot", "setenv preboot; ums mmc 0");
|
||||||
break;
|
break;
|
||||||
case BOOT_LOADER:
|
case BOOT_MODE_LOADER:
|
||||||
printf("enter Rockusb!\n");
|
printf("enter Rockusb!\n");
|
||||||
env_set("preboot", "setenv preboot; rockusb 0 mmc 0");
|
env_set("preboot", "setenv preboot; rockusb 0 mmc 0");
|
||||||
break;
|
break;
|
||||||
case BOOT_CHARGING:
|
case BOOT_MODE_CHARGING:
|
||||||
printf("enter charging!\n");
|
printf("enter charging!\n");
|
||||||
env_set("preboot", "setenv preboot; charge");
|
env_set("preboot", "setenv preboot; charge");
|
||||||
break;
|
break;
|
||||||
case BOOT_RECOVERY:
|
case BOOT_MODE_RECOVERY:
|
||||||
printf("enter Recovery mode!\n");
|
printf("enter Recovery mode!\n");
|
||||||
env_set("reboot_mode", "recovery");
|
env_set("reboot_mode", "recovery");
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,8 @@
|
||||||
#include <asm/arch/resource_img.h>
|
#include <asm/arch/resource_img.h>
|
||||||
#include <asm/arch/rockchip_crc.h>
|
#include <asm/arch/rockchip_crc.h>
|
||||||
#include <boot_rkimg.h>
|
#include <boot_rkimg.h>
|
||||||
|
#include <asm/arch/boot_mode.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
|
||||||
#define TAG_KERNEL 0x4C4E524B
|
#define TAG_KERNEL 0x4C4E524B
|
||||||
|
|
||||||
|
|
@ -186,6 +188,7 @@ int rockchip_get_boot_mode(void)
|
||||||
int size = DIV_ROUND_UP(sizeof(struct bootloader_message), RK_BLK_SIZE)
|
int size = DIV_ROUND_UP(sizeof(struct bootloader_message), RK_BLK_SIZE)
|
||||||
* RK_BLK_SIZE;
|
* RK_BLK_SIZE;
|
||||||
int ret;
|
int ret;
|
||||||
|
uint32_t reg_boot_mode;
|
||||||
|
|
||||||
if (boot_mode != -1)
|
if (boot_mode != -1)
|
||||||
return boot_mode;
|
return boot_mode;
|
||||||
|
|
@ -201,22 +204,50 @@ int rockchip_get_boot_mode(void)
|
||||||
part_info.start + BOOTLOADER_MESSAGE_BLK_OFFSET,
|
part_info.start + BOOTLOADER_MESSAGE_BLK_OFFSET,
|
||||||
size >> 9, bmsg);
|
size >> 9, bmsg);
|
||||||
if (ret != (size >> 9)) {
|
if (ret != (size >> 9)) {
|
||||||
ret = -EIO;
|
free(bmsg);
|
||||||
goto err;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Mode from misc partition */
|
||||||
if (!strcmp(bmsg->command, "boot-recovery")) {
|
if (!strcmp(bmsg->command, "boot-recovery")) {
|
||||||
printf("boot mode: recovery\n");
|
boot_mode = BOOT_MODE_RECOVERY;
|
||||||
ret = BOOT_MODE_RECOVERY;
|
|
||||||
} else {
|
} else {
|
||||||
printf("boot mode: normal\n");
|
/* Mode from boot mode register */
|
||||||
ret = BOOT_MODE_NORMAL;
|
reg_boot_mode = readl((void *)CONFIG_ROCKCHIP_BOOT_MODE_REG);
|
||||||
}
|
writel(BOOT_NORMAL, (void *)CONFIG_ROCKCHIP_BOOT_MODE_REG);
|
||||||
boot_mode = ret;
|
|
||||||
err:
|
|
||||||
free(bmsg);
|
|
||||||
|
|
||||||
return ret;
|
switch (reg_boot_mode) {
|
||||||
|
case BOOT_NORMAL:
|
||||||
|
printf("boot mode: normal\n");
|
||||||
|
boot_mode = BOOT_MODE_NORMAL;
|
||||||
|
break;
|
||||||
|
case BOOT_FASTBOOT:
|
||||||
|
printf("boot mode: bootloader\n");
|
||||||
|
boot_mode = BOOT_MODE_BOOTLOADER;
|
||||||
|
break;
|
||||||
|
case BOOT_LOADER:
|
||||||
|
printf("boot mode: loader\n");
|
||||||
|
boot_mode = BOOT_MODE_LOADER;
|
||||||
|
break;
|
||||||
|
case BOOT_RECOVERY:
|
||||||
|
/* printf("boot mode: recovery\n"); */
|
||||||
|
boot_mode = BOOT_MODE_RECOVERY;
|
||||||
|
break;
|
||||||
|
case BOOT_UMS:
|
||||||
|
printf("boot mode: ums\n");
|
||||||
|
boot_mode = BOOT_MODE_UMS;
|
||||||
|
break;
|
||||||
|
case BOOT_CHARGING:
|
||||||
|
printf("boot mode: charging\n");
|
||||||
|
boot_mode = BOOT_MODE_CHARGING;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("boot mode: None\n");
|
||||||
|
boot_mode = BOOT_MODE_UNDEFINE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return boot_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
int boot_rockchip_image(struct blk_desc *dev_desc, disk_partition_t *boot_part)
|
int boot_rockchip_image(struct blk_desc *dev_desc, disk_partition_t *boot_part)
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,14 @@
|
||||||
enum _boot_mode {
|
enum _boot_mode {
|
||||||
BOOT_MODE_NORMAL = 0,
|
BOOT_MODE_NORMAL = 0,
|
||||||
BOOT_MODE_RECOVERY,
|
BOOT_MODE_RECOVERY,
|
||||||
BOOT_MODE_BOOTLOADER,
|
BOOT_MODE_BOOTLOADER, /* Android: Fastboot mode */
|
||||||
|
BOOT_MODE_LOADER, /* Rockchip: Rockusb download mode */
|
||||||
|
BOOT_MODE_CHARGING,
|
||||||
|
BOOT_MODE_UMS,
|
||||||
|
BOOT_MODE_BROM_DOWNLOAD,
|
||||||
|
BOOT_MODE_UNDEFINE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#define PART_MISC "misc"
|
#define PART_MISC "misc"
|
||||||
#define PART_KERNEL "kernel"
|
#define PART_KERNEL "kernel"
|
||||||
#define PART_BOOT "boot"
|
#define PART_BOOT "boot"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue