diff options
author | Stefan Reinauer <reinauer@chromium.org> | 2011-08-22 12:23:15 -0700 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2011-08-29 10:59:37 -0700 |
commit | 1f0e6ddb865d73af2c21b84f1fdc1ddaa3b455f5 (patch) | |
tree | 8feb004dd476014d4c094e7f8ca1fa631caed708 /lib | |
parent | 06d11ba5365dae47e67142f84d0e638eb77b6ba2 (diff) |
Choose the right boot function for x86
BUG=chrome-os-partner:4552
TEST=vboot_twostop does not fail with an error after loading the kernel.
Change-Id: I16016239716c8030ea63c7da6bd99a2f03b0e40d
Reviewed-on: http://gerrit.chromium.org/gerrit/5549
Tested-by: Stefan Reinauer <reinauer@google.com>
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/chromeos/boot_kernel.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/chromeos/boot_kernel.c b/lib/chromeos/boot_kernel.c index a296c4ccd3c..eb0e0afe724 100644 --- a/lib/chromeos/boot_kernel.c +++ b/lib/chromeos/boot_kernel.c @@ -13,6 +13,9 @@ #include <chromeos/boot_kernel.h> #include <chromeos/common.h> #include <chromeos/crossystem_data.h> +#ifdef CONFIG_X86 +#include <asm/zimage.h> +#endif #include <vboot_api.h> @@ -214,9 +217,12 @@ int boot_kernel(VbSelectAndLoadKernelParams *kparams, crossystem_data_t *cdata) char cmdline_out[sizeof(CHROMEOS_BOOTARGS) + CROS_CONFIG_SIZE + EXTRA_BUFFER]; char *cmdline; - +#ifdef CONFIG_X86 + struct boot_params *params; +#else /* Chrome OS kernel has to be loaded at fixed location */ char *argv[] = { "bootm", QUOTE(CHROMEOS_KERNEL_LOADADDR) }; +#endif assert(kparams->kernel_buffer == (void *)CHROMEOS_KERNEL_LOADADDR); strcpy(cmdline_buf, CHROMEOS_BOOTARGS); @@ -253,8 +259,14 @@ int boot_kernel(VbSelectAndLoadKernelParams *kparams, crossystem_data_t *cdata) VBDEBUG_PUTS("\n"); g_crossystem_data = cdata; - +#ifdef CONFIG_X86 + params = (struct boot_params *)(uintptr_t) + (kparams->bootloader_address - CROS_PARAMS_SIZE); + if (!setup_zimage(params, cmdline, 0, 0, 0)) + boot_zimage(params, kparams->kernel_buffer); +#else do_bootm(NULL, 0, sizeof(argv)/sizeof(*argv), argv); +#endif VBDEBUG(PREFIX "failed to boot; is kernel broken?\n"); return 1; |