@@ -492,6 +492,103 @@ static const struct samsung_cmu_info apm_cmu_info __initconst = {
492492 .clk_name = "dout_clkcmu_apm_bus" ,
493493};
494494
495+ /* ---- CMU_CMGP ------------------------------------------------------------ */
496+
497+ /* Register Offset definitions for CMU_CMGP (0x11c00000) */
498+ #define CLK_CON_MUX_CLK_CMGP_ADC 0x1000
499+ #define CLK_CON_MUX_MUX_CLK_CMGP_USI_CMGP0 0x1004
500+ #define CLK_CON_MUX_MUX_CLK_CMGP_USI_CMGP1 0x1008
501+ #define CLK_CON_DIV_DIV_CLK_CMGP_ADC 0x1800
502+ #define CLK_CON_DIV_DIV_CLK_CMGP_USI_CMGP0 0x1804
503+ #define CLK_CON_DIV_DIV_CLK_CMGP_USI_CMGP1 0x1808
504+ #define CLK_CON_GAT_GOUT_CMGP_ADC_PCLK_S0 0x200c
505+ #define CLK_CON_GAT_GOUT_CMGP_ADC_PCLK_S1 0x2010
506+ #define CLK_CON_GAT_GOUT_CMGP_GPIO_PCLK 0x2018
507+ #define CLK_CON_GAT_GOUT_CMGP_USI_CMGP0_IPCLK 0x2044
508+ #define CLK_CON_GAT_GOUT_CMGP_USI_CMGP0_PCLK 0x2048
509+ #define CLK_CON_GAT_GOUT_CMGP_USI_CMGP1_IPCLK 0x204c
510+ #define CLK_CON_GAT_GOUT_CMGP_USI_CMGP1_PCLK 0x2050
511+
512+ static const unsigned long cmgp_clk_regs [] __initconst = {
513+ CLK_CON_MUX_CLK_CMGP_ADC ,
514+ CLK_CON_MUX_MUX_CLK_CMGP_USI_CMGP0 ,
515+ CLK_CON_MUX_MUX_CLK_CMGP_USI_CMGP1 ,
516+ CLK_CON_DIV_DIV_CLK_CMGP_ADC ,
517+ CLK_CON_DIV_DIV_CLK_CMGP_USI_CMGP0 ,
518+ CLK_CON_DIV_DIV_CLK_CMGP_USI_CMGP1 ,
519+ CLK_CON_GAT_GOUT_CMGP_ADC_PCLK_S0 ,
520+ CLK_CON_GAT_GOUT_CMGP_ADC_PCLK_S1 ,
521+ CLK_CON_GAT_GOUT_CMGP_GPIO_PCLK ,
522+ CLK_CON_GAT_GOUT_CMGP_USI_CMGP0_IPCLK ,
523+ CLK_CON_GAT_GOUT_CMGP_USI_CMGP0_PCLK ,
524+ CLK_CON_GAT_GOUT_CMGP_USI_CMGP1_IPCLK ,
525+ CLK_CON_GAT_GOUT_CMGP_USI_CMGP1_PCLK ,
526+ };
527+
528+ /* List of parent clocks for Muxes in CMU_CMGP */
529+ PNAME (mout_cmgp_usi0_p ) = { "clk_rco_cmgp" , "gout_clkcmu_cmgp_bus" };
530+ PNAME (mout_cmgp_usi1_p ) = { "clk_rco_cmgp" , "gout_clkcmu_cmgp_bus" };
531+ PNAME (mout_cmgp_adc_p ) = { "oscclk" , "dout_cmgp_adc" };
532+
533+ static const struct samsung_fixed_rate_clock cmgp_fixed_clks [] __initconst = {
534+ FRATE (CLK_RCO_CMGP , "clk_rco_cmgp" , NULL , 0 , 49152000 ),
535+ };
536+
537+ static const struct samsung_mux_clock cmgp_mux_clks [] __initconst = {
538+ MUX (CLK_MOUT_CMGP_ADC , "mout_cmgp_adc" , mout_cmgp_adc_p ,
539+ CLK_CON_MUX_CLK_CMGP_ADC , 0 , 1 ),
540+ MUX (CLK_MOUT_CMGP_USI0 , "mout_cmgp_usi0" , mout_cmgp_usi0_p ,
541+ CLK_CON_MUX_MUX_CLK_CMGP_USI_CMGP0 , 0 , 1 ),
542+ MUX (CLK_MOUT_CMGP_USI1 , "mout_cmgp_usi1" , mout_cmgp_usi1_p ,
543+ CLK_CON_MUX_MUX_CLK_CMGP_USI_CMGP1 , 0 , 1 ),
544+ };
545+
546+ static const struct samsung_div_clock cmgp_div_clks [] __initconst = {
547+ DIV (CLK_DOUT_CMGP_ADC , "dout_cmgp_adc" , "gout_clkcmu_cmgp_bus" ,
548+ CLK_CON_DIV_DIV_CLK_CMGP_ADC , 0 , 4 ),
549+ DIV (CLK_DOUT_CMGP_USI0 , "dout_cmgp_usi0" , "mout_cmgp_usi0" ,
550+ CLK_CON_DIV_DIV_CLK_CMGP_USI_CMGP0 , 0 , 5 ),
551+ DIV (CLK_DOUT_CMGP_USI1 , "dout_cmgp_usi1" , "mout_cmgp_usi1" ,
552+ CLK_CON_DIV_DIV_CLK_CMGP_USI_CMGP1 , 0 , 5 ),
553+ };
554+
555+ static const struct samsung_gate_clock cmgp_gate_clks [] __initconst = {
556+ GATE (CLK_GOUT_CMGP_ADC_S0_PCLK , "gout_adc_s0_pclk" ,
557+ "gout_clkcmu_cmgp_bus" ,
558+ CLK_CON_GAT_GOUT_CMGP_ADC_PCLK_S0 , 21 , 0 , 0 ),
559+ GATE (CLK_GOUT_CMGP_ADC_S1_PCLK , "gout_adc_s1_pclk" ,
560+ "gout_clkcmu_cmgp_bus" ,
561+ CLK_CON_GAT_GOUT_CMGP_ADC_PCLK_S1 , 21 , 0 , 0 ),
562+ GATE (CLK_GOUT_CMGP_GPIO_PCLK , "gout_gpio_cmgp_pclk" ,
563+ "gout_clkcmu_cmgp_bus" ,
564+ CLK_CON_GAT_GOUT_CMGP_GPIO_PCLK , 21 , 0 , 0 ),
565+ GATE (CLK_GOUT_CMGP_USI0_IPCLK , "gout_cmgp_usi0_ipclk" , "dout_cmgp_usi0" ,
566+ CLK_CON_GAT_GOUT_CMGP_USI_CMGP0_IPCLK , 21 , 0 , 0 ),
567+ GATE (CLK_GOUT_CMGP_USI0_PCLK , "gout_cmgp_usi0_pclk" ,
568+ "gout_clkcmu_cmgp_bus" ,
569+ CLK_CON_GAT_GOUT_CMGP_USI_CMGP0_PCLK , 21 , 0 , 0 ),
570+ GATE (CLK_GOUT_CMGP_USI1_IPCLK , "gout_cmgp_usi1_ipclk" , "dout_cmgp_usi1" ,
571+ CLK_CON_GAT_GOUT_CMGP_USI_CMGP1_IPCLK , 21 , 0 , 0 ),
572+ GATE (CLK_GOUT_CMGP_USI1_PCLK , "gout_cmgp_usi1_pclk" ,
573+ "gout_clkcmu_cmgp_bus" ,
574+ CLK_CON_GAT_GOUT_CMGP_USI_CMGP1_PCLK , 21 , 0 , 0 ),
575+ };
576+
577+ static const struct samsung_cmu_info cmgp_cmu_info __initconst = {
578+ .mux_clks = cmgp_mux_clks ,
579+ .nr_mux_clks = ARRAY_SIZE (cmgp_mux_clks ),
580+ .div_clks = cmgp_div_clks ,
581+ .nr_div_clks = ARRAY_SIZE (cmgp_div_clks ),
582+ .gate_clks = cmgp_gate_clks ,
583+ .nr_gate_clks = ARRAY_SIZE (cmgp_gate_clks ),
584+ .fixed_clks = cmgp_fixed_clks ,
585+ .nr_fixed_clks = ARRAY_SIZE (cmgp_fixed_clks ),
586+ .nr_clk_ids = CMGP_NR_CLK ,
587+ .clk_regs = cmgp_clk_regs ,
588+ .nr_clk_regs = ARRAY_SIZE (cmgp_clk_regs ),
589+ .clk_name = "gout_clkcmu_cmgp_bus" ,
590+ };
591+
495592/* ---- CMU_HSI ------------------------------------------------------------- */
496593
497594/* Register Offset definitions for CMU_HSI (0x13400000) */
@@ -943,6 +1040,9 @@ static const struct of_device_id exynos850_cmu_of_match[] = {
9431040 {
9441041 .compatible = "samsung,exynos850-cmu-apm" ,
9451042 .data = & apm_cmu_info ,
1043+ }, {
1044+ .compatible = "samsung,exynos850-cmu-cmgp" ,
1045+ .data = & cmgp_cmu_info ,
9461046 }, {
9471047 .compatible = "samsung,exynos850-cmu-hsi" ,
9481048 .data = & hsi_cmu_info ,
0 commit comments