[PATCH 1/2] drm/amd/pm: Add LightSBR SMU MSG support
Alex Deucher
alexdeucher at gmail.com
Wed Mar 10 19:41:26 UTC 2021
On Wed, Mar 10, 2021 at 12:55 PM shaoyunl <shaoyun.liu at amd.com> wrote:
>
> This new MSG provide the interface for driver to enable/disable the Light Secondary Bus Reset
> support from SMU. When enabled, SMU will only do minimum NBIO response to the SBR request and
> leave the real HW reset to be handled by driver later. When disabled (default state),SMU will
> pass the request to PSP for a HW reset
>
> Signed-off-by: shaoyunl <shaoyun.liu at amd.com>
> Change-Id: I5f0e48730d2b4b48fed8137aa57c683d5b3d1b9f
> ---
> drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h | 7 +++++++
> drivers/gpu/drm/amd/pm/inc/arcturus_ppsmc.h | 7 +++++++
> drivers/gpu/drm/amd/pm/inc/smu_types.h | 1 +
> drivers/gpu/drm/amd/pm/inc/smu_v11_0.h | 2 ++
> drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 12 ++++++++++++
> drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c | 2 ++
> drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 10 ++++++++++
> 7 files changed, 41 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h
> index 00186a3b29be..369f0267b1f2 100644
> --- a/drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h
> +++ b/drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h
> @@ -1149,6 +1149,11 @@ struct pptable_funcs {
> * parameters to defaults.
> */
> int (*set_fine_grain_gfx_freq_parameters)(struct smu_context *smu);
> +
> + /**
> + * @set_lightSBR: Set lightSBR mode for the SMU.
> + */
> + int (*set_lightSBR)(struct smu_context *smu, bool enable);
Please don't use CamelCase. Call this set_light_sbr. Same comments below.
Alex
> };
>
> typedef enum {
> @@ -1350,5 +1355,7 @@ ssize_t smu_sys_get_gpu_metrics(void *handle, void **table);
> int smu_enable_mgpu_fan_boost(void *handle);
> int smu_gfx_state_change_set(struct smu_context *smu, uint32_t state);
>
> +int smu_set_lightSBR(struct smu_context *smu, bool enable);
> +
> #endif
> #endif
> diff --git a/drivers/gpu/drm/amd/pm/inc/arcturus_ppsmc.h b/drivers/gpu/drm/amd/pm/inc/arcturus_ppsmc.h
> index 79afb132164e..45f5d29bc705 100644
> --- a/drivers/gpu/drm/amd/pm/inc/arcturus_ppsmc.h
> +++ b/drivers/gpu/drm/amd/pm/inc/arcturus_ppsmc.h
> @@ -120,6 +120,13 @@
> #define PPSMC_MSG_ReadSerialNumTop32 0x40
> #define PPSMC_MSG_ReadSerialNumBottom32 0x41
>
> +/* paramater for MSG_LightSBR
> + * 1 -- Enable light secondary bus reset, only do nbio respond without further handling,
> + * leave driver to handle the real reset
> + * 0 -- Disable LightSBR, default behavior, SMU will pass the reset to PSP
> + */
> +#define PPSMC_MSG_LightSBR 0x42
> +
> typedef uint32_t PPSMC_Result;
> typedef uint32_t PPSMC_Msg;
> #pragma pack(pop)
> diff --git a/drivers/gpu/drm/amd/pm/inc/smu_types.h b/drivers/gpu/drm/amd/pm/inc/smu_types.h
> index aa4822202587..92f72d770a99 100644
> --- a/drivers/gpu/drm/amd/pm/inc/smu_types.h
> +++ b/drivers/gpu/drm/amd/pm/inc/smu_types.h
> @@ -214,6 +214,7 @@
> __SMU_DUMMY_MAP(SetSlowPPTLimit), \
> __SMU_DUMMY_MAP(GetFastPPTLimit), \
> __SMU_DUMMY_MAP(GetSlowPPTLimit), \
> + __SMU_DUMMY_MAP(LightSBR), \
>
> #undef __SMU_DUMMY_MAP
> #define __SMU_DUMMY_MAP(type) SMU_MSG_##type
> diff --git a/drivers/gpu/drm/amd/pm/inc/smu_v11_0.h b/drivers/gpu/drm/amd/pm/inc/smu_v11_0.h
> index bf570a7af6a7..7c7b149e7a83 100644
> --- a/drivers/gpu/drm/amd/pm/inc/smu_v11_0.h
> +++ b/drivers/gpu/drm/amd/pm/inc/smu_v11_0.h
> @@ -295,5 +295,7 @@ int smu_v11_0_deep_sleep_control(struct smu_context *smu,
>
> void smu_v11_0_interrupt_work(struct smu_context *smu);
>
> +int smu_v11_0_set_lightSBR(struct smu_context *smu, bool enable);
> +
> #endif
> #endif
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> index 502e1b926a06..58f508c36084 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> @@ -2934,6 +2934,18 @@ int smu_gfx_state_change_set(struct smu_context *smu, uint32_t state)
> return ret;
> }
>
> +int smu_set_lightSBR(struct smu_context *smu, bool enable)
> +{
> + int ret = 0;
> +
> + mutex_lock(&smu->mutex);
> + ret = smu->ppt_funcs->set_lightSBR(smu, enable);
> + mutex_unlock(&smu->mutex);
> +
> + return ret;
> +}
> +
> +
> static const struct amd_pm_funcs swsmu_pm_funcs = {
> /* export for sysfs */
> .set_fan_control_mode = smu_pp_set_fan_control_mode,
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c
> index f76d1b8aeecc..73a30208aa71 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c
> @@ -142,6 +142,7 @@ static const struct cmn2asic_msg_mapping arcturus_message_map[SMU_MSG_MAX_COUNT]
> MSG_MAP(GmiPwrDnControl, PPSMC_MSG_GmiPwrDnControl, 0),
> MSG_MAP(ReadSerialNumTop32, PPSMC_MSG_ReadSerialNumTop32, 1),
> MSG_MAP(ReadSerialNumBottom32, PPSMC_MSG_ReadSerialNumBottom32, 1),
> + MSG_MAP(LightSBR, PPSMC_MSG_LightSBR, 0),
> };
>
> static const struct cmn2asic_mapping arcturus_clk_map[SMU_CLK_COUNT] = {
> @@ -2363,6 +2364,7 @@ static const struct pptable_funcs arcturus_ppt_funcs = {
> .deep_sleep_control = smu_v11_0_deep_sleep_control,
> .get_fan_parameters = arcturus_get_fan_parameters,
> .interrupt_work = smu_v11_0_interrupt_work,
> + .set_lightSBR = smu_v11_0_set_lightSBR,
> };
>
> void arcturus_set_ppt_funcs(struct smu_context *smu)
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
> index 1882a0643f7a..29aef6eeb55b 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
> @@ -1601,6 +1601,16 @@ int smu_v11_0_mode1_reset(struct smu_context *smu)
> return ret;
> }
>
> +int smu_v11_0_set_lightSBR(struct smu_context *smu, bool enable)
> +{
> + int ret = 0;
> +
> + ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_LightSBR, enable ? 1 : 0, NULL);
> +
> + return ret;
> +}
> +
> +
> int smu_v11_0_get_dpm_ultimate_freq(struct smu_context *smu, enum smu_clk_type clk_type,
> uint32_t *min, uint32_t *max)
> {
> --
> 2.17.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