Commit 2fb4460f authored by Likun Gao's avatar Likun Gao Committed by Alex Deucher

drm/amdgpu/psp: handle TMR type via flag

Add flag boot_time_tmr to indicate boot time TMR or runtime TMR
instead of function.

v2: rework logic (Alex)
Signed-off-by: default avatarLikun Gao <Likun.Gao@amd.com>
Reviewed-by: default avatarHawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 8d339b0d
...@@ -164,21 +164,25 @@ static int psp_early_init(void *handle) ...@@ -164,21 +164,25 @@ static int psp_early_init(void *handle)
struct psp_context *psp = &adev->psp; struct psp_context *psp = &adev->psp;
psp->autoload_supported = true; psp->autoload_supported = true;
psp->boot_time_tmr = true;
switch (amdgpu_ip_version(adev, MP0_HWIP, 0)) { switch (amdgpu_ip_version(adev, MP0_HWIP, 0)) {
case IP_VERSION(9, 0, 0): case IP_VERSION(9, 0, 0):
psp_v3_1_set_psp_funcs(psp); psp_v3_1_set_psp_funcs(psp);
psp->autoload_supported = false; psp->autoload_supported = false;
psp->boot_time_tmr = false;
break; break;
case IP_VERSION(10, 0, 0): case IP_VERSION(10, 0, 0):
case IP_VERSION(10, 0, 1): case IP_VERSION(10, 0, 1):
psp_v10_0_set_psp_funcs(psp); psp_v10_0_set_psp_funcs(psp);
psp->autoload_supported = false; psp->autoload_supported = false;
psp->boot_time_tmr = false;
break; break;
case IP_VERSION(11, 0, 2): case IP_VERSION(11, 0, 2):
case IP_VERSION(11, 0, 4): case IP_VERSION(11, 0, 4):
psp_v11_0_set_psp_funcs(psp); psp_v11_0_set_psp_funcs(psp);
psp->autoload_supported = false; psp->autoload_supported = false;
psp->boot_time_tmr = false;
break; break;
case IP_VERSION(11, 0, 0): case IP_VERSION(11, 0, 0):
case IP_VERSION(11, 0, 7): case IP_VERSION(11, 0, 7):
...@@ -191,13 +195,17 @@ static int psp_early_init(void *handle) ...@@ -191,13 +195,17 @@ static int psp_early_init(void *handle)
case IP_VERSION(11, 0, 12): case IP_VERSION(11, 0, 12):
case IP_VERSION(11, 0, 13): case IP_VERSION(11, 0, 13):
psp_v11_0_set_psp_funcs(psp); psp_v11_0_set_psp_funcs(psp);
psp->boot_time_tmr = false;
break; break;
case IP_VERSION(11, 0, 3): case IP_VERSION(11, 0, 3):
case IP_VERSION(12, 0, 1): case IP_VERSION(12, 0, 1):
psp_v12_0_set_psp_funcs(psp); psp_v12_0_set_psp_funcs(psp);
psp->autoload_supported = false; psp->autoload_supported = false;
psp->boot_time_tmr = false;
break; break;
case IP_VERSION(13, 0, 2): case IP_VERSION(13, 0, 2):
psp->boot_time_tmr = false;
fallthrough;
case IP_VERSION(13, 0, 6): case IP_VERSION(13, 0, 6):
psp_v13_0_set_psp_funcs(psp); psp_v13_0_set_psp_funcs(psp);
psp->autoload_supported = false; psp->autoload_supported = false;
...@@ -209,21 +217,25 @@ static int psp_early_init(void *handle) ...@@ -209,21 +217,25 @@ static int psp_early_init(void *handle)
case IP_VERSION(13, 0, 11): case IP_VERSION(13, 0, 11):
case IP_VERSION(14, 0, 0): case IP_VERSION(14, 0, 0):
psp_v13_0_set_psp_funcs(psp); psp_v13_0_set_psp_funcs(psp);
psp->boot_time_tmr = false;
break; break;
case IP_VERSION(11, 0, 8): case IP_VERSION(11, 0, 8):
if (adev->apu_flags & AMD_APU_IS_CYAN_SKILLFISH2) { if (adev->apu_flags & AMD_APU_IS_CYAN_SKILLFISH2) {
psp_v11_0_8_set_psp_funcs(psp); psp_v11_0_8_set_psp_funcs(psp);
} }
psp->autoload_supported = false; psp->autoload_supported = false;
psp->boot_time_tmr = false;
break; break;
case IP_VERSION(13, 0, 0): case IP_VERSION(13, 0, 0):
case IP_VERSION(13, 0, 7): case IP_VERSION(13, 0, 7):
case IP_VERSION(13, 0, 10): case IP_VERSION(13, 0, 10):
psp_v13_0_set_psp_funcs(psp); psp_v13_0_set_psp_funcs(psp);
adev->psp.sup_ifwi_up = !amdgpu_sriov_vf(adev); adev->psp.sup_ifwi_up = !amdgpu_sriov_vf(adev);
psp->boot_time_tmr = false;
break; break;
case IP_VERSION(13, 0, 4): case IP_VERSION(13, 0, 4):
psp_v13_0_4_set_psp_funcs(psp); psp_v13_0_4_set_psp_funcs(psp);
psp->boot_time_tmr = false;
break; break;
case IP_VERSION(14, 0, 2): case IP_VERSION(14, 0, 2):
case IP_VERSION(14, 0, 3): case IP_VERSION(14, 0, 3):
...@@ -779,16 +791,6 @@ static int psp_load_toc(struct psp_context *psp, ...@@ -779,16 +791,6 @@ static int psp_load_toc(struct psp_context *psp,
return ret; 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 */ /* Set up Trusted Memory Region */
static int psp_tmr_init(struct psp_context *psp) static int psp_tmr_init(struct psp_context *psp)
{ {
...@@ -2256,7 +2258,7 @@ static int psp_hw_start(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)) if (amdgpu_sriov_vf(adev) && amdgpu_in_reset(adev))
goto skip_pin_bo; goto skip_pin_bo;
if (!psp_boottime_tmr(psp)) { if (!psp->boot_time_tmr) {
ret = psp_tmr_init(psp); ret = psp_tmr_init(psp);
if (ret) { if (ret) {
dev_err(adev->dev, "PSP tmr init failed!\n"); dev_err(adev->dev, "PSP tmr init failed!\n");
......
...@@ -364,6 +364,8 @@ struct psp_context { ...@@ -364,6 +364,8 @@ struct psp_context {
atomic_t fence_value; atomic_t fence_value;
/* flag to mark whether gfx fw autoload is supported or not */ /* flag to mark whether gfx fw autoload is supported or not */
bool autoload_supported; 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 */ /* flag to mark whether df cstate management centralized to PMFW */
bool pmfw_centralized_cstate_management; bool pmfw_centralized_cstate_management;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment