mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
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:
parent
22353fa6b5
commit
e08e6ea67d
1 changed files with 21 additions and 21 deletions
42
cmd/qfw.c
42
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) {
|
||||
|
|
Loading…
Reference in a new issue