Re: [PATCH] iommu/arm-smmu-v3: Add default domain quirk for Arm Fast Models
From: Robin Murphy <robin.murphy@arm.com>
Date: 2021-06-29 18:12:47
Also in:
linux-iommu
On 2021-06-29 18:34, Will Deacon wrote:
On Fri, Jun 18, 2021 at 05:24:49PM +0100, Robin Murphy wrote:quoted
Arm Fast Models are still implementing legacy virtio-pci devices behind the SMMU, which continue to be problematic as "real hardware" devices (from the point of view of the simulated system) without the mitigating VIRTIO_F_ACCESS_PLATFORM feature. Since we now have the ability to force passthrough on a device-specific basis, let's use it to work around this particular oddity so that people who just want to boot Linux on a model don't have to fiddle around with things to avoid the SMMU getting in the way by default (and I don't have to keep telling them which things...) Signed-off-by: Robin Murphy <robin.murphy@arm.com> --- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)Any chance of getting the fastmodels updated instead? It feels like it has to happen *eventually*, and then there would be no need for this bodge.
If it's any consolation the JIRA ticket you raised in 2017 is still open... Robin.
Willquoted
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 54b2f27b81d4..13cf16e8f45b 100644 --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c@@ -2649,6 +2649,20 @@ static int arm_smmu_dev_disable_feature(struct device *dev, } } +static int arm_smmu_def_domain_type(struct device *dev) +{ + if (dev_is_pci(dev)) { + struct pci_dev *pdev = to_pci_dev(dev); + + /* Legacy virtio-block devices on Arm Fast Models */ + if (pdev->vendor == 0x1af4 && pdev->device == 0x1001 && + pdev->subsystem_vendor == 0x00ff && pdev->subsystem_device == 0x0002) + return IOMMU_DOMAIN_IDENTITY; + } + + return 0; +} + static struct iommu_ops arm_smmu_ops = { .capable = arm_smmu_capable, .domain_alloc = arm_smmu_domain_alloc,@@ -2673,6 +2687,7 @@ static struct iommu_ops arm_smmu_ops = { .sva_bind = arm_smmu_sva_bind, .sva_unbind = arm_smmu_sva_unbind, .sva_get_pasid = arm_smmu_sva_get_pasid, + .def_domain_type = arm_smmu_def_domain_type, .pgsize_bitmap = -1UL, /* Restricted during device attach */ .owner = THIS_MODULE, };-- 2.25.1
_______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel