Revert "Merge patch series "pxe: Precursor series for supporting read_all() in extlinux / PXE""
This reverts commit 8bc3542384e3a1219e5ffb62b79d16dddc1b1fb9, reversing
changes made to 698edd63eca090a2e299cd3facf90a0b97bed677.
There are still problems with this series to work out.
Link: https://lore.kernel.org/u-boot/CAFLszTjw_MJbK9tpzVYi3XKGazcv55auBAdgVzcAVUta7dRqcg@mail.gmail.com/
Signed-off-by: Tom Rini <trini@konsulko.com>
diff --git a/arch/arm/lib/image.c b/arch/arm/lib/image.c
index d78d704..1f672ee 100644
--- a/arch/arm/lib/image.c
+++ b/arch/arm/lib/image.c
@@ -28,13 +28,6 @@
uint32_t res5;
};
-bool booti_is_valid(const void *img)
-{
- const struct Image_header *ih = img;
-
- return ih->magic == le32_to_cpu(LINUX_ARM64_IMAGE_MAGIC);
-}
-
int booti_setup(ulong image, ulong *relocated_addr, ulong *size,
bool force_reloc)
{
@@ -46,7 +39,7 @@
ih = (struct Image_header *)map_sysmem(image, 0);
- if (!booti_is_valid(ih)) {
+ if (ih->magic != le32_to_cpu(LINUX_ARM64_IMAGE_MAGIC)) {
puts("Bad Linux ARM64 Image magic!\n");
return 1;
}
diff --git a/arch/riscv/lib/image.c b/arch/riscv/lib/image.c
index 859326c..a82f48e 100644
--- a/arch/riscv/lib/image.c
+++ b/arch/riscv/lib/image.c
@@ -32,13 +32,6 @@
uint32_t res4; /* reserved */
};
-bool booti_is_valid(const void *img)
-{
- const struct linux_image_h *lhdr = img;
-
- return lhdr->magic == LINUX_RISCV_IMAGE_MAGIC;
-}
-
int booti_setup(ulong image, ulong *relocated_addr, ulong *size,
bool force_reloc)
{
@@ -46,7 +39,7 @@
lhdr = (struct linux_image_h *)map_sysmem(image, 0);
- if (!booti_is_valid(lhdr)) {
+ if (lhdr->magic != LINUX_RISCV_IMAGE_MAGIC) {
puts("Bad Linux RISCV Image magic!\n");
return -EINVAL;
}
diff --git a/arch/sandbox/lib/bootm.c b/arch/sandbox/lib/bootm.c
index 8ed9237..44ba8b5 100644
--- a/arch/sandbox/lib/bootm.c
+++ b/arch/sandbox/lib/bootm.c
@@ -89,8 +89,3 @@
return 1;
}
-
-bool booti_is_valid(const void *img)
-{
- return false;
-}
diff --git a/arch/x86/include/asm/zimage.h b/arch/x86/include/asm/zimage.h
index 4ed6d8d..8b54260 100644
--- a/arch/x86/include/asm/zimage.h
+++ b/arch/x86/include/asm/zimage.h
@@ -10,8 +10,6 @@
#include <asm/bootparam.h>
#include <asm/e820.h>
-struct bootm_info;
-
/* linux i386 zImage/bzImage header. Offsets relative to
* the start of the image */
@@ -44,28 +42,65 @@
ZBOOT_STATE_COUNT = 5,
};
+/**
+ * struct zboot_state - Current state of the boot
+ *
+ * @bzimage_addr: Address of the bzImage to boot, or 0 if the image has already
+ * been loaded and does not exist (as a cohesive whole) in memory
+ * @bzimage_size: Size of the bzImage, or 0 to detect this
+ * @initrd_addr: Address of the initial ramdisk, or 0 if none
+ * @initrd_size: Size of the initial ramdisk, or 0 if none
+ * @load_address: Address where the bzImage is moved before booting, either
+ * BZIMAGE_LOAD_ADDR or ZIMAGE_LOAD_ADDR
+ * This is set up when loading the zimage
+ * @base_ptr: Pointer to the boot parameters, typically at address
+ * DEFAULT_SETUP_BASE
+ * This is set up when loading the zimage
+ * @cmdline: Environment variable containing the 'override' command line, or
+ * NULL to use the one in the setup block
+ */
+struct zboot_state {
+ ulong bzimage_addr;
+ ulong bzimage_size;
+ ulong initrd_addr;
+ ulong initrd_size;
+ ulong load_address;
+ struct boot_params *base_ptr;
+ const char *cmdline;
+};
+
+extern struct zboot_state state;
+
/**
+ * zimage_dump() - Dump information about a zimage
+ *
+ * @base_ptr: Pointer to the boot parameters
+ * @show_cmdline: true to show the kernel command line
+ */
+void zimage_dump(struct boot_params *base_ptr, bool show_cmdline);
+
+/**
* zboot_load() - Load a zimage
*
* Load the zimage into the correct place
*
* Return: 0 if OK, -ve on error
*/
-int zboot_load(struct bootm_info *bmi);
+int zboot_load(void);
/**
* zboot_setup() - Set up the zboot image reeady for booting
*
* Return: 0 if OK, -ve on error
*/
-int zboot_setup(struct bootm_info *bmi);
+int zboot_setup(void);
/**
* zboot_go() - Start the image
*
* Return: 0 if OK, -ve on error
*/
-int zboot_go(struct bootm_info *bmi);
+int zboot_go(void);
/**
* load_zimage() - Load a zImage or bzImage
@@ -104,7 +139,6 @@
*
* Record information about a zimage so it can be booted
*
- * @bmi: Bootm information
* @bzimage_addr: Address of the bzImage to boot
* @bzimage_size: Size of the bzImage, or 0 to detect this
* @initrd_addr: Address of the initial ramdisk, or 0 if none
@@ -115,17 +149,14 @@
* @cmdline: Environment variable containing the 'override' command line, or
* NULL to use the one in the setup block
*/
-void zboot_start(struct bootm_info *bmi, ulong bzimage_addr, ulong bzimage_size,
- ulong initrd_addr, ulong initrd_size, ulong base_addr,
- const char *cmdline);
+void zboot_start(ulong bzimage_addr, ulong bzimage_size, ulong initrd_addr,
+ ulong initrd_size, ulong base_addr, const char *cmdline);
/**
* zboot_info() - Show simple info about a zimage
*
- * Shows where the kernel was loaded and also the setup base
- *
- * @bmi: Bootm information
+ * Shows wherer the kernel was loaded and also the setup base
*/
-void zboot_info(struct bootm_info *bmi);
+void zboot_info(void);
#endif
diff --git a/arch/x86/lib/zimage.c b/arch/x86/lib/zimage.c
index 8f1c18e..2ea9bcf 100644
--- a/arch/x86/lib/zimage.c
+++ b/arch/x86/lib/zimage.c
@@ -55,6 +55,9 @@
#define COMMAND_LINE_SIZE 2048
+/* Current state of the boot */
+struct zboot_state state;
+
static void build_command_line(char *command_line, int auto_boot)
{
char *env_command_line;
@@ -366,54 +369,54 @@
return 0;
}
-int zboot_load(struct bootm_info *bmi)
+int zboot_load(void)
{
struct boot_params *base_ptr;
int ret;
- if (bmi->base_ptr) {
- struct boot_params *from = (struct boot_params *)bmi->base_ptr;
+ if (state.base_ptr) {
+ struct boot_params *from = (struct boot_params *)state.base_ptr;
base_ptr = (struct boot_params *)DEFAULT_SETUP_BASE;
log_debug("Building boot_params at %lx\n", (ulong)base_ptr);
memset(base_ptr, '\0', sizeof(*base_ptr));
base_ptr->hdr = from->hdr;
} else {
- base_ptr = load_zimage((void *)bmi->bzimage_addr,
- bmi->bzimage_size, &bmi->load_address);
+ base_ptr = load_zimage((void *)state.bzimage_addr, state.bzimage_size,
+ &state.load_address);
if (!base_ptr) {
puts("## Kernel loading failed ...\n");
return -EINVAL;
}
}
- bmi->base_ptr = base_ptr;
+ state.base_ptr = base_ptr;
- ret = env_set_hex("zbootbase", map_to_sysmem(bmi->base_ptr));
+ ret = env_set_hex("zbootbase", map_to_sysmem(state.base_ptr));
if (!ret)
- ret = env_set_hex("zbootaddr", bmi->load_address);
+ ret = env_set_hex("zbootaddr", state.load_address);
if (ret)
return ret;
return 0;
}
-int zboot_setup(struct bootm_info *bmi)
+int zboot_setup(void)
{
- struct boot_params *base_ptr = bmi->base_ptr;
+ struct boot_params *base_ptr = state.base_ptr;
int ret;
ret = setup_zimage(base_ptr, (char *)base_ptr + COMMAND_LINE_OFFSET,
- 0, bmi->initrd_addr, bmi->initrd_size,
- (ulong)bmi->cmdline);
+ 0, state.initrd_addr, state.initrd_size,
+ (ulong)state.cmdline);
if (ret)
return -EINVAL;
return 0;
}
-int zboot_go(struct bootm_info *bmi)
+int zboot_go(void)
{
- struct boot_params *params = bmi->base_ptr;
+ struct boot_params *params = state.base_ptr;
struct setup_header *hdr = ¶ms->hdr;
bool image_64bit;
ulong entry;
@@ -421,7 +424,7 @@
disable_interrupts();
- entry = bmi->load_address;
+ entry = state.load_address;
image_64bit = false;
if (IS_ENABLED(CONFIG_X86_64) &&
(hdr->xloadflags & XLF_KERNEL_64)) {
@@ -429,43 +432,30 @@
}
/* we assume that the kernel is in place */
- ret = boot_linux_kernel((ulong)bmi->base_ptr, entry, image_64bit);
+ ret = boot_linux_kernel((ulong)state.base_ptr, entry, image_64bit);
return ret;
}
-int zboot_run(struct bootm_info *bmi)
+int zboot_run(ulong addr, ulong size, ulong initrd, ulong initrd_size,
+ ulong base, char *cmdline)
{
int ret;
- ret = zboot_load(bmi);
+ zboot_start(addr, size, initrd, initrd_size, base, cmdline);
+ ret = zboot_load();
if (ret)
return log_msg_ret("ld", ret);
- ret = zboot_setup(bmi);
+ ret = zboot_setup();
if (ret)
return log_msg_ret("set", ret);
- ret = zboot_go(bmi);
+ ret = zboot_go();
if (ret)
return log_msg_ret("go", ret);
return -EFAULT;
}
-int zboot_run_args(ulong addr, ulong size, ulong initrd, ulong initrd_size,
- ulong base, char *cmdline)
-{
- struct bootm_info bmi;
- int ret;
-
- bootm_init(&bmi);
- zboot_start(&bmi, addr, size, initrd, initrd_size, base, cmdline);
- ret = zboot_run(&bmi);
- if (ret)
- return log_msg_ret("zra", ret);
-
- return 0;
-}
-
static void print_num(const char *name, ulong value)
{
printf("%-20s: %lx\n", name, value);
@@ -559,12 +549,11 @@
printf("\n");
}
-void zimage_dump(struct bootm_info *bmi, bool show_cmdline)
+void zimage_dump(struct boot_params *base_ptr, bool show_cmdline)
{
- struct boot_params *base_ptr;
struct setup_header *hdr;
+ const char *version;
- base_ptr = bmi->base_ptr;
printf("Setup located at %p:\n\n", base_ptr);
print_num64("ACPI RSDP addr", base_ptr->acpi_rsdp_addr);
@@ -590,14 +579,10 @@
print_num("Real mode switch", hdr->realmode_swtch);
print_num("Start sys seg", hdr->start_sys_seg);
print_num("Kernel version", hdr->kernel_version);
- if (bmi->bzimage_addr) {
- const char *version;
-
- version = zimage_get_kernel_version(base_ptr,
- (void *)bmi->bzimage_addr);
- if (version)
- printf(" @%p: %s\n", version, version);
- }
+ version = zimage_get_kernel_version(base_ptr,
+ (void *)state.bzimage_addr);
+ if (version)
+ printf(" @%p: %s\n", version, version);
print_num("Type of loader", hdr->type_of_loader);
show_loader(hdr);
print_num("Load flags", hdr->loadflags);
@@ -638,24 +623,25 @@
print_num("Kernel info offset", hdr->kernel_info_offset);
}
-void zboot_start(struct bootm_info *bmi, ulong bzimage_addr, ulong bzimage_size,
- ulong initrd_addr, ulong initrd_size, ulong base_addr,
- const char *cmdline)
+void zboot_start(ulong bzimage_addr, ulong bzimage_size, ulong initrd_addr,
+ ulong initrd_size, ulong base_addr, const char *cmdline)
{
- bmi->bzimage_size = bzimage_size;
- bmi->initrd_addr = initrd_addr;
- bmi->initrd_size = initrd_size;
+ memset(&state, '\0', sizeof(state));
+
+ state.bzimage_size = bzimage_size;
+ state.initrd_addr = initrd_addr;
+ state.initrd_size = initrd_size;
if (base_addr) {
- bmi->base_ptr = map_sysmem(base_addr, 0);
- bmi->load_address = bzimage_addr;
+ state.base_ptr = map_sysmem(base_addr, 0);
+ state.load_address = bzimage_addr;
} else {
- bmi->bzimage_addr = bzimage_addr;
+ state.bzimage_addr = bzimage_addr;
}
- bmi->cmdline = cmdline;
+ state.cmdline = cmdline;
}
-void zboot_info(struct bootm_info *bmi)
+void zboot_info(void)
{
printf("Kernel loaded at %08lx, setup_base=%p\n",
- bmi->load_address, bmi->base_ptr);
+ state.load_address, state.base_ptr);
}
diff --git a/boot/Makefile b/boot/Makefile
index f1e4444..34bac26 100644
--- a/boot/Makefile
+++ b/boot/Makefile
@@ -10,7 +10,7 @@
obj-$(CONFIG_CMD_BOOTZ) += bootm.o bootm_os.o
obj-$(CONFIG_CMD_BOOTI) += bootm.o bootm_os.o
-obj-$(CONFIG_PXE_UTILS) += bootm.o pxe_utils.o
+obj-$(CONFIG_PXE_UTILS) += pxe_utils.o
endif
diff --git a/boot/bootm.c b/boot/bootm.c
index 8a1aac7..854ac7e 100644
--- a/boot/bootm.c
+++ b/boot/bootm.c
@@ -146,7 +146,7 @@
/* check image type, for FIT images get FIT kernel node */
*os_data = *os_len = 0;
buf = map_sysmem(img_addr, 0);
- switch (genimg_get_format_comp(buf)) {
+ switch (genimg_get_format(buf)) {
#if CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)
case IMAGE_FORMAT_LEGACY:
printf("## Booting kernel from Legacy Image at %08lx ...\n",
@@ -227,9 +227,6 @@
break;
}
#endif
- case IMAGE_FORMAT_BOOTI:
- *os_data = img_addr;
- break;
default:
bootstage_error(BOOTSTAGE_ID_CHECK_IMAGETYPE);
return -EPROTOTYPE;
@@ -289,35 +286,6 @@
return ret;
}
-static int found_booti_os(enum image_comp_t comp)
-{
- images.os.load = images.os.image_start;
- images.os.type = IH_TYPE_KERNEL;
- images.os.os = IH_OS_LINUX;
- images.os.comp = comp;
- if (IS_ENABLED(CONFIG_RISCV_SMODE))
- images.os.arch = IH_ARCH_RISCV;
- else if (IS_ENABLED(CONFIG_ARM64))
- images.os.arch = IH_ARCH_ARM64;
-
- log_debug("load %lx start %lx len %lx ep %lx os %x comp %x\n",
- images.os.load, images.os.image_start, images.os.image_len,
- images.ep, images.os.os, images.os.comp);
- if (comp != IH_COMP_NONE) {
- images.os.load = env_get_hex("kernel_comp_addr_r", 0);
- images.os.image_len = env_get_ulong("kernel_comp_size", 16, 0);
- if (!images.os.load || !images.os.image_len) {
- puts("kernel_comp_addr_r or kernel_comp_size is not provided!\n");
- return -ENOTSUPP;
- }
- if (lmb_reserve(images.os.load, images.os.image_len, LMB_NONE)
- < 0)
- return -EXDEV;
- }
-
- return 0;
-}
-
/**
* bootm_find_os(): Find the OS to boot
*
@@ -422,28 +390,7 @@
}
break;
#endif
- case IMAGE_FORMAT_BOOTI:
- if (IS_ENABLED(CONFIG_CMD_BOOTI)) {
- if (found_booti_os(IH_COMP_NONE))
- return 1;
- ep_found = true;
- break;
- }
- fallthrough;
default:
- /* any compressed image is probably a booti image */
- if (IS_ENABLED(CONFIG_CMD_BOOTI)) {
- int comp;
-
- comp = image_decomp_type(os_hdr, 2);
- if (comp != IH_COMP_NONE) {
- if (found_booti_os(comp))
- return 1;
- ep_found = true;
- }
- break;
- }
-
puts("ERROR: unknown image format type!\n");
return 1;
}
@@ -594,7 +541,6 @@
static int bootm_find_other(ulong img_addr, const char *conf_ramdisk,
const char *conf_fdt)
{
- log_debug("find_other type %x os %x\n", images.os.type, images.os.os);
if ((images.os.type == IH_TYPE_KERNEL ||
images.os.type == IH_TYPE_KERNEL_NOLOAD ||
images.os.type == IH_TYPE_MULTI) &&
@@ -683,17 +629,15 @@
debug("Allocated %lx bytes at %lx for kernel (size %lx) decompression\n",
req_size, load, image_len);
}
- log_debug("load_os load %lx image_start %lx image_len %lx\n", load,
- image_start, image_len);
load_buf = map_sysmem(load, 0);
image_buf = map_sysmem(os.image_start, image_len);
err = image_decomp(os.comp, load, os.image_start, os.type,
- load_buf, image_buf, image_len, bootm_len(),
- &load_end);
+ load_buf, image_buf, image_len,
+ CONFIG_SYS_BOOTM_LEN, &load_end);
if (err) {
- err = handle_decomp_error(os.comp, load_end - load, bootm_len(),
- err);
+ err = handle_decomp_error(os.comp, load_end - load,
+ CONFIG_SYS_BOOTM_LEN, err);
bootstage_error(BOOTSTAGE_ID_DECOMP_IMAGE);
return err;
}
@@ -1166,10 +1110,6 @@
states |= BOOTM_STATE_RAMDISK;
states |= extra_states;
- log_debug("cmd '%s' states %x addr_img '%s' conf_ramdisk '%s' conf_fdt '%s' images %p\n",
- cmd, states, bmi->addr_img, bmi->conf_ramdisk, bmi->conf_fdt,
- bmi->images);
-
return bootm_run_states(bmi, states);
}
@@ -1187,9 +1127,7 @@
int booti_run(struct bootm_info *bmi)
{
- return boot_run(bmi, "booti", BOOTM_STATE_START | BOOTM_STATE_FINDOS |
- BOOTM_STATE_PRE_LOAD | BOOTM_STATE_FINDOTHER |
- BOOTM_STATE_LOADOS);
+ return boot_run(bmi, "booti", 0);
}
int bootm_boot_start(ulong addr, const char *cmdline)
@@ -1228,8 +1166,7 @@
{
memset(bmi, '\0', sizeof(struct bootm_info));
bmi->boot_progress = true;
- if (IS_ENABLED(CONFIG_CMD_BOOTM) || IS_ENABLED(CONFIG_CMD_BOOTZ) ||
- IS_ENABLED(CONFIG_CMD_BOOTI) || IS_ENABLED(CONFIG_PXE_UTILS))
+ if (IS_ENABLED(CONFIG_CMD_BOOTM))
bmi->images = &images;
}
diff --git a/boot/bootmeth_cros.c b/boot/bootmeth_cros.c
index ea4c9ed..c7b862e 100644
--- a/boot/bootmeth_cros.c
+++ b/boot/bootmeth_cros.c
@@ -446,9 +446,9 @@
}
if (IS_ENABLED(CONFIG_X86)) {
- ret = zboot_run_args(map_to_sysmem(bflow->buf), bflow->size, 0,
- 0, map_to_sysmem(bflow->x86_setup),
- bflow->cmdline);
+ ret = zboot_run(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);
diff --git a/boot/image-board.c b/boot/image-board.c
index a2bafba..514f8e6 100644
--- a/boot/image-board.c
+++ b/boot/image-board.c
@@ -234,7 +234,21 @@
&fit_uname_kernel);
}
-enum image_fmt_t genimg_get_format(const void *img_addr)
+/**
+ * genimg_get_format - get image format type
+ * @img_addr: image start address
+ *
+ * genimg_get_format() checks whether provided address points to a valid
+ * legacy or FIT image.
+ *
+ * New uImage format and FDT blob are based on a libfdt. FDT blob
+ * may be passed directly or embedded in a FIT image. In both situations
+ * genimg_get_format() must be able to dectect libfdt header.
+ *
+ * returns:
+ * image format type or IMAGE_FORMAT_INVALID if no image is present
+ */
+int genimg_get_format(const void *img_addr)
{
if (CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)) {
const struct legacy_img_hdr *hdr;
@@ -250,24 +264,10 @@
if (IS_ENABLED(CONFIG_ANDROID_BOOT_IMAGE) &&
is_android_boot_image_header(img_addr))
return IMAGE_FORMAT_ANDROID;
- if (IS_ENABLED(CONFIG_CMD_BOOTI) &&
- booti_is_valid(img_addr))
- return IMAGE_FORMAT_BOOTI;
return IMAGE_FORMAT_INVALID;
}
-enum image_fmt_t genimg_get_format_comp(const void *img_addr)
-{
- enum image_fmt_t fmt = genimg_get_format(img_addr);
-
- if (IS_ENABLED(CONFIG_CMD_BOOTI) && fmt == IMAGE_FORMAT_INVALID &&
- image_decomp_type(img_addr, 2) != IH_COMP_NONE)
- fmt = IMAGE_FORMAT_BOOTI;
-
- return fmt;
-}
-
/**
* fit_has_config - check if there is a valid FIT configuration
* @images: pointer to the bootm command headers structure
@@ -364,7 +364,7 @@
* check image type, for FIT images get FIT node.
*/
buf = map_sysmem(rd_addr, 0);
- switch (genimg_get_format_comp(buf)) {
+ switch (genimg_get_format(buf)) {
case IMAGE_FORMAT_LEGACY:
if (CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)) {
const struct legacy_img_hdr *rd_hdr;
@@ -434,10 +434,6 @@
done = true;
}
break;
- case IMAGE_FORMAT_BOOTI:
- break;
- case IMAGE_FORMAT_INVALID:
- break;
}
if (!done) {
diff --git a/boot/pxe_utils.c b/boot/pxe_utils.c
index c606da9..82f217a 100644
--- a/boot/pxe_utils.c
+++ b/boot/pxe_utils.c
@@ -7,7 +7,6 @@
#define LOG_CATEGORY LOGC_BOOT
#include <bootflow.h>
-#include <bootm.h>
#include <command.h>
#include <dm.h>
#include <env.h>
@@ -433,42 +432,169 @@
}
#endif
-/*
- * label_process_fdt() - Process FDT for the label
- *
- * @ctx: PXE context
- * @label: Label to process
- * @kernel_addr: String containing kernel address
- * @fdt_argp: bootm argument to fill in, for FDT
- * Return: 0 if OK, -ENOMEM if out of memory, -ENOENT if FDT file could not be
- * loaded
- *
- * fdt usage is optional:
- * It handles the following scenarios.
+/**
+ * label_boot() - Boot according to the contents of a pxe_label
*
- * Scenario 1: If fdt_addr_r specified and "fdt" or "fdtdir" label is
- * defined in pxe file, retrieve fdt blob from server. Pass fdt_addr_r to
- * bootm, and adjust argc appropriately.
+ * If we can't boot for any reason, we return. A successful boot never
+ * returns.
*
- * If retrieve fails and no exact fdt blob is specified in pxe file with
- * "fdt" label, try Scenario 2.
+ * The kernel will be stored in the location given by the 'kernel_addr_r'
+ * environment variable.
*
- * Scenario 2: If there is an fdt_addr specified, pass it along to
- * bootm, and adjust argc appropriately.
+ * If the label specifies an initrd file, it will be stored in the location
+ * given by the 'ramdisk_addr_r' environment variable.
*
- * Scenario 3: If there is an fdtcontroladdr specified, pass it along to
- * bootm, and adjust argc appropriately, unless the image type is fitImage.
+ * If the label specifies an 'append' line, its contents will overwrite that
+ * of the 'bootargs' environment variable.
*
- * Scenario 4: fdt blob is not available.
+ * @ctx: PXE context
+ * @label: Label to process
+ * Returns does not return on success, otherwise returns 0 if a localboot
+ * label was processed, or 1 on error
*/
-static int label_process_fdt(struct pxe_context *ctx, struct pxe_label *label,
- char *kernel_addr, const char **fdt_argp)
+static int label_boot(struct pxe_context *ctx, struct pxe_label *label)
{
+ char *bootm_argv[] = { "bootm", NULL, NULL, NULL, NULL };
+ char *zboot_argv[] = { "zboot", NULL, "0", NULL, NULL };
+ char *kernel_addr = NULL;
+ char *initrd_addr_str = NULL;
+ char initrd_filesize[10];
+ char initrd_str[28];
+ char mac_str[29] = "";
+ char ip_str[68] = "";
+ char *fit_addr = NULL;
+ int bootm_argc = 2;
+ int zboot_argc = 3;
+ int len = 0;
+ ulong kernel_addr_r;
+ void *buf;
+
+ label_print(label);
+
+ label->attempted = 1;
+
+ if (label->localboot) {
+ if (label->localboot_val >= 0)
+ label_localboot(label);
+ return 0;
+ }
+
+ if (!label->kernel) {
+ printf("No kernel given, skipping %s\n",
+ label->name);
+ return 1;
+ }
+
+ if (get_relfile_envaddr(ctx, label->kernel, "kernel_addr_r",
+ (enum bootflow_img_t)IH_TYPE_KERNEL, NULL)
+ < 0) {
+ printf("Skipping %s for failure retrieving kernel\n",
+ label->name);
+ return 1;
+ }
+
+ kernel_addr = env_get("kernel_addr_r");
+ /* for FIT, append the configuration identifier */
+ if (label->config) {
+ int len = strlen(kernel_addr) + strlen(label->config) + 1;
+
+ fit_addr = malloc(len);
+ if (!fit_addr) {
+ printf("malloc fail (FIT address)\n");
+ return 1;
+ }
+ snprintf(fit_addr, len, "%s%s", kernel_addr, label->config);
+ kernel_addr = fit_addr;
+ }
+
+ /* For FIT, the label can be identical to kernel one */
+ if (label->initrd && !strcmp(label->kernel_label, label->initrd)) {
+ initrd_addr_str = kernel_addr;
+ } else if (label->initrd) {
+ ulong size;
+ if (get_relfile_envaddr(ctx, label->initrd, "ramdisk_addr_r",
+ (enum bootflow_img_t)IH_TYPE_RAMDISK,
+ &size) < 0) {
+ printf("Skipping %s for failure retrieving initrd\n",
+ label->name);
+ goto cleanup;
+ }
+ strcpy(initrd_filesize, simple_xtoa(size));
+ initrd_addr_str = env_get("ramdisk_addr_r");
+ size = snprintf(initrd_str, sizeof(initrd_str), "%s:%lx",
+ initrd_addr_str, size);
+ if (size >= sizeof(initrd_str))
+ goto cleanup;
+ }
+
+ if (label->ipappend & 0x1) {
+ sprintf(ip_str, " ip=%s:%s:%s:%s",
+ env_get("ipaddr"), env_get("serverip"),
+ env_get("gatewayip"), env_get("netmask"));
+ }
+
+ 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';
+ }
+ }
+
+ if ((label->ipappend & 0x3) || label->append) {
+ char bootargs[CONFIG_SYS_CBSIZE] = "";
+ char finalbootargs[CONFIG_SYS_CBSIZE];
+
+ if (strlen(label->append ?: "") +
+ strlen(ip_str) + strlen(mac_str) + 1 > sizeof(bootargs)) {
+ printf("bootarg overflow %zd+%zd+%zd+1 > %zd\n",
+ strlen(label->append ?: ""),
+ strlen(ip_str), strlen(mac_str),
+ sizeof(bootargs));
+ goto cleanup;
+ }
+
+ if (label->append)
+ strncpy(bootargs, label->append, sizeof(bootargs));
+
+ strcat(bootargs, ip_str);
+ strcat(bootargs, mac_str);
+
+ cli_simple_process_macros(bootargs, finalbootargs,
+ sizeof(finalbootargs));
+ env_set("bootargs", finalbootargs);
+ printf("append: %s\n", finalbootargs);
+ }
+
+ /*
+ * fdt usage is optional:
+ * It handles the following scenarios.
+ *
+ * Scenario 1: If fdt_addr_r specified and "fdt" or "fdtdir" label is
+ * defined in pxe file, retrieve fdt blob from server. Pass fdt_addr_r to
+ * bootm, and adjust argc appropriately.
+ *
+ * If retrieve fails and no exact fdt blob is specified in pxe file with
+ * "fdt" label, try Scenario 2.
+ *
+ * Scenario 2: If there is an fdt_addr specified, pass it along to
+ * bootm, and adjust argc appropriately.
+ *
+ * Scenario 3: If there is an fdtcontroladdr specified, pass it along to
+ * bootm, and adjust argc appropriately, unless the image type is fitImage.
+ *
+ * Scenario 4: fdt blob is not available.
+ */
+ bootm_argv[3] = env_get("fdt_addr_r");
+
/* For FIT, the label can be identical to kernel one */
if (label->fdt && !strcmp(label->kernel_label, label->fdt)) {
- *fdt_argp = kernel_addr;
+ bootm_argv[3] = kernel_addr;
/* if fdt label is defined then get fdt from server */
- } else if (*fdt_argp) {
+ } else if (bootm_argv[3]) {
char *fdtfile = NULL;
char *fdtfilefree = NULL;
@@ -481,7 +607,6 @@
}
} else if (label->fdtdir) {
char *f1, *f2, *f3, *f4, *slash;
- int len;
f1 = env_get("fdtfile");
if (f1) {
@@ -524,7 +649,7 @@
fdtfilefree = malloc(len);
if (!fdtfilefree) {
printf("malloc fail (FDT filename)\n");
- return -ENOMEM;
+ goto cleanup;
}
snprintf(fdtfilefree, len, "%s%s%s%s%s%s",
@@ -539,12 +664,12 @@
free(fdtfilefree);
if (err < 0) {
- *fdt_argp = NULL;
+ bootm_argv[3] = NULL;
if (label->fdt) {
printf("Skipping %s for failure retrieving FDT\n",
label->name);
- return -ENOENT;
+ goto cleanup;
}
if (label->fdtdir) {
@@ -561,236 +686,74 @@
label_boot_fdtoverlay(ctx, label);
#endif
} else {
- *fdt_argp = NULL;
+ bootm_argv[3] = NULL;
}
}
- return 0;
-}
-
-/**
- * label_run_boot() - Set up the FDT and call the appropriate bootm/z/i command
- *
- * @ctx: PXE context
- * @label: Label to process
- * @kernel_addr: String containing kernel address (cannot be NULL)
- * @initrd_addr_str: String containing initrd address (NULL if none)
- * @initrd_filesize: String containing initrd size (only used if
- * @initrd_addr_str)
- * @initrd_str: initrd string to process (only used if @initrd_addr_str)
- * Return: does not return on success, or returns 0 if the boot command
- * returned, or -ve error value on error
- */
-static int label_run_boot(struct pxe_context *ctx, struct pxe_label *label,
- char *kernel_addr, char *initrd_addr_str,
- char *initrd_filesize, char *initrd_str)
-{
- struct bootm_info bmi;
- ulong kernel_addr_r;
- void *buf;
- int ret;
-
- bootm_init(&bmi);
-
- bmi.conf_fdt = env_get("fdt_addr_r");
-
- ret = label_process_fdt(ctx, label, kernel_addr, &bmi.conf_fdt);
- if (ret)
- return ret;
-
- bmi.addr_img = kernel_addr;
- bootm_x86_set(&bmi, bzimage_addr, hextoul(kernel_addr, NULL));
+ bootm_argv[1] = kernel_addr;
+ zboot_argv[1] = kernel_addr;
if (initrd_addr_str) {
- bmi.conf_ramdisk = initrd_str;
- bootm_x86_set(&bmi, initrd_addr,
- hextoul(initrd_addr_str, NULL));
- bootm_x86_set(&bmi, initrd_size,
- hextoul(initrd_filesize, NULL));
+ bootm_argv[2] = initrd_str;
+ bootm_argc = 3;
+
+ zboot_argv[3] = initrd_addr_str;
+ zboot_argv[4] = initrd_filesize;
+ zboot_argc = 5;
}
- if (!bmi.conf_fdt) {
- if (!IS_ENABLED(CONFIG_SUPPORT_PASSING_ATAGS) ||
- strcmp("-", label->fdt))
- bmi.conf_fdt = env_get("fdt_addr");
+ if (!bootm_argv[3]) {
+ if (IS_ENABLED(CONFIG_SUPPORT_PASSING_ATAGS)) {
+ if (strcmp("-", label->fdt))
+ bootm_argv[3] = env_get("fdt_addr");
+ } else {
+ bootm_argv[3] = env_get("fdt_addr");
+ }
}
kernel_addr_r = genimg_get_kernel_addr(kernel_addr);
buf = map_sysmem(kernel_addr_r, 0);
+ if (!bootm_argv[3] && genimg_get_format(buf) != IMAGE_FORMAT_FIT) {
+ if (IS_ENABLED(CONFIG_SUPPORT_PASSING_ATAGS)) {
+ if (strcmp("-", label->fdt))
+ bootm_argv[3] = env_get("fdtcontroladdr");
+ } else {
+ bootm_argv[3] = env_get("fdtcontroladdr");
+ }
+ }
+
- if (!bmi.conf_fdt && genimg_get_format(buf) != IMAGE_FORMAT_FIT) {
- if (!IS_ENABLED(CONFIG_SUPPORT_PASSING_ATAGS) ||
- strcmp("-", label->fdt))
- bmi.conf_fdt = env_get("fdtcontroladdr");
+ if (bootm_argv[3]) {
+ if (!bootm_argv[2])
+ bootm_argv[2] = "-";
+ bootm_argc = 4;
}
/* Try bootm for legacy and FIT format image */
if (genimg_get_format(buf) != IMAGE_FORMAT_INVALID &&
IS_ENABLED(CONFIG_CMD_BOOTM)) {
log_debug("using bootm\n");
- ret = bootm_run(&bmi);
+ do_bootm(ctx->cmdtp, 0, bootm_argc, bootm_argv);
/* Try booting an AArch64 Linux kernel image */
} else if (IS_ENABLED(CONFIG_CMD_BOOTI)) {
log_debug("using booti\n");
- ret = booti_run(&bmi);
+ do_booti(ctx->cmdtp, 0, bootm_argc, bootm_argv);
/* Try booting a Image */
} else if (IS_ENABLED(CONFIG_CMD_BOOTZ)) {
log_debug("using bootz\n");
- ret = bootz_run(&bmi);
+ do_bootz(ctx->cmdtp, 0, bootm_argc, bootm_argv);
/* Try booting an x86_64 Linux kernel image */
} else if (IS_ENABLED(CONFIG_CMD_ZBOOT)) {
log_debug("using zboot\n");
- ret = zboot_run(&bmi);
+ do_zboot_parent(ctx->cmdtp, 0, zboot_argc, zboot_argv, NULL);
}
unmap_sysmem(buf);
- if (ret)
- return ret;
-
- return 0;
-}
-
-/**
- * label_boot() - Boot according to the contents of a pxe_label
- *
- * If we can't boot for any reason, we return. A successful boot never
- * returns.
- *
- * The kernel will be stored in the location given by the 'kernel_addr_r'
- * environment variable.
- *
- * If the label specifies an initrd file, it will be stored in the location
- * given by the 'ramdisk_addr_r' environment variable.
- *
- * If the label specifies an 'append' line, its contents will overwrite that
- * of the 'bootargs' environment variable.
- *
- * @ctx: PXE context
- * @label: Label to process
- * Returns does not return on success, otherwise returns 0 if a localboot
- * label was processed, or 1 on error
- */
-static int label_boot(struct pxe_context *ctx, struct pxe_label *label)
-{
- char *kernel_addr = NULL;
- char *initrd_addr_str = NULL;
- char initrd_filesize[10];
- char initrd_str[28];
- char mac_str[29] = "";
- char ip_str[68] = "";
- char *fit_addr = NULL;
-
- label_print(label);
-
- label->attempted = 1;
-
- if (label->localboot) {
- if (label->localboot_val >= 0)
- label_localboot(label);
- return 0;
- }
-
- if (!label->kernel) {
- printf("No kernel given, skipping %s\n",
- label->name);
- return 1;
- }
-
- if (get_relfile_envaddr(ctx, label->kernel, "kernel_addr_r",
- (enum bootflow_img_t)IH_TYPE_KERNEL, NULL)
- < 0) {
- printf("Skipping %s for failure retrieving kernel\n",
- label->name);
- return 1;
- }
-
- kernel_addr = env_get("kernel_addr_r");
- /* for FIT, append the configuration identifier */
- if (label->config) {
- int len = strlen(kernel_addr) + strlen(label->config) + 1;
-
- fit_addr = malloc(len);
- if (!fit_addr) {
- printf("malloc fail (FIT address)\n");
- return 1;
- }
- snprintf(fit_addr, len, "%s%s", kernel_addr, label->config);
- kernel_addr = fit_addr;
- }
-
- /* For FIT, the label can be identical to kernel one */
- if (label->initrd && !strcmp(label->kernel_label, label->initrd)) {
- initrd_addr_str = kernel_addr;
- } else if (label->initrd) {
- ulong size;
- int ret;
-
- ret = get_relfile_envaddr(ctx, label->initrd, "ramdisk_addr_r",
- (enum bootflow_img_t)IH_TYPE_RAMDISK,
- &size);
- if (ret < 0) {
- printf("Skipping %s for failure retrieving initrd\n",
- label->name);
- goto cleanup;
- }
- strcpy(initrd_filesize, simple_xtoa(size));
- initrd_addr_str = env_get("ramdisk_addr_r");
- size = snprintf(initrd_str, sizeof(initrd_str), "%s:%lx",
- initrd_addr_str, size);
- if (size >= sizeof(initrd_str))
- goto cleanup;
- }
-
- if (label->ipappend & 0x1) {
- sprintf(ip_str, " ip=%s:%s:%s:%s",
- env_get("ipaddr"), env_get("serverip"),
- env_get("gatewayip"), env_get("netmask"));
- }
-
- 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';
- }
- }
-
- if ((label->ipappend & 0x3) || label->append) {
- char bootargs[CONFIG_SYS_CBSIZE] = "";
- char finalbootargs[CONFIG_SYS_CBSIZE];
-
- if (strlen(label->append ?: "") +
- strlen(ip_str) + strlen(mac_str) + 1 > sizeof(bootargs)) {
- printf("bootarg overflow %zd+%zd+%zd+1 > %zd\n",
- strlen(label->append ?: ""),
- strlen(ip_str), strlen(mac_str),
- sizeof(bootargs));
- goto cleanup;
- }
-
- if (label->append)
- strlcpy(bootargs, label->append, sizeof(bootargs));
-
- strcat(bootargs, ip_str);
- strcat(bootargs, mac_str);
-
- cli_simple_process_macros(bootargs, finalbootargs,
- sizeof(finalbootargs));
- env_set("bootargs", finalbootargs);
- printf("append: %s\n", finalbootargs);
- }
-
- label_run_boot(ctx, label, kernel_addr, initrd_addr_str,
- initrd_filesize, initrd_str);
- /* ignore the error value since we are going to fail anyway */
cleanup:
free(fit_addr);
- return 1; /* returning is always failure */
+ return 1;
}
/** enum token_type - Tokens for the pxe file parser */
diff --git a/cmd/bootflow.c b/cmd/bootflow.c
index 5349abe..a1fd59a 100644
--- a/cmd/bootflow.c
+++ b/cmd/bootflow.c
@@ -380,13 +380,7 @@
bflow = std->cur_bootflow;
if (IS_ENABLED(CONFIG_X86) && x86_setup) {
- struct bootm_info bmi;
-
- bootm_init(&bmi);
- /* we don't know this at present */
- bootm_x86_set(&bmi, bzimage_addr, 0);
- bootm_x86_set(&bmi, base_ptr, bflow->x86_setup);
- zimage_dump(&bmi, false);
+ zimage_dump(bflow->x86_setup, false);
return 0;
}
diff --git a/cmd/net.c b/cmd/net.c
index 8f33c9f..79525f7 100644
--- a/cmd/net.c
+++ b/cmd/net.c
@@ -297,15 +297,13 @@
/**
* parse_addr_size() - parse address and size arguments for tftpput
*
- * @argv: command line arguments (argv[1] and argv[2] must be valid)
- * @addrp: returns the address, on success
- * @sizep: returns the size, on success
+ * @argv: command line arguments
* Return: 0 on success
*/
-static int parse_addr_size(char * const argv[], ulong *addrp, ulong *sizep)
+static int parse_addr_size(char * const argv[])
{
- if (strict_strtoul(argv[1], 16, addrp) < 0 ||
- strict_strtoul(argv[2], 16, sizep) < 0) {
+ if (strict_strtoul(argv[1], 16, &image_save_addr) < 0 ||
+ strict_strtoul(argv[2], 16, &image_save_size) < 0) {
printf("Invalid address/size\n");
return CMD_RET_USAGE;
}
@@ -315,31 +313,24 @@
/**
* parse_args() - parse command line arguments
*
- * Sets:
- * - image_save_addr and image_save_size, if proto == TFTPPUT
- *
* @proto: command prototype
- * @argc: number of arguments, include the command, which has already been
- * parsed
- * @argv: command line arguments, with argv[0] being the command
- * @fnamep: set to the filename, if provided, else NULL
- * @addrp: returns the load/save address, if any is provided, else it is
- * left unchanged
- * @sizep: returns the save size, if any is provided, else it is left
- * unchanged
+ * @argc: number of arguments
+ * @argv: command line arguments
* Return: 0 on success
*/
-static int parse_args(enum proto_t proto, int argc, char *const argv[],
- const char **fnamep, ulong *addrp, ulong *sizep)
+static int parse_args(enum proto_t proto, int argc, char *const argv[])
{
ulong addr;
char *end;
- *fnamep = NULL;
switch (argc) {
case 1:
if (IS_ENABLED(CONFIG_CMD_TFTPPUT) && proto == TFTPPUT)
return 1;
+
+ /* refresh bootfile name from env */
+ copy_filename(net_boot_file_name, env_get("bootfile"),
+ sizeof(net_boot_file_name));
break;
case 2:
@@ -352,42 +343,48 @@
* mis-interpreted as a valid number.
*/
addr = hextoul(argv[1], &end);
- if (end == (argv[1] + strlen(argv[1])))
- *addrp = addr;
- else
- *fnamep = argv[1];
+ if (end == (argv[1] + strlen(argv[1]))) {
+ image_load_addr = addr;
+ /* refresh bootfile name from env */
+ copy_filename(net_boot_file_name, env_get("bootfile"),
+ sizeof(net_boot_file_name));
+ } else {
+ net_boot_file_name_explicit = true;
+ copy_filename(net_boot_file_name, argv[1],
+ sizeof(net_boot_file_name));
+ }
break;
case 3:
if (IS_ENABLED(CONFIG_CMD_TFTPPUT) && proto == TFTPPUT) {
- if (parse_addr_size(argv, addrp, sizep))
+ if (parse_addr_size(argv))
return 1;
} else {
- *addrp = hextoul(argv[1], NULL);
- *fnamep = argv[2];
+ image_load_addr = hextoul(argv[1], NULL);
+ net_boot_file_name_explicit = true;
+ copy_filename(net_boot_file_name, argv[2],
+ sizeof(net_boot_file_name));
}
break;
+#ifdef CONFIG_CMD_TFTPPUT
case 4:
- if (IS_ENABLED(CONFIG_CMD_TFTPPUT)) {
- if (parse_addr_size(argv, addrp, sizep))
- return 1;
- *fnamep = argv[3];
- break;
- }
+ if (parse_addr_size(argv))
+ return 1;
+ net_boot_file_name_explicit = true;
+ copy_filename(net_boot_file_name, argv[3],
+ sizeof(net_boot_file_name));
+ break;
+#endif
default:
return 1;
}
-
return 0;
}
static int netboot_common(enum proto_t proto, struct cmd_tbl *cmdtp, int argc,
char *const argv[])
{
- ulong addr, save_size;
- bool fname_explicit;
- const char *fname;
char *s;
int rcode = 0;
int size;
@@ -395,10 +392,10 @@
net_boot_file_name_explicit = false;
*net_boot_file_name = '\0';
- /* pre-set addr */
+ /* pre-set image_load_addr */
s = env_get("loadaddr");
if (s != NULL)
- addr = hextoul(s, NULL);
+ image_load_addr = hextoul(s, NULL);
if (IS_ENABLED(CONFIG_IPV6)) {
use_ip6 = false;
@@ -411,17 +408,12 @@
}
}
- if (parse_args(proto, argc, argv, &fname, &addr, &save_size)) {
+ if (parse_args(proto, argc, argv)) {
bootstage_error(BOOTSTAGE_ID_NET_START);
return CMD_RET_USAGE;
}
- if (fname) {
- fname_explicit = true;
- } else {
- fname_explicit = false;
- fname = env_get("bootfile");
- }
+ bootstage_mark(BOOTSTAGE_ID_NET_START);
if (IS_ENABLED(CONFIG_IPV6) && !use_ip6) {
char *s, *e;
@@ -436,10 +428,12 @@
}
}
- size = netboot_run_(proto, addr, fname, save_size, fname_explicit,
- IS_ENABLED(CONFIG_IPV6) && use_ip6);
- if (size < 0)
+ size = net_loop(proto);
+ if (size < 0) {
+ bootstage_error(BOOTSTAGE_ID_NET_NETLOOP_OK);
return CMD_RET_FAILURE;
+ }
+ bootstage_mark(BOOTSTAGE_ID_NET_NETLOOP_OK);
/* net_loop ok, update environment */
netboot_update_env();
diff --git a/cmd/x86/zboot.c b/cmd/x86/zboot.c
index ee099ca..94e602b8 100644
--- a/cmd/x86/zboot.c
+++ b/cmd/x86/zboot.c
@@ -7,15 +7,11 @@
#define LOG_CATEGORY LOGC_BOOT
-#include <bootm.h>
#include <command.h>
#include <mapmem.h>
#include <vsprintf.h>
#include <asm/zimage.h>
-/* Current state of the boot */
-static struct bootm_info bmi;
-
static int do_zboot_start(struct cmd_tbl *cmdtp, int flag, int argc,
char *const argv[])
{
@@ -24,8 +20,6 @@
ulong base_addr;
int i;
- bootm_init(&bmi);
-
log_debug("argc %d:", argc);
for (i = 0; i < argc; i++)
log_debug(" %s", argv[i]);
@@ -41,7 +35,7 @@
base_addr = argc > 5 ? hextoul(argv[5], NULL) : 0;
cmdline = argc > 6 ? env_get(argv[6]) : NULL;
- zboot_start(&bmi, bzimage_addr, bzimage_size, initrd_addr, initrd_size,
+ zboot_start(bzimage_addr, bzimage_size, initrd_addr, initrd_size,
base_addr, cmdline);
return 0;
@@ -52,7 +46,7 @@
{
int ret;
- ret = zboot_load(&bmi);
+ ret = zboot_load();
if (ret)
return ret;
@@ -62,17 +56,16 @@
static int do_zboot_setup(struct cmd_tbl *cmdtp, int flag, int argc,
char *const argv[])
{
- if (!bmi.base_ptr) {
+ if (!state.base_ptr) {
printf("base is not set: use 'zboot load' first\n");
return CMD_RET_FAILURE;
}
-
- if (zboot_setup(&bmi)) {
+ if (zboot_setup()) {
puts("Setting up boot parameters failed ...\n");
return CMD_RET_FAILURE;
}
- if (zboot_setup(&bmi))
+ if (zboot_setup())
return CMD_RET_FAILURE;
return 0;
@@ -81,7 +74,7 @@
static int do_zboot_info(struct cmd_tbl *cmdtp, int flag, int argc,
char *const argv[])
{
- zboot_info(&bmi);
+ zboot_info();
return 0;
}
@@ -91,7 +84,7 @@
{
int ret;
- ret = zboot_go(&bmi);
+ ret = zboot_go();
if (ret) {
printf("Kernel returned! (err=%d)\n", ret);
return CMD_RET_FAILURE;
@@ -103,13 +96,15 @@
static int do_zboot_dump(struct cmd_tbl *cmdtp, int flag, int argc,
char *const argv[])
{
+ struct boot_params *base_ptr = state.base_ptr;
+
if (argc > 1)
- bmi.base_ptr = (void *)hextoul(argv[1], NULL);
- if (!bmi.base_ptr) {
+ base_ptr = (void *)hextoul(argv[1], NULL);
+ if (!base_ptr) {
printf("No zboot setup_base\n");
return CMD_RET_FAILURE;
}
- zimage_dump(&bmi, true);
+ zimage_dump(base_ptr, true);
return 0;
}
@@ -124,8 +119,8 @@
U_BOOT_CMD_MKENT(dump, 2, 1, do_zboot_dump, "", ""),
)
-static int do_zboot_states(struct cmd_tbl *cmdtp, int flag, int argc,
- char *const argv[], int state_mask)
+int do_zboot_states(struct cmd_tbl *cmdtp, int flag, int argc,
+ char *const argv[], int state_mask)
{
int ret = 0;
diff --git a/include/bootm.h b/include/bootm.h
index 465577a..6116070 100644
--- a/include/bootm.h
+++ b/include/bootm.h
@@ -44,21 +44,6 @@
* @argc: Number of arguments to the command (excluding the actual command).
* This is 0 if there are no arguments
* @argv: NULL-terminated list of arguments, or NULL if there are no arguments
- *
- * For zboot:
- * @bzimage_addr: Address of the bzImage to boot, or 0 if the image has already
- * been loaded and does not exist (as a cohesive whole) in memory
- * @bzimage_size: Size of the bzImage, or 0 to detect this
- * @initrd_addr: Address of the initial ramdisk, or 0 if none
- * @initrd_size: Size of the initial ramdisk, or 0 if none
- * @load_address: Address where the bzImage is moved before booting, either
- * BZIMAGE_LOAD_ADDR or ZIMAGE_LOAD_ADDR
- * This is set up when loading the zimage
- * @base_ptr: Pointer to the boot parameters, typically at address
- * DEFAULT_SETUP_BASE
- * This is set up when loading the zimage
- * @cmdline: Environment variable containing the 'override' command line, or
- * NULL to use the one in the setup block
*/
struct bootm_info {
const char *addr_img;
@@ -69,39 +54,11 @@
const char *cmd_name;
int argc;
char *const *argv;
-
- /* zboot items */
-#ifdef CONFIG_X86
- ulong bzimage_addr;
- ulong bzimage_size;
- ulong initrd_addr;
- ulong initrd_size;
- ulong load_address;
- struct boot_params *base_ptr;
- const char *cmdline;
-#endif
};
-/* macro to allow setting fields in generic code */
-#ifdef CONFIG_X86
-#define bootm_x86_set(_bmi, _field, _val) (_bmi)->_field = (_val)
-#else
-#define bootm_x86_set(_bmi, _field, _val)
-#endif
-
-static inline ulong bootm_len(void)
-{
-#ifdef CONFIG_SYS_BOOTM_LEN
- return CONFIG_SYS_BOOTM_LEN;
-#endif
- return 0;
-}
-
/**
* bootm_init() - Set up a bootm_info struct with useful defaults
*
- * @bmi: Bootm information
- *
* Set up the struct with default values for all members:
* @boot_progress is set to true and @images is set to the global images
* variable. Everything else is set to NULL except @argc which is 0
@@ -117,7 +74,7 @@
* - disabled interrupts.
*
* @flag: Flags indicating what to do (BOOTM_STATE_...)
- * @bmi: Bootm information
+ * bmi: Bootm information
* Return: 1 on error. On success the OS boots so this function does
* not return.
*/
@@ -318,15 +275,6 @@
/**
* zboot_run() - Run through the various steps to boot a zimage
*
- * @bmi: Bootm information, with bzimage_size, initrd_addr, initrd_size and
- * cmdline set up. If base_ptr is 0, then bzimage_addr must be set to the start
- * of the bzImage. Otherwise base_ptr and load_address must be provided.
- */
-int zboot_run(struct bootm_info *bmi);
-
-/**
- * zboot_run_args() - Run through the various steps to boot a zimage
- *
* Boot a zimage, given the component parts
*
* @addr: Address where the bzImage is moved before booting, either
@@ -341,8 +289,8 @@
* to use for booting
* Return: -EFAULT on error (normally it does not return)
*/
-int zboot_run_args(ulong addr, ulong size, ulong initrd, ulong initrd_size,
- ulong base, char *cmdline);
+int zboot_run(ulong addr, ulong size, ulong initrd, ulong initrd_size,
+ ulong base, char *cmdline);
/*
* zimage_get_kernel_version() - Get the version string from a kernel
@@ -359,10 +307,11 @@
*
* This shows all available information in a zimage that has been loaded.
*
- * @bmi: Bootm information, with valid base_ptr
+ * @base_ptr: Pointer to the boot parameters, typically at address
+ * DEFAULT_SETUP_BASE
* @show_cmdline: true to show the full command line
*/
-void zimage_dump(struct bootm_info *bmi, bool show_cmdline);
+void zimage_dump(struct boot_params *base_ptr, bool show_cmdline);
/*
* bootm_boot_start() - Boot an image at the given address
diff --git a/include/image.h b/include/image.h
index 2455baa..c1db838 100644
--- a/include/image.h
+++ b/include/image.h
@@ -244,7 +244,7 @@
* New IDs *MUST* be appended at the end of the list and *NEVER*
* inserted for backward compatibility.
*/
-enum image_comp_t {
+enum {
IH_COMP_NONE = 0, /* No Compression Used */
IH_COMP_GZIP, /* gzip Compression Used */
IH_COMP_BZIP2, /* bzip2 Compression Used */
@@ -598,13 +598,10 @@
ulong *setup_len);
/* Image format types, returned by _get_format() routine */
-enum image_fmt_t {
- IMAGE_FORMAT_INVALID,
- IMAGE_FORMAT_LEGACY, /* legacy image_header based format */
- IMAGE_FORMAT_FIT, /* new, libfdt based format */
- IMAGE_FORMAT_ANDROID, /* Android boot image */
- IMAGE_FORMAT_BOOTI, /* Arm64/RISC-V boot image */
-};
+#define IMAGE_FORMAT_INVALID 0x00
+#define IMAGE_FORMAT_LEGACY 0x01 /* legacy image_header based format */
+#define IMAGE_FORMAT_FIT 0x02 /* new, libfdt based format */
+#define IMAGE_FORMAT_ANDROID 0x03 /* Android boot image */
/**
* genimg_get_kernel_addr_fit() - Parse FIT specifier
@@ -633,43 +630,10 @@
const char **fit_uname_kernel);
ulong genimg_get_kernel_addr(char * const img_addr);
-
-/**
- * genimg_get_format - get image format type
- * @img_addr: image start address
- * Return: image format type or IMAGE_FORMAT_INVALID if no image is present
- *
- * genimg_get_format() checks whether provided address points to a valid
- * legacy or FIT image.
- *
- * New uImage format and FDT blob are based on a libfdt. FDT blob
- * may be passed directly or embedded in a FIT image. In both situations
- * genimg_get_format() must be able to dectect libfdt header.
- */
-enum image_fmt_t genimg_get_format(const void *img_addr);
-
-/**
- * genimg_get_format_comp() - Like genimg_get_format() but adds compressed booti
- *
- * If a compressed file is detected (with image_decomp_type()) and
- * CONFIG_CMD_BOOTI is enabled, then this returns IMAGE_FORMAT_BOOTI
- *
- * @img_addr: image start address
- * Return: image format type or IMAGE_FORMAT_INVALID if no image is present
- */
-enum image_fmt_t genimg_get_format_comp(const void *img_addr);
-
+int genimg_get_format(const void *img_addr);
int genimg_has_config(struct bootm_headers *images);
/**
- * booti_is_valid() - Check if an image appears to be an Arm64 image
- *
- * @img: Pointer to image
- * Return: true if the image has the Arm64 magic
- */
-bool booti_is_valid(const void *img);
-
-/**
* boot_get_fpga() - Locate the FPGA image
*
* @images: Information about images being loaded
diff --git a/include/net-common.h b/include/net-common.h
index 6a39091..1d507b1 100644
--- a/include/net-common.h
+++ b/include/net-common.h
@@ -475,36 +475,6 @@
enum proto_t;
int net_loop(enum proto_t protocol);
-/* internal function: do not use! */
-int netboot_run_(enum proto_t proto, ulong addr, const char *fname, ulong size,
- bool fname_explicit, bool ipv6);
-
-/**
- * netboot_run() - Run a network operation
- *
- * The following proto values are NOT supported:
- * PING, since net_ping_ip cannot be set
- * NETCONS, since its parameters cannot bet set
- * RS, since first_call cannot be set, along with perhaps other things
- * UDP, since udp_ops cannot be set
- * DNS, since net_dns_resolve and net_dns_env_var cannot be set
- * WGET, since DNS must be done first and that is not supported
- * DHCP6, since the required parameters cannot be passed in
- *
- * To support one of these, either add the required arguments or perhaps a
- * separate function and a struct to hold the information.
- *
- * @proto: Operation to run: TFTPGET, FASTBOOT_UDP, FASTBOOT_TCP, BOOTP,
- * TFTPPUT, RARP, NFS, DHCP
- * @addr: Load/save address
- * @fname: Filename
- * @size: Save size (not used for TFTPGET)
- * @ipv6: true to use IPv6, false to use IPv4
- * Return 0 on success, else -ve error code
- */
-int netboot_run(enum proto_t proto, ulong addr, const char *fname, ulong size,
- bool ipv6);
-
/**
* dhcp_run() - Run DHCP on the current ethernet device
*
diff --git a/net/net.c b/net/net.c
index ef97377..1828f1c 100644
--- a/net/net.c
+++ b/net/net.c
@@ -775,50 +775,6 @@
return ret;
}
-int netboot_run_(enum proto_t proto, ulong addr, const char *fname, ulong size,
- bool fname_explicit, bool ipv6)
-{
- int ret;
-
- bootstage_mark(BOOTSTAGE_ID_NET_START);
-
- /*
- * For now we use the global variables as that is the only way to
- * control the network stack. At some point, perhaps, the state could be
- * in a struct
- */
- if (IS_ENABLED(CONFIG_CMD_TFTPPUT) && proto == TFTPPUT)
- image_save_addr = addr;
- else
- image_load_addr = addr;
-
- net_boot_file_name_explicit = fname_explicit;
- copy_filename(net_boot_file_name, fname, sizeof(net_boot_file_name));
- if (IS_ENABLED(CONFIG_IPV6))
- use_ip6 = ipv6;
- if (IS_ENABLED(CONFIG_CMD_TFTPPUT) && proto == TFTPPUT) {
- image_save_addr = addr;
- image_save_size = size;
- } else {
- image_load_addr = addr;
- }
-
- ret = net_loop(proto);
- if (ret < 0) {
- bootstage_error(BOOTSTAGE_ID_NET_NETLOOP_OK);
- return ret;
- }
- bootstage_mark(BOOTSTAGE_ID_NET_NETLOOP_OK);
-
- return 0;
-}
-
-int netboot_run(enum proto_t proto, ulong addr, const char *fname, ulong size,
- bool ipv6)
-{
- return netboot_run_(proto, addr, fname, size, true, ipv6);
-}
-
/**********************************************************************/
static void start_again_timeout_handler(void)