[PATCH 1/3] drm/amdgpu/mes11: set connected queue index in the reset packet

Jesse Zhang <[email protected]>
Newsgroups org.freedesktop.lists.amd-gfx
Message-ID <[email protected]>
Sync MESAPI__RESET with the firmware definition (the
use_connected_queue_index[_p1] flags and the trailing active_vmids /
connected_queue_index[_p1] fields) and program the connected queue index
from the detect input, so the MES can locate a CP-frozen gfx user queue
via its CP_CNTX_STAT fallback.

An older MES firmware ignores the flags (previously reserved bits) and
falls back to query_status, so no firmware version gate is required.

Signed-off-by: Jesse Zhang <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/mes_v11_0.c        | 11 +++++++++++
 drivers/gpu/drm/amd/include/mes_v11_api_def.h | 11 ++++++++++-
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c b/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
index b72da75dd851..3e6d3b5e9af9 100644
--- a/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
@@ -1115,6 +1115,17 @@ static int mes_v11_0_detect_and_reset_hung_queues(struct amdgpu_mes *mes,
 	else
 		mes_reset_queue_pkt.hang_detect_then_reset = 1;
 
+	if (input->use_connected_queue_index) {
+		mes_reset_queue_pkt.use_connected_queue_index = 1;
+		mes_reset_queue_pkt.connected_queue_index =
+			input->connected_queue_index;
+	}
+	if (input->use_connected_queue_index_p1) {
+		mes_reset_queue_pkt.use_connected_queue_index_p1 = 1;
+		mes_reset_queue_pkt.connected_queue_index_p1 =
+			input->connected_queue_index_p1;
+	}
+
 	return mes_v11_0_submit_pkt_and_poll_completion(mes,
 			&mes_reset_queue_pkt, sizeof(mes_reset_queue_pkt),
 			offsetof(union MESAPI__RESET, api_status));
diff --git a/drivers/gpu/drm/amd/include/mes_v11_api_def.h b/drivers/gpu/drm/amd/include/mes_v11_api_def.h
index a8e6ccc7817c..2762b55f3474 100644
--- a/drivers/gpu/drm/amd/include/mes_v11_api_def.h
+++ b/drivers/gpu/drm/amd/include/mes_v11_api_def.h
@@ -468,7 +468,11 @@ union MESAPI__RESET {
 			uint32_t                hang_detect_only : 1;
 			/* Rest HP and LP kernel queues not managed by MES */
 			uint32_t                reset_legacy_gfx : 1;
-			uint32_t                reserved : 28;
+			/* Fallback to connected queue index when CP_CNTX_STAT fails (gfx pipe 0) */
+			uint32_t                use_connected_queue_index : 1;
+			/* For gfx pipe 1 */
+			uint32_t                use_connected_queue_index_p1 : 1;
+			uint32_t                reserved : 26;
 		};
 
 		uint64_t			gang_context_addr;
@@ -496,6 +500,11 @@ union MESAPI__RESET {
 		uint64_t			wptr_addr_hp;
 
 		struct MES_API_STATUS		api_status;
+		uint32_t			active_vmids;
+		uint64_t			timestamp;
+		uint32_t			gang_context_array_index;
+		uint32_t			connected_queue_index;
+		uint32_t			connected_queue_index_p1;
 	};
 
 	uint32_t	max_dwords_in_api[API_FRAME_SIZE_IN_DWORDS];
-- 
2.49.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.