]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
drm/amdgpu/psp: handle TMR type via flag
authorLikun Gao <Likun.Gao@amd.com>
Thu, 26 Oct 2023 09:39:17 +0000 (17:39 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 14 Feb 2024 22:18:16 +0000 (17:18 -0500)
Add flag boot_time_tmr to indicate boot time TMR or runtime TMR
instead of function.

v2: rework logic (Alex)

Signed-off-by: Likun Gao <Likun.Gao@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h

index 5e1cd4a46ab5cedcf036dc22788327d05afd1eef..4755c63ae69a8c610dec18312bff778fbf19046b 100644 (file)
@@ -164,21 +164,25 @@ static int psp_early_init(void *handle)
        struct psp_context *psp = &adev->psp;
 
        psp->autoload_supported = true;
+       psp->boot_time_tmr = true;
 
        switch (amdgpu_ip_version(adev, MP0_HWIP, 0)) {
        case IP_VERSION(9, 0, 0):
                psp_v3_1_set_psp_funcs(psp);
                psp->autoload_supported = false;
+               psp->boot_time_tmr = false;
                break;
        case IP_VERSION(10, 0, 0):
        case IP_VERSION(10, 0, 1):
                psp_v10_0_set_psp_funcs(psp);
                psp->autoload_supported = false;
+               psp->boot_time_tmr = false;
                break;
        case IP_VERSION(11, 0, 2):
        case IP_VERSION(11, 0, 4):
                psp_v11_0_set_psp_funcs(psp);
                psp->autoload_supported = false;
+               psp->boot_time_tmr = false;
                break;
        case IP_VERSION(11, 0, 0):
        case IP_VERSION(11, 0, 7):
@@ -191,13 +195,17 @@ static int psp_early_init(void *handle)
        case IP_VERSION(11, 0, 12):
        case IP_VERSION(11, 0, 13):
                psp_v11_0_set_psp_funcs(psp);
+               psp->boot_time_tmr = false;
                break;
        case IP_VERSION(11, 0, 3):
        case IP_VERSION(12, 0, 1):
                psp_v12_0_set_psp_funcs(psp);
                psp->autoload_supported = false;
+               psp->boot_time_tmr = false;
                break;
        case IP_VERSION(13, 0, 2):
+               psp->boot_time_tmr = false;
+               fallthrough;
        case IP_VERSION(13, 0, 6):
                psp_v13_0_set_psp_funcs(psp);
                psp->autoload_supported = false;
@@ -209,21 +217,25 @@ static int psp_early_init(void *handle)
        case IP_VERSION(13, 0, 11):
        case IP_VERSION(14, 0, 0):
                psp_v13_0_set_psp_funcs(psp);
+               psp->boot_time_tmr = false;
                break;
        case IP_VERSION(11, 0, 8):
                if (adev->apu_flags & AMD_APU_IS_CYAN_SKILLFISH2) {
                        psp_v11_0_8_set_psp_funcs(psp);
                }
                psp->autoload_supported = false;
+               psp->boot_time_tmr = false;
                break;
        case IP_VERSION(13, 0, 0):
        case IP_VERSION(13, 0, 7):
        case IP_VERSION(13, 0, 10):
                psp_v13_0_set_psp_funcs(psp);
                adev->psp.sup_ifwi_up = !amdgpu_sriov_vf(adev);
+               psp->boot_time_tmr = false;
                break;
        case IP_VERSION(13, 0, 4):
                psp_v13_0_4_set_psp_funcs(psp);
+               psp->boot_time_tmr = false;
                break;
        case IP_VERSION(14, 0, 2):
        case IP_VERSION(14, 0, 3):
@@ -779,16 +791,6 @@ static int psp_load_toc(struct psp_context *psp,
        return ret;
 }
 
-static bool psp_boottime_tmr(struct psp_context *psp)
-{
-       switch (amdgpu_ip_version(psp->adev, MP0_HWIP, 0)) {
-       case IP_VERSION(13, 0, 6):
-               return true;
-       default:
-               return false;
-       }
-}
-
 /* Set up Trusted Memory Region */
 static int psp_tmr_init(struct psp_context *psp)
 {
@@ -2256,7 +2258,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_boottime_tmr(psp)) {
+       if (!psp->boot_time_tmr) {
                ret = psp_tmr_init(psp);
                if (ret) {
                        dev_err(adev->dev, "PSP tmr init failed!\n");
index c24b1d7462eea37d04d371504d95e76ee5d2558c..ee16f134ae92037d6125cd78c4191d541e48d387 100644 (file)
@@ -364,6 +364,8 @@ struct psp_context {
        atomic_t                        fence_value;
        /* flag to mark whether gfx fw autoload is supported or not */
        bool                            autoload_supported;
+       /* flag to mark whether psp use runtime TMR or boottime TMR */
+       bool                            boot_time_tmr;
        /* flag to mark whether df cstate management centralized to PMFW */
        bool                            pmfw_centralized_cstate_management;