public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
* [Intel-gfx] [PATCH 0/4] drm/i915/guc: Update to GuC v49
@ 2020-09-21 17:54 John.C.Harrison
  2020-09-21 17:54 ` [Intel-gfx] [PATCH 1/4] drm/i915/guc: Update to use firmware v49.0.1 John.C.Harrison
                   ` (6 more replies)
  0 siblings, 7 replies; 13+ messages in thread
From: John.C.Harrison @ 2020-09-21 17:54 UTC (permalink / raw)
  To: Intel-GFX

From: John Harrison <John.C.Harrison@Intel.com>

Update to the latest GuC firmware and enable by default.

Signed-off-by: John Harrison <John.C.Harrison@Intel.com>


Daniele Ceraolo Spurio (1):
  drm/i915/uc: turn on GuC/HuC auto mode by default

John Harrison (3):
  drm/i915/guc: Update to use firmware v49.0.1
  drm/i915/guc: Improved reporting when GuC fails to load
  drm/i915/guc: Clear pointers on free

 drivers/gpu/drm/i915/gt/intel_engine_cs.c    |   3 +-
 drivers/gpu/drm/i915/gt/uc/intel_guc.c       |  18 ---
 drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c   | 132 +++++++++++++++----
 drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c    |   1 +
 drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c    |  27 +++-
 drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h  |  82 +++++++-----
 drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h   |   5 +
 drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c     |  27 ++--
 drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h     |   2 +
 drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h |   6 +-
 drivers/gpu/drm/i915/i915_params.h           |   2 +-
 11 files changed, 207 insertions(+), 98 deletions(-)

-- 
2.25.1

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

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

* [Intel-gfx] [PATCH 1/4] drm/i915/guc: Update to use firmware v49.0.1
  2020-09-21 17:54 [Intel-gfx] [PATCH 0/4] drm/i915/guc: Update to GuC v49 John.C.Harrison
@ 2020-09-21 17:54 ` John.C.Harrison
  2020-09-22  0:24   ` Daniele Ceraolo Spurio
  2020-09-21 17:54 ` [Intel-gfx] [PATCH 2/4] drm/i915/guc: Improved reporting when GuC fails to load John.C.Harrison
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 13+ messages in thread
From: John.C.Harrison @ 2020-09-21 17:54 UTC (permalink / raw)
  To: Intel-GFX; +Cc: Oscar Mateo, Michal Winiarski, Michel Thierry

From: John Harrison <John.C.Harrison@Intel.com>

The latest GuC firmware includes a number of interface changes that
require driver updates to match.

* Starting from Gen11, the ID to be provided to GuC needs to contain
  the engine class in bits [0..2] and the instance in bits [3..6].

  NOTE: this patch breaks pointer dereferences in some existing GuC
  functions that use the guc_id to dereference arrays but these functions
  are not used for now as we have GuC submission disabled and we will
  update these functions in follow up patch which requires new IDs.

* The new GuC requires the additional data structure (ADS) and associated
  'private_data' pointer to be setup. This is basically a scratch area
  of memory that the GuC owns. The size is read from the CSS header.

* There is now a physical to logical engine mapping table in the ADS
  which needs to be configured in order for the firmware to load. For
  now, the table is initialised with a 1 to 1 mapping.

* GUC_CTL_CTXINFO has been removed from the initialization params.

* reg_state_buffer is maintained internally by the GuC as part of
  the private data.

* The ADS layout has changed significantly. This patch updates the
  shared structure and also adds better documentation of the layout.

* While i915 does not use GuC doorbells, the firmware now requires
  that some initialisation is done.

* The number of engine classes and instances supported in the ADS has
  been increased.

Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Signed-off-by: Oscar Mateo <oscar.mateo@intel.com>
Signed-off-by: Michel Thierry <michel.thierry@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Michal Winiarski <michal.winiarski@intel.com>
Cc: Tomasz Lis <tomasz.lis@intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
---
 drivers/gpu/drm/i915/gt/intel_engine_cs.c    |   3 +-
 drivers/gpu/drm/i915/gt/uc/intel_guc.c       |  18 ---
 drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c   | 131 +++++++++++++++----
 drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h  |  82 +++++++-----
 drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h   |   5 +
 drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c     |  27 ++--
 drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h     |   2 +
 drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h |   6 +-
 8 files changed, 182 insertions(+), 92 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
index 1985772152bf..3fb52fac0d5d 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
@@ -305,8 +305,9 @@ static int intel_engine_setup(struct intel_gt *gt, enum intel_engine_id id)
 	engine->i915 = i915;
 	engine->gt = gt;
 	engine->uncore = gt->uncore;
-	engine->hw_id = engine->guc_id = info->hw_id;
 	engine->mmio_base = __engine_mmio_base(i915, info->mmio_bases);
+	engine->hw_id = info->hw_id;
+	engine->guc_id = MAKE_GUC_ID(info->class, info->instance);
 
 	engine->class = info->class;
 	engine->instance = info->instance;
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
index 942c7c187adb..6909da1e1a73 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
@@ -213,23 +213,6 @@ static u32 guc_ctl_feature_flags(struct intel_guc *guc)
 	return flags;
 }
 
-static u32 guc_ctl_ctxinfo_flags(struct intel_guc *guc)
-{
-	u32 flags = 0;
-
-	if (intel_guc_submission_is_used(guc)) {
-		u32 ctxnum, base;
-
-		base = intel_guc_ggtt_offset(guc, guc->stage_desc_pool);
-		ctxnum = GUC_MAX_STAGE_DESCRIPTORS / 16;
-
-		base >>= PAGE_SHIFT;
-		flags |= (base << GUC_CTL_BASE_ADDR_SHIFT) |
-			(ctxnum << GUC_CTL_CTXNUM_IN16_SHIFT);
-	}
-	return flags;
-}
-
 static u32 guc_ctl_log_params_flags(struct intel_guc *guc)
 {
 	u32 offset = intel_guc_ggtt_offset(guc, guc->log.vma) >> PAGE_SHIFT;
@@ -291,7 +274,6 @@ static void guc_init_params(struct intel_guc *guc)
 
 	BUILD_BUG_ON(sizeof(guc->params) != GUC_CTL_MAX_DWORDS * sizeof(u32));
 
-	params[GUC_CTL_CTXINFO] = guc_ctl_ctxinfo_flags(guc);
 	params[GUC_CTL_LOG_PARAMS] = guc_ctl_log_params_flags(guc);
 	params[GUC_CTL_FEATURE] = guc_ctl_feature_flags(guc);
 	params[GUC_CTL_DEBUG] = guc_ctl_debug_flags(guc);
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 d44061033f23..7950d28beb8c 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
@@ -10,11 +10,52 @@
 
 /*
  * The Additional Data Struct (ADS) has pointers for different buffers used by
- * the GuC. One single gem object contains the ADS struct itself (guc_ads), the
- * scheduling policies (guc_policies), a structure describing a collection of
- * register sets (guc_mmio_reg_state) and some extra pages for the GuC to save
- * its internal state for sleep.
+ * the GuC. One single gem object contains the ADS struct itself (guc_ads) and
+ * all the extra buffers indirectly linked via the ADS struct's entries.
+ *
+ * Layout of the ADS blob allocated for the GuC:
+ *
+ *      +---------------------------------------+ <== base
+ *      | guc_ads                               |
+ *      +---------------------------------------+
+ *      | guc_policies                          |
+ *      +---------------------------------------+
+ *      | guc_gt_system_info                    |
+ *      +---------------------------------------+
+ *      | guc_clients_info                      |
+ *      +---------------------------------------+
+ *      | guc_ct_pool_entry[size]               |
+ *      +---------------------------------------+
+ *      | padding                               |
+ *      +---------------------------------------+ <== 4K aligned
+ *      | private data                          |
+ *      +---------------------------------------+
+ *      | padding                               |
+ *      +---------------------------------------+ <== 4K aligned
  */
+struct __guc_ads_blob {
+	struct guc_ads ads;
+	struct guc_policies policies;
+	struct guc_gt_system_info system_info;
+	struct guc_clients_info clients_info;
+	struct guc_ct_pool_entry ct_pool[GUC_CT_POOL_SIZE];
+} __packed;
+
+static u32 guc_ads_private_data_size(struct intel_guc *guc)
+{
+	return PAGE_ALIGN(guc->fw.private_data_size);
+}
+
+static u32 guc_ads_private_data_offset(struct intel_guc *guc)
+{
+	return PAGE_ALIGN(sizeof(struct __guc_ads_blob));
+}
+
+static u32 guc_ads_blob_size(struct intel_guc *guc)
+{
+	return guc_ads_private_data_offset(guc) +
+	       guc_ads_private_data_size(guc);
+}
 
 static void guc_policy_init(struct guc_policy *policy)
 {
@@ -48,26 +89,37 @@ static void guc_ct_pool_entries_init(struct guc_ct_pool_entry *pool, u32 num)
 	memset(pool, 0, num * sizeof(*pool));
 }
 
+static void guc_mapping_table_init(struct intel_gt *gt,
+				   struct guc_gt_system_info *system_info)
+{
+	unsigned int i, j;
+	struct intel_engine_cs *engine;
+	enum intel_engine_id id;
+
+	/* Table must be set to invalid values for entries not used */
+	for (i = 0; i < GUC_MAX_ENGINE_CLASSES; ++i)
+		for (j = 0; j < GUC_MAX_INSTANCES_PER_CLASS; ++j)
+			system_info->mapping_table[i][j] =
+				GUC_MAX_INSTANCES_PER_CLASS;
+
+	for_each_engine(engine, gt, id) {
+		u8 guc_class = engine->class;
+
+		system_info->mapping_table[guc_class][engine->instance] =
+			engine->instance;
+	}
+}
+
 /*
  * The first 80 dwords of the register state context, containing the
  * execlists and ppgtt registers.
  */
 #define LR_HW_CONTEXT_SIZE	(80 * sizeof(u32))
 
-/* The ads obj includes the struct itself and buffers passed to GuC */
-struct __guc_ads_blob {
-	struct guc_ads ads;
-	struct guc_policies policies;
-	struct guc_mmio_reg_state reg_state;
-	struct guc_gt_system_info system_info;
-	struct guc_clients_info clients_info;
-	struct guc_ct_pool_entry ct_pool[GUC_CT_POOL_SIZE];
-	u8 reg_state_buffer[GUC_S3_SAVE_SPACE_PAGES * PAGE_SIZE];
-} __packed;
-
 static void __guc_ads_init(struct intel_guc *guc)
 {
 	struct intel_gt *gt = guc_to_gt(guc);
+	struct drm_i915_private *i915 = gt->i915;
 	struct __guc_ads_blob *blob = guc->ads_blob;
 	const u32 skipped_size = LRC_PPHWSP_SZ * PAGE_SIZE + LR_HW_CONTEXT_SIZE;
 	u32 base;
@@ -99,13 +151,25 @@ static void __guc_ads_init(struct intel_guc *guc)
 	}
 
 	/* System info */
-	blob->system_info.slice_enabled = hweight8(gt->info.sseu.slice_mask);
-	blob->system_info.rcs_enabled = 1;
-	blob->system_info.bcs_enabled = 1;
+	blob->system_info.engine_enabled_masks[RENDER_CLASS] = 1;
+	blob->system_info.engine_enabled_masks[COPY_ENGINE_CLASS] = 1;
+	blob->system_info.engine_enabled_masks[VIDEO_DECODE_CLASS] = VDBOX_MASK(gt);
+	blob->system_info.engine_enabled_masks[VIDEO_ENHANCEMENT_CLASS] = VEBOX_MASK(gt);
+
+	blob->system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_SLICE_ENABLED] =
+		hweight8(gt->info.sseu.slice_mask);
+	blob->system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_VDBOX_SFC_SUPPORT_MASK] =
+		gt->info.vdbox_sfc_access;
+
+	if (INTEL_GEN(i915) >= 12 && !IS_DGFX(i915)) {
+		u32 distdbreg = intel_uncore_read(gt->uncore,
+						  GEN12_DIST_DBS_POPULATED);
+		blob->system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_DOORBELL_COUNT_PER_SQIDI] =
+			((distdbreg >> GEN12_DOORBELLS_PER_SQIDI_SHIFT) &
+			 GEN12_DOORBELLS_PER_SQIDI) + 1;
+	}
 
-	blob->system_info.vdbox_enable_mask = VDBOX_MASK(gt);
-	blob->system_info.vebox_enable_mask = VEBOX_MASK(gt);
-	blob->system_info.vdbox_sfc_support_mask = gt->info.vdbox_sfc_access;
+	guc_mapping_table_init(guc_to_gt(guc), &blob->system_info);
 
 	base = intel_guc_ggtt_offset(guc, guc->ads_vma);
 
@@ -118,11 +182,12 @@ static void __guc_ads_init(struct intel_guc *guc)
 
 	/* ADS */
 	blob->ads.scheduler_policies = base + ptr_offset(blob, policies);
-	blob->ads.reg_state_buffer = base + ptr_offset(blob, reg_state_buffer);
-	blob->ads.reg_state_addr = base + ptr_offset(blob, reg_state);
 	blob->ads.gt_system_info = base + ptr_offset(blob, system_info);
 	blob->ads.clients_info = base + ptr_offset(blob, clients_info);
 
+	/* Private Data */
+	blob->ads.private_data = base + guc_ads_private_data_offset(guc);
+
 	i915_gem_object_flush_map(guc->ads_vma->obj);
 }
 
@@ -135,14 +200,15 @@ static void __guc_ads_init(struct intel_guc *guc)
  */
 int intel_guc_ads_create(struct intel_guc *guc)
 {
-	const u32 size = PAGE_ALIGN(sizeof(struct __guc_ads_blob));
+	u32 size;
 	int ret;
 
 	GEM_BUG_ON(guc->ads_vma);
 
+	size = guc_ads_blob_size(guc);
+
 	ret = intel_guc_allocate_and_map_vma(guc, size, &guc->ads_vma,
 					     (void **)&guc->ads_blob);
-
 	if (ret)
 		return ret;
 
@@ -156,6 +222,18 @@ void intel_guc_ads_destroy(struct intel_guc *guc)
 	i915_vma_unpin_and_release(&guc->ads_vma, I915_VMA_RELEASE_MAP);
 }
 
+static void guc_ads_private_data_reset(struct intel_guc *guc)
+{
+	u32 size;
+
+	size = guc_ads_private_data_size(guc);
+	if (!size)
+		return;
+
+	memset((void *)guc->ads_blob + guc_ads_private_data_offset(guc), 0,
+	       size);
+}
+
 /**
  * intel_guc_ads_reset() - prepares GuC Additional Data Struct for reuse
  * @guc: intel_guc struct
@@ -168,5 +246,8 @@ void intel_guc_ads_reset(struct intel_guc *guc)
 {
 	if (!guc->ads_vma)
 		return;
+
 	__guc_ads_init(guc);
+
+	guc_ads_private_data_reset(guc);
 }
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h b/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h
index a6b733c146c9..391053118869 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h
@@ -26,8 +26,8 @@
 #define GUC_VIDEO_ENGINE2		4
 #define GUC_MAX_ENGINES_NUM		(GUC_VIDEO_ENGINE2 + 1)
 
-#define GUC_MAX_ENGINE_CLASSES		5
-#define GUC_MAX_INSTANCES_PER_CLASS	16
+#define GUC_MAX_ENGINE_CLASSES		16
+#define GUC_MAX_INSTANCES_PER_CLASS	32
 
 #define GUC_DOORBELL_INVALID		256
 
@@ -62,12 +62,7 @@
 #define GUC_STAGE_DESC_ATTR_PCH		BIT(6)
 #define GUC_STAGE_DESC_ATTR_TERMINATED	BIT(7)
 
-/* New GuC control data */
-#define GUC_CTL_CTXINFO			0
-#define   GUC_CTL_CTXNUM_IN16_SHIFT	0
-#define   GUC_CTL_BASE_ADDR_SHIFT	12
-
-#define GUC_CTL_LOG_PARAMS		1
+#define GUC_CTL_LOG_PARAMS		0
 #define   GUC_LOG_VALID			(1 << 0)
 #define   GUC_LOG_NOTIFY_ON_HALF_FULL	(1 << 1)
 #define   GUC_LOG_ALLOC_IN_MEGABYTE	(1 << 3)
@@ -79,11 +74,11 @@
 #define   GUC_LOG_ISR_MASK	        (0x7 << GUC_LOG_ISR_SHIFT)
 #define   GUC_LOG_BUF_ADDR_SHIFT	12
 
-#define GUC_CTL_WA			2
-#define GUC_CTL_FEATURE			3
+#define GUC_CTL_WA			1
+#define GUC_CTL_FEATURE			2
 #define   GUC_CTL_DISABLE_SCHEDULER	(1 << 14)
 
-#define GUC_CTL_DEBUG			4
+#define GUC_CTL_DEBUG			3
 #define   GUC_LOG_VERBOSITY_SHIFT	0
 #define   GUC_LOG_VERBOSITY_LOW		(0 << GUC_LOG_VERBOSITY_SHIFT)
 #define   GUC_LOG_VERBOSITY_MED		(1 << GUC_LOG_VERBOSITY_SHIFT)
@@ -97,12 +92,37 @@
 #define   GUC_LOG_DISABLED		(1 << 6)
 #define   GUC_PROFILE_ENABLED		(1 << 7)
 
-#define GUC_CTL_ADS			5
+#define GUC_CTL_ADS			4
 #define   GUC_ADS_ADDR_SHIFT		1
 #define   GUC_ADS_ADDR_MASK		(0xFFFFF << GUC_ADS_ADDR_SHIFT)
 
 #define GUC_CTL_MAX_DWORDS		(SOFT_SCRATCH_COUNT - 2) /* [1..14] */
 
+/* Generic GT SysInfo data types */
+#define GUC_GENERIC_GT_SYSINFO_SLICE_ENABLED		0
+#define GUC_GENERIC_GT_SYSINFO_VDBOX_SFC_SUPPORT_MASK	1
+#define GUC_GENERIC_GT_SYSINFO_DOORBELL_COUNT_PER_SQIDI	2
+#define GUC_GENERIC_GT_SYSINFO_MAX			16
+
+/*
+ * The class goes in bits [0..2] of the GuC ID, the instance in bits [3..6].
+ * Bit 7 can be used for operations that apply to all engine classes&instances.
+ */
+#define GUC_ENGINE_CLASS_SHIFT		0
+#define GUC_ENGINE_CLASS_MASK		(0x7 << GUC_ENGINE_CLASS_SHIFT)
+#define GUC_ENGINE_INSTANCE_SHIFT	3
+#define GUC_ENGINE_INSTANCE_MASK	(0xf << GUC_ENGINE_INSTANCE_SHIFT)
+#define GUC_ENGINE_ALL_INSTANCES	BIT(7)
+
+#define MAKE_GUC_ID(class, instance) \
+	(((class) << GUC_ENGINE_CLASS_SHIFT) | \
+	 ((instance) << GUC_ENGINE_INSTANCE_SHIFT))
+
+#define GUC_ID_TO_ENGINE_CLASS(guc_id) \
+	(((guc_id) & GUC_ENGINE_CLASS_MASK) >> GUC_ENGINE_CLASS_SHIFT)
+#define GUC_ID_TO_ENGINE_INSTANCE(guc_id) \
+	(((guc_id) & GUC_ENGINE_INSTANCE_MASK) >> GUC_ENGINE_INSTANCE_SHIFT)
+
 /* Work item for submitting workloads into work queue of GuC. */
 struct guc_wq_item {
 	u32 header;
@@ -338,7 +358,6 @@ struct guc_policies {
 /* GuC MMIO reg state struct */
 
 
-#define GUC_REGSET_MAX_REGISTERS	64
 #define GUC_S3_SAVE_SPACE_PAGES		10
 
 struct guc_mmio_reg {
@@ -348,28 +367,24 @@ struct guc_mmio_reg {
 #define GUC_REGSET_MASKED		(1 << 0)
 } __packed;
 
-struct guc_mmio_regset {
-	struct guc_mmio_reg registers[GUC_REGSET_MAX_REGISTERS];
-	u32 values_valid;
-	u32 number_of_registers;
-} __packed;
-
 /* GuC register sets */
-struct guc_mmio_reg_state {
-	struct guc_mmio_regset engine_reg[GUC_MAX_ENGINE_CLASSES][GUC_MAX_INSTANCES_PER_CLASS];
-	u32 reserved[98];
+struct guc_mmio_reg_set {
+	u32 address;
+	union {
+		struct {
+			u32 count:16;
+			u32 reserved1:12;
+			u32 reserved2:4;
+		};
+		u32 count_u32;
+	};
 } __packed;
 
 /* HW info */
 struct guc_gt_system_info {
-	u32 slice_enabled;
-	u32 rcs_enabled;
-	u32 reserved0;
-	u32 bcs_enabled;
-	u32 vdbox_enable_mask;
-	u32 vdbox_sfc_support_mask;
-	u32 vebox_enable_mask;
-	u32 reserved[9];
+	u8 mapping_table[GUC_MAX_ENGINE_CLASSES][GUC_MAX_INSTANCES_PER_CLASS];
+	u32 engine_enabled_masks[GUC_MAX_ENGINE_CLASSES];
+	u32 generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_MAX];
 } __packed;
 
 /* Clients info */
@@ -390,15 +405,16 @@ struct guc_clients_info {
 
 /* GuC Additional Data Struct */
 struct guc_ads {
-	u32 reg_state_addr;
-	u32 reg_state_buffer;
+	struct guc_mmio_reg_set reg_state_list[GUC_MAX_ENGINE_CLASSES][GUC_MAX_INSTANCES_PER_CLASS];
+	u32 reserved0;
 	u32 scheduler_policies;
 	u32 gt_system_info;
 	u32 clients_info;
 	u32 control_data;
 	u32 golden_context_lrca[GUC_MAX_ENGINE_CLASSES];
 	u32 eng_state_size[GUC_MAX_ENGINE_CLASSES];
-	u32 reserved[16];
+	u32 private_data;
+	u32 reserved[15];
 } __packed;
 
 /* GuC logging structures */
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h b/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h
index 1949346e714e..b37fc2ffaef2 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h
@@ -118,6 +118,11 @@ struct guc_doorbell_info {
 #define   GEN8_DRB_VALID		  (1<<0)
 #define GEN8_DRBREGU(x)			_MMIO(0x1000 + (x) * 8 + 4)
 
+#define GEN12_DIST_DBS_POPULATED		_MMIO(0xd08)
+#define   GEN12_DOORBELLS_PER_SQIDI_SHIFT	16
+#define   GEN12_DOORBELLS_PER_SQIDI		(0xff)
+#define   GEN12_SQIDIS_DOORBELL_EXIST		(0xffff)
+
 #define DE_GUCRMR			_MMIO(0x44054)
 
 #define GUC_BCS_RCS_IER			_MMIO(0xC550)
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
index 80e8b6c3bc8c..ee4ac3922277 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
@@ -44,23 +44,19 @@ void intel_uc_fw_change_status(struct intel_uc_fw *uc_fw,
  * List of required GuC and HuC binaries per-platform.
  * Must be ordered based on platform + revid, from newer to older.
  *
- * TGL 35.2 is interface-compatible with 33.0 for previous Gens. The deltas
- * between 33.0 and 35.2 are only related to new additions to support new Gen12
- * features.
- *
  * Note that RKL uses the same firmware as TGL.
  */
 #define INTEL_UC_FIRMWARE_DEFS(fw_def, guc_def, huc_def) \
-	fw_def(ROCKETLAKE,  0, guc_def(tgl, 35, 2, 0), huc_def(tgl,  7, 5, 0)) \
-	fw_def(TIGERLAKE,   0, guc_def(tgl, 35, 2, 0), huc_def(tgl,  7, 5, 0)) \
-	fw_def(ELKHARTLAKE, 0, guc_def(ehl, 33, 0, 4), huc_def(ehl,  9, 0, 0)) \
-	fw_def(ICELAKE,     0, guc_def(icl, 33, 0, 0), huc_def(icl,  9, 0, 0)) \
-	fw_def(COMETLAKE,   5, guc_def(cml, 33, 0, 0), huc_def(cml,  4, 0, 0)) \
-	fw_def(COFFEELAKE,  0, guc_def(kbl, 33, 0, 0), huc_def(kbl,  4, 0, 0)) \
-	fw_def(GEMINILAKE,  0, guc_def(glk, 33, 0, 0), huc_def(glk,  4, 0, 0)) \
-	fw_def(KABYLAKE,    0, guc_def(kbl, 33, 0, 0), huc_def(kbl,  4, 0, 0)) \
-	fw_def(BROXTON,     0, guc_def(bxt, 33, 0, 0), huc_def(bxt,  2, 0, 0)) \
-	fw_def(SKYLAKE,     0, guc_def(skl, 33, 0, 0), huc_def(skl,  2, 0, 0))
+	fw_def(ROCKETLAKE,  0, guc_def(tgl, 49, 0, 1), huc_def(tgl,  7, 5, 0)) \
+	fw_def(TIGERLAKE,   0, guc_def(tgl, 49, 0, 1), huc_def(tgl,  7, 5, 0)) \
+	fw_def(ELKHARTLAKE, 0, guc_def(ehl, 49, 0, 1), huc_def(ehl,  9, 0, 0)) \
+	fw_def(ICELAKE,     0, guc_def(icl, 49, 0, 1), huc_def(icl,  9, 0, 0)) \
+	fw_def(COMETLAKE,   5, guc_def(cml, 49, 0, 1), huc_def(cml,  4, 0, 0)) \
+	fw_def(COFFEELAKE,  0, guc_def(kbl, 49, 0, 1), huc_def(kbl,  4, 0, 0)) \
+	fw_def(GEMINILAKE,  0, guc_def(glk, 49, 0, 1), huc_def(glk,  4, 0, 0)) \
+	fw_def(KABYLAKE,    0, guc_def(kbl, 49, 0, 1), huc_def(kbl,  4, 0, 0)) \
+	fw_def(BROXTON,     0, guc_def(bxt, 49, 0, 1), huc_def(bxt,  2, 0, 0)) \
+	fw_def(SKYLAKE,     0, guc_def(skl, 49, 0, 1), huc_def(skl,  2, 0, 0))
 
 #define __MAKE_UC_FW_PATH(prefix_, name_, major_, minor_, patch_) \
 	"i915/" \
@@ -371,6 +367,9 @@ int intel_uc_fw_fetch(struct intel_uc_fw *uc_fw)
 		}
 	}
 
+	if (uc_fw->type == INTEL_UC_FW_TYPE_GUC)
+		uc_fw->private_data_size = css->private_data_size;
+
 	obj = i915_gem_object_create_shmem_from_data(i915, fw->data, fw->size);
 	if (IS_ERR(obj)) {
 		err = PTR_ERR(obj);
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
index 23d3a423ac0f..99bb1fe1af66 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
@@ -88,6 +88,8 @@ struct intel_uc_fw {
 
 	u32 rsa_size;
 	u32 ucode_size;
+
+	u32 private_data_size;
 };
 
 #ifdef CONFIG_DRM_I915_DEBUG_GUC
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h
index 029214cdedd5..e41ffc7a7fbc 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h
@@ -69,7 +69,11 @@ struct uc_css_header {
 #define CSS_SW_VERSION_UC_MAJOR		(0xFF << 16)
 #define CSS_SW_VERSION_UC_MINOR		(0xFF << 8)
 #define CSS_SW_VERSION_UC_PATCH		(0xFF << 0)
-	u32 reserved[14];
+	u32 reserved0[13];
+	union {
+		u32 private_data_size; /* only applies to GuC */
+		u32 reserved1;
+	};
 	u32 header_info;
 } __packed;
 static_assert(sizeof(struct uc_css_header) == 128);
-- 
2.25.1

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

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

* [Intel-gfx] [PATCH 2/4] drm/i915/guc: Improved reporting when GuC fails to load
  2020-09-21 17:54 [Intel-gfx] [PATCH 0/4] drm/i915/guc: Update to GuC v49 John.C.Harrison
  2020-09-21 17:54 ` [Intel-gfx] [PATCH 1/4] drm/i915/guc: Update to use firmware v49.0.1 John.C.Harrison
