mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	drm/amdgpu: fix missing stuff in NBIO v7.11
add get_clockgating_state, update_medium_grain_light_sleep and update_medium_grain_clock_gating in nbio_v7_11_funcs v1: add missing funcs in nbio_v7_11.c v2: modify the if condition and add spport for nbio v7.11 clockgating. Signed-off-by: Li Ma <li.ma@amd.com> Reviewed-by: Yifan Zhang <yifan1.zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
		
							parent
							
								
									66d64e4e03
								
							
						
					
					
						commit
						fa9dd7a285
					
				
					 4 changed files with 97 additions and 1 deletions
				
			
		| 
						 | 
					@ -272,6 +272,81 @@ static void nbio_v7_11_init_registers(struct amdgpu_device *adev)
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void nbio_v7_11_update_medium_grain_clock_gating(struct amdgpu_device *adev,
 | 
				
			||||||
 | 
											       bool enable)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						uint32_t def, data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!(adev->cg_flags & AMD_CG_SUPPORT_BIF_MGCG))
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def = data = RREG32_SOC15(NBIO, 0, regBIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL);
 | 
				
			||||||
 | 
						if (enable) {
 | 
				
			||||||
 | 
							data |= (BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__LCLK_DYN_GATE_ENABLE_MASK |
 | 
				
			||||||
 | 
								 BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_DYN_GATE_ENABLE_MASK |
 | 
				
			||||||
 | 
								 BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_LCNT_GATE_ENABLE_MASK |
 | 
				
			||||||
 | 
								 BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_REGS_GATE_ENABLE_MASK |
 | 
				
			||||||
 | 
								 BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_PRBS_GATE_ENABLE_MASK |
 | 
				
			||||||
 | 
								 BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__REFCLK_REGS_GATE_ENABLE_MASK);
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							data &= ~(BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__LCLK_DYN_GATE_ENABLE_MASK |
 | 
				
			||||||
 | 
								  BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_DYN_GATE_ENABLE_MASK |
 | 
				
			||||||
 | 
								  BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_LCNT_GATE_ENABLE_MASK |
 | 
				
			||||||
 | 
								  BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_REGS_GATE_ENABLE_MASK |
 | 
				
			||||||
 | 
								  BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_PRBS_GATE_ENABLE_MASK |
 | 
				
			||||||
 | 
								  BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__REFCLK_REGS_GATE_ENABLE_MASK);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (def != data)
 | 
				
			||||||
 | 
							WREG32_SOC15(NBIO, 0, regBIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL, data);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void nbio_v7_11_update_medium_grain_light_sleep(struct amdgpu_device *adev,
 | 
				
			||||||
 | 
											      bool enable)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						uint32_t def, data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!(adev->cg_flags & AMD_CG_SUPPORT_BIF_LS))
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def = data = RREG32_SOC15(NBIO, 0, regBIF_BIF256_CI256_RC3X4_USB4_PCIE_CNTL2);
 | 
				
			||||||
 | 
						if (enable)
 | 
				
			||||||
 | 
							data |= BIF_BIF256_CI256_RC3X4_USB4_PCIE_CNTL2__SLV_MEM_LS_EN_MASK;
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							data &= ~BIF_BIF256_CI256_RC3X4_USB4_PCIE_CNTL2__SLV_MEM_LS_EN_MASK;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (def != data)
 | 
				
			||||||
 | 
							WREG32_SOC15(NBIO, 0, regBIF_BIF256_CI256_RC3X4_USB4_PCIE_CNTL2, data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def = data = RREG32_SOC15(NBIO, 0, regBIF_BIF256_CI256_RC3X4_USB4_PCIE_TX_POWER_CTRL_1);
 | 
				
			||||||
 | 
						if (enable) {
 | 
				
			||||||
 | 
							data |= (BIF_BIF256_CI256_RC3X4_USB4_PCIE_TX_POWER_CTRL_1__MST_MEM_LS_EN_MASK |
 | 
				
			||||||
 | 
								BIF_BIF256_CI256_RC3X4_USB4_PCIE_TX_POWER_CTRL_1__REPLAY_MEM_LS_EN_MASK);
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							data &= ~(BIF_BIF256_CI256_RC3X4_USB4_PCIE_TX_POWER_CTRL_1__MST_MEM_LS_EN_MASK |
 | 
				
			||||||
 | 
								BIF_BIF256_CI256_RC3X4_USB4_PCIE_TX_POWER_CTRL_1__REPLAY_MEM_LS_EN_MASK);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (def != data)
 | 
				
			||||||
 | 
							WREG32_SOC15(NBIO, 0, regBIF_BIF256_CI256_RC3X4_USB4_PCIE_TX_POWER_CTRL_1, data);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void nbio_v7_11_get_clockgating_state(struct amdgpu_device *adev,
 | 
				
			||||||
 | 
										    u64 *flags)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						uint32_t data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* AMD_CG_SUPPORT_BIF_MGCG */
 | 
				
			||||||
 | 
						data = RREG32_SOC15(NBIO, 0, regBIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL);
 | 
				
			||||||
 | 
						if (data & BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__LCLK_DYN_GATE_ENABLE_MASK)
 | 
				
			||||||
 | 
							*flags |= AMD_CG_SUPPORT_BIF_MGCG;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* AMD_CG_SUPPORT_BIF_LS */
 | 
				
			||||||
 | 
						data = RREG32_SOC15(NBIO, 0, regBIF_BIF256_CI256_RC3X4_USB4_PCIE_CNTL2);
 | 
				
			||||||
 | 
						if (data & BIF_BIF256_CI256_RC3X4_USB4_PCIE_CNTL2__SLV_MEM_LS_EN_MASK)
 | 
				
			||||||
 | 
							*flags |= AMD_CG_SUPPORT_BIF_LS;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const struct amdgpu_nbio_funcs nbio_v7_11_funcs = {
 | 
					const struct amdgpu_nbio_funcs nbio_v7_11_funcs = {
 | 
				
			||||||
	.get_hdp_flush_req_offset = nbio_v7_11_get_hdp_flush_req_offset,
 | 
						.get_hdp_flush_req_offset = nbio_v7_11_get_hdp_flush_req_offset,
 | 
				
			||||||
	.get_hdp_flush_done_offset = nbio_v7_11_get_hdp_flush_done_offset,
 | 
						.get_hdp_flush_done_offset = nbio_v7_11_get_hdp_flush_done_offset,
 | 
				
			||||||
| 
						 | 
					@ -288,6 +363,9 @@ const struct amdgpu_nbio_funcs nbio_v7_11_funcs = {
 | 
				
			||||||
	.enable_doorbell_aperture = nbio_v7_11_enable_doorbell_aperture,
 | 
						.enable_doorbell_aperture = nbio_v7_11_enable_doorbell_aperture,
 | 
				
			||||||
	.enable_doorbell_selfring_aperture = nbio_v7_11_enable_doorbell_selfring_aperture,
 | 
						.enable_doorbell_selfring_aperture = nbio_v7_11_enable_doorbell_selfring_aperture,
 | 
				
			||||||
	.ih_doorbell_range = nbio_v7_11_ih_doorbell_range,
 | 
						.ih_doorbell_range = nbio_v7_11_ih_doorbell_range,
 | 
				
			||||||
 | 
						.update_medium_grain_clock_gating = nbio_v7_11_update_medium_grain_clock_gating,
 | 
				
			||||||
 | 
						.update_medium_grain_light_sleep = nbio_v7_11_update_medium_grain_light_sleep,
 | 
				
			||||||
 | 
						.get_clockgating_state = nbio_v7_11_get_clockgating_state,
 | 
				
			||||||
	.ih_control = nbio_v7_11_ih_control,
 | 
						.ih_control = nbio_v7_11_ih_control,
 | 
				
			||||||
	.init_registers = nbio_v7_11_init_registers,
 | 
						.init_registers = nbio_v7_11_init_registers,
 | 
				
			||||||
	.remap_hdp_registers = nbio_v7_11_remap_hdp_registers,
 | 
						.remap_hdp_registers = nbio_v7_11_remap_hdp_registers,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -863,6 +863,7 @@ static int soc21_common_set_clockgating_state(void *handle,
 | 
				
			||||||
	case IP_VERSION(4, 3, 0):
 | 
						case IP_VERSION(4, 3, 0):
 | 
				
			||||||
	case IP_VERSION(4, 3, 1):
 | 
						case IP_VERSION(4, 3, 1):
 | 
				
			||||||
	case IP_VERSION(7, 7, 0):
 | 
						case IP_VERSION(7, 7, 0):
 | 
				
			||||||
 | 
						case IP_VERSION(7, 11, 0):
 | 
				
			||||||
		adev->nbio.funcs->update_medium_grain_clock_gating(adev,
 | 
							adev->nbio.funcs->update_medium_grain_clock_gating(adev,
 | 
				
			||||||
				state == AMD_CG_STATE_GATE);
 | 
									state == AMD_CG_STATE_GATE);
 | 
				
			||||||
		adev->nbio.funcs->update_medium_grain_light_sleep(adev,
 | 
							adev->nbio.funcs->update_medium_grain_light_sleep(adev,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -775,6 +775,12 @@
 | 
				
			||||||
#define regPCIE_USB4_ERR_CNTL5_BASE_IDX                                                                 5
 | 
					#define regPCIE_USB4_ERR_CNTL5_BASE_IDX                                                                 5
 | 
				
			||||||
#define regPCIE_USB4_LC_CNTL1                                                                           0x420179
 | 
					#define regPCIE_USB4_LC_CNTL1                                                                           0x420179
 | 
				
			||||||
#define regPCIE_USB4_LC_CNTL1_BASE_IDX                                                                  5
 | 
					#define regPCIE_USB4_LC_CNTL1_BASE_IDX                                                                  5
 | 
				
			||||||
 | 
					#define regBIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL                                                      0x420118
 | 
				
			||||||
 | 
					#define regBIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL_BASE_IDX                                             5
 | 
				
			||||||
 | 
					#define regBIF_BIF256_CI256_RC3X4_USB4_PCIE_CNTL2                                                       0x42001c
 | 
				
			||||||
 | 
					#define regBIF_BIF256_CI256_RC3X4_USB4_PCIE_CNTL2_BASE_IDX                                              5
 | 
				
			||||||
 | 
					#define regBIF_BIF256_CI256_RC3X4_USB4_PCIE_TX_POWER_CTRL_1                                             0x420187
 | 
				
			||||||
 | 
					#define regBIF_BIF256_CI256_RC3X4_USB4_PCIE_TX_POWER_CTRL_1_BASE_IDX                                    5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// addressBlock: nbio_nbif0_bif_cfg_dev0_rc_bifcfgdecp
 | 
					// addressBlock: nbio_nbif0_bif_cfg_dev0_rc_bifcfgdecp
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24634,7 +24634,18 @@
 | 
				
			||||||
//PCIE_USB4_LC_CNTL1
 | 
					//PCIE_USB4_LC_CNTL1
 | 
				
			||||||
#define PCIE_USB4_LC_CNTL1__PCIE_USB_ROUTER_CLEAR_PATH_MODE__SHIFT                                            0x0
 | 
					#define PCIE_USB4_LC_CNTL1__PCIE_USB_ROUTER_CLEAR_PATH_MODE__SHIFT                                            0x0
 | 
				
			||||||
#define PCIE_USB4_LC_CNTL1__PCIE_USB_ROUTER_CLEAR_PATH_MODE_MASK                                              0x00000001L
 | 
					#define PCIE_USB4_LC_CNTL1__PCIE_USB_ROUTER_CLEAR_PATH_MODE_MASK                                              0x00000001L
 | 
				
			||||||
 | 
					//BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL
 | 
				
			||||||
 | 
					#define BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__LCLK_DYN_GATE_ENABLE_MASK                                    0x00000001L
 | 
				
			||||||
 | 
					#define BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_DYN_GATE_ENABLE_MASK                                   0x00000002L
 | 
				
			||||||
 | 
					#define BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_LCNT_GATE_ENABLE_MASK                                  0x00000020L
 | 
				
			||||||
 | 
					#define BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_REGS_GATE_ENABLE_MASK                                  0x00000040L
 | 
				
			||||||
 | 
					#define BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_PRBS_GATE_ENABLE_MASK                                  0x00000080L
 | 
				
			||||||
 | 
					#define BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__REFCLK_REGS_GATE_ENABLE_MASK                                 0x00000100L
 | 
				
			||||||
 | 
					//BIF_BIF256_CI256_RC3X4_USB4_PCIE_CNTL2
 | 
				
			||||||
 | 
					#define BIF_BIF256_CI256_RC3X4_USB4_PCIE_CNTL2__SLV_MEM_LS_EN_MASK                                            0x00010000L
 | 
				
			||||||
 | 
					//BIF_BIF256_CI256_RC3X4_USB4_PCIE_TX_POWER_CTRL_1
 | 
				
			||||||
 | 
					#define BIF_BIF256_CI256_RC3X4_USB4_PCIE_TX_POWER_CTRL_1__MST_MEM_LS_EN_MASK                                  0x00000001L
 | 
				
			||||||
 | 
					#define BIF_BIF256_CI256_RC3X4_USB4_PCIE_TX_POWER_CTRL_1__REPLAY_MEM_LS_EN_MASK                               0x00000008L
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// addressBlock: nbio_nbif0_bif_cfg_dev0_rc_bifcfgdecp
 | 
					// addressBlock: nbio_nbif0_bif_cfg_dev0_rc_bifcfgdecp
 | 
				
			||||||
//BIF_CFG_DEV0_RC0_VENDOR_ID
 | 
					//BIF_CFG_DEV0_RC0_VENDOR_ID
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue