@@ -783,6 +783,8 @@ static int vega20_init_smc_table(struct pp_hwmgr *hwmgr)
783
783
static int vega20_override_pcie_parameters (struct pp_hwmgr * hwmgr )
784
784
{
785
785
struct amdgpu_device * adev = (struct amdgpu_device * )(hwmgr -> adev );
786
+ struct vega20_hwmgr * data =
787
+ (struct vega20_hwmgr * )(hwmgr -> backend );
786
788
uint32_t pcie_gen = 0 , pcie_width = 0 , smu_pcie_arg ;
787
789
int ret ;
788
790
@@ -819,6 +821,10 @@ static int vega20_override_pcie_parameters(struct pp_hwmgr *hwmgr)
819
821
"[OverridePcieParameters] Attempt to override pcie params failed!" ,
820
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
828
return 0 ;
823
829
}
824
830
@@ -3099,7 +3105,7 @@ static int vega20_print_clock_levels(struct pp_hwmgr *hwmgr,
3099
3105
& (data -> dpm_table .fclk_table );
3100
3106
int i , now , size = 0 ;
3101
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
3110
switch (type ) {
3105
3111
case PP_SCLK :
@@ -3187,28 +3193,36 @@ static int vega20_print_clock_levels(struct pp_hwmgr *hwmgr,
3187
3193
break ;
3188
3194
3189
3195
case PP_PCIE :
3190
- gen_speed = (RREG32_PCIE (smnPCIE_LC_SPEED_CNTL ) &
3196
+ current_gen_speed = (RREG32_PCIE (smnPCIE_LC_SPEED_CNTL ) &
3191
3197
PSWUSP0_PCIE_LC_SPEED_CNTL__LC_CURRENT_DATA_RATE_MASK )
3192
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
3200
PCIE_LC_LINK_WIDTH_CNTL__LC_LINK_WIDTH_RD_MASK )
3195
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
3210
size += sprintf (buf + size , "%d: %s %s %dMhz %s\n" , i ,
3198
- (pptable -> PcieGenSpeed [ i ] == 0 ) ? "2.5GT/s," :
3199
- (pptable -> PcieGenSpeed [ i ] == 1 ) ? "5.0GT/s," :
3200
- (pptable -> PcieGenSpeed [ i ] == 2 ) ? "8.0GT/s," :
3201
- (pptable -> PcieGenSpeed [ i ] == 3 ) ? "16.0GT/s," : "" ,
3202
- (pptable -> PcieLaneCount [ i ] == 1 ) ? "x1" :
3203
- (pptable -> PcieLaneCount [ i ] == 2 ) ? "x2" :
3204
- (pptable -> PcieLaneCount [ i ] == 3 ) ? "x4" :
3205
- (pptable -> PcieLaneCount [ i ] == 4 ) ? "x8" :
3206
- (pptable -> PcieLaneCount [ i ] == 5 ) ? "x12" :
3207
- (pptable -> PcieLaneCount [ i ] == 6 ) ? "x16" : "" ,
3211
+ (gen_speed == 0 ) ? "2.5GT/s," :
3212
+ (gen_speed == 1 ) ? "5.0GT/s," :
3213
+ (gen_speed == 2 ) ? "8.0GT/s," :
3214
+ (gen_speed == 3 ) ? "16.0GT/s," : "" ,
3215
+ (lane_width == 1 ) ? "x1" :
3216
+ (lane_width == 2 ) ? "x2" :
3217
+ (lane_width == 3 ) ? "x4" :
3218
+ (lane_width == 4 ) ? "x8" :
3219
+ (lane_width == 5 ) ? "x12" :
3220
+ (lane_width == 6 ) ? "x16" : "" ,
3208
3221
pptable -> LclkFreq [i ],
3209
- (gen_speed == pptable -> PcieGenSpeed [ i ] ) &&
3210
- (lane_width == pptable -> PcieLaneCount [ i ] ) ?
3222
+ (current_gen_speed == gen_speed ) &&
3223
+ (current_lane_width == lane_width ) ?
3211
3224
"*" : "" );
3225
+ }
3212
3226
break ;
3213
3227
3214
3228
case OD_SCLK :
0 commit comments