From: Mukul Joshi <[email protected]>

GFX 12.1.0 will support enabling/disabling XNACK on a per-
process basis. This change enables the per process XNACK feature.

Signed-off-by: Mukul Joshi <[email protected]>
Reviewed-by: Philip Yang <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h               | 1 +
 drivers/gpu/drm/amd/amdgpu/mes_v12_1.c                | 2 ++
 drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 1 +
 drivers/gpu/drm/amd/amdkfd/kfd_priv.h                 | 3 ++-
 drivers/gpu/drm/amd/amdkfd/kfd_process.c              | 3 ++-
 5 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
index d503127e45d5e..f99de1592921c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
@@ -253,6 +253,7 @@ struct mes_add_queue_input {
        uint32_t        is_aql_queue;
        uint32_t        queue_size;
        uint32_t        exclusively_scheduled;
+       uint32_t        sh_mem_config_data;
 };
 
 struct mes_remove_queue_input {
diff --git a/drivers/gpu/drm/amd/amdgpu/mes_v12_1.c 
b/drivers/gpu/drm/amd/amdgpu/mes_v12_1.c
index cc2a715f373fd..15b467b4aae40 100644
--- a/drivers/gpu/drm/amd/amdgpu/mes_v12_1.c
+++ b/drivers/gpu/drm/amd/amdgpu/mes_v12_1.c
@@ -339,6 +339,8 @@ static int mes_v12_1_add_hw_queue(struct amdgpu_mes *mes,
        mes_add_queue_pkt.is_aql_queue = input->is_aql_queue;
        mes_add_queue_pkt.gds_size = input->queue_size;
 
+       mes_add_queue_pkt.full_sh_mem_config_data = input->sh_mem_config_data;
+
        return mes_v12_1_submit_pkt_and_poll_completion(mes,
                        xcc_id, AMDGPU_MES_SCHED_PIPE,
                        &mes_add_queue_pkt, sizeof(mes_add_queue_pkt),
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c 
b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
index 39800280543c4..824d73ab5b283 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
@@ -255,6 +255,7 @@ static int add_queue_mes(struct device_queue_manager *dqm, 
struct queue *q,
        queue_input.queue_type = (uint32_t)queue_type;
 
        queue_input.exclusively_scheduled = q->properties.is_gws;
+       queue_input.sh_mem_config_data = qpd->sh_mem_config;
 
        amdgpu_mes_lock(&adev->mes);
        r = adev->mes.funcs->add_hw_queue(&adev->mes, &queue_input);
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h 
b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
index 12f640a9370ad..7b70f794f3d0c 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
@@ -215,7 +215,8 @@ enum cache_policy {
        ((KFD_GC_VERSION(dev) == IP_VERSION(9, 4, 2)) ||        \
         (KFD_GC_VERSION(dev) == IP_VERSION(9, 4, 3)) ||        \
         (KFD_GC_VERSION(dev) == IP_VERSION(9, 4, 4)) ||        \
-        (KFD_GC_VERSION(dev) == IP_VERSION(9, 5, 0)))
+        (KFD_GC_VERSION(dev) == IP_VERSION(9, 5, 0)) ||        \
+        (KFD_GC_VERSION(dev) == IP_VERSION(12, 1, 0)))
 
 struct kfd_node;
 
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c 
b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
index aec7522407dbb..2a72dc95cc0f6 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
@@ -1558,7 +1558,8 @@ bool kfd_process_xnack_mode(struct kfd_process *p, bool 
supported)
                 * management and memory-manager-related preemptions or
                 * even deadlocks.
                 */
-               if (KFD_GC_VERSION(dev) >= IP_VERSION(10, 1, 1))
+               if (KFD_GC_VERSION(dev) >= IP_VERSION(10, 1, 1) &&
+                   KFD_GC_VERSION(dev) < IP_VERSION(12, 1, 0))
                        return false;
 
                if (dev->kfd->noretry)
-- 
2.51.1

Reply via email to