Re: [PATCH v2 2/4] drm/amd/pm: Implement GFXOFF's entry count and residency for vangogh

2022-08-10 Thread Alex Deucher
On Tue, Jul 26, 2022 at 2:23 PM André Almeida  wrote:
>
> Implement functions to get and set GFXOFF's entry count and residency
> for vangogh.
>
> Signed-off-by: André Almeida 
> ---
>  .../pm/swsmu/inc/pmfw_if/smu_v11_5_ppsmc.h|  5 +-
>  drivers/gpu/drm/amd/pm/swsmu/inc/smu_types.h  |  5 +-
>  .../gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c  | 92 +++
>  3 files changed, 100 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu_v11_5_ppsmc.h 
> b/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu_v11_5_ppsmc.h
> index fe130a497d6c..7471e2df2828 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu_v11_5_ppsmc.h
> +++ b/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu_v11_5_ppsmc.h
> @@ -108,7 +108,10 @@
>  #define PPSMC_MSG_SetSlowPPTLimit  0x4A
>  #define PPSMC_MSG_GetFastPPTLimit  0x4B
>  #define PPSMC_MSG_GetSlowPPTLimit  0x4C
> -#define PPSMC_Message_Count0x4D
> +#define PPSMC_MSG_GetGfxOffStatus 0x50
> +#define PPSMC_MSG_GetGfxOffEntryCount 0x51
> +#define PPSMC_MSG_LogGfxOffResidency  0x52
> +#define PPSMC_Message_Count0x53
>
>  //Argument for PPSMC_MSG_GfxDeviceDriverReset
>  enum {
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_types.h 
> b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_types.h
> index 19084a4fcb2b..76fb6cbbc09c 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_types.h
> +++ b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_types.h
> @@ -235,7 +235,10 @@
> __SMU_DUMMY_MAP(UnforceGfxVid),   \
> __SMU_DUMMY_MAP(HeavySBR),  \
> __SMU_DUMMY_MAP(SetBadHBMPagesRetiredFlagsPerChannel), \
> -   __SMU_DUMMY_MAP(EnableGfxImu),
> +   __SMU_DUMMY_MAP(EnableGfxImu),  \
> +   __SMU_DUMMY_MAP(GetGfxOffStatus),\
> +   __SMU_DUMMY_MAP(GetGfxOffEntryCount),\
> +   __SMU_DUMMY_MAP(LogGfxOffResidency),
>
>  #undef __SMU_DUMMY_MAP
>  #define __SMU_DUMMY_MAP(type)  SMU_MSG_##type
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c 
> b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
> index 89504ff8e9ed..4e547573698b 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
> @@ -138,6 +138,9 @@ static struct cmn2asic_msg_mapping 
> vangogh_message_map[SMU_MSG_MAX_COUNT] = {
> MSG_MAP(SetSlowPPTLimit,
> PPSMC_MSG_SetSlowPPTLimit,  0),
> MSG_MAP(GetFastPPTLimit,
> PPSMC_MSG_GetFastPPTLimit,  0),
> MSG_MAP(GetSlowPPTLimit,
> PPSMC_MSG_GetSlowPPTLimit,  0),
> +   MSG_MAP(GetGfxOffStatus,
> PPSMC_MSG_GetGfxOffStatus,  0),
> +   MSG_MAP(GetGfxOffEntryCount,
> PPSMC_MSG_GetGfxOffEntryCount,  0),
> +   MSG_MAP(LogGfxOffResidency, 
> PPSMC_MSG_LogGfxOffResidency,   0),
>  };
>
>  static struct cmn2asic_mapping vangogh_feature_mask_map[SMU_FEATURE_COUNT] = 
> {
> @@ -2200,6 +2203,92 @@ static int vangogh_set_power_limit(struct smu_context 
> *smu,
> return ret;
>  }
>
> +/**
> + * vangogh_set_gfxoff_residency
> + *
> + * @smu: amdgpu_device pointer
> + * @start: start/stop residency log
> + *
> + * This function will be used to log gfxoff residency
> + *
> + *
> + * Returns standard response codes.
> + */
> +static u32 vangogh_set_gfxoff_residency(struct smu_context *smu, bool start)
> +{
> +   int ret = 0;
> +   u32 residency;
> +   struct amdgpu_device *adev = smu->adev;
> +
> +   switch (adev->ip_versions[MP1_HWIP][0]) {
> +   case IP_VERSION(11, 5, 0):

Minor nit, but you can drip the IP version checks here.  This whole
file is specific to 11.5.

> +   if (!(adev->pm.pp_feature & PP_GFXOFF_MASK))
> +   return 0;
> +   ret = smu_cmn_send_smc_msg_with_param(smu, 
> SMU_MSG_LogGfxOffResidency,
> + start, );
> +   if (!start)
> +   adev->gfx.gfx_off_residency = residency;
> +   break;
> +   default:
> +   break;
> +   }
> +
> +   return ret;
> +}
> +
> +/**
> + * vangogh_get_gfxoff_residency
> + *
> + * @smu: amdgpu_device pointer
> + *
> + * This function will be used to get gfxoff residency.
> + *
> + * Returns standard response codes.
> + */
> +static u32 vangogh_get_gfxoff_residency(struct smu_context *smu, uint32_t 
> *residency)
> +{
> +   int ret = 0;
> +   struct amdgpu_device *adev = smu->adev;
> +
> +   switch 

[PATCH v2 2/4] drm/amd/pm: Implement GFXOFF's entry count and residency for vangogh

2022-07-26 Thread André Almeida
Implement functions to get and set GFXOFF's entry count and residency
for vangogh.

Signed-off-by: André Almeida 
---
 .../pm/swsmu/inc/pmfw_if/smu_v11_5_ppsmc.h|  5 +-
 drivers/gpu/drm/amd/pm/swsmu/inc/smu_types.h  |  5 +-
 .../gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c  | 92 +++
 3 files changed, 100 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu_v11_5_ppsmc.h 
b/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu_v11_5_ppsmc.h
index fe130a497d6c..7471e2df2828 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu_v11_5_ppsmc.h
+++ b/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu_v11_5_ppsmc.h
@@ -108,7 +108,10 @@
 #define PPSMC_MSG_SetSlowPPTLimit  0x4A
 #define PPSMC_MSG_GetFastPPTLimit  0x4B
 #define PPSMC_MSG_GetSlowPPTLimit  0x4C
-#define PPSMC_Message_Count0x4D
+#define PPSMC_MSG_GetGfxOffStatus 0x50
+#define PPSMC_MSG_GetGfxOffEntryCount 0x51
+#define PPSMC_MSG_LogGfxOffResidency  0x52
+#define PPSMC_Message_Count0x53
 
 //Argument for PPSMC_MSG_GfxDeviceDriverReset
 enum {
diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_types.h 
b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_types.h
index 19084a4fcb2b..76fb6cbbc09c 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_types.h
+++ b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_types.h
@@ -235,7 +235,10 @@
__SMU_DUMMY_MAP(UnforceGfxVid),   \
__SMU_DUMMY_MAP(HeavySBR),  \
__SMU_DUMMY_MAP(SetBadHBMPagesRetiredFlagsPerChannel), \
-   __SMU_DUMMY_MAP(EnableGfxImu),
+   __SMU_DUMMY_MAP(EnableGfxImu),  \
+   __SMU_DUMMY_MAP(GetGfxOffStatus),\
+   __SMU_DUMMY_MAP(GetGfxOffEntryCount),\
+   __SMU_DUMMY_MAP(LogGfxOffResidency),
 
 #undef __SMU_DUMMY_MAP
 #define __SMU_DUMMY_MAP(type)  SMU_MSG_##type
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c 
b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
index 89504ff8e9ed..4e547573698b 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
@@ -138,6 +138,9 @@ static struct cmn2asic_msg_mapping 
vangogh_message_map[SMU_MSG_MAX_COUNT] = {
MSG_MAP(SetSlowPPTLimit,PPSMC_MSG_SetSlowPPTLimit,  
0),
MSG_MAP(GetFastPPTLimit,PPSMC_MSG_GetFastPPTLimit,  
0),
MSG_MAP(GetSlowPPTLimit,PPSMC_MSG_GetSlowPPTLimit,  
0),
+   MSG_MAP(GetGfxOffStatus,PPSMC_MSG_GetGfxOffStatus,  
0),
+   MSG_MAP(GetGfxOffEntryCount,
PPSMC_MSG_GetGfxOffEntryCount,  0),
+   MSG_MAP(LogGfxOffResidency, 
PPSMC_MSG_LogGfxOffResidency,   0),
 };
 
 static struct cmn2asic_mapping vangogh_feature_mask_map[SMU_FEATURE_COUNT] = {
@@ -2200,6 +2203,92 @@ static int vangogh_set_power_limit(struct smu_context 
*smu,
return ret;
 }
 
+/**
+ * vangogh_set_gfxoff_residency
+ *
+ * @smu: amdgpu_device pointer
+ * @start: start/stop residency log
+ *
+ * This function will be used to log gfxoff residency
+ *
+ *
+ * Returns standard response codes.
+ */
+static u32 vangogh_set_gfxoff_residency(struct smu_context *smu, bool start)
+{
+   int ret = 0;
+   u32 residency;
+   struct amdgpu_device *adev = smu->adev;
+
+   switch (adev->ip_versions[MP1_HWIP][0]) {
+   case IP_VERSION(11, 5, 0):
+   if (!(adev->pm.pp_feature & PP_GFXOFF_MASK))
+   return 0;
+   ret = smu_cmn_send_smc_msg_with_param(smu, 
SMU_MSG_LogGfxOffResidency,
+ start, );
+   if (!start)
+   adev->gfx.gfx_off_residency = residency;
+   break;
+   default:
+   break;
+   }
+
+   return ret;
+}
+
+/**
+ * vangogh_get_gfxoff_residency
+ *
+ * @smu: amdgpu_device pointer
+ *
+ * This function will be used to get gfxoff residency.
+ *
+ * Returns standard response codes.
+ */
+static u32 vangogh_get_gfxoff_residency(struct smu_context *smu, uint32_t 
*residency)
+{
+   int ret = 0;
+   struct amdgpu_device *adev = smu->adev;
+
+   switch (adev->ip_versions[MP1_HWIP][0]) {
+   case IP_VERSION(11, 5, 0):
+   *residency = adev->gfx.gfx_off_residency;
+   break;
+   default:
+   break;
+   }
+
+   return ret;
+}
+
+/**
+ * vangogh_get_gfxoff_entrycount - get gfxoff entry count
+ *
+ * @smu: amdgpu_device pointer
+ *
+ * This function will be used to get gfxoff entry count
+ *
+ * Returns standard