From: "Lisovskiy, Stanislav" <stanislav.lisovskiy@intel.com>
To: Ville Syrjala <ville.syrjala@linux.intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [Intel-gfx] [PATCH 5/6] drm/i915: Split pre-icl vs. icl+ SAGV hooks apart
Date: Thu, 17 Feb 2022 20:31:00 +0200 [thread overview]
Message-ID: <20220217183100.GB3823@intel.com> (raw)
In-Reply-To: <20220214091811.13725-6-ville.syrjala@linux.intel.com>
On Mon, Feb 14, 2022 at 11:18:10AM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> To further reduce the confusion between the pre-icl vs. icl+
> SAGV codepaths let's do a full split.
Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
>
> Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/intel_pm.c | 120 ++++++++++++++++++++------------
> 1 file changed, 77 insertions(+), 43 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index 068870b17c43..8b70cdc3b58b 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -3785,34 +3785,44 @@ intel_disable_sagv(struct drm_i915_private *dev_priv)
> return 0;
> }
>
> -void intel_sagv_pre_plane_update(struct intel_atomic_state *state)
> +static void skl_sagv_pre_plane_update(struct intel_atomic_state *state)
> +{
> + struct drm_i915_private *i915 = to_i915(state->base.dev);
> + const struct intel_bw_state *new_bw_state =
> + intel_atomic_get_new_bw_state(state);
> +
> + if (!new_bw_state)
> + return;
> +
> + if (!intel_can_enable_sagv(i915, new_bw_state))
> + intel_disable_sagv(i915);
> +}
> +
> +static void skl_sagv_post_plane_update(struct intel_atomic_state *state)
> +{
> + struct drm_i915_private *i915 = to_i915(state->base.dev);
> + const struct intel_bw_state *new_bw_state =
> + intel_atomic_get_new_bw_state(state);
> +
> + if (!new_bw_state)
> + return;
> +
> + if (intel_can_enable_sagv(i915, new_bw_state))
> + intel_enable_sagv(i915);
> +}
> +
> +static void icl_sagv_pre_plane_update(struct intel_atomic_state *state)
> {
> struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> - const struct intel_bw_state *new_bw_state;
> - const struct intel_bw_state *old_bw_state;
> - u32 new_mask = 0;
> + const struct intel_bw_state *old_bw_state =
> + intel_atomic_get_old_bw_state(state);
> + const struct intel_bw_state *new_bw_state =
> + intel_atomic_get_new_bw_state(state);
> + u32 new_mask;
>
> - /*
> - * Just return if we can't control SAGV or don't have it.
> - * This is different from situation when we have SAGV but just can't
> - * afford it due to DBuf limitation - in case if SAGV is completely
> - * disabled in a BIOS, we are not even allowed to send a PCode request,
> - * as it will throw an error. So have to check it here.
> - */
> - if (!intel_has_sagv(dev_priv))
> - return;
> -
> - new_bw_state = intel_atomic_get_new_bw_state(state);
> if (!new_bw_state)
> return;
>
> - if (DISPLAY_VER(dev_priv) < 11) {
> - if (!intel_can_enable_sagv(dev_priv, new_bw_state))
> - intel_disable_sagv(dev_priv);
> - return;
> - }
> -
> - old_bw_state = intel_atomic_get_old_bw_state(state);
> /*
> * Nothing to mask
> */
> @@ -3837,34 +3847,18 @@ void intel_sagv_pre_plane_update(struct intel_atomic_state *state)
> icl_pcode_restrict_qgv_points(dev_priv, new_mask);
> }
>
> -void intel_sagv_post_plane_update(struct intel_atomic_state *state)
> +static void icl_sagv_post_plane_update(struct intel_atomic_state *state)
> {
> struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> - const struct intel_bw_state *new_bw_state;
> - const struct intel_bw_state *old_bw_state;
> + const struct intel_bw_state *old_bw_state =
> + intel_atomic_get_old_bw_state(state);
> + const struct intel_bw_state *new_bw_state =
> + intel_atomic_get_new_bw_state(state);
> u32 new_mask = 0;
>
> - /*
> - * Just return if we can't control SAGV or don't have it.
> - * This is different from situation when we have SAGV but just can't
> - * afford it due to DBuf limitation - in case if SAGV is completely
> - * disabled in a BIOS, we are not even allowed to send a PCode request,
> - * as it will throw an error. So have to check it here.
> - */
> - if (!intel_has_sagv(dev_priv))
> - return;
> -
> - new_bw_state = intel_atomic_get_new_bw_state(state);
> if (!new_bw_state)
> return;
>
> - if (DISPLAY_VER(dev_priv) < 11) {
> - if (intel_can_enable_sagv(dev_priv, new_bw_state))
> - intel_enable_sagv(dev_priv);
> - return;
> - }
> -
> - old_bw_state = intel_atomic_get_old_bw_state(state);
> /*
> * Nothing to unmask
> */
> @@ -3882,6 +3876,46 @@ void intel_sagv_post_plane_update(struct intel_atomic_state *state)
> icl_pcode_restrict_qgv_points(dev_priv, new_mask);
> }
>
> +void intel_sagv_pre_plane_update(struct intel_atomic_state *state)
> +{
> + struct drm_i915_private *i915 = to_i915(state->base.dev);
> +
> + /*
> + * Just return if we can't control SAGV or don't have it.
> + * This is different from situation when we have SAGV but just can't
> + * afford it due to DBuf limitation - in case if SAGV is completely
> + * disabled in a BIOS, we are not even allowed to send a PCode request,
> + * as it will throw an error. So have to check it here.
> + */
> + if (!intel_has_sagv(i915))
> + return;
> +
> + if (DISPLAY_VER(i915) >= 11)
> + icl_sagv_pre_plane_update(state);
> + else
> + skl_sagv_pre_plane_update(state);
> +}
> +
> +void intel_sagv_post_plane_update(struct intel_atomic_state *state)
> +{
> + struct drm_i915_private *i915 = to_i915(state->base.dev);
> +
> + /*
> + * Just return if we can't control SAGV or don't have it.
> + * This is different from situation when we have SAGV but just can't
> + * afford it due to DBuf limitation - in case if SAGV is completely
> + * disabled in a BIOS, we are not even allowed to send a PCode request,
> + * as it will throw an error. So have to check it here.
> + */
> + if (!intel_has_sagv(i915))
> + return;
> +
> + if (DISPLAY_VER(i915) >= 11)
> + icl_sagv_post_plane_update(state);
> + else
> + skl_sagv_post_plane_update(state);
> +}
> +
> static bool skl_crtc_can_enable_sagv(const struct intel_crtc_state *crtc_state)
> {
> struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
> --
> 2.34.1
>
next prev parent reply other threads:[~2022-02-17 18:30 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-14 9:18 [Intel-gfx] [PATCH 0/6] drm/i915: SAGV fixes Ville Syrjala
2022-02-14 9:18 ` [Intel-gfx] [PATCH 1/6] drm/i915: Correctly populate use_sagv_wm for all pipes Ville Syrjala
2022-02-14 9:18 ` Ville Syrjala
2022-02-14 10:16 ` [Intel-gfx] " Lisovskiy, Stanislav
2022-02-14 10:16 ` Lisovskiy, Stanislav
2022-02-14 9:18 ` [Intel-gfx] [PATCH 2/6] drm/i915: Fix bw atomic check when switching between SAGV vs. no SAGV Ville Syrjala
2022-02-14 9:18 ` Ville Syrjala
2022-02-14 10:05 ` [Intel-gfx] " Lisovskiy, Stanislav
2022-02-14 10:05 ` Lisovskiy, Stanislav
2022-02-14 10:24 ` [Intel-gfx] " Ville Syrjälä
2022-02-14 10:24 ` Ville Syrjälä
2022-02-14 17:03 ` [Intel-gfx] " Lisovskiy, Stanislav
2022-02-14 17:03 ` Lisovskiy, Stanislav
2022-02-14 20:26 ` [Intel-gfx] " Ville Syrjälä
2022-02-14 20:26 ` Ville Syrjälä
2022-02-15 8:59 ` [Intel-gfx] " Lisovskiy, Stanislav
2022-02-15 8:59 ` Lisovskiy, Stanislav
2022-02-15 10:10 ` [Intel-gfx] " Ville Syrjälä
2022-02-15 10:10 ` Ville Syrjälä
2022-02-15 11:02 ` [Intel-gfx] " Lisovskiy, Stanislav
2022-02-15 11:02 ` Lisovskiy, Stanislav
2022-02-15 11:26 ` [Intel-gfx] " Ville Syrjälä
2022-02-15 11:26 ` Ville Syrjälä
2022-02-15 16:33 ` [Intel-gfx] " Lisovskiy, Stanislav
2022-02-15 16:33 ` Lisovskiy, Stanislav
2022-02-15 16:52 ` [Intel-gfx] " Ville Syrjälä
2022-02-15 16:52 ` Ville Syrjälä
2022-02-15 16:58 ` [Intel-gfx] " Ville Syrjälä
2022-02-15 19:18 ` Ville Syrjälä
2022-02-14 9:18 ` [Intel-gfx] [PATCH 3/6] drm/i915: Widen the QGV point mask Ville Syrjala
2022-02-14 9:18 ` Ville Syrjala
2022-02-14 17:17 ` [Intel-gfx] " Lisovskiy, Stanislav
2022-02-14 17:17 ` Lisovskiy, Stanislav
2022-02-14 9:18 ` [Intel-gfx] [PATCH 4/6] drm/i915: Unconfuse pre-icl vs. icl+ intel_sagv_{pre, post}_plane_update() Ville Syrjala
2022-02-14 17:39 ` Lisovskiy, Stanislav
2022-02-14 9:18 ` [Intel-gfx] [PATCH 5/6] drm/i915: Split pre-icl vs. icl+ SAGV hooks apart Ville Syrjala
2022-02-17 18:31 ` Lisovskiy, Stanislav [this message]
2022-02-14 9:18 ` [Intel-gfx] [PATCH 6/6] drm/i915: Pimp icl+ sagv pre/post update Ville Syrjala
2022-02-14 10:00 ` Lisovskiy, Stanislav
2022-02-14 10:27 ` Ville Syrjälä
2022-02-14 17:48 ` Lisovskiy, Stanislav
2022-02-14 18:04 ` Lisovskiy, Stanislav
2022-02-15 21:29 ` [Intel-gfx] ✓ Fi.CI.BAT: success for drm/i915: SAGV fixes Patchwork
2022-02-16 1:37 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " 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=20220217183100.GB3823@intel.com \
--to=stanislav.lisovskiy@intel.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.