qemu/include/hw/arm
Cédric Le Goater b7f1a0cb76 arm/aspeed: Compute the number of CPUs from the SoC definition
Commit ece09beec4 ("aspeed: introduce a configurable number of CPU
per machine") was a convient change during bringup but the Aspeed SoCs
have a fixed number of CPUs : one for the AST2400 and AST2500, and two
for the AST2600.

When the number of CPUs configured with -smp is less than the SoC's
fixed number, the "unconfigured" CPUs are left unrealized. This can
happen for machines ast2600-evb and tacoma-bmc, where the SoC's fixed
number is 2. To get virtual hardware that matches the physical
hardware, you have to pass -smp cpus=2 (or its sugared form -smp 2).

We normally reject -smp cpus=N when N exceeds the machine's limit.
Except we ignore cpus=2 (and only cpus=2) with a warning for machines
ast2500-evb, palmetto-bmc, romulus-bmc, sonorapass-bmc, swift-bmc, and
witherspoon-bmc.

Remove the "num-cpu" property from the SoC state and use the fixed
number of CPUs defined in the SoC class instead. Compute the default,
min, max number of CPUs of the machine directly from the SoC class
definition.

Machines ast2600-evb and tacoma-bmc now always get their second CPU as
they should. Visible in "info qom-tree"; here's the change for
ast2600-evb:

     /machine (ast2600-evb-machine)
       /peripheral (container)
       /peripheral-anon (container)
       /soc (ast2600-a1)
         /a7mpcore (a15mpcore_priv)
           /a15mp-priv-container[0] (qemu:memory-region)
           /gic (arm_gic)
             /gic_cpu[0] (qemu:memory-region)
             /gic_cpu[1] (qemu:memory-region)
    +        /gic_cpu[2] (qemu:memory-region)
             /gic_dist[0] (qemu:memory-region)
             /gic_vcpu[0] (qemu:memory-region)
             /gic_viface[0] (qemu:memory-region)
             /gic_viface[1] (qemu:memory-region)
    +        /gic_viface[2] (qemu:memory-region)
             /unnamed-gpio-in[0] (irq)
             [...]
    +        /unnamed-gpio-in[160] (irq)
             [same for 161 to 190...]
    +        /unnamed-gpio-in[191] (irq)

Also visible in "info qtree"; here's the change for ast2600-evb:

     bus: main-system-bus
       type System
       dev: a15mpcore_priv, id ""
         gpio-in "" 128
    -    gpio-out "sysbus-irq" 5
    -    num-cpu = 1 (0x1)
    +    gpio-out "sysbus-irq" 10
    +    num-cpu = 2 (0x2)
         num-irq = 160 (0xa0)
         mmio 0000000040460000/0000000000008000
       dev: arm_gic, id ""
    -    gpio-in "" 160
    -    num-cpu = 1 (0x1)
    +    gpio-in "" 192
    +    num-cpu = 2 (0x2)
         num-irq = 160 (0xa0)
         revision = 2 (0x2)
         has-security-extensions = true
         has-virtualization-extensions = true
         num-priority-bits = 8 (0x8)
         mmio ffffffffffffffff/0000000000001000
         mmio ffffffffffffffff/0000000000002000
         mmio ffffffffffffffff/0000000000001000
         mmio ffffffffffffffff/0000000000002000
         mmio ffffffffffffffff/0000000000000100
    +    mmio ffffffffffffffff/0000000000000100
    +    mmio ffffffffffffffff/0000000000000200
         mmio ffffffffffffffff/0000000000000200

The other machines now reject -smp cpus=2 just like -smp cpus=3 and up.

Signed-off-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
[Commit message expanded]
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20200609122339.937862-5-armbru@redhat.com>
2020-06-15 21:36:09 +02:00
..
allwinner-a10.h hw/arm/allwinner: add RTC device support 2020-03-12 16:27:33 +00:00
allwinner-h3.h hw/arm/allwinner: add RTC device support 2020-03-12 16:27:33 +00:00
armsse.h hw/arm: Correctly disable FPU/DSP for some ARMSSE-based boards 2019-06-17 15:12:25 +01:00
armv7m.h hw/arm/armv7m: Forward "vfp" and "dsp" properties to CPU 2019-06-17 15:12:25 +01:00
aspeed_soc.h arm/aspeed: Compute the number of CPUs from the SoC definition 2020-06-15 21:36:09 +02:00
aspeed.h hw/arm/aspeed: add a 'execute-in-place' property to boot directly from CE0 2020-01-30 16:02:02 +00:00
bcm2835_peripherals.h wire in the dwc-hsotg (dwc2) USB host controller emulation 2020-06-05 17:23:09 +01:00
bcm2836.h hw/arm/bcm283x: Correct the license text 2020-03-23 17:22:30 +00:00
boot.h hw/arm/boot: Set NSACR.{CP11, CP10} in dummy SMC setup routine 2019-11-11 13:44:16 +00:00
digic.h qemu-common: push cpu.h inclusion out of qemu-common.h 2016-05-19 16:42:29 +02:00
exynos4210.h hw/arm/exynos4210: Fix DMA initialization 2020-01-23 16:34:15 +00:00
fdt.h hw/arm/sysbus-fdt: enable vfio-calxeda-xgmac dynamic instantiation 2015-06-19 14:17:44 +01:00
fsl-imx6.h hw: Move i.MX watchdog driver to hw/watchdog 2020-05-21 20:00:18 +01:00
fsl-imx6ul.h hw: Move i.MX watchdog driver to hw/watchdog 2020-05-21 20:00:18 +01:00
fsl-imx7.h hw/arm/fsl-imx7: Connect watchdog interrupts 2020-05-21 22:05:27 +01:00
fsl-imx25.h hw/arm/fsl-imx25: Wire up watchdog 2020-05-21 22:05:27 +01:00
fsl-imx31.h hw/arm/fsl-imx31: Wire up watchdog 2020-05-21 22:05:27 +01:00
linux-boot-if.h qom: make interface types abstract 2018-12-11 15:45:22 -02:00
msf2-soc.h msf2: Add EMAC block to SmartFusion2 SoC 2020-04-30 11:52:28 +01:00
nrf51_soc.h Clean up decorations and whitespace around header guards 2019-05-13 08:58:55 +02:00
nrf51.h hw/arm/nrf51: Add NRF51_PERIPHERAL_SIZE definition 2020-05-11 11:05:11 +01:00
omap.h omap-gpio: remove PROP_PTR 2020-01-07 17:24:29 +04:00
primecell.h hw: move headers to include/ 2013-04-08 18:13:10 +02:00
pxa.h hw/pcmcia: Remove PCMCIACardState from "qemu/typedefs.h" 2019-01-22 05:14:32 +01:00
raspi_platform.h hw/arm/bcm2835_peripherals: Use the thermal sensor block 2019-10-25 13:09:27 +01:00
sharpsl.h include: Make headers more self-contained 2019-08-16 13:31:51 +02:00
smmu-common.h misc: Replace zero-length arrays with flexible array member (automatic) 2020-03-16 22:07:42 +01:00
smmuv3.h hw/arm/smmuv3: Cache/invalidate config data 2018-06-26 17:50:42 +01:00
soc_dma.h Include exec/memory.h slightly less 2019-08-16 13:31:52 +02:00
stm32f205_soc.h arm: drop intermediate cpu_model -> cpu type parsing and use cpu type directly 2017-09-19 09:09:32 -03:00
stm32f405_soc.h hw/arm: Add the STM32F4xx SoC 2020-01-17 14:09:29 +00:00
sysbus-fdt.h arm/boot: split load_dtb() from arm_load_kernel() 2018-05-10 18:10:56 +01:00
virt.h hw/arm/virt: Introduce a RAS machine option 2020-05-14 15:03:09 +01:00
xlnx-versal.h hw/arm: versal: Add support for the RTC 2020-05-04 11:11:28 +01:00
xlnx-zynqmp.h hw: Move Xilinx ZynqMP RTC from hw/timer/ to hw/rtc/ subdirectory 2019-10-24 20:28:01 +02:00