@@ -272,6 +272,81 @@ static void nbio_v7_11_init_registers(struct amdgpu_device *adev)
272
272
*/
273
273
}
274
274
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
+
275
350
const struct amdgpu_nbio_funcs nbio_v7_11_funcs = {
276
351
.get_hdp_flush_req_offset = nbio_v7_11_get_hdp_flush_req_offset ,
277
352
.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 = {
288
363
.enable_doorbell_aperture = nbio_v7_11_enable_doorbell_aperture ,
289
364
.enable_doorbell_selfring_aperture = nbio_v7_11_enable_doorbell_selfring_aperture ,
290
365
.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 ,
291
369
.ih_control = nbio_v7_11_ih_control ,
292
370
.init_registers = nbio_v7_11_init_registers ,
293
371
.remap_hdp_registers = nbio_v7_11_remap_hdp_registers ,
0 commit comments