[igt-dev] [PATCH i-g-t 7/7] lib: intel: store simulator device id for aubdump

Lionel Landwerlin lionel.g.landwerlin at intel.com
Thu Jun 14 10:32:52 UTC 2018


Aubdump writes down the simulator device id in the aub file. Given
it's different for each device, better store it in the device
database.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
---
 lib/Makefile.am         |  1 +
 lib/intel_aub.h         |  2 +-
 lib/intel_chipset.h     |  1 +
 lib/intel_device_info.c | 95 +++++++++++++++++++++++++++++++----------
 lib/meson.build         |  1 +
 tools/aubdump.c         | 29 ++++++-------
 6 files changed, 90 insertions(+), 39 deletions(-)

diff --git a/lib/Makefile.am b/lib/Makefile.am
index ad3ed5fd..35554a8c 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -15,6 +15,7 @@ libigt_chipset_la_SOURCES = \
 	intel_chipset.c \
 	intel_chipset.h \
 	intel_device_info.c
+libigt_chipset_la_CFLAGS = -Wno-override-init
 
 noinst_LTLIBRARIES = libintel_tools.la libigt_perf.la libigt_chipset.la
 noinst_HEADERS = check-ndebug.h
diff --git a/lib/intel_aub.h b/lib/intel_aub.h
index 28885150..74ca26ab 100644
--- a/lib/intel_aub.h
+++ b/lib/intel_aub.h
@@ -103,7 +103,7 @@
 /* DW2 */
 
 #define AUB_MEM_TRACE_VERSION_DEVICE_MASK	0x0000ff00
-#define AUB_MEM_TRACE_VERSION_DEVICE_CNL	(15 << 8)
+#define AUB_MEM_TRACE_VERSION_DEVICE_SHIFT      8
 
 #define AUB_MEM_TRACE_VERSION_METHOD_MASK	0x000c0000
 #define AUB_MEM_TRACE_VERSION_METHOD_PHY	(1 << 18)
diff --git a/lib/intel_chipset.h b/lib/intel_chipset.h
index 40170b7b..d9c51f7a 100644
--- a/lib/intel_chipset.h
+++ b/lib/intel_chipset.h
@@ -37,6 +37,7 @@ uint32_t intel_get_drm_devid(int fd);
 struct intel_device_info {
 	unsigned gen;
 	unsigned gt; /* 0 if unknown */
+	int simulator_id; /* -1 if unknown */
 	bool is_mobile : 1;
 	bool is_whitney : 1;
 	bool is_almador : 1;
diff --git a/lib/intel_device_info.c b/lib/intel_device_info.c
index cc417ed5..630ba3ef 100644
--- a/lib/intel_device_info.c
+++ b/lib/intel_device_info.c
@@ -5,61 +5,75 @@
 
 #define BIT(x) (1<<(x))
 
+#define DEFAULT_PARAMS \
+	.simulator_id = -1
+
 static const struct intel_device_info intel_generic_info = {
+	DEFAULT_PARAMS,
 	.gen = 0,
 };
 
 static const struct intel_device_info intel_i810_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(0),
 	.is_whitney = true,
 	.codename = "solano" /* 815 == "whitney" ? or vice versa? */
 };
 
 static const struct intel_device_info intel_i815_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(0),
 	.is_whitney = true,
 	.codename = "whitney"
 };
 
 static const struct intel_device_info intel_i830_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(1),
 	.is_almador = true,
 	.codename = "almador"
 };
 static const struct intel_device_info intel_i845_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(1),
 	.is_brookdale = true,
 	.codename = "brookdale"
 };
 static const struct intel_device_info intel_i855_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(1),
 	.is_mobile = true,
 	.is_montara = true,
 	.codename = "montara"
 };
 static const struct intel_device_info intel_i865_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(1),
 	.is_springdale = true,
 	.codename = "spingdale"
 };
 
 static const struct intel_device_info intel_i915_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(2),
 	.is_grantsdale = true,
 	.codename = "grantsdale"
 };
 static const struct intel_device_info intel_i915m_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(2),
 	.is_mobile = true,
 	.is_alviso = true,
 	.codename = "alviso"
 };
 static const struct intel_device_info intel_i945_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(2),
 	.is_lakeport = true,
 	.codename = "lakeport"
 };
 static const struct intel_device_info intel_i945m_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(2),
 	.is_mobile = true,
 	.is_calistoga = true,
