public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Imre Deak <imre.deak@intel.com>
Cc: intel-gfx@lists.freedesktop.org, Paulo Zanoni <paulo.r.zanoni@intel.com>
Subject: Re: [PATCH 09/23] drm/i915: Factor out common parts from TypeC port handling functions
Date: Tue, 18 Jun 2019 19:33:13 +0300	[thread overview]
Message-ID: <20190618163313.GR5942@intel.com> (raw)
In-Reply-To: <20190604145826.16424-10-imre.deak@intel.com>

On Tue, Jun 04, 2019 at 05:58:12PM +0300, Imre Deak wrote:
> Factor out helpers reading/parsing the TypeC specific registers, making
> current users of them clearer and letting us use them later.
> 
> While at it also:
> - Simplify icl_tc_phy_connect() with an early return in legacy mode.
> - Simplify the live status check using one bitmask for all HPD bits.
> - Remove a micro-optimisation of the repeated safe-mode clearing.
> - Make sure we fix the legacy port flag in all cases.
> 
> Except for the last two, no functional changes.
> 
> Cc: José Roberto de Souza <jose.souza@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
> Signed-off-by: Imre Deak <imre.deak@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_ddi.c |   5 +-
>  drivers/gpu/drm/i915/intel_tc.c  | 166 +++++++++++++++++++------------
>  drivers/gpu/drm/i915/intel_tc.h  |   1 +
>  3 files changed, 103 insertions(+), 69 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index 8f223d48d562..d236839bee19 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -2983,7 +2983,6 @@ static void icl_program_mg_dp_mode(struct intel_digital_port *intel_dig_port)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(intel_dig_port->base.base.dev);
>  	enum port port = intel_dig_port->base.port;
> -	enum tc_port tc_port = intel_port_to_tc(dev_priv, port);
>  	u32 ln0, ln1, lane_info;
>  
>  	if (intel_dig_port->tc_mode == TC_PORT_TBT_ALT)
> @@ -2997,9 +2996,7 @@ static void icl_program_mg_dp_mode(struct intel_digital_port *intel_dig_port)
>  		ln0 &= ~(MG_DP_MODE_CFG_DP_X1_MODE | MG_DP_MODE_CFG_DP_X2_MODE);
>  		ln1 &= ~(MG_DP_MODE_CFG_DP_X1_MODE | MG_DP_MODE_CFG_DP_X2_MODE);
>  
> -		lane_info = (I915_READ(PORT_TX_DFLEXDPSP) &
> -			     DP_LANE_ASSIGNMENT_MASK(tc_port)) >>
> -			    DP_LANE_ASSIGNMENT_SHIFT(tc_port);
> +		lane_info = intel_tc_port_get_lane_info(intel_dig_port);
>  
>  		switch (lane_info) {
>  		case 0x1:
> diff --git a/drivers/gpu/drm/i915/intel_tc.c b/drivers/gpu/drm/i915/intel_tc.c
> index 07488235b67a..3fdcfa2bbaee 100644
> --- a/drivers/gpu/drm/i915/intel_tc.c
> +++ b/drivers/gpu/drm/i915/intel_tc.c
> @@ -43,10 +43,19 @@ static const char *tc_port_mode_name(enum tc_port_mode mode)
>  	return names[mode];
>  }
>  
> -int intel_tc_port_fia_max_lane_count(struct intel_digital_port *dig_port)
> +u32 intel_tc_port_get_lane_info(struct intel_digital_port *dig_port)

get_lane_mask() or something?

