diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c | 21 | 
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c b/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c index 7b79eeaa88aa..b184b656b9b6 100644 --- a/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c +++ b/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c @@ -508,6 +508,26 @@ static void nbio_v2_3_apply_l1_link_width_reconfig_wa(struct amdgpu_device *adev  	WREG32_PCIE(smnPCIE_LC_LINK_WIDTH_CNTL, reg_data);  } +static void nbio_v2_3_clear_doorbell_interrupt(struct amdgpu_device *adev) +{ +	uint32_t reg, reg_data; + +	if (adev->asic_type != CHIP_SIENNA_CICHLID) +		return; + +	reg = RREG32_SOC15(NBIO, 0, mmBIF_RB_CNTL); + +	/* Clear Interrupt Status +	 */ +	if ((reg & BIF_RB_CNTL__RB_ENABLE_MASK) == 0) { +		reg = RREG32_SOC15(NBIO, 0, mmBIF_DOORBELL_INT_CNTL); +		if (reg & BIF_DOORBELL_INT_CNTL__DOORBELL_INTERRUPT_STATUS_MASK) { +			reg_data = 1 << BIF_DOORBELL_INT_CNTL__DOORBELL_INTERRUPT_CLEAR__SHIFT; +			WREG32_SOC15(NBIO, 0, mmBIF_DOORBELL_INT_CNTL, reg_data); +		} +	} +} +  const struct amdgpu_nbio_funcs nbio_v2_3_funcs = {  	.get_hdp_flush_req_offset = nbio_v2_3_get_hdp_flush_req_offset,  	.get_hdp_flush_done_offset = nbio_v2_3_get_hdp_flush_done_offset, @@ -531,4 +551,5 @@ const struct amdgpu_nbio_funcs nbio_v2_3_funcs = {  	.program_aspm =  nbio_v2_3_program_aspm,  	.apply_lc_spc_mode_wa = nbio_v2_3_apply_lc_spc_mode_wa,  	.apply_l1_link_width_reconfig_wa = nbio_v2_3_apply_l1_link_width_reconfig_wa, +	.clear_doorbell_interrupt = nbio_v2_3_clear_doorbell_interrupt,  };  | 
