All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/6] Call uC functions from GT ones
@ 2019-07-29 23:47 Daniele Ceraolo Spurio
  2019-07-29 23:47 ` [PATCH 1/6] drm/i915/uc: move uC WOPCM setup in uc_init_hw Daniele Ceraolo Spurio
                   ` (8 more replies)
  0 siblings, 9 replies; 24+ messages in thread
From: Daniele Ceraolo Spurio @ 2019-07-29 23:47 UTC (permalink / raw)
  To: intel-gfx

The plan is to completely hide intel_uc under intel_gt and this series
starts in that direction by moving the init early and suspend/resume
functions.
The _init and init_hw have for now been skipped as they should be
covered when gt_init_hw is introduced; however, the init_hw path has
been simplified a bit by moving the wopcm init call inside the uc one.

Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>

Daniele Ceraolo Spurio (6):
  drm/i915/uc: move uC WOPCM setup in uc_init_hw
  drm/i915: move gt_cleanup_early out of gem_cleanup_early
  drm/i915/uc: move uc early functions inside the gt ones
  drm/i915/gt: introduce intel_gt_runtime_suspend/resume
  drm/i915/uc: move uc_resume under gt_resume
  drm/i915/gt: introduce intel_gt_suspend

 drivers/gpu/drm/i915/gem/i915_gem_pm.c | 11 +---
 drivers/gpu/drm/i915/gt/intel_gt.c     |  2 +
 drivers/gpu/drm/i915/gt/intel_gt_pm.c  | 28 ++++++++++
 drivers/gpu/drm/i915/gt/intel_gt_pm.h  |  3 ++
 drivers/gpu/drm/i915/gt/uc/intel_uc.c  | 72 +++++++++++++++++++++++++-
 drivers/gpu/drm/i915/gt/uc/intel_uc.h  |  2 +
 drivers/gpu/drm/i915/i915_drv.c        | 21 ++++----
 drivers/gpu/drm/i915/i915_gem.c        | 10 +---
 drivers/gpu/drm/i915/intel_wopcm.c     | 68 ------------------------
 drivers/gpu/drm/i915/intel_wopcm.h     |  3 --
 10 files changed, 116 insertions(+), 104 deletions(-)

-- 
2.22.0

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

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

* [PATCH 1/6] drm/i915/uc: move uC WOPCM setup in uc_init_hw
  2019-07-29 23:47 [PATCH 0/6] Call uC functions from GT ones Daniele Ceraolo Spurio
@ 2019-07-29 23:47 ` Daniele Ceraolo Spurio
  2019-07-30 14:39   ` Michal Wajdeczko
                     ` (2 more replies)
  2019-07-29 23:47 ` [PATCH 2/6] drm/i915: move gt_cleanup_early out of gem_cleanup_early Daniele Ceraolo Spurio
                   ` (7 subsequent siblings)
  8 siblings, 3 replies; 24+ messages in thread
From: Daniele Ceraolo Spurio @ 2019-07-29 23:47 UTC (permalink / raw)
  To: intel-gfx

The register we write are not WOPCM regs but uC ones related to how
GuC and HuC are going to use the WOPCM, so it makes logical sense
for them to be programmed as part of uc_init_hw. The wopcm map on the
other side is not uC-specific (although that is our main use-case), so
keep that separate.

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/gt/uc/intel_uc.c | 62 ++++++++++++++++++++++++
 drivers/gpu/drm/i915/i915_gem.c       |  8 +---
 drivers/gpu/drm/i915/intel_wopcm.c    | 68 ---------------------------
 drivers/gpu/drm/i915/intel_wopcm.h    |  3 --
 4 files changed, 63 insertions(+), 78 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.c b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
index fafa9be1e12a..2f71f3704c46 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
@@ -390,6 +390,63 @@ void intel_uc_sanitize(struct intel_uc *uc)
 	__uc_sanitize(uc);
 }
 
+static int
+write_and_verify(struct intel_gt *gt,
+		 i915_reg_t reg, u32 val, u32 mask, u32 locked_bit)
+{
+	struct intel_uncore *uncore = gt->uncore;
+	u32 reg_val;
+
+	GEM_BUG_ON(val & ~mask);
+
+	intel_uncore_write(uncore, reg, val);
+
+	reg_val = intel_uncore_read(uncore, reg);
+
+	return (reg_val & mask) != (val | locked_bit) ? -EIO : 0;
+}
+
+/* Initialize and verify the uC regs related to uC positioning in WOPCM */
+int uc_wopcm_init_hw(struct intel_uc *uc)
+{
+	struct intel_gt *gt = uc_to_gt(uc);
+	struct intel_wopcm *wopcm = &gt->i915->wopcm;
+	struct intel_uncore *uncore = gt->uncore;
+	u32 huc_agent;
+	u32 mask;
+	int err;
+
+	GEM_BUG_ON(!HAS_GT_UC(gt->i915));
+	GEM_BUG_ON(!intel_uc_is_using_guc(uc));
+	GEM_BUG_ON(!wopcm->guc.size);
+	GEM_BUG_ON(!wopcm->guc.base);
+
+	err = write_and_verify(gt, GUC_WOPCM_SIZE, wopcm->guc.size,
+			       GUC_WOPCM_SIZE_MASK | GUC_WOPCM_SIZE_LOCKED,
+			       GUC_WOPCM_SIZE_LOCKED);
+	if (err)
+		goto err_out;
+
+	huc_agent = intel_uc_is_using_huc(uc) ? HUC_LOADING_AGENT_GUC : 0;
+	mask = GUC_WOPCM_OFFSET_MASK | GUC_WOPCM_OFFSET_VALID | huc_agent;
+	err = write_and_verify(gt, DMA_GUC_WOPCM_OFFSET,
+			       wopcm->guc.base | huc_agent, mask,
+			       GUC_WOPCM_OFFSET_VALID);
+	if (err)
+		goto err_out;
+
+	return 0;
+
+err_out:
+	DRM_ERROR("Failed to init WOPCM registers:\n");
+	DRM_ERROR("DMA_GUC_WOPCM_OFFSET=%#x\n",
+		  intel_uncore_read(uncore, DMA_GUC_WOPCM_OFFSET));
+	DRM_ERROR("GUC_WOPCM_SIZE=%#x\n",
+		  intel_uncore_read(uncore, GUC_WOPCM_SIZE));
+
+	return err;
+}
+
 int intel_uc_init_hw(struct intel_uc *uc)
 {
 	struct drm_i915_private *i915 = uc_to_gt(uc)->i915;
@@ -402,6 +459,10 @@ int intel_uc_init_hw(struct intel_uc *uc)
 
 	GEM_BUG_ON(!intel_uc_fw_supported(&guc->fw));
 
+	ret = uc_wopcm_init_hw(uc);
+	if (ret)
+		goto out;
+
 	guc_reset_interrupts(guc);
 
 	/* WaEnableuKernelHeaderValidFix:skl */
@@ -486,6 +547,7 @@ int intel_uc_init_hw(struct intel_uc *uc)
 	if (GEM_WARN_ON(ret == -EIO))
 		ret = -EINVAL;
 
+out:
 	dev_err(i915->drm.dev, "GuC initialization failed %d\n", ret);
 	return ret;
 }
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 01dd0d1d9bf6..ae4e7cc3e3f9 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1239,14 +1239,8 @@ int i915_gem_init_hw(struct drm_i915_private *i915)
 		goto out;
 	}
 
-	ret = intel_wopcm_init_hw(&i915->wopcm, gt);
-	if (ret) {
-		DRM_ERROR("Enabling WOPCM failed (%d)\n", ret);
-		goto out;
-	}
-
 	/* We can't enable contexts until all firmware is loaded */
-	ret = intel_uc_init_hw(&i915->gt.uc);
+	ret = intel_uc_init_hw(&gt->uc);
 	if (ret) {
 		DRM_ERROR("Enabling uc failed (%d)\n", ret);
 		goto out;
diff --git a/drivers/gpu/drm/i915/intel_wopcm.c b/drivers/gpu/drm/i915/intel_wopcm.c
index 0e86a9e85b49..d9973c0b0384 100644
--- a/drivers/gpu/drm/i915/intel_wopcm.c
+++ b/drivers/gpu/drm/i915/intel_wopcm.c
@@ -224,71 +224,3 @@ int intel_wopcm_init(struct intel_wopcm *wopcm)
 
 	return 0;
 }
-
-static int
-write_and_verify(struct intel_gt *gt,
-		 i915_reg_t reg, u32 val, u32 mask, u32 locked_bit)
-{
-	struct intel_uncore *uncore = gt->uncore;
-	u32 reg_val;
-
-	GEM_BUG_ON(val & ~mask);
-
-	intel_uncore_write(uncore, reg, val);
-
-	reg_val = intel_uncore_read(uncore, reg);
-
-	return (reg_val & mask) != (val | locked_bit) ? -EIO : 0;
-}
-
-/**
- * intel_wopcm_init_hw() - Setup GuC WOPCM registers.
- * @wopcm: pointer to intel_wopcm.
- * @gt: pointer to the containing GT
- *
- * Setup the GuC WOPCM size and offset registers with the calculated values. It
- * will verify the register values to make sure the registers are locked with
- * correct values.
- *
- * Return: 0 on success. -EIO if registers were locked with incorrect values.
- */
-int intel_wopcm_init_hw(struct intel_wopcm *wopcm, struct intel_gt *gt)
-{
-	struct drm_i915_private *i915 = wopcm_to_i915(wopcm);
-	struct intel_uncore *uncore = gt->uncore;
-	u32 huc_agent;
-	u32 mask;
-	int err;
-
-	if (!USES_GUC(i915))
-		return 0;
-
-	GEM_BUG_ON(!HAS_GT_UC(i915));
-	GEM_BUG_ON(!wopcm->guc.size);
-	GEM_BUG_ON(!wopcm->guc.base);
-
-	err = write_and_verify(gt, GUC_WOPCM_SIZE, wopcm->guc.size,
-			       GUC_WOPCM_SIZE_MASK | GUC_WOPCM_SIZE_LOCKED,
-			       GUC_WOPCM_SIZE_LOCKED);
-	if (err)
-		goto err_out;
-
-	huc_agent = USES_HUC(i915) ? HUC_LOADING_AGENT_GUC : 0;
-	mask = GUC_WOPCM_OFFSET_MASK | GUC_WOPCM_OFFSET_VALID | huc_agent;
-	err = write_and_verify(gt, DMA_GUC_WOPCM_OFFSET,
-			       wopcm->guc.base | huc_agent, mask,
-			       GUC_WOPCM_OFFSET_VALID);
-	if (err)
-		goto err_out;
-
-	return 0;
-
-err_out:
-	DRM_ERROR("Failed to init WOPCM registers:\n");
-	DRM_ERROR("DMA_GUC_WOPCM_OFFSET=%#x\n",
-		  intel_uncore_read(uncore, DMA_GUC_WOPCM_OFFSET));
-	DRM_ERROR("GUC_WOPCM_SIZE=%#x\n",
-		  intel_uncore_read(uncore, GUC_WOPCM_SIZE));
-
-	return err;
-}
diff --git a/drivers/gpu/drm/i915/intel_wopcm.h b/drivers/gpu/drm/i915/intel_wopcm.h
index 56aaed4d64ff..e1f0f66aaa44 100644
--- a/drivers/gpu/drm/i915/intel_wopcm.h
+++ b/drivers/gpu/drm/i915/intel_wopcm.h
@@ -9,8 +9,6 @@
 
 #include <linux/types.h>
 
-struct intel_gt;
-
 /**
  * struct intel_wopcm - Overall WOPCM info and WOPCM regions.
  * @size: Size of overall WOPCM.
@@ -43,6 +41,5 @@ static inline u32 intel_wopcm_guc_size(struct intel_wopcm *wopcm)
 
 void intel_wopcm_init_early(struct intel_wopcm *wopcm);
 int intel_wopcm_init(struct intel_wopcm *wopcm);
-int intel_wopcm_init_hw(struct intel_wopcm *wopcm, struct intel_gt *gt);
 
 #endif
-- 
2.22.0

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

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

* [PATCH 2/6] drm/i915: move gt_cleanup_early out of gem_cleanup_early
  2019-07-29 23:47 [PATCH 0/6] Call uC functions from GT ones Daniele Ceraolo Spurio
  2019-07-29 23:47 ` [PATCH 1/6] drm/i915/uc: move uC WOPCM setup in uc_init_hw Daniele Ceraolo Spurio
