From Philippe Mathieu-Daudé to ~philmd/qemu
Currently the QEMU Python module limits the QEMUMachine class to
use the first serial console.
Some machines/guest might use another console than the first one as
the 'boot console'. For example the Raspberry Pi uses the second
(AUX) console.
To be able to use the Nth console as default, we simply need to
connect all the N - 1 consoles to the null chardev.
Add an index argument, so we can use a specific serial console as
default.
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
[message trimmed]
From Philippe Mathieu-Daudé to ~philmd/qemu
This is a proof-of-concept for the '-smp cores=1' feature which
restricts the cores brought online on reset.
The u-boot binary is old and from an untrusted source, but I
don't want to add the build machinery in QEMU, so it is enough
to demonstrate the feature works reliably.
By default this test is not run:
$ avocado run -t machine:raspi3 tests/acceptance/
(1/1) tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_arm_raspi3_uboot: SKIP: untrusted code
RESULTS : PASS 0 | ERROR 0 | FAIL 0 | SKIP 1 | WARN 0 | INTERRUPT 0 | CANCEL 0
JOB TIME : 0.23 s
[message trimmed]
From Philippe Mathieu-Daudé to ~philmd/qemu
We now use -smp cores=<n> to limit the number of cores powered on reset. Rename the 'enabled_cpus' variable as 'enabled_cores' to better match the new use. No functional changes. Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- hw/arm/bcm2836.c | 4 ++-- hw/arm/raspi.c | 2 +- include/hw/arm/bcm2836.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hw/arm/bcm2836.c b/hw/arm/bcm2836.c index ada35e5620..e3cef69687 100644 --- a/hw/arm/bcm2836.c [message trimmed]
From Philippe Mathieu-Daudé to ~philmd/qemu
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(-) diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c index a12459bc41..569d85c11a 100644 --- a/hw/arm/raspi.c [message trimmed]
From Philippe Mathieu-Daudé to ~philmd/qemu
Our code currently create the raspi2 (based on the BCM2836) and the raspi3 (on the BCM2837). Similarly, the raspi4 is based on the BCM2838. To be able to add the new board, make the current code more modular: - Dynamically fills the 'board-rev' value - Allow DRAM sizes different than 1 GiB Rename the board model name as 'B' since this is the one encoded in the 'board-rev' tag. Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- hw/arm/raspi.c | 107 +++++++++++++++++++++++++++++++++++++++++++------ [message trimmed]
From Philippe Mathieu-Daudé to ~philmd/qemu
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/highbank.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/arm/highbank.c b/hw/arm/highbank.c index f1724d6929..518d935fdf 100644 --- a/hw/arm/highbank.c [message trimmed]
From Philippe Mathieu-Daudé to ~philmd/qemu
Currently the VideoCore is created in the Peripheral container
as the 'GPU bus'. It is created there because the peripherals
using DMA use physical addresses from the VideoCore bus.
However the VideoCore is a GPU core placed at the same
hierarchical level than the ARM cores.
To match the datasheet design, create the VideoCore container
in the SoC, and link it to the peripheral container.
The VideoCore bus is 1GiB wide, accessible at 4 regions in
different cache configurations. Add the full mapping.
Before this commit the memory tree is:
[message trimmed]
From Philippe Mathieu-Daudé to ~philmd/qemu
The VideoCore GPU is indenpendant from the Peripheral block. In the next commit, we will move its instantiation to the SoC block. The "gpu-bus" object will not be accessible in init() but later in realize(). As a preliminary step to keep the diff clearer, move the const link property creation from init() to realize(). Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- hw/arm/bcm2835_peripherals.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/hw/arm/bcm2835_peripherals.c b/hw/arm/bcm2835_peripherals.c index 17207ae07e..d51e9c8def 100644 --- a/hw/arm/bcm2835_peripherals.c [message trimmed]
From Philippe Mathieu-Daudé to ~philmd/qemu
Currently all CPUs access the main system bus. Let each CPU have
his own address space.
Before:
(qemu) info mtree
address-space: memory
0000000000000000-ffffffffffffffff (prio 0, i/o): system
0000000000000000-000000003fffffff (prio 0, ram): ram
000000003f000000-000000003fffffff (prio 1, i/o): bcm2835-peripherals
000000003f003000-000000003f00301f (prio 0, i/o): bcm2835-sys-timer
000000003f007000-000000003f007fff (prio 0, i/o): bcm2835-dma
000000003f00b200-000000003f00b3ff (prio 0, i/o): bcm2835-ic
000000003f00b400-000000003f00b43f (prio -1000, i/o): bcm2835-sp804
[message trimmed]
From Philippe Mathieu-Daudé to ~philmd/qemu
The abstract TYPE_BCM283X device provides a 'enabled-cpus' property
to restrict the number of cores powered on reset. This because on
real hardware the GPU is responsible of starting the cores and keep
them spinning until the Linux kernel is ready to use them.
When using the -kernel paramenter, QEMU does this by installing the
'raspi_smpboot' code when arm_boot_info::write_board_setup() is
called. This is a special feature to help the Linux kernel, and can
only be used with a Linux kernel.
Even if loaded with the -kernel option, U-boot is not Linux, thus
is not recognized as it and the raspi_smpboot code is not installed.
Upon introduction of this machine in commit 1df7d1f9303, the -smp <N>
option allowd to limit the number of cores powered on reset.
[message trimmed]