PCI/ASPM: Avoid link retraining race
authorIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Tue, 2 May 2023 08:39:23 +0000 (11:39 +0300)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 20 Jun 2023 19:58:52 +0000 (14:58 -0500)
commite7e39756363ad5bd83ddeae1063193d0f13870fd
tree9a45baf0ac14e7c7473a016e097e8c6211987a9a
parent9c7f136433d26592cb4d9cd00b4e15c33d9797c6
PCI/ASPM: Avoid link retraining race

PCIe r6.0.1, sec 7.5.3.7, recommends setting the link control parameters,
then waiting for the Link Training bit to be clear before setting the
Retrain Link bit.

This avoids a race where the LTSSM may not use the updated parameters if it
is already in the midst of link training because of other normal link
activity.

Wait for the Link Training bit to be clear before toggling the Retrain Link
bit to ensure that the LTSSM uses the updated link control parameters.

[bhelgaas: commit log, return 0 (success)/-ETIMEDOUT instead of bool for
both pcie_wait_for_retrain() and the existing pcie_retrain_link()]
Suggested-by: Lukas Wunner <lukas@wunner.de>
Fixes: 7d715a6c1ae5 ("PCI: add PCI Express ASPM support")
Link: https://lore.kernel.org/r/20230502083923.34562-1-ilpo.jarvinen@linux.intel.com
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Lukas Wunner <lukas@wunner.de>
Cc: stable@vger.kernel.org
drivers/pci/pcie/aspm.c