aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/radeon/si.c59
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
42MODULE_FIRMWARE("radeon/TAHITI_pfp.bin"); 43MODULE_FIRMWARE("radeon/TAHITI_pfp.bin");
43MODULE_FIRMWARE("radeon/TAHITI_me.bin"); 44MODULE_FIRMWARE("radeon/TAHITI_me.bin");
@@ -54,6 +55,11 @@ MODULE_FIRMWARE("radeon/VERDE_me.bin");
54MODULE_FIRMWARE("radeon/VERDE_ce.bin"); 55MODULE_FIRMWARE("radeon/VERDE_ce.bin");
55MODULE_FIRMWARE("radeon/VERDE_mc.bin"); 56MODULE_FIRMWARE("radeon/VERDE_mc.bin");
56MODULE_FIRMWARE("radeon/VERDE_rlc.bin"); 57MODULE_FIRMWARE("radeon/VERDE_rlc.bin");
58MODULE_FIRMWARE("radeon/OLAND_pfp.bin");
59MODULE_FIRMWARE("radeon/OLAND_me.bin");
60MODULE_FIRMWARE("radeon/OLAND_ce.bin");
61MODULE_FIRMWARE("radeon/OLAND_mc.bin");
62MODULE_FIRMWARE("radeon/OLAND_rlc.bin");
57 63
58extern int r600_ih_ring_alloc(struct radeon_device *rdev); 64extern int r600_ih_ring_alloc(struct radeon_device *rdev);
59extern void r600_ih_ring_fini(struct radeon_device *rdev); 65extern 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
211static 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 */
206static int si_mc_load_microcode(struct radeon_device *rdev) 251static 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