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 | 31 | 
1 files changed, 26 insertions, 5 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c index d0ec00986f38..373374164bd5 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c @@ -139,6 +139,13 @@ MODULE_FIRMWARE("amdgpu/polaris10_mec.bin");  MODULE_FIRMWARE("amdgpu/polaris10_mec2.bin");  MODULE_FIRMWARE("amdgpu/polaris10_rlc.bin"); +MODULE_FIRMWARE("amdgpu/polaris12_ce.bin"); +MODULE_FIRMWARE("amdgpu/polaris12_pfp.bin"); +MODULE_FIRMWARE("amdgpu/polaris12_me.bin"); +MODULE_FIRMWARE("amdgpu/polaris12_mec.bin"); +MODULE_FIRMWARE("amdgpu/polaris12_mec2.bin"); +MODULE_FIRMWARE("amdgpu/polaris12_rlc.bin"); +  static const struct amdgpu_gds_reg_offset amdgpu_gds_reg_offset[] =  {  	{mmGDS_VMID0_BASE, mmGDS_VMID0_SIZE, mmGDS_GWS_VMID0, mmGDS_OA_VMID0}, @@ -689,6 +696,7 @@ static void gfx_v8_0_init_golden_registers(struct amdgpu_device *adev)  						 (const u32)ARRAY_SIZE(tonga_golden_common_all));  		break;  	case CHIP_POLARIS11: +	case CHIP_POLARIS12:  		amdgpu_program_register_sequence(adev,  						 golden_settings_polaris11_a11,  						 (const u32)ARRAY_SIZE(golden_settings_polaris11_a11)); @@ -903,6 +911,9 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev)  	case CHIP_POLARIS10:  		chip_name = "polaris10";  		break; +	case CHIP_POLARIS12: +		chip_name = "polaris12"; +		break;  	case CHIP_STONEY:  		chip_name = "stoney";  		break; @@ -1768,6 +1779,7 @@ static int gfx_v8_0_gpu_early_init(struct amdgpu_device *adev)  		gb_addr_config = TONGA_GB_ADDR_CONFIG_GOLDEN;  		break;  	case CHIP_POLARIS11: +	case CHIP_POLARIS12:  		ret = amdgpu_atombios_get_gfx_info(adev);  		if (ret)  			return ret; @@ -2682,6 +2694,7 @@ static void gfx_v8_0_tiling_mode_table_init(struct amdgpu_device *adev)  		break;  	case CHIP_POLARIS11: +	case CHIP_POLARIS12:  		modearray[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |  				PIPE_CONFIG(ADDR_SURF_P4_16x16) |  				TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) | @@ -3503,6 +3516,7 @@ gfx_v8_0_raster_config(struct amdgpu_device *adev, u32 *rconf, u32 *rconf1)  		*rconf1 |= 0x0;  		break;  	case CHIP_POLARIS11: +	case CHIP_POLARIS12:  		*rconf |= RB_MAP_PKR0(2) | RB_XSEL2(1) | SE_MAP(2) |  			  SE_XSEL(1) | SE_YSEL(1);  		*rconf1 |= 0x0; @@ -4021,7 +4035,8 @@ static void gfx_v8_0_init_pg(struct amdgpu_device *adev)  			cz_enable_cp_power_gating(adev, true);  		else  			cz_enable_cp_power_gating(adev, false); -	} else if (adev->asic_type == CHIP_POLARIS11) { +	} else if ((adev->asic_type == CHIP_POLARIS11) || +		   (adev->asic_type == CHIP_POLARIS12)) {  		gfx_v8_0_init_csb(adev);  		gfx_v8_0_init_save_restore_list(adev);  		gfx_v8_0_enable_save_restore_machine(adev); @@ -4095,7 +4110,8 @@ static int gfx_v8_0_rlc_resume(struct amdgpu_device *adev)  		 RLC_CGCG_CGLS_CTRL__CGLS_EN_MASK);  	WREG32(mmRLC_CGCG_CGLS_CTRL, tmp);  	if (adev->asic_type == CHIP_POLARIS11 || -	    adev->asic_type == CHIP_POLARIS10) { +	    adev->asic_type == CHIP_POLARIS10 || +	    adev->asic_type == CHIP_POLARIS12) {  		tmp = RREG32(mmRLC_CGCG_CGLS_CTRL_3D);  		tmp &= ~0x3;  		WREG32(mmRLC_CGCG_CGLS_CTRL_3D, tmp); @@ -4283,6 +4299,7 @@ static int gfx_v8_0_cp_gfx_start(struct amdgpu_device *adev)  		amdgpu_ring_write(ring, 0x0000002A);  		break;  	case CHIP_POLARIS11: +	case CHIP_POLARIS12:  		amdgpu_ring_write(ring, 0x16000012);  		amdgpu_ring_write(ring, 0x00000000);  		break; @@ -4664,7 +4681,8 @@ static int gfx_v8_0_cp_compute_resume(struct amdgpu_device *adev)  			    (adev->asic_type == CHIP_FIJI) ||  			    (adev->asic_type == CHIP_STONEY) ||  			    (adev->asic_type == CHIP_POLARIS11) || -			    (adev->asic_type == CHIP_POLARIS10)) { +			    (adev->asic_type == CHIP_POLARIS10) || +			    (adev->asic_type == CHIP_POLARIS12)) {  				WREG32(mmCP_MEC_DOORBELL_RANGE_LOWER,  				       AMDGPU_DOORBELL_KIQ << 2);  				WREG32(mmCP_MEC_DOORBELL_RANGE_UPPER, @@ -4700,7 +4718,8 @@ static int gfx_v8_0_cp_compute_resume(struct amdgpu_device *adev)  		mqd->cp_hqd_persistent_state = tmp;  		if (adev->asic_type == CHIP_STONEY ||  			adev->asic_type == CHIP_POLARIS11 || -			adev->asic_type == CHIP_POLARIS10) { +			adev->asic_type == CHIP_POLARIS10 || +			adev->asic_type == CHIP_POLARIS12) {  			tmp = RREG32(mmCP_ME1_PIPE3_INT_CNTL);  			tmp = REG_SET_FIELD(tmp, CP_ME1_PIPE3_INT_CNTL, GENERIC2_INT_ENABLE, 1);  			WREG32(mmCP_ME1_PIPE3_INT_CNTL, tmp); @@ -5279,7 +5298,8 @@ static int gfx_v8_0_late_init(void *handle)  static void gfx_v8_0_enable_gfx_static_mg_power_gating(struct amdgpu_device *adev,  						       bool enable)  { -	if (adev->asic_type == CHIP_POLARIS11) +	if ((adev->asic_type == CHIP_POLARIS11) || +	    (adev->asic_type == CHIP_POLARIS12))  		/* Send msg to SMU via Powerplay */  		amdgpu_set_powergating_state(adev,  					     AMD_IP_BLOCK_TYPE_SMC, @@ -5353,6 +5373,7 @@ static int gfx_v8_0_set_powergating_state(void *handle,  			gfx_v8_0_enable_gfx_dynamic_mg_power_gating(adev, false);  		break;  	case CHIP_POLARIS11: +	case CHIP_POLARIS12:  		if ((adev->pg_flags & AMD_PG_SUPPORT_GFX_SMG) && enable)  			gfx_v8_0_enable_gfx_static_mg_power_gating(adev, true);  		else  | 
