From: Yunwei Zhang <yunwei.zhang@intel.com>
To: intel-gfx@lists.freedesktop.org
Subject: [PATCH v11 1/2] drm/i915: Implement WaProgramMgsrForCorrectSliceSpecificMmioReads
Date: Wed, 18 Apr 2018 15:01:52 -0700 [thread overview]
Message-ID: <1524088912-18161-1-git-send-email-yunwei.zhang@intel.com> (raw)
In-Reply-To: <1524082996-13738-1-git-send-email-yunwei.zhang@intel.com>
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.
v8:
- Reviewed by Oscar
- Store default MCR value instead of calculate on the run. (Oscar)
v9:
- Changed naming and label fixes. (Oscar)
- Store only the selector instead of whole MCR. (Oscar)
v10:
- Improved comments, naming and line breaknig. (Oscar)
v11:
- Moved the comment to most relavent block. (Oscar)
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>
Reviewed-by: Oscar Mateo <oscar.mateo@intel.com>
---
drivers/gpu/drm/i915/intel_device_info.c | 47 ++++++++++++++++++++++++++++++++
drivers/gpu/drm/i915/intel_device_info.h | 3 ++
drivers/gpu/drm/i915/intel_engine_cs.c | 10 +++----
3 files changed, 55 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c
index a32ba72..ea62d45 100644
--- a/drivers/gpu/drm/i915/intel_device_info.c
+++ b/drivers/gpu/drm/i915/intel_device_info.c
@@ -719,6 +719,51 @@ static u32 read_timestamp_frequency(struct drm_i915_private *dev_priv)
return 0;
}
+
+static void sanitize_mcr(struct intel_device_info *info)
+{
+ struct drm_i915_private *dev_priv =
+ container_of(info, struct drm_i915_private, info);
+ u32 mcr;
+ u32 mcr_slice_subslice_mask;
+ u32 mcr_slice_subslice_select;
+ u32 slice = fls(info->sseu.slice_mask);
+ u32 subslice = fls(info->sseu.subslice_mask[slice]);
+
+ if (INTEL_GEN(dev_priv) >= 11) {
+ mcr_slice_subslice_mask = GEN11_MCR_SLICE_MASK |
+ GEN11_MCR_SUBSLICE_MASK;
+ mcr_slice_subslice_select = GEN11_MCR_SLICE(slice) |
+ GEN11_MCR_SUBSLICE(subslice);
+ } else {
+ mcr_slice_subslice_mask = GEN8_MCR_SLICE_MASK |
+ GEN8_MCR_SUBSLICE_MASK;
+ mcr_slice_subslice_select = GEN8_MCR_SLICE(slice) |
+ GEN8_MCR_SUBSLICE(subslice);
+ }
+
+ mcr = I915_READ(GEN8_MCR_SELECTOR);
+ mcr &= ~mcr_slice_subslice_mask;
+
+ /*
+ * WaProgramMgsrForCorrectSliceSpecificMmioReads:cnl,icl
+ * Before any MMIO read into slice/subslice specific registers, MCR
+ * packet control register needs to be programmed to point to any
+ * enabled s/ss pair. Otherwise, incorrect values will be returned.
+ * This means each subsequent MMIO read will be forwarded to an
+ * specific s/ss combination, but this is OK since these registers
+ * are consistent across s/ss in almost all cases. In the rare
+ * occasions, such as INSTDONE, where this value is dependent
+ * on s/ss combo, the read should be done with read_subslice_reg.
+ */
+ if (INTEL_GEN(dev_priv) >= 10)
+ mcr |= mcr_slice_subslice_select;
+
+ I915_WRITE(GEN8_MCR_SELECTOR, mcr);
+
+ info->default_mcr_s_ss_select = mcr_slice_subslice_select;
+}
+
/**
* intel_device_info_runtime_init - initialize runtime info
* @info: intel device info struct
@@ -851,6 +896,8 @@ void intel_device_info_runtime_init(struct intel_device_info *info)
else if (INTEL_INFO(dev_priv)->gen >= 11)
gen11_sseu_info_init(dev_priv);
+ sanitize_mcr(info);
+
/* Initialize command stream timestamp frequency */
info->cs_timestamp_frequency_khz = read_timestamp_frequency(dev_priv);
}
diff --git a/drivers/gpu/drm/i915/intel_device_info.h b/drivers/gpu/drm/i915/intel_device_info.h
index 933e316..2feccee 100644
--- a/drivers/gpu/drm/i915/intel_device_info.h
+++ b/drivers/gpu/drm/i915/intel_device_info.h
@@ -176,6 +176,9 @@ struct intel_device_info {
/* Slice/subslice/EU info */
struct sseu_dev_info sseu;
+ /* default selected slice/subslice in MCR packet control */
+ u32 default_mcr_s_ss_select;
+
u32 cs_timestamp_frequency_khz;
struct color_luts {
diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
index 1a83707..2b24277 100644
--- a/drivers/gpu/drm/i915/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/intel_engine_cs.c
@@ -831,11 +831,9 @@ 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.
- */
- WARN_ON_ONCE(mcr & mcr_slice_subslice_mask);
+
+ WARN_ON_ONCE((mcr & mcr_slice_subslice_mask) !=
+ dev_priv->info.default_mcr_s_ss_select);
mcr &= ~mcr_slice_subslice_mask;
mcr |= mcr_slice_subslice_select;
I915_WRITE_FW(GEN8_MCR_SELECTOR, mcr);
@@ -843,6 +841,8 @@ read_subslice_reg(struct drm_i915_private *dev_priv, int slice,
ret = I915_READ_FW(reg);
mcr &= ~mcr_slice_subslice_mask;
+ mcr |= dev_priv->info.default_mcr_s_ss_select;
+
I915_WRITE_FW(GEN8_MCR_SELECTOR, mcr);
intel_uncore_forcewake_put__locked(dev_priv, fw_domains);
--
2.7.4
_______________________________________________
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-18 22:10 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
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 ` Yunwei Zhang [this message]
2018-04-18 22:12 ` [PATCH v11 " 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=1524088912-18161-1-git-send-email-yunwei.zhang@intel.com \
--to=yunwei.zhang@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).