All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@linux.intel.com>
To: Ville Syrjala <ville.syrjala@linux.intel.com>,
	intel-gfx@lists.freedesktop.org
Cc: Hans de Goede <hdegoede@redhat.com>
Subject: Re: [PATCH 1/3] drm/i915: Fix the VLV/CHV DSI panel orientation hw readout
Date: Mon, 22 Oct 2018 15:51:08 +0300	[thread overview]
Message-ID: <87woqadu0z.fsf@intel.com> (raw)
In-Reply-To: <20181019195948.26811-1-ville.syrjala@linux.intel.com>

On Fri, 19 Oct 2018, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Let's make sure the DSI port is actually on before we go
> poking at the plane register to determine which way
> it's rotated. Otherwise we could be looking at a plane
> that is feeding a HDMI port for instance.
>
> And in order to read the plane register we need the power
> well to be on. Make sure that is indeed the case. We'll
> also make sure the plane is actually enabled before we
> trust the rotation bit to tell us the truth.
>
> Cc: Hans de Goede <hdegoede@redhat.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/vlv_dsi.c | 53 ++++++++++++++++++++++++++--------
>  1 file changed, 41 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c
> index dbca30460a6b..893839ea0ff9 100644
> --- a/drivers/gpu/drm/i915/vlv_dsi.c
> +++ b/drivers/gpu/drm/i915/vlv_dsi.c
> @@ -1668,27 +1668,56 @@ static const struct drm_connector_funcs intel_dsi_connector_funcs = {
>  	.atomic_duplicate_state = intel_digital_connector_duplicate_state,
>  };
>  
> -static int intel_dsi_get_panel_orientation(struct intel_connector *connector)
> +static enum drm_panel_orientation
> +vlv_dsi_get_hw_panel_orientation(struct intel_connector *connector)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
> -	int orientation = DRM_MODE_PANEL_ORIENTATION_NORMAL;
> -	enum i9xx_plane_id i9xx_plane;
> +	struct intel_encoder *encoder = connector->encoder;
> +	enum intel_display_power_domain power_domain;
> +	enum drm_panel_orientation orientation;
> +	struct intel_plane *plane;
> +	struct intel_crtc *crtc;
> +	enum pipe pipe;
>  	u32 val;
>  
> -	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
> -		if (connector->encoder->crtc_mask == BIT(PIPE_B))
> -			i9xx_plane = PLANE_B;
> -		else
> -			i9xx_plane = PLANE_A;
> +	if (!encoder->get_hw_state(encoder, &pipe))
> +		return DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
>  
> -		val = I915_READ(DSPCNTR(i9xx_plane));
> -		if (val & DISPPLANE_ROTATE_180)
> -			orientation = DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP;
> -	}
> +	crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
> +	plane = to_intel_plane(crtc->base.primary);
> +
> +	power_domain = POWER_DOMAIN_PIPE(pipe);
> +	if (!intel_display_power_get_if_enabled(dev_priv, power_domain))
> +		return DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
> +
> +	val = I915_READ(DSPCNTR(plane->i9xx_plane));
> +
> +	if (!(val & DISPLAY_PLANE_ENABLE))
> +		orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
> +	else if (val & DISPPLANE_ROTATE_180)
> +		orientation = DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP;
> +	else
> +		orientation = DRM_MODE_PANEL_ORIENTATION_NORMAL;
> +
> +	intel_display_power_put(dev_priv, power_domain);
>  
>  	return orientation;
>  }
>  
> +static int intel_dsi_get_panel_orientation(struct intel_connector *connector)
> +{
> +	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
> +	enum drm_panel_orientation orientation;
> +
> +	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
> +		orientation = vlv_dsi_get_hw_panel_orientation(connector);
> +		if (orientation != DRM_MODE_PANEL_ORIENTATION_UNKNOWN)
> +			return orientation;
> +	}
> +
> +	return DRM_MODE_PANEL_ORIENTATION_NORMAL;
> +}

Long term I think this should be shoved to intel_dsi.c, the resurrected
dumping ground for platform independent DSI code. But I'm fine with
landing it here first and moving later as the only user is still here.

BR,
Jani.

> +
>  static void intel_dsi_add_properties(struct intel_connector *connector)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);

-- 
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  parent reply	other threads:[~2018-10-22 12:51 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-19 19:59 [PATCH 1/3] drm/i915: Fix the VLV/CHV DSI panel orientation hw readout Ville Syrjala
2018-10-19 19:59 ` [PATCH 2/3] drm/i915: Determine DSI panel orientation from VBT Ville Syrjala
2018-10-22 13:07   ` Jani Nikula
2018-10-22 13:25     ` Ville Syrjälä
2018-10-22 14:20   ` [PATCH v2 " Ville Syrjala
2018-10-22 14:52     ` Jani Nikula
2018-10-19 19:59 ` [PATCH 3/3] drm/i915: Remove the hardware readout path for DSI panel orientation Ville Syrjala
2018-10-19 20:11   ` Chris Wilson
2018-10-19 20:12     ` Chris Wilson
2018-10-22 13:09   ` Jani Nikula
2018-10-22 14:02     ` Hans de Goede
2018-10-22 14:20   ` [PATCH v2 " Ville Syrjala
2018-10-22 12:51 ` Jani Nikula [this message]
2018-10-22 13:13   ` [PATCH 1/3] drm/i915: Fix the VLV/CHV DSI panel orientation hw readout Ville Syrjälä
2018-10-22 14:19 ` [PATCH v2 " Ville Syrjala
2018-10-22 19:41   ` Hans de Goede
2018-11-13 16:00     ` Ville Syrjälä
2018-10-22 16:26 ` ✗ Fi.CI.SPARSE: warning for series starting with [v2,1/3] drm/i915: Fix the VLV/CHV DSI panel orientation hw readout (rev4) Patchwork
2018-10-22 16:49 ` ✓ Fi.CI.BAT: success " Patchwork
2018-10-22 19:53 ` ✓ Fi.CI.IGT: " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87woqadu0z.fsf@intel.com \
    --to=jani.nikula@linux.intel.com \
    --cc=hdegoede@redhat.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=ville.syrjala@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.