diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 31 |
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 | ||
6627 | static 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 | |||
6627 | static int broadwell_get_display_clock_speed(struct drm_device *dev) | 6655 | static 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; |