All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ben Widawsky <ben@bwidawsk.net>
To: Ben Widawsky <benjamin.widawsky@intel.com>
Cc: Intel GFX <intel-gfx@lists.freedesktop.org>,
	Paulo Zanoni <paulo.r.zanoni@intel.com>
Subject: Re: [PATCH 45/62] drm/i915/bdw: add support for BDW DP voltage swings and pre-emphasis
Date: Mon, 4 Nov 2013 16:45:11 -0800	[thread overview]
Message-ID: <20131105004510.GC9345@bwidawsk.net> (raw)
In-Reply-To: <1383451680-11173-46-git-send-email-benjamin.widawsky@intel.com>

On Sat, Nov 02, 2013 at 09:07:43PM -0700, Ben Widawsky wrote:
> From: Paulo Zanoni <paulo.r.zanoni@intel.com>
> 
> They're not the same as the Haswell ones.
> 
> Reviewed-by: Art Runyan <arthur.j.runyan@intel.com>
> Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_reg.h | 11 +++++++++
>  drivers/gpu/drm/i915/intel_dp.c | 55 ++++++++++++++++++++++++++++++++++++++---
>  2 files changed, 63 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index 4131223..6f834b3 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -5176,6 +5176,7 @@
>  #define DDI_BUF_CTL_B				0x64100
>  #define DDI_BUF_CTL(port) _PORT(port, DDI_BUF_CTL_A, DDI_BUF_CTL_B)
>  #define  DDI_BUF_CTL_ENABLE			(1<<31)
> +/* Haswell */
>  #define  DDI_BUF_EMP_400MV_0DB_HSW		(0<<24)   /* Sel0 */
>  #define  DDI_BUF_EMP_400MV_3_5DB_HSW		(1<<24)   /* Sel1 */
>  #define  DDI_BUF_EMP_400MV_6DB_HSW		(2<<24)   /* Sel2 */
> @@ -5185,6 +5186,16 @@
>  #define  DDI_BUF_EMP_600MV_6DB_HSW		(6<<24)   /* Sel6 */
>  #define  DDI_BUF_EMP_800MV_0DB_HSW		(7<<24)   /* Sel7 */
>  #define  DDI_BUF_EMP_800MV_3_5DB_HSW		(8<<24)   /* Sel8 */
> +/* Broadwell */
> +#define  DDI_BUF_EMP_400MV_0DB_BDW		(0<<24)   /* Sel0 */
> +#define  DDI_BUF_EMP_400MV_3_5DB_BDW		(1<<24)   /* Sel1 */
> +#define  DDI_BUF_EMP_400MV_6DB_BDW		(2<<24)   /* Sel2 */
> +#define  DDI_BUF_EMP_600MV_0DB_BDW		(3<<24)   /* Sel3 */
> +#define  DDI_BUF_EMP_600MV_3_5DB_BDW		(4<<24)   /* Sel4 */
> +#define  DDI_BUF_EMP_600MV_6DB_BDW		(5<<24)   /* Sel5 */

Maybe I am misreading this, isn't this:
600mV, 4.5dB?

> +#define  DDI_BUF_EMP_800MV_0DB_BDW		(6<<24)   /* Sel6 */

850, .5

> +#define  DDI_BUF_EMP_800MV_3_5DB_BDW		(7<<24)   /* Sel7 */

750, 2.5

> +#define  DDI_BUF_EMP_1200MV_0DB_BDW		(8<<24)   /* Sel8 */

1000, 0

Sorry if I just misunderstood how you're getting these values.