@ 2019-07-29 23:47 ` Daniele Ceraolo Spurio
  2019-07-30  7:19   ` Tvrtko Ursulin
  2019-07-29 23:47 ` [PATCH 3/6] drm/i915/uc: move uc early functions inside the gt ones Daniele Ceraolo Spurio
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 24+ messages in thread
From: Daniele Ceraolo Spurio @ 2019-07-29 23:47 UTC (permalink / raw)
  To: intel-gfx

We don't call the init_early function from within the gem code, so we
shouldn't do it for the cleanup either.

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_drv.c | 2 ++
 drivers/gpu/drm/i915/i915_gem.c | 2 --
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index f2d3d754af37..934e605e2466 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -951,6 +951,7 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
 	intel_uc_cleanup_early(&dev_priv->gt.uc);
 	i915_gem_cleanup_early(dev_priv);
 err_workqueues:
+	intel_gt_cleanup_early(&dev_priv->gt);
 	i915_workqueues_cleanup(dev_priv);
 	return ret;
 }
@@ -966,6 +967,7 @@ static void i915_driver_late_release(struct drm_i915_private *dev_priv)
 	intel_power_domains_cleanup(dev_priv);
 	intel_uc_cleanup_early(&dev_priv->gt.uc);
 	i915_gem_cleanup_early(dev_priv);
+	intel_gt_cleanup_early(&dev_priv->gt);
 	i915_workqueues_cleanup(dev_priv);
 
 	pm_qos_remove_request(&dev_priv->sb_qos);
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index ae4e7cc3e3f9..2c7dc3404759 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1674,8 +1674,6 @@ void i915_gem_cleanup_early(struct drm_i915_private *dev_priv)
 	GEM_BUG_ON(atomic_read(&dev_priv->mm.free_count));
 	WARN_ON(dev_priv->mm.shrink_count);
 
-	intel_gt_cleanup_early(&dev_priv->gt);
-
 	i915_gemfs_fini(dev_priv);
 }
 
-- 
2.22.0

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

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

* [PATCH 3/6] drm/i915/uc: move uc early functions inside the gt ones
  2019-07-29 23:47 [PATCH 0/6] Call uC functions from GT ones Daniele Ceraolo Spurio
  2019-07-29 23:47 ` [PATCH 1/6] drm/i915/uc: move uC WOPCM setup in uc_init_hw Daniele Ceraolo Spurio
  2019-07-29 23:47 ` [PATCH 2/6] drm/i915: move gt_cleanup_early out of gem_cleanup_early Daniele Ceraolo Spurio
@ 2019-07-29 23:47 ` Daniele Ceraolo Spurio
  2019-07-30 14:53   ` Michal Wajdeczko
  2019-07-29 23:47 ` [PATCH 4/6] drm/i915/gt: introduce intel_gt_runtime_suspend/resume Daniele Ceraolo Spurio
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 24+ messages in thread
From: Daniele Ceraolo Spurio @ 2019-07-29 23:47 UTC (permalink / raw)
  To: intel-gfx

uc is a subcomponent of GT, so initialize/clean it as part of it. The
wopcm_init_early doesn't have to be happen before the uC one, but since
in other parts of the code we consider wopcm first do the same for
consistency.

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
---
 drivers/gpu/drm/i915/gt/intel_gt.c |  2 ++
 drivers/gpu/drm/i915/i915_drv.c    | 10 ++++------
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c b/drivers/gpu/drm/i915/gt/intel_gt.c
index f7e69db4019d..c0b846ecee09 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt.c
@@ -22,6 +22,7 @@ void intel_gt_init_early(struct intel_gt *gt, struct drm_i915_private *i915)
 	intel_gt_init_hangcheck(gt);
 	intel_gt_init_reset(gt);
 	intel_gt_pm_init_early(gt);
+	intel_uc_init_early(&gt->uc);
 }
 
 void intel_gt_init_hw(struct drm_i915_private *i915)
@@ -246,5 +247,6 @@ void intel_gt_fini_scratch(struct intel_gt *gt)
 
 void intel_gt_cleanup_early(struct intel_gt *gt)
 {
+	intel_uc_cleanup_early(&gt->uc);
 	intel_gt_fini_reset(gt);
 }
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 934e605e2466..3cd3be69dbad 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -921,6 +921,8 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
 	if (ret < 0)
 		return ret;
 
+	intel_wopcm_init_early(&dev_priv->wopcm);
+
 	intel_gt_init_early(&dev_priv->gt, dev_priv);
 
 	ret = i915_gem_init_early(dev_priv);
@@ -930,13 +932,11 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
 	/* This must be called before any calls to HAS_PCH_* */
 	intel_detect_pch(dev_priv);
 
-	intel_wopcm_init_early(&dev_priv->wopcm);
-	intel_uc_init_early(&dev_priv->gt.uc);
 	intel_pm_setup(dev_priv);
 	intel_init_dpio(dev_priv);
 	ret = intel_power_domains_init(dev_priv);
 	if (ret < 0)
-		goto err_uc;
+		goto err_gem;
 	intel_irq_init(dev_priv);
 	intel_init_display_hooks(dev_priv);
 	intel_init_clock_gating_hooks(dev_priv);
@@ -947,8 +947,7 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
 
 	return 0;
 
-err_uc:
-	intel_uc_cleanup_early(&dev_priv->gt.uc);
+err_gem:
 	i915_gem_cleanup_early(dev_priv);
 err_workqueues:
 	intel_gt_cleanup_early(&dev_priv->gt);
@@ -965,7 +964,6 @@ static void i915_driver_late_release(struct drm_i915_private *dev_priv)
 {
 	intel_irq_fini(dev_priv);
 	intel_power_domains_cleanup(dev_priv);
-	intel_uc_cleanup_early(&dev_priv->gt.uc);
 	i915_gem_cleanup_early(dev_priv);
 	intel_gt_cleanup_early(&dev_priv->gt);
 	i915_workqueues_cleanup(dev_priv);
-- 
2.22.0

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

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

* [PATCH 4/6] drm/i915/gt: introduce intel_gt_runtime_suspend/resume
  2019-07-29 23:47 [PATCH 0/6] Call uC functions from GT ones Daniele Ceraolo Spurio
                   ` (2 preceding siblings ...)
  2019-07-29 23:47 ` [PATCH 3/6] drm/i915/uc: move uc early functions inside the gt ones Daniele Ceraolo Spurio
@ 2019-07-29 23:47 ` Daniele Ceraolo Spurio
  2019-07-30  7:35   ` Tvrtko Ursulin
  2019-07-29 23:47 ` [PATCH 5/6] drm/i915/uc: move uc_resume under gt_resume Daniele Ceraolo Spurio
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 24+ messages in thread
From: Daniele Ceraolo Spurio @ 2019-07-29 23:47 UTC (permalink / raw)
  To: intel-gfx

To be called from the top level runtime functions, to hide the
gt-specific bits (mainly related to intel_uc).

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
---
 drivers/gpu/drm/i915/gt/intel_gt_pm.c | 12 ++++++++++++
 drivers/gpu/drm/i915/gt/intel_gt_pm.h |  2 ++
 drivers/gpu/drm/i915/i915_drv.c       |  9 +++------
 3 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_gt_pm.c b/drivers/gpu/drm/i915/gt/intel_gt_pm.c
index 65c0d0c9d543..1a32e3e523c0 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_pm.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_pm.c
@@ -164,3 +164,15 @@ int intel_gt_resume(struct intel_gt *gt)
 
 	return err;
 }
+
+void intel_gt_runtime_suspend(struct intel_gt *gt)
+{
+	intel_uc_runtime_suspend(&gt->uc);
+}
+
+int intel_gt_runtime_resume(struct intel_gt *gt)
+{
+	intel_gt_init_swizzling(gt);
+
+	return intel_uc_resume(&gt->uc);
+}
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_pm.h b/drivers/gpu/drm/i915/gt/intel_gt_pm.h
index ba960e1fc209..527894fe1345 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_pm.h
+++ b/drivers/gpu/drm/i915/gt/intel_gt_pm.h
@@ -23,5 +23,7 @@ void intel_gt_pm_init_early(struct intel_gt *gt);
 
 void intel_gt_sanitize(struct intel_gt *gt, bool force);
 int intel_gt_resume(struct intel_gt *gt);
+void intel_gt_runtime_suspend(struct intel_gt *gt);
+int intel_gt_runtime_resume(struct intel_gt *gt);
 
 #endif /* INTEL_GT_PM_H */
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 3cd3be69dbad..bc7ffda10e5c 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -2925,7 +2925,7 @@ static int intel_runtime_suspend(struct device *kdev)
 	 */
 	i915_gem_runtime_suspend(dev_priv);
 
-	intel_uc_runtime_suspend(&dev_priv->gt.uc);
+	intel_gt_runtime_suspend(&dev_priv->gt);
 
 	intel_runtime_pm_disable_interrupts(dev_priv);
 
@@ -2950,9 +2950,8 @@ static int intel_runtime_suspend(struct device *kdev)
 
 		intel_runtime_pm_enable_interrupts(dev_priv);
 
-		intel_uc_resume(&dev_priv->gt.uc);
+		intel_gt_runtime_resume(&dev_priv->gt);
 
-		intel_gt_init_swizzling(&dev_priv->gt);
 		i915_gem_restore_fences(dev_priv);
 
 		enable_rpm_wakeref_asserts(rpm);
@@ -3047,13 +3046,11 @@ static int intel_runtime_resume(struct device *kdev)
 
 	intel_runtime_pm_enable_interrupts(dev_priv);
 
-	intel_uc_resume(&dev_priv->gt.uc);
-
 	/*
 	 * No point of rolling back things in case of an error, as the best
 	 * we can do is to hope that things will still work (and disable RPM).
 	 */
-	intel_gt_init_swizzling(&dev_priv->gt);
+	intel_gt_runtime_resume(&dev_priv->gt);
 	i915_gem_restore_fences(dev_priv);
 
 	/*
-- 
2.22.0

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

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

* [PATCH 5/6] drm/i915/uc: move uc_resume under gt_resume
  2019-07-29 23:47 [PATCH 0/6] Call uC functions from GT ones Daniele Ceraolo Spurio
                   ` (3 preceding siblings ...)
  2019-07-29 23:47 ` [PATCH 4/6] drm/i915/gt: introduce intel_gt_runtime_suspend/resume Daniele Ceraolo Spurio
@ 2019-07-29 23:47 ` Daniele Ceraolo Spurio
  2019-07-30  8:09   ` Chris Wilson
  2019-07-29 23:47 ` [PATCH 6/6] drm/i915/gt: introduce intel_gt_suspend Daniele Ceraolo Spurio
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 24+ messages in thread
From: Daniele Ceraolo Spurio @ 2019-07-29 23:47 UTC (permalink / raw)
  To: intel-gfx

intel_uc is part of intel_gt so it makes logical sense for it to be
resumed as part of it. Note that, since gt_resume is also called during
the init flow, a state variable has been added to intel_uc to avoid
asking an already running GuC to resume.

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/gem/i915_gem_pm.c |  2 --
 drivers/gpu/drm/i915/gt/intel_gt_pm.c  |  3 +++
 drivers/gpu/drm/i915/gt/uc/intel_uc.c  | 10 ++++++++--
 drivers/gpu/drm/i915/gt/uc/intel_uc.h  |  2 ++
 4 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pm.c b/drivers/gpu/drm/i915/gem/i915_gem_pm.c
index b5561cbdc5ea..25610de3961b 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_pm.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_pm.c
@@ -265,8 +265,6 @@ void i915_gem_resume(struct drm_i915_private *i915)
 	if (intel_gt_resume(&i915->gt))
 		goto err_wedged;
 
-	intel_uc_resume(&i915->gt.uc);
-
 	/* Always reload a context for powersaving. */
 	if (!i915_gem_load_power_context(i915))
 		goto err_wedged;
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_pm.c b/drivers/gpu/drm/i915/gt/intel_gt_pm.c
index 1a32e3e523c0..2250ffbd2f32 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_pm.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_pm.c
@@ -162,6 +162,9 @@ int intel_gt_resume(struct intel_gt *gt)
 	}
 	intel_gt_pm_put(gt);
 