@ 2020-09-21 17:54 ` John.C.Harrison
  2020-09-22  0:33   ` Daniele Ceraolo Spurio
  2020-09-21 17:54 ` [Intel-gfx] [PATCH 3/4] drm/i915/guc: Clear pointers on free John.C.Harrison
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 13+ messages in thread
From: John.C.Harrison @ 2020-09-21 17:54 UTC (permalink / raw)
  To: Intel-GFX

From: John Harrison <John.C.Harrison@Intel.com>

Rather than just saying 'GuC failed to load: -110', actually print out
the GuC status register and break it down into the individual fields.

Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
---
 drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c | 27 ++++++++++++++++++-----
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
index d4a87f4c9421..eac84baf34e6 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
@@ -74,8 +74,9 @@ static inline bool guc_ready(struct intel_uncore *uncore, u32 *status)
 		((val & GS_MIA_CORE_STATE) && (uk_val == GS_UKERNEL_LAPIC_DONE));
 }
 
-static int guc_wait_ucode(struct intel_uncore *uncore)
+static int guc_wait_ucode(struct intel_gt *gt)
 {
+	struct intel_uncore *uncore = gt->uncore;
 	u32 status;
 	int ret;
 
@@ -91,16 +92,32 @@ static int guc_wait_ucode(struct intel_uncore *uncore)
 	DRM_DEBUG_DRIVER("GuC status %#x\n", status);
 
 	if ((status & GS_BOOTROM_MASK) == GS_BOOTROM_RSA_FAILED) {
-		DRM_ERROR("GuC firmware signature verification failed\n");
+		drm_err(&gt->i915->drm, "GuC firmware signature verification failed\n");
 		ret = -ENOEXEC;
+		goto out;
 	}
 
 	if ((status & GS_UKERNEL_MASK) == GS_UKERNEL_EXCEPTION) {
-		DRM_ERROR("GuC firmware exception. EIP: %#x\n",
-			  intel_uncore_read(uncore, SOFT_SCRATCH(13)));
+		drm_err(&gt->i915->drm, "GuC firmware exception. EIP: %#x\n",
+			intel_uncore_read(uncore, SOFT_SCRATCH(13)));
 		ret = -ENXIO;
+		goto out;
 	}
 
+	if (ret) {
+		drm_err(&gt->i915->drm, "GuC load failed: status: Reset = %d, "
+			"BootROM = 0x%02X, UKernel = 0x%02X, "
+			"MIA = 0x%02X, Auth = 0x%02X\n",
+			(status >> GS_RESET_SHIFT) & 1,
+			(status & GS_BOOTROM_MASK) >> GS_BOOTROM_SHIFT,
+			(status & GS_UKERNEL_MASK) >> GS_UKERNEL_SHIFT,
+			(status & GS_MIA_MASK) >> GS_MIA_SHIFT,
+			(status & GS_AUTH_STATUS_MASK) >> GS_AUTH_STATUS_SHIFT);
+	}
+
+out:
+	if (ret)
+		drm_err(&gt->i915->drm, "GuC load failed: status = 0x%08X\n", status);
 	return ret;
 }
 
@@ -139,7 +156,7 @@ int intel_guc_fw_upload(struct intel_guc *guc)
 	if (ret)
 		goto out;
 
-	ret = guc_wait_ucode(uncore);
+	ret = guc_wait_ucode(gt);
 	if (ret)
 		goto out;
 
-- 
2.25.1

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

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

* [Intel-gfx] [PATCH 3/4] drm/i915/guc: Clear pointers on free
  2020-09-21 17:54 [Intel-gfx] [PATCH 0/4] drm/i915/guc: Update to GuC v49 John.C.Harrison
  2020-09-21 17:54 ` [Intel-gfx] [PATCH 1/4] drm/i915/guc: Update to use firmware v49.0.1 John.C.Harrison
  2020-09-21 17:54 ` [Intel-gfx] [PATCH 2/4] drm/i915/guc: Improved reporting when GuC fails to load John.C.Harrison
@ 2020-09-21 17:54 ` John.C.Harrison
  2020-09-21 17:54 ` [Intel-gfx] [PATCH 4/4] drm/i915/uc: turn on GuC/HuC auto mode by default John.C.Harrison
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: John.C.Harrison @ 2020-09-21 17:54 UTC (permalink / raw)
  To: Intel-GFX

From: John Harrison <John.C.Harrison@Intel.com>

Was hitting null pointers and similar issues when running various
module load/unload and inject failure type tests. So clear those
pointers down when the objects have been de-allocated.

Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
---
 drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c | 1 +
 drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c  | 1 +
 2 files changed, 2 insertions(+)

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 7950d28beb8c..5212ff844292 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
@@ -220,6 +220,7 @@ int intel_guc_ads_create(struct intel_guc *guc)
 void intel_guc_ads_destroy(struct intel_guc *guc)
 {
 	i915_vma_unpin_and_release(&guc->ads_vma, I915_VMA_RELEASE_MAP);
+	guc->ads_blob = NULL;
 }
 
 static void guc_ads_private_data_reset(struct intel_guc *guc)
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
index 11742fca0e9e..fa9e048cc65f 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
@@ -210,6 +210,7 @@ void intel_guc_ct_fini(struct intel_guc_ct *ct)
 	GEM_BUG_ON(ct->enabled);
 
 	i915_vma_unpin_and_release(&ct->vma, I915_VMA_RELEASE_MAP);
+	memset(ct, 0, sizeof(*ct));
 }
 
 /**
-- 
2.25.1

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

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

* [Intel-gfx] [PATCH 4/4] drm/i915/uc: turn on GuC/HuC auto mode by default
  2020-09-21 17:54 [Intel-gfx] [PATCH 0/4] drm/i915/guc: Update to GuC v49 John.C.Harrison
                   ` (2 preceding siblings ...)
  2020-09-21 17:54 ` [Intel-gfx] [PATCH 3/4] drm/i915/guc: Clear pointers on free John.C.Harrison
@ 2020-09-21 17:54 ` John.C.Harrison
  2020-09-21 18:24 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915/guc: Update to GuC v49 Patchwork
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: John.C.Harrison @ 2020-09-21 17:54 UTC (permalink / raw)
  To: Intel-GFX

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

This will enable HuC loading for Gen11+ by default if the binaries
are available on the system. GuC submission still requires explicit
enabling by the user.

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 drivers/gpu/drm/i915/i915_params.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
index 330c03e2b4f7..7bdbd8f6ed30 100644
--- a/drivers/gpu/drm/i915/i915_params.h
+++ b/drivers/gpu/drm/i915/i915_params.h
@@ -58,7 +58,7 @@ struct drm_printer;
 	param(int, disable_power_well, -1, 0400) \
 	param(int, enable_ips, 1, 0600) \
 	param(int, invert_brightness, 0, 0600) \
-	param(int, enable_guc, 0, 0400) \
+	param(int, enable_guc, -1, 0400) \
 	param(int, guc_log_level, -1, 0400) \
 	param(char *, guc_firmware_path, NULL, 0400) \
 	param(char *, huc_firmware_path, NULL, 0400) \
-- 
2.25.1

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

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

