drm/i915/bxt: Use smaller 8/3X MIPI clock divider value for dual link.
diff mbox

Message ID 1479507116-13224-1-git-send-email-bob.j.paauwe@intel.com
State New
Headers show

Commit Message

Bob Paauwe Nov. 18, 2016, 10:11 p.m. UTC
For a single link (channel) DSI panel we want to use a larger divider
and keep the clock rate down to save power when in DPI/video mode. However
when using a dual-link DSI panel this may reduce the clock below what's
needed to get a stable display.

Use the smaller divider (faster clock) for either DBI/command mode or
when using dual link.

Signed-off-by: Bob Paauwe <bob.j.paauwe@intel.com>
---
 drivers/gpu/drm/i915/intel_dsi_pll.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

Comments

David Weinehall Nov. 19, 2016, 10:20 a.m. UTC | #1
On Fri, Nov 18, 2016 at 02:11:56PM -0800, Bob Paauwe wrote:
> For a single link (channel) DSI panel we want to use a larger divider
> and keep the clock rate down to save power when in DPI/video mode. However
> when using a dual-link DSI panel this may reduce the clock below what's
> needed to get a stable display.
> 
> Use the smaller divider (faster clock) for either DBI/command mode or
> when using dual link.
> 
> Signed-off-by: Bob Paauwe <bob.j.paauwe@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_dsi_pll.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_dsi_pll.c b/drivers/gpu/drm/i915/intel_dsi_pll.c
> index 56eff60..9edc57e 100644
> --- a/drivers/gpu/drm/i915/intel_dsi_pll.c
> +++ b/drivers/gpu/drm/i915/intel_dsi_pll.c
> @@ -414,8 +414,13 @@ static void bxt_dsi_program_clocks(struct drm_device *dev, enum port port,
>  	rx_div_lower = rx_div & RX_DIVIDER_BIT_1_2;
>  	rx_div_upper = (rx_div & RX_DIVIDER_BIT_3_4) >> 2;
>  
> -	/* As per bpsec program the 8/3X clock divider to the below value */
> -	if (dev_priv->vbt.dsi.config->is_cmd_mode)
> +	/*
> +	 * Set the 8/3X clock to divide by 3 for DBI mode as it needs a

Shouldn't this be "divide by 2", to be consistent with the code
and the commit message?

> +	 * faster clock than DPI mode. However, dual link panels also
> +	 * need the faster clock, even when in DPI mode.
> +	 */
> +	if (dev_priv->vbt.dsi.config->is_cmd_mode ||
> +	    dev_priv->vbt.dsi.config->dual_link)
>  		mipi_8by3_divider = 0x2;
>  	else
>  		mipi_8by3_divider = 0x3;


Kind regards, David Weinehall
Bob Paauwe Nov. 21, 2016, 6:06 p.m. UTC | #2
On Sat, 19 Nov 2016 11:20:56 +0100
David Weinehall <tao@kernel.org> wrote:

> On Fri, Nov 18, 2016 at 02:11:56PM -0800, Bob Paauwe wrote:
> > For a single link (channel) DSI panel we want to use a larger divider
> > and keep the clock rate down to save power when in DPI/video mode. However
> > when using a dual-link DSI panel this may reduce the clock below what's
> > needed to get a stable display.
> > 
> > Use the smaller divider (faster clock) for either DBI/command mode or
> > when using dual link.
> > 
> > Signed-off-by: Bob Paauwe <bob.j.paauwe@intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_dsi_pll.c | 9 +++++++--
> >  1 file changed, 7 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_dsi_pll.c b/drivers/gpu/drm/i915/intel_dsi_pll.c
> > index 56eff60..9edc57e 100644
> > --- a/drivers/gpu/drm/i915/intel_dsi_pll.c
> > +++ b/drivers/gpu/drm/i915/intel_dsi_pll.c
> > @@ -414,8 +414,13 @@ static void bxt_dsi_program_clocks(struct drm_device *dev, enum port port,
> >  	rx_div_lower = rx_div & RX_DIVIDER_BIT_1_2;
> >  	rx_div_upper = (rx_div & RX_DIVIDER_BIT_3_4) >> 2;
> >  
> > -	/* As per bpsec program the 8/3X clock divider to the below value */
> > -	if (dev_priv->vbt.dsi.config->is_cmd_mode)
> > +	/*
> > +	 * Set the 8/3X clock to divide by 3 for DBI mode as it needs a  
> 
> Shouldn't this be "divide by 2", to be consistent with the code
> and the commit message?

The value programmed into the bits isn't the same as the what the value
represents.  In this case we program the bits to 10b to use the by 3
divider and 11b to use the by 4 divider. 

It can also be programmed with 01b for a by 2 divider but that's not
used.

The 0x2 and 0x3 would probably be better represented by defines to
make that clear, but I'd think would be a separate patch.

> 
> > +	 * faster clock than DPI mode. However, dual link panels also
> > +	 * need the faster clock, even when in DPI mode.
> > +	 */
> > +	if (dev_priv->vbt.dsi.config->is_cmd_mode ||
> > +	    dev_priv->vbt.dsi.config->dual_link)
> >  		mipi_8by3_divider = 0x2;
> >  	else
> >  		mipi_8by3_divider = 0x3;  
> 
> 
> Kind regards, David Weinehall

Patch
diff mbox

diff --git a/drivers/gpu/drm/i915/intel_dsi_pll.c b/drivers/gpu/drm/i915/intel_dsi_pll.c
index 56eff60..9edc57e 100644
--- a/drivers/gpu/drm/i915/intel_dsi_pll.c
+++ b/drivers/gpu/drm/i915/intel_dsi_pll.c
@@ -414,8 +414,13 @@  static void bxt_dsi_program_clocks(struct drm_device *dev, enum port port,
 	rx_div_lower = rx_div & RX_DIVIDER_BIT_1_2;
 	rx_div_upper = (rx_div & RX_DIVIDER_BIT_3_4) >> 2;
 
-	/* As per bpsec program the 8/3X clock divider to the below value */
-	if (dev_priv->vbt.dsi.config->is_cmd_mode)
+	/*
+	 * Set the 8/3X clock to divide by 3 for DBI mode as it needs a
+	 * faster clock than DPI mode. However, dual link panels also
+	 * need the faster clock, even when in DPI mode.
+	 */
+	if (dev_priv->vbt.dsi.config->is_cmd_mode ||
+	    dev_priv->vbt.dsi.config->dual_link)
 		mipi_8by3_divider = 0x2;
 	else
 		mipi_8by3_divider = 0x3;