Wire the BCM2838 thermal sensor (added in the previous patch) into the SoC: instantiate it in the peripherals block and map its register region at the real BCM2711 physical address. Also stop raspi4b from masking out the "brcm,bcm2711-thermal" device-tree node, now that the sensor it describes is actually implemented.
Adapted from patch 17/41 of Sergey Kambalin's Raspberry Pi 4B series (patchwork series 829638) against current QEMU master. Signed-off-by: Marcelo Manzo <[email protected]> Reviewed-by: Peter Maydell <[email protected]> --- hw/arm/bcm2838_peripherals.c | 11 +++++++++++ hw/arm/raspi4b.c | 1 - include/hw/arm/bcm2838_peripherals.h | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/hw/arm/bcm2838_peripherals.c b/hw/arm/bcm2838_peripherals.c index 35e2fc005c..f4e9cb88f1 100644 --- a/hw/arm/bcm2838_peripherals.c +++ b/hw/arm/bcm2838_peripherals.c @@ -38,6 +38,9 @@ static void bcm2838_peripherals_init(Object *obj) /* Random Number Generator */ object_initialize_child(obj, "rng200", &s->rng200, TYPE_BCM2838_RNG200); + /* Thermal */ + object_initialize_child(obj, "thermal", &s->thermal, TYPE_BCM2838_THERMAL); + /* GPIO */ object_initialize_child(obj, "gpio", &s->gpio, TYPE_BCM2838_GPIO); @@ -72,6 +75,7 @@ static void bcm2838_peripherals_realize(DeviceState *dev, Error **errp) BCMSocPeripheralBaseState *s_base = BCM_SOC_PERIPHERALS_BASE(dev); MemoryRegion *rng200_mr; qemu_irq rng_200_irq; + MemoryRegion *thermal_mr; int n; bcm_soc_peripherals_common_realize(dev, errp); @@ -96,6 +100,13 @@ static void bcm2838_peripherals_realize(DeviceState *dev, Error **errp) BCM2835_IC_GPU_IRQ, INTERRUPT_RNG); sysbus_connect_irq(SYS_BUS_DEVICE(&s->rng200), 0, rng_200_irq); + /* THERMAL */ + if (!sysbus_realize(SYS_BUS_DEVICE(&s->thermal), errp)) { + return; + } + thermal_mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->thermal), 0); + memory_region_add_subregion(&s->peri_low_mr, 0x15D2000, thermal_mr); + /* Extended Mass Media Controller 2 */ object_property_set_uint(OBJECT(&s->emmc2), "sd-spec-version", 3, &error_abort); diff --git a/hw/arm/raspi4b.c b/hw/arm/raspi4b.c index 87fcba036d..61adccded9 100644 --- a/hw/arm/raspi4b.c +++ b/hw/arm/raspi4b.c @@ -64,7 +64,6 @@ static void raspi4_modify_dtb(const struct arm_boot_info *info, void *fdt) /* Temporarily disable following devices until they are implemented */ const char *nodes_to_remove[] = { "brcm,bcm2711-pcie", - "brcm,bcm2711-thermal", "brcm,bcm2711-genet-v5", }; diff --git a/include/hw/arm/bcm2838_peripherals.h b/include/hw/arm/bcm2838_peripherals.h index 15423527e8..a720eea821 100644 --- a/include/hw/arm/bcm2838_peripherals.h +++ b/include/hw/arm/bcm2838_peripherals.h @@ -11,6 +11,7 @@ #include "hw/arm/bcm2835_peripherals.h" #include "hw/misc/bcm2838_rng200.h" +#include "hw/misc/bcm2838_thermal.h" #include "hw/sd/sdhci.h" #include "hw/gpio/bcm2838_gpio.h" @@ -66,6 +67,7 @@ struct BCM2838PeripheralState { MemoryRegion mphi_mr_alias; BCM2838Rng200State rng200; + Bcm2838ThermalState thermal; SDHCIState emmc2; BCM2838GpioState gpio; -- 2.55.0
