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....@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
> 
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to