]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/4.4.29/drm-radeon-change-vblank_time-s-calculation-method-to-reduce-computational-error.patch
4.9-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 4.4.29 / drm-radeon-change-vblank_time-s-calculation-method-to-reduce-computational-error.patch
1 From 02cfb5fccb0f9f968f0e208d89d9769aa16267bc Mon Sep 17 00:00:00 2001
2 From: Alex Deucher <alexander.deucher@amd.com>
3 Date: Wed, 12 Oct 2016 15:28:55 -0400
4 Subject: drm/radeon: change vblank_time's calculation method to reduce computational error.
5
6 From: Alex Deucher <alexander.deucher@amd.com>
7
8 commit 02cfb5fccb0f9f968f0e208d89d9769aa16267bc upstream.
9
10 Ported from Rex's amdgpu change.
11
12 Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
13 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
14
15 ---
16 drivers/gpu/drm/radeon/r600_dpm.c | 15 ++++++++-------
17 1 file changed, 8 insertions(+), 7 deletions(-)
18
19 --- a/drivers/gpu/drm/radeon/r600_dpm.c
20 +++ b/drivers/gpu/drm/radeon/r600_dpm.c
21 @@ -156,19 +156,20 @@ u32 r600_dpm_get_vblank_time(struct rade
22 struct drm_device *dev = rdev->ddev;
23 struct drm_crtc *crtc;
24 struct radeon_crtc *radeon_crtc;
25 - u32 line_time_us, vblank_lines;
26 + u32 vblank_in_pixels;
27 u32 vblank_time_us = 0xffffffff; /* if the displays are off, vblank time is max */
28
29 if (rdev->num_crtc && rdev->mode_info.mode_config_initialized) {
30 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
31 radeon_crtc = to_radeon_crtc(crtc);
32 if (crtc->enabled && radeon_crtc->enabled && radeon_crtc->hw_mode.clock) {
33 - line_time_us = (radeon_crtc->hw_mode.crtc_htotal * 1000) /
34 - radeon_crtc->hw_mode.clock;
35 - vblank_lines = radeon_crtc->hw_mode.crtc_vblank_end -
36 - radeon_crtc->hw_mode.crtc_vdisplay +
37 - (radeon_crtc->v_border * 2);
38 - vblank_time_us = vblank_lines * line_time_us;
39 + vblank_in_pixels =
40 + radeon_crtc->hw_mode.crtc_htotal *
41 + (radeon_crtc->hw_mode.crtc_vblank_end -
42 + radeon_crtc->hw_mode.crtc_vdisplay +
43 + (radeon_crtc->v_border * 2));
44 +
45 + vblank_time_us = vblank_in_pixels * 1000 / radeon_crtc->hw_mode.clock;
46 break;
47 }
48 }