From: "Kahola, Mika" <mika.kahola@xxxxxxxxx> Display Voltage and Frequency Switching (DVFS) is used to adjust the display voltage to match the display clock frequencies. To save power the voltage is set to minimum when disabling PLL. The sequence before frequency change is the following and it requests the power controller to raise voltage to maximum - Ensure any previous GT Driver Mailbox transaction is complete. - Write GT Driver Mailbox Data Low = 0x3. - Write GT Driver Mailbox Data High = 0x0. - Write GT Driver Mailbox Interface = 0x80000007. - Poll GT Driver Mailbox Interface for Run/Busy indication cleared (bit 31 = 0). - Read GT Driver Mailbox Data Low, if bit 0 is 0x1, continue, else restart the sequence. Timeout after 3ms The sequence after frequency change is the following and it requests the port controller to lower voltage to the minimum. - Write GT Driver Mailbox Data Low = 0x0 - Write GT Driver Mailbox Data High = 0x0. - Write GT Driver Mailbox Interface = 0x80000007. v2: reuse Paulo's work on cdclk. This patch depends on Paulo's patch [PATCH 02/12] drm/i915/cnl: extract cnl_dvfs_{pre,post}_change v3: (By Rodrigo): Fix typo on Paulo's name. Cc: Paulo Zanoni <paulo.r.zanoni@xxxxxxxxx> Cc: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> Signed-off-by: Kahola, Mika <mika.kahola@xxxxxxxxx> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx> --- drivers/gpu/drm/i915/intel_dpll_mgr.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_dpll_mgr.c b/drivers/gpu/drm/i915/intel_dpll_mgr.c index 9927df6294da..cc288534dcc6 100644 --- a/drivers/gpu/drm/i915/intel_dpll_mgr.c +++ b/drivers/gpu/drm/i915/intel_dpll_mgr.c @@ -2085,6 +2085,7 @@ static void cnl_ddi_pll_disable(struct drm_i915_private *dev_priv, struct intel_shared_dpll *pll) { uint32_t val; + int ret; /* * 1. Configure DPCLKA_CFGCR0 to turn off the clock for the DDI. @@ -2094,11 +2095,9 @@ static void cnl_ddi_pll_disable(struct drm_i915_private *dev_priv, /* * 2. If the frequency will result in a change to the voltage * requirement, follow the Display Voltage Frequency Switching - * Sequence Before Frequency Change - * - * FIXME: (DVFS) is used to adjust the display voltage to match the - * display clock frequencies + * (DVFS) Sequence Before Frequency Change */ + ret = cnl_dvfs_pre_change(dev_priv); /* 3. Disable DPLL through DPLL_ENABLE. */ val = I915_READ(CNL_DPLL_ENABLE(pll->id)); @@ -2116,11 +2115,10 @@ static void cnl_ddi_pll_disable(struct drm_i915_private *dev_priv, /* * 5. If the frequency will result in a change to the voltage * requirement, follow the Display Voltage Frequency Switching - * Sequence After Frequency Change - * - * FIXME: (DVFS) is used to adjust the display voltage to match the - * display clock frequencies + * (DVFS) Sequence After Frequency Change */ + if (ret == 0) + cnl_dvfs_post_change(dev_priv, 0); /* 6. Disable DPLL power in DPLL_ENABLE. */ val = I915_READ(CNL_DPLL_ENABLE(pll->id)); -- 2.13.5 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx