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

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'drm-fixes-2021-05-29' of git://anongit.freedesktop.org/drm/drm

Pull drm fixes from Dave Airlie:
"Pretty quiet this week, couple of amdgpu, one i915, and a few misc otherwise.

ttm:
- prevent irrelevant swapout

amdgpu:
- MultiGPU fan fix
- VCN powergating fixes

amdkfd:
- Fix SDMA register offset error

meson:
- fix shutdown crash

i915:
- Re-enable LTTPR non-transparent LT mode for DPCD_REV < 1.4"

* tag 'drm-fixes-2021-05-29' of git://anongit.freedesktop.org/drm/drm:
drm/ttm: Skip swapout if ttm object is not populated
drm/i915: Reenable LTTPR non-transparent LT mode for DPCD_REV<1.4
drm/meson: fix shutdown crash when component not probed
drm/amdgpu/jpeg3: add cancel_delayed_work_sync before power gate
drm/amdgpu/jpeg2.5: add cancel_delayed_work_sync before power gate
drm/amdgpu/jpeg2.0: add cancel_delayed_work_sync before power gate
drm/amdgpu/vcn3: add cancel_delayed_work_sync before power gate
drm/amdgpu/vcn2.5: add cancel_delayed_work_sync before power gate
drm/amdgpu/vcn2.0: add cancel_delayed_work_sync before power gate
drm/amdgpu/vcn1: add cancel_delayed_work_sync before power gate
drm/amdkfd: correct sienna_cichlid SDMA RLC register offset error
drm/amd/pm: correct MGpuFanBoost setting

