* [Intel-gfx] [PATCH i-g-t 0/2] Add tests for new hw info queries @ 2021-06-10 21:52 John.C.Harrison 2021-06-10 21:52 ` [Intel-gfx] [PATCH i-g-t 1/2] tests/i915/query: Query, parse and validate the hwconfig table John.C.Harrison 2021-06-10 21:52 ` [Intel-gfx] [PATCH i-g-t 2/2] tests/i915/query: Add test for L3 bank count John.C.Harrison 0 siblings, 2 replies; 5+ messages in thread From: John.C.Harrison @ 2021-06-10 21:52 UTC (permalink / raw) To: IGT-Dev; +Cc: Intel-GFX From: John Harrison <John.C.Harrison@Intel.com> Various UMDs require hardware configuration information about the current platform. New interfaces have been added to the KMD to return this informatio. So, add some tests for the new interfaces. Signed-off-by: John Harrison <John.C.Harrison@Intel.com> John Harrison (1): tests/i915/query: Add test for L3 bank count Rodrigo Vivi (1): tests/i915/query: Query, parse and validate the hwconfig table include/drm-uapi/i915_drm.h | 2 + lib/intel_hwconfig_types.h | 102 ++++++++++++++++++++++ tests/i915/i915_query.c | 163 ++++++++++++++++++++++++++++++++++++ 3 files changed, 267 insertions(+) create mode 100644 lib/intel_hwconfig_types.h -- 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] 5+ messages in thread
* [Intel-gfx] [PATCH i-g-t 1/2] tests/i915/query: Query, parse and validate the hwconfig table 2021-06-10 21:52 [Intel-gfx] [PATCH i-g-t 0/2] Add tests for new hw info queries John.C.Harrison @ 2021-06-10 21:52 ` John.C.Harrison 2021-06-14 21:43 ` Matthew Brost 2021-06-10 21:52 ` [Intel-gfx] [PATCH i-g-t 2/2] tests/i915/query: Add test for L3 bank count John.C.Harrison 1 sibling, 1 reply; 5+ messages in thread From: John.C.Harrison @ 2021-06-10 21:52 UTC (permalink / raw) To: IGT-Dev; +Cc: Intel-GFX, Slawomir Milczarek From: Rodrigo Vivi <rodrigo.vivi@intel.com> All the static platform configuration per SKU is moving to this KVL table. User Space components can query and parse it to find the proper hw configuration instead of having to hardcode it. Add a query as both an example of how to fetch the table and to validate the KLV contents as much as possible. Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Signed-off-by: John Harrison <John.C.Harrison@Intel.com> Cc: Slawomir Milczarek <slawomir.milczarek@intel.com> --- include/drm-uapi/i915_drm.h | 1 + lib/intel_hwconfig_types.h | 102 ++++++++++++++++++++++++++++ tests/i915/i915_query.c | 128 ++++++++++++++++++++++++++++++++++++ 3 files changed, 231 insertions(+) create mode 100644 lib/intel_hwconfig_types.h diff --git a/include/drm-uapi/i915_drm.h b/include/drm-uapi/i915_drm.h index a1c0030c3..5c34ab759 100644 --- a/include/drm-uapi/i915_drm.h +++ b/include/drm-uapi/i915_drm.h @@ -2233,6 +2233,7 @@ struct drm_i915_query_item { #define DRM_I915_QUERY_ENGINE_INFO 2 #define DRM_I915_QUERY_PERF_CONFIG 3 #define DRM_I915_QUERY_MEMORY_REGIONS 4 +#define DRM_I915_QUERY_HWCONFIG_TABLE 5 /* Must be kept compact -- no holes and well documented */ /** diff --git a/lib/intel_hwconfig_types.h b/lib/intel_hwconfig_types.h new file mode 100644 index 000000000..8aa875de9 --- /dev/null +++ b/lib/intel_hwconfig_types.h @@ -0,0 +1,102 @@ +// SPDX-License-Identifier: MIT +/* + * Copyright © 2020 Intel Corporation + */ + +#ifndef _INTEL_HWCONFIG_TYPES_H_ +#define _INTEL_HWCONFIG_TYPES_H_ + +/** + * enum intel_hwconfig - Global definition of hwconfig table attributes + * + * Intel devices provide a KLV (Key/Length/Value) table containing + * the static hardware configuration for that platform. + * This header defines the current attribute keys for this KLV. + */ +enum intel_hwconfig { + INTEL_HWCONFIG_MAX_SLICES_SUPPORTED = 1, + INTEL_HWCONFIG_MAX_DUAL_SUBSLICES_SUPPORTED, /* 2 */ + INTEL_HWCONFIG_MAX_NUM_EU_PER_DSS, /* 3 */ + INTEL_HWCONFIG_NUM_PIXEL_PIPES, /* 4 */ + INTEL_HWCONFIG_DEPRECATED_MAX_NUM_GEOMETRY_PIPES, /* 5 */ + INTEL_HWCONFIG_DEPRECATED_L3_CACHE_SIZE_IN_KB, /* 6 */ + INTEL_HWCONFIG_DEPRECATED_L3_BANK_COUNT, /* 7 */ + INTEL_HWCONFIG_L3_CACHE_WAYS_SIZE_IN_BYTES, /* 8 */ + INTEL_HWCONFIG_L3_CACHE_WAYS_PER_SECTOR, /* 9 */ + INTEL_HWCONFIG_MAX_MEMORY_CHANNELS, /* 10 */ + INTEL_HWCONFIG_MEMORY_TYPE, /* 11 */ + INTEL_HWCONFIG_CACHE_TYPES, /* 12 */ + INTEL_HWCONFIG_LOCAL_MEMORY_PAGE_SIZES_SUPPORTED, /* 13 */ + INTEL_HWCONFIG_DEPRECATED_SLM_SIZE_IN_KB, /* 14 */ + INTEL_HWCONFIG_NUM_THREADS_PER_EU, /* 15 */ + INTEL_HWCONFIG_TOTAL_VS_THREADS, /* 16 */ + INTEL_HWCONFIG_TOTAL_GS_THREADS, /* 17 */ + INTEL_HWCONFIG_TOTAL_HS_THREADS, /* 18 */ + INTEL_HWCONFIG_TOTAL_DS_THREADS, /* 19 */ + INTEL_HWCONFIG_TOTAL_VS_THREADS_POCS, /* 20 */ + INTEL_HWCONFIG_TOTAL_PS_THREADS, /* 21 */ + INTEL_HWCONFIG_DEPRECATED_MAX_FILL_RATE, /* 22 */ + INTEL_HWCONFIG_MAX_RCS, /* 23 */ + INTEL_HWCONFIG_MAX_CCS, /* 24 */ + INTEL_HWCONFIG_MAX_VCS, /* 25 */ + INTEL_HWCONFIG_MAX_VECS, /* 26 */ + INTEL_HWCONFIG_MAX_COPY_CS, /* 27 */ + INTEL_HWCONFIG_DEPRECATED_URB_SIZE_IN_KB, /* 28 */ + INTEL_HWCONFIG_MIN_VS_URB_ENTRIES, /* 29 */ + INTEL_HWCONFIG_MAX_VS_URB_ENTRIES, /* 30 */ + INTEL_HWCONFIG_MIN_PCS_URB_ENTRIES, /* 31 */ + INTEL_HWCONFIG_MAX_PCS_URB_ENTRIES, /* 32 */ + INTEL_HWCONFIG_MIN_HS_URB_ENTRIES, /* 33 */ + INTEL_HWCONFIG_MAX_HS_URB_ENTRIES, /* 34 */ + INTEL_HWCONFIG_MIN_GS_URB_ENTRIES, /* 35 */ + INTEL_HWCONFIG_MAX_GS_URB_ENTRIES, /* 36 */ + INTEL_HWCONFIG_MIN_DS_URB_ENTRIES, /* 37 */ + INTEL_HWCONFIG_MAX_DS_URB_ENTRIES, /* 38 */ + INTEL_HWCONFIG_PUSH_CONSTANT_URB_RESERVED_SIZE, /* 39 */ + INTEL_HWCONFIG_POCS_PUSH_CONSTANT_URB_RESERVED_SIZE, /* 40 */ + INTEL_HWCONFIG_URB_REGION_ALIGNMENT_SIZE_IN_BYTES, /* 41 */ + INTEL_HWCONFIG_URB_ALLOCATION_SIZE_UNITS_IN_BYTES, /* 42 */ + INTEL_HWCONFIG_MAX_URB_SIZE_CCS_IN_BYTES, /* 43 */ + INTEL_HWCONFIG_VS_MIN_DEREF_BLOCK_SIZE_HANDLE_COUNT, /* 44 */ + INTEL_HWCONFIG_DS_MIN_DEREF_BLOCK_SIZE_HANDLE_COUNT, /* 45 */ + INTEL_HWCONFIG_NUM_RT_STACKS_PER_DSS, /* 46 */ + INTEL_HWCONFIG_MAX_URB_STARTING_ADDRESS, /* 47 */ + INTEL_HWCONFIG_MIN_CS_URB_ENTRIES, /* 48 */ + INTEL_HWCONFIG_MAX_CS_URB_ENTRIES, /* 49 */ + INTEL_HWCONFIG_L3_ALLOC_PER_BANK_URB, /* 50 */ + INTEL_HWCONFIG_L3_ALLOC_PER_BANK_REST, /* 51 */ + INTEL_HWCONFIG_L3_ALLOC_PER_BANK_DC, /* 52 */ + INTEL_HWCONFIG_L3_ALLOC_PER_BANK_RO, /* 53 */ + INTEL_HWCONFIG_L3_ALLOC_PER_BANK_Z, /* 54 */ + INTEL_HWCONFIG_L3_ALLOC_PER_BANK_COLOR, /* 55 */ + INTEL_HWCONFIG_L3_ALLOC_PER_BANK_UNIFIED_TILE_CACHE, /* 56 */ + INTEL_HWCONFIG_L3_ALLOC_PER_BANK_COMMAND_BUFFER, /* 57 */ + INTEL_HWCONFIG_L3_ALLOC_PER_BANK_RW, /* 58 */ + INTEL_HWCONFIG_MAX_NUM_L3_CONFIGS, /* 59 */ + INTEL_HWCONFIG_BINDLESS_SURFACE_OFFSET_BIT_COUNT, /* 60 */ + INTEL_HWCONFIG_RESERVED_CCS_WAYS, /* 61 */ + INTEL_HWCONFIG_CSR_SIZE_IN_MB, /* 62 */ + INTEL_HWCONFIG_GEOMETRY_PIPES_PER_SLICE, /* 63 */ + INTEL_HWCONFIG_L3_BANK_SIZE_IN_KB, /* 64 */ + INTEL_HWCONFIG_SLM_SIZE_PER_DSS, /* 65 */ + INTEL_HWCONFIG_MAX_PIXEL_FILL_RATE_PER_SLICE, /* 66 */ + INTEL_HWCONFIG_MAX_PIXEL_FILL_RATE_PER_DSS, /* 67 */ + INTEL_HWCONFIG_URB_SIZE_PER_SLICE_IN_KB, /* 68 */ + INTEL_HWCONFIG_URB_SIZE_PER_L3_BANK_COUNT_IN_KB, /* 69 */ + INTEL_HWCONFIG_MAX_SUBSLICE, /* 70 */ + INTEL_HWCONFIG_MAX_EU_PER_SUBSLICE, /* 71 */ + INTEL_HWCONFIG_RAMBO_L3_BANK_SIZE_IN_KB, /* 72 */ + INTEL_HWCONFIG_SLM_SIZE_PER_SS_IN_KB, /* 73 */ + __INTEL_HWCONFIG_LIMIT +}; + +enum { + INTEL_HWCONFIG_MEMORY_TYPE_LPDDR4 = 0, + INTEL_HWCONFIG_MEMORY_TYPE_LPDDR5, +}; + +#define INTEL_HWCONFIG_CACHE_TYPE_L3 BIT(0) +#define INTEL_HWCONFIG_CACHE_TYPE_LLC BIT(1) +#define INTEL_HWCONFIG_CACHE_TYPE_EDRAM BIT(2) + +#endif /* _INTEL_HWCONFIG_TYPES_H_ */ diff --git a/tests/i915/i915_query.c b/tests/i915/i915_query.c index 29b938e9c..eef4afb05 100644 --- a/tests/i915/i915_query.c +++ b/tests/i915/i915_query.c @@ -22,6 +22,7 @@ */ #include "igt.h" +#include "intel_hwconfig_types.h" #include <limits.h> @@ -724,6 +725,130 @@ static void engines(int fd) free(engines); } +static const char * const hwconfig_keys[] = { + [INTEL_HWCONFIG_MAX_SLICES_SUPPORTED] = "Maximum number of Slices", + [INTEL_HWCONFIG_MAX_DUAL_SUBSLICES_SUPPORTED] = "Maximum number of DSS", + [INTEL_HWCONFIG_MAX_NUM_EU_PER_DSS] = "Maximum number of EUs per DSS", + [INTEL_HWCONFIG_NUM_PIXEL_PIPES] = "Pixel Pipes", + [INTEL_HWCONFIG_DEPRECATED_MAX_NUM_GEOMETRY_PIPES] = "[DEPRECATED] Geometry Pipes", + [INTEL_HWCONFIG_DEPRECATED_L3_CACHE_SIZE_IN_KB] = "[DEPRECATED] L3 Size (in KB)", + [INTEL_HWCONFIG_DEPRECATED_L3_BANK_COUNT] = "[DEPRECATED] L3 Bank Count", + [INTEL_HWCONFIG_L3_CACHE_WAYS_SIZE_IN_BYTES] = "L3 Cache Ways Size (in bytes)", + [INTEL_HWCONFIG_L3_CACHE_WAYS_PER_SECTOR] = "L3 Cache Ways Per Sector", + [INTEL_HWCONFIG_MAX_MEMORY_CHANNELS] = "Memory Channels", + [INTEL_HWCONFIG_MEMORY_TYPE] = "Memory type", + [INTEL_HWCONFIG_CACHE_TYPES] = "Cache types", + [INTEL_HWCONFIG_LOCAL_MEMORY_PAGE_SIZES_SUPPORTED] = "Local memory page size", + [INTEL_HWCONFIG_DEPRECATED_SLM_SIZE_IN_KB] = "[DEPRECATED] SLM Size (in KB)", + [INTEL_HWCONFIG_NUM_THREADS_PER_EU] = "Num thread per EU", + [INTEL_HWCONFIG_TOTAL_VS_THREADS] = "Maximum Vertex Shader threads", + [INTEL_HWCONFIG_TOTAL_GS_THREADS] = "Maximum Geometry Shader threads", + [INTEL_HWCONFIG_TOTAL_HS_THREADS] = "Maximum Hull Shader threads", + [INTEL_HWCONFIG_TOTAL_DS_THREADS] = "Maximum Domain Shader threads", + [INTEL_HWCONFIG_TOTAL_VS_THREADS_POCS] = "Maximum Vertex Shader Threads for POCS", + [INTEL_HWCONFIG_TOTAL_PS_THREADS] = "Maximum Pixel Shader Threads", + [INTEL_HWCONFIG_DEPRECATED_MAX_FILL_RATE] = "[DEPRECATED] Maximum pixel rate for Fill", + [INTEL_HWCONFIG_MAX_RCS] = "MaxRCS", + [INTEL_HWCONFIG_MAX_CCS] = "MaxCCS", + [INTEL_HWCONFIG_MAX_VCS] = "MaxVCS", + [INTEL_HWCONFIG_MAX_VECS] = "MaxVECS", + [INTEL_HWCONFIG_MAX_COPY_CS] = "MaxCopyCS", + [INTEL_HWCONFIG_DEPRECATED_URB_SIZE_IN_KB] = "[DEPRECATED] URB Size (in KB)", + [INTEL_HWCONFIG_MIN_VS_URB_ENTRIES] = "The minimum number of VS URB entries.", + [INTEL_HWCONFIG_MAX_VS_URB_ENTRIES] = "The maximum number of VS URB entries.", + [INTEL_HWCONFIG_MIN_PCS_URB_ENTRIES] = "The minimum number of PCS URB entries", + [INTEL_HWCONFIG_MAX_PCS_URB_ENTRIES] = "The maximum number of PCS URB entries", + [INTEL_HWCONFIG_MIN_HS_URB_ENTRIES] = "The minimum number of HS URB entries", + [INTEL_HWCONFIG_MAX_HS_URB_ENTRIES] = "The maximum number of HS URB entries", + [INTEL_HWCONFIG_MIN_GS_URB_ENTRIES] = "The minimum number of GS URB entries", + [INTEL_HWCONFIG_MAX_GS_URB_ENTRIES] = "The maximum number of GS URB entries", + [INTEL_HWCONFIG_MIN_DS_URB_ENTRIES] = "The minimum number of DS URB Entries", + [INTEL_HWCONFIG_MAX_DS_URB_ENTRIES] = "The maximum number of DS URB Entries", + [INTEL_HWCONFIG_PUSH_CONSTANT_URB_RESERVED_SIZE] = "Push Constant URB Reserved Size (in bytes)", + [INTEL_HWCONFIG_POCS_PUSH_CONSTANT_URB_RESERVED_SIZE] = "POCS Push Constant URB Reserved Size (in bytes)", + [INTEL_HWCONFIG_URB_REGION_ALIGNMENT_SIZE_IN_BYTES] = "URB Region Alignment Size (in bytes)", + [INTEL_HWCONFIG_URB_ALLOCATION_SIZE_UNITS_IN_BYTES] = "URB Allocation Size Units (in bytes)", + [INTEL_HWCONFIG_MAX_URB_SIZE_CCS_IN_BYTES] = "Max URB Size CCS (in bytes)", + [INTEL_HWCONFIG_VS_MIN_DEREF_BLOCK_SIZE_HANDLE_COUNT] = "VS Min Deref BlockSize Handle Count", + [INTEL_HWCONFIG_DS_MIN_DEREF_BLOCK_SIZE_HANDLE_COUNT] = "DS Min Deref Block Size Handle Count", + [INTEL_HWCONFIG_NUM_RT_STACKS_PER_DSS] = "Num RT Stacks Per DSS", + [INTEL_HWCONFIG_MAX_URB_STARTING_ADDRESS] = "Max URB Starting Address", + [INTEL_HWCONFIG_MIN_CS_URB_ENTRIES] = "Min CS URB Entries", + [INTEL_HWCONFIG_MAX_CS_URB_ENTRIES] = "Max CS URB Entries", + [INTEL_HWCONFIG_L3_ALLOC_PER_BANK_URB] = "L3 Alloc Per Bank - URB", + [INTEL_HWCONFIG_L3_ALLOC_PER_BANK_REST] = "L3 Alloc Per Bank - Rest", + [INTEL_HWCONFIG_L3_ALLOC_PER_BANK_DC] = "L3 Alloc Per Bank - DC", + [INTEL_HWCONFIG_L3_ALLOC_PER_BANK_RO] = "L3 Alloc Per Bank - RO", + [INTEL_HWCONFIG_L3_ALLOC_PER_BANK_Z] = "L3 Alloc Per Bank - Z", + [INTEL_HWCONFIG_L3_ALLOC_PER_BANK_COLOR] = "L3 Alloc Per Bank - Color", + [INTEL_HWCONFIG_L3_ALLOC_PER_BANK_UNIFIED_TILE_CACHE] = "L3 Alloc Per Bank - Unified Tile Cache", + [INTEL_HWCONFIG_L3_ALLOC_PER_BANK_COMMAND_BUFFER] = "L3 Alloc Per Bank - Command Buffer", + [INTEL_HWCONFIG_L3_ALLOC_PER_BANK_RW] = "L3 Alloc Per Bank - RW", + [INTEL_HWCONFIG_MAX_NUM_L3_CONFIGS] = "Num L3 Configs", + [INTEL_HWCONFIG_BINDLESS_SURFACE_OFFSET_BIT_COUNT] = "Bindless Surface Offset Bit Count", + [INTEL_HWCONFIG_RESERVED_CCS_WAYS] = "Reserved CCS ways", + [INTEL_HWCONFIG_CSR_SIZE_IN_MB] = "CSR Size (in MB)", + [INTEL_HWCONFIG_GEOMETRY_PIPES_PER_SLICE] = "Geometry pipes per slice", + [INTEL_HWCONFIG_L3_BANK_SIZE_IN_KB] = "L3 bank size (in KB)", + [INTEL_HWCONFIG_SLM_SIZE_PER_DSS] = "SLM size per DSS", + [INTEL_HWCONFIG_MAX_PIXEL_FILL_RATE_PER_SLICE] = "Max pixel fill rate per slice", + [INTEL_HWCONFIG_MAX_PIXEL_FILL_RATE_PER_DSS] = "Max pixel fill rate per DSS", + [INTEL_HWCONFIG_URB_SIZE_PER_SLICE_IN_KB] = "URB size per slice (in KB)", + [INTEL_HWCONFIG_URB_SIZE_PER_L3_BANK_COUNT_IN_KB] = "URB size per L3 bank count (in KB)", + [INTEL_HWCONFIG_MAX_SUBSLICE] = "Max subslices", + [INTEL_HWCONFIG_MAX_EU_PER_SUBSLICE] = "Max EUs per subslice", + [INTEL_HWCONFIG_RAMBO_L3_BANK_SIZE_IN_KB] = "RAMBO L3 bank size (in KB)", + [INTEL_HWCONFIG_SLM_SIZE_PER_SS_IN_KB] = "SLM size per SS (in KB)", +}; + +static void query_parse_and_validate_hwconfig_table(int i915) +{ + uint32_t *data; + int i = 0; + int len, j, max_words; + + struct drm_i915_query_item item = { + .query_id = DRM_I915_QUERY_HWCONFIG_TABLE, + }; + + igt_assert(ARRAY_SIZE(hwconfig_keys) == __INTEL_HWCONFIG_LIMIT); + + i915_query_items(i915, &item, 1); + igt_require(item.length > 0); + + data = malloc(item.length); + igt_assert(data); + memset(data, 0, item.length); + item.data_ptr = to_user_pointer(data); + + i915_query_items(i915, &item, 1); + igt_info("Table size = %d bytes\n", item.length); + igt_assert(item.length > 0); + + /* HWConfig table is a list of KLV sets */ + max_words = item.length / sizeof(uint32_t); + igt_assert(max_words * sizeof(uint32_t) == item.length); + while (i < max_words) { + /* Attribute ID zero is invalid */ + igt_assert(data[i] > 0); + igt_assert(data[i] < __INTEL_HWCONFIG_LIMIT); + + len = data[i+1]; + igt_assert(len > 0); + igt_assert((i + 2 + len) <= max_words); + + igt_info("[%2d] %s:", data[i], hwconfig_keys[data[i]]); + for (j = i + 2; j < i + 1 + len; j++) + igt_info(" %d,", data[j]); + igt_info(" %d\n", data[j]); + + /* Advance to next key */ + i += 2 + len; + } + + free(data); +} + igt_main { int fd = -1; @@ -783,6 +908,9 @@ igt_main engines(fd); } + igt_subtest("hwconfig_table") + query_parse_and_validate_hwconfig_table(fd); + igt_fixture { close(fd); } -- 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] 5+ messages in thread
* Re: [Intel-gfx] [PATCH i-g-t 1/2] tests/i915/query: Query, parse and validate the hwconfig table 2021-06-10 21:52 ` [Intel-gfx] [PATCH i-g-t 1/2] tests/i915/query: Query, parse and validate the hwconfig table John.C.Harrison @ 2021-06-14 21:43 ` Matthew Brost 0 siblings, 0 replies; 5+ messages in thread From: Matthew Brost @ 2021-06-14 21:43 UTC (permalink / raw) To: John.C.Harrison; +Cc: IGT-Dev, Intel-GFX, Slawomir Milczarek On Thu, Jun 10, 2021 at 02:52:46PM -0700, John.C.Harrison@Intel.com wrote: > From: Rodrigo Vivi <rodrigo.vivi@intel.com> > > All the static platform configuration per SKU is moving to > this KVL table. User Space components can query and parse > it to find the proper hw configuration instead of having > to hardcode it. > > Add a query as both an example of how to fetch the table and to > validate the KLV contents as much as possible. > > Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> > Signed-off-by: John Harrison <John.C.Harrison@Intel.com> > Cc: Slawomir Milczarek <slawomir.milczarek@intel.com> > --- > include/drm-uapi/i915_drm.h | 1 + > lib/intel_hwconfig_types.h | 102 ++++++++++++++++++++++++++++ > tests/i915/i915_query.c | 128 ++++++++++++++++++++++++++++++++++++ > 3 files changed, 231 insertions(+) > create mode 100644 lib/intel_hwconfig_types.h > > diff --git a/include/drm-uapi/i915_drm.h b/include/drm-uapi/i915_drm.h > index a1c0030c3..5c34ab759 100644 > --- a/include/drm-uapi/i915_drm.h > +++ b/include/drm-uapi/i915_drm.h > @@ -2233,6 +2233,7 @@ struct drm_i915_query_item { > #define DRM_I915_QUERY_ENGINE_INFO 2 > #define DRM_I915_QUERY_PERF_CONFIG 3 > #define DRM_I915_QUERY_MEMORY_REGIONS 4 > +#define DRM_I915_QUERY_HWCONFIG_TABLE 5 > /* Must be kept compact -- no holes and well documented */ > > /** > diff --git a/lib/intel_hwconfig_types.h b/lib/intel_hwconfig_types.h > new file mode 100644 > index 000000000..8aa875de9 > --- /dev/null > +++ b/lib/intel_hwconfig_types.h > @@ -0,0 +1,102 @@ > +// SPDX-License-Identifier: MIT > +/* > + * Copyright © 2020 Intel Corporation > + */ > + > +#ifndef _INTEL_HWCONFIG_TYPES_H_ > +#define _INTEL_HWCONFIG_TYPES_H_ > + > +/** > + * enum intel_hwconfig - Global definition of hwconfig table attributes > + * > + * Intel devices provide a KLV (Key/Length/Value) table containing > + * the static hardware configuration for that platform. > + * This header defines the current attribute keys for this KLV. > + */ > +enum intel_hwconfig { > + INTEL_HWCONFIG_MAX_SLICES_SUPPORTED = 1, > + INTEL_HWCONFIG_MAX_DUAL_SUBSLICES_SUPPORTED, /* 2 */ > + INTEL_HWCONFIG_MAX_NUM_EU_PER_DSS, /* 3 */ > + INTEL_HWCONFIG_NUM_PIXEL_PIPES, /* 4 */ > + INTEL_HWCONFIG_DEPRECATED_MAX_NUM_GEOMETRY_PIPES, /* 5 */ > + INTEL_HWCONFIG_DEPRECATED_L3_CACHE_SIZE_IN_KB, /* 6 */ > + INTEL_HWCONFIG_DEPRECATED_L3_BANK_COUNT, /* 7 */ > + INTEL_HWCONFIG_L3_CACHE_WAYS_SIZE_IN_BYTES, /* 8 */ > + INTEL_HWCONFIG_L3_CACHE_WAYS_PER_SECTOR, /* 9 */ > + INTEL_HWCONFIG_MAX_MEMORY_CHANNELS, /* 10 */ > + INTEL_HWCONFIG_MEMORY_TYPE, /* 11 */ > + INTEL_HWCONFIG_CACHE_TYPES, /* 12 */ > + INTEL_HWCONFIG_LOCAL_MEMORY_PAGE_SIZES_SUPPORTED, /* 13 */ > + INTEL_HWCONFIG_DEPRECATED_SLM_SIZE_IN_KB, /* 14 */ > + INTEL_HWCONFIG_NUM_THREADS_PER_EU, /* 15 */ > + INTEL_HWCONFIG_TOTAL_VS_THREADS, /* 16 */ > + INTEL_HWCONFIG_TOTAL_GS_THREADS, /* 17 */ > + INTEL_HWCONFIG_TOTAL_HS_THREADS, /* 18 */ > + INTEL_HWCONFIG_TOTAL_DS_THREADS, /* 19 */ > + INTEL_HWCONFIG_TOTAL_VS_THREADS_POCS, /* 20 */ > + INTEL_HWCONFIG_TOTAL_PS_THREADS, /* 21 */ > + INTEL_HWCONFIG_DEPRECATED_MAX_FILL_RATE, /* 22 */ > + INTEL_HWCONFIG_MAX_RCS, /* 23 */ > + INTEL_HWCONFIG_MAX_CCS, /* 24 */ > + INTEL_HWCONFIG_MAX_VCS, /* 25 */ > + INTEL_HWCONFIG_MAX_VECS, /* 26 */ > + INTEL_HWCONFIG_MAX_COPY_CS, /* 27 */ > + INTEL_HWCONFIG_DEPRECATED_URB_SIZE_IN_KB, /* 28 */ > + INTEL_HWCONFIG_MIN_VS_URB_ENTRIES, /* 29 */ > + INTEL_HWCONFIG_MAX_VS_URB_ENTRIES, /* 30 */ > + INTEL_HWCONFIG_MIN_PCS_URB_ENTRIES, /* 31 */ > + INTEL_HWCONFIG_MAX_PCS_URB_ENTRIES, /* 32 */ > + INTEL_HWCONFIG_MIN_HS_URB_ENTRIES, /* 33 */ > + INTEL_HWCONFIG_MAX_HS_URB_ENTRIES, /* 34 */ > + INTEL_HWCONFIG_MIN_GS_URB_ENTRIES, /* 35 */ > + INTEL_HWCONFIG_MAX_GS_URB_ENTRIES, /* 36 */ > + INTEL_HWCONFIG_MIN_DS_URB_ENTRIES, /* 37 */ > + INTEL_HWCONFIG_MAX_DS_URB_ENTRIES, /* 38 */ > + INTEL_HWCONFIG_PUSH_CONSTANT_URB_RESERVED_SIZE, /* 39 */ > + INTEL_HWCONFIG_POCS_PUSH_CONSTANT_URB_RESERVED_SIZE, /* 40 */ > + INTEL_HWCONFIG_URB_REGION_ALIGNMENT_SIZE_IN_BYTES, /* 41 */ > + INTEL_HWCONFIG_URB_ALLOCATION_SIZE_UNITS_IN_BYTES, /* 42 */ > + INTEL_HWCONFIG_MAX_URB_SIZE_CCS_IN_BYTES, /* 43 */ > + INTEL_HWCONFIG_VS_MIN_DEREF_BLOCK_SIZE_HANDLE_COUNT, /* 44 */ > + INTEL_HWCONFIG_DS_MIN_DEREF_BLOCK_SIZE_HANDLE_COUNT, /* 45 */ > + INTEL_HWCONFIG_NUM_RT_STACKS_PER_DSS, /* 46 */ > + INTEL_HWCONFIG_MAX_URB_STARTING_ADDRESS, /* 47 */ > + INTEL_HWCONFIG_MIN_CS_URB_ENTRIES, /* 48 */ > + INTEL_HWCONFIG_MAX_CS_URB_ENTRIES, /* 49 */ > + INTEL_HWCONFIG_L3_ALLOC_PER_BANK_URB, /* 50 */ > + INTEL_HWCONFIG_L3_ALLOC_PER_BANK_REST, /* 51 */ > + INTEL_HWCONFIG_L3_ALLOC_PER_BANK_DC, /* 52 */ > + INTEL_HWCONFIG_L3_ALLOC_PER_BANK_RO, /* 53 */ > + INTEL_HWCONFIG_L3_ALLOC_PER_BANK_Z, /* 54 */ > + INTEL_HWCONFIG_L3_ALLOC_PER_BANK_COLOR, /* 55 */ > + INTEL_HWCONFIG_L3_ALLOC_PER_BANK_UNIFIED_TILE_CACHE, /* 56 */ > + INTEL_HWCONFIG_L3_ALLOC_PER_BANK_COMMAND_BUFFER, /* 57 */ > + INTEL_HWCONFIG_L3_ALLOC_PER_BANK_RW, /* 58 */ > + INTEL_HWCONFIG_MAX_NUM_L3_CONFIGS, /* 59 */ > + INTEL_HWCONFIG_BINDLESS_SURFACE_OFFSET_BIT_COUNT, /* 60 */ > + INTEL_HWCONFIG_RESERVED_CCS_WAYS, /* 61 */ > + INTEL_HWCONFIG_CSR_SIZE_IN_MB, /* 62 */ > + INTEL_HWCONFIG_GEOMETRY_PIPES_PER_SLICE, /* 63 */ > + INTEL_HWCONFIG_L3_BANK_SIZE_IN_KB, /* 64 */ > + INTEL_HWCONFIG_SLM_SIZE_PER_DSS, /* 65 */ > + INTEL_HWCONFIG_MAX_PIXEL_FILL_RATE_PER_SLICE, /* 66 */ > + INTEL_HWCONFIG_MAX_PIXEL_FILL_RATE_PER_DSS, /* 67 */ > + INTEL_HWCONFIG_URB_SIZE_PER_SLICE_IN_KB, /* 68 */ > + INTEL_HWCONFIG_URB_SIZE_PER_L3_BANK_COUNT_IN_KB, /* 69 */ > + INTEL_HWCONFIG_MAX_SUBSLICE, /* 70 */ > + INTEL_HWCONFIG_MAX_EU_PER_SUBSLICE, /* 71 */ > + INTEL_HWCONFIG_RAMBO_L3_BANK_SIZE_IN_KB, /* 72 */ > + INTEL_HWCONFIG_SLM_SIZE_PER_SS_IN_KB, /* 73 */ > + __INTEL_HWCONFIG_LIMIT > +}; > + > +enum { > + INTEL_HWCONFIG_MEMORY_TYPE_LPDDR4 = 0, > + INTEL_HWCONFIG_MEMORY_TYPE_LPDDR5, > +}; > + > +#define INTEL_HWCONFIG_CACHE_TYPE_L3 BIT(0) > +#define INTEL_HWCONFIG_CACHE_TYPE_LLC BIT(1) > +#define INTEL_HWCONFIG_CACHE_TYPE_EDRAM BIT(2) > + > +#endif /* _INTEL_HWCONFIG_TYPES_H_ */ > diff --git a/tests/i915/i915_query.c b/tests/i915/i915_query.c > index 29b938e9c..eef4afb05 100644 > --- a/tests/i915/i915_query.c > +++ b/tests/i915/i915_query.c > @@ -22,6 +22,7 @@ > */ > > #include "igt.h" > +#include "intel_hwconfig_types.h" > > #include <limits.h> > > @@ -724,6 +725,130 @@ static void engines(int fd) > free(engines); > } > > +static const char * const hwconfig_keys[] = { > + [INTEL_HWCONFIG_MAX_SLICES_SUPPORTED] = "Maximum number of Slices", > + [INTEL_HWCONFIG_MAX_DUAL_SUBSLICES_SUPPORTED] = "Maximum number of DSS", > + [INTEL_HWCONFIG_MAX_NUM_EU_PER_DSS] = "Maximum number of EUs per DSS", > + [INTEL_HWCONFIG_NUM_PIXEL_PIPES] = "Pixel Pipes", > + [INTEL_HWCONFIG_DEPRECATED_MAX_NUM_GEOMETRY_PIPES] = "[DEPRECATED] Geometry Pipes", > + [INTEL_HWCONFIG_DEPRECATED_L3_CACHE_SIZE_IN_KB] = "[DEPRECATED] L3 Size (in KB)", > + [INTEL_HWCONFIG_DEPRECATED_L3_BANK_COUNT] = "[DEPRECATED] L3 Bank Count", > + [INTEL_HWCONFIG_L3_CACHE_WAYS_SIZE_IN_BYTES] = "L3 Cache Ways Size (in bytes)", > + [INTEL_HWCONFIG_L3_CACHE_WAYS_PER_SECTOR] = "L3 Cache Ways Per Sector", > + [INTEL_HWCONFIG_MAX_MEMORY_CHANNELS] = "Memory Channels", > + [INTEL_HWCONFIG_MEMORY_TYPE] = "Memory type", > + [INTEL_HWCONFIG_CACHE_TYPES] = "Cache types", > + [INTEL_HWCONFIG_LOCAL_MEMORY_PAGE_SIZES_SUPPORTED] = "Local memory page size", > + [INTEL_HWCONFIG_DEPRECATED_SLM_SIZE_IN_KB] = "[DEPRECATED] SLM Size (in KB)", > + [INTEL_HWCONFIG_NUM_THREADS_PER_EU] = "Num thread per EU", > + [INTEL_HWCONFIG_TOTAL_VS_THREADS] = "Maximum Vertex Shader threads", > + [INTEL_HWCONFIG_TOTAL_GS_THREADS] = "Maximum Geometry Shader threads", > + [INTEL_HWCONFIG_TOTAL_HS_THREADS] = "Maximum Hull Shader threads", > + [INTEL_HWCONFIG_TOTAL_DS_THREADS] = "Maximum Domain Shader threads", > + [INTEL_HWCONFIG_TOTAL_VS_THREADS_POCS] = "Maximum Vertex Shader Threads for POCS", > + [INTEL_HWCONFIG_TOTAL_PS_THREADS] = "Maximum Pixel Shader Threads", > + [INTEL_HWCONFIG_DEPRECATED_MAX_FILL_RATE] = "[DEPRECATED] Maximum pixel rate for Fill", > + [INTEL_HWCONFIG_MAX_RCS] = "MaxRCS", > + [INTEL_HWCONFIG_MAX_CCS] = "MaxCCS", > + [INTEL_HWCONFIG_MAX_VCS] = "MaxVCS", > + [INTEL_HWCONFIG_MAX_VECS] = "MaxVECS", > + [INTEL_HWCONFIG_MAX_COPY_CS] = "MaxCopyCS", > + [INTEL_HWCONFIG_DEPRECATED_URB_SIZE_IN_KB] = "[DEPRECATED] URB Size (in KB)", > + [INTEL_HWCONFIG_MIN_VS_URB_ENTRIES] = "The minimum number of VS URB entries.", > + [INTEL_HWCONFIG_MAX_VS_URB_ENTRIES] = "The maximum number of VS URB entries.", > + [INTEL_HWCONFIG_MIN_PCS_URB_ENTRIES] = "The minimum number of PCS URB entries", > + [INTEL_HWCONFIG_MAX_PCS_URB_ENTRIES] = "The maximum number of PCS URB entries", > + [INTEL_HWCONFIG_MIN_HS_URB_ENTRIES] = "The minimum number of HS URB entries", > + [INTEL_HWCONFIG_MAX_HS_URB_ENTRIES] = "The maximum number of HS URB entries", > + [INTEL_HWCONFIG_MIN_GS_URB_ENTRIES] = "The minimum number of GS URB entries", > + [INTEL_HWCONFIG_MAX_GS_URB_ENTRIES] = "The maximum number of GS URB entries", > + [INTEL_HWCONFIG_MIN_DS_URB_ENTRIES] = "The minimum number of DS URB Entries", > + [INTEL_HWCONFIG_MAX_DS_URB_ENTRIES] = "The maximum number of DS URB Entries", > + [INTEL_HWCONFIG_PUSH_CONSTANT_URB_RESERVED_SIZE] = "Push Constant URB Reserved Size (in bytes)", > + [INTEL_HWCONFIG_POCS_PUSH_CONSTANT_URB_RESERVED_SIZE] = "POCS Push Constant URB Reserved Size (in bytes)", > + [INTEL_HWCONFIG_URB_REGION_ALIGNMENT_SIZE_IN_BYTES] = "URB Region Alignment Size (in bytes)", > + [INTEL_HWCONFIG_URB_ALLOCATION_SIZE_UNITS_IN_BYTES] = "URB Allocation Size Units (in bytes)", > + [INTEL_HWCONFIG_MAX_URB_SIZE_CCS_IN_BYTES] = "Max URB Size CCS (in bytes)", > + [INTEL_HWCONFIG_VS_MIN_DEREF_BLOCK_SIZE_HANDLE_COUNT] = "VS Min Deref BlockSize Handle Count", > + [INTEL_HWCONFIG_DS_MIN_DEREF_BLOCK_SIZE_HANDLE_COUNT] = "DS Min Deref Block Size Handle Count", > + [INTEL_HWCONFIG_NUM_RT_STACKS_PER_DSS] = "Num RT Stacks Per DSS", > + [INTEL_HWCONFIG_MAX_URB_STARTING_ADDRESS] = "Max URB Starting Address", > + [INTEL_HWCONFIG_MIN_CS_URB_ENTRIES] = "Min CS URB Entries", > + [INTEL_HWCONFIG_MAX_CS_URB_ENTRIES] = "Max CS URB Entries", > + [INTEL_HWCONFIG_L3_ALLOC_PER_BANK_URB] = "L3 Alloc Per Bank - URB", > + [INTEL_HWCONFIG_L3_ALLOC_PER_BANK_REST] = "L3 Alloc Per Bank - Rest", > + [INTEL_HWCONFIG_L3_ALLOC_PER_BANK_DC] = "L3 Alloc Per Bank - DC", > + [INTEL_HWCONFIG_L3_ALLOC_PER_BANK_RO] = "L3 Alloc Per Bank - RO", > + [INTEL_HWCONFIG_L3_ALLOC_PER_BANK_Z] = "L3 Alloc Per Bank - Z", > + [INTEL_HWCONFIG_L3_ALLOC_PER_BANK_COLOR] = "L3 Alloc Per Bank - Color", > + [INTEL_HWCONFIG_L3_ALLOC_PER_BANK_UNIFIED_TILE_CACHE] = "L3 Alloc Per Bank - Unified Tile Cache", > + [INTEL_HWCONFIG_L3_ALLOC_PER_BANK_COMMAND_BUFFER] = "L3 Alloc Per Bank - Command Buffer", > + [INTEL_HWCONFIG_L3_ALLOC_PER_BANK_RW] = "L3 Alloc Per Bank - RW", > + [INTEL_HWCONFIG_MAX_NUM_L3_CONFIGS] = "Num L3 Configs", > + [INTEL_HWCONFIG_BINDLESS_SURFACE_OFFSET_BIT_COUNT] = "Bindless Surface Offset Bit Count", > + [INTEL_HWCONFIG_RESERVED_CCS_WAYS] = "Reserved CCS ways", > + [INTEL_HWCONFIG_CSR_SIZE_IN_MB] = "CSR Size (in MB)", > + [INTEL_HWCONFIG_GEOMETRY_PIPES_PER_SLICE] = "Geometry pipes per slice", > + [INTEL_HWCONFIG_L3_BANK_SIZE_IN_KB] = "L3 bank size (in KB)", > + [INTEL_HWCONFIG_SLM_SIZE_PER_DSS] = "SLM size per DSS", > + [INTEL_HWCONFIG_MAX_PIXEL_FILL_RATE_PER_SLICE] = "Max pixel fill rate per slice", > + [INTEL_HWCONFIG_MAX_PIXEL_FILL_RATE_PER_DSS] = "Max pixel fill rate per DSS", > + [INTEL_HWCONFIG_URB_SIZE_PER_SLICE_IN_KB] = "URB size per slice (in KB)", > + [INTEL_HWCONFIG_URB_SIZE_PER_L3_BANK_COUNT_IN_KB] = "URB size per L3 bank count (in KB)", > + [INTEL_HWCONFIG_MAX_SUBSLICE] = "Max subslices", > + [INTEL_HWCONFIG_MAX_EU_PER_SUBSLICE] = "Max EUs per subslice", > + [INTEL_HWCONFIG_RAMBO_L3_BANK_SIZE_IN_KB] = "RAMBO L3 bank size (in KB)", > + [INTEL_HWCONFIG_SLM_SIZE_PER_SS_IN_KB] = "SLM size per SS (in KB)", > +}; > + > +static void query_parse_and_validate_hwconfig_table(int i915) > +{ > + uint32_t *data; > + int i = 0; > + int len, j, max_words; > + > + struct drm_i915_query_item item = { > + .query_id = DRM_I915_QUERY_HWCONFIG_TABLE, > + }; > + > + igt_assert(ARRAY_SIZE(hwconfig_keys) == __INTEL_HWCONFIG_LIMIT); > + > + i915_query_items(i915, &item, 1); > + igt_require(item.length > 0); > + > + data = malloc(item.length); > + igt_assert(data); > + memset(data, 0, item.length); > + item.data_ptr = to_user_pointer(data); > + > + i915_query_items(i915, &item, 1); > + igt_info("Table size = %d bytes\n", item.length); > + igt_assert(item.length > 0); > + > + /* HWConfig table is a list of KLV sets */ > + max_words = item.length / sizeof(uint32_t); > + igt_assert(max_words * sizeof(uint32_t) == item.length); > + while (i < max_words) { > + /* Attribute ID zero is invalid */ > + igt_assert(data[i] > 0); > + igt_assert(data[i] < __INTEL_HWCONFIG_LIMIT); > + > + len = data[i+1]; Nit: space here? > + igt_assert(len > 0); > + igt_assert((i + 2 + len) <= max_words); > + > + igt_info("[%2d] %s:", data[i], hwconfig_keys[data[i]]); > + for (j = i + 2; j < i + 1 + len; j++) > + igt_info(" %d,", data[j]); Another nit, would hex be better? With that: Reviewed-by: Matthew Brost <matthew.brost@intel.com> > + igt_info(" %d\n", data[j]); > + > + /* Advance to next key */ > + i += 2 + len; > + } > + > + free(data); > +} > + > igt_main > { > int fd = -1; > @@ -783,6 +908,9 @@ igt_main > engines(fd); > } > > + igt_subtest("hwconfig_table") > + query_parse_and_validate_hwconfig_table(fd); > + > igt_fixture { > close(fd); > } > -- > 2.25.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Intel-gfx] [PATCH i-g-t 2/2] tests/i915/query: Add test for L3 bank count 2021-06-10 21:52 [Intel-gfx] [PATCH i-g-t 0/2] Add tests for new hw info queries John.C.Harrison 2021-06-10 21:52 ` [Intel-gfx] [PATCH i-g-t 1/2] tests/i915/query: Query, parse and validate the hwconfig table John.C.Harrison @ 2021-06-10 21:52 ` John.C.Harrison 2021-06-14 19:44 ` Matthew Brost 1 sibling, 1 reply; 5+ messages in thread From: John.C.Harrison @ 2021-06-10 21:52 UTC (permalink / raw) To: IGT-Dev; +Cc: Intel-GFX From: John Harrison <John.C.Harrison@Intel.com> Various UMDs need to know the L3 bank count. So a query API has been added for it. Test that query. Signed-off-by: John Harrison <John.C.Harrison@Intel.com> --- include/drm-uapi/i915_drm.h | 1 + tests/i915/i915_query.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/include/drm-uapi/i915_drm.h b/include/drm-uapi/i915_drm.h index 5c34ab759..191820532 100644 --- a/include/drm-uapi/i915_drm.h +++ b/include/drm-uapi/i915_drm.h @@ -2234,6 +2234,7 @@ struct drm_i915_query_item { #define DRM_I915_QUERY_PERF_CONFIG 3 #define DRM_I915_QUERY_MEMORY_REGIONS 4 #define DRM_I915_QUERY_HWCONFIG_TABLE 5 +#define DRM_I915_QUERY_L3_BANK_COUNT 6 /* Must be kept compact -- no holes and well documented */ /** diff --git a/tests/i915/i915_query.c b/tests/i915/i915_query.c index eef4afb05..17948e0d8 100644 --- a/tests/i915/i915_query.c +++ b/tests/i915/i915_query.c @@ -849,6 +849,38 @@ static void query_parse_and_validate_hwconfig_table(int i915) free(data); } +static int query_engine_l3_bank_count(int fd) +{ + uint32_t *banks; + struct drm_i915_query_item size = { + .query_id = DRM_I915_QUERY_L3_BANK_COUNT, + }; + struct drm_i915_query_item query = { + .query_id = DRM_I915_QUERY_L3_BANK_COUNT, + }; + int num_counts, i; + + i915_query_items(fd, &size, 1); + igt_require(size.length > 0); + + num_counts = size.length / sizeof(*banks); + igt_info("size = %d, count = %d => %ld\n", size.length, num_counts, num_counts * sizeof(*banks)); + igt_assert(size.length == (num_counts * sizeof(*banks))); + + banks = malloc(size.length); + igt_assert(banks); + query.data_ptr = to_user_pointer(banks); + query.length = size.length; + + i915_query_items(fd, &query, 1); + igt_assert(query.length == size.length); + for (i = 0; i < num_counts; i++) + igt_info("Bank count #%d: %d\n", i, banks[i]); + + free(banks); + return 0; +} + igt_main { int fd = -1; @@ -911,6 +943,9 @@ igt_main igt_subtest("hwconfig_table") query_parse_and_validate_hwconfig_table(fd); + igt_subtest("l3_banks") + query_engine_l3_bank_count(fd); + igt_fixture { close(fd); } -- 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] 5+ messages in thread
* Re: [Intel-gfx] [PATCH i-g-t 2/2] tests/i915/query: Add test for L3 bank count 2021-06-10 21:52 ` [Intel-gfx] [PATCH i-g-t 2/2] tests/i915/query: Add test for L3 bank count John.C.Harrison @ 2021-06-14 19:44 ` Matthew Brost 0 siblings, 0 replies; 5+ messages in thread From: Matthew Brost @ 2021-06-14 19:44 UTC (permalink / raw) To: John.C.Harrison; +Cc: IGT-Dev, Intel-GFX On Thu, Jun 10, 2021 at 02:52:47PM -0700, John.C.Harrison@Intel.com wrote: > From: John Harrison <John.C.Harrison@Intel.com> > > Various UMDs need to know the L3 bank count. So a query API has been > added for it. Test that query. > > Signed-off-by: John Harrison <John.C.Harrison@Intel.com> > --- > include/drm-uapi/i915_drm.h | 1 + > tests/i915/i915_query.c | 35 +++++++++++++++++++++++++++++++++++ > 2 files changed, 36 insertions(+) > > diff --git a/include/drm-uapi/i915_drm.h b/include/drm-uapi/i915_drm.h > index 5c34ab759..191820532 100644 > --- a/include/drm-uapi/i915_drm.h > +++ b/include/drm-uapi/i915_drm.h > @@ -2234,6 +2234,7 @@ struct drm_i915_query_item { > #define DRM_I915_QUERY_PERF_CONFIG 3 > #define DRM_I915_QUERY_MEMORY_REGIONS 4 > #define DRM_I915_QUERY_HWCONFIG_TABLE 5 > +#define DRM_I915_QUERY_L3_BANK_COUNT 6 > /* Must be kept compact -- no holes and well documented */ > > /** > diff --git a/tests/i915/i915_query.c b/tests/i915/i915_query.c > index eef4afb05..17948e0d8 100644 > --- a/tests/i915/i915_query.c > +++ b/tests/i915/i915_query.c > @@ -849,6 +849,38 @@ static void query_parse_and_validate_hwconfig_table(int i915) > free(data); > } > > +static int query_engine_l3_bank_count(int fd) > +{ > + uint32_t *banks; > + struct drm_i915_query_item size = { > + .query_id = DRM_I915_QUERY_L3_BANK_COUNT, > + }; > + struct drm_i915_query_item query = { > + .query_id = DRM_I915_QUERY_L3_BANK_COUNT, > + }; I believe you could just one of the local variables, right? I see the comparison for 'query.length == size.length' but you store the length a u32 rather than a struct. Just a suggestion but not a blocker, with that: Reviewed-by: Matthew Brost <matthew.brost@intel.com> > + int num_counts, i; > + > + i915_query_items(fd, &size, 1); > + igt_require(size.length > 0); > + > + num_counts = size.length / sizeof(*banks); > + igt_info("size = %d, count = %d => %ld\n", size.length, num_counts, num_counts * sizeof(*banks)); > + igt_assert(size.length == (num_counts * sizeof(*banks))); > + > + banks = malloc(size.length); > + igt_assert(banks); > + query.data_ptr = to_user_pointer(banks); > + query.length = size.length; > + > + i915_query_items(fd, &query, 1); > + igt_assert(query.length == size.length); > + for (i = 0; i < num_counts; i++) > + igt_info("Bank count #%d: %d\n", i, banks[i]); > + > + free(banks); > + return 0; > +} > + > igt_main > { > int fd = -1; > @@ -911,6 +943,9 @@ igt_main > igt_subtest("hwconfig_table") > query_parse_and_validate_hwconfig_table(fd); > > + igt_subtest("l3_banks") > + query_engine_l3_bank_count(fd); > + > igt_fixture { > close(fd); > } > -- > 2.25.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-06-14 21:50 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-06-10 21:52 [Intel-gfx] [PATCH i-g-t 0/2] Add tests for new hw info queries John.C.Harrison 2021-06-10 21:52 ` [Intel-gfx] [PATCH i-g-t 1/2] tests/i915/query: Query, parse and validate the hwconfig table John.C.Harrison 2021-06-14 21:43 ` Matthew Brost 2021-06-10 21:52 ` [Intel-gfx] [PATCH i-g-t 2/2] tests/i915/query: Add test for L3 bank count John.C.Harrison 2021-06-14 19:44 ` Matthew Brost
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox