<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<p style="font-family:Calibri;font-size:10pt;color:#0000FF;margin:5pt;font-style:normal;font-weight:normal;text-decoration:none;" align="Left">
[AMD Official Use Only - AMD Internal Distribution Only]<br>
</p>
<br>
<div>
<div dir="ltr" style="font-family: "Times New Roman"; font-size: 14.666667px; color: rgb(0, 0, 0);">
<span style="background-color: rgb(255, 255, 255);">#define smu_cmn_init_soft_gpu_metrics(ptr, a, b) </span></div>
<div dir="ltr" style="font-family: "Times New Roman"; font-size: 14.666667px; color: rgb(0, 0, 0);">
<span style="background-color: rgb(255, 255, 255);"><br>
</span></div>
<div dir="ltr" style="font-family: "Times New Roman"; font-size: 14.666667px; color: rgb(0, 0, 0);">
<span style="background-color: rgb(255, 255, 255);">it is better to use frev/crev to instead of a,b .</span></div>
<div dir="ltr" style="font-family: "Times New Roman"; font-size: 14.666667px; color: rgb(0, 0, 0);">
<span style="background-color: rgb(255, 255, 255);"><br>
</span></div>
<div dir="ltr" style="font-family: "Times New Roman"; font-size: 14.666667px; color: rgb(0, 0, 0);">
<span style="background-color: rgb(255, 255, 255);">apart is ok for me.</span></div>
<div dir="ltr" style="font-family: "Times New Roman"; font-size: 14.666667px; color: rgb(0, 0, 0);">
<span style="background-color: rgb(255, 255, 255);"><br>
</span></div>
<div dir="ltr" style="font-family: "Times New Roman"; font-size: 14.666667px; color: rgb(0, 0, 0);">
<span style="background-color: rgb(255, 255, 255);">Reviewed-by: Yang Wang <kevinyang.wang@amd.com></span></div>
<div id="ms-outlook-mobile-body-separator-line" dir="ltr"><br>
</div>
<div id="ms-outlook-mobile-signature">
<div dir="ltr">Best Regards,</div>
<div dir="ltr">Kevin</div>
</div>
<div id="mail-editor-reference-message-container" class="ms-outlook-mobile-reference-message">
<div id="mail-editor-reference-message-container">
<hr style="display: inline-block; width: 98%;">
<div id="divRplyFwdMsg" dir="ltr"><span style="font-family: Calibri, sans-serif;"><b>发件人:</b> Zhang, Hawking <Hawking.Zhang@amd.com><br>
<b>发送时间:</b> 星期二, 四月 29, 2025 11:47 上午<br>
<b>收件人:</b> Lazar, Lijo <Lijo.Lazar@amd.com>; amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org><br>
<b>抄送:</b> Deucher, Alexander <Alexander.Deucher@amd.com>; Kamal, Asad <Asad.Kamal@amd.com>; Wang, Yang(Kevin) <KevinYang.Wang@amd.com><br>
<b>主题:</b> RE: [PATCH] drm/amd/pm: Use macro to initialize metrics table</span>
<div style="font-family: Calibri, sans-serif;"> </div>
</div>
<meta name="Generator" content="Microsoft Exchange Server">
<span style="font-family: "Times New Roman"; font-size: 12pt;"></span>
<div style="font-family: "Times New Roman"; font-size: 11pt;">[AMD Official Use Only - AMD Internal Distribution Only]<br>
<br>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com><br>
<br>
Regards,<br>
Hawking<br>
-----Original Message-----<br>
From: Lazar, Lijo <Lijo.Lazar@amd.com><br>
Sent: Tuesday, April 29, 2025 11:15<br>
To: amd-gfx@lists.freedesktop.org<br>
Cc: Zhang, Hawking <Hawking.Zhang@amd.com>; Deucher, Alexander <Alexander.Deucher@amd.com>; Kamal, Asad <Asad.Kamal@amd.com>; Wang, Yang(Kevin) <KevinYang.Wang@amd.com><br>
Subject: [PATCH] drm/amd/pm: Use macro to initialize metrics table<br>
<br>
Helps to keep a build time check about usage of right datatype and avoids maintainence as new versions get added.<br>
<br>
Signed-off-by: Lijo Lazar <lijo.lazar@amd.com><br>
---<br>
 drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c | 67 --------------------------  drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h | 13 ++++-<br>
 2 files changed, 11 insertions(+), 69 deletions(-)<br>
<br>
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c b/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c<br>
index 80eb1a03b3ca..7eaf58fd7f9a 100644<br>
--- a/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c<br>
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c<br>
@@ -1051,73 +1051,6 @@ int smu_cmn_get_combo_pptable(struct smu_context *smu)<br>
                                    false);<br>
 }<br>
