]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amd/pm: Fill static metrics data
authorAsad Kamal <asad.kamal@amd.com>
Sat, 12 Apr 2025 09:30:09 +0000 (17:30 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 30 Apr 2025 22:09:54 +0000 (18:09 -0400)
Fill static metrics data for smu_v13_0_6

v2: Proceed with driver load just with warning even if board
voltage reads invalid value

Signed-off-by: Asad Kamal <asad.kamal@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c

index 21589c4583e6b38e971b975a12e34aaef7ad9484..9678d2593f8f70e4bb23d74c6ce3646fe7287c3e 100644 (file)
@@ -112,6 +112,7 @@ struct smu_13_0_dpm_context {
        uint32_t                    workload_policy_mask;
        uint32_t                    dcef_min_ds_clk;
        uint64_t                    caps;
+       uint32_t                    board_volt;
 };
 
 enum smu_13_0_power_state {
index b4bea0881ac989224ae12a2981543f9e62698940..41a9829215b85190c9e4543dc2c41db96485fe86 100644 (file)
@@ -739,6 +739,19 @@ static ssize_t smu_v13_0_6_get_pm_metrics(struct smu_context *smu,
        return pm_metrics->common_header.structure_size;
 }
 
+static void smu_v13_0_6_fill_static_metrics_table(struct smu_context *smu,
+                                                 StaticMetricsTable_t *static_metrics)
+{
+       struct smu_13_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;
+
+       if (!static_metrics->InputTelemetryVoltageInmV) {
+               dev_warn(smu->adev->dev, "Invalid board voltage %d\n",
+                               static_metrics->InputTelemetryVoltageInmV);
+       }
+
+       dpm_context->board_volt = static_metrics->InputTelemetryVoltageInmV;
+}
+
 int smu_v13_0_6_get_static_metrics_table(struct smu_context *smu)
 {
        struct smu_table_context *smu_table = &smu->smu_table;
@@ -762,6 +775,7 @@ int smu_v13_0_6_get_static_metrics_table(struct smu_context *smu)
 static int smu_v13_0_6_setup_driver_pptable(struct smu_context *smu)
 {
        struct smu_table_context *smu_table = &smu->smu_table;
+       StaticMetricsTable_t *static_metrics = (StaticMetricsTable_t *)smu_table->metrics_table;
        MetricsTableV0_t *metrics_v0 = (MetricsTableV0_t *)smu_table->metrics_table;
        MetricsTableV1_t *metrics_v1 = (MetricsTableV1_t *)smu_table->metrics_table;
        MetricsTableV2_t *metrics_v2 = (MetricsTableV2_t *)smu_table->metrics_table;
@@ -830,6 +844,7 @@ static int smu_v13_0_6_setup_driver_pptable(struct smu_context *smu)
                        ret = smu_v13_0_6_get_static_metrics_table(smu);
                        if (ret)
                                return ret;
+                       smu_v13_0_6_fill_static_metrics_table(smu, static_metrics);
                }
        }