drm/amdgpu: add support for new smc firmware on polaris
authorAlex Deucher <alexander.deucher@amd.com>
Thu, 9 Feb 2017 03:35:51 +0000 (22:35 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 9 Feb 2017 15:54:45 +0000 (10:54 -0500)
Some polaris variants require new smc firmware.

Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
drivers/gpu/drm/amd/powerplay/smumgr/smumgr.c

index a5df1ef306d9dc65c6cbad7a256192a249566483..fa34dcae392fd8997b17ba3d22fb8044d7e24596 100644 (file)
@@ -850,16 +850,37 @@ static int amdgpu_cgs_get_firmware_info(struct cgs_device *cgs_device,
                                strcpy(fw_name, "amdgpu/fiji_smc.bin");
                                break;
                        case CHIP_POLARIS11:
-                               if (type == CGS_UCODE_ID_SMU)
-                                       strcpy(fw_name, "amdgpu/polaris11_smc.bin");
-                               else if (type == CGS_UCODE_ID_SMU_SK)
+                               if (type == CGS_UCODE_ID_SMU) {
+                                       if (((adev->pdev->device == 0x67ef) &&
+                                            ((adev->pdev->revision == 0xe0) ||
+                                             (adev->pdev->revision == 0xe2) ||
+                                             (adev->pdev->revision == 0xe5))) ||
+                                           ((adev->pdev->device == 0x67ff) &&
+                                            ((adev->pdev->revision == 0xcf) ||
+                                             (adev->pdev->revision == 0xef) ||
+                                             (adev->pdev->revision == 0xff))))
+                                               strcpy(fw_name, "amdgpu/polaris11_k_smc.bin");
+                                       else
+                                               strcpy(fw_name, "amdgpu/polaris11_smc.bin");
+                               } else if (type == CGS_UCODE_ID_SMU_SK) {
                                        strcpy(fw_name, "amdgpu/polaris11_smc_sk.bin");
+                               }
                                break;
                        case CHIP_POLARIS10:
-                               if (type == CGS_UCODE_ID_SMU)
-                                       strcpy(fw_name, "amdgpu/polaris10_smc.bin");
-                               else if (type == CGS_UCODE_ID_SMU_SK)
+                               if (type == CGS_UCODE_ID_SMU) {
+                                       if ((adev->pdev->device == 0x67df) &&
+                                           ((adev->pdev->revision == 0xe0) ||
+                                            (adev->pdev->revision == 0xe3) ||
+                                            (adev->pdev->revision == 0xe4) ||
+                                            (adev->pdev->revision == 0xe5) ||
+                                            (adev->pdev->revision == 0xe7) ||
+                                            (adev->pdev->revision == 0xef)))
+                                               strcpy(fw_name, "amdgpu/polaris10_k_smc.bin");
+                                       else
+                                               strcpy(fw_name, "amdgpu/polaris10_smc.bin");
+                               } else if (type == CGS_UCODE_ID_SMU_SK) {
                                        strcpy(fw_name, "amdgpu/polaris10_smc_sk.bin");
+                               }
                                break;
                        case CHIP_POLARIS12:
                                strcpy(fw_name, "amdgpu/polaris12_smc.bin");
index 60c36928284cad7a4d5f59f38b29e0d3cad8e16d..c0956a4207a9a8d9e86692ffaeb631a9b4d797fd 100644 (file)
@@ -37,8 +37,10 @@ MODULE_FIRMWARE("amdgpu/tonga_k_smc.bin");
 MODULE_FIRMWARE("amdgpu/fiji_smc.bin");
 MODULE_FIRMWARE("amdgpu/polaris10_smc.bin");
 MODULE_FIRMWARE("amdgpu/polaris10_smc_sk.bin");
+MODULE_FIRMWARE("amdgpu/polaris10_k_smc.bin");
 MODULE_FIRMWARE("amdgpu/polaris11_smc.bin");
 MODULE_FIRMWARE("amdgpu/polaris11_smc_sk.bin");
+MODULE_FIRMWARE("amdgpu/polaris11_k_smc.bin");
 MODULE_FIRMWARE("amdgpu/polaris12_smc.bin");