From: Imre Deak <imre.deak@intel.com>
To: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>
Subject: Re: [PATCH 27/31] drm/i915: move i9xx dpll enabling into crtc enable function
Date: Fri, 14 Jun 2013 19:02:17 +0300 [thread overview]
Message-ID: <1371225737.6507.2.camel@ideak-mobl> (raw)
In-Reply-To: <1370432073-27634-28-git-send-email-daniel.vetter@ffwll.ch>
On Wed, 2013-06-05 at 13:34 +0200, Daniel Vetter wrote:
> Now that we have the proper pipe config to track this, we don't need
> to write any registers any more.
>
> v2: Drop a few now unnecessary local variables and switch the enable
> function to take a struct intel_crtc * to simply arguments.
>
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> ---
> drivers/gpu/drm/i915/intel_display.c | 102 +++++++++++++----------------------
> 1 file changed, 37 insertions(+), 65 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index b9be047..b6f5e48 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -1298,32 +1298,48 @@ static void vlv_enable_pll(struct drm_i915_private *dev_priv, enum pipe pipe)
> udelay(150); /* wait for warmup */
> }
>
> -static void i9xx_enable_pll(struct drm_i915_private *dev_priv, enum pipe pipe)
> +static void i9xx_enable_pll(struct intel_crtc *crtc)
> {
> - int reg;
> - u32 val;
> + struct drm_device *dev = crtc->base.dev;
> + struct drm_i915_private *dev_priv = dev->dev_private;
> + int reg = DPLL(crtc->pipe);
> + u32 dpll = crtc->config.dpll_hw_state.dpll;
>
> - assert_pipe_disabled(dev_priv, pipe);
> + assert_pipe_disabled(dev_priv, crtc->pipe);
>
> /* No really, not for ILK+ */
> - BUG_ON(!IS_VALLEYVIEW(dev_priv->dev) && dev_priv->info->gen >= 5);
> + BUG_ON(!IS_VALLEYVIEW(dev) && dev_priv->info->gen >= 5);
>
> /* PLL is protected by panel, make sure we can write it */
> - if (IS_MOBILE(dev_priv->dev) && !IS_I830(dev_priv->dev))
> - assert_panel_unlocked(dev_priv, pipe);
> + if (IS_MOBILE(dev) && !IS_I830(dev))
> + assert_panel_unlocked(dev_priv, crtc->pipe);
>
> - reg = DPLL(pipe);
> - val = I915_READ(reg);
> - val |= DPLL_VCO_ENABLE;
> + I915_WRITE(reg, dpll);
> +
> + /* Wait for the clocks to stabilize. */
> + POSTING_READ(reg);
> + udelay(150);
> +
> + if (INTEL_INFO(dev)->gen >= 4) {
> + I915_WRITE(DPLL_MD(crtc->pipe),
> + crtc->config.dpll_hw_state.dpll_md);
> + } else {
> + /* The pixel multiplier can only be updated once the
> + * DPLL is enabled and the clocks are stable.
> + *
> + * So write it again.
> + */
> + I915_WRITE(reg, dpll);
It's ok but isn't really needed any more as now we write dpll right
after this with the same value.
> + }
>
> /* We do this three times for luck */
> - I915_WRITE(reg, val);
> + I915_WRITE(reg, dpll);
> POSTING_READ(reg);
> udelay(150); /* wait for warmup */
> - I915_WRITE(reg, val);
> + I915_WRITE(reg, dpll);
> POSTING_READ(reg);
> udelay(150); /* wait for warmup */
> - I915_WRITE(reg, val);
> + I915_WRITE(reg, dpll);
> POSTING_READ(reg);
> udelay(150); /* wait for warmup */
> }
> @@ -3591,7 +3607,11 @@ static void i9xx_crtc_enable(struct drm_crtc *crtc)
> intel_crtc->active = true;
> intel_update_watermarks(dev);
>
> - i9xx_enable_pll(dev_priv, pipe);
> + for_each_encoder_on_crtc(dev, crtc, encoder)
> + if (encoder->pre_pll_enable)
> + encoder->pre_pll_enable(encoder);
> +
> + i9xx_enable_pll(intel_crtc);
>
> for_each_encoder_on_crtc(dev, crtc, encoder)
> if (encoder->pre_enable)
> @@ -4429,8 +4449,6 @@ static void i9xx_update_pll(struct intel_crtc *crtc,
> {
> struct drm_device *dev = crtc->base.dev;
> struct drm_i915_private *dev_priv = dev->dev_private;
> - struct intel_encoder *encoder;
> - int pipe = crtc->pipe;
> u32 dpll;
> bool is_sdvo;
> struct dpll *clock = &crtc->config.dpll;
> @@ -4494,37 +4512,14 @@ static void i9xx_update_pll(struct intel_crtc *crtc,
> dpll |= DPLL_VCO_ENABLE;
> crtc->config.dpll_hw_state.dpll = dpll;
>
> - I915_WRITE(DPLL(pipe), dpll & ~DPLL_VCO_ENABLE);
> - POSTING_READ(DPLL(pipe));
> - udelay(150);
> -
> - for_each_encoder_on_crtc(dev, &crtc->base, encoder)
> - if (encoder->pre_pll_enable)
> - encoder->pre_pll_enable(encoder);
> -
> - if (crtc->config.has_dp_encoder)
> - intel_dp_set_m_n(crtc);
> -
> - I915_WRITE(DPLL(pipe), dpll);
> -
> - /* Wait for the clocks to stabilize. */
> - POSTING_READ(DPLL(pipe));
> - udelay(150);
> -
> if (INTEL_INFO(dev)->gen >= 4) {
> u32 dpll_md = (crtc->config.pixel_multiplier - 1)
> << DPLL_MD_UDI_MULTIPLIER_SHIFT;
> crtc->config.dpll_hw_state.dpll_md = dpll_md;
> -
> - I915_WRITE(DPLL_MD(pipe), dpll_md);
> - } else {
> - /* The pixel multiplier can only be updated once the
> - * DPLL is enabled and the clocks are stable.
> - *
> - * So write it again.
> - */
> - I915_WRITE(DPLL(pipe), dpll);
> }
> +
> + if (crtc->config.has_dp_encoder)
> + intel_dp_set_m_n(crtc);
> }
>
> static void i8xx_update_pll(struct intel_crtc *crtc,
> @@ -4533,8 +4528,6 @@ static void i8xx_update_pll(struct intel_crtc *crtc,
> {
> struct drm_device *dev = crtc->base.dev;
> struct drm_i915_private *dev_priv = dev->dev_private;
> - struct intel_encoder *encoder;
> - int pipe = crtc->pipe;
> u32 dpll;
> struct dpll *clock = &crtc->config.dpll;
>
> @@ -4561,27 +4554,6 @@ static void i8xx_update_pll(struct intel_crtc *crtc,
>
> dpll |= DPLL_VCO_ENABLE;
> crtc->config.dpll_hw_state.dpll = dpll;
> -
> - I915_WRITE(DPLL(pipe), dpll & ~DPLL_VCO_ENABLE);
> - POSTING_READ(DPLL(pipe));
> - udelay(150);
> -
> - for_each_encoder_on_crtc(dev, &crtc->base, encoder)
> - if (encoder->pre_pll_enable)
> - encoder->pre_pll_enable(encoder);
> -
> - I915_WRITE(DPLL(pipe), dpll);
> -
> - /* Wait for the clocks to stabilize. */
> - POSTING_READ(DPLL(pipe));
> - udelay(150);
> -
> - /* The pixel multiplier can only be updated once the
> - * DPLL is enabled and the clocks are stable.
> - *
> - * So write it again.
> - */
> - I915_WRITE(DPLL(pipe), dpll);
> }
>
> static void intel_set_pipe_timings(struct intel_crtc *intel_crtc)
next prev parent reply other threads:[~2013-06-14 16:02 UTC|newest]
Thread overview: 84+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-05 11:34 [PATCH 00/31] shared pch display pll rework Daniel Vetter
2013-06-05 11:34 ` [PATCH 01/31] drm/i915: fix up pch pll handling in ->mode_set Daniel Vetter
2013-06-05 11:34 ` [PATCH 02/31] drm/i915: conditionally disable pch resources in ilk_crtc_disable Daniel Vetter
2013-06-05 11:34 ` [PATCH 03/31] drm/i915: lock down pch pll accouting some more Daniel Vetter
2013-06-07 16:32 ` Ville Syrjälä
2013-06-07 20:03 ` Daniel Vetter
2013-06-07 20:46 ` Ville Syrjälä
2013-06-07 21:13 ` Daniel Vetter
2013-06-10 10:11 ` Ville Syrjälä
2013-06-10 14:34 ` Daniel Vetter
2013-06-10 14:47 ` Ville Syrjälä
2013-06-10 15:28 ` [PATCH] " Daniel Vetter
2013-06-07 21:09 ` Daniel Vetter
2013-06-05 11:34 ` [PATCH 04/31] drm/i915: s/pch_pll/shared_dpll/ Daniel Vetter
2013-06-05 11:34 ` [PATCH 05/31] drm/i915: switch crtc->shared_dpll from a pointer to an enum Daniel Vetter
2013-06-07 16:48 ` Ville Syrjälä
2013-06-07 21:10 ` [PATCH] " Daniel Vetter
2013-06-05 11:34 ` [PATCH 06/31] drm/i915: move shared_dpll into the pipe config Daniel Vetter
2013-06-07 17:03 ` Ville Syrjälä
2013-06-07 21:10 ` [PATCH] " Daniel Vetter
2013-06-05 11:34 ` [PATCH 07/31] drm/i915: refactor PCH_DPLL_SEL #defines Daniel Vetter
2013-06-05 11:34 ` [PATCH 08/31] drm/i915: hw state readout for shared pch plls Daniel Vetter
2013-06-07 17:23 ` Ville Syrjälä
2013-06-07 20:11 ` Daniel Vetter
2013-06-07 21:11 ` [PATCH] " Daniel Vetter
2013-06-05 11:34 ` [PATCH 09/31] drm/i915: consolidate ->num_shared_dplls assignement Daniel Vetter
2013-06-05 11:34 ` [PATCH 10/31] drm/i915: metadata for shared dplls Daniel Vetter
2013-06-05 11:34 ` [PATCH 11/31] drm/i915: scrap register address storage Daniel Vetter
2013-06-05 11:34 ` [PATCH 12/31] drm/i915: enable/disable hooks for shared dplls Daniel Vetter
2013-06-05 11:34 ` [PATCH 13/31] drm/i915: drop crtc checking from assert_shared_dpll Daniel Vetter
2013-06-05 11:34 ` [PATCH 14/31] drm/i915: display pll hw state readout and checking Daniel Vetter
2013-06-12 13:31 ` Damien Lespiau
2013-06-12 13:39 ` Ville Syrjälä
2013-06-12 13:49 ` Damien Lespiau
2013-06-05 11:34 ` [PATCH 15/31] drm/i915: extract readout_hw_state from setup_hw_state Daniel Vetter
2013-06-12 13:32 ` Damien Lespiau
2013-06-12 14:26 ` Daniel Vetter
2013-06-05 11:34 ` [PATCH 16/31] drm/i915: split up intel_modeset_check_state Daniel Vetter
2013-06-12 13:33 ` Damien Lespiau
2013-06-05 11:34 ` [PATCH 17/31] drm/i915: WARN on lack of shared dpll Daniel Vetter
2013-06-12 13:38 ` Damien Lespiau
2013-06-05 11:34 ` [PATCH 18/31] drm/i915: hw state readout and cross-checking for shared dplls Daniel Vetter
2013-06-12 15:04 ` Damien Lespiau
2013-06-05 11:34 ` [PATCH 19/31] drm/i915: fix up pch pll enabling for pixel multipliers Daniel Vetter
2013-06-12 15:12 ` Damien Lespiau
2013-06-12 19:34 ` Daniel Vetter
2013-06-05 11:34 ` [PATCH 20/31] drm/i915: simplify the reduced clock handling for pch plls Daniel Vetter
2013-06-13 11:26 ` Damien Lespiau
2013-06-13 11:35 ` Daniel Vetter
2013-06-13 12:32 ` Damien Lespiau
2013-06-13 14:33 ` Daniel Vetter
2013-06-05 11:34 ` [PATCH 21/31] drm/i915: consolidate pch pll enable sequence Daniel Vetter
2013-06-24 14:30 ` Damien Lespiau
2013-06-05 11:34 ` [PATCH 22/31] drm/i915: use sw tracked state to select shared dplls Daniel Vetter
2013-06-12 15:20 ` Damien Lespiau
2013-06-05 11:34 ` [PATCH 23/31] drm/i915: duplicate intel_enable_pll into i9xx and vlv versions Daniel Vetter
2013-06-05 15:12 ` Jani Nikula
2013-06-05 22:52 ` [PATCH] " Daniel Vetter
2013-06-05 11:34 ` [PATCH 24/31] drm/i915: asserts for lvds pre_enable Daniel Vetter
2013-06-13 20:26 ` Imre Deak
2013-06-13 20:46 ` Daniel Vetter
2013-06-14 10:45 ` Imre Deak
2013-06-16 19:42 ` [PATCH] " Daniel Vetter
2013-06-05 11:34 ` [PATCH 25/31] drm/i915: move encoder pre enable hooks togther on ilk+ Daniel Vetter
2013-06-05 11:34 ` [PATCH 26/31] drm/i915: hw state readout for i9xx dplls Daniel Vetter
2013-06-05 11:34 ` [PATCH 27/31] drm/i915: move i9xx dpll enabling into crtc enable function Daniel Vetter
2013-06-05 15:13 ` Jani Nikula
2013-06-06 8:20 ` [PATCH] " Daniel Vetter
2013-06-14 16:02 ` Imre Deak [this message]
2013-06-16 19:15 ` [PATCH 27/31] " Daniel Vetter
2013-06-16 19:24 ` [PATCH] " Daniel Vetter
2013-06-05 11:34 ` [PATCH 28/31] drm/i915: s/pre_pll/pre/ on the lvds port " Daniel Vetter
2013-06-15 8:32 ` Imre Deak
2013-06-26 10:02 ` Daniel Vetter
2013-06-05 11:34 ` [PATCH 29/31] drm/i915: clean up vlv ->pre_pll_enable and pll enable sequence Daniel Vetter
2013-06-06 8:22 ` [PATCH] " Daniel Vetter
2013-07-11 14:11 ` Imre Deak
2013-07-11 20:13 ` Daniel Vetter
2013-07-12 16:27 ` Daniel Vetter
2013-06-05 11:34 ` [PATCH 30/31] drm/i915: Fix up cpt pixel multiplier " Daniel Vetter
2013-06-05 11:34 ` [PATCH 31/31] drm/i915: clear DPLL reg when disabling i9xx dplls Daniel Vetter
2013-06-07 17:46 ` [PATCH 00/31] shared pch display pll rework Ville Syrjälä
2013-06-10 15:57 ` Ville Syrjälä
2013-06-10 18:16 ` Daniel Vetter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1371225737.6507.2.camel@ideak-mobl \
--to=imre.deak@intel.com \
--cc=daniel.vetter@ffwll.ch \
--cc=intel-gfx@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).