drm/amdkfd: Enable per-process XNACK for GFX 12.1.0

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 <mukul.joshi@amd.com>
Reviewed-by: Philip Yang <Philip.Yang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Mukul Joshi 2025-03-26 22:16:21 -04:00 committed by Alex Deucher
parent 6f894c9249
commit cc52af1a96
5 changed files with 8 additions and 2 deletions

View File

@ -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 {

View File

@ -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),

View File

@ -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);

View File

@ -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;

View File

@ -1557,7 +1557,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)