]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amd/pm: revise the pcie dpm parameters
authorKenneth Feng <kenneth.feng@amd.com>
Mon, 23 Jun 2025 09:02:51 +0000 (17:02 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 24 Jun 2025 14:05:40 +0000 (10:05 -0400)
revise the pcie dpm parameters

Signed-off-by: Kenneth Feng <kenneth.feng@amd.com>
Reviewed-by: Yang Wang <kevinyang.wang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c
drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c

index d7d5ec247624dca8bdb0f24afe064c74da646a72..aac202d0c30e5649dacf6207fccfe095f4990120 100644 (file)
@@ -2456,8 +2456,12 @@ static int navi10_update_pcie_parameters(struct smu_context *smu,
        for (i = 0; i < NUM_LINK_LEVELS; i++) {
                if (pptable->PcieGenSpeed[i] > pcie_gen_cap ||
                        pptable->PcieLaneCount[i] > pcie_width_cap) {
-                       dpm_context->dpm_tables.pcie_table.pcie_gen[i] = pcie_gen_cap;
-                       dpm_context->dpm_tables.pcie_table.pcie_lane[i] = pcie_width_cap;
+                       dpm_context->dpm_tables.pcie_table.pcie_gen[i] =
+                                                                       pptable->PcieGenSpeed[i] > pcie_gen_cap ?
+                                                                       pcie_gen_cap : pptable->PcieGenSpeed[i];
+                       dpm_context->dpm_tables.pcie_table.pcie_lane[i] =
+                                                                       pptable->PcieLaneCount[i] > pcie_width_cap ?
+                                                                       pcie_width_cap : pptable->PcieLaneCount[i];
                        smu_pcie_arg = i << 16;
                        smu_pcie_arg |= pcie_gen_cap << 8;
                        smu_pcie_arg |= pcie_width_cap;
index 257082c03865bb52db6e0458e38a78f90dfda367..e084ed99ec0e913934674ccb55f0345b003a74b1 100644 (file)
@@ -3193,8 +3193,10 @@ static int smu_v13_0_0_update_pcie_parameters(struct smu_context *smu,
                for (i = 0; i < num_of_levels; i++) {
                        if (pcie_table->pcie_gen[i] > pcie_gen_cap ||
                                pcie_table->pcie_lane[i] > pcie_width_cap) {
-                               pcie_table->pcie_gen[i] = pcie_gen_cap;
-                               pcie_table->pcie_lane[i] = pcie_width_cap;
+                               pcie_table->pcie_gen[i] = pcie_table->pcie_gen[i] > pcie_gen_cap ?
+                                                                                 pcie_gen_cap : pcie_table->pcie_gen[i];
+                               pcie_table->pcie_lane[i] = pcie_table->pcie_lane[i] > pcie_width_cap ?
+                                                                                  pcie_width_cap : pcie_table->pcie_lane[i];
                                smu_pcie_arg = i << 16;
                                smu_pcie_arg |= pcie_table->pcie_gen[i] << 8;
                                smu_pcie_arg |= pcie_table->pcie_lane[i];
index e96364856e74cf89353c933e5d82f12f57ba1da2..c96fa5e49ed655af4452da9eca27e6eb390b3a32 100644 (file)
@@ -2781,8 +2781,10 @@ static int smu_v13_0_7_update_pcie_parameters(struct smu_context *smu,
                for (i = 0; i < num_of_levels; i++) {
                        if (pcie_table->pcie_gen[i] > pcie_gen_cap ||
                                pcie_table->pcie_lane[i] > pcie_width_cap) {
-                               pcie_table->pcie_gen[i] = pcie_gen_cap;
-                               pcie_table->pcie_lane[i] = pcie_width_cap;
+                               pcie_table->pcie_gen[i] = pcie_table->pcie_gen[i] > pcie_gen_cap ?
+                                                                                 pcie_gen_cap : pcie_table->pcie_gen[i];
+                               pcie_table->pcie_lane[i] = pcie_table->pcie_lane[i] > pcie_width_cap ?
+                                                                                  pcie_width_cap : pcie_table->pcie_lane[i];
                                smu_pcie_arg = i << 16;
                                smu_pcie_arg |= pcie_table->pcie_gen[i] << 8;
                                smu_pcie_arg |= pcie_table->pcie_lane[i];
index 581a4e59130a11ee6edef6bba0d3dad44c183206..3aea32baea3da244d0d47088f726b969cd0f2b97 100644 (file)
@@ -1518,8 +1518,10 @@ static int smu_v14_0_2_update_pcie_parameters(struct smu_context *smu,
                for (i = 0; i < num_of_levels; i++) {
                        if (pcie_table->pcie_gen[i] > pcie_gen_cap ||
                                pcie_table->pcie_lane[i] > pcie_width_cap) {
-                               pcie_table->pcie_gen[i] = pcie_gen_cap;
-                               pcie_table->pcie_lane[i] = pcie_width_cap;
+                               pcie_table->pcie_gen[i] = pcie_table->pcie_gen[i] > pcie_gen_cap ?
+                                                                                 pcie_gen_cap : pcie_table->pcie_gen[i];
+                               pcie_table->pcie_lane[i] = pcie_table->pcie_lane[i] > pcie_width_cap ?
+                                                                                  pcie_width_cap : pcie_table->pcie_lane[i];
                                smu_pcie_arg = i << 16;
                                smu_pcie_arg |= pcie_table->pcie_gen[i] << 8;
                                smu_pcie_arg |= pcie_table->pcie_lane[i];