Skip to content

Commit e05edbc

Browse files
lumagRob Clark
authored andcommitted
drm/msm/mdp4: use msm_kms_init_vm() instead of duplicating it
Use the msm_kms_init_vm() function to allocate memory manager instead of hand-coding a copy of it. Although MDP4 platforms don't have MDSS device, it's still safe to use the function as all MDP4 devices have IOMMU and the parent of the MDP4 is the root SoC device. Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Patchwork: https://patchwork.freedesktop.org/patch/672563/ Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com>
1 parent 618c11e commit e05edbc

5 files changed

Lines changed: 9 additions & 29 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1110,7 +1110,7 @@ static int _dpu_kms_mmu_init(struct dpu_kms *dpu_kms)
11101110
{
11111111
struct drm_gpuvm *vm;
11121112

1113-
vm = msm_kms_init_vm(dpu_kms->dev);
1113+
vm = msm_kms_init_vm(dpu_kms->dev, dpu_kms->dev->dev->parent);
11141114
if (IS_ERR(vm))
11151115
return PTR_ERR(vm);
11161116

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

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -391,11 +391,9 @@ static void read_mdp_hw_revision(struct mdp4_kms *mdp4_kms,
391391

392392
static int mdp4_kms_init(struct drm_device *dev)
393393
{
394-
struct platform_device *pdev = to_platform_device(dev->dev);
395394
struct msm_drm_private *priv = dev->dev_private;
396395
struct mdp4_kms *mdp4_kms = to_mdp4_kms(to_mdp_kms(priv->kms));
397396
struct msm_kms *kms = NULL;
398-
struct msm_mmu *mmu;
399397
struct drm_gpuvm *vm;
400398
int ret;
401399
u32 major, minor;
@@ -458,30 +456,13 @@ static int mdp4_kms_init(struct drm_device *dev)
458456
mdp4_disable(mdp4_kms);
459457
mdelay(16);
460458

461-
if (!device_iommu_mapped(&pdev->dev)) {
462-
DRM_DEV_INFO(dev->dev, "no IOMMU, bailing out\n");
463-
ret = -ENODEV;
459+
vm = msm_kms_init_vm(mdp4_kms->dev, NULL);
460+
if (IS_ERR(vm)) {
461+
ret = PTR_ERR(vm);
464462
goto fail;
465463
}
466464

467-
mmu = msm_iommu_new(&pdev->dev, 0);
468-
if (IS_ERR(mmu)) {
469-
ret = PTR_ERR(mmu);
470-
goto fail;
471-
} else {
472-
vm = msm_gem_vm_create(dev, mmu, "mdp4",
473-
0x1000, 0x100000000 - 0x1000,
474-
true);
475-
476-
if (IS_ERR(vm)) {
477-
if (!IS_ERR(mmu))
478-
mmu->funcs->destroy(mmu);
479-
ret = PTR_ERR(vm);
480-
goto fail;
481-
}
482-
483-
kms->vm = vm;
484-
}
465+
kms->vm = vm;
485466

486467
ret = modeset_init(mdp4_kms);
487468
if (ret) {

drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,7 @@ static int mdp5_kms_init(struct drm_device *dev)
534534
}
535535
mdelay(16);
536536

537-
vm = msm_kms_init_vm(mdp5_kms->dev);
537+
vm = msm_kms_init_vm(mdp5_kms->dev, pdev->dev.parent);
538538
if (IS_ERR(vm)) {
539539
ret = PTR_ERR(vm);
540540
goto fail;

drivers/gpu/drm/msm/msm_drv.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ void msm_crtc_disable_vblank(struct drm_crtc *crtc);
229229
int msm_register_mmu(struct drm_device *dev, struct msm_mmu *mmu);
230230
void msm_unregister_mmu(struct drm_device *dev, struct msm_mmu *mmu);
231231

232-
struct drm_gpuvm *msm_kms_init_vm(struct drm_device *dev);
232+
struct drm_gpuvm *msm_kms_init_vm(struct drm_device *dev, struct device *mdss_dev);
233233
bool msm_use_mmu(struct drm_device *dev);
234234

235235
int msm_ioctl_gem_submit(struct drm_device *dev, void *data,

drivers/gpu/drm/msm/msm_kms.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,12 +177,11 @@ static int msm_kms_fault_handler(void *arg, unsigned long iova, int flags, void
177177
return -ENOSYS;
178178
}
179179

180-
struct drm_gpuvm *msm_kms_init_vm(struct drm_device *dev)
180+
struct drm_gpuvm *msm_kms_init_vm(struct drm_device *dev, struct device *mdss_dev)
181181
{
182182
struct drm_gpuvm *vm;
183183
struct msm_mmu *mmu;
184184
struct device *mdp_dev = dev->dev;
185-
struct device *mdss_dev = mdp_dev->parent;
186185
struct msm_drm_private *priv = dev->dev_private;
187186
struct msm_kms *kms = priv->kms;
188187
struct device *iommu_dev;
@@ -193,7 +192,7 @@ struct drm_gpuvm *msm_kms_init_vm(struct drm_device *dev)
193192
*/
194193
if (device_iommu_mapped(mdp_dev))
195194
iommu_dev = mdp_dev;
196-
else if (device_iommu_mapped(mdss_dev))
195+
else if (mdss_dev && device_iommu_mapped(mdss_dev))
197196
iommu_dev = mdss_dev;
198197
else {
199198
drm_info(dev, "no IOMMU, bailing out\n");

0 commit comments

Comments
 (0)