qemu/hw/arm
Udo Steinberg 41f7b58b63 hw/arm/virt: Report correct register sizes in ACPI DBG2/SPCR tables.
Documentation for using the GAS in ACPI tables to report debug UART addresses at
https://learn.microsoft.com/en-us/windows-hardware/drivers/bringup/acpi-debug-port-table
states the following:

- The Register Bit Width field contains the register stride and must be a
  power of 2 that is at least as large as the access size.  On 32-bit
  platforms this value cannot exceed 32.  On 64-bit platforms this value
  cannot exceed 64.
- The Access Size field is used to determine whether byte, WORD, DWORD, or
  QWORD accesses are to be used.  QWORD accesses are only valid on 64-bit
  architectures.

Documentation for the ARM PL011 at
https://developer.arm.com/documentation/ddi0183/latest/
states that the registers are:

- spaced 4 bytes apart (see Table 3-2), so register stride must be 32.
- 16 bits in size in some cases (see individual registers), so access
  size must be at least 2.

Linux doesn't seem to care about this error in the table, but it does
affect at least the NOVA microhypervisor.

In theory we therefore have a choice between reporting the access
size as 2 (16 bit accesses) or 3 (32-bit accesses).  In practice,
Linux does not correctly handle the case where the table reports the
access size as 2: as of kernel commit 750b95887e5678, the code in
acpi_parse_spcr() tries to tell the serial driver to use 16 bit
accesses by passing "mmio16" in the option string, but the PL011
driver code in pl011_console_match() only recognizes "mmio" or
"mmio32". The result is that unless the user has enabled 'earlycon'
there is no console output from the guest kernel.

