diff options
| author | Evan Quan <evan.quan@amd.com> | 2019-02-21 02:41:21 -0500 |
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2019-02-27 22:20:30 -0500 |
| commit | 084a56c723b34e493684e5f2ac9692c452564dce (patch) | |
| tree | e6ccef35f2cde20c4f598b2306ec6bd52322f3b5 | |
| parent | 65543b28893a81c7a7987d5b25387ff03243dd81 (diff) | |
drm/amd/powerplay: show the right override pcie parameters
Instead of the hard-coded ones from VBIOS.
Signed-off-by: Evan Quan <evan.quan@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
| -rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c | 46 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h | 4 |
2 files changed, 34 insertions, 16 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c index 90ce402a1b2c..9aa7bec1b5fe 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c | |||
| @@ -783,6 +783,8 @@ static int vega20_init_smc_table(struct pp_hwmgr *hwmgr) | |||
| 783 | static int vega20_override_pcie_parameters(struct pp_hwmgr *hwmgr) | 783 | static int vega20_override_pcie_parameters(struct pp_hwmgr *hwmgr) |
| 784 | { | 784 | { |
| 785 | struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev); | 785 | struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev); |
| 786 | struct vega20_hwmgr *data = | ||
| 787 | (struct vega20_hwmgr *)(hwmgr->backend); | ||
| 786 | uint32_t pcie_gen = 0, pcie_width = 0, smu_pcie_arg; | 788 | uint32_t pcie_gen = 0, pcie_width = 0, smu_pcie_arg; |
| 787 | int ret; | 789 | int ret; |
| 788 | 790 | ||
| @@ -819,6 +821,10 @@ static int vega20_override_pcie_parameters(struct pp_hwmgr *hwmgr) | |||
| 819 | "[OverridePcieParameters] Attempt to override pcie params failed!", | 821 | "[OverridePcieParameters] Attempt to override pcie params failed!", |
| 820 | return ret); | 822 | return ret); |
| 821 | 823 | ||
| 824 | data->pcie_parameters_override = 1; | ||
| 825 | data->pcie_gen_level1 = pcie_gen; | ||
| 826 | data->pcie_width_level1 = pcie_width; | ||
| 827 | |||
| 822 | return 0; | 828 | return 0; |
| 823 | } | 829 | } |
| 824 | 830 | ||
| @@ -3099,7 +3105,7 @@ static int vega20_print_clock_levels(struct pp_hwmgr *hwmgr, | |||
| 3099 | &(data->dpm_table.fclk_table); | 3105 | &(data->dpm_table.fclk_table); |
| 3100 | int i, now, size = 0; | 3106 | int i, now, size = 0; |
| 3101 | int ret = 0; | 3107 | int ret = 0; |
| 3102 | uint32_t gen_speed, lane_width; | 3108 | uint32_t gen_speed, lane_width, current_gen_speed, current_lane_width; |
| 3103 | 3109 | ||
| 3104 | switch (type) { | 3110 | switch (type) { |
| 3105 | case PP_SCLK: | 3111 | case PP_SCLK: |
| @@ -3187,28 +3193,36 @@ static int vega20_print_clock_levels(struct pp_hwmgr *hwmgr, | |||
| 3187 | break; | 3193 | break; |
| 3188 | 3194 | ||
| 3189 | case PP_PCIE: | 3195 | case PP_PCIE: |
| 3190 | gen_speed = (RREG32_PCIE(smnPCIE_LC_SPEED_CNTL) & | 3196 | current_gen_speed = (RREG32_PCIE(smnPCIE_LC_SPEED_CNTL) & |
| 3191 | PSWUSP0_PCIE_LC_SPEED_CNTL__LC_CURRENT_DATA_RATE_MASK) | 3197 | PSWUSP0_PCIE_LC_SPEED_CNTL__LC_CURRENT_DATA_RATE_MASK) |
| 3192 | >> PSWUSP0_PCIE_LC_SPEED_CNTL__LC_CURRENT_DATA_RATE__SHIFT; | 3198 | >> PSWUSP0_PCIE_LC_SPEED_CNTL__LC_CURRENT_DATA_RATE__SHIFT; |
| 3193 | lane_width = (RREG32_PCIE(smnPCIE_LC_LINK_WIDTH_CNTL) & | 3199 | current_lane_width = (RREG32_PCIE(smnPCIE_LC_LINK_WIDTH_CNTL) & |
| 3194 | PCIE_LC_LINK_WIDTH_CNTL__LC_LINK_WIDTH_RD_MASK) | 3200 | PCIE_LC_LINK_WIDTH_CNTL__LC_LINK_WIDTH_RD_MASK) |
| 3195 | >> PCIE_LC_LINK_WIDTH_CNTL__LC_LINK_WIDTH_RD__SHIFT; | 3201 | >> PCIE_LC_LINK_WIDTH_CNTL__LC_LINK_WIDTH_RD__SHIFT; |
| 3196 | for (i = 0; i < NUM_LINK_LEVELS; i++) | 3202 | for (i = 0; i < NUM_LINK_LEVELS; i++) { |
| 3203 | if (i == 1 && data->pcie_parameters_override) { | ||
| 3204 | gen_speed = data->pcie_gen_level1; | ||
| 3205 | lane_width = data->pcie_width_level1; | ||
| 3206 | } else { | ||
| 3207 | gen_speed = pptable->PcieGenSpeed[i]; | ||
| 3208 | lane_width = pptable->PcieLaneCount[i]; | ||
| 3209 | } | ||
| 3197 | size += sprintf(buf + size, "%d: %s %s %dMhz %s\n", i, | 3210 | size += sprintf(buf + size, "%d: %s %s %dMhz %s\n", i, |
| 3198 | (pptable->PcieGenSpeed[i] == 0) ? "2.5GT/s," : | 3211 | (gen_speed == 0) ? "2.5GT/s," : |
| 3199 | (pptable->PcieGenSpeed[i] == 1) ? "5.0GT/s," : | 3212 | (gen_speed == 1) ? "5.0GT/s," : |
| 3200 | (pptable->PcieGenSpeed[i] == 2) ? "8.0GT/s," : | 3213 | (gen_speed == 2) ? "8.0GT/s," : |
| 3201 | (pptable->PcieGenSpeed[i] == 3) ? "16.0GT/s," : "", | 3214 | (gen_speed == 3) ? "16.0GT/s," : "", |
| 3202 | (pptable->PcieLaneCount[i] == 1) ? "x1" : | 3215 | (lane_width == 1) ? "x1" : |
| 3203 | (pptable->PcieLaneCount[i] == 2) ? "x2" : | 3216 | (lane_width == 2) ? "x2" : |
| 3204 | (pptable->PcieLaneCount[i] == 3) ? "x4" : | 3217 | (lane_width == 3) ? "x4" : |
| 3205 | (pptable->PcieLaneCount[i] == 4) ? "x8" : | 3218 | (lane_width == 4) ? "x8" : |
| 3206 | (pptable->PcieLaneCount[i] == 5) ? "x12" : | 3219 | (lane_width == 5) ? "x12" : |
| 3207 | (pptable->PcieLaneCount[i] == 6) ? "x16" : "", | 3220 | (lane_width == 6) ? "x16" : "", |
| 3208 | pptable->LclkFreq[i], | 3221 | pptable->LclkFreq[i], |
| 3209 | (gen_speed == pptable->PcieGenSpeed[i]) && | 3222 | (current_gen_speed == gen_speed) && |
| 3210 | (lane_width == pptable->PcieLaneCount[i]) ? | 3223 | (current_lane_width == lane_width) ? |
| 3211 | "*" : ""); | 3224 | "*" : ""); |
| 3225 | } | ||
| 3212 | break; | 3226 | break; |
| 3213 | 3227 | ||
| 3214 | case OD_SCLK: | 3228 | case OD_SCLK: |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h index ccaf415400a7..a5bc758ae097 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h | |||
| @@ -526,6 +526,10 @@ struct vega20_hwmgr { | |||
| 526 | 526 | ||
| 527 | unsigned long metrics_time; | 527 | unsigned long metrics_time; |
| 528 | SmuMetrics_t metrics_table; | 528 | SmuMetrics_t metrics_table; |
| 529 | |||
| 530 | bool pcie_parameters_override; | ||
| 531 | uint32_t pcie_gen_level1; | ||
| 532 | uint32_t pcie_width_level1; | ||
| 529 | }; | 533 | }; |
| 530 | 534 | ||
| 531 | #define VEGA20_DPM2_NEAR_TDP_DEC 10 | 535 | #define VEGA20_DPM2_NEAR_TDP_DEC 10 |
