On 8/9/26 03:32, Marek Vasut via U-Boot wrote:
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
This commit is not sufficient, please explain that only a single probe off
all compatible controllers on the system can only be done once due to complex
reset reasons.
+ */
+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,
};