+81 -57
+6 -6
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10_3.c
··· 156 156 mmSDMA0_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL; 157 157 break; 158 158 case 1: 159 - sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA1, 0, 159 + sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA0, 0, 160 160 mmSDMA1_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL; 161 161 break; 162 162 case 2: 163 - sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA2, 0, 164 - mmSDMA2_RLC0_RB_CNTL) - mmSDMA2_RLC0_RB_CNTL; 163 + sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA0, 0, 164 + mmSDMA2_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL; 165 165 break; 166 166 case 3: 167 - sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA3, 0, 168 - mmSDMA3_RLC0_RB_CNTL) - mmSDMA2_RLC0_RB_CNTL; 167 + sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA0, 0, 168 + mmSDMA3_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL; 169 169 break; 170 170 } 171 171 ··· 450 450 engine_id, queue_id); 451 451 uint32_t i = 0, reg; 452 452 #undef HQD_N_REGS 453 - #define HQD_N_REGS (19+6+7+10) 453 + #define HQD_N_REGS (19+6+7+12) 454 454 455 455 *dump = kmalloc(HQD_N_REGS*2*sizeof(uint32_t), GFP_KERNEL); 456 456 if (*dump == NULL)
+2
drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c
··· 172 172 { 173 173 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 174 174 175 + cancel_delayed_work_sync(&adev->vcn.idle_work); 176 + 175 177 if (adev->jpeg.cur_state != AMD_PG_STATE_GATE && 176 178 RREG32_SOC15(JPEG, 0, mmUVD_JRBC_STATUS)) 177 179 jpeg_v2_0_set_powergating_state(adev, AMD_PG_STATE_GATE);
+2 -2
drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c
··· 187 187 static int jpeg_v2_5_hw_fini(void *handle) 188 188 { 189 189 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 190 - struct amdgpu_ring *ring; 191 190 int i; 191 + 192 + cancel_delayed_work_sync(&adev->vcn.idle_work); 192 193 193 194 for (i = 0; i < adev->jpeg.num_jpeg_inst; ++i) { 194 195 if (adev->jpeg.harvest_config & (1 << i)) 195 196 continue; 196 197 197 - ring = &adev->jpeg.inst[i].ring_dec; 198 198 if (adev->jpeg.cur_state != AMD_PG_STATE_GATE && 199 199 RREG32_SOC15(JPEG, i, mmUVD_JRBC_STATUS)) 200 200 jpeg_v2_5_set_powergating_state(adev, AMD_PG_STATE_GATE);
+2 -2
drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c
··· 159 159 static int jpeg_v3_0_hw_fini(void *handle) 160 160 { 161 161 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 162 - struct amdgpu_ring *ring; 163 162 164 - ring = &adev->jpeg.inst->ring_dec; 163 + cancel_delayed_work_sync(&adev->vcn.idle_work); 164 + 165 165 if (adev->jpeg.cur_state != AMD_PG_STATE_GATE && 166 166 RREG32_SOC15(JPEG, 0, mmUVD_JRBC_STATUS)) 167 167 jpeg_v3_0_set_powergating_state(adev, AMD_PG_STATE_GATE);
+5 -1
drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
··· 231 231 { 232 232 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 233 233 234 + cancel_delayed_work_sync(&adev->vcn.idle_work); 235 + 234 236 if ((adev->pg_flags & AMD_PG_SUPPORT_VCN_DPG) || 235 - RREG32_SOC15(VCN, 0, mmUVD_STATUS)) 237 + (adev->vcn.cur_state != AMD_PG_STATE_GATE && 238 + RREG32_SOC15(VCN, 0, mmUVD_STATUS))) { 236 239 vcn_v1_0_set_powergating_state(adev, AMD_PG_STATE_GATE); 240 + } 237 241 238 242 return 0; 239 243 }
+2
drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c
··· 262 262 { 263 263 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 264 264 265 + cancel_delayed_work_sync(&adev->vcn.idle_work); 266 + 265 267 if ((adev->pg_flags & AMD_PG_SUPPORT_VCN_DPG) || 266 268 (adev->vcn.cur_state != AMD_PG_STATE_GATE && 267 269 RREG32_SOC15(VCN, 0, mmUVD_STATUS)))
+2
drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c
··· 321 321 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 322 322 int i; 323 323 324 + cancel_delayed_work_sync(&adev->vcn.idle_work); 325 + 324 326 for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 325 327 if (adev->vcn.harvest_config & (1 << i)) 326 328 continue;
+2 -3
drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c
··· 372 372 static int vcn_v3_0_hw_fini(void *handle) 373 373 { 374 374 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 375 - struct amdgpu_ring *ring; 376 375 int i; 376 + 377 + cancel_delayed_work_sync(&adev->vcn.idle_work); 377 378 378 379 for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 379 380 if (adev->vcn.harvest_config & (1 << i)) 380 381 continue; 381 - 382 - ring = &adev->vcn.inst[i].ring_dec; 383 382 384 383 if (!amdgpu_sriov_vf(adev)) { 385 384 if ((adev->pg_flags & AMD_PG_SUPPORT_VCN_DPG) ||
+9
drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c
··· 2925 2925 2926 2926 static int navi10_enable_mgpu_fan_boost(struct smu_context *smu) 2927 2927 { 2928 + struct smu_table_context *table_context = &smu->smu_table; 2929 + PPTable_t *smc_pptable = table_context->driver_pptable; 2928 2930 struct amdgpu_device *adev = smu->adev; 2929 2931 uint32_t param = 0; 2930 2932 2931 2933 /* Navi12 does not support this */ 2932 2934 if (adev->asic_type == CHIP_NAVI12) 2935 + return 0; 2936 + 2937 + /* 2938 + * Skip the MGpuFanBoost setting for those ASICs 2939 + * which do not support it 2940 + */ 2941 + if (!smc_pptable->MGpuFanBoostLimitRpm) 2933 2942 return 0; 2934 2943 2935 2944 /* Workaround for WS SKU */
+10
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
··· 3027 3027 3028 3028 static int sienna_cichlid_enable_mgpu_fan_boost(struct smu_context *smu) 3029 3029 { 3030 + struct smu_table_context *table_context = &smu->smu_table; 3031 + PPTable_t *smc_pptable = table_context->driver_pptable; 3032 + 3033 + /* 3034 + * Skip the MGpuFanBoost setting for those ASICs 3035 + * which do not support it 3036 + */ 3037 + if (!smc_pptable->MGpuFanBoostLimitRpm) 3038 + return 0; 3039 + 3030 3040 return smu_cmn_send_smc_msg_with_param(smu, 3031 3041 SMU_MSG_SetMGpuFanBoostLimitRpm, 3032 3042 0,
+5 -4
drivers/gpu/drm/meson/meson_drv.c
··· 485 485 static void meson_drv_shutdown(struct platform_device *pdev) 486 486 { 487 487 struct meson_drm *priv = dev_get_drvdata(&pdev->dev); 488 - struct drm_device *drm = priv->drm; 489 488 490 - DRM_DEBUG_DRIVER("\n"); 491 - drm_kms_helper_poll_fini(drm); 492 - drm_atomic_helper_shutdown(drm); 489 + if (!priv) 490 + return; 491 + 492 + drm_kms_helper_poll_fini(priv->drm); 493 + drm_atomic_helper_shutdown(priv->drm); 493 494 } 494 495 495 496 static int meson_drv_probe(struct platform_device *pdev)
+1 -1
drivers/gpu/drm/ttm/ttm_device.c
··· 145 145 list_for_each_entry(bo, &man->lru[j], lru) { 146 146 uint32_t num_pages; 147 147 148 - if (!bo->ttm || 148 + if (!bo->ttm || !ttm_tt_is_populated(bo->ttm) || 149 149 bo->ttm->page_flags & TTM_PAGE_FLAG_SG || 150 150 bo->ttm->page_flags & TTM_PAGE_FLAG_SWAPPED) 151 151 continue;