+	if (!err)
+		err = intel_uc_resume(&gt->uc);
+
 	return err;
 }
 
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.c b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
index 2f71f3704c46..a9a893c5fbe0 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
@@ -380,6 +380,8 @@ static void __uc_sanitize(struct intel_uc *uc)
 	intel_guc_sanitize(guc);
 
 	__intel_uc_reset_hw(uc);
+
+	uc->suspended = false;
 }
 
 void intel_uc_sanitize(struct intel_uc *uc)
@@ -598,6 +600,8 @@ void intel_uc_runtime_suspend(struct intel_uc *uc)
 		DRM_DEBUG_DRIVER("Failed to suspend GuC, err=%d", err);
 
 	guc_disable_communication(guc);
+
+	uc->suspended = true;
 }
 
 void intel_uc_suspend(struct intel_uc *uc)
@@ -605,7 +609,7 @@ void intel_uc_suspend(struct intel_uc *uc)
 	struct intel_guc *guc = &uc->guc;
 	intel_wakeref_t wakeref;
 
-	if (!intel_guc_is_running(guc))
+	if (!intel_guc_is_running(guc) || uc->suspended)
 		return;
 
 	with_intel_runtime_pm(&uc_to_gt(uc)->i915->runtime_pm, wakeref)
@@ -617,7 +621,7 @@ int intel_uc_resume(struct intel_uc *uc)
 	struct intel_guc *guc = &uc->guc;
 	int err;
 
-	if (!intel_guc_is_running(guc))
+	if (!intel_guc_is_running(guc) || !uc->suspended)
 		return 0;
 
 	guc_enable_communication(guc);
@@ -628,5 +632,7 @@ int intel_uc_resume(struct intel_uc *uc)
 		return err;
 	}
 
+	uc->suspended = false;
+
 	return 0;
 }
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.h b/drivers/gpu/drm/i915/gt/uc/intel_uc.h
index fe3362fd7706..ea58fc164d1e 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc.h
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.h
@@ -31,6 +31,8 @@
 struct intel_uc {
 	struct intel_guc guc;
 	struct intel_huc huc;
+
+	bool suspended;
 };
 
 void intel_uc_init_early(struct intel_uc *uc);
-- 
2.22.0

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

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

* [PATCH 6/6] drm/i915/gt: introduce intel_gt_suspend
  2019-07-29 23:47 [PATCH 0/6] Call uC functions from GT ones Daniele Ceraolo Spurio
                   ` (4 preceding siblings ...)
  2019-07-29 23:47 ` [PATCH 5/6] drm/i915/uc: move uc_resume under gt_resume Daniele Ceraolo Spurio
@ 2019-07-29 23:47 ` Daniele Ceraolo Spurio
  2019-07-30  7:33   ` Tvrtko Ursulin
  2019-07-30  0:44 ` ✗ Fi.CI.SPARSE: warning for Call uC functions from GT ones Patchwork
                   ` (2 subsequent siblings)
  8 siblings, 1 reply; 24+ messages in thread
From: Daniele Ceraolo Spurio @ 2019-07-29 23:47 UTC (permalink / raw)
  To: intel-gfx

For symmetry with intel_gt_resume and to hide more stuff from the top
level under intel_gt. Note that the switch_to_kernel_context_sync has
not been moved dure to the locking and ordering requirements that exist
at the moment.

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
---
 drivers/gpu/drm/i915/gem/i915_gem_pm.c |  9 +--------
 drivers/gpu/drm/i915/gt/intel_gt_pm.c  | 13 +++++++++++++
 drivers/gpu/drm/i915/gt/intel_gt_pm.h  |  1 +
 3 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pm.c b/drivers/gpu/drm/i915/gem/i915_gem_pm.c
index 25610de3961b..9f72ce8b5a6f 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_pm.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_pm.c
@@ -163,18 +163,11 @@ void i915_gem_suspend(struct drm_i915_private *i915)
 
 	mutex_unlock(&i915->drm.struct_mutex);
 
-	/*
-	 * Assert that we successfully flushed all the work and
-	 * reset the GPU back to its idle, low power state.
-	 */
-	GEM_BUG_ON(i915->gt.awake);
 	flush_work(&i915->gem.idle_work);
 
-	cancel_delayed_work_sync(&i915->gt.hangcheck.work);
+	intel_gt_suspend(&i915->gt);
 
 	i915_gem_drain_freed_objects(i915);
-
-	intel_uc_suspend(&i915->gt.uc);
 }
 
 static struct drm_i915_gem_object *first_mm_object(struct list_head *list)
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_pm.c b/drivers/gpu/drm/i915/gt/intel_gt_pm.c
index 2250ffbd2f32..9c9efcde994d 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_pm.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_pm.c
@@ -127,6 +127,19 @@ void intel_gt_sanitize(struct intel_gt *gt, bool force)
 		__intel_engine_reset(engine, false);
 }
 
+void intel_gt_suspend(struct intel_gt *gt)
+{
+	/*
+	 * Assert that we successfully flushed all the work and
+	 * reset the GPU back to its idle, low power state.
+	 */
+	GEM_BUG_ON(gt->awake);
+
+	cancel_delayed_work_sync(&gt->hangcheck.work);
+
+	intel_uc_suspend(&gt->uc);
+}
+
 int intel_gt_resume(struct intel_gt *gt)
 {
 	struct intel_engine_cs *engine;
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_pm.h b/drivers/gpu/drm/i915/gt/intel_gt_pm.h
index 527894fe1345..4f29ac880ca8 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_pm.h
+++ b/drivers/gpu/drm/i915/gt/intel_gt_pm.h
@@ -22,6 +22,7 @@ void intel_gt_pm_put(struct intel_gt *gt);
 void intel_gt_pm_init_early(struct intel_gt *gt);
 
 void intel_gt_sanitize(struct intel_gt *gt, bool force);
+void intel_gt_suspend(struct intel_gt *gt);
 int intel_gt_resume(struct intel_gt *gt);
 void intel_gt_runtime_suspend(struct intel_gt *gt);
 int intel_gt_runtime_resume(struct intel_gt *gt);
-- 
2.22.0

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

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

* ✗ Fi.CI.SPARSE: warning for Call uC functions from GT ones
  2019-07-29 23:47 [PATCH 0/6] Call uC functions from GT ones Daniele Ceraolo Spurio
                   ` (5 preceding siblings ...)
  2019-07-29 23:47 ` [PATCH 6/6] drm/i915/gt: introduce intel_gt_suspend Daniele Ceraolo Spurio
@ 2019-07-30  0:44 ` Patchwork
  2019-07-30  1:03 ` ✓ Fi.CI.BAT: success " Patchwork
  2019-07-30 12:20 ` ✓ Fi.CI.IGT: " Patchwork
  8 siblings, 0 replies; 24+ messages in thread
From: Patchwork @ 2019-07-30  0:44 UTC (permalink / raw)
  To: Daniele Ceraolo Spurio; +Cc: intel-gfx

== Series Details ==

Series: Call uC functions from GT ones
URL   : https://patchwork.freedesktop.org/series/64406/
State : warning

== Summary ==

$ dim sparse origin/drm-tip
Sparse version: v0.5.2
Commit: drm/i915/uc: move uC WOPCM setup in uc_init_hw
+drivers/gpu/drm/i915/gt/uc/intel_uc.c:410:5: warning: symbol 'uc_wopcm_init_hw' was not declared. Should it be static?

Commit: drm/i915: move gt_cleanup_early out of gem_cleanup_early
Okay!

Commit: drm/i915/uc: move uc early functions inside the gt ones
Okay!

Commit: drm/i915/gt: introduce intel_gt_runtime_suspend/resume
Okay!

Commit: drm/i915/uc: move uc_resume under gt_resume
Okay!

Commit: drm/i915/gt: introduce intel_gt_suspend
Okay!

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

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

* ✓ Fi.CI.BAT: success for Call uC functions from GT ones
  2019-07-29 23:47 [PATCH 0/6] Call uC functions from GT ones Daniele Ceraolo Spurio
                   ` (6 preceding siblings ...)
  2019-07-30  0:44 ` ✗ Fi.CI.SPARSE: warning for Call uC functions from GT ones Patchwork
@ 2019-07-30  1:03 ` Patchwork
  2019-07-30 12:20 ` ✓ Fi.CI.IGT: " Patchwork
  8 siblings, 0 replies; 24+ messages in thread
From: Patchwork @ 2019-07-30  1:03 UTC (permalink / raw)
  To: Daniele Ceraolo Spurio; +Cc: intel-gfx

== Series Details ==

Series: Call uC functions from GT ones
URL   : https://patchwork.freedesktop.org/series/64406/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_6576 -> Patchwork_13793
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/

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

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

### IGT changes ###

#### Issues hit ####

  * igt@kms_chamelium@common-hpd-after-suspend:
    - fi-kbl-7567u:       [PASS][1] -> [WARN][2] ([fdo#109380])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/fi-kbl-7567u/igt@kms_chamelium@common-hpd-after-suspend.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/fi-kbl-7567u/igt@kms_chamelium@common-hpd-after-suspend.html

  * igt@kms_chamelium@dp-crc-fast:
    - fi-cml-u2:          [PASS][3] -> [FAIL][4] ([fdo#109483])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/fi-cml-u2/igt@kms_chamelium@dp-crc-fast.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/fi-cml-u2/igt@kms_chamelium@dp-crc-fast.html

  * igt@kms_frontbuffer_tracking@basic:
    - fi-icl-u2:          [PASS][5] -> [FAIL][6] ([fdo#103167])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/fi-icl-u2/igt@kms_frontbuffer_tracking@basic.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/fi-icl-u2/igt@kms_frontbuffer_tracking@basic.html

  * igt@kms_pipe_crc_basic@read-crc-pipe-c:
    - fi-kbl-7567u:       [PASS][7] -> [SKIP][8] ([fdo#109271]) +23 similar issues
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/fi-kbl-7567u/igt@kms_pipe_crc_basic@read-crc-pipe-c.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/fi-kbl-7567u/igt@kms_pipe_crc_basic@read-crc-pipe-c.html

  * igt@prime_vgem@basic-write:
    - fi-icl-u3:          [PASS][9] -> [DMESG-WARN][10] ([fdo#107724])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/fi-icl-u3/igt@prime_vgem@basic-write.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/fi-icl-u3/igt@prime_vgem@basic-write.html

  
#### Possible fixes ####

  * igt@kms_busy@basic-flip-a:
    - fi-kbl-7567u:       [SKIP][11] ([fdo#109271] / [fdo#109278]) -> [PASS][12] +2 similar issues
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/fi-kbl-7567u/igt@kms_busy@basic-flip-a.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/fi-kbl-7567u/igt@kms_busy@basic-flip-a.html

  * igt@kms_chamelium@hdmi-hpd-fast:
    - fi-icl-u2:          [FAIL][13] ([fdo#109483]) -> [PASS][14]
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/fi-icl-u2/igt@kms_chamelium@hdmi-hpd-fast.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/fi-icl-u2/igt@kms_chamelium@hdmi-hpd-fast.html

  
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#107724]: https://bugs.freedesktop.org/show_bug.cgi?id=107724
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278
  [fdo#109380]: https://bugs.freedesktop.org/show_bug.cgi?id=109380
  [fdo#109483]: https://bugs.freedesktop.org/show_bug.cgi?id=109483


Participating hosts (51 -> 45)
------------------------------

  Missing    (6): fi-byt-squawks fi-bsw-cyan fi-pnv-d510 fi-icl-y fi-byt-clapper fi-bdw-samus 


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

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_6576 -> Patchwork_13793

  CI-20190529: 20190529
  CI_DRM_6576: 4040b4c4ab647422d82100c8b091d34b6a82f572 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5115: 21be7a02ac8a8ff46b561c36a69e4dd5a0c2938b @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_13793: 184a57b1d31a2094d1ac88756c82b56478f9072a @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

184a57b1d31a drm/i915/gt: introduce intel_gt_suspend
ecbc778d9f02 drm/i915/uc: move uc_resume under gt_resume
e648b6830b52 drm/i915/gt: introduce intel_gt_runtime_suspend/resume
74b1723bd1e7 drm/i915/uc: move uc early functions inside the gt ones
855580793f1d drm/i915: move gt_cleanup_early out of gem_cleanup_early
57ae57f734f6 drm/i915/uc: move uC WOPCM setup in uc_init_hw

== Logs ==

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

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

* Re: [PATCH 2/6] drm/i915: move gt_cleanup_early out of gem_cleanup_early
  2019-07-29 23:47 ` [PATCH 2/6] drm/i915: move gt_cleanup_early out of gem_cleanup_early Daniele Ceraolo Spurio
@ 2019-07-30  7:19   ` Tvrtko Ursulin
  2019-07-30  8:01     ` Chris Wilson
  0 siblings, 1 reply; 24+ messages in thread
From: Tvrtko Ursulin @ 2019-07-30  7:19 UTC (permalink / raw)
  To: Daniele Ceraolo Spurio, intel-gfx


On 30/07/2019 00:47, Daniele Ceraolo Spurio wrote:
> We don't call the init_early function from within the gem code, so we
> shouldn't do it for the cleanup either.
> 
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
> ---
>   drivers/gpu/drm/i915/i915_drv.c | 2 ++
>   drivers/gpu/drm/i915/i915_gem.c | 2 --
>   2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index f2d3d754af37..934e605e2466 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -951,6 +951,7 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
>   	intel_uc_cleanup_early(&dev_priv->gt.uc);
>   	i915_gem_cleanup_early(dev_priv);
>   err_workqueues:
> +	intel_gt_cleanup_early(&dev_priv->gt);
>   	i915_workqueues_cleanup(dev_priv);
>   	return ret;
>   }
> @@ -966,6 +967,7 @@ static void i915_driver_late_release(struct drm_i915_private *dev_priv)
>   	intel_power_domains_cleanup(dev_priv);
>   	intel_uc_cleanup_early(&dev_priv->gt.uc);
>   	i915_gem_cleanup_early(dev_priv);
> +	intel_gt_cleanup_early(&dev_priv->gt);
>   	i915_workqueues_cleanup(dev_priv);
>   
>   	pm_qos_remove_request(&dev_priv->sb_qos);
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index ae4e7cc3e3f9..2c7dc3404759 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -1674,8 +1674,6 @@ void i915_gem_cleanup_early(struct drm_i915_private *dev_priv)
>   	GEM_BUG_ON(atomic_read(&dev_priv->mm.free_count));
>   	WARN_ON(dev_priv->mm.shrink_count);
>   
> -	intel_gt_cleanup_early(&dev_priv->gt);
> -
>   	i915_gemfs_fini(dev_priv);
>   }
>   
> 

