[PATCH] drm/amdgpu: Modify register write via PSP
Ahmad Rehman
Ahmad.Rehman at amd.com
Fri Apr 4 18:41:59 UTC 2025
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.Rehman at 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
More information about the amd-gfx
mailing list