Re: [Qemu-devel] [PATCH v9 01/11] hw/arm: simplify arm_load_dtb

2019-08-14 Thread Cédric Le Goater
On 13/08/2019 23:55, Eduardo Habkost wrote:
> 
> CCing ARM maintainers.  I'd like to at least get one Acked-by from
> them before queueing this on machine-next.
> 
> 
> On Fri, Aug 09, 2019 at 02:57:21PM +0800, Tao wrote:
>> From: Tao Xu 
>>
>> In struct arm_boot_info, kernel_filename, initrd_filename and
>> kernel_cmdline are copied from from MachineState. This patch add
>> MachineState as a parameter into arm_load_dtb() and move the copy chunk
>> of kernel_filename, initrd_filename and kernel_cmdline into
>> arm_load_kernel().
>>
>> Reviewed-by: Igor Mammedov 
>> Reviewed-by: Liu Jingqi 
>> Suggested-by: Igor Mammedov 
>> Signed-off-by: Tao Xu 
>> ---
>>
>> No changes in v9
>> ---
>>  hw/arm/aspeed.c   |  5 +
>>  hw/arm/boot.c | 14 --
>>  hw/arm/collie.c   |  8 +---
>>  hw/arm/cubieboard.c   |  5 +
>>  hw/arm/exynos4_boards.c   |  7 ++-
>>  hw/arm/highbank.c |  8 +---
>>  hw/arm/imx25_pdk.c|  5 +
>>  hw/arm/integratorcp.c |  8 +---
>>  hw/arm/kzm.c  |  5 +
>>  hw/arm/mainstone.c|  5 +
>>  hw/arm/mcimx6ul-evk.c |  5 +
>>  hw/arm/mcimx7d-sabre.c|  5 +
>>  hw/arm/musicpal.c |  8 +---
>>  hw/arm/nseries.c  |  5 +
>>  hw/arm/omap_sx1.c |  5 +
>>  hw/arm/palm.c | 10 ++
>>  hw/arm/raspi.c|  6 +-
>>  hw/arm/realview.c |  5 +
>>  hw/arm/sabrelite.c|  5 +
>>  hw/arm/sbsa-ref.c |  3 +--
>>  hw/arm/spitz.c|  5 +
>>  hw/arm/tosa.c |  8 +---
>>  hw/arm/versatilepb.c  |  5 +
>>  hw/arm/vexpress.c |  5 +
>>  hw/arm/virt.c |  8 +++-
>>  hw/arm/xilinx_zynq.c  |  8 +---
>>  hw/arm/xlnx-versal-virt.c |  7 ++-
>>  hw/arm/xlnx-zcu102.c  |  5 +
>>  hw/arm/z2.c   |  8 +---
>>  include/hw/arm/boot.h |  4 ++--
>>  30 files changed, 43 insertions(+), 147 deletions(-)
>>
>> diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c
>> index 843b708247..f8733b86b9 100644
>> --- a/hw/arm/aspeed.c
>> +++ b/hw/arm/aspeed.c
>> @@ -241,9 +241,6 @@ static void aspeed_board_init(MachineState *machine,
>>  write_boot_rom(drive0, FIRMWARE_ADDR, fl->size, _abort);
>>  }
>>  
>> -aspeed_board_binfo.kernel_filename = machine->kernel_filename;
>> -aspeed_board_binfo.initrd_filename = machine->initrd_filename;
>> -aspeed_board_binfo.kernel_cmdline = machine->kernel_cmdline;
>>  aspeed_board_binfo.ram_size = ram_size;
>>  aspeed_board_binfo.loader_start = sc->info->memmap[ASPEED_SDRAM];
>>  aspeed_board_binfo.nb_cpus = bmc->soc.num_cpus;
>> @@ -252,7 +249,7 @@ static void aspeed_board_init(MachineState *machine,
>>  cfg->i2c_init(bmc);
>>  }
>>  
>> -arm_load_kernel(ARM_CPU(first_cpu), _board_binfo);
>> +arm_load_kernel(ARM_CPU(first_cpu), machine, _board_binfo);
>>  }

It looks OK to me. 

To be noted that the Aspeed machine use machine->kernel_filename to detect 
it is running without a bootloader which does some special settings, such 
as unlocking devices. In that case, we emulate the same behaviour.

Acked-by: Cédric Le Goater 

Thanks,

C.

