Skip to content

Commit 3788960

Browse files
robclarkRob Clark
authored andcommitted
drm/msm: Use drm_gpuvm types more
Most of the driver code doesn't need to reach in to msm specific fields, so just use the drm_gpuvm/drm_gpuva types directly. This should hopefully improve commonality with other drivers and make the code easier to understand. Signed-off-by: Rob Clark <robdclark@chromium.org> Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com> Tested-by: Antonino Maniscalco <antomani103@gmail.com> Reviewed-by: Antonino Maniscalco <antomani103@gmail.com> Patchwork: https://patchwork.freedesktop.org/patch/661483/
1 parent fe4952b commit 3788960

23 files changed

+175
-189
lines changed

drivers/gpu/drm/msm/adreno/a2xx_gpu.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ static int a2xx_hw_init(struct msm_gpu *gpu)
113113
uint32_t *ptr, len;
114114
int i, ret;
115115

116-
a2xx_gpummu_params(gpu->vm->mmu, &pt_base, &tran_error);
116+
a2xx_gpummu_params(to_msm_vm(gpu->vm)->mmu, &pt_base, &tran_error);
117117

118118
DBG("%s", gpu->name);
119119

@@ -466,11 +466,11 @@ static struct msm_gpu_state *a2xx_gpu_state_get(struct msm_gpu *gpu)
466466
return state;
467467
}
468468

469-
static struct msm_gem_vm *
469+
static struct drm_gpuvm *
470470
a2xx_create_vm(struct msm_gpu *gpu, struct platform_device *pdev)
471471
{
472472
struct msm_mmu *mmu = a2xx_gpummu_new(&pdev->dev, gpu);
473-
struct msm_gem_vm *vm;
473+
struct drm_gpuvm *vm;
474474

475475
vm = msm_gem_vm_create(gpu->dev, mmu, "gpu", SZ_16M, 0xfff * SZ_64K, true);
476476

drivers/gpu/drm/msm/adreno/a5xx_gpu.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1786,7 +1786,8 @@ struct msm_gpu *a5xx_gpu_init(struct drm_device *dev)
17861786
return ERR_PTR(ret);
17871787
}
17881788

1789-
msm_mmu_set_fault_handler(gpu->vm->mmu, gpu, a5xx_fault_handler);
1789+
msm_mmu_set_fault_handler(to_msm_vm(gpu->vm)->mmu, gpu,
1790+
a5xx_fault_handler);
17901791

17911792
/* Set up the preemption specific bits and pieces for each ringbuffer */
17921793
a5xx_preempt_init(gpu);

drivers/gpu/drm/msm/adreno/a6xx_gmu.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1259,15 +1259,17 @@ int a6xx_gmu_stop(struct a6xx_gpu *a6xx_gpu)
12591259

12601260
static void a6xx_gmu_memory_free(struct a6xx_gmu *gmu)
12611261
{
1262+
struct msm_mmu *mmu = to_msm_vm(gmu->vm)->mmu;
1263+
12621264
msm_gem_kernel_put(gmu->hfi.obj, gmu->vm);
12631265
msm_gem_kernel_put(gmu->debug.obj, gmu->vm);
12641266
msm_gem_kernel_put(gmu->icache.obj, gmu->vm);
12651267
msm_gem_kernel_put(gmu->dcache.obj, gmu->vm);
12661268
msm_gem_kernel_put(gmu->dummy.obj, gmu->vm);
12671269
msm_gem_kernel_put(gmu->log.obj, gmu->vm);
12681270

1269-
gmu->vm->mmu->funcs->detach(gmu->vm->mmu);
1270-
msm_gem_vm_put(gmu->vm);
1271+
mmu->funcs->detach(mmu);
1272+
drm_gpuvm_put(gmu->vm);
12711273
}
12721274

