Per context dynamic (sub)slice power-gating
Subsystems (2)
cover Per context dynamic (sub)slice power-gating
From: Tvrtko Ursulin <[email protected]>
Tests to accompany the respective i915 series.
Contributed by Tony Ye is a new test, gem_media_vme, which exercises the media VME block to demonstrate the effectiveness of the uAPI for this particular issue.
New in this version is the source code for the VME kernel and some other small tweaks.
Lionel Landwerlin (1):
tests/gem_ctx_sseu: Dynamic (sub)slice programming tests
Tony Ye (2):
tests/gem_media_vme: Simple test to exercise the VME block tests/gem_media_vme: Shut down half of subslices to avoid gpu hang on
ICL
Tvrtko Ursulin (1):
headers: bump
include/drm-uapi/drm_mode.h | 19 + include/drm-uapi/i915_drm.h | 43 ++ include/drm-uapi/msm_drm.h | 25 +- include/drm-uapi/v3d_drm.h | 33 ++ lib/gpu_cmds.c | 148 ++++++ lib/gpu_cmds.h | 23 +- lib/i915/shaders/media/README_media_vme.txt | 65 +++ lib/i915/shaders/media/media_vme.gxa | 51 ++ lib/intel_batchbuffer.c | 9 + lib/intel_batchbuffer.h | 7 + lib/media_fill.c | 110 ++++ lib/media_fill.h | 6 + lib/surfaceformat.h | 2 + tests/Makefile.am | 1 + tests/Makefile.sources | 6 + tests/i915/gem_ctx_param.c | 4 +- tests/i915/gem_ctx_sseu.c | 532 ++++++++++++++++++++ tests/i915/gem_media_vme.c | 178 +++++++ tests/meson.build | 9 + 19 files changed, 1262 insertions(+), 9 deletions(-) create mode 100755 lib/i915/shaders/media/README_media_vme.txt create mode 100755 lib/i915/shaders/media/media_vme.gxa create mode 100644 tests/i915/gem_ctx_sseu.c create mode 100644 tests/i915/gem_media_vme.c
Signature · 6 lines
2.19.1 _______________________________________________ igt-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/igt-dev
PATCH 1/4 headers: bump
From: Tvrtko Ursulin <[email protected]>
--- include/drm-uapi/drm_mode.h | 19 ++++++++++++++++ include/drm-uapi/i915_drm.h | 43 +++++++++++++++++++++++++++++++++++++ include/drm-uapi/msm_drm.h | 25 +++++++++++++++------ include/drm-uapi/v3d_drm.h | 33 ++++++++++++++++++++++++++++ 4 files changed, 114 insertions(+), 6 deletions(-)
include/drm-uapi/drm_mode.h +19 -0
@@ -888,6 +888,25 @@ struct drm_mode_revoke_lease {__u32 lessee_id; }; +/** +* struct drm_mode_rect - Two dimensional rectangle. +* @x1: Horizontal starting coordinate (inclusive). +* @y1: Vertical starting coordinate (inclusive). +* @x2: Horizontal ending coordinate (exclusive). +* @y2: Vertical ending coordinate (exclusive). +* +* With drm subsystem using struct drm_rect to manage rectangular area this +* export it to user-space. +* +* Currently used by drm_mode_atomic blob property FB_DAMAGE_CLIPS. +*/ +struct drm_mode_rect { +__s32 x1; +__s32 y1; +__s32 x2; +__s32 y2; +}; +#if defined(__cplusplus) }#endif
include/drm-uapi/i915_drm.h +43 -0
52 lines not on this page · raw message
include/drm-uapi/msm_drm.h +19 -6
@@ -105,14 +105,24 @@ struct drm_msm_gem_new {__u32 handle;/* out */ }; -#define MSM_INFO_IOVA 0x01 - -#define MSM_INFO_FLAGS (MSM_INFO_IOVA) +/* Get or set GEM buffer info. The requested value can be passed +* directly in 'value', or for data larger than 64b 'value' is a +* pointer to userspace buffer, with 'len' specifying the number of +* bytes copied into that buffer. For info returned by pointer, +* calling the GEM_INFO ioctl with null 'value' will return the +* required buffer size in 'len' +*/ +#define MSM_INFO_GET_OFFSET 0x00/* get mmap() offset, returned by value */ +#define MSM_INFO_GET_IOVA 0x01/* get iova, returned by value */ +#define MSM_INFO_SET_NAME 0x02/* set the debug name (by pointer) */ +#define MSM_INFO_GET_NAME 0x03/* get debug name, returned by pointer */ struct drm_msm_gem_info {__u32 handle;/* in */ -__u32 flags;/* in - combination of MSM_INFO_* flags */ -__u64 offset;/* out, mmap() offset or iova */ +__u32 info;/* in - one of MSM_INFO_* */ +__u64 value;/* in or out */ +__u32 len;/* in or out */ +__u32 pad; };#define MSM_PREP_READ 0x01
@@ -188,8 +198,11 @@ struct drm_msm_gem_submit_cmd {*/ #define MSM_SUBMIT_BO_READ 0x0001#define MSM_SUBMIT_BO_WRITE 0x0002 +#define MSM_SUBMIT_BO_DUMP 0x0004 -#define MSM_SUBMIT_BO_FLAGS (MSM_SUBMIT_BO_READ | MSM_SUBMIT_BO_WRITE) +#define MSM_SUBMIT_BO_FLAGS (MSM_SUBMIT_BO_READ | \ + MSM_SUBMIT_BO_WRITE | \ + MSM_SUBMIT_BO_DUMP)struct drm_msm_gem_submit_bo {__u32 flags;/* in, mask of MSM_SUBMIT_BO_x */
include/drm-uapi/v3d_drm.h +33 -0
@@ -36,6 +36,7 @@ extern "C" {#define DRM_V3D_MMAP_BO 0x03#define DRM_V3D_GET_PARAM 0x04#define DRM_V3D_GET_BO_OFFSET 0x05 +#define DRM_V3D_SUBMIT_TFU 0x06#define DRM_IOCTL_V3D_SUBMIT_CL DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_SUBMIT_CL, struct drm_v3d_submit_cl)#define DRM_IOCTL_V3D_WAIT_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_WAIT_BO, struct drm_v3d_wait_bo)
@@ -43,6 +44,7 @@ extern "C" {#define DRM_IOCTL_V3D_MMAP_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_MMAP_BO, struct drm_v3d_mmap_bo)#define DRM_IOCTL_V3D_GET_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_GET_PARAM, struct drm_v3d_get_param)#define DRM_IOCTL_V3D_GET_BO_OFFSET DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_GET_BO_OFFSET, struct drm_v3d_get_bo_offset) +#define DRM_IOCTL_V3D_SUBMIT_TFU DRM_IOW(DRM_COMMAND_BASE + DRM_V3D_SUBMIT_TFU, struct drm_v3d_submit_tfu)/** * struct drm_v3d_submit_cl - ioctl argument for submitting commands to the 3D
@@ -50,6 +52,14 @@ extern "C" {* * This asks the kernel to have the GPU execute an optional binner * command list, and a render command list. +* +* The L1T, slice, L2C, L2T, and GCA caches will be flushed before +* each CL executes. The VCD cache should be flushed (if necessary) +* by the submitted CLs. The TLB writes are guaranteed to have been +* flushed by the time the render done IRQ happens, which is the +* trigger for out_sync. Any dirtying of cachelines by the job (only +* possible using TMU writes) must be flushed by the caller using the +* CL's cache flush commands. */ struct drm_v3d_submit_cl {/* Pointer to the binner command list.
@@ -179,6 +189,7 @@ enum drm_v3d_param {DRM_V3D_PARAM_V3D_CORE0_IDENT0 ,DRM_V3D_PARAM_V3D_CORE0_IDENT1 ,DRM_V3D_PARAM_V3D_CORE0_IDENT2 , + DRM_V3D_PARAM_SUPPORTS_TFU, }; struct drm_v3d_get_param {
@@ -197,6 +208,28 @@ struct drm_v3d_get_bo_offset {__u32 offset; }; +struct drm_v3d_submit_tfu { +__u32 icfg; +__u32 iia; +__u32 iis; +__u32 ica; +__u32 iua; +__u32 ioa; +__u32 ios; +__u32 coef[4 ]; +/* First handle is the output BO, following are other inputs. +* 0 for unused. +*/ +__u32 bo_handles[4 ]; +/* sync object to block on before running the TFU job. Each TFU +* job will execute in the order submitted to its FD. Synchronization +* against rendering jobs requires using sync objects. +*/ +__u32 in_sync; +/* Sync object to signal when the TFU job is done. */ +__u32 out_sync; +}; +#if defined(__cplusplus) }#endif
Signature · 6 lines
2.19.1 _______________________________________________ igt-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/igt-dev
PATCH 2/4 tests/gem_ctx_sseu: Dynamic (sub)slice programming tests
In reply to Tvrtko UrsulinFrom: Lionel Landwerlin <[email protected]>
Verify that the per-context dynamic SSEU uAPI works as expected.
v2: Add subslice tests (Lionel)
Use MI_SET_PREDICATE for further verification when available (Lionel)
v3: Rename to gem_ctx_rpcs (Lionel)
v4: Update kernel API (Lionel)
Add 0 value test (Lionel)
Exercise invalid values (Lionel)
v5: Add perf tests (Lionel)
v6: Add new sysfs entry tests (Lionel)
v7: Test rsvd fields
Update for kernel series changes
v8: Drop test_no_sseu_support() test (Kelvin)
Drop drm_intel_*() apis (Chris)
v9: by Chris:
Drop all do_ioctl/do_ioctl_err()
Use gem_context_[gs]et_param()
Use gem_read() instead of mapping memory
by Lionel:
Test dynamic sseu on/off more
Tvrtko Ursulin:
v10:
* Various style tweaks and refactorings.
* New test coverage.
v11:
* Change platform support to just Gen11.
* Simplify availability test. (Chris Wilson)
* More invalid pointer tests. (Chris Wilson)
v12:
* Fix MAP_FIXED use (doh!).
* Fix get/set copy&paste errors.
* Drop supported platform test. (Chris Wilson)
* Add mmap__gtt test. (Chris Wilson)
v13:
* Commit message tweaks.
* Added reset/hang/suspend tests. (Chris Wilson)
* Assert spinner is busy. (Chris Wilson)
* Remove some more ABI assumptions. (Chris Wilson)
v14:
* Use default resume time. (Chris Wilson)
* Trigger hang after rpcs read batch has been submitted. (Chris Wilson)
v15:
* Adjust for uAPI restrictions.
v16:
* Build system changes.
v17:
* Remove all subtests which read the RPCS register. (Joonas Lahtinen)
v18:
* Tidy curly braces. (Joonas Lahtinen)
--- tests/Makefile.am | 1 + tests/Makefile.sources | 3 + tests/i915/gem_ctx_param.c | 4 +- tests/i915/gem_ctx_sseu.c | 532 +++++++++++++++++++++++++++++++++++++ tests/meson.build | 8 + 5 files changed, 547 insertions(+), 1 deletion(-) create mode 100644 tests/i915/gem_ctx_sseu.c
tests/Makefile.am +1 -0
@@ -111,6 +111,7 @@ gem_close_race_CFLAGS = $(AM_CFLAGS) $(THREAD_CFLAGS) gem_close_race_LDADD = $(LDADD) -lpthread gem_ctx_thrash_CFLAGS = $(AM_CFLAGS) $(THREAD_CFLAGS) gem_ctx_thrash_LDADD = $(LDADD) -lpthread +gem_ctx_sseu_LDADD = $(LDADD) $(top_builddir)/lib/libigt_perf.la gem_exec_capture_LDADD = $(LDADD) -lz gem_exec_parallel_CFLAGS = $(AM_CFLAGS) $(THREAD_CFLAGS) gem_exec_parallel_LDADD = $(LDADD) -lpthread
tests/Makefile.sources +3 -0
@@ -161,6 +161,9 @@ gem_ctx_isolation_SOURCES = i915/gem_ctx_isolation.c TESTS_progs += gem_ctx_param gem_ctx_param_SOURCES = i915/gem_ctx_param.c +TESTS_progs += gem_ctx_sseu +gem_ctx_sseu_SOURCES = i915/gem_ctx_sseu.c + TESTS_progs += gem_ctx_switch gem_ctx_switch_SOURCES = i915/gem_ctx_switch.c
tests/i915/gem_ctx_param.c +3 -1
@@ -294,11 +294,13 @@ igt_mainset_priority (fd); } +/* I915_CONTEXT_PARAM_SSEU tests are located in gem_ctx_sseu.c */ +/* NOTE: This testcase intentionally tests for the next free parameter * to catch ABI extensions. Don't "fix" this testcase without adding all * the tests for the new param first. */ - arg.param =I915_CONTEXT_PARAM_PRIORITY +1 ; + arg.param =I915_CONTEXT_PARAM_SSEU +1 ; igt_subtest("invalid-param-get") { arg.ctx_id = ctx;
tests/i915/gem_ctx_sseu.c new file +532 -0
532 lines not on this page · raw message
tests/meson.build +8 -0
@@ -288,6 +288,14 @@ foreach prog : gem_progs + gen3_progs test_list += prog endforeach +test_executables += executable('gem_ctx_sseu', + join_paths('i915', 'gem_ctx_sseu.c'), + dependencies : test_deps + [ lib_igt_perf ], + install_dir : libexecdir, + install_rpath : libexecdir_rpathdir, + install : true) +test_progs += 'gem_ctx_sseu' + test_executables += executable('gem_eio', join_paths('i915', 'gem_eio.c'), dependencies : test_deps + [ realtime ],
Signature · 6 lines
2.19.1 _______________________________________________ igt-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/igt-dev
PATCH 3/4 tests/gem_media_vme: Simple test to exercise the VME block
In reply to Tvrtko UrsulinFrom: Tony Ye <[email protected]>
Simple test which exercises the VME fixed function block.
v2: (Tvrtko Ursulin)
* Small cleanups like copyright date, tabs, remove unused bits.
v3: (Tony Ye)
* Added curbe data entry for dst surface.
* Read the dst surface after the VME kernel being executed.
v4: (Tony Ye)
* Added the media_vme.gxa kernel source code and compile instructions.
v5: (Tvrtko Ursulin)
* Added hang detector.
--- lib/gpu_cmds.c | 136 ++++++++++++++++++++ lib/gpu_cmds.h | 20 ++- lib/i915/shaders/media/README_media_vme.txt | 65 ++++++++++ lib/i915/shaders/media/media_vme.gxa | 51 ++++++++ lib/intel_batchbuffer.c | 9 ++ lib/intel_batchbuffer.h | 7 + lib/media_fill.c | 110 ++++++++++++++++ lib/media_fill.h | 6 + lib/surfaceformat.h | 2 + tests/Makefile.sources | 3 + tests/i915/gem_media_vme.c | 118 +++++++++++++++++ tests/meson.build | 1 + 12 files changed, 526 insertions(+), 2 deletions(-) create mode 100755 lib/i915/shaders/media/README_media_vme.txt create mode 100755 lib/i915/shaders/media/media_vme.gxa create mode 100644 tests/i915/gem_media_vme.c
lib/gpu_cmds.c +136 -0
@@ -52,6 +52,22 @@ gen7_fill_curbe_buffer_data(struct intel_batchbuffer *batch,return offset; } +uint32_t +gen11_fill_curbe_buffer_data (struct intel_batchbuffer *batch) +{ +uint32_t *curbe_buffer; +uint32_t offset; + + curbe_buffer =intel_batchbuffer_subdata_alloc (batch, +sizeof (uint32_t ) *8 , +64 ); + offset =intel_batchbuffer_subdata_offset (batch, curbe_buffer); + *curbe_buffer++ =0 ; + *curbe_buffer =1 ; + +return offset; +} + uint32_t gen7_fill_surface_state(struct intel_batchbuffer *batch, const struct igt_buf *buf,
@@ -119,6 +135,26 @@ gen7_fill_binding_table(struct intel_batchbuffer *batch,return offset; } +uint32_t +gen11_fill_binding_table (struct intel_batchbuffer *batch, +const struct igt_buf *src,const struct igt_buf *dst) +{ +uint32_t *binding_table, offset; + + binding_table =intel_batchbuffer_subdata_alloc (batch,64 ,64 ); + offset =intel_batchbuffer_subdata_offset (batch, binding_table); + binding_table[0 ] =gen11_fill_surface_state (batch, src, +SURFACE_1D ,SURFACEFORMAT_R32G32B32A32_FLOAT , +0 ,0 , +0 ); + binding_table[1 ] =gen11_fill_surface_state (batch, dst, +SURFACE_BUFFER ,SURFACEFORMAT_RAW , +1 ,1 , +1 ); + +return offset; +} + uint32_t gen7_fill_kernel(struct intel_batchbuffer *batch, const uint32_t kernel[][4],
@@ -384,6 +420,71 @@ gen8_fill_surface_state(struct intel_batchbuffer *batch,return offset; } +uint32_t +gen11_fill_surface_state (struct intel_batchbuffer *batch, +const struct igt_buf *buf, +uint32_t surface_type, +uint32_t format, +uint32_t vertical_alignment, +uint32_t horizontal_alignment, +int is_dst) +{ +struct gen8_surface_state *ss; +uint32_t write_domain, read_domain, offset; +int ret; + +if (is_dst) { + write_domain = read_domain =I915_GEM_DOMAIN_RENDER ; + }else { + write_domain =0 ; + read_domain =I915_GEM_DOMAIN_SAMPLER ; + } + + ss =intel_batchbuffer_subdata_alloc (batch,sizeof (*ss),64 ); + offset =intel_batchbuffer_subdata_offset (batch, ss); + + ss->ss0.surface_type = surface_type; + ss->ss0.surface_format = format; + ss->ss0.render_cache_read_write =1 ; + ss->ss0.vertical_alignment = vertical_alignment;/* align 4 */ + ss->ss0.horizontal_alignment = horizontal_alignment;/* align 4 */ + +if (buf->tiling ==I915_TILING_X ) + ss->ss0.tiled_mode =2 ; +else if (buf->tiling ==I915_TILING_Y ) + ss->ss0.tiled_mode =3 ; +else + ss->ss0.tiled_mode =0 ; + + ss->ss8.base_addr = buf->bo->offset; + + ret =drm_intel_bo_emit_reloc (batch->bo, +intel_batchbuffer_subdata_offset (batch, ss) +8 *4 , + buf->bo,0 , read_domain, write_domain); +igt_assert (ret ==0 ); + +if (is_dst) { + ss->ss1.memory_object_control =2 ; + ss->ss2.height =1 ; + ss->ss2.width =95 ; + ss->ss3.pitch =0 ; + ss->ss7.shader_chanel_select_r =4 ; + ss->ss7.shader_chanel_select_g =5 ; + ss->ss7.shader_chanel_select_b =6 ; + ss->ss7.shader_chanel_select_a =7 ; + } +else { + ss->ss1.qpitch =4040 ; + ss->ss1.base_mip_level =31 ; + ss->ss2.height =9216 ; + ss->ss2.width =1019 ; + ss->ss3.pitch =64 ; + ss->ss5.mip_count =2 ; + } + +return offset; +} + uint32_t gen8_fill_interface_descriptor(struct intel_batchbuffer *batch, const struct igt_buf *dst,
@@ -419,6 +520,41 @@ gen8_fill_interface_descriptor(struct intel_batchbuffer *batch,return offset; } +uint32_t +gen11_fill_interface_descriptor (struct intel_batchbuffer *batch, +const struct igt_buf *src,const struct igt_buf *dst, +const uint32_t kernel[][4 ], +size_t size) +{ +struct gen8_interface_descriptor_data *idd; +uint32_t offset; +uint32_t binding_table_offset, kernel_offset; + + binding_table_offset =gen11_fill_binding_table (batch, src,dst); + kernel_offset =gen7_fill_kernel (batch, kernel, size); + + idd =intel_batchbuffer_subdata_alloc (batch,sizeof (*idd),64 ); + offset =intel_batchbuffer_subdata_offset (batch, idd); + + idd->desc0.kernel_start_pointer = (kernel_offset >>6 ); + + idd->desc2.single_program_flow =1 ; + idd->desc2.floating_point_mode =GEN8_FLOATING_POINT_IEEE_754 ; + + idd->desc3.sampler_count =0 ;/* 0 samplers used */ + idd->desc3.sampler_state_pointer =0 ; + + idd->desc4.binding_table_entry_count =0 ; + idd->desc4.binding_table_pointer = (binding_table_offset >>5 ); + + idd->desc5.constant_urb_entry_read_offset =0 ; + idd->desc5.constant_urb_entry_read_length =1 ;/* grf 1 */ + + idd->desc6.num_threads_in_tg =1 ; + +return offset; +} +void gen8_emit_state_base_address (struct intel_batchbuffer *batch) {
lib/gpu_cmds.h +18 -2
@@ -43,6 +43,8 @@ gen7_render_flush(struct intel_batchbuffer *batch, uint32_t batch_end);uint32_t gen7_fill_curbe_buffer_data (struct intel_batchbuffer *batch,uint8_t color); +uint32_t +gen11_fill_curbe_buffer_data (struct intel_batchbuffer *batch); uint32_t gen7_fill_surface_state(struct intel_batchbuffer *batch,
@@ -53,6 +55,9 @@ gen7_fill_surface_state(struct intel_batchbuffer *batch,uint32_t gen7_fill_binding_table (struct intel_batchbuffer *batch,const struct igt_buf *dst); +uint32_t +gen11_fill_binding_table (struct intel_batchbuffer *batch, +const struct igt_buf *src,const struct igt_buf *dst); uint32_t gen7_fill_kernel(struct intel_batchbuffer *batch,
@@ -99,13 +104,24 @@ gen8_fill_surface_state(struct intel_batchbuffer *batch,const struct igt_buf *buf, uint32_t format, int is_dst); - +uint32_t +gen11_fill_surface_state (struct intel_batchbuffer *batch, +const struct igt_buf *buf, +uint32_t surface_type, +uint32_t format, +uint32_t vertical_alignment, +uint32_t horizontal_alignment, +int is_dst);uint32_t gen8_fill_interface_descriptor (struct intel_batchbuffer *batch,const struct igt_buf *dst,const uint32_t kernel[][4 ],size_t size); - +uint32_t +gen11_fill_interface_descriptor (struct intel_batchbuffer *batch, +const struct igt_buf *src,const struct igt_buf *dst, +const uint32_t kernel[][4 ], +size_t size);void gen8_emit_state_base_address (struct intel_batchbuffer *batch);
lib/i915/shaders/media/README_media_vme.txt new file +65 -0
65 lines not on this page · raw message
lib/i915/shaders/media/media_vme.gxa new file +51 -0
51 lines not on this page · raw message
lib/intel_batchbuffer.c +9 -0
@@ -873,6 +873,15 @@ igt_fillfunc_t igt_get_media_fillfunc(int devid)return fill; } +igt_vme_func_t igt_get_media_vme_func (int devid) +{ +igt_vme_func_t fill =NULL ; + +if (IS_GEN9 (devid) ||IS_GEN10 (devid) ||IS_GEN11 (devid)) + fill = gen11_media_vme_func; + +return fill; +}/** * igt_get_gpgpu_fillfunc: * @devid: pci device id
lib/intel_batchbuffer.h +7 -0
@@ -325,6 +325,13 @@ typedef void (*igt_fillfunc_t)(struct intel_batchbuffer *batch,igt_fillfunc_t igt_get_media_fillfunc (int devid);igt_fillfunc_t igt_get_gpgpu_fillfunc (int devid); +typedef void (*igt_vme_func_t )(struct intel_batchbuffer *batch, +const struct igt_buf *src, +unsigned int width,unsigned int height, +const struct igt_buf *dst); + +igt_vme_func_t igt_get_media_vme_func (int devid); +/** * igt_media_spinfunc_t: * @batch: batchbuffer object
lib/media_fill.c +110 -0
119 lines not on this page · raw message
lib/media_fill.h +6 -0
@@ -49,4 +49,10 @@ gen9_media_fillfunc(struct intel_batchbuffer *batch, unsigned int width, unsigned int height, uint8_t color); +void +gen11_media_vme_func (struct intel_batchbuffer *batch, +const struct igt_buf *src, +unsigned int width,unsigned int height, +const struct igt_buf *dst); +#endif /* RENDE_MEDIA_FILL_H */
lib/surfaceformat.h +2 -0
@@ -171,6 +171,8 @@#define SURFACEFORMAT_R16G16B16_SSCALED 0x19E#define SURFACEFORMAT_R16G16B16_USCALED 0x19F +#define SURFACEFORMAT_RAW 0x1FF +#define SURFACERETURNFORMAT_FLOAT32 0#define SURFACERETURNFORMAT_S1 1
tests/Makefile.sources +3 -0
@@ -302,6 +302,9 @@ gem_madvise_SOURCES = i915/gem_madvise.c TESTS_progs += gem_media_fill gem_media_fill_SOURCES = i915/gem_media_fill.c +TESTS_progs += gem_media_vme +gem_media_vme_SOURCES = i915/gem_media_vme.c + TESTS_progs += gem_mmap gem_mmap_SOURCES = i915/gem_mmap.c
tests/i915/gem_media_vme.c new file +118 -0
118 lines not on this page · raw message
tests/meson.build +1 -0
@@ -166,6 +166,7 @@ gem_progs = [ 'gem_lut_handle', 'gem_madvise', 'gem_media_fill', + 'gem_media_vme', 'gem_mmap', 'gem_mmap_gtt', 'gem_mmap_offset_exhaustion',
Signature · 6 lines
2.19.1 _______________________________________________ igt-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/igt-dev
PATCH 4/4 tests/gem_media_vme: Shut down half of subslices to avoid gpu hang on ICL
In reply to Tvrtko UrsulinFrom: Tony Ye <[email protected]>
On Icelake we need to turn off subslices not containing the VME block or the VME kernel will hang.
v2: (Tvrtko Ursulin)
* Remove libdrm usage for setting context param.
* Cleanup bitmask operation.
* Only apply the workaround for ICL.
v3: (Tvrtko Ursulin)
* Added hang detector. (Chris Wilson)
v4: (Tvrtko Ursulin)
* Rebase for hang detector moved to previous patch.
* Tidy curly braces.
--- lib/gpu_cmds.c | 12 ++++++++ lib/gpu_cmds.h | 3 ++ lib/media_fill.c | 2 +- tests/i915/gem_media_vme.c | 60 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 1 deletion(-)
lib/gpu_cmds.c +12 -0
@@ -36,6 +36,18 @@ gen7_render_flush(struct intel_batchbuffer *batch, uint32_t batch_end)igt_assert (ret ==0 ); } +void +gen7_render_context_flush (struct intel_batchbuffer *batch,uint32_t batch_end) +{ +int ret; + + ret =drm_intel_bo_subdata (batch->bo,0 ,4096 , batch->buffer); +if (ret ==0 ) + ret =drm_intel_gem_bo_context_exec (batch->bo, batch->ctx, + batch_end,0 ); +igt_assert (ret ==0 ); +} +uint32_t gen7_fill_curbe_buffer_data (struct intel_batchbuffer *batch,uint8_t color)
lib/gpu_cmds.h +3 -0
@@ -40,6 +40,9 @@void gen7_render_flush (struct intel_batchbuffer *batch,uint32_t batch_end); +void +gen7_render_context_flush (struct intel_batchbuffer *batch,uint32_t batch_end); +uint32_t gen7_fill_curbe_buffer_data (struct intel_batchbuffer *batch,uint8_t color);
lib/media_fill.c +1 -1
@@ -338,7 +338,7 @@ __gen11_media_vme_func(struct intel_batchbuffer *batch, batch_end =intel_batchbuffer_align (batch,8 );assert (batch_end <BATCH_STATE_SPLIT ); -gen7_render_flush (batch, batch_end); +gen7_render_context_flush (batch, batch_end);intel_batchbuffer_reset (batch); }
tests/i915/gem_media_vme.c +60 -0
72 lines not on this page · raw message
Signature · 6 lines
2.19.1 _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [Intel-gfx] [PATCH i-g-t 4/4] tests/gem_media_vme: Shut down half of subslices to avoid gpu hang on ICL
Quoting Tvrtko Ursulin (2018-12-13 12:06:36)
Quoted 8 lines
tests/i915/gem_media_vme.c +8
-0+static void shut_non_vme_subslices (int drm_fd,uint32_t ctx) +{ +struct drm_i915_gem_context_param_sseu sseu = { }; +struct drm_i915_gem_context_param arg = { + .param =I915_CONTEXT_PARAM_SSEU , + .ctx_id = ctx, + .size =sizeof (sseu), + .value =to_user_pointer (&sseu),
tests/i915/gem_media_vme.c static void scratch_buf_init_dst(drm_intel_bufmgr *bufmgr, struct igt_buf *buf) · line 120
Quoted 10 lines
tests/i915/gem_media_vme.c +10
-0+ }; +int ret; + +if (__gem_context_get_param (drm_fd, &arg)) +return ;/* no sseu support */ + + ret =__gem_context_set_param (drm_fd, &arg); +igt_assert (ret ==0 || ret == -ENODEV || ret == -EINVAL ); +if (ret) +return ;/* no sseu support */
/* no sseu reconfiguration */
That justifies for me the two step is-supported check. get -> does the kernel recognise this param and do we have sseu set -> does the kernel/device allow us to adjust sseu -Chris
_______________________________________________
Intel-gfx mailing list [email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Patchwork
CI[igt-dev] ✓ Fi.CI.BAT: success for Per context dynamic (sub)slice power-gating (rev9)
In reply to Tvrtko Ursulin== Series Details ==
== Series Details ==
Series: Per context dynamic (sub)slice power-gating (rev9)
URL : https://patchwork.freedesktop.org/series/49190/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_5311 -> IGTPW_2150
====================================================
Summary
-------
**WARNING**
Minor unknown changes coming with IGTPW_2150 need to be verified manually.
If you think the reported changes have nothing to do with the changes introduced in IGTPW_2150, please notify your bug team to allow them to document this new failure mode, which will reduce false positives in CI.
External URL: https://patchwork.freedesktop.org/api/1.0/series/49190/revisions/9/mbox/
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in IGTPW_2150:
### IGT changes ###
#### Warnings ####
* igt@kms_pipe_crc_basic@nonblocking-crc-pipe-c:
- fi-kbl-7567u: PASS -> SKIP +33
Known issues
------------
Here are the changes found in IGTPW_2150 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_exec_suspend@basic-s3:
- fi-blb-e6850: PASS -> INCOMPLETE [fdo#107718]
* igt@i915_module_load@reload-with-fault-injection:
- fi-kbl-7567u: PASS -> DMESG-WARN [fdo#105602] / [fdo#108529] +1
* igt@i915_selftest@live_hangcheck:
- fi-bwr-2160: PASS -> DMESG-FAIL [fdo#108735]
* igt@kms_flip@basic-flip-vs-dpms:
- fi-icl-u3: NOTRUN -> DMESG-WARN [fdo#109044]
* igt@kms_frontbuffer_tracking@basic:
- fi-byt-clapper: PASS -> FAIL [fdo#103167]
* igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a:
- fi-byt-clapper: PASS -> INCOMPLETE [fdo#102657]
* igt@pm_rpm@module-reload:
- fi-kbl-7567u: PASS -> DMESG-WARN [fdo#108529]
* igt@prime_vgem@basic-fence-flip:
- fi-ilk-650: PASS -> FAIL [fdo#104008]
* {igt@runner@aborted}:
- fi-icl-u3: NOTRUN -> FAIL [fdo#108924]
- fi-icl-y: NOTRUN -> FAIL [fdo#108070]
#### Possible fixes ####
* igt@gem_ctx_create@basic-files:
- fi-kbl-7560u: INCOMPLETE [fdo#103665] -> PASS
* igt@kms_chamelium@hdmi-hpd-fast:
- fi-kbl-7500u: FAIL [fdo#108767] -> PASS
#### Warnings ####
* igt@kms_chamelium@common-hpd-after-suspend:
- fi-kbl-7567u: DMESG-WARN [fdo#108473] -> DMESG-FAIL [fdo#105079]
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#102657]: https://bugs.freedesktop.org/show_bug.cgi?id=102657
[fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
[fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665
[fdo#104008]: https://bugs.freedesktop.org/show_bug.cgi?id=104008
[fdo#105079]: https://bugs.freedesktop.org/show_bug.cgi?id=105079
[fdo#105602]: https://bugs.freedesktop.org/show_bug.cgi?id=105602
[fdo#107718]: https://bugs.freedesktop.org/show_bug.cgi?id=107718
[fdo#108070]: https://bugs.freedesktop.org/show_bug.cgi?id=108070
[fdo#108473]: https://bugs.freedesktop.org/show_bug.cgi?id=108473
[fdo#108529]: https://bugs.freedesktop.org/show_bug.cgi?id=108529
[fdo#108735]: https://bugs.freedesktop.org/show_bug.cgi?id=108735
[fdo#108767]: https://bugs.freedesktop.org/show_bug.cgi?id=108767
[fdo#108924]: https://bugs.freedesktop.org/show_bug.cgi?id=108924
[fdo#109044]: https://bugs.freedesktop.org/show_bug.cgi?id=109044
Participating hosts (47 -> 45)
------------------------------
Additional (2): fi-icl-y fi-icl-u3
Missing (4): fi-kbl-soraka fi-ctg-p8600 fi-byt-squawks fi-ilk-m540
Build changes
-------------
* IGT: IGT_4746 -> IGTPW_2150
CI_DRM_5311: a42fd8bf199784ee4ff1cdb5ee03eedd9a535d4a @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_2150: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2150/
IGT_4746: 2c793666d8c8328733f5769b16ae5858fee97f3f @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
== Testlist changes ==
+igt@gem_media_vme
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2150/
_______________________________________________
igt-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/igt-dev
Patchwork
CI[igt-dev] ✓ Fi.CI.IGT: success for Per context dynamic (sub)slice power-gating (rev9)
In reply to Tvrtko Ursulin== Series Details ==
== Series Details ==
Series: Per context dynamic (sub)slice power-gating (rev9)
URL : https://patchwork.freedesktop.org/series/49190/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_5311_full -> IGTPW_2150_full
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://patchwork.freedesktop.org/api/1.0/series/49190/revisions/9/mbox/
Known issues
------------
Here are the changes found in IGTPW_2150_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_exec_schedule@pi-ringfull-bsd:
- shard-apl: NOTRUN -> FAIL [fdo#103158]
* igt@gem_wait@basic-await-all:
- shard-snb: PASS -> INCOMPLETE [fdo#105411]
* igt@gem_workarounds@suspend-resume-fd:
- shard-kbl: PASS -> INCOMPLETE [fdo#103665]
* igt@kms_busy@extended-modeset-hang-newfb-with-reset-render-b:
- shard-snb: NOTRUN -> DMESG-WARN [fdo#107956]
* igt@kms_ccs@pipe-a-crc-sprite-planes-basic:
- shard-glk: PASS -> FAIL [fdo#108145]
* igt@kms_ccs@pipe-b-crc-sprite-planes-basic:
- shard-apl: PASS -> FAIL [fdo#106510] / [fdo#108145]
* igt@kms_cursor_crc@cursor-128x128-random:
- shard-apl: PASS -> FAIL [fdo#103232] +3
* igt@kms_cursor_crc@cursor-256x256-random:
- shard-glk: PASS -> FAIL [fdo#103232] +5
* igt@kms_cursor_crc@cursor-256x256-suspend:
- shard-kbl: PASS -> FAIL [fdo#103191] / [fdo#103232]
- shard-apl: PASS -> FAIL [fdo#103191] / [fdo#103232]
* igt@kms_cursor_crc@cursor-64x64-random:
- shard-kbl: PASS -> FAIL [fdo#103232] +1
* igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy:
- shard-glk: PASS -> FAIL [fdo#104873]
* igt@kms_flip@2x-plain-flip-fb-recreate-interruptible:
- shard-glk: PASS -> FAIL [fdo#100368]
* igt@kms_flip@flip-vs-expired-vblank-interruptible:
- shard-glk: PASS -> FAIL [fdo#105363]
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-gtt:
- shard-apl: PASS -> FAIL [fdo#103167] +3
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-fullscreen:
- shard-kbl: PASS -> FAIL [fdo#103167] +2
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-mmap-cpu:
- shard-glk: PASS -> FAIL [fdo#103167] +8
* igt@kms_plane@plane-position-covered-pipe-a-planes:
- shard-glk: PASS -> FAIL [fdo#103166] +3
* igt@kms_plane_multiple@atomic-pipe-a-tiling-y:
- shard-apl: PASS -> FAIL [fdo#103166]
#### Possible fixes ####
* igt@kms_busy@extended-pageflip-modeset-hang-oldfb-render-a:
- shard-kbl: DMESG-WARN [fdo#107956] -> PASS
- shard-hsw: DMESG-WARN [fdo#107956] -> PASS
- shard-glk: DMESG-WARN [fdo#107956] -> PASS * igt@kms_cursor_crc@cursor-256x256-sliding:
- shard-glk: FAIL [fdo#103232] -> PASS +1
* igt@kms_cursor_crc@cursor-256x85-sliding:
- shard-kbl: FAIL [fdo#103232] -> PASS
- shard-apl: FAIL [fdo#103232] -> PASS +2
* igt@kms_cursor_crc@cursor-512x512-onscreen:
- shard-apl: INCOMPLETE [fdo#103927] -> SKIP
* igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic:
- shard-glk: FAIL [fdo#105454] / [fdo#106509] -> PASS
* igt@kms_flip@modeset-vs-vblank-race:
- shard-apl: FAIL [fdo#103060] -> PASS
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-cpu:
- shard-apl: FAIL [fdo#103167] -> PASS
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-onoff:
- shard-glk: FAIL [fdo#103167] -> PASS
* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-pgflip-blt:
- shard-snb: INCOMPLETE [fdo#105411] / [fdo#107469] -> SKIP
* igt@kms_plane@plane-position-covered-pipe-a-planes:
- shard-apl: FAIL [fdo#103166] -> PASS +1
* igt@kms_plane@plane-position-covered-pipe-b-planes:
- shard-glk: FAIL [fdo#103166] -> PASS +1
* igt@kms_plane_alpha_blend@pipe-c-constant-alpha-max:
- shard-glk: FAIL [fdo#108145] -> PASS +1
* igt@kms_rotation_crc@multiplane-rotation-cropping-top:
- shard-glk: DMESG-FAIL [fdo#105763] / [fdo#106538] -> PASS
* igt@kms_setmode@basic:
- shard-kbl: FAIL [fdo#99912] -> PASS
* igt@kms_vblank@pipe-b-ts-continuation-suspend:
- shard-kbl: INCOMPLETE [fdo#103665] -> PASS
[fdo#100368]: https://bugs.freedesktop.org/show_bug.cgi?id=100368
[fdo#103060]: https://bugs.freedesktop.org/show_bug.cgi?id=103060
[fdo#103158]: https://bugs.freedesktop.org/show_bug.cgi?id=103158
[fdo#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166
[fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
[fdo#103191]: https://bugs.freedesktop.org/show_bug.cgi?id=103191
[fdo#103232]: https://bugs.freedesktop.org/show_bug.cgi?id=103232
[fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665
[fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927
[fdo#104873]: https://bugs.freedesktop.org/show_bug.cgi?id=104873
[fdo#105363]: https://bugs.freedesktop.org/show_bug.cgi?id=105363
[fdo#105411]: https://bugs.freedesktop.org/show_bug.cgi?id=105411
[fdo#105454]: https://bugs.freedesktop.org/show_bug.cgi?id=105454
[fdo#105763]: https://bugs.freedesktop.org/show_bug.cgi?id=105763
[fdo#106509]: https://bugs.freedesktop.org/show_bug.cgi?id=106509
[fdo#106510]: https://bugs.freedesktop.org/show_bug.cgi?id=106510
[fdo#106538]: https://bugs.freedesktop.org/show_bug.cgi?id=106538
[fdo#107469]: https://bugs.freedesktop.org/show_bug.cgi?id=107469
[fdo#107956]: https://bugs.freedesktop.org/show_bug.cgi?id=107956
[fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
[fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912
Participating hosts (7 -> 5)
------------------------------
Missing (2): shard-skl shard-iclb
Build changes
-------------
* IGT: IGT_4746 -> IGTPW_2150
* Piglit: piglit_4509 -> None
CI_DRM_5311: a42fd8bf199784ee4ff1cdb5ee03eedd9a535d4a @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_2150: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2150/
IGT_4746: 2c793666d8c8328733f5769b16ae5858fee97f3f @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2150/
_______________________________________________
igt-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/igt-dev