From: Felix Fietkau Date: Mon, 28 Oct 2019 15:20:40 +0100 Subject: [PATCH] backport: add pci_disable_link_state wrapper with return code The signature of pci_disable_link_state was changed to indicate if the state was successfully disabled. Since the old version did not have this, add a wrapper which checks the pcie register to determine the return code Signed-off-by: Felix Fietkau --- --- a/backport-include/linux/pci.h +++ b/backport-include/linux/pci.h @@ -236,4 +236,29 @@ static inline struct pci_dev *pcie_find_ (PCI_IRQ_LEGACY | PCI_IRQ_MSI | PCI_IRQ_MSIX) #endif +#if defined(CONFIG_PCI) && LINUX_VERSION_IS_LESS(5,3,0) + +static inline int +LINUX_BACKPORT(pci_disable_link_state)(struct pci_dev *pdev, int state) +{ + u16 aspmc; + + pci_disable_link_state(pdev, state); + + pcie_capability_read_word(pdev, PCI_EXP_LNKCTL, &aspmc); + if ((state & PCIE_LINK_STATE_L0S) && + (aspmc & PCI_EXP_LNKCTL_ASPM_L0S)) + return -EPERM; + + if ((state & PCIE_LINK_STATE_L1) && + (aspmc & PCI_EXP_LNKCTL_ASPM_L1)) + return -EPERM; + + return 0; +} + +#define pci_disable_link_state LINUX_BACKPORT(pci_disable_link_state) + +#endif + #endif /* _BACKPORT_LINUX_PCI_H */