aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2016-05-13 16:41:31 -0400
committerVille Syrjälä <ville.syrjala@linux.intel.com>2016-05-23 14:11:14 -0400
commit487ed2e4e9d62363ddd5fab2407100d3436fd0c9 (patch)
treed006640de37f8e0cb91493116cb8c0ce854a6e4a
parent70c2c184065e642642b563ae36ff3db682a5eee0 (diff)
drm/i915: Make 308 and 671 MHz cdclks more accurate on SKL
The SKL 308.57 MHz cdclk is probably 8640/28 = ~308.571 Mhz. Similartly the 617.14 MHz cdclk is probably 8640/14 = ~617.143 MHz. Let's use the slightly more accurate numbers. Potentially we might change to computing all of these based on dividers, but let's stick to the current theme for now.. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1463172100-24715-13-git-send-email-ville.syrjala@linux.intel.com Reviewed-by: Imre Deak <imre.deak@intel.com>
-rw-r--r--drivers/gpu/drm/i915/intel_display.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 6b2b965c254d..5c23521c0886 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -5204,13 +5204,13 @@ static void intel_update_max_cdclk(struct drm_device *dev)
5204 * if the preferred vco is 8100 instead. 5204 * if the preferred vco is 8100 instead.
5205 */ 5205 */
5206 if (limit == SKL_DFSM_CDCLK_LIMIT_675) 5206 if (limit == SKL_DFSM_CDCLK_LIMIT_675)
5207 max_cdclk = 617140; 5207 max_cdclk = 617143;
5208 else if (limit == SKL_DFSM_CDCLK_LIMIT_540) 5208 else if (limit == SKL_DFSM_CDCLK_LIMIT_540)
5209 max_cdclk = 540000; 5209 max_cdclk = 540000;
5210 else if (limit == SKL_DFSM_CDCLK_LIMIT_450) 5210 else if (limit == SKL_DFSM_CDCLK_LIMIT_450)
5211 max_cdclk = 432000; 5211 max_cdclk = 432000;
5212 else 5212 else
5213 max_cdclk = 308570; 5213 max_cdclk = 308571;
5214 5214
5215 dev_priv->max_cdclk_freq = skl_calc_cdclk(max_cdclk, vco); 5215 dev_priv->max_cdclk_freq = skl_calc_cdclk(max_cdclk, vco);
5216 } else if (IS_BROXTON(dev)) { 5216 } else if (IS_BROXTON(dev)) {
@@ -5438,13 +5438,13 @@ static int skl_calc_cdclk(int max_pixclk, int vco)
5438{ 5438{
5439 if (vco == 8640) { 5439 if (vco == 8640) {
5440 if (max_pixclk > 540000) 5440 if (max_pixclk > 540000)
5441 return 617140; 5441 return 617143;
5442 else if (max_pixclk > 432000) 5442 else if (max_pixclk > 432000)
5443 return 540000; 5443 return 540000;
5444 else if (max_pixclk > 308570) 5444 else if (max_pixclk > 308571)
5445 return 432000; 5445 return 432000;
5446 else 5446 else
5447 return 308570; 5447 return 308571;
5448 } else { 5448 } else {
5449 /* VCO 8100 */ 5449 /* VCO 8100 */
5450 if (max_pixclk > 540000) 5450 if (max_pixclk > 540000)
@@ -5616,13 +5616,13 @@ static void skl_set_cdclk(struct drm_i915_private *dev_priv, int cdclk, int vco)
5616 freq_select = CDCLK_FREQ_540; 5616 freq_select = CDCLK_FREQ_540;
5617 pcu_ack = 2; 5617 pcu_ack = 2;
5618 break; 5618 break;
5619 case 308570: 5619 case 308571:
5620 case 337500: 5620 case 337500:
5621 default: 5621 default:
5622 freq_select = CDCLK_FREQ_337_308; 5622 freq_select = CDCLK_FREQ_337_308;
5623 pcu_ack = 0; 5623 pcu_ack = 0;
5624 break; 5624 break;
5625 case 617140: 5625 case 617143:
5626 case 675000: 5626 case 675000:
5627 freq_select = CDCLK_FREQ_675_617; 5627 freq_select = CDCLK_FREQ_675_617;
5628 pcu_ack = 3; 5628 pcu_ack = 3;
@@ -6582,11 +6582,11 @@ static int skylake_get_display_clock_speed(struct drm_device *dev)
6582 case CDCLK_FREQ_450_432: 6582 case CDCLK_FREQ_450_432:
6583 return 432000; 6583 return 432000;
6584 case CDCLK_FREQ_337_308: 6584 case CDCLK_FREQ_337_308:
6585 return 308570; 6585 return 308571;
6586 case CDCLK_FREQ_540: 6586 case CDCLK_FREQ_540:
6587 return 540000; 6587 return 540000;
6588 case CDCLK_FREQ_675_617: 6588 case CDCLK_FREQ_675_617:
6589 return 617140; 6589 return 617143;
6590 default: 6590 default:
6591 MISSING_CASE(cdctl & CDCLK_FREQ_SEL_MASK); 6591 MISSING_CASE(cdctl & CDCLK_FREQ_SEL_MASK);
6592 } 6592 }