@@ -364,6 +364,21 @@ static SUNXI_CCU_M_DATA_WITH_MUX(apb1_clk, "apb1", apb1_parents, 0x524,
364364 24 , 3 , /* mux */
365365 0 ) ;
366366
367+ static const struct clk_parent_data mbus_parents [] = {
368+ { .hw = & pll_ddr_clk .common .hw },
369+ { .hw = & pll_periph1_600M_clk .hw },
370+ { .hw = & pll_periph1_480M_clk .common .hw },
371+ { .hw = & pll_periph1_400M_clk .hw },
372+ { .hw = & pll_periph1_150M_clk .hw },
373+ { .fw_name = "hosc" },
374+ };
375+ static SUNXI_CCU_MP_DATA_WITH_MUX_GATE_FEAT (mbus_clk , "mbus ", mbus_parents ,
376+ 0x540 ,
377+ 0 , 5 , /* M */
378+ 0 , 0 , /* no P */
379+ 24 , 3 , /* mux */
380+ BIT (31 ), /* gate */
381+ 0 , CCU_FEATURE_UPDATE_BIT );
367382
368383/**************************************************************************
369384 * mod clocks *
@@ -423,6 +438,18 @@ static SUNXI_CCU_M_HW_WITH_MUX_GATE(gpu_clk, "gpu", gpu_parents, 0x670,
423438 BIT (31 ), /* gate */
424439 CLK_SET_RATE_PARENT );
425440
441+ static const struct clk_parent_data ce_parents [] = {
442+ { .fw_name = "hosc" },
443+ { .hw = & pll_periph0_480M_clk .common .hw },
444+ { .hw = & pll_periph0_400M_clk .hw },
445+ { .hw = & pll_periph0_300M_clk .hw },
446+ };
447+ static SUNXI_CCU_M_DATA_WITH_MUX_GATE (ce_clk , "ce ", ce_parents , 0x680 ,
448+ 0 , 5 , /* M */
449+ 24 , 3 , /* mux */
450+ BIT (31 ), /* gate */
451+ 0 );
452+
426453static const struct clk_hw * ve_parents [] = {
427454 & pll_ve_clk .common .hw ,
428455 & pll_periph0_480M_clk .common .hw ,
@@ -435,6 +462,65 @@ static SUNXI_CCU_M_HW_WITH_MUX_GATE(ve_clk, "ve", ve_parents, 0x690,
435462 BIT (31 ), /* gate */
436463 CLK_SET_RATE_PARENT );
437464
465+ static const struct clk_parent_data hstimer_parents [] = {
466+ { .fw_name = "hosc" },
467+ { .fw_name = "iosc" },
468+ { .fw_name = "losc" },
469+ { .hw = & pll_periph0_200M_clk .hw },
470+ };
471+ static SUNXI_CCU_MP_DATA_WITH_MUX_GATE (hstimer0_clk , "hstimer0 ",
472+ hstimer_parents , 0x730 ,
473+ 0 , 0 , /* M */
474+ 0 , 3 , /* P */
475+ 24 , 3 , /* mux */
476+ BIT (31 ), /* gate */
477+ 0 );
478+
479+ static SUNXI_CCU_MP_DATA_WITH_MUX_GATE (hstimer1_clk , "hstimer1 ",
480+ hstimer_parents ,
481+ 0x734 ,
482+ 0 , 0 , /* M */
483+ 0 , 3 , /* P */
484+ 24 , 3 , /* mux */
485+ BIT (31 ), /* gate */
486+ 0 );
487+
488+ static SUNXI_CCU_MP_DATA_WITH_MUX_GATE (hstimer2_clk , "hstimer2 ",
489+ hstimer_parents ,
490+ 0x738 ,
491+ 0 , 0 , /* M */
492+ 0 , 3 , /* P */
493+ 24 , 3 , /* mux */
494+ BIT (31 ), /* gate */
495+ 0 );
496+
497+ static SUNXI_CCU_MP_DATA_WITH_MUX_GATE (hstimer3_clk , "hstimer3 ",
498+ hstimer_parents ,
499+ 0x73c ,
500+ 0 , 0 , /* M */
501+ 0 , 3 , /* P */
502+ 24 , 3 , /* mux */
503+ BIT (31 ), /* gate */
504+ 0 );
505+
506+ static SUNXI_CCU_MP_DATA_WITH_MUX_GATE (hstimer4_clk , "hstimer4 ",
507+ hstimer_parents ,
508+ 0x740 ,
509+ 0 , 0 , /* M */
510+ 0 , 3 , /* P */
511+ 24 , 3 , /* mux */
512+ BIT (31 ), /* gate */
513+ 0 );
514+
515+ static SUNXI_CCU_MP_DATA_WITH_MUX_GATE (hstimer5_clk , "hstimer5 ",
516+ hstimer_parents ,
517+ 0x744 ,
518+ 0 , 0 , /* M */
519+ 0 , 3 , /* P */
520+ 24 , 3 , /* mux */
521+ BIT (31 ), /* gate */
522+ 0 );
523+
438524static const struct clk_parent_data iommu_parents [] = {
439525 { .hw = & pll_periph0_600M_clk .hw },
440526 { .hw = & pll_ddr_clk .common .hw },
@@ -453,6 +539,34 @@ static SUNXI_CCU_MP_DATA_WITH_MUX_GATE_FEAT(iommu_clk, "iommu", iommu_parents,
453539 CLK_SET_RATE_PARENT ,
454540 CCU_FEATURE_UPDATE_BIT );
455541
542+ static const struct clk_parent_data dram_parents [] = {
543+ { .hw = & pll_ddr_clk .common .hw },
544+ { .hw = & pll_periph0_600M_clk .hw },
545+ { .hw = & pll_periph0_480M_clk .common .hw },
546+ { .hw = & pll_periph0_400M_clk .hw },
547+ { .hw = & pll_periph0_150M_clk .hw },
548+ };
549+ static SUNXI_CCU_MP_DATA_WITH_MUX_GATE_FEAT (dram_clk , "dram ", dram_parents ,
550+ 0x800 ,
551+ 0 , 5 , /* M */
552+ 0 , 0 , /* no P */
553+ 24 , 3 , /* mux */
554+ BIT (31 ), /* gate */
555+ CLK_IS_CRITICAL ,
556+ CCU_FEATURE_UPDATE_BIT ) ;
557+
558+ static const struct clk_parent_data losc_hosc_parents [] = {
559+ { .fw_name = "hosc" },
560+ { .fw_name = "losc" },
561+ };
562+
563+ static SUNXI_CCU_M_DATA_WITH_MUX_GATE (pcie_aux_clk , "pcie-aux" ,
564+ losc_hosc_parents , 0xaa0 ,
565+ 0 , 5 , /* M */
566+ 24 , 1 , /* mux */
567+ BIT (31 ), /* gate */
568+ 0 );
569+
456570static SUNXI_CCU_GATE_DATA (hdmi_24M_clk , "hdmi-24M" , osc24M , 0xb04 , BIT (31 ), 0 );
457571
458572static SUNXI_CCU_GATE_HWS_WITH_PREDIV (hdmi_cec_32k_clk , "hdmi-cec-32k" ,
@@ -596,12 +710,22 @@ static struct ccu_common *sun55i_a523_ccu_clks[] = {
596710 & ahb_clk .common ,
597711 & apb0_clk .common ,
598712 & apb1_clk .common ,
713+ & mbus_clk .common ,
599714 & de_clk .common ,
600715 & di_clk .common ,
601716 & g2d_clk .common ,
602717 & gpu_clk .common ,
718+ & ce_clk .common ,
603719 & ve_clk .common ,
720+ & hstimer0_clk .common ,
721+ & hstimer1_clk .common ,
722+ & hstimer2_clk .common ,
723+ & hstimer3_clk .common ,
724+ & hstimer4_clk .common ,
725+ & hstimer5_clk .common ,
604726 & iommu_clk .common ,
727+ & dram_clk .common ,
728+ & pcie_aux_clk .common ,
605729 & hdmi_24M_clk .common ,
606730 & hdmi_cec_32k_clk .common ,
607731 & hdmi_cec_clk .common ,
@@ -662,11 +786,22 @@ static struct clk_hw_onecell_data sun55i_a523_hw_clks = {
662786 [CLK_AHB ] = & ahb_clk .common .hw ,
663787 [CLK_APB0 ] = & apb0_clk .common .hw ,
664788 [CLK_APB1 ] = & apb1_clk .common .hw ,
789+ [CLK_MBUS ] = & mbus_clk .common .hw ,
665790 [CLK_DE ] = & de_clk .common .hw ,
666791 [CLK_DI ] = & di_clk .common .hw ,
667792 [CLK_G2D ] = & g2d_clk .common .hw ,
668793 [CLK_GPU ] = & gpu_clk .common .hw ,
794+ [CLK_CE ] = & ce_clk .common .hw ,
669795 [CLK_VE ] = & ve_clk .common .hw ,
796+ [CLK_HSTIMER0 ] = & hstimer0_clk .common .hw ,
797+ [CLK_HSTIMER1 ] = & hstimer1_clk .common .hw ,
798+ [CLK_HSTIMER2 ] = & hstimer2_clk .common .hw ,
799+ [CLK_HSTIMER3 ] = & hstimer3_clk .common .hw ,
800+ [CLK_HSTIMER4 ] = & hstimer4_clk .common .hw ,
801+ [CLK_HSTIMER5 ] = & hstimer5_clk .common .hw ,
802+ [CLK_IOMMU ] = & iommu_clk .common .hw ,
803+ [CLK_DRAM ] = & dram_clk .common .hw ,
804+ [CLK_PCIE_AUX ] = & pcie_aux_clk .common .hw ,
670805 [CLK_HDMI_24M ] = & hdmi_24M_clk .common .hw ,
671806 [CLK_HDMI_CEC_32K ] = & hdmi_cec_32k_clk .common .hw ,
672807 [CLK_HDMI_CEC ] = & hdmi_cec_clk .common .hw ,
0 commit comments