Messages in this thread | | | Date | Mon, 10 Jun 2019 09:08:59 +0100 | From | Lee Jones <> | Subject | Re: [PATCH 1/2] mfd: core: Support multiple OF child devices of the same type |
| |
On Thu, 06 Jun 2019, Robert Hancock wrote:
> On 2019-06-05 11:27 p.m., Lee Jones wrote: > >>>> Without having the .of_full_name support, both MFD cells ended up > >>>> wrongly matching against the i2c@c0000 device tree node since we just > >>>> picked the first one where of_compatible matched. > >>> > >>> What is contained in each of their resources? > >> > >> These are the resource entries for those two devices: > >> > >> static const struct resource dbe_i2c1_resources[] = { > >> { > >> .start = 0xc0000, > >> .end = 0xcffff, > >> .name = "xi2c1_regs", > >> .flags = IORESOURCE_MEM, > >> .desc = IORES_DESC_NONE > >> }, > >> }; > >> > >> static const struct resource dbe_i2c2_resources[] = { > >> { > >> .start = 0xd0000, > >> .end = 0xdffff, > >> .name = "xi2c2_regs", > >> .flags = IORESOURCE_MEM, > >> .desc = IORES_DESC_NONE > >> }, > >> }; > > > > This is your problem. You are providing the memory resources through > > *both* DT and MFD. I don't believe I've seen your MFD driver, but it > > looks like it's probably not required at all. Just allow DT to probe > > each of your child devices. You can obtain the IO memory from there > > directly using the usual platform_get_resource() calls. > > As far as I can tell, the DT child devices underneath a PCIe device > don't get probed and drivers loaded automatically - possibly for valid > reasons. The MFD driver appears to be required in order to actually get > drivers attached to those DT nodes.
You need to call of_platform_populate().
-- Lee Jones [李琼斯] Linaro Services Technical Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
| |