Skip to content

Commit b0df0e7

Browse files
Kenneth Fengalexdeucher
authored andcommitted
drm/amd/pm: disable pcie speed switching on Intel platform for smu v14.0.2/3
disable pcie speed switching on Intel platform for smu v14.0.2/3 based on Intel's requirement. v2: align the setting with smu v13. Signed-off-by: Kenneth Feng <[email protected]> Reviewed-by: Lijo Lazar <[email protected]> Signed-off-by: Alex Deucher <[email protected]> Cc: [email protected] # 6.11.x
1 parent cdc6705 commit b0df0e7

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1465,15 +1465,35 @@ static int smu_v14_0_2_update_pcie_parameters(struct smu_context *smu,
14651465
struct smu_14_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;
14661466
struct smu_14_0_pcie_table *pcie_table =
14671467
&dpm_context->dpm_tables.pcie_table;
1468+
int num_of_levels = pcie_table->num_of_link_levels;
14681469
uint32_t smu_pcie_arg;
14691470
int ret, i;
14701471

1471-
for (i = 0; i < pcie_table->num_of_link_levels; i++) {
1472-
if (pcie_table->pcie_gen[i] > pcie_gen_cap)
1472+
if (!num_of_levels)
1473+
return 0;
1474+
1475+
if (!(smu->adev->pm.pp_feature & PP_PCIE_DPM_MASK)) {
1476+
if (pcie_table->pcie_gen[num_of_levels - 1] < pcie_gen_cap)
1477+
pcie_gen_cap = pcie_table->pcie_gen[num_of_levels - 1];
1478+
1479+
if (pcie_table->pcie_lane[num_of_levels - 1] < pcie_width_cap)
1480+
pcie_width_cap = pcie_table->pcie_lane[num_of_levels - 1];
1481+
1482+
/* Force all levels to use the same settings */
1483+
for (i = 0; i < num_of_levels; i++) {
14731484
pcie_table->pcie_gen[i] = pcie_gen_cap;
1474-
if (pcie_table->pcie_lane[i] > pcie_width_cap)
14751485
pcie_table->pcie_lane[i] = pcie_width_cap;
1486+
}
1487+
} else {
1488+
for (i = 0; i < num_of_levels; i++) {
1489+
if (pcie_table->pcie_gen[i] > pcie_gen_cap)
1490+
pcie_table->pcie_gen[i] = pcie_gen_cap;
1491+
if (pcie_table->pcie_lane[i] > pcie_width_cap)
1492+
pcie_table->pcie_lane[i] = pcie_width_cap;
1493+
}
1494+
}
14761495

1496+
for (i = 0; i < num_of_levels; i++) {
14771497
smu_pcie_arg = i << 16;
14781498
smu_pcie_arg |= pcie_table->pcie_gen[i] << 8;
14791499
smu_pcie_arg |= pcie_table->pcie_lane[i];

0 commit comments

Comments
 (0)