diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 109 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/vi.c | 7 |
2 files changed, 115 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 { |
diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c index aeeaaca7cf4c..0cd248b937e8 100644 --- a/drivers/gpu/drm/amd/amdgpu/vi.c +++ b/drivers/gpu/drm/amd/amdgpu/vi.c | |||
| @@ -1202,6 +1202,13 @@ static const struct amdgpu_ip_block_version fiji_ip_blocks[] = | |||
| 1202 | .rev = 0, | 1202 | .rev = 0, |
| 1203 | .funcs = &dce_v10_0_ip_funcs, | 1203 | .funcs = &dce_v10_0_ip_funcs, |
| 1204 | }, | 1204 | }, |
| 1205 | { | ||
| 1206 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
| 1207 | .major = 8, | ||
| 1208 | .minor = 0, | ||
| 1209 | .rev = 0, | ||
| 1210 | .funcs = &gfx_v8_0_ip_funcs, | ||
| 1211 | }, | ||
| 1205 | }; | 1212 | }; |
| 1206 | 1213 | ||
| 1207 | static const struct amdgpu_ip_block_version cz_ip_blocks[] = | 1214 | static const struct amdgpu_ip_block_version cz_ip_blocks[] = |