12731275
static int a6xx_gmu_memory_alloc(struct a6xx_gmu *gmu, struct a6xx_gmu_bo *bo,

drivers/gpu/drm/msm/adreno/a6xx_gmu.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ struct a6xx_gmu {
6262
/* For serializing communication with the GMU: */
6363
struct mutex lock;
6464

65-
struct msm_gem_vm *vm;
65+
struct drm_gpuvm *vm;
6666

6767
void __iomem *mmio;
6868
void __iomem *rscc;

drivers/gpu/drm/msm/adreno/a6xx_gpu.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ static void a6xx_set_pagetable(struct a6xx_gpu *a6xx_gpu,
120120
if (ctx->seqno == ring->cur_ctx_seqno)
121121
return;
122122

123-
if (msm_iommu_pagetable_params(ctx->vm->mmu, &ttbr, &asid))
123+
if (msm_iommu_pagetable_params(to_msm_vm(ctx->vm)->mmu, &ttbr, &asid))
124124
return;
125125

126126
if (adreno_gpu->info->family >= ADRENO_7XX_GEN1) {
@@ -2256,7 +2256,7 @@ static void a6xx_gpu_set_freq(struct msm_gpu *gpu, struct dev_pm_opp *opp,
22562256
mutex_unlock(&a6xx_gpu->gmu.lock);
22572257
}
22582258

2259-
static struct msm_gem_vm *
2259+
static struct drm_gpuvm *
22602260
a6xx_create_vm(struct msm_gpu *gpu, struct platform_device *pdev)
22612261
{
22622262
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
@@ -2274,12 +2274,12 @@ a6xx_create_vm(struct msm_gpu *gpu, struct platform_device *pdev)
22742274
return adreno_iommu_create_vm(gpu, pdev, quirks);
22752275
}
22762276

2277-
static struct msm_gem_vm *
2277+
static struct drm_gpuvm *
22782278
a6xx_create_private_vm(struct msm_gpu *gpu)
22792279
{
22802280
struct msm_mmu *mmu;
22812281

2282-
mmu = msm_iommu_pagetable_create(gpu->vm->mmu);
2282+
mmu = msm_iommu_pagetable_create(to_msm_vm(gpu->vm)->mmu);
22832283

22842284
if (IS_ERR(mmu))
22852285
return ERR_CAST(mmu);
@@ -2559,7 +2559,8 @@ struct msm_gpu *a6xx_gpu_init(struct drm_device *dev)
25592559

25602560
adreno_gpu->uche_trap_base = 0x1fffffffff000ull;
25612561

2562-
msm_mmu_set_fault_handler(gpu->vm->mmu, gpu, a6xx_fault_handler);
2562+
msm_mmu_set_fault_handler(to_msm_vm(gpu->vm)->mmu, gpu,
2563+
a6xx_fault_handler);
25632564

25642565
a6xx_calc_ubwc_config(adreno_gpu);
25652566
/* Set up the preemption specific bits and pieces for each ringbuffer */

drivers/gpu/drm/msm/adreno/a6xx_preempt.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ static int preempt_init_ring(struct a6xx_gpu *a6xx_gpu,
377377

378378
struct a7xx_cp_smmu_info *smmu_info_ptr = ptr;
379379

380-
msm_iommu_pagetable_params(gpu->vm->mmu, &ttbr, &asid);
380+
msm_iommu_pagetable_params(to_msm_vm(gpu->vm)->mmu, &ttbr, &asid);
381381

382382
smmu_info_ptr->magic = GEN7_CP_SMMU_INFO_MAGIC;
383383
smmu_info_ptr->ttbr0 = ttbr;

drivers/gpu/drm/msm/adreno/adreno_gpu.c

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -191,21 +191,21 @@ int adreno_zap_shader_load(struct msm_gpu *gpu, u32 pasid)
191191
return zap_shader_load_mdt(gpu, adreno_gpu->info->zapfw, pasid);
192192
}
193193

194-
struct msm_gem_vm *
194+
struct drm_gpuvm *
195195
adreno_create_vm(struct msm_gpu *gpu,
196196
struct platform_device *pdev)
197197
{
198198
return adreno_iommu_create_vm(gpu, pdev, 0);
199199
}
200200

201-
struct msm_gem_vm *
201+
struct drm_gpuvm *
202202
adreno_iommu_create_vm(struct msm_gpu *gpu,
203203
struct platform_device *pdev,
204204
unsigned long quirks)
205205
{
206206
struct iommu_domain_geometry *geometry;
207207
struct msm_mmu *mmu;
208-
struct msm_gem_vm *vm;
208+
struct drm_gpuvm *vm;
209209
u64 start, size;
210210

211211
mmu = msm_iommu_gpu_new(&pdev->dev, gpu, quirks);
@@ -275,9 +275,11 @@ void adreno_check_and_reenable_stall(struct adreno_gpu *adreno_gpu)
275275
if (!priv->stall_enabled &&
276276
ktime_after(ktime_get(), priv->stall_reenable_time) &&
277277
!READ_ONCE(gpu->crashstate)) {
278+
struct msm_mmu *mmu = to_msm_vm(gpu->vm)->mmu;
279+
278280
priv->stall_enabled = true;
279281

280-
gpu->vm->mmu->funcs->set_stall(gpu->vm->mmu, true);
282+
mmu->funcs->set_stall(mmu, true);
281283
}
282284
spin_unlock_irqrestore(&priv->fault_stall_lock, flags);
283285
}
@@ -292,6 +294,7 @@ int adreno_fault_handler(struct msm_gpu *gpu, unsigned long iova, int flags,
292294
u32 scratch[4])
293295
{
294296
struct msm_drm_private *priv = gpu->dev->dev_private;
297+
struct msm_mmu *mmu = to_msm_vm(gpu->vm)->mmu;
295298
const char *type = "UNKNOWN";
296299
bool do_devcoredump = info && (info->fsr & ARM_SMMU_FSR_SS) &&
297300
!READ_ONCE(gpu->crashstate);
@@ -305,7 +308,7 @@ int adreno_fault_handler(struct msm_gpu *gpu, unsigned long iova, int flags,
305308
if (priv->stall_enabled) {
306309
priv->stall_enabled = false;
307310

308-
gpu->vm->mmu->funcs->set_stall(gpu->vm->mmu, false);
311+
mmu->funcs->set_stall(mmu, false);
309312
}
310313

311314
priv->stall_reenable_time = ktime_add_ms(ktime_get(), 500);
@@ -405,7 +408,7 @@ int adreno_get_param(struct msm_gpu *gpu, struct msm_context *ctx,
405408
return 0;
406409
case MSM_PARAM_FAULTS:
407410
if (ctx->vm)
408-
*value = gpu->global_faults + ctx->vm->faults;
411+
*value = gpu->global_faults + to_msm_vm(ctx->vm)->faults;
409412
else
410413
*value = gpu->global_faults;
411414
return 0;
@@ -415,12 +418,12 @@ int adreno_get_param(struct msm_gpu *gpu, struct msm_context *ctx,
415418
case MSM_PARAM_VA_START:
416419
if (ctx->vm == gpu->vm)
417420
return UERR(EINVAL, drm, "requires per-process pgtables");
418-
*value = ctx->vm->base.mm_start;
421+
*value = ctx->vm->mm_start;
419422
return 0;
420423
case MSM_PARAM_VA_SIZE:
421424
if (ctx->vm == gpu->vm)
422425
return UERR(EINVAL, drm, "requires per-process pgtables");
423-
*value = ctx->vm->base.mm_range;
426+
*value = ctx->vm->mm_range;
424427
return 0;
425428
case MSM_PARAM_HIGHEST_BANK_BIT:
426429
*value = adreno_gpu->ubwc_config.highest_bank_bit;

drivers/gpu/drm/msm/adreno/adreno_gpu.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -622,11 +622,11 @@ void adreno_show_object(struct drm_printer *p, void **ptr, int len,
622622
* Common helper function to initialize the default address space for arm-smmu
623623
* attached targets
624624
*/
625-
struct msm_gem_vm *
625+
struct drm_gpuvm *
626626
adreno_create_vm(struct msm_gpu *gpu,
627627
struct platform_device *pdev);
628628

629-
struct msm_gem_vm *
629+
struct drm_gpuvm *
630630
adreno_iommu_create_vm(struct msm_gpu *gpu,
631631
struct platform_device *pdev,
632632
unsigned long quirks);

drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,17 +1098,17 @@ static void _dpu_kms_mmu_destroy(struct dpu_kms *dpu_kms)
10981098
if (!dpu_kms->base.vm)
10991099
return;
11001100

1101-
mmu = dpu_kms->base.vm->mmu;
1101+
mmu = to_msm_vm(dpu_kms->base.vm)->mmu;
11021102

11031103
mmu->funcs->detach(mmu);
1104-
msm_gem_vm_put(dpu_kms->base.vm);
1104+
drm_gpuvm_put(dpu_kms->base.vm);
11051105

11061106
dpu_kms->base.vm = NULL;
11071107
}
11081108

11091109
static int _dpu_kms_mmu_init(struct dpu_kms *dpu_kms)
11101110
{
1111-
struct msm_gem_vm *vm;
1111+
struct drm_gpuvm *vm;
11121112

11131113
vm = msm_kms_init_vm(dpu_kms->dev);
11141114
if (IS_ERR(vm))

drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,15 +122,16 @@ static void mdp4_destroy(struct msm_kms *kms)
122122
{
123123
struct mdp4_kms *mdp4_kms = to_mdp4_kms(to_mdp_kms(kms));
124124
struct device *dev = mdp4_kms->dev->dev;
125-
struct msm_gem_vm *vm = kms->vm;
126125

127126
if (mdp4_kms->blank_cursor_iova)
128127
msm_gem_unpin_iova(mdp4_kms->blank_cursor_bo, kms->vm);
129128
drm_gem_object_put(mdp4_kms->blank_cursor_bo);
130129

131-
if (vm) {
132-
vm->mmu->funcs->detach(vm->mmu);
133-
msm_gem_vm_put(vm);
130+
if (kms->vm) {
131+
struct msm_mmu *mmu = to_msm_vm(kms->vm)->mmu;
132+
133+
mmu->funcs->detach(mmu);
134+
drm_gpuvm_put(kms->vm);
134135
}
135136

136137
if (mdp4_kms->rpm_enabled)
@@ -398,7 +399,7 @@ static int mdp4_kms_init(struct drm_device *dev)
398399
struct mdp4_kms *mdp4_kms = to_mdp4_kms(to_mdp_kms(priv->kms));
399400
struct msm_kms *kms = NULL;
400401
struct msm_mmu *mmu;
401-
struct msm_gem_vm *vm;
402+
struct drm_gpuvm *vm;
402403
int ret;
403404
u32 major, minor;
404405
unsigned long max_clk;

0 commit comments

Comments
 (0)