On Fri, Sep 18, 2020 at 02:38:00PM +0200, Bean Huo wrote: > From: Bean Huo <beanhuo@xxxxxxxxxx> > > PCI driver might be probed before the gpiochip, so, of_get_named_gpio() > can return -EPROBE_DEFER. And let kirin_pcie_probe() directly return > -ENODEV, which will result in the PCIe probe failure and the PCIe > will not be probed again after the gpiochip driver is loaded. > > Fix the above issue by letting kirin_pcie_probe() return -EPROBE_DEFER in > such a case. > > Fixes: 6e0832fa432e ("PCI: Collect all native drivers under drivers/pci/controller") This is certainly not the commit that triggered the issue so I would remove it. Kirin maintainers are CC'ed, waiting for their ACK. Lorenzo > Signed-off-by: Bean Huo <beanhuo@xxxxxxxxxx> > --- > drivers/pci/controller/dwc/pcie-kirin.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/drivers/pci/controller/dwc/pcie-kirin.c b/drivers/pci/controller/dwc/pcie-kirin.c > index e496f51e0152..74b88d158072 100644 > --- a/drivers/pci/controller/dwc/pcie-kirin.c > +++ b/drivers/pci/controller/dwc/pcie-kirin.c > @@ -507,8 +507,12 @@ static int kirin_pcie_probe(struct platform_device *pdev) > > kirin_pcie->gpio_id_reset = of_get_named_gpio(dev->of_node, > "reset-gpios", 0); > - if (kirin_pcie->gpio_id_reset < 0) > + if (kirin_pcie->gpio_id_reset == -EPROBE_DEFER) { > + return -EPROBE_DEFER; > + } else if (!gpio_is_valid(kirin_pcie->gpio_id_reset)) { > + dev_err(dev, "unable to get a valid gpio pin\n"); > return -ENODEV; > + } > > ret = kirin_pcie_power_on(kirin_pcie); > if (ret) > -- > 2.17.1 >