Message ID | 20200918123800.19983-1-huobean@gmail.com (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Lorenzo Pieralisi |
Headers | show |
Series | PCI: kirin: Return -EPROBE_DEFER in case the gpio isn't ready | expand |
On Fri, Sep 18, 2020 at 02:38:00PM +0200, Bean Huo wrote: > From: Bean Huo <beanhuo@micron.com> > > 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@micron.com> > --- > 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 >
On Mon, 2020-09-21 at 12:22 +0100, Lorenzo Pieralisi wrote: > > 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 Hi Lorenzo Thanks very much for your reply. It is true this is a bug which was introduced by the origin commit. It is ok for me to remove this fix tag. Thanks, Bean
seems the Hisilicon PCI driver maintainers are absent, however, we are still using their old platform based on Kirin. hi, Lorenzo is it possible to take this patch without Hisilicon maintainter's ACK? Thanks, Bean
On Sat, Sep 26, 2020 at 09:49:56AM +0200, Bean Huo wrote: > seems the Hisilicon PCI driver maintainers are absent, however, we are > still using their old platform based on Kirin. > > hi, Lorenzo > is it possible to take this patch without Hisilicon maintainter's ACK? I applied it to pci/kirin, tentatively for v5.10. Lorenzo > Thanks, > Bean >
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)