[PATCH v2 6/8] PCI: aardvark: Add 100 ms delay after link training
Pali Rohár
pali at kernel.org
Tue May 12 14:25:31 PDT 2026
On Wednesday 06 May 2026 23:23:44 Hans Zhang wrote:
> The Aardvark PCIe controller driver waits for the link to come up but
> does not implement the mandatory 100 ms delay after link training
> completes for speeds greater than 5.0 GT/s (PCIe r6.0 sec 6.6.1).
>
> The driver already maintains a 'link_gen' field that holds the negotiated
> link speed. Use it together with pcie_wait_after_link_train() to insert
> the required delay immediately after confirming that the link is up.
>
> Signed-off-by: Hans Zhang <18255117159 at 163.com>
> ---
> drivers/pci/controller/pci-aardvark.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c
> index e34bea1ff0ac..526351c21c49 100644
> --- a/drivers/pci/controller/pci-aardvark.c
> +++ b/drivers/pci/controller/pci-aardvark.c
> @@ -350,8 +350,10 @@ static int advk_pcie_wait_for_link(struct advk_pcie *pcie)
>
> /* check if the link is up or not */
> for (retries = 0; retries < LINK_WAIT_MAX_RETRIES; retries++) {
> - if (advk_pcie_link_up(pcie))
> + if (advk_pcie_link_up(pcie)) {
> + pcie_wait_after_link_train(pcie->link_gen);
> return 0;
> + }
>
> usleep_range(LINK_WAIT_USLEEP_MIN, LINK_WAIT_USLEEP_MAX);
> }
> --
> 2.34.1
>
Are you sure that this is correct to do? Have you checked the A3720
Functional Specification which describes how to bring PCIe link up?
A3720 PCIe controller is buggy and needs more timing hacks to make it
behave. Playing with random sleeps can break its internal logic.
I'm not sure if it could be safe without proper testing.
And IIRC A3720 PCIe controller is just PCIe2.0 with 5 GT/s.
More information about the Linux-mediatek
mailing list