diff options
author | Zbigniew Kempczyński <zbigniew.kempczynski@intel.com> | 2021-07-01 09:29:51 +0200 |
---|---|---|
committer | Zbigniew Kempczyński <zbigniew.kempczynski@intel.com> | 2021-08-10 21:02:50 +0200 |
commit | cb8edab36ed2f850f48ad60a3292bd9dbe35318e (patch) | |
tree | 5fcc068be2650506d2de27f6af730c5f0a070436 /tests/i915/i915_pm_rpm.c | |
parent | c17e2c0711b9b2b4ed08883a9b0d08c04d39ca1f (diff) |
tests/i915_pm_rpm: Adopt to use no-reloc
For newer gens we're not able to rely on relocations. Adopt to use
offsets acquired from the allocator.
Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
Cc: Petri Latvala <petri.latvala@intel.com>
Cc: Ashutosh Dixit <ashutosh.dixit@intel.com>
Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Diffstat (limited to 'tests/i915/i915_pm_rpm.c')
-rw-r--r-- | tests/i915/i915_pm_rpm.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/tests/i915/i915_pm_rpm.c b/tests/i915/i915_pm_rpm.c index 39e0064a..62720d02 100644 --- a/tests/i915/i915_pm_rpm.c +++ b/tests/i915/i915_pm_rpm.c @@ -1178,7 +1178,8 @@ static void gem_pread_subtest(void) /* Paints a square of color $color, size $width x $height, at position $x x $y * of $dst_handle, which contains pitch $pitch. */ -static void submit_blt_cmd(uint32_t dst_handle, uint16_t x, uint16_t y, +static void submit_blt_cmd(uint32_t dst_handle, int dst_size, + uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint32_t pitch, uint32_t color, uint32_t *presumed_dst_offset) { @@ -1190,6 +1191,12 @@ static void submit_blt_cmd(uint32_t dst_handle, uint16_t x, uint16_t y, struct drm_i915_gem_exec_object2 objs[2] = {{}, {}}; struct drm_i915_gem_relocation_entry relocs[1] = {{}}; struct drm_i915_gem_wait gem_wait; + uint64_t ahnd = get_reloc_ahnd(drm_fd, 0), dst_offset; + + if (ahnd) + dst_offset = get_offset(ahnd, dst_handle, dst_size, 0); + else + dst_offset = *presumed_dst_offset; i = 0; @@ -1205,9 +1212,9 @@ static void submit_blt_cmd(uint32_t dst_handle, uint16_t x, uint16_t y, batch_buf[i++] = (y << 16) | x; batch_buf[i++] = ((y + height) << 16) | (x + width); reloc_pos = i; - batch_buf[i++] = *presumed_dst_offset; + batch_buf[i++] = dst_offset; if (intel_gen(ms_data.devid) >= 8) - batch_buf[i++] = 0; + batch_buf[i++] = dst_offset >> 32; batch_buf[i++] = color; batch_buf[i++] = MI_BATCH_BUFFER_END; @@ -1230,9 +1237,16 @@ static void submit_blt_cmd(uint32_t dst_handle, uint16_t x, uint16_t y, objs[0].alignment = 64; objs[1].handle = batch_handle; - objs[1].relocation_count = 1; + objs[1].relocation_count = !ahnd ? 1 : 0; objs[1].relocs_ptr = (uintptr_t)relocs; + if (ahnd) { + objs[0].offset = dst_offset; + objs[0].flags = EXEC_OBJECT_PINNED | EXEC_OBJECT_WRITE; + objs[1].offset = get_offset(ahnd, batch_handle, batch_size, 0); + objs[1].flags = EXEC_OBJECT_PINNED; + } + execbuf.buffers_ptr = (uintptr_t)objs; execbuf.buffer_count = 2; execbuf.batch_len = batch_size; @@ -1253,6 +1267,7 @@ static void submit_blt_cmd(uint32_t dst_handle, uint16_t x, uint16_t y, do_ioctl(drm_fd, DRM_IOCTL_I915_GEM_WAIT, &gem_wait); gem_close(drm_fd, batch_handle); + put_ahnd(ahnd); } /* Make sure we can submit a batch buffer and verify its result. */ @@ -1285,7 +1300,7 @@ static void gem_execbuf_subtest(void) disable_all_screens_and_wait(&ms_data); color = 0x12345678; - submit_blt_cmd(handle, sq_x, sq_y, sq_w, sq_h, pitch, color, + submit_blt_cmd(handle, dst_size, sq_x, sq_y, sq_w, sq_h, pitch, color, &presumed_offset); igt_assert(wait_for_suspended()); @@ -1324,7 +1339,7 @@ static void gem_execbuf_subtest(void) * suspended. We use the same spot, but a different color. As a bonus, * we're testing the presumed_offset from the previous command. */ color = 0x87654321; - submit_blt_cmd(handle, sq_x, sq_y, sq_w, sq_h, pitch, color, + submit_blt_cmd(handle, dst_size, sq_x, sq_y, sq_w, sq_h, pitch, color, &presumed_offset); disable_all_screens_and_wait(&ms_data); |