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

drm/amdgpu: Update SMC/DPM for Stoney

Stoney is SMC 8.x.

Signed-off-by: Samuel Li <samuel.li@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Samuel Li and committed by
Alex Deucher
7a753c3f aade2f04

+65 -16
+17 -4
drivers/gpu/drm/amd/amdgpu/cz_dpm.c
··· 1262 1262 1263 1263 static int cz_dpm_enable(struct amdgpu_device *adev) 1264 1264 { 1265 + const char *chip_name; 1265 1266 int ret = 0; 1266 1267 1267 1268 /* renable will hang up SMU, so check first */ ··· 1271 1270 1272 1271 cz_program_voting_clients(adev); 1273 1272 1273 + switch (adev->asic_type) { 1274 + case CHIP_CARRIZO: 1275 + chip_name = "carrizo"; 1276 + break; 1277 + case CHIP_STONEY: 1278 + chip_name = "stoney"; 1279 + break; 1280 + default: 1281 + BUG(); 1282 + } 1283 + 1284 + 1274 1285 ret = cz_start_dpm(adev); 1275 1286 if (ret) { 1276 - DRM_ERROR("Carrizo DPM enable failed\n"); 1287 + DRM_ERROR("%s DPM enable failed\n", chip_name); 1277 1288 return -EINVAL; 1278 1289 } 1279 1290 1280 1291 ret = cz_program_bootup_state(adev); 1281 1292 if (ret) { 1282 - DRM_ERROR("Carrizo bootup state program failed\n"); 1293 + DRM_ERROR("%s bootup state program failed\n", chip_name); 1283 1294 return -EINVAL; 1284 1295 } 1285 1296 1286 1297 ret = cz_enable_didt(adev, true); 1287 1298 if (ret) { 1288 - DRM_ERROR("Carrizo enable di/dt failed\n"); 1299 + DRM_ERROR("%s enable di/dt failed\n", chip_name); 1289 1300 return -EINVAL; 1290 1301 } 1291 1302 ··· 1364 1351 1365 1352 ret = cz_enable_didt(adev, false); 1366 1353 if (ret) { 1367 - DRM_ERROR("Carrizo disable di/dt failed\n"); 1354 + DRM_ERROR("disable di/dt failed\n"); 1368 1355 return -EINVAL; 1369 1356 } 1370 1357
+48 -12
drivers/gpu/drm/amd/amdgpu/cz_smc.c
··· 312 312 UCODE_ID_CP_MEC_JT1_MASK | 313 313 UCODE_ID_CP_MEC_JT2_MASK; 314 314 315 + if (adev->asic_type == CHIP_STONEY) 316 + fw_to_check &= ~(UCODE_ID_SDMA1_MASK | UCODE_ID_CP_MEC_JT2_MASK); 317 + 315 318 cz_smu_request_load_fw(adev); 316 319 ret = cz_smu_check_fw_load_finish(adev, fw_to_check); 317 320 if (ret) 318 321 return ret; 319 322 320 323 /* manually load MEC firmware for CZ */ 321 - if (adev->asic_type == CHIP_CARRIZO) { 324 + if (adev->asic_type == CHIP_CARRIZO || adev->asic_type == CHIP_STONEY) { 322 325 ret = cz_load_mec_firmware(adev); 323 326 if (ret) { 324 327 dev_err(adev->dev, "(%d) Mec Firmware load failed\n", ret); ··· 338 335 AMDGPU_CPMEC1_UCODE_LOADED | 339 336 AMDGPU_CPMEC2_UCODE_LOADED | 340 337 AMDGPU_CPRLC_UCODE_LOADED; 338 + 339 + if (adev->asic_type == CHIP_STONEY) 340 + adev->smu.fw_flags &= ~(AMDGPU_SDMA1_UCODE_LOADED | AMDGPU_CPMEC2_UCODE_LOADED); 341 341 342 342 return ret; 343 343 } ··· 607 601 CZ_SCRATCH_ENTRY_UCODE_ID_CP_ME, false); 608 602 cz_smu_populate_single_ucode_load_task(adev, 609 603 CZ_SCRATCH_ENTRY_UCODE_ID_CP_MEC_JT1, false); 610 - cz_smu_populate_single_ucode_load_task(adev, 604 + if (adev->asic_type == CHIP_STONEY) { 605 + cz_smu_populate_single_ucode_load_task(adev, 606 + CZ_SCRATCH_ENTRY_UCODE_ID_CP_MEC_JT1, false); 607 + } else { 608 + cz_smu_populate_single_ucode_load_task(adev, 611 609 CZ_SCRATCH_ENTRY_UCODE_ID_CP_MEC_JT2, false); 610 + } 612 611 cz_smu_populate_single_ucode_load_task(adev, 613 612 CZ_SCRATCH_ENTRY_UCODE_ID_RLC_G, false); 614 613 } ··· 653 642 if (adev->firmware.smu_load) { 654 643 cz_smu_populate_single_ucode_load_task(adev, 655 644 CZ_SCRATCH_ENTRY_UCODE_ID_SDMA0, false); 656 - cz_smu_populate_single_ucode_load_task(adev, 645 + if (adev->asic_type == CHIP_STONEY) { 646 + cz_smu_populate_single_ucode_load_task(adev, 647 + CZ_SCRATCH_ENTRY_UCODE_ID_SDMA0, false); 648 + } else { 649 + cz_smu_populate_single_ucode_load_task(adev, 657 650 CZ_SCRATCH_ENTRY_UCODE_ID_SDMA1, false); 651 + } 658 652 cz_smu_populate_single_ucode_load_task(adev, 659 653 CZ_SCRATCH_ENTRY_UCODE_ID_CP_CE, false); 660 654 cz_smu_populate_single_ucode_load_task(adev, ··· 668 652 CZ_SCRATCH_ENTRY_UCODE_ID_CP_ME, false); 669 653 cz_smu_populate_single_ucode_load_task(adev, 670 654 CZ_SCRATCH_ENTRY_UCODE_ID_CP_MEC_JT1, false); 671 - cz_smu_populate_single_ucode_load_task(adev, 655 + if (adev->asic_type == CHIP_STONEY) { 656 + cz_smu_populate_single_ucode_load_task(adev, 657 + CZ_SCRATCH_ENTRY_UCODE_ID_CP_MEC_JT1, false); 658 + } else { 659 + cz_smu_populate_single_ucode_load_task(adev, 672 660 CZ_SCRATCH_ENTRY_UCODE_ID_CP_MEC_JT2, false); 661 + } 673 662 cz_smu_populate_single_ucode_load_task(adev, 674 663 CZ_SCRATCH_ENTRY_UCODE_ID_RLC_G, true); 675 664 } ··· 909 888 CZ_SCRATCH_ENTRY_UCODE_ID_SDMA0, 910 889 &priv->driver_buffer[priv->driver_buffer_length++])) 911 890 goto smu_init_failed; 912 - if (cz_smu_populate_single_firmware_entry(adev, 913 - CZ_SCRATCH_ENTRY_UCODE_ID_SDMA1, 914 - &priv->driver_buffer[priv->driver_buffer_length++])) 915 - goto smu_init_failed; 891 + 892 + if (adev->asic_type == CHIP_STONEY) { 893 + if (cz_smu_populate_single_firmware_entry(adev, 894 + CZ_SCRATCH_ENTRY_UCODE_ID_SDMA0, 895 + &priv->driver_buffer[priv->driver_buffer_length++])) 896 + goto smu_init_failed; 897 + } else { 898 + if (cz_smu_populate_single_firmware_entry(adev, 899 + CZ_SCRATCH_ENTRY_UCODE_ID_SDMA1, 900 + &priv->driver_buffer[priv->driver_buffer_length++])) 901 + goto smu_init_failed; 902 + } 916 903 if (cz_smu_populate_single_firmware_entry(adev, 917 904 CZ_SCRATCH_ENTRY_UCODE_ID_CP_CE, 918 905 &priv->driver_buffer[priv->driver_buffer_length++])) ··· 937 908 CZ_SCRATCH_ENTRY_UCODE_ID_CP_MEC_JT1, 938 909 &priv->driver_buffer[priv->driver_buffer_length++])) 939 910 goto smu_init_failed; 940 - if (cz_smu_populate_single_firmware_entry(adev, 941 - CZ_SCRATCH_ENTRY_UCODE_ID_CP_MEC_JT2, 942 - &priv->driver_buffer[priv->driver_buffer_length++])) 943 - goto smu_init_failed; 911 + if (adev->asic_type == CHIP_STONEY) { 912 + if (cz_smu_populate_single_firmware_entry(adev, 913 + CZ_SCRATCH_ENTRY_UCODE_ID_CP_MEC_JT1, 914 + &priv->driver_buffer[priv->driver_buffer_length++])) 915 + goto smu_init_failed; 916 + } else { 917 + if (cz_smu_populate_single_firmware_entry(adev, 918 + CZ_SCRATCH_ENTRY_UCODE_ID_CP_MEC_JT2, 919 + &priv->driver_buffer[priv->driver_buffer_length++])) 920 + goto smu_init_failed; 921 + } 944 922 if (cz_smu_populate_single_firmware_entry(adev, 945 923 CZ_SCRATCH_ENTRY_UCODE_ID_RLC_G, 946 924 &priv->driver_buffer[priv->driver_buffer_length++]))