<br>
-void smu_cmn_init_soft_gpu_metrics(void *table, uint8_t frev, uint8_t crev) -{<br>
-       struct metrics_table_header *header = (struct metrics_table_header *)table;<br>
-       uint16_t structure_size;<br>
-<br>
-#define METRICS_VERSION(a, b)  ((a << 16) | b)<br>
-<br>
-       switch (METRICS_VERSION(frev, crev)) {<br>
-       case METRICS_VERSION(1, 0):<br>
-               structure_size = sizeof(struct gpu_metrics_v1_0);<br>
-               break;<br>
-       case METRICS_VERSION(1, 1):<br>
-               structure_size = sizeof(struct gpu_metrics_v1_1);<br>
-               break;<br>
-       case METRICS_VERSION(1, 2):<br>
-               structure_size = sizeof(struct gpu_metrics_v1_2);<br>
-               break;<br>
-       case METRICS_VERSION(1, 3):<br>
-               structure_size = sizeof(struct gpu_metrics_v1_3);<br>
-               break;<br>
-       case METRICS_VERSION(1, 4):<br>
-               structure_size = sizeof(struct gpu_metrics_v1_4);<br>
-               break;<br>
-       case METRICS_VERSION(1, 5):<br>
-               structure_size = sizeof(struct gpu_metrics_v1_5);<br>
-               break;<br>
-       case METRICS_VERSION(1, 6):<br>
-               structure_size = sizeof(struct gpu_metrics_v1_6);<br>
-               break;<br>
-       case METRICS_VERSION(1, 7):<br>
-               structure_size = sizeof(struct gpu_metrics_v1_7);<br>
-               break;<br>
-       case METRICS_VERSION(1, 8):<br>
-               structure_size = sizeof(struct gpu_metrics_v1_8);<br>
-               break;<br>
-       case METRICS_VERSION(2, 0):<br>
-               structure_size = sizeof(struct gpu_metrics_v2_0);<br>
-               break;<br>
-       case METRICS_VERSION(2, 1):<br>
-               structure_size = sizeof(struct gpu_metrics_v2_1);<br>
-               break;<br>
-       case METRICS_VERSION(2, 2):<br>
-               structure_size = sizeof(struct gpu_metrics_v2_2);<br>
-               break;<br>
-       case METRICS_VERSION(2, 3):<br>
-               structure_size = sizeof(struct gpu_metrics_v2_3);<br>
-               break;<br>
-       case METRICS_VERSION(2, 4):<br>
-               structure_size = sizeof(struct gpu_metrics_v2_4);<br>
-               break;<br>
-       case METRICS_VERSION(3, 0):<br>
-               structure_size = sizeof(struct gpu_metrics_v3_0);<br>
-               break;<br>
-       default:<br>
-               return;<br>
-       }<br>
-<br>
-#undef METRICS_VERSION<br>
-<br>
-       memset(header, 0xFF, structure_size);<br>
-<br>
-       header->format_revision = frev;<br>
-       header->content_revision = crev;<br>
-       header->structure_size = structure_size;<br>
-<br>
-}<br>
-<br>
 int smu_cmn_set_mp1_state(struct smu_context *smu,<br>
                          enum pp_mp1_state mp1_state)<br>
 {<br>
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h b/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h<br>
index a020277dec3e..cd75fdfd6b4a 100644<br>
--- a/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h<br>
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h<br>
@@ -40,6 +40,17 @@<br>
 #define SMU_IH_INTERRUPT_CONTEXT_ID_FAN_ABNORMAL        0x8<br>
 #define SMU_IH_INTERRUPT_CONTEXT_ID_FAN_RECOVERY        0x9<br>
<br>
+#define smu_cmn_init_soft_gpu_metrics(ptr, a, b)                          \<br>
+       do {                                                              \<br>
+               typecheck(struct gpu_metrics_v##a##_##b, typeof(*(ptr))); \<br>
+               struct metrics_table_header *header =                     \<br>
+                       (struct metrics_table_header *)table;             \<br>
+               memset(header, 0xFF, sizeof(*(ptr)));                     \<br>
+               header->format_revision = a;                              \<br>
+               header->content_revision = b;                             \<br>
+               header->structure_size = sizeof(*(ptr));                  \<br>
+       } while (0)<br>
+<br>
 extern const int link_speed[];<br>
<br>
 /* 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,<br>
<br>
 int smu_cmn_get_combo_pptable(struct smu_context *smu);<br>
<br>
-void smu_cmn_init_soft_gpu_metrics(void *table, uint8_t frev, uint8_t crev);<br>
-<br>
 int smu_cmn_set_mp1_state(struct smu_context *smu,<br>
                          enum pp_mp1_state mp1_state);<br>
<br>
--<br>
2.25.1<br>
<br>
</div>
</div>
</div>
</div>
</body>
</html>