Merge branches 'clk-cleanup', 'clk-renesas', 'clk-mediatek', 'clk-samsung' and 'clk-socfpga' into clk-next

- Support for 5L35023 variant of Versa 3 clock generator

* clk-cleanup:
clk: analogbits: Fix incorrect calculation of vco rate delta
clk: Use str_enable_disable-like helpers
clk: clk-loongson2: Switch to use devm_clk_hw_register_fixed_rate_parent_data()
clk: starfive: Make _clk_get become a common helper function
clk: ep93xx: make const read-only arrays static
clk: lmk04832: make read-only const arrays static
clk: ti: use kcalloc() instead of kzalloc()
dt-bindings: clock: st,stm32mp1-rcc: complete the reference path
dt-bindings: clock: st,stm32mp1-rcc: fix reference paths
dt-bindings: clock: ti: Convert composite.txt to json-schema
dt-bindings: clock: ti: Convert gate.txt to json-schema
clk: Drop obsolete devm_clk_bulk_get_all_enable() helper
PCI: exynos: Switch to devm_clk_bulk_get_all_enabled()
soc: mediatek: pwrap: Switch to devm_clk_bulk_get_all_enabled()
clk: davinci: remove platform data struct
clk: fix an OF node reference leak in of_clk_get_parent_name()
clk: mmp: pxa1908-apbc: Fix NULL vs IS_ERR() check
clk: mmp: pxa1908-apbcp: Fix a NULL vs IS_ERR() check
clk: mmp: pxa1908-mpmu: Fix a NULL vs IS_ERR() check

* clk-renesas: (24 commits)
dt-bindings: clock: renesas,r9a08g045-vbattb: Fix include guard
clk: renesas: r9a09g057: Add clock and reset entries for GIC
clk: renesas: r9a09g057: Add reset entry for SYS
clk: renesas: r8a779g0: Add VSPX clocks
clk: renesas: r8a779g0: Add FCPVX clocks
clk: renesas: r9a09g047: Add I2C clocks/resets
clk: renesas: r9a09g047: Add CA55 core clocks
clk: renesas: rzv2h: Add support for RZ/G3E SoC
clk: renesas: rzv2h: Add MSTOP support
dt-bindings: clock: renesas: Document RZ/G3E SoC CPG
dt-bindings: soc: renesas: Document RZ/G3E SMARC SoM and Carrier-II EVK
dt-bindings: soc: renesas: Document Renesas RZ/G3E SoC variants
clk: versaclock3: Add support for the 5L35023 variant
dt-bindings: clock: versaclock3: Document 5L35023 Versa3 clock generator
clk: versaclock3: Prepare for the addition of 5L35023 device
clk: renesas: r9a08g045: Add clocks, resets and power domain support for the ADC IP
clk: renesas: r8a779h0: Add display clocks
clk: renesas: r9a09g057: Add support for PLLVDO, CRU clocks, and resets
clk: renesas: rzv2h: Add selective Runtime PM support for clocks
clk: renesas: r9a06g032: Use BIT macro consistently
...

* clk-mediatek:
clk: ralink: mtmips: remove duplicated 'xtal' clock for Ralink SoC RT3883
clk: mediatek: mt2701-img: add missing dummy clk
clk: mediatek: mt2701-mm: add missing dummy clk
clk: mediatek: mt2701-bdp: add missing dummy clk
clk: mediatek: mt2701-aud: fix conversion to mtk_clk_simple_probe
clk: mediatek: mt2701-vdec: fix conversion to mtk_clk_simple_probe

* clk-samsung:
clk: samsung: Introduce Exynos990 clock controller driver
clk: samsung: clk-pll: Add support for pll_{0717x, 0718x, 0732x}
dt-bindings: clock: samsung: Add Exynos990 SoC CMU bindings

* clk-socfpga:
clk: socfpga: arria10: Optimize local variables in clk_pll_recalc_rate()

+2420 -104
+1
Documentation/devicetree/bindings/clock/renesas,5p35023.yaml
··· 31 31 properties: 32 32 compatible: 33 33 enum: 34 + - renesas,5l35023 34 35 - renesas,5p35023 35 36 36 37 reg:
+9 -6
Documentation/devicetree/bindings/clock/renesas,rzv2h-cpg.yaml
··· 4 4 $id: http://devicetree.org/schemas/clock/renesas,rzv2h-cpg.yaml# 5 5 $schema: http://devicetree.org/meta-schemas/core.yaml# 6 6 7 - title: Renesas RZ/V2H(P) Clock Pulse Generator (CPG) 7 + title: Renesas RZ/{G3E,V2H(P)} Clock Pulse Generator (CPG) 8 8 9 9 maintainers: 10 10 - Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> 11 11 12 12 description: 13 - On Renesas RZ/V2H(P) SoCs, the CPG (Clock Pulse Generator) handles generation 14 - and control of clock signals for the IP modules, generation and control of resets, 15 - and control over booting, low power consumption and power supply domains. 13 + On Renesas RZ/{G3E,V2H(P)} SoCs, the CPG (Clock Pulse Generator) handles 14 + generation and control of clock signals for the IP modules, generation and 15 + control of resets, and control over booting, low power consumption and power 16 + supply domains. 16 17 17 18 properties: 18 19 compatible: 19 - const: renesas,r9a09g057-cpg 20 + enum: 21 + - renesas,r9a09g047-cpg # RZ/G3E 22 + - renesas,r9a09g057-cpg # RZ/V2H 20 23 21 24 reg: 22 25 maxItems: 1 ··· 40 37 description: | 41 38 - For CPG core clocks, the two clock specifier cells must be "CPG_CORE" 42 39 and a core clock reference, as defined in 43 - <dt-bindings/clock/renesas,r9a09g057-cpg.h>, 40 + <dt-bindings/clock/renesas,r9a09g0*-cpg.h>, 44 41 - For module clocks, the two clock specifier cells must be "CPG_MOD" and 45 42 a module number. The module number is calculated as the CLKON register 46 43 offset index multiplied by 16, plus the actual bit in the register
+121
Documentation/devicetree/bindings/clock/samsung,exynos990-clock.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/clock/samsung,exynos990-clock.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Samsung Exynos990 SoC clock controller 8 + 9 + maintainers: 10 + - Igor Belwon <igor.belwon@mentallysanemainliners.org> 11 + - Chanwoo Choi <cw00.choi@samsung.com> 12 + - Krzysztof Kozlowski <krzk@kernel.org> 13 + 14 + description: | 15 + Exynos990 clock controller is comprised of several CMU units, generating 16 + clocks for different domains. Those CMU units are modeled as separate device 17 + tree nodes, and might depend on each other. The root clock in that root tree 18 + is an external clock: OSCCLK (26 MHz). This external clock must be defined 19 + as a fixed-rate clock in dts. 20 + 21 + CMU_TOP is a top-level CMU, where all base clocks are prepared using PLLs and 22 + dividers; all other clocks of function blocks (other CMUs) are usually 23 + derived from CMU_TOP. 24 + 25 + Each clock is assigned an identifier and client nodes can use this identifier 26 + to specify the clock which they consume. All clocks available for usage 27 + in clock consumer nodes are defined as preprocessor macros in 28 + 'include/dt-bindings/clock/samsung,exynos990.h' header. 29 + 30 + properties: 31 + compatible: 32 + enum: 33 + - samsung,exynos990-cmu-hsi0 34 + - samsung,exynos990-cmu-top 35 + 36 + clocks: 37 + minItems: 1 38 + maxItems: 5 39 + 40 + clock-names: 41 + minItems: 1 42 + maxItems: 5 43 + 44 + "#clock-cells": 45 + const: 1 46 + 47 + reg: 48 + maxItems: 1 49 + 50 + required: 51 + - compatible 52 + - clocks 53 + - clock-names 54 + - "#clock-cells" 55 + - reg 56 + 57 + allOf: 58 + - if: 59 + properties: 60 + compatible: 61 + contains: 62 + const: samsung,exynos990-cmu-hsi0 63 + 64 + then: 65 + properties: 66 + clocks: 67 + items: 68 + - description: External reference clock (26 MHz) 69 + - description: CMU_HSI0 BUS clock (from CMU_TOP) 70 + - description: CMU_HSI0 USB31DRD clock (from CMU_TOP) 71 + - description: CMU_HSI0 USBDP_DEBUG clock (from CMU_TOP) 72 + - description: CMU_HSI0 DPGTC clock (from CMU_TOP) 73 + 74 + clock-names: 75 + items: 76 + - const: oscclk 77 + - const: bus 78 + - const: usb31drd 79 + - const: usbdp_debug 80 + - const: dpgtc 81 + 82 + - if: 83 + properties: 84 + compatible: 85 + contains: 86 + const: samsung,exynos990-cmu-top 87 + 88 + then: 89 + properties: 90 + clocks: 91 + items: 92 + - description: External reference clock (26 MHz) 93 + 94 + clock-names: 95 + items: 96 + - const: oscclk 97 + 98 + additionalProperties: false 99 + 100 + examples: 101 + - | 102 + #include <dt-bindings/clock/samsung,exynos990.h> 103 + 104 + cmu_hsi0: clock-controller@10a00000 { 105 + compatible = "samsung,exynos990-cmu-hsi0"; 106 + reg = <0x10a00000 0x8000>; 107 + #clock-cells = <1>; 108 + 109 + clocks = <&oscclk>, 110 + <&cmu_top CLK_DOUT_CMU_HSI0_BUS>, 111 + <&cmu_top CLK_DOUT_CMU_HSI0_USB31DRD>, 112 + <&cmu_top CLK_DOUT_CMU_HSI0_USBDP_DEBUG>, 113 + <&cmu_top CLK_DOUT_CMU_HSI0_DPGTC>; 114 + clock-names = "oscclk", 115 + "bus", 116 + "usb31drd", 117 + "usbdp_debug", 118 + "dpgtc"; 119 + }; 120 + 121 + ...
+17
Documentation/devicetree/bindings/soc/renesas/renesas.yaml
··· 525 525 - renesas,rzv2mevk2 # RZ/V2M Eval Board v2.0 526 526 - const: renesas,r9a09g011 527 527 528 + - description: RZ/G3E (R9A09G047) 529 + items: 530 + - enum: 531 + - renesas,smarc2-evk # RZ SMARC Carrier-II EVK 532 + - enum: 533 + - renesas,rzg3e-smarcm # RZ/G3E SMARC Module (SoM) 534 + - enum: 535 + - renesas,r9a09g047e27 # Dual Cortex-A55 + Cortex-M33 (15mm BGA) 536 + - renesas,r9a09g047e28 # Dual Cortex-A55 + Cortex-M33 (21mm BGA) 537 + - renesas,r9a09g047e37 # Dual Cortex-A55 + Cortex-M33 + Ethos-U55 (15mm BGA) 538 + - renesas,r9a09g047e38 # Dual Cortex-A55 + Cortex-M33 + Ethos-U55 (21mm BGA) 539 + - renesas,r9a09g047e47 # Quad Cortex-A55 + Cortex-M33 (15mm BGA) 540 + - renesas,r9a09g047e48 # Quad Cortex-A55 + Cortex-M33 (21mm BGA) 541 + - renesas,r9a09g047e57 # Quad Cortex-A55 + Cortex-M33 + Ethos-U55 (15mm BGA) 542 + - renesas,r9a09g047e58 # Quad Cortex-A55 + Cortex-M33 + Ethos-U55 (21mm BGA) 543 + - const: renesas,r9a09g047 544 + 528 545 - description: RZ/V2H(P) (R9A09G057) 529 546 items: 530 547 - enum:
+49 -18
drivers/clk/clk-versaclock3.c
··· 78 78 #define VC3_PLL1_VCO_MIN 300000000UL 79 79 #define VC3_PLL1_VCO_MAX 600000000UL 80 80 81 - #define VC3_PLL2_VCO_MIN 400000000UL 82 - #define VC3_PLL2_VCO_MAX 1200000000UL 83 - 84 81 #define VC3_PLL3_VCO_MIN 300000000UL 85 82 #define VC3_PLL3_VCO_MAX 800000000UL 86 83 ··· 144 147 u8 mdiv2_bitmsk; 145 148 }; 146 149 150 + struct vc3_vco { 151 + unsigned long min; 152 + unsigned long max; 153 + }; 154 + 147 155 struct vc3_pll_data { 148 - unsigned long vco_min; 149 - unsigned long vco_max; 156 + struct vc3_vco vco; 150 157 u8 num; 151 158 u8 int_div_msb_offs; 152 159 u8 int_div_lsb_offs; ··· 167 166 struct vc3_hw_data { 168 167 struct clk_hw hw; 169 168 struct regmap *regmap; 170 - const void *data; 169 + void *data; 171 170 172 171 u32 div_int; 173 172 u32 div_frc; 173 + }; 174 + 175 + struct vc3_hw_cfg { 176 + struct vc3_vco pll2_vco; 177 + u32 se2_clk_sel_msk; 174 178 }; 175 179 176 180 static const struct clk_div_table div1_divs[] = { ··· 392 386 const struct vc3_pll_data *pll = vc3->data; 393 387 u64 div_frc; 394 388 395 - if (rate < pll->vco_min) 396 - rate = pll->vco_min; 397 - if (rate > pll->vco_max) 398 - rate = pll->vco_max; 389 + if (rate < pll->vco.min) 390 + rate = pll->vco.min; 391 + if (rate > pll->vco.max) 392 + rate = pll->vco.max; 399 393 400 394 vc3->div_int = rate / *parent_rate; 401 395 ··· 686 680 .num = VC3_PLL1, 687 681 .int_div_msb_offs = VC3_PLL1_LOOP_FILTER_N_DIV_MSB, 688 682 .int_div_lsb_offs = VC3_PLL1_VCO_N_DIVIDER, 689 - .vco_min = VC3_PLL1_VCO_MIN, 690 - .vco_max = VC3_PLL1_VCO_MAX 683 + .vco = { 684 + .min = VC3_PLL1_VCO_MIN, 685 + .max = VC3_PLL1_VCO_MAX 686 + } 691 687 }, 692 688 .hw.init = &(struct clk_init_data) { 693 689 .name = "pll1", ··· 706 698 .num = VC3_PLL2, 707 699 .int_div_msb_offs = VC3_PLL2_FB_INT_DIV_MSB, 708 700 .int_div_lsb_offs = VC3_PLL2_FB_INT_DIV_LSB, 709 - .vco_min = VC3_PLL2_VCO_MIN, 710 - .vco_max = VC3_PLL2_VCO_MAX 711 701 }, 712 702 .hw.init = &(struct clk_init_data) { 713 703 .name = "pll2", ··· 722 716 .num = VC3_PLL3, 723 717 .int_div_msb_offs = VC3_PLL3_LOOP_FILTER_N_DIV_MSB, 724 718 .int_div_lsb_offs = VC3_PLL3_N_DIVIDER, 725 - .vco_min = VC3_PLL3_VCO_MIN, 726 - .vco_max = VC3_PLL3_VCO_MAX 719 + .vco = { 720 + .min = VC3_PLL3_VCO_MIN, 721 + .max = VC3_PLL3_VCO_MAX 722 + } 727 723 }, 728 724 .hw.init = &(struct clk_init_data) { 729 725 .name = "pll3", ··· 909 901 [VC3_SE2_MUX] = { 910 902 .data = &(struct vc3_clk_data) { 911 903 .offs = VC3_SE2_CTRL_REG0, 912 - .bitmsk = VC3_SE2_CTRL_REG0_SE2_CLK_SEL 913 904 }, 914 905 .hw.init = &(struct clk_init_data) { 915 906 .name = "se2_mux", ··· 989 982 { 990 983 struct device *dev = &client->dev; 991 984 u8 settings[NUM_CONFIG_REGISTERS]; 985 + const struct vc3_hw_cfg *data; 992 986 struct regmap *regmap; 993 987 const char *name; 994 988 int ret, i; ··· 1037 1029 clk_pfd[i].hw.init->name); 1038 1030 } 1039 1031 1032 + data = i2c_get_match_data(client); 1033 + 1040 1034 /* Register pll's */ 1041 1035 for (i = 0; i < ARRAY_SIZE(clk_pll); i++) { 1042 1036 clk_pll[i].regmap = regmap; 1037 + if (i == VC3_PLL2) { 1038 + struct vc3_pll_data *pll_data = clk_pll[i].data; 1039 + 1040 + pll_data->vco = data->pll2_vco; 1041 + } 1043 1042 ret = devm_clk_hw_register(dev, &clk_pll[i].hw); 1044 1043 if (ret) 1045 1044 return dev_err_probe(dev, ret, "%s failed\n", ··· 1074 1059 /* Register clk muxes */ 1075 1060 for (i = 0; i < ARRAY_SIZE(clk_mux); i++) { 1076 1061 clk_mux[i].regmap = regmap; 1062 + if (i == VC3_SE2_MUX) { 1063 + struct vc3_clk_data *clk_data = clk_mux[i].data; 1064 + 1065 + clk_data->bitmsk = data->se2_clk_sel_msk; 1066 + } 1077 1067 ret = devm_clk_hw_register(dev, &clk_mux[i].hw); 1078 1068 if (ret) 1079 1069 return dev_err_probe(dev, ret, "%s failed\n", ··· 1128 1108 return ret; 1129 1109 } 1130 1110 1111 + static const struct vc3_hw_cfg vc3_5p = { 1112 + .pll2_vco = { .min = 400000000UL, .max = 1200000000UL }, 1113 + .se2_clk_sel_msk = BIT(6), 1114 + }; 1115 + 1116 + static const struct vc3_hw_cfg vc3_5l = { 1117 + .pll2_vco = { .min = 30000000UL, .max = 130000000UL }, 1118 + .se2_clk_sel_msk = BIT(0), 1119 + }; 1120 + 1131 1121 static const struct of_device_id dev_ids[] = { 1132 - { .compatible = "renesas,5p35023" }, 1122 + { .compatible = "renesas,5p35023", .data = &vc3_5p }, 1123 + { .compatible = "renesas,5l35023", .data = &vc3_5l }, 1133 1124 { /* Sentinel */ } 1134 1125 }; 1135 1126 MODULE_DEVICE_TABLE(of, dev_ids);
+10
drivers/clk/mediatek/clk-mt2701-aud.c
··· 55 55 GATE_DUMMY(CLK_DUMMY, "aud_dummy"), 56 56 /* AUDIO0 */ 57 57 GATE_AUDIO0(CLK_AUD_AFE, "audio_afe", "aud_intbus_sel", 2), 58 + GATE_DUMMY(CLK_AUD_LRCK_DETECT, "audio_lrck_detect_dummy"), 59 + GATE_DUMMY(CLK_AUD_I2S, "audio_i2c_dummy"), 60 + GATE_DUMMY(CLK_AUD_APLL_TUNER, "audio_apll_tuner_dummy"), 58 61 GATE_AUDIO0(CLK_AUD_HDMI, "audio_hdmi", "audpll_sel", 20), 59 62 GATE_AUDIO0(CLK_AUD_SPDF, "audio_spdf", "audpll_sel", 21), 60 63 GATE_AUDIO0(CLK_AUD_SPDF2, "audio_spdf2", "audpll_sel", 22), 61 64 GATE_AUDIO0(CLK_AUD_APLL, "audio_apll", "audpll_sel", 23), 65 + GATE_DUMMY(CLK_AUD_TML, "audio_tml_dummy"), 66 + GATE_DUMMY(CLK_AUD_AHB_IDLE_EXT, "audio_ahb_idle_ext_dummy"), 67 + GATE_DUMMY(CLK_AUD_AHB_IDLE_INT, "audio_ahb_idle_int_dummy"), 62 68 /* AUDIO1 */ 63 69 GATE_AUDIO1(CLK_AUD_I2SIN1, "audio_i2sin1", "aud_mux1_sel", 0), 64 70 GATE_AUDIO1(CLK_AUD_I2SIN2, "audio_i2sin2", "aud_mux1_sel", 1), ··· 82 76 GATE_AUDIO1(CLK_AUD_ASRCI2, "audio_asrci2", "asm_h_sel", 13), 83 77 GATE_AUDIO1(CLK_AUD_ASRCO1, "audio_asrco1", "asm_h_sel", 14), 84 78 GATE_AUDIO1(CLK_AUD_ASRCO2, "audio_asrco2", "asm_h_sel", 15), 79 + GATE_DUMMY(CLK_AUD_HDMIRX, "audio_hdmirx_dummy"), 85 80 GATE_AUDIO1(CLK_AUD_INTDIR, "audio_intdir", "intdir_sel", 20), 86 81 GATE_AUDIO1(CLK_AUD_A1SYS, "audio_a1sys", "aud_mux1_sel", 21), 87 82 GATE_AUDIO1(CLK_AUD_A2SYS, "audio_a2sys", "aud_mux2_sel", 22), 88 83 GATE_AUDIO1(CLK_AUD_AFE_CONN, "audio_afe_conn", "aud_mux1_sel", 23), 84 + GATE_DUMMY(CLK_AUD_AFE_PCMIF, "audio_afe_pcmif_dummy"), 89 85 GATE_AUDIO1(CLK_AUD_AFE_MRGIF, "audio_afe_mrgif", "aud_mux1_sel", 25), 90 86 /* AUDIO2 */ 91 87 GATE_AUDIO2(CLK_AUD_MMIF_UL1, "audio_ul1", "aud_mux1_sel", 0), ··· 108 100 GATE_AUDIO2(CLK_AUD_MMIF_AWB2, "audio_awb2", "aud_mux1_sel", 15), 109 101 GATE_AUDIO2(CLK_AUD_MMIF_DAI, "audio_dai", "aud_mux1_sel", 16), 110 102 /* AUDIO3 */ 103 + GATE_DUMMY(CLK_AUD_DMIC1, "audio_dmic1_dummy"), 104 + GATE_DUMMY(CLK_AUD_DMIC2, "audio_dmic2_dummy"), 111 105 GATE_AUDIO3(CLK_AUD_ASRCI3, "audio_asrci3", "asm_h_sel", 2), 112 106 GATE_AUDIO3(CLK_AUD_ASRCI4, "audio_asrci4", "asm_h_sel", 3), 113 107 GATE_AUDIO3(CLK_AUD_ASRCI5, "audio_asrci5", "asm_h_sel", 4),
+1
drivers/clk/mediatek/clk-mt2701-bdp.c
··· 31 31 GATE_MTK(_id, _name, _parent, &bdp1_cg_regs, _shift, &mtk_clk_gate_ops_setclr_inv) 32 32 33 33 static const struct mtk_gate bdp_clks[] = { 34 + GATE_DUMMY(CLK_DUMMY, "bdp_dummy"), 34 35 GATE_BDP0(CLK_BDP_BRG_BA, "brg_baclk", "mm_sel", 0), 35 36 GATE_BDP0(CLK_BDP_BRG_DRAM, "brg_dram", "mm_sel", 1), 36 37 GATE_BDP0(CLK_BDP_LARB_DRAM, "larb_dram", "mm_sel", 2),
+1
drivers/clk/mediatek/clk-mt2701-img.c
··· 22 22 GATE_MTK(_id, _name, _parent, &img_cg_regs, _shift, &mtk_clk_gate_ops_setclr) 23 23 24 24 static const struct mtk_gate img_clks[] = { 25 + GATE_DUMMY(CLK_DUMMY, "img_dummy"), 25 26 GATE_IMG(CLK_IMG_SMI_COMM, "img_smi_comm", "mm_sel", 0), 26 27 GATE_IMG(CLK_IMG_RESZ, "img_resz", "mm_sel", 1), 27 28 GATE_IMG(CLK_IMG_JPGDEC_SMI, "img_jpgdec_smi", "mm_sel", 5),
+1
drivers/clk/mediatek/clk-mt2701-mm.c
··· 31 31 GATE_MTK(_id, _name, _parent, &disp1_cg_regs, _shift, &mtk_clk_gate_ops_setclr) 32 32 33 33 static const struct mtk_gate mm_clks[] = { 34 + GATE_DUMMY(CLK_DUMMY, "mm_dummy"), 34 35 GATE_DISP0(CLK_MM_SMI_COMMON, "mm_smi_comm", "mm_sel", 0), 35 36 GATE_DISP0(CLK_MM_SMI_LARB0, "mm_smi_larb0", "mm_sel", 1), 36 37 GATE_DISP0(CLK_MM_CMDQ, "mm_cmdq", "mm_sel", 2),
+1
drivers/clk/mediatek/clk-mt2701-vdec.c
··· 31 31 GATE_MTK(_id, _name, _parent, &vdec1_cg_regs, _shift, &mtk_clk_gate_ops_setclr_inv) 32 32 33 33 static const struct mtk_gate vdec_clks[] = { 34 + GATE_DUMMY(CLK_DUMMY, "vdec_dummy"), 34 35 GATE_VDEC0(CLK_VDEC_CKGEN, "vdec_cken", "vdec_sel", 0), 35 36 GATE_VDEC1(CLK_VDEC_LARB, "vdec_larb_cken", "mm_sel", 0), 36 37 };
-1
drivers/clk/ralink/clk-mtmips.c
··· 266 266 } 267 267 268 268 static struct mtmips_clk_fixed rt3883_fixed_clocks[] = { 269 - CLK_FIXED("xtal", NULL, 40000000), 270 269 CLK_FIXED("periph", "xtal", 40000000) 271 270 }; 272 271
+6 -1
drivers/clk/renesas/Kconfig
··· 40 40 select CLK_R9A07G054 if ARCH_R9A07G054 41 41 select CLK_R9A08G045 if ARCH_R9A08G045 42 42 select CLK_R9A09G011 if ARCH_R9A09G011 43 + select CLK_R9A09G047 if ARCH_R9A09G047 43 44 select CLK_R9A09G057 if ARCH_R9A09G057 44 45 select CLK_SH73A0 if ARCH_SH73A0 45 46 ··· 195 194 bool "RZ/V2M clock support" if COMPILE_TEST 196 195 select CLK_RZG2L 197 196 197 + config CLK_R9A09G047 198 + bool "RZ/G3E clock support" if COMPILE_TEST 199 + select CLK_RZV2H 200 + 198 201 config CLK_R9A09G057 199 202 bool "RZ/V2H(P) clock support" if COMPILE_TEST 200 203 select CLK_RZV2H ··· 239 234 select RESET_CONTROLLER 240 235 241 236 config CLK_RZV2H 242 - bool "RZ/V2H(P) family clock support" if COMPILE_TEST 237 + bool "RZ/{G3E,V2H(P)} family clock support" if COMPILE_TEST 243 238 select RESET_CONTROLLER 244 239 245 240 config CLK_RENESAS_VBATTB
+1
drivers/clk/renesas/Makefile
··· 37 37 obj-$(CONFIG_CLK_R9A07G054) += r9a07g044-cpg.o 38 38 obj-$(CONFIG_CLK_R9A08G045) += r9a08g045-cpg.o 39 39 obj-$(CONFIG_CLK_R9A09G011) += r9a09g011-cpg.o 40 + obj-$(CONFIG_CLK_R9A09G047) += r9a09g047-cpg.o 40 41 obj-$(CONFIG_CLK_R9A09G057) += r9a09g057-cpg.o 41 42 obj-$(CONFIG_CLK_SH73A0) += clk-sh73a0.o 42 43
+4
drivers/clk/renesas/r8a779g0-cpg-mssr.c
··· 238 238 DEF_MOD("pfc2", 917, R8A779G0_CLK_CP), 239 239 DEF_MOD("pfc3", 918, R8A779G0_CLK_CP), 240 240 DEF_MOD("tsc", 919, R8A779G0_CLK_CL16M), 241 + DEF_MOD("vspx0", 1028, R8A779G0_CLK_S0D1_VIO), 242 + DEF_MOD("vspx1", 1029, R8A779G0_CLK_S0D1_VIO), 243 + DEF_MOD("fcpvx0", 1100, R8A779G0_CLK_S0D1_VIO), 244 + DEF_MOD("fcpvx1", 1101, R8A779G0_CLK_S0D1_VIO), 241 245 DEF_MOD("tsn", 2723, R8A779G0_CLK_S0D4_HSC), 242 246 DEF_MOD("ssiu", 2926, R8A779G0_CLK_S0D6_PER), 243 247 DEF_MOD("ssi", 2927, R8A779G0_CLK_S0D6_PER),
+4
drivers/clk/renesas/r8a779h0-cpg-mssr.c
··· 177 177 DEF_MOD("canfd0", 328, R8A779H0_CLK_SASYNCPERD2), 178 178 DEF_MOD("csi40", 331, R8A779H0_CLK_CSI), 179 179 DEF_MOD("csi41", 400, R8A779H0_CLK_CSI), 180 + DEF_MOD("dis0", 411, R8A779H0_CLK_VIOBUSD2), 181 + DEF_MOD("dsitxlink0", 415, R8A779H0_CLK_VIOBUSD2), 182 + DEF_MOD("fcpvd0", 508, R8A779H0_CLK_VIOBUSD2), 180 183 DEF_MOD("hscif0", 514, R8A779H0_CLK_SASYNCPERD1), 181 184 DEF_MOD("hscif1", 515, R8A779H0_CLK_SASYNCPERD1), 182 185 DEF_MOD("hscif2", 516, R8A779H0_CLK_SASYNCPERD1), ··· 228 225 DEF_MOD("vin15", 811, R8A779H0_CLK_S0D4_VIO), 229 226 DEF_MOD("vin16", 812, R8A779H0_CLK_S0D4_VIO), 230 227 DEF_MOD("vin17", 813, R8A779H0_CLK_S0D4_VIO), 228 + DEF_MOD("vspd0", 830, R8A779H0_CLK_VIOBUSD2), 231 229 DEF_MOD("wdt1:wdt0", 907, R8A779H0_CLK_R), 232 230 DEF_MOD("cmt0", 910, R8A779H0_CLK_R), 233 231 DEF_MOD("cmt1", 911, R8A779H0_CLK_R),
+28 -1
drivers/clk/renesas/r9a06g032-clocks.c
··· 20 20 #include <linux/platform_device.h> 21 21 #include <linux/pm_clock.h> 22 22 #include <linux/pm_domain.h> 23 + #include <linux/reboot.h> 23 24 #include <linux/slab.h> 24 25 #include <linux/soc/renesas/r9a06g032-sysctrl.h> 25 26 #include <linux/spinlock.h> 26 27 #include <dt-bindings/clock/r9a06g032-sysctrl.h> 27 28 28 29 #define R9A06G032_SYSCTRL_USB 0x00 29 - #define R9A06G032_SYSCTRL_USB_H2MODE (1<<1) 30 + #define R9A06G032_SYSCTRL_USB_H2MODE BIT(1) 30 31 #define R9A06G032_SYSCTRL_DMAMUX 0xA0 32 + 33 + #define R9A06G032_SYSCTRL_RSTEN 0x120 34 + #define R9A06G032_SYSCTRL_RSTEN_MRESET_EN BIT(0) 35 + #define R9A06G032_SYSCTRL_RSTCTRL 0x198 36 + /* These work for both reset registers */ 37 + #define R9A06G032_SYSCTRL_SWRST BIT(6) 38 + #define R9A06G032_SYSCTRL_WDA7RST_1 BIT(2) 39 + #define R9A06G032_SYSCTRL_WDA7RST_0 BIT(1) 31 40 32 41 /** 33 42 * struct regbit - describe one bit in a register ··· 1279 1270 of_clk_del_provider(data); 1280 1271 } 1281 1272 1273 + static int r9a06g032_restart_handler(struct sys_off_data *data) 1274 + { 1275 + writel(R9A06G032_SYSCTRL_SWRST, sysctrl_priv->reg + R9A06G032_SYSCTRL_RSTCTRL); 1276 + return NOTIFY_DONE; 1277 + } 1278 + 1282 1279 static void __init r9a06g032_init_h2mode(struct r9a06g032_priv *clocks) 1283 1280 { 1284 1281 struct device_node *usbf_np; ··· 1338 1323 return -ENOMEM; 1339 1324 1340 1325 r9a06g032_init_h2mode(clocks); 1326 + 1327 + /* Clear potentially pending resets */ 1328 + writel(R9A06G032_SYSCTRL_WDA7RST_0 | R9A06G032_SYSCTRL_WDA7RST_1, 1329 + clocks->reg + R9A06G032_SYSCTRL_RSTCTRL); 1330 + /* Allow software reset */ 1331 + writel(R9A06G032_SYSCTRL_SWRST | R9A06G032_SYSCTRL_RSTEN_MRESET_EN, 1332 + clocks->reg + R9A06G032_SYSCTRL_RSTEN); 1333 + 1334 + error = devm_register_sys_off_handler(dev, SYS_OFF_MODE_RESTART, SYS_OFF_PRIO_HIGH, 1335 + r9a06g032_restart_handler, NULL); 1336 + if (error) 1337 + dev_warn(dev, "couldn't register restart handler (%d)\n", error); 1341 1338 1342 1339 for (i = 0; i < ARRAY_SIZE(r9a06g032_clocks); ++i) { 1343 1340 const struct r9a06g032_clkdesc *d = &r9a06g032_clocks[i];
+47
drivers/clk/renesas/r9a08g045-cpg.c
··· 187 187 DEF_FIXED("OSC", R9A08G045_OSCCLK, CLK_EXTAL, 1, 1), 188 188 DEF_FIXED("OSC2", R9A08G045_OSCCLK2, CLK_EXTAL, 1, 3), 189 189 DEF_FIXED("HP", R9A08G045_CLK_HP, CLK_PLL6, 1, 2), 190 + DEF_FIXED("TSU", R9A08G045_CLK_TSU, CLK_PLL2_DIV2, 1, 8), 190 191 }; 191 192 192 193 static const struct rzg2l_mod_clk r9a08g045_mod_clks[] = { ··· 210 209 DEF_MOD("sdhi2_imclk2", R9A08G045_SDHI2_IMCLK2, CLK_SD2_DIV4, 0x554, 9), 211 210 DEF_MOD("sdhi2_clk_hs", R9A08G045_SDHI2_CLK_HS, R9A08G045_CLK_SD2, 0x554, 10), 212 211 DEF_MOD("sdhi2_aclk", R9A08G045_SDHI2_ACLK, R9A08G045_CLK_P1, 0x554, 11), 212 + DEF_MOD("ssi0_pclk2", R9A08G045_SSI0_PCLK2, R9A08G045_CLK_P0, 0x570, 0), 213 + DEF_MOD("ssi0_sfr", R9A08G045_SSI0_PCLK_SFR, R9A08G045_CLK_P0, 0x570, 1), 214 + DEF_MOD("ssi1_pclk2", R9A08G045_SSI1_PCLK2, R9A08G045_CLK_P0, 0x570, 2), 215 + DEF_MOD("ssi1_sfr", R9A08G045_SSI1_PCLK_SFR, R9A08G045_CLK_P0, 0x570, 3), 216 + DEF_MOD("ssi2_pclk2", R9A08G045_SSI2_PCLK2, R9A08G045_CLK_P0, 0x570, 4), 217 + DEF_MOD("ssi2_sfr", R9A08G045_SSI2_PCLK_SFR, R9A08G045_CLK_P0, 0x570, 5), 218 + DEF_MOD("ssi3_pclk2", R9A08G045_SSI3_PCLK2, R9A08G045_CLK_P0, 0x570, 6), 219 + DEF_MOD("ssi3_sfr", R9A08G045_SSI3_PCLK_SFR, R9A08G045_CLK_P0, 0x570, 7), 213 220 DEF_MOD("usb0_host", R9A08G045_USB_U2H0_HCLK, R9A08G045_CLK_P1, 0x578, 0), 214 221 DEF_MOD("usb1_host", R9A08G045_USB_U2H1_HCLK, R9A08G045_CLK_P1, 0x578, 1), 215 222 DEF_MOD("usb0_func", R9A08G045_USB_U2P_EXR_CPUCLK, R9A08G045_CLK_P1, 0x578, 2), ··· 233 224 DEF_MOD("i2c2_pclk", R9A08G045_I2C2_PCLK, R9A08G045_CLK_P0, 0x580, 2), 234 225 DEF_MOD("i2c3_pclk", R9A08G045_I2C3_PCLK, R9A08G045_CLK_P0, 0x580, 3), 235 226 DEF_MOD("scif0_clk_pck", R9A08G045_SCIF0_CLK_PCK, R9A08G045_CLK_P0, 0x584, 0), 227 + DEF_MOD("scif1_clk_pck", R9A08G045_SCIF1_CLK_PCK, R9A08G045_CLK_P0, 0x584, 1), 228 + DEF_MOD("scif2_clk_pck", R9A08G045_SCIF2_CLK_PCK, R9A08G045_CLK_P0, 0x584, 2), 229 + DEF_MOD("scif3_clk_pck", R9A08G045_SCIF3_CLK_PCK, R9A08G045_CLK_P0, 0x584, 3), 230 + DEF_MOD("scif4_clk_pck", R9A08G045_SCIF4_CLK_PCK, R9A08G045_CLK_P0, 0x584, 4), 231 + DEF_MOD("scif5_clk_pck", R9A08G045_SCIF5_CLK_PCK, R9A08G045_CLK_P0, 0x584, 5), 236 232 DEF_MOD("gpio_hclk", R9A08G045_GPIO_HCLK, R9A08G045_OSCCLK, 0x598, 0), 233 + DEF_MOD("adc_adclk", R9A08G045_ADC_ADCLK, R9A08G045_CLK_TSU, 0x5a8, 0), 234 + DEF_MOD("adc_pclk", R9A08G045_ADC_PCLK, R9A08G045_CLK_TSU, 0x5a8, 1), 237 235 DEF_MOD("vbat_bclk", R9A08G045_VBAT_BCLK, R9A08G045_OSCCLK, 0x614, 0), 238 236 }; 239 237 ··· 254 238 DEF_RST(R9A08G045_SDHI0_IXRST, 0x854, 0), 255 239 DEF_RST(R9A08G045_SDHI1_IXRST, 0x854, 1), 256 240 DEF_RST(R9A08G045_SDHI2_IXRST, 0x854, 2), 241 + DEF_RST(R9A08G045_SSI0_RST_M2_REG, 0x870, 0), 242 + DEF_RST(R9A08G045_SSI1_RST_M2_REG, 0x870, 1), 243 + DEF_RST(R9A08G045_SSI2_RST_M2_REG, 0x870, 2), 244 + DEF_RST(R9A08G045_SSI3_RST_M2_REG, 0x870, 3), 257 245 DEF_RST(R9A08G045_USB_U2H0_HRESETN, 0x878, 0), 258 246 DEF_RST(R9A08G045_USB_U2H1_HRESETN, 0x878, 1), 259 247 DEF_RST(R9A08G045_USB_U2P_EXL_SYSRST, 0x878, 2), ··· 269 249 DEF_RST(R9A08G045_I2C2_MRST, 0x880, 2), 270 250 DEF_RST(R9A08G045_I2C3_MRST, 0x880, 3), 271 251 DEF_RST(R9A08G045_SCIF0_RST_SYSTEM_N, 0x884, 0), 252 + DEF_RST(R9A08G045_SCIF1_RST_SYSTEM_N, 0x884, 1), 253 + DEF_RST(R9A08G045_SCIF2_RST_SYSTEM_N, 0x884, 2), 254 + DEF_RST(R9A08G045_SCIF3_RST_SYSTEM_N, 0x884, 3), 255 + DEF_RST(R9A08G045_SCIF4_RST_SYSTEM_N, 0x884, 4), 256 + DEF_RST(R9A08G045_SCIF5_RST_SYSTEM_N, 0x884, 5), 272 257 DEF_RST(R9A08G045_GPIO_RSTN, 0x898, 0), 273 258 DEF_RST(R9A08G045_GPIO_PORT_RESETN, 0x898, 1), 274 259 DEF_RST(R9A08G045_GPIO_SPARE_RESETN, 0x898, 2), 260 + DEF_RST(R9A08G045_ADC_PRESETN, 0x8a8, 0), 261 + DEF_RST(R9A08G045_ADC_ADRST_N, 0x8a8, 1), 275 262 DEF_RST(R9A08G045_VBAT_BRESETN, 0x914, 0), 276 263 }; 277 264 ··· 313 286 DEF_REG_CONF(CPG_BUS_PERI_COM_MSTOP, BIT(1)), 0), 314 287 DEF_PD("sdhi2", R9A08G045_PD_SDHI2, 315 288 DEF_REG_CONF(CPG_BUS_PERI_COM_MSTOP, BIT(11)), 0), 289 + DEF_PD("ssi0", R9A08G045_PD_SSI0, 290 + DEF_REG_CONF(CPG_BUS_MCPU1_MSTOP, BIT(10)), 0), 291 + DEF_PD("ssi1", R9A08G045_PD_SSI1, 292 + DEF_REG_CONF(CPG_BUS_MCPU1_MSTOP, BIT(11)), 0), 293 + DEF_PD("ssi2", R9A08G045_PD_SSI2, 294 + DEF_REG_CONF(CPG_BUS_MCPU1_MSTOP, BIT(12)), 0), 295 + DEF_PD("ssi3", R9A08G045_PD_SSI3, 296 + DEF_REG_CONF(CPG_BUS_MCPU1_MSTOP, BIT(13)), 0), 316 297 DEF_PD("usb0", R9A08G045_PD_USB0, 317 298 DEF_REG_CONF(CPG_BUS_PERI_COM_MSTOP, GENMASK(6, 5)), 0), 318 299 DEF_PD("usb1", R9A08G045_PD_USB1, ··· 341 306 DEF_REG_CONF(CPG_BUS_MCPU2_MSTOP, BIT(13)), 0), 342 307 DEF_PD("scif0", R9A08G045_PD_SCIF0, 343 308 DEF_REG_CONF(CPG_BUS_MCPU2_MSTOP, BIT(1)), 0), 309 + DEF_PD("scif1", R9A08G045_PD_SCIF1, 310 + DEF_REG_CONF(CPG_BUS_MCPU2_MSTOP, BIT(2)), 0), 311 + DEF_PD("scif2", R9A08G045_PD_SCIF2, 312 + DEF_REG_CONF(CPG_BUS_MCPU2_MSTOP, BIT(3)), 0), 313 + DEF_PD("scif3", R9A08G045_PD_SCIF3, 314 + DEF_REG_CONF(CPG_BUS_MCPU2_MSTOP, BIT(4)), 0), 315 + DEF_PD("scif4", R9A08G045_PD_SCIF4, 316 + DEF_REG_CONF(CPG_BUS_MCPU2_MSTOP, BIT(5)), 0), 317 + DEF_PD("scif5", R9A08G045_PD_SCIF5, 318 + DEF_REG_CONF(CPG_BUS_MCPU3_MSTOP, BIT(4)), 0), 319 + DEF_PD("adc", R9A08G045_PD_ADC, 320 + DEF_REG_CONF(CPG_BUS_MCPU2_MSTOP, BIT(14)), 0), 344 321 DEF_PD("vbat", R9A08G045_PD_VBAT, 345 322 DEF_REG_CONF(CPG_BUS_MCPU3_MSTOP, BIT(8)), 346 323 GENPD_FLAG_ALWAYS_ON),
+150
drivers/clk/renesas/r9a09g047-cpg.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * Renesas RZ/G3E CPG driver 4 + * 5 + * Copyright (C) 2024 Renesas Electronics Corp. 6 + */ 7 + 8 + #include <linux/clk-provider.h> 9 + #include <linux/device.h> 10 + #include <linux/init.h> 11 + #include <linux/kernel.h> 12 + 13 + #include <dt-bindings/clock/renesas,r9a09g047-cpg.h> 14 + 15 + #include "rzv2h-cpg.h" 16 + 17 + enum clk_ids { 18 + /* Core Clock Outputs exported to DT */ 19 + LAST_DT_CORE_CLK = R9A09G047_IOTOP_0_SHCLK, 20 + 21 + /* External Input Clocks */ 22 + CLK_AUDIO_EXTAL, 23 + CLK_RTXIN, 24 + CLK_QEXTAL, 25 + 26 + /* PLL Clocks */ 27 + CLK_PLLCM33, 28 + CLK_PLLCLN, 29 + CLK_PLLDTY, 30 + CLK_PLLCA55, 31 + 32 + /* Internal Core Clocks */ 33 + CLK_PLLCM33_DIV16, 34 + CLK_PLLCLN_DIV16, 35 + CLK_PLLDTY_ACPU, 36 + CLK_PLLDTY_ACPU_DIV4, 37 + 38 + /* Module Clocks */ 39 + MOD_CLK_BASE, 40 + }; 41 + 42 + static const struct clk_div_table dtable_1_8[] = { 43 + {0, 1}, 44 + {1, 2}, 45 + {2, 4}, 46 + {3, 8}, 47 + {0, 0}, 48 + }; 49 + 50 + static const struct clk_div_table dtable_2_64[] = { 51 + {0, 2}, 52 + {1, 4}, 53 + {2, 8}, 54 + {3, 16}, 55 + {4, 64}, 56 + {0, 0}, 57 + }; 58 + 59 + static const struct cpg_core_clk r9a09g047_core_clks[] __initconst = { 60 + /* External Clock Inputs */ 61 + DEF_INPUT("audio_extal", CLK_AUDIO_EXTAL), 62 + DEF_INPUT("rtxin", CLK_RTXIN), 63 + DEF_INPUT("qextal", CLK_QEXTAL), 64 + 65 + /* PLL Clocks */ 66 + DEF_FIXED(".pllcm33", CLK_PLLCM33, CLK_QEXTAL, 200, 3), 67 + DEF_FIXED(".pllcln", CLK_PLLCLN, CLK_QEXTAL, 200, 3), 68 + DEF_FIXED(".plldty", CLK_PLLDTY, CLK_QEXTAL, 200, 3), 69 + DEF_PLL(".pllca55", CLK_PLLCA55, CLK_QEXTAL, PLL_CONF(0x64)), 70 + 71 + /* Internal Core Clocks */ 72 + DEF_FIXED(".pllcm33_div16", CLK_PLLCM33_DIV16, CLK_PLLCM33, 1, 16), 73 + 74 + DEF_FIXED(".pllcln_div16", CLK_PLLCLN_DIV16, CLK_PLLCLN, 1, 16), 75 + 76 + DEF_DDIV(".plldty_acpu", CLK_PLLDTY_ACPU, CLK_PLLDTY, CDDIV0_DIVCTL2, dtable_2_64), 77 + DEF_FIXED(".plldty_acpu_div4", CLK_PLLDTY_ACPU_DIV4, CLK_PLLDTY_ACPU, 1, 4), 78 + 79 + /* Core Clocks */ 80 + DEF_FIXED("sys_0_pclk", R9A09G047_SYS_0_PCLK, CLK_QEXTAL, 1, 1), 81 + DEF_DDIV("ca55_0_coreclk0", R9A09G047_CA55_0_CORECLK0, CLK_PLLCA55, 82 + CDDIV1_DIVCTL0, dtable_1_8), 83 + DEF_DDIV("ca55_0_coreclk1", R9A09G047_CA55_0_CORECLK1, CLK_PLLCA55, 84 + CDDIV1_DIVCTL1, dtable_1_8), 85 + DEF_DDIV("ca55_0_coreclk2", R9A09G047_CA55_0_CORECLK2, CLK_PLLCA55, 86 + CDDIV1_DIVCTL2, dtable_1_8), 87 + DEF_DDIV("ca55_0_coreclk3", R9A09G047_CA55_0_CORECLK3, CLK_PLLCA55, 88 + CDDIV1_DIVCTL3, dtable_1_8), 89 + DEF_FIXED("iotop_0_shclk", R9A09G047_IOTOP_0_SHCLK, CLK_PLLCM33_DIV16, 1, 1), 90 + }; 91 + 92 + static const struct rzv2h_mod_clk r9a09g047_mod_clks[] __initconst = { 93 + DEF_MOD_CRITICAL("gic_0_gicclk", CLK_PLLDTY_ACPU_DIV4, 1, 3, 0, 19, 94 + BUS_MSTOP(3, BIT(5))), 95 + DEF_MOD("scif_0_clk_pck", CLK_PLLCM33_DIV16, 8, 15, 4, 15, 96 + BUS_MSTOP(3, BIT(14))), 97 + DEF_MOD("riic_8_ckm", CLK_PLLCM33_DIV16, 9, 3, 4, 19, 98 + BUS_MSTOP(3, BIT(13))), 99 + DEF_MOD("riic_0_ckm", CLK_PLLCLN_DIV16, 9, 4, 4, 20, 100 + BUS_MSTOP(1, BIT(1))), 101 + DEF_MOD("riic_1_ckm", CLK_PLLCLN_DIV16, 9, 5, 4, 21, 102 + BUS_MSTOP(1, BIT(2))), 103 + DEF_MOD("riic_2_ckm", CLK_PLLCLN_DIV16, 9, 6, 4, 22, 104 + BUS_MSTOP(1, BIT(3))), 105 + DEF_MOD("riic_3_ckm", CLK_PLLCLN_DIV16, 9, 7, 4, 23, 106 + BUS_MSTOP(1, BIT(4))), 107 + DEF_MOD("riic_4_ckm", CLK_PLLCLN_DIV16, 9, 8, 4, 24, 108 + BUS_MSTOP(1, BIT(5))), 109 + DEF_MOD("riic_5_ckm", CLK_PLLCLN_DIV16, 9, 9, 4, 25, 110 + BUS_MSTOP(1, BIT(6))), 111 + DEF_MOD("riic_6_ckm", CLK_PLLCLN_DIV16, 9, 10, 4, 26, 112 + BUS_MSTOP(1, BIT(7))), 113 + DEF_MOD("riic_7_ckm", CLK_PLLCLN_DIV16, 9, 11, 4, 27, 114 + BUS_MSTOP(1, BIT(8))), 115 + }; 116 + 117 + static const struct rzv2h_reset r9a09g047_resets[] __initconst = { 118 + DEF_RST(3, 0, 1, 1), /* SYS_0_PRESETN */ 119 + DEF_RST(3, 8, 1, 9), /* GIC_0_GICRESET_N */ 120 + DEF_RST(3, 9, 1, 10), /* GIC_0_DBG_GICRESET_N */ 121 + DEF_RST(9, 5, 4, 6), /* SCIF_0_RST_SYSTEM_N */ 122 + DEF_RST(9, 8, 4, 9), /* RIIC_0_MRST */ 123 + DEF_RST(9, 9, 4, 10), /* RIIC_1_MRST */ 124 + DEF_RST(9, 10, 4, 11), /* RIIC_2_MRST */ 125 + DEF_RST(9, 11, 4, 12), /* RIIC_3_MRST */ 126 + DEF_RST(9, 12, 4, 13), /* RIIC_4_MRST */ 127 + DEF_RST(9, 13, 4, 14), /* RIIC_5_MRST */ 128 + DEF_RST(9, 14, 4, 15), /* RIIC_6_MRST */ 129 + DEF_RST(9, 15, 4, 16), /* RIIC_7_MRST */ 130 + DEF_RST(10, 0, 4, 17), /* RIIC_8_MRST */ 131 + }; 132 + 133 + const struct rzv2h_cpg_info r9a09g047_cpg_info __initconst = { 134 + /* Core Clocks */ 135 + .core_clks = r9a09g047_core_clks, 136 + .num_core_clks = ARRAY_SIZE(r9a09g047_core_clks), 137 + .last_dt_core_clk = LAST_DT_CORE_CLK, 138 + .num_total_core_clks = MOD_CLK_BASE, 139 + 140 + /* Module Clocks */ 141 + .mod_clks = r9a09g047_mod_clks, 142 + .num_mod_clks = ARRAY_SIZE(r9a09g047_mod_clks), 143 + .num_hw_mod_clks = 28 * 16, 144 + 145 + /* Resets */ 146 + .resets = r9a09g047_resets, 147 + .num_resets = ARRAY_SIZE(r9a09g047_resets), 148 + 149 + .num_mstop_bits = 208, 150 + };
+142 -39
drivers/clk/renesas/r9a09g057-cpg.c
··· 28 28 CLK_PLLCLN, 29 29 CLK_PLLDTY, 30 30 CLK_PLLCA55, 31 + CLK_PLLVDO, 31 32 32 33 /* Internal Core Clocks */ 33 34 CLK_PLLCM33_DIV16, ··· 36 35 CLK_PLLCLN_DIV8, 37 36 CLK_PLLCLN_DIV16, 38 37 CLK_PLLDTY_ACPU, 38 + CLK_PLLDTY_ACPU_DIV2, 39 39 CLK_PLLDTY_ACPU_DIV4, 40 + CLK_PLLDTY_DIV16, 41 + CLK_PLLVDO_CRU0, 42 + CLK_PLLVDO_CRU1, 43 + CLK_PLLVDO_CRU2, 44 + CLK_PLLVDO_CRU3, 40 45 41 46 /* Module Clocks */ 42 47 MOD_CLK_BASE, ··· 53 46 {1, 2}, 54 47 {2, 4}, 55 48 {3, 8}, 49 + {0, 0}, 50 + }; 51 + 52 + static const struct clk_div_table dtable_2_4[] = { 53 + {0, 2}, 54 + {1, 4}, 56 55 {0, 0}, 57 56 }; 58 57 ··· 82 69 DEF_FIXED(".pllcln", CLK_PLLCLN, CLK_QEXTAL, 200, 3), 83 70 DEF_FIXED(".plldty", CLK_PLLDTY, CLK_QEXTAL, 200, 3), 84 71 DEF_PLL(".pllca55", CLK_PLLCA55, CLK_QEXTAL, PLL_CONF(0x64)), 72 + DEF_FIXED(".pllvdo", CLK_PLLVDO, CLK_QEXTAL, 105, 2), 85 73 86 74 /* Internal Core Clocks */ 87 75 DEF_FIXED(".pllcm33_div16", CLK_PLLCM33_DIV16, CLK_PLLCM33, 1, 16), ··· 92 78 DEF_FIXED(".pllcln_div16", CLK_PLLCLN_DIV16, CLK_PLLCLN, 1, 16), 93 79 94 80 DEF_DDIV(".plldty_acpu", CLK_PLLDTY_ACPU, CLK_PLLDTY, CDDIV0_DIVCTL2, dtable_2_64), 81 + DEF_FIXED(".plldty_acpu_div2", CLK_PLLDTY_ACPU_DIV2, CLK_PLLDTY_ACPU, 1, 2), 95 82 DEF_FIXED(".plldty_acpu_div4", CLK_PLLDTY_ACPU_DIV4, CLK_PLLDTY_ACPU, 1, 4), 83 + DEF_FIXED(".plldty_div16", CLK_PLLDTY_DIV16, CLK_PLLDTY, 1, 16), 84 + 85 + DEF_DDIV(".pllvdo_cru0", CLK_PLLVDO_CRU0, CLK_PLLVDO, CDDIV3_DIVCTL3, dtable_2_4), 86 + DEF_DDIV(".pllvdo_cru1", CLK_PLLVDO_CRU1, CLK_PLLVDO, CDDIV4_DIVCTL0, dtable_2_4), 87 + DEF_DDIV(".pllvdo_cru2", CLK_PLLVDO_CRU2, CLK_PLLVDO, CDDIV4_DIVCTL1, dtable_2_4), 88 + DEF_DDIV(".pllvdo_cru3", CLK_PLLVDO_CRU3, CLK_PLLVDO, CDDIV4_DIVCTL2, dtable_2_4), 96 89 97 90 /* Core Clocks */ 98 91 DEF_FIXED("sys_0_pclk", R9A09G057_SYS_0_PCLK, CLK_QEXTAL, 1, 1), ··· 115 94 }; 116 95 117 96 static const struct rzv2h_mod_clk r9a09g057_mod_clks[] __initconst = { 118 - DEF_MOD_CRITICAL("icu_0_pclk_i", CLK_PLLCM33_DIV16, 0, 5, 0, 5), 119 - DEF_MOD("gtm_0_pclk", CLK_PLLCM33_DIV16, 4, 3, 2, 3), 120 - DEF_MOD("gtm_1_pclk", CLK_PLLCM33_DIV16, 4, 4, 2, 4), 121 - DEF_MOD("gtm_2_pclk", CLK_PLLCLN_DIV16, 4, 5, 2, 5), 122 - DEF_MOD("gtm_3_pclk", CLK_PLLCLN_DIV16, 4, 6, 2, 6), 123 - DEF_MOD("gtm_4_pclk", CLK_PLLCLN_DIV16, 4, 7, 2, 7), 124 - DEF_MOD("gtm_5_pclk", CLK_PLLCLN_DIV16, 4, 8, 2, 8), 125 - DEF_MOD("gtm_6_pclk", CLK_PLLCLN_DIV16, 4, 9, 2, 9), 126 - DEF_MOD("gtm_7_pclk", CLK_PLLCLN_DIV16, 4, 10, 2, 10), 127 - DEF_MOD("wdt_0_clkp", CLK_PLLCM33_DIV16, 4, 11, 2, 11), 128 - DEF_MOD("wdt_0_clk_loco", CLK_QEXTAL, 4, 12, 2, 12), 129 - DEF_MOD("wdt_1_clkp", CLK_PLLCLN_DIV16, 4, 13, 2, 13), 130 - DEF_MOD("wdt_1_clk_loco", CLK_QEXTAL, 4, 14, 2, 14), 131 - DEF_MOD("wdt_2_clkp", CLK_PLLCLN_DIV16, 4, 15, 2, 15), 132 - DEF_MOD("wdt_2_clk_loco", CLK_QEXTAL, 5, 0, 2, 16), 133 - DEF_MOD("wdt_3_clkp", CLK_PLLCLN_DIV16, 5, 1, 2, 17), 134 - DEF_MOD("wdt_3_clk_loco", CLK_QEXTAL, 5, 2, 2, 18), 135 - DEF_MOD("scif_0_clk_pck", CLK_PLLCM33_DIV16, 8, 15, 4, 15), 136 - DEF_MOD("riic_8_ckm", CLK_PLLCM33_DIV16, 9, 3, 4, 19), 137 - DEF_MOD("riic_0_ckm", CLK_PLLCLN_DIV16, 9, 4, 4, 20), 138 - DEF_MOD("riic_1_ckm", CLK_PLLCLN_DIV16, 9, 5, 4, 21), 139 - DEF_MOD("riic_2_ckm", CLK_PLLCLN_DIV16, 9, 6, 4, 22), 140 - DEF_MOD("riic_3_ckm", CLK_PLLCLN_DIV16, 9, 7, 4, 23), 141 - DEF_MOD("riic_4_ckm", CLK_PLLCLN_DIV16, 9, 8, 4, 24), 142 - DEF_MOD("riic_5_ckm", CLK_PLLCLN_DIV16, 9, 9, 4, 25), 143 - DEF_MOD("riic_6_ckm", CLK_PLLCLN_DIV16, 9, 10, 4, 26), 144 - DEF_MOD("riic_7_ckm", CLK_PLLCLN_DIV16, 9, 11, 4, 27), 145 - DEF_MOD("sdhi_0_imclk", CLK_PLLCLN_DIV8, 10, 3, 5, 3), 146 - DEF_MOD("sdhi_0_imclk2", CLK_PLLCLN_DIV8, 10, 4, 5, 4), 147 - DEF_MOD("sdhi_0_clk_hs", CLK_PLLCLN_DIV2, 10, 5, 5, 5), 148 - DEF_MOD("sdhi_0_aclk", CLK_PLLDTY_ACPU_DIV4, 10, 6, 5, 6), 149 - DEF_MOD("sdhi_1_imclk", CLK_PLLCLN_DIV8, 10, 7, 5, 7), 150 - DEF_MOD("sdhi_1_imclk2", CLK_PLLCLN_DIV8, 10, 8, 5, 8), 151 - DEF_MOD("sdhi_1_clk_hs", CLK_PLLCLN_DIV2, 10, 9, 5, 9), 152 - DEF_MOD("sdhi_1_aclk", CLK_PLLDTY_ACPU_DIV4, 10, 10, 5, 10), 153 - DEF_MOD("sdhi_2_imclk", CLK_PLLCLN_DIV8, 10, 11, 5, 11), 154 - DEF_MOD("sdhi_2_imclk2", CLK_PLLCLN_DIV8, 10, 12, 5, 12), 155 - DEF_MOD("sdhi_2_clk_hs", CLK_PLLCLN_DIV2, 10, 13, 5, 13), 156 - DEF_MOD("sdhi_2_aclk", CLK_PLLDTY_ACPU_DIV4, 10, 14, 5, 14), 97 + DEF_MOD_CRITICAL("icu_0_pclk_i", CLK_PLLCM33_DIV16, 0, 5, 0, 5, 98 + BUS_MSTOP_NONE), 99 + DEF_MOD_CRITICAL("gic_0_gicclk", CLK_PLLDTY_ACPU_DIV4, 1, 3, 0, 19, 100 + BUS_MSTOP(3, BIT(5))), 101 + DEF_MOD("gtm_0_pclk", CLK_PLLCM33_DIV16, 4, 3, 2, 3, 102 + BUS_MSTOP(5, BIT(10))), 103 + DEF_MOD("gtm_1_pclk", CLK_PLLCM33_DIV16, 4, 4, 2, 4, 104 + BUS_MSTOP(5, BIT(11))), 105 + DEF_MOD("gtm_2_pclk", CLK_PLLCLN_DIV16, 4, 5, 2, 5, 106 + BUS_MSTOP(2, BIT(13))), 107 + DEF_MOD("gtm_3_pclk", CLK_PLLCLN_DIV16, 4, 6, 2, 6, 108 + BUS_MSTOP(2, BIT(14))), 109 + DEF_MOD("gtm_4_pclk", CLK_PLLCLN_DIV16, 4, 7, 2, 7, 110 + BUS_MSTOP(11, BIT(13))), 111 + DEF_MOD("gtm_5_pclk", CLK_PLLCLN_DIV16, 4, 8, 2, 8, 112 + BUS_MSTOP(11, BIT(14))), 113 + DEF_MOD("gtm_6_pclk", CLK_PLLCLN_DIV16, 4, 9, 2, 9, 114 + BUS_MSTOP(11, BIT(15))), 115 + DEF_MOD("gtm_7_pclk", CLK_PLLCLN_DIV16, 4, 10, 2, 10, 116 + BUS_MSTOP(12, BIT(0))), 117 + DEF_MOD("wdt_0_clkp", CLK_PLLCM33_DIV16, 4, 11, 2, 11, 118 + BUS_MSTOP(3, BIT(10))), 119 + DEF_MOD("wdt_0_clk_loco", CLK_QEXTAL, 4, 12, 2, 12, 120 + BUS_MSTOP(3, BIT(10))), 121 + DEF_MOD("wdt_1_clkp", CLK_PLLCLN_DIV16, 4, 13, 2, 13, 122 + BUS_MSTOP(1, BIT(0))), 123 + DEF_MOD("wdt_1_clk_loco", CLK_QEXTAL, 4, 14, 2, 14, 124 + BUS_MSTOP(1, BIT(0))), 125 + DEF_MOD("wdt_2_clkp", CLK_PLLCLN_DIV16, 4, 15, 2, 15, 126 + BUS_MSTOP(5, BIT(12))), 127 + DEF_MOD("wdt_2_clk_loco", CLK_QEXTAL, 5, 0, 2, 16, 128 + BUS_MSTOP(5, BIT(12))), 129 + DEF_MOD("wdt_3_clkp", CLK_PLLCLN_DIV16, 5, 1, 2, 17, 130 + BUS_MSTOP(5, BIT(13))), 131 + DEF_MOD("wdt_3_clk_loco", CLK_QEXTAL, 5, 2, 2, 18, 132 + BUS_MSTOP(5, BIT(13))), 133 + DEF_MOD("scif_0_clk_pck", CLK_PLLCM33_DIV16, 8, 15, 4, 15, 134 + BUS_MSTOP(3, BIT(14))), 135 + DEF_MOD("riic_8_ckm", CLK_PLLCM33_DIV16, 9, 3, 4, 19, 136 + BUS_MSTOP(3, BIT(13))), 137 + DEF_MOD("riic_0_ckm", CLK_PLLCLN_DIV16, 9, 4, 4, 20, 138 + BUS_MSTOP(1, BIT(1))), 139 + DEF_MOD("riic_1_ckm", CLK_PLLCLN_DIV16, 9, 5, 4, 21, 140 + BUS_MSTOP(1, BIT(2))), 141 + DEF_MOD("riic_2_ckm", CLK_PLLCLN_DIV16, 9, 6, 4, 22, 142 + BUS_MSTOP(1, BIT(3))), 143 + DEF_MOD("riic_3_ckm", CLK_PLLCLN_DIV16, 9, 7, 4, 23, 144 + BUS_MSTOP(1, BIT(4))), 145 + DEF_MOD("riic_4_ckm", CLK_PLLCLN_DIV16, 9, 8, 4, 24, 146 + BUS_MSTOP(1, BIT(5))), 147 + DEF_MOD("riic_5_ckm", CLK_PLLCLN_DIV16, 9, 9, 4, 25, 148 + BUS_MSTOP(1, BIT(6))), 149 + DEF_MOD("riic_6_ckm", CLK_PLLCLN_DIV16, 9, 10, 4, 26, 150 + BUS_MSTOP(1, BIT(7))), 151 + DEF_MOD("riic_7_ckm", CLK_PLLCLN_DIV16, 9, 11, 4, 27, 152 + BUS_MSTOP(1, BIT(8))), 153 + DEF_MOD("sdhi_0_imclk", CLK_PLLCLN_DIV8, 10, 3, 5, 3, 154 + BUS_MSTOP(8, BIT(2))), 155 + DEF_MOD("sdhi_0_imclk2", CLK_PLLCLN_DIV8, 10, 4, 5, 4, 156 + BUS_MSTOP(8, BIT(2))), 157 + DEF_MOD("sdhi_0_clk_hs", CLK_PLLCLN_DIV2, 10, 5, 5, 5, 158 + BUS_MSTOP(8, BIT(2))), 159 + DEF_MOD("sdhi_0_aclk", CLK_PLLDTY_ACPU_DIV4, 10, 6, 5, 6, 160 + BUS_MSTOP(8, BIT(2))), 161 + DEF_MOD("sdhi_1_imclk", CLK_PLLCLN_DIV8, 10, 7, 5, 7, 162 + BUS_MSTOP(8, BIT(3))), 163 + DEF_MOD("sdhi_1_imclk2", CLK_PLLCLN_DIV8, 10, 8, 5, 8, 164 + BUS_MSTOP(8, BIT(3))), 165 + DEF_MOD("sdhi_1_clk_hs", CLK_PLLCLN_DIV2, 10, 9, 5, 9, 166 + BUS_MSTOP(8, BIT(3))), 167 + DEF_MOD("sdhi_1_aclk", CLK_PLLDTY_ACPU_DIV4, 10, 10, 5, 10, 168 + BUS_MSTOP(8, BIT(3))), 169 + DEF_MOD("sdhi_2_imclk", CLK_PLLCLN_DIV8, 10, 11, 5, 11, 170 + BUS_MSTOP(8, BIT(4))), 171 + DEF_MOD("sdhi_2_imclk2", CLK_PLLCLN_DIV8, 10, 12, 5, 12, 172 + BUS_MSTOP(8, BIT(4))), 173 + DEF_MOD("sdhi_2_clk_hs", CLK_PLLCLN_DIV2, 10, 13, 5, 13, 174 + BUS_MSTOP(8, BIT(4))), 175 + DEF_MOD("sdhi_2_aclk", CLK_PLLDTY_ACPU_DIV4, 10, 14, 5, 14, 176 + BUS_MSTOP(8, BIT(4))), 177 + DEF_MOD("cru_0_aclk", CLK_PLLDTY_ACPU_DIV2, 13, 2, 6, 18, 178 + BUS_MSTOP(9, BIT(4))), 179 + DEF_MOD_NO_PM("cru_0_vclk", CLK_PLLVDO_CRU0, 13, 3, 6, 19, 180 + BUS_MSTOP(9, BIT(4))), 181 + DEF_MOD("cru_0_pclk", CLK_PLLDTY_DIV16, 13, 4, 6, 20, 182 + BUS_MSTOP(9, BIT(4))), 183 + DEF_MOD("cru_1_aclk", CLK_PLLDTY_ACPU_DIV2, 13, 5, 6, 21, 184 + BUS_MSTOP(9, BIT(5))), 185 + DEF_MOD_NO_PM("cru_1_vclk", CLK_PLLVDO_CRU1, 13, 6, 6, 22, 186 + BUS_MSTOP(9, BIT(5))), 187 + DEF_MOD("cru_1_pclk", CLK_PLLDTY_DIV16, 13, 7, 6, 23, 188 + BUS_MSTOP(9, BIT(5))), 189 + DEF_MOD("cru_2_aclk", CLK_PLLDTY_ACPU_DIV2, 13, 8, 6, 24, 190 + BUS_MSTOP(9, BIT(6))), 191 + DEF_MOD_NO_PM("cru_2_vclk", CLK_PLLVDO_CRU2, 13, 9, 6, 25, 192 + BUS_MSTOP(9, BIT(6))), 193 + DEF_MOD("cru_2_pclk", CLK_PLLDTY_DIV16, 13, 10, 6, 26, 194 + BUS_MSTOP(9, BIT(6))), 195 + DEF_MOD("cru_3_aclk", CLK_PLLDTY_ACPU_DIV2, 13, 11, 6, 27, 196 + BUS_MSTOP(9, BIT(7))), 197 + DEF_MOD_NO_PM("cru_3_vclk", CLK_PLLVDO_CRU3, 13, 12, 6, 28, 198 + BUS_MSTOP(9, BIT(7))), 199 + DEF_MOD("cru_3_pclk", CLK_PLLDTY_DIV16, 13, 13, 6, 29, 200 + BUS_MSTOP(9, BIT(7))), 157 201 }; 158 202 159 203 static const struct rzv2h_reset r9a09g057_resets[] __initconst = { 204 + DEF_RST(3, 0, 1, 1), /* SYS_0_PRESETN */ 160 205 DEF_RST(3, 6, 1, 7), /* ICU_0_PRESETN_I */ 206 + DEF_RST(3, 8, 1, 9), /* GIC_0_GICRESET_N */ 207 + DEF_RST(3, 9, 1, 10), /* GIC_0_DBG_GICRESET_N */ 161 208 DEF_RST(6, 13, 2, 30), /* GTM_0_PRESETZ */ 162 209 DEF_RST(6, 14, 2, 31), /* GTM_1_PRESETZ */ 163 210 DEF_RST(6, 15, 3, 0), /* GTM_2_PRESETZ */ ··· 251 162 DEF_RST(10, 7, 4, 24), /* SDHI_0_IXRST */ 252 163 DEF_RST(10, 8, 4, 25), /* SDHI_1_IXRST */ 253 164 DEF_RST(10, 9, 4, 26), /* SDHI_2_IXRST */ 165 + DEF_RST(12, 5, 5, 22), /* CRU_0_PRESETN */ 166 + DEF_RST(12, 6, 5, 23), /* CRU_0_ARESETN */ 167 + DEF_RST(12, 7, 5, 24), /* CRU_0_S_RESETN */ 168 + DEF_RST(12, 8, 5, 25), /* CRU_1_PRESETN */ 169 + DEF_RST(12, 9, 5, 26), /* CRU_1_ARESETN */ 170 + DEF_RST(12, 10, 5, 27), /* CRU_1_S_RESETN */ 171 + DEF_RST(12, 11, 5, 28), /* CRU_2_PRESETN */ 172 + DEF_RST(12, 12, 5, 29), /* CRU_2_ARESETN */ 173 + DEF_RST(12, 13, 5, 30), /* CRU_2_S_RESETN */ 174 + DEF_RST(12, 14, 5, 31), /* CRU_3_PRESETN */ 175 + DEF_RST(12, 15, 6, 0), /* CRU_3_ARESETN */ 176 + DEF_RST(13, 0, 6, 1), /* CRU_3_S_RESETN */ 254 177 }; 255 178 256 179 const struct rzv2h_cpg_info r9a09g057_cpg_info __initconst = { ··· 280 179 /* Resets */ 281 180 .resets = r9a09g057_resets, 282 181 .num_resets = ARRAY_SIZE(r9a09g057_resets), 182 + 183 + .num_mstop_bits = 192, 283 184 };
+1 -1
drivers/clk/renesas/renesas-cpg-mssr.c
··· 979 979 static int __init cpg_mssr_reserved_init(struct cpg_mssr_priv *priv, 980 980 const struct cpg_mssr_info *info) 981 981 { 982 - struct device_node *soc = of_find_node_by_path("/soc"); 982 + struct device_node *soc __free(device_node) = of_find_node_by_path("/soc"); 983 983 struct device_node *node; 984 984 uint32_t args[MAX_PHANDLE_ARGS]; 985 985 unsigned int *ids = NULL;
+172 -26
drivers/clk/renesas/rzv2h-cpg.c
··· 23 23 #include <linux/platform_device.h> 24 24 #include <linux/pm_clock.h> 25 25 #include <linux/pm_domain.h> 26 + #include <linux/refcount.h> 26 27 #include <linux/reset-controller.h> 27 28 28 29 #include <dt-bindings/clock/renesas-cpg-mssr.h> ··· 40 39 #define GET_CLK_MON_OFFSET(x) (0x800 + ((x) * 4)) 41 40 #define GET_RST_OFFSET(x) (0x900 + ((x) * 4)) 42 41 #define GET_RST_MON_OFFSET(x) (0xA00 + ((x) * 4)) 42 + 43 + #define CPG_BUS_1_MSTOP (0xd00) 44 + #define CPG_BUS_MSTOP(m) (CPG_BUS_1_MSTOP + ((m) - 1) * 4) 43 45 44 46 #define KDIV(val) ((s16)FIELD_GET(GENMASK(31, 16), (val))) 45 47 #define MDIV(val) FIELD_GET(GENMASK(15, 6), (val)) ··· 68 64 * @resets: Array of resets 69 65 * @num_resets: Number of Module Resets in info->resets[] 70 66 * @last_dt_core_clk: ID of the last Core Clock exported to DT 67 + * @mstop_count: Array of mstop values 71 68 * @rcdev: Reset controller entity 72 69 */ 73 70 struct rzv2h_cpg_priv { ··· 82 77 struct rzv2h_reset *resets; 83 78 unsigned int num_resets; 84 79 unsigned int last_dt_core_clk; 80 + 81 + atomic_t *mstop_count; 85 82 86 83 struct reset_controller_dev rcdev; 87 84 }; ··· 104 97 * struct mod_clock - Module clock 105 98 * 106 99 * @priv: CPG private data 100 + * @mstop_data: mstop data relating to module clock 107 101 * @hw: handle between common and hardware-specific interfaces 102 + * @no_pm: flag to indicate PM is not supported 108 103 * @on_index: register offset 109 104 * @on_bit: ON/MON bit 110 105 * @mon_index: monitor register offset ··· 114 105 */ 115 106 struct mod_clock { 116 107 struct rzv2h_cpg_priv *priv; 108 + unsigned int mstop_data; 117 109 struct clk_hw hw; 110 + bool no_pm; 118 111 u8 on_index; 119 112 u8 on_bit; 120 113 s8 mon_index; ··· 442 431 core->name, PTR_ERR(clk)); 443 432 } 444 433 434 + static void rzv2h_mod_clock_mstop_enable(struct rzv2h_cpg_priv *priv, 435 + u32 mstop_data) 436 + { 437 + unsigned long mstop_mask = FIELD_GET(BUS_MSTOP_BITS_MASK, mstop_data); 438 + u16 mstop_index = FIELD_GET(BUS_MSTOP_IDX_MASK, mstop_data); 439 + unsigned int index = (mstop_index - 1) * 16; 440 + atomic_t *mstop = &priv->mstop_count[index]; 441 + unsigned long flags; 442 + unsigned int i; 443 + u32 val = 0; 444 + 445 + spin_lock_irqsave(&priv->rmw_lock, flags); 446 + for_each_set_bit(i, &mstop_mask, 16) { 447 + if (!atomic_read(&mstop[i])) 448 + val |= BIT(i) << 16; 449 + atomic_inc(&mstop[i]); 450 + } 451 + if (val) 452 + writel(val, priv->base + CPG_BUS_MSTOP(mstop_index)); 453 + spin_unlock_irqrestore(&priv->rmw_lock, flags); 454 + } 455 + 456 + static void rzv2h_mod_clock_mstop_disable(struct rzv2h_cpg_priv *priv, 457 + u32 mstop_data) 458 + { 459 + unsigned long mstop_mask = FIELD_GET(BUS_MSTOP_BITS_MASK, mstop_data); 460 + u16 mstop_index = FIELD_GET(BUS_MSTOP_IDX_MASK, mstop_data); 461 + unsigned int index = (mstop_index - 1) * 16; 462 + atomic_t *mstop = &priv->mstop_count[index]; 463 + unsigned long flags; 464 + unsigned int i; 465 + u32 val = 0; 466 + 467 + spin_lock_irqsave(&priv->rmw_lock, flags); 468 + for_each_set_bit(i, &mstop_mask, 16) { 469 + if (!atomic_read(&mstop[i]) || 470 + atomic_dec_and_test(&mstop[i])) 471 + val |= BIT(i) << 16 | BIT(i); 472 + } 473 + if (val) 474 + writel(val, priv->base + CPG_BUS_MSTOP(mstop_index)); 475 + spin_unlock_irqrestore(&priv->rmw_lock, flags); 476 + } 477 + 478 + static int rzv2h_mod_clock_is_enabled(struct clk_hw *hw) 479 + { 480 + struct mod_clock *clock = to_mod_clock(hw); 481 + struct rzv2h_cpg_priv *priv = clock->priv; 482 + u32 bitmask; 483 + u32 offset; 484 + 485 + if (clock->mon_index >= 0) { 486 + offset = GET_CLK_MON_OFFSET(clock->mon_index); 487 + bitmask = BIT(clock->mon_bit); 488 + } else { 489 + offset = GET_CLK_ON_OFFSET(clock->on_index); 490 + bitmask = BIT(clock->on_bit); 491 + } 492 + 493 + return readl(priv->base + offset) & bitmask; 494 + } 495 + 445 496 static int rzv2h_mod_clock_endisable(struct clk_hw *hw, bool enable) 446 497 { 498 + bool enabled = rzv2h_mod_clock_is_enabled(hw); 447 499 struct mod_clock *clock = to_mod_clock(hw); 448 500 unsigned int reg = GET_CLK_ON_OFFSET(clock->on_index); 449 501 struct rzv2h_cpg_priv *priv = clock->priv; ··· 518 444 dev_dbg(dev, "CLK_ON 0x%x/%pC %s\n", reg, hw->clk, 519 445 enable ? "ON" : "OFF"); 520 446 521 - value = bitmask << 16; 522 - if (enable) 523 - value |= bitmask; 447 + if (enabled == enable) 448 + return 0; 524 449 525 - writel(value, priv->base + reg); 450 + value = bitmask << 16; 451 + if (enable) { 452 + value |= bitmask; 453 + writel(value, priv->base + reg); 454 + if (clock->mstop_data != BUS_MSTOP_NONE) 455 + rzv2h_mod_clock_mstop_enable(priv, clock->mstop_data); 456 + } else { 457 + if (clock->mstop_data != BUS_MSTOP_NONE) 458 + rzv2h_mod_clock_mstop_disable(priv, clock->mstop_data); 459 + writel(value, priv->base + reg); 460 + } 526 461 527 462 if (!enable || clock->mon_index < 0) 528 463 return 0; ··· 555 472 static void rzv2h_mod_clock_disable(struct clk_hw *hw) 556 473 { 557 474 rzv2h_mod_clock_endisable(hw, false); 558 - } 559 - 560 - static int rzv2h_mod_clock_is_enabled(struct clk_hw *hw) 561 - { 562 - struct mod_clock *clock = to_mod_clock(hw); 563 - struct rzv2h_cpg_priv *priv = clock->priv; 564 - u32 bitmask; 565 - u32 offset; 566 - 567 - if (clock->mon_index >= 0) { 568 - offset = GET_CLK_MON_OFFSET(clock->mon_index); 569 - bitmask = BIT(clock->mon_bit); 570 - } else { 571 - offset = GET_CLK_ON_OFFSET(clock->on_index); 572 - bitmask = BIT(clock->on_bit); 573 - } 574 - 575 - return readl(priv->base + offset) & bitmask; 576 475 } 577 476 578 477 static const struct clk_ops rzv2h_mod_clock_ops = { ··· 606 541 clock->on_bit = mod->on_bit; 607 542 clock->mon_index = mod->mon_index; 608 543 clock->mon_bit = mod->mon_bit; 544 + clock->no_pm = mod->no_pm; 609 545 clock->priv = priv; 610 546 clock->hw.init = &init; 547 + clock->mstop_data = mod->mstop_data; 611 548 612 549 ret = devm_clk_hw_register(dev, &clock->hw); 613 550 if (ret) { ··· 618 551 } 619 552 620 553 priv->clks[id] = clock->hw.clk; 554 + 555 + /* 556 + * Ensure the module clocks and MSTOP bits are synchronized when they are 557 + * turned ON by the bootloader. Enable MSTOP bits for module clocks that were 558 + * turned ON in an earlier boot stage. 559 + */ 560 + if (clock->mstop_data != BUS_MSTOP_NONE && 561 + !mod->critical && rzv2h_mod_clock_is_enabled(&clock->hw)) { 562 + rzv2h_mod_clock_mstop_enable(priv, clock->mstop_data); 563 + } else if (clock->mstop_data != BUS_MSTOP_NONE && mod->critical) { 564 + unsigned long mstop_mask = FIELD_GET(BUS_MSTOP_BITS_MASK, clock->mstop_data); 565 + u16 mstop_index = FIELD_GET(BUS_MSTOP_IDX_MASK, clock->mstop_data); 566 + unsigned int index = (mstop_index - 1) * 16; 567 + atomic_t *mstop = &priv->mstop_count[index]; 568 + unsigned long flags; 569 + unsigned int i; 570 + u32 val = 0; 571 + 572 + /* 573 + * Critical clocks are turned ON immediately upon registration, and the 574 + * MSTOP counter is updated through the rzv2h_mod_clock_enable() path. 575 + * However, if the critical clocks were already turned ON by the initial 576 + * bootloader, synchronize the atomic counter here and clear the MSTOP bit. 577 + */ 578 + spin_lock_irqsave(&priv->rmw_lock, flags); 579 + for_each_set_bit(i, &mstop_mask, 16) { 580 + if (atomic_read(&mstop[i])) 581 + continue; 582 + val |= BIT(i) << 16; 583 + atomic_inc(&mstop[i]); 584 + } 585 + if (val) 586 + writel(val, priv->base + CPG_BUS_MSTOP(mstop_index)); 587 + spin_unlock_irqrestore(&priv->rmw_lock, flags); 588 + } 621 589 622 590 return; 623 591 ··· 770 668 struct generic_pm_domain genpd; 771 669 }; 772 670 671 + static bool rzv2h_cpg_is_pm_clk(struct rzv2h_cpg_pd *pd, 672 + const struct of_phandle_args *clkspec) 673 + { 674 + if (clkspec->np != pd->genpd.dev.of_node || clkspec->args_count != 2) 675 + return false; 676 + 677 + switch (clkspec->args[0]) { 678 + case CPG_MOD: { 679 + struct rzv2h_cpg_priv *priv = pd->priv; 680 + unsigned int id = clkspec->args[1]; 681 + struct mod_clock *clock; 682 + 683 + if (id >= priv->num_mod_clks) 684 + return false; 685 + 686 + if (priv->clks[priv->num_core_clks + id] == ERR_PTR(-ENOENT)) 687 + return false; 688 + 689 + clock = to_mod_clock(__clk_get_hw(priv->clks[priv->num_core_clks + id])); 690 + 691 + return !clock->no_pm; 692 + } 693 + 694 + case CPG_CORE: 695 + default: 696 + return false; 697 + } 698 + } 699 + 773 700 static int rzv2h_cpg_attach_dev(struct generic_pm_domain *domain, struct device *dev) 774 701 { 702 + struct rzv2h_cpg_pd *pd = container_of(domain, struct rzv2h_cpg_pd, genpd); 775 703 struct device_node *np = dev->of_node; 776 704 struct of_phandle_args clkspec; 777 705 bool once = true; 778 706 struct clk *clk; 707 + unsigned int i; 779 708 int error; 780 - int i = 0; 781 709 782 - while (!of_parse_phandle_with_args(np, "clocks", "#clock-cells", i, 783 - &clkspec)) { 710 + for (i = 0; !of_parse_phandle_with_args(np, "clocks", "#clock-cells", i, &clkspec); i++) { 711 + if (!rzv2h_cpg_is_pm_clk(pd, &clkspec)) { 712 + of_node_put(clkspec.np); 713 + continue; 714 + } 715 + 784 716 if (once) { 785 717 once = false; 786 718 error = pm_clk_create(dev); ··· 836 700 error); 837 701 goto fail_put; 838 702 } 839 - i++; 840 703 } 841 704 842 705 return 0; ··· 921 786 if (!clks) 922 787 return -ENOMEM; 923 788 789 + priv->mstop_count = devm_kcalloc(dev, info->num_mstop_bits, 790 + sizeof(*priv->mstop_count), GFP_KERNEL); 791 + if (!priv->mstop_count) 792 + return -ENOMEM; 793 + 924 794 priv->resets = devm_kmemdup(dev, info->resets, sizeof(*info->resets) * 925 795 info->num_resets, GFP_KERNEL); 926 796 if (!priv->resets) ··· 971 831 { 972 832 .compatible = "renesas,r9a09g057-cpg", 973 833 .data = &r9a09g057_cpg_info, 834 + }, 835 + #endif 836 + #ifdef CONFIG_CLK_R9A09G047 837 + { 838 + .compatible = "renesas,r9a09g047-cpg", 839 + .data = &r9a09g047_cpg_info, 974 840 }, 975 841 #endif 976 842 { /* sentinel */ }
+34 -5
drivers/clk/renesas/rzv2h-cpg.h
··· 8 8 #ifndef __RENESAS_RZV2H_CPG_H__ 9 9 #define __RENESAS_RZV2H_CPG_H__ 10 10 11 + #include <linux/bitfield.h> 12 + 11 13 /** 12 14 * struct ddiv - Structure for dynamic switching divider 13 15 * ··· 35 33 36 34 #define CPG_CDDIV0 (0x400) 37 35 #define CPG_CDDIV1 (0x404) 36 + #define CPG_CDDIV3 (0x40C) 37 + #define CPG_CDDIV4 (0x410) 38 38 39 39 #define CDDIV0_DIVCTL2 DDIV_PACK(CPG_CDDIV0, 8, 3, 2) 40 40 #define CDDIV1_DIVCTL0 DDIV_PACK(CPG_CDDIV1, 0, 2, 4) 41 41 #define CDDIV1_DIVCTL1 DDIV_PACK(CPG_CDDIV1, 4, 2, 5) 42 42 #define CDDIV1_DIVCTL2 DDIV_PACK(CPG_CDDIV1, 8, 2, 6) 43 43 #define CDDIV1_DIVCTL3 DDIV_PACK(CPG_CDDIV1, 12, 2, 7) 44 + #define CDDIV3_DIVCTL3 DDIV_PACK(CPG_CDDIV3, 12, 1, 15) 45 + #define CDDIV4_DIVCTL0 DDIV_PACK(CPG_CDDIV4, 0, 1, 16) 46 + #define CDDIV4_DIVCTL1 DDIV_PACK(CPG_CDDIV4, 4, 1, 17) 47 + #define CDDIV4_DIVCTL2 DDIV_PACK(CPG_CDDIV4, 8, 1, 18) 48 + 49 + #define BUS_MSTOP_IDX_MASK GENMASK(31, 16) 50 + #define BUS_MSTOP_BITS_MASK GENMASK(15, 0) 51 + #define BUS_MSTOP(idx, mask) (FIELD_PREP_CONST(BUS_MSTOP_IDX_MASK, (idx)) | \ 52 + FIELD_PREP_CONST(BUS_MSTOP_BITS_MASK, (mask))) 53 + #define BUS_MSTOP_NONE GENMASK(31, 0) 44 54 45 55 /** 46 56 * Definitions of CPG Core Clocks ··· 112 98 * struct rzv2h_mod_clk - Module Clocks definitions 113 99 * 114 100 * @name: handle between common and hardware-specific interfaces 101 + * @mstop_data: packed data mstop register offset and mask 115 102 * @parent: id of parent clock 116 103 * @critical: flag to indicate the clock is critical 104 + * @no_pm: flag to indicate PM is not supported 117 105 * @on_index: control register index 118 106 * @on_bit: ON bit 119 107 * @mon_index: monitor register index ··· 123 107 */ 124 108 struct rzv2h_mod_clk { 125 109 const char *name; 110 + u32 mstop_data; 126 111 u16 parent; 127 112 bool critical; 113 + bool no_pm; 128 114 u8 on_index; 129 115 u8 on_bit; 130 116 s8 mon_index; 131 117 u8 mon_bit; 132 118 }; 133 119 134 - #define DEF_MOD_BASE(_name, _parent, _critical, _onindex, _onbit, _monindex, _monbit) \ 120 + #define DEF_MOD_BASE(_name, _mstop, _parent, _critical, _no_pm, _onindex, _onbit, _monindex, _monbit) \ 135 121 { \ 136 122 .name = (_name), \ 123 + .mstop_data = (_mstop), \ 137 124 .parent = (_parent), \ 138 125 .critical = (_critical), \ 126 + .no_pm = (_no_pm), \ 139 127 .on_index = (_onindex), \ 140 128 .on_bit = (_onbit), \ 141 129 .mon_index = (_monindex), \ 142 130 .mon_bit = (_monbit), \ 143 131 } 144 132 145 - #define DEF_MOD(_name, _parent, _onindex, _onbit, _monindex, _monbit) \ 146 - DEF_MOD_BASE(_name, _parent, false, _onindex, _onbit, _monindex, _monbit) 133 + #define DEF_MOD(_name, _parent, _onindex, _onbit, _monindex, _monbit, _mstop) \ 134 + DEF_MOD_BASE(_name, _mstop, _parent, false, false, _onindex, _onbit, _monindex, _monbit) 147 135 148 - #define DEF_MOD_CRITICAL(_name, _parent, _onindex, _onbit, _monindex, _monbit) \ 149 - DEF_MOD_BASE(_name, _parent, true, _onindex, _onbit, _monindex, _monbit) 136 + #define DEF_MOD_CRITICAL(_name, _parent, _onindex, _onbit, _monindex, _monbit, _mstop) \ 137 + DEF_MOD_BASE(_name, _mstop, _parent, true, false, _onindex, _onbit, _monindex, _monbit) 138 + 139 + #define DEF_MOD_NO_PM(_name, _parent, _onindex, _onbit, _monindex, _monbit, _mstop) \ 140 + DEF_MOD_BASE(_name, _mstop, _parent, false, true, _onindex, _onbit, _monindex, _monbit) 150 141 151 142 /** 152 143 * struct rzv2h_reset - Reset definitions ··· 195 172 * 196 173 * @resets: Array of Module Reset definitions 197 174 * @num_resets: Number of entries in resets[] 175 + * 176 + * @num_mstop_bits: Maximum number of MSTOP bits supported, equivalent to the 177 + * number of CPG_BUS_m_MSTOP registers multiplied by 16. 198 178 */ 199 179 struct rzv2h_cpg_info { 200 180 /* Core Clocks */ ··· 214 188 /* Resets */ 215 189 const struct rzv2h_reset *resets; 216 190 unsigned int num_resets; 191 + 192 + unsigned int num_mstop_bits; 217 193 }; 218 194 195 + extern const struct rzv2h_cpg_info r9a09g047_cpg_info; 219 196 extern const struct rzv2h_cpg_info r9a09g057_cpg_info; 220 197 221 198 #endif /* __RENESAS_RZV2H_CPG_H__ */
+1
drivers/clk/samsung/Makefile
··· 21 21 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynos7885.o 22 22 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynos850.o 23 23 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynos8895.o 24 + obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynos990.o 24 25 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynosautov9.o 25 26 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynosautov920.o 26 27 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-gs101.o
+1343
drivers/clk/samsung/clk-exynos990.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * Copyright (C) 2024 Igor Belwon <igor.belwon@mentallysanemainliners.org> 4 + * 5 + * Common Clock Framework support for Exynos990. 6 + */ 7 + 8 + #include <linux/clk.h> 9 + #include <linux/clk-provider.h> 10 + #include <linux/of.h> 11 + #include <linux/platform_device.h> 12 + 13 + #include <dt-bindings/clock/samsung,exynos990.h> 14 + 15 + #include "clk.h" 16 + #include "clk-exynos-arm64.h" 17 + #include "clk-pll.h" 18 + 19 + /* NOTE: Must be equal to the last clock ID increased by one */ 20 + #define CLKS_NR_TOP (CLK_GOUT_CMU_VRA_BUS + 1) 21 + #define CLKS_NR_HSI0 (CLK_GOUT_HSI0_XIU_D_HSI0_ACLK + 1) 22 + 23 + /* ---- CMU_TOP ------------------------------------------------------------- */ 24 + 25 + /* Register Offset definitions for CMU_TOP (0x1a330000) */ 26 + #define PLL_LOCKTIME_PLL_G3D 0x0000 27 + #define PLL_LOCKTIME_PLL_MMC 0x0004 28 + #define PLL_LOCKTIME_PLL_SHARED0 0x0008 29 + #define PLL_LOCKTIME_PLL_SHARED1 0x000c 30 + #define PLL_LOCKTIME_PLL_SHARED2 0x0010 31 + #define PLL_LOCKTIME_PLL_SHARED3 0x0014 32 + #define PLL_LOCKTIME_PLL_SHARED4 0x0018 33 + #define PLL_CON0_PLL_G3D 0x0100 34 + #define PLL_CON3_PLL_G3D 0x010c 35 + #define PLL_CON0_PLL_MMC 0x0140 36 + #define PLL_CON3_PLL_MMC 0x014c 37 + #define PLL_CON0_PLL_SHARED0 0x0180 38 + #define PLL_CON3_PLL_SHARED0 0x018c 39 + #define PLL_CON0_PLL_SHARED1 0x01c0 40 + #define PLL_CON3_PLL_SHARED1 0x01cc 41 + #define PLL_CON0_PLL_SHARED2 0x0200 42 + #define PLL_CON3_PLL_SHARED2 0x020c 43 + #define PLL_CON0_PLL_SHARED3 0x0240 44 + #define PLL_CON3_PLL_SHARED3 0x024c 45 + #define PLL_CON0_PLL_SHARED4 0x0280 46 + #define PLL_CON3_PLL_SHARED4 0x028c 47 + #define CLK_CON_MUX_MUX_CLKCMU_APM_BUS 0x1004 48 + #define CLK_CON_MUX_MUX_CLKCMU_AUD_CPU 0x1008 49 + #define CLK_CON_MUX_MUX_CLKCMU_BUS0_BUS 0x100c 50 + #define CLK_CON_MUX_MUX_CLKCMU_BUS1_BUS 0x1010 51 + #define CLK_CON_MUX_MUX_CLKCMU_BUS1_SSS 0x1014 52 + #define CLK_CON_MUX_MUX_CLKCMU_CIS_CLK0 0x1018 53 + #define CLK_CON_MUX_MUX_CLKCMU_CIS_CLK1 0x101c 54 + #define CLK_CON_MUX_MUX_CLKCMU_CIS_CLK2 0x1020 55 + #define CLK_CON_MUX_MUX_CLKCMU_CIS_CLK3 0x1024 56 + #define CLK_CON_MUX_MUX_CLKCMU_CIS_CLK4 0x1028 57 + #define CLK_CON_MUX_MUX_CLKCMU_CIS_CLK5 0x102c 58 + #define CLK_CON_MUX_MUX_CLKCMU_CMU_BOOST 0x1030 59 + #define CLK_CON_MUX_MUX_CLKCMU_CORE_BUS 0x1034 60 + #define CLK_CON_MUX_MUX_CLKCMU_CPUCL0_DBG_BUS 0x1038 61 + #define CLK_CON_MUX_MUX_CLKCMU_CPUCL0_SWITCH 0x103c 62 + #define CLK_CON_MUX_MUX_CLKCMU_CPUCL1_SWITCH 0x1040 63 + #define CLK_CON_MUX_MUX_CLKCMU_CPUCL2_BUSP 0x1044 64 + #define CLK_CON_MUX_MUX_CLKCMU_CPUCL2_SWITCH 0x1048 65 + #define CLK_CON_MUX_MUX_CLKCMU_CSIS_BUS 0x104c 66 + #define CLK_CON_MUX_MUX_CLKCMU_CSIS_OIS_MCU 0x1050 67 + #define CLK_CON_MUX_MUX_CLKCMU_DNC_BUS 0x1054 68 + #define CLK_CON_MUX_MUX_CLKCMU_DNC_BUSM 0x1058 69 + #define CLK_CON_MUX_MUX_CLKCMU_DNS_BUS 0x105c 70 + #define CLK_CON_MUX_MUX_CLKCMU_DPU 0x1060 71 + #define CLK_CON_MUX_MUX_CLKCMU_DPU_ALT 0x1064 72 + #define CLK_CON_MUX_MUX_CLKCMU_DSP_BUS 0x1068 73 + #define CLK_CON_MUX_MUX_CLKCMU_G2D_G2D 0x106c 74 + #define CLK_CON_MUX_MUX_CLKCMU_G2D_MSCL 0x1070 75 + #define CLK_CON_MUX_MUX_CLKCMU_HPM 0x1074 76 + #define CLK_CON_MUX_MUX_CLKCMU_HSI0_BUS 0x1078 77 + #define CLK_CON_MUX_MUX_CLKCMU_HSI0_DPGTC 0x107c 78 + #define CLK_CON_MUX_MUX_CLKCMU_HSI0_USB31DRD 0x1080 79 + #define CLK_CON_MUX_MUX_CLKCMU_HSI0_USBDP_DEBUG 0x1084 80 + #define CLK_CON_MUX_MUX_CLKCMU_HSI1_BUS 0x1088 81 + #define CLK_CON_MUX_MUX_CLKCMU_HSI1_MMC_CARD 0x108c 82 + #define CLK_CON_MUX_MUX_CLKCMU_HSI1_PCIE 0x1090 83 + #define CLK_CON_MUX_MUX_CLKCMU_HSI1_UFS_CARD 0x1094 84 + #define CLK_CON_MUX_MUX_CLKCMU_HSI1_UFS_EMBD 0x1098 85 + #define CLK_CON_MUX_MUX_CLKCMU_HSI2_BUS 0x109c 86 + #define CLK_CON_MUX_MUX_CLKCMU_HSI2_PCIE 0x10a0 87 + #define CLK_CON_MUX_MUX_CLKCMU_IPP_BUS 0x10a4 88 + #define CLK_CON_MUX_MUX_CLKCMU_ITP_BUS 0x10a8 89 + #define CLK_CON_MUX_MUX_CLKCMU_MCSC_BUS 0x10ac 90 + #define CLK_CON_MUX_MUX_CLKCMU_MCSC_GDC 0x10b0 91 + #define CLK_CON_MUX_MUX_CLKCMU_CMU_BOOST_CPU 0x10b4 92 + #define CLK_CON_MUX_MUX_CLKCMU_MFC0_MFC0 0x10b8 93 + #define CLK_CON_MUX_MUX_CLKCMU_MFC0_WFD 0x10bc 94 + #define CLK_CON_MUX_MUX_CLKCMU_MIF_BUSP 0x10c0 95 + #define CLK_CON_MUX_MUX_CLKCMU_MIF_SWITCH 0x10c4 96 + #define CLK_CON_MUX_MUX_CLKCMU_NPU_BUS 0x10c8 97 + #define CLK_CON_MUX_MUX_CLKCMU_PERIC0_BUS 0x10cc 98 + #define CLK_CON_MUX_MUX_CLKCMU_PERIC0_IP 0x10d0 99 + #define CLK_CON_MUX_MUX_CLKCMU_PERIC1_BUS 0x10d4 100 + #define CLK_CON_MUX_MUX_CLKCMU_PERIC1_IP 0x10d8 101 + #define CLK_CON_MUX_MUX_CLKCMU_PERIS_BUS 0x10dc 102 + #define CLK_CON_MUX_MUX_CLKCMU_SSP_BUS 0x10e0 103 + #define CLK_CON_MUX_MUX_CLKCMU_TNR_BUS 0x10e4 104 + #define CLK_CON_MUX_MUX_CLKCMU_VRA_BUS 0x10e8 105 + #define CLK_CON_DIV_CLKCMU_APM_BUS 0x1800 106 + #define CLK_CON_DIV_CLKCMU_AUD_CPU 0x1804 107 + #define CLK_CON_DIV_CLKCMU_BUS0_BUS 0x1808 108 + #define CLK_CON_DIV_CLKCMU_BUS1_BUS 0x180c 109 + #define CLK_CON_DIV_CLKCMU_BUS1_SSS 0x1810 110 + #define CLK_CON_DIV_CLKCMU_CIS_CLK0 0x1814 111 + #define CLK_CON_DIV_CLKCMU_CIS_CLK1 0x1818 112 + #define CLK_CON_DIV_CLKCMU_CIS_CLK2 0x181c 113 + #define CLK_CON_DIV_CLKCMU_CIS_CLK3 0x1820 114 + #define CLK_CON_DIV_CLKCMU_CIS_CLK4 0x1824 115 + #define CLK_CON_DIV_CLKCMU_CIS_CLK5 0x1828 116 + #define CLK_CON_DIV_CLKCMU_CMU_BOOST 0x182c 117 + #define CLK_CON_DIV_CLKCMU_CORE_BUS 0x1830 118 + #define CLK_CON_DIV_CLKCMU_CPUCL0_DBG_BUS 0x1834 119 + #define CLK_CON_DIV_CLKCMU_CPUCL0_SWITCH 0x1838 120 + #define CLK_CON_DIV_CLKCMU_CPUCL1_SWITCH 0x183c 121 + #define CLK_CON_DIV_CLKCMU_CPUCL2_BUSP 0x1840 122 + #define CLK_CON_DIV_CLKCMU_CPUCL2_SWITCH 0x1844 123 + #define CLK_CON_DIV_CLKCMU_CSIS_BUS 0x1848 124 + #define CLK_CON_DIV_CLKCMU_CSIS_OIS_MCU 0x184c 125 + #define CLK_CON_DIV_CLKCMU_DNC_BUS 0x1850 126 + #define CLK_CON_DIV_CLKCMU_DNC_BUSM 0x1854 127 + #define CLK_CON_DIV_CLKCMU_DNS_BUS 0x1858 128 + #define CLK_CON_DIV_CLKCMU_DSP_BUS 0x185c 129 + #define CLK_CON_DIV_CLKCMU_G2D_G2D 0x1860 130 + #define CLK_CON_DIV_CLKCMU_G2D_MSCL 0x1864 131 + #define CLK_CON_DIV_CLKCMU_G3D_SWITCH 0x1868 132 + #define CLK_CON_DIV_CLKCMU_HPM 0x186c 133 + #define CLK_CON_DIV_CLKCMU_HSI0_BUS 0x1870 134 + #define CLK_CON_DIV_CLKCMU_HSI0_DPGTC 0x1874 135 + #define CLK_CON_DIV_CLKCMU_HSI0_USB31DRD 0x1878 136 + #define CLK_CON_DIV_CLKCMU_HSI0_USBDP_DEBUG 0x187c 137 + #define CLK_CON_DIV_CLKCMU_HSI1_BUS 0x1880 138 + #define CLK_CON_DIV_CLKCMU_HSI1_MMC_CARD 0x1884 139 + #define CLK_CON_DIV_CLKCMU_HSI1_PCIE 0x1888 140 + #define CLK_CON_DIV_CLKCMU_HSI1_UFS_CARD 0x188c 141 + #define CLK_CON_DIV_CLKCMU_HSI1_UFS_EMBD 0x1890 142 + #define CLK_CON_DIV_CLKCMU_HSI2_BUS 0x1894 143 + #define CLK_CON_DIV_CLKCMU_HSI2_PCIE 0x1898 144 + #define CLK_CON_DIV_CLKCMU_IPP_BUS 0x189c 145 + #define CLK_CON_DIV_CLKCMU_ITP_BUS 0x18a0 146 + #define CLK_CON_DIV_CLKCMU_MCSC_BUS 0x18a4 147 + #define CLK_CON_DIV_CLKCMU_MCSC_GDC 0x18a8 148 + #define CLK_CON_DIV_CLKCMU_CMU_BOOST_CPU 0x18ac 149 + #define CLK_CON_DIV_CLKCMU_MFC0_MFC0 0x18b0 150 + #define CLK_CON_DIV_CLKCMU_MFC0_WFD 0x18b4 151 + #define CLK_CON_DIV_CLKCMU_MIF_BUSP 0x18b8 152 + #define CLK_CON_DIV_CLKCMU_NPU_BUS 0x18bc 153 + #define CLK_CON_DIV_CLKCMU_OTP 0x18c0 154 + #define CLK_CON_DIV_CLKCMU_PERIC0_BUS 0x18c4 155 + #define CLK_CON_DIV_CLKCMU_PERIC0_IP 0x18c8 156 + #define CLK_CON_DIV_CLKCMU_PERIC1_BUS 0x18cc 157 + #define CLK_CON_DIV_CLKCMU_PERIC1_IP 0x18d0 158 + #define CLK_CON_DIV_CLKCMU_PERIS_BUS 0x18d4 159 + #define CLK_CON_DIV_CLKCMU_SSP_BUS 0x18d8 160 + #define CLK_CON_DIV_CLKCMU_TNR_BUS 0x18dc 161 + #define CLK_CON_DIV_CLKCMU_VRA_BUS 0x18e0 162 + #define CLK_CON_DIV_DIV_CLKCMU_DPU 0x18e8 163 + #define CLK_CON_DIV_DIV_CLKCMU_DPU_ALT 0x18ec 164 + #define CLK_CON_DIV_PLL_SHARED0_DIV2 0x18f4 165 + #define CLK_CON_DIV_PLL_SHARED0_DIV3 0x18f8 166 + #define CLK_CON_DIV_PLL_SHARED0_DIV4 0x18fc 167 + #define CLK_CON_DIV_PLL_SHARED1_DIV2 0x1900 168 + #define CLK_CON_DIV_PLL_SHARED1_DIV3 0x1904 169 + #define CLK_CON_DIV_PLL_SHARED1_DIV4 0x1908 170 + #define CLK_CON_DIV_PLL_SHARED2_DIV2 0x190c 171 + #define CLK_CON_DIV_PLL_SHARED4_DIV2 0x1910 172 + #define CLK_CON_DIV_PLL_SHARED4_DIV3 0x1914 173 + #define CLK_CON_DIV_PLL_SHARED4_DIV4 0x1918 174 + #define CLK_CON_GAT_CLKCMU_G3D_BUS 0x2000 175 + #define CLK_CON_GAT_CLKCMU_MIF_SWITCH 0x2004 176 + #define CLK_CON_GAT_GATE_CLKCMU_APM_BUS 0x2008 177 + #define CLK_CON_GAT_GATE_CLKCMU_AUD_CPU 0x200c 178 + #define CLK_CON_GAT_GATE_CLKCMU_BUS0_BUS 0x2010 179 + #define CLK_CON_GAT_GATE_CLKCMU_BUS1_BUS 0x2014 180 + #define CLK_CON_GAT_GATE_CLKCMU_BUS1_SSS 0x2018 181 + #define CLK_CON_GAT_GATE_CLKCMU_CIS_CLK0 0x201c 182 + #define CLK_CON_GAT_GATE_CLKCMU_CIS_CLK1 0x2020 183 + #define CLK_CON_GAT_GATE_CLKCMU_CIS_CLK2 0x2024 184 + #define CLK_CON_GAT_GATE_CLKCMU_CIS_CLK3 0x2028 185 + #define CLK_CON_GAT_GATE_CLKCMU_CIS_CLK4 0x202c 186 + #define CLK_CON_GAT_GATE_CLKCMU_CIS_CLK5 0x2030 187 + #define CLK_CON_GAT_GATE_CLKCMU_CORE_BUS 0x2034 188 + #define CLK_CON_GAT_GATE_CLKCMU_CPUCL0_DBG_BUS 0x2038 189 + #define CLK_CON_GAT_GATE_CLKCMU_CPUCL0_SWITCH 0x203c 190 + #define CLK_CON_GAT_GATE_CLKCMU_CPUCL1_SWITCH 0x2040 191 + #define CLK_CON_GAT_GATE_CLKCMU_CPUCL2_BUSP 0x2044 192 + #define CLK_CON_GAT_GATE_CLKCMU_CPUCL2_SWITCH 0x2048 193 + #define CLK_CON_GAT_GATE_CLKCMU_CSIS_BUS 0x204c 194 + #define CLK_CON_GAT_GATE_CLKCMU_CSIS_OIS_MCU 0x2050 195 + #define CLK_CON_GAT_GATE_CLKCMU_DNC_BUS 0x2054 196 + #define CLK_CON_GAT_GATE_CLKCMU_DNC_BUSM 0x2058 197 + #define CLK_CON_GAT_GATE_CLKCMU_DNS_BUS 0x205c 198 + #define CLK_CON_GAT_GATE_CLKCMU_DPU 0x2060 199 + #define CLK_CON_GAT_GATE_CLKCMU_DPU_BUS 0x2064 200 + #define CLK_CON_GAT_GATE_CLKCMU_DSP_BUS 0x2068 201 + #define CLK_CON_GAT_GATE_CLKCMU_G2D_G2D 0x206c 202 + #define CLK_CON_GAT_GATE_CLKCMU_G2D_MSCL 0x2070 203 + #define CLK_CON_GAT_GATE_CLKCMU_G3D_SWITCH 0x2074 204 + #define CLK_CON_GAT_GATE_CLKCMU_HPM 0x2078 205 + #define CLK_CON_GAT_GATE_CLKCMU_HSI0_BUS 0x207c 206 + #define CLK_CON_GAT_GATE_CLKCMU_HSI0_DPGTC 0x2080 207 + #define CLK_CON_GAT_GATE_CLKCMU_HSI0_USB31DRD 0x2084 208 + #define CLK_CON_GAT_GATE_CLKCMU_HSI0_USBDP_DEBUG 0x2088 209 + #define CLK_CON_GAT_GATE_CLKCMU_HSI1_BUS 0x208c 210 + #define CLK_CON_GAT_GATE_CLKCMU_HSI1_MMC_CARD 0x2090 211 + #define CLK_CON_GAT_GATE_CLKCMU_HSI1_PCIE 0x2094 212 + #define CLK_CON_GAT_GATE_CLKCMU_HSI1_UFS_CARD 0x2098 213 + #define CLK_CON_GAT_GATE_CLKCMU_HSI1_UFS_EMBD 0x209c 214 + #define CLK_CON_GAT_GATE_CLKCMU_HSI2_BUS 0x20a0 215 + #define CLK_CON_GAT_GATE_CLKCMU_HSI2_PCIE 0x20a4 216 + #define CLK_CON_GAT_GATE_CLKCMU_IPP_BUS 0x20a8 217 + #define CLK_CON_GAT_GATE_CLKCMU_ITP_BUS 0x20ac 218 + #define CLK_CON_GAT_GATE_CLKCMU_MCSC_BUS 0x20b0 219 + #define CLK_CON_GAT_GATE_CLKCMU_MCSC_GDC 0x20b4 220 + #define CLK_CON_GAT_GATE_CLKCMU_MFC0_MFC0 0x20bc 221 + #define CLK_CON_GAT_GATE_CLKCMU_MFC0_WFD 0x20c0 222 + #define CLK_CON_GAT_GATE_CLKCMU_MIF_BUSP 0x20c4 223 + #define CLK_CON_GAT_GATE_CLKCMU_NPU_BUS 0x20c8 224 + #define CLK_CON_GAT_GATE_CLKCMU_PERIC0_BUS 0x20cc 225 + #define CLK_CON_GAT_GATE_CLKCMU_PERIC0_IP 0x20d0 226 + #define CLK_CON_GAT_GATE_CLKCMU_PERIC1_BUS 0x20d4 227 + #define CLK_CON_GAT_GATE_CLKCMU_PERIC1_IP 0x20d8 228 + #define CLK_CON_GAT_GATE_CLKCMU_PERIS_BUS 0x20dc 229 + #define CLK_CON_GAT_GATE_CLKCMU_SSP_BUS 0x20e0 230 + #define CLK_CON_GAT_GATE_CLKCMU_TNR_BUS 0x20e4 231 + #define CLK_CON_GAT_GATE_CLKCMU_VRA_BUS 0x20e8 232 + 233 + static const unsigned long top_clk_regs[] __initconst = { 234 + PLL_LOCKTIME_PLL_G3D, 235 + PLL_LOCKTIME_PLL_MMC, 236 + PLL_LOCKTIME_PLL_SHARED0, 237 + PLL_LOCKTIME_PLL_SHARED1, 238 + PLL_LOCKTIME_PLL_SHARED2, 239 + PLL_LOCKTIME_PLL_SHARED3, 240 + PLL_LOCKTIME_PLL_SHARED4, 241 + PLL_CON3_PLL_G3D, 242 + PLL_CON3_PLL_MMC, 243 + PLL_CON3_PLL_SHARED0, 244 + PLL_CON3_PLL_SHARED1, 245 + PLL_CON3_PLL_SHARED2, 246 + PLL_CON3_PLL_SHARED3, 247 + PLL_CON3_PLL_SHARED4, 248 + CLK_CON_MUX_MUX_CLKCMU_APM_BUS, 249 + CLK_CON_MUX_MUX_CLKCMU_AUD_CPU, 250 + CLK_CON_MUX_MUX_CLKCMU_BUS0_BUS, 251 + CLK_CON_MUX_MUX_CLKCMU_BUS1_BUS, 252 + CLK_CON_MUX_MUX_CLKCMU_BUS1_SSS, 253 + CLK_CON_MUX_MUX_CLKCMU_CIS_CLK0, 254 + CLK_CON_MUX_MUX_CLKCMU_CIS_CLK1, 255 + CLK_CON_MUX_MUX_CLKCMU_CIS_CLK2, 256 + CLK_CON_MUX_MUX_CLKCMU_CIS_CLK3, 257 + CLK_CON_MUX_MUX_CLKCMU_CIS_CLK4, 258 + CLK_CON_MUX_MUX_CLKCMU_CIS_CLK5, 259 + CLK_CON_MUX_MUX_CLKCMU_CMU_BOOST, 260 + CLK_CON_MUX_MUX_CLKCMU_CORE_BUS, 261 + CLK_CON_MUX_MUX_CLKCMU_CPUCL0_DBG_BUS, 262 + CLK_CON_MUX_MUX_CLKCMU_CPUCL0_SWITCH, 263 + CLK_CON_MUX_MUX_CLKCMU_CPUCL1_SWITCH, 264 + CLK_CON_MUX_MUX_CLKCMU_CPUCL2_BUSP, 265 + CLK_CON_MUX_MUX_CLKCMU_CPUCL2_SWITCH, 266 + CLK_CON_MUX_MUX_CLKCMU_CSIS_BUS, 267 + CLK_CON_MUX_MUX_CLKCMU_CSIS_OIS_MCU, 268 + CLK_CON_MUX_MUX_CLKCMU_DNC_BUS, 269 + CLK_CON_MUX_MUX_CLKCMU_DNC_BUSM, 270 + CLK_CON_MUX_MUX_CLKCMU_DNS_BUS, 271 + CLK_CON_MUX_MUX_CLKCMU_DPU, 272 + CLK_CON_MUX_MUX_CLKCMU_DPU_ALT, 273 + CLK_CON_MUX_MUX_CLKCMU_DSP_BUS, 274 + CLK_CON_MUX_MUX_CLKCMU_G2D_G2D, 275 + CLK_CON_MUX_MUX_CLKCMU_G2D_MSCL, 276 + CLK_CON_MUX_MUX_CLKCMU_HPM, 277 + CLK_CON_MUX_MUX_CLKCMU_HSI0_BUS, 278 + CLK_CON_MUX_MUX_CLKCMU_HSI0_DPGTC, 279 + CLK_CON_MUX_MUX_CLKCMU_HSI0_USB31DRD, 280 + CLK_CON_MUX_MUX_CLKCMU_HSI0_USBDP_DEBUG, 281 + CLK_CON_MUX_MUX_CLKCMU_HSI1_BUS, 282 + CLK_CON_MUX_MUX_CLKCMU_HSI1_MMC_CARD, 283 + CLK_CON_MUX_MUX_CLKCMU_HSI1_PCIE, 284 + CLK_CON_MUX_MUX_CLKCMU_HSI1_UFS_CARD, 285 + CLK_CON_MUX_MUX_CLKCMU_HSI1_UFS_EMBD, 286 + CLK_CON_MUX_MUX_CLKCMU_HSI2_BUS, 287 + CLK_CON_MUX_MUX_CLKCMU_HSI2_PCIE, 288 + CLK_CON_MUX_MUX_CLKCMU_IPP_BUS, 289 + CLK_CON_MUX_MUX_CLKCMU_ITP_BUS, 290 + CLK_CON_MUX_MUX_CLKCMU_MCSC_BUS, 291 + CLK_CON_MUX_MUX_CLKCMU_MCSC_GDC, 292 + CLK_CON_MUX_MUX_CLKCMU_CMU_BOOST_CPU, 293 + CLK_CON_MUX_MUX_CLKCMU_MFC0_MFC0, 294 + CLK_CON_MUX_MUX_CLKCMU_MFC0_WFD, 295 + CLK_CON_MUX_MUX_CLKCMU_MIF_BUSP, 296 + CLK_CON_MUX_MUX_CLKCMU_MIF_SWITCH, 297 + CLK_CON_MUX_MUX_CLKCMU_NPU_BUS, 298 + CLK_CON_MUX_MUX_CLKCMU_PERIC0_BUS, 299 + CLK_CON_MUX_MUX_CLKCMU_PERIC0_IP, 300 + CLK_CON_MUX_MUX_CLKCMU_PERIC1_BUS, 301 + CLK_CON_MUX_MUX_CLKCMU_PERIC1_IP, 302 + CLK_CON_MUX_MUX_CLKCMU_PERIS_BUS, 303 + CLK_CON_MUX_MUX_CLKCMU_SSP_BUS, 304 + CLK_CON_MUX_MUX_CLKCMU_TNR_BUS, 305 + CLK_CON_MUX_MUX_CLKCMU_VRA_BUS, 306 + CLK_CON_DIV_CLKCMU_APM_BUS, 307 + CLK_CON_DIV_CLKCMU_AUD_CPU, 308 + CLK_CON_DIV_CLKCMU_BUS0_BUS, 309 + CLK_CON_DIV_CLKCMU_BUS1_BUS, 310 + CLK_CON_DIV_CLKCMU_BUS1_SSS, 311 + CLK_CON_DIV_CLKCMU_CIS_CLK0, 312 + CLK_CON_DIV_CLKCMU_CIS_CLK1, 313 + CLK_CON_DIV_CLKCMU_CIS_CLK2, 314 + CLK_CON_DIV_CLKCMU_CIS_CLK3, 315 + CLK_CON_DIV_CLKCMU_CIS_CLK4, 316 + CLK_CON_DIV_CLKCMU_CIS_CLK5, 317 + CLK_CON_DIV_CLKCMU_CMU_BOOST, 318 + CLK_CON_DIV_CLKCMU_CORE_BUS, 319 + CLK_CON_DIV_CLKCMU_CPUCL0_DBG_BUS, 320 + CLK_CON_DIV_CLKCMU_CPUCL0_SWITCH, 321 + CLK_CON_DIV_CLKCMU_CPUCL1_SWITCH, 322 + CLK_CON_DIV_CLKCMU_CPUCL2_BUSP, 323 + CLK_CON_DIV_CLKCMU_CPUCL2_SWITCH, 324 + CLK_CON_DIV_CLKCMU_CSIS_BUS, 325 + CLK_CON_DIV_CLKCMU_CSIS_OIS_MCU, 326 + CLK_CON_DIV_CLKCMU_DNC_BUS, 327 + CLK_CON_DIV_CLKCMU_DNC_BUSM, 328 + CLK_CON_DIV_CLKCMU_DNS_BUS, 329 + CLK_CON_DIV_CLKCMU_DSP_BUS, 330 + CLK_CON_DIV_CLKCMU_G2D_G2D, 331 + CLK_CON_DIV_CLKCMU_G2D_MSCL, 332 + CLK_CON_DIV_CLKCMU_G3D_SWITCH, 333 + CLK_CON_DIV_CLKCMU_HPM, 334 + CLK_CON_DIV_CLKCMU_HSI0_BUS, 335 + CLK_CON_DIV_CLKCMU_HSI0_DPGTC, 336 + CLK_CON_DIV_CLKCMU_HSI0_USB31DRD, 337 + CLK_CON_DIV_CLKCMU_HSI0_USBDP_DEBUG, 338 + CLK_CON_DIV_CLKCMU_HSI1_BUS, 339 + CLK_CON_DIV_CLKCMU_HSI1_MMC_CARD, 340 + CLK_CON_DIV_CLKCMU_HSI1_PCIE, 341 + CLK_CON_DIV_CLKCMU_HSI1_UFS_CARD, 342 + CLK_CON_DIV_CLKCMU_HSI1_UFS_EMBD, 343 + CLK_CON_DIV_CLKCMU_HSI2_BUS, 344 + CLK_CON_DIV_CLKCMU_HSI2_PCIE, 345 + CLK_CON_DIV_CLKCMU_IPP_BUS, 346 + CLK_CON_DIV_CLKCMU_ITP_BUS, 347 + CLK_CON_DIV_CLKCMU_MCSC_BUS, 348 + CLK_CON_DIV_CLKCMU_MCSC_GDC, 349 + CLK_CON_DIV_CLKCMU_CMU_BOOST_CPU, 350 + CLK_CON_DIV_CLKCMU_MFC0_MFC0, 351 + CLK_CON_DIV_CLKCMU_MFC0_WFD, 352 + CLK_CON_DIV_CLKCMU_MIF_BUSP, 353 + CLK_CON_DIV_CLKCMU_NPU_BUS, 354 + CLK_CON_DIV_CLKCMU_OTP, 355 + CLK_CON_DIV_CLKCMU_PERIC0_BUS, 356 + CLK_CON_DIV_CLKCMU_PERIC0_IP, 357 + CLK_CON_DIV_CLKCMU_PERIC1_BUS, 358 + CLK_CON_DIV_CLKCMU_PERIC1_IP, 359 + CLK_CON_DIV_CLKCMU_PERIS_BUS, 360 + CLK_CON_DIV_CLKCMU_SSP_BUS, 361 + CLK_CON_DIV_CLKCMU_TNR_BUS, 362 + CLK_CON_DIV_CLKCMU_VRA_BUS, 363 + CLK_CON_DIV_DIV_CLKCMU_DPU, 364 + CLK_CON_DIV_DIV_CLKCMU_DPU_ALT, 365 + CLK_CON_DIV_PLL_SHARED0_DIV2, 366 + CLK_CON_DIV_PLL_SHARED0_DIV3, 367 + CLK_CON_DIV_PLL_SHARED0_DIV4, 368 + CLK_CON_DIV_PLL_SHARED1_DIV2, 369 + CLK_CON_DIV_PLL_SHARED1_DIV3, 370 + CLK_CON_DIV_PLL_SHARED1_DIV4, 371 + CLK_CON_DIV_PLL_SHARED2_DIV2, 372 + CLK_CON_DIV_PLL_SHARED4_DIV2, 373 + CLK_CON_DIV_PLL_SHARED4_DIV3, 374 + CLK_CON_DIV_PLL_SHARED4_DIV4, 375 + CLK_CON_GAT_CLKCMU_G3D_BUS, 376 + CLK_CON_GAT_CLKCMU_MIF_SWITCH, 377 + CLK_CON_GAT_GATE_CLKCMU_APM_BUS, 378 + CLK_CON_GAT_GATE_CLKCMU_AUD_CPU, 379 + CLK_CON_GAT_GATE_CLKCMU_BUS0_BUS, 380 + CLK_CON_GAT_GATE_CLKCMU_BUS1_BUS, 381 + CLK_CON_GAT_GATE_CLKCMU_BUS1_SSS, 382 + CLK_CON_GAT_GATE_CLKCMU_CIS_CLK0, 383 + CLK_CON_GAT_GATE_CLKCMU_CIS_CLK1, 384 + CLK_CON_GAT_GATE_CLKCMU_CIS_CLK2, 385 + CLK_CON_GAT_GATE_CLKCMU_CIS_CLK3, 386 + CLK_CON_GAT_GATE_CLKCMU_CIS_CLK4, 387 + CLK_CON_GAT_GATE_CLKCMU_CIS_CLK5, 388 + CLK_CON_GAT_GATE_CLKCMU_CORE_BUS, 389 + CLK_CON_GAT_GATE_CLKCMU_CPUCL0_DBG_BUS, 390 + CLK_CON_GAT_GATE_CLKCMU_CPUCL0_SWITCH, 391 + CLK_CON_GAT_GATE_CLKCMU_CPUCL1_SWITCH, 392 + CLK_CON_GAT_GATE_CLKCMU_CPUCL2_BUSP, 393 + CLK_CON_GAT_GATE_CLKCMU_CPUCL2_SWITCH, 394 + CLK_CON_GAT_GATE_CLKCMU_CSIS_BUS, 395 + CLK_CON_GAT_GATE_CLKCMU_CSIS_OIS_MCU, 396 + CLK_CON_GAT_GATE_CLKCMU_DNC_BUS, 397 + CLK_CON_GAT_GATE_CLKCMU_DNC_BUSM, 398 + CLK_CON_GAT_GATE_CLKCMU_DNS_BUS, 399 + CLK_CON_GAT_GATE_CLKCMU_DPU, 400 + CLK_CON_GAT_GATE_CLKCMU_DPU_BUS, 401 + CLK_CON_GAT_GATE_CLKCMU_DSP_BUS, 402 + CLK_CON_GAT_GATE_CLKCMU_G2D_G2D, 403 + CLK_CON_GAT_GATE_CLKCMU_G2D_MSCL, 404 + CLK_CON_GAT_GATE_CLKCMU_G3D_SWITCH, 405 + CLK_CON_GAT_GATE_CLKCMU_HPM, 406 + CLK_CON_GAT_GATE_CLKCMU_HSI0_BUS, 407 + CLK_CON_GAT_GATE_CLKCMU_HSI0_DPGTC, 408 + CLK_CON_GAT_GATE_CLKCMU_HSI0_USB31DRD, 409 + CLK_CON_GAT_GATE_CLKCMU_HSI0_USBDP_DEBUG, 410 + CLK_CON_GAT_GATE_CLKCMU_HSI1_BUS, 411 + CLK_CON_GAT_GATE_CLKCMU_HSI1_MMC_CARD, 412 + CLK_CON_GAT_GATE_CLKCMU_HSI1_PCIE, 413 + CLK_CON_GAT_GATE_CLKCMU_HSI1_UFS_CARD, 414 + CLK_CON_GAT_GATE_CLKCMU_HSI1_UFS_EMBD, 415 + CLK_CON_GAT_GATE_CLKCMU_HSI2_BUS, 416 + CLK_CON_GAT_GATE_CLKCMU_HSI2_PCIE, 417 + CLK_CON_GAT_GATE_CLKCMU_IPP_BUS, 418 + CLK_CON_GAT_GATE_CLKCMU_ITP_BUS, 419 + CLK_CON_GAT_GATE_CLKCMU_MCSC_BUS, 420 + CLK_CON_GAT_GATE_CLKCMU_MCSC_GDC, 421 + CLK_CON_GAT_GATE_CLKCMU_MFC0_MFC0, 422 + CLK_CON_GAT_GATE_CLKCMU_MFC0_WFD, 423 + CLK_CON_GAT_GATE_CLKCMU_MIF_BUSP, 424 + CLK_CON_GAT_GATE_CLKCMU_NPU_BUS, 425 + CLK_CON_GAT_GATE_CLKCMU_PERIC0_BUS, 426 + CLK_CON_GAT_GATE_CLKCMU_PERIC0_IP, 427 + CLK_CON_GAT_GATE_CLKCMU_PERIC1_BUS, 428 + CLK_CON_GAT_GATE_CLKCMU_PERIC1_IP, 429 + CLK_CON_GAT_GATE_CLKCMU_PERIS_BUS, 430 + CLK_CON_GAT_GATE_CLKCMU_SSP_BUS, 431 + CLK_CON_GAT_GATE_CLKCMU_TNR_BUS, 432 + CLK_CON_GAT_GATE_CLKCMU_VRA_BUS, 433 + }; 434 + 435 + static const struct samsung_pll_clock top_pll_clks[] __initconst = { 436 + PLL(pll_0717x, CLK_FOUT_SHARED0_PLL, "fout_shared0_pll", "oscclk", 437 + PLL_LOCKTIME_PLL_SHARED0, PLL_CON3_PLL_SHARED0, NULL), 438 + PLL(pll_0717x, CLK_FOUT_SHARED1_PLL, "fout_shared1_pll", "oscclk", 439 + PLL_LOCKTIME_PLL_SHARED1, PLL_CON3_PLL_SHARED1, NULL), 440 + PLL(pll_0718x, CLK_FOUT_SHARED2_PLL, "fout_shared2_pll", "oscclk", 441 + PLL_LOCKTIME_PLL_SHARED2, PLL_CON3_PLL_SHARED2, NULL), 442 + PLL(pll_0718x, CLK_FOUT_SHARED3_PLL, "fout_shared3_pll", "oscclk", 443 + PLL_LOCKTIME_PLL_SHARED3, PLL_CON3_PLL_SHARED3, NULL), 444 + PLL(pll_0717x, CLK_FOUT_SHARED4_PLL, "fout_shared4_pll", "oscclk", 445 + PLL_LOCKTIME_PLL_SHARED4, PLL_CON3_PLL_SHARED4, NULL), 446 + PLL(pll_0732x, CLK_FOUT_MMC_PLL, "fout_mmc_pll", "oscclk", 447 + PLL_LOCKTIME_PLL_MMC, PLL_CON3_PLL_MMC, NULL), 448 + PLL(pll_0718x, CLK_FOUT_G3D_PLL, "fout_g3d_pll", "oscclk", 449 + PLL_LOCKTIME_PLL_G3D, PLL_CON3_PLL_G3D, NULL), 450 + }; 451 + 452 + /* Parent clock list for CMU_TOP muxes*/ 453 + PNAME(mout_pll_shared0_p) = { "oscclk", "fout_shared0_pll" }; 454 + PNAME(mout_pll_shared1_p) = { "oscclk", "fout_shared1_pll" }; 455 + PNAME(mout_pll_shared2_p) = { "oscclk", "fout_shared2_pll" }; 456 + PNAME(mout_pll_shared3_p) = { "oscclk", "fout_shared3_pll" }; 457 + PNAME(mout_pll_shared4_p) = { "oscclk", "fout_shared4_pll" }; 458 + PNAME(mout_pll_mmc_p) = { "oscclk", "fout_mmc_pll" }; 459 + PNAME(mout_pll_g3d_p) = { "oscclk", "fout_g3d_pll" }; 460 + PNAME(mout_cmu_apm_bus_p) = { "dout_cmu_shared0_div2", 461 + "dout_cmu_shared2_div2" }; 462 + PNAME(mout_cmu_aud_cpu_p) = { "dout_cmu_shared0_div2", 463 + "fout_shared2_pll", 464 + "dout_cmu_shared4_div2", 465 + "dout_cmu_shared0_div4" }; 466 + PNAME(mout_cmu_bus0_bus_p) = { "dout_cmu_shared0_div4", 467 + "dout_cmu_shared1_div4", 468 + "dout_cmu_shared2_div2", 469 + "oscclk" }; 470 + PNAME(mout_cmu_bus1_bus_p) = { "dout_cmu_shared0_div4", 471 + "dout_cmu_shared1_div4", 472 + "dout_cmu_shared2_div2", 473 + "oscclk" }; 474 + PNAME(mout_cmu_bus1_sss_p) = { "dout_cmu_shared0_div4", 475 + "dout_cmu_shared1_div4", 476 + "dout_cmu_shared2_div2", 477 + "oscclk" }; 478 + PNAME(mout_cmu_cis_clk0_p) = { "oscclk", 479 + "dout_cmu_shared2_div2" }; 480 + PNAME(mout_cmu_cis_clk1_p) = { "oscclk", 481 + "dout_cmu_shared2_div2" }; 482 + PNAME(mout_cmu_cis_clk2_p) = { "oscclk", 483 + "dout_cmu_shared2_div2" }; 484 + PNAME(mout_cmu_cis_clk3_p) = { "oscclk", 485 + "dout_cmu_shared2_div2" }; 486 + PNAME(mout_cmu_cis_clk4_p) = { "oscclk", 487 + "dout_cmu_shared2_div2" }; 488 + PNAME(mout_cmu_cis_clk5_p) = { "oscclk", 489 + "dout_cmu_shared2_div2" }; 490 + PNAME(mout_cmu_cmu_boost_p) = { "dout_cmu_shared0_div4", 491 + "dout_cmu_shared1_div4", 492 + "dout_cmu_shared2_div2", 493 + "oscclk" }; 494 + PNAME(mout_cmu_core_bus_p) = { "dout_cmu_shared0_div2", 495 + "dout_cmu_shared1_div2", 496 + "fout_shared2_pll", 497 + "dout_cmu_shared0_div3", 498 + "dout_cmu_shared1_div3", 499 + "dout_cmu_shared0_div4", 500 + "fout_shared3_pll", "oscclk" }; 501 + PNAME(mout_cmu_cpucl0_dbg_bus_p) = { "fout_shared2_pll", 502 + "dout_cmu_shared0_div3", 503 + "dout_cmu_shared0_div4", 504 + "oscclk" }; 505 + PNAME(mout_cmu_cpucl0_switch_p) = { "fout_shared4_pll", 506 + "dout_cmu_shared0_div2", 507 + "fout_shared2_pll", 508 + "dout_cmu_shared0_div4" }; 509 + PNAME(mout_cmu_cpucl1_switch_p) = { "fout_shared4_pll", 510 + "dout_cmu_shared0_div2", 511 + "fout_shared2_pll", 512 + "dout_cmu_shared0_div4" }; 513 + PNAME(mout_cmu_cpucl2_busp_p) = { "dout_cmu_shared0_div4", 514 + "dout_cmu_shared2_div2" }; 515 + PNAME(mout_cmu_cpucl2_switch_p) = { "fout_shared4_pll", 516 + "dout_cmu_shared0_div2", 517 + "fout_shared2_pll", 518 + "dout_cmu_shared0_div4" }; 519 + PNAME(mout_cmu_csis_bus_p) = { "dout_cmu_shared0_div3", 520 + "dout_cmu_shared4_div2", 521 + "dout_cmu_shared0_div4", 522 + "dout_cmu_shared4_div3" }; 523 + PNAME(mout_cmu_csis_ois_mcu_p) = { "dout_cmu_shared0_div4", 524 + "dout_cmu_shared2_div2" }; 525 + PNAME(mout_cmu_dnc_bus_p) = { "dout_cmu_shared1_div2", 526 + "fout_shared2_pll", 527 + "dout_cmu_shared4_div2", 528 + "dout_cmu_shared0_div4" }; 529 + PNAME(mout_cmu_dnc_busm_p) = { "dout_cmu_shared0_div4", 530 + "dout_cmu_shared1_div4", 531 + "dout_cmu_shared2_div2", 532 + "dout_cmu_shared4_div4" }; 533 + PNAME(mout_cmu_dns_bus_p) = { "dout_cmu_shared0_div3", 534 + "dout_cmu_shared4_div2", 535 + "dout_cmu_shared0_div4", 536 + "dout_cmu_shared1_div4", 537 + "dout_cmu_shared4_div3", 538 + "dout_cmu_shared2_div2", 539 + "oscclk", "oscclk" }; 540 + PNAME(mout_cmu_dpu_p) = { "dout_cmu_shared0_div3", 541 + "dout_cmu_shared0_div4" }; 542 + PNAME(mout_cmu_dpu_alt_p) = { "dout_cmu_shared4_div2", 543 + "dout_cmu_shared4_div3", 544 + "dout_cmu_shared2_div2", 545 + "oscclk" }; 546 + PNAME(mout_cmu_dsp_bus_p) = { "dout_cmu_shared0_div2", 547 + "dout_cmu_shared1_div2", 548 + "fout_shared2_pll", 549 + "dout_cmu_shared4_div2", 550 + "fout_shared3_pll", "oscclk", 551 + "oscclk", "oscclk" }; 552 + PNAME(mout_cmu_g2d_g2d_p) = { "dout_cmu_shared0_div3", 553 + "dout_cmu_shared4_div2", 554 + "dout_cmu_shared0_div4", 555 + "dout_cmu_shared2_div2" }; 556 + PNAME(mout_cmu_g2d_mscl_p) = { "dout_cmu_shared0_div4", 557 + "dout_cmu_shared2_div2", 558 + "dout_cmu_shared4_div4", 559 + "oscclk" }; 560 + PNAME(mout_cmu_hpm_p) = { "oscclk", 561 + "dout_cmu_shared0_div4", 562 + "dout_cmu_shared2_div2", 563 + "oscclk" }; 564 + PNAME(mout_cmu_hsi0_bus_p) = { "dout_cmu_shared0_div4", 565 + "dout_cmu_shared2_div2" }; 566 + PNAME(mout_cmu_hsi0_dpgtc_p) = { "oscclk", "dout_cmu_shared0_div4", 567 + "dout_cmu_shared2_div2", 568 + "oscclk" }; 569 + PNAME(mout_cmu_hsi0_usb31drd_p) = { "oscclk", "dout_cmu_shared0_div4", 570 + "dout_cmu_shared2_div2", 571 + "oscclk" }; 572 + PNAME(mout_cmu_hsi0_usbdp_debug_p) = { "oscclk", "fout_shared2_pll" }; 573 + PNAME(mout_cmu_hsi1_bus_p) = { "dout_cmu_shared0_div3", 574 + "dout_cmu_shared0_div4", 575 + "dout_cmu_shared1_div4", 576 + "dout_cmu_shared4_div3", 577 + "dout_cmu_shared2_div2", 578 + "fout_mmc_pll", "oscclk", "oscclk" }; 579 + PNAME(mout_cmu_hsi1_mmc_card_p) = { "oscclk", "fout_shared2_pll", 580 + "fout_mmc_pll", 581 + "dout_cmu_shared0_div4" }; 582 + PNAME(mout_cmu_hsi1_pcie_p) = { "oscclk", "fout_shared2_pll" }; 583 + PNAME(mout_cmu_hsi1_ufs_card_p) = { "oscclk", "dout_cmu_shared0_div4", 584 + "dout_cmu_shared2_div2", 585 + "oscclk" }; 586 + PNAME(mout_cmu_hsi1_ufs_embd_p) = { "oscclk", "dout_cmu_shared0_div4", 587 + "dout_cmu_shared2_div2", 588 + "oscclk" }; 589 + PNAME(mout_cmu_hsi2_bus_p) = { "dout_cmu_shared0_div3", 590 + "dout_cmu_shared2_div2" }; 591 + PNAME(mout_cmu_hsi2_pcie_p) = { "oscclk", "fout_shared2_pll" }; 592 + PNAME(mout_cmu_ipp_bus_p) = { "dout_cmu_shared0_div3", 593 + "dout_cmu_shared4_div2", 594 + "dout_cmu_shared0_div4", 595 + "dout_cmu_shared1_div4", 596 + "dout_cmu_shared4_div3", 597 + "oscclk", "oscclk", "oscclk" }; 598 + PNAME(mout_cmu_itp_bus_p) = { "dout_cmu_shared0_div3", 599 + "dout_cmu_shared4_div2", 600 + "dout_cmu_shared0_div4", 601 + "dout_cmu_shared1_div4", 602 + "dout_cmu_shared4_div3", 603 + "dout_cmu_shared2_div2", 604 + "oscclk", "oscclk" }; 605 + PNAME(mout_cmu_mcsc_bus_p) = { "dout_cmu_shared0_div3", 606 + "dout_cmu_shared4_div2", 607 + "dout_cmu_shared0_div4", 608 + "dout_cmu_shared1_div4", 609 + "dout_cmu_shared4_div3", 610 + "dout_cmu_shared2_div2", 611 + "oscclk", "oscclk" }; 612 + PNAME(mout_cmu_mcsc_gdc_p) = { "dout_cmu_shared0_div3", 613 + "dout_cmu_shared4_div2", 614 + "dout_cmu_shared0_div4", 615 + "dout_cmu_shared1_div4", 616 + "dout_cmu_shared4_div3", 617 + "dout_cmu_shared2_div2", 618 + "oscclk", "oscclk" }; 619 + PNAME(mout_cmu_cmu_boost_cpu_p) = { "dout_cmu_shared0_div4", 620 + "dout_cmu_shared1_div4", 621 + "dout_cmu_shared2_div2", 622 + "oscclk" }; 623 + PNAME(mout_cmu_mfc0_mfc0_p) = { "dout_cmu_shared4_div2", 624 + "dout_cmu_shared0_div4", 625 + "dout_cmu_shared4_div3", 626 + "dout_cmu_shared2_div2" }; 627 + PNAME(mout_cmu_mfc0_wfd_p) = { "dout_cmu_shared4_div2", 628 + "dout_cmu_shared0_div4", 629 + "dout_cmu_shared4_div3", 630 + "dout_cmu_shared2_div2" }; 631 + PNAME(mout_cmu_mif_busp_p) = { "dout_cmu_shared0_div4", 632 + "dout_cmu_shared1_div4", 633 + "dout_cmu_shared2_div2", 634 + "oscclk" }; 635 + PNAME(mout_cmu_mif_switch_p) = { "fout_shared0_pll", 636 + "fout_shared1_pll", 637 + "dout_cmu_shared0_div2", 638 + "dout_cmu_shared1_div2", 639 + "fout_shared2_pll", 640 + "dout_cmu_shared0_div4", 641 + "dout_cmu_shared2_div2", 642 + "oscclk" }; 643 + PNAME(mout_cmu_npu_bus_p) = { "dout_cmu_shared0_div2", 644 + "dout_cmu_shared1_div2", 645 + "fout_shared2_pll", 646 + "dout_cmu_shared4_div2", 647 + "fout_shared3_pll", "oscclk", 648 + "oscclk", "oscclk" }; 649 + PNAME(mout_cmu_peric0_bus_p) = { "dout_cmu_shared0_div4", 650 + "dout_cmu_shared2_div2" }; 651 + PNAME(mout_cmu_peric0_ip_p) = { "dout_cmu_shared0_div4", 652 + "dout_cmu_shared2_div2" }; 653 + PNAME(mout_cmu_peric1_bus_p) = { "dout_cmu_shared0_div4", 654 + "dout_cmu_shared2_div2" }; 655 + PNAME(mout_cmu_peric1_ip_p) = { "dout_cmu_shared0_div4", 656 + "dout_cmu_shared2_div2" }; 657 + PNAME(mout_cmu_peris_bus_p) = { "dout_cmu_shared0_div4", 658 + "dout_cmu_shared2_div2" }; 659 + PNAME(mout_cmu_ssp_bus_p) = { "dout_cmu_shared4_div2", 660 + "dout_cmu_shared0_div4", 661 + "dout_cmu_shared4_div3", 662 + "dout_cmu_shared2_div2" }; 663 + PNAME(mout_cmu_tnr_bus_p) = { "dout_cmu_shared0_div3", 664 + "dout_cmu_shared4_div2", 665 + "dout_cmu_shared0_div4", 666 + "dout_cmu_shared1_div4", 667 + "dout_cmu_shared4_div3", 668 + "dout_cmu_shared2_div2", 669 + "oscclk", "oscclk" }; 670 + PNAME(mout_cmu_vra_bus_p) = { "dout_cmu_shared0_div3", 671 + "dout_cmu_shared4_div2", 672 + "dout_cmu_shared0_div4", 673 + "dout_cmu_shared4_div3" }; 674 + 675 + /* 676 + * Register name to clock name mangling strategy used in this file 677 + * 678 + * Replace PLL_CON{0,3}_PLL with CLK_MOUT_PLL and mout_pll 679 + * Replace CLK_CON_MUX_MUX_CLKCMU with CLK_MOUT_CMU and mout_cmu 680 + * Replace CLK_CON_DIV_CLKCMU with CLK_DOUT_CMU_CMU and dout_cmu_cmu 681 + * Replace CLK_CON_DIV_DIV_CLKCMU with CLK_DOUT_CMU_CMU and dout_cmu_cmu 682 + * Replace CLK_CON_DIV_PLL_CLKCMU with CLK_DOUT_CMU_CMU and dout_cmu_cmu 683 + * Replace CLK_CON_GAT_CLKCMU with CLK_GOUT_CMU and gout_cmu 684 + * Replace CLK_CON_GAT_GATE_CLKCMU with CLK_GOUT_CMU and gout_cmu 685 + * 686 + * For gates remove _UID _BLK _IPCLKPORT, _I and _RSTNSYNC 687 + */ 688 + 689 + static const struct samsung_mux_clock top_mux_clks[] __initconst = { 690 + MUX(CLK_MOUT_PLL_SHARED0, "mout_pll_shared0", mout_pll_shared0_p, 691 + PLL_CON3_PLL_SHARED0, 4, 1), 692 + MUX(CLK_MOUT_PLL_SHARED1, "mout_pll_shared1", mout_pll_shared1_p, 693 + PLL_CON3_PLL_SHARED1, 4, 1), 694 + MUX(CLK_MOUT_PLL_SHARED2, "mout_pll_shared2", mout_pll_shared2_p, 695 + PLL_CON3_PLL_SHARED2, 4, 1), 696 + MUX(CLK_MOUT_PLL_SHARED3, "mout_pll_shared3", mout_pll_shared3_p, 697 + PLL_CON3_PLL_SHARED3, 4, 1), 698 + MUX(CLK_MOUT_PLL_SHARED4, "mout_pll_shared4", mout_pll_shared4_p, 699 + PLL_CON0_PLL_SHARED4, 4, 1), 700 + MUX(CLK_MOUT_PLL_MMC, "mout_pll_mmc", mout_pll_mmc_p, 701 + PLL_CON0_PLL_MMC, 4, 1), 702 + MUX(CLK_MOUT_PLL_G3D, "mout_pll_g3d", mout_pll_g3d_p, 703 + PLL_CON0_PLL_G3D, 4, 1), 704 + MUX(CLK_MOUT_CMU_APM_BUS, "mout_cmu_apm_bus", 705 + mout_cmu_apm_bus_p, CLK_CON_MUX_MUX_CLKCMU_APM_BUS, 0, 1), 706 + MUX(CLK_MOUT_CMU_AUD_CPU, "mout_cmu_aud_cpu", 707 + mout_cmu_aud_cpu_p, CLK_CON_MUX_MUX_CLKCMU_AUD_CPU, 0, 2), 708 + MUX(CLK_MOUT_CMU_BUS0_BUS, "mout_cmu_bus0_bus", 709 + mout_cmu_bus0_bus_p, CLK_CON_MUX_MUX_CLKCMU_BUS0_BUS, 0, 2), 710 + MUX(CLK_MOUT_CMU_BUS1_BUS, "mout_cmu_bus1_bus", 711 + mout_cmu_bus1_bus_p, CLK_CON_MUX_MUX_CLKCMU_BUS1_BUS, 0, 2), 712 + MUX(CLK_MOUT_CMU_BUS1_SSS, "mout_cmu_bus1_sss", 713 + mout_cmu_bus1_sss_p, CLK_CON_MUX_MUX_CLKCMU_BUS1_SSS, 0, 2), 714 + MUX(CLK_MOUT_CMU_CIS_CLK0, "mout_cmu_cis_clk0", 715 + mout_cmu_cis_clk0_p, CLK_CON_MUX_MUX_CLKCMU_CIS_CLK0, 0, 1), 716 + MUX(CLK_MOUT_CMU_CIS_CLK1, "mout_cmu_cis_clk1", 717 + mout_cmu_cis_clk1_p, CLK_CON_MUX_MUX_CLKCMU_CIS_CLK1, 0, 1), 718 + MUX(CLK_MOUT_CMU_CIS_CLK2, "mout_cmu_cis_clk2", 719 + mout_cmu_cis_clk2_p, CLK_CON_MUX_MUX_CLKCMU_CIS_CLK2, 0, 1), 720 + MUX(CLK_MOUT_CMU_CIS_CLK3, "mout_cmu_cis_clk3", 721 + mout_cmu_cis_clk3_p, CLK_CON_MUX_MUX_CLKCMU_CIS_CLK3, 0, 1), 722 + MUX(CLK_MOUT_CMU_CIS_CLK4, "mout_cmu_cis_clk4", 723 + mout_cmu_cis_clk4_p, CLK_CON_MUX_MUX_CLKCMU_CIS_CLK4, 0, 1), 724 + MUX(CLK_MOUT_CMU_CIS_CLK5, "mout_cmu_cis_clk5", 725 + mout_cmu_cis_clk5_p, CLK_CON_MUX_MUX_CLKCMU_CIS_CLK5, 0, 1), 726 + MUX(CLK_MOUT_CMU_CMU_BOOST, "mout_cmu_cmu_boost", 727 + mout_cmu_cmu_boost_p, CLK_CON_MUX_MUX_CLKCMU_CMU_BOOST, 0, 2), 728 + MUX(CLK_MOUT_CMU_CORE_BUS, "mout_cmu_core_bus", 729 + mout_cmu_core_bus_p, CLK_CON_MUX_MUX_CLKCMU_CORE_BUS, 0, 3), 730 + MUX(CLK_MOUT_CMU_CPUCL0_DBG_BUS, "mout_cmu_cpucl0_dbg_bus", 731 + mout_cmu_cpucl0_dbg_bus_p, CLK_CON_MUX_MUX_CLKCMU_CPUCL0_DBG_BUS, 732 + 0, 2), 733 + MUX(CLK_MOUT_CMU_CPUCL0_SWITCH, "mout_cmu_cpucl0_switch", 734 + mout_cmu_cpucl0_switch_p, CLK_CON_MUX_MUX_CLKCMU_CPUCL0_SWITCH, 735 + 0, 2), 736 + MUX(CLK_MOUT_CMU_CPUCL1_SWITCH, "mout_cmu_cpucl1_switch", 737 + mout_cmu_cpucl1_switch_p, CLK_CON_MUX_MUX_CLKCMU_CPUCL1_SWITCH, 738 + 0, 2), 739 + MUX(CLK_MOUT_CMU_CPUCL2_BUSP, "mout_cmu_cpucl2_busp", 740 + mout_cmu_cpucl2_busp_p, CLK_CON_MUX_MUX_CLKCMU_CPUCL2_BUSP, 741 + 0, 1), 742 + MUX(CLK_MOUT_CMU_CPUCL2_SWITCH, "mout_cmu_cpucl2_switch", 743 + mout_cmu_cpucl2_switch_p, CLK_CON_MUX_MUX_CLKCMU_CPUCL2_SWITCH, 744 + 0, 2), 745 + MUX(CLK_MOUT_CMU_CSIS_BUS, "mout_cmu_csis_bus", 746 + mout_cmu_csis_bus_p, CLK_CON_MUX_MUX_CLKCMU_CSIS_BUS, 0, 2), 747 + MUX(CLK_MOUT_CMU_CSIS_OIS_MCU, "mout_cmu_csis_ois_mcu", 748 + mout_cmu_csis_ois_mcu_p, CLK_CON_MUX_MUX_CLKCMU_CSIS_OIS_MCU, 749 + 0, 1), 750 + MUX(CLK_MOUT_CMU_DNC_BUS, "mout_cmu_dnc_bus", 751 + mout_cmu_dnc_bus_p, CLK_CON_MUX_MUX_CLKCMU_DNC_BUS, 0, 2), 752 + MUX(CLK_MOUT_CMU_DNC_BUSM, "mout_cmu_dnc_busm", 753 + mout_cmu_dnc_busm_p, CLK_CON_MUX_MUX_CLKCMU_DNC_BUSM, 0, 2), 754 + MUX(CLK_MOUT_CMU_DNS_BUS, "mout_cmu_dns_bus", 755 + mout_cmu_dns_bus_p, CLK_CON_MUX_MUX_CLKCMU_DNS_BUS, 0, 3), 756 + MUX(CLK_MOUT_CMU_DPU, "mout_cmu_dpu", 757 + mout_cmu_dpu_p, CLK_CON_MUX_MUX_CLKCMU_DPU, 0, 1), 758 + MUX(CLK_MOUT_CMU_DPU_ALT, "mout_cmu_dpu_alt", 759 + mout_cmu_dpu_alt_p, CLK_CON_MUX_MUX_CLKCMU_DPU_ALT, 0, 2), 760 + MUX(CLK_MOUT_CMU_DSP_BUS, "mout_cmu_dsp_bus", 761 + mout_cmu_dsp_bus_p, CLK_CON_MUX_MUX_CLKCMU_DSP_BUS, 0, 2), 762 + MUX(CLK_MOUT_CMU_G2D_G2D, "mout_cmu_g2d_g2d", 763 + mout_cmu_g2d_g2d_p, CLK_CON_MUX_MUX_CLKCMU_G2D_G2D, 0, 2), 764 + MUX(CLK_MOUT_CMU_G2D_MSCL, "mout_cmu_g2d_mscl", 765 + mout_cmu_g2d_mscl_p, CLK_CON_MUX_MUX_CLKCMU_G2D_MSCL, 0, 1), 766 + MUX(CLK_MOUT_CMU_HPM, "mout_cmu_hpm", 767 + mout_cmu_hpm_p, CLK_CON_MUX_MUX_CLKCMU_HPM, 0, 2), 768 + MUX(CLK_MOUT_CMU_HSI0_BUS, "mout_cmu_hsi0_bus", 769 + mout_cmu_hsi0_bus_p, CLK_CON_MUX_MUX_CLKCMU_HSI0_BUS, 0, 1), 770 + MUX(CLK_MOUT_CMU_HSI0_DPGTC, "mout_cmu_hsi0_dpgtc", 771 + mout_cmu_hsi0_dpgtc_p, CLK_CON_MUX_MUX_CLKCMU_HSI0_DPGTC, 0, 2), 772 + MUX(CLK_MOUT_CMU_HSI0_USB31DRD, "mout_cmu_hsi0_usb31drd", 773 + mout_cmu_hsi0_usb31drd_p, CLK_CON_MUX_MUX_CLKCMU_HSI0_USB31DRD, 774 + 0, 2), 775 + MUX(CLK_MOUT_CMU_HSI0_USBDP_DEBUG, "mout_cmu_hsi0_usbdp_debug", 776 + mout_cmu_hsi0_usbdp_debug_p, 777 + CLK_CON_MUX_MUX_CLKCMU_HSI0_USBDP_DEBUG, 0, 2), 778 + MUX(CLK_MOUT_CMU_HSI1_BUS, "mout_cmu_hsi1_bus", 779 + mout_cmu_hsi1_bus_p, CLK_CON_MUX_MUX_CLKCMU_HSI1_BUS, 0, 3), 780 + MUX(CLK_MOUT_CMU_HSI1_MMC_CARD, "mout_cmu_hsi1_mmc_card", 781 + mout_cmu_hsi1_mmc_card_p, CLK_CON_MUX_MUX_CLKCMU_HSI1_MMC_CARD, 782 + 0, 2), 783 + MUX(CLK_MOUT_CMU_HSI1_PCIE, "mout_cmu_hsi1_pcie", 784 + mout_cmu_hsi1_pcie_p, CLK_CON_MUX_MUX_CLKCMU_HSI1_PCIE, 0, 1), 785 + MUX(CLK_MOUT_CMU_HSI1_UFS_CARD, "mout_cmu_hsi1_ufs_card", 786 + mout_cmu_hsi1_ufs_card_p, CLK_CON_MUX_MUX_CLKCMU_HSI1_UFS_CARD, 787 + 0, 2), 788 + MUX(CLK_MOUT_CMU_HSI1_UFS_EMBD, "mout_cmu_hsi1_ufs_embd", 789 + mout_cmu_hsi1_ufs_embd_p, CLK_CON_MUX_MUX_CLKCMU_HSI1_UFS_EMBD, 790 + 0, 1), 791 + MUX(CLK_MOUT_CMU_HSI2_BUS, "mout_cmu_hsi2_bus", 792 + mout_cmu_hsi2_bus_p, CLK_CON_MUX_MUX_CLKCMU_HSI2_BUS, 0, 1), 793 + MUX(CLK_MOUT_CMU_HSI2_PCIE, "mout_cmu_hsi2_pcie", 794 + mout_cmu_hsi2_pcie_p, CLK_CON_MUX_MUX_CLKCMU_HSI2_PCIE, 0, 1), 795 + MUX(CLK_MOUT_CMU_IPP_BUS, "mout_cmu_ipp_bus", 796 + mout_cmu_ipp_bus_p, CLK_CON_MUX_MUX_CLKCMU_IPP_BUS, 0, 3), 797 + MUX(CLK_MOUT_CMU_ITP_BUS, "mout_cmu_itp_bus", 798 + mout_cmu_itp_bus_p, CLK_CON_MUX_MUX_CLKCMU_ITP_BUS, 0, 3), 799 + MUX(CLK_MOUT_CMU_MCSC_BUS, "mout_cmu_mcsc_bus", 800 + mout_cmu_mcsc_bus_p, CLK_CON_MUX_MUX_CLKCMU_MCSC_BUS, 0, 3), 801 + MUX(CLK_MOUT_CMU_MCSC_GDC, "mout_cmu_mcsc_gdc", 802 + mout_cmu_mcsc_gdc_p, CLK_CON_MUX_MUX_CLKCMU_MCSC_GDC, 0, 3), 803 + MUX(CLK_MOUT_CMU_CMU_BOOST_CPU, "mout_cmu_cmu_boost_cpu", 804 + mout_cmu_cmu_boost_cpu_p, CLK_CON_MUX_MUX_CLKCMU_CMU_BOOST_CPU, 805 + 0, 2), 806 + MUX(CLK_MOUT_CMU_MFC0_MFC0, "mout_cmu_mfc0_mfc0", 807 + mout_cmu_mfc0_mfc0_p, CLK_CON_MUX_MUX_CLKCMU_MFC0_MFC0, 0, 2), 808 + MUX(CLK_MOUT_CMU_MFC0_WFD, "mout_cmu_mfc0_wfd", 809 + mout_cmu_mfc0_wfd_p, CLK_CON_MUX_MUX_CLKCMU_MFC0_WFD, 0, 2), 810 + MUX(CLK_MOUT_CMU_MIF_BUSP, "mout_cmu_mif_busp", 811 + mout_cmu_mif_busp_p, CLK_CON_MUX_MUX_CLKCMU_MIF_BUSP, 0, 2), 812 + MUX(CLK_MOUT_CMU_MIF_SWITCH, "mout_cmu_mif_switch", 813 + mout_cmu_mif_switch_p, CLK_CON_MUX_MUX_CLKCMU_MIF_SWITCH, 0, 3), 814 + MUX(CLK_MOUT_CMU_NPU_BUS, "mout_cmu_npu_bus", 815 + mout_cmu_npu_bus_p, CLK_CON_MUX_MUX_CLKCMU_NPU_BUS, 0, 3), 816 + MUX(CLK_MOUT_CMU_PERIC0_BUS, "mout_cmu_peric0_bus", 817 + mout_cmu_peric0_bus_p, CLK_CON_MUX_MUX_CLKCMU_PERIC0_BUS, 0, 1), 818 + MUX(CLK_MOUT_CMU_PERIC0_IP, "mout_cmu_peric0_ip", 819 + mout_cmu_peric0_ip_p, CLK_CON_MUX_MUX_CLKCMU_PERIC0_IP, 0, 1), 820 + MUX(CLK_MOUT_CMU_PERIC1_BUS, "mout_cmu_peric1_bus", 821 + mout_cmu_peric1_bus_p, CLK_CON_MUX_MUX_CLKCMU_PERIC1_BUS, 0, 1), 822 + MUX(CLK_MOUT_CMU_PERIC1_IP, "mout_cmu_peric1_ip", 823 + mout_cmu_peric1_ip_p, CLK_CON_MUX_MUX_CLKCMU_PERIC1_IP, 0, 1), 824 + MUX(CLK_MOUT_CMU_PERIS_BUS, "mout_cmu_peris_bus", 825 + mout_cmu_peris_bus_p, CLK_CON_MUX_MUX_CLKCMU_PERIS_BUS, 0, 1), 826 + MUX(CLK_MOUT_CMU_SSP_BUS, "mout_cmu_ssp_bus", 827 + mout_cmu_ssp_bus_p, CLK_CON_MUX_MUX_CLKCMU_SSP_BUS, 0, 2), 828 + MUX(CLK_MOUT_CMU_TNR_BUS, "mout_cmu_tnr_bus", 829 + mout_cmu_tnr_bus_p, CLK_CON_MUX_MUX_CLKCMU_TNR_BUS, 0, 3), 830 + MUX(CLK_MOUT_CMU_VRA_BUS, "mout_cmu_vra_bus", 831 + mout_cmu_vra_bus_p, CLK_CON_MUX_MUX_CLKCMU_VRA_BUS, 0, 2), 832 + }; 833 + 834 + static const struct samsung_div_clock top_div_clks[] __initconst = { 835 + /* SHARED0 region*/ 836 + DIV(CLK_DOUT_CMU_SHARED0_DIV2, "dout_cmu_shared0_div2", "mout_pll_shared0", 837 + CLK_CON_DIV_PLL_SHARED0_DIV2, 0, 1), 838 + DIV(CLK_DOUT_CMU_SHARED0_DIV3, "dout_cmu_shared0_div3", "mout_pll_shared0", 839 + CLK_CON_DIV_PLL_SHARED0_DIV3, 0, 2), 840 + DIV(CLK_DOUT_CMU_SHARED0_DIV4, "dout_cmu_shared0_div4", "dout_cmu_shared0_div2", 841 + CLK_CON_DIV_PLL_SHARED0_DIV4, 0, 1), 842 + 843 + /* SHARED1 region*/ 844 + DIV(CLK_DOUT_CMU_SHARED1_DIV2, "dout_cmu_shared1_div2", "mout_pll_shared1", 845 + CLK_CON_DIV_PLL_SHARED1_DIV2, 0, 1), 846 + DIV(CLK_DOUT_CMU_SHARED1_DIV3, "dout_cmu_shared1_div3", "mout_pll_shared1", 847 + CLK_CON_DIV_PLL_SHARED1_DIV3, 0, 2), 848 + DIV(CLK_DOUT_CMU_SHARED1_DIV4, "dout_cmu_shared1_div4", "dout_cmu_shared1_div2", 849 + CLK_CON_DIV_PLL_SHARED1_DIV4, 0, 1), 850 + 851 + /* SHARED2 region */ 852 + DIV(CLK_DOUT_CMU_SHARED2_DIV2, "dout_cmu_shared2_div2", "mout_pll_shared2", 853 + CLK_CON_DIV_PLL_SHARED2_DIV2, 0, 1), 854 + 855 + /* SHARED4 region*/ 856 + DIV(CLK_DOUT_CMU_SHARED4_DIV2, "dout_cmu_shared4_div2", "mout_pll_shared4", 857 + CLK_CON_DIV_PLL_SHARED4_DIV2, 0, 1), 858 + DIV(CLK_DOUT_CMU_SHARED4_DIV3, "dout_cmu_shared4_div3", "mout_pll_shared4", 859 + CLK_CON_DIV_PLL_SHARED4_DIV3, 0, 2), 860 + DIV(CLK_DOUT_CMU_SHARED4_DIV4, "dout_cmu_shared4_div4", "mout_pll_shared4", 861 + CLK_CON_DIV_PLL_SHARED4_DIV4, 0, 1), 862 + 863 + DIV(CLK_DOUT_CMU_APM_BUS, "dout_cmu_apm_bus", "gout_cmu_apm_bus", 864 + CLK_CON_DIV_CLKCMU_APM_BUS, 0, 3), 865 + DIV(CLK_DOUT_CMU_AUD_CPU, "dout_cmu_aud_cpu", "gout_cmu_aud_cpu", 866 + CLK_CON_DIV_CLKCMU_AUD_CPU, 0, 3), 867 + DIV(CLK_DOUT_CMU_BUS0_BUS, "dout_cmu_bus0_bus", "gout_cmu_bus0_bus", 868 + CLK_CON_DIV_CLKCMU_BUS0_BUS, 0, 4), 869 + DIV(CLK_DOUT_CMU_BUS1_BUS, "dout_cmu_bus1_bus", "gout_cmu_bus1_bus", 870 + CLK_CON_DIV_CLKCMU_BUS1_BUS, 0, 4), 871 + DIV(CLK_DOUT_CMU_BUS1_SSS, "dout_cmu_bus1_sss", "gout_cmu_bus1_sss", 872 + CLK_CON_DIV_CLKCMU_BUS1_SSS, 0, 4), 873 + DIV(CLK_DOUT_CMU_CIS_CLK0, "dout_cmu_cis_clk0", "gout_cmu_cis_clk0", 874 + CLK_CON_DIV_CLKCMU_CIS_CLK0, 0, 5), 875 + DIV(CLK_DOUT_CMU_CIS_CLK1, "dout_cmu_cis_clk1", "gout_cmu_cis_clk1", 876 + CLK_CON_DIV_CLKCMU_CIS_CLK1, 0, 5), 877 + DIV(CLK_DOUT_CMU_CIS_CLK2, "dout_cmu_cis_clk2", "gout_cmu_cis_clk2", 878 + CLK_CON_DIV_CLKCMU_CIS_CLK2, 0, 5), 879 + DIV(CLK_DOUT_CMU_CIS_CLK3, "dout_cmu_cis_clk3", "gout_cmu_cis_clk3", 880 + CLK_CON_DIV_CLKCMU_CIS_CLK3, 0, 5), 881 + DIV(CLK_DOUT_CMU_CIS_CLK4, "dout_cmu_cis_clk4", "gout_cmu_cis_clk4", 882 + CLK_CON_DIV_CLKCMU_CIS_CLK4, 0, 5), 883 + DIV(CLK_DOUT_CMU_CIS_CLK5, "dout_cmu_cis_clk5", "gout_cmu_cis_clk5", 884 + CLK_CON_DIV_CLKCMU_CIS_CLK5, 0, 5), 885 + DIV(CLK_DOUT_CMU_CMU_BOOST, "dout_cmu_cmu_boost", "mout_cmu_cmu_boost", 886 + CLK_CON_DIV_CLKCMU_CMU_BOOST, 0, 2), 887 + DIV(CLK_DOUT_CMU_CORE_BUS, "dout_cmu_core_bus", "gout_cmu_core_bus", 888 + CLK_CON_DIV_CLKCMU_CORE_BUS, 0, 4), 889 + DIV(CLK_DOUT_CMU_CPUCL0_DBG_BUS, "dout_cmu_cpucl0_debug", 890 + "gout_cmu_cpucl0_dbg_bus", CLK_CON_DIV_CLKCMU_CPUCL0_DBG_BUS, 891 + 0, 3), 892 + DIV(CLK_DOUT_CMU_CPUCL0_SWITCH, "dout_cmu_cpucl0_switch", 893 + "gout_cmu_cpucl0_switch", CLK_CON_DIV_CLKCMU_CPUCL0_SWITCH, 0, 3), 894 + DIV(CLK_DOUT_CMU_CPUCL1_SWITCH, "dout_cmu_cpucl1_switch", 895 + "gout_cmu_cpucl1_switch", CLK_CON_DIV_CLKCMU_CPUCL1_SWITCH, 0, 3), 896 + DIV(CLK_DOUT_CMU_CPUCL2_BUSP, "dout_cmu_cpucl2_busp", 897 + "gout_cmu_cpucl2_busp", CLK_CON_DIV_CLKCMU_CPUCL2_BUSP, 0, 4), 898 + DIV(CLK_DOUT_CMU_CPUCL2_SWITCH, "dout_cmu_cpucl2_switch", 899 + "gout_cmu_cpucl2_switch", CLK_CON_DIV_CLKCMU_CPUCL2_SWITCH, 0, 3), 900 + DIV(CLK_DOUT_CMU_CSIS_BUS, "dout_cmu_csis_bus", "gout_cmu_csis_bus", 901 + CLK_CON_DIV_CLKCMU_CSIS_BUS, 0, 4), 902 + DIV(CLK_DOUT_CMU_CSIS_OIS_MCU, "dout_cmu_csis_ois_mcu", 903 + "gout_cmu_csis_ois_mcu", CLK_CON_DIV_CLKCMU_CSIS_OIS_MCU, 0, 4), 904 + DIV(CLK_DOUT_CMU_DNC_BUS, "dout_cmu_dnc_bus", "gout_cmu_dnc_bus", 905 + CLK_CON_DIV_CLKCMU_DNC_BUS, 0, 4), 906 + DIV(CLK_DOUT_CMU_DNC_BUSM, "dout_cmu_dnc_busm", "gout_cmu_dnc_busm", 907 + CLK_CON_DIV_CLKCMU_DNC_BUSM, 0, 4), 908 + DIV(CLK_DOUT_CMU_DNS_BUS, "dout_cmu_dns_bus", "gout_cmu_dns_bus", 909 + CLK_CON_DIV_CLKCMU_DNS_BUS, 0, 4), 910 + DIV(CLK_DOUT_CMU_DSP_BUS, "dout_cmu_dsp_bus", "gout_cmu_dsp_bus", 911 + CLK_CON_DIV_CLKCMU_DSP_BUS, 0, 4), 912 + DIV(CLK_DOUT_CMU_G2D_G2D, "dout_cmu_g2d_g2d", "gout_cmu_g2d_g2d", 913 + CLK_CON_DIV_CLKCMU_G2D_G2D, 0, 4), 914 + DIV(CLK_DOUT_CMU_G2D_MSCL, "dout_cmu_g2d_mscl", "gout_cmu_g2d_mscl", 915 + CLK_CON_DIV_CLKCMU_G2D_MSCL, 0, 4), 916 + DIV(CLK_DOUT_CMU_G3D_SWITCH, "dout_cmu_g3d_switch", 917 + "gout_cmu_g3d_switch", CLK_CON_DIV_CLKCMU_G3D_SWITCH, 0, 3), 918 + DIV(CLK_DOUT_CMU_HPM, "dout_cmu_hpm", "gout_cmu_hpm", 919 + CLK_CON_DIV_CLKCMU_HPM, 0, 2), 920 + DIV(CLK_DOUT_CMU_HSI0_BUS, "dout_cmu_hsi0_bus", "gout_cmu_hsi0_bus", 921 + CLK_CON_DIV_CLKCMU_HSI0_BUS, 0, 4), 922 + DIV(CLK_DOUT_CMU_HSI0_DPGTC, "dout_cmu_hsi0_dpgtc", "gout_cmu_hsi0_dpgtc", 923 + CLK_CON_DIV_CLKCMU_HSI0_DPGTC, 0, 3), 924 + DIV(CLK_DOUT_CMU_HSI0_USB31DRD, "dout_cmu_hsi0_usb31drd", 925 + "gout_cmu_hsi0_usb31drd", CLK_CON_DIV_CLKCMU_HSI0_USB31DRD, 0, 4), 926 + DIV(CLK_DOUT_CMU_HSI0_USBDP_DEBUG, "dout_cmu_hsi0_usbdp_debug", 927 + "gout_cmu_hsi0_usbdp_debug", CLK_CON_DIV_CLKCMU_HSI0_USBDP_DEBUG, 928 + 0, 4), 929 + DIV(CLK_DOUT_CMU_HSI1_BUS, "dout_cmu_hsi1_bus", "gout_cmu_hsi1_bus", 930 + CLK_CON_DIV_CLKCMU_HSI1_BUS, 0, 3), 931 + DIV(CLK_DOUT_CMU_HSI1_MMC_CARD, "dout_cmu_hsi1_mmc_card", 932 + "gout_cmu_hsi1_mmc_card", CLK_CON_DIV_CLKCMU_HSI1_MMC_CARD, 933 + 0, 9), 934 + DIV(CLK_DOUT_CMU_HSI1_PCIE, "dout_cmu_hsi1_pcie", "gout_cmu_hsi1_pcie", 935 + CLK_CON_DIV_CLKCMU_HSI1_PCIE, 0, 7), 936 + DIV(CLK_DOUT_CMU_HSI1_UFS_CARD, "dout_cmu_hsi1_ufs_card", 937 + "gout_cmu_hsi1_ufs_card", CLK_CON_DIV_CLKCMU_HSI1_UFS_CARD, 938 + 0, 3), 939 + DIV(CLK_DOUT_CMU_HSI1_UFS_EMBD, "dout_cmu_hsi1_ufs_embd", 940 + "gout_cmu_hsi1_ufs_embd", CLK_CON_DIV_CLKCMU_HSI1_UFS_EMBD, 941 + 0, 3), 942 + DIV(CLK_DOUT_CMU_HSI2_BUS, "dout_cmu_hsi2_bus", "gout_cmu_hsi2_bus", 943 + CLK_CON_DIV_CLKCMU_HSI2_BUS, 0, 4), 944 + DIV(CLK_DOUT_CMU_HSI2_PCIE, "dout_cmu_hsi2_pcie", "gout_cmu_hsi2_pcie", 945 + CLK_CON_DIV_CLKCMU_HSI2_PCIE, 0, 7), 946 + DIV(CLK_DOUT_CMU_IPP_BUS, "dout_cmu_ipp_bus", "gout_cmu_ipp_bus", 947 + CLK_CON_DIV_CLKCMU_IPP_BUS, 0, 4), 948 + DIV(CLK_DOUT_CMU_ITP_BUS, "dout_cmu_itp_bus", "gout_cmu_itp_bus", 949 + CLK_CON_DIV_CLKCMU_ITP_BUS, 0, 4), 950 + DIV(CLK_DOUT_CMU_MCSC_BUS, "dout_cmu_mcsc_bus", "gout_cmu_mcsc_bus", 951 + CLK_CON_DIV_CLKCMU_MCSC_BUS, 0, 4), 952 + DIV(CLK_DOUT_CMU_MCSC_GDC, "dout_cmu_mcsc_gdc", "gout_cmu_mcsc_gdc", 953 + CLK_CON_DIV_CLKCMU_MCSC_GDC, 0, 4), 954 + DIV(CLK_DOUT_CMU_CMU_BOOST_CPU, "dout_cmu_cmu_boost_cpu", 955 + "mout_cmu_cmu_boost_cpu", CLK_CON_DIV_CLKCMU_CMU_BOOST_CPU, 956 + 0, 2), 957 + DIV(CLK_DOUT_CMU_MFC0_MFC0, "dout_cmu_mfc0_mfc0", "gout_cmu_mfc0_mfc0", 958 + CLK_CON_DIV_CLKCMU_MFC0_MFC0, 0, 4), 959 + DIV(CLK_DOUT_CMU_MFC0_WFD, "dout_cmu_mfc0_wfd", "gout_cmu_mfc0_wfd", 960 + CLK_CON_DIV_CLKCMU_MFC0_WFD, 0, 4), 961 + DIV(CLK_DOUT_CMU_MIF_BUSP, "dout_cmu_mif_busp", "gout_cmu_mif_busp", 962 + CLK_CON_DIV_CLKCMU_MIF_BUSP, 0, 4), 963 + DIV(CLK_DOUT_CMU_NPU_BUS, "dout_cmu_npu_bus", "gout_cmu_npu_bus", 964 + CLK_CON_DIV_CLKCMU_NPU_BUS, 0, 4), 965 + DIV(CLK_DOUT_CMU_PERIC0_BUS, "dout_cmu_peric0_bus", "gout_cmu_peric0_bus", 966 + CLK_CON_DIV_CLKCMU_PERIC0_BUS, 0, 4), 967 + DIV(CLK_DOUT_CMU_PERIC0_IP, "dout_cmu_peric0_ip", "gout_cmu_peric0_ip", 968 + CLK_CON_DIV_CLKCMU_PERIC0_IP, 0, 4), 969 + DIV(CLK_DOUT_CMU_PERIC1_BUS, "dout_cmu_peric1_bus", "gout_cmu_peric1_bus", 970 + CLK_CON_DIV_CLKCMU_PERIC1_BUS, 0, 4), 971 + DIV(CLK_DOUT_CMU_PERIC1_IP, "dout_cmu_peric1_ip", "gout_cmu_peric1_ip", 972 + CLK_CON_DIV_CLKCMU_PERIC1_IP, 0, 4), 973 + DIV(CLK_DOUT_CMU_PERIS_BUS, "dout_cmu_peris_bus", "gout_cmu_peris_bus", 974 + CLK_CON_DIV_CLKCMU_PERIS_BUS, 0, 4), 975 + DIV(CLK_DOUT_CMU_SSP_BUS, "dout_cmu_ssp_bus", "gout_cmu_ssp_bus", 976 + CLK_CON_DIV_CLKCMU_SSP_BUS, 0, 4), 977 + DIV(CLK_DOUT_CMU_TNR_BUS, "dout_cmu_tnr_bus", "gout_cmu_tnr_bus", 978 + CLK_CON_DIV_CLKCMU_TNR_BUS, 0, 4), 979 + DIV(CLK_DOUT_CMU_VRA_BUS, "dout_cmu_vra_bus", "gout_cmu_vra_bus", 980 + CLK_CON_DIV_CLKCMU_VRA_BUS, 0, 4), 981 + DIV(CLK_DOUT_CMU_DPU, "dout_cmu_clkcmu_dpu", "gout_cmu_dpu", 982 + CLK_CON_DIV_DIV_CLKCMU_DPU, 0, 4), 983 + }; 984 + 985 + static const struct samsung_gate_clock top_gate_clks[] __initconst = { 986 + GATE(CLK_GOUT_CMU_APM_BUS, "gout_cmu_apm_bus", "mout_cmu_apm_bus", 987 + CLK_CON_GAT_GATE_CLKCMU_APM_BUS, 21, CLK_IGNORE_UNUSED, 0), 988 + GATE(CLK_GOUT_CMU_AUD_CPU, "gout_cmu_aud_cpu", "mout_cmu_aud_cpu", 989 + CLK_CON_GAT_GATE_CLKCMU_AUD_CPU, 21, 0, 0), 990 + GATE(CLK_GOUT_CMU_BUS0_BUS, "gout_cmu_bus0_bus", "mout_cmu_bus0_bus", 991 + CLK_CON_GAT_GATE_CLKCMU_BUS0_BUS, 21, CLK_IGNORE_UNUSED, 0), 992 + GATE(CLK_GOUT_CMU_BUS1_BUS, "gout_cmu_bus1_bus", "mout_cmu_bus1_bus", 993 + CLK_CON_GAT_GATE_CLKCMU_BUS1_BUS, 21, CLK_IGNORE_UNUSED, 0), 994 + GATE(CLK_GOUT_CMU_BUS1_SSS, "gout_cmu_bus1_sss", "mout_cmu_bus1_sss", 995 + CLK_CON_GAT_GATE_CLKCMU_BUS1_SSS, 21, CLK_IGNORE_UNUSED, 0), 996 + GATE(CLK_GOUT_CMU_CIS_CLK0, "gout_cmu_cis_clk0", "mout_cmu_cis_clk0", 997 + CLK_CON_GAT_GATE_CLKCMU_CIS_CLK0, 21, 0, 0), 998 + GATE(CLK_GOUT_CMU_CIS_CLK1, "gout_cmu_cis_clk1", "mout_cmu_cis_clk1", 999 + CLK_CON_GAT_GATE_CLKCMU_CIS_CLK1, 21, 0, 0), 1000 + GATE(CLK_GOUT_CMU_CIS_CLK2, "gout_cmu_cis_clk2", "mout_cmu_cis_clk2", 1001 + CLK_CON_GAT_GATE_CLKCMU_CIS_CLK2, 21, 0, 0), 1002 + GATE(CLK_GOUT_CMU_CIS_CLK3, "gout_cmu_cis_clk3", "mout_cmu_cis_clk3", 1003 + CLK_CON_GAT_GATE_CLKCMU_CIS_CLK3, 21, 0, 0), 1004 + GATE(CLK_GOUT_CMU_CIS_CLK4, "gout_cmu_cis_clk4", "mout_cmu_cis_clk4", 1005 + CLK_CON_GAT_GATE_CLKCMU_CIS_CLK4, 21, 0, 0), 1006 + GATE(CLK_GOUT_CMU_CIS_CLK5, "gout_cmu_cis_clk5", "mout_cmu_cis_clk5", 1007 + CLK_CON_GAT_GATE_CLKCMU_CIS_CLK5, 21, 0, 0), 1008 + GATE(CLK_GOUT_CMU_CORE_BUS, "gout_cmu_core_bus", "mout_cmu_core_bus", 1009 + CLK_CON_GAT_GATE_CLKCMU_CORE_BUS, 21, CLK_IGNORE_UNUSED, 0), 1010 + GATE(CLK_GOUT_CMU_CPUCL0_DBG_BUS, "gout_cmu_cpucl0_dbg_bus", 1011 + "mout_cmu_cpucl0_dbg_bus", CLK_CON_GAT_GATE_CLKCMU_CPUCL0_DBG_BUS, 1012 + 21, 0, 0), 1013 + GATE(CLK_GOUT_CMU_CPUCL0_SWITCH, "gout_cmu_cpucl0_switch", 1014 + "mout_cmu_cpucl0_switch", CLK_CON_GAT_GATE_CLKCMU_CPUCL0_SWITCH, 1015 + 21, CLK_IGNORE_UNUSED, 0), 1016 + GATE(CLK_GOUT_CMU_CPUCL1_SWITCH, "gout_cmu_cpucl1_switch", 1017 + "mout_cmu_cpucl1_switch", CLK_CON_GAT_GATE_CLKCMU_CPUCL1_SWITCH, 1018 + 21, CLK_IGNORE_UNUSED, 0), 1019 + GATE(CLK_GOUT_CMU_CPUCL2_BUSP, "gout_cmu_cpucl2_busp", 1020 + "mout_cmu_cpucl2_busp", CLK_CON_GAT_GATE_CLKCMU_CPUCL2_BUSP, 1021 + 21, CLK_IGNORE_UNUSED, 0), 1022 + GATE(CLK_GOUT_CMU_CPUCL2_SWITCH, "gout_cmu_cpucl2_switch", 1023 + "mout_cmu_cpucl2_switch", CLK_CON_GAT_GATE_CLKCMU_CPUCL2_SWITCH, 1024 + 21, CLK_IGNORE_UNUSED, 0), 1025 + GATE(CLK_GOUT_CMU_CSIS_BUS, "gout_cmu_csis_bus", "mout_cmu_csis_bus", 1026 + CLK_CON_GAT_GATE_CLKCMU_CSIS_BUS, 21, 0, 0), 1027 + GATE(CLK_GOUT_CMU_CSIS_OIS_MCU, "gout_cmu_csis_ois_mcu", 1028 + "mout_cmu_csis_ois_mcu", CLK_CON_GAT_GATE_CLKCMU_CSIS_OIS_MCU, 1029 + 21, 0, 0), 1030 + GATE(CLK_GOUT_CMU_DNC_BUS, "gout_cmu_dnc_bus", "mout_cmu_dnc_bus", 1031 + CLK_CON_GAT_GATE_CLKCMU_DNC_BUS, 21, 0, 0), 1032 + GATE(CLK_GOUT_CMU_DNC_BUSM, "gout_cmu_dnc_busm", "mout_cmu_dnc_busm", 1033 + CLK_CON_GAT_GATE_CLKCMU_DNC_BUSM, 21, 0, 0), 1034 + GATE(CLK_GOUT_CMU_DNS_BUS, "gout_cmu_dns_bus", "mout_cmu_dns_bus", 1035 + CLK_CON_GAT_GATE_CLKCMU_DNS_BUS, 21, 0, 0), 1036 + GATE(CLK_GOUT_CMU_DPU, "gout_cmu_dpu", "mout_cmu_dpu", 1037 + CLK_CON_GAT_GATE_CLKCMU_DPU, 21, 0, 0), 1038 + GATE(CLK_GOUT_CMU_DPU_BUS, "gout_cmu_dpu_bus", "mout_cmu_dpu_alt", 1039 + CLK_CON_GAT_GATE_CLKCMU_DPU_BUS, 21, CLK_IGNORE_UNUSED, 0), 1040 + GATE(CLK_GOUT_CMU_DSP_BUS, "gout_cmu_dsp_bus", "mout_cmu_dsp_bus", 1041 + CLK_CON_GAT_GATE_CLKCMU_DSP_BUS, 21, 0, 0), 1042 + GATE(CLK_GOUT_CMU_G2D_G2D, "gout_cmu_g2d_g2d", "mout_cmu_g2d_g2d", 1043 + CLK_CON_GAT_GATE_CLKCMU_G2D_G2D, 21, 0, 0), 1044 + GATE(CLK_GOUT_CMU_G2D_MSCL, "gout_cmu_g2d_mscl", "mout_cmu_g2d_mscl", 1045 + CLK_CON_GAT_GATE_CLKCMU_G2D_MSCL, 21, 0, 0), 1046 + GATE(CLK_GOUT_CMU_G3D_SWITCH, "gout_cmu_g3d_switch", 1047 + "fout_shared2_pll", CLK_CON_GAT_GATE_CLKCMU_G3D_SWITCH, 1048 + 21, 0, 0), 1049 + GATE(CLK_GOUT_CMU_HPM, "gout_cmu_hpm", "mout_cmu_hpm", 1050 + CLK_CON_GAT_GATE_CLKCMU_HPM, 21, 0, 0), 1051 + GATE(CLK_GOUT_CMU_HSI0_BUS, "gout_cmu_hsi0_bus", 1052 + "mout_cmu_hsi0_bus", CLK_CON_GAT_GATE_CLKCMU_HSI0_BUS, 21, 0, 0), 1053 + GATE(CLK_GOUT_CMU_HSI0_DPGTC, "gout_cmu_hsi0_dpgtc", 1054 + "mout_cmu_hsi0_dpgtc", CLK_CON_GAT_GATE_CLKCMU_HSI0_DPGTC, 1055 + 21, 0, 0), 1056 + GATE(CLK_GOUT_CMU_HSI0_USB31DRD, "gout_cmu_hsi0_usb31drd", 1057 + "mout_cmu_hsi0_usb31drd", CLK_CON_GAT_GATE_CLKCMU_HSI0_USB31DRD, 1058 + 21, 0, 0), 1059 + GATE(CLK_GOUT_CMU_HSI0_USBDP_DEBUG, "gout_cmu_hsi0_usbdp_debug", 1060 + "mout_cmu_hsi0_usbdp_debug", CLK_CON_GAT_GATE_CLKCMU_HSI0_USBDP_DEBUG, 1061 + 21, 0, 0), 1062 + GATE(CLK_GOUT_CMU_HSI1_BUS, "gout_cmu_hsi1_bus", "mout_cmu_hsi1_bus", 1063 + CLK_CON_GAT_GATE_CLKCMU_HSI1_BUS, 21, 0, 0), 1064 + GATE(CLK_GOUT_CMU_HSI1_MMC_CARD, "gout_cmu_hsi1_mmc_card", 1065 + "mout_cmu_hsi1_mmc_card", CLK_CON_GAT_GATE_CLKCMU_HSI1_MMC_CARD, 1066 + 21, 0, 0), 1067 + GATE(CLK_GOUT_CMU_HSI1_PCIE, "gout_cmu_hsi1_pcie", 1068 + "mout_cmu_hsi1_pcie", CLK_CON_GAT_GATE_CLKCMU_HSI1_PCIE, 1069 + 21, 0, 0), 1070 + GATE(CLK_GOUT_CMU_HSI1_UFS_CARD, "gout_cmu_hsi1_ufs_card", 1071 + "mout_cmu_hsi1_ufs_card", CLK_CON_GAT_GATE_CLKCMU_HSI1_UFS_CARD, 1072 + 21, 0, 0), 1073 + GATE(CLK_GOUT_CMU_HSI1_UFS_EMBD, "gout_cmu_hsi1_ufs_embd", 1074 + "mout_cmu_hsi1_ufs_embd", CLK_CON_GAT_GATE_CLKCMU_HSI1_UFS_EMBD, 1075 + 21, 0, 0), 1076 + GATE(CLK_GOUT_CMU_HSI2_BUS, "gout_cmu_hsi2_bus", "mout_cmu_hsi2_bus", 1077 + CLK_CON_GAT_GATE_CLKCMU_HSI2_BUS, 21, 0, 0), 1078 + GATE(CLK_GOUT_CMU_HSI2_PCIE, "gout_cmu_hsi2_pcie", 1079 + "mout_cmu_hsi2_pcie", CLK_CON_GAT_GATE_CLKCMU_HSI2_PCIE, 1080 + 21, 0, 0), 1081 + GATE(CLK_GOUT_CMU_IPP_BUS, "gout_cmu_ipp_bus", "mout_cmu_ipp_bus", 1082 + CLK_CON_GAT_GATE_CLKCMU_IPP_BUS, 21, 0, 0), 1083 + GATE(CLK_GOUT_CMU_ITP_BUS, "gout_cmu_itp_bus", "mout_cmu_itp_bus", 1084 + CLK_CON_GAT_GATE_CLKCMU_ITP_BUS, 21, 0, 0), 1085 + GATE(CLK_GOUT_CMU_MCSC_BUS, "gout_cmu_mcsc_bus", "mout_cmu_mcsc_bus", 1086 + CLK_CON_GAT_GATE_CLKCMU_MCSC_BUS, 21, 0, 0), 1087 + GATE(CLK_GOUT_CMU_MCSC_GDC, "gout_cmu_mcsc_gdc", "mout_cmu_mcsc_gdc", 1088 + CLK_CON_GAT_GATE_CLKCMU_MCSC_GDC, 21, 0, 0), 1089 + GATE(CLK_GOUT_CMU_MFC0_MFC0, "gout_cmu_mfc0_mfc0", 1090 + "mout_cmu_mfc0_mfc0", CLK_CON_GAT_GATE_CLKCMU_MFC0_MFC0, 1091 + 21, 0, 0), 1092 + GATE(CLK_GOUT_CMU_MFC0_WFD, "gout_cmu_mfc0_wfd", "mout_cmu_mfc0_wfd", 1093 + CLK_CON_GAT_GATE_CLKCMU_MFC0_WFD, 21, 0, 0), 1094 + GATE(CLK_GOUT_CMU_MIF_BUSP, "gout_cmu_mif_busp", "mout_cmu_mif_busp", 1095 + CLK_CON_GAT_GATE_CLKCMU_MIF_BUSP, 21, 0, 0), 1096 + GATE(CLK_GOUT_CMU_NPU_BUS, "gout_cmu_npu_bus", "mout_cmu_npu_bus", 1097 + CLK_CON_GAT_GATE_CLKCMU_NPU_BUS, 21, 0, 0), 1098 + GATE(CLK_GOUT_CMU_PERIC0_BUS, "gout_cmu_peric0_bus", 1099 + "mout_cmu_peric0_bus", CLK_CON_GAT_GATE_CLKCMU_PERIC0_BUS, 1100 + 21, 0, 0), 1101 + GATE(CLK_GOUT_CMU_PERIC0_IP, "gout_cmu_peric0_ip", 1102 + "mout_cmu_peric0_ip", CLK_CON_GAT_GATE_CLKCMU_PERIC0_IP, 1103 + 21, 0, 0), 1104 + GATE(CLK_GOUT_CMU_PERIC1_BUS, "gout_cmu_peric1_bus", 1105 + "mout_cmu_peric1_bus", CLK_CON_GAT_GATE_CLKCMU_PERIC1_BUS, 1106 + 21, 0, 0), 1107 + GATE(CLK_GOUT_CMU_PERIC1_IP, "gout_cmu_peric1_ip", 1108 + "mout_cmu_peric1_ip", CLK_CON_GAT_GATE_CLKCMU_PERIC1_IP, 1109 + 21, 0, 0), 1110 + GATE(CLK_GOUT_CMU_PERIS_BUS, "gout_cmu_peris_bus", 1111 + "mout_cmu_peris_bus", CLK_CON_GAT_GATE_CLKCMU_PERIS_BUS, 1112 + 21, CLK_IGNORE_UNUSED, 0), 1113 + GATE(CLK_GOUT_CMU_SSP_BUS, "gout_cmu_ssp_bus", "mout_cmu_ssp_bus", 1114 + CLK_CON_GAT_GATE_CLKCMU_SSP_BUS, 21, 0, 0), 1115 + GATE(CLK_GOUT_CMU_TNR_BUS, "gout_cmu_tnr_bus", "mout_cmu_tnr_bus", 1116 + CLK_CON_GAT_GATE_CLKCMU_TNR_BUS, 21, 0, 0), 1117 + GATE(CLK_GOUT_CMU_VRA_BUS, "gout_cmu_vra_bus", "mout_cmu_vra_bus", 1118 + CLK_CON_GAT_GATE_CLKCMU_VRA_BUS, 21, 0, 0), 1119 + }; 1120 + 1121 + static const struct samsung_cmu_info top_cmu_info __initconst = { 1122 + .pll_clks = top_pll_clks, 1123 + .nr_pll_clks = ARRAY_SIZE(top_pll_clks), 1124 + .mux_clks = top_mux_clks, 1125 + .nr_mux_clks = ARRAY_SIZE(top_mux_clks), 1126 + .div_clks = top_div_clks, 1127 + .nr_div_clks = ARRAY_SIZE(top_div_clks), 1128 + .gate_clks = top_gate_clks, 1129 + .nr_gate_clks = ARRAY_SIZE(top_gate_clks), 1130 + .nr_clk_ids = CLKS_NR_TOP, 1131 + .clk_regs = top_clk_regs, 1132 + .nr_clk_regs = ARRAY_SIZE(top_clk_regs), 1133 + }; 1134 + 1135 + static void __init exynos990_cmu_top_init(struct device_node *np) 1136 + { 1137 + exynos_arm64_register_cmu(NULL, np, &top_cmu_info); 1138 + } 1139 + 1140 + /* Register CMU_TOP early, as it's a dependency for other early domains */ 1141 + CLK_OF_DECLARE(exynos990_cmu_top, "samsung,exynos990-cmu-top", 1142 + exynos990_cmu_top_init); 1143 + 1144 + /* ---- CMU_HSI0 ------------------------------------------------------------ */ 1145 + 1146 + /* Register Offset definitions for CMU_HSI0 (0x10a00000) */ 1147 + #define PLL_CON0_MUX_CLKCMU_HSI0_BUS_USER 0x0600 1148 + #define PLL_CON0_MUX_CLKCMU_HSI0_USB31DRD_USER 0x0620 1149 + #define PLL_CON0_MUX_CLKCMU_HSI0_USBDP_DEBUG_USER 0x0630 1150 + #define PLL_CON0_MUX_CLKCMU_HSI0_DPGTC_USER 0x0610 1151 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_DP_LINK_IPCLKPORT_I_DP_GTC_CLK 0x2004 1152 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_PPMU_HSI0_BUS1_IPCLKPORT_ACLK 0x2018 1153 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_LHS_ACEL_D_HSI0_IPCLKPORT_I_CLK 0x2014 1154 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_RSTNSYNC_CLK_HSI0_BUS_IPCLKPORT_CLK 0x2020 1155 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_VGEN_LITE_HSI0_IPCLKPORT_CLK 0x2044 1156 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_DP_LINK_IPCLKPORT_I_PCLK 0x2008 1157 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_D_TZPC_HSI0_IPCLKPORT_PCLK 0x200c 1158 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_LHM_AXI_P_HSI0_IPCLKPORT_I_CLK 0x2010 1159 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_PPMU_HSI0_BUS1_IPCLKPORT_PCLK 0x201c 1160 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_SYSMMU_USB_IPCLKPORT_CLK_S2 0x2024 1161 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_SYSREG_HSI0_IPCLKPORT_PCLK 0x2028 1162 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_USB31DRD_IPCLKPORT_ACLK_PHYCTRL 0x202c 1163 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_USB31DRD_IPCLKPORT_I_USB31DRD_REF_CLK_40 0x2034 1164 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_USB31DRD_IPCLKPORT_I_USBDPPHY_SCL_APB_PCLK 0x203c 1165 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_USB31DRD_IPCLKPORT_I_USBPCS_APB_CLK 0x2040 1166 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_USB31DRD_IPCLKPORT_BUS_CLK_EARLY 0x2030 1167 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_HSI0_CMU_HSI0_IPCLKPORT_PCLK 0x2000 1168 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_XIU_D_HSI0_IPCLKPORT_ACLK 0x2048 1169 + #define CLK_CON_GAT_GOUT_BLK_HSI0_UID_USB31DRD_IPCLKPORT_I_USBDPPHY_REF_SOC_PLL 0x2038 1170 + 1171 + static const unsigned long hsi0_clk_regs[] __initconst = { 1172 + PLL_CON0_MUX_CLKCMU_HSI0_BUS_USER, 1173 + PLL_CON0_MUX_CLKCMU_HSI0_USB31DRD_USER, 1174 + PLL_CON0_MUX_CLKCMU_HSI0_USBDP_DEBUG_USER, 1175 + PLL_CON0_MUX_CLKCMU_HSI0_DPGTC_USER, 1176 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_DP_LINK_IPCLKPORT_I_DP_GTC_CLK, 1177 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_DP_LINK_IPCLKPORT_I_PCLK, 1178 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_PPMU_HSI0_BUS1_IPCLKPORT_ACLK, 1179 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_LHS_ACEL_D_HSI0_IPCLKPORT_I_CLK, 1180 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_RSTNSYNC_CLK_HSI0_BUS_IPCLKPORT_CLK, 1181 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_VGEN_LITE_HSI0_IPCLKPORT_CLK, 1182 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_D_TZPC_HSI0_IPCLKPORT_PCLK, 1183 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_LHM_AXI_P_HSI0_IPCLKPORT_I_CLK, 1184 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_PPMU_HSI0_BUS1_IPCLKPORT_PCLK, 1185 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_SYSMMU_USB_IPCLKPORT_CLK_S2, 1186 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_SYSREG_HSI0_IPCLKPORT_PCLK, 1187 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_USB31DRD_IPCLKPORT_ACLK_PHYCTRL, 1188 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_USB31DRD_IPCLKPORT_I_USBDPPHY_SCL_APB_PCLK, 1189 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_USB31DRD_IPCLKPORT_I_USBPCS_APB_CLK, 1190 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_USB31DRD_IPCLKPORT_BUS_CLK_EARLY, 1191 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_HSI0_CMU_HSI0_IPCLKPORT_PCLK, 1192 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_XIU_D_HSI0_IPCLKPORT_ACLK, 1193 + }; 1194 + 1195 + PNAME(mout_hsi0_bus_user_p) = { "oscclk", "dout_cmu_hsi0_bus" }; 1196 + PNAME(mout_hsi0_usb31drd_user_p) = { "oscclk", "dout_cmu_hsi0_usb31drd" }; 1197 + PNAME(mout_hsi0_usbdp_debug_user_p) = { "oscclk", 1198 + "dout_cmu_hsi0_usbdp_debug" }; 1199 + PNAME(mout_hsi0_dpgtc_user_p) = { "oscclk", "dout_cmu_hsi0_dpgtc" }; 1200 + 1201 + static const struct samsung_mux_clock hsi0_mux_clks[] __initconst = { 1202 + MUX(CLK_MOUT_HSI0_BUS_USER, "mout_hsi0_bus_user", 1203 + mout_hsi0_bus_user_p, PLL_CON0_MUX_CLKCMU_HSI0_BUS_USER, 1204 + 4, 1), 1205 + MUX(CLK_MOUT_HSI0_USB31DRD_USER, "mout_hsi0_usb31drd_user", 1206 + mout_hsi0_usb31drd_user_p, PLL_CON0_MUX_CLKCMU_HSI0_USB31DRD_USER, 1207 + 4, 1), 1208 + MUX(CLK_MOUT_HSI0_USBDP_DEBUG_USER, "mout_hsi0_usbdp_debug_user", 1209 + mout_hsi0_usbdp_debug_user_p, 1210 + PLL_CON0_MUX_CLKCMU_HSI0_USBDP_DEBUG_USER, 1211 + 4, 1), 1212 + MUX(CLK_MOUT_HSI0_DPGTC_USER, "mout_hsi0_dpgtc_user", 1213 + mout_hsi0_dpgtc_user_p, PLL_CON0_MUX_CLKCMU_HSI0_DPGTC_USER, 1214 + 4, 1), 1215 + }; 1216 + 1217 + static const struct samsung_gate_clock hsi0_gate_clks[] __initconst = { 1218 + GATE(CLK_GOUT_HSI0_DP_LINK_DP_GTC_CLK, 1219 + "gout_hsi0_dp_link_dp_gtc_clk", "mout_hsi0_dpgtc_user", 1220 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_DP_LINK_IPCLKPORT_I_DP_GTC_CLK, 1221 + 21, 0, 0), 1222 + GATE(CLK_GOUT_HSI0_DP_LINK_PCLK, 1223 + "gout_hsi0_dp_link_pclk", "mout_hsi0_bus_user", 1224 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_DP_LINK_IPCLKPORT_I_PCLK, 1225 + 21, 0, 0), 1226 + GATE(CLK_GOUT_HSI0_D_TZPC_HSI0_PCLK, 1227 + "gout_hsi0_d_tzpc_hsi0_pclk", "mout_hsi0_bus_user", 1228 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_D_TZPC_HSI0_IPCLKPORT_PCLK, 1229 + 21, 0, 0), 1230 + GATE(CLK_GOUT_HSI0_LHM_AXI_P_HSI0_CLK, 1231 + "gout_hsi0_lhm_axi_p_hsi0_clk", "mout_hsi0_bus_user", 1232 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_LHM_AXI_P_HSI0_IPCLKPORT_I_CLK, 1233 + 21, CLK_IS_CRITICAL, 0), 1234 + GATE(CLK_GOUT_HSI0_PPMU_HSI0_BUS1_ACLK, 1235 + "gout_hsi0_ppmu_hsi0_bus1_aclk", "mout_hsi0_bus_user", 1236 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_PPMU_HSI0_BUS1_IPCLKPORT_ACLK, 1237 + 21, 0, 0), 1238 + GATE(CLK_GOUT_HSI0_PPMU_HSI0_BUS1_PCLK, 1239 + "gout_hsi0_ppmu_hsi0_bus1_pclk", "mout_hsi0_bus_user", 1240 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_PPMU_HSI0_BUS1_IPCLKPORT_PCLK, 1241 + 21, 0, 0), 1242 + GATE(CLK_GOUT_HSI0_CLK_HSI0_BUS_CLK, 1243 + "gout_hsi0_clk_hsi0_bus_clk", "mout_hsi0_bus_user", 1244 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_RSTNSYNC_CLK_HSI0_BUS_IPCLKPORT_CLK, 1245 + 21, 0, 0), 1246 + GATE(CLK_GOUT_HSI0_SYSMMU_USB_CLK_S2, 1247 + "gout_hsi0_sysmmu_usb_clk_s2", "mout_hsi0_bus_user", 1248 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_SYSMMU_USB_IPCLKPORT_CLK_S2, 1249 + 21, CLK_IGNORE_UNUSED, 0), 1250 + GATE(CLK_GOUT_HSI0_SYSREG_HSI0_PCLK, 1251 + "gout_hsi0_sysreg_hsi0_pclk", "mout_hsi0_bus_user", 1252 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_SYSREG_HSI0_IPCLKPORT_PCLK, 1253 + 21, 0, 0), 1254 + GATE(CLK_GOUT_HSI0_USB31DRD_ACLK_PHYCTRL, 1255 + "gout_hsi0_usb31drd_aclk_phyctrl", "mout_hsi0_bus_user", 1256 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_USB31DRD_IPCLKPORT_ACLK_PHYCTRL, 1257 + 21, 0, 0), 1258 + GATE(CLK_GOUT_HSI0_USB31DRD_BUS_CLK_EARLY, 1259 + "gout_hsi0_usb31drd_bus_clk_early", 1260 + "mout_hsi0_bus_user", 1261 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_USB31DRD_IPCLKPORT_BUS_CLK_EARLY, 1262 + 21, 0, 0), 1263 + GATE(CLK_GOUT_HSI0_USB31DRD_USB31DRD_REF_CLK_40, 1264 + "gout_hsi0_usb31drd_usb31drd_ref_clk_40", 1265 + "mout_hsi0_usb31drd_user", 1266 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_USB31DRD_IPCLKPORT_I_USB31DRD_REF_CLK_40, 1267 + 21, 0, 0), 1268 + GATE(CLK_GOUT_HSI0_USB31DRD_USBDPPHY_REF_SOC_PLL, 1269 + "gout_hsi0_usb31drd_usbdpphy_ref_soc_pll", 1270 + "mout_hsi0_usbdp_debug_user", 1271 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_USB31DRD_IPCLKPORT_I_USBDPPHY_REF_SOC_PLL, 1272 + 21, 0, 0), 1273 + GATE(CLK_GOUT_HSI0_USB31DRD_USBDPPHY_SCL_APB, 1274 + "gout_hsi0_usb31drd_ipclkport_i_usbdpphy_scl_apb_pclk", 1275 + "mout_hsi0_bus_user", 1276 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_USB31DRD_IPCLKPORT_I_USBDPPHY_SCL_APB_PCLK, 1277 + 21, 0, 0), 1278 + GATE(CLK_GOUT_HSI0_USB31DRD_USBPCS_APB_CLK, 1279 + "gout_hsi0_usb31drd_usbpcs_apb_clk", 1280 + "mout_hsi0_bus_user", 1281 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_USB31DRD_IPCLKPORT_I_USBPCS_APB_CLK, 1282 + 21, 0, 0), 1283 + GATE(CLK_GOUT_HSI0_VGEN_LITE_HSI0_CLK, 1284 + "gout_hsi0_vgen_lite_ipclkport_clk", "mout_hsi0_bus_user", 1285 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_VGEN_LITE_HSI0_IPCLKPORT_CLK, 1286 + 21, 0, 0), 1287 + GATE(CLK_GOUT_HSI0_CMU_HSI0_PCLK, 1288 + "gout_hsi0_cmu_hsi0_pclk", "mout_hsi0_bus_user", 1289 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_HSI0_CMU_HSI0_IPCLKPORT_PCLK, 1290 + 21, CLK_IGNORE_UNUSED, 0), 1291 + GATE(CLK_GOUT_HSI0_XIU_D_HSI0_ACLK, 1292 + "gout_hsi0_xiu_d_hsi0_aclk", "mout_hsi0_bus_user", 1293 + CLK_CON_GAT_GOUT_BLK_HSI0_UID_XIU_D_HSI0_IPCLKPORT_ACLK, 1294 + 21, CLK_IGNORE_UNUSED, 0), 1295 + }; 1296 + 1297 + static const struct samsung_cmu_info hsi0_cmu_info __initconst = { 1298 + .mux_clks = hsi0_mux_clks, 1299 + .nr_mux_clks = ARRAY_SIZE(hsi0_mux_clks), 1300 + .gate_clks = hsi0_gate_clks, 1301 + .nr_gate_clks = ARRAY_SIZE(hsi0_gate_clks), 1302 + .nr_clk_ids = CLKS_NR_HSI0, 1303 + .clk_regs = hsi0_clk_regs, 1304 + .nr_clk_regs = ARRAY_SIZE(hsi0_clk_regs), 1305 + .clk_name = "bus", 1306 + }; 1307 + 1308 + /* ----- platform_driver ----- */ 1309 + 1310 + static int __init exynos990_cmu_probe(struct platform_device *pdev) 1311 + { 1312 + const struct samsung_cmu_info *info; 1313 + struct device *dev = &pdev->dev; 1314 + 1315 + info = of_device_get_match_data(dev); 1316 + exynos_arm64_register_cmu(dev, dev->of_node, info); 1317 + 1318 + return 0; 1319 + } 1320 + 1321 + static const struct of_device_id exynos990_cmu_of_match[] = { 1322 + { 1323 + .compatible = "samsung,exynos990-cmu-hsi0", 1324 + .data = &hsi0_cmu_info, 1325 + }, 1326 + { }, 1327 + }; 1328 + 1329 + static struct platform_driver exynos990_cmu_driver __refdata = { 1330 + .driver = { 1331 + .name = "exynos990-cmu", 1332 + .of_match_table = exynos990_cmu_of_match, 1333 + .suppress_bind_attrs = true, 1334 + }, 1335 + .probe = exynos990_cmu_probe, 1336 + }; 1337 + 1338 + static int __init exynos990_cmu_init(void) 1339 + { 1340 + return platform_driver_register(&exynos990_cmu_driver); 1341 + } 1342 + 1343 + core_initcall(exynos990_cmu_init);
+12 -2
drivers/clk/samsung/clk-pll.c
··· 430 430 #define PLL0822X_LOCK_STAT_SHIFT (29) 431 431 #define PLL0822X_ENABLE_SHIFT (31) 432 432 433 - /* PLL1418x is similar to PLL0822x, except that MDIV is one bit smaller */ 433 + /* 434 + * PLL1418x, PLL0717x and PLL0718x are similar 435 + * to PLL0822x, except that MDIV is one bit smaller 436 + */ 434 437 #define PLL1418X_MDIV_MASK (0x1FF) 435 438 436 439 static unsigned long samsung_pll0822x_recalc_rate(struct clk_hw *hw, ··· 444 441 u64 fvco = parent_rate; 445 442 446 443 pll_con3 = readl_relaxed(pll->con_reg); 447 - if (pll->type != pll_1418x) 444 + 445 + if (pll->type != pll_1418x && 446 + pll->type != pll_0717x && 447 + pll->type != pll_0718x) 448 448 mdiv = (pll_con3 >> PLL0822X_MDIV_SHIFT) & PLL0822X_MDIV_MASK; 449 449 else 450 450 mdiv = (pll_con3 >> PLL0822X_MDIV_SHIFT) & PLL1418X_MDIV_MASK; 451 + 451 452 pdiv = (pll_con3 >> PLL0822X_PDIV_SHIFT) & PLL0822X_PDIV_MASK; 452 453 sdiv = (pll_con3 >> PLL0822X_SDIV_SHIFT) & PLL0822X_SDIV_MASK; 453 454 ··· 1384 1377 case pll_0516x: 1385 1378 case pll_0517x: 1386 1379 case pll_0518x: 1380 + case pll_0717x: 1381 + case pll_0718x: 1382 + case pll_0732x: 1387 1383 pll->enable_offs = PLL0822X_ENABLE_SHIFT; 1388 1384 pll->lock_offs = PLL0822X_LOCK_STAT_SHIFT; 1389 1385 if (!pll->rate_table)
+3
drivers/clk/samsung/clk-pll.h
··· 45 45 pll_531x, 46 46 pll_1051x, 47 47 pll_1052x, 48 + pll_0717x, 49 + pll_0718x, 50 + pll_0732x, 48 51 }; 49 52 50 53 #define PLL_RATE(_fin, _m, _p, _s, _k, _ks) \
+1 -1
drivers/clk/socfpga/clk-pll-a10.c
··· 35 35 unsigned long parent_rate) 36 36 { 37 37 struct socfpga_pll *socfpgaclk = to_socfpga_clk(hwclk); 38 - unsigned long divf, divq, reg; 38 + u32 divf, divq, reg; 39 39 unsigned long long vco_freq; 40 40 41 41 /* read VCO1 reg for numerator and denominator */
+3 -3
include/dt-bindings/clock/renesas,r9a08g045-vbattb.h
··· 2 2 * 3 3 * Copyright (C) 2024 Renesas Electronics Corp. 4 4 */ 5 - #ifndef __DT_BINDINGS_CLOCK_R9A08G045_VBATTB_H__ 6 - #define __DT_BINDINGS_CLOCK_R9A08G045_VBATTB_H__ 5 + #ifndef __DT_BINDINGS_CLOCK_RENESAS_R9A08G045_VBATTB_H__ 6 + #define __DT_BINDINGS_CLOCK_RENESAS_R9A08G045_VBATTB_H__ 7 7 8 8 #define VBATTB_XC 0 9 9 #define VBATTB_XBYP 1 10 10 #define VBATTB_MUX 2 11 11 #define VBATTB_VBATTCLK 3 12 12 13 - #endif /* __DT_BINDINGS_CLOCK_R9A08G045_VBATTB_H__ */ 13 + #endif /* __DT_BINDINGS_CLOCK_RENESAS_R9A08G045_VBATTB_H__ */
+21
include/dt-bindings/clock/renesas,r9a09g047-cpg.h
··· 1 + /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + * 3 + * Copyright (C) 2024 Renesas Electronics Corp. 4 + */ 5 + #ifndef __DT_BINDINGS_CLOCK_RENESAS_R9A09G047_CPG_H__ 6 + #define __DT_BINDINGS_CLOCK_RENESAS_R9A09G047_CPG_H__ 7 + 8 + #include <dt-bindings/clock/renesas-cpg-mssr.h> 9 + 10 + /* Core Clock list */ 11 + #define R9A09G047_SYS_0_PCLK 0 12 + #define R9A09G047_CA55_0_CORECLK0 1 13 + #define R9A09G047_CA55_0_CORECLK1 2 14 + #define R9A09G047_CA55_0_CORECLK2 3 15 + #define R9A09G047_CA55_0_CORECLK3 4 16 + #define R9A09G047_CA55_0_PERIPHCLK 5 17 + #define R9A09G047_CM33_CLK0 6 18 + #define R9A09G047_CST_0_SWCLKTCK 7 19 + #define R9A09G047_IOTOP_0_SHCLK 8 20 + 21 + #endif /* __DT_BINDINGS_CLOCK_RENESAS_R9A09G047_CPG_H__ */
+236
include/dt-bindings/clock/samsung,exynos990.h
··· 1 + /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2 + /* 3 + * Copyright (C) 2024 Igor Belwon <igor.belwon@mentallysanemainliners.org> 4 + * 5 + * Device Tree binding constants for Exynos990 clock controller. 6 + */ 7 + 8 + #ifndef _DT_BINDINGS_CLOCK_EXYNOS_990_H 9 + #define _DT_BINDINGS_CLOCK_EXYNOS_990_H 10 + 11 + /* CMU_TOP */ 12 + #define CLK_FOUT_SHARED0_PLL 1 13 + #define CLK_FOUT_SHARED1_PLL 2 14 + #define CLK_FOUT_SHARED2_PLL 3 15 + #define CLK_FOUT_SHARED3_PLL 4 16 + #define CLK_FOUT_SHARED4_PLL 5 17 + #define CLK_FOUT_G3D_PLL 6 18 + #define CLK_FOUT_MMC_PLL 7 19 + #define CLK_MOUT_PLL_SHARED0 8 20 + #define CLK_MOUT_PLL_SHARED1 9 21 + #define CLK_MOUT_PLL_SHARED2 10 22 + #define CLK_MOUT_PLL_SHARED3 11 23 + #define CLK_MOUT_PLL_SHARED4 12 24 + #define CLK_MOUT_PLL_MMC 13 25 + #define CLK_MOUT_PLL_G3D 14 26 + #define CLK_MOUT_CMU_APM_BUS 15 27 + #define CLK_MOUT_CMU_AUD_CPU 16 28 + #define CLK_MOUT_CMU_BUS0_BUS 17 29 + #define CLK_MOUT_CMU_BUS1_BUS 18 30 + #define CLK_MOUT_CMU_BUS1_SSS 19 31 + #define CLK_MOUT_CMU_CIS_CLK0 20 32 + #define CLK_MOUT_CMU_CIS_CLK1 21 33 + #define CLK_MOUT_CMU_CIS_CLK2 22 34 + #define CLK_MOUT_CMU_CIS_CLK3 23 35 + #define CLK_MOUT_CMU_CIS_CLK4 24 36 + #define CLK_MOUT_CMU_CIS_CLK5 25 37 + #define CLK_MOUT_CMU_CMU_BOOST 26 38 + #define CLK_MOUT_CMU_CORE_BUS 27 39 + #define CLK_MOUT_CMU_CPUCL0_DBG_BUS 28 40 + #define CLK_MOUT_CMU_CPUCL0_SWITCH 29 41 + #define CLK_MOUT_CMU_CPUCL1_SWITCH 30 42 + #define CLK_MOUT_CMU_CPUCL2_BUSP 31 43 + #define CLK_MOUT_CMU_CPUCL2_SWITCH 32 44 + #define CLK_MOUT_CMU_CSIS_BUS 33 45 + #define CLK_MOUT_CMU_CSIS_OIS_MCU 34 46 + #define CLK_MOUT_CMU_DNC_BUS 35 47 + #define CLK_MOUT_CMU_DNC_BUSM 36 48 + #define CLK_MOUT_CMU_DNS_BUS 37 49 + #define CLK_MOUT_CMU_DPU 38 50 + #define CLK_MOUT_CMU_DPU_ALT 39 51 + #define CLK_MOUT_CMU_DSP_BUS 40 52 + #define CLK_MOUT_CMU_G2D_G2D 41 53 + #define CLK_MOUT_CMU_G2D_MSCL 42 54 + #define CLK_MOUT_CMU_HPM 43 55 + #define CLK_MOUT_CMU_HSI0_BUS 44 56 + #define CLK_MOUT_CMU_HSI0_DPGTC 45 57 + #define CLK_MOUT_CMU_HSI0_USB31DRD 46 58 + #define CLK_MOUT_CMU_HSI0_USBDP_DEBUG 47 59 + #define CLK_MOUT_CMU_HSI1_BUS 48 60 + #define CLK_MOUT_CMU_HSI1_MMC_CARD 49 61 + #define CLK_MOUT_CMU_HSI1_PCIE 50 62 + #define CLK_MOUT_CMU_HSI1_UFS_CARD 51 63 + #define CLK_MOUT_CMU_HSI1_UFS_EMBD 52 64 + #define CLK_MOUT_CMU_HSI2_BUS 53 65 + #define CLK_MOUT_CMU_HSI2_PCIE 54 66 + #define CLK_MOUT_CMU_IPP_BUS 55 67 + #define CLK_MOUT_CMU_ITP_BUS 56 68 + #define CLK_MOUT_CMU_MCSC_BUS 57 69 + #define CLK_MOUT_CMU_MCSC_GDC 58 70 + #define CLK_MOUT_CMU_CMU_BOOST_CPU 59 71 + #define CLK_MOUT_CMU_MFC0_MFC0 60 72 + #define CLK_MOUT_CMU_MFC0_WFD 61 73 + #define CLK_MOUT_CMU_MIF_BUSP 62 74 + #define CLK_MOUT_CMU_MIF_SWITCH 63 75 + #define CLK_MOUT_CMU_NPU_BUS 64 76 + #define CLK_MOUT_CMU_PERIC0_BUS 65 77 + #define CLK_MOUT_CMU_PERIC0_IP 66 78 + #define CLK_MOUT_CMU_PERIC1_BUS 67 79 + #define CLK_MOUT_CMU_PERIC1_IP 68 80 + #define CLK_MOUT_CMU_PERIS_BUS 69 81 + #define CLK_MOUT_CMU_SSP_BUS 70 82 + #define CLK_MOUT_CMU_TNR_BUS 71 83 + #define CLK_MOUT_CMU_VRA_BUS 72 84 + #define CLK_DOUT_CMU_APM_BUS 73 85 + #define CLK_DOUT_CMU_AUD_CPU 74 86 + #define CLK_DOUT_CMU_BUS0_BUS 75 87 + #define CLK_DOUT_CMU_BUS1_BUS 76 88 + #define CLK_DOUT_CMU_BUS1_SSS 77 89 + #define CLK_DOUT_CMU_CIS_CLK0 78 90 + #define CLK_DOUT_CMU_CIS_CLK1 79 91 + #define CLK_DOUT_CMU_CIS_CLK2 80 92 + #define CLK_DOUT_CMU_CIS_CLK3 81 93 + #define CLK_DOUT_CMU_CIS_CLK4 82 94 + #define CLK_DOUT_CMU_CIS_CLK5 83 95 + #define CLK_DOUT_CMU_CMU_BOOST 84 96 + #define CLK_DOUT_CMU_CORE_BUS 85 97 + #define CLK_DOUT_CMU_CPUCL0_DBG_BUS 86 98 + #define CLK_DOUT_CMU_CPUCL0_SWITCH 87 99 + #define CLK_DOUT_CMU_CPUCL1_SWITCH 88 100 + #define CLK_DOUT_CMU_CPUCL2_BUSP 89 101 + #define CLK_DOUT_CMU_CPUCL2_SWITCH 90 102 + #define CLK_DOUT_CMU_CSIS_BUS 91 103 + #define CLK_DOUT_CMU_CSIS_OIS_MCU 92 104 + #define CLK_DOUT_CMU_DNC_BUS 93 105 + #define CLK_DOUT_CMU_DNC_BUSM 94 106 + #define CLK_DOUT_CMU_DNS_BUS 95 107 + #define CLK_DOUT_CMU_DSP_BUS 96 108 + #define CLK_DOUT_CMU_G2D_G2D 97 109 + #define CLK_DOUT_CMU_G2D_MSCL 98 110 + #define CLK_DOUT_CMU_G3D_SWITCH 99 111 + #define CLK_DOUT_CMU_HPM 100 112 + #define CLK_DOUT_CMU_HSI0_BUS 101 113 + #define CLK_DOUT_CMU_HSI0_DPGTC 102 114 + #define CLK_DOUT_CMU_HSI0_USB31DRD 103 115 + #define CLK_DOUT_CMU_HSI0_USBDP_DEBUG 104 116 + #define CLK_DOUT_CMU_HSI1_BUS 105 117 + #define CLK_DOUT_CMU_HSI1_MMC_CARD 106 118 + #define CLK_DOUT_CMU_HSI1_PCIE 107 119 + #define CLK_DOUT_CMU_HSI1_UFS_CARD 108 120 + #define CLK_DOUT_CMU_HSI1_UFS_EMBD 109 121 + #define CLK_DOUT_CMU_HSI2_BUS 110 122 + #define CLK_DOUT_CMU_HSI2_PCIE 111 123 + #define CLK_DOUT_CMU_IPP_BUS 112 124 + #define CLK_DOUT_CMU_ITP_BUS 113 125 + #define CLK_DOUT_CMU_MCSC_BUS 114 126 + #define CLK_DOUT_CMU_MCSC_GDC 115 127 + #define CLK_DOUT_CMU_CMU_BOOST_CPU 116 128 + #define CLK_DOUT_CMU_MFC0_MFC0 117 129 + #define CLK_DOUT_CMU_MFC0_WFD 118 130 + #define CLK_DOUT_CMU_MIF_BUSP 119 131 + #define CLK_DOUT_CMU_NPU_BUS 120 132 + #define CLK_DOUT_CMU_OTP 121 133 + #define CLK_DOUT_CMU_PERIC0_BUS 122 134 + #define CLK_DOUT_CMU_PERIC0_IP 123 135 + #define CLK_DOUT_CMU_PERIC1_BUS 124 136 + #define CLK_DOUT_CMU_PERIC1_IP 125 137 + #define CLK_DOUT_CMU_PERIS_BUS 126 138 + #define CLK_DOUT_CMU_SSP_BUS 127 139 + #define CLK_DOUT_CMU_TNR_BUS 128 140 + #define CLK_DOUT_CMU_VRA_BUS 129 141 + #define CLK_DOUT_CMU_DPU 130 142 + #define CLK_DOUT_CMU_DPU_ALT 131 143 + #define CLK_DOUT_CMU_SHARED0_DIV2 132 144 + #define CLK_DOUT_CMU_SHARED0_DIV3 133 145 + #define CLK_DOUT_CMU_SHARED0_DIV4 134 146 + #define CLK_DOUT_CMU_SHARED1_DIV2 135 147 + #define CLK_DOUT_CMU_SHARED1_DIV3 136 148 + #define CLK_DOUT_CMU_SHARED1_DIV4 137 149 + #define CLK_DOUT_CMU_SHARED2_DIV2 138 150 + #define CLK_DOUT_CMU_SHARED4_DIV2 139 151 + #define CLK_DOUT_CMU_SHARED4_DIV3 140 152 + #define CLK_DOUT_CMU_SHARED4_DIV4 141 153 + #define CLK_GOUT_CMU_G3D_BUS 142 154 + #define CLK_GOUT_CMU_MIF_SWITCH 143 155 + #define CLK_GOUT_CMU_APM_BUS 144 156 + #define CLK_GOUT_CMU_AUD_CPU 145 157 + #define CLK_GOUT_CMU_BUS0_BUS 146 158 + #define CLK_GOUT_CMU_BUS1_BUS 147 159 + #define CLK_GOUT_CMU_BUS1_SSS 148 160 + #define CLK_GOUT_CMU_CIS_CLK0 149 161 + #define CLK_GOUT_CMU_CIS_CLK1 150 162 + #define CLK_GOUT_CMU_CIS_CLK2 151 163 + #define CLK_GOUT_CMU_CIS_CLK3 152 164 + #define CLK_GOUT_CMU_CIS_CLK4 153 165 + #define CLK_GOUT_CMU_CIS_CLK5 154 166 + #define CLK_GOUT_CMU_CORE_BUS 155 167 + #define CLK_GOUT_CMU_CPUCL0_DBG_BUS 156 168 + #define CLK_GOUT_CMU_CPUCL0_SWITCH 157 169 + #define CLK_GOUT_CMU_CPUCL1_SWITCH 158 170 + #define CLK_GOUT_CMU_CPUCL2_BUSP 159 171 + #define CLK_GOUT_CMU_CPUCL2_SWITCH 160 172 + #define CLK_GOUT_CMU_CSIS_BUS 161 173 + #define CLK_GOUT_CMU_CSIS_OIS_MCU 162 174 + #define CLK_GOUT_CMU_DNC_BUS 163 175 + #define CLK_GOUT_CMU_DNC_BUSM 164 176 + #define CLK_GOUT_CMU_DNS_BUS 165 177 + #define CLK_GOUT_CMU_DPU 166 178 + #define CLK_GOUT_CMU_DPU_BUS 167 179 + #define CLK_GOUT_CMU_DSP_BUS 168 180 + #define CLK_GOUT_CMU_G2D_G2D 169 181 + #define CLK_GOUT_CMU_G2D_MSCL 170 182 + #define CLK_GOUT_CMU_G3D_SWITCH 171 183 + #define CLK_GOUT_CMU_HPM 172 184 + #define CLK_GOUT_CMU_HSI0_BUS 173 185 + #define CLK_GOUT_CMU_HSI0_DPGTC 174 186 + #define CLK_GOUT_CMU_HSI0_USB31DRD 175 187 + #define CLK_GOUT_CMU_HSI0_USBDP_DEBUG 176 188 + #define CLK_GOUT_CMU_HSI1_BUS 177 189 + #define CLK_GOUT_CMU_HSI1_MMC_CARD 178 190 + #define CLK_GOUT_CMU_HSI1_PCIE 179 191 + #define CLK_GOUT_CMU_HSI1_UFS_CARD 180 192 + #define CLK_GOUT_CMU_HSI1_UFS_EMBD 181 193 + #define CLK_GOUT_CMU_HSI2_BUS 182 194 + #define CLK_GOUT_CMU_HSI2_PCIE 183 195 + #define CLK_GOUT_CMU_IPP_BUS 184 196 + #define CLK_GOUT_CMU_ITP_BUS 185 197 + #define CLK_GOUT_CMU_MCSC_BUS 186 198 + #define CLK_GOUT_CMU_MCSC_GDC 187 199 + #define CLK_GOUT_CMU_MFC0_MFC0 188 200 + #define CLK_GOUT_CMU_MFC0_WFD 189 201 + #define CLK_GOUT_CMU_MIF_BUSP 190 202 + #define CLK_GOUT_CMU_NPU_BUS 191 203 + #define CLK_GOUT_CMU_PERIC0_BUS 192 204 + #define CLK_GOUT_CMU_PERIC0_IP 193 205 + #define CLK_GOUT_CMU_PERIC1_BUS 194 206 + #define CLK_GOUT_CMU_PERIC1_IP 195 207 + #define CLK_GOUT_CMU_PERIS_BUS 196 208 + #define CLK_GOUT_CMU_SSP_BUS 197 209 + #define CLK_GOUT_CMU_TNR_BUS 198 210 + #define CLK_GOUT_CMU_VRA_BUS 199 211 + 212 + /* CMU_HSI0 */ 213 + #define CLK_MOUT_HSI0_BUS_USER 1 214 + #define CLK_MOUT_HSI0_USB31DRD_USER 2 215 + #define CLK_MOUT_HSI0_USBDP_DEBUG_USER 3 216 + #define CLK_MOUT_HSI0_DPGTC_USER 4 217 + #define CLK_GOUT_HSI0_DP_LINK_DP_GTC_CLK 5 218 + #define CLK_GOUT_HSI0_DP_LINK_PCLK 6 219 + #define CLK_GOUT_HSI0_D_TZPC_HSI0_PCLK 7 220 + #define CLK_GOUT_HSI0_LHM_AXI_P_HSI0_CLK 8 221 + #define CLK_GOUT_HSI0_PPMU_HSI0_BUS1_ACLK 9 222 + #define CLK_GOUT_HSI0_PPMU_HSI0_BUS1_PCLK 10 223 + #define CLK_GOUT_HSI0_CLK_HSI0_BUS_CLK 11 224 + #define CLK_GOUT_HSI0_SYSMMU_USB_CLK_S2 12 225 + #define CLK_GOUT_HSI0_SYSREG_HSI0_PCLK 13 226 + #define CLK_GOUT_HSI0_USB31DRD_ACLK_PHYCTRL 14 227 + #define CLK_GOUT_HSI0_USB31DRD_BUS_CLK_EARLY 15 228 + #define CLK_GOUT_HSI0_USB31DRD_USB31DRD_REF_CLK_40 16 229 + #define CLK_GOUT_HSI0_USB31DRD_USBDPPHY_REF_SOC_PLL 17 230 + #define CLK_GOUT_HSI0_USB31DRD_USBDPPHY_SCL_APB 18 231 + #define CLK_GOUT_HSI0_USB31DRD_USBPCS_APB_CLK 19 232 + #define CLK_GOUT_HSI0_VGEN_LITE_HSI0_CLK 20 233 + #define CLK_GOUT_HSI0_CMU_HSI0_PCLK 21 234 + #define CLK_GOUT_HSI0_XIU_D_HSI0_ACLK 22 235 + 236 + #endif