aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2017-01-17 15:02:13 -0500
committerAlex Deucher <alexander.deucher@amd.com>2017-01-17 15:25:35 -0500
commit4e6e98b1e48c9474aed7ce03025ec319b941e26e (patch)
tree5d5ff459531bc2f03851563dd9e161b10c346497
parentca581e45335c6aa45e5b27999bc13bdefb7e84d9 (diff)
drm/radeon: add support for new hainan variants
New hainan parts require updated smc firmware. Cc: Sonny Jiang <sonny.jiang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/radeon/si.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
index 32d55220a2d3..414776811e71 100644
--- a/drivers/gpu/drm/radeon/si.c
+++ b/drivers/gpu/drm/radeon/si.c
@@ -114,6 +114,7 @@ MODULE_FIRMWARE("radeon/hainan_mc.bin");
114MODULE_FIRMWARE("radeon/hainan_rlc.bin"); 114MODULE_FIRMWARE("radeon/hainan_rlc.bin");
115MODULE_FIRMWARE("radeon/hainan_smc.bin"); 115MODULE_FIRMWARE("radeon/hainan_smc.bin");
116MODULE_FIRMWARE("radeon/hainan_k_smc.bin"); 116MODULE_FIRMWARE("radeon/hainan_k_smc.bin");
117MODULE_FIRMWARE("radeon/banks_k_2_smc.bin");
117 118
118MODULE_FIRMWARE("radeon/si58_mc.bin"); 119MODULE_FIRMWARE("radeon/si58_mc.bin");
119 120
@@ -1653,6 +1654,7 @@ static int si_init_microcode(struct radeon_device *rdev)
1653 int new_fw = 0; 1654 int new_fw = 0;
1654 bool new_smc = false; 1655 bool new_smc = false;
1655 bool si58_fw = false; 1656 bool si58_fw = false;
1657 bool banks2_fw = false;
1656 1658
1657 DRM_DEBUG("\n"); 1659 DRM_DEBUG("\n");
1658 1660
@@ -1730,10 +1732,11 @@ static int si_init_microcode(struct radeon_device *rdev)
1730 ((rdev->pdev->device == 0x6660) || 1732 ((rdev->pdev->device == 0x6660) ||
1731 (rdev->pdev->device == 0x6663) || 1733 (rdev->pdev->device == 0x6663) ||
1732 (rdev->pdev->device == 0x6665) || 1734 (rdev->pdev->device == 0x6665) ||
1733 (rdev->pdev->device == 0x6667))) || 1735 (rdev->pdev->device == 0x6667))))
1734 ((rdev->pdev->revision == 0xc3) &&
1735 (rdev->pdev->device == 0x6665)))
1736 new_smc = true; 1736 new_smc = true;
1737 else if ((rdev->pdev->revision == 0xc3) &&
1738 (rdev->pdev->device == 0x6665))
1739 banks2_fw = true;
1737 new_chip_name = "hainan"; 1740 new_chip_name = "hainan";
1738 pfp_req_size = SI_PFP_UCODE_SIZE * 4; 1741 pfp_req_size = SI_PFP_UCODE_SIZE * 4;
1739 me_req_size = SI_PM4_UCODE_SIZE * 4; 1742 me_req_size = SI_PM4_UCODE_SIZE * 4;
@@ -1886,7 +1889,9 @@ static int si_init_microcode(struct radeon_device *rdev)
1886 } 1889 }
1887 } 1890 }
1888 1891
1889 if (new_smc) 1892 if (banks2_fw)
1893 snprintf(fw_name, sizeof(fw_name), "radeon/banks_k_2_smc.bin");
1894 else if (new_smc)
1890 snprintf(fw_name, sizeof(fw_name), "radeon/%s_k_smc.bin", new_chip_name); 1895 snprintf(fw_name, sizeof(fw_name), "radeon/%s_k_smc.bin", new_chip_name);
1891 else 1896 else
1892 snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", new_chip_name); 1897 snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", new_chip_name);