diff mbox

[08/10] drm/i915: Nuke intel_digital_port->port

Message ID 20171031205123.13123-9-ville.syrjala@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ville Syrjälä Oct. 31, 2017, 8:51 p.m. UTC
From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Remove intel_digital_port->port and replace its users with
intel_encoder->port. intel_encoder->port is a superset of
intel_digital_port->port, and it works correctly even for
MST encoders.

Performed with cocci:
@@
@@
struct intel_digital_port {
       ...
-       enum port port;
       ...
}

@@
struct intel_digital_port *D;
expression E;
@@
- D->port = E;

@@
struct intel_digital_port *D;
@@
- D->port
+ D->base.port

@@
expression E;
@@
(
- dp_to_dig_port(E)->port
+ dp_to_dig_port(E)->base.port
|
- enc_to_dig_port(E)->port
+ to_intel_encoder(E)->port
)

@@
expression E;
@@
- to_intel_encoder(&E->base)
+ E

@@
struct intel_digital_port *D;
identifier I, M;
@@
  I = &D->base
<...
(
- D->base.M
+ I->M
|
- &D->base
+ I
)
...>

@@
identifier D;
expression E;
identifier M;
@@
 D = enc_to_dig_port(&E->base)
<...
(
- D->base.M
+ E->M
|
- &D->base
+ E
)
...>

@@
expression E;
identifier M;
@@
(
- enc_to_dig_port(&E->base)->base.M
+ E->M
|
- enc_to_dig_port(&E->base)->base
+ E
|
- enc_to_mst(&E->base)->primary->base.port
+ E->port
)

@@
expression E;
identifier D;
@@
- struct intel_digital_port *D = E;
... when != D

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_debugfs.c   |   2 +-
 drivers/gpu/drm/i915/intel_ddi.c      |  13 ++---
 drivers/gpu/drm/i915/intel_display.c  |  13 +++--
 drivers/gpu/drm/i915/intel_dp.c       | 103 +++++++++++++++++-----------------
 drivers/gpu/drm/i915/intel_dp_mst.c   |   6 +-
 drivers/gpu/drm/i915/intel_dpio_phy.c |  12 ++--
 drivers/gpu/drm/i915/intel_drv.h      |   5 +-
 drivers/gpu/drm/i915/intel_hdmi.c     |  17 +++---
 drivers/gpu/drm/i915/intel_pipe_crc.c |   4 +-
 drivers/gpu/drm/i915/intel_psr.c      |   4 +-
 10 files changed, 87 insertions(+), 92 deletions(-)

Comments

Dhinakaran Pandiyan Nov. 9, 2017, 1:37 a.m. UTC | #1
On Tue, 2017-10-31 at 22:51 +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>

> 

> Remove intel_digital_port->port and replace its users with

> intel_encoder->port. intel_encoder->port is a superset of

> intel_digital_port->port, and it works correctly even for

> MST encoders.

> 

> Performed with cocci:

> @@

> @@

> struct intel_digital_port {

>        ...

> -       enum port port;

>        ...

> }

> 

> @@

> struct intel_digital_port *D;

> expression E;

> @@

> - D->port = E;

> 

> @@

> struct intel_digital_port *D;

> @@

> - D->port

> + D->base.port

> 

> @@

> expression E;

> @@

> (

> - dp_to_dig_port(E)->port

> + dp_to_dig_port(E)->base.port

> |

> - enc_to_dig_port(E)->port

> + to_intel_encoder(E)->port

> )

> 

> @@

> expression E;

> @@

> - to_intel_encoder(&E->base)

> + E

> 

> @@

> struct intel_digital_port *D;

> identifier I, M;

> @@

>   I = &D->base

> <...

> (

> - D->base.M

> + I->M

> |

> - &D->base

> + I

> )

> ...>

> 

> @@

> identifier D;

> expression E;

> identifier M;

> @@

>  D = enc_to_dig_port(&E->base)

> <...

> (

> - D->base.M

> + E->M

> |

> - &D->base

> + E

> )

> ...>

> 

> @@

> expression E;

> identifier M;

> @@

> (

> - enc_to_dig_port(&E->base)->base.M

> + E->M

> |

> - enc_to_dig_port(&E->base)->base

> + E

> |

> - enc_to_mst(&E->base)->primary->base.port

> + E->port

> )

> 

> @@

> expression E;

> identifier D;

> @@

> - struct intel_digital_port *D = E;

> ... when != D

> 



The script has ended up creating intel_dig_port->base.port dereferences
in some places where encoder->port was possible, but has worked pretty
well otherwise.

> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

> ---

>  drivers/gpu/drm/i915/i915_debugfs.c   |   2 +-

>  drivers/gpu/drm/i915/intel_ddi.c      |  13 ++---

>  drivers/gpu/drm/i915/intel_display.c  |  13 +++--

>  drivers/gpu/drm/i915/intel_dp.c       | 103 +++++++++++++++++-----------------

>  drivers/gpu/drm/i915/intel_dp_mst.c   |   6 +-

>  drivers/gpu/drm/i915/intel_dpio_phy.c |  12 ++--

>  drivers/gpu/drm/i915/intel_drv.h      |   5 +-

>  drivers/gpu/drm/i915/intel_hdmi.c     |  17 +++---

>  drivers/gpu/drm/i915/intel_pipe_crc.c |   4 +-

>  drivers/gpu/drm/i915/intel_psr.c      |   4 +-

>  10 files changed, 87 insertions(+), 92 deletions(-)

> 

> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c

> index 39883cd915db..d89321f0468c 100644

> --- a/drivers/gpu/drm/i915/i915_debugfs.c

> +++ b/drivers/gpu/drm/i915/i915_debugfs.c

> @@ -3603,7 +3603,7 @@ static int i915_dp_mst_info(struct seq_file *m, void *unused)

>  			continue;

>  

>  		seq_printf(m, "MST Source Port %c\n",

> -			   port_name(intel_dig_port->port));

> +			   port_name(intel_dig_port->base.port));

>  		drm_dp_mst_dump_topology(m, &intel_dig_port->dp.mst_mgr);

>  	}

>  	drm_connector_list_iter_end(&conn_iter);

> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c

> index ace674cd79b9..65ab55496ab7 100644

> --- a/drivers/gpu/drm/i915/intel_ddi.c

> +++ b/drivers/gpu/drm/i915/intel_ddi.c

> @@ -1801,8 +1801,8 @@ static void skl_ddi_set_iboost(struct intel_encoder *encoder,

>  			       int level, enum intel_output_type type)

>  {

>  	struct intel_digital_port *intel_dig_port = enc_to_dig_port(&encoder->base);

> -	struct drm_i915_private *dev_priv = to_i915(intel_dig_port->base.base.dev);

> -	enum port port = intel_dig_port->port;

> +	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);

> +	enum port port = encoder->port;

>  	uint8_t iboost;

>  

>  	if (type == INTEL_OUTPUT_HDMI)

> @@ -2470,7 +2470,7 @@ void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp)

>  	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);

>  	struct drm_i915_private *dev_priv =

>  		to_i915(intel_dig_port->base.base.dev);

> -	enum port port = intel_dig_port->port;

> +	enum port port = intel_dig_port->base.port;

>  	uint32_t val;

>  	bool wait = false;

>  

> @@ -2698,7 +2698,7 @@ static struct intel_connector *

>  intel_ddi_init_dp_connector(struct intel_digital_port *intel_dig_port)

>  {

>  	struct intel_connector *connector;

> -	enum port port = intel_dig_port->port;

> +	enum port port = intel_dig_port->base.port;

>  

>  	connector = intel_connector_alloc();

>  	if (!connector)

> @@ -2717,7 +2717,7 @@ static struct intel_connector *

>  intel_ddi_init_hdmi_connector(struct intel_digital_port *intel_dig_port)

>  {

>  	struct intel_connector *connector;

> -	enum port port = intel_dig_port->port;

> +	enum port port = intel_dig_port->base.port;

>  

>  	connector = intel_connector_alloc();

>  	if (!connector)

> @@ -2733,7 +2733,7 @@ static bool intel_ddi_a_force_4_lanes(struct intel_digital_port *dport)

>  {

>  	struct drm_i915_private *dev_priv = to_i915(dport->base.base.dev);

>  

> -	if (dport->port != PORT_A)

> +	if (dport->base.port != PORT_A)

>  		return false;

>  

>  	if (dport->saved_port_bits & DDI_A_4_LANES)

> @@ -2836,7 +2836,6 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)

>  	intel_encoder->suspend = intel_dp_encoder_suspend;

>  	intel_encoder->get_power_domains = intel_ddi_get_power_domains;

>  

> -	intel_dig_port->port = port;

>  	intel_dig_port->saved_port_bits = I915_READ(DDI_BUF_CTL(port)) &

>  					  (DDI_BUF_PORT_REVERSAL |

>  					   DDI_A_4_LANES);

> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c

> index 737de251d0f8..c75bcf989454 100644

> --- a/drivers/gpu/drm/i915/intel_display.c

> +++ b/drivers/gpu/drm/i915/intel_display.c

> @@ -1703,7 +1703,7 @@ void vlv_wait_port_ready(struct drm_i915_private *dev_priv,

>  	u32 port_mask;

>  	i915_reg_t dpll_reg;

>  

> -	switch (dport->port) {

> +	switch (dport->base.port) {

>  	case PORT_B:

>  		port_mask = DPLL_PORTB_READY_MASK;

>  		dpll_reg = DPLL(0);

> @@ -1725,7 +1725,8 @@ void vlv_wait_port_ready(struct drm_i915_private *dev_priv,

>  				    dpll_reg, port_mask, expected_mask,

>  				    1000))

>  		WARN(1, "timed out waiting for port %c ready: got 0x%x, expected 0x%x\n",

> -		     port_name(dport->port), I915_READ(dpll_reg) & port_mask, expected_mask);

> +		     port_name(dport->base.port),

> +		     I915_READ(dpll_reg) & port_mask, expected_mask);

>  }

>  

>  static void ironlake_enable_pch_transcoder(struct drm_i915_private *dev_priv,

> @@ -4482,7 +4483,7 @@ intel_trans_dp_port_sel(struct intel_crtc *crtc)

>  	for_each_encoder_on_crtc(dev, &crtc->base, encoder) {

>  		if (encoder->type == INTEL_OUTPUT_DP ||

>  		    encoder->type == INTEL_OUTPUT_EDP)

> -			return enc_to_dig_port(&encoder->base)->port;

> +			return encoder->port;

>  	}

>  

>  	return -1;

> @@ -7633,7 +7634,7 @@ static void ironlake_init_pch_refclk(struct drm_i915_private *dev_priv)

>  			break;

>  		case INTEL_OUTPUT_EDP:

>  			has_panel = true;

> -			if (enc_to_dig_port(&encoder->base)->port == PORT_A)

> +			if (encoder->port == PORT_A)

>  				has_cpu_edp = true;

>  			break;

>  		default:

> @@ -10756,7 +10757,7 @@ static bool check_digital_port_conflicts(struct drm_atomic_state *state)

>  		case INTEL_OUTPUT_DP:

>  		case INTEL_OUTPUT_HDMI:

>  		case INTEL_OUTPUT_EDP:

> -			port_mask = 1 << enc_to_dig_port(&encoder->base)->port;

> +			port_mask = 1 << encoder->port;

>  

>  			/* the same port mustn't appear more than once */

>  			if (used_ports & port_mask)

> @@ -10766,7 +10767,7 @@ static bool check_digital_port_conflicts(struct drm_atomic_state *state)

>  			break;

>  		case INTEL_OUTPUT_DP_MST:

>  			used_mst_ports |=

> -				1 << enc_to_mst(&encoder->base)->primary->port;

> +				1 << encoder->port;

>  			break;

>  		default:

>  			break;

> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c

> index 0151c8d18b79..b81535fdef1d 100644

> --- a/drivers/gpu/drm/i915/intel_dp.c

> +++ b/drivers/gpu/drm/i915/intel_dp.c

> @@ -223,7 +223,7 @@ intel_dp_set_source_rates(struct intel_dp *intel_dp)

>  {

>  	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);

>  	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);

> -	enum port port = dig_port->port;

> +	enum port port = dig_port->base.port;

>  	const int *source_rates;

>  	int size;

>  	u32 voltage;

> @@ -479,11 +479,11 @@ vlv_power_sequencer_kick(struct intel_dp *intel_dp)

>  

>  	if (WARN(I915_READ(intel_dp->output_reg) & DP_PORT_EN,

>  		 "skipping pipe %c power seqeuncer kick due to port %c being active\n",

> -		 pipe_name(pipe), port_name(intel_dig_port->port)))

> +		 pipe_name(pipe), port_name(intel_dig_port->base.port)))

>  		return;

>  

>  	DRM_DEBUG_KMS("kicking pipe %c power sequencer for port %c\n",

> -		      pipe_name(pipe), port_name(intel_dig_port->port));

> +		      pipe_name(pipe), port_name(intel_dig_port->base.port));

>  

>  	/* Preserve the BIOS-computed detected bit. This is

>  	 * supposed to be read-only.

> @@ -610,7 +610,7 @@ vlv_power_sequencer_pipe(struct intel_dp *intel_dp)

>  

>  	DRM_DEBUG_KMS("picked pipe %c power sequencer for port %c\n",

>  		      pipe_name(intel_dp->pps_pipe),

> -		      port_name(intel_dig_port->port));

> +		      port_name(intel_dig_port->base.port));

>  

>  	/* init power sequencer on this pipe and port */

>  	intel_dp_init_panel_power_sequencer(dev, intel_dp);

> @@ -706,7 +706,7 @@ vlv_initial_power_sequencer_setup(struct intel_dp *intel_dp)

>  	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);

>  	struct drm_device *dev = intel_dig_port->base.base.dev;

>  	struct drm_i915_private *dev_priv = to_i915(dev);

> -	enum port port = intel_dig_port->port;

> +	enum port port = intel_dig_port->base.port;

>  

>  	lockdep_assert_held(&dev_priv->pps_mutex);

>  

> @@ -966,7 +966,7 @@ static uint32_t ilk_get_aux_clock_divider(struct intel_dp *intel_dp, int index)

>  	 * like to run at 2MHz.  So, take the cdclk or PCH rawclk value and

>  	 * divide by 2000 and use that

>  	 */

> -	if (intel_dig_port->port == PORT_A)

> +	if (intel_dig_port->base.port == PORT_A)

>  		return DIV_ROUND_CLOSEST(dev_priv->cdclk.hw.cdclk, 2000);

>  	else

>  		return DIV_ROUND_CLOSEST(dev_priv->rawclk_freq, 2000);

> @@ -977,7 +977,7 @@ static uint32_t hsw_get_aux_clock_divider(struct intel_dp *intel_dp, int index)

>  	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);

>  	struct drm_i915_private *dev_priv = to_i915(intel_dig_port->base.base.dev);

>  