We therefore choose to report the access size as 32 bits; this works
for NOVA and also for Linux.  It is also what the UEFI firmware on a
Raspberry Pi 4 reports, so we're in line with existing real-world
practice.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1938
Signed-off-by: Udo Steinberg <udo@hypervisor.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
[PMM: minor commit message tweaks; use 32 bit accesses]
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
2023-11-06 15:00:26 +00:00
..
allwinner-a10.c hw/arm: Add WDT to Allwinner-A10 and Cubieboard 2023-04-20 10:21:13 +01:00
allwinner-h3.c hw/arm: Add WDT to Allwinner-H3 and Orangepi-PC 2023-04-20 10:21:14 +01:00
allwinner-r40.c hw/arm/allwinner: Clean up local variable shadowing 2023-09-29 10:07:15 +02:00
armsse.c hw/arm/armv7m: Clean up local variable shadowing 2023-09-29 10:07:15 +02:00
armv7m.c target/arm: Move feature test functions to their own header 2023-10-27 11:44:32 +01:00
aspeed_ast10x0.c hw/arm/aspeed: Move AspeedSoCState::armv7m to Aspeed10x0SoCState 2023-10-25 09:52:44 +02:00
aspeed_ast2400.c hw/arm/aspeed: Move AspeedSoCState::cpu/vic to Aspeed2400SoCState 2023-10-25 09:52:44 +02:00
aspeed_ast2600.c hw/arm/aspeed: Move AspeedSoCState::a7mpcore to Aspeed2600SoCState 2023-10-25 09:52:44 +02:00
aspeed_eeprom.c hw/arm/aspeed: Add VPD data for Rainier machine 2023-06-15 18:35:57 +02:00
aspeed_eeprom.h hw/arm/aspeed: Add VPD data for Rainier machine 2023-06-15 18:35:57 +02:00
aspeed_soc_common.c hw/arm/aspeed: Check 'memory' link is set in common aspeed_soc_realize 2023-10-25 09:52:44 +02:00
aspeed.c hw/arm/aspeed: Dynamically allocate AspeedMachineState::soc field 2023-10-25 09:52:44 +02:00
bananapi_m2u.c hw/arm: Avoid using 'first_cpu' when first ARM CPU is reachable 2023-10-27 12:50:12 +01:00
bcm2835_peripherals.c hw/arm/bcm2835_property: Implement "get command line" message 2023-05-02 15:47:40 +01:00
bcm2836.c hw/arm/bcm2835_property: Implement "get command line" message 2023-05-02 15:47:40 +01:00
boot.c target/arm/arm-powerctl: Correctly init CPUs when powered on to lower EL 2023-10-19 14:32:13 +01:00
collie.c *: Add missing includes of qemu/error-report.h 2023-03-22 15:06:57 +00:00
cubieboard.c hw/arm/allwinner-a10: Remove 'hw/arm/boot.h' from header 2023-10-27 12:42:13 +01:00
digic_boards.c hw/arm: Don't include qemu-common.h unnecessarily 2021-12-15 10:35:26 +00:00
digic.c arm/digic: replace snprintf() with g_strdup_printf() 2022-04-21 17:03:51 +04:00
exynos4_boards.c hw/arm: Avoid using 'first_cpu' when first ARM CPU is reachable 2023-10-27 12:50:12 +01:00
exynos4210.c hw/arm: Fix some typos in comments (most found by codespell) 2023-04-20 10:21:13 +01:00
fby35.c hw/arm/aspeed: Move AspeedSoCState::a7mpcore to Aspeed2600SoCState 2023-10-25 09:52:44 +02:00
fsl-imx6.c fsl-imx6: Add SNVS support for i.MX6 boards 2023-05-30 13:02:53 +01:00
fsl-imx6ul.c Add i.MX6UL missing devices. 2023-08-31 09:45:16 +01:00
fsl-imx7.c Add i.MX7 SRC device implementation 2023-08-31 09:45:17 +01:00
fsl-imx25.c Do not include exec/address-spaces.h if it's not really necessary 2021-05-02 17:24:51 +02:00
fsl-imx31.c Do not include cpu.h if it's not really necessary 2021-05-02 17:24:51 +02:00
gumstix.c hw/arm: Remove unreachable code calling pflash_cfi01_register() 2023-01-12 17:03:14 +00:00
highbank.c hw/arm/boot: Drop nb_cpus field from arm_boot_info 2022-02-08 10:56:28 +00:00
imx25_pdk.c hw/arm/fsl-imx25: Remove 'hw/arm/boot.h' from header 2023-10-27 12:42:13 +01:00
integratorcp.c hw/arm: Support machine-default audiodev with fallback 2023-10-03 10:29:39 +02:00
Kconfig hw/arm: xlnx-versal-virt: Add AMD/Xilinx TRNG device 2023-11-02 14:42:03 +00:00
kzm.c hw/arm/fsl-imx31: Remove 'hw/arm/boot.h' from header 2023-10-27 12:42:13 +01:00
mainstone.c hw/arm: Remove unreachable code calling pflash_cfi01_register() 2023-01-12 17:03:14 +00:00
mcimx6ul-evk.c hw/arm/fsl-imx6ul: Remove 'hw/arm/boot.h' from header 2023-10-27 12:42:13 +01:00
mcimx7d-sabre.c hw/arm/fsl-imx7: Remove 'hw/arm/boot.h' from header 2023-10-27 12:42:13 +01:00
meson.build hw/arm/aspeed: Move AspeedSoCState::cpu/vic to Aspeed2400SoCState 2023-10-25 09:52:44 +02:00
microbit.c target/arm: Make boards pass base address to armv7m_load_kernel() 2022-09-14 11:19:40 +01:00
mps2-tz.c hw/arm: Set number of MPU regions correctly for an505, an521, an524 2023-08-31 11:07:02 +01:00
mps2.c hw/char/cmsdk-apb-uart: Open-code cmsdk_apb_uart_create() 2023-02-27 13:27:05 +00:00
msf2-soc.c arm: Remove system_clock_scale global 2021-09-01 11:08:21 +01:00
msf2-som.c tests/avocado: Truncate M2S-FG484 SOM SPI flash to 16MiB 2023-02-07 09:02:04 +01:00
musca.c target/arm: Make boards pass base address to armv7m_load_kernel() 2022-09-14 11:19:40 +01:00
musicpal.c hw/arm: Support machine-default audiodev with fallback 2023-10-03 10:29:39 +02:00
netduino2.c target/arm: Make boards pass base address to armv7m_load_kernel() 2022-09-14 11:19:40 +01:00
netduinoplus2.c target/arm: Make boards pass base address to armv7m_load_kernel() 2022-09-14 11:19:40 +01:00
npcm7xx_boards.c *: Add missing includes of qemu/error-report.h 2023-03-22 15:06:57 +00:00
npcm7xx.c hw/arm: Attach PSPI module to NPCM7XX SoC 2023-02-16 16:00:48 +00:00
nrf51_soc.c arm: Remove system_clock_scale global 2021-09-01 11:08:21 +01:00
nseries.c hw/arm: Support machine-default audiodev with fallback 2023-10-03 10:29:39 +02:00
olimex-stm32-h405.c hw/arm: Add Olimex H405 2023-01-12 16:50:19 +00:00
omap1.c hw/arm: Fix some typos in comments (most found by codespell) 2023-04-20 10:21:13 +01:00
omap2.c audio: propagate Error * out of audio_init 2023-10-03 10:29:40 +02:00
omap_sx1.c *: Add missing includes of qemu/error-report.h 2023-03-22 15:06:57 +00:00
orangepi.c hw/arm: Avoid using 'first_cpu' when first ARM CPU is reachable 2023-10-27 12:50:12 +01:00
palm.c hw/arm: Support machine-default audiodev with fallback 2023-10-03 10:29:39 +02:00
pxa2xx_gpio.c hw/arm/pxa2xx_gpio: Pass CPU using QOM link property 2023-11-02 13:36:45 +00:00
pxa2xx_pic.c hw/intc/pxa2xx: Factor pxa2xx_pic_realize() out of pxa2xx_pic_init() 2023-10-27 12:48:57 +01:00
pxa2xx.c hw/arm/pxa2xx: Realize PXA2XX_I2C device before accessing it 2023-10-27 12:48:57 +01:00
raspi.c hw/arm/raspi: Use arm_write_bootloader() to write boot code 2023-05-02 15:47:41 +01:00
realview.c hw/arm: Avoid using 'first_cpu' when first ARM CPU is reachable 2023-10-27 12:50:12 +01:00
sabrelite.c hw/arm/fsl-imx6: Remove 'hw/arm/boot.h' from header 2023-10-27 12:42:13 +01:00
sbsa-ref.c target/arm: Implement Neoverse N2 CPU model 2023-10-27 11:41:13 +01:00
smmu-common.c hw/arm/smmu: Handle big-endian hosts correctly 2023-07-25 10:56:51 +01:00
smmu-internal.h hw/arm/smmuv3: Add VMID to TLB tagging 2023-05-30 15:50:16 +01:00
smmuv3-internal.h hw/arm/smmuv3: Update ID register bit field definitions 2023-10-19 14:32:13 +01:00
smmuv3.c hw/arm/smmuv3: Advertise SMMUv3.1-XNX feature 2023-10-19 14:32:13 +01:00
spitz.c hw/arm: Support machine-default audiodev with fallback 2023-10-03 10:29:39 +02:00
stellaris.c hw/input/stellaris_gamepad: Convert to qemu_input_handler_register() 2023-11-02 12:52:06 +00:00
stm32f100_soc.c hw/arm/stm32f100: Wire up sysclk and refclk 2021-09-01 11:08:19 +01:00
stm32f205_soc.c hw/arm/stm32f205: Wire up sysclk and refclk 2021-09-01 11:08:19 +01:00
stm32f405_soc.c hw/arm/stm32f405: correctly describe the memory layout 2023-01-12 16:50:18 +00:00
stm32vldiscovery.c target/arm: Make boards pass base address to armv7m_load_kernel() 2022-09-14 11:19:40 +01:00
strongarm.c bulk: Rename TARGET_FMT_plx -> HWADDR_FMT_plx 2023-01-18 11:14:34 +01:00
strongarm.h hw/arm/collie: Create the RAM in the board 2019-10-22 17:44:01 +01:00
tosa.c hw/arm/pxa2xx: Simplify pxa255_init() 2023-01-12 17:03:14 +00:00
trace-events hw/arm/smmuv3: Add stage-2 support in iova notifier 2023-05-30 15:50:16 +01:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
versatilepb.c hw/arm: Support machine-default audiodev with fallback 2023-10-03 10:29:39 +02:00
vexpress.c hw/arm: Support machine-default audiodev with fallback 2023-10-03 10:29:39 +02:00
virt-acpi-build.c hw/arm/virt: Report correct register sizes in ACPI DBG2/SPCR tables. 2023-11-06 15:00:26 +00:00
virt.c hw/arm/virt: fix PMU IRQ registration 2023-11-06 15:00:26 +00:00
xen_arm.c xen_arm: Initialize RAM and add hi/low memory regions 2023-08-30 18:23:08 -07:00
xilinx_zynq.c hw/arm: Avoid using 'first_cpu' when first ARM CPU is reachable 2023-10-27 12:50:12 +01:00
xlnx-versal-virt.c hw/arm/xlnx-versal: Remove 'hw/arm/boot.h' from header 2023-10-27 12:42:13 +01:00
xlnx-versal.c hw/arm: xlnx-versal-virt: Add AMD/Xilinx TRNG device 2023-11-02 14:42:03 +00:00
xlnx-zcu102.c hw/arm/xlnx-zynqmp: Remove 'hw/arm/boot.h' from header 2023-10-27 12:42:13 +01:00
xlnx-zynqmp.c hw/arm/xlnx-zynqmp: fix unsigned error when checking the RPUs number 2023-05-30 15:50:16 +01:00
z2.c hw/arm: Support machine-default audiodev with fallback 2023-10-03 10:29:39 +02:00