Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'drm-msm-fixes-2020-06-25' of https://gitlab.freedesktop.org/drm/msm into drm-fixes

A few fixes, mostly fallout from the address space refactor and dpu
color processing.

Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Rob Clark <robdclark@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/ <CAF6AEGv0SSXArdYs=mOLqJPJdkvk8CpxaJGecqgbOGazQ2n5og@mail.gmail.com

+21 -15
+1 -1
drivers/gpu/drm/msm/adreno/a2xx_gpu.c
··· 408 408 struct msm_gem_address_space *aspace; 409 409 410 410 aspace = msm_gem_address_space_create(mmu, "gpu", SZ_16M, 411 - SZ_16M + 0xfff * SZ_64K); 411 + 0xfff * SZ_64K); 412 412 413 413 if (IS_ERR(aspace) && !IS_ERR(mmu)) 414 414 mmu->funcs->destroy(mmu);
+1 -1
drivers/gpu/drm/msm/adreno/a6xx_gmu.c
··· 1121 1121 return -ENODEV; 1122 1122 1123 1123 mmu = msm_iommu_new(gmu->dev, domain); 1124 - gmu->aspace = msm_gem_address_space_create(mmu, "gmu", 0x0, 0x7fffffff); 1124 + gmu->aspace = msm_gem_address_space_create(mmu, "gmu", 0x0, 0x80000000); 1125 1125 if (IS_ERR(gmu->aspace)) { 1126 1126 iommu_domain_free(domain); 1127 1127 return PTR_ERR(gmu->aspace);
+1 -1
drivers/gpu/drm/msm/adreno/a6xx_gpu.c
··· 893 893 #if defined(CONFIG_DRM_MSM_GPU_STATE) 894 894 .gpu_state_get = a6xx_gpu_state_get, 895 895 .gpu_state_put = a6xx_gpu_state_put, 896 - .create_address_space = adreno_iommu_create_address_space, 897 896 #endif 897 + .create_address_space = adreno_iommu_create_address_space, 898 898 }, 899 899 .get_timestamp = a6xx_get_timestamp, 900 900 };
+1 -1
drivers/gpu/drm/msm/adreno/adreno_gpu.c
··· 194 194 struct msm_gem_address_space *aspace; 195 195 196 196 aspace = msm_gem_address_space_create(mmu, "gpu", SZ_16M, 197 - 0xfffffff); 197 + 0xffffffff - SZ_16M); 198 198 199 199 if (IS_ERR(aspace) && !IS_ERR(mmu)) 200 200 mmu->funcs->destroy(mmu);
+11 -7
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
··· 521 521 struct dpu_kms *dpu_kms, 522 522 struct drm_display_mode *mode) 523 523 { 524 - struct msm_display_topology topology; 524 + struct msm_display_topology topology = {0}; 525 525 int i, intf_count = 0; 526 526 527 527 for (i = 0; i < MAX_PHYS_ENCODERS_PER_VIRTUAL; i++) ··· 537 537 * 1 LM, 1 INTF 538 538 * 2 LM, 1 INTF (stream merge to support high resolution interfaces) 539 539 * 540 - * Adding color blocks only to primary interface 540 + * Adding color blocks only to primary interface if available in 541 + * sufficient number 541 542 */ 542 543 if (intf_count == 2) 543 544 topology.num_lm = 2; ··· 547 546 else 548 547 topology.num_lm = (mode->hdisplay > MAX_HDISPLAY_SPLIT) ? 2 : 1; 549 548 550 - if (dpu_enc->disp_info.intf_type == DRM_MODE_ENCODER_DSI) 551 - topology.num_dspp = topology.num_lm; 549 + if (dpu_enc->disp_info.intf_type == DRM_MODE_ENCODER_DSI) { 550 + if (dpu_kms->catalog->dspp && 551 + (dpu_kms->catalog->dspp_count >= topology.num_lm)) 552 + topology.num_dspp = topology.num_lm; 553 + } 552 554 553 555 topology.num_enc = 0; 554 556 topology.num_intf = intf_count; ··· 2140 2136 2141 2137 dpu_enc = to_dpu_encoder_virt(enc); 2142 2138 2143 - mutex_init(&dpu_enc->enc_lock); 2144 2139 ret = dpu_encoder_setup_display(dpu_enc, dpu_kms, disp_info); 2145 2140 if (ret) 2146 2141 goto fail; ··· 2154 2151 0); 2155 2152 2156 2153 2157 - mutex_init(&dpu_enc->rc_lock); 2158 2154 INIT_DELAYED_WORK(&dpu_enc->delayed_off_work, 2159 2155 dpu_encoder_off_work); 2160 2156 dpu_enc->idle_timeout = IDLE_TIMEOUT; ··· 2185 2183 2186 2184 dpu_enc = devm_kzalloc(dev->dev, sizeof(*dpu_enc), GFP_KERNEL); 2187 2185 if (!dpu_enc) 2188 - return ERR_PTR(ENOMEM); 2186 + return ERR_PTR(-ENOMEM); 2189 2187 2190 2188 rc = drm_encoder_init(dev, &dpu_enc->base, &dpu_encoder_funcs, 2191 2189 drm_enc_mode, NULL); ··· 2198 2196 2199 2197 spin_lock_init(&dpu_enc->enc_spinlock); 2200 2198 dpu_enc->enabled = false; 2199 + mutex_init(&dpu_enc->enc_lock); 2200 + mutex_init(&dpu_enc->rc_lock); 2201 2201 2202 2202 return &dpu_enc->base; 2203 2203 }
+1 -1
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
··· 780 780 781 781 mmu = msm_iommu_new(dpu_kms->dev->dev, domain); 782 782 aspace = msm_gem_address_space_create(mmu, "dpu1", 783 - 0x1000, 0xfffffff); 783 + 0x1000, 0x100000000 - 0x1000); 784 784 785 785 if (IS_ERR(aspace)) { 786 786 mmu->funcs->destroy(mmu);
+1 -1
drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c
··· 514 514 config->iommu); 515 515 516 516 aspace = msm_gem_address_space_create(mmu, 517 - "mdp4", 0x1000, 0xffffffff); 517 + "mdp4", 0x1000, 0x100000000 - 0x1000); 518 518 519 519 if (IS_ERR(aspace)) { 520 520 if (!IS_ERR(mmu))
+1 -1
drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
··· 633 633 mmu = msm_iommu_new(iommu_dev, config->platform.iommu); 634 634 635 635 aspace = msm_gem_address_space_create(mmu, "mdp5", 636 - 0x1000, 0xffffffff); 636 + 0x1000, 0x100000000 - 0x1000); 637 637 638 638 if (IS_ERR(aspace)) { 639 639 if (!IS_ERR(mmu))
+3 -1
drivers/gpu/drm/msm/msm_submitqueue.c
··· 71 71 queue->flags = flags; 72 72 73 73 if (priv->gpu) { 74 - if (prio >= priv->gpu->nr_rings) 74 + if (prio >= priv->gpu->nr_rings) { 75 + kfree(queue); 75 76 return -EINVAL; 77 + } 76 78 77 79 queue->prio = prio; 78 80 }