uint32_t queue_size;
uint32_t exclusively_scheduled;
uint32_t sh_mem_config_data;
+ uint32_t vm_cntx_cntl;
};
struct mes_remove_queue_input {
static int mes_v12_1_add_hw_queue(struct amdgpu_mes *mes,
struct mes_add_queue_input *input)
{
- struct amdgpu_device *adev = mes->adev;
union MESAPI__ADD_QUEUE mes_add_queue_pkt;
- struct amdgpu_vmhub *hub = &adev->vmhub[AMDGPU_GFXHUB(0)];
- uint32_t vm_cntx_cntl = hub->vm_cntx_cntl;
int xcc_id = input->xcc_id;
int inst = MES_PIPE_INST(xcc_id, AMDGPU_MES_SCHED_PIPE);
mes_add_queue_pkt.queue_type =
convert_to_mes_queue_type(input->queue_type);
mes_add_queue_pkt.paging = input->paging;
- mes_add_queue_pkt.vm_context_cntl = vm_cntx_cntl;
+ mes_add_queue_pkt.vm_context_cntl = input->vm_cntx_cntl;
mes_add_queue_pkt.gws_base = input->gws_base;
mes_add_queue_pkt.gws_size = input->gws_size;
mes_add_queue_pkt.trap_handler_addr = input->tba_addr;
queue_input.exclusively_scheduled = q->properties.is_gws;
queue_input.sh_mem_config_data = qpd->sh_mem_config;
+ queue_input.vm_cntx_cntl = qpd->vm_cntx_cntl;
amdgpu_mes_lock(&adev->mes);
r = adev->mes.funcs->add_hw_queue(&adev->mes, &queue_input);
struct qcm_process_device *qpd)
{
struct kfd_process_device *pdd;
+ struct amdgpu_device *adev = dqm->dev->adev;
+ struct amdgpu_vmhub *hub = &adev->vmhub[AMDGPU_GFXHUB(0)];
pdd = qpd_to_pdd(qpd);
+ qpd->vm_cntx_cntl = hub->vm_cntx_cntl;
/* check if sh_mem_config register already configured */
if (qpd->sh_mem_config == 0) {
}
if (KFD_SUPPORT_XNACK_PER_PROCESS(dqm->dev)) {
- if (!pdd->process->xnack_enabled)
+ if (!pdd->process->xnack_enabled) {
qpd->sh_mem_config |= 1 << SH_MEM_CONFIG__RETRY_DISABLE__SHIFT;
- else
+ qpd->vm_cntx_cntl &=
+ ~(1 << GCVM_CONTEXT0_CNTL__RETRY_PERMISSION_OR_INVALID_PAGE_FAULT__SHIFT);
+ } else {
qpd->sh_mem_config &= ~(1 << SH_MEM_CONFIG__RETRY_DISABLE__SHIFT);
+ qpd->vm_cntx_cntl |=
+ (1 << GCVM_CONTEXT0_CNTL__RETRY_PERMISSION_OR_INVALID_PAGE_FAULT__SHIFT);
+ }
}
qpd->sh_mem_bases = compute_sh_mem_bases_64bit(pdd);
uint32_t num_gws;
uint32_t num_oac;
uint32_t sh_hidden_private_base;
+ uint32_t vm_cntx_cntl;
/* CWSR memory */
struct kgd_mem *cwsr_mem;