2021-06-09 12:35:08

by zhangfei

[permalink] [raw]
Subject: [PATCH v4 0/3] PCI: Add a quirk to enable SVA for HiSilicon chip

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


2021-06-09 12:35:25

by zhangfei

[permalink] [raw]
Subject: [PATCH v4 1/3] PCI: PASID can be enabled without TLP prefix

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

2021-06-09 12:36:09

by zhangfei

[permalink] [raw]
Subject: [PATCH v4 3/3] PCI: Set dma-can-stall for HiSilicon chips

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

2021-06-09 12:38:51

by zhangfei

[permalink] [raw]
Subject: [PATCH v4 2/3] PCI: Add a quirk to set pasid_no_tlp for HiSilicon chips

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

2021-06-16 08:46:32

by zhangfei

[permalink] [raw]
Subject: Re: [PATCH v4 0/3] PCI: Add a quirk to enable SVA for HiSilicon chip

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(-)
>

2021-06-28 01:53:53

by Zhou Wang

[permalink] [raw]
Subject: Re: [PATCH v4 0/3] PCI: Add a quirk to enable SVA for HiSilicon chip

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