diff options
author | Tom Rini | 2021-02-04 08:18:57 -0500 |
---|---|---|
committer | Tom Rini | 2021-02-04 08:18:57 -0500 |
commit | 67472aa0594186a203e4384ef82b313b0b5922e9 (patch) | |
tree | 0d0310c7acbd32c087ba71578f8b2be1a273c3e2 | |
parent | fdcb93e1709ab1a2ebb562455621617c29e2099c (diff) | |
parent | 18c25821836b4673aa67a43c792a4a82480f47fa (diff) |
Merge https://gitlab.denx.de/u-boot/custodians/u-boot-x86
- Fix broken multi-core boot for QEMU x86
- Add zboot support to boot x86 Linux kernel image in the PXE sysboot
utility
-rw-r--r-- | arch/x86/cpu/qfw_cpu.c | 6 | ||||
-rw-r--r-- | cmd/pxe_utils.c | 53 | ||||
-rw-r--r-- | include/command.h | 57 |
3 files changed, 63 insertions, 53 deletions
diff --git a/arch/x86/cpu/qfw_cpu.c b/arch/x86/cpu/qfw_cpu.c index a35de878b5d..b959eadddef 100644 --- a/arch/x86/cpu/qfw_cpu.c +++ b/arch/x86/cpu/qfw_cpu.c @@ -17,10 +17,16 @@ int qemu_cpu_fixup(void) int ret; int cpu_num; int cpu_online; + struct uclass *uc; struct udevice *dev, *pdev; struct cpu_plat *plat; char *cpu; + /* This will cause the CPUs devices to be bound */ + ret = uclass_get(UCLASS_CPU, &uc); + if (ret) + return ret; + /* first we need to find '/cpus' */ for (device_find_first_child(dm_root(), &pdev); pdev; diff --git a/cmd/pxe_utils.c b/cmd/pxe_utils.c index 3526a651d79..71c5af4c25d 100644 --- a/cmd/pxe_utils.c +++ b/cmd/pxe_utils.c @@ -492,16 +492,16 @@ static int label_boot(struct cmd_tbl *cmdtp, struct pxe_label *label) env_get("gatewayip"), env_get("netmask")); } -#ifdef CONFIG_CMD_NET - if (label->ipappend & 0x2) { - int err; - - strcpy(mac_str, " BOOTIF="); - err = format_mac_pxe(mac_str + 8, sizeof(mac_str) - 8); - if (err < 0) - mac_str[0] = '\0'; + if (IS_ENABLED(CONFIG_CMD_NET)) { + if (label->ipappend & 0x2) { + int err; + + strcpy(mac_str, " BOOTIF="); + err = format_mac_pxe(mac_str + 8, sizeof(mac_str) - 8); + if (err < 0) + mac_str[0] = '\0'; + } } -#endif if ((label->ipappend & 0x3) || label->append) { char bootargs[CONFIG_SYS_CBSIZE] = ""; @@ -649,15 +649,16 @@ static int label_boot(struct cmd_tbl *cmdtp, struct pxe_label *label) /* Try bootm for legacy and FIT format image */ if (genimg_get_format(buf) != IMAGE_FORMAT_INVALID) do_bootm(cmdtp, 0, bootm_argc, bootm_argv); -#ifdef CONFIG_CMD_BOOTI /* Try booting an AArch64 Linux kernel image */ - else + else if (IS_ENABLED(CONFIG_CMD_BOOTI)) do_booti(cmdtp, 0, bootm_argc, bootm_argv); -#elif defined(CONFIG_CMD_BOOTZ) /* Try booting a Image */ - else + else if (IS_ENABLED(CONFIG_CMD_BOOTZ)) do_bootz(cmdtp, 0, bootm_argc, bootm_argv); -#endif + /* Try booting an x86_64 Linux kernel image */ + else if (IS_ENABLED(CONFIG_CMD_ZBOOT)) + do_zboot_parent(cmdtp, 0, bootm_argc, bootm_argv, NULL); + unmap_sysmem(buf); cleanup: @@ -1424,20 +1425,20 @@ void handle_pxe_menu(struct cmd_tbl *cmdtp, struct pxe_menu *cfg) struct menu *m; int err; -#ifdef CONFIG_CMD_BMP - /* display BMP if available */ - if (cfg->bmp) { - if (get_relfile(cmdtp, cfg->bmp, image_load_addr)) { - if (CONFIG_IS_ENABLED(CMD_CLS)) - run_command("cls", 0); - bmp_display(image_load_addr, - BMP_ALIGN_CENTER, BMP_ALIGN_CENTER); - } else { - printf("Skipping background bmp %s for failure\n", - cfg->bmp); + if (IS_ENABLED(CONFIG_CMD_BMP)) { + /* display BMP if available */ + if (cfg->bmp) { + if (get_relfile(cmdtp, cfg->bmp, image_load_addr)) { + if (CONFIG_IS_ENABLED(CMD_CLS)) + run_command("cls", 0); + bmp_display(image_load_addr, + BMP_ALIGN_CENTER, BMP_ALIGN_CENTER); + } else { + printf("Skipping background bmp %s for failure\n", + cfg->bmp); + } } } -#endif m = pxe_menu_to_menu(cfg); if (!m) diff --git a/include/command.h b/include/command.h index e229bf2825c..747f8f80958 100644 --- a/include/command.h +++ b/include/command.h @@ -55,8 +55,8 @@ struct cmd_tbl { }; #if defined(CONFIG_CMD_RUN) -extern int do_run(struct cmd_tbl *cmdtp, int flag, int argc, - char *const argv[]); +int do_run(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]); #endif /* common/command.c */ @@ -69,7 +69,7 @@ int complete_subcmdv(struct cmd_tbl *cmdtp, int count, int argc, char *const argv[], char last_char, int maxv, char *cmdv[]); -extern int cmd_usage(const struct cmd_tbl *cmdtp); +int cmd_usage(const struct cmd_tbl *cmdtp); /* Dummy ->cmd and ->cmd_rep wrappers. */ int cmd_always_repeatable(struct cmd_tbl *cmdtp, int flag, int argc, @@ -85,10 +85,10 @@ static inline bool cmd_is_repeatable(struct cmd_tbl *cmdtp) } #ifdef CONFIG_AUTO_COMPLETE -extern int var_complete(int argc, char *const argv[], char last_char, int maxv, - char *cmdv[]); -extern int cmd_auto_complete(const char *const prompt, char *buf, int *np, - int *colp); +int var_complete(int argc, char *const argv[], char last_char, int maxv, + char *cmdv[]); +int cmd_auto_complete(const char *const prompt, char *buf, int *np, + int *colp); #endif /** @@ -145,13 +145,13 @@ int cmd_get_data_size(char *arg, int default_size); #endif #ifdef CONFIG_CMD_BOOTD -extern int do_bootd(struct cmd_tbl *cmdtp, int flag, int argc, - char *const argv[]); +int do_bootd(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]); #endif #ifdef CONFIG_CMD_BOOTM -extern int do_bootm(struct cmd_tbl *cmdtp, int flag, int argc, - char *const argv[]); -extern int bootm_maybe_autostart(struct cmd_tbl *cmdtp, const char *cmd); +int do_bootm(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]); +int bootm_maybe_autostart(struct cmd_tbl *cmdtp, const char *cmd); #else static inline int bootm_maybe_autostart(struct cmd_tbl *cmdtp, const char *cmd) { @@ -159,28 +159,31 @@ static inline int bootm_maybe_autostart(struct cmd_tbl *cmdtp, const char *cmd) } #endif -extern int do_bootz(struct cmd_tbl *cmdtp, int flag, int argc, - char *const argv[]); +int do_bootz(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]); -extern int do_booti(struct cmd_tbl *cmdtp, int flag, int argc, - char *const argv[]); +int do_booti(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]); -extern int common_diskboot(struct cmd_tbl *cmdtp, const char *intf, int argc, - char *const argv[]); +int do_zboot_parent(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[], int *repeatable); -extern int do_reset(struct cmd_tbl *cmdtp, int flag, int argc, +int common_diskboot(struct cmd_tbl *cmdtp, const char *intf, int argc, char *const argv[]); -extern int do_poweroff(struct cmd_tbl *cmdtp, int flag, int argc, - char *const argv[]); -extern unsigned long do_go_exec(ulong (*entry)(int, char * const []), int argc, - char *const argv[]); +int do_reset(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]); +int do_poweroff(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]); + +unsigned long do_go_exec(ulong (*entry)(int, char * const []), int argc, + char *const argv[]); #if defined(CONFIG_CMD_NVEDIT_EFI) -extern int do_env_print_efi(struct cmd_tbl *cmdtp, int flag, int argc, - char *const argv[]); -extern int do_env_set_efi(struct cmd_tbl *cmdtp, int flag, int argc, - char *const argv[]); +int do_env_print_efi(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]); +int do_env_set_efi(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]); #endif /** |