> -	if (intel_dig_port->port != PORT_A && HAS_PCH_LPT_H(dev_priv)) {

> +	if (intel_dig_port->base.port != PORT_A && HAS_PCH_LPT_H(dev_priv)) {

>  		/* Workaround for non-ULT HSW */

>  		switch (index) {

>  		case 0: return 63;

> @@ -1447,7 +1447,7 @@ static void intel_aux_reg_init(struct intel_dp *intel_dp)

>  {

>  	struct drm_i915_private *dev_priv = to_i915(intel_dp_to_dev(intel_dp));

>  	enum port port = intel_aux_port(dev_priv,

> -					dp_to_dig_port(intel_dp)->port);

> +					dp_to_dig_port(intel_dp)->base.port);

>  	int i;

>  

>  	intel_dp->aux_ch_ctl_reg = intel_aux_ctl_reg(dev_priv, port);

> @@ -1465,7 +1465,7 @@ static void

>  intel_dp_aux_init(struct intel_dp *intel_dp)

>  {

>  	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);

> -	enum port port = intel_dig_port->port;

> +	enum port port = intel_dig_port->base.port;

>  

>  	intel_aux_reg_init(intel_dp);

>  	drm_dp_aux_init(&intel_dp->aux);

> @@ -1635,7 +1635,7 @@ intel_dp_compute_config(struct intel_encoder *encoder,

>  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);

>  	struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode;

>  	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);

> -	enum port port = dp_to_dig_port(intel_dp)->port;

> +	enum port port = dp_to_dig_port(intel_dp)->base.port;


encoder->port 

>  	struct intel_crtc *intel_crtc = to_intel_crtc(pipe_config->base.crtc);

>  	struct intel_connector *intel_connector = intel_dp->attached_connector;

>  	struct intel_digital_connector_state *intel_conn_state =

> @@ -1859,7 +1859,7 @@ static void intel_dp_prepare(struct intel_encoder *encoder,

>  	struct drm_device *dev = encoder->base.dev;

>  	struct drm_i915_private *dev_priv = to_i915(dev);

>  	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);

> -	enum port port = dp_to_dig_port(intel_dp)->port;

> +	enum port port = dp_to_dig_port(intel_dp)->base.port;


Same here.
>  	struct intel_crtc *crtc = to_intel_crtc(pipe_config->base.crtc);

>  	const struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode;

>  

> @@ -2074,7 +2074,7 @@ static bool edp_panel_vdd_on(struct intel_dp *intel_dp)

>  	intel_display_power_get(dev_priv, intel_dp->aux_power_domain);

>  

>  	DRM_DEBUG_KMS("Turning eDP port %c VDD on\n",

> -		      port_name(intel_dig_port->port));

> +		      port_name(intel_dig_port->base.port));

>  

>  	if (!edp_have_panel_power(intel_dp))

>  		wait_panel_power_cycle(intel_dp);

> @@ -2094,7 +2094,7 @@ static bool edp_panel_vdd_on(struct intel_dp *intel_dp)

>  	 */

>  	if (!edp_have_panel_power(intel_dp)) {

>  		DRM_DEBUG_KMS("eDP port %c panel power wasn't enabled\n",

> -			      port_name(intel_dig_port->port));

> +			      port_name(intel_dig_port->base.port));

>  		msleep(intel_dp->panel_power_up_delay);

>  	}

>  

> @@ -2120,7 +2120,7 @@ void intel_edp_panel_vdd_on(struct intel_dp *intel_dp)

>  	pps_unlock(intel_dp);

>  

>  	I915_STATE_WARN(!vdd, "eDP port %c VDD already requested on\n",

> -	     port_name(dp_to_dig_port(intel_dp)->port));

> +	     port_name(dp_to_dig_port(intel_dp)->base.port));

>  }

>  

>  static void edp_panel_vdd_off_sync(struct intel_dp *intel_dp)

> @@ -2140,7 +2140,7 @@ static void edp_panel_vdd_off_sync(struct intel_dp *intel_dp)

>  		return;

>  

>  	DRM_DEBUG_KMS("Turning eDP port %c VDD off\n",

> -		      port_name(intel_dig_port->port));

> +		      port_name(intel_dig_port->base.port));

>  

>  	pp = ironlake_get_pp_control(intel_dp);

>  	pp &= ~EDP_FORCE_VDD;

> @@ -2200,7 +2200,7 @@ static void edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)

>  		return;

>  

>  	I915_STATE_WARN(!intel_dp->want_panel_vdd, "eDP port %c VDD not forced on",

> -	     port_name(dp_to_dig_port(intel_dp)->port));

> +	     port_name(dp_to_dig_port(intel_dp)->base.port));

>  

>  	intel_dp->want_panel_vdd = false;

>  

> @@ -2223,11 +2223,11 @@ static void edp_panel_on(struct intel_dp *intel_dp)

>  		return;

>  

>  	DRM_DEBUG_KMS("Turn eDP port %c panel power on\n",

> -		      port_name(dp_to_dig_port(intel_dp)->port));

> +		      port_name(dp_to_dig_port(intel_dp)->base.port));

>  

>  	if (WARN(edp_have_panel_power(intel_dp),

>  		 "eDP port %c panel power already on\n",

> -		 port_name(dp_to_dig_port(intel_dp)->port)))

> +		 port_name(dp_to_dig_port(intel_dp)->base.port)))

>  		return;

>  

>  	wait_panel_power_cycle(intel_dp);

> @@ -2282,10 +2282,10 @@ static void edp_panel_off(struct intel_dp *intel_dp)

>  		return;

>  

>  	DRM_DEBUG_KMS("Turn eDP port %c panel power off\n",

> -		      port_name(dp_to_dig_port(intel_dp)->port));

> +		      port_name(dp_to_dig_port(intel_dp)->base.port));

>  

>  	WARN(!intel_dp->want_panel_vdd, "Need eDP port %c VDD to turn off panel\n",

> -	     port_name(dp_to_dig_port(intel_dp)->port));

> +	     port_name(dp_to_dig_port(intel_dp)->base.port));

>  

>  	pp = ironlake_get_pp_control(intel_dp);

>  	/* We need to switch off panel power _and_ force vdd, for otherwise some

> @@ -2437,7 +2437,7 @@ static void assert_dp_port(struct intel_dp *intel_dp, bool state)

>  

>  	I915_STATE_WARN(cur_state != state,

>  			"DP port %c state assertion failure (expected %s, current %s)\n",

> -			port_name(dig_port->port),

> +			port_name(dig_port->base.port),

>  			onoff(state), onoff(cur_state));

>  }

>  #define assert_dp_port_disabled(d) assert_dp_port((d), false)

> @@ -2570,7 +2570,7 @@ static bool intel_dp_get_hw_state(struct intel_encoder *encoder,

>  				  enum pipe *pipe)

>  {

>  	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);

> -	enum port port = dp_to_dig_port(intel_dp)->port;

> +	enum port port = dp_to_dig_port(intel_dp)->base.port;

>  	struct drm_device *dev = encoder->base.dev;

>  	struct drm_i915_private *dev_priv = to_i915(dev);

>  	u32 tmp;

> @@ -2625,7 +2625,7 @@ static void intel_dp_get_config(struct intel_encoder *encoder,

>  	u32 tmp, flags = 0;

>  	struct drm_device *dev = encoder->base.dev;

>  	struct drm_i915_private *dev_priv = to_i915(dev);

> -	enum port port = dp_to_dig_port(intel_dp)->port;

> +	enum port port = dp_to_dig_port(intel_dp)->base.port;

>  	struct intel_crtc *crtc = to_intel_crtc(pipe_config->base.crtc);

>  

>  	if (encoder->type == INTEL_OUTPUT_EDP)

> @@ -2794,7 +2794,7 @@ _intel_dp_set_link_train(struct intel_dp *intel_dp,

>  	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);

>  	struct drm_device *dev = intel_dig_port->base.base.dev;

>  	struct drm_i915_private *dev_priv = to_i915(dev);

> -	enum port port = intel_dig_port->port;

> +	enum port port = intel_dig_port->base.port;

>  

>  	if (dp_train_pat & DP_TRAINING_PATTERN_MASK)

>  		DRM_DEBUG_KMS("Using DP training pattern TPS%d\n",

> @@ -2969,7 +2969,7 @@ static void g4x_pre_enable_dp(struct intel_encoder *encoder,

>  			      const struct drm_connector_state *conn_state)

>  {

>  	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);

> -	enum port port = dp_to_dig_port(intel_dp)->port;

> +	enum port port = dp_to_dig_port(intel_dp)->base.port;

>  

>  	intel_dp_prepare(encoder, pipe_config);

>  

> @@ -3002,7 +3002,7 @@ static void vlv_detach_power_sequencer(struct intel_dp *intel_dp)

>  	 * from a port.

>  	 */

>  	DRM_DEBUG_KMS("detaching pipe %c power sequencer from port %c\n",

> -		      pipe_name(pipe), port_name(intel_dig_port->port));

> +		      pipe_name(pipe), port_name(intel_dig_port->base.port));

>  	I915_WRITE(pp_on_reg, 0);

>  	POSTING_READ(pp_on_reg);

>  

