I think you should use 
smu7_profiling[PP_SMC_POWER_PROFILE_CUSTOM].bupdate_sclk/bupdate_mclk to judge 
whether there is saved custom profile.
That's where previous custom profile settings store in.
'tmp' is a temporary structures and you should not rely on that.

Regards,
Evan
> -----Original Message-----
> From: amd-gfx <[email protected]> On Behalf Of
> Russell, Kent
> Sent: Wednesday, March 27, 2019 9:59 PM
> To: [email protected]
> Cc: Russell, Kent <[email protected]>
> Subject: [PATCH 2/2] drm/amdgpu: Allow switching to CUSTOM profile on
> smu7 v2
> 
> Allow changing to the CUSTOM profile without requiring the parameters
> being passed in each time. Store the values in the smu7_profiling table since
> it's defined here anyways
> 
> v2: Add check that CUSTOM was previously set
> 
> Change-Id: I6c5e3a1487e12410a6a7670a5cf1a6599253344d
> Signed-off-by: Kent Russell <[email protected]>
> ---
>  .../gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c  | 32 ++++++++++++--
> -----
>  1 file changed, 21 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
> b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
> index 83d3d935f3ac..048757e8f494 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
> @@ -77,7 +77,7 @@
>  #define PCIE_BUS_CLK                10000
>  #define TCLK                        (PCIE_BUS_CLK / 10)
> 
> -static const struct profile_mode_setting smu7_profiling[7] =
> +static struct profile_mode_setting smu7_profiling[7] =
>                                       {{0, 0, 0, 0, 0, 0, 0, 0},
>                                        {1, 0, 100, 30, 1, 0, 100, 10},
>                                        {1, 10, 0, 30, 0, 0, 0, 0},
> @@ -4984,17 +4984,27 @@ static int smu7_set_power_profile_mode(struct
> pp_hwmgr *hwmgr, long *input, uint
>       mode = input[size];
>       switch (mode) {
>       case PP_SMC_POWER_PROFILE_CUSTOM:
> -             if (size < 8)
> +             if (size < 8 && size != 0)
>                       return -EINVAL;
> -
> -             tmp.bupdate_sclk = input[0];
> -             tmp.sclk_up_hyst = input[1];
> -             tmp.sclk_down_hyst = input[2];
> -             tmp.sclk_activity = input[3];
> -             tmp.bupdate_mclk = input[4];
> -             tmp.mclk_up_hyst = input[5];
> -             tmp.mclk_down_hyst = input[6];
> -             tmp.mclk_activity = input[7];
> +             /* If only CUSTOM is passed in, use the saved values. Check
> +              * that we actually have a CUSTOM profile by ensuring that
> +              * the "use sclk" or the "use mclk" bits are set
> +              */
> +             tmp = smu7_profiling[PP_SMC_POWER_PROFILE_CUSTOM];
> +             if (size == 0) {
> +                     if (tmp.bupdate_sclk == 0 && tmp.bupdate_mclk ==
> 0)
> +                             return -EINVAL;
> +             } else {
> +                     tmp.bupdate_sclk = input[0];
> +                     tmp.sclk_up_hyst = input[1];
> +                     tmp.sclk_down_hyst = input[2];
> +                     tmp.sclk_activity = input[3];
> +                     tmp.bupdate_mclk = input[4];
> +                     tmp.mclk_up_hyst = input[5];
> +                     tmp.mclk_down_hyst = input[6];
> +                     tmp.mclk_activity = input[7];
> +                     smu7_profiling[PP_SMC_POWER_PROFILE_CUSTOM]
> = tmp;
> +             }
>               if (!smum_update_dpm_settings(hwmgr, &tmp)) {
>                       memcpy(&data->current_profile_setting, &tmp,
> sizeof(struct profile_mode_setting));
>                       hwmgr->power_profile_mode = mode;
> --
> 2.17.1
> 
> _______________________________________________
> amd-gfx mailing list
> [email protected]
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to