aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_display.c
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2012-11-29 09:59:36 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2012-12-06 08:37:01 -0500
commite69d0bc1c67520c302e070ac078975ea9c786de8 (patch)
tree46b534c9332f59acd373c0c326b3278392c703eb /drivers/gpu/drm/i915/intel_display.c
parent2f0c2ad18b88691496e23d1ddbc2d0af8f6df5fa (diff)
drm/i915: extract common link_m_n helpers
Both the dp and fdi code use the exact same computations (ignore minor differences in conversion between bits and bytes). This makes it even more apparent that we have a _massive_ mess between cpu transcoder/fdi link/pch transcoder and pch link settings. And also that we have hilarious amounts of confusion between edp and dp (despite that they're identical at a link level). Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
-rw-r--r--drivers/gpu/drm/i915/intel_display.c31
1 files changed, 10 insertions, 21 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 953796c84fbd..34832bc04931 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -3951,16 +3951,8 @@ static int i830_get_display_clock_speed(struct drm_device *dev)
3951 return 133000; 3951 return 133000;
3952} 3952}
3953 3953
3954struct fdi_m_n {
3955 u32 tu;
3956 u32 gmch_m;
3957 u32 gmch_n;
3958 u32 link_m;
3959 u32 link_n;
3960};
3961
3962static void 3954static void
3963fdi_reduce_ratio(u32 *num, u32 *den) 3955intel_reduce_ratio(uint32_t *num, uint32_t *den)
3964{ 3956{
3965 while (*num > 0xffffff || *den > 0xffffff) { 3957 while (*num > 0xffffff || *den > 0xffffff) {
3966 *num >>= 1; 3958 *num >>= 1;
@@ -3968,20 +3960,18 @@ fdi_reduce_ratio(u32 *num, u32 *den)
3968 } 3960 }
3969} 3961}
3970 3962
3971static void 3963void
3972ironlake_compute_m_n(int bits_per_pixel, int nlanes, int pixel_clock, 3964intel_link_compute_m_n(int bits_per_pixel, int nlanes,
3973 int link_clock, struct fdi_m_n *m_n) 3965 int pixel_clock, int link_clock,
3966 struct intel_link_m_n *m_n)
3974{ 3967{
3975 m_n->tu = 64; /* default size */ 3968 m_n->tu = 64;
3976
3977 /* BUG_ON(pixel_clock > INT_MAX / 36); */
3978 m_n->gmch_m = bits_per_pixel * pixel_clock; 3969 m_n->gmch_m = bits_per_pixel * pixel_clock;
3979 m_n->gmch_n = link_clock * nlanes * 8; 3970 m_n->gmch_n = link_clock * nlanes * 8;
3980 fdi_reduce_ratio(&m_n->gmch_m, &m_n->gmch_n); 3971 intel_reduce_ratio(&m_n->gmch_m, &m_n->gmch_n);
3981
3982 m_n->link_m = pixel_clock; 3972 m_n->link_m = pixel_clock;
3983 m_n->link_n = link_clock; 3973 m_n->link_n = link_clock;
3984 fdi_reduce_ratio(&m_n->link_m, &m_n->link_n); 3974 intel_reduce_ratio(&m_n->link_m, &m_n->link_n);
3985} 3975}
3986 3976
3987static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv) 3977static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv)
@@ -5095,7 +5085,7 @@ static void ironlake_set_m_n(struct drm_crtc *crtc,
5095 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 5085 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
5096 enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder; 5086 enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder;
5097 struct intel_encoder *intel_encoder, *edp_encoder = NULL; 5087 struct intel_encoder *intel_encoder, *edp_encoder = NULL;
5098 struct fdi_m_n m_n = {0}; 5088 struct intel_link_m_n m_n = {0};
5099 int target_clock, pixel_multiplier, lane, link_bw; 5089 int target_clock, pixel_multiplier, lane, link_bw;
5100 bool is_dp = false, is_cpu_edp = false; 5090 bool is_dp = false, is_cpu_edp = false;
5101 5091
@@ -5153,8 +5143,7 @@ static void ironlake_set_m_n(struct drm_crtc *crtc,
5153 5143
5154 if (pixel_multiplier > 1) 5144 if (pixel_multiplier > 1)
5155 link_bw *= pixel_multiplier; 5145 link_bw *= pixel_multiplier;
5156 ironlake_compute_m_n(intel_crtc->bpp, lane, target_clock, link_bw, 5146 intel_link_compute_m_n(intel_crtc->bpp, lane, target_clock, link_bw, &m_n);
5157 &m_n);
5158 5147
5159 I915_WRITE(PIPE_DATA_M1(cpu_transcoder), TU_SIZE(m_n.tu) | m_n.gmch_m); 5148 I915_WRITE(PIPE_DATA_M1(cpu_transcoder), TU_SIZE(m_n.tu) | m_n.gmch_m);
5160 I915_WRITE(PIPE_DATA_N1(cpu_transcoder), m_n.gmch_n); 5149 I915_WRITE(PIPE_DATA_N1(cpu_transcoder), m_n.gmch_n);