E.g. During non-RAS baco reset, the SMC is still alive. Thus there is no need to reload the SMC firmware. Change-Id: I73f6284541d0ca0e82761380a27e32484fb0061c Signed-off-by: Evan Quan <evan.quan@xxxxxxx> --- drivers/gpu/drm/amd/amdgpu/psp_v11_0.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c index c66ca8cc2ebd..ba761e9366e3 100644 --- a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c +++ b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c @@ -676,6 +676,19 @@ static bool psp_v11_0_compare_sram_data(struct psp_context *psp, return true; } +/* + * Check whether SMU is still alive. If that's true + * (e.g. for non-RAS baco reset), we need to skip SMC firmware reloading. + */ +static bool psp_v11_0_smu_reload_quirk(struct psp_context *psp) +{ + struct amdgpu_device *adev = psp->adev; + uint32_t reg; + + reg = RREG32_PCIE(smnMP1_FIRMWARE_FLAGS | 0x03b00000); + return (reg & MP1_FIRMWARE_FLAGS__INTERRUPTS_ENABLED_MASK) ? true : false; +} + static int psp_v11_0_mode1_reset(struct psp_context *psp) { int ret; @@ -1070,6 +1083,7 @@ static const struct psp_funcs psp_v11_0_funcs = { .ring_stop = psp_v11_0_ring_stop, .ring_destroy = psp_v11_0_ring_destroy, .compare_sram_data = psp_v11_0_compare_sram_data, + .smu_reload_quirk = psp_v11_0_smu_reload_quirk, .mode1_reset = psp_v11_0_mode1_reset, .xgmi_get_topology_info = psp_v11_0_xgmi_get_topology_info, .xgmi_set_topology_info = psp_v11_0_xgmi_set_topology_info, -- 2.24.0 _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx