diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 109 |
1 files changed, 108 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c index 17df5c265552..b9381fb36669 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | |||
@@ -87,6 +87,13 @@ MODULE_FIRMWARE("amdgpu/topaz_mec.bin"); | |||
87 | MODULE_FIRMWARE("amdgpu/topaz_mec2.bin"); | 87 | MODULE_FIRMWARE("amdgpu/topaz_mec2.bin"); |
88 | MODULE_FIRMWARE("amdgpu/topaz_rlc.bin"); | 88 | MODULE_FIRMWARE("amdgpu/topaz_rlc.bin"); |
89 | 89 | ||
90 | MODULE_FIRMWARE("amdgpu/fiji_ce.bin"); | ||
91 | MODULE_FIRMWARE("amdgpu/fiji_pfp.bin"); | ||
92 | MODULE_FIRMWARE("amdgpu/fiji_me.bin"); | ||
93 | MODULE_FIRMWARE("amdgpu/fiji_mec.bin"); | ||
94 | MODULE_FIRMWARE("amdgpu/fiji_mec2.bin"); | ||
95 | MODULE_FIRMWARE("amdgpu/fiji_rlc.bin"); | ||
96 | |||
90 | static const struct amdgpu_gds_reg_offset amdgpu_gds_reg_offset[] = | 97 | static const struct amdgpu_gds_reg_offset amdgpu_gds_reg_offset[] = |
91 | { | 98 | { |
92 | {mmGDS_VMID0_BASE, mmGDS_VMID0_SIZE, mmGDS_GWS_VMID0, mmGDS_OA_VMID0}, | 99 | {mmGDS_VMID0_BASE, mmGDS_VMID0_SIZE, mmGDS_GWS_VMID0, mmGDS_OA_VMID0}, |
@@ -217,6 +224,71 @@ static const u32 tonga_mgcg_cgcg_init[] = | |||
217 | mmCP_MEM_SLP_CNTL, 0x00000001, 0x00000001, | 224 | mmCP_MEM_SLP_CNTL, 0x00000001, 0x00000001, |
218 | }; | 225 | }; |
219 | 226 | ||
227 | static const u32 fiji_golden_common_all[] = | ||
228 | { | ||
229 | mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000, | ||
230 | mmPA_SC_RASTER_CONFIG, 0xffffffff, 0x3a00161a, | ||
231 | mmPA_SC_RASTER_CONFIG_1, 0xffffffff, 0x0000002e, | ||
232 | mmGB_ADDR_CONFIG, 0xffffffff, 0x12011003, | ||
233 | mmSPI_RESOURCE_RESERVE_CU_0, 0xffffffff, 0x00000800, | ||
234 | mmSPI_RESOURCE_RESERVE_CU_1, 0xffffffff, 0x00000800, | ||
235 | mmSPI_RESOURCE_RESERVE_EN_CU_0, 0xffffffff, 0x00007FBF, | ||
236 | mmSPI_RESOURCE_RESERVE_EN_CU_1, 0xffffffff, 0x00007FAF | ||
237 | }; | ||
238 | |||
239 | static const u32 golden_settings_fiji_a10[] = | ||
240 | { | ||
241 | mmCB_HW_CONTROL_3, 0x000001ff, 0x00000040, | ||
242 | mmDB_DEBUG2, 0xf00fffff, 0x00000400, | ||
243 | mmPA_SC_ENHANCE, 0xffffffff, 0x20000001, | ||
244 | mmPA_SC_FIFO_DEPTH_CNTL, 0x000003ff, 0x00000100, | ||
245 | mmPA_SC_LINE_STIPPLE_STATE, 0x0000ff0f, 0x00000000, | ||
246 | mmTA_CNTL_AUX, 0x000f000f, 0x000b0000, | ||
247 | mmTCC_CTRL, 0x00100000, 0xf30fff7f, | ||
248 | mmTCP_ADDR_CONFIG, 0x000003ff, 0x000000ff, | ||
249 | mmTCP_CHAN_STEER_HI, 0xffffffff, 0x7d6cf5e4, | ||
250 | mmTCP_CHAN_STEER_LO, 0xffffffff, 0x3928b1a0, | ||
251 | }; | ||
252 | |||
253 | static const u32 fiji_mgcg_cgcg_init[] = | ||
254 | { | ||
255 | mmRLC_CGTT_MGCG_OVERRIDE, 0xffffffff, 0xffffffc0, | ||
256 | mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000, | ||
257 | mmCB_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100, | ||
258 | mmCGTT_BCI_CLK_CTRL, 0xffffffff, 0x00000100, | ||
259 | mmCGTT_CP_CLK_CTRL, 0xffffffff, 0x00000100, | ||
260 | mmCGTT_CPC_CLK_CTRL, 0xffffffff, 0x00000100, | ||
261 | mmCGTT_CPF_CLK_CTRL, 0xffffffff, 0x40000100, | ||
262 | mmCGTT_GDS_CLK_CTRL, 0xffffffff, 0x00000100, | ||
263 | mmCGTT_IA_CLK_CTRL, 0xffffffff, 0x06000100, | ||
264 | mmCGTT_PA_CLK_CTRL, 0xffffffff, 0x00000100, | ||
265 | mmCGTT_WD_CLK_CTRL, 0xffffffff, 0x06000100, | ||
266 | mmCGTT_PC_CLK_CTRL, 0xffffffff, 0x00000100, | ||
267 | mmCGTT_RLC_CLK_CTRL, 0xffffffff, 0x00000100, | ||
268 | mmCGTT_SC_CLK_CTRL, 0xffffffff, 0x00000100, | ||
269 | mmCGTT_SPI_CLK_CTRL, 0xffffffff, 0x00000100, | ||
270 | mmCGTT_SQ_CLK_CTRL, 0xffffffff, 0x00000100, | ||
271 | mmCGTT_SQG_CLK_CTRL, 0xffffffff, 0x00000100, | ||
272 | mmCGTT_SX_CLK_CTRL0, 0xffffffff, 0x00000100, | ||
273 | mmCGTT_SX_CLK_CTRL1, 0xffffffff, 0x00000100, | ||
274 | mmCGTT_SX_CLK_CTRL2, 0xffffffff, 0x00000100, | ||
275 | mmCGTT_SX_CLK_CTRL3, 0xffffffff, 0x00000100, | ||
276 | mmCGTT_SX_CLK_CTRL4, 0xffffffff, 0x00000100, | ||
277 | mmCGTT_TCI_CLK_CTRL, 0xffffffff, 0x00000100, | ||
278 | mmCGTT_TCP_CLK_CTRL, 0xffffffff, 0x00000100, | ||
279 | mmCGTT_VGT_CLK_CTRL, 0xffffffff, 0x06000100, | ||
280 | mmDB_CGTT_CLK_CTRL_0, 0xffffffff, 0x00000100, | ||
281 | mmTA_CGTT_CTRL, 0xffffffff, 0x00000100, | ||
282 | mmTCA_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100, | ||
283 | mmTCC_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100, | ||
284 | mmTD_CGTT_CTRL, 0xffffffff, 0x00000100, | ||
285 | mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000, | ||
286 | mmCGTS_SM_CTRL_REG, 0xffffffff, 0x96e00200, | ||
287 | mmCP_RB_WPTR_POLL_CNTL, 0xffffffff, 0x00900100, | ||
288 | mmRLC_CGCG_CGLS_CTRL, 0xffffffff, 0x0020003c, | ||
289 | mmCP_MEM_SLP_CNTL, 0x00000001, 0x00000001, | ||
290 | }; | ||
291 | |||
220 | static const u32 golden_settings_iceland_a11[] = | 292 | static const u32 golden_settings_iceland_a11[] = |
221 | { | 293 | { |
222 | mmCB_HW_CONTROL_3, 0x00000040, 0x00000040, | 294 | mmCB_HW_CONTROL_3, 0x00000040, 0x00000040, |
@@ -439,6 +511,18 @@ static void gfx_v8_0_init_golden_registers(struct amdgpu_device *adev) | |||
439 | iceland_golden_common_all, | 511 | iceland_golden_common_all, |
440 | (const u32)ARRAY_SIZE(iceland_golden_common_all)); | 512 | (const u32)ARRAY_SIZE(iceland_golden_common_all)); |
441 | break; | 513 | break; |
514 | case CHIP_FIJI: | ||
515 | amdgpu_program_register_sequence(adev, | ||
516 | fiji_mgcg_cgcg_init, | ||
517 | (const u32)ARRAY_SIZE(fiji_mgcg_cgcg_init)); | ||
518 | amdgpu_program_register_sequence(adev, | ||
519 | golden_settings_fiji_a10, | ||
520 | (const u32)ARRAY_SIZE(golden_settings_fiji_a10)); | ||
521 | amdgpu_program_register_sequence(adev, | ||
522 | fiji_golden_common_all, | ||
523 | (const u32)ARRAY_SIZE(fiji_golden_common_all)); | ||
524 | break; | ||
525 | |||
442 | case CHIP_TONGA: | 526 | case CHIP_TONGA: |
443 | amdgpu_program_register_sequence(adev, | 527 | amdgpu_program_register_sequence(adev, |
444 | tonga_mgcg_cgcg_init, | 528 | tonga_mgcg_cgcg_init, |
@@ -601,6 +685,9 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev) | |||
601 | case CHIP_CARRIZO: | 685 | case CHIP_CARRIZO: |
602 | chip_name = "carrizo"; | 686 | chip_name = "carrizo"; |
603 | break; | 687 | break; |
688 | case CHIP_FIJI: | ||
689 | chip_name = "fiji"; | ||
690 | break; | ||
604 | default: | 691 | default: |
605 | BUG(); | 692 | BUG(); |
606 | } | 693 | } |
@@ -1236,6 +1323,7 @@ static void gfx_v8_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
1236 | adev->gfx.config.macrotile_mode_array[reg_offset] = gb_tile_moden; | 1323 | adev->gfx.config.macrotile_mode_array[reg_offset] = gb_tile_moden; |
1237 | WREG32(mmGB_MACROTILE_MODE0 + reg_offset, gb_tile_moden); | 1324 | WREG32(mmGB_MACROTILE_MODE0 + reg_offset, gb_tile_moden); |
1238 | } | 1325 | } |
1326 | case CHIP_FIJI: | ||
1239 | case CHIP_TONGA: | 1327 | case CHIP_TONGA: |
1240 | for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) { | 1328 | for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) { |
1241 | switch (reg_offset) { | 1329 | switch (reg_offset) { |
@@ -1984,6 +2072,23 @@ static void gfx_v8_0_gpu_init(struct amdgpu_device *adev) | |||
1984 | adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130; | 2072 | adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130; |
1985 | gb_addr_config = TOPAZ_GB_ADDR_CONFIG_GOLDEN; | 2073 | gb_addr_config = TOPAZ_GB_ADDR_CONFIG_GOLDEN; |
1986 | break; | 2074 | break; |
2075 | case CHIP_FIJI: | ||
2076 | adev->gfx.config.max_shader_engines = 4; | ||
2077 | adev->gfx.config.max_tile_pipes = 16; | ||
2078 | adev->gfx.config.max_cu_per_sh = 16; | ||
2079 | adev->gfx.config.max_sh_per_se = 1; | ||
2080 | adev->gfx.config.max_backends_per_se = 4; | ||
2081 | adev->gfx.config.max_texture_channel_caches = 8; | ||
2082 | adev->gfx.config.max_gprs = 256; | ||
2083 | adev->gfx.config.max_gs_threads = 32; | ||
2084 | adev->gfx.config.max_hw_contexts = 8; | ||
2085 | |||
2086 | adev->gfx.config.sc_prim_fifo_size_frontend = 0x20; | ||
2087 | adev->gfx.config.sc_prim_fifo_size_backend = 0x100; | ||
2088 | adev->gfx.config.sc_hiz_tile_fifo_size = 0x30; | ||
2089 | adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130; | ||
2090 | gb_addr_config = TONGA_GB_ADDR_CONFIG_GOLDEN; | ||
2091 | break; | ||
1987 | case CHIP_TONGA: | 2092 | case CHIP_TONGA: |
1988 | adev->gfx.config.max_shader_engines = 4; | 2093 | adev->gfx.config.max_shader_engines = 4; |
1989 | adev->gfx.config.max_tile_pipes = 8; | 2094 | adev->gfx.config.max_tile_pipes = 8; |
@@ -2490,6 +2595,7 @@ static int gfx_v8_0_cp_gfx_start(struct amdgpu_device *adev) | |||
2490 | amdgpu_ring_write(ring, mmPA_SC_RASTER_CONFIG - PACKET3_SET_CONTEXT_REG_START); | 2595 | amdgpu_ring_write(ring, mmPA_SC_RASTER_CONFIG - PACKET3_SET_CONTEXT_REG_START); |
2491 | switch (adev->asic_type) { | 2596 | switch (adev->asic_type) { |
2492 | case CHIP_TONGA: | 2597 | case CHIP_TONGA: |
2598 | case CHIP_FIJI: | ||
2493 | amdgpu_ring_write(ring, 0x16000012); | 2599 | amdgpu_ring_write(ring, 0x16000012); |
2494 | amdgpu_ring_write(ring, 0x0000002A); | 2600 | amdgpu_ring_write(ring, 0x0000002A); |
2495 | break; | 2601 | break; |
@@ -3875,7 +3981,8 @@ static bool gfx_v8_0_ring_emit_semaphore(struct amdgpu_ring *ring, | |||
3875 | unsigned sel = emit_wait ? PACKET3_SEM_SEL_WAIT : PACKET3_SEM_SEL_SIGNAL; | 3981 | unsigned sel = emit_wait ? PACKET3_SEM_SEL_WAIT : PACKET3_SEM_SEL_SIGNAL; |
3876 | 3982 | ||
3877 | if (ring->adev->asic_type == CHIP_TOPAZ || | 3983 | if (ring->adev->asic_type == CHIP_TOPAZ || |
3878 | ring->adev->asic_type == CHIP_TONGA) | 3984 | ring->adev->asic_type == CHIP_TONGA || |
3985 | ring->adev->asic_type == CHIP_FIJI) | ||
3879 | /* we got a hw semaphore bug in VI TONGA, return false to switch back to sw fence wait */ | 3986 | /* we got a hw semaphore bug in VI TONGA, return false to switch back to sw fence wait */ |
3880 | return false; | 3987 | return false; |
3881 | else { | 3988 | else { |