diff options
-rw-r--r-- | cmd/qfw.c | 42 |
1 files changed, 21 insertions, 21 deletions
@@ -7,6 +7,7 @@ #include <command.h> #include <env.h> #include <errno.h> +#include <mapmem.h> #include <qfw.h> #include <dm.h> @@ -17,7 +18,7 @@ static struct udevice *qfw_dev; * 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) +int qemu_fwcfg_cmd_setup_kernel(ulong load_addr, ulong initrd_addr) { char *data_addr; uint32_t setup_size, kernel_size, cmdline_size, initrd_size; @@ -25,13 +26,13 @@ static int qemu_fwcfg_cmd_setup_kernel(void *load_addr, void *initrd_addr) 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) { + if (!kernel_size) { printf("fatal: no kernel available\n"); - return CMD_RET_FAILURE; + return -ENOENT; } - data_addr = load_addr; - if (setup_size != 0) { + data_addr = map_sysmem(load_addr, 0); + if (setup_size) { qfw_read_entry(qfw_dev, FW_CFG_SETUP_DATA, le32_to_cpu(setup_size), data_addr); data_addr += le32_to_cpu(setup_size); @@ -42,9 +43,9 @@ static int qemu_fwcfg_cmd_setup_kernel(void *load_addr, void *initrd_addr) data_addr += le32_to_cpu(kernel_size); env_set_hex("filesize", le32_to_cpu(kernel_size)); - data_addr = initrd_addr; + data_addr = map_sysmem(initrd_addr, 0); qfw_read_entry(qfw_dev, FW_CFG_INITRD_SIZE, 4, &initrd_size); - if (initrd_size == 0) { + if (!initrd_size) { printf("warning: no initrd available\n"); } else { qfw_read_entry(qfw_dev, FW_CFG_INITRD_DATA, @@ -61,17 +62,16 @@ static int qemu_fwcfg_cmd_setup_kernel(void *load_addr, void *initrd_addr) * if kernel cmdline only contains '\0', (e.g. no -append * when invoking qemu), do not update bootargs */ - if (*data_addr != '\0') { + if (*data_addr) { if (env_set("bootargs", data_addr) < 0) printf("warning: unable to change bootargs\n"); } } - printf("loading kernel to address %p size %x", load_addr, + printf("loading kernel to address %lx size %x", load_addr, le32_to_cpu(kernel_size)); if (initrd_size) - printf(" initrd %p size %x\n", - initrd_addr, + printf(" initrd %lx size %x\n", initrd_addr, le32_to_cpu(initrd_size)); else printf("\n"); @@ -119,28 +119,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) { |