[Intel-gfx] [PATCH 5/5] drm/i915: Improve WRPLL reference clock readout on HSW/BDW
Maarten Lankhorst
maarten.lankhorst at linux.intel.com
Wed Jun 5 14:26:06 UTC 2019
Op 04-06-2019 om 22:09 schreef Ville Syrjala:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> On non-ULT HSW the "special" WRPLL reference clock select
> actually means non-SSC. Take that into account when reading
> out the WRPLL state.
>
> Also the non-SSC reference may be either 24MHz or 135MHz,
> which we can read out from FUSE_STRAP3. The BDW docs actually
> say: "also indicates whether the CPU and PCH are in a single
> package or separate packages", so it may be that this is not
> actually required and we could just assume 135 MHz (just like
> the code already did). But it doesn't really hurt to read this
> out as the HSW docs aren't quite so clear.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
> drivers/gpu/drm/i915/i915_reg.h | 3 +++
> drivers/gpu/drm/i915/intel_ddi.c | 15 ++++++++++++++-
> 2 files changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index b7dd42bfffaa..533b1d8d23cb 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -7513,6 +7513,9 @@ enum {
> #define ILK_DESKTOP (1 << 23)
> #define HSW_CPU_SSC_ENABLE (1 << 21)
>
> +#define FUSE_STRAP3 _MMIO(0x42020)
> +#define HSW_REF_CLK_SELECT (1 << 1)
> +
> #define ILK_DSPCLK_GATE_D _MMIO(0x42020)
> #define ILK_VRHUNIT_CLOCK_GATE_DISABLE (1 << 28)
> #define ILK_DPFCUNIT_CLOCK_GATE_DISABLE (1 << 9)
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index fc9bcbd75c3a..49dab3e72019 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -1231,6 +1231,19 @@ static int hsw_ddi_calc_wrpll_link(struct drm_i915_private *dev_priv,
> wrpll = I915_READ(reg);
> switch (wrpll & WRPLL_REF_MASK) {
> case WRPLL_REF_SPECIAL_HSW:
> + /*
> + * muxed-SSC for BDW.
> + * non-SSC for non-ULT HSW. Check FUSE_STRAP3
> + * for the non-SSC reference frequency.
> + */
> + if (IS_HASWELL(dev_priv) && !IS_HSW_ULT(dev_priv)) {
> + if (I915_READ(FUSE_STRAP3) & HSW_REF_CLK_SELECT)
> + refclk = 24;
> + else
> + refclk = 135;
> + break;
> + }
> + /* fall through */
> case WRPLL_REF_PCH_SSC:
> /*
> * We could calculate spread here, but our checking
> @@ -1243,7 +1256,7 @@ static int hsw_ddi_calc_wrpll_link(struct drm_i915_private *dev_priv,
> refclk = 2700;
> break;
> default:
> - WARN(1, "bad wrpll refclk\n");
> + MISSING_CASE(wrpll);
> return 0;
> }
>
Other patches look sane.
Reviewed-by: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
More information about the Intel-gfx
mailing list