@@ -325,6 +325,43 @@ static void dccg35_set_dpstreamclk(
325325 }
326326}
327327
328+ static void dccg35_set_physymclk_root_clock_gating (
329+ struct dccg * dccg ,
330+ int phy_inst ,
331+ bool enable )
332+ {
333+ struct dcn_dccg * dccg_dcn = TO_DCN_DCCG (dccg );
334+
335+ if (!dccg -> ctx -> dc -> debug .root_clock_optimization .bits .physymclk )
336+ return ;
337+
338+ switch (phy_inst ) {
339+ case 0 :
340+ REG_UPDATE (DCCG_GATE_DISABLE_CNTL2 ,
341+ PHYASYMCLK_ROOT_GATE_DISABLE , enable ? 1 : 0 );
342+ break ;
343+ case 1 :
344+ REG_UPDATE (DCCG_GATE_DISABLE_CNTL2 ,
345+ PHYBSYMCLK_ROOT_GATE_DISABLE , enable ? 1 : 0 );
346+ break ;
347+ case 2 :
348+ REG_UPDATE (DCCG_GATE_DISABLE_CNTL2 ,
349+ PHYCSYMCLK_ROOT_GATE_DISABLE , enable ? 1 : 0 );
350+ break ;
351+ case 3 :
352+ REG_UPDATE (DCCG_GATE_DISABLE_CNTL2 ,
353+ PHYDSYMCLK_ROOT_GATE_DISABLE , enable ? 1 : 0 );
354+ break ;
355+ case 4 :
356+ REG_UPDATE (DCCG_GATE_DISABLE_CNTL2 ,
357+ PHYESYMCLK_ROOT_GATE_DISABLE , enable ? 1 : 0 );
358+ break ;
359+ default :
360+ BREAK_TO_DEBUGGER ();
361+ return ;
362+ }
363+ }
364+
328365static void dccg35_set_physymclk (
329366 struct dccg * dccg ,
330367 int phy_inst ,
@@ -340,84 +377,54 @@ static void dccg35_set_physymclk(
340377 REG_UPDATE_2 (PHYASYMCLK_CLOCK_CNTL ,
341378 PHYASYMCLK_EN , 1 ,
342379 PHYASYMCLK_SRC_SEL , clk_src );
343- if (dccg -> ctx -> dc -> debug .root_clock_optimization .bits .physymclk )
344- REG_UPDATE (DCCG_GATE_DISABLE_CNTL2 ,
345- PHYASYMCLK_ROOT_GATE_DISABLE , 1 );
346380 } else {
347381 REG_UPDATE_2 (PHYASYMCLK_CLOCK_CNTL ,
348382 PHYASYMCLK_EN , 0 ,
349383 PHYASYMCLK_SRC_SEL , 0 );
350- if (dccg -> ctx -> dc -> debug .root_clock_optimization .bits .physymclk )
351- REG_UPDATE (DCCG_GATE_DISABLE_CNTL2 ,
352- PHYASYMCLK_ROOT_GATE_DISABLE , 0 );
353384 }
354385 break ;
355386 case 1 :
356387 if (force_enable ) {
357388 REG_UPDATE_2 (PHYBSYMCLK_CLOCK_CNTL ,
358389 PHYBSYMCLK_EN , 1 ,
359390 PHYBSYMCLK_SRC_SEL , clk_src );
360- if (dccg -> ctx -> dc -> debug .root_clock_optimization .bits .physymclk )
361- REG_UPDATE (DCCG_GATE_DISABLE_CNTL2 ,
362- PHYBSYMCLK_ROOT_GATE_DISABLE , 1 );
363391 } else {
364392 REG_UPDATE_2 (PHYBSYMCLK_CLOCK_CNTL ,
365393 PHYBSYMCLK_EN , 0 ,
366394 PHYBSYMCLK_SRC_SEL , 0 );
367- if (dccg -> ctx -> dc -> debug .root_clock_optimization .bits .physymclk )
368- REG_UPDATE (DCCG_GATE_DISABLE_CNTL2 ,
369- PHYBSYMCLK_ROOT_GATE_DISABLE , 0 );
370395 }
371396 break ;
372397 case 2 :
373398 if (force_enable ) {
374399 REG_UPDATE_2 (PHYCSYMCLK_CLOCK_CNTL ,
375400 PHYCSYMCLK_EN , 1 ,
376401 PHYCSYMCLK_SRC_SEL , clk_src );
377- if (dccg -> ctx -> dc -> debug .root_clock_optimization .bits .physymclk )
378- REG_UPDATE (DCCG_GATE_DISABLE_CNTL2 ,
379- PHYCSYMCLK_ROOT_GATE_DISABLE , 1 );
380402 } else {
381403 REG_UPDATE_2 (PHYCSYMCLK_CLOCK_CNTL ,
382404 PHYCSYMCLK_EN , 0 ,
383405 PHYCSYMCLK_SRC_SEL , 0 );
384- if (dccg -> ctx -> dc -> debug .root_clock_optimization .bits .physymclk )
385- REG_UPDATE (DCCG_GATE_DISABLE_CNTL2 ,
386- PHYCSYMCLK_ROOT_GATE_DISABLE , 0 );
387406 }
388407 break ;
389408 case 3 :
390409 if (force_enable ) {
391410 REG_UPDATE_2 (PHYDSYMCLK_CLOCK_CNTL ,
392411 PHYDSYMCLK_EN , 1 ,
393412 PHYDSYMCLK_SRC_SEL , clk_src );
394- if (dccg -> ctx -> dc -> debug .root_clock_optimization .bits .physymclk )
395- REG_UPDATE (DCCG_GATE_DISABLE_CNTL2 ,
396- PHYDSYMCLK_ROOT_GATE_DISABLE , 1 );
397413 } else {
398414 REG_UPDATE_2 (PHYDSYMCLK_CLOCK_CNTL ,
399415 PHYDSYMCLK_EN , 0 ,
400416 PHYDSYMCLK_SRC_SEL , 0 );
401- if (dccg -> ctx -> dc -> debug .root_clock_optimization .bits .physymclk )
402- REG_UPDATE (DCCG_GATE_DISABLE_CNTL2 ,
403- PHYDSYMCLK_ROOT_GATE_DISABLE , 0 );
404417 }
405418 break ;
406419 case 4 :
407420 if (force_enable ) {
408421 REG_UPDATE_2 (PHYESYMCLK_CLOCK_CNTL ,
409422 PHYESYMCLK_EN , 1 ,
410423 PHYESYMCLK_SRC_SEL , clk_src );
411- if (dccg -> ctx -> dc -> debug .root_clock_optimization .bits .physymclk )
412- REG_UPDATE (DCCG_GATE_DISABLE_CNTL2 ,
413- PHYESYMCLK_ROOT_GATE_DISABLE , 1 );
414424 } else {
415425 REG_UPDATE_2 (PHYESYMCLK_CLOCK_CNTL ,
416426 PHYESYMCLK_EN , 0 ,
417427 PHYESYMCLK_SRC_SEL , 0 );
418- if (dccg -> ctx -> dc -> debug .root_clock_optimization .bits .physymclk )
419- REG_UPDATE (DCCG_GATE_DISABLE_CNTL2 ,
420- PHYESYMCLK_ROOT_GATE_DISABLE , 0 );
421428 }
422429 break ;
423430 default :
@@ -490,8 +497,8 @@ void dccg35_init(struct dccg *dccg)
490497
491498 if (dccg -> ctx -> dc -> debug .root_clock_optimization .bits .physymclk )
492499 for (otg_inst = 0 ; otg_inst < 5 ; otg_inst ++ )
493- dccg35_set_physymclk (dccg , otg_inst ,
494- PHYSYMCLK_FORCE_SRC_SYMCLK , false);
500+ dccg35_set_physymclk_root_clock_gating (dccg , otg_inst ,
501+ false);
495502/*
496503 dccg35_enable_global_fgcg_rep(
497504 dccg, dccg->ctx->dc->debug.enable_fine_grain_clock_gating.bits
@@ -756,6 +763,7 @@ static const struct dccg_funcs dccg35_funcs = {
756763 .disable_symclk32_le = dccg31_disable_symclk32_le ,
757764 .set_symclk32_le_root_clock_gating = dccg31_set_symclk32_le_root_clock_gating ,
758765 .set_physymclk = dccg35_set_physymclk ,
766+ .set_physymclk_root_clock_gating = dccg35_set_physymclk_root_clock_gating ,
759767 .set_dtbclk_dto = dccg35_set_dtbclk_dto ,
760768 .set_audio_dtbclk_dto = dccg31_set_audio_dtbclk_dto ,
761769 .set_fifo_errdet_ovr_en = dccg2_set_fifo_errdet_ovr_en ,
0 commit comments