PCI: pci-dra7xx: Prepare for deferred probe with module_platform_driver
authorTony Lindgren <tony@atomide.com>
Wed, 10 Mar 2021 12:01:00 +0000 (14:01 +0200)
committerTony Lindgren <tony@atomide.com>
Wed, 10 Mar 2021 12:01:00 +0000 (14:01 +0200)
commite259c2926c016dd815e5547412356d378fc1f589
tree563c7eb46198a62e3db959dabebedad6be898c59
parent7f7acef8571a239568abaf5f3dc7694d18ae970b
PCI: pci-dra7xx: Prepare for deferred probe with module_platform_driver

After updating pci-dra7xx driver to probe with ti-sysc and genpd, I
noticed that dra7xx_pcie_probe() would not run if a power-domains property
was configured for the interconnect target module.

Turns out that module_platform_driver_probe uses platform_driver_probe(),
while builtin_platform_driver uses platform_driver_register().

Only platform_driver_register() works for deferred probe as noted in the
comments for __platform_driver_probe() in drivers/base/platform.c with a
line saying "Note that this is incompatible with deferred probing".

With module_platform_driver_probe, we have platform_driver_probe() produce
-ENODEV error at device_initcall() level, and no further attempts are done.
Let's fix this by using module_platform_driver instead.

Note this is not an issue currently as we probe devices with simple-bus,
and only is needed as we start probing the device with ti-sysc, or when
probed with simple-pm-bus.

Note that we must now also remove __init for probe related functions to
avoid a section mismatch warning.

Cc: linux-pci@vger.kernel.org
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Tested-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
drivers/pci/controller/dwc/pci-dra7xx.c