>  #define  DDI_BUF_EMP_MASK			(0xf<<24)
>  #define  DDI_BUF_PORT_REVERSAL			(1<<16)
>  #define  DDI_BUF_IS_IDLE			(1<<7)
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index b3cc333..7725f81 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -1950,7 +1950,7 @@ intel_dp_voltage_max(struct intel_dp *intel_dp)
>  	struct drm_device *dev = intel_dp_to_dev(intel_dp);
>  	enum port port = dp_to_dig_port(intel_dp)->port;
>  
> -	if (IS_VALLEYVIEW(dev))
> +	if (IS_VALLEYVIEW(dev) || IS_BROADWELL(dev))
>  		return DP_TRAIN_VOLTAGE_SWING_1200;
>  	else if (IS_GEN7(dev) && port == PORT_A)
>  		return DP_TRAIN_VOLTAGE_SWING_800;
> @@ -1966,7 +1966,18 @@ intel_dp_pre_emphasis_max(struct intel_dp *intel_dp, uint8_t voltage_swing)
>  	struct drm_device *dev = intel_dp_to_dev(intel_dp);
>  	enum port port = dp_to_dig_port(intel_dp)->port;
>  
> -	if (HAS_DDI(dev)) {
> +	if (IS_BROADWELL(dev)) {
> +		switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {
> +		case DP_TRAIN_VOLTAGE_SWING_400:
> +		case DP_TRAIN_VOLTAGE_SWING_600:
> +			return DP_TRAIN_PRE_EMPHASIS_6;
> +		case DP_TRAIN_VOLTAGE_SWING_800:
> +			return DP_TRAIN_PRE_EMPHASIS_3_5;
> +		case DP_TRAIN_VOLTAGE_SWING_1200:
> +		default:
> +			return DP_TRAIN_PRE_EMPHASIS_0;
> +		}
> +	} else if (IS_HASWELL(dev)) {
>  		switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {
>  		case DP_TRAIN_VOLTAGE_SWING_400:
>  			return DP_TRAIN_PRE_EMPHASIS_9_5;
> @@ -2278,6 +2289,41 @@ intel_hsw_signal_levels(uint8_t train_set)
>  	}
>  }
>  
> +static uint32_t
> +intel_bdw_signal_levels(uint8_t train_set)
> +{
> +	int signal_levels = train_set & (DP_TRAIN_VOLTAGE_SWING_MASK |
> +					 DP_TRAIN_PRE_EMPHASIS_MASK);
> +	switch (signal_levels) {
> +	case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_0:
> +		return DDI_BUF_EMP_400MV_0DB_BDW;	/* Sel0 */
> +	case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_3_5:
> +		return DDI_BUF_EMP_400MV_3_5DB_BDW;	/* Sel1 */
> +	case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_6:
> +		return DDI_BUF_EMP_400MV_6DB_BDW;	/* Sel2 */
> +
> +	case DP_TRAIN_VOLTAGE_SWING_600 | DP_TRAIN_PRE_EMPHASIS_0:
> +		return DDI_BUF_EMP_600MV_0DB_BDW;	/* Sel3 */
> +	case DP_TRAIN_VOLTAGE_SWING_600 | DP_TRAIN_PRE_EMPHASIS_3_5:
> +		return DDI_BUF_EMP_600MV_3_5DB_BDW;	/* Sel4 */
> +	case DP_TRAIN_VOLTAGE_SWING_600 | DP_TRAIN_PRE_EMPHASIS_6:
> +		return DDI_BUF_EMP_600MV_6DB_BDW;	/* Sel5 */
> +
> +	case DP_TRAIN_VOLTAGE_SWING_800 | DP_TRAIN_PRE_EMPHASIS_0:
> +		return DDI_BUF_EMP_800MV_0DB_BDW;	/* Sel6 */
> +	case DP_TRAIN_VOLTAGE_SWING_800 | DP_TRAIN_PRE_EMPHASIS_3_5:
> +		return DDI_BUF_EMP_800MV_3_5DB_BDW;	/* Sel7 */
> +
> +	case DP_TRAIN_VOLTAGE_SWING_1200 | DP_TRAIN_PRE_EMPHASIS_0:
> +		return DDI_BUF_EMP_1200MV_0DB_BDW;	/* Sel8 */
> +
> +	default:
> +		DRM_DEBUG_KMS("Unsupported voltage swing/pre-emphasis level:"
> +			      "0x%x\n", signal_levels);
> +		return DDI_BUF_EMP_400MV_0DB_BDW;	/* Sel0 */
> +	}
> +}
> +
>  /* Properly updates "DP" with the correct signal levels. */
>  static void
>  intel_dp_set_signal_levels(struct intel_dp *intel_dp, uint32_t *DP)
> @@ -2288,7 +2334,10 @@ intel_dp_set_signal_levels(struct intel_dp *intel_dp, uint32_t *DP)
>  	uint32_t signal_levels, mask;
>  	uint8_t train_set = intel_dp->train_set[0];
>  
> -	if (HAS_DDI(dev)) {
> +	if (IS_BROADWELL(dev)) {
> +		signal_levels = intel_bdw_signal_levels(train_set);
> +		mask = DDI_BUF_EMP_MASK;
> +	} else if (IS_HASWELL(dev)) {
>  		signal_levels = intel_hsw_signal_levels(train_set);
>  		mask = DDI_BUF_EMP_MASK;
>  	} else if (IS_VALLEYVIEW(dev)) {

Forgive my ignorance, but I really have no idea how to review this
patch. Daniel, I think we have to settle for Art's r-b on this one, or
finds someone who understands why this programming is the way it is. (Or
wait)

-- 
Ben Widawsky, Intel Open Source Technology Center

  reply	other threads:[~2013-11-05  0:45 UTC|newest]

Thread overview: 145+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-03  4:06 [PATCH 00/62] Broadwell kernel driver support Ben Widawsky
2013-11-03  4:06 ` [PATCH 01/62] drm/i915/bdw: IS_GEN8 definition Ben Widawsky
2013-11-03  4:07 ` [PATCH 02/62] drm/i915/bdw: Handle forcewake for writes on gen8 Ben Widawsky
2013-11-04 14:19   ` Chris Wilson
2013-11-05  9:24   ` Mika Kuoppala
2013-11-03  4:07 ` [PATCH 03/62] drm/i915/bdw: Disable PPGTT for now Ben Widawsky
2013-11-04 14:44   ` Chris Wilson
2013-11-03  4:07 ` [PATCH 04/62] drm/i915/bdw: Add device IDs Ben Widawsky
2013-11-03 21:58   ` Chris Wilson
2013-11-04  0:36     ` [PATCH 04/62] [v6] " Ben Widawsky
2013-11-04 14:49       ` Chris Wilson
2013-11-04 15:49         ` Daniel Vetter
2013-11-04 16:04           ` Chris Wilson
2013-11-04 16:56         ` Ben Widawsky
2013-11-04  0:43     ` [PATCH 04/62] " Ben Widawsky
2013-11-04  0:47     ` [PATCH 04/62] [v7] " Ben Widawsky
2013-11-05 14:45       ` Mika Kuoppala
2013-11-03  4:07 ` [PATCH 05/62] drm/i915/bdw: Fences on gen8 look just like gen7 Ben Widawsky
2013-11-03  4:07 ` [PATCH 06/62] drm/i915/bdw: Swizzling support Ben Widawsky
2013-11-05  9:59   ` Mika Kuoppala
2013-11-03  4:07 ` [PATCH 07/62] drm/i915/bdw: HW context support Ben Widawsky
2013-11-03  4:07 ` [PATCH 08/62] drm/i915/bdw: Clock gating init Ben Widawsky
2013-11-03  4:07 ` [PATCH 09/62] drm/i915/bdw: display stuff Ben Widawsky
2013-11-06  8:13   ` Daniel Vetter
2013-11-03  4:07 ` [PATCH 10/62] drm/i915/bdw: support GMS and GGMS changes Ben Widawsky
2013-11-04  0:53   ` [PATCH 10/62] [v5] " Ben Widawsky
2013-11-03  4:07 ` [PATCH 11/62] drm/i915/bdw: Implement interrupt changes Ben Widawsky
2013-11-06  8:39   ` Daniel Vetter
2013-11-03  4:07 ` [PATCH 12/62] drm/i915/bdw: Add interrupt info to debugfs Ben Widawsky
2013-11-03  4:07 ` [PATCH 13/62] drm/i915/bdw: Support 64b relocations Ben Widawsky
2013-11-03  4:07 ` [PATCH 14/62] drm/i915/bdw: dispatch updates (64b related) Ben Widawsky
2013-11-05 15:50   ` Paulo Zanoni
2013-11-03  4:07 ` [PATCH 15/62] drm/i915/bdw: Update MI_FLUSH_DW Ben Widawsky
2013-11-03  4:07 ` [PATCH 16/62] drm/i915/bdw: debugfs updates Ben Widawsky
2013-11-04 14:28   ` Chris Wilson
2013-11-05  3:03     ` Ben Widawsky
2013-11-05 16:40   ` Paulo Zanoni
2013-11-03  4:07 ` [PATCH 17/62] drm/i915/bdw: Update relevant error state Ben Widawsky
2013-11-05 17:03   ` Paulo Zanoni
2013-11-03  4:07 ` [PATCH 18/62] drm/i915/bdw: Make gen8_gmch_probe Ben Widawsky
2013-11-04 22:01   ` Imre Deak
2013-11-05  3:32     ` [PATCH 18/62] [v6] " Ben Widawsky
2013-11-03  4:07 ` [PATCH 19/62] drm/i915/bdw: Create gen8_gtt_pte_t Ben Widawsky
2013-11-04 14:36   ` Chris Wilson
2013-11-04 22:03   ` Imre Deak
2013-11-03  4:07 ` [PATCH 20/62] drm/i915/bdw: Add GTT functions Ben Widawsky
2013-11-04 22:22   ` Imre Deak
2013-11-06  8:28   ` Bloomfield, Jon
2013-11-03  4:07 ` [PATCH 21/62] drm/i915/bdw: Support BDW caching Ben Widawsky
2013-11-04 14:39   ` Chris Wilson
2013-11-05  3:56     ` [PATCH 21/62] [v4] " Ben Widawsky
2013-11-05 15:19   ` [PATCH 21/62] " Imre Deak
2013-11-03  4:07 ` [PATCH 22/62] drm/i915/bdw: Implement Full Force Miss disables Ben Widawsky
2013-11-05 15:41   ` Imre Deak
2013-11-05 16:17     ` Daniel Vetter
2013-11-06  9:33       ` Daniel Vetter
2013-11-03  4:07 ` [PATCH 23/62] drm/i915/bdw: PPGTT init & cleanup Ben Widawsky
2013-11-04 14:58   ` Imre Deak
2013-11-05  4:47     ` [PATCH] " Ben Widawsky
2013-11-03  4:07 ` [PATCH 24/62] drm/i915/bdw: Initialize the PDEs Ben Widawsky
2013-11-04 14:10   ` Damien Lespiau
2013-11-05  5:20     ` [PATCH 24/62] [v3] " Ben Widawsky
2013-11-03  4:07 ` [PATCH 25/62] drm/i915/bdw: Implement PPGTT clear range Ben Widawsky
2013-11-03  4:07 ` [PATCH 26/62] drm/i915/bdw: Implement PPGTT insert Ben Widawsky
2013-11-03  4:07 ` [PATCH 27/62] drm/i915/bdw: Implement PPGTT enable Ben Widawsky
2013-11-04 14:47   ` Damien Lespiau
2013-11-05  6:29     ` [PATCH 27/62] [v7] " Ben Widawsky
2013-11-03  4:07 ` [PATCH 28/62] drm/i915/bdw: unleash PPGTT Ben Widawsky
2013-11-03  4:07 ` [PATCH 29/62] drm/i915/bdw: Render ring flushing Ben Widawsky
2013-11-03  4:07 ` [PATCH 30/62] drm/i915/bdw: BSD init for gen8 also Ben Widawsky
2013-11-03  4:07 ` [PATCH 31/62] drm/i915/bdw: Don't muck with gtt_size on Gen8 when PPGTT setup fails Ben Widawsky
2013-11-03  4:07 ` [PATCH 32/62] drm/i915/bdw: ppgtt info in debugfs Ben Widawsky
2013-11-03  4:07 ` [PATCH 33/62] drm/i915/bdw: add IS_BROADWELL macro Ben Widawsky
2013-11-03  4:07 ` [PATCH 34/62] drm/i915/bdw: Broadwell has 3 pipes Ben Widawsky
2013-11-03  4:07 ` [PATCH 35/62] drm/i915/bdw: add Broadwell sprite/plane/cursor checks Ben Widawsky
2013-11-03  4:07 ` [PATCH 36/62] drm/i915/bdw: Broadwell also has the "power down well" Ben Widawsky
2013-11-03 11:05   ` Ville Syrjälä
2013-11-03 11:24     ` Daniel Vetter
2013-11-03 11:25       ` Ville Syrjälä
2013-11-03  4:07 ` [PATCH 37/62] drm/i915/bdw: pretend we have LPT LP on Broadwell Ben Widawsky
2013-11-03 11:19   ` Ville Syrjälä
2013-11-03  4:07 ` [PATCH 38/62] drm/i915/bdw: get the correct LCPLL frequency " Ben Widawsky
2013-11-03 11:07   ` Ville Syrjälä
2013-11-03  4:07 ` [PATCH 39/62] drm/i915/bdw: on Broadwell, the panel fitter is on the pipe Ben Widawsky
2013-11-03 11:19   ` Ville Syrjälä
2013-11-03  4:07 ` [PATCH 40/62] drm/i915/bdw: Broadwell has PIPEMISC Ben Widawsky
2013-11-03 11:11   ` Ville Syrjälä
2013-11-03  4:07 ` [PATCH 41/62] drm/i915/bdw: Use pipe CSC on Broadwell Ben Widawsky
2013-11-03  4:07 ` [PATCH 42/62] drm/i915/bdw: Implement WaSwitchSolVfFArbitrationPriority Ben Widawsky
2013-11-03 11:07   ` Ville Syrjälä
2013-11-03 17:44     ` Ben Widawsky
2013-11-04 14:23       ` Ville Syrjälä
2013-11-03  4:07 ` [PATCH 43/62] drm/i915/bdw: Add BDW DDI buffer translation values Ben Widawsky
2013-11-04 23:59   ` Ben Widawsky
2013-11-03  4:07 ` [PATCH 44/62] drm/i915/bdw: add BDW DDI buf translations for eDP Ben Widawsky
2013-11-05  0:09   ` Ben Widawsky
2013-11-03  4:07 ` [PATCH 45/62] drm/i915/bdw: add support for BDW DP voltage swings and pre-emphasis Ben Widawsky
2013-11-05  0:45   ` Ben Widawsky [this message]
2013-11-05 13:01     ` Paulo Zanoni
2013-11-06  3:15       ` Todd Previte
2013-11-03  4:07 ` [PATCH 46/62] drm/i915/bdw: BDW also has only 2 FDI lanes Ben Widawsky
2013-11-03  4:07 ` [PATCH 47/62] drm/i915/bdw: check DPD on port D when setting the DDI buffers Ben Widawsky
2013-11-05  0:46   ` Ben Widawsky
2013-11-03  4:07 ` [PATCH 48/62] drm/i915/bdw: Add Broadwell display FIFO limits Ben Widawsky
2013-11-04  9:39   ` Jani Nikula
2013-11-04 13:59     ` Ville Syrjälä
2013-11-03  4:07 ` [PATCH 49/62] drm/i915/bdw: Use The GT mailbox for IPS enable/disable Ben Widawsky
2013-11-04 10:15   ` Jani Nikula
2013-11-03  4:07 ` [PATCH 50/62] drm/i915/bdw: Support eDP PSR Ben Widawsky
2013-11-04 10:34   ` Jani Nikula
2013-11-05  6:45     ` [PATCH 50/62] [v5] " Ben Widawsky
2014-03-04  9:31       ` Kumar, Kiran S
2014-03-05  6:31         ` Ben Widawsky
2013-11-03  4:07 ` [PATCH 51/62] drm/i915/bdw: Use HSW formula for ring freq scaling Ben Widawsky
2013-11-06 13:34   ` Daniel Vetter
2013-11-03  4:07 ` [PATCH 52/62] drm/i915/bdw: Don't wait for c0 threads on forcewake Ben Widawsky
2013-11-04 13:47   ` Jani Nikula
2013-11-03  4:07 ` [PATCH 53/62] drm/i915/bdw: Broadwell has a max port clock of 300Mhz on HDMI Ben Widawsky
2013-11-04 13:33   ` Jani Nikula
2013-11-03  4:07 ` [PATCH 54/62] drm/i915/bdw: Create a separate BDW rps enable Ben Widawsky
2013-11-04 21:04   ` Jesse Barnes
2013-11-03  4:07 ` [PATCH 55/62] drm/i915/bdw: Disable semaphores Ben Widawsky
2013-11-04 18:18   ` Jesse Barnes
2013-11-05  3:45     ` [PATCH 55/62] [v2] " Ben Widawsky
2013-11-03  4:07 ` [PATCH 56/62] drm/i915/bdw: Implement edp PSR workarounds Ben Widawsky
2013-11-05 17:19   ` Jesse Barnes
2013-11-06 15:44   ` Daniel Vetter
2013-11-03  4:07 ` [PATCH 57/62] drm/i915/bdw: BWGTLB clock gate disable Ben Widawsky
2013-11-05 17:22   ` Jesse Barnes
2013-11-03  4:07 ` [PATCH 58/62] drm/i915/bdw: Disable centroid pixel perf optimization Ben Widawsky
2013-11-04 13:20   ` Paulo Zanoni
2013-11-05  6:52     ` [PATCH] " Ben Widawsky
2013-11-05 17:24       ` Jesse Barnes
2013-11-03  4:07 ` [PATCH 59/62] drm/i915/bdw: Sampler power bypass disable Ben Widawsky
2013-11-03  4:07 ` [PATCH 60/62] drm/i915/bdw: Limit SDE poly depth FIFO to 2 Ben Widawsky
2013-11-03  4:07 ` [PATCH 61/62] drm/i915/bdw: conservative SBE VUE cache mode Ben Widawsky
2013-11-03  4:08 ` [PATCH 62/62] drm/i915/bdw: WaSingleSubspanDispatchOnAALinesAndPoints Ben Widawsky
2013-11-03  8:45 ` [PATCH 00/62] Broadwell kernel driver support Daniel Vetter
2013-11-04 14:15   ` Jani Nikula
2013-11-04 15:04   ` Damien Lespiau
2013-11-05 15:14   ` Daniel Vetter
2013-11-05 15:54   ` Imre Deak
2013-11-03 11:47 ` [PATCH 63/62] drm/i915/bdw: Enable trickle feed on Broadwell ville.syrjala
2013-11-04 15:05   ` Damien Lespiau
2013-11-05  7:11 ` [PATCH 64/62] drm/i915/bdw: Change dp aux timeout to 600us on DDIA Ben Widawsky

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=20131105004510.GC9345@bwidawsk.net \
    --to=ben@bwidawsk.net \
    --cc=benjamin.widawsky@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=paulo.r.zanoni@intel.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.