mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-22 20:58:22 +00:00
bootstd: cros: Add ARM support
Support booting ChromiumOS on ARM devices using FIT. Add an entry into the boot implementation which does not require a command line. This can be expanded over time as the bootm code is refactored. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
c279224ea6
commit
daffb0be2c
4 changed files with 57 additions and 8 deletions
|
@ -464,8 +464,8 @@ config BOOTMETH_GLOBAL
|
||||||
|
|
||||||
config BOOTMETH_CROS
|
config BOOTMETH_CROS
|
||||||
bool "Bootdev support for Chromium OS"
|
bool "Bootdev support for Chromium OS"
|
||||||
depends on X86 || SANDBOX
|
depends on X86 || ARM || SANDBOX
|
||||||
default y
|
default y if !ARM
|
||||||
help
|
help
|
||||||
Enables support for booting Chromium OS using bootdevs. This uses the
|
Enables support for booting Chromium OS using bootdevs. This uses the
|
||||||
kernel A slot and obtains the kernel command line from the parameters
|
kernel A slot and obtains the kernel command line from the parameters
|
||||||
|
|
37
boot/bootm.c
37
boot/bootm.c
|
@ -823,6 +823,43 @@ err:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int bootm_boot_start(ulong addr, const char *cmdline)
|
||||||
|
{
|
||||||
|
static struct cmd_tbl cmd = {"bootm"};
|
||||||
|
char addr_str[30];
|
||||||
|
char *argv[] = {addr_str, NULL};
|
||||||
|
int states;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TODO(sjg@chromium.org): This uses the command-line interface, but
|
||||||
|
* should not. To clean this up, the various bootm states need to be
|
||||||
|
* passed an info structure instead of cmdline flags. Then this can
|
||||||
|
* set up the required info and move through the states without needing
|
||||||
|
* the command line.
|
||||||
|
*/
|
||||||
|
states = BOOTM_STATE_START | BOOTM_STATE_FINDOS | BOOTM_STATE_PRE_LOAD |
|
||||||
|
BOOTM_STATE_FINDOTHER | BOOTM_STATE_LOADOS |
|
||||||
|
BOOTM_STATE_OS_PREP | BOOTM_STATE_OS_FAKE_GO |
|
||||||
|
BOOTM_STATE_OS_GO;
|
||||||
|
if (IS_ENABLED(CONFIG_SYS_BOOT_RAMDISK_HIGH))
|
||||||
|
states |= BOOTM_STATE_RAMDISK;
|
||||||
|
if (IS_ENABLED(CONFIG_PPC) || IS_ENABLED(CONFIG_MIPS))
|
||||||
|
states |= BOOTM_STATE_OS_CMDLINE;
|
||||||
|
images.state |= states;
|
||||||
|
|
||||||
|
snprintf(addr_str, sizeof(addr_str), "%lx", addr);
|
||||||
|
|
||||||
|
ret = env_set("bootargs", cmdline);
|
||||||
|
if (ret) {
|
||||||
|
printf("Failed to set cmdline\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
ret = do_bootm_states(&cmd, 0, 1, argv, states, &images, 1);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
#if CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)
|
#if CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)
|
||||||
/**
|
/**
|
||||||
* image_get_kernel - verify legacy format kernel image
|
* image_get_kernel - verify legacy format kernel image
|
||||||
|
|
|
@ -419,13 +419,17 @@ static int cros_boot(struct udevice *dev, struct bootflow *bflow)
|
||||||
if (ret)
|
if (ret)
|
||||||
return log_msg_ret("rd", ret);
|
return log_msg_ret("rd", ret);
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_X86
|
|
||||||
zboot_start(map_to_sysmem(bflow->buf), bflow->size, 0, 0,
|
|
||||||
map_to_sysmem(bflow->x86_setup),
|
|
||||||
bflow->cmdline);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return log_msg_ret("go", -EFAULT);
|
if (IS_ENABLED(CONFIG_X86)) {
|
||||||
|
ret = zboot_start(map_to_sysmem(bflow->buf), bflow->size, 0, 0,
|
||||||
|
map_to_sysmem(bflow->x86_setup),
|
||||||
|
bflow->cmdline);
|
||||||
|
} else {
|
||||||
|
ret = bootm_boot_start(map_to_sysmem(bflow->buf),
|
||||||
|
bflow->cmdline);
|
||||||
|
}
|
||||||
|
|
||||||
|
return log_msg_ret("go", ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cros_bootmeth_bind(struct udevice *dev)
|
static int cros_bootmeth_bind(struct udevice *dev)
|
||||||
|
|
|
@ -163,4 +163,12 @@ const char *zimage_get_kernel_version(struct boot_params *params,
|
||||||
*/
|
*/
|
||||||
void zimage_dump(struct boot_params *base_ptr, bool show_cmdline);
|
void zimage_dump(struct boot_params *base_ptr, bool show_cmdline);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* bootm_boot_start() - Boot an image at the given address
|
||||||
|
*
|
||||||
|
* @addr: Image address
|
||||||
|
* @cmdline: Command line to set
|
||||||
|
*/
|
||||||
|
int bootm_boot_start(ulong addr, const char *cmdline);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue