diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2017-01-17 15:02:13 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-01-17 15:25:35 -0500 |
commit | 4e6e98b1e48c9474aed7ce03025ec319b941e26e (patch) | |
tree | 5d5ff459531bc2f03851563dd9e161b10c346497 | |
parent | ca581e45335c6aa45e5b27999bc13bdefb7e84d9 (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.c | 13 |
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"); | |||
114 | MODULE_FIRMWARE("radeon/hainan_rlc.bin"); | 114 | MODULE_FIRMWARE("radeon/hainan_rlc.bin"); |
115 | MODULE_FIRMWARE("radeon/hainan_smc.bin"); | 115 | MODULE_FIRMWARE("radeon/hainan_smc.bin"); |
116 | MODULE_FIRMWARE("radeon/hainan_k_smc.bin"); | 116 | MODULE_FIRMWARE("radeon/hainan_k_smc.bin"); |
117 | MODULE_FIRMWARE("radeon/banks_k_2_smc.bin"); | ||
117 | 118 | ||
118 | MODULE_FIRMWARE("radeon/si58_mc.bin"); | 119 | MODULE_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); |