Skip to content
Snippets Groups Projects
Commit e08e6ea6 authored by Simon Glass's avatar Simon Glass Committed by Tom Rini
Browse files

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's avatarSimon Glass <sjg@chromium.org>
parent 22353fa6
No related branches found
No related tags found
No related merge requests found
......@@ -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) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment