From: Likun Gao <likun....@amd.com>

Set boot_time_tmr flag for the ASIC which MP0 ip version
newer than 14.0.2
For runtime TMR:
     Init tmr and load tmr should did.
For boottime TMR:
     If do not support autoload, skip init TMR.
     If support autoload, excute init TMR but skip load tmr.

Signed-off-by: Likun Gao <likun....@amd.com>
Reviewed-by: Hawking Zhang <hawking.zh...@amd.com>
Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
index 00a477a9e606..2151636d579d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
@@ -233,7 +233,8 @@ static int psp_early_init(void *handle)
                return -EINVAL;
        }
 
-       if (amdgpu_ip_version(psp->adev, MP0_HWIP, 0) == IP_VERSION(13, 0, 6))
+       if (amdgpu_ip_version(adev, MP0_HWIP, 0) == IP_VERSION(13, 0, 6) ||
+           amdgpu_ip_version(adev, MP0_HWIP, 0) >= IP_VERSION(14, 0, 2))
                psp->boot_time_tmr = true;
 
        psp->adev = adev;
@@ -813,7 +814,7 @@ static int psp_tmr_init(struct psp_context *psp)
                }
        }
 
-       if (!psp->tmr_bo) {
+       if (!psp->tmr_bo && !psp->boot_time_tmr) {
                pptr = amdgpu_sriov_vf(psp->adev) ? &tmr_buf : NULL;
                ret = amdgpu_bo_create_kernel(psp->adev, tmr_size,
                                              PSP_TMR_ALIGNMENT,
@@ -2249,7 +2250,7 @@ static int psp_hw_start(struct psp_context *psp)
        if (amdgpu_sriov_vf(adev) && amdgpu_in_reset(adev))
                goto skip_pin_bo;
 
-       if (!psp->boot_time_tmr) {
+       if (!psp->boot_time_tmr || psp->autoload_supported) {
                ret = psp_tmr_init(psp);
                if (ret) {
                        dev_err(adev->dev, "PSP tmr init failed!\n");
@@ -2269,10 +2270,12 @@ static int psp_hw_start(struct psp_context *psp)
                        return ret;
        }
 
-       ret = psp_tmr_load(psp);
-       if (ret) {
-               dev_err(adev->dev, "PSP load tmr failed!\n");
-               return ret;
+       if (!psp->boot_time_tmr || !psp->autoload_supported) {
+               ret = psp_tmr_load(psp);
+               if (ret) {
+                       dev_err(adev->dev, "PSP load tmr failed!\n");
+                       return ret;
+               }
        }
 
        return 0;
-- 
2.42.0

Reply via email to