Hi, sorry I am late to this thead. Our brcmstb PCIe code is using platform_driver_probe() which does not tolerate EPROBE_DEFER. Also, I do not see any "cost" associated with having gpio-brcmstb.c using subsys_initcall(); in fact, I see 33 gpio-*.c files that use subsys_initcall(). Thanks, Jim On Thu, Jan 7, 2016 at 1:12 PM, Florian Fainelli <f.fainelli@xxxxxxxxx> wrote: > On 06/01/16 22:05, Gregory Fong wrote: >> Hello Florian and Jim, >> >> On Wed, Jan 6, 2016 at 10:55 AM, Florian Fainelli <f.fainelli@xxxxxxxxx> wrote: >>> From: Jim Quinlan <jim2101024@xxxxxxxxx> >>> >>> Because regulators are started with subsys_initcall(), and gpio references may >>> be contained in the regulators, it makes sense to start the brcmstb-gpio's with >>> a subsys_initcall(). The order within the drivers/Makefile ensures that the >>> gpio initialization happens prior to the regulator's initialization. >>> >>> We need to unroll module_platform_driver() now to allow this and have custom >>> exit and init module functions to control the initialization level. >> >> If gpio pins are needed for a regulator to come up, wouldn't it be >> better to handle this using deferred probe instead of initcall-based >> initialization? Deferred probe has its problems, but I was under the >> impression that it's the encouraged way to resolve these sort of >> initialization order issues. > > To give you some more context associated with this change, we now have > some boards which have GPIO-connected regulators to turn on/off PCIe > endpoint devices. In the downstream kernel, and with lack of a better > solution for now, we ended-up having the PCIE Root Complex driver to > claim these regulator, and flip them on shortly before attempting a bus > scan. > > If we used deferred probing, I am assuming the sequence of events could > go like this: > > - PCIe driver gets initialized, looks for regulators, cannot get a > handle on them, gets EPROBE_DEFER (arch_initcall right now) > - regulator subsystem gets initialized, does not have a valid GPIO > provider driver yet, returns EPROBE_DEFER (subsys_initcall) > - GPIO provider (gpio-brcmstb) finally gets probed and registered, > regulator get registered and available, PCIe RC driver can now use them > and power on the PCIE end point (module_initcall) > > I suppose this might be working actually, let me go back to the white > board and look at this with Jim. > -- > Florian -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html