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

drm/amdgpu: Set MASTER_UPDATE_MODE to 0 again

With the previous change, it's safe to let page flips take effect
anytime during a vertical blank period.

This can avoid delaying a flip by a frame in some cases where we get to
amdgpu_flip_work_func -> adev->mode_info.funcs->page_flip during a
vertical blank period.

Acked-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Michel Dänzer and committed by
Alex Deucher
3fd4b751 325cbba1

+8 -8
+4 -4
drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
··· 646 646 647 647 if (save->crtc_enabled[i]) { 648 648 tmp = RREG32(mmMASTER_UPDATE_MODE + crtc_offsets[i]); 649 - if (REG_GET_FIELD(tmp, MASTER_UPDATE_MODE, MASTER_UPDATE_MODE) != 3) { 650 - tmp = REG_SET_FIELD(tmp, MASTER_UPDATE_MODE, MASTER_UPDATE_MODE, 3); 649 + if (REG_GET_FIELD(tmp, MASTER_UPDATE_MODE, MASTER_UPDATE_MODE) != 0) { 650 + tmp = REG_SET_FIELD(tmp, MASTER_UPDATE_MODE, MASTER_UPDATE_MODE, 0); 651 651 WREG32(mmMASTER_UPDATE_MODE + crtc_offsets[i], tmp); 652 652 } 653 653 tmp = RREG32(mmGRPH_UPDATE + crtc_offsets[i]); ··· 2314 2314 WREG32(mmVIEWPORT_SIZE + amdgpu_crtc->crtc_offset, 2315 2315 (viewport_w << 16) | viewport_h); 2316 2316 2317 - /* set pageflip to happen only at start of vblank interval (front porch) */ 2318 - WREG32(mmMASTER_UPDATE_MODE + amdgpu_crtc->crtc_offset, 3); 2317 + /* set pageflip to happen anywhere in vblank interval */ 2318 + WREG32(mmMASTER_UPDATE_MODE + amdgpu_crtc->crtc_offset, 0); 2319 2319 2320 2320 if (!atomic && fb && fb != crtc->primary->fb) { 2321 2321 amdgpu_fb = to_amdgpu_framebuffer(fb);
+2 -2
drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
··· 2297 2297 WREG32(mmVIEWPORT_SIZE + amdgpu_crtc->crtc_offset, 2298 2298 (viewport_w << 16) | viewport_h); 2299 2299 2300 - /* set pageflip to happen only at start of vblank interval (front porch) */ 2301 - WREG32(mmCRTC_MASTER_UPDATE_MODE + amdgpu_crtc->crtc_offset, 3); 2300 + /* set pageflip to happen anywhere in vblank interval */ 2301 + WREG32(mmCRTC_MASTER_UPDATE_MODE + amdgpu_crtc->crtc_offset, 0); 2302 2302 2303 2303 if (!atomic && fb && fb != crtc->primary->fb) { 2304 2304 amdgpu_fb = to_amdgpu_framebuffer(fb);
+2 -2
drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
··· 2183 2183 WREG32(mmVIEWPORT_SIZE + amdgpu_crtc->crtc_offset, 2184 2184 (viewport_w << 16) | viewport_h); 2185 2185 2186 - /* set pageflip to happen only at start of vblank interval (front porch) */ 2187 - WREG32(mmMASTER_UPDATE_MODE + amdgpu_crtc->crtc_offset, 3); 2186 + /* set pageflip to happen anywhere in vblank interval */ 2187 + WREG32(mmMASTER_UPDATE_MODE + amdgpu_crtc->crtc_offset, 0); 2188 2188 2189 2189 if (!atomic && fb && fb != crtc->primary->fb) { 2190 2190 amdgpu_fb = to_amdgpu_framebuffer(fb);