@@ -67,11 +81,13 @@ static const struct intel_device_info intel_i945m_info = {
 };
 
 static const struct intel_device_info intel_g33_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(2),
 	.is_bearlake = true,
 	.codename = "bearlake"
 };
 static const struct intel_device_info intel_pineview_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(2),
 	.is_mobile = true,
 	.is_pineview = true,
@@ -79,12 +95,14 @@ static const struct intel_device_info intel_pineview_info = {
 };
 
 static const struct intel_device_info intel_i965_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(3),
 	.is_broadwater = true,
 	.codename = "broadwater"
 };
 
 static const struct intel_device_info intel_i965m_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(3),
 	.is_mobile = true,
 	.is_crestline = true,
@@ -92,11 +110,13 @@ static const struct intel_device_info intel_i965m_info = {
 };
 
 static const struct intel_device_info intel_g45_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(3),
 	.is_eaglelake = true,
 	.codename = "eaglelake"
 };
 static const struct intel_device_info intel_gm45_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(3),
 	.is_mobile = true,
 	.is_cantiga = true,
@@ -104,51 +124,62 @@ static const struct intel_device_info intel_gm45_info = {
 };
 
 static const struct intel_device_info intel_ironlake_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(4),
 	.is_ironlake = true,
 	.codename = "ironlake" /* clarkdale? */
 };
 static const struct intel_device_info intel_ironlake_m_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(4),
 	.is_mobile = true,
 	.is_arrandale = true,
 	.codename = "arrandale"
 };
 
-static const struct intel_device_info intel_sandybridge_info = {
-	.gen = BIT(5),
-	.is_sandybridge = true,
+#define SNB_PARAMS \
+	DEFAULT_PARAMS, \
+	.gen = BIT(5), \
+	.is_sandybridge = true, \
 	.codename = "sandybridge"
+
+static const struct intel_device_info intel_sandybridge_info = {
+	SNB_PARAMS,
 };
 static const struct intel_device_info intel_sandybridge_m_info = {
-	.gen = BIT(5),
+	SNB_PARAMS,
 	.is_mobile = true,
-	.is_sandybridge = true,
-	.codename = "sandybridge"
 };
 
+#define IVB_PARAMS \
+	DEFAULT_PARAMS, \
+	.gen = BIT(6), \
+	.is_ivybridge = true, \
+	.codename = "ivybridge", \
+	.simulator_id = 7
+
 static const struct intel_device_info intel_ivybridge_info = {
-	.gen = BIT(6),
-	.is_ivybridge = true,
-	.codename = "ivybridge"
+	IVB_PARAMS,
 };
 static const struct intel_device_info intel_ivybridge_m_info = {
-	.gen = BIT(6),
+	IVB_PARAMS,
 	.is_mobile = true,
-	.is_ivybridge = true,
-	.codename = "ivybridge"
 };
 
 static const struct intel_device_info intel_valleyview_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(6),
 	.is_valleyview = true,
-	.codename = "valleyview"
+	.codename = "valleyview",
+	.simulator_id = 10,
 };
 
 #define HASWELL_FIELDS \
+	DEFAULT_PARAMS, \
 	.gen = BIT(6), \
 	.is_haswell = true, \
