Messages in this thread |  | | Date | Thu, 7 May 2026 00:14:22 +0800 | | Subject | Re: [PATCH v2 2/8] PCI: cadence: LGA: Add max_link_speed field and 100 ms delay after link training | | From | Hans Zhang <> |
| |
On 5/7/26 00:03, Manivannan Sadhasivam wrote: > On Wed, May 06, 2026 at 11:23:40PM +0800, Hans Zhang wrote: >> The Cadence LGA (Legacy Architecture IP) PCIe host controller currently >> lacks the mandatory 100 ms delay after link training completes for speeds >>> 5.0 GT/s, as required by PCIe r6.0 sec 6.6.1. >> >> Add a 'max_link_speed' field to struct cdns_pcie to record the maximum >> supported link speed (or the currently configured speed). In the common >> host layer function cdns_pcie_host_start_link(), after the link has been >> successfully established, call pcie_wait_after_link_train() to insert the >> required delay if max_link_speed > 2. >> >> Glue drivers must set max_link_speed appropriately (e.g., from the device >> tree property "max-link-speed") to enable the delay. >> > > You need to club those glue driver patches into this one. Otherwise, you'll end > up breaking bisectability.
Hi Mani,
Will change.
Best regards, Hans
> > - Mani > >> Signed-off-by: Hans Zhang <18255117159@163.com> >> --- >> drivers/pci/controller/cadence/pcie-cadence-host-common.c | 4 ++++ >> drivers/pci/controller/cadence/pcie-cadence.h | 2 ++ >> 2 files changed, 6 insertions(+) >> >> diff --git a/drivers/pci/controller/cadence/pcie-cadence-host-common.c b/drivers/pci/controller/cadence/pcie-cadence-host-common.c >> index 2b0211870f02..51376f69d007 100644 >> --- a/drivers/pci/controller/cadence/pcie-cadence-host-common.c >> +++ b/drivers/pci/controller/cadence/pcie-cadence-host-common.c >> @@ -14,6 +14,7 @@ >> >> #include "pcie-cadence.h" >> #include "pcie-cadence-host-common.h" >> +#include "../../pci.h" >> >> #define LINK_RETRAIN_TIMEOUT HZ >> >> @@ -115,6 +116,9 @@ int cdns_pcie_host_start_link(struct cdns_pcie_rc *rc, >> if (!ret && rc->quirk_retrain_flag) >> ret = cdns_pcie_retrain(pcie, pcie_link_up); >> >> + if (!ret) >> + pcie_wait_after_link_train(pcie->max_link_speed); >> + >> return ret; >> } >> EXPORT_SYMBOL_GPL(cdns_pcie_host_start_link); >> diff --git a/drivers/pci/controller/cadence/pcie-cadence.h b/drivers/pci/controller/cadence/pcie-cadence.h >> index 574e9cf4d003..e222b095d2b6 100644 >> --- a/drivers/pci/controller/cadence/pcie-cadence.h >> +++ b/drivers/pci/controller/cadence/pcie-cadence.h >> @@ -86,6 +86,7 @@ struct cdns_plat_pcie_of_data { >> * @ops: Platform-specific ops to control various inputs from Cadence PCIe >> * wrapper >> * @cdns_pcie_reg_offsets: Register bank offsets for different SoC >> + * @max_link_speed: maximum supported link speed >> */ >> struct cdns_pcie { >> void __iomem *reg_base; >> @@ -98,6 +99,7 @@ struct cdns_pcie { >> struct device_link **link; >> const struct cdns_pcie_ops *ops; >> const struct cdns_plat_pcie_of_data *cdns_pcie_reg_offsets; >> + int max_link_speed; >> }; >> >> /** >> -- >> 2.34.1 >> >
|  |