I have a nagging feeling it was me who added this asymmetry.

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

Regards,

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

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

* Re: [PATCH 6/6] drm/i915/gt: introduce intel_gt_suspend
  2019-07-29 23:47 ` [PATCH 6/6] drm/i915/gt: introduce intel_gt_suspend Daniele Ceraolo Spurio
@ 2019-07-30  7:33   ` Tvrtko Ursulin
  2019-07-30  8:12     ` Chris Wilson
  0 siblings, 1 reply; 24+ messages in thread
From: Tvrtko Ursulin @ 2019-07-30  7:33 UTC (permalink / raw)
  To: Daniele Ceraolo Spurio, intel-gfx


On 30/07/2019 00:47, Daniele Ceraolo Spurio wrote:
> For symmetry with intel_gt_resume and to hide more stuff from the top
> level under intel_gt. Note that the switch_to_kernel_context_sync has
> not been moved dure to the locking and ordering requirements that exist

Typo in due.

Should we add intel_gt_suspend_early/late, with the former dealing with 
switch_to_kernel_context_sync? Although that raises an interesting 
conundrum since it operates on GEM and GT. Best then to leave it 
unwrapped for now I think.

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

Regards,

Tvrtko

> at the moment.
> 
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
> ---
>   drivers/gpu/drm/i915/gem/i915_gem_pm.c |  9 +--------
>   drivers/gpu/drm/i915/gt/intel_gt_pm.c  | 13 +++++++++++++
>   drivers/gpu/drm/i915/gt/intel_gt_pm.h  |  1 +
>   3 files changed, 15 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pm.c b/drivers/gpu/drm/i915/gem/i915_gem_pm.c
> index 25610de3961b..9f72ce8b5a6f 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_pm.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_pm.c
> @@ -163,18 +163,11 @@ void i915_gem_suspend(struct drm_i915_private *i915)
>   
>   	mutex_unlock(&i915->drm.struct_mutex);
>   
> -	/*
> -	 * Assert that we successfully flushed all the work and
> -	 * reset the GPU back to its idle, low power state.
> -	 */
> -	GEM_BUG_ON(i915->gt.awake);
>   	flush_work(&i915->gem.idle_work);
>   
> -	cancel_delayed_work_sync(&i915->gt.hangcheck.work);
> +	intel_gt_suspend(&i915->gt);
>   
>   	i915_gem_drain_freed_objects(i915);
> -
> -	intel_uc_suspend(&i915->gt.uc);
>   }
>   
>   static struct drm_i915_gem_object *first_mm_object(struct list_head *list)
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_pm.c b/drivers/gpu/drm/i915/gt/intel_gt_pm.c
> index 2250ffbd2f32..9c9efcde994d 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_pm.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_pm.c
> @@ -127,6 +127,19 @@ void intel_gt_sanitize(struct intel_gt *gt, bool force)
>   		__intel_engine_reset(engine, false);
>   }
>   
> +void intel_gt_suspend(struct intel_gt *gt)
> +{
> +	/*
> +	 * Assert that we successfully flushed all the work and
> +	 * reset the GPU back to its idle, low power state.
> +	 */
> +	GEM_BUG_ON(gt->awake);
> +
> +	cancel_delayed_work_sync(&gt->hangcheck.work);
> +
> +	intel_uc_suspend(&gt->uc);
> +}
> +
>   int intel_gt_resume(struct intel_gt *gt)
>   {
>   	struct intel_engine_cs *engine;
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_pm.h b/drivers/gpu/drm/i915/gt/intel_gt_pm.h
> index 527894fe1345..4f29ac880ca8 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_pm.h
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_pm.h
> @@ -22,6 +22,7 @@ void intel_gt_pm_put(struct intel_gt *gt);
>   void intel_gt_pm_init_early(struct intel_gt *gt);
>   
>   void intel_gt_sanitize(struct intel_gt *gt, bool force);
> +void intel_gt_suspend(struct intel_gt *gt);
>   int intel_gt_resume(struct intel_gt *gt);
>   void intel_gt_runtime_suspend(struct intel_gt *gt);
>   int intel_gt_runtime_resume(struct intel_gt *gt);
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 4/6] drm/i915/gt: introduce intel_gt_runtime_suspend/resume
  2019-07-29 23:47 ` [PATCH 4/6] drm/i915/gt: introduce intel_gt_runtime_suspend/resume Daniele Ceraolo Spurio
@ 2019-07-30  7:35   ` Tvrtko Ursulin
  0 siblings, 0 replies; 24+ messages in thread
From: Tvrtko Ursulin @ 2019-07-30  7:35 UTC (permalink / raw)
  To: Daniele Ceraolo Spurio, intel-gfx


On 30/07/2019 00:47, Daniele Ceraolo Spurio wrote:
> To be called from the top level runtime functions, to hide the
> gt-specific bits (mainly related to intel_uc).

Looks okay to me.

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

Regards,

Tvrtko

P.S. Added Andi and Ram to Cc since PM/RPS task.


> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
> ---
>   drivers/gpu/drm/i915/gt/intel_gt_pm.c | 12 ++++++++++++
>   drivers/gpu/drm/i915/gt/intel_gt_pm.h |  2 ++
>   drivers/gpu/drm/i915/i915_drv.c       |  9 +++------
>   3 files changed, 17 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_pm.c b/drivers/gpu/drm/i915/gt/intel_gt_pm.c
> index 65c0d0c9d543..1a32e3e523c0 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_pm.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_pm.c
> @@ -164,3 +164,15 @@ int intel_gt_resume(struct intel_gt *gt)
>   
>   	return err;
>   }
> +
> +void intel_gt_runtime_suspend(struct intel_gt *gt)
> +{
> +	intel_uc_runtime_suspend(&gt->uc);
> +}
> +
> +int intel_gt_runtime_resume(struct intel_gt *gt)
> +{
> +	intel_gt_init_swizzling(gt);
> +
> +	return intel_uc_resume(&gt->uc);
> +}
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_pm.h b/drivers/gpu/drm/i915/gt/intel_gt_pm.h
> index ba960e1fc209..527894fe1345 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_pm.h
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_pm.h
> @@ -23,5 +23,7 @@ void intel_gt_pm_init_early(struct intel_gt *gt);
>   
>   void intel_gt_sanitize(struct intel_gt *gt, bool force);
>   int intel_gt_resume(struct intel_gt *gt);
> +void intel_gt_runtime_suspend(struct intel_gt *gt);
> +int intel_gt_runtime_resume(struct intel_gt *gt);
>   
>   #endif /* INTEL_GT_PM_H */
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index 3cd3be69dbad..bc7ffda10e5c 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -2925,7 +2925,7 @@ static int intel_runtime_suspend(struct device *kdev)
>   	 */
>   	i915_gem_runtime_suspend(dev_priv);
>   
> -	intel_uc_runtime_suspend(&dev_priv->gt.uc);
> +	intel_gt_runtime_suspend(&dev_priv->gt);
>   
>   	intel_runtime_pm_disable_interrupts(dev_priv);
>   
> @@ -2950,9 +2950,8 @@ static int intel_runtime_suspend(struct device *kdev)
>   
>   		intel_runtime_pm_enable_interrupts(dev_priv);
>   
> -		intel_uc_resume(&dev_priv->gt.uc);
> +		intel_gt_runtime_resume(&dev_priv->gt);
>   
> -		intel_gt_init_swizzling(&dev_priv->gt);
>   		i915_gem_restore_fences(dev_priv);
>   
>   		enable_rpm_wakeref_asserts(rpm);
> @@ -3047,13 +3046,11 @@ static int intel_runtime_resume(struct device *kdev)
>   
>   	intel_runtime_pm_enable_interrupts(dev_priv);
>   
> -	intel_uc_resume(&dev_priv->gt.uc);
> -
>   	/*
>   	 * No point of rolling back things in case of an error, as the best
>   	 * we can do is to hope that things will still work (and disable RPM).
>   	 */
> -	intel_gt_init_swizzling(&dev_priv->gt);
> +	intel_gt_runtime_resume(&dev_priv->gt);
>   	i915_gem_restore_fences(dev_priv);
>   
>   	/*
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 2/6] drm/i915: move gt_cleanup_early out of gem_cleanup_early
  2019-07-30  7:19   ` Tvrtko Ursulin
@ 2019-07-30  8:01     ` Chris Wilson
  2019-07-30 14:56       ` Daniele Ceraolo Spurio
  0 siblings, 1 reply; 24+ messages in thread
From: Chris Wilson @ 2019-07-30  8:01 UTC (permalink / raw)
  To: Daniele Ceraolo Spurio, Tvrtko Ursulin, intel-gfx

Quoting Tvrtko Ursulin (2019-07-30 08:19:18)
> 
> On 30/07/2019 00:47, Daniele Ceraolo Spurio wrote:
> > We don't call the init_early function from within the gem code, so we
> > shouldn't do it for the cleanup either.
> > 
> > Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> > Cc: Chris Wilson <chris@chris-wilson.co.uk>
> > Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
> > ---
> >   drivers/gpu/drm/i915/i915_drv.c | 2 ++
> >   drivers/gpu/drm/i915/i915_gem.c | 2 --
> >   2 files changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> > index f2d3d754af37..934e605e2466 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.c
> > +++ b/drivers/gpu/drm/i915/i915_drv.c
> > @@ -951,6 +951,7 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
> >       intel_uc_cleanup_early(&dev_priv->gt.uc);
> >       i915_gem_cleanup_early(dev_priv);
> >   err_workqueues:
> > +     intel_gt_cleanup_early(&dev_priv->gt);
> >       i915_workqueues_cleanup(dev_priv);
> >       return ret;
> >   }
> > @@ -966,6 +967,7 @@ static void i915_driver_late_release(struct drm_i915_private *dev_priv)
> >       intel_power_domains_cleanup(dev_priv);
> >       intel_uc_cleanup_early(&dev_priv->gt.uc);
> >       i915_gem_cleanup_early(dev_priv);
> > +     intel_gt_cleanup_early(&dev_priv->gt);

