From patchwork Wed Nov 9 16:15:53 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robert Bragg X-Patchwork-Id: 9419741 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 345CF601C0 for ; Wed, 9 Nov 2016 16:16:32 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 285AF289E5 for ; Wed, 9 Nov 2016 16:16:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1CD6D28AD0; Wed, 9 Nov 2016 16:16:32 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.6 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,RCVD_IN_SORBS_SPAM,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 7DD8D289E5 for ; Wed, 9 Nov 2016 16:16:31 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 05FF06E6F1; Wed, 9 Nov 2016 16:16:31 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wm0-x244.google.com (mail-wm0-x244.google.com [IPv6:2a00:1450:400c:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 841E86E6F1 for ; Wed, 9 Nov 2016 16:16:29 +0000 (UTC) Received: by mail-wm0-x244.google.com with SMTP id c17so30149934wmc.3 for ; Wed, 09 Nov 2016 08:16:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=1AgM4/wIP3dW/VtBX4E3f6/QUHI1teyZGUZtjD0Unco=; b=0ZJwdcCue0b8fOEoEG8ErU552wRCOFlN0V2aXIHwTVBYJ4xKadvUi8OeJEf0dKZYfR G6bfQusqMHBrh5d7004wT71VyCJk6VHztoh9nwJfZRZxS+zWeCbRM5ffYhwwtXXaXABU APoZi0IimM4wtFVdGsD+EI5wD+/KHs/RXdNSWppYMTDMA+s1fmEljpJZqh2cyRid7i8B /NyimnKc5h7VCa5CzYNlhgzLQ1AAD0rO1Egm3f2akND0GfOEfbFGGQNsbD0lOrjy/ZF7 IUR8xmHm9747rN9v4OleOeq70TDMjtyEXiAOGveZGVW3/afCrLZAI0aAivjyY6gxnyee uMDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=1AgM4/wIP3dW/VtBX4E3f6/QUHI1teyZGUZtjD0Unco=; b=LyjQ4J2iBHNEX7wsbCYH5UKQx+zM443vjAg8TyIOio+YfjcMocNHNWNhfQlQXno0ff yHn4WhpOSaj2zGC0uxxvOmbqHZY95jWDvh0dPctefhi0PTTUZkUIhvdSpxLOO3JG7bM2 MDl1ioTsVZ54F3u8XnpJtEQ87AkUt/Lm0FtY1Oa22hgbG1AlvepCnyeSv+mB52hDyaL4 503t4Kv6QRTHEFUpxDybWjFQNcu5Kvf02rBfPyEVNeDzg+pV9XF1vdqLnohKTbfU73YM NlblFBHT3dolDUarJan50xI5jJIMHLkM1gDqofQwBf64sNuRgcvWVTHYZNqu9OzQBKGJ K20g== X-Gm-Message-State: ABUngvetVKeZvB+K+Ois8lbj62uG6hv9Ul9GcoDuRlDhYDZnBYK/aX01mz4s7cMhD2YYNg== X-Received: by 10.28.27.133 with SMTP id b127mr20272148wmb.59.1478708188020; Wed, 09 Nov 2016 08:16:28 -0800 (PST) Received: from sixbynine.org (82-132-216-223.dab.02.net. [82.132.216.223]) by smtp.gmail.com with ESMTPSA id s133sm7767099wmd.19.2016.11.09.08.16.27 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 09 Nov 2016 08:16:27 -0800 (PST) From: Robert Bragg To: intel-gfx@lists.freedesktop.org Date: Wed, 9 Nov 2016 16:15:53 +0000 Message-Id: <20161109161602.2402-3-robert@sixbynine.org> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20161109161602.2402-1-robert@sixbynine.org> References: <20161109161602.2402-1-robert@sixbynine.org> Subject: [Intel-gfx] [PATCH igt v3 02/11] igt/gem_exec_parse: some minor cleanups X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Virus-Scanned: ClamAV using ClamSMTP This normalizes the execbuf utilities in this file to all use memset to clear obj, reloc and execbuf structures and set them up in the same order. As I was debugging some unpredictable test failures I was getting unsure that all these structures were being fully initialized. The same I915_GEM_DOMAIN_COMMAND domain is now used with all relocs. The register/command defines have been moved to the top of the file to be available to all tests/utilities. The handle + fd variables are now static. Signed-off-by: Robert Bragg Reviewed-by: Matthew Auld --- tests/gem_exec_parse.c | 196 +++++++++++++++++-------------------------------- 1 file changed, 66 insertions(+), 130 deletions(-) diff --git a/tests/gem_exec_parse.c b/tests/gem_exec_parse.c index a39db3e..72d7c7b 100644 --- a/tests/gem_exec_parse.c +++ b/tests/gem_exec_parse.c @@ -37,6 +37,20 @@ #define OACONTROL 0x2360 #define DERRMR 0x44050 +#define HSW_CS_GPR(n) (0x2600 + 8*(n)) +#define HSW_CS_GPR0 HSW_CS_GPR(0) +#define HSW_CS_GPR1 HSW_CS_GPR(1) + +#define MI_LOAD_REGISTER_REG (0x2a << 23) +#define MI_STORE_REGISTER_MEM (0x24 << 23) +#define MI_ARB_ON_OFF (0x8 << 23) +#define MI_DISPLAY_FLIP ((0x14 << 23) | 1) + +#define GFX_OP_PIPE_CONTROL ((0x3<<29)|(0x3<<27)|(0x2<<24)|2) +#define PIPE_CONTROL_QW_WRITE (1<<14) +#define PIPE_CONTROL_LRI_POST_OP (1<<23) + + static int command_parser_version(int fd) { int version = -1; @@ -51,12 +65,6 @@ static int command_parser_version(int fd) return -1; } -#define HSW_CS_GPR(n) (0x2600 + 8*(n)) -#define HSW_CS_GPR0 HSW_CS_GPR(0) -#define HSW_CS_GPR1 HSW_CS_GPR(1) - -#define MI_LOAD_REGISTER_REG (0x2a << 23) -#define MI_STORE_REGISTER_MEM (0x24 << 23) static void hsw_load_register_reg(void) { uint32_t buf[16] = { @@ -100,13 +108,13 @@ static void hsw_load_register_reg(void) reloc[0].offset = 7*sizeof(uint32_t); reloc[0].target_handle = obj[0].handle; reloc[0].delta = 0; - reloc[0].read_domains = I915_GEM_DOMAIN_INSTRUCTION; - reloc[0].write_domain = I915_GEM_DOMAIN_INSTRUCTION; + reloc[0].read_domains = I915_GEM_DOMAIN_COMMAND; + reloc[0].write_domain = I915_GEM_DOMAIN_COMMAND; reloc[1].offset = 13*sizeof(uint32_t); reloc[1].target_handle = obj[0].handle; reloc[1].delta = sizeof(uint32_t); - reloc[1].read_domains = I915_GEM_DOMAIN_INSTRUCTION; - reloc[1].write_domain = I915_GEM_DOMAIN_INSTRUCTION; + reloc[1].read_domains = I915_GEM_DOMAIN_COMMAND; + reloc[1].write_domain = I915_GEM_DOMAIN_COMMAND; obj[1].relocs_ptr = (uintptr_t)&reloc; obj[1].relocation_count = 2; @@ -152,7 +160,7 @@ static void exec_batch_patched(int fd, uint32_t cmd_bo, uint32_t *cmds, int size, int patch_offset, uint64_t expected_value) { struct drm_i915_gem_execbuffer2 execbuf; - struct drm_i915_gem_exec_object2 objs[2]; + struct drm_i915_gem_exec_object2 obj[2]; struct drm_i915_gem_relocation_entry reloc[1]; uint32_t target_bo = gem_create(fd, 4096); @@ -160,42 +168,24 @@ static void exec_batch_patched(int fd, uint32_t cmd_bo, uint32_t *cmds, gem_write(fd, cmd_bo, 0, cmds, size); + memset(obj, 0, sizeof(obj)); + obj[0].handle = target_bo; + obj[1].handle = cmd_bo; + + memset(reloc, 0, sizeof(reloc)); reloc[0].offset = patch_offset; + reloc[0].target_handle = obj[0].handle; reloc[0].delta = 0; - reloc[0].target_handle = target_bo; - reloc[0].read_domains = I915_GEM_DOMAIN_RENDER; - reloc[0].write_domain = I915_GEM_DOMAIN_RENDER; - reloc[0].presumed_offset = 0; - - objs[0].handle = target_bo; - objs[0].relocation_count = 0; - objs[0].relocs_ptr = 0; - objs[0].alignment = 0; - objs[0].offset = 0; - objs[0].flags = 0; - objs[0].rsvd1 = 0; - objs[0].rsvd2 = 0; - - objs[1].handle = cmd_bo; - objs[1].relocation_count = 1; - objs[1].relocs_ptr = (uintptr_t)reloc; - objs[1].alignment = 0; - objs[1].offset = 0; - objs[1].flags = 0; - objs[1].rsvd1 = 0; - objs[1].rsvd2 = 0; - - execbuf.buffers_ptr = (uintptr_t)objs; + reloc[0].read_domains = I915_GEM_DOMAIN_COMMAND; + reloc[0].write_domain = I915_GEM_DOMAIN_COMMAND; + obj[1].relocs_ptr = (uintptr_t)reloc; + obj[1].relocation_count = 1; + + memset(&execbuf, 0, sizeof(execbuf)); + execbuf.buffers_ptr = (uintptr_t)obj; execbuf.buffer_count = 2; - execbuf.batch_start_offset = 0; execbuf.batch_len = size; - execbuf.cliprects_ptr = 0; - execbuf.num_cliprects = 0; - execbuf.DR1 = 0; - execbuf.DR4 = 0; execbuf.flags = I915_EXEC_RENDER; - i915_execbuffer2_set_context_id(execbuf, 0); - execbuf.rsvd2 = 0; gem_execbuf(fd, &execbuf); gem_sync(fd, cmd_bo); @@ -210,30 +200,18 @@ static int __exec_batch(int fd, uint32_t cmd_bo, uint32_t *cmds, int size, int ring) { struct drm_i915_gem_execbuffer2 execbuf; - struct drm_i915_gem_exec_object2 objs[1]; + struct drm_i915_gem_exec_object2 obj[1]; gem_write(fd, cmd_bo, 0, cmds, size); - objs[0].handle = cmd_bo; - objs[0].relocation_count = 0; - objs[0].relocs_ptr = 0; - objs[0].alignment = 0; - objs[0].offset = 0; - objs[0].flags = 0; - objs[0].rsvd1 = 0; - objs[0].rsvd2 = 0; + memset(obj, 0, sizeof(obj)); + obj[0].handle = cmd_bo; - execbuf.buffers_ptr = (uintptr_t)objs; + memset(&execbuf, 0, sizeof(execbuf)); + execbuf.buffers_ptr = (uintptr_t)obj; execbuf.buffer_count = 1; - execbuf.batch_start_offset = 0; execbuf.batch_len = size; - execbuf.cliprects_ptr = 0; - execbuf.num_cliprects = 0; - execbuf.DR1 = 0; - execbuf.DR4 = 0; execbuf.flags = ring; - i915_execbuffer2_set_context_id(execbuf, 0); - execbuf.rsvd2 = 0; return __gem_execbuf(fd, &execbuf); } @@ -244,7 +222,7 @@ static void exec_split_batch(int fd, uint32_t *cmds, int size, int ring, int expected_ret) { struct drm_i915_gem_execbuffer2 execbuf; - struct drm_i915_gem_exec_object2 objs[1]; + struct drm_i915_gem_exec_object2 obj[1]; uint32_t cmd_bo; uint32_t noop[1024] = { 0 }; const int alloc_size = 4096 * 2; @@ -261,16 +239,11 @@ static void exec_split_batch(int fd, uint32_t *cmds, */ gem_write(fd, cmd_bo, actual_start_offset, cmds, size); - objs[0].handle = cmd_bo; - objs[0].relocation_count = 0; - objs[0].relocs_ptr = 0; - objs[0].alignment = 0; - objs[0].offset = 0; - objs[0].flags = 0; - objs[0].rsvd1 = 0; - objs[0].rsvd2 = 0; + memset(obj, 0, sizeof(obj)); + obj[0].handle = cmd_bo; - execbuf.buffers_ptr = (uintptr_t)objs; + memset(&execbuf, 0, sizeof(execbuf)); + execbuf.buffers_ptr = (uintptr_t)obj; execbuf.buffer_count = 1; /* NB: We want batch_start_offset and batch_len to point to the block * of the actual commands (i.e. at the last dword of the first page), @@ -281,13 +254,7 @@ static void exec_split_batch(int fd, uint32_t *cmds, execbuf.batch_len = ALIGN(size + actual_start_offset - execbuf.batch_start_offset, 0x8); - execbuf.cliprects_ptr = 0; - execbuf.num_cliprects = 0; - execbuf.DR1 = 0; - execbuf.DR4 = 0; execbuf.flags = ring; - i915_execbuffer2_set_context_id(execbuf, 0); - execbuf.rsvd2 = 0; igt_assert_eq(__gem_execbuf(fd, &execbuf), expected_ret); @@ -300,8 +267,8 @@ static void exec_batch_chained(int fd, uint32_t cmd_bo, uint32_t *cmds, uint64_t expected_value) { struct drm_i915_gem_execbuffer2 execbuf; - struct drm_i915_gem_exec_object2 objs[3]; - struct drm_i915_gem_relocation_entry reloc; + struct drm_i915_gem_exec_object2 obj[3]; + struct drm_i915_gem_relocation_entry reloc[1]; struct drm_i915_gem_relocation_entry first_level_reloc; uint32_t target_bo = gem_create(fd, 4096); @@ -322,58 +289,34 @@ static void exec_batch_chained(int fd, uint32_t cmd_bo, uint32_t *cmds, first_level_cmds, sizeof(first_level_cmds)); gem_write(fd, cmd_bo, 0, cmds, size); - reloc.offset = patch_offset; - reloc.delta = 0; - reloc.target_handle = target_bo; - reloc.read_domains = I915_GEM_DOMAIN_RENDER; - reloc.write_domain = I915_GEM_DOMAIN_RENDER; - reloc.presumed_offset = 0; + memset(obj, 0, sizeof(obj)); + obj[0].handle = target_bo; + obj[1].handle = cmd_bo; + obj[2].handle = first_level_bo; + + memset(reloc, 0, sizeof(reloc)); + reloc[0].offset = patch_offset; + reloc[0].delta = 0; + reloc[0].target_handle = target_bo; + reloc[0].read_domains = I915_GEM_DOMAIN_COMMAND; + reloc[0].write_domain = I915_GEM_DOMAIN_COMMAND; + obj[1].relocation_count = 1; + obj[1].relocs_ptr = (uintptr_t)&reloc; + memset(&first_level_reloc, 0, sizeof(first_level_reloc)); first_level_reloc.offset = 4; first_level_reloc.delta = 0; first_level_reloc.target_handle = cmd_bo; - first_level_reloc.read_domains = I915_GEM_DOMAIN_INSTRUCTION; + first_level_reloc.read_domains = I915_GEM_DOMAIN_COMMAND; first_level_reloc.write_domain = 0; - first_level_reloc.presumed_offset = 0; - - objs[0].handle = target_bo; - objs[0].relocation_count = 0; - objs[0].relocs_ptr = 0; - objs[0].alignment = 0; - objs[0].offset = 0; - objs[0].flags = 0; - objs[0].rsvd1 = 0; - objs[0].rsvd2 = 0; - - objs[1].handle = cmd_bo; - objs[1].relocation_count = 1; - objs[1].relocs_ptr = (uintptr_t)&reloc; - objs[1].alignment = 0; - objs[1].offset = 0; - objs[1].flags = 0; - objs[1].rsvd1 = 0; - objs[1].rsvd2 = 0; - - objs[2].handle = first_level_bo; - objs[2].relocation_count = 1; - objs[2].relocs_ptr = (uintptr_t)&first_level_reloc; - objs[2].alignment = 0; - objs[2].offset = 0; - objs[2].flags = 0; - objs[2].rsvd1 = 0; - objs[2].rsvd2 = 0; - - execbuf.buffers_ptr = (uintptr_t)objs; + obj[2].relocation_count = 1; + obj[2].relocs_ptr = (uintptr_t)&first_level_reloc; + + memset(&execbuf, 0, sizeof(execbuf)); + execbuf.buffers_ptr = (uintptr_t)obj; execbuf.buffer_count = 3; - execbuf.batch_start_offset = 0; execbuf.batch_len = sizeof(first_level_cmds); - execbuf.cliprects_ptr = 0; - execbuf.num_cliprects = 0; - execbuf.DR1 = 0; - execbuf.DR4 = 0; execbuf.flags = I915_EXEC_RENDER; - i915_execbuffer2_set_context_id(execbuf, 0); - execbuf.rsvd2 = 0; gem_execbuf(fd, &execbuf); gem_sync(fd, cmd_bo); @@ -408,15 +351,8 @@ static void stray_lri(int fd, uint32_t handle) igt_assert_eq_u32(intel_register_read(OACONTROL), 0xdeadbeef); } -uint32_t handle; -int fd; - -#define MI_ARB_ON_OFF (0x8 << 23) -#define MI_DISPLAY_FLIP ((0x14 << 23) | 1) - -#define GFX_OP_PIPE_CONTROL ((0x3<<29)|(0x3<<27)|(0x2<<24)|2) -#define PIPE_CONTROL_QW_WRITE (1<<14) -#define PIPE_CONTROL_LRI_POST_OP (1<<23) +static uint32_t handle; +static int fd; igt_main {