[PATCH 0/2][Bionic][SRU Artful] Updates to Cavium ACS quirk

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH 0/2][Bionic][SRU Artful] Updates to Cavium ACS quirk

dann frazier-4
These are clean cherry-picks that update the ACS quirk for ThunderX nodes in
ACPI mode. This fixes boot failure (SATA controller init) and console spew
issues described in the bug.

BugLink: https://bugs.launchpad.net/bugs/1736774

Vadim Lomovtsev (2):
  PCI: Set Cavium ACS capability quirk flags to assert RR/CR/SV/UF
  PCI: Apply Cavium ThunderX ACS quirk to more Root Ports

 drivers/pci/quirks.c | 27 +++++++++++++++++++++------
 1 file changed, 21 insertions(+), 6 deletions(-)

--
2.15.1


--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team
Reply | Threaded
Open this post in threaded view
|

[PATCH 1/2][Bionic][SRU Artful] PCI: Set Cavium ACS capability quirk flags to assert RR/CR/SV/UF

dann frazier-4
From: Vadim Lomovtsev <[hidden email]>

BugLink: https://bugs.launchpad.net/bugs/1736774

The Cavium ThunderX (CN8XXX) family of PCIe Root Ports does not advertise
an ACS capability.  However, the RTL internally implements similar
protection as if ACS had Request Redirection, Completion Redirection,
Source Validation, and Upstream Forwarding features enabled.

Change Cavium ACS capabilities quirk flags accordingly.

Fixes: b404bcfbf035 ("PCI: Add ACS quirk for all Cavium devices")
Signed-off-by: Vadim Lomovtsev <[hidden email]>
[bhelgaas: tidy changelog, comment, stable tag]
Signed-off-by: Bjorn Helgaas <[hidden email]>
Cc: [hidden email] # v4.6+: b77d537d00d0: PCI: Apply Cavium ACS quirk only to CN81xx/CN83xx/CN88xx devices
(cherry picked from commit 7f342678634f16795892677204366e835e450dda)
Signed-off-by: dann frazier <[hidden email]>
---
 drivers/pci/quirks.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 02b009426670..fcf734231c4d 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -4253,12 +4253,14 @@ static int pci_quirk_amd_sb_acs(struct pci_dev *dev, u16 acs_flags)
 static int pci_quirk_cavium_acs(struct pci_dev *dev, u16 acs_flags)
 {
  /*
- * Cavium devices matching this quirk do not perform peer-to-peer
- * with other functions, allowing masking out these bits as if they
- * were unimplemented in the ACS capability.
+ * Cavium root ports don't advertise an ACS capability.  However,
+ * the RTL internally implements similar protection as if ACS had
+ * Request Redirection, Completion Redirection, Source Validation,
+ * and Upstream Forwarding features enabled.  Assert that the
+ * hardware implements and enables equivalent ACS functionality for
+ * these flags.
  */
- acs_flags &= ~(PCI_ACS_SV | PCI_ACS_TB | PCI_ACS_RR |
-       PCI_ACS_CR | PCI_ACS_UF | PCI_ACS_DT);
+ acs_flags &= ~(PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_SV | PCI_ACS_UF);
 
  if (!((dev->device >= 0xa000) && (dev->device <= 0xa0ff)))
  return -ENOTTY;
--
2.15.1


--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team
Reply | Threaded
Open this post in threaded view
|

[PATCH 2/2][Bionic][SRU Artful] PCI: Apply Cavium ThunderX ACS quirk to more Root Ports

dann frazier-4
In reply to this post by dann frazier-4
From: Vadim Lomovtsev <[hidden email]>

BugLink: https://bugs.launchpad.net/bugs/1736774

Extend the Cavium ThunderX ACS quirk to cover more device IDs and restrict
it to only Root Ports.

Signed-off-by: Vadim Lomovtsev <[hidden email]>
[bhelgaas: changelog, stable tag]
Signed-off-by: Bjorn Helgaas <[hidden email]>
Cc: [hidden email] # v4.12+
(cherry picked from commit f2ddaf8dfd4a5071ad09074d2f95ab85d35c8a1e)
Signed-off-by: dann frazier <[hidden email]>
---
 drivers/pci/quirks.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index fcf734231c4d..99eec22d99b7 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -4250,6 +4250,19 @@ static int pci_quirk_amd_sb_acs(struct pci_dev *dev, u16 acs_flags)
 #endif
 }
 
+static bool pci_quirk_cavium_acs_match(struct pci_dev *dev)
+{
+ /*
+ * Effectively selects all downstream ports for whole ThunderX 1
+ * family by 0xf800 mask (which represents 8 SoCs), while the lower
+ * bits of device ID are used to indicate which subdevice is used
+ * within the SoC.
+ */
+ return (pci_is_pcie(dev) &&
+ (pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT) &&
+ ((dev->device & 0xf800) == 0xa000));
+}
+
 static int pci_quirk_cavium_acs(struct pci_dev *dev, u16 acs_flags)
 {
  /*
@@ -4262,7 +4275,7 @@ static int pci_quirk_cavium_acs(struct pci_dev *dev, u16 acs_flags)
  */
  acs_flags &= ~(PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_SV | PCI_ACS_UF);
 
- if (!((dev->device >= 0xa000) && (dev->device <= 0xa0ff)))
+ if (!pci_quirk_cavium_acs_match(dev))
  return -ENOTTY;
 
  return acs_flags ? 0 : 1;
--
2.15.1


--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team