PCI: Set dma-can-stall for HiSilicon chips
HiSilicon KunPeng920 and KunPeng930 have devices that appear as PCI but are actually on the AMBA bus. These fake PCI devices can support SVA via the SMMU stall feature. DT systems can indicate this in the device tree, but ACPI systems don't have that mechanism, so add a "dma-can-stall" property manually for them. [bhelgaas: add text from Robin as comment near quirk] Link: https://lore.kernel.org/r/1626144876-11352-4-git-send-email-zhangfei.gao@linaro.org Signed-off-by: Zhangfei Gao <zhangfei.gao@linaro.org> Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org> Signed-off-by: Zhou Wang <wangzhou1@hisilicon.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Robin Murphy <robin.murphy@arm.com>
This commit is contained in:
parent
8c09e896ce
commit
8304a3a199
|
@ -1821,12 +1821,37 @@ 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);
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
* Normally stalling must not be enabled for PCI devices, since it would
|
||||
* break the PCI requirement for free-flowing writes and may lead to
|
||||
* deadlock. We expect PCI devices to support ATS and PRI if they want to
|
||||
* be fault-tolerant, so there's no ACPI binding to describe anything else,
|
||||
* even when a "PCI" device turns out to be a regular old SoC device
|
||||
* dressed up as a RCiEP and normal rules don't apply.
|
||||
*/
|
||||
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);
|
||||
|
|
Loading…
Reference in New Issue