Add support to report PLDM firmware version and board voltage on SMU
v13.0.12 SOCs.

Signed-off-by: Lijo Lazar <[email protected]>
---
v2:  Use caps to fill in values instead of table version (Asad)

 .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c    | 12 ++++++++++++
 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c |  5 +++++
 2 files changed, 17 insertions(+)

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
index e0d356f93ab0..99663165363e 100644
--- 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
@@ -189,6 +189,7 @@ int smu_v13_0_12_get_max_metrics_size(void)
 
 int smu_v13_0_12_setup_driver_pptable(struct smu_context *smu)
 {
+       struct smu_13_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;
        struct smu_table_context *smu_table = &smu->smu_table;
        StaticMetricsTable_t *static_metrics = (StaticMetricsTable_t 
*)smu_table->metrics_table;
        struct PPTable_t *pptable =
@@ -237,6 +238,17 @@ int smu_v13_0_12_setup_driver_pptable(struct smu_context 
*smu)
                if (ret)
                        return ret;
 
+               if (smu_v13_0_6_cap_supported(smu, SMU_CAP(BOARD_VOLTAGE))) {
+                       if (!static_metrics->InputTelemetryVoltageInmV) {
+                               dev_warn(smu->adev->dev, "Invalid board voltage 
%d\n",
+                                               
static_metrics->InputTelemetryVoltageInmV);
+                       }
+                       dpm_context->board_volt = 
static_metrics->InputTelemetryVoltageInmV;
+               }
+               if (smu_v13_0_6_cap_supported(smu, SMU_CAP(PLDM_VERSION)) &&
+                       static_metrics->pldmVersion[0] != 0xFFFFFFFF)
+                       smu->adev->firmware.pldm_version =
+                               static_metrics->pldmVersion[0];
                pptable->Init = true;
        }
 
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
index 36f210698bea..44daea9a07fa 100644
--- 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
@@ -345,6 +345,11 @@ static void smu_v13_0_12_init_caps(struct smu_context *smu)
 
        if (fw_ver >= 0x00562500)
                smu_v13_0_6_cap_set(smu, SMU_CAP(HST_LIMIT_METRICS));
+
+       if (fw_ver >= 0x04560100) {
+               smu_v13_0_6_cap_set(smu, SMU_CAP(BOARD_VOLTAGE));
+               smu_v13_0_6_cap_set(smu, SMU_CAP(PLDM_VERSION));
+       }
 }
 
 static void smu_v13_0_6_init_caps(struct smu_context *smu)
-- 
2.25.1

Reply via email to