This patch enables the logic where if PSP ring has initialized then submit the register write command via ring.
Signed-off-by: Ahmad Rehman <ahmad.reh...@amd.com> --- drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 17 ++++++++++++----- drivers/gpu/drm/amd/amdgpu/mmhub_v1_8.c | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c index dbc3313fc141..8f34a277c821 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c @@ -1189,15 +1189,22 @@ int psp_reg_program(struct psp_context *psp, enum psp_reg_prog_id reg, if (reg >= PSP_REG_LAST) return -EINVAL; - cmd = acquire_psp_cmd_buf(psp); + /* Check if psp ring has initialized */ + if (psp->km_ring.ring_mem && psp->km_ring.ring_size) { + cmd = acquire_psp_cmd_buf(psp); + + psp_prep_reg_prog_cmd_buf(cmd, reg, value); + ret = psp_cmd_submit_buf(psp, NULL, cmd, psp->fence_buf_mc_addr); + + release_psp_cmd_buf(psp); + } else { + /* Program reg without ring via registers */ + ret = psp_reg_program_no_ring(psp, value, reg); + } - psp_prep_reg_prog_cmd_buf(cmd, reg, value); - ret = psp_cmd_submit_buf(psp, NULL, cmd, psp->fence_buf_mc_addr); if (ret) dev_err(psp->adev->dev, "PSP failed to program reg id %d\n", reg); - release_psp_cmd_buf(psp); - return ret; } diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_8.c b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_8.c index 4a43c9ab95a2..05935b2c99b6 100644 --- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_8.c +++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_8.c @@ -208,7 +208,7 @@ static void mmhub_v1_8_init_tlb_regs(struct amdgpu_device *adev) MTYPE, MTYPE_UC);/* XXX for emulation. */ tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ATC_EN, 1); - psp_reg_program_no_ring(&adev->psp, tmp, PSP_REG_MMHUB_L1_TLB_CNTL); + psp_reg_program(&adev->psp, PSP_REG_MMHUB_L1_TLB_CNTL, tmp); } else { inst_mask = adev->aid_mask; for_each_inst(i, inst_mask) { -- 2.34.1