@@ -272,6 +272,81 @@ static void nbio_v7_11_init_registers(struct amdgpu_device *adev)
272272*/
273273}
274274
275+ static void nbio_v7_11_update_medium_grain_clock_gating (struct amdgpu_device * adev ,
276+ bool enable )
277+ {
278+ uint32_t def , data ;
279+
280+ if (!(adev -> cg_flags & AMD_CG_SUPPORT_BIF_MGCG ))
281+ return ;
282+
283+ def = data = RREG32_SOC15 (NBIO , 0 , regBIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL );
284+ if (enable ) {
285+ data |= (BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__LCLK_DYN_GATE_ENABLE_MASK |
286+ BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_DYN_GATE_ENABLE_MASK |
287+ BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_LCNT_GATE_ENABLE_MASK |
288+ BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_REGS_GATE_ENABLE_MASK |
289+ BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_PRBS_GATE_ENABLE_MASK |
290+ BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__REFCLK_REGS_GATE_ENABLE_MASK );
291+ } else {
292+ data &= ~(BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__LCLK_DYN_GATE_ENABLE_MASK |
293+ BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_DYN_GATE_ENABLE_MASK |
294+ BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_LCNT_GATE_ENABLE_MASK |
295+ BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_REGS_GATE_ENABLE_MASK |
296+ BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__TXCLK_PRBS_GATE_ENABLE_MASK |
297+ BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__REFCLK_REGS_GATE_ENABLE_MASK );
298+ }
299+
300+ if (def != data )
301+ WREG32_SOC15 (NBIO , 0 , regBIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL , data );
302+ }
303+
304+ static void nbio_v7_11_update_medium_grain_light_sleep (struct amdgpu_device * adev ,
305+ bool enable )
306+ {
307+ uint32_t def , data ;
308+
309+ if (!(adev -> cg_flags & AMD_CG_SUPPORT_BIF_LS ))
310+ return ;
311+
312+ def = data = RREG32_SOC15 (NBIO , 0 , regBIF_BIF256_CI256_RC3X4_USB4_PCIE_CNTL2 );
313+ if (enable )
314+ data |= BIF_BIF256_CI256_RC3X4_USB4_PCIE_CNTL2__SLV_MEM_LS_EN_MASK ;
315+ else
316+ data &= ~BIF_BIF256_CI256_RC3X4_USB4_PCIE_CNTL2__SLV_MEM_LS_EN_MASK ;
317+
318+ if (def != data )
319+ WREG32_SOC15 (NBIO , 0 , regBIF_BIF256_CI256_RC3X4_USB4_PCIE_CNTL2 , data );
320+
321+ def = data = RREG32_SOC15 (NBIO , 0 , regBIF_BIF256_CI256_RC3X4_USB4_PCIE_TX_POWER_CTRL_1 );
322+ if (enable ) {
323+ data |= (BIF_BIF256_CI256_RC3X4_USB4_PCIE_TX_POWER_CTRL_1__MST_MEM_LS_EN_MASK |
324+ BIF_BIF256_CI256_RC3X4_USB4_PCIE_TX_POWER_CTRL_1__REPLAY_MEM_LS_EN_MASK );
325+ } else {
326+ data &= ~(BIF_BIF256_CI256_RC3X4_USB4_PCIE_TX_POWER_CTRL_1__MST_MEM_LS_EN_MASK |
327+ BIF_BIF256_CI256_RC3X4_USB4_PCIE_TX_POWER_CTRL_1__REPLAY_MEM_LS_EN_MASK );
328+ }
329+
330+ if (def != data )
331+ WREG32_SOC15 (NBIO , 0 , regBIF_BIF256_CI256_RC3X4_USB4_PCIE_TX_POWER_CTRL_1 , data );
332+ }
333+
334+ static void nbio_v7_11_get_clockgating_state (struct amdgpu_device * adev ,
335+ u64 * flags )
336+ {
337+ uint32_t data ;
338+
339+ /* AMD_CG_SUPPORT_BIF_MGCG */
340+ data = RREG32_SOC15 (NBIO , 0 , regBIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL );
341+ if (data & BIF_BIF256_CI256_RC3X4_USB4_CPM_CONTROL__LCLK_DYN_GATE_ENABLE_MASK )
342+ * flags |= AMD_CG_SUPPORT_BIF_MGCG ;
343+
344+ /* AMD_CG_SUPPORT_BIF_LS */
345+ data = RREG32_SOC15 (NBIO , 0 , regBIF_BIF256_CI256_RC3X4_USB4_PCIE_CNTL2 );
346+ if (data & BIF_BIF256_CI256_RC3X4_USB4_PCIE_CNTL2__SLV_MEM_LS_EN_MASK )
347+ * flags |= AMD_CG_SUPPORT_BIF_LS ;
348+ }
349+
275350const struct amdgpu_nbio_funcs nbio_v7_11_funcs = {
276351 .get_hdp_flush_req_offset = nbio_v7_11_get_hdp_flush_req_offset ,
277352 .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 = {
288363 .enable_doorbell_aperture = nbio_v7_11_enable_doorbell_aperture ,
289364 .enable_doorbell_selfring_aperture = nbio_v7_11_enable_doorbell_selfring_aperture ,
290365 .ih_doorbell_range = nbio_v7_11_ih_doorbell_range ,
366+ .update_medium_grain_clock_gating = nbio_v7_11_update_medium_grain_clock_gating ,
367+ .update_medium_grain_light_sleep = nbio_v7_11_update_medium_grain_light_sleep ,
368+ .get_clockgating_state = nbio_v7_11_get_clockgating_state ,
291369 .ih_control = nbio_v7_11_ih_control ,
292370 .init_registers = nbio_v7_11_init_registers ,
293371 .remap_hdp_registers = nbio_v7_11_remap_hdp_registers ,
0 commit comments