Application Note to CAN/402 Boards
Solution: Booting the System with the additional Kernel Parameter "pcie_aspm=off"
As a workaround you may boot the system with the additional kernel parameter "pcie_aspm=off"
which will disable ASPM reconfiguration for the whole machine.
If you are able to build your Linux kernel yourself you may apply this patch to introduce a
workaround for this Pericom reverse bridge.
--- drivers/pci/pcie/aspm-orig.c 2018-04-01 23:20:27.0000200
+++ drivers/pci/pcie/aspm.c 2018-11-07 14:08:58.3010100
@@ -218,6 +218,7 @@
child = list_entry(linkbus->devices.next, struct pci_dev, bus_list);
BUG_ON(!pci_is_pcie(child));
+
/* Check downstream component if bit Slot Clock Configuration is 1 */
pcie_capability_read_word(child, PCI_EXP_LNKSTA, ®16);
if (!(reg16 & PCI_EXP_LNKSTA_SLC))
@@ -251,6 +252,16 @@
/* Retrain link */
reg16 |= PCI_EXP_LNKCTL_RL;
pcie_capability_write_word(parent, PCI_EXP_LNKCTL, reg16);
+ if (0x12d8 == parent->vendor && 0xe111 == parent->device) {
+ /*
+ * Due to an erratum in the Pericom PI7C9X111SLB bridge in
+ * reverse mode the retrain link bit needs to be cleared
+ * manually to allow the link training to succeed.
+ */
+ pci_info(parent,"PI7C9X111SLB workaround: Clear PCI_EXP_LNKCTL_RL again.\n");
+ reg16 &= ~PCI_EXP_LNKCTL_RL;
+ pcie_capability_write_word(parent, PCI_EXP_LNKCTL, reg16);
+ }
/* Wait for link training end. Break out after waiting for timeout */
start_jiffies = jiffies;
An equivalent patch was submitted to the linux-pci kernel mailing list (see
https://lore.kernel.org/linux-pci/[email protected]/T/
) but it will take some time
until it will show up in the production kernels of Linux distributions.
CPCI-CAN/402-4(-FD)
Hardware Manual • Doc. No.: I.2332.21 / Rev. 1.2
Page 39 of 42