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>
This commit is contained in:
Simon Glass 2023-01-28 15:00:22 -07:00 committed by Tom Rini
parent 22353fa6b5
commit e08e6ea67d

View file

@ -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) {