The smu 13.0.7 backend does not register get_unique_id, leaving
adev->unique_id at zero and KFD topology without the stable GPU
identifier consumed by HIP.

The failure is observed at:
    auto ierr = hipDeviceGetUuid(&uuid, 0);

Fixes: 113cc31dde66 ("drm/amd/pm: add SMU_13_0_7 ppt_funcs for SMU_13_0_7")
Signed-off-by: Kevin Wang <[email protected]>
---
 .../drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c  | 20 +++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c 
b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c
index f4543da0f72d..7d795f2c582f 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c
@@ -2943,6 +2943,25 @@ static int smu_v13_0_7_mode1_reset(struct smu_context 
*smu)
    return ret;
 }
 
+static void smu_v13_0_7_get_unique_id(struct smu_context *smu)
+{
+       SmuMetricsExternal_t metrics_external;
+       SmuMetrics_t *metrics = &metrics_external.SmuMetrics;
+       struct amdgpu_device *adev = smu->adev;
+       u32 upper32 = 0, lower32 = 0;
+       int ret;
+
+       ret = smu_cmn_get_metrics_table(smu, &metrics_external, false);
+       if (ret)
+               goto out;
+
+       upper32 = metrics->PublicSerialNumberUpper;
+       lower32 = metrics->PublicSerialNumberLower;
+
+out:
+       adev->unique_id = ((u64)upper32 << 32) | lower32;
+}
+
 static void smu_v13_0_7_init_msg_ctl(struct smu_context *smu)
 {
        struct amdgpu_device *adev = smu->adev;
@@ -3026,6 +3045,7 @@ static const struct pptable_funcs smu_v13_0_7_ppt_funcs = 
{
        .enable_uclk_shadow = smu_v13_0_enable_uclk_shadow,
        .set_wbrf_exclusion_ranges = smu_v13_0_set_wbrf_exclusion_ranges,
        .interrupt_work = smu_v13_0_interrupt_work,
+       .get_unique_id = smu_v13_0_7_get_unique_id,
 };
 
 void smu_v13_0_7_set_ppt_funcs(struct smu_context *smu)
-- 
2.55.0

Reply via email to