diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0863-drm-amdgpu-Correct-get_crtc_scanoutpos-behavior-when.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0863-drm-amdgpu-Correct-get_crtc_scanoutpos-behavior-when.patch | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0863-drm-amdgpu-Correct-get_crtc_scanoutpos-behavior-when.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0863-drm-amdgpu-Correct-get_crtc_scanoutpos-behavior-when.patch new file mode 100644 index 00000000..139d549b --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0863-drm-amdgpu-Correct-get_crtc_scanoutpos-behavior-when.patch @@ -0,0 +1,54 @@ +From 481c7934495299035e9ad644c409aca695a8a890 Mon Sep 17 00:00:00 2001 +From: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> +Date: Thu, 1 Nov 2018 11:00:59 -0400 +Subject: [PATCH 0863/2940] drm/amdgpu: Correct get_crtc_scanoutpos behavior + when vpos >= vtotal + +When variable refresh rate is active the hardware counter can return +a position >= vtotal. This results in a vpos being returned from +amdgpu_display_get_crtc_scanoutpos that's a positive value. The +positive value indicates to the caller that the display is +currently in scanout when the display is actually still in vblank. + +This is because the vfront porch duration is unknown with variable +refresh active and will end when either a page flip occurs or the +timeout specified by the driver/display is reached. + +The behavior of the amdgpu_display_get_crtc_scanoutpos remains the +same when the position is below vtotal. When the position is above +vtotal the function will return a value that is effectively -vbl_end, +the size of the vback porch. + +The only caller affected by this change is the DRM helper for +calculating vblank timestamps. This change corrects behavior for +calculating the page flip timestamp from being the previous timestamp +to the calculation to the next timestamp when position >= vtotal. + +Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> +Reviewed-by: Harry Wentland <harry.wentland@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +index a42d6a1dfe29..43b6fbbc23b1 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +@@ -882,7 +882,12 @@ int amdgpu_display_get_crtc_scanoutpos(struct drm_device *dev, + /* Inside "upper part" of vblank area? Apply corrective offset if so: */ + if (in_vbl && (*vpos >= vbl_start)) { + vtotal = mode->crtc_vtotal; +- *vpos = *vpos - vtotal; ++ ++ /* With variable refresh rate displays the vpos can exceed ++ * the vtotal value. Clamp to 0 to return -vbl_end instead ++ * of guessing the remaining number of lines until scanout. ++ */ ++ *vpos = (*vpos < vtotal) ? (*vpos - vtotal) : 0; + } + + /* Correct for shifted end of vbl at vbl_end. */ +-- +2.17.1 + |