Note the change in naming convention, intel_gt_driver_late_release().
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 5/6] drm/i915/uc: move uc_resume under gt_resume
  2019-07-29 23:47 ` [PATCH 5/6] drm/i915/uc: move uc_resume under gt_resume Daniele Ceraolo Spurio
@ 2019-07-30  8:09   ` Chris Wilson
  0 siblings, 0 replies; 24+ messages in thread
From: Chris Wilson @ 2019-07-30  8:09 UTC (permalink / raw)
  To: Daniele Ceraolo Spurio, intel-gfx

Quoting Daniele Ceraolo Spurio (2019-07-30 00:47:26)
> intel_uc is part of intel_gt so it makes logical sense for it to be
> resumed as part of it. Note that, since gt_resume is also called during
> the init flow, a state variable has been added to intel_uc to avoid
> asking an already running GuC to resume.
> 
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> ---
>  drivers/gpu/drm/i915/gem/i915_gem_pm.c |  2 --
>  drivers/gpu/drm/i915/gt/intel_gt_pm.c  |  3 +++
>  drivers/gpu/drm/i915/gt/uc/intel_uc.c  | 10 ++++++++--
>  drivers/gpu/drm/i915/gt/uc/intel_uc.h  |  2 ++
>  4 files changed, 13 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pm.c b/drivers/gpu/drm/i915/gem/i915_gem_pm.c
> index b5561cbdc5ea..25610de3961b 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_pm.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_pm.c
> @@ -265,8 +265,6 @@ void i915_gem_resume(struct drm_i915_private *i915)
>         if (intel_gt_resume(&i915->gt))
>                 goto err_wedged;
>  
> -       intel_uc_resume(&i915->gt.uc);
> -
>         /* Always reload a context for powersaving. */
>         if (!i915_gem_load_power_context(i915))
>                 goto err_wedged;

This sequence itself does not belong to i915_gem_resume() and needs to
be lifted to intel_gt_resume (that is establishing the baseline GT power
context). So I would rather postpone this to try and avoid having to
introduce bool suspended if at all possible.

Another rule of thumb to consider is that we should be able to throw gt
initialisation into an async task (and I'm considering an async task
per engine, although for a large part we can achieve asynchronicity via
HW queues).
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 6/6] drm/i915/gt: introduce intel_gt_suspend
  2019-07-30  7:33   ` Tvrtko Ursulin
@ 2019-07-30  8:12     ` Chris Wilson
  2019-07-30 14:58       ` Daniele Ceraolo Spurio
  0 siblings, 1 reply; 24+ messages in thread
From: Chris Wilson @ 2019-07-30  8:12 UTC (permalink / raw)
  To: Daniele Ceraolo Spurio, Tvrtko Ursulin, intel-gfx

Quoting Tvrtko Ursulin (2019-07-30 08:33:28)
> 
> On 30/07/2019 00:47, Daniele Ceraolo Spurio wrote:
> > For symmetry with intel_gt_resume and to hide more stuff from the top
> > level under intel_gt. Note that the switch_to_kernel_context_sync has
> > not been moved dure to the locking and ordering requirements that exist
> 
> Typo in due.
> 
> Should we add intel_gt_suspend_early/late, with the former dealing with 
> switch_to_kernel_context_sync? Although that raises an interesting 
> conundrum since it operates on GEM and GT. Best then to leave it 
> unwrapped for now I think.
> 
> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Ah, I wouldn't apply this patch yet for exactly that reason: we
shouldn't be driving GT suspend from inside GEM, so would wait until we
have a few more pieces of the puzzle reviewed^W unravelled.
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✓ Fi.CI.IGT: success for Call uC functions from GT ones
  2019-07-29 23:47 [PATCH 0/6] Call uC functions from GT ones Daniele Ceraolo Spurio
                   ` (7 preceding siblings ...)
  2019-07-30  1:03 ` ✓ Fi.CI.BAT: success " Patchwork
@ 2019-07-30 12:20 ` Patchwork
  8 siblings, 0 replies; 24+ messages in thread
From: Patchwork @ 2019-07-30 12:20 UTC (permalink / raw)
  To: Daniele Ceraolo Spurio; +Cc: intel-gfx

== Series Details ==

