[PATCH 12/12] drm/amdgpu: put the SMC into the proper state on suspend
Quan, Evan
Evan.Quan at amd.com
Fri Jul 26 02:20:43 UTC 2019
Patch1 - patch11: Reviewed-by: Evan Quan <evan.quan at amd.com>
For patch12, comment inline
> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of Alex
> Deucher
> Sent: Friday, July 26, 2019 12:58 AM
> To: amd-gfx at lists.freedesktop.org
> Cc: Deucher, Alexander <Alexander.Deucher at amd.com>
> Subject: [PATCH 12/12] drm/amdgpu: put the SMC into the proper state on
> suspend
>
> Suspend is used for S3/S4, GPU reset, and PCI shutdown. In each case, we
> need to put the SMC into the proper state in order to resume or reload
> correctly.
>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 33
> ++++++++++++++++++++++
> 1 file changed, 33 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index 4425ff06ecc4..bb4260648a97 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -2174,6 +2174,39 @@ static int
> amdgpu_device_ip_suspend_phase2(struct amdgpu_device *adev)
> DRM_ERROR("suspend of IP block <%s> failed %d\n",
> adev->ip_blocks[i].version->funcs->name,
> r);
> }
> + /* handle putting the SMC in the appropriate state */
> + if (adev->ip_blocks[i].version->type ==
> AMD_IP_BLOCK_TYPE_SMC) {
> + enum pp_mp1_state mp1_state =
> PP_MP1_STATE_NONE;
> +
> + if (adev->in_gpu_reset) {
> + switch (amdgpu_asic_reset_method(adev)) {
> + case AMD_RESET_METHOD_MODE1:
> + case AMD_RESET_METHOD_BACO:
> + mp1_state =
> PP_MP1_STATE_SHUTDOWN;
[Quan, Evan] For AMD_RESET_METHOD_BACO, it should be PP_MP1_STATE_UNLOAD.
> + break;
> + case AMD_RESET_METHOD_MODE2:
> + mp1_state = PP_MP1_STATE_RESET;
> + break;
> + default:
> + mp1_state = PP_MP1_STATE_NONE;
> + break;
> + }
> + } else if (adev->in_gpu_shutdown) {
> + mp1_state = PP_MP1_STATE_UNLOAD;
> + }
[Quan, Evan] Handling for suspend only case seems missing.
> + if (is_support_sw_smu(adev)) {
> + /* todo */
> + } else if (adev->powerplay.pp_funcs &&
> + adev->powerplay.pp_funcs-
> >set_mp1_state) {
> + r = adev->powerplay.pp_funcs-
> >set_mp1_state(
> + adev->powerplay.pp_handle,
> + mp1_state);
> + if (r) {
> + DRM_ERROR("SMC failed to set mp1
> state %d, %d\n",
> + mp1_state, r);
> + }
> + }
> + }
[Quan, Evan] Baco reset will be triggered in soc15_asic_reset. And there will be SMU message issued then and needs the SMU prepared.
If we stall the SMU engine here(before soc15_asic_reset), we may fail to issue BACO messages.
> }
>
> return 0;
> --
> 2.20.1
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list