[PATCH] drm/amd/pm: Use macro to initialize metrics table

Zhang, Hawking Hawking.Zhang at amd.com
Tue Apr 29 03:47:06 UTC 2025


[AMD Official Use Only - AMD Internal Distribution Only]

Reviewed-by: Hawking Zhang <Hawking.Zhang at amd.com>

Regards,
Hawking
-----Original Message-----
From: Lazar, Lijo <Lijo.Lazar at amd.com>
Sent: Tuesday, April 29, 2025 11:15
To: amd-gfx at lists.freedesktop.org
Cc: Zhang, Hawking <Hawking.Zhang at amd.com>; Deucher, Alexander <Alexander.Deucher at amd.com>; Kamal, Asad <Asad.Kamal at amd.com>; Wang, Yang(Kevin) <KevinYang.Wang at amd.com>
Subject: [PATCH] drm/amd/pm: Use macro to initialize metrics table

Helps to keep a build time check about usage of right datatype and avoids maintainence as new versions get added.

Signed-off-by: Lijo Lazar <lijo.lazar at amd.com>
---
 drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c | 67 --------------------------  drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h | 13 ++++-
 2 files changed, 11 insertions(+), 69 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c b/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c
index 80eb1a03b3ca..7eaf58fd7f9a 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c
@@ -1051,73 +1051,6 @@ int smu_cmn_get_combo_pptable(struct smu_context *smu)
                                    false);
 }

-void smu_cmn_init_soft_gpu_metrics(void *table, uint8_t frev, uint8_t crev) -{
-       struct metrics_table_header *header = (struct metrics_table_header *)table;
-       uint16_t structure_size;
-
-#define METRICS_VERSION(a, b)  ((a << 16) | b)
-
-       switch (METRICS_VERSION(frev, crev)) {
-       case METRICS_VERSION(1, 0):
-               structure_size = sizeof(struct gpu_metrics_v1_0);
-               break;
-       case METRICS_VERSION(1, 1):
-               structure_size = sizeof(struct gpu_metrics_v1_1);
-               break;
-       case METRICS_VERSION(1, 2):
-               structure_size = sizeof(struct gpu_metrics_v1_2);
-               break;
-       case METRICS_VERSION(1, 3):
-               structure_size = sizeof(struct gpu_metrics_v1_3);
-               break;
-       case METRICS_VERSION(1, 4):
-               structure_size = sizeof(struct gpu_metrics_v1_4);
-               break;
-       case METRICS_VERSION(1, 5):
-               structure_size = sizeof(struct gpu_metrics_v1_5);
-               break;
-       case METRICS_VERSION(1, 6):
-               structure_size = sizeof(struct gpu_metrics_v1_6);
-               break;
-       case METRICS_VERSION(1, 7):
-               structure_size = sizeof(struct gpu_metrics_v1_7);
-               break;
-       case METRICS_VERSION(1, 8):
-               structure_size = sizeof(struct gpu_metrics_v1_8);
-               break;
-       case METRICS_VERSION(2, 0):
-               structure_size = sizeof(struct gpu_metrics_v2_0);
-               break;
-       case METRICS_VERSION(2, 1):
-               structure_size = sizeof(struct gpu_metrics_v2_1);
-               break;
-       case METRICS_VERSION(2, 2):
-               structure_size = sizeof(struct gpu_metrics_v2_2);
-               break;
-       case METRICS_VERSION(2, 3):
-               structure_size = sizeof(struct gpu_metrics_v2_3);
-               break;
-       case METRICS_VERSION(2, 4):
-               structure_size = sizeof(struct gpu_metrics_v2_4);
-               break;
-       case METRICS_VERSION(3, 0):
-               structure_size = sizeof(struct gpu_metrics_v3_0);
-               break;
-       default:
-               return;
-       }
-
-#undef METRICS_VERSION
-
-       memset(header, 0xFF, structure_size);
-
-       header->format_revision = frev;
-       header->content_revision = crev;
-       header->structure_size = structure_size;
-
-}
-
 int smu_cmn_set_mp1_state(struct smu_context *smu,
                          enum pp_mp1_state mp1_state)
 {
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h b/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h
index a020277dec3e..cd75fdfd6b4a 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h
@@ -40,6 +40,17 @@
 #define SMU_IH_INTERRUPT_CONTEXT_ID_FAN_ABNORMAL        0x8
 #define SMU_IH_INTERRUPT_CONTEXT_ID_FAN_RECOVERY        0x9

+#define smu_cmn_init_soft_gpu_metrics(ptr, a, b)                          \
+       do {                                                              \
+               typecheck(struct gpu_metrics_v##a##_##b, typeof(*(ptr))); \
+               struct metrics_table_header *header =                     \
+                       (struct metrics_table_header *)table;             \
+               memset(header, 0xFF, sizeof(*(ptr)));                     \
+               header->format_revision = a;                              \
+               header->content_revision = b;                             \
+               header->structure_size = sizeof(*(ptr));                  \
+       } while (0)
+
 extern const int link_speed[];

 /* Helper to Convert from PCIE Gen 1/2/3/4/5/6 to 0.1 GT/s speed units */ @@ -125,8 +136,6 @@ int smu_cmn_get_metrics_table(struct smu_context *smu,

 int smu_cmn_get_combo_pptable(struct smu_context *smu);

-void smu_cmn_init_soft_gpu_metrics(void *table, uint8_t frev, uint8_t crev);
-
 int smu_cmn_set_mp1_state(struct smu_context *smu,
                          enum pp_mp1_state mp1_state);

--
2.25.1



More information about the amd-gfx mailing list