<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<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 style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
Reviewed-and-tested-by:  Ce Sun <cesun102@amd.com></div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
Regards,</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
Ce,Sun</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> amd-gfx <amd-gfx-bounces@lists.freedesktop.org> on behalf of Lijo Lazar <lijo.lazar@amd.com><br>
<b>Sent:</b> Thursday, July 24, 2025 4:56 PM<br>
<b>To:</b> amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org><br>
<b>Cc:</b> Zhang, Hawking <Hawking.Zhang@amd.com>; Deucher, Alexander <Alexander.Deucher@amd.com>; Kamal, Asad <Asad.Kamal@amd.com>; Sun, Ce(Overlord) <Ce.Sun@amd.com><br>
<b>Subject:</b> [PATCH] drm/amd/pm: Add priority messages for SMU v13.0.6</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Certain messages will processed with high priority by PMFW even if it<br>
hasn't responded to a previous message. Send the priority message<br>
regardless of the success/fail status of the previous message. Add<br>
support on SMUv13.0.6 and SMUv13.0.12<br>
<br>
Signed-off-by: Lijo Lazar <lijo.lazar@amd.com><br>
---<br>
 drivers/gpu/drm/amd/pm/swsmu/inc/smu_types.h       |  1 +<br>
 .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c  |  2 +-<br>
 .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c   |  2 +-<br>
 drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c             | 14 +++++++++-----<br>
 4 files changed, 12 insertions(+), 7 deletions(-)<br>
<br>
diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_types.h b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_types.h<br>
index d7a9e41820fa..aaf148591a98 100644<br>
--- a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_types.h<br>
+++ b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_types.h<br>
@@ -469,6 +469,7 @@ enum smu_feature_mask {<br>
 /* Message category flags */<br>
 #define SMU_MSG_VF_FLAG                 (1U << 0)<br>
 #define SMU_MSG_RAS_PRI                 (1U << 1)<br>
+#define SMU_MSG_HI_PRI                 (1U << 2)<br>
 <br>
 /* Firmware capability flags */<br>
 #define SMU_FW_CAP_RAS_PRI              (1U << 0)<br>
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c<br>
index 02a455a31c25..17e0303f603b 100644<br>
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c<br>
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c<br>
@@ -106,7 +106,7 @@ const struct cmn2asic_msg_mapping smu_v13_0_12_message_map[SMU_MSG_MAX_COUNT] =<br>
         MSG_MAP(GetDpmFreqByIndex,                   PPSMC_MSG_GetDpmFreqByIndex,                1),<br>
         MSG_MAP(SetPptLimit,                         PPSMC_MSG_SetPptLimit,                      0),<br>
         MSG_MAP(GetPptLimit,                         PPSMC_MSG_GetPptLimit,                      1),<br>
-       MSG_MAP(GfxDeviceDriverReset,                PPSMC_MSG_GfxDriverReset,                   SMU_MSG_RAS_PRI),<br>
+       MSG_MAP(GfxDeviceDriverReset,                PPSMC_MSG_GfxDriverReset,                   SMU_MSG_RAS_PRI | SMU_MSG_HI_PRI),<br>
         MSG_MAP(DramLogSetDramAddrHigh,              PPSMC_MSG_DramLogSetDramAddrHigh,           0),<br>
         MSG_MAP(DramLogSetDramAddrLow,               PPSMC_MSG_DramLogSetDramAddrLow,            0),<br>
         MSG_MAP(DramLogSetDramSize,                  PPSMC_MSG_DramLogSetDramSize,               0),<br>
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c<br>
index 9cc294f4708b..c22b3f646355 100644<br>
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c<br>
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c<br>
@@ -145,7 +145,7 @@ static const struct cmn2asic_msg_mapping smu_v13_0_6_message_map[SMU_MSG_MAX_COU<br>
         MSG_MAP(GetDpmFreqByIndex,                   PPSMC_MSG_GetDpmFreqByIndex,                1),<br>
         MSG_MAP(SetPptLimit,                         PPSMC_MSG_SetPptLimit,                      0),<br>
         MSG_MAP(GetPptLimit,                         PPSMC_MSG_GetPptLimit,                      1),<br>
-       MSG_MAP(GfxDeviceDriverReset,                PPSMC_MSG_GfxDriverReset,                   SMU_MSG_RAS_PRI),<br>
+       MSG_MAP(GfxDeviceDriverReset,                PPSMC_MSG_GfxDriverReset,                   SMU_MSG_RAS_PRI | SMU_MSG_HI_PRI),<br>
         MSG_MAP(DramLogSetDramAddrHigh,              PPSMC_MSG_DramLogSetDramAddrHigh,           0),<br>
         MSG_MAP(DramLogSetDramAddrLow,               PPSMC_MSG_DramLogSetDramAddrLow,            0),<br>
         MSG_MAP(DramLogSetDramSize,                  PPSMC_MSG_DramLogSetDramSize,               0),<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 59f9abd0f7b8..f1f5cd8c2cd9 100644<br>
--- a/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c<br>
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c<br>
@@ -256,11 +256,12 @@ static int __smu_cmn_ras_filter_msg(struct smu_context *smu,<br>
 {<br>
         struct amdgpu_device *adev = smu->adev;<br>
         uint32_t flags, resp;<br>
-       bool fed_status;<br>
+       bool fed_status, pri;<br>
 <br>
         flags = __smu_cmn_get_msg_flags(smu, msg);<br>
         *poll = true;<br>
 <br>
+       pri = !!(flags & SMU_MSG_HI_PRI);<br>
         /* When there is RAS fatal error, FW won't process non-RAS priority<br>
          * messages. Don't allow any messages other than RAS priority messages.<br>
          */<br>
@@ -272,15 +273,18 @@ static int __smu_cmn_ras_filter_msg(struct smu_context *smu,<br>
                                 smu_get_message_name(smu, msg));<br>
                         return -EACCES;<br>
                 }<br>
+       }<br>
 <br>
+       if (pri || fed_status) {<br>
                 /* FW will ignore non-priority messages when a RAS fatal error<br>
-                * is detected. Hence it is possible that a previous message<br>
-                * wouldn't have got response. Allow to continue without polling<br>
-                * for response status for priority messages.<br>
+                * or reset condition is detected. Hence it is possible that a<br>
+                * previous message wouldn't have got response. Allow to<br>
+                * continue without polling for response status for priority<br>
+                * messages.<br>
                  */<br>
                 resp = RREG32(smu->resp_reg);<br>
                 dev_dbg(adev->dev,<br>
-                       "Sending RAS priority message %s response status: %x",<br>
+                       "Sending priority message %s response status: %x",<br>
                         smu_get_message_name(smu, msg), resp);<br>
                 if (resp == 0)<br>
                         *poll = false;<br>
-- <br>
2.49.0<br>
<br>
</div>
</span></font></div>
</div>
</body>
</html>