* [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915/guc: Update to GuC v49
  2020-09-21 17:54 [Intel-gfx] [PATCH 0/4] drm/i915/guc: Update to GuC v49 John.C.Harrison
                   ` (3 preceding siblings ...)
  2020-09-21 17:54 ` [Intel-gfx] [PATCH 4/4] drm/i915/uc: turn on GuC/HuC auto mode by default John.C.Harrison
@ 2020-09-21 18:24 ` Patchwork
  2020-09-21 18:49 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
  2020-09-21 19:59 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
  6 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2020-09-21 18:24 UTC (permalink / raw)
  To: john.c.harrison; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/guc: Update to GuC v49
URL   : https://patchwork.freedesktop.org/series/81906/
State : warning

== Summary ==

$ dim checkpatch origin/drm-tip
a2bf36c707f0 drm/i915/guc: Update to use firmware v49.0.1
-:231: WARNING:LONG_LINE: line length of 103 exceeds 100 columns
#231: FILE: drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c:167:
+		blob->system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_DOORBELL_COUNT_PER_SQIDI] =

total: 0 errors, 1 warnings, 0 checks, 447 lines checked
087e6d613cd2 drm/i915/guc: Improved reporting when GuC fails to load
d89334936a2a drm/i915/guc: Clear pointers on free
ea46ad89cb74 drm/i915/uc: turn on GuC/HuC auto mode by default


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

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

* [Intel-gfx] ✓ Fi.CI.BAT: success for drm/i915/guc: Update to GuC v49
  2020-09-21 17:54 [Intel-gfx] [PATCH 0/4] drm/i915/guc: Update to GuC v49 John.C.Harrison
                   ` (4 preceding siblings ...)
  2020-09-21 18:24 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915/guc: Update to GuC v49 Patchwork
@ 2020-09-21 18:49 ` Patchwork
  2020-09-21 19:59 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
  6 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2020-09-21 18:49 UTC (permalink / raw)
  To: john.c.harrison; +Cc: intel-gfx


[-- Attachment #1.1: Type: text/plain, Size: 11523 bytes --]

== Series Details ==

Series: drm/i915/guc: Update to GuC v49
URL   : https://patchwork.freedesktop.org/series/81906/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_9027 -> Patchwork_18542
====================================================

Summary
-------

  **WARNING**

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

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

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

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

### IGT changes ###

#### Warnings ####

  * igt@gem_huc_copy@huc-copy:
    - fi-cml-u2:          [SKIP][1] ([i915#2190]) -> [SKIP][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-cml-u2/igt@gem_huc_copy@huc-copy.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-cml-u2/igt@gem_huc_copy@huc-copy.html
    - fi-cml-s:           [SKIP][3] ([i915#2190]) -> [SKIP][4]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-cml-s/igt@gem_huc_copy@huc-copy.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-cml-s/igt@gem_huc_copy@huc-copy.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@kms_busy@basic@flip:
    - fi-kbl-x1275:       [PASS][5] -> [DMESG-WARN][6] ([i915#62] / [i915#92] / [i915#95])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-kbl-x1275/igt@kms_busy@basic@flip.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-kbl-x1275/igt@kms_busy@basic@flip.html

  * igt@vgem_basic@unload:
    - fi-kbl-x1275:       [PASS][7] -> [DMESG-WARN][8] ([i915#62] / [i915#92])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-kbl-x1275/igt@vgem_basic@unload.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-kbl-x1275/igt@vgem_basic@unload.html

  
#### Possible fixes ####

  * {igt@core_hotunplug@unbind-rebind}:
    - fi-kbl-x1275:       [DMESG-WARN][9] ([i915#62] / [i915#92] / [i915#95]) -> [PASS][10]
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-kbl-x1275/igt@core_hotunplug@unbind-rebind.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-kbl-x1275/igt@core_hotunplug@unbind-rebind.html

  * igt@gem_huc_copy@huc-copy:
    - {fi-ehl-1}:         [SKIP][11] ([i915#2190]) -> [PASS][12]
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-ehl-1/igt@gem_huc_copy@huc-copy.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-ehl-1/igt@gem_huc_copy@huc-copy.html
    - fi-icl-y:           [SKIP][13] ([i915#2190]) -> [PASS][14]
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-icl-y/igt@gem_huc_copy@huc-copy.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-icl-y/igt@gem_huc_copy@huc-copy.html
    - fi-icl-u2:          [SKIP][15] ([i915#2190]) -> [PASS][16]
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-icl-u2/igt@gem_huc_copy@huc-copy.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-icl-u2/igt@gem_huc_copy@huc-copy.html

  * igt@i915_module_load@reload:
    - fi-byt-j1900:       [DMESG-WARN][17] ([i915#1982]) -> [PASS][18]
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-byt-j1900/igt@i915_module_load@reload.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-byt-j1900/igt@i915_module_load@reload.html

  * igt@i915_pm_rpm@basic-pci-d3-state:
    - fi-bsw-kefka:       [DMESG-WARN][19] ([i915#1982]) -> [PASS][20]
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-bsw-kefka/igt@i915_pm_rpm@basic-pci-d3-state.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-bsw-kefka/igt@i915_pm_rpm@basic-pci-d3-state.html

  * igt@kms_cursor_legacy@basic-flip-after-cursor-atomic:
    - fi-icl-u2:          [DMESG-WARN][21] ([i915#1982]) -> [PASS][22]
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-icl-u2/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-icl-u2/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html

  * igt@vgem_basic@unload:
    - fi-skl-guc:         [DMESG-WARN][23] ([i915#2203]) -> [PASS][24]
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-skl-guc/igt@vgem_basic@unload.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-skl-guc/igt@vgem_basic@unload.html

  
#### Warnings ####

  * igt@gem_huc_copy@huc-copy:
    - fi-skl-6600u:       [SKIP][25] ([fdo#109271] / [i915#2190]) -> [SKIP][26] ([fdo#109271])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-skl-6600u/igt@gem_huc_copy@huc-copy.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-skl-6600u/igt@gem_huc_copy@huc-copy.html
    - fi-skl-6700k2:      [SKIP][27] ([fdo#109271] / [i915#2190]) -> [SKIP][28] ([fdo#109271])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-skl-6700k2/igt@gem_huc_copy@huc-copy.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-skl-6700k2/igt@gem_huc_copy@huc-copy.html
    - fi-kbl-soraka:      [SKIP][29] ([fdo#109271] / [i915#2190]) -> [SKIP][30] ([fdo#109271])
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-kbl-soraka/igt@gem_huc_copy@huc-copy.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-kbl-soraka/igt@gem_huc_copy@huc-copy.html
    - fi-skl-lmem:        [SKIP][31] ([fdo#109271] / [i915#2190]) -> [SKIP][32] ([fdo#109271])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-skl-lmem/igt@gem_huc_copy@huc-copy.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-skl-lmem/igt@gem_huc_copy@huc-copy.html
    - fi-glk-dsi:         [SKIP][33] ([fdo#109271] / [i915#2190]) -> [SKIP][34] ([fdo#109271])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-glk-dsi/igt@gem_huc_copy@huc-copy.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-glk-dsi/igt@gem_huc_copy@huc-copy.html
    - fi-kbl-x1275:       [SKIP][35] ([fdo#109271] / [i915#2190]) -> [SKIP][36] ([fdo#109271])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-kbl-x1275/igt@gem_huc_copy@huc-copy.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-kbl-x1275/igt@gem_huc_copy@huc-copy.html
    - fi-kbl-7500u:       [SKIP][37] ([fdo#109271] / [i915#2190]) -> [SKIP][38] ([fdo#109271])
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-kbl-7500u/igt@gem_huc_copy@huc-copy.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-kbl-7500u/igt@gem_huc_copy@huc-copy.html
    - fi-kbl-r:           [SKIP][39] ([fdo#109271] / [i915#2190]) -> [SKIP][40] ([fdo#109271])
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-kbl-r/igt@gem_huc_copy@huc-copy.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-kbl-r/igt@gem_huc_copy@huc-copy.html
    - fi-cfl-8109u:       [SKIP][41] ([fdo#109271] / [i915#2190]) -> [SKIP][42] ([fdo#109271])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-cfl-8109u/igt@gem_huc_copy@huc-copy.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-cfl-8109u/igt@gem_huc_copy@huc-copy.html
    - fi-bxt-dsi:         [SKIP][43] ([fdo#109271] / [i915#1635] / [i915#2190]) -> [SKIP][44] ([fdo#109271] / [i915#1635])
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-bxt-dsi/igt@gem_huc_copy@huc-copy.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-bxt-dsi/igt@gem_huc_copy@huc-copy.html
    - fi-cfl-8700k:       [SKIP][45] ([fdo#109271] / [i915#2190]) -> [SKIP][46] ([fdo#109271])
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-cfl-8700k/igt@gem_huc_copy@huc-copy.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-cfl-8700k/igt@gem_huc_copy@huc-copy.html

  * igt@i915_pm_rpm@module-reload:
    - fi-kbl-x1275:       [DMESG-FAIL][47] ([i915#62] / [i915#95]) -> [DMESG-FAIL][48] ([i915#62])
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-kbl-x1275/igt@i915_pm_rpm@module-reload.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-kbl-x1275/igt@i915_pm_rpm@module-reload.html
    - fi-kbl-guc:         [SKIP][49] ([fdo#109271]) -> [DMESG-WARN][50] ([i915#2203])
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-kbl-guc/igt@i915_pm_rpm@module-reload.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-kbl-guc/igt@i915_pm_rpm@module-reload.html

  * igt@kms_flip@basic-flip-vs-modeset@a-dp1:
    - fi-kbl-x1275:       [DMESG-WARN][51] ([i915#62] / [i915#92] / [i915#95]) -> [DMESG-WARN][52] ([i915#62] / [i915#92]) +4 similar issues
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-kbl-x1275/igt@kms_flip@basic-flip-vs-modeset@a-dp1.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-kbl-x1275/igt@kms_flip@basic-flip-vs-modeset@a-dp1.html

  * igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-c:
    - fi-kbl-x1275:       [DMESG-WARN][53] ([i915#62] / [i915#92]) -> [DMESG-WARN][54] ([i915#62] / [i915#92] / [i915#95]) +2 similar issues
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/fi-kbl-x1275/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-c.html
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/fi-kbl-x1275/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-c.html

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

  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [i915#1635]: https://gitlab.freedesktop.org/drm/intel/issues/1635
  [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
  [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
  [i915#2203]: https://gitlab.freedesktop.org/drm/intel/issues/2203
  [i915#62]: https://gitlab.freedesktop.org/drm/intel/issues/62
  [i915#92]: https://gitlab.freedesktop.org/drm/intel/issues/92
  [i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95


Participating hosts (44 -> 38)
------------------------------

  Missing    (6): fi-ilk-m540 fi-tgl-dsi fi-byt-squawks fi-bsw-cyan fi-byt-clapper fi-bdw-samus 


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

  * Linux: CI_DRM_9027 -> Patchwork_18542

  CI-20190529: 20190529
  CI_DRM_9027: a3a0834d3d2112e8ca11332fdef4e9334868a834 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5787: 0ec962017c8131de14e0cb038f7f76b1f17ed637 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_18542: ea46ad89cb74994d310856c0deeb26bc220f8a0d @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

ea46ad89cb74 drm/i915/uc: turn on GuC/HuC auto mode by default
d89334936a2a drm/i915/guc: Clear pointers on free
087e6d613cd2 drm/i915/guc: Improved reporting when GuC fails to load
a2bf36c707f0 drm/i915/guc: Update to use firmware v49.0.1

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/index.html

[-- Attachment #1.2: Type: text/html, Size: 16511 bytes --]

[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

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

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

* [Intel-gfx] ✗ Fi.CI.IGT: failure for drm/i915/guc: Update to GuC v49
  2020-09-21 17:54 [Intel-gfx] [PATCH 0/4] drm/i915/guc: Update to GuC v49 John.C.Harrison
                   ` (5 preceding siblings ...)
  2020-09-21 18:49 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
@ 2020-09-21 19:59 ` Patchwork
  6 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2020-09-21 19:59 UTC (permalink / raw)
  To: john.c.harrison; +Cc: intel-gfx


[-- Attachment #1.1: Type: text/plain, Size: 19016 bytes --]

== Series Details ==

Series: drm/i915/guc: Update to GuC v49
URL   : https://patchwork.freedesktop.org/series/81906/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_9027_full -> Patchwork_18542_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_18542_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_18542_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_18542_full:

### IGT changes ###

#### Warnings ####

  * igt@gem_ctx_shared@disjoint-timelines:
    - shard-hsw:          [SKIP][1] ([fdo#109271]) -> [FAIL][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-hsw4/igt@gem_ctx_shared@disjoint-timelines.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-hsw4/igt@gem_ctx_shared@disjoint-timelines.html
    - shard-snb:          [SKIP][3] ([fdo#109271]) -> [FAIL][4]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-snb1/igt@gem_ctx_shared@disjoint-timelines.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-snb4/igt@gem_ctx_shared@disjoint-timelines.html

  
#### Suppressed ####

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

  * {igt@core_hotunplug@hotrebind-lateclose}:
    - shard-iclb:         [FAIL][5] ([i915#2476]) -> [DMESG-FAIL][6]
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-iclb2/igt@core_hotunplug@hotrebind-lateclose.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-iclb4/igt@core_hotunplug@hotrebind-lateclose.html

  

### Piglit changes ###

#### Possible regressions ####

  * spec@glsl-1.50@execution@built-in-functions@gs-clamp-int-int-int (NEW):
    - pig-snb-2600:       NOTRUN -> [FAIL][7]
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/pig-snb-2600/spec@glsl-1.50@execution@built-in-functions@gs-clamp-int-int-int.html

  
New tests
---------

  New tests have been introduced between CI_DRM_9027_full and Patchwork_18542_full:

### New Piglit tests (1) ###

  * spec@glsl-1.50@execution@built-in-functions@gs-clamp-int-int-int:
    - Statuses : 1 fail(s)
    - Exec time: [0.19] s

  

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_ctx_param@vm:
    - shard-skl:          [PASS][8] -> [DMESG-WARN][9] ([i915#1982]) +6 similar issues
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-skl6/igt@gem_ctx_param@vm.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-skl4/igt@gem_ctx_param@vm.html

  * igt@gem_ctx_persistence@legacy-engines-mixed-process@bsd:
    - shard-apl:          [PASS][10] -> [FAIL][11] ([i915#1635] / [i915#2374])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-apl8/igt@gem_ctx_persistence@legacy-engines-mixed-process@bsd.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-apl6/igt@gem_ctx_persistence@legacy-engines-mixed-process@bsd.html

  * igt@gem_exec_reloc@basic-many-active@bcs0:
    - shard-glk:          [PASS][12] -> [FAIL][13] ([i915#2389])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-glk9/igt@gem_exec_reloc@basic-many-active@bcs0.html
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-glk3/igt@gem_exec_reloc@basic-many-active@bcs0.html

  * igt@gem_exec_suspend@basic-s3:
    - shard-kbl:          [PASS][14] -> [DMESG-WARN][15] ([i915#180]) +4 similar issues
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-kbl7/igt@gem_exec_suspend@basic-s3.html
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-kbl6/igt@gem_exec_suspend@basic-s3.html

  * igt@i915_pm_rc6_residency@rc6-fence:
    - shard-hsw:          [PASS][16] -> [WARN][17] ([i915#1519])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-hsw2/igt@i915_pm_rc6_residency@rc6-fence.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-hsw1/igt@i915_pm_rc6_residency@rc6-fence.html

  * igt@i915_selftest@mock@contexts:
    - shard-apl:          [PASS][18] -> [INCOMPLETE][19] ([i915#1635] / [i915#2278])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-apl7/igt@i915_selftest@mock@contexts.html
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-apl1/igt@i915_selftest@mock@contexts.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
    - shard-apl:          [PASS][20] -> [DMESG-WARN][21] ([i915#1635] / [i915#1982])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-apl2/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-apl3/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html

  * igt@kms_cursor_legacy@cursor-vs-flip-toggle:
    - shard-hsw:          [PASS][22] -> [FAIL][23] ([i915#2370])
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-hsw6/igt@kms_cursor_legacy@cursor-vs-flip-toggle.html
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-hsw6/igt@kms_cursor_legacy@cursor-vs-flip-toggle.html

  * igt@kms_flip@2x-flip-vs-suspend-interruptible@bc-vga1-hdmi-a1:
    - shard-hsw:          [PASS][24] -> [INCOMPLETE][25] ([i915#2055])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-hsw6/igt@kms_flip@2x-flip-vs-suspend-interruptible@bc-vga1-hdmi-a1.html
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-hsw2/igt@kms_flip@2x-flip-vs-suspend-interruptible@bc-vga1-hdmi-a1.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1:
    - shard-skl:          [PASS][26] -> [FAIL][27] ([i915#79])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-skl7/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-skl3/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html

  * igt@kms_frontbuffer_tracking@fbc-rgb565-draw-pwrite:
    - shard-kbl:          [PASS][28] -> [DMESG-WARN][29] ([i915#1982])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-kbl4/igt@kms_frontbuffer_tracking@fbc-rgb565-draw-pwrite.html
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-kbl3/igt@kms_frontbuffer_tracking@fbc-rgb565-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-rte:
    - shard-tglb:         [PASS][30] -> [DMESG-WARN][31] ([i915#1982]) +2 similar issues
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-tglb7/igt@kms_frontbuffer_tracking@fbcpsr-1p-rte.html
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-tglb8/igt@kms_frontbuffer_tracking@fbcpsr-1p-rte.html

  * igt@kms_hdr@bpc-switch:
    - shard-skl:          [PASS][32] -> [FAIL][33] ([i915#1188])
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-skl10/igt@kms_hdr@bpc-switch.html
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-skl1/igt@kms_hdr@bpc-switch.html

  * igt@kms_plane_alpha_blend@pipe-c-constant-alpha-min:
    - shard-skl:          [PASS][34] -> [FAIL][35] ([fdo#108145] / [i915#265])
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-skl5/igt@kms_plane_alpha_blend@pipe-c-constant-alpha-min.html
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-skl10/igt@kms_plane_alpha_blend@pipe-c-constant-alpha-min.html

  * igt@kms_psr@psr2_no_drrs:
    - shard-iclb:         [PASS][36] -> [SKIP][37] ([fdo#109441]) +1 similar issue
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-iclb2/igt@kms_psr@psr2_no_drrs.html
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-iclb3/igt@kms_psr@psr2_no_drrs.html

  * igt@perf@polling-small-buf:
    - shard-iclb:         [PASS][38] -> [FAIL][39] ([i915#1722])
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-iclb4/igt@perf@polling-small-buf.html
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-iclb2/igt@perf@polling-small-buf.html

  
#### Possible fixes ####

  * igt@gem_ctx_isolation@preservation-s3@vcs0:
    - shard-kbl:          [DMESG-WARN][40] ([i915#180]) -> [PASS][41] +3 similar issues
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-kbl4/igt@gem_ctx_isolation@preservation-s3@vcs0.html
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-kbl7/igt@gem_ctx_isolation@preservation-s3@vcs0.html

  * igt@gem_ctx_isolation@preservation@rcs0:
    - shard-skl:          [INCOMPLETE][42] -> [PASS][43]
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-skl3/igt@gem_ctx_isolation@preservation@rcs0.html
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-skl9/igt@gem_ctx_isolation@preservation@rcs0.html

  * igt@gem_exec_whisper@basic-queues-priority:
    - shard-glk:          [DMESG-WARN][44] ([i915#118] / [i915#95]) -> [PASS][45]
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-glk8/igt@gem_exec_whisper@basic-queues-priority.html
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-glk1/igt@gem_exec_whisper@basic-queues-priority.html

  * igt@gem_huc_copy@huc-copy:
    - shard-iclb:         [SKIP][46] ([i915#2190]) -> [PASS][47]
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-iclb1/igt@gem_huc_copy@huc-copy.html
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-iclb6/igt@gem_huc_copy@huc-copy.html

  * igt@i915_pm_dc@dc6-psr:
    - shard-iclb:         [FAIL][48] ([i915#1899]) -> [PASS][49]
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-iclb4/igt@i915_pm_dc@dc6-psr.html
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-iclb2/igt@i915_pm_dc@dc6-psr.html

  * igt@i915_suspend@fence-restore-tiled2untiled:
    - shard-skl:          [INCOMPLETE][50] ([i915#198]) -> [PASS][51]
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-skl9/igt@i915_suspend@fence-restore-tiled2untiled.html
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-skl5/igt@i915_suspend@fence-restore-tiled2untiled.html

  * igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy:
    - shard-glk:          [FAIL][52] ([i915#72]) -> [PASS][53]
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-glk7/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy.html
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-glk1/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy.html

  * igt@kms_flip@2x-flip-vs-blocking-wf-vblank@ab-vga1-hdmi-a1:
    - shard-hsw:          [DMESG-WARN][54] ([i915#1982]) -> [PASS][55]
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-hsw6/igt@kms_flip@2x-flip-vs-blocking-wf-vblank@ab-vga1-hdmi-a1.html
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-hsw2/igt@kms_flip@2x-flip-vs-blocking-wf-vblank@ab-vga1-hdmi-a1.html

  * igt@kms_flip@flip-vs-suspend-interruptible@c-hdmi-a1:
    - shard-hsw:          [INCOMPLETE][56] ([i915#2055]) -> [PASS][57]
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-hsw1/igt@kms_flip@flip-vs-suspend-interruptible@c-hdmi-a1.html
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-hsw7/igt@kms_flip@flip-vs-suspend-interruptible@c-hdmi-a1.html

  * igt@kms_flip@plain-flip-fb-recreate-interruptible@c-edp1:
    - shard-skl:          [FAIL][58] ([i915#2122]) -> [PASS][59] +2 similar issues
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-skl1/igt@kms_flip@plain-flip-fb-recreate-interruptible@c-edp1.html
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-skl2/igt@kms_flip@plain-flip-fb-recreate-interruptible@c-edp1.html

  * igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-render:
    - shard-tglb:         [DMESG-WARN][60] ([i915#1982]) -> [PASS][61] +2 similar issues
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-tglb3/igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-render.html
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-tglb6/igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-render.html

  * igt@kms_plane@plane-panning-bottom-right-pipe-b-planes:
    - shard-skl:          [DMESG-WARN][62] ([i915#1982]) -> [PASS][63] +2 similar issues
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-skl5/igt@kms_plane@plane-panning-bottom-right-pipe-b-planes.html
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-skl7/igt@kms_plane@plane-panning-bottom-right-pipe-b-planes.html

  * igt@kms_plane_alpha_blend@pipe-c-coverage-7efc:
    - shard-skl:          [DMESG-FAIL][64] ([fdo#108145] / [i915#1982]) -> [PASS][65]
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-skl2/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-skl1/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html

  * igt@kms_psr2_su@frontbuffer:
    - shard-iclb:         [SKIP][66] ([fdo#109642] / [fdo#111068]) -> [PASS][67] +1 similar issue
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-iclb4/igt@kms_psr2_su@frontbuffer.html
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-iclb2/igt@kms_psr2_su@frontbuffer.html

  * igt@kms_psr@psr2_sprite_plane_move:
    - shard-iclb:         [SKIP][68] ([fdo#109441]) -> [PASS][69] +2 similar issues
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-iclb4/igt@kms_psr@psr2_sprite_plane_move.html
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-iclb2/igt@kms_psr@psr2_sprite_plane_move.html

  
#### Warnings ####

  * igt@gem_huc_copy@huc-copy:
    - shard-apl:          [SKIP][70] ([fdo#109271] / [i915#1635] / [i915#2190]) -> [SKIP][71] ([fdo#109271] / [i915#1635])
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-apl1/igt@gem_huc_copy@huc-copy.html
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-apl1/igt@gem_huc_copy@huc-copy.html
    - shard-glk:          [SKIP][72] ([fdo#109271] / [i915#2190]) -> [SKIP][73] ([fdo#109271])
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-glk6/igt@gem_huc_copy@huc-copy.html
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-glk5/igt@gem_huc_copy@huc-copy.html
    - shard-kbl:          [SKIP][74] ([fdo#109271] / [i915#2190]) -> [SKIP][75] ([fdo#109271])
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-kbl1/igt@gem_huc_copy@huc-copy.html
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-kbl2/igt@gem_huc_copy@huc-copy.html
    - shard-skl:          [SKIP][76] ([fdo#109271] / [i915#2190]) -> [SKIP][77] ([fdo#109271])
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-skl1/igt@gem_huc_copy@huc-copy.html
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-skl9/igt@gem_huc_copy@huc-copy.html

  * igt@i915_pm_dc@dc3co-vpb-simulation:
    - shard-iclb:         [SKIP][78] ([i915#588]) -> [SKIP][79] ([i915#658])
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-iclb2/igt@i915_pm_dc@dc3co-vpb-simulation.html
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-iclb4/igt@i915_pm_dc@dc3co-vpb-simulation.html

  * igt@kms_flip@plain-flip-fb-recreate@a-edp1:
    - shard-skl:          [DMESG-WARN][80] ([i915#1982]) -> [DMESG-FAIL][81] ([i915#1982])
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9027/shard-skl7/igt@kms_flip@plain-flip-fb-recreate@a-edp1.html
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18542/shard-skl3/igt@kms_flip@plain-flip-fb-recreate@a-edp1.html

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

  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [fdo#109642]: https://bugs.freedesktop.org/show_bug.cgi?id=109642
  [fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068
  [i915#118]: https://gitlab.freedesktop.org/drm/intel/issues/118
  [i915#1188]: https://gitlab.freedesktop.org/drm/intel/issues/1188
  [i915#1519]: https://gitlab.freedesktop.org/drm/intel/issues/1519
  [i915#1635]: https://gitlab.freedesktop.org/drm/intel/issues/1635
  [i915#1722]: https://gitlab.freedesktop.org/drm/intel/issues/1722
  [i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180
  [i915#1899]: https://gitlab.freedesktop.org/drm/intel/issues/1899
  [i915#198]: https://gitlab.freedesktop.org/drm/intel/issues/198
  [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
  [i915#2055]: https://gitlab.freedesktop.org/drm/intel/issues/2055
  [i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122
  [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
  [i915#2278]: https://gitlab.freedesktop.org/drm/intel/issues/2278
  [i915#2370]: https://gitlab.freedesktop.org/drm/intel/issues/2370
  [i915#2374]: https://gitlab.freedesktop.org/drm/intel/issues/2374
  [i915#2389]: https://gitlab.freedesktop.org/drm/intel/issues/2389
  [i915#2476]: https://gitlab.freedesktop.org/drm/intel/issues/2476
  [i915#265]: https://gitlab.freedesktop.org/drm/intel/issues/265
  [i915#588]: https://gitlab.freedesktop.org/drm/intel/issues/588
  [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
  [i915#72]: https://gitlab.freedesktop.org/drm/intel/issues/72
  [i915#79]: https://gitlab.freedesktop.org/drm/intel/issues/79
  [i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95


Participating hosts (11 -> 12)
------------------------------

  Additional (1): pig-snb-2600 


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

  * Linux: CI_DRM_9027 -> Patchwork_18542

  CI-20190529: 20190529
  CI_DRM_9027: a3a0834d3d2112e8ca11332fdef4e9334868a834 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5787: 0ec962017c8131de14e0cb038f7f76b1f17ed637 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_18542: ea46ad89cb74994d310856c0deeb26bc220f8a0d @ 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_18542/index.html

[-- Attachment #1.2: Type: text/html, Size: 22634 bytes --]

[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

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

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

* Re: [Intel-gfx] [PATCH 1/4] drm/i915/guc: Update to use firmware v49.0.1
  2020-09-21 17:54 ` [Intel-gfx] [PATCH 1/4] drm/i915/guc: Update to use firmware v49.0.1 John.C.Harrison
@ 2020-09-22  0:24   ` Daniele Ceraolo Spurio
  2020-09-22  0:38     ` John Harrison
  0 siblings, 1 reply; 13+ messages in thread
From: Daniele Ceraolo Spurio @ 2020-09-22  0:24 UTC (permalink / raw)
  To: John.C.Harrison, Intel-GFX; +Cc: Oscar Mateo, Michal Winiarski, Michel Thierry



On 9/21/2020 10:54 AM, John.C.Harrison@Intel.com wrote:
> From: John Harrison <John.C.Harrison@Intel.com>
>
> The latest GuC firmware includes a number of interface changes that
> require driver updates to match.
>
> * Starting from Gen11, the ID to be provided to GuC needs to contain
>    the engine class in bits [0..2] and the instance in bits [3..6].
>
>    NOTE: this patch breaks pointer dereferences in some existing GuC
>    functions that use the guc_id to dereference arrays but these functions
>    are not used for now as we have GuC submission disabled and we will
>    update these functions in follow up patch which requires new IDs.
>
> * The new GuC requires the additional data structure (ADS) and associated
>    'private_data' pointer to be setup. This is basically a scratch area
>    of memory that the GuC owns. The size is read from the CSS header.
>
> * There is now a physical to logical engine mapping table in the ADS
>    which needs to be configured in order for the firmware to load. For
>    now, the table is initialised with a 1 to 1 mapping.
>
> * GUC_CTL_CTXINFO has been removed from the initialization params.
>
> * reg_state_buffer is maintained internally by the GuC as part of
>    the private data.
>
> * The ADS layout has changed significantly. This patch updates the
>    shared structure and also adds better documentation of the layout.
>
> * While i915 does not use GuC doorbells, the firmware now requires
>    that some initialisation is done.
>
> * The number of engine classes and instances supported in the ADS has
>    been increased.
>
> Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
> Signed-off-by: Matthew Brost <matthew.brost@intel.com>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Signed-off-by: Oscar Mateo <oscar.mateo@intel.com>
> Signed-off-by: Michel Thierry <michel.thierry@intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Michal Winiarski <michal.winiarski@intel.com>
> Cc: Tomasz Lis <tomasz.lis@intel.com>
> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> ---
>   drivers/gpu/drm/i915/gt/intel_engine_cs.c    |   3 +-
>   drivers/gpu/drm/i915/gt/uc/intel_guc.c       |  18 ---
>   drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c   | 131 +++++++++++++++----
>   drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h  |  82 +++++++-----
>   drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h   |   5 +
>   drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c     |  27 ++--
>   drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h     |   2 +
>   drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h |   6 +-
>   8 files changed, 182 insertions(+), 92 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> index 1985772152bf..3fb52fac0d5d 100644
> --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> @@ -305,8 +305,9 @@ static int intel_engine_setup(struct intel_gt *gt, enum intel_engine_id id)
>   	engine->i915 = i915;
>   	engine->gt = gt;
>   	engine->uncore = gt->uncore;
> -	engine->hw_id = engine->guc_id = info->hw_id;
>   	engine->mmio_base = __engine_mmio_base(i915, info->mmio_bases);
> +	engine->hw_id = info->hw_id;
> +	engine->guc_id = MAKE_GUC_ID(info->class, info->instance);
>   
>   	engine->class = info->class;
>   	engine->instance = info->instance;
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
> index 942c7c187adb..6909da1e1a73 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
> @@ -213,23 +213,6 @@ static u32 guc_ctl_feature_flags(struct intel_guc *guc)
>   	return flags;
>   }
>   
> -static u32 guc_ctl_ctxinfo_flags(struct intel_guc *guc)
> -{
> -	u32 flags = 0;
> -
> -	if (intel_guc_submission_is_used(guc)) {
> -		u32 ctxnum, base;
> -
> -		base = intel_guc_ggtt_offset(guc, guc->stage_desc_pool);
> -		ctxnum = GUC_MAX_STAGE_DESCRIPTORS / 16;
> -
> -		base >>= PAGE_SHIFT;
> -		flags |= (base << GUC_CTL_BASE_ADDR_SHIFT) |
> -			(ctxnum << GUC_CTL_CTXNUM_IN16_SHIFT);
> -	}
> -	return flags;
> -}
> -
>   static u32 guc_ctl_log_params_flags(struct intel_guc *guc)
>   {
>   	u32 offset = intel_guc_ggtt_offset(guc, guc->log.vma) >> PAGE_SHIFT;
> @@ -291,7 +274,6 @@ static void guc_init_params(struct intel_guc *guc)
>   
>   	BUILD_BUG_ON(sizeof(guc->params) != GUC_CTL_MAX_DWORDS * sizeof(u32));
>   
> -	params[GUC_CTL_CTXINFO] = guc_ctl_ctxinfo_flags(guc);
>   	params[GUC_CTL_LOG_PARAMS] = guc_ctl_log_params_flags(guc);
>   	params[GUC_CTL_FEATURE] = guc_ctl_feature_flags(guc);
>   	params[GUC_CTL_DEBUG] = guc_ctl_debug_flags(guc);
> 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 d44061033f23..7950d28beb8c 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> @@ -10,11 +10,52 @@
>   
>   /*
>    * The Additional Data Struct (ADS) has pointers for different buffers used by
> - * the GuC. One single gem object contains the ADS struct itself (guc_ads), the
> - * scheduling policies (guc_policies), a structure describing a collection of
> - * register sets (guc_mmio_reg_state) and some extra pages for the GuC to save
> - * its internal state for sleep.
> + * the GuC. One single gem object contains the ADS struct itself (guc_ads) and
> + * all the extra buffers indirectly linked via the ADS struct's entries.
> + *
> + * Layout of the ADS blob allocated for the GuC:
> + *
> + *      +---------------------------------------+ <== base
> + *      | guc_ads                               |
> + *      +---------------------------------------+
> + *      | guc_policies                          |
> + *      +---------------------------------------+
> + *      | guc_gt_system_info                    |
> + *      +---------------------------------------+
> + *      | guc_clients_info                      |
> + *      +---------------------------------------+
> + *      | guc_ct_pool_entry[size]               |
> + *      +---------------------------------------+
> + *      | padding                               |
> + *      +---------------------------------------+ <== 4K aligned
> + *      | private data                          |
> + *      +---------------------------------------+
> + *      | padding                               |
> + *      +---------------------------------------+ <== 4K aligned
>    */
> +struct __guc_ads_blob {
> +	struct guc_ads ads;
> +	struct guc_policies policies;
> +	struct guc_gt_system_info system_info;
> +	struct guc_clients_info clients_info;
> +	struct guc_ct_pool_entry ct_pool[GUC_CT_POOL_SIZE];
> +} __packed;
> +
> +static u32 guc_ads_private_data_size(struct intel_guc *guc)
> +{
> +	return PAGE_ALIGN(guc->fw.private_data_size);
> +}
> +
> +static u32 guc_ads_private_data_offset(struct intel_guc *guc)
> +{
> +	return PAGE_ALIGN(sizeof(struct __guc_ads_blob));
> +}
> +
> +static u32 guc_ads_blob_size(struct intel_guc *guc)
> +{
> +	return guc_ads_private_data_offset(guc) +
> +	       guc_ads_private_data_size(guc);
> +}
>   
>   static void guc_policy_init(struct guc_policy *policy)
>   {
> @@ -48,26 +89,37 @@ static void guc_ct_pool_entries_init(struct guc_ct_pool_entry *pool, u32 num)
>   	memset(pool, 0, num * sizeof(*pool));
>   }
>   
> +static void guc_mapping_table_init(struct intel_gt *gt,
> +				   struct guc_gt_system_info *system_info)
> +{
> +	unsigned int i, j;
> +	struct intel_engine_cs *engine;
> +	enum intel_engine_id id;
> +
> +	/* Table must be set to invalid values for entries not used */
> +	for (i = 0; i < GUC_MAX_ENGINE_CLASSES; ++i)
> +		for (j = 0; j < GUC_MAX_INSTANCES_PER_CLASS; ++j)
> +			system_info->mapping_table[i][j] =
> +				GUC_MAX_INSTANCES_PER_CLASS;
> +
> +	for_each_engine(engine, gt, id) {
> +		u8 guc_class = engine->class;
> +
> +		system_info->mapping_table[guc_class][engine->instance] =
> +			engine->instance;
> +	}
> +}
> +
>   /*
>    * The first 80 dwords of the register state context, containing the
>    * execlists and ppgtt registers.
>    */
>   #define LR_HW_CONTEXT_SIZE	(80 * sizeof(u32))
>   
> -/* The ads obj includes the struct itself and buffers passed to GuC */
> -struct __guc_ads_blob {
> -	struct guc_ads ads;
> -	struct guc_policies policies;
> -	struct guc_mmio_reg_state reg_state;
> -	struct guc_gt_system_info system_info;
> -	struct guc_clients_info clients_info;
> -	struct guc_ct_pool_entry ct_pool[GUC_CT_POOL_SIZE];
> -	u8 reg_state_buffer[GUC_S3_SAVE_SPACE_PAGES * PAGE_SIZE];
> -} __packed;
> -
>   static void __guc_ads_init(struct intel_guc *guc)
>   {
>   	struct intel_gt *gt = guc_to_gt(guc);
> +	struct drm_i915_private *i915 = gt->i915;
>   	struct __guc_ads_blob *blob = guc->ads_blob;
>   	const u32 skipped_size = LRC_PPHWSP_SZ * PAGE_SIZE + LR_HW_CONTEXT_SIZE;
>   	u32 base;
> @@ -99,13 +151,25 @@ static void __guc_ads_init(struct intel_guc *guc)
>   	}
>   
>   	/* System info */
> -	blob->system_info.slice_enabled = hweight8(gt->info.sseu.slice_mask);
> -	blob->system_info.rcs_enabled = 1;
> -	blob->system_info.bcs_enabled = 1;
> +	blob->system_info.engine_enabled_masks[RENDER_CLASS] = 1;
> +	blob->system_info.engine_enabled_masks[COPY_ENGINE_CLASS] = 1;
> +	blob->system_info.engine_enabled_masks[VIDEO_DECODE_CLASS] = VDBOX_MASK(gt);
> +	blob->system_info.engine_enabled_masks[VIDEO_ENHANCEMENT_CLASS] = VEBOX_MASK(gt);
> +
> +	blob->system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_SLICE_ENABLED] =
> +		hweight8(gt->info.sseu.slice_mask);
> +	blob->system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_VDBOX_SFC_SUPPORT_MASK] =
> +		gt->info.vdbox_sfc_access;
> +
> +	if (INTEL_GEN(i915) >= 12 && !IS_DGFX(i915)) {
> +		u32 distdbreg = intel_uncore_read(gt->uncore,
> +						  GEN12_DIST_DBS_POPULATED);
> +		blob->system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_DOORBELL_COUNT_PER_SQIDI] =
> +			((distdbreg >> GEN12_DOORBELLS_PER_SQIDI_SHIFT) &
> +			 GEN12_DOORBELLS_PER_SQIDI) + 1;
> +	}
>   
> -	blob->system_info.vdbox_enable_mask = VDBOX_MASK(gt);
> -	blob->system_info.vebox_enable_mask = VEBOX_MASK(gt);
> -	blob->system_info.vdbox_sfc_support_mask = gt->info.vdbox_sfc_access;
> +	guc_mapping_table_init(guc_to_gt(guc), &blob->system_info);
>   
>   	base = intel_guc_ggtt_offset(guc, guc->ads_vma);
>   
> @@ -118,11 +182,12 @@ static void __guc_ads_init(struct intel_guc *guc)
>   
>   	/* ADS */
>   	blob->ads.scheduler_policies = base + ptr_offset(blob, policies);
> -	blob->ads.reg_state_buffer = base + ptr_offset(blob, reg_state_buffer);
> -	blob->ads.reg_state_addr = base + ptr_offset(blob, reg_state);
>   	blob->ads.gt_system_info = base + ptr_offset(blob, system_info);
>   	blob->ads.clients_info = base + ptr_offset(blob, clients_info);
>   
> +	/* Private Data */
> +	blob->ads.private_data = base + guc_ads_private_data_offset(guc);
> +
>   	i915_gem_object_flush_map(guc->ads_vma->obj);
>   }
>   
> @@ -135,14 +200,15 @@ static void __guc_ads_init(struct intel_guc *guc)
>    */
>   int intel_guc_ads_create(struct intel_guc *guc)
>   {
> -	const u32 size = PAGE_ALIGN(sizeof(struct __guc_ads_blob));
> +	u32 size;
>   	int ret;
>   
>   	GEM_BUG_ON(guc->ads_vma);
>   
> +	size = guc_ads_blob_size(guc);
> +
>   	ret = intel_guc_allocate_and_map_vma(guc, size, &guc->ads_vma,
>   					     (void **)&guc->ads_blob);
> -
>   	if (ret)
>   		return ret;
>   
> @@ -156,6 +222,18 @@ void intel_guc_ads_destroy(struct intel_guc *guc)
>   	i915_vma_unpin_and_release(&guc->ads_vma, I915_VMA_RELEASE_MAP);
>   }
>   
> +static void guc_ads_private_data_reset(struct intel_guc *guc)
> +{
> +	u32 size;
> +
> +	size = guc_ads_private_data_size(guc);
> +	if (!size)
> +		return;
> +
> +	memset((void *)guc->ads_blob + guc_ads_private_data_offset(guc), 0,
> +	       size);
> +}
> +
>   /**
>    * intel_guc_ads_reset() - prepares GuC Additional Data Struct for reuse
>    * @guc: intel_guc struct
> @@ -168,5 +246,8 @@ void intel_guc_ads_reset(struct intel_guc *guc)
>   {
>   	if (!guc->ads_vma)
>   		return;
> +
>   	__guc_ads_init(guc);
> +
> +	guc_ads_private_data_reset(guc);
>   }
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h b/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h
> index a6b733c146c9..391053118869 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h
> @@ -26,8 +26,8 @@
>   #define GUC_VIDEO_ENGINE2		4
>   #define GUC_MAX_ENGINES_NUM		(GUC_VIDEO_ENGINE2 + 1)
>   
> -#define GUC_MAX_ENGINE_CLASSES		5
> -#define GUC_MAX_INSTANCES_PER_CLASS	16
> +#define GUC_MAX_ENGINE_CLASSES		16
> +#define GUC_MAX_INSTANCES_PER_CLASS	32
>   
>   #define GUC_DOORBELL_INVALID		256
>   
> @@ -62,12 +62,7 @@
>   #define GUC_STAGE_DESC_ATTR_PCH		BIT(6)
>   #define GUC_STAGE_DESC_ATTR_TERMINATED	BIT(7)
>   
> -/* New GuC control data */
> -#define GUC_CTL_CTXINFO			0
> -#define   GUC_CTL_CTXNUM_IN16_SHIFT	0
> -#define   GUC_CTL_BASE_ADDR_SHIFT	12
> -
> -#define GUC_CTL_LOG_PARAMS		1
> +#define GUC_CTL_LOG_PARAMS		0
>   #define   GUC_LOG_VALID			(1 << 0)
>   #define   GUC_LOG_NOTIFY_ON_HALF_FULL	(1 << 1)
>   #define   GUC_LOG_ALLOC_IN_MEGABYTE	(1 << 3)
> @@ -79,11 +74,11 @@
>   #define   GUC_LOG_ISR_MASK	        (0x7 << GUC_LOG_ISR_SHIFT)
>   #define   GUC_LOG_BUF_ADDR_SHIFT	12
>   
> -#define GUC_CTL_WA			2
> -#define GUC_CTL_FEATURE			3
> +#define GUC_CTL_WA			1
> +#define GUC_CTL_FEATURE			2
>   #define   GUC_CTL_DISABLE_SCHEDULER	(1 << 14)
>   
> -#define GUC_CTL_DEBUG			4
> +#define GUC_CTL_DEBUG			3
>   #define   GUC_LOG_VERBOSITY_SHIFT	0
>   #define   GUC_LOG_VERBOSITY_LOW		(0 << GUC_LOG_VERBOSITY_SHIFT)
>   #define   GUC_LOG_VERBOSITY_MED		(1 << GUC_LOG_VERBOSITY_SHIFT)
> @@ -97,12 +92,37 @@
>   #define   GUC_LOG_DISABLED		(1 << 6)
>   #define   GUC_PROFILE_ENABLED		(1 << 7)
>   
> -#define GUC_CTL_ADS			5
> +#define GUC_CTL_ADS			4
>   #define   GUC_ADS_ADDR_SHIFT		1
>   #define   GUC_ADS_ADDR_MASK		(0xFFFFF << GUC_ADS_ADDR_SHIFT)
>   
>   #define GUC_CTL_MAX_DWORDS		(SOFT_SCRATCH_COUNT - 2) /* [1..14] */
>   
> +/* Generic GT SysInfo data types */
> +#define GUC_GENERIC_GT_SYSINFO_SLICE_ENABLED		0
> +#define GUC_GENERIC_GT_SYSINFO_VDBOX_SFC_SUPPORT_MASK	1
> +#define GUC_GENERIC_GT_SYSINFO_DOORBELL_COUNT_PER_SQIDI	2
> +#define GUC_GENERIC_GT_SYSINFO_MAX			16

