From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Manasi Navare <manasi.d.navare@intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [Intel-gfx] [PATCH 1/3] drm/i915/dp: Make sure all tiled connectors get added to the state with full modeset
Date: Fri, 13 Dec 2019 22:05:49 +0200 [thread overview]
Message-ID: <20191213200549.GD1208@intel.com> (raw)
In-Reply-To: <20191211211425.17821-2-manasi.d.navare@intel.com>
On Wed, Dec 11, 2019 at 01:14:23PM -0800, Manasi Navare wrote:
> In case of tiled displays, all the tiles are linke dto each other
> for transcoder port sync. So in intel_atomic_check() we need to make
> sure that we add all the tiles to the modeset and if one of the
> tiles needs a full modeset then mark all other tiles for a full modeset.
>
> Suggested-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: José Roberto de Souza <jose.souza@intel.com>
> Bugzilla: https://gitlab.freedesktop.org/drm/intel/issues/5
> Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_display.c | 78 ++++++++++++++++++++
> 1 file changed, 78 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 803993a01ca7..7263eaa66cda 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -14066,6 +14066,80 @@ static int intel_atomic_check_crtcs(struct intel_atomic_state *state)
> return 0;
> }
>
> +static int
> +intel_dp_modeset_all_tiles(struct drm_i915_private *dev_priv,
> + struct intel_atomic_state *state, int tile_grp_id)
> +{
> + struct drm_connector *conn_iter;
'connector'
> + struct drm_connector_list_iter conn_list_iter;
> + struct drm_crtc_state *crtc_state;
crtc_state has needlessly wide scope.
> +
> + drm_connector_list_iter_begin(&dev_priv->drm, &conn_list_iter);
> + drm_for_each_connector_iter(conn_iter, &conn_list_iter) {
> + struct drm_connector_state *conn_iter_state;
'conn_state' is the most popular name.
> +
> + if (!conn_iter->has_tile)
> + continue;
> + conn_iter_state = drm_atomic_get_connector_state(&state->base,
> + conn_iter);
> + if (IS_ERR(conn_iter_state)) {
> + drm_connector_list_iter_end(&conn_list_iter);
> + return PTR_ERR(conn_iter_state);
> + }
> +
> + if (!conn_iter_state->crtc)
> + continue;
> +
> + if (conn_iter->tile_group->id != tile_grp_id)
> + continue;
The tile group check should be part of the same if with the has_tile
check.
> +
> + crtc_state = drm_atomic_get_crtc_state(&state->base, conn_iter_state->crtc);
> + if (IS_ERR(crtc_state)) {
> + drm_connector_list_iter_end(&conn_list_iter);
> + return PTR_ERR(conn_iter_state);
> + }
> + crtc_state->mode_changed = true;
> + }
> + drm_connector_list_iter_end(&conn_list_iter);
> +
> + return 0;
> +}
> +
> +static int
> +intel_dp_atomic_trans_port_sync_check(struct drm_i915_private *dev_priv,
Pointless variable. Can be extracted from the atomic state.
> + struct intel_atomic_state *state)
> +{
> + struct drm_connector *connector;
> + struct drm_crtc_state *crtc_state;
> + struct drm_connector_state *connector_state;
> + int i, ret, tile_grp_id = 0;
tile_grp_id is rather pointless. crtc_state and ret can move into
tighter scope. And the next suggestion allows you to kill crtc_state
entirely...
> +
> + if (INTEL_GEN(dev_priv) < 11)
> + return 0;
> +
> + /* Is tiled, mark all other tiled CRTCs as needing a modeset */
> + for_each_new_connector_in_state(&state->base, connector, connector_state, i) {
> + if (!connector->has_tile)
> + continue;
> + if (connector_state->crtc &&
> + tile_grp_id != connector->tile_group->id) {
> + crtc_state = drm_atomic_get_new_crtc_state(&state->base,
> + connector_state->crtc);
> + if (!drm_atomic_crtc_needs_modeset(crtc_state))
> + continue;
This should to be able to be shortened to just intel_connector_needs_modeset().
> +
> + tile_grp_id = connector->tile_group->id;
> + } else
> + continue;
> +
> + ret = intel_dp_modeset_all_tiles(dev_priv, state, tile_grp_id);
> + if (ret)
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> /**
> * intel_atomic_check - validate state object
> * @dev: drm device
> @@ -14093,6 +14167,10 @@ static int intel_atomic_check(struct drm_device *dev,
> if (ret)
> goto fail;
>
> + ret = intel_dp_atomic_trans_port_sync_check(dev_priv, state);
> + if (ret)
> + goto fail;
We should probably do this from the connector .atomic_check() hook if
Jose is going to do the MST thing that way. But no real problem doing
here I think.
> +
> for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
> new_crtc_state, i) {
> if (!needs_modeset(new_crtc_state)) {
> --
> 2.19.1
--
Ville Syrjälä
Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2019-12-13 20:59 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-11 21:14 [Intel-gfx] [PATCH 0/3] i915 fixes to handle hotplug cases on 8K tiled monitor Manasi Navare
2019-12-11 21:14 ` [Intel-gfx] [PATCH 1/3] drm/i915/dp: Make sure all tiled connectors get added to the state with full modeset Manasi Navare
2019-12-13 0:32 ` Matt Roper
2019-12-13 1:18 ` Manasi Navare
2019-12-13 3:11 ` Matt Roper
2019-12-13 20:05 ` Ville Syrjälä [this message]
2019-12-13 21:05 ` Manasi Navare
2019-12-13 21:17 ` Ville Syrjälä
2019-12-14 2:28 ` Manasi Navare
2019-12-16 12:03 ` Ville Syrjälä
2019-12-16 16:40 ` Manasi Navare
2019-12-16 17:11 ` Ville Syrjälä
2019-12-16 21:42 ` Manasi Navare
2019-12-16 14:37 ` Ville Syrjälä
2019-12-16 19:13 ` Manasi Navare
2019-12-16 21:37 ` Ville Syrjälä
2019-12-16 22:33 ` Manasi Navare
2019-12-16 22:58 ` Manasi Navare
2019-12-17 10:50 ` Ville Syrjälä
2019-12-17 19:04 ` Manasi Navare
2019-12-19 2:37 ` Manasi Navare
2019-12-11 21:14 ` [Intel-gfx] [PATCH 2/3] drm/i915/dp: Make port sync mode assignments only if all tiles present Manasi Navare
2019-12-13 1:03 ` Matt Roper
2019-12-13 1:09 ` Manasi Navare
2019-12-13 20:28 ` Ville Syrjälä
2019-12-13 20:53 ` Ville Syrjälä
2019-12-13 20:58 ` Manasi Navare
2019-12-11 21:14 ` [Intel-gfx] [PATCH 3/3] drm/i915/dp: Disable Port sync mode correctly on teardown Manasi Navare
2019-12-13 3:14 ` Matt Roper
2019-12-13 20:06 ` Ville Syrjälä
2019-12-13 20:40 ` Manasi Navare
2019-12-13 20:49 ` Ville Syrjälä
2019-12-12 1:53 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for i915 fixes to handle hotplug cases on 8K tiled monitor Patchwork
2019-12-12 2:36 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2019-12-12 13:49 ` [Intel-gfx] ✓ 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=20191213200549.GD1208@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=manasi.d.navare@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.