From: Zhangfei Gao zhangfei.gao@linaro.org
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 helgaas@kernel.org Signed-off-by: Zhangfei Gao zhangfei.gao@linaro.org Reviewed-by: Hao Fang fanghao11@huawei.com Reviewed-by: Mingqiang Ling lingmingqiang@huawei.com Signed-off-by: Zheng Zengkai zhengzengkai@huawei.com --- 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 */