[PATCH] tests/amdgpu: update bad length case
Zhang, Jesse(Jie)
Jesse.Zhang at amd.com
Thu Aug 1 10:59:43 UTC 2024
[AMD Official Use Only - AMD Internal Distribution Only]
Hi Prike,
-----Original Message-----
From: Liang, Prike <Prike.Liang at amd.com>
Sent: Thursday, August 1, 2024 5:56 PM
To: igt-dev at lists.freedesktop.org
Cc: Prosyak, Vitaly <Vitaly.Prosyak at amd.com>; Zhang, Jesse(Jie) <Jesse.Zhang at amd.com>; Deucher, Alexander <Alexander.Deucher at amd.com>; Liang, Prike <Prike.Liang at amd.com>
Subject: [PATCH] tests/amdgpu: update bad length case
In the bad length case, when the header length has more than 4dwords than packet stream length then CPFW will pending on the stream data and raise a CP halt error which requires do the pipe reset. As to the orignal case of header length is smaller than PM4 stream length then the PM4 stream data may will create a bad opcode error which only requires the queue reset. So for testing the pipe reset need to update the header length bigger than the PM4 stream data length.
Signed-off-by: Prike Liang <Prike.Liang at amd.com>
---
lib/amdgpu/amd_ip_blocks.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/lib/amdgpu/amd_ip_blocks.c b/lib/amdgpu/amd_ip_blocks.c index f675b97dd..503b68431 100644
--- a/lib/amdgpu/amd_ip_blocks.c
+++ b/lib/amdgpu/amd_ip_blocks.c
@@ -189,7 +189,7 @@ gfx_ring_bad_write_linear(const struct amdgpu_ip_funcs *func,
const struct amdgpu_ring_context *ring_context,
uint32_t *pm4_dw, unsigned int cmd_error) {
- uint32_t i, j;
+ uint32_t i, j, stream_length;
i = 0;
j = 0;
@@ -198,6 +198,11 @@ gfx_ring_bad_write_linear(const struct amdgpu_ip_funcs *func,
* But the range applies to all asics.
* 0xcb-0xcf, 0xd2-0xef, 0xf1-0xfb
*/
+ if (cmd_error == CMD_STREAM_EXEC_INVALID_OPCODE)
> this case is for bad opcode, not for bad length. It will have an impact on other cases.
> Thanks Jesse
+ stream_length = ring_context->write_length / 16;
+ else
+ stream_length = ring_context->write_length;
+
if (cmd_error == CMD_STREAM_EXEC_INVALID_OPCODE)
ring_context->pm4[i++] = PACKET3(0xf2, 2 + ring_context->write_length);
else if (cmd_error == CMD_STREAM_EXEC_INVALID_PACKET_LENGTH)
@@ -223,7 +228,7 @@ gfx_ring_bad_write_linear(const struct amdgpu_ip_funcs *func,
ring_context->pm4[i++] = upper_32_bits(ring_context->bo_mc);
}
- while (j++ < ring_context->write_length)
+ while (j++ < stream_length)
ring_context->pm4[i++] = func->deadbeaf;
*pm4_dw = i;
return i;
--
2.34.1
More information about the igt-dev
mailing list