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 v2 7/8] drm/i915: Unconfuses QGV vs. PSF point masks
Date: Wed, 16 Mar 2022 19:56:48 +0200 [thread overview]
Message-ID: <20220316175648.GC21723@intel.com> (raw)
In-Reply-To: <20220309164948.10671-8-ville.syrjala@linux.intel.com>
On Wed, Mar 09, 2022 at 06:49:47PM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Use separate bitmasks for QGV vs. PSF GV points during
> the computation. Makes the whole thing a lot less confusing.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_bw.c | 35 ++++++++++++-------------
> drivers/gpu/drm/i915/i915_reg.h | 3 ++-
> 2 files changed, 19 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
> index adf58c58513b..b794545ff81d 100644
> --- a/drivers/gpu/drm/i915/display/intel_bw.c
> +++ b/drivers/gpu/drm/i915/display/intel_bw.c
> @@ -820,7 +820,7 @@ static u16 icl_qgv_points_mask(struct drm_i915_private *i915)
> {
> unsigned int num_psf_gv_points = i915->max_bw[0].num_psf_gv_points;
> unsigned int num_qgv_points = i915->max_bw[0].num_qgv_points;
> - u16 mask = 0;
> + u16 qgv_points = 0, psf_points = 0;
>
> /*
> * We can _not_ use the whole ADLS_QGV_PT_MASK here, as PCode rejects
> @@ -828,12 +828,12 @@ static u16 icl_qgv_points_mask(struct drm_i915_private *i915)
> * So need to operate only with those returned from PCode.
> */
> if (num_qgv_points > 0)
> - mask |= REG_GENMASK(num_qgv_points - 1, 0);
> + qgv_points = GENMASK(num_qgv_points - 1, 0);
>
> if (num_psf_gv_points > 0)
> - mask |= REG_GENMASK(num_psf_gv_points - 1, 0) << ADLS_PSF_PT_SHIFT;
> + psf_points = GENMASK(num_psf_gv_points - 1, 0);
>
> - return mask;
> + return ADLS_QGV_PT(qgv_points) | ADLS_PSF_PT(psf_points);
> }
>
> static int intel_bw_check_data_rate(struct intel_atomic_state *state, bool *changed)
> @@ -890,7 +890,7 @@ int intel_bw_atomic_check(struct intel_atomic_state *state)
> unsigned int data_rate;
> unsigned int num_active_planes;
> int i, ret;
> - u32 allowed_points = 0;
> + u16 qgv_points = 0, psf_points = 0;
> unsigned int max_bw_point = 0, max_bw = 0;
> unsigned int num_qgv_points = dev_priv->max_bw[0].num_qgv_points;
> unsigned int num_psf_gv_points = dev_priv->max_bw[0].num_psf_gv_points;
> @@ -948,7 +948,7 @@ int intel_bw_atomic_check(struct intel_atomic_state *state)
> max_bw = max_data_rate;
> }
> if (max_data_rate >= data_rate)
> - allowed_points |= REG_FIELD_PREP(ADLS_QGV_PT_MASK, BIT(i));
> + qgv_points |= BIT(i);
>
> drm_dbg_kms(&dev_priv->drm, "QGV point %d: max bw %d required %d\n",
> i, max_data_rate, data_rate);
> @@ -958,7 +958,7 @@ int intel_bw_atomic_check(struct intel_atomic_state *state)
> unsigned int max_data_rate = adl_psf_bw(dev_priv, i);
>
> if (max_data_rate >= data_rate)
> - allowed_points |= REG_FIELD_PREP(ADLS_PSF_PT_MASK, BIT(i));
> + psf_points |= BIT(i);
>
> drm_dbg_kms(&dev_priv->drm, "PSF GV point %d: max bw %d"
> " required %d\n",
> @@ -970,20 +970,18 @@ int intel_bw_atomic_check(struct intel_atomic_state *state)
> * left, so if we couldn't - simply reject the configuration for obvious
> * reasons.
> */
> - if ((allowed_points & ADLS_QGV_PT_MASK) == 0) {
> + if (qgv_points == 0) {
> drm_dbg_kms(&dev_priv->drm, "No QGV points provide sufficient memory"
> " bandwidth %d for display configuration(%d active planes).\n",
> data_rate, num_active_planes);
> return -EINVAL;
> }
>
> - if (num_psf_gv_points > 0) {
> - if ((allowed_points & ADLS_PSF_PT_MASK) == 0) {
> - drm_dbg_kms(&dev_priv->drm, "No PSF GV points provide sufficient memory"
> - " bandwidth %d for display configuration(%d active planes).\n",
> - data_rate, num_active_planes);
> - return -EINVAL;
> - }
> + if (num_psf_gv_points > 0 && psf_points == 0) {
> + drm_dbg_kms(&dev_priv->drm, "No PSF GV points provide sufficient memory"
> + " bandwidth %d for display configuration(%d active planes).\n",
> + data_rate, num_active_planes);
> + return -EINVAL;
> }
>
> /*
> @@ -992,16 +990,17 @@ int intel_bw_atomic_check(struct intel_atomic_state *state)
> * cause.
> */
> if (!intel_can_enable_sagv(dev_priv, new_bw_state)) {
> - allowed_points &= ADLS_PSF_PT_MASK;
> - allowed_points |= BIT(max_bw_point);
> + qgv_points = BIT(max_bw_point);
> drm_dbg_kms(&dev_priv->drm, "No SAGV, using single QGV point %d\n",
> max_bw_point);
> }
> +
> /*
> * We store the ones which need to be masked as that is what PCode
> * actually accepts as a parameter.
> */
> - new_bw_state->qgv_points_mask = ~allowed_points &
> + new_bw_state->qgv_points_mask =
> + ~(ADLS_QGV_PT(qgv_points) | ADLS_PSF_PT(psf_points)) &
> icl_qgv_points_mask(dev_priv);
>
> /*
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index 70484f6f2b8b..48a12f6c19b4 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -6722,9 +6722,10 @@
> #define ICL_PCODE_SAGV_DE_MEM_SS_CONFIG 0xe
> #define ICL_PCODE_POINTS_RESTRICTED 0x0
> #define ICL_PCODE_POINTS_RESTRICTED_MASK 0xf
> -#define ADLS_PSF_PT_SHIFT 8
> #define ADLS_QGV_PT_MASK REG_GENMASK(7, 0)
> +#define ADLS_QGV_PT(x) REG_FIELD_PREP(ADLS_QGV_PT_MASK, (x))
> #define ADLS_PSF_PT_MASK REG_GENMASK(10, 8)
> +#define ADLS_PSF_PT(x) REG_FIELD_PREP(ADLS_PSF_PT_MASK, (x))
> #define GEN6_PCODE_READ_D_COMP 0x10
> #define GEN6_PCODE_WRITE_D_COMP 0x11
> #define ICL_PCODE_EXIT_TCCOLD 0x12
> --
> 2.34.1
>
next prev parent reply other threads:[~2022-03-16 17:56 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-09 16:49 [Intel-gfx] [PATCH v2 0/8] drm/i915: SAGV block time fixes Ville Syrjala
2022-03-09 16:49 ` [Intel-gfx] [PATCH v2 1/8] drm/i915: Treat SAGV block time 0 as SAGV disabled Ville Syrjala
2022-03-09 16:49 ` Ville Syrjala
2022-03-09 19:29 ` [Intel-gfx] " Lisovskiy, Stanislav
2022-03-09 20:35 ` Ville Syrjälä
2022-03-16 17:55 ` Lisovskiy, Stanislav
2022-03-09 16:49 ` [Intel-gfx] [PATCH v2 2/8] drm/i915: Rework SAGV block time probing Ville Syrjala
2022-03-16 17:55 ` Lisovskiy, Stanislav
2022-03-09 16:49 ` [Intel-gfx] [PATCH v2 3/8] drm/i915: Probe whether SAGV works on pre-icl Ville Syrjala
2022-03-16 17:57 ` Lisovskiy, Stanislav
2022-03-09 16:49 ` [Intel-gfx] [PATCH v2 4/8] drm/i915: Reject excessive SAGV block time Ville Syrjala
2022-03-16 17:58 ` Lisovskiy, Stanislav
2022-03-09 16:49 ` [Intel-gfx] [PATCH v2 5/8] drm/i915: Rename pre-icl SAGV enable/disable functions Ville Syrjala
2022-03-16 17:57 ` Lisovskiy, Stanislav
2022-03-09 16:49 ` [Intel-gfx] [PATCH v2 6/8] drm/i915: Fix PSF GV point mask when SAGV is not possible Ville Syrjala
2022-03-09 16:49 ` Ville Syrjala
2022-03-09 18:59 ` [Intel-gfx] " Lisovskiy, Stanislav
2022-03-09 18:59 ` Lisovskiy, Stanislav
2022-03-09 19:08 ` [Intel-gfx] " Ville Syrjälä
2022-03-09 19:08 ` Ville Syrjälä
2022-03-09 19:34 ` [Intel-gfx] " Lisovskiy, Stanislav
2022-03-09 19:34 ` Lisovskiy, Stanislav
2022-03-09 20:21 ` [Intel-gfx] " Ville Syrjälä
2022-03-09 20:21 ` Ville Syrjälä
2022-03-16 18:01 ` [Intel-gfx] " Lisovskiy, Stanislav
2022-03-09 16:49 ` [Intel-gfx] [PATCH v2 7/8] drm/i915: Unconfuses QGV vs. PSF point masks Ville Syrjala
2022-03-16 17:56 ` Lisovskiy, Stanislav [this message]
2022-03-09 16:49 ` [Intel-gfx] [PATCH v2 8/8] drm/i915: Rename QGV request/response bits Ville Syrjala
2022-03-16 17:57 ` Lisovskiy, Stanislav
2022-03-09 19:32 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for drm/i915: SAGV block time fixes (rev2) Patchwork
2022-03-09 20:00 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2022-03-10 5:49 ` [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=20220316175648.GC21723@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.