aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_display.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
-rw-r--r--drivers/gpu/drm/i915/intel_display.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 292d69e52cc5..cc68e4179a5a 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -6624,6 +6624,34 @@ static int skylake_get_display_clock_speed(struct drm_device *dev)
6624 return 24000; 6624 return 24000;
6625} 6625}
6626 6626
6627static int broxton_get_display_clock_speed(struct drm_device *dev)
6628{
6629 struct drm_i915_private *dev_priv = to_i915(dev);
6630 uint32_t cdctl = I915_READ(CDCLK_CTL);
6631 uint32_t pll_ratio = I915_READ(BXT_DE_PLL_CTL) & BXT_DE_PLL_RATIO_MASK;
6632 uint32_t pll_enab = I915_READ(BXT_DE_PLL_ENABLE);
6633 int cdclk;
6634
6635 if (!(pll_enab & BXT_DE_PLL_PLL_ENABLE))
6636 return 19200;
6637
6638 cdclk = 19200 * pll_ratio / 2;
6639
6640 switch (cdctl & BXT_CDCLK_CD2X_DIV_SEL_MASK) {
6641 case BXT_CDCLK_CD2X_DIV_SEL_1:
6642 return cdclk; /* 576MHz or 624MHz */
6643 case BXT_CDCLK_CD2X_DIV_SEL_1_5:
6644 return cdclk * 2 / 3; /* 384MHz */
6645 case BXT_CDCLK_CD2X_DIV_SEL_2:
6646 return cdclk / 2; /* 288MHz */
6647 case BXT_CDCLK_CD2X_DIV_SEL_4:
6648 return cdclk / 4; /* 144MHz */
6649 }
6650
6651 /* error case, do as if DE PLL isn't enabled */
6652 return 19200;
6653}
6654
6627static int broadwell_get_display_clock_speed(struct drm_device *dev) 6655static int broadwell_get_display_clock_speed(struct drm_device *dev)
6628{ 6656{
6629 struct drm_i915_private *dev_priv = dev->dev_private; 6657 struct drm_i915_private *dev_priv = dev->dev_private;
@@ -14615,6 +14643,9 @@ static void intel_init_display(struct drm_device *dev)
14615 if (IS_SKYLAKE(dev)) 14643 if (IS_SKYLAKE(dev))
14616 dev_priv->display.get_display_clock_speed = 14644 dev_priv->display.get_display_clock_speed =
14617 skylake_get_display_clock_speed; 14645 skylake_get_display_clock_speed;
14646 else if (IS_BROXTON(dev))
14647 dev_priv->display.get_display_clock_speed =
14648 broxton_get_display_clock_speed;
14618 else if (IS_BROADWELL(dev)) 14649 else if (IS_BROADWELL(dev))
14619 dev_priv->display.get_display_clock_speed = 14650 dev_priv->display.get_display_clock_speed =
14620 broadwell_get_display_clock_speed; 14651 broadwell_get_display_clock_speed;