diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/dce_v8_0.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/dce_v8_0.c | 29 |
1 files changed, 8 insertions, 21 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c index 1b0717b11efe..e10c82f7a37a 100644 --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c | |||
@@ -974,23 +974,10 @@ static u32 dce_v8_0_latency_watermark(struct dce8_wm_params *wm) | |||
974 | a.full = dfixed_const(available_bandwidth); | 974 | a.full = dfixed_const(available_bandwidth); |
975 | b.full = dfixed_const(wm->num_heads); | 975 | b.full = dfixed_const(wm->num_heads); |
976 | a.full = dfixed_div(a, b); | 976 | a.full = dfixed_div(a, b); |
977 | tmp = div_u64((u64) dmif_size * (u64) wm->disp_clk, mc_latency + 512); | ||
978 | tmp = min(dfixed_trunc(a), tmp); | ||
977 | 979 | ||
978 | b.full = dfixed_const(mc_latency + 512); | 980 | lb_fill_bw = min(tmp, wm->disp_clk * wm->bytes_per_pixel / 1000); |
979 | c.full = dfixed_const(wm->disp_clk); | ||
980 | b.full = dfixed_div(b, c); | ||
981 | |||
982 | c.full = dfixed_const(dmif_size); | ||
983 | b.full = dfixed_div(c, b); | ||
984 | |||
985 | tmp = min(dfixed_trunc(a), dfixed_trunc(b)); | ||
986 | |||
987 | b.full = dfixed_const(1000); | ||
988 | c.full = dfixed_const(wm->disp_clk); | ||
989 | b.full = dfixed_div(c, b); | ||
990 | c.full = dfixed_const(wm->bytes_per_pixel); | ||
991 | b.full = dfixed_mul(b, c); | ||
992 | |||
993 | lb_fill_bw = min(tmp, dfixed_trunc(b)); | ||
994 | 981 | ||
995 | a.full = dfixed_const(max_src_lines_per_dst_line * wm->src_width * wm->bytes_per_pixel); | 982 | a.full = dfixed_const(max_src_lines_per_dst_line * wm->src_width * wm->bytes_per_pixel); |
996 | b.full = dfixed_const(1000); | 983 | b.full = dfixed_const(1000); |
@@ -1098,14 +1085,14 @@ static void dce_v8_0_program_watermarks(struct amdgpu_device *adev, | |||
1098 | { | 1085 | { |
1099 | struct drm_display_mode *mode = &amdgpu_crtc->base.mode; | 1086 | struct drm_display_mode *mode = &amdgpu_crtc->base.mode; |
1100 | struct dce8_wm_params wm_low, wm_high; | 1087 | struct dce8_wm_params wm_low, wm_high; |
1101 | u32 pixel_period; | 1088 | u32 active_time; |
1102 | u32 line_time = 0; | 1089 | u32 line_time = 0; |
1103 | u32 latency_watermark_a = 0, latency_watermark_b = 0; | 1090 | u32 latency_watermark_a = 0, latency_watermark_b = 0; |
1104 | u32 tmp, wm_mask, lb_vblank_lead_lines = 0; | 1091 | u32 tmp, wm_mask, lb_vblank_lead_lines = 0; |
1105 | 1092 | ||
1106 | if (amdgpu_crtc->base.enabled && num_heads && mode) { | 1093 | if (amdgpu_crtc->base.enabled && num_heads && mode) { |
1107 | pixel_period = 1000000 / (u32)mode->clock; | 1094 | active_time = 1000000UL * (u32)mode->crtc_hdisplay / (u32)mode->clock; |
1108 | line_time = min((u32)mode->crtc_htotal * pixel_period, (u32)65535); | 1095 | line_time = min((u32) (1000000UL * (u32)mode->crtc_htotal / (u32)mode->clock), (u32)65535); |
1109 | 1096 | ||
1110 | /* watermark for high clocks */ | 1097 | /* watermark for high clocks */ |
1111 | if (adev->pm.dpm_enabled) { | 1098 | if (adev->pm.dpm_enabled) { |
@@ -1120,7 +1107,7 @@ static void dce_v8_0_program_watermarks(struct amdgpu_device *adev, | |||
1120 | 1107 | ||
1121 | wm_high.disp_clk = mode->clock; | 1108 | wm_high.disp_clk = mode->clock; |
1122 | wm_high.src_width = mode->crtc_hdisplay; | 1109 | wm_high.src_width = mode->crtc_hdisplay; |
1123 | wm_high.active_time = mode->crtc_hdisplay * pixel_period; | 1110 | wm_high.active_time = active_time; |
1124 | wm_high.blank_time = line_time - wm_high.active_time; | 1111 | wm_high.blank_time = line_time - wm_high.active_time; |
1125 | wm_high.interlaced = false; | 1112 | wm_high.interlaced = false; |
1126 | if (mode->flags & DRM_MODE_FLAG_INTERLACE) | 1113 | if (mode->flags & DRM_MODE_FLAG_INTERLACE) |
@@ -1159,7 +1146,7 @@ static void dce_v8_0_program_watermarks(struct amdgpu_device *adev, | |||
1159 | 1146 | ||
1160 | wm_low.disp_clk = mode->clock; | 1147 | wm_low.disp_clk = mode->clock; |
1161 | wm_low.src_width = mode->crtc_hdisplay; | 1148 | wm_low.src_width = mode->crtc_hdisplay; |
1162 | wm_low.active_time = mode->crtc_hdisplay * pixel_period; | 1149 | wm_low.active_time = active_time; |
1163 | wm_low.blank_time = line_time - wm_low.active_time; | 1150 | wm_low.blank_time = line_time - wm_low.active_time; |
1164 | wm_low.interlaced = false; | 1151 | wm_low.interlaced = false; |
1165 | if (mode->flags & DRM_MODE_FLAG_INTERLACE) | 1152 | if (mode->flags & DRM_MODE_FLAG_INTERLACE) |