> @@ -3026,7 +3026,7 @@ static void vlv_steal_power_sequencer(struct drm_device *dev,

>  			continue;

>  

>  		intel_dp = enc_to_intel_dp(&encoder->base);

> -		port = dp_to_dig_port(intel_dp)->port;

> +		port = dp_to_dig_port(intel_dp)->base.port;

>  

>  		WARN(intel_dp->active_pipe == pipe,

>  		     "stealing pipe %c power sequencer from active (e)DP port %c\n",

> @@ -3178,7 +3178,7 @@ uint8_t

>  intel_dp_voltage_max(struct intel_dp *intel_dp)

>  {

>  	struct drm_i915_private *dev_priv = to_i915(intel_dp_to_dev(intel_dp));

> -	enum port port = dp_to_dig_port(intel_dp)->port;

> +	enum port port = dp_to_dig_port(intel_dp)->base.port;

>  

>  	if (INTEL_GEN(dev_priv) >= 9) {

>  		struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;

> @@ -3197,7 +3197,7 @@ uint8_t

>  intel_dp_pre_emphasis_max(struct intel_dp *intel_dp, uint8_t voltage_swing)

>  {

>  	struct drm_i915_private *dev_priv = to_i915(intel_dp_to_dev(intel_dp));

> -	enum port port = dp_to_dig_port(intel_dp)->port;

> +	enum port port = dp_to_dig_port(intel_dp)->base.port;

>  

>  	if (INTEL_GEN(dev_priv) >= 9) {

>  		switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {

> @@ -3531,7 +3531,7 @@ void

>  intel_dp_set_signal_levels(struct intel_dp *intel_dp)

>  {

>  	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);

> -	enum port port = intel_dig_port->port;

> +	enum port port = intel_dig_port->base.port;

>  	struct drm_device *dev = intel_dig_port->base.base.dev;

>  	struct drm_i915_private *dev_priv = to_i915(dev);

>  	uint32_t signal_levels, mask = 0;

> @@ -3591,7 +3591,7 @@ void intel_dp_set_idle_link_train(struct intel_dp *intel_dp)

>  	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);

>  	struct drm_device *dev = intel_dig_port->base.base.dev;

>  	struct drm_i915_private *dev_priv = to_i915(dev);

> -	enum port port = intel_dig_port->port;

> +	enum port port = intel_dig_port->base.port;

>  	uint32_t val;

>  

>  	if (!HAS_DDI(dev_priv))

> @@ -4490,7 +4490,7 @@ static bool ibx_digital_port_connected(struct drm_i915_private *dev_priv,

>  {

>  	u32 bit;

>  

> -	switch (port->port) {

> +	switch (port->base.port) {

>  	case PORT_B:

>  		bit = SDE_PORTB_HOTPLUG;

>  		break;

> @@ -4501,7 +4501,7 @@ static bool ibx_digital_port_connected(struct drm_i915_private *dev_priv,

>  		bit = SDE_PORTD_HOTPLUG;

>  		break;

>  	default:

> -		MISSING_CASE(port->port);

> +		MISSING_CASE(port->base.port);

>  		return false;

>  	}

>  

> @@ -4513,7 +4513,7 @@ static bool cpt_digital_port_connected(struct drm_i915_private *dev_priv,

>  {

>  	u32 bit;

>  

> -	switch (port->port) {

> +	switch (port->base.port) {

>  	case PORT_B:

>  		bit = SDE_PORTB_HOTPLUG_CPT;

>  		break;

> @@ -4524,7 +4524,7 @@ static bool cpt_digital_port_connected(struct drm_i915_private *dev_priv,

>  		bit = SDE_PORTD_HOTPLUG_CPT;

>  		break;

>  	default:

> -		MISSING_CASE(port->port);

> +		MISSING_CASE(port->base.port);

>  		return false;

>  	}

>  

> @@ -4536,7 +4536,7 @@ static bool spt_digital_port_connected(struct drm_i915_private *dev_priv,

>  {

>  	u32 bit;

>  

> -	switch (port->port) {

> +	switch (port->base.port) {

>  	case PORT_A:

>  		bit = SDE_PORTA_HOTPLUG_SPT;

>  		break;

> @@ -4555,7 +4555,7 @@ static bool g4x_digital_port_connected(struct drm_i915_private *dev_priv,

>  {

>  	u32 bit;

>  

> -	switch (port->port) {

> +	switch (port->base.port) {

>  	case PORT_B:

>  		bit = PORTB_HOTPLUG_LIVE_STATUS_G4X;

>  		break;

> @@ -4566,7 +4566,7 @@ static bool g4x_digital_port_connected(struct drm_i915_private *dev_priv,

>  		bit = PORTD_HOTPLUG_LIVE_STATUS_G4X;

>  		break;

>  	default:

> -		MISSING_CASE(port->port);

> +		MISSING_CASE(port->base.port);

>  		return false;

>  	}

>  

> @@ -4578,7 +4578,7 @@ static bool gm45_digital_port_connected(struct drm_i915_private *dev_priv,

>  {

>  	u32 bit;

>  

> -	switch (port->port) {

> +	switch (port->base.port) {

>  	case PORT_B:

>  		bit = PORTB_HOTPLUG_LIVE_STATUS_GM45;

>  		break;

> @@ -4589,7 +4589,7 @@ static bool gm45_digital_port_connected(struct drm_i915_private *dev_priv,

>  		bit = PORTD_HOTPLUG_LIVE_STATUS_GM45;

>  		break;

>  	default:

> -		MISSING_CASE(port->port);

> +		MISSING_CASE(port->base.port);

>  		return false;

>  	}

>  

> @@ -4599,7 +4599,7 @@ static bool gm45_digital_port_connected(struct drm_i915_private *dev_priv,

>  static bool ilk_digital_port_connected(struct drm_i915_private *dev_priv,

>  				       struct intel_digital_port *port)

>  {

> -	if (port->port == PORT_A)

> +	if (port->base.port == PORT_A)

>  		return I915_READ(DEISR) & DE_DP_A_HOTPLUG;

>  	else

>  		return ibx_digital_port_connected(dev_priv, port);

> @@ -4608,7 +4608,7 @@ static bool ilk_digital_port_connected(struct drm_i915_private *dev_priv,

>  static bool snb_digital_port_connected(struct drm_i915_private *dev_priv,

>  				       struct intel_digital_port *port)

>  {

> -	if (port->port == PORT_A)

> +	if (port->base.port == PORT_A)

>  		return I915_READ(DEISR) & DE_DP_A_HOTPLUG;

>  	else

>  		return cpt_digital_port_connected(dev_priv, port);

> @@ -4617,7 +4617,7 @@ static bool snb_digital_port_connected(struct drm_i915_private *dev_priv,

>  static bool ivb_digital_port_connected(struct drm_i915_private *dev_priv,

>  				       struct intel_digital_port *port)

>  {

> -	if (port->port == PORT_A)

> +	if (port->base.port == PORT_A)

>  		return I915_READ(DEISR) & DE_DP_A_HOTPLUG_IVB;

>  	else

>  		return cpt_digital_port_connected(dev_priv, port);

> @@ -4626,7 +4626,7 @@ static bool ivb_digital_port_connected(struct drm_i915_private *dev_priv,

>  static bool bdw_digital_port_connected(struct drm_i915_private *dev_priv,

>  				       struct intel_digital_port *port)

>  {

> -	if (port->port == PORT_A)

> +	if (port->base.port == PORT_A)

>  		return I915_READ(GEN8_DE_PORT_ISR) & GEN8_PORT_DP_A_HOTPLUG;

>  	else

>  		return cpt_digital_port_connected(dev_priv, port);

> @@ -5109,12 +5109,12 @@ intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd)

>  		 * "vdd off -> long hpd -> vdd on -> detect -> vdd off -> ..."

>  		 */

>  		DRM_DEBUG_KMS("ignoring long hpd on eDP port %c\n",

> -			      port_name(intel_dig_port->port));

> +			      port_name(intel_dig_port->base.port));

>  		return IRQ_HANDLED;

>  	}

>  

>  	DRM_DEBUG_KMS("got hpd irq on port %c - %s\n",

> -		      port_name(intel_dig_port->port),

> +		      port_name(intel_dig_port->base.port),

>  		      long_hpd ? "long" : "short");

>  

>  	if (long_hpd) {

> @@ -5364,7 +5364,7 @@ intel_dp_init_panel_power_sequencer_registers(struct drm_device *dev,

>  	u32 pp_on, pp_off, pp_div, port_sel = 0;

>  	int div = dev_priv->rawclk_freq / 1000;

>  	struct pps_registers regs;

> -	enum port port = dp_to_dig_port(intel_dp)->port;

> +	enum port port = dp_to_dig_port(intel_dp)->base.port;

>  	const struct edp_power_seq *seq = &intel_dp->pps_delays;

>  

>  	lockdep_assert_held(&dev_priv->pps_mutex);

> @@ -5965,9 +5965,9 @@ intel_dp_init_connector_port_info(struct intel_digital_port *intel_dig_port)

>  	struct intel_encoder *encoder = &intel_dig_port->base;

>  	struct intel_dp *intel_dp = &intel_dig_port->dp;

>  

> -	encoder->hpd_pin = intel_hpd_pin(intel_dig_port->port);

> +	encoder->hpd_pin = intel_hpd_pin(encoder->port);

>  

> -	switch (intel_dig_port->port) {

> +	switch (encoder->port) {

>  	case PORT_A:

>  		intel_dp->aux_power_domain = POWER_DOMAIN_AUX_A;

>  		break;

> @@ -5985,7 +5985,7 @@ intel_dp_init_connector_port_info(struct intel_digital_port *intel_dig_port)

>  		intel_dp->aux_power_domain = POWER_DOMAIN_AUX_D;

>  		break;

>  	default:

> -		MISSING_CASE(intel_dig_port->port);

> +		MISSING_CASE(encoder->port);

>  	}

>  }

>  

> @@ -6021,7 +6021,7 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,

>  	struct intel_encoder *intel_encoder = &intel_dig_port->base;

>  	struct drm_device *dev = intel_encoder->base.dev;

>  	struct drm_i915_private *dev_priv = to_i915(dev);

> -	enum port port = intel_dig_port->port;

> +	enum port port = intel_encoder->port;

>  	int type;

>  

>  	/* Initialize the work for modeset in case of link train failure */

> @@ -6191,7 +6191,6 @@ bool intel_dp_init(struct drm_i915_private *dev_priv,

>  		intel_encoder->disable = g4x_disable_dp;

>  	}

>  

> -	intel_dig_port->port = port;

>  	intel_dig_port->dp.output_reg = output_reg;

>  	intel_dig_port->max_lanes = 4;

>  

> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c

> index 653ca39789b8..c3de0918ee13 100644

> --- a/drivers/gpu/drm/i915/intel_dp_mst.c

> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c

> @@ -209,7 +209,7 @@ static void intel_mst_pre_enable_dp(struct intel_encoder *encoder,

>  	struct intel_digital_port *intel_dig_port = intel_mst->primary;

>  	struct intel_dp *intel_dp = &intel_dig_port->dp;

>  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);

> -	enum port port = intel_dig_port->port;

> +	enum port port = intel_dig_port->base.port;

>  	struct intel_connector *connector =

>  		to_intel_connector(conn_state->connector);

>  	int ret;

> @@ -253,7 +253,7 @@ static void intel_mst_enable_dp(struct intel_encoder *encoder,

>  	struct intel_digital_port *intel_dig_port = intel_mst->primary;

>  	struct intel_dp *intel_dp = &intel_dig_port->dp;

>  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);

> -	enum port port = intel_dig_port->port;

> +	enum port port = intel_dig_port->base.port;

>  	int ret;

>  

>  	DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links);

> @@ -552,7 +552,7 @@ intel_dp_create_fake_mst_encoder(struct intel_digital_port *intel_dig_port, enum

>  

>  	intel_encoder->type = INTEL_OUTPUT_DP_MST;

>  	intel_encoder->power_domain = intel_dig_port->base.power_domain;

> -	intel_encoder->port = intel_dig_port->port;

> +	intel_encoder->port = intel_dig_port->base.port;

>  	intel_encoder->crtc_mask = 0x7;

>  	intel_encoder->cloneable = 0;

>  

> diff --git a/drivers/gpu/drm/i915/intel_dpio_phy.c b/drivers/gpu/drm/i915/intel_dpio_phy.c

> index 4f4a0bf12f8c..704041f70d93 100644

> --- a/drivers/gpu/drm/i915/intel_dpio_phy.c

> +++ b/drivers/gpu/drm/i915/intel_dpio_phy.c

> @@ -586,9 +586,8 @@ bxt_ddi_phy_calc_lane_lat_optim_mask(uint8_t lane_count)

>  void bxt_ddi_phy_set_lane_optim_mask(struct intel_encoder *encoder,

>  				     uint8_t lane_lat_optim_mask)

>  {

> -	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);

> -	struct drm_i915_private *dev_priv = to_i915(dport->base.base.dev);

> -	enum port port = dport->port;

> +	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);

> +	enum port port = encoder->port;

>  	enum dpio_phy phy;

>  	enum dpio_channel ch;

>  	int lane;

> @@ -613,9 +612,8 @@ void bxt_ddi_phy_set_lane_optim_mask(struct intel_encoder *encoder,

>  uint8_t

>  bxt_ddi_phy_get_lane_lat_optim_mask(struct intel_encoder *encoder)

>  {

> -	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);

> -	struct drm_i915_private *dev_priv = to_i915(dport->base.base.dev);

> -	enum port port = dport->port;

> +	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);

> +	enum port port = encoder->port;

>  	enum dpio_phy phy;

>  	enum dpio_channel ch;

>  	int lane;

> @@ -641,7 +639,7 @@ void chv_set_phy_signal_level(struct intel_encoder *encoder,

>  {

>  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);

>  	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);

> -	struct intel_crtc *intel_crtc = to_intel_crtc(dport->base.base.crtc);

> +	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);

>  	enum dpio_channel ch = vlv_dport_to_channel(dport);

>  	enum pipe pipe = intel_crtc->pipe;

>  	u32 val;

> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h

> index 00b488688042..a0a5cead868c 100644

> --- a/drivers/gpu/drm/i915/intel_drv.h

> +++ b/drivers/gpu/drm/i915/intel_drv.h

> @@ -1056,7 +1056,6 @@ struct intel_lspcon {

>  

>  struct intel_digital_port {

>  	struct intel_encoder base;

> -	enum port port;

>  	u32 saved_port_bits;

>  	struct intel_dp dp;

>  	struct intel_hdmi hdmi;

> @@ -1088,7 +1087,7 @@ struct intel_dp_mst_encoder {

>  static inline enum dpio_channel

>  vlv_dport_to_channel(struct intel_digital_port *dport)

>  {

> -	switch (dport->port) {

> +	switch (dport->base.port) {

>  	case PORT_B:

>  	case PORT_D:

>  		return DPIO_CH0;

> @@ -1102,7 +1101,7 @@ vlv_dport_to_channel(struct intel_digital_port *dport)

>  static inline enum dpio_phy

>  vlv_dport_to_phy(struct intel_digital_port *dport)

>  {

> -	switch (dport->port) {

> +	switch (dport->base.port) {

>  	case PORT_B:

>  	case PORT_C:

>  		return DPIO_PHY0;

> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c

> index 1f2258dec09e..2d95db64cdf2 100644

> --- a/drivers/gpu/drm/i915/intel_hdmi.c

> +++ b/drivers/gpu/drm/i915/intel_hdmi.c

> @@ -186,7 +186,7 @@ static bool g4x_infoframe_enabled(struct drm_encoder *encoder,

>  	if ((val & VIDEO_DIP_ENABLE) == 0)

>  		return false;

>  

> -	if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(intel_dig_port->port))

> +	if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(intel_dig_port->base.port))

>  		return false;

>  

>  	return val & (VIDEO_DIP_ENABLE_AVI |

> @@ -245,7 +245,7 @@ static bool ibx_infoframe_enabled(struct drm_encoder *encoder,

>  	if ((val & VIDEO_DIP_ENABLE) == 0)

>  		return false;

>  

> -	if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(intel_dig_port->port))

> +	if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(intel_dig_port->base.port))

>  		return false;

>  

>  	return val & (VIDEO_DIP_ENABLE_AVI |

> @@ -362,7 +362,7 @@ static bool vlv_infoframe_enabled(struct drm_encoder *encoder,

>  	if ((val & VIDEO_DIP_ENABLE) == 0)

>  		return false;

>  

> -	if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(intel_dig_port->port))

> +	if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(intel_dig_port->base.port))

>  		return false;

>  

>  	return val & (VIDEO_DIP_ENABLE_AVI |

> @@ -535,7 +535,7 @@ static void g4x_set_infoframes(struct drm_encoder *encoder,

>  	struct intel_hdmi *intel_hdmi = &intel_dig_port->hdmi;

>  	i915_reg_t reg = VIDEO_DIP_CTL;

>  	u32 val = I915_READ(reg);

> -	u32 port = VIDEO_DIP_PORT(intel_dig_port->port);

> +	u32 port = VIDEO_DIP_PORT(intel_dig_port->base.port);

>  

>  	assert_hdmi_port_disabled(intel_hdmi);

>  

> @@ -686,7 +686,7 @@ static void ibx_set_infoframes(struct drm_encoder *encoder,

>  	struct intel_hdmi *intel_hdmi = &intel_dig_port->hdmi;

>  	i915_reg_t reg = TVIDEO_DIP_CTL(intel_crtc->pipe);

>  	u32 val = I915_READ(reg);

> -	u32 port = VIDEO_DIP_PORT(intel_dig_port->port);

> +	u32 port = VIDEO_DIP_PORT(intel_dig_port->base.port);

>  

>  	assert_hdmi_port_disabled(intel_hdmi);

>  

> @@ -782,7 +782,7 @@ static void vlv_set_infoframes(struct drm_encoder *encoder,

>  	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);

>  	i915_reg_t reg = VLV_TVIDEO_DIP_CTL(intel_crtc->pipe);

>  	u32 val = I915_READ(reg);

> -	u32 port = VIDEO_DIP_PORT(intel_dig_port->port);

> +	u32 port = VIDEO_DIP_PORT(intel_dig_port->base.port);

>  

>  	assert_hdmi_port_disabled(intel_hdmi);

>  

> @@ -1545,7 +1545,7 @@ intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector, bool has_edid)

>  {

>  	struct drm_i915_private *dev_priv = to_i915(connector->dev);

>  	struct intel_hdmi *hdmi = intel_attached_hdmi(connector);

> -	enum port port = hdmi_to_dig_port(hdmi)->port;

> +	enum port port = hdmi_to_dig_port(hdmi)->base.port;

>  	struct i2c_adapter *adapter =

>  		intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);

>  	enum drm_dp_dual_mode_type type = drm_dp_dual_mode_detect(adapter);

> @@ -2015,7 +2015,7 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,

>  	struct intel_encoder *intel_encoder = &intel_dig_port->base;

>  	struct drm_device *dev = intel_encoder->base.dev;

>  	struct drm_i915_private *dev_priv = to_i915(dev);

> -	enum port port = intel_dig_port->port;

> +	enum port port = intel_encoder->port;

>  

>  	DRM_DEBUG_KMS("Adding HDMI connector on port %c\n",

>  		      port_name(port));

> @@ -2135,7 +2135,6 @@ void intel_hdmi_init(struct drm_i915_private *dev_priv,

>  	if (IS_G4X(dev_priv))

>  		intel_encoder->cloneable |= 1 << INTEL_OUTPUT_HDMI;

>  

> -	intel_dig_port->port = port;

>  	intel_dig_port->hdmi.hdmi_reg = hdmi_reg;

>  	intel_dig_port->dp.output_reg = INVALID_MMIO_REG;

>  	intel_dig_port->max_lanes = 4;

> diff --git a/drivers/gpu/drm/i915/intel_pipe_crc.c b/drivers/gpu/drm/i915/intel_pipe_crc.c

> index 899839f2f7c6..61641d479b93 100644

> --- a/drivers/gpu/drm/i915/intel_pipe_crc.c

> +++ b/drivers/gpu/drm/i915/intel_pipe_crc.c

> @@ -269,7 +269,7 @@ static int i9xx_pipe_crc_auto_source(struct drm_i915_private *dev_priv,

>  		case INTEL_OUTPUT_DP:

>  		case INTEL_OUTPUT_EDP:

>  			dig_port = enc_to_dig_port(&encoder->base);

This can be eliminated.
> -			switch (dig_port->port) {

> +			switch (dig_port->base.port) {

>  			case PORT_B:

>  				*source = INTEL_PIPE_CRC_SOURCE_DP_B;

>  				break;

> @@ -281,7 +281,7 @@ static int i9xx_pipe_crc_auto_source(struct drm_i915_private *dev_priv,

>  				break;

>  			default:

>  				WARN(1, "nonexisting DP port %c\n",

> -				     port_name(dig_port->port));

> +				     port_name(dig_port->base.port));

>  				break;

>  			}

>  			break;

> diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c

> index 6e3b430fccdc..a1ad85fa5c1a 100644

> --- a/drivers/gpu/drm/i915/intel_psr.c

> +++ b/drivers/gpu/drm/i915/intel_psr.c

> @@ -163,7 +163,7 @@ static void hsw_psr_enable_sink(struct intel_dp *intel_dp)

>  		[3] = 1 - 1,

>  		[4] = DP_SET_POWER_D0,

>  	};

> -	enum port port = dig_port->port;

> +	enum port port = dig_port->base.port;

>  	u32 aux_ctl;

>  	int i;

>  

> @@ -376,7 +376,7 @@ void intel_psr_compute_config(struct intel_dp *intel_dp,

>  	 * ones. Since by Display design transcoder EDP is tied to port A

>  	 * we can safely escape based on the port A.

>  	 */

> -	if (HAS_DDI(dev_priv) && dig_port->port != PORT_A) {

> +	if (HAS_DDI(dev_priv) && dig_port->base.port != PORT_A) {

>  		DRM_DEBUG_KMS("PSR condition failed: Port not supported\n");

>  		return;

>  	}
Ville Syrjälä Nov. 9, 2017, 1:50 p.m. UTC | #2
On Thu, Nov 09, 2017 at 01:37:48AM +0000, Pandiyan, Dhinakaran wrote:
> 
> On Tue, 2017-10-31 at 22:51 +0200, Ville Syrjala wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > 
> > Remove intel_digital_port->port and replace its users with
> > intel_encoder->port. intel_encoder->port is a superset of
> > intel_digital_port->port, and it works correctly even for
> > MST encoders.
> > 
> > Performed with cocci:
> > @@
> > @@
> > struct intel_digital_port {
> >        ...
> > -       enum port port;
> >        ...
> > }
> > 
> > @@
> > struct intel_digital_port *D;
> > expression E;
> > @@
> > - D->port = E;
> > 
> > @@
> > struct intel_digital_port *D;
> > @@
> > - D->port
> > + D->base.port
> > 
> > @@
> > expression E;
> > @@
> > (
> > - dp_to_dig_port(E)->port
> > + dp_to_dig_port(E)->base.port
> > |
> > - enc_to_dig_port(E)->port
> > + to_intel_encoder(E)->port
> > )
> > 
> > @@
> > expression E;
> > @@
> > - to_intel_encoder(&E->base)
> > + E
> > 
> > @@
> > struct intel_digital_port *D;
> > identifier I, M;
> > @@
> >   I = &D->base
> > <...
> > (
> > - D->base.M
> > + I->M
> > |
> > - &D->base
> > + I
> > )
> > ...>
> > 
> > @@
> > identifier D;
> > expression E;
> > identifier M;
> > @@
> >  D = enc_to_dig_port(&E->base)
> > <...
> > (
> > - D->base.M
> > + E->M
> > |
> > - &D->base
> > + E
> > )
> > ...>
> > 
> > @@
> > expression E;
> > identifier M;
> > @@
> > (
> > - enc_to_dig_port(&E->base)->base.M
> > + E->M
> > |
> > - enc_to_dig_port(&E->base)->base
> > + E
> > |
> > - enc_to_mst(&E->base)->primary->base.port
> > + E->port
> > )
> > 
> > @@
> > expression E;
> > identifier D;
> > @@
> > - struct intel_digital_port *D = E;
> > ... when != D
> > 
> 
> 
> The script has ended up creating intel_dig_port->base.port dereferences
> in some places where encoder->port was possible, but has worked pretty
> well otherwise.

I guess I missed some pattern in the cleanup. Hmm. I wonder if that
entire thing could be simplified a bit. I'll give it another try.

> 
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/i915_debugfs.c   |   2 +-
> >  drivers/gpu/drm/i915/intel_ddi.c      |  13 ++---
> >  drivers/gpu/drm/i915/intel_display.c  |  13 +++--
> >  drivers/gpu/drm/i915/intel_dp.c       | 103 +++++++++++++++++-----------------
> >  drivers/gpu/drm/i915/intel_dp_mst.c   |   6 +-
> >  drivers/gpu/drm/i915/intel_dpio_phy.c |  12 ++--
> >  drivers/gpu/drm/i915/intel_drv.h      |   5 +-
> >  drivers/gpu/drm/i915/intel_hdmi.c     |  17 +++---
> >  drivers/gpu/drm/i915/intel_pipe_crc.c |   4 +-
> >  drivers/gpu/drm/i915/intel_psr.c      |   4 +-
> >  10 files changed, 87 insertions(+), 92 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> > index 39883cd915db..d89321f0468c 100644
> > --- a/drivers/gpu/drm/i915/i915_debugfs.c
> > +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> > @@ -3603,7 +3603,7 @@ static int i915_dp_mst_info(struct seq_file *m, void *unused)
> >  			continue;
> >  
> >  		seq_printf(m, "MST Source Port %c\n",
> > -			   port_name(intel_dig_port->port));
> > +			   port_name(intel_dig_port->base.port));
> >  		drm_dp_mst_dump_topology(m, &intel_dig_port->dp.mst_mgr);
> >  	}
> >  	drm_connector_list_iter_end(&conn_iter);
> > diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> > index ace674cd79b9..65ab55496ab7 100644
> > --- a/drivers/gpu/drm/i915/intel_ddi.c
> > +++ b/drivers/gpu/drm/i915/intel_ddi.c
> > @@ -1801,8 +1801,8 @@ static void skl_ddi_set_iboost(struct intel_encoder *encoder,
> >  			       int level, enum intel_output_type type)
> >  {
> >  	struct intel_digital_port *intel_dig_port = enc_to_dig_port(&encoder->base);
> > -	struct drm_i915_private *dev_priv = to_i915(intel_dig_port->base.base.dev);
> > -	enum port port = intel_dig_port->port;
> > +	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> > +	enum port port = encoder->port;
> >  	uint8_t iboost;
> >  
> >  	if (type == INTEL_OUTPUT_HDMI)
> > @@ -2470,7 +2470,7 @@ void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp)
> >  	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
> >  	struct drm_i915_private *dev_priv =
> >  		to_i915(intel_dig_port->base.base.dev);
> > -	enum port port = intel_dig_port->port;
> > +	enum port port = intel_dig_port->base.port;
> >  	uint32_t val;
> >  	bool wait = false;
> >  
> > @@ -2698,7 +2698,7 @@ static struct intel_connector *
> >  intel_ddi_init_dp_connector(struct intel_digital_port *intel_dig_port)
> >  {
> >  	struct intel_connector *connector;
> > -	enum port port = intel_dig_port->port;
> > +	enum port port = intel_dig_port->base.port;
> >  
> >  	connector = intel_connector_alloc();
> >  	if (!connector)
> > @@ -2717,7 +2717,7 @@ static struct intel_connector *
> >  intel_ddi_init_hdmi_connector(struct intel_digital_port *intel_dig_port)
> >  {
> >  	struct intel_connector *connector;
> > -	enum port port = intel_dig_port->port;
> > +	enum port port = intel_dig_port->base.port;
> >  
> >  	connector = intel_connector_alloc();
> >  	if (!connector)
> > @@ -2733,7 +2733,7 @@ static bool intel_ddi_a_force_4_lanes(struct intel_digital_port *dport)
> >  {
> >  	struct drm_i915_private *dev_priv = to_i915(dport->base.base.dev);
> >  
> > -	if (dport->port != PORT_A)
> > +	if (dport->base.port != PORT_A)
> >  		return false;
> >  
> >  	if (dport->saved_port_bits & DDI_A_4_LANES)
> > @@ -2836,7 +2836,6 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
> >  	intel_encoder->suspend = intel_dp_encoder_suspend;
> >  	intel_encoder->get_power_domains = intel_ddi_get_power_domains;
> >  
> > -	intel_dig_port->port = port;
> >  	intel_dig_port->saved_port_bits = I915_READ(DDI_BUF_CTL(port)) &
> >  					  (DDI_BUF_PORT_REVERSAL |
> >  					   DDI_A_4_LANES);
> > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> > index 737de251d0f8..c75bcf989454 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -1703,7 +1703,7 @@ void vlv_wait_port_ready(struct drm_i915_private *dev_priv,
> >  	u32 port_mask;
> >  	i915_reg_t dpll_reg;
> >  
> > -	switch (dport->port) {
> > +	switch (dport->base.port) {
> >  	case PORT_B:
> >  		port_mask = DPLL_PORTB_READY_MASK;
> >  		dpll_reg = DPLL(0);
> > @@ -1725,7 +1725,8 @@ void vlv_wait_port_ready(struct drm_i915_private *dev_priv,
> >  				    dpll_reg, port_mask, expected_mask,
> >  				    1000))
> >  		WARN(1, "timed out waiting for port %c ready: got 0x%x, expected 0x%x\n",
> > -		     port_name(dport->port), I915_READ(dpll_reg) & port_mask, expected_mask);
> > +		     port_name(dport->base.port),
> > +		     I915_READ(dpll_reg) & port_mask, expected_mask);
> >  }
> >  
> >  static void ironlake_enable_pch_transcoder(struct drm_i915_private *dev_priv,
> > @@ -4482,7 +4483,7 @@ intel_trans_dp_port_sel(struct intel_crtc *crtc)
> >  	for_each_encoder_on_crtc(dev, &crtc->base, encoder) {
> >  		if (encoder->type == INTEL_OUTPUT_DP ||
> >  		    encoder->type == INTEL_OUTPUT_EDP)
> > -			return enc_to_dig_port(&encoder->base)->port;
> > +			return encoder->port;
> >  	}
> >  
> >  	return -1;
> > @@ -7633,7 +7634,7 @@ static void ironlake_init_pch_refclk(struct drm_i915_private *dev_priv)
> >  			break;
> >  		case INTEL_OUTPUT_EDP:
> >  			has_panel = true;
> > -			if (enc_to_dig_port(&encoder->base)->port == PORT_A)
> > +			if (encoder->port == PORT_A)
> >  				has_cpu_edp = true;
> >  			break;
> >  		default:
> > @@ -10756,7 +10757,7 @@ static bool check_digital_port_conflicts(struct drm_atomic_state *state)
> >  		case INTEL_OUTPUT_DP:
> >  		case INTEL_OUTPUT_HDMI:
> >  		case INTEL_OUTPUT_EDP:
> > -			port_mask = 1 << enc_to_dig_port(&encoder->base)->port;
> > +			port_mask = 1 << encoder->port;
> >  
> >  			/* the same port mustn't appear more than once */
> >  			if (used_ports & port_mask)
> > @@ -10766,7 +10767,7 @@ static bool check_digital_port_conflicts(struct drm_atomic_state *state)
> >  			break;
> >  		case INTEL_OUTPUT_DP_MST:
> >  			used_mst_ports |=
> > -				1 << enc_to_mst(&encoder->base)->primary->port;
> > +				1 << encoder->port;
> >  			break;
> >  		default:
> >  			break;
> > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> > index 0151c8d18b79..b81535fdef1d 100644
> > --- a/drivers/gpu/drm/i915/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > @@ -223,7 +223,7 @@ intel_dp_set_source_rates(struct intel_dp *intel_dp)
> >  {
> >  	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> >  	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
> > -	enum port port = dig_port->port;
> > +	enum port port = dig_port->base.port;
> >  	const int *source_rates;
> >  	int size;
> >  	u32 voltage;
> > @@ -479,11 +479,11 @@ vlv_power_sequencer_kick(struct intel_dp *intel_dp)
> >  
> >  	if (WARN(I915_READ(intel_dp->output_reg) & DP_PORT_EN,
> >  		 "skipping pipe %c power seqeuncer kick due to port %c being active\n",
> > -		 pipe_name(pipe), port_name(intel_dig_port->port)))
> > +		 pipe_name(pipe), port_name(intel_dig_port->base.port)))
> >  		return;
> >  
> >  	DRM_DEBUG_KMS("kicking pipe %c power sequencer for port %c\n",
> > -		      pipe_name(pipe), port_name(intel_dig_port->port));
> > +		      pipe_name(pipe), port_name(intel_dig_port->base.port));
> >  
> >  	/* Preserve the BIOS-computed detected bit. This is
> >  	 * supposed to be read-only.
> > @@ -610,7 +610,7 @@ vlv_power_sequencer_pipe(struct intel_dp *intel_dp)
> >  
> >  	DRM_DEBUG_KMS("picked pipe %c power sequencer for port %c\n",
> >  		      pipe_name(intel_dp->pps_pipe),
> > -		      port_name(intel_dig_port->port));
> > +		      port_name(intel_dig_port->base.port));
> >  
> >  	/* init power sequencer on this pipe and port */
> >  	intel_dp_init_panel_power_sequencer(dev, intel_dp);
> > @@ -706,7 +706,7 @@ vlv_initial_power_sequencer_setup(struct intel_dp *intel_dp)
> >  	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
> >  	struct drm_device *dev = intel_dig_port->base.base.dev;
> >  	struct drm_i915_private *dev_priv = to_i915(dev);
> > -	enum port port = intel_dig_port->port;
> > +	enum port port = intel_dig_port->base.port;
> >  
> >  	lockdep_assert_held(&dev_priv->pps_mutex);
> >  
> > @@ -966,7 +966,7 @@ static uint32_t ilk_get_aux_clock_divider(struct intel_dp *intel_dp, int index)
> >  	 * like to run at 2MHz.  So, take the cdclk or PCH rawclk value and
> >  	 * divide by 2000 and use that
> >  	 */
> > -	if (intel_dig_port->port == PORT_A)
> > +	if (intel_dig_port->base.port == PORT_A)
> >  		return DIV_ROUND_CLOSEST(dev_priv->cdclk.hw.cdclk, 2000);
> >  	else
> >  		return DIV_ROUND_CLOSEST(dev_priv->rawclk_freq, 2000);
> > @@ -977,7 +977,7 @@ static uint32_t hsw_get_aux_clock_divider(struct intel_dp *intel_dp, int index)
> >  	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
> >  	struct drm_i915_private *dev_priv = to_i915(intel_dig_port->base.base.dev);
> >  
> > -	if (intel_dig_port->port != PORT_A && HAS_PCH_LPT_H(dev_priv)) {
> > +	if (intel_dig_port->base.port != PORT_A && HAS_PCH_LPT_H(dev_priv)) {
> >  		/* Workaround for non-ULT HSW */
> >  		switch (index) {
> >  		case 0: return 63;
> > @@ -1447,7 +1447,7 @@ static void intel_aux_reg_init(struct intel_dp *intel_dp)
> >  {
> >  	struct drm_i915_private *dev_priv = to_i915(intel_dp_to_dev(intel_dp));
> >  	enum port port = intel_aux_port(dev_priv,
> > -					dp_to_dig_port(intel_dp)->port);
> > +					dp_to_dig_port(intel_dp)->base.port);
> >  	int i;
> >  
> >  	intel_dp->aux_ch_ctl_reg = intel_aux_ctl_reg(dev_priv, port);
> > @@ -1465,7 +1465,7 @@ static void
> >  intel_dp_aux_init(struct intel_dp *intel_dp)
> >  {
> >  	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
> > -	enum port port = intel_dig_port->port;
> > +	enum port port = intel_dig_port->base.port;
> >  
> >  	intel_aux_reg_init(intel_dp);
> >  	drm_dp_aux_init(&intel_dp->aux);
> > @@ -1635,7 +1635,7 @@ intel_dp_compute_config(struct intel_encoder *encoder,
> >  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> >  	struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode;
> >  	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
> > -	enum port port = dp_to_dig_port(intel_dp)->port;
> > +	enum port port = dp_to_dig_port(intel_dp)->base.port;
> 
> encoder->port 
> 
> >  	struct intel_crtc *intel_crtc = to_intel_crtc(pipe_config->base.crtc);
> >  	struct intel_connector *intel_connector = intel_dp->attached_connector;
> >  	struct intel_digital_connector_state *intel_conn_state =
> > @@ -1859,7 +1859,7 @@ static void intel_dp_prepare(struct intel_encoder *encoder,
> >  	struct drm_device *dev = encoder->base.dev;
> >  	struct drm_i915_private *dev_priv = to_i915(dev);
> >  	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
> > -	enum port port = dp_to_dig_port(intel_dp)->port;
> > +	enum port port = dp_to_dig_port(intel_dp)->base.port;
> 
> Same here.
> >  	struct intel_crtc *crtc = to_intel_crtc(pipe_config->base.crtc);
> >  	const struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode;
> >  
> > @@ -2074,7 +2074,7 @@ static bool edp_panel_vdd_on(struct intel_dp *intel_dp)
> >  	intel_display_power_get(dev_priv, intel_dp->aux_power_domain);
> >  
> >  	DRM_DEBUG_KMS("Turning eDP port %c VDD on\n",
> > -		      port_name(intel_dig_port->port));
> > +		      port_name(intel_dig_port->base.port));
> >  
> >  	if (!edp_have_panel_power(intel_dp))
> >  		wait_panel_power_cycle(intel_dp);
> > @@ -2094,7 +2094,7 @@ static bool edp_panel_vdd_on(struct intel_dp *intel_dp)
> >  	 */
> >  	if (!edp_have_panel_power(intel_dp)) {
> >  		DRM_DEBUG_KMS("eDP port %c panel power wasn't enabled\n",
> > -			      port_name(intel_dig_port->port));
> > +			      port_name(intel_dig_port->base.port));
> >  		msleep(intel_dp->panel_power_up_delay);
> >  	}
> >  
> > @@ -2120,7 +2120,7 @@ void intel_edp_panel_vdd_on(struct intel_dp *intel_dp)
> >  	pps_unlock(intel_dp);
> >  
> >  	I915_STATE_WARN(!vdd, "eDP port %c VDD already requested on\n",
> > -	     port_name(dp_to_dig_port(intel_dp)->port));
> > +	     port_name(dp_to_dig_port(intel_dp)->base.port));
> >  }
> >  
> >  static void edp_panel_vdd_off_sync(struct intel_dp *intel_dp)
> > @@ -2140,7 +2140,7 @@ static void edp_panel_vdd_off_sync(struct intel_dp *intel_dp)
> >  		return;
> >  
> >  	DRM_DEBUG_KMS("Turning eDP port %c VDD off\n",
> > -		      port_name(intel_dig_port->port));
> > +		      port_name(intel_dig_port->base.port));
> >  
> >  	pp = ironlake_get_pp_control(intel_dp);
> >  	pp &= ~EDP_FORCE_VDD;
> > @@ -2200,7 +2200,7 @@ static void edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
> >  		return;
> >  
> >  	I915_STATE_WARN(!intel_dp->want_panel_vdd, "eDP port %c VDD not forced on",
> > -	     port_name(dp_to_dig_port(intel_dp)->port));
> > +	     port_name(dp_to_dig_port(intel_dp)->base.port));
> >  
> >  	intel_dp->want_panel_vdd = false;
> >  
> > @@ -2223,11 +2223,11 @@ static void edp_panel_on(struct intel_dp *intel_dp)
> >  		return;
> >  
> >  	DRM_DEBUG_KMS("Turn eDP port %c panel power on\n",
> > -		      port_name(dp_to_dig_port(intel_dp)->port));
> > +		      port_name(dp_to_dig_port(intel_dp)->base.port));
> >  
> >  	if (WARN(edp_have_panel_power(intel_dp),
> >  		 "eDP port %c panel power already on\n",
> > -		 port_name(dp_to_dig_port(intel_dp)->port)))
> > +		 port_name(dp_to_dig_port(intel_dp)->base.port)))
> >  		return;
> >  
> >  	wait_panel_power_cycle(intel_dp);
> > @@ -2282,10 +2282,10 @@ static void edp_panel_off(struct intel_dp *intel_dp)
> >  		return;
> >  
> >  	DRM_DEBUG_KMS("Turn eDP port %c panel power off\n",
> > -		      port_name(dp_to_dig_port(intel_dp)->port));
> > +		      port_name(dp_to_dig_port(intel_dp)->base.port));
> >  
> >  	WARN(!intel_dp->want_panel_vdd, "Need eDP port %c VDD to turn off panel\n",
> > -	     port_name(dp_to_dig_port(intel_dp)->port));
> > +	     port_name(dp_to_dig_port(intel_dp)->base.port));
> >  
> >  	pp = ironlake_get_pp_control(intel_dp);
> >  	/* We need to switch off panel power _and_ force vdd, for otherwise some
> > @@ -2437,7 +2437,7 @@ static void assert_dp_port(struct intel_dp *intel_dp, bool state)
> >  
> >  	I915_STATE_WARN(cur_state != state,
> >  			"DP port %c state assertion failure (expected %s, current %s)\n",
> > -			port_name(dig_port->port),
> > +			port_name(dig_port->base.port),
> >  			onoff(state), onoff(cur_state));
> >  }
> >  #define assert_dp_port_disabled(d) assert_dp_port((d), false)
> > @@ -2570,7 +2570,7 @@ static bool intel_dp_get_hw_state(struct intel_encoder *encoder,
> >  				  enum pipe *pipe)
> >  {
> >  	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
> > -	enum port port = dp_to_dig_port(intel_dp)->port;
> > +	enum port port = dp_to_dig_port(intel_dp)->base.port;
> >  	struct drm_device *dev = encoder->base.dev;
> >  	struct drm_i915_private *dev_priv = to_i915(dev);
> >  	u32 tmp;
> > @@ -2625,7 +2625,7 @@ static void intel_dp_get_config(struct intel_encoder *encoder,
> >  	u32 tmp, flags = 0;
> >  	struct drm_device *dev = encoder->base.dev;
> >  	struct drm_i915_private *dev_priv = to_i915(dev);
> > -	enum port port = dp_to_dig_port(intel_dp)->port;
> > +	enum port port = dp_to_dig_port(intel_dp)->base.port;
> >  	struct intel_crtc *crtc = to_intel_crtc(pipe_config->base.crtc);
> >  
> >  	if (encoder->type == INTEL_OUTPUT_EDP)
> > @@ -2794,7 +2794,7 @@ _intel_dp_set_link_train(struct intel_dp *intel_dp,
> >  	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
> >  	struct drm_device *dev = intel_dig_port->base.base.dev;
> >  	struct drm_i915_private *dev_priv = to_i915(dev);
> > -	enum port port = intel_dig_port->port;
> > +	enum port port = intel_dig_port->base.port;
> >  
> >  	if (dp_train_pat & DP_TRAINING_PATTERN_MASK)
> >  		DRM_DEBUG_KMS("Using DP training pattern TPS%d\n",
> > @@ -2969,7 +2969,7 @@ static void g4x_pre_enable_dp(struct intel_encoder *encoder,
> >  			      const struct drm_connector_state *conn_state)
> >  {
> >  	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
> > -	enum port port = dp_to_dig_port(intel_dp)->port;
> > +	enum port port = dp_to_dig_port(intel_dp)->base.port;
> >  
> >  	intel_dp_prepare(encoder, pipe_config);
> >  
> > @@ -3002,7 +3002,7 @@ static void vlv_detach_power_sequencer(struct intel_dp *intel_dp)
> >  	 * from a port.
> >  	 */
> >  	DRM_DEBUG_KMS("detaching pipe %c power sequencer from port %c\n",
> > -		      pipe_name(pipe), port_name(intel_dig_port->port));
> > +		      pipe_name(pipe), port_name(intel_dig_port->base.port));
> >  	I915_WRITE(pp_on_reg, 0);
> >  	POSTING_READ(pp_on_reg);
> >  
> > @@ -3026,7 +3026,7 @@ static void vlv_steal_power_sequencer(struct drm_device *dev,
> >  			continue;
> >  
> >  		intel_dp = enc_to_intel_dp(&encoder->base);
> > -		port = dp_to_dig_port(intel_dp)->port;
> > +		port = dp_to_dig_port(intel_dp)->base.port;
> >  
> >  		WARN(intel_dp->active_pipe == pipe,
> >  		     "stealing pipe %c power sequencer from active (e)DP port %c\n",
> > @@ -3178,7 +3178,7 @@ uint8_t
> >  intel_dp_voltage_max(struct intel_dp *intel_dp)
> >  {
> >  	struct drm_i915_private *dev_priv = to_i915(intel_dp_to_dev(intel_dp));
> > -	enum port port = dp_to_dig_port(intel_dp)->port;
> > +	enum port port = dp_to_dig_port(intel_dp)->base.port;
> >  
> >  	if (INTEL_GEN(dev_priv) >= 9) {
> >  		struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
> > @@ -3197,7 +3197,7 @@ uint8_t
> >  intel_dp_pre_emphasis_max(struct intel_dp *intel_dp, uint8_t voltage_swing)
> >  {
> >  	struct drm_i915_private *dev_priv = to_i915(intel_dp_to_dev(intel_dp));
> > -	enum port port = dp_to_dig_port(intel_dp)->port;
> > +	enum port port = dp_to_dig_port(intel_dp)->base.port;
> >  
> >  	if (INTEL_GEN(dev_priv) >= 9) {
> >  		switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {
> > @@ -3531,7 +3531,7 @@ void
> >  intel_dp_set_signal_levels(struct intel_dp *intel_dp)
> >  {
> >  	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
> > -	enum port port = intel_dig_port->port;
> > +	enum port port = intel_dig_port->base.port;
> >  	struct drm_device *dev = intel_dig_port->base.base.dev;
> >  	struct drm_i915_private *dev_priv = to_i915(dev);
> >  	uint32_t signal_levels, mask = 0;
> > @@ -3591,7 +3591,7 @@ void intel_dp_set_idle_link_train(struct intel_dp *intel_dp)
> >  	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
> >  	struct drm_device *dev = intel_dig_port->base.base.dev;
> >  	struct drm_i915_private *dev_priv = to_i915(dev);
> > -	enum port port = intel_dig_port->port;
> > +	enum port port = intel_dig_port->base.port;
> >  	uint32_t val;
> >  
> >  	if (!HAS_DDI(dev_priv))
> > @@ -4490,7 +4490,7 @@ static bool ibx_digital_port_connected(struct drm_i915_private *dev_priv,
> >  {
> >  	u32 bit;
> >  
> > -	switch (port->port) {
> > +	switch (port->base.port) {
> >  	case PORT_B:
> >  		bit = SDE_PORTB_HOTPLUG;
> >  		break;
> > @@ -4501,7 +4501,7 @@ static bool ibx_digital_port_connected(struct drm_i915_private *dev_priv,
> >  		bit = SDE_PORTD_HOTPLUG;
> >  		break;
> >  	default:
> > -		MISSING_CASE(port->port);
> > +		MISSING_CASE(port->base.port);
> >  		return false;
> >  	}
> >  
> > @@ -4513,7 +4513,7 @@ static bool cpt_digital_port_connected(struct drm_i915_private *dev_priv,
> >  {
> >  	u32 bit;
> >  
> > -	switch (port->port) {
> > +	switch (port->base.port) {
> >  	case PORT_B:
> >  		bit = SDE_PORTB_HOTPLUG_CPT;
> >  		break;
> > @@ -4524,7 +4524,7 @@ static bool cpt_digital_port_connected(struct drm_i915_private *dev_priv,
> >  		bit = SDE_PORTD_HOTPLUG_CPT;
> >  		break;
> >  	default:
> > -		MISSING_CASE(port->port);
> > +		MISSING_CASE(port->base.port);
> >  		return false;
> >  	}
> >  
> > @@ -4536,7 +4536,7 @@ static bool spt_digital_port_connected(struct drm_i915_private *dev_priv,
> >  {
> >  	u32 bit;
> >  
> > -	switch (port->port) {
> > +	switch (port->base.port) {
> >  	case PORT_A:
> >  		bit = SDE_PORTA_HOTPLUG_SPT;
> >  		break;
> > @@ -4555,7 +4555,7 @@ static bool g4x_digital_port_connected(struct drm_i915_private *dev_priv,
> >  {
> >  	u32 bit;
> >  
> > -	switch (port->port) {
> > +	switch (port->base.port) {
> >  	case PORT_B:
> >  		bit = PORTB_HOTPLUG_LIVE_STATUS_G4X;
> >  		break;
> > @@ -4566,7 +4566,7 @@ static bool g4x_digital_port_connected(struct drm_i915_private *dev_priv,
> >  		bit = PORTD_HOTPLUG_LIVE_STATUS_G4X;
> >  		break;
> >  	default:
> > -		MISSING_CASE(port->port);
> > +		MISSING_CASE(port->base.port);
> >  		return false;
> >  	}
> >  
> > @@ -4578,7 +4578,7 @@ static bool gm45_digital_port_connected(struct drm_i915_private *dev_priv,
> >  {
> >  	u32 bit;
> >  
> > -	switch (port->port) {
> > +	switch (port->base.port) {
> >  	case PORT_B:
> >  		bit = PORTB_HOTPLUG_LIVE_STATUS_GM45;
> >  		break;
> > @@ -4589,7 +4589,7 @@ static bool gm45_digital_port_connected(struct drm_i915_private *dev_priv,
> >  		bit = PORTD_HOTPLUG_LIVE_STATUS_GM45;
> >  		break;
> >  	default:
> > -		MISSING_CASE(port->port);
> > +		MISSING_CASE(port->base.port);
> >  		return false;
> >  	}
> >  
> > @@ -4599,7 +4599,7 @@ static bool gm45_digital_port_connected(struct drm_i915_private *dev_priv,
> >  static bool ilk_digital_port_connected(struct drm_i915_private *dev_priv,
> >  				       struct intel_digital_port *port)
> >  {
> > -	if (port->port == PORT_A)
> > +	if (port->base.port == PORT_A)
> >  		return I915_READ(DEISR) & DE_DP_A_HOTPLUG;
> >  	else
> >  		return ibx_digital_port_connected(dev_priv, port);
> > @@ -4608,7 +4608,7 @@ static bool ilk_digital_port_connected(struct drm_i915_private *dev_priv,
> >  static bool snb_digital_port_connected(struct drm_i915_private *dev_priv,
> >  				       struct intel_digital_port *port)
> >  {
> > -	if (port->port == PORT_A)
> > +	if (port->base.port == PORT_A)
> >  		return I915_READ(DEISR) & DE_DP_A_HOTPLUG;
> >  	else
> >  		return cpt_digital_port_connected(dev_priv, port);
> > @@ -4617,7 +4617,7 @@ static bool snb_digital_port_connected(struct drm_i915_private *dev_priv,
> >  static bool ivb_digital_port_connected(struct drm_i915_private *dev_priv,
> >  				       struct intel_digital_port *port)
> >  {
> > -	if (port->port == PORT_A)
> > +	if (port->base.port == PORT_A)
> >  		return I915_READ(DEISR) & DE_DP_A_HOTPLUG_IVB;
> >  	else
> >  		return cpt_digital_port_connected(dev_priv, port);
> > @@ -4626,7 +4626,7 @@ static bool ivb_digital_port_connected(struct drm_i915_private *dev_priv,
> >  static bool bdw_digital_port_connected(struct drm_i915_private *dev_priv,
> >  				       struct intel_digital_port *port)
> >  {
> > -	if (port->port == PORT_A)
> > +	if (port->base.port == PORT_A)
> >  		return I915_READ(GEN8_DE_PORT_ISR) & GEN8_PORT_DP_A_HOTPLUG;
> >  	else
> >  		return cpt_digital_port_connected(dev_priv, port);
> > @@ -5109,12 +5109,12 @@ intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd)
> >  		 * "vdd off -> long hpd -> vdd on -> detect -> vdd off -> ..."
> >  		 */
> >  		DRM_DEBUG_KMS("ignoring long hpd on eDP port %c\n",
> > -			      port_name(intel_dig_port->port));
> > +			      port_name(intel_dig_port->base.port));
> >  		return IRQ_HANDLED;
> >  	}
> >  
> >  	DRM_DEBUG_KMS("got hpd irq on port %c - %s\n",
> > -		      port_name(intel_dig_port->port),
> > +		      port_name(intel_dig_port->base.port),
> >  		      long_hpd ? "long" : "short");
> >  
> >  	if (long_hpd) {
> > @@ -5364,7 +5364,7 @@ intel_dp_init_panel_power_sequencer_registers(struct drm_device *dev,
> >  	u32 pp_on, pp_off, pp_div, port_sel = 0;
> >  	int div = dev_priv->rawclk_freq / 1000;
> >  	struct pps_registers regs;
> > -	enum port port = dp_to_dig_port(intel_dp)->port;
> > +	enum port port = dp_to_dig_port(intel_dp)->base.port;
> >  	const struct edp_power_seq *seq = &intel_dp->pps_delays;
> >  
> >  	lockdep_assert_held(&dev_priv->pps_mutex);
> > @@ -5965,9 +5965,9 @@ intel_dp_init_connector_port_info(struct intel_digital_port *intel_dig_port)
> >  	struct intel_encoder *encoder = &intel_dig_port->base;
> >  	struct intel_dp *intel_dp = &intel_dig_port->dp;
> >  
> > -	encoder->hpd_pin = intel_hpd_pin(intel_dig_port->port);
> > +	encoder->hpd_pin = intel_hpd_pin(encoder->port);
> >  
> > -	switch (intel_dig_port->port) {
> > +	switch (encoder->port) {
> >  	case PORT_A:
> >  		intel_dp->aux_power_domain = POWER_DOMAIN_AUX_A;
> >  		break;
> > @@ -5985,7 +5985,7 @@ intel_dp_init_connector_port_info(struct intel_digital_port *intel_dig_port)
> >  		intel_dp->aux_power_domain = POWER_DOMAIN_AUX_D;
> >  		break;
> >  	default:
> > -		MISSING_CASE(intel_dig_port->port);
> > +		MISSING_CASE(encoder->port);
> >  	}
> >  }
> >  
> > @@ -6021,7 +6021,7 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
> >  	struct intel_encoder *intel_encoder = &intel_dig_port->base;
> >  	struct drm_device *dev = intel_encoder->base.dev;
> >  	struct drm_i915_private *dev_priv = to_i915(dev);
> > -	enum port port = intel_dig_port->port;
> > +	enum port port = intel_encoder->port;
> >  	int type;
> >  
> >  	/* Initialize the work for modeset in case of link train failure */
> > @@ -6191,7 +6191,6 @@ bool intel_dp_init(struct drm_i915_private *dev_priv,
> >  		intel_encoder->disable = g4x_disable_dp;
> >  	}
> >  
> > -	intel_dig_port->port = port;
> >  	intel_dig_port->dp.output_reg = output_reg;
> >  	intel_dig_port->max_lanes = 4;
> >  
> > diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> > index 653ca39789b8..c3de0918ee13 100644
> > --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> > +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> > @@ -209,7 +209,7 @@ static void intel_mst_pre_enable_dp(struct intel_encoder *encoder,
> >  	struct intel_digital_port *intel_dig_port = intel_mst->primary;
> >  	struct intel_dp *intel_dp = &intel_dig_port->dp;
> >  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> > -	enum port port = intel_dig_port->port;
> > +	enum port port = intel_dig_port->base.port;
> >  	struct intel_connector *connector =
> >  		to_intel_connector(conn_state->connector);
> >  	int ret;
> > @@ -253,7 +253,7 @@ static void intel_mst_enable_dp(struct intel_encoder *encoder,
> >  	struct intel_digital_port *intel_dig_port = intel_mst->primary;
> >  	struct intel_dp *intel_dp = &intel_dig_port->dp;
> >  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> > -	enum port port = intel_dig_port->port;
> > +	enum port port = intel_dig_port->base.port;
> >  	int ret;
> >  
> >  	DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links);
> > @@ -552,7 +552,7 @@ intel_dp_create_fake_mst_encoder(struct intel_digital_port *intel_dig_port, enum
> >  
> >  	intel_encoder->type = INTEL_OUTPUT_DP_MST;
> >  	intel_encoder->power_domain = intel_dig_port->base.power_domain;
> > -	intel_encoder->port = intel_dig_port->port;
> > +	intel_encoder->port = intel_dig_port->base.port;
> >  	intel_encoder->crtc_mask = 0x7;
> >  	intel_encoder->cloneable = 0;
> >  
> > diff --git a/drivers/gpu/drm/i915/intel_dpio_phy.c b/drivers/gpu/drm/i915/intel_dpio_phy.c
> > index 4f4a0bf12f8c..704041f70d93 100644
> > --- a/drivers/gpu/drm/i915/intel_dpio_phy.c
> > +++ b/drivers/gpu/drm/i915/intel_dpio_phy.c
> > @@ -586,9 +586,8 @@ bxt_ddi_phy_calc_lane_lat_optim_mask(uint8_t lane_count)
> >  void bxt_ddi_phy_set_lane_optim_mask(struct intel_encoder *encoder,
> >  				     uint8_t lane_lat_optim_mask)
> >  {
> > -	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
> > -	struct drm_i915_private *dev_priv = to_i915(dport->base.base.dev);
> > -	enum port port = dport->port;
> > +	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> > +	enum port port = encoder->port;
> >  	enum dpio_phy phy;
> >  	enum dpio_channel ch;
> >  	int lane;
> > @@ -613,9 +612,8 @@ void bxt_ddi_phy_set_lane_optim_mask(struct intel_encoder *encoder,
> >  uint8_t
> >  bxt_ddi_phy_get_lane_lat_optim_mask(struct intel_encoder *encoder)
> >  {
> > -	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
> > -	struct drm_i915_private *dev_priv = to_i915(dport->base.base.dev);
> > -	enum port port = dport->port;
> > +	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> > +	enum port port = encoder->port;
> >  	enum dpio_phy phy;
> >  	enum dpio_channel ch;
> >  	int lane;
> > @@ -641,7 +639,7 @@ void chv_set_phy_signal_level(struct intel_encoder *encoder,
> >  {
> >  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> >  	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
> > -	struct intel_crtc *intel_crtc = to_intel_crtc(dport->base.base.crtc);
> > +	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
> >  	enum dpio_channel ch = vlv_dport_to_channel(dport);
> >  	enum pipe pipe = intel_crtc->pipe;
> >  	u32 val;
> > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> > index 00b488688042..a0a5cead868c 100644
> > --- a/drivers/gpu/drm/i915/intel_drv.h
> > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > @@ -1056,7 +1056,6 @@ struct intel_lspcon {
> >  
> >  struct intel_digital_port {
> >  	struct intel_encoder base;
> > -	enum port port;
> >  	u32 saved_port_bits;
> >  	struct intel_dp dp;
> >  	struct intel_hdmi hdmi;
> > @@ -1088,7 +1087,7 @@ struct intel_dp_mst_encoder {
> >  static inline enum dpio_channel
> >  vlv_dport_to_channel(struct intel_digital_port *dport)
> >  {
> > -	switch (dport->port) {
> > +	switch (dport->base.port) {
> >  	case PORT_B:
> >  	case PORT_D:
> >  		return DPIO_CH0;
> > @@ -1102,7 +1101,7 @@ vlv_dport_to_channel(struct intel_digital_port *dport)
> >  static inline enum dpio_phy
> >  vlv_dport_to_phy(struct intel_digital_port *dport)
> >  {
> > -	switch (dport->port) {
> > +	switch (dport->base.port) {
> >  	case PORT_B:
> >  	case PORT_C:
> >  		return DPIO_PHY0;
> > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> > index 1f2258dec09e..2d95db64cdf2 100644
> > --- a/drivers/gpu/drm/i915/intel_hdmi.c
> > +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> > @@ -186,7 +186,7 @@ static bool g4x_infoframe_enabled(struct drm_encoder *encoder,
> >  	if ((val & VIDEO_DIP_ENABLE) == 0)
> >  		return false;
> >  
> > -	if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(intel_dig_port->port))
> > +	if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(intel_dig_port->base.port))
> >  		return false;
> >  
> >  	return val & (VIDEO_DIP_ENABLE_AVI |
> > @@ -245,7 +245,7 @@ static bool ibx_infoframe_enabled(struct drm_encoder *encoder,
> >  	if ((val & VIDEO_DIP_ENABLE) == 0)
> >  		return false;
> >  
> > -	if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(intel_dig_port->port))
> > +	if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(intel_dig_port->base.port))
> >  		return false;
> >  
> >  	return val & (VIDEO_DIP_ENABLE_AVI |
> > @@ -362,7 +362,7 @@ static bool vlv_infoframe_enabled(struct drm_encoder *encoder,
> >  	if ((val & VIDEO_DIP_ENABLE) == 0)
> >  		return false;
> >  
> > -	if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(intel_dig_port->port))
> > +	if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(intel_dig_port->base.port))
> >  		return false;
> >  
> >  	return val & (VIDEO_DIP_ENABLE_AVI |
> > @@ -535,7 +535,7 @@ static void g4x_set_infoframes(struct drm_encoder *encoder,
> >  	struct intel_hdmi *intel_hdmi = &intel_dig_port->hdmi;
> >  	i915_reg_t reg = VIDEO_DIP_CTL;
> >  	u32 val = I915_READ(reg);
> > -	u32 port = VIDEO_DIP_PORT(intel_dig_port->port);
> > +	u32 port = VIDEO_DIP_PORT(intel_dig_port->base.port);
> >  
> >  	assert_hdmi_port_disabled(intel_hdmi);
> >  
> > @@ -686,7 +686,7 @@ static void ibx_set_infoframes(struct drm_encoder *encoder,
> >  	struct intel_hdmi *intel_hdmi = &intel_dig_port->hdmi;
> >  	i915_reg_t reg = TVIDEO_DIP_CTL(intel_crtc->pipe);
> >  	u32 val = I915_READ(reg);
> > -	u32 port = VIDEO_DIP_PORT(intel_dig_port->port);
> > +	u32 port = VIDEO_DIP_PORT(intel_dig_port->base.port);
> >  
> >  	assert_hdmi_port_disabled(intel_hdmi);
> >  
> > @@ -782,7 +782,7 @@ static void vlv_set_infoframes(struct drm_encoder *encoder,
> >  	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
> >  	i915_reg_t reg = VLV_TVIDEO_DIP_CTL(intel_crtc->pipe);
> >  	u32 val = I915_READ(reg);
> > -	u32 port = VIDEO_DIP_PORT(intel_dig_port->port);
> > +	u32 port = VIDEO_DIP_PORT(intel_dig_port->base.port);
> >  
> >  	assert_hdmi_port_disabled(intel_hdmi);
> >  
> > @@ -1545,7 +1545,7 @@ intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector, bool has_edid)
> >  {
> >  	struct drm_i915_private *dev_priv = to_i915(connector->dev);
> >  	struct intel_hdmi *hdmi = intel_attached_hdmi(connector);
> > -	enum port port = hdmi_to_dig_port(hdmi)->port;
> > +	enum port port = hdmi_to_dig_port(hdmi)->base.port;
> >  	struct i2c_adapter *adapter =
> >  		intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
> >  	enum drm_dp_dual_mode_type type = drm_dp_dual_mode_detect(adapter);
> > @@ -2015,7 +2015,7 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
> >  	struct intel_encoder *intel_encoder = &intel_dig_port->base;
> >  	struct drm_device *dev = intel_encoder->base.dev;
> >  	struct drm_i915_private *dev_priv = to_i915(dev);
> > -	enum port port = intel_dig_port->port;
> > +	enum port port = intel_encoder->port;
> >  
> >  	DRM_DEBUG_KMS("Adding HDMI connector on port %c\n",
> >  		      port_name(port));
> > @@ -2135,7 +2135,6 @@ void intel_hdmi_init(struct drm_i915_private *dev_priv,
> >  	if (IS_G4X(dev_priv))
> >  		intel_encoder->cloneable |= 1 << INTEL_OUTPUT_HDMI;
> >  
> > -	intel_dig_port->port = port;
> >  	intel_dig_port->hdmi.hdmi_reg = hdmi_reg;
> >  	intel_dig_port->dp.output_reg = INVALID_MMIO_REG;
> >  	intel_dig_port->max_lanes = 4;
> > diff --git a/drivers/gpu/drm/i915/intel_pipe_crc.c b/drivers/gpu/drm/i915/intel_pipe_crc.c
> > index 899839f2f7c6..61641d479b93 100644
> > --- a/drivers/gpu/drm/i915/intel_pipe_crc.c
> > +++ b/drivers/gpu/drm/i915/intel_pipe_crc.c
> > @@ -269,7 +269,7 @@ static int i9xx_pipe_crc_auto_source(struct drm_i915_private *dev_priv,
> >  		case INTEL_OUTPUT_DP:
> >  		case INTEL_OUTPUT_EDP:
> >  			dig_port = enc_to_dig_port(&encoder->base);
> This can be eliminated.
> > -			switch (dig_port->port) {
> > +			switch (dig_port->base.port) {
> >  			case PORT_B:
> >  				*source = INTEL_PIPE_CRC_SOURCE_DP_B;
> >  				break;
> > @@ -281,7 +281,7 @@ static int i9xx_pipe_crc_auto_source(struct drm_i915_private *dev_priv,
> >  				break;
> >  			default:
> >  				WARN(1, "nonexisting DP port %c\n",
> > -				     port_name(dig_port->port));
> > +				     port_name(dig_port->base.port));
> >  				break;
> >  			}
> >  			break;
> > diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
> > index 6e3b430fccdc..a1ad85fa5c1a 100644
> > --- a/drivers/gpu/drm/i915/intel_psr.c
> > +++ b/drivers/gpu/drm/i915/intel_psr.c
> > @@ -163,7 +163,7 @@ static void hsw_psr_enable_sink(struct intel_dp *intel_dp)
> >  		[3] = 1 - 1,
> >  		[4] = DP_SET_POWER_D0,
> >  	};
> > -	enum port port = dig_port->port;
> > +	enum port port = dig_port->base.port;
> >  	u32 aux_ctl;
> >  	int i;
> >  
> > @@ -376,7 +376,7 @@ void intel_psr_compute_config(struct intel_dp *intel_dp,
> >  	 * ones. Since by Display design transcoder EDP is tied to port A
> >  	 * we can safely escape based on the port A.
> >  	 */
> > -	if (HAS_DDI(dev_priv) && dig_port->port != PORT_A) {
> > +	if (HAS_DDI(dev_priv) && dig_port->base.port != PORT_A) {
> >  		DRM_DEBUG_KMS("PSR condition failed: Port not supported\n");
> >  		return;
> >  	}
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 39883cd915db..d89321f0468c 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -3603,7 +3603,7 @@  static int i915_dp_mst_info(struct seq_file *m, void *unused)
 			continue;
 
 		seq_printf(m, "MST Source Port %c\n",
-			   port_name(intel_dig_port->port));
+			   port_name(intel_dig_port->base.port));
 		drm_dp_mst_dump_topology(m, &intel_dig_port->dp.mst_mgr);
 	}
 	drm_connector_list_iter_end(&conn_iter);
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index ace674cd79b9..65ab55496ab7 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -1801,8 +1801,8 @@  static void skl_ddi_set_iboost(struct intel_encoder *encoder,
 			       int level, enum intel_output_type type)
 {
 	struct intel_digital_port *intel_dig_port = enc_to_dig_port(&encoder->base);
-	struct drm_i915_private *dev_priv = to_i915(intel_dig_port->base.base.dev);
-	enum port port = intel_dig_port->port;
+	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
+	enum port port = encoder->port;
 	uint8_t iboost;
 
 	if (type == INTEL_OUTPUT_HDMI)
@@ -2470,7 +2470,7 @@  void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp)
 	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 	struct drm_i915_private *dev_priv =
 		to_i915(intel_dig_port->base.base.dev);
-	enum port port = intel_dig_port->port;
+	enum port port = intel_dig_port->base.port;
 	uint32_t val;
 	bool wait = false;
 
@@ -2698,7 +2698,7 @@  static struct intel_connector *
 intel_ddi_init_dp_connector(struct intel_digital_port *intel_dig_port)
 {
 	struct intel_connector *connector;
-	enum port port = intel_dig_port->port;
+	enum port port = intel_dig_port->base.port;
 
 	connector = intel_connector_alloc();
 	if (!connector)
@@ -2717,7 +2717,7 @@  static struct intel_connector *
 intel_ddi_init_hdmi_connector(struct intel_digital_port *intel_dig_port)
 {
 	struct intel_connector *connector;
-	enum port port = intel_dig_port->port;
+	enum port port = intel_dig_port->base.port;
 
 	connector = intel_connector_alloc();
 	if (!connector)
@@ -2733,7 +2733,7 @@  static bool intel_ddi_a_force_4_lanes(struct intel_digital_port *dport)
 {
 	struct drm_i915_private *dev_priv = to_i915(dport->base.base.dev);
 
-	if (dport->port != PORT_A)
+	if (dport->base.port != PORT_A)
 		return false;
 
 	if (dport->saved_port_bits & DDI_A_4_LANES)
@@ -2836,7 +2836,6 @@  void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
 	intel_encoder->suspend = intel_dp_encoder_suspend;
 	intel_encoder->get_power_domains = intel_ddi_get_power_domains;
 
-	intel_dig_port->port = port;
 	intel_dig_port->saved_port_bits = I915_READ(DDI_BUF_CTL(port)) &
 					  (DDI_BUF_PORT_REVERSAL |
 					   DDI_A_4_LANES);
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 737de251d0f8..c75bcf989454 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -1703,7 +1703,7 @@  void vlv_wait_port_ready(struct drm_i915_private *dev_priv,
 	u32 port_mask;
 	i915_reg_t dpll_reg;
 
-	switch (dport->port) {
+	switch (dport->base.port) {
 	case PORT_B:
 		port_mask = DPLL_PORTB_READY_MASK;
 		dpll_reg = DPLL(0);
@@ -1725,7 +1725,8 @@  void vlv_wait_port_ready(struct drm_i915_private *dev_priv,
 				    dpll_reg, port_mask, expected_mask,
 				    1000))
 		WARN(1, "timed out waiting for port %c ready: got 0x%x, expected 0x%x\n",
-		     port_name(dport->port), I915_READ(dpll_reg) & port_mask, expected_mask);
+		     port_name(dport->base.port),
+		     I915_READ(dpll_reg) & port_mask, expected_mask);
 }
 
 static void ironlake_enable_pch_transcoder(struct drm_i915_private *dev_priv,
@@ -4482,7 +4483,7 @@  intel_trans_dp_port_sel(struct intel_crtc *crtc)
 	for_each_encoder_on_crtc(dev, &crtc->base, encoder) {
 		if (encoder->type == INTEL_OUTPUT_DP ||
 		    encoder->type == INTEL_OUTPUT_EDP)
-			return enc_to_dig_port(&encoder->base)->port;
+			return encoder->port;
 	}
 
 	return -1;
@@ -7633,7 +7634,7 @@  static void ironlake_init_pch_refclk(struct drm_i915_private *dev_priv)
 			break;
 		case INTEL_OUTPUT_EDP:
 			has_panel = true;
-			if (enc_to_dig_port(&encoder->base)->port == PORT_A)
+			if (encoder->port == PORT_A)
 				has_cpu_edp = true;
 			break;
 		default:
@@ -10756,7 +10757,7 @@  static bool check_digital_port_conflicts(struct drm_atomic_state *state)
 		case INTEL_OUTPUT_DP:
 		case INTEL_OUTPUT_HDMI:
 		case INTEL_OUTPUT_EDP:
-			port_mask = 1 << enc_to_dig_port(&encoder->base)->port;
+			port_mask = 1 << encoder->port;
 
 			/* the same port mustn't appear more than once */
 			if (used_ports & port_mask)
@@ -10766,7 +10767,7 @@  static bool check_digital_port_conflicts(struct drm_atomic_state *state)
 			break;
 		case INTEL_OUTPUT_DP_MST:
 			used_mst_ports |=
-				1 << enc_to_mst(&encoder->base)->primary->port;
+				1 << encoder->port;
 			break;
 		default:
 			break;
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 0151c8d18b79..b81535fdef1d 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -223,7 +223,7 @@  intel_dp_set_source_rates(struct intel_dp *intel_dp)
 {
 	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
 	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
-	enum port port = dig_port->port;
+	enum port port = dig_port->base.port;
 	const int *source_rates;
 	int size;
 	u32 voltage;
@@ -479,11 +479,11 @@  vlv_power_sequencer_kick(struct intel_dp *intel_dp)
 
 	if (WARN(I915_READ(intel_dp->output_reg) & DP_PORT_EN,
 		 "skipping pipe %c power seqeuncer kick due to port %c being active\n",
-		 pipe_name(pipe), port_name(intel_dig_port->port)))
+		 pipe_name(pipe), port_name(intel_dig_port->base.port)))
 		return;
 
 	DRM_DEBUG_KMS("kicking pipe %c power sequencer for port %c\n",
-		      pipe_name(pipe), port_name(intel_dig_port->port));
+		      pipe_name(pipe), port_name(intel_dig_port->base.port));
 
 	/* Preserve the BIOS-computed detected bit. This is
 	 * supposed to be read-only.
@@ -610,7 +610,7 @@  vlv_power_sequencer_pipe(struct intel_dp *intel_dp)
 
 	DRM_DEBUG_KMS("picked pipe %c power sequencer for port %c\n",
 		      pipe_name(intel_dp->pps_pipe),
-		      port_name(intel_dig_port->port));
+		      port_name(intel_dig_port->base.port));
 
 	/* init power sequencer on this pipe and port */
 	intel_dp_init_panel_power_sequencer(dev, intel_dp);
@@ -706,7 +706,7 @@  vlv_initial_power_sequencer_setup(struct intel_dp *intel_dp)
 	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 	struct drm_device *dev = intel_dig_port->base.base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
-	enum port port = intel_dig_port->port;
+	enum port port = intel_dig_port->base.port;
 
 	lockdep_assert_held(&dev_priv->pps_mutex);
 
@@ -966,7 +966,7 @@  static uint32_t ilk_get_aux_clock_divider(struct intel_dp *intel_dp, int index)
 	 * like to run at 2MHz.  So, take the cdclk or PCH rawclk value and
 	 * divide by 2000 and use that
 	 */
-	if (intel_dig_port->port == PORT_A)
+	if (intel_dig_port->base.port == PORT_A)
 		return DIV_ROUND_CLOSEST(dev_priv->cdclk.hw.cdclk, 2000);
 	else
 		return DIV_ROUND_CLOSEST(dev_priv->rawclk_freq, 2000);
@@ -977,7 +977,7 @@  static uint32_t hsw_get_aux_clock_divider(struct intel_dp *intel_dp, int index)
 	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 	struct drm_i915_private *dev_priv = to_i915(intel_dig_port->base.base.dev);
 
-	if (intel_dig_port->port != PORT_A && HAS_PCH_LPT_H(dev_priv)) {
+	if (intel_dig_port->base.port != PORT_A && HAS_PCH_LPT_H(dev_priv)) {
 		/* Workaround for non-ULT HSW */
 		switch (index) {
 		case 0: return 63;
@@ -1447,7 +1447,7 @@  static void intel_aux_reg_init(struct intel_dp *intel_dp)
 {
 	struct drm_i915_private *dev_priv = to_i915(intel_dp_to_dev(intel_dp));
 	enum port port = intel_aux_port(dev_priv,
-					dp_to_dig_port(intel_dp)->port);
+					dp_to_dig_port(intel_dp)->base.port);
 	int i;
 
 	intel_dp->aux_ch_ctl_reg = intel_aux_ctl_reg(dev_priv, port);
@@ -1465,7 +1465,7 @@  static void
 intel_dp_aux_init(struct intel_dp *intel_dp)
 {
 	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
-	enum port port = intel_dig_port->port;
+	enum port port = intel_dig_port->base.port;
 
 	intel_aux_reg_init(intel_dp);
 	drm_dp_aux_init(&intel_dp->aux);
@@ -1635,7 +1635,7 @@  intel_dp_compute_config(struct intel_encoder *encoder,
 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 	struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode;
 	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
-	enum port port = dp_to_dig_port(intel_dp)->port;
+	enum port port = dp_to_dig_port(intel_dp)->base.port;
 	struct intel_crtc *intel_crtc = to_intel_crtc(pipe_config->base.crtc);
 	struct intel_connector *intel_connector = intel_dp->attached_connector;
 	struct intel_digital_connector_state *intel_conn_state =
@@ -1859,7 +1859,7 @@  static void intel_dp_prepare(struct intel_encoder *encoder,
 	struct drm_device *dev = encoder->base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
 	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
-	enum port port = dp_to_dig_port(intel_dp)->port;
+	enum port port = dp_to_dig_port(intel_dp)->base.port;
 	struct intel_crtc *crtc = to_intel_crtc(pipe_config->base.crtc);
 	const struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode;
 
@@ -2074,7 +2074,7 @@  static bool edp_panel_vdd_on(struct intel_dp *intel_dp)
 	intel_display_power_get(dev_priv, intel_dp->aux_power_domain);
 
 	DRM_DEBUG_KMS("Turning eDP port %c VDD on\n",
-		      port_name(intel_dig_port->port));
+		      port_name(intel_dig_port->base.port));
 
 	if (!edp_have_panel_power(intel_dp))
 		wait_panel_power_cycle(intel_dp);
@@ -2094,7 +2094,7 @@  static bool edp_panel_vdd_on(struct intel_dp *intel_dp)
 	 */
 	if (!edp_have_panel_power(intel_dp)) {
 		DRM_DEBUG_KMS("eDP port %c panel power wasn't enabled\n",
-			      port_name(intel_dig_port->port));
+			      port_name(intel_dig_port->base.port));
 		msleep(intel_dp->panel_power_up_delay);
 	}
 
@@ -2120,7 +2120,7 @@  void intel_edp_panel_vdd_on(struct intel_dp *intel_dp)
 	pps_unlock(intel_dp);
 
 	I915_STATE_WARN(!vdd, "eDP port %c VDD already requested on\n",
-	     port_name(dp_to_dig_port(intel_dp)->port));
+	     port_name(dp_to_dig_port(intel_dp)->base.port));
 }
 
 static void edp_panel_vdd_off_sync(struct intel_dp *intel_dp)
@@ -2140,7 +2140,7 @@  static void edp_panel_vdd_off_sync(struct intel_dp *intel_dp)
 		return;
 
 	DRM_DEBUG_KMS("Turning eDP port %c VDD off\n",
-		      port_name(intel_dig_port->port));
+		      port_name(intel_dig_port->base.port));
 
 	pp = ironlake_get_pp_control(intel_dp);
 	pp &= ~EDP_FORCE_VDD;
@@ -2200,7 +2200,7 @@  static void edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
 		return;
 
 	I915_STATE_WARN(!intel_dp->want_panel_vdd, "eDP port %c VDD not forced on",
-	     port_name(dp_to_dig_port(intel_dp)->port));
+	     port_name(dp_to_dig_port(intel_dp)->base.port));
 
 	intel_dp->want_panel_vdd = false;
 
@@ -2223,11 +2223,11 @@  static void edp_panel_on(struct intel_dp *intel_dp)
 		return;
 
 	DRM_DEBUG_KMS("Turn eDP port %c panel power on\n",
-		      port_name(dp_to_dig_port(intel_dp)->port));
+		      port_name(dp_to_dig_port(intel_dp)->base.port));
 
 	if (WARN(edp_have_panel_power(intel_dp),
 		 "eDP port %c panel power already on\n",
-		 port_name(dp_to_dig_port(intel_dp)->port)))
+		 port_name(dp_to_dig_port(intel_dp)->base.port)))
 		return;
 
 	wait_panel_power_cycle(intel_dp);
@@ -2282,10 +2282,10 @@  static void edp_panel_off(struct intel_dp *intel_dp)
 		return;
 
 	DRM_DEBUG_KMS("Turn eDP port %c panel power off\n",
-		      port_name(dp_to_dig_port(intel_dp)->port));
+		      port_name(dp_to_dig_port(intel_dp)->base.port));
 
 	WARN(!intel_dp->want_panel_vdd, "Need eDP port %c VDD to turn off panel\n",
-	     port_name(dp_to_dig_port(intel_dp)->port));
+	     port_name(dp_to_dig_port(intel_dp)->base.port));
 
 	pp = ironlake_get_pp_control(intel_dp);
 	/* We need to switch off panel power _and_ force vdd, for otherwise some
@@ -2437,7 +2437,7 @@  static void assert_dp_port(struct intel_dp *intel_dp, bool state)
 
 	I915_STATE_WARN(cur_state != state,
 			"DP port %c state assertion failure (expected %s, current %s)\n",
-			port_name(dig_port->port),
+			port_name(dig_port->base.port),
 			onoff(state), onoff(cur_state));
 }
 #define assert_dp_port_disabled(d) assert_dp_port((d), false)
@@ -2570,7 +2570,7 @@  static bool intel_dp_get_hw_state(struct intel_encoder *encoder,
 				  enum pipe *pipe)
 {
 	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
-	enum port port = dp_to_dig_port(intel_dp)->port;
+	enum port port = dp_to_dig_port(intel_dp)->base.port;
 	struct drm_device *dev = encoder->base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
 	u32 tmp;
@@ -2625,7 +2625,7 @@  static void intel_dp_get_config(struct intel_encoder *encoder,
 	u32 tmp, flags = 0;
 	struct drm_device *dev = encoder->base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
-	enum port port = dp_to_dig_port(intel_dp)->port;
+	enum port port = dp_to_dig_port(intel_dp)->base.port;
 	struct intel_crtc *crtc = to_intel_crtc(pipe_config->base.crtc);
 
 	if (encoder->type == INTEL_OUTPUT_EDP)
@@ -2794,7 +2794,7 @@  _intel_dp_set_link_train(struct intel_dp *intel_dp,
 	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 	struct drm_device *dev = intel_dig_port->base.base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
-	enum port port = intel_dig_port->port;
+	enum port port = intel_dig_port->base.port;
 
 	if (dp_train_pat & DP_TRAINING_PATTERN_MASK)
 		DRM_DEBUG_KMS("Using DP training pattern TPS%d\n",
@@ -2969,7 +2969,7 @@  static void g4x_pre_enable_dp(struct intel_encoder *encoder,
 			      const struct drm_connector_state *conn_state)
 {
 	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
-	enum port port = dp_to_dig_port(intel_dp)->port;
+	enum port port = dp_to_dig_port(intel_dp)->base.port;
 
 	intel_dp_prepare(encoder, pipe_config);
 
@@ -3002,7 +3002,7 @@  static void vlv_detach_power_sequencer(struct intel_dp *intel_dp)
 	 * from a port.
 	 */
 	DRM_DEBUG_KMS("detaching pipe %c power sequencer from port %c\n",
-		      pipe_name(pipe), port_name(intel_dig_port->port));
+		      pipe_name(pipe), port_name(intel_dig_port->base.port));
 	I915_WRITE(pp_on_reg, 0);
 	POSTING_READ(pp_on_reg);
 
@@ -3026,7 +3026,7 @@  static void vlv_steal_power_sequencer(struct drm_device *dev,
 			continue;
 
 		intel_dp = enc_to_intel_dp(&encoder->base);
-		port = dp_to_dig_port(intel_dp)->port;
+		port = dp_to_dig_port(intel_dp)->base.port;
 
 		WARN(intel_dp->active_pipe == pipe,
 		     "stealing pipe %c power sequencer from active (e)DP port %c\n",
@@ -3178,7 +3178,7 @@  uint8_t
 intel_dp_voltage_max(struct intel_dp *intel_dp)
 {
 	struct drm_i915_private *dev_priv = to_i915(intel_dp_to_dev(intel_dp));
-	enum port port = dp_to_dig_port(intel_dp)->port;
+	enum port port = dp_to_dig_port(intel_dp)->base.port;
 
 	if (INTEL_GEN(dev_priv) >= 9) {
 		struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
@@ -3197,7 +3197,7 @@  uint8_t
 intel_dp_pre_emphasis_max(struct intel_dp *intel_dp, uint8_t voltage_swing)
 {
 	struct drm_i915_private *dev_priv = to_i915(intel_dp_to_dev(intel_dp));
-	enum port port = dp_to_dig_port(intel_dp)->port;
+	enum port port = dp_to_dig_port(intel_dp)->base.port;
 
 	if (INTEL_GEN(dev_priv) >= 9) {
 		switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {
@@ -3531,7 +3531,7 @@  void
 intel_dp_set_signal_levels(struct intel_dp *intel_dp)
 {
 	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
-	enum port port = intel_dig_port->port;
+	enum port port = intel_dig_port->base.port;
 	struct drm_device *dev = intel_dig_port->base.base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
 	uint32_t signal_levels, mask = 0;
@@ -3591,7 +3591,7 @@  void intel_dp_set_idle_link_train(struct intel_dp *intel_dp)
 	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 	struct drm_device *dev = intel_dig_port->base.base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
-	enum port port = intel_dig_port->port;
+	enum port port = intel_dig_port->base.port;
 	uint32_t val;
 
 	if (!HAS_DDI(dev_priv))
@@ -4490,7 +4490,7 @@  static bool ibx_digital_port_connected(struct drm_i915_private *dev_priv,
 {
 	u32 bit;
 
-	switch (port->port) {
+	switch (port->base.port) {
 	case PORT_B:
 		bit = SDE_PORTB_HOTPLUG;
 		break;
@@ -4501,7 +4501,7 @@  static bool ibx_digital_port_connected(struct drm_i915_private *dev_priv,
 		bit = SDE_PORTD_HOTPLUG;
 		break;
 	default:
-		MISSING_CASE(port->port);
+		MISSING_CASE(port->base.port);
 		return false;
 	}
 
@@ -4513,7 +4513,7 @@  static bool cpt_digital_port_connected(struct drm_i915_private *dev_priv,
 {
 	u32 bit;
 
-	switch (port->port) {
+	switch (port->base.port) {
 	case PORT_B:
 		bit = SDE_PORTB_HOTPLUG_CPT;
 		break;
@@ -4524,7 +4524,7 @@  static bool cpt_digital_port_connected(struct drm_i915_private *dev_priv,
 		bit = SDE_PORTD_HOTPLUG_CPT;
 		break;
 	default:
-		MISSING_CASE(port->port);
+		MISSING_CASE(port->base.port);
 		return false;
 	}
 
@@ -4536,7 +4536,7 @@  static bool spt_digital_port_connected(struct drm_i915_private *dev_priv,
 {
 	u32 bit;
 
-	switch (port->port) {
+	switch (port->base.port) {
 	case PORT_A:
 		bit = SDE_PORTA_HOTPLUG_SPT;
 		break;
@@ -4555,7 +4555,7 @@  static bool g4x_digital_port_connected(struct drm_i915_private *dev_priv,
 {
 	u32 bit;
 
-	switch (port->port) {
+	switch (port->base.port) {
 	case PORT_B:
 		bit = PORTB_HOTPLUG_LIVE_STATUS_G4X;
 		break;
@@ -4566,7 +4566,7 @@  static bool g4x_digital_port_connected(struct drm_i915_private *dev_priv,
 		bit = PORTD_HOTPLUG_LIVE_STATUS_G4X;
 		break;
 	default:
-		MISSING_CASE(port->port);
+		MISSING_CASE(port->base.port);
 		return false;
 	}
 
@@ -4578,7 +4578,7 @@  static bool gm45_digital_port_connected(struct drm_i915_private *dev_priv,
 {
 	u32 bit;
 
-	switch (port->port) {
+	switch (port->base.port) {
 	case PORT_B:
 		bit = PORTB_HOTPLUG_LIVE_STATUS_GM45;
 		break;
@@ -4589,7 +4589,7 @@  static bool gm45_digital_port_connected(struct drm_i915_private *dev_priv,
 		bit = PORTD_HOTPLUG_LIVE_STATUS_GM45;
 		break;
 	default:
-		MISSING_CASE(port->port);
+		MISSING_CASE(port->base.port);
 		return false;
 	}
 
@@ -4599,7 +4599,7 @@  static bool gm45_digital_port_connected(struct drm_i915_private *dev_priv,
 static bool ilk_digital_port_connected(struct drm_i915_private *dev_priv,
 				       struct intel_digital_port *port)
 {
-	if (port->port == PORT_A)
+	if (port->base.port == PORT_A)
 		return I915_READ(DEISR) & DE_DP_A_HOTPLUG;
 	else
 		return ibx_digital_port_connected(dev_priv, port);
@@ -4608,7 +4608,7 @@  static bool ilk_digital_port_connected(struct drm_i915_private *dev_priv,
 static bool snb_digital_port_connected(struct drm_i915_private *dev_priv,
 				       struct intel_digital_port *port)
 {
-	if (port->port == PORT_A)
+	if (port->base.port == PORT_A)
 		return I915_READ(DEISR) & DE_DP_A_HOTPLUG;
 	else
 		return cpt_digital_port_connected(dev_priv, port);
@@ -4617,7 +4617,7 @@  static bool snb_digital_port_connected(struct drm_i915_private *dev_priv,
 static bool ivb_digital_port_connected(struct drm_i915_private *dev_priv,
 				       struct intel_digital_port *port)
 {
-	if (port->port == PORT_A)
+	if (port->base.port == PORT_A)
 		return I915_READ(DEISR) & DE_DP_A_HOTPLUG_IVB;
 	else
 		return cpt_digital_port_connected(dev_priv, port);
@@ -4626,7 +4626,7 @@  static bool ivb_digital_port_connected(struct drm_i915_private *dev_priv,
 static bool bdw_digital_port_connected(struct drm_i915_private *dev_priv,
 				       struct intel_digital_port *port)
 {
-	if (port->port == PORT_A)
+	if (port->base.port == PORT_A)
 		return I915_READ(GEN8_DE_PORT_ISR) & GEN8_PORT_DP_A_HOTPLUG;
 	else
 		return cpt_digital_port_connected(dev_priv, port);
@@ -5109,12 +5109,12 @@  intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd)
 		 * "vdd off -> long hpd -> vdd on -> detect -> vdd off -> ..."
 		 */
 		DRM_DEBUG_KMS("ignoring long hpd on eDP port %c\n",
-			      port_name(intel_dig_port->port));
+			      port_name(intel_dig_port->base.port));
 		return IRQ_HANDLED;
 	}
 
 	DRM_DEBUG_KMS("got hpd irq on port %c - %s\n",
-		      port_name(intel_dig_port->port),
+		      port_name(intel_dig_port->base.port),
 		      long_hpd ? "long" : "short");
 
 	if (long_hpd) {
@@ -5364,7 +5364,7 @@  intel_dp_init_panel_power_sequencer_registers(struct drm_device *dev,
 	u32 pp_on, pp_off, pp_div, port_sel = 0;
 	int div = dev_priv->rawclk_freq / 1000;
 	struct pps_registers regs;
-	enum port port = dp_to_dig_port(intel_dp)->port;
+	enum port port = dp_to_dig_port(intel_dp)->base.port;
 	const struct edp_power_seq *seq = &intel_dp->pps_delays;
 
 	lockdep_assert_held(&dev_priv->pps_mutex);
@@ -5965,9 +5965,9 @@  intel_dp_init_connector_port_info(struct intel_digital_port *intel_dig_port)
 	struct intel_encoder *encoder = &intel_dig_port->base;
 	struct intel_dp *intel_dp = &intel_dig_port->dp;
 
-	encoder->hpd_pin = intel_hpd_pin(intel_dig_port->port);
+	encoder->hpd_pin = intel_hpd_pin(encoder->port);
 
-	switch (intel_dig_port->port) {
+	switch (encoder->port) {
 	case PORT_A:
 		intel_dp->aux_power_domain = POWER_DOMAIN_AUX_A;
 		break;
@@ -5985,7 +5985,7 @@  intel_dp_init_connector_port_info(struct intel_digital_port *intel_dig_port)
 		intel_dp->aux_power_domain = POWER_DOMAIN_AUX_D;
 		break;
 	default:
-		MISSING_CASE(intel_dig_port->port);
+		MISSING_CASE(encoder->port);
 	}
 }
 
@@ -6021,7 +6021,7 @@  intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
 	struct intel_encoder *intel_encoder = &intel_dig_port->base;
 	struct drm_device *dev = intel_encoder->base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
-	enum port port = intel_dig_port->port;
+	enum port port = intel_encoder->port;
 	int type;
 
 	/* Initialize the work for modeset in case of link train failure */
@@ -6191,7 +6191,6 @@  bool intel_dp_init(struct drm_i915_private *dev_priv,
 		intel_encoder->disable = g4x_disable_dp;
 	}
 
-	intel_dig_port->port = port;
 	intel_dig_port->dp.output_reg = output_reg;
 	intel_dig_port->max_lanes = 4;
 
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index 653ca39789b8..c3de0918ee13 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -209,7 +209,7 @@  static void intel_mst_pre_enable_dp(struct intel_encoder *encoder,
 	struct intel_digital_port *intel_dig_port = intel_mst->primary;
 	struct intel_dp *intel_dp = &intel_dig_port->dp;
 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-	enum port port = intel_dig_port->port;
+	enum port port = intel_dig_port->base.port;
 	struct intel_connector *connector =
 		to_intel_connector(conn_state->connector);
 	int ret;
@@ -253,7 +253,7 @@  static void intel_mst_enable_dp(struct intel_encoder *encoder,
 	struct intel_digital_port *intel_dig_port = intel_mst->primary;
 	struct intel_dp *intel_dp = &intel_dig_port->dp;
 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-	enum port port = intel_dig_port->port;
+	enum port port = intel_dig_port->base.port;
 	int ret;
 
 	DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links);
@@ -552,7 +552,7 @@  intel_dp_create_fake_mst_encoder(struct intel_digital_port *intel_dig_port, enum
 
 	intel_encoder->type = INTEL_OUTPUT_DP_MST;
 	intel_encoder->power_domain = intel_dig_port->base.power_domain;
-	intel_encoder->port = intel_dig_port->port;
+	intel_encoder->port = intel_dig_port->base.port;
 	intel_encoder->crtc_mask = 0x7;
 	intel_encoder->cloneable = 0;
 
diff --git a/drivers/gpu/drm/i915/intel_dpio_phy.c b/drivers/gpu/drm/i915/intel_dpio_phy.c
index 4f4a0bf12f8c..704041f70d93 100644
--- a/drivers/gpu/drm/i915/intel_dpio_phy.c
+++ b/drivers/gpu/drm/i915/intel_dpio_phy.c
@@ -586,9 +586,8 @@  bxt_ddi_phy_calc_lane_lat_optim_mask(uint8_t lane_count)
 void bxt_ddi_phy_set_lane_optim_mask(struct intel_encoder *encoder,
 				     uint8_t lane_lat_optim_mask)
 {
-	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
-	struct drm_i915_private *dev_priv = to_i915(dport->base.base.dev);
-	enum port port = dport->port;
+	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
+	enum port port = encoder->port;
 	enum dpio_phy phy;
 	enum dpio_channel ch;
 	int lane;
@@ -613,9 +612,8 @@  void bxt_ddi_phy_set_lane_optim_mask(struct intel_encoder *encoder,
 uint8_t
 bxt_ddi_phy_get_lane_lat_optim_mask(struct intel_encoder *encoder)
 {
-	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
-	struct drm_i915_private *dev_priv = to_i915(dport->base.base.dev);
-	enum port port = dport->port;
+	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
+	enum port port = encoder->port;
 	enum dpio_phy phy;
 	enum dpio_channel ch;
 	int lane;
@@ -641,7 +639,7 @@  void chv_set_phy_signal_level(struct intel_encoder *encoder,
 {
 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
-	struct intel_crtc *intel_crtc = to_intel_crtc(dport->base.base.crtc);
+	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
 	enum dpio_channel ch = vlv_dport_to_channel(dport);
 	enum pipe pipe = intel_crtc->pipe;
 	u32 val;
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 00b488688042..a0a5cead868c 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1056,7 +1056,6 @@  struct intel_lspcon {
 
 struct intel_digital_port {
 	struct intel_encoder base;
-	enum port port;
 	u32 saved_port_bits;
 	struct intel_dp dp;
 	struct intel_hdmi hdmi;
@@ -1088,7 +1087,7 @@  struct intel_dp_mst_encoder {
 static inline enum dpio_channel
 vlv_dport_to_channel(struct intel_digital_port *dport)
 {
-	switch (dport->port) {
+	switch (dport->base.port) {
 	case PORT_B:
 	case PORT_D:
 		return DPIO_CH0;
@@ -1102,7 +1101,7 @@  vlv_dport_to_channel(struct intel_digital_port *dport)
 static inline enum dpio_phy
 vlv_dport_to_phy(struct intel_digital_port *dport)
 {
-	switch (dport->port) {
+	switch (dport->base.port) {
 	case PORT_B:
 	case PORT_C:
 		return DPIO_PHY0;
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 1f2258dec09e..2d95db64cdf2 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -186,7 +186,7 @@  static bool g4x_infoframe_enabled(struct drm_encoder *encoder,
 	if ((val & VIDEO_DIP_ENABLE) == 0)
 		return false;
 
-	if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(intel_dig_port->port))
+	if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(intel_dig_port->base.port))
 		return false;
 
 	return val & (VIDEO_DIP_ENABLE_AVI |
@@ -245,7 +245,7 @@  static bool ibx_infoframe_enabled(struct drm_encoder *encoder,
 	if ((val & VIDEO_DIP_ENABLE) == 0)
 		return false;
 
-	if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(intel_dig_port->port))
+	if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(intel_dig_port->base.port))
 		return false;
 
 	return val & (VIDEO_DIP_ENABLE_AVI |
@@ -362,7 +362,7 @@  static bool vlv_infoframe_enabled(struct drm_encoder *encoder,
 	if ((val & VIDEO_DIP_ENABLE) == 0)
 		return false;
 
-	if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(intel_dig_port->port))
+	if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(intel_dig_port->base.port))
 		return false;
 
 	return val & (VIDEO_DIP_ENABLE_AVI |
@@ -535,7 +535,7 @@  static void g4x_set_infoframes(struct drm_encoder *encoder,
 	struct intel_hdmi *intel_hdmi = &intel_dig_port->hdmi;
 	i915_reg_t reg = VIDEO_DIP_CTL;
 	u32 val = I915_READ(reg);
-	u32 port = VIDEO_DIP_PORT(intel_dig_port->port);
+	u32 port = VIDEO_DIP_PORT(intel_dig_port->base.port);
 
 	assert_hdmi_port_disabled(intel_hdmi);
 
@@ -686,7 +686,7 @@  static void ibx_set_infoframes(struct drm_encoder *encoder,
 	struct intel_hdmi *intel_hdmi = &intel_dig_port->hdmi;
 	i915_reg_t reg = TVIDEO_DIP_CTL(intel_crtc->pipe);
 	u32 val = I915_READ(reg);
-	u32 port = VIDEO_DIP_PORT(intel_dig_port->port);
+	u32 port = VIDEO_DIP_PORT(intel_dig_port->base.port);
 
 	assert_hdmi_port_disabled(intel_hdmi);
 
@@ -782,7 +782,7 @@  static void vlv_set_infoframes(struct drm_encoder *encoder,
 	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
 	i915_reg_t reg = VLV_TVIDEO_DIP_CTL(intel_crtc->pipe);
 	u32 val = I915_READ(reg);
-	u32 port = VIDEO_DIP_PORT(intel_dig_port->port);
+	u32 port = VIDEO_DIP_PORT(intel_dig_port->base.port);
 
 	assert_hdmi_port_disabled(intel_hdmi);
 
@@ -1545,7 +1545,7 @@  intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector, bool has_edid)
 {
 	struct drm_i915_private *dev_priv = to_i915(connector->dev);
 	struct intel_hdmi *hdmi = intel_attached_hdmi(connector);
-	enum port port = hdmi_to_dig_port(hdmi)->port;
+	enum port port = hdmi_to_dig_port(hdmi)->base.port;
 	struct i2c_adapter *adapter =
 		intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
 	enum drm_dp_dual_mode_type type = drm_dp_dual_mode_detect(adapter);
@@ -2015,7 +2015,7 @@  void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
 	struct intel_encoder *intel_encoder = &intel_dig_port->base;
 	struct drm_device *dev = intel_encoder->base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
-	enum port port = intel_dig_port->port;
+	enum port port = intel_encoder->port;
 
 	DRM_DEBUG_KMS("Adding HDMI connector on port %c\n",
 		      port_name(port));
@@ -2135,7 +2135,6 @@  void intel_hdmi_init(struct drm_i915_private *dev_priv,
 	if (IS_G4X(dev_priv))
 		intel_encoder->cloneable |= 1 << INTEL_OUTPUT_HDMI;
 
-	intel_dig_port->port = port;
 	intel_dig_port->hdmi.hdmi_reg = hdmi_reg;
 	intel_dig_port->dp.output_reg = INVALID_MMIO_REG;
 	intel_dig_port->max_lanes = 4;
diff --git a/drivers/gpu/drm/i915/intel_pipe_crc.c b/drivers/gpu/drm/i915/intel_pipe_crc.c
index 899839f2f7c6..61641d479b93 100644
--- a/drivers/gpu/drm/i915/intel_pipe_crc.c
+++ b/drivers/gpu/drm/i915/intel_pipe_crc.c
@@ -269,7 +269,7 @@  static int i9xx_pipe_crc_auto_source(struct drm_i915_private *dev_priv,
 		case INTEL_OUTPUT_DP:
 		case INTEL_OUTPUT_EDP:
 			dig_port = enc_to_dig_port(&encoder->base);
-			switch (dig_port->port) {
+			switch (dig_port->base.port) {
 			case PORT_B:
 				*source = INTEL_PIPE_CRC_SOURCE_DP_B;
 				break;
@@ -281,7 +281,7 @@  static int i9xx_pipe_crc_auto_source(struct drm_i915_private *dev_priv,
 				break;
 			default:
 				WARN(1, "nonexisting DP port %c\n",
-				     port_name(dig_port->port));
+				     port_name(dig_port->base.port));
 				break;
 			}
 			break;
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 6e3b430fccdc..a1ad85fa5c1a 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -163,7 +163,7 @@  static void hsw_psr_enable_sink(struct intel_dp *intel_dp)
 		[3] = 1 - 1,
 		[4] = DP_SET_POWER_D0,
 	};
-	enum port port = dig_port->port;
+	enum port port = dig_port->base.port;
 	u32 aux_ctl;
 	int i;
 
@@ -376,7 +376,7 @@  void intel_psr_compute_config(struct intel_dp *intel_dp,
 	 * ones. Since by Display design transcoder EDP is tied to port A
 	 * we can safely escape based on the port A.
 	 */
-	if (HAS_DDI(dev_priv) && dig_port->port != PORT_A) {
+	if (HAS_DDI(dev_priv) && dig_port->base.port != PORT_A) {
 		DRM_DEBUG_KMS("PSR condition failed: Port not supported\n");
 		return;
 	}