diff options
-rw-r--r-- | drivers/gpu/drm/radeon/si.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c index ec62110f22f5..719f03e061db 100644 --- a/drivers/gpu/drm/radeon/si.c +++ b/drivers/gpu/drm/radeon/si.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #define SI_CE_UCODE_SIZE 2144 | 38 | #define SI_CE_UCODE_SIZE 2144 |
39 | #define SI_RLC_UCODE_SIZE 2048 | 39 | #define SI_RLC_UCODE_SIZE 2048 |
40 | #define SI_MC_UCODE_SIZE 7769 | 40 | #define SI_MC_UCODE_SIZE 7769 |
41 | #define OLAND_MC_UCODE_SIZE 7863 | ||
41 | 42 | ||
42 | MODULE_FIRMWARE("radeon/TAHITI_pfp.bin"); | 43 | MODULE_FIRMWARE("radeon/TAHITI_pfp.bin"); |
43 | MODULE_FIRMWARE("radeon/TAHITI_me.bin"); | 44 | MODULE_FIRMWARE("radeon/TAHITI_me.bin"); |
@@ -54,6 +55,11 @@ MODULE_FIRMWARE("radeon/VERDE_me.bin"); | |||
54 | MODULE_FIRMWARE("radeon/VERDE_ce.bin"); | 55 | MODULE_FIRMWARE("radeon/VERDE_ce.bin"); |
55 | MODULE_FIRMWARE("radeon/VERDE_mc.bin"); | 56 | MODULE_FIRMWARE("radeon/VERDE_mc.bin"); |
56 | MODULE_FIRMWARE("radeon/VERDE_rlc.bin"); | 57 | MODULE_FIRMWARE("radeon/VERDE_rlc.bin"); |
58 | MODULE_FIRMWARE("radeon/OLAND_pfp.bin"); | ||
59 | MODULE_FIRMWARE("radeon/OLAND_me.bin"); | ||
60 | MODULE_FIRMWARE("radeon/OLAND_ce.bin"); | ||
61 | MODULE_FIRMWARE("radeon/OLAND_mc.bin"); | ||
62 | MODULE_FIRMWARE("radeon/OLAND_rlc.bin"); | ||
57 | 63 | ||
58 | extern int r600_ih_ring_alloc(struct radeon_device *rdev); | 64 | extern int r600_ih_ring_alloc(struct radeon_device *rdev); |
59 | extern void r600_ih_ring_fini(struct radeon_device *rdev); | 65 | extern void r600_ih_ring_fini(struct radeon_device *rdev); |
@@ -202,6 +208,45 @@ static const u32 verde_io_mc_regs[TAHITI_IO_MC_REGS_SIZE][2] = { | |||
202 | {0x0000009f, 0x00a37400} | 208 | {0x0000009f, 0x00a37400} |
203 | }; | 209 | }; |
204 | 210 | ||
211 | static const u32 oland_io_mc_regs[TAHITI_IO_MC_REGS_SIZE][2] = { | ||
212 | {0x0000006f, 0x03044000}, | ||
213 | {0x00000070, 0x0480c018}, | ||
214 | {0x00000071, 0x00000040}, | ||
215 | {0x00000072, 0x01000000}, | ||
216 | {0x00000074, 0x000000ff}, | ||
217 | {0x00000075, 0x00143400}, | ||
218 | {0x00000076, 0x08ec0800}, | ||
219 | {0x00000077, 0x040000cc}, | ||
220 | {0x00000079, 0x00000000}, | ||
221 | {0x0000007a, 0x21000409}, | ||
222 | {0x0000007c, 0x00000000}, | ||
223 | {0x0000007d, 0xe8000000}, | ||
224 | {0x0000007e, 0x044408a8}, | ||
225 | {0x0000007f, 0x00000003}, | ||
226 | {0x00000080, 0x00000000}, | ||
227 | {0x00000081, 0x01000000}, | ||
228 | {0x00000082, 0x02000000}, | ||
229 | {0x00000083, 0x00000000}, | ||
230 | {0x00000084, 0xe3f3e4f4}, | ||
231 | {0x00000085, 0x00052024}, | ||
232 | {0x00000087, 0x00000000}, | ||
233 | {0x00000088, 0x66036603}, | ||
234 | {0x00000089, 0x01000000}, | ||
235 | {0x0000008b, 0x1c0a0000}, | ||
236 | {0x0000008c, 0xff010000}, | ||
237 | {0x0000008e, 0xffffefff}, | ||
238 | {0x0000008f, 0xfff3efff}, | ||
239 | {0x00000090, 0xfff3efbf}, | ||
240 | {0x00000094, 0x00101101}, | ||
241 | {0x00000095, 0x00000fff}, | ||
242 | {0x00000096, 0x00116fff}, | ||
243 | {0x00000097, 0x60010000}, | ||
244 | {0x00000098, 0x10010000}, | ||
245 | {0x00000099, 0x00006000}, | ||
246 | {0x0000009a, 0x00001000}, | ||
247 | {0x0000009f, 0x00a17730} | ||
248 | }; | ||
249 | |||
205 | /* ucode loading */ | 250 | /* ucode loading */ |
206 | static int si_mc_load_microcode(struct radeon_device *rdev) | 251 | static int si_mc_load_microcode(struct radeon_device *rdev) |
207 | { | 252 | { |
@@ -230,6 +275,11 @@ static int si_mc_load_microcode(struct radeon_device *rdev) | |||
230 | ucode_size = SI_MC_UCODE_SIZE; | 275 | ucode_size = SI_MC_UCODE_SIZE; |
231 | regs_size = TAHITI_IO_MC_REGS_SIZE; | 276 | regs_size = TAHITI_IO_MC_REGS_SIZE; |
232 | break; | 277 | break; |
278 | case CHIP_OLAND: | ||
279 | io_mc_regs = (u32 *)&oland_io_mc_regs; | ||
280 | ucode_size = OLAND_MC_UCODE_SIZE; | ||
281 | regs_size = TAHITI_IO_MC_REGS_SIZE; | ||
282 | break; | ||
233 | } | 283 | } |
234 | 284 | ||
235 | running = RREG32(MC_SEQ_SUP_CNTL) & RUN_MASK; | 285 | running = RREG32(MC_SEQ_SUP_CNTL) & RUN_MASK; |
@@ -324,6 +374,15 @@ static int si_init_microcode(struct radeon_device *rdev) | |||
324 | rlc_req_size = SI_RLC_UCODE_SIZE * 4; | 374 | rlc_req_size = SI_RLC_UCODE_SIZE * 4; |
325 | mc_req_size = SI_MC_UCODE_SIZE * 4; | 375 | mc_req_size = SI_MC_UCODE_SIZE * 4; |
326 | break; | 376 | break; |
377 | case CHIP_OLAND: | ||
378 | chip_name = "OLAND"; | ||
379 | rlc_chip_name = "OLAND"; | ||
380 | pfp_req_size = SI_PFP_UCODE_SIZE * 4; | ||
381 | me_req_size = SI_PM4_UCODE_SIZE * 4; | ||
382 | ce_req_size = SI_CE_UCODE_SIZE * 4; | ||
383 | rlc_req_size = SI_RLC_UCODE_SIZE * 4; | ||
384 | mc_req_size = OLAND_MC_UCODE_SIZE * 4; | ||
385 | break; | ||
327 | default: BUG(); | 386 | default: BUG(); |
328 | } | 387 | } |
329 | 388 | ||