Series: Call uC functions from GT ones
URL   : https://patchwork.freedesktop.org/series/64406/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_6576_full -> Patchwork_13793_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_eio@in-flight-suspend:
    - shard-kbl:          [PASS][1] -> [INCOMPLETE][2] ([fdo#103665])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-kbl6/igt@gem_eio@in-flight-suspend.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-kbl2/igt@gem_eio@in-flight-suspend.html

  * igt@gem_exec_suspend@basic-s3:
    - shard-skl:          [PASS][3] -> [INCOMPLETE][4] ([fdo#104108])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-skl8/igt@gem_exec_suspend@basic-s3.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-skl6/igt@gem_exec_suspend@basic-s3.html

  * igt@kms_cursor_crc@pipe-c-cursor-alpha-opaque:
    - shard-glk:          [PASS][5] -> [FAIL][6] ([fdo#103232])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-glk3/igt@kms_cursor_crc@pipe-c-cursor-alpha-opaque.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-glk5/igt@kms_cursor_crc@pipe-c-cursor-alpha-opaque.html

  * igt@kms_flip@flip-vs-suspend-interruptible:
    - shard-apl:          [PASS][7] -> [DMESG-WARN][8] ([fdo#108566]) +3 similar issues
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-apl3/igt@kms_flip@flip-vs-suspend-interruptible.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-apl1/igt@kms_flip@flip-vs-suspend-interruptible.html

  * igt@kms_frontbuffer_tracking@fbc-badstride:
    - shard-iclb:         [PASS][9] -> [FAIL][10] ([fdo#103167]) +7 similar issues
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-iclb3/igt@kms_frontbuffer_tracking@fbc-badstride.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-iclb4/igt@kms_frontbuffer_tracking@fbc-badstride.html

  * igt@kms_plane@plane-panning-bottom-right-suspend-pipe-c-planes:
    - shard-kbl:          [PASS][11] -> [DMESG-WARN][12] ([fdo#108566])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-kbl1/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-c-planes.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-kbl4/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-c-planes.html

  * igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min:
    - shard-skl:          [PASS][13] -> [FAIL][14] ([fdo#108145])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-skl4/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-skl1/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min.html

  * igt@kms_psr@psr2_sprite_plane_move:
    - shard-iclb:         [PASS][15] -> [SKIP][16] ([fdo#109441])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-iclb2/igt@kms_psr@psr2_sprite_plane_move.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-iclb7/igt@kms_psr@psr2_sprite_plane_move.html

  * igt@perf@polling:
    - shard-skl:          [PASS][17] -> [FAIL][18] ([fdo#110728])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-skl2/igt@perf@polling.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-skl6/igt@perf@polling.html

  
#### Possible fixes ####

  * igt@gem_ctx_isolation@rcs0-s3:
    - shard-kbl:          [DMESG-WARN][19] ([fdo#108566]) -> [PASS][20] +9 similar issues
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-kbl3/igt@gem_ctx_isolation@rcs0-s3.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-kbl3/igt@gem_ctx_isolation@rcs0-s3.html

  * igt@gem_exec_balancer@smoke:
    - shard-iclb:         [SKIP][21] ([fdo#110854]) -> [PASS][22]
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-iclb6/igt@gem_exec_balancer@smoke.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-iclb4/igt@gem_exec_balancer@smoke.html

  * igt@gem_exec_suspend@basic-s3:
    - shard-snb:          [DMESG-WARN][23] ([fdo#110684] / [fdo#111115]) -> [PASS][24]
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-snb6/igt@gem_exec_suspend@basic-s3.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-snb5/igt@gem_exec_suspend@basic-s3.html

  * igt@kms_cursor_crc@pipe-a-cursor-suspend:
    - shard-skl:          [INCOMPLETE][25] ([fdo#110741]) -> [PASS][26]
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-skl6/igt@kms_cursor_crc@pipe-a-cursor-suspend.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-skl7/igt@kms_cursor_crc@pipe-a-cursor-suspend.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible:
    - shard-glk:          [FAIL][27] ([fdo#105363]) -> [PASS][28]
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-glk5/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-glk9/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-msflip-blt:
    - shard-iclb:         [FAIL][29] ([fdo#103167]) -> [PASS][30] +4 similar issues
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-iclb1/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-msflip-blt.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-iclb3/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@fbc-suspend:
    - shard-apl:          [DMESG-WARN][31] ([fdo#108566]) -> [PASS][32] +3 similar issues
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-apl5/igt@kms_frontbuffer_tracking@fbc-suspend.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-apl8/igt@kms_frontbuffer_tracking@fbc-suspend.html

  * igt@kms_plane_alpha_blend@pipe-b-coverage-7efc:
    - shard-skl:          [FAIL][33] ([fdo#108145] / [fdo#110403]) -> [PASS][34]
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-skl3/igt@kms_plane_alpha_blend@pipe-b-coverage-7efc.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-skl7/igt@kms_plane_alpha_blend@pipe-b-coverage-7efc.html

  * igt@kms_psr@psr2_suspend:
    - shard-iclb:         [SKIP][35] ([fdo#109441]) -> [PASS][36] +2 similar issues
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-iclb6/igt@kms_psr@psr2_suspend.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-iclb2/igt@kms_psr@psr2_suspend.html

  * igt@kms_setmode@basic:
    - shard-kbl:          [FAIL][37] ([fdo#99912]) -> [PASS][38]
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-kbl7/igt@kms_setmode@basic.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-kbl3/igt@kms_setmode@basic.html

  * igt@kms_vblank@pipe-c-wait-forked-busy-hang:
    - shard-iclb:         [INCOMPLETE][39] ([fdo#107713]) -> [PASS][40]
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-iclb7/igt@kms_vblank@pipe-c-wait-forked-busy-hang.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-iclb8/igt@kms_vblank@pipe-c-wait-forked-busy-hang.html

  * igt@prime_busy@wait-hang-vebox:
    - shard-glk:          [DMESG-WARN][41] ([fdo#111256]) -> [PASS][42]
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6576/shard-glk7/igt@prime_busy@wait-hang-vebox.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13793/shard-glk1/igt@prime_busy@wait-hang-vebox.html

  
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#103232]: https://bugs.freedesktop.org/show_bug.cgi?id=103232
  [fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665
  [fdo#104108]: https://bugs.freedesktop.org/show_bug.cgi?id=104108
  [fdo#105363]: https://bugs.freedesktop.org/show_bug.cgi?id=105363
  [fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#108566]: https://bugs.freedesktop.org/show_bug.cgi?id=108566
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [fdo#110403]: https://bugs.freedesktop.org/show_bug.cgi?id=110403
  [fdo#110684]: https://bugs.freedesktop.org/show_bug.cgi?id=110684
  [fdo#110728]: https://bugs.freedesktop.org/show_bug.cgi?id=110728
  [fdo#110741]: https://bugs.freedesktop.org/show_bug.cgi?id=110741
  [fdo#110854]: https://bugs.freedesktop.org/show_bug.cgi?id=110854
  [fdo#111115]: https://bugs.freedesktop.org/show_bug.cgi?id=111115
  [fdo#111256]: https://bugs.freedesktop.org/show_bug.cgi?id=111256
  [fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912


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

  No changes in participating hosts


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

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_6576 -> Patchwork_13793

  CI-20190529: 20190529
  CI_DRM_6576: 4040b4c4ab647422d82100c8b091d34b6a82f572 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5115: 21be7a02ac8a8ff46b561c36a69e4dd5a0c2938b @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_13793: 184a57b1d31a2094d1ac88756c82b56478f9072a @ 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_13793/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 1/6] drm/i915/uc: move uC WOPCM setup in uc_init_hw
  2019-07-29 23:47 ` [PATCH 1/6] drm/i915/uc: move uC WOPCM setup in uc_init_hw Daniele Ceraolo Spurio
@ 2019-07-30 14:39   ` Michal Wajdeczko
  2019-07-30 21:04     ` Daniele Ceraolo Spurio
  2019-07-30 20:24   ` kbuild test robot
  2019-07-30 20:24   ` [RFC PATCH] drm/i915/uc: uc_wopcm_init_hw() can be static kbuild test robot
  2 siblings, 1 reply; 24+ messages in thread
From: Michal Wajdeczko @ 2019-07-30 14:39 UTC (permalink / raw)
  To: intel-gfx, Daniele Ceraolo Spurio

On Tue, 30 Jul 2019 01:47:22 +0200, Daniele Ceraolo Spurio  
<daniele.ceraolospurio@intel.com> wrote:

> The register we write are not WOPCM regs but uC ones related to how
> GuC and HuC are going to use the WOPCM, so it makes logical sense
> for them to be programmed as part of uc_init_hw. The wopcm map on the

s/wopcm/WOPCM

> other side is not uC-specific (although that is our main use-case), so
> keep that separate.
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> ---
>  drivers/gpu/drm/i915/gt/uc/intel_uc.c | 62 ++++++++++++++++++++++++
>  drivers/gpu/drm/i915/i915_gem.c       |  8 +---
>  drivers/gpu/drm/i915/intel_wopcm.c    | 68 ---------------------------
>  drivers/gpu/drm/i915/intel_wopcm.h    |  3 --
>  4 files changed, 63 insertions(+), 78 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.c  
> b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
> index fafa9be1e12a..2f71f3704c46 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
> @@ -390,6 +390,63 @@ void intel_uc_sanitize(struct intel_uc *uc)
>  	__uc_sanitize(uc);
>  }
> +static int
> +write_and_verify(struct intel_gt *gt,
> +		 i915_reg_t reg, u32 val, u32 mask, u32 locked_bit)

as this function is more 'uncore' than 'gt' I would define it as:

static inline bool
intel_uncore_write_and_verify(struct intel_uncore *uncore,
                               i915_reg_t reg, u32 value,
                               u32 expected_value, u32 mask)
in intel_uncore.h

> +{
> +	struct intel_uncore *uncore = gt->uncore;
> +	u32 reg_val;
> +
> +	GEM_BUG_ON(val & ~mask);
> +
> +	intel_uncore_write(uncore, reg, val);
> +
> +	reg_val = intel_uncore_read(uncore, reg);
> +
> +	return (reg_val & mask) != (val | locked_bit) ? -EIO : 0;
> +}
> +
> +/* Initialize and verify the uC regs related to uC positioning in WOPCM  
> */
> +int uc_wopcm_init_hw(struct intel_uc *uc)

static int uc_init_wopcm()

> +{
> +	struct intel_gt *gt = uc_to_gt(uc);
> +	struct intel_wopcm *wopcm = &gt->i915->wopcm;
> +	struct intel_uncore *uncore = gt->uncore;
> +	u32 huc_agent;
> +	u32 mask;
> +	int err;
> +
> +	GEM_BUG_ON(!HAS_GT_UC(gt->i915));
> +	GEM_BUG_ON(!intel_uc_is_using_guc(uc));
> +	GEM_BUG_ON(!wopcm->guc.size);

on one hand there is intel_wopcm_guc_size() that can be used here,
but on other hand there is no intel_wopcm_guc_base ;(

> +	GEM_BUG_ON(!wopcm->guc.base);
> +
> +	err = write_and_verify(gt, GUC_WOPCM_SIZE, wopcm->guc.size,
> +			       GUC_WOPCM_SIZE_MASK | GUC_WOPCM_SIZE_LOCKED,
> +			       GUC_WOPCM_SIZE_LOCKED);

hmm, as these are write-once registers, maybe we should write only once
(not here) and only verify every time in uc_init_hw ?

> +	if (err)
> +		goto err_out;
> +
> +	huc_agent = intel_uc_is_using_huc(uc) ? HUC_LOADING_AGENT_GUC : 0;
> +	mask = GUC_WOPCM_OFFSET_MASK | GUC_WOPCM_OFFSET_VALID | huc_agent;
> +	err = write_and_verify(gt, DMA_GUC_WOPCM_OFFSET,
> +			       wopcm->guc.base | huc_agent, mask,
> +			       GUC_WOPCM_OFFSET_VALID);
> +	if (err)
> +		goto err_out;
> +
> +	return 0;
> +
> +err_out:
> +	DRM_ERROR("Failed to init WOPCM registers:\n");

In commit msg you said that these are not WOPCM registers ;)

> +	DRM_ERROR("DMA_GUC_WOPCM_OFFSET=%#x\n",
> +		  intel_uncore_read(uncore, DMA_GUC_WOPCM_OFFSET));
> +	DRM_ERROR("GUC_WOPCM_SIZE=%#x\n",
> +		  intel_uncore_read(uncore, GUC_WOPCM_SIZE));

btw, we can avoid extra read by reporting already failed write
in intel_uncore_write_and_verify()

> +
> +	return err;
> +}
> +
>  int intel_uc_init_hw(struct intel_uc *uc)
>  {
>  	struct drm_i915_private *i915 = uc_to_gt(uc)->i915;
> @@ -402,6 +459,10 @@ int intel_uc_init_hw(struct intel_uc *uc)
> 	GEM_BUG_ON(!intel_uc_fw_supported(&guc->fw));
> +	ret = uc_wopcm_init_hw(uc);
> +	if (ret)
> +		goto out;

it should be harmless to reuse existing err_out label

> +
>  	guc_reset_interrupts(guc);
> 	/* WaEnableuKernelHeaderValidFix:skl */
> @@ -486,6 +547,7 @@ int intel_uc_init_hw(struct intel_uc *uc)
>  	if (GEM_WARN_ON(ret == -EIO))
>  		ret = -EINVAL;
> +out:
>  	dev_err(i915->drm.dev, "GuC initialization failed %d\n", ret);
>  	return ret;
>  }
> diff --git a/drivers/gpu/drm/i915/i915_gem.c  
> b/drivers/gpu/drm/i915/i915_gem.c
> index 01dd0d1d9bf6..ae4e7cc3e3f9 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -1239,14 +1239,8 @@ int i915_gem_init_hw(struct drm_i915_private  
> *i915)
>  		goto out;
>  	}
> -	ret = intel_wopcm_init_hw(&i915->wopcm, gt);
> -	if (ret) {
> -		DRM_ERROR("Enabling WOPCM failed (%d)\n", ret);
> -		goto out;
> -	}
> -
>  	/* We can't enable contexts until all firmware is loaded */
> -	ret = intel_uc_init_hw(&i915->gt.uc);
> +	ret = intel_uc_init_hw(&gt->uc);
>  	if (ret) {
>  		DRM_ERROR("Enabling uc failed (%d)\n", ret);
>  		goto out;
> diff --git a/drivers/gpu/drm/i915/intel_wopcm.c  
> b/drivers/gpu/drm/i915/intel_wopcm.c
> index 0e86a9e85b49..d9973c0b0384 100644
> --- a/drivers/gpu/drm/i915/intel_wopcm.c
> +++ b/drivers/gpu/drm/i915/intel_wopcm.c
> @@ -224,71 +224,3 @@ int intel_wopcm_init(struct intel_wopcm *wopcm)
> 	return 0;
>  }
> -
> -static int
> -write_and_verify(struct intel_gt *gt,
> -		 i915_reg_t reg, u32 val, u32 mask, u32 locked_bit)
> -{
> -	struct intel_uncore *uncore = gt->uncore;
> -	u32 reg_val;
> -
> -	GEM_BUG_ON(val & ~mask);
> -
> -	intel_uncore_write(uncore, reg, val);
> -
> -	reg_val = intel_uncore_read(uncore, reg);
> -
> -	return (reg_val & mask) != (val | locked_bit) ? -EIO : 0;
> -}
> -
> -/**
> - * intel_wopcm_init_hw() - Setup GuC WOPCM registers.
> - * @wopcm: pointer to intel_wopcm.
> - * @gt: pointer to the containing GT
> - *
> - * Setup the GuC WOPCM size and offset registers with the calculated  
> values. It
> - * will verify the register values to make sure the registers are  
> locked with
> - * correct values.
> - *
> - * Return: 0 on success. -EIO if registers were locked with incorrect  
> values.
> - */
> -int intel_wopcm_init_hw(struct intel_wopcm *wopcm, struct intel_gt *gt)
> -{
> -	struct drm_i915_private *i915 = wopcm_to_i915(wopcm);
> -	struct intel_uncore *uncore = gt->uncore;
> -	u32 huc_agent;
> -	u32 mask;
> -	int err;
> -
> -	if (!USES_GUC(i915))
> -		return 0;
> -
> -	GEM_BUG_ON(!HAS_GT_UC(i915));
> -	GEM_BUG_ON(!wopcm->guc.size);
> -	GEM_BUG_ON(!wopcm->guc.base);
> -
> -	err = write_and_verify(gt, GUC_WOPCM_SIZE, wopcm->guc.size,
> -			       GUC_WOPCM_SIZE_MASK | GUC_WOPCM_SIZE_LOCKED,
> -			       GUC_WOPCM_SIZE_LOCKED);
> -	if (err)
> -		goto err_out;
> -
> -	huc_agent = USES_HUC(i915) ? HUC_LOADING_AGENT_GUC : 0;
> -	mask = GUC_WOPCM_OFFSET_MASK | GUC_WOPCM_OFFSET_VALID | huc_agent;
> -	err = write_and_verify(gt, DMA_GUC_WOPCM_OFFSET,
> -			       wopcm->guc.base | huc_agent, mask,
> -			       GUC_WOPCM_OFFSET_VALID);
> -	if (err)
> -		goto err_out;
> -
> -	return 0;
> -
> -err_out:
> -	DRM_ERROR("Failed to init WOPCM registers:\n");
> -	DRM_ERROR("DMA_GUC_WOPCM_OFFSET=%#x\n",
> -		  intel_uncore_read(uncore, DMA_GUC_WOPCM_OFFSET));
> -	DRM_ERROR("GUC_WOPCM_SIZE=%#x\n",
> -		  intel_uncore_read(uncore, GUC_WOPCM_SIZE));
> -
> -	return err;
> -}
> diff --git a/drivers/gpu/drm/i915/intel_wopcm.h  
> b/drivers/gpu/drm/i915/intel_wopcm.h
> index 56aaed4d64ff..e1f0f66aaa44 100644
> --- a/drivers/gpu/drm/i915/intel_wopcm.h
> +++ b/drivers/gpu/drm/i915/intel_wopcm.h
> @@ -9,8 +9,6 @@
> #include <linux/types.h>
> -struct intel_gt;
> -
>  /**
>   * struct intel_wopcm - Overall WOPCM info and WOPCM regions.
>   * @size: Size of overall WOPCM.
> @@ -43,6 +41,5 @@ static inline u32 intel_wopcm_guc_size(struct  
> intel_wopcm *wopcm)
> void intel_wopcm_init_early(struct intel_wopcm *wopcm);
>  int intel_wopcm_init(struct intel_wopcm *wopcm);
> -int intel_wopcm_init_hw(struct intel_wopcm *wopcm, struct intel_gt *gt);
> #endif
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 3/6] drm/i915/uc: move uc early functions inside the gt ones
  2019-07-29 23:47 ` [PATCH 3/6] drm/i915/uc: move uc early functions inside the gt ones Daniele Ceraolo Spurio
@ 2019-07-30 14:53   ` Michal Wajdeczko
  0 siblings, 0 replies; 24+ messages in thread
From: Michal Wajdeczko @ 2019-07-30 14:53 UTC (permalink / raw)
  To: intel-gfx, Daniele Ceraolo Spurio

On Tue, 30 Jul 2019 01:47:24 +0200, Daniele Ceraolo Spurio  
<daniele.ceraolospurio@intel.com> wrote:

> uc is a subcomponent of GT, so initialize/clean it as part of it. The
> wopcm_init_early doesn't have to be happen before the uC one, but since
> in other parts of the code we consider wopcm first do the same for
> consistency.

nit: s/uc/uC
nit: s/wopcm/WOPCM

>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>

Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 2/6] drm/i915: move gt_cleanup_early out of gem_cleanup_early
  2019-07-30  8:01     ` Chris Wilson
@ 2019-07-30 14:56       ` Daniele Ceraolo Spurio
  2019-07-30 15:12         ` Chris Wilson
  0 siblings, 1 reply; 24+ messages in thread
From: Daniele Ceraolo Spurio @ 2019-07-30 14:56 UTC (permalink / raw)
  To: Chris Wilson, Tvrtko Ursulin, intel-gfx



On 7/30/19 1:01 AM, Chris Wilson wrote:
> Quoting Tvrtko Ursulin (2019-07-30 08:19:18)
>>
>> On 30/07/2019 00:47, Daniele Ceraolo Spurio wrote:
>>> We don't call the init_early function from within the gem code, so we
>>> shouldn't do it for the cleanup either.
>>>
>>> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
>>> Cc: Chris Wilson <chris@chris-wilson.co.uk>
>>> Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
>>> ---
>>>    drivers/gpu/drm/i915/i915_drv.c | 2 ++
>>>    drivers/gpu/drm/i915/i915_gem.c | 2 --
>>>    2 files changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
>>> index f2d3d754af37..934e605e2466 100644
>>> --- a/drivers/gpu/drm/i915/i915_drv.c
>>> +++ b/drivers/gpu/drm/i915/i915_drv.c
>>> @@ -951,6 +951,7 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
>>>        intel_uc_cleanup_early(&dev_priv->gt.uc);
>>>        i915_gem_cleanup_early(dev_priv);
>>>    err_workqueues:
>>> +     intel_gt_cleanup_early(&dev_priv->gt);
>>>        i915_workqueues_cleanup(dev_priv);
>>>        return ret;
>>>    }
>>> @@ -966,6 +967,7 @@ static void i915_driver_late_release(struct drm_i915_private *dev_priv)
>>>        intel_power_domains_cleanup(dev_priv);
>>>        intel_uc_cleanup_early(&dev_priv->gt.uc);
>>>        i915_gem_cleanup_early(dev_priv);
>>> +     intel_gt_cleanup_early(&dev_priv->gt);
> 
> Note the change in naming convention, intel_gt_driver_late_release().
> -Chris
> 

Does it make sense to flip only the gt function? it'd look terribly out 
of place close to all those other cleanup_early() calls. I can follow up 
with a patch to flip them all at the same time if that works for you.

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

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

* Re: [PATCH 6/6] drm/i915/gt: introduce intel_gt_suspend
  2019-07-30  8:12     ` Chris Wilson
@ 2019-07-30 14:58       ` Daniele Ceraolo Spurio
  0 siblings, 0 replies; 24+ messages in thread
From: Daniele Ceraolo Spurio @ 2019-07-30 14:58 UTC (permalink / raw)
  To: Chris Wilson, Tvrtko Ursulin, intel-gfx



On 7/30/19 1:12 AM, Chris Wilson wrote:
> Quoting Tvrtko Ursulin (2019-07-30 08:33:28)
>>
>> On 30/07/2019 00:47, Daniele Ceraolo Spurio wrote:
>>> For symmetry with intel_gt_resume and to hide more stuff from the top
>>> level under intel_gt. Note that the switch_to_kernel_context_sync has
>>> not been moved dure to the locking and ordering requirements that exist
>>
>> Typo in due.
>>
>> Should we add intel_gt_suspend_early/late, with the former dealing with
>> switch_to_kernel_context_sync? Although that raises an interesting
>> conundrum since it operates on GEM and GT. Best then to leave it
>> unwrapped for now I think.
>>
>> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> 
> Ah, I wouldn't apply this patch yet for exactly that reason: we
> shouldn't be driving GT suspend from inside GEM, so would wait until we
> have a few more pieces of the puzzle reviewed^W unravelled.
> -Chris
> 

Ok, I'll drop the last 2 patches in the series for now.

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

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

* Re: [PATCH 2/6] drm/i915: move gt_cleanup_early out of gem_cleanup_early
  2019-07-30 14:56       ` Daniele Ceraolo Spurio
@ 2019-07-30 15:12         ` Chris Wilson
  0 siblings, 0 replies; 24+ messages in thread
From: Chris Wilson @ 2019-07-30 15:12 UTC (permalink / raw)
  To: Daniele Ceraolo Spurio, Tvrtko Ursulin, intel-gfx

Quoting Daniele Ceraolo Spurio (2019-07-30 15:56:57)
> 
> 
> On 7/30/19 1:01 AM, Chris Wilson wrote:
> > Quoting Tvrtko Ursulin (2019-07-30 08:19:18)
> >>
> >> On 30/07/2019 00:47, Daniele Ceraolo Spurio wrote:
> >>> We don't call the init_early function from within the gem code, so we
> >>> shouldn't do it for the cleanup either.
> >>>
> >>> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> >>> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> >>> Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
> >>> ---
> >>>    drivers/gpu/drm/i915/i915_drv.c | 2 ++
> >>>    drivers/gpu/drm/i915/i915_gem.c | 2 --
> >>>    2 files changed, 2 insertions(+), 2 deletions(-)
> >>>
> >>> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> >>> index f2d3d754af37..934e605e2466 100644
> >>> --- a/drivers/gpu/drm/i915/i915_drv.c
> >>> +++ b/drivers/gpu/drm/i915/i915_drv.c
> >>> @@ -951,6 +951,7 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
> >>>        intel_uc_cleanup_early(&dev_priv->gt.uc);
> >>>        i915_gem_cleanup_early(dev_priv);
> >>>    err_workqueues:
> >>> +     intel_gt_cleanup_early(&dev_priv->gt);
> >>>        i915_workqueues_cleanup(dev_priv);
> >>>        return ret;
> >>>    }
> >>> @@ -966,6 +967,7 @@ static void i915_driver_late_release(struct drm_i915_private *dev_priv)
> >>>        intel_power_domains_cleanup(dev_priv);
> >>>        intel_uc_cleanup_early(&dev_priv->gt.uc);
> >>>        i915_gem_cleanup_early(dev_priv);
> >>> +     intel_gt_cleanup_early(&dev_priv->gt);
> > 
> > Note the change in naming convention, intel_gt_driver_late_release().
> > -Chris
> > 
> 
> Does it make sense to flip only the gt function? it'd look terribly out 
> of place close to all those other cleanup_early() calls. I can follow up 
> with a patch to flip them all at the same time if that works for you.

Baby steps, the consistency is in the function callgraphs -- it looks
out of place to have late_release call cleanup_early :)
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [RFC PATCH] drm/i915/uc: uc_wopcm_init_hw() can be static
  2019-07-29 23:47 ` [PATCH 1/6] drm/i915/uc: move uC WOPCM setup in uc_init_hw Daniele Ceraolo Spurio
  2019-07-30 14:39   ` Michal Wajdeczko
  2019-07-30 20:24   ` kbuild test robot
@ 2019-07-30 20:24   ` kbuild test robot
  2 siblings, 0 replies; 24+ messages in thread
From: kbuild test robot @ 2019-07-30 20:24 UTC (permalink / raw)
  To: Daniele Ceraolo Spurio; +Cc: intel-gfx, kbuild-all


Fixes: 6b6fa175ec57 ("drm/i915/uc: move uC WOPCM setup in uc_init_hw")
Signed-off-by: kbuild test robot <lkp@intel.com>
---
 intel_uc.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.c b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
index 2f71f3704c4671..383f048e490092 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
@@ -407,7 +407,7 @@ write_and_verify(struct intel_gt *gt,
 }
 
 /* Initialize and verify the uC regs related to uC positioning in WOPCM */
-int uc_wopcm_init_hw(struct intel_uc *uc)
+static int uc_wopcm_init_hw(struct intel_uc *uc)
 {
 	struct intel_gt *gt = uc_to_gt(uc);
 	struct intel_wopcm *wopcm = &gt->i915->wopcm;
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 1/6] drm/i915/uc: move uC WOPCM setup in uc_init_hw
  2019-07-29 23:47 ` [PATCH 1/6] drm/i915/uc: move uC WOPCM setup in uc_init_hw Daniele Ceraolo Spurio
  2019-07-30 14:39   ` Michal Wajdeczko
@ 2019-07-30 20:24   ` kbuild test robot
  2019-07-30 20:24   ` [RFC PATCH] drm/i915/uc: uc_wopcm_init_hw() can be static kbuild test robot
  2 siblings, 0 replies; 24+ messages in thread
From: kbuild test robot @ 2019-07-30 20:24 UTC (permalink / raw)
  To: Daniele Ceraolo Spurio; +Cc: intel-gfx, kbuild-all

Hi Daniele,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on drm-intel/for-linux-next]
[cannot apply to v5.3-rc2 next-20190730]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Daniele-Ceraolo-Spurio/Call-uC-functions-from-GT-ones/20190730-131043
base:   git://anongit.freedesktop.org/drm-intel for-linux-next
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.1-rc1-7-g2b96cd8-dirty
        make ARCH=x86_64 allmodconfig
        make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>


sparse warnings: (new ones prefixed by >>)

>> drivers/gpu/drm/i915/gt/uc/intel_uc.c:410:5: sparse: sparse: symbol 'uc_wopcm_init_hw' was not declared. Should it be static?

Please review and possibly fold the followup patch.

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 1/6] drm/i915/uc: move uC WOPCM setup in uc_init_hw
  2019-07-30 14:39   ` Michal Wajdeczko
@ 2019-07-30 21:04     ` Daniele Ceraolo Spurio
  0 siblings, 0 replies; 24+ messages in thread
From: Daniele Ceraolo Spurio @ 2019-07-30 21:04 UTC (permalink / raw)
  To: Michal Wajdeczko, intel-gfx



On 7/30/19 7:39 AM, Michal Wajdeczko wrote:
> On Tue, 30 Jul 2019 01:47:22 +0200, Daniele Ceraolo Spurio 
> <daniele.ceraolospurio@intel.com> wrote:
> 
>> The register we write are not WOPCM regs but uC ones related to how
>> GuC and HuC are going to use the WOPCM, so it makes logical sense
>> for them to be programmed as part of uc_init_hw. The wopcm map on the
> 
> s/wopcm/WOPCM
> 
>> other side is not uC-specific (although that is our main use-case), so
>> keep that separate.
>>
>> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
>> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
>> Cc: Chris Wilson <chris@chris-wilson.co.uk>
>> ---
>>  drivers/gpu/drm/i915/gt/uc/intel_uc.c | 62 ++++++++++++++++++++++++
>>  drivers/gpu/drm/i915/i915_gem.c       |  8 +---
>>  drivers/gpu/drm/i915/intel_wopcm.c    | 68 ---------------------------
>>  drivers/gpu/drm/i915/intel_wopcm.h    |  3 --
>>  4 files changed, 63 insertions(+), 78 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.c 
>> b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
>> index fafa9be1e12a..2f71f3704c46 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc.c
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
>> @@ -390,6 +390,63 @@ void intel_uc_sanitize(struct intel_uc *uc)
>>      __uc_sanitize(uc);
>>  }
>> +static int
>> +write_and_verify(struct intel_gt *gt,
>> +         i915_reg_t reg, u32 val, u32 mask, u32 locked_bit)
> 
> as this function is more 'uncore' than 'gt' I would define it as:
> 
> static inline bool
> intel_uncore_write_and_verify(struct intel_uncore *uncore,
>                                i915_reg_t reg, u32 value,
>                                u32 expected_value, u32 mask)
> in intel_uncore.h
> 

ok

>> +{
>> +    struct intel_uncore *uncore = gt->uncore;
>> +    u32 reg_val;
>> +
>> +    GEM_BUG_ON(val & ~mask);
>> +
>> +    intel_uncore_write(uncore, reg, val);
>> +
>> +    reg_val = intel_uncore_read(uncore, reg);
>> +
>> +    return (reg_val & mask) != (val | locked_bit) ? -EIO : 0;
>> +}
>> +
>> +/* Initialize and verify the uC regs related to uC positioning in 
>> WOPCM */
>> +int uc_wopcm_init_hw(struct intel_uc *uc)
> 
> static int uc_init_wopcm()
> 
>> +{
>> +    struct intel_gt *gt = uc_to_gt(uc);
>> +    struct intel_wopcm *wopcm = &gt->i915->wopcm;
>> +    struct intel_uncore *uncore = gt->uncore;
>> +    u32 huc_agent;
>> +    u32 mask;
>> +    int err;
>> +
>> +    GEM_BUG_ON(!HAS_GT_UC(gt->i915));
>> +    GEM_BUG_ON(!intel_uc_is_using_guc(uc));
>> +    GEM_BUG_ON(!wopcm->guc.size);
> 
> on one hand there is intel_wopcm_guc_size() that can be used here,
> but on other hand there is no intel_wopcm_guc_base ;(
> 
>> +    GEM_BUG_ON(!wopcm->guc.base);
>> +
>> +    err = write_and_verify(gt, GUC_WOPCM_SIZE, wopcm->guc.size,
>> +                   GUC_WOPCM_SIZE_MASK | GUC_WOPCM_SIZE_LOCKED,
>> +                   GUC_WOPCM_SIZE_LOCKED);
> 
> hmm, as these are write-once registers, maybe we should write only once
> (not here) and only verify every time in uc_init_hw ?
> 

AFAIK they don't survive deep sleep states even if they're write once, 
so we do need to write them again in some occasions. We could read them 
first and only write them if they're not locked, but IMO it's simpler to 
just unconditionally emit the write every time.

>> +    if (err)
>> +        goto err_out;
>> +
>> +    huc_agent = intel_uc_is_using_huc(uc) ? HUC_LOADING_AGENT_GUC : 0;
>> +    mask = GUC_WOPCM_OFFSET_MASK | GUC_WOPCM_OFFSET_VALID | huc_agent;
>> +    err = write_and_verify(gt, DMA_GUC_WOPCM_OFFSET,
>> +                   wopcm->guc.base | huc_agent, mask,
>> +                   GUC_WOPCM_OFFSET_VALID);
>> +    if (err)
>> +        goto err_out;
>> +
>> +    return 0;
>> +
>> +err_out:
>> +    DRM_ERROR("Failed to init WOPCM registers:\n");
> 
> In commit msg you said that these are not WOPCM registers ;)
> 

ops :)

>> +    DRM_ERROR("DMA_GUC_WOPCM_OFFSET=%#x\n",
>> +          intel_uncore_read(uncore, DMA_GUC_WOPCM_OFFSET));
>> +    DRM_ERROR("GUC_WOPCM_SIZE=%#x\n",
>> +          intel_uncore_read(uncore, GUC_WOPCM_SIZE));
> 
> btw, we can avoid extra read by reporting already failed write
> in intel_uncore_write_and_verify()
> 

intel_uncore_write_and_verify(0 is better kept generic using a bool 
return IMO. We only do the extra reads in an error path anyway, so it 
shouldn't be an issue.

>> +
>> +    return err;
>> +}
>> +
>>  int intel_uc_init_hw(struct intel_uc *uc)
>>  {
>>      struct drm_i915_private *i915 = uc_to_gt(uc)->i915;
>> @@ -402,6 +459,10 @@ int intel_uc_init_hw(struct intel_uc *uc)
>>     GEM_BUG_ON(!intel_uc_fw_supported(&guc->fw));
>> +    ret = uc_wopcm_init_hw(uc);
>> +    if (ret)
>> +        goto out;
> 
> it should be harmless to reuse existing err_out label
> 

ack.

Thanks,
Daniele

>> +
>>      guc_reset_interrupts(guc);
>>     /* WaEnableuKernelHeaderValidFix:skl */
>> @@ -486,6 +547,7 @@ int intel_uc_init_hw(struct intel_uc *uc)
>>      if (GEM_WARN_ON(ret == -EIO))
>>          ret = -EINVAL;
>> +out:
>>      dev_err(i915->drm.dev, "GuC initialization failed %d\n", ret);
>>      return ret;
>>  }
>> diff --git a/drivers/gpu/drm/i915/i915_gem.c 
>> b/drivers/gpu/drm/i915/i915_gem.c
>> index 01dd0d1d9bf6..ae4e7cc3e3f9 100644
>> --- a/drivers/gpu/drm/i915/i915_gem.c
>> +++ b/drivers/gpu/drm/i915/i915_gem.c
>> @@ -1239,14 +1239,8 @@ int i915_gem_init_hw(struct drm_i915_private 
>> *i915)
>>          goto out;
>>      }
>> -    ret = intel_wopcm_init_hw(&i915->wopcm, gt);
>> -    if (ret) {
>> -        DRM_ERROR("Enabling WOPCM failed (%d)\n", ret);
>> -        goto out;
>> -    }
>> -
>>      /* We can't enable contexts until all firmware is loaded */
>> -    ret = intel_uc_init_hw(&i915->gt.uc);
>> +    ret = intel_uc_init_hw(&gt->uc);
>>      if (ret) {
>>          DRM_ERROR("Enabling uc failed (%d)\n", ret);
>>          goto out;
>> diff --git a/drivers/gpu/drm/i915/intel_wopcm.c 
>> b/drivers/gpu/drm/i915/intel_wopcm.c
>> index 0e86a9e85b49..d9973c0b0384 100644
>> --- a/drivers/gpu/drm/i915/intel_wopcm.c
>> +++ b/drivers/gpu/drm/i915/intel_wopcm.c
>> @@ -224,71 +224,3 @@ int intel_wopcm_init(struct intel_wopcm *wopcm)
>>     return 0;
>>  }
>> -
>> -static int
>> -write_and_verify(struct intel_gt *gt,
>> -         i915_reg_t reg, u32 val, u32 mask, u32 locked_bit)
>> -{
>> -    struct intel_uncore *uncore = gt->uncore;
>> -    u32 reg_val;
>> -
>> -    GEM_BUG_ON(val & ~mask);
>> -
>> -    intel_uncore_write(uncore, reg, val);
>> -
>> -    reg_val = intel_uncore_read(uncore, reg);
>> -
>> -    return (reg_val & mask) != (val | locked_bit) ? -EIO : 0;
>> -}
>> -
>> -/**
>> - * intel_wopcm_init_hw() - Setup GuC WOPCM registers.
>> - * @wopcm: pointer to intel_wopcm.
>> - * @gt: pointer to the containing GT
>> - *
>> - * Setup the GuC WOPCM size and offset registers with the calculated 
>> values. It
>> - * will verify the register values to make sure the registers are 
>> locked with
>> - * correct values.
>> - *
>> - * Return: 0 on success. -EIO if registers were locked with incorrect 
>> values.
>> - */
>> -int intel_wopcm_init_hw(struct intel_wopcm *wopcm, struct intel_gt *gt)
>> -{
>> -    struct drm_i915_private *i915 = wopcm_to_i915(wopcm);
>> -    struct intel_uncore *uncore = gt->uncore;
>> -    u32 huc_agent;
>> -    u32 mask;
>> -    int err;
>> -
>> -    if (!USES_GUC(i915))
>> -        return 0;
>> -
>> -    GEM_BUG_ON(!HAS_GT_UC(i915));
>> -    GEM_BUG_ON(!wopcm->guc.size);
>> -    GEM_BUG_ON(!wopcm->guc.base);
>> -
>> -    err = write_and_verify(gt, GUC_WOPCM_SIZE, wopcm->guc.size,
>> -                   GUC_WOPCM_SIZE_MASK | GUC_WOPCM_SIZE_LOCKED,
>> -                   GUC_WOPCM_SIZE_LOCKED);
>> -    if (err)
>> -        goto err_out;
>> -
>> -    huc_agent = USES_HUC(i915) ? HUC_LOADING_AGENT_GUC : 0;
>> -    mask = GUC_WOPCM_OFFSET_MASK | GUC_WOPCM_OFFSET_VALID | huc_agent;
>> -    err = write_and_verify(gt, DMA_GUC_WOPCM_OFFSET,
>> -                   wopcm->guc.base | huc_agent, mask,
>> -                   GUC_WOPCM_OFFSET_VALID);
>> -    if (err)
>> -        goto err_out;
>> -
>> -    return 0;
>> -
>> -err_out:
>> -    DRM_ERROR("Failed to init WOPCM registers:\n");
>> -    DRM_ERROR("DMA_GUC_WOPCM_OFFSET=%#x\n",
>> -          intel_uncore_read(uncore, DMA_GUC_WOPCM_OFFSET));
>> -    DRM_ERROR("GUC_WOPCM_SIZE=%#x\n",
>> -          intel_uncore_read(uncore, GUC_WOPCM_SIZE));
>> -
>> -    return err;
>> -}
>> diff --git a/drivers/gpu/drm/i915/intel_wopcm.h 
>> b/drivers/gpu/drm/i915/intel_wopcm.h
>> index 56aaed4d64ff..e1f0f66aaa44 100644
>> --- a/drivers/gpu/drm/i915/intel_wopcm.h
>> +++ b/drivers/gpu/drm/i915/intel_wopcm.h
>> @@ -9,8 +9,6 @@
>> #include <linux/types.h>
>> -struct intel_gt;
>> -
>>  /**
>>   * struct intel_wopcm - Overall WOPCM info and WOPCM regions.
>>   * @size: Size of overall WOPCM.
>> @@ -43,6 +41,5 @@ static inline u32 intel_wopcm_guc_size(struct 
>> intel_wopcm *wopcm)
>> void intel_wopcm_init_early(struct intel_wopcm *wopcm);
>>  int intel_wopcm_init(struct intel_wopcm *wopcm);
>> -int intel_wopcm_init_hw(struct intel_wopcm *wopcm, struct intel_gt *gt);
>> #endif
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

end of thread, other threads:[~2019-07-30 21:05 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-29 23:47 [PATCH 0/6] Call uC functions from GT ones Daniele Ceraolo Spurio
2019-07-29 23:47 ` [PATCH 1/6] drm/i915/uc: move uC WOPCM setup in uc_init_hw Daniele Ceraolo Spurio
2019-07-30 14:39   ` Michal Wajdeczko
2019-07-30 21:04     ` Daniele Ceraolo Spurio
2019-07-30 20:24   ` kbuild test robot
2019-07-30 20:24   ` [RFC PATCH] drm/i915/uc: uc_wopcm_init_hw() can be static kbuild test robot
2019-07-29 23:47 ` [PATCH 2/6] drm/i915: move gt_cleanup_early out of gem_cleanup_early Daniele Ceraolo Spurio
2019-07-30  7:19   ` Tvrtko Ursulin
2019-07-30  8:01     ` Chris Wilson
2019-07-30 14:56       ` Daniele Ceraolo Spurio
2019-07-30 15:12         ` Chris Wilson
2019-07-29 23:47 ` [PATCH 3/6] drm/i915/uc: move uc early functions inside the gt ones Daniele Ceraolo Spurio
2019-07-30 14:53   ` Michal Wajdeczko
2019-07-29 23:47 ` [PATCH 4/6] drm/i915/gt: introduce intel_gt_runtime_suspend/resume Daniele Ceraolo Spurio
2019-07-30  7:35   ` Tvrtko Ursulin
2019-07-29 23:47 ` [PATCH 5/6] drm/i915/uc: move uc_resume under gt_resume Daniele Ceraolo Spurio
2019-07-30  8:09   ` Chris Wilson
2019-07-29 23:47 ` [PATCH 6/6] drm/i915/gt: introduce intel_gt_suspend Daniele Ceraolo Spurio
2019-07-30  7:33   ` Tvrtko Ursulin
2019-07-30  8:12     ` Chris Wilson
2019-07-30 14:58       ` Daniele Ceraolo Spurio
2019-07-30  0:44 ` ✗ Fi.CI.SPARSE: warning for Call uC functions from GT ones Patchwork
2019-07-30  1:03 ` ✓ Fi.CI.BAT: success " Patchwork
2019-07-30 12:20 ` ✓ Fi.CI.IGT: " 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.