>  {
>  	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
>  	enum tc_port tc_port = intel_port_to_tc(dev_priv, dig_port->base.port);
> +	u32 lane_info = I915_READ(PORT_TX_DFLEXDPSP);
> +
> +	return (lane_info & DP_LANE_ASSIGNMENT_MASK(tc_port)) >>
> +	       DP_LANE_ASSIGNMENT_SHIFT(tc_port);
> +}
> +
> +int intel_tc_port_fia_max_lane_count(struct intel_digital_port *dig_port)
> +{
> +	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
>  	intel_wakeref_t wakeref;
>  	u32 lane_info;
>  
> @@ -55,9 +64,7 @@ int intel_tc_port_fia_max_lane_count(struct intel_digital_port *dig_port)
>  
>  	lane_info = 0;
>  	with_intel_display_power(dev_priv, POWER_DOMAIN_DISPLAY_CORE, wakeref)
> -		lane_info = (I915_READ(PORT_TX_DFLEXDPSP) &
> -			     DP_LANE_ASSIGNMENT_MASK(tc_port)) >>
> -				DP_LANE_ASSIGNMENT_SHIFT(tc_port);
> +		lane_info = intel_tc_port_get_lane_info(dig_port);
>  
>  	switch (lane_info) {
>  	default:
> @@ -75,6 +82,69 @@ int intel_tc_port_fia_max_lane_count(struct intel_digital_port *dig_port)
>  	}
>  }
>  
> +static void tc_port_fixup_legacy_flag(struct intel_digital_port *dig_port,
> +				      u32 live_status_mask)
> +{
> +	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
> +	enum tc_port tc_port = intel_port_to_tc(dev_priv, dig_port->base.port);
> +	u32 valid_hpd_mask = dig_port->tc_legacy_port ? BIT(TC_PORT_LEGACY) :
> +							~BIT(TC_PORT_LEGACY);
> +
> +	if (!(live_status_mask & ~valid_hpd_mask))
> +		return;

A bit too many nots for me to follow. I guess what it's doing is
checking if any of the other bits are set, and if so it assumes the
mode was misdeclared in vbt? 

Actually, won't this end up ping-ponging back and forth if the
hw really reports both legacy and non-legacy bits as set?

> +
> +	/* If live status mismatches the VBT flag, trust the live status. */
> +	DRM_ERROR("Port %s: live status %08x mismatches the legacy port flag, fix flag\n",
> +		  tc_port_name(dev_priv, tc_port), live_status_mask);
> +
> +	dig_port->tc_legacy_port = !dig_port->tc_legacy_port;
> +}
> +

