[PATCH 3/3] drm/amdgpu/pm: inform PMFW rlc status before start/stop rlc for vangogh

Huang Rui ray.huang at amd.com
Tue Dec 8 13:08:47 UTC 2020


On Tue, Dec 08, 2020 at 07:19:42PM +0800, Hou, Xiaomeng (Matthew) wrote:
> RLC is halted when system suspend/shutdown. However, due to DPM enabled, PMFM is
> unaware of RLC being halted and will continue sending messages, which would
> eventually caused ACPI related hang. So send message to inform PMFM the rlc
> status before start/stop rlc.
> 
> Signed-off-by: Xiaomeng Hou <Xiaomeng.Hou at amd.com>
> Change-Id: I7b1a04f6e249ac6753109079ecb3019c99161d9f
> ---
>  drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> index cf999b7a2164..42a32c0e5bab 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> @@ -920,6 +920,14 @@ static int smu_smc_hw_setup(struct smu_context *smu)
>  	uint32_t pcie_gen = 0, pcie_width = 0;
>  	int ret = 0;
>  
> +	if (adev->in_suspend && smu->is_apu) {
> +		ret = smu_notify_rlc_status(smu, 1);

You can create two new callbacks in ppt_funcs->inform_rlc(smu, on), and set
on as bool type.

Then you can use below macros to implement this callback with RLC notify
SMC message.

/* RLC Power Status */
#define RLC_STATUS_OFF          0
#define RLC_STATUS_NORMAL       1

Others look good for me.

Thanks,
Ray

> +		if (ret) {
> +			dev_info(adev->dev, "Failed to notify rlc status!\n");
> +			return ret;
> +		}
> +	}
> +
>  	if (adev->in_suspend && smu_is_dpm_running(smu)) {
>  		dev_info(adev->dev, "dpm has been enabled\n");
>  		/* this is needed specifically */
> @@ -1213,6 +1221,14 @@ static int smu_disable_dpms(struct smu_context *smu)
>  			dev_err(adev->dev, "Failed to disable smu features.\n");
>  	}
>  
> +	if (smu->is_apu) {
> +		ret = smu_notify_rlc_status(smu, 0);
> +		if (ret) {
> +			dev_info(adev->dev, "Failed to notify rlc status!\n");
> +			return ret;
> +		}
> +	}
> +
>  	if (adev->asic_type >= CHIP_NAVI10 &&
>  	    adev->gfx.rlc.funcs->stop)
>  		adev->gfx.rlc.funcs->stop(adev);
> -- 
> 2.17.1
> 


More information about the amd-gfx mailing list