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 64 reg: 65 65 minItems: 2 66 66 67 - '#reset-cells': false 68 - 69 67 - if: 70 68 properties: 71 69 compatible: ··· 83 85 reg = <0x1fa20000 0x400>, 84 86 <0x1fb00000 0x1000>; 85 87 #clock-cells = <1>; 88 + #reset-cells = <1>; 86 89 }; 87 90 88 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 46 "#clock-cells": 47 47 const: 1 48 48 49 + power-domains: 50 + maxItems: 1 51 + 49 52 reg: 50 53 maxItems: 1 51 54
+22 -14
Documentation/devicetree/bindings/clock/microchip,mpfs-clkcfg.yaml
··· 22 22 const: microchip,mpfs-clkcfg 23 23 24 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 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 35 42 36 43 clocks: 37 44 maxItems: 1 ··· 76 69 - | 77 70 #include <dt-bindings/clock/microchip,mpfs-clock.h> 78 71 soc { 79 - #address-cells = <2>; 80 - #size-cells = <2>; 81 - clkcfg: clock-controller@20002000 { 72 + #address-cells = <1>; 73 + #size-cells = <1>; 74 + 75 + clkcfg: clock-controller@3E001000 { 82 76 compatible = "microchip,mpfs-clkcfg"; 83 - reg = <0x0 0x20002000 0x0 0x1000>, <0x0 0x3E001000 0x0 0x1000>; 77 + reg = <0x3E001000 0x1000>; 84 78 clocks = <&ref>; 85 79 #clock-cells = <1>; 86 80 };
+1
Documentation/devicetree/bindings/clock/qcom,rpmhcc.yaml
··· 18 18 compatible: 19 19 enum: 20 20 - qcom,glymur-rpmh-clk 21 + - qcom,kaanapali-rpmh-clk 21 22 - qcom,milos-rpmh-clk 22 23 - qcom,qcs615-rpmh-clk 23 24 - qcom,qdu1000-rpmh-clk
+4 -1
Documentation/devicetree/bindings/clock/qcom,sm8450-videocc.yaml
··· 7 7 title: Qualcomm Video Clock & Reset Controller on SM8450 8 8 9 9 maintainers: 10 - - Taniya Das <quic_tdas@quicinc.com> 10 + - Taniya Das <taniya.das@oss.qualcomm.com> 11 11 - Jagadeesh Kona <quic_jkona@quicinc.com> 12 12 13 13 description: | ··· 17 17 See also: 18 18 include/dt-bindings/clock/qcom,sm8450-videocc.h 19 19 include/dt-bindings/clock/qcom,sm8650-videocc.h 20 + include/dt-bindings/clock/qcom,sm8750-videocc.h 20 21 21 22 properties: 22 23 compatible: ··· 26 25 - qcom,sm8475-videocc 27 26 - qcom,sm8550-videocc 28 27 - qcom,sm8650-videocc 28 + - qcom,sm8750-videocc 29 29 - qcom,x1e80100-videocc 30 30 31 31 clocks: ··· 63 61 enum: 64 62 - qcom,sm8450-videocc 65 63 - qcom,sm8550-videocc 64 + - qcom,sm8750-videocc 66 65 then: 67 66 required: 68 67 - required-opps
+1
Documentation/devicetree/bindings/clock/qcom,sm8550-tcsr.yaml
··· 25 25 items: 26 26 - enum: 27 27 - qcom,glymur-tcsr 28 + - qcom,kaanapali-tcsr 28 29 - qcom,milos-tcsr 29 30 - qcom,sar2130p-tcsr 30 31 - qcom,sm8550-tcsr
+6 -2
Documentation/devicetree/bindings/clock/qcom,sm8750-gcc.yaml
··· 13 13 Qualcomm global clock control module provides the clocks, resets and power 14 14 domains on SM8750 15 15 16 - See also: include/dt-bindings/clock/qcom,sm8750-gcc.h 16 + See also: 17 + include/dt-bindings/clock/qcom,kaanapali-gcc.h 18 + include/dt-bindings/clock/qcom,sm8750-gcc.h 17 19 18 20 properties: 19 21 compatible: 20 - const: qcom,sm8750-gcc 22 + enum: 23 + - qcom,kaanapali-gcc 24 + - qcom,sm8750-gcc 21 25 22 26 clocks: 23 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 38 - samsung,exynosautov920-cmu-hsi0 39 39 - samsung,exynosautov920-cmu-hsi1 40 40 - samsung,exynosautov920-cmu-hsi2 41 + - samsung,exynosautov920-cmu-m2m 42 + - samsung,exynosautov920-cmu-mfc 41 43 - samsung,exynosautov920-cmu-misc 42 44 - samsung,exynosautov920-cmu-peric0 43 45 - samsung,exynosautov920-cmu-peric1 ··· 227 225 - const: ufs 228 226 - const: embd 229 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 230 268 231 269 required: 232 270 - compatible
+2 -1
MAINTAINERS
··· 10710 10710 F: drivers/clk/samsung/clk-gs101.c 10711 10711 F: drivers/soc/samsung/gs101-pmu.c 10712 10712 F: drivers/phy/samsung/phy-gs101-ufs.c 10713 - F: include/dt-bindings/clock/google,gs101.h 10713 + F: include/dt-bindings/clock/google,gs101* 10714 10714 K: [gG]oogle.?[tT]ensor 10715 10715 10716 10716 GPD FAN DRIVER ··· 23137 23137 L: linux-samsung-soc@vger.kernel.org 23138 23138 S: Supported 23139 23139 F: Documentation/devicetree/bindings/firmware/google,gs101-acpm-ipc.yaml 23140 + F: drivers/clk/samsung/clk-acpm.c 23140 23141 F: drivers/firmware/samsung/exynos-acpm* 23141 23142 F: include/linux/firmware/samsung/exynos-acpm-protocol.h 23142 23143
+1 -2
drivers/clk/Makefile
··· 125 125 obj-y += imgtec/ 126 126 obj-y += imx/ 127 127 obj-y += ingenic/ 128 - obj-$(CONFIG_ARCH_K3) += keystone/ 129 - obj-$(CONFIG_ARCH_KEYSTONE) += keystone/ 128 + obj-y += keystone/ 130 129 obj-y += mediatek/ 131 130 obj-$(CONFIG_ARCH_MESON) += meson/ 132 131 obj-y += microchip/
+1 -1
drivers/clk/actions/owl-common.h
··· 32 32 }; 33 33 34 34 static inline struct owl_clk_common * 35 - hw_to_owl_clk_common(const struct clk_hw *hw) 35 + hw_to_owl_clk_common(struct clk_hw *hw) 36 36 { 37 37 return container_of(hw, struct owl_clk_common, hw); 38 38 }
+1 -1
drivers/clk/actions/owl-composite.h
··· 108 108 }, \ 109 109 } 110 110 111 - static inline struct owl_composite *hw_to_owl_comp(const struct clk_hw *hw) 111 + static inline struct owl_composite *hw_to_owl_comp(struct clk_hw *hw) 112 112 { 113 113 struct owl_clk_common *common = hw_to_owl_clk_common(hw); 114 114
+1 -1
drivers/clk/actions/owl-divider.h
··· 49 49 }, \ 50 50 } 51 51 52 - static inline struct owl_divider *hw_to_owl_divider(const struct clk_hw *hw) 52 + static inline struct owl_divider *hw_to_owl_divider(struct clk_hw *hw) 53 53 { 54 54 struct owl_clk_common *common = hw_to_owl_clk_common(hw); 55 55
+1 -1
drivers/clk/actions/owl-factor.h
··· 57 57 58 58 #define div_mask(d) ((1 << ((d)->width)) - 1) 59 59 60 - static inline struct owl_factor *hw_to_owl_factor(const struct clk_hw *hw) 60 + static inline struct owl_factor *hw_to_owl_factor(struct clk_hw *hw) 61 61 { 62 62 struct owl_clk_common *common = hw_to_owl_clk_common(hw); 63 63
+1 -1
drivers/clk/actions/owl-gate.h
··· 56 56 }, \ 57 57 } \ 58 58 59 - static inline struct owl_gate *hw_to_owl_gate(const struct clk_hw *hw) 59 + static inline struct owl_gate *hw_to_owl_gate(struct clk_hw *hw) 60 60 { 61 61 struct owl_clk_common *common = hw_to_owl_clk_common(hw); 62 62
+1 -1
drivers/clk/actions/owl-mux.h
··· 44 44 }, \ 45 45 } 46 46 47 - static inline struct owl_mux *hw_to_owl_mux(const struct clk_hw *hw) 47 + static inline struct owl_mux *hw_to_owl_mux(struct clk_hw *hw) 48 48 { 49 49 struct owl_clk_common *common = hw_to_owl_clk_common(hw); 50 50
+1 -1
drivers/clk/actions/owl-pll.h
··· 98 98 99 99 #define mul_mask(m) ((1 << ((m)->width)) - 1) 100 100 101 - static inline struct owl_pll *hw_to_owl_pll(const struct clk_hw *hw) 101 + static inline struct owl_pll *hw_to_owl_pll(struct clk_hw *hw) 102 102 { 103 103 struct owl_clk_common *common = hw_to_owl_clk_common(hw); 104 104
+59 -5
drivers/clk/clk-en7523.c
··· 9 9 #include <linux/regmap.h> 10 10 #include <linux/reset-controller.h> 11 11 #include <dt-bindings/clock/en7523-clk.h> 12 + #include <dt-bindings/reset/airoha,en7523-reset.h> 12 13 #include <dt-bindings/reset/airoha,en7581-reset.h> 13 14 14 15 #define RST_NR_PER_BANK 32 ··· 300 299 REG_RST_CTRL1, 301 300 }; 302 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 + 303 349 static const u16 en7581_rst_map[] = { 304 350 /* RST_CTRL2 */ 305 351 [EN7581_XPON_PHY_RST] = 0, ··· 404 356 [EN7581_PCIE_HB_RST] = RST_NR_PER_BANK + 29, 405 357 [EN7581_XPON_MAC_RST] = RST_NR_PER_BANK + 31, 406 358 }; 359 + 360 + static int en7581_reset_register(struct device *dev, void __iomem *base, 361 + const u16 *rst_map, int nr_resets); 407 362 408 363 static u32 en7523_get_base_rate(const struct en_clk_desc *desc, u32 val) 409 364 { ··· 603 552 604 553 en7523_register_clocks(&pdev->dev, clk_data, base, np_base); 605 554 606 - return 0; 555 + return en7581_reset_register(&pdev->dev, np_base, en7523_rst_map, 556 + ARRAY_SIZE(en7523_rst_map)); 607 557 } 608 558 609 559 static void en7581_register_clocks(struct device *dev, struct clk_hw_onecell_data *clk_data, ··· 704 652 .status = en7523_reset_status, 705 653 }; 706 654 707 - static int en7581_reset_register(struct device *dev, void __iomem *base) 655 + static int en7581_reset_register(struct device *dev, void __iomem *base, 656 + const u16 *rst_map, int nr_resets) 708 657 { 709 658 struct en_rst_data *rst_data; 710 659 ··· 714 661 return -ENOMEM; 715 662 716 663 rst_data->bank_ofs = en7581_rst_ofs; 717 - rst_data->idx_map = en7581_rst_map; 664 + rst_data->idx_map = rst_map; 718 665 rst_data->base = base; 719 666 720 - rst_data->rcdev.nr_resets = ARRAY_SIZE(en7581_rst_map); 667 + rst_data->rcdev.nr_resets = nr_resets; 721 668 rst_data->rcdev.of_xlate = en7523_reset_xlate; 722 669 rst_data->rcdev.ops = &en7581_reset_ops; 723 670 rst_data->rcdev.of_node = dev->of_node; ··· 751 698 val = readl(base + REG_NP_SCU_PCIC); 752 699 writel(val | 3, base + REG_NP_SCU_PCIC); 753 700 754 - return en7581_reset_register(&pdev->dev, base); 701 + return en7581_reset_register(&pdev->dev, base, en7581_rst_map, 702 + ARRAY_SIZE(en7581_rst_map)); 755 703 } 756 704 757 705 static int en7523_clk_probe(struct platform_device *pdev)
-2
drivers/clk/clk-lan966x.c
··· 16 16 #include <linux/platform_device.h> 17 17 #include <linux/slab.h> 18 18 19 - #include <dt-bindings/clock/microchip,lan966x.h> 20 - 21 19 #define GCK_ENA BIT(0) 22 20 #define GCK_SRC_SEL GENMASK(9, 8) 23 21 #define GCK_PRESCALER GENMASK(23, 16)
+1
drivers/clk/imx/Kconfig
··· 105 105 tristate "IMX8ULP CCM Clock Driver" 106 106 depends on ARCH_MXC || COMPILE_TEST 107 107 select MXC_CLK 108 + select AUXILIARY_BUS 108 109 help 109 110 Build the driver for i.MX8ULP CCM Clock Driver 110 111
+1
drivers/clk/imx/Makefile
··· 41 41 clk-imx-acm-$(CONFIG_CLK_IMX8QXP) = clk-imx8-acm.o 42 42 43 43 obj-$(CONFIG_CLK_IMX8ULP) += clk-imx8ulp.o 44 + obj-$(CONFIG_CLK_IMX8ULP) += clk-imx8ulp-sim-lpav.o 44 45 45 46 obj-$(CONFIG_CLK_IMX1) += clk-imx1.o 46 47 obj-$(CONFIG_CLK_IMX25) += clk-imx25.o
+13
drivers/clk/imx/clk-composite-7ulp.c
··· 7 7 8 8 #include <linux/bits.h> 9 9 #include <linux/clk-provider.h> 10 + #include <linux/delay.h> 10 11 #include <linux/err.h> 11 12 #include <linux/io.h> 12 13 #include <linux/slab.h> ··· 37 36 if (ret) 38 37 return ret; 39 38 39 + /* Make sure the IP's clock is ready before release reset */ 40 + udelay(1); 41 + 40 42 spin_lock_irqsave(gate->lock, flags); 41 43 /* 42 44 * release the sw reset for peripherals associated with ··· 50 46 writel(val, gate->reg); 51 47 52 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); 53 58 54 59 return 0; 55 60 }
+4 -35
drivers/clk/imx/clk-imx8mp-audiomix.c
··· 230 230 231 231 #if IS_ENABLED(CONFIG_RESET_CONTROLLER) 232 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 233 static int clk_imx8mp_audiomix_reset_controller_register(struct device *dev, 249 234 struct clk_imx8mp_audiomix_priv *priv) 250 235 { 251 - struct auxiliary_device *adev __free(kfree) = NULL; 252 - int ret; 236 + struct auxiliary_device *adev; 253 237 254 238 if (!of_property_present(dev->of_node, "#reset-cells")) 255 239 return 0; 256 240 257 - adev = kzalloc(sizeof(*adev), GFP_KERNEL); 241 + adev = devm_auxiliary_device_create(dev, "reset", NULL); 258 242 if (!adev) 259 - return -ENOMEM; 243 + return -ENODEV; 260 244 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)); 245 + return 0; 277 246 } 278 247 279 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 496 static int _cmp_sci_clk_list(void *priv, const struct list_head *a, 497 497 const struct list_head *b) 498 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); 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 501 502 502 return _cmp_sci_clk(ca, &cb); 503 503 }
+1 -1
drivers/clk/keystone/syscon-clk.c
··· 129 129 if (IS_ERR(base)) 130 130 return PTR_ERR(base); 131 131 132 - regmap = regmap_init_mmio(dev, base, &ti_syscon_regmap_cfg); 132 + regmap = devm_regmap_init_mmio(dev, base, &ti_syscon_regmap_cfg); 133 133 if (IS_ERR(regmap)) 134 134 return dev_err_probe(dev, PTR_ERR(regmap), 135 135 "failed to get regmap\n");
+2
drivers/clk/microchip/Kconfig
··· 7 7 bool "Clk driver for PolarFire SoC" 8 8 depends on ARCH_MICROCHIP_POLARFIRE || COMPILE_TEST 9 9 default ARCH_MICROCHIP_POLARFIRE 10 + depends on MFD_SYSCON 10 11 select AUXILIARY_BUS 12 + select REGMAP_MMIO 11 13 help 12 14 Supports Clock Configuration for PolarFire SoC
+184 -43
drivers/clk/microchip/clk-mpfs.c
··· 4 4 * 5 5 * Copyright (C) 2020-2022 Microchip Technology Inc. All rights reserved. 6 6 */ 7 + #include <linux/cleanup.h> 7 8 #include <linux/clk-provider.h> 8 9 #include <linux/io.h> 10 + #include <linux/mfd/syscon.h> 9 11 #include <linux/module.h> 10 12 #include <linux/platform_device.h> 13 + #include <linux/regmap.h> 11 14 #include <dt-bindings/clock/microchip,mpfs-clock.h> 12 15 #include <soc/microchip/mpfs.h> 13 16 ··· 33 30 #define MSSPLL_POSTDIV_WIDTH 0x07u 34 31 #define MSSPLL_FIXED_DIV 4u 35 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 + 36 41 /* 37 42 * This clock ID is defined here, rather than the binding headers, as it is an 38 43 * internal clock only, and therefore has no consumers in other peripheral ··· 50 39 51 40 struct mpfs_clock_data { 52 41 struct device *dev; 42 + struct regmap *regmap; 53 43 void __iomem *base; 54 44 void __iomem *msspll_base; 55 45 struct clk_hw_onecell_data hw_data; ··· 79 67 80 68 #define to_mpfs_msspll_out_clk(_hw) container_of(_hw, struct mpfs_msspll_out_hw_clock, hw) 81 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 + 82 79 struct mpfs_cfg_hw_clock { 83 - struct clk_divider cfg; 84 - struct clk_init_data init; 80 + struct clk_hw hw; 81 + struct mpfs_cfg_clock cfg; 85 82 unsigned int id; 86 - u32 reg_offset; 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; 87 91 }; 88 92 89 93 struct mpfs_periph_hw_clock { 90 - struct clk_gate periph; 94 + struct clk_hw hw; 95 + struct mpfs_periph_clock periph; 91 96 unsigned int id; 92 97 }; 93 98 99 + #define to_mpfs_periph_clk(_hw) container_of(_hw, struct mpfs_periph_hw_clock, hw) 100 + 94 101 /* 95 - * mpfs_clk_lock prevents anything else from writing to the 96 - * mpfs clk block while a software locked register is being written. 102 + * Protects MSSPLL outputs, since there's two to a register 97 103 */ 98 104 static DEFINE_SPINLOCK(mpfs_clk_lock); 99 105 ··· 249 219 /* 250 220 * "CFG" clocks 251 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; 252 227 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, \ 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), \ 262 277 } 263 278 264 279 #define CLK_CPU_OFFSET 0u ··· 323 248 .cfg.shift = 0, 324 249 .cfg.width = 12, 325 250 .cfg.table = mpfs_div_rtcref_table, 326 - .reg_offset = REG_RTC_CLOCK_CR, 251 + .cfg.map_offset = REG_RTC_CLOCK_CR, 327 252 .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), 253 + .hw.init = 254 + CLK_HW_INIT_PARENTS_DATA("clk_rtcref", mpfs_ext_ref, &mpfs_clk_cfg_ops, 0), 330 255 } 331 256 }; 332 257 ··· 339 264 for (i = 0; i < num_clks; i++) { 340 265 struct mpfs_cfg_hw_clock *cfg_hw = &cfg_hws[i]; 341 266 342 - cfg_hw->cfg.reg = data->base + cfg_hw->reg_offset; 343 - ret = devm_clk_hw_register(dev, &cfg_hw->cfg.hw); 267 + cfg_hw->cfg.map = data->regmap; 268 + ret = devm_clk_hw_register(dev, &cfg_hw->hw); 344 269 if (ret) 345 270 return dev_err_probe(dev, ret, "failed to register clock id: %d\n", 346 271 cfg_hw->id); 347 272 348 273 id = cfg_hw->id; 349 - data->hw_data.hws[id] = &cfg_hw->cfg.hw; 274 + data->hw_data.hws[id] = &cfg_hw->hw; 350 275 } 351 276 352 277 return 0; ··· 356 281 * peripheral clocks - devices connected to axi or ahb buses. 357 282 */ 358 283 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, \ 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; 365 293 } 366 294 367 - #define PARENT_CLK(PARENT) (&mpfs_cfg_clks[CLK_##PARENT##_OFFSET].cfg.hw) 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) 368 328 369 329 /* 370 330 * Critical clocks: ··· 456 346 for (i = 0; i < num_clks; i++) { 457 347 struct mpfs_periph_hw_clock *periph_hw = &periph_hws[i]; 458 348 459 - periph_hw->periph.reg = data->base + REG_SUBBLK_CLOCK_CR; 460 - ret = devm_clk_hw_register(dev, &periph_hw->periph.hw); 349 + periph_hw->periph.map = data->regmap; 350 + ret = devm_clk_hw_register(dev, &periph_hw->hw); 461 351 if (ret) 462 352 return dev_err_probe(dev, ret, "failed to register clock id: %d\n", 463 353 periph_hw->id); 464 354 465 355 id = periph_hws[i].id; 466 - data->hw_data.hws[id] = &periph_hw->periph.hw; 356 + data->hw_data.hws[id] = &periph_hw->hw; 467 357 } 468 358 469 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); 470 396 } 471 397 472 398 static int mpfs_clk_probe(struct platform_device *pdev) ··· 520 374 if (!clk_data) 521 375 return -ENOMEM; 522 376 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); 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 + } 530 383 531 384 clk_data->hw_data.num = num_clks; 532 385 clk_data->dev = dev; ··· 551 406 if (ret) 552 407 return ret; 553 408 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); 409 + return devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, &clk_data->hw_data); 559 410 } 560 411 561 412 static const struct of_device_id mpfs_clk_of_match_table[] = {
+29 -3
drivers/clk/qcom/Kconfig
··· 215 215 devices. 216 216 217 217 config IPQ_APSS_5424 218 - tristate "IPQ APSS Clock Controller" 218 + tristate "IPQ5424 APSS Clock Controller" 219 219 select IPQ_APSS_PLL 220 220 default y if IPQ_GCC_5424 221 221 help 222 - Support for APSS Clock controller on Qualcom IPQ5424 platform. 222 + Support for APSS Clock controller on Qualcomm IPQ5424 platform. 223 223 Say Y if you want to support CPU frequency scaling on ipq based 224 224 devices. 225 225 226 226 config IPQ_APSS_6018 227 - tristate "IPQ APSS Clock Controller" 227 + tristate "IPQ6018 APSS Clock Controller" 228 228 select IPQ_APSS_PLL 229 229 depends on QCOM_APCS_IPC || COMPILE_TEST 230 230 depends on QCOM_SMEM ··· 316 316 Say Y if you want to use peripheral devices such as UART, SPI, 317 317 i2c, USB, SD/eMMC, etc. Select this for the root clock 318 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. 319 330 320 331 config IPQ_NSSCC_9574 321 332 tristate "IPQ9574 NSS Clock Controller" ··· 542 531 543 532 config QCS_DISPCC_615 544 533 tristate "QCS615 Display Clock Controller" 534 + depends on ARM64 || COMPILE_TEST 545 535 select QCS_GCC_615 546 536 help 547 537 Support for the display clock controller on Qualcomm Technologies, Inc ··· 598 586 599 587 config QCS_GPUCC_615 600 588 tristate "QCS615 Graphics clock controller" 589 + depends on ARM64 || COMPILE_TEST 601 590 select QCS_GCC_615 602 591 help 603 592 Support for the graphics clock controller on QCS615 devices. ··· 607 594 608 595 config QCS_VIDEOCC_615 609 596 tristate "QCS615 Video Clock Controller" 597 + depends on ARM64 || COMPILE_TEST 610 598 select QCS_GCC_615 611 599 help 612 600 Support for the video clock controller on QCS615 devices. ··· 1462 1448 1463 1449 config SM_VIDEOCC_6350 1464 1450 tristate "SM6350 Video Clock Controller" 1451 + depends on ARM64 || COMPILE_TEST 1465 1452 select SM_GCC_6350 1466 1453 select QCOM_GDSC 1467 1454 help ··· 1528 1513 help 1529 1514 Support for the video clock controller on Qualcomm Technologies, Inc. 1530 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. 1531 1527 Say Y if you want to support video devices and functionality such as 1532 1528 video encode/decode. 1533 1529
+2
drivers/clk/qcom/Makefile
··· 43 43 obj-$(CONFIG_IPQ_GCC_806X) += gcc-ipq806x.o 44 44 obj-$(CONFIG_IPQ_GCC_8074) += gcc-ipq8074.o 45 45 obj-$(CONFIG_IPQ_GCC_9574) += gcc-ipq9574.o 46 + obj-$(CONFIG_IPQ_NSSCC_5424) += nsscc-ipq5424.o 46 47 obj-$(CONFIG_IPQ_NSSCC_9574) += nsscc-ipq9574.o 47 48 obj-$(CONFIG_IPQ_LCC_806X) += lcc-ipq806x.o 48 49 obj-$(CONFIG_IPQ_NSSCC_QCA8K) += nsscc-qca8k.o ··· 185 184 obj-$(CONFIG_SM_VIDEOCC_8350) += videocc-sm8350.o 186 185 obj-$(CONFIG_SM_VIDEOCC_8450) += videocc-sm8450.o 187 186 obj-$(CONFIG_SM_VIDEOCC_8550) += videocc-sm8550.o 187 + obj-$(CONFIG_SM_VIDEOCC_8750) += videocc-sm8750.o 188 188 obj-$(CONFIG_SM_VIDEOCC_MILOS) += videocc-milos.o 189 189 obj-$(CONFIG_SPMI_PMIC_CLKDIV) += clk-spmi-pmic-div.o 190 190 obj-$(CONFIG_KPSS_XCC) += kpss-xcc.o
-7
drivers/clk/qcom/apss-ipq5424.c
··· 35 35 P_L3_PLL, 36 36 }; 37 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 38 static const struct alpha_pll_config apss_pll_config = { 46 39 .l = 0x3b, 47 40 .config_ctl_val = 0x08200920,
+3
drivers/clk/qcom/camcc-sdm845.c
··· 1543 1543 .name = "bps_gdsc", 1544 1544 }, 1545 1545 .flags = HW_CTRL | POLL_CFG_GDSCR, 1546 + .parent = &titan_top_gdsc.pd, 1546 1547 .pwrsts = PWRSTS_OFF_ON, 1547 1548 }; 1548 1549 ··· 1553 1552 .name = "ipe_0_gdsc", 1554 1553 }, 1555 1554 .flags = HW_CTRL | POLL_CFG_GDSCR, 1555 + .parent = &titan_top_gdsc.pd, 1556 1556 .pwrsts = PWRSTS_OFF_ON, 1557 1557 }; 1558 1558 ··· 1563 1561 .name = "ipe_1_gdsc", 1564 1562 }, 1565 1563 .flags = HW_CTRL | POLL_CFG_GDSCR, 1564 + .parent = &titan_top_gdsc.pd, 1566 1565 .pwrsts = PWRSTS_OFF_ON, 1567 1566 }; 1568 1567
+8 -5
drivers/clk/qcom/camcc-sm6350.c
··· 145 145 static const struct alpha_pll_config camcc_pll2_config = { 146 146 .l = 0x64, 147 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 148 .config_ctl_val = 0x20000800, 154 149 .config_ctl_hi_val = 0x400003d2, 155 150 .test_ctl_val = 0x04000400, 156 151 .test_ctl_hi_val = 0x00004000, 152 + .user_ctl_val = 0x0000030b, 157 153 }; 158 154 159 155 static struct clk_alpha_pll camcc_pll2 = { ··· 1689 1693 }, 1690 1694 }; 1691 1695 1696 + static struct gdsc titan_top_gdsc; 1697 + 1692 1698 static struct gdsc bps_gdsc = { 1693 1699 .gdscr = 0x6004, 1694 1700 .en_rest_wait_val = 0x2, ··· 1700 1702 .name = "bps_gdsc", 1701 1703 }, 1702 1704 .pwrsts = PWRSTS_OFF_ON, 1705 + .parent = &titan_top_gdsc.pd, 1703 1706 .flags = VOTABLE, 1704 1707 }; 1705 1708 ··· 1713 1714 .name = "ipe_0_gdsc", 1714 1715 }, 1715 1716 .pwrsts = PWRSTS_OFF_ON, 1717 + .parent = &titan_top_gdsc.pd, 1716 1718 .flags = VOTABLE, 1717 1719 }; 1718 1720 ··· 1726 1726 .name = "ife_0_gdsc", 1727 1727 }, 1728 1728 .pwrsts = PWRSTS_OFF_ON, 1729 + .parent = &titan_top_gdsc.pd, 1729 1730 }; 1730 1731 1731 1732 static struct gdsc ife_1_gdsc = { ··· 1738 1737 .name = "ife_1_gdsc", 1739 1738 }, 1740 1739 .pwrsts = PWRSTS_OFF_ON, 1740 + .parent = &titan_top_gdsc.pd, 1741 1741 }; 1742 1742 1743 1743 static struct gdsc ife_2_gdsc = { ··· 1750 1748 .name = "ife_2_gdsc", 1751 1749 }, 1752 1750 .pwrsts = PWRSTS_OFF_ON, 1751 + .parent = &titan_top_gdsc.pd, 1753 1752 }; 1754 1753 1755 1754 static struct gdsc titan_top_gdsc = {
+5 -6
drivers/clk/qcom/camcc-sm7150.c
··· 139 139 /* 1920MHz configuration */ 140 140 static const struct alpha_pll_config camcc_pll2_config = { 141 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 142 .config_ctl_hi_val = 0x400003d6, 148 143 .config_ctl_val = 0x20000954, 144 + .user_ctl_val = 0x0000030b, 149 145 }; 150 146 151 147 static struct clk_alpha_pll camcc_pll2 = { ··· 1842 1846 .name = "camcc_bps_gdsc", 1843 1847 }, 1844 1848 .flags = HW_CTRL | POLL_CFG_GDSCR, 1849 + .parent = &camcc_titan_top_gdsc.pd, 1845 1850 .pwrsts = PWRSTS_OFF_ON, 1846 1851 }; 1847 1852 ··· 1872 1875 .name = "camcc_ipe_0_gdsc", 1873 1876 }, 1874 1877 .flags = HW_CTRL | POLL_CFG_GDSCR, 1878 + .parent = &camcc_titan_top_gdsc.pd, 1875 1879 .pwrsts = PWRSTS_OFF_ON, 1876 1880 }; 1877 1881 ··· 1882 1884 .name = "camcc_ipe_1_gdsc", 1883 1885 }, 1884 1886 .flags = HW_CTRL | POLL_CFG_GDSCR, 1887 + .parent = &camcc_titan_top_gdsc.pd, 1885 1888 .pwrsts = PWRSTS_OFF_ON, 1886 1889 }; 1887 1890 ··· 1895 1896 .pwrsts = PWRSTS_OFF_ON, 1896 1897 }; 1897 1898 1898 - struct clk_hw *camcc_sm7150_hws[] = { 1899 + static struct clk_hw *camcc_sm7150_hws[] = { 1899 1900 [CAMCC_PLL0_OUT_EVEN] = &camcc_pll0_out_even.hw, 1900 1901 [CAMCC_PLL0_OUT_ODD] = &camcc_pll0_out_odd.hw, 1901 1902 [CAMCC_PLL1_OUT_EVEN] = &camcc_pll1_out_even.hw,
+3
drivers/clk/qcom/camcc-sm8250.c
··· 2213 2213 .name = "bps_gdsc", 2214 2214 }, 2215 2215 .flags = HW_CTRL | POLL_CFG_GDSCR, 2216 + .parent = &titan_top_gdsc.pd, 2216 2217 .pwrsts = PWRSTS_OFF_ON, 2217 2218 }; 2218 2219 ··· 2223 2222 .name = "ipe_0_gdsc", 2224 2223 }, 2225 2224 .flags = HW_CTRL | POLL_CFG_GDSCR, 2225 + .parent = &titan_top_gdsc.pd, 2226 2226 .pwrsts = PWRSTS_OFF_ON, 2227 2227 }; 2228 2228 ··· 2233 2231 .name = "sbi_gdsc", 2234 2232 }, 2235 2233 .flags = HW_CTRL | POLL_CFG_GDSCR, 2234 + .parent = &titan_top_gdsc.pd, 2236 2235 .pwrsts = PWRSTS_OFF_ON, 2237 2236 }; 2238 2237
+3
drivers/clk/qcom/camcc-sm8450.c
··· 2935 2935 .name = "bps_gdsc", 2936 2936 }, 2937 2937 .flags = HW_CTRL | POLL_CFG_GDSCR, 2938 + .parent = &titan_top_gdsc.pd, 2938 2939 .pwrsts = PWRSTS_OFF_ON, 2939 2940 }; 2940 2941 ··· 2945 2944 .name = "ipe_0_gdsc", 2946 2945 }, 2947 2946 .flags = HW_CTRL | POLL_CFG_GDSCR, 2947 + .parent = &titan_top_gdsc.pd, 2948 2948 .pwrsts = PWRSTS_OFF_ON, 2949 2949 }; 2950 2950 ··· 2955 2953 .name = "sbi_gdsc", 2956 2954 }, 2957 2955 .flags = POLL_CFG_GDSCR, 2956 + .parent = &titan_top_gdsc.pd, 2958 2957 .pwrsts = PWRSTS_OFF_ON, 2959 2958 }; 2960 2959
+10
drivers/clk/qcom/camcc-sm8550.c
··· 3204 3204 }, 3205 3205 }; 3206 3206 3207 + static struct gdsc cam_cc_titan_top_gdsc; 3208 + 3207 3209 static struct gdsc cam_cc_bps_gdsc = { 3208 3210 .gdscr = 0x10004, 3209 3211 .en_rest_wait_val = 0x2, ··· 3215 3213 .name = "cam_cc_bps_gdsc", 3216 3214 }, 3217 3215 .pwrsts = PWRSTS_OFF_ON, 3216 + .parent = &cam_cc_titan_top_gdsc.pd, 3218 3217 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3219 3218 }; 3220 3219 ··· 3228 3225 .name = "cam_cc_ife_0_gdsc", 3229 3226 }, 3230 3227 .pwrsts = PWRSTS_OFF_ON, 3228 + .parent = &cam_cc_titan_top_gdsc.pd, 3231 3229 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3232 3230 }; 3233 3231 ··· 3241 3237 .name = "cam_cc_ife_1_gdsc", 3242 3238 }, 3243 3239 .pwrsts = PWRSTS_OFF_ON, 3240 + .parent = &cam_cc_titan_top_gdsc.pd, 3244 3241 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3245 3242 }; 3246 3243 ··· 3254 3249 .name = "cam_cc_ife_2_gdsc", 3255 3250 }, 3256 3251 .pwrsts = PWRSTS_OFF_ON, 3252 + .parent = &cam_cc_titan_top_gdsc.pd, 3257 3253 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3258 3254 }; 3259 3255 ··· 3267 3261 .name = "cam_cc_ipe_0_gdsc", 3268 3262 }, 3269 3263 .pwrsts = PWRSTS_OFF_ON, 3264 + .parent = &cam_cc_titan_top_gdsc.pd, 3270 3265 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3271 3266 }; 3272 3267 ··· 3280 3273 .name = "cam_cc_sbi_gdsc", 3281 3274 }, 3282 3275 .pwrsts = PWRSTS_OFF_ON, 3276 + .parent = &cam_cc_titan_top_gdsc.pd, 3283 3277 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3284 3278 }; 3285 3279 ··· 3293 3285 .name = "cam_cc_sfe_0_gdsc", 3294 3286 }, 3295 3287 .pwrsts = PWRSTS_OFF_ON, 3288 + .parent = &cam_cc_titan_top_gdsc.pd, 3296 3289 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3297 3290 }; 3298 3291 ··· 3306 3297 .name = "cam_cc_sfe_1_gdsc", 3307 3298 }, 3308 3299 .pwrsts = PWRSTS_OFF_ON, 3300 + .parent = &cam_cc_titan_top_gdsc.pd, 3309 3301 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3310 3302 }; 3311 3303
+4 -4
drivers/clk/qcom/clk-branch.c
··· 142 142 u32 val; 143 143 int ret; 144 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); 145 + regmap_assign_bits(branch.clkr.regmap, mem_br->mem_enable_reg, 146 + mem_br->mem_enable_mask, !mem_br->mem_enable_invert); 147 147 148 148 ret = regmap_read_poll_timeout(branch.clkr.regmap, mem_br->mem_ack_reg, 149 149 val, val & mem_br->mem_enable_ack_mask, 0, 200); ··· 159 159 { 160 160 struct clk_mem_branch *mem_br = to_clk_mem_branch(hw); 161 161 162 - regmap_update_bits(mem_br->branch.clkr.regmap, mem_br->mem_enable_reg, 163 - mem_br->mem_enable_ack_mask, 0); 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 164 165 165 return clk_branch2_disable(hw); 166 166 }
+4
drivers/clk/qcom/clk-branch.h
··· 44 44 * @mem_enable_reg: branch clock memory gating register 45 45 * @mem_ack_reg: branch clock memory ack register 46 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 47 49 * @branch: branch clock gating handle 48 50 * 49 51 * Clock which can gate its memories. ··· 54 52 u32 mem_enable_reg; 55 53 u32 mem_ack_reg; 56 54 u32 mem_enable_ack_mask; 55 + u32 mem_enable_mask; 56 + bool mem_enable_invert; 57 57 struct clk_branch branch; 58 58 }; 59 59
+1
drivers/clk/qcom/clk-rpmh.c
··· 855 855 [RPMH_RF_CLK1_A] = &clk_rpmh_rf_clk1_a_ao.hw, 856 856 [RPMH_RF_CLK2] = &clk_rpmh_rf_clk2_a.hw, 857 857 [RPMH_RF_CLK2_A] = &clk_rpmh_rf_clk2_a_ao.hw, 858 + [RPMH_IPA_CLK] = &clk_rpmh_ipa.hw, 858 859 }; 859 860 860 861 static const struct clk_rpmh_desc clk_rpmh_qcs615 = {
+7
drivers/clk/qcom/dispcc-sm6350.c
··· 679 679 }, 680 680 }; 681 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 + 682 687 static struct gdsc mdss_gdsc = { 683 688 .gdscr = 0x1004, 684 689 .en_rest_wait_val = 0x2, ··· 751 746 .num_clks = ARRAY_SIZE(disp_cc_sm6350_clocks), 752 747 .gdscs = disp_cc_sm6350_gdscs, 753 748 .num_gdscs = ARRAY_SIZE(disp_cc_sm6350_gdscs), 749 + .resets = disp_cc_sm6350_resets, 750 + .num_resets = ARRAY_SIZE(disp_cc_sm6350_resets), 754 751 }; 755 752 756 753 static const struct of_device_id disp_cc_sm6350_match_table[] = {
+8 -1
drivers/clk/qcom/dispcc-sm7150.c
··· 20 20 #include "clk-regmap-divider.h" 21 21 #include "common.h" 22 22 #include "gdsc.h" 23 + #include "reset.h" 23 24 24 25 enum { 25 26 DT_BI_TCXO, ··· 357 356 .name = "dispcc_mdss_pclk0_clk_src", 358 357 .parent_data = dispcc_parent_data_4, 359 358 .num_parents = ARRAY_SIZE(dispcc_parent_data_4), 360 - .flags = CLK_SET_RATE_PARENT, 359 + .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 361 360 .ops = &clk_pixel_ops, 362 361 }, 363 362 }; ··· 952 951 [MDSS_GDSC] = &mdss_gdsc, 953 952 }; 954 953 954 + static const struct qcom_reset_map dispcc_sm7150_resets[] = { 955 + [DISPCC_MDSS_CORE_BCR] = { 0x2000 }, 956 + }; 957 + 955 958 static const struct regmap_config dispcc_sm7150_regmap_config = { 956 959 .reg_bits = 32, 957 960 .reg_stride = 4, ··· 970 965 .num_clks = ARRAY_SIZE(dispcc_sm7150_clocks), 971 966 .gdscs = dispcc_sm7150_gdscs, 972 967 .num_gdscs = ARRAY_SIZE(dispcc_sm7150_gdscs), 968 + .resets = dispcc_sm7150_resets, 969 + .num_resets = ARRAY_SIZE(dispcc_sm7150_resets), 973 970 }; 974 971 975 972 static const struct of_device_id dispcc_sm7150_match_table[] = {
+3
drivers/clk/qcom/dispcc-x1e80100.c
··· 1618 1618 1619 1619 static const struct qcom_reset_map disp_cc_x1e80100_resets[] = { 1620 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 }, 1621 1624 [DISP_CC_MDSS_CORE_INT2_BCR] = { 0xa000 }, 1622 1625 [DISP_CC_MDSS_RSCC_BCR] = { 0xc000 }, 1623 1626 };
+30
drivers/clk/qcom/ecpricc-qdu1000.c
··· 920 920 static struct clk_mem_branch ecpri_cc_eth_100g_c2c_0_hm_ff_0_clk = { 921 921 .mem_enable_reg = 0x8410, 922 922 .mem_ack_reg = 0x8424, 923 + .mem_enable_mask = BIT(0), 923 924 .mem_enable_ack_mask = BIT(0), 924 925 .branch = { 925 926 .halt_reg = 0x80b4, ··· 944 943 static struct clk_mem_branch ecpri_cc_eth_100g_c2c_0_hm_ff_1_clk = { 945 944 .mem_enable_reg = 0x8410, 946 945 .mem_ack_reg = 0x8424, 946 + .mem_enable_mask = BIT(1), 947 947 .mem_enable_ack_mask = BIT(1), 948 948 .branch = { 949 949 .halt_reg = 0x80bc, ··· 968 966 static struct clk_mem_branch ecpri_cc_eth_100g_c2c_hm_macsec_clk = { 969 967 .mem_enable_reg = 0x8410, 970 968 .mem_ack_reg = 0x8424, 969 + .mem_enable_mask = BIT(4), 971 970 .mem_enable_ack_mask = BIT(4), 972 971 .branch = { 973 972 .halt_reg = 0x80ac, ··· 992 989 static struct clk_mem_branch ecpri_cc_eth_100g_dbg_c2c_hm_ff_0_clk = { 993 990 .mem_enable_reg = 0x8414, 994 991 .mem_ack_reg = 0x8428, 992 + .mem_enable_mask = BIT(0), 995 993 .mem_enable_ack_mask = BIT(0), 996 994 .branch = { 997 995 .halt_reg = 0x80d8, ··· 1016 1012 static struct clk_mem_branch ecpri_cc_eth_100g_dbg_c2c_hm_ff_1_clk = { 1017 1013 .mem_enable_reg = 0x8414, 1018 1014 .mem_ack_reg = 0x8428, 1015 + .mem_enable_mask = BIT(1), 1019 1016 .mem_enable_ack_mask = BIT(1), 1020 1017 .branch = { 1021 1018 .halt_reg = 0x80e0, ··· 1058 1053 static struct clk_mem_branch ecpri_cc_eth_100g_fh_0_hm_ff_0_clk = { 1059 1054 .mem_enable_reg = 0x8404, 1060 1055 .mem_ack_reg = 0x8418, 1056 + .mem_enable_mask = BIT(0), 1061 1057 .mem_enable_ack_mask = BIT(0), 1062 1058 .branch = { 1063 1059 .halt_reg = 0x800c, ··· 1082 1076 static struct clk_mem_branch ecpri_cc_eth_100g_fh_0_hm_ff_1_clk = { 1083 1077 .mem_enable_reg = 0x8404, 1084 1078 .mem_ack_reg = 0x8418, 1079 + .mem_enable_mask = BIT(1), 1085 1080 .mem_enable_ack_mask = BIT(1), 1086 1081 .branch = { 1087 1082 .halt_reg = 0x8014, ··· 1106 1099 static struct clk_mem_branch ecpri_cc_eth_100g_fh_0_hm_ff_2_clk = { 1107 1100 .mem_enable_reg = 0x8404, 1108 1101 .mem_ack_reg = 0x8418, 1102 + .mem_enable_mask = BIT(2), 1109 1103 .mem_enable_ack_mask = BIT(2), 1110 1104 .branch = { 1111 1105 .halt_reg = 0x801c, ··· 1130 1122 static struct clk_mem_branch ecpri_cc_eth_100g_fh_0_hm_ff_3_clk = { 1131 1123 .mem_enable_reg = 0x8404, 1132 1124 .mem_ack_reg = 0x8418, 1125 + .mem_enable_mask = BIT(3), 1133 1126 .mem_enable_ack_mask = BIT(3), 1134 1127 .branch = { 1135 1128 .halt_reg = 0x8024, ··· 1172 1163 static struct clk_mem_branch ecpri_cc_eth_100g_fh_1_hm_ff_0_clk = { 1173 1164 .mem_enable_reg = 0x8408, 1174 1165 .mem_ack_reg = 0x841c, 1166 + .mem_enable_mask = BIT(0), 1175 1167 .mem_enable_ack_mask = BIT(0), 1176 1168 .branch = { 1177 1169 .halt_reg = 0x8044, ··· 1196 1186 static struct clk_mem_branch ecpri_cc_eth_100g_fh_1_hm_ff_1_clk = { 1197 1187 .mem_enable_reg = 0x8408, 1198 1188 .mem_ack_reg = 0x841c, 1189 + .mem_enable_mask = BIT(1), 1199 1190 .mem_enable_ack_mask = BIT(1), 1200 1191 .branch = { 1201 1192 .halt_reg = 0x804c, ··· 1220 1209 static struct clk_mem_branch ecpri_cc_eth_100g_fh_1_hm_ff_2_clk = { 1221 1210 .mem_enable_reg = 0x8408, 1222 1211 .mem_ack_reg = 0x841c, 1212 + .mem_enable_mask = BIT(2), 1223 1213 .mem_enable_ack_mask = BIT(2), 1224 1214 .branch = { 1225 1215 .halt_reg = 0x8054, ··· 1244 1232 static struct clk_mem_branch ecpri_cc_eth_100g_fh_1_hm_ff_3_clk = { 1245 1233 .mem_enable_reg = 0x8408, 1246 1234 .mem_ack_reg = 0x841c, 1235 + .mem_enable_mask = BIT(3), 1247 1236 .mem_enable_ack_mask = BIT(3), 1248 1237 .branch = { 1249 1238 .halt_reg = 0x805c, ··· 1286 1273 static struct clk_mem_branch ecpri_cc_eth_100g_fh_2_hm_ff_0_clk = { 1287 1274 .mem_enable_reg = 0x840c, 1288 1275 .mem_ack_reg = 0x8420, 1276 + .mem_enable_mask = BIT(0), 1289 1277 .mem_enable_ack_mask = BIT(0), 1290 1278 .branch = { 1291 1279 .halt_reg = 0x807c, ··· 1310 1296 static struct clk_mem_branch ecpri_cc_eth_100g_fh_2_hm_ff_1_clk = { 1311 1297 .mem_enable_reg = 0x840c, 1312 1298 .mem_ack_reg = 0x8420, 1299 + .mem_enable_mask = BIT(1), 1313 1300 .mem_enable_ack_mask = BIT(1), 1314 1301 .branch = { 1315 1302 .halt_reg = 0x8084, ··· 1334 1319 static struct clk_mem_branch ecpri_cc_eth_100g_fh_2_hm_ff_2_clk = { 1335 1320 .mem_enable_reg = 0x840c, 1336 1321 .mem_ack_reg = 0x8420, 1322 + .mem_enable_mask = BIT(2), 1337 1323 .mem_enable_ack_mask = BIT(2), 1338 1324 .branch = { 1339 1325 .halt_reg = 0x808c, ··· 1358 1342 static struct clk_mem_branch ecpri_cc_eth_100g_fh_2_hm_ff_3_clk = { 1359 1343 .mem_enable_reg = 0x840c, 1360 1344 .mem_ack_reg = 0x8420, 1345 + .mem_enable_mask = BIT(3), 1361 1346 .mem_enable_ack_mask = BIT(3), 1362 1347 .branch = { 1363 1348 .halt_reg = 0x8094, ··· 1400 1383 static struct clk_mem_branch ecpri_cc_eth_100g_fh_macsec_0_clk = { 1401 1384 .mem_enable_reg = 0x8404, 1402 1385 .mem_ack_reg = 0x8418, 1386 + .mem_enable_mask = BIT(4), 1403 1387 .mem_enable_ack_mask = BIT(4), 1404 1388 .branch = { 1405 1389 .halt_reg = 0x8004, ··· 1424 1406 static struct clk_mem_branch ecpri_cc_eth_100g_fh_macsec_1_clk = { 1425 1407 .mem_enable_reg = 0x8408, 1426 1408 .mem_ack_reg = 0x841c, 1409 + .mem_enable_mask = BIT(4), 1427 1410 .mem_enable_ack_mask = BIT(4), 1428 1411 .branch = { 1429 1412 .halt_reg = 0x803c, ··· 1448 1429 static struct clk_mem_branch ecpri_cc_eth_100g_fh_macsec_2_clk = { 1449 1430 .mem_enable_reg = 0x840c, 1450 1431 .mem_ack_reg = 0x8420, 1432 + .mem_enable_mask = BIT(4), 1451 1433 .mem_enable_ack_mask = BIT(4), 1452 1434 .branch = { 1453 1435 .halt_reg = 0x8074, ··· 1472 1452 static struct clk_mem_branch ecpri_cc_eth_100g_mac_c2c_hm_ref_clk = { 1473 1453 .mem_enable_reg = 0x8410, 1474 1454 .mem_ack_reg = 0x8424, 1455 + .mem_enable_mask = BIT(5), 1475 1456 .mem_enable_ack_mask = BIT(5), 1476 1457 .branch = { 1477 1458 .halt_reg = 0x80c4, ··· 1496 1475 static struct clk_mem_branch ecpri_cc_eth_100g_mac_dbg_c2c_hm_ref_clk = { 1497 1476 .mem_enable_reg = 0x8414, 1498 1477 .mem_ack_reg = 0x8428, 1478 + .mem_enable_mask = BIT(5), 1499 1479 .mem_enable_ack_mask = BIT(5), 1500 1480 .branch = { 1501 1481 .halt_reg = 0x80e8, ··· 1520 1498 static struct clk_mem_branch ecpri_cc_eth_100g_mac_fh0_hm_ref_clk = { 1521 1499 .mem_enable_reg = 0x8404, 1522 1500 .mem_ack_reg = 0x8418, 1501 + .mem_enable_mask = BIT(5), 1523 1502 .mem_enable_ack_mask = BIT(5), 1524 1503 .branch = { 1525 1504 .halt_reg = 0x802c, ··· 1544 1521 static struct clk_mem_branch ecpri_cc_eth_100g_mac_fh1_hm_ref_clk = { 1545 1522 .mem_enable_reg = 0x8408, 1546 1523 .mem_ack_reg = 0x841c, 1524 + .mem_enable_mask = BIT(5), 1547 1525 .mem_enable_ack_mask = BIT(5), 1548 1526 .branch = { 1549 1527 .halt_reg = 0x8064, ··· 1568 1544 static struct clk_mem_branch ecpri_cc_eth_100g_mac_fh2_hm_ref_clk = { 1569 1545 .mem_enable_reg = 0x840c, 1570 1546 .mem_ack_reg = 0x8420, 1547 + .mem_enable_mask = BIT(5), 1571 1548 .mem_enable_ack_mask = BIT(5), 1572 1549 .branch = { 1573 1550 .halt_reg = 0x809c, ··· 1628 1603 static struct clk_mem_branch ecpri_cc_eth_phy_0_ock_sram_clk = { 1629 1604 .mem_enable_reg = 0x8404, 1630 1605 .mem_ack_reg = 0x8418, 1606 + .mem_enable_mask = BIT(6), 1631 1607 .mem_enable_ack_mask = BIT(6), 1632 1608 .branch = { 1633 1609 .halt_reg = 0xd140, ··· 1647 1621 static struct clk_mem_branch ecpri_cc_eth_phy_1_ock_sram_clk = { 1648 1622 .mem_enable_reg = 0x8408, 1649 1623 .mem_ack_reg = 0x841C, 1624 + .mem_enable_mask = BIT(6), 1650 1625 .mem_enable_ack_mask = BIT(6), 1651 1626 .branch = { 1652 1627 .halt_reg = 0xd148, ··· 1666 1639 static struct clk_mem_branch ecpri_cc_eth_phy_2_ock_sram_clk = { 1667 1640 .mem_enable_reg = 0x840c, 1668 1641 .mem_ack_reg = 0x8420, 1642 + .mem_enable_mask = BIT(6), 1669 1643 .mem_enable_ack_mask = BIT(6), 1670 1644 .branch = { 1671 1645 .halt_reg = 0xd150, ··· 1685 1657 static struct clk_mem_branch ecpri_cc_eth_phy_3_ock_sram_clk = { 1686 1658 .mem_enable_reg = 0x8410, 1687 1659 .mem_ack_reg = 0x8424, 1660 + .mem_enable_mask = BIT(6), 1688 1661 .mem_enable_ack_mask = BIT(6), 1689 1662 .branch = { 1690 1663 .halt_reg = 0xd158, ··· 1704 1675 static struct clk_mem_branch ecpri_cc_eth_phy_4_ock_sram_clk = { 1705 1676 .mem_enable_reg = 0x8414, 1706 1677 .mem_ack_reg = 0x8428, 1678 + .mem_enable_mask = BIT(6), 1707 1679 .mem_enable_ack_mask = BIT(6), 1708 1680 .branch = { 1709 1681 .halt_reg = 0xd160,
+12 -13
drivers/clk/qcom/gcc-glymur.c
··· 2643 2643 }; 2644 2644 2645 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 2646 F(177666750, P_GCC_GPLL8_OUT_MAIN, 4, 0, 0), 2648 2647 F(355333500, P_GCC_GPLL8_OUT_MAIN, 2, 0, 0), 2649 2648 { } ··· 6759 6760 6760 6761 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 6761 6762 .halt_reg = 0x3f088, 6762 - .halt_check = BRANCH_HALT_DELAY, 6763 + .halt_check = BRANCH_HALT_SKIP, 6763 6764 .hwcg_reg = 0x3f088, 6764 6765 .hwcg_bit = 1, 6765 6766 .clkr = { ··· 6815 6816 6816 6817 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = { 6817 6818 .halt_reg = 0xe2078, 6818 - .halt_check = BRANCH_HALT_VOTED, 6819 + .halt_check = BRANCH_HALT_SKIP, 6819 6820 .hwcg_reg = 0xe2078, 6820 6821 .hwcg_bit = 1, 6821 6822 .clkr = { ··· 6871 6872 6872 6873 static struct clk_branch gcc_usb3_tert_phy_pipe_clk = { 6873 6874 .halt_reg = 0xe1078, 6874 - .halt_check = BRANCH_HALT_VOTED, 6875 + .halt_check = BRANCH_HALT_SKIP, 6875 6876 .hwcg_reg = 0xe1078, 6876 6877 .hwcg_bit = 1, 6877 6878 .clkr = { ··· 6960 6961 6961 6962 static struct clk_branch gcc_usb4_0_phy_p2rr2p_pipe_clk = { 6962 6963 .halt_reg = 0x2b0f4, 6963 - .halt_check = BRANCH_HALT, 6964 + .halt_check = BRANCH_HALT_SKIP, 6964 6965 .clkr = { 6965 6966 .enable_reg = 0x2b0f4, 6966 6967 .enable_mask = BIT(0), ··· 6978 6979 6979 6980 static struct clk_branch gcc_usb4_0_phy_pcie_pipe_clk = { 6980 6981 .halt_reg = 0x2b04c, 6981 - .halt_check = BRANCH_HALT_VOTED, 6982 + .halt_check = BRANCH_HALT_SKIP, 6982 6983 .clkr = { 6983 6984 .enable_reg = 0x62010, 6984 6985 .enable_mask = BIT(11), ··· 7032 7033 7033 7034 static struct clk_branch gcc_usb4_0_phy_usb_pipe_clk = { 7034 7035 .halt_reg = 0x2b0bc, 7035 - .halt_check = BRANCH_HALT_VOTED, 7036 + .halt_check = BRANCH_HALT_SKIP, 7036 7037 .hwcg_reg = 0x2b0bc, 7037 7038 .hwcg_bit = 1, 7038 7039 .clkr = { ··· 7195 7196 7196 7197 static struct clk_branch gcc_usb4_1_phy_p2rr2p_pipe_clk = { 7197 7198 .halt_reg = 0x2d118, 7198 - .halt_check = BRANCH_HALT, 7199 + .halt_check = BRANCH_HALT_SKIP, 7199 7200 .clkr = { 7200 7201 .enable_reg = 0x2d118, 7201 7202 .enable_mask = BIT(0), ··· 7213 7214 7214 7215 static struct clk_branch gcc_usb4_1_phy_pcie_pipe_clk = { 7215 7216 .halt_reg = 0x2d04c, 7216 - .halt_check = BRANCH_HALT_VOTED, 7217 + .halt_check = BRANCH_HALT_SKIP, 7217 7218 .clkr = { 7218 7219 .enable_reg = 0x62010, 7219 7220 .enable_mask = BIT(12), ··· 7267 7268 7268 7269 static struct clk_branch gcc_usb4_1_phy_usb_pipe_clk = { 7269 7270 .halt_reg = 0x2d0e0, 7270 - .halt_check = BRANCH_HALT_VOTED, 7271 + .halt_check = BRANCH_HALT_SKIP, 7271 7272 .hwcg_reg = 0x2d0e0, 7272 7273 .hwcg_bit = 1, 7273 7274 .clkr = { ··· 7430 7431 7431 7432 static struct clk_branch gcc_usb4_2_phy_p2rr2p_pipe_clk = { 7432 7433 .halt_reg = 0xe00f8, 7433 - .halt_check = BRANCH_HALT, 7434 + .halt_check = BRANCH_HALT_SKIP, 7434 7435 .clkr = { 7435 7436 .enable_reg = 0xe00f8, 7436 7437 .enable_mask = BIT(0), ··· 7448 7449 7449 7450 static struct clk_branch gcc_usb4_2_phy_pcie_pipe_clk = { 7450 7451 .halt_reg = 0xe004c, 7451 - .halt_check = BRANCH_HALT_VOTED, 7452 + .halt_check = BRANCH_HALT_SKIP, 7452 7453 .clkr = { 7453 7454 .enable_reg = 0x62010, 7454 7455 .enable_mask = BIT(13), ··· 7502 7503 7503 7504 static struct clk_branch gcc_usb4_2_phy_usb_pipe_clk = { 7504 7505 .halt_reg = 0xe00c0, 7505 - .halt_check = BRANCH_HALT_VOTED, 7506 + .halt_check = BRANCH_HALT_SKIP, 7506 7507 .hwcg_reg = 0xe00c0, 7507 7508 .hwcg_bit = 1, 7508 7509 .clkr = {
+27 -1
drivers/clk/qcom/gcc-ipq5424.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0 2 2 /* 3 3 * Copyright (c) 2018,2020 The Linux Foundation. All rights reserved. 4 - * Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved. 4 + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. 5 5 */ 6 6 7 7 #include <linux/clk-provider.h> ··· 76 76 }, 77 77 .num_parents = 1, 78 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, 79 93 }, 80 94 }; 81 95 ··· 2948 2934 [GPLL2] = &gpll2.clkr, 2949 2935 [GPLL2_OUT_MAIN] = &gpll2_out_main.clkr, 2950 2936 [GPLL4] = &gpll4.clkr, 2937 + [GPLL0_OUT_AUX] = &gpll0_out_aux.clkr, 2951 2938 }; 2952 2939 2953 2940 static const struct qcom_reset_map gcc_ipq5424_resets[] = { ··· 3265 3250 { MASTER_ANOC_PCIE3, SLAVE_ANOC_PCIE3, GCC_ANOC_PCIE3_2LANE_M_CLK }, 3266 3251 { MASTER_CNOC_PCIE3, SLAVE_CNOC_PCIE3, GCC_CNOC_PCIE3_2LANE_S_CLK }, 3267 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 }, 3268 3263 }; 3269 3264 3270 3265 static const struct of_device_id gcc_ipq5424_match_table[] = { ··· 3309 3284 .num_clk_hws = ARRAY_SIZE(gcc_ipq5424_hws), 3310 3285 .icc_hws = icc_ipq5424_hws, 3311 3286 .num_icc_hws = ARRAY_SIZE(icc_ipq5424_hws), 3287 + .icc_first_node_id = IPQ_APPS_ID, 3312 3288 }; 3313 3289 3314 3290 static int gcc_ipq5424_probe(struct platform_device *pdev)
+3 -3
drivers/clk/qcom/gcc-qcs615.c
··· 784 784 .name = "gcc_sdcc1_apps_clk_src", 785 785 .parent_data = gcc_parent_data_1, 786 786 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 787 - .ops = &clk_rcg2_floor_ops, 787 + .ops = &clk_rcg2_shared_floor_ops, 788 788 }, 789 789 }; 790 790 ··· 806 806 .name = "gcc_sdcc1_ice_core_clk_src", 807 807 .parent_data = gcc_parent_data_0, 808 808 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 809 - .ops = &clk_rcg2_floor_ops, 809 + .ops = &clk_rcg2_shared_floor_ops, 810 810 }, 811 811 }; 812 812 ··· 830 830 .name = "gcc_sdcc2_apps_clk_src", 831 831 .parent_data = gcc_parent_data_8, 832 832 .num_parents = ARRAY_SIZE(gcc_parent_data_8), 833 - .ops = &clk_rcg2_floor_ops, 833 + .ops = &clk_rcg2_shared_floor_ops, 834 834 }, 835 835 }; 836 836
-1
drivers/clk/qcom/gcc-sc8280xp.c
··· 2224 2224 }; 2225 2225 2226 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 2227 F(175000000, P_GCC_GPLL8_OUT_MAIN, 4, 0, 0), 2229 2228 F(350000000, P_GCC_GPLL8_OUT_MAIN, 2, 0, 0), 2230 2229 { }
+1
drivers/clk/qcom/gcc-sm8750.c
··· 1012 1012 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { 1013 1013 F(400000, P_BI_TCXO, 12, 1, 4), 1014 1014 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0), 1015 + F(37500000, P_GCC_GPLL0_OUT_EVEN, 8, 0, 0), 1015 1016 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0), 1016 1017 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0), 1017 1018 F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
+681 -18
drivers/clk/qcom/gcc-x1e80100.c
··· 32 32 DT_USB3_PHY_0_WRAPPER_GCC_USB30_PIPE, 33 33 DT_USB3_PHY_1_WRAPPER_GCC_USB30_PIPE, 34 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, 35 62 }; 36 63 37 64 enum { ··· 69 42 P_GCC_GPLL7_OUT_MAIN, 70 43 P_GCC_GPLL8_OUT_MAIN, 71 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, 72 69 P_SLEEP_CLK, 73 70 P_USB3_PHY_0_WRAPPER_GCC_USB30_PIPE_CLK, 74 71 P_USB3_PHY_1_WRAPPER_GCC_USB30_PIPE_CLK, 75 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, 76 79 }; 77 80 78 81 static struct clk_alpha_pll gcc_gpll0 = { ··· 375 318 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 376 319 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0), 377 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 + }, 378 657 }; 379 658 380 659 static struct clk_rcg2 gcc_gp1_clk_src = { ··· 1849 1456 }; 1850 1457 1851 1458 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 1459 F(175000000, P_GCC_GPLL8_OUT_MAIN, 4, 0, 0), 1854 1460 F(350000000, P_GCC_GPLL8_OUT_MAIN, 2, 0, 0), 1855 1461 { } ··· 3182 2790 .enable_mask = BIT(25), 3183 2791 .hw.init = &(const struct clk_init_data) { 3184 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, 3185 2798 .ops = &clk_branch2_ops, 3186 2799 }, 3187 2800 }, ··· 3276 2879 .enable_mask = BIT(30), 3277 2880 .hw.init = &(const struct clk_init_data) { 3278 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, 3279 2887 .ops = &clk_branch2_ops, 3280 2888 }, 3281 2889 }, ··· 3370 2968 .enable_mask = BIT(23), 3371 2969 .hw.init = &(const struct clk_init_data) { 3372 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, 3373 2976 .ops = &clk_branch2_ops, 3374 2977 }, 3375 2978 }, ··· 5563 5156 }, 5564 5157 }; 5565 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 + 5566 5186 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 5567 5187 .halt_reg = 0x39068, 5568 5188 .halt_check = BRANCH_HALT_SKIP, ··· 5601 5167 .hw.init = &(const struct clk_init_data) { 5602 5168 .name = "gcc_usb3_prim_phy_pipe_clk", 5603 5169 .parent_hws = (const struct clk_hw*[]) { 5604 - &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw, 5170 + &gcc_usb34_prim_phy_pipe_clk_src.clkr.hw, 5605 5171 }, 5606 5172 .num_parents = 1, 5607 5173 .flags = CLK_SET_RATE_PARENT, ··· 5661 5227 }, 5662 5228 }; 5663 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 + 5664 5257 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = { 5665 5258 .halt_reg = 0xa1068, 5666 5259 .halt_check = BRANCH_HALT_SKIP, ··· 5699 5238 .hw.init = &(const struct clk_init_data) { 5700 5239 .name = "gcc_usb3_sec_phy_pipe_clk", 5701 5240 .parent_hws = (const struct clk_hw*[]) { 5702 - &gcc_usb3_sec_phy_pipe_clk_src.clkr.hw, 5241 + &gcc_usb34_sec_phy_pipe_clk_src.clkr.hw, 5703 5242 }, 5704 5243 .num_parents = 1, 5705 5244 .flags = CLK_SET_RATE_PARENT, ··· 5759 5298 }, 5760 5299 }; 5761 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 + 5762 5328 static struct clk_branch gcc_usb3_tert_phy_pipe_clk = { 5763 5329 .halt_reg = 0xa2068, 5764 5330 .halt_check = BRANCH_HALT_SKIP, ··· 5797 5309 .hw.init = &(const struct clk_init_data) { 5798 5310 .name = "gcc_usb3_tert_phy_pipe_clk", 5799 5311 .parent_hws = (const struct clk_hw*[]) { 5800 - &gcc_usb3_tert_phy_pipe_clk_src.clkr.hw, 5312 + &gcc_usb34_tert_phy_pipe_clk_src.clkr.hw, 5801 5313 }, 5802 5314 .num_parents = 1, 5803 5315 .flags = CLK_SET_RATE_PARENT, ··· 5823 5335 5824 5336 static struct clk_branch gcc_usb4_0_dp0_clk = { 5825 5337 .halt_reg = 0x9f060, 5826 - .halt_check = BRANCH_HALT, 5338 + .halt_check = BRANCH_HALT_SKIP, 5827 5339 .clkr = { 5828 5340 .enable_reg = 0x9f060, 5829 5341 .enable_mask = BIT(0), 5830 5342 .hw.init = &(const struct clk_init_data) { 5831 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, 5832 5349 .ops = &clk_branch2_ops, 5833 5350 }, 5834 5351 }, ··· 5841 5348 5842 5349 static struct clk_branch gcc_usb4_0_dp1_clk = { 5843 5350 .halt_reg = 0x9f108, 5844 - .halt_check = BRANCH_HALT, 5351 + .halt_check = BRANCH_HALT_SKIP, 5845 5352 .clkr = { 5846 5353 .enable_reg = 0x9f108, 5847 5354 .enable_mask = BIT(0), 5848 5355 .hw.init = &(const struct clk_init_data) { 5849 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, 5850 5362 .ops = &clk_branch2_ops, 5851 5363 }, 5852 5364 }, ··· 5883 5385 .enable_mask = BIT(0), 5884 5386 .hw.init = &(const struct clk_init_data) { 5885 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, 5886 5393 .ops = &clk_branch2_ops, 5887 5394 }, 5888 5395 }, ··· 5901 5398 .enable_mask = BIT(19), 5902 5399 .hw.init = &(const struct clk_init_data) { 5903 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, 5904 5406 .ops = &clk_branch2_ops, 5905 5407 }, 5906 5408 }, ··· 5913 5405 5914 5406 static struct clk_branch gcc_usb4_0_phy_rx0_clk = { 5915 5407 .halt_reg = 0x9f0b0, 5916 - .halt_check = BRANCH_HALT, 5408 + .halt_check = BRANCH_HALT_SKIP, 5917 5409 .clkr = { 5918 5410 .enable_reg = 0x9f0b0, 5919 5411 .enable_mask = BIT(0), 5920 5412 .hw.init = &(const struct clk_init_data) { 5921 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, 5922 5419 .ops = &clk_branch2_ops, 5923 5420 }, 5924 5421 }, ··· 5931 5418 5932 5419 static struct clk_branch gcc_usb4_0_phy_rx1_clk = { 5933 5420 .halt_reg = 0x9f0c0, 5934 - .halt_check = BRANCH_HALT, 5421 + .halt_check = BRANCH_HALT_SKIP, 5935 5422 .clkr = { 5936 5423 .enable_reg = 0x9f0c0, 5937 5424 .enable_mask = BIT(0), 5938 5425 .hw.init = &(const struct clk_init_data) { 5939 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, 5940 5432 .ops = &clk_branch2_ops, 5941 5433 }, 5942 5434 }, ··· 5957 5439 .enable_mask = BIT(0), 5958 5440 .hw.init = &(const struct clk_init_data) { 5959 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, 5960 5447 .ops = &clk_branch2_ops, 5961 5448 }, 5962 5449 }, ··· 5993 5470 .enable_mask = BIT(0), 5994 5471 .hw.init = &(const struct clk_init_data) { 5995 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, 5996 5478 .ops = &clk_branch2_ops, 5997 5479 }, 5998 5480 }, ··· 6040 5512 6041 5513 static struct clk_branch gcc_usb4_1_dp0_clk = { 6042 5514 .halt_reg = 0x2b060, 6043 - .halt_check = BRANCH_HALT, 5515 + .halt_check = BRANCH_HALT_SKIP, 6044 5516 .clkr = { 6045 5517 .enable_reg = 0x2b060, 6046 5518 .enable_mask = BIT(0), 6047 5519 .hw.init = &(const struct clk_init_data) { 6048 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, 6049 5526 .ops = &clk_branch2_ops, 6050 5527 }, 6051 5528 }, ··· 6058 5525 6059 5526 static struct clk_branch gcc_usb4_1_dp1_clk = { 6060 5527 .halt_reg = 0x2b108, 6061 - .halt_check = BRANCH_HALT, 5528 + .halt_check = BRANCH_HALT_SKIP, 6062 5529 .clkr = { 6063 5530 .enable_reg = 0x2b108, 6064 5531 .enable_mask = BIT(0), 6065 5532 .hw.init = &(const struct clk_init_data) { 6066 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, 6067 5539 .ops = &clk_branch2_ops, 6068 5540 }, 6069 5541 }, ··· 6100 5562 .enable_mask = BIT(0), 6101 5563 .hw.init = &(const struct clk_init_data) { 6102 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, 6103 5570 .ops = &clk_branch2_ops, 6104 5571 }, 6105 5572 }, ··· 6118 5575 .enable_mask = BIT(0), 6119 5576 .hw.init = &(const struct clk_init_data) { 6120 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, 6121 5583 .ops = &clk_branch2_ops, 6122 5584 }, 6123 5585 }, ··· 6130 5582 6131 5583 static struct clk_branch gcc_usb4_1_phy_rx0_clk = { 6132 5584 .halt_reg = 0x2b0b0, 6133 - .halt_check = BRANCH_HALT, 5585 + .halt_check = BRANCH_HALT_SKIP, 6134 5586 .clkr = { 6135 5587 .enable_reg = 0x2b0b0, 6136 5588 .enable_mask = BIT(0), 6137 5589 .hw.init = &(const struct clk_init_data) { 6138 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, 6139 5596 .ops = &clk_branch2_ops, 6140 5597 }, 6141 5598 }, ··· 6148 5595 6149 5596 static struct clk_branch gcc_usb4_1_phy_rx1_clk = { 6150 5597 .halt_reg = 0x2b0c0, 6151 - .halt_check = BRANCH_HALT, 5598 + .halt_check = BRANCH_HALT_SKIP, 6152 5599 .clkr = { 6153 5600 .enable_reg = 0x2b0c0, 6154 5601 .enable_mask = BIT(0), 6155 5602 .hw.init = &(const struct clk_init_data) { 6156 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, 6157 5609 .ops = &clk_branch2_ops, 6158 5610 }, 6159 5611 }, ··· 6174 5616 .enable_mask = BIT(0), 6175 5617 .hw.init = &(const struct clk_init_data) { 6176 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, 6177 5624 .ops = &clk_branch2_ops, 6178 5625 }, 6179 5626 }, ··· 6210 5647 .enable_mask = BIT(0), 6211 5648 .hw.init = &(const struct clk_init_data) { 6212 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, 6213 5655 .ops = &clk_branch2_ops, 6214 5656 }, 6215 5657 }, ··· 6257 5689 6258 5690 static struct clk_branch gcc_usb4_2_dp0_clk = { 6259 5691 .halt_reg = 0x11060, 6260 - .halt_check = BRANCH_HALT, 5692 + .halt_check = BRANCH_HALT_SKIP, 6261 5693 .clkr = { 6262 5694 .enable_reg = 0x11060, 6263 5695 .enable_mask = BIT(0), 6264 5696 .hw.init = &(const struct clk_init_data) { 6265 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, 6266 5703 .ops = &clk_branch2_ops, 6267 5704 }, 6268 5705 }, ··· 6275 5702 6276 5703 static struct clk_branch gcc_usb4_2_dp1_clk = { 6277 5704 .halt_reg = 0x11108, 6278 - .halt_check = BRANCH_HALT, 5705 + .halt_check = BRANCH_HALT_SKIP, 6279 5706 .clkr = { 6280 5707 .enable_reg = 0x11108, 6281 5708 .enable_mask = BIT(0), 6282 5709 .hw.init = &(const struct clk_init_data) { 6283 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, 6284 5716 .ops = &clk_branch2_ops, 6285 5717 }, 6286 5718 }, ··· 6317 5739 .enable_mask = BIT(0), 6318 5740 .hw.init = &(const struct clk_init_data) { 6319 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, 6320 5747 .ops = &clk_branch2_ops, 6321 5748 }, 6322 5749 }, ··· 6335 5752 .enable_mask = BIT(1), 6336 5753 .hw.init = &(const struct clk_init_data) { 6337 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, 6338 5760 .ops = &clk_branch2_ops, 6339 5761 }, 6340 5762 }, ··· 6347 5759 6348 5760 static struct clk_branch gcc_usb4_2_phy_rx0_clk = { 6349 5761 .halt_reg = 0x110b0, 6350 - .halt_check = BRANCH_HALT, 5762 + .halt_check = BRANCH_HALT_SKIP, 6351 5763 .clkr = { 6352 5764 .enable_reg = 0x110b0, 6353 5765 .enable_mask = BIT(0), 6354 5766 .hw.init = &(const struct clk_init_data) { 6355 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, 6356 5773 .ops = &clk_branch2_ops, 6357 5774 }, 6358 5775 }, ··· 6365 5772 6366 5773 static struct clk_branch gcc_usb4_2_phy_rx1_clk = { 6367 5774 .halt_reg = 0x110c0, 6368 - .halt_check = BRANCH_HALT, 5775 + .halt_check = BRANCH_HALT_SKIP, 6369 5776 .clkr = { 6370 5777 .enable_reg = 0x110c0, 6371 5778 .enable_mask = BIT(0), 6372 5779 .hw.init = &(const struct clk_init_data) { 6373 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, 6374 5786 .ops = &clk_branch2_ops, 6375 5787 }, 6376 5788 }, ··· 6391 5793 .enable_mask = BIT(0), 6392 5794 .hw.init = &(const struct clk_init_data) { 6393 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, 6394 5801 .ops = &clk_branch2_ops, 6395 5802 }, 6396 5803 }, ··· 7086 6483 [GCC_USB30_TERT_MOCK_UTMI_CLK_SRC] = &gcc_usb30_tert_mock_utmi_clk_src.clkr, 7087 6484 [GCC_USB30_TERT_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_tert_mock_utmi_postdiv_clk_src.clkr, 7088 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, 7089 6489 [GCC_USB3_MP_PHY_AUX_CLK] = &gcc_usb3_mp_phy_aux_clk.clkr, 7090 6490 [GCC_USB3_MP_PHY_AUX_CLK_SRC] = &gcc_usb3_mp_phy_aux_clk_src.clkr, 7091 6491 [GCC_USB3_MP_PHY_COM_AUX_CLK] = &gcc_usb3_mp_phy_com_aux_clk.clkr, ··· 7114 6508 [GCC_USB4_0_DP1_CLK] = &gcc_usb4_0_dp1_clk.clkr, 7115 6509 [GCC_USB4_0_MASTER_CLK] = &gcc_usb4_0_master_clk.clkr, 7116 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, 7117 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, 7118 6515 [GCC_USB4_0_PHY_PCIE_PIPE_CLK] = &gcc_usb4_0_phy_pcie_pipe_clk.clkr, 7119 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, 7120 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, 7121 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, 7122 6523 [GCC_USB4_0_PHY_USB_PIPE_CLK] = &gcc_usb4_0_phy_usb_pipe_clk.clkr, 7123 6524 [GCC_USB4_0_SB_IF_CLK] = &gcc_usb4_0_sb_if_clk.clkr, 7124 6525 [GCC_USB4_0_SB_IF_CLK_SRC] = &gcc_usb4_0_sb_if_clk_src.clkr, ··· 7137 6524 [GCC_USB4_1_DP1_CLK] = &gcc_usb4_1_dp1_clk.clkr, 7138 6525 [GCC_USB4_1_MASTER_CLK] = &gcc_usb4_1_master_clk.clkr, 7139 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, 7140 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, 7141 6531 [GCC_USB4_1_PHY_PCIE_PIPE_CLK] = &gcc_usb4_1_phy_pcie_pipe_clk.clkr, 7142 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, 7143 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, 7144 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, 7145 6539 [GCC_USB4_1_PHY_USB_PIPE_CLK] = &gcc_usb4_1_phy_usb_pipe_clk.clkr, 7146 6540 [GCC_USB4_1_SB_IF_CLK] = &gcc_usb4_1_sb_if_clk.clkr, 7147 6541 [GCC_USB4_1_SB_IF_CLK_SRC] = &gcc_usb4_1_sb_if_clk_src.clkr, ··· 7160 6540 [GCC_USB4_2_DP1_CLK] = &gcc_usb4_2_dp1_clk.clkr, 7161 6541 [GCC_USB4_2_MASTER_CLK] = &gcc_usb4_2_master_clk.clkr, 7162 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, 7163 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, 7164 6547 [GCC_USB4_2_PHY_PCIE_PIPE_CLK] = &gcc_usb4_2_phy_pcie_pipe_clk.clkr, 7165 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, 7166 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, 7167 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, 7168 6555 [GCC_USB4_2_PHY_USB_PIPE_CLK] = &gcc_usb4_2_phy_usb_pipe_clk.clkr, 7169 6556 [GCC_USB4_2_SB_IF_CLK] = &gcc_usb4_2_sb_if_clk.clkr, 7170 6557 [GCC_USB4_2_SB_IF_CLK_SRC] = &gcc_usb4_2_sb_if_clk_src.clkr, ··· 7287 6660 [GCC_USB3_UNIPHY_MP0_BCR] = { 0x19000 }, 7288 6661 [GCC_USB3_UNIPHY_MP1_BCR] = { 0x54000 }, 7289 6662 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x50004 }, 6663 + [GCC_USB4PHY_PHY_PRIM_BCR] = { 0x5000c }, 7290 6664 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x2a004 }, 6665 + [GCC_USB4PHY_PHY_SEC_BCR] = { 0x2a00c }, 7291 6666 [GCC_USB3PHY_PHY_TERT_BCR] = { 0xa3004 }, 6667 + [GCC_USB4PHY_PHY_TERT_BCR] = { 0xa300c }, 7292 6668 [GCC_USB3UNIPHY_PHY_MP0_BCR] = { 0x19004 }, 7293 6669 [GCC_USB3UNIPHY_PHY_MP1_BCR] = { 0x54004 }, 7294 6670 [GCC_USB4_0_BCR] = { 0x9f000 }, 7295 6671 [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 }, 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 }, 7298 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 }, 7299 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 }, 7300 6709 [GCC_USB_0_PHY_BCR] = { 0x50020 }, 7301 6710 [GCC_USB_1_PHY_BCR] = { 0x2a020 }, 7302 6711 [GCC_USB_2_PHY_BCR] = { 0xa3020 },
+1
drivers/clk/qcom/mmcc-sdm660.c
··· 2781 2781 }; 2782 2782 2783 2783 static const struct qcom_reset_map mmcc_660_resets[] = { 2784 + [MDSS_BCR] = { 0x2300 }, 2784 2785 [CAMSS_MICRO_BCR] = { 0x3490 }, 2785 2786 }; 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 28 }; 29 29 30 30 static struct clk_branch tcsr_edp_clkref_en = { 31 - .halt_reg = 0x1c, 31 + .halt_reg = 0x60, 32 32 .halt_check = BRANCH_HALT_DELAY, 33 33 .clkr = { 34 - .enable_reg = 0x1c, 34 + .enable_reg = 0x60, 35 35 .enable_mask = BIT(0), 36 36 .hw.init = &(const struct clk_init_data) { 37 37 .name = "tcsr_edp_clkref_en", ··· 45 45 }; 46 46 47 47 static struct clk_branch tcsr_pcie_1_clkref_en = { 48 - .halt_reg = 0x4, 48 + .halt_reg = 0x48, 49 49 .halt_check = BRANCH_HALT_DELAY, 50 50 .clkr = { 51 - .enable_reg = 0x4, 51 + .enable_reg = 0x48, 52 52 .enable_mask = BIT(0), 53 53 .hw.init = &(const struct clk_init_data) { 54 54 .name = "tcsr_pcie_1_clkref_en", ··· 62 62 }; 63 63 64 64 static struct clk_branch tcsr_pcie_2_clkref_en = { 65 - .halt_reg = 0x8, 65 + .halt_reg = 0x4c, 66 66 .halt_check = BRANCH_HALT_DELAY, 67 67 .clkr = { 68 - .enable_reg = 0x8, 68 + .enable_reg = 0x4c, 69 69 .enable_mask = BIT(0), 70 70 .hw.init = &(const struct clk_init_data) { 71 71 .name = "tcsr_pcie_2_clkref_en", ··· 79 79 }; 80 80 81 81 static struct clk_branch tcsr_pcie_3_clkref_en = { 82 - .halt_reg = 0x10, 82 + .halt_reg = 0x54, 83 83 .halt_check = BRANCH_HALT_DELAY, 84 84 .clkr = { 85 - .enable_reg = 0x10, 85 + .enable_reg = 0x54, 86 86 .enable_mask = BIT(0), 87 87 .hw.init = &(const struct clk_init_data) { 88 88 .name = "tcsr_pcie_3_clkref_en", ··· 96 96 }; 97 97 98 98 static struct clk_branch tcsr_pcie_4_clkref_en = { 99 - .halt_reg = 0x14, 99 + .halt_reg = 0x58, 100 100 .halt_check = BRANCH_HALT_DELAY, 101 101 .clkr = { 102 - .enable_reg = 0x14, 102 + .enable_reg = 0x58, 103 103 .enable_mask = BIT(0), 104 104 .hw.init = &(const struct clk_init_data) { 105 105 .name = "tcsr_pcie_4_clkref_en", ··· 113 113 }; 114 114 115 115 static struct clk_branch tcsr_usb2_1_clkref_en = { 116 - .halt_reg = 0x28, 116 + .halt_reg = 0x6c, 117 117 .halt_check = BRANCH_HALT_DELAY, 118 118 .clkr = { 119 - .enable_reg = 0x28, 119 + .enable_reg = 0x6c, 120 120 .enable_mask = BIT(0), 121 121 .hw.init = &(const struct clk_init_data) { 122 122 .name = "tcsr_usb2_1_clkref_en", ··· 130 130 }; 131 131 132 132 static struct clk_branch tcsr_usb2_2_clkref_en = { 133 - .halt_reg = 0x2c, 133 + .halt_reg = 0x70, 134 134 .halt_check = BRANCH_HALT_DELAY, 135 135 .clkr = { 136 - .enable_reg = 0x2c, 136 + .enable_reg = 0x70, 137 137 .enable_mask = BIT(0), 138 138 .hw.init = &(const struct clk_init_data) { 139 139 .name = "tcsr_usb2_2_clkref_en", ··· 147 147 }; 148 148 149 149 static struct clk_branch tcsr_usb2_3_clkref_en = { 150 - .halt_reg = 0x30, 150 + .halt_reg = 0x74, 151 151 .halt_check = BRANCH_HALT_DELAY, 152 152 .clkr = { 153 - .enable_reg = 0x30, 153 + .enable_reg = 0x74, 154 154 .enable_mask = BIT(0), 155 155 .hw.init = &(const struct clk_init_data) { 156 156 .name = "tcsr_usb2_3_clkref_en", ··· 164 164 }; 165 165 166 166 static struct clk_branch tcsr_usb2_4_clkref_en = { 167 - .halt_reg = 0x44, 167 + .halt_reg = 0x88, 168 168 .halt_check = BRANCH_HALT_DELAY, 169 169 .clkr = { 170 - .enable_reg = 0x44, 170 + .enable_reg = 0x88, 171 171 .enable_mask = BIT(0), 172 172 .hw.init = &(const struct clk_init_data) { 173 173 .name = "tcsr_usb2_4_clkref_en", ··· 181 181 }; 182 182 183 183 static struct clk_branch tcsr_usb3_0_clkref_en = { 184 - .halt_reg = 0x20, 184 + .halt_reg = 0x64, 185 185 .halt_check = BRANCH_HALT_DELAY, 186 186 .clkr = { 187 - .enable_reg = 0x20, 187 + .enable_reg = 0x64, 188 188 .enable_mask = BIT(0), 189 189 .hw.init = &(const struct clk_init_data) { 190 190 .name = "tcsr_usb3_0_clkref_en", ··· 198 198 }; 199 199 200 200 static struct clk_branch tcsr_usb3_1_clkref_en = { 201 - .halt_reg = 0x24, 201 + .halt_reg = 0x68, 202 202 .halt_check = BRANCH_HALT_DELAY, 203 203 .clkr = { 204 - .enable_reg = 0x24, 204 + .enable_reg = 0x68, 205 205 .enable_mask = BIT(0), 206 206 .hw.init = &(const struct clk_init_data) { 207 207 .name = "tcsr_usb3_1_clkref_en", ··· 215 215 }; 216 216 217 217 static struct clk_branch tcsr_usb4_1_clkref_en = { 218 - .halt_reg = 0x0, 218 + .halt_reg = 0x44, 219 219 .halt_check = BRANCH_HALT_DELAY, 220 220 .clkr = { 221 - .enable_reg = 0x0, 221 + .enable_reg = 0x44, 222 222 .enable_mask = BIT(0), 223 223 .hw.init = &(const struct clk_init_data) { 224 224 .name = "tcsr_usb4_1_clkref_en", ··· 232 232 }; 233 233 234 234 static struct clk_branch tcsr_usb4_2_clkref_en = { 235 - .halt_reg = 0x18, 235 + .halt_reg = 0x5c, 236 236 .halt_check = BRANCH_HALT_DELAY, 237 237 .clkr = { 238 - .enable_reg = 0x18, 238 + .enable_reg = 0x5c, 239 239 .enable_mask = BIT(0), 240 240 .hw.init = &(const struct clk_init_data) { 241 241 .name = "tcsr_usb4_2_clkref_en", ··· 268 268 .reg_bits = 32, 269 269 .reg_stride = 4, 270 270 .val_bits = 32, 271 - .max_register = 0x44, 271 + .max_register = 0x94, 272 272 .fast_io = true, 273 273 }; 274 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 26 27 27 enum clk_ids { 28 28 /* Core Clock Outputs exported to DT */ 29 - LAST_DT_CORE_CLK = R8A779A0_CLK_OSC, 29 + LAST_DT_CORE_CLK = R8A779A0_CLK_ZG, 30 30 31 31 /* External Input Clocks */ 32 32 CLK_EXTAL, ··· 39 39 CLK_PLL21, 40 40 CLK_PLL30, 41 41 CLK_PLL31, 42 + CLK_PLL4, 42 43 CLK_PLL5, 43 44 CLK_PLL1_DIV2, 44 45 CLK_PLL20_DIV2, ··· 66 65 #define CPG_PLL21CR 0x0838 /* PLL21 Control Register */ 67 66 #define CPG_PLL30CR 0x083c /* PLL30 Control Register */ 68 67 #define CPG_PLL31CR 0x0840 /* PLL31 Control Register */ 68 + #define CPG_PLL4CR 0x0844 /* PLL4 Control Register */ 69 69 70 70 static const struct cpg_core_clk r8a779a0_core_clks[] __initconst = { 71 71 /* External Clock Inputs */ ··· 81 79 DEF_PLL(".pll21", CLK_PLL21, CPG_PLL21CR), 82 80 DEF_PLL(".pll30", CLK_PLL30, CPG_PLL30CR), 83 81 DEF_PLL(".pll31", CLK_PLL31, CPG_PLL31CR), 82 + DEF_PLL(".pll4", CLK_PLL4, CPG_PLL4CR), 84 83 85 84 DEF_FIXED(".pll1_div2", CLK_PLL1_DIV2, CLK_PLL1, 2, 1), 86 85 DEF_FIXED(".pll20_div2", CLK_PLL20_DIV2, CLK_PLL20, 2, 1), ··· 101 98 /* Core Clock Outputs */ 102 99 DEF_GEN4_Z("z0", R8A779A0_CLK_Z0, CLK_TYPE_GEN4_Z, CLK_PLL20, 2, 0), 103 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), 104 102 DEF_FIXED("zx", R8A779A0_CLK_ZX, CLK_PLL20_DIV2, 2, 1), 105 103 DEF_FIXED("s1d1", R8A779A0_CLK_S1D1, CLK_S1, 1, 1), 106 104 DEF_FIXED("s1d2", R8A779A0_CLK_S1D2, CLK_S1, 2, 1), ··· 142 138 }; 143 139 144 140 static const struct mssr_mod_clk r8a779a0_mod_clks[] __initconst = { 141 + DEF_MOD("3dge", 0, R8A779A0_CLK_ZG), 145 142 DEF_MOD("isp0", 16, R8A779A0_CLK_S1D1), 146 143 DEF_MOD("isp1", 17, R8A779A0_CLK_S1D1), 147 144 DEF_MOD("isp2", 18, R8A779A0_CLK_S1D1),
+3 -3
drivers/clk/renesas/r9a06g032-clocks.c
··· 1333 1333 if (IS_ERR(mclk)) 1334 1334 return PTR_ERR(mclk); 1335 1335 1336 - clocks->reg = of_iomap(np, 0); 1337 - if (WARN_ON(!clocks->reg)) 1338 - return -ENOMEM; 1336 + clocks->reg = devm_of_iomap(dev, np, 0, NULL); 1337 + if (IS_ERR(clocks->reg)) 1338 + return PTR_ERR(clocks->reg); 1339 1339 1340 1340 r9a06g032_init_h2mode(clocks); 1341 1341
+143 -1
drivers/clk/renesas/r9a09g047-cpg.c
··· 16 16 17 17 enum clk_ids { 18 18 /* Core Clock Outputs exported to DT */ 19 - LAST_DT_CORE_CLK = R9A09G047_USB3_0_CLKCORE, 19 + LAST_DT_CORE_CLK = R9A09G047_USB2_0_CLK_CORE1, 20 20 21 21 /* External Input Clocks */ 22 22 CLK_AUDIO_EXTAL, ··· 44 44 CLK_PLLCLN_DIV8, 45 45 CLK_PLLCLN_DIV16, 46 46 CLK_PLLCLN_DIV20, 47 + CLK_PLLCLN_DIV64, 48 + CLK_PLLCLN_DIV256, 49 + CLK_PLLCLN_DIV1024, 47 50 CLK_PLLDTY_ACPU, 48 51 CLK_PLLDTY_ACPU_DIV2, 49 52 CLK_PLLDTY_ACPU_DIV4, ··· 145 142 DEF_FIXED(".pllcln_div8", CLK_PLLCLN_DIV8, CLK_PLLCLN, 1, 8), 146 143 DEF_FIXED(".pllcln_div16", CLK_PLLCLN_DIV16, CLK_PLLCLN, 1, 16), 147 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 148 149 149 DEF_DDIV(".plldty_acpu", CLK_PLLDTY_ACPU, CLK_PLLDTY, CDDIV0_DIVCTL2, dtable_2_64), 150 150 DEF_FIXED(".plldty_acpu_div2", CLK_PLLDTY_ACPU_DIV2, CLK_PLLDTY_ACPU, 1, 2), ··· 183 177 CDDIV1_DIVCTL3, dtable_1_8), 184 178 DEF_FIXED("iotop_0_shclk", R9A09G047_IOTOP_0_SHCLK, CLK_PLLCM33_DIV16, 1, 1), 185 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), 186 182 DEF_FIXED("gbeth_0_clk_ptp_ref_i", R9A09G047_GBETH_0_CLK_PTP_REF_I, 187 183 CLK_PLLETH_DIV_125_FIX, 1, 1), 188 184 DEF_FIXED("gbeth_1_clk_ptp_ref_i", R9A09G047_GBETH_1_CLK_PTP_REF_I, ··· 224 216 BUS_MSTOP(5, BIT(13))), 225 217 DEF_MOD("wdt_3_clk_loco", CLK_QEXTAL, 5, 2, 2, 18, 226 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))), 227 319 DEF_MOD("scif_0_clk_pck", CLK_PLLCM33_DIV16, 8, 15, 4, 15, 228 320 BUS_MSTOP(3, BIT(14))), 229 321 DEF_MOD("i3c_0_pclkrw", CLK_PLLCLN_DIV16, 9, 0, 4, 16, ··· 390 282 BUS_MSTOP(7, BIT(12))), 391 283 DEF_MOD("usb3_0_pclk_usbtst", CLK_PLLDTY_ACPU_DIV4, 11, 0, 5, 16, 392 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))), 393 295 DEF_MOD_MUX_EXTERNAL("gbeth_0_clk_tx_i", CLK_SMUX2_GBE0_TXCLK, 11, 8, 5, 24, 394 296 BUS_MSTOP(8, BIT(5)), 1), 395 297 DEF_MOD_MUX_EXTERNAL("gbeth_0_clk_rx_i", CLK_SMUX2_GBE0_RXCLK, 11, 9, 5, 25, ··· 457 339 DEF_RST(7, 6, 3, 7), /* WDT_1_RESET */ 458 340 DEF_RST(7, 7, 3, 8), /* WDT_2_RESET */ 459 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 */ 460 362 DEF_RST(9, 5, 4, 6), /* SCIF_0_RST_SYSTEM_N */ 461 363 DEF_RST(9, 6, 4, 7), /* I3C_0_PRESETN */ 462 364 DEF_RST(9, 7, 4, 8), /* I3C_0_TRESETN */ ··· 497 359 DEF_RST(10, 8, 4, 25), /* SDHI_1_IXRST */ 498 360 DEF_RST(10, 9, 4, 26), /* SDHI_2_IXRST */ 499 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 */ 500 366 DEF_RST(11, 0, 5, 1), /* GBETH_0_ARESETN_I */ 501 367 DEF_RST(11, 1, 5, 2), /* GBETH_1_ARESETN_I */ 502 368 DEF_RST(12, 5, 5, 22), /* CRU_0_PRESETN */
+117 -1
drivers/clk/renesas/r9a09g056-cpg.c
··· 6 6 */ 7 7 8 8 #include <linux/clk-provider.h> 9 + #include <linux/clk/renesas.h> 9 10 #include <linux/device.h> 10 11 #include <linux/init.h> 11 12 #include <linux/kernel.h> ··· 17 16 18 17 enum clk_ids { 19 18 /* Core Clock Outputs exported to DT */ 20 - LAST_DT_CORE_CLK = R9A09G056_SPI_CLK_SPI, 19 + LAST_DT_CORE_CLK = R9A09G056_USB3_0_CLKCORE, 21 20 22 21 /* External Input Clocks */ 23 22 CLK_AUDIO_EXTAL, ··· 29 28 CLK_PLLCLN, 30 29 CLK_PLLDTY, 31 30 CLK_PLLCA55, 31 + CLK_PLLVDO, 32 32 CLK_PLLETH, 33 + CLK_PLLDSI, 33 34 CLK_PLLGPU, 34 35 35 36 /* Internal Core Clocks */ ··· 50 47 CLK_PLLDTY_ACPU_DIV2, 51 48 CLK_PLLDTY_ACPU_DIV4, 52 49 CLK_PLLDTY_DIV8, 50 + CLK_PLLDTY_DIV16, 51 + CLK_PLLVDO_CRU0, 52 + CLK_PLLVDO_CRU1, 53 + CLK_PLLVDO_ISP, 53 54 CLK_PLLETH_DIV_250_FIX, 54 55 CLK_PLLETH_DIV_125_FIX, 55 56 CLK_CSDIV_PLLETH_GBE0, ··· 62 55 CLK_SMUX2_GBE0_RXCLK, 63 56 CLK_SMUX2_GBE1_TXCLK, 64 57 CLK_SMUX2_GBE1_RXCLK, 58 + CLK_CDIV4_PLLETH_LPCLK, 59 + CLK_PLLETH_LPCLK_GEAR, 60 + CLK_PLLDSI_GEAR, 65 61 CLK_PLLGPU_GEAR, 66 62 67 63 /* Module Clocks */ ··· 79 69 {0, 0}, 80 70 }; 81 71 72 + static const struct clk_div_table dtable_2_4[] = { 73 + {0, 2}, 74 + {1, 4}, 75 + {0, 0}, 76 + }; 77 + 82 78 static const struct clk_div_table dtable_2_16[] = { 83 79 {0, 2}, 84 80 {1, 4}, 85 81 {2, 8}, 86 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}, 87 103 {0, 0}, 88 104 }; 89 105 ··· 128 92 {2, 100}, 129 93 {0, 0}, 130 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) 131 106 132 107 /* Mux clock tables */ 133 108 static const char * const smux2_gbe0_rxclk[] = { ".plleth_gbe0", "et0_rxclk" }; ··· 159 112 DEF_FIXED(".pllcln", CLK_PLLCLN, CLK_QEXTAL, 200, 3), 160 113 DEF_FIXED(".plldty", CLK_PLLDTY, CLK_QEXTAL, 200, 3), 161 114 DEF_PLL(".pllca55", CLK_PLLCA55, CLK_QEXTAL, PLLCA55), 115 + DEF_FIXED(".pllvdo", CLK_PLLVDO, CLK_QEXTAL, 105, 2), 162 116 DEF_FIXED(".plleth", CLK_PLLETH, CLK_QEXTAL, 125, 3), 117 + DEF_PLLDSI(".plldsi", CLK_PLLDSI, CLK_QEXTAL, PLLDSI), 163 118 DEF_PLL(".pllgpu", CLK_PLLGPU, CLK_QEXTAL, PLLGPU), 164 119 165 120 /* Internal Core Clocks */ ··· 183 134 DEF_FIXED(".plldty_acpu_div2", CLK_PLLDTY_ACPU_DIV2, CLK_PLLDTY_ACPU, 1, 2), 184 135 DEF_FIXED(".plldty_acpu_div4", CLK_PLLDTY_ACPU_DIV4, CLK_PLLDTY_ACPU, 1, 4), 185 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), 186 142 187 143 DEF_FIXED(".plleth_250_fix", CLK_PLLETH_DIV_250_FIX, CLK_PLLETH, 1, 4), 188 144 DEF_FIXED(".plleth_125_fix", CLK_PLLETH_DIV_125_FIX, CLK_PLLETH_DIV_250_FIX, 1, 2), ··· 199 145 DEF_SMUX(".smux2_gbe0_rxclk", CLK_SMUX2_GBE0_RXCLK, SSEL0_SELCTL3, smux2_gbe0_rxclk), 200 146 DEF_SMUX(".smux2_gbe1_txclk", CLK_SMUX2_GBE1_TXCLK, SSEL1_SELCTL0, smux2_gbe1_txclk), 201 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), 202 154 203 155 DEF_DDIV(".pllgpu_gear", CLK_PLLGPU_GEAR, CLK_PLLGPU, CDDIV3_DIVCTL1, dtable_2_64), 204 156 ··· 226 166 CLK_PLLETH_DIV_125_FIX, 1, 1), 227 167 DEF_FIXED_MOD_STATUS("spi_clk_spi", R9A09G056_SPI_CLK_SPI, CLK_PLLCM33_XSPI, 1, 2, 228 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), 229 171 }; 230 172 231 173 static const struct rzv2h_mod_clk r9a09g056_mod_clks[] __initconst = { ··· 321 259 BUS_MSTOP(8, BIT(4))), 322 260 DEF_MOD("sdhi_2_aclk", CLK_PLLDTY_ACPU_DIV4, 10, 14, 5, 14, 323 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))), 324 266 DEF_MOD("usb2_0_u2h0_hclk", CLK_PLLDTY_DIV8, 11, 3, 5, 19, 325 267 BUS_MSTOP(7, BIT(7))), 326 268 DEF_MOD("usb2_0_u2p_exr_cpuclk", CLK_PLLDTY_ACPU_DIV4, 11, 5, 5, 21, ··· 355 289 BUS_MSTOP(8, BIT(6))), 356 290 DEF_MOD("gbeth_1_aclk_i", CLK_PLLDTY_DIV8, 12, 3, 6, 3, 357 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))), 358 328 DEF_MOD("gpu_0_clk", CLK_PLLGPU_GEAR, 15, 0, 7, 16, 359 329 BUS_MSTOP(3, BIT(4))), 360 330 DEF_MOD("gpu_0_axi_clk", CLK_PLLDTY_ACPU_DIV2, 15, 1, 7, 17, ··· 432 330 DEF_RST(10, 7, 4, 24), /* SDHI_0_IXRST */ 433 331 DEF_RST(10, 8, 4, 25), /* SDHI_1_IXRST */ 434 332 DEF_RST(10, 9, 4, 26), /* SDHI_2_IXRST */ 333 + DEF_RST(10, 10, 4, 27), /* USB3_0_ARESETN */ 435 334 DEF_RST(10, 12, 4, 29), /* USB2_0_U2H0_HRESETN */ 436 335 DEF_RST(10, 14, 4, 31), /* USB2_0_U2P_EXL_SYSRST */ 437 336 DEF_RST(10, 15, 5, 0), /* USB2_0_PRESETN */ 438 337 DEF_RST(11, 0, 5, 1), /* GBETH_0_ARESETN_I */ 439 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 */ 440 352 DEF_RST(13, 13, 6, 14), /* GPU_0_RESETN */ 441 353 DEF_RST(13, 14, 6, 15), /* GPU_0_AXI_RESETN */ 442 354 DEF_RST(13, 15, 6, 16), /* GPU_0_ACE_RESETN */
+101 -1
drivers/clk/renesas/r9a09g057-cpg.c
··· 6 6 */ 7 7 8 8 #include <linux/clk-provider.h> 9 + #include <linux/clk/renesas.h> 9 10 #include <linux/device.h> 10 11 #include <linux/init.h> 11 12 #include <linux/kernel.h> ··· 17 16 18 17 enum clk_ids { 19 18 /* Core Clock Outputs exported to DT */ 20 - LAST_DT_CORE_CLK = R9A09G057_SPI_CLK_SPI, 19 + LAST_DT_CORE_CLK = R9A09G057_USB3_1_CLKCORE, 21 20 22 21 /* External Input Clocks */ 23 22 CLK_AUDIO_EXTAL, ··· 31 30 CLK_PLLCA55, 32 31 CLK_PLLVDO, 33 32 CLK_PLLETH, 33 + CLK_PLLDSI, 34 34 CLK_PLLGPU, 35 35 36 36 /* Internal Core Clocks */ ··· 57 55 CLK_PLLVDO_CRU1, 58 56 CLK_PLLVDO_CRU2, 59 57 CLK_PLLVDO_CRU3, 58 + CLK_PLLVDO_ISP, 60 59 CLK_PLLETH_DIV_250_FIX, 61 60 CLK_PLLETH_DIV_125_FIX, 62 61 CLK_CSDIV_PLLETH_GBE0, ··· 66 63 CLK_SMUX2_GBE0_RXCLK, 67 64 CLK_SMUX2_GBE1_TXCLK, 68 65 CLK_SMUX2_GBE1_RXCLK, 66 + CLK_CDIV4_PLLETH_LPCLK, 67 + CLK_PLLETH_LPCLK_GEAR, 68 + CLK_PLLDSI_GEAR, 69 69 CLK_PLLGPU_GEAR, 70 70 71 71 /* Module Clocks */ ··· 97 91 {0, 0}, 98 92 }; 99 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 + 100 114 static const struct clk_div_table dtable_2_64[] = { 101 115 {0, 2}, 102 116 {1, 4}, ··· 132 106 {2, 100}, 133 107 {0, 0}, 134 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) 135 120 136 121 /* Mux clock tables */ 137 122 static const char * const smux2_gbe0_rxclk[] = { ".plleth_gbe0", "et0_rxclk" }; ··· 165 128 DEF_PLL(".pllca55", CLK_PLLCA55, CLK_QEXTAL, PLLCA55), 166 129 DEF_FIXED(".pllvdo", CLK_PLLVDO, CLK_QEXTAL, 105, 2), 167 130 DEF_FIXED(".plleth", CLK_PLLETH, CLK_QEXTAL, 125, 3), 131 + DEF_PLLDSI(".plldsi", CLK_PLLDSI, CLK_QEXTAL, PLLDSI), 168 132 DEF_PLL(".pllgpu", CLK_PLLGPU, CLK_QEXTAL, PLLGPU), 169 133 170 134 /* Internal Core Clocks */ ··· 195 157 DEF_DDIV(".pllvdo_cru1", CLK_PLLVDO_CRU1, CLK_PLLVDO, CDDIV4_DIVCTL0, dtable_2_4), 196 158 DEF_DDIV(".pllvdo_cru2", CLK_PLLVDO_CRU2, CLK_PLLVDO, CDDIV4_DIVCTL1, dtable_2_4), 197 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), 198 161 199 162 DEF_FIXED(".plleth_250_fix", CLK_PLLETH_DIV_250_FIX, CLK_PLLETH, 1, 4), 200 163 DEF_FIXED(".plleth_125_fix", CLK_PLLETH_DIV_125_FIX, CLK_PLLETH_DIV_250_FIX, 1, 2), ··· 207 168 DEF_SMUX(".smux2_gbe0_rxclk", CLK_SMUX2_GBE0_RXCLK, SSEL0_SELCTL3, smux2_gbe0_rxclk), 208 169 DEF_SMUX(".smux2_gbe1_txclk", CLK_SMUX2_GBE1_TXCLK, SSEL1_SELCTL0, smux2_gbe1_txclk), 209 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), 210 177 211 178 DEF_DDIV(".pllgpu_gear", CLK_PLLGPU_GEAR, CLK_PLLGPU, CDDIV3_DIVCTL1, dtable_2_64), 212 179 ··· 235 190 CLK_PLLETH_DIV_125_FIX, 1, 1), 236 191 DEF_FIXED_MOD_STATUS("spi_clk_spi", R9A09G057_SPI_CLK_SPI, CLK_PLLCM33_XSPI, 1, 2, 237 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), 238 197 }; 239 198 240 199 static const struct rzv2h_mod_clk r9a09g057_mod_clks[] __initconst = { ··· 288 239 BUS_MSTOP(5, BIT(13))), 289 240 DEF_MOD("wdt_3_clk_loco", CLK_QEXTAL, 5, 2, 2, 18, 290 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))), 291 244 DEF_MOD("rspi_0_pclk", CLK_PLLCLN_DIV8, 5, 4, 2, 20, 292 245 BUS_MSTOP(11, BIT(0))), 293 246 DEF_MOD("rspi_0_pclk_sfr", CLK_PLLCLN_DIV8, 5, 5, 2, 21, ··· 364 313 BUS_MSTOP(8, BIT(4))), 365 314 DEF_MOD("sdhi_2_aclk", CLK_PLLDTY_ACPU_DIV4, 10, 14, 5, 14, 366 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))), 367 324 DEF_MOD("usb2_0_u2h0_hclk", CLK_PLLDTY_DIV8, 11, 3, 5, 19, 368 325 BUS_MSTOP(7, BIT(7))), 369 326 DEF_MOD("usb2_0_u2h1_hclk", CLK_PLLDTY_DIV8, 11, 4, 5, 20, ··· 430 371 BUS_MSTOP(9, BIT(7))), 431 372 DEF_MOD("cru_3_pclk", CLK_PLLDTY_DIV16, 13, 13, 6, 29, 432 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))), 433 398 DEF_MOD("gpu_0_clk", CLK_PLLGPU_GEAR, 15, 0, 7, 16, 434 399 BUS_MSTOP(3, BIT(4))), 435 400 DEF_MOD("gpu_0_axi_clk", CLK_PLLDTY_ACPU_DIV2, 15, 1, 7, 17, 436 401 BUS_MSTOP(3, BIT(4))), 437 402 DEF_MOD("gpu_0_ace_clk", CLK_PLLDTY_ACPU_DIV2, 15, 2, 7, 18, 438 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))), 439 408 }; 440 409 441 410 static const struct rzv2h_reset r9a09g057_resets[] __initconst = { ··· 488 401 DEF_RST(7, 6, 3, 7), /* WDT_1_RESET */ 489 402 DEF_RST(7, 7, 3, 8), /* WDT_2_RESET */ 490 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 */ 491 406 DEF_RST(7, 11, 3, 12), /* RSPI_0_PRESETN */ 492 407 DEF_RST(7, 12, 3, 13), /* RSPI_0_TRESETN */ 493 408 DEF_RST(7, 13, 3, 14), /* RSPI_1_PRESETN */ ··· 513 424 DEF_RST(10, 7, 4, 24), /* SDHI_0_IXRST */ 514 425 DEF_RST(10, 8, 4, 25), /* SDHI_1_IXRST */ 515 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 */ 516 429 DEF_RST(10, 12, 4, 29), /* USB2_0_U2H0_HRESETN */ 517 430 DEF_RST(10, 13, 4, 30), /* USB2_0_U2H1_HRESETN */ 518 431 DEF_RST(10, 14, 4, 31), /* USB2_0_U2P_EXL_SYSRST */ ··· 533 442 DEF_RST(12, 14, 5, 31), /* CRU_3_PRESETN */ 534 443 DEF_RST(12, 15, 6, 0), /* CRU_3_ARESETN */ 535 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 */ 536 452 DEF_RST(13, 13, 6, 14), /* GPU_0_RESETN */ 537 453 DEF_RST(13, 14, 6, 15), /* GPU_0_AXI_RESETN */ 538 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 */ 539 457 }; 540 458 541 459 const struct rzv2h_cpg_info r9a09g057_cpg_info __initconst = {
+41 -16
drivers/clk/renesas/r9a09g077-cpg.c
··· 46 46 #define DIVCA55C2 CONF_PACK(SCKCR2, 10, 1) 47 47 #define DIVCA55C3 CONF_PACK(SCKCR2, 11, 1) 48 48 #define DIVCA55S CONF_PACK(SCKCR2, 12, 1) 49 + #define DIVSPI3ASYNC CONF_PACK(SCKCR2, 16, 2) 49 50 #define DIVSCI5ASYNC CONF_PACK(SCKCR2, 18, 2) 50 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) 51 55 #define DIVSCI0ASYNC CONF_PACK(SCKCR3, 6, 2) 52 56 #define DIVSCI1ASYNC CONF_PACK(SCKCR3, 8, 2) 53 57 #define DIVSCI2ASYNC CONF_PACK(SCKCR3, 10, 2) ··· 59 55 #define DIVSCI4ASYNC CONF_PACK(SCKCR3, 14, 2) 60 56 61 57 #define SEL_PLL CONF_PACK(SCKCR, 22, 1) 62 - 63 58 64 59 enum rzt2h_clk_types { 65 60 CLK_TYPE_RZT2H_DIV = CLK_TYPE_CUSTOM, /* Clock with divider */ ··· 97 94 CLK_SCI3ASYNC, 98 95 CLK_SCI4ASYNC, 99 96 CLK_SCI5ASYNC, 97 + CLK_SPI0ASYNC, 98 + CLK_SPI1ASYNC, 99 + CLK_SPI2ASYNC, 100 + CLK_SPI3ASYNC, 100 101 101 102 /* Module Clocks */ 102 103 MOD_CLK_BASE, ··· 161 154 DEF_DIV(".sci5async", CLK_SCI5ASYNC, CLK_PLL4D1, DIVSCI5ASYNC, 162 155 dtable_24_25_30_32), 163 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 + 164 166 /* Core output clk */ 165 167 DEF_DIV("CA55C0", R9A09G077_CLK_CA55C0, CLK_SEL_CLK_PLL0, DIVCA55C0, 166 168 dtable_1_2), ··· 204 188 DEF_MOD("sci4fck", 12, CLK_SCI4ASYNC), 205 189 DEF_MOD("iic0", 100, R9A09G077_CLK_PCLKL), 206 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), 207 198 DEF_MOD("gmac0", 400, R9A09G077_CLK_PCLKM), 208 199 DEF_MOD("ethsw", 401, R9A09G077_CLK_PCLKM), 209 200 DEF_MOD("ethss", 403, R9A09G077_CLK_PCLKM), ··· 219 196 DEF_MOD("gmac2", 417, R9A09G077_CLK_PCLKAM), 220 197 DEF_MOD("sci5fck", 600, CLK_SCI5ASYNC), 221 198 DEF_MOD("iic2", 601, R9A09G077_CLK_PCLKL), 199 + DEF_MOD("spi3", 602, CLK_SPI3ASYNC), 222 200 DEF_MOD("sdhi0", 1212, R9A09G077_CLK_PCLKAM), 223 201 DEF_MOD("sdhi1", 1213, R9A09G077_CLK_PCLKAM), 224 202 }; ··· 240 216 parent_name = __clk_get_name(parent); 241 217 242 218 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); 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); 251 228 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); 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); 258 236 259 237 if (IS_ERR(clk_hw)) 260 238 return ERR_CAST(clk_hw); 261 239 262 240 return clk_hw->clk; 263 - 264 241 } 265 242 266 243 static struct clk * __init
+1 -1
drivers/clk/renesas/rcar-cpg-lib.c
··· 35 35 val |= set; 36 36 writel(val, reg); 37 37 spin_unlock_irqrestore(&cpg_lock, flags); 38 - }; 38 + } 39 39 40 40 static int cpg_simple_notifier_call(struct notifier_block *nb, 41 41 unsigned long action, void *data)
+7 -2
drivers/clk/renesas/rcar-gen4-cpg.c
··· 257 257 } 258 258 259 259 /* 260 - * Z0 Clock & Z1 Clock 260 + * Z0, Z1 and ZG Clock 261 261 */ 262 262 #define CPG_FRQCRB 0x00000804 263 263 #define CPG_FRQCRB_KICK BIT(31) ··· 386 386 387 387 if (offset < 32) { 388 388 zclk->reg = reg + CPG_FRQCRC0; 389 - } else { 389 + } else if (offset < 64) { 390 390 zclk->reg = reg + CPG_FRQCRC1; 391 391 offset -= 32; 392 + } else if (offset < 96) { 393 + zclk->reg = reg + CPG_FRQCRB; 394 + offset -= 64; 395 + } else { 396 + return ERR_PTR(-EINVAL); 392 397 } 393 398 zclk->kick_reg = reg + CPG_FRQCRB; 394 399 zclk->hw.init = &init;
+152 -35
drivers/clk/renesas/renesas-cpg-mssr.c
··· 40 40 #define WARN_DEBUG(x) do { } while (0) 41 41 #endif 42 42 43 + #define RZT2H_RESET_REG_READ_COUNT 7 44 + 43 45 /* 44 - * Module Standby and Software Reset register offets. 46 + * Module Standby and Software Reset register offsets. 45 47 * 46 48 * If the registers exist, these are valid for SH-Mobile, R-Mobile, 47 49 * R-Car Gen2, R-Car Gen3, and RZ/G1. ··· 137 135 0x2C20, 0x2C24, 0x2C28, 0x2C2C, 0x2C30, 0x2C34, 0x2C38, 0x2C3C, 138 136 0x2C40, 0x2C44, 0x2C48, 0x2C4C, 0x2C50, 0x2C54, 0x2C58, 0x2C5C, 139 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 */ 140 154 }; 141 155 142 156 /* ··· 308 290 309 291 spin_unlock_irqrestore(&priv->pub.rmw_lock, flags); 310 292 311 - if (!enable || priv->reg_layout == CLK_REG_LAYOUT_RZ_A || 312 - priv->reg_layout == CLK_REG_LAYOUT_RZ_T2H) 293 + if (!enable || priv->reg_layout == CLK_REG_LAYOUT_RZ_A) 313 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 + } 314 307 315 308 error = readl_poll_timeout_atomic(priv->pub.base0 + priv->status_regs[reg], 316 309 value, !(value & bitmask), 0, 10); ··· 480 451 break; 481 452 } 482 453 483 - if (IS_ERR_OR_NULL(clk)) 454 + if (IS_ERR(clk)) 484 455 goto fail; 485 456 486 457 dev_dbg(dev, "Core clock %pC at %lu Hz\n", clk, clk_get_rate(clk)); ··· 705 676 706 677 #define rcdev_to_priv(x) container_of(x, struct cpg_mssr_priv, rcdev) 707 678 708 - static int cpg_mssr_reset(struct reset_controller_dev *rcdev, 709 - unsigned long id) 679 + static int cpg_mssr_reset_operate(struct reset_controller_dev *rcdev, 680 + const char *func, bool set, unsigned long id) 710 681 { 711 682 struct cpg_mssr_priv *priv = rcdev_to_priv(rcdev); 712 683 unsigned int reg = id / 32; 713 684 unsigned int bit = id % 32; 685 + const u16 off = set ? priv->reset_regs[reg] : priv->reset_clear_regs[reg]; 714 686 u32 bitmask = BIT(bit); 715 687 716 - dev_dbg(priv->dev, "reset %u%02u\n", reg, bit); 688 + if (func) 689 + dev_dbg(priv->dev, "%s %u%02u\n", func, reg, bit); 717 690 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]); 691 + writel(bitmask, priv->pub.base0 + off); 692 + readl(priv->pub.base0 + off); 693 + barrier_data(priv->pub.base0 + off); 726 694 727 695 return 0; 728 696 } 729 697 730 - static int cpg_mssr_assert(struct reset_controller_dev *rcdev, unsigned long id) 698 + static int cpg_mssr_reset(struct reset_controller_dev *rcdev, 699 + unsigned long id) 731 700 { 732 701 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 702 737 - dev_dbg(priv->dev, "assert %u%02u\n", reg, bit); 703 + /* Reset module */ 704 + cpg_mssr_reset_operate(rcdev, "reset", true, id); 738 705 739 - writel(bitmask, priv->pub.base0 + priv->reset_regs[reg]); 740 - return 0; 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); 741 723 } 742 724 743 725 static int cpg_mssr_deassert(struct reset_controller_dev *rcdev, 744 726 unsigned long id) 745 727 { 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; 728 + return cpg_mssr_reset_operate(rcdev, "deassert", false, id); 755 729 } 756 730 757 731 static int cpg_mssr_status(struct reset_controller_dev *rcdev, ··· 768 736 return !!(readl(priv->pub.base0 + priv->reset_regs[reg]) & bitmask); 769 737 } 770 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 + 771 805 static const struct reset_control_ops cpg_mssr_reset_ops = { 772 806 .reset = cpg_mssr_reset, 773 807 .assert = cpg_mssr_assert, 774 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, 775 816 .status = cpg_mssr_status, 776 817 }; 777 818 ··· 865 760 866 761 static int cpg_mssr_reset_controller_register(struct cpg_mssr_priv *priv) 867 762 { 868 - priv->rcdev.ops = &cpg_mssr_reset_ops; 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 + 869 776 priv->rcdev.of_node = priv->dev->of_node; 870 777 priv->rcdev.of_reset_n_cells = 1; 871 778 priv->rcdev.of_xlate = cpg_mssr_reset_xlate; 872 - priv->rcdev.nr_resets = priv->num_mod_clks; 779 + 873 780 return devm_reset_controller_register(priv->dev, &priv->rcdev); 874 781 } 875 782 ··· 1286 1169 priv->control_regs = stbcr; 1287 1170 } else if (priv->reg_layout == CLK_REG_LAYOUT_RZ_T2H) { 1288 1171 priv->control_regs = mstpcr_for_rzt2h; 1172 + priv->reset_regs = mrcr_for_rzt2h; 1289 1173 } else if (priv->reg_layout == CLK_REG_LAYOUT_RCAR_GEN4) { 1290 1174 priv->status_regs = mstpsr_for_gen4; 1291 1175 priv->control_regs = mstpcr_for_gen4; ··· 1383 1265 goto reserve_exit; 1384 1266 1385 1267 /* 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) 1268 + if (priv->reg_layout == CLK_REG_LAYOUT_RZ_A) 1388 1269 goto reserve_exit; 1389 1270 1390 1271 error = cpg_mssr_reset_controller_register(priv);
+1 -1
drivers/clk/renesas/rzg2l-cpg.c
··· 1177 1177 goto fail; 1178 1178 } 1179 1179 1180 - if (IS_ERR_OR_NULL(clk)) 1180 + if (IS_ERR(clk)) 1181 1181 goto fail; 1182 1182 1183 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 14 #include <linux/bitfield.h> 15 15 #include <linux/clk.h> 16 16 #include <linux/clk-provider.h> 17 + #include <linux/clk/renesas.h> 17 18 #include <linux/delay.h> 18 19 #include <linux/init.h> 19 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> 20 25 #include <linux/mod_devicetable.h> 21 26 #include <linux/module.h> 22 27 #include <linux/of.h> ··· 31 26 #include <linux/refcount.h> 32 27 #include <linux/reset-controller.h> 33 28 #include <linux/string_choices.h> 29 + #include <linux/units.h> 34 30 35 31 #include <dt-bindings/clock/renesas-cpg-mssr.h> 36 32 ··· 53 47 54 48 #define CPG_PLL_STBY(x) ((x)) 55 49 #define CPG_PLL_STBY_RESETB BIT(0) 50 + #define CPG_PLL_STBY_SSC_EN BIT(2) 56 51 #define CPG_PLL_STBY_RESETB_WEN BIT(16) 52 + #define CPG_PLL_STBY_SSC_EN_WEN BIT(18) 57 53 #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)) 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) 61 57 #define CPG_PLL_CLK2(x) ((x) + 0x008) 62 - #define CPG_PLL_CLK2_SDIV(x) FIELD_GET(GENMASK(2, 0), (x)) 58 + #define CPG_PLL_CLK2_SDIV GENMASK(2, 0) 63 59 #define CPG_PLL_MON(x) ((x) + 0x010) 64 60 #define CPG_PLL_MON_RESETB BIT(0) 65 61 #define CPG_PLL_MON_LOCK BIT(4) ··· 72 64 ((base) + ((((index) * (16))) + (bit))) 73 65 74 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 + }; 75 83 76 84 /** 77 85 * struct rzv2h_cpg_priv - Clock Pulse Generator Private Data ··· 104 80 * @ff_mod_status_ops: Fixed Factor Module Status Clock operations 105 81 * @mstop_count: Array of mstop values 106 82 * @rcdev: Reset controller entity 83 + * @pll_dsi_info: Array of PLL DSI information, holds the limits and parameters 107 84 */ 108 85 struct rzv2h_cpg_priv { 109 86 struct device *dev; ··· 123 98 atomic_t *mstop_count; 124 99 125 100 struct reset_controller_dev rcdev; 101 + 102 + struct rzv2h_pll_dsi_info pll_dsi_info[MAX_CPG_DSI_PLL]; 126 103 }; 127 104 128 105 #define rcdev_to_priv(x) container_of(x, struct rzv2h_cpg_priv, rcdev) ··· 195 168 #define to_rzv2h_ff_mod_status_clk(_hw) \ 196 169 container_of(_hw, struct rzv2h_ff_mod_status_clk, fix.hw) 197 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 + 198 625 static int rzv2h_cpg_pll_clk_is_enabled(struct clk_hw *hw) 199 626 { 200 627 struct pll_clk *pll_clk = to_pll(hw); ··· 712 231 clk1 = readl(priv->base + CPG_PLL_CLK1(pll.offset)); 713 232 clk2 = readl(priv->base + CPG_PLL_CLK2(pll.offset)); 714 233 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)); 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)); 717 237 718 - return DIV_ROUND_CLOSEST_ULL(rate, CPG_PLL_CLK1_PDIV(clk1)); 238 + return DIV_ROUND_CLOSEST_ULL(rate, FIELD_GET(CPG_PLL_CLK1_PDIV, clk1)); 719 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 + }; 720 246 721 247 static const struct clk_ops rzv2h_cpg_pll_ops = { 722 248 .is_enabled = rzv2h_cpg_pll_clk_is_enabled, ··· 750 262 pll_clk = devm_kzalloc(dev, sizeof(*pll_clk), GFP_KERNEL); 751 263 if (!pll_clk) 752 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; 753 269 754 270 parent_name = __clk_get_name(parent); 755 271 init.name = core->name; ··· 1079 587 case CLK_TYPE_SMUX: 1080 588 clk = rzv2h_cpg_mux_clk_register(core, priv); 1081 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; 1082 596 default: 1083 597 goto fail; 1084 598 } 1085 599 1086 - if (IS_ERR_OR_NULL(clk)) 600 + if (IS_ERR(clk)) 1087 601 goto fail; 1088 602 1089 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 16 * 17 17 * @offset: STBY register offset 18 18 * @has_clkn: Flag to indicate if CLK1/2 are accessible or not 19 + * @instance: PLL instance number 19 20 */ 20 21 struct pll { 21 22 unsigned int offset:9; 22 23 unsigned int has_clkn:1; 24 + unsigned int instance:2; 25 + const struct rzv2h_pll_limits *limits; 23 26 }; 24 27 25 - #define PLL_PACK(_offset, _has_clkn) \ 28 + #define PLL_PACK_LIMITS(_offset, _has_clkn, _instance, _limits) \ 26 29 ((struct pll){ \ 27 30 .offset = _offset, \ 28 - .has_clkn = _has_clkn \ 31 + .has_clkn = _has_clkn, \ 32 + .instance = _instance, \ 33 + .limits = _limits \ 29 34 }) 30 35 31 - #define PLLCA55 PLL_PACK(0x60, 1) 32 - #define PLLGPU PLL_PACK(0x120, 1) 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) 33 41 34 42 /** 35 43 * struct ddiv - Structure for dynamic switching divider ··· 123 115 #define CPG_SSEL1 (0x304) 124 116 #define CPG_CDDIV0 (0x400) 125 117 #define CPG_CDDIV1 (0x404) 118 + #define CPG_CDDIV2 (0x408) 126 119 #define CPG_CDDIV3 (0x40C) 127 120 #define CPG_CDDIV4 (0x410) 128 121 #define CPG_CSDIV0 (0x500) 122 + #define CPG_CSDIV1 (0x504) 129 123 130 124 #define CDDIV0_DIVCTL1 DDIV_PACK(CPG_CDDIV0, 4, 3, 1) 131 125 #define CDDIV0_DIVCTL2 DDIV_PACK(CPG_CDDIV0, 8, 3, 2) ··· 135 125 #define CDDIV1_DIVCTL1 DDIV_PACK(CPG_CDDIV1, 4, 2, 5) 136 126 #define CDDIV1_DIVCTL2 DDIV_PACK(CPG_CDDIV1, 8, 2, 6) 137 127 #define CDDIV1_DIVCTL3 DDIV_PACK(CPG_CDDIV1, 12, 2, 7) 128 + #define CDDIV2_DIVCTL3 DDIV_PACK(CPG_CDDIV2, 12, 3, 11) 138 129 #define CDDIV3_DIVCTL1 DDIV_PACK(CPG_CDDIV3, 4, 3, 13) 139 130 #define CDDIV3_DIVCTL2 DDIV_PACK(CPG_CDDIV3, 8, 3, 14) 140 131 #define CDDIV3_DIVCTL3 DDIV_PACK(CPG_CDDIV3, 12, 1, 15) ··· 145 134 146 135 #define CSDIV0_DIVCTL0 DDIV_PACK(CPG_CSDIV0, 0, 2, CSDIV_NO_MON) 147 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) 148 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) 149 140 150 141 #define SSEL0_SELCTL2 SMUX_PACK(CPG_SSEL0, 8, 1) 151 142 #define SSEL0_SELCTL3 SMUX_PACK(CPG_SSEL0, 12, 1) ··· 201 188 CLK_TYPE_PLL, 202 189 CLK_TYPE_DDIV, /* Dynamic Switching Divider */ 203 190 CLK_TYPE_SMUX, /* Static Mux */ 191 + CLK_TYPE_PLLDSI, /* PLLDSI */ 192 + CLK_TYPE_PLLDSI_DIV, /* PLLDSI divider */ 204 193 }; 205 194 206 195 #define DEF_TYPE(_name, _id, _type...) \ ··· 233 218 .num_parents = ARRAY_SIZE(_parent_names), \ 234 219 .flag = CLK_SET_RATE_PARENT, \ 235 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) 236 229 237 230 /** 238 231 * struct rzv2h_mod_clk - Module Clocks definitions
+14
drivers/clk/rockchip/Kconfig
··· 30 30 help 31 31 Build the driver for RV1126 Clock Driver. 32 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 + 33 40 config CLK_RK3036 34 41 bool "Rockchip RK3036 clock controller support" 35 42 depends on ARM || COMPILE_TEST ··· 99 92 default y 100 93 help 101 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 102 103 103 config CLK_RK3528 104 104 bool "Rockchip RK3528 clock controller support"
+2
drivers/clk/rockchip/Makefile
··· 20 20 obj-$(CONFIG_CLK_PX30) += clk-px30.o 21 21 obj-$(CONFIG_CLK_RV110X) += clk-rv1108.o 22 22 obj-$(CONFIG_CLK_RV1126) += clk-rv1126.o 23 + obj-$(CONFIG_CLK_RV1126B) += clk-rv1126b.o rst-rv1126b.o 23 24 obj-$(CONFIG_CLK_RK3036) += clk-rk3036.o 24 25 obj-$(CONFIG_CLK_RK312X) += clk-rk3128.o 25 26 obj-$(CONFIG_CLK_RK3188) += clk-rk3188.o ··· 30 29 obj-$(CONFIG_CLK_RK3328) += clk-rk3328.o 31 30 obj-$(CONFIG_CLK_RK3368) += clk-rk3368.o 32 31 obj-$(CONFIG_CLK_RK3399) += clk-rk3399.o 32 + obj-$(CONFIG_CLK_RK3506) += clk-rk3506.o rst-rk3506.o 33 33 obj-$(CONFIG_CLK_RK3528) += clk-rk3528.o rst-rk3528.o 34 34 obj-$(CONFIG_CLK_RK3562) += clk-rk3562.o rst-rk3562.o 35 35 obj-$(CONFIG_CLK_RK3568) += clk-rk3568.o
+165
drivers/clk/rockchip/clk-cpu.c
··· 396 396 kfree(cpuclk); 397 397 return ERR_PTR(ret); 398 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 1652 static void __init rk3568_clk_init(struct device_node *np) 1653 1653 { 1654 1654 struct rockchip_clk_provider *ctx; 1655 + unsigned long clk_nr_clks; 1655 1656 void __iomem *reg_base; 1656 1657 1657 1658 reg_base = of_iomap(np, 0); ··· 1661 1660 return; 1662 1661 } 1663 1662 1664 - ctx = rockchip_clk_init(np, reg_base, CLK_NR_CLKS); 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); 1665 1666 if (IS_ERR(ctx)) { 1666 1667 pr_err("%s: rockchip clk init failed\n", __func__); 1667 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 722 } 723 723 EXPORT_SYMBOL_GPL(rockchip_clk_register_armclk); 724 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 + 725 749 void rockchip_clk_protect_critical(const char *const clocks[], 726 750 int nclocks) 727 751 {
+96
drivers/clk/rockchip/clk.h
··· 99 99 #define RV1126_EMMC_CON0 0x450 100 100 #define RV1126_EMMC_CON1 0x454 101 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 + 102 169 #define RK2928_PLL_CON(x) ((x) * 0x4) 103 170 #define RK2928_MODE_CON 0x40 104 171 #define RK2928_CLKSEL_CON(x) ((x) * 0x4 + 0x44) ··· 274 207 #define RK3399_PMU_CLKSEL_CON(x) ((x) * 0x4 + 0x80) 275 208 #define RK3399_PMU_CLKGATE_CON(x) ((x) * 0x4 + 0x100) 276 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 277 222 278 223 #define RK3528_PMU_CRU_BASE 0x10000 279 224 #define RK3528_PCIE_CRU_BASE 0x20000 ··· 700 621 const struct rockchip_cpuclk_reg_data *reg_data, 701 622 const struct rockchip_cpuclk_rate_table *rates, 702 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); 703 635 704 636 struct clk *rockchip_clk_register_mmc(const char *name, 705 637 const char *const *parent_names, u8 num_parents, ··· 1298 1208 const struct rockchip_cpuclk_reg_data *reg_data, 1299 1209 const struct rockchip_cpuclk_rate_table *rates, 1300 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); 1301 1215 void rockchip_clk_protect_critical(const char *const clocks[], int nclocks); 1302 1216 void rockchip_register_restart_notifier(struct rockchip_clk_provider *ctx, 1303 1217 unsigned int reg, void (*cb)(void)); ··· 1340 1246 return rockchip_register_softrst_lut(np, NULL, num_regs, base, flags); 1341 1247 } 1342 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); 1343 1251 void rk3528_rst_init(struct device_node *np, void __iomem *reg_base); 1344 1252 void rk3562_rst_init(struct device_node *np, void __iomem *reg_base); 1345 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 95 status of the certains clocks from SoC, but it could also be tied to 96 96 other devices as an input clock. 97 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 + 98 108 config TESLA_FSD_COMMON_CLK 99 109 bool "Tesla FSD clock controller support" if COMPILE_TEST 100 110 depends on COMMON_CLK_SAMSUNG
+1
drivers/clk/samsung/Makefile
··· 28 28 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynosautov9.o 29 29 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynosautov920.o 30 30 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-gs101.o 31 + obj-$(CONFIG_EXYNOS_ACPM_CLK) += clk-acpm.o 31 32 obj-$(CONFIG_S3C64XX_COMMON_CLK) += clk-s3c64xx.o 32 33 obj-$(CONFIG_S5PV210_COMMON_CLK) += clk-s5pv210.o clk-s5pv210-audss.o 33 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 175 clkout->mux.shift = EXYNOS_CLKOUT_MUX_SHIFT; 176 176 clkout->mux.lock = &clkout->slock; 177 177 178 + clkout->data.num = EXYNOS_CLKOUT_NR_CLKS; 178 179 clkout->data.hws[0] = clk_hw_register_composite(NULL, "clkout", 179 180 parent_names, parent_count, &clkout->mux.hw, 180 181 &clk_mux_ops, NULL, NULL, &clkout->gate.hw, ··· 186 185 goto err_unmap; 187 186 } 188 187 189 - clkout->data.num = EXYNOS_CLKOUT_NR_CLKS; 190 188 ret = of_clk_add_hw_provider(clkout->np, of_clk_hw_onecell_get, &clkout->data); 191 189 if (ret) 192 190 goto err_clk_unreg;
+90
drivers/clk/samsung/clk-exynosautov920.c
··· 27 27 #define CLKS_NR_HSI0 (CLK_DOUT_HSI0_PCIE_APB + 1) 28 28 #define CLKS_NR_HSI1 (CLK_MOUT_HSI1_USBDRD + 1) 29 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) 30 32 31 33 /* ---- CMU_TOP ------------------------------------------------------------ */ 32 34 ··· 1823 1821 .clk_name = "noc", 1824 1822 }; 1825 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 + 1826 1906 static int __init exynosautov920_cmu_probe(struct platform_device *pdev) 1827 1907 { 1828 1908 const struct samsung_cmu_info *info; ··· 1935 1851 }, { 1936 1852 .compatible = "samsung,exynosautov920-cmu-hsi2", 1937 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, 1938 1860 }, 1939 1861 { } 1940 1862 };
+10 -31
drivers/clk/samsung/clk-pll.c
··· 11 11 #include <linux/iopoll.h> 12 12 #include <linux/delay.h> 13 13 #include <linux/slab.h> 14 - #include <linux/timekeeping.h> 15 14 #include <linux/clk-provider.h> 16 15 #include <linux/io.h> 17 16 #include "clk.h" 18 17 #include "clk-pll.h" 19 18 20 - #define PLL_TIMEOUT_US 20000U 21 - #define PLL_TIMEOUT_LOOPS 1000000U 19 + #define PLL_TIMEOUT_LOOPS 20000U 22 20 23 21 struct samsung_clk_pll { 24 22 struct clk_hw hw; ··· 69 71 return 0; 70 72 } 71 73 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 74 /* Wait until the PLL is locked */ 82 75 static int samsung_pll_lock_wait(struct samsung_clk_pll *pll, 83 76 unsigned int reg_mask) 84 77 { 85 - int i, ret; 78 + int ret; 86 79 u32 val; 87 80 88 81 /* ··· 82 93 * initialized, another when the timekeeping is suspended. udelay() also 83 94 * cannot be used when the clocksource is not running on arm64, since 84 95 * 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. 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. 89 101 */ 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 - 102 + ret = readl_relaxed_poll_timeout_atomic(pll->con_reg, val, 103 + val & reg_mask, 0, 104 + PLL_TIMEOUT_LOOPS); 104 105 if (ret < 0) 105 106 pr_err("Could not lock PLL %s\n", clk_hw_get_name(&pll->hw)); 106 107
+1 -1
drivers/clk/socfpga/Kconfig
··· 13 13 default ARM && ARCH_INTEL_SOCFPGA 14 14 15 15 config CLK_INTEL_SOCFPGA64 16 - bool "Intel Stratix / Agilex / N5X clock controller support" if COMPILE_TEST && (!ARM64 || !ARCH_INTEL_SOCFPGA) 16 + bool "Intel Stratix / Agilex / N5X / Agilex5 clock controller support" if COMPILE_TEST && (!ARM64 || !ARCH_INTEL_SOCFPGA) 17 17 default ARM64 && ARCH_INTEL_SOCFPGA 18 18 19 19 endif # CLK_INTEL_SOCFPGA
+1 -1
drivers/clk/socfpga/Makefile
··· 3 3 clk-pll-a10.o clk-periph-a10.o clk-gate-a10.o 4 4 obj-$(CONFIG_CLK_INTEL_SOCFPGA64) += clk-s10.o \ 5 5 clk-pll-s10.o clk-periph-s10.o clk-gate-s10.o \ 6 - clk-agilex.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 239 } 240 240 return hw_clk; 241 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 214 } 215 215 return hw_clk; 216 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 304 } 305 305 return hw_clk; 306 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 73 u8 fixed_div; 74 74 }; 75 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 + 76 113 struct clk_hw *s10_register_pll(const struct stratix10_pll_clock *clks, 77 114 void __iomem *reg); 78 115 struct clk_hw *agilex_register_pll(const struct stratix10_pll_clock *clks, 79 116 void __iomem *reg); 80 117 struct clk_hw *n5x_register_pll(const struct stratix10_pll_clock *clks, 81 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); 82 125 struct clk_hw *s10_register_periph(const struct stratix10_perip_c_clock *clks, 83 126 void __iomem *reg); 84 127 struct clk_hw *n5x_register_periph(const struct n5x_perip_c_clock *clks,
+2 -2
drivers/clk/spacemit/ccu-k1.c
··· 1018 1018 if (!clk_data) 1019 1019 return -ENOMEM; 1020 1020 1021 + clk_data->num = data->num; 1022 + 1021 1023 for (i = 0; i < data->num; i++) { 1022 1024 struct clk_hw *hw = data->hws[i]; 1023 1025 struct ccu_common *common; ··· 1045 1043 1046 1044 clk_data->hws[i] = hw; 1047 1045 } 1048 - 1049 - clk_data->num = data->num; 1050 1046 1051 1047 ret = devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, clk_data); 1052 1048 if (ret)
+1 -1
drivers/clk/spacemit/ccu_mix.h
··· 220 220 extern const struct clk_ops spacemit_ccu_mux_gate_ops; 221 221 extern const struct clk_ops spacemit_ccu_mux_div_ops; 222 222 extern const struct clk_ops spacemit_ccu_mux_div_gate_ops; 223 - #endif /* _CCU_DIV_H_ */ 223 + #endif /* _CCU_MIX_H_ */
+2 -6
drivers/clk/sprd/sc9860-clk.c
··· 2021 2021 2022 2022 static int sc9860_clk_probe(struct platform_device *pdev) 2023 2023 { 2024 - const struct of_device_id *match; 2025 2024 const struct sprd_clk_desc *desc; 2026 2025 int ret; 2027 2026 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__); 2027 + desc = device_get_match_data(&pdev->dev); 2028 + if (!desc) 2031 2029 return -ENODEV; 2032 - } 2033 2030 2034 - desc = match->data; 2035 2031 ret = sprd_clk_regmap_init(pdev, desc); 2036 2032 if (ret) 2037 2033 return ret;
+77 -2
drivers/clk/visconti/clkc-tmpv770x.c
··· 17 17 #include "clkc.h" 18 18 #include "reset.h" 19 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 + 20 24 static DEFINE_SPINLOCK(tmpv770x_clk_lock); 21 25 static DEFINE_SPINLOCK(tmpv770x_rst_lock); 22 26 ··· 30 26 31 27 static const struct clk_parent_data pietherplls_parent_data[] = { 32 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 33 }; 34 34 35 35 static const struct visconti_fixed_clk fixed_clk_tables[] = { ··· 70 62 pietherplls_parent_data, ARRAY_SIZE(pietherplls_parent_data), 71 63 CLK_SET_RATE_PARENT, 0x34, 0x134, 7, 4, 72 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, }, 73 100 }; 74 101 75 102 static const struct visconti_clk_gate_table clk_gate_tables[] = { ··· 228 185 clks_parent_data, ARRAY_SIZE(clks_parent_data), 229 186 0, 0x14, 0x114, 0, 4, 230 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, }, 231 204 }; 232 205 233 206 static const struct visconti_reset_data clk_reset_data[] = { ··· 279 220 [TMPV770X_RESET_PIPCMIF] = { 0x464, 0x564, 0, }, 280 221 [TMPV770X_RESET_PICKMON] = { 0x410, 0x510, 8, }, 281 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, }, 282 231 }; 283 232 284 233 static int visconti_clk_probe(struct platform_device *pdev) ··· 301 234 if (IS_ERR(regmap)) 302 235 return PTR_ERR(regmap); 303 236 304 - ctx = visconti_init_clk(dev, regmap, TMPV770X_NR_CLK); 237 + ctx = visconti_init_clk(dev, regmap, CLKS_NR); 305 238 if (IS_ERR(ctx)) 306 239 return PTR_ERR(ctx); 307 240 308 241 ret = visconti_register_reset_controller(dev, regmap, clk_reset_data, 309 - TMPV770X_NR_RESET, 242 + RESETS_NR, 310 243 &visconti_reset_ops, 311 244 &tmpv770x_rst_lock); 312 245 if (ret) { ··· 336 269 clk_reset_data, &tmpv770x_clk_lock); 337 270 if (ret) { 338 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); 339 280 return ret; 340 281 } 341 282
+4 -1
drivers/clk/visconti/pll-tmpv770x.c
··· 16 16 17 17 #include "pll.h" 18 18 19 + /* Must be equal to the last pll ID increased by one */ 20 + #define PLLS_NR (TMPV770X_PLL_PIIMGERPLL + 1) 21 + 19 22 static DEFINE_SPINLOCK(tmpv770x_pll_lock); 20 23 21 24 static const struct visconti_pll_rate_table pipll0_rates[] __initconst = { ··· 69 66 if (!reg_base) 70 67 return; 71 68 72 - ctx = visconti_init_pll(np, reg_base, TMPV770X_NR_PLL); 69 + ctx = visconti_init_pll(np, reg_base, PLLS_NR); 73 70 if (IS_ERR(ctx)) { 74 71 iounmap(reg_base); 75 72 return;
+3 -1
drivers/firmware/samsung/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 2 3 - acpm-protocol-objs := exynos-acpm.o exynos-acpm-pmic.o 3 + acpm-protocol-objs := exynos-acpm.o 4 + acpm-protocol-objs += exynos-acpm-pmic.o 5 + acpm-protocol-objs += exynos-acpm-dvfs.o 4 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 29 #include <linux/types.h> 30 30 31 31 #include "exynos-acpm.h" 32 + #include "exynos-acpm-dvfs.h" 32 33 #include "exynos-acpm-pmic.h" 33 34 34 35 #define ACPM_PROTOCOL_SEQNUM GENMASK(21, 16) ··· 177 176 /** 178 177 * struct acpm_match_data - of_device_id data. 179 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 180 */ 181 181 struct acpm_match_data { 182 182 loff_t initdata_base; 183 + const char *acpm_clk_dev_name; 183 184 }; 184 185 185 186 #define client_to_acpm_chan(c) container_of(c, struct acpm_chan, cl) ··· 593 590 */ 594 591 static void acpm_setup_ops(struct acpm_info *acpm) 595 592 { 593 + struct acpm_dvfs_ops *dvfs_ops = &acpm->handle.ops.dvfs_ops; 596 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; 597 598 598 599 pmic_ops->read_reg = acpm_pmic_read_reg; 599 600 pmic_ops->bulk_read = acpm_pmic_bulk_read; ··· 606 599 pmic_ops->update_reg = acpm_pmic_update_reg; 607 600 } 608 601 602 + static void acpm_clk_pdev_unregister(void *data) 603 + { 604 + platform_device_unregister(data); 605 + } 606 + 609 607 static int acpm_probe(struct platform_device *pdev) 610 608 { 611 609 const struct acpm_match_data *match_data; 610 + struct platform_device *acpm_clk_pdev; 612 611 struct device *dev = &pdev->dev; 613 612 struct device_node *shmem; 614 613 struct acpm_info *acpm; ··· 654 641 acpm_setup_ops(acpm); 655 642 656 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"); 657 656 658 657 return devm_of_platform_populate(dev); 659 658 } ··· 766 741 767 742 static const struct acpm_match_data acpm_gs101 = { 768 743 .initdata_base = ACPM_GS101_INITDATA_BASE, 744 + .acpm_clk_dev_name = "gs101-acpm-clk", 769 745 }; 770 746 771 747 static const struct of_device_id acpm_match[] = {
+1
drivers/reset/Kconfig
··· 211 211 config RESET_POLARFIRE_SOC 212 212 bool "Microchip PolarFire SoC (MPFS) Reset Driver" 213 213 depends on MCHP_CLK_MPFS 214 + depends on MFD_SYSCON 214 215 select AUXILIARY_BUS 215 216 default MCHP_CLK_MPFS 216 217 help
+55 -36
drivers/reset/reset-mpfs.c
··· 9 9 #include <linux/auxiliary_bus.h> 10 10 #include <linux/delay.h> 11 11 #include <linux/io.h> 12 + #include <linux/mfd/syscon.h> 12 13 #include <linux/module.h> 13 14 #include <linux/of.h> 14 15 #include <linux/platform_device.h> 15 - #include <linux/slab.h> 16 + #include <linux/regmap.h> 16 17 #include <linux/reset-controller.h> 18 + #include <linux/slab.h> 17 19 #include <dt-bindings/clock/microchip,mpfs-clock.h> 18 20 #include <soc/microchip/mpfs.h> 19 21 ··· 29 27 #define MPFS_SLEEP_MIN_US 100 30 28 #define MPFS_SLEEP_MAX_US 200 31 29 32 - /* block concurrent access to the soft reset register */ 33 - static DEFINE_SPINLOCK(mpfs_reset_lock); 30 + #define REG_SUBBLK_RESET_CR 0x88u 34 31 35 32 struct mpfs_reset { 36 - void __iomem *base; 33 + struct regmap *regmap; 37 34 struct reset_controller_dev rcdev; 38 35 }; 39 36 ··· 47 46 static int mpfs_assert(struct reset_controller_dev *rcdev, unsigned long id) 48 47 { 49 48 struct mpfs_reset *rst = to_mpfs_reset(rcdev); 50 - unsigned long flags; 51 - u32 reg; 52 49 53 - spin_lock_irqsave(&mpfs_reset_lock, flags); 50 + return regmap_set_bits(rst->regmap, REG_SUBBLK_RESET_CR, BIT(id)); 54 51 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 52 } 63 53 64 54 static int mpfs_deassert(struct reset_controller_dev *rcdev, unsigned long id) 65 55 { 66 56 struct mpfs_reset *rst = to_mpfs_reset(rcdev); 67 - unsigned long flags; 68 - u32 reg; 69 57 70 - spin_lock_irqsave(&mpfs_reset_lock, flags); 58 + return regmap_clear_bits(rst->regmap, REG_SUBBLK_RESET_CR, BIT(id)); 71 59 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 60 } 80 61 81 62 static int mpfs_status(struct reset_controller_dev *rcdev, unsigned long id) 82 63 { 83 64 struct mpfs_reset *rst = to_mpfs_reset(rcdev); 84 - u32 reg = readl(rst->base); 65 + u32 reg; 66 + 67 + regmap_read(rst->regmap, REG_SUBBLK_RESET_CR, &reg); 85 68 86 69 /* 87 70 * It is safe to return here as MPFS_NUM_RESETS makes sure the sign bit ··· 115 130 return index - MPFS_PERIPH_OFFSET; 116 131 } 117 132 118 - static int mpfs_reset_probe(struct auxiliary_device *adev, 119 - const struct auxiliary_device_id *id) 133 + static int mpfs_reset_mfd_probe(struct platform_device *pdev) 120 134 { 121 - struct device *dev = &adev->dev; 122 135 struct reset_controller_dev *rcdev; 136 + struct device *dev = &pdev->dev; 123 137 struct mpfs_reset *rst; 124 138 125 139 rst = devm_kzalloc(dev, sizeof(*rst), GFP_KERNEL); 126 140 if (!rst) 127 141 return -ENOMEM; 128 142 129 - rst->base = (void __iomem *)adev->dev.platform_data; 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; 130 180 131 181 rcdev = &rst->rcdev; 132 182 rcdev->dev = dev; 133 - rcdev->dev->parent = dev->parent; 134 183 rcdev->ops = &mpfs_reset_ops; 184 + 135 185 rcdev->of_node = dev->parent->of_node; 136 186 rcdev->of_reset_n_cells = 1; 137 187 rcdev->of_xlate = mpfs_reset_xlate; ··· 175 155 return devm_reset_controller_register(dev, rcdev); 176 156 } 177 157 178 - int mpfs_reset_controller_register(struct device *clk_dev, void __iomem *base) 158 + int mpfs_reset_controller_register(struct device *clk_dev, struct regmap *map) 179 159 { 180 160 struct auxiliary_device *adev; 181 161 182 - adev = devm_auxiliary_device_create(clk_dev, "reset-mpfs", 183 - (__force void *)base); 162 + adev = devm_auxiliary_device_create(clk_dev, "reset-mpfs", (void *)map); 184 163 if (!adev) 185 164 return -ENODEV; 186 165 ··· 195 176 }; 196 177 MODULE_DEVICE_TABLE(auxiliary, mpfs_reset_ids); 197 178 198 - static struct auxiliary_driver mpfs_reset_driver = { 199 - .probe = mpfs_reset_probe, 179 + static struct auxiliary_driver mpfs_reset_aux_driver = { 180 + .probe = mpfs_reset_adev_probe, 200 181 .id_table = mpfs_reset_ids, 201 182 }; 202 183 203 - module_auxiliary_driver(mpfs_reset_driver); 184 + module_auxiliary_driver(mpfs_reset_aux_driver); 204 185 205 186 MODULE_DESCRIPTION("Microchip PolarFire SoC Reset Driver"); 206 187 MODULE_AUTHOR("Conor Dooley <conor.dooley@microchip.com>");
+5
include/dt-bindings/clock/imx8ulp-clock.h
··· 255 255 256 256 #define IMX8ULP_CLK_PCC5_END 56 257 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 + 258 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 157 #define BIMC_SMMU_GDSC 7 158 158 159 159 #define CAMSS_MICRO_BCR 0 160 + #define MDSS_BCR 1 160 161 161 162 #endif 162 163
+3
include/dt-bindings/clock/qcom,sm7150-dispcc.h
··· 53 53 #define DISPCC_SLEEP_CLK 41 54 54 #define DISPCC_SLEEP_CLK_SRC 42 55 55 56 + /* DISPCC resets */ 57 + #define DISPCC_MDSS_CORE_BCR 0 58 + 56 59 /* DISPCC GDSCR */ 57 60 #define MDSS_GDSC 0 58 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 90 #define DISP_CC_MDSS_CORE_BCR 0 91 91 #define DISP_CC_MDSS_CORE_INT2_BCR 1 92 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 93 96 94 97 /* DISP_CC GDSCR */ 95 98 #define MDSS_GDSC 0
+2
include/dt-bindings/clock/renesas,r9a09g047-cpg.h
··· 22 22 #define R9A09G047_GBETH_1_CLK_PTP_REF_I 11 23 23 #define R9A09G047_USB3_0_REF_ALT_CLK_P 12 24 24 #define R9A09G047_USB3_0_CLKCORE 13 25 + #define R9A09G047_USB2_0_CLK_CORE0 14 26 + #define R9A09G047_USB2_0_CLK_CORE1 15 25 27 26 28 #endif /* __DT_BINDINGS_CLOCK_RENESAS_R9A09G047_CPG_H__ */
+2
include/dt-bindings/clock/renesas,r9a09g056-cpg.h
··· 21 21 #define R9A09G056_GBETH_0_CLK_PTP_REF_I 10 22 22 #define R9A09G056_GBETH_1_CLK_PTP_REF_I 11 23 23 #define R9A09G056_SPI_CLK_SPI 12 24 + #define R9A09G056_USB3_0_REF_ALT_CLK_P 13 25 + #define R9A09G056_USB3_0_CLKCORE 14 24 26 25 27 #endif /* __DT_BINDINGS_CLOCK_RENESAS_R9A09G056_CPG_H__ */
+4
include/dt-bindings/clock/renesas,r9a09g057-cpg.h
··· 22 22 #define R9A09G057_GBETH_0_CLK_PTP_REF_I 11 23 23 #define R9A09G057_GBETH_1_CLK_PTP_REF_I 12 24 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 25 29 26 30 #endif /* __DT_BINDINGS_CLOCK_RENESAS_R9A09G057_CPG_H__ */
-2
include/dt-bindings/clock/rk3568-cru.h
··· 483 483 484 484 #define PCLK_CORE_PVTM 450 485 485 486 - #define CLK_NR_CLKS (PCLK_CORE_PVTM + 1) 487 - 488 486 /* scmi-clocks indices */ 489 487 490 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 295 #define CLK_DOUT_HSI2_ETHERNET 6 296 296 #define CLK_DOUT_HSI2_ETHERNET_PTP 7 297 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 + 298 308 #endif /* _DT_BINDINGS_CLOCK_EXYNOSAUTOV920_H */
+11 -3
include/dt-bindings/clock/toshiba,tmpv770x.h
··· 11 11 #define TMPV770X_PLL_PIDDRCPLL 4 12 12 #define TMPV770X_PLL_PIVOIFPLL 5 13 13 #define TMPV770X_PLL_PIIMGERPLL 6 14 - #define TMPV770X_NR_PLL 7 15 14 16 15 /* Clocks */ 17 16 #define TMPV770X_CLK_PIPLL1_DIV1 0 ··· 140 141 #define TMPV770X_CLK_PIREFCLK 124 141 142 #define TMPV770X_CLK_SBUS 125 142 143 #define TMPV770X_CLK_BUSLCK 126 143 - #define TMPV770X_NR_CLK 127 144 + #define TMPV770X_CLK_VIIFBS1_L2ISP 127 145 + #define TMPV770X_CLK_VIIFBS1_L1ISP 128 146 + #define TMPV770X_CLK_VIIFBS1_PROC 129 144 147 145 148 /* Reset */ 146 149 #define TMPV770X_RESET_PIETHER_2P5M 0 ··· 177 176 #define TMPV770X_RESET_PIPCMIF 29 178 177 #define TMPV770X_RESET_PICKMON 30 179 178 #define TMPV770X_RESET_SBUSCLK 31 180 - #define TMPV770X_NR_RESET 32 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 181 187 182 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 36 #define TMPV770X_RESET_PIPCMIF 29 37 37 #define TMPV770X_RESET_PICKMON 30 38 38 #define TMPV770X_RESET_SBUSCLK 31 39 - #define TMPV770X_NR_RESET 32 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 40 47 41 48 #endif /*_DT_BINDINGS_RESET_TOSHIBA_TMPV770X_H_ */
+145
include/linux/clk/renesas.h
··· 10 10 #ifndef __LINUX_CLK_RENESAS_H_ 11 11 #define __LINUX_CLK_RENESAS_H_ 12 12 13 + #include <linux/clk-provider.h> 13 14 #include <linux/types.h> 15 + #include <linux/units.h> 14 16 15 17 struct device; 16 18 struct device_node; ··· 34 32 #define cpg_mssr_attach_dev NULL 35 33 #define cpg_mssr_detach_dev NULL 36 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 + 37 178 #endif
+19
include/linux/firmware/samsung/exynos-acpm-protocol.h
··· 13 13 struct acpm_handle; 14 14 struct device_node; 15 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 + 16 25 struct acpm_pmic_ops { 17 26 int (*read_reg)(const struct acpm_handle *handle, 18 27 unsigned int acpm_chan_id, u8 type, u8 reg, u8 chan, ··· 41 32 }; 42 33 43 34 struct acpm_ops { 35 + struct acpm_dvfs_ops dvfs_ops; 44 36 struct acpm_pmic_ops pmic_ops; 45 37 }; 46 38 ··· 55 45 56 46 struct device; 57 47 48 + #if IS_ENABLED(CONFIG_EXYNOS_ACPM_PROTOCOL) 58 49 const struct acpm_handle *devm_acpm_get_by_node(struct device *dev, 59 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 60 59 61 60 #endif /* __EXYNOS_ACPM_PROTOCOL_H */
+2 -1
include/soc/microchip/mpfs.h
··· 14 14 15 15 #include <linux/types.h> 16 16 #include <linux/of_device.h> 17 + #include <linux/regmap.h> 17 18 18 19 struct mpfs_sys_controller; 19 20 ··· 45 44 46 45 #if IS_ENABLED(CONFIG_MCHP_CLK_MPFS) 47 46 #if IS_ENABLED(CONFIG_RESET_POLARFIRE_SOC) 48 - int mpfs_reset_controller_register(struct device *clk_dev, void __iomem *base); 47 + int mpfs_reset_controller_register(struct device *clk_dev, struct regmap *map); 49 48 #else 50 49 static inline int mpfs_reset_controller_register(struct device *clk_dev, void __iomem *base) { return 0; } 51 50 #endif /* if IS_ENABLED(CONFIG_RESET_POLARFIRE_SOC) */