diff options
| author | Likun Gao <[email protected]> | 2023-06-13 04:10:00 +0000 |
|---|---|---|
| committer | Alex Deucher <[email protected]> | 2023-06-15 15:06:58 +0000 |
| commit | d4a4ff1c8e4cd752b517af7317077939f3a25dfe (patch) | |
| tree | bac45a49b181a7e6e05778465be335a8b163ca13 /drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | |
| parent | drm/amd/display: Clean up dcn10_optc.c kdoc (diff) | |
| download | kernel-d4a4ff1c8e4cd752b517af7317077939f3a25dfe.tar.gz kernel-d4a4ff1c8e4cd752b517af7317077939f3a25dfe.zip | |
drm/amdgpu: add wait_for helper for spirom update
Spirom update typically requires extremely long
duration for command execution, and special helper
function to wait for it completion.
Signed-off-by: Likun Gao <[email protected]>
Reviewed-by: Hawking Zhang <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c index dd865beb39a8..a96f2e369d1a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c @@ -569,6 +569,26 @@ int psp_wait_for(struct psp_context *psp, uint32_t reg_index, return -ETIME; } +int psp_wait_for_spirom_update(struct psp_context *psp, uint32_t reg_index, + uint32_t reg_val, uint32_t mask, uint32_t msec_timeout) +{ + uint32_t val; + int i; + struct amdgpu_device *adev = psp->adev; + + if (psp->adev->no_hw_access) + return 0; + + for (i = 0; i < msec_timeout; i++) { + val = RREG32(reg_index); + if ((val & mask) == reg_val) + return 0; + msleep(1); + } + + return -ETIME; +} + static const char *psp_gfx_cmd_name(enum psp_gfx_cmd_id cmd_id) { switch (cmd_id) { |
