[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 01/24] arm/stm32f405: Fix realization of "stm32f2xx-adc" d
From: |
Alistair Francis |
Subject: |
Re: [PATCH v3 01/24] arm/stm32f405: Fix realization of "stm32f2xx-adc" devices |
Date: |
Tue, 9 Jun 2020 16:14:12 -0700 |
On Tue, Jun 9, 2020 at 5:24 AM Markus Armbruster <armbru@redhat.com> wrote:
>
> stm32f405_soc_initfn() creates six such devices, but
> stm32f405_soc_realize() realizes only one. Affects machine
> netduinoplus2.
>
> In theory, a device becomes real only on realize. In practice, the
> transition from unreal to real is a fuzzy one. The work to make a
> device real can be spread between realize methods (fine),
> instance_init methods (wrong), and board code wiring up the device
> (fine as long as it effectively happens on realize). Depending on
> what exactly is done where, a device can work even when we neglect
> to realize it.
>
> The five unrealized devices appear to stay unreal: neither MMIO nor
> IRQ get wired up.
>
> Fix stm32f405_soc_realize() to realize and wire up all six. Visible
> in "info qtree":
>
> bus: main-system-bus
> type System
> dev: stm32f405-soc, id ""
> cpu-type = "cortex-m4-arm-cpu"
> dev: stm32f2xx-adc, id ""
> gpio-out "sysbus-irq" 1
> - mmio ffffffffffffffff/00000000000000ff
> + mmio 0000000040012000/00000000000000ff
> dev: stm32f2xx-adc, id ""
> gpio-out "sysbus-irq" 1
> - mmio ffffffffffffffff/00000000000000ff
> + mmio 0000000040012100/00000000000000ff
> dev: stm32f2xx-adc, id ""
> gpio-out "sysbus-irq" 1
> - mmio ffffffffffffffff/00000000000000ff
> + mmio 0000000040012200/00000000000000ff
> dev: stm32f2xx-adc, id ""
> gpio-out "sysbus-irq" 1
> - mmio ffffffffffffffff/00000000000000ff
> + mmio 0000000040012300/00000000000000ff
> dev: stm32f2xx-adc, id ""
> gpio-out "sysbus-irq" 1
> - mmio 0000000040012000/00000000000000ff
> + mmio 0000000040012400/00000000000000ff
> dev: stm32f2xx-adc, id ""
> gpio-out "sysbus-irq" 1
> - mmio ffffffffffffffff/00000000000000ff
> + mmio 0000000040012500/00000000000000ff
> dev: armv7m, id ""
>
> Fixes: 529fc5fd3e18ace8f739afd02dc0953354f39442
> Cc: Alistair Francis <alistair@alistair23.me>
> Cc: Peter Maydell <peter.maydell@linaro.org>
> Cc: qemu-arm@nongnu.org
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Alistair
> ---
> hw/arm/stm32f405_soc.c | 23 +++++++++++++----------
> 1 file changed, 13 insertions(+), 10 deletions(-)
>
> diff --git a/hw/arm/stm32f405_soc.c b/hw/arm/stm32f405_soc.c
> index 4f10ce6176..c9a530eecf 100644
> --- a/hw/arm/stm32f405_soc.c
> +++ b/hw/arm/stm32f405_soc.c
> @@ -37,7 +37,8 @@ static const uint32_t usart_addr[] = { 0x40011000,
> 0x40004400, 0x40004800,
> /* At the moment only Timer 2 to 5 are modelled */
> static const uint32_t timer_addr[] = { 0x40000000, 0x40000400,
> 0x40000800, 0x40000C00 };
> -#define ADC_ADDR 0x40012000
> +static const uint32_t adc_addr[] = { 0x40012000, 0x40012100, 0x40012200,
> + 0x40012300, 0x40012400, 0x40012500 };
> static const uint32_t spi_addr[] = { 0x40013000, 0x40003800, 0x40003C00,
> 0x40013400, 0x40015000, 0x40015400 };
> #define EXTI_ADDR 0x40013C00
> @@ -185,16 +186,18 @@ static void stm32f405_soc_realize(DeviceState *dev_soc,
> Error **errp)
> qdev_connect_gpio_out(DEVICE(&s->adc_irqs), 0,
> qdev_get_gpio_in(armv7m, ADC_IRQ));
>
> - dev = DEVICE(&(s->adc[i]));
> - object_property_set_bool(OBJECT(&s->adc[i]), true, "realized", &err);
> - if (err != NULL) {
> - error_propagate(errp, err);
> - return;
> + for (i = 0; i < STM_NUM_ADCS; i++) {
> + dev = DEVICE(&(s->adc[i]));
> + object_property_set_bool(OBJECT(&s->adc[i]), true, "realized", &err);
> + if (err != NULL) {
> + error_propagate(errp, err);
> + return;
> + }
> + busdev = SYS_BUS_DEVICE(dev);
> + sysbus_mmio_map(busdev, 0, adc_addr[i]);
> + sysbus_connect_irq(busdev, 0,
> + qdev_get_gpio_in(DEVICE(&s->adc_irqs), i));
> }
> - busdev = SYS_BUS_DEVICE(dev);
> - sysbus_mmio_map(busdev, 0, ADC_ADDR);
> - sysbus_connect_irq(busdev, 0,
> - qdev_get_gpio_in(DEVICE(&s->adc_irqs), i));
>
> /* SPI devices */
> for (i = 0; i < STM_NUM_SPIS; i++) {
> --
> 2.26.2
>
>
- [PATCH v3 00/24] Fixes around device realization, Markus Armbruster, 2020/06/09
- [PATCH v3 01/24] arm/stm32f405: Fix realization of "stm32f2xx-adc" devices, Markus Armbruster, 2020/06/09
- Re: [PATCH v3 01/24] arm/stm32f405: Fix realization of "stm32f2xx-adc" devices,
Alistair Francis <=
- [PATCH v3 08/24] mac_via: Fix to realize "mos6522-q800-via*" devices, Markus Armbruster, 2020/06/09
- [PATCH v3 14/24] macio: Put "macio-nvram" device on the macio bus, Markus Armbruster, 2020/06/09
- [PATCH v3 16/24] ppc/pnv: Put "*-pnv-chip" and "pnv-xive" on the main system bus, Markus Armbruster, 2020/06/09
- [PATCH v3 09/24] macio: Fix to realize "mos6522-cuda" and "mos6522-pmu" devices, Markus Armbruster, 2020/06/09
- [PATCH v3 12/24] MAINTAINERS: Make section PowerNV cover pci-host/pnv* as well, Markus Armbruster, 2020/06/09
- [PATCH v3 02/24] display/xlnx_dp: Fix to realize "i2c-ddc" and "aux-to-i2c-bridge", Markus Armbruster, 2020/06/09
- [PATCH v3 05/24] arm/aspeed: Rework NIC attachment, Markus Armbruster, 2020/06/09