Skip to content

Commit 1bec2f2

Browse files
Lijo Lazaralexdeucher
authored andcommitted
drm/amd/pm: Fetch SMUv13.0.12 xgmi max speed/width
On SMU v13.0.12 SOCs, fetch the max values of xgmi speed/width from firmware. Signed-off-by: Lijo Lazar <lijo.lazar@amd.com> Reviewed-by: Asad Kamal <asad.kamal@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent a29e067 commit 1bec2f2

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,31 @@ int smu_v13_0_12_get_max_metrics_size(void)
187187
return max(sizeof(StaticMetricsTable_t), sizeof(MetricsTable_t));
188188
}
189189

190+
static void smu_v13_0_12_init_xgmi_data(struct smu_context *smu,
191+
StaticMetricsTable_t *static_metrics)
192+
{
193+
struct smu_table_context *smu_table = &smu->smu_table;
194+
uint16_t max_speed;
195+
uint8_t max_width;
196+
int ret;
197+
198+
if (smu_table->tables[SMU_TABLE_SMU_METRICS].version >= 0x13) {
199+
max_width = (uint8_t)static_metrics->MaxXgmiWidth;
200+
max_speed = (uint16_t)static_metrics->MaxXgmiBitrate;
201+
ret = 0;
202+
} else {
203+
MetricsTable_t *metrics = (MetricsTable_t *)smu_table->metrics_table;
204+
205+
ret = smu_v13_0_6_get_metrics_table(smu, NULL, true);
206+
if (!ret) {
207+
max_width = (uint8_t)metrics->XgmiWidth;
208+
max_speed = (uint16_t)metrics->XgmiBitrate;
209+
}
210+
}
211+
if (!ret)
212+
amgpu_xgmi_set_max_speed_width(smu->adev, max_speed, max_width);
213+
}
214+
190215
int smu_v13_0_12_setup_driver_pptable(struct smu_context *smu)
191216
{
192217
struct smu_13_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;
@@ -249,6 +274,7 @@ int smu_v13_0_12_setup_driver_pptable(struct smu_context *smu)
249274
static_metrics->pldmVersion[0] != 0xFFFFFFFF)
250275
smu->adev->firmware.pldm_version =
251276
static_metrics->pldmVersion[0];
277+
smu_v13_0_12_init_xgmi_data(smu, static_metrics);
252278
pptable->Init = true;
253279
}
254280

drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -690,8 +690,8 @@ static int smu_v13_0_6_get_allowed_feature_mask(struct smu_context *smu,
690690
return 0;
691691
}
692692

693-
static int smu_v13_0_6_get_metrics_table(struct smu_context *smu,
694-
void *metrics_table, bool bypass_cache)
693+
int smu_v13_0_6_get_metrics_table(struct smu_context *smu, void *metrics_table,
694+
bool bypass_cache)
695695
{
696696
struct smu_table_context *smu_table = &smu->smu_table;
697697
uint32_t table_size = smu_table->tables[SMU_TABLE_SMU_METRICS].size;

drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ enum smu_v13_0_6_caps {
7474
extern void smu_v13_0_6_set_ppt_funcs(struct smu_context *smu);
7575
bool smu_v13_0_6_cap_supported(struct smu_context *smu, enum smu_v13_0_6_caps cap);
7676
int smu_v13_0_6_get_static_metrics_table(struct smu_context *smu);
77+
int smu_v13_0_6_get_metrics_table(struct smu_context *smu, void *metrics_table,
78+
bool bypass_cache);
7779

7880
bool smu_v13_0_12_is_dpm_running(struct smu_context *smu);
7981
int smu_v13_0_12_get_max_metrics_size(void);

0 commit comments

Comments
 (0)