-	.codename = "haswell"
+	.codename = "haswell", \
+	.simulator_id = 9
 
 static const struct intel_device_info intel_haswell_gt1_info = {
 	HASWELL_FIELDS,
@@ -166,9 +197,11 @@ static const struct intel_device_info intel_haswell_gt3_info = {
 };
 
 #define BROADWELL_FIELDS \
+	DEFAULT_PARAMS, \
 	.gen = BIT(7), \
 	.is_broadwell = true, \
-	.codename = "broadwell"
+	.codename = "broadwell", \
+	.simulator_id = 11
 
 static const struct intel_device_info intel_broadwell_gt1_info = {
 	BROADWELL_FIELDS,
@@ -190,15 +223,19 @@ static const struct intel_device_info intel_broadwell_unknown_info = {
 };
 
 static const struct intel_device_info intel_cherryview_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(7),
 	.is_cherryview = true,
-	.codename = "cherryview"
+	.codename = "cherryview",
+	.simulator_id = 13,
 };
 
 #define SKYLAKE_FIELDS \
+	DEFAULT_PARAMS, \
 	.gen = BIT(8), \
 	.codename = "skylake", \
-	.is_skylake = true
+	.is_skylake = true, \
+	.simulator_id = 12
 
 static const struct intel_device_info intel_skylake_gt1_info = {
 	SKYLAKE_FIELDS,
@@ -221,15 +258,19 @@ static const struct intel_device_info intel_skylake_gt4_info = {
 };
 
 static const struct intel_device_info intel_broxton_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(8),
 	.is_broxton = true,
-	.codename = "broxton"
+	.codename = "broxton",
+	.simulator_id = 14,
 };
 
 #define KABYLAKE_FIELDS \
+	DEFAULT_PARAMS, \
 	.gen = BIT(8), \
 	.is_kabylake = true, \
-	.codename = "kabylake"
+	.codename = "kabylake", \
+	.simulator_id = 16
 
 static const struct intel_device_info intel_kabylake_gt1_info = {
 	KABYLAKE_FIELDS,
@@ -252,15 +293,19 @@ static const struct intel_device_info intel_kabylake_gt4_info = {
 };
 
 static const struct intel_device_info intel_geminilake_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(8),
 	.is_geminilake = true,
-	.codename = "geminilake"
+	.codename = "geminilake",
+	.simulator_id = 17,
 };
 
 #define COFFEELAKE_FIELDS \
+	DEFAULT_PARAMS, \
 	.gen = BIT(8), \
 	.is_coffeelake = true, \
-	.codename = "coffeelake"
+	.codename = "coffeelake", \
+	.simulator_id = 24
 
 static const struct intel_device_info intel_coffeelake_gt1_info = {
 	COFFEELAKE_FIELDS,
@@ -278,15 +323,19 @@ static const struct intel_device_info intel_coffeelake_gt3_info = {
 };
 
 static const struct intel_device_info intel_cannonlake_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(9),
 	.is_cannonlake = true,
-	.codename = "cannonlake"
+	.codename = "cannonlake",
+	.simulator_id = 15,
 };
 
 static const struct intel_device_info intel_icelake_info = {
+	DEFAULT_PARAMS,
 	.gen = BIT(10),
 	.is_icelake = true,
-	.codename = "icelake"
+	.codename = "icelake",
+	.simulator_id = 18,
 };
 
 static const struct pci_id_match intel_device_match[] = {
diff --git a/lib/meson.build b/lib/meson.build
index 0d1e2b69..3c63f52b 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -97,6 +97,7 @@ lib_version = vcs_tag(input : 'version.h.in', output : 'version.h',
 lin_igt_chipset_build = static_library('igt_chipset',
                                        ['intel_chipset.c',
                                         'intel_device_info.c'],
+                                       c_args : [ '-Wno-override-init' ],
                                        include_directories : inc)
 
 lib_igt_chipset = declare_dependency(link_with : lin_igt_chipset_build,
diff --git a/tools/aubdump.c b/tools/aubdump.c
index 99ec4be2..147ccb5b 100644
--- a/tools/aubdump.c
+++ b/tools/aubdump.c
@@ -247,7 +247,7 @@ static int (*libc_ioctl)(int fd, unsigned long request, ...) = ioctl_init_helper
 static int drm_fd = -1;
 static char *filename = NULL;
 static FILE *files[2] = { NULL, NULL };
-static int gen = 0;
+static const struct intel_device_info *devinfo = NULL;
 static int verbose = 0;
 static bool device_override;
 static uint32_t device;
@@ -300,7 +300,7 @@ struct drm_i915_gem_userptr {
 
 static inline bool use_execlists(void)
 {
-	return gen >= 8 && !legacy_submission;
+	return devinfo->gen >= 8 && !legacy_submission;
 }
 
 static void __attribute__ ((format(__printf__, 2, 3)))
@@ -506,7 +506,7 @@ write_execlists_header(void)
 	dwords = 5 + app_name_len / sizeof(uint32_t);
 	dword_out(CMD_MEM_TRACE_VERSION | (dwords - 1));
 	dword_out(AUB_MEM_TRACE_VERSION_FILE_VERSION);
-	dword_out(AUB_MEM_TRACE_VERSION_DEVICE_CNL);
+	dword_out(devinfo->simulator_id << AUB_MEM_TRACE_VERSION_DEVICE_SHIFT);
 	dword_out(0);		/* version */
 	dword_out(0);		/* version */
 	data_out(app_name, app_name_len);
@@ -744,7 +744,7 @@ aub_dump_execlist(uint64_t batch_offset, int ring_flag)
 					  AUB_MEM_TRACE_MEMORY_ADDRESS_SPACE_GGTT);
 	dword_out(16); /* RING_BUFFER_TAIL */
 
-	if (gen >= 11) {
+	if (devinfo->gen >= 11) {
 		register_write_out(elsq_reg, descriptor & 0xFFFFFFFF);
 		register_write_out(elsq_reg + sizeof(uint32_t), descriptor >> 32);
 		register_write_out(control_reg, 1);
@@ -759,7 +759,7 @@ aub_dump_execlist(uint64_t batch_offset, int ring_flag)
 	dword_out(status_reg);
 	dword_out(AUB_MEM_TRACE_REGISTER_SIZE_DWORD |
 		  AUB_MEM_TRACE_REGISTER_SPACE_MMIO);
-	if (gen >= 11) {
+	if (devinfo->gen >= 11) {
 		dword_out(0x00000001);	/* mask lo */
 		dword_out(0x00000000);	/* mask hi */
 		dword_out(0x00000001);
@@ -892,18 +892,17 @@ dump_execbuffer2(int fd, struct drm_i915_gem_execbuffer2 *execbuffer2)
 	/* We can't do this at open time as we're not yet authenticated. */
 	if (device == 0) {
 		device = gem_get_param(fd, I915_PARAM_CHIPSET_ID);
-		fail_if(device == 0 || gen == -1, "failed to identify chipset\n");
+		fail_if(device == 0 || devinfo == NULL, "failed to identify chipset\n");
 	}
-	if (gen == 0) {
-		gen = intel_gen(device);
+	if (!devinfo) {
+		devinfo = intel_get_device_info(device);
 
-		/* If we don't know the device gen, then it probably is a
-		 * newer device. Set gen to some arbitrarily high number.
+		/* If we don't know the device gen, we need to update
+		 * the database.
 		 */
-		if (gen == 0)
-			gen = 9999;
+		fail_if(devinfo == NULL, "failed to identify device from id\n");
 
-		addr_bits = gen >= 8 ? 48 : 32;
+		addr_bits = devinfo->gen >= 8 ? 48 : 32;
 
 		if (use_execlists())
 			write_execlists_header();
@@ -912,8 +911,8 @@ dump_execbuffer2(int fd, struct drm_i915_gem_execbuffer2 *execbuffer2)
 
 		if (verbose)
 			printf("[intel_aubdump: running, "
-			       "output file %s, chipset id 0x%04x, gen %d]\n",
-			       filename, device, gen);
+			       "output file %s, chipset id 0x%04x, gen %d, %s]\n",
+			       filename, device, devinfo->gen, devinfo->codename);
 	}
 
 	if (use_execlists())
-- 
2.17.1



More information about the igt-dev mailing list