[Freedreno] [PATCH v3 1/2] drm/msm: move domain allocation into msm_iommu_new()

Dmitry Baryshkov dmitry.baryshkov at linaro.org
Thu Oct 27 15:49:30 UTC 2022


On 27/10/2022 18:48, Rob Clark wrote:
> On Tue, Oct 25, 2022 at 1:04 PM Dmitry Baryshkov
> <dmitry.baryshkov at linaro.org> wrote:
>>
>> After the msm_iommu instance is created, the IOMMU domain is completely
>> handled inside the msm_iommu code. Move the iommu_domain_alloc() call
>> into the msm_iommu_new() to simplify callers code.
>>
>> Reported-by: kernel test robot <lkp at intel.com>
>> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov at linaro.org>
>> ---
>>   drivers/gpu/drm/msm/adreno/a6xx_gmu.c    | 12 +++++-------
>>   drivers/gpu/drm/msm/adreno/a6xx_gpu.c    | 25 +++++++++---------------
>>   drivers/gpu/drm/msm/adreno/adreno_gpu.c  | 25 +++++++++---------------
>>   drivers/gpu/drm/msm/adreno/adreno_gpu.h  |  2 --
>>   drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c | 19 +++++++++---------
>>   drivers/gpu/drm/msm/msm_drv.c            | 18 ++++++++---------
>>   drivers/gpu/drm/msm/msm_iommu.c          | 20 ++++++++++++++++---
>>   drivers/gpu/drm/msm/msm_mmu.h            |  3 ++-
>>   8 files changed, 60 insertions(+), 64 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
>> index e033d6a67a20..6484b97c5344 100644
>> --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
>> +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
>> @@ -1213,19 +1213,17 @@ static int a6xx_gmu_memory_alloc(struct a6xx_gmu *gmu, struct a6xx_gmu_bo *bo,
>>
>>   static int a6xx_gmu_memory_probe(struct a6xx_gmu *gmu)
>>   {
>> -       struct iommu_domain *domain;
>>          struct msm_mmu *mmu;
>>
>> -       domain = iommu_domain_alloc(&platform_bus_type);
>> -       if (!domain)
>> +       mmu = msm_iommu_new(gmu->dev, 0);
>> +       if (!mmu)
>>                  return -ENODEV;
>> +       if (IS_ERR(mmu))
>> +               return PTR_ERR(mmu);
>>
>> -       mmu = msm_iommu_new(gmu->dev, domain);
>>          gmu->aspace = msm_gem_address_space_create(mmu, "gmu", 0x0, 0x80000000);
>> -       if (IS_ERR(gmu->aspace)) {
>> -               iommu_domain_free(domain);
>> +       if (IS_ERR(gmu->aspace))
>>                  return PTR_ERR(gmu->aspace);
>> -       }
>>
>>          return 0;
>>   }
>> diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
>> index fdc578016e0b..7a1b4397b842 100644
>> --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
>> +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
>> @@ -1784,37 +1784,30 @@ static void a6xx_gpu_set_freq(struct msm_gpu *gpu, struct dev_pm_opp *opp,
>>   static struct msm_gem_address_space *
>>   a6xx_create_address_space(struct msm_gpu *gpu, struct platform_device *pdev)
>>   {
>> -       struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
>> -       struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
>> -       struct iommu_domain *iommu;
>>          struct msm_mmu *mmu;
>>          struct msm_gem_address_space *aspace;
>> +       struct iommu_domain_geometry *geometry;
>>          u64 start, size;
>>
>> -       iommu = iommu_domain_alloc(&platform_bus_type);
>> -       if (!iommu)
>> -               return NULL;
>> -
>>          /*
>>           * This allows GPU to set the bus attributes required to use system
>>           * cache on behalf of the iommu page table walker.
>>           */
>> -       if (!IS_ERR_OR_NULL(a6xx_gpu->htw_llc_slice))
>> -               adreno_set_llc_attributes(iommu);
>> -
>> -       mmu = msm_iommu_new(&pdev->dev, iommu);
>> -       if (IS_ERR(mmu)) {
>> -               iommu_domain_free(iommu);
>> +       mmu = msm_iommu_new(&pdev->dev, IO_PGTABLE_QUIRK_ARM_OUTER_WBWA);
> 
> I think/assume the quirk still needs to be conditional on
> a6xx_gpu->htw_llc_slice.. or at least I'm not sure what happens if we
> set it but do not have an LLCC (or allocated slice)


Argh, I forgot the check while doing the refactoring. Will fix in v4.


-- 
With best wishes
Dmitry



More information about the Freedreno mailing list