qemu: Update qfw command to use addresses
authorSimon Glass <sjg@chromium.org>
Sat, 28 Jan 2023 22:00:22 +0000 (15:00 -0700)
committerTom Rini <trini@konsulko.com>
Mon, 6 Feb 2023 18:04:53 +0000 (13:04 -0500)
This uses casts all over the place. Use the correct type so that these
can be avoided, as is done with other commands. Also simplify a few
conditionals.

Signed-off-by: Simon Glass <sjg@chromium.org>
cmd/qfw.c

index 0c49c60..8837911 100644 (file)
--- a/cmd/qfw.c
+++ b/cmd/qfw.c
@@ -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) {