@@ -364,6 +364,208 @@ static SUNXI_CCU_M_DATA_WITH_MUX(apb1_clk, "apb1", apb1_parents, 0x524,
364364 24 , 3 , /* mux */
365365 0 ) ;
366366
367+
368+ /**************************************************************************
369+ * mod clocks *
370+ **************************************************************************/
371+
372+ static const struct clk_hw * de_parents [] = {
373+ & pll_periph0_300M_clk .hw ,
374+ & pll_periph0_400M_clk .hw ,
375+ & pll_video3_4x_clk .common .hw ,
376+ & pll_video3_3x_clk .hw ,
377+ };
378+
379+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (de_clk , "de ", de_parents , 0x600 ,
380+ 0 , 5 , /* M */
381+ 24 , 3 , /* mux */
382+ BIT (31 ), /* gate */
383+ CLK_SET_RATE_PARENT );
384+
385+ static const struct clk_hw * di_parents [] = {
386+ & pll_periph0_300M_clk .hw ,
387+ & pll_periph0_400M_clk .hw ,
388+ & pll_video0_4x_clk .common .hw ,
389+ & pll_video1_4x_clk .common .hw ,
390+ };
391+
392+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (di_clk , "di ", di_parents , 0x620 ,
393+ 0 , 5 , /* M */
394+ 24 , 3 , /* mux */
395+ BIT (31 ), /* gate */
396+ CLK_SET_RATE_PARENT );
397+
398+ static const struct clk_hw * g2d_parents [] = {
399+ & pll_periph0_400M_clk .hw ,
400+ & pll_periph0_300M_clk .hw ,
401+ & pll_video0_4x_clk .common .hw ,
402+ & pll_video1_4x_clk .common .hw ,
403+ };
404+
405+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (g2d_clk , "g2d ", g2d_parents , 0x630 ,
406+ 0 , 5 , /* M */
407+ 24 , 3 , /* mux */
408+ BIT (31 ), /* gate */
409+ 0 );
410+
411+ static const struct clk_hw * gpu_parents [] = {
412+ & pll_gpu_clk .common .hw ,
413+ & pll_periph0_800M_clk .common .hw ,
414+ & pll_periph0_600M_clk .hw ,
415+ & pll_periph0_400M_clk .hw ,
416+ & pll_periph0_300M_clk .hw ,
417+ & pll_periph0_200M_clk .hw ,
418+ };
419+
420+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (gpu_clk , "gpu ", gpu_parents , 0x670 ,
421+ 0 , 4 , /* M */
422+ 24 , 3 , /* mux */
423+ BIT (31 ), /* gate */
424+ CLK_SET_RATE_PARENT );
425+
426+ static const struct clk_hw * ve_parents [] = {
427+ & pll_ve_clk .common .hw ,
428+ & pll_periph0_480M_clk .common .hw ,
429+ & pll_periph0_400M_clk .hw ,
430+ & pll_periph0_300M_clk .hw ,
431+ };
432+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (ve_clk , "ve ", ve_parents , 0x690 ,
433+ 0 , 5 , /* M */
434+ 24 , 3 , /* mux */
435+ BIT (31 ), /* gate */
436+ CLK_SET_RATE_PARENT );
437+
438+ static const struct clk_parent_data iommu_parents [] = {
439+ { .hw = & pll_periph0_600M_clk .hw },
440+ { .hw = & pll_ddr_clk .common .hw },
441+ { .hw = & pll_periph0_480M_clk .common .hw },
442+ { .hw = & pll_periph0_400M_clk .hw },
443+ { .hw = & pll_periph0_150M_clk .hw },
444+ { .fw_name = "hosc" },
445+ };
446+
447+ static SUNXI_CCU_MP_DATA_WITH_MUX_GATE_FEAT (iommu_clk , "iommu ", iommu_parents ,
448+ 0x7b0 ,
449+ 0 , 5 , /* M */
450+ 0 , 0 , /* no P */
451+ 24 , 3 , /* mux */
452+ BIT (31 ), /* gate */
453+ CLK_SET_RATE_PARENT ,
454+ CCU_FEATURE_UPDATE_BIT );
455+
456+ static SUNXI_CCU_GATE_DATA (hdmi_24M_clk , "hdmi -24 M ", osc24M , 0xb04 , BIT (31 ), 0 );
457+
458+ static SUNXI_CCU_GATE_HWS_WITH_PREDIV (hdmi_cec_32k_clk , "hdmi - cec -32 k ",
459+ pll_periph0_2x_hws ,
460+ 0xb10 , BIT (30 ), 36621 , 0 );
461+
462+ static const struct clk_parent_data hdmi_cec_parents [] = {
463+ { .fw_name = "losc " },
464+ { .hw = & hdmi_cec_32k_clk .common .hw },
465+ };
466+ static SUNXI_CCU_MUX_DATA_WITH_GATE (hdmi_cec_clk , "hdmi - cec ", hdmi_cec_parents ,
467+ 0xb10 ,
468+ 24 , 1 , /* mux */
469+ BIT (31 ), /* gate */
470+ 0 );
471+
472+ static const struct clk_parent_data mipi_dsi_parents [] = {
473+ { .fw_name = "hosc " },
474+ { .hw = & pll_periph0_200M_clk .hw },
475+ { .hw = & pll_periph0_150M_clk .hw },
476+ };
477+ static SUNXI_CCU_M_DATA_WITH_MUX_GATE (mipi_dsi0_clk , "mipi - dsi0 ",
478+ mipi_dsi_parents , 0xb24 ,
479+ 0 , 5 , /* M */
480+ 24 , 3 , /* mux */
481+ BIT (31 ), /* gate */
482+ 0 );
483+
484+ static SUNXI_CCU_M_DATA_WITH_MUX_GATE (mipi_dsi1_clk , "mipi - dsi1 ",
485+ mipi_dsi_parents , 0xb28 ,
486+ 0 , 5 , /* M */
487+ 24 , 3 , /* mux */
488+ BIT (31 ), /* gate */
489+ 0 );
490+
491+ static const struct clk_hw * tcon_parents [] = {
492+ & pll_video0_4x_clk .common .hw ,
493+ & pll_video1_4x_clk .common .hw ,
494+ & pll_video2_4x_clk .common .hw ,
495+ & pll_video3_4x_clk .common .hw ,
496+ & pll_periph0_2x_clk .common .hw ,
497+ & pll_video0_3x_clk .hw ,
498+ & pll_video1_3x_clk .hw ,
499+ };
500+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (tcon_lcd0_clk , "tcon - lcd0 ", tcon_parents ,
501+ 0xb60 ,
502+ 0 , 5 , /* M */
503+ 24 , 3 , /* mux */
504+ BIT (31 ), /* gate */
505+ CLK_SET_RATE_PARENT );
506+
507+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (tcon_lcd1_clk , "tcon - lcd1 ", tcon_parents ,
508+ 0xb64 ,
509+ 0 , 5 , /* M */
510+ 24 , 3 , /* mux */
511+ BIT (31 ), /* gate */
512+ CLK_SET_RATE_PARENT );
513+
514+ static const struct clk_hw * tcon_tv_parents [] = {
515+ & pll_video0_4x_clk .common .hw ,
516+ & pll_video1_4x_clk .common .hw ,
517+ & pll_video2_4x_clk .common .hw ,
518+ & pll_video3_4x_clk .common .hw ,
519+ & pll_periph0_2x_clk .common .hw ,
520+ };
521+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (tcon_lcd2_clk , "tcon-lcd2" ,
522+ tcon_tv_parents , 0xb68 ,
523+ 0 , 5 , /* M */
524+ 24 , 3 , /* mux */
525+ BIT (31 ), /* gate */
526+ CLK_SET_RATE_PARENT );
527+
528+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (combophy_dsi0_clk , "combophy-dsi0" ,
529+ tcon_parents , 0xb6c ,
530+ 0 , 5 , /* M */
531+ 24 , 3 , /* mux */
532+ BIT (31 ), /* gate */
533+ CLK_SET_RATE_PARENT );
534+
535+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (combophy_dsi1_clk , "combophy-dsi1" ,
536+ tcon_parents , 0xb70 ,
537+ 0 , 5 , /* M */
538+ 24 , 3 , /* mux */
539+ BIT (31 ), /* gate */
540+ CLK_SET_RATE_PARENT );
541+
542+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (tcon_tv0_clk , "tcon-tv0" , tcon_tv_parents ,
543+ 0xb80 ,
544+ 0 , 4 , /* M */
545+ 24 , 3 , /* mux */
546+ BIT (31 ), /* gate */
547+ CLK_SET_RATE_PARENT );
548+
549+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (tcon_tv1_clk , "tcon-tv1" , tcon_tv_parents ,
550+ 0xb84 ,
551+ 0 , 4 , /* M */
552+ 24 , 3 , /* mux */
553+ BIT (31 ), /* gate */
554+ CLK_SET_RATE_PARENT );
555+
556+ static const struct clk_hw * edp_parents [] = {
557+ & pll_video0_4x_clk .common .hw ,
558+ & pll_video1_4x_clk .common .hw ,
559+ & pll_video2_4x_clk .common .hw ,
560+ & pll_video3_4x_clk .common .hw ,
561+ & pll_periph0_2x_clk .common .hw ,
562+ };
563+ static SUNXI_CCU_M_HW_WITH_MUX_GATE (edp_clk , "edp ", edp_parents , 0xbb0 ,
564+ 0 , 4 , /* M */
565+ 24 , 3 , /* mux */
566+ BIT (31 ), /* gate */
567+ CLK_SET_RATE_PARENT );
568+
367569/*
368570 * Contains all clocks that are controlled by a hardware register. They
369571 * have a (sunxi) .common member, which needs to be initialised by the common
@@ -394,6 +596,23 @@ static struct ccu_common *sun55i_a523_ccu_clks[] = {
394596 & ahb_clk .common ,
395597 & apb0_clk .common ,
396598 & apb1_clk .common ,
599+ & de_clk .common ,
600+ & di_clk .common ,
601+ & g2d_clk .common ,
602+ & gpu_clk .common ,
603+ & ve_clk .common ,
604+ & iommu_clk .common ,
605+ & hdmi_24M_clk .common ,
606+ & hdmi_cec_32k_clk .common ,
607+ & hdmi_cec_clk .common ,
608+ & mipi_dsi0_clk .common ,
609+ & mipi_dsi1_clk .common ,
610+ & tcon_lcd0_clk .common ,
611+ & tcon_lcd1_clk .common ,
612+ & tcon_lcd2_clk .common ,
613+ & tcon_tv0_clk .common ,
614+ & tcon_tv1_clk .common ,
615+ & edp_clk .common ,
397616};
398617
399618static struct clk_hw_onecell_data sun55i_a523_hw_clks = {
@@ -420,6 +639,7 @@ static struct clk_hw_onecell_data sun55i_a523_hw_clks = {
420639 [CLK_PLL_PERIPH1_200M ] = & pll_periph1_200M_clk .hw ,
421640 [CLK_PLL_PERIPH1_160M ] = & pll_periph1_160M_clk .hw ,
422641 [CLK_PLL_PERIPH1_150M ] = & pll_periph1_150M_clk .hw ,
642+ [CLK_PLL_GPU ] = & pll_gpu_clk .common .hw ,
423643 [CLK_PLL_VIDEO0_8X ] = & pll_video0_8x_clk .common .hw ,
424644 [CLK_PLL_VIDEO0_4X ] = & pll_video0_4x_clk .common .hw ,
425645 [CLK_PLL_VIDEO0_3X ] = & pll_video0_3x_clk .hw ,
@@ -442,6 +662,24 @@ static struct clk_hw_onecell_data sun55i_a523_hw_clks = {
442662 [CLK_AHB ] = & ahb_clk .common .hw ,
443663 [CLK_APB0 ] = & apb0_clk .common .hw ,
444664 [CLK_APB1 ] = & apb1_clk .common .hw ,
665+ [CLK_DE ] = & de_clk .common .hw ,
666+ [CLK_DI ] = & di_clk .common .hw ,
667+ [CLK_G2D ] = & g2d_clk .common .hw ,
668+ [CLK_GPU ] = & gpu_clk .common .hw ,
669+ [CLK_VE ] = & ve_clk .common .hw ,
670+ [CLK_HDMI_24M ] = & hdmi_24M_clk .common .hw ,
671+ [CLK_HDMI_CEC_32K ] = & hdmi_cec_32k_clk .common .hw ,
672+ [CLK_HDMI_CEC ] = & hdmi_cec_clk .common .hw ,
673+ [CLK_MIPI_DSI0 ] = & mipi_dsi0_clk .common .hw ,
674+ [CLK_MIPI_DSI1 ] = & mipi_dsi1_clk .common .hw ,
675+ [CLK_TCON_LCD0 ] = & tcon_lcd0_clk .common .hw ,
676+ [CLK_TCON_LCD1 ] = & tcon_lcd1_clk .common .hw ,
677+ [CLK_TCON_LCD2 ] = & tcon_lcd2_clk .common .hw ,
678+ [CLK_COMBOPHY_DSI0 ] = & combophy_dsi0_clk .common .hw ,
679+ [CLK_COMBOPHY_DSI1 ] = & combophy_dsi1_clk .common .hw ,
680+ [CLK_TCON_TV0 ] = & tcon_tv0_clk .common .hw ,
681+ [CLK_TCON_TV1 ] = & tcon_tv1_clk .common .hw ,
682+ [CLK_EDP ] = & edp_clk .common .hw ,
445683 },
446684};
447685
0 commit comments