PCI: aardvark: Improve link training
authorMarek Behún <marek.behun@nic.cz>
Thu, 30 Apr 2020 08:06:17 +0000 (10:06 +0200)
committerLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Mon, 18 May 2020 13:40:38 +0000 (14:40 +0100)
commit43fc679ced18006b12d918d7a8a4af392b7fbfe7
tree3e109600deb69dd4847d231a6be51a971b453a3f
parent2dd9072e8fb0af4af47c912244f6c16fc57d4fbc
PCI: aardvark: Improve link training

Currently the aardvark driver trains link in PCIe gen2 mode. This may
cause some buggy gen1 cards (such as Compex WLE900VX) to be unstable or
even not detected. Moreover when ASPM code tries to retrain link second
time, these cards may stop responding and link goes down. If gen1 is
used this does not happen.

Unconditionally forcing gen1 is not a good solution since it may have
performance impact on gen2 cards.

To overcome this, read 'max-link-speed' property (as defined in PCI
device tree bindings) and use this as max gen mode. Then iteratively try
link training at this mode or lower until successful. After successful
link training choose final controller gen based on Negotiated Link Speed
from Link Status register, which should match card speed.

Link: https://lore.kernel.org/r/20200430080625.26070-5-pali@kernel.org
Tested-by: Tomasz Maciej Nowak <tmn505@gmail.com>
Signed-off-by: Pali Rohár <pali@kernel.org>
Signed-off-by: Marek Behún <marek.behun@nic.cz>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Rob Herring <robh@kernel.org>
Acked-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
drivers/pci/controller/pci-aardvark.c