From: Oscar Mateo <oscar.mateo@intel.com>
To: Yunwei Zhang <yunwei.zhang@intel.com>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH v7 1/2] drm/i915/cnl: Implement WaProgramMgsrForCorrectSliceSpecificMmioReads
Date: Mon, 16 Apr 2018 15:09:58 -0700 [thread overview]
Message-ID: <7f33f4a8-9f8c-0de5-d131-e99cf1322f33@intel.com> (raw)
In-Reply-To: <1523913758-32381-1-git-send-email-yunwei.zhang@intel.com>
On 04/16/2018 02:22 PM, Yunwei Zhang wrote:
> WaProgramMgsrForCorrectSliceSpecificMmioReads dictate that before any MMIO
> read into Slice/Subslice specific registers, MCR packet control
> register(0xFDC) needs to be programmed to point to any enabled
> slice/subslice pair. Otherwise, incorrect value will be returned.
>
> However, that means each subsequent MMIO read will be forwarded to a
> specific slice/subslice combination as read is unicast. This is OK since
> slice/subslice specific register values are consistent in almost all cases
> across slice/subslice. There are rare occasions such as INSTDONE that this
> value will be dependent on slice/subslice combo, in such cases, we need to
> program 0xFDC and recover this after. This is already covered by
> read_subslice_reg.
>
> Also, 0xFDC will lose its information after TDR/engine reset/power state
> change.
>
> References: HSD#1405586840, BSID#0575
>
> v2:
> - use fls() instead of find_last_bit() (Chris)
> - added INTEL_SSEU to extract sseu from device info. (Chris)
> v3:
> - rebase on latest tip
> v5:
> - Added references (Mika)
> - Change the ordered of passing arguments and etc. (Ursulin)
> v7:
> - Rebased.
>
> Cc: Oscar Mateo <oscar.mateo@intel.com>
> Cc: Michel Thierry <michel.thierry@intel.com>
> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
> Signed-off-by: Yunwei Zhang <yunwei.zhang@intel.com>
> ---
> drivers/gpu/drm/i915/i915_drv.h | 2 ++
> drivers/gpu/drm/i915/intel_engine_cs.c | 30 +++++++++++++++++++++++++++---
> drivers/gpu/drm/i915/intel_workarounds.c | 12 ++++++++++++
> 3 files changed, 41 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 8e8667d..43498a47 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -2725,6 +2725,8 @@ int vlv_force_gfx_clock(struct drm_i915_private *dev_priv, bool on);
> int intel_engines_init_mmio(struct drm_i915_private *dev_priv);
> int intel_engines_init(struct drm_i915_private *dev_priv);
>
> +u32 calculate_mcr(struct drm_i915_private *dev_priv, u32 mcr);
> +
As a global function, this could use a better prefix (intel_something_)
Or, alternatively, make it local and store the calculation somewhere.
> /* intel_hotplug.c */
> void intel_hpd_irq_handler(struct drm_i915_private *dev_priv,
> u32 pin_mask, u32 long_mask);
> diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
> index 1a83707..3b6bc5e 100644
> --- a/drivers/gpu/drm/i915/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/intel_engine_cs.c
> @@ -799,6 +799,18 @@ const char *i915_cache_level_str(struct drm_i915_private *i915, int type)
> }
> }
>
> +u32 calculate_mcr(struct drm_i915_private *dev_priv, u32 mcr)
> +{
> + const struct sseu_dev_info *sseu = &(INTEL_INFO(dev_priv)->sseu);
> + u32 slice = fls(sseu->slice_mask);
> + u32 subslice = fls(sseu->subslice_mask[slice]);
> +
> + mcr &= ~(GEN8_MCR_SLICE_MASK | GEN8_MCR_SUBSLICE_MASK);
> + mcr |= GEN8_MCR_SLICE(slice) | GEN8_MCR_SUBSLICE(subslice);
> +
> + return mcr;
> +}
> +
> static inline uint32_t
> read_subslice_reg(struct drm_i915_private *dev_priv, int slice,
> int subslice, i915_reg_t reg)
> @@ -831,18 +843,30 @@ read_subslice_reg(struct drm_i915_private *dev_priv, int slice,
> intel_uncore_forcewake_get__locked(dev_priv, fw_domains);
>
> mcr = I915_READ_FW(GEN8_MCR_SELECTOR);
> +
> /*
> * The HW expects the slice and sublice selectors to be reset to 0
> - * after reading out the registers.
> + * before GEN10 or to a enabled s/ss post GEN10 after reading out the
> + * registers.
> */
> - WARN_ON_ONCE(mcr & mcr_slice_subslice_mask);
> + WARN_ON_ONCE(INTEL_GEN(dev_priv) < 10 &&
> + (mcr & mcr_slice_subslice_mask));
Advantage of storing the calculation: you can assert here for the
expected value, independently of the platform.
> mcr &= ~mcr_slice_subslice_mask;
> mcr |= mcr_slice_subslice_select;
> I915_WRITE_FW(GEN8_MCR_SELECTOR, mcr);
>
> ret = I915_READ_FW(reg);
>
> - mcr &= ~mcr_slice_subslice_mask;
> + /*
> + * WaProgramMgsrForCorrectSliceSpecificMmioReads:cnl
> + * expects mcr to be programed to a enabled slice/subslice pair
> + * before any MMIO read into slice/subslice register
> + */
> + if (INTEL_GEN(dev_priv) < 10)
> + mcr &= ~mcr_slice_subslice_mask;
> + else
> + mcr = calculate_mcr(dev_priv, mcr);
Another advantage: no branching here either.
> +
> I915_WRITE_FW(GEN8_MCR_SELECTOR, mcr);
>
> intel_uncore_forcewake_put__locked(dev_priv, fw_domains);
> diff --git a/drivers/gpu/drm/i915/intel_workarounds.c b/drivers/gpu/drm/i915/intel_workarounds.c
> index ec9d340..8a2354e 100644
> --- a/drivers/gpu/drm/i915/intel_workarounds.c
> +++ b/drivers/gpu/drm/i915/intel_workarounds.c
> @@ -645,8 +645,20 @@ static void cfl_gt_workarounds_apply(struct drm_i915_private *dev_priv)
> GAMT_ECO_ENABLE_IN_PLACE_DECOMPRESS);
> }
>
> +static void wa_init_mcr(struct drm_i915_private *dev_priv)
> +{
> + u32 mcr;
> +
> + mcr = I915_READ(GEN8_MCR_SELECTOR);
> + mcr = calculate_mcr(dev_priv, mcr);
> + I915_WRITE(GEN8_MCR_SELECTOR, mcr);
> +}
> +
> static void cnl_gt_workarounds_apply(struct drm_i915_private *dev_priv)
> {
> + /* WaProgramMgsrForCorrectSliceSpecificMmioReads: cnl */
> + wa_init_mcr(dev_priv);
> +
> /* WaDisableI2mCycleOnWRPort:cnl (pre-prod) */
> if (IS_CNL_REVID(dev_priv, CNL_REVID_B0, CNL_REVID_B0))
> I915_WRITE(GAMT_CHKN_BIT_REG,
With one of the two above (appropriate prefix or store value), this is:
Reviewed-by: Oscar Mateo <oscar.mateo@intel.com>
And as a side note: this is also needed for Icelake.
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2018-04-16 22:09 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-22 18:05 [PATCH 1/2] drm/i915/cnl: Implement WaProgramMgsrForCorrectSliceSpecificMmioReads Yunwei Zhang
2018-03-22 18:05 ` [PATCH 2/2] drm/i915: Implement WaProgramMgsrForL3BankSpecificMmioReads Yunwei Zhang
2018-03-26 16:12 ` [PATCH v4 " Yunwei Zhang
2018-03-26 17:03 ` Tvrtko Ursulin
2018-03-27 22:14 ` [PATCH v5 " Yunwei Zhang
2018-03-28 9:39 ` Tvrtko Ursulin
2018-03-28 9:50 ` Tvrtko Ursulin
2018-03-28 21:51 ` Zhang, Yunwei
2018-03-29 16:31 ` [PATCH v6 " Yunwei Zhang
2018-04-16 21:24 ` [PATCH v7 " Yunwei Zhang
2018-04-16 22:11 ` Oscar Mateo
2018-04-17 21:05 ` [PATCH v8 " Yunwei Zhang
2018-04-17 21:35 ` Oscar Mateo
2018-04-17 22:59 ` [PATCH v9 " Yunwei Zhang
2018-04-18 16:40 ` Oscar Mateo
2018-04-18 16:59 ` Oscar Mateo
2018-04-18 20:23 ` [PATCH v10 " Yunwei Zhang
2018-04-18 20:46 ` Oscar Mateo
2018-04-23 16:12 ` [PATCH v11 2/3] " Yunwei Zhang
2018-04-23 19:55 ` Rodrigo Vivi
2018-04-23 21:51 ` Zhang, Yunwei
2018-03-22 18:16 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/2] drm/i915/cnl: Implement WaProgramMgsrForCorrectSliceSpecificMmioReads Patchwork
2018-03-22 18:31 ` ✗ Fi.CI.BAT: " Patchwork
2018-03-23 8:50 ` [PATCH 1/2] " Mika Kuoppala
2018-03-26 16:12 ` [PATCH v4 " Yunwei Zhang
2018-03-26 16:57 ` Tvrtko Ursulin
2018-03-27 14:29 ` Chris Wilson
2018-03-27 16:17 ` Zhang, Yunwei
2018-03-27 14:22 ` Mika Kuoppala
2018-03-27 22:14 ` [PATCH v5 " Yunwei Zhang
2018-03-27 22:27 ` Chris Wilson
2018-03-27 22:49 ` Zhang, Yunwei
2018-03-27 23:13 ` Chris Wilson
2018-03-28 15:54 ` Zhang, Yunwei
2018-03-28 16:03 ` Chris Wilson
2018-03-28 16:11 ` Zhang, Yunwei
2018-03-29 15:44 ` [PATCH v6 " Yunwei Zhang
2018-04-10 16:00 ` Zhang, Yunwei
2018-04-16 21:22 ` [PATCH v7 " Yunwei Zhang
2018-04-16 22:09 ` Oscar Mateo [this message]
2018-04-17 15:54 ` Zhang, Yunwei
2018-04-17 21:05 ` [PATCH v8 1/2] drm/i915: " Yunwei Zhang
2018-04-17 21:34 ` Oscar Mateo
2018-04-17 21:53 ` Oscar Mateo
2018-04-17 22:58 ` [PATCH v9 " Yunwei Zhang
2018-04-18 16:30 ` Oscar Mateo
2018-04-18 16:38 ` Chris Wilson
2018-04-18 16:45 ` Oscar Mateo
2018-04-18 16:47 ` Oscar Mateo
2018-04-18 20:23 ` [PATCH v10 " Yunwei Zhang
2018-04-18 20:43 ` Oscar Mateo
2018-04-18 22:01 ` [PATCH v11 " Yunwei Zhang
2018-04-18 22:12 ` Oscar Mateo
2018-04-20 16:02 ` [PATCH v12 1/3] " Yunwei Zhang
2018-03-26 17:15 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [v4,1/2] drm/i915/cnl: Implement WaProgramMgsrForCorrectSliceSpecificMmioReads (rev3) Patchwork
2018-03-26 17:32 ` ✓ Fi.CI.BAT: success " Patchwork
2018-03-26 19:51 ` ✓ Fi.CI.IGT: " Patchwork
2018-03-27 23:54 ` ✓ Fi.CI.BAT: success for series starting with [v5,1/2] drm/i915/cnl: Implement WaProgramMgsrForCorrectSliceSpecificMmioReads (rev5) Patchwork
2018-03-28 9:37 ` ✓ Fi.CI.IGT: " Patchwork
2018-03-29 16:19 ` ✗ Fi.CI.BAT: failure for series starting with [v6,1/2] drm/i915/cnl: Implement WaProgramMgsrForCorrectSliceSpecificMmioReads (rev6) Patchwork
2018-03-29 17:33 ` ✗ Fi.CI.BAT: failure for series starting with [v6,1/2] drm/i915/cnl: Implement WaProgramMgsrForCorrectSliceSpecificMmioReads (rev7) Patchwork
2018-04-16 21:52 ` ✗ Fi.CI.SPARSE: warning for series starting with [v7,1/2] drm/i915/cnl: Implement WaProgramMgsrForCorrectSliceSpecificMmioReads (rev9) Patchwork
2018-04-16 22:13 ` ✓ Fi.CI.BAT: success " Patchwork
2018-04-16 23:08 ` ✓ Fi.CI.IGT: " Patchwork
2018-04-17 21:46 ` ✓ Fi.CI.BAT: success for series starting with [v8,1/2] drm/i915: Implement WaProgramMgsrForCorrectSliceSpecificMmioReads (rev11) Patchwork
2018-04-17 22:24 ` ✓ Fi.CI.IGT: " Patchwork
2018-04-17 23:50 ` ✗ Fi.CI.BAT: failure for series starting with [v9,1/2] drm/i915: Implement WaProgramMgsrForCorrectSliceSpecificMmioReads (rev13) Patchwork
2018-04-18 11:03 ` Patchwork
2018-04-18 20:38 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [v10,1/2] drm/i915: Implement WaProgramMgsrForCorrectSliceSpecificMmioReads (rev15) Patchwork
2018-04-18 20:55 ` ✗ Fi.CI.BAT: failure " Patchwork
2018-04-18 22:18 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [v11,1/2] drm/i915: Implement WaProgramMgsrForCorrectSliceSpecificMmioReads (rev16) Patchwork
2018-04-18 22:34 ` ✗ Fi.CI.BAT: 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=7f33f4a8-9f8c-0de5-d131-e99cf1322f33@intel.com \
--to=oscar.mateo@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=yunwei.zhang@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.