Merge tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux

Pull clk updates from Stephen Boyd:
"This is entirely SoC clk drivers.

The majority diff wise is for the new Rockchip and Qualcomm clk
drivers which is mostly lines and lines of data structures to describe
the clk hardware in these SoCs. Beyond those two, Renesas continues to
incrementally add clks to their SoC drivers, causing them to show up
higher in the diffstat this time because they added quite a few clks
all over the place.

Overall it is a semi-quiet release that has some new clk drivers and
the usual fixes for clock data that was wrong or missing and
non-critical cleanups that plug error paths or fix typos.

New Drivers:
- Qualcomm IPQ5424 Network Subsystem Clock Controller
- Qualcomm SM8750 Video Clock Controller
- Rockchip RV1126B and RK3506 clock drivers
- i.MX8ULP SIM LPAV clock driver
- Samsung ACPM (firmware interface) clock driver
- Altera Agilex5 clock driver"

* tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux: (117 commits)
clk: keystone: fix compile testing
clk: keystone: syscon-clk: fix regmap leak on probe failure
clk: qcom: Mark camcc_sm7150_hws static
clk: samsung: exynos-clkout: Assign .num before accessing .hws
clk: rockchip: Add clock and reset driver for RK3506
dt-bindings: clock: rockchip: Add RK3506 clock and reset unit
clk: actions: Fix discarding const qualifier by 'container_of' macro
clk: spacemit: Set clk_hw_onecell_data::num before using flex array
clk: visconti: Add VIIF clocks
dt-bindings: clock: tmpv770x: Add VIIF clocks
dt-bindings: clock: tmpv770x: Remove definition of number of clocks
clk: visconti: Do not define number of clocks in bindings
clk: rockchip: Add clock controller for the RV1126B
dt-bindings: clock, reset: Add support for rv1126b
clk: rockchip: Implement rockchip_clk_register_armclk_multi_pll()
clk: qcom: x1e80100-dispcc: Add USB4 router link resets
dt-bindings: clock: qcom: x1e80100-dispcc: Add USB4 router link resets
clk: qcom: videocc-sm8750: Add video clock controller driver for SM8750
dt-bindings: clock: qcom: Add SM8750 video clock controller
clk: qcom: branch: Extend invert logic for branch2 mem clocks
...

+10603 -371
+1 -2
Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml
··· 64 reg: 65 minItems: 2 66 67 - '#reset-cells': false 68 - 69 - if: 70 properties: 71 compatible: ··· 83 reg = <0x1fa20000 0x400>, 84 <0x1fb00000 0x1000>; 85 #clock-cells = <1>; 86 }; 87 88 - |
··· 64 reg: 65 minItems: 2 66 67 - if: 68 properties: 69 compatible: ··· 85 reg = <0x1fa20000 0x400>, 86 <0x1fb00000 0x1000>; 87 #clock-cells = <1>; 88 + #reset-cells = <1>; 89 }; 90 91 - |
+72
Documentation/devicetree/bindings/clock/fsl,imx8ulp-sim-lpav.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/fsl,imx8ulp-sim-lpav.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: NXP i.MX8ULP LPAV System Integration Module (SIM) 8 + 9 + maintainers: 10 + - Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com> 11 + 12 + description: 13 + The i.MX8ULP LPAV subsystem contains a block control module known as 14 + SIM LPAV, which offers functionalities such as clock gating or reset 15 + line assertion/de-assertion. 16 + 17 + properties: 18 + compatible: 19 + const: fsl,imx8ulp-sim-lpav 20 + 21 + reg: 22 + maxItems: 1 23 + 24 + clocks: 25 + maxItems: 3 26 + 27 + clock-names: 28 + items: 29 + - const: bus 30 + - const: core 31 + - const: plat 32 + 33 + '#clock-cells': 34 + const: 1 35 + 36 + '#reset-cells': 37 + const: 1 38 + 39 + mux-controller: 40 + $ref: /schemas/mux/reg-mux.yaml# 41 + 42 + required: 43 + - compatible 44 + - reg 45 + - clocks 46 + - clock-names 47 + - '#clock-cells' 48 + - '#reset-cells' 49 + - mux-controller 50 + 51 + additionalProperties: false 52 + 53 + examples: 54 + - | 55 + #include <dt-bindings/clock/imx8ulp-clock.h> 56 + 57 + clock-controller@2da50000 { 58 + compatible = "fsl,imx8ulp-sim-lpav"; 59 + reg = <0x2da50000 0x10000>; 60 + clocks = <&cgc2 IMX8ULP_CLK_LPAV_BUS_DIV>, 61 + <&cgc2 IMX8ULP_CLK_HIFI_DIVCORE>, 62 + <&cgc2 IMX8ULP_CLK_HIFI_DIVPLAT>; 63 + clock-names = "bus", "core", "plat"; 64 + #clock-cells = <1>; 65 + #reset-cells = <1>; 66 + 67 + mux-controller { 68 + compatible = "reg-mux"; 69 + #mux-control-cells = <1>; 70 + mux-reg-masks = <0x8 0x00000200>; 71 + }; 72 + };
+3
Documentation/devicetree/bindings/clock/google,gs101-clock.yaml
··· 46 "#clock-cells": 47 const: 1 48 49 reg: 50 maxItems: 1 51
··· 46 "#clock-cells": 47 const: 1 48 49 + power-domains: 50 + maxItems: 1 51 + 52 reg: 53 maxItems: 1 54
+22 -14
Documentation/devicetree/bindings/clock/microchip,mpfs-clkcfg.yaml
··· 22 const: microchip,mpfs-clkcfg 23 24 reg: 25 - items: 26 - - description: | 27 - clock config registers: 28 - These registers contain enable, reset & divider tables for the, cpu, 29 - axi, ahb and rtc/mtimer reference clocks as well as enable and reset 30 - for the peripheral clocks. 31 - - description: | 32 - mss pll dri registers: 33 - Block of registers responsible for dynamic reconfiguration of the mss 34 - pll 35 36 clocks: 37 maxItems: 1 ··· 76 - | 77 #include <dt-bindings/clock/microchip,mpfs-clock.h> 78 soc { 79 - #address-cells = <2>; 80 - #size-cells = <2>; 81 - clkcfg: clock-controller@20002000 { 82 compatible = "microchip,mpfs-clkcfg"; 83 - reg = <0x0 0x20002000 0x0 0x1000>, <0x0 0x3E001000 0x0 0x1000>; 84 clocks = <&ref>; 85 #clock-cells = <1>; 86 };
··· 22 const: microchip,mpfs-clkcfg 23 24 reg: 25 + oneOf: 26 + - items: 27 + - description: | 28 + clock config registers: 29 + These registers contain enable, reset & divider tables for the, cpu, 30 + axi, ahb and rtc/mtimer reference clocks as well as enable and reset 31 + for the peripheral clocks. 32 + - description: | 33 + mss pll dri registers: 34 + Block of registers responsible for dynamic reconfiguration of the mss 35 + pll 36 + deprecated: true 37 + - items: 38 + - description: | 39 + mss pll dri registers: 40 + Block of registers responsible for dynamic reconfiguration of the mss 41 + pll 42 43 clocks: 44 maxItems: 1 ··· 69 - | 70 #include <dt-bindings/clock/microchip,mpfs-clock.h> 71 soc { 72 + #address-cells = <1>; 73 + #size-cells = <1>; 74 + 75 + clkcfg: clock-controller@3E001000 { 76 compatible = "microchip,mpfs-clkcfg"; 77 + reg = <0x3E001000 0x1000>; 78 clocks = <&ref>; 79 #clock-cells = <1>; 80 };
+1
Documentation/devicetree/bindings/clock/qcom,rpmhcc.yaml
··· 18 compatible: 19 enum: 20 - qcom,glymur-rpmh-clk 21 - qcom,milos-rpmh-clk 22 - qcom,qcs615-rpmh-clk 23 - qcom,qdu1000-rpmh-clk
··· 18 compatible: 19 enum: 20 - qcom,glymur-rpmh-clk 21 + - qcom,kaanapali-rpmh-clk 22 - qcom,milos-rpmh-clk 23 - qcom,qcs615-rpmh-clk 24 - qcom,qdu1000-rpmh-clk
+4 -1
Documentation/devicetree/bindings/clock/qcom,sm8450-videocc.yaml
··· 7 title: Qualcomm Video Clock & Reset Controller on SM8450 8 9 maintainers: 10 - - Taniya Das <quic_tdas@quicinc.com> 11 - Jagadeesh Kona <quic_jkona@quicinc.com> 12 13 description: | ··· 17 See also: 18 include/dt-bindings/clock/qcom,sm8450-videocc.h 19 include/dt-bindings/clock/qcom,sm8650-videocc.h 20 21 properties: 22 compatible: ··· 26 - qcom,sm8475-videocc 27 - qcom,sm8550-videocc 28 - qcom,sm8650-videocc 29 - qcom,x1e80100-videocc 30 31 clocks: ··· 63 enum: 64 - qcom,sm8450-videocc 65 - qcom,sm8550-videocc 66 then: 67 required: 68 - required-opps
··· 7 title: Qualcomm Video Clock & Reset Controller on SM8450 8 9 maintainers: 10 + - Taniya Das <taniya.das@oss.qualcomm.com> 11 - Jagadeesh Kona <quic_jkona@quicinc.com> 12 13 description: | ··· 17 See also: 18 include/dt-bindings/clock/qcom,sm8450-videocc.h 19 include/dt-bindings/clock/qcom,sm8650-videocc.h 20 + include/dt-bindings/clock/qcom,sm8750-videocc.h 21 22 properties: 23 compatible: ··· 25 - qcom,sm8475-videocc 26 - qcom,sm8550-videocc 27 - qcom,sm8650-videocc 28 + - qcom,sm8750-videocc 29 - qcom,x1e80100-videocc 30 31 clocks: ··· 61 enum: 62 - qcom,sm8450-videocc 63 - qcom,sm8550-videocc 64 + - qcom,sm8750-videocc 65 then: 66 required: 67 - required-opps
+1
Documentation/devicetree/bindings/clock/qcom,sm8550-tcsr.yaml
··· 25 items: 26 - enum: 27 - qcom,glymur-tcsr 28 - qcom,milos-tcsr 29 - qcom,sar2130p-tcsr 30 - qcom,sm8550-tcsr
··· 25 items: 26 - enum: 27 - qcom,glymur-tcsr 28 + - qcom,kaanapali-tcsr 29 - qcom,milos-tcsr 30 - qcom,sar2130p-tcsr 31 - qcom,sm8550-tcsr
+6 -2
Documentation/devicetree/bindings/clock/qcom,sm8750-gcc.yaml
··· 13 Qualcomm global clock control module provides the clocks, resets and power 14 domains on SM8750 15 16 - See also: include/dt-bindings/clock/qcom,sm8750-gcc.h 17 18 properties: 19 compatible: 20 - const: qcom,sm8750-gcc 21 22 clocks: 23 items:
··· 13 Qualcomm global clock control module provides the clocks, resets and power 14 domains on SM8750 15 16 + See also: 17 + include/dt-bindings/clock/qcom,kaanapali-gcc.h 18 + include/dt-bindings/clock/qcom,sm8750-gcc.h 19 20 properties: 21 compatible: 22 + enum: 23 + - qcom,kaanapali-gcc 24 + - qcom,sm8750-gcc 25 26 clocks: 27 items:
+55
Documentation/devicetree/bindings/clock/rockchip,rk3506-cru.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/rockchip,rk3506-cru.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Rockchip RK3506 Clock and Reset Unit (CRU) 8 + 9 + maintainers: 10 + - Finley Xiao <finley.xiao@rock-chips.com> 11 + - Heiko Stuebner <heiko@sntech.de> 12 + 13 + description: 14 + The RK3506 CRU generates the clock and also implements reset for SoC 15 + peripherals. 16 + 17 + properties: 18 + compatible: 19 + const: rockchip,rk3506-cru 20 + 21 + reg: 22 + maxItems: 1 23 + 24 + "#clock-cells": 25 + const: 1 26 + 27 + "#reset-cells": 28 + const: 1 29 + 30 + clocks: 31 + maxItems: 1 32 + 33 + clock-names: 34 + const: xin 35 + 36 + required: 37 + - compatible 38 + - reg 39 + - "#clock-cells" 40 + - "#reset-cells" 41 + - clocks 42 + - clock-names 43 + 44 + additionalProperties: false 45 + 46 + examples: 47 + - | 48 + clock-controller@ff9a0000 { 49 + compatible = "rockchip,rk3506-cru"; 50 + reg = <0xff9a0000 0x20000>; 51 + #clock-cells = <1>; 52 + #reset-cells = <1>; 53 + clocks = <&xin24m>; 54 + clock-names = "xin"; 55 + };
+52
Documentation/devicetree/bindings/clock/rockchip,rv1126b-cru.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/rockchip,rv1126b-cru.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Rockchip RV1126B Clock and Reset Unit 8 + 9 + maintainers: 10 + - Elaine Zhang <zhangqing@rock-chips.com> 11 + - Heiko Stuebner <heiko@sntech.de> 12 + 13 + description: 14 + The rv1126b clock controller generates the clock and also implements a 15 + reset controller for SoC peripherals. 16 + 17 + properties: 18 + compatible: 19 + enum: 20 + - rockchip,rv1126b-cru 21 + 22 + reg: 23 + maxItems: 1 24 + 25 + "#clock-cells": 26 + const: 1 27 + 28 + "#reset-cells": 29 + const: 1 30 + 31 + clocks: 32 + maxItems: 1 33 + 34 + clock-names: 35 + const: xin24m 36 + 37 + required: 38 + - compatible 39 + - reg 40 + - "#clock-cells" 41 + - "#reset-cells" 42 + 43 + additionalProperties: false 44 + 45 + examples: 46 + - | 47 + clock-controller@20000000 { 48 + compatible = "rockchip,rv1126b-cru"; 49 + reg = <0x20000000 0xc0000>; 50 + #clock-cells = <1>; 51 + #reset-cells = <1>; 52 + };
+42
Documentation/devicetree/bindings/clock/samsung,exynosautov920-clock.yaml
··· 38 - samsung,exynosautov920-cmu-hsi0 39 - samsung,exynosautov920-cmu-hsi1 40 - samsung,exynosautov920-cmu-hsi2 41 - samsung,exynosautov920-cmu-misc 42 - samsung,exynosautov920-cmu-peric0 43 - samsung,exynosautov920-cmu-peric1 ··· 227 - const: ufs 228 - const: embd 229 - const: ethernet 230 231 required: 232 - compatible
··· 38 - samsung,exynosautov920-cmu-hsi0 39 - samsung,exynosautov920-cmu-hsi1 40 - samsung,exynosautov920-cmu-hsi2 41 + - samsung,exynosautov920-cmu-m2m 42 + - samsung,exynosautov920-cmu-mfc 43 - samsung,exynosautov920-cmu-misc 44 - samsung,exynosautov920-cmu-peric0 45 - samsung,exynosautov920-cmu-peric1 ··· 225 - const: ufs 226 - const: embd 227 - const: ethernet 228 + 229 + - if: 230 + properties: 231 + compatible: 232 + contains: 233 + const: samsung,exynosautov920-cmu-m2m 234 + 235 + then: 236 + properties: 237 + clocks: 238 + items: 239 + - description: External reference clock (38.4 MHz) 240 + - description: CMU_M2M NOC clock (from CMU_TOP) 241 + - description: CMU_M2M JPEG clock (from CMU_TOP) 242 + 243 + clock-names: 244 + items: 245 + - const: oscclk 246 + - const: noc 247 + - const: jpeg 248 + 249 + - if: 250 + properties: 251 + compatible: 252 + contains: 253 + const: samsung,exynosautov920-cmu-mfc 254 + 255 + then: 256 + properties: 257 + clocks: 258 + items: 259 + - description: External reference clock (38.4 MHz) 260 + - description: CMU_MFC MFC clock (from CMU_TOP) 261 + - description: CMU_MFC WFD clock (from CMU_TOP) 262 + 263 + clock-names: 264 + items: 265 + - const: oscclk 266 + - const: mfc 267 + - const: wfd 268 269 required: 270 - compatible
+2 -1
MAINTAINERS
··· 10710 F: drivers/clk/samsung/clk-gs101.c 10711 F: drivers/soc/samsung/gs101-pmu.c 10712 F: drivers/phy/samsung/phy-gs101-ufs.c 10713 - F: include/dt-bindings/clock/google,gs101.h 10714 K: [gG]oogle.?[tT]ensor 10715 10716 GPD FAN DRIVER ··· 23137 L: linux-samsung-soc@vger.kernel.org 23138 S: Supported 23139 F: Documentation/devicetree/bindings/firmware/google,gs101-acpm-ipc.yaml 23140 F: drivers/firmware/samsung/exynos-acpm* 23141 F: include/linux/firmware/samsung/exynos-acpm-protocol.h 23142
··· 10710 F: drivers/clk/samsung/clk-gs101.c 10711 F: drivers/soc/samsung/gs101-pmu.c 10712 F: drivers/phy/samsung/phy-gs101-ufs.c 10713 + F: include/dt-bindings/clock/google,gs101* 10714 K: [gG]oogle.?[tT]ensor 10715 10716 GPD FAN DRIVER ··· 23137 L: linux-samsung-soc@vger.kernel.org 23138 S: Supported 23139 F: Documentation/devicetree/bindings/firmware/google,gs101-acpm-ipc.yaml 23140 + F: drivers/clk/samsung/clk-acpm.c 23141 F: drivers/firmware/samsung/exynos-acpm* 23142 F: include/linux/firmware/samsung/exynos-acpm-protocol.h 23143
+1 -2
drivers/clk/Makefile
··· 125 obj-y += imgtec/ 126 obj-y += imx/ 127 obj-y += ingenic/ 128 - obj-$(CONFIG_ARCH_K3) += keystone/ 129 - obj-$(CONFIG_ARCH_KEYSTONE) += keystone/ 130 obj-y += mediatek/ 131 obj-$(CONFIG_ARCH_MESON) += meson/ 132 obj-y += microchip/
··· 125 obj-y += imgtec/ 126 obj-y += imx/ 127 obj-y += ingenic/ 128 + obj-y += keystone/ 129 obj-y += mediatek/ 130 obj-$(CONFIG_ARCH_MESON) += meson/ 131 obj-y += microchip/
+1 -1
drivers/clk/actions/owl-common.h
··· 32 }; 33 34 static inline struct owl_clk_common * 35 - hw_to_owl_clk_common(const struct clk_hw *hw) 36 { 37 return container_of(hw, struct owl_clk_common, hw); 38 }
··· 32 }; 33 34 static inline struct owl_clk_common * 35 + hw_to_owl_clk_common(struct clk_hw *hw) 36 { 37 return container_of(hw, struct owl_clk_common, hw); 38 }
+1 -1
drivers/clk/actions/owl-composite.h
··· 108 }, \ 109 } 110 111 - static inline struct owl_composite *hw_to_owl_comp(const struct clk_hw *hw) 112 { 113 struct owl_clk_common *common = hw_to_owl_clk_common(hw); 114
··· 108 }, \ 109 } 110 111 + static inline struct owl_composite *hw_to_owl_comp(struct clk_hw *hw) 112 { 113 struct owl_clk_common *common = hw_to_owl_clk_common(hw); 114
+1 -1
drivers/clk/actions/owl-divider.h
··· 49 }, \ 50 } 51 52 - static inline struct owl_divider *hw_to_owl_divider(const struct clk_hw *hw) 53 { 54 struct owl_clk_common *common = hw_to_owl_clk_common(hw); 55
··· 49 }, \ 50 } 51 52 + static inline struct owl_divider *hw_to_owl_divider(struct clk_hw *hw) 53 { 54 struct owl_clk_common *common = hw_to_owl_clk_common(hw); 55
+1 -1
drivers/clk/actions/owl-factor.h
··· 57 58 #define div_mask(d) ((1 << ((d)->width)) - 1) 59 60 - static inline struct owl_factor *hw_to_owl_factor(const struct clk_hw *hw) 61 { 62 struct owl_clk_common *common = hw_to_owl_clk_common(hw); 63
··· 57 58 #define div_mask(d) ((1 << ((d)->width)) - 1) 59 60 + static inline struct owl_factor *hw_to_owl_factor(struct clk_hw *hw) 61 { 62 struct owl_clk_common *common = hw_to_owl_clk_common(hw); 63
+1 -1
drivers/clk/actions/owl-gate.h
··· 56 }, \ 57 } \ 58 59 - static inline struct owl_gate *hw_to_owl_gate(const struct clk_hw *hw) 60 { 61 struct owl_clk_common *common = hw_to_owl_clk_common(hw); 62
··· 56 }, \ 57 } \ 58 59 + static inline struct owl_gate *hw_to_owl_gate(struct clk_hw *hw) 60 { 61 struct owl_clk_common *common = hw_to_owl_clk_common(hw); 62
+1 -1
drivers/clk/actions/owl-mux.h
··· 44 }, \ 45 } 46 47 - static inline struct owl_mux *hw_to_owl_mux(const struct clk_hw *hw) 48 { 49 struct owl_clk_common *common = hw_to_owl_clk_common(hw); 50
··· 44 }, \ 45 } 46 47 + static inline struct owl_mux *hw_to_owl_mux(struct clk_hw *hw) 48 { 49 struct owl_clk_common *common = hw_to_owl_clk_common(hw); 50
+1 -1
drivers/clk/actions/owl-pll.h
··· 98 99 #define mul_mask(m) ((1 << ((m)->width)) - 1) 100 101 - static inline struct owl_pll *hw_to_owl_pll(const struct clk_hw *hw) 102 { 103 struct owl_clk_common *common = hw_to_owl_clk_common(hw); 104
··· 98 99 #define mul_mask(m) ((1 << ((m)->width)) - 1) 100 101 + static inline struct owl_pll *hw_to_owl_pll(struct clk_hw *hw) 102 { 103 struct owl_clk_common *common = hw_to_owl_clk_common(hw); 104
+59 -5
drivers/clk/clk-en7523.c
··· 9 #include <linux/regmap.h> 10 #include <linux/reset-controller.h> 11 #include <dt-bindings/clock/en7523-clk.h> 12 #include <dt-bindings/reset/airoha,en7581-reset.h> 13 14 #define RST_NR_PER_BANK 32 ··· 300 REG_RST_CTRL1, 301 }; 302 303 static const u16 en7581_rst_map[] = { 304 /* RST_CTRL2 */ 305 [EN7581_XPON_PHY_RST] = 0, ··· 404 [EN7581_PCIE_HB_RST] = RST_NR_PER_BANK + 29, 405 [EN7581_XPON_MAC_RST] = RST_NR_PER_BANK + 31, 406 }; 407 408 static u32 en7523_get_base_rate(const struct en_clk_desc *desc, u32 val) 409 { ··· 603 604 en7523_register_clocks(&pdev->dev, clk_data, base, np_base); 605 606 - return 0; 607 } 608 609 static void en7581_register_clocks(struct device *dev, struct clk_hw_onecell_data *clk_data, ··· 704 .status = en7523_reset_status, 705 }; 706 707 - static int en7581_reset_register(struct device *dev, void __iomem *base) 708 { 709 struct en_rst_data *rst_data; 710 ··· 714 return -ENOMEM; 715 716 rst_data->bank_ofs = en7581_rst_ofs; 717 - rst_data->idx_map = en7581_rst_map; 718 rst_data->base = base; 719 720 - rst_data->rcdev.nr_resets = ARRAY_SIZE(en7581_rst_map); 721 rst_data->rcdev.of_xlate = en7523_reset_xlate; 722 rst_data->rcdev.ops = &en7581_reset_ops; 723 rst_data->rcdev.of_node = dev->of_node; ··· 751 val = readl(base + REG_NP_SCU_PCIC); 752 writel(val | 3, base + REG_NP_SCU_PCIC); 753 754 - return en7581_reset_register(&pdev->dev, base); 755 } 756 757 static int en7523_clk_probe(struct platform_device *pdev)
··· 9 #include <linux/regmap.h> 10 #include <linux/reset-controller.h> 11 #include <dt-bindings/clock/en7523-clk.h> 12 + #include <dt-bindings/reset/airoha,en7523-reset.h> 13 #include <dt-bindings/reset/airoha,en7581-reset.h> 14 15 #define RST_NR_PER_BANK 32 ··· 299 REG_RST_CTRL1, 300 }; 301 302 + static const u16 en7523_rst_map[] = { 303 + /* RST_CTRL2 */ 304 + [EN7523_XPON_PHY_RST] = 0, 305 + [EN7523_XSI_MAC_RST] = 7, 306 + [EN7523_XSI_PHY_RST] = 8, 307 + [EN7523_NPU_RST] = 9, 308 + [EN7523_I2S_RST] = 10, 309 + [EN7523_TRNG_RST] = 11, 310 + [EN7523_TRNG_MSTART_RST] = 12, 311 + [EN7523_DUAL_HSI0_RST] = 13, 312 + [EN7523_DUAL_HSI1_RST] = 14, 313 + [EN7523_HSI_RST] = 15, 314 + [EN7523_DUAL_HSI0_MAC_RST] = 16, 315 + [EN7523_DUAL_HSI1_MAC_RST] = 17, 316 + [EN7523_HSI_MAC_RST] = 18, 317 + [EN7523_WDMA_RST] = 19, 318 + [EN7523_WOE0_RST] = 20, 319 + [EN7523_WOE1_RST] = 21, 320 + [EN7523_HSDMA_RST] = 22, 321 + [EN7523_I2C2RBUS_RST] = 23, 322 + [EN7523_TDMA_RST] = 24, 323 + /* RST_CTRL1 */ 324 + [EN7523_PCM1_ZSI_ISI_RST] = RST_NR_PER_BANK + 0, 325 + [EN7523_FE_PDMA_RST] = RST_NR_PER_BANK + 1, 326 + [EN7523_FE_QDMA_RST] = RST_NR_PER_BANK + 2, 327 + [EN7523_PCM_SPIWP_RST] = RST_NR_PER_BANK + 4, 328 + [EN7523_CRYPTO_RST] = RST_NR_PER_BANK + 6, 329 + [EN7523_TIMER_RST] = RST_NR_PER_BANK + 8, 330 + [EN7523_PCM1_RST] = RST_NR_PER_BANK + 11, 331 + [EN7523_UART_RST] = RST_NR_PER_BANK + 12, 332 + [EN7523_GPIO_RST] = RST_NR_PER_BANK + 13, 333 + [EN7523_GDMA_RST] = RST_NR_PER_BANK + 14, 334 + [EN7523_I2C_MASTER_RST] = RST_NR_PER_BANK + 16, 335 + [EN7523_PCM2_ZSI_ISI_RST] = RST_NR_PER_BANK + 17, 336 + [EN7523_SFC_RST] = RST_NR_PER_BANK + 18, 337 + [EN7523_UART2_RST] = RST_NR_PER_BANK + 19, 338 + [EN7523_GDMP_RST] = RST_NR_PER_BANK + 20, 339 + [EN7523_FE_RST] = RST_NR_PER_BANK + 21, 340 + [EN7523_USB_HOST_P0_RST] = RST_NR_PER_BANK + 22, 341 + [EN7523_GSW_RST] = RST_NR_PER_BANK + 23, 342 + [EN7523_SFC2_PCM_RST] = RST_NR_PER_BANK + 25, 343 + [EN7523_PCIE0_RST] = RST_NR_PER_BANK + 26, 344 + [EN7523_PCIE1_RST] = RST_NR_PER_BANK + 27, 345 + [EN7523_PCIE_HB_RST] = RST_NR_PER_BANK + 29, 346 + [EN7523_XPON_MAC_RST] = RST_NR_PER_BANK + 31, 347 + }; 348 + 349 static const u16 en7581_rst_map[] = { 350 /* RST_CTRL2 */ 351 [EN7581_XPON_PHY_RST] = 0, ··· 356 [EN7581_PCIE_HB_RST] = RST_NR_PER_BANK + 29, 357 [EN7581_XPON_MAC_RST] = RST_NR_PER_BANK + 31, 358 }; 359 + 360 + static int en7581_reset_register(struct device *dev, void __iomem *base, 361 + const u16 *rst_map, int nr_resets); 362 363 static u32 en7523_get_base_rate(const struct en_clk_desc *desc, u32 val) 364 { ··· 552 553 en7523_register_clocks(&pdev->dev, clk_data, base, np_base); 554 555 + return en7581_reset_register(&pdev->dev, np_base, en7523_rst_map, 556 + ARRAY_SIZE(en7523_rst_map)); 557 } 558 559 static void en7581_register_clocks(struct device *dev, struct clk_hw_onecell_data *clk_data, ··· 652 .status = en7523_reset_status, 653 }; 654 655 + static int en7581_reset_register(struct device *dev, void __iomem *base, 656 + const u16 *rst_map, int nr_resets) 657 { 658 struct en_rst_data *rst_data; 659 ··· 661 return -ENOMEM; 662 663 rst_data->bank_ofs = en7581_rst_ofs; 664 + rst_data->idx_map = rst_map; 665 rst_data->base = base; 666 667 + rst_data->rcdev.nr_resets = nr_resets; 668 rst_data->rcdev.of_xlate = en7523_reset_xlate; 669 rst_data->rcdev.ops = &en7581_reset_ops; 670 rst_data->rcdev.of_node = dev->of_node; ··· 698 val = readl(base + REG_NP_SCU_PCIC); 699 writel(val | 3, base + REG_NP_SCU_PCIC); 700 701 + return en7581_reset_register(&pdev->dev, base, en7581_rst_map, 702 + ARRAY_SIZE(en7581_rst_map)); 703 } 704 705 static int en7523_clk_probe(struct platform_device *pdev)
-2
drivers/clk/clk-lan966x.c
··· 16 #include <linux/platform_device.h> 17 #include <linux/slab.h> 18 19 - #include <dt-bindings/clock/microchip,lan966x.h> 20 - 21 #define GCK_ENA BIT(0) 22 #define GCK_SRC_SEL GENMASK(9, 8) 23 #define GCK_PRESCALER GENMASK(23, 16)
··· 16 #include <linux/platform_device.h> 17 #include <linux/slab.h> 18 19 #define GCK_ENA BIT(0) 20 #define GCK_SRC_SEL GENMASK(9, 8) 21 #define GCK_PRESCALER GENMASK(23, 16)
+1
drivers/clk/imx/Kconfig
··· 105 tristate "IMX8ULP CCM Clock Driver" 106 depends on ARCH_MXC || COMPILE_TEST 107 select MXC_CLK 108 help 109 Build the driver for i.MX8ULP CCM Clock Driver 110
··· 105 tristate "IMX8ULP CCM Clock Driver" 106 depends on ARCH_MXC || COMPILE_TEST 107 select MXC_CLK 108 + select AUXILIARY_BUS 109 help 110 Build the driver for i.MX8ULP CCM Clock Driver 111
+1
drivers/clk/imx/Makefile
··· 41 clk-imx-acm-$(CONFIG_CLK_IMX8QXP) = clk-imx8-acm.o 42 43 obj-$(CONFIG_CLK_IMX8ULP) += clk-imx8ulp.o 44 45 obj-$(CONFIG_CLK_IMX1) += clk-imx1.o 46 obj-$(CONFIG_CLK_IMX25) += clk-imx25.o
··· 41 clk-imx-acm-$(CONFIG_CLK_IMX8QXP) = clk-imx8-acm.o 42 43 obj-$(CONFIG_CLK_IMX8ULP) += clk-imx8ulp.o 44 + obj-$(CONFIG_CLK_IMX8ULP) += clk-imx8ulp-sim-lpav.o 45 46 obj-$(CONFIG_CLK_IMX1) += clk-imx1.o 47 obj-$(CONFIG_CLK_IMX25) += clk-imx25.o
+13
drivers/clk/imx/clk-composite-7ulp.c
··· 7 8 #include <linux/bits.h> 9 #include <linux/clk-provider.h> 10 #include <linux/err.h> 11 #include <linux/io.h> 12 #include <linux/slab.h> ··· 37 if (ret) 38 return ret; 39 40 spin_lock_irqsave(gate->lock, flags); 41 /* 42 * release the sw reset for peripherals associated with ··· 50 writel(val, gate->reg); 51 52 spin_unlock_irqrestore(gate->lock, flags); 53 54 return 0; 55 }
··· 7 8 #include <linux/bits.h> 9 #include <linux/clk-provider.h> 10 + #include <linux/delay.h> 11 #include <linux/err.h> 12 #include <linux/io.h> 13 #include <linux/slab.h> ··· 36 if (ret) 37 return ret; 38 39 + /* Make sure the IP's clock is ready before release reset */ 40 + udelay(1); 41 + 42 spin_lock_irqsave(gate->lock, flags); 43 /* 44 * release the sw reset for peripherals associated with ··· 46 writel(val, gate->reg); 47 48 spin_unlock_irqrestore(gate->lock, flags); 49 + 50 + /* 51 + * Read back the register to make sure the previous write has been 52 + * done in the target HW register. For IP like GPU, after deassert 53 + * the reset, need to wait for a while to make sure the sync reset 54 + * is done 55 + */ 56 + readl(gate->reg); 57 + udelay(1); 58 59 return 0; 60 }
+4 -35
drivers/clk/imx/clk-imx8mp-audiomix.c
··· 230 231 #if IS_ENABLED(CONFIG_RESET_CONTROLLER) 232 233 - static void clk_imx8mp_audiomix_reset_unregister_adev(void *_adev) 234 - { 235 - struct auxiliary_device *adev = _adev; 236 - 237 - auxiliary_device_delete(adev); 238 - auxiliary_device_uninit(adev); 239 - } 240 - 241 - static void clk_imx8mp_audiomix_reset_adev_release(struct device *dev) 242 - { 243 - struct auxiliary_device *adev = to_auxiliary_dev(dev); 244 - 245 - kfree(adev); 246 - } 247 - 248 static int clk_imx8mp_audiomix_reset_controller_register(struct device *dev, 249 struct clk_imx8mp_audiomix_priv *priv) 250 { 251 - struct auxiliary_device *adev __free(kfree) = NULL; 252 - int ret; 253 254 if (!of_property_present(dev->of_node, "#reset-cells")) 255 return 0; 256 257 - adev = kzalloc(sizeof(*adev), GFP_KERNEL); 258 if (!adev) 259 - return -ENOMEM; 260 261 - adev->name = "reset"; 262 - adev->dev.parent = dev; 263 - adev->dev.release = clk_imx8mp_audiomix_reset_adev_release; 264 - 265 - ret = auxiliary_device_init(adev); 266 - if (ret) 267 - return ret; 268 - 269 - ret = auxiliary_device_add(adev); 270 - if (ret) { 271 - auxiliary_device_uninit(adev); 272 - return ret; 273 - } 274 - 275 - return devm_add_action_or_reset(dev, clk_imx8mp_audiomix_reset_unregister_adev, 276 - no_free_ptr(adev)); 277 } 278 279 #else /* !CONFIG_RESET_CONTROLLER */
··· 230 231 #if IS_ENABLED(CONFIG_RESET_CONTROLLER) 232 233 static int clk_imx8mp_audiomix_reset_controller_register(struct device *dev, 234 struct clk_imx8mp_audiomix_priv *priv) 235 { 236 + struct auxiliary_device *adev; 237 238 if (!of_property_present(dev->of_node, "#reset-cells")) 239 return 0; 240 241 + adev = devm_auxiliary_device_create(dev, "reset", NULL); 242 if (!adev) 243 + return -ENODEV; 244 245 + return 0; 246 } 247 248 #else /* !CONFIG_RESET_CONTROLLER */
+156
drivers/clk/imx/clk-imx8ulp-sim-lpav.c
···
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * Copyright 2025 NXP 4 + */ 5 + 6 + #include <dt-bindings/clock/imx8ulp-clock.h> 7 + 8 + #include <linux/auxiliary_bus.h> 9 + #include <linux/clk-provider.h> 10 + #include <linux/module.h> 11 + #include <linux/of.h> 12 + #include <linux/of_platform.h> 13 + #include <linux/platform_device.h> 14 + #include <linux/regmap.h> 15 + #include <linux/slab.h> 16 + 17 + #define SYSCTRL0 0x8 18 + 19 + #define IMX8ULP_HIFI_CLK_GATE(gname, cname, pname, bidx) \ 20 + { \ 21 + .name = gname "_cg", \ 22 + .id = IMX8ULP_CLK_SIM_LPAV_HIFI_##cname, \ 23 + .parent = { .fw_name = pname }, \ 24 + .bit = bidx, \ 25 + } 26 + 27 + struct clk_imx8ulp_sim_lpav_data { 28 + spinlock_t lock; /* shared by MUX, clock gate and reset */ 29 + unsigned long flags; /* for spinlock usage */ 30 + struct clk_hw_onecell_data clk_data; /* keep last */ 31 + }; 32 + 33 + struct clk_imx8ulp_sim_lpav_gate { 34 + const char *name; 35 + int id; 36 + const struct clk_parent_data parent; 37 + u8 bit; 38 + }; 39 + 40 + static struct clk_imx8ulp_sim_lpav_gate gates[] = { 41 + IMX8ULP_HIFI_CLK_GATE("hifi_core", CORE, "core", 17), 42 + IMX8ULP_HIFI_CLK_GATE("hifi_pbclk", PBCLK, "bus", 18), 43 + IMX8ULP_HIFI_CLK_GATE("hifi_plat", PLAT, "plat", 19) 44 + }; 45 + 46 + static void clk_imx8ulp_sim_lpav_lock(void *arg) __acquires(&data->lock) 47 + { 48 + struct clk_imx8ulp_sim_lpav_data *data = dev_get_drvdata(arg); 49 + 50 + spin_lock_irqsave(&data->lock, data->flags); 51 + } 52 + 53 + static void clk_imx8ulp_sim_lpav_unlock(void *arg) __releases(&data->lock) 54 + { 55 + struct clk_imx8ulp_sim_lpav_data *data = dev_get_drvdata(arg); 56 + 57 + spin_unlock_irqrestore(&data->lock, data->flags); 58 + } 59 + 60 + static int clk_imx8ulp_sim_lpav_probe(struct platform_device *pdev) 61 + { 62 + const struct regmap_config regmap_config = { 63 + .reg_bits = 32, 64 + .val_bits = 32, 65 + .reg_stride = 4, 66 + .lock = clk_imx8ulp_sim_lpav_lock, 67 + .unlock = clk_imx8ulp_sim_lpav_unlock, 68 + .lock_arg = &pdev->dev, 69 + }; 70 + struct clk_imx8ulp_sim_lpav_data *data; 71 + struct auxiliary_device *adev; 72 + struct regmap *regmap; 73 + void __iomem *base; 74 + struct clk_hw *hw; 75 + int i, ret; 76 + 77 + data = devm_kzalloc(&pdev->dev, 78 + struct_size(data, clk_data.hws, ARRAY_SIZE(gates)), 79 + GFP_KERNEL); 80 + if (!data) 81 + return -ENOMEM; 82 + 83 + dev_set_drvdata(&pdev->dev, data); 84 + 85 + /* 86 + * this lock is used directly by the clock gate and indirectly 87 + * by the reset and mux controller via the regmap API 88 + */ 89 + spin_lock_init(&data->lock); 90 + 91 + base = devm_platform_ioremap_resource(pdev, 0); 92 + if (IS_ERR(base)) 93 + return dev_err_probe(&pdev->dev, PTR_ERR(base), 94 + "failed to ioremap base\n"); 95 + /* 96 + * although the clock gate doesn't use the regmap API to modify the 97 + * registers, we still need the regmap because of the reset auxiliary 98 + * driver and the MUX drivers, which use the parent device's regmap 99 + */ 100 + regmap = devm_regmap_init_mmio(&pdev->dev, base, &regmap_config); 101 + if (IS_ERR(regmap)) 102 + return dev_err_probe(&pdev->dev, PTR_ERR(regmap), 103 + "failed to initialize regmap\n"); 104 + 105 + data->clk_data.num = ARRAY_SIZE(gates); 106 + 107 + for (i = 0; i < ARRAY_SIZE(gates); i++) { 108 + hw = devm_clk_hw_register_gate_parent_data(&pdev->dev, 109 + gates[i].name, 110 + &gates[i].parent, 111 + CLK_SET_RATE_PARENT, 112 + base + SYSCTRL0, 113 + gates[i].bit, 114 + 0x0, &data->lock); 115 + if (IS_ERR(hw)) 116 + return dev_err_probe(&pdev->dev, PTR_ERR(hw), 117 + "failed to register %s gate\n", 118 + gates[i].name); 119 + 120 + data->clk_data.hws[i] = hw; 121 + } 122 + 123 + adev = devm_auxiliary_device_create(&pdev->dev, "reset", NULL); 124 + if (!adev) 125 + return dev_err_probe(&pdev->dev, -ENODEV, 126 + "failed to register aux reset\n"); 127 + 128 + ret = devm_of_clk_add_hw_provider(&pdev->dev, 129 + of_clk_hw_onecell_get, 130 + &data->clk_data); 131 + if (ret) 132 + return dev_err_probe(&pdev->dev, ret, 133 + "failed to register clk hw provider\n"); 134 + 135 + /* used to probe MUX child device */ 136 + return devm_of_platform_populate(&pdev->dev); 137 + } 138 + 139 + static const struct of_device_id clk_imx8ulp_sim_lpav_of_match[] = { 140 + { .compatible = "fsl,imx8ulp-sim-lpav" }, 141 + { } 142 + }; 143 + MODULE_DEVICE_TABLE(of, clk_imx8ulp_sim_lpav_of_match); 144 + 145 + static struct platform_driver clk_imx8ulp_sim_lpav_driver = { 146 + .probe = clk_imx8ulp_sim_lpav_probe, 147 + .driver = { 148 + .name = "clk-imx8ulp-sim-lpav", 149 + .of_match_table = clk_imx8ulp_sim_lpav_of_match, 150 + }, 151 + }; 152 + module_platform_driver(clk_imx8ulp_sim_lpav_driver); 153 + 154 + MODULE_LICENSE("GPL"); 155 + MODULE_DESCRIPTION("i.MX8ULP LPAV System Integration Module (SIM) clock driver"); 156 + MODULE_AUTHOR("Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>");
+2 -2
drivers/clk/keystone/sci-clk.c
··· 496 static int _cmp_sci_clk_list(void *priv, const struct list_head *a, 497 const struct list_head *b) 498 { 499 - struct sci_clk *ca = container_of(a, struct sci_clk, node); 500 - struct sci_clk *cb = container_of(b, struct sci_clk, node); 501 502 return _cmp_sci_clk(ca, &cb); 503 }
··· 496 static int _cmp_sci_clk_list(void *priv, const struct list_head *a, 497 const struct list_head *b) 498 { 499 + const struct sci_clk *ca = container_of(a, struct sci_clk, node); 500 + const struct sci_clk *cb = container_of(b, struct sci_clk, node); 501 502 return _cmp_sci_clk(ca, &cb); 503 }
+1 -1
drivers/clk/keystone/syscon-clk.c
··· 129 if (IS_ERR(base)) 130 return PTR_ERR(base); 131 132 - regmap = regmap_init_mmio(dev, base, &ti_syscon_regmap_cfg); 133 if (IS_ERR(regmap)) 134 return dev_err_probe(dev, PTR_ERR(regmap), 135 "failed to get regmap\n");
··· 129 if (IS_ERR(base)) 130 return PTR_ERR(base); 131 132 + regmap = devm_regmap_init_mmio(dev, base, &ti_syscon_regmap_cfg); 133 if (IS_ERR(regmap)) 134 return dev_err_probe(dev, PTR_ERR(regmap), 135 "failed to get regmap\n");
+2
drivers/clk/microchip/Kconfig
··· 7 bool "Clk driver for PolarFire SoC" 8 depends on ARCH_MICROCHIP_POLARFIRE || COMPILE_TEST 9 default ARCH_MICROCHIP_POLARFIRE 10 select AUXILIARY_BUS 11 help 12 Supports Clock Configuration for PolarFire SoC
··· 7 bool "Clk driver for PolarFire SoC" 8 depends on ARCH_MICROCHIP_POLARFIRE || COMPILE_TEST 9 default ARCH_MICROCHIP_POLARFIRE 10 + depends on MFD_SYSCON 11 select AUXILIARY_BUS 12 + select REGMAP_MMIO 13 help 14 Supports Clock Configuration for PolarFire SoC
+184 -43
drivers/clk/microchip/clk-mpfs.c
··· 4 * 5 * Copyright (C) 2020-2022 Microchip Technology Inc. All rights reserved. 6 */ 7 #include <linux/clk-provider.h> 8 #include <linux/io.h> 9 #include <linux/module.h> 10 #include <linux/platform_device.h> 11 #include <dt-bindings/clock/microchip,mpfs-clock.h> 12 #include <soc/microchip/mpfs.h> 13 ··· 33 #define MSSPLL_POSTDIV_WIDTH 0x07u 34 #define MSSPLL_FIXED_DIV 4u 35 36 /* 37 * This clock ID is defined here, rather than the binding headers, as it is an 38 * internal clock only, and therefore has no consumers in other peripheral ··· 50 51 struct mpfs_clock_data { 52 struct device *dev; 53 void __iomem *base; 54 void __iomem *msspll_base; 55 struct clk_hw_onecell_data hw_data; ··· 79 80 #define to_mpfs_msspll_out_clk(_hw) container_of(_hw, struct mpfs_msspll_out_hw_clock, hw) 81 82 struct mpfs_cfg_hw_clock { 83 - struct clk_divider cfg; 84 - struct clk_init_data init; 85 unsigned int id; 86 - u32 reg_offset; 87 }; 88 89 struct mpfs_periph_hw_clock { 90 - struct clk_gate periph; 91 unsigned int id; 92 }; 93 94 /* 95 - * mpfs_clk_lock prevents anything else from writing to the 96 - * mpfs clk block while a software locked register is being written. 97 */ 98 static DEFINE_SPINLOCK(mpfs_clk_lock); 99 ··· 249 /* 250 * "CFG" clocks 251 */ 252 253 - #define CLK_CFG(_id, _name, _parent, _shift, _width, _table, _flags, _offset) { \ 254 - .id = _id, \ 255 - .cfg.shift = _shift, \ 256 - .cfg.width = _width, \ 257 - .cfg.table = _table, \ 258 - .reg_offset = _offset, \ 259 - .cfg.flags = _flags, \ 260 - .cfg.hw.init = CLK_HW_INIT(_name, _parent, &clk_divider_ops, 0), \ 261 - .cfg.lock = &mpfs_clk_lock, \ 262 } 263 264 #define CLK_CPU_OFFSET 0u ··· 323 .cfg.shift = 0, 324 .cfg.width = 12, 325 .cfg.table = mpfs_div_rtcref_table, 326 - .reg_offset = REG_RTC_CLOCK_CR, 327 .cfg.flags = CLK_DIVIDER_ONE_BASED, 328 - .cfg.hw.init = 329 - CLK_HW_INIT_PARENTS_DATA("clk_rtcref", mpfs_ext_ref, &clk_divider_ops, 0), 330 } 331 }; 332 ··· 339 for (i = 0; i < num_clks; i++) { 340 struct mpfs_cfg_hw_clock *cfg_hw = &cfg_hws[i]; 341 342 - cfg_hw->cfg.reg = data->base + cfg_hw->reg_offset; 343 - ret = devm_clk_hw_register(dev, &cfg_hw->cfg.hw); 344 if (ret) 345 return dev_err_probe(dev, ret, "failed to register clock id: %d\n", 346 cfg_hw->id); 347 348 id = cfg_hw->id; 349 - data->hw_data.hws[id] = &cfg_hw->cfg.hw; 350 } 351 352 return 0; ··· 356 * peripheral clocks - devices connected to axi or ahb buses. 357 */ 358 359 - #define CLK_PERIPH(_id, _name, _parent, _shift, _flags) { \ 360 - .id = _id, \ 361 - .periph.bit_idx = _shift, \ 362 - .periph.hw.init = CLK_HW_INIT_HW(_name, _parent, &clk_gate_ops, \ 363 - _flags), \ 364 - .periph.lock = &mpfs_clk_lock, \ 365 } 366 367 - #define PARENT_CLK(PARENT) (&mpfs_cfg_clks[CLK_##PARENT##_OFFSET].cfg.hw) 368 369 /* 370 * Critical clocks: ··· 456 for (i = 0; i < num_clks; i++) { 457 struct mpfs_periph_hw_clock *periph_hw = &periph_hws[i]; 458 459 - periph_hw->periph.reg = data->base + REG_SUBBLK_CLOCK_CR; 460 - ret = devm_clk_hw_register(dev, &periph_hw->periph.hw); 461 if (ret) 462 return dev_err_probe(dev, ret, "failed to register clock id: %d\n", 463 periph_hw->id); 464 465 id = periph_hws[i].id; 466 - data->hw_data.hws[id] = &periph_hw->periph.hw; 467 } 468 469 return 0; 470 } 471 472 static int mpfs_clk_probe(struct platform_device *pdev) ··· 520 if (!clk_data) 521 return -ENOMEM; 522 523 - clk_data->base = devm_platform_ioremap_resource(pdev, 0); 524 - if (IS_ERR(clk_data->base)) 525 - return PTR_ERR(clk_data->base); 526 - 527 - clk_data->msspll_base = devm_platform_ioremap_resource(pdev, 1); 528 - if (IS_ERR(clk_data->msspll_base)) 529 - return PTR_ERR(clk_data->msspll_base); 530 531 clk_data->hw_data.num = num_clks; 532 clk_data->dev = dev; ··· 551 if (ret) 552 return ret; 553 554 - ret = devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, &clk_data->hw_data); 555 - if (ret) 556 - return ret; 557 - 558 - return mpfs_reset_controller_register(dev, clk_data->base + REG_SUBBLK_RESET_CR); 559 } 560 561 static const struct of_device_id mpfs_clk_of_match_table[] = {
··· 4 * 5 * Copyright (C) 2020-2022 Microchip Technology Inc. All rights reserved. 6 */ 7 + #include <linux/cleanup.h> 8 #include <linux/clk-provider.h> 9 #include <linux/io.h> 10 + #include <linux/mfd/syscon.h> 11 #include <linux/module.h> 12 #include <linux/platform_device.h> 13 + #include <linux/regmap.h> 14 #include <dt-bindings/clock/microchip,mpfs-clock.h> 15 #include <soc/microchip/mpfs.h> 16 ··· 30 #define MSSPLL_POSTDIV_WIDTH 0x07u 31 #define MSSPLL_FIXED_DIV 4u 32 33 + static const struct regmap_config mpfs_clk_regmap_config = { 34 + .reg_bits = 32, 35 + .reg_stride = 4, 36 + .val_bits = 32, 37 + .val_format_endian = REGMAP_ENDIAN_LITTLE, 38 + .max_register = REG_SUBBLK_RESET_CR, 39 + }; 40 + 41 /* 42 * This clock ID is defined here, rather than the binding headers, as it is an 43 * internal clock only, and therefore has no consumers in other peripheral ··· 39 40 struct mpfs_clock_data { 41 struct device *dev; 42 + struct regmap *regmap; 43 void __iomem *base; 44 void __iomem *msspll_base; 45 struct clk_hw_onecell_data hw_data; ··· 67 68 #define to_mpfs_msspll_out_clk(_hw) container_of(_hw, struct mpfs_msspll_out_hw_clock, hw) 69 70 + struct mpfs_cfg_clock { 71 + struct regmap *map; 72 + const struct clk_div_table *table; 73 + u8 map_offset; 74 + u8 shift; 75 + u8 width; 76 + u8 flags; 77 + }; 78 + 79 struct mpfs_cfg_hw_clock { 80 + struct clk_hw hw; 81 + struct mpfs_cfg_clock cfg; 82 unsigned int id; 83 + }; 84 + 85 + #define to_mpfs_cfg_clk(_hw) container_of(_hw, struct mpfs_cfg_hw_clock, hw) 86 + 87 + struct mpfs_periph_clock { 88 + struct regmap *map; 89 + u8 map_offset; 90 + u8 shift; 91 }; 92 93 struct mpfs_periph_hw_clock { 94 + struct clk_hw hw; 95 + struct mpfs_periph_clock periph; 96 unsigned int id; 97 }; 98 99 + #define to_mpfs_periph_clk(_hw) container_of(_hw, struct mpfs_periph_hw_clock, hw) 100 + 101 /* 102 + * Protects MSSPLL outputs, since there's two to a register 103 */ 104 static DEFINE_SPINLOCK(mpfs_clk_lock); 105 ··· 219 /* 220 * "CFG" clocks 221 */ 222 + static unsigned long mpfs_cfg_clk_recalc_rate(struct clk_hw *hw, unsigned long prate) 223 + { 224 + struct mpfs_cfg_hw_clock *cfg_hw = to_mpfs_cfg_clk(hw); 225 + struct mpfs_cfg_clock *cfg = &cfg_hw->cfg; 226 + u32 val; 227 228 + regmap_read(cfg->map, cfg->map_offset, &val); 229 + val >>= cfg->shift; 230 + val &= clk_div_mask(cfg->width); 231 + 232 + return divider_recalc_rate(hw, prate, val, cfg->table, cfg->flags, cfg->width); 233 + } 234 + 235 + static int mpfs_cfg_clk_determine_rate(struct clk_hw *hw, struct clk_rate_request *req) 236 + { 237 + struct mpfs_cfg_hw_clock *cfg_hw = to_mpfs_cfg_clk(hw); 238 + struct mpfs_cfg_clock *cfg = &cfg_hw->cfg; 239 + 240 + return divider_determine_rate(hw, req, cfg->table, cfg->width, 0); 241 + } 242 + 243 + static int mpfs_cfg_clk_set_rate(struct clk_hw *hw, unsigned long rate, unsigned long prate) 244 + { 245 + struct mpfs_cfg_hw_clock *cfg_hw = to_mpfs_cfg_clk(hw); 246 + struct mpfs_cfg_clock *cfg = &cfg_hw->cfg; 247 + int divider_setting; 248 + u32 val; 249 + u32 mask; 250 + 251 + divider_setting = divider_get_val(rate, prate, cfg->table, cfg->width, 0); 252 + 253 + if (divider_setting < 0) 254 + return divider_setting; 255 + 256 + mask = clk_div_mask(cfg->width) << cfg->shift; 257 + val = divider_setting << cfg->shift; 258 + regmap_update_bits(cfg->map, cfg->map_offset, val, mask); 259 + 260 + return 0; 261 + } 262 + 263 + static const struct clk_ops mpfs_clk_cfg_ops = { 264 + .recalc_rate = mpfs_cfg_clk_recalc_rate, 265 + .determine_rate = mpfs_cfg_clk_determine_rate, 266 + .set_rate = mpfs_cfg_clk_set_rate, 267 + }; 268 + 269 + #define CLK_CFG(_id, _name, _parent, _shift, _width, _table, _flags, _offset) { \ 270 + .id = _id, \ 271 + .cfg.shift = _shift, \ 272 + .cfg.width = _width, \ 273 + .cfg.table = _table, \ 274 + .cfg.map_offset = _offset, \ 275 + .cfg.flags = _flags, \ 276 + .hw.init = CLK_HW_INIT(_name, _parent, &mpfs_clk_cfg_ops, 0), \ 277 } 278 279 #define CLK_CPU_OFFSET 0u ··· 248 .cfg.shift = 0, 249 .cfg.width = 12, 250 .cfg.table = mpfs_div_rtcref_table, 251 + .cfg.map_offset = REG_RTC_CLOCK_CR, 252 .cfg.flags = CLK_DIVIDER_ONE_BASED, 253 + .hw.init = 254 + CLK_HW_INIT_PARENTS_DATA("clk_rtcref", mpfs_ext_ref, &mpfs_clk_cfg_ops, 0), 255 } 256 }; 257 ··· 264 for (i = 0; i < num_clks; i++) { 265 struct mpfs_cfg_hw_clock *cfg_hw = &cfg_hws[i]; 266 267 + cfg_hw->cfg.map = data->regmap; 268 + ret = devm_clk_hw_register(dev, &cfg_hw->hw); 269 if (ret) 270 return dev_err_probe(dev, ret, "failed to register clock id: %d\n", 271 cfg_hw->id); 272 273 id = cfg_hw->id; 274 + data->hw_data.hws[id] = &cfg_hw->hw; 275 } 276 277 return 0; ··· 281 * peripheral clocks - devices connected to axi or ahb buses. 282 */ 283 284 + static int mpfs_periph_clk_enable(struct clk_hw *hw) 285 + { 286 + struct mpfs_periph_hw_clock *periph_hw = to_mpfs_periph_clk(hw); 287 + struct mpfs_periph_clock *periph = &periph_hw->periph; 288 + 289 + regmap_update_bits(periph->map, periph->map_offset, 290 + BIT(periph->shift), BIT(periph->shift)); 291 + 292 + return 0; 293 } 294 295 + static void mpfs_periph_clk_disable(struct clk_hw *hw) 296 + { 297 + struct mpfs_periph_hw_clock *periph_hw = to_mpfs_periph_clk(hw); 298 + struct mpfs_periph_clock *periph = &periph_hw->periph; 299 + 300 + regmap_update_bits(periph->map, periph->map_offset, BIT(periph->shift), 0); 301 + } 302 + 303 + static int mpfs_periph_clk_is_enabled(struct clk_hw *hw) 304 + { 305 + struct mpfs_periph_hw_clock *periph_hw = to_mpfs_periph_clk(hw); 306 + struct mpfs_periph_clock *periph = &periph_hw->periph; 307 + u32 val; 308 + 309 + regmap_read(periph->map, periph->map_offset, &val); 310 + 311 + return !!(val & BIT(periph->shift)); 312 + } 313 + 314 + static const struct clk_ops mpfs_periph_clk_ops = { 315 + .enable = mpfs_periph_clk_enable, 316 + .disable = mpfs_periph_clk_disable, 317 + .is_enabled = mpfs_periph_clk_is_enabled, 318 + }; 319 + 320 + #define CLK_PERIPH(_id, _name, _parent, _shift, _flags) { \ 321 + .id = _id, \ 322 + .periph.map_offset = REG_SUBBLK_CLOCK_CR, \ 323 + .periph.shift = _shift, \ 324 + .hw.init = CLK_HW_INIT_HW(_name, _parent, &mpfs_periph_clk_ops, _flags), \ 325 + } 326 + 327 + #define PARENT_CLK(PARENT) (&mpfs_cfg_clks[CLK_##PARENT##_OFFSET].hw) 328 329 /* 330 * Critical clocks: ··· 346 for (i = 0; i < num_clks; i++) { 347 struct mpfs_periph_hw_clock *periph_hw = &periph_hws[i]; 348 349 + periph_hw->periph.map = data->regmap; 350 + ret = devm_clk_hw_register(dev, &periph_hw->hw); 351 if (ret) 352 return dev_err_probe(dev, ret, "failed to register clock id: %d\n", 353 periph_hw->id); 354 355 id = periph_hws[i].id; 356 + data->hw_data.hws[id] = &periph_hw->hw; 357 } 358 359 return 0; 360 + } 361 + 362 + static inline int mpfs_clk_syscon_probe(struct mpfs_clock_data *clk_data, 363 + struct platform_device *pdev) 364 + { 365 + clk_data->regmap = syscon_regmap_lookup_by_compatible("microchip,mpfs-mss-top-sysreg"); 366 + if (IS_ERR(clk_data->regmap)) 367 + return PTR_ERR(clk_data->regmap); 368 + 369 + clk_data->msspll_base = devm_platform_ioremap_resource(pdev, 0); 370 + if (IS_ERR(clk_data->msspll_base)) 371 + return PTR_ERR(clk_data->msspll_base); 372 + 373 + return 0; 374 + } 375 + 376 + static inline int mpfs_clk_old_format_probe(struct mpfs_clock_data *clk_data, 377 + struct platform_device *pdev) 378 + { 379 + struct device *dev = &pdev->dev; 380 + 381 + dev_warn(&pdev->dev, "falling back to old devicetree format"); 382 + 383 + clk_data->base = devm_platform_ioremap_resource(pdev, 0); 384 + if (IS_ERR(clk_data->base)) 385 + return PTR_ERR(clk_data->base); 386 + 387 + clk_data->msspll_base = devm_platform_ioremap_resource(pdev, 1); 388 + if (IS_ERR(clk_data->msspll_base)) 389 + return PTR_ERR(clk_data->msspll_base); 390 + 391 + clk_data->regmap = devm_regmap_init_mmio(dev, clk_data->base, &mpfs_clk_regmap_config); 392 + if (IS_ERR(clk_data->regmap)) 393 + return PTR_ERR(clk_data->regmap); 394 + 395 + return mpfs_reset_controller_register(dev, clk_data->regmap); 396 } 397 398 static int mpfs_clk_probe(struct platform_device *pdev) ··· 374 if (!clk_data) 375 return -ENOMEM; 376 377 + ret = mpfs_clk_syscon_probe(clk_data, pdev); 378 + if (ret) { 379 + ret = mpfs_clk_old_format_probe(clk_data, pdev); 380 + if (ret) 381 + return ret; 382 + } 383 384 clk_data->hw_data.num = num_clks; 385 clk_data->dev = dev; ··· 406 if (ret) 407 return ret; 408 409 + return devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, &clk_data->hw_data); 410 } 411 412 static const struct of_device_id mpfs_clk_of_match_table[] = {
+29 -3
drivers/clk/qcom/Kconfig
··· 215 devices. 216 217 config IPQ_APSS_5424 218 - tristate "IPQ APSS Clock Controller" 219 select IPQ_APSS_PLL 220 default y if IPQ_GCC_5424 221 help 222 - Support for APSS Clock controller on Qualcom IPQ5424 platform. 223 Say Y if you want to support CPU frequency scaling on ipq based 224 devices. 225 226 config IPQ_APSS_6018 227 - tristate "IPQ APSS Clock Controller" 228 select IPQ_APSS_PLL 229 depends on QCOM_APCS_IPC || COMPILE_TEST 230 depends on QCOM_SMEM ··· 316 Say Y if you want to use peripheral devices such as UART, SPI, 317 i2c, USB, SD/eMMC, etc. Select this for the root clock 318 of ipq9574. 319 320 config IPQ_NSSCC_9574 321 tristate "IPQ9574 NSS Clock Controller" ··· 542 543 config QCS_DISPCC_615 544 tristate "QCS615 Display Clock Controller" 545 select QCS_GCC_615 546 help 547 Support for the display clock controller on Qualcomm Technologies, Inc ··· 598 599 config QCS_GPUCC_615 600 tristate "QCS615 Graphics clock controller" 601 select QCS_GCC_615 602 help 603 Support for the graphics clock controller on QCS615 devices. ··· 607 608 config QCS_VIDEOCC_615 609 tristate "QCS615 Video Clock Controller" 610 select QCS_GCC_615 611 help 612 Support for the video clock controller on QCS615 devices. ··· 1462 1463 config SM_VIDEOCC_6350 1464 tristate "SM6350 Video Clock Controller" 1465 select SM_GCC_6350 1466 select QCOM_GDSC 1467 help ··· 1528 help 1529 Support for the video clock controller on Qualcomm Technologies, Inc. 1530 SM8550 or SM8650 or X1E80100 devices. 1531 Say Y if you want to support video devices and functionality such as 1532 video encode/decode. 1533
··· 215 devices. 216 217 config IPQ_APSS_5424 218 + tristate "IPQ5424 APSS Clock Controller" 219 select IPQ_APSS_PLL 220 default y if IPQ_GCC_5424 221 help 222 + Support for APSS Clock controller on Qualcomm IPQ5424 platform. 223 Say Y if you want to support CPU frequency scaling on ipq based 224 devices. 225 226 config IPQ_APSS_6018 227 + tristate "IPQ6018 APSS Clock Controller" 228 select IPQ_APSS_PLL 229 depends on QCOM_APCS_IPC || COMPILE_TEST 230 depends on QCOM_SMEM ··· 316 Say Y if you want to use peripheral devices such as UART, SPI, 317 i2c, USB, SD/eMMC, etc. Select this for the root clock 318 of ipq9574. 319 + 320 + config IPQ_NSSCC_5424 321 + tristate "IPQ5424 NSS Clock Controller" 322 + depends on ARM64 || COMPILE_TEST 323 + depends on IPQ_GCC_5424 324 + help 325 + Support for NSS clock controller on ipq5424 devices. 326 + NSSCC receives the clock sources from GCC, CMN PLL and UNIPHY (PCS). 327 + It in turn supplies the clocks and resets to the networking hardware. 328 + Say Y or M if you want to enable networking function on the 329 + IPQ5424 devices. 330 331 config IPQ_NSSCC_9574 332 tristate "IPQ9574 NSS Clock Controller" ··· 531 532 config QCS_DISPCC_615 533 tristate "QCS615 Display Clock Controller" 534 + depends on ARM64 || COMPILE_TEST 535 select QCS_GCC_615 536 help 537 Support for the display clock controller on Qualcomm Technologies, Inc ··· 586 587 config QCS_GPUCC_615 588 tristate "QCS615 Graphics clock controller" 589 + depends on ARM64 || COMPILE_TEST 590 select QCS_GCC_615 591 help 592 Support for the graphics clock controller on QCS615 devices. ··· 594 595 config QCS_VIDEOCC_615 596 tristate "QCS615 Video Clock Controller" 597 + depends on ARM64 || COMPILE_TEST 598 select QCS_GCC_615 599 help 600 Support for the video clock controller on QCS615 devices. ··· 1448 1449 config SM_VIDEOCC_6350 1450 tristate "SM6350 Video Clock Controller" 1451 + depends on ARM64 || COMPILE_TEST 1452 select SM_GCC_6350 1453 select QCOM_GDSC 1454 help ··· 1513 help 1514 Support for the video clock controller on Qualcomm Technologies, Inc. 1515 SM8550 or SM8650 or X1E80100 devices. 1516 + Say Y if you want to support video devices and functionality such as 1517 + video encode/decode. 1518 + 1519 + config SM_VIDEOCC_8750 1520 + tristate "SM8750 Video Clock Controller" 1521 + depends on ARM64 || COMPILE_TEST 1522 + select SM_GCC_8750 1523 + select QCOM_GDSC 1524 + help 1525 + Support for the video clock controller on Qualcomm Technologies, Inc. 1526 + SM8750 devices. 1527 Say Y if you want to support video devices and functionality such as 1528 video encode/decode. 1529
+2
drivers/clk/qcom/Makefile
··· 43 obj-$(CONFIG_IPQ_GCC_806X) += gcc-ipq806x.o 44 obj-$(CONFIG_IPQ_GCC_8074) += gcc-ipq8074.o 45 obj-$(CONFIG_IPQ_GCC_9574) += gcc-ipq9574.o 46 obj-$(CONFIG_IPQ_NSSCC_9574) += nsscc-ipq9574.o 47 obj-$(CONFIG_IPQ_LCC_806X) += lcc-ipq806x.o 48 obj-$(CONFIG_IPQ_NSSCC_QCA8K) += nsscc-qca8k.o ··· 185 obj-$(CONFIG_SM_VIDEOCC_8350) += videocc-sm8350.o 186 obj-$(CONFIG_SM_VIDEOCC_8450) += videocc-sm8450.o 187 obj-$(CONFIG_SM_VIDEOCC_8550) += videocc-sm8550.o 188 obj-$(CONFIG_SM_VIDEOCC_MILOS) += videocc-milos.o 189 obj-$(CONFIG_SPMI_PMIC_CLKDIV) += clk-spmi-pmic-div.o 190 obj-$(CONFIG_KPSS_XCC) += kpss-xcc.o
··· 43 obj-$(CONFIG_IPQ_GCC_806X) += gcc-ipq806x.o 44 obj-$(CONFIG_IPQ_GCC_8074) += gcc-ipq8074.o 45 obj-$(CONFIG_IPQ_GCC_9574) += gcc-ipq9574.o 46 + obj-$(CONFIG_IPQ_NSSCC_5424) += nsscc-ipq5424.o 47 obj-$(CONFIG_IPQ_NSSCC_9574) += nsscc-ipq9574.o 48 obj-$(CONFIG_IPQ_LCC_806X) += lcc-ipq806x.o 49 obj-$(CONFIG_IPQ_NSSCC_QCA8K) += nsscc-qca8k.o ··· 184 obj-$(CONFIG_SM_VIDEOCC_8350) += videocc-sm8350.o 185 obj-$(CONFIG_SM_VIDEOCC_8450) += videocc-sm8450.o 186 obj-$(CONFIG_SM_VIDEOCC_8550) += videocc-sm8550.o 187 + obj-$(CONFIG_SM_VIDEOCC_8750) += videocc-sm8750.o 188 obj-$(CONFIG_SM_VIDEOCC_MILOS) += videocc-milos.o 189 obj-$(CONFIG_SPMI_PMIC_CLKDIV) += clk-spmi-pmic-div.o 190 obj-$(CONFIG_KPSS_XCC) += kpss-xcc.o
-7
drivers/clk/qcom/apss-ipq5424.c
··· 35 P_L3_PLL, 36 }; 37 38 - struct apss_clk { 39 - struct notifier_block cpu_clk_notifier; 40 - struct clk_hw *hw; 41 - struct device *dev; 42 - struct clk *l3_clk; 43 - }; 44 - 45 static const struct alpha_pll_config apss_pll_config = { 46 .l = 0x3b, 47 .config_ctl_val = 0x08200920,
··· 35 P_L3_PLL, 36 }; 37 38 static const struct alpha_pll_config apss_pll_config = { 39 .l = 0x3b, 40 .config_ctl_val = 0x08200920,
+3
drivers/clk/qcom/camcc-sdm845.c
··· 1543 .name = "bps_gdsc", 1544 }, 1545 .flags = HW_CTRL | POLL_CFG_GDSCR, 1546 .pwrsts = PWRSTS_OFF_ON, 1547 }; 1548 ··· 1553 .name = "ipe_0_gdsc", 1554 }, 1555 .flags = HW_CTRL | POLL_CFG_GDSCR, 1556 .pwrsts = PWRSTS_OFF_ON, 1557 }; 1558 ··· 1563 .name = "ipe_1_gdsc", 1564 }, 1565 .flags = HW_CTRL | POLL_CFG_GDSCR, 1566 .pwrsts = PWRSTS_OFF_ON, 1567 }; 1568
··· 1543 .name = "bps_gdsc", 1544 }, 1545 .flags = HW_CTRL | POLL_CFG_GDSCR, 1546 + .parent = &titan_top_gdsc.pd, 1547 .pwrsts = PWRSTS_OFF_ON, 1548 }; 1549 ··· 1552 .name = "ipe_0_gdsc", 1553 }, 1554 .flags = HW_CTRL | POLL_CFG_GDSCR, 1555 + .parent = &titan_top_gdsc.pd, 1556 .pwrsts = PWRSTS_OFF_ON, 1557 }; 1558 ··· 1561 .name = "ipe_1_gdsc", 1562 }, 1563 .flags = HW_CTRL | POLL_CFG_GDSCR, 1564 + .parent = &titan_top_gdsc.pd, 1565 .pwrsts = PWRSTS_OFF_ON, 1566 }; 1567
+8 -5
drivers/clk/qcom/camcc-sm6350.c
··· 145 static const struct alpha_pll_config camcc_pll2_config = { 146 .l = 0x64, 147 .alpha = 0x0, 148 - .post_div_val = 0x3 << 8, 149 - .post_div_mask = 0x3 << 8, 150 - .aux_output_mask = BIT(1), 151 - .main_output_mask = BIT(0), 152 - .early_output_mask = BIT(3), 153 .config_ctl_val = 0x20000800, 154 .config_ctl_hi_val = 0x400003d2, 155 .test_ctl_val = 0x04000400, 156 .test_ctl_hi_val = 0x00004000, 157 }; 158 159 static struct clk_alpha_pll camcc_pll2 = { ··· 1689 }, 1690 }; 1691 1692 static struct gdsc bps_gdsc = { 1693 .gdscr = 0x6004, 1694 .en_rest_wait_val = 0x2, ··· 1700 .name = "bps_gdsc", 1701 }, 1702 .pwrsts = PWRSTS_OFF_ON, 1703 .flags = VOTABLE, 1704 }; 1705 ··· 1713 .name = "ipe_0_gdsc", 1714 }, 1715 .pwrsts = PWRSTS_OFF_ON, 1716 .flags = VOTABLE, 1717 }; 1718 ··· 1726 .name = "ife_0_gdsc", 1727 }, 1728 .pwrsts = PWRSTS_OFF_ON, 1729 }; 1730 1731 static struct gdsc ife_1_gdsc = { ··· 1738 .name = "ife_1_gdsc", 1739 }, 1740 .pwrsts = PWRSTS_OFF_ON, 1741 }; 1742 1743 static struct gdsc ife_2_gdsc = { ··· 1750 .name = "ife_2_gdsc", 1751 }, 1752 .pwrsts = PWRSTS_OFF_ON, 1753 }; 1754 1755 static struct gdsc titan_top_gdsc = {
··· 145 static const struct alpha_pll_config camcc_pll2_config = { 146 .l = 0x64, 147 .alpha = 0x0, 148 .config_ctl_val = 0x20000800, 149 .config_ctl_hi_val = 0x400003d2, 150 .test_ctl_val = 0x04000400, 151 .test_ctl_hi_val = 0x00004000, 152 + .user_ctl_val = 0x0000030b, 153 }; 154 155 static struct clk_alpha_pll camcc_pll2 = { ··· 1693 }, 1694 }; 1695 1696 + static struct gdsc titan_top_gdsc; 1697 + 1698 static struct gdsc bps_gdsc = { 1699 .gdscr = 0x6004, 1700 .en_rest_wait_val = 0x2, ··· 1702 .name = "bps_gdsc", 1703 }, 1704 .pwrsts = PWRSTS_OFF_ON, 1705 + .parent = &titan_top_gdsc.pd, 1706 .flags = VOTABLE, 1707 }; 1708 ··· 1714 .name = "ipe_0_gdsc", 1715 }, 1716 .pwrsts = PWRSTS_OFF_ON, 1717 + .parent = &titan_top_gdsc.pd, 1718 .flags = VOTABLE, 1719 }; 1720 ··· 1726 .name = "ife_0_gdsc", 1727 }, 1728 .pwrsts = PWRSTS_OFF_ON, 1729 + .parent = &titan_top_gdsc.pd, 1730 }; 1731 1732 static struct gdsc ife_1_gdsc = { ··· 1737 .name = "ife_1_gdsc", 1738 }, 1739 .pwrsts = PWRSTS_OFF_ON, 1740 + .parent = &titan_top_gdsc.pd, 1741 }; 1742 1743 static struct gdsc ife_2_gdsc = { ··· 1748 .name = "ife_2_gdsc", 1749 }, 1750 .pwrsts = PWRSTS_OFF_ON, 1751 + .parent = &titan_top_gdsc.pd, 1752 }; 1753 1754 static struct gdsc titan_top_gdsc = {
+5 -6
drivers/clk/qcom/camcc-sm7150.c
··· 139 /* 1920MHz configuration */ 140 static const struct alpha_pll_config camcc_pll2_config = { 141 .l = 0x64, 142 - .post_div_val = 0x3 << 8, 143 - .post_div_mask = 0x3 << 8, 144 - .early_output_mask = BIT(3), 145 - .aux_output_mask = BIT(1), 146 - .main_output_mask = BIT(0), 147 .config_ctl_hi_val = 0x400003d6, 148 .config_ctl_val = 0x20000954, 149 }; 150 151 static struct clk_alpha_pll camcc_pll2 = { ··· 1842 .name = "camcc_bps_gdsc", 1843 }, 1844 .flags = HW_CTRL | POLL_CFG_GDSCR, 1845 .pwrsts = PWRSTS_OFF_ON, 1846 }; 1847 ··· 1872 .name = "camcc_ipe_0_gdsc", 1873 }, 1874 .flags = HW_CTRL | POLL_CFG_GDSCR, 1875 .pwrsts = PWRSTS_OFF_ON, 1876 }; 1877 ··· 1882 .name = "camcc_ipe_1_gdsc", 1883 }, 1884 .flags = HW_CTRL | POLL_CFG_GDSCR, 1885 .pwrsts = PWRSTS_OFF_ON, 1886 }; 1887 ··· 1895 .pwrsts = PWRSTS_OFF_ON, 1896 }; 1897 1898 - struct clk_hw *camcc_sm7150_hws[] = { 1899 [CAMCC_PLL0_OUT_EVEN] = &camcc_pll0_out_even.hw, 1900 [CAMCC_PLL0_OUT_ODD] = &camcc_pll0_out_odd.hw, 1901 [CAMCC_PLL1_OUT_EVEN] = &camcc_pll1_out_even.hw,
··· 139 /* 1920MHz configuration */ 140 static const struct alpha_pll_config camcc_pll2_config = { 141 .l = 0x64, 142 .config_ctl_hi_val = 0x400003d6, 143 .config_ctl_val = 0x20000954, 144 + .user_ctl_val = 0x0000030b, 145 }; 146 147 static struct clk_alpha_pll camcc_pll2 = { ··· 1846 .name = "camcc_bps_gdsc", 1847 }, 1848 .flags = HW_CTRL | POLL_CFG_GDSCR, 1849 + .parent = &camcc_titan_top_gdsc.pd, 1850 .pwrsts = PWRSTS_OFF_ON, 1851 }; 1852 ··· 1875 .name = "camcc_ipe_0_gdsc", 1876 }, 1877 .flags = HW_CTRL | POLL_CFG_GDSCR, 1878 + .parent = &camcc_titan_top_gdsc.pd, 1879 .pwrsts = PWRSTS_OFF_ON, 1880 }; 1881 ··· 1884 .name = "camcc_ipe_1_gdsc", 1885 }, 1886 .flags = HW_CTRL | POLL_CFG_GDSCR, 1887 + .parent = &camcc_titan_top_gdsc.pd, 1888 .pwrsts = PWRSTS_OFF_ON, 1889 }; 1890 ··· 1896 .pwrsts = PWRSTS_OFF_ON, 1897 }; 1898 1899 + static struct clk_hw *camcc_sm7150_hws[] = { 1900 [CAMCC_PLL0_OUT_EVEN] = &camcc_pll0_out_even.hw, 1901 [CAMCC_PLL0_OUT_ODD] = &camcc_pll0_out_odd.hw, 1902 [CAMCC_PLL1_OUT_EVEN] = &camcc_pll1_out_even.hw,
+3
drivers/clk/qcom/camcc-sm8250.c
··· 2213 .name = "bps_gdsc", 2214 }, 2215 .flags = HW_CTRL | POLL_CFG_GDSCR, 2216 .pwrsts = PWRSTS_OFF_ON, 2217 }; 2218 ··· 2223 .name = "ipe_0_gdsc", 2224 }, 2225 .flags = HW_CTRL | POLL_CFG_GDSCR, 2226 .pwrsts = PWRSTS_OFF_ON, 2227 }; 2228 ··· 2233 .name = "sbi_gdsc", 2234 }, 2235 .flags = HW_CTRL | POLL_CFG_GDSCR, 2236 .pwrsts = PWRSTS_OFF_ON, 2237 }; 2238
··· 2213 .name = "bps_gdsc", 2214 }, 2215 .flags = HW_CTRL | POLL_CFG_GDSCR, 2216 + .parent = &titan_top_gdsc.pd, 2217 .pwrsts = PWRSTS_OFF_ON, 2218 }; 2219 ··· 2222 .name = "ipe_0_gdsc", 2223 }, 2224 .flags = HW_CTRL | POLL_CFG_GDSCR, 2225 + .parent = &titan_top_gdsc.pd, 2226 .pwrsts = PWRSTS_OFF_ON, 2227 }; 2228 ··· 2231 .name = "sbi_gdsc", 2232 }, 2233 .flags = HW_CTRL | POLL_CFG_GDSCR, 2234 + .parent = &titan_top_gdsc.pd, 2235 .pwrsts = PWRSTS_OFF_ON, 2236 }; 2237
+3
drivers/clk/qcom/camcc-sm8450.c
··· 2935 .name = "bps_gdsc", 2936 }, 2937 .flags = HW_CTRL | POLL_CFG_GDSCR, 2938 .pwrsts = PWRSTS_OFF_ON, 2939 }; 2940 ··· 2945 .name = "ipe_0_gdsc", 2946 }, 2947 .flags = HW_CTRL | POLL_CFG_GDSCR, 2948 .pwrsts = PWRSTS_OFF_ON, 2949 }; 2950 ··· 2955 .name = "sbi_gdsc", 2956 }, 2957 .flags = POLL_CFG_GDSCR, 2958 .pwrsts = PWRSTS_OFF_ON, 2959 }; 2960
··· 2935 .name = "bps_gdsc", 2936 }, 2937 .flags = HW_CTRL | POLL_CFG_GDSCR, 2938 + .parent = &titan_top_gdsc.pd, 2939 .pwrsts = PWRSTS_OFF_ON, 2940 }; 2941 ··· 2944 .name = "ipe_0_gdsc", 2945 }, 2946 .flags = HW_CTRL | POLL_CFG_GDSCR, 2947 + .parent = &titan_top_gdsc.pd, 2948 .pwrsts = PWRSTS_OFF_ON, 2949 }; 2950 ··· 2953 .name = "sbi_gdsc", 2954 }, 2955 .flags = POLL_CFG_GDSCR, 2956 + .parent = &titan_top_gdsc.pd, 2957 .pwrsts = PWRSTS_OFF_ON, 2958 }; 2959
+10
drivers/clk/qcom/camcc-sm8550.c
··· 3204 }, 3205 }; 3206 3207 static struct gdsc cam_cc_bps_gdsc = { 3208 .gdscr = 0x10004, 3209 .en_rest_wait_val = 0x2, ··· 3215 .name = "cam_cc_bps_gdsc", 3216 }, 3217 .pwrsts = PWRSTS_OFF_ON, 3218 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3219 }; 3220 ··· 3228 .name = "cam_cc_ife_0_gdsc", 3229 }, 3230 .pwrsts = PWRSTS_OFF_ON, 3231 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3232 }; 3233 ··· 3241 .name = "cam_cc_ife_1_gdsc", 3242 }, 3243 .pwrsts = PWRSTS_OFF_ON, 3244 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3245 }; 3246 ··· 3254 .name = "cam_cc_ife_2_gdsc", 3255 }, 3256 .pwrsts = PWRSTS_OFF_ON, 3257 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3258 }; 3259 ··· 3267 .name = "cam_cc_ipe_0_gdsc", 3268 }, 3269 .pwrsts = PWRSTS_OFF_ON, 3270 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3271 }; 3272 ··· 3280 .name = "cam_cc_sbi_gdsc", 3281 }, 3282 .pwrsts = PWRSTS_OFF_ON, 3283 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3284 }; 3285 ··· 3293 .name = "cam_cc_sfe_0_gdsc", 3294 }, 3295 .pwrsts = PWRSTS_OFF_ON, 3296 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3297 }; 3298 ··· 3306 .name = "cam_cc_sfe_1_gdsc", 3307 }, 3308 .pwrsts = PWRSTS_OFF_ON, 3309 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3310 }; 3311
··· 3204 }, 3205 }; 3206 3207 + static struct gdsc cam_cc_titan_top_gdsc; 3208 + 3209 static struct gdsc cam_cc_bps_gdsc = { 3210 .gdscr = 0x10004, 3211 .en_rest_wait_val = 0x2, ··· 3213 .name = "cam_cc_bps_gdsc", 3214 }, 3215 .pwrsts = PWRSTS_OFF_ON, 3216 + .parent = &cam_cc_titan_top_gdsc.pd, 3217 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3218 }; 3219 ··· 3225 .name = "cam_cc_ife_0_gdsc", 3226 }, 3227 .pwrsts = PWRSTS_OFF_ON, 3228 + .parent = &cam_cc_titan_top_gdsc.pd, 3229 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3230 }; 3231 ··· 3237 .name = "cam_cc_ife_1_gdsc", 3238 }, 3239 .pwrsts = PWRSTS_OFF_ON, 3240 + .parent = &cam_cc_titan_top_gdsc.pd, 3241 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3242 }; 3243 ··· 3249 .name = "cam_cc_ife_2_gdsc", 3250 }, 3251 .pwrsts = PWRSTS_OFF_ON, 3252 + .parent = &cam_cc_titan_top_gdsc.pd, 3253 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3254 }; 3255 ··· 3261 .name = "cam_cc_ipe_0_gdsc", 3262 }, 3263 .pwrsts = PWRSTS_OFF_ON, 3264 + .parent = &cam_cc_titan_top_gdsc.pd, 3265 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3266 }; 3267 ··· 3273 .name = "cam_cc_sbi_gdsc", 3274 }, 3275 .pwrsts = PWRSTS_OFF_ON, 3276 + .parent = &cam_cc_titan_top_gdsc.pd, 3277 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3278 }; 3279 ··· 3285 .name = "cam_cc_sfe_0_gdsc", 3286 }, 3287 .pwrsts = PWRSTS_OFF_ON, 3288 + .parent = &cam_cc_titan_top_gdsc.pd, 3289 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3290 }; 3291 ··· 3297 .name = "cam_cc_sfe_1_gdsc", 3298 }, 3299 .pwrsts = PWRSTS_OFF_ON, 3300 + .parent = &cam_cc_titan_top_gdsc.pd, 3301 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3302 }; 3303
+4 -4
drivers/clk/qcom/clk-branch.c
··· 142 u32 val; 143 int ret; 144 145 - regmap_update_bits(branch.clkr.regmap, mem_br->mem_enable_reg, 146 - mem_br->mem_enable_ack_mask, mem_br->mem_enable_ack_mask); 147 148 ret = regmap_read_poll_timeout(branch.clkr.regmap, mem_br->mem_ack_reg, 149 val, val & mem_br->mem_enable_ack_mask, 0, 200); ··· 159 { 160 struct clk_mem_branch *mem_br = to_clk_mem_branch(hw); 161 162 - regmap_update_bits(mem_br->branch.clkr.regmap, mem_br->mem_enable_reg, 163 - mem_br->mem_enable_ack_mask, 0); 164 165 return clk_branch2_disable(hw); 166 }
··· 142 u32 val; 143 int ret; 144 145 + regmap_assign_bits(branch.clkr.regmap, mem_br->mem_enable_reg, 146 + mem_br->mem_enable_mask, !mem_br->mem_enable_invert); 147 148 ret = regmap_read_poll_timeout(branch.clkr.regmap, mem_br->mem_ack_reg, 149 val, val & mem_br->mem_enable_ack_mask, 0, 200); ··· 159 { 160 struct clk_mem_branch *mem_br = to_clk_mem_branch(hw); 161 162 + regmap_assign_bits(mem_br->branch.clkr.regmap, mem_br->mem_enable_reg, 163 + mem_br->mem_enable_mask, mem_br->mem_enable_invert); 164 165 return clk_branch2_disable(hw); 166 }
+4
drivers/clk/qcom/clk-branch.h
··· 44 * @mem_enable_reg: branch clock memory gating register 45 * @mem_ack_reg: branch clock memory ack register 46 * @mem_enable_ack_mask: branch clock memory enable and ack field in @mem_ack_reg 47 * @branch: branch clock gating handle 48 * 49 * Clock which can gate its memories. ··· 54 u32 mem_enable_reg; 55 u32 mem_ack_reg; 56 u32 mem_enable_ack_mask; 57 struct clk_branch branch; 58 }; 59
··· 44 * @mem_enable_reg: branch clock memory gating register 45 * @mem_ack_reg: branch clock memory ack register 46 * @mem_enable_ack_mask: branch clock memory enable and ack field in @mem_ack_reg 47 + * @mem_enable_mask: branch clock memory enable mask 48 + * @mem_enable_invert: branch clock memory enable and disable has invert logic 49 * @branch: branch clock gating handle 50 * 51 * Clock which can gate its memories. ··· 52 u32 mem_enable_reg; 53 u32 mem_ack_reg; 54 u32 mem_enable_ack_mask; 55 + u32 mem_enable_mask; 56 + bool mem_enable_invert; 57 struct clk_branch branch; 58 }; 59
+1
drivers/clk/qcom/clk-rpmh.c
··· 855 [RPMH_RF_CLK1_A] = &clk_rpmh_rf_clk1_a_ao.hw, 856 [RPMH_RF_CLK2] = &clk_rpmh_rf_clk2_a.hw, 857 [RPMH_RF_CLK2_A] = &clk_rpmh_rf_clk2_a_ao.hw, 858 }; 859 860 static const struct clk_rpmh_desc clk_rpmh_qcs615 = {
··· 855 [RPMH_RF_CLK1_A] = &clk_rpmh_rf_clk1_a_ao.hw, 856 [RPMH_RF_CLK2] = &clk_rpmh_rf_clk2_a.hw, 857 [RPMH_RF_CLK2_A] = &clk_rpmh_rf_clk2_a_ao.hw, 858 + [RPMH_IPA_CLK] = &clk_rpmh_ipa.hw, 859 }; 860 861 static const struct clk_rpmh_desc clk_rpmh_qcs615 = {
+7
drivers/clk/qcom/dispcc-sm6350.c
··· 679 }, 680 }; 681 682 static struct gdsc mdss_gdsc = { 683 .gdscr = 0x1004, 684 .en_rest_wait_val = 0x2, ··· 751 .num_clks = ARRAY_SIZE(disp_cc_sm6350_clocks), 752 .gdscs = disp_cc_sm6350_gdscs, 753 .num_gdscs = ARRAY_SIZE(disp_cc_sm6350_gdscs), 754 }; 755 756 static const struct of_device_id disp_cc_sm6350_match_table[] = {
··· 679 }, 680 }; 681 682 + static const struct qcom_reset_map disp_cc_sm6350_resets[] = { 683 + [DISP_CC_MDSS_CORE_BCR] = { 0x1000 }, 684 + [DISP_CC_MDSS_RSCC_BCR] = { 0x2000 }, 685 + }; 686 + 687 static struct gdsc mdss_gdsc = { 688 .gdscr = 0x1004, 689 .en_rest_wait_val = 0x2, ··· 746 .num_clks = ARRAY_SIZE(disp_cc_sm6350_clocks), 747 .gdscs = disp_cc_sm6350_gdscs, 748 .num_gdscs = ARRAY_SIZE(disp_cc_sm6350_gdscs), 749 + .resets = disp_cc_sm6350_resets, 750 + .num_resets = ARRAY_SIZE(disp_cc_sm6350_resets), 751 }; 752 753 static const struct of_device_id disp_cc_sm6350_match_table[] = {
+8 -1
drivers/clk/qcom/dispcc-sm7150.c
··· 20 #include "clk-regmap-divider.h" 21 #include "common.h" 22 #include "gdsc.h" 23 24 enum { 25 DT_BI_TCXO, ··· 357 .name = "dispcc_mdss_pclk0_clk_src", 358 .parent_data = dispcc_parent_data_4, 359 .num_parents = ARRAY_SIZE(dispcc_parent_data_4), 360 - .flags = CLK_SET_RATE_PARENT, 361 .ops = &clk_pixel_ops, 362 }, 363 }; ··· 952 [MDSS_GDSC] = &mdss_gdsc, 953 }; 954 955 static const struct regmap_config dispcc_sm7150_regmap_config = { 956 .reg_bits = 32, 957 .reg_stride = 4, ··· 970 .num_clks = ARRAY_SIZE(dispcc_sm7150_clocks), 971 .gdscs = dispcc_sm7150_gdscs, 972 .num_gdscs = ARRAY_SIZE(dispcc_sm7150_gdscs), 973 }; 974 975 static const struct of_device_id dispcc_sm7150_match_table[] = {
··· 20 #include "clk-regmap-divider.h" 21 #include "common.h" 22 #include "gdsc.h" 23 + #include "reset.h" 24 25 enum { 26 DT_BI_TCXO, ··· 356 .name = "dispcc_mdss_pclk0_clk_src", 357 .parent_data = dispcc_parent_data_4, 358 .num_parents = ARRAY_SIZE(dispcc_parent_data_4), 359 + .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 360 .ops = &clk_pixel_ops, 361 }, 362 }; ··· 951 [MDSS_GDSC] = &mdss_gdsc, 952 }; 953 954 + static const struct qcom_reset_map dispcc_sm7150_resets[] = { 955 + [DISPCC_MDSS_CORE_BCR] = { 0x2000 }, 956 + }; 957 + 958 static const struct regmap_config dispcc_sm7150_regmap_config = { 959 .reg_bits = 32, 960 .reg_stride = 4, ··· 965 .num_clks = ARRAY_SIZE(dispcc_sm7150_clocks), 966 .gdscs = dispcc_sm7150_gdscs, 967 .num_gdscs = ARRAY_SIZE(dispcc_sm7150_gdscs), 968 + .resets = dispcc_sm7150_resets, 969 + .num_resets = ARRAY_SIZE(dispcc_sm7150_resets), 970 }; 971 972 static const struct of_device_id dispcc_sm7150_match_table[] = {
+3
drivers/clk/qcom/dispcc-x1e80100.c
··· 1618 1619 static const struct qcom_reset_map disp_cc_x1e80100_resets[] = { 1620 [DISP_CC_MDSS_CORE_BCR] = { 0x8000 }, 1621 [DISP_CC_MDSS_CORE_INT2_BCR] = { 0xa000 }, 1622 [DISP_CC_MDSS_RSCC_BCR] = { 0xc000 }, 1623 };
··· 1618 1619 static const struct qcom_reset_map disp_cc_x1e80100_resets[] = { 1620 [DISP_CC_MDSS_CORE_BCR] = { 0x8000 }, 1621 + [DISP_CC_MDSS_DPTX0_USB_ROUTER_LINK_INTF_CLK_ARES] = { .reg = 0x8044, .bit = 2 }, 1622 + [DISP_CC_MDSS_DPTX1_USB_ROUTER_LINK_INTF_CLK_ARES] = { .reg = 0x8068, .bit = 2 }, 1623 + [DISP_CC_MDSS_DPTX2_USB_ROUTER_LINK_INTF_CLK_ARES] = { .reg = 0x8088, .bit = 2 }, 1624 [DISP_CC_MDSS_CORE_INT2_BCR] = { 0xa000 }, 1625 [DISP_CC_MDSS_RSCC_BCR] = { 0xc000 }, 1626 };
+30
drivers/clk/qcom/ecpricc-qdu1000.c
··· 920 static struct clk_mem_branch ecpri_cc_eth_100g_c2c_0_hm_ff_0_clk = { 921 .mem_enable_reg = 0x8410, 922 .mem_ack_reg = 0x8424, 923 .mem_enable_ack_mask = BIT(0), 924 .branch = { 925 .halt_reg = 0x80b4, ··· 944 static struct clk_mem_branch ecpri_cc_eth_100g_c2c_0_hm_ff_1_clk = { 945 .mem_enable_reg = 0x8410, 946 .mem_ack_reg = 0x8424, 947 .mem_enable_ack_mask = BIT(1), 948 .branch = { 949 .halt_reg = 0x80bc, ··· 968 static struct clk_mem_branch ecpri_cc_eth_100g_c2c_hm_macsec_clk = { 969 .mem_enable_reg = 0x8410, 970 .mem_ack_reg = 0x8424, 971 .mem_enable_ack_mask = BIT(4), 972 .branch = { 973 .halt_reg = 0x80ac, ··· 992 static struct clk_mem_branch ecpri_cc_eth_100g_dbg_c2c_hm_ff_0_clk = { 993 .mem_enable_reg = 0x8414, 994 .mem_ack_reg = 0x8428, 995 .mem_enable_ack_mask = BIT(0), 996 .branch = { 997 .halt_reg = 0x80d8, ··· 1016 static struct clk_mem_branch ecpri_cc_eth_100g_dbg_c2c_hm_ff_1_clk = { 1017 .mem_enable_reg = 0x8414, 1018 .mem_ack_reg = 0x8428, 1019 .mem_enable_ack_mask = BIT(1), 1020 .branch = { 1021 .halt_reg = 0x80e0, ··· 1058 static struct clk_mem_branch ecpri_cc_eth_100g_fh_0_hm_ff_0_clk = { 1059 .mem_enable_reg = 0x8404, 1060 .mem_ack_reg = 0x8418, 1061 .mem_enable_ack_mask = BIT(0), 1062 .branch = { 1063 .halt_reg = 0x800c, ··· 1082 static struct clk_mem_branch ecpri_cc_eth_100g_fh_0_hm_ff_1_clk = { 1083 .mem_enable_reg = 0x8404, 1084 .mem_ack_reg = 0x8418, 1085 .mem_enable_ack_mask = BIT(1), 1086 .branch = { 1087 .halt_reg = 0x8014, ··· 1106 static struct clk_mem_branch ecpri_cc_eth_100g_fh_0_hm_ff_2_clk = { 1107 .mem_enable_reg = 0x8404, 1108 .mem_ack_reg = 0x8418, 1109 .mem_enable_ack_mask = BIT(2), 1110 .branch = { 1111 .halt_reg = 0x801c, ··· 1130 static struct clk_mem_branch ecpri_cc_eth_100g_fh_0_hm_ff_3_clk = { 1131 .mem_enable_reg = 0x8404, 1132 .mem_ack_reg = 0x8418, 1133 .mem_enable_ack_mask = BIT(3), 1134 .branch = { 1135 .halt_reg = 0x8024, ··· 1172 static struct clk_mem_branch ecpri_cc_eth_100g_fh_1_hm_ff_0_clk = { 1173 .mem_enable_reg = 0x8408, 1174 .mem_ack_reg = 0x841c, 1175 .mem_enable_ack_mask = BIT(0), 1176 .branch = { 1177 .halt_reg = 0x8044, ··· 1196 static struct clk_mem_branch ecpri_cc_eth_100g_fh_1_hm_ff_1_clk = { 1197 .mem_enable_reg = 0x8408, 1198 .mem_ack_reg = 0x841c, 1199 .mem_enable_ack_mask = BIT(1), 1200 .branch = { 1201 .halt_reg = 0x804c, ··· 1220 static struct clk_mem_branch ecpri_cc_eth_100g_fh_1_hm_ff_2_clk = { 1221 .mem_enable_reg = 0x8408, 1222 .mem_ack_reg = 0x841c, 1223 .mem_enable_ack_mask = BIT(2), 1224 .branch = { 1225 .halt_reg = 0x8054, ··· 1244 static struct clk_mem_branch ecpri_cc_eth_100g_fh_1_hm_ff_3_clk = { 1245 .mem_enable_reg = 0x8408, 1246 .mem_ack_reg = 0x841c, 1247 .mem_enable_ack_mask = BIT(3), 1248 .branch = { 1249 .halt_reg = 0x805c, ··· 1286 static struct clk_mem_branch ecpri_cc_eth_100g_fh_2_hm_ff_0_clk = { 1287 .mem_enable_reg = 0x840c, 1288 .mem_ack_reg = 0x8420, 1289 .mem_enable_ack_mask = BIT(0), 1290 .branch = { 1291 .halt_reg = 0x807c, ··· 1310 static struct clk_mem_branch ecpri_cc_eth_100g_fh_2_hm_ff_1_clk = { 1311 .mem_enable_reg = 0x840c, 1312 .mem_ack_reg = 0x8420, 1313 .mem_enable_ack_mask = BIT(1), 1314 .branch = { 1315 .halt_reg = 0x8084, ··· 1334 static struct clk_mem_branch ecpri_cc_eth_100g_fh_2_hm_ff_2_clk = { 1335 .mem_enable_reg = 0x840c, 1336 .mem_ack_reg = 0x8420, 1337 .mem_enable_ack_mask = BIT(2), 1338 .branch = { 1339 .halt_reg = 0x808c, ··· 1358 static struct clk_mem_branch ecpri_cc_eth_100g_fh_2_hm_ff_3_clk = { 1359 .mem_enable_reg = 0x840c, 1360 .mem_ack_reg = 0x8420, 1361 .mem_enable_ack_mask = BIT(3), 1362 .branch = { 1363 .halt_reg = 0x8094, ··· 1400 static struct clk_mem_branch ecpri_cc_eth_100g_fh_macsec_0_clk = { 1401 .mem_enable_reg = 0x8404, 1402 .mem_ack_reg = 0x8418, 1403 .mem_enable_ack_mask = BIT(4), 1404 .branch = { 1405 .halt_reg = 0x8004, ··· 1424 static struct clk_mem_branch ecpri_cc_eth_100g_fh_macsec_1_clk = { 1425 .mem_enable_reg = 0x8408, 1426 .mem_ack_reg = 0x841c, 1427 .mem_enable_ack_mask = BIT(4), 1428 .branch = { 1429 .halt_reg = 0x803c, ··· 1448 static struct clk_mem_branch ecpri_cc_eth_100g_fh_macsec_2_clk = { 1449 .mem_enable_reg = 0x840c, 1450 .mem_ack_reg = 0x8420, 1451 .mem_enable_ack_mask = BIT(4), 1452 .branch = { 1453 .halt_reg = 0x8074, ··· 1472 static struct clk_mem_branch ecpri_cc_eth_100g_mac_c2c_hm_ref_clk = { 1473 .mem_enable_reg = 0x8410, 1474 .mem_ack_reg = 0x8424, 1475 .mem_enable_ack_mask = BIT(5), 1476 .branch = { 1477 .halt_reg = 0x80c4, ··· 1496 static struct clk_mem_branch ecpri_cc_eth_100g_mac_dbg_c2c_hm_ref_clk = { 1497 .mem_enable_reg = 0x8414, 1498 .mem_ack_reg = 0x8428, 1499 .mem_enable_ack_mask = BIT(5), 1500 .branch = { 1501 .halt_reg = 0x80e8, ··· 1520 static struct clk_mem_branch ecpri_cc_eth_100g_mac_fh0_hm_ref_clk = { 1521 .mem_enable_reg = 0x8404, 1522 .mem_ack_reg = 0x8418, 1523 .mem_enable_ack_mask = BIT(5), 1524 .branch = { 1525 .halt_reg = 0x802c, ··· 1544 static struct clk_mem_branch ecpri_cc_eth_100g_mac_fh1_hm_ref_clk = { 1545 .mem_enable_reg = 0x8408, 1546 .mem_ack_reg = 0x841c, 1547 .mem_enable_ack_mask = BIT(5), 1548 .branch = { 1549 .halt_reg = 0x8064, ··· 1568 static struct clk_mem_branch ecpri_cc_eth_100g_mac_fh2_hm_ref_clk = { 1569 .mem_enable_reg = 0x840c, 1570 .mem_ack_reg = 0x8420, 1571 .mem_enable_ack_mask = BIT(5), 1572 .branch = { 1573 .halt_reg = 0x809c, ··· 1628 static struct clk_mem_branch ecpri_cc_eth_phy_0_ock_sram_clk = { 1629 .mem_enable_reg = 0x8404, 1630 .mem_ack_reg = 0x8418, 1631 .mem_enable_ack_mask = BIT(6), 1632 .branch = { 1633 .halt_reg = 0xd140, ··· 1647 static struct clk_mem_branch ecpri_cc_eth_phy_1_ock_sram_clk = { 1648 .mem_enable_reg = 0x8408, 1649 .mem_ack_reg = 0x841C, 1650 .mem_enable_ack_mask = BIT(6), 1651 .branch = { 1652 .halt_reg = 0xd148, ··· 1666 static struct clk_mem_branch ecpri_cc_eth_phy_2_ock_sram_clk = { 1667 .mem_enable_reg = 0x840c, 1668 .mem_ack_reg = 0x8420, 1669 .mem_enable_ack_mask = BIT(6), 1670 .branch = { 1671 .halt_reg = 0xd150, ··· 1685 static struct clk_mem_branch ecpri_cc_eth_phy_3_ock_sram_clk = { 1686 .mem_enable_reg = 0x8410, 1687 .mem_ack_reg = 0x8424, 1688 .mem_enable_ack_mask = BIT(6), 1689 .branch = { 1690 .halt_reg = 0xd158, ··· 1704 static struct clk_mem_branch ecpri_cc_eth_phy_4_ock_sram_clk = { 1705 .mem_enable_reg = 0x8414, 1706 .mem_ack_reg = 0x8428, 1707 .mem_enable_ack_mask = BIT(6), 1708 .branch = { 1709 .halt_reg = 0xd160,
··· 920 static struct clk_mem_branch ecpri_cc_eth_100g_c2c_0_hm_ff_0_clk = { 921 .mem_enable_reg = 0x8410, 922 .mem_ack_reg = 0x8424, 923 + .mem_enable_mask = BIT(0), 924 .mem_enable_ack_mask = BIT(0), 925 .branch = { 926 .halt_reg = 0x80b4, ··· 943 static struct clk_mem_branch ecpri_cc_eth_100g_c2c_0_hm_ff_1_clk = { 944 .mem_enable_reg = 0x8410, 945 .mem_ack_reg = 0x8424, 946 + .mem_enable_mask = BIT(1), 947 .mem_enable_ack_mask = BIT(1), 948 .branch = { 949 .halt_reg = 0x80bc, ··· 966 static struct clk_mem_branch ecpri_cc_eth_100g_c2c_hm_macsec_clk = { 967 .mem_enable_reg = 0x8410, 968 .mem_ack_reg = 0x8424, 969 + .mem_enable_mask = BIT(4), 970 .mem_enable_ack_mask = BIT(4), 971 .branch = { 972 .halt_reg = 0x80ac, ··· 989 static struct clk_mem_branch ecpri_cc_eth_100g_dbg_c2c_hm_ff_0_clk = { 990 .mem_enable_reg = 0x8414, 991 .mem_ack_reg = 0x8428, 992 + .mem_enable_mask = BIT(0), 993 .mem_enable_ack_mask = BIT(0), 994 .branch = { 995 .halt_reg = 0x80d8, ··· 1012 static struct clk_mem_branch ecpri_cc_eth_100g_dbg_c2c_hm_ff_1_clk = { 1013 .mem_enable_reg = 0x8414, 1014 .mem_ack_reg = 0x8428, 1015 + .mem_enable_mask = BIT(1), 1016 .mem_enable_ack_mask = BIT(1), 1017 .branch = { 1018 .halt_reg = 0x80e0, ··· 1053 static struct clk_mem_branch ecpri_cc_eth_100g_fh_0_hm_ff_0_clk = { 1054 .mem_enable_reg = 0x8404, 1055 .mem_ack_reg = 0x8418, 1056 + .mem_enable_mask = BIT(0), 1057 .mem_enable_ack_mask = BIT(0), 1058 .branch = { 1059 .halt_reg = 0x800c, ··· 1076 static struct clk_mem_branch ecpri_cc_eth_100g_fh_0_hm_ff_1_clk = { 1077 .mem_enable_reg = 0x8404, 1078 .mem_ack_reg = 0x8418, 1079 + .mem_enable_mask = BIT(1), 1080 .mem_enable_ack_mask = BIT(1), 1081 .branch = { 1082 .halt_reg = 0x8014, ··· 1099 static struct clk_mem_branch ecpri_cc_eth_100g_fh_0_hm_ff_2_clk = { 1100 .mem_enable_reg = 0x8404, 1101 .mem_ack_reg = 0x8418, 1102 + .mem_enable_mask = BIT(2), 1103 .mem_enable_ack_mask = BIT(2), 1104 .branch = { 1105 .halt_reg = 0x801c, ··· 1122 static struct clk_mem_branch ecpri_cc_eth_100g_fh_0_hm_ff_3_clk = { 1123 .mem_enable_reg = 0x8404, 1124 .mem_ack_reg = 0x8418, 1125 + .mem_enable_mask = BIT(3), 1126 .mem_enable_ack_mask = BIT(3), 1127 .branch = { 1128 .halt_reg = 0x8024, ··· 1163 static struct clk_mem_branch ecpri_cc_eth_100g_fh_1_hm_ff_0_clk = { 1164 .mem_enable_reg = 0x8408, 1165 .mem_ack_reg = 0x841c, 1166 + .mem_enable_mask = BIT(0), 1167 .mem_enable_ack_mask = BIT(0), 1168 .branch = { 1169 .halt_reg = 0x8044, ··· 1186 static struct clk_mem_branch ecpri_cc_eth_100g_fh_1_hm_ff_1_clk = { 1187 .mem_enable_reg = 0x8408, 1188 .mem_ack_reg = 0x841c, 1189 + .mem_enable_mask = BIT(1), 1190 .mem_enable_ack_mask = BIT(1), 1191 .branch = { 1192 .halt_reg = 0x804c, ··· 1209 static struct clk_mem_branch ecpri_cc_eth_100g_fh_1_hm_ff_2_clk = { 1210 .mem_enable_reg = 0x8408, 1211 .mem_ack_reg = 0x841c, 1212 + .mem_enable_mask = BIT(2), 1213 .mem_enable_ack_mask = BIT(2), 1214 .branch = { 1215 .halt_reg = 0x8054, ··· 1232 static struct clk_mem_branch ecpri_cc_eth_100g_fh_1_hm_ff_3_clk = { 1233 .mem_enable_reg = 0x8408, 1234 .mem_ack_reg = 0x841c, 1235 + .mem_enable_mask = BIT(3), 1236 .mem_enable_ack_mask = BIT(3), 1237 .branch = { 1238 .halt_reg = 0x805c, ··· 1273 static struct clk_mem_branch ecpri_cc_eth_100g_fh_2_hm_ff_0_clk = { 1274 .mem_enable_reg = 0x840c, 1275 .mem_ack_reg = 0x8420, 1276 + .mem_enable_mask = BIT(0), 1277 .mem_enable_ack_mask = BIT(0), 1278 .branch = { 1279 .halt_reg = 0x807c, ··· 1296 static struct clk_mem_branch ecpri_cc_eth_100g_fh_2_hm_ff_1_clk = { 1297 .mem_enable_reg = 0x840c, 1298 .mem_ack_reg = 0x8420, 1299 + .mem_enable_mask = BIT(1), 1300 .mem_enable_ack_mask = BIT(1), 1301 .branch = { 1302 .halt_reg = 0x8084, ··· 1319 static struct clk_mem_branch ecpri_cc_eth_100g_fh_2_hm_ff_2_clk = { 1320 .mem_enable_reg = 0x840c, 1321 .mem_ack_reg = 0x8420, 1322 + .mem_enable_mask = BIT(2), 1323 .mem_enable_ack_mask = BIT(2), 1324 .branch = { 1325 .halt_reg = 0x808c, ··· 1342 static struct clk_mem_branch ecpri_cc_eth_100g_fh_2_hm_ff_3_clk = { 1343 .mem_enable_reg = 0x840c, 1344 .mem_ack_reg = 0x8420, 1345 + .mem_enable_mask = BIT(3), 1346 .mem_enable_ack_mask = BIT(3), 1347 .branch = { 1348 .halt_reg = 0x8094, ··· 1383 static struct clk_mem_branch ecpri_cc_eth_100g_fh_macsec_0_clk = { 1384 .mem_enable_reg = 0x8404, 1385 .mem_ack_reg = 0x8418, 1386 + .mem_enable_mask = BIT(4), 1387 .mem_enable_ack_mask = BIT(4), 1388 .branch = { 1389 .halt_reg = 0x8004, ··· 1406 static struct clk_mem_branch ecpri_cc_eth_100g_fh_macsec_1_clk = { 1407 .mem_enable_reg = 0x8408, 1408 .mem_ack_reg = 0x841c, 1409 + .mem_enable_mask = BIT(4), 1410 .mem_enable_ack_mask = BIT(4), 1411 .branch = { 1412 .halt_reg = 0x803c, ··· 1429 static struct clk_mem_branch ecpri_cc_eth_100g_fh_macsec_2_clk = { 1430 .mem_enable_reg = 0x840c, 1431 .mem_ack_reg = 0x8420, 1432 + .mem_enable_mask = BIT(4), 1433 .mem_enable_ack_mask = BIT(4), 1434 .branch = { 1435 .halt_reg = 0x8074, ··· 1452 static struct clk_mem_branch ecpri_cc_eth_100g_mac_c2c_hm_ref_clk = { 1453 .mem_enable_reg = 0x8410, 1454 .mem_ack_reg = 0x8424, 1455 + .mem_enable_mask = BIT(5), 1456 .mem_enable_ack_mask = BIT(5), 1457 .branch = { 1458 .halt_reg = 0x80c4, ··· 1475 static struct clk_mem_branch ecpri_cc_eth_100g_mac_dbg_c2c_hm_ref_clk = { 1476 .mem_enable_reg = 0x8414, 1477 .mem_ack_reg = 0x8428, 1478 + .mem_enable_mask = BIT(5), 1479 .mem_enable_ack_mask = BIT(5), 1480 .branch = { 1481 .halt_reg = 0x80e8, ··· 1498 static struct clk_mem_branch ecpri_cc_eth_100g_mac_fh0_hm_ref_clk = { 1499 .mem_enable_reg = 0x8404, 1500 .mem_ack_reg = 0x8418, 1501 + .mem_enable_mask = BIT(5), 1502 .mem_enable_ack_mask = BIT(5), 1503 .branch = { 1504 .halt_reg = 0x802c, ··· 1521 static struct clk_mem_branch ecpri_cc_eth_100g_mac_fh1_hm_ref_clk = { 1522 .mem_enable_reg = 0x8408, 1523 .mem_ack_reg = 0x841c, 1524 + .mem_enable_mask = BIT(5), 1525 .mem_enable_ack_mask = BIT(5), 1526 .branch = { 1527 .halt_reg = 0x8064, ··· 1544 static struct clk_mem_branch ecpri_cc_eth_100g_mac_fh2_hm_ref_clk = { 1545 .mem_enable_reg = 0x840c, 1546 .mem_ack_reg = 0x8420, 1547 + .mem_enable_mask = BIT(5), 1548 .mem_enable_ack_mask = BIT(5), 1549 .branch = { 1550 .halt_reg = 0x809c, ··· 1603 static struct clk_mem_branch ecpri_cc_eth_phy_0_ock_sram_clk = { 1604 .mem_enable_reg = 0x8404, 1605 .mem_ack_reg = 0x8418, 1606 + .mem_enable_mask = BIT(6), 1607 .mem_enable_ack_mask = BIT(6), 1608 .branch = { 1609 .halt_reg = 0xd140, ··· 1621 static struct clk_mem_branch ecpri_cc_eth_phy_1_ock_sram_clk = { 1622 .mem_enable_reg = 0x8408, 1623 .mem_ack_reg = 0x841C, 1624 + .mem_enable_mask = BIT(6), 1625 .mem_enable_ack_mask = BIT(6), 1626 .branch = { 1627 .halt_reg = 0xd148, ··· 1639 static struct clk_mem_branch ecpri_cc_eth_phy_2_ock_sram_clk = { 1640 .mem_enable_reg = 0x840c, 1641 .mem_ack_reg = 0x8420, 1642 + .mem_enable_mask = BIT(6), 1643 .mem_enable_ack_mask = BIT(6), 1644 .branch = { 1645 .halt_reg = 0xd150, ··· 1657 static struct clk_mem_branch ecpri_cc_eth_phy_3_ock_sram_clk = { 1658 .mem_enable_reg = 0x8410, 1659 .mem_ack_reg = 0x8424, 1660 + .mem_enable_mask = BIT(6), 1661 .mem_enable_ack_mask = BIT(6), 1662 .branch = { 1663 .halt_reg = 0xd158, ··· 1675 static struct clk_mem_branch ecpri_cc_eth_phy_4_ock_sram_clk = { 1676 .mem_enable_reg = 0x8414, 1677 .mem_ack_reg = 0x8428, 1678 + .mem_enable_mask = BIT(6), 1679 .mem_enable_ack_mask = BIT(6), 1680 .branch = { 1681 .halt_reg = 0xd160,
+12 -13
drivers/clk/qcom/gcc-glymur.c
··· 2643 }; 2644 2645 static const struct freq_tbl ftbl_gcc_usb4_0_master_clk_src[] = { 2646 - F(85714286, P_GCC_GPLL0_OUT_EVEN, 3.5, 0, 0), 2647 F(177666750, P_GCC_GPLL8_OUT_MAIN, 4, 0, 0), 2648 F(355333500, P_GCC_GPLL8_OUT_MAIN, 2, 0, 0), 2649 { } ··· 6759 6760 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 6761 .halt_reg = 0x3f088, 6762 - .halt_check = BRANCH_HALT_DELAY, 6763 .hwcg_reg = 0x3f088, 6764 .hwcg_bit = 1, 6765 .clkr = { ··· 6815 6816 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = { 6817 .halt_reg = 0xe2078, 6818 - .halt_check = BRANCH_HALT_VOTED, 6819 .hwcg_reg = 0xe2078, 6820 .hwcg_bit = 1, 6821 .clkr = { ··· 6871 6872 static struct clk_branch gcc_usb3_tert_phy_pipe_clk = { 6873 .halt_reg = 0xe1078, 6874 - .halt_check = BRANCH_HALT_VOTED, 6875 .hwcg_reg = 0xe1078, 6876 .hwcg_bit = 1, 6877 .clkr = { ··· 6960 6961 static struct clk_branch gcc_usb4_0_phy_p2rr2p_pipe_clk = { 6962 .halt_reg = 0x2b0f4, 6963 - .halt_check = BRANCH_HALT, 6964 .clkr = { 6965 .enable_reg = 0x2b0f4, 6966 .enable_mask = BIT(0), ··· 6978 6979 static struct clk_branch gcc_usb4_0_phy_pcie_pipe_clk = { 6980 .halt_reg = 0x2b04c, 6981 - .halt_check = BRANCH_HALT_VOTED, 6982 .clkr = { 6983 .enable_reg = 0x62010, 6984 .enable_mask = BIT(11), ··· 7032 7033 static struct clk_branch gcc_usb4_0_phy_usb_pipe_clk = { 7034 .halt_reg = 0x2b0bc, 7035 - .halt_check = BRANCH_HALT_VOTED, 7036 .hwcg_reg = 0x2b0bc, 7037 .hwcg_bit = 1, 7038 .clkr = { ··· 7195 7196 static struct clk_branch gcc_usb4_1_phy_p2rr2p_pipe_clk = { 7197 .halt_reg = 0x2d118, 7198 - .halt_check = BRANCH_HALT, 7199 .clkr = { 7200 .enable_reg = 0x2d118, 7201 .enable_mask = BIT(0), ··· 7213 7214 static struct clk_branch gcc_usb4_1_phy_pcie_pipe_clk = { 7215 .halt_reg = 0x2d04c, 7216 - .halt_check = BRANCH_HALT_VOTED, 7217 .clkr = { 7218 .enable_reg = 0x62010, 7219 .enable_mask = BIT(12), ··· 7267 7268 static struct clk_branch gcc_usb4_1_phy_usb_pipe_clk = { 7269 .halt_reg = 0x2d0e0, 7270 - .halt_check = BRANCH_HALT_VOTED, 7271 .hwcg_reg = 0x2d0e0, 7272 .hwcg_bit = 1, 7273 .clkr = { ··· 7430 7431 static struct clk_branch gcc_usb4_2_phy_p2rr2p_pipe_clk = { 7432 .halt_reg = 0xe00f8, 7433 - .halt_check = BRANCH_HALT, 7434 .clkr = { 7435 .enable_reg = 0xe00f8, 7436 .enable_mask = BIT(0), ··· 7448 7449 static struct clk_branch gcc_usb4_2_phy_pcie_pipe_clk = { 7450 .halt_reg = 0xe004c, 7451 - .halt_check = BRANCH_HALT_VOTED, 7452 .clkr = { 7453 .enable_reg = 0x62010, 7454 .enable_mask = BIT(13), ··· 7502 7503 static struct clk_branch gcc_usb4_2_phy_usb_pipe_clk = { 7504 .halt_reg = 0xe00c0, 7505 - .halt_check = BRANCH_HALT_VOTED, 7506 .hwcg_reg = 0xe00c0, 7507 .hwcg_bit = 1, 7508 .clkr = {
··· 2643 }; 2644 2645 static const struct freq_tbl ftbl_gcc_usb4_0_master_clk_src[] = { 2646 F(177666750, P_GCC_GPLL8_OUT_MAIN, 4, 0, 0), 2647 F(355333500, P_GCC_GPLL8_OUT_MAIN, 2, 0, 0), 2648 { } ··· 6760 6761 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 6762 .halt_reg = 0x3f088, 6763 + .halt_check = BRANCH_HALT_SKIP, 6764 .hwcg_reg = 0x3f088, 6765 .hwcg_bit = 1, 6766 .clkr = { ··· 6816 6817 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = { 6818 .halt_reg = 0xe2078, 6819 + .halt_check = BRANCH_HALT_SKIP, 6820 .hwcg_reg = 0xe2078, 6821 .hwcg_bit = 1, 6822 .clkr = { ··· 6872 6873 static struct clk_branch gcc_usb3_tert_phy_pipe_clk = { 6874 .halt_reg = 0xe1078, 6875 + .halt_check = BRANCH_HALT_SKIP, 6876 .hwcg_reg = 0xe1078, 6877 .hwcg_bit = 1, 6878 .clkr = { ··· 6961 6962 static struct clk_branch gcc_usb4_0_phy_p2rr2p_pipe_clk = { 6963 .halt_reg = 0x2b0f4, 6964 + .halt_check = BRANCH_HALT_SKIP, 6965 .clkr = { 6966 .enable_reg = 0x2b0f4, 6967 .enable_mask = BIT(0), ··· 6979 6980 static struct clk_branch gcc_usb4_0_phy_pcie_pipe_clk = { 6981 .halt_reg = 0x2b04c, 6982 + .halt_check = BRANCH_HALT_SKIP, 6983 .clkr = { 6984 .enable_reg = 0x62010, 6985 .enable_mask = BIT(11), ··· 7033 7034 static struct clk_branch gcc_usb4_0_phy_usb_pipe_clk = { 7035 .halt_reg = 0x2b0bc, 7036 + .halt_check = BRANCH_HALT_SKIP, 7037 .hwcg_reg = 0x2b0bc, 7038 .hwcg_bit = 1, 7039 .clkr = { ··· 7196 7197 static struct clk_branch gcc_usb4_1_phy_p2rr2p_pipe_clk = { 7198 .halt_reg = 0x2d118, 7199 + .halt_check = BRANCH_HALT_SKIP, 7200 .clkr = { 7201 .enable_reg = 0x2d118, 7202 .enable_mask = BIT(0), ··· 7214 7215 static struct clk_branch gcc_usb4_1_phy_pcie_pipe_clk = { 7216 .halt_reg = 0x2d04c, 7217 + .halt_check = BRANCH_HALT_SKIP, 7218 .clkr = { 7219 .enable_reg = 0x62010, 7220 .enable_mask = BIT(12), ··· 7268 7269 static struct clk_branch gcc_usb4_1_phy_usb_pipe_clk = { 7270 .halt_reg = 0x2d0e0, 7271 + .halt_check = BRANCH_HALT_SKIP, 7272 .hwcg_reg = 0x2d0e0, 7273 .hwcg_bit = 1, 7274 .clkr = { ··· 7431 7432 static struct clk_branch gcc_usb4_2_phy_p2rr2p_pipe_clk = { 7433 .halt_reg = 0xe00f8, 7434 + .halt_check = BRANCH_HALT_SKIP, 7435 .clkr = { 7436 .enable_reg = 0xe00f8, 7437 .enable_mask = BIT(0), ··· 7449 7450 static struct clk_branch gcc_usb4_2_phy_pcie_pipe_clk = { 7451 .halt_reg = 0xe004c, 7452 + .halt_check = BRANCH_HALT_SKIP, 7453 .clkr = { 7454 .enable_reg = 0x62010, 7455 .enable_mask = BIT(13), ··· 7503 7504 static struct clk_branch gcc_usb4_2_phy_usb_pipe_clk = { 7505 .halt_reg = 0xe00c0, 7506 + .halt_check = BRANCH_HALT_SKIP, 7507 .hwcg_reg = 0xe00c0, 7508 .hwcg_bit = 1, 7509 .clkr = {
+27 -1
drivers/clk/qcom/gcc-ipq5424.c
··· 1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (c) 2018,2020 The Linux Foundation. All rights reserved. 4 - * Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved. 5 */ 6 7 #include <linux/clk-provider.h> ··· 76 }, 77 .num_parents = 1, 78 .ops = &clk_fixed_factor_ops, 79 }, 80 }; 81 ··· 2948 [GPLL2] = &gpll2.clkr, 2949 [GPLL2_OUT_MAIN] = &gpll2_out_main.clkr, 2950 [GPLL4] = &gpll4.clkr, 2951 }; 2952 2953 static const struct qcom_reset_map gcc_ipq5424_resets[] = { ··· 3265 { MASTER_ANOC_PCIE3, SLAVE_ANOC_PCIE3, GCC_ANOC_PCIE3_2LANE_M_CLK }, 3266 { MASTER_CNOC_PCIE3, SLAVE_CNOC_PCIE3, GCC_CNOC_PCIE3_2LANE_S_CLK }, 3267 { MASTER_CNOC_USB, SLAVE_CNOC_USB, GCC_CNOC_USB_CLK }, 3268 }; 3269 3270 static const struct of_device_id gcc_ipq5424_match_table[] = { ··· 3309 .num_clk_hws = ARRAY_SIZE(gcc_ipq5424_hws), 3310 .icc_hws = icc_ipq5424_hws, 3311 .num_icc_hws = ARRAY_SIZE(icc_ipq5424_hws), 3312 }; 3313 3314 static int gcc_ipq5424_probe(struct platform_device *pdev)
··· 1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (c) 2018,2020 The Linux Foundation. All rights reserved. 4 + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. 5 */ 6 7 #include <linux/clk-provider.h> ··· 76 }, 77 .num_parents = 1, 78 .ops = &clk_fixed_factor_ops, 79 + }, 80 + }; 81 + 82 + static struct clk_alpha_pll_postdiv gpll0_out_aux = { 83 + .offset = 0x20000, 84 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 85 + .width = 4, 86 + .clkr.hw.init = &(const struct clk_init_data) { 87 + .name = "gpll0_out_aux", 88 + .parent_hws = (const struct clk_hw *[]) { 89 + &gpll0.clkr.hw 90 + }, 91 + .num_parents = 1, 92 + .ops = &clk_alpha_pll_postdiv_ro_ops, 93 }, 94 }; 95 ··· 2934 [GPLL2] = &gpll2.clkr, 2935 [GPLL2_OUT_MAIN] = &gpll2_out_main.clkr, 2936 [GPLL4] = &gpll4.clkr, 2937 + [GPLL0_OUT_AUX] = &gpll0_out_aux.clkr, 2938 }; 2939 2940 static const struct qcom_reset_map gcc_ipq5424_resets[] = { ··· 3250 { MASTER_ANOC_PCIE3, SLAVE_ANOC_PCIE3, GCC_ANOC_PCIE3_2LANE_M_CLK }, 3251 { MASTER_CNOC_PCIE3, SLAVE_CNOC_PCIE3, GCC_CNOC_PCIE3_2LANE_S_CLK }, 3252 { MASTER_CNOC_USB, SLAVE_CNOC_USB, GCC_CNOC_USB_CLK }, 3253 + { MASTER_NSSNOC_NSSCC, SLAVE_NSSNOC_NSSCC, GCC_NSSNOC_NSSCC_CLK }, 3254 + { MASTER_NSSNOC_SNOC_0, SLAVE_NSSNOC_SNOC_0, GCC_NSSNOC_SNOC_CLK }, 3255 + { MASTER_NSSNOC_SNOC_1, SLAVE_NSSNOC_SNOC_1, GCC_NSSNOC_SNOC_1_CLK }, 3256 + { MASTER_NSSNOC_PCNOC_1, SLAVE_NSSNOC_PCNOC_1, GCC_NSSNOC_PCNOC_1_CLK }, 3257 + { MASTER_NSSNOC_QOSGEN_REF, SLAVE_NSSNOC_QOSGEN_REF, GCC_NSSNOC_QOSGEN_REF_CLK }, 3258 + { MASTER_NSSNOC_TIMEOUT_REF, SLAVE_NSSNOC_TIMEOUT_REF, GCC_NSSNOC_TIMEOUT_REF_CLK }, 3259 + { MASTER_NSSNOC_XO_DCD, SLAVE_NSSNOC_XO_DCD, GCC_NSSNOC_XO_DCD_CLK }, 3260 + { MASTER_NSSNOC_ATB, SLAVE_NSSNOC_ATB, GCC_NSSNOC_ATB_CLK }, 3261 + { MASTER_CNOC_LPASS_CFG, SLAVE_CNOC_LPASS_CFG, GCC_CNOC_LPASS_CFG_CLK }, 3262 + { MASTER_SNOC_LPASS, SLAVE_SNOC_LPASS, GCC_SNOC_LPASS_CLK }, 3263 }; 3264 3265 static const struct of_device_id gcc_ipq5424_match_table[] = { ··· 3284 .num_clk_hws = ARRAY_SIZE(gcc_ipq5424_hws), 3285 .icc_hws = icc_ipq5424_hws, 3286 .num_icc_hws = ARRAY_SIZE(icc_ipq5424_hws), 3287 + .icc_first_node_id = IPQ_APPS_ID, 3288 }; 3289 3290 static int gcc_ipq5424_probe(struct platform_device *pdev)
+3 -3
drivers/clk/qcom/gcc-qcs615.c
··· 784 .name = "gcc_sdcc1_apps_clk_src", 785 .parent_data = gcc_parent_data_1, 786 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 787 - .ops = &clk_rcg2_floor_ops, 788 }, 789 }; 790 ··· 806 .name = "gcc_sdcc1_ice_core_clk_src", 807 .parent_data = gcc_parent_data_0, 808 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 809 - .ops = &clk_rcg2_floor_ops, 810 }, 811 }; 812 ··· 830 .name = "gcc_sdcc2_apps_clk_src", 831 .parent_data = gcc_parent_data_8, 832 .num_parents = ARRAY_SIZE(gcc_parent_data_8), 833 - .ops = &clk_rcg2_floor_ops, 834 }, 835 }; 836
··· 784 .name = "gcc_sdcc1_apps_clk_src", 785 .parent_data = gcc_parent_data_1, 786 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 787 + .ops = &clk_rcg2_shared_floor_ops, 788 }, 789 }; 790 ··· 806 .name = "gcc_sdcc1_ice_core_clk_src", 807 .parent_data = gcc_parent_data_0, 808 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 809 + .ops = &clk_rcg2_shared_floor_ops, 810 }, 811 }; 812 ··· 830 .name = "gcc_sdcc2_apps_clk_src", 831 .parent_data = gcc_parent_data_8, 832 .num_parents = ARRAY_SIZE(gcc_parent_data_8), 833 + .ops = &clk_rcg2_shared_floor_ops, 834 }, 835 }; 836
-1
drivers/clk/qcom/gcc-sc8280xp.c
··· 2224 }; 2225 2226 static const struct freq_tbl ftbl_gcc_usb4_1_master_clk_src[] = { 2227 - F(85714286, P_GCC_GPLL0_OUT_EVEN, 3.5, 0, 0), 2228 F(175000000, P_GCC_GPLL8_OUT_MAIN, 4, 0, 0), 2229 F(350000000, P_GCC_GPLL8_OUT_MAIN, 2, 0, 0), 2230 { }
··· 2224 }; 2225 2226 static const struct freq_tbl ftbl_gcc_usb4_1_master_clk_src[] = { 2227 F(175000000, P_GCC_GPLL8_OUT_MAIN, 4, 0, 0), 2228 F(350000000, P_GCC_GPLL8_OUT_MAIN, 2, 0, 0), 2229 { }
+1
drivers/clk/qcom/gcc-sm8750.c
··· 1012 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { 1013 F(400000, P_BI_TCXO, 12, 1, 4), 1014 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0), 1015 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0), 1016 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0), 1017 F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
··· 1012 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { 1013 F(400000, P_BI_TCXO, 12, 1, 4), 1014 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0), 1015 + F(37500000, P_GCC_GPLL0_OUT_EVEN, 8, 0, 0), 1016 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0), 1017 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0), 1018 F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
+681 -18
drivers/clk/qcom/gcc-x1e80100.c
··· 32 DT_USB3_PHY_0_WRAPPER_GCC_USB30_PIPE, 33 DT_USB3_PHY_1_WRAPPER_GCC_USB30_PIPE, 34 DT_USB3_PHY_2_WRAPPER_GCC_USB30_PIPE, 35 }; 36 37 enum { ··· 69 P_GCC_GPLL7_OUT_MAIN, 70 P_GCC_GPLL8_OUT_MAIN, 71 P_GCC_GPLL9_OUT_MAIN, 72 P_SLEEP_CLK, 73 P_USB3_PHY_0_WRAPPER_GCC_USB30_PIPE_CLK, 74 P_USB3_PHY_1_WRAPPER_GCC_USB30_PIPE_CLK, 75 P_USB3_PHY_2_WRAPPER_GCC_USB30_PIPE_CLK, 76 }; 77 78 static struct clk_alpha_pll gcc_gpll0 = { ··· 375 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 376 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0), 377 { } 378 }; 379 380 static struct clk_rcg2 gcc_gp1_clk_src = { ··· 1849 }; 1850 1851 static const struct freq_tbl ftbl_gcc_usb4_0_master_clk_src[] = { 1852 - F(85714286, P_GCC_GPLL0_OUT_EVEN, 3.5, 0, 0), 1853 F(175000000, P_GCC_GPLL8_OUT_MAIN, 4, 0, 0), 1854 F(350000000, P_GCC_GPLL8_OUT_MAIN, 2, 0, 0), 1855 { } ··· 3182 .enable_mask = BIT(25), 3183 .hw.init = &(const struct clk_init_data) { 3184 .name = "gcc_pcie_0_pipe_clk", 3185 .ops = &clk_branch2_ops, 3186 }, 3187 }, ··· 3276 .enable_mask = BIT(30), 3277 .hw.init = &(const struct clk_init_data) { 3278 .name = "gcc_pcie_1_pipe_clk", 3279 .ops = &clk_branch2_ops, 3280 }, 3281 }, ··· 3370 .enable_mask = BIT(23), 3371 .hw.init = &(const struct clk_init_data) { 3372 .name = "gcc_pcie_2_pipe_clk", 3373 .ops = &clk_branch2_ops, 3374 }, 3375 }, ··· 5563 }, 5564 }; 5565 5566 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 5567 .halt_reg = 0x39068, 5568 .halt_check = BRANCH_HALT_SKIP, ··· 5601 .hw.init = &(const struct clk_init_data) { 5602 .name = "gcc_usb3_prim_phy_pipe_clk", 5603 .parent_hws = (const struct clk_hw*[]) { 5604 - &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw, 5605 }, 5606 .num_parents = 1, 5607 .flags = CLK_SET_RATE_PARENT, ··· 5661 }, 5662 }; 5663 5664 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = { 5665 .halt_reg = 0xa1068, 5666 .halt_check = BRANCH_HALT_SKIP, ··· 5699 .hw.init = &(const struct clk_init_data) { 5700 .name = "gcc_usb3_sec_phy_pipe_clk", 5701 .parent_hws = (const struct clk_hw*[]) { 5702 - &gcc_usb3_sec_phy_pipe_clk_src.clkr.hw, 5703 }, 5704 .num_parents = 1, 5705 .flags = CLK_SET_RATE_PARENT, ··· 5759 }, 5760 }; 5761 5762 static struct clk_branch gcc_usb3_tert_phy_pipe_clk = { 5763 .halt_reg = 0xa2068, 5764 .halt_check = BRANCH_HALT_SKIP, ··· 5797 .hw.init = &(const struct clk_init_data) { 5798 .name = "gcc_usb3_tert_phy_pipe_clk", 5799 .parent_hws = (const struct clk_hw*[]) { 5800 - &gcc_usb3_tert_phy_pipe_clk_src.clkr.hw, 5801 }, 5802 .num_parents = 1, 5803 .flags = CLK_SET_RATE_PARENT, ··· 5823 5824 static struct clk_branch gcc_usb4_0_dp0_clk = { 5825 .halt_reg = 0x9f060, 5826 - .halt_check = BRANCH_HALT, 5827 .clkr = { 5828 .enable_reg = 0x9f060, 5829 .enable_mask = BIT(0), 5830 .hw.init = &(const struct clk_init_data) { 5831 .name = "gcc_usb4_0_dp0_clk", 5832 .ops = &clk_branch2_ops, 5833 }, 5834 }, ··· 5841 5842 static struct clk_branch gcc_usb4_0_dp1_clk = { 5843 .halt_reg = 0x9f108, 5844 - .halt_check = BRANCH_HALT, 5845 .clkr = { 5846 .enable_reg = 0x9f108, 5847 .enable_mask = BIT(0), 5848 .hw.init = &(const struct clk_init_data) { 5849 .name = "gcc_usb4_0_dp1_clk", 5850 .ops = &clk_branch2_ops, 5851 }, 5852 }, ··· 5883 .enable_mask = BIT(0), 5884 .hw.init = &(const struct clk_init_data) { 5885 .name = "gcc_usb4_0_phy_p2rr2p_pipe_clk", 5886 .ops = &clk_branch2_ops, 5887 }, 5888 }, ··· 5901 .enable_mask = BIT(19), 5902 .hw.init = &(const struct clk_init_data) { 5903 .name = "gcc_usb4_0_phy_pcie_pipe_clk", 5904 .ops = &clk_branch2_ops, 5905 }, 5906 }, ··· 5913 5914 static struct clk_branch gcc_usb4_0_phy_rx0_clk = { 5915 .halt_reg = 0x9f0b0, 5916 - .halt_check = BRANCH_HALT, 5917 .clkr = { 5918 .enable_reg = 0x9f0b0, 5919 .enable_mask = BIT(0), 5920 .hw.init = &(const struct clk_init_data) { 5921 .name = "gcc_usb4_0_phy_rx0_clk", 5922 .ops = &clk_branch2_ops, 5923 }, 5924 }, ··· 5931 5932 static struct clk_branch gcc_usb4_0_phy_rx1_clk = { 5933 .halt_reg = 0x9f0c0, 5934 - .halt_check = BRANCH_HALT, 5935 .clkr = { 5936 .enable_reg = 0x9f0c0, 5937 .enable_mask = BIT(0), 5938 .hw.init = &(const struct clk_init_data) { 5939 .name = "gcc_usb4_0_phy_rx1_clk", 5940 .ops = &clk_branch2_ops, 5941 }, 5942 }, ··· 5957 .enable_mask = BIT(0), 5958 .hw.init = &(const struct clk_init_data) { 5959 .name = "gcc_usb4_0_phy_usb_pipe_clk", 5960 .ops = &clk_branch2_ops, 5961 }, 5962 }, ··· 5993 .enable_mask = BIT(0), 5994 .hw.init = &(const struct clk_init_data) { 5995 .name = "gcc_usb4_0_sys_clk", 5996 .ops = &clk_branch2_ops, 5997 }, 5998 }, ··· 6040 6041 static struct clk_branch gcc_usb4_1_dp0_clk = { 6042 .halt_reg = 0x2b060, 6043 - .halt_check = BRANCH_HALT, 6044 .clkr = { 6045 .enable_reg = 0x2b060, 6046 .enable_mask = BIT(0), 6047 .hw.init = &(const struct clk_init_data) { 6048 .name = "gcc_usb4_1_dp0_clk", 6049 .ops = &clk_branch2_ops, 6050 }, 6051 }, ··· 6058 6059 static struct clk_branch gcc_usb4_1_dp1_clk = { 6060 .halt_reg = 0x2b108, 6061 - .halt_check = BRANCH_HALT, 6062 .clkr = { 6063 .enable_reg = 0x2b108, 6064 .enable_mask = BIT(0), 6065 .hw.init = &(const struct clk_init_data) { 6066 .name = "gcc_usb4_1_dp1_clk", 6067 .ops = &clk_branch2_ops, 6068 }, 6069 }, ··· 6100 .enable_mask = BIT(0), 6101 .hw.init = &(const struct clk_init_data) { 6102 .name = "gcc_usb4_1_phy_p2rr2p_pipe_clk", 6103 .ops = &clk_branch2_ops, 6104 }, 6105 }, ··· 6118 .enable_mask = BIT(0), 6119 .hw.init = &(const struct clk_init_data) { 6120 .name = "gcc_usb4_1_phy_pcie_pipe_clk", 6121 .ops = &clk_branch2_ops, 6122 }, 6123 }, ··· 6130 6131 static struct clk_branch gcc_usb4_1_phy_rx0_clk = { 6132 .halt_reg = 0x2b0b0, 6133 - .halt_check = BRANCH_HALT, 6134 .clkr = { 6135 .enable_reg = 0x2b0b0, 6136 .enable_mask = BIT(0), 6137 .hw.init = &(const struct clk_init_data) { 6138 .name = "gcc_usb4_1_phy_rx0_clk", 6139 .ops = &clk_branch2_ops, 6140 }, 6141 }, ··· 6148 6149 static struct clk_branch gcc_usb4_1_phy_rx1_clk = { 6150 .halt_reg = 0x2b0c0, 6151 - .halt_check = BRANCH_HALT, 6152 .clkr = { 6153 .enable_reg = 0x2b0c0, 6154 .enable_mask = BIT(0), 6155 .hw.init = &(const struct clk_init_data) { 6156 .name = "gcc_usb4_1_phy_rx1_clk", 6157 .ops = &clk_branch2_ops, 6158 }, 6159 }, ··· 6174 .enable_mask = BIT(0), 6175 .hw.init = &(const struct clk_init_data) { 6176 .name = "gcc_usb4_1_phy_usb_pipe_clk", 6177 .ops = &clk_branch2_ops, 6178 }, 6179 }, ··· 6210 .enable_mask = BIT(0), 6211 .hw.init = &(const struct clk_init_data) { 6212 .name = "gcc_usb4_1_sys_clk", 6213 .ops = &clk_branch2_ops, 6214 }, 6215 }, ··· 6257 6258 static struct clk_branch gcc_usb4_2_dp0_clk = { 6259 .halt_reg = 0x11060, 6260 - .halt_check = BRANCH_HALT, 6261 .clkr = { 6262 .enable_reg = 0x11060, 6263 .enable_mask = BIT(0), 6264 .hw.init = &(const struct clk_init_data) { 6265 .name = "gcc_usb4_2_dp0_clk", 6266 .ops = &clk_branch2_ops, 6267 }, 6268 }, ··· 6275 6276 static struct clk_branch gcc_usb4_2_dp1_clk = { 6277 .halt_reg = 0x11108, 6278 - .halt_check = BRANCH_HALT, 6279 .clkr = { 6280 .enable_reg = 0x11108, 6281 .enable_mask = BIT(0), 6282 .hw.init = &(const struct clk_init_data) { 6283 .name = "gcc_usb4_2_dp1_clk", 6284 .ops = &clk_branch2_ops, 6285 }, 6286 }, ··· 6317 .enable_mask = BIT(0), 6318 .hw.init = &(const struct clk_init_data) { 6319 .name = "gcc_usb4_2_phy_p2rr2p_pipe_clk", 6320 .ops = &clk_branch2_ops, 6321 }, 6322 }, ··· 6335 .enable_mask = BIT(1), 6336 .hw.init = &(const struct clk_init_data) { 6337 .name = "gcc_usb4_2_phy_pcie_pipe_clk", 6338 .ops = &clk_branch2_ops, 6339 }, 6340 }, ··· 6347 6348 static struct clk_branch gcc_usb4_2_phy_rx0_clk = { 6349 .halt_reg = 0x110b0, 6350 - .halt_check = BRANCH_HALT, 6351 .clkr = { 6352 .enable_reg = 0x110b0, 6353 .enable_mask = BIT(0), 6354 .hw.init = &(const struct clk_init_data) { 6355 .name = "gcc_usb4_2_phy_rx0_clk", 6356 .ops = &clk_branch2_ops, 6357 }, 6358 }, ··· 6365 6366 static struct clk_branch gcc_usb4_2_phy_rx1_clk = { 6367 .halt_reg = 0x110c0, 6368 - .halt_check = BRANCH_HALT, 6369 .clkr = { 6370 .enable_reg = 0x110c0, 6371 .enable_mask = BIT(0), 6372 .hw.init = &(const struct clk_init_data) { 6373 .name = "gcc_usb4_2_phy_rx1_clk", 6374 .ops = &clk_branch2_ops, 6375 }, 6376 }, ··· 6391 .enable_mask = BIT(0), 6392 .hw.init = &(const struct clk_init_data) { 6393 .name = "gcc_usb4_2_phy_usb_pipe_clk", 6394 .ops = &clk_branch2_ops, 6395 }, 6396 }, ··· 7086 [GCC_USB30_TERT_MOCK_UTMI_CLK_SRC] = &gcc_usb30_tert_mock_utmi_clk_src.clkr, 7087 [GCC_USB30_TERT_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_tert_mock_utmi_postdiv_clk_src.clkr, 7088 [GCC_USB30_TERT_SLEEP_CLK] = &gcc_usb30_tert_sleep_clk.clkr, 7089 [GCC_USB3_MP_PHY_AUX_CLK] = &gcc_usb3_mp_phy_aux_clk.clkr, 7090 [GCC_USB3_MP_PHY_AUX_CLK_SRC] = &gcc_usb3_mp_phy_aux_clk_src.clkr, 7091 [GCC_USB3_MP_PHY_COM_AUX_CLK] = &gcc_usb3_mp_phy_com_aux_clk.clkr, ··· 7114 [GCC_USB4_0_DP1_CLK] = &gcc_usb4_0_dp1_clk.clkr, 7115 [GCC_USB4_0_MASTER_CLK] = &gcc_usb4_0_master_clk.clkr, 7116 [GCC_USB4_0_MASTER_CLK_SRC] = &gcc_usb4_0_master_clk_src.clkr, 7117 [GCC_USB4_0_PHY_P2RR2P_PIPE_CLK] = &gcc_usb4_0_phy_p2rr2p_pipe_clk.clkr, 7118 [GCC_USB4_0_PHY_PCIE_PIPE_CLK] = &gcc_usb4_0_phy_pcie_pipe_clk.clkr, 7119 [GCC_USB4_0_PHY_PCIE_PIPE_CLK_SRC] = &gcc_usb4_0_phy_pcie_pipe_clk_src.clkr, 7120 [GCC_USB4_0_PHY_RX0_CLK] = &gcc_usb4_0_phy_rx0_clk.clkr, 7121 [GCC_USB4_0_PHY_RX1_CLK] = &gcc_usb4_0_phy_rx1_clk.clkr, 7122 [GCC_USB4_0_PHY_USB_PIPE_CLK] = &gcc_usb4_0_phy_usb_pipe_clk.clkr, 7123 [GCC_USB4_0_SB_IF_CLK] = &gcc_usb4_0_sb_if_clk.clkr, 7124 [GCC_USB4_0_SB_IF_CLK_SRC] = &gcc_usb4_0_sb_if_clk_src.clkr, ··· 7137 [GCC_USB4_1_DP1_CLK] = &gcc_usb4_1_dp1_clk.clkr, 7138 [GCC_USB4_1_MASTER_CLK] = &gcc_usb4_1_master_clk.clkr, 7139 [GCC_USB4_1_MASTER_CLK_SRC] = &gcc_usb4_1_master_clk_src.clkr, 7140 [GCC_USB4_1_PHY_P2RR2P_PIPE_CLK] = &gcc_usb4_1_phy_p2rr2p_pipe_clk.clkr, 7141 [GCC_USB4_1_PHY_PCIE_PIPE_CLK] = &gcc_usb4_1_phy_pcie_pipe_clk.clkr, 7142 [GCC_USB4_1_PHY_PCIE_PIPE_CLK_SRC] = &gcc_usb4_1_phy_pcie_pipe_clk_src.clkr, 7143 [GCC_USB4_1_PHY_RX0_CLK] = &gcc_usb4_1_phy_rx0_clk.clkr, 7144 [GCC_USB4_1_PHY_RX1_CLK] = &gcc_usb4_1_phy_rx1_clk.clkr, 7145 [GCC_USB4_1_PHY_USB_PIPE_CLK] = &gcc_usb4_1_phy_usb_pipe_clk.clkr, 7146 [GCC_USB4_1_SB_IF_CLK] = &gcc_usb4_1_sb_if_clk.clkr, 7147 [GCC_USB4_1_SB_IF_CLK_SRC] = &gcc_usb4_1_sb_if_clk_src.clkr, ··· 7160 [GCC_USB4_2_DP1_CLK] = &gcc_usb4_2_dp1_clk.clkr, 7161 [GCC_USB4_2_MASTER_CLK] = &gcc_usb4_2_master_clk.clkr, 7162 [GCC_USB4_2_MASTER_CLK_SRC] = &gcc_usb4_2_master_clk_src.clkr, 7163 [GCC_USB4_2_PHY_P2RR2P_PIPE_CLK] = &gcc_usb4_2_phy_p2rr2p_pipe_clk.clkr, 7164 [GCC_USB4_2_PHY_PCIE_PIPE_CLK] = &gcc_usb4_2_phy_pcie_pipe_clk.clkr, 7165 [GCC_USB4_2_PHY_PCIE_PIPE_CLK_SRC] = &gcc_usb4_2_phy_pcie_pipe_clk_src.clkr, 7166 [GCC_USB4_2_PHY_RX0_CLK] = &gcc_usb4_2_phy_rx0_clk.clkr, 7167 [GCC_USB4_2_PHY_RX1_CLK] = &gcc_usb4_2_phy_rx1_clk.clkr, 7168 [GCC_USB4_2_PHY_USB_PIPE_CLK] = &gcc_usb4_2_phy_usb_pipe_clk.clkr, 7169 [GCC_USB4_2_SB_IF_CLK] = &gcc_usb4_2_sb_if_clk.clkr, 7170 [GCC_USB4_2_SB_IF_CLK_SRC] = &gcc_usb4_2_sb_if_clk_src.clkr, ··· 7287 [GCC_USB3_UNIPHY_MP0_BCR] = { 0x19000 }, 7288 [GCC_USB3_UNIPHY_MP1_BCR] = { 0x54000 }, 7289 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x50004 }, 7290 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x2a004 }, 7291 [GCC_USB3PHY_PHY_TERT_BCR] = { 0xa3004 }, 7292 [GCC_USB3UNIPHY_PHY_MP0_BCR] = { 0x19004 }, 7293 [GCC_USB3UNIPHY_PHY_MP1_BCR] = { 0x54004 }, 7294 [GCC_USB4_0_BCR] = { 0x9f000 }, 7295 [GCC_USB4_0_DP0_PHY_PRIM_BCR] = { 0x50010 }, 7296 - [GCC_USB4_1_DP0_PHY_SEC_BCR] = { 0x2a010 }, 7297 - [GCC_USB4_2_DP0_PHY_TERT_BCR] = { 0xa3010 }, 7298 [GCC_USB4_1_BCR] = { 0x2b000 }, 7299 [GCC_USB4_2_BCR] = { 0x11000 }, 7300 [GCC_USB_0_PHY_BCR] = { 0x50020 }, 7301 [GCC_USB_1_PHY_BCR] = { 0x2a020 }, 7302 [GCC_USB_2_PHY_BCR] = { 0xa3020 },
··· 32 DT_USB3_PHY_0_WRAPPER_GCC_USB30_PIPE, 33 DT_USB3_PHY_1_WRAPPER_GCC_USB30_PIPE, 34 DT_USB3_PHY_2_WRAPPER_GCC_USB30_PIPE, 35 + DT_GCC_USB4_0_PHY_DP0_GMUX_CLK_SRC, 36 + DT_GCC_USB4_0_PHY_DP1_GMUX_CLK_SRC, 37 + DT_GCC_USB4_0_PHY_PCIE_PIPEGMUX_CLK_SRC, 38 + DT_GCC_USB4_0_PHY_PIPEGMUX_CLK_SRC, 39 + DT_GCC_USB4_0_PHY_SYS_PIPEGMUX_CLK_SRC, 40 + DT_GCC_USB4_1_PHY_DP0_GMUX_CLK_SRC, 41 + DT_GCC_USB4_1_PHY_DP1_GMUX_CLK_SRC, 42 + DT_GCC_USB4_1_PHY_PCIE_PIPEGMUX_CLK_SRC, 43 + DT_GCC_USB4_1_PHY_PIPEGMUX_CLK_SRC, 44 + DT_GCC_USB4_1_PHY_SYS_PIPEGMUX_CLK_SRC, 45 + DT_GCC_USB4_2_PHY_DP0_GMUX_CLK_SRC, 46 + DT_GCC_USB4_2_PHY_DP1_GMUX_CLK_SRC, 47 + DT_GCC_USB4_2_PHY_PCIE_PIPEGMUX_CLK_SRC, 48 + DT_GCC_USB4_2_PHY_PIPEGMUX_CLK_SRC, 49 + DT_GCC_USB4_2_PHY_SYS_PIPEGMUX_CLK_SRC, 50 + DT_QUSB4PHY_0_GCC_USB4_RX0_CLK, 51 + DT_QUSB4PHY_0_GCC_USB4_RX1_CLK, 52 + DT_QUSB4PHY_1_GCC_USB4_RX0_CLK, 53 + DT_QUSB4PHY_1_GCC_USB4_RX1_CLK, 54 + DT_QUSB4PHY_2_GCC_USB4_RX0_CLK, 55 + DT_QUSB4PHY_2_GCC_USB4_RX1_CLK, 56 + DT_USB4_0_PHY_GCC_USB4_PCIE_PIPE_CLK, 57 + DT_USB4_0_PHY_GCC_USB4RTR_MAX_PIPE_CLK, 58 + DT_USB4_1_PHY_GCC_USB4_PCIE_PIPE_CLK, 59 + DT_USB4_1_PHY_GCC_USB4RTR_MAX_PIPE_CLK, 60 + DT_USB4_2_PHY_GCC_USB4_PCIE_PIPE_CLK, 61 + DT_USB4_2_PHY_GCC_USB4RTR_MAX_PIPE_CLK, 62 }; 63 64 enum { ··· 42 P_GCC_GPLL7_OUT_MAIN, 43 P_GCC_GPLL8_OUT_MAIN, 44 P_GCC_GPLL9_OUT_MAIN, 45 + P_GCC_USB3_PRIM_PHY_PIPE_CLK_SRC, 46 + P_GCC_USB3_SEC_PHY_PIPE_CLK_SRC, 47 + P_GCC_USB3_TERT_PHY_PIPE_CLK_SRC, 48 + P_GCC_USB4_0_PHY_DP0_GMUX_CLK_SRC, 49 + P_GCC_USB4_0_PHY_DP1_GMUX_CLK_SRC, 50 + P_GCC_USB4_0_PHY_PCIE_PIPEGMUX_CLK_SRC, 51 + P_GCC_USB4_0_PHY_PIPEGMUX_CLK_SRC, 52 + P_GCC_USB4_0_PHY_SYS_PIPEGMUX_CLK_SRC, 53 + P_GCC_USB4_1_PHY_DP0_GMUX_CLK_SRC, 54 + P_GCC_USB4_1_PHY_DP1_GMUX_CLK_SRC, 55 + P_GCC_USB4_1_PHY_PCIE_PIPEGMUX_CLK_SRC, 56 + P_GCC_USB4_1_PHY_PIPEGMUX_CLK_SRC, 57 + P_GCC_USB4_1_PHY_SYS_PIPEGMUX_CLK_SRC, 58 + P_GCC_USB4_2_PHY_DP0_GMUX_CLK_SRC, 59 + P_GCC_USB4_2_PHY_DP1_GMUX_CLK_SRC, 60 + P_GCC_USB4_2_PHY_PCIE_PIPEGMUX_CLK_SRC, 61 + P_GCC_USB4_2_PHY_PIPEGMUX_CLK_SRC, 62 + P_GCC_USB4_2_PHY_SYS_PIPEGMUX_CLK_SRC, 63 + P_QUSB4PHY_0_GCC_USB4_RX0_CLK, 64 + P_QUSB4PHY_0_GCC_USB4_RX1_CLK, 65 + P_QUSB4PHY_1_GCC_USB4_RX0_CLK, 66 + P_QUSB4PHY_1_GCC_USB4_RX1_CLK, 67 + P_QUSB4PHY_2_GCC_USB4_RX0_CLK, 68 + P_QUSB4PHY_2_GCC_USB4_RX1_CLK, 69 P_SLEEP_CLK, 70 P_USB3_PHY_0_WRAPPER_GCC_USB30_PIPE_CLK, 71 P_USB3_PHY_1_WRAPPER_GCC_USB30_PIPE_CLK, 72 P_USB3_PHY_2_WRAPPER_GCC_USB30_PIPE_CLK, 73 + P_USB4_0_PHY_GCC_USB4_PCIE_PIPE_CLK, 74 + P_USB4_0_PHY_GCC_USB4RTR_MAX_PIPE_CLK, 75 + P_USB4_1_PHY_GCC_USB4_PCIE_PIPE_CLK, 76 + P_USB4_1_PHY_GCC_USB4RTR_MAX_PIPE_CLK, 77 + P_USB4_2_PHY_GCC_USB4_PCIE_PIPE_CLK, 78 + P_USB4_2_PHY_GCC_USB4RTR_MAX_PIPE_CLK, 79 }; 80 81 static struct clk_alpha_pll gcc_gpll0 = { ··· 318 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 319 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0), 320 { } 321 + }; 322 + 323 + static const struct clk_parent_data gcc_parent_data_13[] = { 324 + { .index = DT_GCC_USB4_0_PHY_DP0_GMUX_CLK_SRC }, 325 + { .index = DT_USB4_0_PHY_GCC_USB4RTR_MAX_PIPE_CLK }, 326 + }; 327 + 328 + static const struct clk_parent_data gcc_parent_data_14[] = { 329 + { .index = DT_GCC_USB4_0_PHY_DP1_GMUX_CLK_SRC }, 330 + { .index = DT_USB4_0_PHY_GCC_USB4RTR_MAX_PIPE_CLK }, 331 + }; 332 + 333 + static const struct clk_parent_data gcc_parent_data_15[] = { 334 + { .index = DT_USB4_0_PHY_GCC_USB4_PCIE_PIPE_CLK }, 335 + { .index = DT_BI_TCXO }, 336 + }; 337 + 338 + static const struct clk_parent_data gcc_parent_data_16[] = { 339 + { .index = DT_GCC_USB4_0_PHY_PCIE_PIPEGMUX_CLK_SRC }, 340 + { .index = DT_USB4_0_PHY_GCC_USB4_PCIE_PIPE_CLK }, 341 + }; 342 + 343 + static const struct clk_parent_data gcc_parent_data_17[] = { 344 + { .index = DT_QUSB4PHY_0_GCC_USB4_RX0_CLK }, 345 + { .index = DT_BI_TCXO }, 346 + }; 347 + 348 + static const struct clk_parent_data gcc_parent_data_18[] = { 349 + { .index = DT_QUSB4PHY_0_GCC_USB4_RX1_CLK }, 350 + { .index = DT_BI_TCXO }, 351 + }; 352 + 353 + static const struct clk_parent_data gcc_parent_data_19[] = { 354 + { .index = DT_GCC_USB4_0_PHY_SYS_PIPEGMUX_CLK_SRC }, 355 + { .index = DT_USB4_0_PHY_GCC_USB4_PCIE_PIPE_CLK }, 356 + }; 357 + 358 + static const struct clk_parent_data gcc_parent_data_20[] = { 359 + { .index = DT_GCC_USB4_1_PHY_DP0_GMUX_CLK_SRC }, 360 + { .index = DT_USB4_1_PHY_GCC_USB4RTR_MAX_PIPE_CLK }, 361 + }; 362 + 363 + static const struct clk_parent_data gcc_parent_data_21[] = { 364 + { .index = DT_GCC_USB4_1_PHY_DP1_GMUX_CLK_SRC }, 365 + { .index = DT_USB4_1_PHY_GCC_USB4RTR_MAX_PIPE_CLK }, 366 + }; 367 + 368 + static const struct clk_parent_data gcc_parent_data_22[] = { 369 + { .index = DT_USB4_1_PHY_GCC_USB4_PCIE_PIPE_CLK }, 370 + { .index = DT_BI_TCXO }, 371 + }; 372 + 373 + static const struct clk_parent_data gcc_parent_data_23[] = { 374 + { .index = DT_GCC_USB4_1_PHY_PCIE_PIPEGMUX_CLK_SRC }, 375 + { .index = DT_USB4_1_PHY_GCC_USB4_PCIE_PIPE_CLK }, 376 + }; 377 + 378 + static const struct clk_parent_data gcc_parent_data_24[] = { 379 + { .index = DT_QUSB4PHY_1_GCC_USB4_RX0_CLK }, 380 + { .index = DT_BI_TCXO }, 381 + }; 382 + 383 + static const struct clk_parent_data gcc_parent_data_25[] = { 384 + { .index = DT_QUSB4PHY_1_GCC_USB4_RX1_CLK }, 385 + { .index = DT_BI_TCXO }, 386 + }; 387 + 388 + static const struct clk_parent_data gcc_parent_data_26[] = { 389 + { .index = DT_GCC_USB4_1_PHY_SYS_PIPEGMUX_CLK_SRC }, 390 + { .index = DT_USB4_1_PHY_GCC_USB4_PCIE_PIPE_CLK }, 391 + }; 392 + 393 + static const struct clk_parent_data gcc_parent_data_27[] = { 394 + { .index = DT_GCC_USB4_2_PHY_DP0_GMUX_CLK_SRC }, 395 + { .index = DT_USB4_2_PHY_GCC_USB4RTR_MAX_PIPE_CLK }, 396 + }; 397 + 398 + static const struct clk_parent_data gcc_parent_data_28[] = { 399 + { .index = DT_GCC_USB4_2_PHY_DP1_GMUX_CLK_SRC }, 400 + { .index = DT_USB4_2_PHY_GCC_USB4RTR_MAX_PIPE_CLK }, 401 + }; 402 + 403 + static const struct clk_parent_data gcc_parent_data_29[] = { 404 + { .index = DT_USB4_2_PHY_GCC_USB4_PCIE_PIPE_CLK }, 405 + { .index = DT_BI_TCXO }, 406 + }; 407 + 408 + static const struct clk_parent_data gcc_parent_data_30[] = { 409 + { .index = DT_GCC_USB4_2_PHY_PCIE_PIPEGMUX_CLK_SRC }, 410 + { .index = DT_USB4_2_PHY_GCC_USB4_PCIE_PIPE_CLK }, 411 + }; 412 + 413 + static const struct clk_parent_data gcc_parent_data_31[] = { 414 + { .index = DT_QUSB4PHY_2_GCC_USB4_RX0_CLK }, 415 + { .index = DT_BI_TCXO }, 416 + }; 417 + 418 + static const struct clk_parent_data gcc_parent_data_32[] = { 419 + { .index = DT_QUSB4PHY_2_GCC_USB4_RX1_CLK }, 420 + { .index = DT_BI_TCXO }, 421 + }; 422 + 423 + static const struct clk_parent_data gcc_parent_data_33[] = { 424 + { .index = DT_GCC_USB4_2_PHY_SYS_PIPEGMUX_CLK_SRC }, 425 + { .index = DT_USB4_2_PHY_GCC_USB4_PCIE_PIPE_CLK }, 426 + }; 427 + 428 + static struct clk_regmap_phy_mux gcc_usb4_0_phy_dp0_clk_src = { 429 + .reg = 0x9f06c, 430 + .clkr = { 431 + .hw.init = &(const struct clk_init_data) { 432 + .name = "gcc_usb4_0_phy_dp0_clk_src", 433 + .parent_data = gcc_parent_data_13, 434 + .ops = &clk_regmap_phy_mux_ops, 435 + }, 436 + }, 437 + }; 438 + 439 + static struct clk_regmap_phy_mux gcc_usb4_0_phy_dp1_clk_src = { 440 + .reg = 0x9f114, 441 + .clkr = { 442 + .hw.init = &(const struct clk_init_data) { 443 + .name = "gcc_usb4_0_phy_dp1_clk_src", 444 + .parent_data = gcc_parent_data_14, 445 + .ops = &clk_regmap_phy_mux_ops, 446 + }, 447 + }, 448 + }; 449 + 450 + static struct clk_regmap_phy_mux gcc_usb4_0_phy_p2rr2p_pipe_clk_src = { 451 + .reg = 0x9f0d4, 452 + .clkr = { 453 + .hw.init = &(const struct clk_init_data) { 454 + .name = "gcc_usb4_0_phy_p2rr2p_pipe_clk_src", 455 + .parent_data = gcc_parent_data_15, 456 + .ops = &clk_regmap_phy_mux_ops, 457 + }, 458 + }, 459 + }; 460 + 461 + static struct clk_regmap_phy_mux gcc_usb4_0_phy_pcie_pipe_mux_clk_src = { 462 + .reg = 0x9f104, 463 + .clkr = { 464 + .hw.init = &(const struct clk_init_data) { 465 + .name = "gcc_usb4_0_phy_pcie_pipe_mux_clk_src", 466 + .parent_data = gcc_parent_data_16, 467 + .ops = &clk_regmap_phy_mux_ops, 468 + }, 469 + }, 470 + }; 471 + 472 + static struct clk_regmap_phy_mux gcc_usb4_0_phy_rx0_clk_src = { 473 + .reg = 0x9f0ac, 474 + .clkr = { 475 + .hw.init = &(const struct clk_init_data) { 476 + .name = "gcc_usb4_0_phy_rx0_clk_src", 477 + .parent_data = gcc_parent_data_17, 478 + .ops = &clk_regmap_phy_mux_ops, 479 + }, 480 + }, 481 + }; 482 + 483 + static struct clk_regmap_phy_mux gcc_usb4_0_phy_rx1_clk_src = { 484 + .reg = 0x9f0bc, 485 + .clkr = { 486 + .hw.init = &(const struct clk_init_data) { 487 + .name = "gcc_usb4_0_phy_rx1_clk_src", 488 + .parent_data = gcc_parent_data_18, 489 + .ops = &clk_regmap_phy_mux_ops, 490 + }, 491 + }, 492 + }; 493 + 494 + static struct clk_regmap_phy_mux gcc_usb4_0_phy_sys_clk_src = { 495 + .reg = 0x9f0e4, 496 + .clkr = { 497 + .hw.init = &(const struct clk_init_data) { 498 + .name = "gcc_usb4_0_phy_sys_clk_src", 499 + .parent_data = gcc_parent_data_19, 500 + .ops = &clk_regmap_phy_mux_ops, 501 + }, 502 + }, 503 + }; 504 + 505 + static struct clk_regmap_phy_mux gcc_usb4_1_phy_dp0_clk_src = { 506 + .reg = 0x2b06c, 507 + .clkr = { 508 + .hw.init = &(const struct clk_init_data) { 509 + .name = "gcc_usb4_1_phy_dp0_clk_src", 510 + .parent_data = gcc_parent_data_20, 511 + .ops = &clk_regmap_phy_mux_ops, 512 + }, 513 + }, 514 + }; 515 + 516 + static struct clk_regmap_phy_mux gcc_usb4_1_phy_dp1_clk_src = { 517 + .reg = 0x2b114, 518 + .clkr = { 519 + .hw.init = &(const struct clk_init_data) { 520 + .name = "gcc_usb4_1_phy_dp1_clk_src", 521 + .parent_data = gcc_parent_data_21, 522 + .ops = &clk_regmap_phy_mux_ops, 523 + }, 524 + }, 525 + }; 526 + 527 + static struct clk_regmap_phy_mux gcc_usb4_1_phy_p2rr2p_pipe_clk_src = { 528 + .reg = 0x2b0d4, 529 + .clkr = { 530 + .hw.init = &(const struct clk_init_data) { 531 + .name = "gcc_usb4_1_phy_p2rr2p_pipe_clk_src", 532 + .parent_data = gcc_parent_data_22, 533 + .ops = &clk_regmap_phy_mux_ops, 534 + }, 535 + }, 536 + }; 537 + 538 + static struct clk_regmap_phy_mux gcc_usb4_1_phy_pcie_pipe_mux_clk_src = { 539 + .reg = 0x2b104, 540 + .clkr = { 541 + .hw.init = &(const struct clk_init_data) { 542 + .name = "gcc_usb4_1_phy_pcie_pipe_mux_clk_src", 543 + .parent_data = gcc_parent_data_23, 544 + .ops = &clk_regmap_phy_mux_ops, 545 + }, 546 + }, 547 + }; 548 + 549 + static struct clk_regmap_phy_mux gcc_usb4_1_phy_rx0_clk_src = { 550 + .reg = 0x2b0ac, 551 + .clkr = { 552 + .hw.init = &(const struct clk_init_data) { 553 + .name = "gcc_usb4_1_phy_rx0_clk_src", 554 + .parent_data = gcc_parent_data_24, 555 + .ops = &clk_regmap_phy_mux_ops, 556 + }, 557 + }, 558 + }; 559 + 560 + static struct clk_regmap_phy_mux gcc_usb4_1_phy_rx1_clk_src = { 561 + .reg = 0x2b0bc, 562 + .clkr = { 563 + .hw.init = &(const struct clk_init_data) { 564 + .name = "gcc_usb4_1_phy_rx1_clk_src", 565 + .parent_data = gcc_parent_data_25, 566 + .ops = &clk_regmap_phy_mux_ops, 567 + }, 568 + }, 569 + }; 570 + 571 + static struct clk_regmap_phy_mux gcc_usb4_1_phy_sys_clk_src = { 572 + .reg = 0x2b0e4, 573 + .clkr = { 574 + .hw.init = &(const struct clk_init_data) { 575 + .name = "gcc_usb4_1_phy_sys_clk_src", 576 + .parent_data = gcc_parent_data_26, 577 + .ops = &clk_regmap_phy_mux_ops, 578 + }, 579 + }, 580 + }; 581 + 582 + static struct clk_regmap_phy_mux gcc_usb4_2_phy_dp0_clk_src = { 583 + .reg = 0x1106c, 584 + .clkr = { 585 + .hw.init = &(const struct clk_init_data) { 586 + .name = "gcc_usb4_2_phy_dp0_clk_src", 587 + .parent_data = gcc_parent_data_27, 588 + .ops = &clk_regmap_phy_mux_ops, 589 + }, 590 + }, 591 + }; 592 + 593 + static struct clk_regmap_phy_mux gcc_usb4_2_phy_dp1_clk_src = { 594 + .reg = 0x11114, 595 + .clkr = { 596 + .hw.init = &(const struct clk_init_data) { 597 + .name = "gcc_usb4_2_phy_dp1_clk_src", 598 + .parent_data = gcc_parent_data_28, 599 + .ops = &clk_regmap_phy_mux_ops, 600 + }, 601 + }, 602 + }; 603 + 604 + static struct clk_regmap_phy_mux gcc_usb4_2_phy_p2rr2p_pipe_clk_src = { 605 + .reg = 0x110d4, 606 + .clkr = { 607 + .hw.init = &(const struct clk_init_data) { 608 + .name = "gcc_usb4_2_phy_p2rr2p_pipe_clk_src", 609 + .parent_data = gcc_parent_data_29, 610 + .ops = &clk_regmap_phy_mux_ops, 611 + }, 612 + }, 613 + }; 614 + 615 + static struct clk_regmap_phy_mux gcc_usb4_2_phy_pcie_pipe_mux_clk_src = { 616 + .reg = 0x11104, 617 + .clkr = { 618 + .hw.init = &(const struct clk_init_data) { 619 + .name = "gcc_usb4_2_phy_pcie_pipe_mux_clk_src", 620 + .parent_data = gcc_parent_data_30, 621 + .ops = &clk_regmap_phy_mux_ops, 622 + }, 623 + }, 624 + }; 625 + 626 + static struct clk_regmap_phy_mux gcc_usb4_2_phy_rx0_clk_src = { 627 + .reg = 0x110ac, 628 + .clkr = { 629 + .hw.init = &(const struct clk_init_data) { 630 + .name = "gcc_usb4_2_phy_rx0_clk_src", 631 + .parent_data = gcc_parent_data_31, 632 + .ops = &clk_regmap_phy_mux_ops, 633 + }, 634 + }, 635 + }; 636 + 637 + static struct clk_regmap_phy_mux gcc_usb4_2_phy_rx1_clk_src = { 638 + .reg = 0x110bc, 639 + .clkr = { 640 + .hw.init = &(const struct clk_init_data) { 641 + .name = "gcc_usb4_2_phy_rx1_clk_src", 642 + .parent_data = gcc_parent_data_32, 643 + .ops = &clk_regmap_phy_mux_ops, 644 + }, 645 + }, 646 + }; 647 + 648 + static struct clk_regmap_phy_mux gcc_usb4_2_phy_sys_clk_src = { 649 + .reg = 0x110e4, 650 + .clkr = { 651 + .hw.init = &(const struct clk_init_data) { 652 + .name = "gcc_usb4_2_phy_sys_clk_src", 653 + .parent_data = gcc_parent_data_33, 654 + .ops = &clk_regmap_phy_mux_ops, 655 + }, 656 + }, 657 }; 658 659 static struct clk_rcg2 gcc_gp1_clk_src = { ··· 1456 }; 1457 1458 static const struct freq_tbl ftbl_gcc_usb4_0_master_clk_src[] = { 1459 F(175000000, P_GCC_GPLL8_OUT_MAIN, 4, 0, 0), 1460 F(350000000, P_GCC_GPLL8_OUT_MAIN, 2, 0, 0), 1461 { } ··· 2790 .enable_mask = BIT(25), 2791 .hw.init = &(const struct clk_init_data) { 2792 .name = "gcc_pcie_0_pipe_clk", 2793 + .parent_hws = (const struct clk_hw*[]) { 2794 + &gcc_usb4_0_phy_pcie_pipe_mux_clk_src.clkr.hw, 2795 + }, 2796 + .num_parents = 1, 2797 + .flags = CLK_SET_RATE_PARENT, 2798 .ops = &clk_branch2_ops, 2799 }, 2800 }, ··· 2879 .enable_mask = BIT(30), 2880 .hw.init = &(const struct clk_init_data) { 2881 .name = "gcc_pcie_1_pipe_clk", 2882 + .parent_hws = (const struct clk_hw*[]) { 2883 + &gcc_usb4_1_phy_pcie_pipe_mux_clk_src.clkr.hw, 2884 + }, 2885 + .num_parents = 1, 2886 + .flags = CLK_SET_RATE_PARENT, 2887 .ops = &clk_branch2_ops, 2888 }, 2889 }, ··· 2968 .enable_mask = BIT(23), 2969 .hw.init = &(const struct clk_init_data) { 2970 .name = "gcc_pcie_2_pipe_clk", 2971 + .parent_hws = (const struct clk_hw*[]) { 2972 + &gcc_usb4_2_phy_pcie_pipe_mux_clk_src.clkr.hw, 2973 + }, 2974 + .num_parents = 1, 2975 + .flags = CLK_SET_RATE_PARENT, 2976 .ops = &clk_branch2_ops, 2977 }, 2978 }, ··· 5156 }, 5157 }; 5158 5159 + static const struct parent_map gcc_parent_map_34[] = { 5160 + { P_GCC_USB3_PRIM_PHY_PIPE_CLK_SRC, 0 }, 5161 + { P_USB4_0_PHY_GCC_USB4RTR_MAX_PIPE_CLK, 1 }, 5162 + { P_GCC_USB4_0_PHY_PIPEGMUX_CLK_SRC, 3 }, 5163 + }; 5164 + 5165 + static const struct clk_parent_data gcc_parent_data_34[] = { 5166 + { .hw = &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw }, 5167 + { .index = DT_USB4_0_PHY_GCC_USB4RTR_MAX_PIPE_CLK }, 5168 + { .index = DT_GCC_USB4_0_PHY_PIPEGMUX_CLK_SRC }, 5169 + }; 5170 + 5171 + static struct clk_regmap_mux gcc_usb34_prim_phy_pipe_clk_src = { 5172 + .reg = 0x39070, 5173 + .shift = 0, 5174 + .width = 2, 5175 + .parent_map = gcc_parent_map_34, 5176 + .clkr = { 5177 + .hw.init = &(const struct clk_init_data) { 5178 + .name = "gcc_usb34_prim_phy_pipe_clk_src", 5179 + .parent_data = gcc_parent_data_34, 5180 + .num_parents = ARRAY_SIZE(gcc_parent_data_34), 5181 + .ops = &clk_regmap_mux_closest_ops, 5182 + }, 5183 + }, 5184 + }; 5185 + 5186 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 5187 .halt_reg = 0x39068, 5188 .halt_check = BRANCH_HALT_SKIP, ··· 5167 .hw.init = &(const struct clk_init_data) { 5168 .name = "gcc_usb3_prim_phy_pipe_clk", 5169 .parent_hws = (const struct clk_hw*[]) { 5170 + &gcc_usb34_prim_phy_pipe_clk_src.clkr.hw, 5171 }, 5172 .num_parents = 1, 5173 .flags = CLK_SET_RATE_PARENT, ··· 5227 }, 5228 }; 5229 5230 + static const struct parent_map gcc_parent_map_35[] = { 5231 + { P_GCC_USB3_SEC_PHY_PIPE_CLK_SRC, 0 }, 5232 + { P_USB4_1_PHY_GCC_USB4RTR_MAX_PIPE_CLK, 1 }, 5233 + { P_GCC_USB4_1_PHY_PIPEGMUX_CLK_SRC, 3 }, 5234 + }; 5235 + 5236 + static const struct clk_parent_data gcc_parent_data_35[] = { 5237 + { .hw = &gcc_usb3_sec_phy_pipe_clk_src.clkr.hw }, 5238 + { .index = DT_USB4_1_PHY_GCC_USB4RTR_MAX_PIPE_CLK }, 5239 + { .index = DT_GCC_USB4_1_PHY_PIPEGMUX_CLK_SRC }, 5240 + }; 5241 + 5242 + static struct clk_regmap_mux gcc_usb34_sec_phy_pipe_clk_src = { 5243 + .reg = 0xa1070, 5244 + .shift = 0, 5245 + .width = 2, 5246 + .parent_map = gcc_parent_map_35, 5247 + .clkr = { 5248 + .hw.init = &(const struct clk_init_data) { 5249 + .name = "gcc_usb34_sec_phy_pipe_clk_src", 5250 + .parent_data = gcc_parent_data_35, 5251 + .num_parents = ARRAY_SIZE(gcc_parent_data_35), 5252 + .ops = &clk_regmap_mux_closest_ops, 5253 + }, 5254 + }, 5255 + }; 5256 + 5257 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = { 5258 .halt_reg = 0xa1068, 5259 .halt_check = BRANCH_HALT_SKIP, ··· 5238 .hw.init = &(const struct clk_init_data) { 5239 .name = "gcc_usb3_sec_phy_pipe_clk", 5240 .parent_hws = (const struct clk_hw*[]) { 5241 + &gcc_usb34_sec_phy_pipe_clk_src.clkr.hw, 5242 }, 5243 .num_parents = 1, 5244 .flags = CLK_SET_RATE_PARENT, ··· 5298 }, 5299 }; 5300 5301 + static const struct parent_map gcc_parent_map_36[] = { 5302 + { P_GCC_USB3_TERT_PHY_PIPE_CLK_SRC, 0 }, 5303 + { P_USB4_2_PHY_GCC_USB4RTR_MAX_PIPE_CLK, 1 }, 5304 + { P_GCC_USB4_2_PHY_PIPEGMUX_CLK_SRC, 3 }, 5305 + }; 5306 + 5307 + static const struct clk_parent_data gcc_parent_data_36[] = { 5308 + { .hw = &gcc_usb3_tert_phy_pipe_clk_src.clkr.hw }, 5309 + { .index = DT_USB4_2_PHY_GCC_USB4RTR_MAX_PIPE_CLK }, 5310 + { .index = DT_GCC_USB4_2_PHY_PIPEGMUX_CLK_SRC }, 5311 + }; 5312 + 5313 + static struct clk_regmap_mux gcc_usb34_tert_phy_pipe_clk_src = { 5314 + .reg = 0xa2070, 5315 + .shift = 0, 5316 + .width = 2, 5317 + .parent_map = gcc_parent_map_36, 5318 + .clkr = { 5319 + .hw.init = &(const struct clk_init_data) { 5320 + .name = "gcc_usb34_tert_phy_pipe_clk_src", 5321 + .parent_data = gcc_parent_data_36, 5322 + .num_parents = ARRAY_SIZE(gcc_parent_data_36), 5323 + .ops = &clk_regmap_mux_closest_ops, 5324 + }, 5325 + }, 5326 + }; 5327 + 5328 static struct clk_branch gcc_usb3_tert_phy_pipe_clk = { 5329 .halt_reg = 0xa2068, 5330 .halt_check = BRANCH_HALT_SKIP, ··· 5309 .hw.init = &(const struct clk_init_data) { 5310 .name = "gcc_usb3_tert_phy_pipe_clk", 5311 .parent_hws = (const struct clk_hw*[]) { 5312 + &gcc_usb34_tert_phy_pipe_clk_src.clkr.hw, 5313 }, 5314 .num_parents = 1, 5315 .flags = CLK_SET_RATE_PARENT, ··· 5335 5336 static struct clk_branch gcc_usb4_0_dp0_clk = { 5337 .halt_reg = 0x9f060, 5338 + .halt_check = BRANCH_HALT_SKIP, 5339 .clkr = { 5340 .enable_reg = 0x9f060, 5341 .enable_mask = BIT(0), 5342 .hw.init = &(const struct clk_init_data) { 5343 .name = "gcc_usb4_0_dp0_clk", 5344 + .parent_hws = (const struct clk_hw*[]) { 5345 + &gcc_usb4_0_phy_dp0_clk_src.clkr.hw, 5346 + }, 5347 + .num_parents = 1, 5348 + .flags = CLK_SET_RATE_PARENT, 5349 .ops = &clk_branch2_ops, 5350 }, 5351 }, ··· 5348 5349 static struct clk_branch gcc_usb4_0_dp1_clk = { 5350 .halt_reg = 0x9f108, 5351 + .halt_check = BRANCH_HALT_SKIP, 5352 .clkr = { 5353 .enable_reg = 0x9f108, 5354 .enable_mask = BIT(0), 5355 .hw.init = &(const struct clk_init_data) { 5356 .name = "gcc_usb4_0_dp1_clk", 5357 + .parent_hws = (const struct clk_hw*[]) { 5358 + &gcc_usb4_0_phy_dp1_clk_src.clkr.hw, 5359 + }, 5360 + .num_parents = 1, 5361 + .flags = CLK_SET_RATE_PARENT, 5362 .ops = &clk_branch2_ops, 5363 }, 5364 }, ··· 5385 .enable_mask = BIT(0), 5386 .hw.init = &(const struct clk_init_data) { 5387 .name = "gcc_usb4_0_phy_p2rr2p_pipe_clk", 5388 + .parent_hws = (const struct clk_hw*[]) { 5389 + &gcc_usb4_0_phy_p2rr2p_pipe_clk_src.clkr.hw, 5390 + }, 5391 + .num_parents = 1, 5392 + .flags = CLK_SET_RATE_PARENT, 5393 .ops = &clk_branch2_ops, 5394 }, 5395 }, ··· 5398 .enable_mask = BIT(19), 5399 .hw.init = &(const struct clk_init_data) { 5400 .name = "gcc_usb4_0_phy_pcie_pipe_clk", 5401 + .parent_hws = (const struct clk_hw*[]) { 5402 + &gcc_usb4_0_phy_pcie_pipe_mux_clk_src.clkr.hw, 5403 + }, 5404 + .num_parents = 1, 5405 + .flags = CLK_SET_RATE_PARENT, 5406 .ops = &clk_branch2_ops, 5407 }, 5408 }, ··· 5405 5406 static struct clk_branch gcc_usb4_0_phy_rx0_clk = { 5407 .halt_reg = 0x9f0b0, 5408 + .halt_check = BRANCH_HALT_SKIP, 5409 .clkr = { 5410 .enable_reg = 0x9f0b0, 5411 .enable_mask = BIT(0), 5412 .hw.init = &(const struct clk_init_data) { 5413 .name = "gcc_usb4_0_phy_rx0_clk", 5414 + .parent_hws = (const struct clk_hw*[]) { 5415 + &gcc_usb4_0_phy_rx0_clk_src.clkr.hw, 5416 + }, 5417 + .num_parents = 1, 5418 + .flags = CLK_SET_RATE_PARENT, 5419 .ops = &clk_branch2_ops, 5420 }, 5421 }, ··· 5418 5419 static struct clk_branch gcc_usb4_0_phy_rx1_clk = { 5420 .halt_reg = 0x9f0c0, 5421 + .halt_check = BRANCH_HALT_SKIP, 5422 .clkr = { 5423 .enable_reg = 0x9f0c0, 5424 .enable_mask = BIT(0), 5425 .hw.init = &(const struct clk_init_data) { 5426 .name = "gcc_usb4_0_phy_rx1_clk", 5427 + .parent_hws = (const struct clk_hw*[]) { 5428 + &gcc_usb4_0_phy_rx1_clk_src.clkr.hw, 5429 + }, 5430 + .num_parents = 1, 5431 + .flags = CLK_SET_RATE_PARENT, 5432 .ops = &clk_branch2_ops, 5433 }, 5434 }, ··· 5439 .enable_mask = BIT(0), 5440 .hw.init = &(const struct clk_init_data) { 5441 .name = "gcc_usb4_0_phy_usb_pipe_clk", 5442 + .parent_hws = (const struct clk_hw*[]) { 5443 + &gcc_usb34_prim_phy_pipe_clk_src.clkr.hw, 5444 + }, 5445 + .num_parents = 1, 5446 + .flags = CLK_SET_RATE_PARENT, 5447 .ops = &clk_branch2_ops, 5448 }, 5449 }, ··· 5470 .enable_mask = BIT(0), 5471 .hw.init = &(const struct clk_init_data) { 5472 .name = "gcc_usb4_0_sys_clk", 5473 + .parent_hws = (const struct clk_hw*[]) { 5474 + &gcc_usb4_0_phy_sys_clk_src.clkr.hw, 5475 + }, 5476 + .num_parents = 1, 5477 + .flags = CLK_SET_RATE_PARENT, 5478 .ops = &clk_branch2_ops, 5479 }, 5480 }, ··· 5512 5513 static struct clk_branch gcc_usb4_1_dp0_clk = { 5514 .halt_reg = 0x2b060, 5515 + .halt_check = BRANCH_HALT_SKIP, 5516 .clkr = { 5517 .enable_reg = 0x2b060, 5518 .enable_mask = BIT(0), 5519 .hw.init = &(const struct clk_init_data) { 5520 .name = "gcc_usb4_1_dp0_clk", 5521 + .parent_hws = (const struct clk_hw*[]) { 5522 + &gcc_usb4_1_phy_dp0_clk_src.clkr.hw, 5523 + }, 5524 + .num_parents = 1, 5525 + .flags = CLK_SET_RATE_PARENT, 5526 .ops = &clk_branch2_ops, 5527 }, 5528 }, ··· 5525 5526 static struct clk_branch gcc_usb4_1_dp1_clk = { 5527 .halt_reg = 0x2b108, 5528 + .halt_check = BRANCH_HALT_SKIP, 5529 .clkr = { 5530 .enable_reg = 0x2b108, 5531 .enable_mask = BIT(0), 5532 .hw.init = &(const struct clk_init_data) { 5533 .name = "gcc_usb4_1_dp1_clk", 5534 + .parent_hws = (const struct clk_hw*[]) { 5535 + &gcc_usb4_1_phy_dp1_clk_src.clkr.hw, 5536 + }, 5537 + .num_parents = 1, 5538 + .flags = CLK_SET_RATE_PARENT, 5539 .ops = &clk_branch2_ops, 5540 }, 5541 }, ··· 5562 .enable_mask = BIT(0), 5563 .hw.init = &(const struct clk_init_data) { 5564 .name = "gcc_usb4_1_phy_p2rr2p_pipe_clk", 5565 + .parent_hws = (const struct clk_hw*[]) { 5566 + &gcc_usb4_1_phy_p2rr2p_pipe_clk_src.clkr.hw, 5567 + }, 5568 + .num_parents = 1, 5569 + .flags = CLK_SET_RATE_PARENT, 5570 .ops = &clk_branch2_ops, 5571 }, 5572 }, ··· 5575 .enable_mask = BIT(0), 5576 .hw.init = &(const struct clk_init_data) { 5577 .name = "gcc_usb4_1_phy_pcie_pipe_clk", 5578 + .parent_hws = (const struct clk_hw*[]) { 5579 + &gcc_usb4_1_phy_pcie_pipe_mux_clk_src.clkr.hw, 5580 + }, 5581 + .num_parents = 1, 5582 + .flags = CLK_SET_RATE_PARENT, 5583 .ops = &clk_branch2_ops, 5584 }, 5585 }, ··· 5582 5583 static struct clk_branch gcc_usb4_1_phy_rx0_clk = { 5584 .halt_reg = 0x2b0b0, 5585 + .halt_check = BRANCH_HALT_SKIP, 5586 .clkr = { 5587 .enable_reg = 0x2b0b0, 5588 .enable_mask = BIT(0), 5589 .hw.init = &(const struct clk_init_data) { 5590 .name = "gcc_usb4_1_phy_rx0_clk", 5591 + .parent_hws = (const struct clk_hw*[]) { 5592 + &gcc_usb4_1_phy_rx0_clk_src.clkr.hw, 5593 + }, 5594 + .num_parents = 1, 5595 + .flags = CLK_SET_RATE_PARENT, 5596 .ops = &clk_branch2_ops, 5597 }, 5598 }, ··· 5595 5596 static struct clk_branch gcc_usb4_1_phy_rx1_clk = { 5597 .halt_reg = 0x2b0c0, 5598 + .halt_check = BRANCH_HALT_SKIP, 5599 .clkr = { 5600 .enable_reg = 0x2b0c0, 5601 .enable_mask = BIT(0), 5602 .hw.init = &(const struct clk_init_data) { 5603 .name = "gcc_usb4_1_phy_rx1_clk", 5604 + .parent_hws = (const struct clk_hw*[]) { 5605 + &gcc_usb4_1_phy_rx1_clk_src.clkr.hw, 5606 + }, 5607 + .num_parents = 1, 5608 + .flags = CLK_SET_RATE_PARENT, 5609 .ops = &clk_branch2_ops, 5610 }, 5611 }, ··· 5616 .enable_mask = BIT(0), 5617 .hw.init = &(const struct clk_init_data) { 5618 .name = "gcc_usb4_1_phy_usb_pipe_clk", 5619 + .parent_hws = (const struct clk_hw*[]) { 5620 + &gcc_usb34_sec_phy_pipe_clk_src.clkr.hw, 5621 + }, 5622 + .num_parents = 1, 5623 + .flags = CLK_SET_RATE_PARENT, 5624 .ops = &clk_branch2_ops, 5625 }, 5626 }, ··· 5647 .enable_mask = BIT(0), 5648 .hw.init = &(const struct clk_init_data) { 5649 .name = "gcc_usb4_1_sys_clk", 5650 + .parent_hws = (const struct clk_hw*[]) { 5651 + &gcc_usb4_1_phy_sys_clk_src.clkr.hw, 5652 + }, 5653 + .num_parents = 1, 5654 + .flags = CLK_SET_RATE_PARENT, 5655 .ops = &clk_branch2_ops, 5656 }, 5657 }, ··· 5689 5690 static struct clk_branch gcc_usb4_2_dp0_clk = { 5691 .halt_reg = 0x11060, 5692 + .halt_check = BRANCH_HALT_SKIP, 5693 .clkr = { 5694 .enable_reg = 0x11060, 5695 .enable_mask = BIT(0), 5696 .hw.init = &(const struct clk_init_data) { 5697 .name = "gcc_usb4_2_dp0_clk", 5698 + .parent_hws = (const struct clk_hw*[]) { 5699 + &gcc_usb4_2_phy_dp0_clk_src.clkr.hw, 5700 + }, 5701 + .num_parents = 1, 5702 + .flags = CLK_SET_RATE_PARENT, 5703 .ops = &clk_branch2_ops, 5704 }, 5705 }, ··· 5702 5703 static struct clk_branch gcc_usb4_2_dp1_clk = { 5704 .halt_reg = 0x11108, 5705 + .halt_check = BRANCH_HALT_SKIP, 5706 .clkr = { 5707 .enable_reg = 0x11108, 5708 .enable_mask = BIT(0), 5709 .hw.init = &(const struct clk_init_data) { 5710 .name = "gcc_usb4_2_dp1_clk", 5711 + .parent_hws = (const struct clk_hw*[]) { 5712 + &gcc_usb4_2_phy_dp1_clk_src.clkr.hw, 5713 + }, 5714 + .num_parents = 1, 5715 + .flags = CLK_SET_RATE_PARENT, 5716 .ops = &clk_branch2_ops, 5717 }, 5718 }, ··· 5739 .enable_mask = BIT(0), 5740 .hw.init = &(const struct clk_init_data) { 5741 .name = "gcc_usb4_2_phy_p2rr2p_pipe_clk", 5742 + .parent_hws = (const struct clk_hw*[]) { 5743 + &gcc_usb4_2_phy_p2rr2p_pipe_clk_src.clkr.hw, 5744 + }, 5745 + .num_parents = 1, 5746 + .flags = CLK_SET_RATE_PARENT, 5747 .ops = &clk_branch2_ops, 5748 }, 5749 }, ··· 5752 .enable_mask = BIT(1), 5753 .hw.init = &(const struct clk_init_data) { 5754 .name = "gcc_usb4_2_phy_pcie_pipe_clk", 5755 + .parent_hws = (const struct clk_hw*[]) { 5756 + &gcc_usb4_2_phy_pcie_pipe_mux_clk_src.clkr.hw, 5757 + }, 5758 + .num_parents = 1, 5759 + .flags = CLK_SET_RATE_PARENT, 5760 .ops = &clk_branch2_ops, 5761 }, 5762 }, ··· 5759 5760 static struct clk_branch gcc_usb4_2_phy_rx0_clk = { 5761 .halt_reg = 0x110b0, 5762 + .halt_check = BRANCH_HALT_SKIP, 5763 .clkr = { 5764 .enable_reg = 0x110b0, 5765 .enable_mask = BIT(0), 5766 .hw.init = &(const struct clk_init_data) { 5767 .name = "gcc_usb4_2_phy_rx0_clk", 5768 + .parent_hws = (const struct clk_hw*[]) { 5769 + &gcc_usb4_2_phy_rx0_clk_src.clkr.hw, 5770 + }, 5771 + .num_parents = 1, 5772 + .flags = CLK_SET_RATE_PARENT, 5773 .ops = &clk_branch2_ops, 5774 }, 5775 }, ··· 5772 5773 static struct clk_branch gcc_usb4_2_phy_rx1_clk = { 5774 .halt_reg = 0x110c0, 5775 + .halt_check = BRANCH_HALT_SKIP, 5776 .clkr = { 5777 .enable_reg = 0x110c0, 5778 .enable_mask = BIT(0), 5779 .hw.init = &(const struct clk_init_data) { 5780 .name = "gcc_usb4_2_phy_rx1_clk", 5781 + .parent_hws = (const struct clk_hw*[]) { 5782 + &gcc_usb4_2_phy_rx1_clk_src.clkr.hw, 5783 + }, 5784 + .num_parents = 1, 5785 + .flags = CLK_SET_RATE_PARENT, 5786 .ops = &clk_branch2_ops, 5787 }, 5788 }, ··· 5793 .enable_mask = BIT(0), 5794 .hw.init = &(const struct clk_init_data) { 5795 .name = "gcc_usb4_2_phy_usb_pipe_clk", 5796 + .parent_hws = (const struct clk_hw*[]) { 5797 + &gcc_usb34_tert_phy_pipe_clk_src.clkr.hw, 5798 + }, 5799 + .num_parents = 1, 5800 + .flags = CLK_SET_RATE_PARENT, 5801 .ops = &clk_branch2_ops, 5802 }, 5803 }, ··· 6483 [GCC_USB30_TERT_MOCK_UTMI_CLK_SRC] = &gcc_usb30_tert_mock_utmi_clk_src.clkr, 6484 [GCC_USB30_TERT_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_tert_mock_utmi_postdiv_clk_src.clkr, 6485 [GCC_USB30_TERT_SLEEP_CLK] = &gcc_usb30_tert_sleep_clk.clkr, 6486 + [GCC_USB34_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb34_prim_phy_pipe_clk_src.clkr, 6487 + [GCC_USB34_SEC_PHY_PIPE_CLK_SRC] = &gcc_usb34_sec_phy_pipe_clk_src.clkr, 6488 + [GCC_USB34_TERT_PHY_PIPE_CLK_SRC] = &gcc_usb34_tert_phy_pipe_clk_src.clkr, 6489 [GCC_USB3_MP_PHY_AUX_CLK] = &gcc_usb3_mp_phy_aux_clk.clkr, 6490 [GCC_USB3_MP_PHY_AUX_CLK_SRC] = &gcc_usb3_mp_phy_aux_clk_src.clkr, 6491 [GCC_USB3_MP_PHY_COM_AUX_CLK] = &gcc_usb3_mp_phy_com_aux_clk.clkr, ··· 6508 [GCC_USB4_0_DP1_CLK] = &gcc_usb4_0_dp1_clk.clkr, 6509 [GCC_USB4_0_MASTER_CLK] = &gcc_usb4_0_master_clk.clkr, 6510 [GCC_USB4_0_MASTER_CLK_SRC] = &gcc_usb4_0_master_clk_src.clkr, 6511 + [GCC_USB4_0_PHY_DP0_CLK_SRC] = &gcc_usb4_0_phy_dp0_clk_src.clkr, 6512 + [GCC_USB4_0_PHY_DP1_CLK_SRC] = &gcc_usb4_0_phy_dp1_clk_src.clkr, 6513 [GCC_USB4_0_PHY_P2RR2P_PIPE_CLK] = &gcc_usb4_0_phy_p2rr2p_pipe_clk.clkr, 6514 + [GCC_USB4_0_PHY_P2RR2P_PIPE_CLK_SRC] = &gcc_usb4_0_phy_p2rr2p_pipe_clk_src.clkr, 6515 [GCC_USB4_0_PHY_PCIE_PIPE_CLK] = &gcc_usb4_0_phy_pcie_pipe_clk.clkr, 6516 [GCC_USB4_0_PHY_PCIE_PIPE_CLK_SRC] = &gcc_usb4_0_phy_pcie_pipe_clk_src.clkr, 6517 + [GCC_USB4_0_PHY_PCIE_PIPE_MUX_CLK_SRC] = &gcc_usb4_0_phy_pcie_pipe_mux_clk_src.clkr, 6518 [GCC_USB4_0_PHY_RX0_CLK] = &gcc_usb4_0_phy_rx0_clk.clkr, 6519 + [GCC_USB4_0_PHY_RX0_CLK_SRC] = &gcc_usb4_0_phy_rx0_clk_src.clkr, 6520 [GCC_USB4_0_PHY_RX1_CLK] = &gcc_usb4_0_phy_rx1_clk.clkr, 6521 + [GCC_USB4_0_PHY_RX1_CLK_SRC] = &gcc_usb4_0_phy_rx1_clk_src.clkr, 6522 + [GCC_USB4_0_PHY_SYS_CLK_SRC] = &gcc_usb4_0_phy_sys_clk_src.clkr, 6523 [GCC_USB4_0_PHY_USB_PIPE_CLK] = &gcc_usb4_0_phy_usb_pipe_clk.clkr, 6524 [GCC_USB4_0_SB_IF_CLK] = &gcc_usb4_0_sb_if_clk.clkr, 6525 [GCC_USB4_0_SB_IF_CLK_SRC] = &gcc_usb4_0_sb_if_clk_src.clkr, ··· 6524 [GCC_USB4_1_DP1_CLK] = &gcc_usb4_1_dp1_clk.clkr, 6525 [GCC_USB4_1_MASTER_CLK] = &gcc_usb4_1_master_clk.clkr, 6526 [GCC_USB4_1_MASTER_CLK_SRC] = &gcc_usb4_1_master_clk_src.clkr, 6527 + [GCC_USB4_1_PHY_DP0_CLK_SRC] = &gcc_usb4_1_phy_dp0_clk_src.clkr, 6528 + [GCC_USB4_1_PHY_DP1_CLK_SRC] = &gcc_usb4_1_phy_dp1_clk_src.clkr, 6529 [GCC_USB4_1_PHY_P2RR2P_PIPE_CLK] = &gcc_usb4_1_phy_p2rr2p_pipe_clk.clkr, 6530 + [GCC_USB4_1_PHY_P2RR2P_PIPE_CLK_SRC] = &gcc_usb4_1_phy_p2rr2p_pipe_clk_src.clkr, 6531 [GCC_USB4_1_PHY_PCIE_PIPE_CLK] = &gcc_usb4_1_phy_pcie_pipe_clk.clkr, 6532 [GCC_USB4_1_PHY_PCIE_PIPE_CLK_SRC] = &gcc_usb4_1_phy_pcie_pipe_clk_src.clkr, 6533 + [GCC_USB4_1_PHY_PCIE_PIPE_MUX_CLK_SRC] = &gcc_usb4_1_phy_pcie_pipe_mux_clk_src.clkr, 6534 [GCC_USB4_1_PHY_RX0_CLK] = &gcc_usb4_1_phy_rx0_clk.clkr, 6535 + [GCC_USB4_1_PHY_RX0_CLK_SRC] = &gcc_usb4_1_phy_rx0_clk_src.clkr, 6536 [GCC_USB4_1_PHY_RX1_CLK] = &gcc_usb4_1_phy_rx1_clk.clkr, 6537 + [GCC_USB4_1_PHY_RX1_CLK_SRC] = &gcc_usb4_1_phy_rx1_clk_src.clkr, 6538 + [GCC_USB4_1_PHY_SYS_CLK_SRC] = &gcc_usb4_1_phy_sys_clk_src.clkr, 6539 [GCC_USB4_1_PHY_USB_PIPE_CLK] = &gcc_usb4_1_phy_usb_pipe_clk.clkr, 6540 [GCC_USB4_1_SB_IF_CLK] = &gcc_usb4_1_sb_if_clk.clkr, 6541 [GCC_USB4_1_SB_IF_CLK_SRC] = &gcc_usb4_1_sb_if_clk_src.clkr, ··· 6540 [GCC_USB4_2_DP1_CLK] = &gcc_usb4_2_dp1_clk.clkr, 6541 [GCC_USB4_2_MASTER_CLK] = &gcc_usb4_2_master_clk.clkr, 6542 [GCC_USB4_2_MASTER_CLK_SRC] = &gcc_usb4_2_master_clk_src.clkr, 6543 + [GCC_USB4_2_PHY_DP0_CLK_SRC] = &gcc_usb4_2_phy_dp0_clk_src.clkr, 6544 + [GCC_USB4_2_PHY_DP1_CLK_SRC] = &gcc_usb4_2_phy_dp1_clk_src.clkr, 6545 [GCC_USB4_2_PHY_P2RR2P_PIPE_CLK] = &gcc_usb4_2_phy_p2rr2p_pipe_clk.clkr, 6546 + [GCC_USB4_2_PHY_P2RR2P_PIPE_CLK_SRC] = &gcc_usb4_2_phy_p2rr2p_pipe_clk_src.clkr, 6547 [GCC_USB4_2_PHY_PCIE_PIPE_CLK] = &gcc_usb4_2_phy_pcie_pipe_clk.clkr, 6548 [GCC_USB4_2_PHY_PCIE_PIPE_CLK_SRC] = &gcc_usb4_2_phy_pcie_pipe_clk_src.clkr, 6549 + [GCC_USB4_2_PHY_PCIE_PIPE_MUX_CLK_SRC] = &gcc_usb4_2_phy_pcie_pipe_mux_clk_src.clkr, 6550 [GCC_USB4_2_PHY_RX0_CLK] = &gcc_usb4_2_phy_rx0_clk.clkr, 6551 + [GCC_USB4_2_PHY_RX0_CLK_SRC] = &gcc_usb4_2_phy_rx0_clk_src.clkr, 6552 [GCC_USB4_2_PHY_RX1_CLK] = &gcc_usb4_2_phy_rx1_clk.clkr, 6553 + [GCC_USB4_2_PHY_RX1_CLK_SRC] = &gcc_usb4_2_phy_rx1_clk_src.clkr, 6554 + [GCC_USB4_2_PHY_SYS_CLK_SRC] = &gcc_usb4_2_phy_sys_clk_src.clkr, 6555 [GCC_USB4_2_PHY_USB_PIPE_CLK] = &gcc_usb4_2_phy_usb_pipe_clk.clkr, 6556 [GCC_USB4_2_SB_IF_CLK] = &gcc_usb4_2_sb_if_clk.clkr, 6557 [GCC_USB4_2_SB_IF_CLK_SRC] = &gcc_usb4_2_sb_if_clk_src.clkr, ··· 6660 [GCC_USB3_UNIPHY_MP0_BCR] = { 0x19000 }, 6661 [GCC_USB3_UNIPHY_MP1_BCR] = { 0x54000 }, 6662 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x50004 }, 6663 + [GCC_USB4PHY_PHY_PRIM_BCR] = { 0x5000c }, 6664 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x2a004 }, 6665 + [GCC_USB4PHY_PHY_SEC_BCR] = { 0x2a00c }, 6666 [GCC_USB3PHY_PHY_TERT_BCR] = { 0xa3004 }, 6667 + [GCC_USB4PHY_PHY_TERT_BCR] = { 0xa300c }, 6668 [GCC_USB3UNIPHY_PHY_MP0_BCR] = { 0x19004 }, 6669 [GCC_USB3UNIPHY_PHY_MP1_BCR] = { 0x54004 }, 6670 [GCC_USB4_0_BCR] = { 0x9f000 }, 6671 [GCC_USB4_0_DP0_PHY_PRIM_BCR] = { 0x50010 }, 6672 + [GCC_USB4_0_MISC_USB4_SYS_BCR] = { .reg = 0xad0f8, .bit = 0 }, 6673 + [GCC_USB4_0_MISC_RX_CLK_0_BCR] = { .reg = 0xad0f8, .bit = 1 }, 6674 + [GCC_USB4_0_MISC_RX_CLK_1_BCR] = { .reg = 0xad0f8, .bit = 2 }, 6675 + [GCC_USB4_0_MISC_USB_PIPE_BCR] = { .reg = 0xad0f8, .bit = 3 }, 6676 + [GCC_USB4_0_MISC_PCIE_PIPE_BCR] = { .reg = 0xad0f8, .bit = 4 }, 6677 + [GCC_USB4_0_MISC_TMU_BCR] = { .reg = 0xad0f8, .bit = 5 }, 6678 + [GCC_USB4_0_MISC_SB_IF_BCR] = { .reg = 0xad0f8, .bit = 6 }, 6679 + [GCC_USB4_0_MISC_HIA_MSTR_BCR] = { .reg = 0xad0f8, .bit = 7 }, 6680 + [GCC_USB4_0_MISC_AHB_BCR] = { .reg = 0xad0f8, .bit = 8 }, 6681 + [GCC_USB4_0_MISC_DP0_MAX_PCLK_BCR] = { .reg = 0xad0f8, .bit = 9 }, 6682 + [GCC_USB4_0_MISC_DP1_MAX_PCLK_BCR] = { .reg = 0xad0f8, .bit = 10 }, 6683 [GCC_USB4_1_BCR] = { 0x2b000 }, 6684 + [GCC_USB4_1_DP0_PHY_SEC_BCR] = { 0x2a010 }, 6685 + [GCC_USB4_1_MISC_USB4_SYS_BCR] = { .reg = 0xae0f8, .bit = 0 }, 6686 + [GCC_USB4_1_MISC_RX_CLK_0_BCR] = { .reg = 0xae0f8, .bit = 1 }, 6687 + [GCC_USB4_1_MISC_RX_CLK_1_BCR] = { .reg = 0xae0f8, .bit = 2 }, 6688 + [GCC_USB4_1_MISC_USB_PIPE_BCR] = { .reg = 0xae0f8, .bit = 3 }, 6689 + [GCC_USB4_1_MISC_PCIE_PIPE_BCR] = { .reg = 0xae0f8, .bit = 4 }, 6690 + [GCC_USB4_1_MISC_TMU_BCR] = { .reg = 0xae0f8, .bit = 5 }, 6691 + [GCC_USB4_1_MISC_SB_IF_BCR] = { .reg = 0xae0f8, .bit = 6 }, 6692 + [GCC_USB4_1_MISC_HIA_MSTR_BCR] = { .reg = 0xae0f8, .bit = 7 }, 6693 + [GCC_USB4_1_MISC_AHB_BCR] = { .reg = 0xae0f8, .bit = 8 }, 6694 + [GCC_USB4_1_MISC_DP0_MAX_PCLK_BCR] = { .reg = 0xae0f8, .bit = 9 }, 6695 + [GCC_USB4_1_MISC_DP1_MAX_PCLK_BCR] = { .reg = 0xae0f8, .bit = 10 }, 6696 [GCC_USB4_2_BCR] = { 0x11000 }, 6697 + [GCC_USB4_2_DP0_PHY_TERT_BCR] = { 0xa3010 }, 6698 + [GCC_USB4_2_MISC_USB4_SYS_BCR] = { .reg = 0xaf0f8, .bit = 0 }, 6699 + [GCC_USB4_2_MISC_RX_CLK_0_BCR] = { .reg = 0xaf0f8, .bit = 1 }, 6700 + [GCC_USB4_2_MISC_RX_CLK_1_BCR] = { .reg = 0xaf0f8, .bit = 2 }, 6701 + [GCC_USB4_2_MISC_USB_PIPE_BCR] = { .reg = 0xaf0f8, .bit = 3 }, 6702 + [GCC_USB4_2_MISC_PCIE_PIPE_BCR] = { .reg = 0xaf0f8, .bit = 4 }, 6703 + [GCC_USB4_2_MISC_TMU_BCR] = { .reg = 0xaf0f8, .bit = 5 }, 6704 + [GCC_USB4_2_MISC_SB_IF_BCR] = { .reg = 0xaf0f8, .bit = 6 }, 6705 + [GCC_USB4_2_MISC_HIA_MSTR_BCR] = { .reg = 0xaf0f8, .bit = 7 }, 6706 + [GCC_USB4_2_MISC_AHB_BCR] = { .reg = 0xaf0f8, .bit = 8 }, 6707 + [GCC_USB4_2_MISC_DP0_MAX_PCLK_BCR] = { .reg = 0xaf0f8, .bit = 9 }, 6708 + [GCC_USB4_2_MISC_DP1_MAX_PCLK_BCR] = { .reg = 0xaf0f8, .bit = 10 }, 6709 [GCC_USB_0_PHY_BCR] = { 0x50020 }, 6710 [GCC_USB_1_PHY_BCR] = { 0x2a020 }, 6711 [GCC_USB_2_PHY_BCR] = { 0xa3020 },
+1
drivers/clk/qcom/mmcc-sdm660.c
··· 2781 }; 2782 2783 static const struct qcom_reset_map mmcc_660_resets[] = { 2784 [CAMSS_MICRO_BCR] = { 0x3490 }, 2785 }; 2786
··· 2781 }; 2782 2783 static const struct qcom_reset_map mmcc_660_resets[] = { 2784 + [MDSS_BCR] = { 0x2300 }, 2785 [CAMSS_MICRO_BCR] = { 0x3490 }, 2786 }; 2787
+1340
drivers/clk/qcom/nsscc-ipq5424.c
···
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. 4 + */ 5 + 6 + #include <linux/clk.h> 7 + #include <linux/clk-provider.h> 8 + #include <linux/err.h> 9 + #include <linux/interconnect-provider.h> 10 + #include <linux/kernel.h> 11 + #include <linux/module.h> 12 + #include <linux/of.h> 13 + #include <linux/of_device.h> 14 + #include <linux/platform_device.h> 15 + #include <linux/pm_clock.h> 16 + #include <linux/pm_runtime.h> 17 + #include <linux/regmap.h> 18 + 19 + #include <dt-bindings/clock/qcom,ipq5424-nsscc.h> 20 + #include <dt-bindings/interconnect/qcom,ipq5424.h> 21 + #include <dt-bindings/reset/qcom,ipq5424-nsscc.h> 22 + 23 + #include "clk-branch.h" 24 + #include "clk-rcg.h" 25 + #include "clk-regmap.h" 26 + #include "clk-regmap-divider.h" 27 + #include "common.h" 28 + #include "reset.h" 29 + 30 + /* Need to match the order of clocks in DT binding */ 31 + enum { 32 + DT_CMN_PLL_XO_CLK, 33 + DT_CMN_PLL_NSS_300M_CLK, 34 + DT_CMN_PLL_NSS_375M_CLK, 35 + DT_GCC_GPLL0_OUT_AUX, 36 + DT_UNIPHY0_NSS_RX_CLK, 37 + DT_UNIPHY0_NSS_TX_CLK, 38 + DT_UNIPHY1_NSS_RX_CLK, 39 + DT_UNIPHY1_NSS_TX_CLK, 40 + DT_UNIPHY2_NSS_RX_CLK, 41 + DT_UNIPHY2_NSS_TX_CLK, 42 + }; 43 + 44 + enum { 45 + P_CMN_PLL_XO_CLK, 46 + P_CMN_PLL_NSS_300M_CLK, 47 + P_CMN_PLL_NSS_375M_CLK, 48 + P_GCC_GPLL0_OUT_AUX, 49 + P_UNIPHY0_NSS_RX_CLK, 50 + P_UNIPHY0_NSS_TX_CLK, 51 + P_UNIPHY1_NSS_RX_CLK, 52 + P_UNIPHY1_NSS_TX_CLK, 53 + P_UNIPHY2_NSS_RX_CLK, 54 + P_UNIPHY2_NSS_TX_CLK, 55 + }; 56 + 57 + static const struct parent_map nss_cc_parent_map_0[] = { 58 + { P_CMN_PLL_XO_CLK, 0 }, 59 + { P_GCC_GPLL0_OUT_AUX, 2 }, 60 + { P_CMN_PLL_NSS_300M_CLK, 5 }, 61 + { P_CMN_PLL_NSS_375M_CLK, 6 }, 62 + }; 63 + 64 + static const struct clk_parent_data nss_cc_parent_data_0[] = { 65 + { .index = DT_CMN_PLL_XO_CLK }, 66 + { .index = DT_GCC_GPLL0_OUT_AUX }, 67 + { .index = DT_CMN_PLL_NSS_300M_CLK }, 68 + { .index = DT_CMN_PLL_NSS_375M_CLK }, 69 + }; 70 + 71 + static const struct parent_map nss_cc_parent_map_1[] = { 72 + { P_CMN_PLL_XO_CLK, 0 }, 73 + { P_GCC_GPLL0_OUT_AUX, 2 }, 74 + { P_UNIPHY0_NSS_RX_CLK, 3 }, 75 + { P_UNIPHY0_NSS_TX_CLK, 4 }, 76 + { P_CMN_PLL_NSS_300M_CLK, 5 }, 77 + { P_CMN_PLL_NSS_375M_CLK, 6 }, 78 + }; 79 + 80 + static const struct clk_parent_data nss_cc_parent_data_1[] = { 81 + { .index = DT_CMN_PLL_XO_CLK }, 82 + { .index = DT_GCC_GPLL0_OUT_AUX }, 83 + { .index = DT_UNIPHY0_NSS_RX_CLK }, 84 + { .index = DT_UNIPHY0_NSS_TX_CLK }, 85 + { .index = DT_CMN_PLL_NSS_300M_CLK }, 86 + { .index = DT_CMN_PLL_NSS_375M_CLK }, 87 + }; 88 + 89 + static const struct parent_map nss_cc_parent_map_2[] = { 90 + { P_CMN_PLL_XO_CLK, 0 }, 91 + { P_GCC_GPLL0_OUT_AUX, 2 }, 92 + { P_UNIPHY1_NSS_RX_CLK, 3 }, 93 + { P_UNIPHY1_NSS_TX_CLK, 4 }, 94 + { P_CMN_PLL_NSS_300M_CLK, 5 }, 95 + { P_CMN_PLL_NSS_375M_CLK, 6 }, 96 + }; 97 + 98 + static const struct clk_parent_data nss_cc_parent_data_2[] = { 99 + { .index = DT_CMN_PLL_XO_CLK }, 100 + { .index = DT_GCC_GPLL0_OUT_AUX }, 101 + { .index = DT_UNIPHY1_NSS_RX_CLK }, 102 + { .index = DT_UNIPHY1_NSS_TX_CLK }, 103 + { .index = DT_CMN_PLL_NSS_300M_CLK }, 104 + { .index = DT_CMN_PLL_NSS_375M_CLK }, 105 + }; 106 + 107 + static const struct parent_map nss_cc_parent_map_3[] = { 108 + { P_CMN_PLL_XO_CLK, 0 }, 109 + { P_GCC_GPLL0_OUT_AUX, 2 }, 110 + { P_UNIPHY2_NSS_RX_CLK, 3 }, 111 + { P_UNIPHY2_NSS_TX_CLK, 4 }, 112 + { P_CMN_PLL_NSS_300M_CLK, 5 }, 113 + { P_CMN_PLL_NSS_375M_CLK, 6 }, 114 + }; 115 + 116 + static const struct clk_parent_data nss_cc_parent_data_3[] = { 117 + { .index = DT_CMN_PLL_XO_CLK }, 118 + { .index = DT_GCC_GPLL0_OUT_AUX }, 119 + { .index = DT_UNIPHY2_NSS_RX_CLK }, 120 + { .index = DT_UNIPHY2_NSS_TX_CLK }, 121 + { .index = DT_CMN_PLL_NSS_300M_CLK }, 122 + { .index = DT_CMN_PLL_NSS_375M_CLK }, 123 + }; 124 + 125 + static const struct freq_tbl ftbl_nss_cc_ce_clk_src[] = { 126 + F(24000000, P_CMN_PLL_XO_CLK, 1, 0, 0), 127 + F(375000000, P_CMN_PLL_NSS_375M_CLK, 1, 0, 0), 128 + { } 129 + }; 130 + 131 + static struct clk_rcg2 nss_cc_ce_clk_src = { 132 + .cmd_rcgr = 0x5e0, 133 + .mnd_width = 0, 134 + .hid_width = 5, 135 + .parent_map = nss_cc_parent_map_0, 136 + .freq_tbl = ftbl_nss_cc_ce_clk_src, 137 + .clkr.hw.init = &(const struct clk_init_data){ 138 + .name = "nss_cc_ce_clk_src", 139 + .parent_data = nss_cc_parent_data_0, 140 + .num_parents = ARRAY_SIZE(nss_cc_parent_data_0), 141 + .flags = CLK_SET_RATE_PARENT, 142 + .ops = &clk_rcg2_ops, 143 + }, 144 + }; 145 + 146 + static const struct freq_tbl ftbl_nss_cc_cfg_clk_src[] = { 147 + F(100000000, P_GCC_GPLL0_OUT_AUX, 8, 0, 0), 148 + { } 149 + }; 150 + 151 + static struct clk_rcg2 nss_cc_cfg_clk_src = { 152 + .cmd_rcgr = 0x6a8, 153 + .mnd_width = 0, 154 + .hid_width = 5, 155 + .parent_map = nss_cc_parent_map_0, 156 + .freq_tbl = ftbl_nss_cc_cfg_clk_src, 157 + .clkr.hw.init = &(const struct clk_init_data){ 158 + .name = "nss_cc_cfg_clk_src", 159 + .parent_data = nss_cc_parent_data_0, 160 + .num_parents = ARRAY_SIZE(nss_cc_parent_data_0), 161 + .flags = CLK_SET_RATE_PARENT, 162 + .ops = &clk_rcg2_ops, 163 + }, 164 + }; 165 + 166 + static const struct freq_tbl ftbl_nss_cc_eip_bfdcd_clk_src[] = { 167 + F(300000000, P_CMN_PLL_NSS_300M_CLK, 1, 0, 0), 168 + F(375000000, P_CMN_PLL_NSS_375M_CLK, 1, 0, 0), 169 + { } 170 + }; 171 + 172 + static struct clk_rcg2 nss_cc_eip_bfdcd_clk_src = { 173 + .cmd_rcgr = 0x644, 174 + .mnd_width = 0, 175 + .hid_width = 5, 176 + .parent_map = nss_cc_parent_map_0, 177 + .freq_tbl = ftbl_nss_cc_eip_bfdcd_clk_src, 178 + .clkr.hw.init = &(const struct clk_init_data){ 179 + .name = "nss_cc_eip_bfdcd_clk_src", 180 + .parent_data = nss_cc_parent_data_0, 181 + .num_parents = ARRAY_SIZE(nss_cc_parent_data_0), 182 + .flags = CLK_SET_RATE_PARENT, 183 + .ops = &clk_rcg2_ops, 184 + }, 185 + }; 186 + 187 + static const struct freq_conf ftbl_nss_cc_port1_rx_clk_src_25[] = { 188 + C(P_UNIPHY0_NSS_RX_CLK, 12.5, 0, 0), 189 + C(P_UNIPHY0_NSS_RX_CLK, 5, 0, 0), 190 + }; 191 + 192 + static const struct freq_conf ftbl_nss_cc_port1_rx_clk_src_125[] = { 193 + C(P_UNIPHY0_NSS_RX_CLK, 2.5, 0, 0), 194 + C(P_UNIPHY0_NSS_RX_CLK, 1, 0, 0), 195 + }; 196 + 197 + static const struct freq_multi_tbl ftbl_nss_cc_port1_rx_clk_src[] = { 198 + FMS(24000000, P_CMN_PLL_XO_CLK, 1, 0, 0), 199 + FM(25000000, ftbl_nss_cc_port1_rx_clk_src_25), 200 + FMS(78125000, P_UNIPHY0_NSS_RX_CLK, 4, 0, 0), 201 + FM(125000000, ftbl_nss_cc_port1_rx_clk_src_125), 202 + FMS(156250000, P_UNIPHY0_NSS_RX_CLK, 2, 0, 0), 203 + FMS(312500000, P_UNIPHY0_NSS_RX_CLK, 1, 0, 0), 204 + { } 205 + }; 206 + 207 + static struct clk_rcg2 nss_cc_port1_rx_clk_src = { 208 + .cmd_rcgr = 0x4b4, 209 + .mnd_width = 0, 210 + .hid_width = 5, 211 + .parent_map = nss_cc_parent_map_1, 212 + .freq_multi_tbl = ftbl_nss_cc_port1_rx_clk_src, 213 + .clkr.hw.init = &(const struct clk_init_data){ 214 + .name = "nss_cc_port1_rx_clk_src", 215 + .parent_data = nss_cc_parent_data_1, 216 + .num_parents = ARRAY_SIZE(nss_cc_parent_data_1), 217 + .ops = &clk_rcg2_fm_ops, 218 + }, 219 + }; 220 + 221 + static const struct freq_conf ftbl_nss_cc_port1_tx_clk_src_25[] = { 222 + C(P_UNIPHY0_NSS_TX_CLK, 12.5, 0, 0), 223 + C(P_UNIPHY0_NSS_TX_CLK, 5, 0, 0), 224 + }; 225 + 226 + static const struct freq_conf ftbl_nss_cc_port1_tx_clk_src_125[] = { 227 + C(P_UNIPHY0_NSS_TX_CLK, 2.5, 0, 0), 228 + C(P_UNIPHY0_NSS_TX_CLK, 1, 0, 0), 229 + }; 230 + 231 + static const struct freq_multi_tbl ftbl_nss_cc_port1_tx_clk_src[] = { 232 + FMS(24000000, P_CMN_PLL_XO_CLK, 1, 0, 0), 233 + FM(25000000, ftbl_nss_cc_port1_tx_clk_src_25), 234 + FMS(78125000, P_UNIPHY0_NSS_TX_CLK, 4, 0, 0), 235 + FM(125000000, ftbl_nss_cc_port1_tx_clk_src_125), 236 + FMS(156250000, P_UNIPHY0_NSS_TX_CLK, 2, 0, 0), 237 + FMS(312500000, P_UNIPHY0_NSS_TX_CLK, 1, 0, 0), 238 + { } 239 + }; 240 + 241 + static struct clk_rcg2 nss_cc_port1_tx_clk_src = { 242 + .cmd_rcgr = 0x4c0, 243 + .mnd_width = 0, 244 + .hid_width = 5, 245 + .parent_map = nss_cc_parent_map_1, 246 + .freq_multi_tbl = ftbl_nss_cc_port1_tx_clk_src, 247 + .clkr.hw.init = &(const struct clk_init_data){ 248 + .name = "nss_cc_port1_tx_clk_src", 249 + .parent_data = nss_cc_parent_data_1, 250 + .num_parents = ARRAY_SIZE(nss_cc_parent_data_1), 251 + .ops = &clk_rcg2_fm_ops, 252 + }, 253 + }; 254 + 255 + static const struct freq_conf ftbl_nss_cc_port2_rx_clk_src_25[] = { 256 + C(P_UNIPHY1_NSS_RX_CLK, 12.5, 0, 0), 257 + C(P_UNIPHY1_NSS_RX_CLK, 5, 0, 0), 258 + }; 259 + 260 + static const struct freq_conf ftbl_nss_cc_port2_rx_clk_src_125[] = { 261 + C(P_UNIPHY1_NSS_RX_CLK, 2.5, 0, 0), 262 + C(P_UNIPHY1_NSS_RX_CLK, 1, 0, 0), 263 + }; 264 + 265 + static const struct freq_multi_tbl ftbl_nss_cc_port2_rx_clk_src[] = { 266 + FMS(24000000, P_CMN_PLL_XO_CLK, 1, 0, 0), 267 + FM(25000000, ftbl_nss_cc_port2_rx_clk_src_25), 268 + FMS(78125000, P_UNIPHY1_NSS_RX_CLK, 4, 0, 0), 269 + FM(125000000, ftbl_nss_cc_port2_rx_clk_src_125), 270 + FMS(156250000, P_UNIPHY1_NSS_RX_CLK, 2, 0, 0), 271 + FMS(312500000, P_UNIPHY1_NSS_RX_CLK, 1, 0, 0), 272 + { } 273 + }; 274 + 275 + static struct clk_rcg2 nss_cc_port2_rx_clk_src = { 276 + .cmd_rcgr = 0x4cc, 277 + .mnd_width = 0, 278 + .hid_width = 5, 279 + .parent_map = nss_cc_parent_map_2, 280 + .freq_multi_tbl = ftbl_nss_cc_port2_rx_clk_src, 281 + .clkr.hw.init = &(const struct clk_init_data){ 282 + .name = "nss_cc_port2_rx_clk_src", 283 + .parent_data = nss_cc_parent_data_2, 284 + .num_parents = ARRAY_SIZE(nss_cc_parent_data_2), 285 + .ops = &clk_rcg2_fm_ops, 286 + }, 287 + }; 288 + 289 + static const struct freq_conf ftbl_nss_cc_port2_tx_clk_src_25[] = { 290 + C(P_UNIPHY1_NSS_TX_CLK, 12.5, 0, 0), 291 + C(P_UNIPHY1_NSS_TX_CLK, 5, 0, 0), 292 + }; 293 + 294 + static const struct freq_conf ftbl_nss_cc_port2_tx_clk_src_125[] = { 295 + C(P_UNIPHY1_NSS_TX_CLK, 2.5, 0, 0), 296 + C(P_UNIPHY1_NSS_TX_CLK, 1, 0, 0), 297 + }; 298 + 299 + static const struct freq_multi_tbl ftbl_nss_cc_port2_tx_clk_src[] = { 300 + FMS(24000000, P_CMN_PLL_XO_CLK, 1, 0, 0), 301 + FM(25000000, ftbl_nss_cc_port2_tx_clk_src_25), 302 + FMS(78125000, P_UNIPHY1_NSS_TX_CLK, 4, 0, 0), 303 + FM(125000000, ftbl_nss_cc_port2_tx_clk_src_125), 304 + FMS(156250000, P_UNIPHY1_NSS_TX_CLK, 2, 0, 0), 305 + FMS(312500000, P_UNIPHY1_NSS_TX_CLK, 1, 0, 0), 306 + { } 307 + }; 308 + 309 + static struct clk_rcg2 nss_cc_port2_tx_clk_src = { 310 + .cmd_rcgr = 0x4d8, 311 + .mnd_width = 0, 312 + .hid_width = 5, 313 + .parent_map = nss_cc_parent_map_2, 314 + .freq_multi_tbl = ftbl_nss_cc_port2_tx_clk_src, 315 + .clkr.hw.init = &(const struct clk_init_data){ 316 + .name = "nss_cc_port2_tx_clk_src", 317 + .parent_data = nss_cc_parent_data_2, 318 + .num_parents = ARRAY_SIZE(nss_cc_parent_data_2), 319 + .ops = &clk_rcg2_fm_ops, 320 + }, 321 + }; 322 + 323 + static const struct freq_conf ftbl_nss_cc_port3_rx_clk_src_25[] = { 324 + C(P_UNIPHY2_NSS_RX_CLK, 12.5, 0, 0), 325 + C(P_UNIPHY2_NSS_RX_CLK, 5, 0, 0), 326 + }; 327 + 328 + static const struct freq_conf ftbl_nss_cc_port3_rx_clk_src_125[] = { 329 + C(P_UNIPHY2_NSS_RX_CLK, 2.5, 0, 0), 330 + C(P_UNIPHY2_NSS_RX_CLK, 1, 0, 0), 331 + }; 332 + 333 + static const struct freq_multi_tbl ftbl_nss_cc_port3_rx_clk_src[] = { 334 + FMS(24000000, P_CMN_PLL_XO_CLK, 1, 0, 0), 335 + FM(25000000, ftbl_nss_cc_port3_rx_clk_src_25), 336 + FMS(78125000, P_UNIPHY2_NSS_RX_CLK, 4, 0, 0), 337 + FM(125000000, ftbl_nss_cc_port3_rx_clk_src_125), 338 + FMS(156250000, P_UNIPHY2_NSS_RX_CLK, 2, 0, 0), 339 + FMS(312500000, P_UNIPHY2_NSS_RX_CLK, 1, 0, 0), 340 + { } 341 + }; 342 + 343 + static struct clk_rcg2 nss_cc_port3_rx_clk_src = { 344 + .cmd_rcgr = 0x4e4, 345 + .mnd_width = 0, 346 + .hid_width = 5, 347 + .parent_map = nss_cc_parent_map_3, 348 + .freq_multi_tbl = ftbl_nss_cc_port3_rx_clk_src, 349 + .clkr.hw.init = &(const struct clk_init_data){ 350 + .name = "nss_cc_port3_rx_clk_src", 351 + .parent_data = nss_cc_parent_data_3, 352 + .num_parents = ARRAY_SIZE(nss_cc_parent_data_3), 353 + .ops = &clk_rcg2_fm_ops, 354 + }, 355 + }; 356 + 357 + static const struct freq_conf ftbl_nss_cc_port3_tx_clk_src_25[] = { 358 + C(P_UNIPHY2_NSS_TX_CLK, 12.5, 0, 0), 359 + C(P_UNIPHY2_NSS_TX_CLK, 5, 0, 0), 360 + }; 361 + 362 + static const struct freq_conf ftbl_nss_cc_port3_tx_clk_src_125[] = { 363 + C(P_UNIPHY2_NSS_TX_CLK, 2.5, 0, 0), 364 + C(P_UNIPHY2_NSS_TX_CLK, 1, 0, 0), 365 + }; 366 + 367 + static const struct freq_multi_tbl ftbl_nss_cc_port3_tx_clk_src[] = { 368 + FMS(24000000, P_CMN_PLL_XO_CLK, 1, 0, 0), 369 + FM(25000000, ftbl_nss_cc_port3_tx_clk_src_25), 370 + FMS(78125000, P_UNIPHY2_NSS_TX_CLK, 4, 0, 0), 371 + FM(125000000, ftbl_nss_cc_port3_tx_clk_src_125), 372 + FMS(156250000, P_UNIPHY2_NSS_TX_CLK, 2, 0, 0), 373 + FMS(312500000, P_UNIPHY2_NSS_TX_CLK, 1, 0, 0), 374 + { } 375 + }; 376 + 377 + static struct clk_rcg2 nss_cc_port3_tx_clk_src = { 378 + .cmd_rcgr = 0x4f0, 379 + .mnd_width = 0, 380 + .hid_width = 5, 381 + .parent_map = nss_cc_parent_map_3, 382 + .freq_multi_tbl = ftbl_nss_cc_port3_tx_clk_src, 383 + .clkr.hw.init = &(const struct clk_init_data){ 384 + .name = "nss_cc_port3_tx_clk_src", 385 + .parent_data = nss_cc_parent_data_3, 386 + .num_parents = ARRAY_SIZE(nss_cc_parent_data_3), 387 + .ops = &clk_rcg2_fm_ops, 388 + }, 389 + }; 390 + 391 + static struct clk_rcg2 nss_cc_ppe_clk_src = { 392 + .cmd_rcgr = 0x3ec, 393 + .mnd_width = 0, 394 + .hid_width = 5, 395 + .parent_map = nss_cc_parent_map_0, 396 + .freq_tbl = ftbl_nss_cc_ce_clk_src, 397 + .clkr.hw.init = &(const struct clk_init_data){ 398 + .name = "nss_cc_ppe_clk_src", 399 + .parent_data = nss_cc_parent_data_0, 400 + .num_parents = ARRAY_SIZE(nss_cc_parent_data_0), 401 + .flags = CLK_SET_RATE_PARENT, 402 + .ops = &clk_rcg2_ops, 403 + }, 404 + }; 405 + 406 + static struct clk_regmap_div nss_cc_port1_rx_div_clk_src = { 407 + .reg = 0x4bc, 408 + .shift = 0, 409 + .width = 9, 410 + .clkr.hw.init = &(const struct clk_init_data) { 411 + .name = "nss_cc_port1_rx_div_clk_src", 412 + .parent_hws = (const struct clk_hw*[]){ 413 + &nss_cc_port1_rx_clk_src.clkr.hw, 414 + }, 415 + .num_parents = 1, 416 + .flags = CLK_SET_RATE_PARENT, 417 + .ops = &clk_regmap_div_ops, 418 + }, 419 + }; 420 + 421 + static struct clk_regmap_div nss_cc_port1_tx_div_clk_src = { 422 + .reg = 0x4c8, 423 + .shift = 0, 424 + .width = 9, 425 + .clkr.hw.init = &(const struct clk_init_data) { 426 + .name = "nss_cc_port1_tx_div_clk_src", 427 + .parent_hws = (const struct clk_hw*[]){ 428 + &nss_cc_port1_tx_clk_src.clkr.hw, 429 + }, 430 + .num_parents = 1, 431 + .flags = CLK_SET_RATE_PARENT, 432 + .ops = &clk_regmap_div_ops, 433 + }, 434 + }; 435 + 436 + static struct clk_regmap_div nss_cc_port2_rx_div_clk_src = { 437 + .reg = 0x4d4, 438 + .shift = 0, 439 + .width = 9, 440 + .clkr.hw.init = &(const struct clk_init_data) { 441 + .name = "nss_cc_port2_rx_div_clk_src", 442 + .parent_hws = (const struct clk_hw*[]){ 443 + &nss_cc_port2_rx_clk_src.clkr.hw, 444 + }, 445 + .num_parents = 1, 446 + .flags = CLK_SET_RATE_PARENT, 447 + .ops = &clk_regmap_div_ops, 448 + }, 449 + }; 450 + 451 + static struct clk_regmap_div nss_cc_port2_tx_div_clk_src = { 452 + .reg = 0x4e0, 453 + .shift = 0, 454 + .width = 9, 455 + .clkr.hw.init = &(const struct clk_init_data) { 456 + .name = "nss_cc_port2_tx_div_clk_src", 457 + .parent_hws = (const struct clk_hw*[]){ 458 + &nss_cc_port2_tx_clk_src.clkr.hw, 459 + }, 460 + .num_parents = 1, 461 + .flags = CLK_SET_RATE_PARENT, 462 + .ops = &clk_regmap_div_ops, 463 + }, 464 + }; 465 + 466 + static struct clk_regmap_div nss_cc_port3_rx_div_clk_src = { 467 + .reg = 0x4ec, 468 + .shift = 0, 469 + .width = 9, 470 + .clkr.hw.init = &(const struct clk_init_data) { 471 + .name = "nss_cc_port3_rx_div_clk_src", 472 + .parent_hws = (const struct clk_hw*[]){ 473 + &nss_cc_port3_rx_clk_src.clkr.hw, 474 + }, 475 + .num_parents = 1, 476 + .flags = CLK_SET_RATE_PARENT, 477 + .ops = &clk_regmap_div_ops, 478 + }, 479 + }; 480 + 481 + static struct clk_regmap_div nss_cc_port3_tx_div_clk_src = { 482 + .reg = 0x4f8, 483 + .shift = 0, 484 + .width = 9, 485 + .clkr.hw.init = &(const struct clk_init_data) { 486 + .name = "nss_cc_port3_tx_div_clk_src", 487 + .parent_hws = (const struct clk_hw*[]){ 488 + &nss_cc_port3_tx_clk_src.clkr.hw, 489 + }, 490 + .num_parents = 1, 491 + .flags = CLK_SET_RATE_PARENT, 492 + .ops = &clk_regmap_div_ops, 493 + }, 494 + }; 495 + 496 + static struct clk_regmap_div nss_cc_xgmac0_ptp_ref_div_clk_src = { 497 + .reg = 0x3f4, 498 + .shift = 0, 499 + .width = 4, 500 + .clkr.hw.init = &(const struct clk_init_data) { 501 + .name = "nss_cc_xgmac0_ptp_ref_div_clk_src", 502 + .parent_hws = (const struct clk_hw*[]){ 503 + &nss_cc_ppe_clk_src.clkr.hw, 504 + }, 505 + .num_parents = 1, 506 + .flags = CLK_SET_RATE_PARENT, 507 + .ops = &clk_regmap_div_ro_ops, 508 + }, 509 + }; 510 + 511 + static struct clk_regmap_div nss_cc_xgmac1_ptp_ref_div_clk_src = { 512 + .reg = 0x3f8, 513 + .shift = 0, 514 + .width = 4, 515 + .clkr.hw.init = &(const struct clk_init_data) { 516 + .name = "nss_cc_xgmac1_ptp_ref_div_clk_src", 517 + .parent_hws = (const struct clk_hw*[]){ 518 + &nss_cc_ppe_clk_src.clkr.hw, 519 + }, 520 + .num_parents = 1, 521 + .flags = CLK_SET_RATE_PARENT, 522 + .ops = &clk_regmap_div_ro_ops, 523 + }, 524 + }; 525 + 526 + static struct clk_regmap_div nss_cc_xgmac2_ptp_ref_div_clk_src = { 527 + .reg = 0x3fc, 528 + .shift = 0, 529 + .width = 4, 530 + .clkr.hw.init = &(const struct clk_init_data) { 531 + .name = "nss_cc_xgmac2_ptp_ref_div_clk_src", 532 + .parent_hws = (const struct clk_hw*[]){ 533 + &nss_cc_ppe_clk_src.clkr.hw, 534 + }, 535 + .num_parents = 1, 536 + .flags = CLK_SET_RATE_PARENT, 537 + .ops = &clk_regmap_div_ro_ops, 538 + }, 539 + }; 540 + 541 + static struct clk_branch nss_cc_ce_apb_clk = { 542 + .halt_reg = 0x5e8, 543 + .halt_check = BRANCH_HALT, 544 + .clkr = { 545 + .enable_reg = 0x5e8, 546 + .enable_mask = BIT(0), 547 + .hw.init = &(const struct clk_init_data){ 548 + .name = "nss_cc_ce_apb_clk", 549 + .parent_hws = (const struct clk_hw*[]){ 550 + &nss_cc_ce_clk_src.clkr.hw, 551 + }, 552 + .num_parents = 1, 553 + .flags = CLK_SET_RATE_PARENT, 554 + .ops = &clk_branch2_ops, 555 + }, 556 + }, 557 + }; 558 + 559 + static struct clk_branch nss_cc_ce_axi_clk = { 560 + .halt_reg = 0x5ec, 561 + .halt_check = BRANCH_HALT, 562 + .clkr = { 563 + .enable_reg = 0x5ec, 564 + .enable_mask = BIT(0), 565 + .hw.init = &(const struct clk_init_data){ 566 + .name = "nss_cc_ce_axi_clk", 567 + .parent_hws = (const struct clk_hw*[]){ 568 + &nss_cc_ce_clk_src.clkr.hw, 569 + }, 570 + .num_parents = 1, 571 + .flags = CLK_SET_RATE_PARENT, 572 + .ops = &clk_branch2_ops, 573 + }, 574 + }, 575 + }; 576 + 577 + static struct clk_branch nss_cc_debug_clk = { 578 + .halt_reg = 0x70c, 579 + .halt_check = BRANCH_HALT, 580 + .clkr = { 581 + .enable_reg = 0x70c, 582 + .enable_mask = BIT(0), 583 + .hw.init = &(const struct clk_init_data){ 584 + .name = "nss_cc_debug_clk", 585 + .ops = &clk_branch2_ops, 586 + }, 587 + }, 588 + }; 589 + 590 + static struct clk_branch nss_cc_eip_clk = { 591 + .halt_reg = 0x658, 592 + .halt_check = BRANCH_HALT, 593 + .clkr = { 594 + .enable_reg = 0x658, 595 + .enable_mask = BIT(0), 596 + .hw.init = &(const struct clk_init_data){ 597 + .name = "nss_cc_eip_clk", 598 + .parent_hws = (const struct clk_hw*[]){ 599 + &nss_cc_eip_bfdcd_clk_src.clkr.hw, 600 + }, 601 + .num_parents = 1, 602 + .flags = CLK_SET_RATE_PARENT, 603 + .ops = &clk_branch2_ops, 604 + }, 605 + }, 606 + }; 607 + 608 + static struct clk_branch nss_cc_nss_csr_clk = { 609 + .halt_reg = 0x6b0, 610 + .halt_check = BRANCH_HALT, 611 + .clkr = { 612 + .enable_reg = 0x6b0, 613 + .enable_mask = BIT(0), 614 + .hw.init = &(const struct clk_init_data){ 615 + .name = "nss_cc_nss_csr_clk", 616 + .parent_hws = (const struct clk_hw*[]){ 617 + &nss_cc_cfg_clk_src.clkr.hw, 618 + }, 619 + .num_parents = 1, 620 + .flags = CLK_SET_RATE_PARENT, 621 + .ops = &clk_branch2_ops, 622 + }, 623 + }, 624 + }; 625 + 626 + static struct clk_branch nss_cc_nssnoc_ce_apb_clk = { 627 + .halt_reg = 0x5f4, 628 + .halt_check = BRANCH_HALT, 629 + .clkr = { 630 + .enable_reg = 0x5f4, 631 + .enable_mask = BIT(0), 632 + .hw.init = &(const struct clk_init_data){ 633 + .name = "nss_cc_nssnoc_ce_apb_clk", 634 + .parent_hws = (const struct clk_hw*[]){ 635 + &nss_cc_ce_clk_src.clkr.hw, 636 + }, 637 + .num_parents = 1, 638 + .flags = CLK_SET_RATE_PARENT, 639 + .ops = &clk_branch2_ops, 640 + }, 641 + }, 642 + }; 643 + 644 + static struct clk_branch nss_cc_nssnoc_ce_axi_clk = { 645 + .halt_reg = 0x5f8, 646 + .halt_check = BRANCH_HALT, 647 + .clkr = { 648 + .enable_reg = 0x5f8, 649 + .enable_mask = BIT(0), 650 + .hw.init = &(const struct clk_init_data){ 651 + .name = "nss_cc_nssnoc_ce_axi_clk", 652 + .parent_hws = (const struct clk_hw*[]){ 653 + &nss_cc_ce_clk_src.clkr.hw, 654 + }, 655 + .num_parents = 1, 656 + .flags = CLK_SET_RATE_PARENT, 657 + .ops = &clk_branch2_ops, 658 + }, 659 + }, 660 + }; 661 + 662 + static struct clk_branch nss_cc_nssnoc_eip_clk = { 663 + .halt_reg = 0x660, 664 + .halt_check = BRANCH_HALT, 665 + .clkr = { 666 + .enable_reg = 0x660, 667 + .enable_mask = BIT(0), 668 + .hw.init = &(const struct clk_init_data){ 669 + .name = "nss_cc_nssnoc_eip_clk", 670 + .parent_hws = (const struct clk_hw*[]){ 671 + &nss_cc_eip_bfdcd_clk_src.clkr.hw, 672 + }, 673 + .num_parents = 1, 674 + .flags = CLK_SET_RATE_PARENT, 675 + .ops = &clk_branch2_ops, 676 + }, 677 + }, 678 + }; 679 + 680 + static struct clk_branch nss_cc_nssnoc_nss_csr_clk = { 681 + .halt_reg = 0x6b4, 682 + .halt_check = BRANCH_HALT, 683 + .clkr = { 684 + .enable_reg = 0x6b4, 685 + .enable_mask = BIT(0), 686 + .hw.init = &(const struct clk_init_data){ 687 + .name = "nss_cc_nssnoc_nss_csr_clk", 688 + .parent_hws = (const struct clk_hw*[]){ 689 + &nss_cc_cfg_clk_src.clkr.hw, 690 + }, 691 + .num_parents = 1, 692 + .flags = CLK_SET_RATE_PARENT, 693 + .ops = &clk_branch2_ops, 694 + }, 695 + }, 696 + }; 697 + 698 + static struct clk_branch nss_cc_nssnoc_ppe_cfg_clk = { 699 + .halt_reg = 0x444, 700 + .halt_check = BRANCH_HALT, 701 + .clkr = { 702 + .enable_reg = 0x444, 703 + .enable_mask = BIT(0), 704 + .hw.init = &(const struct clk_init_data){ 705 + .name = "nss_cc_nssnoc_ppe_cfg_clk", 706 + .parent_hws = (const struct clk_hw*[]){ 707 + &nss_cc_ppe_clk_src.clkr.hw, 708 + }, 709 + .num_parents = 1, 710 + .flags = CLK_SET_RATE_PARENT, 711 + .ops = &clk_branch2_ops, 712 + }, 713 + }, 714 + }; 715 + 716 + static struct clk_branch nss_cc_nssnoc_ppe_clk = { 717 + .halt_reg = 0x440, 718 + .halt_check = BRANCH_HALT, 719 + .clkr = { 720 + .enable_reg = 0x440, 721 + .enable_mask = BIT(0), 722 + .hw.init = &(const struct clk_init_data){ 723 + .name = "nss_cc_nssnoc_ppe_clk", 724 + .parent_hws = (const struct clk_hw*[]){ 725 + &nss_cc_ppe_clk_src.clkr.hw, 726 + }, 727 + .num_parents = 1, 728 + .flags = CLK_SET_RATE_PARENT, 729 + .ops = &clk_branch2_ops, 730 + }, 731 + }, 732 + }; 733 + 734 + static struct clk_branch nss_cc_port1_mac_clk = { 735 + .halt_reg = 0x428, 736 + .halt_check = BRANCH_HALT, 737 + .clkr = { 738 + .enable_reg = 0x428, 739 + .enable_mask = BIT(0), 740 + .hw.init = &(const struct clk_init_data){ 741 + .name = "nss_cc_port1_mac_clk", 742 + .parent_hws = (const struct clk_hw*[]){ 743 + &nss_cc_ppe_clk_src.clkr.hw, 744 + }, 745 + .num_parents = 1, 746 + .flags = CLK_SET_RATE_PARENT, 747 + .ops = &clk_branch2_ops, 748 + }, 749 + }, 750 + }; 751 + 752 + static struct clk_branch nss_cc_port1_rx_clk = { 753 + .halt_reg = 0x4fc, 754 + .halt_check = BRANCH_HALT, 755 + .clkr = { 756 + .enable_reg = 0x4fc, 757 + .enable_mask = BIT(0), 758 + .hw.init = &(const struct clk_init_data){ 759 + .name = "nss_cc_port1_rx_clk", 760 + .parent_hws = (const struct clk_hw*[]){ 761 + &nss_cc_port1_rx_div_clk_src.clkr.hw, 762 + }, 763 + .num_parents = 1, 764 + .flags = CLK_SET_RATE_PARENT, 765 + .ops = &clk_branch2_ops, 766 + }, 767 + }, 768 + }; 769 + 770 + static struct clk_branch nss_cc_port1_tx_clk = { 771 + .halt_reg = 0x504, 772 + .halt_check = BRANCH_HALT, 773 + .clkr = { 774 + .enable_reg = 0x504, 775 + .enable_mask = BIT(0), 776 + .hw.init = &(const struct clk_init_data){ 777 + .name = "nss_cc_port1_tx_clk", 778 + .parent_hws = (const struct clk_hw*[]){ 779 + &nss_cc_port1_tx_div_clk_src.clkr.hw, 780 + }, 781 + .num_parents = 1, 782 + .flags = CLK_SET_RATE_PARENT, 783 + .ops = &clk_branch2_ops, 784 + }, 785 + }, 786 + }; 787 + 788 + static struct clk_branch nss_cc_port2_mac_clk = { 789 + .halt_reg = 0x430, 790 + .halt_check = BRANCH_HALT, 791 + .clkr = { 792 + .enable_reg = 0x430, 793 + .enable_mask = BIT(0), 794 + .hw.init = &(const struct clk_init_data){ 795 + .name = "nss_cc_port2_mac_clk", 796 + .parent_hws = (const struct clk_hw*[]){ 797 + &nss_cc_ppe_clk_src.clkr.hw, 798 + }, 799 + .num_parents = 1, 800 + .flags = CLK_SET_RATE_PARENT, 801 + .ops = &clk_branch2_ops, 802 + }, 803 + }, 804 + }; 805 + 806 + static struct clk_branch nss_cc_port2_rx_clk = { 807 + .halt_reg = 0x50c, 808 + .halt_check = BRANCH_HALT, 809 + .clkr = { 810 + .enable_reg = 0x50c, 811 + .enable_mask = BIT(0), 812 + .hw.init = &(const struct clk_init_data){ 813 + .name = "nss_cc_port2_rx_clk", 814 + .parent_hws = (const struct clk_hw*[]){ 815 + &nss_cc_port2_rx_div_clk_src.clkr.hw, 816 + }, 817 + .num_parents = 1, 818 + .flags = CLK_SET_RATE_PARENT, 819 + .ops = &clk_branch2_ops, 820 + }, 821 + }, 822 + }; 823 + 824 + static struct clk_branch nss_cc_port2_tx_clk = { 825 + .halt_reg = 0x514, 826 + .halt_check = BRANCH_HALT, 827 + .clkr = { 828 + .enable_reg = 0x514, 829 + .enable_mask = BIT(0), 830 + .hw.init = &(const struct clk_init_data){ 831 + .name = "nss_cc_port2_tx_clk", 832 + .parent_hws = (const struct clk_hw*[]){ 833 + &nss_cc_port2_tx_div_clk_src.clkr.hw, 834 + }, 835 + .num_parents = 1, 836 + .flags = CLK_SET_RATE_PARENT, 837 + .ops = &clk_branch2_ops, 838 + }, 839 + }, 840 + }; 841 + 842 + static struct clk_branch nss_cc_port3_mac_clk = { 843 + .halt_reg = 0x438, 844 + .halt_check = BRANCH_HALT, 845 + .clkr = { 846 + .enable_reg = 0x438, 847 + .enable_mask = BIT(0), 848 + .hw.init = &(const struct clk_init_data){ 849 + .name = "nss_cc_port3_mac_clk", 850 + .parent_hws = (const struct clk_hw*[]){ 851 + &nss_cc_ppe_clk_src.clkr.hw, 852 + }, 853 + .num_parents = 1, 854 + .flags = CLK_SET_RATE_PARENT, 855 + .ops = &clk_branch2_ops, 856 + }, 857 + }, 858 + }; 859 + 860 + static struct clk_branch nss_cc_port3_rx_clk = { 861 + .halt_reg = 0x51c, 862 + .halt_check = BRANCH_HALT, 863 + .clkr = { 864 + .enable_reg = 0x51c, 865 + .enable_mask = BIT(0), 866 + .hw.init = &(const struct clk_init_data){ 867 + .name = "nss_cc_port3_rx_clk", 868 + .parent_hws = (const struct clk_hw*[]){ 869 + &nss_cc_port3_rx_div_clk_src.clkr.hw, 870 + }, 871 + .num_parents = 1, 872 + .flags = CLK_SET_RATE_PARENT, 873 + .ops = &clk_branch2_ops, 874 + }, 875 + }, 876 + }; 877 + 878 + static struct clk_branch nss_cc_port3_tx_clk = { 879 + .halt_reg = 0x524, 880 + .halt_check = BRANCH_HALT, 881 + .clkr = { 882 + .enable_reg = 0x524, 883 + .enable_mask = BIT(0), 884 + .hw.init = &(const struct clk_init_data){ 885 + .name = "nss_cc_port3_tx_clk", 886 + .parent_hws = (const struct clk_hw*[]){ 887 + &nss_cc_port3_tx_div_clk_src.clkr.hw, 888 + }, 889 + .num_parents = 1, 890 + .flags = CLK_SET_RATE_PARENT, 891 + .ops = &clk_branch2_ops, 892 + }, 893 + }, 894 + }; 895 + 896 + static struct clk_branch nss_cc_ppe_edma_cfg_clk = { 897 + .halt_reg = 0x424, 898 + .halt_check = BRANCH_HALT, 899 + .clkr = { 900 + .enable_reg = 0x424, 901 + .enable_mask = BIT(0), 902 + .hw.init = &(const struct clk_init_data){ 903 + .name = "nss_cc_ppe_edma_cfg_clk", 904 + .parent_hws = (const struct clk_hw*[]){ 905 + &nss_cc_ppe_clk_src.clkr.hw, 906 + }, 907 + .num_parents = 1, 908 + .flags = CLK_SET_RATE_PARENT, 909 + .ops = &clk_branch2_ops, 910 + }, 911 + }, 912 + }; 913 + 914 + static struct clk_branch nss_cc_ppe_edma_clk = { 915 + .halt_reg = 0x41c, 916 + .halt_check = BRANCH_HALT, 917 + .clkr = { 918 + .enable_reg = 0x41c, 919 + .enable_mask = BIT(0), 920 + .hw.init = &(const struct clk_init_data){ 921 + .name = "nss_cc_ppe_edma_clk", 922 + .parent_hws = (const struct clk_hw*[]){ 923 + &nss_cc_ppe_clk_src.clkr.hw, 924 + }, 925 + .num_parents = 1, 926 + .flags = CLK_SET_RATE_PARENT, 927 + .ops = &clk_branch2_ops, 928 + }, 929 + }, 930 + }; 931 + 932 + static struct clk_branch nss_cc_ppe_switch_btq_clk = { 933 + .halt_reg = 0x408, 934 + .halt_check = BRANCH_HALT, 935 + .clkr = { 936 + .enable_reg = 0x408, 937 + .enable_mask = BIT(0), 938 + .hw.init = &(const struct clk_init_data){ 939 + .name = "nss_cc_ppe_switch_btq_clk", 940 + .parent_hws = (const struct clk_hw*[]){ 941 + &nss_cc_ppe_clk_src.clkr.hw, 942 + }, 943 + .num_parents = 1, 944 + .flags = CLK_SET_RATE_PARENT, 945 + .ops = &clk_branch2_ops, 946 + }, 947 + }, 948 + }; 949 + 950 + static struct clk_branch nss_cc_ppe_switch_cfg_clk = { 951 + .halt_reg = 0x418, 952 + .halt_check = BRANCH_HALT, 953 + .clkr = { 954 + .enable_reg = 0x418, 955 + .enable_mask = BIT(0), 956 + .hw.init = &(const struct clk_init_data){ 957 + .name = "nss_cc_ppe_switch_cfg_clk", 958 + .parent_hws = (const struct clk_hw*[]){ 959 + &nss_cc_ppe_clk_src.clkr.hw, 960 + }, 961 + .num_parents = 1, 962 + .flags = CLK_SET_RATE_PARENT, 963 + .ops = &clk_branch2_ops, 964 + }, 965 + }, 966 + }; 967 + 968 + static struct clk_branch nss_cc_ppe_switch_clk = { 969 + .halt_reg = 0x410, 970 + .halt_check = BRANCH_HALT, 971 + .clkr = { 972 + .enable_reg = 0x410, 973 + .enable_mask = BIT(0), 974 + .hw.init = &(const struct clk_init_data){ 975 + .name = "nss_cc_ppe_switch_clk", 976 + .parent_hws = (const struct clk_hw*[]){ 977 + &nss_cc_ppe_clk_src.clkr.hw, 978 + }, 979 + .num_parents = 1, 980 + .flags = CLK_SET_RATE_PARENT, 981 + .ops = &clk_branch2_ops, 982 + }, 983 + }, 984 + }; 985 + 986 + static struct clk_branch nss_cc_ppe_switch_ipe_clk = { 987 + .halt_reg = 0x400, 988 + .halt_check = BRANCH_HALT, 989 + .clkr = { 990 + .enable_reg = 0x400, 991 + .enable_mask = BIT(0), 992 + .hw.init = &(const struct clk_init_data){ 993 + .name = "nss_cc_ppe_switch_ipe_clk", 994 + .parent_hws = (const struct clk_hw*[]){ 995 + &nss_cc_ppe_clk_src.clkr.hw, 996 + }, 997 + .num_parents = 1, 998 + .flags = CLK_SET_RATE_PARENT, 999 + .ops = &clk_branch2_ops, 1000 + }, 1001 + }, 1002 + }; 1003 + 1004 + static struct clk_branch nss_cc_uniphy_port1_rx_clk = { 1005 + .halt_reg = 0x57c, 1006 + .halt_check = BRANCH_HALT, 1007 + .clkr = { 1008 + .enable_reg = 0x57c, 1009 + .enable_mask = BIT(0), 1010 + .hw.init = &(const struct clk_init_data){ 1011 + .name = "nss_cc_uniphy_port1_rx_clk", 1012 + .parent_hws = (const struct clk_hw*[]){ 1013 + &nss_cc_port1_rx_div_clk_src.clkr.hw, 1014 + }, 1015 + .num_parents = 1, 1016 + .flags = CLK_SET_RATE_PARENT, 1017 + .ops = &clk_branch2_ops, 1018 + }, 1019 + }, 1020 + }; 1021 + 1022 + static struct clk_branch nss_cc_uniphy_port1_tx_clk = { 1023 + .halt_reg = 0x580, 1024 + .halt_check = BRANCH_HALT, 1025 + .clkr = { 1026 + .enable_reg = 0x580, 1027 + .enable_mask = BIT(0), 1028 + .hw.init = &(const struct clk_init_data){ 1029 + .name = "nss_cc_uniphy_port1_tx_clk", 1030 + .parent_hws = (const struct clk_hw*[]){ 1031 + &nss_cc_port1_tx_div_clk_src.clkr.hw, 1032 + }, 1033 + .num_parents = 1, 1034 + .flags = CLK_SET_RATE_PARENT, 1035 + .ops = &clk_branch2_ops, 1036 + }, 1037 + }, 1038 + }; 1039 + 1040 + static struct clk_branch nss_cc_uniphy_port2_rx_clk = { 1041 + .halt_reg = 0x584, 1042 + .halt_check = BRANCH_HALT, 1043 + .clkr = { 1044 + .enable_reg = 0x584, 1045 + .enable_mask = BIT(0), 1046 + .hw.init = &(const struct clk_init_data){ 1047 + .name = "nss_cc_uniphy_port2_rx_clk", 1048 + .parent_hws = (const struct clk_hw*[]){ 1049 + &nss_cc_port2_rx_div_clk_src.clkr.hw, 1050 + }, 1051 + .num_parents = 1, 1052 + .flags = CLK_SET_RATE_PARENT, 1053 + .ops = &clk_branch2_ops, 1054 + }, 1055 + }, 1056 + }; 1057 + 1058 + static struct clk_branch nss_cc_uniphy_port2_tx_clk = { 1059 + .halt_reg = 0x588, 1060 + .halt_check = BRANCH_HALT, 1061 + .clkr = { 1062 + .enable_reg = 0x588, 1063 + .enable_mask = BIT(0), 1064 + .hw.init = &(const struct clk_init_data){ 1065 + .name = "nss_cc_uniphy_port2_tx_clk", 1066 + .parent_hws = (const struct clk_hw*[]){ 1067 + &nss_cc_port2_tx_div_clk_src.clkr.hw, 1068 + }, 1069 + .num_parents = 1, 1070 + .flags = CLK_SET_RATE_PARENT, 1071 + .ops = &clk_branch2_ops, 1072 + }, 1073 + }, 1074 + }; 1075 + 1076 + static struct clk_branch nss_cc_uniphy_port3_rx_clk = { 1077 + .halt_reg = 0x58c, 1078 + .halt_check = BRANCH_HALT, 1079 + .clkr = { 1080 + .enable_reg = 0x58c, 1081 + .enable_mask = BIT(0), 1082 + .hw.init = &(const struct clk_init_data){ 1083 + .name = "nss_cc_uniphy_port3_rx_clk", 1084 + .parent_hws = (const struct clk_hw*[]){ 1085 + &nss_cc_port3_rx_div_clk_src.clkr.hw, 1086 + }, 1087 + .num_parents = 1, 1088 + .flags = CLK_SET_RATE_PARENT, 1089 + .ops = &clk_branch2_ops, 1090 + }, 1091 + }, 1092 + }; 1093 + 1094 + static struct clk_branch nss_cc_uniphy_port3_tx_clk = { 1095 + .halt_reg = 0x590, 1096 + .halt_check = BRANCH_HALT, 1097 + .clkr = { 1098 + .enable_reg = 0x590, 1099 + .enable_mask = BIT(0), 1100 + .hw.init = &(const struct clk_init_data){ 1101 + .name = "nss_cc_uniphy_port3_tx_clk", 1102 + .parent_hws = (const struct clk_hw*[]){ 1103 + &nss_cc_port3_tx_div_clk_src.clkr.hw, 1104 + }, 1105 + .num_parents = 1, 1106 + .flags = CLK_SET_RATE_PARENT, 1107 + .ops = &clk_branch2_ops, 1108 + }, 1109 + }, 1110 + }; 1111 + 1112 + static struct clk_branch nss_cc_xgmac0_ptp_ref_clk = { 1113 + .halt_reg = 0x448, 1114 + .halt_check = BRANCH_HALT, 1115 + .clkr = { 1116 + .enable_reg = 0x448, 1117 + .enable_mask = BIT(0), 1118 + .hw.init = &(const struct clk_init_data){ 1119 + .name = "nss_cc_xgmac0_ptp_ref_clk", 1120 + .parent_hws = (const struct clk_hw*[]){ 1121 + &nss_cc_xgmac0_ptp_ref_div_clk_src.clkr.hw, 1122 + }, 1123 + .num_parents = 1, 1124 + .flags = CLK_SET_RATE_PARENT, 1125 + .ops = &clk_branch2_ops, 1126 + }, 1127 + }, 1128 + }; 1129 + 1130 + static struct clk_branch nss_cc_xgmac1_ptp_ref_clk = { 1131 + .halt_reg = 0x44c, 1132 + .halt_check = BRANCH_HALT, 1133 + .clkr = { 1134 + .enable_reg = 0x44c, 1135 + .enable_mask = BIT(0), 1136 + .hw.init = &(const struct clk_init_data){ 1137 + .name = "nss_cc_xgmac1_ptp_ref_clk", 1138 + .parent_hws = (const struct clk_hw*[]){ 1139 + &nss_cc_xgmac1_ptp_ref_div_clk_src.clkr.hw, 1140 + }, 1141 + .num_parents = 1, 1142 + .flags = CLK_SET_RATE_PARENT, 1143 + .ops = &clk_branch2_ops, 1144 + }, 1145 + }, 1146 + }; 1147 + 1148 + static struct clk_branch nss_cc_xgmac2_ptp_ref_clk = { 1149 + .halt_reg = 0x450, 1150 + .halt_check = BRANCH_HALT, 1151 + .clkr = { 1152 + .enable_reg = 0x450, 1153 + .enable_mask = BIT(0), 1154 + .hw.init = &(const struct clk_init_data){ 1155 + .name = "nss_cc_xgmac2_ptp_ref_clk", 1156 + .parent_hws = (const struct clk_hw*[]){ 1157 + &nss_cc_xgmac2_ptp_ref_div_clk_src.clkr.hw, 1158 + }, 1159 + .num_parents = 1, 1160 + .flags = CLK_SET_RATE_PARENT, 1161 + .ops = &clk_branch2_ops, 1162 + }, 1163 + }, 1164 + }; 1165 + 1166 + static struct clk_regmap *nss_cc_ipq5424_clocks[] = { 1167 + [NSS_CC_CE_APB_CLK] = &nss_cc_ce_apb_clk.clkr, 1168 + [NSS_CC_CE_AXI_CLK] = &nss_cc_ce_axi_clk.clkr, 1169 + [NSS_CC_CE_CLK_SRC] = &nss_cc_ce_clk_src.clkr, 1170 + [NSS_CC_CFG_CLK_SRC] = &nss_cc_cfg_clk_src.clkr, 1171 + [NSS_CC_DEBUG_CLK] = &nss_cc_debug_clk.clkr, 1172 + [NSS_CC_EIP_BFDCD_CLK_SRC] = &nss_cc_eip_bfdcd_clk_src.clkr, 1173 + [NSS_CC_EIP_CLK] = &nss_cc_eip_clk.clkr, 1174 + [NSS_CC_NSS_CSR_CLK] = &nss_cc_nss_csr_clk.clkr, 1175 + [NSS_CC_NSSNOC_CE_APB_CLK] = &nss_cc_nssnoc_ce_apb_clk.clkr, 1176 + [NSS_CC_NSSNOC_CE_AXI_CLK] = &nss_cc_nssnoc_ce_axi_clk.clkr, 1177 + [NSS_CC_NSSNOC_EIP_CLK] = &nss_cc_nssnoc_eip_clk.clkr, 1178 + [NSS_CC_NSSNOC_NSS_CSR_CLK] = &nss_cc_nssnoc_nss_csr_clk.clkr, 1179 + [NSS_CC_NSSNOC_PPE_CFG_CLK] = &nss_cc_nssnoc_ppe_cfg_clk.clkr, 1180 + [NSS_CC_NSSNOC_PPE_CLK] = &nss_cc_nssnoc_ppe_clk.clkr, 1181 + [NSS_CC_PORT1_MAC_CLK] = &nss_cc_port1_mac_clk.clkr, 1182 + [NSS_CC_PORT1_RX_CLK] = &nss_cc_port1_rx_clk.clkr, 1183 + [NSS_CC_PORT1_RX_CLK_SRC] = &nss_cc_port1_rx_clk_src.clkr, 1184 + [NSS_CC_PORT1_RX_DIV_CLK_SRC] = &nss_cc_port1_rx_div_clk_src.clkr, 1185 + [NSS_CC_PORT1_TX_CLK] = &nss_cc_port1_tx_clk.clkr, 1186 + [NSS_CC_PORT1_TX_CLK_SRC] = &nss_cc_port1_tx_clk_src.clkr, 1187 + [NSS_CC_PORT1_TX_DIV_CLK_SRC] = &nss_cc_port1_tx_div_clk_src.clkr, 1188 + [NSS_CC_PORT2_MAC_CLK] = &nss_cc_port2_mac_clk.clkr, 1189 + [NSS_CC_PORT2_RX_CLK] = &nss_cc_port2_rx_clk.clkr, 1190 + [NSS_CC_PORT2_RX_CLK_SRC] = &nss_cc_port2_rx_clk_src.clkr, 1191 + [NSS_CC_PORT2_RX_DIV_CLK_SRC] = &nss_cc_port2_rx_div_clk_src.clkr, 1192 + [NSS_CC_PORT2_TX_CLK] = &nss_cc_port2_tx_clk.clkr, 1193 + [NSS_CC_PORT2_TX_CLK_SRC] = &nss_cc_port2_tx_clk_src.clkr, 1194 + [NSS_CC_PORT2_TX_DIV_CLK_SRC] = &nss_cc_port2_tx_div_clk_src.clkr, 1195 + [NSS_CC_PORT3_MAC_CLK] = &nss_cc_port3_mac_clk.clkr, 1196 + [NSS_CC_PORT3_RX_CLK] = &nss_cc_port3_rx_clk.clkr, 1197 + [NSS_CC_PORT3_RX_CLK_SRC] = &nss_cc_port3_rx_clk_src.clkr, 1198 + [NSS_CC_PORT3_RX_DIV_CLK_SRC] = &nss_cc_port3_rx_div_clk_src.clkr, 1199 + [NSS_CC_PORT3_TX_CLK] = &nss_cc_port3_tx_clk.clkr, 1200 + [NSS_CC_PORT3_TX_CLK_SRC] = &nss_cc_port3_tx_clk_src.clkr, 1201 + [NSS_CC_PORT3_TX_DIV_CLK_SRC] = &nss_cc_port3_tx_div_clk_src.clkr, 1202 + [NSS_CC_PPE_CLK_SRC] = &nss_cc_ppe_clk_src.clkr, 1203 + [NSS_CC_PPE_EDMA_CFG_CLK] = &nss_cc_ppe_edma_cfg_clk.clkr, 1204 + [NSS_CC_PPE_EDMA_CLK] = &nss_cc_ppe_edma_clk.clkr, 1205 + [NSS_CC_PPE_SWITCH_BTQ_CLK] = &nss_cc_ppe_switch_btq_clk.clkr, 1206 + [NSS_CC_PPE_SWITCH_CFG_CLK] = &nss_cc_ppe_switch_cfg_clk.clkr, 1207 + [NSS_CC_PPE_SWITCH_CLK] = &nss_cc_ppe_switch_clk.clkr, 1208 + [NSS_CC_PPE_SWITCH_IPE_CLK] = &nss_cc_ppe_switch_ipe_clk.clkr, 1209 + [NSS_CC_UNIPHY_PORT1_RX_CLK] = &nss_cc_uniphy_port1_rx_clk.clkr, 1210 + [NSS_CC_UNIPHY_PORT1_TX_CLK] = &nss_cc_uniphy_port1_tx_clk.clkr, 1211 + [NSS_CC_UNIPHY_PORT2_RX_CLK] = &nss_cc_uniphy_port2_rx_clk.clkr, 1212 + [NSS_CC_UNIPHY_PORT2_TX_CLK] = &nss_cc_uniphy_port2_tx_clk.clkr, 1213 + [NSS_CC_UNIPHY_PORT3_RX_CLK] = &nss_cc_uniphy_port3_rx_clk.clkr, 1214 + [NSS_CC_UNIPHY_PORT3_TX_CLK] = &nss_cc_uniphy_port3_tx_clk.clkr, 1215 + [NSS_CC_XGMAC0_PTP_REF_CLK] = &nss_cc_xgmac0_ptp_ref_clk.clkr, 1216 + [NSS_CC_XGMAC0_PTP_REF_DIV_CLK_SRC] = &nss_cc_xgmac0_ptp_ref_div_clk_src.clkr, 1217 + [NSS_CC_XGMAC1_PTP_REF_CLK] = &nss_cc_xgmac1_ptp_ref_clk.clkr, 1218 + [NSS_CC_XGMAC1_PTP_REF_DIV_CLK_SRC] = &nss_cc_xgmac1_ptp_ref_div_clk_src.clkr, 1219 + [NSS_CC_XGMAC2_PTP_REF_CLK] = &nss_cc_xgmac2_ptp_ref_clk.clkr, 1220 + [NSS_CC_XGMAC2_PTP_REF_DIV_CLK_SRC] = &nss_cc_xgmac2_ptp_ref_div_clk_src.clkr, 1221 + }; 1222 + 1223 + static const struct qcom_reset_map nss_cc_ipq5424_resets[] = { 1224 + [NSS_CC_CE_APB_CLK_ARES] = { 0x5e8, 2 }, 1225 + [NSS_CC_CE_AXI_CLK_ARES] = { 0x5ec, 2 }, 1226 + [NSS_CC_DEBUG_CLK_ARES] = { 0x70c, 2 }, 1227 + [NSS_CC_EIP_CLK_ARES] = { 0x658, 2 }, 1228 + [NSS_CC_NSS_CSR_CLK_ARES] = { 0x6b0, 2 }, 1229 + [NSS_CC_NSSNOC_CE_APB_CLK_ARES] = { 0x5f4, 2 }, 1230 + [NSS_CC_NSSNOC_CE_AXI_CLK_ARES] = { 0x5f8, 2 }, 1231 + [NSS_CC_NSSNOC_EIP_CLK_ARES] = { 0x660, 2 }, 1232 + [NSS_CC_NSSNOC_NSS_CSR_CLK_ARES] = { 0x6b4, 2 }, 1233 + [NSS_CC_NSSNOC_PPE_CLK_ARES] = { 0x440, 2 }, 1234 + [NSS_CC_NSSNOC_PPE_CFG_CLK_ARES] = { 0x444, 2 }, 1235 + [NSS_CC_PORT1_MAC_CLK_ARES] = { 0x428, 2 }, 1236 + [NSS_CC_PORT1_RX_CLK_ARES] = { 0x4fc, 2 }, 1237 + [NSS_CC_PORT1_TX_CLK_ARES] = { 0x504, 2 }, 1238 + [NSS_CC_PORT2_MAC_CLK_ARES] = { 0x430, 2 }, 1239 + [NSS_CC_PORT2_RX_CLK_ARES] = { 0x50c, 2 }, 1240 + [NSS_CC_PORT2_TX_CLK_ARES] = { 0x514, 2 }, 1241 + [NSS_CC_PORT3_MAC_CLK_ARES] = { 0x438, 2 }, 1242 + [NSS_CC_PORT3_RX_CLK_ARES] = { 0x51c, 2 }, 1243 + [NSS_CC_PORT3_TX_CLK_ARES] = { 0x524, 2 }, 1244 + [NSS_CC_PPE_BCR] = { 0x3e8 }, 1245 + [NSS_CC_PPE_EDMA_CLK_ARES] = { 0x41c, 2 }, 1246 + [NSS_CC_PPE_EDMA_CFG_CLK_ARES] = { 0x424, 2 }, 1247 + [NSS_CC_PPE_SWITCH_BTQ_CLK_ARES] = { 0x408, 2 }, 1248 + [NSS_CC_PPE_SWITCH_CLK_ARES] = { 0x410, 2 }, 1249 + [NSS_CC_PPE_SWITCH_CFG_CLK_ARES] = { 0x418, 2 }, 1250 + [NSS_CC_PPE_SWITCH_IPE_CLK_ARES] = { 0x400, 2 }, 1251 + [NSS_CC_UNIPHY_PORT1_RX_CLK_ARES] = { 0x57c, 2 }, 1252 + [NSS_CC_UNIPHY_PORT1_TX_CLK_ARES] = { 0x580, 2 }, 1253 + [NSS_CC_UNIPHY_PORT2_RX_CLK_ARES] = { 0x584, 2 }, 1254 + [NSS_CC_UNIPHY_PORT2_TX_CLK_ARES] = { 0x588, 2 }, 1255 + [NSS_CC_UNIPHY_PORT3_RX_CLK_ARES] = { 0x58c, 2 }, 1256 + [NSS_CC_UNIPHY_PORT3_TX_CLK_ARES] = { 0x590, 2 }, 1257 + [NSS_CC_XGMAC0_PTP_REF_CLK_ARES] = { 0x448, 2 }, 1258 + [NSS_CC_XGMAC1_PTP_REF_CLK_ARES] = { 0x44c, 2 }, 1259 + [NSS_CC_XGMAC2_PTP_REF_CLK_ARES] = { 0x450, 2 }, 1260 + }; 1261 + 1262 + static const struct regmap_config nss_cc_ipq5424_regmap_config = { 1263 + .reg_bits = 32, 1264 + .reg_stride = 4, 1265 + .val_bits = 32, 1266 + .max_register = 0x800, 1267 + .fast_io = true, 1268 + }; 1269 + 1270 + static const struct qcom_icc_hws_data icc_ipq5424_nss_hws[] = { 1271 + { MASTER_NSSNOC_PPE, SLAVE_NSSNOC_PPE, NSS_CC_NSSNOC_PPE_CLK }, 1272 + { MASTER_NSSNOC_PPE_CFG, SLAVE_NSSNOC_PPE_CFG, NSS_CC_NSSNOC_PPE_CFG_CLK }, 1273 + { MASTER_NSSNOC_NSS_CSR, SLAVE_NSSNOC_NSS_CSR, NSS_CC_NSSNOC_NSS_CSR_CLK }, 1274 + { MASTER_NSSNOC_CE_AXI, SLAVE_NSSNOC_CE_AXI, NSS_CC_NSSNOC_CE_AXI_CLK}, 1275 + { MASTER_NSSNOC_CE_APB, SLAVE_NSSNOC_CE_APB, NSS_CC_NSSNOC_CE_APB_CLK}, 1276 + { MASTER_NSSNOC_EIP, SLAVE_NSSNOC_EIP, NSS_CC_NSSNOC_EIP_CLK}, 1277 + }; 1278 + 1279 + #define IPQ_NSSCC_ID (5424 * 2) /* some unique value */ 1280 + 1281 + static const struct qcom_cc_desc nss_cc_ipq5424_desc = { 1282 + .config = &nss_cc_ipq5424_regmap_config, 1283 + .clks = nss_cc_ipq5424_clocks, 1284 + .num_clks = ARRAY_SIZE(nss_cc_ipq5424_clocks), 1285 + .resets = nss_cc_ipq5424_resets, 1286 + .num_resets = ARRAY_SIZE(nss_cc_ipq5424_resets), 1287 + .icc_hws = icc_ipq5424_nss_hws, 1288 + .num_icc_hws = ARRAY_SIZE(icc_ipq5424_nss_hws), 1289 + .icc_first_node_id = IPQ_NSSCC_ID, 1290 + }; 1291 + 1292 + static const struct dev_pm_ops nss_cc_ipq5424_pm_ops = { 1293 + SET_RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL) 1294 + }; 1295 + 1296 + static const struct of_device_id nss_cc_ipq5424_match_table[] = { 1297 + { .compatible = "qcom,ipq5424-nsscc" }, 1298 + { } 1299 + }; 1300 + MODULE_DEVICE_TABLE(of, nss_cc_ipq5424_match_table); 1301 + 1302 + static int nss_cc_ipq5424_probe(struct platform_device *pdev) 1303 + { 1304 + int ret; 1305 + 1306 + ret = devm_pm_runtime_enable(&pdev->dev); 1307 + if (ret) 1308 + return dev_err_probe(&pdev->dev, ret, "Fail to enable runtime PM\n"); 1309 + 1310 + ret = devm_pm_clk_create(&pdev->dev); 1311 + if (ret) 1312 + return dev_err_probe(&pdev->dev, ret, "Fail to create PM clock\n"); 1313 + 1314 + ret = pm_clk_add(&pdev->dev, "bus"); 1315 + if (ret) 1316 + return dev_err_probe(&pdev->dev, ret, "Fail to add bus clock\n"); 1317 + 1318 + ret = pm_runtime_resume_and_get(&pdev->dev); 1319 + if (ret) 1320 + return dev_err_probe(&pdev->dev, ret, "Fail to resume\n"); 1321 + 1322 + ret = qcom_cc_probe(pdev, &nss_cc_ipq5424_desc); 1323 + pm_runtime_put(&pdev->dev); 1324 + 1325 + return ret; 1326 + } 1327 + 1328 + static struct platform_driver nss_cc_ipq5424_driver = { 1329 + .probe = nss_cc_ipq5424_probe, 1330 + .driver = { 1331 + .name = "qcom,ipq5424-nsscc", 1332 + .of_match_table = nss_cc_ipq5424_match_table, 1333 + .pm = &nss_cc_ipq5424_pm_ops, 1334 + .sync_state = icc_sync_state, 1335 + }, 1336 + }; 1337 + module_platform_driver(nss_cc_ipq5424_driver); 1338 + 1339 + MODULE_DESCRIPTION("Qualcomm Technologies, Inc. NSSCC IPQ5424 Driver"); 1340 + MODULE_LICENSE("GPL");
+27 -27
drivers/clk/qcom/tcsrcc-glymur.c
··· 28 }; 29 30 static struct clk_branch tcsr_edp_clkref_en = { 31 - .halt_reg = 0x1c, 32 .halt_check = BRANCH_HALT_DELAY, 33 .clkr = { 34 - .enable_reg = 0x1c, 35 .enable_mask = BIT(0), 36 .hw.init = &(const struct clk_init_data) { 37 .name = "tcsr_edp_clkref_en", ··· 45 }; 46 47 static struct clk_branch tcsr_pcie_1_clkref_en = { 48 - .halt_reg = 0x4, 49 .halt_check = BRANCH_HALT_DELAY, 50 .clkr = { 51 - .enable_reg = 0x4, 52 .enable_mask = BIT(0), 53 .hw.init = &(const struct clk_init_data) { 54 .name = "tcsr_pcie_1_clkref_en", ··· 62 }; 63 64 static struct clk_branch tcsr_pcie_2_clkref_en = { 65 - .halt_reg = 0x8, 66 .halt_check = BRANCH_HALT_DELAY, 67 .clkr = { 68 - .enable_reg = 0x8, 69 .enable_mask = BIT(0), 70 .hw.init = &(const struct clk_init_data) { 71 .name = "tcsr_pcie_2_clkref_en", ··· 79 }; 80 81 static struct clk_branch tcsr_pcie_3_clkref_en = { 82 - .halt_reg = 0x10, 83 .halt_check = BRANCH_HALT_DELAY, 84 .clkr = { 85 - .enable_reg = 0x10, 86 .enable_mask = BIT(0), 87 .hw.init = &(const struct clk_init_data) { 88 .name = "tcsr_pcie_3_clkref_en", ··· 96 }; 97 98 static struct clk_branch tcsr_pcie_4_clkref_en = { 99 - .halt_reg = 0x14, 100 .halt_check = BRANCH_HALT_DELAY, 101 .clkr = { 102 - .enable_reg = 0x14, 103 .enable_mask = BIT(0), 104 .hw.init = &(const struct clk_init_data) { 105 .name = "tcsr_pcie_4_clkref_en", ··· 113 }; 114 115 static struct clk_branch tcsr_usb2_1_clkref_en = { 116 - .halt_reg = 0x28, 117 .halt_check = BRANCH_HALT_DELAY, 118 .clkr = { 119 - .enable_reg = 0x28, 120 .enable_mask = BIT(0), 121 .hw.init = &(const struct clk_init_data) { 122 .name = "tcsr_usb2_1_clkref_en", ··· 130 }; 131 132 static struct clk_branch tcsr_usb2_2_clkref_en = { 133 - .halt_reg = 0x2c, 134 .halt_check = BRANCH_HALT_DELAY, 135 .clkr = { 136 - .enable_reg = 0x2c, 137 .enable_mask = BIT(0), 138 .hw.init = &(const struct clk_init_data) { 139 .name = "tcsr_usb2_2_clkref_en", ··· 147 }; 148 149 static struct clk_branch tcsr_usb2_3_clkref_en = { 150 - .halt_reg = 0x30, 151 .halt_check = BRANCH_HALT_DELAY, 152 .clkr = { 153 - .enable_reg = 0x30, 154 .enable_mask = BIT(0), 155 .hw.init = &(const struct clk_init_data) { 156 .name = "tcsr_usb2_3_clkref_en", ··· 164 }; 165 166 static struct clk_branch tcsr_usb2_4_clkref_en = { 167 - .halt_reg = 0x44, 168 .halt_check = BRANCH_HALT_DELAY, 169 .clkr = { 170 - .enable_reg = 0x44, 171 .enable_mask = BIT(0), 172 .hw.init = &(const struct clk_init_data) { 173 .name = "tcsr_usb2_4_clkref_en", ··· 181 }; 182 183 static struct clk_branch tcsr_usb3_0_clkref_en = { 184 - .halt_reg = 0x20, 185 .halt_check = BRANCH_HALT_DELAY, 186 .clkr = { 187 - .enable_reg = 0x20, 188 .enable_mask = BIT(0), 189 .hw.init = &(const struct clk_init_data) { 190 .name = "tcsr_usb3_0_clkref_en", ··· 198 }; 199 200 static struct clk_branch tcsr_usb3_1_clkref_en = { 201 - .halt_reg = 0x24, 202 .halt_check = BRANCH_HALT_DELAY, 203 .clkr = { 204 - .enable_reg = 0x24, 205 .enable_mask = BIT(0), 206 .hw.init = &(const struct clk_init_data) { 207 .name = "tcsr_usb3_1_clkref_en", ··· 215 }; 216 217 static struct clk_branch tcsr_usb4_1_clkref_en = { 218 - .halt_reg = 0x0, 219 .halt_check = BRANCH_HALT_DELAY, 220 .clkr = { 221 - .enable_reg = 0x0, 222 .enable_mask = BIT(0), 223 .hw.init = &(const struct clk_init_data) { 224 .name = "tcsr_usb4_1_clkref_en", ··· 232 }; 233 234 static struct clk_branch tcsr_usb4_2_clkref_en = { 235 - .halt_reg = 0x18, 236 .halt_check = BRANCH_HALT_DELAY, 237 .clkr = { 238 - .enable_reg = 0x18, 239 .enable_mask = BIT(0), 240 .hw.init = &(const struct clk_init_data) { 241 .name = "tcsr_usb4_2_clkref_en", ··· 268 .reg_bits = 32, 269 .reg_stride = 4, 270 .val_bits = 32, 271 - .max_register = 0x44, 272 .fast_io = true, 273 }; 274
··· 28 }; 29 30 static struct clk_branch tcsr_edp_clkref_en = { 31 + .halt_reg = 0x60, 32 .halt_check = BRANCH_HALT_DELAY, 33 .clkr = { 34 + .enable_reg = 0x60, 35 .enable_mask = BIT(0), 36 .hw.init = &(const struct clk_init_data) { 37 .name = "tcsr_edp_clkref_en", ··· 45 }; 46 47 static struct clk_branch tcsr_pcie_1_clkref_en = { 48 + .halt_reg = 0x48, 49 .halt_check = BRANCH_HALT_DELAY, 50 .clkr = { 51 + .enable_reg = 0x48, 52 .enable_mask = BIT(0), 53 .hw.init = &(const struct clk_init_data) { 54 .name = "tcsr_pcie_1_clkref_en", ··· 62 }; 63 64 static struct clk_branch tcsr_pcie_2_clkref_en = { 65 + .halt_reg = 0x4c, 66 .halt_check = BRANCH_HALT_DELAY, 67 .clkr = { 68 + .enable_reg = 0x4c, 69 .enable_mask = BIT(0), 70 .hw.init = &(const struct clk_init_data) { 71 .name = "tcsr_pcie_2_clkref_en", ··· 79 }; 80 81 static struct clk_branch tcsr_pcie_3_clkref_en = { 82 + .halt_reg = 0x54, 83 .halt_check = BRANCH_HALT_DELAY, 84 .clkr = { 85 + .enable_reg = 0x54, 86 .enable_mask = BIT(0), 87 .hw.init = &(const struct clk_init_data) { 88 .name = "tcsr_pcie_3_clkref_en", ··· 96 }; 97 98 static struct clk_branch tcsr_pcie_4_clkref_en = { 99 + .halt_reg = 0x58, 100 .halt_check = BRANCH_HALT_DELAY, 101 .clkr = { 102 + .enable_reg = 0x58, 103 .enable_mask = BIT(0), 104 .hw.init = &(const struct clk_init_data) { 105 .name = "tcsr_pcie_4_clkref_en", ··· 113 }; 114 115 static struct clk_branch tcsr_usb2_1_clkref_en = { 116 + .halt_reg = 0x6c, 117 .halt_check = BRANCH_HALT_DELAY, 118 .clkr = { 119 + .enable_reg = 0x6c, 120 .enable_mask = BIT(0), 121 .hw.init = &(const struct clk_init_data) { 122 .name = "tcsr_usb2_1_clkref_en", ··· 130 }; 131 132 static struct clk_branch tcsr_usb2_2_clkref_en = { 133 + .halt_reg = 0x70, 134 .halt_check = BRANCH_HALT_DELAY, 135 .clkr = { 136 + .enable_reg = 0x70, 137 .enable_mask = BIT(0), 138 .hw.init = &(const struct clk_init_data) { 139 .name = "tcsr_usb2_2_clkref_en", ··· 147 }; 148 149 static struct clk_branch tcsr_usb2_3_clkref_en = { 150 + .halt_reg = 0x74, 151 .halt_check = BRANCH_HALT_DELAY, 152 .clkr = { 153 + .enable_reg = 0x74, 154 .enable_mask = BIT(0), 155 .hw.init = &(const struct clk_init_data) { 156 .name = "tcsr_usb2_3_clkref_en", ··· 164 }; 165 166 static struct clk_branch tcsr_usb2_4_clkref_en = { 167 + .halt_reg = 0x88, 168 .halt_check = BRANCH_HALT_DELAY, 169 .clkr = { 170 + .enable_reg = 0x88, 171 .enable_mask = BIT(0), 172 .hw.init = &(const struct clk_init_data) { 173 .name = "tcsr_usb2_4_clkref_en", ··· 181 }; 182 183 static struct clk_branch tcsr_usb3_0_clkref_en = { 184 + .halt_reg = 0x64, 185 .halt_check = BRANCH_HALT_DELAY, 186 .clkr = { 187 + .enable_reg = 0x64, 188 .enable_mask = BIT(0), 189 .hw.init = &(const struct clk_init_data) { 190 .name = "tcsr_usb3_0_clkref_en", ··· 198 }; 199 200 static struct clk_branch tcsr_usb3_1_clkref_en = { 201 + .halt_reg = 0x68, 202 .halt_check = BRANCH_HALT_DELAY, 203 .clkr = { 204 + .enable_reg = 0x68, 205 .enable_mask = BIT(0), 206 .hw.init = &(const struct clk_init_data) { 207 .name = "tcsr_usb3_1_clkref_en", ··· 215 }; 216 217 static struct clk_branch tcsr_usb4_1_clkref_en = { 218 + .halt_reg = 0x44, 219 .halt_check = BRANCH_HALT_DELAY, 220 .clkr = { 221 + .enable_reg = 0x44, 222 .enable_mask = BIT(0), 223 .hw.init = &(const struct clk_init_data) { 224 .name = "tcsr_usb4_1_clkref_en", ··· 232 }; 233 234 static struct clk_branch tcsr_usb4_2_clkref_en = { 235 + .halt_reg = 0x5c, 236 .halt_check = BRANCH_HALT_DELAY, 237 .clkr = { 238 + .enable_reg = 0x5c, 239 .enable_mask = BIT(0), 240 .hw.init = &(const struct clk_init_data) { 241 .name = "tcsr_usb4_2_clkref_en", ··· 268 .reg_bits = 32, 269 .reg_stride = 4, 270 .val_bits = 32, 271 + .max_register = 0x94, 272 .fast_io = true, 273 }; 274
+463
drivers/clk/qcom/videocc-sm8750.c
···
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. 4 + */ 5 + 6 + #include <linux/clk-provider.h> 7 + #include <linux/mod_devicetable.h> 8 + #include <linux/module.h> 9 + #include <linux/platform_device.h> 10 + #include <linux/pm_runtime.h> 11 + #include <linux/regmap.h> 12 + 13 + #include <dt-bindings/clock/qcom,sm8750-videocc.h> 14 + 15 + #include "clk-alpha-pll.h" 16 + #include "clk-branch.h" 17 + #include "clk-pll.h" 18 + #include "clk-rcg.h" 19 + #include "clk-regmap.h" 20 + #include "clk-regmap-divider.h" 21 + #include "clk-regmap-mux.h" 22 + #include "common.h" 23 + #include "gdsc.h" 24 + #include "reset.h" 25 + 26 + enum { 27 + DT_BI_TCXO, 28 + DT_BI_TCXO_AO, 29 + DT_SLEEP_CLK, 30 + }; 31 + 32 + enum { 33 + P_BI_TCXO, 34 + P_SLEEP_CLK, 35 + P_VIDEO_CC_PLL0_OUT_MAIN, 36 + }; 37 + 38 + static const struct pll_vco taycan_elu_vco[] = { 39 + { 249600000, 2500000000, 0 }, 40 + }; 41 + 42 + static const struct alpha_pll_config video_cc_pll0_config = { 43 + .l = 0x25, 44 + .alpha = 0x8000, 45 + .config_ctl_val = 0x19660387, 46 + .config_ctl_hi_val = 0x098060a0, 47 + .config_ctl_hi1_val = 0xb416cb20, 48 + .user_ctl_val = 0x00000000, 49 + .user_ctl_hi_val = 0x00000002, 50 + }; 51 + 52 + static struct clk_alpha_pll video_cc_pll0 = { 53 + .offset = 0x0, 54 + .config = &video_cc_pll0_config, 55 + .vco_table = taycan_elu_vco, 56 + .num_vco = ARRAY_SIZE(taycan_elu_vco), 57 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TAYCAN_ELU], 58 + .clkr = { 59 + .hw.init = &(const struct clk_init_data) { 60 + .name = "video_cc_pll0", 61 + .parent_data = &(const struct clk_parent_data) { 62 + .index = DT_BI_TCXO, 63 + }, 64 + .num_parents = 1, 65 + .ops = &clk_alpha_pll_taycan_elu_ops, 66 + }, 67 + }, 68 + }; 69 + 70 + static const struct parent_map video_cc_parent_map_0[] = { 71 + { P_BI_TCXO, 0 }, 72 + }; 73 + 74 + static const struct clk_parent_data video_cc_parent_data_0_ao[] = { 75 + { .index = DT_BI_TCXO_AO }, 76 + }; 77 + 78 + static const struct parent_map video_cc_parent_map_1[] = { 79 + { P_BI_TCXO, 0 }, 80 + { P_VIDEO_CC_PLL0_OUT_MAIN, 1 }, 81 + }; 82 + 83 + static const struct clk_parent_data video_cc_parent_data_1[] = { 84 + { .index = DT_BI_TCXO }, 85 + { .hw = &video_cc_pll0.clkr.hw }, 86 + }; 87 + 88 + static const struct parent_map video_cc_parent_map_2[] = { 89 + { P_SLEEP_CLK, 0 }, 90 + }; 91 + 92 + static const struct clk_parent_data video_cc_parent_data_2_ao[] = { 93 + { .index = DT_SLEEP_CLK }, 94 + }; 95 + 96 + static const struct freq_tbl ftbl_video_cc_ahb_clk_src[] = { 97 + F(19200000, P_BI_TCXO, 1, 0, 0), 98 + { } 99 + }; 100 + 101 + static struct clk_rcg2 video_cc_ahb_clk_src = { 102 + .cmd_rcgr = 0x8018, 103 + .mnd_width = 0, 104 + .hid_width = 5, 105 + .parent_map = video_cc_parent_map_0, 106 + .freq_tbl = ftbl_video_cc_ahb_clk_src, 107 + .clkr.hw.init = &(const struct clk_init_data) { 108 + .name = "video_cc_ahb_clk_src", 109 + .parent_data = video_cc_parent_data_0_ao, 110 + .num_parents = ARRAY_SIZE(video_cc_parent_data_0_ao), 111 + .flags = CLK_SET_RATE_PARENT, 112 + .ops = &clk_rcg2_ops, 113 + }, 114 + }; 115 + 116 + static const struct freq_tbl ftbl_video_cc_mvs0_clk_src[] = { 117 + F(720000000, P_VIDEO_CC_PLL0_OUT_MAIN, 1, 0, 0), 118 + F(1014000000, P_VIDEO_CC_PLL0_OUT_MAIN, 1, 0, 0), 119 + F(1260000000, P_VIDEO_CC_PLL0_OUT_MAIN, 1, 0, 0), 120 + F(1332000000, P_VIDEO_CC_PLL0_OUT_MAIN, 1, 0, 0), 121 + F(1600000000, P_VIDEO_CC_PLL0_OUT_MAIN, 1, 0, 0), 122 + F(1710000000, P_VIDEO_CC_PLL0_OUT_MAIN, 1, 0, 0), 123 + F(1890000000, P_VIDEO_CC_PLL0_OUT_MAIN, 1, 0, 0), 124 + { } 125 + }; 126 + 127 + static struct clk_rcg2 video_cc_mvs0_clk_src = { 128 + .cmd_rcgr = 0x8000, 129 + .mnd_width = 0, 130 + .hid_width = 5, 131 + .parent_map = video_cc_parent_map_1, 132 + .freq_tbl = ftbl_video_cc_mvs0_clk_src, 133 + .clkr.hw.init = &(const struct clk_init_data) { 134 + .name = "video_cc_mvs0_clk_src", 135 + .parent_data = video_cc_parent_data_1, 136 + .num_parents = ARRAY_SIZE(video_cc_parent_data_1), 137 + .flags = CLK_SET_RATE_PARENT, 138 + .ops = &clk_rcg2_shared_ops, 139 + }, 140 + }; 141 + 142 + static const struct freq_tbl ftbl_video_cc_sleep_clk_src[] = { 143 + F(32000, P_SLEEP_CLK, 1, 0, 0), 144 + { } 145 + }; 146 + 147 + static struct clk_rcg2 video_cc_sleep_clk_src = { 148 + .cmd_rcgr = 0x80e0, 149 + .mnd_width = 0, 150 + .hid_width = 5, 151 + .parent_map = video_cc_parent_map_2, 152 + .freq_tbl = ftbl_video_cc_sleep_clk_src, 153 + .clkr.hw.init = &(const struct clk_init_data) { 154 + .name = "video_cc_sleep_clk_src", 155 + .parent_data = video_cc_parent_data_2_ao, 156 + .num_parents = ARRAY_SIZE(video_cc_parent_data_2_ao), 157 + .flags = CLK_SET_RATE_PARENT, 158 + .ops = &clk_rcg2_ops, 159 + }, 160 + }; 161 + 162 + static struct clk_rcg2 video_cc_xo_clk_src = { 163 + .cmd_rcgr = 0x80bc, 164 + .mnd_width = 0, 165 + .hid_width = 5, 166 + .parent_map = video_cc_parent_map_0, 167 + .freq_tbl = ftbl_video_cc_ahb_clk_src, 168 + .clkr.hw.init = &(const struct clk_init_data) { 169 + .name = "video_cc_xo_clk_src", 170 + .parent_data = video_cc_parent_data_0_ao, 171 + .num_parents = ARRAY_SIZE(video_cc_parent_data_0_ao), 172 + .flags = CLK_SET_RATE_PARENT, 173 + .ops = &clk_rcg2_ops, 174 + }, 175 + }; 176 + 177 + static struct clk_regmap_div video_cc_mvs0_div_clk_src = { 178 + .reg = 0x809c, 179 + .shift = 0, 180 + .width = 4, 181 + .clkr.hw.init = &(const struct clk_init_data) { 182 + .name = "video_cc_mvs0_div_clk_src", 183 + .parent_hws = (const struct clk_hw*[]) { 184 + &video_cc_mvs0_clk_src.clkr.hw, 185 + }, 186 + .num_parents = 1, 187 + .flags = CLK_SET_RATE_PARENT, 188 + .ops = &clk_regmap_div_ro_ops, 189 + }, 190 + }; 191 + 192 + static struct clk_regmap_div video_cc_mvs0c_div2_div_clk_src = { 193 + .reg = 0x8060, 194 + .shift = 0, 195 + .width = 4, 196 + .clkr.hw.init = &(const struct clk_init_data) { 197 + .name = "video_cc_mvs0c_div2_div_clk_src", 198 + .parent_hws = (const struct clk_hw*[]) { 199 + &video_cc_mvs0_clk_src.clkr.hw, 200 + }, 201 + .num_parents = 1, 202 + .flags = CLK_SET_RATE_PARENT, 203 + .ops = &clk_regmap_div_ro_ops, 204 + }, 205 + }; 206 + 207 + static struct clk_branch video_cc_mvs0_clk = { 208 + .halt_reg = 0x807c, 209 + .halt_check = BRANCH_HALT_VOTED, 210 + .hwcg_reg = 0x807c, 211 + .hwcg_bit = 1, 212 + .clkr = { 213 + .enable_reg = 0x807c, 214 + .enable_mask = BIT(0), 215 + .hw.init = &(const struct clk_init_data) { 216 + .name = "video_cc_mvs0_clk", 217 + .parent_hws = (const struct clk_hw*[]) { 218 + &video_cc_mvs0_div_clk_src.clkr.hw, 219 + }, 220 + .num_parents = 1, 221 + .flags = CLK_SET_RATE_PARENT, 222 + .ops = &clk_branch2_ops, 223 + }, 224 + }, 225 + }; 226 + 227 + static struct clk_mem_branch video_cc_mvs0_freerun_clk = { 228 + .mem_enable_reg = 0x8090, 229 + .mem_ack_reg = 0x8090, 230 + .mem_enable_mask = BIT(3), 231 + .mem_enable_ack_mask = GENMASK(11, 10), 232 + .mem_enable_invert = true, 233 + .branch = { 234 + .halt_reg = 0x808c, 235 + .halt_check = BRANCH_HALT, 236 + .clkr = { 237 + .enable_reg = 0x808c, 238 + .enable_mask = BIT(0), 239 + .hw.init = &(const struct clk_init_data) { 240 + .name = "video_cc_mvs0_freerun_clk", 241 + .parent_hws = (const struct clk_hw*[]) { 242 + &video_cc_mvs0_div_clk_src.clkr.hw, 243 + }, 244 + .num_parents = 1, 245 + .flags = CLK_SET_RATE_PARENT, 246 + .ops = &clk_branch2_mem_ops, 247 + }, 248 + }, 249 + }, 250 + }; 251 + 252 + static struct clk_branch video_cc_mvs0_shift_clk = { 253 + .halt_reg = 0x80d8, 254 + .halt_check = BRANCH_HALT_VOTED, 255 + .hwcg_reg = 0x80d8, 256 + .hwcg_bit = 1, 257 + .clkr = { 258 + .enable_reg = 0x80d8, 259 + .enable_mask = BIT(0), 260 + .hw.init = &(const struct clk_init_data) { 261 + .name = "video_cc_mvs0_shift_clk", 262 + .parent_hws = (const struct clk_hw*[]) { 263 + &video_cc_xo_clk_src.clkr.hw, 264 + }, 265 + .num_parents = 1, 266 + .flags = CLK_SET_RATE_PARENT, 267 + .ops = &clk_branch2_ops, 268 + }, 269 + }, 270 + }; 271 + 272 + static struct clk_branch video_cc_mvs0c_clk = { 273 + .halt_reg = 0x804c, 274 + .halt_check = BRANCH_HALT, 275 + .clkr = { 276 + .enable_reg = 0x804c, 277 + .enable_mask = BIT(0), 278 + .hw.init = &(const struct clk_init_data) { 279 + .name = "video_cc_mvs0c_clk", 280 + .parent_hws = (const struct clk_hw*[]) { 281 + &video_cc_mvs0c_div2_div_clk_src.clkr.hw, 282 + }, 283 + .num_parents = 1, 284 + .flags = CLK_SET_RATE_PARENT, 285 + .ops = &clk_branch2_ops, 286 + }, 287 + }, 288 + }; 289 + 290 + static struct clk_branch video_cc_mvs0c_freerun_clk = { 291 + .halt_reg = 0x805c, 292 + .halt_check = BRANCH_HALT, 293 + .clkr = { 294 + .enable_reg = 0x805c, 295 + .enable_mask = BIT(0), 296 + .hw.init = &(const struct clk_init_data) { 297 + .name = "video_cc_mvs0c_freerun_clk", 298 + .parent_hws = (const struct clk_hw*[]) { 299 + &video_cc_mvs0c_div2_div_clk_src.clkr.hw, 300 + }, 301 + .num_parents = 1, 302 + .flags = CLK_SET_RATE_PARENT, 303 + .ops = &clk_branch2_ops, 304 + }, 305 + }, 306 + }; 307 + 308 + static struct clk_branch video_cc_mvs0c_shift_clk = { 309 + .halt_reg = 0x80dc, 310 + .halt_check = BRANCH_HALT_VOTED, 311 + .hwcg_reg = 0x80dc, 312 + .hwcg_bit = 1, 313 + .clkr = { 314 + .enable_reg = 0x80dc, 315 + .enable_mask = BIT(0), 316 + .hw.init = &(const struct clk_init_data) { 317 + .name = "video_cc_mvs0c_shift_clk", 318 + .parent_hws = (const struct clk_hw*[]) { 319 + &video_cc_xo_clk_src.clkr.hw, 320 + }, 321 + .num_parents = 1, 322 + .flags = CLK_SET_RATE_PARENT, 323 + .ops = &clk_branch2_ops, 324 + }, 325 + }, 326 + }; 327 + 328 + static struct gdsc video_cc_mvs0c_gdsc = { 329 + .gdscr = 0x8034, 330 + .en_rest_wait_val = 0x2, 331 + .en_few_wait_val = 0x2, 332 + .clk_dis_wait_val = 0x6, 333 + .pd = { 334 + .name = "video_cc_mvs0c_gdsc", 335 + }, 336 + .pwrsts = PWRSTS_OFF_ON, 337 + .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 338 + }; 339 + 340 + static struct gdsc video_cc_mvs0_gdsc = { 341 + .gdscr = 0x8068, 342 + .en_rest_wait_val = 0x2, 343 + .en_few_wait_val = 0x2, 344 + .clk_dis_wait_val = 0x6, 345 + .pd = { 346 + .name = "video_cc_mvs0_gdsc", 347 + }, 348 + .pwrsts = PWRSTS_OFF_ON, 349 + .parent = &video_cc_mvs0c_gdsc.pd, 350 + .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | HW_CTRL_TRIGGER, 351 + }; 352 + 353 + static struct clk_regmap *video_cc_sm8750_clocks[] = { 354 + [VIDEO_CC_AHB_CLK_SRC] = &video_cc_ahb_clk_src.clkr, 355 + [VIDEO_CC_MVS0_CLK] = &video_cc_mvs0_clk.clkr, 356 + [VIDEO_CC_MVS0_CLK_SRC] = &video_cc_mvs0_clk_src.clkr, 357 + [VIDEO_CC_MVS0_DIV_CLK_SRC] = &video_cc_mvs0_div_clk_src.clkr, 358 + [VIDEO_CC_MVS0_FREERUN_CLK] = &video_cc_mvs0_freerun_clk.branch.clkr, 359 + [VIDEO_CC_MVS0_SHIFT_CLK] = &video_cc_mvs0_shift_clk.clkr, 360 + [VIDEO_CC_MVS0C_CLK] = &video_cc_mvs0c_clk.clkr, 361 + [VIDEO_CC_MVS0C_DIV2_DIV_CLK_SRC] = &video_cc_mvs0c_div2_div_clk_src.clkr, 362 + [VIDEO_CC_MVS0C_FREERUN_CLK] = &video_cc_mvs0c_freerun_clk.clkr, 363 + [VIDEO_CC_MVS0C_SHIFT_CLK] = &video_cc_mvs0c_shift_clk.clkr, 364 + [VIDEO_CC_PLL0] = &video_cc_pll0.clkr, 365 + [VIDEO_CC_SLEEP_CLK_SRC] = &video_cc_sleep_clk_src.clkr, 366 + [VIDEO_CC_XO_CLK_SRC] = &video_cc_xo_clk_src.clkr, 367 + }; 368 + 369 + static struct gdsc *video_cc_sm8750_gdscs[] = { 370 + [VIDEO_CC_MVS0_GDSC] = &video_cc_mvs0_gdsc, 371 + [VIDEO_CC_MVS0C_GDSC] = &video_cc_mvs0c_gdsc, 372 + }; 373 + 374 + static const struct qcom_reset_map video_cc_sm8750_resets[] = { 375 + [VIDEO_CC_INTERFACE_BCR] = { 0x80a0 }, 376 + [VIDEO_CC_MVS0_BCR] = { 0x8064 }, 377 + [VIDEO_CC_MVS0C_CLK_ARES] = { 0x804c, 2 }, 378 + [VIDEO_CC_MVS0C_BCR] = { 0x8030 }, 379 + [VIDEO_CC_MVS0_FREERUN_CLK_ARES] = { 0x808c, 2 }, 380 + [VIDEO_CC_MVS0C_FREERUN_CLK_ARES] = { 0x805c, 2 }, 381 + [VIDEO_CC_XO_CLK_ARES] = { 0x80d4, 2 }, 382 + }; 383 + 384 + static const struct regmap_config video_cc_sm8750_regmap_config = { 385 + .reg_bits = 32, 386 + .reg_stride = 4, 387 + .val_bits = 32, 388 + .max_register = 0x9f4c, 389 + .fast_io = true, 390 + }; 391 + 392 + static struct clk_alpha_pll *video_cc_sm8750_plls[] = { 393 + &video_cc_pll0, 394 + }; 395 + 396 + static u32 video_cc_sm8750_critical_cbcrs[] = { 397 + 0x80a4, /* VIDEO_CC_AHB_CLK */ 398 + 0x80f8, /* VIDEO_CC_SLEEP_CLK */ 399 + 0x80d4, /* VIDEO_CC_XO_CLK */ 400 + }; 401 + 402 + static void clk_sm8750_regs_configure(struct device *dev, struct regmap *regmap) 403 + { 404 + /* Update DLY_ACCU_RED_SHIFTER_DONE to 0xF for mvs0, mvs0c */ 405 + regmap_update_bits(regmap, 0x8074, GENMASK(25, 21), GENMASK(25, 21)); 406 + regmap_update_bits(regmap, 0x8040, GENMASK(25, 21), GENMASK(25, 21)); 407 + 408 + regmap_update_bits(regmap, 0x9f24, BIT(0), BIT(0)); 409 + } 410 + 411 + static struct qcom_cc_driver_data video_cc_sm8750_driver_data = { 412 + .alpha_plls = video_cc_sm8750_plls, 413 + .num_alpha_plls = ARRAY_SIZE(video_cc_sm8750_plls), 414 + .clk_cbcrs = video_cc_sm8750_critical_cbcrs, 415 + .num_clk_cbcrs = ARRAY_SIZE(video_cc_sm8750_critical_cbcrs), 416 + .clk_regs_configure = clk_sm8750_regs_configure, 417 + }; 418 + 419 + static struct qcom_cc_desc video_cc_sm8750_desc = { 420 + .config = &video_cc_sm8750_regmap_config, 421 + .clks = video_cc_sm8750_clocks, 422 + .num_clks = ARRAY_SIZE(video_cc_sm8750_clocks), 423 + .resets = video_cc_sm8750_resets, 424 + .num_resets = ARRAY_SIZE(video_cc_sm8750_resets), 425 + .gdscs = video_cc_sm8750_gdscs, 426 + .num_gdscs = ARRAY_SIZE(video_cc_sm8750_gdscs), 427 + .use_rpm = true, 428 + .driver_data = &video_cc_sm8750_driver_data, 429 + }; 430 + 431 + static const struct of_device_id video_cc_sm8750_match_table[] = { 432 + { .compatible = "qcom,sm8750-videocc" }, 433 + { } 434 + }; 435 + MODULE_DEVICE_TABLE(of, video_cc_sm8750_match_table); 436 + 437 + static int video_cc_sm8750_probe(struct platform_device *pdev) 438 + { 439 + return qcom_cc_probe(pdev, &video_cc_sm8750_desc); 440 + } 441 + 442 + static struct platform_driver video_cc_sm8750_driver = { 443 + .probe = video_cc_sm8750_probe, 444 + .driver = { 445 + .name = "video_cc-sm8750", 446 + .of_match_table = video_cc_sm8750_match_table, 447 + }, 448 + }; 449 + 450 + static int __init video_cc_sm8750_init(void) 451 + { 452 + return platform_driver_register(&video_cc_sm8750_driver); 453 + } 454 + subsys_initcall(video_cc_sm8750_init); 455 + 456 + static void __exit video_cc_sm8750_exit(void) 457 + { 458 + platform_driver_unregister(&video_cc_sm8750_driver); 459 + } 460 + module_exit(video_cc_sm8750_exit); 461 + 462 + MODULE_DESCRIPTION("QTI VIDEO_CC SM8750 Driver"); 463 + MODULE_LICENSE("GPL");
+6 -1
drivers/clk/renesas/r8a779a0-cpg-mssr.c
··· 26 27 enum clk_ids { 28 /* Core Clock Outputs exported to DT */ 29 - LAST_DT_CORE_CLK = R8A779A0_CLK_OSC, 30 31 /* External Input Clocks */ 32 CLK_EXTAL, ··· 39 CLK_PLL21, 40 CLK_PLL30, 41 CLK_PLL31, 42 CLK_PLL5, 43 CLK_PLL1_DIV2, 44 CLK_PLL20_DIV2, ··· 66 #define CPG_PLL21CR 0x0838 /* PLL21 Control Register */ 67 #define CPG_PLL30CR 0x083c /* PLL30 Control Register */ 68 #define CPG_PLL31CR 0x0840 /* PLL31 Control Register */ 69 70 static const struct cpg_core_clk r8a779a0_core_clks[] __initconst = { 71 /* External Clock Inputs */ ··· 81 DEF_PLL(".pll21", CLK_PLL21, CPG_PLL21CR), 82 DEF_PLL(".pll30", CLK_PLL30, CPG_PLL30CR), 83 DEF_PLL(".pll31", CLK_PLL31, CPG_PLL31CR), 84 85 DEF_FIXED(".pll1_div2", CLK_PLL1_DIV2, CLK_PLL1, 2, 1), 86 DEF_FIXED(".pll20_div2", CLK_PLL20_DIV2, CLK_PLL20, 2, 1), ··· 101 /* Core Clock Outputs */ 102 DEF_GEN4_Z("z0", R8A779A0_CLK_Z0, CLK_TYPE_GEN4_Z, CLK_PLL20, 2, 0), 103 DEF_GEN4_Z("z1", R8A779A0_CLK_Z1, CLK_TYPE_GEN4_Z, CLK_PLL21, 2, 8), 104 DEF_FIXED("zx", R8A779A0_CLK_ZX, CLK_PLL20_DIV2, 2, 1), 105 DEF_FIXED("s1d1", R8A779A0_CLK_S1D1, CLK_S1, 1, 1), 106 DEF_FIXED("s1d2", R8A779A0_CLK_S1D2, CLK_S1, 2, 1), ··· 142 }; 143 144 static const struct mssr_mod_clk r8a779a0_mod_clks[] __initconst = { 145 DEF_MOD("isp0", 16, R8A779A0_CLK_S1D1), 146 DEF_MOD("isp1", 17, R8A779A0_CLK_S1D1), 147 DEF_MOD("isp2", 18, R8A779A0_CLK_S1D1),
··· 26 27 enum clk_ids { 28 /* Core Clock Outputs exported to DT */ 29 + LAST_DT_CORE_CLK = R8A779A0_CLK_ZG, 30 31 /* External Input Clocks */ 32 CLK_EXTAL, ··· 39 CLK_PLL21, 40 CLK_PLL30, 41 CLK_PLL31, 42 + CLK_PLL4, 43 CLK_PLL5, 44 CLK_PLL1_DIV2, 45 CLK_PLL20_DIV2, ··· 65 #define CPG_PLL21CR 0x0838 /* PLL21 Control Register */ 66 #define CPG_PLL30CR 0x083c /* PLL30 Control Register */ 67 #define CPG_PLL31CR 0x0840 /* PLL31 Control Register */ 68 + #define CPG_PLL4CR 0x0844 /* PLL4 Control Register */ 69 70 static const struct cpg_core_clk r8a779a0_core_clks[] __initconst = { 71 /* External Clock Inputs */ ··· 79 DEF_PLL(".pll21", CLK_PLL21, CPG_PLL21CR), 80 DEF_PLL(".pll30", CLK_PLL30, CPG_PLL30CR), 81 DEF_PLL(".pll31", CLK_PLL31, CPG_PLL31CR), 82 + DEF_PLL(".pll4", CLK_PLL4, CPG_PLL4CR), 83 84 DEF_FIXED(".pll1_div2", CLK_PLL1_DIV2, CLK_PLL1, 2, 1), 85 DEF_FIXED(".pll20_div2", CLK_PLL20_DIV2, CLK_PLL20, 2, 1), ··· 98 /* Core Clock Outputs */ 99 DEF_GEN4_Z("z0", R8A779A0_CLK_Z0, CLK_TYPE_GEN4_Z, CLK_PLL20, 2, 0), 100 DEF_GEN4_Z("z1", R8A779A0_CLK_Z1, CLK_TYPE_GEN4_Z, CLK_PLL21, 2, 8), 101 + DEF_GEN4_Z("zg", R8A779A0_CLK_ZG, CLK_TYPE_GEN4_Z, CLK_PLL4, 2, 88), 102 DEF_FIXED("zx", R8A779A0_CLK_ZX, CLK_PLL20_DIV2, 2, 1), 103 DEF_FIXED("s1d1", R8A779A0_CLK_S1D1, CLK_S1, 1, 1), 104 DEF_FIXED("s1d2", R8A779A0_CLK_S1D2, CLK_S1, 2, 1), ··· 138 }; 139 140 static const struct mssr_mod_clk r8a779a0_mod_clks[] __initconst = { 141 + DEF_MOD("3dge", 0, R8A779A0_CLK_ZG), 142 DEF_MOD("isp0", 16, R8A779A0_CLK_S1D1), 143 DEF_MOD("isp1", 17, R8A779A0_CLK_S1D1), 144 DEF_MOD("isp2", 18, R8A779A0_CLK_S1D1),
+3 -3
drivers/clk/renesas/r9a06g032-clocks.c
··· 1333 if (IS_ERR(mclk)) 1334 return PTR_ERR(mclk); 1335 1336 - clocks->reg = of_iomap(np, 0); 1337 - if (WARN_ON(!clocks->reg)) 1338 - return -ENOMEM; 1339 1340 r9a06g032_init_h2mode(clocks); 1341
··· 1333 if (IS_ERR(mclk)) 1334 return PTR_ERR(mclk); 1335 1336 + clocks->reg = devm_of_iomap(dev, np, 0, NULL); 1337 + if (IS_ERR(clocks->reg)) 1338 + return PTR_ERR(clocks->reg); 1339 1340 r9a06g032_init_h2mode(clocks); 1341
+143 -1
drivers/clk/renesas/r9a09g047-cpg.c
··· 16 17 enum clk_ids { 18 /* Core Clock Outputs exported to DT */ 19 - LAST_DT_CORE_CLK = R9A09G047_USB3_0_CLKCORE, 20 21 /* External Input Clocks */ 22 CLK_AUDIO_EXTAL, ··· 44 CLK_PLLCLN_DIV8, 45 CLK_PLLCLN_DIV16, 46 CLK_PLLCLN_DIV20, 47 CLK_PLLDTY_ACPU, 48 CLK_PLLDTY_ACPU_DIV2, 49 CLK_PLLDTY_ACPU_DIV4, ··· 145 DEF_FIXED(".pllcln_div8", CLK_PLLCLN_DIV8, CLK_PLLCLN, 1, 8), 146 DEF_FIXED(".pllcln_div16", CLK_PLLCLN_DIV16, CLK_PLLCLN, 1, 16), 147 DEF_FIXED(".pllcln_div20", CLK_PLLCLN_DIV20, CLK_PLLCLN, 1, 20), 148 149 DEF_DDIV(".plldty_acpu", CLK_PLLDTY_ACPU, CLK_PLLDTY, CDDIV0_DIVCTL2, dtable_2_64), 150 DEF_FIXED(".plldty_acpu_div2", CLK_PLLDTY_ACPU_DIV2, CLK_PLLDTY_ACPU, 1, 2), ··· 183 CDDIV1_DIVCTL3, dtable_1_8), 184 DEF_FIXED("iotop_0_shclk", R9A09G047_IOTOP_0_SHCLK, CLK_PLLCM33_DIV16, 1, 1), 185 DEF_FIXED("spi_clk_spi", R9A09G047_SPI_CLK_SPI, CLK_PLLCM33_XSPI, 1, 2), 186 DEF_FIXED("gbeth_0_clk_ptp_ref_i", R9A09G047_GBETH_0_CLK_PTP_REF_I, 187 CLK_PLLETH_DIV_125_FIX, 1, 1), 188 DEF_FIXED("gbeth_1_clk_ptp_ref_i", R9A09G047_GBETH_1_CLK_PTP_REF_I, ··· 224 BUS_MSTOP(5, BIT(13))), 225 DEF_MOD("wdt_3_clk_loco", CLK_QEXTAL, 5, 2, 2, 18, 226 BUS_MSTOP(5, BIT(13))), 227 DEF_MOD("scif_0_clk_pck", CLK_PLLCM33_DIV16, 8, 15, 4, 15, 228 BUS_MSTOP(3, BIT(14))), 229 DEF_MOD("i3c_0_pclkrw", CLK_PLLCLN_DIV16, 9, 0, 4, 16, ··· 390 BUS_MSTOP(7, BIT(12))), 391 DEF_MOD("usb3_0_pclk_usbtst", CLK_PLLDTY_ACPU_DIV4, 11, 0, 5, 16, 392 BUS_MSTOP(7, BIT(14))), 393 DEF_MOD_MUX_EXTERNAL("gbeth_0_clk_tx_i", CLK_SMUX2_GBE0_TXCLK, 11, 8, 5, 24, 394 BUS_MSTOP(8, BIT(5)), 1), 395 DEF_MOD_MUX_EXTERNAL("gbeth_0_clk_rx_i", CLK_SMUX2_GBE0_RXCLK, 11, 9, 5, 25, ··· 457 DEF_RST(7, 6, 3, 7), /* WDT_1_RESET */ 458 DEF_RST(7, 7, 3, 8), /* WDT_2_RESET */ 459 DEF_RST(7, 8, 3, 9), /* WDT_3_RESET */ 460 DEF_RST(9, 5, 4, 6), /* SCIF_0_RST_SYSTEM_N */ 461 DEF_RST(9, 6, 4, 7), /* I3C_0_PRESETN */ 462 DEF_RST(9, 7, 4, 8), /* I3C_0_TRESETN */ ··· 497 DEF_RST(10, 8, 4, 25), /* SDHI_1_IXRST */ 498 DEF_RST(10, 9, 4, 26), /* SDHI_2_IXRST */ 499 DEF_RST(10, 10, 4, 27), /* USB3_0_ARESETN */ 500 DEF_RST(11, 0, 5, 1), /* GBETH_0_ARESETN_I */ 501 DEF_RST(11, 1, 5, 2), /* GBETH_1_ARESETN_I */ 502 DEF_RST(12, 5, 5, 22), /* CRU_0_PRESETN */
··· 16 17 enum clk_ids { 18 /* Core Clock Outputs exported to DT */ 19 + LAST_DT_CORE_CLK = R9A09G047_USB2_0_CLK_CORE1, 20 21 /* External Input Clocks */ 22 CLK_AUDIO_EXTAL, ··· 44 CLK_PLLCLN_DIV8, 45 CLK_PLLCLN_DIV16, 46 CLK_PLLCLN_DIV20, 47 + CLK_PLLCLN_DIV64, 48 + CLK_PLLCLN_DIV256, 49 + CLK_PLLCLN_DIV1024, 50 CLK_PLLDTY_ACPU, 51 CLK_PLLDTY_ACPU_DIV2, 52 CLK_PLLDTY_ACPU_DIV4, ··· 142 DEF_FIXED(".pllcln_div8", CLK_PLLCLN_DIV8, CLK_PLLCLN, 1, 8), 143 DEF_FIXED(".pllcln_div16", CLK_PLLCLN_DIV16, CLK_PLLCLN, 1, 16), 144 DEF_FIXED(".pllcln_div20", CLK_PLLCLN_DIV20, CLK_PLLCLN, 1, 20), 145 + DEF_FIXED(".pllcln_div64", CLK_PLLCLN_DIV64, CLK_PLLCLN, 1, 64), 146 + DEF_FIXED(".pllcln_div256", CLK_PLLCLN_DIV256, CLK_PLLCLN, 1, 256), 147 + DEF_FIXED(".pllcln_div1024", CLK_PLLCLN_DIV1024, CLK_PLLCLN, 1, 1024), 148 149 DEF_DDIV(".plldty_acpu", CLK_PLLDTY_ACPU, CLK_PLLDTY, CDDIV0_DIVCTL2, dtable_2_64), 150 DEF_FIXED(".plldty_acpu_div2", CLK_PLLDTY_ACPU_DIV2, CLK_PLLDTY_ACPU, 1, 2), ··· 177 CDDIV1_DIVCTL3, dtable_1_8), 178 DEF_FIXED("iotop_0_shclk", R9A09G047_IOTOP_0_SHCLK, CLK_PLLCM33_DIV16, 1, 1), 179 DEF_FIXED("spi_clk_spi", R9A09G047_SPI_CLK_SPI, CLK_PLLCM33_XSPI, 1, 2), 180 + DEF_FIXED("usb2_0_clk_core0", R9A09G047_USB2_0_CLK_CORE0, CLK_QEXTAL, 1, 1), 181 + DEF_FIXED("usb2_0_clk_core1", R9A09G047_USB2_0_CLK_CORE1, CLK_QEXTAL, 1, 1), 182 DEF_FIXED("gbeth_0_clk_ptp_ref_i", R9A09G047_GBETH_0_CLK_PTP_REF_I, 183 CLK_PLLETH_DIV_125_FIX, 1, 1), 184 DEF_FIXED("gbeth_1_clk_ptp_ref_i", R9A09G047_GBETH_1_CLK_PTP_REF_I, ··· 216 BUS_MSTOP(5, BIT(13))), 217 DEF_MOD("wdt_3_clk_loco", CLK_QEXTAL, 5, 2, 2, 18, 218 BUS_MSTOP(5, BIT(13))), 219 + DEF_MOD("rsci0_pclk", CLK_PLLCLN_DIV16, 5, 13, 2, 29, 220 + BUS_MSTOP(11, BIT(3))), 221 + DEF_MOD("rsci0_tclk", CLK_PLLCLN_DIV16, 5, 14, 2, 30, 222 + BUS_MSTOP(11, BIT(3))), 223 + DEF_MOD("rsci0_ps_ps3_n", CLK_PLLCLN_DIV1024, 5, 15, 2, 31, 224 + BUS_MSTOP(11, BIT(3))), 225 + DEF_MOD("rsci0_ps_ps2_n", CLK_PLLCLN_DIV256, 6, 0, 3, 0, 226 + BUS_MSTOP(11, BIT(3))), 227 + DEF_MOD("rsci0_ps_ps1_n", CLK_PLLCLN_DIV64, 6, 1, 3, 1, 228 + BUS_MSTOP(11, BIT(3))), 229 + DEF_MOD("rsci1_pclk", CLK_PLLCLN_DIV16, 6, 2, 3, 2, 230 + BUS_MSTOP(11, BIT(4))), 231 + DEF_MOD("rsci1_tclk", CLK_PLLCLN_DIV16, 6, 3, 3, 3, 232 + BUS_MSTOP(11, BIT(4))), 233 + DEF_MOD("rsci1_ps_ps3_n", CLK_PLLCLN_DIV1024, 6, 4, 3, 4, 234 + BUS_MSTOP(11, BIT(4))), 235 + DEF_MOD("rsci1_ps_ps2_n", CLK_PLLCLN_DIV256, 6, 5, 3, 5, 236 + BUS_MSTOP(11, BIT(4))), 237 + DEF_MOD("rsci1_ps_ps1_n", CLK_PLLCLN_DIV64, 6, 6, 3, 6, 238 + BUS_MSTOP(11, BIT(4))), 239 + DEF_MOD("rsci2_pclk", CLK_PLLCLN_DIV16, 6, 7, 3, 7, 240 + BUS_MSTOP(11, BIT(5))), 241 + DEF_MOD("rsci2_tclk", CLK_PLLCLN_DIV16, 6, 8, 3, 8, 242 + BUS_MSTOP(11, BIT(5))), 243 + DEF_MOD("rsci2_ps_ps3_n", CLK_PLLCLN_DIV1024, 6, 9, 3, 9, 244 + BUS_MSTOP(11, BIT(5))), 245 + DEF_MOD("rsci2_ps_ps2_n", CLK_PLLCLN_DIV256, 6, 10, 3, 10, 246 + BUS_MSTOP(11, BIT(5))), 247 + DEF_MOD("rsci2_ps_ps1_n", CLK_PLLCLN_DIV64, 6, 11, 3, 11, 248 + BUS_MSTOP(11, BIT(5))), 249 + DEF_MOD("rsci3_pclk", CLK_PLLCLN_DIV16, 6, 12, 3, 12, 250 + BUS_MSTOP(11, BIT(6))), 251 + DEF_MOD("rsci3_tclk", CLK_PLLCLN_DIV16, 6, 13, 3, 13, 252 + BUS_MSTOP(11, BIT(6))), 253 + DEF_MOD("rsci3_ps_ps3_n", CLK_PLLCLN_DIV1024, 6, 14, 3, 14, 254 + BUS_MSTOP(11, BIT(6))), 255 + DEF_MOD("rsci3_ps_ps2_n", CLK_PLLCLN_DIV256, 6, 15, 3, 15, 256 + BUS_MSTOP(11, BIT(6))), 257 + DEF_MOD("rsci3_ps_ps1_n", CLK_PLLCLN_DIV64, 7, 0, 3, 16, 258 + BUS_MSTOP(11, BIT(6))), 259 + DEF_MOD("rsci4_pclk", CLK_PLLCLN_DIV16, 7, 1, 3, 17, 260 + BUS_MSTOP(11, BIT(7))), 261 + DEF_MOD("rsci4_tclk", CLK_PLLCLN_DIV16, 7, 2, 3, 18, 262 + BUS_MSTOP(11, BIT(7))), 263 + DEF_MOD("rsci4_ps_ps3_n", CLK_PLLCLN_DIV1024, 7, 3, 3, 19, 264 + BUS_MSTOP(11, BIT(7))), 265 + DEF_MOD("rsci4_ps_ps2_n", CLK_PLLCLN_DIV256, 7, 4, 3, 20, 266 + BUS_MSTOP(11, BIT(7))), 267 + DEF_MOD("rsci4_ps_ps1_n", CLK_PLLCLN_DIV64, 7, 5, 3, 21, 268 + BUS_MSTOP(11, BIT(7))), 269 + DEF_MOD("rsci5_pclk", CLK_PLLCLN_DIV16, 7, 6, 3, 22, 270 + BUS_MSTOP(11, BIT(8))), 271 + DEF_MOD("rsci5_tclk", CLK_PLLCLN_DIV16, 7, 7, 3, 23, 272 + BUS_MSTOP(11, BIT(8))), 273 + DEF_MOD("rsci5_ps_ps3_n", CLK_PLLCLN_DIV1024, 7, 8, 3, 24, 274 + BUS_MSTOP(11, BIT(8))), 275 + DEF_MOD("rsci5_ps_ps2_n", CLK_PLLCLN_DIV256, 7, 9, 3, 25, 276 + BUS_MSTOP(11, BIT(8))), 277 + DEF_MOD("rsci5_ps_ps1_n", CLK_PLLCLN_DIV64, 7, 10, 3, 26, 278 + BUS_MSTOP(11, BIT(8))), 279 + DEF_MOD("rsci6_pclk", CLK_PLLCLN_DIV16, 7, 11, 3, 27, 280 + BUS_MSTOP(11, BIT(9))), 281 + DEF_MOD("rsci6_tclk", CLK_PLLCLN_DIV16, 7, 12, 3, 28, 282 + BUS_MSTOP(11, BIT(9))), 283 + DEF_MOD("rsci6_ps_ps3_n", CLK_PLLCLN_DIV1024, 7, 13, 3, 29, 284 + BUS_MSTOP(11, BIT(9))), 285 + DEF_MOD("rsci6_ps_ps2_n", CLK_PLLCLN_DIV256, 7, 14, 3, 30, 286 + BUS_MSTOP(11, BIT(9))), 287 + DEF_MOD("rsci6_ps_ps1_n", CLK_PLLCLN_DIV64, 7, 15, 3, 31, 288 + BUS_MSTOP(11, BIT(9))), 289 + DEF_MOD("rsci7_pclk", CLK_PLLCLN_DIV16, 8, 0, 4, 0, 290 + BUS_MSTOP(11, BIT(10))), 291 + DEF_MOD("rsci7_tclk", CLK_PLLCLN_DIV16, 8, 1, 4, 1, 292 + BUS_MSTOP(11, BIT(10))), 293 + DEF_MOD("rsci7_ps_ps3_n", CLK_PLLCLN_DIV1024, 8, 2, 4, 2, 294 + BUS_MSTOP(11, BIT(10))), 295 + DEF_MOD("rsci7_ps_ps2_n", CLK_PLLCLN_DIV256, 8, 3, 4, 3, 296 + BUS_MSTOP(11, BIT(10))), 297 + DEF_MOD("rsci7_ps_ps1_n", CLK_PLLCLN_DIV64, 8, 4, 4, 4, 298 + BUS_MSTOP(11, BIT(10))), 299 + DEF_MOD("rsci8_pclk", CLK_PLLCLN_DIV16, 8, 5, 4, 5, 300 + BUS_MSTOP(11, BIT(11))), 301 + DEF_MOD("rsci8_tclk", CLK_PLLCLN_DIV16, 8, 6, 4, 6, 302 + BUS_MSTOP(11, BIT(11))), 303 + DEF_MOD("rsci8_ps_ps3_n", CLK_PLLCLN_DIV1024, 8, 7, 4, 7, 304 + BUS_MSTOP(11, BIT(11))), 305 + DEF_MOD("rsci8_ps_ps2_n", CLK_PLLCLN_DIV256, 8, 8, 4, 8, 306 + BUS_MSTOP(11, BIT(11))), 307 + DEF_MOD("rsci8_ps_ps1_n", CLK_PLLCLN_DIV64, 8, 9, 4, 9, 308 + BUS_MSTOP(11, BIT(11))), 309 + DEF_MOD("rsci9_pclk", CLK_PLLCLN_DIV16, 8, 10, 4, 10, 310 + BUS_MSTOP(11, BIT(12))), 311 + DEF_MOD("rsci9_tclk", CLK_PLLCLN_DIV16, 8, 11, 4, 11, 312 + BUS_MSTOP(11, BIT(12))), 313 + DEF_MOD("rsci9_ps_ps3_n", CLK_PLLCLN_DIV1024, 8, 12, 4, 12, 314 + BUS_MSTOP(11, BIT(12))), 315 + DEF_MOD("rsci9_ps_ps2_n", CLK_PLLCLN_DIV256, 8, 13, 4, 13, 316 + BUS_MSTOP(11, BIT(12))), 317 + DEF_MOD("rsci9_ps_ps1_n", CLK_PLLCLN_DIV64, 8, 14, 4, 14, 318 + BUS_MSTOP(11, BIT(12))), 319 DEF_MOD("scif_0_clk_pck", CLK_PLLCM33_DIV16, 8, 15, 4, 15, 320 BUS_MSTOP(3, BIT(14))), 321 DEF_MOD("i3c_0_pclkrw", CLK_PLLCLN_DIV16, 9, 0, 4, 16, ··· 282 BUS_MSTOP(7, BIT(12))), 283 DEF_MOD("usb3_0_pclk_usbtst", CLK_PLLDTY_ACPU_DIV4, 11, 0, 5, 16, 284 BUS_MSTOP(7, BIT(14))), 285 + DEF_MOD("usb2_0_u2h0_hclk", CLK_PLLDTY_DIV8, 11, 3, 5, 19, 286 + BUS_MSTOP(7, BIT(7))), 287 + DEF_MOD("usb2_0_u2h1_hclk", CLK_PLLDTY_DIV8, 11, 4, 5, 20, 288 + BUS_MSTOP(7, BIT(8))), 289 + DEF_MOD("usb2_0_u2p_exr_cpuclk", CLK_PLLDTY_ACPU_DIV4, 11, 5, 5, 21, 290 + BUS_MSTOP(7, BIT(9))), 291 + DEF_MOD("usb2_0_pclk_usbtst0", CLK_PLLDTY_ACPU_DIV4, 11, 6, 5, 22, 292 + BUS_MSTOP(7, BIT(10))), 293 + DEF_MOD("usb2_0_pclk_usbtst1", CLK_PLLDTY_ACPU_DIV4, 11, 7, 5, 23, 294 + BUS_MSTOP(7, BIT(11))), 295 DEF_MOD_MUX_EXTERNAL("gbeth_0_clk_tx_i", CLK_SMUX2_GBE0_TXCLK, 11, 8, 5, 24, 296 BUS_MSTOP(8, BIT(5)), 1), 297 DEF_MOD_MUX_EXTERNAL("gbeth_0_clk_rx_i", CLK_SMUX2_GBE0_RXCLK, 11, 9, 5, 25, ··· 339 DEF_RST(7, 6, 3, 7), /* WDT_1_RESET */ 340 DEF_RST(7, 7, 3, 8), /* WDT_2_RESET */ 341 DEF_RST(7, 8, 3, 9), /* WDT_3_RESET */ 342 + DEF_RST(8, 1, 3, 18), /* RSCI0_PRESETN */ 343 + DEF_RST(8, 2, 3, 19), /* RSCI0_TRESETN */ 344 + DEF_RST(8, 3, 3, 20), /* RSCI1_PRESETN */ 345 + DEF_RST(8, 4, 3, 21), /* RSCI1_TRESETN */ 346 + DEF_RST(8, 5, 3, 22), /* RSCI2_PRESETN */ 347 + DEF_RST(8, 6, 3, 23), /* RSCI2_TRESETN */ 348 + DEF_RST(8, 7, 3, 24), /* RSCI3_PRESETN */ 349 + DEF_RST(8, 8, 3, 25), /* RSCI3_TRESETN */ 350 + DEF_RST(8, 9, 3, 26), /* RSCI4_PRESETN */ 351 + DEF_RST(8, 10, 3, 27), /* RSCI4_TRESETN */ 352 + DEF_RST(8, 11, 3, 28), /* RSCI5_PRESETN */ 353 + DEF_RST(8, 12, 3, 29), /* RSCI5_TRESETN */ 354 + DEF_RST(8, 13, 3, 30), /* RSCI6_PRESETN */ 355 + DEF_RST(8, 14, 3, 31), /* RSCI6_TRESETN */ 356 + DEF_RST(8, 15, 4, 0), /* RSCI7_PRESETN */ 357 + DEF_RST(9, 0, 4, 1), /* RSCI7_TRESETN */ 358 + DEF_RST(9, 1, 4, 2), /* RSCI8_PRESETN */ 359 + DEF_RST(9, 2, 4, 3), /* RSCI8_TRESETN */ 360 + DEF_RST(9, 3, 4, 4), /* RSCI9_PRESETN */ 361 + DEF_RST(9, 4, 4, 5), /* RSCI9_TRESETN */ 362 DEF_RST(9, 5, 4, 6), /* SCIF_0_RST_SYSTEM_N */ 363 DEF_RST(9, 6, 4, 7), /* I3C_0_PRESETN */ 364 DEF_RST(9, 7, 4, 8), /* I3C_0_TRESETN */ ··· 359 DEF_RST(10, 8, 4, 25), /* SDHI_1_IXRST */ 360 DEF_RST(10, 9, 4, 26), /* SDHI_2_IXRST */ 361 DEF_RST(10, 10, 4, 27), /* USB3_0_ARESETN */ 362 + DEF_RST(10, 12, 4, 29), /* USB2_0_U2H0_HRESETN */ 363 + DEF_RST(10, 13, 4, 30), /* USB2_0_U2H1_HRESETN */ 364 + DEF_RST(10, 14, 4, 31), /* USB2_0_U2P_EXL_SYSRST */ 365 + DEF_RST(10, 15, 5, 0), /* USB2_0_PRESETN */ 366 DEF_RST(11, 0, 5, 1), /* GBETH_0_ARESETN_I */ 367 DEF_RST(11, 1, 5, 2), /* GBETH_1_ARESETN_I */ 368 DEF_RST(12, 5, 5, 22), /* CRU_0_PRESETN */
+117 -1
drivers/clk/renesas/r9a09g056-cpg.c
··· 6 */ 7 8 #include <linux/clk-provider.h> 9 #include <linux/device.h> 10 #include <linux/init.h> 11 #include <linux/kernel.h> ··· 17 18 enum clk_ids { 19 /* Core Clock Outputs exported to DT */ 20 - LAST_DT_CORE_CLK = R9A09G056_SPI_CLK_SPI, 21 22 /* External Input Clocks */ 23 CLK_AUDIO_EXTAL, ··· 29 CLK_PLLCLN, 30 CLK_PLLDTY, 31 CLK_PLLCA55, 32 CLK_PLLETH, 33 CLK_PLLGPU, 34 35 /* Internal Core Clocks */ ··· 50 CLK_PLLDTY_ACPU_DIV2, 51 CLK_PLLDTY_ACPU_DIV4, 52 CLK_PLLDTY_DIV8, 53 CLK_PLLETH_DIV_250_FIX, 54 CLK_PLLETH_DIV_125_FIX, 55 CLK_CSDIV_PLLETH_GBE0, ··· 62 CLK_SMUX2_GBE0_RXCLK, 63 CLK_SMUX2_GBE1_TXCLK, 64 CLK_SMUX2_GBE1_RXCLK, 65 CLK_PLLGPU_GEAR, 66 67 /* Module Clocks */ ··· 79 {0, 0}, 80 }; 81 82 static const struct clk_div_table dtable_2_16[] = { 83 {0, 2}, 84 {1, 4}, 85 {2, 8}, 86 {3, 16}, 87 {0, 0}, 88 }; 89 ··· 128 {2, 100}, 129 {0, 0}, 130 }; 131 132 /* Mux clock tables */ 133 static const char * const smux2_gbe0_rxclk[] = { ".plleth_gbe0", "et0_rxclk" }; ··· 159 DEF_FIXED(".pllcln", CLK_PLLCLN, CLK_QEXTAL, 200, 3), 160 DEF_FIXED(".plldty", CLK_PLLDTY, CLK_QEXTAL, 200, 3), 161 DEF_PLL(".pllca55", CLK_PLLCA55, CLK_QEXTAL, PLLCA55), 162 DEF_FIXED(".plleth", CLK_PLLETH, CLK_QEXTAL, 125, 3), 163 DEF_PLL(".pllgpu", CLK_PLLGPU, CLK_QEXTAL, PLLGPU), 164 165 /* Internal Core Clocks */ ··· 183 DEF_FIXED(".plldty_acpu_div2", CLK_PLLDTY_ACPU_DIV2, CLK_PLLDTY_ACPU, 1, 2), 184 DEF_FIXED(".plldty_acpu_div4", CLK_PLLDTY_ACPU_DIV4, CLK_PLLDTY_ACPU, 1, 4), 185 DEF_FIXED(".plldty_div8", CLK_PLLDTY_DIV8, CLK_PLLDTY, 1, 8), 186 187 DEF_FIXED(".plleth_250_fix", CLK_PLLETH_DIV_250_FIX, CLK_PLLETH, 1, 4), 188 DEF_FIXED(".plleth_125_fix", CLK_PLLETH_DIV_125_FIX, CLK_PLLETH_DIV_250_FIX, 1, 2), ··· 199 DEF_SMUX(".smux2_gbe0_rxclk", CLK_SMUX2_GBE0_RXCLK, SSEL0_SELCTL3, smux2_gbe0_rxclk), 200 DEF_SMUX(".smux2_gbe1_txclk", CLK_SMUX2_GBE1_TXCLK, SSEL1_SELCTL0, smux2_gbe1_txclk), 201 DEF_SMUX(".smux2_gbe1_rxclk", CLK_SMUX2_GBE1_RXCLK, SSEL1_SELCTL1, smux2_gbe1_rxclk), 202 203 DEF_DDIV(".pllgpu_gear", CLK_PLLGPU_GEAR, CLK_PLLGPU, CDDIV3_DIVCTL1, dtable_2_64), 204 ··· 226 CLK_PLLETH_DIV_125_FIX, 1, 1), 227 DEF_FIXED_MOD_STATUS("spi_clk_spi", R9A09G056_SPI_CLK_SPI, CLK_PLLCM33_XSPI, 1, 2, 228 FIXED_MOD_CONF_XSPI), 229 }; 230 231 static const struct rzv2h_mod_clk r9a09g056_mod_clks[] __initconst = { ··· 321 BUS_MSTOP(8, BIT(4))), 322 DEF_MOD("sdhi_2_aclk", CLK_PLLDTY_ACPU_DIV4, 10, 14, 5, 14, 323 BUS_MSTOP(8, BIT(4))), 324 DEF_MOD("usb2_0_u2h0_hclk", CLK_PLLDTY_DIV8, 11, 3, 5, 19, 325 BUS_MSTOP(7, BIT(7))), 326 DEF_MOD("usb2_0_u2p_exr_cpuclk", CLK_PLLDTY_ACPU_DIV4, 11, 5, 5, 21, ··· 355 BUS_MSTOP(8, BIT(6))), 356 DEF_MOD("gbeth_1_aclk_i", CLK_PLLDTY_DIV8, 12, 3, 6, 3, 357 BUS_MSTOP(8, BIT(6))), 358 DEF_MOD("gpu_0_clk", CLK_PLLGPU_GEAR, 15, 0, 7, 16, 359 BUS_MSTOP(3, BIT(4))), 360 DEF_MOD("gpu_0_axi_clk", CLK_PLLDTY_ACPU_DIV2, 15, 1, 7, 17, ··· 432 DEF_RST(10, 7, 4, 24), /* SDHI_0_IXRST */ 433 DEF_RST(10, 8, 4, 25), /* SDHI_1_IXRST */ 434 DEF_RST(10, 9, 4, 26), /* SDHI_2_IXRST */ 435 DEF_RST(10, 12, 4, 29), /* USB2_0_U2H0_HRESETN */ 436 DEF_RST(10, 14, 4, 31), /* USB2_0_U2P_EXL_SYSRST */ 437 DEF_RST(10, 15, 5, 0), /* USB2_0_PRESETN */ 438 DEF_RST(11, 0, 5, 1), /* GBETH_0_ARESETN_I */ 439 DEF_RST(11, 1, 5, 2), /* GBETH_1_ARESETN_I */ 440 DEF_RST(13, 13, 6, 14), /* GPU_0_RESETN */ 441 DEF_RST(13, 14, 6, 15), /* GPU_0_AXI_RESETN */ 442 DEF_RST(13, 15, 6, 16), /* GPU_0_ACE_RESETN */
··· 6 */ 7 8 #include <linux/clk-provider.h> 9 + #include <linux/clk/renesas.h> 10 #include <linux/device.h> 11 #include <linux/init.h> 12 #include <linux/kernel.h> ··· 16 17 enum clk_ids { 18 /* Core Clock Outputs exported to DT */ 19 + LAST_DT_CORE_CLK = R9A09G056_USB3_0_CLKCORE, 20 21 /* External Input Clocks */ 22 CLK_AUDIO_EXTAL, ··· 28 CLK_PLLCLN, 29 CLK_PLLDTY, 30 CLK_PLLCA55, 31 + CLK_PLLVDO, 32 CLK_PLLETH, 33 + CLK_PLLDSI, 34 CLK_PLLGPU, 35 36 /* Internal Core Clocks */ ··· 47 CLK_PLLDTY_ACPU_DIV2, 48 CLK_PLLDTY_ACPU_DIV4, 49 CLK_PLLDTY_DIV8, 50 + CLK_PLLDTY_DIV16, 51 + CLK_PLLVDO_CRU0, 52 + CLK_PLLVDO_CRU1, 53 + CLK_PLLVDO_ISP, 54 CLK_PLLETH_DIV_250_FIX, 55 CLK_PLLETH_DIV_125_FIX, 56 CLK_CSDIV_PLLETH_GBE0, ··· 55 CLK_SMUX2_GBE0_RXCLK, 56 CLK_SMUX2_GBE1_TXCLK, 57 CLK_SMUX2_GBE1_RXCLK, 58 + CLK_CDIV4_PLLETH_LPCLK, 59 + CLK_PLLETH_LPCLK_GEAR, 60 + CLK_PLLDSI_GEAR, 61 CLK_PLLGPU_GEAR, 62 63 /* Module Clocks */ ··· 69 {0, 0}, 70 }; 71 72 + static const struct clk_div_table dtable_2_4[] = { 73 + {0, 2}, 74 + {1, 4}, 75 + {0, 0}, 76 + }; 77 + 78 static const struct clk_div_table dtable_2_16[] = { 79 {0, 2}, 80 {1, 4}, 81 {2, 8}, 82 {3, 16}, 83 + {0, 0}, 84 + }; 85 + 86 + static const struct clk_div_table dtable_2_32[] = { 87 + {0, 2}, 88 + {1, 4}, 89 + {2, 6}, 90 + {3, 8}, 91 + {4, 10}, 92 + {5, 12}, 93 + {6, 14}, 94 + {7, 16}, 95 + {8, 18}, 96 + {9, 20}, 97 + {10, 22}, 98 + {11, 24}, 99 + {12, 26}, 100 + {13, 28}, 101 + {14, 30}, 102 + {15, 32}, 103 {0, 0}, 104 }; 105 ··· 92 {2, 100}, 93 {0, 0}, 94 }; 95 + 96 + static const struct clk_div_table dtable_16_128[] = { 97 + {0, 16}, 98 + {1, 32}, 99 + {2, 64}, 100 + {3, 128}, 101 + {0, 0}, 102 + }; 103 + 104 + RZV2H_CPG_PLL_DSI_LIMITS(rzv2n_cpg_pll_dsi_limits); 105 + #define PLLDSI PLL_PACK_LIMITS(0xc0, 1, 0, &rzv2n_cpg_pll_dsi_limits) 106 107 /* Mux clock tables */ 108 static const char * const smux2_gbe0_rxclk[] = { ".plleth_gbe0", "et0_rxclk" }; ··· 112 DEF_FIXED(".pllcln", CLK_PLLCLN, CLK_QEXTAL, 200, 3), 113 DEF_FIXED(".plldty", CLK_PLLDTY, CLK_QEXTAL, 200, 3), 114 DEF_PLL(".pllca55", CLK_PLLCA55, CLK_QEXTAL, PLLCA55), 115 + DEF_FIXED(".pllvdo", CLK_PLLVDO, CLK_QEXTAL, 105, 2), 116 DEF_FIXED(".plleth", CLK_PLLETH, CLK_QEXTAL, 125, 3), 117 + DEF_PLLDSI(".plldsi", CLK_PLLDSI, CLK_QEXTAL, PLLDSI), 118 DEF_PLL(".pllgpu", CLK_PLLGPU, CLK_QEXTAL, PLLGPU), 119 120 /* Internal Core Clocks */ ··· 134 DEF_FIXED(".plldty_acpu_div2", CLK_PLLDTY_ACPU_DIV2, CLK_PLLDTY_ACPU, 1, 2), 135 DEF_FIXED(".plldty_acpu_div4", CLK_PLLDTY_ACPU_DIV4, CLK_PLLDTY_ACPU, 1, 4), 136 DEF_FIXED(".plldty_div8", CLK_PLLDTY_DIV8, CLK_PLLDTY, 1, 8), 137 + DEF_FIXED(".plldty_div16", CLK_PLLDTY_DIV16, CLK_PLLDTY, 1, 16), 138 + 139 + DEF_DDIV(".pllvdo_cru0", CLK_PLLVDO_CRU0, CLK_PLLVDO, CDDIV3_DIVCTL3, dtable_2_4), 140 + DEF_DDIV(".pllvdo_cru1", CLK_PLLVDO_CRU1, CLK_PLLVDO, CDDIV4_DIVCTL0, dtable_2_4), 141 + DEF_DDIV(".pllvdo_isp", CLK_PLLVDO_ISP, CLK_PLLVDO, CDDIV2_DIVCTL3, dtable_2_64), 142 143 DEF_FIXED(".plleth_250_fix", CLK_PLLETH_DIV_250_FIX, CLK_PLLETH, 1, 4), 144 DEF_FIXED(".plleth_125_fix", CLK_PLLETH_DIV_125_FIX, CLK_PLLETH_DIV_250_FIX, 1, 2), ··· 145 DEF_SMUX(".smux2_gbe0_rxclk", CLK_SMUX2_GBE0_RXCLK, SSEL0_SELCTL3, smux2_gbe0_rxclk), 146 DEF_SMUX(".smux2_gbe1_txclk", CLK_SMUX2_GBE1_TXCLK, SSEL1_SELCTL0, smux2_gbe1_txclk), 147 DEF_SMUX(".smux2_gbe1_rxclk", CLK_SMUX2_GBE1_RXCLK, SSEL1_SELCTL1, smux2_gbe1_rxclk), 148 + DEF_FIXED(".cdiv4_plleth_lpclk", CLK_CDIV4_PLLETH_LPCLK, CLK_PLLETH, 1, 4), 149 + DEF_CSDIV(".plleth_lpclk_gear", CLK_PLLETH_LPCLK_GEAR, CLK_CDIV4_PLLETH_LPCLK, 150 + CSDIV0_DIVCTL2, dtable_16_128), 151 + 152 + DEF_PLLDSI_DIV(".plldsi_gear", CLK_PLLDSI_GEAR, CLK_PLLDSI, 153 + CSDIV1_DIVCTL2, dtable_2_32), 154 155 DEF_DDIV(".pllgpu_gear", CLK_PLLGPU_GEAR, CLK_PLLGPU, CDDIV3_DIVCTL1, dtable_2_64), 156 ··· 166 CLK_PLLETH_DIV_125_FIX, 1, 1), 167 DEF_FIXED_MOD_STATUS("spi_clk_spi", R9A09G056_SPI_CLK_SPI, CLK_PLLCM33_XSPI, 1, 2, 168 FIXED_MOD_CONF_XSPI), 169 + DEF_FIXED("usb3_0_ref_alt_clk_p", R9A09G056_USB3_0_REF_ALT_CLK_P, CLK_QEXTAL, 1, 1), 170 + DEF_FIXED("usb3_0_core_clk", R9A09G056_USB3_0_CLKCORE, CLK_QEXTAL, 1, 1), 171 }; 172 173 static const struct rzv2h_mod_clk r9a09g056_mod_clks[] __initconst = { ··· 259 BUS_MSTOP(8, BIT(4))), 260 DEF_MOD("sdhi_2_aclk", CLK_PLLDTY_ACPU_DIV4, 10, 14, 5, 14, 261 BUS_MSTOP(8, BIT(4))), 262 + DEF_MOD("usb3_0_aclk", CLK_PLLDTY_DIV8, 10, 15, 5, 15, 263 + BUS_MSTOP(7, BIT(12))), 264 + DEF_MOD("usb3_0_pclk_usbtst", CLK_PLLDTY_ACPU_DIV4, 11, 0, 5, 16, 265 + BUS_MSTOP(7, BIT(14))), 266 DEF_MOD("usb2_0_u2h0_hclk", CLK_PLLDTY_DIV8, 11, 3, 5, 19, 267 BUS_MSTOP(7, BIT(7))), 268 DEF_MOD("usb2_0_u2p_exr_cpuclk", CLK_PLLDTY_ACPU_DIV4, 11, 5, 5, 21, ··· 289 BUS_MSTOP(8, BIT(6))), 290 DEF_MOD("gbeth_1_aclk_i", CLK_PLLDTY_DIV8, 12, 3, 6, 3, 291 BUS_MSTOP(8, BIT(6))), 292 + DEF_MOD("cru_0_aclk", CLK_PLLDTY_ACPU_DIV2, 13, 2, 6, 18, 293 + BUS_MSTOP(9, BIT(4))), 294 + DEF_MOD_NO_PM("cru_0_vclk", CLK_PLLVDO_CRU0, 13, 3, 6, 19, 295 + BUS_MSTOP(9, BIT(4))), 296 + DEF_MOD("cru_0_pclk", CLK_PLLDTY_DIV16, 13, 4, 6, 20, 297 + BUS_MSTOP(9, BIT(4))), 298 + DEF_MOD("cru_1_aclk", CLK_PLLDTY_ACPU_DIV2, 13, 5, 6, 21, 299 + BUS_MSTOP(9, BIT(5))), 300 + DEF_MOD_NO_PM("cru_1_vclk", CLK_PLLVDO_CRU1, 13, 6, 6, 22, 301 + BUS_MSTOP(9, BIT(5))), 302 + DEF_MOD("cru_1_pclk", CLK_PLLDTY_DIV16, 13, 7, 6, 23, 303 + BUS_MSTOP(9, BIT(5))), 304 + DEF_MOD("isp_0_reg_aclk", CLK_PLLDTY_ACPU_DIV2, 14, 2, 7, 2, 305 + BUS_MSTOP(9, BIT(8))), 306 + DEF_MOD("isp_0_pclk", CLK_PLLDTY_DIV16, 14, 3, 7, 3, 307 + BUS_MSTOP(9, BIT(8))), 308 + DEF_MOD("isp_0_vin_aclk", CLK_PLLDTY_ACPU_DIV2, 14, 4, 7, 4, 309 + BUS_MSTOP(9, BIT(9))), 310 + DEF_MOD("isp_0_isp_sclk", CLK_PLLVDO_ISP, 14, 5, 7, 5, 311 + BUS_MSTOP(9, BIT(9))), 312 + DEF_MOD("dsi_0_pclk", CLK_PLLDTY_DIV16, 14, 8, 7, 8, 313 + BUS_MSTOP(9, BIT(14) | BIT(15))), 314 + DEF_MOD("dsi_0_aclk", CLK_PLLDTY_ACPU_DIV2, 14, 9, 7, 9, 315 + BUS_MSTOP(9, BIT(14) | BIT(15))), 316 + DEF_MOD("dsi_0_vclk1", CLK_PLLDSI_GEAR, 14, 10, 7, 10, 317 + BUS_MSTOP(9, BIT(14) | BIT(15))), 318 + DEF_MOD("dsi_0_lpclk", CLK_PLLETH_LPCLK_GEAR, 14, 11, 7, 11, 319 + BUS_MSTOP(9, BIT(14) | BIT(15))), 320 + DEF_MOD("dsi_0_pllref_clk", CLK_QEXTAL, 14, 12, 7, 12, 321 + BUS_MSTOP(9, BIT(14) | BIT(15))), 322 + DEF_MOD("lcdc_0_clk_a", CLK_PLLDTY_ACPU_DIV2, 14, 13, 7, 13, 323 + BUS_MSTOP(10, BIT(1) | BIT(2) | BIT(3))), 324 + DEF_MOD("lcdc_0_clk_p", CLK_PLLDTY_DIV16, 14, 14, 7, 14, 325 + BUS_MSTOP(10, BIT(1) | BIT(2) | BIT(3))), 326 + DEF_MOD("lcdc_0_clk_d", CLK_PLLDSI_GEAR, 14, 15, 7, 15, 327 + BUS_MSTOP(10, BIT(1) | BIT(2) | BIT(3))), 328 DEF_MOD("gpu_0_clk", CLK_PLLGPU_GEAR, 15, 0, 7, 16, 329 BUS_MSTOP(3, BIT(4))), 330 DEF_MOD("gpu_0_axi_clk", CLK_PLLDTY_ACPU_DIV2, 15, 1, 7, 17, ··· 330 DEF_RST(10, 7, 4, 24), /* SDHI_0_IXRST */ 331 DEF_RST(10, 8, 4, 25), /* SDHI_1_IXRST */ 332 DEF_RST(10, 9, 4, 26), /* SDHI_2_IXRST */ 333 + DEF_RST(10, 10, 4, 27), /* USB3_0_ARESETN */ 334 DEF_RST(10, 12, 4, 29), /* USB2_0_U2H0_HRESETN */ 335 DEF_RST(10, 14, 4, 31), /* USB2_0_U2P_EXL_SYSRST */ 336 DEF_RST(10, 15, 5, 0), /* USB2_0_PRESETN */ 337 DEF_RST(11, 0, 5, 1), /* GBETH_0_ARESETN_I */ 338 DEF_RST(11, 1, 5, 2), /* GBETH_1_ARESETN_I */ 339 + DEF_RST(12, 5, 5, 22), /* CRU_0_PRESETN */ 340 + DEF_RST(12, 6, 5, 23), /* CRU_0_ARESETN */ 341 + DEF_RST(12, 7, 5, 24), /* CRU_0_S_RESETN */ 342 + DEF_RST(12, 8, 5, 25), /* CRU_1_PRESETN */ 343 + DEF_RST(12, 9, 5, 26), /* CRU_1_ARESETN */ 344 + DEF_RST(12, 10, 5, 27), /* CRU_1_S_RESETN */ 345 + DEF_RST(13, 1, 6, 2), /* ISP_0_VIN_ARESETN */ 346 + DEF_RST(13, 2, 6, 3), /* ISP_0_REG_ARESETN */ 347 + DEF_RST(13, 3, 6, 4), /* ISP_0_ISP_SRESETN */ 348 + DEF_RST(13, 4, 6, 5), /* ISP_0_PRESETN */ 349 + DEF_RST(13, 7, 6, 8), /* DSI_0_PRESETN */ 350 + DEF_RST(13, 8, 6, 9), /* DSI_0_ARESETN */ 351 + DEF_RST(13, 12, 6, 13), /* LCDC_0_RESET_N */ 352 DEF_RST(13, 13, 6, 14), /* GPU_0_RESETN */ 353 DEF_RST(13, 14, 6, 15), /* GPU_0_AXI_RESETN */ 354 DEF_RST(13, 15, 6, 16), /* GPU_0_ACE_RESETN */
+101 -1
drivers/clk/renesas/r9a09g057-cpg.c
··· 6 */ 7 8 #include <linux/clk-provider.h> 9 #include <linux/device.h> 10 #include <linux/init.h> 11 #include <linux/kernel.h> ··· 17 18 enum clk_ids { 19 /* Core Clock Outputs exported to DT */ 20 - LAST_DT_CORE_CLK = R9A09G057_SPI_CLK_SPI, 21 22 /* External Input Clocks */ 23 CLK_AUDIO_EXTAL, ··· 31 CLK_PLLCA55, 32 CLK_PLLVDO, 33 CLK_PLLETH, 34 CLK_PLLGPU, 35 36 /* Internal Core Clocks */ ··· 57 CLK_PLLVDO_CRU1, 58 CLK_PLLVDO_CRU2, 59 CLK_PLLVDO_CRU3, 60 CLK_PLLETH_DIV_250_FIX, 61 CLK_PLLETH_DIV_125_FIX, 62 CLK_CSDIV_PLLETH_GBE0, ··· 66 CLK_SMUX2_GBE0_RXCLK, 67 CLK_SMUX2_GBE1_TXCLK, 68 CLK_SMUX2_GBE1_RXCLK, 69 CLK_PLLGPU_GEAR, 70 71 /* Module Clocks */ ··· 97 {0, 0}, 98 }; 99 100 static const struct clk_div_table dtable_2_64[] = { 101 {0, 2}, 102 {1, 4}, ··· 132 {2, 100}, 133 {0, 0}, 134 }; 135 136 /* Mux clock tables */ 137 static const char * const smux2_gbe0_rxclk[] = { ".plleth_gbe0", "et0_rxclk" }; ··· 165 DEF_PLL(".pllca55", CLK_PLLCA55, CLK_QEXTAL, PLLCA55), 166 DEF_FIXED(".pllvdo", CLK_PLLVDO, CLK_QEXTAL, 105, 2), 167 DEF_FIXED(".plleth", CLK_PLLETH, CLK_QEXTAL, 125, 3), 168 DEF_PLL(".pllgpu", CLK_PLLGPU, CLK_QEXTAL, PLLGPU), 169 170 /* Internal Core Clocks */ ··· 195 DEF_DDIV(".pllvdo_cru1", CLK_PLLVDO_CRU1, CLK_PLLVDO, CDDIV4_DIVCTL0, dtable_2_4), 196 DEF_DDIV(".pllvdo_cru2", CLK_PLLVDO_CRU2, CLK_PLLVDO, CDDIV4_DIVCTL1, dtable_2_4), 197 DEF_DDIV(".pllvdo_cru3", CLK_PLLVDO_CRU3, CLK_PLLVDO, CDDIV4_DIVCTL2, dtable_2_4), 198 199 DEF_FIXED(".plleth_250_fix", CLK_PLLETH_DIV_250_FIX, CLK_PLLETH, 1, 4), 200 DEF_FIXED(".plleth_125_fix", CLK_PLLETH_DIV_125_FIX, CLK_PLLETH_DIV_250_FIX, 1, 2), ··· 207 DEF_SMUX(".smux2_gbe0_rxclk", CLK_SMUX2_GBE0_RXCLK, SSEL0_SELCTL3, smux2_gbe0_rxclk), 208 DEF_SMUX(".smux2_gbe1_txclk", CLK_SMUX2_GBE1_TXCLK, SSEL1_SELCTL0, smux2_gbe1_txclk), 209 DEF_SMUX(".smux2_gbe1_rxclk", CLK_SMUX2_GBE1_RXCLK, SSEL1_SELCTL1, smux2_gbe1_rxclk), 210 211 DEF_DDIV(".pllgpu_gear", CLK_PLLGPU_GEAR, CLK_PLLGPU, CDDIV3_DIVCTL1, dtable_2_64), 212 ··· 235 CLK_PLLETH_DIV_125_FIX, 1, 1), 236 DEF_FIXED_MOD_STATUS("spi_clk_spi", R9A09G057_SPI_CLK_SPI, CLK_PLLCM33_XSPI, 1, 2, 237 FIXED_MOD_CONF_XSPI), 238 }; 239 240 static const struct rzv2h_mod_clk r9a09g057_mod_clks[] __initconst = { ··· 288 BUS_MSTOP(5, BIT(13))), 289 DEF_MOD("wdt_3_clk_loco", CLK_QEXTAL, 5, 2, 2, 18, 290 BUS_MSTOP(5, BIT(13))), 291 DEF_MOD("rspi_0_pclk", CLK_PLLCLN_DIV8, 5, 4, 2, 20, 292 BUS_MSTOP(11, BIT(0))), 293 DEF_MOD("rspi_0_pclk_sfr", CLK_PLLCLN_DIV8, 5, 5, 2, 21, ··· 364 BUS_MSTOP(8, BIT(4))), 365 DEF_MOD("sdhi_2_aclk", CLK_PLLDTY_ACPU_DIV4, 10, 14, 5, 14, 366 BUS_MSTOP(8, BIT(4))), 367 DEF_MOD("usb2_0_u2h0_hclk", CLK_PLLDTY_DIV8, 11, 3, 5, 19, 368 BUS_MSTOP(7, BIT(7))), 369 DEF_MOD("usb2_0_u2h1_hclk", CLK_PLLDTY_DIV8, 11, 4, 5, 20, ··· 430 BUS_MSTOP(9, BIT(7))), 431 DEF_MOD("cru_3_pclk", CLK_PLLDTY_DIV16, 13, 13, 6, 29, 432 BUS_MSTOP(9, BIT(7))), 433 DEF_MOD("gpu_0_clk", CLK_PLLGPU_GEAR, 15, 0, 7, 16, 434 BUS_MSTOP(3, BIT(4))), 435 DEF_MOD("gpu_0_axi_clk", CLK_PLLDTY_ACPU_DIV2, 15, 1, 7, 17, 436 BUS_MSTOP(3, BIT(4))), 437 DEF_MOD("gpu_0_ace_clk", CLK_PLLDTY_ACPU_DIV2, 15, 2, 7, 18, 438 BUS_MSTOP(3, BIT(4))), 439 }; 440 441 static const struct rzv2h_reset r9a09g057_resets[] __initconst = { ··· 488 DEF_RST(7, 6, 3, 7), /* WDT_1_RESET */ 489 DEF_RST(7, 7, 3, 8), /* WDT_2_RESET */ 490 DEF_RST(7, 8, 3, 9), /* WDT_3_RESET */ 491 DEF_RST(7, 11, 3, 12), /* RSPI_0_PRESETN */ 492 DEF_RST(7, 12, 3, 13), /* RSPI_0_TRESETN */ 493 DEF_RST(7, 13, 3, 14), /* RSPI_1_PRESETN */ ··· 513 DEF_RST(10, 7, 4, 24), /* SDHI_0_IXRST */ 514 DEF_RST(10, 8, 4, 25), /* SDHI_1_IXRST */ 515 DEF_RST(10, 9, 4, 26), /* SDHI_2_IXRST */ 516 DEF_RST(10, 12, 4, 29), /* USB2_0_U2H0_HRESETN */ 517 DEF_RST(10, 13, 4, 30), /* USB2_0_U2H1_HRESETN */ 518 DEF_RST(10, 14, 4, 31), /* USB2_0_U2P_EXL_SYSRST */ ··· 533 DEF_RST(12, 14, 5, 31), /* CRU_3_PRESETN */ 534 DEF_RST(12, 15, 6, 0), /* CRU_3_ARESETN */ 535 DEF_RST(13, 0, 6, 1), /* CRU_3_S_RESETN */ 536 DEF_RST(13, 13, 6, 14), /* GPU_0_RESETN */ 537 DEF_RST(13, 14, 6, 15), /* GPU_0_AXI_RESETN */ 538 DEF_RST(13, 15, 6, 16), /* GPU_0_ACE_RESETN */ 539 }; 540 541 const struct rzv2h_cpg_info r9a09g057_cpg_info __initconst = {
··· 6 */ 7 8 #include <linux/clk-provider.h> 9 + #include <linux/clk/renesas.h> 10 #include <linux/device.h> 11 #include <linux/init.h> 12 #include <linux/kernel.h> ··· 16 17 enum clk_ids { 18 /* Core Clock Outputs exported to DT */ 19 + LAST_DT_CORE_CLK = R9A09G057_USB3_1_CLKCORE, 20 21 /* External Input Clocks */ 22 CLK_AUDIO_EXTAL, ··· 30 CLK_PLLCA55, 31 CLK_PLLVDO, 32 CLK_PLLETH, 33 + CLK_PLLDSI, 34 CLK_PLLGPU, 35 36 /* Internal Core Clocks */ ··· 55 CLK_PLLVDO_CRU1, 56 CLK_PLLVDO_CRU2, 57 CLK_PLLVDO_CRU3, 58 + CLK_PLLVDO_ISP, 59 CLK_PLLETH_DIV_250_FIX, 60 CLK_PLLETH_DIV_125_FIX, 61 CLK_CSDIV_PLLETH_GBE0, ··· 63 CLK_SMUX2_GBE0_RXCLK, 64 CLK_SMUX2_GBE1_TXCLK, 65 CLK_SMUX2_GBE1_RXCLK, 66 + CLK_CDIV4_PLLETH_LPCLK, 67 + CLK_PLLETH_LPCLK_GEAR, 68 + CLK_PLLDSI_GEAR, 69 CLK_PLLGPU_GEAR, 70 71 /* Module Clocks */ ··· 91 {0, 0}, 92 }; 93 94 + static const struct clk_div_table dtable_2_32[] = { 95 + {0, 2}, 96 + {1, 4}, 97 + {2, 6}, 98 + {3, 8}, 99 + {4, 10}, 100 + {5, 12}, 101 + {6, 14}, 102 + {7, 16}, 103 + {8, 18}, 104 + {9, 20}, 105 + {10, 22}, 106 + {11, 24}, 107 + {12, 26}, 108 + {13, 28}, 109 + {14, 30}, 110 + {15, 32}, 111 + {0, 0}, 112 + }; 113 + 114 static const struct clk_div_table dtable_2_64[] = { 115 {0, 2}, 116 {1, 4}, ··· 106 {2, 100}, 107 {0, 0}, 108 }; 109 + 110 + static const struct clk_div_table dtable_16_128[] = { 111 + {0, 16}, 112 + {1, 32}, 113 + {2, 64}, 114 + {3, 128}, 115 + {0, 0}, 116 + }; 117 + 118 + RZV2H_CPG_PLL_DSI_LIMITS(rzv2h_cpg_pll_dsi_limits); 119 + #define PLLDSI PLL_PACK_LIMITS(0xc0, 1, 0, &rzv2h_cpg_pll_dsi_limits) 120 121 /* Mux clock tables */ 122 static const char * const smux2_gbe0_rxclk[] = { ".plleth_gbe0", "et0_rxclk" }; ··· 128 DEF_PLL(".pllca55", CLK_PLLCA55, CLK_QEXTAL, PLLCA55), 129 DEF_FIXED(".pllvdo", CLK_PLLVDO, CLK_QEXTAL, 105, 2), 130 DEF_FIXED(".plleth", CLK_PLLETH, CLK_QEXTAL, 125, 3), 131 + DEF_PLLDSI(".plldsi", CLK_PLLDSI, CLK_QEXTAL, PLLDSI), 132 DEF_PLL(".pllgpu", CLK_PLLGPU, CLK_QEXTAL, PLLGPU), 133 134 /* Internal Core Clocks */ ··· 157 DEF_DDIV(".pllvdo_cru1", CLK_PLLVDO_CRU1, CLK_PLLVDO, CDDIV4_DIVCTL0, dtable_2_4), 158 DEF_DDIV(".pllvdo_cru2", CLK_PLLVDO_CRU2, CLK_PLLVDO, CDDIV4_DIVCTL1, dtable_2_4), 159 DEF_DDIV(".pllvdo_cru3", CLK_PLLVDO_CRU3, CLK_PLLVDO, CDDIV4_DIVCTL2, dtable_2_4), 160 + DEF_DDIV(".pllvdo_isp", CLK_PLLVDO_ISP, CLK_PLLVDO, CDDIV2_DIVCTL3, dtable_2_64), 161 162 DEF_FIXED(".plleth_250_fix", CLK_PLLETH_DIV_250_FIX, CLK_PLLETH, 1, 4), 163 DEF_FIXED(".plleth_125_fix", CLK_PLLETH_DIV_125_FIX, CLK_PLLETH_DIV_250_FIX, 1, 2), ··· 168 DEF_SMUX(".smux2_gbe0_rxclk", CLK_SMUX2_GBE0_RXCLK, SSEL0_SELCTL3, smux2_gbe0_rxclk), 169 DEF_SMUX(".smux2_gbe1_txclk", CLK_SMUX2_GBE1_TXCLK, SSEL1_SELCTL0, smux2_gbe1_txclk), 170 DEF_SMUX(".smux2_gbe1_rxclk", CLK_SMUX2_GBE1_RXCLK, SSEL1_SELCTL1, smux2_gbe1_rxclk), 171 + DEF_FIXED(".cdiv4_plleth_lpclk", CLK_CDIV4_PLLETH_LPCLK, CLK_PLLETH, 1, 4), 172 + DEF_CSDIV(".plleth_lpclk_gear", CLK_PLLETH_LPCLK_GEAR, CLK_CDIV4_PLLETH_LPCLK, 173 + CSDIV0_DIVCTL2, dtable_16_128), 174 + 175 + DEF_PLLDSI_DIV(".plldsi_gear", CLK_PLLDSI_GEAR, CLK_PLLDSI, 176 + CSDIV1_DIVCTL2, dtable_2_32), 177 178 DEF_DDIV(".pllgpu_gear", CLK_PLLGPU_GEAR, CLK_PLLGPU, CDDIV3_DIVCTL1, dtable_2_64), 179 ··· 190 CLK_PLLETH_DIV_125_FIX, 1, 1), 191 DEF_FIXED_MOD_STATUS("spi_clk_spi", R9A09G057_SPI_CLK_SPI, CLK_PLLCM33_XSPI, 1, 2, 192 FIXED_MOD_CONF_XSPI), 193 + DEF_FIXED("usb3_0_ref_alt_clk_p", R9A09G057_USB3_0_REF_ALT_CLK_P, CLK_QEXTAL, 1, 1), 194 + DEF_FIXED("usb3_0_core_clk", R9A09G057_USB3_0_CLKCORE, CLK_QEXTAL, 1, 1), 195 + DEF_FIXED("usb3_1_ref_alt_clk_p", R9A09G057_USB3_1_REF_ALT_CLK_P, CLK_QEXTAL, 1, 1), 196 + DEF_FIXED("usb3_1_core_clk", R9A09G057_USB3_1_CLKCORE, CLK_QEXTAL, 1, 1), 197 }; 198 199 static const struct rzv2h_mod_clk r9a09g057_mod_clks[] __initconst = { ··· 239 BUS_MSTOP(5, BIT(13))), 240 DEF_MOD("wdt_3_clk_loco", CLK_QEXTAL, 5, 2, 2, 18, 241 BUS_MSTOP(5, BIT(13))), 242 + DEF_MOD("rtc_0_clk_rtc", CLK_PLLCM33_DIV16, 5, 3, 2, 19, 243 + BUS_MSTOP(3, BIT(11) | BIT(12))), 244 DEF_MOD("rspi_0_pclk", CLK_PLLCLN_DIV8, 5, 4, 2, 20, 245 BUS_MSTOP(11, BIT(0))), 246 DEF_MOD("rspi_0_pclk_sfr", CLK_PLLCLN_DIV8, 5, 5, 2, 21, ··· 313 BUS_MSTOP(8, BIT(4))), 314 DEF_MOD("sdhi_2_aclk", CLK_PLLDTY_ACPU_DIV4, 10, 14, 5, 14, 315 BUS_MSTOP(8, BIT(4))), 316 + DEF_MOD("usb3_0_aclk", CLK_PLLDTY_DIV8, 10, 15, 5, 15, 317 + BUS_MSTOP(7, BIT(12))), 318 + DEF_MOD("usb3_0_pclk_usbtst", CLK_PLLDTY_ACPU_DIV4, 11, 0, 5, 16, 319 + BUS_MSTOP(7, BIT(14))), 320 + DEF_MOD("usb3_1_aclk", CLK_PLLDTY_DIV8, 11, 1, 5, 17, 321 + BUS_MSTOP(7, BIT(13))), 322 + DEF_MOD("usb3_1_pclk_usbtst", CLK_PLLDTY_ACPU_DIV4, 11, 2, 5, 18, 323 + BUS_MSTOP(7, BIT(15))), 324 DEF_MOD("usb2_0_u2h0_hclk", CLK_PLLDTY_DIV8, 11, 3, 5, 19, 325 BUS_MSTOP(7, BIT(7))), 326 DEF_MOD("usb2_0_u2h1_hclk", CLK_PLLDTY_DIV8, 11, 4, 5, 20, ··· 371 BUS_MSTOP(9, BIT(7))), 372 DEF_MOD("cru_3_pclk", CLK_PLLDTY_DIV16, 13, 13, 6, 29, 373 BUS_MSTOP(9, BIT(7))), 374 + DEF_MOD("isp_0_reg_aclk", CLK_PLLDTY_ACPU_DIV2, 14, 2, 7, 2, 375 + BUS_MSTOP(9, BIT(8))), 376 + DEF_MOD("isp_0_pclk", CLK_PLLDTY_DIV16, 14, 3, 7, 3, 377 + BUS_MSTOP(9, BIT(8))), 378 + DEF_MOD("isp_0_vin_aclk", CLK_PLLDTY_ACPU_DIV2, 14, 4, 7, 4, 379 + BUS_MSTOP(9, BIT(9))), 380 + DEF_MOD("isp_0_isp_sclk", CLK_PLLVDO_ISP, 14, 5, 7, 5, 381 + BUS_MSTOP(9, BIT(9))), 382 + DEF_MOD("dsi_0_pclk", CLK_PLLDTY_DIV16, 14, 8, 7, 8, 383 + BUS_MSTOP(9, BIT(14) | BIT(15))), 384 + DEF_MOD("dsi_0_aclk", CLK_PLLDTY_ACPU_DIV2, 14, 9, 7, 9, 385 + BUS_MSTOP(9, BIT(14) | BIT(15))), 386 + DEF_MOD("dsi_0_vclk1", CLK_PLLDSI_GEAR, 14, 10, 7, 10, 387 + BUS_MSTOP(9, BIT(14) | BIT(15))), 388 + DEF_MOD("dsi_0_lpclk", CLK_PLLETH_LPCLK_GEAR, 14, 11, 7, 11, 389 + BUS_MSTOP(9, BIT(14) | BIT(15))), 390 + DEF_MOD("dsi_0_pllref_clk", CLK_QEXTAL, 14, 12, 7, 12, 391 + BUS_MSTOP(9, BIT(14) | BIT(15))), 392 + DEF_MOD("lcdc_0_clk_a", CLK_PLLDTY_ACPU_DIV2, 14, 13, 7, 13, 393 + BUS_MSTOP(10, BIT(1) | BIT(2) | BIT(3))), 394 + DEF_MOD("lcdc_0_clk_p", CLK_PLLDTY_DIV16, 14, 14, 7, 14, 395 + BUS_MSTOP(10, BIT(1) | BIT(2) | BIT(3))), 396 + DEF_MOD("lcdc_0_clk_d", CLK_PLLDSI_GEAR, 14, 15, 7, 15, 397 + BUS_MSTOP(10, BIT(1) | BIT(2) | BIT(3))), 398 DEF_MOD("gpu_0_clk", CLK_PLLGPU_GEAR, 15, 0, 7, 16, 399 BUS_MSTOP(3, BIT(4))), 400 DEF_MOD("gpu_0_axi_clk", CLK_PLLDTY_ACPU_DIV2, 15, 1, 7, 17, 401 BUS_MSTOP(3, BIT(4))), 402 DEF_MOD("gpu_0_ace_clk", CLK_PLLDTY_ACPU_DIV2, 15, 2, 7, 18, 403 BUS_MSTOP(3, BIT(4))), 404 + DEF_MOD("tsu_0_pclk", CLK_QEXTAL, 16, 9, 8, 9, 405 + BUS_MSTOP(5, BIT(2))), 406 + DEF_MOD("tsu_1_pclk", CLK_QEXTAL, 16, 10, 8, 10, 407 + BUS_MSTOP(2, BIT(15))), 408 }; 409 410 static const struct rzv2h_reset r9a09g057_resets[] __initconst = { ··· 401 DEF_RST(7, 6, 3, 7), /* WDT_1_RESET */ 402 DEF_RST(7, 7, 3, 8), /* WDT_2_RESET */ 403 DEF_RST(7, 8, 3, 9), /* WDT_3_RESET */ 404 + DEF_RST(7, 9, 3, 10), /* RTC_0_RST_RTC */ 405 + DEF_RST(7, 10, 3, 11), /* RTC_0_RST_RTC_V */ 406 DEF_RST(7, 11, 3, 12), /* RSPI_0_PRESETN */ 407 DEF_RST(7, 12, 3, 13), /* RSPI_0_TRESETN */ 408 DEF_RST(7, 13, 3, 14), /* RSPI_1_PRESETN */ ··· 424 DEF_RST(10, 7, 4, 24), /* SDHI_0_IXRST */ 425 DEF_RST(10, 8, 4, 25), /* SDHI_1_IXRST */ 426 DEF_RST(10, 9, 4, 26), /* SDHI_2_IXRST */ 427 + DEF_RST(10, 10, 4, 27), /* USB3_0_ARESETN */ 428 + DEF_RST(10, 11, 4, 28), /* USB3_1_ARESETN */ 429 DEF_RST(10, 12, 4, 29), /* USB2_0_U2H0_HRESETN */ 430 DEF_RST(10, 13, 4, 30), /* USB2_0_U2H1_HRESETN */ 431 DEF_RST(10, 14, 4, 31), /* USB2_0_U2P_EXL_SYSRST */ ··· 442 DEF_RST(12, 14, 5, 31), /* CRU_3_PRESETN */ 443 DEF_RST(12, 15, 6, 0), /* CRU_3_ARESETN */ 444 DEF_RST(13, 0, 6, 1), /* CRU_3_S_RESETN */ 445 + DEF_RST(13, 1, 6, 2), /* ISP_0_VIN_ARESETN */ 446 + DEF_RST(13, 2, 6, 3), /* ISP_0_REG_ARESETN */ 447 + DEF_RST(13, 3, 6, 4), /* ISP_0_ISP_SRESETN */ 448 + DEF_RST(13, 4, 6, 5), /* ISP_0_PRESETN */ 449 + DEF_RST(13, 7, 6, 8), /* DSI_0_PRESETN */ 450 + DEF_RST(13, 8, 6, 9), /* DSI_0_ARESETN */ 451 + DEF_RST(13, 12, 6, 13), /* LCDC_0_RESET_N */ 452 DEF_RST(13, 13, 6, 14), /* GPU_0_RESETN */ 453 DEF_RST(13, 14, 6, 15), /* GPU_0_AXI_RESETN */ 454 DEF_RST(13, 15, 6, 16), /* GPU_0_ACE_RESETN */ 455 + DEF_RST(15, 7, 7, 8), /* TSU_0_PRESETN */ 456 + DEF_RST(15, 8, 7, 9), /* TSU_1_PRESETN */ 457 }; 458 459 const struct rzv2h_cpg_info r9a09g057_cpg_info __initconst = {
+41 -16
drivers/clk/renesas/r9a09g077-cpg.c
··· 46 #define DIVCA55C2 CONF_PACK(SCKCR2, 10, 1) 47 #define DIVCA55C3 CONF_PACK(SCKCR2, 11, 1) 48 #define DIVCA55S CONF_PACK(SCKCR2, 12, 1) 49 #define DIVSCI5ASYNC CONF_PACK(SCKCR2, 18, 2) 50 51 #define DIVSCI0ASYNC CONF_PACK(SCKCR3, 6, 2) 52 #define DIVSCI1ASYNC CONF_PACK(SCKCR3, 8, 2) 53 #define DIVSCI2ASYNC CONF_PACK(SCKCR3, 10, 2) ··· 59 #define DIVSCI4ASYNC CONF_PACK(SCKCR3, 14, 2) 60 61 #define SEL_PLL CONF_PACK(SCKCR, 22, 1) 62 - 63 64 enum rzt2h_clk_types { 65 CLK_TYPE_RZT2H_DIV = CLK_TYPE_CUSTOM, /* Clock with divider */ ··· 97 CLK_SCI3ASYNC, 98 CLK_SCI4ASYNC, 99 CLK_SCI5ASYNC, 100 101 /* Module Clocks */ 102 MOD_CLK_BASE, ··· 161 DEF_DIV(".sci5async", CLK_SCI5ASYNC, CLK_PLL4D1, DIVSCI5ASYNC, 162 dtable_24_25_30_32), 163 164 /* Core output clk */ 165 DEF_DIV("CA55C0", R9A09G077_CLK_CA55C0, CLK_SEL_CLK_PLL0, DIVCA55C0, 166 dtable_1_2), ··· 204 DEF_MOD("sci4fck", 12, CLK_SCI4ASYNC), 205 DEF_MOD("iic0", 100, R9A09G077_CLK_PCLKL), 206 DEF_MOD("iic1", 101, R9A09G077_CLK_PCLKL), 207 DEF_MOD("gmac0", 400, R9A09G077_CLK_PCLKM), 208 DEF_MOD("ethsw", 401, R9A09G077_CLK_PCLKM), 209 DEF_MOD("ethss", 403, R9A09G077_CLK_PCLKM), ··· 219 DEF_MOD("gmac2", 417, R9A09G077_CLK_PCLKAM), 220 DEF_MOD("sci5fck", 600, CLK_SCI5ASYNC), 221 DEF_MOD("iic2", 601, R9A09G077_CLK_PCLKL), 222 DEF_MOD("sdhi0", 1212, R9A09G077_CLK_PCLKAM), 223 DEF_MOD("sdhi1", 1213, R9A09G077_CLK_PCLKAM), 224 }; ··· 240 parent_name = __clk_get_name(parent); 241 242 if (core->dtable) 243 - clk_hw = clk_hw_register_divider_table(dev, core->name, 244 - parent_name, 0, 245 - addr, 246 - GET_SHIFT(core->conf), 247 - GET_WIDTH(core->conf), 248 - core->flag, 249 - core->dtable, 250 - &pub->rmw_lock); 251 else 252 - clk_hw = clk_hw_register_divider(dev, core->name, 253 - parent_name, 0, 254 - addr, 255 - GET_SHIFT(core->conf), 256 - GET_WIDTH(core->conf), 257 - core->flag, &pub->rmw_lock); 258 259 if (IS_ERR(clk_hw)) 260 return ERR_CAST(clk_hw); 261 262 return clk_hw->clk; 263 - 264 } 265 266 static struct clk * __init
··· 46 #define DIVCA55C2 CONF_PACK(SCKCR2, 10, 1) 47 #define DIVCA55C3 CONF_PACK(SCKCR2, 11, 1) 48 #define DIVCA55S CONF_PACK(SCKCR2, 12, 1) 49 + #define DIVSPI3ASYNC CONF_PACK(SCKCR2, 16, 2) 50 #define DIVSCI5ASYNC CONF_PACK(SCKCR2, 18, 2) 51 52 + #define DIVSPI0ASYNC CONF_PACK(SCKCR3, 0, 2) 53 + #define DIVSPI1ASYNC CONF_PACK(SCKCR3, 2, 2) 54 + #define DIVSPI2ASYNC CONF_PACK(SCKCR3, 4, 2) 55 #define DIVSCI0ASYNC CONF_PACK(SCKCR3, 6, 2) 56 #define DIVSCI1ASYNC CONF_PACK(SCKCR3, 8, 2) 57 #define DIVSCI2ASYNC CONF_PACK(SCKCR3, 10, 2) ··· 55 #define DIVSCI4ASYNC CONF_PACK(SCKCR3, 14, 2) 56 57 #define SEL_PLL CONF_PACK(SCKCR, 22, 1) 58 59 enum rzt2h_clk_types { 60 CLK_TYPE_RZT2H_DIV = CLK_TYPE_CUSTOM, /* Clock with divider */ ··· 94 CLK_SCI3ASYNC, 95 CLK_SCI4ASYNC, 96 CLK_SCI5ASYNC, 97 + CLK_SPI0ASYNC, 98 + CLK_SPI1ASYNC, 99 + CLK_SPI2ASYNC, 100 + CLK_SPI3ASYNC, 101 102 /* Module Clocks */ 103 MOD_CLK_BASE, ··· 154 DEF_DIV(".sci5async", CLK_SCI5ASYNC, CLK_PLL4D1, DIVSCI5ASYNC, 155 dtable_24_25_30_32), 156 157 + DEF_DIV(".spi0async", CLK_SPI0ASYNC, CLK_PLL4D1, DIVSPI0ASYNC, 158 + dtable_24_25_30_32), 159 + DEF_DIV(".spi1async", CLK_SPI1ASYNC, CLK_PLL4D1, DIVSPI1ASYNC, 160 + dtable_24_25_30_32), 161 + DEF_DIV(".spi2async", CLK_SPI2ASYNC, CLK_PLL4D1, DIVSPI2ASYNC, 162 + dtable_24_25_30_32), 163 + DEF_DIV(".spi3async", CLK_SPI3ASYNC, CLK_PLL4D1, DIVSPI3ASYNC, 164 + dtable_24_25_30_32), 165 + 166 /* Core output clk */ 167 DEF_DIV("CA55C0", R9A09G077_CLK_CA55C0, CLK_SEL_CLK_PLL0, DIVCA55C0, 168 dtable_1_2), ··· 188 DEF_MOD("sci4fck", 12, CLK_SCI4ASYNC), 189 DEF_MOD("iic0", 100, R9A09G077_CLK_PCLKL), 190 DEF_MOD("iic1", 101, R9A09G077_CLK_PCLKL), 191 + DEF_MOD("spi0", 104, CLK_SPI0ASYNC), 192 + DEF_MOD("spi1", 105, CLK_SPI1ASYNC), 193 + DEF_MOD("spi2", 106, CLK_SPI2ASYNC), 194 + DEF_MOD("adc0", 206, R9A09G077_CLK_PCLKH), 195 + DEF_MOD("adc1", 207, R9A09G077_CLK_PCLKH), 196 + DEF_MOD("adc2", 225, R9A09G077_CLK_PCLKM), 197 + DEF_MOD("tsu", 307, R9A09G077_CLK_PCLKL), 198 DEF_MOD("gmac0", 400, R9A09G077_CLK_PCLKM), 199 DEF_MOD("ethsw", 401, R9A09G077_CLK_PCLKM), 200 DEF_MOD("ethss", 403, R9A09G077_CLK_PCLKM), ··· 196 DEF_MOD("gmac2", 417, R9A09G077_CLK_PCLKAM), 197 DEF_MOD("sci5fck", 600, CLK_SCI5ASYNC), 198 DEF_MOD("iic2", 601, R9A09G077_CLK_PCLKL), 199 + DEF_MOD("spi3", 602, CLK_SPI3ASYNC), 200 DEF_MOD("sdhi0", 1212, R9A09G077_CLK_PCLKAM), 201 DEF_MOD("sdhi1", 1213, R9A09G077_CLK_PCLKAM), 202 }; ··· 216 parent_name = __clk_get_name(parent); 217 218 if (core->dtable) 219 + clk_hw = devm_clk_hw_register_divider_table(dev, core->name, 220 + parent_name, 221 + CLK_SET_RATE_PARENT, 222 + addr, 223 + GET_SHIFT(core->conf), 224 + GET_WIDTH(core->conf), 225 + core->flag, 226 + core->dtable, 227 + &pub->rmw_lock); 228 else 229 + clk_hw = devm_clk_hw_register_divider(dev, core->name, 230 + parent_name, 231 + CLK_SET_RATE_PARENT, 232 + addr, 233 + GET_SHIFT(core->conf), 234 + GET_WIDTH(core->conf), 235 + core->flag, &pub->rmw_lock); 236 237 if (IS_ERR(clk_hw)) 238 return ERR_CAST(clk_hw); 239 240 return clk_hw->clk; 241 } 242 243 static struct clk * __init
+1 -1
drivers/clk/renesas/rcar-cpg-lib.c
··· 35 val |= set; 36 writel(val, reg); 37 spin_unlock_irqrestore(&cpg_lock, flags); 38 - }; 39 40 static int cpg_simple_notifier_call(struct notifier_block *nb, 41 unsigned long action, void *data)
··· 35 val |= set; 36 writel(val, reg); 37 spin_unlock_irqrestore(&cpg_lock, flags); 38 + } 39 40 static int cpg_simple_notifier_call(struct notifier_block *nb, 41 unsigned long action, void *data)
+7 -2
drivers/clk/renesas/rcar-gen4-cpg.c
··· 257 } 258 259 /* 260 - * Z0 Clock & Z1 Clock 261 */ 262 #define CPG_FRQCRB 0x00000804 263 #define CPG_FRQCRB_KICK BIT(31) ··· 386 387 if (offset < 32) { 388 zclk->reg = reg + CPG_FRQCRC0; 389 - } else { 390 zclk->reg = reg + CPG_FRQCRC1; 391 offset -= 32; 392 } 393 zclk->kick_reg = reg + CPG_FRQCRB; 394 zclk->hw.init = &init;
··· 257 } 258 259 /* 260 + * Z0, Z1 and ZG Clock 261 */ 262 #define CPG_FRQCRB 0x00000804 263 #define CPG_FRQCRB_KICK BIT(31) ··· 386 387 if (offset < 32) { 388 zclk->reg = reg + CPG_FRQCRC0; 389 + } else if (offset < 64) { 390 zclk->reg = reg + CPG_FRQCRC1; 391 offset -= 32; 392 + } else if (offset < 96) { 393 + zclk->reg = reg + CPG_FRQCRB; 394 + offset -= 64; 395 + } else { 396 + return ERR_PTR(-EINVAL); 397 } 398 zclk->kick_reg = reg + CPG_FRQCRB; 399 zclk->hw.init = &init;
+152 -35
drivers/clk/renesas/renesas-cpg-mssr.c
··· 40 #define WARN_DEBUG(x) do { } while (0) 41 #endif 42 43 /* 44 - * Module Standby and Software Reset register offets. 45 * 46 * If the registers exist, these are valid for SH-Mobile, R-Mobile, 47 * R-Car Gen2, R-Car Gen3, and RZ/G1. ··· 137 0x2C20, 0x2C24, 0x2C28, 0x2C2C, 0x2C30, 0x2C34, 0x2C38, 0x2C3C, 138 0x2C40, 0x2C44, 0x2C48, 0x2C4C, 0x2C50, 0x2C54, 0x2C58, 0x2C5C, 139 0x2C60, 0x2C64, 0x2C68, 0x2C6C, 0x2C70, 0x2C74, 140 }; 141 142 /* ··· 308 309 spin_unlock_irqrestore(&priv->pub.rmw_lock, flags); 310 311 - if (!enable || priv->reg_layout == CLK_REG_LAYOUT_RZ_A || 312 - priv->reg_layout == CLK_REG_LAYOUT_RZ_T2H) 313 return 0; 314 315 error = readl_poll_timeout_atomic(priv->pub.base0 + priv->status_regs[reg], 316 value, !(value & bitmask), 0, 10); ··· 480 break; 481 } 482 483 - if (IS_ERR_OR_NULL(clk)) 484 goto fail; 485 486 dev_dbg(dev, "Core clock %pC at %lu Hz\n", clk, clk_get_rate(clk)); ··· 705 706 #define rcdev_to_priv(x) container_of(x, struct cpg_mssr_priv, rcdev) 707 708 - static int cpg_mssr_reset(struct reset_controller_dev *rcdev, 709 - unsigned long id) 710 { 711 struct cpg_mssr_priv *priv = rcdev_to_priv(rcdev); 712 unsigned int reg = id / 32; 713 unsigned int bit = id % 32; 714 u32 bitmask = BIT(bit); 715 716 - dev_dbg(priv->dev, "reset %u%02u\n", reg, bit); 717 718 - /* Reset module */ 719 - writel(bitmask, priv->pub.base0 + priv->reset_regs[reg]); 720 - 721 - /* Wait for at least one cycle of the RCLK clock (@ ca. 32 kHz) */ 722 - udelay(35); 723 - 724 - /* Release module from reset state */ 725 - writel(bitmask, priv->pub.base0 + priv->reset_clear_regs[reg]); 726 727 return 0; 728 } 729 730 - static int cpg_mssr_assert(struct reset_controller_dev *rcdev, unsigned long id) 731 { 732 struct cpg_mssr_priv *priv = rcdev_to_priv(rcdev); 733 - unsigned int reg = id / 32; 734 - unsigned int bit = id % 32; 735 - u32 bitmask = BIT(bit); 736 737 - dev_dbg(priv->dev, "assert %u%02u\n", reg, bit); 738 739 - writel(bitmask, priv->pub.base0 + priv->reset_regs[reg]); 740 - return 0; 741 } 742 743 static int cpg_mssr_deassert(struct reset_controller_dev *rcdev, 744 unsigned long id) 745 { 746 - struct cpg_mssr_priv *priv = rcdev_to_priv(rcdev); 747 - unsigned int reg = id / 32; 748 - unsigned int bit = id % 32; 749 - u32 bitmask = BIT(bit); 750 - 751 - dev_dbg(priv->dev, "deassert %u%02u\n", reg, bit); 752 - 753 - writel(bitmask, priv->pub.base0 + priv->reset_clear_regs[reg]); 754 - return 0; 755 } 756 757 static int cpg_mssr_status(struct reset_controller_dev *rcdev, ··· 768 return !!(readl(priv->pub.base0 + priv->reset_regs[reg]) & bitmask); 769 } 770 771 static const struct reset_control_ops cpg_mssr_reset_ops = { 772 .reset = cpg_mssr_reset, 773 .assert = cpg_mssr_assert, 774 .deassert = cpg_mssr_deassert, 775 .status = cpg_mssr_status, 776 }; 777 ··· 865 866 static int cpg_mssr_reset_controller_register(struct cpg_mssr_priv *priv) 867 { 868 - priv->rcdev.ops = &cpg_mssr_reset_ops; 869 priv->rcdev.of_node = priv->dev->of_node; 870 priv->rcdev.of_reset_n_cells = 1; 871 priv->rcdev.of_xlate = cpg_mssr_reset_xlate; 872 - priv->rcdev.nr_resets = priv->num_mod_clks; 873 return devm_reset_controller_register(priv->dev, &priv->rcdev); 874 } 875 ··· 1286 priv->control_regs = stbcr; 1287 } else if (priv->reg_layout == CLK_REG_LAYOUT_RZ_T2H) { 1288 priv->control_regs = mstpcr_for_rzt2h; 1289 } else if (priv->reg_layout == CLK_REG_LAYOUT_RCAR_GEN4) { 1290 priv->status_regs = mstpsr_for_gen4; 1291 priv->control_regs = mstpcr_for_gen4; ··· 1383 goto reserve_exit; 1384 1385 /* Reset Controller not supported for Standby Control SoCs */ 1386 - if (priv->reg_layout == CLK_REG_LAYOUT_RZ_A || 1387 - priv->reg_layout == CLK_REG_LAYOUT_RZ_T2H) 1388 goto reserve_exit; 1389 1390 error = cpg_mssr_reset_controller_register(priv);
··· 40 #define WARN_DEBUG(x) do { } while (0) 41 #endif 42 43 + #define RZT2H_RESET_REG_READ_COUNT 7 44 + 45 /* 46 + * Module Standby and Software Reset register offsets. 47 * 48 * If the registers exist, these are valid for SH-Mobile, R-Mobile, 49 * R-Car Gen2, R-Car Gen3, and RZ/G1. ··· 135 0x2C20, 0x2C24, 0x2C28, 0x2C2C, 0x2C30, 0x2C34, 0x2C38, 0x2C3C, 136 0x2C40, 0x2C44, 0x2C48, 0x2C4C, 0x2C50, 0x2C54, 0x2C58, 0x2C5C, 137 0x2C60, 0x2C64, 0x2C68, 0x2C6C, 0x2C70, 0x2C74, 138 + }; 139 + 140 + static const u16 mrcr_for_rzt2h[] = { 141 + 0x240, /* MRCTLA */ 142 + 0x244, /* Reserved */ 143 + 0x248, /* Reserved */ 144 + 0x24C, /* Reserved */ 145 + 0x250, /* MRCTLE */ 146 + 0x254, /* Reserved */ 147 + 0x258, /* Reserved */ 148 + 0x25C, /* Reserved */ 149 + 0x260, /* MRCTLI */ 150 + 0x264, /* Reserved */ 151 + 0x268, /* Reserved */ 152 + 0x26C, /* Reserved */ 153 + 0x270, /* MRCTLM */ 154 }; 155 156 /* ··· 290 291 spin_unlock_irqrestore(&priv->pub.rmw_lock, flags); 292 293 + if (!enable || priv->reg_layout == CLK_REG_LAYOUT_RZ_A) 294 return 0; 295 + 296 + if (priv->reg_layout == CLK_REG_LAYOUT_RZ_T2H) { 297 + /* 298 + * For the RZ/T2H case, it is necessary to perform a read-back after 299 + * accessing the MSTPCRm register and to dummy-read any register of 300 + * the IP at least seven times. Instead of memory-mapping the IP 301 + * register, we simply add a delay after the read operation. 302 + */ 303 + cpg_rzt2h_mstp_read(hw, priv->control_regs[reg]); 304 + udelay(10); 305 + return 0; 306 + } 307 308 error = readl_poll_timeout_atomic(priv->pub.base0 + priv->status_regs[reg], 309 value, !(value & bitmask), 0, 10); ··· 451 break; 452 } 453 454 + if (IS_ERR(clk)) 455 goto fail; 456 457 dev_dbg(dev, "Core clock %pC at %lu Hz\n", clk, clk_get_rate(clk)); ··· 676 677 #define rcdev_to_priv(x) container_of(x, struct cpg_mssr_priv, rcdev) 678 679 + static int cpg_mssr_reset_operate(struct reset_controller_dev *rcdev, 680 + const char *func, bool set, unsigned long id) 681 { 682 struct cpg_mssr_priv *priv = rcdev_to_priv(rcdev); 683 unsigned int reg = id / 32; 684 unsigned int bit = id % 32; 685 + const u16 off = set ? priv->reset_regs[reg] : priv->reset_clear_regs[reg]; 686 u32 bitmask = BIT(bit); 687 688 + if (func) 689 + dev_dbg(priv->dev, "%s %u%02u\n", func, reg, bit); 690 691 + writel(bitmask, priv->pub.base0 + off); 692 + readl(priv->pub.base0 + off); 693 + barrier_data(priv->pub.base0 + off); 694 695 return 0; 696 } 697 698 + static int cpg_mssr_reset(struct reset_controller_dev *rcdev, 699 + unsigned long id) 700 { 701 struct cpg_mssr_priv *priv = rcdev_to_priv(rcdev); 702 703 + /* Reset module */ 704 + cpg_mssr_reset_operate(rcdev, "reset", true, id); 705 706 + /* 707 + * On R-Car Gen4, delay after SRCR has been written is 1ms. 708 + * On older SoCs, delay after SRCR has been written is 35us 709 + * (one cycle of the RCLK clock @ ca. 32 kHz). 710 + */ 711 + if (priv->reg_layout == CLK_REG_LAYOUT_RCAR_GEN4) 712 + usleep_range(1000, 2000); 713 + else 714 + usleep_range(35, 1000); 715 + 716 + /* Release module from reset state */ 717 + return cpg_mssr_reset_operate(rcdev, NULL, false, id); 718 + } 719 + 720 + static int cpg_mssr_assert(struct reset_controller_dev *rcdev, unsigned long id) 721 + { 722 + return cpg_mssr_reset_operate(rcdev, "assert", true, id); 723 } 724 725 static int cpg_mssr_deassert(struct reset_controller_dev *rcdev, 726 unsigned long id) 727 { 728 + return cpg_mssr_reset_operate(rcdev, "deassert", false, id); 729 } 730 731 static int cpg_mssr_status(struct reset_controller_dev *rcdev, ··· 736 return !!(readl(priv->pub.base0 + priv->reset_regs[reg]) & bitmask); 737 } 738 739 + static int cpg_mrcr_set_reset_state(struct reset_controller_dev *rcdev, 740 + unsigned long id, bool set) 741 + { 742 + struct cpg_mssr_priv *priv = rcdev_to_priv(rcdev); 743 + unsigned int reg = id / 32; 744 + unsigned int bit = id % 32; 745 + u32 bitmask = BIT(bit); 746 + void __iomem *reg_addr; 747 + unsigned long flags; 748 + unsigned int i; 749 + u32 val; 750 + 751 + dev_dbg(priv->dev, "%s %u%02u\n", set ? "assert" : "deassert", reg, bit); 752 + 753 + spin_lock_irqsave(&priv->pub.rmw_lock, flags); 754 + 755 + reg_addr = priv->pub.base0 + priv->reset_regs[reg]; 756 + /* Read current value and modify */ 757 + val = readl(reg_addr); 758 + if (set) 759 + val |= bitmask; 760 + else 761 + val &= ~bitmask; 762 + writel(val, reg_addr); 763 + 764 + /* 765 + * For secure processing after release from a module reset, one must 766 + * perform multiple dummy reads of the same register. 767 + */ 768 + for (i = 0; !set && i < RZT2H_RESET_REG_READ_COUNT; i++) 769 + readl(reg_addr); 770 + 771 + /* Verify the operation */ 772 + val = readl(reg_addr); 773 + if (set == !(bitmask & val)) { 774 + dev_err(priv->dev, "Reset register %u%02u operation failed\n", reg, bit); 775 + spin_unlock_irqrestore(&priv->pub.rmw_lock, flags); 776 + return -EIO; 777 + } 778 + 779 + spin_unlock_irqrestore(&priv->pub.rmw_lock, flags); 780 + 781 + return 0; 782 + } 783 + 784 + static int cpg_mrcr_reset(struct reset_controller_dev *rcdev, unsigned long id) 785 + { 786 + int ret; 787 + 788 + ret = cpg_mrcr_set_reset_state(rcdev, id, true); 789 + if (ret) 790 + return ret; 791 + 792 + return cpg_mrcr_set_reset_state(rcdev, id, false); 793 + } 794 + 795 + static int cpg_mrcr_assert(struct reset_controller_dev *rcdev, unsigned long id) 796 + { 797 + return cpg_mrcr_set_reset_state(rcdev, id, true); 798 + } 799 + 800 + static int cpg_mrcr_deassert(struct reset_controller_dev *rcdev, unsigned long id) 801 + { 802 + return cpg_mrcr_set_reset_state(rcdev, id, false); 803 + } 804 + 805 static const struct reset_control_ops cpg_mssr_reset_ops = { 806 .reset = cpg_mssr_reset, 807 .assert = cpg_mssr_assert, 808 .deassert = cpg_mssr_deassert, 809 + .status = cpg_mssr_status, 810 + }; 811 + 812 + static const struct reset_control_ops cpg_mrcr_reset_ops = { 813 + .reset = cpg_mrcr_reset, 814 + .assert = cpg_mrcr_assert, 815 + .deassert = cpg_mrcr_deassert, 816 .status = cpg_mssr_status, 817 }; 818 ··· 760 761 static int cpg_mssr_reset_controller_register(struct cpg_mssr_priv *priv) 762 { 763 + /* 764 + * RZ/T2H (and family) has the Module Reset Control Registers 765 + * which allows control resets of certain modules. 766 + * The number of resets is not equal to the number of module clocks. 767 + */ 768 + if (priv->reg_layout == CLK_REG_LAYOUT_RZ_T2H) { 769 + priv->rcdev.ops = &cpg_mrcr_reset_ops; 770 + priv->rcdev.nr_resets = ARRAY_SIZE(mrcr_for_rzt2h) * 32; 771 + } else { 772 + priv->rcdev.ops = &cpg_mssr_reset_ops; 773 + priv->rcdev.nr_resets = priv->num_mod_clks; 774 + } 775 + 776 priv->rcdev.of_node = priv->dev->of_node; 777 priv->rcdev.of_reset_n_cells = 1; 778 priv->rcdev.of_xlate = cpg_mssr_reset_xlate; 779 + 780 return devm_reset_controller_register(priv->dev, &priv->rcdev); 781 } 782 ··· 1169 priv->control_regs = stbcr; 1170 } else if (priv->reg_layout == CLK_REG_LAYOUT_RZ_T2H) { 1171 priv->control_regs = mstpcr_for_rzt2h; 1172 + priv->reset_regs = mrcr_for_rzt2h; 1173 } else if (priv->reg_layout == CLK_REG_LAYOUT_RCAR_GEN4) { 1174 priv->status_regs = mstpsr_for_gen4; 1175 priv->control_regs = mstpcr_for_gen4; ··· 1265 goto reserve_exit; 1266 1267 /* Reset Controller not supported for Standby Control SoCs */ 1268 + if (priv->reg_layout == CLK_REG_LAYOUT_RZ_A) 1269 goto reserve_exit; 1270 1271 error = cpg_mssr_reset_controller_register(priv);
+1 -1
drivers/clk/renesas/rzg2l-cpg.c
··· 1177 goto fail; 1178 } 1179 1180 - if (IS_ERR_OR_NULL(clk)) 1181 goto fail; 1182 1183 dev_dbg(dev, "Core clock %pC at %lu Hz\n", clk, clk_get_rate(clk));
··· 1177 goto fail; 1178 } 1179 1180 + if (IS_ERR(clk)) 1181 goto fail; 1182 1183 dev_dbg(dev, "Core clock %pC at %lu Hz\n", clk, clk_get_rate(clk));
+506 -8
drivers/clk/renesas/rzv2h-cpg.c
··· 14 #include <linux/bitfield.h> 15 #include <linux/clk.h> 16 #include <linux/clk-provider.h> 17 #include <linux/delay.h> 18 #include <linux/init.h> 19 #include <linux/iopoll.h> 20 #include <linux/mod_devicetable.h> 21 #include <linux/module.h> 22 #include <linux/of.h> ··· 31 #include <linux/refcount.h> 32 #include <linux/reset-controller.h> 33 #include <linux/string_choices.h> 34 35 #include <dt-bindings/clock/renesas-cpg-mssr.h> 36 ··· 53 54 #define CPG_PLL_STBY(x) ((x)) 55 #define CPG_PLL_STBY_RESETB BIT(0) 56 #define CPG_PLL_STBY_RESETB_WEN BIT(16) 57 #define CPG_PLL_CLK1(x) ((x) + 0x004) 58 - #define CPG_PLL_CLK1_KDIV(x) ((s16)FIELD_GET(GENMASK(31, 16), (x))) 59 - #define CPG_PLL_CLK1_MDIV(x) FIELD_GET(GENMASK(15, 6), (x)) 60 - #define CPG_PLL_CLK1_PDIV(x) FIELD_GET(GENMASK(5, 0), (x)) 61 #define CPG_PLL_CLK2(x) ((x) + 0x008) 62 - #define CPG_PLL_CLK2_SDIV(x) FIELD_GET(GENMASK(2, 0), (x)) 63 #define CPG_PLL_MON(x) ((x) + 0x010) 64 #define CPG_PLL_MON_RESETB BIT(0) 65 #define CPG_PLL_MON_LOCK BIT(4) ··· 72 ((base) + ((((index) * (16))) + (bit))) 73 74 #define CPG_CLKSTATUS0 (0x700) 75 76 /** 77 * struct rzv2h_cpg_priv - Clock Pulse Generator Private Data ··· 104 * @ff_mod_status_ops: Fixed Factor Module Status Clock operations 105 * @mstop_count: Array of mstop values 106 * @rcdev: Reset controller entity 107 */ 108 struct rzv2h_cpg_priv { 109 struct device *dev; ··· 123 atomic_t *mstop_count; 124 125 struct reset_controller_dev rcdev; 126 }; 127 128 #define rcdev_to_priv(x) container_of(x, struct rzv2h_cpg_priv, rcdev) ··· 195 #define to_rzv2h_ff_mod_status_clk(_hw) \ 196 container_of(_hw, struct rzv2h_ff_mod_status_clk, fix.hw) 197 198 static int rzv2h_cpg_pll_clk_is_enabled(struct clk_hw *hw) 199 { 200 struct pll_clk *pll_clk = to_pll(hw); ··· 712 clk1 = readl(priv->base + CPG_PLL_CLK1(pll.offset)); 713 clk2 = readl(priv->base + CPG_PLL_CLK2(pll.offset)); 714 715 - rate = mul_u64_u32_shr(parent_rate, (CPG_PLL_CLK1_MDIV(clk1) << 16) + 716 - CPG_PLL_CLK1_KDIV(clk1), 16 + CPG_PLL_CLK2_SDIV(clk2)); 717 718 - return DIV_ROUND_CLOSEST_ULL(rate, CPG_PLL_CLK1_PDIV(clk1)); 719 } 720 721 static const struct clk_ops rzv2h_cpg_pll_ops = { 722 .is_enabled = rzv2h_cpg_pll_clk_is_enabled, ··· 750 pll_clk = devm_kzalloc(dev, sizeof(*pll_clk), GFP_KERNEL); 751 if (!pll_clk) 752 return ERR_PTR(-ENOMEM); 753 754 parent_name = __clk_get_name(parent); 755 init.name = core->name; ··· 1079 case CLK_TYPE_SMUX: 1080 clk = rzv2h_cpg_mux_clk_register(core, priv); 1081 break; 1082 default: 1083 goto fail; 1084 } 1085 1086 - if (IS_ERR_OR_NULL(clk)) 1087 goto fail; 1088 1089 dev_dbg(dev, "Core clock %pC at %lu Hz\n", clk, clk_get_rate(clk));
··· 14 #include <linux/bitfield.h> 15 #include <linux/clk.h> 16 #include <linux/clk-provider.h> 17 + #include <linux/clk/renesas.h> 18 #include <linux/delay.h> 19 #include <linux/init.h> 20 #include <linux/iopoll.h> 21 + #include <linux/limits.h> 22 + #include <linux/math.h> 23 + #include <linux/math64.h> 24 + #include <linux/minmax.h> 25 #include <linux/mod_devicetable.h> 26 #include <linux/module.h> 27 #include <linux/of.h> ··· 26 #include <linux/refcount.h> 27 #include <linux/reset-controller.h> 28 #include <linux/string_choices.h> 29 + #include <linux/units.h> 30 31 #include <dt-bindings/clock/renesas-cpg-mssr.h> 32 ··· 47 48 #define CPG_PLL_STBY(x) ((x)) 49 #define CPG_PLL_STBY_RESETB BIT(0) 50 + #define CPG_PLL_STBY_SSC_EN BIT(2) 51 #define CPG_PLL_STBY_RESETB_WEN BIT(16) 52 + #define CPG_PLL_STBY_SSC_EN_WEN BIT(18) 53 #define CPG_PLL_CLK1(x) ((x) + 0x004) 54 + #define CPG_PLL_CLK1_KDIV GENMASK(31, 16) 55 + #define CPG_PLL_CLK1_MDIV GENMASK(15, 6) 56 + #define CPG_PLL_CLK1_PDIV GENMASK(5, 0) 57 #define CPG_PLL_CLK2(x) ((x) + 0x008) 58 + #define CPG_PLL_CLK2_SDIV GENMASK(2, 0) 59 #define CPG_PLL_MON(x) ((x) + 0x010) 60 #define CPG_PLL_MON_RESETB BIT(0) 61 #define CPG_PLL_MON_LOCK BIT(4) ··· 64 ((base) + ((((index) * (16))) + (bit))) 65 66 #define CPG_CLKSTATUS0 (0x700) 67 + 68 + /* On RZ/G3E SoC we have two DSI PLLs */ 69 + #define MAX_CPG_DSI_PLL 2 70 + 71 + /** 72 + * struct rzv2h_pll_dsi_info - PLL DSI information, holds the limits and parameters 73 + * 74 + * @pll_dsi_limits: PLL DSI parameters limits 75 + * @pll_dsi_parameters: Calculated PLL DSI parameters 76 + * @req_pll_dsi_rate: Requested PLL DSI rate 77 + */ 78 + struct rzv2h_pll_dsi_info { 79 + const struct rzv2h_pll_limits *pll_dsi_limits; 80 + struct rzv2h_pll_div_pars pll_dsi_parameters; 81 + unsigned long req_pll_dsi_rate; 82 + }; 83 84 /** 85 * struct rzv2h_cpg_priv - Clock Pulse Generator Private Data ··· 80 * @ff_mod_status_ops: Fixed Factor Module Status Clock operations 81 * @mstop_count: Array of mstop values 82 * @rcdev: Reset controller entity 83 + * @pll_dsi_info: Array of PLL DSI information, holds the limits and parameters 84 */ 85 struct rzv2h_cpg_priv { 86 struct device *dev; ··· 98 atomic_t *mstop_count; 99 100 struct reset_controller_dev rcdev; 101 + 102 + struct rzv2h_pll_dsi_info pll_dsi_info[MAX_CPG_DSI_PLL]; 103 }; 104 105 #define rcdev_to_priv(x) container_of(x, struct rzv2h_cpg_priv, rcdev) ··· 168 #define to_rzv2h_ff_mod_status_clk(_hw) \ 169 container_of(_hw, struct rzv2h_ff_mod_status_clk, fix.hw) 170 171 + /** 172 + * struct rzv2h_plldsi_div_clk - PLL DSI DDIV clock 173 + * 174 + * @dtable: divider table 175 + * @priv: CPG private data 176 + * @hw: divider clk 177 + * @ddiv: divider configuration 178 + */ 179 + struct rzv2h_plldsi_div_clk { 180 + const struct clk_div_table *dtable; 181 + struct rzv2h_cpg_priv *priv; 182 + struct clk_hw hw; 183 + struct ddiv ddiv; 184 + }; 185 + 186 + #define to_plldsi_div_clk(_hw) \ 187 + container_of(_hw, struct rzv2h_plldsi_div_clk, hw) 188 + 189 + #define RZ_V2H_OSC_CLK_IN_MEGA (24 * MEGA) 190 + #define RZV2H_MAX_DIV_TABLES (16) 191 + 192 + /** 193 + * rzv2h_get_pll_pars - Finds the best combination of PLL parameters 194 + * for a given frequency. 195 + * 196 + * @limits: Pointer to the structure containing the limits for the PLL parameters 197 + * @pars: Pointer to the structure where the best calculated PLL parameters values 198 + * will be stored 199 + * @freq_millihz: Target output frequency in millihertz 200 + * 201 + * This function calculates the best set of PLL parameters (M, K, P, S) to achieve 202 + * the desired frequency. 203 + * There is no direct formula to calculate the PLL parameters, as it's an open 204 + * system of equations, therefore this function uses an iterative approach to 205 + * determine the best solution. The best solution is one that minimizes the error 206 + * (desired frequency - actual frequency). 207 + * 208 + * Return: true if a valid set of parameters values is found, false otherwise. 209 + */ 210 + bool rzv2h_get_pll_pars(const struct rzv2h_pll_limits *limits, 211 + struct rzv2h_pll_pars *pars, u64 freq_millihz) 212 + { 213 + u64 fout_min_millihz = mul_u32_u32(limits->fout.min, MILLI); 214 + u64 fout_max_millihz = mul_u32_u32(limits->fout.max, MILLI); 215 + struct rzv2h_pll_pars p, best; 216 + 217 + if (freq_millihz > fout_max_millihz || 218 + freq_millihz < fout_min_millihz) 219 + return false; 220 + 221 + /* Initialize best error to maximum possible value */ 222 + best.error_millihz = S64_MAX; 223 + 224 + for (p.p = limits->p.min; p.p <= limits->p.max; p.p++) { 225 + u32 fref = RZ_V2H_OSC_CLK_IN_MEGA / p.p; 226 + u16 divider; 227 + 228 + for (divider = 1 << limits->s.min, p.s = limits->s.min; 229 + p.s <= limits->s.max; p.s++, divider <<= 1) { 230 + for (p.m = limits->m.min; p.m <= limits->m.max; p.m++) { 231 + u64 output_m, output_k_range; 232 + s64 pll_k, output_k; 233 + u64 fvco, output; 234 + 235 + /* 236 + * The frequency generated by the PLL + divider 237 + * is calculated as follows: 238 + * 239 + * With: 240 + * Freq = Ffout = Ffvco / 2^(pll_s) 241 + * Ffvco = (pll_m + (pll_k / 65536)) * Ffref 242 + * Ffref = 24MHz / pll_p 243 + * 244 + * Freq can also be rewritten as: 245 + * Freq = Ffvco / 2^(pll_s) 246 + * = ((pll_m + (pll_k / 65536)) * Ffref) / 2^(pll_s) 247 + * = (pll_m * Ffref) / 2^(pll_s) + ((pll_k / 65536) * Ffref) / 2^(pll_s) 248 + * = output_m + output_k 249 + * 250 + * Every parameter has been determined at this 251 + * point, but pll_k. 252 + * 253 + * Considering that: 254 + * limits->k.min <= pll_k <= limits->k.max 255 + * Then: 256 + * -0.5 <= (pll_k / 65536) < 0.5 257 + * Therefore: 258 + * -Ffref / (2 * 2^(pll_s)) <= output_k < Ffref / (2 * 2^(pll_s)) 259 + */ 260 + 261 + /* Compute output M component (in mHz) */ 262 + output_m = DIV_ROUND_CLOSEST_ULL(mul_u32_u32(p.m, fref) * MILLI, 263 + divider); 264 + /* Compute range for output K (in mHz) */ 265 + output_k_range = DIV_ROUND_CLOSEST_ULL(mul_u32_u32(fref, MILLI), 266 + 2 * divider); 267 + /* 268 + * No point in continuing if we can't achieve 269 + * the desired frequency 270 + */ 271 + if (freq_millihz < (output_m - output_k_range) || 272 + freq_millihz >= (output_m + output_k_range)) { 273 + continue; 274 + } 275 + 276 + /* 277 + * Compute the K component 278 + * 279 + * Since: 280 + * Freq = output_m + output_k 281 + * Then: 282 + * output_k = Freq - output_m 283 + * = ((pll_k / 65536) * Ffref) / 2^(pll_s) 284 + * Therefore: 285 + * pll_k = (output_k * 65536 * 2^(pll_s)) / Ffref 286 + */ 287 + output_k = freq_millihz - output_m; 288 + pll_k = div_s64(output_k * 65536ULL * divider, 289 + fref); 290 + pll_k = DIV_S64_ROUND_CLOSEST(pll_k, MILLI); 291 + 292 + /* Validate K value within allowed limits */ 293 + if (pll_k < limits->k.min || 294 + pll_k > limits->k.max) 295 + continue; 296 + 297 + p.k = pll_k; 298 + 299 + /* Compute (Ffvco * 65536) */ 300 + fvco = mul_u32_u32(p.m * 65536 + p.k, fref); 301 + if (fvco < mul_u32_u32(limits->fvco.min, 65536) || 302 + fvco > mul_u32_u32(limits->fvco.max, 65536)) 303 + continue; 304 + 305 + /* PLL_M component of (output * 65536 * PLL_P) */ 306 + output = mul_u32_u32(p.m * 65536, RZ_V2H_OSC_CLK_IN_MEGA); 307 + /* PLL_K component of (output * 65536 * PLL_P) */ 308 + output += p.k * RZ_V2H_OSC_CLK_IN_MEGA; 309 + /* Make it in mHz */ 310 + output *= MILLI; 311 + output = DIV_U64_ROUND_CLOSEST(output, 65536 * p.p * divider); 312 + 313 + /* Check output frequency against limits */ 314 + if (output < fout_min_millihz || 315 + output > fout_max_millihz) 316 + continue; 317 + 318 + p.error_millihz = freq_millihz - output; 319 + p.freq_millihz = output; 320 + 321 + /* If an exact match is found, return immediately */ 322 + if (p.error_millihz == 0) { 323 + *pars = p; 324 + return true; 325 + } 326 + 327 + /* Update best match if error is smaller */ 328 + if (abs(best.error_millihz) > abs(p.error_millihz)) 329 + best = p; 330 + } 331 + } 332 + } 333 + 334 + /* If no valid parameters were found, return false */ 335 + if (best.error_millihz == S64_MAX) 336 + return false; 337 + 338 + *pars = best; 339 + return true; 340 + } 341 + EXPORT_SYMBOL_NS_GPL(rzv2h_get_pll_pars, "RZV2H_CPG"); 342 + 343 + /* 344 + * rzv2h_get_pll_divs_pars - Finds the best combination of PLL parameters 345 + * and divider value for a given frequency. 346 + * 347 + * @limits: Pointer to the structure containing the limits for the PLL parameters 348 + * @pars: Pointer to the structure where the best calculated PLL parameters and 349 + * divider values will be stored 350 + * @table: Pointer to the array of valid divider values 351 + * @table_size: Size of the divider values array 352 + * @freq_millihz: Target output frequency in millihertz 353 + * 354 + * This function calculates the best set of PLL parameters (M, K, P, S) and divider 355 + * value to achieve the desired frequency. See rzv2h_get_pll_pars() for more details 356 + * on how the PLL parameters are calculated. 357 + * 358 + * freq_millihz is the desired frequency generated by the PLL followed by a 359 + * a gear. 360 + */ 361 + bool rzv2h_get_pll_divs_pars(const struct rzv2h_pll_limits *limits, 362 + struct rzv2h_pll_div_pars *pars, 363 + const u8 *table, u8 table_size, u64 freq_millihz) 364 + { 365 + struct rzv2h_pll_div_pars p, best; 366 + 367 + best.div.error_millihz = S64_MAX; 368 + p.div.error_millihz = S64_MAX; 369 + for (unsigned int i = 0; i < table_size; i++) { 370 + if (!rzv2h_get_pll_pars(limits, &p.pll, freq_millihz * table[i])) 371 + continue; 372 + 373 + p.div.divider_value = table[i]; 374 + p.div.freq_millihz = DIV_U64_ROUND_CLOSEST(p.pll.freq_millihz, table[i]); 375 + p.div.error_millihz = freq_millihz - p.div.freq_millihz; 376 + 377 + if (p.div.error_millihz == 0) { 378 + *pars = p; 379 + return true; 380 + } 381 + 382 + if (abs(best.div.error_millihz) > abs(p.div.error_millihz)) 383 + best = p; 384 + } 385 + 386 + if (best.div.error_millihz == S64_MAX) 387 + return false; 388 + 389 + *pars = best; 390 + return true; 391 + } 392 + EXPORT_SYMBOL_NS_GPL(rzv2h_get_pll_divs_pars, "RZV2H_CPG"); 393 + 394 + static unsigned long rzv2h_cpg_plldsi_div_recalc_rate(struct clk_hw *hw, 395 + unsigned long parent_rate) 396 + { 397 + struct rzv2h_plldsi_div_clk *dsi_div = to_plldsi_div_clk(hw); 398 + struct rzv2h_cpg_priv *priv = dsi_div->priv; 399 + struct ddiv ddiv = dsi_div->ddiv; 400 + u32 div; 401 + 402 + div = readl(priv->base + ddiv.offset); 403 + div >>= ddiv.shift; 404 + div &= clk_div_mask(ddiv.width); 405 + div = dsi_div->dtable[div].div; 406 + 407 + return DIV_ROUND_CLOSEST_ULL(parent_rate, div); 408 + } 409 + 410 + static int rzv2h_cpg_plldsi_div_determine_rate(struct clk_hw *hw, 411 + struct clk_rate_request *req) 412 + { 413 + struct rzv2h_plldsi_div_clk *dsi_div = to_plldsi_div_clk(hw); 414 + struct pll_clk *pll_clk = to_pll(clk_hw_get_parent(hw)); 415 + struct rzv2h_cpg_priv *priv = dsi_div->priv; 416 + u8 table[RZV2H_MAX_DIV_TABLES] = { 0 }; 417 + struct rzv2h_pll_div_pars *dsi_params; 418 + struct rzv2h_pll_dsi_info *dsi_info; 419 + const struct clk_div_table *div; 420 + unsigned int i = 0; 421 + u64 rate_millihz; 422 + 423 + dsi_info = &priv->pll_dsi_info[pll_clk->pll.instance]; 424 + dsi_params = &dsi_info->pll_dsi_parameters; 425 + 426 + rate_millihz = mul_u32_u32(req->rate, MILLI); 427 + if (rate_millihz == dsi_params->div.error_millihz + dsi_params->div.freq_millihz) 428 + goto exit_determine_rate; 429 + 430 + for (div = dsi_div->dtable; div->div; div++) { 431 + if (i >= RZV2H_MAX_DIV_TABLES) 432 + return -EINVAL; 433 + table[i++] = div->div; 434 + } 435 + 436 + if (!rzv2h_get_pll_divs_pars(dsi_info->pll_dsi_limits, dsi_params, table, i, 437 + rate_millihz)) { 438 + dev_err(priv->dev, "failed to determine rate for req->rate: %lu\n", 439 + req->rate); 440 + return -EINVAL; 441 + } 442 + 443 + exit_determine_rate: 444 + req->rate = DIV_ROUND_CLOSEST_ULL(dsi_params->div.freq_millihz, MILLI); 445 + req->best_parent_rate = req->rate * dsi_params->div.divider_value; 446 + dsi_info->req_pll_dsi_rate = req->best_parent_rate; 447 + 448 + return 0; 449 + } 450 + 451 + static int rzv2h_cpg_plldsi_div_set_rate(struct clk_hw *hw, 452 + unsigned long rate, 453 + unsigned long parent_rate) 454 + { 455 + struct rzv2h_plldsi_div_clk *dsi_div = to_plldsi_div_clk(hw); 456 + struct pll_clk *pll_clk = to_pll(clk_hw_get_parent(hw)); 457 + struct rzv2h_cpg_priv *priv = dsi_div->priv; 458 + struct rzv2h_pll_div_pars *dsi_params; 459 + struct rzv2h_pll_dsi_info *dsi_info; 460 + struct ddiv ddiv = dsi_div->ddiv; 461 + const struct clk_div_table *clkt; 462 + bool divider_found = false; 463 + u32 val, shift; 464 + 465 + dsi_info = &priv->pll_dsi_info[pll_clk->pll.instance]; 466 + dsi_params = &dsi_info->pll_dsi_parameters; 467 + 468 + for (clkt = dsi_div->dtable; clkt->div; clkt++) { 469 + if (clkt->div == dsi_params->div.divider_value) { 470 + divider_found = true; 471 + break; 472 + } 473 + } 474 + 475 + if (!divider_found) 476 + return -EINVAL; 477 + 478 + shift = ddiv.shift; 479 + val = readl(priv->base + ddiv.offset) | DDIV_DIVCTL_WEN(shift); 480 + val &= ~(clk_div_mask(ddiv.width) << shift); 481 + val |= clkt->val << shift; 482 + writel(val, priv->base + ddiv.offset); 483 + 484 + return 0; 485 + } 486 + 487 + static const struct clk_ops rzv2h_cpg_plldsi_div_ops = { 488 + .recalc_rate = rzv2h_cpg_plldsi_div_recalc_rate, 489 + .determine_rate = rzv2h_cpg_plldsi_div_determine_rate, 490 + .set_rate = rzv2h_cpg_plldsi_div_set_rate, 491 + }; 492 + 493 + static struct clk * __init 494 + rzv2h_cpg_plldsi_div_clk_register(const struct cpg_core_clk *core, 495 + struct rzv2h_cpg_priv *priv) 496 + { 497 + struct rzv2h_plldsi_div_clk *clk_hw_data; 498 + struct clk **clks = priv->clks; 499 + struct clk_init_data init; 500 + const struct clk *parent; 501 + const char *parent_name; 502 + struct clk_hw *clk_hw; 503 + int ret; 504 + 505 + parent = clks[core->parent]; 506 + if (IS_ERR(parent)) 507 + return ERR_CAST(parent); 508 + 509 + clk_hw_data = devm_kzalloc(priv->dev, sizeof(*clk_hw_data), GFP_KERNEL); 510 + if (!clk_hw_data) 511 + return ERR_PTR(-ENOMEM); 512 + 513 + clk_hw_data->priv = priv; 514 + clk_hw_data->ddiv = core->cfg.ddiv; 515 + clk_hw_data->dtable = core->dtable; 516 + 517 + parent_name = __clk_get_name(parent); 518 + init.name = core->name; 519 + init.ops = &rzv2h_cpg_plldsi_div_ops; 520 + init.flags = core->flag; 521 + init.parent_names = &parent_name; 522 + init.num_parents = 1; 523 + 524 + clk_hw = &clk_hw_data->hw; 525 + clk_hw->init = &init; 526 + 527 + ret = devm_clk_hw_register(priv->dev, clk_hw); 528 + if (ret) 529 + return ERR_PTR(ret); 530 + 531 + return clk_hw->clk; 532 + } 533 + 534 + static int rzv2h_cpg_plldsi_determine_rate(struct clk_hw *hw, 535 + struct clk_rate_request *req) 536 + { 537 + struct pll_clk *pll_clk = to_pll(hw); 538 + struct rzv2h_cpg_priv *priv = pll_clk->priv; 539 + struct rzv2h_pll_dsi_info *dsi_info; 540 + u64 rate_millihz; 541 + 542 + dsi_info = &priv->pll_dsi_info[pll_clk->pll.instance]; 543 + /* check if the divider has already invoked the algorithm */ 544 + if (req->rate == dsi_info->req_pll_dsi_rate) 545 + return 0; 546 + 547 + /* If the req->rate doesn't match we do the calculation assuming there is no divider */ 548 + rate_millihz = mul_u32_u32(req->rate, MILLI); 549 + if (!rzv2h_get_pll_pars(dsi_info->pll_dsi_limits, 550 + &dsi_info->pll_dsi_parameters.pll, rate_millihz)) { 551 + dev_err(priv->dev, 552 + "failed to determine rate for req->rate: %lu\n", 553 + req->rate); 554 + return -EINVAL; 555 + } 556 + 557 + req->rate = DIV_ROUND_CLOSEST_ULL(dsi_info->pll_dsi_parameters.pll.freq_millihz, MILLI); 558 + dsi_info->req_pll_dsi_rate = req->rate; 559 + 560 + return 0; 561 + } 562 + 563 + static int rzv2h_cpg_pll_set_rate(struct pll_clk *pll_clk, 564 + struct rzv2h_pll_pars *params, 565 + bool ssc_disable) 566 + { 567 + struct rzv2h_cpg_priv *priv = pll_clk->priv; 568 + u16 offset = pll_clk->pll.offset; 569 + u32 val; 570 + int ret; 571 + 572 + /* Put PLL into standby mode */ 573 + writel(CPG_PLL_STBY_RESETB_WEN, priv->base + CPG_PLL_STBY(offset)); 574 + ret = readl_poll_timeout_atomic(priv->base + CPG_PLL_MON(offset), 575 + val, !(val & CPG_PLL_MON_LOCK), 576 + 100, 2000); 577 + if (ret) { 578 + dev_err(priv->dev, "Failed to put PLLDSI into standby mode"); 579 + return ret; 580 + } 581 + 582 + /* Output clock setting 1 */ 583 + writel(FIELD_PREP(CPG_PLL_CLK1_KDIV, (u16)params->k) | 584 + FIELD_PREP(CPG_PLL_CLK1_MDIV, params->m) | 585 + FIELD_PREP(CPG_PLL_CLK1_PDIV, params->p), 586 + priv->base + CPG_PLL_CLK1(offset)); 587 + 588 + /* Output clock setting 2 */ 589 + val = readl(priv->base + CPG_PLL_CLK2(offset)); 590 + writel((val & ~CPG_PLL_CLK2_SDIV) | FIELD_PREP(CPG_PLL_CLK2_SDIV, params->s), 591 + priv->base + CPG_PLL_CLK2(offset)); 592 + 593 + /* Put PLL to normal mode */ 594 + if (ssc_disable) 595 + val = CPG_PLL_STBY_SSC_EN_WEN; 596 + else 597 + val = CPG_PLL_STBY_SSC_EN_WEN | CPG_PLL_STBY_SSC_EN; 598 + writel(val | CPG_PLL_STBY_RESETB_WEN | CPG_PLL_STBY_RESETB, 599 + priv->base + CPG_PLL_STBY(offset)); 600 + 601 + /* PLL normal mode transition, output clock stability check */ 602 + ret = readl_poll_timeout_atomic(priv->base + CPG_PLL_MON(offset), 603 + val, (val & CPG_PLL_MON_LOCK), 604 + 100, 2000); 605 + if (ret) { 606 + dev_err(priv->dev, "Failed to put PLLDSI into normal mode"); 607 + return ret; 608 + } 609 + 610 + return 0; 611 + } 612 + 613 + static int rzv2h_cpg_plldsi_set_rate(struct clk_hw *hw, unsigned long rate, 614 + unsigned long parent_rate) 615 + { 616 + struct pll_clk *pll_clk = to_pll(hw); 617 + struct rzv2h_pll_dsi_info *dsi_info; 618 + struct rzv2h_cpg_priv *priv = pll_clk->priv; 619 + 620 + dsi_info = &priv->pll_dsi_info[pll_clk->pll.instance]; 621 + 622 + return rzv2h_cpg_pll_set_rate(pll_clk, &dsi_info->pll_dsi_parameters.pll, true); 623 + } 624 + 625 static int rzv2h_cpg_pll_clk_is_enabled(struct clk_hw *hw) 626 { 627 struct pll_clk *pll_clk = to_pll(hw); ··· 231 clk1 = readl(priv->base + CPG_PLL_CLK1(pll.offset)); 232 clk2 = readl(priv->base + CPG_PLL_CLK2(pll.offset)); 233 234 + rate = mul_u64_u32_shr(parent_rate, (FIELD_GET(CPG_PLL_CLK1_MDIV, clk1) << 16) + 235 + (s16)FIELD_GET(CPG_PLL_CLK1_KDIV, clk1), 236 + 16 + FIELD_GET(CPG_PLL_CLK2_SDIV, clk2)); 237 238 + return DIV_ROUND_CLOSEST_ULL(rate, FIELD_GET(CPG_PLL_CLK1_PDIV, clk1)); 239 } 240 + 241 + static const struct clk_ops rzv2h_cpg_plldsi_ops = { 242 + .recalc_rate = rzv2h_cpg_pll_clk_recalc_rate, 243 + .determine_rate = rzv2h_cpg_plldsi_determine_rate, 244 + .set_rate = rzv2h_cpg_plldsi_set_rate, 245 + }; 246 247 static const struct clk_ops rzv2h_cpg_pll_ops = { 248 .is_enabled = rzv2h_cpg_pll_clk_is_enabled, ··· 262 pll_clk = devm_kzalloc(dev, sizeof(*pll_clk), GFP_KERNEL); 263 if (!pll_clk) 264 return ERR_PTR(-ENOMEM); 265 + 266 + if (core->type == CLK_TYPE_PLLDSI) 267 + priv->pll_dsi_info[core->cfg.pll.instance].pll_dsi_limits = 268 + core->cfg.pll.limits; 269 270 parent_name = __clk_get_name(parent); 271 init.name = core->name; ··· 587 case CLK_TYPE_SMUX: 588 clk = rzv2h_cpg_mux_clk_register(core, priv); 589 break; 590 + case CLK_TYPE_PLLDSI: 591 + clk = rzv2h_cpg_pll_clk_register(core, priv, &rzv2h_cpg_plldsi_ops); 592 + break; 593 + case CLK_TYPE_PLLDSI_DIV: 594 + clk = rzv2h_cpg_plldsi_div_clk_register(core, priv); 595 + break; 596 default: 597 goto fail; 598 } 599 600 + if (IS_ERR(clk)) 601 goto fail; 602 603 dev_dbg(dev, "Core clock %pC at %lu Hz\n", clk, clk_get_rate(clk));
+27 -4
drivers/clk/renesas/rzv2h-cpg.h
··· 16 * 17 * @offset: STBY register offset 18 * @has_clkn: Flag to indicate if CLK1/2 are accessible or not 19 */ 20 struct pll { 21 unsigned int offset:9; 22 unsigned int has_clkn:1; 23 }; 24 25 - #define PLL_PACK(_offset, _has_clkn) \ 26 ((struct pll){ \ 27 .offset = _offset, \ 28 - .has_clkn = _has_clkn \ 29 }) 30 31 - #define PLLCA55 PLL_PACK(0x60, 1) 32 - #define PLLGPU PLL_PACK(0x120, 1) 33 34 /** 35 * struct ddiv - Structure for dynamic switching divider ··· 123 #define CPG_SSEL1 (0x304) 124 #define CPG_CDDIV0 (0x400) 125 #define CPG_CDDIV1 (0x404) 126 #define CPG_CDDIV3 (0x40C) 127 #define CPG_CDDIV4 (0x410) 128 #define CPG_CSDIV0 (0x500) 129 130 #define CDDIV0_DIVCTL1 DDIV_PACK(CPG_CDDIV0, 4, 3, 1) 131 #define CDDIV0_DIVCTL2 DDIV_PACK(CPG_CDDIV0, 8, 3, 2) ··· 135 #define CDDIV1_DIVCTL1 DDIV_PACK(CPG_CDDIV1, 4, 2, 5) 136 #define CDDIV1_DIVCTL2 DDIV_PACK(CPG_CDDIV1, 8, 2, 6) 137 #define CDDIV1_DIVCTL3 DDIV_PACK(CPG_CDDIV1, 12, 2, 7) 138 #define CDDIV3_DIVCTL1 DDIV_PACK(CPG_CDDIV3, 4, 3, 13) 139 #define CDDIV3_DIVCTL2 DDIV_PACK(CPG_CDDIV3, 8, 3, 14) 140 #define CDDIV3_DIVCTL3 DDIV_PACK(CPG_CDDIV3, 12, 1, 15) ··· 145 146 #define CSDIV0_DIVCTL0 DDIV_PACK(CPG_CSDIV0, 0, 2, CSDIV_NO_MON) 147 #define CSDIV0_DIVCTL1 DDIV_PACK(CPG_CSDIV0, 4, 2, CSDIV_NO_MON) 148 #define CSDIV0_DIVCTL3 DDIV_PACK_NO_RMW(CPG_CSDIV0, 12, 2, CSDIV_NO_MON) 149 150 #define SSEL0_SELCTL2 SMUX_PACK(CPG_SSEL0, 8, 1) 151 #define SSEL0_SELCTL3 SMUX_PACK(CPG_SSEL0, 12, 1) ··· 201 CLK_TYPE_PLL, 202 CLK_TYPE_DDIV, /* Dynamic Switching Divider */ 203 CLK_TYPE_SMUX, /* Static Mux */ 204 }; 205 206 #define DEF_TYPE(_name, _id, _type...) \ ··· 233 .num_parents = ARRAY_SIZE(_parent_names), \ 234 .flag = CLK_SET_RATE_PARENT, \ 235 .mux_flags = CLK_MUX_HIWORD_MASK) 236 237 /** 238 * struct rzv2h_mod_clk - Module Clocks definitions
··· 16 * 17 * @offset: STBY register offset 18 * @has_clkn: Flag to indicate if CLK1/2 are accessible or not 19 + * @instance: PLL instance number 20 */ 21 struct pll { 22 unsigned int offset:9; 23 unsigned int has_clkn:1; 24 + unsigned int instance:2; 25 + const struct rzv2h_pll_limits *limits; 26 }; 27 28 + #define PLL_PACK_LIMITS(_offset, _has_clkn, _instance, _limits) \ 29 ((struct pll){ \ 30 .offset = _offset, \ 31 + .has_clkn = _has_clkn, \ 32 + .instance = _instance, \ 33 + .limits = _limits \ 34 }) 35 36 + #define PLL_PACK(_offset, _has_clkn, _instance) \ 37 + PLL_PACK_LIMITS(_offset, _has_clkn, _instance, NULL) 38 + 39 + #define PLLCA55 PLL_PACK(0x60, 1, 0) 40 + #define PLLGPU PLL_PACK(0x120, 1, 0) 41 42 /** 43 * struct ddiv - Structure for dynamic switching divider ··· 115 #define CPG_SSEL1 (0x304) 116 #define CPG_CDDIV0 (0x400) 117 #define CPG_CDDIV1 (0x404) 118 + #define CPG_CDDIV2 (0x408) 119 #define CPG_CDDIV3 (0x40C) 120 #define CPG_CDDIV4 (0x410) 121 #define CPG_CSDIV0 (0x500) 122 + #define CPG_CSDIV1 (0x504) 123 124 #define CDDIV0_DIVCTL1 DDIV_PACK(CPG_CDDIV0, 4, 3, 1) 125 #define CDDIV0_DIVCTL2 DDIV_PACK(CPG_CDDIV0, 8, 3, 2) ··· 125 #define CDDIV1_DIVCTL1 DDIV_PACK(CPG_CDDIV1, 4, 2, 5) 126 #define CDDIV1_DIVCTL2 DDIV_PACK(CPG_CDDIV1, 8, 2, 6) 127 #define CDDIV1_DIVCTL3 DDIV_PACK(CPG_CDDIV1, 12, 2, 7) 128 + #define CDDIV2_DIVCTL3 DDIV_PACK(CPG_CDDIV2, 12, 3, 11) 129 #define CDDIV3_DIVCTL1 DDIV_PACK(CPG_CDDIV3, 4, 3, 13) 130 #define CDDIV3_DIVCTL2 DDIV_PACK(CPG_CDDIV3, 8, 3, 14) 131 #define CDDIV3_DIVCTL3 DDIV_PACK(CPG_CDDIV3, 12, 1, 15) ··· 134 135 #define CSDIV0_DIVCTL0 DDIV_PACK(CPG_CSDIV0, 0, 2, CSDIV_NO_MON) 136 #define CSDIV0_DIVCTL1 DDIV_PACK(CPG_CSDIV0, 4, 2, CSDIV_NO_MON) 137 + #define CSDIV0_DIVCTL2 DDIV_PACK(CPG_CSDIV0, 8, 2, CSDIV_NO_MON) 138 #define CSDIV0_DIVCTL3 DDIV_PACK_NO_RMW(CPG_CSDIV0, 12, 2, CSDIV_NO_MON) 139 + #define CSDIV1_DIVCTL2 DDIV_PACK(CPG_CSDIV1, 8, 4, CSDIV_NO_MON) 140 141 #define SSEL0_SELCTL2 SMUX_PACK(CPG_SSEL0, 8, 1) 142 #define SSEL0_SELCTL3 SMUX_PACK(CPG_SSEL0, 12, 1) ··· 188 CLK_TYPE_PLL, 189 CLK_TYPE_DDIV, /* Dynamic Switching Divider */ 190 CLK_TYPE_SMUX, /* Static Mux */ 191 + CLK_TYPE_PLLDSI, /* PLLDSI */ 192 + CLK_TYPE_PLLDSI_DIV, /* PLLDSI divider */ 193 }; 194 195 #define DEF_TYPE(_name, _id, _type...) \ ··· 218 .num_parents = ARRAY_SIZE(_parent_names), \ 219 .flag = CLK_SET_RATE_PARENT, \ 220 .mux_flags = CLK_MUX_HIWORD_MASK) 221 + #define DEF_PLLDSI(_name, _id, _parent, _pll_packed) \ 222 + DEF_TYPE(_name, _id, CLK_TYPE_PLLDSI, .parent = _parent, .cfg.pll = _pll_packed) 223 + #define DEF_PLLDSI_DIV(_name, _id, _parent, _ddiv_packed, _dtable) \ 224 + DEF_TYPE(_name, _id, CLK_TYPE_PLLDSI_DIV, \ 225 + .cfg.ddiv = _ddiv_packed, \ 226 + .dtable = _dtable, \ 227 + .parent = _parent, \ 228 + .flag = CLK_SET_RATE_PARENT) 229 230 /** 231 * struct rzv2h_mod_clk - Module Clocks definitions
+14
drivers/clk/rockchip/Kconfig
··· 30 help 31 Build the driver for RV1126 Clock Driver. 32 33 config CLK_RK3036 34 bool "Rockchip RK3036 clock controller support" 35 depends on ARM || COMPILE_TEST ··· 99 default y 100 help 101 Build the driver for RK3399 Clock Driver. 102 103 config CLK_RK3528 104 bool "Rockchip RK3528 clock controller support"
··· 30 help 31 Build the driver for RV1126 Clock Driver. 32 33 + config CLK_RV1126B 34 + bool "Rockchip RV1126B clock controller support" 35 + depends on ARM64 || COMPILE_TEST 36 + default y 37 + help 38 + Build the driver for RV1126B Clock Driver. 39 + 40 config CLK_RK3036 41 bool "Rockchip RK3036 clock controller support" 42 depends on ARM || COMPILE_TEST ··· 92 default y 93 help 94 Build the driver for RK3399 Clock Driver. 95 + 96 + config CLK_RK3506 97 + bool "Rockchip RK3506 clock controller support" 98 + depends on ARM || COMPILE_TEST 99 + default y 100 + help 101 + Build the driver for RK3506 Clock Driver. 102 103 config CLK_RK3528 104 bool "Rockchip RK3528 clock controller support"
+2
drivers/clk/rockchip/Makefile
··· 20 obj-$(CONFIG_CLK_PX30) += clk-px30.o 21 obj-$(CONFIG_CLK_RV110X) += clk-rv1108.o 22 obj-$(CONFIG_CLK_RV1126) += clk-rv1126.o 23 obj-$(CONFIG_CLK_RK3036) += clk-rk3036.o 24 obj-$(CONFIG_CLK_RK312X) += clk-rk3128.o 25 obj-$(CONFIG_CLK_RK3188) += clk-rk3188.o ··· 30 obj-$(CONFIG_CLK_RK3328) += clk-rk3328.o 31 obj-$(CONFIG_CLK_RK3368) += clk-rk3368.o 32 obj-$(CONFIG_CLK_RK3399) += clk-rk3399.o 33 obj-$(CONFIG_CLK_RK3528) += clk-rk3528.o rst-rk3528.o 34 obj-$(CONFIG_CLK_RK3562) += clk-rk3562.o rst-rk3562.o 35 obj-$(CONFIG_CLK_RK3568) += clk-rk3568.o
··· 20 obj-$(CONFIG_CLK_PX30) += clk-px30.o 21 obj-$(CONFIG_CLK_RV110X) += clk-rv1108.o 22 obj-$(CONFIG_CLK_RV1126) += clk-rv1126.o 23 + obj-$(CONFIG_CLK_RV1126B) += clk-rv1126b.o rst-rv1126b.o 24 obj-$(CONFIG_CLK_RK3036) += clk-rk3036.o 25 obj-$(CONFIG_CLK_RK312X) += clk-rk3128.o 26 obj-$(CONFIG_CLK_RK3188) += clk-rk3188.o ··· 29 obj-$(CONFIG_CLK_RK3328) += clk-rk3328.o 30 obj-$(CONFIG_CLK_RK3368) += clk-rk3368.o 31 obj-$(CONFIG_CLK_RK3399) += clk-rk3399.o 32 + obj-$(CONFIG_CLK_RK3506) += clk-rk3506.o rst-rk3506.o 33 obj-$(CONFIG_CLK_RK3528) += clk-rk3528.o rst-rk3528.o 34 obj-$(CONFIG_CLK_RK3562) += clk-rk3562.o rst-rk3562.o 35 obj-$(CONFIG_CLK_RK3568) += clk-rk3568.o
+165
drivers/clk/rockchip/clk-cpu.c
··· 396 kfree(cpuclk); 397 return ERR_PTR(ret); 398 }
··· 396 kfree(cpuclk); 397 return ERR_PTR(ret); 398 } 399 + 400 + static int rockchip_cpuclk_multi_pll_pre_rate_change(struct rockchip_cpuclk *cpuclk, 401 + struct clk_notifier_data *ndata) 402 + { 403 + unsigned long new_rate = roundup(ndata->new_rate, 1000); 404 + const struct rockchip_cpuclk_rate_table *rate; 405 + unsigned long flags; 406 + 407 + rate = rockchip_get_cpuclk_settings(cpuclk, new_rate); 408 + if (!rate) { 409 + pr_err("%s: Invalid rate : %lu for cpuclk\n", 410 + __func__, new_rate); 411 + return -EINVAL; 412 + } 413 + 414 + if (new_rate > ndata->old_rate) { 415 + spin_lock_irqsave(cpuclk->lock, flags); 416 + rockchip_cpuclk_set_dividers(cpuclk, rate); 417 + spin_unlock_irqrestore(cpuclk->lock, flags); 418 + } 419 + 420 + return 0; 421 + } 422 + 423 + static int rockchip_cpuclk_multi_pll_post_rate_change(struct rockchip_cpuclk *cpuclk, 424 + struct clk_notifier_data *ndata) 425 + { 426 + unsigned long new_rate = roundup(ndata->new_rate, 1000); 427 + const struct rockchip_cpuclk_rate_table *rate; 428 + unsigned long flags; 429 + 430 + rate = rockchip_get_cpuclk_settings(cpuclk, new_rate); 431 + if (!rate) { 432 + pr_err("%s: Invalid rate : %lu for cpuclk\n", 433 + __func__, new_rate); 434 + return -EINVAL; 435 + } 436 + 437 + if (new_rate < ndata->old_rate) { 438 + spin_lock_irqsave(cpuclk->lock, flags); 439 + rockchip_cpuclk_set_dividers(cpuclk, rate); 440 + spin_unlock_irqrestore(cpuclk->lock, flags); 441 + } 442 + 443 + return 0; 444 + } 445 + 446 + static int rockchip_cpuclk_multi_pll_notifier_cb(struct notifier_block *nb, 447 + unsigned long event, void *data) 448 + { 449 + struct clk_notifier_data *ndata = data; 450 + struct rockchip_cpuclk *cpuclk = to_rockchip_cpuclk_nb(nb); 451 + int ret = 0; 452 + 453 + pr_debug("%s: event %lu, old_rate %lu, new_rate: %lu\n", 454 + __func__, event, ndata->old_rate, ndata->new_rate); 455 + if (event == PRE_RATE_CHANGE) 456 + ret = rockchip_cpuclk_multi_pll_pre_rate_change(cpuclk, ndata); 457 + else if (event == POST_RATE_CHANGE) 458 + ret = rockchip_cpuclk_multi_pll_post_rate_change(cpuclk, ndata); 459 + 460 + return notifier_from_errno(ret); 461 + } 462 + 463 + struct clk *rockchip_clk_register_cpuclk_multi_pll(const char *name, 464 + const char *const *parent_names, 465 + u8 num_parents, void __iomem *base, 466 + int muxdiv_offset, u8 mux_shift, 467 + u8 mux_width, u8 mux_flags, 468 + int div_offset, u8 div_shift, 469 + u8 div_width, u8 div_flags, 470 + unsigned long flags, spinlock_t *lock, 471 + const struct rockchip_cpuclk_rate_table *rates, 472 + int nrates) 473 + { 474 + struct rockchip_cpuclk *cpuclk; 475 + struct clk_hw *hw; 476 + struct clk_mux *mux = NULL; 477 + struct clk_divider *div = NULL; 478 + const struct clk_ops *mux_ops = NULL, *div_ops = NULL; 479 + int ret; 480 + 481 + if (num_parents > 1) { 482 + mux = kzalloc(sizeof(*mux), GFP_KERNEL); 483 + if (!mux) 484 + return ERR_PTR(-ENOMEM); 485 + 486 + mux->reg = base + muxdiv_offset; 487 + mux->shift = mux_shift; 488 + mux->mask = BIT(mux_width) - 1; 489 + mux->flags = mux_flags; 490 + mux->lock = lock; 491 + mux_ops = (mux_flags & CLK_MUX_READ_ONLY) ? &clk_mux_ro_ops 492 + : &clk_mux_ops; 493 + } 494 + 495 + if (div_width > 0) { 496 + div = kzalloc(sizeof(*div), GFP_KERNEL); 497 + if (!div) { 498 + ret = -ENOMEM; 499 + goto free_mux; 500 + } 501 + 502 + div->flags = div_flags; 503 + if (div_offset) 504 + div->reg = base + div_offset; 505 + else 506 + div->reg = base + muxdiv_offset; 507 + div->shift = div_shift; 508 + div->width = div_width; 509 + div->lock = lock; 510 + div_ops = (div_flags & CLK_DIVIDER_READ_ONLY) 511 + ? &clk_divider_ro_ops 512 + : &clk_divider_ops; 513 + } 514 + 515 + hw = clk_hw_register_composite(NULL, name, parent_names, num_parents, 516 + mux ? &mux->hw : NULL, mux_ops, 517 + div ? &div->hw : NULL, div_ops, 518 + NULL, NULL, flags); 519 + if (IS_ERR(hw)) { 520 + ret = PTR_ERR(hw); 521 + goto free_div; 522 + } 523 + 524 + cpuclk = kzalloc(sizeof(*cpuclk), GFP_KERNEL); 525 + if (!cpuclk) { 526 + ret = -ENOMEM; 527 + goto unregister_clk; 528 + } 529 + 530 + cpuclk->reg_base = base; 531 + cpuclk->lock = lock; 532 + cpuclk->clk_nb.notifier_call = rockchip_cpuclk_multi_pll_notifier_cb; 533 + ret = clk_notifier_register(hw->clk, &cpuclk->clk_nb); 534 + if (ret) { 535 + pr_err("%s: failed to register clock notifier for %s\n", 536 + __func__, name); 537 + goto free_cpuclk; 538 + } 539 + 540 + if (nrates > 0) { 541 + cpuclk->rate_count = nrates; 542 + cpuclk->rate_table = kmemdup(rates, 543 + sizeof(*rates) * nrates, 544 + GFP_KERNEL); 545 + if (!cpuclk->rate_table) { 546 + ret = -ENOMEM; 547 + goto free_cpuclk; 548 + } 549 + } 550 + 551 + return hw->clk; 552 + 553 + free_cpuclk: 554 + kfree(cpuclk); 555 + unregister_clk: 556 + clk_hw_unregister_composite(hw); 557 + free_div: 558 + kfree(div); 559 + free_mux: 560 + kfree(mux); 561 + 562 + return ERR_PTR(ret); 563 + }
+869
drivers/clk/rockchip/clk-rk3506.c
···
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * Copyright (c) 2023-2025 Rockchip Electronics Co., Ltd. 4 + * Author: Finley Xiao <finley.xiao@rock-chips.com> 5 + */ 6 + 7 + #include <linux/clk-provider.h> 8 + #include <linux/module.h> 9 + #include <linux/of.h> 10 + #include <linux/of_device.h> 11 + #include <linux/of_address.h> 12 + #include <linux/platform_device.h> 13 + #include <linux/syscore_ops.h> 14 + #include <dt-bindings/clock/rockchip,rk3506-cru.h> 15 + #include "clk.h" 16 + 17 + #define PVTPLL_SRC_SEL_PVTPLL (BIT(7) | BIT(23)) 18 + 19 + enum rk3506_plls { 20 + gpll, v0pll, v1pll, 21 + }; 22 + 23 + /* 24 + * [FRAC PLL]: GPLL, V0PLL, V1PLL 25 + * - VCO Frequency: 950MHz to 3800MHZ 26 + * - Output Frequency: 19MHz to 3800MHZ 27 + * - refdiv: 1 to 63 (Int Mode), 1 to 2 (Frac Mode) 28 + * - fbdiv: 16 to 3800 (Int Mode), 20 to 380 (Frac Mode) 29 + * - post1div: 1 to 7 30 + * - post2div: 1 to 7 31 + */ 32 + static struct rockchip_pll_rate_table rk3506_pll_rates[] = { 33 + /* _mhz, _refdiv, _fbdiv, _postdiv1, _postdiv2, _dsmpd, _frac */ 34 + RK3036_PLL_RATE(1896000000, 1, 79, 1, 1, 1, 0), 35 + RK3036_PLL_RATE(1800000000, 1, 75, 1, 1, 1, 0), 36 + RK3036_PLL_RATE(1704000000, 1, 71, 1, 1, 1, 0), 37 + RK3036_PLL_RATE(1608000000, 1, 67, 1, 1, 1, 0), 38 + RK3036_PLL_RATE(1512000000, 1, 63, 1, 1, 1, 0), 39 + RK3036_PLL_RATE(1416000000, 1, 59, 1, 1, 1, 0), 40 + RK3036_PLL_RATE(1350000000, 4, 225, 1, 1, 1, 0), 41 + RK3036_PLL_RATE(1296000000, 1, 54, 1, 1, 1, 0), 42 + RK3036_PLL_RATE(1200000000, 1, 50, 1, 1, 1, 0), 43 + RK3036_PLL_RATE(1188000000, 1, 99, 2, 1, 1, 0), 44 + RK3036_PLL_RATE(1179648000, 1, 49, 1, 1, 0, 2550137), 45 + RK3036_PLL_RATE(1008000000, 1, 84, 2, 1, 1, 0), 46 + RK3036_PLL_RATE(1000000000, 3, 125, 1, 1, 1, 0), 47 + RK3036_PLL_RATE(993484800, 1, 41, 1, 1, 0, 6630355), 48 + RK3036_PLL_RATE(983040000, 1, 40, 1, 1, 0, 16106127), 49 + RK3036_PLL_RATE(960000000, 1, 80, 2, 1, 1, 0), 50 + RK3036_PLL_RATE(912000000, 1, 76, 2, 1, 1, 0), 51 + RK3036_PLL_RATE(903168000, 1, 75, 2, 1, 0, 4429185), 52 + RK3036_PLL_RATE(816000000, 1, 68, 2, 1, 1, 0), 53 + RK3036_PLL_RATE(800000000, 3, 200, 2, 1, 1, 0), 54 + RK3036_PLL_RATE(600000000, 1, 50, 2, 1, 1, 0), 55 + RK3036_PLL_RATE(594000000, 2, 99, 2, 1, 1, 0), 56 + RK3036_PLL_RATE(408000000, 1, 68, 2, 2, 1, 0), 57 + RK3036_PLL_RATE(312000000, 1, 78, 6, 1, 1, 0), 58 + RK3036_PLL_RATE(216000000, 1, 72, 4, 2, 1, 0), 59 + RK3036_PLL_RATE(96000000, 1, 48, 6, 2, 1, 0), 60 + { /* sentinel */ }, 61 + }; 62 + 63 + #define RK3506_DIV_ACLK_CORE_MASK 0xf 64 + #define RK3506_DIV_ACLK_CORE_SHIFT 9 65 + #define RK3506_DIV_PCLK_CORE_MASK 0xf 66 + #define RK3506_DIV_PCLK_CORE_SHIFT 0 67 + 68 + #define RK3506_CLKSEL15(_aclk_core_div) \ 69 + { \ 70 + .reg = RK3506_CLKSEL_CON(15), \ 71 + .val = HIWORD_UPDATE(_aclk_core_div, RK3506_DIV_ACLK_CORE_MASK, \ 72 + RK3506_DIV_ACLK_CORE_SHIFT), \ 73 + } 74 + 75 + #define RK3506_CLKSEL16(_pclk_core_div) \ 76 + { \ 77 + .reg = RK3506_CLKSEL_CON(16), \ 78 + .val = HIWORD_UPDATE(_pclk_core_div, RK3506_DIV_PCLK_CORE_MASK, \ 79 + RK3506_DIV_PCLK_CORE_SHIFT), \ 80 + } 81 + 82 + /* SIGN-OFF: aclk_core: 500M, pclk_core: 125M, */ 83 + #define RK3506_CPUCLK_RATE(_prate, _aclk_core_div, _pclk_core_div) \ 84 + { \ 85 + .prate = _prate, \ 86 + .divs = { \ 87 + RK3506_CLKSEL15(_aclk_core_div), \ 88 + RK3506_CLKSEL16(_pclk_core_div), \ 89 + }, \ 90 + } 91 + 92 + static struct rockchip_cpuclk_rate_table rk3506_cpuclk_rates[] __initdata = { 93 + RK3506_CPUCLK_RATE(1608000000, 3, 12), 94 + RK3506_CPUCLK_RATE(1512000000, 3, 12), 95 + RK3506_CPUCLK_RATE(1416000000, 2, 11), 96 + RK3506_CPUCLK_RATE(1296000000, 2, 10), 97 + RK3506_CPUCLK_RATE(1200000000, 2, 9), 98 + RK3506_CPUCLK_RATE(1179648000, 2, 9), 99 + RK3506_CPUCLK_RATE(1008000000, 1, 7), 100 + RK3506_CPUCLK_RATE(903168000, 1, 7), 101 + RK3506_CPUCLK_RATE(800000000, 1, 6), 102 + RK3506_CPUCLK_RATE(750000000, 1, 5), 103 + RK3506_CPUCLK_RATE(589824000, 1, 4), 104 + RK3506_CPUCLK_RATE(400000000, 1, 3), 105 + RK3506_CPUCLK_RATE(200000000, 1, 1), 106 + }; 107 + 108 + PNAME(mux_pll_p) = { "xin24m" }; 109 + PNAME(gpll_v0pll_v1pll_parents_p) = { "gpll", "v0pll", "v1pll" }; 110 + PNAME(gpll_v0pll_v1pll_g_parents_p) = { "clk_gpll_gate", "clk_v0pll_gate", "clk_v1pll_gate" }; 111 + PNAME(gpll_v0pll_v1pll_div_parents_p) = { "clk_gpll_div", "clk_v0pll_div", "clk_v1pll_div" }; 112 + PNAME(xin24m_gpll_v0pll_v1pll_g_parents_p) = { "xin24m", "clk_gpll_gate", "clk_v0pll_gate", "clk_v1pll_gate" }; 113 + PNAME(xin24m_g_gpll_v0pll_v1pll_g_parents_p) = { "xin24m_gate", "clk_gpll_gate", "clk_v0pll_gate", "clk_v1pll_gate" }; 114 + PNAME(xin24m_g_gpll_v0pll_v1pll_div_parents_p) = { "xin24m_gate", "clk_gpll_div", "clk_v0pll_div", "clk_v1pll_div" }; 115 + PNAME(xin24m_400k_32k_parents_p) = { "xin24m", "clk_rc", "clk_32k" }; 116 + PNAME(clk_frac_uart_matrix0_mux_parents_p) = { "xin24m", "gpll", "clk_v0pll_gate", "clk_v1pll_gate" }; 117 + PNAME(clk_timer0_parents_p) = { "xin24m", "clk_gpll_div_100m", "clk_32k", "clk_core_pvtpll", "sai0_mclk_in", "sai0_sclk_in" }; 118 + PNAME(clk_timer1_parents_p) = { "xin24m", "clk_gpll_div_100m", "clk_32k", "clk_core_pvtpll", "sai1_mclk_in", "sai1_sclk_in" }; 119 + PNAME(clk_timer2_parents_p) = { "xin24m", "clk_gpll_div_100m", "clk_32k", "clk_core_pvtpll", "sai2_mclk_in", "sai2_sclk_in" }; 120 + PNAME(clk_timer3_parents_p) = { "xin24m", "clk_gpll_div_100m", "clk_32k", "clk_core_pvtpll", "sai3_mclk_in", "sai3_sclk_in" }; 121 + PNAME(clk_timer4_parents_p) = { "xin24m", "clk_gpll_div_100m", "clk_32k", "clk_core_pvtpll", "mclk_asrc0" }; 122 + PNAME(clk_timer5_parents_p) = { "xin24m", "clk_gpll_div_100m", "clk_32k", "clk_core_pvtpll", "mclk_asrc1" }; 123 + PNAME(sclk_uart_parents_p) = { "xin24m", "clk_gpll_gate", "clk_v0pll_gate", "clk_frac_uart_matrix0", "clk_frac_uart_matrix1", 124 + "clk_frac_common_matrix0", "clk_frac_common_matrix1", "clk_frac_common_matrix2" }; 125 + PNAME(clk_mac_ptp_root_parents_p) = { "gpll", "v0pll", "v1pll" }; 126 + PNAME(clk_pwm_parents_p) = { "clk_rc", "sai0_mclk_in", "sai1_mclk_in", "sai2_mclk_in", "sai3_mclk_in", "sai0_sclk_in", "sai1_sclk_in", 127 + "sai2_sclk_in", "sai3_sclk_in", "mclk_asrc0", "mclk_asrc1" }; 128 + PNAME(clk_can_parents_p) = { "xin24m", "gpll", "clk_v0pll_gate", "clk_v1pll_gate", "clk_frac_voice_matrix1", 129 + "clk_frac_common_matrix0", "clk_frac_common_matrix1", "clk_frac_common_matrix2" }; 130 + PNAME(clk_pdm_parents_p) = { "xin24m_gate", "clk_int_voice_matrix0", "clk_int_voice_matrix1", "clk_int_voice_matrix2", 131 + "clk_frac_voice_matrix0", "clk_frac_voice_matrix1", "clk_frac_common_matrix0", "clk_frac_common_matrix1", 132 + "clk_frac_common_matrix2", "sai0_mclk_in", "sai1_mclk_in", "sai2_mclk_in", "sai3_mclk_in", "clk_gpll_div" }; 133 + PNAME(mclk_sai_asrc_parents_p) = { "xin24m_gate", "clk_int_voice_matrix0", "clk_int_voice_matrix1", "clk_int_voice_matrix2", 134 + "clk_frac_voice_matrix0", "clk_frac_voice_matrix1", "clk_frac_common_matrix0", "clk_frac_common_matrix1", 135 + "clk_frac_common_matrix2", "sai0_mclk_in", "sai1_mclk_in", "sai2_mclk_in", "sai3_mclk_in" }; 136 + PNAME(lrck_asrc_parents_p) = { "mclk_asrc0", "mclk_asrc1", "mclk_asrc2", "mclk_asrc3", "mclk_spdiftx", "clk_spdifrx_to_asrc", "clkout_pdm", 137 + "sai0_fs", "sai1_fs", "sai2_fs", "sai3_fs", "sai4_fs" }; 138 + PNAME(cclk_src_sdmmc_parents_p) = { "xin24m_gate", "gpll", "clk_v0pll_gate", "clk_v1pll_gate" }; 139 + PNAME(dclk_vop_parents_p) = { "xin24m_gate", "clk_gpll_gate", "clk_v0pll_gate", "clk_v1pll_gate", "dummy_vop_dclk", 140 + "dummy_vop_dclk", "dummy_vop_dclk", "dummy_vop_dclk" }; 141 + PNAME(dbclk_gpio0_parents_p) = { "xin24m", "clk_rc", "clk_32k_pmu" }; 142 + PNAME(clk_pmu_hp_timer_parents_p) = { "xin24m", "gpll_div_100m", "clk_core_pvtpll" }; 143 + PNAME(clk_ref_out_parents_p) = { "xin24m", "gpll", "v0pll", "v1pll" }; 144 + PNAME(clk_32k_frac_parents_p) = { "xin24m", "v0pll", "v1pll", "clk_rc" }; 145 + PNAME(clk_32k_parents_p) = { "xin32k", "clk_32k_rc", "clk_32k_frac" }; 146 + PNAME(clk_ref_phy_pmu_mux_parents_p) = { "xin24m", "clk_ref_phy_pll" }; 147 + PNAME(clk_vpll_ref_parents_p) = { "xin24m", "clk_pll_ref_io" }; 148 + PNAME(mux_armclk_p) = { "armclk_pll", "clk_core_pvtpll" }; 149 + 150 + #define MFLAGS CLK_MUX_HIWORD_MASK 151 + #define DFLAGS CLK_DIVIDER_HIWORD_MASK 152 + #define GFLAGS (CLK_GATE_HIWORD_MASK | CLK_GATE_SET_TO_DISABLE) 153 + 154 + static struct rockchip_pll_clock rk3506_pll_clks[] __initdata = { 155 + [gpll] = PLL(pll_rk3328, PLL_GPLL, "gpll", mux_pll_p, 156 + CLK_IS_CRITICAL, RK3506_PLL_CON(0), 157 + RK3506_MODE_CON, 0, 2, 0, rk3506_pll_rates), 158 + [v0pll] = PLL(pll_rk3328, PLL_V0PLL, "v0pll", mux_pll_p, 159 + CLK_IS_CRITICAL, RK3506_PLL_CON(8), 160 + RK3506_MODE_CON, 2, 0, 0, rk3506_pll_rates), 161 + [v1pll] = PLL(pll_rk3328, PLL_V1PLL, "v1pll", mux_pll_p, 162 + CLK_IS_CRITICAL, RK3506_PLL_CON(16), 163 + RK3506_MODE_CON, 4, 1, 0, rk3506_pll_rates), 164 + }; 165 + 166 + static struct rockchip_clk_branch rk3506_armclk __initdata = 167 + MUX(ARMCLK, "armclk", mux_armclk_p, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 168 + RK3506_CLKSEL_CON(15), 8, 1, MFLAGS); 169 + 170 + static struct rockchip_clk_branch rk3506_clk_branches[] __initdata = { 171 + /* 172 + * CRU Clock-Architecture 173 + */ 174 + /* top */ 175 + GATE(XIN24M_GATE, "xin24m_gate", "xin24m", CLK_IS_CRITICAL, 176 + RK3506_CLKGATE_CON(0), 1, GFLAGS), 177 + GATE(CLK_GPLL_GATE, "clk_gpll_gate", "gpll", CLK_IS_CRITICAL, 178 + RK3506_CLKGATE_CON(0), 2, GFLAGS), 179 + GATE(CLK_V0PLL_GATE, "clk_v0pll_gate", "v0pll", CLK_IS_CRITICAL, 180 + RK3506_CLKGATE_CON(0), 3, GFLAGS), 181 + GATE(CLK_V1PLL_GATE, "clk_v1pll_gate", "v1pll", 0, 182 + RK3506_CLKGATE_CON(0), 4, GFLAGS), 183 + COMPOSITE_NOMUX(CLK_GPLL_DIV, "clk_gpll_div", "clk_gpll_gate", CLK_IS_CRITICAL, 184 + RK3506_CLKSEL_CON(0), 6, 4, DFLAGS, 185 + RK3506_CLKGATE_CON(0), 5, GFLAGS), 186 + COMPOSITE_NOMUX(CLK_GPLL_DIV_100M, "clk_gpll_div_100m", "clk_gpll_div", 0, 187 + RK3506_CLKSEL_CON(0), 10, 4, DFLAGS, 188 + RK3506_CLKGATE_CON(0), 6, GFLAGS), 189 + COMPOSITE_NOMUX(CLK_V0PLL_DIV, "clk_v0pll_div", "clk_v0pll_gate", CLK_IS_CRITICAL, 190 + RK3506_CLKSEL_CON(1), 0, 4, DFLAGS, 191 + RK3506_CLKGATE_CON(0), 7, GFLAGS), 192 + COMPOSITE_NOMUX(CLK_V1PLL_DIV, "clk_v1pll_div", "clk_v1pll_gate", 0, 193 + RK3506_CLKSEL_CON(1), 4, 4, DFLAGS, 194 + RK3506_CLKGATE_CON(0), 8, GFLAGS), 195 + COMPOSITE_NOMUX(CLK_INT_VOICE_MATRIX0, "clk_int_voice_matrix0", "clk_v0pll_gate", 0, 196 + RK3506_CLKSEL_CON(1), 8, 5, DFLAGS, 197 + RK3506_CLKGATE_CON(0), 9, GFLAGS), 198 + COMPOSITE_NOMUX(CLK_INT_VOICE_MATRIX1, "clk_int_voice_matrix1", "clk_v1pll_gate", 0, 199 + RK3506_CLKSEL_CON(2), 0, 5, DFLAGS, 200 + RK3506_CLKGATE_CON(0), 10, GFLAGS), 201 + COMPOSITE_NOMUX(CLK_INT_VOICE_MATRIX2, "clk_int_voice_matrix2", "clk_v0pll_gate", 0, 202 + RK3506_CLKSEL_CON(2), 5, 5, DFLAGS, 203 + RK3506_CLKGATE_CON(0), 11, GFLAGS), 204 + MUX(CLK_FRAC_UART_MATRIX0_MUX, "clk_frac_uart_matrix0_mux", clk_frac_uart_matrix0_mux_parents_p, 0, 205 + RK3506_CLKSEL_CON(3), 9, 2, MFLAGS), 206 + MUX(CLK_FRAC_UART_MATRIX1_MUX, "clk_frac_uart_matrix1_mux", xin24m_gpll_v0pll_v1pll_g_parents_p, 0, 207 + RK3506_CLKSEL_CON(3), 11, 2, MFLAGS), 208 + MUX(CLK_FRAC_VOICE_MATRIX0_MUX, "clk_frac_voice_matrix0_mux", xin24m_g_gpll_v0pll_v1pll_g_parents_p, 0, 209 + RK3506_CLKSEL_CON(3), 13, 2, MFLAGS), 210 + MUX(CLK_FRAC_VOICE_MATRIX1_MUX, "clk_frac_voice_matrix1_mux", xin24m_g_gpll_v0pll_v1pll_g_parents_p, 0, 211 + RK3506_CLKSEL_CON(4), 0, 2, MFLAGS), 212 + MUX(CLK_FRAC_COMMON_MATRIX0_MUX, "clk_frac_common_matrix0_mux", xin24m_gpll_v0pll_v1pll_g_parents_p, 0, 213 + RK3506_CLKSEL_CON(4), 2, 2, MFLAGS), 214 + MUX(CLK_FRAC_COMMON_MATRIX1_MUX, "clk_frac_common_matrix1_mux", xin24m_g_gpll_v0pll_v1pll_g_parents_p, 0, 215 + RK3506_CLKSEL_CON(4), 4, 2, MFLAGS), 216 + MUX(CLK_FRAC_COMMON_MATRIX2_MUX, "clk_frac_common_matrix2_mux", xin24m_g_gpll_v0pll_v1pll_g_parents_p, 0, 217 + RK3506_CLKSEL_CON(4), 6, 2, MFLAGS), 218 + COMPOSITE_FRAC(CLK_FRAC_UART_MATRIX0, "clk_frac_uart_matrix0", "clk_frac_uart_matrix0_mux", 0, 219 + RK3506_CLKSEL_CON(5), 0, 220 + RK3506_CLKGATE_CON(0), 13, GFLAGS), 221 + COMPOSITE_FRAC(CLK_FRAC_UART_MATRIX1, "clk_frac_uart_matrix1", "clk_frac_uart_matrix1_mux", 0, 222 + RK3506_CLKSEL_CON(6), 0, 223 + RK3506_CLKGATE_CON(0), 14, GFLAGS), 224 + COMPOSITE_FRAC(CLK_FRAC_VOICE_MATRIX0, "clk_frac_voice_matrix0", "clk_frac_voice_matrix0_mux", 0, 225 + RK3506_CLKSEL_CON(7), 0, 226 + RK3506_CLKGATE_CON(0), 15, GFLAGS), 227 + COMPOSITE_FRAC(CLK_FRAC_VOICE_MATRIX1, "clk_frac_voice_matrix1", "clk_frac_voice_matrix1_mux", 0, 228 + RK3506_CLKSEL_CON(9), 0, 229 + RK3506_CLKGATE_CON(1), 0, GFLAGS), 230 + COMPOSITE_FRAC(CLK_FRAC_COMMON_MATRIX0, "clk_frac_common_matrix0", "clk_frac_common_matrix0_mux", 0, 231 + RK3506_CLKSEL_CON(11), 0, 232 + RK3506_CLKGATE_CON(1), 1, GFLAGS), 233 + COMPOSITE_FRAC(CLK_FRAC_COMMON_MATRIX1, "clk_frac_common_matrix1", "clk_frac_common_matrix1_mux", 0, 234 + RK3506_CLKSEL_CON(12), 0, 235 + RK3506_CLKGATE_CON(1), 2, GFLAGS), 236 + COMPOSITE_FRAC(CLK_FRAC_COMMON_MATRIX2, "clk_frac_common_matrix2", "clk_frac_common_matrix2_mux", 0, 237 + RK3506_CLKSEL_CON(13), 0, 238 + RK3506_CLKGATE_CON(1), 3, GFLAGS), 239 + GATE(CLK_REF_USBPHY_TOP, "clk_ref_usbphy_top", "xin24m", 0, 240 + RK3506_CLKGATE_CON(1), 4, GFLAGS), 241 + GATE(CLK_REF_DPHY_TOP, "clk_ref_dphy_top", "xin24m", 0, 242 + RK3506_CLKGATE_CON(1), 5, GFLAGS), 243 + 244 + /* core */ 245 + COMPOSITE_NOGATE(0, "armclk_pll", gpll_v0pll_v1pll_parents_p, CLK_IS_CRITICAL, 246 + RK3506_CLKSEL_CON(15), 5, 2, MFLAGS, 0, 5, DFLAGS), 247 + COMPOSITE_NOMUX(ACLK_CORE_ROOT, "aclk_core_root", "armclk", CLK_IGNORE_UNUSED, 248 + RK3506_CLKSEL_CON(15), 9, 4, DFLAGS | CLK_DIVIDER_READ_ONLY, 249 + RK3506_CLKGATE_CON(2), 11, GFLAGS), 250 + COMPOSITE_NOMUX(PCLK_CORE_ROOT, "pclk_core_root", "armclk", CLK_IGNORE_UNUSED, 251 + RK3506_CLKSEL_CON(16), 0, 4, DFLAGS | CLK_DIVIDER_READ_ONLY, 252 + RK3506_CLKGATE_CON(2), 12, GFLAGS), 253 + GATE(PCLK_DBG, "pclk_dbg", "pclk_core_root", CLK_IGNORE_UNUSED, 254 + RK3506_CLKGATE_CON(3), 1, GFLAGS), 255 + GATE(PCLK_CORE_GRF, "pclk_core_grf", "pclk_core_root", CLK_IGNORE_UNUSED, 256 + RK3506_CLKGATE_CON(3), 4, GFLAGS), 257 + GATE(PCLK_CORE_CRU, "pclk_core_cru", "pclk_core_root", CLK_IGNORE_UNUSED, 258 + RK3506_CLKGATE_CON(3), 5, GFLAGS), 259 + GATE(CLK_CORE_EMA_DETECT, "clk_core_ema_detect", "xin24m_gate", CLK_IGNORE_UNUSED, 260 + RK3506_CLKGATE_CON(3), 6, GFLAGS), 261 + GATE(PCLK_GPIO1, "pclk_gpio1", "aclk_core_root", 0, 262 + RK3506_CLKGATE_CON(3), 8, GFLAGS), 263 + GATE(DBCLK_GPIO1, "dbclk_gpio1", "xin24m_gate", 0, 264 + RK3506_CLKGATE_CON(3), 9, GFLAGS), 265 + 266 + /* core peri */ 267 + COMPOSITE(ACLK_CORE_PERI_ROOT, "aclk_core_peri_root", gpll_v0pll_v1pll_g_parents_p, 0, 268 + RK3506_CLKSEL_CON(18), 5, 2, MFLAGS, 0, 5, DFLAGS, 269 + RK3506_CLKGATE_CON(4), 0, GFLAGS), 270 + GATE(HCLK_CORE_PERI_ROOT, "hclk_core_peri_root", "aclk_core_peri_root", 0, 271 + RK3506_CLKGATE_CON(4), 1, GFLAGS), 272 + GATE(PCLK_CORE_PERI_ROOT, "pclk_core_peri_root", "aclk_core_peri_root", 0, 273 + RK3506_CLKGATE_CON(4), 2, GFLAGS), 274 + COMPOSITE(CLK_DSMC, "clk_dsmc", xin24m_gpll_v0pll_v1pll_g_parents_p, 0, 275 + RK3506_CLKSEL_CON(18), 12, 2, MFLAGS, 7, 5, DFLAGS, 276 + RK3506_CLKGATE_CON(4), 4, GFLAGS), 277 + GATE(ACLK_DSMC, "aclk_dsmc", "aclk_core_peri_root", 0, 278 + RK3506_CLKGATE_CON(4), 5, GFLAGS), 279 + GATE(PCLK_DSMC, "pclk_dsmc", "pclk_core_peri_root", 0, 280 + RK3506_CLKGATE_CON(4), 6, GFLAGS), 281 + COMPOSITE(CLK_FLEXBUS_TX, "clk_flexbus_tx", xin24m_gpll_v0pll_v1pll_g_parents_p, 0, 282 + RK3506_CLKSEL_CON(19), 5, 2, MFLAGS, 0, 5, DFLAGS, 283 + RK3506_CLKGATE_CON(4), 7, GFLAGS), 284 + COMPOSITE(CLK_FLEXBUS_RX, "clk_flexbus_rx", xin24m_gpll_v0pll_v1pll_g_parents_p, 0, 285 + RK3506_CLKSEL_CON(19), 12, 2, MFLAGS, 7, 5, DFLAGS, 286 + RK3506_CLKGATE_CON(4), 8, GFLAGS), 287 + GATE(ACLK_FLEXBUS, "aclk_flexbus", "aclk_core_peri_root", 0, 288 + RK3506_CLKGATE_CON(4), 9, GFLAGS), 289 + GATE(HCLK_FLEXBUS, "hclk_flexbus", "hclk_core_peri_root", 0, 290 + RK3506_CLKGATE_CON(4), 10, GFLAGS), 291 + GATE(ACLK_DSMC_SLV, "aclk_dsmc_slv", "aclk_core_peri_root", 0, 292 + RK3506_CLKGATE_CON(4), 11, GFLAGS), 293 + GATE(HCLK_DSMC_SLV, "hclk_dsmc_slv", "hclk_core_peri_root", 0, 294 + RK3506_CLKGATE_CON(4), 12, GFLAGS), 295 + 296 + /* bus */ 297 + COMPOSITE(ACLK_BUS_ROOT, "aclk_bus_root", gpll_v0pll_v1pll_div_parents_p, CLK_IS_CRITICAL, 298 + RK3506_CLKSEL_CON(21), 5, 2, MFLAGS, 0, 5, DFLAGS, 299 + RK3506_CLKGATE_CON(5), 0, GFLAGS), 300 + COMPOSITE(HCLK_BUS_ROOT, "hclk_bus_root", gpll_v0pll_v1pll_div_parents_p, CLK_IS_CRITICAL, 301 + RK3506_CLKSEL_CON(21), 12, 2, MFLAGS, 7, 5, DFLAGS, 302 + RK3506_CLKGATE_CON(5), 1, GFLAGS), 303 + COMPOSITE(PCLK_BUS_ROOT, "pclk_bus_root", gpll_v0pll_v1pll_div_parents_p, CLK_IS_CRITICAL, 304 + RK3506_CLKSEL_CON(22), 5, 2, MFLAGS, 0, 5, DFLAGS, 305 + RK3506_CLKGATE_CON(5), 2, GFLAGS), 306 + GATE(ACLK_SYSRAM, "aclk_sysram", "aclk_bus_root", CLK_IGNORE_UNUSED, 307 + RK3506_CLKGATE_CON(5), 6, GFLAGS), 308 + GATE(HCLK_SYSRAM, "hclk_sysram", "aclk_bus_root", CLK_IGNORE_UNUSED, 309 + RK3506_CLKGATE_CON(5), 7, GFLAGS), 310 + GATE(ACLK_DMAC0, "aclk_dmac0", "aclk_bus_root", 0, 311 + RK3506_CLKGATE_CON(5), 8, GFLAGS), 312 + GATE(ACLK_DMAC1, "aclk_dmac1", "aclk_bus_root", 0, 313 + RK3506_CLKGATE_CON(5), 9, GFLAGS), 314 + GATE(HCLK_M0, "hclk_m0", "aclk_bus_root", 0, 315 + RK3506_CLKGATE_CON(5), 10, GFLAGS), 316 + GATE(ACLK_CRYPTO_NS, "aclk_crypto_ns", "aclk_bus_root", 0, 317 + RK3506_CLKGATE_CON(5), 14, GFLAGS), 318 + GATE(HCLK_CRYPTO_NS, "hclk_crypto_ns", "hclk_bus_root", 0, 319 + RK3506_CLKGATE_CON(5), 15, GFLAGS), 320 + GATE(HCLK_RNG, "hclk_rng", "hclk_bus_root", 0, 321 + RK3506_CLKGATE_CON(6), 0, GFLAGS), 322 + GATE(PCLK_BUS_GRF, "pclk_bus_grf", "pclk_bus_root", CLK_IGNORE_UNUSED, 323 + RK3506_CLKGATE_CON(6), 1, GFLAGS), 324 + GATE(PCLK_TIMER, "pclk_timer", "pclk_bus_root", 0, 325 + RK3506_CLKGATE_CON(6), 2, GFLAGS), 326 + COMPOSITE_NODIV(CLK_TIMER0_CH0, "clk_timer0_ch0", clk_timer0_parents_p, 0, 327 + RK3506_CLKSEL_CON(22), 7, 3, MFLAGS, 328 + RK3506_CLKGATE_CON(6), 3, GFLAGS), 329 + COMPOSITE_NODIV(CLK_TIMER0_CH1, "clk_timer0_ch1", clk_timer1_parents_p, 0, 330 + RK3506_CLKSEL_CON(22), 10, 3, MFLAGS, 331 + RK3506_CLKGATE_CON(6), 4, GFLAGS), 332 + COMPOSITE_NODIV(CLK_TIMER0_CH2, "clk_timer0_ch2", clk_timer2_parents_p, 0, 333 + RK3506_CLKSEL_CON(22), 13, 3, MFLAGS, 334 + RK3506_CLKGATE_CON(6), 5, GFLAGS), 335 + COMPOSITE_NODIV(CLK_TIMER0_CH3, "clk_timer0_ch3", clk_timer3_parents_p, 0, 336 + RK3506_CLKSEL_CON(23), 0, 3, MFLAGS, 337 + RK3506_CLKGATE_CON(6), 6, GFLAGS), 338 + COMPOSITE_NODIV(CLK_TIMER0_CH4, "clk_timer0_ch4", clk_timer4_parents_p, 0, 339 + RK3506_CLKSEL_CON(23), 3, 3, MFLAGS, 340 + RK3506_CLKGATE_CON(6), 7, GFLAGS), 341 + COMPOSITE_NODIV(CLK_TIMER0_CH5, "clk_timer0_ch5", clk_timer5_parents_p, 0, 342 + RK3506_CLKSEL_CON(23), 6, 3, MFLAGS, 343 + RK3506_CLKGATE_CON(6), 8, GFLAGS), 344 + GATE(PCLK_WDT0, "pclk_wdt0", "pclk_bus_root", 0, 345 + RK3506_CLKGATE_CON(6), 9, GFLAGS), 346 + GATE(TCLK_WDT0, "tclk_wdt0", "xin24m_gate", 0, 347 + RK3506_CLKGATE_CON(6), 10, GFLAGS), 348 + GATE(PCLK_WDT1, "pclk_wdt1", "pclk_bus_root", 0, 349 + RK3506_CLKGATE_CON(6), 11, GFLAGS), 350 + GATE(TCLK_WDT1, "tclk_wdt1", "xin24m_gate", 0, 351 + RK3506_CLKGATE_CON(6), 12, GFLAGS), 352 + GATE(PCLK_MAILBOX, "pclk_mailbox", "pclk_bus_root", 0, 353 + RK3506_CLKGATE_CON(6), 13, GFLAGS), 354 + GATE(PCLK_INTMUX, "pclk_intmux", "pclk_bus_root", 0, 355 + RK3506_CLKGATE_CON(6), 14, GFLAGS), 356 + GATE(PCLK_SPINLOCK, "pclk_spinlock", "pclk_bus_root", 0, 357 + RK3506_CLKGATE_CON(6), 15, GFLAGS), 358 + GATE(PCLK_DDRC, "pclk_ddrc", "pclk_bus_root", CLK_IGNORE_UNUSED, 359 + RK3506_CLKGATE_CON(7), 0, GFLAGS), 360 + GATE(HCLK_DDRPHY, "hclk_ddrphy", "hclk_bus_root", CLK_IGNORE_UNUSED, 361 + RK3506_CLKGATE_CON(7), 1, GFLAGS), 362 + GATE(PCLK_DDRMON, "pclk_ddrmon", "pclk_bus_root", CLK_IGNORE_UNUSED, 363 + RK3506_CLKGATE_CON(7), 2, GFLAGS), 364 + GATE(CLK_DDRMON_OSC, "clk_ddrmon_osc", "xin24m_gate", CLK_IGNORE_UNUSED, 365 + RK3506_CLKGATE_CON(7), 3, GFLAGS), 366 + GATE(PCLK_STDBY, "pclk_stdby", "pclk_bus_root", CLK_IGNORE_UNUSED, 367 + RK3506_CLKGATE_CON(7), 4, GFLAGS), 368 + GATE(HCLK_USBOTG0, "hclk_usbotg0", "hclk_bus_root", 0, 369 + RK3506_CLKGATE_CON(7), 5, GFLAGS), 370 + GATE(HCLK_USBOTG0_PMU, "hclk_usbotg0_pmu", "hclk_bus_root", 0, 371 + RK3506_CLKGATE_CON(7), 6, GFLAGS), 372 + GATE(CLK_USBOTG0_ADP, "clk_usbotg0_adp", "clk_32k", 0, 373 + RK3506_CLKGATE_CON(7), 7, GFLAGS), 374 + GATE(HCLK_USBOTG1, "hclk_usbotg1", "hclk_bus_root", 0, 375 + RK3506_CLKGATE_CON(7), 8, GFLAGS), 376 + GATE(HCLK_USBOTG1_PMU, "hclk_usbotg1_pmu", "hclk_bus_root", 0, 377 + RK3506_CLKGATE_CON(7), 9, GFLAGS), 378 + GATE(CLK_USBOTG1_ADP, "clk_usbotg1_adp", "clk_32k", 0, 379 + RK3506_CLKGATE_CON(7), 10, GFLAGS), 380 + GATE(PCLK_USBPHY, "pclk_usbphy", "pclk_bus_root", 0, 381 + RK3506_CLKGATE_CON(7), 11, GFLAGS), 382 + GATE(ACLK_DMA2DDR, "aclk_dma2ddr", "aclk_bus_root", CLK_IGNORE_UNUSED, 383 + RK3506_CLKGATE_CON(8), 0, GFLAGS), 384 + GATE(PCLK_DMA2DDR, "pclk_dma2ddr", "pclk_bus_root", CLK_IGNORE_UNUSED, 385 + RK3506_CLKGATE_CON(8), 1, GFLAGS), 386 + COMPOSITE_NOMUX(STCLK_M0, "stclk_m0", "xin24m_gate", 0, 387 + RK3506_CLKSEL_CON(23), 9, 6, DFLAGS, 388 + RK3506_CLKGATE_CON(8), 2, GFLAGS), 389 + COMPOSITE(CLK_DDRPHY, "clk_ddrphy", gpll_v0pll_v1pll_parents_p, CLK_IGNORE_UNUSED, 390 + RK3506_PMU_CLKSEL_CON(4), 4, 2, MFLAGS, 0, 4, DFLAGS, 391 + RK3506_PMU_CLKGATE_CON(1), 10, GFLAGS), 392 + FACTOR(CLK_DDRC_SRC, "clk_ddrc_src", "clk_ddrphy", 0, 1, 4), 393 + GATE(ACLK_DDRC_0, "aclk_ddrc_0", "clk_ddrc_src", CLK_IGNORE_UNUSED, 394 + RK3506_CLKGATE_CON(10), 0, GFLAGS), 395 + GATE(ACLK_DDRC_1, "aclk_ddrc_1", "clk_ddrc_src", CLK_IGNORE_UNUSED, 396 + RK3506_CLKGATE_CON(10), 1, GFLAGS), 397 + GATE(CLK_DDRC, "clk_ddrc", "clk_ddrc_src", CLK_IS_CRITICAL, 398 + RK3506_CLKGATE_CON(10), 3, GFLAGS), 399 + GATE(CLK_DDRMON, "clk_ddrmon", "clk_ddrc_src", CLK_IGNORE_UNUSED, 400 + RK3506_CLKGATE_CON(10), 4, GFLAGS), 401 + 402 + /* ls peri */ 403 + COMPOSITE(HCLK_LSPERI_ROOT, "hclk_lsperi_root", gpll_v0pll_v1pll_div_parents_p, 0, 404 + RK3506_CLKSEL_CON(29), 5, 2, MFLAGS, 0, 5, DFLAGS, 405 + RK3506_CLKGATE_CON(11), 0, GFLAGS), 406 + GATE(PCLK_LSPERI_ROOT, "pclk_lsperi_root", "hclk_lsperi_root", 0, 407 + RK3506_CLKGATE_CON(11), 1, GFLAGS), 408 + GATE(PCLK_UART0, "pclk_uart0", "pclk_lsperi_root", 0, 409 + RK3506_CLKGATE_CON(11), 4, GFLAGS), 410 + GATE(PCLK_UART1, "pclk_uart1", "pclk_lsperi_root", 0, 411 + RK3506_CLKGATE_CON(11), 5, GFLAGS), 412 + GATE(PCLK_UART2, "pclk_uart2", "pclk_lsperi_root", 0, 413 + RK3506_CLKGATE_CON(11), 6, GFLAGS), 414 + GATE(PCLK_UART3, "pclk_uart3", "pclk_lsperi_root", 0, 415 + RK3506_CLKGATE_CON(11), 7, GFLAGS), 416 + GATE(PCLK_UART4, "pclk_uart4", "pclk_lsperi_root", 0, 417 + RK3506_CLKGATE_CON(11), 8, GFLAGS), 418 + COMPOSITE(SCLK_UART0, "sclk_uart0", sclk_uart_parents_p, 0, 419 + RK3506_CLKSEL_CON(29), 12, 3, MFLAGS, 7, 5, DFLAGS, 420 + RK3506_CLKGATE_CON(11), 9, GFLAGS), 421 + COMPOSITE(SCLK_UART1, "sclk_uart1", sclk_uart_parents_p, 0, 422 + RK3506_CLKSEL_CON(30), 5, 3, MFLAGS, 0, 5, DFLAGS, 423 + RK3506_CLKGATE_CON(11), 10, GFLAGS), 424 + COMPOSITE(SCLK_UART2, "sclk_uart2", sclk_uart_parents_p, 0, 425 + RK3506_CLKSEL_CON(30), 13, 3, MFLAGS, 8, 5, DFLAGS, 426 + RK3506_CLKGATE_CON(11), 11, GFLAGS), 427 + COMPOSITE(SCLK_UART3, "sclk_uart3", sclk_uart_parents_p, 0, 428 + RK3506_CLKSEL_CON(31), 5, 3, MFLAGS, 0, 5, DFLAGS, 429 + RK3506_CLKGATE_CON(11), 12, GFLAGS), 430 + COMPOSITE(SCLK_UART4, "sclk_uart4", sclk_uart_parents_p, 0, 431 + RK3506_CLKSEL_CON(31), 13, 3, MFLAGS, 8, 5, DFLAGS, 432 + RK3506_CLKGATE_CON(11), 13, GFLAGS), 433 + GATE(PCLK_I2C0, "pclk_i2c0", "pclk_lsperi_root", 0, 434 + RK3506_CLKGATE_CON(11), 14, GFLAGS), 435 + COMPOSITE(CLK_I2C0, "clk_i2c0", xin24m_g_gpll_v0pll_v1pll_div_parents_p, 0, 436 + RK3506_CLKSEL_CON(32), 4, 2, MFLAGS, 0, 4, DFLAGS, 437 + RK3506_CLKGATE_CON(11), 15, GFLAGS), 438 + GATE(PCLK_I2C1, "pclk_i2c1", "pclk_lsperi_root", 0, 439 + RK3506_CLKGATE_CON(12), 0, GFLAGS), 440 + COMPOSITE(CLK_I2C1, "clk_i2c1", xin24m_g_gpll_v0pll_v1pll_div_parents_p, 0, 441 + RK3506_CLKSEL_CON(32), 10, 2, MFLAGS, 6, 4, DFLAGS, 442 + RK3506_CLKGATE_CON(12), 1, GFLAGS), 443 + GATE(PCLK_I2C2, "pclk_i2c2", "pclk_lsperi_root", 0, 444 + RK3506_CLKGATE_CON(12), 2, GFLAGS), 445 + COMPOSITE(CLK_I2C2, "clk_i2c2", xin24m_g_gpll_v0pll_v1pll_div_parents_p, 0, 446 + RK3506_CLKSEL_CON(33), 4, 2, MFLAGS, 0, 4, DFLAGS, 447 + RK3506_CLKGATE_CON(12), 3, GFLAGS), 448 + GATE(PCLK_PWM1, "pclk_pwm1", "pclk_lsperi_root", 0, 449 + RK3506_CLKGATE_CON(12), 4, GFLAGS), 450 + COMPOSITE(CLK_PWM1, "clk_pwm1", gpll_v0pll_v1pll_div_parents_p, 0, 451 + RK3506_CLKSEL_CON(33), 10, 2, MFLAGS, 6, 4, DFLAGS, 452 + RK3506_CLKGATE_CON(12), 5, GFLAGS), 453 + GATE(CLK_OSC_PWM1, "clk_osc_pwm1", "xin24m", 0, 454 + RK3506_CLKGATE_CON(12), 6, GFLAGS), 455 + GATE(CLK_RC_PWM1, "clk_rc_pwm1", "clk_rc", 0, 456 + RK3506_CLKGATE_CON(12), 7, GFLAGS), 457 + COMPOSITE_NODIV(CLK_FREQ_PWM1, "clk_freq_pwm1", clk_pwm_parents_p, 0, 458 + RK3506_CLKSEL_CON(33), 12, 4, MFLAGS, 459 + RK3506_CLKGATE_CON(12), 8, GFLAGS), 460 + COMPOSITE_NODIV(CLK_COUNTER_PWM1, "clk_counter_pwm1", clk_pwm_parents_p, 0, 461 + RK3506_CLKSEL_CON(34), 0, 4, MFLAGS, 462 + RK3506_CLKGATE_CON(12), 9, GFLAGS), 463 + GATE(PCLK_SPI0, "pclk_spi0", "pclk_lsperi_root", 0, 464 + RK3506_CLKGATE_CON(12), 10, GFLAGS), 465 + COMPOSITE(CLK_SPI0, "clk_spi0", xin24m_g_gpll_v0pll_v1pll_div_parents_p, 0, 466 + RK3506_CLKSEL_CON(34), 8, 2, MFLAGS, 4, 4, DFLAGS, 467 + RK3506_CLKGATE_CON(12), 11, GFLAGS), 468 + GATE(PCLK_SPI1, "pclk_spi1", "pclk_lsperi_root", 0, 469 + RK3506_CLKGATE_CON(12), 12, GFLAGS), 470 + COMPOSITE(CLK_SPI1, "clk_spi1", xin24m_g_gpll_v0pll_v1pll_div_parents_p, 0, 471 + RK3506_CLKSEL_CON(34), 14, 2, MFLAGS, 10, 4, DFLAGS, 472 + RK3506_CLKGATE_CON(12), 13, GFLAGS), 473 + GATE(PCLK_GPIO2, "pclk_gpio2", "pclk_lsperi_root", 0, 474 + RK3506_CLKGATE_CON(12), 14, GFLAGS), 475 + COMPOSITE_NODIV(DBCLK_GPIO2, "dbclk_gpio2", xin24m_400k_32k_parents_p, 0, 476 + RK3506_CLKSEL_CON(35), 0, 2, MFLAGS, 477 + RK3506_CLKGATE_CON(12), 15, GFLAGS), 478 + GATE(PCLK_GPIO3, "pclk_gpio3", "pclk_lsperi_root", 0, 479 + RK3506_CLKGATE_CON(13), 0, GFLAGS), 480 + COMPOSITE_NODIV(DBCLK_GPIO3, "dbclk_gpio3", xin24m_400k_32k_parents_p, 0, 481 + RK3506_CLKSEL_CON(35), 2, 2, MFLAGS, 482 + RK3506_CLKGATE_CON(13), 1, GFLAGS), 483 + GATE(PCLK_GPIO4, "pclk_gpio4", "pclk_lsperi_root", 0, 484 + RK3506_CLKGATE_CON(13), 2, GFLAGS), 485 + COMPOSITE_NODIV(DBCLK_GPIO4, "dbclk_gpio4", xin24m_400k_32k_parents_p, 0, 486 + RK3506_CLKSEL_CON(35), 4, 2, MFLAGS, 487 + RK3506_CLKGATE_CON(13), 3, GFLAGS), 488 + GATE(HCLK_CAN0, "hclk_can0", "hclk_lsperi_root", 0, 489 + RK3506_CLKGATE_CON(13), 4, GFLAGS), 490 + COMPOSITE(CLK_CAN0, "clk_can0", clk_can_parents_p, 0, 491 + RK3506_CLKSEL_CON(35), 11, 3, MFLAGS, 6, 5, DFLAGS, 492 + RK3506_CLKGATE_CON(13), 5, GFLAGS), 493 + GATE(HCLK_CAN1, "hclk_can1", "hclk_lsperi_root", 0, 494 + RK3506_CLKGATE_CON(13), 6, GFLAGS), 495 + COMPOSITE(CLK_CAN1, "clk_can1", clk_can_parents_p, 0, 496 + RK3506_CLKSEL_CON(36), 5, 3, MFLAGS, 0, 5, DFLAGS, 497 + RK3506_CLKGATE_CON(13), 7, GFLAGS), 498 + GATE(HCLK_PDM, "hclk_pdm", "hclk_lsperi_root", 0, 499 + RK3506_CLKGATE_CON(13), 8, GFLAGS), 500 + COMPOSITE(MCLK_PDM, "mclk_pdm", clk_pdm_parents_p, 0, 501 + RK3506_CLKSEL_CON(37), 5, 4, MFLAGS, 0, 5, DFLAGS, 502 + RK3506_CLKGATE_CON(13), 9, GFLAGS), 503 + COMPOSITE(CLKOUT_PDM, "clkout_pdm", clk_pdm_parents_p, 0, 504 + RK3506_CLKSEL_CON(38), 10, 4, MFLAGS, 0, 10, DFLAGS, 505 + RK3506_CLKGATE_CON(13), 10, GFLAGS), 506 + COMPOSITE(MCLK_SPDIFTX, "mclk_spdiftx", mclk_sai_asrc_parents_p, 0, 507 + RK3506_CLKSEL_CON(39), 5, 4, MFLAGS, 0, 5, DFLAGS, 508 + RK3506_CLKGATE_CON(13), 11, GFLAGS), 509 + GATE(HCLK_SPDIFTX, "hclk_spdiftx", "hclk_lsperi_root", 0, 510 + RK3506_CLKGATE_CON(13), 12, GFLAGS), 511 + GATE(HCLK_SPDIFRX, "hclk_spdifrx", "hclk_lsperi_root", 0, 512 + RK3506_CLKGATE_CON(13), 13, GFLAGS), 513 + COMPOSITE(MCLK_SPDIFRX, "mclk_spdifrx", gpll_v0pll_v1pll_g_parents_p, 0, 514 + RK3506_CLKSEL_CON(39), 14, 2, MFLAGS, 9, 5, DFLAGS, 515 + RK3506_CLKGATE_CON(13), 14, GFLAGS), 516 + COMPOSITE(MCLK_SAI0, "mclk_sai0", mclk_sai_asrc_parents_p, 0, 517 + RK3506_CLKSEL_CON(40), 8, 4, MFLAGS, 0, 8, DFLAGS, 518 + RK3506_CLKGATE_CON(13), 15, GFLAGS), 519 + GATE(HCLK_SAI0, "hclk_sai0", "hclk_lsperi_root", 0, 520 + RK3506_CLKGATE_CON(14), 0, GFLAGS), 521 + GATE(MCLK_OUT_SAI0, "mclk_out_sai0", "mclk_sai0", 0, 522 + RK3506_CLKGATE_CON(14), 1, GFLAGS), 523 + COMPOSITE(MCLK_SAI1, "mclk_sai1", mclk_sai_asrc_parents_p, 0, 524 + RK3506_CLKSEL_CON(41), 8, 4, MFLAGS, 0, 8, DFLAGS, 525 + RK3506_CLKGATE_CON(14), 2, GFLAGS), 526 + GATE(HCLK_SAI1, "hclk_sai1", "hclk_lsperi_root", 0, 527 + RK3506_CLKGATE_CON(14), 3, GFLAGS), 528 + GATE(MCLK_OUT_SAI1, "mclk_out_sai1", "mclk_sai1", 0, 529 + RK3506_CLKGATE_CON(14), 4, GFLAGS), 530 + GATE(HCLK_ASRC0, "hclk_asrc0", "hclk_lsperi_root", 0, 531 + RK3506_CLKGATE_CON(14), 5, GFLAGS), 532 + COMPOSITE(CLK_ASRC0, "clk_asrc0", gpll_v0pll_v1pll_g_parents_p, 0, 533 + RK3506_CLKSEL_CON(42), 5, 2, MFLAGS, 0, 5, DFLAGS, 534 + RK3506_CLKGATE_CON(14), 6, GFLAGS), 535 + GATE(HCLK_ASRC1, "hclk_asrc1", "hclk_lsperi_root", 0, 536 + RK3506_CLKGATE_CON(14), 7, GFLAGS), 537 + COMPOSITE(CLK_ASRC1, "clk_asrc1", gpll_v0pll_v1pll_g_parents_p, 0, 538 + RK3506_CLKSEL_CON(42), 12, 2, MFLAGS, 7, 5, DFLAGS, 539 + RK3506_CLKGATE_CON(14), 8, GFLAGS), 540 + GATE(PCLK_CRU, "pclk_cru", "pclk_lsperi_root", CLK_IS_CRITICAL, 541 + RK3506_CLKGATE_CON(14), 9, GFLAGS), 542 + GATE(PCLK_PMU_ROOT, "pclk_pmu_root", "pclk_lsperi_root", CLK_IS_CRITICAL, 543 + RK3506_CLKGATE_CON(14), 10, GFLAGS), 544 + COMPOSITE_NODIV(MCLK_ASRC0, "mclk_asrc0", mclk_sai_asrc_parents_p, 0, 545 + RK3506_CLKSEL_CON(46), 0, 4, MFLAGS, 546 + RK3506_CLKGATE_CON(16), 0, GFLAGS), 547 + COMPOSITE_NODIV(MCLK_ASRC1, "mclk_asrc1", mclk_sai_asrc_parents_p, 0, 548 + RK3506_CLKSEL_CON(46), 4, 4, MFLAGS, 549 + RK3506_CLKGATE_CON(16), 1, GFLAGS), 550 + COMPOSITE_NODIV(MCLK_ASRC2, "mclk_asrc2", mclk_sai_asrc_parents_p, 0, 551 + RK3506_CLKSEL_CON(46), 8, 4, MFLAGS, 552 + RK3506_CLKGATE_CON(16), 2, GFLAGS), 553 + COMPOSITE_NODIV(MCLK_ASRC3, "mclk_asrc3", mclk_sai_asrc_parents_p, 0, 554 + RK3506_CLKSEL_CON(46), 12, 4, MFLAGS, 555 + RK3506_CLKGATE_CON(16), 3, GFLAGS), 556 + COMPOSITE_NODIV(LRCK_ASRC0_SRC, "lrck_asrc0_src", lrck_asrc_parents_p, 0, 557 + RK3506_CLKSEL_CON(47), 0, 4, MFLAGS, 558 + RK3506_CLKGATE_CON(16), 4, GFLAGS), 559 + COMPOSITE_NODIV(LRCK_ASRC0_DST, "lrck_asrc0_dst", lrck_asrc_parents_p, 0, 560 + RK3506_CLKSEL_CON(47), 4, 4, MFLAGS, 561 + RK3506_CLKGATE_CON(16), 5, GFLAGS), 562 + COMPOSITE_NODIV(LRCK_ASRC1_SRC, "lrck_asrc1_src", lrck_asrc_parents_p, 0, 563 + RK3506_CLKSEL_CON(47), 8, 4, MFLAGS, 564 + RK3506_CLKGATE_CON(16), 6, GFLAGS), 565 + COMPOSITE_NODIV(LRCK_ASRC1_DST, "lrck_asrc1_dst", lrck_asrc_parents_p, 0, 566 + RK3506_CLKSEL_CON(47), 12, 4, MFLAGS, 567 + RK3506_CLKGATE_CON(16), 7, GFLAGS), 568 + 569 + /* hs peri */ 570 + COMPOSITE(ACLK_HSPERI_ROOT, "aclk_hsperi_root", gpll_v0pll_v1pll_div_parents_p, CLK_IS_CRITICAL, 571 + RK3506_CLKSEL_CON(49), 5, 2, MFLAGS, 0, 5, DFLAGS, 572 + RK3506_CLKGATE_CON(17), 0, GFLAGS), 573 + GATE(HCLK_HSPERI_ROOT, "hclk_hsperi_root", "aclk_hsperi_root", CLK_IS_CRITICAL, 574 + RK3506_CLKGATE_CON(17), 1, GFLAGS), 575 + GATE(PCLK_HSPERI_ROOT, "pclk_hsperi_root", "hclk_hsperi_root", CLK_IS_CRITICAL, 576 + RK3506_CLKGATE_CON(17), 2, GFLAGS), 577 + COMPOSITE(CCLK_SRC_SDMMC, "cclk_src_sdmmc", cclk_src_sdmmc_parents_p, 0, 578 + RK3506_CLKSEL_CON(49), 13, 2, MFLAGS, 7, 6, DFLAGS, 579 + RK3506_CLKGATE_CON(17), 6, GFLAGS), 580 + GATE(HCLK_SDMMC, "hclk_sdmmc", "hclk_hsperi_root", 0, 581 + RK3506_CLKGATE_CON(17), 7, GFLAGS), 582 + GATE(HCLK_FSPI, "hclk_fspi", "hclk_hsperi_root", 0, 583 + RK3506_CLKGATE_CON(17), 8, GFLAGS), 584 + COMPOSITE(SCLK_FSPI, "sclk_fspi", xin24m_g_gpll_v0pll_v1pll_g_parents_p, 0, 585 + RK3506_CLKSEL_CON(50), 5, 2, MFLAGS, 0, 5, DFLAGS, 586 + RK3506_CLKGATE_CON(17), 9, GFLAGS), 587 + GATE(PCLK_SPI2, "pclk_spi2", "pclk_hsperi_root", 0, 588 + RK3506_CLKGATE_CON(17), 10, GFLAGS), 589 + GATE(ACLK_MAC0, "aclk_mac0", "aclk_hsperi_root", 0, 590 + RK3506_CLKGATE_CON(17), 11, GFLAGS), 591 + GATE(ACLK_MAC1, "aclk_mac1", "aclk_hsperi_root", 0, 592 + RK3506_CLKGATE_CON(17), 12, GFLAGS), 593 + GATE(PCLK_MAC0, "pclk_mac0", "pclk_hsperi_root", 0, 594 + RK3506_CLKGATE_CON(17), 13, GFLAGS), 595 + GATE(PCLK_MAC1, "pclk_mac1", "pclk_hsperi_root", 0, 596 + RK3506_CLKGATE_CON(17), 14, GFLAGS), 597 + COMPOSITE_NOMUX(CLK_MAC_ROOT, "clk_mac_root", "gpll", 0, 598 + RK3506_CLKSEL_CON(50), 7, 5, DFLAGS, 599 + RK3506_CLKGATE_CON(17), 15, GFLAGS), 600 + GATE(CLK_MAC0, "clk_mac0", "clk_mac_root", 0, 601 + RK3506_CLKGATE_CON(18), 0, GFLAGS), 602 + GATE(CLK_MAC1, "clk_mac1", "clk_mac_root", 0, 603 + RK3506_CLKGATE_CON(18), 1, GFLAGS), 604 + COMPOSITE(MCLK_SAI2, "mclk_sai2", mclk_sai_asrc_parents_p, 0, 605 + RK3506_CLKSEL_CON(51), 8, 4, MFLAGS, 0, 8, DFLAGS, 606 + RK3506_CLKGATE_CON(18), 2, GFLAGS), 607 + GATE(HCLK_SAI2, "hclk_sai2", "hclk_hsperi_root", 0, 608 + RK3506_CLKGATE_CON(18), 3, GFLAGS), 609 + GATE(MCLK_OUT_SAI2, "mclk_out_sai2", "mclk_sai2", 0, 610 + RK3506_CLKGATE_CON(18), 4, GFLAGS), 611 + COMPOSITE(MCLK_SAI3_SRC, "mclk_sai3_src", mclk_sai_asrc_parents_p, 0, 612 + RK3506_CLKSEL_CON(52), 8, 4, MFLAGS, 0, 8, DFLAGS, 613 + RK3506_CLKGATE_CON(18), 5, GFLAGS), 614 + GATE(HCLK_SAI3, "hclk_sai3", "hclk_hsperi_root", 0, 615 + RK3506_CLKGATE_CON(18), 6, GFLAGS), 616 + GATE(MCLK_SAI3, "mclk_sai3", "mclk_sai3_src", 0, 617 + RK3506_CLKGATE_CON(18), 7, GFLAGS), 618 + GATE(MCLK_OUT_SAI3, "mclk_out_sai3", "mclk_sai3_src", 0, 619 + RK3506_CLKGATE_CON(18), 8, GFLAGS), 620 + COMPOSITE(MCLK_SAI4_SRC, "mclk_sai4_src", mclk_sai_asrc_parents_p, 0, 621 + RK3506_CLKSEL_CON(53), 8, 4, MFLAGS, 0, 8, DFLAGS, 622 + RK3506_CLKGATE_CON(18), 9, GFLAGS), 623 + GATE(HCLK_SAI4, "hclk_sai4", "hclk_hsperi_root", 0, 624 + RK3506_CLKGATE_CON(18), 10, GFLAGS), 625 + GATE(MCLK_SAI4, "mclk_sai4", "mclk_sai4_src", 0, 626 + RK3506_CLKGATE_CON(18), 11, GFLAGS), 627 + GATE(HCLK_DSM, "hclk_dsm", "hclk_hsperi_root", 0, 628 + RK3506_CLKGATE_CON(18), 12, GFLAGS), 629 + GATE(MCLK_DSM, "mclk_dsm", "mclk_sai3_src", 0, 630 + RK3506_CLKGATE_CON(18), 13, GFLAGS), 631 + GATE(PCLK_AUDIO_ADC, "pclk_audio_adc", "pclk_hsperi_root", 0, 632 + RK3506_CLKGATE_CON(18), 14, GFLAGS), 633 + GATE(MCLK_AUDIO_ADC, "mclk_audio_adc", "mclk_sai4_src", 0, 634 + RK3506_CLKGATE_CON(18), 15, GFLAGS), 635 + FACTOR(MCLK_AUDIO_ADC_DIV4, "mclk_audio_adc_div4", "mclk_audio_adc", 0, 1, 4), 636 + GATE(PCLK_SARADC, "pclk_saradc", "pclk_hsperi_root", 0, 637 + RK3506_CLKGATE_CON(19), 0, GFLAGS), 638 + COMPOSITE(CLK_SARADC, "clk_saradc", xin24m_400k_32k_parents_p, 0, 639 + RK3506_CLKSEL_CON(54), 4, 2, MFLAGS, 0, 4, DFLAGS, 640 + RK3506_CLKGATE_CON(19), 1, GFLAGS), 641 + GATE(PCLK_OTPC_NS, "pclk_otpc_ns", "pclk_hsperi_root", 0, 642 + RK3506_CLKGATE_CON(19), 3, GFLAGS), 643 + GATE(CLK_SBPI_OTPC_NS, "clk_sbpi_otpc_ns", "xin24m_gate", 0, 644 + RK3506_CLKGATE_CON(19), 4, GFLAGS), 645 + FACTOR(CLK_USER_OTPC_NS, "clk_user_otpc_ns", "clk_sbpi_otpc_ns", 0, 1, 2), 646 + GATE(PCLK_UART5, "pclk_uart5", "pclk_hsperi_root", 0, 647 + RK3506_CLKGATE_CON(19), 6, GFLAGS), 648 + COMPOSITE(SCLK_UART5, "sclk_uart5", sclk_uart_parents_p, 0, 649 + RK3506_CLKSEL_CON(54), 11, 3, MFLAGS, 6, 5, DFLAGS, 650 + RK3506_CLKGATE_CON(19), 7, GFLAGS), 651 + GATE(PCLK_GPIO234_IOC, "pclk_gpio234_ioc", "pclk_hsperi_root", CLK_IS_CRITICAL, 652 + RK3506_CLKGATE_CON(19), 8, GFLAGS), 653 + COMPOSITE(CLK_MAC_PTP_ROOT, "clk_mac_ptp_root", clk_mac_ptp_root_parents_p, 0, 654 + RK3506_CLKSEL_CON(55), 5, 2, MFLAGS, 0, 5, DFLAGS, 655 + RK3506_CLKGATE_CON(19), 9, GFLAGS), 656 + GATE(CLK_MAC0_PTP, "clk_mac0_ptp", "clk_mac_ptp_root", 0, 657 + RK3506_CLKGATE_CON(19), 10, GFLAGS), 658 + GATE(CLK_MAC1_PTP, "clk_mac1_ptp", "clk_mac_ptp_root", 0, 659 + RK3506_CLKGATE_CON(19), 11, GFLAGS), 660 + COMPOSITE(ACLK_VIO_ROOT, "aclk_vio_root", gpll_v0pll_v1pll_g_parents_p, 0, 661 + RK3506_CLKSEL_CON(58), 5, 2, MFLAGS, 0, 5, DFLAGS, 662 + RK3506_CLKGATE_CON(21), 0, GFLAGS), 663 + COMPOSITE(HCLK_VIO_ROOT, "hclk_vio_root", gpll_v0pll_v1pll_div_parents_p, 0, 664 + RK3506_CLKSEL_CON(58), 12, 2, MFLAGS, 7, 5, DFLAGS, 665 + RK3506_CLKGATE_CON(21), 1, GFLAGS), 666 + GATE(PCLK_VIO_ROOT, "pclk_vio_root", "hclk_vio_root", 0, 667 + RK3506_CLKGATE_CON(21), 2, GFLAGS), 668 + GATE(HCLK_RGA, "hclk_rga", "hclk_vio_root", 0, 669 + RK3506_CLKGATE_CON(21), 6, GFLAGS), 670 + GATE(ACLK_RGA, "aclk_rga", "aclk_vio_root", 0, 671 + RK3506_CLKGATE_CON(21), 7, GFLAGS), 672 + COMPOSITE(CLK_CORE_RGA, "clk_core_rga", gpll_v0pll_v1pll_g_parents_p, 0, 673 + RK3506_CLKSEL_CON(59), 5, 2, MFLAGS, 0, 5, DFLAGS, 674 + RK3506_CLKGATE_CON(21), 8, GFLAGS), 675 + GATE(ACLK_VOP, "aclk_vop", "aclk_vio_root", 0, 676 + RK3506_CLKGATE_CON(21), 9, GFLAGS), 677 + GATE(HCLK_VOP, "hclk_vop", "hclk_vio_root", 0, 678 + RK3506_CLKGATE_CON(21), 10, GFLAGS), 679 + COMPOSITE(DCLK_VOP, "dclk_vop", dclk_vop_parents_p, 0, 680 + RK3506_CLKSEL_CON(60), 8, 3, MFLAGS, 0, 8, DFLAGS, 681 + RK3506_CLKGATE_CON(21), 11, GFLAGS), 682 + GATE(PCLK_DPHY, "pclk_dphy", "pclk_vio_root", 0, 683 + RK3506_CLKGATE_CON(21), 12, GFLAGS), 684 + GATE(PCLK_DSI_HOST, "pclk_dsi_host", "pclk_vio_root", 0, 685 + RK3506_CLKGATE_CON(21), 13, GFLAGS), 686 + GATE(PCLK_TSADC, "pclk_tsadc", "pclk_vio_root", 0, 687 + RK3506_CLKGATE_CON(21), 14, GFLAGS), 688 + COMPOSITE_NOMUX(CLK_TSADC, "clk_tsadc", "xin24m_gate", 0, 689 + RK3506_CLKSEL_CON(61), 0, 8, DFLAGS, 690 + RK3506_CLKGATE_CON(21), 15, GFLAGS), 691 + COMPOSITE_NOMUX(CLK_TSADC_TSEN, "clk_tsadc_tsen", "xin24m_gate", 0, 692 + RK3506_CLKSEL_CON(61), 8, 3, DFLAGS, 693 + RK3506_CLKGATE_CON(22), 0, GFLAGS), 694 + GATE(PCLK_GPIO1_IOC, "pclk_gpio1_ioc", "pclk_vio_root", CLK_IS_CRITICAL, 695 + RK3506_CLKGATE_CON(22), 1, GFLAGS), 696 + 697 + /* pmu */ 698 + GATE(CLK_PMU, "clk_pmu", "xin24m", CLK_IGNORE_UNUSED, 699 + RK3506_PMU_CLKGATE_CON(0), 1, GFLAGS), 700 + GATE(PCLK_PMU, "pclk_pmu", "pclk_pmu_root", CLK_IGNORE_UNUSED, 701 + RK3506_PMU_CLKGATE_CON(0), 2, GFLAGS), 702 + GATE(PCLK_PMU_CRU, "pclk_pmu_cru", "pclk_pmu_root", CLK_IGNORE_UNUSED, 703 + RK3506_PMU_CLKGATE_CON(0), 4, GFLAGS), 704 + GATE(PCLK_PMU_GRF, "pclk_pmu_grf", "pclk_pmu_root", CLK_IGNORE_UNUSED, 705 + RK3506_PMU_CLKGATE_CON(0), 5, GFLAGS), 706 + GATE(PCLK_GPIO0_IOC, "pclk_gpio0_ioc", "pclk_pmu_root", CLK_IS_CRITICAL, 707 + RK3506_PMU_CLKGATE_CON(0), 7, GFLAGS), 708 + GATE(PCLK_GPIO0, "pclk_gpio0", "pclk_pmu_root", 0, 709 + RK3506_PMU_CLKGATE_CON(0), 8, GFLAGS), 710 + COMPOSITE_NODIV(DBCLK_GPIO0, "dbclk_gpio0", dbclk_gpio0_parents_p, 0, 711 + RK3506_PMU_CLKSEL_CON(0), 0, 2, MFLAGS, 712 + RK3506_PMU_CLKGATE_CON(0), 9, GFLAGS), 713 + GATE(PCLK_GPIO1_SHADOW, "pclk_gpio1_shadow", "pclk_pmu_root", 0, 714 + RK3506_PMU_CLKGATE_CON(0), 10, GFLAGS), 715 + COMPOSITE_NODIV(DBCLK_GPIO1_SHADOW, "dbclk_gpio1_shadow", dbclk_gpio0_parents_p, 0, 716 + RK3506_PMU_CLKSEL_CON(0), 2, 2, MFLAGS, 717 + RK3506_PMU_CLKGATE_CON(0), 11, GFLAGS), 718 + GATE(PCLK_PMU_HP_TIMER, "pclk_pmu_hp_timer", "pclk_pmu_root", CLK_IGNORE_UNUSED, 719 + RK3506_PMU_CLKGATE_CON(0), 12, GFLAGS), 720 + MUX(CLK_PMU_HP_TIMER, "clk_pmu_hp_timer", clk_pmu_hp_timer_parents_p, CLK_IGNORE_UNUSED, 721 + RK3506_PMU_CLKSEL_CON(0), 4, 2, MFLAGS), 722 + GATE(PCLK_PWM0, "pclk_pwm0", "pclk_pmu_root", 0, 723 + RK3506_PMU_CLKGATE_CON(0), 15, GFLAGS), 724 + COMPOSITE_NOMUX(CLK_PWM0, "clk_pwm0", "clk_gpll_div_100m", 0, 725 + RK3506_PMU_CLKSEL_CON(0), 6, 4, DFLAGS, 726 + RK3506_PMU_CLKGATE_CON(1), 0, GFLAGS), 727 + GATE(CLK_OSC_PWM0, "clk_osc_pwm0", "xin24m", 0, 728 + RK3506_PMU_CLKGATE_CON(1), 1, GFLAGS), 729 + GATE(CLK_RC_PWM0, "clk_rc_pwm0", "clk_rc", 0, 730 + RK3506_PMU_CLKGATE_CON(1), 2, GFLAGS), 731 + COMPOSITE_NOMUX(CLK_MAC_OUT, "clk_mac_out", "gpll", 0, 732 + RK3506_PMU_CLKSEL_CON(0), 10, 6, DFLAGS, 733 + RK3506_PMU_CLKGATE_CON(1), 3, GFLAGS), 734 + COMPOSITE(CLK_REF_OUT0, "clk_ref_out0", clk_ref_out_parents_p, 0, 735 + RK3506_PMU_CLKSEL_CON(1), 6, 2, MFLAGS, 0, 6, DFLAGS, 736 + RK3506_PMU_CLKGATE_CON(1), 4, GFLAGS), 737 + COMPOSITE(CLK_REF_OUT1, "clk_ref_out1", clk_ref_out_parents_p, 0, 738 + RK3506_PMU_CLKSEL_CON(1), 14, 2, MFLAGS, 8, 6, DFLAGS, 739 + RK3506_PMU_CLKGATE_CON(1), 5, GFLAGS), 740 + MUX(CLK_32K_FRAC_MUX, "clk_32k_frac_mux", clk_32k_frac_parents_p, 0, 741 + RK3506_PMU_CLKSEL_CON(3), 0, 2, MFLAGS), 742 + COMPOSITE_FRAC(CLK_32K_FRAC, "clk_32k_frac", "clk_32k_frac_mux", 0, 743 + RK3506_PMU_CLKSEL_CON(2), 0, 744 + RK3506_PMU_CLKGATE_CON(1), 6, GFLAGS), 745 + COMPOSITE_NOMUX(CLK_32K_RC, "clk_32k_rc", "clk_rc", CLK_IS_CRITICAL, 746 + RK3506_PMU_CLKSEL_CON(3), 2, 5, DFLAGS, 747 + RK3506_PMU_CLKGATE_CON(1), 7, GFLAGS), 748 + COMPOSITE_NODIV(CLK_32K, "clk_32k", clk_32k_parents_p, CLK_IS_CRITICAL, 749 + RK3506_PMU_CLKSEL_CON(3), 7, 2, MFLAGS, 750 + RK3506_PMU_CLKGATE_CON(1), 8, GFLAGS), 751 + COMPOSITE_NODIV(CLK_32K_PMU, "clk_32k_pmu", clk_32k_parents_p, CLK_IS_CRITICAL, 752 + RK3506_PMU_CLKSEL_CON(3), 9, 2, MFLAGS, 753 + RK3506_PMU_CLKGATE_CON(1), 9, GFLAGS), 754 + GATE(CLK_PMU_32K, "clk_pmu_32k", "clk_32k_pmu", CLK_IGNORE_UNUSED, 755 + RK3506_PMU_CLKGATE_CON(0), 3, GFLAGS), 756 + GATE(CLK_PMU_HP_TIMER_32K, "clk_pmu_hp_timer_32k", "clk_32k_pmu", CLK_IGNORE_UNUSED, 757 + RK3506_PMU_CLKGATE_CON(0), 14, GFLAGS), 758 + GATE(PCLK_TOUCH_KEY, "pclk_touch_key", "pclk_pmu_root", CLK_IGNORE_UNUSED, 759 + RK3506_PMU_CLKGATE_CON(1), 12, GFLAGS), 760 + GATE(CLK_TOUCH_KEY, "clk_touch_key", "xin24m", CLK_IGNORE_UNUSED, 761 + RK3506_PMU_CLKGATE_CON(1), 13, GFLAGS), 762 + COMPOSITE(CLK_REF_PHY_PLL, "clk_ref_phy_pll", gpll_v0pll_v1pll_parents_p, 0, 763 + RK3506_PMU_CLKSEL_CON(4), 13, 2, MFLAGS, 6, 7, DFLAGS, 764 + RK3506_PMU_CLKGATE_CON(1), 14, GFLAGS), 765 + MUX(CLK_REF_PHY_PMU_MUX, "clk_ref_phy_pmu_mux", clk_ref_phy_pmu_mux_parents_p, 0, 766 + RK3506_PMU_CLKSEL_CON(4), 15, 1, MFLAGS), 767 + GATE(CLK_WIFI_OUT, "clk_wifi_out", "xin24m", 0, 768 + RK3506_PMU_CLKGATE_CON(2), 0, GFLAGS), 769 + MUX(CLK_V0PLL_REF, "clk_v0pll_ref", clk_vpll_ref_parents_p, CLK_IGNORE_UNUSED, 770 + RK3506_PMU_CLKSEL_CON(6), 0, 1, MFLAGS), 771 + MUX(CLK_V1PLL_REF, "clk_v1pll_ref", clk_vpll_ref_parents_p, CLK_IGNORE_UNUSED, 772 + RK3506_PMU_CLKSEL_CON(6), 1, 1, MFLAGS), 773 + 774 + /* secure ns */ 775 + GATE(CLK_CORE_CRYPTO_NS, "clk_core_crypto_ns", "clk_core_crypto", 0, 776 + RK3506_CLKGATE_CON(5), 12, GFLAGS), 777 + GATE(CLK_PKA_CRYPTO_NS, "clk_pka_crypto_ns", "clk_pka_crypto", 0, 778 + RK3506_CLKGATE_CON(5), 13, GFLAGS), 779 + 780 + /* io */ 781 + GATE(CLK_SPI2, "clk_spi2", "clk_spi2_io", 0, 782 + RK3506_CLKGATE_CON(20), 0, GFLAGS), 783 + }; 784 + 785 + static void __init rk3506_clk_init(struct device_node *np) 786 + { 787 + struct rockchip_clk_provider *ctx; 788 + unsigned long clk_nr_clks; 789 + void __iomem *reg_base; 790 + 791 + clk_nr_clks = rockchip_clk_find_max_clk_id(rk3506_clk_branches, 792 + ARRAY_SIZE(rk3506_clk_branches)) + 1; 793 + 794 + reg_base = of_iomap(np, 0); 795 + if (!reg_base) { 796 + pr_err("%s: could not map cru region\n", __func__); 797 + return; 798 + } 799 + 800 + ctx = rockchip_clk_init(np, reg_base, clk_nr_clks); 801 + if (IS_ERR(ctx)) { 802 + pr_err("%s: rockchip clk init failed\n", __func__); 803 + iounmap(reg_base); 804 + return; 805 + } 806 + 807 + rockchip_clk_register_plls(ctx, rk3506_pll_clks, 808 + ARRAY_SIZE(rk3506_pll_clks), 809 + 0); 810 + 811 + rockchip_clk_register_armclk_multi_pll(ctx, &rk3506_armclk, 812 + rk3506_cpuclk_rates, 813 + ARRAY_SIZE(rk3506_cpuclk_rates)); 814 + 815 + rockchip_clk_register_branches(ctx, rk3506_clk_branches, 816 + ARRAY_SIZE(rk3506_clk_branches)); 817 + 818 + rk3506_rst_init(np, reg_base); 819 + 820 + rockchip_register_restart_notifier(ctx, RK3506_GLB_SRST_FST, NULL); 821 + 822 + rockchip_clk_of_add_provider(np, ctx); 823 + 824 + /* pvtpll src init */ 825 + writel_relaxed(PVTPLL_SRC_SEL_PVTPLL, reg_base + RK3506_CLKSEL_CON(15)); 826 + } 827 + 828 + CLK_OF_DECLARE(rk3506_cru, "rockchip,rk3506-cru", rk3506_clk_init); 829 + 830 + struct clk_rk3506_inits { 831 + void (*inits)(struct device_node *np); 832 + }; 833 + 834 + static const struct clk_rk3506_inits clk_rk3506_cru_init = { 835 + .inits = rk3506_clk_init, 836 + }; 837 + 838 + static const struct of_device_id clk_rk3506_match_table[] = { 839 + { 840 + .compatible = "rockchip,rk3506-cru", 841 + .data = &clk_rk3506_cru_init, 842 + }, 843 + { } 844 + }; 845 + 846 + static int clk_rk3506_probe(struct platform_device *pdev) 847 + { 848 + const struct clk_rk3506_inits *init_data; 849 + struct device *dev = &pdev->dev; 850 + 851 + init_data = device_get_match_data(dev); 852 + if (!init_data) 853 + return -EINVAL; 854 + 855 + if (init_data->inits) 856 + init_data->inits(dev->of_node); 857 + 858 + return 0; 859 + } 860 + 861 + static struct platform_driver clk_rk3506_driver = { 862 + .probe = clk_rk3506_probe, 863 + .driver = { 864 + .name = "clk-rk3506", 865 + .of_match_table = clk_rk3506_match_table, 866 + .suppress_bind_attrs = true, 867 + }, 868 + }; 869 + builtin_platform_driver_probe(clk_rk3506_driver, clk_rk3506_probe);
+4 -1
drivers/clk/rockchip/clk-rk3568.c
··· 1652 static void __init rk3568_clk_init(struct device_node *np) 1653 { 1654 struct rockchip_clk_provider *ctx; 1655 void __iomem *reg_base; 1656 1657 reg_base = of_iomap(np, 0); ··· 1661 return; 1662 } 1663 1664 - ctx = rockchip_clk_init(np, reg_base, CLK_NR_CLKS); 1665 if (IS_ERR(ctx)) { 1666 pr_err("%s: rockchip clk init failed\n", __func__); 1667 iounmap(reg_base);
··· 1652 static void __init rk3568_clk_init(struct device_node *np) 1653 { 1654 struct rockchip_clk_provider *ctx; 1655 + unsigned long clk_nr_clks; 1656 void __iomem *reg_base; 1657 1658 reg_base = of_iomap(np, 0); ··· 1660 return; 1661 } 1662 1663 + clk_nr_clks = rockchip_clk_find_max_clk_id(rk3568_clk_branches, 1664 + ARRAY_SIZE(rk3568_clk_branches)) + 1; 1665 + ctx = rockchip_clk_init(np, reg_base, clk_nr_clks); 1666 if (IS_ERR(ctx)) { 1667 pr_err("%s: rockchip clk init failed\n", __func__); 1668 iounmap(reg_base);
+1117
drivers/clk/rockchip/clk-rv1126b.c
···
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * Copyright (c) 2024 Rockchip Electronics Co., Ltd. 4 + * Author: Elaine Zhang <zhangqing@rock-chips.com> 5 + */ 6 + 7 + #include <linux/clk.h> 8 + #include <linux/clk-provider.h> 9 + #include <linux/module.h> 10 + #include <linux/of.h> 11 + #include <linux/of_address.h> 12 + #include <linux/of_device.h> 13 + #include <linux/platform_device.h> 14 + #include <linux/regmap.h> 15 + #include <linux/syscore_ops.h> 16 + #include <dt-bindings/clock/rockchip,rv1126b-cru.h> 17 + #include "clk.h" 18 + 19 + #define RV1126B_FRAC_MAX_PRATE 1200000000 20 + 21 + #define PVTPLL_SRC_SEL_PVTPLL (BIT(0) | BIT(16)) 22 + 23 + enum rv1126b_plls { 24 + gpll, cpll, aupll, dpll 25 + }; 26 + 27 + static struct rockchip_pll_rate_table rv1126b_pll_rates[] = { 28 + /* _mhz, _refdiv, _fbdiv, _postdiv1, _postdiv2, _dsmpd, _frac */ 29 + RK3036_PLL_RATE(1200000000, 1, 100, 2, 1, 1, 0), 30 + RK3036_PLL_RATE(1188000000, 1, 99, 2, 1, 1, 0), 31 + RK3036_PLL_RATE(1179648000, 1, 49, 1, 1, 0, 2550137), 32 + RK3036_PLL_RATE(1000000000, 3, 250, 2, 1, 1, 0), 33 + RK3036_PLL_RATE(993484800, 1, 41, 1, 1, 0, 6630355), 34 + RK3036_PLL_RATE(983040000, 1, 40, 1, 1, 0, 16106127), 35 + RK3036_PLL_RATE(903168000, 1, 75, 2, 1, 0, 4429185), 36 + { /* sentinel */ }, 37 + }; 38 + 39 + #define RV1126B_DIV_ACLK_CORE_MASK 0x1f 40 + #define RV1126B_DIV_ACLK_CORE_SHIFT 0 41 + #define RV1126B_DIV_PCLK_CORE_MASK 0x1f 42 + #define RV1126B_DIV_PCLK_CORE_SHIFT 8 43 + #define RV1126B_CORE_SEL_MASK 0x1 44 + #define RV1126B_CORE_SEL_SHIFT 1 45 + 46 + #define RV1126B_CLKSEL0(_aclk_core) \ 47 + { \ 48 + .reg = RV1126B_CORECLKSEL_CON(2), \ 49 + .val = HIWORD_UPDATE(_aclk_core - 1, RV1126B_DIV_ACLK_CORE_MASK, \ 50 + RV1126B_DIV_ACLK_CORE_SHIFT), \ 51 + } 52 + 53 + #define RV1126B_CLKSEL1(_pclk_dbg) \ 54 + { \ 55 + .reg = RV1126B_CORECLKSEL_CON(2), \ 56 + .val = HIWORD_UPDATE(_pclk_dbg - 1, RV1126B_DIV_PCLK_CORE_MASK, \ 57 + RV1126B_DIV_PCLK_CORE_SHIFT), \ 58 + } 59 + 60 + #define RV1126B_CPUCLK_RATE(_prate, _aclk_core, _pclk_dbg) \ 61 + { \ 62 + .prate = _prate, \ 63 + .divs = { \ 64 + RV1126B_CLKSEL0(_aclk_core), \ 65 + RV1126B_CLKSEL1(_pclk_dbg), \ 66 + }, \ 67 + } 68 + 69 + static struct rockchip_cpuclk_rate_table rv1126b_cpuclk_rates[] __initdata = { 70 + RV1126B_CPUCLK_RATE(1608000000, 4, 10), 71 + RV1126B_CPUCLK_RATE(1512000000, 4, 10), 72 + RV1126B_CPUCLK_RATE(1416000000, 4, 10), 73 + RV1126B_CPUCLK_RATE(1296000000, 3, 10), 74 + RV1126B_CPUCLK_RATE(1200000000, 3, 10), 75 + RV1126B_CPUCLK_RATE(1188000000, 3, 8), 76 + RV1126B_CPUCLK_RATE(1104000000, 2, 8), 77 + RV1126B_CPUCLK_RATE(1008000000, 2, 8), 78 + RV1126B_CPUCLK_RATE(816000000, 2, 6), 79 + RV1126B_CPUCLK_RATE(600000000, 2, 4), 80 + RV1126B_CPUCLK_RATE(594000000, 2, 4), 81 + RV1126B_CPUCLK_RATE(408000000, 1, 3), 82 + RV1126B_CPUCLK_RATE(396000000, 1, 3), 83 + }; 84 + 85 + PNAME(mux_pll_p) = { "xin24m" }; 86 + PNAME(mux_gpll_cpll_p) = { "gpll", "cpll" }; 87 + PNAME(mux_gpll_aupll_p) = { "gpll", "aupll" }; 88 + PNAME(mux_gpll_aupll_cpll_p) = { "gpll", "aupll", "cpll" }; 89 + PNAME(mux_gpll_cpll_24m_p) = { "gpll", "cpll", "xin24m" }; 90 + PNAME(mux_cpll_24m_p) = { "cpll", "xin24m" }; 91 + PNAME(mux_24m_gpll_aupll_cpll_p) = { "xin24m", "gpll", "aupll", "cpll" }; 92 + PNAME(mux_24m_gpll_cpll_p) = { "xin24m", "gpll", "cpll" }; 93 + PNAME(mux_24m_gpll_aupll_p) = { "xin24m", "gpll", "aupll" }; 94 + PNAME(mux_sclk_uart_src_p) = { "xin24m", "clk_cm_frac0", "clk_cm_frac1", 95 + "clk_cm_frac2", "clk_uart_frac0", "clk_uart_frac1" }; 96 + PNAME(mclk_sai0_src_p) = { "xin24m", "clk_cm_frac0", "clk_cm_frac1", 97 + "clk_cm_frac2", "clk_audio_frac0", "clk_audio_frac1", 98 + "clk_audio_int0", "clk_audio_int1", 99 + "mclk_sai0_from_io" }; 100 + PNAME(mclk_sai1_src_p) = { "xin24m", "clk_cm_frac0", "clk_cm_frac1", 101 + "clk_cm_frac2", "clk_audio_frac0", "clk_audio_frac1", 102 + "clk_audio_int0", "clk_audio_int1", 103 + "mclk_sai1_from_io" }; 104 + PNAME(mclk_sai2_src_p) = { "xin24m", "clk_cm_frac0", "clk_cm_frac1", 105 + "clk_cm_frac2", "clk_audio_frac0", "clk_audio_frac1", 106 + "clk_audio_int0", "clk_audio_int1", 107 + "mclk_sai2_from_io" }; 108 + PNAME(mux_sai_src_p) = { "xin24m", "clk_cm_frac0", "clk_cm_frac1", 109 + "clk_cm_frac2", "clk_audio_frac0", "clk_audio_frac1", 110 + "clk_audio_int0", "clk_audio_int1", "mclk_sai0_from_io", 111 + "mclk_sai1_from_io", "mclk_sai2_from_io"}; 112 + PNAME(mux_100m_24m_p) = { "clk_cpll_div10", "xin24m" }; 113 + PNAME(mux_200m_24m_p) = { "clk_gpll_div6", "xin24m" }; 114 + PNAME(mux_500m_400m_200m_p) = { "clk_cpll_div2", "clk_gpll_div3", "clk_gpll_div6" }; 115 + PNAME(mux_300m_200m_p) = { "clk_gpll_div4", "clk_gpll_div6" }; 116 + PNAME(mux_500m_400m_300m_p) = { "clk_cpll_div2", "clk_gpll_div3", "clk_gpll_div4" }; 117 + PNAME(mux_333m_200m_p) = { "clk_cpll_div3", "clk_gpll_div6" }; 118 + PNAME(mux_600m_400m_200m_p) = { "clk_gpll_div2", "clk_gpll_div3", "clk_gpll_div6" }; 119 + PNAME(mux_400m_300m_200m_p) = { "clk_gpll_div3", "clk_gpll_div4", "clk_gpll_div6" }; 120 + PNAME(mux_200m_100m_p) = { "clk_gpll_div6", "clk_cpll_div10" }; 121 + PNAME(mux_200m_100m_50m_24m_p) = { "clk_gpll_div6", "clk_cpll_div10", "clk_cpll_div20", 122 + "xin24m" }; 123 + PNAME(mux_600m_24m_p) = { "clk_gpll_div2", "xin24m" }; 124 + PNAME(mux_armclk_p) = { "clk_core_pll", "clk_core_pvtpll" }; 125 + PNAME(aclk_npu_root_p) = { "clk_npu_pll", "clk_npu_pvtpll" }; 126 + PNAME(clk_saradc0_p) = { "clk_saradc0_src", "clk_saradc0_rcosc_io" }; 127 + PNAME(clk_core_vepu_p) = { "clk_vepu_pll", "clk_vepu_pvtpll" }; 128 + PNAME(clk_core_fec_p) = { "clk_core_fec_src", "clk_vcp_pvtpll" }; 129 + PNAME(clk_core_aisp_p) = { "clk_aisp_pll", "clk_vcp_pvtpll" }; 130 + PNAME(clk_core_isp_root_p) = { "clk_isp_pll", "clk_isp_pvtpll" }; 131 + PNAME(clk_gmac_ptp_ref_p) = { "clk_gmac_ptp_ref_src", "clk_gmac_ptp_from_io" }; 132 + PNAME(clk_saradc1_p) = { "clk_saradc1_src", "clk_saradc1_rcosc_io" }; 133 + PNAME(clk_saradc2_p) = { "clk_saradc2_src", "clk_saradc2_rcosc_io" }; 134 + PNAME(clk_rcosc_src_p) = { "xin24m", "clk_rcosc", "clk_rcosc_div2", 135 + "clk_rcosc_div3", "clk_rcosc_div4" }; 136 + PNAME(busclk_pmu_mux_p) = { "clk_cpll_div10", "clk_rcosc_src" }; 137 + PNAME(clk_xin_rc_div_p) = { "xin24m", "clk_rcosc_src" }; 138 + PNAME(clk_32k_p) = { "clk_xin_rc_div", "clk_32k_rtc", "clk_32k_io" }; 139 + PNAME(mux_24m_32k_p) = { "xin24m", "clk_32k" }; 140 + PNAME(mux_24m_rcosc_buspmu_p) = { "xin24m", "clk_rcosc_src", "busclk_pmu_src" }; 141 + PNAME(mux_24m_rcosc_buspmu_32k_p) = { "xin24m", "clk_rcosc_src", "busclk_pmu_src", 142 + "clk_32k" }; 143 + PNAME(sclk_uart0_p) = { "sclk_uart0_src", "xin24m", "clk_rcosc_src" }; 144 + PNAME(clk_osc_rcosc_ctrl_p) = { "clk_rcosc_src", "clk_testout_out" }; 145 + PNAME(lrck_src_asrc_p) = { "mclk_asrc0", "mclk_asrc1", "mclk_asrc2", "mclk_asrc3", 146 + "fs_inter_from_sai0", "fs_inter_from_sai1", 147 + "fs_inter_from_sai2", "clkout_pdm"}; 148 + PNAME(clk_ref_pipephy_p) = { "clk_ref_pipephy_cpll_src", "xin24m" }; 149 + PNAME(clk_timer0_parents_p) = { "clk_timer_root", "mclk_sai0_from_io", 150 + "sclk_sai0_from_io" }; 151 + PNAME(clk_timer1_parents_p) = { "clk_timer_root", "mclk_sai1_from_io", 152 + "sclk_sai1_from_io" }; 153 + PNAME(clk_timer2_parents_p) = { "clk_timer_root", "mclk_sai2_from_io", 154 + "sclk_sai2_from_io" }; 155 + PNAME(clk_timer3_parents_p) = { "clk_timer_root", "mclk_asrc0", "mclk_asrc1" }; 156 + PNAME(clk_timer4_parents_p) = { "clk_timer_root", "mclk_asrc2", "mclk_asrc3" }; 157 + PNAME(clk_macphy_p) = { "xin24m", "clk_cpll_div20" }; 158 + PNAME(clk_cpll_div10_p) = { "gpll", "clk_aisp_pll_src" }; 159 + 160 + static struct rockchip_pll_clock rv1126b_pll_clks[] __initdata = { 161 + [gpll] = PLL(pll_rk3328, PLL_GPLL, "gpll", mux_pll_p, 162 + CLK_IS_CRITICAL, RV1126B_PLL_CON(8), 163 + RV1126B_MODE_CON, 2, 10, 0, rv1126b_pll_rates), 164 + [aupll] = PLL(pll_rk3328, PLL_AUPLL, "aupll", mux_pll_p, 165 + CLK_IS_CRITICAL, RV1126B_PLL_CON(0), 166 + RV1126B_MODE_CON, 0, 10, 0, rv1126b_pll_rates), 167 + [cpll] = PLL(pll_rk3328, PLL_CPLL, "cpll", mux_pll_p, 168 + CLK_IS_CRITICAL, RV1126B_PERIPLL_CON(0), 169 + RV1126B_MODE_CON, 4, 10, 0, rv1126b_pll_rates), 170 + [dpll] = PLL(pll_rk3328, 0, "dpll", mux_pll_p, 171 + CLK_IS_CRITICAL, RV1126B_SUBDDRPLL_CON(0), 172 + RV1126B_MODE_CON, 2, 10, 0, rv1126b_pll_rates), 173 + }; 174 + 175 + #define MFLAGS CLK_MUX_HIWORD_MASK 176 + #define DFLAGS CLK_DIVIDER_HIWORD_MASK 177 + #define GFLAGS (CLK_GATE_HIWORD_MASK | CLK_GATE_SET_TO_DISABLE) 178 + 179 + static struct rockchip_clk_branch rv1126b_rcdiv_pmu_fracmux __initdata = 180 + MUX(CLK_32K, "clk_32k", clk_32k_p, CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 181 + RV1126B_PMUCLKSEL_CON(2), 1, 2, MFLAGS); 182 + 183 + static struct rockchip_clk_branch rv1126b_clk_branches[] __initdata = { 184 + 185 + FACTOR(0, "clk_rcosc_div2", "clk_rcosc", 0, 1, 2), 186 + FACTOR(0, "clk_rcosc_div3", "clk_rcosc", 0, 1, 3), 187 + FACTOR(0, "clk_rcosc_div4", "clk_rcosc", 0, 1, 4), 188 + 189 + /* Clock Definition */ 190 + COMPOSITE_NODIV(CLK_AISP_PLL_SRC, "clk_aisp_pll_src", mux_gpll_aupll_cpll_p, 0, 191 + RV1126B_CLKSEL_CON(62), 4, 2, MFLAGS, 192 + RV1126B_CLKGATE_CON(5), 4, GFLAGS), 193 + DIV(CLK_AISP_PLL, "clk_aisp_pll", "clk_aisp_pll_src", 0, 194 + RV1126B_CLKSEL_CON(62), 0, 3, DFLAGS), 195 + 196 + COMPOSITE(CLK_CPLL_DIV10, "clk_cpll_div10", clk_cpll_div10_p, 0, 197 + RV1126B_CLKSEL_CON(1), 15, 1, MFLAGS, 5, 5, DFLAGS, 198 + RV1126B_CLKGATE_CON(0), 1, GFLAGS), 199 + COMPOSITE_NOMUX(CLK_CPLL_DIV20, "clk_cpll_div20", "cpll", 0, 200 + RV1126B_CLKSEL_CON(1), 0, 5, DFLAGS, 201 + RV1126B_CLKGATE_CON(0), 0, GFLAGS), 202 + COMPOSITE_NOMUX(CLK_CPLL_DIV8, "clk_cpll_div8", "cpll", 0, 203 + RV1126B_CLKSEL_CON(1), 10, 5, DFLAGS, 204 + RV1126B_CLKGATE_CON(0), 2, GFLAGS), 205 + COMPOSITE_NOMUX(CLK_GPLL_DIV8, "clk_gpll_div8", "gpll", 0, 206 + RV1126B_CLKSEL_CON(2), 0, 5, DFLAGS, 207 + RV1126B_CLKGATE_CON(0), 3, GFLAGS), 208 + COMPOSITE_NOMUX(CLK_GPLL_DIV6, "clk_gpll_div6", "gpll", 0, 209 + RV1126B_CLKSEL_CON(2), 5, 5, DFLAGS, 210 + RV1126B_CLKGATE_CON(0), 4, GFLAGS), 211 + COMPOSITE_NOMUX(CLK_GPLL_DIV4, "clk_gpll_div4", "gpll", 0, 212 + RV1126B_CLKSEL_CON(2), 10, 5, DFLAGS, 213 + RV1126B_CLKGATE_CON(0), 5, GFLAGS), 214 + COMPOSITE_NOMUX(CLK_CPLL_DIV3, "clk_cpll_div3", "cpll", 0, 215 + RV1126B_CLKSEL_CON(3), 0, 5, DFLAGS, 216 + RV1126B_CLKGATE_CON(0), 6, GFLAGS), 217 + COMPOSITE_NOMUX(CLK_GPLL_DIV3, "clk_gpll_div3", "gpll", 0, 218 + RV1126B_CLKSEL_CON(3), 5, 5, DFLAGS, 219 + RV1126B_CLKGATE_CON(0), 7, GFLAGS), 220 + COMPOSITE_NOMUX(CLK_CPLL_DIV2, "clk_cpll_div2", "cpll", 0, 221 + RV1126B_CLKSEL_CON(3), 10, 5, DFLAGS, 222 + RV1126B_CLKGATE_CON(0), 8, GFLAGS), 223 + COMPOSITE_NOMUX(CLK_GPLL_DIV2, "clk_gpll_div2", "gpll", 0, 224 + RV1126B_CLKSEL_CON(4), 0, 5, DFLAGS, 225 + RV1126B_CLKGATE_CON(0), 9, GFLAGS), 226 + MUX(CLK_CM_FRAC0_SRC, "clk_cm_frac0_src", mux_24m_gpll_aupll_cpll_p, 0, 227 + RV1126B_CLKSEL_CON(10), 0, 2, MFLAGS), 228 + COMPOSITE_FRAC(CLK_CM_FRAC0, "clk_cm_frac0", "clk_cm_frac0_src", 0, 229 + RV1126B_CLKSEL_CON(25), 0, 230 + RV1126B_CLKGATE_CON(1), 0, GFLAGS), 231 + MUX(CLK_CM_FRAC1_SRC, "clk_cm_frac1_src", mux_24m_gpll_aupll_cpll_p, 0, 232 + RV1126B_CLKSEL_CON(10), 2, 2, MFLAGS), 233 + COMPOSITE_FRAC(CLK_CM_FRAC1, "clk_cm_frac1", "clk_cm_frac1_src", 0, 234 + RV1126B_CLKSEL_CON(26), 0, 235 + RV1126B_CLKGATE_CON(1), 1, GFLAGS), 236 + MUX(CLK_CM_FRAC2_SRC, "clk_cm_frac2_src", mux_24m_gpll_aupll_cpll_p, 0, 237 + RV1126B_CLKSEL_CON(10), 4, 2, MFLAGS), 238 + COMPOSITE_FRAC(CLK_CM_FRAC2, "clk_cm_frac2", "clk_cm_frac2_src", 0, 239 + RV1126B_CLKSEL_CON(27), 0, 240 + RV1126B_CLKGATE_CON(1), 2, GFLAGS), 241 + MUX(CLK_UART_FRAC0_SRC, "clk_uart_frac0_src", mux_24m_gpll_cpll_p, 0, 242 + RV1126B_CLKSEL_CON(10), 6, 2, MFLAGS), 243 + COMPOSITE_FRAC(CLK_UART_FRAC0, "clk_uart_frac0", "clk_uart_frac0_src", 0, 244 + RV1126B_CLKSEL_CON(28), 0, 245 + RV1126B_CLKGATE_CON(1), 3, GFLAGS), 246 + MUX(CLK_UART_FRAC1_SRC, "clk_uart_frac1_src", mux_24m_gpll_cpll_p, 0, 247 + RV1126B_CLKSEL_CON(10), 8, 2, MFLAGS), 248 + COMPOSITE_FRAC(CLK_UART_FRAC1, "clk_uart_frac1", "clk_uart_frac1_src", 0, 249 + RV1126B_CLKSEL_CON(29), 0, 250 + RV1126B_CLKGATE_CON(1), 4, GFLAGS), 251 + MUX(CLK_AUDIO_FRAC0_SRC, "clk_audio_frac0_src", mux_24m_gpll_aupll_p, 0, 252 + RV1126B_CLKSEL_CON(10), 10, 2, MFLAGS), 253 + COMPOSITE_FRAC(CLK_AUDIO_FRAC0, "clk_audio_frac0", "clk_audio_frac0_src", 0, 254 + RV1126B_CLKSEL_CON(30), 0, 255 + RV1126B_CLKGATE_CON(1), 5, GFLAGS), 256 + MUX(CLK_AUDIO_FRAC1_SRC, "clk_audio_frac1_src", mux_24m_gpll_aupll_p, 0, 257 + RV1126B_CLKSEL_CON(10), 12, 2, MFLAGS), 258 + COMPOSITE_FRAC(CLK_AUDIO_FRAC1, "clk_audio_frac1", "clk_audio_frac1_src", 0, 259 + RV1126B_CLKSEL_CON(31), 0, 260 + RV1126B_CLKGATE_CON(1), 6, GFLAGS), 261 + COMPOSITE(CLK_AUDIO_INT0, "clk_audio_int0", mux_24m_gpll_aupll_p, 0, 262 + RV1126B_CLKSEL_CON(11), 6, 2, MFLAGS, 0, 5, DFLAGS, 263 + RV1126B_CLKGATE_CON(1), 7, GFLAGS), 264 + COMPOSITE(CLK_AUDIO_INT1, "clk_audio_int1", mux_24m_gpll_aupll_p, 0, 265 + RV1126B_CLKSEL_CON(11), 14, 2, MFLAGS, 8, 5, DFLAGS, 266 + RV1126B_CLKGATE_CON(1), 8, GFLAGS), 267 + COMPOSITE(SCLK_UART0_SRC, "sclk_uart0_src", mux_sclk_uart_src_p, 0, 268 + RV1126B_CLKSEL_CON(12), 5, 3, MFLAGS, 0, 5, DFLAGS, 269 + RV1126B_CLKGATE_CON(1), 9, GFLAGS), 270 + COMPOSITE(SCLK_UART1, "sclk_uart1", mux_sclk_uart_src_p, 0, 271 + RV1126B_CLKSEL_CON(12), 13, 3, MFLAGS, 8, 5, DFLAGS, 272 + RV1126B_CLKGATE_CON(1), 10, GFLAGS), 273 + COMPOSITE(SCLK_UART2, "sclk_uart2", mux_sclk_uart_src_p, 0, 274 + RV1126B_CLKSEL_CON(13), 5, 3, MFLAGS, 0, 5, DFLAGS, 275 + RV1126B_CLKGATE_CON(1), 11, GFLAGS), 276 + COMPOSITE(SCLK_UART3, "sclk_uart3", mux_sclk_uart_src_p, 0, 277 + RV1126B_CLKSEL_CON(13), 13, 3, MFLAGS, 8, 5, DFLAGS, 278 + RV1126B_CLKGATE_CON(1), 12, GFLAGS), 279 + COMPOSITE(SCLK_UART4, "sclk_uart4", mux_sclk_uart_src_p, 0, 280 + RV1126B_CLKSEL_CON(14), 5, 3, MFLAGS, 0, 5, DFLAGS, 281 + RV1126B_CLKGATE_CON(1), 13, GFLAGS), 282 + COMPOSITE(SCLK_UART5, "sclk_uart5", mux_sclk_uart_src_p, 0, 283 + RV1126B_CLKSEL_CON(14), 13, 3, MFLAGS, 8, 5, DFLAGS, 284 + RV1126B_CLKGATE_CON(1), 14, GFLAGS), 285 + COMPOSITE(SCLK_UART6, "sclk_uart6", mux_sclk_uart_src_p, 0, 286 + RV1126B_CLKSEL_CON(15), 5, 3, MFLAGS, 0, 5, DFLAGS, 287 + RV1126B_CLKGATE_CON(2), 0, GFLAGS), 288 + COMPOSITE(SCLK_UART7, "sclk_uart7", mux_sclk_uart_src_p, 0, 289 + RV1126B_CLKSEL_CON(15), 13, 3, MFLAGS, 8, 5, DFLAGS, 290 + RV1126B_CLKGATE_CON(2), 1, GFLAGS), 291 + COMPOSITE(MCLK_SAI0, "mclk_sai0", mclk_sai0_src_p, 0, 292 + RV1126B_CLKSEL_CON(16), 8, 4, MFLAGS, 0, 8, DFLAGS, 293 + RV1126B_CLKGATE_CON(2), 2, GFLAGS), 294 + COMPOSITE(MCLK_SAI1, "mclk_sai1", mclk_sai1_src_p, 0, 295 + RV1126B_CLKSEL_CON(17), 8, 4, MFLAGS, 0, 8, DFLAGS, 296 + RV1126B_CLKGATE_CON(2), 3, GFLAGS), 297 + COMPOSITE(MCLK_SAI2, "mclk_sai2", mclk_sai2_src_p, 0, 298 + RV1126B_CLKSEL_CON(18), 8, 4, MFLAGS, 0, 8, DFLAGS, 299 + RV1126B_CLKGATE_CON(2), 4, GFLAGS), 300 + COMPOSITE(MCLK_PDM, "mclk_pdm", mux_sai_src_p, 0, 301 + RV1126B_CLKSEL_CON(19), 6, 4, MFLAGS, 0, 5, DFLAGS, 302 + RV1126B_CLKGATE_CON(2), 5, GFLAGS), 303 + COMPOSITE_NOGATE(0, "clkout_pdm_src", mux_sai_src_p, 0, 304 + RV1126B_CLKSEL_CON(20), 8, 4, MFLAGS, 0, 8, DFLAGS), 305 + GATE(CLKOUT_PDM, "clkout_pdm", "clkout_pdm_src", 0, 306 + RV1126B_CLKGATE_CON(2), 6, GFLAGS), 307 + COMPOSITE_NODIV(MCLK_ASRC0, "mclk_asrc0", mux_sai_src_p, 0, 308 + RV1126B_CLKSEL_CON(16), 12, 4, MFLAGS, 309 + RV1126B_CLKGATE_CON(2), 7, GFLAGS), 310 + COMPOSITE_NODIV(MCLK_ASRC1, "mclk_asrc1", mux_sai_src_p, 0, 311 + RV1126B_CLKSEL_CON(17), 12, 4, MFLAGS, 312 + RV1126B_CLKGATE_CON(2), 8, GFLAGS), 313 + COMPOSITE_NODIV(MCLK_ASRC2, "mclk_asrc2", mux_sai_src_p, 0, 314 + RV1126B_CLKSEL_CON(18), 12, 4, MFLAGS, 315 + RV1126B_CLKGATE_CON(2), 9, GFLAGS), 316 + COMPOSITE_NODIV(MCLK_ASRC3, "mclk_asrc3", mux_sai_src_p, 0, 317 + RV1126B_CLKSEL_CON(19), 12, 4, MFLAGS, 318 + RV1126B_CLKGATE_CON(2), 10, GFLAGS), 319 + COMPOSITE(CLK_ASRC0, "clk_asrc0", mux_gpll_aupll_p, 0, 320 + RV1126B_CLKSEL_CON(21), 6, 1, MFLAGS, 0, 5, DFLAGS, 321 + RV1126B_CLKGATE_CON(2), 11, GFLAGS), 322 + COMPOSITE(CLK_ASRC1, "clk_asrc1", mux_gpll_aupll_p, 0, 323 + RV1126B_CLKSEL_CON(21), 14, 1, MFLAGS, 8, 5, DFLAGS, 324 + RV1126B_CLKGATE_CON(2), 12, GFLAGS), 325 + COMPOSITE_NOMUX(CLK_CORE_PLL, "clk_core_pll", "gpll", CLK_IS_CRITICAL, 326 + RV1126B_CLKSEL_CON(60), 0, 3, DFLAGS, 327 + RV1126B_CLKGATE_CON(5), 0, GFLAGS), 328 + COMPOSITE_NOMUX(CLK_NPU_PLL, "clk_npu_pll", "gpll", CLK_IS_CRITICAL, 329 + RV1126B_CLKSEL_CON(60), 6, 3, DFLAGS, 330 + RV1126B_CLKGATE_CON(5), 1, GFLAGS), 331 + COMPOSITE(CLK_VEPU_PLL, "clk_vepu_pll", mux_gpll_aupll_cpll_p, 0, 332 + RV1126B_CLKSEL_CON(61), 4, 2, MFLAGS, 0, 3, DFLAGS, 333 + RV1126B_CLKGATE_CON(5), 2, GFLAGS), 334 + COMPOSITE(CLK_ISP_PLL, "clk_isp_pll", mux_gpll_aupll_cpll_p, 0, 335 + RV1126B_CLKSEL_CON(61), 10, 2, MFLAGS, 6, 4, DFLAGS, 336 + RV1126B_CLKGATE_CON(5), 3, GFLAGS), 337 + COMPOSITE(CLK_SARADC0_SRC, "clk_saradc0_src", mux_200m_24m_p, 0, 338 + RV1126B_CLKSEL_CON(63), 12, 1, MFLAGS, 0, 3, DFLAGS, 339 + RV1126B_CLKGATE_CON(5), 6, GFLAGS), 340 + COMPOSITE(CLK_SARADC1_SRC, "clk_saradc1_src", mux_200m_24m_p, 0, 341 + RV1126B_CLKSEL_CON(63), 13, 1, MFLAGS, 4, 3, DFLAGS, 342 + RV1126B_CLKGATE_CON(5), 7, GFLAGS), 343 + COMPOSITE(CLK_SARADC2_SRC, "clk_saradc2_src", mux_200m_24m_p, 0, 344 + RV1126B_CLKSEL_CON(63), 14, 1, MFLAGS, 8, 3, DFLAGS, 345 + RV1126B_CLKGATE_CON(5), 8, GFLAGS), 346 + GATE(HCLK_RKNN, "hclk_rknn", "clk_gpll_div8", CLK_IS_CRITICAL, 347 + RV1126B_CLKGATE_CON(5), 10, GFLAGS), 348 + GATE(PCLK_NPU_ROOT, "pclk_npu_root", "clk_cpll_div10", CLK_IS_CRITICAL, 349 + RV1126B_CLKGATE_CON(5), 11, GFLAGS), 350 + COMPOSITE_NODIV(ACLK_VEPU_ROOT, "aclk_vepu_root", mux_500m_400m_200m_p, CLK_IS_CRITICAL, 351 + RV1126B_CLKSEL_CON(40), 0, 2, MFLAGS, 352 + RV1126B_CLKGATE_CON(5), 12, GFLAGS), 353 + GATE(HCLK_VEPU_ROOT, "hclk_vepu_root", "clk_gpll_div8", CLK_IS_CRITICAL, 354 + RV1126B_CLKGATE_CON(5), 13, GFLAGS), 355 + GATE(PCLK_VEPU_ROOT, "pclk_vepu_root", "clk_cpll_div10", 0, 356 + RV1126B_CLKGATE_CON(5), 14, GFLAGS), 357 + COMPOSITE(CLK_CORE_RGA_SRC, "clk_core_rga_src", mux_gpll_cpll_p, 0, 358 + RV1126B_CLKSEL_CON(40), 5, 1, MFLAGS, 2, 3, DFLAGS, 359 + RV1126B_CLKGATE_CON(6), 0, GFLAGS), 360 + COMPOSITE_NODIV(ACLK_GMAC_ROOT, "aclk_gmac_root", mux_300m_200m_p, 0, 361 + RV1126B_CLKSEL_CON(40), 6, 1, MFLAGS, 362 + RV1126B_CLKGATE_CON(6), 1, GFLAGS), 363 + COMPOSITE_NODIV(ACLK_VI_ROOT, "aclk_vi_root", mux_500m_400m_300m_p, CLK_IS_CRITICAL, 364 + RV1126B_CLKSEL_CON(40), 7, 2, MFLAGS, 365 + RV1126B_CLKGATE_CON(6), 2, GFLAGS), 366 + GATE(HCLK_VI_ROOT, "hclk_vi_root", "clk_gpll_div8", CLK_IS_CRITICAL, 367 + RV1126B_CLKGATE_CON(6), 3, GFLAGS), 368 + GATE(PCLK_VI_ROOT, "pclk_vi_root", "clk_cpll_div10", CLK_IS_CRITICAL, 369 + RV1126B_CLKGATE_CON(6), 4, GFLAGS), 370 + COMPOSITE_NODIV(DCLK_VICAP_ROOT, "dclk_vicap_root", mux_333m_200m_p, 0, 371 + RV1126B_CLKSEL_CON(42), 5, 1, MFLAGS, 372 + RV1126B_CLKGATE_CON(6), 5, GFLAGS), 373 + COMPOSITE(CLK_SYS_DSMC_ROOT, "clk_sys_dsmc_root", mux_24m_gpll_cpll_p, 0, 374 + RV1126B_CLKSEL_CON(40), 14, 2, MFLAGS, 9, 5, DFLAGS, 375 + RV1126B_CLKGATE_CON(6), 6, GFLAGS), 376 + COMPOSITE(ACLK_VDO_ROOT, "aclk_vdo_root", mux_gpll_cpll_p, CLK_IS_CRITICAL, 377 + RV1126B_CLKSEL_CON(42), 4, 1, MFLAGS, 0, 4, DFLAGS, 378 + RV1126B_CLKGATE_CON(6), 7, GFLAGS), 379 + COMPOSITE(ACLK_RKVDEC_ROOT, "aclk_rkvdec_root", mux_gpll_cpll_p, 0, 380 + RV1126B_CLKSEL_CON(42), 10, 1, MFLAGS, 6, 4, DFLAGS, 381 + RV1126B_CLKGATE_CON(6), 8, GFLAGS), 382 + GATE(HCLK_VDO_ROOT, "hclk_vdo_root", "clk_gpll_div8", CLK_IS_CRITICAL, 383 + RV1126B_CLKGATE_CON(6), 9, GFLAGS), 384 + GATE(PCLK_VDO_ROOT, "pclk_vdo_root", "clk_cpll_div10", CLK_IS_CRITICAL, 385 + RV1126B_CLKGATE_CON(6), 10, GFLAGS), 386 + COMPOSITE(DCLK_VOP, "dclk_vop", mux_gpll_cpll_p, 0, 387 + RV1126B_CLKSEL_CON(43), 8, 1, MFLAGS, 0, 8, DFLAGS, 388 + RV1126B_CLKGATE_CON(6), 12, GFLAGS), 389 + COMPOSITE(DCLK_OOC_SRC, "dclk_ooc_src", mux_gpll_cpll_p, 0, 390 + RV1126B_CLKSEL_CON(62), 7, 1, MFLAGS, 8, 8, DFLAGS, 391 + RV1126B_CLKGATE_CON(6), 13, GFLAGS), 392 + GATE(DCLK_DECOM_SRC, "dclk_decom_src", "clk_gpll_div3", 0, 393 + RV1126B_CLKGATE_CON(6), 14, GFLAGS), 394 + GATE(PCLK_DDR_ROOT, "pclk_ddr_root", "clk_cpll_div10", 0, 395 + RV1126B_CLKGATE_CON(7), 0, GFLAGS), 396 + COMPOSITE(ACLK_SYSMEM, "aclk_sysmem", mux_gpll_cpll_p, CLK_IS_CRITICAL, 397 + RV1126B_CLKSEL_CON(44), 3, 1, MFLAGS, 0, 3, DFLAGS, 398 + RV1126B_CLKGATE_CON(7), 1, GFLAGS), 399 + COMPOSITE_NODIV(ACLK_TOP_ROOT, "aclk_top_root", mux_600m_400m_200m_p, CLK_IS_CRITICAL, 400 + RV1126B_CLKSEL_CON(44), 6, 2, MFLAGS, 401 + RV1126B_CLKGATE_CON(7), 3, GFLAGS), 402 + COMPOSITE_NODIV(ACLK_BUS_ROOT, "aclk_bus_root", mux_400m_300m_200m_p, CLK_IS_CRITICAL, 403 + RV1126B_CLKSEL_CON(44), 8, 2, MFLAGS, 404 + RV1126B_CLKGATE_CON(7), 4, GFLAGS), 405 + COMPOSITE_NODIV(HCLK_BUS_ROOT, "hclk_bus_root", mux_200m_100m_p, CLK_IS_CRITICAL, 406 + RV1126B_CLKSEL_CON(44), 10, 1, MFLAGS, 407 + RV1126B_CLKGATE_CON(7), 5, GFLAGS), 408 + GATE(PCLK_BUS_ROOT, "pclk_bus_root", "clk_cpll_div10", CLK_IS_CRITICAL, 409 + RV1126B_CLKGATE_CON(7), 6, GFLAGS), 410 + COMPOSITE(CCLK_SDMMC0, "cclk_sdmmc0", mux_gpll_cpll_24m_p, 0, 411 + RV1126B_CLKSEL_CON(45), 8, 2, MFLAGS, 0, 8, DFLAGS, 412 + RV1126B_CLKGATE_CON(7), 7, GFLAGS), 413 + COMPOSITE(CCLK_SDMMC1, "cclk_sdmmc1", mux_gpll_cpll_24m_p, 0, 414 + RV1126B_CLKSEL_CON(46), 8, 2, MFLAGS, 0, 8, DFLAGS, 415 + RV1126B_CLKGATE_CON(7), 8, GFLAGS), 416 + COMPOSITE(CCLK_EMMC, "cclk_emmc", mux_gpll_cpll_24m_p, 0, 417 + RV1126B_CLKSEL_CON(47), 8, 2, MFLAGS, 0, 8, DFLAGS, 418 + RV1126B_CLKGATE_CON(7), 9, GFLAGS), 419 + COMPOSITE(SCLK_2X_FSPI0, "sclk_2x_fspi0", mux_gpll_cpll_24m_p, 0, 420 + RV1126B_CLKSEL_CON(48), 8, 2, MFLAGS, 0, 8, DFLAGS, 421 + RV1126B_CLKGATE_CON(7), 10, GFLAGS), 422 + COMPOSITE(CLK_GMAC_PTP_REF_SRC, "clk_gmac_ptp_ref_src", mux_cpll_24m_p, 0, 423 + RV1126B_CLKSEL_CON(45), 10, 1, MFLAGS, 11, 5, DFLAGS, 424 + RV1126B_CLKGATE_CON(7), 11, GFLAGS), 425 + GATE(CLK_GMAC_125M, "clk_gmac_125m", "clk_cpll_div8", 0, 426 + RV1126B_CLKGATE_CON(7), 12, GFLAGS), 427 + COMPOSITE_NODIV(CLK_TIMER_ROOT, "clk_timer_root", mux_100m_24m_p, 0, 428 + RV1126B_CLKSEL_CON(46), 11, 1, MFLAGS, 429 + RV1126B_CLKGATE_CON(7), 13, GFLAGS), 430 + COMPOSITE_NODIV(TCLK_WDT_NS_SRC, "tclk_wdt_ns_src", mux_100m_24m_p, 0, 431 + RV1126B_CLKSEL_CON(46), 12, 1, MFLAGS, 432 + RV1126B_CLKGATE_CON(8), 0, GFLAGS), 433 + COMPOSITE_NODIV(TCLK_WDT_S_SRC, "tclk_wdt_s_src", mux_100m_24m_p, 0, 434 + RV1126B_CLKSEL_CON(46), 13, 1, MFLAGS, 435 + RV1126B_CLKGATE_CON(8), 1, GFLAGS), 436 + COMPOSITE_NODIV(TCLK_WDT_HPMCU, "tclk_wdt_hpmcu", mux_100m_24m_p, 0, 437 + RV1126B_CLKSEL_CON(46), 14, 1, MFLAGS, 438 + RV1126B_CLKGATE_CON(8), 2, GFLAGS), 439 + COMPOSITE(CLK_CAN0, "clk_can0", mux_gpll_cpll_24m_p, 0, 440 + RV1126B_CLKSEL_CON(49), 6, 2, MFLAGS, 0, 5, DFLAGS, 441 + RV1126B_CLKGATE_CON(8), 4, GFLAGS), 442 + COMPOSITE(CLK_CAN1, "clk_can1", mux_gpll_cpll_24m_p, 0, 443 + RV1126B_CLKSEL_CON(49), 14, 2, MFLAGS, 8, 5, DFLAGS, 444 + RV1126B_CLKGATE_CON(8), 5, GFLAGS), 445 + COMPOSITE_NODIV(PCLK_PERI_ROOT, "pclk_peri_root", mux_100m_24m_p, CLK_IS_CRITICAL, 446 + RV1126B_CLKSEL_CON(47), 12, 1, MFLAGS, 447 + RV1126B_CLKGATE_CON(8), 6, GFLAGS), 448 + COMPOSITE_NODIV(ACLK_PERI_ROOT, "aclk_peri_root", mux_200m_24m_p, CLK_IS_CRITICAL, 449 + RV1126B_CLKSEL_CON(47), 13, 1, MFLAGS, 450 + RV1126B_CLKGATE_CON(8), 7, GFLAGS), 451 + COMPOSITE_NODIV(CLK_I2C_BUS_SRC, "clk_i2c_bus_src", mux_200m_24m_p, 0, 452 + RV1126B_CLKSEL_CON(50), 1, 1, MFLAGS, 453 + RV1126B_CLKGATE_CON(8), 9, GFLAGS), 454 + COMPOSITE_NODIV(CLK_SPI0, "clk_spi0", mux_200m_100m_50m_24m_p, 0, 455 + RV1126B_CLKSEL_CON(50), 2, 2, MFLAGS, 456 + RV1126B_CLKGATE_CON(8), 10, GFLAGS), 457 + COMPOSITE_NODIV(CLK_SPI1, "clk_spi1", mux_200m_100m_50m_24m_p, 0, 458 + RV1126B_CLKSEL_CON(50), 4, 2, MFLAGS, 459 + RV1126B_CLKGATE_CON(8), 11, GFLAGS), 460 + GATE(BUSCLK_PMU_SRC, "busclk_pmu_src", "clk_cpll_div10", CLK_IS_CRITICAL, 461 + RV1126B_CLKGATE_CON(8), 12, GFLAGS), 462 + COMPOSITE_NODIV(CLK_PWM0, "clk_pwm0", mux_100m_24m_p, 0, 463 + RV1126B_CLKSEL_CON(50), 8, 1, MFLAGS, 464 + RV1126B_CLKGATE_CON(9), 0, GFLAGS), 465 + COMPOSITE_NODIV(CLK_PWM2, "clk_pwm2", mux_100m_24m_p, 0, 466 + RV1126B_CLKSEL_CON(50), 10, 1, MFLAGS, 467 + RV1126B_CLKGATE_CON(9), 2, GFLAGS), 468 + COMPOSITE_NODIV(CLK_PWM3, "clk_pwm3", mux_100m_24m_p, 0, 469 + RV1126B_CLKSEL_CON(50), 11, 1, MFLAGS, 470 + RV1126B_CLKGATE_CON(9), 3, GFLAGS), 471 + COMPOSITE_NODIV(CLK_PKA_RKCE_SRC, "clk_pka_rkce_src", mux_300m_200m_p, CLK_IS_CRITICAL, 472 + RV1126B_CLKSEL_CON(50), 12, 1, MFLAGS, 473 + RV1126B_CLKGATE_CON(9), 4, GFLAGS), 474 + COMPOSITE_NODIV(ACLK_RKCE_SRC, "aclk_rkce_src", mux_200m_24m_p, CLK_IS_CRITICAL, 475 + RV1126B_CLKSEL_CON(50), 13, 1, MFLAGS, 476 + RV1126B_CLKGATE_CON(9), 5, GFLAGS), 477 + COMPOSITE_NODIV(ACLK_VCP_ROOT, "aclk_vcp_root", mux_500m_400m_200m_p, CLK_IS_CRITICAL, 478 + RV1126B_CLKSEL_CON(48), 12, 2, MFLAGS, 479 + RV1126B_CLKGATE_CON(9), 6, GFLAGS), 480 + GATE(HCLK_VCP_ROOT, "hclk_vcp_root", "clk_gpll_div8", CLK_IS_CRITICAL, 481 + RV1126B_CLKGATE_CON(9), 7, GFLAGS), 482 + GATE(PCLK_VCP_ROOT, "pclk_vcp_root", "clk_cpll_div10", CLK_IS_CRITICAL, 483 + RV1126B_CLKGATE_CON(9), 8, GFLAGS), 484 + COMPOSITE(CLK_CORE_FEC_SRC, "clk_core_fec_src", mux_gpll_cpll_p, 0, 485 + RV1126B_CLKSEL_CON(51), 3, 1, MFLAGS, 0, 3, DFLAGS, 486 + RV1126B_CLKGATE_CON(9), 9, GFLAGS), 487 + GATE(CLK_50M_GMAC_IOBUF_VI, "clk_50m_gmac_iobuf_vi", "clk_cpll_div20", 0, 488 + RV1126B_CLKGATE_CON(9), 11, GFLAGS), 489 + GATE(PCLK_TOP_ROOT, "pclk_top_root", "clk_cpll_div10", CLK_IS_CRITICAL, 490 + RV1126B_CLKGATE_CON(15), 0, GFLAGS), 491 + COMPOSITE(CLK_MIPI0_OUT2IO, "clk_mipi0_out2io", mux_600m_24m_p, 0, 492 + RV1126B_CLKSEL_CON(67), 11, 1, MFLAGS, 0, 5, DFLAGS, 493 + RV1126B_CLKGATE_CON(15), 3, GFLAGS), 494 + COMPOSITE(CLK_MIPI1_OUT2IO, "clk_mipi1_out2io", mux_600m_24m_p, 0, 495 + RV1126B_CLKSEL_CON(67), 12, 1, MFLAGS, 6, 5, DFLAGS, 496 + RV1126B_CLKGATE_CON(15), 4, GFLAGS), 497 + COMPOSITE(CLK_MIPI2_OUT2IO, "clk_mipi2_out2io", mux_600m_24m_p, 0, 498 + RV1126B_CLKSEL_CON(68), 11, 1, MFLAGS, 0, 5, DFLAGS, 499 + RV1126B_CLKGATE_CON(15), 5, GFLAGS), 500 + COMPOSITE(CLK_MIPI3_OUT2IO, "clk_mipi3_out2io", mux_600m_24m_p, 0, 501 + RV1126B_CLKSEL_CON(68), 12, 1, MFLAGS, 6, 5, DFLAGS, 502 + RV1126B_CLKGATE_CON(15), 6, GFLAGS), 503 + COMPOSITE(CLK_CIF_OUT2IO, "clk_cif_out2io", mux_600m_24m_p, 0, 504 + RV1126B_CLKSEL_CON(69), 5, 1, MFLAGS, 0, 5, DFLAGS, 505 + RV1126B_CLKGATE_CON(15), 7, GFLAGS), 506 + COMPOSITE(CLK_MAC_OUT2IO, "clk_mac_out2io", mux_gpll_cpll_24m_p, 0, 507 + RV1126B_CLKSEL_CON(69), 6, 2, MFLAGS, 8, 7, DFLAGS, 508 + RV1126B_CLKGATE_CON(15), 8, GFLAGS), 509 + COMPOSITE_NOMUX(MCLK_SAI0_OUT2IO, "mclk_sai0_out2io", "mclk_sai0", CLK_SET_RATE_PARENT, 510 + RV1126B_CLKSEL_CON(70), 0, 4, DFLAGS, 511 + RV1126B_CLKGATE_CON(15), 9, GFLAGS), 512 + COMPOSITE_NOMUX(MCLK_SAI1_OUT2IO, "mclk_sai1_out2io", "mclk_sai1", CLK_SET_RATE_PARENT, 513 + RV1126B_CLKSEL_CON(70), 5, 4, DFLAGS, 514 + RV1126B_CLKGATE_CON(15), 10, GFLAGS), 515 + COMPOSITE_NOMUX(MCLK_SAI2_OUT2IO, "mclk_sai2_out2io", "mclk_sai2", CLK_SET_RATE_PARENT, 516 + RV1126B_CLKSEL_CON(70), 10, 4, DFLAGS, 517 + RV1126B_CLKGATE_CON(15), 11, GFLAGS), 518 + 519 + /* pd _npu */ 520 + MUX(ACLK_RKNN, "aclk_rknn", aclk_npu_root_p, CLK_SET_RATE_PARENT, 521 + RV1126B_NPUCLKSEL_CON(0), 1, 1, MFLAGS), 522 + 523 + /* pd_vepu */ 524 + GATE(PCLK_GPIO3, "pclk_gpio3", "pclk_vepu_root", 0, 525 + RV1126B_VEPUCLKGATE_CON(0), 7, GFLAGS), 526 + GATE(DBCLK_GPIO3, "dbclk_gpio3", "xin24m", 0, 527 + RV1126B_VEPUCLKGATE_CON(0), 8, GFLAGS), 528 + GATE(PCLK_IOC_VCCIO3, "pclk_ioc_vccio3", "pclk_vepu_root", CLK_IS_CRITICAL, 529 + RV1126B_VEPUCLKGATE_CON(0), 9, GFLAGS), 530 + GATE(PCLK_SARADC0, "pclk_saradc0", "pclk_vepu_root", 0, 531 + RV1126B_VEPUCLKGATE_CON(0), 10, GFLAGS), 532 + MUX(CLK_SARADC0, "clk_saradc0", clk_saradc0_p, CLK_SET_RATE_PARENT, 533 + RV1126B_VEPUCLKSEL_CON(0), 2, 1, MFLAGS), 534 + GATE(HCLK_SDMMC1, "hclk_sdmmc1", "hclk_vepu_root", 0, 535 + RV1126B_VEPUCLKGATE_CON(0), 12, GFLAGS), 536 + GATE(HCLK_VEPU, "hclk_vepu", "hclk_vepu_root", 0, 537 + RV1126B_VEPUCLKGATE_CON(1), 1, GFLAGS), 538 + GATE(ACLK_VEPU, "aclk_vepu", "aclk_vepu_root", 0, 539 + RV1126B_VEPUCLKGATE_CON(1), 2, GFLAGS), 540 + COMPOSITE_NODIV(CLK_CORE_VEPU, "clk_core_vepu", clk_core_vepu_p, CLK_SET_RATE_PARENT, 541 + RV1126B_VEPUCLKSEL_CON(0), 1, 1, MFLAGS, 542 + RV1126B_VEPUCLKGATE_CON(1), 3, GFLAGS), 543 + 544 + /* pd_vcp */ 545 + GATE(HCLK_FEC, "hclk_fec", "hclk_vcp_root", 0, 546 + RV1126B_VCPCLKGATE_CON(1), 0, GFLAGS), 547 + GATE(ACLK_FEC, "aclk_fec", "aclk_vcp_root", 0, 548 + RV1126B_VCPCLKGATE_CON(1), 1, GFLAGS), 549 + COMPOSITE_NODIV(CLK_CORE_FEC, "clk_core_fec", clk_core_fec_p, CLK_SET_RATE_PARENT, 550 + RV1126B_VCPCLKSEL_CON(0), 13, 1, MFLAGS, 551 + RV1126B_VCPCLKGATE_CON(1), 2, GFLAGS), 552 + GATE(HCLK_AVSP, "hclk_avsp", "hclk_vcp_root", 0, 553 + RV1126B_VCPCLKGATE_CON(1), 3, GFLAGS), 554 + GATE(ACLK_AVSP, "aclk_avsp", "aclk_vcp_root", 0, 555 + RV1126B_VCPCLKGATE_CON(1), 4, GFLAGS), 556 + GATE(HCLK_AISP, "hclk_aisp", "hclk_vcp_root", 0, 557 + RV1126B_VCPCLKGATE_CON(0), 11, GFLAGS), 558 + GATE(ACLK_AISP, "aclk_aisp", "aclk_vcp_root", 0, 559 + RV1126B_VCPCLKGATE_CON(0), 12, GFLAGS), 560 + COMPOSITE_NODIV(CLK_CORE_AISP, "clk_core_aisp", clk_core_aisp_p, CLK_SET_RATE_PARENT, 561 + RV1126B_VCPCLKSEL_CON(0), 15, 1, MFLAGS, 562 + RV1126B_VCPCLKGATE_CON(0), 13, GFLAGS), 563 + 564 + /* pd_vi */ 565 + MUX(CLK_CORE_ISP_ROOT, "clk_core_isp_root", clk_core_isp_root_p, CLK_SET_RATE_PARENT, 566 + RV1126B_VICLKSEL_CON(0), 1, 1, MFLAGS), 567 + GATE(PCLK_DSMC, "pclk_dsmc", "pclk_vi_root", 0, 568 + RV1126B_VICLKGATE_CON(0), 8, GFLAGS), 569 + GATE(ACLK_DSMC, "aclk_dsmc", "hclk_vi_root", 0, 570 + RV1126B_VICLKGATE_CON(0), 9, GFLAGS), 571 + GATE(HCLK_CAN0, "hclk_can0", "hclk_vi_root", 0, 572 + RV1126B_VICLKGATE_CON(0), 10, GFLAGS), 573 + GATE(HCLK_CAN1, "hclk_can1", "hclk_vi_root", 0, 574 + RV1126B_VICLKGATE_CON(0), 11, GFLAGS), 575 + GATE(PCLK_GPIO2, "pclk_gpio2", "pclk_vi_root", 0, 576 + RV1126B_VICLKGATE_CON(1), 0, GFLAGS), 577 + GATE(DBCLK_GPIO2, "dbclk_gpio2", "xin24m", 0, 578 + RV1126B_VICLKGATE_CON(1), 1, GFLAGS), 579 + GATE(PCLK_GPIO4, "pclk_gpio4", "pclk_vi_root", 0, 580 + RV1126B_VICLKGATE_CON(1), 2, GFLAGS), 581 + GATE(DBCLK_GPIO4, "dbclk_gpio4", "xin24m", 0, 582 + RV1126B_VICLKGATE_CON(1), 3, GFLAGS), 583 + GATE(PCLK_GPIO5, "pclk_gpio5", "pclk_vi_root", 0, 584 + RV1126B_VICLKGATE_CON(1), 4, GFLAGS), 585 + GATE(DBCLK_GPIO5, "dbclk_gpio5", "xin24m", 0, 586 + RV1126B_VICLKGATE_CON(1), 5, GFLAGS), 587 + GATE(PCLK_GPIO6, "pclk_gpio6", "pclk_vi_root", 0, 588 + RV1126B_VICLKGATE_CON(1), 6, GFLAGS), 589 + GATE(DBCLK_GPIO6, "dbclk_gpio6", "xin24m", 0, 590 + RV1126B_VICLKGATE_CON(1), 7, GFLAGS), 591 + GATE(PCLK_GPIO7, "pclk_gpio7", "pclk_vi_root", 0, 592 + RV1126B_VICLKGATE_CON(1), 8, GFLAGS), 593 + GATE(DBCLK_GPIO7, "dbclk_gpio7", "xin24m", 0, 594 + RV1126B_VICLKGATE_CON(1), 9, GFLAGS), 595 + GATE(PCLK_IOC_VCCIO2, "pclk_ioc_vccio2", "pclk_vi_root", CLK_IS_CRITICAL, 596 + RV1126B_VICLKGATE_CON(1), 10, GFLAGS), 597 + GATE(PCLK_IOC_VCCIO4, "pclk_ioc_vccio4", "pclk_vi_root", CLK_IS_CRITICAL, 598 + RV1126B_VICLKGATE_CON(1), 11, GFLAGS), 599 + GATE(PCLK_IOC_VCCIO5, "pclk_ioc_vccio5", "pclk_vi_root", CLK_IS_CRITICAL, 600 + RV1126B_VICLKGATE_CON(1), 12, GFLAGS), 601 + GATE(PCLK_IOC_VCCIO6, "pclk_ioc_vccio6", "pclk_vi_root", CLK_IS_CRITICAL, 602 + RV1126B_VICLKGATE_CON(1), 13, GFLAGS), 603 + GATE(PCLK_IOC_VCCIO7, "pclk_ioc_vccio7", "pclk_vi_root", CLK_IS_CRITICAL, 604 + RV1126B_VICLKGATE_CON(1), 14, GFLAGS), 605 + GATE(HCLK_ISP, "hclk_isp", "hclk_vi_root", 0, 606 + RV1126B_VICLKGATE_CON(2), 0, GFLAGS), 607 + GATE(ACLK_ISP, "aclk_isp", "aclk_vi_root", 0, 608 + RV1126B_VICLKGATE_CON(2), 1, GFLAGS), 609 + GATE(CLK_CORE_ISP, "clk_core_isp", "clk_core_isp_root", 0, 610 + RV1126B_VICLKGATE_CON(2), 2, GFLAGS), 611 + GATE(HCLK_VICAP, "hclk_vicap", "hclk_vi_root", 0, 612 + RV1126B_VICLKGATE_CON(2), 3, GFLAGS), 613 + GATE(ACLK_VICAP, "aclk_vicap", "aclk_vi_root", 0, 614 + RV1126B_VICLKGATE_CON(2), 4, GFLAGS), 615 + GATE(DCLK_VICAP, "dclk_vicap", "dclk_vicap_root", 0, 616 + RV1126B_VICLKGATE_CON(2), 5, GFLAGS), 617 + GATE(ISP0CLK_VICAP, "isp0clk_vicap", "clk_core_isp_root", 0, 618 + RV1126B_VICLKGATE_CON(2), 6, GFLAGS), 619 + GATE(HCLK_VPSS, "hclk_vpss", "hclk_vi_root", 0, 620 + RV1126B_VICLKGATE_CON(2), 7, GFLAGS), 621 + GATE(ACLK_VPSS, "aclk_vpss", "aclk_vi_root", 0, 622 + RV1126B_VICLKGATE_CON(2), 8, GFLAGS), 623 + GATE(CLK_CORE_VPSS, "clk_core_vpss", "clk_core_isp_root", 0, 624 + RV1126B_VICLKGATE_CON(2), 9, GFLAGS), 625 + GATE(HCLK_VPSL, "hclk_vpsl", "hclk_vi_root", 0, 626 + RV1126B_VICLKGATE_CON(2), 10, GFLAGS), 627 + GATE(ACLK_VPSL, "aclk_vpsl", "aclk_vi_root", 0, 628 + RV1126B_VICLKGATE_CON(2), 11, GFLAGS), 629 + GATE(CLK_CORE_VPSL, "clk_core_vpsl", "clk_core_isp_root", 0, 630 + RV1126B_VICLKGATE_CON(2), 12, GFLAGS), 631 + GATE(PCLK_CSI2HOST0, "pclk_csi2host0", "pclk_vi_root", 0, 632 + RV1126B_VICLKGATE_CON(3), 0, GFLAGS), 633 + GATE(DCLK_CSI2HOST0, "dclk_csi2host0", "dclk_vicap_root", 0, 634 + RV1126B_VICLKGATE_CON(3), 1, GFLAGS), 635 + GATE(PCLK_CSI2HOST1, "pclk_csi2host1", "pclk_vi_root", 0, 636 + RV1126B_VICLKGATE_CON(3), 2, GFLAGS), 637 + GATE(DCLK_CSI2HOST1, "dclk_csi2host1", "dclk_vicap_root", 0, 638 + RV1126B_VICLKGATE_CON(3), 3, GFLAGS), 639 + GATE(PCLK_CSI2HOST2, "pclk_csi2host2", "pclk_vi_root", 0, 640 + RV1126B_VICLKGATE_CON(3), 4, GFLAGS), 641 + GATE(DCLK_CSI2HOST2, "dclk_csi2host2", "dclk_vicap_root", 0, 642 + RV1126B_VICLKGATE_CON(3), 5, GFLAGS), 643 + GATE(PCLK_CSI2HOST3, "pclk_csi2host3", "pclk_vi_root", 0, 644 + RV1126B_VICLKGATE_CON(3), 6, GFLAGS), 645 + GATE(DCLK_CSI2HOST3, "dclk_csi2host3", "dclk_vicap_root", 0, 646 + RV1126B_VICLKGATE_CON(3), 7, GFLAGS), 647 + GATE(HCLK_SDMMC0, "hclk_sdmmc0", "hclk_vi_root", 0, 648 + RV1126B_VICLKGATE_CON(3), 8, GFLAGS), 649 + GATE(ACLK_GMAC, "aclk_gmac", "aclk_gmac_root", 0, 650 + RV1126B_VICLKGATE_CON(3), 9, GFLAGS), 651 + GATE(PCLK_GMAC, "pclk_gmac", "pclk_vi_root", 0, 652 + RV1126B_VICLKGATE_CON(3), 10, GFLAGS), 653 + MUX(CLK_GMAC_PTP_REF, "clk_gmac_ptp_ref", clk_gmac_ptp_ref_p, CLK_SET_RATE_PARENT, 654 + RV1126B_VICLKSEL_CON(0), 14, 1, MFLAGS), 655 + GATE(PCLK_CSIPHY0, "pclk_csiphy0", "pclk_vi_root", 0, 656 + RV1126B_VICLKGATE_CON(3), 11, GFLAGS), 657 + GATE(PCLK_CSIPHY1, "pclk_csiphy1", "pclk_vi_root", 0, 658 + RV1126B_VICLKGATE_CON(3), 12, GFLAGS), 659 + GATE(PCLK_MACPHY, "pclk_macphy", "pclk_vi_root", 0, 660 + RV1126B_VICLKGATE_CON(3), 13, GFLAGS), 661 + GATE(PCLK_SARADC1, "pclk_saradc1", "pclk_vi_root", 0, 662 + RV1126B_VICLKGATE_CON(4), 0, GFLAGS), 663 + MUX(CLK_SARADC1, "clk_saradc1", clk_saradc1_p, CLK_SET_RATE_PARENT, 664 + RV1126B_VICLKSEL_CON(0), 2, 1, MFLAGS), 665 + GATE(PCLK_SARADC2, "pclk_saradc2", "pclk_vi_root", 0, 666 + RV1126B_VICLKGATE_CON(4), 2, GFLAGS), 667 + MUX(CLK_SARADC2, "clk_saradc2", clk_saradc2_p, CLK_SET_RATE_PARENT, 668 + RV1126B_VICLKSEL_CON(0), 3, 1, MFLAGS), 669 + COMPOSITE_NODIV(CLK_MACPHY, "clk_macphy", clk_macphy_p, 0, 670 + RV1126B_VICLKSEL_CON(1), 1, 1, MFLAGS, 671 + RV1126B_VICLKGATE_CON(0), 12, GFLAGS), 672 + 673 + /* pd_vdo */ 674 + GATE(ACLK_RKVDEC, "aclk_rkvdec", "aclk_rkvdec_root", 0, 675 + RV1126B_VDOCLKGATE_CON(0), 7, GFLAGS), 676 + GATE(HCLK_RKVDEC, "hclk_rkvdec", "hclk_vdo_root", 0, 677 + RV1126B_VDOCLKGATE_CON(0), 8, GFLAGS), 678 + GATE(CLK_HEVC_CA_RKVDEC, "clk_hevc_ca_rkvdec", "aclk_rkvdec_root", 0, 679 + RV1126B_VDOCLKGATE_CON(0), 9, GFLAGS), 680 + GATE(ACLK_VOP, "aclk_vop", "aclk_vdo_root", 0, 681 + RV1126B_VDOCLKGATE_CON(0), 10, GFLAGS), 682 + GATE(HCLK_VOP, "hclk_vop", "hclk_vdo_root", 0, 683 + RV1126B_VDOCLKGATE_CON(0), 11, GFLAGS), 684 + GATE(ACLK_OOC, "aclk_ooc", "aclk_vdo_root", 0, 685 + RV1126B_VDOCLKGATE_CON(0), 13, GFLAGS), 686 + GATE(HCLK_OOC, "hclk_ooc", "hclk_vdo_root", 0, 687 + RV1126B_VDOCLKGATE_CON(0), 14, GFLAGS), 688 + GATE(HCLK_RKJPEG, "hclk_rkjpeg", "hclk_vdo_root", 0, 689 + RV1126B_VDOCLKGATE_CON(1), 3, GFLAGS), 690 + GATE(ACLK_RKJPEG, "aclk_rkjpeg", "aclk_vdo_root", 0, 691 + RV1126B_VDOCLKGATE_CON(1), 4, GFLAGS), 692 + GATE(ACLK_RKMMU_DECOM, "aclk_rkmmu_decom", "aclk_vdo_root", 0, 693 + RV1126B_VDOCLKGATE_CON(1), 5, GFLAGS), 694 + GATE(HCLK_RKMMU_DECOM, "hclk_rkmmu_decom", "hclk_vdo_root", 0, 695 + RV1126B_VDOCLKGATE_CON(1), 6, GFLAGS), 696 + GATE(DCLK_DECOM, "dclk_decom", "dclk_decom_src", 0, 697 + RV1126B_VDOCLKGATE_CON(1), 8, GFLAGS), 698 + GATE(ACLK_DECOM, "aclk_decom", "aclk_vdo_root", 0, 699 + RV1126B_VDOCLKGATE_CON(1), 9, GFLAGS), 700 + GATE(PCLK_DECOM, "pclk_decom", "pclk_vdo_root", 0, 701 + RV1126B_VDOCLKGATE_CON(1), 10, GFLAGS), 702 + GATE(PCLK_MIPI_DSI, "pclk_mipi_dsi", "pclk_vdo_root", 0, 703 + RV1126B_VDOCLKGATE_CON(1), 12, GFLAGS), 704 + GATE(PCLK_DSIPHY, "pclk_dsiphy", "pclk_vdo_root", 0, 705 + RV1126B_VDOCLKGATE_CON(1), 13, GFLAGS), 706 + 707 + /* pd_ddr */ 708 + GATE(PCLK_DDRC, "pclk_ddrc", "pclk_ddr_root", CLK_IS_CRITICAL, 709 + RV1126B_DDRCLKGATE_CON(0), 2, GFLAGS), 710 + GATE(PCLK_DDRMON, "pclk_ddrmon", "pclk_ddr_root", CLK_IS_CRITICAL, 711 + RV1126B_DDRCLKGATE_CON(0), 3, GFLAGS), 712 + GATE(CLK_TIMER_DDRMON, "clk_timer_ddrmon", "xin24m", 0, 713 + RV1126B_DDRCLKGATE_CON(0), 4, GFLAGS), 714 + GATE(PCLK_DFICTRL, "pclk_dfictrl", "pclk_ddr_root", CLK_IS_CRITICAL, 715 + RV1126B_DDRCLKGATE_CON(0), 5, GFLAGS), 716 + GATE(PCLK_DDRPHY, "pclk_ddrphy", "pclk_ddr_root", CLK_IS_CRITICAL, 717 + RV1126B_DDRCLKGATE_CON(0), 8, GFLAGS), 718 + GATE(PCLK_DMA2DDR, "pclk_dma2ddr", "pclk_ddr_root", CLK_IS_CRITICAL, 719 + RV1126B_DDRCLKGATE_CON(0), 9, GFLAGS), 720 + 721 + /* pd_pmu*/ 722 + COMPOSITE_NODIV(CLK_RCOSC_SRC, "clk_rcosc_src", clk_rcosc_src_p, 0, 723 + RV1126B_PMUCLKSEL_CON(1), 0, 3, MFLAGS, 724 + RV1126B_PMUCLKGATE_CON(0), 0, GFLAGS), 725 + COMPOSITE_NOGATE(BUSCLK_PMU_MUX, "busclk_pmu_mux", busclk_pmu_mux_p, 0, 726 + RV1126B_PMUCLKSEL_CON(1), 3, 1, MFLAGS, 4, 2, DFLAGS), 727 + GATE(BUSCLK_PMU_ROOT, "busclk_pmu_root", "busclk_pmu_mux", 0, 728 + RV1126B_PMUCLKGATE_CON(0), 1, GFLAGS), 729 + GATE(BUSCLK_PMU1_ROOT, "busclk_pmu1_root", "busclk_pmu_mux", CLK_IS_CRITICAL, 730 + RV1126B_PMUCLKGATE_CON(3), 11, GFLAGS), 731 + GATE(PCLK_PMU, "pclk_pmu", "busclk_pmu_root", CLK_IS_CRITICAL, 732 + RV1126B_PMUCLKGATE_CON(0), 6, GFLAGS), 733 + MUX(0, "xin_rc_src", clk_xin_rc_div_p, 0, 734 + RV1126B_PMUCLKSEL_CON(2), 0, 1, MFLAGS), 735 + COMPOSITE_FRACMUX_NOGATE(CLK_XIN_RC_DIV, "clk_xin_rc_div", "xin_rc_src", CLK_SET_RATE_PARENT, 736 + RV1126B_PMUCLKSEL_CON(8), 0, 737 + &rv1126b_rcdiv_pmu_fracmux), 738 + GATE(PCLK_PMU_GPIO0, "pclk_pmu_gpio0", "busclk_pmu_root", 0, 739 + RV1126B_PMUCLKGATE_CON(0), 7, GFLAGS), 740 + COMPOSITE_NODIV(DBCLK_PMU_GPIO0, "dbclk_pmu_gpio0", mux_24m_32k_p, 0, 741 + RV1126B_PMUCLKSEL_CON(2), 4, 1, MFLAGS, 742 + RV1126B_PMUCLKGATE_CON(0), 8, GFLAGS), 743 + GATE(PCLK_PMU_HP_TIMER, "pclk_pmu_hp_timer", "busclk_pmu_root", CLK_IS_CRITICAL, 744 + RV1126B_PMUCLKGATE_CON(0), 10, GFLAGS), 745 + COMPOSITE(CLK_PMU_HP_TIMER, "clk_pmu_hp_timer", mux_cpll_24m_p, CLK_IS_CRITICAL, 746 + RV1126B_PMUCLKSEL_CON(1), 13, 1, MFLAGS, 8, 5, DFLAGS, 747 + RV1126B_PMUCLKGATE_CON(0), 11, GFLAGS), 748 + GATE(CLK_PMU_32K_HP_TIMER, "clk_pmu_32k_hp_timer", "clk_32k", CLK_IS_CRITICAL, 749 + RV1126B_PMUCLKGATE_CON(0), 13, GFLAGS), 750 + GATE(PCLK_PWM1, "pclk_pwm1", "busclk_pmu_root", 0, 751 + RV1126B_PMUCLKGATE_CON(1), 0, GFLAGS), 752 + COMPOSITE(CLK_PWM1, "clk_pwm1", mux_24m_rcosc_buspmu_p, 0, 753 + RV1126B_PMUCLKSEL_CON(2), 8, 2, MFLAGS, 6, 2, DFLAGS, 754 + RV1126B_PMUCLKGATE_CON(1), 1, GFLAGS), 755 + GATE(CLK_OSC_PWM1, "clk_osc_pwm1", "xin24m", 0, 756 + RV1126B_PMUCLKGATE_CON(1), 2, GFLAGS), 757 + GATE(CLK_RC_PWM1, "clk_rc_pwm1", "clk_32k", 0, 758 + RV1126B_PMUCLKGATE_CON(1), 3, GFLAGS), 759 + GATE(PCLK_I2C2, "pclk_i2c2", "busclk_pmu_root", 0, 760 + RV1126B_PMUCLKGATE_CON(1), 6, GFLAGS), 761 + COMPOSITE(CLK_I2C2, "clk_i2c2", mux_24m_rcosc_buspmu_p, 0, 762 + RV1126B_PMUCLKSEL_CON(2), 14, 2, MFLAGS, 12, 2, DFLAGS, 763 + RV1126B_PMUCLKGATE_CON(1), 7, GFLAGS), 764 + GATE(PCLK_UART0, "pclk_uart0", "busclk_pmu_root", 0, 765 + RV1126B_PMUCLKGATE_CON(1), 8, GFLAGS), 766 + COMPOSITE_NODIV(SCLK_UART0, "sclk_uart0", sclk_uart0_p, CLK_SET_RATE_PARENT, 767 + RV1126B_PMUCLKSEL_CON(3), 0, 2, MFLAGS, 768 + RV1126B_PMUCLKGATE_CON(1), 11, GFLAGS), 769 + GATE(PCLK_RCOSC_CTRL, "pclk_rcosc_ctrl", "busclk_pmu_root", CLK_IS_CRITICAL, 770 + RV1126B_PMUCLKGATE_CON(2), 0, GFLAGS), 771 + COMPOSITE_NODIV(CLK_OSC_RCOSC_CTRL, "clk_osc_rcosc_ctrl", clk_osc_rcosc_ctrl_p, CLK_IS_CRITICAL, 772 + RV1126B_PMUCLKSEL_CON(3), 2, 1, MFLAGS, 773 + RV1126B_PMUCLKGATE_CON(2), 1, GFLAGS), 774 + GATE(CLK_REF_RCOSC_CTRL, "clk_ref_rcosc_ctrl", "xin24m", CLK_IS_CRITICAL, 775 + RV1126B_PMUCLKGATE_CON(2), 2, GFLAGS), 776 + GATE(PCLK_IOC_PMUIO0, "pclk_ioc_pmuio0", "busclk_pmu_root", CLK_IS_CRITICAL, 777 + RV1126B_PMUCLKGATE_CON(2), 3, GFLAGS), 778 + GATE(CLK_REFOUT, "clk_refout", "xin24m", 0, 779 + RV1126B_PMUCLKGATE_CON(2), 6, GFLAGS), 780 + GATE(CLK_PREROLL, "clk_preroll", "busclk_pmu_root", 0, 781 + RV1126B_PMUCLKGATE_CON(2), 7, GFLAGS), 782 + GATE(CLK_PREROLL_32K, "clk_preroll_32k", "clk_32k", 0, 783 + RV1126B_PMUCLKGATE_CON(2), 8, GFLAGS), 784 + GATE(HCLK_PMU_SRAM, "hclk_pmu_sram", "busclk_pmu_root", CLK_IS_CRITICAL, 785 + RV1126B_PMUCLKGATE_CON(2), 9, GFLAGS), 786 + GATE(PCLK_WDT_LPMCU, "pclk_wdt_lpmcu", "busclk_pmu_root", 0, 787 + RV1126B_PMUCLKGATE_CON(3), 0, GFLAGS), 788 + COMPOSITE_NODIV(TCLK_WDT_LPMCU, "tclk_wdt_lpmcu", mux_24m_rcosc_buspmu_32k_p, 0, 789 + RV1126B_PMUCLKSEL_CON(3), 6, 2, MFLAGS, 790 + RV1126B_PMUCLKGATE_CON(3), 1, GFLAGS), 791 + GATE(CLK_LPMCU, "clk_lpmcu", "busclk_pmu_root", 0, 792 + RV1126B_PMUCLKGATE_CON(3), 2, GFLAGS), 793 + GATE(CLK_LPMCU_RTC, "clk_lpmcu_rtc", "xin24m", 0, 794 + RV1126B_PMUCLKGATE_CON(3), 3, GFLAGS), 795 + GATE(PCLK_LPMCU_MAILBOX, "pclk_lpmcu_mailbox", "busclk_pmu_root", 0, 796 + RV1126B_PMUCLKGATE_CON(3), 4, GFLAGS), 797 + 798 + /* pd_pmu1 */ 799 + GATE(PCLK_SPI2AHB, "pclk_spi2ahb", "busclk_pmu_root", 0, 800 + RV1126B_PMU1CLKGATE_CON(0), 0, GFLAGS), 801 + GATE(HCLK_SPI2AHB, "hclk_spi2ahb", "busclk_pmu_root", 0, 802 + RV1126B_PMU1CLKGATE_CON(0), 1, GFLAGS), 803 + GATE(HCLK_FSPI1, "hclk_fspi1", "busclk_pmu_root", 0, 804 + RV1126B_PMU1CLKGATE_CON(0), 2, GFLAGS), 805 + GATE(HCLK_XIP_FSPI1, "hclk_xip_fspi1", "busclk_pmu_root", 0, 806 + RV1126B_PMU1CLKGATE_CON(0), 3, GFLAGS), 807 + COMPOSITE(SCLK_1X_FSPI1, "sclk_1x_fspi1", mux_24m_rcosc_buspmu_p, 0, 808 + RV1126B_PMU1CLKSEL_CON(0), 0, 2, MFLAGS, 2, 3, DFLAGS, 809 + RV1126B_PMU1CLKGATE_CON(0), 4, GFLAGS), 810 + GATE(PCLK_IOC_PMUIO1, "pclk_ioc_pmuio1", "busclk_pmu_root", CLK_IS_CRITICAL, 811 + RV1126B_PMU1CLKGATE_CON(0), 5, GFLAGS), 812 + GATE(PCLK_AUDIO_ADC_PMU, "pclk_audio_adc_pmu", "busclk_pmu_root", 0, 813 + RV1126B_PMU1CLKGATE_CON(0), 8, GFLAGS), 814 + 815 + COMPOSITE(MCLK_LPSAI, "mclk_lpsai", mux_24m_rcosc_buspmu_p, 0, 816 + RV1126B_PMU1CLKSEL_CON(0), 6, 2, MFLAGS, 8, 5, DFLAGS, 817 + RV1126B_PMU1CLKGATE_CON(1), 3, GFLAGS), 818 + GATE(MCLK_AUDIO_ADC_PMU, "mclk_audio_adc_pmu", "mclk_lpsai", CLK_IS_CRITICAL, 819 + RV1126B_PMU1CLKGATE_CON(0), 9, GFLAGS), 820 + FACTOR(MCLK_AUDIO_ADC_DIV4_PMU, "mclk_audio_adc_div4_pmu", "mclk_audio_adc_pmu", 0, 1, 4), 821 + 822 + /* pd_bus */ 823 + GATE(ACLK_GIC400, "aclk_gic400", "hclk_bus_root", CLK_IS_CRITICAL, 824 + RV1126B_BUSCLKGATE_CON(0), 8, GFLAGS), 825 + GATE(PCLK_WDT_NS, "pclk_wdt_ns", "pclk_bus_root", 0, 826 + RV1126B_BUSCLKGATE_CON(0), 10, GFLAGS), 827 + GATE(TCLK_WDT_NS, "tclk_wdt_ns", "tclk_wdt_ns_src", 0, 828 + RV1126B_BUSCLKGATE_CON(0), 11, GFLAGS), 829 + GATE(PCLK_WDT_HPMCU, "pclk_wdt_hpmcu", "pclk_bus_root", 0, 830 + RV1126B_BUSCLKGATE_CON(1), 0, GFLAGS), 831 + GATE(HCLK_CACHE, "hclk_cache", "aclk_bus_root", 0, 832 + RV1126B_BUSCLKGATE_CON(1), 2, GFLAGS), 833 + GATE(PCLK_HPMCU_MAILBOX, "pclk_hpmcu_mailbox", "pclk_bus_root", 0, 834 + RV1126B_BUSCLKGATE_CON(1), 3, GFLAGS), 835 + GATE(PCLK_HPMCU_INTMUX, "pclk_hpmcu_intmux", "pclk_bus_root", 0, 836 + RV1126B_BUSCLKGATE_CON(1), 4, GFLAGS), 837 + GATE(CLK_HPMCU, "clk_hpmcu", "aclk_bus_root", 0, 838 + RV1126B_BUSCLKGATE_CON(1), 5, GFLAGS), 839 + GATE(CLK_HPMCU_RTC, "clk_hpmcu_rtc", "xin24m", 0, 840 + RV1126B_BUSCLKGATE_CON(1), 10, GFLAGS), 841 + GATE(PCLK_RKDMA, "pclk_rkdma", "pclk_bus_root", 0, 842 + RV1126B_BUSCLKGATE_CON(1), 11, GFLAGS), 843 + GATE(ACLK_RKDMA, "aclk_rkdma", "aclk_bus_root", 0, 844 + RV1126B_BUSCLKGATE_CON(1), 12, GFLAGS), 845 + GATE(PCLK_DCF, "pclk_dcf", "pclk_bus_root", 0, 846 + RV1126B_BUSCLKGATE_CON(2), 0, GFLAGS), 847 + GATE(ACLK_DCF, "aclk_dcf", "aclk_bus_root", 0, 848 + RV1126B_BUSCLKGATE_CON(2), 1, GFLAGS), 849 + GATE(HCLK_RGA, "hclk_rga", "hclk_bus_root", 0, 850 + RV1126B_BUSCLKGATE_CON(2), 2, GFLAGS), 851 + GATE(ACLK_RGA, "aclk_rga", "aclk_bus_root", 0, 852 + RV1126B_BUSCLKGATE_CON(2), 3, GFLAGS), 853 + GATE(CLK_CORE_RGA, "clk_core_rga", "clk_core_rga_src", 0, 854 + RV1126B_BUSCLKGATE_CON(2), 4, GFLAGS), 855 + GATE(PCLK_TIMER, "pclk_timer", "pclk_bus_root", 0, 856 + RV1126B_BUSCLKGATE_CON(2), 5, GFLAGS), 857 + COMPOSITE_NODIV(CLK_TIMER0, "clk_timer0", clk_timer0_parents_p, 0, 858 + RV1126B_BUSCLKSEL_CON(2), 0, 2, MFLAGS, 859 + RV1126B_BUSCLKGATE_CON(2), 6, GFLAGS), 860 + COMPOSITE_NODIV(CLK_TIMER1, "clk_timer1", clk_timer1_parents_p, 0, 861 + RV1126B_BUSCLKSEL_CON(2), 2, 2, MFLAGS, 862 + RV1126B_BUSCLKGATE_CON(2), 7, GFLAGS), 863 + COMPOSITE_NODIV(CLK_TIMER2, "clk_timer2", clk_timer2_parents_p, 0, 864 + RV1126B_BUSCLKSEL_CON(2), 4, 2, MFLAGS, 865 + RV1126B_BUSCLKGATE_CON(2), 8, GFLAGS), 866 + COMPOSITE_NODIV(CLK_TIMER3, "clk_timer3", clk_timer3_parents_p, 0, 867 + RV1126B_BUSCLKSEL_CON(2), 6, 2, MFLAGS, 868 + RV1126B_BUSCLKGATE_CON(2), 9, GFLAGS), 869 + COMPOSITE_NODIV(CLK_TIMER4, "clk_timer4", clk_timer4_parents_p, 0, 870 + RV1126B_BUSCLKSEL_CON(2), 8, 2, MFLAGS, 871 + RV1126B_BUSCLKGATE_CON(2), 10, GFLAGS), 872 + GATE(HCLK_RKRNG_S_NS, "hclk_rkrng_s_ns", "hclk_bus_root", 0, 873 + RV1126B_BUSCLKGATE_CON(2), 14, GFLAGS), 874 + GATE(HCLK_RKRNG_NS, "hclk_rkrng_ns", "hclk_rkrng_s_ns", 0, 875 + RV1126B_BUSCLKGATE_CON(2), 15, GFLAGS), 876 + GATE(CLK_TIMER5, "clk_timer5", "clk_timer_root", CLK_IS_CRITICAL, 877 + RV1126B_BUSCLKGATE_CON(2), 11, GFLAGS), 878 + GATE(PCLK_I2C0, "pclk_i2c0", "pclk_bus_root", 0, 879 + RV1126B_BUSCLKGATE_CON(3), 0, GFLAGS), 880 + GATE(CLK_I2C0, "clk_i2c0", "clk_i2c_bus_src", 0, 881 + RV1126B_BUSCLKGATE_CON(3), 1, GFLAGS), 882 + GATE(PCLK_I2C1, "pclk_i2c1", "pclk_bus_root", 0, 883 + RV1126B_BUSCLKGATE_CON(3), 2, GFLAGS), 884 + GATE(CLK_I2C1, "clk_i2c1", "clk_i2c_bus_src", 0, 885 + RV1126B_BUSCLKGATE_CON(3), 3, GFLAGS), 886 + GATE(PCLK_I2C3, "pclk_i2c3", "pclk_bus_root", 0, 887 + RV1126B_BUSCLKGATE_CON(3), 4, GFLAGS), 888 + GATE(CLK_I2C3, "clk_i2c3", "clk_i2c_bus_src", 0, 889 + RV1126B_BUSCLKGATE_CON(3), 5, GFLAGS), 890 + GATE(PCLK_I2C4, "pclk_i2c4", "pclk_bus_root", 0, 891 + RV1126B_BUSCLKGATE_CON(3), 6, GFLAGS), 892 + GATE(CLK_I2C4, "clk_i2c4", "clk_i2c_bus_src", 0, 893 + RV1126B_BUSCLKGATE_CON(3), 7, GFLAGS), 894 + GATE(PCLK_I2C5, "pclk_i2c5", "pclk_bus_root", 0, 895 + RV1126B_BUSCLKGATE_CON(3), 8, GFLAGS), 896 + GATE(CLK_I2C5, "clk_i2c5", "clk_i2c_bus_src", 0, 897 + RV1126B_BUSCLKGATE_CON(3), 9, GFLAGS), 898 + GATE(PCLK_SPI0, "pclk_spi0", "pclk_bus_root", 0, 899 + RV1126B_BUSCLKGATE_CON(3), 10, GFLAGS), 900 + GATE(PCLK_SPI1, "pclk_spi1", "pclk_bus_root", 0, 901 + RV1126B_BUSCLKGATE_CON(3), 12, GFLAGS), 902 + GATE(PCLK_PWM0, "pclk_pwm0", "pclk_bus_root", 0, 903 + RV1126B_BUSCLKGATE_CON(4), 0, GFLAGS), 904 + GATE(CLK_OSC_PWM0, "clk_osc_pwm0", "xin24m", 0, 905 + RV1126B_BUSCLKGATE_CON(4), 1, GFLAGS), 906 + GATE(CLK_RC_PWM0, "clk_rc_pwm0", "xin24m", 0, 907 + RV1126B_BUSCLKGATE_CON(4), 2, GFLAGS), 908 + GATE(PCLK_PWM2, "pclk_pwm2", "pclk_bus_root", 0, 909 + RV1126B_BUSCLKGATE_CON(4), 3, GFLAGS), 910 + GATE(CLK_OSC_PWM2, "clk_osc_pwm2", "xin24m", 0, 911 + RV1126B_BUSCLKGATE_CON(4), 4, GFLAGS), 912 + GATE(CLK_RC_PWM2, "clk_rc_pwm2", "xin24m", 0, 913 + RV1126B_BUSCLKGATE_CON(4), 5, GFLAGS), 914 + GATE(PCLK_PWM3, "pclk_pwm3", "pclk_bus_root", 0, 915 + RV1126B_BUSCLKGATE_CON(4), 6, GFLAGS), 916 + GATE(CLK_OSC_PWM3, "clk_osc_pwm3", "xin24m", 0, 917 + RV1126B_BUSCLKGATE_CON(4), 7, GFLAGS), 918 + GATE(CLK_RC_PWM3, "clk_rc_pwm3", "xin24m", 0, 919 + RV1126B_BUSCLKGATE_CON(4), 8, GFLAGS), 920 + GATE(PCLK_UART1, "pclk_uart1", "pclk_bus_root", 0, 921 + RV1126B_BUSCLKGATE_CON(4), 9, GFLAGS), 922 + GATE(PCLK_UART2, "pclk_uart2", "pclk_bus_root", 0, 923 + RV1126B_BUSCLKGATE_CON(4), 10, GFLAGS), 924 + GATE(PCLK_UART3, "pclk_uart3", "pclk_bus_root", 0, 925 + RV1126B_BUSCLKGATE_CON(4), 11, GFLAGS), 926 + GATE(PCLK_UART4, "pclk_uart4", "pclk_bus_root", 0, 927 + RV1126B_BUSCLKGATE_CON(4), 12, GFLAGS), 928 + GATE(PCLK_UART5, "pclk_uart5", "pclk_bus_root", 0, 929 + RV1126B_BUSCLKGATE_CON(4), 13, GFLAGS), 930 + GATE(PCLK_UART6, "pclk_uart6", "pclk_bus_root", 0, 931 + RV1126B_BUSCLKGATE_CON(4), 14, GFLAGS), 932 + GATE(PCLK_UART7, "pclk_uart7", "pclk_bus_root", 0, 933 + RV1126B_BUSCLKGATE_CON(4), 15, GFLAGS), 934 + GATE(PCLK_TSADC, "pclk_tsadc", "pclk_bus_root", CLK_IS_CRITICAL, 935 + RV1126B_BUSCLKGATE_CON(5), 0, GFLAGS), 936 + GATE(CLK_TSADC, "clk_tsadc", "xin24m", CLK_IS_CRITICAL, 937 + RV1126B_BUSCLKGATE_CON(5), 1, GFLAGS), 938 + GATE(HCLK_SAI0, "hclk_sai0", "hclk_bus_root", 0, 939 + RV1126B_BUSCLKGATE_CON(5), 2, GFLAGS), 940 + GATE(HCLK_SAI1, "hclk_sai1", "hclk_bus_root", 0, 941 + RV1126B_BUSCLKGATE_CON(5), 4, GFLAGS), 942 + GATE(HCLK_SAI2, "hclk_sai2", "hclk_bus_root", 0, 943 + RV1126B_BUSCLKGATE_CON(5), 6, GFLAGS), 944 + GATE(HCLK_RKDSM, "hclk_rkdsm", "hclk_bus_root", 0, 945 + RV1126B_BUSCLKGATE_CON(5), 8, GFLAGS), 946 + GATE(MCLK_RKDSM, "mclk_rkdsm", "mclk_sai2", 0, 947 + RV1126B_BUSCLKGATE_CON(5), 9, GFLAGS), 948 + GATE(HCLK_PDM, "hclk_pdm", "hclk_bus_root", 0, 949 + RV1126B_BUSCLKGATE_CON(5), 10, GFLAGS), 950 + GATE(HCLK_ASRC0, "hclk_asrc0", "hclk_bus_root", 0, 951 + RV1126B_BUSCLKGATE_CON(5), 11, GFLAGS), 952 + GATE(HCLK_ASRC1, "hclk_asrc1", "hclk_bus_root", 0, 953 + RV1126B_BUSCLKGATE_CON(5), 12, GFLAGS), 954 + GATE(PCLK_AUDIO_ADC_BUS, "pclk_audio_adc_bus", "pclk_bus_root", 0, 955 + RV1126B_BUSCLKGATE_CON(5), 13, GFLAGS), 956 + GATE(MCLK_AUDIO_ADC_BUS, "mclk_audio_adc_bus", "mclk_sai2", 0, 957 + RV1126B_BUSCLKGATE_CON(5), 14, GFLAGS), 958 + FACTOR(MCLK_AUDIO_ADC_DIV4_BUS, "mclk_audio_adc_div4_bus", "mclk_audio_adc_bus", 0, 1, 4), 959 + GATE(PCLK_RKCE, "pclk_rkce", "pclk_bus_root", CLK_IS_CRITICAL, 960 + RV1126B_BUSCLKGATE_CON(6), 0, GFLAGS), 961 + GATE(HCLK_NS_RKCE, "hclk_ns_rkce", "hclk_bus_root", 0, 962 + RV1126B_BUSCLKGATE_CON(6), 1, GFLAGS), 963 + GATE(PCLK_OTPC_NS, "pclk_otpc_ns", "pclk_bus_root", 0, 964 + RV1126B_BUSCLKGATE_CON(6), 2, GFLAGS), 965 + GATE(CLK_SBPI_OTPC_NS, "clk_sbpi_otpc_ns", "xin24m", 0, 966 + RV1126B_BUSCLKGATE_CON(6), 3, GFLAGS), 967 + COMPOSITE_NOMUX(CLK_USER_OTPC_NS, "clk_user_otpc_ns", "xin24m", 0, 968 + RV1126B_BUSCLKSEL_CON(2), 12, 3, DFLAGS, 969 + RV1126B_BUSCLKGATE_CON(6), 4, GFLAGS), 970 + GATE(PCLK_OTP_MASK, "pclk_otp_mask", "pclk_bus_root", 0, 971 + RV1126B_BUSCLKGATE_CON(6), 6, GFLAGS), 972 + GATE(CLK_TSADC_PHYCTRL, "clk_tsadc_phyctrl", "xin24m", CLK_IS_CRITICAL, 973 + RV1126B_BUSCLKGATE_CON(6), 8, GFLAGS), 974 + MUX(LRCK_SRC_ASRC0, "lrck_src_asrc0", lrck_src_asrc_p, 0, 975 + RV1126B_BUSCLKSEL_CON(3), 0, 3, MFLAGS), 976 + MUX(LRCK_DST_ASRC0, "lrck_dst_asrc0", lrck_src_asrc_p, 0, 977 + RV1126B_BUSCLKSEL_CON(3), 4, 3, MFLAGS), 978 + MUX(LRCK_SRC_ASRC1, "lrck_src_asrc1", lrck_src_asrc_p, 0, 979 + RV1126B_BUSCLKSEL_CON(3), 8, 3, MFLAGS), 980 + MUX(LRCK_DST_ASRC1, "lrck_dst_asrc1", lrck_src_asrc_p, 0, 981 + RV1126B_BUSCLKSEL_CON(3), 12, 3, MFLAGS), 982 + GATE(ACLK_NSRKCE, "aclk_nsrkce", "aclk_rkce_src", 0, 983 + RV1126B_BUSCLKGATE_CON(2), 12, GFLAGS), 984 + GATE(CLK_PKA_NSRKCE, "clk_pka_nsrkce", "clk_pka_rkce_src", 0, 985 + RV1126B_BUSCLKGATE_CON(2), 13, GFLAGS), 986 + 987 + /* pd_peri */ 988 + DIV(PCLK_RTC_ROOT, "pclk_rtc_root", "pclk_peri_root", 0, 989 + RV1126B_PERICLKSEL_CON(0), 0, 2, DFLAGS), 990 + GATE(PCLK_GPIO1, "pclk_gpio1", "pclk_peri_root", 0, 991 + RV1126B_PERICLKGATE_CON(0), 5, GFLAGS), 992 + GATE(DBCLK_GPIO1, "dbclk_gpio1", "xin24m", 0, 993 + RV1126B_PERICLKGATE_CON(0), 6, GFLAGS), 994 + GATE(PCLK_IOC_VCCIO1, "pclk_ioc_vccio1", "pclk_peri_root", CLK_IS_CRITICAL, 995 + RV1126B_PERICLKGATE_CON(0), 7, GFLAGS), 996 + GATE(ACLK_USB3OTG, "aclk_usb3otg", "aclk_peri_root", 0, 997 + RV1126B_PERICLKGATE_CON(0), 8, GFLAGS), 998 + GATE(CLK_REF_USB3OTG, "clk_ref_usb3otg", "xin24m", 0, 999 + RV1126B_PERICLKGATE_CON(0), 9, GFLAGS), 1000 + GATE(CLK_SUSPEND_USB3OTG, "clk_suspend_usb3otg", "xin24m", 0, 1001 + RV1126B_PERICLKGATE_CON(0), 10, GFLAGS), 1002 + GATE(HCLK_USB2HOST, "hclk_usb2host", "aclk_peri_root", 0, 1003 + RV1126B_PERICLKGATE_CON(0), 11, GFLAGS), 1004 + GATE(HCLK_ARB_USB2HOST, "hclk_arb_usb2host", "aclk_peri_root", 0, 1005 + RV1126B_PERICLKGATE_CON(0), 12, GFLAGS), 1006 + GATE(PCLK_RTC_TEST, "pclk_rtc_test", "pclk_rtc_root", 0, 1007 + RV1126B_PERICLKGATE_CON(0), 13, GFLAGS), 1008 + GATE(HCLK_EMMC, "hclk_emmc", "aclk_peri_root", 0, 1009 + RV1126B_PERICLKGATE_CON(1), 0, GFLAGS), 1010 + GATE(HCLK_FSPI0, "hclk_fspi0", "aclk_peri_root", 0, 1011 + RV1126B_PERICLKGATE_CON(1), 1, GFLAGS), 1012 + GATE(HCLK_XIP_FSPI0, "hclk_xip_fspi0", "aclk_peri_root", 0, 1013 + RV1126B_PERICLKGATE_CON(1), 2, GFLAGS), 1014 + GATE(PCLK_PIPEPHY, "pclk_pipephy", "pclk_peri_root", 0, 1015 + RV1126B_PERICLKGATE_CON(1), 8, GFLAGS), 1016 + GATE(PCLK_USB2PHY, "pclk_usb2phy", "pclk_peri_root", 0, 1017 + RV1126B_PERICLKGATE_CON(1), 10, GFLAGS), 1018 + COMPOSITE_NOMUX(CLK_REF_PIPEPHY_CPLL_SRC, "clk_ref_pipephy_cpll_src", "cpll", 0, 1019 + RV1126B_PERICLKSEL_CON(1), 0, 6, DFLAGS, 1020 + RV1126B_PERICLKGATE_CON(1), 14, GFLAGS), 1021 + MUX(CLK_REF_PIPEPHY, "clk_ref_pipephy", clk_ref_pipephy_p, 0, 1022 + RV1126B_PERICLKSEL_CON(1), 12, 1, MFLAGS), 1023 + }; 1024 + 1025 + static struct rockchip_clk_branch rv1126b_armclk __initdata = 1026 + MUX(ARMCLK, "armclk", mux_armclk_p, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 1027 + RV1126B_CORECLKSEL_CON(0), 1, 1, MFLAGS); 1028 + 1029 + static void __init rv1126b_clk_init(struct device_node *np) 1030 + { 1031 + struct rockchip_clk_provider *ctx; 1032 + void __iomem *reg_base; 1033 + unsigned long clk_nr_clks; 1034 + 1035 + clk_nr_clks = rockchip_clk_find_max_clk_id(rv1126b_clk_branches, 1036 + ARRAY_SIZE(rv1126b_clk_branches)) + 1; 1037 + 1038 + reg_base = of_iomap(np, 0); 1039 + if (!reg_base) { 1040 + pr_err("%s: could not map cru region\n", __func__); 1041 + return; 1042 + } 1043 + 1044 + ctx = rockchip_clk_init(np, reg_base, clk_nr_clks); 1045 + if (IS_ERR(ctx)) { 1046 + pr_err("%s: rockchip clk init failed\n", __func__); 1047 + iounmap(reg_base); 1048 + return; 1049 + } 1050 + 1051 + rockchip_clk_register_plls(ctx, rv1126b_pll_clks, 1052 + ARRAY_SIZE(rv1126b_pll_clks), 1053 + 0); 1054 + 1055 + rockchip_clk_register_branches(ctx, rv1126b_clk_branches, 1056 + ARRAY_SIZE(rv1126b_clk_branches)); 1057 + 1058 + rockchip_clk_register_armclk_multi_pll(ctx, &rv1126b_armclk, 1059 + rv1126b_cpuclk_rates, 1060 + ARRAY_SIZE(rv1126b_cpuclk_rates)); 1061 + 1062 + rv1126b_rst_init(np, reg_base); 1063 + 1064 + rockchip_register_restart_notifier(ctx, RV1126B_GLB_SRST_FST, NULL); 1065 + 1066 + rockchip_clk_of_add_provider(np, ctx); 1067 + 1068 + /* pvtpll src init */ 1069 + writel_relaxed(PVTPLL_SRC_SEL_PVTPLL, reg_base + RV1126B_CORECLKSEL_CON(0)); 1070 + writel_relaxed(PVTPLL_SRC_SEL_PVTPLL, reg_base + RV1126B_NPUCLKSEL_CON(0)); 1071 + writel_relaxed(PVTPLL_SRC_SEL_PVTPLL, reg_base + RV1126B_VICLKSEL_CON(0)); 1072 + writel_relaxed(PVTPLL_SRC_SEL_PVTPLL, reg_base + RV1126B_VEPUCLKSEL_CON(0)); 1073 + writel_relaxed(PVTPLL_SRC_SEL_PVTPLL, reg_base + RV1126B_VCPCLKSEL_CON(0)); 1074 + } 1075 + 1076 + CLK_OF_DECLARE(rv1126b_cru, "rockchip,rv1126b-cru", rv1126b_clk_init); 1077 + 1078 + struct clk_rv1126b_inits { 1079 + void (*inits)(struct device_node *np); 1080 + }; 1081 + 1082 + static const struct clk_rv1126b_inits clk_rv1126b_init = { 1083 + .inits = rv1126b_clk_init, 1084 + }; 1085 + 1086 + static const struct of_device_id clk_rv1126b_match_table[] = { 1087 + { 1088 + .compatible = "rockchip,rv1126b-cru", 1089 + .data = &clk_rv1126b_init, 1090 + }, 1091 + { } 1092 + }; 1093 + 1094 + static int clk_rv1126b_probe(struct platform_device *pdev) 1095 + { 1096 + const struct clk_rv1126b_inits *init_data; 1097 + struct device *dev = &pdev->dev; 1098 + 1099 + init_data = device_get_match_data(dev); 1100 + if (!init_data) 1101 + return -EINVAL; 1102 + 1103 + if (init_data->inits) 1104 + init_data->inits(dev->of_node); 1105 + 1106 + return 0; 1107 + } 1108 + 1109 + static struct platform_driver clk_rv1126b_driver = { 1110 + .probe = clk_rv1126b_probe, 1111 + .driver = { 1112 + .name = "clk-rv1126b", 1113 + .of_match_table = clk_rv1126b_match_table, 1114 + .suppress_bind_attrs = true, 1115 + }, 1116 + }; 1117 + builtin_platform_driver_probe(clk_rv1126b_driver, clk_rv1126b_probe);
+24
drivers/clk/rockchip/clk.c
··· 722 } 723 EXPORT_SYMBOL_GPL(rockchip_clk_register_armclk); 724 725 void rockchip_clk_protect_critical(const char *const clocks[], 726 int nclocks) 727 {
··· 722 } 723 EXPORT_SYMBOL_GPL(rockchip_clk_register_armclk); 724 725 + void rockchip_clk_register_armclk_multi_pll(struct rockchip_clk_provider *ctx, 726 + struct rockchip_clk_branch *list, 727 + const struct rockchip_cpuclk_rate_table *rates, 728 + int nrates) 729 + { 730 + struct clk *clk; 731 + 732 + clk = rockchip_clk_register_cpuclk_multi_pll(list->name, list->parent_names, 733 + list->num_parents, ctx->reg_base, 734 + list->muxdiv_offset, list->mux_shift, 735 + list->mux_width, list->mux_flags, 736 + list->div_offset, list->div_shift, 737 + list->div_width, list->div_flags, 738 + list->flags, &ctx->lock, rates, nrates); 739 + if (IS_ERR(clk)) { 740 + pr_err("%s: failed to register clock %s: %ld\n", 741 + __func__, list->name, PTR_ERR(clk)); 742 + return; 743 + } 744 + 745 + rockchip_clk_set_lookup(ctx, clk, list->id); 746 + } 747 + EXPORT_SYMBOL_GPL(rockchip_clk_register_armclk_multi_pll); 748 + 749 void rockchip_clk_protect_critical(const char *const clocks[], 750 int nclocks) 751 {
+96
drivers/clk/rockchip/clk.h
··· 99 #define RV1126_EMMC_CON0 0x450 100 #define RV1126_EMMC_CON1 0x454 101 102 #define RK2928_PLL_CON(x) ((x) * 0x4) 103 #define RK2928_MODE_CON 0x40 104 #define RK2928_CLKSEL_CON(x) ((x) * 0x4 + 0x44) ··· 274 #define RK3399_PMU_CLKSEL_CON(x) ((x) * 0x4 + 0x80) 275 #define RK3399_PMU_CLKGATE_CON(x) ((x) * 0x4 + 0x100) 276 #define RK3399_PMU_SOFTRST_CON(x) ((x) * 0x4 + 0x110) 277 278 #define RK3528_PMU_CRU_BASE 0x10000 279 #define RK3528_PCIE_CRU_BASE 0x20000 ··· 700 const struct rockchip_cpuclk_reg_data *reg_data, 701 const struct rockchip_cpuclk_rate_table *rates, 702 int nrates, void __iomem *reg_base, spinlock_t *lock); 703 704 struct clk *rockchip_clk_register_mmc(const char *name, 705 const char *const *parent_names, u8 num_parents, ··· 1298 const struct rockchip_cpuclk_reg_data *reg_data, 1299 const struct rockchip_cpuclk_rate_table *rates, 1300 int nrates); 1301 void rockchip_clk_protect_critical(const char *const clocks[], int nclocks); 1302 void rockchip_register_restart_notifier(struct rockchip_clk_provider *ctx, 1303 unsigned int reg, void (*cb)(void)); ··· 1340 return rockchip_register_softrst_lut(np, NULL, num_regs, base, flags); 1341 } 1342 1343 void rk3528_rst_init(struct device_node *np, void __iomem *reg_base); 1344 void rk3562_rst_init(struct device_node *np, void __iomem *reg_base); 1345 void rk3576_rst_init(struct device_node *np, void __iomem *reg_base);
··· 99 #define RV1126_EMMC_CON0 0x450 100 #define RV1126_EMMC_CON1 0x454 101 102 + #define RV1126B_TOPCRU_BASE 0x0 103 + #define RV1126B_BUSCRU_BASE 0x10000 104 + #define RV1126B_PERICRU_BASE 0x20000 105 + #define RV1126B_CORECRU_BASE 0x30000 106 + #define RV1126B_PMUCRU_BASE 0x40000 107 + #define RV1126B_PMU1CRU_BASE 0x50000 108 + #define RV1126B_DDRCRU_BASE 0x60000 109 + #define RV1126B_SUBDDRCRU_BASE 0x68000 110 + #define RV1126B_VICRU_BASE 0x70000 111 + #define RV1126B_VEPUCRU_BASE 0x80000 112 + #define RV1126B_NPUCRU_BASE 0x90000 113 + #define RV1126B_VDOCRU_BASE 0xA0000 114 + #define RV1126B_VCPCRU_BASE 0xB0000 115 + 116 + #define RV1126B_PLL_CON(x) ((x) * 0x4 + RV1126B_TOPCRU_BASE) 117 + #define RV1126B_MODE_CON (0x280 + RV1126B_TOPCRU_BASE) 118 + #define RV1126B_CLKSEL_CON(x) ((x) * 0x4 + 0x300 + RV1126B_TOPCRU_BASE) 119 + #define RV1126B_CLKGATE_CON(x) ((x) * 0x4 + 0x800 + RV1126B_TOPCRU_BASE) 120 + #define RV1126B_SOFTRST_CON(x) ((x) * 0x4 + 0xa00 + RV1126B_TOPCRU_BASE) 121 + #define RV1126B_GLB_SRST_FST (0xc08 + RV1126B_TOPCRU_BASE) 122 + #define RV1126B_GLB_SRST_SND (0xc0c + RV1126B_TOPCRU_BASE) 123 + #define RV1126B_CLK_CM_FRAC0_DIV_H (0xcc0 + RV1126B_TOPCRU_BASE) 124 + #define RV1126B_CLK_CM_FRAC1_DIV_H (0xcc4 + RV1126B_TOPCRU_BASE) 125 + #define RV1126B_CLK_CM_FRAC2_DIV_H (0xcc8 + RV1126B_TOPCRU_BASE) 126 + #define RV1126B_CLK_UART_FRAC0_DIV_H (0xccc + RV1126B_TOPCRU_BASE) 127 + #define RV1126B_CLK_UART_FRAC1_DIV_H (0xcd0 + RV1126B_TOPCRU_BASE) 128 + #define RV1126B_CLK_AUDIO_FRAC0_DIV_H (0xcd4 + RV1126B_TOPCRU_BASE) 129 + #define RV1126B_CLK_AUDIO_FRAC1_DIV_H (0xcd8 + RV1126B_TOPCRU_BASE) 130 + #define RV1126B_BUSCLKSEL_CON(x) ((x) * 0x4 + 0x300 + RV1126B_BUSCRU_BASE) 131 + #define RV1126B_BUSCLKGATE_CON(x) ((x) * 0x4 + 0x800 + RV1126B_BUSCRU_BASE) 132 + #define RV1126B_BUSSOFTRST_CON(x) ((x) * 0x4 + 0xa00 + RV1126B_BUSCRU_BASE) 133 + #define RV1126B_PERIPLL_CON(x) ((x) * 0x4 + RV1126B_PERICRU_BASE) 134 + #define RV1126B_PERICLKSEL_CON(x) ((x) * 0x4 + 0x300 + RV1126B_PERICRU_BASE) 135 + #define RV1126B_PERICLKGATE_CON(x) ((x) * 0x4 + 0x800 + RV1126B_PERICRU_BASE) 136 + #define RV1126B_PERISOFTRST_CON(x) ((x) * 0x4 + 0xa00 + RV1126B_PERICRU_BASE) 137 + #define RV1126B_CORECLKSEL_CON(x) ((x) * 0x4 + 0x300 + RV1126B_CORECRU_BASE) 138 + #define RV1126B_CORECLKGATE_CON(x) ((x) * 0x4 + 0x800 + RV1126B_CORECRU_BASE) 139 + #define RV1126B_CORESOFTRST_CON(x) ((x) * 0x4 + 0xa00 + RV1126B_CORECRU_BASE) 140 + #define RV1126B_PMUCLKSEL_CON(x) ((x) * 0x4 + 0x300 + RV1126B_PMUCRU_BASE) 141 + #define RV1126B_PMUCLKGATE_CON(x) ((x) * 0x4 + 0x800 + RV1126B_PMUCRU_BASE) 142 + #define RV1126B_PMUSOFTRST_CON(x) ((x) * 0x4 + 0xa00 + RV1126B_PMUCRU_BASE) 143 + #define RV1126B_PMU1CLKSEL_CON(x) ((x) * 0x4 + 0x300 + RV1126B_PMU1CRU_BASE) 144 + #define RV1126B_PMU1CLKGATE_CON(x) ((x) * 0x4 + 0x800 + RV1126B_PMU1CRU_BASE) 145 + #define RV1126B_PMU1SOFTRST_CON(x) ((x) * 0x4 + 0xa00 + RV1126B_PMU1CRU_BASE) 146 + #define RV1126B_DDRCLKSEL_CON(x) ((x) * 0x4 + 0x300 + RV1126B_DDRCRU_BASE) 147 + #define RV1126B_DDRCLKGATE_CON(x) ((x) * 0x4 + 0x800 + RV1126B_DDRCRU_BASE) 148 + #define RV1126B_DDRSOFTRST_CON(x) ((x) * 0x4 + 0xa00 + RV1126B_DDRCRU_BASE) 149 + #define RV1126B_SUBDDRPLL_CON(x) ((x) * 0x4 + RV1126B_SUBDDRCRU_BASE) 150 + #define RV1126B_SUBDDRCLKSEL_CON(x) ((x) * 0x4 + 0x300 + RV1126B_SUBDDRCRU_BASE) 151 + #define RV1126B_SUBDDRCLKGATE_CON(x) ((x) * 0x4 + 0x800 + RV1126B_SUBDDRCRU_BASE) 152 + #define RV1126B_SUBDDRSOFTRST_CON(x) ((x) * 0x4 + 0xa00 + RV1126B_SUBDDRCRU_BASE) 153 + #define RV1126B_VICLKSEL_CON(x) ((x) * 0x4 + 0x300 + RV1126B_VICRU_BASE) 154 + #define RV1126B_VICLKGATE_CON(x) ((x) * 0x4 + 0x800 + RV1126B_VICRU_BASE) 155 + #define RV1126B_VISOFTRST_CON(x) ((x) * 0x4 + 0xa00 + RV1126B_VICRU_BASE) 156 + #define RV1126B_VEPUCLKSEL_CON(x) ((x) * 0x4 + 0x300 + RV1126B_VEPUCRU_BASE) 157 + #define RV1126B_VEPUCLKGATE_CON(x) ((x) * 0x4 + 0x800 + RV1126B_VEPUCRU_BASE) 158 + #define RV1126B_VEPUSOFTRST_CON(x) ((x) * 0x4 + 0xa00 + RV1126B_VEPUCRU_BASE) 159 + #define RV1126B_NPUCLKSEL_CON(x) ((x) * 0x4 + 0x300 + RV1126B_NPUCRU_BASE) 160 + #define RV1126B_NPUCLKGATE_CON(x) ((x) * 0x4 + 0x800 + RV1126B_NPUCRU_BASE) 161 + #define RV1126B_NPUSOFTRST_CON(x) ((x) * 0x4 + 0xa00 + RV1126B_NPUCRU_BASE) 162 + #define RV1126B_VDOCLKSEL_CON(x) ((x) * 0x4 + 0x300 + RV1126B_VDOCRU_BASE) 163 + #define RV1126B_VDOCLKGATE_CON(x) ((x) * 0x4 + 0x800 + RV1126B_VDOCRU_BASE) 164 + #define RV1126B_VDOSOFTRST_CON(x) ((x) * 0x4 + 0xa00 + RV1126B_VDOCRU_BASE) 165 + #define RV1126B_VCPCLKSEL_CON(x) ((x) * 0x4 + 0x300 + RV1126B_VCPCRU_BASE) 166 + #define RV1126B_VCPCLKGATE_CON(x) ((x) * 0x4 + 0x800 + RV1126B_VCPCRU_BASE) 167 + #define RV1126B_VCPSOFTRST_CON(x) ((x) * 0x4 + 0xa00 + RV1126B_VCPCRU_BASE) 168 + 169 #define RK2928_PLL_CON(x) ((x) * 0x4) 170 #define RK2928_MODE_CON 0x40 171 #define RK2928_CLKSEL_CON(x) ((x) * 0x4 + 0x44) ··· 207 #define RK3399_PMU_CLKSEL_CON(x) ((x) * 0x4 + 0x80) 208 #define RK3399_PMU_CLKGATE_CON(x) ((x) * 0x4 + 0x100) 209 #define RK3399_PMU_SOFTRST_CON(x) ((x) * 0x4 + 0x110) 210 + 211 + #define RK3506_PMU_CRU_BASE 0x10000 212 + #define RK3506_PLL_CON(x) ((x) * 0x4 + RK3506_PMU_CRU_BASE) 213 + #define RK3506_CLKSEL_CON(x) ((x) * 0x4 + 0x300) 214 + #define RK3506_CLKGATE_CON(x) ((x) * 0x4 + 0x800) 215 + #define RK3506_SOFTRST_CON(x) ((x) * 0x4 + 0xa00) 216 + #define RK3506_PMU_CLKSEL_CON(x) ((x) * 0x4 + 0x300 + RK3506_PMU_CRU_BASE) 217 + #define RK3506_PMU_CLKGATE_CON(x) ((x) * 0x4 + 0x800 + RK3506_PMU_CRU_BASE) 218 + #define RK3506_MODE_CON 0x280 219 + #define RK3506_GLB_CNT_TH 0xc00 220 + #define RK3506_GLB_SRST_FST 0xc08 221 + #define RK3506_GLB_SRST_SND 0xc0c 222 223 #define RK3528_PMU_CRU_BASE 0x10000 224 #define RK3528_PCIE_CRU_BASE 0x20000 ··· 621 const struct rockchip_cpuclk_reg_data *reg_data, 622 const struct rockchip_cpuclk_rate_table *rates, 623 int nrates, void __iomem *reg_base, spinlock_t *lock); 624 + 625 + struct clk *rockchip_clk_register_cpuclk_multi_pll(const char *name, 626 + const char *const *parent_names, 627 + u8 num_parents, void __iomem *base, 628 + int muxdiv_offset, u8 mux_shift, 629 + u8 mux_width, u8 mux_flags, 630 + int div_offset, u8 div_shift, 631 + u8 div_width, u8 div_flags, 632 + unsigned long flags, spinlock_t *lock, 633 + const struct rockchip_cpuclk_rate_table *rates, 634 + int nrates); 635 636 struct clk *rockchip_clk_register_mmc(const char *name, 637 const char *const *parent_names, u8 num_parents, ··· 1208 const struct rockchip_cpuclk_reg_data *reg_data, 1209 const struct rockchip_cpuclk_rate_table *rates, 1210 int nrates); 1211 + void rockchip_clk_register_armclk_multi_pll(struct rockchip_clk_provider *ctx, 1212 + struct rockchip_clk_branch *list, 1213 + const struct rockchip_cpuclk_rate_table *rates, 1214 + int nrates); 1215 void rockchip_clk_protect_critical(const char *const clocks[], int nclocks); 1216 void rockchip_register_restart_notifier(struct rockchip_clk_provider *ctx, 1217 unsigned int reg, void (*cb)(void)); ··· 1246 return rockchip_register_softrst_lut(np, NULL, num_regs, base, flags); 1247 } 1248 1249 + void rv1126b_rst_init(struct device_node *np, void __iomem *reg_base); 1250 + void rk3506_rst_init(struct device_node *np, void __iomem *reg_base); 1251 void rk3528_rst_init(struct device_node *np, void __iomem *reg_base); 1252 void rk3562_rst_init(struct device_node *np, void __iomem *reg_base); 1253 void rk3576_rst_init(struct device_node *np, void __iomem *reg_base);
+226
drivers/clk/rockchip/rst-rk3506.c
···
··· 1 + // SPDX-License-Identifier: GPL-2.0-or-later 2 + /* 3 + * Copyright (c) 2025 Rockchip Electronics Co., Ltd. 4 + * Author: Finley Xiao <finley.xiao@rock-chips.com> 5 + */ 6 + 7 + #include <linux/module.h> 8 + #include <linux/of.h> 9 + #include <dt-bindings/reset/rockchip,rk3506-cru.h> 10 + #include "clk.h" 11 + 12 + /* 0xFF9A0000 + 0x0A00 */ 13 + #define RK3506_CRU_RESET_OFFSET(id, reg, bit) [id] = (0 + reg * 16 + bit) 14 + 15 + /* mapping table for reset ID to register offset */ 16 + static const int rk3506_register_offset[] = { 17 + /* CRU-->SOFTRST_CON00 */ 18 + RK3506_CRU_RESET_OFFSET(SRST_NCOREPORESET0_AC, 0, 0), 19 + RK3506_CRU_RESET_OFFSET(SRST_NCOREPORESET1_AC, 0, 1), 20 + RK3506_CRU_RESET_OFFSET(SRST_NCOREPORESET2_AC, 0, 2), 21 + RK3506_CRU_RESET_OFFSET(SRST_NCORESET0_AC, 0, 4), 22 + RK3506_CRU_RESET_OFFSET(SRST_NCORESET1_AC, 0, 5), 23 + RK3506_CRU_RESET_OFFSET(SRST_NCORESET2_AC, 0, 6), 24 + RK3506_CRU_RESET_OFFSET(SRST_NL2RESET_AC, 0, 8), 25 + RK3506_CRU_RESET_OFFSET(SRST_A_CORE_BIU_AC, 0, 9), 26 + RK3506_CRU_RESET_OFFSET(SRST_H_M0_AC, 0, 10), 27 + 28 + /* CRU-->SOFTRST_CON02 */ 29 + RK3506_CRU_RESET_OFFSET(SRST_NDBGRESET, 2, 10), 30 + RK3506_CRU_RESET_OFFSET(SRST_P_CORE_BIU, 2, 14), 31 + RK3506_CRU_RESET_OFFSET(SRST_PMU, 2, 15), 32 + 33 + /* CRU-->SOFTRST_CON03 */ 34 + RK3506_CRU_RESET_OFFSET(SRST_P_DBG, 3, 1), 35 + RK3506_CRU_RESET_OFFSET(SRST_POT_DBG, 3, 2), 36 + RK3506_CRU_RESET_OFFSET(SRST_P_CORE_GRF, 3, 4), 37 + RK3506_CRU_RESET_OFFSET(SRST_CORE_EMA_DETECT, 3, 6), 38 + RK3506_CRU_RESET_OFFSET(SRST_REF_PVTPLL_CORE, 3, 7), 39 + RK3506_CRU_RESET_OFFSET(SRST_P_GPIO1, 3, 8), 40 + RK3506_CRU_RESET_OFFSET(SRST_DB_GPIO1, 3, 9), 41 + 42 + /* CRU-->SOFTRST_CON04 */ 43 + RK3506_CRU_RESET_OFFSET(SRST_A_CORE_PERI_BIU, 4, 3), 44 + RK3506_CRU_RESET_OFFSET(SRST_A_DSMC, 4, 5), 45 + RK3506_CRU_RESET_OFFSET(SRST_P_DSMC, 4, 6), 46 + RK3506_CRU_RESET_OFFSET(SRST_FLEXBUS, 4, 7), 47 + RK3506_CRU_RESET_OFFSET(SRST_A_FLEXBUS, 4, 9), 48 + RK3506_CRU_RESET_OFFSET(SRST_H_FLEXBUS, 4, 10), 49 + RK3506_CRU_RESET_OFFSET(SRST_A_DSMC_SLV, 4, 11), 50 + RK3506_CRU_RESET_OFFSET(SRST_H_DSMC_SLV, 4, 12), 51 + RK3506_CRU_RESET_OFFSET(SRST_DSMC_SLV, 4, 13), 52 + 53 + /* CRU-->SOFTRST_CON05 */ 54 + RK3506_CRU_RESET_OFFSET(SRST_A_BUS_BIU, 5, 3), 55 + RK3506_CRU_RESET_OFFSET(SRST_H_BUS_BIU, 5, 4), 56 + RK3506_CRU_RESET_OFFSET(SRST_P_BUS_BIU, 5, 5), 57 + RK3506_CRU_RESET_OFFSET(SRST_A_SYSRAM, 5, 6), 58 + RK3506_CRU_RESET_OFFSET(SRST_H_SYSRAM, 5, 7), 59 + RK3506_CRU_RESET_OFFSET(SRST_A_DMAC0, 5, 8), 60 + RK3506_CRU_RESET_OFFSET(SRST_A_DMAC1, 5, 9), 61 + RK3506_CRU_RESET_OFFSET(SRST_H_M0, 5, 10), 62 + RK3506_CRU_RESET_OFFSET(SRST_M0_JTAG, 5, 11), 63 + RK3506_CRU_RESET_OFFSET(SRST_H_CRYPTO, 5, 15), 64 + 65 + /* CRU-->SOFTRST_CON06 */ 66 + RK3506_CRU_RESET_OFFSET(SRST_H_RNG, 6, 0), 67 + RK3506_CRU_RESET_OFFSET(SRST_P_BUS_GRF, 6, 1), 68 + RK3506_CRU_RESET_OFFSET(SRST_P_TIMER0, 6, 2), 69 + RK3506_CRU_RESET_OFFSET(SRST_TIMER0_CH0, 6, 3), 70 + RK3506_CRU_RESET_OFFSET(SRST_TIMER0_CH1, 6, 4), 71 + RK3506_CRU_RESET_OFFSET(SRST_TIMER0_CH2, 6, 5), 72 + RK3506_CRU_RESET_OFFSET(SRST_TIMER0_CH3, 6, 6), 73 + RK3506_CRU_RESET_OFFSET(SRST_TIMER0_CH4, 6, 7), 74 + RK3506_CRU_RESET_OFFSET(SRST_TIMER0_CH5, 6, 8), 75 + RK3506_CRU_RESET_OFFSET(SRST_P_WDT0, 6, 9), 76 + RK3506_CRU_RESET_OFFSET(SRST_T_WDT0, 6, 10), 77 + RK3506_CRU_RESET_OFFSET(SRST_P_WDT1, 6, 11), 78 + RK3506_CRU_RESET_OFFSET(SRST_T_WDT1, 6, 12), 79 + RK3506_CRU_RESET_OFFSET(SRST_P_MAILBOX, 6, 13), 80 + RK3506_CRU_RESET_OFFSET(SRST_P_INTMUX, 6, 14), 81 + RK3506_CRU_RESET_OFFSET(SRST_P_SPINLOCK, 6, 15), 82 + 83 + /* CRU-->SOFTRST_CON07 */ 84 + RK3506_CRU_RESET_OFFSET(SRST_P_DDRC, 7, 0), 85 + RK3506_CRU_RESET_OFFSET(SRST_H_DDRPHY, 7, 1), 86 + RK3506_CRU_RESET_OFFSET(SRST_P_DDRMON, 7, 2), 87 + RK3506_CRU_RESET_OFFSET(SRST_DDRMON_OSC, 7, 3), 88 + RK3506_CRU_RESET_OFFSET(SRST_P_DDR_LPC, 7, 4), 89 + RK3506_CRU_RESET_OFFSET(SRST_H_USBOTG0, 7, 5), 90 + RK3506_CRU_RESET_OFFSET(SRST_USBOTG0_ADP, 7, 7), 91 + RK3506_CRU_RESET_OFFSET(SRST_H_USBOTG1, 7, 8), 92 + RK3506_CRU_RESET_OFFSET(SRST_USBOTG1_ADP, 7, 10), 93 + RK3506_CRU_RESET_OFFSET(SRST_P_USBPHY, 7, 11), 94 + RK3506_CRU_RESET_OFFSET(SRST_USBPHY_POR, 7, 12), 95 + RK3506_CRU_RESET_OFFSET(SRST_USBPHY_OTG0, 7, 13), 96 + RK3506_CRU_RESET_OFFSET(SRST_USBPHY_OTG1, 7, 14), 97 + 98 + /* CRU-->SOFTRST_CON08 */ 99 + RK3506_CRU_RESET_OFFSET(SRST_A_DMA2DDR, 8, 0), 100 + RK3506_CRU_RESET_OFFSET(SRST_P_DMA2DDR, 8, 1), 101 + 102 + /* CRU-->SOFTRST_CON09 */ 103 + RK3506_CRU_RESET_OFFSET(SRST_USBOTG0_UTMI, 9, 0), 104 + RK3506_CRU_RESET_OFFSET(SRST_USBOTG1_UTMI, 9, 1), 105 + 106 + /* CRU-->SOFTRST_CON10 */ 107 + RK3506_CRU_RESET_OFFSET(SRST_A_DDRC_0, 10, 0), 108 + RK3506_CRU_RESET_OFFSET(SRST_A_DDRC_1, 10, 1), 109 + RK3506_CRU_RESET_OFFSET(SRST_A_DDR_BIU, 10, 2), 110 + RK3506_CRU_RESET_OFFSET(SRST_DDRC, 10, 3), 111 + RK3506_CRU_RESET_OFFSET(SRST_DDRMON, 10, 4), 112 + 113 + /* CRU-->SOFTRST_CON11 */ 114 + RK3506_CRU_RESET_OFFSET(SRST_H_LSPERI_BIU, 11, 2), 115 + RK3506_CRU_RESET_OFFSET(SRST_P_UART0, 11, 4), 116 + RK3506_CRU_RESET_OFFSET(SRST_P_UART1, 11, 5), 117 + RK3506_CRU_RESET_OFFSET(SRST_P_UART2, 11, 6), 118 + RK3506_CRU_RESET_OFFSET(SRST_P_UART3, 11, 7), 119 + RK3506_CRU_RESET_OFFSET(SRST_P_UART4, 11, 8), 120 + RK3506_CRU_RESET_OFFSET(SRST_UART0, 11, 9), 121 + RK3506_CRU_RESET_OFFSET(SRST_UART1, 11, 10), 122 + RK3506_CRU_RESET_OFFSET(SRST_UART2, 11, 11), 123 + RK3506_CRU_RESET_OFFSET(SRST_UART3, 11, 12), 124 + RK3506_CRU_RESET_OFFSET(SRST_UART4, 11, 13), 125 + RK3506_CRU_RESET_OFFSET(SRST_P_I2C0, 11, 14), 126 + RK3506_CRU_RESET_OFFSET(SRST_I2C0, 11, 15), 127 + 128 + /* CRU-->SOFTRST_CON12 */ 129 + RK3506_CRU_RESET_OFFSET(SRST_P_I2C1, 12, 0), 130 + RK3506_CRU_RESET_OFFSET(SRST_I2C1, 12, 1), 131 + RK3506_CRU_RESET_OFFSET(SRST_P_I2C2, 12, 2), 132 + RK3506_CRU_RESET_OFFSET(SRST_I2C2, 12, 3), 133 + RK3506_CRU_RESET_OFFSET(SRST_P_PWM1, 12, 4), 134 + RK3506_CRU_RESET_OFFSET(SRST_PWM1, 12, 5), 135 + RK3506_CRU_RESET_OFFSET(SRST_P_SPI0, 12, 10), 136 + RK3506_CRU_RESET_OFFSET(SRST_SPI0, 12, 11), 137 + RK3506_CRU_RESET_OFFSET(SRST_P_SPI1, 12, 12), 138 + RK3506_CRU_RESET_OFFSET(SRST_SPI1, 12, 13), 139 + RK3506_CRU_RESET_OFFSET(SRST_P_GPIO2, 12, 14), 140 + RK3506_CRU_RESET_OFFSET(SRST_DB_GPIO2, 12, 15), 141 + 142 + /* CRU-->SOFTRST_CON13 */ 143 + RK3506_CRU_RESET_OFFSET(SRST_P_GPIO3, 13, 0), 144 + RK3506_CRU_RESET_OFFSET(SRST_DB_GPIO3, 13, 1), 145 + RK3506_CRU_RESET_OFFSET(SRST_P_GPIO4, 13, 2), 146 + RK3506_CRU_RESET_OFFSET(SRST_DB_GPIO4, 13, 3), 147 + RK3506_CRU_RESET_OFFSET(SRST_H_CAN0, 13, 4), 148 + RK3506_CRU_RESET_OFFSET(SRST_CAN0, 13, 5), 149 + RK3506_CRU_RESET_OFFSET(SRST_H_CAN1, 13, 6), 150 + RK3506_CRU_RESET_OFFSET(SRST_CAN1, 13, 7), 151 + RK3506_CRU_RESET_OFFSET(SRST_H_PDM, 13, 8), 152 + RK3506_CRU_RESET_OFFSET(SRST_M_PDM, 13, 9), 153 + RK3506_CRU_RESET_OFFSET(SRST_PDM, 13, 10), 154 + RK3506_CRU_RESET_OFFSET(SRST_SPDIFTX, 13, 11), 155 + RK3506_CRU_RESET_OFFSET(SRST_H_SPDIFTX, 13, 12), 156 + RK3506_CRU_RESET_OFFSET(SRST_H_SPDIFRX, 13, 13), 157 + RK3506_CRU_RESET_OFFSET(SRST_SPDIFRX, 13, 14), 158 + RK3506_CRU_RESET_OFFSET(SRST_M_SAI0, 13, 15), 159 + 160 + /* CRU-->SOFTRST_CON14 */ 161 + RK3506_CRU_RESET_OFFSET(SRST_H_SAI0, 14, 0), 162 + RK3506_CRU_RESET_OFFSET(SRST_M_SAI1, 14, 2), 163 + RK3506_CRU_RESET_OFFSET(SRST_H_SAI1, 14, 3), 164 + RK3506_CRU_RESET_OFFSET(SRST_H_ASRC0, 14, 5), 165 + RK3506_CRU_RESET_OFFSET(SRST_ASRC0, 14, 6), 166 + RK3506_CRU_RESET_OFFSET(SRST_H_ASRC1, 14, 7), 167 + RK3506_CRU_RESET_OFFSET(SRST_ASRC1, 14, 8), 168 + 169 + /* CRU-->SOFTRST_CON17 */ 170 + RK3506_CRU_RESET_OFFSET(SRST_H_HSPERI_BIU, 17, 4), 171 + RK3506_CRU_RESET_OFFSET(SRST_H_SDMMC, 17, 7), 172 + RK3506_CRU_RESET_OFFSET(SRST_H_FSPI, 17, 8), 173 + RK3506_CRU_RESET_OFFSET(SRST_S_FSPI, 17, 9), 174 + RK3506_CRU_RESET_OFFSET(SRST_P_SPI2, 17, 10), 175 + RK3506_CRU_RESET_OFFSET(SRST_A_MAC0, 17, 11), 176 + RK3506_CRU_RESET_OFFSET(SRST_A_MAC1, 17, 12), 177 + 178 + /* CRU-->SOFTRST_CON18 */ 179 + RK3506_CRU_RESET_OFFSET(SRST_M_SAI2, 18, 2), 180 + RK3506_CRU_RESET_OFFSET(SRST_H_SAI2, 18, 3), 181 + RK3506_CRU_RESET_OFFSET(SRST_H_SAI3, 18, 6), 182 + RK3506_CRU_RESET_OFFSET(SRST_M_SAI3, 18, 7), 183 + RK3506_CRU_RESET_OFFSET(SRST_H_SAI4, 18, 10), 184 + RK3506_CRU_RESET_OFFSET(SRST_M_SAI4, 18, 11), 185 + RK3506_CRU_RESET_OFFSET(SRST_H_DSM, 18, 12), 186 + RK3506_CRU_RESET_OFFSET(SRST_M_DSM, 18, 13), 187 + RK3506_CRU_RESET_OFFSET(SRST_P_AUDIO_ADC, 18, 14), 188 + RK3506_CRU_RESET_OFFSET(SRST_M_AUDIO_ADC, 18, 15), 189 + 190 + /* CRU-->SOFTRST_CON19 */ 191 + RK3506_CRU_RESET_OFFSET(SRST_P_SARADC, 19, 0), 192 + RK3506_CRU_RESET_OFFSET(SRST_SARADC, 19, 1), 193 + RK3506_CRU_RESET_OFFSET(SRST_SARADC_PHY, 19, 2), 194 + RK3506_CRU_RESET_OFFSET(SRST_P_OTPC_NS, 19, 3), 195 + RK3506_CRU_RESET_OFFSET(SRST_SBPI_OTPC_NS, 19, 4), 196 + RK3506_CRU_RESET_OFFSET(SRST_USER_OTPC_NS, 19, 5), 197 + RK3506_CRU_RESET_OFFSET(SRST_P_UART5, 19, 6), 198 + RK3506_CRU_RESET_OFFSET(SRST_UART5, 19, 7), 199 + RK3506_CRU_RESET_OFFSET(SRST_P_GPIO234_IOC, 19, 8), 200 + 201 + /* CRU-->SOFTRST_CON21 */ 202 + RK3506_CRU_RESET_OFFSET(SRST_A_VIO_BIU, 21, 3), 203 + RK3506_CRU_RESET_OFFSET(SRST_H_VIO_BIU, 21, 4), 204 + RK3506_CRU_RESET_OFFSET(SRST_H_RGA, 21, 6), 205 + RK3506_CRU_RESET_OFFSET(SRST_A_RGA, 21, 7), 206 + RK3506_CRU_RESET_OFFSET(SRST_CORE_RGA, 21, 8), 207 + RK3506_CRU_RESET_OFFSET(SRST_A_VOP, 21, 9), 208 + RK3506_CRU_RESET_OFFSET(SRST_H_VOP, 21, 10), 209 + RK3506_CRU_RESET_OFFSET(SRST_VOP, 21, 11), 210 + RK3506_CRU_RESET_OFFSET(SRST_P_DPHY, 21, 12), 211 + RK3506_CRU_RESET_OFFSET(SRST_P_DSI_HOST, 21, 13), 212 + RK3506_CRU_RESET_OFFSET(SRST_P_TSADC, 21, 14), 213 + RK3506_CRU_RESET_OFFSET(SRST_TSADC, 21, 15), 214 + 215 + /* CRU-->SOFTRST_CON22 */ 216 + RK3506_CRU_RESET_OFFSET(SRST_P_GPIO1_IOC, 22, 1), 217 + }; 218 + 219 + void rk3506_rst_init(struct device_node *np, void __iomem *reg_base) 220 + { 221 + rockchip_register_softrst_lut(np, 222 + rk3506_register_offset, 223 + ARRAY_SIZE(rk3506_register_offset), 224 + reg_base + RK3506_SOFTRST_CON(0), 225 + ROCKCHIP_SOFTRST_HIWORD_MASK); 226 + }
+443
drivers/clk/rockchip/rst-rv1126b.c
···
··· 1 + // SPDX-License-Identifier: GPL-2.0-or-later 2 + /* 3 + * Copyright (c) 2025 Rockchip Electronics Co., Ltd. 4 + * Author: Elaine Zhang <zhangqing@rock-chips.com> 5 + */ 6 + 7 + #include <linux/module.h> 8 + #include <linux/of.h> 9 + #include <dt-bindings/reset/rockchip,rv1126b-cru.h> 10 + #include "clk.h" 11 + 12 + /* 0x20000000 + 0x0A00 */ 13 + #define TOPCRU_RESET_OFFSET(id, reg, bit) [id] = (0x0 * 4 + reg * 16 + bit) 14 + /* 0x20010000 + 0x0A00 */ 15 + #define BUSCRU_RESET_OFFSET(id, reg, bit) [id] = (0x10000 * 4 + reg * 16 + bit) 16 + /* 0x20020000 + 0x0A00 */ 17 + #define PERICRU_RESET_OFFSET(id, reg, bit) [id] = (0x20000 * 4 + reg * 16 + bit) 18 + /* 0x20030000 + 0x0A00 */ 19 + #define CORECRU_RESET_OFFSET(id, reg, bit) [id] = (0x30000 * 4 + reg * 16 + bit) 20 + /* 0x20040000 + 0x0A00 */ 21 + #define PMUCRU_RESET_OFFSET(id, reg, bit) [id] = (0x40000 * 4 + reg * 16 + bit) 22 + /* 0x20050000 + 0x0A00 */ 23 + #define PMU1CRU_RESET_OFFSET(id, reg, bit) [id] = (0x50000 * 4 + reg * 16 + bit) 24 + /* 0x20060000 + 0x0A00 */ 25 + #define DDRCRU_RESET_OFFSET(id, reg, bit) [id] = (0x60000 * 4 + reg * 16 + bit) 26 + /* 0x20068000 + 0x0A00 */ 27 + #define SUBDDRCRU_RESET_OFFSET(id, reg, bit) [id] = (0x68000 * 4 + reg * 16 + bit) 28 + /* 0x20070000 + 0x0A00 */ 29 + #define VICRU_RESET_OFFSET(id, reg, bit) [id] = (0x70000 * 4 + reg * 16 + bit) 30 + /* 0x20080000 + 0x0A00 */ 31 + #define VEPUCRU_RESET_OFFSET(id, reg, bit) [id] = (0x80000 * 4 + reg * 16 + bit) 32 + /* 0x20090000 + 0x0A00 */ 33 + #define NPUCRU_RESET_OFFSET(id, reg, bit) [id] = (0x90000 * 4 + reg * 16 + bit) 34 + /* 0x200A0000 + 0x0A00 */ 35 + #define VDOCRU_RESET_OFFSET(id, reg, bit) [id] = (0xA0000 * 4 + reg * 16 + bit) 36 + /* 0x200B0000 + 0x0A00 */ 37 + #define VCPCRU_RESET_OFFSET(id, reg, bit) [id] = (0xB0000 * 4 + reg * 16 + bit) 38 + 39 + /* =================mapping table for reset ID to register offset================== */ 40 + static const int rv1126b_register_offset[] = { 41 + /* TOPCRU-->SOFTRST_CON00 */ 42 + 43 + /* TOPCRU-->SOFTRST_CON15 */ 44 + TOPCRU_RESET_OFFSET(SRST_P_CRU, 15, 1), 45 + TOPCRU_RESET_OFFSET(SRST_P_CRU_BIU, 15, 2), 46 + 47 + /* BUSCRU-->SOFTRST_CON00 */ 48 + BUSCRU_RESET_OFFSET(SRST_A_TOP_BIU, 0, 0), 49 + BUSCRU_RESET_OFFSET(SRST_A_RKCE_BIU, 0, 1), 50 + BUSCRU_RESET_OFFSET(SRST_A_BUS_BIU, 0, 2), 51 + BUSCRU_RESET_OFFSET(SRST_H_BUS_BIU, 0, 3), 52 + BUSCRU_RESET_OFFSET(SRST_P_BUS_BIU, 0, 4), 53 + BUSCRU_RESET_OFFSET(SRST_P_CRU_BUS, 0, 5), 54 + BUSCRU_RESET_OFFSET(SRST_P_SYS_GRF, 0, 6), 55 + BUSCRU_RESET_OFFSET(SRST_H_BOOTROM, 0, 7), 56 + BUSCRU_RESET_OFFSET(SRST_A_GIC400, 0, 8), 57 + BUSCRU_RESET_OFFSET(SRST_A_SPINLOCK, 0, 9), 58 + BUSCRU_RESET_OFFSET(SRST_P_WDT_NS, 0, 10), 59 + BUSCRU_RESET_OFFSET(SRST_T_WDT_NS, 0, 11), 60 + 61 + /* BUSCRU-->SOFTRST_CON01 */ 62 + BUSCRU_RESET_OFFSET(SRST_P_WDT_HPMCU, 1, 0), 63 + BUSCRU_RESET_OFFSET(SRST_T_WDT_HPMCU, 1, 1), 64 + BUSCRU_RESET_OFFSET(SRST_H_CACHE, 1, 2), 65 + BUSCRU_RESET_OFFSET(SRST_P_HPMCU_MAILBOX, 1, 3), 66 + BUSCRU_RESET_OFFSET(SRST_P_HPMCU_INTMUX, 1, 4), 67 + BUSCRU_RESET_OFFSET(SRST_HPMCU_FULL_CLUSTER, 1, 5), 68 + BUSCRU_RESET_OFFSET(SRST_HPMCU_PWUP, 1, 6), 69 + BUSCRU_RESET_OFFSET(SRST_HPMCU_ONLY_CORE, 1, 7), 70 + BUSCRU_RESET_OFFSET(SRST_T_HPMCU_JTAG, 1, 8), 71 + BUSCRU_RESET_OFFSET(SRST_P_RKDMA, 1, 11), 72 + BUSCRU_RESET_OFFSET(SRST_A_RKDMA, 1, 12), 73 + 74 + /* BUSCRU-->SOFTRST_CON02 */ 75 + BUSCRU_RESET_OFFSET(SRST_P_DCF, 2, 0), 76 + BUSCRU_RESET_OFFSET(SRST_A_DCF, 2, 1), 77 + BUSCRU_RESET_OFFSET(SRST_H_RGA, 2, 2), 78 + BUSCRU_RESET_OFFSET(SRST_A_RGA, 2, 3), 79 + BUSCRU_RESET_OFFSET(SRST_CORE_RGA, 2, 4), 80 + BUSCRU_RESET_OFFSET(SRST_P_TIMER, 2, 5), 81 + BUSCRU_RESET_OFFSET(SRST_TIMER0, 2, 6), 82 + BUSCRU_RESET_OFFSET(SRST_TIMER1, 2, 7), 83 + BUSCRU_RESET_OFFSET(SRST_TIMER2, 2, 8), 84 + BUSCRU_RESET_OFFSET(SRST_TIMER3, 2, 9), 85 + BUSCRU_RESET_OFFSET(SRST_TIMER4, 2, 10), 86 + BUSCRU_RESET_OFFSET(SRST_TIMER5, 2, 11), 87 + BUSCRU_RESET_OFFSET(SRST_A_RKCE, 2, 12), 88 + BUSCRU_RESET_OFFSET(SRST_PKA_RKCE, 2, 13), 89 + BUSCRU_RESET_OFFSET(SRST_H_RKRNG_S, 2, 14), 90 + BUSCRU_RESET_OFFSET(SRST_H_RKRNG_NS, 2, 15), 91 + 92 + /* BUSCRU-->SOFTRST_CON03 */ 93 + BUSCRU_RESET_OFFSET(SRST_P_I2C0, 3, 0), 94 + BUSCRU_RESET_OFFSET(SRST_I2C0, 3, 1), 95 + BUSCRU_RESET_OFFSET(SRST_P_I2C1, 3, 2), 96 + BUSCRU_RESET_OFFSET(SRST_I2C1, 3, 3), 97 + BUSCRU_RESET_OFFSET(SRST_P_I2C3, 3, 4), 98 + BUSCRU_RESET_OFFSET(SRST_I2C3, 3, 5), 99 + BUSCRU_RESET_OFFSET(SRST_P_I2C4, 3, 6), 100 + BUSCRU_RESET_OFFSET(SRST_I2C4, 3, 7), 101 + BUSCRU_RESET_OFFSET(SRST_P_I2C5, 3, 8), 102 + BUSCRU_RESET_OFFSET(SRST_I2C5, 3, 9), 103 + BUSCRU_RESET_OFFSET(SRST_P_SPI0, 3, 10), 104 + BUSCRU_RESET_OFFSET(SRST_SPI0, 3, 11), 105 + BUSCRU_RESET_OFFSET(SRST_P_SPI1, 3, 12), 106 + BUSCRU_RESET_OFFSET(SRST_SPI1, 3, 13), 107 + 108 + /* BUSCRU-->SOFTRST_CON04 */ 109 + BUSCRU_RESET_OFFSET(SRST_P_PWM0, 4, 0), 110 + BUSCRU_RESET_OFFSET(SRST_PWM0, 4, 1), 111 + BUSCRU_RESET_OFFSET(SRST_P_PWM2, 4, 4), 112 + BUSCRU_RESET_OFFSET(SRST_PWM2, 4, 5), 113 + BUSCRU_RESET_OFFSET(SRST_P_PWM3, 4, 8), 114 + BUSCRU_RESET_OFFSET(SRST_PWM3, 4, 9), 115 + 116 + /* BUSCRU-->SOFTRST_CON05 */ 117 + BUSCRU_RESET_OFFSET(SRST_P_UART1, 5, 0), 118 + BUSCRU_RESET_OFFSET(SRST_S_UART1, 5, 1), 119 + BUSCRU_RESET_OFFSET(SRST_P_UART2, 5, 2), 120 + BUSCRU_RESET_OFFSET(SRST_S_UART2, 5, 3), 121 + BUSCRU_RESET_OFFSET(SRST_P_UART3, 5, 4), 122 + BUSCRU_RESET_OFFSET(SRST_S_UART3, 5, 5), 123 + BUSCRU_RESET_OFFSET(SRST_P_UART4, 5, 6), 124 + BUSCRU_RESET_OFFSET(SRST_S_UART4, 5, 7), 125 + BUSCRU_RESET_OFFSET(SRST_P_UART5, 5, 8), 126 + BUSCRU_RESET_OFFSET(SRST_S_UART5, 5, 9), 127 + BUSCRU_RESET_OFFSET(SRST_P_UART6, 5, 10), 128 + BUSCRU_RESET_OFFSET(SRST_S_UART6, 5, 11), 129 + BUSCRU_RESET_OFFSET(SRST_P_UART7, 5, 12), 130 + BUSCRU_RESET_OFFSET(SRST_S_UART7, 5, 13), 131 + 132 + /* BUSCRU-->SOFTRST_CON06 */ 133 + BUSCRU_RESET_OFFSET(SRST_P_TSADC, 6, 0), 134 + BUSCRU_RESET_OFFSET(SRST_TSADC, 6, 1), 135 + BUSCRU_RESET_OFFSET(SRST_H_SAI0, 6, 2), 136 + BUSCRU_RESET_OFFSET(SRST_M_SAI0, 6, 3), 137 + BUSCRU_RESET_OFFSET(SRST_H_SAI1, 6, 4), 138 + BUSCRU_RESET_OFFSET(SRST_M_SAI1, 6, 5), 139 + BUSCRU_RESET_OFFSET(SRST_H_SAI2, 6, 6), 140 + BUSCRU_RESET_OFFSET(SRST_M_SAI2, 6, 7), 141 + BUSCRU_RESET_OFFSET(SRST_H_RKDSM, 6, 8), 142 + BUSCRU_RESET_OFFSET(SRST_M_RKDSM, 6, 9), 143 + BUSCRU_RESET_OFFSET(SRST_H_PDM, 6, 10), 144 + BUSCRU_RESET_OFFSET(SRST_M_PDM, 6, 11), 145 + BUSCRU_RESET_OFFSET(SRST_PDM, 6, 12), 146 + 147 + /* BUSCRU-->SOFTRST_CON07 */ 148 + BUSCRU_RESET_OFFSET(SRST_H_ASRC0, 7, 0), 149 + BUSCRU_RESET_OFFSET(SRST_ASRC0, 7, 1), 150 + BUSCRU_RESET_OFFSET(SRST_H_ASRC1, 7, 2), 151 + BUSCRU_RESET_OFFSET(SRST_ASRC1, 7, 3), 152 + BUSCRU_RESET_OFFSET(SRST_P_AUDIO_ADC_BUS, 7, 4), 153 + BUSCRU_RESET_OFFSET(SRST_M_AUDIO_ADC_BUS, 7, 5), 154 + BUSCRU_RESET_OFFSET(SRST_P_RKCE, 7, 6), 155 + BUSCRU_RESET_OFFSET(SRST_H_NS_RKCE, 7, 7), 156 + BUSCRU_RESET_OFFSET(SRST_P_OTPC_NS, 7, 8), 157 + BUSCRU_RESET_OFFSET(SRST_SBPI_OTPC_NS, 7, 9), 158 + BUSCRU_RESET_OFFSET(SRST_USER_OTPC_NS, 7, 10), 159 + BUSCRU_RESET_OFFSET(SRST_OTPC_ARB, 7, 11), 160 + BUSCRU_RESET_OFFSET(SRST_P_OTP_MASK, 7, 12), 161 + 162 + /* PERICRU-->SOFTRST_CON00 */ 163 + PERICRU_RESET_OFFSET(SRST_A_PERI_BIU, 0, 0), 164 + PERICRU_RESET_OFFSET(SRST_P_PERI_BIU, 0, 1), 165 + PERICRU_RESET_OFFSET(SRST_P_RTC_BIU, 0, 2), 166 + PERICRU_RESET_OFFSET(SRST_P_CRU_PERI, 0, 3), 167 + PERICRU_RESET_OFFSET(SRST_P_PERI_GRF, 0, 4), 168 + PERICRU_RESET_OFFSET(SRST_P_GPIO1, 0, 5), 169 + PERICRU_RESET_OFFSET(SRST_DB_GPIO1, 0, 6), 170 + PERICRU_RESET_OFFSET(SRST_P_IOC_VCCIO1, 0, 7), 171 + PERICRU_RESET_OFFSET(SRST_A_USB3OTG, 0, 8), 172 + PERICRU_RESET_OFFSET(SRST_H_USB2HOST, 0, 11), 173 + PERICRU_RESET_OFFSET(SRST_H_ARB_USB2HOST, 0, 12), 174 + PERICRU_RESET_OFFSET(SRST_P_RTC_TEST, 0, 13), 175 + 176 + /* PERICRU-->SOFTRST_CON01 */ 177 + PERICRU_RESET_OFFSET(SRST_H_EMMC, 1, 0), 178 + PERICRU_RESET_OFFSET(SRST_H_FSPI0, 1, 1), 179 + PERICRU_RESET_OFFSET(SRST_H_XIP_FSPI0, 1, 2), 180 + PERICRU_RESET_OFFSET(SRST_S_2X_FSPI0, 1, 3), 181 + PERICRU_RESET_OFFSET(SRST_UTMI_USB2HOST, 1, 5), 182 + PERICRU_RESET_OFFSET(SRST_REF_PIPEPHY, 1, 7), 183 + PERICRU_RESET_OFFSET(SRST_P_PIPEPHY, 1, 8), 184 + PERICRU_RESET_OFFSET(SRST_P_PIPEPHY_GRF, 1, 9), 185 + PERICRU_RESET_OFFSET(SRST_P_USB2PHY, 1, 10), 186 + PERICRU_RESET_OFFSET(SRST_POR_USB2PHY, 1, 11), 187 + PERICRU_RESET_OFFSET(SRST_OTG_USB2PHY, 1, 12), 188 + PERICRU_RESET_OFFSET(SRST_HOST_USB2PHY, 1, 13), 189 + 190 + /* CORECRU-->SOFTRST_CON00 */ 191 + CORECRU_RESET_OFFSET(SRST_REF_PVTPLL_CORE, 0, 0), 192 + CORECRU_RESET_OFFSET(SRST_NCOREPORESET0, 0, 1), 193 + CORECRU_RESET_OFFSET(SRST_NCORESET0, 0, 2), 194 + CORECRU_RESET_OFFSET(SRST_NCOREPORESET1, 0, 3), 195 + CORECRU_RESET_OFFSET(SRST_NCORESET1, 0, 4), 196 + CORECRU_RESET_OFFSET(SRST_NCOREPORESET2, 0, 5), 197 + CORECRU_RESET_OFFSET(SRST_NCORESET2, 0, 6), 198 + CORECRU_RESET_OFFSET(SRST_NCOREPORESET3, 0, 7), 199 + CORECRU_RESET_OFFSET(SRST_NCORESET3, 0, 8), 200 + CORECRU_RESET_OFFSET(SRST_NDBGRESET, 0, 9), 201 + CORECRU_RESET_OFFSET(SRST_NL2RESET, 0, 10), 202 + 203 + /* CORECRU-->SOFTRST_CON01 */ 204 + CORECRU_RESET_OFFSET(SRST_A_CORE_BIU, 1, 0), 205 + CORECRU_RESET_OFFSET(SRST_P_CORE_BIU, 1, 1), 206 + CORECRU_RESET_OFFSET(SRST_H_CORE_BIU, 1, 2), 207 + CORECRU_RESET_OFFSET(SRST_P_DBG, 1, 3), 208 + CORECRU_RESET_OFFSET(SRST_POT_DBG, 1, 4), 209 + CORECRU_RESET_OFFSET(SRST_NT_DBG, 1, 5), 210 + CORECRU_RESET_OFFSET(SRST_P_CORE_PVTPLL, 1, 6), 211 + CORECRU_RESET_OFFSET(SRST_P_CRU_CORE, 1, 7), 212 + CORECRU_RESET_OFFSET(SRST_P_CORE_GRF, 1, 8), 213 + CORECRU_RESET_OFFSET(SRST_P_DFT2APB, 1, 10), 214 + 215 + /* PMUCRU-->SOFTRST_CON00 */ 216 + PMUCRU_RESET_OFFSET(SRST_H_PMU_BIU, 0, 0), 217 + PMUCRU_RESET_OFFSET(SRST_P_PMU_GPIO0, 0, 7), 218 + PMUCRU_RESET_OFFSET(SRST_DB_PMU_GPIO0, 0, 8), 219 + PMUCRU_RESET_OFFSET(SRST_P_PMU_HP_TIMER, 0, 10), 220 + PMUCRU_RESET_OFFSET(SRST_PMU_HP_TIMER, 0, 11), 221 + PMUCRU_RESET_OFFSET(SRST_PMU_32K_HP_TIMER, 0, 12), 222 + 223 + /* PMUCRU-->SOFTRST_CON01 */ 224 + PMUCRU_RESET_OFFSET(SRST_P_PWM1, 1, 0), 225 + PMUCRU_RESET_OFFSET(SRST_PWM1, 1, 1), 226 + PMUCRU_RESET_OFFSET(SRST_P_I2C2, 1, 2), 227 + PMUCRU_RESET_OFFSET(SRST_I2C2, 1, 3), 228 + PMUCRU_RESET_OFFSET(SRST_P_UART0, 1, 4), 229 + PMUCRU_RESET_OFFSET(SRST_S_UART0, 1, 5), 230 + 231 + /* PMUCRU-->SOFTRST_CON02 */ 232 + PMUCRU_RESET_OFFSET(SRST_P_RCOSC_CTRL, 2, 0), 233 + PMUCRU_RESET_OFFSET(SRST_REF_RCOSC_CTRL, 2, 2), 234 + PMUCRU_RESET_OFFSET(SRST_P_IOC_PMUIO0, 2, 3), 235 + PMUCRU_RESET_OFFSET(SRST_P_CRU_PMU, 2, 4), 236 + PMUCRU_RESET_OFFSET(SRST_P_PMU_GRF, 2, 5), 237 + PMUCRU_RESET_OFFSET(SRST_PREROLL, 2, 7), 238 + PMUCRU_RESET_OFFSET(SRST_PREROLL_32K, 2, 8), 239 + PMUCRU_RESET_OFFSET(SRST_H_PMU_SRAM, 2, 9), 240 + 241 + /* PMUCRU-->SOFTRST_CON03 */ 242 + PMUCRU_RESET_OFFSET(SRST_P_WDT_LPMCU, 3, 0), 243 + PMUCRU_RESET_OFFSET(SRST_T_WDT_LPMCU, 3, 1), 244 + PMUCRU_RESET_OFFSET(SRST_LPMCU_FULL_CLUSTER, 3, 2), 245 + PMUCRU_RESET_OFFSET(SRST_LPMCU_PWUP, 3, 3), 246 + PMUCRU_RESET_OFFSET(SRST_LPMCU_ONLY_CORE, 3, 4), 247 + PMUCRU_RESET_OFFSET(SRST_T_LPMCU_JTAG, 3, 5), 248 + PMUCRU_RESET_OFFSET(SRST_P_LPMCU_MAILBOX, 3, 6), 249 + 250 + /* PMU1CRU-->SOFTRST_CON00 */ 251 + PMU1CRU_RESET_OFFSET(SRST_P_SPI2AHB, 0, 0), 252 + PMU1CRU_RESET_OFFSET(SRST_H_SPI2AHB, 0, 1), 253 + PMU1CRU_RESET_OFFSET(SRST_H_FSPI1, 0, 2), 254 + PMU1CRU_RESET_OFFSET(SRST_H_XIP_FSPI1, 0, 3), 255 + PMU1CRU_RESET_OFFSET(SRST_S_1X_FSPI1, 0, 4), 256 + PMU1CRU_RESET_OFFSET(SRST_P_IOC_PMUIO1, 0, 5), 257 + PMU1CRU_RESET_OFFSET(SRST_P_CRU_PMU1, 0, 6), 258 + PMU1CRU_RESET_OFFSET(SRST_P_AUDIO_ADC_PMU, 0, 7), 259 + PMU1CRU_RESET_OFFSET(SRST_M_AUDIO_ADC_PMU, 0, 8), 260 + PMU1CRU_RESET_OFFSET(SRST_H_PMU1_BIU, 0, 9), 261 + 262 + /* PMU1CRU-->SOFTRST_CON01 */ 263 + PMU1CRU_RESET_OFFSET(SRST_P_LPDMA, 1, 0), 264 + PMU1CRU_RESET_OFFSET(SRST_A_LPDMA, 1, 1), 265 + PMU1CRU_RESET_OFFSET(SRST_H_LPSAI, 1, 2), 266 + PMU1CRU_RESET_OFFSET(SRST_M_LPSAI, 1, 3), 267 + PMU1CRU_RESET_OFFSET(SRST_P_AOA_TDD, 1, 4), 268 + PMU1CRU_RESET_OFFSET(SRST_P_AOA_FE, 1, 5), 269 + PMU1CRU_RESET_OFFSET(SRST_P_AOA_AAD, 1, 6), 270 + PMU1CRU_RESET_OFFSET(SRST_P_AOA_APB, 1, 7), 271 + PMU1CRU_RESET_OFFSET(SRST_P_AOA_SRAM, 1, 8), 272 + 273 + /* DDRCRU-->SOFTRST_CON00 */ 274 + DDRCRU_RESET_OFFSET(SRST_P_DDR_BIU, 0, 1), 275 + DDRCRU_RESET_OFFSET(SRST_P_DDRC, 0, 2), 276 + DDRCRU_RESET_OFFSET(SRST_P_DDRMON, 0, 3), 277 + DDRCRU_RESET_OFFSET(SRST_TIMER_DDRMON, 0, 4), 278 + DDRCRU_RESET_OFFSET(SRST_P_DFICTRL, 0, 5), 279 + DDRCRU_RESET_OFFSET(SRST_P_DDR_GRF, 0, 6), 280 + DDRCRU_RESET_OFFSET(SRST_P_CRU_DDR, 0, 7), 281 + DDRCRU_RESET_OFFSET(SRST_P_DDRPHY, 0, 8), 282 + DDRCRU_RESET_OFFSET(SRST_P_DMA2DDR, 0, 9), 283 + 284 + /* SUBDDRCRU-->SOFTRST_CON00 */ 285 + SUBDDRCRU_RESET_OFFSET(SRST_A_SYSMEM_BIU, 0, 0), 286 + SUBDDRCRU_RESET_OFFSET(SRST_A_SYSMEM, 0, 1), 287 + SUBDDRCRU_RESET_OFFSET(SRST_A_DDR_BIU, 0, 2), 288 + SUBDDRCRU_RESET_OFFSET(SRST_A_DDRSCH0_CPU, 0, 3), 289 + SUBDDRCRU_RESET_OFFSET(SRST_A_DDRSCH1_NPU, 0, 4), 290 + SUBDDRCRU_RESET_OFFSET(SRST_A_DDRSCH2_POE, 0, 5), 291 + SUBDDRCRU_RESET_OFFSET(SRST_A_DDRSCH3_VI, 0, 6), 292 + SUBDDRCRU_RESET_OFFSET(SRST_CORE_DDRC, 0, 7), 293 + SUBDDRCRU_RESET_OFFSET(SRST_DDRMON, 0, 8), 294 + SUBDDRCRU_RESET_OFFSET(SRST_DFICTRL, 0, 9), 295 + SUBDDRCRU_RESET_OFFSET(SRST_RS, 0, 11), 296 + SUBDDRCRU_RESET_OFFSET(SRST_A_DMA2DDR, 0, 12), 297 + SUBDDRCRU_RESET_OFFSET(SRST_DDRPHY, 0, 13), 298 + 299 + /* VICRU-->SOFTRST_CON00 */ 300 + VICRU_RESET_OFFSET(SRST_REF_PVTPLL_ISP, 0, 0), 301 + VICRU_RESET_OFFSET(SRST_A_GMAC_BIU, 0, 1), 302 + VICRU_RESET_OFFSET(SRST_A_VI_BIU, 0, 2), 303 + VICRU_RESET_OFFSET(SRST_H_VI_BIU, 0, 3), 304 + VICRU_RESET_OFFSET(SRST_P_VI_BIU, 0, 4), 305 + VICRU_RESET_OFFSET(SRST_P_CRU_VI, 0, 5), 306 + VICRU_RESET_OFFSET(SRST_P_VI_GRF, 0, 6), 307 + VICRU_RESET_OFFSET(SRST_P_VI_PVTPLL, 0, 7), 308 + VICRU_RESET_OFFSET(SRST_P_DSMC, 0, 8), 309 + VICRU_RESET_OFFSET(SRST_A_DSMC, 0, 9), 310 + VICRU_RESET_OFFSET(SRST_H_CAN0, 0, 10), 311 + VICRU_RESET_OFFSET(SRST_CAN0, 0, 11), 312 + VICRU_RESET_OFFSET(SRST_H_CAN1, 0, 12), 313 + VICRU_RESET_OFFSET(SRST_CAN1, 0, 13), 314 + 315 + /* VICRU-->SOFTRST_CON01 */ 316 + VICRU_RESET_OFFSET(SRST_P_GPIO2, 1, 0), 317 + VICRU_RESET_OFFSET(SRST_DB_GPIO2, 1, 1), 318 + VICRU_RESET_OFFSET(SRST_P_GPIO4, 1, 2), 319 + VICRU_RESET_OFFSET(SRST_DB_GPIO4, 1, 3), 320 + VICRU_RESET_OFFSET(SRST_P_GPIO5, 1, 4), 321 + VICRU_RESET_OFFSET(SRST_DB_GPIO5, 1, 5), 322 + VICRU_RESET_OFFSET(SRST_P_GPIO6, 1, 6), 323 + VICRU_RESET_OFFSET(SRST_DB_GPIO6, 1, 7), 324 + VICRU_RESET_OFFSET(SRST_P_GPIO7, 1, 8), 325 + VICRU_RESET_OFFSET(SRST_DB_GPIO7, 1, 9), 326 + VICRU_RESET_OFFSET(SRST_P_IOC_VCCIO2, 1, 10), 327 + VICRU_RESET_OFFSET(SRST_P_IOC_VCCIO4, 1, 11), 328 + VICRU_RESET_OFFSET(SRST_P_IOC_VCCIO5, 1, 12), 329 + VICRU_RESET_OFFSET(SRST_P_IOC_VCCIO6, 1, 13), 330 + VICRU_RESET_OFFSET(SRST_P_IOC_VCCIO7, 1, 14), 331 + 332 + /* VICRU-->SOFTRST_CON02 */ 333 + VICRU_RESET_OFFSET(SRST_CORE_ISP, 2, 0), 334 + VICRU_RESET_OFFSET(SRST_H_VICAP, 2, 1), 335 + VICRU_RESET_OFFSET(SRST_A_VICAP, 2, 2), 336 + VICRU_RESET_OFFSET(SRST_D_VICAP, 2, 3), 337 + VICRU_RESET_OFFSET(SRST_ISP0_VICAP, 2, 4), 338 + VICRU_RESET_OFFSET(SRST_CORE_VPSS, 2, 5), 339 + VICRU_RESET_OFFSET(SRST_CORE_VPSL, 2, 6), 340 + VICRU_RESET_OFFSET(SRST_P_CSI2HOST0, 2, 7), 341 + VICRU_RESET_OFFSET(SRST_P_CSI2HOST1, 2, 8), 342 + VICRU_RESET_OFFSET(SRST_P_CSI2HOST2, 2, 9), 343 + VICRU_RESET_OFFSET(SRST_P_CSI2HOST3, 2, 10), 344 + VICRU_RESET_OFFSET(SRST_H_SDMMC0, 2, 11), 345 + VICRU_RESET_OFFSET(SRST_A_GMAC, 2, 12), 346 + VICRU_RESET_OFFSET(SRST_P_CSIPHY0, 2, 13), 347 + VICRU_RESET_OFFSET(SRST_P_CSIPHY1, 2, 14), 348 + 349 + /* VICRU-->SOFTRST_CON03 */ 350 + VICRU_RESET_OFFSET(SRST_P_MACPHY, 3, 0), 351 + VICRU_RESET_OFFSET(SRST_MACPHY, 3, 1), 352 + VICRU_RESET_OFFSET(SRST_P_SARADC1, 3, 2), 353 + VICRU_RESET_OFFSET(SRST_SARADC1, 3, 3), 354 + VICRU_RESET_OFFSET(SRST_P_SARADC2, 3, 5), 355 + VICRU_RESET_OFFSET(SRST_SARADC2, 3, 6), 356 + 357 + /* VEPUCRU-->SOFTRST_CON00 */ 358 + VEPUCRU_RESET_OFFSET(SRST_REF_PVTPLL_VEPU, 0, 0), 359 + VEPUCRU_RESET_OFFSET(SRST_A_VEPU_BIU, 0, 1), 360 + VEPUCRU_RESET_OFFSET(SRST_H_VEPU_BIU, 0, 2), 361 + VEPUCRU_RESET_OFFSET(SRST_P_VEPU_BIU, 0, 3), 362 + VEPUCRU_RESET_OFFSET(SRST_P_CRU_VEPU, 0, 4), 363 + VEPUCRU_RESET_OFFSET(SRST_P_VEPU_GRF, 0, 5), 364 + VEPUCRU_RESET_OFFSET(SRST_P_GPIO3, 0, 7), 365 + VEPUCRU_RESET_OFFSET(SRST_DB_GPIO3, 0, 8), 366 + VEPUCRU_RESET_OFFSET(SRST_P_IOC_VCCIO3, 0, 9), 367 + VEPUCRU_RESET_OFFSET(SRST_P_SARADC0, 0, 10), 368 + VEPUCRU_RESET_OFFSET(SRST_SARADC0, 0, 11), 369 + VEPUCRU_RESET_OFFSET(SRST_H_SDMMC1, 0, 13), 370 + 371 + /* VEPUCRU-->SOFTRST_CON01 */ 372 + VEPUCRU_RESET_OFFSET(SRST_P_VEPU_PVTPLL, 1, 0), 373 + VEPUCRU_RESET_OFFSET(SRST_H_VEPU, 1, 1), 374 + VEPUCRU_RESET_OFFSET(SRST_A_VEPU, 1, 2), 375 + VEPUCRU_RESET_OFFSET(SRST_CORE_VEPU, 1, 3), 376 + 377 + /* NPUCRU-->SOFTRST_CON00 */ 378 + NPUCRU_RESET_OFFSET(SRST_REF_PVTPLL_NPU, 0, 0), 379 + NPUCRU_RESET_OFFSET(SRST_A_NPU_BIU, 0, 2), 380 + NPUCRU_RESET_OFFSET(SRST_H_NPU_BIU, 0, 3), 381 + NPUCRU_RESET_OFFSET(SRST_P_NPU_BIU, 0, 4), 382 + NPUCRU_RESET_OFFSET(SRST_P_CRU_NPU, 0, 5), 383 + NPUCRU_RESET_OFFSET(SRST_P_NPU_GRF, 0, 6), 384 + NPUCRU_RESET_OFFSET(SRST_P_NPU_PVTPLL, 0, 8), 385 + NPUCRU_RESET_OFFSET(SRST_H_RKNN, 0, 9), 386 + NPUCRU_RESET_OFFSET(SRST_A_RKNN, 0, 10), 387 + 388 + /* VDOCRU-->SOFTRST_CON00 */ 389 + VDOCRU_RESET_OFFSET(SRST_A_RKVDEC_BIU, 0, 0), 390 + VDOCRU_RESET_OFFSET(SRST_A_VDO_BIU, 0, 1), 391 + VDOCRU_RESET_OFFSET(SRST_H_VDO_BIU, 0, 3), 392 + VDOCRU_RESET_OFFSET(SRST_P_VDO_BIU, 0, 4), 393 + VDOCRU_RESET_OFFSET(SRST_P_CRU_VDO, 0, 5), 394 + VDOCRU_RESET_OFFSET(SRST_P_VDO_GRF, 0, 6), 395 + VDOCRU_RESET_OFFSET(SRST_A_RKVDEC, 0, 7), 396 + VDOCRU_RESET_OFFSET(SRST_H_RKVDEC, 0, 8), 397 + VDOCRU_RESET_OFFSET(SRST_HEVC_CA_RKVDEC, 0, 9), 398 + VDOCRU_RESET_OFFSET(SRST_A_VOP, 0, 10), 399 + VDOCRU_RESET_OFFSET(SRST_H_VOP, 0, 11), 400 + VDOCRU_RESET_OFFSET(SRST_D_VOP, 0, 12), 401 + VDOCRU_RESET_OFFSET(SRST_A_OOC, 0, 13), 402 + VDOCRU_RESET_OFFSET(SRST_H_OOC, 0, 14), 403 + VDOCRU_RESET_OFFSET(SRST_D_OOC, 0, 15), 404 + 405 + /* VDOCRU-->SOFTRST_CON01 */ 406 + VDOCRU_RESET_OFFSET(SRST_H_RKJPEG, 1, 3), 407 + VDOCRU_RESET_OFFSET(SRST_A_RKJPEG, 1, 4), 408 + VDOCRU_RESET_OFFSET(SRST_A_RKMMU_DECOM, 1, 5), 409 + VDOCRU_RESET_OFFSET(SRST_H_RKMMU_DECOM, 1, 6), 410 + VDOCRU_RESET_OFFSET(SRST_D_DECOM, 1, 8), 411 + VDOCRU_RESET_OFFSET(SRST_A_DECOM, 1, 9), 412 + VDOCRU_RESET_OFFSET(SRST_P_DECOM, 1, 10), 413 + VDOCRU_RESET_OFFSET(SRST_P_MIPI_DSI, 1, 12), 414 + VDOCRU_RESET_OFFSET(SRST_P_DSIPHY, 1, 13), 415 + 416 + /* VCPCRU-->SOFTRST_CON00 */ 417 + VCPCRU_RESET_OFFSET(SRST_REF_PVTPLL_VCP, 0, 0), 418 + VCPCRU_RESET_OFFSET(SRST_A_VCP_BIU, 0, 1), 419 + VCPCRU_RESET_OFFSET(SRST_H_VCP_BIU, 0, 2), 420 + VCPCRU_RESET_OFFSET(SRST_P_VCP_BIU, 0, 3), 421 + VCPCRU_RESET_OFFSET(SRST_P_CRU_VCP, 0, 4), 422 + VCPCRU_RESET_OFFSET(SRST_P_VCP_GRF, 0, 5), 423 + VCPCRU_RESET_OFFSET(SRST_P_VCP_PVTPLL, 0, 7), 424 + VCPCRU_RESET_OFFSET(SRST_A_AISP_BIU, 0, 8), 425 + VCPCRU_RESET_OFFSET(SRST_H_AISP_BIU, 0, 9), 426 + VCPCRU_RESET_OFFSET(SRST_CORE_AISP, 0, 13), 427 + 428 + /* VCPCRU-->SOFTRST_CON01 */ 429 + VCPCRU_RESET_OFFSET(SRST_H_FEC, 1, 0), 430 + VCPCRU_RESET_OFFSET(SRST_A_FEC, 1, 1), 431 + VCPCRU_RESET_OFFSET(SRST_CORE_FEC, 1, 2), 432 + VCPCRU_RESET_OFFSET(SRST_H_AVSP, 1, 3), 433 + VCPCRU_RESET_OFFSET(SRST_A_AVSP, 1, 4), 434 + }; 435 + 436 + void rv1126b_rst_init(struct device_node *np, void __iomem *reg_base) 437 + { 438 + rockchip_register_softrst_lut(np, 439 + rv1126b_register_offset, 440 + ARRAY_SIZE(rv1126b_register_offset), 441 + reg_base + RV1126B_SOFTRST_CON(0), 442 + ROCKCHIP_SOFTRST_HIWORD_MASK); 443 + }
+10
drivers/clk/samsung/Kconfig
··· 95 status of the certains clocks from SoC, but it could also be tied to 96 other devices as an input clock. 97 98 config TESLA_FSD_COMMON_CLK 99 bool "Tesla FSD clock controller support" if COMPILE_TEST 100 depends on COMMON_CLK_SAMSUNG
··· 95 status of the certains clocks from SoC, but it could also be tied to 96 other devices as an input clock. 97 98 + config EXYNOS_ACPM_CLK 99 + tristate "Clock driver controlled via ACPM interface" 100 + depends on EXYNOS_ACPM_PROTOCOL || (COMPILE_TEST && !EXYNOS_ACPM_PROTOCOL) 101 + help 102 + This driver provides support for clocks that are controlled by 103 + firmware that implements the ACPM interface. 104 + 105 + This driver uses the ACPM interface to interact with the firmware 106 + providing all the clock controlls. 107 + 108 config TESLA_FSD_COMMON_CLK 109 bool "Tesla FSD clock controller support" if COMPILE_TEST 110 depends on COMMON_CLK_SAMSUNG
+1
drivers/clk/samsung/Makefile
··· 28 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynosautov9.o 29 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynosautov920.o 30 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-gs101.o 31 obj-$(CONFIG_S3C64XX_COMMON_CLK) += clk-s3c64xx.o 32 obj-$(CONFIG_S5PV210_COMMON_CLK) += clk-s5pv210.o clk-s5pv210-audss.o 33 obj-$(CONFIG_TESLA_FSD_COMMON_CLK) += clk-fsd.o
··· 28 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynosautov9.o 29 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynosautov920.o 30 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-gs101.o 31 + obj-$(CONFIG_EXYNOS_ACPM_CLK) += clk-acpm.o 32 obj-$(CONFIG_S3C64XX_COMMON_CLK) += clk-s3c64xx.o 33 obj-$(CONFIG_S5PV210_COMMON_CLK) += clk-s5pv210.o clk-s5pv210-audss.o 34 obj-$(CONFIG_TESLA_FSD_COMMON_CLK) += clk-fsd.o
+185
drivers/clk/samsung/clk-acpm.c
···
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * Samsung Exynos ACPM protocol based clock driver. 4 + * 5 + * Copyright 2025 Linaro Ltd. 6 + */ 7 + 8 + #include <linux/array_size.h> 9 + #include <linux/clk-provider.h> 10 + #include <linux/container_of.h> 11 + #include <linux/device/devres.h> 12 + #include <linux/device.h> 13 + #include <linux/err.h> 14 + #include <linux/firmware/samsung/exynos-acpm-protocol.h> 15 + #include <linux/module.h> 16 + #include <linux/platform_device.h> 17 + #include <linux/types.h> 18 + 19 + struct acpm_clk { 20 + u32 id; 21 + struct clk_hw hw; 22 + unsigned int mbox_chan_id; 23 + const struct acpm_handle *handle; 24 + }; 25 + 26 + struct acpm_clk_variant { 27 + const char *name; 28 + }; 29 + 30 + struct acpm_clk_driver_data { 31 + const struct acpm_clk_variant *clks; 32 + unsigned int nr_clks; 33 + unsigned int mbox_chan_id; 34 + }; 35 + 36 + #define to_acpm_clk(clk) container_of(clk, struct acpm_clk, hw) 37 + 38 + #define ACPM_CLK(cname) \ 39 + { \ 40 + .name = cname, \ 41 + } 42 + 43 + static const struct acpm_clk_variant gs101_acpm_clks[] = { 44 + ACPM_CLK("mif"), 45 + ACPM_CLK("int"), 46 + ACPM_CLK("cpucl0"), 47 + ACPM_CLK("cpucl1"), 48 + ACPM_CLK("cpucl2"), 49 + ACPM_CLK("g3d"), 50 + ACPM_CLK("g3dl2"), 51 + ACPM_CLK("tpu"), 52 + ACPM_CLK("intcam"), 53 + ACPM_CLK("tnr"), 54 + ACPM_CLK("cam"), 55 + ACPM_CLK("mfc"), 56 + ACPM_CLK("disp"), 57 + ACPM_CLK("bo"), 58 + }; 59 + 60 + static const struct acpm_clk_driver_data acpm_clk_gs101 = { 61 + .clks = gs101_acpm_clks, 62 + .nr_clks = ARRAY_SIZE(gs101_acpm_clks), 63 + .mbox_chan_id = 0, 64 + }; 65 + 66 + static unsigned long acpm_clk_recalc_rate(struct clk_hw *hw, 67 + unsigned long parent_rate) 68 + { 69 + struct acpm_clk *clk = to_acpm_clk(hw); 70 + 71 + return clk->handle->ops.dvfs_ops.get_rate(clk->handle, 72 + clk->mbox_chan_id, clk->id); 73 + } 74 + 75 + static int acpm_clk_determine_rate(struct clk_hw *hw, 76 + struct clk_rate_request *req) 77 + { 78 + /* 79 + * We can't figure out what rate it will be, so just return the 80 + * rate back to the caller. acpm_clk_recalc_rate() will be called 81 + * after the rate is set and we'll know what rate the clock is 82 + * running at then. 83 + */ 84 + return 0; 85 + } 86 + 87 + static int acpm_clk_set_rate(struct clk_hw *hw, unsigned long rate, 88 + unsigned long parent_rate) 89 + { 90 + struct acpm_clk *clk = to_acpm_clk(hw); 91 + 92 + return clk->handle->ops.dvfs_ops.set_rate(clk->handle, 93 + clk->mbox_chan_id, clk->id, rate); 94 + } 95 + 96 + static const struct clk_ops acpm_clk_ops = { 97 + .recalc_rate = acpm_clk_recalc_rate, 98 + .determine_rate = acpm_clk_determine_rate, 99 + .set_rate = acpm_clk_set_rate, 100 + }; 101 + 102 + static int acpm_clk_register(struct device *dev, struct acpm_clk *aclk, 103 + const char *name) 104 + { 105 + struct clk_init_data init = {}; 106 + 107 + init.name = name; 108 + init.ops = &acpm_clk_ops; 109 + aclk->hw.init = &init; 110 + 111 + return devm_clk_hw_register(dev, &aclk->hw); 112 + } 113 + 114 + static int acpm_clk_probe(struct platform_device *pdev) 115 + { 116 + const struct acpm_handle *acpm_handle; 117 + struct clk_hw_onecell_data *clk_data; 118 + struct clk_hw **hws; 119 + struct device *dev = &pdev->dev; 120 + struct acpm_clk *aclks; 121 + unsigned int mbox_chan_id; 122 + int i, err, count; 123 + 124 + acpm_handle = devm_acpm_get_by_node(dev, dev->parent->of_node); 125 + if (IS_ERR(acpm_handle)) 126 + return dev_err_probe(dev, PTR_ERR(acpm_handle), 127 + "Failed to get acpm handle\n"); 128 + 129 + count = acpm_clk_gs101.nr_clks; 130 + mbox_chan_id = acpm_clk_gs101.mbox_chan_id; 131 + 132 + clk_data = devm_kzalloc(dev, struct_size(clk_data, hws, count), 133 + GFP_KERNEL); 134 + if (!clk_data) 135 + return -ENOMEM; 136 + 137 + clk_data->num = count; 138 + hws = clk_data->hws; 139 + 140 + aclks = devm_kcalloc(dev, count, sizeof(*aclks), GFP_KERNEL); 141 + if (!aclks) 142 + return -ENOMEM; 143 + 144 + for (i = 0; i < count; i++) { 145 + struct acpm_clk *aclk = &aclks[i]; 146 + 147 + /* 148 + * The code assumes the clock IDs start from zero, 149 + * are sequential and do not have gaps. 150 + */ 151 + aclk->id = i; 152 + aclk->handle = acpm_handle; 153 + aclk->mbox_chan_id = mbox_chan_id; 154 + 155 + hws[i] = &aclk->hw; 156 + 157 + err = acpm_clk_register(dev, aclk, 158 + acpm_clk_gs101.clks[i].name); 159 + if (err) 160 + return dev_err_probe(dev, err, 161 + "Failed to register clock\n"); 162 + } 163 + 164 + return devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, 165 + clk_data); 166 + } 167 + 168 + static const struct platform_device_id acpm_clk_id[] = { 169 + { "gs101-acpm-clk" }, 170 + {} 171 + }; 172 + MODULE_DEVICE_TABLE(platform, acpm_clk_id); 173 + 174 + static struct platform_driver acpm_clk_driver = { 175 + .driver = { 176 + .name = "acpm-clocks", 177 + }, 178 + .probe = acpm_clk_probe, 179 + .id_table = acpm_clk_id, 180 + }; 181 + module_platform_driver(acpm_clk_driver); 182 + 183 + MODULE_AUTHOR("Tudor Ambarus <tudor.ambarus@linaro.org>"); 184 + MODULE_DESCRIPTION("Samsung Exynos ACPM clock driver"); 185 + MODULE_LICENSE("GPL");
+1 -1
drivers/clk/samsung/clk-exynos-clkout.c
··· 175 clkout->mux.shift = EXYNOS_CLKOUT_MUX_SHIFT; 176 clkout->mux.lock = &clkout->slock; 177 178 clkout->data.hws[0] = clk_hw_register_composite(NULL, "clkout", 179 parent_names, parent_count, &clkout->mux.hw, 180 &clk_mux_ops, NULL, NULL, &clkout->gate.hw, ··· 186 goto err_unmap; 187 } 188 189 - clkout->data.num = EXYNOS_CLKOUT_NR_CLKS; 190 ret = of_clk_add_hw_provider(clkout->np, of_clk_hw_onecell_get, &clkout->data); 191 if (ret) 192 goto err_clk_unreg;
··· 175 clkout->mux.shift = EXYNOS_CLKOUT_MUX_SHIFT; 176 clkout->mux.lock = &clkout->slock; 177 178 + clkout->data.num = EXYNOS_CLKOUT_NR_CLKS; 179 clkout->data.hws[0] = clk_hw_register_composite(NULL, "clkout", 180 parent_names, parent_count, &clkout->mux.hw, 181 &clk_mux_ops, NULL, NULL, &clkout->gate.hw, ··· 185 goto err_unmap; 186 } 187 188 ret = of_clk_add_hw_provider(clkout->np, of_clk_hw_onecell_get, &clkout->data); 189 if (ret) 190 goto err_clk_unreg;
+90
drivers/clk/samsung/clk-exynosautov920.c
··· 27 #define CLKS_NR_HSI0 (CLK_DOUT_HSI0_PCIE_APB + 1) 28 #define CLKS_NR_HSI1 (CLK_MOUT_HSI1_USBDRD + 1) 29 #define CLKS_NR_HSI2 (CLK_DOUT_HSI2_ETHERNET_PTP + 1) 30 31 /* ---- CMU_TOP ------------------------------------------------------------ */ 32 ··· 1823 .clk_name = "noc", 1824 }; 1825 1826 static int __init exynosautov920_cmu_probe(struct platform_device *pdev) 1827 { 1828 const struct samsung_cmu_info *info; ··· 1935 }, { 1936 .compatible = "samsung,exynosautov920-cmu-hsi2", 1937 .data = &hsi2_cmu_info, 1938 }, 1939 { } 1940 };
··· 27 #define CLKS_NR_HSI0 (CLK_DOUT_HSI0_PCIE_APB + 1) 28 #define CLKS_NR_HSI1 (CLK_MOUT_HSI1_USBDRD + 1) 29 #define CLKS_NR_HSI2 (CLK_DOUT_HSI2_ETHERNET_PTP + 1) 30 + #define CLKS_NR_M2M (CLK_DOUT_M2M_NOCP + 1) 31 + #define CLKS_NR_MFC (CLK_DOUT_MFC_NOCP + 1) 32 33 /* ---- CMU_TOP ------------------------------------------------------------ */ 34 ··· 1821 .clk_name = "noc", 1822 }; 1823 1824 + /* ---- CMU_M2M --------------------------------------------------------- */ 1825 + 1826 + /* Register Offset definitions for CMU_M2M (0x1a800000) */ 1827 + #define PLL_CON0_MUX_CLKCMU_M2M_JPEG_USER 0x600 1828 + #define PLL_CON0_MUX_CLKCMU_M2M_NOC_USER 0x610 1829 + #define CLK_CON_DIV_DIV_CLK_M2M_NOCP 0x1800 1830 + 1831 + static const unsigned long m2m_clk_regs[] __initconst = { 1832 + PLL_CON0_MUX_CLKCMU_M2M_JPEG_USER, 1833 + PLL_CON0_MUX_CLKCMU_M2M_NOC_USER, 1834 + CLK_CON_DIV_DIV_CLK_M2M_NOCP, 1835 + }; 1836 + 1837 + /* List of parent clocks for Muxes in CMU_M2M */ 1838 + PNAME(mout_clkcmu_m2m_noc_user_p) = { "oscclk", "dout_clkcmu_m2m_noc" }; 1839 + PNAME(mout_clkcmu_m2m_jpeg_user_p) = { "oscclk", "dout_clkcmu_m2m_jpeg" }; 1840 + 1841 + static const struct samsung_mux_clock m2m_mux_clks[] __initconst = { 1842 + MUX(CLK_MOUT_M2M_JPEG_USER, "mout_clkcmu_m2m_jpeg_user", 1843 + mout_clkcmu_m2m_jpeg_user_p, PLL_CON0_MUX_CLKCMU_M2M_JPEG_USER, 4, 1), 1844 + MUX(CLK_MOUT_M2M_NOC_USER, "mout_clkcmu_m2m_noc_user", 1845 + mout_clkcmu_m2m_noc_user_p, PLL_CON0_MUX_CLKCMU_M2M_NOC_USER, 4, 1), 1846 + }; 1847 + 1848 + static const struct samsung_div_clock m2m_div_clks[] __initconst = { 1849 + DIV(CLK_DOUT_M2M_NOCP, "dout_m2m_nocp", 1850 + "mout_clkcmu_m2m_noc_user", CLK_CON_DIV_DIV_CLK_M2M_NOCP, 1851 + 0, 3), 1852 + }; 1853 + 1854 + static const struct samsung_cmu_info m2m_cmu_info __initconst = { 1855 + .mux_clks = m2m_mux_clks, 1856 + .nr_mux_clks = ARRAY_SIZE(m2m_mux_clks), 1857 + .div_clks = m2m_div_clks, 1858 + .nr_div_clks = ARRAY_SIZE(m2m_div_clks), 1859 + .nr_clk_ids = CLKS_NR_M2M, 1860 + .clk_regs = m2m_clk_regs, 1861 + .nr_clk_regs = ARRAY_SIZE(m2m_clk_regs), 1862 + .clk_name = "noc", 1863 + }; 1864 + 1865 + /* ---- CMU_MFC --------------------------------------------------------- */ 1866 + 1867 + /* Register Offset definitions for CMU_MFC (0x19c00000) */ 1868 + #define PLL_CON0_MUX_CLKCMU_MFC_MFC_USER 0x600 1869 + #define PLL_CON0_MUX_CLKCMU_MFC_WFD_USER 0x610 1870 + #define CLK_CON_DIV_DIV_CLK_MFC_NOCP 0x1800 1871 + 1872 + static const unsigned long mfc_clk_regs[] __initconst = { 1873 + PLL_CON0_MUX_CLKCMU_MFC_MFC_USER, 1874 + PLL_CON0_MUX_CLKCMU_MFC_WFD_USER, 1875 + CLK_CON_DIV_DIV_CLK_MFC_NOCP, 1876 + }; 1877 + 1878 + /* List of parent clocks for Muxes in CMU_MFC */ 1879 + PNAME(mout_clkcmu_mfc_mfc_user_p) = { "oscclk", "dout_clkcmu_mfc_mfc" }; 1880 + PNAME(mout_clkcmu_mfc_wfd_user_p) = { "oscclk", "dout_clkcmu_mfc_wfd" }; 1881 + 1882 + static const struct samsung_mux_clock mfc_mux_clks[] __initconst = { 1883 + MUX(CLK_MOUT_MFC_MFC_USER, "mout_clkcmu_mfc_mfc_user", 1884 + mout_clkcmu_mfc_mfc_user_p, PLL_CON0_MUX_CLKCMU_MFC_MFC_USER, 4, 1), 1885 + MUX(CLK_MOUT_MFC_WFD_USER, "mout_clkcmu_mfc_wfd_user", 1886 + mout_clkcmu_mfc_wfd_user_p, PLL_CON0_MUX_CLKCMU_MFC_WFD_USER, 4, 1), 1887 + }; 1888 + 1889 + static const struct samsung_div_clock mfc_div_clks[] __initconst = { 1890 + DIV(CLK_DOUT_MFC_NOCP, "dout_mfc_nocp", 1891 + "mout_clkcmu_mfc_mfc_user", CLK_CON_DIV_DIV_CLK_MFC_NOCP, 1892 + 0, 3), 1893 + }; 1894 + 1895 + static const struct samsung_cmu_info mfc_cmu_info __initconst = { 1896 + .mux_clks = mfc_mux_clks, 1897 + .nr_mux_clks = ARRAY_SIZE(mfc_mux_clks), 1898 + .div_clks = mfc_div_clks, 1899 + .nr_div_clks = ARRAY_SIZE(mfc_div_clks), 1900 + .nr_clk_ids = CLKS_NR_MFC, 1901 + .clk_regs = mfc_clk_regs, 1902 + .nr_clk_regs = ARRAY_SIZE(mfc_clk_regs), 1903 + .clk_name = "noc", 1904 + }; 1905 + 1906 static int __init exynosautov920_cmu_probe(struct platform_device *pdev) 1907 { 1908 const struct samsung_cmu_info *info; ··· 1851 }, { 1852 .compatible = "samsung,exynosautov920-cmu-hsi2", 1853 .data = &hsi2_cmu_info, 1854 + }, { 1855 + .compatible = "samsung,exynosautov920-cmu-m2m", 1856 + .data = &m2m_cmu_info, 1857 + }, { 1858 + .compatible = "samsung,exynosautov920-cmu-mfc", 1859 + .data = &mfc_cmu_info, 1860 }, 1861 { } 1862 };
+10 -31
drivers/clk/samsung/clk-pll.c
··· 11 #include <linux/iopoll.h> 12 #include <linux/delay.h> 13 #include <linux/slab.h> 14 - #include <linux/timekeeping.h> 15 #include <linux/clk-provider.h> 16 #include <linux/io.h> 17 #include "clk.h" 18 #include "clk-pll.h" 19 20 - #define PLL_TIMEOUT_US 20000U 21 - #define PLL_TIMEOUT_LOOPS 1000000U 22 23 struct samsung_clk_pll { 24 struct clk_hw hw; ··· 69 return 0; 70 } 71 72 - static bool pll_early_timeout = true; 73 - 74 - static int __init samsung_pll_disable_early_timeout(void) 75 - { 76 - pll_early_timeout = false; 77 - return 0; 78 - } 79 - arch_initcall(samsung_pll_disable_early_timeout); 80 - 81 /* Wait until the PLL is locked */ 82 static int samsung_pll_lock_wait(struct samsung_clk_pll *pll, 83 unsigned int reg_mask) 84 { 85 - int i, ret; 86 u32 val; 87 88 /* ··· 82 * initialized, another when the timekeeping is suspended. udelay() also 83 * cannot be used when the clocksource is not running on arm64, since 84 * the current timer is used as cycle counter. So a simple busy loop 85 - * is used here in that special cases. The limit of iterations has been 86 - * derived from experimental measurements of various PLLs on multiple 87 - * Exynos SoC variants. Single register read time was usually in range 88 - * 0.4...1.5 us, never less than 0.4 us. 89 */ 90 - if (pll_early_timeout || timekeeping_suspended) { 91 - i = PLL_TIMEOUT_LOOPS; 92 - while (i-- > 0) { 93 - if (readl_relaxed(pll->con_reg) & reg_mask) 94 - return 0; 95 - 96 - cpu_relax(); 97 - } 98 - ret = -ETIMEDOUT; 99 - } else { 100 - ret = readl_relaxed_poll_timeout_atomic(pll->con_reg, val, 101 - val & reg_mask, 0, PLL_TIMEOUT_US); 102 - } 103 - 104 if (ret < 0) 105 pr_err("Could not lock PLL %s\n", clk_hw_get_name(&pll->hw)); 106
··· 11 #include <linux/iopoll.h> 12 #include <linux/delay.h> 13 #include <linux/slab.h> 14 #include <linux/clk-provider.h> 15 #include <linux/io.h> 16 #include "clk.h" 17 #include "clk-pll.h" 18 19 + #define PLL_TIMEOUT_LOOPS 20000U 20 21 struct samsung_clk_pll { 22 struct clk_hw hw; ··· 71 return 0; 72 } 73 74 /* Wait until the PLL is locked */ 75 static int samsung_pll_lock_wait(struct samsung_clk_pll *pll, 76 unsigned int reg_mask) 77 { 78 + int ret; 79 u32 val; 80 81 /* ··· 93 * initialized, another when the timekeeping is suspended. udelay() also 94 * cannot be used when the clocksource is not running on arm64, since 95 * the current timer is used as cycle counter. So a simple busy loop 96 + * is used here. 97 + * The limit of iterations has been derived from experimental 98 + * measurements of various PLLs on multiple Exynos SoC variants. Single 99 + * register read time was usually in range 0.4...1.5 us, never less than 100 + * 0.4 us. 101 */ 102 + ret = readl_relaxed_poll_timeout_atomic(pll->con_reg, val, 103 + val & reg_mask, 0, 104 + PLL_TIMEOUT_LOOPS); 105 if (ret < 0) 106 pr_err("Could not lock PLL %s\n", clk_hw_get_name(&pll->hw)); 107
+1 -1
drivers/clk/socfpga/Kconfig
··· 13 default ARM && ARCH_INTEL_SOCFPGA 14 15 config CLK_INTEL_SOCFPGA64 16 - bool "Intel Stratix / Agilex / N5X clock controller support" if COMPILE_TEST && (!ARM64 || !ARCH_INTEL_SOCFPGA) 17 default ARM64 && ARCH_INTEL_SOCFPGA 18 19 endif # CLK_INTEL_SOCFPGA
··· 13 default ARM && ARCH_INTEL_SOCFPGA 14 15 config CLK_INTEL_SOCFPGA64 16 + bool "Intel Stratix / Agilex / N5X / Agilex5 clock controller support" if COMPILE_TEST && (!ARM64 || !ARCH_INTEL_SOCFPGA) 17 default ARM64 && ARCH_INTEL_SOCFPGA 18 19 endif # CLK_INTEL_SOCFPGA
+1 -1
drivers/clk/socfpga/Makefile
··· 3 clk-pll-a10.o clk-periph-a10.o clk-gate-a10.o 4 obj-$(CONFIG_CLK_INTEL_SOCFPGA64) += clk-s10.o \ 5 clk-pll-s10.o clk-periph-s10.o clk-gate-s10.o \ 6 - clk-agilex.o
··· 3 clk-pll-a10.o clk-periph-a10.o clk-gate-a10.o 4 obj-$(CONFIG_CLK_INTEL_SOCFPGA64) += clk-s10.o \ 5 clk-pll-s10.o clk-periph-s10.o clk-gate-s10.o \ 6 + clk-agilex.o clk-agilex5.o
+561
drivers/clk/socfpga/clk-agilex5.c
···
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * Copyright (C) 2022-2024, Intel Corporation 4 + * Copyright (C) 2025, Altera Corporation 5 + */ 6 + #include <linux/slab.h> 7 + #include <linux/clk-provider.h> 8 + #include <linux/of.h> 9 + #include <linux/platform_device.h> 10 + #include <dt-bindings/clock/intel,agilex5-clkmgr.h> 11 + #include "stratix10-clk.h" 12 + #include "clk.h" 13 + 14 + /* External parent clocks come from DT via fw_name */ 15 + static const char * const boot_pll_parents[] = { 16 + "osc1", 17 + "cb-intosc-hs-div2-clk", 18 + }; 19 + 20 + static const char * const main_pll_parents[] = { 21 + "osc1", 22 + "cb-intosc-hs-div2-clk", 23 + "f2s-free-clk", 24 + }; 25 + 26 + static const char * const periph_pll_parents[] = { 27 + "osc1", 28 + "cb-intosc-hs-div2-clk", 29 + }; 30 + 31 + /* Core free muxes */ 32 + static const char * const core0_free_mux[] = { 33 + "main_pll_c1", 34 + "peri_pll_c0", 35 + "osc1", 36 + "cb-intosc-hs-div2-clk", 37 + "f2s-free-clk", 38 + }; 39 + 40 + static const char * const core1_free_mux[] = { 41 + "main_pll_c1", 42 + "peri_pll_c0", 43 + "osc1", 44 + "cb-intosc-hs-div2-clk", 45 + "f2s-free-clk", 46 + }; 47 + 48 + static const char * const core2_free_mux[] = { 49 + "main_pll_c0", 50 + "osc1", 51 + "cb-intosc-hs-div2-clk", 52 + "f2s-free-clk", 53 + }; 54 + 55 + static const char * const core3_free_mux[] = { 56 + "main_pll_c0", 57 + "osc1", 58 + "cb-intosc-hs-div2-clk", 59 + "f2s-free-clk", 60 + }; 61 + 62 + static const char * const dsu_free_mux[] = { 63 + "main_pll_c2", 64 + "peri_pll_c0", 65 + "osc1", 66 + "cb-intosc-hs-div2-clk", 67 + "f2s-free-clk", 68 + }; 69 + 70 + static const char * const noc_free_mux[] = { 71 + "main_pll_c3", 72 + "peri_pll_c1", 73 + "osc1", 74 + "cb-intosc-hs-div2-clk", 75 + "f2s-free-clk", 76 + }; 77 + 78 + static const char * const emac_ptp_free_mux[] = { 79 + "main_pll_c3", 80 + "peri_pll_c3", 81 + "osc1", 82 + "cb-intosc-hs-div2-clk", 83 + "f2s-free-clk", 84 + }; 85 + 86 + static const char * const emaca_free_mux[] = { 87 + "main_pll_c2", 88 + "peri_pll_c3", 89 + "osc1", 90 + "cb-intosc-hs-div2-clk", 91 + "f2s-free-clk", 92 + }; 93 + 94 + static const char * const emacb_free_mux[] = { 95 + "main_pll_c3", 96 + "peri_pll_c3", 97 + "osc1", 98 + "cb-intosc-hs-div2-clk", 99 + "f2s-free-clk", 100 + }; 101 + 102 + static const char * const gpio_db_free_mux[] = { 103 + "main_pll_c3", 104 + "peri_pll_c1", 105 + "osc1", 106 + "cb-intosc-hs-div2-clk", 107 + "f2s-free-clk", 108 + }; 109 + 110 + static const char * const psi_ref_free_mux[] = { 111 + "main_pll_c1", 112 + "peri_pll_c3", 113 + "osc1", 114 + "cb-intosc-hs-div2-clk", 115 + "f2s-free-clk", 116 + }; 117 + 118 + static const char * const usb31_free_mux[] = { 119 + "main_pll_c3", 120 + "peri_pll_c2", 121 + "osc1", 122 + "cb-intosc-hs-div2-clk", 123 + "f2s-free-clk", 124 + }; 125 + 126 + static const char * const s2f_user0_free_mux[] = { 127 + "main_pll_c1", 128 + "peri_pll_c3", 129 + "osc1", 130 + "cb-intosc-hs-div2-clk", 131 + "f2s-free-clk", 132 + }; 133 + 134 + static const char * const s2f_user1_free_mux[] = { 135 + "main_pll_c1", 136 + "peri_pll_c3", 137 + "osc1", 138 + "cb-intosc-hs-div2-clk", 139 + "f2s-free-clk", 140 + }; 141 + 142 + /* Secondary muxes between free_clk and boot_clk */ 143 + static const char * const core0_mux[] = { 144 + "core0_free_clk", 145 + "boot_clk", 146 + }; 147 + 148 + static const char * const core1_mux[] = { 149 + "core1_free_clk", 150 + "boot_clk", 151 + }; 152 + 153 + static const char * const core2_mux[] = { 154 + "core2_free_clk", 155 + "boot_clk", 156 + }; 157 + 158 + static const char * const core3_mux[] = { 159 + "core3_free_clk", 160 + "boot_clk", 161 + }; 162 + 163 + static const char * const dsu_mux[] = { 164 + "dsu_free_clk", 165 + "boot_clk", 166 + }; 167 + 168 + static const char * const noc_mux[] = { 169 + "noc_free_clk", 170 + "boot_clk", 171 + }; 172 + 173 + static const char * const emac_mux[] = { 174 + "emaca_free_clk", 175 + "emacb_free_clk", 176 + "boot_clk", 177 + }; 178 + 179 + static const char * const s2f_user0_mux[] = { 180 + "s2f_user0_free_clk", 181 + "boot_clk", 182 + }; 183 + 184 + static const char * const s2f_user1_mux[] = { 185 + "s2f_user1_free_clk", 186 + "boot_clk", 187 + }; 188 + 189 + static const char * const psi_mux[] = { 190 + "psi_ref_free_clk", 191 + "boot_clk", 192 + }; 193 + 194 + static const char * const gpio_db_mux[] = { 195 + "gpio_db_free_clk", 196 + "boot_clk", 197 + }; 198 + 199 + static const char * const emac_ptp_mux[] = { 200 + "emac_ptp_free_clk", 201 + "boot_clk", 202 + }; 203 + 204 + static const char * const usb31_mux[] = { 205 + "usb31_free_clk", 206 + "boot_clk", 207 + }; 208 + 209 + static const struct agilex5_pll_clock agilex5_pll_clks[] = { 210 + { 211 + .id = AGILEX5_BOOT_CLK, 212 + .name = "boot_clk", 213 + .parent_names = boot_pll_parents, 214 + .num_parents = ARRAY_SIZE(boot_pll_parents), 215 + .flags = 0, 216 + .offset = 0x0, 217 + }, 218 + { 219 + .id = AGILEX5_MAIN_PLL_CLK, 220 + .name = "main_pll", 221 + .parent_names = main_pll_parents, 222 + .num_parents = ARRAY_SIZE(main_pll_parents), 223 + .flags = 0, 224 + .offset = 0x48, 225 + }, 226 + { 227 + .id = AGILEX5_PERIPH_PLL_CLK, 228 + .name = "periph_pll", 229 + .parent_names = periph_pll_parents, 230 + .num_parents = ARRAY_SIZE(periph_pll_parents), 231 + .flags = 0, 232 + .offset = 0x9C, 233 + }, 234 + }; 235 + 236 + /* Main PLL C0, C1, C2, C3 and Peri PLL C0, C1, C2, C3. With ping-pong counter. */ 237 + static const struct stratix10_perip_c_clock agilex5_main_perip_c_clks[] = { 238 + { AGILEX5_MAIN_PLL_C0_CLK, "main_pll_c0", "main_pll", NULL, 1, 0, 239 + 0x5C }, 240 + { AGILEX5_MAIN_PLL_C1_CLK, "main_pll_c1", "main_pll", NULL, 1, 0, 241 + 0x60 }, 242 + { AGILEX5_MAIN_PLL_C2_CLK, "main_pll_c2", "main_pll", NULL, 1, 0, 243 + 0x64 }, 244 + { AGILEX5_MAIN_PLL_C3_CLK, "main_pll_c3", "main_pll", NULL, 1, 0, 245 + 0x68 }, 246 + { AGILEX5_PERIPH_PLL_C0_CLK, "peri_pll_c0", "periph_pll", NULL, 1, 0, 247 + 0xB0 }, 248 + { AGILEX5_PERIPH_PLL_C1_CLK, "peri_pll_c1", "periph_pll", NULL, 1, 0, 249 + 0xB4 }, 250 + { AGILEX5_PERIPH_PLL_C2_CLK, "peri_pll_c2", "periph_pll", NULL, 1, 0, 251 + 0xB8 }, 252 + { AGILEX5_PERIPH_PLL_C3_CLK, "peri_pll_c3", "periph_pll", NULL, 1, 0, 253 + 0xBC }, 254 + }; 255 + 256 + /* Non-SW clock-gated enabled clocks */ 257 + static const struct agilex5_perip_cnt_clock agilex5_main_perip_cnt_clks[] = { 258 + { AGILEX5_CORE0_FREE_CLK, "core0_free_clk", core0_free_mux, 259 + ARRAY_SIZE(core0_free_mux), 0, 0x0100, 0, 0, 0}, 260 + { AGILEX5_CORE1_FREE_CLK, "core1_free_clk", core1_free_mux, 261 + ARRAY_SIZE(core1_free_mux), 0, 0x0104, 0, 0, 0}, 262 + { AGILEX5_CORE2_FREE_CLK, "core2_free_clk", core2_free_mux, 263 + ARRAY_SIZE(core2_free_mux), 0, 0x010C, 0, 0, 0}, 264 + { AGILEX5_CORE3_FREE_CLK, "core3_free_clk", core3_free_mux, 265 + ARRAY_SIZE(core3_free_mux), 0, 0x0110, 0, 0, 0}, 266 + { AGILEX5_DSU_FREE_CLK, "dsu_free_clk", dsu_free_mux, 267 + ARRAY_SIZE(dsu_free_mux), 0, 0xfc, 0, 0, 0}, 268 + { AGILEX5_NOC_FREE_CLK, "noc_free_clk", noc_free_mux, 269 + ARRAY_SIZE(noc_free_mux), 0, 0x40, 0, 0, 0 }, 270 + { AGILEX5_EMAC_A_FREE_CLK, "emaca_free_clk", emaca_free_mux, 271 + ARRAY_SIZE(emaca_free_mux), 0, 0xD4, 0, 0x88, 0 }, 272 + { AGILEX5_EMAC_B_FREE_CLK, "emacb_free_clk", emacb_free_mux, 273 + ARRAY_SIZE(emacb_free_mux), 0, 0xD8, 0, 0x88, 1 }, 274 + { AGILEX5_EMAC_PTP_FREE_CLK, "emac_ptp_free_clk", emac_ptp_free_mux, 275 + ARRAY_SIZE(emac_ptp_free_mux), 0, 0xDC, 0, 0x88, 2 }, 276 + { AGILEX5_GPIO_DB_FREE_CLK, "gpio_db_free_clk", gpio_db_free_mux, 277 + ARRAY_SIZE(gpio_db_free_mux), 0, 0xE0, 0, 0x88, 3 }, 278 + { AGILEX5_S2F_USER0_FREE_CLK, "s2f_user0_free_clk", s2f_user0_free_mux, 279 + ARRAY_SIZE(s2f_user0_free_mux), 0, 0xE8, 0, 0x30, 2 }, 280 + { AGILEX5_S2F_USER1_FREE_CLK, "s2f_user1_free_clk", s2f_user1_free_mux, 281 + ARRAY_SIZE(s2f_user1_free_mux), 0, 0xEC, 0, 0x88, 5 }, 282 + { AGILEX5_PSI_REF_FREE_CLK, "psi_ref_free_clk", psi_ref_free_mux, 283 + ARRAY_SIZE(psi_ref_free_mux), 0, 0xF0, 0, 0x88, 6 }, 284 + { AGILEX5_USB31_FREE_CLK, "usb31_free_clk", usb31_free_mux, 285 + ARRAY_SIZE(usb31_free_mux), 0, 0xF8, 0, 0x88, 7}, 286 + }; 287 + 288 + static const char * const cs_pdbg_parents[] = { "cs_at_clk" }; 289 + static const char * const usb31_bus_clk_early_parents[] = { "l4_main_clk" }; 290 + static const char * const l4_mp_clk_parent[] = { "l4_mp_clk" }; 291 + static const char * const l4_sp_clk_parent[] = { "l4_sp_clk" }; 292 + static const char * const dfi_clk_parent[] = { "dfi_clk" }; 293 + 294 + /* SW Clock gate enabled clocks */ 295 + static const struct agilex5_gate_clock agilex5_gate_clks[] = { 296 + { AGILEX5_CORE0_CLK, "core0_clk", core0_mux, 297 + ARRAY_SIZE(core0_mux), 0, 0x24, 8, 0, 0, 0, 0x30, 5, 0 }, 298 + { AGILEX5_CORE1_CLK, "core1_clk", core1_mux, 299 + ARRAY_SIZE(core1_mux), 0, 0x24, 9, 0, 0, 0, 0x30, 5, 0 }, 300 + { AGILEX5_CORE2_CLK, "core2_clk", core2_mux, 301 + ARRAY_SIZE(core2_mux), 0, 0x24, 10, 0, 0, 0, 0x30, 6, 0 }, 302 + { AGILEX5_CORE3_CLK, "core3_clk", core3_mux, 303 + ARRAY_SIZE(core3_mux), 0, 0x24, 11, 0, 0, 0, 0x30, 7, 0 }, 304 + { AGILEX5_MPU_CLK, "dsu_clk", dsu_mux, ARRAY_SIZE(dsu_mux), 0, 0, 0, 305 + 0, 0, 0, 0x34, 4, 0 }, 306 + { AGILEX5_MPU_PERIPH_CLK, "mpu_periph_clk", dsu_mux, 307 + ARRAY_SIZE(dsu_mux), 0, 0, 0, 0x44, 20, 2, 0x34, 4, 0 }, 308 + { AGILEX5_MPU_CCU_CLK, "mpu_ccu_clk", dsu_mux, 309 + ARRAY_SIZE(dsu_mux), 0, 0, 0, 0x44, 18, 2, 0x34, 4, 0 }, 310 + { AGILEX5_L4_MAIN_CLK, "l4_main_clk", noc_mux, ARRAY_SIZE(noc_mux), 311 + CLK_IS_CRITICAL, 0x24, 1, 0, 0, 0, 0, 0, 0 }, 312 + { AGILEX5_L4_MP_CLK, "l4_mp_clk", noc_mux, ARRAY_SIZE(noc_mux), 0, 313 + 0x24, 2, 0x44, 4, 2, 0x30, 1, 0 }, 314 + { AGILEX5_L4_SYS_FREE_CLK, "l4_sys_free_clk", noc_mux, 315 + ARRAY_SIZE(noc_mux), 0, 0, 0, 0x44, 2, 2, 0x30, 1, 0 }, 316 + { AGILEX5_L4_SP_CLK, "l4_sp_clk", noc_mux, ARRAY_SIZE(noc_mux), 317 + CLK_IS_CRITICAL, 0x24, 3, 0x44, 6, 2, 0x30, 1, 0 }, 318 + 319 + /* Core sight clocks*/ 320 + { AGILEX5_CS_AT_CLK, "cs_at_clk", noc_mux, ARRAY_SIZE(noc_mux), 0, 321 + 0x24, 4, 0x44, 24, 2, 0x30, 1, 0 }, 322 + { AGILEX5_CS_TRACE_CLK, "cs_trace_clk", noc_mux, 323 + ARRAY_SIZE(noc_mux), 0, 0x24, 4, 0x44, 26, 2, 0x30, 1, 0 }, 324 + { AGILEX5_CS_PDBG_CLK, "cs_pdbg_clk", cs_pdbg_parents, 1, 0, 0x24, 4, 325 + 0x44, 28, 1, 0, 0, 0 }, 326 + 327 + /* Main Peripheral PLL1 Begin */ 328 + { AGILEX5_EMAC0_CLK, "emac0_clk", emac_mux, ARRAY_SIZE(emac_mux), 329 + 0, 0x7C, 0, 0, 0, 0, 0x94, 26, 0 }, 330 + { AGILEX5_EMAC1_CLK, "emac1_clk", emac_mux, ARRAY_SIZE(emac_mux), 331 + 0, 0x7C, 1, 0, 0, 0, 0x94, 27, 0 }, 332 + { AGILEX5_EMAC2_CLK, "emac2_clk", emac_mux, ARRAY_SIZE(emac_mux), 333 + 0, 0x7C, 2, 0, 0, 0, 0x94, 28, 0 }, 334 + { AGILEX5_EMAC_PTP_CLK, "emac_ptp_clk", emac_ptp_mux, 335 + ARRAY_SIZE(emac_ptp_mux), 0, 0x7C, 3, 0, 0, 0, 0x88, 2, 0 }, 336 + { AGILEX5_GPIO_DB_CLK, "gpio_db_clk", gpio_db_mux, 337 + ARRAY_SIZE(gpio_db_mux), 0, 0x7C, 4, 0x98, 0, 16, 0x88, 3, 1 }, 338 + /* Main Peripheral PLL1 End */ 339 + 340 + /* Peripheral clocks */ 341 + { AGILEX5_S2F_USER0_CLK, "s2f_user0_clk", s2f_user0_mux, 342 + ARRAY_SIZE(s2f_user0_mux), 0, 0x24, 6, 0, 0, 0, 0x30, 2, 0 }, 343 + { AGILEX5_S2F_USER1_CLK, "s2f_user1_clk", s2f_user1_mux, 344 + ARRAY_SIZE(s2f_user1_mux), 0, 0x7C, 6, 0, 0, 0, 0x88, 5, 0 }, 345 + { AGILEX5_PSI_REF_CLK, "psi_ref_clk", psi_mux, 346 + ARRAY_SIZE(psi_mux), 0, 0x7C, 7, 0, 0, 0, 0x88, 6, 0 }, 347 + { AGILEX5_USB31_SUSPEND_CLK, "usb31_suspend_clk", usb31_mux, 348 + ARRAY_SIZE(usb31_mux), 0, 0x7C, 25, 0, 0, 0, 0x88, 7, 0 }, 349 + { AGILEX5_USB31_BUS_CLK_EARLY, "usb31_bus_clk_early", usb31_bus_clk_early_parents, 350 + 1, 0, 0x7C, 25, 0, 0, 0, 0, 0, 0 }, 351 + { AGILEX5_USB2OTG_HCLK, "usb2otg_hclk", l4_mp_clk_parent, 1, 0, 0x7C, 352 + 8, 0, 0, 0, 0, 0, 0 }, 353 + { AGILEX5_SPIM_0_CLK, "spim_0_clk", l4_mp_clk_parent, 1, 0, 0x7C, 9, 354 + 0, 0, 0, 0, 0, 0 }, 355 + { AGILEX5_SPIM_1_CLK, "spim_1_clk", l4_mp_clk_parent, 1, 0, 0x7C, 11, 356 + 0, 0, 0, 0, 0, 0 }, 357 + { AGILEX5_SPIS_0_CLK, "spis_0_clk", l4_sp_clk_parent, 1, 0, 0x7C, 12, 358 + 0, 0, 0, 0, 0, 0 }, 359 + { AGILEX5_SPIS_1_CLK, "spis_1_clk", l4_sp_clk_parent, 1, 0, 0x7C, 13, 360 + 0, 0, 0, 0, 0, 0 }, 361 + { AGILEX5_DMA_CORE_CLK, "dma_core_clk", l4_mp_clk_parent, 1, 0, 0x7C, 362 + 14, 0, 0, 0, 0, 0, 0 }, 363 + { AGILEX5_DMA_HS_CLK, "dma_hs_clk", l4_mp_clk_parent, 1, 0, 0x7C, 14, 364 + 0, 0, 0, 0, 0, 0 }, 365 + { AGILEX5_I3C_0_CORE_CLK, "i3c_0_core_clk", l4_mp_clk_parent, 1, 0, 366 + 0x7C, 18, 0, 0, 0, 0, 0, 0 }, 367 + { AGILEX5_I3C_1_CORE_CLK, "i3c_1_core_clk", l4_mp_clk_parent, 1, 0, 368 + 0x7C, 19, 0, 0, 0, 0, 0, 0 }, 369 + { AGILEX5_I2C_0_PCLK, "i2c_0_pclk", l4_sp_clk_parent, 1, 0, 0x7C, 15, 370 + 0, 0, 0, 0, 0, 0 }, 371 + { AGILEX5_I2C_1_PCLK, "i2c_1_pclk", l4_sp_clk_parent, 1, 0, 0x7C, 16, 372 + 0, 0, 0, 0, 0, 0 }, 373 + { AGILEX5_I2C_EMAC0_PCLK, "i2c_emac0_pclk", l4_sp_clk_parent, 1, 0, 374 + 0x7C, 17, 0, 0, 0, 0, 0, 0 }, 375 + { AGILEX5_I2C_EMAC1_PCLK, "i2c_emac1_pclk", l4_sp_clk_parent, 1, 0, 376 + 0x7C, 22, 0, 0, 0, 0, 0, 0 }, 377 + { AGILEX5_I2C_EMAC2_PCLK, "i2c_emac2_pclk", l4_sp_clk_parent, 1, 0, 378 + 0x7C, 27, 0, 0, 0, 0, 0, 0 }, 379 + { AGILEX5_UART_0_PCLK, "uart_0_pclk", l4_sp_clk_parent, 1, 0, 0x7C, 20, 380 + 0, 0, 0, 0, 0, 0 }, 381 + { AGILEX5_UART_1_PCLK, "uart_1_pclk", l4_sp_clk_parent, 1, 0, 0x7C, 21, 382 + 0, 0, 0, 0, 0, 0 }, 383 + { AGILEX5_SPTIMER_0_PCLK, "sptimer_0_pclk", l4_sp_clk_parent, 1, 0, 384 + 0x7C, 23, 0, 0, 0, 0, 0, 0 }, 385 + { AGILEX5_SPTIMER_1_PCLK, "sptimer_1_pclk", l4_sp_clk_parent, 1, 0, 386 + 0x7C, 24, 0, 0, 0, 0, 0, 0 }, 387 + 388 + /*NAND, SD/MMC and SoftPHY overall clocking*/ 389 + { AGILEX5_DFI_CLK, "dfi_clk", l4_mp_clk_parent, 1, 0, 0, 0, 0x44, 16, 390 + 2, 0, 0, 0 }, 391 + { AGILEX5_NAND_NF_CLK, "nand_nf_clk", dfi_clk_parent, 1, 0, 0x7C, 10, 392 + 0, 0, 0, 0, 0, 0 }, 393 + { AGILEX5_NAND_BCH_CLK, "nand_bch_clk", l4_mp_clk_parent, 1, 0, 0x7C, 394 + 10, 0, 0, 0, 0, 0, 0 }, 395 + { AGILEX5_SDMMC_SDPHY_REG_CLK, "sdmmc_sdphy_reg_clk", l4_mp_clk_parent, 396 + 1, 0, 0x7C, 5, 0, 0, 0, 0, 0, 0 }, 397 + { AGILEX5_SDMCLK, "sdmclk", dfi_clk_parent, 1, 0, 0x7C, 5, 0, 0, 0, 398 + 0, 0, 0 }, 399 + { AGILEX5_SOFTPHY_REG_PCLK, "softphy_reg_pclk", l4_mp_clk_parent, 1, 0, 400 + 0x7C, 26, 0, 0, 0, 0, 0, 0 }, 401 + { AGILEX5_SOFTPHY_PHY_CLK, "softphy_phy_clk", l4_mp_clk_parent, 1, 0, 402 + 0x7C, 26, 0x44, 16, 2, 0, 0, 0 }, 403 + { AGILEX5_SOFTPHY_CTRL_CLK, "softphy_ctrl_clk", dfi_clk_parent, 1, 0, 404 + 0x7C, 26, 0, 0, 0, 0, 0, 0 }, 405 + }; 406 + 407 + static int 408 + agilex5_clk_register_c_perip(const struct stratix10_perip_c_clock *clks, 409 + int nums, struct stratix10_clock_data *data) 410 + { 411 + struct clk_hw *hw_clk; 412 + void __iomem *base = data->base; 413 + int i; 414 + 415 + for (i = 0; i < nums; i++) { 416 + hw_clk = s10_register_periph(&clks[i], base); 417 + if (IS_ERR(hw_clk)) { 418 + pr_err("%s: failed to register clock %s\n", __func__, 419 + clks[i].name); 420 + continue; 421 + } 422 + data->clk_data.hws[clks[i].id] = hw_clk; 423 + } 424 + return 0; 425 + } 426 + 427 + static int 428 + agilex5_clk_register_cnt_perip(const struct agilex5_perip_cnt_clock *clks, 429 + int nums, struct stratix10_clock_data *data) 430 + { 431 + struct clk_hw *hw_clk; 432 + void __iomem *base = data->base; 433 + int i; 434 + 435 + for (i = 0; i < nums; i++) { 436 + hw_clk = agilex5_register_cnt_periph(&clks[i], base); 437 + if (IS_ERR(hw_clk)) { 438 + pr_err("%s: failed to register clock %s\n", __func__, 439 + clks[i].name); 440 + continue; 441 + } 442 + data->clk_data.hws[clks[i].id] = hw_clk; 443 + } 444 + 445 + return 0; 446 + } 447 + 448 + static int agilex5_clk_register_gate(const struct agilex5_gate_clock *clks, 449 + int nums, 450 + struct stratix10_clock_data *data) 451 + { 452 + struct clk_hw *hw_clk; 453 + void __iomem *base = data->base; 454 + int i; 455 + 456 + for (i = 0; i < nums; i++) { 457 + hw_clk = agilex5_register_gate(&clks[i], base); 458 + if (IS_ERR(hw_clk)) { 459 + pr_err("%s: failed to register clock %s\n", __func__, 460 + clks[i].name); 461 + continue; 462 + } 463 + data->clk_data.hws[clks[i].id] = hw_clk; 464 + } 465 + 466 + return 0; 467 + } 468 + 469 + static int agilex5_clk_register_pll(const struct agilex5_pll_clock *clks, 470 + int nums, struct stratix10_clock_data *data) 471 + { 472 + struct clk_hw *hw_clk; 473 + void __iomem *base = data->base; 474 + int i; 475 + 476 + for (i = 0; i < nums; i++) { 477 + hw_clk = agilex5_register_pll(&clks[i], base); 478 + if (IS_ERR(hw_clk)) { 479 + pr_err("%s: failed to register clock %s\n", __func__, 480 + clks[i].name); 481 + continue; 482 + } 483 + data->clk_data.hws[clks[i].id] = hw_clk; 484 + } 485 + 486 + return 0; 487 + } 488 + 489 + static int agilex5_clkmgr_init(struct platform_device *pdev) 490 + { 491 + struct device_node *np = pdev->dev.of_node; 492 + struct device *dev = &pdev->dev; 493 + struct stratix10_clock_data *clk_data; 494 + void __iomem *base; 495 + int i, num_clks; 496 + 497 + base = devm_platform_ioremap_resource(pdev, 0); 498 + if (IS_ERR(base)) 499 + return PTR_ERR(base); 500 + 501 + num_clks = AGILEX5_NUM_CLKS; 502 + 503 + clk_data = devm_kzalloc(dev, struct_size(clk_data, clk_data.hws, 504 + num_clks), GFP_KERNEL); 505 + if (!clk_data) 506 + return -ENOMEM; 507 + 508 + clk_data->base = base; 509 + clk_data->clk_data.num = num_clks; 510 + 511 + for (i = 0; i < num_clks; i++) 512 + clk_data->clk_data.hws[i] = ERR_PTR(-ENOENT); 513 + 514 + agilex5_clk_register_pll(agilex5_pll_clks, ARRAY_SIZE(agilex5_pll_clks), 515 + clk_data); 516 + 517 + /* mainPLL C0, C1, C2, C3 and periph PLL C0, C1, C2, C3*/ 518 + agilex5_clk_register_c_perip(agilex5_main_perip_c_clks, 519 + ARRAY_SIZE(agilex5_main_perip_c_clks), 520 + clk_data); 521 + 522 + agilex5_clk_register_cnt_perip(agilex5_main_perip_cnt_clks, 523 + ARRAY_SIZE(agilex5_main_perip_cnt_clks), 524 + clk_data); 525 + 526 + agilex5_clk_register_gate(agilex5_gate_clks, 527 + ARRAY_SIZE(agilex5_gate_clks), clk_data); 528 + 529 + of_clk_add_hw_provider(np, of_clk_hw_onecell_get, &clk_data->clk_data); 530 + return 0; 531 + } 532 + 533 + static int agilex5_clkmgr_probe(struct platform_device *pdev) 534 + { 535 + int (*probe_func)(struct platform_device *init_func); 536 + 537 + probe_func = of_device_get_match_data(&pdev->dev); 538 + if (!probe_func) 539 + return -ENODEV; 540 + return probe_func(pdev); 541 + } 542 + 543 + static const struct of_device_id agilex5_clkmgr_match_table[] = { 544 + { .compatible = "intel,agilex5-clkmgr", .data = agilex5_clkmgr_init }, 545 + {} 546 + }; 547 + 548 + static struct platform_driver agilex5_clkmgr_driver = { 549 + .probe = agilex5_clkmgr_probe, 550 + .driver = { 551 + .name = "agilex5-clkmgr", 552 + .suppress_bind_attrs = true, 553 + .of_match_table = agilex5_clkmgr_match_table, 554 + }, 555 + }; 556 + 557 + static int __init agilex5_clk_init(void) 558 + { 559 + return platform_driver_register(&agilex5_clkmgr_driver); 560 + } 561 + core_initcall(agilex5_clk_init);
+53
drivers/clk/socfpga/clk-gate-s10.c
··· 239 } 240 return hw_clk; 241 }
··· 239 } 240 return hw_clk; 241 } 242 + 243 + struct clk_hw *agilex5_register_gate(const struct agilex5_gate_clock *clks, void __iomem *regbase) 244 + { 245 + struct clk_hw *hw_clk; 246 + struct socfpga_gate_clk *socfpga_clk; 247 + struct clk_init_data init; 248 + int ret; 249 + 250 + socfpga_clk = kzalloc(sizeof(*socfpga_clk), GFP_KERNEL); 251 + if (!socfpga_clk) 252 + return NULL; 253 + 254 + socfpga_clk->hw.reg = regbase + clks->gate_reg; 255 + socfpga_clk->hw.bit_idx = clks->gate_idx; 256 + 257 + gateclk_ops.enable = clk_gate_ops.enable; 258 + gateclk_ops.disable = clk_gate_ops.disable; 259 + 260 + socfpga_clk->fixed_div = clks->fixed_div; 261 + 262 + if (clks->div_reg) 263 + socfpga_clk->div_reg = regbase + clks->div_reg; 264 + else 265 + socfpga_clk->div_reg = NULL; 266 + 267 + socfpga_clk->width = clks->div_width; 268 + socfpga_clk->shift = clks->div_offset; 269 + 270 + if (clks->bypass_reg) 271 + socfpga_clk->bypass_reg = regbase + clks->bypass_reg; 272 + else 273 + socfpga_clk->bypass_reg = NULL; 274 + socfpga_clk->bypass_shift = clks->bypass_shift; 275 + 276 + if (streq(clks->name, "cs_pdbg_clk")) 277 + init.ops = &dbgclk_ops; 278 + else 279 + init.ops = &agilex_gateclk_ops; 280 + 281 + init.name = clks->name; 282 + init.flags = clks->flags; 283 + init.num_parents = clks->num_parents; 284 + init.parent_names = clks->parent_names; 285 + socfpga_clk->hw.hw.init = &init; 286 + hw_clk = &socfpga_clk->hw.hw; 287 + 288 + ret = clk_hw_register(NULL, &socfpga_clk->hw.hw); 289 + if (ret) { 290 + kfree(socfpga_clk); 291 + return ERR_PTR(ret); 292 + } 293 + return hw_clk; 294 + }
+41
drivers/clk/socfpga/clk-periph-s10.c
··· 214 } 215 return hw_clk; 216 }
··· 214 } 215 return hw_clk; 216 } 217 + 218 + struct clk_hw *agilex5_register_cnt_periph(const struct agilex5_perip_cnt_clock *clks, 219 + void __iomem *regbase) 220 + { 221 + struct clk_hw *hw_clk; 222 + struct socfpga_periph_clk *periph_clk; 223 + struct clk_init_data init; 224 + const char *name = clks->name; 225 + int ret; 226 + 227 + periph_clk = kzalloc(sizeof(*periph_clk), GFP_KERNEL); 228 + if (WARN_ON(!periph_clk)) 229 + return NULL; 230 + 231 + if (clks->offset) 232 + periph_clk->hw.reg = regbase + clks->offset; 233 + else 234 + periph_clk->hw.reg = NULL; 235 + 236 + if (clks->bypass_reg) 237 + periph_clk->bypass_reg = regbase + clks->bypass_reg; 238 + else 239 + periph_clk->bypass_reg = NULL; 240 + periph_clk->bypass_shift = clks->bypass_shift; 241 + periph_clk->fixed_div = clks->fixed_divider; 242 + 243 + init.name = name; 244 + init.ops = &peri_cnt_clk_ops; 245 + init.flags = clks->flags; 246 + init.num_parents = clks->num_parents; 247 + init.parent_names = clks->parent_names; 248 + periph_clk->hw.hw.init = &init; 249 + hw_clk = &periph_clk->hw.hw; 250 + 251 + ret = clk_hw_register(NULL, hw_clk); 252 + if (ret) { 253 + kfree(periph_clk); 254 + return ERR_PTR(ret); 255 + } 256 + return hw_clk; 257 + }
+36
drivers/clk/socfpga/clk-pll-s10.c
··· 304 } 305 return hw_clk; 306 }
··· 304 } 305 return hw_clk; 306 } 307 + 308 + struct clk_hw *agilex5_register_pll(const struct agilex5_pll_clock *clks, 309 + void __iomem *reg) 310 + { 311 + struct clk_hw *hw_clk; 312 + struct socfpga_pll *pll_clk; 313 + struct clk_init_data init; 314 + const char *name = clks->name; 315 + int ret; 316 + 317 + pll_clk = kzalloc(sizeof(*pll_clk), GFP_KERNEL); 318 + if (WARN_ON(!pll_clk)) 319 + return NULL; 320 + 321 + pll_clk->hw.reg = reg + clks->offset; 322 + 323 + if (streq(name, SOCFPGA_BOOT_CLK)) 324 + init.ops = &clk_boot_ops; 325 + else 326 + init.ops = &agilex_clk_pll_ops; 327 + 328 + init.name = name; 329 + init.flags = clks->flags; 330 + init.num_parents = clks->num_parents; 331 + init.parent_names = clks->parent_names; 332 + pll_clk->hw.hw.init = &init; 333 + pll_clk->hw.bit_idx = SOCFPGA_PLL_POWER; 334 + hw_clk = &pll_clk->hw.hw; 335 + 336 + ret = clk_hw_register(NULL, hw_clk); 337 + if (ret) { 338 + kfree(pll_clk); 339 + return ERR_PTR(ret); 340 + } 341 + return hw_clk; 342 + }
+43
drivers/clk/socfpga/stratix10-clk.h
··· 73 u8 fixed_div; 74 }; 75 76 struct clk_hw *s10_register_pll(const struct stratix10_pll_clock *clks, 77 void __iomem *reg); 78 struct clk_hw *agilex_register_pll(const struct stratix10_pll_clock *clks, 79 void __iomem *reg); 80 struct clk_hw *n5x_register_pll(const struct stratix10_pll_clock *clks, 81 void __iomem *reg); 82 struct clk_hw *s10_register_periph(const struct stratix10_perip_c_clock *clks, 83 void __iomem *reg); 84 struct clk_hw *n5x_register_periph(const struct n5x_perip_c_clock *clks,
··· 73 u8 fixed_div; 74 }; 75 76 + struct agilex5_pll_clock { 77 + unsigned int id; 78 + const char *name; 79 + const char * const *parent_names; 80 + u8 num_parents; 81 + unsigned long flags; 82 + unsigned long offset; 83 + }; 84 + 85 + struct agilex5_perip_cnt_clock { 86 + unsigned int id; 87 + const char *name; 88 + const char * const *parent_names; 89 + u8 num_parents; 90 + unsigned long flags; 91 + unsigned long offset; 92 + u8 fixed_divider; 93 + unsigned long bypass_reg; 94 + unsigned long bypass_shift; 95 + }; 96 + 97 + struct agilex5_gate_clock { 98 + unsigned int id; 99 + const char *name; 100 + const char * const *parent_names; 101 + u8 num_parents; 102 + unsigned long flags; 103 + unsigned long gate_reg; 104 + u8 gate_idx; 105 + unsigned long div_reg; 106 + u8 div_offset; 107 + u8 div_width; 108 + unsigned long bypass_reg; 109 + u8 bypass_shift; 110 + u8 fixed_div; 111 + }; 112 + 113 struct clk_hw *s10_register_pll(const struct stratix10_pll_clock *clks, 114 void __iomem *reg); 115 struct clk_hw *agilex_register_pll(const struct stratix10_pll_clock *clks, 116 void __iomem *reg); 117 struct clk_hw *n5x_register_pll(const struct stratix10_pll_clock *clks, 118 void __iomem *reg); 119 + struct clk_hw *agilex5_register_pll(const struct agilex5_pll_clock *clks, 120 + void __iomem *reg); 121 + struct clk_hw *agilex5_register_cnt_periph(const struct agilex5_perip_cnt_clock *clks, 122 + void __iomem *regbase); 123 + struct clk_hw *agilex5_register_gate(const struct agilex5_gate_clock *clks, 124 + void __iomem *regbase); 125 struct clk_hw *s10_register_periph(const struct stratix10_perip_c_clock *clks, 126 void __iomem *reg); 127 struct clk_hw *n5x_register_periph(const struct n5x_perip_c_clock *clks,
+2 -2
drivers/clk/spacemit/ccu-k1.c
··· 1018 if (!clk_data) 1019 return -ENOMEM; 1020 1021 for (i = 0; i < data->num; i++) { 1022 struct clk_hw *hw = data->hws[i]; 1023 struct ccu_common *common; ··· 1045 1046 clk_data->hws[i] = hw; 1047 } 1048 - 1049 - clk_data->num = data->num; 1050 1051 ret = devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, clk_data); 1052 if (ret)
··· 1018 if (!clk_data) 1019 return -ENOMEM; 1020 1021 + clk_data->num = data->num; 1022 + 1023 for (i = 0; i < data->num; i++) { 1024 struct clk_hw *hw = data->hws[i]; 1025 struct ccu_common *common; ··· 1043 1044 clk_data->hws[i] = hw; 1045 } 1046 1047 ret = devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, clk_data); 1048 if (ret)
+1 -1
drivers/clk/spacemit/ccu_mix.h
··· 220 extern const struct clk_ops spacemit_ccu_mux_gate_ops; 221 extern const struct clk_ops spacemit_ccu_mux_div_ops; 222 extern const struct clk_ops spacemit_ccu_mux_div_gate_ops; 223 - #endif /* _CCU_DIV_H_ */
··· 220 extern const struct clk_ops spacemit_ccu_mux_gate_ops; 221 extern const struct clk_ops spacemit_ccu_mux_div_ops; 222 extern const struct clk_ops spacemit_ccu_mux_div_gate_ops; 223 + #endif /* _CCU_MIX_H_ */
+2 -6
drivers/clk/sprd/sc9860-clk.c
··· 2021 2022 static int sc9860_clk_probe(struct platform_device *pdev) 2023 { 2024 - const struct of_device_id *match; 2025 const struct sprd_clk_desc *desc; 2026 int ret; 2027 2028 - match = of_match_node(sprd_sc9860_clk_ids, pdev->dev.of_node); 2029 - if (!match) { 2030 - pr_err("%s: of_match_node() failed", __func__); 2031 return -ENODEV; 2032 - } 2033 2034 - desc = match->data; 2035 ret = sprd_clk_regmap_init(pdev, desc); 2036 if (ret) 2037 return ret;
··· 2021 2022 static int sc9860_clk_probe(struct platform_device *pdev) 2023 { 2024 const struct sprd_clk_desc *desc; 2025 int ret; 2026 2027 + desc = device_get_match_data(&pdev->dev); 2028 + if (!desc) 2029 return -ENODEV; 2030 2031 ret = sprd_clk_regmap_init(pdev, desc); 2032 if (ret) 2033 return ret;
+77 -2
drivers/clk/visconti/clkc-tmpv770x.c
··· 17 #include "clkc.h" 18 #include "reset.h" 19 20 static DEFINE_SPINLOCK(tmpv770x_clk_lock); 21 static DEFINE_SPINLOCK(tmpv770x_rst_lock); 22 ··· 30 31 static const struct clk_parent_data pietherplls_parent_data[] = { 32 { .fw_name = "pietherpll", .name = "pietherpll", }, 33 }; 34 35 static const struct visconti_fixed_clk fixed_clk_tables[] = { ··· 70 pietherplls_parent_data, ARRAY_SIZE(pietherplls_parent_data), 71 CLK_SET_RATE_PARENT, 0x34, 0x134, 7, 4, 72 TMPV770X_RESET_PIETHER_125M, }, 73 }; 74 75 static const struct visconti_clk_gate_table clk_gate_tables[] = { ··· 228 clks_parent_data, ARRAY_SIZE(clks_parent_data), 229 0, 0x14, 0x114, 0, 4, 230 TMPV770X_RESET_SBUSCLK, }, 231 }; 232 233 static const struct visconti_reset_data clk_reset_data[] = { ··· 279 [TMPV770X_RESET_PIPCMIF] = { 0x464, 0x564, 0, }, 280 [TMPV770X_RESET_PICKMON] = { 0x410, 0x510, 8, }, 281 [TMPV770X_RESET_SBUSCLK] = { 0x414, 0x514, 0, }, 282 }; 283 284 static int visconti_clk_probe(struct platform_device *pdev) ··· 301 if (IS_ERR(regmap)) 302 return PTR_ERR(regmap); 303 304 - ctx = visconti_init_clk(dev, regmap, TMPV770X_NR_CLK); 305 if (IS_ERR(ctx)) 306 return PTR_ERR(ctx); 307 308 ret = visconti_register_reset_controller(dev, regmap, clk_reset_data, 309 - TMPV770X_NR_RESET, 310 &visconti_reset_ops, 311 &tmpv770x_rst_lock); 312 if (ret) { ··· 336 clk_reset_data, &tmpv770x_clk_lock); 337 if (ret) { 338 dev_err(dev, "Failed to register pietherpll clock gate: %d\n", ret); 339 return ret; 340 } 341
··· 17 #include "clkc.h" 18 #include "reset.h" 19 20 + /* Must be equal to the last clock/reset ID increased by one */ 21 + #define CLKS_NR (TMPV770X_CLK_VIIFBS1_PROC + 1) 22 + #define RESETS_NR (TMPV770X_RESET_VIIFBS1_L1ISP + 1) 23 + 24 static DEFINE_SPINLOCK(tmpv770x_clk_lock); 25 static DEFINE_SPINLOCK(tmpv770x_rst_lock); 26 ··· 26 27 static const struct clk_parent_data pietherplls_parent_data[] = { 28 { .fw_name = "pietherpll", .name = "pietherpll", }, 29 + }; 30 + 31 + static const struct clk_parent_data pidnnplls_parent_data[] = { 32 + { .fw_name = "pidnnpll", .name = "pidnnpll", }, 33 }; 34 35 static const struct visconti_fixed_clk fixed_clk_tables[] = { ··· 62 pietherplls_parent_data, ARRAY_SIZE(pietherplls_parent_data), 63 CLK_SET_RATE_PARENT, 0x34, 0x134, 7, 4, 64 TMPV770X_RESET_PIETHER_125M, }, 65 + }; 66 + 67 + static const struct visconti_clk_gate_table pidnnpll_clk_gate_tables[] = { 68 + { TMPV770X_CLK_VIIFBS0, "viifbs0", 69 + pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data), 70 + 0, 0x58, 0x158, 1, 1, 71 + NO_RESET, }, 72 + { TMPV770X_CLK_VIIFBS0_PROC, "viifbs0_proc", 73 + pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data), 74 + 0, 0x58, 0x158, 18, 1, 75 + NO_RESET, }, 76 + { TMPV770X_CLK_VIIFBS0_L1ISP, "viifbs0_l1isp", 77 + pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data), 78 + 0, 0x58, 0x158, 17, 1, 79 + NO_RESET, }, 80 + { TMPV770X_CLK_VIIFBS0_L2ISP, "viifbs0_l2isp", 81 + pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data), 82 + 0, 0x58, 0x158, 16, 1, 83 + NO_RESET, }, 84 + { TMPV770X_CLK_VIIFBS1, "viifbs1", 85 + pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data), 86 + 0, 0x58, 0x158, 5, 1, 87 + NO_RESET, }, 88 + { TMPV770X_CLK_VIIFBS1_PROC, "viifbs1_proc", 89 + pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data), 90 + 0, 0x58, 0x158, 22, 1, 91 + NO_RESET, }, 92 + { TMPV770X_CLK_VIIFBS1_L1ISP, "viifbs1_l1isp", 93 + pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data), 94 + 0, 0x58, 0x158, 21, 1, 95 + NO_RESET, }, 96 + { TMPV770X_CLK_VIIFBS1_L2ISP, "viifbs1_l2isp", 97 + pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data), 98 + 0, 0x58, 0x158, 20, 1, 99 + NO_RESET, }, 100 }; 101 102 static const struct visconti_clk_gate_table clk_gate_tables[] = { ··· 185 clks_parent_data, ARRAY_SIZE(clks_parent_data), 186 0, 0x14, 0x114, 0, 4, 187 TMPV770X_RESET_SBUSCLK, }, 188 + { TMPV770X_CLK_VIIF0_CFGCLK, "csi2rx0cfg", 189 + clks_parent_data, ARRAY_SIZE(clks_parent_data), 190 + 0, 0x58, 0x158, 0, 24, 191 + NO_RESET, }, 192 + { TMPV770X_CLK_VIIF0_APBCLK, "csi2rx0apb", 193 + clks_parent_data, ARRAY_SIZE(clks_parent_data), 194 + 0, 0x58, 0x158, 2, 4, 195 + NO_RESET, }, 196 + { TMPV770X_CLK_VIIF1_CFGCLK, "csi2rx1cfg", 197 + clks_parent_data, ARRAY_SIZE(clks_parent_data), 198 + 0, 0x58, 0x158, 4, 24, 199 + NO_RESET, }, 200 + { TMPV770X_CLK_VIIF1_APBCLK, "csi2rx1apb", 201 + clks_parent_data, ARRAY_SIZE(clks_parent_data), 202 + 0, 0x58, 0x158, 6, 4, 203 + NO_RESET, }, 204 }; 205 206 static const struct visconti_reset_data clk_reset_data[] = { ··· 220 [TMPV770X_RESET_PIPCMIF] = { 0x464, 0x564, 0, }, 221 [TMPV770X_RESET_PICKMON] = { 0x410, 0x510, 8, }, 222 [TMPV770X_RESET_SBUSCLK] = { 0x414, 0x514, 0, }, 223 + [TMPV770X_RESET_VIIFBS0] = { 0x458, 0x558, 0, }, 224 + [TMPV770X_RESET_VIIFBS0_APB] = { 0x458, 0x558, 1, }, 225 + [TMPV770X_RESET_VIIFBS0_L2ISP] = { 0x458, 0x558, 16, }, 226 + [TMPV770X_RESET_VIIFBS0_L1ISP] = { 0x458, 0x558, 17, }, 227 + [TMPV770X_RESET_VIIFBS1] = { 0x458, 0x558, 4, }, 228 + [TMPV770X_RESET_VIIFBS1_APB] = { 0x458, 0x558, 5, }, 229 + [TMPV770X_RESET_VIIFBS1_L2ISP] = { 0x458, 0x558, 20, }, 230 + [TMPV770X_RESET_VIIFBS1_L1ISP] = { 0x458, 0x558, 21, }, 231 }; 232 233 static int visconti_clk_probe(struct platform_device *pdev) ··· 234 if (IS_ERR(regmap)) 235 return PTR_ERR(regmap); 236 237 + ctx = visconti_init_clk(dev, regmap, CLKS_NR); 238 if (IS_ERR(ctx)) 239 return PTR_ERR(ctx); 240 241 ret = visconti_register_reset_controller(dev, regmap, clk_reset_data, 242 + RESETS_NR, 243 &visconti_reset_ops, 244 &tmpv770x_rst_lock); 245 if (ret) { ··· 269 clk_reset_data, &tmpv770x_clk_lock); 270 if (ret) { 271 dev_err(dev, "Failed to register pietherpll clock gate: %d\n", ret); 272 + return ret; 273 + } 274 + 275 + ret = visconti_clk_register_gates(ctx, pidnnpll_clk_gate_tables, 276 + ARRAY_SIZE(pidnnpll_clk_gate_tables), 277 + clk_reset_data, &tmpv770x_clk_lock); 278 + if (ret) { 279 + dev_err(dev, "Failed to register pidnnpll clock gate: %d\n", ret); 280 return ret; 281 } 282
+4 -1
drivers/clk/visconti/pll-tmpv770x.c
··· 16 17 #include "pll.h" 18 19 static DEFINE_SPINLOCK(tmpv770x_pll_lock); 20 21 static const struct visconti_pll_rate_table pipll0_rates[] __initconst = { ··· 69 if (!reg_base) 70 return; 71 72 - ctx = visconti_init_pll(np, reg_base, TMPV770X_NR_PLL); 73 if (IS_ERR(ctx)) { 74 iounmap(reg_base); 75 return;
··· 16 17 #include "pll.h" 18 19 + /* Must be equal to the last pll ID increased by one */ 20 + #define PLLS_NR (TMPV770X_PLL_PIIMGERPLL + 1) 21 + 22 static DEFINE_SPINLOCK(tmpv770x_pll_lock); 23 24 static const struct visconti_pll_rate_table pipll0_rates[] __initconst = { ··· 66 if (!reg_base) 67 return; 68 69 + ctx = visconti_init_pll(np, reg_base, PLLS_NR); 70 if (IS_ERR(ctx)) { 71 iounmap(reg_base); 72 return;
+3 -1
drivers/firmware/samsung/Makefile
··· 1 # SPDX-License-Identifier: GPL-2.0-only 2 3 - acpm-protocol-objs := exynos-acpm.o exynos-acpm-pmic.o 4 obj-$(CONFIG_EXYNOS_ACPM_PROTOCOL) += acpm-protocol.o
··· 1 # SPDX-License-Identifier: GPL-2.0-only 2 3 + acpm-protocol-objs := exynos-acpm.o 4 + acpm-protocol-objs += exynos-acpm-pmic.o 5 + acpm-protocol-objs += exynos-acpm-dvfs.o 6 obj-$(CONFIG_EXYNOS_ACPM_PROTOCOL) += acpm-protocol.o
+80
drivers/firmware/samsung/exynos-acpm-dvfs.c
···
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * Copyright 2020 Samsung Electronics Co., Ltd. 4 + * Copyright 2020 Google LLC. 5 + * Copyright 2025 Linaro Ltd. 6 + */ 7 + 8 + #include <linux/bitfield.h> 9 + #include <linux/firmware/samsung/exynos-acpm-protocol.h> 10 + #include <linux/ktime.h> 11 + #include <linux/types.h> 12 + #include <linux/units.h> 13 + 14 + #include "exynos-acpm.h" 15 + #include "exynos-acpm-dvfs.h" 16 + 17 + #define ACPM_DVFS_ID GENMASK(11, 0) 18 + #define ACPM_DVFS_REQ_TYPE GENMASK(15, 0) 19 + 20 + #define ACPM_DVFS_FREQ_REQ 0 21 + #define ACPM_DVFS_FREQ_GET 1 22 + 23 + static void acpm_dvfs_set_xfer(struct acpm_xfer *xfer, u32 *cmd, size_t cmdlen, 24 + unsigned int acpm_chan_id, bool response) 25 + { 26 + xfer->acpm_chan_id = acpm_chan_id; 27 + xfer->txd = cmd; 28 + xfer->txlen = cmdlen; 29 + 30 + if (response) { 31 + xfer->rxd = cmd; 32 + xfer->rxlen = cmdlen; 33 + } 34 + } 35 + 36 + static void acpm_dvfs_init_set_rate_cmd(u32 cmd[4], unsigned int clk_id, 37 + unsigned long rate) 38 + { 39 + cmd[0] = FIELD_PREP(ACPM_DVFS_ID, clk_id); 40 + cmd[1] = rate / HZ_PER_KHZ; 41 + cmd[2] = FIELD_PREP(ACPM_DVFS_REQ_TYPE, ACPM_DVFS_FREQ_REQ); 42 + cmd[3] = ktime_to_ms(ktime_get()); 43 + } 44 + 45 + int acpm_dvfs_set_rate(const struct acpm_handle *handle, 46 + unsigned int acpm_chan_id, unsigned int clk_id, 47 + unsigned long rate) 48 + { 49 + struct acpm_xfer xfer = {0}; 50 + u32 cmd[4]; 51 + 52 + acpm_dvfs_init_set_rate_cmd(cmd, clk_id, rate); 53 + acpm_dvfs_set_xfer(&xfer, cmd, sizeof(cmd), acpm_chan_id, false); 54 + 55 + return acpm_do_xfer(handle, &xfer); 56 + } 57 + 58 + static void acpm_dvfs_init_get_rate_cmd(u32 cmd[4], unsigned int clk_id) 59 + { 60 + cmd[0] = FIELD_PREP(ACPM_DVFS_ID, clk_id); 61 + cmd[2] = FIELD_PREP(ACPM_DVFS_REQ_TYPE, ACPM_DVFS_FREQ_GET); 62 + cmd[3] = ktime_to_ms(ktime_get()); 63 + } 64 + 65 + unsigned long acpm_dvfs_get_rate(const struct acpm_handle *handle, 66 + unsigned int acpm_chan_id, unsigned int clk_id) 67 + { 68 + struct acpm_xfer xfer; 69 + unsigned int cmd[4] = {0}; 70 + int ret; 71 + 72 + acpm_dvfs_init_get_rate_cmd(cmd, clk_id); 73 + acpm_dvfs_set_xfer(&xfer, cmd, sizeof(cmd), acpm_chan_id, true); 74 + 75 + ret = acpm_do_xfer(handle, &xfer); 76 + if (ret) 77 + return 0; 78 + 79 + return xfer.rxd[1] * HZ_PER_KHZ; 80 + }
+21
drivers/firmware/samsung/exynos-acpm-dvfs.h
···
··· 1 + /* SPDX-License-Identifier: GPL-2.0-only */ 2 + /* 3 + * Copyright 2020 Samsung Electronics Co., Ltd. 4 + * Copyright 2020 Google LLC. 5 + * Copyright 2025 Linaro Ltd. 6 + */ 7 + #ifndef __EXYNOS_ACPM_DVFS_H__ 8 + #define __EXYNOS_ACPM_DVFS_H__ 9 + 10 + #include <linux/types.h> 11 + 12 + struct acpm_handle; 13 + 14 + int acpm_dvfs_set_rate(const struct acpm_handle *handle, 15 + unsigned int acpm_chan_id, unsigned int id, 16 + unsigned long rate); 17 + unsigned long acpm_dvfs_get_rate(const struct acpm_handle *handle, 18 + unsigned int acpm_chan_id, 19 + unsigned int clk_id); 20 + 21 + #endif /* __EXYNOS_ACPM_DVFS_H__ */
+26
drivers/firmware/samsung/exynos-acpm.c
··· 29 #include <linux/types.h> 30 31 #include "exynos-acpm.h" 32 #include "exynos-acpm-pmic.h" 33 34 #define ACPM_PROTOCOL_SEQNUM GENMASK(21, 16) ··· 177 /** 178 * struct acpm_match_data - of_device_id data. 179 * @initdata_base: offset in SRAM where the channels configuration resides. 180 */ 181 struct acpm_match_data { 182 loff_t initdata_base; 183 }; 184 185 #define client_to_acpm_chan(c) container_of(c, struct acpm_chan, cl) ··· 593 */ 594 static void acpm_setup_ops(struct acpm_info *acpm) 595 { 596 struct acpm_pmic_ops *pmic_ops = &acpm->handle.ops.pmic_ops; 597 598 pmic_ops->read_reg = acpm_pmic_read_reg; 599 pmic_ops->bulk_read = acpm_pmic_bulk_read; ··· 606 pmic_ops->update_reg = acpm_pmic_update_reg; 607 } 608 609 static int acpm_probe(struct platform_device *pdev) 610 { 611 const struct acpm_match_data *match_data; 612 struct device *dev = &pdev->dev; 613 struct device_node *shmem; 614 struct acpm_info *acpm; ··· 654 acpm_setup_ops(acpm); 655 656 platform_set_drvdata(pdev, acpm); 657 658 return devm_of_platform_populate(dev); 659 } ··· 766 767 static const struct acpm_match_data acpm_gs101 = { 768 .initdata_base = ACPM_GS101_INITDATA_BASE, 769 }; 770 771 static const struct of_device_id acpm_match[] = {
··· 29 #include <linux/types.h> 30 31 #include "exynos-acpm.h" 32 + #include "exynos-acpm-dvfs.h" 33 #include "exynos-acpm-pmic.h" 34 35 #define ACPM_PROTOCOL_SEQNUM GENMASK(21, 16) ··· 176 /** 177 * struct acpm_match_data - of_device_id data. 178 * @initdata_base: offset in SRAM where the channels configuration resides. 179 + * @acpm_clk_dev_name: base name for the ACPM clocks device that we're registering. 180 */ 181 struct acpm_match_data { 182 loff_t initdata_base; 183 + const char *acpm_clk_dev_name; 184 }; 185 186 #define client_to_acpm_chan(c) container_of(c, struct acpm_chan, cl) ··· 590 */ 591 static void acpm_setup_ops(struct acpm_info *acpm) 592 { 593 + struct acpm_dvfs_ops *dvfs_ops = &acpm->handle.ops.dvfs_ops; 594 struct acpm_pmic_ops *pmic_ops = &acpm->handle.ops.pmic_ops; 595 + 596 + dvfs_ops->set_rate = acpm_dvfs_set_rate; 597 + dvfs_ops->get_rate = acpm_dvfs_get_rate; 598 599 pmic_ops->read_reg = acpm_pmic_read_reg; 600 pmic_ops->bulk_read = acpm_pmic_bulk_read; ··· 599 pmic_ops->update_reg = acpm_pmic_update_reg; 600 } 601 602 + static void acpm_clk_pdev_unregister(void *data) 603 + { 604 + platform_device_unregister(data); 605 + } 606 + 607 static int acpm_probe(struct platform_device *pdev) 608 { 609 const struct acpm_match_data *match_data; 610 + struct platform_device *acpm_clk_pdev; 611 struct device *dev = &pdev->dev; 612 struct device_node *shmem; 613 struct acpm_info *acpm; ··· 641 acpm_setup_ops(acpm); 642 643 platform_set_drvdata(pdev, acpm); 644 + 645 + acpm_clk_pdev = platform_device_register_data(dev, 646 + match_data->acpm_clk_dev_name, 647 + PLATFORM_DEVID_NONE, NULL, 0); 648 + if (IS_ERR(acpm_clk_pdev)) 649 + return dev_err_probe(dev, PTR_ERR(acpm_clk_pdev), 650 + "Failed to register ACPM clocks device.\n"); 651 + 652 + ret = devm_add_action_or_reset(dev, acpm_clk_pdev_unregister, 653 + acpm_clk_pdev); 654 + if (ret) 655 + return dev_err_probe(dev, ret, "Failed to add devm action.\n"); 656 657 return devm_of_platform_populate(dev); 658 } ··· 741 742 static const struct acpm_match_data acpm_gs101 = { 743 .initdata_base = ACPM_GS101_INITDATA_BASE, 744 + .acpm_clk_dev_name = "gs101-acpm-clk", 745 }; 746 747 static const struct of_device_id acpm_match[] = {
+1
drivers/reset/Kconfig
··· 211 config RESET_POLARFIRE_SOC 212 bool "Microchip PolarFire SoC (MPFS) Reset Driver" 213 depends on MCHP_CLK_MPFS 214 select AUXILIARY_BUS 215 default MCHP_CLK_MPFS 216 help
··· 211 config RESET_POLARFIRE_SOC 212 bool "Microchip PolarFire SoC (MPFS) Reset Driver" 213 depends on MCHP_CLK_MPFS 214 + depends on MFD_SYSCON 215 select AUXILIARY_BUS 216 default MCHP_CLK_MPFS 217 help
+55 -36
drivers/reset/reset-mpfs.c
··· 9 #include <linux/auxiliary_bus.h> 10 #include <linux/delay.h> 11 #include <linux/io.h> 12 #include <linux/module.h> 13 #include <linux/of.h> 14 #include <linux/platform_device.h> 15 - #include <linux/slab.h> 16 #include <linux/reset-controller.h> 17 #include <dt-bindings/clock/microchip,mpfs-clock.h> 18 #include <soc/microchip/mpfs.h> 19 ··· 29 #define MPFS_SLEEP_MIN_US 100 30 #define MPFS_SLEEP_MAX_US 200 31 32 - /* block concurrent access to the soft reset register */ 33 - static DEFINE_SPINLOCK(mpfs_reset_lock); 34 35 struct mpfs_reset { 36 - void __iomem *base; 37 struct reset_controller_dev rcdev; 38 }; 39 ··· 47 static int mpfs_assert(struct reset_controller_dev *rcdev, unsigned long id) 48 { 49 struct mpfs_reset *rst = to_mpfs_reset(rcdev); 50 - unsigned long flags; 51 - u32 reg; 52 53 - spin_lock_irqsave(&mpfs_reset_lock, flags); 54 55 - reg = readl(rst->base); 56 - reg |= BIT(id); 57 - writel(reg, rst->base); 58 - 59 - spin_unlock_irqrestore(&mpfs_reset_lock, flags); 60 - 61 - return 0; 62 } 63 64 static int mpfs_deassert(struct reset_controller_dev *rcdev, unsigned long id) 65 { 66 struct mpfs_reset *rst = to_mpfs_reset(rcdev); 67 - unsigned long flags; 68 - u32 reg; 69 70 - spin_lock_irqsave(&mpfs_reset_lock, flags); 71 72 - reg = readl(rst->base); 73 - reg &= ~BIT(id); 74 - writel(reg, rst->base); 75 - 76 - spin_unlock_irqrestore(&mpfs_reset_lock, flags); 77 - 78 - return 0; 79 } 80 81 static int mpfs_status(struct reset_controller_dev *rcdev, unsigned long id) 82 { 83 struct mpfs_reset *rst = to_mpfs_reset(rcdev); 84 - u32 reg = readl(rst->base); 85 86 /* 87 * It is safe to return here as MPFS_NUM_RESETS makes sure the sign bit ··· 115 return index - MPFS_PERIPH_OFFSET; 116 } 117 118 - static int mpfs_reset_probe(struct auxiliary_device *adev, 119 - const struct auxiliary_device_id *id) 120 { 121 - struct device *dev = &adev->dev; 122 struct reset_controller_dev *rcdev; 123 struct mpfs_reset *rst; 124 125 rst = devm_kzalloc(dev, sizeof(*rst), GFP_KERNEL); 126 if (!rst) 127 return -ENOMEM; 128 129 - rst->base = (void __iomem *)adev->dev.platform_data; 130 131 rcdev = &rst->rcdev; 132 rcdev->dev = dev; 133 - rcdev->dev->parent = dev->parent; 134 rcdev->ops = &mpfs_reset_ops; 135 rcdev->of_node = dev->parent->of_node; 136 rcdev->of_reset_n_cells = 1; 137 rcdev->of_xlate = mpfs_reset_xlate; ··· 175 return devm_reset_controller_register(dev, rcdev); 176 } 177 178 - int mpfs_reset_controller_register(struct device *clk_dev, void __iomem *base) 179 { 180 struct auxiliary_device *adev; 181 182 - adev = devm_auxiliary_device_create(clk_dev, "reset-mpfs", 183 - (__force void *)base); 184 if (!adev) 185 return -ENODEV; 186 ··· 195 }; 196 MODULE_DEVICE_TABLE(auxiliary, mpfs_reset_ids); 197 198 - static struct auxiliary_driver mpfs_reset_driver = { 199 - .probe = mpfs_reset_probe, 200 .id_table = mpfs_reset_ids, 201 }; 202 203 - module_auxiliary_driver(mpfs_reset_driver); 204 205 MODULE_DESCRIPTION("Microchip PolarFire SoC Reset Driver"); 206 MODULE_AUTHOR("Conor Dooley <conor.dooley@microchip.com>");
··· 9 #include <linux/auxiliary_bus.h> 10 #include <linux/delay.h> 11 #include <linux/io.h> 12 + #include <linux/mfd/syscon.h> 13 #include <linux/module.h> 14 #include <linux/of.h> 15 #include <linux/platform_device.h> 16 + #include <linux/regmap.h> 17 #include <linux/reset-controller.h> 18 + #include <linux/slab.h> 19 #include <dt-bindings/clock/microchip,mpfs-clock.h> 20 #include <soc/microchip/mpfs.h> 21 ··· 27 #define MPFS_SLEEP_MIN_US 100 28 #define MPFS_SLEEP_MAX_US 200 29 30 + #define REG_SUBBLK_RESET_CR 0x88u 31 32 struct mpfs_reset { 33 + struct regmap *regmap; 34 struct reset_controller_dev rcdev; 35 }; 36 ··· 46 static int mpfs_assert(struct reset_controller_dev *rcdev, unsigned long id) 47 { 48 struct mpfs_reset *rst = to_mpfs_reset(rcdev); 49 50 + return regmap_set_bits(rst->regmap, REG_SUBBLK_RESET_CR, BIT(id)); 51 52 } 53 54 static int mpfs_deassert(struct reset_controller_dev *rcdev, unsigned long id) 55 { 56 struct mpfs_reset *rst = to_mpfs_reset(rcdev); 57 58 + return regmap_clear_bits(rst->regmap, REG_SUBBLK_RESET_CR, BIT(id)); 59 60 } 61 62 static int mpfs_status(struct reset_controller_dev *rcdev, unsigned long id) 63 { 64 struct mpfs_reset *rst = to_mpfs_reset(rcdev); 65 + u32 reg; 66 + 67 + regmap_read(rst->regmap, REG_SUBBLK_RESET_CR, &reg); 68 69 /* 70 * It is safe to return here as MPFS_NUM_RESETS makes sure the sign bit ··· 130 return index - MPFS_PERIPH_OFFSET; 131 } 132 133 + static int mpfs_reset_mfd_probe(struct platform_device *pdev) 134 { 135 struct reset_controller_dev *rcdev; 136 + struct device *dev = &pdev->dev; 137 struct mpfs_reset *rst; 138 139 rst = devm_kzalloc(dev, sizeof(*rst), GFP_KERNEL); 140 if (!rst) 141 return -ENOMEM; 142 143 + rcdev = &rst->rcdev; 144 + rcdev->dev = dev; 145 + rcdev->ops = &mpfs_reset_ops; 146 + 147 + rcdev->of_node = pdev->dev.parent->of_node; 148 + rcdev->of_reset_n_cells = 1; 149 + rcdev->of_xlate = mpfs_reset_xlate; 150 + rcdev->nr_resets = MPFS_NUM_RESETS; 151 + 152 + rst->regmap = device_node_to_regmap(pdev->dev.parent->of_node); 153 + if (IS_ERR(rst->regmap)) 154 + return dev_err_probe(dev, PTR_ERR(rst->regmap), 155 + "Failed to find syscon regmap\n"); 156 + 157 + return devm_reset_controller_register(dev, rcdev); 158 + } 159 + 160 + static struct platform_driver mpfs_reset_mfd_driver = { 161 + .probe = mpfs_reset_mfd_probe, 162 + .driver = { 163 + .name = "mpfs-reset", 164 + }, 165 + }; 166 + module_platform_driver(mpfs_reset_mfd_driver); 167 + 168 + static int mpfs_reset_adev_probe(struct auxiliary_device *adev, 169 + const struct auxiliary_device_id *id) 170 + { 171 + struct reset_controller_dev *rcdev; 172 + struct device *dev = &adev->dev; 173 + struct mpfs_reset *rst; 174 + 175 + rst = devm_kzalloc(dev, sizeof(*rst), GFP_KERNEL); 176 + if (!rst) 177 + return -ENOMEM; 178 + 179 + rst->regmap = (struct regmap *)adev->dev.platform_data; 180 181 rcdev = &rst->rcdev; 182 rcdev->dev = dev; 183 rcdev->ops = &mpfs_reset_ops; 184 + 185 rcdev->of_node = dev->parent->of_node; 186 rcdev->of_reset_n_cells = 1; 187 rcdev->of_xlate = mpfs_reset_xlate; ··· 155 return devm_reset_controller_register(dev, rcdev); 156 } 157 158 + int mpfs_reset_controller_register(struct device *clk_dev, struct regmap *map) 159 { 160 struct auxiliary_device *adev; 161 162 + adev = devm_auxiliary_device_create(clk_dev, "reset-mpfs", (void *)map); 163 if (!adev) 164 return -ENODEV; 165 ··· 176 }; 177 MODULE_DEVICE_TABLE(auxiliary, mpfs_reset_ids); 178 179 + static struct auxiliary_driver mpfs_reset_aux_driver = { 180 + .probe = mpfs_reset_adev_probe, 181 .id_table = mpfs_reset_ids, 182 }; 183 184 + module_auxiliary_driver(mpfs_reset_aux_driver); 185 186 MODULE_DESCRIPTION("Microchip PolarFire SoC Reset Driver"); 187 MODULE_AUTHOR("Conor Dooley <conor.dooley@microchip.com>");
+5
include/dt-bindings/clock/imx8ulp-clock.h
··· 255 256 #define IMX8ULP_CLK_PCC5_END 56 257 258 #endif
··· 255 256 #define IMX8ULP_CLK_PCC5_END 56 257 258 + /* LPAV SIM */ 259 + #define IMX8ULP_CLK_SIM_LPAV_HIFI_CORE 0 260 + #define IMX8ULP_CLK_SIM_LPAV_HIFI_PBCLK 1 261 + #define IMX8ULP_CLK_SIM_LPAV_HIFI_PLAT 2 262 + 263 #endif
+241
include/dt-bindings/clock/qcom,kaanapali-gcc.h
···
··· 1 + /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2 + /* 3 + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. 4 + */ 5 + 6 + #ifndef _DT_BINDINGS_CLK_QCOM_GCC_KAANAPALI_H 7 + #define _DT_BINDINGS_CLK_QCOM_GCC_KAANAPALI_H 8 + 9 + /* GCC clocks */ 10 + #define GCC_AGGRE_NOC_PCIE_AXI_CLK 0 11 + #define GCC_AGGRE_UFS_PHY_AXI_CLK 1 12 + #define GCC_AGGRE_USB3_PRIM_AXI_CLK 2 13 + #define GCC_BOOT_ROM_AHB_CLK 3 14 + #define GCC_CAM_BIST_MCLK_AHB_CLK 4 15 + #define GCC_CAMERA_AHB_CLK 5 16 + #define GCC_CAMERA_HF_AXI_CLK 6 17 + #define GCC_CAMERA_SF_AXI_CLK 7 18 + #define GCC_CAMERA_XO_CLK 8 19 + #define GCC_CFG_NOC_PCIE_ANOC_AHB_CLK 9 20 + #define GCC_CFG_NOC_USB3_PRIM_AXI_CLK 10 21 + #define GCC_CNOC_PCIE_SF_AXI_CLK 11 22 + #define GCC_DDRSS_PCIE_SF_QTB_CLK 12 23 + #define GCC_QMIP_CAMERA_CMD_AHB_CLK 13 24 + #define GCC_DISP_HF_AXI_CLK 14 25 + #define GCC_DISP_SF_AXI_CLK 15 26 + #define GCC_EVA_AHB_CLK 16 27 + #define GCC_EVA_AXI0_CLK 17 28 + #define GCC_EVA_AXI0C_CLK 18 29 + #define GCC_EVA_XO_CLK 19 30 + #define GCC_GP1_CLK 20 31 + #define GCC_GP1_CLK_SRC 21 32 + #define GCC_GP2_CLK 22 33 + #define GCC_GP2_CLK_SRC 23 34 + #define GCC_GP3_CLK 24 35 + #define GCC_GP3_CLK_SRC 25 36 + #define GCC_GPLL0 26 37 + #define GCC_GPLL0_OUT_EVEN 27 38 + #define GCC_GPLL1 28 39 + #define GCC_GPLL4 29 40 + #define GCC_GPLL7 30 41 + #define GCC_GPLL9 31 42 + #define GCC_GPU_CFG_AHB_CLK 32 43 + #define GCC_GPU_GEMNOC_GFX_CLK 33 44 + #define GCC_GPU_GPLL0_CLK_SRC 34 45 + #define GCC_GPU_GPLL0_DIV_CLK_SRC 35 46 + #define GCC_QMIP_VIDEO_VCODEC_AHB_CLK 36 47 + #define GCC_QMIP_GPU_AHB_CLK 37 48 + #define GCC_PCIE_0_AUX_CLK 38 49 + #define GCC_PCIE_0_AUX_CLK_SRC 39 50 + #define GCC_PCIE_0_CFG_AHB_CLK 40 51 + #define GCC_PCIE_0_MSTR_AXI_CLK 41 52 + #define GCC_PCIE_0_PHY_AUX_CLK 42 53 + #define GCC_PCIE_0_PHY_AUX_CLK_SRC 43 54 + #define GCC_PCIE_0_PHY_RCHNG_CLK 44 55 + #define GCC_PCIE_0_PHY_RCHNG_CLK_SRC 45 56 + #define GCC_PCIE_0_PIPE_CLK 46 57 + #define GCC_PCIE_0_PIPE_CLK_SRC 47 58 + #define GCC_PCIE_0_SLV_AXI_CLK 48 59 + #define GCC_PCIE_0_SLV_Q2A_AXI_CLK 49 60 + #define GCC_PCIE_RSCC_CFG_AHB_CLK 50 61 + #define GCC_PCIE_RSCC_XO_CLK 51 62 + #define GCC_PDM2_CLK 52 63 + #define GCC_PDM2_CLK_SRC 53 64 + #define GCC_PDM_AHB_CLK 54 65 + #define GCC_PDM_XO4_CLK 55 66 + #define GCC_QUPV3_I2C_CORE_CLK 56 67 + #define GCC_QUPV3_I2C_S0_CLK 57 68 + #define GCC_QUPV3_I2C_S0_CLK_SRC 58 69 + #define GCC_QUPV3_I2C_S1_CLK 59 70 + #define GCC_QUPV3_I2C_S1_CLK_SRC 60 71 + #define GCC_QUPV3_I2C_S2_CLK 61 72 + #define GCC_QUPV3_I2C_S2_CLK_SRC 62 73 + #define GCC_QUPV3_I2C_S3_CLK 63 74 + #define GCC_QUPV3_I2C_S3_CLK_SRC 64 75 + #define GCC_QUPV3_I2C_S4_CLK 65 76 + #define GCC_QUPV3_I2C_S4_CLK_SRC 66 77 + #define GCC_QUPV3_I2C_S_AHB_CLK 67 78 + #define GCC_QUPV3_WRAP1_CORE_2X_CLK 68 79 + #define GCC_QUPV3_WRAP1_CORE_CLK 69 80 + #define GCC_QUPV3_WRAP1_QSPI_REF_CLK 70 81 + #define GCC_QUPV3_WRAP1_QSPI_REF_CLK_SRC 71 82 + #define GCC_QUPV3_WRAP1_S0_CLK 72 83 + #define GCC_QUPV3_WRAP1_S0_CLK_SRC 73 84 + #define GCC_QUPV3_WRAP1_S1_CLK 74 85 + #define GCC_QUPV3_WRAP1_S1_CLK_SRC 75 86 + #define GCC_QUPV3_WRAP1_S2_CLK 76 87 + #define GCC_QUPV3_WRAP1_S2_CLK_SRC 77 88 + #define GCC_QUPV3_WRAP1_S3_CLK 78 89 + #define GCC_QUPV3_WRAP1_S3_CLK_SRC 79 90 + #define GCC_QUPV3_WRAP1_S4_CLK 80 91 + #define GCC_QUPV3_WRAP1_S4_CLK_SRC 81 92 + #define GCC_QUPV3_WRAP1_S5_CLK 82 93 + #define GCC_QUPV3_WRAP1_S5_CLK_SRC 83 94 + #define GCC_QUPV3_WRAP1_S6_CLK 84 95 + #define GCC_QUPV3_WRAP1_S6_CLK_SRC 85 96 + #define GCC_QUPV3_WRAP1_S7_CLK 86 97 + #define GCC_QUPV3_WRAP1_S7_CLK_SRC 87 98 + #define GCC_QUPV3_WRAP2_CORE_2X_CLK 88 99 + #define GCC_QUPV3_WRAP2_CORE_CLK 89 100 + #define GCC_QUPV3_WRAP2_S0_CLK 90 101 + #define GCC_QUPV3_WRAP2_S0_CLK_SRC 91 102 + #define GCC_QUPV3_WRAP2_S1_CLK 92 103 + #define GCC_QUPV3_WRAP2_S1_CLK_SRC 93 104 + #define GCC_QUPV3_WRAP2_S2_CLK 94 105 + #define GCC_QUPV3_WRAP2_S2_CLK_SRC 95 106 + #define GCC_QUPV3_WRAP2_S3_CLK 96 107 + #define GCC_QUPV3_WRAP2_S3_CLK_SRC 97 108 + #define GCC_QUPV3_WRAP2_S4_CLK 98 109 + #define GCC_QUPV3_WRAP2_S4_CLK_SRC 99 110 + #define GCC_QUPV3_WRAP3_CORE_2X_CLK 100 111 + #define GCC_QUPV3_WRAP3_CORE_CLK 101 112 + #define GCC_QUPV3_WRAP3_IBI_CTRL_0_CLK_SRC 102 113 + #define GCC_QUPV3_WRAP3_IBI_CTRL_1_CLK 103 114 + #define GCC_QUPV3_WRAP3_IBI_CTRL_2_CLK 104 115 + #define GCC_QUPV3_WRAP3_S0_CLK 105 116 + #define GCC_QUPV3_WRAP3_S0_CLK_SRC 106 117 + #define GCC_QUPV3_WRAP3_S1_CLK 107 118 + #define GCC_QUPV3_WRAP3_S1_CLK_SRC 108 119 + #define GCC_QUPV3_WRAP3_S2_CLK 109 120 + #define GCC_QUPV3_WRAP3_S2_CLK_SRC 110 121 + #define GCC_QUPV3_WRAP3_S3_CLK 111 122 + #define GCC_QUPV3_WRAP3_S3_CLK_SRC 112 123 + #define GCC_QUPV3_WRAP3_S4_CLK 113 124 + #define GCC_QUPV3_WRAP3_S4_CLK_SRC 114 125 + #define GCC_QUPV3_WRAP3_S5_CLK 115 126 + #define GCC_QUPV3_WRAP3_S5_CLK_SRC 116 127 + #define GCC_QUPV3_WRAP4_CORE_2X_CLK 117 128 + #define GCC_QUPV3_WRAP4_CORE_CLK 118 129 + #define GCC_QUPV3_WRAP4_S0_CLK 119 130 + #define GCC_QUPV3_WRAP4_S0_CLK_SRC 120 131 + #define GCC_QUPV3_WRAP4_S1_CLK 121 132 + #define GCC_QUPV3_WRAP4_S1_CLK_SRC 122 133 + #define GCC_QUPV3_WRAP4_S2_CLK 123 134 + #define GCC_QUPV3_WRAP4_S2_CLK_SRC 124 135 + #define GCC_QUPV3_WRAP4_S3_CLK 125 136 + #define GCC_QUPV3_WRAP4_S3_CLK_SRC 126 137 + #define GCC_QUPV3_WRAP4_S4_CLK 127 138 + #define GCC_QUPV3_WRAP4_S4_CLK_SRC 128 139 + #define GCC_QUPV3_WRAP_1_M_AXI_CLK 129 140 + #define GCC_QUPV3_WRAP_1_S_AHB_CLK 130 141 + #define GCC_QUPV3_WRAP_2_M_AHB_CLK 131 142 + #define GCC_QUPV3_WRAP_2_S_AHB_CLK 132 143 + #define GCC_QUPV3_WRAP_3_IBI_1_AHB_CLK 133 144 + #define GCC_QUPV3_WRAP_3_IBI_2_AHB_CLK 134 145 + #define GCC_QUPV3_WRAP_3_M_AHB_CLK 135 146 + #define GCC_QUPV3_WRAP_3_S_AHB_CLK 136 147 + #define GCC_QUPV3_WRAP_4_M_AHB_CLK 137 148 + #define GCC_QUPV3_WRAP_4_S_AHB_CLK 138 149 + #define GCC_SDCC2_AHB_CLK 139 150 + #define GCC_SDCC2_APPS_CLK 140 151 + #define GCC_SDCC2_APPS_CLK_SRC 141 152 + #define GCC_SDCC4_AHB_CLK 142 153 + #define GCC_SDCC4_APPS_CLK 143 154 + #define GCC_SDCC4_APPS_CLK_SRC 144 155 + #define GCC_UFS_PHY_AHB_CLK 145 156 + #define GCC_UFS_PHY_AXI_CLK 146 157 + #define GCC_UFS_PHY_AXI_CLK_SRC 147 158 + #define GCC_UFS_PHY_ICE_CORE_CLK 148 159 + #define GCC_UFS_PHY_ICE_CORE_CLK_SRC 149 160 + #define GCC_UFS_PHY_PHY_AUX_CLK 150 161 + #define GCC_UFS_PHY_PHY_AUX_CLK_SRC 151 162 + #define GCC_UFS_PHY_RX_SYMBOL_0_CLK 152 163 + #define GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC 153 164 + #define GCC_UFS_PHY_RX_SYMBOL_1_CLK 154 165 + #define GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC 155 166 + #define GCC_UFS_PHY_TX_SYMBOL_0_CLK 156 167 + #define GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC 157 168 + #define GCC_UFS_PHY_UNIPRO_CORE_CLK 158 169 + #define GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC 159 170 + #define GCC_USB30_PRIM_MASTER_CLK 160 171 + #define GCC_USB30_PRIM_MASTER_CLK_SRC 161 172 + #define GCC_USB30_PRIM_MOCK_UTMI_CLK 162 173 + #define GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC 163 174 + #define GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC 164 175 + #define GCC_USB30_PRIM_SLEEP_CLK 165 176 + #define GCC_USB3_PRIM_PHY_AUX_CLK 166 177 + #define GCC_USB3_PRIM_PHY_AUX_CLK_SRC 167 178 + #define GCC_USB3_PRIM_PHY_COM_AUX_CLK 168 179 + #define GCC_USB3_PRIM_PHY_PIPE_CLK 169 180 + #define GCC_USB3_PRIM_PHY_PIPE_CLK_SRC 170 181 + #define GCC_VIDEO_AHB_CLK 171 182 + #define GCC_VIDEO_AXI0_CLK 172 183 + #define GCC_VIDEO_AXI1_CLK 173 184 + #define GCC_VIDEO_XO_CLK 174 185 + #define GCC_QMIP_CAMERA_NRT_AHB_CLK 175 186 + #define GCC_QMIP_CAMERA_RT_AHB_CLK 176 187 + #define GCC_QMIP_DISP_DCP_SF_AHB_CLK 177 188 + #define GCC_QMIP_PCIE_AHB_CLK 178 189 + #define GCC_QMIP_VIDEO_CV_CPU_AHB_CLK 179 190 + #define GCC_QMIP_VIDEO_CVP_AHB_CLK 180 191 + #define GCC_QMIP_VIDEO_V_CPU_AHB_CLK 181 192 + #define GCC_DISP_AHB_CLK 182 193 + 194 + /* GCC power domains */ 195 + #define GCC_PCIE_0_GDSC 0 196 + #define GCC_PCIE_0_PHY_GDSC 1 197 + #define GCC_UFS_MEM_PHY_GDSC 2 198 + #define GCC_UFS_PHY_GDSC 3 199 + #define GCC_USB30_PRIM_GDSC 4 200 + #define GCC_USB3_PHY_GDSC 5 201 + 202 + /* GCC resets */ 203 + #define GCC_CAMERA_BCR 0 204 + #define GCC_DISPLAY_BCR 1 205 + #define GCC_EVA_AXI0_CLK_ARES 2 206 + #define GCC_EVA_AXI0C_CLK_ARES 3 207 + #define GCC_EVA_BCR 4 208 + #define GCC_GPU_BCR 5 209 + #define GCC_PCIE_0_BCR 6 210 + #define GCC_PCIE_0_LINK_DOWN_BCR 7 211 + #define GCC_PCIE_0_NOCSR_COM_PHY_BCR 8 212 + #define GCC_PCIE_0_PHY_BCR 9 213 + #define GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR 10 214 + #define GCC_PCIE_PHY_BCR 11 215 + #define GCC_PCIE_PHY_CFG_AHB_BCR 12 216 + #define GCC_PCIE_PHY_COM_BCR 13 217 + #define GCC_PCIE_RSCC_BCR 14 218 + #define GCC_PDM_BCR 15 219 + #define GCC_QUPV3_WRAPPER_1_BCR 16 220 + #define GCC_QUPV3_WRAPPER_2_BCR 17 221 + #define GCC_QUPV3_WRAPPER_3_BCR 18 222 + #define GCC_QUPV3_WRAPPER_4_BCR 19 223 + #define GCC_QUPV3_WRAPPER_I2C_BCR 20 224 + #define GCC_QUSB2PHY_PRIM_BCR 21 225 + #define GCC_QUSB2PHY_SEC_BCR 22 226 + #define GCC_SDCC2_BCR 23 227 + #define GCC_SDCC4_BCR 24 228 + #define GCC_UFS_PHY_BCR 25 229 + #define GCC_USB30_PRIM_BCR 26 230 + #define GCC_USB3_DP_PHY_PRIM_BCR 27 231 + #define GCC_USB3_DP_PHY_SEC_BCR 28 232 + #define GCC_USB3_PHY_PRIM_BCR 29 233 + #define GCC_USB3_PHY_SEC_BCR 30 234 + #define GCC_USB3PHY_PHY_PRIM_BCR 31 235 + #define GCC_USB3PHY_PHY_SEC_BCR 32 236 + #define GCC_VIDEO_AXI0_CLK_ARES 33 237 + #define GCC_VIDEO_AXI1_CLK_ARES 34 238 + #define GCC_VIDEO_BCR 35 239 + #define GCC_VIDEO_XO_CLK_ARES 36 240 + 241 + #endif
+1
include/dt-bindings/clock/qcom,mmcc-sdm660.h
··· 157 #define BIMC_SMMU_GDSC 7 158 159 #define CAMSS_MICRO_BCR 0 160 161 #endif 162
··· 157 #define BIMC_SMMU_GDSC 7 158 159 #define CAMSS_MICRO_BCR 0 160 + #define MDSS_BCR 1 161 162 #endif 163
+3
include/dt-bindings/clock/qcom,sm7150-dispcc.h
··· 53 #define DISPCC_SLEEP_CLK 41 54 #define DISPCC_SLEEP_CLK_SRC 42 55 56 /* DISPCC GDSCR */ 57 #define MDSS_GDSC 0 58
··· 53 #define DISPCC_SLEEP_CLK 41 54 #define DISPCC_SLEEP_CLK_SRC 42 55 56 + /* DISPCC resets */ 57 + #define DISPCC_MDSS_CORE_BCR 0 58 + 59 /* DISPCC GDSCR */ 60 #define MDSS_GDSC 0 61
+40
include/dt-bindings/clock/qcom,sm8750-videocc.h
···
··· 1 + /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2 + /* 3 + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. 4 + */ 5 + 6 + #ifndef _DT_BINDINGS_CLK_QCOM_VIDEO_CC_SM8750_H 7 + #define _DT_BINDINGS_CLK_QCOM_VIDEO_CC_SM8750_H 8 + 9 + /* VIDEO_CC clocks */ 10 + #define VIDEO_CC_AHB_CLK 0 11 + #define VIDEO_CC_AHB_CLK_SRC 1 12 + #define VIDEO_CC_MVS0_CLK 2 13 + #define VIDEO_CC_MVS0_CLK_SRC 3 14 + #define VIDEO_CC_MVS0_DIV_CLK_SRC 4 15 + #define VIDEO_CC_MVS0_FREERUN_CLK 5 16 + #define VIDEO_CC_MVS0_SHIFT_CLK 6 17 + #define VIDEO_CC_MVS0C_CLK 7 18 + #define VIDEO_CC_MVS0C_DIV2_DIV_CLK_SRC 8 19 + #define VIDEO_CC_MVS0C_FREERUN_CLK 9 20 + #define VIDEO_CC_MVS0C_SHIFT_CLK 10 21 + #define VIDEO_CC_PLL0 11 22 + #define VIDEO_CC_SLEEP_CLK 12 23 + #define VIDEO_CC_SLEEP_CLK_SRC 13 24 + #define VIDEO_CC_XO_CLK 14 25 + #define VIDEO_CC_XO_CLK_SRC 15 26 + 27 + /* VIDEO_CC power domains */ 28 + #define VIDEO_CC_MVS0_GDSC 0 29 + #define VIDEO_CC_MVS0C_GDSC 1 30 + 31 + /* VIDEO_CC resets */ 32 + #define VIDEO_CC_INTERFACE_BCR 0 33 + #define VIDEO_CC_MVS0_BCR 1 34 + #define VIDEO_CC_MVS0C_CLK_ARES 2 35 + #define VIDEO_CC_MVS0C_BCR 3 36 + #define VIDEO_CC_MVS0_FREERUN_CLK_ARES 4 37 + #define VIDEO_CC_MVS0C_FREERUN_CLK_ARES 5 38 + #define VIDEO_CC_XO_CLK_ARES 6 39 + 40 + #endif
+3
include/dt-bindings/clock/qcom,x1e80100-dispcc.h
··· 90 #define DISP_CC_MDSS_CORE_BCR 0 91 #define DISP_CC_MDSS_CORE_INT2_BCR 1 92 #define DISP_CC_MDSS_RSCC_BCR 2 93 94 /* DISP_CC GDSCR */ 95 #define MDSS_GDSC 0
··· 90 #define DISP_CC_MDSS_CORE_BCR 0 91 #define DISP_CC_MDSS_CORE_INT2_BCR 1 92 #define DISP_CC_MDSS_RSCC_BCR 2 93 + #define DISP_CC_MDSS_DPTX0_USB_ROUTER_LINK_INTF_CLK_ARES 3 94 + #define DISP_CC_MDSS_DPTX1_USB_ROUTER_LINK_INTF_CLK_ARES 4 95 + #define DISP_CC_MDSS_DPTX2_USB_ROUTER_LINK_INTF_CLK_ARES 5 96 97 /* DISP_CC GDSCR */ 98 #define MDSS_GDSC 0
+2
include/dt-bindings/clock/renesas,r9a09g047-cpg.h
··· 22 #define R9A09G047_GBETH_1_CLK_PTP_REF_I 11 23 #define R9A09G047_USB3_0_REF_ALT_CLK_P 12 24 #define R9A09G047_USB3_0_CLKCORE 13 25 26 #endif /* __DT_BINDINGS_CLOCK_RENESAS_R9A09G047_CPG_H__ */
··· 22 #define R9A09G047_GBETH_1_CLK_PTP_REF_I 11 23 #define R9A09G047_USB3_0_REF_ALT_CLK_P 12 24 #define R9A09G047_USB3_0_CLKCORE 13 25 + #define R9A09G047_USB2_0_CLK_CORE0 14 26 + #define R9A09G047_USB2_0_CLK_CORE1 15 27 28 #endif /* __DT_BINDINGS_CLOCK_RENESAS_R9A09G047_CPG_H__ */
+2
include/dt-bindings/clock/renesas,r9a09g056-cpg.h
··· 21 #define R9A09G056_GBETH_0_CLK_PTP_REF_I 10 22 #define R9A09G056_GBETH_1_CLK_PTP_REF_I 11 23 #define R9A09G056_SPI_CLK_SPI 12 24 25 #endif /* __DT_BINDINGS_CLOCK_RENESAS_R9A09G056_CPG_H__ */
··· 21 #define R9A09G056_GBETH_0_CLK_PTP_REF_I 10 22 #define R9A09G056_GBETH_1_CLK_PTP_REF_I 11 23 #define R9A09G056_SPI_CLK_SPI 12 24 + #define R9A09G056_USB3_0_REF_ALT_CLK_P 13 25 + #define R9A09G056_USB3_0_CLKCORE 14 26 27 #endif /* __DT_BINDINGS_CLOCK_RENESAS_R9A09G056_CPG_H__ */
+4
include/dt-bindings/clock/renesas,r9a09g057-cpg.h
··· 22 #define R9A09G057_GBETH_0_CLK_PTP_REF_I 11 23 #define R9A09G057_GBETH_1_CLK_PTP_REF_I 12 24 #define R9A09G057_SPI_CLK_SPI 13 25 26 #endif /* __DT_BINDINGS_CLOCK_RENESAS_R9A09G057_CPG_H__ */
··· 22 #define R9A09G057_GBETH_0_CLK_PTP_REF_I 11 23 #define R9A09G057_GBETH_1_CLK_PTP_REF_I 12 24 #define R9A09G057_SPI_CLK_SPI 13 25 + #define R9A09G057_USB3_0_REF_ALT_CLK_P 14 26 + #define R9A09G057_USB3_0_CLKCORE 15 27 + #define R9A09G057_USB3_1_REF_ALT_CLK_P 16 28 + #define R9A09G057_USB3_1_CLKCORE 17 29 30 #endif /* __DT_BINDINGS_CLOCK_RENESAS_R9A09G057_CPG_H__ */
-2
include/dt-bindings/clock/rk3568-cru.h
··· 483 484 #define PCLK_CORE_PVTM 450 485 486 - #define CLK_NR_CLKS (PCLK_CORE_PVTM + 1) 487 - 488 /* scmi-clocks indices */ 489 490 #define SCMI_CLK_CPU 0
··· 483 484 #define PCLK_CORE_PVTM 450 485 486 /* scmi-clocks indices */ 487 488 #define SCMI_CLK_CPU 0
+285
include/dt-bindings/clock/rockchip,rk3506-cru.h
···
··· 1 + /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2 + /* 3 + * Copyright (c) 2023-2025 Rockchip Electronics Co., Ltd. 4 + * Author: Finley Xiao <finley.xiao@rock-chips.com> 5 + */ 6 + 7 + #ifndef _DT_BINDINGS_CLK_ROCKCHIP_RK3506_H 8 + #define _DT_BINDINGS_CLK_ROCKCHIP_RK3506_H 9 + 10 + /* cru plls */ 11 + #define PLL_GPLL 0 12 + #define PLL_V0PLL 1 13 + #define PLL_V1PLL 2 14 + 15 + /* cru-clocks indices */ 16 + #define ARMCLK 3 17 + #define CLK_DDR 4 18 + #define XIN24M_GATE 5 19 + #define CLK_GPLL_GATE 6 20 + #define CLK_V0PLL_GATE 7 21 + #define CLK_V1PLL_GATE 8 22 + #define CLK_GPLL_DIV 9 23 + #define CLK_GPLL_DIV_100M 10 24 + #define CLK_V0PLL_DIV 11 25 + #define CLK_V1PLL_DIV 12 26 + #define CLK_INT_VOICE_MATRIX0 13 27 + #define CLK_INT_VOICE_MATRIX1 14 28 + #define CLK_INT_VOICE_MATRIX2 15 29 + #define CLK_FRAC_UART_MATRIX0_MUX 16 30 + #define CLK_FRAC_UART_MATRIX1_MUX 17 31 + #define CLK_FRAC_VOICE_MATRIX0_MUX 18 32 + #define CLK_FRAC_VOICE_MATRIX1_MUX 19 33 + #define CLK_FRAC_COMMON_MATRIX0_MUX 20 34 + #define CLK_FRAC_COMMON_MATRIX1_MUX 21 35 + #define CLK_FRAC_COMMON_MATRIX2_MUX 22 36 + #define CLK_FRAC_UART_MATRIX0 23 37 + #define CLK_FRAC_UART_MATRIX1 24 38 + #define CLK_FRAC_VOICE_MATRIX0 25 39 + #define CLK_FRAC_VOICE_MATRIX1 26 40 + #define CLK_FRAC_COMMON_MATRIX0 27 41 + #define CLK_FRAC_COMMON_MATRIX1 28 42 + #define CLK_FRAC_COMMON_MATRIX2 29 43 + #define CLK_REF_USBPHY_TOP 30 44 + #define CLK_REF_DPHY_TOP 31 45 + #define ACLK_CORE_ROOT 32 46 + #define PCLK_CORE_ROOT 33 47 + #define PCLK_DBG 34 48 + #define PCLK_CORE_GRF 35 49 + #define PCLK_CORE_CRU 36 50 + #define CLK_CORE_EMA_DETECT 37 51 + #define CLK_REF_PVTPLL_CORE 38 52 + #define PCLK_GPIO1 39 53 + #define DBCLK_GPIO1 40 54 + #define ACLK_CORE_PERI_ROOT 41 55 + #define HCLK_CORE_PERI_ROOT 42 56 + #define PCLK_CORE_PERI_ROOT 43 57 + #define CLK_DSMC 44 58 + #define ACLK_DSMC 45 59 + #define PCLK_DSMC 46 60 + #define CLK_FLEXBUS_TX 47 61 + #define CLK_FLEXBUS_RX 48 62 + #define ACLK_FLEXBUS 49 63 + #define HCLK_FLEXBUS 50 64 + #define ACLK_DSMC_SLV 51 65 + #define HCLK_DSMC_SLV 52 66 + #define ACLK_BUS_ROOT 53 67 + #define HCLK_BUS_ROOT 54 68 + #define PCLK_BUS_ROOT 55 69 + #define ACLK_SYSRAM 56 70 + #define HCLK_SYSRAM 57 71 + #define ACLK_DMAC0 58 72 + #define ACLK_DMAC1 59 73 + #define HCLK_M0 60 74 + #define PCLK_BUS_GRF 61 75 + #define PCLK_TIMER 62 76 + #define CLK_TIMER0_CH0 63 77 + #define CLK_TIMER0_CH1 64 78 + #define CLK_TIMER0_CH2 65 79 + #define CLK_TIMER0_CH3 66 80 + #define CLK_TIMER0_CH4 67 81 + #define CLK_TIMER0_CH5 68 82 + #define PCLK_WDT0 69 83 + #define TCLK_WDT0 70 84 + #define PCLK_WDT1 71 85 + #define TCLK_WDT1 72 86 + #define PCLK_MAILBOX 73 87 + #define PCLK_INTMUX 74 88 + #define PCLK_SPINLOCK 75 89 + #define PCLK_DDRC 76 90 + #define HCLK_DDRPHY 77 91 + #define PCLK_DDRMON 78 92 + #define CLK_DDRMON_OSC 79 93 + #define PCLK_STDBY 80 94 + #define HCLK_USBOTG0 81 95 + #define HCLK_USBOTG0_PMU 82 96 + #define CLK_USBOTG0_ADP 83 97 + #define HCLK_USBOTG1 84 98 + #define HCLK_USBOTG1_PMU 85 99 + #define CLK_USBOTG1_ADP 86 100 + #define PCLK_USBPHY 87 101 + #define ACLK_DMA2DDR 88 102 + #define PCLK_DMA2DDR 89 103 + #define STCLK_M0 90 104 + #define CLK_DDRPHY 91 105 + #define CLK_DDRC_SRC 92 106 + #define ACLK_DDRC_0 93 107 + #define ACLK_DDRC_1 94 108 + #define CLK_DDRC 95 109 + #define CLK_DDRMON 96 110 + #define HCLK_LSPERI_ROOT 97 111 + #define PCLK_LSPERI_ROOT 98 112 + #define PCLK_UART0 99 113 + #define PCLK_UART1 100 114 + #define PCLK_UART2 101 115 + #define PCLK_UART3 102 116 + #define PCLK_UART4 103 117 + #define SCLK_UART0 104 118 + #define SCLK_UART1 105 119 + #define SCLK_UART2 106 120 + #define SCLK_UART3 107 121 + #define SCLK_UART4 108 122 + #define PCLK_I2C0 109 123 + #define CLK_I2C0 110 124 + #define PCLK_I2C1 111 125 + #define CLK_I2C1 112 126 + #define PCLK_I2C2 113 127 + #define CLK_I2C2 114 128 + #define PCLK_PWM1 115 129 + #define CLK_PWM1 116 130 + #define CLK_OSC_PWM1 117 131 + #define CLK_RC_PWM1 118 132 + #define CLK_FREQ_PWM1 119 133 + #define CLK_COUNTER_PWM1 120 134 + #define PCLK_SPI0 121 135 + #define CLK_SPI0 122 136 + #define PCLK_SPI1 123 137 + #define CLK_SPI1 124 138 + #define PCLK_GPIO2 125 139 + #define DBCLK_GPIO2 126 140 + #define PCLK_GPIO3 127 141 + #define DBCLK_GPIO3 128 142 + #define PCLK_GPIO4 129 143 + #define DBCLK_GPIO4 130 144 + #define HCLK_CAN0 131 145 + #define CLK_CAN0 132 146 + #define HCLK_CAN1 133 147 + #define CLK_CAN1 134 148 + #define HCLK_PDM 135 149 + #define MCLK_PDM 136 150 + #define CLKOUT_PDM 137 151 + #define MCLK_SPDIFTX 138 152 + #define HCLK_SPDIFTX 139 153 + #define HCLK_SPDIFRX 140 154 + #define MCLK_SPDIFRX 141 155 + #define MCLK_SAI0 142 156 + #define HCLK_SAI0 143 157 + #define MCLK_OUT_SAI0 144 158 + #define MCLK_SAI1 145 159 + #define HCLK_SAI1 146 160 + #define MCLK_OUT_SAI1 147 161 + #define HCLK_ASRC0 148 162 + #define CLK_ASRC0 149 163 + #define HCLK_ASRC1 150 164 + #define CLK_ASRC1 151 165 + #define PCLK_CRU 152 166 + #define PCLK_PMU_ROOT 153 167 + #define MCLK_ASRC0 154 168 + #define MCLK_ASRC1 155 169 + #define MCLK_ASRC2 156 170 + #define MCLK_ASRC3 157 171 + #define LRCK_ASRC0_SRC 158 172 + #define LRCK_ASRC0_DST 159 173 + #define LRCK_ASRC1_SRC 160 174 + #define LRCK_ASRC1_DST 161 175 + #define ACLK_HSPERI_ROOT 162 176 + #define HCLK_HSPERI_ROOT 163 177 + #define PCLK_HSPERI_ROOT 164 178 + #define CCLK_SRC_SDMMC 165 179 + #define HCLK_SDMMC 166 180 + #define HCLK_FSPI 167 181 + #define SCLK_FSPI 168 182 + #define PCLK_SPI2 169 183 + #define ACLK_MAC0 170 184 + #define ACLK_MAC1 171 185 + #define PCLK_MAC0 172 186 + #define PCLK_MAC1 173 187 + #define CLK_MAC_ROOT 174 188 + #define CLK_MAC0 175 189 + #define CLK_MAC1 176 190 + #define MCLK_SAI2 177 191 + #define HCLK_SAI2 178 192 + #define MCLK_OUT_SAI2 179 193 + #define MCLK_SAI3_SRC 180 194 + #define HCLK_SAI3 181 195 + #define MCLK_SAI3 182 196 + #define MCLK_OUT_SAI3 183 197 + #define MCLK_SAI4_SRC 184 198 + #define HCLK_SAI4 185 199 + #define MCLK_SAI4 186 200 + #define HCLK_DSM 187 201 + #define MCLK_DSM 188 202 + #define PCLK_AUDIO_ADC 189 203 + #define MCLK_AUDIO_ADC 190 204 + #define MCLK_AUDIO_ADC_DIV4 191 205 + #define PCLK_SARADC 192 206 + #define CLK_SARADC 193 207 + #define PCLK_OTPC_NS 194 208 + #define CLK_SBPI_OTPC_NS 195 209 + #define CLK_USER_OTPC_NS 196 210 + #define PCLK_UART5 197 211 + #define SCLK_UART5 198 212 + #define PCLK_GPIO234_IOC 199 213 + #define CLK_MAC_PTP_ROOT 200 214 + #define CLK_MAC0_PTP 201 215 + #define CLK_MAC1_PTP 202 216 + #define CLK_SPI2 203 217 + #define ACLK_VIO_ROOT 204 218 + #define HCLK_VIO_ROOT 205 219 + #define PCLK_VIO_ROOT 206 220 + #define HCLK_RGA 207 221 + #define ACLK_RGA 208 222 + #define CLK_CORE_RGA 209 223 + #define ACLK_VOP 210 224 + #define HCLK_VOP 211 225 + #define DCLK_VOP 212 226 + #define PCLK_DPHY 213 227 + #define PCLK_DSI_HOST 214 228 + #define PCLK_TSADC 215 229 + #define CLK_TSADC 216 230 + #define CLK_TSADC_TSEN 217 231 + #define PCLK_GPIO1_IOC 218 232 + #define PCLK_OTPC_S 219 233 + #define CLK_SBPI_OTPC_S 220 234 + #define CLK_USER_OTPC_S 221 235 + #define PCLK_OTP_MASK 222 236 + #define PCLK_KEYREADER 223 237 + #define HCLK_BOOTROM 224 238 + #define PCLK_DDR_SERVICE 225 239 + #define HCLK_CRYPTO_S 226 240 + #define HCLK_KEYLAD 227 241 + #define CLK_CORE_CRYPTO 228 242 + #define CLK_PKA_CRYPTO 229 243 + #define CLK_CORE_CRYPTO_S 230 244 + #define CLK_PKA_CRYPTO_S 231 245 + #define ACLK_CRYPTO_S 232 246 + #define HCLK_RNG_S 233 247 + #define CLK_CORE_CRYPTO_NS 234 248 + #define CLK_PKA_CRYPTO_NS 235 249 + #define ACLK_CRYPTO_NS 236 250 + #define HCLK_CRYPTO_NS 237 251 + #define HCLK_RNG 238 252 + #define CLK_PMU 239 253 + #define PCLK_PMU 240 254 + #define CLK_PMU_32K 241 255 + #define PCLK_PMU_CRU 242 256 + #define PCLK_PMU_GRF 243 257 + #define PCLK_GPIO0_IOC 244 258 + #define PCLK_GPIO0 245 259 + #define DBCLK_GPIO0 246 260 + #define PCLK_GPIO1_SHADOW 247 261 + #define DBCLK_GPIO1_SHADOW 248 262 + #define PCLK_PMU_HP_TIMER 249 263 + #define CLK_PMU_HP_TIMER 250 264 + #define CLK_PMU_HP_TIMER_32K 251 265 + #define PCLK_PWM0 252 266 + #define CLK_PWM0 253 267 + #define CLK_OSC_PWM0 254 268 + #define CLK_RC_PWM0 255 269 + #define CLK_MAC_OUT 256 270 + #define CLK_REF_OUT0 257 271 + #define CLK_REF_OUT1 258 272 + #define CLK_32K_FRAC 259 273 + #define CLK_32K_RC 260 274 + #define CLK_32K 261 275 + #define CLK_32K_PMU 262 276 + #define PCLK_TOUCH_KEY 263 277 + #define CLK_TOUCH_KEY 264 278 + #define CLK_REF_PHY_PLL 265 279 + #define CLK_REF_PHY_PMU_MUX 266 280 + #define CLK_WIFI_OUT 267 281 + #define CLK_V0PLL_REF 268 282 + #define CLK_V1PLL_REF 269 283 + #define CLK_32K_FRAC_MUX 270 284 + 285 + #endif
+392
include/dt-bindings/clock/rockchip,rv1126b-cru.h
···
··· 1 + /* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */ 2 + /* 3 + * Copyright (c) 2025 Rockchip Electronics Co., Ltd. 4 + * Author: Elaine Zhang <zhangqing@rock-chips.com> 5 + */ 6 + 7 + #ifndef _DT_BINDINGS_CLK_ROCKCHIP_RV1126B_H 8 + #define _DT_BINDINGS_CLK_ROCKCHIP_RV1126B_H 9 + 10 + /* pll clocks */ 11 + #define PLL_GPLL 0 12 + #define PLL_CPLL 1 13 + #define PLL_AUPLL 2 14 + #define ARMCLK 3 15 + #define SCLK_DDR 4 16 + 17 + /* clk (clocks) */ 18 + #define CLK_CPLL_DIV20 5 19 + #define CLK_CPLL_DIV10 6 20 + #define CLK_CPLL_DIV8 7 21 + #define CLK_GPLL_DIV8 8 22 + #define CLK_GPLL_DIV6 9 23 + #define CLK_GPLL_DIV4 10 24 + #define CLK_CPLL_DIV3 11 25 + #define CLK_GPLL_DIV3 12 26 + #define CLK_CPLL_DIV2 13 27 + #define CLK_GPLL_DIV2 14 28 + #define CLK_CM_FRAC0 15 29 + #define CLK_CM_FRAC1 16 30 + #define CLK_CM_FRAC2 17 31 + #define CLK_UART_FRAC0 18 32 + #define CLK_UART_FRAC1 19 33 + #define CLK_AUDIO_FRAC0 20 34 + #define CLK_AUDIO_FRAC1 21 35 + #define CLK_AUDIO_INT0 22 36 + #define CLK_AUDIO_INT1 23 37 + #define SCLK_UART0_SRC 24 38 + #define SCLK_UART1 25 39 + #define SCLK_UART2 26 40 + #define SCLK_UART3 27 41 + #define SCLK_UART4 28 42 + #define SCLK_UART5 29 43 + #define SCLK_UART6 30 44 + #define SCLK_UART7 31 45 + #define MCLK_SAI0 32 46 + #define MCLK_SAI1 33 47 + #define MCLK_SAI2 34 48 + #define MCLK_PDM 35 49 + #define CLKOUT_PDM 36 50 + #define MCLK_ASRC0 37 51 + #define MCLK_ASRC1 38 52 + #define MCLK_ASRC2 39 53 + #define MCLK_ASRC3 40 54 + #define CLK_ASRC0 41 55 + #define CLK_ASRC1 42 56 + #define CLK_CORE_PLL 43 57 + #define CLK_NPU_PLL 44 58 + #define CLK_VEPU_PLL 45 59 + #define CLK_ISP_PLL 46 60 + #define CLK_AISP_PLL 47 61 + #define CLK_SARADC0_SRC 48 62 + #define CLK_SARADC1_SRC 49 63 + #define CLK_SARADC2_SRC 50 64 + #define HCLK_NPU_ROOT 51 65 + #define PCLK_NPU_ROOT 52 66 + #define ACLK_VEPU_ROOT 53 67 + #define HCLK_VEPU_ROOT 54 68 + #define PCLK_VEPU_ROOT 55 69 + #define CLK_CORE_RGA_SRC 56 70 + #define ACLK_GMAC_ROOT 57 71 + #define ACLK_VI_ROOT 58 72 + #define HCLK_VI_ROOT 59 73 + #define PCLK_VI_ROOT 60 74 + #define DCLK_VICAP_ROOT 61 75 + #define CLK_SYS_DSMC_ROOT 62 76 + #define ACLK_VDO_ROOT 63 77 + #define ACLK_RKVDEC_ROOT 64 78 + #define HCLK_VDO_ROOT 65 79 + #define PCLK_VDO_ROOT 66 80 + #define DCLK_OOC_SRC 67 81 + #define DCLK_VOP 68 82 + #define DCLK_DECOM_SRC 69 83 + #define PCLK_DDR_ROOT 70 84 + #define ACLK_SYSMEM_SRC 71 85 + #define ACLK_TOP_ROOT 72 86 + #define ACLK_BUS_ROOT 73 87 + #define HCLK_BUS_ROOT 74 88 + #define PCLK_BUS_ROOT 75 89 + #define CCLK_SDMMC0 76 90 + #define CCLK_SDMMC1 77 91 + #define CCLK_EMMC 78 92 + #define SCLK_2X_FSPI0 79 93 + #define CLK_GMAC_PTP_REF_SRC 80 94 + #define CLK_GMAC_125M 81 95 + #define CLK_TIMER_ROOT 82 96 + #define TCLK_WDT_NS_SRC 83 97 + #define TCLK_WDT_S_SRC 84 98 + #define TCLK_WDT_HPMCU 85 99 + #define CLK_CAN0 86 100 + #define CLK_CAN1 87 101 + #define PCLK_PERI_ROOT 88 102 + #define ACLK_PERI_ROOT 89 103 + #define CLK_I2C_BUS_SRC 90 104 + #define CLK_SPI0 91 105 + #define CLK_SPI1 92 106 + #define BUSCLK_PMU_SRC 93 107 + #define CLK_PWM0 94 108 + #define CLK_PWM2 95 109 + #define CLK_PWM3 96 110 + #define CLK_PKA_RKCE_SRC 97 111 + #define ACLK_RKCE_SRC 98 112 + #define ACLK_VCP_ROOT 99 113 + #define HCLK_VCP_ROOT 100 114 + #define PCLK_VCP_ROOT 101 115 + #define CLK_CORE_FEC_SRC 102 116 + #define CLK_CORE_AVSP_SRC 103 117 + #define CLK_50M_GMAC_IOBUF_VI 104 118 + #define PCLK_TOP_ROOT 105 119 + #define CLK_MIPI0_OUT2IO 106 120 + #define CLK_MIPI1_OUT2IO 107 121 + #define CLK_MIPI2_OUT2IO 108 122 + #define CLK_MIPI3_OUT2IO 109 123 + #define CLK_CIF_OUT2IO 110 124 + #define CLK_MAC_OUT2IO 111 125 + #define MCLK_SAI0_OUT2IO 112 126 + #define MCLK_SAI1_OUT2IO 113 127 + #define MCLK_SAI2_OUT2IO 114 128 + #define CLK_CM_FRAC0_SRC 115 129 + #define CLK_CM_FRAC1_SRC 116 130 + #define CLK_CM_FRAC2_SRC 117 131 + #define CLK_UART_FRAC0_SRC 118 132 + #define CLK_UART_FRAC1_SRC 119 133 + #define CLK_AUDIO_FRAC0_SRC 120 134 + #define CLK_AUDIO_FRAC1_SRC 121 135 + #define ACLK_NPU_ROOT 122 136 + #define HCLK_RKNN 123 137 + #define ACLK_RKNN 124 138 + #define PCLK_GPIO3 125 139 + #define DBCLK_GPIO3 126 140 + #define PCLK_IOC_VCCIO3 127 141 + #define PCLK_SARADC0 128 142 + #define CLK_SARADC0 129 143 + #define HCLK_SDMMC1 130 144 + #define HCLK_VEPU 131 145 + #define ACLK_VEPU 132 146 + #define CLK_CORE_VEPU 133 147 + #define HCLK_FEC 134 148 + #define ACLK_FEC 135 149 + #define CLK_CORE_FEC 136 150 + #define HCLK_AVSP 137 151 + #define ACLK_AVSP 138 152 + #define BUSCLK_PMU1_ROOT 139 153 + #define HCLK_AISP 140 154 + #define ACLK_AISP 141 155 + #define CLK_CORE_AISP 142 156 + #define CLK_CORE_ISP_ROOT 143 157 + #define PCLK_DSMC 144 158 + #define ACLK_DSMC 145 159 + #define HCLK_CAN0 146 160 + #define HCLK_CAN1 147 161 + #define PCLK_GPIO2 148 162 + #define DBCLK_GPIO2 149 163 + #define PCLK_GPIO4 150 164 + #define DBCLK_GPIO4 151 165 + #define PCLK_GPIO5 152 166 + #define DBCLK_GPIO5 153 167 + #define PCLK_GPIO6 154 168 + #define DBCLK_GPIO6 155 169 + #define PCLK_GPIO7 156 170 + #define DBCLK_GPIO7 157 171 + #define PCLK_IOC_VCCIO2 158 172 + #define PCLK_IOC_VCCIO4 159 173 + #define PCLK_IOC_VCCIO5 160 174 + #define PCLK_IOC_VCCIO6 161 175 + #define PCLK_IOC_VCCIO7 162 176 + #define HCLK_ISP 163 177 + #define ACLK_ISP 164 178 + #define CLK_CORE_ISP 165 179 + #define HCLK_VICAP 166 180 + #define ACLK_VICAP 167 181 + #define DCLK_VICAP 168 182 + #define ISP0CLK_VICAP 169 183 + #define HCLK_VPSS 170 184 + #define ACLK_VPSS 171 185 + #define CLK_CORE_VPSS 172 186 + #define PCLK_CSI2HOST0 173 187 + #define DCLK_CSI2HOST0 174 188 + #define PCLK_CSI2HOST1 175 189 + #define DCLK_CSI2HOST1 176 190 + #define PCLK_CSI2HOST2 177 191 + #define DCLK_CSI2HOST2 178 192 + #define PCLK_CSI2HOST3 179 193 + #define DCLK_CSI2HOST3 180 194 + #define HCLK_SDMMC0 181 195 + #define ACLK_GMAC 182 196 + #define PCLK_GMAC 183 197 + #define CLK_GMAC_PTP_REF 184 198 + #define PCLK_CSIPHY0 185 199 + #define PCLK_CSIPHY1 186 200 + #define PCLK_MACPHY 187 201 + #define PCLK_SARADC1 188 202 + #define CLK_SARADC1 189 203 + #define PCLK_SARADC2 190 204 + #define CLK_SARADC2 191 205 + #define ACLK_RKVDEC 192 206 + #define HCLK_RKVDEC 193 207 + #define CLK_HEVC_CA_RKVDEC 194 208 + #define ACLK_VOP 195 209 + #define HCLK_VOP 196 210 + #define HCLK_RKJPEG 197 211 + #define ACLK_RKJPEG 198 212 + #define ACLK_RKMMU_DECOM 199 213 + #define HCLK_RKMMU_DECOM 200 214 + #define DCLK_DECOM 201 215 + #define ACLK_DECOM 202 216 + #define PCLK_DECOM 203 217 + #define PCLK_MIPI_DSI 204 218 + #define PCLK_DSIPHY 205 219 + #define ACLK_OOC 206 220 + #define ACLK_SYSMEM 207 221 + #define PCLK_DDRC 208 222 + #define PCLK_DDRMON 209 223 + #define CLK_TIMER_DDRMON 210 224 + #define PCLK_DFICTRL 211 225 + #define PCLK_DDRPHY 212 226 + #define PCLK_DMA2DDR 213 227 + #define CLK_RCOSC_SRC 214 228 + #define BUSCLK_PMU_MUX 215 229 + #define BUSCLK_PMU_ROOT 216 230 + #define PCLK_PMU 217 231 + #define CLK_XIN_RC_DIV 218 232 + #define CLK_32K 219 233 + #define PCLK_PMU_GPIO0 220 234 + #define DBCLK_PMU_GPIO0 221 235 + #define PCLK_PMU_HP_TIMER 222 236 + #define CLK_PMU_HP_TIMER 223 237 + #define CLK_PMU_32K_HP_TIMER 224 238 + #define PCLK_PWM1 225 239 + #define CLK_PWM1 226 240 + #define CLK_OSC_PWM1 227 241 + #define CLK_RC_PWM1 228 242 + #define CLK_FREQ_PWM1 229 243 + #define CLK_COUNTER_PWM1 230 244 + #define PCLK_I2C2 231 245 + #define CLK_I2C2 232 246 + #define PCLK_UART0 233 247 + #define SCLK_UART0 234 248 + #define PCLK_RCOSC_CTRL 235 249 + #define CLK_OSC_RCOSC_CTRL 236 250 + #define CLK_REF_RCOSC_CTRL 237 251 + #define PCLK_IOC_PMUIO0 238 252 + #define CLK_REFOUT 239 253 + #define CLK_PREROLL 240 254 + #define CLK_PREROLL_32K 241 255 + #define HCLK_PMU_SRAM 242 256 + #define PCLK_WDT_LPMCU 243 257 + #define TCLK_WDT_LPMCU 244 258 + #define CLK_LPMCU 245 259 + #define CLK_LPMCU_RTC 246 260 + #define PCLK_LPMCU_MAILBOX 247 261 + #define HCLK_OOC 248 262 + #define PCLK_SPI2AHB 249 263 + #define HCLK_SPI2AHB 250 264 + #define HCLK_FSPI1 251 265 + #define HCLK_XIP_FSPI1 252 266 + #define SCLK_1X_FSPI1 253 267 + #define PCLK_IOC_PMUIO1 254 268 + #define PCLK_AUDIO_ADC_PMU 255 269 + #define MCLK_AUDIO_ADC_PMU 256 270 + #define MCLK_AUDIO_ADC_DIV4_PMU 257 271 + #define MCLK_LPSAI 258 272 + #define ACLK_GIC400 259 273 + #define PCLK_WDT_NS 260 274 + #define TCLK_WDT_NS 261 275 + #define PCLK_WDT_HPMCU 262 276 + #define HCLK_CACHE 263 277 + #define PCLK_HPMCU_MAILBOX 264 278 + #define PCLK_HPMCU_INTMUX 265 279 + #define CLK_HPMCU 266 280 + #define CLK_HPMCU_RTC 267 281 + #define PCLK_RKDMA 268 282 + #define ACLK_RKDMA 269 283 + #define PCLK_DCF 270 284 + #define ACLK_DCF 271 285 + #define HCLK_RGA 272 286 + #define ACLK_RGA 273 287 + #define CLK_CORE_RGA 274 288 + #define PCLK_TIMER 275 289 + #define CLK_TIMER0 276 290 + #define CLK_TIMER1 277 291 + #define CLK_TIMER2 278 292 + #define CLK_TIMER3 279 293 + #define CLK_TIMER4 280 294 + #define CLK_TIMER5 281 295 + #define PCLK_I2C0 282 296 + #define CLK_I2C0 283 297 + #define PCLK_I2C1 284 298 + #define CLK_I2C1 285 299 + #define PCLK_I2C3 286 300 + #define CLK_I2C3 287 301 + #define PCLK_I2C4 288 302 + #define CLK_I2C4 289 303 + #define PCLK_I2C5 290 304 + #define CLK_I2C5 291 305 + #define PCLK_SPI0 292 306 + #define PCLK_SPI1 293 307 + #define PCLK_PWM0 294 308 + #define CLK_OSC_PWM0 295 309 + #define CLK_RC_PWM0 296 310 + #define PCLK_PWM2 297 311 + #define CLK_OSC_PWM2 298 312 + #define CLK_RC_PWM2 299 313 + #define PCLK_PWM3 300 314 + #define CLK_OSC_PWM3 301 315 + #define CLK_RC_PWM3 302 316 + #define PCLK_UART1 303 317 + #define PCLK_UART2 304 318 + #define PCLK_UART3 305 319 + #define PCLK_UART4 306 320 + #define PCLK_UART5 307 321 + #define PCLK_UART6 308 322 + #define PCLK_UART7 309 323 + #define PCLK_TSADC 310 324 + #define CLK_TSADC 311 325 + #define HCLK_SAI0 312 326 + #define HCLK_SAI1 313 327 + #define HCLK_SAI2 314 328 + #define HCLK_RKDSM 315 329 + #define MCLK_RKDSM 316 330 + #define HCLK_PDM 317 331 + #define HCLK_ASRC0 318 332 + #define HCLK_ASRC1 319 333 + #define PCLK_AUDIO_ADC_BUS 320 334 + #define MCLK_AUDIO_ADC_BUS 321 335 + #define MCLK_AUDIO_ADC_DIV4_BUS 322 336 + #define PCLK_RKCE 323 337 + #define HCLK_NS_RKCE 324 338 + #define PCLK_OTPC_NS 325 339 + #define CLK_SBPI_OTPC_NS 326 340 + #define CLK_USER_OTPC_NS 327 341 + #define CLK_OTPC_ARB 328 342 + #define PCLK_OTP_MASK 329 343 + #define CLK_TSADC_PHYCTRL 330 344 + #define LRCK_SRC_ASRC0 331 345 + #define LRCK_DST_ASRC0 332 346 + #define LRCK_SRC_ASRC1 333 347 + #define LRCK_DST_ASRC1 334 348 + #define PCLK_KEY_READER 335 349 + #define ACLK_NSRKCE 336 350 + #define CLK_PKA_NSRKCE 337 351 + #define PCLK_RTC_ROOT 338 352 + #define PCLK_GPIO1 339 353 + #define DBCLK_GPIO1 340 354 + #define PCLK_IOC_VCCIO1 341 355 + #define ACLK_USB3OTG 342 356 + #define CLK_REF_USB3OTG 343 357 + #define CLK_SUSPEND_USB3OTG 344 358 + #define HCLK_USB2HOST 345 359 + #define HCLK_ARB_USB2HOST 346 360 + #define PCLK_RTC_TEST 347 361 + #define HCLK_EMMC 348 362 + #define HCLK_FSPI0 349 363 + #define HCLK_XIP_FSPI0 350 364 + #define PCLK_PIPEPHY 351 365 + #define PCLK_USB2PHY 352 366 + #define CLK_REF_PIPEPHY_CPLL_SRC 353 367 + #define CLK_REF_PIPEPHY 354 368 + #define HCLK_VPSL 355 369 + #define ACLK_VPSL 356 370 + #define CLK_CORE_VPSL 357 371 + #define CLK_MACPHY 358 372 + #define HCLK_RKRNG_NS 359 373 + #define HCLK_RKRNG_S_NS 360 374 + #define CLK_AISP_PLL_SRC 361 375 + 376 + /* secure clks */ 377 + #define CLK_USER_OTPC_S 362 378 + #define CLK_SBPI_OTPC_S 363 379 + #define PCLK_OTPC_S 364 380 + #define PCLK_KEY_READER_S 365 381 + #define HCLK_KL_RKCE_S 366 382 + #define HCLK_RKCE_S 367 383 + #define PCLK_WDT_S 368 384 + #define TCLK_WDT_S 369 385 + #define CLK_STIMER0 370 386 + #define CLK_STIMER1 371 387 + #define PLK_STIMER 372 388 + #define HCLK_RKRNG_S 373 389 + #define CLK_PKA_RKCE_S 374 390 + #define ACLK_RKCE_S 375 391 + 392 + #endif
+10
include/dt-bindings/clock/samsung,exynosautov920.h
··· 295 #define CLK_DOUT_HSI2_ETHERNET 6 296 #define CLK_DOUT_HSI2_ETHERNET_PTP 7 297 298 #endif /* _DT_BINDINGS_CLOCK_EXYNOSAUTOV920_H */
··· 295 #define CLK_DOUT_HSI2_ETHERNET 6 296 #define CLK_DOUT_HSI2_ETHERNET_PTP 7 297 298 + /* CMU_M2M */ 299 + #define CLK_MOUT_M2M_JPEG_USER 1 300 + #define CLK_MOUT_M2M_NOC_USER 2 301 + #define CLK_DOUT_M2M_NOCP 3 302 + 303 + /* CMU_MFC */ 304 + #define CLK_MOUT_MFC_MFC_USER 1 305 + #define CLK_MOUT_MFC_WFD_USER 2 306 + #define CLK_DOUT_MFC_NOCP 3 307 + 308 #endif /* _DT_BINDINGS_CLOCK_EXYNOSAUTOV920_H */
+11 -3
include/dt-bindings/clock/toshiba,tmpv770x.h
··· 11 #define TMPV770X_PLL_PIDDRCPLL 4 12 #define TMPV770X_PLL_PIVOIFPLL 5 13 #define TMPV770X_PLL_PIIMGERPLL 6 14 - #define TMPV770X_NR_PLL 7 15 16 /* Clocks */ 17 #define TMPV770X_CLK_PIPLL1_DIV1 0 ··· 140 #define TMPV770X_CLK_PIREFCLK 124 141 #define TMPV770X_CLK_SBUS 125 142 #define TMPV770X_CLK_BUSLCK 126 143 - #define TMPV770X_NR_CLK 127 144 145 /* Reset */ 146 #define TMPV770X_RESET_PIETHER_2P5M 0 ··· 177 #define TMPV770X_RESET_PIPCMIF 29 178 #define TMPV770X_RESET_PICKMON 30 179 #define TMPV770X_RESET_SBUSCLK 31 180 - #define TMPV770X_NR_RESET 32 181 182 #endif /*_DT_BINDINGS_CLOCK_TOSHIBA_TMPV770X_H_ */
··· 11 #define TMPV770X_PLL_PIDDRCPLL 4 12 #define TMPV770X_PLL_PIVOIFPLL 5 13 #define TMPV770X_PLL_PIIMGERPLL 6 14 15 /* Clocks */ 16 #define TMPV770X_CLK_PIPLL1_DIV1 0 ··· 141 #define TMPV770X_CLK_PIREFCLK 124 142 #define TMPV770X_CLK_SBUS 125 143 #define TMPV770X_CLK_BUSLCK 126 144 + #define TMPV770X_CLK_VIIFBS1_L2ISP 127 145 + #define TMPV770X_CLK_VIIFBS1_L1ISP 128 146 + #define TMPV770X_CLK_VIIFBS1_PROC 129 147 148 /* Reset */ 149 #define TMPV770X_RESET_PIETHER_2P5M 0 ··· 176 #define TMPV770X_RESET_PIPCMIF 29 177 #define TMPV770X_RESET_PICKMON 30 178 #define TMPV770X_RESET_SBUSCLK 31 179 + #define TMPV770X_RESET_VIIFBS0 32 180 + #define TMPV770X_RESET_VIIFBS0_APB 33 181 + #define TMPV770X_RESET_VIIFBS0_L2ISP 34 182 + #define TMPV770X_RESET_VIIFBS0_L1ISP 35 183 + #define TMPV770X_RESET_VIIFBS1 36 184 + #define TMPV770X_RESET_VIIFBS1_APB 37 185 + #define TMPV770X_RESET_VIIFBS1_L2ISP 38 186 + #define TMPV770X_RESET_VIIFBS1_L1ISP 39 187 188 #endif /*_DT_BINDINGS_CLOCK_TOSHIBA_TMPV770X_H_ */
+61
include/dt-bindings/reset/airoha,en7523-reset.h
···
··· 1 + /* SPDX-License-Identifier: GPL-2.0-only */ 2 + /* 3 + * Copyright (C) 2024 iopsys Software Solutions AB. 4 + * Copyright (C) 2025 Genexis AB. 5 + * 6 + * Author: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu> 7 + * 8 + * based on 9 + * include/dt-bindings/reset/airoha,en7581-reset.h 10 + * by Lorenzo Bianconi <lorenzo@kernel.org> 11 + */ 12 + 13 + #ifndef __DT_BINDINGS_RESET_CONTROLLER_AIROHA_EN7523_H_ 14 + #define __DT_BINDINGS_RESET_CONTROLLER_AIROHA_EN7523_H_ 15 + 16 + /* RST_CTRL2 */ 17 + #define EN7523_XPON_PHY_RST 0 18 + #define EN7523_XSI_MAC_RST 1 19 + #define EN7523_XSI_PHY_RST 2 20 + #define EN7523_NPU_RST 3 21 + #define EN7523_I2S_RST 4 22 + #define EN7523_TRNG_RST 5 23 + #define EN7523_TRNG_MSTART_RST 6 24 + #define EN7523_DUAL_HSI0_RST 7 25 + #define EN7523_DUAL_HSI1_RST 8 26 + #define EN7523_HSI_RST 9 27 + #define EN7523_DUAL_HSI0_MAC_RST 10 28 + #define EN7523_DUAL_HSI1_MAC_RST 11 29 + #define EN7523_HSI_MAC_RST 12 30 + #define EN7523_WDMA_RST 13 31 + #define EN7523_WOE0_RST 14 32 + #define EN7523_WOE1_RST 15 33 + #define EN7523_HSDMA_RST 16 34 + #define EN7523_I2C2RBUS_RST 17 35 + #define EN7523_TDMA_RST 18 36 + /* RST_CTRL1 */ 37 + #define EN7523_PCM1_ZSI_ISI_RST 19 38 + #define EN7523_FE_PDMA_RST 20 39 + #define EN7523_FE_QDMA_RST 21 40 + #define EN7523_PCM_SPIWP_RST 22 41 + #define EN7523_CRYPTO_RST 23 42 + #define EN7523_TIMER_RST 24 43 + #define EN7523_PCM1_RST 25 44 + #define EN7523_UART_RST 26 45 + #define EN7523_GPIO_RST 27 46 + #define EN7523_GDMA_RST 28 47 + #define EN7523_I2C_MASTER_RST 29 48 + #define EN7523_PCM2_ZSI_ISI_RST 30 49 + #define EN7523_SFC_RST 31 50 + #define EN7523_UART2_RST 32 51 + #define EN7523_GDMP_RST 33 52 + #define EN7523_FE_RST 34 53 + #define EN7523_USB_HOST_P0_RST 35 54 + #define EN7523_GSW_RST 36 55 + #define EN7523_SFC2_PCM_RST 37 56 + #define EN7523_PCIE0_RST 38 57 + #define EN7523_PCIE1_RST 39 58 + #define EN7523_PCIE_HB_RST 40 59 + #define EN7523_XPON_MAC_RST 41 60 + 61 + #endif /* __DT_BINDINGS_RESET_CONTROLLER_AIROHA_EN7523_H_ */
+16
include/dt-bindings/reset/fsl,imx8ulp-sim-lpav.h
···
··· 1 + /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2 + /* 3 + * Copyright 2025 NXP 4 + */ 5 + 6 + #ifndef DT_BINDING_RESET_IMX8ULP_SIM_LPAV_H 7 + #define DT_BINDING_RESET_IMX8ULP_SIM_LPAV_H 8 + 9 + #define IMX8ULP_SIM_LPAV_HIFI4_DSP_DBG_RST 0 10 + #define IMX8ULP_SIM_LPAV_HIFI4_DSP_RST 1 11 + #define IMX8ULP_SIM_LPAV_HIFI4_DSP_STALL 2 12 + #define IMX8ULP_SIM_LPAV_DSI_RST_BYTE_N 3 13 + #define IMX8ULP_SIM_LPAV_DSI_RST_ESC_N 4 14 + #define IMX8ULP_SIM_LPAV_DSI_RST_DPI_N 5 15 + 16 + #endif /* DT_BINDING_RESET_IMX8ULP_SIM_LPAV_H */
+211
include/dt-bindings/reset/rockchip,rk3506-cru.h
···
··· 1 + /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2 + /* 3 + * Copyright (c) 2023-2025 Rockchip Electronics Co., Ltd. 4 + * Author: Finley Xiao <finley.xiao@rock-chips.com> 5 + */ 6 + 7 + #ifndef _DT_BINDINGS_REST_ROCKCHIP_RK3506_H 8 + #define _DT_BINDINGS_REST_ROCKCHIP_RK3506_H 9 + 10 + /* CRU-->SOFTRST_CON00 */ 11 + #define SRST_NCOREPORESET0_AC 0 12 + #define SRST_NCOREPORESET1_AC 1 13 + #define SRST_NCOREPORESET2_AC 2 14 + #define SRST_NCORESET0_AC 3 15 + #define SRST_NCORESET1_AC 4 16 + #define SRST_NCORESET2_AC 5 17 + #define SRST_NL2RESET_AC 6 18 + #define SRST_A_CORE_BIU_AC 7 19 + #define SRST_H_M0_AC 8 20 + 21 + /* CRU-->SOFTRST_CON02 */ 22 + #define SRST_NDBGRESET 9 23 + #define SRST_P_CORE_BIU 10 24 + #define SRST_PMU 11 25 + 26 + /* CRU-->SOFTRST_CON03 */ 27 + #define SRST_P_DBG 12 28 + #define SRST_POT_DBG 13 29 + #define SRST_P_CORE_GRF 14 30 + #define SRST_CORE_EMA_DETECT 15 31 + #define SRST_REF_PVTPLL_CORE 16 32 + #define SRST_P_GPIO1 17 33 + #define SRST_DB_GPIO1 18 34 + 35 + /* CRU-->SOFTRST_CON04 */ 36 + #define SRST_A_CORE_PERI_BIU 19 37 + #define SRST_A_DSMC 20 38 + #define SRST_P_DSMC 21 39 + #define SRST_FLEXBUS 22 40 + #define SRST_A_FLEXBUS 23 41 + #define SRST_H_FLEXBUS 24 42 + #define SRST_A_DSMC_SLV 25 43 + #define SRST_H_DSMC_SLV 26 44 + #define SRST_DSMC_SLV 27 45 + 46 + /* CRU-->SOFTRST_CON05 */ 47 + #define SRST_A_BUS_BIU 28 48 + #define SRST_H_BUS_BIU 29 49 + #define SRST_P_BUS_BIU 30 50 + #define SRST_A_SYSRAM 31 51 + #define SRST_H_SYSRAM 32 52 + #define SRST_A_DMAC0 33 53 + #define SRST_A_DMAC1 34 54 + #define SRST_H_M0 35 55 + #define SRST_M0_JTAG 36 56 + #define SRST_H_CRYPTO 37 57 + 58 + /* CRU-->SOFTRST_CON06 */ 59 + #define SRST_H_RNG 38 60 + #define SRST_P_BUS_GRF 39 61 + #define SRST_P_TIMER0 40 62 + #define SRST_TIMER0_CH0 41 63 + #define SRST_TIMER0_CH1 42 64 + #define SRST_TIMER0_CH2 43 65 + #define SRST_TIMER0_CH3 44 66 + #define SRST_TIMER0_CH4 45 67 + #define SRST_TIMER0_CH5 46 68 + #define SRST_P_WDT0 47 69 + #define SRST_T_WDT0 48 70 + #define SRST_P_WDT1 49 71 + #define SRST_T_WDT1 50 72 + #define SRST_P_MAILBOX 51 73 + #define SRST_P_INTMUX 52 74 + #define SRST_P_SPINLOCK 53 75 + 76 + /* CRU-->SOFTRST_CON07 */ 77 + #define SRST_P_DDRC 54 78 + #define SRST_H_DDRPHY 55 79 + #define SRST_P_DDRMON 56 80 + #define SRST_DDRMON_OSC 57 81 + #define SRST_P_DDR_LPC 58 82 + #define SRST_H_USBOTG0 59 83 + #define SRST_USBOTG0_ADP 60 84 + #define SRST_H_USBOTG1 61 85 + #define SRST_USBOTG1_ADP 62 86 + #define SRST_P_USBPHY 63 87 + #define SRST_USBPHY_POR 64 88 + #define SRST_USBPHY_OTG0 65 89 + #define SRST_USBPHY_OTG1 66 90 + 91 + /* CRU-->SOFTRST_CON08 */ 92 + #define SRST_A_DMA2DDR 67 93 + #define SRST_P_DMA2DDR 68 94 + 95 + /* CRU-->SOFTRST_CON09 */ 96 + #define SRST_USBOTG0_UTMI 69 97 + #define SRST_USBOTG1_UTMI 70 98 + 99 + /* CRU-->SOFTRST_CON10 */ 100 + #define SRST_A_DDRC_0 71 101 + #define SRST_A_DDRC_1 72 102 + #define SRST_A_DDR_BIU 73 103 + #define SRST_DDRC 74 104 + #define SRST_DDRMON 75 105 + 106 + /* CRU-->SOFTRST_CON11 */ 107 + #define SRST_H_LSPERI_BIU 76 108 + #define SRST_P_UART0 77 109 + #define SRST_P_UART1 78 110 + #define SRST_P_UART2 79 111 + #define SRST_P_UART3 80 112 + #define SRST_P_UART4 81 113 + #define SRST_UART0 82 114 + #define SRST_UART1 83 115 + #define SRST_UART2 84 116 + #define SRST_UART3 85 117 + #define SRST_UART4 86 118 + #define SRST_P_I2C0 87 119 + #define SRST_I2C0 88 120 + 121 + /* CRU-->SOFTRST_CON12 */ 122 + #define SRST_P_I2C1 89 123 + #define SRST_I2C1 90 124 + #define SRST_P_I2C2 91 125 + #define SRST_I2C2 92 126 + #define SRST_P_PWM1 93 127 + #define SRST_PWM1 94 128 + #define SRST_P_SPI0 95 129 + #define SRST_SPI0 96 130 + #define SRST_P_SPI1 97 131 + #define SRST_SPI1 98 132 + #define SRST_P_GPIO2 99 133 + #define SRST_DB_GPIO2 100 134 + 135 + /* CRU-->SOFTRST_CON13 */ 136 + #define SRST_P_GPIO3 101 137 + #define SRST_DB_GPIO3 102 138 + #define SRST_P_GPIO4 103 139 + #define SRST_DB_GPIO4 104 140 + #define SRST_H_CAN0 105 141 + #define SRST_CAN0 106 142 + #define SRST_H_CAN1 107 143 + #define SRST_CAN1 108 144 + #define SRST_H_PDM 109 145 + #define SRST_M_PDM 110 146 + #define SRST_PDM 111 147 + #define SRST_SPDIFTX 112 148 + #define SRST_H_SPDIFTX 113 149 + #define SRST_H_SPDIFRX 114 150 + #define SRST_SPDIFRX 115 151 + #define SRST_M_SAI0 116 152 + 153 + /* CRU-->SOFTRST_CON14 */ 154 + #define SRST_H_SAI0 117 155 + #define SRST_M_SAI1 118 156 + #define SRST_H_SAI1 119 157 + #define SRST_H_ASRC0 120 158 + #define SRST_ASRC0 121 159 + #define SRST_H_ASRC1 122 160 + #define SRST_ASRC1 123 161 + 162 + /* CRU-->SOFTRST_CON17 */ 163 + #define SRST_H_HSPERI_BIU 124 164 + #define SRST_H_SDMMC 125 165 + #define SRST_H_FSPI 126 166 + #define SRST_S_FSPI 127 167 + #define SRST_P_SPI2 128 168 + #define SRST_A_MAC0 129 169 + #define SRST_A_MAC1 130 170 + 171 + /* CRU-->SOFTRST_CON18 */ 172 + #define SRST_M_SAI2 131 173 + #define SRST_H_SAI2 132 174 + #define SRST_H_SAI3 133 175 + #define SRST_M_SAI3 134 176 + #define SRST_H_SAI4 135 177 + #define SRST_M_SAI4 136 178 + #define SRST_H_DSM 137 179 + #define SRST_M_DSM 138 180 + #define SRST_P_AUDIO_ADC 139 181 + #define SRST_M_AUDIO_ADC 140 182 + 183 + /* CRU-->SOFTRST_CON19 */ 184 + #define SRST_P_SARADC 141 185 + #define SRST_SARADC 142 186 + #define SRST_SARADC_PHY 143 187 + #define SRST_P_OTPC_NS 144 188 + #define SRST_SBPI_OTPC_NS 145 189 + #define SRST_USER_OTPC_NS 146 190 + #define SRST_P_UART5 147 191 + #define SRST_UART5 148 192 + #define SRST_P_GPIO234_IOC 149 193 + 194 + /* CRU-->SOFTRST_CON21 */ 195 + #define SRST_A_VIO_BIU 150 196 + #define SRST_H_VIO_BIU 151 197 + #define SRST_H_RGA 152 198 + #define SRST_A_RGA 153 199 + #define SRST_CORE_RGA 154 200 + #define SRST_A_VOP 155 201 + #define SRST_H_VOP 156 202 + #define SRST_VOP 157 203 + #define SRST_P_DPHY 158 204 + #define SRST_P_DSI_HOST 159 205 + #define SRST_P_TSADC 160 206 + #define SRST_TSADC 161 207 + 208 + /* CRU-->SOFTRST_CON22 */ 209 + #define SRST_P_GPIO1_IOC 162 210 + 211 + #endif
+405
include/dt-bindings/reset/rockchip,rv1126b-cru.h
···
··· 1 + /* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */ 2 + /* 3 + * Copyright (c) 2025 Rockchip Electronics Co., Ltd. 4 + * Author: Elaine Zhang <zhangqing@rock-chips.com> 5 + */ 6 + 7 + #ifndef _DT_BINDINGS_RESET_ROCKCHIP_RV1126B_H 8 + #define _DT_BINDINGS_RESET_ROCKCHIP_RV1126B_H 9 + 10 + /* ==========================list all of reset fields id=========================== */ 11 + /* TOPCRU-->SOFTRST_CON00 */ 12 + 13 + /* TOPCRU-->SOFTRST_CON15 */ 14 + #define SRST_P_CRU 0 15 + #define SRST_P_CRU_BIU 1 16 + 17 + /* BUSCRU-->SOFTRST_CON00 */ 18 + #define SRST_A_TOP_BIU 2 19 + #define SRST_A_RKCE_BIU 3 20 + #define SRST_A_BUS_BIU 4 21 + #define SRST_H_BUS_BIU 5 22 + #define SRST_P_BUS_BIU 6 23 + #define SRST_P_CRU_BUS 7 24 + #define SRST_P_SYS_GRF 8 25 + #define SRST_H_BOOTROM 9 26 + #define SRST_A_GIC400 10 27 + #define SRST_A_SPINLOCK 11 28 + #define SRST_P_WDT_NS 12 29 + #define SRST_T_WDT_NS 13 30 + 31 + /* BUSCRU-->SOFTRST_CON01 */ 32 + #define SRST_P_WDT_HPMCU 14 33 + #define SRST_T_WDT_HPMCU 15 34 + #define SRST_H_CACHE 16 35 + #define SRST_P_HPMCU_MAILBOX 17 36 + #define SRST_P_HPMCU_INTMUX 18 37 + #define SRST_HPMCU_FULL_CLUSTER 19 38 + #define SRST_HPMCU_PWUP 20 39 + #define SRST_HPMCU_ONLY_CORE 21 40 + #define SRST_T_HPMCU_JTAG 22 41 + #define SRST_P_RKDMA 23 42 + #define SRST_A_RKDMA 24 43 + 44 + /* BUSCRU-->SOFTRST_CON02 */ 45 + #define SRST_P_DCF 25 46 + #define SRST_A_DCF 26 47 + #define SRST_H_RGA 27 48 + #define SRST_A_RGA 28 49 + #define SRST_CORE_RGA 29 50 + #define SRST_P_TIMER 30 51 + #define SRST_TIMER0 31 52 + #define SRST_TIMER1 32 53 + #define SRST_TIMER2 33 54 + #define SRST_TIMER3 34 55 + #define SRST_TIMER4 35 56 + #define SRST_TIMER5 36 57 + #define SRST_A_RKCE 37 58 + #define SRST_PKA_RKCE 38 59 + #define SRST_H_RKRNG_S 39 60 + #define SRST_H_RKRNG_NS 40 61 + 62 + /* BUSCRU-->SOFTRST_CON03 */ 63 + #define SRST_P_I2C0 41 64 + #define SRST_I2C0 42 65 + #define SRST_P_I2C1 43 66 + #define SRST_I2C1 44 67 + #define SRST_P_I2C3 45 68 + #define SRST_I2C3 46 69 + #define SRST_P_I2C4 47 70 + #define SRST_I2C4 48 71 + #define SRST_P_I2C5 49 72 + #define SRST_I2C5 50 73 + #define SRST_P_SPI0 51 74 + #define SRST_SPI0 52 75 + #define SRST_P_SPI1 53 76 + #define SRST_SPI1 54 77 + 78 + /* BUSCRU-->SOFTRST_CON04 */ 79 + #define SRST_P_PWM0 55 80 + #define SRST_PWM0 56 81 + #define SRST_P_PWM2 57 82 + #define SRST_PWM2 58 83 + #define SRST_P_PWM3 59 84 + #define SRST_PWM3 60 85 + 86 + /* BUSCRU-->SOFTRST_CON05 */ 87 + #define SRST_P_UART1 61 88 + #define SRST_S_UART1 62 89 + #define SRST_P_UART2 63 90 + #define SRST_S_UART2 64 91 + #define SRST_P_UART3 65 92 + #define SRST_S_UART3 66 93 + #define SRST_P_UART4 67 94 + #define SRST_S_UART4 68 95 + #define SRST_P_UART5 69 96 + #define SRST_S_UART5 70 97 + #define SRST_P_UART6 71 98 + #define SRST_S_UART6 72 99 + #define SRST_P_UART7 73 100 + #define SRST_S_UART7 74 101 + 102 + /* BUSCRU-->SOFTRST_CON06 */ 103 + #define SRST_P_TSADC 75 104 + #define SRST_TSADC 76 105 + #define SRST_H_SAI0 77 106 + #define SRST_M_SAI0 78 107 + #define SRST_H_SAI1 79 108 + #define SRST_M_SAI1 80 109 + #define SRST_H_SAI2 81 110 + #define SRST_M_SAI2 82 111 + #define SRST_H_RKDSM 83 112 + #define SRST_M_RKDSM 84 113 + #define SRST_H_PDM 85 114 + #define SRST_M_PDM 86 115 + #define SRST_PDM 87 116 + 117 + /* BUSCRU-->SOFTRST_CON07 */ 118 + #define SRST_H_ASRC0 88 119 + #define SRST_ASRC0 89 120 + #define SRST_H_ASRC1 90 121 + #define SRST_ASRC1 91 122 + #define SRST_P_AUDIO_ADC_BUS 92 123 + #define SRST_M_AUDIO_ADC_BUS 93 124 + #define SRST_P_RKCE 94 125 + #define SRST_H_NS_RKCE 95 126 + #define SRST_P_OTPC_NS 96 127 + #define SRST_SBPI_OTPC_NS 97 128 + #define SRST_USER_OTPC_NS 98 129 + #define SRST_OTPC_ARB 99 130 + #define SRST_P_OTP_MASK 100 131 + 132 + /* PERICRU-->SOFTRST_CON00 */ 133 + #define SRST_A_PERI_BIU 101 134 + #define SRST_P_PERI_BIU 102 135 + #define SRST_P_RTC_BIU 103 136 + #define SRST_P_CRU_PERI 104 137 + #define SRST_P_PERI_GRF 105 138 + #define SRST_P_GPIO1 106 139 + #define SRST_DB_GPIO1 107 140 + #define SRST_P_IOC_VCCIO1 108 141 + #define SRST_A_USB3OTG 109 142 + #define SRST_H_USB2HOST 110 143 + #define SRST_H_ARB_USB2HOST 111 144 + #define SRST_P_RTC_TEST 112 145 + 146 + /* PERICRU-->SOFTRST_CON01 */ 147 + #define SRST_H_EMMC 113 148 + #define SRST_H_FSPI0 114 149 + #define SRST_H_XIP_FSPI0 115 150 + #define SRST_S_2X_FSPI0 116 151 + #define SRST_UTMI_USB2HOST 117 152 + #define SRST_REF_PIPEPHY 118 153 + #define SRST_P_PIPEPHY 119 154 + #define SRST_P_PIPEPHY_GRF 120 155 + #define SRST_P_USB2PHY 121 156 + #define SRST_POR_USB2PHY 122 157 + #define SRST_OTG_USB2PHY 123 158 + #define SRST_HOST_USB2PHY 124 159 + 160 + /* CORECRU-->SOFTRST_CON00 */ 161 + #define SRST_REF_PVTPLL_CORE 125 162 + #define SRST_NCOREPORESET0 126 163 + #define SRST_NCORESET0 127 164 + #define SRST_NCOREPORESET1 128 165 + #define SRST_NCORESET1 129 166 + #define SRST_NCOREPORESET2 130 167 + #define SRST_NCORESET2 131 168 + #define SRST_NCOREPORESET3 132 169 + #define SRST_NCORESET3 133 170 + #define SRST_NDBGRESET 134 171 + #define SRST_NL2RESET 135 172 + 173 + /* CORECRU-->SOFTRST_CON01 */ 174 + #define SRST_A_CORE_BIU 136 175 + #define SRST_P_CORE_BIU 137 176 + #define SRST_H_CORE_BIU 138 177 + #define SRST_P_DBG 139 178 + #define SRST_POT_DBG 140 179 + #define SRST_NT_DBG 141 180 + #define SRST_P_CORE_PVTPLL 142 181 + #define SRST_P_CRU_CORE 143 182 + #define SRST_P_CORE_GRF 144 183 + #define SRST_P_DFT2APB 145 184 + 185 + /* PMUCRU-->SOFTRST_CON00 */ 186 + #define SRST_H_PMU_BIU 146 187 + #define SRST_P_PMU_GPIO0 147 188 + #define SRST_DB_PMU_GPIO0 148 189 + #define SRST_P_PMU_HP_TIMER 149 190 + #define SRST_PMU_HP_TIMER 150 191 + #define SRST_PMU_32K_HP_TIMER 151 192 + 193 + /* PMUCRU-->SOFTRST_CON01 */ 194 + #define SRST_P_PWM1 152 195 + #define SRST_PWM1 153 196 + #define SRST_P_I2C2 154 197 + #define SRST_I2C2 155 198 + #define SRST_P_UART0 156 199 + #define SRST_S_UART0 157 200 + 201 + /* PMUCRU-->SOFTRST_CON02 */ 202 + #define SRST_P_RCOSC_CTRL 158 203 + #define SRST_REF_RCOSC_CTRL 159 204 + #define SRST_P_IOC_PMUIO0 160 205 + #define SRST_P_CRU_PMU 161 206 + #define SRST_P_PMU_GRF 162 207 + #define SRST_PREROLL 163 208 + #define SRST_PREROLL_32K 164 209 + #define SRST_H_PMU_SRAM 165 210 + 211 + /* PMUCRU-->SOFTRST_CON03 */ 212 + #define SRST_P_WDT_LPMCU 166 213 + #define SRST_T_WDT_LPMCU 167 214 + #define SRST_LPMCU_FULL_CLUSTER 168 215 + #define SRST_LPMCU_PWUP 169 216 + #define SRST_LPMCU_ONLY_CORE 170 217 + #define SRST_T_LPMCU_JTAG 171 218 + #define SRST_P_LPMCU_MAILBOX 172 219 + 220 + /* PMU1CRU-->SOFTRST_CON00 */ 221 + #define SRST_P_SPI2AHB 173 222 + #define SRST_H_SPI2AHB 174 223 + #define SRST_H_FSPI1 175 224 + #define SRST_H_XIP_FSPI1 176 225 + #define SRST_S_1X_FSPI1 177 226 + #define SRST_P_IOC_PMUIO1 178 227 + #define SRST_P_CRU_PMU1 179 228 + #define SRST_P_AUDIO_ADC_PMU 180 229 + #define SRST_M_AUDIO_ADC_PMU 181 230 + #define SRST_H_PMU1_BIU 182 231 + 232 + /* PMU1CRU-->SOFTRST_CON01 */ 233 + #define SRST_P_LPDMA 183 234 + #define SRST_A_LPDMA 184 235 + #define SRST_H_LPSAI 185 236 + #define SRST_M_LPSAI 186 237 + #define SRST_P_AOA_TDD 187 238 + #define SRST_P_AOA_FE 188 239 + #define SRST_P_AOA_AAD 189 240 + #define SRST_P_AOA_APB 190 241 + #define SRST_P_AOA_SRAM 191 242 + 243 + /* DDRCRU-->SOFTRST_CON00 */ 244 + #define SRST_P_DDR_BIU 192 245 + #define SRST_P_DDRC 193 246 + #define SRST_P_DDRMON 194 247 + #define SRST_TIMER_DDRMON 195 248 + #define SRST_P_DFICTRL 196 249 + #define SRST_P_DDR_GRF 197 250 + #define SRST_P_CRU_DDR 198 251 + #define SRST_P_DDRPHY 199 252 + #define SRST_P_DMA2DDR 200 253 + 254 + /* SUBDDRCRU-->SOFTRST_CON00 */ 255 + #define SRST_A_SYSMEM_BIU 201 256 + #define SRST_A_SYSMEM 202 257 + #define SRST_A_DDR_BIU 203 258 + #define SRST_A_DDRSCH0_CPU 204 259 + #define SRST_A_DDRSCH1_NPU 205 260 + #define SRST_A_DDRSCH2_POE 206 261 + #define SRST_A_DDRSCH3_VI 207 262 + #define SRST_CORE_DDRC 208 263 + #define SRST_DDRMON 209 264 + #define SRST_DFICTRL 210 265 + #define SRST_RS 211 266 + #define SRST_A_DMA2DDR 212 267 + #define SRST_DDRPHY 213 268 + 269 + /* VICRU-->SOFTRST_CON00 */ 270 + #define SRST_REF_PVTPLL_ISP 214 271 + #define SRST_A_GMAC_BIU 215 272 + #define SRST_A_VI_BIU 216 273 + #define SRST_H_VI_BIU 217 274 + #define SRST_P_VI_BIU 218 275 + #define SRST_P_CRU_VI 219 276 + #define SRST_P_VI_GRF 220 277 + #define SRST_P_VI_PVTPLL 221 278 + #define SRST_P_DSMC 222 279 + #define SRST_A_DSMC 223 280 + #define SRST_H_CAN0 224 281 + #define SRST_CAN0 225 282 + #define SRST_H_CAN1 226 283 + #define SRST_CAN1 227 284 + 285 + /* VICRU-->SOFTRST_CON01 */ 286 + #define SRST_P_GPIO2 228 287 + #define SRST_DB_GPIO2 229 288 + #define SRST_P_GPIO4 230 289 + #define SRST_DB_GPIO4 231 290 + #define SRST_P_GPIO5 232 291 + #define SRST_DB_GPIO5 233 292 + #define SRST_P_GPIO6 234 293 + #define SRST_DB_GPIO6 235 294 + #define SRST_P_GPIO7 236 295 + #define SRST_DB_GPIO7 237 296 + #define SRST_P_IOC_VCCIO2 238 297 + #define SRST_P_IOC_VCCIO4 239 298 + #define SRST_P_IOC_VCCIO5 240 299 + #define SRST_P_IOC_VCCIO6 241 300 + #define SRST_P_IOC_VCCIO7 242 301 + 302 + /* VICRU-->SOFTRST_CON02 */ 303 + #define SRST_CORE_ISP 243 304 + #define SRST_H_VICAP 244 305 + #define SRST_A_VICAP 245 306 + #define SRST_D_VICAP 246 307 + #define SRST_ISP0_VICAP 247 308 + #define SRST_CORE_VPSS 248 309 + #define SRST_CORE_VPSL 249 310 + #define SRST_P_CSI2HOST0 250 311 + #define SRST_P_CSI2HOST1 251 312 + #define SRST_P_CSI2HOST2 252 313 + #define SRST_P_CSI2HOST3 253 314 + #define SRST_H_SDMMC0 254 315 + #define SRST_A_GMAC 255 316 + #define SRST_P_CSIPHY0 256 317 + #define SRST_P_CSIPHY1 257 318 + 319 + /* VICRU-->SOFTRST_CON03 */ 320 + #define SRST_P_MACPHY 258 321 + #define SRST_MACPHY 259 322 + #define SRST_P_SARADC1 260 323 + #define SRST_SARADC1 261 324 + #define SRST_P_SARADC2 262 325 + #define SRST_SARADC2 263 326 + 327 + /* VEPUCRU-->SOFTRST_CON00 */ 328 + #define SRST_REF_PVTPLL_VEPU 264 329 + #define SRST_A_VEPU_BIU 265 330 + #define SRST_H_VEPU_BIU 266 331 + #define SRST_P_VEPU_BIU 267 332 + #define SRST_P_CRU_VEPU 268 333 + #define SRST_P_VEPU_GRF 269 334 + #define SRST_P_GPIO3 270 335 + #define SRST_DB_GPIO3 271 336 + #define SRST_P_IOC_VCCIO3 272 337 + #define SRST_P_SARADC0 273 338 + #define SRST_SARADC0 274 339 + #define SRST_H_SDMMC1 275 340 + 341 + /* VEPUCRU-->SOFTRST_CON01 */ 342 + #define SRST_P_VEPU_PVTPLL 276 343 + #define SRST_H_VEPU 277 344 + #define SRST_A_VEPU 278 345 + #define SRST_CORE_VEPU 279 346 + 347 + /* NPUCRU-->SOFTRST_CON00 */ 348 + #define SRST_REF_PVTPLL_NPU 280 349 + #define SRST_A_NPU_BIU 281 350 + #define SRST_H_NPU_BIU 282 351 + #define SRST_P_NPU_BIU 283 352 + #define SRST_P_CRU_NPU 284 353 + #define SRST_P_NPU_GRF 285 354 + #define SRST_P_NPU_PVTPLL 286 355 + #define SRST_H_RKNN 287 356 + #define SRST_A_RKNN 288 357 + 358 + /* VDOCRU-->SOFTRST_CON00 */ 359 + #define SRST_A_RKVDEC_BIU 289 360 + #define SRST_A_VDO_BIU 290 361 + #define SRST_H_VDO_BIU 291 362 + #define SRST_P_VDO_BIU 292 363 + #define SRST_P_CRU_VDO 293 364 + #define SRST_P_VDO_GRF 294 365 + #define SRST_A_RKVDEC 295 366 + #define SRST_H_RKVDEC 296 367 + #define SRST_HEVC_CA_RKVDEC 297 368 + #define SRST_A_VOP 298 369 + #define SRST_H_VOP 299 370 + #define SRST_D_VOP 300 371 + #define SRST_A_OOC 301 372 + #define SRST_H_OOC 302 373 + #define SRST_D_OOC 303 374 + 375 + /* VDOCRU-->SOFTRST_CON01 */ 376 + #define SRST_H_RKJPEG 304 377 + #define SRST_A_RKJPEG 305 378 + #define SRST_A_RKMMU_DECOM 306 379 + #define SRST_H_RKMMU_DECOM 307 380 + #define SRST_D_DECOM 308 381 + #define SRST_A_DECOM 309 382 + #define SRST_P_DECOM 310 383 + #define SRST_P_MIPI_DSI 311 384 + #define SRST_P_DSIPHY 312 385 + 386 + /* VCPCRU-->SOFTRST_CON00 */ 387 + #define SRST_REF_PVTPLL_VCP 313 388 + #define SRST_A_VCP_BIU 314 389 + #define SRST_H_VCP_BIU 315 390 + #define SRST_P_VCP_BIU 316 391 + #define SRST_P_CRU_VCP 317 392 + #define SRST_P_VCP_GRF 318 393 + #define SRST_P_VCP_PVTPLL 319 394 + #define SRST_A_AISP_BIU 320 395 + #define SRST_H_AISP_BIU 321 396 + #define SRST_CORE_AISP 322 397 + 398 + /* VCPCRU-->SOFTRST_CON01 */ 399 + #define SRST_H_FEC 323 400 + #define SRST_A_FEC 324 401 + #define SRST_CORE_FEC 325 402 + #define SRST_H_AVSP 326 403 + #define SRST_A_AVSP 327 404 + 405 + #endif
+8 -1
include/dt-bindings/reset/toshiba,tmpv770x.h
··· 36 #define TMPV770X_RESET_PIPCMIF 29 37 #define TMPV770X_RESET_PICKMON 30 38 #define TMPV770X_RESET_SBUSCLK 31 39 - #define TMPV770X_NR_RESET 32 40 41 #endif /*_DT_BINDINGS_RESET_TOSHIBA_TMPV770X_H_ */
··· 36 #define TMPV770X_RESET_PIPCMIF 29 37 #define TMPV770X_RESET_PICKMON 30 38 #define TMPV770X_RESET_SBUSCLK 31 39 + #define TMPV770X_RESET_VIIFBS0 32 40 + #define TMPV770X_RESET_VIIFBS0_APB 33 41 + #define TMPV770X_RESET_VIIFBS0_L2ISP 34 42 + #define TMPV770X_RESET_VIIFBS0_L1ISP 35 43 + #define TMPV770X_RESET_VIIFBS1 36 44 + #define TMPV770X_RESET_VIIFBS1_APB 37 45 + #define TMPV770X_RESET_VIIFBS1_L2ISP 38 46 + #define TMPV770X_RESET_VIIFBS1_L1ISP 39 47 48 #endif /*_DT_BINDINGS_RESET_TOSHIBA_TMPV770X_H_ */
+145
include/linux/clk/renesas.h
··· 10 #ifndef __LINUX_CLK_RENESAS_H_ 11 #define __LINUX_CLK_RENESAS_H_ 12 13 #include <linux/types.h> 14 15 struct device; 16 struct device_node; ··· 34 #define cpg_mssr_attach_dev NULL 35 #define cpg_mssr_detach_dev NULL 36 #endif 37 #endif
··· 10 #ifndef __LINUX_CLK_RENESAS_H_ 11 #define __LINUX_CLK_RENESAS_H_ 12 13 + #include <linux/clk-provider.h> 14 #include <linux/types.h> 15 + #include <linux/units.h> 16 17 struct device; 18 struct device_node; ··· 32 #define cpg_mssr_attach_dev NULL 33 #define cpg_mssr_detach_dev NULL 34 #endif 35 + 36 + /** 37 + * struct rzv2h_pll_limits - PLL parameter constraints 38 + * 39 + * This structure defines the minimum and maximum allowed values for 40 + * various parameters used to configure a PLL. These limits ensure 41 + * the PLL operates within valid and stable ranges. 42 + * 43 + * @fout: Output frequency range (in MHz) 44 + * @fout.min: Minimum allowed output frequency 45 + * @fout.max: Maximum allowed output frequency 46 + * 47 + * @fvco: PLL oscillation frequency range (in MHz) 48 + * @fvco.min: Minimum allowed VCO frequency 49 + * @fvco.max: Maximum allowed VCO frequency 50 + * 51 + * @m: Main-divider range 52 + * @m.min: Minimum main-divider value 53 + * @m.max: Maximum main-divider value 54 + * 55 + * @p: Pre-divider range 56 + * @p.min: Minimum pre-divider value 57 + * @p.max: Maximum pre-divider value 58 + * 59 + * @s: Divider range 60 + * @s.min: Minimum divider value 61 + * @s.max: Maximum divider value 62 + * 63 + * @k: Delta-sigma modulator range (signed) 64 + * @k.min: Minimum delta-sigma value 65 + * @k.max: Maximum delta-sigma value 66 + */ 67 + struct rzv2h_pll_limits { 68 + struct { 69 + u32 min; 70 + u32 max; 71 + } fout; 72 + 73 + struct { 74 + u32 min; 75 + u32 max; 76 + } fvco; 77 + 78 + struct { 79 + u16 min; 80 + u16 max; 81 + } m; 82 + 83 + struct { 84 + u8 min; 85 + u8 max; 86 + } p; 87 + 88 + struct { 89 + u8 min; 90 + u8 max; 91 + } s; 92 + 93 + struct { 94 + s16 min; 95 + s16 max; 96 + } k; 97 + }; 98 + 99 + /** 100 + * struct rzv2h_pll_pars - PLL configuration parameters 101 + * 102 + * This structure contains the configuration parameters for the 103 + * Phase-Locked Loop (PLL), used to achieve a specific output frequency. 104 + * 105 + * @m: Main divider value 106 + * @p: Pre-divider value 107 + * @s: Output divider value 108 + * @k: Delta-sigma modulation value 109 + * @freq_millihz: Calculated PLL output frequency in millihertz 110 + * @error_millihz: Frequency error from target in millihertz (signed) 111 + */ 112 + struct rzv2h_pll_pars { 113 + u16 m; 114 + u8 p; 115 + u8 s; 116 + s16 k; 117 + u64 freq_millihz; 118 + s64 error_millihz; 119 + }; 120 + 121 + /** 122 + * struct rzv2h_pll_div_pars - PLL parameters with post-divider 123 + * 124 + * This structure is used for PLLs that include an additional post-divider 125 + * stage after the main PLL block. It contains both the PLL configuration 126 + * parameters and the resulting frequency/error values after the divider. 127 + * 128 + * @pll: Main PLL configuration parameters (see struct rzv2h_pll_pars) 129 + * 130 + * @div: Post-divider configuration and result 131 + * @div.divider_value: Divider applied to the PLL output 132 + * @div.freq_millihz: Output frequency after divider in millihertz 133 + * @div.error_millihz: Frequency error from target in millihertz (signed) 134 + */ 135 + struct rzv2h_pll_div_pars { 136 + struct rzv2h_pll_pars pll; 137 + struct { 138 + u8 divider_value; 139 + u64 freq_millihz; 140 + s64 error_millihz; 141 + } div; 142 + }; 143 + 144 + #define RZV2H_CPG_PLL_DSI_LIMITS(name) \ 145 + static const struct rzv2h_pll_limits (name) = { \ 146 + .fout = { .min = 25 * MEGA, .max = 375 * MEGA }, \ 147 + .fvco = { .min = 1600 * MEGA, .max = 3200 * MEGA }, \ 148 + .m = { .min = 64, .max = 533 }, \ 149 + .p = { .min = 1, .max = 4 }, \ 150 + .s = { .min = 0, .max = 6 }, \ 151 + .k = { .min = -32768, .max = 32767 }, \ 152 + } \ 153 + 154 + #ifdef CONFIG_CLK_RZV2H 155 + bool rzv2h_get_pll_pars(const struct rzv2h_pll_limits *limits, 156 + struct rzv2h_pll_pars *pars, u64 freq_millihz); 157 + 158 + bool rzv2h_get_pll_divs_pars(const struct rzv2h_pll_limits *limits, 159 + struct rzv2h_pll_div_pars *pars, 160 + const u8 *table, u8 table_size, u64 freq_millihz); 161 + #else 162 + static inline bool rzv2h_get_pll_pars(const struct rzv2h_pll_limits *limits, 163 + struct rzv2h_pll_pars *pars, 164 + u64 freq_millihz) 165 + { 166 + return false; 167 + } 168 + 169 + static inline bool rzv2h_get_pll_divs_pars(const struct rzv2h_pll_limits *limits, 170 + struct rzv2h_pll_div_pars *pars, 171 + const u8 *table, u8 table_size, 172 + u64 freq_millihz) 173 + { 174 + return false; 175 + } 176 + #endif 177 + 178 #endif
+19
include/linux/firmware/samsung/exynos-acpm-protocol.h
··· 13 struct acpm_handle; 14 struct device_node; 15 16 struct acpm_pmic_ops { 17 int (*read_reg)(const struct acpm_handle *handle, 18 unsigned int acpm_chan_id, u8 type, u8 reg, u8 chan, ··· 41 }; 42 43 struct acpm_ops { 44 struct acpm_pmic_ops pmic_ops; 45 }; 46 ··· 55 56 struct device; 57 58 const struct acpm_handle *devm_acpm_get_by_node(struct device *dev, 59 struct device_node *np); 60 61 #endif /* __EXYNOS_ACPM_PROTOCOL_H */
··· 13 struct acpm_handle; 14 struct device_node; 15 16 + struct acpm_dvfs_ops { 17 + int (*set_rate)(const struct acpm_handle *handle, 18 + unsigned int acpm_chan_id, unsigned int clk_id, 19 + unsigned long rate); 20 + unsigned long (*get_rate)(const struct acpm_handle *handle, 21 + unsigned int acpm_chan_id, 22 + unsigned int clk_id); 23 + }; 24 + 25 struct acpm_pmic_ops { 26 int (*read_reg)(const struct acpm_handle *handle, 27 unsigned int acpm_chan_id, u8 type, u8 reg, u8 chan, ··· 32 }; 33 34 struct acpm_ops { 35 + struct acpm_dvfs_ops dvfs_ops; 36 struct acpm_pmic_ops pmic_ops; 37 }; 38 ··· 45 46 struct device; 47 48 + #if IS_ENABLED(CONFIG_EXYNOS_ACPM_PROTOCOL) 49 const struct acpm_handle *devm_acpm_get_by_node(struct device *dev, 50 struct device_node *np); 51 + #else 52 + 53 + static inline const struct acpm_handle *devm_acpm_get_by_node(struct device *dev, 54 + struct device_node *np) 55 + { 56 + return NULL; 57 + } 58 + #endif 59 60 #endif /* __EXYNOS_ACPM_PROTOCOL_H */
+2 -1
include/soc/microchip/mpfs.h
··· 14 15 #include <linux/types.h> 16 #include <linux/of_device.h> 17 18 struct mpfs_sys_controller; 19 ··· 45 46 #if IS_ENABLED(CONFIG_MCHP_CLK_MPFS) 47 #if IS_ENABLED(CONFIG_RESET_POLARFIRE_SOC) 48 - int mpfs_reset_controller_register(struct device *clk_dev, void __iomem *base); 49 #else 50 static inline int mpfs_reset_controller_register(struct device *clk_dev, void __iomem *base) { return 0; } 51 #endif /* if IS_ENABLED(CONFIG_RESET_POLARFIRE_SOC) */
··· 14 15 #include <linux/types.h> 16 #include <linux/of_device.h> 17 + #include <linux/regmap.h> 18 19 struct mpfs_sys_controller; 20 ··· 44 45 #if IS_ENABLED(CONFIG_MCHP_CLK_MPFS) 46 #if IS_ENABLED(CONFIG_RESET_POLARFIRE_SOC) 47 + int mpfs_reset_controller_register(struct device *clk_dev, struct regmap *map); 48 #else 49 static inline int mpfs_reset_controller_register(struct device *clk_dev, void __iomem *base) { return 0; } 50 #endif /* if IS_ENABLED(CONFIG_RESET_POLARFIRE_SOC) */