On Fri, 18 Jun 2021 17:24:49 +0100 Robin Murphy <[email protected]> wrote:
Hi Robin, > 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 <[email protected]> So it looks somewhat quirky, but it indeed fixes the boot problems on the RevC model for me. And given that currently an out-of-the-box kernel build fails booting (with the kernel DT), I'd like to see that merged. Tested-by: Andre Przywara <[email protected]> Thanks, Andre > --- > drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 15 +++++++++++++++ > 1 file changed, 15 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 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, > }; _______________________________________________ iommu mailing list [email protected] https://lists.linuxfoundation.org/mailman/listinfo/iommu
