[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