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 | 302 | 
1 files changed, 295 insertions, 7 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c index 6776cf756d40..e1dcab98e249 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c @@ -268,7 +268,6 @@ static const u32 fiji_mgcg_cgcg_init[] =  	mmCGTT_CP_CLK_CTRL, 0xffffffff, 0x00000100,  	mmCGTT_CPC_CLK_CTRL, 0xffffffff, 0x00000100,  	mmCGTT_CPF_CLK_CTRL, 0xffffffff, 0x40000100, -	mmCGTT_DRM_CLK_CTRL0, 0xffffffff, 0x00600100,  	mmCGTT_GDS_CLK_CTRL, 0xffffffff, 0x00000100,  	mmCGTT_IA_CLK_CTRL, 0xffffffff, 0x06000100,  	mmCGTT_PA_CLK_CTRL, 0xffffffff, 0x00000100, @@ -296,10 +295,6 @@ static const u32 fiji_mgcg_cgcg_init[] =  	mmCGTS_SM_CTRL_REG, 0xffffffff, 0x96e00200,  	mmCP_RB_WPTR_POLL_CNTL, 0xffffffff, 0x00900100,  	mmRLC_CGCG_CGLS_CTRL, 0xffffffff, 0x0020003c, -	mmPCIE_INDEX, 0xffffffff, 0x0140001c, -	mmPCIE_DATA, 0x000f0000, 0x00000000, -	mmCGTT_DRM_CLK_CTRL0, 0xff000fff, 0x00000100, -	mmHDP_XDP_CGTT_BLK_CTRL, 0xc0000fff, 0x00000104,  	mmCP_MEM_SLP_CNTL, 0x00000001, 0x00000001,  }; @@ -1000,7 +995,7 @@ static void gfx_v8_0_gpu_early_init(struct amdgpu_device *adev)  		adev->gfx.config.max_cu_per_sh = 16;  		adev->gfx.config.max_sh_per_se = 1;  		adev->gfx.config.max_backends_per_se = 4; -		adev->gfx.config.max_texture_channel_caches = 8; +		adev->gfx.config.max_texture_channel_caches = 16;  		adev->gfx.config.max_gprs = 256;  		adev->gfx.config.max_gs_threads = 32;  		adev->gfx.config.max_hw_contexts = 8; @@ -1613,6 +1608,296 @@ static void gfx_v8_0_tiling_mode_table_init(struct amdgpu_device *adev)  			WREG32(mmGB_MACROTILE_MODE0 + reg_offset, gb_tile_moden);  		}  	case CHIP_FIJI: +		for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) { +			switch (reg_offset) { +			case 0: +				gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); +				break; +			case 1: +				gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); +				break; +			case 2: +				gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); +				break; +			case 3: +				gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); +				break; +			case 4: +				gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); +				break; +			case 5: +				gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); +				break; +			case 6: +				gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); +				break; +			case 7: +				gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P4_16x16) | +						TILE_SPLIT(ADDR_SURF_TILE_SPLIT_2KB) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); +				break; +			case 8: +				gb_tile_moden = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16)); +				break; +			case 9: +				gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); +				break; +			case 10: +				gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); +				break; +			case 11: +				gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8)); +				break; +			case 12: +				gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P4_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8)); +				break; +			case 13: +				gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); +				break; +			case 14: +				gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); +				break; +			case 15: +				gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); +				break; +			case 16: +				gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8)); +				break; +			case 17: +				gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P4_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8)); +				break; +			case 18: +				gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THICK) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1)); +				break; +			case 19: +				gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THICK) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1)); +				break; +			case 20: +				gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THICK) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1)); +				break; +			case 21: +				gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_THICK) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1)); +				break; +			case 22: +				gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1)); +				break; +			case 23: +				gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) | +						PIPE_CONFIG(ADDR_SURF_P4_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1)); +				break; +			case 24: +				gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THICK) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1)); +				break; +			case 25: +				gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_XTHICK) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1)); +				break; +			case 26: +				gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_XTHICK) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1)); +				break; +			case 27: +				gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); +				break; +			case 28: +				gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); +				break; +			case 29: +				gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8)); +				break; +			case 30: +				gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | +						PIPE_CONFIG(ADDR_SURF_P4_16x16) | +						MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | +						SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8)); +				break; +			default: +				gb_tile_moden = 0; +				break; +			} +			adev->gfx.config.tile_mode_array[reg_offset] = gb_tile_moden; +			WREG32(mmGB_TILE_MODE0 + reg_offset, gb_tile_moden); +		} +		for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) { +			switch (reg_offset) { +			case 0: +				gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | +						BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | +						MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | +						NUM_BANKS(ADDR_SURF_8_BANK)); +				break; +			case 1: +				gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | +						BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | +						MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | +						NUM_BANKS(ADDR_SURF_8_BANK)); +				break; +			case 2: +				gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | +						BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | +						MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | +						NUM_BANKS(ADDR_SURF_8_BANK)); +				break; +			case 3: +				gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | +						BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | +						MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | +						NUM_BANKS(ADDR_SURF_8_BANK)); +				break; +			case 4: +				gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | +						BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | +						MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | +						NUM_BANKS(ADDR_SURF_8_BANK)); +				break; +			case 5: +				gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | +						BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | +						MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | +						NUM_BANKS(ADDR_SURF_8_BANK)); +				break; +			case 6: +				gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | +						BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | +						MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | +						NUM_BANKS(ADDR_SURF_8_BANK)); +				break; +			case 8: +				gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | +						BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) | +						MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | +						NUM_BANKS(ADDR_SURF_8_BANK)); +				break; +			case 9: +				gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | +						BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | +						MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | +						NUM_BANKS(ADDR_SURF_8_BANK)); +				break; +			case 10: +				gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | +						BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | +						MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | +						NUM_BANKS(ADDR_SURF_8_BANK)); +				break; +			case 11: +				gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | +						BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | +						MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | +						NUM_BANKS(ADDR_SURF_8_BANK)); +				break; +			case 12: +				gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | +						BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | +						MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | +						NUM_BANKS(ADDR_SURF_8_BANK)); +				break; +			case 13: +				gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | +						BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | +						MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | +						NUM_BANKS(ADDR_SURF_8_BANK)); +				break; +			case 14: +				gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | +						BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | +						MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | +						NUM_BANKS(ADDR_SURF_4_BANK)); +				break; +			case 7: +				/* unused idx */ +				continue; +			default: +				gb_tile_moden = 0; +				break; +			} +			adev->gfx.config.macrotile_mode_array[reg_offset] = gb_tile_moden; +			WREG32(mmGB_MACROTILE_MODE0 + reg_offset, gb_tile_moden); +		} +		break;  	case CHIP_TONGA:  		for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) {  			switch (reg_offset) { @@ -2971,10 +3256,13 @@ static int gfx_v8_0_cp_gfx_start(struct amdgpu_device *adev)  	amdgpu_ring_write(ring, mmPA_SC_RASTER_CONFIG - PACKET3_SET_CONTEXT_REG_START);  	switch (adev->asic_type) {  	case CHIP_TONGA: -	case CHIP_FIJI:  		amdgpu_ring_write(ring, 0x16000012);  		amdgpu_ring_write(ring, 0x0000002A);  		break; +	case CHIP_FIJI: +		amdgpu_ring_write(ring, 0x3a00161a); +		amdgpu_ring_write(ring, 0x0000002e); +		break;  	case CHIP_TOPAZ:  	case CHIP_CARRIZO:  		amdgpu_ring_write(ring, 0x00000002);  | 
