Skip to content

Commit 6964494

Browse files
paliLorenzo Pieralisi
authored andcommitted
PCI: aardvark: Train link immediately after enabling training
Adding even 100ms (PCI_PM_D3COLD_WAIT) delay between enabling link training and starting link training causes detection issues with some buggy cards (such as Compex WLE900VX). Move the code which enables link training immediately before the one which starts link traning. This fixes detection issues of Compex WLE900VX card on Turris MOX after cold boot. Link: https://lore.kernel.org/r/[email protected] Fixes: f4c7d05 ("PCI: aardvark: Wait for endpoint to be ready...") Tested-by: Tomasz Maciej Nowak <[email protected]> Signed-off-by: Pali Rohár <[email protected]> Signed-off-by: Lorenzo Pieralisi <[email protected]> Acked-by: Rob Herring <[email protected]> Acked-by: Thomas Petazzoni <[email protected]>
1 parent 8f3d9f3 commit 6964494

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

drivers/pci/controller/pci-aardvark.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -300,11 +300,6 @@ static void advk_pcie_setup_hw(struct advk_pcie *pcie)
300300
reg |= LANE_COUNT_1;
301301
advk_writel(pcie, reg, PCIE_CORE_CTRL0_REG);
302302

303-
/* Enable link training */
304-
reg = advk_readl(pcie, PCIE_CORE_CTRL0_REG);
305-
reg |= LINK_TRAINING_EN;
306-
advk_writel(pcie, reg, PCIE_CORE_CTRL0_REG);
307-
308303
/* Enable MSI */
309304
reg = advk_readl(pcie, PCIE_CORE_CTRL2_REG);
310305
reg |= PCIE_CORE_CTRL2_MSI_ENABLE;
@@ -346,7 +341,15 @@ static void advk_pcie_setup_hw(struct advk_pcie *pcie)
346341
*/
347342
msleep(PCI_PM_D3COLD_WAIT);
348343

349-
/* Start link training */
344+
/* Enable link training */
345+
reg = advk_readl(pcie, PCIE_CORE_CTRL0_REG);
346+
reg |= LINK_TRAINING_EN;
347+
advk_writel(pcie, reg, PCIE_CORE_CTRL0_REG);
348+
349+
/*
350+
* Start link training immediately after enabling it.
351+
* This solves problems for some buggy cards.
352+
*/
350353
reg = advk_readl(pcie, PCIE_CORE_LINK_CTRL_STAT_REG);
351354
reg |= PCIE_CORE_LINK_TRAINING;
352355
advk_writel(pcie, reg, PCIE_CORE_LINK_CTRL_STAT_REG);

0 commit comments

Comments
 (0)