summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2023-01-28 15:00:22 -0700
committerTom Rini <trini@konsulko.com>2023-02-06 13:04:53 -0500
commite08e6ea67d91af6e2c423f5248aaedb82088b897 (patch)
treecd607b9d0c727a9ad4b65f93c3dec443fabf0afa /cmd
parent22353fa6b585072e7cbe7d534fbbb98ef70f56d5 (diff)
qemu: Update qfw command to use addresses
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>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/qfw.c42
1 files changed, 21 insertions, 21 deletions
diff --git a/cmd/qfw.c b/cmd/qfw.c
index 0c49c6074e..8837911d99 100644
--- 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) {