-- 
Ville Syrjälä
Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  parent reply	other threads:[~2019-06-18 16:33 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-04 14:58 [PATCH 00/23] drm/i915: Fix TypeC port mode switching Imre Deak
2019-06-04 14:58 ` [PATCH 01/23] drm/i915/icl: Add support to read out the TBT PLL HW state Imre Deak
2019-06-07 17:36   ` Souza, Jose
2019-06-04 14:58 ` [PATCH 02/23] drm/i915: Tune down WARNs about TBT AUX power well enabling Imre Deak
2019-06-07 17:50   ` Souza, Jose
2019-06-08 13:33     ` Imre Deak
2019-06-04 14:58 ` [PATCH 03/23] drm/i915: Move the TypeC port handling code to a separate file Imre Deak
2019-06-06  8:42   ` Jani Nikula
2019-06-06  8:43     ` Jani Nikula
2019-06-06  9:09     ` Imre Deak
2019-06-10 22:57     ` Lucas De Marchi
2019-06-11 10:01       ` Jani Nikula
2019-06-07 17:56   ` Souza, Jose
2019-06-04 14:58 ` [PATCH 04/23] drm/i915: Sanitize the terminology used for TypeC port modes Imre Deak
2019-06-07 19:15   ` Souza, Jose
2019-06-08 13:43     ` Imre Deak
2019-06-10 23:21   ` Lucas De Marchi
2019-06-11 11:19     ` Imre Deak
2019-06-04 14:58 ` [PATCH 05/23] drm/i915: Don't enable the DDI-IO power in the TypeC TBT-alt mode Imre Deak
2019-06-07 19:23   ` Souza, Jose
2019-06-04 14:58 ` [PATCH 06/23] drm/i915: Fix the TBT AUX power well enabling Imre Deak
2019-06-07 19:58   ` Souza, Jose
2019-06-08 13:55     ` Imre Deak
2019-06-04 14:58 ` [PATCH 07/23] drm/i915: Use the correct AUX power domain in TypeC TBT-alt mode Imre Deak
2019-06-07 20:02   ` Souza, Jose
2019-06-04 14:58 ` [PATCH 08/23] drm/i915: Unify the TypeC port notation in debug/error messages Imre Deak
2019-06-07 20:21   ` Souza, Jose
2019-06-07 20:42     ` Imre Deak
2019-06-07 20:45       ` Souza, Jose
2019-06-07 20:46       ` Imre Deak
2019-06-04 14:58 ` [PATCH 09/23] drm/i915: Factor out common parts from TypeC port handling functions Imre Deak
2019-06-06  8:47   ` Jani Nikula
2019-06-06  9:19     ` Imre Deak
2019-06-07 21:22   ` Souza, Jose
2019-06-08 17:23     ` Imre Deak
2019-06-18 16:33   ` Ville Syrjälä [this message]
2019-06-18 16:44     ` Imre Deak
2019-06-04 14:58 ` [PATCH 10/23] drm/i915: Wait for TypeC PHY complete flag to clear in safe mode Imre Deak
2019-06-07 21:32   ` Souza, Jose
2019-06-04 14:58 ` [PATCH 11/23] drm/i915: Handle the TCCOLD power-down event Imre Deak
2019-06-07 21:41   ` Souza, Jose
2019-06-08 17:31     ` Imre Deak
2019-06-04 14:58 ` [PATCH 12/23] drm/i915: Sanitize the TypeC connect/detect sequences Imre Deak
2019-06-07 22:15   ` Souza, Jose
2019-06-08 17:40     ` Imre Deak
2019-06-04 14:58 ` [PATCH 13/23] drm/i915: Fix the TypeC port mode sanitization during loading/resume Imre Deak
2019-06-07 22:39   ` Souza, Jose
2019-06-08 17:50     ` Imre Deak
2019-06-04 14:58 ` [PATCH 14/23] drm/i915: Keep the TypeC port mode fixed for detect/AUX transfers Imre Deak
2019-06-04 14:58 ` [PATCH 15/23] drm/i915: Sanitize the TypeC FIA lane configuration decoding Imre Deak
2019-06-07 22:49   ` Souza, Jose
2019-06-18 16:39   ` Ville Syrjälä
2019-06-18 16:46     ` Imre Deak
2019-06-04 14:58 ` [PATCH 16/23] drm/i915: Sanitize the shared DPLL reserve/release interface Imre Deak
2019-06-04 14:58 ` [PATCH 17/23] drm/i915: Sanitize the shared DPLL find/reference interface Imre Deak
2019-06-04 14:58 ` [PATCH 18/23] drm/i915/icl: Split getting the DPLLs to port type specific functions Imre Deak
2019-06-04 14:58 ` [PATCH 19/23] drm/i915/icl: Reserve all required PLLs for TypeC ports Imre Deak
2019-06-07 17:41   ` [PATCH v2 " Imre Deak
2019-06-18 17:25     ` Ville Syrjälä
2019-06-18 18:02       ` Imre Deak
2019-06-04 14:58 ` [PATCH 20/23] drm/i915: Keep the TypeC port mode fixed when the port is active Imre Deak
2019-06-19 12:58   ` Ville Syrjälä
2019-06-19 16:08     ` Imre Deak
2019-06-04 14:58 ` [PATCH 21/23] drm/i915: Add state verification for the TypeC port mode Imre Deak
2019-06-04 14:58 ` [PATCH 22/23] drm/i915: Remove unneeded disconnect in TypeC legacy " Imre Deak
2019-06-08  0:18   ` Souza, Jose
2019-06-04 14:58 ` [PATCH 23/23] drm/i915: WARN about invalid lane reversal in TBT-alt/DP-alt modes Imre Deak
2019-06-08  0:13   ` Souza, Jose
2019-06-08  0:25     ` Souza, Jose
2019-06-04 17:30 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Fix TypeC port mode switching Patchwork
2019-06-04 17:39 ` ✗ Fi.CI.SPARSE: " Patchwork
2019-06-05  5:24 ` ✓ Fi.CI.BAT: success " Patchwork
2019-06-05 16:36 ` ✓ Fi.CI.IGT: " Patchwork
2019-06-07 17:59 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Fix TypeC port mode switching (rev2) Patchwork
2019-06-07 18:07 ` ✗ Fi.CI.SPARSE: " Patchwork
2019-06-07 18:34 ` ✓ Fi.CI.BAT: success " Patchwork
2019-06-10 12:34 ` ✓ Fi.CI.IGT: " Patchwork

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=20190618163313.GR5942@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=imre.deak@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox