From bbf864aa86b336d1bf821ad492107d1463eaf2e7 Mon Sep 17 00:00:00 2001 From: Zhangfei Gao Date: Sat, 4 Sep 2021 17:22:42 +0800 Subject: [PATCH] PCI: PASID can be enabled without TLP prefix driver inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I472UK?from=project-issue ---------------------------------------------------------------------- A PASID-like feature is implemented on AMBA without using TLP prefixes and these devices have PASID capability though not supporting TLP. Adding a pasid_no_tlp bit for "PASID works without TLP prefixes" and pci_enable_pasid() checks pasid_no_tlp as well as eetlp_prefix_path. Suggested-by: Bjorn Helgaas Signed-off-by: Zhangfei Gao Reviewed-by: Hao Fang Reviewed-by: Mingqiang Ling Signed-off-by: Zheng Zengkai --- drivers/pci/ats.c | 2 +- include/linux/pci.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/pci/ats.c b/drivers/pci/ats.c index 793d3810eda7..88f981bad52d 100644 --- a/drivers/pci/ats.c +++ b/drivers/pci/ats.c @@ -380,7 +380,7 @@ int pci_enable_pasid(struct pci_dev *pdev, int features) if (WARN_ON(pdev->pasid_enabled)) return -EBUSY; - if (!pdev->eetlp_prefix_path) + if (!pdev->eetlp_prefix_path && !pdev->pasid_no_tlp) return -EINVAL; if (!pasid) diff --git a/include/linux/pci.h b/include/linux/pci.h index 936da8925d68..3db9d92a55a2 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -382,6 +382,7 @@ struct pci_dev { supported from root to here */ int l1ss; /* L1SS Capability pointer */ #endif + unsigned int pasid_no_tlp:1; /* PASID works without TLP Prefix */ unsigned int eetlp_prefix_path:1; /* End-to-End TLP Prefix */ pci_channel_state_t error_state; /* Current connectivity state */ -- GitLab