Message ID | 20191019234715.25750-11-f4bug@amsat.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | hw/arm/raspi: Add thermal/timer, improve address space, run U-boot | expand |
On Sat, Oct 19, 2019 at 4:56 PM Philippe Mathieu-Daudé <f4bug@amsat.org> wrote: > > write_secondary_boot() is used in SMP configurations where the > CPU address space might not be the main System Bus. > The rom_add_blob_fixed_as() function allow us to specify an > address space. Use it to write each boot blob in the corresponding > CPU address space. > > Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Alistair > --- > hw/arm/raspi.c | 14 ++++++++------ > 1 file changed, 8 insertions(+), 6 deletions(-) > > diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c > index a12459bc41..569d85c11a 100644 > --- a/hw/arm/raspi.c > +++ b/hw/arm/raspi.c > @@ -60,12 +60,14 @@ static void write_smpboot(ARMCPU *cpu, const struct arm_boot_info *info) > QEMU_BUILD_BUG_ON((BOARDSETUP_ADDR & 0xf) != 0 > || (BOARDSETUP_ADDR >> 4) >= 0x100); > > - rom_add_blob_fixed("raspi_smpboot", smpboot, sizeof(smpboot), > - info->smp_loader_start); > + rom_add_blob_fixed_as("raspi_smpboot", smpboot, sizeof(smpboot), > + info->smp_loader_start, > + arm_boot_address_space(cpu, info)); > } > > static void write_smpboot64(ARMCPU *cpu, const struct arm_boot_info *info) > { > + AddressSpace *as = arm_boot_address_space(cpu, info); > /* Unlike the AArch32 version we don't need to call the board setup hook. > * The mechanism for doing the spin-table is also entirely different. > * We must have four 64-bit fields at absolute addresses > @@ -92,10 +94,10 @@ static void write_smpboot64(ARMCPU *cpu, const struct arm_boot_info *info) > 0, 0, 0, 0 > }; > > - rom_add_blob_fixed("raspi_smpboot", smpboot, sizeof(smpboot), > - info->smp_loader_start); > - rom_add_blob_fixed("raspi_spintables", spintables, sizeof(spintables), > - SPINTABLE_ADDR); > + rom_add_blob_fixed_as("raspi_smpboot", smpboot, sizeof(smpboot), > + info->smp_loader_start, as); > + rom_add_blob_fixed_as("raspi_spintables", spintables, sizeof(spintables), > + SPINTABLE_ADDR, as); > } > > static void write_board_setup(ARMCPU *cpu, const struct arm_boot_info *info) > -- > 2.21.0 > >
diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c index a12459bc41..569d85c11a 100644 --- a/hw/arm/raspi.c +++ b/hw/arm/raspi.c @@ -60,12 +60,14 @@ static void write_smpboot(ARMCPU *cpu, const struct arm_boot_info *info) QEMU_BUILD_BUG_ON((BOARDSETUP_ADDR & 0xf) != 0 || (BOARDSETUP_ADDR >> 4) >= 0x100); - rom_add_blob_fixed("raspi_smpboot", smpboot, sizeof(smpboot), - info->smp_loader_start); + rom_add_blob_fixed_as("raspi_smpboot", smpboot, sizeof(smpboot), + info->smp_loader_start, + arm_boot_address_space(cpu, info)); } static void write_smpboot64(ARMCPU *cpu, const struct arm_boot_info *info) { + AddressSpace *as = arm_boot_address_space(cpu, info); /* Unlike the AArch32 version we don't need to call the board setup hook. * The mechanism for doing the spin-table is also entirely different. * We must have four 64-bit fields at absolute addresses @@ -92,10 +94,10 @@ static void write_smpboot64(ARMCPU *cpu, const struct arm_boot_info *info) 0, 0, 0, 0 }; - rom_add_blob_fixed("raspi_smpboot", smpboot, sizeof(smpboot), - info->smp_loader_start); - rom_add_blob_fixed("raspi_spintables", spintables, sizeof(spintables), - SPINTABLE_ADDR); + rom_add_blob_fixed_as("raspi_smpboot", smpboot, sizeof(smpboot), + info->smp_loader_start, as); + rom_add_blob_fixed_as("raspi_spintables", spintables, sizeof(spintables), + SPINTABLE_ADDR, as); } static void write_board_setup(ARMCPU *cpu, const struct arm_boot_info *info)
write_secondary_boot() is used in SMP configurations where the CPU address space might not be the main System Bus. The rom_add_blob_fixed_as() function allow us to specify an address space. Use it to write each boot blob in the corresponding CPU address space. Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- hw/arm/raspi.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)