diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/df_v3_6.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/df_v3_6.c | 60 | 
1 files changed, 37 insertions, 23 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c index 5850c8e34caa..4043ebcea5de 100644 --- a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c +++ b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c @@ -99,8 +99,8 @@ static uint64_t df_v3_6_get_fica(struct amdgpu_device *adev,  	unsigned long flags, address, data;  	uint32_t ficadl_val, ficadh_val; -	address = adev->nbio_funcs->get_pcie_index_offset(adev); -	data = adev->nbio_funcs->get_pcie_data_offset(adev); +	address = adev->nbio.funcs->get_pcie_index_offset(adev); +	data = adev->nbio.funcs->get_pcie_data_offset(adev);  	spin_lock_irqsave(&adev->pcie_idx_lock, flags);  	WREG32(address, smnDF_PIE_AON_FabricIndirectConfigAccessAddress3); @@ -122,8 +122,8 @@ static void df_v3_6_set_fica(struct amdgpu_device *adev, uint32_t ficaa_val,  {  	unsigned long flags, address, data; -	address = adev->nbio_funcs->get_pcie_index_offset(adev); -	data = adev->nbio_funcs->get_pcie_data_offset(adev); +	address = adev->nbio.funcs->get_pcie_index_offset(adev); +	data = adev->nbio.funcs->get_pcie_data_offset(adev);  	spin_lock_irqsave(&adev->pcie_idx_lock, flags);  	WREG32(address, smnDF_PIE_AON_FabricIndirectConfigAccessAddress3); @@ -150,8 +150,8 @@ static void df_v3_6_perfmon_rreg(struct amdgpu_device *adev,  {  	unsigned long flags, address, data; -	address = adev->nbio_funcs->get_pcie_index_offset(adev); -	data = adev->nbio_funcs->get_pcie_data_offset(adev); +	address = adev->nbio.funcs->get_pcie_index_offset(adev); +	data = adev->nbio.funcs->get_pcie_data_offset(adev);  	spin_lock_irqsave(&adev->pcie_idx_lock, flags);  	WREG32(address, lo_addr); @@ -172,8 +172,8 @@ static void df_v3_6_perfmon_wreg(struct amdgpu_device *adev, uint32_t lo_addr,  {  	unsigned long flags, address, data; -	address = adev->nbio_funcs->get_pcie_index_offset(adev); -	data = adev->nbio_funcs->get_pcie_data_offset(adev); +	address = adev->nbio.funcs->get_pcie_index_offset(adev); +	data = adev->nbio.funcs->get_pcie_data_offset(adev);  	spin_lock_irqsave(&adev->pcie_idx_lock, flags);  	WREG32(address, lo_addr); @@ -220,6 +220,13 @@ static void df_v3_6_sw_init(struct amdgpu_device *adev)  		adev->df_perfmon_config_assign_mask[i] = 0;  } +static void df_v3_6_sw_fini(struct amdgpu_device *adev) +{ + +	device_remove_file(adev->dev, &dev_attr_df_cntr_avail); + +} +  static void df_v3_6_enable_broadcast_mode(struct amdgpu_device *adev,  					  bool enable)  { @@ -261,23 +268,29 @@ static void df_v3_6_update_medium_grain_clock_gating(struct amdgpu_device *adev,  {  	u32 tmp; -	/* Put DF on broadcast mode */ -	adev->df_funcs->enable_broadcast_mode(adev, true); +	if (adev->cg_flags & AMD_CG_SUPPORT_DF_MGCG) { +		/* Put DF on broadcast mode */ +		adev->df_funcs->enable_broadcast_mode(adev, true); -	if (enable && (adev->cg_flags & AMD_CG_SUPPORT_DF_MGCG)) { -		tmp = RREG32_SOC15(DF, 0, mmDF_PIE_AON0_DfGlobalClkGater); -		tmp &= ~DF_PIE_AON0_DfGlobalClkGater__MGCGMode_MASK; -		tmp |= DF_V3_6_MGCG_ENABLE_15_CYCLE_DELAY; -		WREG32_SOC15(DF, 0, mmDF_PIE_AON0_DfGlobalClkGater, tmp); -	} else { -		tmp = RREG32_SOC15(DF, 0, mmDF_PIE_AON0_DfGlobalClkGater); -		tmp &= ~DF_PIE_AON0_DfGlobalClkGater__MGCGMode_MASK; -		tmp |= DF_V3_6_MGCG_DISABLE; -		WREG32_SOC15(DF, 0, mmDF_PIE_AON0_DfGlobalClkGater, tmp); -	} +		if (enable) { +			tmp = RREG32_SOC15(DF, 0, +					mmDF_PIE_AON0_DfGlobalClkGater); +			tmp &= ~DF_PIE_AON0_DfGlobalClkGater__MGCGMode_MASK; +			tmp |= DF_V3_6_MGCG_ENABLE_15_CYCLE_DELAY; +			WREG32_SOC15(DF, 0, +					mmDF_PIE_AON0_DfGlobalClkGater, tmp); +		} else { +			tmp = RREG32_SOC15(DF, 0, +					mmDF_PIE_AON0_DfGlobalClkGater); +			tmp &= ~DF_PIE_AON0_DfGlobalClkGater__MGCGMode_MASK; +			tmp |= DF_V3_6_MGCG_DISABLE; +			WREG32_SOC15(DF, 0, +					mmDF_PIE_AON0_DfGlobalClkGater, tmp); +		} -	/* Exit broadcast mode */ -	adev->df_funcs->enable_broadcast_mode(adev, false); +		/* Exit broadcast mode */ +		adev->df_funcs->enable_broadcast_mode(adev, false); +	}  }  static void df_v3_6_get_clockgating_state(struct amdgpu_device *adev, @@ -537,6 +550,7 @@ static void df_v3_6_pmc_get_count(struct amdgpu_device *adev,  const struct amdgpu_df_funcs df_v3_6_funcs = {  	.sw_init = df_v3_6_sw_init, +	.sw_fini = df_v3_6_sw_fini,  	.enable_broadcast_mode = df_v3_6_enable_broadcast_mode,  	.get_fb_channel_number = df_v3_6_get_fb_channel_number,  	.get_hbm_channel_number = df_v3_6_get_hbm_channel_number,  | 
