diff mbox series

[v3,10/16] hw/arm/raspi: Use AddressSpace when using arm_boot::write_secondary_boot

Message ID 20191019234715.25750-11-f4bug@amsat.org
State New
Headers show
Series hw/arm/raspi: Add thermal/timer, improve address space, run U-boot | expand

Commit Message

Philippe Mathieu-Daudé Oct. 19, 2019, 11:47 p.m. UTC
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(-)

Comments

Alistair Francis Oct. 21, 2019, 11:22 p.m. UTC | #1
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 mbox series

Patch

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)