Re: [PATCH 23/71] drm/i915/chv: Pipe select change for DP and HDMI

Imre Deak
2014-04-30T12:49:59Z

[-- Attachment #1.1: Type: text/plain, Size: 4135 bytes --]

On Wed, 2014-04-09 at 13:28 +0300, ville.syrjala@linux.intel.com wrote:
> From: Chon Ming Lee <chon.ming.lee@intel.com>
>
> With additional of pipe C, current 1 bit registers for pipe select
> for HDMI and DP are no longer able to gather for 3 pipes. As a result,
> new bits location in the same registers are added.
>
> For HDMI, VLV uses bit 30, CHV uses bit 24-25.
>
> For DP, VLV uses bit 30, CHV uses bit 16-17.
>
> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Chon Ming Lee <chon.ming.lee@intel.com>

Reviewed-by: Imre Deak <imre.deak@intel.com>

> ---
> drivers/gpu/drm/i915/i915_reg.h | 6 ++++++
> drivers/gpu/drm/i915/intel_display.c | 6 ++++++
> drivers/gpu/drm/i915/intel_dp.c | 8 ++++++--
> drivers/gpu/drm/i915/intel_hdmi.c | 2 ++
> 4 files changed, 20 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index 75f31f5..91c8fac 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -2478,6 +2478,10 @@ enum punit_power_well {
> #define SDVO_PIPE_SEL_CPT(pipe) ((pipe) << 29)
> #define SDVO_PIPE_SEL_MASK_CPT (3 << 29)
>
> +/* CHV SDVO/HDMI bits: */
> +#define SDVO_PIPE_SEL_CHV(pipe) ((pipe) << 24)
> +#define SDVO_PIPE_SEL_MASK_CHV (3 << 24)
> +
>
> /* DVO port control */
> #define DVOA 0x61120
> @@ -3235,6 +3239,8 @@ enum punit_power_well {
> #define DP_PORT_EN (1 << 31)
> #define DP_PIPEB_SELECT (1 << 30)
> #define DP_PIPE_MASK (1 << 30)
> +#define DP_PIPE_SELECT_CHV(pipe) ((pipe) << 16)
> +#define DP_PIPE_MASK_CHV (3 << 16)
>
> /* Link training mode - select a suitable mode for each stage */
> #define DP_LINK_TRAIN_PAT_1 (0 << 28)
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 36d6e212..f849c65 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -1337,6 +1337,9 @@ static bool dp_pipe_enabled(struct drm_i915_private *dev_priv,
> u32 trans_dp_ctl = I915_READ(trans_dp_ctl_reg);
> if ((trans_dp_ctl & TRANS_DP_PORT_SEL_MASK) != port_sel)
> return false;
> + } else if (IS_CHERRYVIEW(dev_priv->dev)) {
> + if ((val & DP_PIPE_MASK_CHV) != DP_PIPE_SELECT_CHV(pipe))
> + return false;
> } else {
> if ((val & DP_PIPE_MASK) != (pipe << 30))
> return false;
> @@ -1353,6 +1356,9 @@ static bool hdmi_pipe_enabled(struct drm_i915_private *dev_priv,
> if (HAS_PCH_CPT(dev_priv->dev)) {
> if ((val & SDVO_PIPE_SEL_MASK_CPT) != SDVO_PIPE_SEL_CPT(pipe))
> return false;
> + } else if (IS_CHERRYVIEW(dev_priv->dev)) {
> + if ((val & SDVO_PIPE_SEL_MASK_CHV) != SDVO_PIPE_SEL_CHV(pipe))
> + return false;
> } else {
> if ((val & SDVO_PIPE_SEL_MASK) != SDVO_PIPE_SEL(pipe))
> return false;
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 71a4fa2..21ac845 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -964,8 +964,12 @@ static void intel_dp_mode_set(struct intel_encoder *encoder)
> if (drm_dp_enhanced_frame_cap(intel_dp->dpcd))
> intel_dp->DP |= DP_ENHANCED_FRAMING;
>
> - if (crtc->pipe == 1)
> - intel_dp->DP |= DP_PIPEB_SELECT;
> + if (!IS_CHERRYVIEW(dev)) {
> + if (crtc->pipe == 1)
> + intel_dp->DP |= DP_PIPEB_SELECT;
> + } else {
> + intel_dp->DP |= DP_PIPE_SELECT_CHV(crtc->pipe);
> + }
> } else {
> intel_dp->DP |= DP_LINK_TRAIN_OFF_CPT;
> }
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> index bbda011..9f868f4 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -652,6 +652,8 @@ static void intel_hdmi_mode_set(struct intel_encoder *encoder)
>
> if (HAS_PCH_CPT(dev))
> hdmi_val |= SDVO_PIPE_SEL_CPT(crtc->pipe);
> + else if (IS_CHERRYVIEW(dev))
> + hdmi_val |= SDVO_PIPE_SEL_CHV(crtc->pipe);
> else
> hdmi_val |= SDVO_PIPE_SEL(crtc->pipe);
>

[-- Attachment #1.2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 490 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]