lkml.org 
[lkml]   [2022]   [Oct]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 485/530] iommu/arm-smmu-v3: Make default domain type of HiSilicon PTT device to identity
    Date
    From: Yicong Yang <yangyicong@hisilicon.com>

    [ Upstream commit 24b6c7798a0122012ca848ea0d25e973334266b0 ]

    The DMA operations of HiSilicon PTT device can only work properly with
    identical mappings. So add a quirk for the device to force the domain
    as passthrough.

    Acked-by: Will Deacon <will@kernel.org>
    Signed-off-by: Yicong Yang <yangyicong@hisilicon.com>
    Reviewed-by: John Garry <john.garry@huawei.com>
    Link: https://lore.kernel.org/r/20220816114414.4092-2-yangyicong@huawei.com
    Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 21 +++++++++++++++++++++
    1 file changed, 21 insertions(+)

    diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
    index 79edfdca6607..e7da4a47ce52 100644
    --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
    +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
    @@ -2832,6 +2832,26 @@ static int arm_smmu_dev_disable_feature(struct device *dev,
    }
    }

    +/*
    + * HiSilicon PCIe tune and trace device can be used to trace TLP headers on the
    + * PCIe link and save the data to memory by DMA. The hardware is restricted to
    + * use identity mapping only.
    + */
    +#define IS_HISI_PTT_DEVICE(pdev) ((pdev)->vendor == PCI_VENDOR_ID_HUAWEI && \
    + (pdev)->device == 0xa12e)
    +
    +static int arm_smmu_def_domain_type(struct device *dev)
    +{
    + if (dev_is_pci(dev)) {
    + struct pci_dev *pdev = to_pci_dev(dev);
    +
    + if (IS_HISI_PTT_DEVICE(pdev))
    + return IOMMU_DOMAIN_IDENTITY;
    + }
    +
    + return 0;
    +}
    +
    static struct iommu_ops arm_smmu_ops = {
    .capable = arm_smmu_capable,
    .domain_alloc = arm_smmu_domain_alloc,
    @@ -2857,6 +2877,7 @@ static struct iommu_ops arm_smmu_ops = {
    .sva_unbind = arm_smmu_sva_unbind,
    .sva_get_pasid = arm_smmu_sva_get_pasid,
    .page_response = arm_smmu_page_response,
    + .def_domain_type = arm_smmu_def_domain_type,
    .pgsize_bitmap = -1UL, /* Restricted during device attach */
    .owner = THIS_MODULE,
    };
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-10-24 18:59    [W:2.488 / U:2.756 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site