From: Mukul Joshi <[email protected]>

In GFX 9.4.3, there can be more than 8 SDMA engines.
As a result, extended_engine_sel and engine_sel fields
in MAP_QUEUES packet need to be updated to allow correct
mapping of SDMA queues to these SDMA engines.

Signed-off-by: Mukul Joshi <[email protected]>
Reviewed-by: Felix Kuehling <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
---
 .../gpu/drm/amd/amdkfd/kfd_packet_manager_v9.c   | 16 +++++++++++++---
 drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers_ai.h  |  3 ++-
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_v9.c 
b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_v9.c
index 54d7d4665ad2..44cf3a5f6fdb 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_v9.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_v9.c
@@ -225,9 +225,19 @@ static int pm_map_queues_v9(struct packet_manager *pm, 
uint32_t *buffer,
                        packet->bitfields2.engine_sel = 
q->properties.sdma_engine_id +
                                engine_sel__mes_map_queues__sdma0_vi;
                else {
-                       packet->bitfields2.extended_engine_sel =
-                               
extended_engine_sel__mes_map_queues__sdma0_to_7_sel;
-                       packet->bitfields2.engine_sel = 
q->properties.sdma_engine_id;
+                       /*
+                        * For GFX9.4.3, SDMA engine id can be greater than 8.
+                        * For such cases, set extended_engine_sel to 2 and
+                        * ensure engine_sel lies between 0-7.
+                        */
+                       if (q->properties.sdma_engine_id >= 8)
+                               packet->bitfields2.extended_engine_sel =
+                                       
extended_engine_sel__mes_map_queues__sdma8_to_15_sel;
+                       else
+                               packet->bitfields2.extended_engine_sel =
+                                       
extended_engine_sel__mes_map_queues__sdma0_to_7_sel;
+
+                       packet->bitfields2.engine_sel = 
q->properties.sdma_engine_id % 8;
                }
                break;
        default:
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers_ai.h 
b/drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers_ai.h
index a666710ed403..2ad708c64012 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers_ai.h
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_pm4_headers_ai.h
@@ -263,7 +263,8 @@ enum mes_map_queues_engine_sel_enum {
 
 enum mes_map_queues_extended_engine_sel_enum {
        extended_engine_sel__mes_map_queues__legacy_engine_sel = 0,
-       extended_engine_sel__mes_map_queues__sdma0_to_7_sel = 1
+       extended_engine_sel__mes_map_queues__sdma0_to_7_sel  = 1,
+       extended_engine_sel__mes_map_queues__sdma8_to_15_sel = 2
 };
 
 struct pm4_mes_map_queues {
-- 
2.39.2

Reply via email to