diff mbox series

[for-rc] PCI: Fix enabling of PASID on RC integrated endpoints

Message ID 1536607662-11690-1-git-send-email-Felix.Kuehling@amd.com (mailing list archive)
State New, archived
Delegated to: Bjorn Helgaas
Headers show
Series [for-rc] PCI: Fix enabling of PASID on RC integrated endpoints | expand

Commit Message

Felix Kuehling Sept. 10, 2018, 7:27 p.m. UTC
Set the eetlp_prefix_path on PCIE_EXP_TYPE_RC_END devices to allow PASID
to be enabled on them. This fixes IOMMUv2 initialization on AMD Carrizo
APUs.

Fixes: 7ce3f912ae ("PCI: Enable PASID only if entire path supports End-End TLP prefixes")
Link: https://bugzilla.kernel.org/show_bug.cgi?id=201079
Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
---
 drivers/pci/probe.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Bjorn Helgaas Sept. 12, 2018, 2:48 a.m. UTC | #1
On Mon, Sep 10, 2018 at 03:27:42PM -0400, Felix Kuehling wrote:
> Set the eetlp_prefix_path on PCIE_EXP_TYPE_RC_END devices to allow PASID
> to be enabled on them. This fixes IOMMUv2 initialization on AMD Carrizo
> APUs.
> 
> Fixes: 7ce3f912ae ("PCI: Enable PASID only if entire path supports End-End TLP prefixes")
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=201079
> Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>

Applied to for-linus for v4.19, thanks!

> ---
>  drivers/pci/probe.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index ec78400..201f9e5 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -2074,6 +2074,7 @@ static void pci_configure_eetlp_prefix(struct pci_dev *dev)
>  {
>  #ifdef CONFIG_PCI_PASID
>  	struct pci_dev *bridge;
> +	int pcie_type;
>  	u32 cap;
>  
>  	if (!pci_is_pcie(dev))
> @@ -2083,7 +2084,9 @@ static void pci_configure_eetlp_prefix(struct pci_dev *dev)
>  	if (!(cap & PCI_EXP_DEVCAP2_EE_PREFIX))
>  		return;
>  
> -	if (pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT)
> +	pcie_type = pci_pcie_type(dev);
> +	if (pcie_type == PCI_EXP_TYPE_ROOT_PORT ||
> +	    pcie_type == PCI_EXP_TYPE_RC_END)
>  		dev->eetlp_prefix_path = 1;
>  	else {
>  		bridge = pci_upstream_bridge(dev);
> -- 
> 2.7.4
>
diff mbox series

Patch

diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index ec78400..201f9e5 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -2074,6 +2074,7 @@  static void pci_configure_eetlp_prefix(struct pci_dev *dev)
 {
 #ifdef CONFIG_PCI_PASID
 	struct pci_dev *bridge;
+	int pcie_type;
 	u32 cap;
 
 	if (!pci_is_pcie(dev))
@@ -2083,7 +2084,9 @@  static void pci_configure_eetlp_prefix(struct pci_dev *dev)
 	if (!(cap & PCI_EXP_DEVCAP2_EE_PREFIX))
 		return;
 
-	if (pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT)
+	pcie_type = pci_pcie_type(dev);
+	if (pcie_type == PCI_EXP_TYPE_ROOT_PORT ||
+	    pcie_type == PCI_EXP_TYPE_RC_END)
 		dev->eetlp_prefix_path = 1;
 	else {
 		bridge = pci_upstream_bridge(dev);