nit: these names are long. Maybe drop the "GENERIC"? it's not like there 
is a specialized_info array :)

> +
> +/*
> + * The class goes in bits [0..2] of the GuC ID, the instance in bits [3..6].
> + * Bit 7 can be used for operations that apply to all engine classes&instances.
> + */
> +#define GUC_ENGINE_CLASS_SHIFT		0
> +#define GUC_ENGINE_CLASS_MASK		(0x7 << GUC_ENGINE_CLASS_SHIFT)
> +#define GUC_ENGINE_INSTANCE_SHIFT	3
> +#define GUC_ENGINE_INSTANCE_MASK	(0xf << GUC_ENGINE_INSTANCE_SHIFT)
> +#define GUC_ENGINE_ALL_INSTANCES	BIT(7)
> +
> +#define MAKE_GUC_ID(class, instance) \
> +	(((class) << GUC_ENGINE_CLASS_SHIFT) | \
> +	 ((instance) << GUC_ENGINE_INSTANCE_SHIFT))
> +
> +#define GUC_ID_TO_ENGINE_CLASS(guc_id) \
> +	(((guc_id) & GUC_ENGINE_CLASS_MASK) >> GUC_ENGINE_CLASS_SHIFT)
> +#define GUC_ID_TO_ENGINE_INSTANCE(guc_id) \
> +	(((guc_id) & GUC_ENGINE_INSTANCE_MASK) >> GUC_ENGINE_INSTANCE_SHIFT)
> +
>   /* Work item for submitting workloads into work queue of GuC. */
>   struct guc_wq_item {
>   	u32 header;
> @@ -338,7 +358,6 @@ struct guc_policies {
>   /* GuC MMIO reg state struct */
>   
>   
> -#define GUC_REGSET_MAX_REGISTERS	64
>   #define GUC_S3_SAVE_SPACE_PAGES		10

The S3 define can also be removed

>   
>   struct guc_mmio_reg {
> @@ -348,28 +367,24 @@ struct guc_mmio_reg {
>   #define GUC_REGSET_MASKED		(1 << 0)
>   } __packed;
>   
> -struct guc_mmio_regset {
> -	struct guc_mmio_reg registers[GUC_REGSET_MAX_REGISTERS];
> -	u32 values_valid;
> -	u32 number_of_registers;
> -} __packed;
> -
>   /* GuC register sets */
> -struct guc_mmio_reg_state {
> -	struct guc_mmio_regset engine_reg[GUC_MAX_ENGINE_CLASSES][GUC_MAX_INSTANCES_PER_CLASS];
> -	u32 reserved[98];
> +struct guc_mmio_reg_set {
> +	u32 address;
> +	union {
> +		struct {
> +			u32 count:16;
> +			u32 reserved1:12;
> +			u32 reserved2:4;

I believe we usually try to avoid bitfield definitions in interfaces. In 
this case, wouldn't it be simpler to just have a u16 count and a u16 
reserved, entirely skipping the union and the inner struct? I know it 
wouldn't match the GuC file 1:1 but IMO it's an acceptable difference 
given its triviality.

With the define removed and this struct cleaned up:

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

Daniele

> +		};
> +		u32 count_u32;
> +	};
>   } __packed;
>   
>   /* HW info */
>   struct guc_gt_system_info {
> -	u32 slice_enabled;
> -	u32 rcs_enabled;
> -	u32 reserved0;
> -	u32 bcs_enabled;
> -	u32 vdbox_enable_mask;
> -	u32 vdbox_sfc_support_mask;
> -	u32 vebox_enable_mask;
> -	u32 reserved[9];
> +	u8 mapping_table[GUC_MAX_ENGINE_CLASSES][GUC_MAX_INSTANCES_PER_CLASS];
> +	u32 engine_enabled_masks[GUC_MAX_ENGINE_CLASSES];
> +	u32 generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_MAX];
>   } __packed;
>   
>   /* Clients info */
> @@ -390,15 +405,16 @@ struct guc_clients_info {
>   
>   /* GuC Additional Data Struct */
>   struct guc_ads {
> -	u32 reg_state_addr;
> -	u32 reg_state_buffer;
> +	struct guc_mmio_reg_set reg_state_list[GUC_MAX_ENGINE_CLASSES][GUC_MAX_INSTANCES_PER_CLASS];
> +	u32 reserved0;
>   	u32 scheduler_policies;
>   	u32 gt_system_info;
>   	u32 clients_info;
>   	u32 control_data;
>   	u32 golden_context_lrca[GUC_MAX_ENGINE_CLASSES];
>   	u32 eng_state_size[GUC_MAX_ENGINE_CLASSES];
> -	u32 reserved[16];
> +	u32 private_data;
> +	u32 reserved[15];
>   } __packed;
>   
>   /* GuC logging structures */
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h b/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h
> index 1949346e714e..b37fc2ffaef2 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h
> @@ -118,6 +118,11 @@ struct guc_doorbell_info {
>   #define   GEN8_DRB_VALID		  (1<<0)
>   #define GEN8_DRBREGU(x)			_MMIO(0x1000 + (x) * 8 + 4)
>   
> +#define GEN12_DIST_DBS_POPULATED		_MMIO(0xd08)
> +#define   GEN12_DOORBELLS_PER_SQIDI_SHIFT	16
> +#define   GEN12_DOORBELLS_PER_SQIDI		(0xff)
> +#define   GEN12_SQIDIS_DOORBELL_EXIST		(0xffff)
> +
>   #define DE_GUCRMR			_MMIO(0x44054)
>   
>   #define GUC_BCS_RCS_IER			_MMIO(0xC550)
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
> index 80e8b6c3bc8c..ee4ac3922277 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
> @@ -44,23 +44,19 @@ void intel_uc_fw_change_status(struct intel_uc_fw *uc_fw,
>    * List of required GuC and HuC binaries per-platform.
>    * Must be ordered based on platform + revid, from newer to older.
>    *
> - * TGL 35.2 is interface-compatible with 33.0 for previous Gens. The deltas
> - * between 33.0 and 35.2 are only related to new additions to support new Gen12
> - * features.
> - *
>    * Note that RKL uses the same firmware as TGL.
>    */
>   #define INTEL_UC_FIRMWARE_DEFS(fw_def, guc_def, huc_def) \
> -	fw_def(ROCKETLAKE,  0, guc_def(tgl, 35, 2, 0), huc_def(tgl,  7, 5, 0)) \
> -	fw_def(TIGERLAKE,   0, guc_def(tgl, 35, 2, 0), huc_def(tgl,  7, 5, 0)) \
> -	fw_def(ELKHARTLAKE, 0, guc_def(ehl, 33, 0, 4), huc_def(ehl,  9, 0, 0)) \
> -	fw_def(ICELAKE,     0, guc_def(icl, 33, 0, 0), huc_def(icl,  9, 0, 0)) \
> -	fw_def(COMETLAKE,   5, guc_def(cml, 33, 0, 0), huc_def(cml,  4, 0, 0)) \
> -	fw_def(COFFEELAKE,  0, guc_def(kbl, 33, 0, 0), huc_def(kbl,  4, 0, 0)) \
> -	fw_def(GEMINILAKE,  0, guc_def(glk, 33, 0, 0), huc_def(glk,  4, 0, 0)) \
> -	fw_def(KABYLAKE,    0, guc_def(kbl, 33, 0, 0), huc_def(kbl,  4, 0, 0)) \
> -	fw_def(BROXTON,     0, guc_def(bxt, 33, 0, 0), huc_def(bxt,  2, 0, 0)) \
> -	fw_def(SKYLAKE,     0, guc_def(skl, 33, 0, 0), huc_def(skl,  2, 0, 0))
> +	fw_def(ROCKETLAKE,  0, guc_def(tgl, 49, 0, 1), huc_def(tgl,  7, 5, 0)) \
> +	fw_def(TIGERLAKE,   0, guc_def(tgl, 49, 0, 1), huc_def(tgl,  7, 5, 0)) \
> +	fw_def(ELKHARTLAKE, 0, guc_def(ehl, 49, 0, 1), huc_def(ehl,  9, 0, 0)) \
> +	fw_def(ICELAKE,     0, guc_def(icl, 49, 0, 1), huc_def(icl,  9, 0, 0)) \
> +	fw_def(COMETLAKE,   5, guc_def(cml, 49, 0, 1), huc_def(cml,  4, 0, 0)) \
> +	fw_def(COFFEELAKE,  0, guc_def(kbl, 49, 0, 1), huc_def(kbl,  4, 0, 0)) \
> +	fw_def(GEMINILAKE,  0, guc_def(glk, 49, 0, 1), huc_def(glk,  4, 0, 0)) \
> +	fw_def(KABYLAKE,    0, guc_def(kbl, 49, 0, 1), huc_def(kbl,  4, 0, 0)) \
> +	fw_def(BROXTON,     0, guc_def(bxt, 49, 0, 1), huc_def(bxt,  2, 0, 0)) \
> +	fw_def(SKYLAKE,     0, guc_def(skl, 49, 0, 1), huc_def(skl,  2, 0, 0))
>   
>   #define __MAKE_UC_FW_PATH(prefix_, name_, major_, minor_, patch_) \
>   	"i915/" \
> @@ -371,6 +367,9 @@ int intel_uc_fw_fetch(struct intel_uc_fw *uc_fw)
>   		}
>   	}
>   
> +	if (uc_fw->type == INTEL_UC_FW_TYPE_GUC)
> +		uc_fw->private_data_size = css->private_data_size;
> +
>   	obj = i915_gem_object_create_shmem_from_data(i915, fw->data, fw->size);
>   	if (IS_ERR(obj)) {
>   		err = PTR_ERR(obj);
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
> index 23d3a423ac0f..99bb1fe1af66 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
> @@ -88,6 +88,8 @@ struct intel_uc_fw {
>   
>   	u32 rsa_size;
>   	u32 ucode_size;
> +
> +	u32 private_data_size;
>   };
>   
>   #ifdef CONFIG_DRM_I915_DEBUG_GUC
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h
> index 029214cdedd5..e41ffc7a7fbc 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h
> @@ -69,7 +69,11 @@ struct uc_css_header {
>   #define CSS_SW_VERSION_UC_MAJOR		(0xFF << 16)
>   #define CSS_SW_VERSION_UC_MINOR		(0xFF << 8)
>   #define CSS_SW_VERSION_UC_PATCH		(0xFF << 0)
> -	u32 reserved[14];
> +	u32 reserved0[13];
> +	union {
> +		u32 private_data_size; /* only applies to GuC */
> +		u32 reserved1;
> +	};
>   	u32 header_info;
>   } __packed;
>   static_assert(sizeof(struct uc_css_header) == 128);

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

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

* Re: [Intel-gfx] [PATCH 2/4] drm/i915/guc: Improved reporting when GuC fails to load
  2020-09-21 17:54 ` [Intel-gfx] [PATCH 2/4] drm/i915/guc: Improved reporting when GuC fails to load John.C.Harrison
@ 2020-09-22  0:33   ` Daniele Ceraolo Spurio
  0 siblings, 0 replies; 13+ messages in thread
From: Daniele Ceraolo Spurio @ 2020-09-22  0:33 UTC (permalink / raw)
  To: John.C.Harrison, Intel-GFX



On 9/21/2020 10:54 AM, John.C.Harrison@Intel.com wrote:
> From: John Harrison <John.C.Harrison@Intel.com>
>
> Rather than just saying 'GuC failed to load: -110', actually print out
> the GuC status register and break it down into the individual fields.
>
> Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
> ---
>   drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c | 27 ++++++++++++++++++-----
>   1 file changed, 22 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
> index d4a87f4c9421..eac84baf34e6 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
> @@ -74,8 +74,9 @@ static inline bool guc_ready(struct intel_uncore *uncore, u32 *status)
>   		((val & GS_MIA_CORE_STATE) && (uk_val == GS_UKERNEL_LAPIC_DONE));
>   }
>   
> -static int guc_wait_ucode(struct intel_uncore *uncore)
> +static int guc_wait_ucode(struct intel_gt *gt)

No need to pass the GT here, you already have i915 in the uncore 
structure and you don't seem to be using the GT for anything else.

>   {
> +	struct intel_uncore *uncore = gt->uncore;
>   	u32 status;
>   	int ret;
>   
> @@ -91,16 +92,32 @@ static int guc_wait_ucode(struct intel_uncore *uncore)
>   	DRM_DEBUG_DRIVER("GuC status %#x\n", status);
>   
>   	if ((status & GS_BOOTROM_MASK) == GS_BOOTROM_RSA_FAILED) {
> -		DRM_ERROR("GuC firmware signature verification failed\n");
> +		drm_err(&gt->i915->drm, "GuC firmware signature verification failed\n");
>   		ret = -ENOEXEC;
> +		goto out;
>   	}
>   
>   	if ((status & GS_UKERNEL_MASK) == GS_UKERNEL_EXCEPTION) {
> -		DRM_ERROR("GuC firmware exception. EIP: %#x\n",
> -			  intel_uncore_read(uncore, SOFT_SCRATCH(13)));
> +		drm_err(&gt->i915->drm, "GuC firmware exception. EIP: %#x\n",
> +			intel_uncore_read(uncore, SOFT_SCRATCH(13)));
>   		ret = -ENXIO;
> +		goto out;
>   	}
>   
> +	if (ret) {
> +		drm_err(&gt->i915->drm, "GuC load failed: status: Reset = %d, "
> +			"BootROM = 0x%02X, UKernel = 0x%02X, "
> +			"MIA = 0x%02X, Auth = 0x%02X\n",
> +			(status >> GS_RESET_SHIFT) & 1,
> +			(status & GS_BOOTROM_MASK) >> GS_BOOTROM_SHIFT,

Could use the REG_FIELD_GET macro here and below to simplify the code

> +			(status & GS_UKERNEL_MASK) >> GS_UKERNEL_SHIFT,
> +			(status & GS_MIA_MASK) >> GS_MIA_SHIFT,
> +			(status & GS_AUTH_STATUS_MASK) >> GS_AUTH_STATUS_SHIFT);

IMO it'd be worth printing the status breakdown for all failures cases, 
even the 2 above, but not a blocker.

With the function parameter flipped back to uncore, this is:

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

Daniele

> +	}
> +
> +out:
> +	if (ret)
> +		drm_err(&gt->i915->drm, "GuC load failed: status = 0x%08X\n", status);
>   	return ret;
>   }
>   
> @@ -139,7 +156,7 @@ int intel_guc_fw_upload(struct intel_guc *guc)
>   	if (ret)
>   		goto out;
>   
> -	ret = guc_wait_ucode(uncore);
> +	ret = guc_wait_ucode(gt);
>   	if (ret)
>   		goto out;
>   

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

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

* Re: [Intel-gfx] [PATCH 1/4] drm/i915/guc: Update to use firmware v49.0.1
  2020-09-22  0:24   ` Daniele Ceraolo Spurio
@ 2020-09-22  0:38     ` John Harrison
  2020-09-22  1:01       ` Daniele Ceraolo Spurio
  0 siblings, 1 reply; 13+ messages in thread
From: John Harrison @ 2020-09-22  0:38 UTC (permalink / raw)
  To: Daniele Ceraolo Spurio, Intel-GFX
  Cc: Oscar Mateo, Michal Winiarski, Michel Thierry

On 9/21/2020 17:24, Daniele Ceraolo Spurio wrote:
> On 9/21/2020 10:54 AM, John.C.Harrison@Intel.com wrote:
>> From: John Harrison <John.C.Harrison@Intel.com>
>>
>> The latest GuC firmware includes a number of interface changes that
>> require driver updates to match.
>>
>> * Starting from Gen11, the ID to be provided to GuC needs to contain
>>    the engine class in bits [0..2] and the instance in bits [3..6].
>>
>>    NOTE: this patch breaks pointer dereferences in some existing GuC
>>    functions that use the guc_id to dereference arrays but these 
>> functions
>>    are not used for now as we have GuC submission disabled and we will
>>    update these functions in follow up patch which requires new IDs.
>>
>> * The new GuC requires the additional data structure (ADS) and 
>> associated
>>    'private_data' pointer to be setup. This is basically a scratch area
>>    of memory that the GuC owns. The size is read from the CSS header.
>>
>> * There is now a physical to logical engine mapping table in the ADS
>>    which needs to be configured in order for the firmware to load. For
>>    now, the table is initialised with a 1 to 1 mapping.
>>
>> * GUC_CTL_CTXINFO has been removed from the initialization params.
>>
>> * reg_state_buffer is maintained internally by the GuC as part of
>>    the private data.
>>
>> * The ADS layout has changed significantly. This patch updates the
>>    shared structure and also adds better documentation of the layout.
>>
>> * While i915 does not use GuC doorbells, the firmware now requires
>>    that some initialisation is done.
>>
>> * The number of engine classes and instances supported in the ADS has
>>    been increased.
>>
>> Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
>> Signed-off-by: Matthew Brost <matthew.brost@intel.com>
>> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
>> Signed-off-by: Oscar Mateo <oscar.mateo@intel.com>
>> Signed-off-by: Michel Thierry <michel.thierry@intel.com>
>> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>> Cc: Michal Winiarski <michal.winiarski@intel.com>
>> Cc: Tomasz Lis <tomasz.lis@intel.com>
>> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
>> ---
>>   drivers/gpu/drm/i915/gt/intel_engine_cs.c    |   3 +-
>>   drivers/gpu/drm/i915/gt/uc/intel_guc.c       |  18 ---
>>   drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c   | 131 +++++++++++++++----
>>   drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h  |  82 +++++++-----
>>   drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h   |   5 +
>>   drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c     |  27 ++--
>>   drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h     |   2 +
>>   drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h |   6 +-
>>   8 files changed, 182 insertions(+), 92 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c 
>> b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
>> index 1985772152bf..3fb52fac0d5d 100644
>> --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
>> +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
>> @@ -305,8 +305,9 @@ static int intel_engine_setup(struct intel_gt 
>> *gt, enum intel_engine_id id)
>>       engine->i915 = i915;
>>       engine->gt = gt;
>>       engine->uncore = gt->uncore;
>> -    engine->hw_id = engine->guc_id = info->hw_id;
>>       engine->mmio_base = __engine_mmio_base(i915, info->mmio_bases);
>> +    engine->hw_id = info->hw_id;
>> +    engine->guc_id = MAKE_GUC_ID(info->class, info->instance);
>>         engine->class = info->class;
>>       engine->instance = info->instance;
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c 
>> b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
>> index 942c7c187adb..6909da1e1a73 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
>> @@ -213,23 +213,6 @@ static u32 guc_ctl_feature_flags(struct 
>> intel_guc *guc)
>>       return flags;
>>   }
>>   -static u32 guc_ctl_ctxinfo_flags(struct intel_guc *guc)
>> -{
>> -    u32 flags = 0;
>> -
>> -    if (intel_guc_submission_is_used(guc)) {
>> -        u32 ctxnum, base;
>> -
>> -        base = intel_guc_ggtt_offset(guc, guc->stage_desc_pool);
>> -        ctxnum = GUC_MAX_STAGE_DESCRIPTORS / 16;
>> -
>> -        base >>= PAGE_SHIFT;
>> -        flags |= (base << GUC_CTL_BASE_ADDR_SHIFT) |
>> -            (ctxnum << GUC_CTL_CTXNUM_IN16_SHIFT);
>> -    }
>> -    return flags;
>> -}
>> -
>>   static u32 guc_ctl_log_params_flags(struct intel_guc *guc)
>>   {
>>       u32 offset = intel_guc_ggtt_offset(guc, guc->log.vma) >> 
>> PAGE_SHIFT;
>> @@ -291,7 +274,6 @@ static void guc_init_params(struct intel_guc *guc)
>>         BUILD_BUG_ON(sizeof(guc->params) != GUC_CTL_MAX_DWORDS * 
>> sizeof(u32));
>>   -    params[GUC_CTL_CTXINFO] = guc_ctl_ctxinfo_flags(guc);
>>       params[GUC_CTL_LOG_PARAMS] = guc_ctl_log_params_flags(guc);
>>       params[GUC_CTL_FEATURE] = guc_ctl_feature_flags(guc);
>>       params[GUC_CTL_DEBUG] = guc_ctl_debug_flags(guc);
>> 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 d44061033f23..7950d28beb8c 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
>> @@ -10,11 +10,52 @@
>>     /*
>>    * The Additional Data Struct (ADS) has pointers for different 
>> buffers used by
>> - * the GuC. One single gem object contains the ADS struct itself 
>> (guc_ads), the
>> - * scheduling policies (guc_policies), a structure describing a 
>> collection of
>> - * register sets (guc_mmio_reg_state) and some extra pages for the 
>> GuC to save
>> - * its internal state for sleep.
>> + * the GuC. One single gem object contains the ADS struct itself 
>> (guc_ads) and
>> + * all the extra buffers indirectly linked via the ADS struct's 
>> entries.
>> + *
>> + * Layout of the ADS blob allocated for the GuC:
>> + *
>> + *      +---------------------------------------+ <== base
>> + *      | guc_ads                               |
>> + *      +---------------------------------------+
>> + *      | guc_policies                          |
>> + *      +---------------------------------------+
>> + *      | guc_gt_system_info                    |
>> + *      +---------------------------------------+
>> + *      | guc_clients_info                      |
>> + *      +---------------------------------------+
>> + *      | guc_ct_pool_entry[size]               |
>> + *      +---------------------------------------+
>> + *      | padding                               |
>> + *      +---------------------------------------+ <== 4K aligned
>> + *      | private data                          |
>> + *      +---------------------------------------+
>> + *      | padding                               |
>> + *      +---------------------------------------+ <== 4K aligned
>>    */
>> +struct __guc_ads_blob {
>> +    struct guc_ads ads;
>> +    struct guc_policies policies;
>> +    struct guc_gt_system_info system_info;
>> +    struct guc_clients_info clients_info;
>> +    struct guc_ct_pool_entry ct_pool[GUC_CT_POOL_SIZE];
>> +} __packed;
>> +
>> +static u32 guc_ads_private_data_size(struct intel_guc *guc)
>> +{
>> +    return PAGE_ALIGN(guc->fw.private_data_size);
>> +}
>> +
>> +static u32 guc_ads_private_data_offset(struct intel_guc *guc)
>> +{
>> +    return PAGE_ALIGN(sizeof(struct __guc_ads_blob));
>> +}
>> +
>> +static u32 guc_ads_blob_size(struct intel_guc *guc)
>> +{
>> +    return guc_ads_private_data_offset(guc) +
>> +           guc_ads_private_data_size(guc);
>> +}
>>     static void guc_policy_init(struct guc_policy *policy)
>>   {
>> @@ -48,26 +89,37 @@ static void guc_ct_pool_entries_init(struct 
>> guc_ct_pool_entry *pool, u32 num)
>>       memset(pool, 0, num * sizeof(*pool));
>>   }
>>   +static void guc_mapping_table_init(struct intel_gt *gt,
>> +                   struct guc_gt_system_info *system_info)
>> +{
>> +    unsigned int i, j;
>> +    struct intel_engine_cs *engine;
>> +    enum intel_engine_id id;
>> +
>> +    /* Table must be set to invalid values for entries not used */
>> +    for (i = 0; i < GUC_MAX_ENGINE_CLASSES; ++i)
>> +        for (j = 0; j < GUC_MAX_INSTANCES_PER_CLASS; ++j)
>> +            system_info->mapping_table[i][j] =
>> +                GUC_MAX_INSTANCES_PER_CLASS;
>> +
>> +    for_each_engine(engine, gt, id) {
>> +        u8 guc_class = engine->class;
>> +
>> + system_info->mapping_table[guc_class][engine->instance] =
>> +            engine->instance;
>> +    }
>> +}
>> +
>>   /*
>>    * The first 80 dwords of the register state context, containing the
>>    * execlists and ppgtt registers.
>>    */
>>   #define LR_HW_CONTEXT_SIZE    (80 * sizeof(u32))
>>   -/* The ads obj includes the struct itself and buffers passed to 
>> GuC */
>> -struct __guc_ads_blob {
>> -    struct guc_ads ads;
>> -    struct guc_policies policies;
>> -    struct guc_mmio_reg_state reg_state;
>> -    struct guc_gt_system_info system_info;
>> -    struct guc_clients_info clients_info;
>> -    struct guc_ct_pool_entry ct_pool[GUC_CT_POOL_SIZE];
>> -    u8 reg_state_buffer[GUC_S3_SAVE_SPACE_PAGES * PAGE_SIZE];
>> -} __packed;
>> -
>>   static void __guc_ads_init(struct intel_guc *guc)
>>   {
>>       struct intel_gt *gt = guc_to_gt(guc);
>> +    struct drm_i915_private *i915 = gt->i915;
>>       struct __guc_ads_blob *blob = guc->ads_blob;
>>       const u32 skipped_size = LRC_PPHWSP_SZ * PAGE_SIZE + 
>> LR_HW_CONTEXT_SIZE;
>>       u32 base;
>> @@ -99,13 +151,25 @@ static void __guc_ads_init(struct intel_guc *guc)
>>       }
>>         /* System info */
>> -    blob->system_info.slice_enabled = 
>> hweight8(gt->info.sseu.slice_mask);
>> -    blob->system_info.rcs_enabled = 1;
>> -    blob->system_info.bcs_enabled = 1;
>> +    blob->system_info.engine_enabled_masks[RENDER_CLASS] = 1;
>> + blob->system_info.engine_enabled_masks[COPY_ENGINE_CLASS] = 1;
>> + blob->system_info.engine_enabled_masks[VIDEO_DECODE_CLASS] = 
>> VDBOX_MASK(gt);
>> + blob->system_info.engine_enabled_masks[VIDEO_ENHANCEMENT_CLASS] = 
>> VEBOX_MASK(gt);
>> +
>> + 
>> blob->system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_SLICE_ENABLED] 
>> =
>> +        hweight8(gt->info.sseu.slice_mask);
>> + 
>> blob->system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_VDBOX_SFC_SUPPORT_MASK] 
>> =
>> +        gt->info.vdbox_sfc_access;
>> +
>> +    if (INTEL_GEN(i915) >= 12 && !IS_DGFX(i915)) {
>> +        u32 distdbreg = intel_uncore_read(gt->uncore,
>> +                          GEN12_DIST_DBS_POPULATED);
>> + 
>> blob->system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_DOORBELL_COUNT_PER_SQIDI] 
>> =
>> +            ((distdbreg >> GEN12_DOORBELLS_PER_SQIDI_SHIFT) &
>> +             GEN12_DOORBELLS_PER_SQIDI) + 1;
>> +    }
>>   -    blob->system_info.vdbox_enable_mask = VDBOX_MASK(gt);
>> -    blob->system_info.vebox_enable_mask = VEBOX_MASK(gt);
>> -    blob->system_info.vdbox_sfc_support_mask = 
>> gt->info.vdbox_sfc_access;
>> +    guc_mapping_table_init(guc_to_gt(guc), &blob->system_info);
>>         base = intel_guc_ggtt_offset(guc, guc->ads_vma);
>>   @@ -118,11 +182,12 @@ static void __guc_ads_init(struct intel_guc 
>> *guc)
>>         /* ADS */
>>       blob->ads.scheduler_policies = base + ptr_offset(blob, policies);
>> -    blob->ads.reg_state_buffer = base + ptr_offset(blob, 
>> reg_state_buffer);
>> -    blob->ads.reg_state_addr = base + ptr_offset(blob, reg_state);
>>       blob->ads.gt_system_info = base + ptr_offset(blob, system_info);
>>       blob->ads.clients_info = base + ptr_offset(blob, clients_info);
>>   +    /* Private Data */
>> +    blob->ads.private_data = base + guc_ads_private_data_offset(guc);
>> +
>>       i915_gem_object_flush_map(guc->ads_vma->obj);
>>   }
>>   @@ -135,14 +200,15 @@ static void __guc_ads_init(struct intel_guc 
>> *guc)
>>    */
>>   int intel_guc_ads_create(struct intel_guc *guc)
>>   {
>> -    const u32 size = PAGE_ALIGN(sizeof(struct __guc_ads_blob));
>> +    u32 size;
>>       int ret;
>>         GEM_BUG_ON(guc->ads_vma);
>>   +    size = guc_ads_blob_size(guc);
>> +
>>       ret = intel_guc_allocate_and_map_vma(guc, size, &guc->ads_vma,
>>                            (void **)&guc->ads_blob);
>> -
>>       if (ret)
>>           return ret;
>>   @@ -156,6 +222,18 @@ void intel_guc_ads_destroy(struct intel_guc *guc)
>>       i915_vma_unpin_and_release(&guc->ads_vma, I915_VMA_RELEASE_MAP);
>>   }
>>   +static void guc_ads_private_data_reset(struct intel_guc *guc)
>> +{
>> +    u32 size;
>> +
>> +    size = guc_ads_private_data_size(guc);
>> +    if (!size)
>> +        return;
>> +
>> +    memset((void *)guc->ads_blob + guc_ads_private_data_offset(guc), 0,
>> +           size);
>> +}
>> +
>>   /**
>>    * intel_guc_ads_reset() - prepares GuC Additional Data Struct for 
>> reuse
>>    * @guc: intel_guc struct
>> @@ -168,5 +246,8 @@ void intel_guc_ads_reset(struct intel_guc *guc)
>>   {
>>       if (!guc->ads_vma)
>>           return;
>> +
>>       __guc_ads_init(guc);
>> +
>> +    guc_ads_private_data_reset(guc);
>>   }
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h 
>> b/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h
>> index a6b733c146c9..391053118869 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h
>> @@ -26,8 +26,8 @@
>>   #define GUC_VIDEO_ENGINE2        4
>>   #define GUC_MAX_ENGINES_NUM        (GUC_VIDEO_ENGINE2 + 1)
>>   -#define GUC_MAX_ENGINE_CLASSES        5
>> -#define GUC_MAX_INSTANCES_PER_CLASS    16
>> +#define GUC_MAX_ENGINE_CLASSES        16
>> +#define GUC_MAX_INSTANCES_PER_CLASS    32
>>     #define GUC_DOORBELL_INVALID        256
>>   @@ -62,12 +62,7 @@
>>   #define GUC_STAGE_DESC_ATTR_PCH        BIT(6)
>>   #define GUC_STAGE_DESC_ATTR_TERMINATED    BIT(7)
>>   -/* New GuC control data */
>> -#define GUC_CTL_CTXINFO            0
>> -#define   GUC_CTL_CTXNUM_IN16_SHIFT    0
>> -#define   GUC_CTL_BASE_ADDR_SHIFT    12
>> -
>> -#define GUC_CTL_LOG_PARAMS        1
>> +#define GUC_CTL_LOG_PARAMS        0
>>   #define   GUC_LOG_VALID            (1 << 0)
>>   #define   GUC_LOG_NOTIFY_ON_HALF_FULL    (1 << 1)
>>   #define   GUC_LOG_ALLOC_IN_MEGABYTE    (1 << 3)
>> @@ -79,11 +74,11 @@
>>   #define   GUC_LOG_ISR_MASK            (0x7 << GUC_LOG_ISR_SHIFT)
>>   #define   GUC_LOG_BUF_ADDR_SHIFT    12
>>   -#define GUC_CTL_WA            2
>> -#define GUC_CTL_FEATURE            3
>> +#define GUC_CTL_WA            1
>> +#define GUC_CTL_FEATURE            2
>>   #define   GUC_CTL_DISABLE_SCHEDULER    (1 << 14)
>>   -#define GUC_CTL_DEBUG            4
>> +#define GUC_CTL_DEBUG            3
>>   #define   GUC_LOG_VERBOSITY_SHIFT    0
>>   #define   GUC_LOG_VERBOSITY_LOW        (0 << GUC_LOG_VERBOSITY_SHIFT)
>>   #define   GUC_LOG_VERBOSITY_MED        (1 << GUC_LOG_VERBOSITY_SHIFT)
>> @@ -97,12 +92,37 @@
>>   #define   GUC_LOG_DISABLED        (1 << 6)
>>   #define   GUC_PROFILE_ENABLED        (1 << 7)
>>   -#define GUC_CTL_ADS            5
>> +#define GUC_CTL_ADS            4
>>   #define   GUC_ADS_ADDR_SHIFT        1
>>   #define   GUC_ADS_ADDR_MASK        (0xFFFFF << GUC_ADS_ADDR_SHIFT)
>>     #define GUC_CTL_MAX_DWORDS        (SOFT_SCRATCH_COUNT - 2) /* 
>> [1..14] */
>>   +/* Generic GT SysInfo data types */
>> +#define GUC_GENERIC_GT_SYSINFO_SLICE_ENABLED        0
>> +#define GUC_GENERIC_GT_SYSINFO_VDBOX_SFC_SUPPORT_MASK    1
>> +#define GUC_GENERIC_GT_SYSINFO_DOORBELL_COUNT_PER_SQIDI    2
>> +#define GUC_GENERIC_GT_SYSINFO_MAX            16
>
> nit: these names are long. Maybe drop the "GENERIC"? it's not like 
> there is a specialized_info array :)
The name is to match the GuC spec. And the generic refers to it not 
being engine specific. As in, there is an engine class array and the 
generic GT info array. So actually, yes there is a specialised info 
array already.


>
>> +
>> +/*
>> + * The class goes in bits [0..2] of the GuC ID, the instance in bits 
>> [3..6].
>> + * Bit 7 can be used for operations that apply to all engine 
>> classes&instances.
>> + */
>> +#define GUC_ENGINE_CLASS_SHIFT        0
>> +#define GUC_ENGINE_CLASS_MASK        (0x7 << GUC_ENGINE_CLASS_SHIFT)
>> +#define GUC_ENGINE_INSTANCE_SHIFT    3
>> +#define GUC_ENGINE_INSTANCE_MASK    (0xf << GUC_ENGINE_INSTANCE_SHIFT)
>> +#define GUC_ENGINE_ALL_INSTANCES    BIT(7)
>> +
>> +#define MAKE_GUC_ID(class, instance) \
>> +    (((class) << GUC_ENGINE_CLASS_SHIFT) | \
>> +     ((instance) << GUC_ENGINE_INSTANCE_SHIFT))
>> +
>> +#define GUC_ID_TO_ENGINE_CLASS(guc_id) \
>> +    (((guc_id) & GUC_ENGINE_CLASS_MASK) >> GUC_ENGINE_CLASS_SHIFT)
>> +#define GUC_ID_TO_ENGINE_INSTANCE(guc_id) \
>> +    (((guc_id) & GUC_ENGINE_INSTANCE_MASK) >> 
>> GUC_ENGINE_INSTANCE_SHIFT)
>> +
>>   /* Work item for submitting workloads into work queue of GuC. */
>>   struct guc_wq_item {
>>       u32 header;
>> @@ -338,7 +358,6 @@ struct guc_policies {
>>   /* GuC MMIO reg state struct */
>>     -#define GUC_REGSET_MAX_REGISTERS    64
>>   #define GUC_S3_SAVE_SPACE_PAGES        10
>
> The S3 define can also be removed
What was that? Is is actually obsolete and removed from the interface or 
just something that we don't use yet? Note that the line above was 
removed specifically because the regset definition has changed, it's not 
just some random tidy up.

>
>>     struct guc_mmio_reg {
>> @@ -348,28 +367,24 @@ struct guc_mmio_reg {
>>   #define GUC_REGSET_MASKED        (1 << 0)
>>   } __packed;
>>   -struct guc_mmio_regset {
>> -    struct guc_mmio_reg registers[GUC_REGSET_MAX_REGISTERS];
>> -    u32 values_valid;
>> -    u32 number_of_registers;
>> -} __packed;
>> -
>>   /* GuC register sets */
>> -struct guc_mmio_reg_state {
>> -    struct guc_mmio_regset 
>> engine_reg[GUC_MAX_ENGINE_CLASSES][GUC_MAX_INSTANCES_PER_CLASS];
>> -    u32 reserved[98];
>> +struct guc_mmio_reg_set {
>> +    u32 address;
>> +    union {
>> +        struct {
>> +            u32 count:16;
>> +            u32 reserved1:12;
>> +            u32 reserved2:4;
>
> I believe we usually try to avoid bitfield definitions in interfaces. 
> In this case, wouldn't it be simpler to just have a u16 count and a 
> u16 reserved, entirely skipping the union and the inner struct? I know 
> it wouldn't match the GuC file 1:1 but IMO it's an acceptable 
> difference given its triviality.
>
I thought our aim was to try to stay as close to the GuC spec as 
possible? This is not the only use of bitfields in this file in order to 
match the spec. The ultimate aim is to have this file be autogenerated 
from the GuC API spec. In that case, it will definitely match whatever 
reserved definitions are there.

John.


> With the define removed and this struct cleaned up:
>
> Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
>
> Daniele
>
>> +        };
>> +        u32 count_u32;
>> +    };
>>   } __packed;
>>     /* HW info */
>>   struct guc_gt_system_info {
>> -    u32 slice_enabled;
>> -    u32 rcs_enabled;
>> -    u32 reserved0;
>> -    u32 bcs_enabled;
>> -    u32 vdbox_enable_mask;
>> -    u32 vdbox_sfc_support_mask;
>> -    u32 vebox_enable_mask;
>> -    u32 reserved[9];
>> +    u8 
>> mapping_table[GUC_MAX_ENGINE_CLASSES][GUC_MAX_INSTANCES_PER_CLASS];
>> +    u32 engine_enabled_masks[GUC_MAX_ENGINE_CLASSES];
>> +    u32 generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_MAX];
>>   } __packed;
>>     /* Clients info */
>> @@ -390,15 +405,16 @@ struct guc_clients_info {
>>     /* GuC Additional Data Struct */
>>   struct guc_ads {
>> -    u32 reg_state_addr;
>> -    u32 reg_state_buffer;
>> +    struct guc_mmio_reg_set 
>> reg_state_list[GUC_MAX_ENGINE_CLASSES][GUC_MAX_INSTANCES_PER_CLASS];
>> +    u32 reserved0;
>>       u32 scheduler_policies;
>>       u32 gt_system_info;
>>       u32 clients_info;
>>       u32 control_data;
>>       u32 golden_context_lrca[GUC_MAX_ENGINE_CLASSES];
>>       u32 eng_state_size[GUC_MAX_ENGINE_CLASSES];
>> -    u32 reserved[16];
>> +    u32 private_data;
>> +    u32 reserved[15];
>>   } __packed;
>>     /* GuC logging structures */
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h 
>> b/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h
>> index 1949346e714e..b37fc2ffaef2 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h
>> @@ -118,6 +118,11 @@ struct guc_doorbell_info {
>>   #define   GEN8_DRB_VALID          (1<<0)
>>   #define GEN8_DRBREGU(x)            _MMIO(0x1000 + (x) * 8 + 4)
>>   +#define GEN12_DIST_DBS_POPULATED        _MMIO(0xd08)
>> +#define   GEN12_DOORBELLS_PER_SQIDI_SHIFT    16
>> +#define   GEN12_DOORBELLS_PER_SQIDI        (0xff)
>> +#define   GEN12_SQIDIS_DOORBELL_EXIST        (0xffff)
>> +
>>   #define DE_GUCRMR            _MMIO(0x44054)
>>     #define GUC_BCS_RCS_IER            _MMIO(0xC550)
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c 
>> b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
>> index 80e8b6c3bc8c..ee4ac3922277 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
>> @@ -44,23 +44,19 @@ void intel_uc_fw_change_status(struct intel_uc_fw 
>> *uc_fw,
>>    * List of required GuC and HuC binaries per-platform.
>>    * Must be ordered based on platform + revid, from newer to older.
>>    *
>> - * TGL 35.2 is interface-compatible with 33.0 for previous Gens. The 
>> deltas
>> - * between 33.0 and 35.2 are only related to new additions to 
>> support new Gen12
>> - * features.
>> - *
>>    * Note that RKL uses the same firmware as TGL.
>>    */
>>   #define INTEL_UC_FIRMWARE_DEFS(fw_def, guc_def, huc_def) \
>> -    fw_def(ROCKETLAKE,  0, guc_def(tgl, 35, 2, 0), huc_def(tgl,  7, 
>> 5, 0)) \
>> -    fw_def(TIGERLAKE,   0, guc_def(tgl, 35, 2, 0), huc_def(tgl,  7, 
>> 5, 0)) \
>> -    fw_def(ELKHARTLAKE, 0, guc_def(ehl, 33, 0, 4), huc_def(ehl,  9, 
>> 0, 0)) \
>> -    fw_def(ICELAKE,     0, guc_def(icl, 33, 0, 0), huc_def(icl,  9, 
>> 0, 0)) \
>> -    fw_def(COMETLAKE,   5, guc_def(cml, 33, 0, 0), huc_def(cml,  4, 
>> 0, 0)) \
>> -    fw_def(COFFEELAKE,  0, guc_def(kbl, 33, 0, 0), huc_def(kbl,  4, 
>> 0, 0)) \
>> -    fw_def(GEMINILAKE,  0, guc_def(glk, 33, 0, 0), huc_def(glk,  4, 
>> 0, 0)) \
>> -    fw_def(KABYLAKE,    0, guc_def(kbl, 33, 0, 0), huc_def(kbl,  4, 
>> 0, 0)) \
>> -    fw_def(BROXTON,     0, guc_def(bxt, 33, 0, 0), huc_def(bxt,  2, 
>> 0, 0)) \
>> -    fw_def(SKYLAKE,     0, guc_def(skl, 33, 0, 0), huc_def(skl,  2, 
>> 0, 0))
>> +    fw_def(ROCKETLAKE,  0, guc_def(tgl, 49, 0, 1), huc_def(tgl,  7, 
>> 5, 0)) \
>> +    fw_def(TIGERLAKE,   0, guc_def(tgl, 49, 0, 1), huc_def(tgl,  7, 
>> 5, 0)) \
>> +    fw_def(ELKHARTLAKE, 0, guc_def(ehl, 49, 0, 1), huc_def(ehl,  9, 
>> 0, 0)) \
>> +    fw_def(ICELAKE,     0, guc_def(icl, 49, 0, 1), huc_def(icl,  9, 
>> 0, 0)) \
>> +    fw_def(COMETLAKE,   5, guc_def(cml, 49, 0, 1), huc_def(cml,  4, 
>> 0, 0)) \
>> +    fw_def(COFFEELAKE,  0, guc_def(kbl, 49, 0, 1), huc_def(kbl,  4, 
>> 0, 0)) \
>> +    fw_def(GEMINILAKE,  0, guc_def(glk, 49, 0, 1), huc_def(glk,  4, 
>> 0, 0)) \
>> +    fw_def(KABYLAKE,    0, guc_def(kbl, 49, 0, 1), huc_def(kbl,  4, 
>> 0, 0)) \
>> +    fw_def(BROXTON,     0, guc_def(bxt, 49, 0, 1), huc_def(bxt,  2, 
>> 0, 0)) \
>> +    fw_def(SKYLAKE,     0, guc_def(skl, 49, 0, 1), huc_def(skl,  2, 
>> 0, 0))
>>     #define __MAKE_UC_FW_PATH(prefix_, name_, major_, minor_, patch_) \
>>       "i915/" \
>> @@ -371,6 +367,9 @@ int intel_uc_fw_fetch(struct intel_uc_fw *uc_fw)
>>           }
>>       }
>>   +    if (uc_fw->type == INTEL_UC_FW_TYPE_GUC)
>> +        uc_fw->private_data_size = css->private_data_size;
>> +
>>       obj = i915_gem_object_create_shmem_from_data(i915, fw->data, 
>> fw->size);
>>       if (IS_ERR(obj)) {
>>           err = PTR_ERR(obj);
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h 
>> b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
>> index 23d3a423ac0f..99bb1fe1af66 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
>> @@ -88,6 +88,8 @@ struct intel_uc_fw {
>>         u32 rsa_size;
>>       u32 ucode_size;
>> +
>> +    u32 private_data_size;
>>   };
>>     #ifdef CONFIG_DRM_I915_DEBUG_GUC
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h 
>> b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h
>> index 029214cdedd5..e41ffc7a7fbc 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h
>> @@ -69,7 +69,11 @@ struct uc_css_header {
>>   #define CSS_SW_VERSION_UC_MAJOR        (0xFF << 16)
>>   #define CSS_SW_VERSION_UC_MINOR        (0xFF << 8)
>>   #define CSS_SW_VERSION_UC_PATCH        (0xFF << 0)
>> -    u32 reserved[14];
>> +    u32 reserved0[13];
>> +    union {
>> +        u32 private_data_size; /* only applies to GuC */
>> +        u32 reserved1;
>> +    };
>>       u32 header_info;
>>   } __packed;
>>   static_assert(sizeof(struct uc_css_header) == 128);
>

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

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

* Re: [Intel-gfx] [PATCH 1/4] drm/i915/guc: Update to use firmware v49.0.1
  2020-09-22  0:38     ` John Harrison
@ 2020-09-22  1:01       ` Daniele Ceraolo Spurio
  0 siblings, 0 replies; 13+ messages in thread
From: Daniele Ceraolo Spurio @ 2020-09-22  1:01 UTC (permalink / raw)
  To: John Harrison, Intel-GFX; +Cc: Oscar Mateo, Michal Winiarski, Michel Thierry



On 9/21/2020 5:38 PM, John Harrison wrote:
> On 9/21/2020 17:24, Daniele Ceraolo Spurio wrote:
>> On 9/21/2020 10:54 AM, John.C.Harrison@Intel.com wrote:
>>> From: John Harrison <John.C.Harrison@Intel.com>
>>>
>>> The latest GuC firmware includes a number of interface changes that
>>> require driver updates to match.
>>>
>>> * Starting from Gen11, the ID to be provided to GuC needs to contain
>>>    the engine class in bits [0..2] and the instance in bits [3..6].
>>>
>>>    NOTE: this patch breaks pointer dereferences in some existing GuC
>>>    functions that use the guc_id to dereference arrays but these 
>>> functions
>>>    are not used for now as we have GuC submission disabled and we will
>>>    update these functions in follow up patch which requires new IDs.
>>>
>>> * The new GuC requires the additional data structure (ADS) and 
>>> associated
>>>    'private_data' pointer to be setup. This is basically a scratch area
>>>    of memory that the GuC owns. The size is read from the CSS header.
>>>
>>> * There is now a physical to logical engine mapping table in the ADS
>>>    which needs to be configured in order for the firmware to load. For
>>>    now, the table is initialised with a 1 to 1 mapping.
>>>
>>> * GUC_CTL_CTXINFO has been removed from the initialization params.
>>>
>>> * reg_state_buffer is maintained internally by the GuC as part of
>>>    the private data.
>>>
>>> * The ADS layout has changed significantly. This patch updates the
>>>    shared structure and also adds better documentation of the layout.
>>>
>>> * While i915 does not use GuC doorbells, the firmware now requires
>>>    that some initialisation is done.
>>>
>>> * The number of engine classes and instances supported in the ADS has
>>>    been increased.
>>>
>>> Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
>>> Signed-off-by: Matthew Brost <matthew.brost@intel.com>
>>> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
>>> Signed-off-by: Oscar Mateo <oscar.mateo@intel.com>
>>> Signed-off-by: Michel Thierry <michel.thierry@intel.com>
>>> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>>> Cc: Michal Winiarski <michal.winiarski@intel.com>
>>> Cc: Tomasz Lis <tomasz.lis@intel.com>
>>> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
>>> ---
>>>   drivers/gpu/drm/i915/gt/intel_engine_cs.c    |   3 +-
>>>   drivers/gpu/drm/i915/gt/uc/intel_guc.c       |  18 ---
>>>   drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c   | 131 
>>> +++++++++++++++----
>>>   drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h  |  82 +++++++-----
>>>   drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h   |   5 +
>>>   drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c     |  27 ++--
>>>   drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h     |   2 +
>>>   drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h |   6 +-
>>>   8 files changed, 182 insertions(+), 92 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c 
>>> b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
>>> index 1985772152bf..3fb52fac0d5d 100644
>>> --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
>>> +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
>>> @@ -305,8 +305,9 @@ static int intel_engine_setup(struct intel_gt 
>>> *gt, enum intel_engine_id id)
>>>       engine->i915 = i915;
>>>       engine->gt = gt;
>>>       engine->uncore = gt->uncore;
>>> -    engine->hw_id = engine->guc_id = info->hw_id;
>>>       engine->mmio_base = __engine_mmio_base(i915, info->mmio_bases);
>>> +    engine->hw_id = info->hw_id;
>>> +    engine->guc_id = MAKE_GUC_ID(info->class, info->instance);
>>>         engine->class = info->class;
>>>       engine->instance = info->instance;
>>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c 
>>> b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
>>> index 942c7c187adb..6909da1e1a73 100644
>>> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c
>>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
>>> @@ -213,23 +213,6 @@ static u32 guc_ctl_feature_flags(struct 
>>> intel_guc *guc)
>>>       return flags;
>>>   }
>>>   -static u32 guc_ctl_ctxinfo_flags(struct intel_guc *guc)
>>> -{
>>> -    u32 flags = 0;
>>> -
>>> -    if (intel_guc_submission_is_used(guc)) {
>>> -        u32 ctxnum, base;
>>> -
>>> -        base = intel_guc_ggtt_offset(guc, guc->stage_desc_pool);
>>> -        ctxnum = GUC_MAX_STAGE_DESCRIPTORS / 16;
>>> -
>>> -        base >>= PAGE_SHIFT;
>>> -        flags |= (base << GUC_CTL_BASE_ADDR_SHIFT) |
>>> -            (ctxnum << GUC_CTL_CTXNUM_IN16_SHIFT);
>>> -    }
>>> -    return flags;
>>> -}
>>> -
>>>   static u32 guc_ctl_log_params_flags(struct intel_guc *guc)
>>>   {
>>>       u32 offset = intel_guc_ggtt_offset(guc, guc->log.vma) >> 
>>> PAGE_SHIFT;
>>> @@ -291,7 +274,6 @@ static void guc_init_params(struct intel_guc *guc)
>>>         BUILD_BUG_ON(sizeof(guc->params) != GUC_CTL_MAX_DWORDS * 
>>> sizeof(u32));
>>>   -    params[GUC_CTL_CTXINFO] = guc_ctl_ctxinfo_flags(guc);
>>>       params[GUC_CTL_LOG_PARAMS] = guc_ctl_log_params_flags(guc);
>>>       params[GUC_CTL_FEATURE] = guc_ctl_feature_flags(guc);
>>>       params[GUC_CTL_DEBUG] = guc_ctl_debug_flags(guc);
>>> 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 d44061033f23..7950d28beb8c 100644
>>> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
>>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
>>> @@ -10,11 +10,52 @@
>>>     /*
>>>    * The Additional Data Struct (ADS) has pointers for different 
>>> buffers used by
>>> - * the GuC. One single gem object contains the ADS struct itself 
>>> (guc_ads), the
>>> - * scheduling policies (guc_policies), a structure describing a 
>>> collection of
>>> - * register sets (guc_mmio_reg_state) and some extra pages for the 
>>> GuC to save
>>> - * its internal state for sleep.
>>> + * the GuC. One single gem object contains the ADS struct itself 
>>> (guc_ads) and
>>> + * all the extra buffers indirectly linked via the ADS struct's 
>>> entries.
>>> + *
>>> + * Layout of the ADS blob allocated for the GuC:
>>> + *
>>> + *      +---------------------------------------+ <== base
>>> + *      | guc_ads                               |
>>> + *      +---------------------------------------+
>>> + *      | guc_policies                          |
>>> + *      +---------------------------------------+
>>> + *      | guc_gt_system_info                    |
>>> + *      +---------------------------------------+
>>> + *      | guc_clients_info                      |
>>> + *      +---------------------------------------+
>>> + *      | guc_ct_pool_entry[size]               |
>>> + *      +---------------------------------------+
>>> + *      | padding                               |
>>> + *      +---------------------------------------+ <== 4K aligned
>>> + *      | private data                          |
>>> + *      +---------------------------------------+
>>> + *      | padding                               |
>>> + *      +---------------------------------------+ <== 4K aligned
>>>    */
>>> +struct __guc_ads_blob {
>>> +    struct guc_ads ads;
>>> +    struct guc_policies policies;
>>> +    struct guc_gt_system_info system_info;
>>> +    struct guc_clients_info clients_info;
>>> +    struct guc_ct_pool_entry ct_pool[GUC_CT_POOL_SIZE];
>>> +} __packed;
>>> +
>>> +static u32 guc_ads_private_data_size(struct intel_guc *guc)
>>> +{
>>> +    return PAGE_ALIGN(guc->fw.private_data_size);
>>> +}
>>> +
>>> +static u32 guc_ads_private_data_offset(struct intel_guc *guc)
>>> +{
>>> +    return PAGE_ALIGN(sizeof(struct __guc_ads_blob));
>>> +}
>>> +
>>> +static u32 guc_ads_blob_size(struct intel_guc *guc)
>>> +{
>>> +    return guc_ads_private_data_offset(guc) +
>>> +           guc_ads_private_data_size(guc);
>>> +}
>>>     static void guc_policy_init(struct guc_policy *policy)
>>>   {
>>> @@ -48,26 +89,37 @@ static void guc_ct_pool_entries_init(struct 
>>> guc_ct_pool_entry *pool, u32 num)
>>>       memset(pool, 0, num * sizeof(*pool));
>>>   }
>>>   +static void guc_mapping_table_init(struct intel_gt *gt,
>>> +                   struct guc_gt_system_info *system_info)
>>> +{
>>> +    unsigned int i, j;
>>> +    struct intel_engine_cs *engine;
>>> +    enum intel_engine_id id;
>>> +
>>> +    /* Table must be set to invalid values for entries not used */
>>> +    for (i = 0; i < GUC_MAX_ENGINE_CLASSES; ++i)
>>> +        for (j = 0; j < GUC_MAX_INSTANCES_PER_CLASS; ++j)
>>> +            system_info->mapping_table[i][j] =
>>> +                GUC_MAX_INSTANCES_PER_CLASS;
>>> +
>>> +    for_each_engine(engine, gt, id) {
>>> +        u8 guc_class = engine->class;
>>> +
>>> + system_info->mapping_table[guc_class][engine->instance] =
>>> +            engine->instance;
>>> +    }
>>> +}
>>> +
>>>   /*
>>>    * The first 80 dwords of the register state context, containing the
>>>    * execlists and ppgtt registers.
>>>    */
>>>   #define LR_HW_CONTEXT_SIZE    (80 * sizeof(u32))
>>>   -/* The ads obj includes the struct itself and buffers passed to 
>>> GuC */
>>> -struct __guc_ads_blob {
>>> -    struct guc_ads ads;
>>> -    struct guc_policies policies;
>>> -    struct guc_mmio_reg_state reg_state;
>>> -    struct guc_gt_system_info system_info;
>>> -    struct guc_clients_info clients_info;
>>> -    struct guc_ct_pool_entry ct_pool[GUC_CT_POOL_SIZE];
>>> -    u8 reg_state_buffer[GUC_S3_SAVE_SPACE_PAGES * PAGE_SIZE];
>>> -} __packed;
>>> -
>>>   static void __guc_ads_init(struct intel_guc *guc)
>>>   {
>>>       struct intel_gt *gt = guc_to_gt(guc);
>>> +    struct drm_i915_private *i915 = gt->i915;
>>>       struct __guc_ads_blob *blob = guc->ads_blob;
>>>       const u32 skipped_size = LRC_PPHWSP_SZ * PAGE_SIZE + 
>>> LR_HW_CONTEXT_SIZE;
>>>       u32 base;
>>> @@ -99,13 +151,25 @@ static void __guc_ads_init(struct intel_guc *guc)
>>>       }
>>>         /* System info */
>>> -    blob->system_info.slice_enabled = 
>>> hweight8(gt->info.sseu.slice_mask);
>>> -    blob->system_info.rcs_enabled = 1;
>>> -    blob->system_info.bcs_enabled = 1;
>>> +    blob->system_info.engine_enabled_masks[RENDER_CLASS] = 1;
>>> + blob->system_info.engine_enabled_masks[COPY_ENGINE_CLASS] = 1;
>>> + blob->system_info.engine_enabled_masks[VIDEO_DECODE_CLASS] = 
>>> VDBOX_MASK(gt);
>>> + blob->system_info.engine_enabled_masks[VIDEO_ENHANCEMENT_CLASS] = 
>>> VEBOX_MASK(gt);
>>> +
>>> + 
>>> blob->system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_SLICE_ENABLED] 
>>> =
>>> +        hweight8(gt->info.sseu.slice_mask);
>>> + 
>>> blob->system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_VDBOX_SFC_SUPPORT_MASK] 
>>> =
>>> +        gt->info.vdbox_sfc_access;
>>> +
>>> +    if (INTEL_GEN(i915) >= 12 && !IS_DGFX(i915)) {
>>> +        u32 distdbreg = intel_uncore_read(gt->uncore,
>>> +                          GEN12_DIST_DBS_POPULATED);
>>> + 
>>> blob->system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_DOORBELL_COUNT_PER_SQIDI] 
>>> =
>>> +            ((distdbreg >> GEN12_DOORBELLS_PER_SQIDI_SHIFT) &
>>> +             GEN12_DOORBELLS_PER_SQIDI) + 1;
>>> +    }
>>>   -    blob->system_info.vdbox_enable_mask = VDBOX_MASK(gt);
>>> -    blob->system_info.vebox_enable_mask = VEBOX_MASK(gt);
>>> -    blob->system_info.vdbox_sfc_support_mask = 
>>> gt->info.vdbox_sfc_access;
>>> +    guc_mapping_table_init(guc_to_gt(guc), &blob->system_info);
>>>         base = intel_guc_ggtt_offset(guc, guc->ads_vma);
>>>   @@ -118,11 +182,12 @@ static void __guc_ads_init(struct intel_guc 
>>> *guc)
>>>         /* ADS */
>>>       blob->ads.scheduler_policies = base + ptr_offset(blob, policies);
>>> -    blob->ads.reg_state_buffer = base + ptr_offset(blob, 
>>> reg_state_buffer);
>>> -    blob->ads.reg_state_addr = base + ptr_offset(blob, reg_state);
>>>       blob->ads.gt_system_info = base + ptr_offset(blob, system_info);
>>>       blob->ads.clients_info = base + ptr_offset(blob, clients_info);
>>>   +    /* Private Data */
>>> +    blob->ads.private_data = base + guc_ads_private_data_offset(guc);
>>> +
>>>       i915_gem_object_flush_map(guc->ads_vma->obj);
>>>   }
>>>   @@ -135,14 +200,15 @@ static void __guc_ads_init(struct intel_guc 
>>> *guc)
>>>    */
>>>   int intel_guc_ads_create(struct intel_guc *guc)
>>>   {
>>> -    const u32 size = PAGE_ALIGN(sizeof(struct __guc_ads_blob));
>>> +    u32 size;
>>>       int ret;
>>>         GEM_BUG_ON(guc->ads_vma);
>>>   +    size = guc_ads_blob_size(guc);
>>> +
>>>       ret = intel_guc_allocate_and_map_vma(guc, size, &guc->ads_vma,
>>>                            (void **)&guc->ads_blob);
>>> -
>>>       if (ret)
>>>           return ret;
>>>   @@ -156,6 +222,18 @@ void intel_guc_ads_destroy(struct intel_guc 
>>> *guc)
>>>       i915_vma_unpin_and_release(&guc->ads_vma, I915_VMA_RELEASE_MAP);
>>>   }
>>>   +static void guc_ads_private_data_reset(struct intel_guc *guc)
>>> +{
>>> +    u32 size;
>>> +
>>> +    size = guc_ads_private_data_size(guc);
>>> +    if (!size)
>>> +        return;
>>> +
>>> +    memset((void *)guc->ads_blob + 
>>> guc_ads_private_data_offset(guc), 0,
>>> +           size);
>>> +}
>>> +
>>>   /**
>>>    * intel_guc_ads_reset() - prepares GuC Additional Data Struct for 
>>> reuse
>>>    * @guc: intel_guc struct
>>> @@ -168,5 +246,8 @@ void intel_guc_ads_reset(struct intel_guc *guc)
>>>   {
>>>       if (!guc->ads_vma)
>>>           return;
>>> +
>>>       __guc_ads_init(guc);
>>> +
>>> +    guc_ads_private_data_reset(guc);
>>>   }
>>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h 
>>> b/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h
>>> index a6b733c146c9..391053118869 100644
>>> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h
>>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h
>>> @@ -26,8 +26,8 @@
>>>   #define GUC_VIDEO_ENGINE2        4
>>>   #define GUC_MAX_ENGINES_NUM        (GUC_VIDEO_ENGINE2 + 1)
>>>   -#define GUC_MAX_ENGINE_CLASSES        5
>>> -#define GUC_MAX_INSTANCES_PER_CLASS    16
>>> +#define GUC_MAX_ENGINE_CLASSES        16
>>> +#define GUC_MAX_INSTANCES_PER_CLASS    32
>>>     #define GUC_DOORBELL_INVALID        256
>>>   @@ -62,12 +62,7 @@
>>>   #define GUC_STAGE_DESC_ATTR_PCH        BIT(6)
>>>   #define GUC_STAGE_DESC_ATTR_TERMINATED    BIT(7)
>>>   -/* New GuC control data */
>>> -#define GUC_CTL_CTXINFO            0
>>> -#define   GUC_CTL_CTXNUM_IN16_SHIFT    0
>>> -#define   GUC_CTL_BASE_ADDR_SHIFT    12
>>> -
>>> -#define GUC_CTL_LOG_PARAMS        1
>>> +#define GUC_CTL_LOG_PARAMS        0
>>>   #define   GUC_LOG_VALID            (1 << 0)
>>>   #define   GUC_LOG_NOTIFY_ON_HALF_FULL    (1 << 1)
>>>   #define   GUC_LOG_ALLOC_IN_MEGABYTE    (1 << 3)
>>> @@ -79,11 +74,11 @@
>>>   #define   GUC_LOG_ISR_MASK            (0x7 << GUC_LOG_ISR_SHIFT)
>>>   #define   GUC_LOG_BUF_ADDR_SHIFT    12
>>>   -#define GUC_CTL_WA            2
>>> -#define GUC_CTL_FEATURE            3
>>> +#define GUC_CTL_WA            1
>>> +#define GUC_CTL_FEATURE            2
>>>   #define   GUC_CTL_DISABLE_SCHEDULER    (1 << 14)
>>>   -#define GUC_CTL_DEBUG            4
>>> +#define GUC_CTL_DEBUG            3
>>>   #define   GUC_LOG_VERBOSITY_SHIFT    0
>>>   #define   GUC_LOG_VERBOSITY_LOW        (0 << GUC_LOG_VERBOSITY_SHIFT)
>>>   #define   GUC_LOG_VERBOSITY_MED        (1 << GUC_LOG_VERBOSITY_SHIFT)
>>> @@ -97,12 +92,37 @@
>>>   #define   GUC_LOG_DISABLED        (1 << 6)
>>>   #define   GUC_PROFILE_ENABLED        (1 << 7)
>>>   -#define GUC_CTL_ADS            5
>>> +#define GUC_CTL_ADS            4
>>>   #define   GUC_ADS_ADDR_SHIFT        1
>>>   #define   GUC_ADS_ADDR_MASK        (0xFFFFF << GUC_ADS_ADDR_SHIFT)
>>>     #define GUC_CTL_MAX_DWORDS        (SOFT_SCRATCH_COUNT - 2) /* 
>>> [1..14] */
>>>   +/* Generic GT SysInfo data types */
>>> +#define GUC_GENERIC_GT_SYSINFO_SLICE_ENABLED        0
>>> +#define GUC_GENERIC_GT_SYSINFO_VDBOX_SFC_SUPPORT_MASK    1
>>> +#define GUC_GENERIC_GT_SYSINFO_DOORBELL_COUNT_PER_SQIDI    2
>>> +#define GUC_GENERIC_GT_SYSINFO_MAX            16
>>
>> nit: these names are long. Maybe drop the "GENERIC"? it's not like 
>> there is a specialized_info array :)
> The name is to match the GuC spec. And the generic refers to it not 
> being engine specific. As in, there is an engine class array and the 
> generic GT info array. So actually, yes there is a specialised info 
> array already.

I meant there not being another non-generic GT SYSINFO array we could 
get confused with. anyway this was not a blocker.

>
>
>
>>
>>> +
>>> +/*
>>> + * The class goes in bits [0..2] of the GuC ID, the instance in 
>>> bits [3..6].
>>> + * Bit 7 can be used for operations that apply to all engine 
>>> classes&instances.
>>> + */
>>> +#define GUC_ENGINE_CLASS_SHIFT        0
>>> +#define GUC_ENGINE_CLASS_MASK        (0x7 << GUC_ENGINE_CLASS_SHIFT)
>>> +#define GUC_ENGINE_INSTANCE_SHIFT    3
>>> +#define GUC_ENGINE_INSTANCE_MASK    (0xf << GUC_ENGINE_INSTANCE_SHIFT)
>>> +#define GUC_ENGINE_ALL_INSTANCES    BIT(7)
>>> +
>>> +#define MAKE_GUC_ID(class, instance) \
>>> +    (((class) << GUC_ENGINE_CLASS_SHIFT) | \
>>> +     ((instance) << GUC_ENGINE_INSTANCE_SHIFT))
>>> +
>>> +#define GUC_ID_TO_ENGINE_CLASS(guc_id) \
>>> +    (((guc_id) & GUC_ENGINE_CLASS_MASK) >> GUC_ENGINE_CLASS_SHIFT)
>>> +#define GUC_ID_TO_ENGINE_INSTANCE(guc_id) \
>>> +    (((guc_id) & GUC_ENGINE_INSTANCE_MASK) >> 
>>> GUC_ENGINE_INSTANCE_SHIFT)
>>> +
>>>   /* Work item for submitting workloads into work queue of GuC. */
>>>   struct guc_wq_item {
>>>       u32 header;
>>> @@ -338,7 +358,6 @@ struct guc_policies {
>>>   /* GuC MMIO reg state struct */
>>>     -#define GUC_REGSET_MAX_REGISTERS    64
>>>   #define GUC_S3_SAVE_SPACE_PAGES        10
>>
>> The S3 define can also be removed
> What was that? Is is actually obsolete and removed from the interface 
> or just something that we don't use yet? Note that the line above was 
> removed specifically because the regset definition has changed, it's 
> not just some random tidy up.

The usage of this define is removed in this patch as part of the changes 
in the ADS, so the define should go as well.

>
>>
>>>     struct guc_mmio_reg {
>>> @@ -348,28 +367,24 @@ struct guc_mmio_reg {
>>>   #define GUC_REGSET_MASKED        (1 << 0)
>>>   } __packed;
>>>   -struct guc_mmio_regset {
>>> -    struct guc_mmio_reg registers[GUC_REGSET_MAX_REGISTERS];
>>> -    u32 values_valid;
>>> -    u32 number_of_registers;
>>> -} __packed;
>>> -
>>>   /* GuC register sets */
>>> -struct guc_mmio_reg_state {
>>> -    struct guc_mmio_regset 
>>> engine_reg[GUC_MAX_ENGINE_CLASSES][GUC_MAX_INSTANCES_PER_CLASS];
>>> -    u32 reserved[98];
>>> +struct guc_mmio_reg_set {
>>> +    u32 address;
>>> +    union {
>>> +        struct {
>>> +            u32 count:16;
>>> +            u32 reserved1:12;
>>> +            u32 reserved2:4;
>>
>> I believe we usually try to avoid bitfield definitions in interfaces. 
>> In this case, wouldn't it be simpler to just have a u16 count and a 
>> u16 reserved, entirely skipping the union and the inner struct? I 
>> know it wouldn't match the GuC file 1:1 but IMO it's an acceptable 
>> difference given its triviality.
>>
> I thought our aim was to try to stay as close to the GuC spec as 
> possible? This is not the only use of bitfields in this file in order 
> to match the spec. The ultimate aim is to have this file be 
> autogenerated from the GuC API spec. In that case, it will definitely 
> match whatever reserved definitions are there.

The problem with bitfields is that they don't work if CPU and GuC have 
different endianness, or if the GuC compiler decides to order the fields 
in a different way from gcc, both of which are possible (although very 
very unlikely) scenarios when discrete cards are added to the mix. I'm 
pretty sure we can auto-generate a series of masks and shifts for those 
fields, or even better see if they can be removed from the GuC 
interface, especially in cases like this one where they're not really 
required.

Daniele

>
> John.
>
>
>> With the define removed and this struct cleaned up:
>>
>> Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
>>
>> Daniele
>>
>>> +        };
>>> +        u32 count_u32;
>>> +    };
>>>   } __packed;
>>>     /* HW info */
>>>   struct guc_gt_system_info {
>>> -    u32 slice_enabled;
>>> -    u32 rcs_enabled;
>>> -    u32 reserved0;
>>> -    u32 bcs_enabled;
>>> -    u32 vdbox_enable_mask;
>>> -    u32 vdbox_sfc_support_mask;
>>> -    u32 vebox_enable_mask;
>>> -    u32 reserved[9];
>>> +    u8 
>>> mapping_table[GUC_MAX_ENGINE_CLASSES][GUC_MAX_INSTANCES_PER_CLASS];
>>> +    u32 engine_enabled_masks[GUC_MAX_ENGINE_CLASSES];
>>> +    u32 generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_MAX];
>>>   } __packed;
>>>     /* Clients info */
>>> @@ -390,15 +405,16 @@ struct guc_clients_info {
>>>     /* GuC Additional Data Struct */
>>>   struct guc_ads {
>>> -    u32 reg_state_addr;
>>> -    u32 reg_state_buffer;
>>> +    struct guc_mmio_reg_set 
>>> reg_state_list[GUC_MAX_ENGINE_CLASSES][GUC_MAX_INSTANCES_PER_CLASS];
>>> +    u32 reserved0;
>>>       u32 scheduler_policies;
>>>       u32 gt_system_info;
>>>       u32 clients_info;
>>>       u32 control_data;
>>>       u32 golden_context_lrca[GUC_MAX_ENGINE_CLASSES];
>>>       u32 eng_state_size[GUC_MAX_ENGINE_CLASSES];
>>> -    u32 reserved[16];
>>> +    u32 private_data;
>>> +    u32 reserved[15];
>>>   } __packed;
>>>     /* GuC logging structures */
>>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h 
>>> b/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h
>>> index 1949346e714e..b37fc2ffaef2 100644
>>> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h
>>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h
>>> @@ -118,6 +118,11 @@ struct guc_doorbell_info {
>>>   #define   GEN8_DRB_VALID          (1<<0)
>>>   #define GEN8_DRBREGU(x)            _MMIO(0x1000 + (x) * 8 + 4)
>>>   +#define GEN12_DIST_DBS_POPULATED        _MMIO(0xd08)
>>> +#define   GEN12_DOORBELLS_PER_SQIDI_SHIFT    16
>>> +#define   GEN12_DOORBELLS_PER_SQIDI        (0xff)
>>> +#define   GEN12_SQIDIS_DOORBELL_EXIST        (0xffff)
>>> +
>>>   #define DE_GUCRMR            _MMIO(0x44054)
>>>     #define GUC_BCS_RCS_IER            _MMIO(0xC550)
>>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c 
>>> b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
>>> index 80e8b6c3bc8c..ee4ac3922277 100644
>>> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
>>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
>>> @@ -44,23 +44,19 @@ void intel_uc_fw_change_status(struct 
>>> intel_uc_fw *uc_fw,
>>>    * List of required GuC and HuC binaries per-platform.
>>>    * Must be ordered based on platform + revid, from newer to older.
>>>    *
>>> - * TGL 35.2 is interface-compatible with 33.0 for previous Gens. 
>>> The deltas
>>> - * between 33.0 and 35.2 are only related to new additions to 
>>> support new Gen12
>>> - * features.
>>> - *
>>>    * Note that RKL uses the same firmware as TGL.
>>>    */
>>>   #define INTEL_UC_FIRMWARE_DEFS(fw_def, guc_def, huc_def) \
>>> -    fw_def(ROCKETLAKE,  0, guc_def(tgl, 35, 2, 0), huc_def(tgl,  7, 
>>> 5, 0)) \
>>> -    fw_def(TIGERLAKE,   0, guc_def(tgl, 35, 2, 0), huc_def(tgl,  7, 
>>> 5, 0)) \
>>> -    fw_def(ELKHARTLAKE, 0, guc_def(ehl, 33, 0, 4), huc_def(ehl,  9, 
>>> 0, 0)) \
>>> -    fw_def(ICELAKE,     0, guc_def(icl, 33, 0, 0), huc_def(icl,  9, 
>>> 0, 0)) \
>>> -    fw_def(COMETLAKE,   5, guc_def(cml, 33, 0, 0), huc_def(cml,  4, 
>>> 0, 0)) \
>>> -    fw_def(COFFEELAKE,  0, guc_def(kbl, 33, 0, 0), huc_def(kbl,  4, 
>>> 0, 0)) \
>>> -    fw_def(GEMINILAKE,  0, guc_def(glk, 33, 0, 0), huc_def(glk,  4, 
>>> 0, 0)) \
>>> -    fw_def(KABYLAKE,    0, guc_def(kbl, 33, 0, 0), huc_def(kbl,  4, 
>>> 0, 0)) \
>>> -    fw_def(BROXTON,     0, guc_def(bxt, 33, 0, 0), huc_def(bxt,  2, 
>>> 0, 0)) \
>>> -    fw_def(SKYLAKE,     0, guc_def(skl, 33, 0, 0), huc_def(skl,  2, 
>>> 0, 0))
>>> +    fw_def(ROCKETLAKE,  0, guc_def(tgl, 49, 0, 1), huc_def(tgl,  7, 
>>> 5, 0)) \
>>> +    fw_def(TIGERLAKE,   0, guc_def(tgl, 49, 0, 1), huc_def(tgl,  7, 
>>> 5, 0)) \
>>> +    fw_def(ELKHARTLAKE, 0, guc_def(ehl, 49, 0, 1), huc_def(ehl,  9, 
>>> 0, 0)) \
>>> +    fw_def(ICELAKE,     0, guc_def(icl, 49, 0, 1), huc_def(icl,  9, 
>>> 0, 0)) \
>>> +    fw_def(COMETLAKE,   5, guc_def(cml, 49, 0, 1), huc_def(cml,  4, 
>>> 0, 0)) \
>>> +    fw_def(COFFEELAKE,  0, guc_def(kbl, 49, 0, 1), huc_def(kbl,  4, 
>>> 0, 0)) \
>>> +    fw_def(GEMINILAKE,  0, guc_def(glk, 49, 0, 1), huc_def(glk,  4, 
>>> 0, 0)) \
>>> +    fw_def(KABYLAKE,    0, guc_def(kbl, 49, 0, 1), huc_def(kbl,  4, 
>>> 0, 0)) \
>>> +    fw_def(BROXTON,     0, guc_def(bxt, 49, 0, 1), huc_def(bxt,  2, 
>>> 0, 0)) \
>>> +    fw_def(SKYLAKE,     0, guc_def(skl, 49, 0, 1), huc_def(skl,  2, 
>>> 0, 0))
>>>     #define __MAKE_UC_FW_PATH(prefix_, name_, major_, minor_, patch_) \
>>>       "i915/" \
>>> @@ -371,6 +367,9 @@ int intel_uc_fw_fetch(struct intel_uc_fw *uc_fw)
>>>           }
>>>       }
>>>   +    if (uc_fw->type == INTEL_UC_FW_TYPE_GUC)
>>> +        uc_fw->private_data_size = css->private_data_size;
>>> +
>>>       obj = i915_gem_object_create_shmem_from_data(i915, fw->data, 
>>> fw->size);
>>>       if (IS_ERR(obj)) {
>>>           err = PTR_ERR(obj);
>>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h 
>>> b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
>>> index 23d3a423ac0f..99bb1fe1af66 100644
>>> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
>>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
>>> @@ -88,6 +88,8 @@ struct intel_uc_fw {
>>>         u32 rsa_size;
>>>       u32 ucode_size;
>>> +
>>> +    u32 private_data_size;
>>>   };
>>>     #ifdef CONFIG_DRM_I915_DEBUG_GUC
>>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h 
>>> b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h
>>> index 029214cdedd5..e41ffc7a7fbc 100644
>>> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h
>>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h
>>> @@ -69,7 +69,11 @@ struct uc_css_header {
>>>   #define CSS_SW_VERSION_UC_MAJOR        (0xFF << 16)
>>>   #define CSS_SW_VERSION_UC_MINOR        (0xFF << 8)
>>>   #define CSS_SW_VERSION_UC_PATCH        (0xFF << 0)
>>> -    u32 reserved[14];
>>> +    u32 reserved0[13];
>>> +    union {
>>> +        u32 private_data_size; /* only applies to GuC */
>>> +        u32 reserved1;
>>> +    };
>>>       u32 header_info;
>>>   } __packed;
>>>   static_assert(sizeof(struct uc_css_header) == 128);
>>
>

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

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

* [Intel-gfx] [PATCH 0/4] drm/i915/guc: Update to GuC v49
@ 2020-09-25 23:26 John.C.Harrison
  0 siblings, 0 replies; 13+ messages in thread
From: John.C.Harrison @ 2020-09-25 23:26 UTC (permalink / raw)
  To: Intel-GFX

From: John Harrison <John.C.Harrison@Intel.com>

Update to the latest GuC firmware and enable by default.

Signed-off-by: John Harrison <John.C.Harrison@Intel.com>


Daniele Ceraolo Spurio (1):
  drm/i915/uc: turn on GuC/HuC auto mode by default

John Harrison (3):
  drm/i915/guc: Update to use firmware v49.0.1
  drm/i915/guc: Improved reporting when GuC fails to load
  drm/i915/guc: Clear pointers on free

 drivers/gpu/drm/i915/gt/intel_engine_cs.c    |   3 +-
 drivers/gpu/drm/i915/gt/uc/intel_guc.c       |  18 ---
 drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c   | 132 +++++++++++++++----
 drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c    |   1 +
 drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c    |  31 +++--
 drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h  |  80 +++++------
 drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h   |   5 +
 drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c     |  27 ++--
 drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h     |   2 +
 drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h |   6 +-
 drivers/gpu/drm/i915/i915_params.h           |   2 +-
 11 files changed, 201 insertions(+), 106 deletions(-)

-- 
2.25.1

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

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

end of thread, other threads:[~2020-09-25 23:26 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-09-21 17:54 [Intel-gfx] [PATCH 0/4] drm/i915/guc: Update to GuC v49 John.C.Harrison
2020-09-21 17:54 ` [Intel-gfx] [PATCH 1/4] drm/i915/guc: Update to use firmware v49.0.1 John.C.Harrison
2020-09-22  0:24   ` Daniele Ceraolo Spurio
2020-09-22  0:38     ` John Harrison
2020-09-22  1:01       ` Daniele Ceraolo Spurio
2020-09-21 17:54 ` [Intel-gfx] [PATCH 2/4] drm/i915/guc: Improved reporting when GuC fails to load John.C.Harrison
2020-09-22  0:33   ` Daniele Ceraolo Spurio
2020-09-21 17:54 ` [Intel-gfx] [PATCH 3/4] drm/i915/guc: Clear pointers on free John.C.Harrison
2020-09-21 17:54 ` [Intel-gfx] [PATCH 4/4] drm/i915/uc: turn on GuC/HuC auto mode by default John.C.Harrison
2020-09-21 18:24 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915/guc: Update to GuC v49 Patchwork
2020-09-21 18:49 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2020-09-21 19:59 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
  -- strict thread matches above, loose matches on Subject: below --
2020-09-25 23:26 [Intel-gfx] [PATCH 0/4] " John.C.Harrison

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox