[PATCH v8 20/24] iommu: Require a default_domain for all iommu drivers
Dmitry Baryshkov
dmitry.baryshkov at linaro.org
Tue Oct 3 19:34:08 AEDT 2023
On Tue, 3 Oct 2023 at 02:00, Jason Gunthorpe <jgg at nvidia.com> wrote:
>
> On Tue, Oct 03, 2023 at 12:21:59AM +0300, Dmitry Baryshkov wrote:
> > On Wed, 13 Sept 2023 at 16:45, Jason Gunthorpe <jgg at nvidia.com> wrote:
> > >
> > > At this point every iommu driver will cause a default_domain to be
> > > selected, so we can finally remove this gap from the core code.
> > >
> > > The following table explains what each driver supports and what the
> > > resulting default_domain will be:
> > >
> > > ops->defaut_domain
> > > IDENTITY DMA PLATFORM v ARM32 dma-iommu ARCH
> > > amd/iommu.c Y Y N/A either
> > > apple-dart.c Y Y N/A either
> > > arm-smmu.c Y Y IDENTITY either
> > > qcom_iommu.c G Y IDENTITY either
> > > arm-smmu-v3.c Y Y N/A either
> > > exynos-iommu.c G Y IDENTITY either
> > > fsl_pamu_domain.c Y Y N/A N/A PLATFORM
> > > intel/iommu.c Y Y N/A either
> > > ipmmu-vmsa.c G Y IDENTITY either
> > > msm_iommu.c G IDENTITY N/A
> >
> > Unfortunately this patch breaks msm_iommu platforms. This driver
> > doesn't select ARM_DMA_USE_IOMMU, so iommu_get_default_domain_type()
> > returns 0, bus_iommu_probe() fails with -ENODEV.
> > If I make MSM_IOMMU select ARM_DMA_USE_IOMMU, then GPU probing fails
> > with -EBUSY.
>
> Oh, OK.
>
> Does this fix it?
It indeed fixes the issue, so could you please post it, adding:
Tested-by: Dmitry Baryshkov <dmitry.baryshkov at linaro.org>
> diff --git a/drivers/iommu/msm_iommu.c b/drivers/iommu/msm_iommu.c
> index cdc7b730192a35..f7ef081c33dcb2 100644
> --- a/drivers/iommu/msm_iommu.c
> +++ b/drivers/iommu/msm_iommu.c
> @@ -685,10 +685,16 @@ irqreturn_t msm_iommu_fault_handler(int irq, void *dev_id)
> return 0;
> }
>
> +static int msm_iommu_def_domain_type(struct device *dev)
> +{
> + return IOMMU_DOMAIN_IDENTITY;
> +}
> +
> static struct iommu_ops msm_iommu_ops = {
> .identity_domain = &msm_iommu_identity_domain,
> .domain_alloc_paging = msm_iommu_domain_alloc_paging,
> .probe_device = msm_iommu_probe_device,
> + .def_domain_type = msm_iommu_def_domain_type,
> .device_group = generic_device_group,
> .pgsize_bitmap = MSM_IOMMU_PGSIZES,
> .of_xlate = qcom_iommu_of_xlate,
--
With best wishes
Dmitry
More information about the Linuxppc-dev
mailing list