Skip to content

Commit 8f5b79a

Browse files
Kenneth Fenggregkh
authored andcommitted
drm/amd/pm: disable pcie speed switching on Intel platform for smu v14.0.2/3
commit b0df0e7 upstream. 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 <kenneth.feng@amd.com> Reviewed-by: Lijo Lazar <lijo.lazar@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Cc: stable@vger.kernel.org # 6.11.x Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent c8a6a98 commit 8f5b79a

1 file changed

Lines changed: 23 additions & 3 deletions

File tree

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
@@ -1477,15 +1477,35 @@ static int smu_v14_0_2_update_pcie_parameters(struct smu_context *smu,
14771477
struct smu_14_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;
14781478
struct smu_14_0_pcie_table *pcie_table =
14791479
&dpm_context->dpm_tables.pcie_table;
1480+
int num_of_levels = pcie_table->num_of_link_levels;
14801481
uint32_t smu_pcie_arg;
14811482
int ret, i;
14821483

1483-
for (i = 0; i < pcie_table->num_of_link_levels; i++) {
1484-
if (pcie_table->pcie_gen[i] > pcie_gen_cap)
1484+
if (!num_of_levels)
1485+
return 0;
1486+
1487+
if (!(smu->adev->pm.pp_feature & PP_PCIE_DPM_MASK)) {
1488+
if (pcie_table->pcie_gen[num_of_levels - 1] < pcie_gen_cap)
1489+
pcie_gen_cap = pcie_table->pcie_gen[num_of_levels - 1];
1490+
1491+
if (pcie_table->pcie_lane[num_of_levels - 1] < pcie_width_cap)
1492+
pcie_width_cap = pcie_table->pcie_lane[num_of_levels - 1];
1493+
1494+
/* Force all levels to use the same settings */
1495+
for (i = 0; i < num_of_levels; i++) {
14851496
pcie_table->pcie_gen[i] = pcie_gen_cap;
1486-
if (pcie_table->pcie_lane[i] > pcie_width_cap)
14871497
pcie_table->pcie_lane[i] = pcie_width_cap;
1498+
}
1499+
} else {
1500+
for (i = 0; i < num_of_levels; i++) {
1501+
if (pcie_table->pcie_gen[i] > pcie_gen_cap)
1502+
pcie_table->pcie_gen[i] = pcie_gen_cap;
1503+
if (pcie_table->pcie_lane[i] > pcie_width_cap)
1504+
pcie_table->pcie_lane[i] = pcie_width_cap;
1505+
}
1506+
}
14881507

1508+
for (i = 0; i < num_of_levels; i++) {
14891509
smu_pcie_arg = i << 16;
14901510
smu_pcie_arg |= pcie_table->pcie_gen[i] << 8;
14911511
smu_pcie_arg |= pcie_table->pcie_lane[i];

0 commit comments

Comments
 (0)