[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 01/24] arm/stm32f405: Fix realization of "stm32f2xx-adc" devi
From: |
Alistair Francis |
Subject: |
Re: [PATCH 01/24] arm/stm32f405: Fix realization of "stm32f2xx-adc" devices |
Date: |
Mon, 18 May 2020 09:48:56 -0700 |
On Sun, May 17, 2020 at 10:06 PM Markus Armbruster <address@hidden> wrote:
>
> stm32f405_soc_initfn() creates six such devices, but
> stm32f405_soc_realize() realizes only one. Affects machine
> netduinoplus2.
>
> I wonder how this ever worked. If the "device becomes real only on
> realize" thing actually works, then we've always been missing five of
> six such devices, yet nobody noticed.
I must have just been testing the first ADC.
>
> Fix stm32f405_soc_realize() to realize 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 0000000040012000/00000000000000ff
> 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 0000000040012000/00000000000000ff
> dev: stm32f2xx-adc, id ""
> gpio-out "sysbus-irq" 1
> mmio 0000000040012000/00000000000000ff
> dev: stm32f2xx-adc, id ""
> gpio-out "sysbus-irq" 1
> - mmio ffffffffffffffff/00000000000000ff
> + mmio 0000000040012000/00000000000000ff
> dev: armv7m, id ""
>
> The mmio addresses look suspicious.
Good catch, thanks :)
>
> Fixes: 529fc5fd3e18ace8f739afd02dc0953354f39442
> Cc: Alistair Francis <address@hidden>
> Cc: Peter Maydell <address@hidden>
> Cc: address@hidden
> Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Alistair Francis <address@hidden>
Alistair
> ---
> hw/arm/stm32f405_soc.c | 20 +++++++++++---------
> 1 file changed, 11 insertions(+), 9 deletions(-)
>
> diff --git a/hw/arm/stm32f405_soc.c b/hw/arm/stm32f405_soc.c
> index 4f10ce6176..4649502711 100644
> --- a/hw/arm/stm32f405_soc.c
> +++ b/hw/arm/stm32f405_soc.c
> @@ -185,16 +185,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);
> + 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.21.1
>
>