On Tue, Feb 20, 2018 at 11:31:09AM -0800, Rodrigo Vivi wrote: > On Tue, Feb 20, 2018 at 07:05:22PM +0200, Ville Syrjala wrote: > > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > > > Since we no longer have a 1:1 correspondence between ports and AUX > > channels, let's give AUX channels their own enum. Makes it easier > > to tell the apples from the oranges, and we get rid of the > > port E AUX power domain FIXME since we now derive the power domain > > from the actual AUX CH. > > > Beautiful clean-up. I had this in a todo list years ago and > after staying on the bottom for so long I had removed it from there... > > > > v2: Rebase due to AUX F > > sorry and thanks! :) > > > > > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > I wondered if at least aux_power_domain part could be in a > separated patch because by the end I was a bit confused... > But in the end I could put all pieces together and it made sense > again. So one patch for easy back porting seems better. I suppose we might want to backport just the power_domain fix. So might be worth extracting that into a separate patch. Should be a simple matter of s/encoder->port/intel_dp_aux_port()/ > > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx> > > > --- > > drivers/gpu/drm/i915/i915_reg.h | 8 +- > > drivers/gpu/drm/i915/intel_display.h | 11 ++ > > drivers/gpu/drm/i915/intel_dp.c | 240 +++++++++++++++++------------------ > > drivers/gpu/drm/i915/intel_drv.h | 1 + > > 4 files changed, 131 insertions(+), 129 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h > > index 1412abcb27d4..39d624083a17 100644 > > --- a/drivers/gpu/drm/i915/i915_reg.h > > +++ b/drivers/gpu/drm/i915/i915_reg.h > > @@ -5347,8 +5347,8 @@ enum { > > #define _DPF_AUX_CH_DATA4 (dev_priv->info.display_mmio_offset + 0x64520) > > #define _DPF_AUX_CH_DATA5 (dev_priv->info.display_mmio_offset + 0x64524) > > > > -#define DP_AUX_CH_CTL(port) _MMIO_PORT(port, _DPA_AUX_CH_CTL, _DPB_AUX_CH_CTL) > > -#define DP_AUX_CH_DATA(port, i) _MMIO(_PORT(port, _DPA_AUX_CH_DATA1, _DPB_AUX_CH_DATA1) + (i) * 4) /* 5 registers */ > > +#define DP_AUX_CH_CTL(aux_ch) _MMIO_PORT(aux_ch, _DPA_AUX_CH_CTL, _DPB_AUX_CH_CTL) > > +#define DP_AUX_CH_DATA(aux_ch, i) _MMIO(_PORT(aux_ch, _DPA_AUX_CH_DATA1, _DPB_AUX_CH_DATA1) + (i) * 4) /* 5 registers */ > > > > #define DP_AUX_CH_CTL_SEND_BUSY (1 << 31) > > #define DP_AUX_CH_CTL_DONE (1 << 30) > > @@ -7875,8 +7875,8 @@ enum { > > #define _PCH_DPD_AUX_CH_DATA4 0xe4320 > > #define _PCH_DPD_AUX_CH_DATA5 0xe4324 > > > > -#define PCH_DP_AUX_CH_CTL(port) _MMIO_PORT((port) - PORT_B, _PCH_DPB_AUX_CH_CTL, _PCH_DPC_AUX_CH_CTL) > > -#define PCH_DP_AUX_CH_DATA(port, i) _MMIO(_PORT((port) - PORT_B, _PCH_DPB_AUX_CH_DATA1, _PCH_DPC_AUX_CH_DATA1) + (i) * 4) /* 5 registers */ > > +#define PCH_DP_AUX_CH_CTL(aux_ch) _MMIO_PORT((aux_ch) - AUX_CH_B, _PCH_DPB_AUX_CH_CTL, _PCH_DPC_AUX_CH_CTL) > > +#define PCH_DP_AUX_CH_DATA(aux_ch, i) _MMIO(_PORT((aux_ch) - AUX_CH_B, _PCH_DPB_AUX_CH_DATA1, _PCH_DPC_AUX_CH_DATA1) + (i) * 4) /* 5 registers */ > > > > /* CPT */ > > #define PORT_TRANS_A_SEL_CPT 0 > > diff --git a/drivers/gpu/drm/i915/intel_display.h b/drivers/gpu/drm/i915/intel_display.h > > index c4042e342f50..f5733a2576e7 100644 > > --- a/drivers/gpu/drm/i915/intel_display.h > > +++ b/drivers/gpu/drm/i915/intel_display.h > > @@ -139,6 +139,17 @@ enum dpio_phy { > > > > #define I915_NUM_PHYS_VLV 2 > > > > +enum aux_ch { > > + AUX_CH_A, > > + AUX_CH_B, > > + AUX_CH_C, > > + AUX_CH_D, > > + _AUX_CH_E, /* does not exist */ > > + AUX_CH_F, > > +}; > > + > > +#define aux_ch_name(a) ((a) + 'A') > > + > > enum intel_display_power_domain { > > POWER_DOMAIN_PIPE_A, > > POWER_DOMAIN_PIPE_B, > > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c > > index f20b25f98e5a..eeb8a026fd08 100644 > > --- a/drivers/gpu/drm/i915/intel_dp.c > > +++ b/drivers/gpu/drm/i915/intel_dp.c > > @@ -1331,171 +1331,194 @@ intel_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg) > > return ret; > > } > > > > -static enum port intel_aux_port(struct drm_i915_private *dev_priv, > > - enum port port) > > +static enum aux_ch intel_aux_ch(struct intel_dp *intel_dp) > > { > > + struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base; > > + struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > > + enum port port = encoder->port; > > const struct ddi_vbt_port_info *info = > > &dev_priv->vbt.ddi_port_info[port]; > > - enum port aux_port; > > + enum aux_ch aux_ch; > > > > if (!info->alternate_aux_channel) { > > + aux_ch = (enum aux_ch) port; > > + > > DRM_DEBUG_KMS("using AUX %c for port %c (platform default)\n", > > - port_name(port), port_name(port)); > > - return port; > > + aux_ch_name(aux_ch), port_name(port)); > > + return aux_ch; > > } > > > > switch (info->alternate_aux_channel) { > > case DP_AUX_A: > > - aux_port = PORT_A; > > + aux_ch = AUX_CH_A; > > break; > > case DP_AUX_B: > > - aux_port = PORT_B; > > + aux_ch = AUX_CH_B; > > break; > > case DP_AUX_C: > > - aux_port = PORT_C; > > + aux_ch = AUX_CH_C; > > break; > > case DP_AUX_D: > > - aux_port = PORT_D; > > + aux_ch = AUX_CH_D; > > break; > > case DP_AUX_F: > > - aux_port = PORT_F; > > + aux_ch = AUX_CH_F; > > break; > > default: > > MISSING_CASE(info->alternate_aux_channel); > > - aux_port = PORT_A; > > + aux_ch = AUX_CH_A; > > break; > > } > > > > DRM_DEBUG_KMS("using AUX %c for port %c (VBT)\n", > > - port_name(aux_port), port_name(port)); > > + aux_ch_name(aux_ch), port_name(port)); > > > > - return aux_port; > > + return aux_ch; > > +} > > + > > +static enum intel_display_power_domain > > +intel_aux_power_domain(struct intel_dp *intel_dp) > > +{ > > + switch (intel_dp->aux_ch) { > > + case AUX_CH_A: > > + return POWER_DOMAIN_AUX_A; > > + case AUX_CH_B: > > + return POWER_DOMAIN_AUX_B; > > + case AUX_CH_C: > > + return POWER_DOMAIN_AUX_C; > > + case AUX_CH_D: > > + return POWER_DOMAIN_AUX_D; > > + case AUX_CH_F: > > + return POWER_DOMAIN_AUX_F; > > + default: > > + MISSING_CASE(intel_dp->aux_ch); > > + return POWER_DOMAIN_AUX_A; > > + } > > } > > > > static i915_reg_t g4x_aux_ctl_reg(struct drm_i915_private *dev_priv, > > - enum port port) > > + enum aux_ch aux_ch) > > { > > - switch (port) { > > - case PORT_B: > > - case PORT_C: > > - case PORT_D: > > - return DP_AUX_CH_CTL(port); > > + switch (aux_ch) { > > + case AUX_CH_B: > > + case AUX_CH_C: > > + case AUX_CH_D: > > + return DP_AUX_CH_CTL(aux_ch); > > default: > > - MISSING_CASE(port); > > - return DP_AUX_CH_CTL(PORT_B); > > + MISSING_CASE(aux_ch); > > + return DP_AUX_CH_CTL(AUX_CH_B); > > } > > } > > > > static i915_reg_t g4x_aux_data_reg(struct drm_i915_private *dev_priv, > > - enum port port, int index) > > + enum aux_ch aux_ch, int index) > > { > > - switch (port) { > > - case PORT_B: > > - case PORT_C: > > - case PORT_D: > > - return DP_AUX_CH_DATA(port, index); > > + switch (aux_ch) { > > + case AUX_CH_B: > > + case AUX_CH_C: > > + case AUX_CH_D: > > + return DP_AUX_CH_DATA(aux_ch, index); > > default: > > - MISSING_CASE(port); > > - return DP_AUX_CH_DATA(PORT_B, index); > > + MISSING_CASE(aux_ch); > > + return DP_AUX_CH_DATA(AUX_CH_B, index); > > } > > } > > > > static i915_reg_t ilk_aux_ctl_reg(struct drm_i915_private *dev_priv, > > - enum port port) > > -{ > > - switch (port) { > > - case PORT_A: > > - return DP_AUX_CH_CTL(port); > > - case PORT_B: > > - case PORT_C: > > - case PORT_D: > > - return PCH_DP_AUX_CH_CTL(port); > > + enum aux_ch aux_ch) > > +{ > > + switch (aux_ch) { > > + case AUX_CH_A: > > + return DP_AUX_CH_CTL(aux_ch); > > + case AUX_CH_B: > > + case AUX_CH_C: > > + case AUX_CH_D: > > + return PCH_DP_AUX_CH_CTL(aux_ch); > > default: > > - MISSING_CASE(port); > > - return DP_AUX_CH_CTL(PORT_A); > > + MISSING_CASE(aux_ch); > > + return DP_AUX_CH_CTL(AUX_CH_A); > > } > > } > > > > static i915_reg_t ilk_aux_data_reg(struct drm_i915_private *dev_priv, > > - enum port port, int index) > > -{ > > - switch (port) { > > - case PORT_A: > > - return DP_AUX_CH_DATA(port, index); > > - case PORT_B: > > - case PORT_C: > > - case PORT_D: > > - return PCH_DP_AUX_CH_DATA(port, index); > > + enum aux_ch aux_ch, int index) > > +{ > > + switch (aux_ch) { > > + case AUX_CH_A: > > + return DP_AUX_CH_DATA(aux_ch, index); > > + case AUX_CH_B: > > + case AUX_CH_C: > > + case AUX_CH_D: > > + return PCH_DP_AUX_CH_DATA(aux_ch, index); > > default: > > - MISSING_CASE(port); > > - return DP_AUX_CH_DATA(PORT_A, index); > > + MISSING_CASE(aux_ch); > > + return DP_AUX_CH_DATA(AUX_CH_A, index); > > } > > } > > > > static i915_reg_t skl_aux_ctl_reg(struct drm_i915_private *dev_priv, > > - enum port port) > > -{ > > - switch (port) { > > - case PORT_A: > > - case PORT_B: > > - case PORT_C: > > - case PORT_D: > > - case PORT_F: > > - return DP_AUX_CH_CTL(port); > > + enum aux_ch aux_ch) > > +{ > > + switch (aux_ch) { > > + case AUX_CH_A: > > + case AUX_CH_B: > > + case AUX_CH_C: > > + case AUX_CH_D: > > + case AUX_CH_F: > > + return DP_AUX_CH_CTL(aux_ch); > > default: > > - MISSING_CASE(port); > > - return DP_AUX_CH_CTL(PORT_A); > > + MISSING_CASE(aux_ch); > > + return DP_AUX_CH_CTL(AUX_CH_A); > > } > > } > > > > static i915_reg_t skl_aux_data_reg(struct drm_i915_private *dev_priv, > > - enum port port, int index) > > -{ > > - switch (port) { > > - case PORT_A: > > - case PORT_B: > > - case PORT_C: > > - case PORT_D: > > - case PORT_F: > > - return DP_AUX_CH_DATA(port, index); > > + enum aux_ch aux_ch, int index) > > +{ > > + switch (aux_ch) { > > + case AUX_CH_A: > > + case AUX_CH_B: > > + case AUX_CH_C: > > + case AUX_CH_D: > > + case AUX_CH_F: > > + return DP_AUX_CH_DATA(aux_ch, index); > > default: > > - MISSING_CASE(port); > > - return DP_AUX_CH_DATA(PORT_A, index); > > + MISSING_CASE(aux_ch); > > + return DP_AUX_CH_DATA(AUX_CH_A, index); > > } > > } > > > > static i915_reg_t intel_aux_ctl_reg(struct drm_i915_private *dev_priv, > > - enum port port) > > + enum aux_ch aux_ch) > > { > > if (INTEL_GEN(dev_priv) >= 9) > > - return skl_aux_ctl_reg(dev_priv, port); > > + return skl_aux_ctl_reg(dev_priv, aux_ch); > > else if (HAS_PCH_SPLIT(dev_priv)) > > - return ilk_aux_ctl_reg(dev_priv, port); > > + return ilk_aux_ctl_reg(dev_priv, aux_ch); > > else > > - return g4x_aux_ctl_reg(dev_priv, port); > > + return g4x_aux_ctl_reg(dev_priv, aux_ch); > > } > > > > static i915_reg_t intel_aux_data_reg(struct drm_i915_private *dev_priv, > > - enum port port, int index) > > + enum aux_ch aux_ch, int index) > > { > > if (INTEL_GEN(dev_priv) >= 9) > > - return skl_aux_data_reg(dev_priv, port, index); > > + return skl_aux_data_reg(dev_priv, aux_ch, index); > > else if (HAS_PCH_SPLIT(dev_priv)) > > - return ilk_aux_data_reg(dev_priv, port, index); > > + return ilk_aux_data_reg(dev_priv, aux_ch, index); > > else > > - return g4x_aux_data_reg(dev_priv, port, index); > > + return g4x_aux_data_reg(dev_priv, aux_ch, index); > > } > > > > 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)->base.port); > > + enum aux_ch aux_ch = intel_dp->aux_ch; > > int i; > > > > - intel_dp->aux_ch_ctl_reg = intel_aux_ctl_reg(dev_priv, port); > > + intel_dp->aux_ch_ctl_reg = intel_aux_ctl_reg(dev_priv, aux_ch); > > for (i = 0; i < ARRAY_SIZE(intel_dp->aux_ch_data_reg); i++) > > - intel_dp->aux_ch_data_reg[i] = intel_aux_data_reg(dev_priv, port, i); > > + intel_dp->aux_ch_data_reg[i] = intel_aux_data_reg(dev_priv, aux_ch, i); > > } > > > > static void > > @@ -1507,14 +1530,17 @@ intel_dp_aux_fini(struct intel_dp *intel_dp) > > 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->base.port; > > + struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base; > > + > > + intel_dp->aux_ch = intel_aux_ch(intel_dp); > > + intel_dp->aux_power_domain = intel_aux_power_domain(intel_dp); > > > > intel_aux_reg_init(intel_dp); > > drm_dp_aux_init(&intel_dp->aux); > > > > /* Failure to allocate our preferred name is not critical */ > > - intel_dp->aux.name = kasprintf(GFP_KERNEL, "DPDDC-%c", port_name(port)); > > + intel_dp->aux.name = kasprintf(GFP_KERNEL, "DPDDC-%c", > > + port_name(encoder->port)); > > intel_dp->aux.transfer = intel_dp_aux_transfer; > > } > > > > @@ -6266,42 +6292,6 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp, > > return false; > > } > > > > -/* Set up the hotplug pin and aux power domain. */ > > -static void > > -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; > > - struct intel_encoder *intel_encoder = &intel_dig_port->base; > > - struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev); > > - > > - encoder->hpd_pin = intel_hpd_pin_default(dev_priv, encoder->port); > > - > > - switch (encoder->port) { > > - case PORT_A: > > - intel_dp->aux_power_domain = POWER_DOMAIN_AUX_A; > > - break; > > - case PORT_B: > > - intel_dp->aux_power_domain = POWER_DOMAIN_AUX_B; > > - break; > > - case PORT_C: > > - intel_dp->aux_power_domain = POWER_DOMAIN_AUX_C; > > - break; > > - case PORT_D: > > - intel_dp->aux_power_domain = POWER_DOMAIN_AUX_D; > > - break; > > - case PORT_E: > > - /* FIXME: Check VBT for actual wiring of PORT E */ > > - intel_dp->aux_power_domain = POWER_DOMAIN_AUX_D; > > - break; > > - case PORT_F: > > - intel_dp->aux_power_domain = POWER_DOMAIN_AUX_F; > > - break; > > - default: > > - MISSING_CASE(encoder->port); > > - } > > -} > > - > > static void intel_dp_modeset_retry_work_fn(struct work_struct *work) > > { > > struct intel_connector *intel_connector; > > @@ -6407,7 +6397,7 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port, > > connector->interlace_allowed = true; > > connector->doublescan_allowed = 0; > > > > - intel_dp_init_connector_port_info(intel_dig_port); > > + intel_encoder->hpd_pin = intel_hpd_pin_default(dev_priv, port); > > > > intel_dp_aux_init(intel_dp); > > > > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h > > index 898064e8bea7..7f6a7f592fe6 100644 > > --- a/drivers/gpu/drm/i915/intel_drv.h > > +++ b/drivers/gpu/drm/i915/intel_drv.h > > @@ -1049,6 +1049,7 @@ struct intel_dp { > > bool detect_done; > > bool channel_eq_status; > > bool reset_link_params; > > + enum aux_ch aux_ch; > > uint8_t dpcd[DP_RECEIVER_CAP_SIZE]; > > uint8_t psr_dpcd[EDP_PSR_RECEIVER_CAP_SIZE]; > > uint8_t downstream_ports[DP_MAX_DOWNSTREAM_PORTS]; > > -- > > 2.13.6 > > > > _______________________________________________ > > Intel-gfx mailing list > > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Ville Syrjälä Intel OTC _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx