All of lore.kernel.org
 help / color / mirror / Atom feed
* [Intel-gfx] [PATCH 1/2] drm/i915/guc: Provide mmio list to be saved/restored on engine reset
@ 2019-12-12 18:43 Fernando Pacheco
  2019-12-12 18:43 ` [Intel-gfx] [PATCH 2/2] HAX: force enable_guc=2 and WA i915#571 Fernando Pacheco
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Fernando Pacheco @ 2019-12-12 18:43 UTC (permalink / raw)
  To: intel-gfx

The driver must provide GuC with a list of mmio registers
that should be saved/restored during a GuC-based engine reset.
We provide a minimal set of registers that should get things
working and extend as needed.

v2: rebase and comment to explain why mmio list is kept sorted

Signed-off-by: Fernando Pacheco <fernando.pacheco@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
---
 drivers/gpu/drm/i915/gt/intel_workarounds.c   | 25 +++--
 .../gpu/drm/i915/gt/intel_workarounds_types.h |  1 +
 drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c    | 96 ++++++++++++++++++-
 3 files changed, 114 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c
index 195ccf7db272..866d4a7ba0ea 100644
--- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
+++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
@@ -148,29 +148,37 @@ static void _wa_add(struct i915_wa_list *wal, const struct i915_wa *wa)
 }
 
 static void wa_add(struct i915_wa_list *wal, i915_reg_t reg, u32 mask,
-		   u32 val, u32 read_mask)
+		   u32 val, u32 read_mask, bool masked_bits)
 {
 	struct i915_wa wa = {
 		.reg  = reg,
 		.mask = mask,
 		.val  = val,
 		.read = read_mask,
+		.masked_bits = masked_bits,
 	};
 
 	_wa_add(wal, &wa);
 }
 
+static void
+__wa_write_masked_or(struct i915_wa_list *wal, i915_reg_t reg, u32 mask,
+		     u32 val, bool masked_bits)
+{
+	wa_add(wal, reg, mask, val, mask, masked_bits);
+}
+
 static void
 wa_write_masked_or(struct i915_wa_list *wal, i915_reg_t reg, u32 mask,
 		   u32 val)
 {
-	wa_add(wal, reg, mask, val, mask);
+	__wa_write_masked_or(wal, reg, mask, val, false);
 }
 
 static void
 wa_masked_en(struct i915_wa_list *wal, i915_reg_t reg, u32 val)
 {
-	wa_write_masked_or(wal, reg, val, _MASKED_BIT_ENABLE(val));
+	__wa_write_masked_or(wal, reg, val, _MASKED_BIT_ENABLE(val), true);
 }
 
 static void
@@ -186,13 +194,16 @@ wa_write_or(struct i915_wa_list *wal, i915_reg_t reg, u32 val)
 }
 
 #define WA_SET_BIT_MASKED(addr, mask) \
-	wa_write_masked_or(wal, (addr), (mask), _MASKED_BIT_ENABLE(mask))
+	__wa_write_masked_or(wal, (addr), (mask), \
+			     _MASKED_BIT_ENABLE(mask), true)
 
 #define WA_CLR_BIT_MASKED(addr, mask) \
-	wa_write_masked_or(wal, (addr), (mask), _MASKED_BIT_DISABLE(mask))
+	__wa_write_masked_or(wal, (addr), (mask), \
+			     _MASKED_BIT_DISABLE(mask), true)
 
 #define WA_SET_FIELD_MASKED(addr, mask, value) \
-	wa_write_masked_or(wal, (addr), (mask), _MASKED_FIELD((mask), (value)))
+	__wa_write_masked_or(wal, (addr), (mask), \
+			     _MASKED_FIELD((mask), (value)), true)
 
 static void gen8_ctx_workarounds_init(struct intel_engine_cs *engine,
 				      struct i915_wa_list *wal)
@@ -592,7 +603,7 @@ static void tgl_ctx_workarounds_init(struct intel_engine_cs *engine,
 	 */
 	wa_add(wal, FF_MODE2, FF_MODE2_TDS_TIMER_MASK, val,
 	       IS_TGL_REVID(engine->i915, TGL_REVID_A0, TGL_REVID_A0) ? 0 :
-			    FF_MODE2_TDS_TIMER_MASK);
+			    FF_MODE2_TDS_TIMER_MASK, false);
 }
 
 static void
diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds_types.h b/drivers/gpu/drm/i915/gt/intel_workarounds_types.h
index e27ab1b710b3..a43d5f968f2d 100644
--- a/drivers/gpu/drm/i915/gt/intel_workarounds_types.h
+++ b/drivers/gpu/drm/i915/gt/intel_workarounds_types.h
@@ -16,6 +16,7 @@ struct i915_wa {
 	u32		mask;
 	u32		val;
 	u32		read;
+	bool		masked_bits;
 };
 
 struct i915_wa_list {
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
index 101728006ae9..3fea13fc2b1a 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
@@ -3,6 +3,8 @@
  * Copyright © 2014-2019 Intel Corporation
  */
 
+#include <linux/bsearch.h>
+
 #include "gt/intel_gt.h"
 #include "intel_guc_ads.h"
 #include "intel_uc.h"
@@ -16,6 +18,9 @@
  * its internal state for sleep.
  */
 
+static void guc_mmio_reg_state_init(struct guc_mmio_reg_state *reg_state,
+				    struct intel_engine_cs *engine);
+
 static void guc_policy_init(struct guc_policy *policy)
 {
 	policy->execution_quantum = POLICY_DEFAULT_EXECUTION_QUANTUM_US;
@@ -67,12 +72,19 @@ struct __guc_ads_blob {
 
 static void __guc_ads_init(struct intel_guc *guc)
 {
-	struct drm_i915_private *dev_priv = guc_to_gt(guc)->i915;
+	struct intel_gt *gt = guc_to_gt(guc);
+	struct drm_i915_private *dev_priv = gt->i915;
 	struct __guc_ads_blob *blob = guc->ads_blob;
 	const u32 skipped_size = LRC_PPHWSP_SZ * PAGE_SIZE + LR_HW_CONTEXT_SIZE;
+	struct intel_engine_cs *engine;
+	enum intel_engine_id id;
 	u32 base;
 	u8 engine_class;
 
+	/* GuC mmio save/restore list */
+	for_each_engine(engine, gt, id)
+		guc_mmio_reg_state_init(&blob->reg_state, engine);
+
 	/* GuC scheduling policies */
 	guc_policies_init(&blob->policies);
 
@@ -170,3 +182,85 @@ void intel_guc_ads_reset(struct intel_guc *guc)
 		return;
 	__guc_ads_init(guc);
 }
+
+static int guc_mmio_reg_cmp(const void *a, const void *b)
+{
+	const struct guc_mmio_reg *ra = a;
+	const struct guc_mmio_reg *rb = b;
+
+	return (int)ra->offset - (int)rb->offset;
+}
+
+static void guc_mmio_reg_add(struct guc_mmio_regset *regset,
+			     u32 offset, u32 flags)
+{
+	u32 count = regset->number_of_registers;
+	struct guc_mmio_reg reg = {
+		.offset = offset,
+		.flags = flags,
+	};
+	struct guc_mmio_reg *slot;
+
+	GEM_BUG_ON(count >= GUC_REGSET_MAX_REGISTERS);
+
+	/*
+	 * The mmio list is built using separate lists within the driver.
+	 * It's possible that at some point we may attempt to add the same
+	 * register more than once. Do not consider this an error; silently
+	 * move on if the register is already in the list.
+	 */
+	if (bsearch(&reg, regset->registers, count,
+		    sizeof(reg), guc_mmio_reg_cmp))
+		return;
+
+	slot = &regset->registers[count];
+	regset->number_of_registers++;
+	*slot = reg;
+
+	while (slot-- > regset->registers) {
+		GEM_BUG_ON(slot[0].offset == slot[1].offset);
+		if (slot[1].offset > slot[0].offset)
+			break;
+
+		swap(slot[1], slot[0]);
+	}
+}
+
+#define GUC_MMIO_REG_ADD(regset, reg, masked) \
+	guc_mmio_reg_add(regset, \
+			 i915_mmio_reg_offset((reg)), \
+			 (masked) ? GUC_REGSET_MASKED : 0)
+
+static void guc_mmio_regset_init(struct guc_mmio_regset *regset,
+				 struct intel_engine_cs *engine)
+{
+	const u32 base = engine->mmio_base;
+	struct i915_wa_list *wal = &engine->wa_list;
+	struct i915_wa *wa;
+	unsigned int i;
+
+	GUC_MMIO_REG_ADD(regset, RING_MODE_GEN7(base), true);
+	GUC_MMIO_REG_ADD(regset, RING_HWS_PGA(base), false);
+	GUC_MMIO_REG_ADD(regset, RING_IMR(base), false);
+
+	for (i = 0, wa = wal->list; i < wal->count; i++, wa++)
+		GUC_MMIO_REG_ADD(regset, wa->reg, wa->masked_bits);
+
+	/* Be extra paranoid and include all whitelist registers. */
+	for (i = 0; i < RING_MAX_NONPRIV_SLOTS; i++)
+		GUC_MMIO_REG_ADD(regset,
+				 RING_FORCE_TO_NONPRIV(base, i),
+				 false);
+}
+
+static void guc_mmio_reg_state_init(struct guc_mmio_reg_state *reg_state,
+				    struct intel_engine_cs *engine)
+{
+	struct guc_mmio_regset *regset;
+
+	GEM_BUG_ON(engine->class >= GUC_MAX_ENGINE_CLASSES);
+	GEM_BUG_ON(engine->instance >= GUC_MAX_INSTANCES_PER_CLASS);
+	regset = &reg_state->engine_reg[engine->class][engine->instance];
+
+	guc_mmio_regset_init(regset, engine);
+}
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Intel-gfx] [PATCH 2/2] HAX: force enable_guc=2 and WA i915#571
  2019-12-12 18:43 [Intel-gfx] [PATCH 1/2] drm/i915/guc: Provide mmio list to be saved/restored on engine reset Fernando Pacheco
@ 2019-12-12 18:43 ` Fernando Pacheco
  2019-12-12 20:42 ` [Intel-gfx] ✓ Fi.CI.BAT: success for series starting with [1/2] drm/i915/guc: Provide mmio list to be saved/restored on engine reset Patchwork
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Fernando Pacheco @ 2019-12-12 18:43 UTC (permalink / raw)
  To: intel-gfx

From: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>

To get a full run with GuC loading and HuC auth enabled.

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
---
 drivers/gpu/drm/i915/gt/selftest_gt_pm.c | 9 +++++++++
 drivers/gpu/drm/i915/i915_params.h       | 2 +-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/gt/selftest_gt_pm.c b/drivers/gpu/drm/i915/gt/selftest_gt_pm.c
index 09ff8e4f88af..86b176c887b4 100644
--- a/drivers/gpu/drm/i915/gt/selftest_gt_pm.c
+++ b/drivers/gpu/drm/i915/gt/selftest_gt_pm.c
@@ -12,8 +12,11 @@ static int live_gt_resume(void *arg)
 {
 	struct intel_gt *gt = arg;
 	IGT_TIMEOUT(end_time);
+	intel_wakeref_t wakeref;
 	int err;
 
+	wakeref = intel_runtime_pm_get(gt->uncore->rpm);
+
 	/* Do several suspend/resume cycles to check we don't explode! */
 	do {
 		intel_gt_suspend_prepare(gt);
@@ -26,6 +29,10 @@ static int live_gt_resume(void *arg)
 			break;
 		}
 
+		err = intel_gt_init_hw(gt);
+		if (err)
+			break;
+
 		err = intel_gt_resume(gt);
 		if (err)
 			break;
@@ -45,6 +52,8 @@ static int live_gt_resume(void *arg)
 		}
 	} while (!__igt_timeout(end_time, NULL));
 
+	intel_runtime_pm_put(gt->uncore->rpm, wakeref);
+
 	return err;
 }
 
diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
index 31b88f297fbc..acda9f2a1207 100644
--- a/drivers/gpu/drm/i915/i915_params.h
+++ b/drivers/gpu/drm/i915/i915_params.h
@@ -54,7 +54,7 @@ struct drm_printer;
 	param(int, disable_power_well, -1) \
 	param(int, enable_ips, 1) \
 	param(int, invert_brightness, 0) \
-	param(int, enable_guc, 0) \
+	param(int, enable_guc, 2) \
 	param(int, guc_log_level, -1) \
 	param(char *, guc_firmware_path, NULL) \
 	param(char *, huc_firmware_path, NULL) \
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Intel-gfx] ✓ Fi.CI.BAT: success for series starting with [1/2] drm/i915/guc: Provide mmio list to be saved/restored on engine reset
  2019-12-12 18:43 [Intel-gfx] [PATCH 1/2] drm/i915/guc: Provide mmio list to be saved/restored on engine reset Fernando Pacheco
  2019-12-12 18:43 ` [Intel-gfx] [PATCH 2/2] HAX: force enable_guc=2 and WA i915#571 Fernando Pacheco
@ 2019-12-12 20:42 ` Patchwork
  2019-12-12 23:01 ` [Intel-gfx] [PATCH 1/2] " Tvrtko Ursulin
  2019-12-13 12:40 ` [Intel-gfx] ✗ Fi.CI.IGT: failure for series starting with [1/2] " Patchwork
  3 siblings, 0 replies; 6+ messages in thread
From: Patchwork @ 2019-12-12 20:42 UTC (permalink / raw)
  To: Fernando Pacheco; +Cc: intel-gfx

== Series Details ==

Series: series starting with [1/2] drm/i915/guc: Provide mmio list to be saved/restored on engine reset
URL   : https://patchwork.freedesktop.org/series/70844/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_7552 -> Patchwork_15727
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/index.html

Known issues
------------

  Here are the changes found in Patchwork_15727 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@i915_pm_rpm@module-reload:
    - fi-skl-6770hq:      [PASS][1] -> [FAIL][2] ([i915#178])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/fi-skl-6770hq/igt@i915_pm_rpm@module-reload.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/fi-skl-6770hq/igt@i915_pm_rpm@module-reload.html

  
#### Possible fixes ####

  * igt@gem_wait@basic-busy-all:
    - fi-ivb-3770:        [FAIL][3] -> [PASS][4]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/fi-ivb-3770/igt@gem_wait@basic-busy-all.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/fi-ivb-3770/igt@gem_wait@basic-busy-all.html

  * igt@i915_selftest@live_blt:
    - fi-hsw-4770:        [DMESG-FAIL][5] ([i915#553] / [i915#725]) -> [PASS][6]
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/fi-hsw-4770/igt@i915_selftest@live_blt.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/fi-hsw-4770/igt@i915_selftest@live_blt.html

  * igt@i915_selftest@live_gem_contexts:
    - fi-byt-n2820:       [INCOMPLETE][7] ([i915#45]) -> [PASS][8]
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/fi-byt-n2820/igt@i915_selftest@live_gem_contexts.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/fi-byt-n2820/igt@i915_selftest@live_gem_contexts.html

  * igt@i915_selftest@live_gt_pm:
    - fi-icl-guc:         [DMESG-FAIL][9] ([i915#571]) -> [PASS][10]
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/fi-icl-guc/igt@i915_selftest@live_gt_pm.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/fi-icl-guc/igt@i915_selftest@live_gt_pm.html

  * igt@i915_selftest@live_requests:
    - fi-ivb-3770:        [INCOMPLETE][11] ([i915#773]) -> [PASS][12]
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/fi-ivb-3770/igt@i915_selftest@live_requests.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/fi-ivb-3770/igt@i915_selftest@live_requests.html

  
#### Warnings ####

  * igt@kms_pipe_crc_basic@read-crc-pipe-b:
    - fi-kbl-x1275:       [DMESG-WARN][13] ([i915#62] / [i915#92]) -> [DMESG-WARN][14] ([i915#62] / [i915#92] / [i915#95]) +2 similar issues
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/fi-kbl-x1275/igt@kms_pipe_crc_basic@read-crc-pipe-b.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/fi-kbl-x1275/igt@kms_pipe_crc_basic@read-crc-pipe-b.html

  * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a:
    - fi-kbl-x1275:       [DMESG-WARN][15] ([i915#62] / [i915#92] / [i915#95]) -> [DMESG-WARN][16] ([i915#62] / [i915#92]) +6 similar issues
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/fi-kbl-x1275/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/fi-kbl-x1275/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#111593]: https://bugs.freedesktop.org/show_bug.cgi?id=111593
  [i915#178]: https://gitlab.freedesktop.org/drm/intel/issues/178
  [i915#45]: https://gitlab.freedesktop.org/drm/intel/issues/45
  [i915#553]: https://gitlab.freedesktop.org/drm/intel/issues/553
  [i915#571]: https://gitlab.freedesktop.org/drm/intel/issues/571
  [i915#62]: https://gitlab.freedesktop.org/drm/intel/issues/62
  [i915#725]: https://gitlab.freedesktop.org/drm/intel/issues/725
  [i915#773]: https://gitlab.freedesktop.org/drm/intel/issues/773
  [i915#92]: https://gitlab.freedesktop.org/drm/intel/issues/92
  [i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95


Participating hosts (53 -> 45)
------------------------------

  Missing    (8): fi-hsw-4770r fi-icl-1065g7 fi-ilk-m540 fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-byt-clapper fi-bdw-samus 


Build changes
-------------

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_7552 -> Patchwork_15727

  CI-20190529: 20190529
  CI_DRM_7552: 491a86a34502ffa5da51c110638b9cbc7dbd25c6 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5346: 466b0e6cbcbaccff012b484d1fd7676364b37b93 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_15727: 951d3ce94a6aa212e268083d6ea04cc90a0e23a3 @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

951d3ce94a6a HAX: force enable_guc=2 and WA i915#571
9d68d8b99e32 drm/i915/guc: Provide mmio list to be saved/restored on engine reset

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/index.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Intel-gfx] [PATCH 1/2] drm/i915/guc: Provide mmio list to be saved/restored on engine reset
  2019-12-12 18:43 [Intel-gfx] [PATCH 1/2] drm/i915/guc: Provide mmio list to be saved/restored on engine reset Fernando Pacheco
  2019-12-12 18:43 ` [Intel-gfx] [PATCH 2/2] HAX: force enable_guc=2 and WA i915#571 Fernando Pacheco
  2019-12-12 20:42 ` [Intel-gfx] ✓ Fi.CI.BAT: success for series starting with [1/2] drm/i915/guc: Provide mmio list to be saved/restored on engine reset Patchwork
@ 2019-12-12 23:01 ` Tvrtko Ursulin
  2019-12-18 23:31   ` Daniele Ceraolo Spurio
  2019-12-13 12:40 ` [Intel-gfx] ✗ Fi.CI.IGT: failure for series starting with [1/2] " Patchwork
  3 siblings, 1 reply; 6+ messages in thread
From: Tvrtko Ursulin @ 2019-12-12 23:01 UTC (permalink / raw)
  To: Fernando Pacheco, intel-gfx


On 12/12/2019 18:43, Fernando Pacheco wrote:
> The driver must provide GuC with a list of mmio registers
> that should be saved/restored during a GuC-based engine reset.
> We provide a minimal set of registers that should get things
> working and extend as needed.
> 
> v2: rebase and comment to explain why mmio list is kept sorted
> 
> Signed-off-by: Fernando Pacheco <fernando.pacheco@intel.com>
> Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> ---
>   drivers/gpu/drm/i915/gt/intel_workarounds.c   | 25 +++--
>   .../gpu/drm/i915/gt/intel_workarounds_types.h |  1 +
>   drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c    | 96 ++++++++++++++++++-
>   3 files changed, 114 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> index 195ccf7db272..866d4a7ba0ea 100644
> --- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
> +++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> @@ -148,29 +148,37 @@ static void _wa_add(struct i915_wa_list *wal, const struct i915_wa *wa)
>   }
>   
>   static void wa_add(struct i915_wa_list *wal, i915_reg_t reg, u32 mask,
> -		   u32 val, u32 read_mask)
> +		   u32 val, u32 read_mask, bool masked_bits)
>   {
>   	struct i915_wa wa = {
>   		.reg  = reg,
>   		.mask = mask,
>   		.val  = val,
>   		.read = read_mask,
> +		.masked_bits = masked_bits,
>   	};
>   
>   	_wa_add(wal, &wa);
>   }
>   
> +static void
> +__wa_write_masked_or(struct i915_wa_list *wal, i915_reg_t reg, u32 mask,
> +		     u32 val, bool masked_bits)
> +{
> +	wa_add(wal, reg, mask, val, mask, masked_bits);
> +}
> +
>   static void
>   wa_write_masked_or(struct i915_wa_list *wal, i915_reg_t reg, u32 mask,
>   		   u32 val)
>   {
> -	wa_add(wal, reg, mask, val, mask);
> +	__wa_write_masked_or(wal, reg, mask, val, false);
>   }
>   
>   static void
>   wa_masked_en(struct i915_wa_list *wal, i915_reg_t reg, u32 val)
>   {
> -	wa_write_masked_or(wal, reg, val, _MASKED_BIT_ENABLE(val));
> +	__wa_write_masked_or(wal, reg, val, _MASKED_BIT_ENABLE(val), true);
>   }
>   
>   static void
> @@ -186,13 +194,16 @@ wa_write_or(struct i915_wa_list *wal, i915_reg_t reg, u32 val)
>   }
>   
>   #define WA_SET_BIT_MASKED(addr, mask) \
> -	wa_write_masked_or(wal, (addr), (mask), _MASKED_BIT_ENABLE(mask))
> +	__wa_write_masked_or(wal, (addr), (mask), \
> +			     _MASKED_BIT_ENABLE(mask), true)
>   
>   #define WA_CLR_BIT_MASKED(addr, mask) \
> -	wa_write_masked_or(wal, (addr), (mask), _MASKED_BIT_DISABLE(mask))
> +	__wa_write_masked_or(wal, (addr), (mask), \
> +			     _MASKED_BIT_DISABLE(mask), true)
>   
>   #define WA_SET_FIELD_MASKED(addr, mask, value) \
> -	wa_write_masked_or(wal, (addr), (mask), _MASKED_FIELD((mask), (value)))
> +	__wa_write_masked_or(wal, (addr), (mask), \
> +			     _MASKED_FIELD((mask), (value)), true)
>   
>   static void gen8_ctx_workarounds_init(struct intel_engine_cs *engine,
>   				      struct i915_wa_list *wal)
> @@ -592,7 +603,7 @@ static void tgl_ctx_workarounds_init(struct intel_engine_cs *engine,
>   	 */
>   	wa_add(wal, FF_MODE2, FF_MODE2_TDS_TIMER_MASK, val,
>   	       IS_TGL_REVID(engine->i915, TGL_REVID_A0, TGL_REVID_A0) ? 0 :
> -			    FF_MODE2_TDS_TIMER_MASK);
> +			    FF_MODE2_TDS_TIMER_MASK, false);
>   }
>   
>   static void
> diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds_types.h b/drivers/gpu/drm/i915/gt/intel_workarounds_types.h
> index e27ab1b710b3..a43d5f968f2d 100644
> --- a/drivers/gpu/drm/i915/gt/intel_workarounds_types.h
> +++ b/drivers/gpu/drm/i915/gt/intel_workarounds_types.h
> @@ -16,6 +16,7 @@ struct i915_wa {
>   	u32		mask;
>   	u32		val;
>   	u32		read;
> +	bool		masked_bits;
>   };
>   
>   struct i915_wa_list {
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> index 101728006ae9..3fea13fc2b1a 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> @@ -3,6 +3,8 @@
>    * Copyright © 2014-2019 Intel Corporation
>    */
>   
> +#include <linux/bsearch.h>
> +
>   #include "gt/intel_gt.h"
>   #include "intel_guc_ads.h"
>   #include "intel_uc.h"
> @@ -16,6 +18,9 @@
>    * its internal state for sleep.
>    */
>   
> +static void guc_mmio_reg_state_init(struct guc_mmio_reg_state *reg_state,
> +				    struct intel_engine_cs *engine);
> +
>   static void guc_policy_init(struct guc_policy *policy)
>   {
>   	policy->execution_quantum = POLICY_DEFAULT_EXECUTION_QUANTUM_US;
> @@ -67,12 +72,19 @@ struct __guc_ads_blob {
>   
>   static void __guc_ads_init(struct intel_guc *guc)
>   {
> -	struct drm_i915_private *dev_priv = guc_to_gt(guc)->i915;
> +	struct intel_gt *gt = guc_to_gt(guc);
> +	struct drm_i915_private *dev_priv = gt->i915;
>   	struct __guc_ads_blob *blob = guc->ads_blob;
>   	const u32 skipped_size = LRC_PPHWSP_SZ * PAGE_SIZE + LR_HW_CONTEXT_SIZE;
> +	struct intel_engine_cs *engine;
> +	enum intel_engine_id id;
>   	u32 base;
>   	u8 engine_class;
>   
> +	/* GuC mmio save/restore list */
> +	for_each_engine(engine, gt, id)
> +		guc_mmio_reg_state_init(&blob->reg_state, engine);
> +
>   	/* GuC scheduling policies */
>   	guc_policies_init(&blob->policies);
>   
> @@ -170,3 +182,85 @@ void intel_guc_ads_reset(struct intel_guc *guc)
>   		return;
>   	__guc_ads_init(guc);
>   }
> +
> +static int guc_mmio_reg_cmp(const void *a, const void *b)
> +{
> +	const struct guc_mmio_reg *ra = a;
> +	const struct guc_mmio_reg *rb = b;
> +
> +	return (int)ra->offset - (int)rb->offset;
> +}
> +
> +static void guc_mmio_reg_add(struct guc_mmio_regset *regset,
> +			     u32 offset, u32 flags)
> +{
> +	u32 count = regset->number_of_registers;
> +	struct guc_mmio_reg reg = {
> +		.offset = offset,
> +		.flags = flags,
> +	};
> +	struct guc_mmio_reg *slot;
> +
> +	GEM_BUG_ON(count >= GUC_REGSET_MAX_REGISTERS);
> +
> +	/*
> +	 * The mmio list is built using separate lists within the driver.
> +	 * It's possible that at some point we may attempt to add the same
> +	 * register more than once. Do not consider this an error; silently
> +	 * move on if the register is already in the list.
> +	 */
> +	if (bsearch(&reg, regset->registers, count,
> +		    sizeof(reg), guc_mmio_reg_cmp))
> +		return;
> +
> +	slot = &regset->registers[count];
> +	regset->number_of_registers++;
> +	*slot = reg;
> +
> +	while (slot-- > regset->registers) {
> +		GEM_BUG_ON(slot[0].offset == slot[1].offset);
> +		if (slot[1].offset > slot[0].offset)
> +			break;
> +
> +		swap(slot[1], slot[0]);
> +	}
> +}
> +
> +#define GUC_MMIO_REG_ADD(regset, reg, masked) \
> +	guc_mmio_reg_add(regset, \
> +			 i915_mmio_reg_offset((reg)), \
> +			 (masked) ? GUC_REGSET_MASKED : 0)
> +
> +static void guc_mmio_regset_init(struct guc_mmio_regset *regset,
> +				 struct intel_engine_cs *engine)
> +{
> +	const u32 base = engine->mmio_base;
> +	struct i915_wa_list *wal = &engine->wa_list;
> +	struct i915_wa *wa;
> +	unsigned int i;
> +
> +	GUC_MMIO_REG_ADD(regset, RING_MODE_GEN7(base), true);
> +	GUC_MMIO_REG_ADD(regset, RING_HWS_PGA(base), false);
> +	GUC_MMIO_REG_ADD(regset, RING_IMR(base), false);
> +
> +	for (i = 0, wa = wal->list; i < wal->count; i++, wa++)
> +		GUC_MMIO_REG_ADD(regset, wa->reg, wa->masked_bits);
> +
> +	/* Be extra paranoid and include all whitelist registers. */
> +	for (i = 0; i < RING_MAX_NONPRIV_SLOTS; i++)
> +		GUC_MMIO_REG_ADD(regset,
> +				 RING_FORCE_TO_NONPRIV(base, i),
> +				 false);
> +}
> +
> +static void guc_mmio_reg_state_init(struct guc_mmio_reg_state *reg_state,
> +				    struct intel_engine_cs *engine)
> +{
> +	struct guc_mmio_regset *regset;
> +
> +	GEM_BUG_ON(engine->class >= GUC_MAX_ENGINE_CLASSES);
> +	GEM_BUG_ON(engine->instance >= GUC_MAX_INSTANCES_PER_CLASS);
> +	regset = &reg_state->engine_reg[engine->class][engine->instance];
> +
> +	guc_mmio_regset_init(regset, engine);
> +}
> 

So presumably the relevant GuC FW interface structures will remain the 
same from upstream to new interface?

Assuming that, the code looks fine so:

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

But it is dead code for now, right? Dead in the sense GuC engine reset 
path does not get exercised until more new patches land.

Regards,

Tvrtko
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Intel-gfx] ✗ Fi.CI.IGT: failure for series starting with [1/2] drm/i915/guc: Provide mmio list to be saved/restored on engine reset
  2019-12-12 18:43 [Intel-gfx] [PATCH 1/2] drm/i915/guc: Provide mmio list to be saved/restored on engine reset Fernando Pacheco
                   ` (2 preceding siblings ...)
  2019-12-12 23:01 ` [Intel-gfx] [PATCH 1/2] " Tvrtko Ursulin
@ 2019-12-13 12:40 ` Patchwork
  3 siblings, 0 replies; 6+ messages in thread
From: Patchwork @ 2019-12-13 12:40 UTC (permalink / raw)
  To: Fernando Pacheco; +Cc: intel-gfx

== Series Details ==

Series: series starting with [1/2] drm/i915/guc: Provide mmio list to be saved/restored on engine reset
URL   : https://patchwork.freedesktop.org/series/70844/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_7552_full -> Patchwork_15727_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_15727_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_15727_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in Patchwork_15727_full:

### IGT changes ###

#### Possible regressions ####

  * igt@prime_mmap_coherency@ioctl-errors:
    - shard-hsw:          [PASS][1] -> [FAIL][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-hsw8/igt@prime_mmap_coherency@ioctl-errors.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-hsw6/igt@prime_mmap_coherency@ioctl-errors.html

  
#### Suppressed ####

  The following results come from untrusted machines, tests, or statuses.
  They do not affect the overall result.

  * {igt@gem_mmap_offset@clear}:
    - shard-iclb:         [PASS][3] -> [DMESG-WARN][4]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-iclb1/igt@gem_mmap_offset@clear.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-iclb7/igt@gem_mmap_offset@clear.html

  
Known issues
------------

  Here are the changes found in Patchwork_15727_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_ctx_persistence@vcs1-mixed:
    - shard-iclb:         [PASS][5] -> [SKIP][6] ([fdo#109276] / [fdo#112080]) +1 similar issue
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-iclb1/igt@gem_ctx_persistence@vcs1-mixed.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-iclb5/igt@gem_ctx_persistence@vcs1-mixed.html

  * igt@gem_exec_balancer@bonded-slice:
    - shard-kbl:          [PASS][7] -> [FAIL][8] ([i915#800])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-kbl3/igt@gem_exec_balancer@bonded-slice.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-kbl6/igt@gem_exec_balancer@bonded-slice.html
    - shard-iclb:         [PASS][9] -> [FAIL][10] ([i915#800])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-iclb6/igt@gem_exec_balancer@bonded-slice.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-iclb2/igt@gem_exec_balancer@bonded-slice.html
    - shard-tglb:         [PASS][11] -> [FAIL][12] ([i915#800])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-tglb1/igt@gem_exec_balancer@bonded-slice.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-tglb4/igt@gem_exec_balancer@bonded-slice.html

  * igt@gem_exec_parse_blt@allowed-all:
    - shard-glk:          [PASS][13] -> [DMESG-WARN][14] ([i915#716])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-glk9/igt@gem_exec_parse_blt@allowed-all.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-glk3/igt@gem_exec_parse_blt@allowed-all.html
    - shard-kbl:          [PASS][15] -> [DMESG-WARN][16] ([i915#716])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-kbl4/igt@gem_exec_parse_blt@allowed-all.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-kbl4/igt@gem_exec_parse_blt@allowed-all.html

  * igt@gem_exec_schedule@in-order-bsd2:
    - shard-iclb:         [PASS][17] -> [SKIP][18] ([fdo#109276]) +4 similar issues
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-iclb1/igt@gem_exec_schedule@in-order-bsd2.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-iclb8/igt@gem_exec_schedule@in-order-bsd2.html

  * igt@gem_exec_schedule@preempt-hang-bsd:
    - shard-iclb:         [PASS][19] -> [SKIP][20] ([fdo#112146])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-iclb6/igt@gem_exec_schedule@preempt-hang-bsd.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-iclb2/igt@gem_exec_schedule@preempt-hang-bsd.html

  * igt@gem_exec_suspend@basic-s0:
    - shard-iclb:         [PASS][21] -> [DMESG-WARN][22] ([fdo#111764])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-iclb5/igt@gem_exec_suspend@basic-s0.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-iclb3/igt@gem_exec_suspend@basic-s0.html

  * igt@gem_softpin@noreloc-s3:
    - shard-apl:          [PASS][23] -> [DMESG-WARN][24] ([i915#180]) +2 similar issues
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-apl2/igt@gem_softpin@noreloc-s3.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-apl4/igt@gem_softpin@noreloc-s3.html

  * igt@gem_tiled_blits@normal:
    - shard-hsw:          [PASS][25] -> [FAIL][26] ([i915#818])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-hsw6/igt@gem_tiled_blits@normal.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-hsw5/igt@gem_tiled_blits@normal.html

  * igt@gem_userptr_blits@sync-unmap-after-close:
    - shard-snb:          [PASS][27] -> [DMESG-WARN][28] ([fdo#111870])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-snb2/igt@gem_userptr_blits@sync-unmap-after-close.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-snb7/igt@gem_userptr_blits@sync-unmap-after-close.html

  * igt@gem_workarounds@suspend-resume-context:
    - shard-skl:          [PASS][29] -> [INCOMPLETE][30] ([i915#69])
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-skl6/igt@gem_workarounds@suspend-resume-context.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-skl3/igt@gem_workarounds@suspend-resume-context.html

  * igt@i915_selftest@live_gt_timelines:
    - shard-tglb:         [PASS][31] -> [INCOMPLETE][32] ([i915#455])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-tglb4/igt@i915_selftest@live_gt_timelines.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-tglb8/igt@i915_selftest@live_gt_timelines.html

  * igt@i915_selftest@mock_sanitycheck:
    - shard-kbl:          [PASS][33] -> [DMESG-WARN][34] ([i915#747])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-kbl6/igt@i915_selftest@mock_sanitycheck.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-kbl6/igt@i915_selftest@mock_sanitycheck.html

  * igt@kms_ccs@pipe-a-crc-primary-basic:
    - shard-kbl:          [PASS][35] -> [INCOMPLETE][36] ([fdo#103665] / [i915#667])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-kbl4/igt@kms_ccs@pipe-a-crc-primary-basic.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-kbl3/igt@kms_ccs@pipe-a-crc-primary-basic.html

  * igt@kms_cursor_crc@pipe-b-cursor-128x42-sliding:
    - shard-skl:          [PASS][37] -> [FAIL][38] ([i915#54]) +1 similar issue
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-skl8/igt@kms_cursor_crc@pipe-b-cursor-128x42-sliding.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-skl2/igt@kms_cursor_crc@pipe-b-cursor-128x42-sliding.html

  * igt@kms_cursor_legacy@2x-long-flip-vs-cursor-atomic:
    - shard-glk:          [PASS][39] -> [FAIL][40] ([i915#72])
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-glk5/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-atomic.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-glk5/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-atomic.html

  * igt@kms_draw_crc@draw-method-xrgb8888-mmap-cpu-untiled:
    - shard-skl:          [PASS][41] -> [FAIL][42] ([i915#177] / [i915#52] / [i915#54])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-skl5/igt@kms_draw_crc@draw-method-xrgb8888-mmap-cpu-untiled.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-skl6/igt@kms_draw_crc@draw-method-xrgb8888-mmap-cpu-untiled.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-mmap-wc:
    - shard-tglb:         [PASS][43] -> [INCOMPLETE][44] ([i915#474] / [i915#667])
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-tglb4/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-mmap-wc.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-tglb4/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-pwrite:
    - shard-tglb:         [PASS][45] -> [FAIL][46] ([i915#49]) +3 similar issues
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-tglb5/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-pwrite.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-tglb2/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-pwrite.html

  * igt@kms_plane@pixel-format-pipe-b-planes-source-clamping:
    - shard-skl:          [PASS][47] -> [INCOMPLETE][48] ([fdo#112391] / [i915#648] / [i915#667])
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-skl2/igt@kms_plane@pixel-format-pipe-b-planes-source-clamping.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-skl8/igt@kms_plane@pixel-format-pipe-b-planes-source-clamping.html

  * igt@kms_plane@plane-panning-bottom-right-suspend-pipe-a-planes:
    - shard-kbl:          [PASS][49] -> [DMESG-WARN][50] ([i915#180])
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-kbl2/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-a-planes.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-kbl7/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-a-planes.html

  * igt@kms_plane_alpha_blend@pipe-a-coverage-7efc:
    - shard-skl:          [PASS][51] -> [FAIL][52] ([fdo#108145])
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-skl4/igt@kms_plane_alpha_blend@pipe-a-coverage-7efc.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-skl2/igt@kms_plane_alpha_blend@pipe-a-coverage-7efc.html

  * igt@kms_plane_alpha_blend@pipe-b-coverage-7efc:
    - shard-skl:          [PASS][53] -> [FAIL][54] ([fdo#108145] / [i915#265])
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-skl7/igt@kms_plane_alpha_blend@pipe-b-coverage-7efc.html
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-skl8/igt@kms_plane_alpha_blend@pipe-b-coverage-7efc.html

  * igt@kms_vblank@pipe-a-ts-continuation-suspend:
    - shard-tglb:         [PASS][55] -> [INCOMPLETE][56] ([i915#456] / [i915#460]) +1 similar issue
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-tglb2/igt@kms_vblank@pipe-a-ts-continuation-suspend.html
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-tglb7/igt@kms_vblank@pipe-a-ts-continuation-suspend.html

  * igt@perf_pmu@semaphore-busy-vcs1:
    - shard-iclb:         [PASS][57] -> [SKIP][58] ([fdo#112080])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-iclb1/igt@perf_pmu@semaphore-busy-vcs1.html
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-iclb8/igt@perf_pmu@semaphore-busy-vcs1.html

  
#### Possible fixes ####

  * igt@gem_ctx_isolation@vcs1-reset:
    - shard-iclb:         [SKIP][59] ([fdo#109276] / [fdo#112080]) -> [PASS][60]
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-iclb6/igt@gem_ctx_isolation@vcs1-reset.html
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-iclb2/igt@gem_ctx_isolation@vcs1-reset.html

  * igt@gem_ctx_persistence@bcs0-mixed-process:
    - shard-skl:          [FAIL][61] ([i915#679]) -> [PASS][62]
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-skl5/igt@gem_ctx_persistence@bcs0-mixed-process.html
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-skl7/igt@gem_ctx_persistence@bcs0-mixed-process.html

  * igt@gem_exec_nop@basic-series:
    - shard-tglb:         [INCOMPLETE][63] ([i915#435]) -> [PASS][64]
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-tglb3/igt@gem_exec_nop@basic-series.html
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-tglb8/igt@gem_exec_nop@basic-series.html

  * igt@gem_exec_parallel@vcs1-contexts:
    - shard-kbl:          [INCOMPLETE][65] ([fdo#103665]) -> [PASS][66]
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-kbl1/igt@gem_exec_parallel@vcs1-contexts.html
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-kbl6/igt@gem_exec_parallel@vcs1-contexts.html

  * igt@gem_exec_parallel@vcs1-fds:
    - shard-iclb:         [SKIP][67] ([fdo#112080]) -> [PASS][68] +7 similar issues
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-iclb6/igt@gem_exec_parallel@vcs1-fds.html
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-iclb2/igt@gem_exec_parallel@vcs1-fds.html

  * igt@gem_exec_schedule@preempt-other-chain-bsd:
    - shard-iclb:         [SKIP][69] ([fdo#112146]) -> [PASS][70] +4 similar issues
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-iclb1/igt@gem_exec_schedule@preempt-other-chain-bsd.html
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-iclb5/igt@gem_exec_schedule@preempt-other-chain-bsd.html

  * igt@gem_exec_schedule@preempt-queue-bsd1:
    - shard-iclb:         [SKIP][71] ([fdo#109276]) -> [PASS][72] +8 similar issues
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-iclb6/igt@gem_exec_schedule@preempt-queue-bsd1.html
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-iclb2/igt@gem_exec_schedule@preempt-queue-bsd1.html

  * igt@gem_persistent_relocs@forked-interruptible-thrashing:
    - shard-snb:          [TIMEOUT][73] ([i915#530]) -> [PASS][74]
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-snb7/igt@gem_persistent_relocs@forked-interruptible-thrashing.html
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-snb5/igt@gem_persistent_relocs@forked-interruptible-thrashing.html
    - shard-tglb:         [FAIL][75] ([i915#520]) -> [PASS][76]
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-tglb4/igt@gem_persistent_relocs@forked-interruptible-thrashing.html
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-tglb4/igt@gem_persistent_relocs@forked-interruptible-thrashing.html

  * igt@gem_ppgtt@flink-and-close-vma-leak:
    - shard-glk:          [FAIL][77] ([i915#644]) -> [PASS][78]
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-glk1/igt@gem_ppgtt@flink-and-close-vma-leak.html
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-glk5/igt@gem_ppgtt@flink-and-close-vma-leak.html
    - shard-apl:          [FAIL][79] ([i915#644]) -> [PASS][80]
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-apl7/igt@gem_ppgtt@flink-and-close-vma-leak.html
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-apl7/igt@gem_ppgtt@flink-and-close-vma-leak.html
    - shard-kbl:          [FAIL][81] ([i915#644]) -> [PASS][82]
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-kbl4/igt@gem_ppgtt@flink-and-close-vma-leak.html
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-kbl4/igt@gem_ppgtt@flink-and-close-vma-leak.html

  * igt@gem_sync@basic-store-each:
    - shard-tglb:         [INCOMPLETE][83] ([i915#435] / [i915#472]) -> [PASS][84]
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-tglb8/igt@gem_sync@basic-store-each.html
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-tglb2/igt@gem_sync@basic-store-each.html

  * igt@gem_userptr_blits@dmabuf-unsync:
    - shard-snb:          [DMESG-WARN][85] ([fdo#111870]) -> [PASS][86]
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-snb5/igt@gem_userptr_blits@dmabuf-unsync.html
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-snb2/igt@gem_userptr_blits@dmabuf-unsync.html

  * igt@gem_workarounds@suspend-resume-fd:
    - shard-skl:          [INCOMPLETE][87] ([i915#69]) -> [PASS][88] +1 similar issue
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-skl8/igt@gem_workarounds@suspend-resume-fd.html
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-skl8/igt@gem_workarounds@suspend-resume-fd.html

  * igt@kms_cursor_crc@pipe-a-cursor-suspend:
    - shard-kbl:          [DMESG-WARN][89] ([i915#180]) -> [PASS][90] +11 similar issues
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-kbl3/igt@kms_cursor_crc@pipe-a-cursor-suspend.html
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-kbl2/igt@kms_cursor_crc@pipe-a-cursor-suspend.html

  * igt@kms_cursor_crc@pipe-c-cursor-128x42-sliding:
    - shard-skl:          [FAIL][91] ([i915#54]) -> [PASS][92]
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-skl4/igt@kms_cursor_crc@pipe-c-cursor-128x42-sliding.html
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-skl10/igt@kms_cursor_crc@pipe-c-cursor-128x42-sliding.html

  * igt@kms_cursor_crc@pipe-c-cursor-suspend:
    - shard-tglb:         [INCOMPLETE][93] ([i915#456] / [i915#460]) -> [PASS][94]
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-tglb5/igt@kms_cursor_crc@pipe-c-cursor-suspend.html
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-tglb2/igt@kms_cursor_crc@pipe-c-cursor-suspend.html

  * igt@kms_draw_crc@draw-method-xrgb2101010-blt-untiled:
    - shard-skl:          [INCOMPLETE][95] ([i915#646] / [i915#667]) -> [PASS][96]
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-skl7/igt@kms_draw_crc@draw-method-xrgb2101010-blt-untiled.html
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-skl6/igt@kms_draw_crc@draw-method-xrgb2101010-blt-untiled.html

  * igt@kms_draw_crc@draw-method-xrgb2101010-mmap-gtt-ytiled:
    - shard-skl:          [FAIL][97] ([i915#52] / [i915#54]) -> [PASS][98] +1 similar issue
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-skl3/igt@kms_draw_crc@draw-method-xrgb2101010-mmap-gtt-ytiled.html
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-skl7/igt@kms_draw_crc@draw-method-xrgb2101010-mmap-gtt-ytiled.html

  * igt@kms_draw_crc@draw-method-xrgb2101010-render-ytiled:
    - shard-skl:          [INCOMPLETE][99] ([i915#646]) -> [PASS][100]
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-skl7/igt@kms_draw_crc@draw-method-xrgb2101010-render-ytiled.html
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-skl10/igt@kms_draw_crc@draw-method-xrgb2101010-render-ytiled.html

  * igt@kms_draw_crc@draw-method-xrgb8888-blt-untiled:
    - shard-skl:          [INCOMPLETE][101] -> [PASS][102]
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-skl1/igt@kms_draw_crc@draw-method-xrgb8888-blt-untiled.html
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-skl8/igt@kms_draw_crc@draw-method-xrgb8888-blt-untiled.html

  * igt@kms_flip@flip-vs-suspend:
    - shard-apl:          [DMESG-WARN][103] ([i915#180]) -> [PASS][104] +1 similar issue
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-apl1/igt@kms_flip@flip-vs-suspend.html
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-apl3/igt@kms_flip@flip-vs-suspend.html

  * igt@kms_flip@flip-vs-suspend-interruptible:
    - shard-kbl:          [INCOMPLETE][105] ([fdo#103665] / [i915#600]) -> [PASS][106]
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-kbl7/igt@kms_flip@flip-vs-suspend-interruptible.html
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-kbl7/igt@kms_flip@flip-vs-suspend-interruptible.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-move:
    - shard-tglb:         [INCOMPLETE][107] ([i915#474] / [i915#667]) -> [PASS][108] +2 similar issues
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-tglb7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-move.html
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-tglb3/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-pwrite:
    - shard-tglb:         [FAIL][109] ([i915#49]) -> [PASS][110]
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-tglb4/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-pwrite.html
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-tglb4/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-iclb:         [INCOMPLETE][111] ([i915#123] / [i915#140]) -> [PASS][112]
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-iclb3/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc.html
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-iclb2/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_plane@pixel-format-pipe-a-planes:
    - shard-kbl:          [INCOMPLETE][113] ([fdo#103665] / [i915#648] / [i915#667]) -> [PASS][114] +1 similar issue
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-kbl3/igt@kms_plane@pixel-format-pipe-a-planes.html
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-kbl1/igt@kms_plane@pixel-format-pipe-a-planes.html

  * igt@kms_plane@pixel-format-pipe-a-planes-source-clamping:
    - shard-skl:          [INCOMPLETE][115] ([i915#648]) -> [PASS][116]
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-skl2/igt@kms_plane@pixel-format-pipe-a-planes-source-clamping.html
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-skl4/igt@kms_plane@pixel-format-pipe-a-planes-source-clamping.html

  * igt@kms_plane@pixel-format-pipe-b-planes:
    - shard-skl:          [INCOMPLETE][117] ([fdo#112391] / [i915#648] / [i915#667]) -> [PASS][118] +1 similar issue
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-skl10/igt@kms_plane@pixel-format-pipe-b-planes.html
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-skl10/igt@kms_plane@pixel-format-pipe-b-planes.html

  * igt@kms_plane_lowres@pipe-c-tiling-none:
    - shard-kbl:          [DMESG-WARN][119] ([i915#56] / [i915#78]) -> [PASS][120]
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-kbl2/igt@kms_plane_lowres@pipe-c-tiling-none.html
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-kbl2/igt@kms_plane_lowres@pipe-c-tiling-none.html

  * igt@kms_psr@psr2_cursor_render:
    - shard-iclb:         [SKIP][121] ([fdo#109441]) -> [PASS][122] +3 similar issues
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-iclb6/igt@kms_psr@psr2_cursor_render.html
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-iclb2/igt@kms_psr@psr2_cursor_render.html

  
#### Warnings ####

  * igt@i915_pm_dc@dc6-psr:
    - shard-tglb:         [FAIL][123] ([i915#454]) -> [SKIP][124] ([i915#468])
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7552/shard-tglb7/igt@i915_pm_dc@dc6-psr.html
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/shard-tglb6/igt@i915_pm_dc@dc6-psr.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665
  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#109276]: https://bugs.freedesktop.org/show_bug.cgi?id=109276
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [fdo#111764]: https://bugs.freedesktop.org/show_bug.cgi?id=111764
  [fdo#111870]: https://bugs.freedesktop.org/show_bug.cgi?id=111870
  [fdo#112080]: https://bugs.freedesktop.org/show_bug.cgi?id=112080
  [fdo#112146]: https://bugs.freedesktop.org/show_bug.cgi?id=112146
  [fdo#112391]: https://bugs.freedesktop.org/show_bug.cgi?id=112391
  [i915#123]: https://gitlab.freedesktop.org/drm/intel/issues/123
  [i915#140]: https://gitlab.freedesktop.org/drm/intel/issues/140
  [i915#177]: https://gitlab.freedesktop.org/drm/intel/issues/177
  [i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180
  [i915#265]: https://gitlab.freedesktop.org/drm/intel/issues/265
  [i915#435]: https://gitlab.freedesktop.org/drm/intel/issues/435
  [i915#454]: https://gitlab.freedesktop.org/drm/intel/issues/454
  [i915#455]: https://gitlab.freedesktop.org/drm/intel/issues/455
  [i915#456]: https://gitlab.freedesktop.org/drm/intel/issues/456
  [i915#460]: https://gitlab.freedesktop.org/drm/intel/issues/460
  [i915#468]: https://gitlab.freedesktop.org/drm/intel/issues/468
  [i915#472]: https://gitlab.freedesktop.org/drm/intel/issues/472
  [i915#474]: https://gitlab.freedesktop.org/drm/intel/issues/474
  [i915#49]: https://gitlab.freedesktop.org/drm/intel/issues/49
  [i915#52]: https://gitlab.freedesktop.org/drm/intel/issues/52
  [i915#520]: https://gitlab.freedesktop.org/drm/intel/issues/520
  [i915#530]: https://gitlab.freedesktop.org/drm/intel/issues/530
  [i915#54]: https://gitlab.freedesktop.org/drm/intel/issues/54
  [i915#56]: https://gitlab.freedesktop.org/drm/intel/issues/56
  [i915#600]: https://gitlab.freedesktop.org/drm/intel/issues/600
  [i915#644]: https://gitlab.freedesktop.org/drm/intel/issues/644
  [i915#646]: https://gitlab.freedesktop.org/drm/intel/issues/646
  [i915#648]: https://gitlab.freedesktop.org/drm/intel/issues/648
  [i915#667]: https://gitlab.freedesktop.org/drm/intel/issues/667
  [i915#679]: https://gitlab.freedesktop.org/drm/intel/issues/679
  [i915#69]: https://gitlab.freedesktop.org/drm/intel/issues/69
  [i915#716]: https://gitlab.freedesktop.org/drm/intel/issues/716
  [i915#72]: https://gitlab.freedesktop.org/drm/intel/issues/72
  [i915#747]: https://gitlab.freedesktop.org/drm/intel/issues/747
  [i915#78]: https://gitlab.freedesktop.org/drm/intel/issues/78
  [i915#800]: https://gitlab.freedesktop.org/drm/intel/issues/800
  [i915#818]: https://gitlab.freedesktop.org/drm/intel/issues/818


Participating hosts (11 -> 10)
------------------------------

  Missing    (1): pig-hsw-4770r 


Build changes
-------------

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_7552 -> Patchwork_15727

  CI-20190529: 20190529
  CI_DRM_7552: 491a86a34502ffa5da51c110638b9cbc7dbd25c6 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5346: 466b0e6cbcbaccff012b484d1fd7676364b37b93 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_15727: 951d3ce94a6aa212e268083d6ea04cc90a0e23a3 @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15727/index.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Intel-gfx] [PATCH 1/2] drm/i915/guc: Provide mmio list to be saved/restored on engine reset
  2019-12-12 23:01 ` [Intel-gfx] [PATCH 1/2] " Tvrtko Ursulin
@ 2019-12-18 23:31   ` Daniele Ceraolo Spurio
  0 siblings, 0 replies; 6+ messages in thread
From: Daniele Ceraolo Spurio @ 2019-12-18 23:31 UTC (permalink / raw)
  To: Tvrtko Ursulin, Fernando Pacheco, intel-gfx



On 12/12/19 3:01 PM, Tvrtko Ursulin wrote:
> 
> On 12/12/2019 18:43, Fernando Pacheco wrote:
>> The driver must provide GuC with a list of mmio registers
>> that should be saved/restored during a GuC-based engine reset.
>> We provide a minimal set of registers that should get things
>> working and extend as needed.
>>
>> v2: rebase and comment to explain why mmio list is kept sorted
>>
>> Signed-off-by: Fernando Pacheco <fernando.pacheco@intel.com>
>> Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
>> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>> ---
>>   drivers/gpu/drm/i915/gt/intel_workarounds.c   | 25 +++--
>>   .../gpu/drm/i915/gt/intel_workarounds_types.h |  1 +
>>   drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c    | 96 ++++++++++++++++++-
>>   3 files changed, 114 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c 
>> b/drivers/gpu/drm/i915/gt/intel_workarounds.c
>> index 195ccf7db272..866d4a7ba0ea 100644
>> --- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
>> +++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
>> @@ -148,29 +148,37 @@ static void _wa_add(struct i915_wa_list *wal, 
>> const struct i915_wa *wa)
>>   }
>>   static void wa_add(struct i915_wa_list *wal, i915_reg_t reg, u32 mask,
>> -           u32 val, u32 read_mask)
>> +           u32 val, u32 read_mask, bool masked_bits)
>>   {
>>       struct i915_wa wa = {
>>           .reg  = reg,
>>           .mask = mask,
>>           .val  = val,
>>           .read = read_mask,
>> +        .masked_bits = masked_bits,
>>       };
>>       _wa_add(wal, &wa);
>>   }
>> +static void
>> +__wa_write_masked_or(struct i915_wa_list *wal, i915_reg_t reg, u32 mask,
>> +             u32 val, bool masked_bits)
>> +{
>> +    wa_add(wal, reg, mask, val, mask, masked_bits);
>> +}
>> +
>>   static void
>>   wa_write_masked_or(struct i915_wa_list *wal, i915_reg_t reg, u32 mask,
>>              u32 val)
>>   {
>> -    wa_add(wal, reg, mask, val, mask);
>> +    __wa_write_masked_or(wal, reg, mask, val, false);
>>   }
>>   static void
>>   wa_masked_en(struct i915_wa_list *wal, i915_reg_t reg, u32 val)
>>   {
>> -    wa_write_masked_or(wal, reg, val, _MASKED_BIT_ENABLE(val));
>> +    __wa_write_masked_or(wal, reg, val, _MASKED_BIT_ENABLE(val), true);
>>   }
>>   static void
>> @@ -186,13 +194,16 @@ wa_write_or(struct i915_wa_list *wal, i915_reg_t 
>> reg, u32 val)
>>   }
>>   #define WA_SET_BIT_MASKED(addr, mask) \
>> -    wa_write_masked_or(wal, (addr), (mask), _MASKED_BIT_ENABLE(mask))
>> +    __wa_write_masked_or(wal, (addr), (mask), \
>> +                 _MASKED_BIT_ENABLE(mask), true)
>>   #define WA_CLR_BIT_MASKED(addr, mask) \
>> -    wa_write_masked_or(wal, (addr), (mask), _MASKED_BIT_DISABLE(mask))
>> +    __wa_write_masked_or(wal, (addr), (mask), \
>> +                 _MASKED_BIT_DISABLE(mask), true)
>>   #define WA_SET_FIELD_MASKED(addr, mask, value) \
>> -    wa_write_masked_or(wal, (addr), (mask), _MASKED_FIELD((mask), 
>> (value)))
>> +    __wa_write_masked_or(wal, (addr), (mask), \
>> +                 _MASKED_FIELD((mask), (value)), true)
>>   static void gen8_ctx_workarounds_init(struct intel_engine_cs *engine,
>>                         struct i915_wa_list *wal)
>> @@ -592,7 +603,7 @@ static void tgl_ctx_workarounds_init(struct 
>> intel_engine_cs *engine,
>>        */
>>       wa_add(wal, FF_MODE2, FF_MODE2_TDS_TIMER_MASK, val,
>>              IS_TGL_REVID(engine->i915, TGL_REVID_A0, TGL_REVID_A0) ? 0 :
>> -                FF_MODE2_TDS_TIMER_MASK);
>> +                FF_MODE2_TDS_TIMER_MASK, false);
>>   }
>>   static void
>> diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds_types.h 
>> b/drivers/gpu/drm/i915/gt/intel_workarounds_types.h
>> index e27ab1b710b3..a43d5f968f2d 100644
>> --- a/drivers/gpu/drm/i915/gt/intel_workarounds_types.h
>> +++ b/drivers/gpu/drm/i915/gt/intel_workarounds_types.h
>> @@ -16,6 +16,7 @@ struct i915_wa {
>>       u32        mask;
>>       u32        val;
>>       u32        read;
>> +    bool        masked_bits;
>>   };
>>   struct i915_wa_list {
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c 
>> b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
>> index 101728006ae9..3fea13fc2b1a 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
>> @@ -3,6 +3,8 @@
>>    * Copyright © 2014-2019 Intel Corporation
>>    */
>> +#include <linux/bsearch.h>
>> +
>>   #include "gt/intel_gt.h"
>>   #include "intel_guc_ads.h"
>>   #include "intel_uc.h"
>> @@ -16,6 +18,9 @@
>>    * its internal state for sleep.
>>    */
>> +static void guc_mmio_reg_state_init(struct guc_mmio_reg_state 
>> *reg_state,
>> +                    struct intel_engine_cs *engine);
>> +
>>   static void guc_policy_init(struct guc_policy *policy)
>>   {
>>       policy->execution_quantum = POLICY_DEFAULT_EXECUTION_QUANTUM_US;
>> @@ -67,12 +72,19 @@ struct __guc_ads_blob {
>>   static void __guc_ads_init(struct intel_guc *guc)
>>   {
>> -    struct drm_i915_private *dev_priv = guc_to_gt(guc)->i915;
>> +    struct intel_gt *gt = guc_to_gt(guc);
>> +    struct drm_i915_private *dev_priv = gt->i915;
>>       struct __guc_ads_blob *blob = guc->ads_blob;
>>       const u32 skipped_size = LRC_PPHWSP_SZ * PAGE_SIZE + 
>> LR_HW_CONTEXT_SIZE;
>> +    struct intel_engine_cs *engine;
>> +    enum intel_engine_id id;
>>       u32 base;
>>       u8 engine_class;
>> +    /* GuC mmio save/restore list */
>> +    for_each_engine(engine, gt, id)
>> +        guc_mmio_reg_state_init(&blob->reg_state, engine);
>> +
>>       /* GuC scheduling policies */
>>       guc_policies_init(&blob->policies);
>> @@ -170,3 +182,85 @@ void intel_guc_ads_reset(struct intel_guc *guc)
>>           return;
>>       __guc_ads_init(guc);
>>   }
>> +
>> +static int guc_mmio_reg_cmp(const void *a, const void *b)
>> +{
>> +    const struct guc_mmio_reg *ra = a;
>> +    const struct guc_mmio_reg *rb = b;
>> +
>> +    return (int)ra->offset - (int)rb->offset;
>> +}
>> +
>> +static void guc_mmio_reg_add(struct guc_mmio_regset *regset,
>> +                 u32 offset, u32 flags)
>> +{
>> +    u32 count = regset->number_of_registers;
>> +    struct guc_mmio_reg reg = {
>> +        .offset = offset,
>> +        .flags = flags,
>> +    };
>> +    struct guc_mmio_reg *slot;
>> +
>> +    GEM_BUG_ON(count >= GUC_REGSET_MAX_REGISTERS);
>> +
>> +    /*
>> +     * The mmio list is built using separate lists within the driver.
>> +     * It's possible that at some point we may attempt to add the same
>> +     * register more than once. Do not consider this an error; silently
>> +     * move on if the register is already in the list.
>> +     */
>> +    if (bsearch(&reg, regset->registers, count,
>> +            sizeof(reg), guc_mmio_reg_cmp))
>> +        return;
>> +
>> +    slot = &regset->registers[count];
>> +    regset->number_of_registers++;
>> +    *slot = reg;
>> +
>> +    while (slot-- > regset->registers) {
>> +        GEM_BUG_ON(slot[0].offset == slot[1].offset);
>> +        if (slot[1].offset > slot[0].offset)
>> +            break;
>> +
>> +        swap(slot[1], slot[0]);
>> +    }
>> +}
>> +
>> +#define GUC_MMIO_REG_ADD(regset, reg, masked) \
>> +    guc_mmio_reg_add(regset, \
>> +             i915_mmio_reg_offset((reg)), \
>> +             (masked) ? GUC_REGSET_MASKED : 0)
>> +
>> +static void guc_mmio_regset_init(struct guc_mmio_regset *regset,
>> +                 struct intel_engine_cs *engine)
>> +{
>> +    const u32 base = engine->mmio_base;
>> +    struct i915_wa_list *wal = &engine->wa_list;
>> +    struct i915_wa *wa;
>> +    unsigned int i;
>> +
>> +    GUC_MMIO_REG_ADD(regset, RING_MODE_GEN7(base), true);
>> +    GUC_MMIO_REG_ADD(regset, RING_HWS_PGA(base), false);
>> +    GUC_MMIO_REG_ADD(regset, RING_IMR(base), false);
>> +
>> +    for (i = 0, wa = wal->list; i < wal->count; i++, wa++)
>> +        GUC_MMIO_REG_ADD(regset, wa->reg, wa->masked_bits);
>> +
>> +    /* Be extra paranoid and include all whitelist registers. */
>> +    for (i = 0; i < RING_MAX_NONPRIV_SLOTS; i++)
>> +        GUC_MMIO_REG_ADD(regset,
>> +                 RING_FORCE_TO_NONPRIV(base, i),
>> +                 false);
>> +}
>> +
>> +static void guc_mmio_reg_state_init(struct guc_mmio_reg_state 
>> *reg_state,
>> +                    struct intel_engine_cs *engine)
>> +{
>> +    struct guc_mmio_regset *regset;
>> +
>> +    GEM_BUG_ON(engine->class >= GUC_MAX_ENGINE_CLASSES);
>> +    GEM_BUG_ON(engine->instance >= GUC_MAX_INSTANCES_PER_CLASS);
>> +    regset = &reg_state->engine_reg[engine->class][engine->instance];
>> +
>> +    guc_mmio_regset_init(regset, engine);
>> +}
>>
> 
> So presumably the relevant GuC FW interface structures will remain the 
> same from upstream to new interface?

The structures are the same in the latest GuC drop. I've heard that 
there is a discussion ongoing about potentially making the list size 
dynamic at some point (instead of always statically allocating 64 
entries for all possible engines), but even with that the bulk of this 
patch should still be ok.

Acked-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>

I believe we need a selftest or some other logic in the driver to make 
sure the register list stays up to date with what we program during 
engine init, but we can add that as a follow up.

Daniele

> 
> Assuming that, the code looks fine so:
> 
> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> 
> But it is dead code for now, right? Dead in the sense GuC engine reset 
> path does not get exercised until more new patches land.
> 
> Regards,
> 
> Tvrtko
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2019-12-18 23:31 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-12 18:43 [Intel-gfx] [PATCH 1/2] drm/i915/guc: Provide mmio list to be saved/restored on engine reset Fernando Pacheco
2019-12-12 18:43 ` [Intel-gfx] [PATCH 2/2] HAX: force enable_guc=2 and WA i915#571 Fernando Pacheco
2019-12-12 20:42 ` [Intel-gfx] ✓ Fi.CI.BAT: success for series starting with [1/2] drm/i915/guc: Provide mmio list to be saved/restored on engine reset Patchwork
2019-12-12 23:01 ` [Intel-gfx] [PATCH 1/2] " Tvrtko Ursulin
2019-12-18 23:31   ` Daniele Ceraolo Spurio
2019-12-13 12:40 ` [Intel-gfx] ✗ Fi.CI.IGT: failure for series starting with [1/2] " Patchwork

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.