[PATCH 2/3] pci: pcie-rcar-gen4: Avoid repeated link attempts

Marek Vasut via U-Boot <[email protected]>
Newsgroups gmane.comp.boot-loaders.u-boot.general,gmane.comp.boot-loaders.u-boot
Message-ID <[email protected]>
Avoid repeated link attempts for these controllers. In case the
controller link is up, this is a noop since the probe() already
finished. In case the controller link is down, a repeated link
up attempt seems to require reset of both PCIe controllers, which
is not desired. It is also unlikely that a repeated link attempt
would bring the link up, as U-Boot does not support hotplug anyway.
Therefore, prevent repeated link attempts.

Signed-off-by: Marek Vasut <[email protected]>
---
Cc: Nobuhiro Iwamatsu <[email protected]>
Cc: Tom Rini <[email protected]>
Cc: [email protected]
---
 drivers/pci/pci-rcar-gen4.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/pci/pci-rcar-gen4.c b/drivers/pci/pci-rcar-gen4.c
index 34561406641..044bceee6c7 100644
--- a/drivers/pci/pci-rcar-gen4.c
+++ b/drivers/pci/pci-rcar-gen4.c
@@ -112,6 +112,15 @@ struct rcar_gen4_pcie {
 	size_t			firmware_size;
 };
 
+/**
+ * struct rcar_gen4_pcie_plat - Renesas R-Car Gen4 DW PCIe controller platform data
+ *
+ * @probed: Controller was started
+ */
+struct rcar_gen4_pcie_plat {
+	bool			probed;
+};
+
 /* Common */
 static bool rcar_gen4_pcie_link_up(struct rcar_gen4_pcie *rcar)
 {
@@ -404,10 +413,14 @@ static int rcar_gen4_pcie_load_firmware(struct rcar_gen4_pcie *rcar)
 static int rcar_gen4_pcie_probe(struct udevice *dev)
 {
 	struct rcar_gen4_pcie *rcar = dev_get_priv(dev);
+	struct rcar_gen4_pcie_plat *plat = dev_get_plat(dev);
 	struct udevice *ctlr = pci_get_controller(dev);
 	struct pci_controller *hose = dev_get_uclass_priv(ctlr);
 	int ret;
 
+	if (plat->probed)
+		return -ENODEV;
+
 	ret = rcar_gen4_pcie_load_firmware(rcar);
 	if (ret)
 		return ret;
@@ -447,6 +460,7 @@ static int rcar_gen4_pcie_probe(struct udevice *dev)
 	dw_pcie_link_set_max_link_width(&rcar->dw, rcar->num_lanes);
 
 	ret = rcar_gen4_pcie_start_link(rcar);
+	plat->probed = true;
 	if (ret)
 		return ret;
 
@@ -569,5 +583,6 @@ U_BOOT_DRIVER(rcar_gen4_pcie) = {
 	.probe		= rcar_gen4_pcie_probe,
 	.remove		= rcar_gen4_pcie_remove,
 	.priv_auto	= sizeof(struct rcar_gen4_pcie),
+	.plat_auto	= sizeof(struct rcar_gen4_pcie_plat),
 	.flags		= DM_FLAG_ACTIVE_DMA,
 };
-- 
2.53.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.