Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/amd/pm: Unify version check in SMUv11

Use common helper function for firmware version check and logging in
SMUv11

Signed-off-by: Lijo Lazar <lijo.lazar@amd.com>
Reviewed-by: Asad Kamal <asad.kamal@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Lijo Lazar and committed by
Alex Deucher
6b0a6116 c842980a

+52 -94
-14
drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h
··· 25 25 26 26 #include "amdgpu_smu.h" 27 27 28 - #define SMU11_DRIVER_IF_VERSION_INV 0xFFFFFFFF 29 - #define SMU11_DRIVER_IF_VERSION_ARCT 0x17 30 - #define SMU11_DRIVER_IF_VERSION_NV10 0x37 31 - #define SMU11_DRIVER_IF_VERSION_NV12 0x38 32 - #define SMU11_DRIVER_IF_VERSION_NV14 0x38 33 - #define SMU11_DRIVER_IF_VERSION_Sienna_Cichlid 0x40 34 - #define SMU11_DRIVER_IF_VERSION_Navy_Flounder 0xE 35 - #define SMU11_DRIVER_IF_VERSION_VANGOGH 0x03 36 - #define SMU11_DRIVER_IF_VERSION_Dimgrey_Cavefish 0xF 37 - #define SMU11_DRIVER_IF_VERSION_Beige_Goby 0xD 38 - #define SMU11_DRIVER_IF_VERSION_Cyan_Skillfish 0x8 39 - 40 28 /* MP Apertures */ 41 29 #define MP0_Public 0x03800000 42 30 #define MP0_SRAM 0x03900000 ··· 135 147 int smu_v11_0_setup_pptable(struct smu_context *smu); 136 148 137 149 int smu_v11_0_get_vbios_bootup_values(struct smu_context *smu); 138 - 139 - int smu_v11_0_check_fw_version(struct smu_context *smu); 140 150 141 151 int smu_v11_0_set_driver_table_location(struct smu_context *smu); 142 152
+4 -1
drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c
··· 65 65 #define SMU_FEATURES_HIGH_MASK 0xFFFFFFFF00000000 66 66 #define SMU_FEATURES_HIGH_SHIFT 32 67 67 68 + #define SMU11_DRIVER_IF_VERSION_ARCT 0x17 69 + 68 70 static const struct smu_feature_bits arcturus_dpm_features = { 69 71 .bits = { SMU_FEATURE_BIT_INIT(FEATURE_DPM_PREFETCHER_BIT), 70 72 SMU_FEATURE_BIT_INIT(FEATURE_DPM_GFXCLK_BIT), ··· 1907 1905 /* pptable related */ 1908 1906 .setup_pptable = arcturus_setup_pptable, 1909 1907 .get_vbios_bootup_values = smu_v11_0_get_vbios_bootup_values, 1910 - .check_fw_version = smu_v11_0_check_fw_version, 1908 + .check_fw_version = smu_cmn_check_fw_version, 1911 1909 .write_pptable = smu_cmn_write_pptable, 1912 1910 .set_driver_table_location = smu_v11_0_set_driver_table_location, 1913 1911 .set_tool_table_location = smu_v11_0_set_tool_table_location, ··· 1960 1958 smu->table_map = arcturus_table_map; 1961 1959 smu->pwr_src_map = arcturus_pwr_src_map; 1962 1960 smu->workload_map = arcturus_workload_map; 1961 + smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_ARCT; 1963 1962 smu_v11_0_init_msg_ctl(smu, arcturus_message_map); 1964 1963 }
+2 -1
drivers/gpu/drm/amd/pm/swsmu/smu11/cyan_skillfish_ppt.c
··· 582 582 static const struct pptable_funcs cyan_skillfish_ppt_funcs = { 583 583 584 584 .check_fw_status = smu_v11_0_check_fw_status, 585 - .check_fw_version = smu_v11_0_check_fw_version, 585 + .check_fw_version = smu_cmn_check_fw_version, 586 586 .init_power = smu_v11_0_init_power, 587 587 .fini_power = smu_v11_0_fini_power, 588 588 .init_smc_tables = cyan_skillfish_init_smc_tables, ··· 605 605 smu->ppt_funcs = &cyan_skillfish_ppt_funcs; 606 606 smu->table_map = cyan_skillfish_table_map; 607 607 smu->is_apu = true; 608 + smu->smc_driver_if_version = MP1_DRIVER_IF_VERSION; 608 609 smu_v11_0_init_msg_ctl(smu, cyan_skillfish_message_map); 609 610 }
+20 -1
drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c
··· 73 73 74 74 #define SMU_11_0_GFX_BUSY_THRESHOLD 15 75 75 76 + #define SMU11_DRIVER_IF_VERSION_NV10 0x37 77 + #define SMU11_DRIVER_IF_VERSION_NV12 0x38 78 + #define SMU11_DRIVER_IF_VERSION_NV14 0x38 79 + 76 80 static struct cmn2asic_msg_mapping navi10_message_map[SMU_MSG_MAX_COUNT] = { 77 81 MSG_MAP(TestMessage, PPSMC_MSG_TestMessage, 1), 78 82 MSG_MAP(GetSmuVersion, PPSMC_MSG_GetSmuVersion, 1), ··· 3312 3308 .check_fw_status = smu_v11_0_check_fw_status, 3313 3309 .setup_pptable = navi10_setup_pptable, 3314 3310 .get_vbios_bootup_values = smu_v11_0_get_vbios_bootup_values, 3315 - .check_fw_version = smu_v11_0_check_fw_version, 3311 + .check_fw_version = smu_cmn_check_fw_version, 3316 3312 .write_pptable = smu_cmn_write_pptable, 3317 3313 .set_driver_table_location = smu_v11_0_set_driver_table_location, 3318 3314 .set_tool_table_location = smu_v11_0_set_tool_table_location, ··· 3365 3361 3366 3362 void navi10_set_ppt_funcs(struct smu_context *smu) 3367 3363 { 3364 + struct amdgpu_device *adev = smu->adev; 3365 + 3368 3366 smu->ppt_funcs = &navi10_ppt_funcs; 3369 3367 smu->clock_map = navi10_clk_map; 3370 3368 smu->feature_map = navi10_feature_mask_map; 3371 3369 smu->table_map = navi10_table_map; 3372 3370 smu->pwr_src_map = navi10_pwr_src_map; 3373 3371 smu->workload_map = navi10_workload_map; 3372 + 3373 + switch (amdgpu_ip_version(adev, MP1_HWIP, 0)) { 3374 + case IP_VERSION(11, 0, 0): 3375 + smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV10; 3376 + break; 3377 + case IP_VERSION(11, 0, 9): 3378 + smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV12; 3379 + break; 3380 + case IP_VERSION(11, 0, 5): 3381 + smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV14; 3382 + break; 3383 + } 3384 + 3374 3385 smu_v11_0_init_msg_ctl(smu, navi10_message_map); 3375 3386 }
+24 -1
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
··· 3119 3119 .check_fw_status = smu_v11_0_check_fw_status, 3120 3120 .setup_pptable = sienna_cichlid_setup_pptable, 3121 3121 .get_vbios_bootup_values = smu_v11_0_get_vbios_bootup_values, 3122 - .check_fw_version = smu_v11_0_check_fw_version, 3122 + .check_fw_version = smu_cmn_check_fw_version, 3123 3123 .write_pptable = smu_cmn_write_pptable, 3124 3124 .set_driver_table_location = smu_v11_0_set_driver_table_location, 3125 3125 .set_tool_table_location = smu_v11_0_set_tool_table_location, ··· 3176 3176 .mode2_reset = sienna_cichlid_mode2_reset, 3177 3177 }; 3178 3178 3179 + #define SMU11_DRIVER_IF_VERSION_Sienna_Cichlid 0x40 3180 + #define SMU11_DRIVER_IF_VERSION_Navy_Flounder 0xE 3181 + #define SMU11_DRIVER_IF_VERSION_Dimgrey_Cavefish 0xF 3182 + #define SMU11_DRIVER_IF_VERSION_Beige_Goby 0xD 3183 + 3179 3184 void sienna_cichlid_set_ppt_funcs(struct smu_context *smu) 3180 3185 { 3186 + struct amdgpu_device *adev = smu->adev; 3187 + 3181 3188 smu->ppt_funcs = &sienna_cichlid_ppt_funcs; 3182 3189 smu->clock_map = sienna_cichlid_clk_map; 3183 3190 smu->feature_map = sienna_cichlid_feature_mask_map; 3184 3191 smu->table_map = sienna_cichlid_table_map; 3185 3192 smu->pwr_src_map = sienna_cichlid_pwr_src_map; 3186 3193 smu->workload_map = sienna_cichlid_workload_map; 3194 + 3195 + switch (amdgpu_ip_version(adev, MP1_HWIP, 0)) { 3196 + case IP_VERSION(11, 0, 7): 3197 + smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_Sienna_Cichlid; 3198 + break; 3199 + case IP_VERSION(11, 0, 11): 3200 + smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_Navy_Flounder; 3201 + break; 3202 + case IP_VERSION(11, 0, 12): 3203 + smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_Dimgrey_Cavefish; 3204 + break; 3205 + case IP_VERSION(11, 0, 13): 3206 + smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_Beige_Goby; 3207 + break; 3208 + } 3209 + 3187 3210 smu_v11_0_init_msg_ctl(smu, sienna_cichlid_message_map); 3188 3211 }
-75
drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
··· 192 192 return -EIO; 193 193 } 194 194 195 - int smu_v11_0_check_fw_version(struct smu_context *smu) 196 - { 197 - struct amdgpu_device *adev = smu->adev; 198 - uint32_t if_version = 0xff, smu_version = 0xff; 199 - uint8_t smu_program, smu_major, smu_minor, smu_debug; 200 - int ret = 0; 201 - 202 - ret = smu_cmn_get_smc_version(smu, &if_version, &smu_version); 203 - if (ret) 204 - return ret; 205 - 206 - smu_program = (smu_version >> 24) & 0xff; 207 - smu_major = (smu_version >> 16) & 0xff; 208 - smu_minor = (smu_version >> 8) & 0xff; 209 - smu_debug = (smu_version >> 0) & 0xff; 210 - if (smu->is_apu) 211 - adev->pm.fw_version = smu_version; 212 - 213 - switch (amdgpu_ip_version(adev, MP1_HWIP, 0)) { 214 - case IP_VERSION(11, 0, 0): 215 - smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV10; 216 - break; 217 - case IP_VERSION(11, 0, 9): 218 - smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV12; 219 - break; 220 - case IP_VERSION(11, 0, 5): 221 - smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV14; 222 - break; 223 - case IP_VERSION(11, 0, 7): 224 - smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_Sienna_Cichlid; 225 - break; 226 - case IP_VERSION(11, 0, 11): 227 - smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_Navy_Flounder; 228 - break; 229 - case IP_VERSION(11, 5, 0): 230 - case IP_VERSION(11, 5, 2): 231 - smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_VANGOGH; 232 - break; 233 - case IP_VERSION(11, 0, 12): 234 - smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_Dimgrey_Cavefish; 235 - break; 236 - case IP_VERSION(11, 0, 13): 237 - smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_Beige_Goby; 238 - break; 239 - case IP_VERSION(11, 0, 8): 240 - smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_Cyan_Skillfish; 241 - break; 242 - case IP_VERSION(11, 0, 2): 243 - smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_ARCT; 244 - break; 245 - default: 246 - dev_err(smu->adev->dev, "smu unsupported IP version: 0x%x.\n", 247 - amdgpu_ip_version(adev, MP1_HWIP, 0)); 248 - smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_INV; 249 - break; 250 - } 251 - 252 - /* 253 - * 1. if_version mismatch is not critical as our fw is designed 254 - * to be backward compatible. 255 - * 2. New fw usually brings some optimizations. But that's visible 256 - * only on the paired driver. 257 - * Considering above, we just leave user a verbal message instead 258 - * of halt driver loading. 259 - */ 260 - if (if_version != smu->smc_driver_if_version) { 261 - dev_info(smu->adev->dev, "smu driver if version = 0x%08x, smu fw if version = 0x%08x, " 262 - "smu fw program = %d, version = 0x%08x (%d.%d.%d)\n", 263 - smu->smc_driver_if_version, if_version, 264 - smu_program, smu_version, smu_major, smu_minor, smu_debug); 265 - } 266 - 267 - return ret; 268 - } 269 - 270 195 static int smu_v11_0_set_pptable_v2_0(struct smu_context *smu, void **table, uint32_t *size) 271 196 { 272 197 struct amdgpu_device *adev = smu->adev;
+2 -1
drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
··· 2511 2511 static const struct pptable_funcs vangogh_ppt_funcs = { 2512 2512 2513 2513 .check_fw_status = smu_v11_0_check_fw_status, 2514 - .check_fw_version = smu_v11_0_check_fw_version, 2514 + .check_fw_version = smu_cmn_check_fw_version, 2515 2515 .init_smc_tables = vangogh_init_smc_tables, 2516 2516 .fini_smc_tables = smu_v11_0_fini_smc_tables, 2517 2517 .init_power = smu_v11_0_init_power, ··· 2561 2561 smu->table_map = vangogh_table_map; 2562 2562 smu->workload_map = vangogh_workload_map; 2563 2563 smu->is_apu = true; 2564 + smu->smc_driver_if_version = SMU13_DRIVER_IF_VERSION; 2564 2565 smu_v11_0_init_msg_ctl(smu, vangogh_message_map); 2565 2566 }