On 5/27/20 11:27 AM, Markus Armbruster wrote: > Alistair Francis <alistai...@gmail.com> writes: > >> On Mon, May 18, 2020 at 10:08 PM Markus Armbruster <arm...@redhat.com> wrote: >>> >>> Alistair Francis <alistai...@gmail.com> writes: >>> >>>> On Sun, May 17, 2020 at 10:06 PM Markus Armbruster <arm...@redhat.com> >>>> 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 :) >>> >>> I'd love to squash in corrections, but I don't know the correct >>> addresses. Can you help? >> >> Yep, thanks for squashing it in. >> >> The three addresses are: >> >> 0x40012000 >> 0x40012100 >> 0x40012200 >> >> and they all share interrupt number 18. > > An the other three? There are six devices in total...
Alistair looked at the stm32f205, which has 3 ADCs (and seems correct). > >> Let me know if you want me to do it. Alistair, the problem is the stm32f405. I guess the bug come from copy/pasting then modifying for the shared IRQ. /* Timer 2 to 5 */ for (i = 0; i < STM_NUM_TIMERS; i++) { ... } ... /* ADC device, the IRQs are ORed together */ ... dev = DEVICE(&(s->adc[i])); <=== i = STM_NUM_TIMERS = 4 object_property_set_bool(OBJECT(&s->adc[i]), true, "realized", &err); Only ADC#3 is realized, then mapped at 0x40012000. You need to unparent the others anyway, so it is easier to realize adc[0] and unparent the rest: for (i = 1; i < STM_NUM_ADCS; i++) { ... }