]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: update remove after reset flag for MES remove queue
authorJonathan Kim <jonathan.kim@amd.com>
Wed, 18 Jun 2025 14:45:55 +0000 (10:45 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 13 Oct 2025 18:14:36 +0000 (14:14 -0400)
Remove queue after reset flag is required to remove a queue that has
been successfully reset to clean up the MES' internal state.

Signed-off-by: Jonathan Kim <jonathan.kim@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
drivers/gpu/drm/amd/amdgpu/mes_v12_0.c
drivers/gpu/drm/amd/include/mes_v11_api_def.h
drivers/gpu/drm/amd/include/mes_v12_api_def.h

index 97c137c90f971de06e72f19b8a50d060ae3153b9..9c27a68cb82f425c66f737042438cfd152a1e6c9 100644 (file)
@@ -239,6 +239,7 @@ struct mes_add_queue_input {
 struct mes_remove_queue_input {
        uint32_t        doorbell_offset;
        uint64_t        gang_context_addr;
+       bool            remove_queue_after_reset;
 };
 
 struct mes_map_legacy_queue_input {
index da575bb1377f140ae87e0b4a597e72fe339d2f51..3a52754b5cadb35f9dd4b6b4e9a124d17c84c35e 100644 (file)
@@ -369,6 +369,7 @@ static int mes_v11_0_remove_hw_queue(struct amdgpu_mes *mes,
                                     struct mes_remove_queue_input *input)
 {
        union MESAPI__REMOVE_QUEUE mes_remove_queue_pkt;
+       uint32_t mes_rev = mes->sched_version & AMDGPU_MES_VERSION_MASK;
 
        memset(&mes_remove_queue_pkt, 0, sizeof(mes_remove_queue_pkt));
 
@@ -379,6 +380,9 @@ static int mes_v11_0_remove_hw_queue(struct amdgpu_mes *mes,
        mes_remove_queue_pkt.doorbell_offset = input->doorbell_offset;
        mes_remove_queue_pkt.gang_context_addr = input->gang_context_addr;
 
+       if (mes_rev >= 0x60)
+               mes_remove_queue_pkt.remove_queue_after_reset = input->remove_queue_after_reset;
+
        return mes_v11_0_submit_pkt_and_poll_completion(mes,
                        &mes_remove_queue_pkt, sizeof(mes_remove_queue_pkt),
                        offsetof(union MESAPI__REMOVE_QUEUE, api_status));
index 7f3512d9de07dd5f7fc00ae3f17d9901ac482d3b..744e95d3984ad161623f660bcf7ba8a1280fb404 100644 (file)
@@ -361,6 +361,7 @@ static int mes_v12_0_remove_hw_queue(struct amdgpu_mes *mes,
                                     struct mes_remove_queue_input *input)
 {
        union MESAPI__REMOVE_QUEUE mes_remove_queue_pkt;
+       uint32_t mes_rev = mes->sched_version & AMDGPU_MES_VERSION_MASK;
 
        memset(&mes_remove_queue_pkt, 0, sizeof(mes_remove_queue_pkt));
 
@@ -371,6 +372,9 @@ static int mes_v12_0_remove_hw_queue(struct amdgpu_mes *mes,
        mes_remove_queue_pkt.doorbell_offset = input->doorbell_offset;
        mes_remove_queue_pkt.gang_context_addr = input->gang_context_addr;
 
+       if (mes_rev >= 0x5a)
+               mes_remove_queue_pkt.remove_queue_after_reset = input->remove_queue_after_reset;
+
        return mes_v12_0_submit_pkt_and_poll_completion(mes,
                        AMDGPU_MES_SCHED_PIPE,
                        &mes_remove_queue_pkt, sizeof(mes_remove_queue_pkt),
index ab1cfc92dbeb1b2a3d9798b1fd68ad8ec17946a4..f9629d42ada2724b2285853a702f4dd2383b2b6d 100644 (file)
@@ -345,7 +345,8 @@ union MESAPI__REMOVE_QUEUE {
                        uint32_t unmap_kiq_utility_queue  : 1;
                        uint32_t preempt_legacy_gfx_queue : 1;
                        uint32_t unmap_legacy_queue       : 1;
-                       uint32_t reserved                 : 28;
+                       uint32_t remove_queue_after_reset : 1;
+                       uint32_t reserved                 : 27;
                };
                struct MES_API_STATUS       api_status;
 
index 69611c7e30e35540c91699e2704eead01e57dcc7..2f12cba4eb662805a2c7d3569a49a2c166971a1f 100644 (file)
@@ -399,7 +399,8 @@ union MESAPI__REMOVE_QUEUE {
                        uint32_t unmap_kiq_utility_queue  : 1;
                        uint32_t preempt_legacy_gfx_queue : 1;
                        uint32_t unmap_legacy_queue       : 1;
-                       uint32_t reserved                 : 28;
+                       uint32_t remove_queue_after_reset : 1;
+                       uint32_t reserved                 : 27;
                };
                struct MES_API_STATUS           api_status;