summaryrefslogtreecommitdiff
path: root/cmd/qfw.c
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/qfw.c')
-rw-r--r--cmd/qfw.c89
1 files changed, 11 insertions, 78 deletions
diff --git a/cmd/qfw.c b/cmd/qfw.c
index 0c49c6074e1..ae3c6a7a84e 100644
--- a/cmd/qfw.c
+++ b/cmd/qfw.c
@@ -12,73 +12,6 @@
static struct udevice *qfw_dev;
-/*
- * This function prepares kernel for zboot. It loads kernel data
- * to 'load_addr', initrd to 'initrd_addr' and kernel command
- * line using qemu fw_cfg interface.
- */
-static int qemu_fwcfg_cmd_setup_kernel(void *load_addr, void *initrd_addr)
-{
- char *data_addr;
- uint32_t setup_size, kernel_size, cmdline_size, initrd_size;
-
- qfw_read_entry(qfw_dev, FW_CFG_SETUP_SIZE, 4, &setup_size);
- qfw_read_entry(qfw_dev, FW_CFG_KERNEL_SIZE, 4, &kernel_size);
-
- if (kernel_size == 0) {
- printf("fatal: no kernel available\n");
- return CMD_RET_FAILURE;
- }
-
- data_addr = load_addr;
- if (setup_size != 0) {
- qfw_read_entry(qfw_dev, FW_CFG_SETUP_DATA,
- le32_to_cpu(setup_size), data_addr);
- data_addr += le32_to_cpu(setup_size);
- }
-
- qfw_read_entry(qfw_dev, FW_CFG_KERNEL_DATA,
- le32_to_cpu(kernel_size), data_addr);
- data_addr += le32_to_cpu(kernel_size);
- env_set_hex("filesize", le32_to_cpu(kernel_size));
-
- data_addr = initrd_addr;
- qfw_read_entry(qfw_dev, FW_CFG_INITRD_SIZE, 4, &initrd_size);
- if (initrd_size == 0) {
- printf("warning: no initrd available\n");
- } else {
- qfw_read_entry(qfw_dev, FW_CFG_INITRD_DATA,
- le32_to_cpu(initrd_size), data_addr);
- data_addr += le32_to_cpu(initrd_size);
- env_set_hex("filesize", le32_to_cpu(initrd_size));
- }
-
- qfw_read_entry(qfw_dev, FW_CFG_CMDLINE_SIZE, 4, &cmdline_size);
- if (cmdline_size) {
- qfw_read_entry(qfw_dev, FW_CFG_CMDLINE_DATA,
- le32_to_cpu(cmdline_size), data_addr);
- /*
- * if kernel cmdline only contains '\0', (e.g. no -append
- * when invoking qemu), do not update bootargs
- */
- if (*data_addr != '\0') {
- if (env_set("bootargs", data_addr) < 0)
- printf("warning: unable to change bootargs\n");
- }
- }
-
- printf("loading kernel to address %p size %x", load_addr,
- le32_to_cpu(kernel_size));
- if (initrd_size)
- printf(" initrd %p size %x\n",
- initrd_addr,
- le32_to_cpu(initrd_size));
- else
- printf("\n");
-
- return 0;
-}
-
static int qemu_fwcfg_cmd_list_firmware(void)
{
int ret;
@@ -119,28 +52,28 @@ static int qemu_fwcfg_do_load(struct cmd_tbl *cmdtp, int flag,
int argc, char *const argv[])
{
char *env;
- void *load_addr;
- void *initrd_addr;
+ ulong load_addr;
+ ulong initrd_addr;
env = env_get("loadaddr");
load_addr = env ?
- (void *)hextoul(env, NULL) :
- (void *)CONFIG_SYS_LOAD_ADDR;
+ hextoul(env, NULL) :
+ CONFIG_SYS_LOAD_ADDR;
env = env_get("ramdiskaddr");
initrd_addr = env ?
- (void *)hextoul(env, NULL) :
+ hextoul(env, NULL) :
#ifdef CFG_RAMDISK_ADDR
- (void *)CFG_RAMDISK_ADDR;
+ CFG_RAMDISK_ADDR;
#else
- NULL;
+ 0;
#endif
if (argc == 2) {
- load_addr = (void *)hextoul(argv[0], NULL);
- initrd_addr = (void *)hextoul(argv[1], NULL);
+ load_addr = hextoul(argv[0], NULL);
+ initrd_addr = hextoul(argv[1], NULL);
} else if (argc == 1) {
- load_addr = (void *)hextoul(argv[0], NULL);
+ load_addr = hextoul(argv[0], NULL);
}
if (!load_addr || !initrd_addr) {
@@ -148,7 +81,7 @@ static int qemu_fwcfg_do_load(struct cmd_tbl *cmdtp, int flag,
return CMD_RET_FAILURE;
}
- return qemu_fwcfg_cmd_setup_kernel(load_addr, initrd_addr);
+ return qemu_fwcfg_setup_kernel(qfw_dev, load_addr, initrd_addr);
}
static struct cmd_tbl fwcfg_commands[] = {