diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2016-12-20 16:40:48 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-01-12 17:36:15 -0500 |
commit | f1d877be65d36806c581c32b4687d4acefa55960 (patch) | |
tree | da1ef5713607b29e7591bc3f90f03ee0eb420b90 | |
parent | ef736d394e85b1bf1fd65ba5e5257b85f6c82325 (diff) |
drm/amdgpu/si: load special ucode for certain MC configs
Special MC ucode is required for these memory configurations.
Acked-by: Edward O'Callaghan <funfunctor@folklore1984.net>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c index 45a573e63d4a..920960089f27 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | |||
@@ -44,6 +44,7 @@ MODULE_FIRMWARE("radeon/tahiti_mc.bin"); | |||
44 | MODULE_FIRMWARE("radeon/pitcairn_mc.bin"); | 44 | MODULE_FIRMWARE("radeon/pitcairn_mc.bin"); |
45 | MODULE_FIRMWARE("radeon/verde_mc.bin"); | 45 | MODULE_FIRMWARE("radeon/verde_mc.bin"); |
46 | MODULE_FIRMWARE("radeon/oland_mc.bin"); | 46 | MODULE_FIRMWARE("radeon/oland_mc.bin"); |
47 | MODULE_FIRMWARE("radeon/si58_mc.bin"); | ||
47 | 48 | ||
48 | #define MC_SEQ_MISC0__MT__MASK 0xf0000000 | 49 | #define MC_SEQ_MISC0__MT__MASK 0xf0000000 |
49 | #define MC_SEQ_MISC0__MT__GDDR1 0x10000000 | 50 | #define MC_SEQ_MISC0__MT__GDDR1 0x10000000 |
@@ -113,6 +114,7 @@ static int gmc_v6_0_init_microcode(struct amdgpu_device *adev) | |||
113 | const char *chip_name; | 114 | const char *chip_name; |
114 | char fw_name[30]; | 115 | char fw_name[30]; |
115 | int err; | 116 | int err; |
117 | bool is_58_fw = false; | ||
116 | 118 | ||
117 | DRM_DEBUG("\n"); | 119 | DRM_DEBUG("\n"); |
118 | 120 | ||
@@ -135,7 +137,14 @@ static int gmc_v6_0_init_microcode(struct amdgpu_device *adev) | |||
135 | default: BUG(); | 137 | default: BUG(); |
136 | } | 138 | } |
137 | 139 | ||
138 | snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name); | 140 | /* this memory configuration requires special firmware */ |
141 | if (((RREG32(mmMC_SEQ_MISC0) & 0xff000000) >> 24) == 0x58) | ||
142 | is_58_fw = true; | ||
143 | |||
144 | if (is_58_fw) | ||
145 | snprintf(fw_name, sizeof(fw_name), "radeon/si58_mc.bin"); | ||
146 | else | ||
147 | snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name); | ||
139 | err = request_firmware(&adev->mc.fw, fw_name, adev->dev); | 148 | err = request_firmware(&adev->mc.fw, fw_name, adev->dev); |
140 | if (err) | 149 | if (err) |
141 | goto out; | 150 | goto out; |