>>  static void palmetto_bmc_i2c_init(AspeedBoardState *bmc)
>> diff --git a/hw/arm/boot.c b/hw/arm/boot.c
>> index c2b89b3bb9..ba604f8277 100644
>> --- a/hw/arm/boot.c
>> +++ b/hw/arm/boot.c
>> @@ -524,7 +524,7 @@ static void fdt_add_psci_node(void *fdt)
>>  }
>>  
>>  int arm_load_dtb(hwaddr addr, const struct arm_boot_info *binfo,
>> - hwaddr addr_limit, AddressSpace *as)
>> + hwaddr addr_limit, AddressSpace *as, MachineState *ms)
>>  {
>>  void *fdt = NULL;
>>  int size, rc, n = 0;
>> @@ -627,9 +627,9 @@ int arm_load_dtb(hwaddr addr, const struct arm_boot_info 
>> *binfo,
>>  qemu_fdt_add_subnode(fdt, "/chosen");
>>  }
>>  
>> -if (binfo->kernel_cmdline && *binfo->kernel_cmdline) {
>> +if (ms->kernel_cmdline && *ms->kernel_cmdline) {
>>  rc = qemu_fdt_setprop_string(fdt, "/chosen", "bootargs",
>> - binfo->kernel_cmdline);
>> + ms->kernel_cmdline);
>>  if (rc < 0) {
>>  fprintf(stderr, "couldn't set /chosen/bootargs\n");
>>  goto fail;
>> @@ -1261,7 +1261,7 @@ static void arm_setup_firmware_boot(ARMCPU *cpu, 
>> struct arm_boot_info *info)
>>   */
>>  }
>>  
>> -void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info)
>> +void arm_load_kernel(ARMCPU *cpu, MachineState *ms, struct arm_boot_info 
>> *info)
>>  {
>>  CPUState *cs;
>>  AddressSpace *as = arm_boot_address_space(cpu, info);
>> @@ -1282,7 +1282,9 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info 
>> *info)
>>   * doesn't support secure.
>>   */
>>  assert(!(info->secure_board_setup && kvm_enabled()));
>> -
>> +info->kernel_filename = 

Re: [Qemu-devel] [PATCH v9 01/11] hw/arm: simplify arm_load_dtb

2019-08-13 Thread Andrew Jeffery



On Wed, 14 Aug 2019, at 07:30, Alistair Francis wrote:
> On Fri, Aug 9, 2019 at 12:01 AM Tao  wrote:
> >
> > From: Tao Xu 
> >
> > In struct arm_boot_info, kernel_filename, initrd_filename and
> > kernel_cmdline are copied from from MachineState. This patch add
> > MachineState as a parameter into arm_load_dtb() and move the copy chunk
> > of kernel_filename, initrd_filename and kernel_cmdline into
> > arm_load_kernel().
> >
> > Reviewed-by: Igor Mammedov 
> > Reviewed-by: Liu Jingqi 
> > Suggested-by: Igor Mammedov 
> > Signed-off-by: Tao Xu 
> 
> Reviewed-by: Alistair Francis 
> 
> Alistair
> 
> > ---
> >
> > No changes in v9
> > ---
> >  hw/arm/aspeed.c   |  5 +

For the ASPEED machines:

Acked-by: Andrew Jeffery 



Re: [Qemu-devel] [PATCH v9 01/11] hw/arm: simplify arm_load_dtb

2019-08-13 Thread Alistair Francis
On Fri, Aug 9, 2019 at 12:01 AM Tao  wrote:
>
> From: Tao Xu 
>
> In struct arm_boot_info, kernel_filename, initrd_filename and
> kernel_cmdline are copied from from MachineState. This patch add
> MachineState as a parameter into arm_load_dtb() and move the copy chunk
> of kernel_filename, initrd_filename and kernel_cmdline into
> arm_load_kernel().
>
> Reviewed-by: Igor Mammedov 
> Reviewed-by: Liu Jingqi 
> Suggested-by: Igor Mammedov 
> Signed-off-by: Tao Xu 

Reviewed-by: Alistair Francis 

Alistair

> ---
>
> No changes in v9
> ---
>  hw/arm/aspeed.c   |  5 +
>  hw/arm/boot.c | 14 --
>  hw/arm/collie.c   |  8 +---
>  hw/arm/cubieboard.c   |  5 +
>  hw/arm/exynos4_boards.c   |  7 ++-
>  hw/arm/highbank.c |  8 +---
>  hw/arm/imx25_pdk.c|  5 +
>  hw/arm/integratorcp.c |  8 +---
>  hw/arm/kzm.c  |  5 +
>  hw/arm/mainstone.c|  5 +
>  hw/arm/mcimx6ul-evk.c |  5 +
>  hw/arm/mcimx7d-sabre.c|  5 +
>  hw/arm/musicpal.c |  8 +---
>  hw/arm/nseries.c  |  5 +
>  hw/arm/omap_sx1.c |  5 +
>  hw/arm/palm.c | 10 ++
>  hw/arm/raspi.c|  6 +-
>  hw/arm/realview.c |  5 +
>  hw/arm/sabrelite.c|  5 +
>  hw/arm/sbsa-ref.c |  3 +--
>  hw/arm/spitz.c|  5 +
>  hw/arm/tosa.c |  8 +---
>  hw/arm/versatilepb.c  |  5 +
>  hw/arm/vexpress.c |  5 +
>  hw/arm/virt.c |  8 +++-
>  hw/arm/xilinx_zynq.c  |  8 +---
>  hw/arm/xlnx-versal-virt.c |  7 ++-
>  hw/arm/xlnx-zcu102.c  |  5 +
>  hw/arm/z2.c   |  8 +---
>  include/hw/arm/boot.h |  4 ++--
>  30 files changed, 43 insertions(+), 147 deletions(-)
>
> diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c
> index 843b708247..f8733b86b9 100644
> --- a/hw/arm/aspeed.c
> +++ b/hw/arm/aspeed.c
> @@ -241,9 +241,6 @@ static void aspeed_board_init(MachineState *machine,
>  write_boot_rom(drive0, FIRMWARE_ADDR, fl->size, _abort);
>  }
>
> -aspeed_board_binfo.kernel_filename = machine->kernel_filename;
> -aspeed_board_binfo.initrd_filename = machine->initrd_filename;
> -aspeed_board_binfo.kernel_cmdline = machine->kernel_cmdline;
>  aspeed_board_binfo.ram_size = ram_size;
>  aspeed_board_binfo.loader_start = sc->info->memmap[ASPEED_SDRAM];
>  aspeed_board_binfo.nb_cpus = bmc->soc.num_cpus;
> @@ -252,7 +249,7 @@ static void aspeed_board_init(MachineState *machine,
>  cfg->i2c_init(bmc);
>  }
>
> -arm_load_kernel(ARM_CPU(first_cpu), _board_binfo);
> +arm_load_kernel(ARM_CPU(first_cpu), machine, _board_binfo);
>  }
>
>  static void palmetto_bmc_i2c_init(AspeedBoardState *bmc)
> diff --git a/hw/arm/boot.c b/hw/arm/boot.c
> index c2b89b3bb9..ba604f8277 100644
> --- a/hw/arm/boot.c
> +++ b/hw/arm/boot.c
> @@ -524,7 +524,7 @@ static void fdt_add_psci_node(void *fdt)
>  }
>
>  int arm_load_dtb(hwaddr addr, const struct arm_boot_info *binfo,
> - hwaddr addr_limit, AddressSpace *as)
> + hwaddr addr_limit, AddressSpace *as, MachineState *ms)
>  {
>  void *fdt = NULL;
>  int size, rc, n = 0;
> @@ -627,9 +627,9 @@ int arm_load_dtb(hwaddr addr, const struct arm_boot_info 
> *binfo,
>  qemu_fdt_add_subnode(fdt, "/chosen");
>  }
>
> -if (binfo->kernel_cmdline && *binfo->kernel_cmdline) {
> +if (ms->kernel_cmdline && *ms->kernel_cmdline) {
>  rc = qemu_fdt_setprop_string(fdt, "/chosen", "bootargs",
> - binfo->kernel_cmdline);
> + ms->kernel_cmdline);
>  if (rc < 0) {
>  fprintf(stderr, "couldn't set /chosen/bootargs\n");
>  goto fail;
> @@ -1261,7 +1261,7 @@ static void arm_setup_firmware_boot(ARMCPU *cpu, struct 
> arm_boot_info *info)
>   */
>  }
>
> -void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info)
> +void arm_load_kernel(ARMCPU *cpu, MachineState *ms, struct arm_boot_info 
> *info)
>  {
>  CPUState *cs;
>  AddressSpace *as = arm_boot_address_space(cpu, info);
> @@ -1282,7 +1282,9 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info 
> *info)
>   * doesn't support secure.
>   */
>  assert(!(info->secure_board_setup && kvm_enabled()));
> -
> +info->kernel_filename = ms->kernel_filename;
> +info->kernel_cmdline = ms->kernel_cmdline;
> +info->initrd_filename = ms->initrd_filename;
>  info->dtb_filename = qemu_opt_get(qemu_get_machine_opts(), "dtb");
>  info->dtb_limit = 0;
>
> @@ -1294,7 +1296,7 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info 
> *info)
>  }
>
>  if (!info->skip_dtb_autoload && have_dtb(info)) {
> -if (arm_load_dtb(info->dtb_start, info, info->dtb_limit, as) < 0) {
> +if (arm_load_dtb(info->dtb_start, info, info->dtb_limit, as, ms) < 
> 0) {
>   

Re: [Qemu-devel] [PATCH v9 01/11] hw/arm: simplify arm_load_dtb

2019-08-13 Thread Eduardo Habkost


CCing ARM maintainers.  I'd like to at least get one Acked-by from
them before queueing this on machine-next.


On Fri, Aug 09, 2019 at 02:57:21PM +0800, Tao wrote:
> From: Tao Xu 
> 
> In struct arm_boot_info, kernel_filename, initrd_filename and
> kernel_cmdline are copied from from MachineState. This patch add
> MachineState as a parameter into arm_load_dtb() and move the copy chunk
> of kernel_filename, initrd_filename and kernel_cmdline into
> arm_load_kernel().
> 
> Reviewed-by: Igor Mammedov 
> Reviewed-by: Liu Jingqi 
> Suggested-by: Igor Mammedov 
> Signed-off-by: Tao Xu 
> ---
> 
> No changes in v9
> ---
>  hw/arm/aspeed.c   |  5 +
>  hw/arm/boot.c | 14 --
>  hw/arm/collie.c   |  8 +---
>  hw/arm/cubieboard.c   |  5 +
>  hw/arm/exynos4_boards.c   |  7 ++-
>  hw/arm/highbank.c |  8 +---
>  hw/arm/imx25_pdk.c|  5 +
>  hw/arm/integratorcp.c |  8 +---
>  hw/arm/kzm.c  |  5 +
>  hw/arm/mainstone.c|  5 +
>  hw/arm/mcimx6ul-evk.c |  5 +
>  hw/arm/mcimx7d-sabre.c|  5 +
>  hw/arm/musicpal.c |  8 +---
>  hw/arm/nseries.c  |  5 +
>  hw/arm/omap_sx1.c |  5 +
>  hw/arm/palm.c | 10 ++
>  hw/arm/raspi.c|  6 +-
>  hw/arm/realview.c |  5 +
>  hw/arm/sabrelite.c|  5 +
>  hw/arm/sbsa-ref.c |  3 +--
>  hw/arm/spitz.c|  5 +
>  hw/arm/tosa.c |  8 +---
>  hw/arm/versatilepb.c  |  5 +
>  hw/arm/vexpress.c |  5 +
>  hw/arm/virt.c |  8 +++-
>  hw/arm/xilinx_zynq.c  |  8 +---
>  hw/arm/xlnx-versal-virt.c |  7 ++-
>  hw/arm/xlnx-zcu102.c  |  5 +
>  hw/arm/z2.c   |  8 +---
>  include/hw/arm/boot.h |  4 ++--
>  30 files changed, 43 insertions(+), 147 deletions(-)
> 
> diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c
> index 843b708247..f8733b86b9 100644
> --- a/hw/arm/aspeed.c
> +++ b/hw/arm/aspeed.c
> @@ -241,9 +241,6 @@ static void aspeed_board_init(MachineState *machine,
>  write_boot_rom(drive0, FIRMWARE_ADDR, fl->size, _abort);
>  }
>  
> -aspeed_board_binfo.kernel_filename = machine->kernel_filename;
> -aspeed_board_binfo.initrd_filename = machine->initrd_filename;
> -aspeed_board_binfo.kernel_cmdline = machine->kernel_cmdline;
>  aspeed_board_binfo.ram_size = ram_size;
>  aspeed_board_binfo.loader_start = sc->info->memmap[ASPEED_SDRAM];
>  aspeed_board_binfo.nb_cpus = bmc->soc.num_cpus;
> @@ -252,7 +249,7 @@ static void aspeed_board_init(MachineState *machine,
>  cfg->i2c_init(bmc);
>  }
>  
> -arm_load_kernel(ARM_CPU(first_cpu), _board_binfo);
> +arm_load_kernel(ARM_CPU(first_cpu), machine, _board_binfo);
>  }
>  
>  static void palmetto_bmc_i2c_init(AspeedBoardState *bmc)
> diff --git a/hw/arm/boot.c b/hw/arm/boot.c
> index c2b89b3bb9..ba604f8277 100644
> --- a/hw/arm/boot.c
> +++ b/hw/arm/boot.c
> @@ -524,7 +524,7 @@ static void fdt_add_psci_node(void *fdt)
>  }
>  
>  int arm_load_dtb(hwaddr addr, const struct arm_boot_info *binfo,
> - hwaddr addr_limit, AddressSpace *as)
> + hwaddr addr_limit, AddressSpace *as, MachineState *ms)
>  {
>  void *fdt = NULL;
>  int size, rc, n = 0;
> @@ -627,9 +627,9 @@ int arm_load_dtb(hwaddr addr, const struct arm_boot_info 
> *binfo,
>  qemu_fdt_add_subnode(fdt, "/chosen");
>  }
>  
> -if (binfo->kernel_cmdline && *binfo->kernel_cmdline) {
> +if (ms->kernel_cmdline && *ms->kernel_cmdline) {
>  rc = qemu_fdt_setprop_string(fdt, "/chosen", "bootargs",
> - binfo->kernel_cmdline);
> + ms->kernel_cmdline);
>  if (rc < 0) {
>  fprintf(stderr, "couldn't set /chosen/bootargs\n");
>  goto fail;
> @@ -1261,7 +1261,7 @@ static void arm_setup_firmware_boot(ARMCPU *cpu, struct 
> arm_boot_info *info)
>   */
>  }
>  
> -void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info)
> +void arm_load_kernel(ARMCPU *cpu, MachineState *ms, struct arm_boot_info 
> *info)
>  {
>  CPUState *cs;
>  AddressSpace *as = arm_boot_address_space(cpu, info);
> @@ -1282,7 +1282,9 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info 
> *info)
>   * doesn't support secure.
>   */
>  assert(!(info->secure_board_setup && kvm_enabled()));
> -
> +info->kernel_filename = ms->kernel_filename;
> +info->kernel_cmdline = ms->kernel_cmdline;
> +info->initrd_filename = ms->initrd_filename;
>  info->dtb_filename = qemu_opt_get(qemu_get_machine_opts(), "dtb");
>  info->dtb_limit = 0;
>  
> @@ -1294,7 +1296,7 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info 
> *info)
>  }
>  
>  if (!info->skip_dtb_autoload && have_dtb(info)) {
> -if (arm_load_dtb(info->dtb_start, info, info->dtb_limit, 

[Qemu-devel] [PATCH v9 01/11] hw/arm: simplify arm_load_dtb

2019-08-09 Thread Tao
From: Tao Xu 

In struct arm_boot_info, kernel_filename, initrd_filename and
kernel_cmdline are copied from from MachineState. This patch add
MachineState as a parameter into arm_load_dtb() and move the copy chunk
of kernel_filename, initrd_filename and kernel_cmdline into
arm_load_kernel().

Reviewed-by: Igor Mammedov 
Reviewed-by: Liu Jingqi 
Suggested-by: Igor Mammedov 
Signed-off-by: Tao Xu 
---

No changes in v9
---
 hw/arm/aspeed.c   |  5 +
 hw/arm/boot.c | 14 --
 hw/arm/collie.c   |  8 +---
 hw/arm/cubieboard.c   |  5 +
 hw/arm/exynos4_boards.c   |  7 ++-
 hw/arm/highbank.c |  8 +---
 hw/arm/imx25_pdk.c|  5 +
 hw/arm/integratorcp.c |  8 +---
 hw/arm/kzm.c  |  5 +
 hw/arm/mainstone.c|  5 +
 hw/arm/mcimx6ul-evk.c |  5 +
 hw/arm/mcimx7d-sabre.c|  5 +
 hw/arm/musicpal.c |  8 +---
 hw/arm/nseries.c  |  5 +
 hw/arm/omap_sx1.c |  5 +
 hw/arm/palm.c | 10 ++
 hw/arm/raspi.c|  6 +-
 hw/arm/realview.c |  5 +
 hw/arm/sabrelite.c|  5 +
 hw/arm/sbsa-ref.c |  3 +--
 hw/arm/spitz.c|  5 +
 hw/arm/tosa.c |  8 +---
 hw/arm/versatilepb.c  |  5 +
 hw/arm/vexpress.c |  5 +
 hw/arm/virt.c |  8 +++-
 hw/arm/xilinx_zynq.c  |  8 +---
 hw/arm/xlnx-versal-virt.c |  7 ++-
 hw/arm/xlnx-zcu102.c  |  5 +
 hw/arm/z2.c   |  8 +---
 include/hw/arm/boot.h |  4 ++--
 30 files changed, 43 insertions(+), 147 deletions(-)

diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c
index 843b708247..f8733b86b9 100644
--- a/hw/arm/aspeed.c
+++ b/hw/arm/aspeed.c
@@ -241,9 +241,6 @@ static void aspeed_board_init(MachineState *machine,
 write_boot_rom(drive0, FIRMWARE_ADDR, fl->size, _abort);
 }
 
-aspeed_board_binfo.kernel_filename = machine->kernel_filename;
-aspeed_board_binfo.initrd_filename = machine->initrd_filename;
-aspeed_board_binfo.kernel_cmdline = machine->kernel_cmdline;
 aspeed_board_binfo.ram_size = ram_size;
 aspeed_board_binfo.loader_start = sc->info->memmap[ASPEED_SDRAM];
 aspeed_board_binfo.nb_cpus = bmc->soc.num_cpus;
@@ -252,7 +249,7 @@ static void aspeed_board_init(MachineState *machine,
 cfg->i2c_init(bmc);
 }
 
-arm_load_kernel(ARM_CPU(first_cpu), _board_binfo);
+arm_load_kernel(ARM_CPU(first_cpu), machine, _board_binfo);
 }
 
 static void palmetto_bmc_i2c_init(AspeedBoardState *bmc)
diff --git a/hw/arm/boot.c b/hw/arm/boot.c
index c2b89b3bb9..ba604f8277 100644
--- a/hw/arm/boot.c
+++ b/hw/arm/boot.c
@@ -524,7 +524,7 @@ static void fdt_add_psci_node(void *fdt)
 }
 
 int arm_load_dtb(hwaddr addr, const struct arm_boot_info *binfo,
- hwaddr addr_limit, AddressSpace *as)
+ hwaddr addr_limit, AddressSpace *as, MachineState *ms)
 {
 void *fdt = NULL;
 int size, rc, n = 0;
@@ -627,9 +627,9 @@ int arm_load_dtb(hwaddr addr, const struct arm_boot_info 
*binfo,
 qemu_fdt_add_subnode(fdt, "/chosen");
 }
 
-if (binfo->kernel_cmdline && *binfo->kernel_cmdline) {
+if (ms->kernel_cmdline && *ms->kernel_cmdline) {
 rc = qemu_fdt_setprop_string(fdt, "/chosen", "bootargs",
- binfo->kernel_cmdline);
+ ms->kernel_cmdline);
 if (rc < 0) {
 fprintf(stderr, "couldn't set /chosen/bootargs\n");
 goto fail;
@@ -1261,7 +1261,7 @@ static void arm_setup_firmware_boot(ARMCPU *cpu, struct 
arm_boot_info *info)
  */
 }
 
-void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info)
+void arm_load_kernel(ARMCPU *cpu, MachineState *ms, struct arm_boot_info *info)
 {
 CPUState *cs;
 AddressSpace *as = arm_boot_address_space(cpu, info);
@@ -1282,7 +1282,9 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info 
*info)
  * doesn't support secure.
  */
 assert(!(info->secure_board_setup && kvm_enabled()));
-
+info->kernel_filename = ms->kernel_filename;
+info->kernel_cmdline = ms->kernel_cmdline;
+info->initrd_filename = ms->initrd_filename;
 info->dtb_filename = qemu_opt_get(qemu_get_machine_opts(), "dtb");
 info->dtb_limit = 0;
 
@@ -1294,7 +1296,7 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info 
*info)
 }
 
 if (!info->skip_dtb_autoload && have_dtb(info)) {
-if (arm_load_dtb(info->dtb_start, info, info->dtb_limit, as) < 0) {
+if (arm_load_dtb(info->dtb_start, info, info->dtb_limit, as, ms) < 0) {
 exit(1);
 }
 }
diff --git a/hw/arm/collie.c b/hw/arm/collie.c
index 3db3c56004..72bc8f26e5 100644
--- a/hw/arm/collie.c
+++ b/hw/arm/collie.c
@@ -26,9 +26,6 @@ static struct arm_boot_info collie_binfo = {
 
 static void collie_init(MachineState *machine)
 {
-const char *kernel_filename =