HiSilicon KunPeng920 and KunPeng930 have devices appear as PCI but are
actually on the AMBA bus. These fake PCI devices have PASID capability
though not supporting TLP.
Add a quirk to set pasid_no_tlp and dma-can-stall for these devices.
Jean's dma-can-stall patchset has been accepted
https://lore.kernel.org/linux-iommu/[email protected]/
v4:
Applied to Linux 5.13-rc2, and build successfully with only these three patches.
v3:
https://lore.kernel.org/linux-pci/[email protected]/
Rebase to Linux 5.12-rc1
Change commit msg adding:
Property dma-can-stall depends on patchset
https://lore.kernel.org/linux-iommu/[email protected]/
By the way the patchset can directly applied on 5.12-rc1 and build successfully though
without the dependent patchset.
v2:
Add a new pci_dev bit: pasid_no_tlp, suggested by Bjorn
"Apparently these devices have a PASID capability. I think you should
add a new pci_dev bit that is specific to this idea of "PASID works
without TLP prefixes" and then change pci_enable_pasid() to look at
that bit as well as eetlp_prefix_path."
https://lore.kernel.org/linux-pci/20210112170230.GA1838341@bjorn-Precision-5520/
Zhangfei Gao (3):
PCI: PASID can be enabled without TLP prefix
PCI: Add a quirk to set pasid_no_tlp for HiSilicon chips
PCI: Set dma-can-stall for HiSilicon chips
drivers/pci/ats.c | 2 +-
drivers/pci/quirks.c | 27 +++++++++++++++++++++++++++
include/linux/pci.h | 1 +
3 files changed, 29 insertions(+), 1 deletion(-)
--
2.7.4
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 <[email protected]>
Signed-off-by: Zhangfei Gao <[email protected]>
---
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 6d7d649..c967ad6 100644
--- a/drivers/pci/ats.c
+++ b/drivers/pci/ats.c
@@ -376,7 +376,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 c20211e..766dca1 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -388,6 +388,7 @@ struct pci_dev {
supported from root to here */
u16 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 */
--
2.7.4
HiSilicon KunPeng920 and KunPeng930 have devices appear as PCI but are
actually on the AMBA bus. These fake PCI devices can support SVA via
SMMU stall feature, by setting dma-can-stall for ACPI platforms.
Property dma-can-stall depends on patchset
https://lore.kernel.org/linux-iommu/[email protected]/
Signed-off-by: Zhangfei Gao <[email protected]>
Signed-off-by: Jean-Philippe Brucker <[email protected]>
Signed-off-by: Zhou Wang <[email protected]>
---
drivers/pci/quirks.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 9331113..c1643ce 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -1822,10 +1822,23 @@ DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_VENDOR_ID_HUAWEI, 0x1610, PCI_CLASS_BRIDGE_PCI
static void quirk_huawei_pcie_sva(struct pci_dev *pdev)
{
+ struct property_entry properties[] = {
+ PROPERTY_ENTRY_BOOL("dma-can-stall"),
+ {},
+ };
+
if (pdev->revision != 0x21 && pdev->revision != 0x30)
return;
pdev->pasid_no_tlp = 1;
+
+ /*
+ * Set the dma-can-stall property on ACPI platforms. Device tree
+ * can set it directly.
+ */
+ if (!pdev->dev.of_node &&
+ device_add_properties(&pdev->dev, properties))
+ pci_warn(pdev, "could not add stall property");
}
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0xa250, quirk_huawei_pcie_sva);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0xa251, quirk_huawei_pcie_sva);
--
2.7.4
HiSilicon KunPeng920 and KunPeng930 have devices appear as PCI but are
actually on the AMBA bus. These fake PCI devices have PASID capability
though not supporting TLP.
Add a quirk to set pasid_no_tlp for these devices.
Signed-off-by: Zhangfei Gao <[email protected]>
Signed-off-by: Jean-Philippe Brucker <[email protected]>
Signed-off-by: Zhou Wang <[email protected]>
---
drivers/pci/quirks.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index dcb229d..9331113 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -1820,6 +1820,20 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7525_MCH, quir
DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_VENDOR_ID_HUAWEI, 0x1610, PCI_CLASS_BRIDGE_PCI, 8, quirk_pcie_mch);
+static void quirk_huawei_pcie_sva(struct pci_dev *pdev)
+{
+ if (pdev->revision != 0x21 && pdev->revision != 0x30)
+ return;
+
+ pdev->pasid_no_tlp = 1;
+}
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0xa250, quirk_huawei_pcie_sva);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0xa251, quirk_huawei_pcie_sva);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0xa255, quirk_huawei_pcie_sva);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0xa256, quirk_huawei_pcie_sva);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0xa258, quirk_huawei_pcie_sva);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0xa259, quirk_huawei_pcie_sva);
+
/*
* It's possible for the MSI to get corrupted if SHPC and ACPI are used
* together on certain PXH-based systems.
--
2.7.4
Hi, Bjorn
On 2021/6/9 上午11:36, Zhangfei Gao wrote:
> HiSilicon KunPeng920 and KunPeng930 have devices appear as PCI but are
> actually on the AMBA bus. These fake PCI devices have PASID capability
> though not supporting TLP.
>
> Add a quirk to set pasid_no_tlp and dma-can-stall for these devices.
>
> Jean's dma-can-stall patchset has been accepted
> https://lore.kernel.org/linux-iommu/[email protected]/
Would you mind take a look.
There is no dependence now, since he dependent patch set has been taken.
Thanks
>
> v4:
> Applied to Linux 5.13-rc2, and build successfully with only these three patches.
>
> v3:
> https://lore.kernel.org/linux-pci/[email protected]/
> Rebase to Linux 5.12-rc1
> Change commit msg adding:
> Property dma-can-stall depends on patchset
> https://lore.kernel.org/linux-iommu/[email protected]/
>
> By the way the patchset can directly applied on 5.12-rc1 and build successfully though
> without the dependent patchset.
>
> v2:
> Add a new pci_dev bit: pasid_no_tlp, suggested by Bjorn
> "Apparently these devices have a PASID capability. I think you should
> add a new pci_dev bit that is specific to this idea of "PASID works
> without TLP prefixes" and then change pci_enable_pasid() to look at
> that bit as well as eetlp_prefix_path."
> https://lore.kernel.org/linux-pci/20210112170230.GA1838341@bjorn-Precision-5520/
>
> Zhangfei Gao (3):
> PCI: PASID can be enabled without TLP prefix
> PCI: Add a quirk to set pasid_no_tlp for HiSilicon chips
> PCI: Set dma-can-stall for HiSilicon chips
>
> drivers/pci/ats.c | 2 +-
> drivers/pci/quirks.c | 27 +++++++++++++++++++++++++++
> include/linux/pci.h | 1 +
> 3 files changed, 29 insertions(+), 1 deletion(-)
>
On 2021/6/9 11:36, Zhangfei Gao wrote:
> HiSilicon KunPeng920 and KunPeng930 have devices appear as PCI but are
> actually on the AMBA bus. These fake PCI devices have PASID capability
> though not supporting TLP.
>
> Add a quirk to set pasid_no_tlp and dma-can-stall for these devices.
>
> Jean's dma-can-stall patchset has been accepted
> https://lore.kernel.org/linux-iommu/[email protected]/
>
> v4:
> Applied to Linux 5.13-rc2, and build successfully with only these three patches.
>
> v3:
> https://lore.kernel.org/linux-pci/[email protected]/
> Rebase to Linux 5.12-rc1
> Change commit msg adding:
> Property dma-can-stall depends on patchset
> https://lore.kernel.org/linux-iommu/[email protected]/
>
> By the way the patchset can directly applied on 5.12-rc1 and build successfully though
> without the dependent patchset.
>
> v2:
> Add a new pci_dev bit: pasid_no_tlp, suggested by Bjorn
> "Apparently these devices have a PASID capability. I think you should
> add a new pci_dev bit that is specific to this idea of "PASID works
> without TLP prefixes" and then change pci_enable_pasid() to look at
> that bit as well as eetlp_prefix_path."
> https://lore.kernel.org/linux-pci/20210112170230.GA1838341@bjorn-Precision-5520/
>
> Zhangfei Gao (3):
> PCI: PASID can be enabled without TLP prefix
> PCI: Add a quirk to set pasid_no_tlp for HiSilicon chips
> PCI: Set dma-can-stall for HiSilicon chips
>
> drivers/pci/ats.c | 2 +-
> drivers/pci/quirks.c | 27 +++++++++++++++++++++++++++
> include/linux/pci.h | 1 +
> 3 files changed, 29 insertions(+), 1 deletion(-)
>
Hi Bjorn,
Could you take this series for coming v5.14-rc1? With this series, HiSilicon accelerators(ZIP/SEC/HPRE)
will work in mainline, as the related SMMU series had been accepted.
Best,
Zhou