Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

Pull clk updates from Stephen Boyd:
"Nothing changed in the clk framework core this time around. We did get
some updates to the basic clk types to use determine_rate for the
divider type and add a power of two fractional divider flag though.

Otherwise, this is a collection of clk driver updates. More than half
the diffstat is in the Qualcomm clk driver where we add a bunch of
data to describe clks on various SoCs and fix bugs. The other big new
thing in here is the Mediatek MT8192 clk driver. That's been under
review for a while and it's nice to see that it's finally upstream.

Beyond that it's the usual set of minor fixes and tweaks to clk
drivers. There are some non-clk driver bits in here which have all
been acked by the respective maintainers.

New Drivers:
- Support video, gpu, display clks on qcom sc7280 SoCs
- GCC clks on qcom MSM8953, SM4250/6115, and SM6350 SoCs
- Multimedia clks (MMCC) on qcom MSM8994/MSM8992
- RPMh clks on qcom SM6350 SoCs
- Support for Mediatek MT8192 SoCs
- Add display (DU and DSI) clocks on Renesas R-Car V3U
- Add I2C, DMAC, USB, sound (SSIF-2), GPIO, CANFD, and ADC clocks and
resets on Renesas RZ/G2L

Updates:
- Support the SD/OE pin on IDT VersaClock 5 and 6 clock generators
- Add power of two flag to fractional divider clk type
- Migrate some clk drivers to clk_divider_ops.determine_rate
- Migrate to clk_parent_data in gcc-sdm660
- Fix CLKOUT clocks on i.MX8MM and i.MX8MN by using imx_clk_hw_mux2
- Switch from .round_rate to .determine_rate in clk-divider-gate
- Fix clock tree update for TF-A controlled clocks for all i.MX8M
- Add missing M7 core clock for i.MX8MN
- YAML conversion of rk3399 clock controller binding
- Removal of GRF dependency for the rk3328/rk3036 pll types
- Drop CLK_IS_CRITICAL flag from Tegra fuse clk
- Make CLK_R9A06G032 Kconfig symbol invisible
- Convert various DT bindings to YAML"

* tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux: (128 commits)
dt-bindings: clock: samsung: fix header path in example
clk: tegra: fix old-style declaration
clk: qcom: Add SM6350 GCC driver
MAINTAINERS: clock: include S3C and S5P in Samsung SoC clock entry
dt-bindings: clock: samsung: convert S5Pv210 AudSS to dtschema
dt-bindings: clock: samsung: convert Exynos AudSS to dtschema
dt-bindings: clock: samsung: convert Exynos4 to dtschema
dt-bindings: clock: samsung: convert Exynos3250 to dtschema
dt-bindings: clock: samsung: convert Exynos542x to dtschema
dt-bindings: clock: samsung: add bindings for Exynos external clock
dt-bindings: clock: samsung: convert Exynos5250 to dtschema
clk: vc5: Add properties for configuring SD/OE behavior
clk: vc5: Use dev_err_probe
dt-bindings: clk: vc5: Add properties for configuring the SD/OE pin
dt-bindings: clock: brcm,iproc-clocks: fix armpll properties
clk: zynqmp: Fix kernel-doc format
clk: at91: clk-generated: Limit the requested rate to our range
clk: ralink: avoid to set 'CLK_IS_CRITICAL' flag for gates
clk: zynqmp: Fix a memory leak
clk: zynqmp: Check the return type
...

+20771 -1045
+1
Documentation/devicetree/bindings/arm/mediatek/mediatek,audsys.txt
··· 13 13 - "mediatek,mt7623-audsys", "mediatek,mt2701-audsys", "syscon" 14 14 - "mediatek,mt8167-audiosys", "syscon" 15 15 - "mediatek,mt8183-audiosys", "syscon" 16 + - "mediatek,mt8192-audsys", "syscon" 16 17 - "mediatek,mt8516-audsys", "syscon" 17 18 - #clock-cells: Must be 1 18 19
+1
Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
··· 29 29 - mediatek,mt8167-mmsys 30 30 - mediatek,mt8173-mmsys 31 31 - mediatek,mt8183-mmsys 32 + - mediatek,mt8192-mmsys 32 33 - mediatek,mt8365-mmsys 33 34 - const: syscon 34 35 - items:
+199
Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: "http://devicetree.org/schemas/arm/mediatek/mediatek,mt8192-clock.yaml#" 5 + $schema: "http://devicetree.org/meta-schemas/core.yaml#" 6 + 7 + title: MediaTek Functional Clock Controller for MT8192 8 + 9 + maintainers: 10 + - Chun-Jie Chen <chun-jie.chen@mediatek.com> 11 + 12 + description: 13 + The Mediatek functional clock controller provides various clocks on MT8192. 14 + 15 + properties: 16 + compatible: 17 + items: 18 + - enum: 19 + - mediatek,mt8192-scp_adsp 20 + - mediatek,mt8192-imp_iic_wrap_c 21 + - mediatek,mt8192-imp_iic_wrap_e 22 + - mediatek,mt8192-imp_iic_wrap_s 23 + - mediatek,mt8192-imp_iic_wrap_ws 24 + - mediatek,mt8192-imp_iic_wrap_w 25 + - mediatek,mt8192-imp_iic_wrap_n 26 + - mediatek,mt8192-msdc_top 27 + - mediatek,mt8192-msdc 28 + - mediatek,mt8192-mfgcfg 29 + - mediatek,mt8192-imgsys 30 + - mediatek,mt8192-imgsys2 31 + - mediatek,mt8192-vdecsys_soc 32 + - mediatek,mt8192-vdecsys 33 + - mediatek,mt8192-vencsys 34 + - mediatek,mt8192-camsys 35 + - mediatek,mt8192-camsys_rawa 36 + - mediatek,mt8192-camsys_rawb 37 + - mediatek,mt8192-camsys_rawc 38 + - mediatek,mt8192-ipesys 39 + - mediatek,mt8192-mdpsys 40 + 41 + reg: 42 + maxItems: 1 43 + 44 + '#clock-cells': 45 + const: 1 46 + 47 + required: 48 + - compatible 49 + - reg 50 + 51 + additionalProperties: false 52 + 53 + examples: 54 + - | 55 + scp_adsp: clock-controller@10720000 { 56 + compatible = "mediatek,mt8192-scp_adsp"; 57 + reg = <0x10720000 0x1000>; 58 + #clock-cells = <1>; 59 + }; 60 + 61 + - | 62 + imp_iic_wrap_c: clock-controller@11007000 { 63 + compatible = "mediatek,mt8192-imp_iic_wrap_c"; 64 + reg = <0x11007000 0x1000>; 65 + #clock-cells = <1>; 66 + }; 67 + 68 + - | 69 + imp_iic_wrap_e: clock-controller@11cb1000 { 70 + compatible = "mediatek,mt8192-imp_iic_wrap_e"; 71 + reg = <0x11cb1000 0x1000>; 72 + #clock-cells = <1>; 73 + }; 74 + 75 + - | 76 + imp_iic_wrap_s: clock-controller@11d03000 { 77 + compatible = "mediatek,mt8192-imp_iic_wrap_s"; 78 + reg = <0x11d03000 0x1000>; 79 + #clock-cells = <1>; 80 + }; 81 + 82 + - | 83 + imp_iic_wrap_ws: clock-controller@11d23000 { 84 + compatible = "mediatek,mt8192-imp_iic_wrap_ws"; 85 + reg = <0x11d23000 0x1000>; 86 + #clock-cells = <1>; 87 + }; 88 + 89 + - | 90 + imp_iic_wrap_w: clock-controller@11e01000 { 91 + compatible = "mediatek,mt8192-imp_iic_wrap_w"; 92 + reg = <0x11e01000 0x1000>; 93 + #clock-cells = <1>; 94 + }; 95 + 96 + - | 97 + imp_iic_wrap_n: clock-controller@11f02000 { 98 + compatible = "mediatek,mt8192-imp_iic_wrap_n"; 99 + reg = <0x11f02000 0x1000>; 100 + #clock-cells = <1>; 101 + }; 102 + 103 + - | 104 + msdc_top: clock-controller@11f10000 { 105 + compatible = "mediatek,mt8192-msdc_top"; 106 + reg = <0x11f10000 0x1000>; 107 + #clock-cells = <1>; 108 + }; 109 + 110 + - | 111 + msdc: clock-controller@11f60000 { 112 + compatible = "mediatek,mt8192-msdc"; 113 + reg = <0x11f60000 0x1000>; 114 + #clock-cells = <1>; 115 + }; 116 + 117 + - | 118 + mfgcfg: clock-controller@13fbf000 { 119 + compatible = "mediatek,mt8192-mfgcfg"; 120 + reg = <0x13fbf000 0x1000>; 121 + #clock-cells = <1>; 122 + }; 123 + 124 + - | 125 + imgsys: clock-controller@15020000 { 126 + compatible = "mediatek,mt8192-imgsys"; 127 + reg = <0x15020000 0x1000>; 128 + #clock-cells = <1>; 129 + }; 130 + 131 + - | 132 + imgsys2: clock-controller@15820000 { 133 + compatible = "mediatek,mt8192-imgsys2"; 134 + reg = <0x15820000 0x1000>; 135 + #clock-cells = <1>; 136 + }; 137 + 138 + - | 139 + vdecsys_soc: clock-controller@1600f000 { 140 + compatible = "mediatek,mt8192-vdecsys_soc"; 141 + reg = <0x1600f000 0x1000>; 142 + #clock-cells = <1>; 143 + }; 144 + 145 + - | 146 + vdecsys: clock-controller@1602f000 { 147 + compatible = "mediatek,mt8192-vdecsys"; 148 + reg = <0x1602f000 0x1000>; 149 + #clock-cells = <1>; 150 + }; 151 + 152 + - | 153 + vencsys: clock-controller@17000000 { 154 + compatible = "mediatek,mt8192-vencsys"; 155 + reg = <0x17000000 0x1000>; 156 + #clock-cells = <1>; 157 + }; 158 + 159 + - | 160 + camsys: clock-controller@1a000000 { 161 + compatible = "mediatek,mt8192-camsys"; 162 + reg = <0x1a000000 0x1000>; 163 + #clock-cells = <1>; 164 + }; 165 + 166 + - | 167 + camsys_rawa: clock-controller@1a04f000 { 168 + compatible = "mediatek,mt8192-camsys_rawa"; 169 + reg = <0x1a04f000 0x1000>; 170 + #clock-cells = <1>; 171 + }; 172 + 173 + - | 174 + camsys_rawb: clock-controller@1a06f000 { 175 + compatible = "mediatek,mt8192-camsys_rawb"; 176 + reg = <0x1a06f000 0x1000>; 177 + #clock-cells = <1>; 178 + }; 179 + 180 + - | 181 + camsys_rawc: clock-controller@1a08f000 { 182 + compatible = "mediatek,mt8192-camsys_rawc"; 183 + reg = <0x1a08f000 0x1000>; 184 + #clock-cells = <1>; 185 + }; 186 + 187 + - | 188 + ipesys: clock-controller@1b000000 { 189 + compatible = "mediatek,mt8192-ipesys"; 190 + reg = <0x1b000000 0x1000>; 191 + #clock-cells = <1>; 192 + }; 193 + 194 + - | 195 + mdpsys: clock-controller@1f000000 { 196 + compatible = "mediatek,mt8192-mdpsys"; 197 + reg = <0x1f000000 0x1000>; 198 + #clock-cells = <1>; 199 + };
+65
Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-sys-clock.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: "http://devicetree.org/schemas/arm/mediatek/mediatek,mt8192-sys-clock.yaml#" 5 + $schema: "http://devicetree.org/meta-schemas/core.yaml#" 6 + 7 + title: MediaTek System Clock Controller for MT8192 8 + 9 + maintainers: 10 + - Chun-Jie Chen <chun-jie.chen@mediatek.com> 11 + 12 + description: 13 + The Mediatek system clock controller provides various clocks and system configuration 14 + like reset and bus protection on MT8192. 15 + 16 + properties: 17 + compatible: 18 + items: 19 + - enum: 20 + - mediatek,mt8192-topckgen 21 + - mediatek,mt8192-infracfg 22 + - mediatek,mt8192-pericfg 23 + - mediatek,mt8192-apmixedsys 24 + - const: syscon 25 + 26 + reg: 27 + maxItems: 1 28 + 29 + '#clock-cells': 30 + const: 1 31 + 32 + required: 33 + - compatible 34 + - reg 35 + 36 + additionalProperties: false 37 + 38 + examples: 39 + - | 40 + topckgen: syscon@10000000 { 41 + compatible = "mediatek,mt8192-topckgen", "syscon"; 42 + reg = <0x10000000 0x1000>; 43 + #clock-cells = <1>; 44 + }; 45 + 46 + - | 47 + infracfg: syscon@10001000 { 48 + compatible = "mediatek,mt8192-infracfg", "syscon"; 49 + reg = <0x10001000 0x1000>; 50 + #clock-cells = <1>; 51 + }; 52 + 53 + - | 54 + pericfg: syscon@10003000 { 55 + compatible = "mediatek,mt8192-pericfg", "syscon"; 56 + reg = <0x10003000 0x1000>; 57 + #clock-cells = <1>; 58 + }; 59 + 60 + - | 61 + apmixedsys: syscon@1000c000 { 62 + compatible = "mediatek,mt8192-apmixedsys", "syscon"; 63 + reg = <0x1000c000 0x1000>; 64 + #clock-cells = <1>; 65 + };
+25 -2
Documentation/devicetree/bindings/clock/brcm,iproc-clocks.yaml
··· 61 61 maxItems: 1 62 62 63 63 '#clock-cells': 64 - const: 1 64 + true 65 65 66 66 clock-output-names: 67 67 minItems: 1 68 68 maxItems: 45 69 69 70 70 allOf: 71 + - if: 72 + properties: 73 + compatible: 74 + contains: 75 + enum: 76 + - brcm,cygnus-armpll 77 + - brcm,nsp-armpll 78 + then: 79 + properties: 80 + '#clock-cells': 81 + const: 0 82 + else: 83 + properties: 84 + '#clock-cells': 85 + const: 1 86 + required: 87 + - clock-output-names 71 88 - if: 72 89 properties: 73 90 compatible: ··· 375 358 - reg 376 359 - clocks 377 360 - '#clock-cells' 378 - - clock-output-names 379 361 380 362 additionalProperties: false 381 363 ··· 407 391 reg = <0x301d048 0xc>, <0x180aa024 0x4>; 408 392 clocks = <&osc2>; 409 393 clock-output-names = "keypad", "adc/touch", "pwm"; 394 + }; 395 + - | 396 + arm_clk@0 { 397 + #clock-cells = <0>; 398 + compatible = "brcm,nsp-armpll"; 399 + clocks = <&osc>; 400 + reg = <0x0 0x1000>; 410 401 };
-103
Documentation/devicetree/bindings/clock/clk-exynos-audss.txt
··· 1 - * Samsung Audio Subsystem Clock Controller 2 - 3 - The Samsung Audio Subsystem clock controller generates and supplies clocks 4 - to Audio Subsystem block available in the S5PV210 and Exynos SoCs. The clock 5 - binding described here is applicable to all SoCs in Exynos family. 6 - 7 - Required Properties: 8 - 9 - - compatible: should be one of the following: 10 - - "samsung,exynos4210-audss-clock" - controller compatible with all Exynos4 SoCs. 11 - - "samsung,exynos5250-audss-clock" - controller compatible with Exynos5250 12 - SoCs. 13 - - "samsung,exynos5410-audss-clock" - controller compatible with Exynos5410 14 - SoCs. 15 - - "samsung,exynos5420-audss-clock" - controller compatible with Exynos5420 16 - SoCs. 17 - - reg: physical base address and length of the controller's register set. 18 - 19 - - #clock-cells: should be 1. 20 - 21 - - clocks: 22 - - pll_ref: Fixed rate PLL reference clock, parent of mout_audss. "fin_pll" 23 - is used if not specified. 24 - - pll_in: Input PLL to the AudioSS block, parent of mout_audss. "fout_epll" 25 - is used if not specified. 26 - - cdclk: External i2s clock, parent of mout_i2s. "cdclk0" is used if not 27 - specified. 28 - - sclk_audio: Audio bus clock, parent of mout_i2s. "sclk_audio0" is used if 29 - not specified. 30 - - sclk_pcm_in: PCM clock, parent of sclk_pcm. "sclk_pcm0" is used if not 31 - specified. 32 - 33 - - clock-names: Aliases for the above clocks. They should be "pll_ref", 34 - "pll_in", "cdclk", "sclk_audio", and "sclk_pcm_in" respectively. 35 - 36 - Optional Properties: 37 - 38 - - power-domains: a phandle to respective power domain node as described by 39 - generic PM domain bindings (see power/power_domain.txt for more 40 - information). 41 - 42 - The following is the list of clocks generated by the controller. Each clock is 43 - assigned an identifier and client nodes use this identifier to specify the 44 - clock which they consume. Some of the clocks are available only on a particular 45 - Exynos4 SoC and this is specified where applicable. 46 - 47 - Provided clocks: 48 - 49 - Clock ID SoC (if specific) 50 - ----------------------------------------------- 51 - 52 - mout_audss 0 53 - mout_i2s 1 54 - dout_srp 2 55 - dout_aud_bus 3 56 - dout_i2s 4 57 - srp_clk 5 58 - i2s_bus 6 59 - sclk_i2s 7 60 - pcm_bus 8 61 - sclk_pcm 9 62 - adma 10 Exynos5420 63 - 64 - Example 1: An example of a clock controller node using the default input 65 - clock names is listed below. 66 - 67 - clock_audss: audss-clock-controller@3810000 { 68 - compatible = "samsung,exynos5250-audss-clock"; 69 - reg = <0x03810000 0x0C>; 70 - #clock-cells = <1>; 71 - }; 72 - 73 - Example 2: An example of a clock controller node with the input clocks 74 - specified. 75 - 76 - clock_audss: audss-clock-controller@3810000 { 77 - compatible = "samsung,exynos5250-audss-clock"; 78 - reg = <0x03810000 0x0C>; 79 - #clock-cells = <1>; 80 - clocks = <&clock 1>, <&clock 7>, <&clock 138>, <&clock 160>, 81 - <&ext_i2s_clk>; 82 - clock-names = "pll_ref", "pll_in", "sclk_audio", "sclk_pcm_in", "cdclk"; 83 - }; 84 - 85 - Example 3: I2S controller node that consumes the clock generated by the clock 86 - controller. Refer to the standard clock bindings for information 87 - about 'clocks' and 'clock-names' property. 88 - 89 - i2s0: i2s@3830000 { 90 - compatible = "samsung,i2s-v5"; 91 - reg = <0x03830000 0x100>; 92 - dmas = <&pdma0 10 93 - &pdma0 9 94 - &pdma0 8>; 95 - dma-names = "tx", "rx", "tx-sec"; 96 - clocks = <&clock_audss EXYNOS_I2S_BUS>, 97 - <&clock_audss EXYNOS_I2S_BUS>, 98 - <&clock_audss EXYNOS_SCLK_I2S>, 99 - <&clock_audss EXYNOS_MOUT_AUDSS>, 100 - <&clock_audss EXYNOS_MOUT_I2S>; 101 - clock-names = "iis", "i2s_opclk0", "i2s_opclk1", 102 - "mout_audss", "mout_i2s"; 103 - };
-53
Documentation/devicetree/bindings/clock/clk-s5pv210-audss.txt
··· 1 - * Samsung Audio Subsystem Clock Controller 2 - 3 - The Samsung Audio Subsystem clock controller generates and supplies clocks 4 - to Audio Subsystem block available in the S5PV210 and compatible SoCs. 5 - 6 - Required Properties: 7 - 8 - - compatible: should be "samsung,s5pv210-audss-clock". 9 - - reg: physical base address and length of the controller's register set. 10 - 11 - - #clock-cells: should be 1. 12 - 13 - - clocks: 14 - - hclk: AHB bus clock of the Audio Subsystem. 15 - - xxti: Optional fixed rate PLL reference clock, parent of mout_audss. If 16 - not specified (i.e. xusbxti is used for PLL reference), it is fixed to 17 - a clock named "xxti". 18 - - fout_epll: Input PLL to the AudioSS block, parent of mout_audss. 19 - - iiscdclk0: Optional external i2s clock, parent of mout_i2s. If not 20 - specified, it is fixed to a clock named "iiscdclk0". 21 - - sclk_audio0: Audio bus clock, parent of mout_i2s. 22 - 23 - - clock-names: Aliases for the above clocks. They should be "hclk", 24 - "xxti", "fout_epll", "iiscdclk0", and "sclk_audio0" respectively. 25 - 26 - All available clocks are defined as preprocessor macros in 27 - dt-bindings/clock/s5pv210-audss-clk.h header and can be used in device 28 - tree sources. 29 - 30 - Example: Clock controller node. 31 - 32 - clk_audss: clock-controller@c0900000 { 33 - compatible = "samsung,s5pv210-audss-clock"; 34 - reg = <0xc0900000 0x1000>; 35 - #clock-cells = <1>; 36 - clock-names = "hclk", "xxti", 37 - "fout_epll", "sclk_audio0"; 38 - clocks = <&clocks DOUT_HCLKP>, <&xxti>, 39 - <&clocks FOUT_EPLL>, <&clocks SCLK_AUDIO0>; 40 - }; 41 - 42 - Example: I2S controller node that consumes the clock generated by the clock 43 - controller. Refer to the standard clock bindings for information 44 - about 'clocks' and 'clock-names' property. 45 - 46 - i2s0: i2s@3830000 { 47 - /* ... */ 48 - clock-names = "iis", "i2s_opclk0", 49 - "i2s_opclk1"; 50 - clocks = <&clk_audss CLK_I2S>, <&clk_audss CLK_I2S>, 51 - <&clk_audss CLK_DOUT_AUD_BUS>; 52 - /* ... */ 53 - };
-57
Documentation/devicetree/bindings/clock/exynos3250-clock.txt
··· 1 - * Samsung Exynos3250 Clock Controller 2 - 3 - The Exynos3250 clock controller generates and supplies clock to various 4 - controllers within the Exynos3250 SoC. 5 - 6 - Required Properties: 7 - 8 - - compatible: should be one of the following. 9 - - "samsung,exynos3250-cmu" - controller compatible with Exynos3250 SoC. 10 - - "samsung,exynos3250-cmu-dmc" - controller compatible with 11 - Exynos3250 SoC for Dynamic Memory Controller domain. 12 - - "samsung,exynos3250-cmu-isp" - ISP block clock controller compatible 13 - with Exynos3250 SOC 14 - 15 - - reg: physical base address of the controller and length of memory mapped 16 - region. 17 - 18 - - #clock-cells: should be 1. 19 - 20 - Each clock is assigned an identifier and client nodes can use this identifier 21 - to specify the clock which they consume. 22 - 23 - All available clocks are defined as preprocessor macros in 24 - dt-bindings/clock/exynos3250.h header and can be used in device 25 - tree sources. 26 - 27 - Example 1: Examples of clock controller nodes are listed below. 28 - 29 - cmu: clock-controller@10030000 { 30 - compatible = "samsung,exynos3250-cmu"; 31 - reg = <0x10030000 0x20000>; 32 - #clock-cells = <1>; 33 - }; 34 - 35 - cmu_dmc: clock-controller@105c0000 { 36 - compatible = "samsung,exynos3250-cmu-dmc"; 37 - reg = <0x105C0000 0x2000>; 38 - #clock-cells = <1>; 39 - }; 40 - 41 - cmu_isp: clock-controller@10048000 { 42 - compatible = "samsung,exynos3250-cmu-isp"; 43 - reg = <0x10048000 0x1000>; 44 - #clock-cells = <1>; 45 - }; 46 - 47 - Example 2: UART controller node that consumes the clock generated by the clock 48 - controller. Refer to the standard clock bindings for information 49 - about 'clocks' and 'clock-names' property. 50 - 51 - serial@13800000 { 52 - compatible = "samsung,exynos4210-uart"; 53 - reg = <0x13800000 0x100>; 54 - interrupts = <0 109 0>; 55 - clocks = <&cmu CLK_UART0>, <&cmu CLK_SCLK_UART0>; 56 - clock-names = "uart", "clk_uart_baud0"; 57 - };
-86
Documentation/devicetree/bindings/clock/exynos4-clock.txt
··· 1 - * Samsung Exynos4 Clock Controller 2 - 3 - The Exynos4 clock controller generates and supplies clock to various controllers 4 - within the Exynos4 SoC. The clock binding described here is applicable to all 5 - SoC's in the Exynos4 family. 6 - 7 - Required Properties: 8 - 9 - - compatible: should be one of the following. 10 - - "samsung,exynos4210-clock" - controller compatible with Exynos4210 SoC. 11 - - "samsung,exynos4412-clock" - controller compatible with Exynos4412 SoC. 12 - 13 - - reg: physical base address of the controller and length of memory mapped 14 - region. 15 - 16 - - #clock-cells: should be 1. 17 - 18 - Each clock is assigned an identifier and client nodes can use this identifier 19 - to specify the clock which they consume. 20 - 21 - All available clocks are defined as preprocessor macros in 22 - dt-bindings/clock/exynos4.h header and can be used in device 23 - tree sources. 24 - 25 - Example 1: An example of a clock controller node is listed below. 26 - 27 - clock: clock-controller@10030000 { 28 - compatible = "samsung,exynos4210-clock"; 29 - reg = <0x10030000 0x20000>; 30 - #clock-cells = <1>; 31 - }; 32 - 33 - Example 2: UART controller node that consumes the clock generated by the clock 34 - controller. Refer to the standard clock bindings for information 35 - about 'clocks' and 'clock-names' property. 36 - 37 - serial@13820000 { 38 - compatible = "samsung,exynos4210-uart"; 39 - reg = <0x13820000 0x100>; 40 - interrupts = <0 54 0>; 41 - clocks = <&clock CLK_UART2>, <&clock CLK_SCLK_UART2>; 42 - clock-names = "uart", "clk_uart_baud0"; 43 - }; 44 - 45 - Exynos4412 SoC contains some additional clocks for FIMC-ISP (Camera ISP) 46 - subsystem. Registers for those clocks are located in the ISP power domain. 47 - Because those registers are also located in a different memory region than 48 - the main clock controller, a separate clock controller has to be defined for 49 - handling them. 50 - 51 - Required Properties: 52 - 53 - - compatible: should be "samsung,exynos4412-isp-clock". 54 - 55 - - reg: physical base address of the ISP clock controller and length of memory 56 - mapped region. 57 - 58 - - #clock-cells: should be 1. 59 - 60 - - clocks: list of the clock controller input clock identifiers, 61 - from common clock bindings, should point to CLK_ACLK200 and 62 - CLK_ACLK400_MCUISP clocks from the main clock controller. 63 - 64 - - clock-names: list of the clock controller input clock names, 65 - as described in clock-bindings.txt, should be "aclk200" and 66 - "aclk400_mcuisp". 67 - 68 - - power-domains: a phandle to ISP power domain node as described by 69 - generic PM domain bindings. 70 - 71 - Example 3: The clock controllers bindings for Exynos4412 SoCs. 72 - 73 - clock: clock-controller@10030000 { 74 - compatible = "samsung,exynos4412-clock"; 75 - reg = <0x10030000 0x18000>; 76 - #clock-cells = <1>; 77 - }; 78 - 79 - isp_clock: clock-controller@10048000 { 80 - compatible = "samsung,exynos4412-isp-clock"; 81 - reg = <0x10048000 0x1000>; 82 - #clock-cells = <1>; 83 - power-domains = <&pd_isp>; 84 - clocks = <&clock CLK_ACLK200>, <&clock CLK_ACLK400_MCUISP>; 85 - clock-names = "aclk200", "aclk400_mcuisp"; 86 - };
-41
Documentation/devicetree/bindings/clock/exynos5250-clock.txt
··· 1 - * Samsung Exynos5250 Clock Controller 2 - 3 - The Exynos5250 clock controller generates and supplies clock to various 4 - controllers within the Exynos5250 SoC. 5 - 6 - Required Properties: 7 - 8 - - compatible: should be one of the following. 9 - - "samsung,exynos5250-clock" - controller compatible with Exynos5250 SoC. 10 - 11 - - reg: physical base address of the controller and length of memory mapped 12 - region. 13 - 14 - - #clock-cells: should be 1. 15 - 16 - Each clock is assigned an identifier and client nodes can use this identifier 17 - to specify the clock which they consume. 18 - 19 - All available clocks are defined as preprocessor macros in 20 - dt-bindings/clock/exynos5250.h header and can be used in device 21 - tree sources. 22 - 23 - Example 1: An example of a clock controller node is listed below. 24 - 25 - clock: clock-controller@10010000 { 26 - compatible = "samsung,exynos5250-clock"; 27 - reg = <0x10010000 0x30000>; 28 - #clock-cells = <1>; 29 - }; 30 - 31 - Example 2: UART controller node that consumes the clock generated by the clock 32 - controller. Refer to the standard clock bindings for information 33 - about 'clocks' and 'clock-names' property. 34 - 35 - serial@13820000 { 36 - compatible = "samsung,exynos4210-uart"; 37 - reg = <0x13820000 0x100>; 38 - interrupts = <0 54 0>; 39 - clocks = <&clock CLK_UART2>, <&clock CLK_SCLK_UART2>; 40 - clock-names = "uart", "clk_uart_baud0"; 41 - };
-42
Documentation/devicetree/bindings/clock/exynos5420-clock.txt
··· 1 - * Samsung Exynos5420 Clock Controller 2 - 3 - The Exynos5420 clock controller generates and supplies clock to various 4 - controllers within the Exynos5420 SoC and for the Exynos5800 SoC. 5 - 6 - Required Properties: 7 - 8 - - compatible: should be one of the following. 9 - - "samsung,exynos5420-clock" - controller compatible with Exynos5420 SoC. 10 - - "samsung,exynos5800-clock" - controller compatible with Exynos5800 SoC. 11 - 12 - - reg: physical base address of the controller and length of memory mapped 13 - region. 14 - 15 - - #clock-cells: should be 1. 16 - 17 - Each clock is assigned an identifier and client nodes can use this identifier 18 - to specify the clock which they consume. 19 - 20 - All available clocks are defined as preprocessor macros in 21 - dt-bindings/clock/exynos5420.h header and can be used in device 22 - tree sources. 23 - 24 - Example 1: An example of a clock controller node is listed below. 25 - 26 - clock: clock-controller@10010000 { 27 - compatible = "samsung,exynos5420-clock"; 28 - reg = <0x10010000 0x30000>; 29 - #clock-cells = <1>; 30 - }; 31 - 32 - Example 2: UART controller node that consumes the clock generated by the clock 33 - controller. Refer to the standard clock bindings for information 34 - about 'clocks' and 'clock-names' property. 35 - 36 - serial@13820000 { 37 - compatible = "samsung,exynos4210-uart"; 38 - reg = <0x13820000 0x100>; 39 - interrupts = <0 54 0>; 40 - clocks = <&clock CLK_UART2>, <&clock CLK_SCLK_UART2>; 41 - clock-names = "uart", "clk_uart_baud0"; 42 - };
+40
Documentation/devicetree/bindings/clock/idt,versaclock5.yaml
··· 30 30 3 -- OUT3 31 31 4 -- OUT4 32 32 33 + The idt,shutdown and idt,output-enable-active properties control the 34 + SH (en_global_shutdown) and SP bits of the Primary Source and Shutdown 35 + Register, respectively. Their behavior is summarized by the following 36 + table: 37 + 38 + SH SP Output when the SD/OE pin is Low/High 39 + == == ===================================== 40 + 0 0 Active/Inactive 41 + 0 1 Inactive/Active 42 + 1 0 Active/Shutdown 43 + 1 1 Inactive/Shutdown 44 + 45 + The case where SH and SP are both 1 is likely not very interesting. 46 + 33 47 maintainers: 34 48 - Luca Ceresoli <luca@lucaceresoli.net> 35 49 ··· 78 64 maximum: 22760 79 65 description: Optional load capacitor for XTAL1 and XTAL2 80 66 67 + idt,shutdown: 68 + $ref: /schemas/types.yaml#/definitions/uint32 69 + enum: [0, 1] 70 + description: | 71 + If 1, this enables the shutdown functionality: the chip will be 72 + shut down if the SD/OE pin is driven high. If 0, this disables the 73 + shutdown functionality: the chip will never be shut down based on 74 + the value of the SD/OE pin. This property corresponds to the SH 75 + bit of the Primary Source and Shutdown Register. 76 + 77 + idt,output-enable-active: 78 + $ref: /schemas/types.yaml#/definitions/uint32 79 + enum: [0, 1] 80 + description: | 81 + If 1, this enables output when the SD/OE pin is high, and disables 82 + output when the SD/OE pin is low. If 0, this disables output when 83 + the SD/OE pin is high, and enables output when the SD/OE pin is 84 + low. This corresponds to the SP bit of the Primary Source and 85 + Shutdown Register. 86 + 81 87 patternProperties: 82 88 "^OUT[1-4]$": 83 89 type: object ··· 124 90 - compatible 125 91 - reg 126 92 - '#clock-cells' 93 + - idt,shutdown 94 + - idt,output-enable-active 127 95 128 96 allOf: 129 97 - if: ··· 174 138 /* Connect XIN input to 25MHz reference */ 175 139 clocks = <&ref25m>; 176 140 clock-names = "xin"; 141 + 142 + /* Set the SD/OE pin's settings */ 143 + idt,shutdown = <0>; 144 + idt,output-enable-active = <0>; 177 145 178 146 OUT1 { 179 147 idt,mode = <VC5_CMOSD>;
+3
Documentation/devicetree/bindings/clock/qcom,a53pll.yaml
··· 18 18 enum: 19 19 - qcom,ipq6018-a53pll 20 20 - qcom,msm8916-a53pll 21 + - qcom,msm8939-a53pll 21 22 22 23 reg: 23 24 maxItems: 1 ··· 33 32 clock-names: 34 33 items: 35 34 - const: xo 35 + 36 + operating-points-v2: true 36 37 37 38 required: 38 39 - compatible
+72
Documentation/devicetree/bindings/clock/qcom,gcc-sm6115.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/qcom,gcc-sm6115.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Qualcomm Global Clock & Reset Controller Binding for SM6115 and SM4250 8 + 9 + maintainers: 10 + - Iskren Chernev <iskren.chernev@gmail.com> 11 + 12 + description: | 13 + Qualcomm global clock control module which supports the clocks, resets and 14 + power domains on SM4250/6115. 15 + 16 + See also: 17 + - dt-bindings/clock/qcom,gcc-sm6115.h 18 + 19 + properties: 20 + compatible: 21 + const: qcom,gcc-sm6115 22 + 23 + clocks: 24 + items: 25 + - description: Board XO source 26 + - description: Sleep clock source 27 + 28 + clock-names: 29 + items: 30 + - const: bi_tcxo 31 + - const: sleep_clk 32 + 33 + '#clock-cells': 34 + const: 1 35 + 36 + '#reset-cells': 37 + const: 1 38 + 39 + '#power-domain-cells': 40 + const: 1 41 + 42 + reg: 43 + maxItems: 1 44 + 45 + protected-clocks: 46 + description: 47 + Protected clock specifier list as per common clock binding. 48 + 49 + required: 50 + - compatible 51 + - clocks 52 + - clock-names 53 + - reg 54 + - '#clock-cells' 55 + - '#reset-cells' 56 + - '#power-domain-cells' 57 + 58 + additionalProperties: false 59 + 60 + examples: 61 + - | 62 + #include <dt-bindings/clock/qcom,rpmcc.h> 63 + clock-controller@1400000 { 64 + compatible = "qcom,gcc-sm6115"; 65 + reg = <0x01400000 0x1f0000>; 66 + #clock-cells = <1>; 67 + #reset-cells = <1>; 68 + #power-domain-cells = <1>; 69 + clock-names = "bi_tcxo", "sleep_clk"; 70 + clocks = <&rpmcc RPM_SMD_XO_CLK_SRC>, <&sleep_clk>; 71 + }; 72 + ...
+76
Documentation/devicetree/bindings/clock/qcom,gcc-sm6350.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/qcom,gcc-sm6350.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Qualcomm Global Clock & Reset Controller Binding for SM6350 8 + 9 + maintainers: 10 + - Konrad Dybcio <konrad.dybcio@somainline.org> 11 + 12 + description: | 13 + Qualcomm global clock control module which supports the clocks, resets and 14 + power domains on SM6350. 15 + 16 + See also: 17 + - dt-bindings/clock/qcom,gcc-sm6350.h 18 + 19 + properties: 20 + compatible: 21 + const: qcom,gcc-sm6350 22 + 23 + clocks: 24 + items: 25 + - description: Board XO source 26 + - description: Board active XO source 27 + - description: Sleep clock source 28 + 29 + clock-names: 30 + items: 31 + - const: bi_tcxo 32 + - const: bi_tcxo_ao 33 + - const: sleep_clk 34 + 35 + '#clock-cells': 36 + const: 1 37 + 38 + '#reset-cells': 39 + const: 1 40 + 41 + '#power-domain-cells': 42 + const: 1 43 + 44 + reg: 45 + maxItems: 1 46 + 47 + protected-clocks: 48 + description: 49 + Protected clock specifier list as per common clock binding. 50 + 51 + required: 52 + - compatible 53 + - clocks 54 + - clock-names 55 + - reg 56 + - '#clock-cells' 57 + - '#reset-cells' 58 + - '#power-domain-cells' 59 + 60 + additionalProperties: false 61 + 62 + examples: 63 + - | 64 + #include <dt-bindings/clock/qcom,rpmh.h> 65 + clock-controller@100000 { 66 + compatible = "qcom,gcc-sm6350"; 67 + reg = <0x00100000 0x1f0000>; 68 + clocks = <&rpmhcc RPMH_CXO_CLK>, 69 + <&rpmhcc RPMH_CXO_CLK_A>, 70 + <&sleep_clk>; 71 + clock-names = "bi_tcxo", "bi_tcxo_ao", "sleep_clk"; 72 + #clock-cells = <1>; 73 + #reset-cells = <1>; 74 + #power-domain-cells = <1>; 75 + }; 76 + ...
+2
Documentation/devicetree/bindings/clock/qcom,gcc.yaml
··· 23 23 - dt-bindings/clock/qcom,gcc-ipq806x.h (qcom,gcc-ipq8064) 24 24 - dt-bindings/reset/qcom,gcc-ipq806x.h (qcom,gcc-ipq8064) 25 25 - dt-bindings/clock/qcom,gcc-msm8939.h 26 + - dt-bindings/clock/qcom,gcc-msm8953.h 26 27 - dt-bindings/reset/qcom,gcc-msm8939.h 27 28 - dt-bindings/clock/qcom,gcc-msm8660.h 28 29 - dt-bindings/reset/qcom,gcc-msm8660.h ··· 47 46 - qcom,gcc-msm8660 48 47 - qcom,gcc-msm8916 49 48 - qcom,gcc-msm8939 49 + - qcom,gcc-msm8953 50 50 - qcom,gcc-msm8960 51 51 - qcom,gcc-msm8974 52 52 - qcom,gcc-msm8974pro
+5 -2
Documentation/devicetree/bindings/clock/qcom,gpucc.yaml
··· 1 - # SPDX-License-Identifier: GPL-2.0-only 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 2 %YAML 1.2 3 3 --- 4 4 $id: http://devicetree.org/schemas/clock/qcom,gpucc.yaml# ··· 11 11 12 12 description: | 13 13 Qualcomm graphics clock control module which supports the clocks, resets and 14 - power domains on SDM845/SC7180/SM8150/SM8250. 14 + power domains on Qualcomm SoCs. 15 15 16 16 See also: 17 17 dt-bindings/clock/qcom,gpucc-sdm845.h 18 18 dt-bindings/clock/qcom,gpucc-sc7180.h 19 + dt-bindings/clock/qcom,gpucc-sc7280.h 19 20 dt-bindings/clock/qcom,gpucc-sm8150.h 20 21 dt-bindings/clock/qcom,gpucc-sm8250.h 21 22 ··· 25 24 enum: 26 25 - qcom,sdm845-gpucc 27 26 - qcom,sc7180-gpucc 27 + - qcom,sc7280-gpucc 28 + - qcom,sc8180x-gpucc 28 29 - qcom,sm8150-gpucc 29 30 - qcom,sm8250-gpucc 30 31
+2
Documentation/devicetree/bindings/clock/qcom,mmcc.yaml
··· 22 22 - qcom,mmcc-msm8660 23 23 - qcom,mmcc-msm8960 24 24 - qcom,mmcc-msm8974 25 + - qcom,mmcc-msm8992 26 + - qcom,mmcc-msm8994 25 27 - qcom,mmcc-msm8996 26 28 - qcom,mmcc-msm8998 27 29 - qcom,mmcc-sdm630
+4
Documentation/devicetree/bindings/clock/qcom,rpmcc.txt
··· 10 10 - compatible : shall contain only one of the following. The generic 11 11 compatible "qcom,rpmcc" should be also included. 12 12 13 + "qcom,rpmcc-mdm9607", "qcom,rpmcc" 13 14 "qcom,rpmcc-msm8660", "qcom,rpmcc" 14 15 "qcom,rpmcc-apq8060", "qcom,rpmcc" 15 16 "qcom,rpmcc-msm8226", "qcom,rpmcc" 16 17 "qcom,rpmcc-msm8916", "qcom,rpmcc" 17 18 "qcom,rpmcc-msm8936", "qcom,rpmcc" 19 + "qcom,rpmcc-msm8953", "qcom,rpmcc" 18 20 "qcom,rpmcc-msm8974", "qcom,rpmcc" 19 21 "qcom,rpmcc-msm8976", "qcom,rpmcc" 20 22 "qcom,rpmcc-apq8064", "qcom,rpmcc" ··· 27 25 "qcom,rpmcc-msm8998", "qcom,rpmcc" 28 26 "qcom,rpmcc-qcs404", "qcom,rpmcc" 29 27 "qcom,rpmcc-sdm660", "qcom,rpmcc" 28 + "qcom,rpmcc-sm6115", "qcom,rpmcc" 29 + "qcom,rpmcc-sm6125", "qcom,rpmcc" 30 30 31 31 - #clock-cells : shall contain 1 32 32
+1
Documentation/devicetree/bindings/clock/qcom,rpmhcc.yaml
··· 22 22 - qcom,sc8180x-rpmh-clk 23 23 - qcom,sdm845-rpmh-clk 24 24 - qcom,sdx55-rpmh-clk 25 + - qcom,sm6350-rpmh-clk 25 26 - qcom,sm8150-rpmh-clk 26 27 - qcom,sm8250-rpmh-clk 27 28 - qcom,sm8350-rpmh-clk
+94
Documentation/devicetree/bindings/clock/qcom,sc7280-dispcc.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/qcom,sc7280-dispcc.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Qualcomm Display Clock & Reset Controller Binding for SC7280 8 + 9 + maintainers: 10 + - Taniya Das <tdas@codeaurora.org> 11 + 12 + description: | 13 + Qualcomm display clock control module which supports the clocks, resets and 14 + power domains on SC7280. 15 + 16 + See also dt-bindings/clock/qcom,dispcc-sc7280.h. 17 + 18 + properties: 19 + compatible: 20 + const: qcom,sc7280-dispcc 21 + 22 + clocks: 23 + items: 24 + - description: Board XO source 25 + - description: GPLL0 source from GCC 26 + - description: Byte clock from DSI PHY 27 + - description: Pixel clock from DSI PHY 28 + - description: Link clock from DP PHY 29 + - description: VCO DIV clock from DP PHY 30 + - description: Link clock from EDP PHY 31 + - description: VCO DIV clock from EDP PHY 32 + 33 + clock-names: 34 + items: 35 + - const: bi_tcxo 36 + - const: gcc_disp_gpll0_clk 37 + - const: dsi0_phy_pll_out_byteclk 38 + - const: dsi0_phy_pll_out_dsiclk 39 + - const: dp_phy_pll_link_clk 40 + - const: dp_phy_pll_vco_div_clk 41 + - const: edp_phy_pll_link_clk 42 + - const: edp_phy_pll_vco_div_clk 43 + 44 + '#clock-cells': 45 + const: 1 46 + 47 + '#reset-cells': 48 + const: 1 49 + 50 + '#power-domain-cells': 51 + const: 1 52 + 53 + reg: 54 + maxItems: 1 55 + 56 + required: 57 + - compatible 58 + - reg 59 + - clocks 60 + - clock-names 61 + - '#clock-cells' 62 + - '#reset-cells' 63 + - '#power-domain-cells' 64 + 65 + additionalProperties: false 66 + 67 + examples: 68 + - | 69 + #include <dt-bindings/clock/qcom,gcc-sc7280.h> 70 + #include <dt-bindings/clock/qcom,rpmh.h> 71 + clock-controller@af00000 { 72 + compatible = "qcom,sc7280-dispcc"; 73 + reg = <0x0af00000 0x200000>; 74 + clocks = <&rpmhcc RPMH_CXO_CLK>, 75 + <&gcc GCC_DISP_GPLL0_CLK_SRC>, 76 + <&dsi_phy 0>, 77 + <&dsi_phy 1>, 78 + <&dp_phy 0>, 79 + <&dp_phy 1>, 80 + <&edp_phy 0>, 81 + <&edp_phy 1>; 82 + clock-names = "bi_tcxo", 83 + "gcc_disp_gpll0_clk", 84 + "dsi0_phy_pll_out_byteclk", 85 + "dsi0_phy_pll_out_dsiclk", 86 + "dp_phy_pll_link_clk", 87 + "dp_phy_pll_vco_div_clk", 88 + "edp_phy_pll_link_clk", 89 + "edp_phy_pll_vco_div_clk"; 90 + #clock-cells = <1>; 91 + #reset-cells = <1>; 92 + #power-domain-cells = <1>; 93 + }; 94 + ...
+4 -2
Documentation/devicetree/bindings/clock/qcom,videocc.yaml
··· 1 - # SPDX-License-Identifier: GPL-2.0-only 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 2 %YAML 1.2 3 3 --- 4 4 $id: http://devicetree.org/schemas/clock/qcom,videocc.yaml# ··· 11 11 12 12 description: | 13 13 Qualcomm video clock control module which supports the clocks, resets and 14 - power domains on SDM845/SC7180/SM8150/SM8250. 14 + power domains on Qualcomm SoCs. 15 15 16 16 See also: 17 17 dt-bindings/clock/qcom,videocc-sc7180.h 18 + dt-bindings/clock/qcom,videocc-sc7280.h 18 19 dt-bindings/clock/qcom,videocc-sdm845.h 19 20 dt-bindings/clock/qcom,videocc-sm8150.h 20 21 dt-bindings/clock/qcom,videocc-sm8250.h ··· 24 23 compatible: 25 24 enum: 26 25 - qcom,sc7180-videocc 26 + - qcom,sc7280-videocc 27 27 - qcom,sdm845-videocc 28 28 - qcom,sm8150-videocc 29 29 - qcom,sm8250-videocc
-68
Documentation/devicetree/bindings/clock/rockchip,rk3399-cru.txt
··· 1 - * Rockchip RK3399 Clock and Reset Unit 2 - 3 - The RK3399 clock controller generates and supplies clock to various 4 - controllers within the SoC and also implements a reset controller for SoC 5 - peripherals. 6 - 7 - Required Properties: 8 - 9 - - compatible: PMU for CRU should be "rockchip,rk3399-pmucru" 10 - - compatible: CRU should be "rockchip,rk3399-cru" 11 - - reg: physical base address of the controller and length of memory mapped 12 - region. 13 - - #clock-cells: should be 1. 14 - - #reset-cells: should be 1. 15 - 16 - Optional Properties: 17 - 18 - - rockchip,grf: phandle to the syscon managing the "general register files". 19 - It is used for GRF muxes, if missing any muxes present in the GRF will not 20 - be available. 21 - 22 - Each clock is assigned an identifier and client nodes can use this identifier 23 - to specify the clock which they consume. All available clocks are defined as 24 - preprocessor macros in the dt-bindings/clock/rk3399-cru.h headers and can be 25 - used in device tree sources. Similar macros exist for the reset sources in 26 - these files. 27 - 28 - External clocks: 29 - 30 - There are several clocks that are generated outside the SoC. It is expected 31 - that they are defined using standard clock bindings with following 32 - clock-output-names: 33 - - "xin24m" - crystal input - required, 34 - - "xin32k" - rtc clock - optional, 35 - - "clkin_gmac" - external GMAC clock - optional, 36 - - "clkin_i2s" - external I2S clock - optional, 37 - - "pclkin_cif" - external ISP clock - optional, 38 - - "clk_usbphy0_480m" - output clock of the pll in the usbphy0 39 - - "clk_usbphy1_480m" - output clock of the pll in the usbphy1 40 - 41 - Example: Clock controller node: 42 - 43 - pmucru: pmu-clock-controller@ff750000 { 44 - compatible = "rockchip,rk3399-pmucru"; 45 - reg = <0x0 0xff750000 0x0 0x1000>; 46 - #clock-cells = <1>; 47 - #reset-cells = <1>; 48 - }; 49 - 50 - cru: clock-controller@ff760000 { 51 - compatible = "rockchip,rk3399-cru"; 52 - reg = <0x0 0xff760000 0x0 0x1000>; 53 - #clock-cells = <1>; 54 - #reset-cells = <1>; 55 - }; 56 - 57 - Example: UART controller node that consumes the clock generated by the clock 58 - controller: 59 - 60 - uart0: serial@ff1a0000 { 61 - compatible = "rockchip,rk3399-uart", "snps,dw-apb-uart"; 62 - reg = <0x0 0xff180000 0x0 0x100>; 63 - clocks = <&cru SCLK_UART0>, <&cru PCLK_UART0>; 64 - clock-names = "baudclk", "apb_pclk"; 65 - interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; 66 - reg-shift = <2>; 67 - reg-io-width = <4>; 68 - };
+92
Documentation/devicetree/bindings/clock/rockchip,rk3399-cru.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0-only 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/clock/rockchip,rk3399-cru.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Rockchip RK3399 Clock and Reset Unit 8 + 9 + maintainers: 10 + - Xing Zheng <zhengxing@rock-chips.com> 11 + - Heiko Stuebner <heiko@sntech.de> 12 + 13 + description: | 14 + The RK3399 clock controller generates and supplies clock to various 15 + controllers within the SoC and also implements a reset controller for SoC 16 + peripherals. 17 + Each clock is assigned an identifier and client nodes can use this identifier 18 + to specify the clock which they consume. All available clocks are defined as 19 + preprocessor macros in the dt-bindings/clock/rk3399-cru.h headers and can be 20 + used in device tree sources. Similar macros exist for the reset sources in 21 + these files. 22 + There are several clocks that are generated outside the SoC. It is expected 23 + that they are defined using standard clock bindings with following 24 + clock-output-names: 25 + - "xin24m" - crystal input - required, 26 + - "xin32k" - rtc clock - optional, 27 + - "clkin_gmac" - external GMAC clock - optional, 28 + - "clkin_i2s" - external I2S clock - optional, 29 + - "pclkin_cif" - external ISP clock - optional, 30 + - "clk_usbphy0_480m" - output clock of the pll in the usbphy0 31 + - "clk_usbphy1_480m" - output clock of the pll in the usbphy1 32 + 33 + properties: 34 + compatible: 35 + enum: 36 + - rockchip,rk3399-pmucru 37 + - rockchip,rk3399-cru 38 + 39 + reg: 40 + maxItems: 1 41 + 42 + "#clock-cells": 43 + const: 1 44 + 45 + "#reset-cells": 46 + const: 1 47 + 48 + clocks: 49 + minItems: 1 50 + 51 + assigned-clocks: 52 + minItems: 1 53 + maxItems: 64 54 + 55 + assigned-clock-parents: 56 + minItems: 1 57 + maxItems: 64 58 + 59 + assigned-clock-rates: 60 + minItems: 1 61 + maxItems: 64 62 + 63 + rockchip,grf: 64 + $ref: /schemas/types.yaml#/definitions/phandle 65 + description: > 66 + phandle to the syscon managing the "general register files". It is used 67 + for GRF muxes, if missing any muxes present in the GRF will not be 68 + available. 69 + 70 + required: 71 + - compatible 72 + - reg 73 + - "#clock-cells" 74 + - "#reset-cells" 75 + 76 + additionalProperties: false 77 + 78 + examples: 79 + - | 80 + pmucru: pmu-clock-controller@ff750000 { 81 + compatible = "rockchip,rk3399-pmucru"; 82 + reg = <0xff750000 0x1000>; 83 + #clock-cells = <1>; 84 + #reset-cells = <1>; 85 + }; 86 + - | 87 + cru: clock-controller@ff760000 { 88 + compatible = "rockchip,rk3399-cru"; 89 + reg = <0xff760000 0x1000>; 90 + #clock-cells = <1>; 91 + #reset-cells = <1>; 92 + };
+80
Documentation/devicetree/bindings/clock/samsung,exynos-audss-clock.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/clock/samsung,exynos-audss-clock.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Samsung Exynos SoC Audio SubSystem clock controller 8 + 9 + maintainers: 10 + - Chanwoo Choi <cw00.choi@samsung.com> 11 + - Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> 12 + - Sylwester Nawrocki <s.nawrocki@samsung.com> 13 + - Tomasz Figa <tomasz.figa@gmail.com> 14 + 15 + description: | 16 + All available clocks are defined as preprocessor macros in 17 + include/dt-bindings/clock/exynos-audss-clk.h header. 18 + 19 + properties: 20 + compatible: 21 + enum: 22 + - samsung,exynos4210-audss-clock 23 + - samsung,exynos5250-audss-clock 24 + - samsung,exynos5410-audss-clock 25 + - samsung,exynos5420-audss-clock 26 + 27 + clocks: 28 + minItems: 2 29 + items: 30 + - description: 31 + Fixed rate PLL reference clock, parent of mout_audss. "fin_pll" is 32 + used if not specified. 33 + - description: 34 + Input PLL to the AudioSS block, parent of mout_audss. "fout_epll" is 35 + used if not specified. 36 + - description: 37 + Audio bus clock, parent of mout_i2s. "sclk_audio0" is used if not 38 + specified. 39 + - description: 40 + PCM clock, parent of sclk_pcm. "sclk_pcm0" is used if not specified. 41 + - description: 42 + External i2s clock, parent of mout_i2s. "cdclk0" is used if not 43 + specified. 44 + 45 + clock-names: 46 + minItems: 2 47 + items: 48 + - const: pll_ref 49 + - const: pll_in 50 + - const: sclk_audio 51 + - const: sclk_pcm_in 52 + - const: cdclk 53 + 54 + "#clock-cells": 55 + const: 1 56 + 57 + power-domains: 58 + maxItems: 1 59 + 60 + reg: 61 + maxItems: 1 62 + 63 + required: 64 + - compatible 65 + - clocks 66 + - clock-names 67 + - "#clock-cells" 68 + - reg 69 + 70 + additionalProperties: false 71 + 72 + examples: 73 + - | 74 + clock-controller@3810000 { 75 + compatible = "samsung,exynos5250-audss-clock"; 76 + reg = <0x03810000 0x0c>; 77 + #clock-cells = <1>; 78 + clocks = <&clock 1>, <&clock 7>, <&clock 138>, <&clock 160>, <&ext_i2s_clk>; 79 + clock-names = "pll_ref", "pll_in", "sclk_audio", "sclk_pcm_in", "cdclk"; 80 + };
+59
Documentation/devicetree/bindings/clock/samsung,exynos-clock.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/clock/samsung,exynos-clock.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Samsung Exynos SoC clock controller 8 + 9 + maintainers: 10 + - Chanwoo Choi <cw00.choi@samsung.com> 11 + - Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> 12 + - Sylwester Nawrocki <s.nawrocki@samsung.com> 13 + - Tomasz Figa <tomasz.figa@gmail.com> 14 + 15 + description: | 16 + All available clocks are defined as preprocessor macros in 17 + dt-bindings/clock/ headers. 18 + 19 + properties: 20 + compatible: 21 + oneOf: 22 + - enum: 23 + - samsung,exynos3250-cmu 24 + - samsung,exynos3250-cmu-dmc 25 + - samsung,exynos3250-cmu-isp 26 + - samsung,exynos4210-clock 27 + - samsung,exynos4412-clock 28 + - samsung,exynos5250-clock 29 + - items: 30 + - enum: 31 + - samsung,exynos5420-clock 32 + - samsung,exynos5800-clock 33 + - const: syscon 34 + 35 + clocks: 36 + minItems: 1 37 + maxItems: 4 38 + 39 + "#clock-cells": 40 + const: 1 41 + 42 + reg: 43 + maxItems: 1 44 + 45 + required: 46 + - compatible 47 + - "#clock-cells" 48 + - reg 49 + 50 + additionalProperties: false 51 + 52 + examples: 53 + - | 54 + #include <dt-bindings/clock/exynos5250.h> 55 + clock: clock-controller@10010000 { 56 + compatible = "samsung,exynos5250-clock"; 57 + reg = <0x10010000 0x30000>; 58 + #clock-cells = <1>; 59 + };
+46
Documentation/devicetree/bindings/clock/samsung,exynos-ext-clock.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/clock/samsung,exynos-ext-clock.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Samsung SoC external/osc/XXTI/XusbXTI clock 8 + 9 + maintainers: 10 + - Chanwoo Choi <cw00.choi@samsung.com> 11 + - Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> 12 + - Sylwester Nawrocki <s.nawrocki@samsung.com> 13 + - Tomasz Figa <tomasz.figa@gmail.com> 14 + 15 + description: | 16 + Samsung SoCs require an external clock supplied through XXTI or XusbXTI pins. 17 + 18 + properties: 19 + compatible: 20 + enum: 21 + - samsung,clock-xxti 22 + - samsung,clock-xusbxti 23 + - samsung,exynos5420-oscclk 24 + 25 + "#clock-cells": 26 + const: 0 27 + 28 + clock-frequency: true 29 + 30 + clock-output-names: 31 + maxItems: 1 32 + 33 + required: 34 + - compatible 35 + - clock-frequency 36 + 37 + additionalProperties: false 38 + 39 + examples: 40 + - | 41 + fixed-rate-clocks { 42 + clock { 43 + compatible = "samsung,clock-xxti"; 44 + clock-frequency = <24000000>; 45 + }; 46 + };
+64
Documentation/devicetree/bindings/clock/samsung,exynos4412-isp-clock.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/clock/samsung,exynos4412-isp-clock.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Samsung Exynos4412 SoC ISP clock controller 8 + 9 + maintainers: 10 + - Chanwoo Choi <cw00.choi@samsung.com> 11 + - Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> 12 + - Sylwester Nawrocki <s.nawrocki@samsung.com> 13 + - Tomasz Figa <tomasz.figa@gmail.com> 14 + 15 + description: | 16 + Clock controller for Samsung Exynos4412 SoC FIMC-ISP (Camera ISP) 17 + All available clocks are defined as preprocessor macros in 18 + dt-bindings/clock/ headers. 19 + 20 + properties: 21 + compatible: 22 + const: samsung,exynos4412-isp-clock 23 + 24 + clocks: 25 + items: 26 + - description: CLK_ACLK200 from the main clock controller 27 + - description: CLK_ACLK400_MCUISP from the main clock controller 28 + 29 + clock-names: 30 + items: 31 + - const: aclk200 32 + - const: aclk400_mcuisp 33 + 34 + "#clock-cells": 35 + const: 1 36 + 37 + power-domains: 38 + maxItems: 1 39 + 40 + reg: 41 + maxItems: 1 42 + 43 + required: 44 + - compatible 45 + - "#clock-cells" 46 + - clocks 47 + - clock-names 48 + - power-domains 49 + - reg 50 + 51 + additionalProperties: false 52 + 53 + examples: 54 + - | 55 + #include <dt-bindings/clock/exynos4.h> 56 + clock-controller@10048000 { 57 + compatible = "samsung,exynos4412-isp-clock"; 58 + reg = <0x10048000 0x1000>; 59 + #clock-cells = <1>; 60 + power-domains = <&pd_isp>; 61 + clocks = <&clock CLK_ACLK200>, <&clock CLK_ACLK400_MCUISP>; 62 + clock-names = "aclk200", "aclk400_mcuisp"; 63 + }; 64 +
+78
Documentation/devicetree/bindings/clock/samsung,s5pv210-audss-clock.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/clock/samsung,s5pv210-audss-clock.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Samsung S5Pv210 SoC Audio SubSystem clock controller 8 + 9 + maintainers: 10 + - Chanwoo Choi <cw00.choi@samsung.com> 11 + - Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> 12 + - Sylwester Nawrocki <s.nawrocki@samsung.com> 13 + - Tomasz Figa <tomasz.figa@gmail.com> 14 + 15 + description: | 16 + All available clocks are defined as preprocessor macros in 17 + include/dt-bindings/clock/s5pv210-audss.h header. 18 + 19 + properties: 20 + compatible: 21 + const: samsung,s5pv210-audss-clock 22 + 23 + clocks: 24 + minItems: 4 25 + items: 26 + - description: 27 + AHB bus clock of the Audio Subsystem. 28 + - description: 29 + Optional fixed rate PLL reference clock, parent of mout_audss. If not 30 + specified (i.e. xusbxti is used for PLL reference), it is fixed to a 31 + clock named "xxti". 32 + - description: 33 + Input PLL to the AudioSS block, parent of mout_audss. 34 + - description: 35 + Audio bus clock, parent of mout_i2s. 36 + - description: 37 + Optional external i2s clock, parent of mout_i2s. If not specified, it 38 + is fixed to a clock named "iiscdclk0". 39 + 40 + clock-names: 41 + minItems: 4 42 + items: 43 + - const: hclk 44 + - const: xxti 45 + - const: fout_epll 46 + - const: sclk_audio0 47 + - const: iiscdclk0 48 + 49 + "#clock-cells": 50 + const: 1 51 + 52 + power-domains: 53 + maxItems: 1 54 + 55 + reg: 56 + maxItems: 1 57 + 58 + required: 59 + - compatible 60 + - clocks 61 + - clock-names 62 + - "#clock-cells" 63 + - reg 64 + 65 + additionalProperties: false 66 + 67 + examples: 68 + - | 69 + #include <dt-bindings/clock/s5pv210.h> 70 + 71 + clock-controller@c0900000 { 72 + compatible = "samsung,s5pv210-audss-clock"; 73 + reg = <0xc0900000 0x1000>; 74 + #clock-cells = <1>; 75 + clock-names = "hclk", "xxti", "fout_epll", "sclk_audio0"; 76 + clocks = <&clocks DOUT_HCLKP>, <&xxti>, <&clocks FOUT_EPLL>, 77 + <&clocks SCLK_AUDIO0>; 78 + };
+4
MAINTAINERS
··· 16519 16519 S: Supported 16520 16520 T: git git://git.kernel.org/pub/scm/linux/kernel/git/snawrocki/clk.git 16521 16521 F: Documentation/devicetree/bindings/clock/exynos*.txt 16522 + F: Documentation/devicetree/bindings/clock/samsung,*.yaml 16522 16523 F: Documentation/devicetree/bindings/clock/samsung,s3c* 16523 16524 F: Documentation/devicetree/bindings/clock/samsung,s5p* 16524 16525 F: drivers/clk/samsung/ 16525 16526 F: include/dt-bindings/clock/exynos*.h 16527 + F: include/dt-bindings/clock/s3c*.h 16528 + F: include/dt-bindings/clock/s5p*.h 16529 + F: include/dt-bindings/clock/samsung,*.h 16526 16530 F: include/linux/clk/samsung.h 16527 16531 F: include/linux/platform_data/clk-s3c2410.h 16528 16532
+6 -4
drivers/acpi/acpi_lpss.c
··· 385 385 386 386 static inline void lpt_register_clock_device(void) 387 387 { 388 - lpss_clk_dev = platform_device_register_simple("clk-lpt", -1, NULL, 0); 388 + lpss_clk_dev = platform_device_register_simple("clk-lpss-atom", 389 + PLATFORM_DEVID_NONE, 390 + NULL, 0); 389 391 } 390 392 391 393 static int register_device_clock(struct acpi_device *adev, ··· 436 434 if (!clk_name) 437 435 return -ENOMEM; 438 436 clk = clk_register_fractional_divider(NULL, clk_name, parent, 439 - 0, prv_base, 440 - 1, 15, 16, 15, 0, NULL); 437 + CLK_FRAC_DIVIDER_POWER_OF_TWO_PS, 438 + prv_base, 1, 15, 16, 15, 0, NULL); 441 439 parent = clk_name; 442 440 443 441 clk_name = kasprintf(GFP_KERNEL, "%s-update", devname); ··· 1339 1337 const struct x86_cpu_id *id; 1340 1338 int ret; 1341 1339 1342 - ret = lpt_clk_init(); 1340 + ret = lpss_atom_clk_init(); 1343 1341 if (ret) 1344 1342 return; 1345 1343
+17
drivers/base/power/clock_ops.c
··· 519 519 } 520 520 EXPORT_SYMBOL_GPL(pm_clk_destroy); 521 521 522 + static void pm_clk_destroy_action(void *data) 523 + { 524 + pm_clk_destroy(data); 525 + } 526 + 527 + int devm_pm_clk_create(struct device *dev) 528 + { 529 + int ret; 530 + 531 + ret = pm_clk_create(dev); 532 + if (ret) 533 + return ret; 534 + 535 + return devm_add_action_or_reset(dev, pm_clk_destroy_action, dev); 536 + } 537 + EXPORT_SYMBOL_GPL(devm_pm_clk_create); 538 + 522 539 /** 523 540 * pm_clk_suspend - Disable clocks in a device's PM clock list. 524 541 * @dev: Device to disable the clocks for.
+17
drivers/base/power/runtime.c
··· 1447 1447 } 1448 1448 EXPORT_SYMBOL_GPL(pm_runtime_enable); 1449 1449 1450 + static void pm_runtime_disable_action(void *data) 1451 + { 1452 + pm_runtime_disable(data); 1453 + } 1454 + 1455 + /** 1456 + * devm_pm_runtime_enable - devres-enabled version of pm_runtime_enable. 1457 + * @dev: Device to handle. 1458 + */ 1459 + int devm_pm_runtime_enable(struct device *dev) 1460 + { 1461 + pm_runtime_enable(dev); 1462 + 1463 + return devm_add_action_or_reset(dev, pm_runtime_disable_action, dev); 1464 + } 1465 + EXPORT_SYMBOL_GPL(devm_pm_runtime_enable); 1466 + 1450 1467 /** 1451 1468 * pm_runtime_forbid - Block runtime PM of a device. 1452 1469 * @dev: Device to handle.
+6
drivers/clk/at91/clk-generated.c
··· 128 128 int i; 129 129 u32 div; 130 130 131 + /* do not look for a rate that is outside of our range */ 132 + if (gck->range.max && req->rate > gck->range.max) 133 + req->rate = gck->range.max; 134 + if (gck->range.min && req->rate < gck->range.min) 135 + req->rate = gck->range.min; 136 + 131 137 for (i = 0; i < clk_hw_get_num_parents(hw); i++) { 132 138 if (gck->chg_pid == i) 133 139 continue;
+7 -7
drivers/clk/at91/sama7g5.c
··· 35 35 static DEFINE_SPINLOCK(pmc_mck0_lock); 36 36 static DEFINE_SPINLOCK(pmc_mckX_lock); 37 37 38 - /** 38 + /* 39 39 * PLL clocks identifiers 40 40 * @PLL_ID_CPU: CPU PLL identifier 41 41 * @PLL_ID_SYS: System PLL identifier ··· 56 56 PLL_ID_MAX, 57 57 }; 58 58 59 - /** 59 + /* 60 60 * PLL type identifiers 61 61 * @PLL_TYPE_FRAC: fractional PLL identifier 62 62 * @PLL_TYPE_DIV: divider PLL identifier ··· 118 118 .output = pll_outputs, 119 119 }; 120 120 121 - /** 121 + /* 122 122 * PLL clocks description 123 123 * @n: clock name 124 124 * @p: clock parent ··· 285 285 }, 286 286 }; 287 287 288 - /** 288 + /* 289 289 * Master clock (MCK[1..4]) description 290 290 * @n: clock name 291 291 * @ep: extra parents names array ··· 337 337 .c = 1, }, 338 338 }; 339 339 340 - /** 340 + /* 341 341 * System clock description 342 342 * @n: clock name 343 343 * @p: clock parent name ··· 361 361 /* Mux table for programmable clocks. */ 362 362 static u32 sama7g5_prog_mux_table[] = { 0, 1, 2, 5, 6, 7, 8, 9, 10, }; 363 363 364 - /** 364 + /* 365 365 * Peripheral clock description 366 366 * @n: clock name 367 367 * @p: clock parent name ··· 449 449 { .n = "uhphs_clk", .p = "mck1", .id = 106, }, 450 450 }; 451 451 452 - /** 452 + /* 453 453 * Generic clock description 454 454 * @n: clock name 455 455 * @pp: PLL parents
+4 -5
drivers/clk/bcm/clk-bcm2835.c
··· 805 805 return !(cprman_read(cprman, data->a2w_reg) & A2W_PLL_CHANNEL_DISABLE); 806 806 } 807 807 808 - static long bcm2835_pll_divider_round_rate(struct clk_hw *hw, 809 - unsigned long rate, 810 - unsigned long *parent_rate) 808 + static int bcm2835_pll_divider_determine_rate(struct clk_hw *hw, 809 + struct clk_rate_request *req) 811 810 { 812 - return clk_divider_ops.round_rate(hw, rate, parent_rate); 811 + return clk_divider_ops.determine_rate(hw, req); 813 812 } 814 813 815 814 static unsigned long bcm2835_pll_divider_get_rate(struct clk_hw *hw, ··· 900 901 .unprepare = bcm2835_pll_divider_off, 901 902 .recalc_rate = bcm2835_pll_divider_get_rate, 902 903 .set_rate = bcm2835_pll_divider_set_rate, 903 - .round_rate = bcm2835_pll_divider_round_rate, 904 + .determine_rate = bcm2835_pll_divider_determine_rate, 904 905 .debug_init = bcm2835_pll_divider_debug_init, 905 906 }; 906 907
+23
drivers/clk/clk-divider.c
··· 446 446 divider->width, divider->flags); 447 447 } 448 448 449 + static int clk_divider_determine_rate(struct clk_hw *hw, 450 + struct clk_rate_request *req) 451 + { 452 + struct clk_divider *divider = to_clk_divider(hw); 453 + 454 + /* if read only, just return current value */ 455 + if (divider->flags & CLK_DIVIDER_READ_ONLY) { 456 + u32 val; 457 + 458 + val = clk_div_readl(divider) >> divider->shift; 459 + val &= clk_div_mask(divider->width); 460 + 461 + return divider_ro_determine_rate(hw, req, divider->table, 462 + divider->width, 463 + divider->flags, val); 464 + } 465 + 466 + return divider_determine_rate(hw, req, divider->table, divider->width, 467 + divider->flags); 468 + } 469 + 449 470 int divider_get_val(unsigned long rate, unsigned long parent_rate, 450 471 const struct clk_div_table *table, u8 width, 451 472 unsigned long flags) ··· 522 501 const struct clk_ops clk_divider_ops = { 523 502 .recalc_rate = clk_divider_recalc_rate, 524 503 .round_rate = clk_divider_round_rate, 504 + .determine_rate = clk_divider_determine_rate, 525 505 .set_rate = clk_divider_set_rate, 526 506 }; 527 507 EXPORT_SYMBOL_GPL(clk_divider_ops); ··· 530 508 const struct clk_ops clk_divider_ro_ops = { 531 509 .recalc_rate = clk_divider_recalc_rate, 532 510 .round_rate = clk_divider_round_rate, 511 + .determine_rate = clk_divider_determine_rate, 533 512 }; 534 513 EXPORT_SYMBOL_GPL(clk_divider_ro_ops); 535 514
+47 -9
drivers/clk/clk-fractional-divider.c
··· 3 3 * Copyright (C) 2014 Intel Corporation 4 4 * 5 5 * Adjustable fractional divider clock implementation. 6 - * Output rate = (m / n) * parent_rate. 7 6 * Uses rational best approximation algorithm. 7 + * 8 + * Output is calculated as 9 + * 10 + * rate = (m / n) * parent_rate (1) 11 + * 12 + * This is useful when we have a prescaler block which asks for 13 + * m (numerator) and n (denominator) values to be provided to satisfy 14 + * the (1) as much as possible. 15 + * 16 + * Since m and n have the limitation by a range, e.g. 17 + * 18 + * n >= 1, n < N_width, where N_width = 2^nwidth (2) 19 + * 20 + * for some cases the output may be saturated. Hence, from (1) and (2), 21 + * assuming the worst case when m = 1, the inequality 22 + * 23 + * floor(log2(parent_rate / rate)) <= nwidth (3) 24 + * 25 + * may be derived. Thus, in cases when 26 + * 27 + * (parent_rate / rate) >> N_width (4) 28 + * 29 + * we might scale up the rate by 2^scale (see the description of 30 + * CLK_FRAC_DIVIDER_POWER_OF_TWO_PS for additional information), where 31 + * 32 + * scale = floor(log2(parent_rate / rate)) - nwidth (5) 33 + * 34 + * and assume that the IP, that needs m and n, has also its own 35 + * prescaler, which is capable to divide by 2^scale. In this way 36 + * we get the denominator to satisfy the desired range (2) and 37 + * at the same time much much better result of m and n than simple 38 + * saturated values. 8 39 */ 9 40 10 41 #include <linux/clk-provider.h> ··· 44 13 #include <linux/device.h> 45 14 #include <linux/slab.h> 46 15 #include <linux/rational.h> 16 + 17 + #include "clk-fractional-divider.h" 47 18 48 19 static inline u32 clk_fd_readl(struct clk_fractional_divider *fd) 49 20 { ··· 101 68 return ret; 102 69 } 103 70 104 - static void clk_fd_general_approximation(struct clk_hw *hw, unsigned long rate, 105 - unsigned long *parent_rate, 106 - unsigned long *m, unsigned long *n) 71 + void clk_fractional_divider_general_approximation(struct clk_hw *hw, 72 + unsigned long rate, 73 + unsigned long *parent_rate, 74 + unsigned long *m, unsigned long *n) 107 75 { 108 76 struct clk_fractional_divider *fd = to_clk_fd(hw); 109 - unsigned long scale; 110 77 111 78 /* 112 79 * Get rate closer to *parent_rate to guarantee there is no overflow 113 80 * for m and n. In the result it will be the nearest rate left shifted 114 81 * by (scale - fd->nwidth) bits. 82 + * 83 + * For the detailed explanation see the top comment in this file. 115 84 */ 116 - scale = fls_long(*parent_rate / rate - 1); 117 - if (scale > fd->nwidth) 118 - rate <<= scale - fd->nwidth; 85 + if (fd->flags & CLK_FRAC_DIVIDER_POWER_OF_TWO_PS) { 86 + unsigned long scale = fls_long(*parent_rate / rate - 1); 87 + 88 + if (scale > fd->nwidth) 89 + rate <<= scale - fd->nwidth; 90 + } 119 91 120 92 rational_best_approximation(rate, *parent_rate, 121 93 GENMASK(fd->mwidth - 1, 0), GENMASK(fd->nwidth - 1, 0), ··· 140 102 if (fd->approximation) 141 103 fd->approximation(hw, rate, parent_rate, &m, &n); 142 104 else 143 - clk_fd_general_approximation(hw, rate, parent_rate, &m, &n); 105 + clk_fractional_divider_general_approximation(hw, rate, parent_rate, &m, &n); 144 106 145 107 ret = (u64)*parent_rate * m; 146 108 do_div(ret, n);
+15
drivers/clk/clk-fractional-divider.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 */ 2 + #ifndef _CLK_FRACTIONAL_DIV_H 3 + #define _CLK_FRACTIONAL_DIV_H 4 + 5 + struct clk_hw; 6 + 7 + extern const struct clk_ops clk_fractional_divider_ops; 8 + 9 + void clk_fractional_divider_general_approximation(struct clk_hw *hw, 10 + unsigned long rate, 11 + unsigned long *parent_rate, 12 + unsigned long *m, 13 + unsigned long *n); 14 + 15 + #endif
-18
drivers/clk/clk-lmk04832.c
··· 269 269 { 270 270 switch (reg) { 271 271 case LMK04832_REG_RST3W ... LMK04832_REG_ID_MASKREV: 272 - fallthrough; 273 272 case LMK04832_REG_ID_VNDR_MSB: 274 - fallthrough; 275 273 case LMK04832_REG_ID_VNDR_LSB: 276 - fallthrough; 277 274 case LMK04832_REG_CLKOUT_CTRL0(0) ... LMK04832_REG_PLL2_DLD_CNT_LSB: 278 - fallthrough; 279 275 case LMK04832_REG_PLL2_LD: 280 - fallthrough; 281 276 case LMK04832_REG_PLL2_PD: 282 - fallthrough; 283 277 case LMK04832_REG_PLL1R_RST: 284 - fallthrough; 285 278 case LMK04832_REG_CLR_PLL_LOST ... LMK04832_REG_RB_DAC_VAL_LSB: 286 - fallthrough; 287 279 case LMK04832_REG_RB_HOLDOVER: 288 - fallthrough; 289 280 case LMK04832_REG_SPI_LOCK: 290 281 return true; 291 282 default: ··· 288 297 { 289 298 switch (reg) { 290 299 case LMK04832_REG_RST3W: 291 - fallthrough; 292 300 case LMK04832_REG_POWERDOWN: 293 301 return true; 294 302 case LMK04832_REG_ID_DEV_TYPE ... LMK04832_REG_ID_MASKREV: 295 - fallthrough; 296 303 case LMK04832_REG_ID_VNDR_MSB: 297 - fallthrough; 298 304 case LMK04832_REG_ID_VNDR_LSB: 299 305 return false; 300 306 case LMK04832_REG_CLKOUT_CTRL0(0) ... LMK04832_REG_PLL2_DLD_CNT_LSB: 301 - fallthrough; 302 307 case LMK04832_REG_PLL2_LD: 303 - fallthrough; 304 308 case LMK04832_REG_PLL2_PD: 305 - fallthrough; 306 309 case LMK04832_REG_PLL1R_RST: 307 - fallthrough; 308 310 case LMK04832_REG_CLR_PLL_LOST ... LMK04832_REG_RB_DAC_VAL_LSB: 309 - fallthrough; 310 311 case LMK04832_REG_RB_HOLDOVER: 311 - fallthrough; 312 312 case LMK04832_REG_SPI_LOCK: 313 313 return true; 314 314 default:
+1 -9
drivers/clk/clk-palmas.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 1 2 /* 2 3 * Clock driver for Palmas device. 3 4 * ··· 7 6 * 8 7 * Author: Laxman Dewangan <ldewangan@nvidia.com> 9 8 * Peter Ujfalusi <peter.ujfalusi@ti.com> 10 - * 11 - * This program is free software; you can redistribute it and/or 12 - * modify it under the terms of the GNU General Public License as 13 - * published by the Free Software Foundation version 2. 14 - * 15 - * This program is distributed "as is" WITHOUT ANY WARRANTY of any kind, 16 - * whether express or implied; without even the implied warranty of 17 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 - * General Public License for more details. 19 9 */ 20 10 21 11 #include <linux/clk.h>
+4 -4
drivers/clk/clk-stm32f4.c
··· 709 709 return clk_divider_ops.recalc_rate(hw, parent_rate); 710 710 } 711 711 712 - static long stm32f4_pll_div_round_rate(struct clk_hw *hw, unsigned long rate, 713 - unsigned long *prate) 712 + static int stm32f4_pll_div_determine_rate(struct clk_hw *hw, 713 + struct clk_rate_request *req) 714 714 { 715 - return clk_divider_ops.round_rate(hw, rate, prate); 715 + return clk_divider_ops.determine_rate(hw, req); 716 716 } 717 717 718 718 static int stm32f4_pll_div_set_rate(struct clk_hw *hw, unsigned long rate, ··· 738 738 739 739 static const struct clk_ops stm32f4_pll_div_ops = { 740 740 .recalc_rate = stm32f4_pll_div_recalc_rate, 741 - .round_rate = stm32f4_pll_div_round_rate, 741 + .determine_rate = stm32f4_pll_div_determine_rate, 742 742 .set_rate = stm32f4_pll_div_set_rate, 743 743 }; 744 744
+4 -4
drivers/clk/clk-stm32h7.c
··· 845 845 return clk_divider_ops.recalc_rate(hw, parent_rate); 846 846 } 847 847 848 - static long odf_divider_round_rate(struct clk_hw *hw, unsigned long rate, 849 - unsigned long *prate) 848 + static int odf_divider_determine_rate(struct clk_hw *hw, 849 + struct clk_rate_request *req) 850 850 { 851 - return clk_divider_ops.round_rate(hw, rate, prate); 851 + return clk_divider_ops.determine_rate(hw, req); 852 852 } 853 853 854 854 static int odf_divider_set_rate(struct clk_hw *hw, unsigned long rate, ··· 875 875 876 876 static const struct clk_ops odf_divider_ops = { 877 877 .recalc_rate = odf_divider_recalc_rate, 878 - .round_rate = odf_divider_round_rate, 878 + .determine_rate = odf_divider_determine_rate, 879 879 .set_rate = odf_divider_set_rate, 880 880 }; 881 881
+3 -7
drivers/clk/clk-stm32mp1.c
··· 1076 1076 1077 1077 static int clk_divider_rtc_determine_rate(struct clk_hw *hw, struct clk_rate_request *req) 1078 1078 { 1079 - unsigned long best_parent_rate = req->best_parent_rate; 1079 + if (req->best_parent_hw == clk_hw_get_parent_by_index(hw, HSE_RTC)) 1080 + return clk_divider_ops.determine_rate(hw, req); 1080 1081 1081 - if (req->best_parent_hw == clk_hw_get_parent_by_index(hw, HSE_RTC)) { 1082 - req->rate = clk_divider_ops.round_rate(hw, req->rate, &best_parent_rate); 1083 - req->best_parent_rate = best_parent_rate; 1084 - } else { 1085 - req->rate = best_parent_rate; 1086 - } 1082 + req->rate = req->best_parent_rate; 1087 1083 1088 1084 return 0; 1089 1085 }
+33 -9
drivers/clk/clk-versaclock5.c
··· 907 907 908 908 static int vc5_probe(struct i2c_client *client, const struct i2c_device_id *id) 909 909 { 910 + unsigned int oe, sd, src_mask = 0, src_val = 0; 910 911 struct vc5_driver_data *vc5; 911 912 struct clk_init_data init; 912 913 const char *parent_names[2]; ··· 931 930 return -EPROBE_DEFER; 932 931 933 932 vc5->regmap = devm_regmap_init_i2c(client, &vc5_regmap_config); 934 - if (IS_ERR(vc5->regmap)) { 935 - dev_err(&client->dev, "failed to allocate register map\n"); 936 - return PTR_ERR(vc5->regmap); 933 + if (IS_ERR(vc5->regmap)) 934 + return dev_err_probe(&client->dev, PTR_ERR(vc5->regmap), 935 + "failed to allocate register map\n"); 936 + 937 + ret = of_property_read_u32(client->dev.of_node, "idt,shutdown", &sd); 938 + if (!ret) { 939 + src_mask |= VC5_PRIM_SRC_SHDN_EN_GBL_SHDN; 940 + if (sd) 941 + src_val |= VC5_PRIM_SRC_SHDN_EN_GBL_SHDN; 942 + } else if (ret != -EINVAL) { 943 + return dev_err_probe(&client->dev, ret, 944 + "could not read idt,shutdown\n"); 937 945 } 946 + 947 + ret = of_property_read_u32(client->dev.of_node, 948 + "idt,output-enable-active", &oe); 949 + if (!ret) { 950 + src_mask |= VC5_PRIM_SRC_SHDN_SP; 951 + if (oe) 952 + src_val |= VC5_PRIM_SRC_SHDN_SP; 953 + } else if (ret != -EINVAL) { 954 + return dev_err_probe(&client->dev, ret, 955 + "could not read idt,output-enable-active\n"); 956 + } 957 + 958 + regmap_update_bits(vc5->regmap, VC5_PRIM_SRC_SHDN, src_mask, src_val); 938 959 939 960 /* Register clock input mux */ 940 961 memset(&init, 0, sizeof(init)); ··· 980 957 __clk_get_name(vc5->pin_clkin); 981 958 } 982 959 983 - if (!init.num_parents) { 984 - dev_err(&client->dev, "no input clock specified!\n"); 985 - return -EINVAL; 986 - } 960 + if (!init.num_parents) 961 + return dev_err_probe(&client->dev, -EINVAL, 962 + "no input clock specified!\n"); 987 963 988 964 /* Configure Optional Loading Capacitance for external XTAL */ 989 965 if (!(vc5->chip_info->flags & VC5_HAS_INTERNAL_XTAL)) { ··· 1121 1099 1122 1100 ret = of_clk_add_hw_provider(client->dev.of_node, vc5_of_clk_get, vc5); 1123 1101 if (ret) { 1124 - dev_err(&client->dev, "unable to add clk provider\n"); 1102 + dev_err_probe(&client->dev, ret, 1103 + "unable to add clk provider\n"); 1125 1104 goto err_clk; 1126 1105 } 1127 1106 1128 1107 return 0; 1129 1108 1130 1109 err_clk_register: 1131 - dev_err(&client->dev, "unable to register %s\n", init.name); 1110 + dev_err_probe(&client->dev, ret, 1111 + "unable to register %s\n", init.name); 1132 1112 kfree(init.name); /* clock framework made a copy of the name */ 1133 1113 err_clk: 1134 1114 if (vc5->chip_info->flags & VC5_HAS_INTERNAL_XTAL)
+1
drivers/clk/imx/clk-composite-7ulp.c
··· 10 10 #include <linux/err.h> 11 11 #include <linux/slab.h> 12 12 13 + #include "../clk-fractional-divider.h" 13 14 #include "clk.h" 14 15 15 16 #define PCG_PCS_SHIFT 24
+2 -1
drivers/clk/imx/clk-composite-8m.c
··· 216 216 div->width = PCG_PREDIV_WIDTH; 217 217 divider_ops = &imx8m_clk_composite_divider_ops; 218 218 mux_ops = &clk_mux_ops; 219 - flags |= CLK_SET_PARENT_GATE; 219 + if (!(composite_flags & IMX_COMPOSITE_FW_MANAGED)) 220 + flags |= CLK_SET_PARENT_GATE; 220 221 } 221 222 222 223 div->lock = &imx_ccm_lock;
+5 -5
drivers/clk/imx/clk-divider-gate.c
··· 64 64 div->flags, div->width); 65 65 } 66 66 67 - static long clk_divider_round_rate(struct clk_hw *hw, unsigned long rate, 68 - unsigned long *prate) 67 + static int clk_divider_determine_rate(struct clk_hw *hw, 68 + struct clk_rate_request *req) 69 69 { 70 - return clk_divider_ops.round_rate(hw, rate, prate); 70 + return clk_divider_ops.determine_rate(hw, req); 71 71 } 72 72 73 73 static int clk_divider_gate_set_rate(struct clk_hw *hw, unsigned long rate, ··· 154 154 155 155 static const struct clk_ops clk_divider_gate_ro_ops = { 156 156 .recalc_rate = clk_divider_gate_recalc_rate_ro, 157 - .round_rate = clk_divider_round_rate, 157 + .determine_rate = clk_divider_determine_rate, 158 158 }; 159 159 160 160 static const struct clk_ops clk_divider_gate_ops = { 161 161 .recalc_rate = clk_divider_gate_recalc_rate, 162 - .round_rate = clk_divider_round_rate, 162 + .determine_rate = clk_divider_determine_rate, 163 163 .set_rate = clk_divider_gate_set_rate, 164 164 .enable = clk_divider_enable, 165 165 .disable = clk_divider_disable,
+6 -5
drivers/clk/imx/clk-imx8mm.c
··· 407 407 hws[IMX8MM_SYS_PLL2_500M] = imx_clk_hw_fixed_factor("sys_pll2_500m", "sys_pll2_500m_cg", 1, 2); 408 408 hws[IMX8MM_SYS_PLL2_1000M] = imx_clk_hw_fixed_factor("sys_pll2_1000m", "sys_pll2_out", 1, 1); 409 409 410 - hws[IMX8MM_CLK_CLKOUT1_SEL] = imx_clk_hw_mux("clkout1_sel", base + 0x128, 4, 4, clkout_sels, ARRAY_SIZE(clkout_sels)); 410 + hws[IMX8MM_CLK_CLKOUT1_SEL] = imx_clk_hw_mux2("clkout1_sel", base + 0x128, 4, 4, clkout_sels, ARRAY_SIZE(clkout_sels)); 411 411 hws[IMX8MM_CLK_CLKOUT1_DIV] = imx_clk_hw_divider("clkout1_div", "clkout1_sel", base + 0x128, 0, 4); 412 412 hws[IMX8MM_CLK_CLKOUT1] = imx_clk_hw_gate("clkout1", "clkout1_div", base + 0x128, 8); 413 - hws[IMX8MM_CLK_CLKOUT2_SEL] = imx_clk_hw_mux("clkout2_sel", base + 0x128, 20, 4, clkout_sels, ARRAY_SIZE(clkout_sels)); 413 + hws[IMX8MM_CLK_CLKOUT2_SEL] = imx_clk_hw_mux2("clkout2_sel", base + 0x128, 20, 4, clkout_sels, ARRAY_SIZE(clkout_sels)); 414 414 hws[IMX8MM_CLK_CLKOUT2_DIV] = imx_clk_hw_divider("clkout2_div", "clkout2_sel", base + 0x128, 16, 4); 415 415 hws[IMX8MM_CLK_CLKOUT2] = imx_clk_hw_gate("clkout2", "clkout2_div", base + 0x128, 24); 416 416 ··· 470 470 471 471 /* 472 472 * DRAM clocks are manipulated from TF-A outside clock framework. 473 - * Mark with GET_RATE_NOCACHE to always read div value from hardware 473 + * The fw_managed helper sets GET_RATE_NOCACHE and clears SET_PARENT_GATE 474 + * as div value should always be read from hardware 474 475 */ 475 - hws[IMX8MM_CLK_DRAM_ALT] = __imx8m_clk_hw_composite("dram_alt", imx8mm_dram_alt_sels, base + 0xa000, CLK_GET_RATE_NOCACHE); 476 - hws[IMX8MM_CLK_DRAM_APB] = __imx8m_clk_hw_composite("dram_apb", imx8mm_dram_apb_sels, base + 0xa080, CLK_IS_CRITICAL | CLK_GET_RATE_NOCACHE); 476 + hws[IMX8MM_CLK_DRAM_ALT] = imx8m_clk_hw_fw_managed_composite("dram_alt", imx8mm_dram_alt_sels, base + 0xa000); 477 + hws[IMX8MM_CLK_DRAM_APB] = imx8m_clk_hw_fw_managed_composite_critical("dram_apb", imx8mm_dram_apb_sels, base + 0xa080); 477 478 478 479 /* IP */ 479 480 hws[IMX8MM_CLK_VPU_G1] = imx8m_clk_hw_composite("vpu_g1", imx8mm_vpu_g1_sels, base + 0xa100);
+11 -5
drivers/clk/imx/clk-imx8mn.c
··· 40 40 41 41 static const char * const imx8mn_a53_core_sels[] = {"arm_a53_div", "arm_pll_out", }; 42 42 43 + static const char * const imx8mn_m7_sels[] = {"osc_24m", "sys_pll2_200m", "sys_pll2_250m", "vpu_pll_out", 44 + "sys_pll1_800m", "audio_pll1_out", "video_pll1_out", "sys_pll3_out", }; 45 + 43 46 static const char * const imx8mn_gpu_core_sels[] = {"osc_24m", "gpu_pll_out", "sys_pll1_800m", 44 47 "sys_pll3_out", "sys_pll2_1000m", "audio_pll1_out", 45 48 "video_pll1_out", "audio_pll2_out", }; ··· 405 402 hws[IMX8MN_SYS_PLL2_500M] = imx_clk_hw_fixed_factor("sys_pll2_500m", "sys_pll2_500m_cg", 1, 2); 406 403 hws[IMX8MN_SYS_PLL2_1000M] = imx_clk_hw_fixed_factor("sys_pll2_1000m", "sys_pll2_out", 1, 1); 407 404 408 - hws[IMX8MN_CLK_CLKOUT1_SEL] = imx_clk_hw_mux("clkout1_sel", base + 0x128, 4, 4, clkout_sels, ARRAY_SIZE(clkout_sels)); 405 + hws[IMX8MN_CLK_CLKOUT1_SEL] = imx_clk_hw_mux2("clkout1_sel", base + 0x128, 4, 4, clkout_sels, ARRAY_SIZE(clkout_sels)); 409 406 hws[IMX8MN_CLK_CLKOUT1_DIV] = imx_clk_hw_divider("clkout1_div", "clkout1_sel", base + 0x128, 0, 4); 410 407 hws[IMX8MN_CLK_CLKOUT1] = imx_clk_hw_gate("clkout1", "clkout1_div", base + 0x128, 8); 411 - hws[IMX8MN_CLK_CLKOUT2_SEL] = imx_clk_hw_mux("clkout2_sel", base + 0x128, 20, 4, clkout_sels, ARRAY_SIZE(clkout_sels)); 408 + hws[IMX8MN_CLK_CLKOUT2_SEL] = imx_clk_hw_mux2("clkout2_sel", base + 0x128, 20, 4, clkout_sels, ARRAY_SIZE(clkout_sels)); 412 409 hws[IMX8MN_CLK_CLKOUT2_DIV] = imx_clk_hw_divider("clkout2_div", "clkout2_sel", base + 0x128, 16, 4); 413 410 hws[IMX8MN_CLK_CLKOUT2] = imx_clk_hw_gate("clkout2", "clkout2_div", base + 0x128, 24); 414 411 ··· 423 420 hws[IMX8MN_CLK_A53_DIV] = imx8m_clk_hw_composite_core("arm_a53_div", imx8mn_a53_sels, base + 0x8000); 424 421 hws[IMX8MN_CLK_A53_SRC] = hws[IMX8MN_CLK_A53_DIV]; 425 422 hws[IMX8MN_CLK_A53_CG] = hws[IMX8MN_CLK_A53_DIV]; 423 + 424 + hws[IMX8MN_CLK_M7_CORE] = imx8m_clk_hw_composite_core("arm_m7_core", imx8mn_m7_sels, base + 0x8080); 426 425 427 426 hws[IMX8MN_CLK_GPU_CORE] = imx8m_clk_hw_composite_core("gpu_core", imx8mn_gpu_core_sels, base + 0x8180); 428 427 hws[IMX8MN_CLK_GPU_SHADER] = imx8m_clk_hw_composite_core("gpu_shader", imx8mn_gpu_shader_sels, base + 0x8200); ··· 458 453 459 454 /* 460 455 * DRAM clocks are manipulated from TF-A outside clock framework. 461 - * Mark with GET_RATE_NOCACHE to always read div value from hardware 456 + * The fw_managed helper sets GET_RATE_NOCACHE and clears SET_PARENT_GATE 457 + * as div value should always be read from hardware 462 458 */ 463 - hws[IMX8MN_CLK_DRAM_ALT] = __imx8m_clk_hw_composite("dram_alt", imx8mn_dram_alt_sels, base + 0xa000, CLK_GET_RATE_NOCACHE); 464 - hws[IMX8MN_CLK_DRAM_APB] = __imx8m_clk_hw_composite("dram_apb", imx8mn_dram_apb_sels, base + 0xa080, CLK_IS_CRITICAL | CLK_GET_RATE_NOCACHE); 459 + hws[IMX8MN_CLK_DRAM_ALT] = imx8m_clk_hw_fw_managed_composite("dram_alt", imx8mn_dram_alt_sels, base + 0xa000); 460 + hws[IMX8MN_CLK_DRAM_APB] = imx8m_clk_hw_fw_managed_composite_critical("dram_apb", imx8mn_dram_apb_sels, base + 0xa080); 465 461 466 462 hws[IMX8MN_CLK_DISP_PIXEL] = imx8m_clk_hw_composite("disp_pixel", imx8mn_disp_pixel_sels, base + 0xa500); 467 463 hws[IMX8MN_CLK_SAI2] = imx8m_clk_hw_composite("sai2", imx8mn_sai2_sels, base + 0xa600);
+4 -3
drivers/clk/imx/clk-imx8mq.c
··· 449 449 450 450 /* 451 451 * DRAM clocks are manipulated from TF-A outside clock framework. 452 - * Mark with GET_RATE_NOCACHE to always read div value from hardware 452 + * The fw_managed helper sets GET_RATE_NOCACHE and clears SET_PARENT_GATE 453 + * as div value should always be read from hardware 453 454 */ 454 455 hws[IMX8MQ_CLK_DRAM_CORE] = imx_clk_hw_mux2_flags("dram_core_clk", base + 0x9800, 24, 1, imx8mq_dram_core_sels, ARRAY_SIZE(imx8mq_dram_core_sels), CLK_IS_CRITICAL); 455 - hws[IMX8MQ_CLK_DRAM_ALT] = __imx8m_clk_hw_composite("dram_alt", imx8mq_dram_alt_sels, base + 0xa000, CLK_GET_RATE_NOCACHE); 456 - hws[IMX8MQ_CLK_DRAM_APB] = __imx8m_clk_hw_composite("dram_apb", imx8mq_dram_apb_sels, base + 0xa080, CLK_IS_CRITICAL | CLK_GET_RATE_NOCACHE); 456 + hws[IMX8MQ_CLK_DRAM_ALT] = imx8m_clk_hw_fw_managed_composite("dram_alt", imx8mq_dram_alt_sels, base + 0xa000); 457 + hws[IMX8MQ_CLK_DRAM_APB] = imx8m_clk_hw_fw_managed_composite_critical("dram_apb", imx8mq_dram_apb_sels, base + 0xa080); 457 458 458 459 /* IP */ 459 460 hws[IMX8MQ_CLK_VPU_G1] = imx8m_clk_hw_composite("vpu_g1", imx8mq_vpu_g1_sels, base + 0xa100);
+14 -2
drivers/clk/imx/clk.h
··· 530 530 struct clk *div, struct clk *mux, struct clk *pll, 531 531 struct clk *step); 532 532 533 - #define IMX_COMPOSITE_CORE BIT(0) 534 - #define IMX_COMPOSITE_BUS BIT(1) 533 + #define IMX_COMPOSITE_CORE BIT(0) 534 + #define IMX_COMPOSITE_BUS BIT(1) 535 + #define IMX_COMPOSITE_FW_MANAGED BIT(2) 535 536 536 537 struct clk_hw *imx8m_clk_hw_composite_flags(const char *name, 537 538 const char * const *parent_names, ··· 567 566 imx8m_clk_hw_composite_flags(name, parent_names, \ 568 567 ARRAY_SIZE(parent_names), reg, 0, \ 569 568 flags | CLK_SET_RATE_NO_REPARENT | CLK_OPS_PARENT_ENABLE) 569 + 570 + #define __imx8m_clk_hw_fw_managed_composite(name, parent_names, reg, flags) \ 571 + imx8m_clk_hw_composite_flags(name, parent_names, \ 572 + ARRAY_SIZE(parent_names), reg, IMX_COMPOSITE_FW_MANAGED, \ 573 + flags | CLK_GET_RATE_NOCACHE | CLK_SET_RATE_NO_REPARENT | CLK_OPS_PARENT_ENABLE) 574 + 575 + #define imx8m_clk_hw_fw_managed_composite(name, parent_names, reg) \ 576 + __imx8m_clk_hw_fw_managed_composite(name, parent_names, reg, 0) 577 + 578 + #define imx8m_clk_hw_fw_managed_composite_critical(name, parent_names, reg) \ 579 + __imx8m_clk_hw_fw_managed_composite(name, parent_names, reg, CLK_IS_CRITICAL) 570 580 571 581 #define __imx8m_clk_composite(name, parent_names, reg, flags) \ 572 582 to_clk(__imx8m_clk_hw_composite(name, parent_names, reg, flags))
+90 -15
drivers/clk/mediatek/Kconfig
··· 362 362 363 363 config COMMON_CLK_MT8167_AUDSYS 364 364 bool "Clock driver for MediaTek MT8167 audsys" 365 - depends on (ARCH_MEDIATEK && ARM64) || COMPILE_TEST 366 - select COMMON_CLK_MEDIATEK 367 - default ARCH_MEDIATEK 365 + depends on COMMON_CLK_MT8167 366 + default COMMON_CLK_MT8167 368 367 help 369 368 This driver supports MediaTek MT8167 audsys clocks. 370 369 371 370 config COMMON_CLK_MT8167_IMGSYS 372 371 bool "Clock driver for MediaTek MT8167 imgsys" 373 - depends on (ARCH_MEDIATEK && ARM64) || COMPILE_TEST 374 - select COMMON_CLK_MEDIATEK 375 - default ARCH_MEDIATEK 372 + depends on COMMON_CLK_MT8167 373 + default COMMON_CLK_MT8167 376 374 help 377 375 This driver supports MediaTek MT8167 imgsys clocks. 378 376 379 377 config COMMON_CLK_MT8167_MFGCFG 380 378 bool "Clock driver for MediaTek MT8167 mfgcfg" 381 - depends on (ARCH_MEDIATEK && ARM64) || COMPILE_TEST 382 - select COMMON_CLK_MEDIATEK 383 - default ARCH_MEDIATEK 379 + depends on COMMON_CLK_MT8167 380 + default COMMON_CLK_MT8167 384 381 help 385 382 This driver supports MediaTek MT8167 mfgcfg clocks. 386 383 387 384 config COMMON_CLK_MT8167_MMSYS 388 385 bool "Clock driver for MediaTek MT8167 mmsys" 389 - depends on (ARCH_MEDIATEK && ARM64) || COMPILE_TEST 390 - select COMMON_CLK_MEDIATEK 391 - default ARCH_MEDIATEK 386 + depends on COMMON_CLK_MT8167 387 + default COMMON_CLK_MT8167 392 388 help 393 389 This driver supports MediaTek MT8167 mmsys clocks. 394 390 395 391 config COMMON_CLK_MT8167_VDECSYS 396 392 bool "Clock driver for MediaTek MT8167 vdecsys" 397 - depends on (ARCH_MEDIATEK && ARM64) || COMPILE_TEST 398 - select COMMON_CLK_MEDIATEK 399 - default ARCH_MEDIATEK 393 + depends on COMMON_CLK_MT8167 394 + default COMMON_CLK_MT8167 400 395 help 401 396 This driver supports MediaTek MT8167 vdecsys clocks. 402 397 ··· 494 499 default COMMON_CLK_MT8183 495 500 help 496 501 This driver supports MediaTek MT8183 vencsys clocks. 502 + 503 + config COMMON_CLK_MT8192 504 + bool "Clock driver for MediaTek MT8192" 505 + depends on ARM64 || COMPILE_TEST 506 + select COMMON_CLK_MEDIATEK 507 + default ARM64 508 + help 509 + This driver supports MediaTek MT8192 basic clocks. 510 + 511 + config COMMON_CLK_MT8192_AUDSYS 512 + bool "Clock driver for MediaTek MT8192 audsys" 513 + depends on COMMON_CLK_MT8192 514 + help 515 + This driver supports MediaTek MT8192 audsys clocks. 516 + 517 + config COMMON_CLK_MT8192_CAMSYS 518 + bool "Clock driver for MediaTek MT8192 camsys" 519 + depends on COMMON_CLK_MT8192 520 + help 521 + This driver supports MediaTek MT8192 camsys and camsys_raw clocks. 522 + 523 + config COMMON_CLK_MT8192_IMGSYS 524 + bool "Clock driver for MediaTek MT8192 imgsys" 525 + depends on COMMON_CLK_MT8192 526 + help 527 + This driver supports MediaTek MT8192 imgsys and imgsys2 clocks. 528 + 529 + config COMMON_CLK_MT8192_IMP_IIC_WRAP 530 + bool "Clock driver for MediaTek MT8192 imp_iic_wrap" 531 + depends on COMMON_CLK_MT8192 532 + help 533 + This driver supports MediaTek MT8192 imp_iic_wrap clocks. 534 + 535 + config COMMON_CLK_MT8192_IPESYS 536 + bool "Clock driver for MediaTek MT8192 ipesys" 537 + depends on COMMON_CLK_MT8192 538 + help 539 + This driver supports MediaTek MT8192 ipesys clocks. 540 + 541 + config COMMON_CLK_MT8192_MDPSYS 542 + bool "Clock driver for MediaTek MT8192 mdpsys" 543 + depends on COMMON_CLK_MT8192 544 + help 545 + This driver supports MediaTek MT8192 mdpsys clocks. 546 + 547 + config COMMON_CLK_MT8192_MFGCFG 548 + bool "Clock driver for MediaTek MT8192 mfgcfg" 549 + depends on COMMON_CLK_MT8192 550 + help 551 + This driver supports MediaTek MT8192 mfgcfg clocks. 552 + 553 + config COMMON_CLK_MT8192_MMSYS 554 + bool "Clock driver for MediaTek MT8192 mmsys" 555 + depends on COMMON_CLK_MT8192 556 + help 557 + This driver supports MediaTek MT8192 mmsys clocks. 558 + 559 + config COMMON_CLK_MT8192_MSDC 560 + bool "Clock driver for MediaTek MT8192 msdc" 561 + depends on COMMON_CLK_MT8192 562 + help 563 + This driver supports MediaTek MT8192 msdc and msdc_top clocks. 564 + 565 + config COMMON_CLK_MT8192_SCP_ADSP 566 + bool "Clock driver for MediaTek MT8192 scp_adsp" 567 + depends on COMMON_CLK_MT8192 568 + help 569 + This driver supports MediaTek MT8192 scp_adsp clocks. 570 + 571 + config COMMON_CLK_MT8192_VDECSYS 572 + bool "Clock driver for MediaTek MT8192 vdecsys" 573 + depends on COMMON_CLK_MT8192 574 + help 575 + This driver supports MediaTek MT8192 vdecsys and vdecsys_soc clocks. 576 + 577 + config COMMON_CLK_MT8192_VENCSYS 578 + bool "Clock driver for MediaTek MT8192 vencsys" 579 + depends on COMMON_CLK_MT8192 580 + help 581 + This driver supports MediaTek MT8192 vencsys clocks. 497 582 498 583 config COMMON_CLK_MT8516 499 584 bool "Clock driver for MediaTek MT8516"
+13
drivers/clk/mediatek/Makefile
··· 67 67 obj-$(CONFIG_COMMON_CLK_MT8183_MMSYS) += clk-mt8183-mm.o 68 68 obj-$(CONFIG_COMMON_CLK_MT8183_VDECSYS) += clk-mt8183-vdec.o 69 69 obj-$(CONFIG_COMMON_CLK_MT8183_VENCSYS) += clk-mt8183-venc.o 70 + obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o 71 + obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o 72 + obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o 73 + obj-$(CONFIG_COMMON_CLK_MT8192_IMGSYS) += clk-mt8192-img.o 74 + obj-$(CONFIG_COMMON_CLK_MT8192_IMP_IIC_WRAP) += clk-mt8192-imp_iic_wrap.o 75 + obj-$(CONFIG_COMMON_CLK_MT8192_IPESYS) += clk-mt8192-ipe.o 76 + obj-$(CONFIG_COMMON_CLK_MT8192_MDPSYS) += clk-mt8192-mdp.o 77 + obj-$(CONFIG_COMMON_CLK_MT8192_MFGCFG) += clk-mt8192-mfg.o 78 + obj-$(CONFIG_COMMON_CLK_MT8192_MMSYS) += clk-mt8192-mm.o 79 + obj-$(CONFIG_COMMON_CLK_MT8192_MSDC) += clk-mt8192-msdc.o 80 + obj-$(CONFIG_COMMON_CLK_MT8192_SCP_ADSP) += clk-mt8192-scp_adsp.o 81 + obj-$(CONFIG_COMMON_CLK_MT8192_VDECSYS) += clk-mt8192-vdec.o 82 + obj-$(CONFIG_COMMON_CLK_MT8192_VENCSYS) += clk-mt8192-venc.o 70 83 obj-$(CONFIG_COMMON_CLK_MT8516) += clk-mt8516.o 71 84 obj-$(CONFIG_COMMON_CLK_MT8516_AUDSYS) += clk-mt8516-aud.o
+1 -1
drivers/clk/mediatek/clk-cpumux.c
··· 84 84 struct clk *clk; 85 85 struct regmap *regmap; 86 86 87 - regmap = syscon_node_to_regmap(node); 87 + regmap = device_node_to_regmap(node); 88 88 if (IS_ERR(regmap)) { 89 89 pr_err("Cannot find regmap for %pOF: %ld\n", node, 90 90 PTR_ERR(regmap));
+118
drivers/clk/mediatek/clk-mt8192-aud.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + // 3 + // Copyright (c) 2021 MediaTek Inc. 4 + // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 + 6 + #include <linux/clk-provider.h> 7 + #include <linux/of_platform.h> 8 + #include <linux/platform_device.h> 9 + 10 + #include "clk-mtk.h" 11 + #include "clk-gate.h" 12 + 13 + #include <dt-bindings/clock/mt8192-clk.h> 14 + 15 + static const struct mtk_gate_regs aud0_cg_regs = { 16 + .set_ofs = 0x0, 17 + .clr_ofs = 0x0, 18 + .sta_ofs = 0x0, 19 + }; 20 + 21 + static const struct mtk_gate_regs aud1_cg_regs = { 22 + .set_ofs = 0x4, 23 + .clr_ofs = 0x4, 24 + .sta_ofs = 0x4, 25 + }; 26 + 27 + static const struct mtk_gate_regs aud2_cg_regs = { 28 + .set_ofs = 0x8, 29 + .clr_ofs = 0x8, 30 + .sta_ofs = 0x8, 31 + }; 32 + 33 + #define GATE_AUD0(_id, _name, _parent, _shift) \ 34 + GATE_MTK(_id, _name, _parent, &aud0_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr) 35 + 36 + #define GATE_AUD1(_id, _name, _parent, _shift) \ 37 + GATE_MTK(_id, _name, _parent, &aud1_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr) 38 + 39 + #define GATE_AUD2(_id, _name, _parent, _shift) \ 40 + GATE_MTK(_id, _name, _parent, &aud2_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr) 41 + 42 + static const struct mtk_gate aud_clks[] = { 43 + /* AUD0 */ 44 + GATE_AUD0(CLK_AUD_AFE, "aud_afe", "audio_sel", 2), 45 + GATE_AUD0(CLK_AUD_22M, "aud_22m", "aud_engen1_sel", 8), 46 + GATE_AUD0(CLK_AUD_24M, "aud_24m", "aud_engen2_sel", 9), 47 + GATE_AUD0(CLK_AUD_APLL2_TUNER, "aud_apll2_tuner", "aud_engen2_sel", 18), 48 + GATE_AUD0(CLK_AUD_APLL_TUNER, "aud_apll_tuner", "aud_engen1_sel", 19), 49 + GATE_AUD0(CLK_AUD_TDM, "aud_tdm", "aud_1_sel", 20), 50 + GATE_AUD0(CLK_AUD_ADC, "aud_adc", "audio_sel", 24), 51 + GATE_AUD0(CLK_AUD_DAC, "aud_dac", "audio_sel", 25), 52 + GATE_AUD0(CLK_AUD_DAC_PREDIS, "aud_dac_predis", "audio_sel", 26), 53 + GATE_AUD0(CLK_AUD_TML, "aud_tml", "audio_sel", 27), 54 + GATE_AUD0(CLK_AUD_NLE, "aud_nle", "audio_sel", 28), 55 + /* AUD1 */ 56 + GATE_AUD1(CLK_AUD_I2S1_B, "aud_i2s1_b", "audio_sel", 4), 57 + GATE_AUD1(CLK_AUD_I2S2_B, "aud_i2s2_b", "audio_sel", 5), 58 + GATE_AUD1(CLK_AUD_I2S3_B, "aud_i2s3_b", "audio_sel", 6), 59 + GATE_AUD1(CLK_AUD_I2S4_B, "aud_i2s4_b", "audio_sel", 7), 60 + GATE_AUD1(CLK_AUD_CONNSYS_I2S_ASRC, "aud_connsys_i2s_asrc", "audio_sel", 12), 61 + GATE_AUD1(CLK_AUD_GENERAL1_ASRC, "aud_general1_asrc", "audio_sel", 13), 62 + GATE_AUD1(CLK_AUD_GENERAL2_ASRC, "aud_general2_asrc", "audio_sel", 14), 63 + GATE_AUD1(CLK_AUD_DAC_HIRES, "aud_dac_hires", "audio_h_sel", 15), 64 + GATE_AUD1(CLK_AUD_ADC_HIRES, "aud_adc_hires", "audio_h_sel", 16), 65 + GATE_AUD1(CLK_AUD_ADC_HIRES_TML, "aud_adc_hires_tml", "audio_h_sel", 17), 66 + GATE_AUD1(CLK_AUD_ADDA6_ADC, "aud_adda6_adc", "audio_sel", 20), 67 + GATE_AUD1(CLK_AUD_ADDA6_ADC_HIRES, "aud_adda6_adc_hires", "audio_h_sel", 21), 68 + GATE_AUD1(CLK_AUD_3RD_DAC, "aud_3rd_dac", "audio_sel", 28), 69 + GATE_AUD1(CLK_AUD_3RD_DAC_PREDIS, "aud_3rd_dac_predis", "audio_sel", 29), 70 + GATE_AUD1(CLK_AUD_3RD_DAC_TML, "aud_3rd_dac_tml", "audio_sel", 30), 71 + GATE_AUD1(CLK_AUD_3RD_DAC_HIRES, "aud_3rd_dac_hires", "audio_h_sel", 31), 72 + /* AUD2 */ 73 + GATE_AUD2(CLK_AUD_I2S5_B, "aud_i2s5_b", "audio_sel", 0), 74 + GATE_AUD2(CLK_AUD_I2S6_B, "aud_i2s6_b", "audio_sel", 1), 75 + GATE_AUD2(CLK_AUD_I2S7_B, "aud_i2s7_b", "audio_sel", 2), 76 + GATE_AUD2(CLK_AUD_I2S8_B, "aud_i2s8_b", "audio_sel", 3), 77 + GATE_AUD2(CLK_AUD_I2S9_B, "aud_i2s9_b", "audio_sel", 4), 78 + }; 79 + 80 + static int clk_mt8192_aud_probe(struct platform_device *pdev) 81 + { 82 + struct clk_onecell_data *clk_data; 83 + struct device_node *node = pdev->dev.of_node; 84 + int r; 85 + 86 + clk_data = mtk_alloc_clk_data(CLK_AUD_NR_CLK); 87 + if (!clk_data) 88 + return -ENOMEM; 89 + 90 + r = mtk_clk_register_gates(node, aud_clks, ARRAY_SIZE(aud_clks), clk_data); 91 + if (r) 92 + return r; 93 + 94 + r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); 95 + if (r) 96 + return r; 97 + 98 + r = devm_of_platform_populate(&pdev->dev); 99 + if (r) 100 + of_clk_del_provider(node); 101 + 102 + return r; 103 + } 104 + 105 + static const struct of_device_id of_match_clk_mt8192_aud[] = { 106 + { .compatible = "mediatek,mt8192-audsys", }, 107 + {} 108 + }; 109 + 110 + static struct platform_driver clk_mt8192_aud_drv = { 111 + .probe = clk_mt8192_aud_probe, 112 + .driver = { 113 + .name = "clk-mt8192-aud", 114 + .of_match_table = of_match_clk_mt8192_aud, 115 + }, 116 + }; 117 + 118 + builtin_platform_driver(clk_mt8192_aud_drv);
+107
drivers/clk/mediatek/clk-mt8192-cam.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + // 3 + // Copyright (c) 2021 MediaTek Inc. 4 + // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 + 6 + #include <linux/clk-provider.h> 7 + #include <linux/of_device.h> 8 + #include <linux/platform_device.h> 9 + 10 + #include "clk-mtk.h" 11 + #include "clk-gate.h" 12 + 13 + #include <dt-bindings/clock/mt8192-clk.h> 14 + 15 + static const struct mtk_gate_regs cam_cg_regs = { 16 + .set_ofs = 0x4, 17 + .clr_ofs = 0x8, 18 + .sta_ofs = 0x0, 19 + }; 20 + 21 + #define GATE_CAM(_id, _name, _parent, _shift) \ 22 + GATE_MTK(_id, _name, _parent, &cam_cg_regs, _shift, &mtk_clk_gate_ops_setclr) 23 + 24 + static const struct mtk_gate cam_clks[] = { 25 + GATE_CAM(CLK_CAM_LARB13, "cam_larb13", "cam_sel", 0), 26 + GATE_CAM(CLK_CAM_DFP_VAD, "cam_dfp_vad", "cam_sel", 1), 27 + GATE_CAM(CLK_CAM_LARB14, "cam_larb14", "cam_sel", 2), 28 + GATE_CAM(CLK_CAM_CAM, "cam_cam", "cam_sel", 6), 29 + GATE_CAM(CLK_CAM_CAMTG, "cam_camtg", "cam_sel", 7), 30 + GATE_CAM(CLK_CAM_SENINF, "cam_seninf", "cam_sel", 8), 31 + GATE_CAM(CLK_CAM_CAMSV0, "cam_camsv0", "cam_sel", 9), 32 + GATE_CAM(CLK_CAM_CAMSV1, "cam_camsv1", "cam_sel", 10), 33 + GATE_CAM(CLK_CAM_CAMSV2, "cam_camsv2", "cam_sel", 11), 34 + GATE_CAM(CLK_CAM_CAMSV3, "cam_camsv3", "cam_sel", 12), 35 + GATE_CAM(CLK_CAM_CCU0, "cam_ccu0", "cam_sel", 13), 36 + GATE_CAM(CLK_CAM_CCU1, "cam_ccu1", "cam_sel", 14), 37 + GATE_CAM(CLK_CAM_MRAW0, "cam_mraw0", "cam_sel", 15), 38 + GATE_CAM(CLK_CAM_FAKE_ENG, "cam_fake_eng", "cam_sel", 17), 39 + GATE_CAM(CLK_CAM_CCU_GALS, "cam_ccu_gals", "cam_sel", 18), 40 + GATE_CAM(CLK_CAM_CAM2MM_GALS, "cam2mm_gals", "cam_sel", 19), 41 + }; 42 + 43 + static const struct mtk_gate cam_rawa_clks[] = { 44 + GATE_CAM(CLK_CAM_RAWA_LARBX, "cam_rawa_larbx", "cam_sel", 0), 45 + GATE_CAM(CLK_CAM_RAWA_CAM, "cam_rawa_cam", "cam_sel", 1), 46 + GATE_CAM(CLK_CAM_RAWA_CAMTG, "cam_rawa_camtg", "cam_sel", 2), 47 + }; 48 + 49 + static const struct mtk_gate cam_rawb_clks[] = { 50 + GATE_CAM(CLK_CAM_RAWB_LARBX, "cam_rawb_larbx", "cam_sel", 0), 51 + GATE_CAM(CLK_CAM_RAWB_CAM, "cam_rawb_cam", "cam_sel", 1), 52 + GATE_CAM(CLK_CAM_RAWB_CAMTG, "cam_rawb_camtg", "cam_sel", 2), 53 + }; 54 + 55 + static const struct mtk_gate cam_rawc_clks[] = { 56 + GATE_CAM(CLK_CAM_RAWC_LARBX, "cam_rawc_larbx", "cam_sel", 0), 57 + GATE_CAM(CLK_CAM_RAWC_CAM, "cam_rawc_cam", "cam_sel", 1), 58 + GATE_CAM(CLK_CAM_RAWC_CAMTG, "cam_rawc_camtg", "cam_sel", 2), 59 + }; 60 + 61 + static const struct mtk_clk_desc cam_desc = { 62 + .clks = cam_clks, 63 + .num_clks = ARRAY_SIZE(cam_clks), 64 + }; 65 + 66 + static const struct mtk_clk_desc cam_rawa_desc = { 67 + .clks = cam_rawa_clks, 68 + .num_clks = ARRAY_SIZE(cam_rawa_clks), 69 + }; 70 + 71 + static const struct mtk_clk_desc cam_rawb_desc = { 72 + .clks = cam_rawb_clks, 73 + .num_clks = ARRAY_SIZE(cam_rawb_clks), 74 + }; 75 + 76 + static const struct mtk_clk_desc cam_rawc_desc = { 77 + .clks = cam_rawc_clks, 78 + .num_clks = ARRAY_SIZE(cam_rawc_clks), 79 + }; 80 + 81 + static const struct of_device_id of_match_clk_mt8192_cam[] = { 82 + { 83 + .compatible = "mediatek,mt8192-camsys", 84 + .data = &cam_desc, 85 + }, { 86 + .compatible = "mediatek,mt8192-camsys_rawa", 87 + .data = &cam_rawa_desc, 88 + }, { 89 + .compatible = "mediatek,mt8192-camsys_rawb", 90 + .data = &cam_rawb_desc, 91 + }, { 92 + .compatible = "mediatek,mt8192-camsys_rawc", 93 + .data = &cam_rawc_desc, 94 + }, { 95 + /* sentinel */ 96 + } 97 + }; 98 + 99 + static struct platform_driver clk_mt8192_cam_drv = { 100 + .probe = mtk_clk_simple_probe, 101 + .driver = { 102 + .name = "clk-mt8192-cam", 103 + .of_match_table = of_match_clk_mt8192_cam, 104 + }, 105 + }; 106 + 107 + builtin_platform_driver(clk_mt8192_cam_drv);
+70
drivers/clk/mediatek/clk-mt8192-img.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + // 3 + // Copyright (c) 2021 MediaTek Inc. 4 + // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 + 6 + #include <linux/clk-provider.h> 7 + #include <linux/of_device.h> 8 + #include <linux/platform_device.h> 9 + 10 + #include "clk-mtk.h" 11 + #include "clk-gate.h" 12 + 13 + #include <dt-bindings/clock/mt8192-clk.h> 14 + 15 + static const struct mtk_gate_regs img_cg_regs = { 16 + .set_ofs = 0x4, 17 + .clr_ofs = 0x8, 18 + .sta_ofs = 0x0, 19 + }; 20 + 21 + #define GATE_IMG(_id, _name, _parent, _shift) \ 22 + GATE_MTK(_id, _name, _parent, &img_cg_regs, _shift, &mtk_clk_gate_ops_setclr) 23 + 24 + static const struct mtk_gate img_clks[] = { 25 + GATE_IMG(CLK_IMG_LARB9, "img_larb9", "img1_sel", 0), 26 + GATE_IMG(CLK_IMG_LARB10, "img_larb10", "img1_sel", 1), 27 + GATE_IMG(CLK_IMG_DIP, "img_dip", "img1_sel", 2), 28 + GATE_IMG(CLK_IMG_GALS, "img_gals", "img1_sel", 12), 29 + }; 30 + 31 + static const struct mtk_gate img2_clks[] = { 32 + GATE_IMG(CLK_IMG2_LARB11, "img2_larb11", "img1_sel", 0), 33 + GATE_IMG(CLK_IMG2_LARB12, "img2_larb12", "img1_sel", 1), 34 + GATE_IMG(CLK_IMG2_MFB, "img2_mfb", "img1_sel", 6), 35 + GATE_IMG(CLK_IMG2_WPE, "img2_wpe", "img1_sel", 7), 36 + GATE_IMG(CLK_IMG2_MSS, "img2_mss", "img1_sel", 8), 37 + GATE_IMG(CLK_IMG2_GALS, "img2_gals", "img1_sel", 12), 38 + }; 39 + 40 + static const struct mtk_clk_desc img_desc = { 41 + .clks = img_clks, 42 + .num_clks = ARRAY_SIZE(img_clks), 43 + }; 44 + 45 + static const struct mtk_clk_desc img2_desc = { 46 + .clks = img2_clks, 47 + .num_clks = ARRAY_SIZE(img2_clks), 48 + }; 49 + 50 + static const struct of_device_id of_match_clk_mt8192_img[] = { 51 + { 52 + .compatible = "mediatek,mt8192-imgsys", 53 + .data = &img_desc, 54 + }, { 55 + .compatible = "mediatek,mt8192-imgsys2", 56 + .data = &img2_desc, 57 + }, { 58 + /* sentinel */ 59 + } 60 + }; 61 + 62 + static struct platform_driver clk_mt8192_img_drv = { 63 + .probe = mtk_clk_simple_probe, 64 + .driver = { 65 + .name = "clk-mt8192-img", 66 + .of_match_table = of_match_clk_mt8192_img, 67 + }, 68 + }; 69 + 70 + builtin_platform_driver(clk_mt8192_img_drv);
+119
drivers/clk/mediatek/clk-mt8192-imp_iic_wrap.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + // 3 + // Copyright (c) 2021 MediaTek Inc. 4 + // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 + 6 + #include <linux/clk-provider.h> 7 + #include <linux/of_device.h> 8 + #include <linux/platform_device.h> 9 + 10 + #include "clk-mtk.h" 11 + #include "clk-gate.h" 12 + 13 + #include <dt-bindings/clock/mt8192-clk.h> 14 + 15 + static const struct mtk_gate_regs imp_iic_wrap_cg_regs = { 16 + .set_ofs = 0xe08, 17 + .clr_ofs = 0xe04, 18 + .sta_ofs = 0xe00, 19 + }; 20 + 21 + #define GATE_IMP_IIC_WRAP(_id, _name, _parent, _shift) \ 22 + GATE_MTK_FLAGS(_id, _name, _parent, &imp_iic_wrap_cg_regs, _shift, \ 23 + &mtk_clk_gate_ops_setclr, CLK_OPS_PARENT_ENABLE) 24 + 25 + static const struct mtk_gate imp_iic_wrap_c_clks[] = { 26 + GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_C_I2C10, "imp_iic_wrap_c_i2c10", "infra_i2c0", 0), 27 + GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_C_I2C11, "imp_iic_wrap_c_i2c11", "infra_i2c0", 1), 28 + GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_C_I2C12, "imp_iic_wrap_c_i2c12", "infra_i2c0", 2), 29 + GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_C_I2C13, "imp_iic_wrap_c_i2c13", "infra_i2c0", 3), 30 + }; 31 + 32 + static const struct mtk_gate imp_iic_wrap_e_clks[] = { 33 + GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_E_I2C3, "imp_iic_wrap_e_i2c3", "infra_i2c0", 0), 34 + }; 35 + 36 + static const struct mtk_gate imp_iic_wrap_n_clks[] = { 37 + GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_N_I2C0, "imp_iic_wrap_n_i2c0", "infra_i2c0", 0), 38 + GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_N_I2C6, "imp_iic_wrap_n_i2c6", "infra_i2c0", 1), 39 + }; 40 + 41 + static const struct mtk_gate imp_iic_wrap_s_clks[] = { 42 + GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_S_I2C7, "imp_iic_wrap_s_i2c7", "infra_i2c0", 0), 43 + GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_S_I2C8, "imp_iic_wrap_s_i2c8", "infra_i2c0", 1), 44 + GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_S_I2C9, "imp_iic_wrap_s_i2c9", "infra_i2c0", 2), 45 + }; 46 + 47 + static const struct mtk_gate imp_iic_wrap_w_clks[] = { 48 + GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_W_I2C5, "imp_iic_wrap_w_i2c5", "infra_i2c0", 0), 49 + }; 50 + 51 + static const struct mtk_gate imp_iic_wrap_ws_clks[] = { 52 + GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_WS_I2C1, "imp_iic_wrap_ws_i2c1", "infra_i2c0", 0), 53 + GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_WS_I2C2, "imp_iic_wrap_ws_i2c2", "infra_i2c0", 1), 54 + GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_WS_I2C4, "imp_iic_wrap_ws_i2c4", "infra_i2c0", 2), 55 + }; 56 + 57 + static const struct mtk_clk_desc imp_iic_wrap_c_desc = { 58 + .clks = imp_iic_wrap_c_clks, 59 + .num_clks = ARRAY_SIZE(imp_iic_wrap_c_clks), 60 + }; 61 + 62 + static const struct mtk_clk_desc imp_iic_wrap_e_desc = { 63 + .clks = imp_iic_wrap_e_clks, 64 + .num_clks = ARRAY_SIZE(imp_iic_wrap_e_clks), 65 + }; 66 + 67 + static const struct mtk_clk_desc imp_iic_wrap_n_desc = { 68 + .clks = imp_iic_wrap_n_clks, 69 + .num_clks = ARRAY_SIZE(imp_iic_wrap_n_clks), 70 + }; 71 + 72 + static const struct mtk_clk_desc imp_iic_wrap_s_desc = { 73 + .clks = imp_iic_wrap_s_clks, 74 + .num_clks = ARRAY_SIZE(imp_iic_wrap_s_clks), 75 + }; 76 + 77 + static const struct mtk_clk_desc imp_iic_wrap_w_desc = { 78 + .clks = imp_iic_wrap_w_clks, 79 + .num_clks = ARRAY_SIZE(imp_iic_wrap_w_clks), 80 + }; 81 + 82 + static const struct mtk_clk_desc imp_iic_wrap_ws_desc = { 83 + .clks = imp_iic_wrap_ws_clks, 84 + .num_clks = ARRAY_SIZE(imp_iic_wrap_ws_clks), 85 + }; 86 + 87 + static const struct of_device_id of_match_clk_mt8192_imp_iic_wrap[] = { 88 + { 89 + .compatible = "mediatek,mt8192-imp_iic_wrap_c", 90 + .data = &imp_iic_wrap_c_desc, 91 + }, { 92 + .compatible = "mediatek,mt8192-imp_iic_wrap_e", 93 + .data = &imp_iic_wrap_e_desc, 94 + }, { 95 + .compatible = "mediatek,mt8192-imp_iic_wrap_n", 96 + .data = &imp_iic_wrap_n_desc, 97 + }, { 98 + .compatible = "mediatek,mt8192-imp_iic_wrap_s", 99 + .data = &imp_iic_wrap_s_desc, 100 + }, { 101 + .compatible = "mediatek,mt8192-imp_iic_wrap_w", 102 + .data = &imp_iic_wrap_w_desc, 103 + }, { 104 + .compatible = "mediatek,mt8192-imp_iic_wrap_ws", 105 + .data = &imp_iic_wrap_ws_desc, 106 + }, { 107 + /* sentinel */ 108 + } 109 + }; 110 + 111 + static struct platform_driver clk_mt8192_imp_iic_wrap_drv = { 112 + .probe = mtk_clk_simple_probe, 113 + .driver = { 114 + .name = "clk-mt8192-imp_iic_wrap", 115 + .of_match_table = of_match_clk_mt8192_imp_iic_wrap, 116 + }, 117 + }; 118 + 119 + builtin_platform_driver(clk_mt8192_imp_iic_wrap_drv);
+57
drivers/clk/mediatek/clk-mt8192-ipe.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + // 3 + // Copyright (c) 2021 MediaTek Inc. 4 + // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 + 6 + #include <linux/clk-provider.h> 7 + #include <linux/of_device.h> 8 + #include <linux/platform_device.h> 9 + 10 + #include "clk-mtk.h" 11 + #include "clk-gate.h" 12 + 13 + #include <dt-bindings/clock/mt8192-clk.h> 14 + 15 + static const struct mtk_gate_regs ipe_cg_regs = { 16 + .set_ofs = 0x4, 17 + .clr_ofs = 0x8, 18 + .sta_ofs = 0x0, 19 + }; 20 + 21 + #define GATE_IPE(_id, _name, _parent, _shift) \ 22 + GATE_MTK(_id, _name, _parent, &ipe_cg_regs, _shift, &mtk_clk_gate_ops_setclr) 23 + 24 + static const struct mtk_gate ipe_clks[] = { 25 + GATE_IPE(CLK_IPE_LARB19, "ipe_larb19", "ipe_sel", 0), 26 + GATE_IPE(CLK_IPE_LARB20, "ipe_larb20", "ipe_sel", 1), 27 + GATE_IPE(CLK_IPE_SMI_SUBCOM, "ipe_smi_subcom", "ipe_sel", 2), 28 + GATE_IPE(CLK_IPE_FD, "ipe_fd", "ipe_sel", 3), 29 + GATE_IPE(CLK_IPE_FE, "ipe_fe", "ipe_sel", 4), 30 + GATE_IPE(CLK_IPE_RSC, "ipe_rsc", "ipe_sel", 5), 31 + GATE_IPE(CLK_IPE_DPE, "ipe_dpe", "ipe_sel", 6), 32 + GATE_IPE(CLK_IPE_GALS, "ipe_gals", "ipe_sel", 8), 33 + }; 34 + 35 + static const struct mtk_clk_desc ipe_desc = { 36 + .clks = ipe_clks, 37 + .num_clks = ARRAY_SIZE(ipe_clks), 38 + }; 39 + 40 + static const struct of_device_id of_match_clk_mt8192_ipe[] = { 41 + { 42 + .compatible = "mediatek,mt8192-ipesys", 43 + .data = &ipe_desc, 44 + }, { 45 + /* sentinel */ 46 + } 47 + }; 48 + 49 + static struct platform_driver clk_mt8192_ipe_drv = { 50 + .probe = mtk_clk_simple_probe, 51 + .driver = { 52 + .name = "clk-mt8192-ipe", 53 + .of_match_table = of_match_clk_mt8192_ipe, 54 + }, 55 + }; 56 + 57 + builtin_platform_driver(clk_mt8192_ipe_drv);
+82
drivers/clk/mediatek/clk-mt8192-mdp.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + // 3 + // Copyright (c) 2021 MediaTek Inc. 4 + // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 + 6 + #include <linux/clk-provider.h> 7 + #include <linux/of_device.h> 8 + #include <linux/platform_device.h> 9 + 10 + #include "clk-mtk.h" 11 + #include "clk-gate.h" 12 + 13 + #include <dt-bindings/clock/mt8192-clk.h> 14 + 15 + static const struct mtk_gate_regs mdp0_cg_regs = { 16 + .set_ofs = 0x104, 17 + .clr_ofs = 0x108, 18 + .sta_ofs = 0x100, 19 + }; 20 + 21 + static const struct mtk_gate_regs mdp1_cg_regs = { 22 + .set_ofs = 0x124, 23 + .clr_ofs = 0x128, 24 + .sta_ofs = 0x120, 25 + }; 26 + 27 + #define GATE_MDP0(_id, _name, _parent, _shift) \ 28 + GATE_MTK(_id, _name, _parent, &mdp0_cg_regs, _shift, &mtk_clk_gate_ops_setclr) 29 + 30 + #define GATE_MDP1(_id, _name, _parent, _shift) \ 31 + GATE_MTK(_id, _name, _parent, &mdp1_cg_regs, _shift, &mtk_clk_gate_ops_setclr) 32 + 33 + static const struct mtk_gate mdp_clks[] = { 34 + /* MDP0 */ 35 + GATE_MDP0(CLK_MDP_RDMA0, "mdp_mdp_rdma0", "mdp_sel", 0), 36 + GATE_MDP0(CLK_MDP_TDSHP0, "mdp_mdp_tdshp0", "mdp_sel", 1), 37 + GATE_MDP0(CLK_MDP_IMG_DL_ASYNC0, "mdp_img_dl_async0", "mdp_sel", 2), 38 + GATE_MDP0(CLK_MDP_IMG_DL_ASYNC1, "mdp_img_dl_async1", "mdp_sel", 3), 39 + GATE_MDP0(CLK_MDP_RDMA1, "mdp_mdp_rdma1", "mdp_sel", 4), 40 + GATE_MDP0(CLK_MDP_TDSHP1, "mdp_mdp_tdshp1", "mdp_sel", 5), 41 + GATE_MDP0(CLK_MDP_SMI0, "mdp_smi0", "mdp_sel", 6), 42 + GATE_MDP0(CLK_MDP_APB_BUS, "mdp_apb_bus", "mdp_sel", 7), 43 + GATE_MDP0(CLK_MDP_WROT0, "mdp_mdp_wrot0", "mdp_sel", 8), 44 + GATE_MDP0(CLK_MDP_RSZ0, "mdp_mdp_rsz0", "mdp_sel", 9), 45 + GATE_MDP0(CLK_MDP_HDR0, "mdp_mdp_hdr0", "mdp_sel", 10), 46 + GATE_MDP0(CLK_MDP_MUTEX0, "mdp_mdp_mutex0", "mdp_sel", 11), 47 + GATE_MDP0(CLK_MDP_WROT1, "mdp_mdp_wrot1", "mdp_sel", 12), 48 + GATE_MDP0(CLK_MDP_RSZ1, "mdp_mdp_rsz1", "mdp_sel", 13), 49 + GATE_MDP0(CLK_MDP_HDR1, "mdp_mdp_hdr1", "mdp_sel", 14), 50 + GATE_MDP0(CLK_MDP_FAKE_ENG0, "mdp_mdp_fake_eng0", "mdp_sel", 15), 51 + GATE_MDP0(CLK_MDP_AAL0, "mdp_mdp_aal0", "mdp_sel", 16), 52 + GATE_MDP0(CLK_MDP_AAL1, "mdp_mdp_aal1", "mdp_sel", 17), 53 + GATE_MDP0(CLK_MDP_COLOR0, "mdp_mdp_color0", "mdp_sel", 18), 54 + GATE_MDP0(CLK_MDP_COLOR1, "mdp_mdp_color1", "mdp_sel", 19), 55 + /* MDP1 */ 56 + GATE_MDP1(CLK_MDP_IMG_DL_RELAY0_ASYNC0, "mdp_img_dl_relay0_async0", "mdp_sel", 0), 57 + GATE_MDP1(CLK_MDP_IMG_DL_RELAY1_ASYNC1, "mdp_img_dl_relay1_async1", "mdp_sel", 8), 58 + }; 59 + 60 + static const struct mtk_clk_desc mdp_desc = { 61 + .clks = mdp_clks, 62 + .num_clks = ARRAY_SIZE(mdp_clks), 63 + }; 64 + 65 + static const struct of_device_id of_match_clk_mt8192_mdp[] = { 66 + { 67 + .compatible = "mediatek,mt8192-mdpsys", 68 + .data = &mdp_desc, 69 + }, { 70 + /* sentinel */ 71 + } 72 + }; 73 + 74 + static struct platform_driver clk_mt8192_mdp_drv = { 75 + .probe = mtk_clk_simple_probe, 76 + .driver = { 77 + .name = "clk-mt8192-mdp", 78 + .of_match_table = of_match_clk_mt8192_mdp, 79 + }, 80 + }; 81 + 82 + builtin_platform_driver(clk_mt8192_mdp_drv);
+50
drivers/clk/mediatek/clk-mt8192-mfg.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + // 3 + // Copyright (c) 2021 MediaTek Inc. 4 + // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 + 6 + #include <linux/clk-provider.h> 7 + #include <linux/of_device.h> 8 + #include <linux/platform_device.h> 9 + 10 + #include "clk-mtk.h" 11 + #include "clk-gate.h" 12 + 13 + #include <dt-bindings/clock/mt8192-clk.h> 14 + 15 + static const struct mtk_gate_regs mfg_cg_regs = { 16 + .set_ofs = 0x4, 17 + .clr_ofs = 0x8, 18 + .sta_ofs = 0x0, 19 + }; 20 + 21 + #define GATE_MFG(_id, _name, _parent, _shift) \ 22 + GATE_MTK(_id, _name, _parent, &mfg_cg_regs, _shift, &mtk_clk_gate_ops_setclr) 23 + 24 + static const struct mtk_gate mfg_clks[] = { 25 + GATE_MFG(CLK_MFG_BG3D, "mfg_bg3d", "mfg_pll_sel", 0), 26 + }; 27 + 28 + static const struct mtk_clk_desc mfg_desc = { 29 + .clks = mfg_clks, 30 + .num_clks = ARRAY_SIZE(mfg_clks), 31 + }; 32 + 33 + static const struct of_device_id of_match_clk_mt8192_mfg[] = { 34 + { 35 + .compatible = "mediatek,mt8192-mfgcfg", 36 + .data = &mfg_desc, 37 + }, { 38 + /* sentinel */ 39 + } 40 + }; 41 + 42 + static struct platform_driver clk_mt8192_mfg_drv = { 43 + .probe = mtk_clk_simple_probe, 44 + .driver = { 45 + .name = "clk-mt8192-mfg", 46 + .of_match_table = of_match_clk_mt8192_mfg, 47 + }, 48 + }; 49 + 50 + builtin_platform_driver(clk_mt8192_mfg_drv);
+108
drivers/clk/mediatek/clk-mt8192-mm.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + // 3 + // Copyright (c) 2021 MediaTek Inc. 4 + // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 + 6 + #include <linux/clk-provider.h> 7 + #include <linux/platform_device.h> 8 + 9 + #include "clk-mtk.h" 10 + #include "clk-gate.h" 11 + 12 + #include <dt-bindings/clock/mt8192-clk.h> 13 + 14 + static const struct mtk_gate_regs mm0_cg_regs = { 15 + .set_ofs = 0x104, 16 + .clr_ofs = 0x108, 17 + .sta_ofs = 0x100, 18 + }; 19 + 20 + static const struct mtk_gate_regs mm1_cg_regs = { 21 + .set_ofs = 0x114, 22 + .clr_ofs = 0x118, 23 + .sta_ofs = 0x110, 24 + }; 25 + 26 + static const struct mtk_gate_regs mm2_cg_regs = { 27 + .set_ofs = 0x1a4, 28 + .clr_ofs = 0x1a8, 29 + .sta_ofs = 0x1a0, 30 + }; 31 + 32 + #define GATE_MM0(_id, _name, _parent, _shift) \ 33 + GATE_MTK(_id, _name, _parent, &mm0_cg_regs, _shift, &mtk_clk_gate_ops_setclr) 34 + 35 + #define GATE_MM1(_id, _name, _parent, _shift) \ 36 + GATE_MTK(_id, _name, _parent, &mm1_cg_regs, _shift, &mtk_clk_gate_ops_setclr) 37 + 38 + #define GATE_MM2(_id, _name, _parent, _shift) \ 39 + GATE_MTK(_id, _name, _parent, &mm2_cg_regs, _shift, &mtk_clk_gate_ops_setclr) 40 + 41 + static const struct mtk_gate mm_clks[] = { 42 + /* MM0 */ 43 + GATE_MM0(CLK_MM_DISP_MUTEX0, "mm_disp_mutex0", "disp_sel", 0), 44 + GATE_MM0(CLK_MM_DISP_CONFIG, "mm_disp_config", "disp_sel", 1), 45 + GATE_MM0(CLK_MM_DISP_OVL0, "mm_disp_ovl0", "disp_sel", 2), 46 + GATE_MM0(CLK_MM_DISP_RDMA0, "mm_disp_rdma0", "disp_sel", 3), 47 + GATE_MM0(CLK_MM_DISP_OVL0_2L, "mm_disp_ovl0_2l", "disp_sel", 4), 48 + GATE_MM0(CLK_MM_DISP_WDMA0, "mm_disp_wdma0", "disp_sel", 5), 49 + GATE_MM0(CLK_MM_DISP_UFBC_WDMA0, "mm_disp_ufbc_wdma0", "disp_sel", 6), 50 + GATE_MM0(CLK_MM_DISP_RSZ0, "mm_disp_rsz0", "disp_sel", 7), 51 + GATE_MM0(CLK_MM_DISP_AAL0, "mm_disp_aal0", "disp_sel", 8), 52 + GATE_MM0(CLK_MM_DISP_CCORR0, "mm_disp_ccorr0", "disp_sel", 9), 53 + GATE_MM0(CLK_MM_DISP_DITHER0, "mm_disp_dither0", "disp_sel", 10), 54 + GATE_MM0(CLK_MM_SMI_INFRA, "mm_smi_infra", "disp_sel", 11), 55 + GATE_MM0(CLK_MM_DISP_GAMMA0, "mm_disp_gamma0", "disp_sel", 12), 56 + GATE_MM0(CLK_MM_DISP_POSTMASK0, "mm_disp_postmask0", "disp_sel", 13), 57 + GATE_MM0(CLK_MM_DISP_DSC_WRAP0, "mm_disp_dsc_wrap0", "disp_sel", 14), 58 + GATE_MM0(CLK_MM_DSI0, "mm_dsi0", "disp_sel", 15), 59 + GATE_MM0(CLK_MM_DISP_COLOR0, "mm_disp_color0", "disp_sel", 16), 60 + GATE_MM0(CLK_MM_SMI_COMMON, "mm_smi_common", "disp_sel", 17), 61 + GATE_MM0(CLK_MM_DISP_FAKE_ENG0, "mm_disp_fake_eng0", "disp_sel", 18), 62 + GATE_MM0(CLK_MM_DISP_FAKE_ENG1, "mm_disp_fake_eng1", "disp_sel", 19), 63 + GATE_MM0(CLK_MM_MDP_TDSHP4, "mm_mdp_tdshp4", "disp_sel", 20), 64 + GATE_MM0(CLK_MM_MDP_RSZ4, "mm_mdp_rsz4", "disp_sel", 21), 65 + GATE_MM0(CLK_MM_MDP_AAL4, "mm_mdp_aal4", "disp_sel", 22), 66 + GATE_MM0(CLK_MM_MDP_HDR4, "mm_mdp_hdr4", "disp_sel", 23), 67 + GATE_MM0(CLK_MM_MDP_RDMA4, "mm_mdp_rdma4", "disp_sel", 24), 68 + GATE_MM0(CLK_MM_MDP_COLOR4, "mm_mdp_color4", "disp_sel", 25), 69 + GATE_MM0(CLK_MM_DISP_Y2R0, "mm_disp_y2r0", "disp_sel", 26), 70 + GATE_MM0(CLK_MM_SMI_GALS, "mm_smi_gals", "disp_sel", 27), 71 + GATE_MM0(CLK_MM_DISP_OVL2_2L, "mm_disp_ovl2_2l", "disp_sel", 28), 72 + GATE_MM0(CLK_MM_DISP_RDMA4, "mm_disp_rdma4", "disp_sel", 29), 73 + GATE_MM0(CLK_MM_DISP_DPI0, "mm_disp_dpi0", "disp_sel", 30), 74 + /* MM1 */ 75 + GATE_MM1(CLK_MM_SMI_IOMMU, "mm_smi_iommu", "disp_sel", 0), 76 + /* MM2 */ 77 + GATE_MM2(CLK_MM_DSI_DSI0, "mm_dsi_dsi0", "disp_sel", 0), 78 + GATE_MM2(CLK_MM_DPI_DPI0, "mm_dpi_dpi0", "dpi_sel", 8), 79 + GATE_MM2(CLK_MM_26MHZ, "mm_26mhz", "clk26m", 24), 80 + GATE_MM2(CLK_MM_32KHZ, "mm_32khz", "clk32k", 25), 81 + }; 82 + 83 + static int clk_mt8192_mm_probe(struct platform_device *pdev) 84 + { 85 + struct device *dev = &pdev->dev; 86 + struct device_node *node = dev->parent->of_node; 87 + struct clk_onecell_data *clk_data; 88 + int r; 89 + 90 + clk_data = mtk_alloc_clk_data(CLK_MM_NR_CLK); 91 + if (!clk_data) 92 + return -ENOMEM; 93 + 94 + r = mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks), clk_data); 95 + if (r) 96 + return r; 97 + 98 + return of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); 99 + } 100 + 101 + static struct platform_driver clk_mt8192_mm_drv = { 102 + .probe = clk_mt8192_mm_probe, 103 + .driver = { 104 + .name = "clk-mt8192-mm", 105 + }, 106 + }; 107 + 108 + builtin_platform_driver(clk_mt8192_mm_drv);
+85
drivers/clk/mediatek/clk-mt8192-msdc.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + // 3 + // Copyright (c) 2021 MediaTek Inc. 4 + // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 + 6 + #include <linux/clk-provider.h> 7 + #include <linux/of_device.h> 8 + #include <linux/platform_device.h> 9 + 10 + #include "clk-mtk.h" 11 + #include "clk-gate.h" 12 + 13 + #include <dt-bindings/clock/mt8192-clk.h> 14 + 15 + static const struct mtk_gate_regs msdc_cg_regs = { 16 + .set_ofs = 0xb4, 17 + .clr_ofs = 0xb4, 18 + .sta_ofs = 0xb4, 19 + }; 20 + 21 + static const struct mtk_gate_regs msdc_top_cg_regs = { 22 + .set_ofs = 0x0, 23 + .clr_ofs = 0x0, 24 + .sta_ofs = 0x0, 25 + }; 26 + 27 + #define GATE_MSDC(_id, _name, _parent, _shift) \ 28 + GATE_MTK(_id, _name, _parent, &msdc_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr_inv) 29 + 30 + #define GATE_MSDC_TOP(_id, _name, _parent, _shift) \ 31 + GATE_MTK(_id, _name, _parent, &msdc_top_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr_inv) 32 + 33 + static const struct mtk_gate msdc_clks[] = { 34 + GATE_MSDC(CLK_MSDC_AXI_WRAP, "msdc_axi_wrap", "axi_sel", 22), 35 + }; 36 + 37 + static const struct mtk_gate msdc_top_clks[] = { 38 + GATE_MSDC_TOP(CLK_MSDC_TOP_AES_0P, "msdc_top_aes_0p", "aes_msdcfde_sel", 0), 39 + GATE_MSDC_TOP(CLK_MSDC_TOP_SRC_0P, "msdc_top_src_0p", "infra_msdc0_src", 1), 40 + GATE_MSDC_TOP(CLK_MSDC_TOP_SRC_1P, "msdc_top_src_1p", "infra_msdc1_src", 2), 41 + GATE_MSDC_TOP(CLK_MSDC_TOP_SRC_2P, "msdc_top_src_2p", "infra_msdc2_src", 3), 42 + GATE_MSDC_TOP(CLK_MSDC_TOP_P_MSDC0, "msdc_top_p_msdc0", "axi_sel", 4), 43 + GATE_MSDC_TOP(CLK_MSDC_TOP_P_MSDC1, "msdc_top_p_msdc1", "axi_sel", 5), 44 + GATE_MSDC_TOP(CLK_MSDC_TOP_P_MSDC2, "msdc_top_p_msdc2", "axi_sel", 6), 45 + GATE_MSDC_TOP(CLK_MSDC_TOP_P_CFG, "msdc_top_p_cfg", "axi_sel", 7), 46 + GATE_MSDC_TOP(CLK_MSDC_TOP_AXI, "msdc_top_axi", "axi_sel", 8), 47 + GATE_MSDC_TOP(CLK_MSDC_TOP_H_MST_0P, "msdc_top_h_mst_0p", "infra_msdc0", 9), 48 + GATE_MSDC_TOP(CLK_MSDC_TOP_H_MST_1P, "msdc_top_h_mst_1p", "infra_msdc1", 10), 49 + GATE_MSDC_TOP(CLK_MSDC_TOP_H_MST_2P, "msdc_top_h_mst_2p", "infra_msdc2", 11), 50 + GATE_MSDC_TOP(CLK_MSDC_TOP_MEM_OFF_DLY_26M, "msdc_top_mem_off_dly_26m", "clk26m", 12), 51 + GATE_MSDC_TOP(CLK_MSDC_TOP_32K, "msdc_top_32k", "clk32k", 13), 52 + GATE_MSDC_TOP(CLK_MSDC_TOP_AHB2AXI_BRG_AXI, "msdc_top_ahb2axi_brg_axi", "axi_sel", 14), 53 + }; 54 + 55 + static const struct mtk_clk_desc msdc_desc = { 56 + .clks = msdc_clks, 57 + .num_clks = ARRAY_SIZE(msdc_clks), 58 + }; 59 + 60 + static const struct mtk_clk_desc msdc_top_desc = { 61 + .clks = msdc_top_clks, 62 + .num_clks = ARRAY_SIZE(msdc_top_clks), 63 + }; 64 + 65 + static const struct of_device_id of_match_clk_mt8192_msdc[] = { 66 + { 67 + .compatible = "mediatek,mt8192-msdc", 68 + .data = &msdc_desc, 69 + }, { 70 + .compatible = "mediatek,mt8192-msdc_top", 71 + .data = &msdc_top_desc, 72 + }, { 73 + /* sentinel */ 74 + } 75 + }; 76 + 77 + static struct platform_driver clk_mt8192_msdc_drv = { 78 + .probe = mtk_clk_simple_probe, 79 + .driver = { 80 + .name = "clk-mt8192-msdc", 81 + .of_match_table = of_match_clk_mt8192_msdc, 82 + }, 83 + }; 84 + 85 + builtin_platform_driver(clk_mt8192_msdc_drv);
+50
drivers/clk/mediatek/clk-mt8192-scp_adsp.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + // 3 + // Copyright (c) 2021 MediaTek Inc. 4 + // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 + 6 + #include <linux/clk-provider.h> 7 + #include <linux/of_device.h> 8 + #include <linux/platform_device.h> 9 + 10 + #include "clk-mtk.h" 11 + #include "clk-gate.h" 12 + 13 + #include <dt-bindings/clock/mt8192-clk.h> 14 + 15 + static const struct mtk_gate_regs scp_adsp_cg_regs = { 16 + .set_ofs = 0x180, 17 + .clr_ofs = 0x180, 18 + .sta_ofs = 0x180, 19 + }; 20 + 21 + #define GATE_SCP_ADSP(_id, _name, _parent, _shift) \ 22 + GATE_MTK(_id, _name, _parent, &scp_adsp_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr) 23 + 24 + static const struct mtk_gate scp_adsp_clks[] = { 25 + GATE_SCP_ADSP(CLK_SCP_ADSP_AUDIODSP, "scp_adsp_audiodsp", "adsp_sel", 0), 26 + }; 27 + 28 + static const struct mtk_clk_desc scp_adsp_desc = { 29 + .clks = scp_adsp_clks, 30 + .num_clks = ARRAY_SIZE(scp_adsp_clks), 31 + }; 32 + 33 + static const struct of_device_id of_match_clk_mt8192_scp_adsp[] = { 34 + { 35 + .compatible = "mediatek,mt8192-scp_adsp", 36 + .data = &scp_adsp_desc, 37 + }, { 38 + /* sentinel */ 39 + } 40 + }; 41 + 42 + static struct platform_driver clk_mt8192_scp_adsp_drv = { 43 + .probe = mtk_clk_simple_probe, 44 + .driver = { 45 + .name = "clk-mt8192-scp_adsp", 46 + .of_match_table = of_match_clk_mt8192_scp_adsp, 47 + }, 48 + }; 49 + 50 + builtin_platform_driver(clk_mt8192_scp_adsp_drv);
+94
drivers/clk/mediatek/clk-mt8192-vdec.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + // 3 + // Copyright (c) 2021 MediaTek Inc. 4 + // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 + 6 + #include <linux/clk-provider.h> 7 + #include <linux/of_device.h> 8 + #include <linux/platform_device.h> 9 + 10 + #include "clk-mtk.h" 11 + #include "clk-gate.h" 12 + 13 + #include <dt-bindings/clock/mt8192-clk.h> 14 + 15 + static const struct mtk_gate_regs vdec0_cg_regs = { 16 + .set_ofs = 0x0, 17 + .clr_ofs = 0x4, 18 + .sta_ofs = 0x0, 19 + }; 20 + 21 + static const struct mtk_gate_regs vdec1_cg_regs = { 22 + .set_ofs = 0x200, 23 + .clr_ofs = 0x204, 24 + .sta_ofs = 0x200, 25 + }; 26 + 27 + static const struct mtk_gate_regs vdec2_cg_regs = { 28 + .set_ofs = 0x8, 29 + .clr_ofs = 0xc, 30 + .sta_ofs = 0x8, 31 + }; 32 + 33 + #define GATE_VDEC0(_id, _name, _parent, _shift) \ 34 + GATE_MTK(_id, _name, _parent, &vdec0_cg_regs, _shift, &mtk_clk_gate_ops_setclr_inv) 35 + 36 + #define GATE_VDEC1(_id, _name, _parent, _shift) \ 37 + GATE_MTK(_id, _name, _parent, &vdec1_cg_regs, _shift, &mtk_clk_gate_ops_setclr_inv) 38 + 39 + #define GATE_VDEC2(_id, _name, _parent, _shift) \ 40 + GATE_MTK(_id, _name, _parent, &vdec2_cg_regs, _shift, &mtk_clk_gate_ops_setclr_inv) 41 + 42 + static const struct mtk_gate vdec_clks[] = { 43 + /* VDEC0 */ 44 + GATE_VDEC0(CLK_VDEC_VDEC, "vdec_vdec", "vdec_sel", 0), 45 + GATE_VDEC0(CLK_VDEC_ACTIVE, "vdec_active", "vdec_sel", 4), 46 + /* VDEC1 */ 47 + GATE_VDEC1(CLK_VDEC_LAT, "vdec_lat", "vdec_sel", 0), 48 + GATE_VDEC1(CLK_VDEC_LAT_ACTIVE, "vdec_lat_active", "vdec_sel", 4), 49 + /* VDEC2 */ 50 + GATE_VDEC2(CLK_VDEC_LARB1, "vdec_larb1", "vdec_sel", 0), 51 + }; 52 + 53 + static const struct mtk_gate vdec_soc_clks[] = { 54 + /* VDEC_SOC0 */ 55 + GATE_VDEC0(CLK_VDEC_SOC_VDEC, "vdec_soc_vdec", "vdec_sel", 0), 56 + GATE_VDEC0(CLK_VDEC_SOC_VDEC_ACTIVE, "vdec_soc_vdec_active", "vdec_sel", 4), 57 + /* VDEC_SOC1 */ 58 + GATE_VDEC1(CLK_VDEC_SOC_LAT, "vdec_soc_lat", "vdec_sel", 0), 59 + GATE_VDEC1(CLK_VDEC_SOC_LAT_ACTIVE, "vdec_soc_lat_active", "vdec_sel", 4), 60 + /* VDEC_SOC2 */ 61 + GATE_VDEC2(CLK_VDEC_SOC_LARB1, "vdec_soc_larb1", "vdec_sel", 0), 62 + }; 63 + 64 + static const struct mtk_clk_desc vdec_desc = { 65 + .clks = vdec_clks, 66 + .num_clks = ARRAY_SIZE(vdec_clks), 67 + }; 68 + 69 + static const struct mtk_clk_desc vdec_soc_desc = { 70 + .clks = vdec_soc_clks, 71 + .num_clks = ARRAY_SIZE(vdec_soc_clks), 72 + }; 73 + 74 + static const struct of_device_id of_match_clk_mt8192_vdec[] = { 75 + { 76 + .compatible = "mediatek,mt8192-vdecsys", 77 + .data = &vdec_desc, 78 + }, { 79 + .compatible = "mediatek,mt8192-vdecsys_soc", 80 + .data = &vdec_soc_desc, 81 + }, { 82 + /* sentinel */ 83 + } 84 + }; 85 + 86 + static struct platform_driver clk_mt8192_vdec_drv = { 87 + .probe = mtk_clk_simple_probe, 88 + .driver = { 89 + .name = "clk-mt8192-vdec", 90 + .of_match_table = of_match_clk_mt8192_vdec, 91 + }, 92 + }; 93 + 94 + builtin_platform_driver(clk_mt8192_vdec_drv);
+53
drivers/clk/mediatek/clk-mt8192-venc.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + // 3 + // Copyright (c) 2021 MediaTek Inc. 4 + // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 + 6 + #include <linux/clk-provider.h> 7 + #include <linux/of_device.h> 8 + #include <linux/platform_device.h> 9 + 10 + #include "clk-mtk.h" 11 + #include "clk-gate.h" 12 + 13 + #include <dt-bindings/clock/mt8192-clk.h> 14 + 15 + static const struct mtk_gate_regs venc_cg_regs = { 16 + .set_ofs = 0x4, 17 + .clr_ofs = 0x8, 18 + .sta_ofs = 0x0, 19 + }; 20 + 21 + #define GATE_VENC(_id, _name, _parent, _shift) \ 22 + GATE_MTK(_id, _name, _parent, &venc_cg_regs, _shift, &mtk_clk_gate_ops_setclr_inv) 23 + 24 + static const struct mtk_gate venc_clks[] = { 25 + GATE_VENC(CLK_VENC_SET0_LARB, "venc_set0_larb", "venc_sel", 0), 26 + GATE_VENC(CLK_VENC_SET1_VENC, "venc_set1_venc", "venc_sel", 4), 27 + GATE_VENC(CLK_VENC_SET2_JPGENC, "venc_set2_jpgenc", "venc_sel", 8), 28 + GATE_VENC(CLK_VENC_SET5_GALS, "venc_set5_gals", "venc_sel", 28), 29 + }; 30 + 31 + static const struct mtk_clk_desc venc_desc = { 32 + .clks = venc_clks, 33 + .num_clks = ARRAY_SIZE(venc_clks), 34 + }; 35 + 36 + static const struct of_device_id of_match_clk_mt8192_venc[] = { 37 + { 38 + .compatible = "mediatek,mt8192-vencsys", 39 + .data = &venc_desc, 40 + }, { 41 + /* sentinel */ 42 + } 43 + }; 44 + 45 + static struct platform_driver clk_mt8192_venc_drv = { 46 + .probe = mtk_clk_simple_probe, 47 + .driver = { 48 + .name = "clk-mt8192-venc", 49 + .of_match_table = of_match_clk_mt8192_venc, 50 + }, 51 + }; 52 + 53 + builtin_platform_driver(clk_mt8192_venc_drv);
+1326
drivers/clk/mediatek/clk-mt8192.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + // 3 + // Copyright (c) 2021 MediaTek Inc. 4 + // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 + 6 + #include <linux/clk.h> 7 + #include <linux/delay.h> 8 + #include <linux/mfd/syscon.h> 9 + #include <linux/of.h> 10 + #include <linux/of_address.h> 11 + #include <linux/of_device.h> 12 + #include <linux/platform_device.h> 13 + #include <linux/slab.h> 14 + 15 + #include "clk-mtk.h" 16 + #include "clk-mux.h" 17 + #include "clk-gate.h" 18 + 19 + #include <dt-bindings/clock/mt8192-clk.h> 20 + 21 + static DEFINE_SPINLOCK(mt8192_clk_lock); 22 + 23 + static const struct mtk_fixed_clk top_fixed_clks[] = { 24 + FIXED_CLK(CLK_TOP_ULPOSC, "ulposc", NULL, 260000000), 25 + }; 26 + 27 + static const struct mtk_fixed_factor top_early_divs[] = { 28 + FACTOR(CLK_TOP_CSW_F26M_D2, "csw_f26m_d2", "clk26m", 1, 2), 29 + }; 30 + 31 + static const struct mtk_fixed_factor top_divs[] = { 32 + FACTOR(CLK_TOP_MAINPLL_D3, "mainpll_d3", "mainpll", 1, 3), 33 + FACTOR(CLK_TOP_MAINPLL_D4, "mainpll_d4", "mainpll", 1, 4), 34 + FACTOR(CLK_TOP_MAINPLL_D4_D2, "mainpll_d4_d2", "mainpll_d4", 1, 2), 35 + FACTOR(CLK_TOP_MAINPLL_D4_D4, "mainpll_d4_d4", "mainpll_d4", 1, 4), 36 + FACTOR(CLK_TOP_MAINPLL_D4_D8, "mainpll_d4_d8", "mainpll_d4", 1, 8), 37 + FACTOR(CLK_TOP_MAINPLL_D4_D16, "mainpll_d4_d16", "mainpll_d4", 1, 16), 38 + FACTOR(CLK_TOP_MAINPLL_D5, "mainpll_d5", "mainpll", 1, 5), 39 + FACTOR(CLK_TOP_MAINPLL_D5_D2, "mainpll_d5_d2", "mainpll_d5", 1, 2), 40 + FACTOR(CLK_TOP_MAINPLL_D5_D4, "mainpll_d5_d4", "mainpll_d5", 1, 4), 41 + FACTOR(CLK_TOP_MAINPLL_D5_D8, "mainpll_d5_d8", "mainpll_d5", 1, 8), 42 + FACTOR(CLK_TOP_MAINPLL_D6, "mainpll_d6", "mainpll", 1, 6), 43 + FACTOR(CLK_TOP_MAINPLL_D6_D2, "mainpll_d6_d2", "mainpll_d6", 1, 2), 44 + FACTOR(CLK_TOP_MAINPLL_D6_D4, "mainpll_d6_d4", "mainpll_d6", 1, 4), 45 + FACTOR(CLK_TOP_MAINPLL_D7, "mainpll_d7", "mainpll", 1, 7), 46 + FACTOR(CLK_TOP_MAINPLL_D7_D2, "mainpll_d7_d2", "mainpll_d7", 1, 2), 47 + FACTOR(CLK_TOP_MAINPLL_D7_D4, "mainpll_d7_d4", "mainpll_d7", 1, 4), 48 + FACTOR(CLK_TOP_MAINPLL_D7_D8, "mainpll_d7_d8", "mainpll_d7", 1, 8), 49 + FACTOR(CLK_TOP_UNIVPLL_D3, "univpll_d3", "univpll", 1, 3), 50 + FACTOR(CLK_TOP_UNIVPLL_D4, "univpll_d4", "univpll", 1, 4), 51 + FACTOR(CLK_TOP_UNIVPLL_D4_D2, "univpll_d4_d2", "univpll_d4", 1, 2), 52 + FACTOR(CLK_TOP_UNIVPLL_D4_D4, "univpll_d4_d4", "univpll_d4", 1, 4), 53 + FACTOR(CLK_TOP_UNIVPLL_D4_D8, "univpll_d4_d8", "univpll_d4", 1, 8), 54 + FACTOR(CLK_TOP_UNIVPLL_D5, "univpll_d5", "univpll", 1, 5), 55 + FACTOR(CLK_TOP_UNIVPLL_D5_D2, "univpll_d5_d2", "univpll_d5", 1, 2), 56 + FACTOR(CLK_TOP_UNIVPLL_D5_D4, "univpll_d5_d4", "univpll_d5", 1, 4), 57 + FACTOR(CLK_TOP_UNIVPLL_D5_D8, "univpll_d5_d8", "univpll_d5", 1, 8), 58 + FACTOR(CLK_TOP_UNIVPLL_D6, "univpll_d6", "univpll", 1, 6), 59 + FACTOR(CLK_TOP_UNIVPLL_D6_D2, "univpll_d6_d2", "univpll_d6", 1, 2), 60 + FACTOR(CLK_TOP_UNIVPLL_D6_D4, "univpll_d6_d4", "univpll_d6", 1, 4), 61 + FACTOR(CLK_TOP_UNIVPLL_D6_D8, "univpll_d6_d8", "univpll_d6", 1, 8), 62 + FACTOR(CLK_TOP_UNIVPLL_D6_D16, "univpll_d6_d16", "univpll_d6", 1, 16), 63 + FACTOR(CLK_TOP_UNIVPLL_D7, "univpll_d7", "univpll", 1, 7), 64 + FACTOR(CLK_TOP_APLL1, "apll1_ck", "apll1", 1, 1), 65 + FACTOR(CLK_TOP_APLL1_D2, "apll1_d2", "apll1", 1, 2), 66 + FACTOR(CLK_TOP_APLL1_D4, "apll1_d4", "apll1", 1, 4), 67 + FACTOR(CLK_TOP_APLL1_D8, "apll1_d8", "apll1", 1, 8), 68 + FACTOR(CLK_TOP_APLL2, "apll2_ck", "apll2", 1, 1), 69 + FACTOR(CLK_TOP_APLL2_D2, "apll2_d2", "apll2", 1, 2), 70 + FACTOR(CLK_TOP_APLL2_D4, "apll2_d4", "apll2", 1, 4), 71 + FACTOR(CLK_TOP_APLL2_D8, "apll2_d8", "apll2", 1, 8), 72 + FACTOR(CLK_TOP_MMPLL_D4, "mmpll_d4", "mmpll", 1, 4), 73 + FACTOR(CLK_TOP_MMPLL_D4_D2, "mmpll_d4_d2", "mmpll_d4", 1, 2), 74 + FACTOR(CLK_TOP_MMPLL_D5, "mmpll_d5", "mmpll", 1, 5), 75 + FACTOR(CLK_TOP_MMPLL_D5_D2, "mmpll_d5_d2", "mmpll_d5", 1, 2), 76 + FACTOR(CLK_TOP_MMPLL_D6, "mmpll_d6", "mmpll", 1, 6), 77 + FACTOR(CLK_TOP_MMPLL_D6_D2, "mmpll_d6_d2", "mmpll_d6", 1, 2), 78 + FACTOR(CLK_TOP_MMPLL_D7, "mmpll_d7", "mmpll", 1, 7), 79 + FACTOR(CLK_TOP_MMPLL_D9, "mmpll_d9", "mmpll", 1, 9), 80 + FACTOR(CLK_TOP_APUPLL, "apupll_ck", "apupll", 1, 2), 81 + FACTOR(CLK_TOP_NPUPLL, "npupll_ck", "npupll", 1, 1), 82 + FACTOR(CLK_TOP_TVDPLL, "tvdpll_ck", "tvdpll", 1, 1), 83 + FACTOR(CLK_TOP_TVDPLL_D2, "tvdpll_d2", "tvdpll", 1, 2), 84 + FACTOR(CLK_TOP_TVDPLL_D4, "tvdpll_d4", "tvdpll", 1, 4), 85 + FACTOR(CLK_TOP_TVDPLL_D8, "tvdpll_d8", "tvdpll", 1, 8), 86 + FACTOR(CLK_TOP_TVDPLL_D16, "tvdpll_d16", "tvdpll", 1, 16), 87 + FACTOR(CLK_TOP_MSDCPLL, "msdcpll_ck", "msdcpll", 1, 1), 88 + FACTOR(CLK_TOP_MSDCPLL_D2, "msdcpll_d2", "msdcpll", 1, 2), 89 + FACTOR(CLK_TOP_MSDCPLL_D4, "msdcpll_d4", "msdcpll", 1, 4), 90 + FACTOR(CLK_TOP_OSC_D2, "osc_d2", "ulposc", 1, 2), 91 + FACTOR(CLK_TOP_OSC_D4, "osc_d4", "ulposc", 1, 4), 92 + FACTOR(CLK_TOP_OSC_D8, "osc_d8", "ulposc", 1, 8), 93 + FACTOR(CLK_TOP_OSC_D10, "osc_d10", "ulposc", 1, 10), 94 + FACTOR(CLK_TOP_OSC_D16, "osc_d16", "ulposc", 1, 16), 95 + FACTOR(CLK_TOP_OSC_D20, "osc_d20", "ulposc", 1, 20), 96 + FACTOR(CLK_TOP_ADSPPLL, "adsppll_ck", "adsppll", 1, 1), 97 + FACTOR(CLK_TOP_UNIVPLL_192M, "univpll_192m", "univpll", 1, 13), 98 + FACTOR(CLK_TOP_UNIVPLL_192M_D2, "univpll_192m_d2", "univpll_192m", 1, 2), 99 + FACTOR(CLK_TOP_UNIVPLL_192M_D4, "univpll_192m_d4", "univpll_192m", 1, 4), 100 + FACTOR(CLK_TOP_UNIVPLL_192M_D8, "univpll_192m_d8", "univpll_192m", 1, 8), 101 + FACTOR(CLK_TOP_UNIVPLL_192M_D16, "univpll_192m_d16", "univpll_192m", 1, 16), 102 + FACTOR(CLK_TOP_UNIVPLL_192M_D32, "univpll_192m_d32", "univpll_192m", 1, 32), 103 + }; 104 + 105 + static const char * const axi_parents[] = { 106 + "clk26m", 107 + "mainpll_d4_d4", 108 + "mainpll_d7_d2", 109 + "mainpll_d4_d2", 110 + "mainpll_d5_d2", 111 + "mainpll_d6_d2", 112 + "osc_d4" 113 + }; 114 + 115 + static const char * const spm_parents[] = { 116 + "clk26m", 117 + "osc_d10", 118 + "mainpll_d7_d4", 119 + "clk32k" 120 + }; 121 + 122 + static const char * const scp_parents[] = { 123 + "clk26m", 124 + "univpll_d5", 125 + "mainpll_d6_d2", 126 + "mainpll_d6", 127 + "univpll_d6", 128 + "mainpll_d4_d2", 129 + "mainpll_d5_d2", 130 + "univpll_d4_d2" 131 + }; 132 + 133 + static const char * const bus_aximem_parents[] = { 134 + "clk26m", 135 + "mainpll_d7_d2", 136 + "mainpll_d4_d2", 137 + "mainpll_d5_d2", 138 + "mainpll_d6" 139 + }; 140 + 141 + static const char * const disp_parents[] = { 142 + "clk26m", 143 + "univpll_d6_d2", 144 + "mainpll_d5_d2", 145 + "mmpll_d6_d2", 146 + "univpll_d5_d2", 147 + "univpll_d4_d2", 148 + "mmpll_d7", 149 + "univpll_d6", 150 + "mainpll_d4", 151 + "mmpll_d5_d2" 152 + }; 153 + 154 + static const char * const mdp_parents[] = { 155 + "clk26m", 156 + "mainpll_d5_d2", 157 + "mmpll_d6_d2", 158 + "mainpll_d4_d2", 159 + "mmpll_d4_d2", 160 + "mainpll_d6", 161 + "univpll_d6", 162 + "mainpll_d4", 163 + "tvdpll_ck", 164 + "univpll_d4", 165 + "mmpll_d5_d2" 166 + }; 167 + 168 + static const char * const img1_parents[] = { 169 + "clk26m", 170 + "univpll_d4", 171 + "tvdpll_ck", 172 + "mainpll_d4", 173 + "univpll_d5", 174 + "mmpll_d6", 175 + "univpll_d6", 176 + "mainpll_d6", 177 + "mmpll_d4_d2", 178 + "mainpll_d4_d2", 179 + "mmpll_d6_d2", 180 + "mmpll_d5_d2" 181 + }; 182 + 183 + static const char * const img2_parents[] = { 184 + "clk26m", 185 + "univpll_d4", 186 + "tvdpll_ck", 187 + "mainpll_d4", 188 + "univpll_d5", 189 + "mmpll_d6", 190 + "univpll_d6", 191 + "mainpll_d6", 192 + "mmpll_d4_d2", 193 + "mainpll_d4_d2", 194 + "mmpll_d6_d2", 195 + "mmpll_d5_d2" 196 + }; 197 + 198 + static const char * const ipe_parents[] = { 199 + "clk26m", 200 + "mainpll_d4", 201 + "mmpll_d6", 202 + "univpll_d6", 203 + "mainpll_d6", 204 + "univpll_d4_d2", 205 + "mainpll_d4_d2", 206 + "mmpll_d6_d2", 207 + "mmpll_d5_d2" 208 + }; 209 + 210 + static const char * const dpe_parents[] = { 211 + "clk26m", 212 + "mainpll_d4", 213 + "mmpll_d6", 214 + "univpll_d6", 215 + "mainpll_d6", 216 + "univpll_d4_d2", 217 + "univpll_d5_d2", 218 + "mmpll_d6_d2" 219 + }; 220 + 221 + static const char * const cam_parents[] = { 222 + "clk26m", 223 + "mainpll_d4", 224 + "mmpll_d6", 225 + "univpll_d4", 226 + "univpll_d5", 227 + "univpll_d6", 228 + "mmpll_d7", 229 + "univpll_d4_d2", 230 + "mainpll_d4_d2", 231 + "univpll_d6_d2" 232 + }; 233 + 234 + static const char * const ccu_parents[] = { 235 + "clk26m", 236 + "mainpll_d4", 237 + "mmpll_d6", 238 + "mainpll_d6", 239 + "mmpll_d7", 240 + "univpll_d4_d2", 241 + "mmpll_d6_d2", 242 + "mmpll_d5_d2", 243 + "univpll_d5", 244 + "univpll_d6_d2" 245 + }; 246 + 247 + static const char * const dsp7_parents[] = { 248 + "clk26m", 249 + "mainpll_d4_d2", 250 + "mainpll_d6", 251 + "mmpll_d6", 252 + "univpll_d5", 253 + "mmpll_d5", 254 + "univpll_d4", 255 + "mmpll_d4" 256 + }; 257 + 258 + static const char * const mfg_ref_parents[] = { 259 + "clk26m", 260 + "clk26m", 261 + "univpll_d6", 262 + "mainpll_d5_d2" 263 + }; 264 + 265 + static const char * const mfg_pll_parents[] = { 266 + "mfg_ref_sel", 267 + "mfgpll" 268 + }; 269 + 270 + static const char * const camtg_parents[] = { 271 + "clk26m", 272 + "univpll_192m_d8", 273 + "univpll_d6_d8", 274 + "univpll_192m_d4", 275 + "univpll_d6_d16", 276 + "csw_f26m_d2", 277 + "univpll_192m_d16", 278 + "univpll_192m_d32" 279 + }; 280 + 281 + static const char * const camtg2_parents[] = { 282 + "clk26m", 283 + "univpll_192m_d8", 284 + "univpll_d6_d8", 285 + "univpll_192m_d4", 286 + "univpll_d6_d16", 287 + "csw_f26m_d2", 288 + "univpll_192m_d16", 289 + "univpll_192m_d32" 290 + }; 291 + 292 + static const char * const camtg3_parents[] = { 293 + "clk26m", 294 + "univpll_192m_d8", 295 + "univpll_d6_d8", 296 + "univpll_192m_d4", 297 + "univpll_d6_d16", 298 + "csw_f26m_d2", 299 + "univpll_192m_d16", 300 + "univpll_192m_d32" 301 + }; 302 + 303 + static const char * const camtg4_parents[] = { 304 + "clk26m", 305 + "univpll_192m_d8", 306 + "univpll_d6_d8", 307 + "univpll_192m_d4", 308 + "univpll_d6_d16", 309 + "csw_f26m_d2", 310 + "univpll_192m_d16", 311 + "univpll_192m_d32" 312 + }; 313 + 314 + static const char * const camtg5_parents[] = { 315 + "clk26m", 316 + "univpll_192m_d8", 317 + "univpll_d6_d8", 318 + "univpll_192m_d4", 319 + "univpll_d6_d16", 320 + "csw_f26m_d2", 321 + "univpll_192m_d16", 322 + "univpll_192m_d32" 323 + }; 324 + 325 + static const char * const camtg6_parents[] = { 326 + "clk26m", 327 + "univpll_192m_d8", 328 + "univpll_d6_d8", 329 + "univpll_192m_d4", 330 + "univpll_d6_d16", 331 + "csw_f26m_d2", 332 + "univpll_192m_d16", 333 + "univpll_192m_d32" 334 + }; 335 + 336 + static const char * const uart_parents[] = { 337 + "clk26m", 338 + "univpll_d6_d8" 339 + }; 340 + 341 + static const char * const spi_parents[] = { 342 + "clk26m", 343 + "mainpll_d5_d4", 344 + "mainpll_d6_d4", 345 + "msdcpll_d4" 346 + }; 347 + 348 + static const char * const msdc50_0_h_parents[] = { 349 + "clk26m", 350 + "mainpll_d4_d2", 351 + "mainpll_d6_d2" 352 + }; 353 + 354 + static const char * const msdc50_0_parents[] = { 355 + "clk26m", 356 + "msdcpll_ck", 357 + "msdcpll_d2", 358 + "univpll_d4_d4", 359 + "mainpll_d6_d2", 360 + "univpll_d4_d2" 361 + }; 362 + 363 + static const char * const msdc30_1_parents[] = { 364 + "clk26m", 365 + "univpll_d6_d2", 366 + "mainpll_d6_d2", 367 + "mainpll_d7_d2", 368 + "msdcpll_d2" 369 + }; 370 + 371 + static const char * const msdc30_2_parents[] = { 372 + "clk26m", 373 + "univpll_d6_d2", 374 + "mainpll_d6_d2", 375 + "mainpll_d7_d2", 376 + "msdcpll_d2" 377 + }; 378 + 379 + static const char * const audio_parents[] = { 380 + "clk26m", 381 + "mainpll_d5_d8", 382 + "mainpll_d7_d8", 383 + "mainpll_d4_d16" 384 + }; 385 + 386 + static const char * const aud_intbus_parents[] = { 387 + "clk26m", 388 + "mainpll_d4_d4", 389 + "mainpll_d7_d4" 390 + }; 391 + 392 + static const char * const pwrap_ulposc_parents[] = { 393 + "osc_d10", 394 + "clk26m", 395 + "osc_d4", 396 + "osc_d8", 397 + "osc_d16" 398 + }; 399 + 400 + static const char * const atb_parents[] = { 401 + "clk26m", 402 + "mainpll_d4_d2", 403 + "mainpll_d5_d2" 404 + }; 405 + 406 + static const char * const dpi_parents[] = { 407 + "clk26m", 408 + "tvdpll_d2", 409 + "tvdpll_d4", 410 + "tvdpll_d8", 411 + "tvdpll_d16" 412 + }; 413 + 414 + static const char * const scam_parents[] = { 415 + "clk26m", 416 + "mainpll_d5_d4" 417 + }; 418 + 419 + static const char * const disp_pwm_parents[] = { 420 + "clk26m", 421 + "univpll_d6_d4", 422 + "osc_d2", 423 + "osc_d4", 424 + "osc_d16" 425 + }; 426 + 427 + static const char * const usb_top_parents[] = { 428 + "clk26m", 429 + "univpll_d5_d4", 430 + "univpll_d6_d4", 431 + "univpll_d5_d2" 432 + }; 433 + 434 + static const char * const ssusb_xhci_parents[] = { 435 + "clk26m", 436 + "univpll_d5_d4", 437 + "univpll_d6_d4", 438 + "univpll_d5_d2" 439 + }; 440 + 441 + static const char * const i2c_parents[] = { 442 + "clk26m", 443 + "mainpll_d4_d8", 444 + "univpll_d5_d4" 445 + }; 446 + 447 + static const char * const seninf_parents[] = { 448 + "clk26m", 449 + "univpll_d4_d4", 450 + "univpll_d6_d2", 451 + "univpll_d4_d2", 452 + "univpll_d7", 453 + "univpll_d6", 454 + "mmpll_d6", 455 + "univpll_d5" 456 + }; 457 + 458 + static const char * const seninf1_parents[] = { 459 + "clk26m", 460 + "univpll_d4_d4", 461 + "univpll_d6_d2", 462 + "univpll_d4_d2", 463 + "univpll_d7", 464 + "univpll_d6", 465 + "mmpll_d6", 466 + "univpll_d5" 467 + }; 468 + 469 + static const char * const seninf2_parents[] = { 470 + "clk26m", 471 + "univpll_d4_d4", 472 + "univpll_d6_d2", 473 + "univpll_d4_d2", 474 + "univpll_d7", 475 + "univpll_d6", 476 + "mmpll_d6", 477 + "univpll_d5" 478 + }; 479 + 480 + static const char * const seninf3_parents[] = { 481 + "clk26m", 482 + "univpll_d4_d4", 483 + "univpll_d6_d2", 484 + "univpll_d4_d2", 485 + "univpll_d7", 486 + "univpll_d6", 487 + "mmpll_d6", 488 + "univpll_d5" 489 + }; 490 + 491 + static const char * const tl_parents[] = { 492 + "clk26m", 493 + "univpll_192m_d2", 494 + "mainpll_d6_d4" 495 + }; 496 + 497 + static const char * const dxcc_parents[] = { 498 + "clk26m", 499 + "mainpll_d4_d2", 500 + "mainpll_d4_d4", 501 + "mainpll_d4_d8" 502 + }; 503 + 504 + static const char * const aud_engen1_parents[] = { 505 + "clk26m", 506 + "apll1_d2", 507 + "apll1_d4", 508 + "apll1_d8" 509 + }; 510 + 511 + static const char * const aud_engen2_parents[] = { 512 + "clk26m", 513 + "apll2_d2", 514 + "apll2_d4", 515 + "apll2_d8" 516 + }; 517 + 518 + static const char * const aes_ufsfde_parents[] = { 519 + "clk26m", 520 + "mainpll_d4", 521 + "mainpll_d4_d2", 522 + "mainpll_d6", 523 + "mainpll_d4_d4", 524 + "univpll_d4_d2", 525 + "univpll_d6" 526 + }; 527 + 528 + static const char * const ufs_parents[] = { 529 + "clk26m", 530 + "mainpll_d4_d4", 531 + "mainpll_d4_d8", 532 + "univpll_d4_d4", 533 + "mainpll_d6_d2", 534 + "mainpll_d5_d2", 535 + "msdcpll_d2" 536 + }; 537 + 538 + static const char * const aud_1_parents[] = { 539 + "clk26m", 540 + "apll1_ck" 541 + }; 542 + 543 + static const char * const aud_2_parents[] = { 544 + "clk26m", 545 + "apll2_ck" 546 + }; 547 + 548 + static const char * const adsp_parents[] = { 549 + "clk26m", 550 + "mainpll_d6", 551 + "mainpll_d5_d2", 552 + "univpll_d4_d4", 553 + "univpll_d4", 554 + "univpll_d6", 555 + "ulposc", 556 + "adsppll_ck" 557 + }; 558 + 559 + static const char * const dpmaif_main_parents[] = { 560 + "clk26m", 561 + "univpll_d4_d4", 562 + "mainpll_d6", 563 + "mainpll_d4_d2", 564 + "univpll_d4_d2" 565 + }; 566 + 567 + static const char * const venc_parents[] = { 568 + "clk26m", 569 + "mmpll_d7", 570 + "mainpll_d6", 571 + "univpll_d4_d2", 572 + "mainpll_d4_d2", 573 + "univpll_d6", 574 + "mmpll_d6", 575 + "mainpll_d5_d2", 576 + "mainpll_d6_d2", 577 + "mmpll_d9", 578 + "univpll_d4_d4", 579 + "mainpll_d4", 580 + "univpll_d4", 581 + "univpll_d5", 582 + "univpll_d5_d2", 583 + "mainpll_d5" 584 + }; 585 + 586 + static const char * const vdec_parents[] = { 587 + "clk26m", 588 + "univpll_192m_d2", 589 + "univpll_d5_d4", 590 + "mainpll_d5", 591 + "mainpll_d5_d2", 592 + "mmpll_d6_d2", 593 + "univpll_d5_d2", 594 + "mainpll_d4_d2", 595 + "univpll_d4_d2", 596 + "univpll_d7", 597 + "mmpll_d7", 598 + "mmpll_d6", 599 + "univpll_d5", 600 + "mainpll_d4", 601 + "univpll_d4", 602 + "univpll_d6" 603 + }; 604 + 605 + static const char * const camtm_parents[] = { 606 + "clk26m", 607 + "univpll_d7", 608 + "univpll_d6_d2", 609 + "univpll_d4_d2" 610 + }; 611 + 612 + static const char * const pwm_parents[] = { 613 + "clk26m", 614 + "univpll_d4_d8" 615 + }; 616 + 617 + static const char * const audio_h_parents[] = { 618 + "clk26m", 619 + "univpll_d7", 620 + "apll1_ck", 621 + "apll2_ck" 622 + }; 623 + 624 + static const char * const spmi_mst_parents[] = { 625 + "clk26m", 626 + "csw_f26m_d2", 627 + "osc_d8", 628 + "osc_d10", 629 + "osc_d16", 630 + "osc_d20", 631 + "clk32k" 632 + }; 633 + 634 + static const char * const aes_msdcfde_parents[] = { 635 + "clk26m", 636 + "mainpll_d4_d2", 637 + "mainpll_d6", 638 + "mainpll_d4_d4", 639 + "univpll_d4_d2", 640 + "univpll_d6" 641 + }; 642 + 643 + static const char * const sflash_parents[] = { 644 + "clk26m", 645 + "mainpll_d7_d8", 646 + "univpll_d6_d8", 647 + "univpll_d5_d8" 648 + }; 649 + 650 + static const char * const apll_i2s0_m_parents[] = { 651 + "aud_1_sel", 652 + "aud_2_sel" 653 + }; 654 + 655 + static const char * const apll_i2s1_m_parents[] = { 656 + "aud_1_sel", 657 + "aud_2_sel" 658 + }; 659 + 660 + static const char * const apll_i2s2_m_parents[] = { 661 + "aud_1_sel", 662 + "aud_2_sel" 663 + }; 664 + 665 + static const char * const apll_i2s3_m_parents[] = { 666 + "aud_1_sel", 667 + "aud_2_sel" 668 + }; 669 + 670 + static const char * const apll_i2s4_m_parents[] = { 671 + "aud_1_sel", 672 + "aud_2_sel" 673 + }; 674 + 675 + static const char * const apll_i2s5_m_parents[] = { 676 + "aud_1_sel", 677 + "aud_2_sel" 678 + }; 679 + 680 + static const char * const apll_i2s6_m_parents[] = { 681 + "aud_1_sel", 682 + "aud_2_sel" 683 + }; 684 + 685 + static const char * const apll_i2s7_m_parents[] = { 686 + "aud_1_sel", 687 + "aud_2_sel" 688 + }; 689 + 690 + static const char * const apll_i2s8_m_parents[] = { 691 + "aud_1_sel", 692 + "aud_2_sel" 693 + }; 694 + 695 + static const char * const apll_i2s9_m_parents[] = { 696 + "aud_1_sel", 697 + "aud_2_sel" 698 + }; 699 + 700 + /* 701 + * CRITICAL CLOCK: 702 + * axi_sel is the main bus clock of whole SOC. 703 + * spm_sel is the clock of the always-on co-processor. 704 + * bus_aximem_sel is clock of the bus that access emi. 705 + */ 706 + static const struct mtk_mux top_mtk_muxes[] = { 707 + /* CLK_CFG_0 */ 708 + MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_AXI_SEL, "axi_sel", 709 + axi_parents, 0x010, 0x014, 0x018, 0, 3, 7, 0x004, 0, 710 + CLK_IS_CRITICAL), 711 + MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SPM_SEL, "spm_sel", 712 + spm_parents, 0x010, 0x014, 0x018, 8, 2, 15, 0x004, 1, 713 + CLK_IS_CRITICAL), 714 + MUX_GATE_CLR_SET_UPD(CLK_TOP_SCP_SEL, "scp_sel", 715 + scp_parents, 0x010, 0x014, 0x018, 16, 3, 23, 0x004, 2), 716 + MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_BUS_AXIMEM_SEL, "bus_aximem_sel", 717 + bus_aximem_parents, 0x010, 0x014, 0x018, 24, 3, 31, 0x004, 3, 718 + CLK_IS_CRITICAL), 719 + /* CLK_CFG_1 */ 720 + MUX_GATE_CLR_SET_UPD(CLK_TOP_DISP_SEL, "disp_sel", 721 + disp_parents, 0x020, 0x024, 0x028, 0, 4, 7, 0x004, 4), 722 + MUX_GATE_CLR_SET_UPD(CLK_TOP_MDP_SEL, "mdp_sel", 723 + mdp_parents, 0x020, 0x024, 0x028, 8, 4, 15, 0x004, 5), 724 + MUX_GATE_CLR_SET_UPD(CLK_TOP_IMG1_SEL, "img1_sel", 725 + img1_parents, 0x020, 0x024, 0x028, 16, 4, 23, 0x004, 6), 726 + MUX_GATE_CLR_SET_UPD(CLK_TOP_IMG2_SEL, "img2_sel", 727 + img2_parents, 0x020, 0x024, 0x028, 24, 4, 31, 0x004, 7), 728 + /* CLK_CFG_2 */ 729 + MUX_GATE_CLR_SET_UPD(CLK_TOP_IPE_SEL, "ipe_sel", 730 + ipe_parents, 0x030, 0x034, 0x038, 0, 4, 7, 0x004, 8), 731 + MUX_GATE_CLR_SET_UPD(CLK_TOP_DPE_SEL, "dpe_sel", 732 + dpe_parents, 0x030, 0x034, 0x038, 8, 3, 15, 0x004, 9), 733 + MUX_GATE_CLR_SET_UPD(CLK_TOP_CAM_SEL, "cam_sel", 734 + cam_parents, 0x030, 0x034, 0x038, 16, 4, 23, 0x004, 10), 735 + MUX_GATE_CLR_SET_UPD(CLK_TOP_CCU_SEL, "ccu_sel", 736 + ccu_parents, 0x030, 0x034, 0x038, 24, 4, 31, 0x004, 11), 737 + /* CLK_CFG_4 */ 738 + MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP7_SEL, "dsp7_sel", 739 + dsp7_parents, 0x050, 0x054, 0x058, 0, 3, 7, 0x004, 16), 740 + MUX_GATE_CLR_SET_UPD(CLK_TOP_MFG_REF_SEL, "mfg_ref_sel", 741 + mfg_ref_parents, 0x050, 0x054, 0x058, 16, 2, 23, 0x004, 18), 742 + MUX_CLR_SET_UPD(CLK_TOP_MFG_PLL_SEL, "mfg_pll_sel", 743 + mfg_pll_parents, 0x050, 0x054, 0x058, 18, 1, -1, -1), 744 + MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG_SEL, "camtg_sel", 745 + camtg_parents, 0x050, 0x054, 0x058, 24, 3, 31, 0x004, 19), 746 + /* CLK_CFG_5 */ 747 + MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG2_SEL, "camtg2_sel", 748 + camtg2_parents, 0x060, 0x064, 0x068, 0, 3, 7, 0x004, 20), 749 + MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG3_SEL, "camtg3_sel", 750 + camtg3_parents, 0x060, 0x064, 0x068, 8, 3, 15, 0x004, 21), 751 + MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG4_SEL, "camtg4_sel", 752 + camtg4_parents, 0x060, 0x064, 0x068, 16, 3, 23, 0x004, 22), 753 + MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG5_SEL, "camtg5_sel", 754 + camtg5_parents, 0x060, 0x064, 0x068, 24, 3, 31, 0x004, 23), 755 + /* CLK_CFG_6 */ 756 + MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG6_SEL, "camtg6_sel", 757 + camtg6_parents, 0x070, 0x074, 0x078, 0, 3, 7, 0x004, 24), 758 + MUX_GATE_CLR_SET_UPD(CLK_TOP_UART_SEL, "uart_sel", 759 + uart_parents, 0x070, 0x074, 0x078, 8, 1, 15, 0x004, 25), 760 + MUX_GATE_CLR_SET_UPD(CLK_TOP_SPI_SEL, "spi_sel", 761 + spi_parents, 0x070, 0x074, 0x078, 16, 2, 23, 0x004, 26), 762 + MUX_GATE_CLR_SET_UPD(CLK_TOP_MSDC50_0_H_SEL, "msdc50_0_h_sel", 763 + msdc50_0_h_parents, 0x070, 0x074, 0x078, 24, 2, 31, 0x004, 27), 764 + /* CLK_CFG_7 */ 765 + MUX_GATE_CLR_SET_UPD(CLK_TOP_MSDC50_0_SEL, "msdc50_0_sel", 766 + msdc50_0_parents, 0x080, 0x084, 0x088, 0, 3, 7, 0x004, 28), 767 + MUX_GATE_CLR_SET_UPD(CLK_TOP_MSDC30_1_SEL, "msdc30_1_sel", 768 + msdc30_1_parents, 0x080, 0x084, 0x088, 8, 3, 15, 0x004, 29), 769 + MUX_GATE_CLR_SET_UPD(CLK_TOP_MSDC30_2_SEL, "msdc30_2_sel", 770 + msdc30_2_parents, 0x080, 0x084, 0x088, 16, 3, 23, 0x004, 30), 771 + MUX_GATE_CLR_SET_UPD(CLK_TOP_AUDIO_SEL, "audio_sel", 772 + audio_parents, 0x080, 0x084, 0x088, 24, 2, 31, 0x008, 0), 773 + /* CLK_CFG_8 */ 774 + MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_INTBUS_SEL, "aud_intbus_sel", 775 + aud_intbus_parents, 0x090, 0x094, 0x098, 0, 2, 7, 0x008, 1), 776 + MUX_GATE_CLR_SET_UPD(CLK_TOP_PWRAP_ULPOSC_SEL, "pwrap_ulposc_sel", 777 + pwrap_ulposc_parents, 0x090, 0x094, 0x098, 8, 3, 15, 0x008, 2), 778 + MUX_GATE_CLR_SET_UPD(CLK_TOP_ATB_SEL, "atb_sel", 779 + atb_parents, 0x090, 0x094, 0x098, 16, 2, 23, 0x008, 3), 780 + /* CLK_CFG_9 */ 781 + MUX_GATE_CLR_SET_UPD(CLK_TOP_DPI_SEL, "dpi_sel", 782 + dpi_parents, 0x0a0, 0x0a4, 0x0a8, 0, 3, 7, 0x008, 5), 783 + MUX_GATE_CLR_SET_UPD(CLK_TOP_SCAM_SEL, "scam_sel", 784 + scam_parents, 0x0a0, 0x0a4, 0x0a8, 8, 1, 15, 0x008, 6), 785 + MUX_GATE_CLR_SET_UPD(CLK_TOP_DISP_PWM_SEL, "disp_pwm_sel", 786 + disp_pwm_parents, 0x0a0, 0x0a4, 0x0a8, 16, 3, 23, 0x008, 7), 787 + MUX_GATE_CLR_SET_UPD(CLK_TOP_USB_TOP_SEL, "usb_top_sel", 788 + usb_top_parents, 0x0a0, 0x0a4, 0x0a8, 24, 2, 31, 0x008, 8), 789 + /* CLK_CFG_10 */ 790 + MUX_GATE_CLR_SET_UPD(CLK_TOP_SSUSB_XHCI_SEL, "ssusb_xhci_sel", 791 + ssusb_xhci_parents, 0x0b0, 0x0b4, 0x0b8, 0, 2, 7, 0x008, 9), 792 + MUX_GATE_CLR_SET_UPD(CLK_TOP_I2C_SEL, "i2c_sel", 793 + i2c_parents, 0x0b0, 0x0b4, 0x0b8, 8, 2, 15, 0x008, 10), 794 + MUX_GATE_CLR_SET_UPD(CLK_TOP_SENINF_SEL, "seninf_sel", 795 + seninf_parents, 0x0b0, 0x0b4, 0x0b8, 16, 3, 23, 0x008, 11), 796 + MUX_GATE_CLR_SET_UPD(CLK_TOP_SENINF1_SEL, "seninf1_sel", 797 + seninf1_parents, 0x0b0, 0x0b4, 0x0b8, 24, 3, 31, 0x008, 12), 798 + /* CLK_CFG_11 */ 799 + MUX_GATE_CLR_SET_UPD(CLK_TOP_SENINF2_SEL, "seninf2_sel", 800 + seninf2_parents, 0x0c0, 0x0c4, 0x0c8, 0, 3, 7, 0x008, 13), 801 + MUX_GATE_CLR_SET_UPD(CLK_TOP_SENINF3_SEL, "seninf3_sel", 802 + seninf3_parents, 0x0c0, 0x0c4, 0x0c8, 8, 3, 15, 0x008, 14), 803 + MUX_GATE_CLR_SET_UPD(CLK_TOP_TL_SEL, "tl_sel", 804 + tl_parents, 0x0c0, 0x0c4, 0x0c8, 16, 2, 23, 0x008, 15), 805 + MUX_GATE_CLR_SET_UPD(CLK_TOP_DXCC_SEL, "dxcc_sel", 806 + dxcc_parents, 0x0c0, 0x0c4, 0x0c8, 24, 2, 31, 0x008, 16), 807 + /* CLK_CFG_12 */ 808 + MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_ENGEN1_SEL, "aud_engen1_sel", 809 + aud_engen1_parents, 0x0d0, 0x0d4, 0x0d8, 0, 2, 7, 0x008, 17), 810 + MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_ENGEN2_SEL, "aud_engen2_sel", 811 + aud_engen2_parents, 0x0d0, 0x0d4, 0x0d8, 8, 2, 15, 0x008, 18), 812 + MUX_GATE_CLR_SET_UPD(CLK_TOP_AES_UFSFDE_SEL, "aes_ufsfde_sel", 813 + aes_ufsfde_parents, 0x0d0, 0x0d4, 0x0d8, 16, 3, 23, 0x008, 19), 814 + MUX_GATE_CLR_SET_UPD(CLK_TOP_UFS_SEL, "ufs_sel", 815 + ufs_parents, 0x0d0, 0x0d4, 0x0d8, 24, 3, 31, 0x008, 20), 816 + /* CLK_CFG_13 */ 817 + MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_1_SEL, "aud_1_sel", 818 + aud_1_parents, 0x0e0, 0x0e4, 0x0e8, 0, 1, 7, 0x008, 21), 819 + MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_2_SEL, "aud_2_sel", 820 + aud_2_parents, 0x0e0, 0x0e4, 0x0e8, 8, 1, 15, 0x008, 22), 821 + MUX_GATE_CLR_SET_UPD(CLK_TOP_ADSP_SEL, "adsp_sel", 822 + adsp_parents, 0x0e0, 0x0e4, 0x0e8, 16, 3, 23, 0x008, 23), 823 + MUX_GATE_CLR_SET_UPD(CLK_TOP_DPMAIF_MAIN_SEL, "dpmaif_main_sel", 824 + dpmaif_main_parents, 0x0e0, 0x0e4, 0x0e8, 24, 3, 31, 0x008, 24), 825 + /* CLK_CFG_14 */ 826 + MUX_GATE_CLR_SET_UPD(CLK_TOP_VENC_SEL, "venc_sel", 827 + venc_parents, 0x0f0, 0x0f4, 0x0f8, 0, 4, 7, 0x008, 25), 828 + MUX_GATE_CLR_SET_UPD(CLK_TOP_VDEC_SEL, "vdec_sel", 829 + vdec_parents, 0x0f0, 0x0f4, 0x0f8, 8, 4, 15, 0x008, 26), 830 + MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTM_SEL, "camtm_sel", 831 + camtm_parents, 0x0f0, 0x0f4, 0x0f8, 16, 2, 23, 0x008, 27), 832 + MUX_GATE_CLR_SET_UPD(CLK_TOP_PWM_SEL, "pwm_sel", 833 + pwm_parents, 0x0f0, 0x0f4, 0x0f8, 24, 1, 31, 0x008, 28), 834 + /* CLK_CFG_15 */ 835 + MUX_GATE_CLR_SET_UPD(CLK_TOP_AUDIO_H_SEL, "audio_h_sel", 836 + audio_h_parents, 0x100, 0x104, 0x108, 0, 2, 7, 0x008, 29), 837 + MUX_GATE_CLR_SET_UPD(CLK_TOP_SPMI_MST_SEL, "spmi_mst_sel", 838 + spmi_mst_parents, 0x100, 0x104, 0x108, 8, 3, 15, 0x008, 30), 839 + MUX_GATE_CLR_SET_UPD(CLK_TOP_AES_MSDCFDE_SEL, "aes_msdcfde_sel", 840 + aes_msdcfde_parents, 0x100, 0x104, 0x108, 24, 3, 31, 0x00c, 1), 841 + /* CLK_CFG_16 */ 842 + MUX_GATE_CLR_SET_UPD(CLK_TOP_SFLASH_SEL, "sflash_sel", 843 + sflash_parents, 0x110, 0x114, 0x118, 8, 2, 15, 0x00c, 3), 844 + }; 845 + 846 + static struct mtk_composite top_muxes[] = { 847 + /* CLK_AUDDIV_0 */ 848 + MUX(CLK_TOP_APLL_I2S0_M_SEL, "apll_i2s0_m_sel", apll_i2s0_m_parents, 0x320, 16, 1), 849 + MUX(CLK_TOP_APLL_I2S1_M_SEL, "apll_i2s1_m_sel", apll_i2s1_m_parents, 0x320, 17, 1), 850 + MUX(CLK_TOP_APLL_I2S2_M_SEL, "apll_i2s2_m_sel", apll_i2s2_m_parents, 0x320, 18, 1), 851 + MUX(CLK_TOP_APLL_I2S3_M_SEL, "apll_i2s3_m_sel", apll_i2s3_m_parents, 0x320, 19, 1), 852 + MUX(CLK_TOP_APLL_I2S4_M_SEL, "apll_i2s4_m_sel", apll_i2s4_m_parents, 0x320, 20, 1), 853 + MUX(CLK_TOP_APLL_I2S5_M_SEL, "apll_i2s5_m_sel", apll_i2s5_m_parents, 0x320, 21, 1), 854 + MUX(CLK_TOP_APLL_I2S6_M_SEL, "apll_i2s6_m_sel", apll_i2s6_m_parents, 0x320, 22, 1), 855 + MUX(CLK_TOP_APLL_I2S7_M_SEL, "apll_i2s7_m_sel", apll_i2s7_m_parents, 0x320, 23, 1), 856 + MUX(CLK_TOP_APLL_I2S8_M_SEL, "apll_i2s8_m_sel", apll_i2s8_m_parents, 0x320, 24, 1), 857 + MUX(CLK_TOP_APLL_I2S9_M_SEL, "apll_i2s9_m_sel", apll_i2s9_m_parents, 0x320, 25, 1), 858 + }; 859 + 860 + static const struct mtk_composite top_adj_divs[] = { 861 + DIV_GATE(CLK_TOP_APLL12_DIV0, "apll12_div0", "apll_i2s0_m_sel", 0x320, 0, 0x328, 8, 0), 862 + DIV_GATE(CLK_TOP_APLL12_DIV1, "apll12_div1", "apll_i2s1_m_sel", 0x320, 1, 0x328, 8, 8), 863 + DIV_GATE(CLK_TOP_APLL12_DIV2, "apll12_div2", "apll_i2s2_m_sel", 0x320, 2, 0x328, 8, 16), 864 + DIV_GATE(CLK_TOP_APLL12_DIV3, "apll12_div3", "apll_i2s3_m_sel", 0x320, 3, 0x328, 8, 24), 865 + DIV_GATE(CLK_TOP_APLL12_DIV4, "apll12_div4", "apll_i2s4_m_sel", 0x320, 4, 0x334, 8, 0), 866 + DIV_GATE(CLK_TOP_APLL12_DIVB, "apll12_divb", "apll12_div4", 0x320, 5, 0x334, 8, 8), 867 + DIV_GATE(CLK_TOP_APLL12_DIV5, "apll12_div5", "apll_i2s5_m_sel", 0x320, 6, 0x334, 8, 16), 868 + DIV_GATE(CLK_TOP_APLL12_DIV6, "apll12_div6", "apll_i2s6_m_sel", 0x320, 7, 0x334, 8, 24), 869 + DIV_GATE(CLK_TOP_APLL12_DIV7, "apll12_div7", "apll_i2s7_m_sel", 0x320, 8, 0x338, 8, 0), 870 + DIV_GATE(CLK_TOP_APLL12_DIV8, "apll12_div8", "apll_i2s8_m_sel", 0x320, 9, 0x338, 8, 8), 871 + DIV_GATE(CLK_TOP_APLL12_DIV9, "apll12_div9", "apll_i2s9_m_sel", 0x320, 10, 0x338, 8, 16), 872 + }; 873 + 874 + static const struct mtk_gate_regs apmixed_cg_regs = { 875 + .set_ofs = 0x14, 876 + .clr_ofs = 0x14, 877 + .sta_ofs = 0x14, 878 + }; 879 + 880 + #define GATE_APMIXED(_id, _name, _parent, _shift) \ 881 + GATE_MTK(_id, _name, _parent, &apmixed_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr_inv) 882 + 883 + static const struct mtk_gate apmixed_clks[] = { 884 + GATE_APMIXED(CLK_APMIXED_MIPID26M, "mipid26m", "clk26m", 16), 885 + }; 886 + 887 + static const struct mtk_gate_regs infra0_cg_regs = { 888 + .set_ofs = 0x80, 889 + .clr_ofs = 0x84, 890 + .sta_ofs = 0x90, 891 + }; 892 + 893 + static const struct mtk_gate_regs infra1_cg_regs = { 894 + .set_ofs = 0x88, 895 + .clr_ofs = 0x8c, 896 + .sta_ofs = 0x94, 897 + }; 898 + 899 + static const struct mtk_gate_regs infra2_cg_regs = { 900 + .set_ofs = 0xa4, 901 + .clr_ofs = 0xa8, 902 + .sta_ofs = 0xac, 903 + }; 904 + 905 + static const struct mtk_gate_regs infra3_cg_regs = { 906 + .set_ofs = 0xc0, 907 + .clr_ofs = 0xc4, 908 + .sta_ofs = 0xc8, 909 + }; 910 + 911 + static const struct mtk_gate_regs infra4_cg_regs = { 912 + .set_ofs = 0xd0, 913 + .clr_ofs = 0xd4, 914 + .sta_ofs = 0xd8, 915 + }; 916 + 917 + static const struct mtk_gate_regs infra5_cg_regs = { 918 + .set_ofs = 0xe0, 919 + .clr_ofs = 0xe4, 920 + .sta_ofs = 0xe8, 921 + }; 922 + 923 + #define GATE_INFRA0(_id, _name, _parent, _shift) \ 924 + GATE_MTK(_id, _name, _parent, &infra0_cg_regs, _shift, &mtk_clk_gate_ops_setclr) 925 + 926 + #define GATE_INFRA1_FLAGS(_id, _name, _parent, _shift, _flag) \ 927 + GATE_MTK_FLAGS(_id, _name, _parent, &infra1_cg_regs, _shift, \ 928 + &mtk_clk_gate_ops_setclr, _flag) 929 + 930 + #define GATE_INFRA1(_id, _name, _parent, _shift) \ 931 + GATE_INFRA1_FLAGS(_id, _name, _parent, _shift, 0) 932 + 933 + #define GATE_INFRA2(_id, _name, _parent, _shift) \ 934 + GATE_MTK(_id, _name, _parent, &infra2_cg_regs, _shift, &mtk_clk_gate_ops_setclr) 935 + 936 + #define GATE_INFRA3_FLAGS(_id, _name, _parent, _shift, _flag) \ 937 + GATE_MTK_FLAGS(_id, _name, _parent, &infra3_cg_regs, _shift, \ 938 + &mtk_clk_gate_ops_setclr, _flag) 939 + 940 + #define GATE_INFRA3(_id, _name, _parent, _shift) \ 941 + GATE_INFRA3_FLAGS(_id, _name, _parent, _shift, 0) 942 + 943 + #define GATE_INFRA4(_id, _name, _parent, _shift) \ 944 + GATE_MTK(_id, _name, _parent, &infra4_cg_regs, _shift, &mtk_clk_gate_ops_setclr) 945 + 946 + #define GATE_INFRA5_FLAGS(_id, _name, _parent, _shift, _flag) \ 947 + GATE_MTK_FLAGS(_id, _name, _parent, &infra5_cg_regs, _shift, \ 948 + &mtk_clk_gate_ops_setclr, _flag) 949 + 950 + #define GATE_INFRA5(_id, _name, _parent, _shift) \ 951 + GATE_INFRA5_FLAGS(_id, _name, _parent, _shift, 0) 952 + 953 + /* 954 + * CRITICAL CLOCK: 955 + * infra_133m and infra_66m are main peripheral bus clocks of SOC. 956 + * infra_device_apc and infra_device_apc_sync are for device access permission control module. 957 + */ 958 + static const struct mtk_gate infra_clks[] = { 959 + /* INFRA0 */ 960 + GATE_INFRA0(CLK_INFRA_PMIC_TMR, "infra_pmic_tmr", "pwrap_ulposc_sel", 0), 961 + GATE_INFRA0(CLK_INFRA_PMIC_AP, "infra_pmic_ap", "pwrap_ulposc_sel", 1), 962 + GATE_INFRA0(CLK_INFRA_PMIC_MD, "infra_pmic_md", "pwrap_ulposc_sel", 2), 963 + GATE_INFRA0(CLK_INFRA_PMIC_CONN, "infra_pmic_conn", "pwrap_ulposc_sel", 3), 964 + GATE_INFRA0(CLK_INFRA_SCPSYS, "infra_scpsys", "scp_sel", 4), 965 + GATE_INFRA0(CLK_INFRA_SEJ, "infra_sej", "axi_sel", 5), 966 + GATE_INFRA0(CLK_INFRA_APXGPT, "infra_apxgpt", "axi_sel", 6), 967 + GATE_INFRA0(CLK_INFRA_GCE, "infra_gce", "axi_sel", 8), 968 + GATE_INFRA0(CLK_INFRA_GCE2, "infra_gce2", "axi_sel", 9), 969 + GATE_INFRA0(CLK_INFRA_THERM, "infra_therm", "axi_sel", 10), 970 + GATE_INFRA0(CLK_INFRA_I2C0, "infra_i2c0", "i2c_sel", 11), 971 + GATE_INFRA0(CLK_INFRA_AP_DMA_PSEUDO, "infra_ap_dma_pseudo", "axi_sel", 12), 972 + GATE_INFRA0(CLK_INFRA_I2C2, "infra_i2c2", "i2c_sel", 13), 973 + GATE_INFRA0(CLK_INFRA_I2C3, "infra_i2c3", "i2c_sel", 14), 974 + GATE_INFRA0(CLK_INFRA_PWM_H, "infra_pwm_h", "axi_sel", 15), 975 + GATE_INFRA0(CLK_INFRA_PWM1, "infra_pwm1", "pwm_sel", 16), 976 + GATE_INFRA0(CLK_INFRA_PWM2, "infra_pwm2", "pwm_sel", 17), 977 + GATE_INFRA0(CLK_INFRA_PWM3, "infra_pwm3", "pwm_sel", 18), 978 + GATE_INFRA0(CLK_INFRA_PWM4, "infra_pwm4", "pwm_sel", 19), 979 + GATE_INFRA0(CLK_INFRA_PWM, "infra_pwm", "pwm_sel", 21), 980 + GATE_INFRA0(CLK_INFRA_UART0, "infra_uart0", "uart_sel", 22), 981 + GATE_INFRA0(CLK_INFRA_UART1, "infra_uart1", "uart_sel", 23), 982 + GATE_INFRA0(CLK_INFRA_UART2, "infra_uart2", "uart_sel", 24), 983 + GATE_INFRA0(CLK_INFRA_UART3, "infra_uart3", "uart_sel", 25), 984 + GATE_INFRA0(CLK_INFRA_GCE_26M, "infra_gce_26m", "axi_sel", 27), 985 + GATE_INFRA0(CLK_INFRA_CQ_DMA_FPC, "infra_cq_dma_fpc", "axi_sel", 28), 986 + GATE_INFRA0(CLK_INFRA_BTIF, "infra_btif", "axi_sel", 31), 987 + /* INFRA1 */ 988 + GATE_INFRA1(CLK_INFRA_SPI0, "infra_spi0", "spi_sel", 1), 989 + GATE_INFRA1(CLK_INFRA_MSDC0, "infra_msdc0", "msdc50_0_h_sel", 2), 990 + GATE_INFRA1(CLK_INFRA_MSDC1, "infra_msdc1", "msdc50_0_h_sel", 4), 991 + GATE_INFRA1(CLK_INFRA_MSDC2, "infra_msdc2", "msdc50_0_h_sel", 5), 992 + GATE_INFRA1(CLK_INFRA_MSDC0_SRC, "infra_msdc0_src", "msdc50_0_sel", 6), 993 + GATE_INFRA1(CLK_INFRA_GCPU, "infra_gcpu", "axi_sel", 8), 994 + GATE_INFRA1(CLK_INFRA_TRNG, "infra_trng", "axi_sel", 9), 995 + GATE_INFRA1(CLK_INFRA_AUXADC, "infra_auxadc", "clk26m", 10), 996 + GATE_INFRA1(CLK_INFRA_CPUM, "infra_cpum", "axi_sel", 11), 997 + GATE_INFRA1(CLK_INFRA_CCIF1_AP, "infra_ccif1_ap", "axi_sel", 12), 998 + GATE_INFRA1(CLK_INFRA_CCIF1_MD, "infra_ccif1_md", "axi_sel", 13), 999 + GATE_INFRA1(CLK_INFRA_AUXADC_MD, "infra_auxadc_md", "clk26m", 14), 1000 + GATE_INFRA1(CLK_INFRA_PCIE_TL_26M, "infra_pcie_tl_26m", "axi_sel", 15), 1001 + GATE_INFRA1(CLK_INFRA_MSDC1_SRC, "infra_msdc1_src", "msdc30_1_sel", 16), 1002 + GATE_INFRA1(CLK_INFRA_MSDC2_SRC, "infra_msdc2_src", "msdc30_2_sel", 17), 1003 + GATE_INFRA1(CLK_INFRA_PCIE_TL_96M, "infra_pcie_tl_96m", "tl_sel", 18), 1004 + GATE_INFRA1(CLK_INFRA_PCIE_PL_P_250M, "infra_pcie_pl_p_250m", "axi_sel", 19), 1005 + GATE_INFRA1_FLAGS(CLK_INFRA_DEVICE_APC, "infra_device_apc", "axi_sel", 20, CLK_IS_CRITICAL), 1006 + GATE_INFRA1(CLK_INFRA_CCIF_AP, "infra_ccif_ap", "axi_sel", 23), 1007 + GATE_INFRA1(CLK_INFRA_DEBUGSYS, "infra_debugsys", "axi_sel", 24), 1008 + GATE_INFRA1(CLK_INFRA_AUDIO, "infra_audio", "axi_sel", 25), 1009 + GATE_INFRA1(CLK_INFRA_CCIF_MD, "infra_ccif_md", "axi_sel", 26), 1010 + GATE_INFRA1(CLK_INFRA_DXCC_SEC_CORE, "infra_dxcc_sec_core", "dxcc_sel", 27), 1011 + GATE_INFRA1(CLK_INFRA_DXCC_AO, "infra_dxcc_ao", "dxcc_sel", 28), 1012 + GATE_INFRA1(CLK_INFRA_DBG_TRACE, "infra_dbg_trace", "axi_sel", 29), 1013 + GATE_INFRA1(CLK_INFRA_DEVMPU_B, "infra_devmpu_b", "axi_sel", 30), 1014 + GATE_INFRA1(CLK_INFRA_DRAMC_F26M, "infra_dramc_f26m", "clk26m", 31), 1015 + /* INFRA2 */ 1016 + GATE_INFRA2(CLK_INFRA_IRTX, "infra_irtx", "clk26m", 0), 1017 + GATE_INFRA2(CLK_INFRA_SSUSB, "infra_ssusb", "usb_top_sel", 1), 1018 + GATE_INFRA2(CLK_INFRA_DISP_PWM, "infra_disp_pwm", "axi_sel", 2), 1019 + GATE_INFRA2(CLK_INFRA_CLDMA_B, "infra_cldma_b", "axi_sel", 3), 1020 + GATE_INFRA2(CLK_INFRA_AUDIO_26M_B, "infra_audio_26m_b", "clk26m", 4), 1021 + GATE_INFRA2(CLK_INFRA_MODEM_TEMP_SHARE, "infra_modem_temp_share", "clk26m", 5), 1022 + GATE_INFRA2(CLK_INFRA_SPI1, "infra_spi1", "spi_sel", 6), 1023 + GATE_INFRA2(CLK_INFRA_I2C4, "infra_i2c4", "i2c_sel", 7), 1024 + GATE_INFRA2(CLK_INFRA_SPI2, "infra_spi2", "spi_sel", 9), 1025 + GATE_INFRA2(CLK_INFRA_SPI3, "infra_spi3", "spi_sel", 10), 1026 + GATE_INFRA2(CLK_INFRA_UNIPRO_SYS, "infra_unipro_sys", "ufs_sel", 11), 1027 + GATE_INFRA2(CLK_INFRA_UNIPRO_TICK, "infra_unipro_tick", "clk26m", 12), 1028 + GATE_INFRA2(CLK_INFRA_UFS_MP_SAP_B, "infra_ufs_mp_sap_b", "clk26m", 13), 1029 + GATE_INFRA2(CLK_INFRA_MD32_B, "infra_md32_b", "axi_sel", 14), 1030 + GATE_INFRA2(CLK_INFRA_UNIPRO_MBIST, "infra_unipro_mbist", "axi_sel", 16), 1031 + GATE_INFRA2(CLK_INFRA_I2C5, "infra_i2c5", "i2c_sel", 18), 1032 + GATE_INFRA2(CLK_INFRA_I2C5_ARBITER, "infra_i2c5_arbiter", "i2c_sel", 19), 1033 + GATE_INFRA2(CLK_INFRA_I2C5_IMM, "infra_i2c5_imm", "i2c_sel", 20), 1034 + GATE_INFRA2(CLK_INFRA_I2C1_ARBITER, "infra_i2c1_arbiter", "i2c_sel", 21), 1035 + GATE_INFRA2(CLK_INFRA_I2C1_IMM, "infra_i2c1_imm", "i2c_sel", 22), 1036 + GATE_INFRA2(CLK_INFRA_I2C2_ARBITER, "infra_i2c2_arbiter", "i2c_sel", 23), 1037 + GATE_INFRA2(CLK_INFRA_I2C2_IMM, "infra_i2c2_imm", "i2c_sel", 24), 1038 + GATE_INFRA2(CLK_INFRA_SPI4, "infra_spi4", "spi_sel", 25), 1039 + GATE_INFRA2(CLK_INFRA_SPI5, "infra_spi5", "spi_sel", 26), 1040 + GATE_INFRA2(CLK_INFRA_CQ_DMA, "infra_cq_dma", "axi_sel", 27), 1041 + GATE_INFRA2(CLK_INFRA_UFS, "infra_ufs", "ufs_sel", 28), 1042 + GATE_INFRA2(CLK_INFRA_AES_UFSFDE, "infra_aes_ufsfde", "aes_ufsfde_sel", 29), 1043 + GATE_INFRA2(CLK_INFRA_UFS_TICK, "infra_ufs_tick", "ufs_sel", 30), 1044 + GATE_INFRA2(CLK_INFRA_SSUSB_XHCI, "infra_ssusb_xhci", "ssusb_xhci_sel", 31), 1045 + /* INFRA3 */ 1046 + GATE_INFRA3(CLK_INFRA_MSDC0_SELF, "infra_msdc0_self", "msdc50_0_sel", 0), 1047 + GATE_INFRA3(CLK_INFRA_MSDC1_SELF, "infra_msdc1_self", "msdc50_0_sel", 1), 1048 + GATE_INFRA3(CLK_INFRA_MSDC2_SELF, "infra_msdc2_self", "msdc50_0_sel", 2), 1049 + GATE_INFRA3(CLK_INFRA_UFS_AXI, "infra_ufs_axi", "axi_sel", 5), 1050 + GATE_INFRA3(CLK_INFRA_I2C6, "infra_i2c6", "i2c_sel", 6), 1051 + GATE_INFRA3(CLK_INFRA_AP_MSDC0, "infra_ap_msdc0", "msdc50_0_sel", 7), 1052 + GATE_INFRA3(CLK_INFRA_MD_MSDC0, "infra_md_msdc0", "msdc50_0_sel", 8), 1053 + GATE_INFRA3(CLK_INFRA_CCIF5_AP, "infra_ccif5_ap", "axi_sel", 9), 1054 + GATE_INFRA3(CLK_INFRA_CCIF5_MD, "infra_ccif5_md", "axi_sel", 10), 1055 + GATE_INFRA3(CLK_INFRA_PCIE_TOP_H_133M, "infra_pcie_top_h_133m", "axi_sel", 11), 1056 + GATE_INFRA3(CLK_INFRA_FLASHIF_TOP_H_133M, "infra_flashif_top_h_133m", "axi_sel", 14), 1057 + GATE_INFRA3(CLK_INFRA_PCIE_PERI_26M, "infra_pcie_peri_26m", "axi_sel", 15), 1058 + GATE_INFRA3(CLK_INFRA_CCIF2_AP, "infra_ccif2_ap", "axi_sel", 16), 1059 + GATE_INFRA3(CLK_INFRA_CCIF2_MD, "infra_ccif2_md", "axi_sel", 17), 1060 + GATE_INFRA3(CLK_INFRA_CCIF3_AP, "infra_ccif3_ap", "axi_sel", 18), 1061 + GATE_INFRA3(CLK_INFRA_CCIF3_MD, "infra_ccif3_md", "axi_sel", 19), 1062 + GATE_INFRA3(CLK_INFRA_SEJ_F13M, "infra_sej_f13m", "clk26m", 20), 1063 + GATE_INFRA3(CLK_INFRA_AES, "infra_aes", "axi_sel", 21), 1064 + GATE_INFRA3(CLK_INFRA_I2C7, "infra_i2c7", "i2c_sel", 22), 1065 + GATE_INFRA3(CLK_INFRA_I2C8, "infra_i2c8", "i2c_sel", 23), 1066 + GATE_INFRA3(CLK_INFRA_FBIST2FPC, "infra_fbist2fpc", "msdc50_0_sel", 24), 1067 + GATE_INFRA3_FLAGS(CLK_INFRA_DEVICE_APC_SYNC, "infra_device_apc_sync", "axi_sel", 25, 1068 + CLK_IS_CRITICAL), 1069 + GATE_INFRA3(CLK_INFRA_DPMAIF_MAIN, "infra_dpmaif_main", "dpmaif_main_sel", 26), 1070 + GATE_INFRA3(CLK_INFRA_PCIE_TL_32K, "infra_pcie_tl_32k", "axi_sel", 27), 1071 + GATE_INFRA3(CLK_INFRA_CCIF4_AP, "infra_ccif4_ap", "axi_sel", 28), 1072 + GATE_INFRA3(CLK_INFRA_CCIF4_MD, "infra_ccif4_md", "axi_sel", 29), 1073 + GATE_INFRA3(CLK_INFRA_SPI6, "infra_spi6", "spi_sel", 30), 1074 + GATE_INFRA3(CLK_INFRA_SPI7, "infra_spi7", "spi_sel", 31), 1075 + /* INFRA4 */ 1076 + GATE_INFRA4(CLK_INFRA_AP_DMA, "infra_ap_dma", "infra_ap_dma_pseudo", 31), 1077 + /* INFRA5 */ 1078 + GATE_INFRA5_FLAGS(CLK_INFRA_133M, "infra_133m", "axi_sel", 0, CLK_IS_CRITICAL), 1079 + GATE_INFRA5_FLAGS(CLK_INFRA_66M, "infra_66m", "axi_sel", 1, CLK_IS_CRITICAL), 1080 + GATE_INFRA5(CLK_INFRA_66M_PERI_BUS, "infra_66m_peri_bus", "axi_sel", 2), 1081 + GATE_INFRA5(CLK_INFRA_FREE_DCM_133M, "infra_free_dcm_133m", "axi_sel", 3), 1082 + GATE_INFRA5(CLK_INFRA_FREE_DCM_66M, "infra_free_dcm_66m", "axi_sel", 4), 1083 + GATE_INFRA5(CLK_INFRA_PERI_BUS_DCM_133M, "infra_peri_bus_dcm_133m", "axi_sel", 5), 1084 + GATE_INFRA5(CLK_INFRA_PERI_BUS_DCM_66M, "infra_peri_bus_dcm_66m", "axi_sel", 6), 1085 + GATE_INFRA5(CLK_INFRA_FLASHIF_PERI_26M, "infra_flashif_peri_26m", "axi_sel", 30), 1086 + GATE_INFRA5(CLK_INFRA_FLASHIF_SFLASH, "infra_flashif_fsflash", "axi_sel", 31), 1087 + }; 1088 + 1089 + static const struct mtk_gate_regs peri_cg_regs = { 1090 + .set_ofs = 0x20c, 1091 + .clr_ofs = 0x20c, 1092 + .sta_ofs = 0x20c, 1093 + }; 1094 + 1095 + #define GATE_PERI(_id, _name, _parent, _shift) \ 1096 + GATE_MTK(_id, _name, _parent, &peri_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr_inv) 1097 + 1098 + static const struct mtk_gate peri_clks[] = { 1099 + GATE_PERI(CLK_PERI_PERIAXI, "peri_periaxi", "axi_sel", 31), 1100 + }; 1101 + 1102 + static const struct mtk_gate_regs top_cg_regs = { 1103 + .set_ofs = 0x150, 1104 + .clr_ofs = 0x150, 1105 + .sta_ofs = 0x150, 1106 + }; 1107 + 1108 + #define GATE_TOP(_id, _name, _parent, _shift) \ 1109 + GATE_MTK(_id, _name, _parent, &top_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr_inv) 1110 + 1111 + static const struct mtk_gate top_clks[] = { 1112 + GATE_TOP(CLK_TOP_SSUSB_TOP_REF, "ssusb_top_ref", "clk26m", 24), 1113 + GATE_TOP(CLK_TOP_SSUSB_PHY_REF, "ssusb_phy_ref", "clk26m", 25), 1114 + }; 1115 + 1116 + #define MT8192_PLL_FMAX (3800UL * MHZ) 1117 + #define MT8192_PLL_FMIN (1500UL * MHZ) 1118 + #define MT8192_INTEGER_BITS 8 1119 + 1120 + #define PLL(_id, _name, _reg, _pwr_reg, _en_mask, _flags, \ 1121 + _rst_bar_mask, _pcwbits, _pd_reg, _pd_shift, \ 1122 + _tuner_reg, _tuner_en_reg, _tuner_en_bit, \ 1123 + _pcw_reg, _pcw_shift, _pcw_chg_reg, \ 1124 + _en_reg, _pll_en_bit) { \ 1125 + .id = _id, \ 1126 + .name = _name, \ 1127 + .reg = _reg, \ 1128 + .pwr_reg = _pwr_reg, \ 1129 + .en_mask = _en_mask, \ 1130 + .flags = _flags, \ 1131 + .rst_bar_mask = _rst_bar_mask, \ 1132 + .fmax = MT8192_PLL_FMAX, \ 1133 + .fmin = MT8192_PLL_FMIN, \ 1134 + .pcwbits = _pcwbits, \ 1135 + .pcwibits = MT8192_INTEGER_BITS, \ 1136 + .pd_reg = _pd_reg, \ 1137 + .pd_shift = _pd_shift, \ 1138 + .tuner_reg = _tuner_reg, \ 1139 + .tuner_en_reg = _tuner_en_reg, \ 1140 + .tuner_en_bit = _tuner_en_bit, \ 1141 + .pcw_reg = _pcw_reg, \ 1142 + .pcw_shift = _pcw_shift, \ 1143 + .pcw_chg_reg = _pcw_chg_reg, \ 1144 + .en_reg = _en_reg, \ 1145 + .pll_en_bit = _pll_en_bit, \ 1146 + } 1147 + 1148 + #define PLL_B(_id, _name, _reg, _pwr_reg, _en_mask, _flags, \ 1149 + _rst_bar_mask, _pcwbits, _pd_reg, _pd_shift, \ 1150 + _tuner_reg, _tuner_en_reg, _tuner_en_bit, \ 1151 + _pcw_reg, _pcw_shift) \ 1152 + PLL(_id, _name, _reg, _pwr_reg, _en_mask, _flags, \ 1153 + _rst_bar_mask, _pcwbits, _pd_reg, _pd_shift, \ 1154 + _tuner_reg, _tuner_en_reg, _tuner_en_bit, \ 1155 + _pcw_reg, _pcw_shift, 0, 0, 0) 1156 + 1157 + static const struct mtk_pll_data plls[] = { 1158 + PLL_B(CLK_APMIXED_MAINPLL, "mainpll", 0x0340, 0x034c, 0xff000000, 1159 + HAVE_RST_BAR, BIT(23), 22, 0x0344, 24, 0, 0, 0, 0x0344, 0), 1160 + PLL_B(CLK_APMIXED_UNIVPLL, "univpll", 0x0308, 0x0314, 0xff000000, 1161 + HAVE_RST_BAR, BIT(23), 22, 0x030c, 24, 0, 0, 0, 0x030c, 0), 1162 + PLL(CLK_APMIXED_USBPLL, "usbpll", 0x03c4, 0x03cc, 0x00000000, 1163 + 0, 0, 22, 0x03c4, 24, 0, 0, 0, 0x03c4, 0, 0x03c4, 0x03cc, 2), 1164 + PLL_B(CLK_APMIXED_MSDCPLL, "msdcpll", 0x0350, 0x035c, 0x00000000, 1165 + 0, 0, 22, 0x0354, 24, 0, 0, 0, 0x0354, 0), 1166 + PLL_B(CLK_APMIXED_MMPLL, "mmpll", 0x0360, 0x036c, 0xff000000, 1167 + HAVE_RST_BAR, BIT(23), 22, 0x0364, 24, 0, 0, 0, 0x0364, 0), 1168 + PLL_B(CLK_APMIXED_ADSPPLL, "adsppll", 0x0370, 0x037c, 0xff000000, 1169 + HAVE_RST_BAR, BIT(23), 22, 0x0374, 24, 0, 0, 0, 0x0374, 0), 1170 + PLL_B(CLK_APMIXED_MFGPLL, "mfgpll", 0x0268, 0x0274, 0x00000000, 1171 + 0, 0, 22, 0x026c, 24, 0, 0, 0, 0x026c, 0), 1172 + PLL_B(CLK_APMIXED_TVDPLL, "tvdpll", 0x0380, 0x038c, 0x00000000, 1173 + 0, 0, 22, 0x0384, 24, 0, 0, 0, 0x0384, 0), 1174 + PLL_B(CLK_APMIXED_APLL1, "apll1", 0x0318, 0x0328, 0x00000000, 1175 + 0, 0, 32, 0x031c, 24, 0x0040, 0x000c, 0, 0x0320, 0), 1176 + PLL_B(CLK_APMIXED_APLL2, "apll2", 0x032c, 0x033c, 0x00000000, 1177 + 0, 0, 32, 0x0330, 24, 0, 0, 0, 0x0334, 0), 1178 + }; 1179 + 1180 + static struct clk_onecell_data *top_clk_data; 1181 + 1182 + static void clk_mt8192_top_init_early(struct device_node *node) 1183 + { 1184 + int i; 1185 + 1186 + top_clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK); 1187 + if (!top_clk_data) 1188 + return; 1189 + 1190 + for (i = 0; i < CLK_TOP_NR_CLK; i++) 1191 + top_clk_data->clks[i] = ERR_PTR(-EPROBE_DEFER); 1192 + 1193 + mtk_clk_register_factors(top_early_divs, ARRAY_SIZE(top_early_divs), top_clk_data); 1194 + 1195 + of_clk_add_provider(node, of_clk_src_onecell_get, top_clk_data); 1196 + } 1197 + 1198 + CLK_OF_DECLARE_DRIVER(mt8192_topckgen, "mediatek,mt8192-topckgen", 1199 + clk_mt8192_top_init_early); 1200 + 1201 + static int clk_mt8192_top_probe(struct platform_device *pdev) 1202 + { 1203 + struct device_node *node = pdev->dev.of_node; 1204 + int r; 1205 + void __iomem *base; 1206 + 1207 + base = devm_platform_ioremap_resource(pdev, 0); 1208 + if (IS_ERR(base)) 1209 + return PTR_ERR(base); 1210 + 1211 + mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), top_clk_data); 1212 + mtk_clk_register_factors(top_early_divs, ARRAY_SIZE(top_early_divs), top_clk_data); 1213 + mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data); 1214 + mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node, &mt8192_clk_lock, 1215 + top_clk_data); 1216 + mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base, &mt8192_clk_lock, 1217 + top_clk_data); 1218 + mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base, &mt8192_clk_lock, 1219 + top_clk_data); 1220 + r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), top_clk_data); 1221 + if (r) 1222 + return r; 1223 + 1224 + return of_clk_add_provider(node, of_clk_src_onecell_get, top_clk_data); 1225 + } 1226 + 1227 + static int clk_mt8192_infra_probe(struct platform_device *pdev) 1228 + { 1229 + struct clk_onecell_data *clk_data; 1230 + struct device_node *node = pdev->dev.of_node; 1231 + int r; 1232 + 1233 + clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK); 1234 + if (!clk_data) 1235 + return -ENOMEM; 1236 + 1237 + r = mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks), clk_data); 1238 + if (r) 1239 + return r; 1240 + 1241 + return of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); 1242 + } 1243 + 1244 + static int clk_mt8192_peri_probe(struct platform_device *pdev) 1245 + { 1246 + struct clk_onecell_data *clk_data; 1247 + struct device_node *node = pdev->dev.of_node; 1248 + int r; 1249 + 1250 + clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK); 1251 + if (!clk_data) 1252 + return -ENOMEM; 1253 + 1254 + r = mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks), clk_data); 1255 + if (r) 1256 + return r; 1257 + 1258 + return of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); 1259 + } 1260 + 1261 + static int clk_mt8192_apmixed_probe(struct platform_device *pdev) 1262 + { 1263 + struct clk_onecell_data *clk_data; 1264 + struct device_node *node = pdev->dev.of_node; 1265 + int r; 1266 + 1267 + clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK); 1268 + if (!clk_data) 1269 + return -ENOMEM; 1270 + 1271 + mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data); 1272 + r = mtk_clk_register_gates(node, apmixed_clks, ARRAY_SIZE(apmixed_clks), clk_data); 1273 + if (r) 1274 + return r; 1275 + 1276 + return of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); 1277 + } 1278 + 1279 + static const struct of_device_id of_match_clk_mt8192[] = { 1280 + { 1281 + .compatible = "mediatek,mt8192-apmixedsys", 1282 + .data = clk_mt8192_apmixed_probe, 1283 + }, { 1284 + .compatible = "mediatek,mt8192-topckgen", 1285 + .data = clk_mt8192_top_probe, 1286 + }, { 1287 + .compatible = "mediatek,mt8192-infracfg", 1288 + .data = clk_mt8192_infra_probe, 1289 + }, { 1290 + .compatible = "mediatek,mt8192-pericfg", 1291 + .data = clk_mt8192_peri_probe, 1292 + }, { 1293 + /* sentinel */ 1294 + } 1295 + }; 1296 + 1297 + static int clk_mt8192_probe(struct platform_device *pdev) 1298 + { 1299 + int (*clk_probe)(struct platform_device *pdev); 1300 + int r; 1301 + 1302 + clk_probe = of_device_get_match_data(&pdev->dev); 1303 + if (!clk_probe) 1304 + return -EINVAL; 1305 + 1306 + r = clk_probe(pdev); 1307 + if (r) 1308 + dev_err(&pdev->dev, "could not register clock provider: %s: %d\n", pdev->name, r); 1309 + 1310 + return r; 1311 + } 1312 + 1313 + static struct platform_driver clk_mt8192_drv = { 1314 + .probe = clk_mt8192_probe, 1315 + .driver = { 1316 + .name = "clk-mt8192", 1317 + .of_match_table = of_match_clk_mt8192, 1318 + }, 1319 + }; 1320 + 1321 + static int __init clk_mt8192_init(void) 1322 + { 1323 + return platform_driver_register(&clk_mt8192_drv); 1324 + } 1325 + 1326 + arch_initcall(clk_mt8192_init);
+24 -1
drivers/clk/mediatek/clk-mtk.c
··· 13 13 #include <linux/clkdev.h> 14 14 #include <linux/mfd/syscon.h> 15 15 #include <linux/device.h> 16 + #include <linux/of_device.h> 16 17 17 18 #include "clk-mtk.h" 18 19 #include "clk-gate.h" ··· 107 106 if (!clk_data) 108 107 return -ENOMEM; 109 108 110 - regmap = syscon_node_to_regmap(node); 109 + regmap = device_node_to_regmap(node); 111 110 if (IS_ERR(regmap)) { 112 111 pr_err("Cannot find regmap for %pOF: %ld\n", node, 113 112 PTR_ERR(regmap)); ··· 286 285 if (clk_data) 287 286 clk_data->clks[mcd->id] = clk; 288 287 } 288 + } 289 + 290 + int mtk_clk_simple_probe(struct platform_device *pdev) 291 + { 292 + const struct mtk_clk_desc *mcd; 293 + struct clk_onecell_data *clk_data; 294 + struct device_node *node = pdev->dev.of_node; 295 + int r; 296 + 297 + mcd = of_device_get_match_data(&pdev->dev); 298 + if (!mcd) 299 + return -EINVAL; 300 + 301 + clk_data = mtk_alloc_clk_data(mcd->num_clks); 302 + if (!clk_data) 303 + return -ENOMEM; 304 + 305 + r = mtk_clk_register_gates(node, mcd->clks, mcd->num_clks, clk_data); 306 + if (r) 307 + return r; 308 + 309 + return of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); 289 310 }
+19 -9
drivers/clk/mediatek/clk-mtk.h
··· 10 10 #include <linux/regmap.h> 11 11 #include <linux/bitops.h> 12 12 #include <linux/clk-provider.h> 13 + #include <linux/platform_device.h> 13 14 14 15 struct clk; 15 16 struct clk_onecell_data; ··· 214 213 struct mtk_pll_data { 215 214 int id; 216 215 const char *name; 217 - uint32_t reg; 218 - uint32_t pwr_reg; 219 - uint32_t en_mask; 220 - uint32_t pd_reg; 221 - uint32_t tuner_reg; 222 - uint32_t tuner_en_reg; 223 - uint8_t tuner_en_bit; 216 + u32 reg; 217 + u32 pwr_reg; 218 + u32 en_mask; 219 + u32 pd_reg; 220 + u32 tuner_reg; 221 + u32 tuner_en_reg; 222 + u8 tuner_en_bit; 224 223 int pd_shift; 225 224 unsigned int flags; 226 225 const struct clk_ops *ops; ··· 229 228 unsigned long fmax; 230 229 int pcwbits; 231 230 int pcwibits; 232 - uint32_t pcw_reg; 231 + u32 pcw_reg; 233 232 int pcw_shift; 234 - uint32_t pcw_chg_reg; 233 + u32 pcw_chg_reg; 235 234 const struct mtk_pll_div_table *div_table; 236 235 const char *parent_name; 236 + u32 en_reg; 237 + u8 pll_en_bit; /* Assume 0, indicates BIT(0) by default */ 237 238 }; 238 239 239 240 void mtk_clk_register_plls(struct device_node *node, ··· 250 247 251 248 void mtk_register_reset_controller_set_clr(struct device_node *np, 252 249 unsigned int num_regs, int regofs); 250 + 251 + struct mtk_clk_desc { 252 + const struct mtk_gate *clks; 253 + size_t num_clks; 254 + }; 255 + 256 + int mtk_clk_simple_probe(struct platform_device *pdev); 253 257 254 258 #endif /* __DRV_CLK_MTK_H */
+8 -3
drivers/clk/mediatek/clk-mux.c
··· 116 116 return 0; 117 117 } 118 118 119 - static const struct clk_ops mtk_mux_ops = { 119 + const struct clk_ops mtk_mux_clr_set_upd_ops = { 120 + .get_parent = mtk_clk_mux_get_parent, 121 + .set_parent = mtk_clk_mux_set_parent_setclr_lock, 122 + }; 123 + 124 + const struct clk_ops mtk_mux_gate_clr_set_upd_ops = { 120 125 .enable = mtk_clk_mux_enable_setclr, 121 126 .disable = mtk_clk_mux_disable_setclr, 122 127 .is_enabled = mtk_clk_mux_is_enabled, ··· 145 140 init.flags = mux->flags | CLK_SET_RATE_PARENT; 146 141 init.parent_names = mux->parent_names; 147 142 init.num_parents = mux->num_parents; 148 - init.ops = &mtk_mux_ops; 143 + init.ops = mux->ops; 149 144 150 145 clk_mux->regmap = regmap; 151 146 clk_mux->data = mux; ··· 170 165 struct clk *clk; 171 166 int i; 172 167 173 - regmap = syscon_node_to_regmap(node); 168 + regmap = device_node_to_regmap(node); 174 169 if (IS_ERR(regmap)) { 175 170 pr_err("Cannot find regmap for %pOF: %ld\n", node, 176 171 PTR_ERR(regmap));
+16 -2
drivers/clk/mediatek/clk-mux.h
··· 33 33 u8 gate_shift; 34 34 s8 upd_shift; 35 35 36 + const struct clk_ops *ops; 36 37 signed char num_parents; 37 38 }; 38 39 39 40 #define GATE_CLR_SET_UPD_FLAGS(_id, _name, _parents, _mux_ofs, \ 40 41 _mux_set_ofs, _mux_clr_ofs, _shift, _width, \ 41 - _gate, _upd_ofs, _upd, _flags) { \ 42 + _gate, _upd_ofs, _upd, _flags, _ops) { \ 42 43 .id = _id, \ 43 44 .name = _name, \ 44 45 .mux_ofs = _mux_ofs, \ ··· 53 52 .parent_names = _parents, \ 54 53 .num_parents = ARRAY_SIZE(_parents), \ 55 54 .flags = _flags, \ 55 + .ops = &_ops, \ 56 56 } 57 + 58 + extern const struct clk_ops mtk_mux_clr_set_upd_ops; 59 + extern const struct clk_ops mtk_mux_gate_clr_set_upd_ops; 57 60 58 61 #define MUX_GATE_CLR_SET_UPD_FLAGS(_id, _name, _parents, _mux_ofs, \ 59 62 _mux_set_ofs, _mux_clr_ofs, _shift, _width, \ 60 63 _gate, _upd_ofs, _upd, _flags) \ 61 64 GATE_CLR_SET_UPD_FLAGS(_id, _name, _parents, _mux_ofs, \ 62 65 _mux_set_ofs, _mux_clr_ofs, _shift, _width, \ 63 - _gate, _upd_ofs, _upd, _flags) \ 66 + _gate, _upd_ofs, _upd, _flags, \ 67 + mtk_mux_gate_clr_set_upd_ops) 64 68 65 69 #define MUX_GATE_CLR_SET_UPD(_id, _name, _parents, _mux_ofs, \ 66 70 _mux_set_ofs, _mux_clr_ofs, _shift, _width, \ ··· 74 68 _mux_ofs, _mux_set_ofs, _mux_clr_ofs, _shift, \ 75 69 _width, _gate, _upd_ofs, _upd, \ 76 70 CLK_SET_RATE_PARENT) 71 + 72 + #define MUX_CLR_SET_UPD(_id, _name, _parents, _mux_ofs, \ 73 + _mux_set_ofs, _mux_clr_ofs, _shift, _width, \ 74 + _upd_ofs, _upd) \ 75 + GATE_CLR_SET_UPD_FLAGS(_id, _name, _parents, _mux_ofs, \ 76 + _mux_set_ofs, _mux_clr_ofs, _shift, _width, \ 77 + 0, _upd_ofs, _upd, CLK_SET_RATE_PARENT, \ 78 + mtk_mux_clr_set_upd_ops) 77 79 78 80 int mtk_clk_register_muxes(const struct mtk_mux *muxes, 79 81 int num, struct device_node *node,
+24 -7
drivers/clk/mediatek/clk-pll.c
··· 44 44 void __iomem *tuner_en_addr; 45 45 void __iomem *pcw_addr; 46 46 void __iomem *pcw_chg_addr; 47 + void __iomem *en_addr; 47 48 const struct mtk_pll_data *data; 48 49 }; 49 50 ··· 57 56 { 58 57 struct mtk_clk_pll *pll = to_mtk_clk_pll(hw); 59 58 60 - return (readl(pll->base_addr + REG_CON0) & CON0_BASE_EN) != 0; 59 + return (readl(pll->en_addr) & BIT(pll->data->pll_en_bit)) != 0; 61 60 } 62 61 63 62 static unsigned long __mtk_pll_recalc_rate(struct mtk_clk_pll *pll, u32 fin, ··· 239 238 { 240 239 struct mtk_clk_pll *pll = to_mtk_clk_pll(hw); 241 240 u32 r; 241 + u32 div_en_mask; 242 242 243 243 r = readl(pll->pwr_addr) | CON0_PWR_ON; 244 244 writel(r, pll->pwr_addr); ··· 249 247 writel(r, pll->pwr_addr); 250 248 udelay(1); 251 249 252 - r = readl(pll->base_addr + REG_CON0); 253 - r |= pll->data->en_mask; 254 - writel(r, pll->base_addr + REG_CON0); 250 + r = readl(pll->en_addr) | BIT(pll->data->pll_en_bit); 251 + writel(r, pll->en_addr); 252 + 253 + div_en_mask = pll->data->en_mask & ~CON0_BASE_EN; 254 + if (div_en_mask) { 255 + r = readl(pll->base_addr + REG_CON0) | div_en_mask; 256 + writel(r, pll->base_addr + REG_CON0); 257 + } 255 258 256 259 __mtk_pll_tuner_enable(pll); 257 260 ··· 275 268 { 276 269 struct mtk_clk_pll *pll = to_mtk_clk_pll(hw); 277 270 u32 r; 271 + u32 div_en_mask; 278 272 279 273 if (pll->data->flags & HAVE_RST_BAR) { 280 274 r = readl(pll->base_addr + REG_CON0); ··· 285 277 286 278 __mtk_pll_tuner_disable(pll); 287 279 288 - r = readl(pll->base_addr + REG_CON0); 289 - r &= ~CON0_BASE_EN; 290 - writel(r, pll->base_addr + REG_CON0); 280 + div_en_mask = pll->data->en_mask & ~CON0_BASE_EN; 281 + if (div_en_mask) { 282 + r = readl(pll->base_addr + REG_CON0) & ~div_en_mask; 283 + writel(r, pll->base_addr + REG_CON0); 284 + } 285 + 286 + r = readl(pll->en_addr) & ~BIT(pll->data->pll_en_bit); 287 + writel(r, pll->en_addr); 291 288 292 289 r = readl(pll->pwr_addr) | CON0_ISO_EN; 293 290 writel(r, pll->pwr_addr); ··· 334 321 pll->tuner_addr = base + data->tuner_reg; 335 322 if (data->tuner_en_reg) 336 323 pll->tuner_en_addr = base + data->tuner_en_reg; 324 + if (data->en_reg) 325 + pll->en_addr = base + data->en_reg; 326 + else 327 + pll->en_addr = pll->base_addr + REG_CON0; 337 328 pll->hw.init = &init; 338 329 pll->data = data; 339 330
+1 -1
drivers/clk/mediatek/reset.c
··· 98 98 int ret; 99 99 struct regmap *regmap; 100 100 101 - regmap = syscon_node_to_regmap(np); 101 + regmap = device_node_to_regmap(np); 102 102 if (IS_ERR(regmap)) { 103 103 pr_err("Cannot find regmap for %pOF: %ld\n", np, 104 104 PTR_ERR(regmap));
+1
drivers/clk/mvebu/kirkwood.c
··· 265 265 static const struct clk_muxing_soc_desc kirkwood_mux_desc[] __initconst = { 266 266 { "powersave", powersave_parents, ARRAY_SIZE(powersave_parents), 267 267 11, 1, 0 }, 268 + { } 268 269 }; 269 270 270 271 static struct clk *clk_muxing_get_src(
+58 -2
drivers/clk/qcom/Kconfig
··· 240 240 Say Y if you want to support multimedia devices such as display, 241 241 graphics, video encode/decode, camera, etc. 242 242 243 + config MSM_GCC_8953 244 + tristate "MSM8953 Global Clock Controller" 245 + select QCOM_GDSC 246 + help 247 + Support for the global clock controller on msm8953 devices. 248 + Say Y if you want to use devices such as UART, SPI i2c, USB, 249 + SD/eMMC, display, graphics, camera etc. 250 + 243 251 config MSM_GCC_8974 244 252 tristate "MSM8974 Global Clock Controller" 245 253 select QCOM_GDSC ··· 262 254 select QCOM_GDSC 263 255 help 264 256 Support for the multimedia clock controller on msm8974 devices. 257 + Say Y if you want to support multimedia devices such as display, 258 + graphics, video encode/decode, camera, etc. 259 + 260 + config MSM_MMCC_8994 261 + tristate "MSM8994 Multimedia Clock Controller" 262 + select MSM_GCC_8994 263 + select QCOM_GDSC 264 + help 265 + Support for the multimedia clock controller on msm8994 devices. 265 266 Say Y if you want to support multimedia devices such as display, 266 267 graphics, video encode/decode, camera, etc. 267 268 ··· 349 332 Say Y if you want to support display devices and functionality such as 350 333 splash screen. 351 334 335 + config SC_DISPCC_7280 336 + tristate "SC7280 Display Clock Controller" 337 + select SC_GCC_7280 338 + help 339 + Support for the display clock controller on Qualcomm Technologies, Inc. 340 + SC7280 devices. 341 + Say Y if you want to support display devices and functionality such as 342 + splash screen. 343 + 352 344 config SC_GCC_7180 353 345 tristate "SC7180 Global Clock Controller" 354 346 select QCOM_GDSC ··· 402 376 Say Y if you want to support graphics controller devices and 403 377 functionality such as 3D graphics. 404 378 379 + config SC_GPUCC_7280 380 + tristate "SC7280 Graphics Clock Controller" 381 + select SC_GCC_7280 382 + help 383 + Support for the graphics clock controller on SC7280 devices. 384 + Say Y if you want to support graphics controller devices and 385 + functionality such as 3D graphics. 386 + 405 387 config SC_MSS_7180 406 388 tristate "SC7180 Modem Clock Controller" 407 389 select SC_GCC_7180 ··· 424 390 select SC_GCC_7180 425 391 help 426 392 Support for the video clock controller on SC7180 devices. 393 + Say Y if you want to support video devices and functionality such as 394 + video encode and decode. 395 + 396 + config SC_VIDEOCC_7280 397 + tristate "SC7280 Video Clock Controller" 398 + select SC_GCC_7280 399 + help 400 + Support for the video clock controller on SC7280 devices. 427 401 Say Y if you want to support video devices and functionality such as 428 402 video encode and decode. 429 403 ··· 548 506 Say Y if you want to support display devices and functionality such as 549 507 splash screen. 550 508 509 + config SM_GCC_6115 510 + tristate "SM6115 and SM4250 Global Clock Controller" 511 + help 512 + Support for the global clock controller on SM6115 and SM4250 devices. 513 + Say Y if you want to use peripheral devices such as UART, SPI, 514 + i2C, USB, UFS, SDDC, PCIe, etc. 515 + 551 516 config SM_GCC_6125 552 517 tristate "SM6125 Global Clock Controller" 553 518 help 554 519 Support for the global clock controller on SM6125 devices. 520 + Say Y if you want to use peripheral devices such as UART, 521 + SPI, I2C, USB, SD/UFS, PCIe etc. 522 + 523 + config SM_GCC_6350 524 + tristate "SM6350 Global Clock Controller" 525 + help 526 + Support for the global clock controller on SM6350 devices. 555 527 Say Y if you want to use peripheral devices such as UART, 556 528 SPI, I2C, USB, SD/UFS, PCIe etc. 557 529 ··· 610 554 611 555 config SM_VIDEOCC_8150 612 556 tristate "SM8150 Video Clock Controller" 613 - select SDM_GCC_8150 557 + select SM_GCC_8150 614 558 select QCOM_GDSC 615 559 help 616 560 Support for the video clock controller on SM8150 devices. ··· 619 563 620 564 config SM_VIDEOCC_8250 621 565 tristate "SM8250 Video Clock Controller" 622 - select SDM_GCC_8250 566 + select SM_GCC_8250 623 567 select QCOM_GDSC 624 568 help 625 569 Support for the video clock controller on SM8250 devices.
+7
drivers/clk/qcom/Makefile
··· 33 33 obj-$(CONFIG_MSM_GCC_8660) += gcc-msm8660.o 34 34 obj-$(CONFIG_MSM_GCC_8916) += gcc-msm8916.o 35 35 obj-$(CONFIG_MSM_GCC_8939) += gcc-msm8939.o 36 + obj-$(CONFIG_MSM_GCC_8953) += gcc-msm8953.o 36 37 obj-$(CONFIG_MSM_GCC_8960) += gcc-msm8960.o 37 38 obj-$(CONFIG_MSM_GCC_8974) += gcc-msm8974.o 38 39 obj-$(CONFIG_MSM_GCC_8994) += gcc-msm8994.o ··· 43 42 obj-$(CONFIG_MSM_GPUCC_8998) += gpucc-msm8998.o 44 43 obj-$(CONFIG_MSM_MMCC_8960) += mmcc-msm8960.o 45 44 obj-$(CONFIG_MSM_MMCC_8974) += mmcc-msm8974.o 45 + obj-$(CONFIG_MSM_MMCC_8994) += mmcc-msm8994.o 46 46 obj-$(CONFIG_MSM_MMCC_8996) += mmcc-msm8996.o 47 47 obj-$(CONFIG_MSM_MMCC_8998) += mmcc-msm8998.o 48 48 obj-$(CONFIG_QCOM_A53PLL) += a53-pll.o ··· 59 57 obj-$(CONFIG_QCS_TURING_404) += turingcc-qcs404.o 60 58 obj-$(CONFIG_SC_CAMCC_7180) += camcc-sc7180.o 61 59 obj-$(CONFIG_SC_DISPCC_7180) += dispcc-sc7180.o 60 + obj-$(CONFIG_SC_DISPCC_7280) += dispcc-sc7280.o 62 61 obj-$(CONFIG_SC_GCC_7180) += gcc-sc7180.o 63 62 obj-$(CONFIG_SC_GCC_7280) += gcc-sc7280.o 64 63 obj-$(CONFIG_SC_GCC_8180X) += gcc-sc8180x.o 65 64 obj-$(CONFIG_SC_GPUCC_7180) += gpucc-sc7180.o 65 + obj-$(CONFIG_SC_GPUCC_7280) += gpucc-sc7280.o 66 66 obj-$(CONFIG_SC_LPASS_CORECC_7180) += lpasscorecc-sc7180.o 67 67 obj-$(CONFIG_SC_MSS_7180) += mss-sc7180.o 68 68 obj-$(CONFIG_SC_VIDEOCC_7180) += videocc-sc7180.o 69 + obj-$(CONFIG_SC_VIDEOCC_7280) += videocc-sc7280.o 69 70 obj-$(CONFIG_SDM_CAMCC_845) += camcc-sdm845.o 70 71 obj-$(CONFIG_SDM_DISPCC_845) += dispcc-sdm845.o 71 72 obj-$(CONFIG_SDM_GCC_660) += gcc-sdm660.o ··· 81 76 obj-$(CONFIG_SDX_GCC_55) += gcc-sdx55.o 82 77 obj-$(CONFIG_SM_CAMCC_8250) += camcc-sm8250.o 83 78 obj-$(CONFIG_SM_DISPCC_8250) += dispcc-sm8250.o 79 + obj-$(CONFIG_SM_GCC_6115) += gcc-sm6115.o 84 80 obj-$(CONFIG_SM_GCC_6125) += gcc-sm6125.o 81 + obj-$(CONFIG_SM_GCC_6350) += gcc-sm6350.o 85 82 obj-$(CONFIG_SM_GCC_8150) += gcc-sm8150.o 86 83 obj-$(CONFIG_SM_GCC_8250) += gcc-sm8250.o 87 84 obj-$(CONFIG_SM_GCC_8350) += gcc-sm8350.o
+65 -3
drivers/clk/qcom/a53-pll.c
··· 6 6 * Author: Georgi Djakov <georgi.djakov@linaro.org> 7 7 */ 8 8 9 + #include <linux/clk.h> 9 10 #include <linux/clk-provider.h> 10 11 #include <linux/kernel.h> 11 12 #include <linux/platform_device.h> 13 + #include <linux/pm_opp.h> 12 14 #include <linux/regmap.h> 13 15 #include <linux/module.h> 14 16 ··· 36 34 .fast_io = true, 37 35 }; 38 36 37 + static struct pll_freq_tbl *qcom_a53pll_get_freq_tbl(struct device *dev) 38 + { 39 + struct pll_freq_tbl *freq_tbl; 40 + unsigned long xo_freq; 41 + unsigned long freq; 42 + struct clk *xo_clk; 43 + int count; 44 + int ret; 45 + int i; 46 + 47 + xo_clk = devm_clk_get(dev, "xo"); 48 + if (IS_ERR(xo_clk)) 49 + return NULL; 50 + 51 + xo_freq = clk_get_rate(xo_clk); 52 + 53 + ret = devm_pm_opp_of_add_table(dev); 54 + if (ret) 55 + return NULL; 56 + 57 + count = dev_pm_opp_get_opp_count(dev); 58 + if (count <= 0) 59 + return NULL; 60 + 61 + freq_tbl = devm_kcalloc(dev, count + 1, sizeof(*freq_tbl), GFP_KERNEL); 62 + if (!freq_tbl) 63 + return NULL; 64 + 65 + for (i = 0, freq = 0; i < count; i++, freq++) { 66 + struct dev_pm_opp *opp; 67 + 68 + opp = dev_pm_opp_find_freq_ceil(dev, &freq); 69 + if (IS_ERR(opp)) 70 + return NULL; 71 + 72 + /* Skip the freq that is not divisible */ 73 + if (freq % xo_freq) 74 + continue; 75 + 76 + freq_tbl[i].freq = freq; 77 + freq_tbl[i].l = freq / xo_freq; 78 + freq_tbl[i].n = 1; 79 + 80 + dev_pm_opp_put(opp); 81 + } 82 + 83 + return freq_tbl; 84 + } 85 + 39 86 static int qcom_a53pll_probe(struct platform_device *pdev) 40 87 { 41 88 struct device *dev = &pdev->dev; 89 + struct device_node *np = dev->of_node; 42 90 struct regmap *regmap; 43 91 struct resource *res; 44 92 struct clk_pll *pll; ··· 116 64 pll->mode_reg = 0x00; 117 65 pll->status_reg = 0x1c; 118 66 pll->status_bit = 16; 119 - pll->freq_tbl = a53pll_freq; 120 67 121 - init.name = "a53pll"; 68 + pll->freq_tbl = qcom_a53pll_get_freq_tbl(dev); 69 + if (!pll->freq_tbl) { 70 + /* Fall on a53pll_freq if no freq_tbl is found from OPP */ 71 + pll->freq_tbl = a53pll_freq; 72 + } 73 + 74 + /* Use an unique name by appending @unit-address */ 75 + init.name = devm_kasprintf(dev, GFP_KERNEL, "a53pll%s", 76 + strchrnul(np->full_name, '@')); 77 + if (!init.name) 78 + return -ENOMEM; 79 + 122 80 init.parent_names = (const char *[]){ "xo" }; 123 81 init.num_parents = 1; 124 82 init.ops = &clk_pll_sr2_ops; 125 - init.flags = CLK_IS_CRITICAL; 126 83 pll->clkr.hw.init = &init; 127 84 128 85 ret = devm_clk_register_regmap(dev, &pll->clkr); ··· 152 91 153 92 static const struct of_device_id qcom_a53pll_match_table[] = { 154 93 { .compatible = "qcom,msm8916-a53pll" }, 94 + { .compatible = "qcom,msm8939-a53pll" }, 155 95 { } 156 96 }; 157 97 MODULE_DEVICE_TABLE(of, qcom_a53pll_match_table);
+8 -2
drivers/clk/qcom/apcs-msm8916.c
··· 46 46 { 47 47 struct device *dev = &pdev->dev; 48 48 struct device *parent = dev->parent; 49 + struct device_node *np = parent->of_node; 49 50 struct clk_regmap_mux_div *a53cc; 50 51 struct regmap *regmap; 51 52 struct clk_init_data init = { }; ··· 62 61 if (!a53cc) 63 62 return -ENOMEM; 64 63 65 - init.name = "a53mux"; 64 + /* Use an unique name by appending parent's @unit-address */ 65 + init.name = devm_kasprintf(dev, GFP_KERNEL, "a53mux%s", 66 + strchrnul(np->full_name, '@')); 67 + if (!init.name) 68 + return -ENOMEM; 69 + 66 70 init.parent_data = pdata; 67 71 init.num_parents = ARRAY_SIZE(pdata); 68 72 init.ops = &clk_regmap_mux_div_ops; 69 - init.flags = CLK_SET_RATE_PARENT; 73 + init.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT; 70 74 71 75 a53cc->clkr.hw.init = &init; 72 76 a53cc->clkr.regmap = regmap;
+10 -15
drivers/clk/qcom/camcc-sc7180.c
··· 1652 1652 struct regmap *regmap; 1653 1653 int ret; 1654 1654 1655 - pm_runtime_enable(&pdev->dev); 1656 - ret = pm_clk_create(&pdev->dev); 1655 + ret = devm_pm_runtime_enable(&pdev->dev); 1656 + if (ret < 0) 1657 + return ret; 1658 + 1659 + ret = devm_pm_clk_create(&pdev->dev); 1657 1660 if (ret < 0) 1658 1661 return ret; 1659 1662 1660 1663 ret = pm_clk_add(&pdev->dev, "xo"); 1661 1664 if (ret < 0) { 1662 1665 dev_err(&pdev->dev, "Failed to acquire XO clock\n"); 1663 - goto disable_pm_runtime; 1666 + return ret; 1664 1667 } 1665 1668 1666 1669 ret = pm_clk_add(&pdev->dev, "iface"); 1667 1670 if (ret < 0) { 1668 1671 dev_err(&pdev->dev, "Failed to acquire iface clock\n"); 1669 - goto disable_pm_runtime; 1672 + return ret; 1670 1673 } 1671 1674 1672 1675 ret = pm_runtime_get(&pdev->dev); 1673 1676 if (ret) 1674 - goto destroy_pm_clk; 1677 + return ret; 1675 1678 1676 1679 regmap = qcom_cc_map(pdev, &cam_cc_sc7180_desc); 1677 1680 if (IS_ERR(regmap)) { 1678 1681 ret = PTR_ERR(regmap); 1679 1682 pm_runtime_put(&pdev->dev); 1680 - goto destroy_pm_clk; 1683 + return ret; 1681 1684 } 1682 1685 1683 1686 clk_fabia_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll0_config); ··· 1692 1689 pm_runtime_put(&pdev->dev); 1693 1690 if (ret < 0) { 1694 1691 dev_err(&pdev->dev, "Failed to register CAM CC clocks\n"); 1695 - goto destroy_pm_clk; 1692 + return ret; 1696 1693 } 1697 1694 1698 1695 return 0; 1699 - 1700 - destroy_pm_clk: 1701 - pm_clk_destroy(&pdev->dev); 1702 - 1703 - disable_pm_runtime: 1704 - pm_runtime_disable(&pdev->dev); 1705 - 1706 - return ret; 1707 1696 } 1708 1697 1709 1698 static const struct dev_pm_ops cam_cc_pm_ops = {
+21
drivers/clk/qcom/clk-rpmh.c
··· 536 536 .num_clks = ARRAY_SIZE(sc7280_rpmh_clocks), 537 537 }; 538 538 539 + DEFINE_CLK_RPMH_VRM(sm6350, ln_bb_clk2, ln_bb_clk2_ao, "lnbclkg2", 4); 540 + DEFINE_CLK_RPMH_VRM(sm6350, ln_bb_clk3, ln_bb_clk3_ao, "lnbclkg3", 4); 541 + DEFINE_CLK_RPMH_ARC(sm6350, qlink, qlink_ao, "qphy.lvl", 0x1, 4); 542 + 543 + static struct clk_hw *sm6350_rpmh_clocks[] = { 544 + [RPMH_CXO_CLK] = &sc7280_bi_tcxo.hw, 545 + [RPMH_CXO_CLK_A] = &sc7280_bi_tcxo_ao.hw, 546 + [RPMH_LN_BB_CLK2] = &sm6350_ln_bb_clk2.hw, 547 + [RPMH_LN_BB_CLK2_A] = &sm6350_ln_bb_clk2_ao.hw, 548 + [RPMH_LN_BB_CLK3] = &sm6350_ln_bb_clk3.hw, 549 + [RPMH_LN_BB_CLK3_A] = &sm6350_ln_bb_clk3_ao.hw, 550 + [RPMH_QLINK_CLK] = &sm6350_qlink.hw, 551 + [RPMH_QLINK_CLK_A] = &sm6350_qlink_ao.hw, 552 + }; 553 + 554 + static const struct clk_rpmh_desc clk_rpmh_sm6350 = { 555 + .clks = sm6350_rpmh_clocks, 556 + .num_clks = ARRAY_SIZE(sm6350_rpmh_clocks), 557 + }; 558 + 539 559 static struct clk_hw *of_clk_rpmh_hw_get(struct of_phandle_args *clkspec, 540 560 void *data) 541 561 { ··· 643 623 { .compatible = "qcom,sc8180x-rpmh-clk", .data = &clk_rpmh_sc8180x}, 644 624 { .compatible = "qcom,sdm845-rpmh-clk", .data = &clk_rpmh_sdm845}, 645 625 { .compatible = "qcom,sdx55-rpmh-clk", .data = &clk_rpmh_sdx55}, 626 + { .compatible = "qcom,sm6350-rpmh-clk", .data = &clk_rpmh_sm6350}, 646 627 { .compatible = "qcom,sm8150-rpmh-clk", .data = &clk_rpmh_sm8150}, 647 628 { .compatible = "qcom,sm8250-rpmh-clk", .data = &clk_rpmh_sm8250}, 648 629 { .compatible = "qcom,sm8350-rpmh-clk", .data = &clk_rpmh_sm8350},
+158
drivers/clk/qcom/clk-smd-rpm.c
··· 913 913 .num_clks = ARRAY_SIZE(sdm660_clks), 914 914 }; 915 915 916 + static struct clk_smd_rpm *mdm9607_clks[] = { 917 + [RPM_SMD_XO_CLK_SRC] = &sdm660_bi_tcxo, 918 + [RPM_SMD_XO_A_CLK_SRC] = &sdm660_bi_tcxo_a, 919 + [RPM_SMD_PCNOC_CLK] = &msm8916_pcnoc_clk, 920 + [RPM_SMD_PCNOC_A_CLK] = &msm8916_pcnoc_a_clk, 921 + [RPM_SMD_BIMC_CLK] = &msm8916_bimc_clk, 922 + [RPM_SMD_BIMC_A_CLK] = &msm8916_bimc_a_clk, 923 + [RPM_SMD_QPIC_CLK] = &qcs404_qpic_clk, 924 + [RPM_SMD_QPIC_CLK_A] = &qcs404_qpic_a_clk, 925 + [RPM_SMD_QDSS_CLK] = &msm8916_qdss_clk, 926 + [RPM_SMD_QDSS_A_CLK] = &msm8916_qdss_a_clk, 927 + [RPM_SMD_BB_CLK1] = &msm8916_bb_clk1, 928 + [RPM_SMD_BB_CLK1_A] = &msm8916_bb_clk1_a, 929 + [RPM_SMD_BB_CLK1_PIN] = &msm8916_bb_clk1_pin, 930 + [RPM_SMD_BB_CLK1_A_PIN] = &msm8916_bb_clk1_a_pin, 931 + }; 932 + 933 + static const struct rpm_smd_clk_desc rpm_clk_mdm9607 = { 934 + .clks = mdm9607_clks, 935 + .num_clks = ARRAY_SIZE(mdm9607_clks), 936 + }; 937 + 938 + static struct clk_smd_rpm *msm8953_clks[] = { 939 + [RPM_SMD_XO_CLK_SRC] = &sdm660_bi_tcxo, 940 + [RPM_SMD_XO_A_CLK_SRC] = &sdm660_bi_tcxo_a, 941 + [RPM_SMD_PCNOC_CLK] = &msm8916_pcnoc_clk, 942 + [RPM_SMD_PCNOC_A_CLK] = &msm8916_pcnoc_a_clk, 943 + [RPM_SMD_SNOC_CLK] = &msm8916_snoc_clk, 944 + [RPM_SMD_SNOC_A_CLK] = &msm8916_snoc_a_clk, 945 + [RPM_SMD_BIMC_CLK] = &msm8916_bimc_clk, 946 + [RPM_SMD_BIMC_A_CLK] = &msm8916_bimc_a_clk, 947 + [RPM_SMD_IPA_CLK] = &msm8976_ipa_clk, 948 + [RPM_SMD_IPA_A_CLK] = &msm8976_ipa_a_clk, 949 + [RPM_SMD_SYSMMNOC_CLK] = &msm8936_sysmmnoc_clk, 950 + [RPM_SMD_SYSMMNOC_A_CLK] = &msm8936_sysmmnoc_a_clk, 951 + [RPM_SMD_QDSS_CLK] = &msm8916_qdss_clk, 952 + [RPM_SMD_QDSS_A_CLK] = &msm8916_qdss_a_clk, 953 + [RPM_SMD_BB_CLK1] = &msm8916_bb_clk1, 954 + [RPM_SMD_BB_CLK1_A] = &msm8916_bb_clk1_a, 955 + [RPM_SMD_BB_CLK2] = &msm8916_bb_clk2, 956 + [RPM_SMD_BB_CLK2_A] = &msm8916_bb_clk2_a, 957 + [RPM_SMD_RF_CLK2] = &msm8916_rf_clk2, 958 + [RPM_SMD_RF_CLK2_A] = &msm8916_rf_clk2_a, 959 + [RPM_SMD_RF_CLK3] = &msm8992_ln_bb_clk, 960 + [RPM_SMD_RF_CLK3_A] = &msm8992_ln_bb_a_clk, 961 + [RPM_SMD_DIV_CLK2] = &msm8974_div_clk2, 962 + [RPM_SMD_DIV_A_CLK2] = &msm8974_div_a_clk2, 963 + [RPM_SMD_BB_CLK1_PIN] = &msm8916_bb_clk1_pin, 964 + [RPM_SMD_BB_CLK1_A_PIN] = &msm8916_bb_clk1_a_pin, 965 + [RPM_SMD_BB_CLK2_PIN] = &msm8916_bb_clk2_pin, 966 + [RPM_SMD_BB_CLK2_A_PIN] = &msm8916_bb_clk2_a_pin, 967 + }; 968 + 969 + static const struct rpm_smd_clk_desc rpm_clk_msm8953 = { 970 + .clks = msm8953_clks, 971 + .num_clks = ARRAY_SIZE(msm8953_clks), 972 + }; 973 + 974 + /* SM6125 */ 975 + DEFINE_CLK_SMD_RPM(sm6125, cnoc_clk, cnoc_a_clk, QCOM_SMD_RPM_BUS_CLK, 1); 976 + DEFINE_CLK_SMD_RPM(sm6125, snoc_clk, snoc_a_clk, QCOM_SMD_RPM_BUS_CLK, 2); 977 + DEFINE_CLK_SMD_RPM_BRANCH(sm6125, qdss_clk, qdss_a_clk, 978 + QCOM_SMD_RPM_MISC_CLK, 1, 19200000); 979 + DEFINE_CLK_SMD_RPM(sm6125, qup_clk, qup_a_clk, QCOM_SMD_RPM_QUP_CLK, 0); 980 + DEFINE_CLK_SMD_RPM(sm6125, mmnrt_clk, mmnrt_a_clk, QCOM_SMD_RPM_MMAXI_CLK, 0); 981 + DEFINE_CLK_SMD_RPM(sm6125, mmrt_clk, mmrt_a_clk, QCOM_SMD_RPM_MMAXI_CLK, 1); 982 + DEFINE_CLK_SMD_RPM(sm6125, snoc_periph_clk, snoc_periph_a_clk, 983 + QCOM_SMD_RPM_BUS_CLK, 0); 984 + DEFINE_CLK_SMD_RPM(sm6125, snoc_lpass_clk, snoc_lpass_a_clk, 985 + QCOM_SMD_RPM_BUS_CLK, 5); 986 + 987 + static struct clk_smd_rpm *sm6125_clks[] = { 988 + [RPM_SMD_XO_CLK_SRC] = &sdm660_bi_tcxo, 989 + [RPM_SMD_XO_A_CLK_SRC] = &sdm660_bi_tcxo_a, 990 + [RPM_SMD_SNOC_CLK] = &sm6125_snoc_clk, 991 + [RPM_SMD_SNOC_A_CLK] = &sm6125_snoc_a_clk, 992 + [RPM_SMD_BIMC_CLK] = &msm8916_bimc_clk, 993 + [RPM_SMD_BIMC_A_CLK] = &msm8916_bimc_a_clk, 994 + [RPM_SMD_QDSS_CLK] = &sm6125_qdss_clk, 995 + [RPM_SMD_QDSS_A_CLK] = &sm6125_qdss_a_clk, 996 + [RPM_SMD_RF_CLK1] = &msm8916_rf_clk1, 997 + [RPM_SMD_RF_CLK1_A] = &msm8916_rf_clk1_a, 998 + [RPM_SMD_RF_CLK2] = &msm8916_rf_clk2, 999 + [RPM_SMD_RF_CLK2_A] = &msm8916_rf_clk2_a, 1000 + [RPM_SMD_CNOC_CLK] = &sm6125_cnoc_clk, 1001 + [RPM_SMD_CNOC_A_CLK] = &sm6125_cnoc_a_clk, 1002 + [RPM_SMD_IPA_CLK] = &msm8976_ipa_clk, 1003 + [RPM_SMD_IPA_A_CLK] = &msm8976_ipa_a_clk, 1004 + [RPM_SMD_CE1_CLK] = &msm8992_ce1_clk, 1005 + [RPM_SMD_CE1_A_CLK] = &msm8992_ce1_a_clk, 1006 + [RPM_SMD_LN_BB_CLK1] = &msm8916_bb_clk1, 1007 + [RPM_SMD_LN_BB_CLK1_A] = &msm8916_bb_clk1_a, 1008 + [RPM_SMD_LN_BB_CLK2] = &msm8916_bb_clk2, 1009 + [RPM_SMD_LN_BB_CLK2_A] = &msm8916_bb_clk2_a, 1010 + [RPM_SMD_LN_BB_CLK3] = &sdm660_ln_bb_clk3, 1011 + [RPM_SMD_LN_BB_CLK3_A] = &sdm660_ln_bb_clk3_a, 1012 + [RPM_SMD_QUP_CLK] = &sm6125_qup_clk, 1013 + [RPM_SMD_QUP_A_CLK] = &sm6125_qup_a_clk, 1014 + [RPM_SMD_MMRT_CLK] = &sm6125_mmrt_clk, 1015 + [RPM_SMD_MMRT_A_CLK] = &sm6125_mmrt_a_clk, 1016 + [RPM_SMD_MMNRT_CLK] = &sm6125_mmnrt_clk, 1017 + [RPM_SMD_MMNRT_A_CLK] = &sm6125_mmnrt_a_clk, 1018 + [RPM_SMD_SNOC_PERIPH_CLK] = &sm6125_snoc_periph_clk, 1019 + [RPM_SMD_SNOC_PERIPH_A_CLK] = &sm6125_snoc_periph_a_clk, 1020 + [RPM_SMD_SNOC_LPASS_CLK] = &sm6125_snoc_lpass_clk, 1021 + [RPM_SMD_SNOC_LPASS_A_CLK] = &sm6125_snoc_lpass_a_clk, 1022 + }; 1023 + 1024 + static const struct rpm_smd_clk_desc rpm_clk_sm6125 = { 1025 + .clks = sm6125_clks, 1026 + .num_clks = ARRAY_SIZE(sm6125_clks), 1027 + }; 1028 + 1029 + /* SM6115 */ 1030 + static struct clk_smd_rpm *sm6115_clks[] = { 1031 + [RPM_SMD_XO_CLK_SRC] = &sdm660_bi_tcxo, 1032 + [RPM_SMD_XO_A_CLK_SRC] = &sdm660_bi_tcxo_a, 1033 + [RPM_SMD_SNOC_CLK] = &sm6125_snoc_clk, 1034 + [RPM_SMD_SNOC_A_CLK] = &sm6125_snoc_a_clk, 1035 + [RPM_SMD_BIMC_CLK] = &msm8916_bimc_clk, 1036 + [RPM_SMD_BIMC_A_CLK] = &msm8916_bimc_a_clk, 1037 + [RPM_SMD_QDSS_CLK] = &sm6125_qdss_clk, 1038 + [RPM_SMD_QDSS_A_CLK] = &sm6125_qdss_a_clk, 1039 + [RPM_SMD_RF_CLK1] = &msm8916_rf_clk1, 1040 + [RPM_SMD_RF_CLK1_A] = &msm8916_rf_clk1_a, 1041 + [RPM_SMD_RF_CLK2] = &msm8916_rf_clk2, 1042 + [RPM_SMD_RF_CLK2_A] = &msm8916_rf_clk2_a, 1043 + [RPM_SMD_CNOC_CLK] = &sm6125_cnoc_clk, 1044 + [RPM_SMD_CNOC_A_CLK] = &sm6125_cnoc_a_clk, 1045 + [RPM_SMD_IPA_CLK] = &msm8976_ipa_clk, 1046 + [RPM_SMD_IPA_A_CLK] = &msm8976_ipa_a_clk, 1047 + [RPM_SMD_CE1_CLK] = &msm8992_ce1_clk, 1048 + [RPM_SMD_CE1_A_CLK] = &msm8992_ce1_a_clk, 1049 + [RPM_SMD_QUP_CLK] = &sm6125_qup_clk, 1050 + [RPM_SMD_QUP_A_CLK] = &sm6125_qup_a_clk, 1051 + [RPM_SMD_MMRT_CLK] = &sm6125_mmrt_clk, 1052 + [RPM_SMD_MMRT_A_CLK] = &sm6125_mmrt_a_clk, 1053 + [RPM_SMD_MMNRT_CLK] = &sm6125_mmnrt_clk, 1054 + [RPM_SMD_MMNRT_A_CLK] = &sm6125_mmnrt_a_clk, 1055 + [RPM_SMD_SNOC_PERIPH_CLK] = &sm6125_snoc_periph_clk, 1056 + [RPM_SMD_SNOC_PERIPH_A_CLK] = &sm6125_snoc_periph_a_clk, 1057 + [RPM_SMD_SNOC_LPASS_CLK] = &sm6125_snoc_lpass_clk, 1058 + [RPM_SMD_SNOC_LPASS_A_CLK] = &sm6125_snoc_lpass_a_clk, 1059 + [RPM_SMD_RF_CLK1_PIN] = &msm8916_rf_clk1_pin, 1060 + [RPM_SMD_RF_CLK1_A_PIN] = &msm8916_rf_clk1_a_pin, 1061 + [RPM_SMD_RF_CLK2_PIN] = &msm8916_rf_clk2_pin, 1062 + [RPM_SMD_RF_CLK2_A_PIN] = &msm8916_rf_clk2_a_pin, 1063 + }; 1064 + 1065 + static const struct rpm_smd_clk_desc rpm_clk_sm6115 = { 1066 + .clks = sm6115_clks, 1067 + .num_clks = ARRAY_SIZE(sm6115_clks), 1068 + }; 1069 + 916 1070 static const struct of_device_id rpm_smd_clk_match_table[] = { 1071 + { .compatible = "qcom,rpmcc-mdm9607", .data = &rpm_clk_mdm9607 }, 917 1072 { .compatible = "qcom,rpmcc-msm8226", .data = &rpm_clk_msm8974 }, 918 1073 { .compatible = "qcom,rpmcc-msm8916", .data = &rpm_clk_msm8916 }, 919 1074 { .compatible = "qcom,rpmcc-msm8936", .data = &rpm_clk_msm8936 }, 1075 + { .compatible = "qcom,rpmcc-msm8953", .data = &rpm_clk_msm8953 }, 920 1076 { .compatible = "qcom,rpmcc-msm8974", .data = &rpm_clk_msm8974 }, 921 1077 { .compatible = "qcom,rpmcc-msm8976", .data = &rpm_clk_msm8976 }, 922 1078 { .compatible = "qcom,rpmcc-msm8992", .data = &rpm_clk_msm8992 }, ··· 1081 925 { .compatible = "qcom,rpmcc-msm8998", .data = &rpm_clk_msm8998 }, 1082 926 { .compatible = "qcom,rpmcc-qcs404", .data = &rpm_clk_qcs404 }, 1083 927 { .compatible = "qcom,rpmcc-sdm660", .data = &rpm_clk_sdm660 }, 928 + { .compatible = "qcom,rpmcc-sm6115", .data = &rpm_clk_sm6115 }, 929 + { .compatible = "qcom,rpmcc-sm6125", .data = &rpm_clk_sm6125 }, 1084 930 { } 1085 931 }; 1086 932 MODULE_DEVICE_TABLE(of, rpm_smd_clk_match_table);
+908
drivers/clk/qcom/dispcc-sc7280.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * Copyright (c) 2021, The Linux Foundation. All rights reserved. 4 + */ 5 + 6 + #include <linux/clk-provider.h> 7 + #include <linux/module.h> 8 + #include <linux/platform_device.h> 9 + #include <linux/regmap.h> 10 + 11 + #include <dt-bindings/clock/qcom,dispcc-sc7280.h> 12 + 13 + #include "clk-alpha-pll.h" 14 + #include "clk-branch.h" 15 + #include "clk-rcg.h" 16 + #include "clk-regmap-divider.h" 17 + #include "common.h" 18 + #include "gdsc.h" 19 + 20 + enum { 21 + P_BI_TCXO, 22 + P_DISP_CC_PLL0_OUT_EVEN, 23 + P_DISP_CC_PLL0_OUT_MAIN, 24 + P_DP_PHY_PLL_LINK_CLK, 25 + P_DP_PHY_PLL_VCO_DIV_CLK, 26 + P_DSI0_PHY_PLL_OUT_BYTECLK, 27 + P_DSI0_PHY_PLL_OUT_DSICLK, 28 + P_EDP_PHY_PLL_LINK_CLK, 29 + P_EDP_PHY_PLL_VCO_DIV_CLK, 30 + P_GCC_DISP_GPLL0_CLK, 31 + }; 32 + 33 + static const struct pll_vco lucid_vco[] = { 34 + { 249600000, 2000000000, 0 }, 35 + }; 36 + 37 + /* 1520MHz Configuration*/ 38 + static const struct alpha_pll_config disp_cc_pll0_config = { 39 + .l = 0x4F, 40 + .alpha = 0x2AAA, 41 + .config_ctl_val = 0x20485699, 42 + .config_ctl_hi_val = 0x00002261, 43 + .config_ctl_hi1_val = 0x329A299C, 44 + .user_ctl_val = 0x00000001, 45 + .user_ctl_hi_val = 0x00000805, 46 + .user_ctl_hi1_val = 0x00000000, 47 + }; 48 + 49 + static struct clk_alpha_pll disp_cc_pll0 = { 50 + .offset = 0x0, 51 + .vco_table = lucid_vco, 52 + .num_vco = ARRAY_SIZE(lucid_vco), 53 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 54 + .clkr = { 55 + .hw.init = &(struct clk_init_data){ 56 + .name = "disp_cc_pll0", 57 + .parent_data = &(const struct clk_parent_data){ 58 + .fw_name = "bi_tcxo", 59 + }, 60 + .num_parents = 1, 61 + .ops = &clk_alpha_pll_lucid_ops, 62 + }, 63 + }, 64 + }; 65 + 66 + static const struct parent_map disp_cc_parent_map_0[] = { 67 + { P_BI_TCXO, 0 }, 68 + }; 69 + 70 + static const struct clk_parent_data disp_cc_parent_data_0[] = { 71 + { .fw_name = "bi_tcxo" }, 72 + }; 73 + 74 + static const struct parent_map disp_cc_parent_map_1[] = { 75 + { P_BI_TCXO, 0 }, 76 + { P_DP_PHY_PLL_LINK_CLK, 1 }, 77 + { P_DP_PHY_PLL_VCO_DIV_CLK, 2 }, 78 + }; 79 + 80 + static const struct clk_parent_data disp_cc_parent_data_1[] = { 81 + { .fw_name = "bi_tcxo" }, 82 + { .fw_name = "dp_phy_pll_link_clk" }, 83 + { .fw_name = "dp_phy_pll_vco_div_clk" }, 84 + }; 85 + 86 + static const struct parent_map disp_cc_parent_map_2[] = { 87 + { P_BI_TCXO, 0 }, 88 + { P_DSI0_PHY_PLL_OUT_BYTECLK, 1 }, 89 + }; 90 + 91 + static const struct clk_parent_data disp_cc_parent_data_2[] = { 92 + { .fw_name = "bi_tcxo" }, 93 + { .fw_name = "dsi0_phy_pll_out_byteclk" }, 94 + }; 95 + 96 + static const struct parent_map disp_cc_parent_map_3[] = { 97 + { P_BI_TCXO, 0 }, 98 + { P_EDP_PHY_PLL_LINK_CLK, 1 }, 99 + { P_EDP_PHY_PLL_VCO_DIV_CLK, 2 }, 100 + }; 101 + 102 + static const struct clk_parent_data disp_cc_parent_data_3[] = { 103 + { .fw_name = "bi_tcxo" }, 104 + { .fw_name = "edp_phy_pll_link_clk" }, 105 + { .fw_name = "edp_phy_pll_vco_div_clk" }, 106 + }; 107 + 108 + static const struct parent_map disp_cc_parent_map_4[] = { 109 + { P_BI_TCXO, 0 }, 110 + { P_DISP_CC_PLL0_OUT_MAIN, 1 }, 111 + { P_GCC_DISP_GPLL0_CLK, 4 }, 112 + { P_DISP_CC_PLL0_OUT_EVEN, 5 }, 113 + }; 114 + 115 + static const struct clk_parent_data disp_cc_parent_data_4[] = { 116 + { .fw_name = "bi_tcxo" }, 117 + { .hw = &disp_cc_pll0.clkr.hw }, 118 + { .fw_name = "gcc_disp_gpll0_clk" }, 119 + { .hw = &disp_cc_pll0.clkr.hw }, 120 + }; 121 + 122 + static const struct parent_map disp_cc_parent_map_5[] = { 123 + { P_BI_TCXO, 0 }, 124 + { P_GCC_DISP_GPLL0_CLK, 4 }, 125 + }; 126 + 127 + static const struct clk_parent_data disp_cc_parent_data_5[] = { 128 + { .fw_name = "bi_tcxo" }, 129 + { .fw_name = "gcc_disp_gpll0_clk" }, 130 + }; 131 + 132 + static const struct parent_map disp_cc_parent_map_6[] = { 133 + { P_BI_TCXO, 0 }, 134 + { P_DSI0_PHY_PLL_OUT_DSICLK, 1 }, 135 + }; 136 + 137 + static const struct clk_parent_data disp_cc_parent_data_6[] = { 138 + { .fw_name = "bi_tcxo" }, 139 + { .fw_name = "dsi0_phy_pll_out_dsiclk" }, 140 + }; 141 + 142 + static const struct freq_tbl ftbl_disp_cc_mdss_ahb_clk_src[] = { 143 + F(19200000, P_BI_TCXO, 1, 0, 0), 144 + F(37500000, P_GCC_DISP_GPLL0_CLK, 16, 0, 0), 145 + F(75000000, P_GCC_DISP_GPLL0_CLK, 8, 0, 0), 146 + { } 147 + }; 148 + 149 + static struct clk_rcg2 disp_cc_mdss_ahb_clk_src = { 150 + .cmd_rcgr = 0x1170, 151 + .mnd_width = 0, 152 + .hid_width = 5, 153 + .parent_map = disp_cc_parent_map_5, 154 + .freq_tbl = ftbl_disp_cc_mdss_ahb_clk_src, 155 + .clkr.hw.init = &(struct clk_init_data){ 156 + .name = "disp_cc_mdss_ahb_clk_src", 157 + .parent_data = disp_cc_parent_data_5, 158 + .num_parents = ARRAY_SIZE(disp_cc_parent_data_5), 159 + .ops = &clk_rcg2_shared_ops, 160 + }, 161 + }; 162 + 163 + static struct clk_rcg2 disp_cc_mdss_byte0_clk_src = { 164 + .cmd_rcgr = 0x10d8, 165 + .mnd_width = 0, 166 + .hid_width = 5, 167 + .parent_map = disp_cc_parent_map_2, 168 + .clkr.hw.init = &(struct clk_init_data){ 169 + .name = "disp_cc_mdss_byte0_clk_src", 170 + .parent_data = disp_cc_parent_data_2, 171 + .num_parents = ARRAY_SIZE(disp_cc_parent_data_2), 172 + .flags = CLK_SET_RATE_PARENT, 173 + .ops = &clk_byte2_ops, 174 + }, 175 + }; 176 + 177 + static const struct freq_tbl ftbl_disp_cc_mdss_dp_aux_clk_src[] = { 178 + F(19200000, P_BI_TCXO, 1, 0, 0), 179 + { } 180 + }; 181 + 182 + static struct clk_rcg2 disp_cc_mdss_dp_aux_clk_src = { 183 + .cmd_rcgr = 0x1158, 184 + .mnd_width = 0, 185 + .hid_width = 5, 186 + .parent_map = disp_cc_parent_map_0, 187 + .freq_tbl = ftbl_disp_cc_mdss_dp_aux_clk_src, 188 + .clkr.hw.init = &(struct clk_init_data){ 189 + .name = "disp_cc_mdss_dp_aux_clk_src", 190 + .parent_data = disp_cc_parent_data_0, 191 + .num_parents = ARRAY_SIZE(disp_cc_parent_data_0), 192 + .ops = &clk_rcg2_ops, 193 + }, 194 + }; 195 + 196 + static struct clk_rcg2 disp_cc_mdss_dp_crypto_clk_src = { 197 + .cmd_rcgr = 0x1128, 198 + .mnd_width = 0, 199 + .hid_width = 5, 200 + .parent_map = disp_cc_parent_map_1, 201 + .clkr.hw.init = &(struct clk_init_data){ 202 + .name = "disp_cc_mdss_dp_crypto_clk_src", 203 + .parent_data = disp_cc_parent_data_1, 204 + .num_parents = ARRAY_SIZE(disp_cc_parent_data_1), 205 + .ops = &clk_byte2_ops, 206 + }, 207 + }; 208 + 209 + static struct clk_rcg2 disp_cc_mdss_dp_link_clk_src = { 210 + .cmd_rcgr = 0x110c, 211 + .mnd_width = 0, 212 + .hid_width = 5, 213 + .parent_map = disp_cc_parent_map_1, 214 + .clkr.hw.init = &(struct clk_init_data){ 215 + .name = "disp_cc_mdss_dp_link_clk_src", 216 + .parent_data = disp_cc_parent_data_1, 217 + .num_parents = ARRAY_SIZE(disp_cc_parent_data_1), 218 + .ops = &clk_byte2_ops, 219 + }, 220 + }; 221 + 222 + static struct clk_rcg2 disp_cc_mdss_dp_pixel_clk_src = { 223 + .cmd_rcgr = 0x1140, 224 + .mnd_width = 16, 225 + .hid_width = 5, 226 + .parent_map = disp_cc_parent_map_1, 227 + .clkr.hw.init = &(struct clk_init_data){ 228 + .name = "disp_cc_mdss_dp_pixel_clk_src", 229 + .parent_data = disp_cc_parent_data_1, 230 + .num_parents = ARRAY_SIZE(disp_cc_parent_data_1), 231 + .ops = &clk_dp_ops, 232 + }, 233 + }; 234 + 235 + static struct clk_rcg2 disp_cc_mdss_edp_aux_clk_src = { 236 + .cmd_rcgr = 0x11d0, 237 + .mnd_width = 0, 238 + .hid_width = 5, 239 + .parent_map = disp_cc_parent_map_0, 240 + .freq_tbl = ftbl_disp_cc_mdss_dp_aux_clk_src, 241 + .clkr.hw.init = &(struct clk_init_data){ 242 + .name = "disp_cc_mdss_edp_aux_clk_src", 243 + .parent_data = disp_cc_parent_data_0, 244 + .num_parents = ARRAY_SIZE(disp_cc_parent_data_0), 245 + .ops = &clk_rcg2_ops, 246 + }, 247 + }; 248 + 249 + static struct clk_rcg2 disp_cc_mdss_edp_link_clk_src = { 250 + .cmd_rcgr = 0x11a0, 251 + .mnd_width = 0, 252 + .hid_width = 5, 253 + .parent_map = disp_cc_parent_map_3, 254 + .clkr.hw.init = &(struct clk_init_data){ 255 + .name = "disp_cc_mdss_edp_link_clk_src", 256 + .parent_data = disp_cc_parent_data_3, 257 + .num_parents = ARRAY_SIZE(disp_cc_parent_data_3), 258 + .flags = CLK_SET_RATE_PARENT, 259 + .ops = &clk_byte2_ops, 260 + }, 261 + }; 262 + 263 + static struct clk_rcg2 disp_cc_mdss_edp_pixel_clk_src = { 264 + .cmd_rcgr = 0x1188, 265 + .mnd_width = 16, 266 + .hid_width = 5, 267 + .parent_map = disp_cc_parent_map_3, 268 + .clkr.hw.init = &(struct clk_init_data){ 269 + .name = "disp_cc_mdss_edp_pixel_clk_src", 270 + .parent_data = disp_cc_parent_data_3, 271 + .num_parents = ARRAY_SIZE(disp_cc_parent_data_3), 272 + .ops = &clk_dp_ops, 273 + }, 274 + }; 275 + 276 + static struct clk_rcg2 disp_cc_mdss_esc0_clk_src = { 277 + .cmd_rcgr = 0x10f4, 278 + .mnd_width = 0, 279 + .hid_width = 5, 280 + .parent_map = disp_cc_parent_map_2, 281 + .freq_tbl = ftbl_disp_cc_mdss_dp_aux_clk_src, 282 + .clkr.hw.init = &(struct clk_init_data){ 283 + .name = "disp_cc_mdss_esc0_clk_src", 284 + .parent_data = disp_cc_parent_data_2, 285 + .num_parents = ARRAY_SIZE(disp_cc_parent_data_2), 286 + .ops = &clk_rcg2_ops, 287 + }, 288 + }; 289 + 290 + static const struct freq_tbl ftbl_disp_cc_mdss_mdp_clk_src[] = { 291 + F(200000000, P_GCC_DISP_GPLL0_CLK, 3, 0, 0), 292 + F(300000000, P_GCC_DISP_GPLL0_CLK, 2, 0, 0), 293 + F(380000000, P_DISP_CC_PLL0_OUT_MAIN, 4, 0, 0), 294 + F(506666667, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0), 295 + F(608000000, P_DISP_CC_PLL0_OUT_MAIN, 2.5, 0, 0), 296 + { } 297 + }; 298 + 299 + static struct clk_rcg2 disp_cc_mdss_mdp_clk_src = { 300 + .cmd_rcgr = 0x1090, 301 + .mnd_width = 0, 302 + .hid_width = 5, 303 + .parent_map = disp_cc_parent_map_4, 304 + .freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src, 305 + .clkr.hw.init = &(struct clk_init_data){ 306 + .name = "disp_cc_mdss_mdp_clk_src", 307 + .parent_data = disp_cc_parent_data_4, 308 + .num_parents = ARRAY_SIZE(disp_cc_parent_data_4), 309 + .ops = &clk_rcg2_shared_ops, 310 + }, 311 + }; 312 + 313 + static struct clk_rcg2 disp_cc_mdss_pclk0_clk_src = { 314 + .cmd_rcgr = 0x1078, 315 + .mnd_width = 8, 316 + .hid_width = 5, 317 + .parent_map = disp_cc_parent_map_6, 318 + .clkr.hw.init = &(struct clk_init_data){ 319 + .name = "disp_cc_mdss_pclk0_clk_src", 320 + .parent_data = disp_cc_parent_data_6, 321 + .num_parents = ARRAY_SIZE(disp_cc_parent_data_6), 322 + .flags = CLK_SET_RATE_PARENT, 323 + .ops = &clk_pixel_ops, 324 + }, 325 + }; 326 + 327 + static struct clk_rcg2 disp_cc_mdss_rot_clk_src = { 328 + .cmd_rcgr = 0x10a8, 329 + .mnd_width = 0, 330 + .hid_width = 5, 331 + .parent_map = disp_cc_parent_map_4, 332 + .freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src, 333 + .clkr.hw.init = &(struct clk_init_data){ 334 + .name = "disp_cc_mdss_rot_clk_src", 335 + .parent_data = disp_cc_parent_data_4, 336 + .num_parents = ARRAY_SIZE(disp_cc_parent_data_4), 337 + .ops = &clk_rcg2_shared_ops, 338 + }, 339 + }; 340 + 341 + static struct clk_rcg2 disp_cc_mdss_vsync_clk_src = { 342 + .cmd_rcgr = 0x10c0, 343 + .mnd_width = 0, 344 + .hid_width = 5, 345 + .parent_map = disp_cc_parent_map_0, 346 + .freq_tbl = ftbl_disp_cc_mdss_dp_aux_clk_src, 347 + .clkr.hw.init = &(struct clk_init_data){ 348 + .name = "disp_cc_mdss_vsync_clk_src", 349 + .parent_data = disp_cc_parent_data_0, 350 + .num_parents = ARRAY_SIZE(disp_cc_parent_data_0), 351 + .ops = &clk_rcg2_ops, 352 + }, 353 + }; 354 + 355 + static struct clk_regmap_div disp_cc_mdss_byte0_div_clk_src = { 356 + .reg = 0x10f0, 357 + .shift = 0, 358 + .width = 4, 359 + .clkr.hw.init = &(struct clk_init_data) { 360 + .name = "disp_cc_mdss_byte0_div_clk_src", 361 + .parent_hws = (const struct clk_hw*[]){ 362 + &disp_cc_mdss_byte0_clk_src.clkr.hw, 363 + }, 364 + .num_parents = 1, 365 + .ops = &clk_regmap_div_ops, 366 + }, 367 + }; 368 + 369 + static struct clk_regmap_div disp_cc_mdss_dp_link_div_clk_src = { 370 + .reg = 0x1124, 371 + .shift = 0, 372 + .width = 4, 373 + .clkr.hw.init = &(struct clk_init_data) { 374 + .name = "disp_cc_mdss_dp_link_div_clk_src", 375 + .parent_hws = (const struct clk_hw*[]){ 376 + &disp_cc_mdss_dp_link_clk_src.clkr.hw, 377 + }, 378 + .num_parents = 1, 379 + .ops = &clk_regmap_div_ro_ops, 380 + }, 381 + }; 382 + 383 + static struct clk_regmap_div disp_cc_mdss_edp_link_div_clk_src = { 384 + .reg = 0x11b8, 385 + .shift = 0, 386 + .width = 4, 387 + .clkr.hw.init = &(struct clk_init_data) { 388 + .name = "disp_cc_mdss_edp_link_div_clk_src", 389 + .parent_hws = (const struct clk_hw*[]){ 390 + &disp_cc_mdss_edp_link_clk_src.clkr.hw, 391 + }, 392 + .num_parents = 1, 393 + .ops = &clk_regmap_div_ro_ops, 394 + }, 395 + }; 396 + 397 + static struct clk_branch disp_cc_mdss_ahb_clk = { 398 + .halt_reg = 0x1050, 399 + .halt_check = BRANCH_HALT, 400 + .clkr = { 401 + .enable_reg = 0x1050, 402 + .enable_mask = BIT(0), 403 + .hw.init = &(struct clk_init_data){ 404 + .name = "disp_cc_mdss_ahb_clk", 405 + .parent_hws = (const struct clk_hw*[]){ 406 + &disp_cc_mdss_ahb_clk_src.clkr.hw, 407 + }, 408 + .num_parents = 1, 409 + .flags = CLK_SET_RATE_PARENT, 410 + .ops = &clk_branch2_ops, 411 + }, 412 + }, 413 + }; 414 + 415 + static struct clk_branch disp_cc_mdss_byte0_clk = { 416 + .halt_reg = 0x1030, 417 + .halt_check = BRANCH_HALT, 418 + .clkr = { 419 + .enable_reg = 0x1030, 420 + .enable_mask = BIT(0), 421 + .hw.init = &(struct clk_init_data){ 422 + .name = "disp_cc_mdss_byte0_clk", 423 + .parent_hws = (const struct clk_hw*[]){ 424 + &disp_cc_mdss_byte0_clk_src.clkr.hw, 425 + }, 426 + .num_parents = 1, 427 + .flags = CLK_SET_RATE_PARENT, 428 + .ops = &clk_branch2_ops, 429 + }, 430 + }, 431 + }; 432 + 433 + static struct clk_branch disp_cc_mdss_byte0_intf_clk = { 434 + .halt_reg = 0x1034, 435 + .halt_check = BRANCH_HALT, 436 + .clkr = { 437 + .enable_reg = 0x1034, 438 + .enable_mask = BIT(0), 439 + .hw.init = &(struct clk_init_data){ 440 + .name = "disp_cc_mdss_byte0_intf_clk", 441 + .parent_hws = (const struct clk_hw*[]){ 442 + &disp_cc_mdss_byte0_div_clk_src.clkr.hw, 443 + }, 444 + .num_parents = 1, 445 + .flags = CLK_SET_RATE_PARENT, 446 + .ops = &clk_branch2_ops, 447 + }, 448 + }, 449 + }; 450 + 451 + static struct clk_branch disp_cc_mdss_dp_aux_clk = { 452 + .halt_reg = 0x104c, 453 + .halt_check = BRANCH_HALT, 454 + .clkr = { 455 + .enable_reg = 0x104c, 456 + .enable_mask = BIT(0), 457 + .hw.init = &(struct clk_init_data){ 458 + .name = "disp_cc_mdss_dp_aux_clk", 459 + .parent_hws = (const struct clk_hw*[]){ 460 + &disp_cc_mdss_dp_aux_clk_src.clkr.hw, 461 + }, 462 + .num_parents = 1, 463 + .flags = CLK_SET_RATE_PARENT, 464 + .ops = &clk_branch2_ops, 465 + }, 466 + }, 467 + }; 468 + 469 + static struct clk_branch disp_cc_mdss_dp_crypto_clk = { 470 + .halt_reg = 0x1044, 471 + .halt_check = BRANCH_HALT, 472 + .clkr = { 473 + .enable_reg = 0x1044, 474 + .enable_mask = BIT(0), 475 + .hw.init = &(struct clk_init_data){ 476 + .name = "disp_cc_mdss_dp_crypto_clk", 477 + .parent_hws = (const struct clk_hw*[]){ 478 + &disp_cc_mdss_dp_crypto_clk_src.clkr.hw, 479 + }, 480 + .num_parents = 1, 481 + .flags = CLK_SET_RATE_PARENT, 482 + .ops = &clk_branch2_ops, 483 + }, 484 + }, 485 + }; 486 + 487 + static struct clk_branch disp_cc_mdss_dp_link_clk = { 488 + .halt_reg = 0x103c, 489 + .halt_check = BRANCH_HALT, 490 + .clkr = { 491 + .enable_reg = 0x103c, 492 + .enable_mask = BIT(0), 493 + .hw.init = &(struct clk_init_data){ 494 + .name = "disp_cc_mdss_dp_link_clk", 495 + .parent_hws = (const struct clk_hw*[]){ 496 + &disp_cc_mdss_dp_link_clk_src.clkr.hw, 497 + }, 498 + .num_parents = 1, 499 + .flags = CLK_SET_RATE_PARENT, 500 + .ops = &clk_branch2_ops, 501 + }, 502 + }, 503 + }; 504 + 505 + static struct clk_branch disp_cc_mdss_dp_link_intf_clk = { 506 + .halt_reg = 0x1040, 507 + .halt_check = BRANCH_HALT, 508 + .clkr = { 509 + .enable_reg = 0x1040, 510 + .enable_mask = BIT(0), 511 + .hw.init = &(struct clk_init_data){ 512 + .name = "disp_cc_mdss_dp_link_intf_clk", 513 + .parent_hws = (const struct clk_hw*[]){ 514 + &disp_cc_mdss_dp_link_div_clk_src.clkr.hw, 515 + }, 516 + .num_parents = 1, 517 + .flags = CLK_SET_RATE_PARENT, 518 + .ops = &clk_branch2_ops, 519 + }, 520 + }, 521 + }; 522 + 523 + static struct clk_branch disp_cc_mdss_dp_pixel_clk = { 524 + .halt_reg = 0x1048, 525 + .halt_check = BRANCH_HALT, 526 + .clkr = { 527 + .enable_reg = 0x1048, 528 + .enable_mask = BIT(0), 529 + .hw.init = &(struct clk_init_data){ 530 + .name = "disp_cc_mdss_dp_pixel_clk", 531 + .parent_hws = (const struct clk_hw*[]){ 532 + &disp_cc_mdss_dp_pixel_clk_src.clkr.hw, 533 + }, 534 + .num_parents = 1, 535 + .flags = CLK_SET_RATE_PARENT, 536 + .ops = &clk_branch2_ops, 537 + }, 538 + }, 539 + }; 540 + 541 + static struct clk_branch disp_cc_mdss_edp_aux_clk = { 542 + .halt_reg = 0x1060, 543 + .halt_check = BRANCH_HALT, 544 + .clkr = { 545 + .enable_reg = 0x1060, 546 + .enable_mask = BIT(0), 547 + .hw.init = &(struct clk_init_data){ 548 + .name = "disp_cc_mdss_edp_aux_clk", 549 + .parent_hws = (const struct clk_hw*[]){ 550 + &disp_cc_mdss_edp_aux_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 disp_cc_mdss_edp_link_clk = { 560 + .halt_reg = 0x1058, 561 + .halt_check = BRANCH_HALT, 562 + .clkr = { 563 + .enable_reg = 0x1058, 564 + .enable_mask = BIT(0), 565 + .hw.init = &(struct clk_init_data){ 566 + .name = "disp_cc_mdss_edp_link_clk", 567 + .parent_hws = (const struct clk_hw*[]){ 568 + &disp_cc_mdss_edp_link_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 disp_cc_mdss_edp_link_intf_clk = { 578 + .halt_reg = 0x105c, 579 + .halt_check = BRANCH_HALT, 580 + .clkr = { 581 + .enable_reg = 0x105c, 582 + .enable_mask = BIT(0), 583 + .hw.init = &(struct clk_init_data){ 584 + .name = "disp_cc_mdss_edp_link_intf_clk", 585 + .parent_hws = (const struct clk_hw*[]){ 586 + &disp_cc_mdss_edp_link_div_clk_src.clkr.hw 587 + }, 588 + .num_parents = 1, 589 + .flags = CLK_SET_RATE_PARENT, 590 + .ops = &clk_branch2_ops, 591 + }, 592 + }, 593 + }; 594 + 595 + static struct clk_branch disp_cc_mdss_edp_pixel_clk = { 596 + .halt_reg = 0x1054, 597 + .halt_check = BRANCH_HALT, 598 + .clkr = { 599 + .enable_reg = 0x1054, 600 + .enable_mask = BIT(0), 601 + .hw.init = &(struct clk_init_data){ 602 + .name = "disp_cc_mdss_edp_pixel_clk", 603 + .parent_hws = (const struct clk_hw*[]){ 604 + &disp_cc_mdss_edp_pixel_clk_src.clkr.hw, 605 + }, 606 + .num_parents = 1, 607 + .flags = CLK_SET_RATE_PARENT, 608 + .ops = &clk_branch2_ops, 609 + }, 610 + }, 611 + }; 612 + 613 + static struct clk_branch disp_cc_mdss_esc0_clk = { 614 + .halt_reg = 0x1038, 615 + .halt_check = BRANCH_HALT, 616 + .clkr = { 617 + .enable_reg = 0x1038, 618 + .enable_mask = BIT(0), 619 + .hw.init = &(struct clk_init_data){ 620 + .name = "disp_cc_mdss_esc0_clk", 621 + .parent_hws = (const struct clk_hw*[]){ 622 + &disp_cc_mdss_esc0_clk_src.clkr.hw, 623 + }, 624 + .num_parents = 1, 625 + .flags = CLK_SET_RATE_PARENT, 626 + .ops = &clk_branch2_ops, 627 + }, 628 + }, 629 + }; 630 + 631 + static struct clk_branch disp_cc_mdss_mdp_clk = { 632 + .halt_reg = 0x1014, 633 + .halt_check = BRANCH_HALT, 634 + .clkr = { 635 + .enable_reg = 0x1014, 636 + .enable_mask = BIT(0), 637 + .hw.init = &(struct clk_init_data){ 638 + .name = "disp_cc_mdss_mdp_clk", 639 + .parent_hws = (const struct clk_hw*[]){ 640 + &disp_cc_mdss_mdp_clk_src.clkr.hw, 641 + }, 642 + .num_parents = 1, 643 + .flags = CLK_SET_RATE_PARENT, 644 + .ops = &clk_branch2_ops, 645 + }, 646 + }, 647 + }; 648 + 649 + static struct clk_branch disp_cc_mdss_mdp_lut_clk = { 650 + .halt_reg = 0x1024, 651 + .halt_check = BRANCH_HALT_VOTED, 652 + .clkr = { 653 + .enable_reg = 0x1024, 654 + .enable_mask = BIT(0), 655 + .hw.init = &(struct clk_init_data){ 656 + .name = "disp_cc_mdss_mdp_lut_clk", 657 + .parent_hws = (const struct clk_hw*[]){ 658 + &disp_cc_mdss_mdp_clk_src.clkr.hw, 659 + }, 660 + .num_parents = 1, 661 + .flags = CLK_SET_RATE_PARENT, 662 + .ops = &clk_branch2_ops, 663 + }, 664 + }, 665 + }; 666 + 667 + static struct clk_branch disp_cc_mdss_non_gdsc_ahb_clk = { 668 + .halt_reg = 0x2004, 669 + .halt_check = BRANCH_HALT_VOTED, 670 + .clkr = { 671 + .enable_reg = 0x2004, 672 + .enable_mask = BIT(0), 673 + .hw.init = &(struct clk_init_data){ 674 + .name = "disp_cc_mdss_non_gdsc_ahb_clk", 675 + .parent_hws = (const struct clk_hw*[]){ 676 + &disp_cc_mdss_ahb_clk_src.clkr.hw, 677 + }, 678 + .num_parents = 1, 679 + .flags = CLK_SET_RATE_PARENT, 680 + .ops = &clk_branch2_ops, 681 + }, 682 + }, 683 + }; 684 + 685 + static struct clk_branch disp_cc_mdss_pclk0_clk = { 686 + .halt_reg = 0x1010, 687 + .halt_check = BRANCH_HALT, 688 + .clkr = { 689 + .enable_reg = 0x1010, 690 + .enable_mask = BIT(0), 691 + .hw.init = &(struct clk_init_data){ 692 + .name = "disp_cc_mdss_pclk0_clk", 693 + .parent_hws = (const struct clk_hw*[]){ 694 + &disp_cc_mdss_pclk0_clk_src.clkr.hw, 695 + }, 696 + .num_parents = 1, 697 + .flags = CLK_SET_RATE_PARENT, 698 + .ops = &clk_branch2_ops, 699 + }, 700 + }, 701 + }; 702 + 703 + static struct clk_branch disp_cc_mdss_rot_clk = { 704 + .halt_reg = 0x101c, 705 + .halt_check = BRANCH_HALT, 706 + .clkr = { 707 + .enable_reg = 0x101c, 708 + .enable_mask = BIT(0), 709 + .hw.init = &(struct clk_init_data){ 710 + .name = "disp_cc_mdss_rot_clk", 711 + .parent_hws = (const struct clk_hw*[]){ 712 + &disp_cc_mdss_rot_clk_src.clkr.hw, 713 + }, 714 + .num_parents = 1, 715 + .flags = CLK_SET_RATE_PARENT, 716 + .ops = &clk_branch2_ops, 717 + }, 718 + }, 719 + }; 720 + 721 + static struct clk_branch disp_cc_mdss_rscc_ahb_clk = { 722 + .halt_reg = 0x200c, 723 + .halt_check = BRANCH_HALT, 724 + .clkr = { 725 + .enable_reg = 0x200c, 726 + .enable_mask = BIT(0), 727 + .hw.init = &(struct clk_init_data){ 728 + .name = "disp_cc_mdss_rscc_ahb_clk", 729 + .parent_hws = (const struct clk_hw*[]){ 730 + &disp_cc_mdss_ahb_clk_src.clkr.hw, 731 + }, 732 + .num_parents = 1, 733 + .flags = CLK_SET_RATE_PARENT, 734 + .ops = &clk_branch2_ops, 735 + }, 736 + }, 737 + }; 738 + 739 + static struct clk_branch disp_cc_mdss_rscc_vsync_clk = { 740 + .halt_reg = 0x2008, 741 + .halt_check = BRANCH_HALT, 742 + .clkr = { 743 + .enable_reg = 0x2008, 744 + .enable_mask = BIT(0), 745 + .hw.init = &(struct clk_init_data){ 746 + .name = "disp_cc_mdss_rscc_vsync_clk", 747 + .parent_hws = (const struct clk_hw*[]){ 748 + &disp_cc_mdss_vsync_clk_src.clkr.hw, 749 + }, 750 + .num_parents = 1, 751 + .flags = CLK_SET_RATE_PARENT, 752 + .ops = &clk_branch2_ops, 753 + }, 754 + }, 755 + }; 756 + 757 + static struct clk_branch disp_cc_mdss_vsync_clk = { 758 + .halt_reg = 0x102c, 759 + .halt_check = BRANCH_HALT, 760 + .clkr = { 761 + .enable_reg = 0x102c, 762 + .enable_mask = BIT(0), 763 + .hw.init = &(struct clk_init_data){ 764 + .name = "disp_cc_mdss_vsync_clk", 765 + .parent_hws = (const struct clk_hw*[]){ 766 + &disp_cc_mdss_vsync_clk_src.clkr.hw, 767 + }, 768 + .num_parents = 1, 769 + .flags = CLK_SET_RATE_PARENT, 770 + .ops = &clk_branch2_ops, 771 + }, 772 + }, 773 + }; 774 + 775 + static struct clk_branch disp_cc_sleep_clk = { 776 + .halt_reg = 0x5004, 777 + .halt_check = BRANCH_HALT, 778 + .clkr = { 779 + .enable_reg = 0x5004, 780 + .enable_mask = BIT(0), 781 + .hw.init = &(struct clk_init_data){ 782 + .name = "disp_cc_sleep_clk", 783 + .ops = &clk_branch2_ops, 784 + }, 785 + }, 786 + }; 787 + 788 + static struct gdsc disp_cc_mdss_core_gdsc = { 789 + .gdscr = 0x1004, 790 + .pd = { 791 + .name = "disp_cc_mdss_core_gdsc", 792 + }, 793 + .pwrsts = PWRSTS_OFF_ON, 794 + .flags = HW_CTRL | RETAIN_FF_ENABLE, 795 + }; 796 + 797 + static struct clk_regmap *disp_cc_sc7280_clocks[] = { 798 + [DISP_CC_MDSS_AHB_CLK] = &disp_cc_mdss_ahb_clk.clkr, 799 + [DISP_CC_MDSS_AHB_CLK_SRC] = &disp_cc_mdss_ahb_clk_src.clkr, 800 + [DISP_CC_MDSS_BYTE0_CLK] = &disp_cc_mdss_byte0_clk.clkr, 801 + [DISP_CC_MDSS_BYTE0_CLK_SRC] = &disp_cc_mdss_byte0_clk_src.clkr, 802 + [DISP_CC_MDSS_BYTE0_DIV_CLK_SRC] = &disp_cc_mdss_byte0_div_clk_src.clkr, 803 + [DISP_CC_MDSS_BYTE0_INTF_CLK] = &disp_cc_mdss_byte0_intf_clk.clkr, 804 + [DISP_CC_MDSS_DP_AUX_CLK] = &disp_cc_mdss_dp_aux_clk.clkr, 805 + [DISP_CC_MDSS_DP_AUX_CLK_SRC] = &disp_cc_mdss_dp_aux_clk_src.clkr, 806 + [DISP_CC_MDSS_DP_CRYPTO_CLK] = &disp_cc_mdss_dp_crypto_clk.clkr, 807 + [DISP_CC_MDSS_DP_CRYPTO_CLK_SRC] = &disp_cc_mdss_dp_crypto_clk_src.clkr, 808 + [DISP_CC_MDSS_DP_LINK_CLK] = &disp_cc_mdss_dp_link_clk.clkr, 809 + [DISP_CC_MDSS_DP_LINK_CLK_SRC] = &disp_cc_mdss_dp_link_clk_src.clkr, 810 + [DISP_CC_MDSS_DP_LINK_DIV_CLK_SRC] = 811 + &disp_cc_mdss_dp_link_div_clk_src.clkr, 812 + [DISP_CC_MDSS_DP_LINK_INTF_CLK] = &disp_cc_mdss_dp_link_intf_clk.clkr, 813 + [DISP_CC_MDSS_DP_PIXEL_CLK] = &disp_cc_mdss_dp_pixel_clk.clkr, 814 + [DISP_CC_MDSS_DP_PIXEL_CLK_SRC] = &disp_cc_mdss_dp_pixel_clk_src.clkr, 815 + [DISP_CC_MDSS_EDP_AUX_CLK] = &disp_cc_mdss_edp_aux_clk.clkr, 816 + [DISP_CC_MDSS_EDP_AUX_CLK_SRC] = &disp_cc_mdss_edp_aux_clk_src.clkr, 817 + [DISP_CC_MDSS_EDP_LINK_CLK] = &disp_cc_mdss_edp_link_clk.clkr, 818 + [DISP_CC_MDSS_EDP_LINK_CLK_SRC] = &disp_cc_mdss_edp_link_clk_src.clkr, 819 + [DISP_CC_MDSS_EDP_LINK_DIV_CLK_SRC] = 820 + &disp_cc_mdss_edp_link_div_clk_src.clkr, 821 + [DISP_CC_MDSS_EDP_LINK_INTF_CLK] = &disp_cc_mdss_edp_link_intf_clk.clkr, 822 + [DISP_CC_MDSS_EDP_PIXEL_CLK] = &disp_cc_mdss_edp_pixel_clk.clkr, 823 + [DISP_CC_MDSS_EDP_PIXEL_CLK_SRC] = &disp_cc_mdss_edp_pixel_clk_src.clkr, 824 + [DISP_CC_MDSS_ESC0_CLK] = &disp_cc_mdss_esc0_clk.clkr, 825 + [DISP_CC_MDSS_ESC0_CLK_SRC] = &disp_cc_mdss_esc0_clk_src.clkr, 826 + [DISP_CC_MDSS_MDP_CLK] = &disp_cc_mdss_mdp_clk.clkr, 827 + [DISP_CC_MDSS_MDP_CLK_SRC] = &disp_cc_mdss_mdp_clk_src.clkr, 828 + [DISP_CC_MDSS_MDP_LUT_CLK] = &disp_cc_mdss_mdp_lut_clk.clkr, 829 + [DISP_CC_MDSS_NON_GDSC_AHB_CLK] = &disp_cc_mdss_non_gdsc_ahb_clk.clkr, 830 + [DISP_CC_MDSS_PCLK0_CLK] = &disp_cc_mdss_pclk0_clk.clkr, 831 + [DISP_CC_MDSS_PCLK0_CLK_SRC] = &disp_cc_mdss_pclk0_clk_src.clkr, 832 + [DISP_CC_MDSS_ROT_CLK] = &disp_cc_mdss_rot_clk.clkr, 833 + [DISP_CC_MDSS_ROT_CLK_SRC] = &disp_cc_mdss_rot_clk_src.clkr, 834 + [DISP_CC_MDSS_RSCC_AHB_CLK] = &disp_cc_mdss_rscc_ahb_clk.clkr, 835 + [DISP_CC_MDSS_RSCC_VSYNC_CLK] = &disp_cc_mdss_rscc_vsync_clk.clkr, 836 + [DISP_CC_MDSS_VSYNC_CLK] = &disp_cc_mdss_vsync_clk.clkr, 837 + [DISP_CC_MDSS_VSYNC_CLK_SRC] = &disp_cc_mdss_vsync_clk_src.clkr, 838 + [DISP_CC_PLL0] = &disp_cc_pll0.clkr, 839 + [DISP_CC_SLEEP_CLK] = &disp_cc_sleep_clk.clkr, 840 + }; 841 + 842 + static struct gdsc *disp_cc_sc7280_gdscs[] = { 843 + [DISP_CC_MDSS_CORE_GDSC] = &disp_cc_mdss_core_gdsc, 844 + }; 845 + 846 + static const struct regmap_config disp_cc_sc7280_regmap_config = { 847 + .reg_bits = 32, 848 + .reg_stride = 4, 849 + .val_bits = 32, 850 + .max_register = 0x10000, 851 + .fast_io = true, 852 + }; 853 + 854 + static const struct qcom_cc_desc disp_cc_sc7280_desc = { 855 + .config = &disp_cc_sc7280_regmap_config, 856 + .clks = disp_cc_sc7280_clocks, 857 + .num_clks = ARRAY_SIZE(disp_cc_sc7280_clocks), 858 + .gdscs = disp_cc_sc7280_gdscs, 859 + .num_gdscs = ARRAY_SIZE(disp_cc_sc7280_gdscs), 860 + }; 861 + 862 + static const struct of_device_id disp_cc_sc7280_match_table[] = { 863 + { .compatible = "qcom,sc7280-dispcc" }, 864 + { } 865 + }; 866 + MODULE_DEVICE_TABLE(of, disp_cc_sc7280_match_table); 867 + 868 + static int disp_cc_sc7280_probe(struct platform_device *pdev) 869 + { 870 + struct regmap *regmap; 871 + 872 + regmap = qcom_cc_map(pdev, &disp_cc_sc7280_desc); 873 + if (IS_ERR(regmap)) 874 + return PTR_ERR(regmap); 875 + 876 + clk_lucid_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config); 877 + 878 + /* 879 + * Keep the clocks always-ON 880 + * DISP_CC_XO_CLK 881 + */ 882 + regmap_update_bits(regmap, 0x5008, BIT(0), BIT(0)); 883 + 884 + return qcom_cc_really_probe(pdev, &disp_cc_sc7280_desc, regmap); 885 + } 886 + 887 + static struct platform_driver disp_cc_sc7280_driver = { 888 + .probe = disp_cc_sc7280_probe, 889 + .driver = { 890 + .name = "disp_cc-sc7280", 891 + .of_match_table = disp_cc_sc7280_match_table, 892 + }, 893 + }; 894 + 895 + static int __init disp_cc_sc7280_init(void) 896 + { 897 + return platform_driver_register(&disp_cc_sc7280_driver); 898 + } 899 + subsys_initcall(disp_cc_sc7280_init); 900 + 901 + static void __exit disp_cc_sc7280_exit(void) 902 + { 903 + platform_driver_unregister(&disp_cc_sc7280_driver); 904 + } 905 + module_exit(disp_cc_sc7280_exit); 906 + 907 + MODULE_DESCRIPTION("QTI DISP_CC sc7280 Driver"); 908 + MODULE_LICENSE("GPL v2");
+12 -10
drivers/clk/qcom/dispcc-sm8250.c
··· 26 26 P_DISP_CC_PLL1_OUT_MAIN, 27 27 P_DP_PHY_PLL_LINK_CLK, 28 28 P_DP_PHY_PLL_VCO_DIV_CLK, 29 + P_DPTX1_PHY_PLL_LINK_CLK, 30 + P_DPTX1_PHY_PLL_VCO_DIV_CLK, 31 + P_DPTX2_PHY_PLL_LINK_CLK, 32 + P_DPTX2_PHY_PLL_VCO_DIV_CLK, 29 33 P_EDP_PHY_PLL_LINK_CLK, 30 34 P_EDP_PHY_PLL_VCO_DIV_CLK, 31 35 P_DSI0_PHY_PLL_OUT_BYTECLK, ··· 102 98 { P_BI_TCXO, 0 }, 103 99 { P_DP_PHY_PLL_LINK_CLK, 1 }, 104 100 { P_DP_PHY_PLL_VCO_DIV_CLK, 2 }, 101 + { P_DPTX1_PHY_PLL_LINK_CLK, 3 }, 102 + { P_DPTX1_PHY_PLL_VCO_DIV_CLK, 4 }, 103 + { P_DPTX2_PHY_PLL_LINK_CLK, 5 }, 104 + { P_DPTX2_PHY_PLL_VCO_DIV_CLK, 6 }, 105 105 }; 106 106 107 107 static const struct clk_parent_data disp_cc_parent_data_0[] = { 108 108 { .fw_name = "bi_tcxo" }, 109 109 { .fw_name = "dp_phy_pll_link_clk" }, 110 110 { .fw_name = "dp_phy_pll_vco_div_clk" }, 111 + { .fw_name = "dptx1_phy_pll_link_clk" }, 112 + { .fw_name = "dptx1_phy_pll_vco_div_clk" }, 113 + { .fw_name = "dptx2_phy_pll_link_clk" }, 114 + { .fw_name = "dptx2_phy_pll_vco_div_clk" }, 111 115 }; 112 116 113 117 static const struct parent_map disp_cc_parent_map_1[] = { ··· 281 269 }, 282 270 }; 283 271 284 - static const struct freq_tbl ftbl_disp_cc_mdss_dp_link1_clk_src[] = { 285 - F(162000000, P_DP_PHY_PLL_LINK_CLK, 1, 0, 0), 286 - F(270000000, P_DP_PHY_PLL_LINK_CLK, 1, 0, 0), 287 - F(540000000, P_DP_PHY_PLL_LINK_CLK, 1, 0, 0), 288 - F(810000000, P_DP_PHY_PLL_LINK_CLK, 1, 0, 0), 289 - { } 290 - }; 291 - 292 272 static struct clk_rcg2 disp_cc_mdss_dp_link1_clk_src = { 293 273 .cmd_rcgr = 0x220c, 294 274 .mnd_width = 0, 295 275 .hid_width = 5, 296 276 .parent_map = disp_cc_parent_map_0, 297 - .freq_tbl = ftbl_disp_cc_mdss_dp_link1_clk_src, 298 277 .clkr.hw.init = &(struct clk_init_data){ 299 278 .name = "disp_cc_mdss_dp_link1_clk_src", 300 279 .parent_data = disp_cc_parent_data_0, ··· 299 296 .mnd_width = 0, 300 297 .hid_width = 5, 301 298 .parent_map = disp_cc_parent_map_0, 302 - .freq_tbl = ftbl_disp_cc_mdss_dp_link1_clk_src, 303 299 .clkr.hw.init = &(struct clk_init_data){ 304 300 .name = "disp_cc_mdss_dp_link_clk_src", 305 301 .parent_data = disp_cc_parent_data_0,
+4250
drivers/clk/qcom/gcc-msm8953.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + // Copyright (c) 2021, The Linux Foundation. All rights reserved. 3 + 4 + #include <linux/kernel.h> 5 + #include <linux/bitops.h> 6 + #include <linux/err.h> 7 + #include <linux/module.h> 8 + #include <linux/platform_device.h> 9 + #include <linux/of.h> 10 + #include <linux/of_device.h> 11 + #include <linux/clk-provider.h> 12 + #include <linux/regmap.h> 13 + #include <linux/reset-controller.h> 14 + 15 + #include <dt-bindings/clock/qcom,gcc-msm8953.h> 16 + 17 + #include "clk-alpha-pll.h" 18 + #include "clk-branch.h" 19 + #include "clk-rcg.h" 20 + #include "common.h" 21 + #include "gdsc.h" 22 + #include "reset.h" 23 + 24 + enum { 25 + P_XO, 26 + P_SLEEP_CLK, 27 + P_GPLL0, 28 + P_GPLL0_DIV2, 29 + P_GPLL2, 30 + P_GPLL3, 31 + P_GPLL4, 32 + P_GPLL6, 33 + P_GPLL6_DIV2, 34 + P_DSI0PLL, 35 + P_DSI0PLL_BYTE, 36 + P_DSI1PLL, 37 + P_DSI1PLL_BYTE, 38 + }; 39 + 40 + static struct clk_alpha_pll gpll0_early = { 41 + .offset = 0x21000, 42 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 43 + .clkr = { 44 + .enable_reg = 0x45000, 45 + .enable_mask = BIT(0), 46 + .hw.init = &(struct clk_init_data) { 47 + .name = "gpll0_early", 48 + .parent_data = &(const struct clk_parent_data) { 49 + .fw_name = "xo", 50 + }, 51 + .num_parents = 1, 52 + .ops = &clk_alpha_pll_fixed_ops, 53 + }, 54 + }, 55 + }; 56 + 57 + static struct clk_fixed_factor gpll0_early_div = { 58 + .mult = 1, 59 + .div = 2, 60 + .hw.init = &(struct clk_init_data){ 61 + .name = "gpll0_early_div", 62 + .parent_hws = (const struct clk_hw*[]){ 63 + &gpll0_early.clkr.hw, 64 + }, 65 + .num_parents = 1, 66 + .ops = &clk_fixed_factor_ops, 67 + }, 68 + }; 69 + 70 + static struct clk_alpha_pll_postdiv gpll0 = { 71 + .offset = 0x21000, 72 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 73 + .clkr.hw.init = &(struct clk_init_data){ 74 + .name = "gpll0", 75 + .parent_hws = (const struct clk_hw*[]){ 76 + &gpll0_early.clkr.hw, 77 + }, 78 + .num_parents = 1, 79 + .ops = &clk_alpha_pll_postdiv_ro_ops, 80 + }, 81 + }; 82 + 83 + static struct clk_alpha_pll gpll2_early = { 84 + .offset = 0x4a000, 85 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 86 + .clkr = { 87 + .enable_reg = 0x45000, 88 + .enable_mask = BIT(2), 89 + .hw.init = &(struct clk_init_data){ 90 + .name = "gpll2_early", 91 + .parent_data = &(const struct clk_parent_data) { 92 + .fw_name = "xo", 93 + }, 94 + .num_parents = 1, 95 + .ops = &clk_alpha_pll_fixed_ops, 96 + }, 97 + }, 98 + }; 99 + 100 + static struct clk_alpha_pll_postdiv gpll2 = { 101 + .offset = 0x4a000, 102 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 103 + .clkr.hw.init = &(struct clk_init_data){ 104 + .name = "gpll2", 105 + .parent_hws = (const struct clk_hw*[]){ 106 + &gpll2_early.clkr.hw, 107 + }, 108 + .num_parents = 1, 109 + .ops = &clk_alpha_pll_postdiv_ro_ops, 110 + }, 111 + }; 112 + 113 + static const struct pll_vco gpll3_p_vco[] = { 114 + { 1000000000, 2000000000, 0 }, 115 + }; 116 + 117 + static const struct alpha_pll_config gpll3_early_config = { 118 + .l = 63, 119 + .config_ctl_val = 0x4001055b, 120 + .early_output_mask = 0, 121 + .post_div_mask = GENMASK(11, 8), 122 + .post_div_val = BIT(8), 123 + }; 124 + 125 + static struct clk_alpha_pll gpll3_early = { 126 + .offset = 0x22000, 127 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 128 + .vco_table = gpll3_p_vco, 129 + .num_vco = ARRAY_SIZE(gpll3_p_vco), 130 + .flags = SUPPORTS_DYNAMIC_UPDATE, 131 + .clkr = { 132 + .hw.init = &(struct clk_init_data){ 133 + .name = "gpll3_early", 134 + .parent_data = &(const struct clk_parent_data) { 135 + .fw_name = "xo", 136 + }, 137 + .num_parents = 1, 138 + .ops = &clk_alpha_pll_ops, 139 + }, 140 + }, 141 + }; 142 + 143 + static struct clk_alpha_pll_postdiv gpll3 = { 144 + .offset = 0x22000, 145 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 146 + .clkr.hw.init = &(struct clk_init_data){ 147 + .name = "gpll3", 148 + .parent_hws = (const struct clk_hw*[]){ 149 + &gpll3_early.clkr.hw, 150 + }, 151 + .num_parents = 1, 152 + .ops = &clk_alpha_pll_postdiv_ops, 153 + .flags = CLK_SET_RATE_PARENT, 154 + }, 155 + }; 156 + 157 + static struct clk_alpha_pll gpll4_early = { 158 + .offset = 0x24000, 159 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 160 + .clkr = { 161 + .enable_reg = 0x45000, 162 + .enable_mask = BIT(5), 163 + .hw.init = &(struct clk_init_data){ 164 + .name = "gpll4_early", 165 + .parent_data = &(const struct clk_parent_data) { 166 + .fw_name = "xo", 167 + }, 168 + .num_parents = 1, 169 + .ops = &clk_alpha_pll_fixed_ops, 170 + }, 171 + }, 172 + }; 173 + 174 + static struct clk_alpha_pll_postdiv gpll4 = { 175 + .offset = 0x24000, 176 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 177 + .clkr.hw.init = &(struct clk_init_data){ 178 + .name = "gpll4", 179 + .parent_hws = (const struct clk_hw*[]){ 180 + &gpll4_early.clkr.hw, 181 + }, 182 + .num_parents = 1, 183 + .ops = &clk_alpha_pll_postdiv_ro_ops, 184 + }, 185 + }; 186 + 187 + static struct clk_alpha_pll gpll6_early = { 188 + .offset = 0x37000, 189 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 190 + .clkr = { 191 + .enable_reg = 0x45000, 192 + .enable_mask = BIT(7), 193 + .hw.init = &(struct clk_init_data){ 194 + .name = "gpll6_early", 195 + .parent_data = &(const struct clk_parent_data) { 196 + .fw_name = "xo", 197 + }, 198 + .num_parents = 1, 199 + .ops = &clk_alpha_pll_fixed_ops, 200 + }, 201 + }, 202 + }; 203 + 204 + static struct clk_fixed_factor gpll6_early_div = { 205 + .mult = 1, 206 + .div = 2, 207 + .hw.init = &(struct clk_init_data){ 208 + .name = "gpll6_early_div", 209 + .parent_hws = (const struct clk_hw*[]){ 210 + &gpll6_early.clkr.hw, 211 + }, 212 + .num_parents = 1, 213 + .ops = &clk_fixed_factor_ops, 214 + }, 215 + }; 216 + 217 + static struct clk_alpha_pll_postdiv gpll6 = { 218 + .offset = 0x37000, 219 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 220 + .clkr.hw.init = &(struct clk_init_data){ 221 + .name = "gpll6", 222 + .parent_hws = (const struct clk_hw*[]){ 223 + &gpll6_early.clkr.hw, 224 + }, 225 + .num_parents = 1, 226 + .ops = &clk_alpha_pll_postdiv_ro_ops, 227 + }, 228 + }; 229 + 230 + static const struct parent_map gcc_xo_gpll0_gpll0div2_2_map[] = { 231 + { P_XO, 0 }, 232 + { P_GPLL0, 1 }, 233 + { P_GPLL0_DIV2, 2 }, 234 + }; 235 + 236 + static const struct parent_map gcc_xo_gpll0_gpll0div2_4_map[] = { 237 + { P_XO, 0 }, 238 + { P_GPLL0, 1 }, 239 + { P_GPLL0_DIV2, 4 }, 240 + }; 241 + 242 + static const struct clk_parent_data gcc_xo_gpll0_gpll0div2_data[] = { 243 + { .fw_name = "xo" }, 244 + { .hw = &gpll0.clkr.hw }, 245 + { .hw = &gpll0_early_div.hw }, 246 + }; 247 + 248 + static const struct parent_map gcc_apc_droop_detector_map[] = { 249 + { P_XO, 0 }, 250 + { P_GPLL0, 1 }, 251 + { P_GPLL4, 2 }, 252 + }; 253 + 254 + static const struct clk_parent_data gcc_apc_droop_detector_data[] = { 255 + { .fw_name = "xo" }, 256 + { .hw = &gpll0.clkr.hw }, 257 + { .hw = &gpll4.clkr.hw }, 258 + }; 259 + 260 + static const struct freq_tbl ftbl_apc_droop_detector_clk_src[] = { 261 + F(19200000, P_XO, 1, 0, 0), 262 + F(400000000, P_GPLL0, 2, 0, 0), 263 + F(576000000, P_GPLL4, 2, 0, 0), 264 + { } 265 + }; 266 + 267 + static struct clk_rcg2 apc0_droop_detector_clk_src = { 268 + .cmd_rcgr = 0x78008, 269 + .hid_width = 5, 270 + .freq_tbl = ftbl_apc_droop_detector_clk_src, 271 + .parent_map = gcc_apc_droop_detector_map, 272 + .clkr.hw.init = &(struct clk_init_data) { 273 + .name = "apc0_droop_detector_clk_src", 274 + .parent_data = gcc_apc_droop_detector_data, 275 + .num_parents = ARRAY_SIZE(gcc_apc_droop_detector_data), 276 + .ops = &clk_rcg2_ops, 277 + } 278 + }; 279 + static struct clk_rcg2 apc1_droop_detector_clk_src = { 280 + .cmd_rcgr = 0x79008, 281 + .hid_width = 5, 282 + .freq_tbl = ftbl_apc_droop_detector_clk_src, 283 + .parent_map = gcc_apc_droop_detector_map, 284 + .clkr.hw.init = &(struct clk_init_data) { 285 + .name = "apc1_droop_detector_clk_src", 286 + .parent_data = gcc_apc_droop_detector_data, 287 + .num_parents = ARRAY_SIZE(gcc_apc_droop_detector_data), 288 + .ops = &clk_rcg2_ops, 289 + } 290 + }; 291 + 292 + static const struct freq_tbl ftbl_apss_ahb_clk_src[] = { 293 + F(19200000, P_XO, 1, 0, 0), 294 + F(25000000, P_GPLL0_DIV2, 16, 0, 0), 295 + F(50000000, P_GPLL0, 16, 0, 0), 296 + F(100000000, P_GPLL0, 8, 0, 0), 297 + F(133330000, P_GPLL0, 6, 0, 0), 298 + { } 299 + }; 300 + 301 + static struct clk_rcg2 apss_ahb_clk_src = { 302 + .cmd_rcgr = 0x46000, 303 + .hid_width = 5, 304 + .freq_tbl = ftbl_apss_ahb_clk_src, 305 + .parent_map = gcc_xo_gpll0_gpll0div2_4_map, 306 + .clkr.hw.init = &(struct clk_init_data) { 307 + .name = "apss_ahb_clk_src", 308 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 309 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 310 + .ops = &clk_rcg2_ops, 311 + } 312 + }; 313 + 314 + static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = { 315 + F(19200000, P_XO, 1, 0, 0), 316 + F(25000000, P_GPLL0_DIV2, 16, 0, 0), 317 + F(50000000, P_GPLL0, 16, 0, 0), 318 + { } 319 + }; 320 + 321 + static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = { 322 + .cmd_rcgr = 0x0200c, 323 + .hid_width = 5, 324 + .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 325 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 326 + .clkr.hw.init = &(struct clk_init_data) { 327 + .name = "blsp1_qup1_i2c_apps_clk_src", 328 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 329 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 330 + .ops = &clk_rcg2_ops, 331 + } 332 + }; 333 + 334 + static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = { 335 + .cmd_rcgr = 0x03000, 336 + .hid_width = 5, 337 + .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 338 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 339 + .clkr.hw.init = &(struct clk_init_data) { 340 + .name = "blsp1_qup2_i2c_apps_clk_src", 341 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 342 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 343 + .ops = &clk_rcg2_ops, 344 + } 345 + }; 346 + 347 + static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = { 348 + .cmd_rcgr = 0x04000, 349 + .hid_width = 5, 350 + .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 351 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 352 + .clkr.hw.init = &(struct clk_init_data) { 353 + .name = "blsp1_qup3_i2c_apps_clk_src", 354 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 355 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 356 + .ops = &clk_rcg2_ops, 357 + } 358 + }; 359 + 360 + static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = { 361 + .cmd_rcgr = 0x05000, 362 + .hid_width = 5, 363 + .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 364 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 365 + .clkr.hw.init = &(struct clk_init_data) { 366 + .name = "blsp1_qup4_i2c_apps_clk_src", 367 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 368 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 369 + .ops = &clk_rcg2_ops, 370 + } 371 + }; 372 + 373 + static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = { 374 + .cmd_rcgr = 0x0c00c, 375 + .hid_width = 5, 376 + .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 377 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 378 + .clkr.hw.init = &(struct clk_init_data) { 379 + .name = "blsp2_qup1_i2c_apps_clk_src", 380 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 381 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 382 + .ops = &clk_rcg2_ops, 383 + } 384 + }; 385 + 386 + static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = { 387 + .cmd_rcgr = 0x0d000, 388 + .hid_width = 5, 389 + .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 390 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 391 + .clkr.hw.init = &(struct clk_init_data) { 392 + .name = "blsp2_qup2_i2c_apps_clk_src", 393 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 394 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 395 + .ops = &clk_rcg2_ops, 396 + } 397 + }; 398 + 399 + static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = { 400 + .cmd_rcgr = 0x0f000, 401 + .hid_width = 5, 402 + .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 403 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 404 + .clkr.hw.init = &(struct clk_init_data) { 405 + .name = "blsp2_qup3_i2c_apps_clk_src", 406 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 407 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 408 + .ops = &clk_rcg2_ops, 409 + } 410 + }; 411 + 412 + static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = { 413 + .cmd_rcgr = 0x18000, 414 + .hid_width = 5, 415 + .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 416 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 417 + .clkr.hw.init = &(struct clk_init_data) { 418 + .name = "blsp2_qup4_i2c_apps_clk_src", 419 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 420 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 421 + .ops = &clk_rcg2_ops, 422 + } 423 + }; 424 + 425 + static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = { 426 + F(960000, P_XO, 10, 1, 2), 427 + F(4800000, P_XO, 4, 0, 0), 428 + F(9600000, P_XO, 2, 0, 0), 429 + F(12500000, P_GPLL0_DIV2, 16, 1, 2), 430 + F(16000000, P_GPLL0, 10, 1, 5), 431 + F(19200000, P_XO, 1, 0, 0), 432 + F(25000000, P_GPLL0, 16, 1, 2), 433 + F(50000000, P_GPLL0, 16, 0, 0), 434 + { } 435 + }; 436 + 437 + static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = { 438 + .cmd_rcgr = 0x02024, 439 + .hid_width = 5, 440 + .mnd_width = 8, 441 + .freq_tbl = ftbl_blsp_spi_apps_clk_src, 442 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 443 + .clkr.hw.init = &(struct clk_init_data) { 444 + .name = "blsp1_qup1_spi_apps_clk_src", 445 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 446 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 447 + .ops = &clk_rcg2_ops, 448 + } 449 + }; 450 + 451 + static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = { 452 + .cmd_rcgr = 0x03014, 453 + .hid_width = 5, 454 + .mnd_width = 8, 455 + .freq_tbl = ftbl_blsp_spi_apps_clk_src, 456 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 457 + .clkr.hw.init = &(struct clk_init_data) { 458 + .name = "blsp1_qup2_spi_apps_clk_src", 459 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 460 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 461 + .ops = &clk_rcg2_ops, 462 + } 463 + }; 464 + 465 + static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = { 466 + .cmd_rcgr = 0x04024, 467 + .hid_width = 5, 468 + .mnd_width = 8, 469 + .freq_tbl = ftbl_blsp_spi_apps_clk_src, 470 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 471 + .clkr.hw.init = &(struct clk_init_data) { 472 + .name = "blsp1_qup3_spi_apps_clk_src", 473 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 474 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 475 + .ops = &clk_rcg2_ops, 476 + } 477 + }; 478 + 479 + static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = { 480 + .cmd_rcgr = 0x05024, 481 + .hid_width = 5, 482 + .mnd_width = 8, 483 + .freq_tbl = ftbl_blsp_spi_apps_clk_src, 484 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 485 + .clkr.hw.init = &(struct clk_init_data) { 486 + .name = "blsp1_qup4_spi_apps_clk_src", 487 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 488 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 489 + .ops = &clk_rcg2_ops, 490 + } 491 + }; 492 + 493 + static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = { 494 + .cmd_rcgr = 0x0c024, 495 + .hid_width = 5, 496 + .mnd_width = 8, 497 + .freq_tbl = ftbl_blsp_spi_apps_clk_src, 498 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 499 + .clkr.hw.init = &(struct clk_init_data) { 500 + .name = "blsp2_qup1_spi_apps_clk_src", 501 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 502 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 503 + .ops = &clk_rcg2_ops, 504 + } 505 + }; 506 + 507 + static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = { 508 + .cmd_rcgr = 0x0d014, 509 + .hid_width = 5, 510 + .mnd_width = 8, 511 + .freq_tbl = ftbl_blsp_spi_apps_clk_src, 512 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 513 + .clkr.hw.init = &(struct clk_init_data) { 514 + .name = "blsp2_qup2_spi_apps_clk_src", 515 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 516 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 517 + .ops = &clk_rcg2_ops, 518 + } 519 + }; 520 + 521 + static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = { 522 + .cmd_rcgr = 0x0f024, 523 + .hid_width = 5, 524 + .mnd_width = 8, 525 + .freq_tbl = ftbl_blsp_spi_apps_clk_src, 526 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 527 + .clkr.hw.init = &(struct clk_init_data) { 528 + .name = "blsp2_qup3_spi_apps_clk_src", 529 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 530 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 531 + .ops = &clk_rcg2_ops, 532 + } 533 + }; 534 + 535 + static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = { 536 + .cmd_rcgr = 0x18024, 537 + .hid_width = 5, 538 + .mnd_width = 8, 539 + .freq_tbl = ftbl_blsp_spi_apps_clk_src, 540 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 541 + .clkr.hw.init = &(struct clk_init_data) { 542 + .name = "blsp2_qup4_spi_apps_clk_src", 543 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 544 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 545 + .ops = &clk_rcg2_ops, 546 + } 547 + }; 548 + 549 + static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = { 550 + F(3686400, P_GPLL0_DIV2, 1, 144, 15625), 551 + F(7372800, P_GPLL0_DIV2, 1, 288, 15625), 552 + F(14745600, P_GPLL0_DIV2, 1, 576, 15625), 553 + F(16000000, P_GPLL0_DIV2, 5, 1, 5), 554 + F(19200000, P_XO, 1, 0, 0), 555 + F(24000000, P_GPLL0, 1, 3, 100), 556 + F(25000000, P_GPLL0, 16, 1, 2), 557 + F(32000000, P_GPLL0, 1, 1, 25), 558 + F(40000000, P_GPLL0, 1, 1, 20), 559 + F(46400000, P_GPLL0, 1, 29, 500), 560 + F(48000000, P_GPLL0, 1, 3, 50), 561 + F(51200000, P_GPLL0, 1, 8, 125), 562 + F(56000000, P_GPLL0, 1, 7, 100), 563 + F(58982400, P_GPLL0, 1, 1152, 15625), 564 + F(60000000, P_GPLL0, 1, 3, 40), 565 + F(64000000, P_GPLL0, 1, 2, 25), 566 + { } 567 + }; 568 + 569 + static struct clk_rcg2 blsp1_uart1_apps_clk_src = { 570 + .cmd_rcgr = 0x02044, 571 + .hid_width = 5, 572 + .mnd_width = 16, 573 + .freq_tbl = ftbl_blsp_uart_apps_clk_src, 574 + .parent_map = gcc_xo_gpll0_gpll0div2_4_map, 575 + .clkr.hw.init = &(struct clk_init_data) { 576 + .name = "blsp1_uart1_apps_clk_src", 577 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 578 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 579 + .ops = &clk_rcg2_ops, 580 + } 581 + }; 582 + 583 + static struct clk_rcg2 blsp1_uart2_apps_clk_src = { 584 + .cmd_rcgr = 0x03034, 585 + .hid_width = 5, 586 + .mnd_width = 16, 587 + .freq_tbl = ftbl_blsp_uart_apps_clk_src, 588 + .parent_map = gcc_xo_gpll0_gpll0div2_4_map, 589 + .clkr.hw.init = &(struct clk_init_data) { 590 + .name = "blsp1_uart2_apps_clk_src", 591 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 592 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 593 + .ops = &clk_rcg2_ops, 594 + } 595 + }; 596 + 597 + static struct clk_rcg2 blsp2_uart1_apps_clk_src = { 598 + .cmd_rcgr = 0x0c044, 599 + .hid_width = 5, 600 + .mnd_width = 16, 601 + .freq_tbl = ftbl_blsp_uart_apps_clk_src, 602 + .parent_map = gcc_xo_gpll0_gpll0div2_4_map, 603 + .clkr.hw.init = &(struct clk_init_data) { 604 + .name = "blsp2_uart1_apps_clk_src", 605 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 606 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 607 + .ops = &clk_rcg2_ops, 608 + } 609 + }; 610 + 611 + static struct clk_rcg2 blsp2_uart2_apps_clk_src = { 612 + .cmd_rcgr = 0x0d034, 613 + .hid_width = 5, 614 + .mnd_width = 16, 615 + .freq_tbl = ftbl_blsp_uart_apps_clk_src, 616 + .parent_map = gcc_xo_gpll0_gpll0div2_4_map, 617 + .clkr.hw.init = &(struct clk_init_data) { 618 + .name = "blsp2_uart2_apps_clk_src", 619 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 620 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 621 + .ops = &clk_rcg2_ops, 622 + } 623 + }; 624 + 625 + static const struct parent_map gcc_byte0_map[] = { 626 + { P_XO, 0 }, 627 + { P_DSI0PLL_BYTE, 1 }, 628 + { P_DSI1PLL_BYTE, 3 }, 629 + }; 630 + 631 + static const struct parent_map gcc_byte1_map[] = { 632 + { P_XO, 0 }, 633 + { P_DSI0PLL_BYTE, 3 }, 634 + { P_DSI1PLL_BYTE, 1 }, 635 + }; 636 + 637 + static const struct clk_parent_data gcc_byte_data[] = { 638 + { .fw_name = "xo" }, 639 + { .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" }, 640 + { .fw_name = "dsi1pllbyte", .name = "dsi1pllbyte" }, 641 + }; 642 + 643 + static struct clk_rcg2 byte0_clk_src = { 644 + .cmd_rcgr = 0x4d044, 645 + .hid_width = 5, 646 + .parent_map = gcc_byte0_map, 647 + .clkr.hw.init = &(struct clk_init_data) { 648 + .name = "byte0_clk_src", 649 + .parent_data = gcc_byte_data, 650 + .num_parents = ARRAY_SIZE(gcc_byte_data), 651 + .ops = &clk_byte2_ops, 652 + .flags = CLK_SET_RATE_PARENT, 653 + } 654 + }; 655 + 656 + static struct clk_rcg2 byte1_clk_src = { 657 + .cmd_rcgr = 0x4d0b0, 658 + .hid_width = 5, 659 + .parent_map = gcc_byte1_map, 660 + .clkr.hw.init = &(struct clk_init_data) { 661 + .name = "byte1_clk_src", 662 + .parent_data = gcc_byte_data, 663 + .num_parents = ARRAY_SIZE(gcc_byte_data), 664 + .ops = &clk_byte2_ops, 665 + .flags = CLK_SET_RATE_PARENT, 666 + } 667 + }; 668 + 669 + static const struct parent_map gcc_gp_map[] = { 670 + { P_XO, 0 }, 671 + { P_GPLL0, 1 }, 672 + { P_GPLL6, 2 }, 673 + { P_GPLL0_DIV2, 4 }, 674 + { P_SLEEP_CLK, 6 }, 675 + }; 676 + 677 + static const struct clk_parent_data gcc_gp_data[] = { 678 + { .fw_name = "xo" }, 679 + { .hw = &gpll0.clkr.hw }, 680 + { .hw = &gpll6.clkr.hw }, 681 + { .hw = &gpll0_early_div.hw }, 682 + { .fw_name = "sleep", .name = "sleep" }, 683 + }; 684 + 685 + static const struct freq_tbl ftbl_camss_gp_clk_src[] = { 686 + F(50000000, P_GPLL0_DIV2, 8, 0, 0), 687 + F(100000000, P_GPLL0, 8, 0, 0), 688 + F(200000000, P_GPLL0, 4, 0, 0), 689 + F(266670000, P_GPLL0, 3, 0, 0), 690 + { } 691 + }; 692 + 693 + static struct clk_rcg2 camss_gp0_clk_src = { 694 + .cmd_rcgr = 0x54000, 695 + .hid_width = 5, 696 + .mnd_width = 8, 697 + .freq_tbl = ftbl_camss_gp_clk_src, 698 + .parent_map = gcc_gp_map, 699 + .clkr.hw.init = &(struct clk_init_data) { 700 + .name = "camss_gp0_clk_src", 701 + .parent_data = gcc_gp_data, 702 + .num_parents = ARRAY_SIZE(gcc_gp_data), 703 + .ops = &clk_rcg2_ops, 704 + } 705 + }; 706 + 707 + static struct clk_rcg2 camss_gp1_clk_src = { 708 + .cmd_rcgr = 0x55000, 709 + .hid_width = 5, 710 + .mnd_width = 8, 711 + .freq_tbl = ftbl_camss_gp_clk_src, 712 + .parent_map = gcc_gp_map, 713 + .clkr.hw.init = &(struct clk_init_data) { 714 + .name = "camss_gp1_clk_src", 715 + .parent_data = gcc_gp_data, 716 + .num_parents = ARRAY_SIZE(gcc_gp_data), 717 + .ops = &clk_rcg2_ops, 718 + } 719 + }; 720 + 721 + static const struct freq_tbl ftbl_camss_top_ahb_clk_src[] = { 722 + F(40000000, P_GPLL0_DIV2, 10, 0, 0), 723 + F(80000000, P_GPLL0, 10, 0, 0), 724 + { } 725 + }; 726 + 727 + static struct clk_rcg2 camss_top_ahb_clk_src = { 728 + .cmd_rcgr = 0x5a000, 729 + .hid_width = 5, 730 + .freq_tbl = ftbl_camss_top_ahb_clk_src, 731 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 732 + .clkr.hw.init = &(struct clk_init_data) { 733 + .name = "camss_top_ahb_clk_src", 734 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 735 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 736 + .ops = &clk_rcg2_ops, 737 + } 738 + }; 739 + 740 + static const struct parent_map gcc_cci_map[] = { 741 + { P_XO, 0 }, 742 + { P_GPLL0, 2 }, 743 + { P_GPLL0_DIV2, 3 }, 744 + { P_SLEEP_CLK, 6 }, 745 + }; 746 + 747 + static const struct clk_parent_data gcc_cci_data[] = { 748 + { .fw_name = "xo" }, 749 + { .hw = &gpll0.clkr.hw }, 750 + { .hw = &gpll0_early_div.hw }, 751 + { .fw_name = "sleep", .name = "sleep" }, 752 + }; 753 + 754 + static const struct freq_tbl ftbl_cci_clk_src[] = { 755 + F(19200000, P_XO, 1, 0, 0), 756 + F(37500000, P_GPLL0_DIV2, 1, 3, 32), 757 + { } 758 + }; 759 + 760 + static struct clk_rcg2 cci_clk_src = { 761 + .cmd_rcgr = 0x51000, 762 + .hid_width = 5, 763 + .mnd_width = 8, 764 + .freq_tbl = ftbl_cci_clk_src, 765 + .parent_map = gcc_cci_map, 766 + .clkr.hw.init = &(struct clk_init_data) { 767 + .name = "cci_clk_src", 768 + .parent_data = gcc_cci_data, 769 + .num_parents = ARRAY_SIZE(gcc_cci_data), 770 + .ops = &clk_rcg2_ops, 771 + } 772 + }; 773 + 774 + static const struct parent_map gcc_cpp_map[] = { 775 + { P_XO, 0 }, 776 + { P_GPLL0, 1 }, 777 + { P_GPLL6, 3 }, 778 + { P_GPLL2, 4 }, 779 + { P_GPLL0_DIV2, 5 }, 780 + }; 781 + 782 + static const struct clk_parent_data gcc_cpp_data[] = { 783 + { .fw_name = "xo" }, 784 + { .hw = &gpll0.clkr.hw }, 785 + { .hw = &gpll6.clkr.hw }, 786 + { .hw = &gpll2.clkr.hw }, 787 + { .hw = &gpll0_early_div.hw }, 788 + }; 789 + 790 + static const struct freq_tbl ftbl_cpp_clk_src[] = { 791 + F(100000000, P_GPLL0_DIV2, 4, 0, 0), 792 + F(200000000, P_GPLL0, 4, 0, 0), 793 + F(266670000, P_GPLL0, 3, 0, 0), 794 + F(320000000, P_GPLL0, 2.5, 0, 0), 795 + F(400000000, P_GPLL0, 2, 0, 0), 796 + F(465000000, P_GPLL2, 2, 0, 0), 797 + { } 798 + }; 799 + 800 + static struct clk_rcg2 cpp_clk_src = { 801 + .cmd_rcgr = 0x58018, 802 + .hid_width = 5, 803 + .freq_tbl = ftbl_cpp_clk_src, 804 + .parent_map = gcc_cpp_map, 805 + .clkr.hw.init = &(struct clk_init_data) { 806 + .name = "cpp_clk_src", 807 + .parent_data = gcc_cpp_data, 808 + .num_parents = ARRAY_SIZE(gcc_cpp_data), 809 + .ops = &clk_rcg2_ops, 810 + } 811 + }; 812 + 813 + static const struct freq_tbl ftbl_crypto_clk_src[] = { 814 + F(40000000, P_GPLL0_DIV2, 10, 0, 0), 815 + F(80000000, P_GPLL0, 10, 0, 0), 816 + F(100000000, P_GPLL0, 8, 0, 0), 817 + F(160000000, P_GPLL0, 5, 0, 0), 818 + { } 819 + }; 820 + 821 + static struct clk_rcg2 crypto_clk_src = { 822 + .cmd_rcgr = 0x16004, 823 + .hid_width = 5, 824 + .freq_tbl = ftbl_crypto_clk_src, 825 + .parent_map = gcc_xo_gpll0_gpll0div2_4_map, 826 + .clkr.hw.init = &(struct clk_init_data) { 827 + .name = "crypto_clk_src", 828 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 829 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 830 + .ops = &clk_rcg2_ops, 831 + } 832 + }; 833 + 834 + static const struct parent_map gcc_csi0_map[] = { 835 + { P_XO, 0 }, 836 + { P_GPLL0, 1 }, 837 + { P_GPLL2, 4 }, 838 + { P_GPLL0_DIV2, 5 }, 839 + }; 840 + 841 + static const struct parent_map gcc_csi12_map[] = { 842 + { P_XO, 0 }, 843 + { P_GPLL0, 1 }, 844 + { P_GPLL2, 5 }, 845 + { P_GPLL0_DIV2, 4 }, 846 + }; 847 + 848 + static const struct clk_parent_data gcc_csi_data[] = { 849 + { .fw_name = "xo" }, 850 + { .hw = &gpll0.clkr.hw }, 851 + { .hw = &gpll2.clkr.hw }, 852 + { .hw = &gpll0_early_div.hw }, 853 + }; 854 + 855 + static const struct freq_tbl ftbl_csi_clk_src[] = { 856 + F(100000000, P_GPLL0_DIV2, 4, 0, 0), 857 + F(200000000, P_GPLL0, 4, 0, 0), 858 + F(310000000, P_GPLL2, 3, 0, 0), 859 + F(400000000, P_GPLL0, 2, 0, 0), 860 + F(465000000, P_GPLL2, 2, 0, 0), 861 + { } 862 + }; 863 + 864 + static struct clk_rcg2 csi0_clk_src = { 865 + .cmd_rcgr = 0x4e020, 866 + .hid_width = 5, 867 + .freq_tbl = ftbl_csi_clk_src, 868 + .parent_map = gcc_csi0_map, 869 + .clkr.hw.init = &(struct clk_init_data) { 870 + .name = "csi0_clk_src", 871 + .parent_data = gcc_csi_data, 872 + .num_parents = ARRAY_SIZE(gcc_csi_data), 873 + .ops = &clk_rcg2_ops, 874 + } 875 + }; 876 + 877 + static struct clk_rcg2 csi1_clk_src = { 878 + .cmd_rcgr = 0x4f020, 879 + .hid_width = 5, 880 + .freq_tbl = ftbl_csi_clk_src, 881 + .parent_map = gcc_csi12_map, 882 + .clkr.hw.init = &(struct clk_init_data) { 883 + .name = "csi1_clk_src", 884 + .parent_data = gcc_csi_data, 885 + .num_parents = ARRAY_SIZE(gcc_csi_data), 886 + .ops = &clk_rcg2_ops, 887 + } 888 + }; 889 + 890 + static struct clk_rcg2 csi2_clk_src = { 891 + .cmd_rcgr = 0x3c020, 892 + .hid_width = 5, 893 + .freq_tbl = ftbl_csi_clk_src, 894 + .parent_map = gcc_csi12_map, 895 + .clkr.hw.init = &(struct clk_init_data) { 896 + .name = "csi2_clk_src", 897 + .parent_data = gcc_csi_data, 898 + .num_parents = ARRAY_SIZE(gcc_csi_data), 899 + .ops = &clk_rcg2_ops, 900 + } 901 + }; 902 + 903 + static const struct parent_map gcc_csip_map[] = { 904 + { P_XO, 0 }, 905 + { P_GPLL0, 1 }, 906 + { P_GPLL4, 3 }, 907 + { P_GPLL2, 4 }, 908 + { P_GPLL0_DIV2, 5 }, 909 + }; 910 + 911 + static const struct clk_parent_data gcc_csip_data[] = { 912 + { .fw_name = "xo" }, 913 + { .hw = &gpll0.clkr.hw }, 914 + { .hw = &gpll4.clkr.hw }, 915 + { .hw = &gpll2.clkr.hw }, 916 + { .hw = &gpll0_early_div.hw }, 917 + }; 918 + 919 + static const struct freq_tbl ftbl_csi_p_clk_src[] = { 920 + F(66670000, P_GPLL0_DIV2, 6, 0, 0), 921 + F(133330000, P_GPLL0, 6, 0, 0), 922 + F(200000000, P_GPLL0, 4, 0, 0), 923 + F(266670000, P_GPLL0, 3, 0, 0), 924 + F(310000000, P_GPLL2, 3, 0, 0), 925 + { } 926 + }; 927 + 928 + static struct clk_rcg2 csi0p_clk_src = { 929 + .cmd_rcgr = 0x58084, 930 + .hid_width = 5, 931 + .freq_tbl = ftbl_csi_p_clk_src, 932 + .parent_map = gcc_csip_map, 933 + .clkr.hw.init = &(struct clk_init_data) { 934 + .name = "csi0p_clk_src", 935 + .parent_data = gcc_csip_data, 936 + .num_parents = ARRAY_SIZE(gcc_csip_data), 937 + .ops = &clk_rcg2_ops, 938 + } 939 + }; 940 + 941 + static struct clk_rcg2 csi1p_clk_src = { 942 + .cmd_rcgr = 0x58094, 943 + .hid_width = 5, 944 + .freq_tbl = ftbl_csi_p_clk_src, 945 + .parent_map = gcc_csip_map, 946 + .clkr.hw.init = &(struct clk_init_data) { 947 + .name = "csi1p_clk_src", 948 + .parent_data = gcc_csip_data, 949 + .num_parents = ARRAY_SIZE(gcc_csip_data), 950 + .ops = &clk_rcg2_ops, 951 + } 952 + }; 953 + 954 + static struct clk_rcg2 csi2p_clk_src = { 955 + .cmd_rcgr = 0x580a4, 956 + .hid_width = 5, 957 + .freq_tbl = ftbl_csi_p_clk_src, 958 + .parent_map = gcc_csip_map, 959 + .clkr.hw.init = &(struct clk_init_data) { 960 + .name = "csi2p_clk_src", 961 + .parent_data = gcc_csip_data, 962 + .num_parents = ARRAY_SIZE(gcc_csip_data), 963 + .ops = &clk_rcg2_ops, 964 + } 965 + }; 966 + 967 + static const struct freq_tbl ftbl_csi_phytimer_clk_src[] = { 968 + F(100000000, P_GPLL0_DIV2, 4, 0, 0), 969 + F(200000000, P_GPLL0, 4, 0, 0), 970 + F(266670000, P_GPLL0, 3, 0, 0), 971 + { } 972 + }; 973 + 974 + static struct clk_rcg2 csi0phytimer_clk_src = { 975 + .cmd_rcgr = 0x4e000, 976 + .hid_width = 5, 977 + .freq_tbl = ftbl_csi_phytimer_clk_src, 978 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 979 + .clkr.hw.init = &(struct clk_init_data) { 980 + .name = "csi0phytimer_clk_src", 981 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 982 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 983 + .ops = &clk_rcg2_ops, 984 + } 985 + }; 986 + 987 + static struct clk_rcg2 csi1phytimer_clk_src = { 988 + .cmd_rcgr = 0x4f000, 989 + .hid_width = 5, 990 + .freq_tbl = ftbl_csi_phytimer_clk_src, 991 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 992 + .clkr.hw.init = &(struct clk_init_data) { 993 + .name = "csi1phytimer_clk_src", 994 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 995 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 996 + .ops = &clk_rcg2_ops, 997 + } 998 + }; 999 + 1000 + static struct clk_rcg2 csi2phytimer_clk_src = { 1001 + .cmd_rcgr = 0x4f05c, 1002 + .hid_width = 5, 1003 + .freq_tbl = ftbl_csi_phytimer_clk_src, 1004 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 1005 + .clkr.hw.init = &(struct clk_init_data) { 1006 + .name = "csi2phytimer_clk_src", 1007 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 1008 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 1009 + .ops = &clk_rcg2_ops, 1010 + } 1011 + }; 1012 + 1013 + static const struct parent_map gcc_esc_map[] = { 1014 + { P_XO, 0 }, 1015 + { P_GPLL0, 3 }, 1016 + }; 1017 + 1018 + static const struct clk_parent_data gcc_esc_vsync_data[] = { 1019 + { .fw_name = "xo" }, 1020 + { .hw = &gpll0.clkr.hw }, 1021 + }; 1022 + 1023 + static const struct freq_tbl ftbl_esc0_1_clk_src[] = { 1024 + F(19200000, P_XO, 1, 0, 0), 1025 + { } 1026 + }; 1027 + 1028 + static struct clk_rcg2 esc0_clk_src = { 1029 + .cmd_rcgr = 0x4d05c, 1030 + .hid_width = 5, 1031 + .freq_tbl = ftbl_esc0_1_clk_src, 1032 + .parent_map = gcc_esc_map, 1033 + .clkr.hw.init = &(struct clk_init_data) { 1034 + .name = "esc0_clk_src", 1035 + .parent_data = gcc_esc_vsync_data, 1036 + .num_parents = ARRAY_SIZE(gcc_esc_vsync_data), 1037 + .ops = &clk_rcg2_ops, 1038 + } 1039 + }; 1040 + 1041 + static struct clk_rcg2 esc1_clk_src = { 1042 + .cmd_rcgr = 0x4d0a8, 1043 + .hid_width = 5, 1044 + .freq_tbl = ftbl_esc0_1_clk_src, 1045 + .parent_map = gcc_esc_map, 1046 + .clkr.hw.init = &(struct clk_init_data) { 1047 + .name = "esc1_clk_src", 1048 + .parent_data = gcc_esc_vsync_data, 1049 + .num_parents = ARRAY_SIZE(gcc_esc_vsync_data), 1050 + .ops = &clk_rcg2_ops, 1051 + } 1052 + }; 1053 + 1054 + static const struct parent_map gcc_gfx3d_map[] = { 1055 + { P_XO, 0 }, 1056 + { P_GPLL0, 1 }, 1057 + { P_GPLL3, 2 }, 1058 + { P_GPLL6, 3 }, 1059 + { P_GPLL4, 4 }, 1060 + { P_GPLL0_DIV2, 5 }, 1061 + { P_GPLL6_DIV2, 6 }, 1062 + }; 1063 + 1064 + static const struct clk_parent_data gcc_gfx3d_data[] = { 1065 + { .fw_name = "xo" }, 1066 + { .hw = &gpll0.clkr.hw }, 1067 + { .hw = &gpll3.clkr.hw }, 1068 + { .hw = &gpll6.clkr.hw }, 1069 + { .hw = &gpll4.clkr.hw }, 1070 + { .hw = &gpll0_early_div.hw }, 1071 + { .hw = &gpll6_early_div.hw }, 1072 + }; 1073 + 1074 + static const struct freq_tbl ftbl_gfx3d_clk_src[] = { 1075 + F(19200000, P_XO, 1, 0, 0), 1076 + F(50000000, P_GPLL0_DIV2, 8, 0, 0), 1077 + F(80000000, P_GPLL0_DIV2, 5, 0, 0), 1078 + F(100000000, P_GPLL0_DIV2, 4, 0, 0), 1079 + F(133330000, P_GPLL0_DIV2, 3, 0, 0), 1080 + F(160000000, P_GPLL0_DIV2, 2.5, 0, 0), 1081 + F(200000000, P_GPLL0_DIV2, 2, 0, 0), 1082 + F(266670000, P_GPLL0, 3.0, 0, 0), 1083 + F(320000000, P_GPLL0, 2.5, 0, 0), 1084 + F(400000000, P_GPLL0, 2, 0, 0), 1085 + F(460800000, P_GPLL4, 2.5, 0, 0), 1086 + F(510000000, P_GPLL3, 2, 0, 0), 1087 + F(560000000, P_GPLL3, 2, 0, 0), 1088 + F(600000000, P_GPLL3, 2, 0, 0), 1089 + F(650000000, P_GPLL3, 2, 0, 0), 1090 + F(685000000, P_GPLL3, 2, 0, 0), 1091 + F(725000000, P_GPLL3, 2, 0, 0), 1092 + { } 1093 + }; 1094 + 1095 + static struct clk_rcg2 gfx3d_clk_src = { 1096 + .cmd_rcgr = 0x59000, 1097 + .hid_width = 5, 1098 + .freq_tbl = ftbl_gfx3d_clk_src, 1099 + .parent_map = gcc_gfx3d_map, 1100 + .clkr.hw.init = &(struct clk_init_data) { 1101 + .name = "gfx3d_clk_src", 1102 + .parent_data = gcc_gfx3d_data, 1103 + .num_parents = ARRAY_SIZE(gcc_gfx3d_data), 1104 + .ops = &clk_rcg2_floor_ops, 1105 + .flags = CLK_SET_RATE_PARENT, 1106 + } 1107 + }; 1108 + 1109 + static const struct freq_tbl ftbl_gp_clk_src[] = { 1110 + F(19200000, P_XO, 1, 0, 0), 1111 + { } 1112 + }; 1113 + 1114 + static struct clk_rcg2 gp1_clk_src = { 1115 + .cmd_rcgr = 0x08004, 1116 + .hid_width = 5, 1117 + .mnd_width = 8, 1118 + .freq_tbl = ftbl_gp_clk_src, 1119 + .parent_map = gcc_gp_map, 1120 + .clkr.hw.init = &(struct clk_init_data) { 1121 + .name = "gp1_clk_src", 1122 + .parent_data = gcc_gp_data, 1123 + .num_parents = ARRAY_SIZE(gcc_gp_data), 1124 + .ops = &clk_rcg2_ops, 1125 + } 1126 + }; 1127 + 1128 + static struct clk_rcg2 gp2_clk_src = { 1129 + .cmd_rcgr = 0x09004, 1130 + .hid_width = 5, 1131 + .mnd_width = 8, 1132 + .freq_tbl = ftbl_gp_clk_src, 1133 + .parent_map = gcc_gp_map, 1134 + .clkr.hw.init = &(struct clk_init_data) { 1135 + .name = "gp2_clk_src", 1136 + .parent_data = gcc_gp_data, 1137 + .num_parents = ARRAY_SIZE(gcc_gp_data), 1138 + .ops = &clk_rcg2_ops, 1139 + } 1140 + }; 1141 + 1142 + static struct clk_rcg2 gp3_clk_src = { 1143 + .cmd_rcgr = 0x0a004, 1144 + .hid_width = 5, 1145 + .mnd_width = 8, 1146 + .freq_tbl = ftbl_gp_clk_src, 1147 + .parent_map = gcc_gp_map, 1148 + .clkr.hw.init = &(struct clk_init_data) { 1149 + .name = "gp3_clk_src", 1150 + .parent_data = gcc_gp_data, 1151 + .num_parents = ARRAY_SIZE(gcc_gp_data), 1152 + .ops = &clk_rcg2_ops, 1153 + } 1154 + }; 1155 + 1156 + static const struct parent_map gcc_jpeg0_map[] = { 1157 + { P_XO, 0 }, 1158 + { P_GPLL0, 1 }, 1159 + { P_GPLL6, 2 }, 1160 + { P_GPLL0_DIV2, 4 }, 1161 + { P_GPLL2, 5 }, 1162 + }; 1163 + 1164 + static const struct clk_parent_data gcc_jpeg0_data[] = { 1165 + { .fw_name = "xo" }, 1166 + { .hw = &gpll0.clkr.hw }, 1167 + { .hw = &gpll6.clkr.hw }, 1168 + { .hw = &gpll0_early_div.hw }, 1169 + { .hw = &gpll2.clkr.hw }, 1170 + }; 1171 + 1172 + static const struct freq_tbl ftbl_jpeg0_clk_src[] = { 1173 + F(66670000, P_GPLL0_DIV2, 6, 0, 0), 1174 + F(133330000, P_GPLL0, 6, 0, 0), 1175 + F(200000000, P_GPLL0, 4, 0, 0), 1176 + F(266670000, P_GPLL0, 3, 0, 0), 1177 + F(310000000, P_GPLL2, 3, 0, 0), 1178 + F(320000000, P_GPLL0, 2.5, 0, 0), 1179 + { } 1180 + }; 1181 + 1182 + static struct clk_rcg2 jpeg0_clk_src = { 1183 + .cmd_rcgr = 0x57000, 1184 + .hid_width = 5, 1185 + .freq_tbl = ftbl_jpeg0_clk_src, 1186 + .parent_map = gcc_jpeg0_map, 1187 + .clkr.hw.init = &(struct clk_init_data) { 1188 + .name = "jpeg0_clk_src", 1189 + .parent_data = gcc_jpeg0_data, 1190 + .num_parents = ARRAY_SIZE(gcc_jpeg0_data), 1191 + .ops = &clk_rcg2_ops, 1192 + } 1193 + }; 1194 + 1195 + static const struct parent_map gcc_mclk_map[] = { 1196 + { P_XO, 0 }, 1197 + { P_GPLL0, 1 }, 1198 + { P_GPLL6, 2 }, 1199 + { P_GPLL0_DIV2, 4 }, 1200 + { P_GPLL6_DIV2, 5 }, 1201 + { P_SLEEP_CLK, 6 }, 1202 + }; 1203 + 1204 + static const struct clk_parent_data gcc_mclk_data[] = { 1205 + { .fw_name = "xo" }, 1206 + { .hw = &gpll0.clkr.hw }, 1207 + { .hw = &gpll6.clkr.hw }, 1208 + { .hw = &gpll0_early_div.hw }, 1209 + { .hw = &gpll6_early_div.hw }, 1210 + { .fw_name = "sleep", .name = "sleep" }, 1211 + }; 1212 + 1213 + static const struct freq_tbl ftbl_mclk_clk_src[] = { 1214 + F(19200000, P_GPLL6, 5, 4, 45), 1215 + F(24000000, P_GPLL6_DIV2, 1, 2, 45), 1216 + F(26000000, P_GPLL0, 1, 4, 123), 1217 + F(33330000, P_GPLL0_DIV2, 12, 0, 0), 1218 + F(36610000, P_GPLL6, 1, 2, 59), 1219 + F(66667000, P_GPLL0, 12, 0, 0), 1220 + { } 1221 + }; 1222 + 1223 + static struct clk_rcg2 mclk0_clk_src = { 1224 + .cmd_rcgr = 0x52000, 1225 + .hid_width = 5, 1226 + .mnd_width = 8, 1227 + .freq_tbl = ftbl_mclk_clk_src, 1228 + .parent_map = gcc_mclk_map, 1229 + .clkr.hw.init = &(struct clk_init_data) { 1230 + .name = "mclk0_clk_src", 1231 + .parent_data = gcc_mclk_data, 1232 + .num_parents = ARRAY_SIZE(gcc_mclk_data), 1233 + .ops = &clk_rcg2_ops, 1234 + } 1235 + }; 1236 + 1237 + static struct clk_rcg2 mclk1_clk_src = { 1238 + .cmd_rcgr = 0x53000, 1239 + .hid_width = 5, 1240 + .mnd_width = 8, 1241 + .freq_tbl = ftbl_mclk_clk_src, 1242 + .parent_map = gcc_mclk_map, 1243 + .clkr.hw.init = &(struct clk_init_data) { 1244 + .name = "mclk1_clk_src", 1245 + .parent_data = gcc_mclk_data, 1246 + .num_parents = ARRAY_SIZE(gcc_mclk_data), 1247 + .ops = &clk_rcg2_ops, 1248 + } 1249 + }; 1250 + 1251 + static struct clk_rcg2 mclk2_clk_src = { 1252 + .cmd_rcgr = 0x5c000, 1253 + .hid_width = 5, 1254 + .mnd_width = 8, 1255 + .freq_tbl = ftbl_mclk_clk_src, 1256 + .parent_map = gcc_mclk_map, 1257 + .clkr.hw.init = &(struct clk_init_data) { 1258 + .name = "mclk2_clk_src", 1259 + .parent_data = gcc_mclk_data, 1260 + .num_parents = ARRAY_SIZE(gcc_mclk_data), 1261 + .ops = &clk_rcg2_ops, 1262 + } 1263 + }; 1264 + 1265 + static struct clk_rcg2 mclk3_clk_src = { 1266 + .cmd_rcgr = 0x5e000, 1267 + .hid_width = 5, 1268 + .mnd_width = 8, 1269 + .freq_tbl = ftbl_mclk_clk_src, 1270 + .parent_map = gcc_mclk_map, 1271 + .clkr.hw.init = &(struct clk_init_data) { 1272 + .name = "mclk3_clk_src", 1273 + .parent_data = gcc_mclk_data, 1274 + .num_parents = ARRAY_SIZE(gcc_mclk_data), 1275 + .ops = &clk_rcg2_ops, 1276 + } 1277 + }; 1278 + 1279 + static const struct parent_map gcc_mdp_map[] = { 1280 + { P_XO, 0 }, 1281 + { P_GPLL0, 1 }, 1282 + { P_GPLL6, 3 }, 1283 + { P_GPLL0_DIV2, 4 }, 1284 + }; 1285 + 1286 + static const struct clk_parent_data gcc_mdp_data[] = { 1287 + { .fw_name = "xo" }, 1288 + { .hw = &gpll0.clkr.hw }, 1289 + { .hw = &gpll6.clkr.hw }, 1290 + { .hw = &gpll0_early_div.hw }, 1291 + }; 1292 + 1293 + static const struct freq_tbl ftbl_mdp_clk_src[] = { 1294 + F(50000000, P_GPLL0_DIV2, 8, 0, 0), 1295 + F(80000000, P_GPLL0_DIV2, 5, 0, 0), 1296 + F(160000000, P_GPLL0_DIV2, 2.5, 0, 0), 1297 + F(200000000, P_GPLL0, 4, 0, 0), 1298 + F(266670000, P_GPLL0, 3, 0, 0), 1299 + F(320000000, P_GPLL0, 2.5, 0, 0), 1300 + F(400000000, P_GPLL0, 2, 0, 0), 1301 + { } 1302 + }; 1303 + 1304 + static struct clk_rcg2 mdp_clk_src = { 1305 + .cmd_rcgr = 0x4d014, 1306 + .hid_width = 5, 1307 + .freq_tbl = ftbl_mdp_clk_src, 1308 + .parent_map = gcc_mdp_map, 1309 + .clkr.hw.init = &(struct clk_init_data) { 1310 + .name = "mdp_clk_src", 1311 + .parent_data = gcc_mdp_data, 1312 + .num_parents = ARRAY_SIZE(gcc_mdp_data), 1313 + .ops = &clk_rcg2_ops, 1314 + } 1315 + }; 1316 + 1317 + static const struct parent_map gcc_pclk0_map[] = { 1318 + { P_XO, 0 }, 1319 + { P_DSI0PLL, 1 }, 1320 + { P_DSI1PLL, 3 }, 1321 + }; 1322 + 1323 + static const struct parent_map gcc_pclk1_map[] = { 1324 + { P_XO, 0 }, 1325 + { P_DSI0PLL, 3 }, 1326 + { P_DSI1PLL, 1 }, 1327 + }; 1328 + 1329 + static const struct clk_parent_data gcc_pclk_data[] = { 1330 + { .fw_name = "xo" }, 1331 + { .fw_name = "dsi0pll", .name = "dsi0pll" }, 1332 + { .fw_name = "dsi1pll", .name = "dsi1pll" }, 1333 + }; 1334 + 1335 + static struct clk_rcg2 pclk0_clk_src = { 1336 + .cmd_rcgr = 0x4d000, 1337 + .hid_width = 5, 1338 + .mnd_width = 8, 1339 + .parent_map = gcc_pclk0_map, 1340 + .clkr.hw.init = &(struct clk_init_data) { 1341 + .name = "pclk0_clk_src", 1342 + .parent_data = gcc_pclk_data, 1343 + .num_parents = ARRAY_SIZE(gcc_pclk_data), 1344 + .ops = &clk_pixel_ops, 1345 + .flags = CLK_SET_RATE_PARENT, 1346 + } 1347 + }; 1348 + 1349 + static struct clk_rcg2 pclk1_clk_src = { 1350 + .cmd_rcgr = 0x4d0b8, 1351 + .hid_width = 5, 1352 + .mnd_width = 8, 1353 + .parent_map = gcc_pclk1_map, 1354 + .clkr.hw.init = &(struct clk_init_data) { 1355 + .name = "pclk1_clk_src", 1356 + .parent_data = gcc_pclk_data, 1357 + .num_parents = ARRAY_SIZE(gcc_pclk_data), 1358 + .ops = &clk_pixel_ops, 1359 + .flags = CLK_SET_RATE_PARENT, 1360 + } 1361 + }; 1362 + 1363 + static const struct freq_tbl ftbl_pdm2_clk_src[] = { 1364 + F(32000000, P_GPLL0_DIV2, 12.5, 0, 0), 1365 + F(64000000, P_GPLL0, 12.5, 0, 0), 1366 + { } 1367 + }; 1368 + 1369 + static struct clk_rcg2 pdm2_clk_src = { 1370 + .cmd_rcgr = 0x44010, 1371 + .hid_width = 5, 1372 + .freq_tbl = ftbl_pdm2_clk_src, 1373 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 1374 + .clkr.hw.init = &(struct clk_init_data) { 1375 + .name = "pdm2_clk_src", 1376 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 1377 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 1378 + .ops = &clk_rcg2_ops, 1379 + } 1380 + }; 1381 + 1382 + static const struct freq_tbl ftbl_rbcpr_gfx_clk_src[] = { 1383 + F(19200000, P_XO, 1, 0, 0), 1384 + F(50000000, P_GPLL0, 16, 0, 0), 1385 + { } 1386 + }; 1387 + 1388 + static struct clk_rcg2 rbcpr_gfx_clk_src = { 1389 + .cmd_rcgr = 0x3a00c, 1390 + .hid_width = 5, 1391 + .freq_tbl = ftbl_rbcpr_gfx_clk_src, 1392 + .parent_map = gcc_xo_gpll0_gpll0div2_4_map, 1393 + .clkr.hw.init = &(struct clk_init_data) { 1394 + .name = "rbcpr_gfx_clk_src", 1395 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 1396 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 1397 + .ops = &clk_rcg2_ops, 1398 + } 1399 + }; 1400 + 1401 + static const struct parent_map gcc_sdcc1_ice_core_map[] = { 1402 + { P_XO, 0 }, 1403 + { P_GPLL0, 1 }, 1404 + { P_GPLL6, 2 }, 1405 + { P_GPLL0_DIV2, 4 }, 1406 + }; 1407 + 1408 + static const struct clk_parent_data gcc_sdcc1_ice_core_data[] = { 1409 + { .fw_name = "xo" }, 1410 + { .hw = &gpll0.clkr.hw }, 1411 + { .hw = &gpll6.clkr.hw }, 1412 + { .hw = &gpll0_early_div.hw }, 1413 + }; 1414 + 1415 + static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = { 1416 + F(80000000, P_GPLL0_DIV2, 5, 0, 0), 1417 + F(160000000, P_GPLL0, 5, 0, 0), 1418 + F(270000000, P_GPLL6, 4, 0, 0), 1419 + { } 1420 + }; 1421 + 1422 + static struct clk_rcg2 sdcc1_ice_core_clk_src = { 1423 + .cmd_rcgr = 0x5d000, 1424 + .hid_width = 5, 1425 + .freq_tbl = ftbl_sdcc1_ice_core_clk_src, 1426 + .parent_map = gcc_sdcc1_ice_core_map, 1427 + .clkr.hw.init = &(struct clk_init_data) { 1428 + .name = "sdcc1_ice_core_clk_src", 1429 + .parent_data = gcc_sdcc1_ice_core_data, 1430 + .num_parents = ARRAY_SIZE(gcc_sdcc1_ice_core_data), 1431 + .ops = &clk_rcg2_ops, 1432 + } 1433 + }; 1434 + 1435 + static const struct parent_map gcc_sdcc_apps_map[] = { 1436 + { P_XO, 0 }, 1437 + { P_GPLL0, 1 }, 1438 + { P_GPLL4, 2 }, 1439 + { P_GPLL0_DIV2, 4 }, 1440 + }; 1441 + 1442 + static const struct clk_parent_data gcc_sdcc_apss_data[] = { 1443 + { .fw_name = "xo" }, 1444 + { .hw = &gpll0.clkr.hw }, 1445 + { .hw = &gpll4.clkr.hw }, 1446 + { .hw = &gpll0_early_div.hw }, 1447 + }; 1448 + 1449 + static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = { 1450 + F(144000, P_XO, 16, 3, 25), 1451 + F(400000, P_XO, 12, 1, 4), 1452 + F(20000000, P_GPLL0_DIV2, 5, 1, 4), 1453 + F(25000000, P_GPLL0_DIV2, 16, 0, 0), 1454 + F(50000000, P_GPLL0, 16, 0, 0), 1455 + F(100000000, P_GPLL0, 8, 0, 0), 1456 + F(177770000, P_GPLL0, 4.5, 0, 0), 1457 + F(192000000, P_GPLL4, 6, 0, 0), 1458 + F(384000000, P_GPLL4, 3, 0, 0), 1459 + { } 1460 + }; 1461 + 1462 + static struct clk_rcg2 sdcc1_apps_clk_src = { 1463 + .cmd_rcgr = 0x42004, 1464 + .hid_width = 5, 1465 + .mnd_width = 8, 1466 + .freq_tbl = ftbl_sdcc1_apps_clk_src, 1467 + .parent_map = gcc_sdcc_apps_map, 1468 + .clkr.hw.init = &(struct clk_init_data) { 1469 + .name = "sdcc1_apps_clk_src", 1470 + .parent_data = gcc_sdcc_apss_data, 1471 + .num_parents = ARRAY_SIZE(gcc_sdcc_apss_data), 1472 + .ops = &clk_rcg2_floor_ops, 1473 + } 1474 + }; 1475 + 1476 + static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = { 1477 + F(144000, P_XO, 16, 3, 25), 1478 + F(400000, P_XO, 12, 1, 4), 1479 + F(20000000, P_GPLL0_DIV2, 5, 1, 4), 1480 + F(25000000, P_GPLL0_DIV2, 16, 0, 0), 1481 + F(50000000, P_GPLL0, 16, 0, 0), 1482 + F(100000000, P_GPLL0, 8, 0, 0), 1483 + F(177770000, P_GPLL0, 4.5, 0, 0), 1484 + F(192000000, P_GPLL4, 6, 0, 0), 1485 + F(200000000, P_GPLL0, 4, 0, 0), 1486 + { } 1487 + }; 1488 + 1489 + static struct clk_rcg2 sdcc2_apps_clk_src = { 1490 + .cmd_rcgr = 0x43004, 1491 + .hid_width = 5, 1492 + .mnd_width = 8, 1493 + .freq_tbl = ftbl_sdcc2_apps_clk_src, 1494 + .parent_map = gcc_sdcc_apps_map, 1495 + .clkr.hw.init = &(struct clk_init_data) { 1496 + .name = "sdcc2_apps_clk_src", 1497 + .parent_data = gcc_sdcc_apss_data, 1498 + .num_parents = ARRAY_SIZE(gcc_sdcc_apss_data), 1499 + .ops = &clk_rcg2_floor_ops, 1500 + } 1501 + }; 1502 + 1503 + static const struct freq_tbl ftbl_usb30_master_clk_src[] = { 1504 + F(80000000, P_GPLL0_DIV2, 5, 0, 0), 1505 + F(100000000, P_GPLL0, 8, 0, 0), 1506 + F(133330000, P_GPLL0, 6, 0, 0), 1507 + { } 1508 + }; 1509 + 1510 + static struct clk_rcg2 usb30_master_clk_src = { 1511 + .cmd_rcgr = 0x3f00c, 1512 + .hid_width = 5, 1513 + .freq_tbl = ftbl_usb30_master_clk_src, 1514 + .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 1515 + .clkr.hw.init = &(struct clk_init_data) { 1516 + .name = "usb30_master_clk_src", 1517 + .parent_data = gcc_xo_gpll0_gpll0div2_data, 1518 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 1519 + .ops = &clk_rcg2_ops, 1520 + } 1521 + }; 1522 + 1523 + static const struct parent_map gcc_usb30_mock_utmi_map[] = { 1524 + { P_XO, 0 }, 1525 + { P_GPLL6, 1 }, 1526 + { P_GPLL6_DIV2, 2 }, 1527 + { P_GPLL0, 3 }, 1528 + { P_GPLL0_DIV2, 4 }, 1529 + }; 1530 + 1531 + static const struct clk_parent_data gcc_usb30_mock_utmi_data[] = { 1532 + { .fw_name = "xo" }, 1533 + { .hw = &gpll6.clkr.hw }, 1534 + { .hw = &gpll6_early_div.hw }, 1535 + { .hw = &gpll0.clkr.hw }, 1536 + { .hw = &gpll0_early_div.hw }, 1537 + }; 1538 + 1539 + static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = { 1540 + F(19200000, P_XO, 1, 0, 0), 1541 + F(60000000, P_GPLL6_DIV2, 9, 1, 1), 1542 + { } 1543 + }; 1544 + 1545 + static struct clk_rcg2 usb30_mock_utmi_clk_src = { 1546 + .cmd_rcgr = 0x3f020, 1547 + .hid_width = 5, 1548 + .mnd_width = 8, 1549 + .freq_tbl = ftbl_usb30_mock_utmi_clk_src, 1550 + .parent_map = gcc_usb30_mock_utmi_map, 1551 + .clkr.hw.init = &(struct clk_init_data) { 1552 + .name = "usb30_mock_utmi_clk_src", 1553 + .parent_data = gcc_usb30_mock_utmi_data, 1554 + .num_parents = ARRAY_SIZE(gcc_usb30_mock_utmi_data), 1555 + .ops = &clk_rcg2_ops, 1556 + } 1557 + }; 1558 + 1559 + static const struct parent_map gcc_usb3_aux_map[] = { 1560 + { P_XO, 0 }, 1561 + { P_SLEEP_CLK, 6 }, 1562 + }; 1563 + 1564 + static const struct clk_parent_data gcc_usb3_aux_data[] = { 1565 + { .fw_name = "xo" }, 1566 + { .fw_name = "sleep", .name = "sleep" }, 1567 + }; 1568 + 1569 + static const struct freq_tbl ftbl_usb3_aux_clk_src[] = { 1570 + F(19200000, P_XO, 1, 0, 0), 1571 + { } 1572 + }; 1573 + 1574 + static struct clk_rcg2 usb3_aux_clk_src = { 1575 + .cmd_rcgr = 0x3f05c, 1576 + .hid_width = 5, 1577 + .mnd_width = 8, 1578 + .freq_tbl = ftbl_usb3_aux_clk_src, 1579 + .parent_map = gcc_usb3_aux_map, 1580 + .clkr.hw.init = &(struct clk_init_data) { 1581 + .name = "usb3_aux_clk_src", 1582 + .parent_data = gcc_usb3_aux_data, 1583 + .num_parents = ARRAY_SIZE(gcc_usb3_aux_data), 1584 + .ops = &clk_rcg2_ops, 1585 + } 1586 + }; 1587 + 1588 + static const struct parent_map gcc_vcodec0_map[] = { 1589 + { P_XO, 0 }, 1590 + { P_GPLL0, 1 }, 1591 + { P_GPLL6, 2 }, 1592 + { P_GPLL2, 3 }, 1593 + { P_GPLL0_DIV2, 4 }, 1594 + }; 1595 + 1596 + static const struct clk_parent_data gcc_vcodec0_data[] = { 1597 + { .fw_name = "xo" }, 1598 + { .hw = &gpll0.clkr.hw }, 1599 + { .hw = &gpll6.clkr.hw }, 1600 + { .hw = &gpll2.clkr.hw }, 1601 + { .hw = &gpll0_early_div.hw }, 1602 + }; 1603 + 1604 + static const struct freq_tbl ftbl_vcodec0_clk_src[] = { 1605 + F(114290000, P_GPLL0_DIV2, 3.5, 0, 0), 1606 + F(228570000, P_GPLL0, 3.5, 0, 0), 1607 + F(310000000, P_GPLL2, 3, 0, 0), 1608 + F(360000000, P_GPLL6, 3, 0, 0), 1609 + F(400000000, P_GPLL0, 2, 0, 0), 1610 + F(465000000, P_GPLL2, 2, 0, 0), 1611 + F(540000000, P_GPLL6, 2, 0, 0), 1612 + { } 1613 + }; 1614 + 1615 + static struct clk_rcg2 vcodec0_clk_src = { 1616 + .cmd_rcgr = 0x4c000, 1617 + .hid_width = 5, 1618 + .freq_tbl = ftbl_vcodec0_clk_src, 1619 + .parent_map = gcc_vcodec0_map, 1620 + .clkr.hw.init = &(struct clk_init_data) { 1621 + .name = "vcodec0_clk_src", 1622 + .parent_data = gcc_vcodec0_data, 1623 + .num_parents = ARRAY_SIZE(gcc_vcodec0_data), 1624 + .ops = &clk_rcg2_ops, 1625 + } 1626 + }; 1627 + 1628 + static const struct parent_map gcc_vfe_map[] = { 1629 + { P_XO, 0 }, 1630 + { P_GPLL0, 1 }, 1631 + { P_GPLL6, 2 }, 1632 + { P_GPLL4, 3 }, 1633 + { P_GPLL2, 4 }, 1634 + { P_GPLL0_DIV2, 5 }, 1635 + }; 1636 + 1637 + static const struct clk_parent_data gcc_vfe_data[] = { 1638 + { .fw_name = "xo" }, 1639 + { .hw = &gpll0.clkr.hw }, 1640 + { .hw = &gpll6.clkr.hw }, 1641 + { .hw = &gpll4.clkr.hw }, 1642 + { .hw = &gpll2.clkr.hw }, 1643 + { .hw = &gpll0_early_div.hw }, 1644 + }; 1645 + 1646 + static const struct freq_tbl ftbl_vfe_clk_src[] = { 1647 + F(50000000, P_GPLL0_DIV2, 8, 0, 0), 1648 + F(100000000, P_GPLL0_DIV2, 4, 0, 0), 1649 + F(133330000, P_GPLL0, 6, 0, 0), 1650 + F(160000000, P_GPLL0, 5, 0, 0), 1651 + F(200000000, P_GPLL0, 4, 0, 0), 1652 + F(266670000, P_GPLL0, 3, 0, 0), 1653 + F(310000000, P_GPLL2, 3, 0, 0), 1654 + F(400000000, P_GPLL0, 2, 0, 0), 1655 + F(465000000, P_GPLL2, 2, 0, 0), 1656 + { } 1657 + }; 1658 + 1659 + static struct clk_rcg2 vfe0_clk_src = { 1660 + .cmd_rcgr = 0x58000, 1661 + .hid_width = 5, 1662 + .freq_tbl = ftbl_vfe_clk_src, 1663 + .parent_map = gcc_vfe_map, 1664 + .clkr.hw.init = &(struct clk_init_data) { 1665 + .name = "vfe0_clk_src", 1666 + .parent_data = gcc_vfe_data, 1667 + .num_parents = ARRAY_SIZE(gcc_vfe_data), 1668 + .ops = &clk_rcg2_ops, 1669 + } 1670 + }; 1671 + 1672 + static struct clk_rcg2 vfe1_clk_src = { 1673 + .cmd_rcgr = 0x58054, 1674 + .hid_width = 5, 1675 + .freq_tbl = ftbl_vfe_clk_src, 1676 + .parent_map = gcc_vfe_map, 1677 + .clkr.hw.init = &(struct clk_init_data) { 1678 + .name = "vfe1_clk_src", 1679 + .parent_data = gcc_vfe_data, 1680 + .num_parents = ARRAY_SIZE(gcc_vfe_data), 1681 + .ops = &clk_rcg2_ops, 1682 + } 1683 + }; 1684 + 1685 + static const struct parent_map gcc_vsync_map[] = { 1686 + { P_XO, 0 }, 1687 + { P_GPLL0, 2 }, 1688 + }; 1689 + 1690 + static const struct freq_tbl ftbl_vsync_clk_src[] = { 1691 + F(19200000, P_XO, 1, 0, 0), 1692 + { } 1693 + }; 1694 + 1695 + static struct clk_rcg2 vsync_clk_src = { 1696 + .cmd_rcgr = 0x4d02c, 1697 + .hid_width = 5, 1698 + .freq_tbl = ftbl_vsync_clk_src, 1699 + .parent_map = gcc_vsync_map, 1700 + .clkr.hw.init = &(struct clk_init_data) { 1701 + .name = "vsync_clk_src", 1702 + .parent_data = gcc_esc_vsync_data, 1703 + .num_parents = ARRAY_SIZE(gcc_esc_vsync_data), 1704 + .ops = &clk_rcg2_ops, 1705 + } 1706 + }; 1707 + 1708 + static struct clk_branch gcc_apc0_droop_detector_gpll0_clk = { 1709 + .halt_reg = 0x78004, 1710 + .halt_check = BRANCH_HALT, 1711 + .clkr = { 1712 + .enable_reg = 0x78004, 1713 + .enable_mask = BIT(0), 1714 + .hw.init = &(struct clk_init_data) { 1715 + .name = "gcc_apc0_droop_detector_gpll0_clk", 1716 + .parent_hws = (const struct clk_hw*[]){ 1717 + &apc0_droop_detector_clk_src.clkr.hw, 1718 + }, 1719 + .num_parents = 1, 1720 + .ops = &clk_branch2_ops, 1721 + .flags = CLK_SET_RATE_PARENT, 1722 + } 1723 + } 1724 + }; 1725 + 1726 + static struct clk_branch gcc_apc1_droop_detector_gpll0_clk = { 1727 + .halt_reg = 0x79004, 1728 + .halt_check = BRANCH_HALT, 1729 + .clkr = { 1730 + .enable_reg = 0x79004, 1731 + .enable_mask = BIT(0), 1732 + .hw.init = &(struct clk_init_data) { 1733 + .name = "gcc_apc1_droop_detector_gpll0_clk", 1734 + .parent_hws = (const struct clk_hw*[]){ 1735 + &apc1_droop_detector_clk_src.clkr.hw, 1736 + }, 1737 + .num_parents = 1, 1738 + .ops = &clk_branch2_ops, 1739 + .flags = CLK_SET_RATE_PARENT, 1740 + } 1741 + } 1742 + }; 1743 + 1744 + static struct clk_branch gcc_apss_ahb_clk = { 1745 + .halt_reg = 0x4601c, 1746 + .halt_check = BRANCH_HALT_VOTED, 1747 + .clkr = { 1748 + .enable_reg = 0x45004, 1749 + .enable_mask = BIT(14), 1750 + .hw.init = &(struct clk_init_data) { 1751 + .name = "gcc_apss_ahb_clk", 1752 + .parent_hws = (const struct clk_hw*[]){ 1753 + &apss_ahb_clk_src.clkr.hw, 1754 + }, 1755 + .num_parents = 1, 1756 + .ops = &clk_branch2_ops, 1757 + .flags = CLK_SET_RATE_PARENT, 1758 + } 1759 + } 1760 + }; 1761 + 1762 + static struct clk_branch gcc_apss_axi_clk = { 1763 + .halt_reg = 0x46020, 1764 + .halt_check = BRANCH_HALT_VOTED, 1765 + .clkr = { 1766 + .enable_reg = 0x45004, 1767 + .enable_mask = BIT(13), 1768 + .hw.init = &(struct clk_init_data) { 1769 + .name = "gcc_apss_axi_clk", 1770 + .ops = &clk_branch2_ops, 1771 + } 1772 + } 1773 + }; 1774 + 1775 + static struct clk_branch gcc_apss_tcu_async_clk = { 1776 + .halt_reg = 0x12018, 1777 + .halt_check = BRANCH_HALT_VOTED, 1778 + .clkr = { 1779 + .enable_reg = 0x4500c, 1780 + .enable_mask = BIT(1), 1781 + .hw.init = &(struct clk_init_data) { 1782 + .name = "gcc_apss_tcu_async_clk", 1783 + .ops = &clk_branch2_ops, 1784 + } 1785 + } 1786 + }; 1787 + 1788 + static struct clk_branch gcc_bimc_gfx_clk = { 1789 + .halt_reg = 0x59034, 1790 + .halt_check = BRANCH_HALT, 1791 + .clkr = { 1792 + .enable_reg = 0x59034, 1793 + .enable_mask = BIT(0), 1794 + .hw.init = &(struct clk_init_data) { 1795 + .name = "gcc_bimc_gfx_clk", 1796 + .ops = &clk_branch2_ops, 1797 + } 1798 + } 1799 + }; 1800 + 1801 + static struct clk_branch gcc_bimc_gpu_clk = { 1802 + .halt_reg = 0x59030, 1803 + .halt_check = BRANCH_HALT, 1804 + .clkr = { 1805 + .enable_reg = 0x59030, 1806 + .enable_mask = BIT(0), 1807 + .hw.init = &(struct clk_init_data) { 1808 + .name = "gcc_bimc_gpu_clk", 1809 + .ops = &clk_branch2_ops, 1810 + } 1811 + } 1812 + }; 1813 + 1814 + static struct clk_branch gcc_blsp1_ahb_clk = { 1815 + .halt_reg = 0x01008, 1816 + .halt_check = BRANCH_HALT_VOTED, 1817 + .clkr = { 1818 + .enable_reg = 0x45004, 1819 + .enable_mask = BIT(10), 1820 + .hw.init = &(struct clk_init_data) { 1821 + .name = "gcc_blsp1_ahb_clk", 1822 + .ops = &clk_branch2_ops, 1823 + } 1824 + } 1825 + }; 1826 + 1827 + static struct clk_branch gcc_blsp2_ahb_clk = { 1828 + .halt_reg = 0x0b008, 1829 + .halt_check = BRANCH_HALT_VOTED, 1830 + .clkr = { 1831 + .enable_reg = 0x45004, 1832 + .enable_mask = BIT(20), 1833 + .hw.init = &(struct clk_init_data) { 1834 + .name = "gcc_blsp2_ahb_clk", 1835 + .ops = &clk_branch2_ops, 1836 + } 1837 + } 1838 + }; 1839 + 1840 + static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = { 1841 + .halt_reg = 0x02008, 1842 + .halt_check = BRANCH_HALT, 1843 + .clkr = { 1844 + .enable_reg = 0x02008, 1845 + .enable_mask = BIT(0), 1846 + .hw.init = &(struct clk_init_data) { 1847 + .name = "gcc_blsp1_qup1_i2c_apps_clk", 1848 + .parent_hws = (const struct clk_hw*[]){ 1849 + &blsp1_qup1_i2c_apps_clk_src.clkr.hw, 1850 + }, 1851 + .num_parents = 1, 1852 + .ops = &clk_branch2_ops, 1853 + .flags = CLK_SET_RATE_PARENT, 1854 + } 1855 + } 1856 + }; 1857 + 1858 + static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = { 1859 + .halt_reg = 0x03010, 1860 + .halt_check = BRANCH_HALT, 1861 + .clkr = { 1862 + .enable_reg = 0x03010, 1863 + .enable_mask = BIT(0), 1864 + .hw.init = &(struct clk_init_data) { 1865 + .name = "gcc_blsp1_qup2_i2c_apps_clk", 1866 + .parent_hws = (const struct clk_hw*[]){ 1867 + &blsp1_qup2_i2c_apps_clk_src.clkr.hw, 1868 + }, 1869 + .num_parents = 1, 1870 + .ops = &clk_branch2_ops, 1871 + .flags = CLK_SET_RATE_PARENT, 1872 + } 1873 + } 1874 + }; 1875 + 1876 + static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = { 1877 + .halt_reg = 0x04020, 1878 + .halt_check = BRANCH_HALT, 1879 + .clkr = { 1880 + .enable_reg = 0x04020, 1881 + .enable_mask = BIT(0), 1882 + .hw.init = &(struct clk_init_data) { 1883 + .name = "gcc_blsp1_qup3_i2c_apps_clk", 1884 + .parent_hws = (const struct clk_hw*[]){ 1885 + &blsp1_qup3_i2c_apps_clk_src.clkr.hw, 1886 + }, 1887 + .num_parents = 1, 1888 + .ops = &clk_branch2_ops, 1889 + .flags = CLK_SET_RATE_PARENT, 1890 + } 1891 + } 1892 + }; 1893 + 1894 + static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = { 1895 + .halt_reg = 0x05020, 1896 + .halt_check = BRANCH_HALT, 1897 + .clkr = { 1898 + .enable_reg = 0x05020, 1899 + .enable_mask = BIT(0), 1900 + .hw.init = &(struct clk_init_data) { 1901 + .name = "gcc_blsp1_qup4_i2c_apps_clk", 1902 + .parent_hws = (const struct clk_hw*[]){ 1903 + &blsp1_qup4_i2c_apps_clk_src.clkr.hw, 1904 + }, 1905 + .num_parents = 1, 1906 + .ops = &clk_branch2_ops, 1907 + .flags = CLK_SET_RATE_PARENT, 1908 + } 1909 + } 1910 + }; 1911 + 1912 + static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = { 1913 + .halt_reg = 0x0c008, 1914 + .halt_check = BRANCH_HALT, 1915 + .clkr = { 1916 + .enable_reg = 0x0c008, 1917 + .enable_mask = BIT(0), 1918 + .hw.init = &(struct clk_init_data) { 1919 + .name = "gcc_blsp2_qup1_i2c_apps_clk", 1920 + .parent_hws = (const struct clk_hw*[]){ 1921 + &blsp2_qup1_i2c_apps_clk_src.clkr.hw, 1922 + }, 1923 + .num_parents = 1, 1924 + .ops = &clk_branch2_ops, 1925 + .flags = CLK_SET_RATE_PARENT, 1926 + } 1927 + } 1928 + }; 1929 + 1930 + static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = { 1931 + .halt_reg = 0x0d010, 1932 + .halt_check = BRANCH_HALT, 1933 + .clkr = { 1934 + .enable_reg = 0x0d010, 1935 + .enable_mask = BIT(0), 1936 + .hw.init = &(struct clk_init_data) { 1937 + .name = "gcc_blsp2_qup2_i2c_apps_clk", 1938 + .parent_hws = (const struct clk_hw*[]){ 1939 + &blsp2_qup2_i2c_apps_clk_src.clkr.hw, 1940 + }, 1941 + .num_parents = 1, 1942 + .ops = &clk_branch2_ops, 1943 + .flags = CLK_SET_RATE_PARENT, 1944 + } 1945 + } 1946 + }; 1947 + 1948 + static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = { 1949 + .halt_reg = 0x0f020, 1950 + .halt_check = BRANCH_HALT, 1951 + .clkr = { 1952 + .enable_reg = 0x0f020, 1953 + .enable_mask = BIT(0), 1954 + .hw.init = &(struct clk_init_data) { 1955 + .name = "gcc_blsp2_qup3_i2c_apps_clk", 1956 + .parent_hws = (const struct clk_hw*[]){ 1957 + &blsp2_qup3_i2c_apps_clk_src.clkr.hw, 1958 + }, 1959 + .num_parents = 1, 1960 + .ops = &clk_branch2_ops, 1961 + .flags = CLK_SET_RATE_PARENT, 1962 + } 1963 + } 1964 + }; 1965 + 1966 + static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = { 1967 + .halt_reg = 0x18020, 1968 + .halt_check = BRANCH_HALT, 1969 + .clkr = { 1970 + .enable_reg = 0x18020, 1971 + .enable_mask = BIT(0), 1972 + .hw.init = &(struct clk_init_data) { 1973 + .name = "gcc_blsp2_qup4_i2c_apps_clk", 1974 + .parent_hws = (const struct clk_hw*[]){ 1975 + &blsp2_qup4_i2c_apps_clk_src.clkr.hw, 1976 + }, 1977 + .num_parents = 1, 1978 + .ops = &clk_branch2_ops, 1979 + .flags = CLK_SET_RATE_PARENT, 1980 + } 1981 + } 1982 + }; 1983 + 1984 + static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = { 1985 + .halt_reg = 0x02004, 1986 + .halt_check = BRANCH_HALT, 1987 + .clkr = { 1988 + .enable_reg = 0x02004, 1989 + .enable_mask = BIT(0), 1990 + .hw.init = &(struct clk_init_data) { 1991 + .name = "gcc_blsp1_qup1_spi_apps_clk", 1992 + .parent_hws = (const struct clk_hw*[]){ 1993 + &blsp1_qup1_spi_apps_clk_src.clkr.hw, 1994 + }, 1995 + .num_parents = 1, 1996 + .ops = &clk_branch2_ops, 1997 + .flags = CLK_SET_RATE_PARENT, 1998 + } 1999 + } 2000 + }; 2001 + 2002 + static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = { 2003 + .halt_reg = 0x0300c, 2004 + .halt_check = BRANCH_HALT, 2005 + .clkr = { 2006 + .enable_reg = 0x0300c, 2007 + .enable_mask = BIT(0), 2008 + .hw.init = &(struct clk_init_data) { 2009 + .name = "gcc_blsp1_qup2_spi_apps_clk", 2010 + .parent_hws = (const struct clk_hw*[]){ 2011 + &blsp1_qup2_spi_apps_clk_src.clkr.hw, 2012 + }, 2013 + .num_parents = 1, 2014 + .ops = &clk_branch2_ops, 2015 + .flags = CLK_SET_RATE_PARENT, 2016 + } 2017 + } 2018 + }; 2019 + 2020 + static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = { 2021 + .halt_reg = 0x0401c, 2022 + .halt_check = BRANCH_HALT, 2023 + .clkr = { 2024 + .enable_reg = 0x0401c, 2025 + .enable_mask = BIT(0), 2026 + .hw.init = &(struct clk_init_data) { 2027 + .name = "gcc_blsp1_qup3_spi_apps_clk", 2028 + .parent_hws = (const struct clk_hw*[]){ 2029 + &blsp1_qup3_spi_apps_clk_src.clkr.hw, 2030 + }, 2031 + .num_parents = 1, 2032 + .ops = &clk_branch2_ops, 2033 + .flags = CLK_SET_RATE_PARENT, 2034 + } 2035 + } 2036 + }; 2037 + 2038 + static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = { 2039 + .halt_reg = 0x0501c, 2040 + .halt_check = BRANCH_HALT, 2041 + .clkr = { 2042 + .enable_reg = 0x0501c, 2043 + .enable_mask = BIT(0), 2044 + .hw.init = &(struct clk_init_data) { 2045 + .name = "gcc_blsp1_qup4_spi_apps_clk", 2046 + .parent_hws = (const struct clk_hw*[]){ 2047 + &blsp1_qup4_spi_apps_clk_src.clkr.hw, 2048 + }, 2049 + .num_parents = 1, 2050 + .ops = &clk_branch2_ops, 2051 + .flags = CLK_SET_RATE_PARENT, 2052 + } 2053 + } 2054 + }; 2055 + 2056 + static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = { 2057 + .halt_reg = 0x0c004, 2058 + .halt_check = BRANCH_HALT, 2059 + .clkr = { 2060 + .enable_reg = 0x0c004, 2061 + .enable_mask = BIT(0), 2062 + .hw.init = &(struct clk_init_data) { 2063 + .name = "gcc_blsp2_qup1_spi_apps_clk", 2064 + .parent_hws = (const struct clk_hw*[]){ 2065 + &blsp2_qup1_spi_apps_clk_src.clkr.hw, 2066 + }, 2067 + .num_parents = 1, 2068 + .ops = &clk_branch2_ops, 2069 + .flags = CLK_SET_RATE_PARENT, 2070 + } 2071 + } 2072 + }; 2073 + 2074 + static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = { 2075 + .halt_reg = 0x0d00c, 2076 + .halt_check = BRANCH_HALT, 2077 + .clkr = { 2078 + .enable_reg = 0x0d00c, 2079 + .enable_mask = BIT(0), 2080 + .hw.init = &(struct clk_init_data) { 2081 + .name = "gcc_blsp2_qup2_spi_apps_clk", 2082 + .parent_hws = (const struct clk_hw*[]){ 2083 + &blsp2_qup2_spi_apps_clk_src.clkr.hw, 2084 + }, 2085 + .num_parents = 1, 2086 + .ops = &clk_branch2_ops, 2087 + .flags = CLK_SET_RATE_PARENT, 2088 + } 2089 + } 2090 + }; 2091 + 2092 + static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = { 2093 + .halt_reg = 0x0f01c, 2094 + .halt_check = BRANCH_HALT, 2095 + .clkr = { 2096 + .enable_reg = 0x0f01c, 2097 + .enable_mask = BIT(0), 2098 + .hw.init = &(struct clk_init_data) { 2099 + .name = "gcc_blsp2_qup3_spi_apps_clk", 2100 + .parent_hws = (const struct clk_hw*[]){ 2101 + &blsp2_qup3_spi_apps_clk_src.clkr.hw, 2102 + }, 2103 + .num_parents = 1, 2104 + .ops = &clk_branch2_ops, 2105 + .flags = CLK_SET_RATE_PARENT, 2106 + } 2107 + } 2108 + }; 2109 + 2110 + static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = { 2111 + .halt_reg = 0x1801c, 2112 + .halt_check = BRANCH_HALT, 2113 + .clkr = { 2114 + .enable_reg = 0x1801c, 2115 + .enable_mask = BIT(0), 2116 + .hw.init = &(struct clk_init_data) { 2117 + .name = "gcc_blsp2_qup4_spi_apps_clk", 2118 + .parent_hws = (const struct clk_hw*[]){ 2119 + &blsp2_qup4_spi_apps_clk_src.clkr.hw, 2120 + }, 2121 + .num_parents = 1, 2122 + .ops = &clk_branch2_ops, 2123 + .flags = CLK_SET_RATE_PARENT, 2124 + } 2125 + } 2126 + }; 2127 + 2128 + static struct clk_branch gcc_blsp1_uart1_apps_clk = { 2129 + .halt_reg = 0x0203c, 2130 + .halt_check = BRANCH_HALT, 2131 + .clkr = { 2132 + .enable_reg = 0x0203c, 2133 + .enable_mask = BIT(0), 2134 + .hw.init = &(struct clk_init_data) { 2135 + .name = "gcc_blsp1_uart1_apps_clk", 2136 + .parent_hws = (const struct clk_hw*[]){ 2137 + &blsp1_uart1_apps_clk_src.clkr.hw, 2138 + }, 2139 + .num_parents = 1, 2140 + .ops = &clk_branch2_ops, 2141 + .flags = CLK_SET_RATE_PARENT, 2142 + } 2143 + } 2144 + }; 2145 + 2146 + static struct clk_branch gcc_blsp1_uart2_apps_clk = { 2147 + .halt_reg = 0x0302c, 2148 + .halt_check = BRANCH_HALT, 2149 + .clkr = { 2150 + .enable_reg = 0x0302c, 2151 + .enable_mask = BIT(0), 2152 + .hw.init = &(struct clk_init_data) { 2153 + .name = "gcc_blsp1_uart2_apps_clk", 2154 + .parent_hws = (const struct clk_hw*[]){ 2155 + &blsp1_uart2_apps_clk_src.clkr.hw, 2156 + }, 2157 + .num_parents = 1, 2158 + .ops = &clk_branch2_ops, 2159 + .flags = CLK_SET_RATE_PARENT, 2160 + } 2161 + } 2162 + }; 2163 + 2164 + static struct clk_branch gcc_blsp2_uart1_apps_clk = { 2165 + .halt_reg = 0x0c03c, 2166 + .halt_check = BRANCH_HALT, 2167 + .clkr = { 2168 + .enable_reg = 0x0c03c, 2169 + .enable_mask = BIT(0), 2170 + .hw.init = &(struct clk_init_data) { 2171 + .name = "gcc_blsp2_uart1_apps_clk", 2172 + .parent_hws = (const struct clk_hw*[]){ 2173 + &blsp2_uart1_apps_clk_src.clkr.hw, 2174 + }, 2175 + .num_parents = 1, 2176 + .ops = &clk_branch2_ops, 2177 + .flags = CLK_SET_RATE_PARENT, 2178 + } 2179 + } 2180 + }; 2181 + 2182 + static struct clk_branch gcc_blsp2_uart2_apps_clk = { 2183 + .halt_reg = 0x0d02c, 2184 + .halt_check = BRANCH_HALT, 2185 + .clkr = { 2186 + .enable_reg = 0x0d02c, 2187 + .enable_mask = BIT(0), 2188 + .hw.init = &(struct clk_init_data) { 2189 + .name = "gcc_blsp2_uart2_apps_clk", 2190 + .parent_hws = (const struct clk_hw*[]){ 2191 + &blsp2_uart2_apps_clk_src.clkr.hw, 2192 + }, 2193 + .num_parents = 1, 2194 + .ops = &clk_branch2_ops, 2195 + .flags = CLK_SET_RATE_PARENT, 2196 + } 2197 + } 2198 + }; 2199 + 2200 + static struct clk_branch gcc_boot_rom_ahb_clk = { 2201 + .halt_reg = 0x1300c, 2202 + .halt_check = BRANCH_HALT_VOTED, 2203 + .clkr = { 2204 + .enable_reg = 0x45004, 2205 + .enable_mask = BIT(7), 2206 + .hw.init = &(struct clk_init_data) { 2207 + .name = "gcc_boot_rom_ahb_clk", 2208 + .ops = &clk_branch2_ops, 2209 + } 2210 + } 2211 + }; 2212 + 2213 + static struct clk_branch gcc_camss_ahb_clk = { 2214 + .halt_reg = 0x56004, 2215 + .halt_check = BRANCH_HALT, 2216 + .clkr = { 2217 + .enable_reg = 0x56004, 2218 + .enable_mask = BIT(0), 2219 + .hw.init = &(struct clk_init_data) { 2220 + .name = "gcc_camss_ahb_clk", 2221 + .ops = &clk_branch2_ops, 2222 + } 2223 + } 2224 + }; 2225 + 2226 + static struct clk_branch gcc_camss_cci_ahb_clk = { 2227 + .halt_reg = 0x5101c, 2228 + .halt_check = BRANCH_HALT, 2229 + .clkr = { 2230 + .enable_reg = 0x5101c, 2231 + .enable_mask = BIT(0), 2232 + .hw.init = &(struct clk_init_data) { 2233 + .name = "gcc_camss_cci_ahb_clk", 2234 + .parent_hws = (const struct clk_hw*[]){ 2235 + &camss_top_ahb_clk_src.clkr.hw, 2236 + }, 2237 + .num_parents = 1, 2238 + .ops = &clk_branch2_ops, 2239 + .flags = CLK_SET_RATE_PARENT, 2240 + } 2241 + } 2242 + }; 2243 + 2244 + static struct clk_branch gcc_camss_cci_clk = { 2245 + .halt_reg = 0x51018, 2246 + .halt_check = BRANCH_HALT, 2247 + .clkr = { 2248 + .enable_reg = 0x51018, 2249 + .enable_mask = BIT(0), 2250 + .hw.init = &(struct clk_init_data) { 2251 + .name = "gcc_camss_cci_clk", 2252 + .parent_hws = (const struct clk_hw*[]){ 2253 + &cci_clk_src.clkr.hw, 2254 + }, 2255 + .num_parents = 1, 2256 + .ops = &clk_branch2_ops, 2257 + .flags = CLK_SET_RATE_PARENT, 2258 + } 2259 + } 2260 + }; 2261 + 2262 + static struct clk_branch gcc_camss_cpp_ahb_clk = { 2263 + .halt_reg = 0x58040, 2264 + .halt_check = BRANCH_HALT, 2265 + .clkr = { 2266 + .enable_reg = 0x58040, 2267 + .enable_mask = BIT(0), 2268 + .hw.init = &(struct clk_init_data) { 2269 + .name = "gcc_camss_cpp_ahb_clk", 2270 + .parent_hws = (const struct clk_hw*[]){ 2271 + &camss_top_ahb_clk_src.clkr.hw, 2272 + }, 2273 + .num_parents = 1, 2274 + .ops = &clk_branch2_ops, 2275 + .flags = CLK_SET_RATE_PARENT, 2276 + } 2277 + } 2278 + }; 2279 + 2280 + static struct clk_branch gcc_camss_cpp_axi_clk = { 2281 + .halt_reg = 0x58064, 2282 + .halt_check = BRANCH_HALT, 2283 + .clkr = { 2284 + .enable_reg = 0x58064, 2285 + .enable_mask = BIT(0), 2286 + .hw.init = &(struct clk_init_data) { 2287 + .name = "gcc_camss_cpp_axi_clk", 2288 + .ops = &clk_branch2_ops, 2289 + } 2290 + } 2291 + }; 2292 + 2293 + static struct clk_branch gcc_camss_cpp_clk = { 2294 + .halt_reg = 0x5803c, 2295 + .halt_check = BRANCH_HALT, 2296 + .clkr = { 2297 + .enable_reg = 0x5803c, 2298 + .enable_mask = BIT(0), 2299 + .hw.init = &(struct clk_init_data) { 2300 + .name = "gcc_camss_cpp_clk", 2301 + .parent_hws = (const struct clk_hw*[]){ 2302 + &cpp_clk_src.clkr.hw, 2303 + }, 2304 + .num_parents = 1, 2305 + .ops = &clk_branch2_ops, 2306 + .flags = CLK_SET_RATE_PARENT, 2307 + } 2308 + } 2309 + }; 2310 + 2311 + static struct clk_branch gcc_camss_csi0_ahb_clk = { 2312 + .halt_reg = 0x4e040, 2313 + .halt_check = BRANCH_HALT, 2314 + .clkr = { 2315 + .enable_reg = 0x4e040, 2316 + .enable_mask = BIT(0), 2317 + .hw.init = &(struct clk_init_data) { 2318 + .name = "gcc_camss_csi0_ahb_clk", 2319 + .parent_hws = (const struct clk_hw*[]){ 2320 + &camss_top_ahb_clk_src.clkr.hw, 2321 + }, 2322 + .num_parents = 1, 2323 + .ops = &clk_branch2_ops, 2324 + .flags = CLK_SET_RATE_PARENT, 2325 + } 2326 + } 2327 + }; 2328 + 2329 + static struct clk_branch gcc_camss_csi1_ahb_clk = { 2330 + .halt_reg = 0x4f040, 2331 + .halt_check = BRANCH_HALT, 2332 + .clkr = { 2333 + .enable_reg = 0x4f040, 2334 + .enable_mask = BIT(0), 2335 + .hw.init = &(struct clk_init_data) { 2336 + .name = "gcc_camss_csi1_ahb_clk", 2337 + .parent_hws = (const struct clk_hw*[]){ 2338 + &camss_top_ahb_clk_src.clkr.hw, 2339 + }, 2340 + .num_parents = 1, 2341 + .ops = &clk_branch2_ops, 2342 + .flags = CLK_SET_RATE_PARENT, 2343 + } 2344 + } 2345 + }; 2346 + 2347 + static struct clk_branch gcc_camss_csi2_ahb_clk = { 2348 + .halt_reg = 0x3c040, 2349 + .halt_check = BRANCH_HALT, 2350 + .clkr = { 2351 + .enable_reg = 0x3c040, 2352 + .enable_mask = BIT(0), 2353 + .hw.init = &(struct clk_init_data) { 2354 + .name = "gcc_camss_csi2_ahb_clk", 2355 + .parent_hws = (const struct clk_hw*[]){ 2356 + &camss_top_ahb_clk_src.clkr.hw, 2357 + }, 2358 + .num_parents = 1, 2359 + .ops = &clk_branch2_ops, 2360 + .flags = CLK_SET_RATE_PARENT, 2361 + } 2362 + } 2363 + }; 2364 + 2365 + static struct clk_branch gcc_camss_csi0_clk = { 2366 + .halt_reg = 0x4e03c, 2367 + .halt_check = BRANCH_HALT, 2368 + .clkr = { 2369 + .enable_reg = 0x4e03c, 2370 + .enable_mask = BIT(0), 2371 + .hw.init = &(struct clk_init_data) { 2372 + .name = "gcc_camss_csi0_clk", 2373 + .parent_hws = (const struct clk_hw*[]){ 2374 + &csi0_clk_src.clkr.hw, 2375 + }, 2376 + .num_parents = 1, 2377 + .ops = &clk_branch2_ops, 2378 + .flags = CLK_SET_RATE_PARENT, 2379 + } 2380 + } 2381 + }; 2382 + 2383 + static struct clk_branch gcc_camss_csi1_clk = { 2384 + .halt_reg = 0x4f03c, 2385 + .halt_check = BRANCH_HALT, 2386 + .clkr = { 2387 + .enable_reg = 0x4f03c, 2388 + .enable_mask = BIT(0), 2389 + .hw.init = &(struct clk_init_data) { 2390 + .name = "gcc_camss_csi1_clk", 2391 + .parent_hws = (const struct clk_hw*[]){ 2392 + &csi1_clk_src.clkr.hw, 2393 + }, 2394 + .num_parents = 1, 2395 + .ops = &clk_branch2_ops, 2396 + .flags = CLK_SET_RATE_PARENT, 2397 + } 2398 + } 2399 + }; 2400 + 2401 + static struct clk_branch gcc_camss_csi2_clk = { 2402 + .halt_reg = 0x3c03c, 2403 + .halt_check = BRANCH_HALT, 2404 + .clkr = { 2405 + .enable_reg = 0x3c03c, 2406 + .enable_mask = BIT(0), 2407 + .hw.init = &(struct clk_init_data) { 2408 + .name = "gcc_camss_csi2_clk", 2409 + .parent_hws = (const struct clk_hw*[]){ 2410 + &csi2_clk_src.clkr.hw, 2411 + }, 2412 + .num_parents = 1, 2413 + .ops = &clk_branch2_ops, 2414 + .flags = CLK_SET_RATE_PARENT, 2415 + } 2416 + } 2417 + }; 2418 + 2419 + static struct clk_branch gcc_camss_csi0_csiphy_3p_clk = { 2420 + .halt_reg = 0x58090, 2421 + .halt_check = BRANCH_HALT, 2422 + .clkr = { 2423 + .enable_reg = 0x58090, 2424 + .enable_mask = BIT(0), 2425 + .hw.init = &(struct clk_init_data) { 2426 + .name = "gcc_camss_csi0_csiphy_3p_clk", 2427 + .parent_hws = (const struct clk_hw*[]){ 2428 + &csi0p_clk_src.clkr.hw, 2429 + }, 2430 + .num_parents = 1, 2431 + .ops = &clk_branch2_ops, 2432 + .flags = CLK_SET_RATE_PARENT, 2433 + } 2434 + } 2435 + }; 2436 + 2437 + static struct clk_branch gcc_camss_csi1_csiphy_3p_clk = { 2438 + .halt_reg = 0x580a0, 2439 + .halt_check = BRANCH_HALT, 2440 + .clkr = { 2441 + .enable_reg = 0x580a0, 2442 + .enable_mask = BIT(0), 2443 + .hw.init = &(struct clk_init_data) { 2444 + .name = "gcc_camss_csi1_csiphy_3p_clk", 2445 + .parent_hws = (const struct clk_hw*[]){ 2446 + &csi1p_clk_src.clkr.hw, 2447 + }, 2448 + .num_parents = 1, 2449 + .ops = &clk_branch2_ops, 2450 + .flags = CLK_SET_RATE_PARENT, 2451 + } 2452 + } 2453 + }; 2454 + 2455 + static struct clk_branch gcc_camss_csi2_csiphy_3p_clk = { 2456 + .halt_reg = 0x580b0, 2457 + .halt_check = BRANCH_HALT, 2458 + .clkr = { 2459 + .enable_reg = 0x580b0, 2460 + .enable_mask = BIT(0), 2461 + .hw.init = &(struct clk_init_data) { 2462 + .name = "gcc_camss_csi2_csiphy_3p_clk", 2463 + .parent_hws = (const struct clk_hw*[]){ 2464 + &csi2p_clk_src.clkr.hw, 2465 + }, 2466 + .num_parents = 1, 2467 + .ops = &clk_branch2_ops, 2468 + .flags = CLK_SET_RATE_PARENT, 2469 + } 2470 + } 2471 + }; 2472 + 2473 + static struct clk_branch gcc_camss_csi0phy_clk = { 2474 + .halt_reg = 0x4e048, 2475 + .halt_check = BRANCH_HALT, 2476 + .clkr = { 2477 + .enable_reg = 0x4e048, 2478 + .enable_mask = BIT(0), 2479 + .hw.init = &(struct clk_init_data) { 2480 + .name = "gcc_camss_csi0phy_clk", 2481 + .parent_hws = (const struct clk_hw*[]){ 2482 + &csi0_clk_src.clkr.hw, 2483 + }, 2484 + .num_parents = 1, 2485 + .ops = &clk_branch2_ops, 2486 + .flags = CLK_SET_RATE_PARENT, 2487 + } 2488 + } 2489 + }; 2490 + 2491 + static struct clk_branch gcc_camss_csi1phy_clk = { 2492 + .halt_reg = 0x4f048, 2493 + .halt_check = BRANCH_HALT, 2494 + .clkr = { 2495 + .enable_reg = 0x4f048, 2496 + .enable_mask = BIT(0), 2497 + .hw.init = &(struct clk_init_data) { 2498 + .name = "gcc_camss_csi1phy_clk", 2499 + .parent_hws = (const struct clk_hw*[]){ 2500 + &csi1_clk_src.clkr.hw, 2501 + }, 2502 + .num_parents = 1, 2503 + .ops = &clk_branch2_ops, 2504 + .flags = CLK_SET_RATE_PARENT, 2505 + } 2506 + } 2507 + }; 2508 + 2509 + static struct clk_branch gcc_camss_csi2phy_clk = { 2510 + .halt_reg = 0x3c048, 2511 + .halt_check = BRANCH_HALT, 2512 + .clkr = { 2513 + .enable_reg = 0x3c048, 2514 + .enable_mask = BIT(0), 2515 + .hw.init = &(struct clk_init_data) { 2516 + .name = "gcc_camss_csi2phy_clk", 2517 + .parent_hws = (const struct clk_hw*[]){ 2518 + &csi2_clk_src.clkr.hw, 2519 + }, 2520 + .num_parents = 1, 2521 + .ops = &clk_branch2_ops, 2522 + .flags = CLK_SET_RATE_PARENT, 2523 + } 2524 + } 2525 + }; 2526 + 2527 + static struct clk_branch gcc_camss_csi0phytimer_clk = { 2528 + .halt_reg = 0x4e01c, 2529 + .halt_check = BRANCH_HALT, 2530 + .clkr = { 2531 + .enable_reg = 0x4e01c, 2532 + .enable_mask = BIT(0), 2533 + .hw.init = &(struct clk_init_data) { 2534 + .name = "gcc_camss_csi0phytimer_clk", 2535 + .parent_hws = (const struct clk_hw*[]){ 2536 + &csi0phytimer_clk_src.clkr.hw, 2537 + }, 2538 + .num_parents = 1, 2539 + .ops = &clk_branch2_ops, 2540 + .flags = CLK_SET_RATE_PARENT, 2541 + } 2542 + } 2543 + }; 2544 + 2545 + static struct clk_branch gcc_camss_csi1phytimer_clk = { 2546 + .halt_reg = 0x4f01c, 2547 + .halt_check = BRANCH_HALT, 2548 + .clkr = { 2549 + .enable_reg = 0x4f01c, 2550 + .enable_mask = BIT(0), 2551 + .hw.init = &(struct clk_init_data) { 2552 + .name = "gcc_camss_csi1phytimer_clk", 2553 + .parent_hws = (const struct clk_hw*[]){ 2554 + &csi1phytimer_clk_src.clkr.hw, 2555 + }, 2556 + .num_parents = 1, 2557 + .ops = &clk_branch2_ops, 2558 + .flags = CLK_SET_RATE_PARENT, 2559 + } 2560 + } 2561 + }; 2562 + 2563 + static struct clk_branch gcc_camss_csi2phytimer_clk = { 2564 + .halt_reg = 0x4f068, 2565 + .halt_check = BRANCH_HALT, 2566 + .clkr = { 2567 + .enable_reg = 0x4f068, 2568 + .enable_mask = BIT(0), 2569 + .hw.init = &(struct clk_init_data) { 2570 + .name = "gcc_camss_csi2phytimer_clk", 2571 + .parent_hws = (const struct clk_hw*[]){ 2572 + &csi2phytimer_clk_src.clkr.hw, 2573 + }, 2574 + .num_parents = 1, 2575 + .ops = &clk_branch2_ops, 2576 + .flags = CLK_SET_RATE_PARENT, 2577 + } 2578 + } 2579 + }; 2580 + 2581 + static struct clk_branch gcc_camss_csi0pix_clk = { 2582 + .halt_reg = 0x4e058, 2583 + .halt_check = BRANCH_HALT, 2584 + .clkr = { 2585 + .enable_reg = 0x4e058, 2586 + .enable_mask = BIT(0), 2587 + .hw.init = &(struct clk_init_data) { 2588 + .name = "gcc_camss_csi0pix_clk", 2589 + .parent_hws = (const struct clk_hw*[]){ 2590 + &csi0_clk_src.clkr.hw, 2591 + }, 2592 + .num_parents = 1, 2593 + .ops = &clk_branch2_ops, 2594 + .flags = CLK_SET_RATE_PARENT, 2595 + } 2596 + } 2597 + }; 2598 + 2599 + static struct clk_branch gcc_camss_csi1pix_clk = { 2600 + .halt_reg = 0x4f058, 2601 + .halt_check = BRANCH_HALT, 2602 + .clkr = { 2603 + .enable_reg = 0x4f058, 2604 + .enable_mask = BIT(0), 2605 + .hw.init = &(struct clk_init_data) { 2606 + .name = "gcc_camss_csi1pix_clk", 2607 + .parent_hws = (const struct clk_hw*[]){ 2608 + &csi1_clk_src.clkr.hw, 2609 + }, 2610 + .num_parents = 1, 2611 + .ops = &clk_branch2_ops, 2612 + .flags = CLK_SET_RATE_PARENT, 2613 + } 2614 + } 2615 + }; 2616 + 2617 + static struct clk_branch gcc_camss_csi2pix_clk = { 2618 + .halt_reg = 0x3c058, 2619 + .halt_check = BRANCH_HALT, 2620 + .clkr = { 2621 + .enable_reg = 0x3c058, 2622 + .enable_mask = BIT(0), 2623 + .hw.init = &(struct clk_init_data) { 2624 + .name = "gcc_camss_csi2pix_clk", 2625 + .parent_hws = (const struct clk_hw*[]){ 2626 + &csi2_clk_src.clkr.hw, 2627 + }, 2628 + .num_parents = 1, 2629 + .ops = &clk_branch2_ops, 2630 + .flags = CLK_SET_RATE_PARENT, 2631 + } 2632 + } 2633 + }; 2634 + 2635 + static struct clk_branch gcc_camss_csi0rdi_clk = { 2636 + .halt_reg = 0x4e050, 2637 + .halt_check = BRANCH_HALT, 2638 + .clkr = { 2639 + .enable_reg = 0x4e050, 2640 + .enable_mask = BIT(0), 2641 + .hw.init = &(struct clk_init_data) { 2642 + .name = "gcc_camss_csi0rdi_clk", 2643 + .parent_hws = (const struct clk_hw*[]){ 2644 + &csi0_clk_src.clkr.hw, 2645 + }, 2646 + .num_parents = 1, 2647 + .ops = &clk_branch2_ops, 2648 + .flags = CLK_SET_RATE_PARENT, 2649 + } 2650 + } 2651 + }; 2652 + 2653 + static struct clk_branch gcc_camss_csi1rdi_clk = { 2654 + .halt_reg = 0x4f050, 2655 + .halt_check = BRANCH_HALT, 2656 + .clkr = { 2657 + .enable_reg = 0x4f050, 2658 + .enable_mask = BIT(0), 2659 + .hw.init = &(struct clk_init_data) { 2660 + .name = "gcc_camss_csi1rdi_clk", 2661 + .parent_hws = (const struct clk_hw*[]){ 2662 + &csi1_clk_src.clkr.hw, 2663 + }, 2664 + .num_parents = 1, 2665 + .ops = &clk_branch2_ops, 2666 + .flags = CLK_SET_RATE_PARENT, 2667 + } 2668 + } 2669 + }; 2670 + 2671 + static struct clk_branch gcc_camss_csi2rdi_clk = { 2672 + .halt_reg = 0x3c050, 2673 + .halt_check = BRANCH_HALT, 2674 + .clkr = { 2675 + .enable_reg = 0x3c050, 2676 + .enable_mask = BIT(0), 2677 + .hw.init = &(struct clk_init_data) { 2678 + .name = "gcc_camss_csi2rdi_clk", 2679 + .parent_hws = (const struct clk_hw*[]){ 2680 + &csi2_clk_src.clkr.hw, 2681 + }, 2682 + .num_parents = 1, 2683 + .ops = &clk_branch2_ops, 2684 + .flags = CLK_SET_RATE_PARENT, 2685 + } 2686 + } 2687 + }; 2688 + 2689 + static struct clk_branch gcc_camss_csi_vfe0_clk = { 2690 + .halt_reg = 0x58050, 2691 + .halt_check = BRANCH_HALT, 2692 + .clkr = { 2693 + .enable_reg = 0x58050, 2694 + .enable_mask = BIT(0), 2695 + .hw.init = &(struct clk_init_data) { 2696 + .name = "gcc_camss_csi_vfe0_clk", 2697 + .parent_hws = (const struct clk_hw*[]){ 2698 + &vfe0_clk_src.clkr.hw, 2699 + }, 2700 + .num_parents = 1, 2701 + .ops = &clk_branch2_ops, 2702 + .flags = CLK_SET_RATE_PARENT, 2703 + } 2704 + } 2705 + }; 2706 + 2707 + static struct clk_branch gcc_camss_csi_vfe1_clk = { 2708 + .halt_reg = 0x58074, 2709 + .halt_check = BRANCH_HALT, 2710 + .clkr = { 2711 + .enable_reg = 0x58074, 2712 + .enable_mask = BIT(0), 2713 + .hw.init = &(struct clk_init_data) { 2714 + .name = "gcc_camss_csi_vfe1_clk", 2715 + .parent_hws = (const struct clk_hw*[]){ 2716 + &vfe1_clk_src.clkr.hw, 2717 + }, 2718 + .num_parents = 1, 2719 + .ops = &clk_branch2_ops, 2720 + .flags = CLK_SET_RATE_PARENT, 2721 + } 2722 + } 2723 + }; 2724 + 2725 + static struct clk_branch gcc_camss_gp0_clk = { 2726 + .halt_reg = 0x54018, 2727 + .halt_check = BRANCH_HALT, 2728 + .clkr = { 2729 + .enable_reg = 0x54018, 2730 + .enable_mask = BIT(0), 2731 + .hw.init = &(struct clk_init_data) { 2732 + .name = "gcc_camss_gp0_clk", 2733 + .parent_hws = (const struct clk_hw*[]){ 2734 + &camss_gp0_clk_src.clkr.hw, 2735 + }, 2736 + .num_parents = 1, 2737 + .ops = &clk_branch2_ops, 2738 + .flags = CLK_SET_RATE_PARENT, 2739 + } 2740 + } 2741 + }; 2742 + 2743 + static struct clk_branch gcc_camss_gp1_clk = { 2744 + .halt_reg = 0x55018, 2745 + .halt_check = BRANCH_HALT, 2746 + .clkr = { 2747 + .enable_reg = 0x55018, 2748 + .enable_mask = BIT(0), 2749 + .hw.init = &(struct clk_init_data) { 2750 + .name = "gcc_camss_gp1_clk", 2751 + .parent_hws = (const struct clk_hw*[]){ 2752 + &camss_gp1_clk_src.clkr.hw, 2753 + }, 2754 + .num_parents = 1, 2755 + .ops = &clk_branch2_ops, 2756 + .flags = CLK_SET_RATE_PARENT, 2757 + } 2758 + } 2759 + }; 2760 + 2761 + static struct clk_branch gcc_camss_ispif_ahb_clk = { 2762 + .halt_reg = 0x50004, 2763 + .halt_check = BRANCH_HALT, 2764 + .clkr = { 2765 + .enable_reg = 0x50004, 2766 + .enable_mask = BIT(0), 2767 + .hw.init = &(struct clk_init_data) { 2768 + .name = "gcc_camss_ispif_ahb_clk", 2769 + .parent_hws = (const struct clk_hw*[]){ 2770 + &camss_top_ahb_clk_src.clkr.hw, 2771 + }, 2772 + .num_parents = 1, 2773 + .ops = &clk_branch2_ops, 2774 + .flags = CLK_SET_RATE_PARENT, 2775 + } 2776 + } 2777 + }; 2778 + 2779 + static struct clk_branch gcc_camss_jpeg0_clk = { 2780 + .halt_reg = 0x57020, 2781 + .halt_check = BRANCH_HALT, 2782 + .clkr = { 2783 + .enable_reg = 0x57020, 2784 + .enable_mask = BIT(0), 2785 + .hw.init = &(struct clk_init_data) { 2786 + .name = "gcc_camss_jpeg0_clk", 2787 + .parent_hws = (const struct clk_hw*[]){ 2788 + &jpeg0_clk_src.clkr.hw, 2789 + }, 2790 + .num_parents = 1, 2791 + .ops = &clk_branch2_ops, 2792 + .flags = CLK_SET_RATE_PARENT, 2793 + } 2794 + } 2795 + }; 2796 + 2797 + static struct clk_branch gcc_camss_jpeg_ahb_clk = { 2798 + .halt_reg = 0x57024, 2799 + .halt_check = BRANCH_HALT, 2800 + .clkr = { 2801 + .enable_reg = 0x57024, 2802 + .enable_mask = BIT(0), 2803 + .hw.init = &(struct clk_init_data) { 2804 + .name = "gcc_camss_jpeg_ahb_clk", 2805 + .parent_hws = (const struct clk_hw*[]){ 2806 + &camss_top_ahb_clk_src.clkr.hw, 2807 + }, 2808 + .num_parents = 1, 2809 + .ops = &clk_branch2_ops, 2810 + .flags = CLK_SET_RATE_PARENT, 2811 + } 2812 + } 2813 + }; 2814 + 2815 + static struct clk_branch gcc_camss_jpeg_axi_clk = { 2816 + .halt_reg = 0x57028, 2817 + .halt_check = BRANCH_HALT, 2818 + .clkr = { 2819 + .enable_reg = 0x57028, 2820 + .enable_mask = BIT(0), 2821 + .hw.init = &(struct clk_init_data) { 2822 + .name = "gcc_camss_jpeg_axi_clk", 2823 + .ops = &clk_branch2_ops, 2824 + } 2825 + } 2826 + }; 2827 + 2828 + static struct clk_branch gcc_camss_mclk0_clk = { 2829 + .halt_reg = 0x52018, 2830 + .halt_check = BRANCH_HALT, 2831 + .clkr = { 2832 + .enable_reg = 0x52018, 2833 + .enable_mask = BIT(0), 2834 + .hw.init = &(struct clk_init_data) { 2835 + .name = "gcc_camss_mclk0_clk", 2836 + .parent_hws = (const struct clk_hw*[]){ 2837 + &mclk0_clk_src.clkr.hw, 2838 + }, 2839 + .num_parents = 1, 2840 + .ops = &clk_branch2_ops, 2841 + .flags = CLK_SET_RATE_PARENT, 2842 + } 2843 + } 2844 + }; 2845 + 2846 + static struct clk_branch gcc_camss_mclk1_clk = { 2847 + .halt_reg = 0x53018, 2848 + .halt_check = BRANCH_HALT, 2849 + .clkr = { 2850 + .enable_reg = 0x53018, 2851 + .enable_mask = BIT(0), 2852 + .hw.init = &(struct clk_init_data) { 2853 + .name = "gcc_camss_mclk1_clk", 2854 + .parent_hws = (const struct clk_hw*[]){ 2855 + &mclk1_clk_src.clkr.hw, 2856 + }, 2857 + .num_parents = 1, 2858 + .ops = &clk_branch2_ops, 2859 + .flags = CLK_SET_RATE_PARENT, 2860 + } 2861 + } 2862 + }; 2863 + 2864 + static struct clk_branch gcc_camss_mclk2_clk = { 2865 + .halt_reg = 0x5c018, 2866 + .halt_check = BRANCH_HALT, 2867 + .clkr = { 2868 + .enable_reg = 0x5c018, 2869 + .enable_mask = BIT(0), 2870 + .hw.init = &(struct clk_init_data) { 2871 + .name = "gcc_camss_mclk2_clk", 2872 + .parent_hws = (const struct clk_hw*[]){ 2873 + &mclk2_clk_src.clkr.hw, 2874 + }, 2875 + .num_parents = 1, 2876 + .ops = &clk_branch2_ops, 2877 + .flags = CLK_SET_RATE_PARENT, 2878 + } 2879 + } 2880 + }; 2881 + 2882 + static struct clk_branch gcc_camss_mclk3_clk = { 2883 + .halt_reg = 0x5e018, 2884 + .halt_check = BRANCH_HALT, 2885 + .clkr = { 2886 + .enable_reg = 0x5e018, 2887 + .enable_mask = BIT(0), 2888 + .hw.init = &(struct clk_init_data) { 2889 + .name = "gcc_camss_mclk3_clk", 2890 + .parent_hws = (const struct clk_hw*[]){ 2891 + &mclk3_clk_src.clkr.hw, 2892 + }, 2893 + .num_parents = 1, 2894 + .ops = &clk_branch2_ops, 2895 + .flags = CLK_SET_RATE_PARENT, 2896 + } 2897 + } 2898 + }; 2899 + 2900 + static struct clk_branch gcc_camss_micro_ahb_clk = { 2901 + .halt_reg = 0x5600c, 2902 + .halt_check = BRANCH_HALT, 2903 + .clkr = { 2904 + .enable_reg = 0x5600c, 2905 + .enable_mask = BIT(0), 2906 + .hw.init = &(struct clk_init_data) { 2907 + .name = "gcc_camss_micro_ahb_clk", 2908 + .parent_hws = (const struct clk_hw*[]){ 2909 + &camss_top_ahb_clk_src.clkr.hw, 2910 + }, 2911 + .num_parents = 1, 2912 + .ops = &clk_branch2_ops, 2913 + .flags = CLK_SET_RATE_PARENT, 2914 + } 2915 + } 2916 + }; 2917 + 2918 + static struct clk_branch gcc_camss_top_ahb_clk = { 2919 + .halt_reg = 0x5a014, 2920 + .halt_check = BRANCH_HALT, 2921 + .clkr = { 2922 + .enable_reg = 0x5a014, 2923 + .enable_mask = BIT(0), 2924 + .hw.init = &(struct clk_init_data) { 2925 + .name = "gcc_camss_top_ahb_clk", 2926 + .parent_hws = (const struct clk_hw*[]){ 2927 + &camss_top_ahb_clk_src.clkr.hw, 2928 + }, 2929 + .num_parents = 1, 2930 + .ops = &clk_branch2_ops, 2931 + .flags = CLK_SET_RATE_PARENT, 2932 + } 2933 + } 2934 + }; 2935 + 2936 + static struct clk_branch gcc_camss_vfe0_ahb_clk = { 2937 + .halt_reg = 0x58044, 2938 + .halt_check = BRANCH_HALT, 2939 + .clkr = { 2940 + .enable_reg = 0x58044, 2941 + .enable_mask = BIT(0), 2942 + .hw.init = &(struct clk_init_data) { 2943 + .name = "gcc_camss_vfe0_ahb_clk", 2944 + .parent_hws = (const struct clk_hw*[]){ 2945 + &camss_top_ahb_clk_src.clkr.hw, 2946 + }, 2947 + .num_parents = 1, 2948 + .ops = &clk_branch2_ops, 2949 + .flags = CLK_SET_RATE_PARENT, 2950 + } 2951 + } 2952 + }; 2953 + 2954 + static struct clk_branch gcc_camss_vfe0_axi_clk = { 2955 + .halt_reg = 0x58048, 2956 + .halt_check = BRANCH_HALT, 2957 + .clkr = { 2958 + .enable_reg = 0x58048, 2959 + .enable_mask = BIT(0), 2960 + .hw.init = &(struct clk_init_data) { 2961 + .name = "gcc_camss_vfe0_axi_clk", 2962 + .ops = &clk_branch2_ops, 2963 + } 2964 + } 2965 + }; 2966 + 2967 + static struct clk_branch gcc_camss_vfe0_clk = { 2968 + .halt_reg = 0x58038, 2969 + .halt_check = BRANCH_HALT, 2970 + .clkr = { 2971 + .enable_reg = 0x58038, 2972 + .enable_mask = BIT(0), 2973 + .hw.init = &(struct clk_init_data) { 2974 + .name = "gcc_camss_vfe0_clk", 2975 + .parent_hws = (const struct clk_hw*[]){ 2976 + &vfe0_clk_src.clkr.hw, 2977 + }, 2978 + .num_parents = 1, 2979 + .ops = &clk_branch2_ops, 2980 + .flags = CLK_SET_RATE_PARENT, 2981 + } 2982 + } 2983 + }; 2984 + 2985 + static struct clk_branch gcc_camss_vfe1_ahb_clk = { 2986 + .halt_reg = 0x58060, 2987 + .halt_check = BRANCH_HALT, 2988 + .clkr = { 2989 + .enable_reg = 0x58060, 2990 + .enable_mask = BIT(0), 2991 + .hw.init = &(struct clk_init_data) { 2992 + .name = "gcc_camss_vfe1_ahb_clk", 2993 + .parent_hws = (const struct clk_hw*[]){ 2994 + &camss_top_ahb_clk_src.clkr.hw, 2995 + }, 2996 + .num_parents = 1, 2997 + .ops = &clk_branch2_ops, 2998 + .flags = CLK_SET_RATE_PARENT, 2999 + } 3000 + } 3001 + }; 3002 + 3003 + static struct clk_branch gcc_camss_vfe1_axi_clk = { 3004 + .halt_reg = 0x58068, 3005 + .halt_check = BRANCH_HALT, 3006 + .clkr = { 3007 + .enable_reg = 0x58068, 3008 + .enable_mask = BIT(0), 3009 + .hw.init = &(struct clk_init_data) { 3010 + .name = "gcc_camss_vfe1_axi_clk", 3011 + .ops = &clk_branch2_ops, 3012 + } 3013 + } 3014 + }; 3015 + 3016 + static struct clk_branch gcc_camss_vfe1_clk = { 3017 + .halt_reg = 0x5805c, 3018 + .halt_check = BRANCH_HALT, 3019 + .clkr = { 3020 + .enable_reg = 0x5805c, 3021 + .enable_mask = BIT(0), 3022 + .hw.init = &(struct clk_init_data) { 3023 + .name = "gcc_camss_vfe1_clk", 3024 + .parent_hws = (const struct clk_hw*[]){ 3025 + &vfe1_clk_src.clkr.hw, 3026 + }, 3027 + .num_parents = 1, 3028 + .ops = &clk_branch2_ops, 3029 + .flags = CLK_SET_RATE_PARENT, 3030 + } 3031 + } 3032 + }; 3033 + 3034 + static struct clk_branch gcc_cpp_tbu_clk = { 3035 + .halt_reg = 0x12040, 3036 + .halt_check = BRANCH_HALT_VOTED, 3037 + .clkr = { 3038 + .enable_reg = 0x4500c, 3039 + .enable_mask = BIT(14), 3040 + .hw.init = &(struct clk_init_data) { 3041 + .name = "gcc_cpp_tbu_clk", 3042 + .ops = &clk_branch2_ops, 3043 + } 3044 + } 3045 + }; 3046 + 3047 + static struct clk_branch gcc_crypto_ahb_clk = { 3048 + .halt_reg = 0x16024, 3049 + .halt_check = BRANCH_HALT_VOTED, 3050 + .clkr = { 3051 + .enable_reg = 0x45004, 3052 + .enable_mask = BIT(0), 3053 + .hw.init = &(struct clk_init_data) { 3054 + .name = "gcc_crypto_ahb_clk", 3055 + .ops = &clk_branch2_ops, 3056 + } 3057 + } 3058 + }; 3059 + 3060 + static struct clk_branch gcc_crypto_axi_clk = { 3061 + .halt_reg = 0x16020, 3062 + .halt_check = BRANCH_HALT_VOTED, 3063 + .clkr = { 3064 + .enable_reg = 0x45004, 3065 + .enable_mask = BIT(1), 3066 + .hw.init = &(struct clk_init_data) { 3067 + .name = "gcc_crypto_axi_clk", 3068 + .ops = &clk_branch2_ops, 3069 + } 3070 + } 3071 + }; 3072 + 3073 + static struct clk_branch gcc_crypto_clk = { 3074 + .halt_reg = 0x1601c, 3075 + .halt_check = BRANCH_HALT_VOTED, 3076 + .clkr = { 3077 + .enable_reg = 0x45004, 3078 + .enable_mask = BIT(2), 3079 + .hw.init = &(struct clk_init_data) { 3080 + .name = "gcc_crypto_clk", 3081 + .parent_hws = (const struct clk_hw*[]){ 3082 + &crypto_clk_src.clkr.hw, 3083 + }, 3084 + .num_parents = 1, 3085 + .ops = &clk_branch2_ops, 3086 + .flags = CLK_SET_RATE_PARENT, 3087 + } 3088 + } 3089 + }; 3090 + 3091 + static struct clk_branch gcc_dcc_clk = { 3092 + .halt_reg = 0x77004, 3093 + .halt_check = BRANCH_HALT, 3094 + .clkr = { 3095 + .enable_reg = 0x77004, 3096 + .enable_mask = BIT(0), 3097 + .hw.init = &(struct clk_init_data) { 3098 + .name = "gcc_dcc_clk", 3099 + .ops = &clk_branch2_ops, 3100 + } 3101 + } 3102 + }; 3103 + 3104 + static struct clk_branch gcc_gp1_clk = { 3105 + .halt_reg = 0x08000, 3106 + .halt_check = BRANCH_HALT, 3107 + .clkr = { 3108 + .enable_reg = 0x08000, 3109 + .enable_mask = BIT(0), 3110 + .hw.init = &(struct clk_init_data) { 3111 + .name = "gcc_gp1_clk", 3112 + .parent_hws = (const struct clk_hw*[]){ 3113 + &gp1_clk_src.clkr.hw, 3114 + }, 3115 + .num_parents = 1, 3116 + .ops = &clk_branch2_ops, 3117 + .flags = CLK_SET_RATE_PARENT, 3118 + } 3119 + } 3120 + }; 3121 + 3122 + static struct clk_branch gcc_gp2_clk = { 3123 + .halt_reg = 0x09000, 3124 + .halt_check = BRANCH_HALT, 3125 + .clkr = { 3126 + .enable_reg = 0x09000, 3127 + .enable_mask = BIT(0), 3128 + .hw.init = &(struct clk_init_data) { 3129 + .name = "gcc_gp2_clk", 3130 + .parent_hws = (const struct clk_hw*[]){ 3131 + &gp2_clk_src.clkr.hw, 3132 + }, 3133 + .num_parents = 1, 3134 + .ops = &clk_branch2_ops, 3135 + .flags = CLK_SET_RATE_PARENT, 3136 + } 3137 + } 3138 + }; 3139 + 3140 + static struct clk_branch gcc_gp3_clk = { 3141 + .halt_reg = 0x0a000, 3142 + .halt_check = BRANCH_HALT, 3143 + .clkr = { 3144 + .enable_reg = 0x0a000, 3145 + .enable_mask = BIT(0), 3146 + .hw.init = &(struct clk_init_data) { 3147 + .name = "gcc_gp3_clk", 3148 + .parent_hws = (const struct clk_hw*[]){ 3149 + &gp3_clk_src.clkr.hw, 3150 + }, 3151 + .num_parents = 1, 3152 + .ops = &clk_branch2_ops, 3153 + .flags = CLK_SET_RATE_PARENT, 3154 + } 3155 + } 3156 + }; 3157 + 3158 + static struct clk_branch gcc_jpeg_tbu_clk = { 3159 + .halt_reg = 0x12034, 3160 + .halt_check = BRANCH_HALT_VOTED, 3161 + .clkr = { 3162 + .enable_reg = 0x4500c, 3163 + .enable_mask = BIT(10), 3164 + .hw.init = &(struct clk_init_data) { 3165 + .name = "gcc_jpeg_tbu_clk", 3166 + .ops = &clk_branch2_ops, 3167 + } 3168 + } 3169 + }; 3170 + 3171 + static struct clk_branch gcc_mdp_tbu_clk = { 3172 + .halt_reg = 0x1201c, 3173 + .halt_check = BRANCH_HALT_VOTED, 3174 + .clkr = { 3175 + .enable_reg = 0x4500c, 3176 + .enable_mask = BIT(4), 3177 + .hw.init = &(struct clk_init_data) { 3178 + .name = "gcc_mdp_tbu_clk", 3179 + .ops = &clk_branch2_ops, 3180 + } 3181 + } 3182 + }; 3183 + 3184 + static struct clk_branch gcc_mdss_ahb_clk = { 3185 + .halt_reg = 0x4d07c, 3186 + .halt_check = BRANCH_HALT, 3187 + .clkr = { 3188 + .enable_reg = 0x4d07c, 3189 + .enable_mask = BIT(0), 3190 + .hw.init = &(struct clk_init_data) { 3191 + .name = "gcc_mdss_ahb_clk", 3192 + .ops = &clk_branch2_ops, 3193 + } 3194 + } 3195 + }; 3196 + 3197 + static struct clk_branch gcc_mdss_axi_clk = { 3198 + .halt_reg = 0x4d080, 3199 + .halt_check = BRANCH_HALT, 3200 + .clkr = { 3201 + .enable_reg = 0x4d080, 3202 + .enable_mask = BIT(0), 3203 + .hw.init = &(struct clk_init_data) { 3204 + .name = "gcc_mdss_axi_clk", 3205 + .ops = &clk_branch2_ops, 3206 + } 3207 + } 3208 + }; 3209 + 3210 + static struct clk_branch gcc_mdss_byte0_clk = { 3211 + .halt_reg = 0x4d094, 3212 + .halt_check = BRANCH_HALT, 3213 + .clkr = { 3214 + .enable_reg = 0x4d094, 3215 + .enable_mask = BIT(0), 3216 + .hw.init = &(struct clk_init_data) { 3217 + .name = "gcc_mdss_byte0_clk", 3218 + .parent_hws = (const struct clk_hw*[]){ 3219 + &byte0_clk_src.clkr.hw, 3220 + }, 3221 + .num_parents = 1, 3222 + .ops = &clk_branch2_ops, 3223 + .flags = CLK_SET_RATE_PARENT, 3224 + } 3225 + } 3226 + }; 3227 + 3228 + static struct clk_branch gcc_mdss_byte1_clk = { 3229 + .halt_reg = 0x4d0a0, 3230 + .halt_check = BRANCH_HALT, 3231 + .clkr = { 3232 + .enable_reg = 0x4d0a0, 3233 + .enable_mask = BIT(0), 3234 + .hw.init = &(struct clk_init_data) { 3235 + .name = "gcc_mdss_byte1_clk", 3236 + .parent_hws = (const struct clk_hw*[]){ 3237 + &byte1_clk_src.clkr.hw, 3238 + }, 3239 + .num_parents = 1, 3240 + .ops = &clk_branch2_ops, 3241 + .flags = CLK_SET_RATE_PARENT, 3242 + } 3243 + } 3244 + }; 3245 + 3246 + static struct clk_branch gcc_mdss_esc0_clk = { 3247 + .halt_reg = 0x4d098, 3248 + .halt_check = BRANCH_HALT, 3249 + .clkr = { 3250 + .enable_reg = 0x4d098, 3251 + .enable_mask = BIT(0), 3252 + .hw.init = &(struct clk_init_data) { 3253 + .name = "gcc_mdss_esc0_clk", 3254 + .parent_hws = (const struct clk_hw*[]){ 3255 + &esc0_clk_src.clkr.hw, 3256 + }, 3257 + .num_parents = 1, 3258 + .ops = &clk_branch2_ops, 3259 + .flags = CLK_SET_RATE_PARENT, 3260 + } 3261 + } 3262 + }; 3263 + 3264 + static struct clk_branch gcc_mdss_esc1_clk = { 3265 + .halt_reg = 0x4d09c, 3266 + .halt_check = BRANCH_HALT, 3267 + .clkr = { 3268 + .enable_reg = 0x4d09c, 3269 + .enable_mask = BIT(0), 3270 + .hw.init = &(struct clk_init_data) { 3271 + .name = "gcc_mdss_esc1_clk", 3272 + .parent_hws = (const struct clk_hw*[]){ 3273 + &esc1_clk_src.clkr.hw, 3274 + }, 3275 + .num_parents = 1, 3276 + .ops = &clk_branch2_ops, 3277 + .flags = CLK_SET_RATE_PARENT, 3278 + } 3279 + } 3280 + }; 3281 + 3282 + static struct clk_branch gcc_mdss_mdp_clk = { 3283 + .halt_reg = 0x4d088, 3284 + .halt_check = BRANCH_HALT, 3285 + .clkr = { 3286 + .enable_reg = 0x4d088, 3287 + .enable_mask = BIT(0), 3288 + .hw.init = &(struct clk_init_data) { 3289 + .name = "gcc_mdss_mdp_clk", 3290 + .parent_hws = (const struct clk_hw*[]){ 3291 + &mdp_clk_src.clkr.hw, 3292 + }, 3293 + .num_parents = 1, 3294 + .ops = &clk_branch2_ops, 3295 + .flags = CLK_SET_RATE_PARENT, 3296 + } 3297 + } 3298 + }; 3299 + 3300 + static struct clk_branch gcc_mdss_pclk0_clk = { 3301 + .halt_reg = 0x4d084, 3302 + .halt_check = BRANCH_HALT, 3303 + .clkr = { 3304 + .enable_reg = 0x4d084, 3305 + .enable_mask = BIT(0), 3306 + .hw.init = &(struct clk_init_data) { 3307 + .name = "gcc_mdss_pclk0_clk", 3308 + .parent_hws = (const struct clk_hw*[]){ 3309 + &pclk0_clk_src.clkr.hw, 3310 + }, 3311 + .num_parents = 1, 3312 + .ops = &clk_branch2_ops, 3313 + .flags = CLK_SET_RATE_PARENT, 3314 + } 3315 + } 3316 + }; 3317 + 3318 + static struct clk_branch gcc_mdss_pclk1_clk = { 3319 + .halt_reg = 0x4d0a4, 3320 + .halt_check = BRANCH_HALT, 3321 + .clkr = { 3322 + .enable_reg = 0x4d0a4, 3323 + .enable_mask = BIT(0), 3324 + .hw.init = &(struct clk_init_data) { 3325 + .name = "gcc_mdss_pclk1_clk", 3326 + .parent_hws = (const struct clk_hw*[]){ 3327 + &pclk1_clk_src.clkr.hw, 3328 + }, 3329 + .num_parents = 1, 3330 + .ops = &clk_branch2_ops, 3331 + .flags = CLK_SET_RATE_PARENT, 3332 + } 3333 + } 3334 + }; 3335 + 3336 + static struct clk_branch gcc_mdss_vsync_clk = { 3337 + .halt_reg = 0x4d090, 3338 + .halt_check = BRANCH_HALT, 3339 + .clkr = { 3340 + .enable_reg = 0x4d090, 3341 + .enable_mask = BIT(0), 3342 + .hw.init = &(struct clk_init_data) { 3343 + .name = "gcc_mdss_vsync_clk", 3344 + .parent_hws = (const struct clk_hw*[]){ 3345 + &vsync_clk_src.clkr.hw, 3346 + }, 3347 + .num_parents = 1, 3348 + .ops = &clk_branch2_ops, 3349 + .flags = CLK_SET_RATE_PARENT, 3350 + } 3351 + } 3352 + }; 3353 + 3354 + static struct clk_branch gcc_mss_cfg_ahb_clk = { 3355 + .halt_reg = 0x49000, 3356 + .halt_check = BRANCH_HALT, 3357 + .clkr = { 3358 + .enable_reg = 0x49000, 3359 + .enable_mask = BIT(0), 3360 + .hw.init = &(struct clk_init_data) { 3361 + .name = "gcc_mss_cfg_ahb_clk", 3362 + .ops = &clk_branch2_ops, 3363 + } 3364 + } 3365 + }; 3366 + 3367 + static struct clk_branch gcc_mss_q6_bimc_axi_clk = { 3368 + .halt_reg = 0x49004, 3369 + .halt_check = BRANCH_HALT, 3370 + .clkr = { 3371 + .enable_reg = 0x49004, 3372 + .enable_mask = BIT(0), 3373 + .hw.init = &(struct clk_init_data) { 3374 + .name = "gcc_mss_q6_bimc_axi_clk", 3375 + .ops = &clk_branch2_ops, 3376 + } 3377 + } 3378 + }; 3379 + 3380 + static struct clk_branch gcc_oxili_ahb_clk = { 3381 + .halt_reg = 0x59028, 3382 + .halt_check = BRANCH_HALT, 3383 + .clkr = { 3384 + .enable_reg = 0x59028, 3385 + .enable_mask = BIT(0), 3386 + .hw.init = &(struct clk_init_data) { 3387 + .name = "gcc_oxili_ahb_clk", 3388 + .ops = &clk_branch2_ops, 3389 + } 3390 + } 3391 + }; 3392 + 3393 + static struct clk_branch gcc_oxili_aon_clk = { 3394 + .halt_reg = 0x59044, 3395 + .halt_check = BRANCH_HALT, 3396 + .clkr = { 3397 + .enable_reg = 0x59044, 3398 + .enable_mask = BIT(0), 3399 + .hw.init = &(struct clk_init_data) { 3400 + .name = "gcc_oxili_aon_clk", 3401 + .parent_hws = (const struct clk_hw*[]){ 3402 + &gfx3d_clk_src.clkr.hw, 3403 + }, 3404 + .num_parents = 1, 3405 + .ops = &clk_branch2_ops, 3406 + } 3407 + } 3408 + }; 3409 + 3410 + static struct clk_branch gcc_oxili_gfx3d_clk = { 3411 + .halt_reg = 0x59020, 3412 + .halt_check = BRANCH_HALT, 3413 + .clkr = { 3414 + .enable_reg = 0x59020, 3415 + .enable_mask = BIT(0), 3416 + .hw.init = &(struct clk_init_data) { 3417 + .name = "gcc_oxili_gfx3d_clk", 3418 + .parent_hws = (const struct clk_hw*[]){ 3419 + &gfx3d_clk_src.clkr.hw, 3420 + }, 3421 + .num_parents = 1, 3422 + .ops = &clk_branch2_ops, 3423 + .flags = CLK_SET_RATE_PARENT, 3424 + } 3425 + } 3426 + }; 3427 + 3428 + static struct clk_branch gcc_oxili_timer_clk = { 3429 + .halt_reg = 0x59040, 3430 + .halt_check = BRANCH_HALT, 3431 + .clkr = { 3432 + .enable_reg = 0x59040, 3433 + .enable_mask = BIT(0), 3434 + .hw.init = &(struct clk_init_data) { 3435 + .name = "gcc_oxili_timer_clk", 3436 + .ops = &clk_branch2_ops, 3437 + } 3438 + } 3439 + }; 3440 + 3441 + static struct clk_branch gcc_pcnoc_usb3_axi_clk = { 3442 + .halt_reg = 0x3f038, 3443 + .halt_check = BRANCH_HALT, 3444 + .clkr = { 3445 + .enable_reg = 0x3f038, 3446 + .enable_mask = BIT(0), 3447 + .hw.init = &(struct clk_init_data) { 3448 + .name = "gcc_pcnoc_usb3_axi_clk", 3449 + .parent_hws = (const struct clk_hw*[]){ 3450 + &usb30_master_clk_src.clkr.hw, 3451 + }, 3452 + .num_parents = 1, 3453 + .ops = &clk_branch2_ops, 3454 + .flags = CLK_SET_RATE_PARENT, 3455 + } 3456 + } 3457 + }; 3458 + 3459 + static struct clk_branch gcc_pdm2_clk = { 3460 + .halt_reg = 0x4400c, 3461 + .halt_check = BRANCH_HALT, 3462 + .clkr = { 3463 + .enable_reg = 0x4400c, 3464 + .enable_mask = BIT(0), 3465 + .hw.init = &(struct clk_init_data) { 3466 + .name = "gcc_pdm2_clk", 3467 + .parent_hws = (const struct clk_hw*[]){ 3468 + &pdm2_clk_src.clkr.hw, 3469 + }, 3470 + .num_parents = 1, 3471 + .ops = &clk_branch2_ops, 3472 + .flags = CLK_SET_RATE_PARENT, 3473 + } 3474 + } 3475 + }; 3476 + 3477 + static struct clk_branch gcc_pdm_ahb_clk = { 3478 + .halt_reg = 0x44004, 3479 + .halt_check = BRANCH_HALT, 3480 + .clkr = { 3481 + .enable_reg = 0x44004, 3482 + .enable_mask = BIT(0), 3483 + .hw.init = &(struct clk_init_data) { 3484 + .name = "gcc_pdm_ahb_clk", 3485 + .ops = &clk_branch2_ops, 3486 + } 3487 + } 3488 + }; 3489 + 3490 + static struct clk_branch gcc_prng_ahb_clk = { 3491 + .halt_reg = 0x13004, 3492 + .halt_check = BRANCH_HALT_VOTED, 3493 + .clkr = { 3494 + .enable_reg = 0x45004, 3495 + .enable_mask = BIT(8), 3496 + .hw.init = &(struct clk_init_data) { 3497 + .name = "gcc_prng_ahb_clk", 3498 + .ops = &clk_branch2_ops, 3499 + } 3500 + } 3501 + }; 3502 + 3503 + static struct clk_branch gcc_qdss_dap_clk = { 3504 + .halt_reg = 0x29084, 3505 + .halt_check = BRANCH_HALT_VOTED, 3506 + .clkr = { 3507 + .enable_reg = 0x45004, 3508 + .enable_mask = BIT(11), 3509 + .hw.init = &(struct clk_init_data) { 3510 + .name = "gcc_qdss_dap_clk", 3511 + .ops = &clk_branch2_ops, 3512 + } 3513 + } 3514 + }; 3515 + 3516 + static struct clk_branch gcc_qusb_ref_clk = { 3517 + .halt_reg = 0, 3518 + .halt_check = BRANCH_HALT_SKIP, 3519 + .clkr = { 3520 + .enable_reg = 0x41030, 3521 + .enable_mask = BIT(0), 3522 + .hw.init = &(struct clk_init_data) { 3523 + .name = "gcc_qusb_ref_clk", 3524 + .ops = &clk_branch2_ops, 3525 + } 3526 + } 3527 + }; 3528 + 3529 + static struct clk_branch gcc_rbcpr_gfx_clk = { 3530 + .halt_reg = 0x3a004, 3531 + .halt_check = BRANCH_HALT, 3532 + .clkr = { 3533 + .enable_reg = 0x3a004, 3534 + .enable_mask = BIT(0), 3535 + .hw.init = &(struct clk_init_data) { 3536 + .name = "gcc_rbcpr_gfx_clk", 3537 + .parent_hws = (const struct clk_hw*[]){ 3538 + &rbcpr_gfx_clk_src.clkr.hw, 3539 + }, 3540 + .num_parents = 1, 3541 + .ops = &clk_branch2_ops, 3542 + .flags = CLK_SET_RATE_PARENT, 3543 + } 3544 + } 3545 + }; 3546 + 3547 + static struct clk_branch gcc_sdcc1_ice_core_clk = { 3548 + .halt_reg = 0x5d014, 3549 + .halt_check = BRANCH_HALT, 3550 + .clkr = { 3551 + .enable_reg = 0x5d014, 3552 + .enable_mask = BIT(0), 3553 + .hw.init = &(struct clk_init_data) { 3554 + .name = "gcc_sdcc1_ice_core_clk", 3555 + .parent_hws = (const struct clk_hw*[]){ 3556 + &sdcc1_ice_core_clk_src.clkr.hw, 3557 + }, 3558 + .num_parents = 1, 3559 + .ops = &clk_branch2_ops, 3560 + .flags = CLK_SET_RATE_PARENT, 3561 + } 3562 + } 3563 + }; 3564 + 3565 + static struct clk_branch gcc_sdcc1_ahb_clk = { 3566 + .halt_reg = 0x4201c, 3567 + .halt_check = BRANCH_HALT, 3568 + .clkr = { 3569 + .enable_reg = 0x4201c, 3570 + .enable_mask = BIT(0), 3571 + .hw.init = &(struct clk_init_data) { 3572 + .name = "gcc_sdcc1_ahb_clk", 3573 + .ops = &clk_branch2_ops, 3574 + } 3575 + } 3576 + }; 3577 + 3578 + static struct clk_branch gcc_sdcc2_ahb_clk = { 3579 + .halt_reg = 0x4301c, 3580 + .halt_check = BRANCH_HALT, 3581 + .clkr = { 3582 + .enable_reg = 0x4301c, 3583 + .enable_mask = BIT(0), 3584 + .hw.init = &(struct clk_init_data) { 3585 + .name = "gcc_sdcc2_ahb_clk", 3586 + .ops = &clk_branch2_ops, 3587 + } 3588 + } 3589 + }; 3590 + 3591 + static struct clk_branch gcc_sdcc1_apps_clk = { 3592 + .halt_reg = 0x42018, 3593 + .halt_check = BRANCH_HALT, 3594 + .clkr = { 3595 + .enable_reg = 0x42018, 3596 + .enable_mask = BIT(0), 3597 + .hw.init = &(struct clk_init_data) { 3598 + .name = "gcc_sdcc1_apps_clk", 3599 + .parent_hws = (const struct clk_hw*[]){ 3600 + &sdcc1_apps_clk_src.clkr.hw, 3601 + }, 3602 + .num_parents = 1, 3603 + .ops = &clk_branch2_ops, 3604 + .flags = CLK_SET_RATE_PARENT, 3605 + } 3606 + } 3607 + }; 3608 + 3609 + static struct clk_branch gcc_sdcc2_apps_clk = { 3610 + .halt_reg = 0x43018, 3611 + .halt_check = BRANCH_HALT, 3612 + .clkr = { 3613 + .enable_reg = 0x43018, 3614 + .enable_mask = BIT(0), 3615 + .hw.init = &(struct clk_init_data) { 3616 + .name = "gcc_sdcc2_apps_clk", 3617 + .parent_hws = (const struct clk_hw*[]){ 3618 + &sdcc2_apps_clk_src.clkr.hw, 3619 + }, 3620 + .num_parents = 1, 3621 + .ops = &clk_branch2_ops, 3622 + .flags = CLK_SET_RATE_PARENT, 3623 + } 3624 + } 3625 + }; 3626 + 3627 + static struct clk_branch gcc_smmu_cfg_clk = { 3628 + .halt_reg = 0x12038, 3629 + .halt_check = BRANCH_HALT_VOTED, 3630 + .clkr = { 3631 + .enable_reg = 0x4500c, 3632 + .enable_mask = BIT(12), 3633 + .hw.init = &(struct clk_init_data) { 3634 + .name = "gcc_smmu_cfg_clk", 3635 + .ops = &clk_branch2_ops, 3636 + } 3637 + } 3638 + }; 3639 + 3640 + static struct clk_branch gcc_usb30_master_clk = { 3641 + .halt_reg = 0x3f000, 3642 + .halt_check = BRANCH_HALT, 3643 + .clkr = { 3644 + .enable_reg = 0x3f000, 3645 + .enable_mask = BIT(0), 3646 + .hw.init = &(struct clk_init_data) { 3647 + .name = "gcc_usb30_master_clk", 3648 + .parent_hws = (const struct clk_hw*[]){ 3649 + &usb30_master_clk_src.clkr.hw, 3650 + }, 3651 + .num_parents = 1, 3652 + .ops = &clk_branch2_ops, 3653 + .flags = CLK_SET_RATE_PARENT, 3654 + } 3655 + } 3656 + }; 3657 + 3658 + static struct clk_branch gcc_usb30_mock_utmi_clk = { 3659 + .halt_reg = 0x3f008, 3660 + .halt_check = BRANCH_HALT, 3661 + .clkr = { 3662 + .enable_reg = 0x3f008, 3663 + .enable_mask = BIT(0), 3664 + .hw.init = &(struct clk_init_data) { 3665 + .name = "gcc_usb30_mock_utmi_clk", 3666 + .parent_hws = (const struct clk_hw*[]){ 3667 + &usb30_mock_utmi_clk_src.clkr.hw, 3668 + }, 3669 + .num_parents = 1, 3670 + .ops = &clk_branch2_ops, 3671 + .flags = CLK_SET_RATE_PARENT, 3672 + } 3673 + } 3674 + }; 3675 + 3676 + static struct clk_branch gcc_usb30_sleep_clk = { 3677 + .halt_reg = 0x3f004, 3678 + .halt_check = BRANCH_HALT, 3679 + .clkr = { 3680 + .enable_reg = 0x3f004, 3681 + .enable_mask = BIT(0), 3682 + .hw.init = &(struct clk_init_data) { 3683 + .name = "gcc_usb30_sleep_clk", 3684 + .ops = &clk_branch2_ops, 3685 + } 3686 + } 3687 + }; 3688 + 3689 + static struct clk_branch gcc_usb3_aux_clk = { 3690 + .halt_reg = 0x3f044, 3691 + .halt_check = BRANCH_HALT, 3692 + .clkr = { 3693 + .enable_reg = 0x3f044, 3694 + .enable_mask = BIT(0), 3695 + .hw.init = &(struct clk_init_data) { 3696 + .name = "gcc_usb3_aux_clk", 3697 + .parent_hws = (const struct clk_hw*[]){ 3698 + &usb3_aux_clk_src.clkr.hw, 3699 + }, 3700 + .num_parents = 1, 3701 + .ops = &clk_branch2_ops, 3702 + .flags = CLK_SET_RATE_PARENT, 3703 + } 3704 + } 3705 + }; 3706 + 3707 + static struct clk_branch gcc_usb3_pipe_clk = { 3708 + .halt_reg = 0, 3709 + .halt_check = BRANCH_HALT_DELAY, 3710 + .clkr = { 3711 + .enable_reg = 0x3f040, 3712 + .enable_mask = BIT(0), 3713 + .hw.init = &(struct clk_init_data) { 3714 + .name = "gcc_usb3_pipe_clk", 3715 + .ops = &clk_branch2_ops, 3716 + } 3717 + } 3718 + }; 3719 + 3720 + static struct clk_branch gcc_usb_phy_cfg_ahb_clk = { 3721 + .halt_reg = 0x3f080, 3722 + .halt_check = BRANCH_VOTED, 3723 + .clkr = { 3724 + .enable_reg = 0x3f080, 3725 + .enable_mask = BIT(0), 3726 + .hw.init = &(struct clk_init_data) { 3727 + .name = "gcc_usb_phy_cfg_ahb_clk", 3728 + .ops = &clk_branch2_ops, 3729 + } 3730 + } 3731 + }; 3732 + 3733 + static struct clk_branch gcc_usb_ss_ref_clk = { 3734 + .halt_reg = 0, 3735 + .halt_check = BRANCH_HALT_SKIP, 3736 + .clkr = { 3737 + .enable_reg = 0x3f07c, 3738 + .enable_mask = BIT(0), 3739 + .hw.init = &(struct clk_init_data) { 3740 + .name = "gcc_usb_ss_ref_clk", 3741 + .ops = &clk_branch2_ops, 3742 + } 3743 + } 3744 + }; 3745 + 3746 + static struct clk_branch gcc_venus0_ahb_clk = { 3747 + .halt_reg = 0x4c020, 3748 + .halt_check = BRANCH_HALT, 3749 + .clkr = { 3750 + .enable_reg = 0x4c020, 3751 + .enable_mask = BIT(0), 3752 + .hw.init = &(struct clk_init_data) { 3753 + .name = "gcc_venus0_ahb_clk", 3754 + .ops = &clk_branch2_ops, 3755 + } 3756 + } 3757 + }; 3758 + 3759 + static struct clk_branch gcc_venus0_axi_clk = { 3760 + .halt_reg = 0x4c024, 3761 + .halt_check = BRANCH_HALT, 3762 + .clkr = { 3763 + .enable_reg = 0x4c024, 3764 + .enable_mask = BIT(0), 3765 + .hw.init = &(struct clk_init_data) { 3766 + .name = "gcc_venus0_axi_clk", 3767 + .ops = &clk_branch2_ops, 3768 + } 3769 + } 3770 + }; 3771 + 3772 + static struct clk_branch gcc_venus0_core0_vcodec0_clk = { 3773 + .halt_reg = 0x4c02c, 3774 + .halt_check = BRANCH_HALT, 3775 + .clkr = { 3776 + .enable_reg = 0x4c02c, 3777 + .enable_mask = BIT(0), 3778 + .hw.init = &(struct clk_init_data) { 3779 + .name = "gcc_venus0_core0_vcodec0_clk", 3780 + .parent_hws = (const struct clk_hw*[]){ 3781 + &vcodec0_clk_src.clkr.hw, 3782 + }, 3783 + .num_parents = 1, 3784 + .ops = &clk_branch2_ops, 3785 + .flags = CLK_SET_RATE_PARENT, 3786 + } 3787 + } 3788 + }; 3789 + 3790 + static struct clk_branch gcc_venus0_vcodec0_clk = { 3791 + .halt_reg = 0x4c01c, 3792 + .halt_check = BRANCH_HALT, 3793 + .clkr = { 3794 + .enable_reg = 0x4c01c, 3795 + .enable_mask = BIT(0), 3796 + .hw.init = &(struct clk_init_data) { 3797 + .name = "gcc_venus0_vcodec0_clk", 3798 + .parent_hws = (const struct clk_hw*[]){ 3799 + &vcodec0_clk_src.clkr.hw, 3800 + }, 3801 + .num_parents = 1, 3802 + .ops = &clk_branch2_ops, 3803 + .flags = CLK_SET_RATE_PARENT, 3804 + } 3805 + } 3806 + }; 3807 + 3808 + static struct clk_branch gcc_venus_tbu_clk = { 3809 + .halt_reg = 0x12014, 3810 + .halt_check = BRANCH_HALT_VOTED, 3811 + .clkr = { 3812 + .enable_reg = 0x4500c, 3813 + .enable_mask = BIT(5), 3814 + .hw.init = &(struct clk_init_data) { 3815 + .name = "gcc_venus_tbu_clk", 3816 + .ops = &clk_branch2_ops, 3817 + } 3818 + } 3819 + }; 3820 + 3821 + static struct clk_branch gcc_vfe1_tbu_clk = { 3822 + .halt_reg = 0x12090, 3823 + .halt_check = BRANCH_HALT_VOTED, 3824 + .clkr = { 3825 + .enable_reg = 0x4500c, 3826 + .enable_mask = BIT(17), 3827 + .hw.init = &(struct clk_init_data) { 3828 + .name = "gcc_vfe1_tbu_clk", 3829 + .ops = &clk_branch2_ops, 3830 + } 3831 + } 3832 + }; 3833 + 3834 + static struct clk_branch gcc_vfe_tbu_clk = { 3835 + .halt_reg = 0x1203c, 3836 + .halt_check = BRANCH_HALT_VOTED, 3837 + .clkr = { 3838 + .enable_reg = 0x4500c, 3839 + .enable_mask = BIT(9), 3840 + .hw.init = &(struct clk_init_data) { 3841 + .name = "gcc_vfe_tbu_clk", 3842 + .ops = &clk_branch2_ops, 3843 + } 3844 + } 3845 + }; 3846 + 3847 + static struct gdsc usb30_gdsc = { 3848 + .gdscr = 0x3f078, 3849 + .pd = { 3850 + .name = "usb30_gdsc", 3851 + }, 3852 + .pwrsts = PWRSTS_OFF_ON, 3853 + /* 3854 + * FIXME: dwc3 usb gadget cannot resume after GDSC power off 3855 + * dwc3 7000000.dwc3: failed to enable ep0out 3856 + */ 3857 + .flags = ALWAYS_ON, 3858 + }; 3859 + 3860 + static struct gdsc venus_gdsc = { 3861 + .gdscr = 0x4c018, 3862 + .cxcs = (unsigned int []){ 0x4c024, 0x4c01c }, 3863 + .cxc_count = 2, 3864 + .pd = { 3865 + .name = "venus_gdsc", 3866 + }, 3867 + .pwrsts = PWRSTS_OFF_ON, 3868 + }; 3869 + 3870 + static struct gdsc venus_core0_gdsc = { 3871 + .gdscr = 0x4c028, 3872 + .cxcs = (unsigned int []){ 0x4c02c }, 3873 + .cxc_count = 1, 3874 + .pd = { 3875 + .name = "venus_core0", 3876 + }, 3877 + .flags = HW_CTRL, 3878 + .pwrsts = PWRSTS_OFF_ON, 3879 + }; 3880 + 3881 + static struct gdsc mdss_gdsc = { 3882 + .gdscr = 0x4d078, 3883 + .cxcs = (unsigned int []){ 0x4d080, 0x4d088 }, 3884 + .cxc_count = 2, 3885 + .pd = { 3886 + .name = "mdss_gdsc", 3887 + }, 3888 + .pwrsts = PWRSTS_OFF_ON, 3889 + }; 3890 + 3891 + static struct gdsc jpeg_gdsc = { 3892 + .gdscr = 0x5701c, 3893 + .cxcs = (unsigned int []){ 0x57020, 0x57028 }, 3894 + .cxc_count = 2, 3895 + .pd = { 3896 + .name = "jpeg_gdsc", 3897 + }, 3898 + .pwrsts = PWRSTS_OFF_ON, 3899 + }; 3900 + 3901 + static struct gdsc vfe0_gdsc = { 3902 + .gdscr = 0x58034, 3903 + .cxcs = (unsigned int []){ 0x58038, 0x58048, 0x5600c, 0x58050 }, 3904 + .cxc_count = 4, 3905 + .pd = { 3906 + .name = "vfe0_gdsc", 3907 + }, 3908 + .pwrsts = PWRSTS_OFF_ON, 3909 + }; 3910 + 3911 + static struct gdsc vfe1_gdsc = { 3912 + .gdscr = 0x5806c, 3913 + .cxcs = (unsigned int []){ 0x5805c, 0x58068, 0x5600c, 0x58074 }, 3914 + .cxc_count = 4, 3915 + .pd = { 3916 + .name = "vfe1_gdsc", 3917 + }, 3918 + .pwrsts = PWRSTS_OFF_ON, 3919 + }; 3920 + 3921 + static struct gdsc oxili_gx_gdsc = { 3922 + .gdscr = 0x5901c, 3923 + .clamp_io_ctrl = 0x5b00c, 3924 + .cxcs = (unsigned int []){ 0x59000, 0x59024 }, 3925 + .cxc_count = 2, 3926 + .pd = { 3927 + .name = "oxili_gx_gdsc", 3928 + }, 3929 + .pwrsts = PWRSTS_OFF_ON, 3930 + .flags = CLAMP_IO, 3931 + }; 3932 + 3933 + static struct gdsc oxili_cx_gdsc = { 3934 + .gdscr = 0x5904c, 3935 + .cxcs = (unsigned int []){ 0x59020 }, 3936 + .cxc_count = 1, 3937 + .pd = { 3938 + .name = "oxili_cx_gdsc", 3939 + }, 3940 + .pwrsts = PWRSTS_OFF_ON, 3941 + }; 3942 + 3943 + static struct gdsc cpp_gdsc = { 3944 + .gdscr = 0x58078, 3945 + .cxcs = (unsigned int []){ 0x5803c, 0x58064 }, 3946 + .cxc_count = 2, 3947 + .pd = { 3948 + .name = "cpp_gdsc", 3949 + }, 3950 + .flags = ALWAYS_ON, 3951 + .pwrsts = PWRSTS_OFF_ON, 3952 + }; 3953 + 3954 + static struct clk_hw *gcc_msm8953_hws[] = { 3955 + &gpll0_early_div.hw, 3956 + &gpll6_early_div.hw, 3957 + }; 3958 + 3959 + static struct clk_regmap *gcc_msm8953_clocks[] = { 3960 + [GPLL0] = &gpll0.clkr, 3961 + [GPLL0_EARLY] = &gpll0_early.clkr, 3962 + [GPLL2] = &gpll2.clkr, 3963 + [GPLL2_EARLY] = &gpll2_early.clkr, 3964 + [GPLL3] = &gpll3.clkr, 3965 + [GPLL3_EARLY] = &gpll3_early.clkr, 3966 + [GPLL4] = &gpll4.clkr, 3967 + [GPLL4_EARLY] = &gpll4_early.clkr, 3968 + [GPLL6] = &gpll6.clkr, 3969 + [GPLL6_EARLY] = &gpll6_early.clkr, 3970 + [GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr, 3971 + [GCC_APSS_AXI_CLK] = &gcc_apss_axi_clk.clkr, 3972 + [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr, 3973 + [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr, 3974 + [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 3975 + [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr, 3976 + [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr, 3977 + [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr, 3978 + [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 3979 + [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr, 3980 + [GCC_APSS_TCU_ASYNC_CLK] = &gcc_apss_tcu_async_clk.clkr, 3981 + [GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr, 3982 + [GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr, 3983 + [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr, 3984 + [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr, 3985 + [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr, 3986 + [GCC_VFE1_TBU_CLK] = &gcc_vfe1_tbu_clk.clkr, 3987 + [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr, 3988 + [CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr, 3989 + [CSI0_CLK_SRC] = &csi0_clk_src.clkr, 3990 + [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr, 3991 + [CSI1_CLK_SRC] = &csi1_clk_src.clkr, 3992 + [CSI2_CLK_SRC] = &csi2_clk_src.clkr, 3993 + [VFE0_CLK_SRC] = &vfe0_clk_src.clkr, 3994 + [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr, 3995 + [CPP_CLK_SRC] = &cpp_clk_src.clkr, 3996 + [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr, 3997 + [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr, 3998 + [VFE1_CLK_SRC] = &vfe1_clk_src.clkr, 3999 + [APC0_DROOP_DETECTOR_CLK_SRC] = &apc0_droop_detector_clk_src.clkr, 4000 + [APC1_DROOP_DETECTOR_CLK_SRC] = &apc1_droop_detector_clk_src.clkr, 4001 + [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr, 4002 + [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr, 4003 + [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr, 4004 + [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr, 4005 + [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr, 4006 + [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr, 4007 + [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr, 4008 + [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr, 4009 + [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr, 4010 + [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr, 4011 + [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr, 4012 + [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr, 4013 + [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr, 4014 + [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr, 4015 + [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr, 4016 + [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr, 4017 + [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr, 4018 + [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr, 4019 + [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr, 4020 + [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr, 4021 + [CCI_CLK_SRC] = &cci_clk_src.clkr, 4022 + [CSI0P_CLK_SRC] = &csi0p_clk_src.clkr, 4023 + [CSI1P_CLK_SRC] = &csi1p_clk_src.clkr, 4024 + [CSI2P_CLK_SRC] = &csi2p_clk_src.clkr, 4025 + [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr, 4026 + [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr, 4027 + [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr, 4028 + [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr, 4029 + [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr, 4030 + [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr, 4031 + [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr, 4032 + [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr, 4033 + [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr, 4034 + [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr, 4035 + [GP1_CLK_SRC] = &gp1_clk_src.clkr, 4036 + [GP2_CLK_SRC] = &gp2_clk_src.clkr, 4037 + [GP3_CLK_SRC] = &gp3_clk_src.clkr, 4038 + [PDM2_CLK_SRC] = &pdm2_clk_src.clkr, 4039 + [RBCPR_GFX_CLK_SRC] = &rbcpr_gfx_clk_src.clkr, 4040 + [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr, 4041 + [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr, 4042 + [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr, 4043 + [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr, 4044 + [USB3_AUX_CLK_SRC] = &usb3_aux_clk_src.clkr, 4045 + [GCC_APC0_DROOP_DETECTOR_GPLL0_CLK] = &gcc_apc0_droop_detector_gpll0_clk.clkr, 4046 + [GCC_APC1_DROOP_DETECTOR_GPLL0_CLK] = &gcc_apc1_droop_detector_gpll0_clk.clkr, 4047 + [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr, 4048 + [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr, 4049 + [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr, 4050 + [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr, 4051 + [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr, 4052 + [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr, 4053 + [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr, 4054 + [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr, 4055 + [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr, 4056 + [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr, 4057 + [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr, 4058 + [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr, 4059 + [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr, 4060 + [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr, 4061 + [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr, 4062 + [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr, 4063 + [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr, 4064 + [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr, 4065 + [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr, 4066 + [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr, 4067 + [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr, 4068 + [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr, 4069 + [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr, 4070 + [GCC_CAMSS_CPP_AXI_CLK] = &gcc_camss_cpp_axi_clk.clkr, 4071 + [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr, 4072 + [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr, 4073 + [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr, 4074 + [GCC_CAMSS_CSI0_CSIPHY_3P_CLK] = &gcc_camss_csi0_csiphy_3p_clk.clkr, 4075 + [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr, 4076 + [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr, 4077 + [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr, 4078 + [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr, 4079 + [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr, 4080 + [GCC_CAMSS_CSI1_CSIPHY_3P_CLK] = &gcc_camss_csi1_csiphy_3p_clk.clkr, 4081 + [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr, 4082 + [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr, 4083 + [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr, 4084 + [GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr, 4085 + [GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr, 4086 + [GCC_CAMSS_CSI2_CSIPHY_3P_CLK] = &gcc_camss_csi2_csiphy_3p_clk.clkr, 4087 + [GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr, 4088 + [GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr, 4089 + [GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr, 4090 + [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr, 4091 + [GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr, 4092 + [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr, 4093 + [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr, 4094 + [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr, 4095 + [GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr, 4096 + [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr, 4097 + [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr, 4098 + [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr, 4099 + [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr, 4100 + [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr, 4101 + [GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr, 4102 + [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr, 4103 + [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr, 4104 + [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr, 4105 + [GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr, 4106 + [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr, 4107 + [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr, 4108 + [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr, 4109 + [GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr, 4110 + [GCC_CAMSS_VFE0_AXI_CLK] = &gcc_camss_vfe0_axi_clk.clkr, 4111 + [GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr, 4112 + [GCC_CAMSS_VFE1_AXI_CLK] = &gcc_camss_vfe1_axi_clk.clkr, 4113 + [GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr, 4114 + [GCC_DCC_CLK] = &gcc_dcc_clk.clkr, 4115 + [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 4116 + [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 4117 + [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 4118 + [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr, 4119 + [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr, 4120 + [GCC_PCNOC_USB3_AXI_CLK] = &gcc_pcnoc_usb3_axi_clk.clkr, 4121 + [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 4122 + [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 4123 + [GCC_RBCPR_GFX_CLK] = &gcc_rbcpr_gfx_clk.clkr, 4124 + [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 4125 + [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 4126 + [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr, 4127 + [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 4128 + [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 4129 + [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr, 4130 + [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr, 4131 + [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr, 4132 + [GCC_USB3_AUX_CLK] = &gcc_usb3_aux_clk.clkr, 4133 + [GCC_USB_PHY_CFG_AHB_CLK] = &gcc_usb_phy_cfg_ahb_clk.clkr, 4134 + [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr, 4135 + [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr, 4136 + [GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr, 4137 + [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr, 4138 + [GCC_QUSB_REF_CLK] = &gcc_qusb_ref_clk.clkr, 4139 + [GCC_USB_SS_REF_CLK] = &gcc_usb_ss_ref_clk.clkr, 4140 + [GCC_USB3_PIPE_CLK] = &gcc_usb3_pipe_clk.clkr, 4141 + [MDP_CLK_SRC] = &mdp_clk_src.clkr, 4142 + [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr, 4143 + [BYTE0_CLK_SRC] = &byte0_clk_src.clkr, 4144 + [ESC0_CLK_SRC] = &esc0_clk_src.clkr, 4145 + [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr, 4146 + [BYTE1_CLK_SRC] = &byte1_clk_src.clkr, 4147 + [ESC1_CLK_SRC] = &esc1_clk_src.clkr, 4148 + [VSYNC_CLK_SRC] = &vsync_clk_src.clkr, 4149 + [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr, 4150 + [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr, 4151 + [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr, 4152 + [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr, 4153 + [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr, 4154 + [GCC_MDSS_PCLK1_CLK] = &gcc_mdss_pclk1_clk.clkr, 4155 + [GCC_MDSS_BYTE1_CLK] = &gcc_mdss_byte1_clk.clkr, 4156 + [GCC_MDSS_ESC1_CLK] = &gcc_mdss_esc1_clk.clkr, 4157 + [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr, 4158 + [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr, 4159 + [GCC_OXILI_TIMER_CLK] = &gcc_oxili_timer_clk.clkr, 4160 + [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr, 4161 + [GCC_OXILI_AON_CLK] = &gcc_oxili_aon_clk.clkr, 4162 + [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr, 4163 + [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr, 4164 + [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr, 4165 + [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr, 4166 + }; 4167 + 4168 + static const struct qcom_reset_map gcc_msm8953_resets[] = { 4169 + [GCC_CAMSS_MICRO_BCR] = { 0x56008 }, 4170 + [GCC_MSS_BCR] = { 0x71000 }, 4171 + [GCC_QUSB2_PHY_BCR] = { 0x4103c }, 4172 + [GCC_USB3PHY_PHY_BCR] = { 0x3f03c }, 4173 + [GCC_USB3_PHY_BCR] = { 0x3f034 }, 4174 + [GCC_USB_30_BCR] = { 0x3f070 }, 4175 + }; 4176 + 4177 + static const struct regmap_config gcc_msm8953_regmap_config = { 4178 + .reg_bits = 32, 4179 + .reg_stride = 4, 4180 + .val_bits = 32, 4181 + .max_register = 0x80000, 4182 + .fast_io = true, 4183 + }; 4184 + 4185 + static struct gdsc *gcc_msm8953_gdscs[] = { 4186 + [CPP_GDSC] = &cpp_gdsc, 4187 + [JPEG_GDSC] = &jpeg_gdsc, 4188 + [MDSS_GDSC] = &mdss_gdsc, 4189 + [OXILI_CX_GDSC] = &oxili_cx_gdsc, 4190 + [OXILI_GX_GDSC] = &oxili_gx_gdsc, 4191 + [USB30_GDSC] = &usb30_gdsc, 4192 + [VENUS_CORE0_GDSC] = &venus_core0_gdsc, 4193 + [VENUS_GDSC] = &venus_gdsc, 4194 + [VFE0_GDSC] = &vfe0_gdsc, 4195 + [VFE1_GDSC] = &vfe1_gdsc, 4196 + }; 4197 + 4198 + static const struct qcom_cc_desc gcc_msm8953_desc = { 4199 + .config = &gcc_msm8953_regmap_config, 4200 + .clks = gcc_msm8953_clocks, 4201 + .num_clks = ARRAY_SIZE(gcc_msm8953_clocks), 4202 + .resets = gcc_msm8953_resets, 4203 + .num_resets = ARRAY_SIZE(gcc_msm8953_resets), 4204 + .gdscs = gcc_msm8953_gdscs, 4205 + .num_gdscs = ARRAY_SIZE(gcc_msm8953_gdscs), 4206 + .clk_hws = gcc_msm8953_hws, 4207 + .num_clk_hws = ARRAY_SIZE(gcc_msm8953_hws), 4208 + }; 4209 + 4210 + static int gcc_msm8953_probe(struct platform_device *pdev) 4211 + { 4212 + struct regmap *regmap; 4213 + 4214 + regmap = qcom_cc_map(pdev, &gcc_msm8953_desc); 4215 + if (IS_ERR(regmap)) 4216 + return PTR_ERR(regmap); 4217 + 4218 + clk_alpha_pll_configure(&gpll3_early, regmap, &gpll3_early_config); 4219 + 4220 + return qcom_cc_really_probe(pdev, &gcc_msm8953_desc, regmap); 4221 + } 4222 + 4223 + static const struct of_device_id gcc_msm8953_match_table[] = { 4224 + { .compatible = "qcom,gcc-msm8953" }, 4225 + {}, 4226 + }; 4227 + 4228 + static struct platform_driver gcc_msm8953_driver = { 4229 + .probe = gcc_msm8953_probe, 4230 + .driver = { 4231 + .name = "gcc-msm8953", 4232 + .of_match_table = gcc_msm8953_match_table, 4233 + .owner = THIS_MODULE, 4234 + }, 4235 + }; 4236 + 4237 + static int __init gcc_msm8953_init(void) 4238 + { 4239 + return platform_driver_register(&gcc_msm8953_driver); 4240 + } 4241 + core_initcall(gcc_msm8953_init); 4242 + 4243 + static void __exit gcc_msm8953_exit(void) 4244 + { 4245 + platform_driver_unregister(&gcc_msm8953_driver); 4246 + } 4247 + module_exit(gcc_msm8953_exit); 4248 + 4249 + MODULE_DESCRIPTION("Qualcomm GCC MSM8953 Driver"); 4250 + MODULE_LICENSE("GPL v2");
+261 -243
drivers/clk/qcom/gcc-sdm660.c
··· 37 37 P_GPLL1_EARLY_DIV, 38 38 }; 39 39 40 - static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div[] = { 41 - { P_XO, 0 }, 42 - { P_GPLL0, 1 }, 43 - { P_GPLL0_EARLY_DIV, 6 }, 44 - }; 45 - 46 - static const char * const gcc_parent_names_xo_gpll0_gpll0_early_div[] = { 47 - "xo", 48 - "gpll0", 49 - "gpll0_early_div", 50 - }; 51 - 52 - static const struct parent_map gcc_parent_map_xo_gpll0[] = { 53 - { P_XO, 0 }, 54 - { P_GPLL0, 1 }, 55 - }; 56 - 57 - static const char * const gcc_parent_names_xo_gpll0[] = { 58 - "xo", 59 - "gpll0", 60 - }; 61 - 62 - static const struct parent_map gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div[] = { 63 - { P_XO, 0 }, 64 - { P_GPLL0, 1 }, 65 - { P_SLEEP_CLK, 5 }, 66 - { P_GPLL0_EARLY_DIV, 6 }, 67 - }; 68 - 69 - static const char * const gcc_parent_names_xo_gpll0_sleep_clk_gpll0_early_div[] = { 70 - "xo", 71 - "gpll0", 72 - "sleep_clk", 73 - "gpll0_early_div", 74 - }; 75 - 76 - static const struct parent_map gcc_parent_map_xo_sleep_clk[] = { 77 - { P_XO, 0 }, 78 - { P_SLEEP_CLK, 5 }, 79 - }; 80 - 81 - static const char * const gcc_parent_names_xo_sleep_clk[] = { 82 - "xo", 83 - "sleep_clk", 84 - }; 85 - 86 - static const struct parent_map gcc_parent_map_xo_gpll4[] = { 87 - { P_XO, 0 }, 88 - { P_GPLL4, 5 }, 89 - }; 90 - 91 - static const char * const gcc_parent_names_xo_gpll4[] = { 92 - "xo", 93 - "gpll4", 94 - }; 95 - 96 - static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div[] = { 97 - { P_XO, 0 }, 98 - { P_GPLL0, 1 }, 99 - { P_GPLL0_EARLY_DIV, 3 }, 100 - { P_GPLL1, 4 }, 101 - { P_GPLL4, 5 }, 102 - { P_GPLL1_EARLY_DIV, 6 }, 103 - }; 104 - 105 - static const char * const gcc_parent_names_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div[] = { 106 - "xo", 107 - "gpll0", 108 - "gpll0_early_div", 109 - "gpll1", 110 - "gpll4", 111 - "gpll1_early_div", 112 - }; 113 - 114 - static const struct parent_map gcc_parent_map_xo_gpll0_gpll4_gpll0_early_div[] = { 115 - { P_XO, 0 }, 116 - { P_GPLL0, 1 }, 117 - { P_GPLL4, 5 }, 118 - { P_GPLL0_EARLY_DIV, 6 }, 119 - }; 120 - 121 - static const char * const gcc_parent_names_xo_gpll0_gpll4_gpll0_early_div[] = { 122 - "xo", 123 - "gpll0", 124 - "gpll4", 125 - "gpll0_early_div", 126 - }; 127 - 128 - static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div_gpll4[] = { 129 - { P_XO, 0 }, 130 - { P_GPLL0, 1 }, 131 - { P_GPLL0_EARLY_DIV, 2 }, 132 - { P_GPLL4, 5 }, 133 - }; 134 - 135 - static const char * const gcc_parent_names_xo_gpll0_gpll0_early_div_gpll4[] = { 136 - "xo", 137 - "gpll0", 138 - "gpll0_early_div", 139 - "gpll4", 140 - }; 141 - 142 40 static struct clk_fixed_factor xo = { 143 41 .mult = 1, 144 42 .div = 1, 145 43 .hw.init = &(struct clk_init_data){ 146 44 .name = "xo", 147 - .parent_names = (const char *[]){ "xo_board" }, 45 + .parent_data = &(const struct clk_parent_data) { 46 + .fw_name = "xo" 47 + }, 148 48 .num_parents = 1, 149 49 .ops = &clk_fixed_factor_ops, 150 50 }, ··· 58 158 .enable_mask = BIT(0), 59 159 .hw.init = &(struct clk_init_data){ 60 160 .name = "gpll0_early", 61 - .parent_names = (const char *[]){ "xo" }, 161 + .parent_data = &(const struct clk_parent_data){ 162 + .fw_name = "xo", 163 + }, 62 164 .num_parents = 1, 63 165 .ops = &clk_alpha_pll_ops, 64 166 }, ··· 72 170 .div = 2, 73 171 .hw.init = &(struct clk_init_data){ 74 172 .name = "gpll0_early_div", 75 - .parent_names = (const char *[]){ "gpll0_early" }, 173 + .parent_hws = (const struct clk_hw*[]){ 174 + &gpll0_early.clkr.hw, 175 + }, 76 176 .num_parents = 1, 77 177 .ops = &clk_fixed_factor_ops, 78 178 }, ··· 85 181 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 86 182 .clkr.hw.init = &(struct clk_init_data){ 87 183 .name = "gpll0", 88 - .parent_names = (const char *[]){ "gpll0_early" }, 184 + .parent_hws = (const struct clk_hw*[]){ 185 + &gpll0_early.clkr.hw, 186 + }, 89 187 .num_parents = 1, 90 188 .ops = &clk_alpha_pll_postdiv_ops, 91 189 }, ··· 101 195 .enable_mask = BIT(1), 102 196 .hw.init = &(struct clk_init_data){ 103 197 .name = "gpll1_early", 104 - .parent_names = (const char *[]){ "xo" }, 198 + .parent_data = &(const struct clk_parent_data){ 199 + .fw_name = "xo", 200 + }, 105 201 .num_parents = 1, 106 202 .ops = &clk_alpha_pll_ops, 107 203 }, ··· 115 207 .div = 2, 116 208 .hw.init = &(struct clk_init_data){ 117 209 .name = "gpll1_early_div", 118 - .parent_names = (const char *[]){ "gpll1_early" }, 210 + .parent_hws = (const struct clk_hw*[]){ 211 + &gpll1_early.clkr.hw, 212 + }, 119 213 .num_parents = 1, 120 214 .ops = &clk_fixed_factor_ops, 121 215 }, ··· 128 218 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 129 219 .clkr.hw.init = &(struct clk_init_data){ 130 220 .name = "gpll1", 131 - .parent_names = (const char *[]){ "gpll1_early" }, 221 + .parent_hws = (const struct clk_hw*[]){ 222 + &gpll1_early.clkr.hw, 223 + }, 132 224 .num_parents = 1, 133 225 .ops = &clk_alpha_pll_postdiv_ops, 134 226 }, ··· 144 232 .enable_mask = BIT(4), 145 233 .hw.init = &(struct clk_init_data){ 146 234 .name = "gpll4_early", 147 - .parent_names = (const char *[]){ "xo" }, 235 + .parent_data = &(const struct clk_parent_data){ 236 + .fw_name = "xo", 237 + }, 148 238 .num_parents = 1, 149 239 .ops = &clk_alpha_pll_ops, 150 240 }, ··· 159 245 .clkr.hw.init = &(struct clk_init_data) 160 246 { 161 247 .name = "gpll4", 162 - .parent_names = (const char *[]) { "gpll4_early" }, 248 + .parent_hws = (const struct clk_hw*[]){ 249 + &gpll4_early.clkr.hw, 250 + }, 163 251 .num_parents = 1, 164 252 .ops = &clk_alpha_pll_postdiv_ops, 165 253 }, 254 + }; 255 + 256 + static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div[] = { 257 + { P_XO, 0 }, 258 + { P_GPLL0, 1 }, 259 + { P_GPLL0_EARLY_DIV, 6 }, 260 + }; 261 + 262 + static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll0_early_div[] = { 263 + { .fw_name = "xo" }, 264 + { .hw = &gpll0.clkr.hw }, 265 + { .hw = &gpll0_early_div.hw }, 266 + }; 267 + 268 + static const struct parent_map gcc_parent_map_xo_gpll0[] = { 269 + { P_XO, 0 }, 270 + { P_GPLL0, 1 }, 271 + }; 272 + 273 + static const struct clk_parent_data gcc_parent_data_xo_gpll0[] = { 274 + { .fw_name = "xo" }, 275 + { .hw = &gpll0.clkr.hw }, 276 + }; 277 + 278 + static const struct parent_map gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div[] = { 279 + { P_XO, 0 }, 280 + { P_GPLL0, 1 }, 281 + { P_SLEEP_CLK, 5 }, 282 + { P_GPLL0_EARLY_DIV, 6 }, 283 + }; 284 + 285 + static const struct clk_parent_data gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div[] = { 286 + { .fw_name = "xo" }, 287 + { .hw = &gpll0.clkr.hw }, 288 + { .fw_name = "sleep_clk" }, 289 + { .hw = &gpll0_early_div.hw }, 290 + }; 291 + 292 + static const struct parent_map gcc_parent_map_xo_sleep_clk[] = { 293 + { P_XO, 0 }, 294 + { P_SLEEP_CLK, 5 }, 295 + }; 296 + 297 + static const struct clk_parent_data gcc_parent_data_xo_sleep_clk[] = { 298 + { .fw_name = "xo" }, 299 + { .fw_name = "sleep_clk" }, 300 + }; 301 + 302 + static const struct parent_map gcc_parent_map_xo_gpll4[] = { 303 + { P_XO, 0 }, 304 + { P_GPLL4, 5 }, 305 + }; 306 + 307 + static const struct clk_parent_data gcc_parent_data_xo_gpll4[] = { 308 + { .fw_name = "xo" }, 309 + { .hw = &gpll4.clkr.hw }, 310 + }; 311 + 312 + static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div[] = { 313 + { P_XO, 0 }, 314 + { P_GPLL0, 1 }, 315 + { P_GPLL0_EARLY_DIV, 3 }, 316 + { P_GPLL1, 4 }, 317 + { P_GPLL4, 5 }, 318 + { P_GPLL1_EARLY_DIV, 6 }, 319 + }; 320 + 321 + static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div[] = { 322 + { .fw_name = "xo" }, 323 + { .hw = &gpll0.clkr.hw }, 324 + { .hw = &gpll0_early_div.hw }, 325 + { .hw = &gpll1.clkr.hw }, 326 + { .hw = &gpll4.clkr.hw }, 327 + { .hw = &gpll1_early_div.hw }, 328 + }; 329 + 330 + static const struct parent_map gcc_parent_map_xo_gpll0_gpll4_gpll0_early_div[] = { 331 + { P_XO, 0 }, 332 + { P_GPLL0, 1 }, 333 + { P_GPLL4, 5 }, 334 + { P_GPLL0_EARLY_DIV, 6 }, 335 + }; 336 + 337 + static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll4_gpll0_early_div[] = { 338 + { .fw_name = "xo" }, 339 + { .hw = &gpll0.clkr.hw }, 340 + { .hw = &gpll4.clkr.hw }, 341 + { .hw = &gpll0_early_div.hw }, 342 + }; 343 + 344 + static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div_gpll4[] = { 345 + { P_XO, 0 }, 346 + { P_GPLL0, 1 }, 347 + { P_GPLL0_EARLY_DIV, 2 }, 348 + { P_GPLL4, 5 }, 349 + }; 350 + 351 + static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll0_early_div_gpll4[] = { 352 + { .fw_name = "xo" }, 353 + { .hw = &gpll0.clkr.hw }, 354 + { .hw = &gpll0_early_div.hw }, 355 + { .hw = &gpll4.clkr.hw }, 166 356 }; 167 357 168 358 static const struct freq_tbl ftbl_blsp1_qup1_i2c_apps_clk_src[] = { ··· 283 265 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 284 266 .clkr.hw.init = &(struct clk_init_data){ 285 267 .name = "blsp1_qup1_i2c_apps_clk_src", 286 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 268 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 287 269 .num_parents = 3, 288 270 .ops = &clk_rcg2_ops, 289 271 }, ··· 308 290 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 309 291 .clkr.hw.init = &(struct clk_init_data){ 310 292 .name = "blsp1_qup1_spi_apps_clk_src", 311 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 293 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 312 294 .num_parents = 3, 313 295 .ops = &clk_rcg2_ops, 314 296 }, ··· 322 304 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 323 305 .clkr.hw.init = &(struct clk_init_data){ 324 306 .name = "blsp1_qup2_i2c_apps_clk_src", 325 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 307 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 326 308 .num_parents = 3, 327 309 .ops = &clk_rcg2_ops, 328 310 }, ··· 336 318 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 337 319 .clkr.hw.init = &(struct clk_init_data){ 338 320 .name = "blsp1_qup2_spi_apps_clk_src", 339 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 321 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 340 322 .num_parents = 3, 341 323 .ops = &clk_rcg2_ops, 342 324 }, ··· 350 332 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 351 333 .clkr.hw.init = &(struct clk_init_data){ 352 334 .name = "blsp1_qup3_i2c_apps_clk_src", 353 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 335 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 354 336 .num_parents = 3, 355 337 .ops = &clk_rcg2_ops, 356 338 }, ··· 364 346 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 365 347 .clkr.hw.init = &(struct clk_init_data){ 366 348 .name = "blsp1_qup3_spi_apps_clk_src", 367 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 349 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 368 350 .num_parents = 3, 369 351 .ops = &clk_rcg2_ops, 370 352 }, ··· 378 360 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 379 361 .clkr.hw.init = &(struct clk_init_data){ 380 362 .name = "blsp1_qup4_i2c_apps_clk_src", 381 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 363 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 382 364 .num_parents = 3, 383 365 .ops = &clk_rcg2_ops, 384 366 }, ··· 392 374 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 393 375 .clkr.hw.init = &(struct clk_init_data){ 394 376 .name = "blsp1_qup4_spi_apps_clk_src", 395 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 377 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 396 378 .num_parents = 3, 397 379 .ops = &clk_rcg2_ops, 398 380 }, ··· 425 407 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 426 408 .clkr.hw.init = &(struct clk_init_data){ 427 409 .name = "blsp1_uart1_apps_clk_src", 428 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 410 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 429 411 .num_parents = 3, 430 412 .ops = &clk_rcg2_ops, 431 413 }, ··· 439 421 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 440 422 .clkr.hw.init = &(struct clk_init_data){ 441 423 .name = "blsp1_uart2_apps_clk_src", 442 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 424 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 443 425 .num_parents = 3, 444 426 .ops = &clk_rcg2_ops, 445 427 }, ··· 453 435 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 454 436 .clkr.hw.init = &(struct clk_init_data){ 455 437 .name = "blsp2_qup1_i2c_apps_clk_src", 456 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 438 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 457 439 .num_parents = 3, 458 440 .ops = &clk_rcg2_ops, 459 441 }, ··· 467 449 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 468 450 .clkr.hw.init = &(struct clk_init_data){ 469 451 .name = "blsp2_qup1_spi_apps_clk_src", 470 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 452 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 471 453 .num_parents = 3, 472 454 .ops = &clk_rcg2_ops, 473 455 }, ··· 481 463 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 482 464 .clkr.hw.init = &(struct clk_init_data){ 483 465 .name = "blsp2_qup2_i2c_apps_clk_src", 484 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 466 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 485 467 .num_parents = 3, 486 468 .ops = &clk_rcg2_ops, 487 469 }, ··· 495 477 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 496 478 .clkr.hw.init = &(struct clk_init_data){ 497 479 .name = "blsp2_qup2_spi_apps_clk_src", 498 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 480 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 499 481 .num_parents = 3, 500 482 .ops = &clk_rcg2_ops, 501 483 }, ··· 509 491 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 510 492 .clkr.hw.init = &(struct clk_init_data){ 511 493 .name = "blsp2_qup3_i2c_apps_clk_src", 512 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 494 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 513 495 .num_parents = 3, 514 496 .ops = &clk_rcg2_ops, 515 497 }, ··· 523 505 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 524 506 .clkr.hw.init = &(struct clk_init_data){ 525 507 .name = "blsp2_qup3_spi_apps_clk_src", 526 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 508 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 527 509 .num_parents = 3, 528 510 .ops = &clk_rcg2_ops, 529 511 }, ··· 537 519 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 538 520 .clkr.hw.init = &(struct clk_init_data){ 539 521 .name = "blsp2_qup4_i2c_apps_clk_src", 540 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 522 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 541 523 .num_parents = 3, 542 524 .ops = &clk_rcg2_ops, 543 525 }, ··· 551 533 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 552 534 .clkr.hw.init = &(struct clk_init_data){ 553 535 .name = "blsp2_qup4_spi_apps_clk_src", 554 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 536 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 555 537 .num_parents = 3, 556 538 .ops = &clk_rcg2_ops, 557 539 }, ··· 565 547 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 566 548 .clkr.hw.init = &(struct clk_init_data){ 567 549 .name = "blsp2_uart1_apps_clk_src", 568 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 550 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 569 551 .num_parents = 3, 570 552 .ops = &clk_rcg2_ops, 571 553 }, ··· 579 561 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 580 562 .clkr.hw.init = &(struct clk_init_data){ 581 563 .name = "blsp2_uart2_apps_clk_src", 582 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 564 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 583 565 .num_parents = 3, 584 566 .ops = &clk_rcg2_ops, 585 567 }, ··· 600 582 .freq_tbl = ftbl_gp1_clk_src, 601 583 .clkr.hw.init = &(struct clk_init_data){ 602 584 .name = "gp1_clk_src", 603 - .parent_names = gcc_parent_names_xo_gpll0_sleep_clk_gpll0_early_div, 585 + .parent_data = gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div, 604 586 .num_parents = 4, 605 587 .ops = &clk_rcg2_ops, 606 588 }, ··· 614 596 .freq_tbl = ftbl_gp1_clk_src, 615 597 .clkr.hw.init = &(struct clk_init_data){ 616 598 .name = "gp2_clk_src", 617 - .parent_names = gcc_parent_names_xo_gpll0_sleep_clk_gpll0_early_div, 599 + .parent_data = gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div, 618 600 .num_parents = 4, 619 601 .ops = &clk_rcg2_ops, 620 602 }, ··· 628 610 .freq_tbl = ftbl_gp1_clk_src, 629 611 .clkr.hw.init = &(struct clk_init_data){ 630 612 .name = "gp3_clk_src", 631 - .parent_names = gcc_parent_names_xo_gpll0_sleep_clk_gpll0_early_div, 613 + .parent_data = gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div, 632 614 .num_parents = 4, 633 615 .ops = &clk_rcg2_ops, 634 616 }, ··· 648 630 .freq_tbl = ftbl_hmss_gpll0_clk_src, 649 631 .clkr.hw.init = &(struct clk_init_data){ 650 632 .name = "hmss_gpll0_clk_src", 651 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 633 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 652 634 .num_parents = 3, 653 635 .ops = &clk_rcg2_ops, 654 636 }, ··· 669 651 .freq_tbl = ftbl_hmss_gpll4_clk_src, 670 652 .clkr.hw.init = &(struct clk_init_data){ 671 653 .name = "hmss_gpll4_clk_src", 672 - .parent_names = gcc_parent_names_xo_gpll4, 654 + .parent_data = gcc_parent_data_xo_gpll4, 673 655 .num_parents = 2, 674 656 .ops = &clk_rcg2_ops, 675 657 }, ··· 688 670 .freq_tbl = ftbl_hmss_rbcpr_clk_src, 689 671 .clkr.hw.init = &(struct clk_init_data){ 690 672 .name = "hmss_rbcpr_clk_src", 691 - .parent_names = gcc_parent_names_xo_gpll0, 673 + .parent_data = gcc_parent_data_xo_gpll0, 692 674 .num_parents = 2, 693 675 .ops = &clk_rcg2_ops, 694 676 }, ··· 707 689 .freq_tbl = ftbl_pdm2_clk_src, 708 690 .clkr.hw.init = &(struct clk_init_data){ 709 691 .name = "pdm2_clk_src", 710 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 692 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 711 693 .num_parents = 3, 712 694 .ops = &clk_rcg2_ops, 713 695 }, ··· 729 711 .freq_tbl = ftbl_qspi_ser_clk_src, 730 712 .clkr.hw.init = &(struct clk_init_data){ 731 713 .name = "qspi_ser_clk_src", 732 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div, 714 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div, 733 715 .num_parents = 6, 734 716 .ops = &clk_rcg2_ops, 735 717 }, ··· 755 737 .freq_tbl = ftbl_sdcc1_apps_clk_src, 756 738 .clkr.hw.init = &(struct clk_init_data){ 757 739 .name = "sdcc1_apps_clk_src", 758 - .parent_names = gcc_parent_names_xo_gpll0_gpll4_gpll0_early_div, 740 + .parent_data = gcc_parent_data_xo_gpll0_gpll4_gpll0_early_div, 759 741 .num_parents = 4, 760 742 .ops = &clk_rcg2_ops, 761 743 }, ··· 777 759 .freq_tbl = ftbl_sdcc1_ice_core_clk_src, 778 760 .clkr.hw.init = &(struct clk_init_data){ 779 761 .name = "sdcc1_ice_core_clk_src", 780 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 762 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 781 763 .num_parents = 3, 782 764 .ops = &clk_rcg2_ops, 783 765 }, ··· 803 785 .freq_tbl = ftbl_sdcc2_apps_clk_src, 804 786 .clkr.hw.init = &(struct clk_init_data){ 805 787 .name = "sdcc2_apps_clk_src", 806 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div_gpll4, 788 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div_gpll4, 807 789 .num_parents = 4, 808 790 .ops = &clk_rcg2_floor_ops, 809 791 }, ··· 826 808 .freq_tbl = ftbl_ufs_axi_clk_src, 827 809 .clkr.hw.init = &(struct clk_init_data){ 828 810 .name = "ufs_axi_clk_src", 829 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 811 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 830 812 .num_parents = 3, 831 813 .ops = &clk_rcg2_ops, 832 814 }, ··· 847 829 .freq_tbl = ftbl_ufs_ice_core_clk_src, 848 830 .clkr.hw.init = &(struct clk_init_data){ 849 831 .name = "ufs_ice_core_clk_src", 850 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 832 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 851 833 .num_parents = 3, 852 834 .ops = &clk_rcg2_ops, 853 835 }, ··· 861 843 .freq_tbl = ftbl_hmss_rbcpr_clk_src, 862 844 .clkr.hw.init = &(struct clk_init_data){ 863 845 .name = "ufs_phy_aux_clk_src", 864 - .parent_names = gcc_parent_names_xo_sleep_clk, 846 + .parent_data = gcc_parent_data_xo_sleep_clk, 865 847 .num_parents = 2, 866 848 .ops = &clk_rcg2_ops, 867 849 }, ··· 882 864 .freq_tbl = ftbl_ufs_unipro_core_clk_src, 883 865 .clkr.hw.init = &(struct clk_init_data){ 884 866 .name = "ufs_unipro_core_clk_src", 885 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 867 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 886 868 .num_parents = 3, 887 869 .ops = &clk_rcg2_ops, 888 870 }, ··· 903 885 .freq_tbl = ftbl_usb20_master_clk_src, 904 886 .clkr.hw.init = &(struct clk_init_data){ 905 887 .name = "usb20_master_clk_src", 906 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 888 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 907 889 .num_parents = 3, 908 890 .ops = &clk_rcg2_ops, 909 891 }, ··· 923 905 .freq_tbl = ftbl_usb20_mock_utmi_clk_src, 924 906 .clkr.hw.init = &(struct clk_init_data){ 925 907 .name = "usb20_mock_utmi_clk_src", 926 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 908 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 927 909 .num_parents = 3, 928 910 .ops = &clk_rcg2_ops, 929 911 }, ··· 948 930 .freq_tbl = ftbl_usb30_master_clk_src, 949 931 .clkr.hw.init = &(struct clk_init_data){ 950 932 .name = "usb30_master_clk_src", 951 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 933 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 952 934 .num_parents = 3, 953 935 .ops = &clk_rcg2_ops, 954 936 }, ··· 969 951 .freq_tbl = ftbl_usb30_mock_utmi_clk_src, 970 952 .clkr.hw.init = &(struct clk_init_data){ 971 953 .name = "usb30_mock_utmi_clk_src", 972 - .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 954 + .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div, 973 955 .num_parents = 3, 974 956 .ops = &clk_rcg2_ops, 975 957 }, ··· 989 971 .freq_tbl = ftbl_usb3_phy_aux_clk_src, 990 972 .clkr.hw.init = &(struct clk_init_data){ 991 973 .name = "usb3_phy_aux_clk_src", 992 - .parent_names = gcc_parent_names_xo_sleep_clk, 974 + .parent_data = gcc_parent_data_xo_sleep_clk, 993 975 .num_parents = 2, 994 976 .ops = &clk_rcg2_ops, 995 977 }, ··· 1003 985 .enable_mask = BIT(0), 1004 986 .hw.init = &(struct clk_init_data){ 1005 987 .name = "gcc_aggre2_ufs_axi_clk", 1006 - .parent_names = (const char *[]){ 1007 - "ufs_axi_clk_src", 988 + .parent_hws = (const struct clk_hw*[]) { 989 + &ufs_axi_clk_src.clkr.hw, 1008 990 }, 1009 991 .num_parents = 1, 1010 992 .ops = &clk_branch2_ops, ··· 1020 1002 .enable_mask = BIT(0), 1021 1003 .hw.init = &(struct clk_init_data){ 1022 1004 .name = "gcc_aggre2_usb3_axi_clk", 1023 - .parent_names = (const char *[]){ 1024 - "usb30_master_clk_src", 1005 + .parent_hws = (const struct clk_hw*[]) { 1006 + &usb30_master_clk_src.clkr.hw, 1025 1007 }, 1026 1008 .num_parents = 1, 1027 1009 .ops = &clk_branch2_ops, ··· 1089 1071 .enable_mask = BIT(0), 1090 1072 .hw.init = &(struct clk_init_data){ 1091 1073 .name = "gcc_blsp1_qup1_i2c_apps_clk", 1092 - .parent_names = (const char *[]){ 1093 - "blsp1_qup1_i2c_apps_clk_src", 1074 + .parent_hws = (const struct clk_hw*[]) { 1075 + &blsp1_qup1_i2c_apps_clk_src.clkr.hw, 1094 1076 }, 1095 1077 .num_parents = 1, 1096 1078 .flags = CLK_SET_RATE_PARENT, ··· 1107 1089 .enable_mask = BIT(0), 1108 1090 .hw.init = &(struct clk_init_data){ 1109 1091 .name = "gcc_blsp1_qup1_spi_apps_clk", 1110 - .parent_names = (const char *[]){ 1111 - "blsp1_qup1_spi_apps_clk_src", 1092 + .parent_hws = (const struct clk_hw*[]) { 1093 + &blsp1_qup1_spi_apps_clk_src.clkr.hw, 1112 1094 }, 1113 1095 .num_parents = 1, 1114 1096 .flags = CLK_SET_RATE_PARENT, ··· 1125 1107 .enable_mask = BIT(0), 1126 1108 .hw.init = &(struct clk_init_data){ 1127 1109 .name = "gcc_blsp1_qup2_i2c_apps_clk", 1128 - .parent_names = (const char *[]){ 1129 - "blsp1_qup2_i2c_apps_clk_src", 1110 + .parent_hws = (const struct clk_hw*[]) { 1111 + &blsp1_qup2_i2c_apps_clk_src.clkr.hw, 1130 1112 }, 1131 1113 .num_parents = 1, 1132 1114 .flags = CLK_SET_RATE_PARENT, ··· 1143 1125 .enable_mask = BIT(0), 1144 1126 .hw.init = &(struct clk_init_data){ 1145 1127 .name = "gcc_blsp1_qup2_spi_apps_clk", 1146 - .parent_names = (const char *[]){ 1147 - "blsp1_qup2_spi_apps_clk_src", 1128 + .parent_hws = (const struct clk_hw*[]) { 1129 + &blsp1_qup2_spi_apps_clk_src.clkr.hw, 1148 1130 }, 1149 1131 .num_parents = 1, 1150 1132 .flags = CLK_SET_RATE_PARENT, ··· 1161 1143 .enable_mask = BIT(0), 1162 1144 .hw.init = &(struct clk_init_data){ 1163 1145 .name = "gcc_blsp1_qup3_i2c_apps_clk", 1164 - .parent_names = (const char *[]){ 1165 - "blsp1_qup3_i2c_apps_clk_src", 1146 + .parent_hws = (const struct clk_hw*[]) { 1147 + &blsp1_qup3_i2c_apps_clk_src.clkr.hw, 1166 1148 }, 1167 1149 .num_parents = 1, 1168 1150 .flags = CLK_SET_RATE_PARENT, ··· 1179 1161 .enable_mask = BIT(0), 1180 1162 .hw.init = &(struct clk_init_data){ 1181 1163 .name = "gcc_blsp1_qup3_spi_apps_clk", 1182 - .parent_names = (const char *[]){ 1183 - "blsp1_qup3_spi_apps_clk_src", 1164 + .parent_hws = (const struct clk_hw*[]) { 1165 + &blsp1_qup3_spi_apps_clk_src.clkr.hw, 1184 1166 }, 1185 1167 .num_parents = 1, 1186 1168 .flags = CLK_SET_RATE_PARENT, ··· 1197 1179 .enable_mask = BIT(0), 1198 1180 .hw.init = &(struct clk_init_data){ 1199 1181 .name = "gcc_blsp1_qup4_i2c_apps_clk", 1200 - .parent_names = (const char *[]){ 1201 - "blsp1_qup4_i2c_apps_clk_src", 1182 + .parent_hws = (const struct clk_hw*[]) { 1183 + &blsp1_qup4_i2c_apps_clk_src.clkr.hw, 1202 1184 }, 1203 1185 .num_parents = 1, 1204 1186 .flags = CLK_SET_RATE_PARENT, ··· 1215 1197 .enable_mask = BIT(0), 1216 1198 .hw.init = &(struct clk_init_data){ 1217 1199 .name = "gcc_blsp1_qup4_spi_apps_clk", 1218 - .parent_names = (const char *[]){ 1219 - "blsp1_qup4_spi_apps_clk_src", 1200 + .parent_hws = (const struct clk_hw*[]) { 1201 + &blsp1_qup4_spi_apps_clk_src.clkr.hw, 1220 1202 }, 1221 1203 .num_parents = 1, 1222 1204 .flags = CLK_SET_RATE_PARENT, ··· 1233 1215 .enable_mask = BIT(0), 1234 1216 .hw.init = &(struct clk_init_data){ 1235 1217 .name = "gcc_blsp1_uart1_apps_clk", 1236 - .parent_names = (const char *[]){ 1237 - "blsp1_uart1_apps_clk_src", 1218 + .parent_hws = (const struct clk_hw*[]) { 1219 + &blsp1_uart1_apps_clk_src.clkr.hw, 1238 1220 }, 1239 1221 .num_parents = 1, 1240 1222 .flags = CLK_SET_RATE_PARENT, ··· 1251 1233 .enable_mask = BIT(0), 1252 1234 .hw.init = &(struct clk_init_data){ 1253 1235 .name = "gcc_blsp1_uart2_apps_clk", 1254 - .parent_names = (const char *[]){ 1255 - "blsp1_uart2_apps_clk_src", 1236 + .parent_hws = (const struct clk_hw*[]) { 1237 + &blsp1_uart2_apps_clk_src.clkr.hw, 1256 1238 }, 1257 1239 .num_parents = 1, 1258 1240 .flags = CLK_SET_RATE_PARENT, ··· 1282 1264 .enable_mask = BIT(0), 1283 1265 .hw.init = &(struct clk_init_data){ 1284 1266 .name = "gcc_blsp2_qup1_i2c_apps_clk", 1285 - .parent_names = (const char *[]){ 1286 - "blsp2_qup1_i2c_apps_clk_src", 1267 + .parent_hws = (const struct clk_hw*[]) { 1268 + &blsp2_qup1_i2c_apps_clk_src.clkr.hw, 1287 1269 }, 1288 1270 .num_parents = 1, 1289 1271 .flags = CLK_SET_RATE_PARENT, ··· 1300 1282 .enable_mask = BIT(0), 1301 1283 .hw.init = &(struct clk_init_data){ 1302 1284 .name = "gcc_blsp2_qup1_spi_apps_clk", 1303 - .parent_names = (const char *[]){ 1304 - "blsp2_qup1_spi_apps_clk_src", 1285 + .parent_hws = (const struct clk_hw*[]) { 1286 + &blsp2_qup1_spi_apps_clk_src.clkr.hw, 1305 1287 }, 1306 1288 .num_parents = 1, 1307 1289 .flags = CLK_SET_RATE_PARENT, ··· 1318 1300 .enable_mask = BIT(0), 1319 1301 .hw.init = &(struct clk_init_data){ 1320 1302 .name = "gcc_blsp2_qup2_i2c_apps_clk", 1321 - .parent_names = (const char *[]){ 1322 - "blsp2_qup2_i2c_apps_clk_src", 1303 + .parent_hws = (const struct clk_hw*[]) { 1304 + &blsp2_qup2_i2c_apps_clk_src.clkr.hw, 1323 1305 }, 1324 1306 .num_parents = 1, 1325 1307 .flags = CLK_SET_RATE_PARENT, ··· 1336 1318 .enable_mask = BIT(0), 1337 1319 .hw.init = &(struct clk_init_data){ 1338 1320 .name = "gcc_blsp2_qup2_spi_apps_clk", 1339 - .parent_names = (const char *[]){ 1340 - "blsp2_qup2_spi_apps_clk_src", 1321 + .parent_hws = (const struct clk_hw*[]) { 1322 + &blsp2_qup2_spi_apps_clk_src.clkr.hw, 1341 1323 }, 1342 1324 .num_parents = 1, 1343 1325 .flags = CLK_SET_RATE_PARENT, ··· 1354 1336 .enable_mask = BIT(0), 1355 1337 .hw.init = &(struct clk_init_data){ 1356 1338 .name = "gcc_blsp2_qup3_i2c_apps_clk", 1357 - .parent_names = (const char *[]){ 1358 - "blsp2_qup3_i2c_apps_clk_src", 1339 + .parent_hws = (const struct clk_hw*[]) { 1340 + &blsp2_qup3_i2c_apps_clk_src.clkr.hw, 1359 1341 }, 1360 1342 .num_parents = 1, 1361 1343 .flags = CLK_SET_RATE_PARENT, ··· 1372 1354 .enable_mask = BIT(0), 1373 1355 .hw.init = &(struct clk_init_data){ 1374 1356 .name = "gcc_blsp2_qup3_spi_apps_clk", 1375 - .parent_names = (const char *[]){ 1376 - "blsp2_qup3_spi_apps_clk_src", 1357 + .parent_hws = (const struct clk_hw*[]) { 1358 + &blsp2_qup3_spi_apps_clk_src.clkr.hw, 1377 1359 }, 1378 1360 .num_parents = 1, 1379 1361 .flags = CLK_SET_RATE_PARENT, ··· 1390 1372 .enable_mask = BIT(0), 1391 1373 .hw.init = &(struct clk_init_data){ 1392 1374 .name = "gcc_blsp2_qup4_i2c_apps_clk", 1393 - .parent_names = (const char *[]){ 1394 - "blsp2_qup4_i2c_apps_clk_src", 1375 + .parent_hws = (const struct clk_hw*[]) { 1376 + &blsp2_qup4_i2c_apps_clk_src.clkr.hw, 1395 1377 }, 1396 1378 .num_parents = 1, 1397 1379 .flags = CLK_SET_RATE_PARENT, ··· 1408 1390 .enable_mask = BIT(0), 1409 1391 .hw.init = &(struct clk_init_data){ 1410 1392 .name = "gcc_blsp2_qup4_spi_apps_clk", 1411 - .parent_names = (const char *[]){ 1412 - "blsp2_qup4_spi_apps_clk_src", 1393 + .parent_hws = (const struct clk_hw*[]) { 1394 + &blsp2_qup4_spi_apps_clk_src.clkr.hw, 1413 1395 }, 1414 1396 .num_parents = 1, 1415 1397 .flags = CLK_SET_RATE_PARENT, ··· 1426 1408 .enable_mask = BIT(0), 1427 1409 .hw.init = &(struct clk_init_data){ 1428 1410 .name = "gcc_blsp2_uart1_apps_clk", 1429 - .parent_names = (const char *[]){ 1430 - "blsp2_uart1_apps_clk_src", 1411 + .parent_hws = (const struct clk_hw*[]) { 1412 + &blsp2_uart1_apps_clk_src.clkr.hw, 1431 1413 }, 1432 1414 .num_parents = 1, 1433 1415 .flags = CLK_SET_RATE_PARENT, ··· 1444 1426 .enable_mask = BIT(0), 1445 1427 .hw.init = &(struct clk_init_data){ 1446 1428 .name = "gcc_blsp2_uart2_apps_clk", 1447 - .parent_names = (const char *[]){ 1448 - "blsp2_uart2_apps_clk_src", 1429 + .parent_hws = (const struct clk_hw*[]) { 1430 + &blsp2_uart2_apps_clk_src.clkr.hw, 1449 1431 }, 1450 1432 .num_parents = 1, 1451 1433 .flags = CLK_SET_RATE_PARENT, ··· 1475 1457 .enable_mask = BIT(0), 1476 1458 .hw.init = &(struct clk_init_data){ 1477 1459 .name = "gcc_cfg_noc_usb2_axi_clk", 1478 - .parent_names = (const char *[]){ 1479 - "usb20_master_clk_src", 1460 + .parent_hws = (const struct clk_hw*[]) { 1461 + &usb20_master_clk_src.clkr.hw, 1480 1462 }, 1481 1463 .num_parents = 1, 1482 1464 .ops = &clk_branch2_ops, ··· 1492 1474 .enable_mask = BIT(0), 1493 1475 .hw.init = &(struct clk_init_data){ 1494 1476 .name = "gcc_cfg_noc_usb3_axi_clk", 1495 - .parent_names = (const char *[]){ 1496 - "usb30_master_clk_src", 1477 + .parent_hws = (const struct clk_hw*[]) { 1478 + &usb30_master_clk_src.clkr.hw, 1497 1479 }, 1498 1480 .num_parents = 1, 1499 1481 .ops = &clk_branch2_ops, ··· 1521 1503 .enable_mask = BIT(0), 1522 1504 .hw.init = &(struct clk_init_data){ 1523 1505 .name = "gcc_gp1_clk", 1524 - .parent_names = (const char *[]){ 1525 - "gp1_clk_src", 1506 + .parent_hws = (const struct clk_hw*[]) { 1507 + &gp1_clk_src.clkr.hw, 1526 1508 }, 1527 1509 .num_parents = 1, 1528 1510 .flags = CLK_SET_RATE_PARENT, ··· 1539 1521 .enable_mask = BIT(0), 1540 1522 .hw.init = &(struct clk_init_data){ 1541 1523 .name = "gcc_gp2_clk", 1542 - .parent_names = (const char *[]){ 1543 - "gp2_clk_src", 1524 + .parent_hws = (const struct clk_hw*[]) { 1525 + &gp2_clk_src.clkr.hw, 1544 1526 }, 1545 1527 .num_parents = 1, 1546 1528 .flags = CLK_SET_RATE_PARENT, ··· 1557 1539 .enable_mask = BIT(0), 1558 1540 .hw.init = &(struct clk_init_data){ 1559 1541 .name = "gcc_gp3_clk", 1560 - .parent_names = (const char *[]){ 1561 - "gp3_clk_src", 1542 + .parent_hws = (const struct clk_hw*[]) { 1543 + &gp3_clk_src.clkr.hw, 1562 1544 }, 1563 1545 .num_parents = 1, 1564 1546 .flags = CLK_SET_RATE_PARENT, ··· 1602 1584 .enable_mask = BIT(4), 1603 1585 .hw.init = &(struct clk_init_data){ 1604 1586 .name = "gcc_gpu_gpll0_clk", 1605 - .parent_names = (const char *[]){ 1606 - "gpll0", 1587 + .parent_hws = (const struct clk_hw*[]) { 1588 + &gpll0.clkr.hw, 1607 1589 }, 1608 1590 .num_parents = 1, 1609 1591 .ops = &clk_branch2_ops, ··· 1619 1601 .enable_mask = BIT(3), 1620 1602 .hw.init = &(struct clk_init_data){ 1621 1603 .name = "gcc_gpu_gpll0_div_clk", 1622 - .parent_names = (const char *[]){ 1623 - "gpll0_early_div", 1604 + .parent_hws = (const struct clk_hw*[]) { 1605 + &gpll0_early_div.hw, 1624 1606 }, 1625 1607 .num_parents = 1, 1626 1608 .ops = &clk_branch2_ops, ··· 1650 1632 .enable_mask = BIT(0), 1651 1633 .hw.init = &(struct clk_init_data){ 1652 1634 .name = "gcc_hmss_rbcpr_clk", 1653 - .parent_names = (const char *[]){ 1654 - "hmss_rbcpr_clk_src", 1635 + .parent_hws = (const struct clk_hw*[]) { 1636 + &hmss_rbcpr_clk_src.clkr.hw, 1655 1637 }, 1656 1638 .num_parents = 1, 1657 1639 .flags = CLK_SET_RATE_PARENT, ··· 1668 1650 .enable_mask = BIT(1), 1669 1651 .hw.init = &(struct clk_init_data){ 1670 1652 .name = "gcc_mmss_gpll0_clk", 1671 - .parent_names = (const char *[]){ 1672 - "gpll0", 1653 + .parent_hws = (const struct clk_hw*[]) { 1654 + &gpll0.clkr.hw, 1673 1655 }, 1674 1656 .num_parents = 1, 1675 1657 .ops = &clk_branch2_ops, ··· 1685 1667 .enable_mask = BIT(0), 1686 1668 .hw.init = &(struct clk_init_data){ 1687 1669 .name = "gcc_mmss_gpll0_div_clk", 1688 - .parent_names = (const char *[]){ 1689 - "gpll0_early_div", 1670 + .parent_hws = (const struct clk_hw*[]) { 1671 + &gpll0_early_div.hw, 1690 1672 }, 1691 1673 .num_parents = 1, 1692 1674 .ops = &clk_branch2_ops, ··· 1785 1767 .enable_mask = BIT(0), 1786 1768 .hw.init = &(struct clk_init_data){ 1787 1769 .name = "gcc_pdm2_clk", 1788 - .parent_names = (const char *[]){ 1789 - "pdm2_clk_src", 1770 + .parent_hws = (const struct clk_hw*[]) { 1771 + &pdm2_clk_src.clkr.hw, 1790 1772 }, 1791 1773 .num_parents = 1, 1792 1774 .flags = CLK_SET_RATE_PARENT, ··· 1842 1824 .enable_mask = BIT(0), 1843 1825 .hw.init = &(struct clk_init_data){ 1844 1826 .name = "gcc_qspi_ser_clk", 1845 - .parent_names = (const char *[]){ 1846 - "qspi_ser_clk_src", 1827 + .parent_hws = (const struct clk_hw*[]) { 1828 + &qspi_ser_clk_src.clkr.hw, 1847 1829 }, 1848 1830 .num_parents = 1, 1849 1831 .flags = CLK_SET_RATE_PARENT, ··· 1899 1881 .enable_mask = BIT(0), 1900 1882 .hw.init = &(struct clk_init_data){ 1901 1883 .name = "gcc_sdcc1_apps_clk", 1902 - .parent_names = (const char *[]){ 1903 - "sdcc1_apps_clk_src", 1884 + .parent_hws = (const struct clk_hw*[]) { 1885 + &sdcc1_apps_clk_src.clkr.hw, 1904 1886 }, 1905 1887 .num_parents = 1, 1906 1888 .flags = CLK_SET_RATE_PARENT, ··· 1917 1899 .enable_mask = BIT(0), 1918 1900 .hw.init = &(struct clk_init_data){ 1919 1901 .name = "gcc_sdcc1_ice_core_clk", 1920 - .parent_names = (const char *[]){ 1921 - "sdcc1_ice_core_clk_src", 1902 + .parent_hws = (const struct clk_hw*[]) { 1903 + &sdcc1_ice_core_clk_src.clkr.hw, 1922 1904 }, 1923 1905 .num_parents = 1, 1924 1906 .flags = CLK_SET_RATE_PARENT, ··· 1948 1930 .enable_mask = BIT(0), 1949 1931 .hw.init = &(struct clk_init_data){ 1950 1932 .name = "gcc_sdcc2_apps_clk", 1951 - .parent_names = (const char *[]){ 1952 - "sdcc2_apps_clk_src", 1933 + .parent_hws = (const struct clk_hw*[]) { 1934 + &sdcc2_apps_clk_src.clkr.hw, 1953 1935 }, 1954 1936 .num_parents = 1, 1955 1937 .flags = CLK_SET_RATE_PARENT, ··· 1979 1961 .enable_mask = BIT(0), 1980 1962 .hw.init = &(struct clk_init_data){ 1981 1963 .name = "gcc_ufs_axi_clk", 1982 - .parent_names = (const char *[]){ 1983 - "ufs_axi_clk_src", 1964 + .parent_hws = (const struct clk_hw*[]) { 1965 + &ufs_axi_clk_src.clkr.hw, 1984 1966 }, 1985 1967 .num_parents = 1, 1986 1968 .flags = CLK_SET_RATE_PARENT, ··· 2010 1992 .enable_mask = BIT(0), 2011 1993 .hw.init = &(struct clk_init_data){ 2012 1994 .name = "gcc_ufs_ice_core_clk", 2013 - .parent_names = (const char *[]){ 2014 - "ufs_ice_core_clk_src", 1995 + .parent_hws = (const struct clk_hw*[]) { 1996 + &ufs_ice_core_clk_src.clkr.hw, 2015 1997 }, 2016 1998 .num_parents = 1, 2017 1999 .flags = CLK_SET_RATE_PARENT, ··· 2028 2010 .enable_mask = BIT(0), 2029 2011 .hw.init = &(struct clk_init_data){ 2030 2012 .name = "gcc_ufs_phy_aux_clk", 2031 - .parent_names = (const char *[]){ 2032 - "ufs_phy_aux_clk_src", 2013 + .parent_hws = (const struct clk_hw*[]) { 2014 + &ufs_phy_aux_clk_src.clkr.hw, 2033 2015 }, 2034 2016 .num_parents = 1, 2035 2017 .flags = CLK_SET_RATE_PARENT, ··· 2085 2067 .enable_mask = BIT(0), 2086 2068 .hw.init = &(struct clk_init_data){ 2087 2069 .name = "gcc_ufs_unipro_core_clk", 2088 - .parent_names = (const char *[]){ 2089 - "ufs_unipro_core_clk_src", 2070 + .parent_hws = (const struct clk_hw*[]) { 2071 + &ufs_unipro_core_clk_src.clkr.hw, 2090 2072 }, 2091 2073 .flags = CLK_SET_RATE_PARENT, 2092 2074 .num_parents = 1, ··· 2103 2085 .enable_mask = BIT(0), 2104 2086 .hw.init = &(struct clk_init_data){ 2105 2087 .name = "gcc_usb20_master_clk", 2106 - .parent_names = (const char *[]){ 2107 - "usb20_master_clk_src" 2088 + .parent_hws = (const struct clk_hw*[]) { 2089 + &usb20_master_clk_src.clkr.hw, 2108 2090 }, 2109 2091 .flags = CLK_SET_RATE_PARENT, 2110 2092 .num_parents = 1, ··· 2121 2103 .enable_mask = BIT(0), 2122 2104 .hw.init = &(struct clk_init_data){ 2123 2105 .name = "gcc_usb20_mock_utmi_clk", 2124 - .parent_names = (const char *[]){ 2125 - "usb20_mock_utmi_clk_src", 2106 + .parent_hws = (const struct clk_hw*[]) { 2107 + &usb20_mock_utmi_clk_src.clkr.hw, 2126 2108 }, 2127 2109 .num_parents = 1, 2128 2110 .flags = CLK_SET_RATE_PARENT, ··· 2152 2134 .enable_mask = BIT(0), 2153 2135 .hw.init = &(struct clk_init_data){ 2154 2136 .name = "gcc_usb30_master_clk", 2155 - .parent_names = (const char *[]){ 2156 - "usb30_master_clk_src", 2137 + .parent_hws = (const struct clk_hw*[]) { 2138 + &usb30_master_clk_src.clkr.hw, 2157 2139 }, 2158 2140 .num_parents = 1, 2159 2141 .flags = CLK_SET_RATE_PARENT, ··· 2170 2152 .enable_mask = BIT(0), 2171 2153 .hw.init = &(struct clk_init_data){ 2172 2154 .name = "gcc_usb30_mock_utmi_clk", 2173 - .parent_names = (const char *[]){ 2174 - "usb30_mock_utmi_clk_src", 2155 + .parent_hws = (const struct clk_hw*[]) { 2156 + &usb30_mock_utmi_clk_src.clkr.hw, 2175 2157 }, 2176 2158 .num_parents = 1, 2177 2159 .flags = CLK_SET_RATE_PARENT, ··· 2214 2196 .enable_mask = BIT(0), 2215 2197 .hw.init = &(struct clk_init_data){ 2216 2198 .name = "gcc_usb3_phy_aux_clk", 2217 - .parent_names = (const char *[]){ 2218 - "usb3_phy_aux_clk_src", 2199 + .parent_hws = (const struct clk_hw*[]) { 2200 + &usb3_phy_aux_clk_src.clkr.hw, 2219 2201 }, 2220 2202 .num_parents = 1, 2221 2203 .flags = CLK_SET_RATE_PARENT,
+3544
drivers/clk/qcom/gcc-sm6115.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * Copyright (c) 2019-2021, The Linux Foundation. All rights reserved. 4 + */ 5 + 6 + #include <linux/err.h> 7 + #include <linux/kernel.h> 8 + #include <linux/module.h> 9 + #include <linux/of_device.h> 10 + #include <linux/clk-provider.h> 11 + #include <linux/regmap.h> 12 + #include <linux/reset-controller.h> 13 + 14 + #include <dt-bindings/clock/qcom,gcc-sm6115.h> 15 + 16 + #include "clk-alpha-pll.h" 17 + #include "clk-branch.h" 18 + #include "clk-pll.h" 19 + #include "clk-rcg.h" 20 + #include "clk-regmap.h" 21 + #include "clk-regmap-divider.h" 22 + #include "common.h" 23 + #include "gdsc.h" 24 + #include "reset.h" 25 + 26 + enum { 27 + P_BI_TCXO, 28 + P_GPLL0_OUT_AUX2, 29 + P_GPLL0_OUT_EARLY, 30 + P_GPLL10_OUT_MAIN, 31 + P_GPLL11_OUT_MAIN, 32 + P_GPLL3_OUT_EARLY, 33 + P_GPLL4_OUT_MAIN, 34 + P_GPLL6_OUT_EARLY, 35 + P_GPLL6_OUT_MAIN, 36 + P_GPLL7_OUT_MAIN, 37 + P_GPLL8_OUT_EARLY, 38 + P_GPLL8_OUT_MAIN, 39 + P_GPLL9_OUT_EARLY, 40 + P_GPLL9_OUT_MAIN, 41 + P_SLEEP_CLK, 42 + }; 43 + 44 + static struct pll_vco default_vco[] = { 45 + { 500000000, 1000000000, 2 }, 46 + }; 47 + 48 + static struct pll_vco gpll9_vco[] = { 49 + { 500000000, 1250000000, 0 }, 50 + }; 51 + 52 + static struct pll_vco gpll10_vco[] = { 53 + { 750000000, 1500000000, 1 }, 54 + }; 55 + 56 + static struct clk_alpha_pll gpll0 = { 57 + .offset = 0x0, 58 + .vco_table = default_vco, 59 + .num_vco = ARRAY_SIZE(default_vco), 60 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 61 + .clkr = { 62 + .enable_reg = 0x79000, 63 + .enable_mask = BIT(0), 64 + .hw.init = &(struct clk_init_data){ 65 + .name = "gpll0", 66 + .parent_data = &(const struct clk_parent_data){ 67 + .fw_name = "bi_tcxo", 68 + }, 69 + .num_parents = 1, 70 + .ops = &clk_alpha_pll_ops, 71 + }, 72 + }, 73 + }; 74 + 75 + static const struct clk_div_table post_div_table_gpll0_out_aux2[] = { 76 + { 0x1, 2 }, 77 + { } 78 + }; 79 + 80 + static struct clk_alpha_pll_postdiv gpll0_out_aux2 = { 81 + .offset = 0x0, 82 + .post_div_shift = 8, 83 + .post_div_table = post_div_table_gpll0_out_aux2, 84 + .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_aux2), 85 + .width = 4, 86 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 87 + .clkr.hw.init = &(struct clk_init_data){ 88 + .name = "gpll0_out_aux2", 89 + .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw }, 90 + .num_parents = 1, 91 + .ops = &clk_alpha_pll_postdiv_ro_ops, 92 + }, 93 + }; 94 + 95 + /* listed as BRAMMO, but it doesn't really match */ 96 + static const u8 clk_gpll9_regs[PLL_OFF_MAX_REGS] = { 97 + [PLL_OFF_L_VAL] = 0x04, 98 + [PLL_OFF_ALPHA_VAL] = 0x08, 99 + [PLL_OFF_ALPHA_VAL_U] = 0x0c, 100 + [PLL_OFF_TEST_CTL] = 0x10, 101 + [PLL_OFF_TEST_CTL_U] = 0x14, 102 + [PLL_OFF_USER_CTL] = 0x18, 103 + [PLL_OFF_CONFIG_CTL] = 0x1C, 104 + [PLL_OFF_STATUS] = 0x20, 105 + }; 106 + 107 + static const struct clk_div_table post_div_table_gpll0_out_main[] = { 108 + { 0x0, 1 }, 109 + { } 110 + }; 111 + 112 + static struct clk_alpha_pll_postdiv gpll0_out_main = { 113 + .offset = 0x0, 114 + .post_div_shift = 8, 115 + .post_div_table = post_div_table_gpll0_out_main, 116 + .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_main), 117 + .width = 4, 118 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 119 + .clkr.hw.init = &(struct clk_init_data){ 120 + .name = "gpll0_out_main", 121 + .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw }, 122 + .num_parents = 1, 123 + .ops = &clk_alpha_pll_postdiv_ro_ops, 124 + }, 125 + }; 126 + 127 + /* 1152MHz configuration */ 128 + static const struct alpha_pll_config gpll10_config = { 129 + .l = 0x3c, 130 + .vco_val = 0x1 << 20, 131 + .vco_mask = GENMASK(21, 20), 132 + .main_output_mask = BIT(0), 133 + .config_ctl_val = 0x4001055b, 134 + }; 135 + 136 + static struct clk_alpha_pll gpll10 = { 137 + .offset = 0xa000, 138 + .vco_table = gpll10_vco, 139 + .num_vco = ARRAY_SIZE(gpll10_vco), 140 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 141 + .clkr = { 142 + .enable_reg = 0x79000, 143 + .enable_mask = BIT(10), 144 + .hw.init = &(struct clk_init_data){ 145 + .name = "gpll10", 146 + .parent_data = &(const struct clk_parent_data){ 147 + .fw_name = "bi_tcxo", 148 + }, 149 + .num_parents = 1, 150 + .ops = &clk_alpha_pll_ops, 151 + }, 152 + }, 153 + }; 154 + 155 + static const struct clk_div_table post_div_table_gpll10_out_main[] = { 156 + { 0x0, 1 }, 157 + { } 158 + }; 159 + 160 + static struct clk_alpha_pll_postdiv gpll10_out_main = { 161 + .offset = 0xa000, 162 + .post_div_shift = 8, 163 + .post_div_table = post_div_table_gpll10_out_main, 164 + .num_post_div = ARRAY_SIZE(post_div_table_gpll10_out_main), 165 + .width = 4, 166 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 167 + .clkr.hw.init = &(struct clk_init_data){ 168 + .name = "gpll10_out_main", 169 + .parent_hws = (const struct clk_hw *[]){ &gpll10.clkr.hw }, 170 + .num_parents = 1, 171 + .flags = CLK_SET_RATE_PARENT, 172 + .ops = &clk_alpha_pll_postdiv_ops, 173 + }, 174 + }; 175 + 176 + /* 600MHz configuration */ 177 + static const struct alpha_pll_config gpll11_config = { 178 + .l = 0x1F, 179 + .alpha = 0x0, 180 + .alpha_hi = 0x40, 181 + .alpha_en_mask = BIT(24), 182 + .vco_val = 0x2 << 20, 183 + .vco_mask = GENMASK(21, 20), 184 + .config_ctl_val = 0x4001055b, 185 + }; 186 + 187 + static struct clk_alpha_pll gpll11 = { 188 + .offset = 0xb000, 189 + .vco_table = default_vco, 190 + .num_vco = ARRAY_SIZE(default_vco), 191 + .flags = SUPPORTS_DYNAMIC_UPDATE, 192 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 193 + .clkr = { 194 + .enable_reg = 0x79000, 195 + .enable_mask = BIT(11), 196 + .hw.init = &(struct clk_init_data){ 197 + .name = "gpll11", 198 + .parent_data = &(const struct clk_parent_data){ 199 + .fw_name = "bi_tcxo", 200 + }, 201 + .num_parents = 1, 202 + .ops = &clk_alpha_pll_ops, 203 + }, 204 + }, 205 + }; 206 + 207 + static const struct clk_div_table post_div_table_gpll11_out_main[] = { 208 + { 0x0, 1 }, 209 + { } 210 + }; 211 + 212 + static struct clk_alpha_pll_postdiv gpll11_out_main = { 213 + .offset = 0xb000, 214 + .post_div_shift = 8, 215 + .post_div_table = post_div_table_gpll11_out_main, 216 + .num_post_div = ARRAY_SIZE(post_div_table_gpll11_out_main), 217 + .width = 4, 218 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 219 + .clkr.hw.init = &(struct clk_init_data){ 220 + .name = "gpll11_out_main", 221 + .parent_hws = (const struct clk_hw *[]){ &gpll11.clkr.hw }, 222 + .num_parents = 1, 223 + .flags = CLK_SET_RATE_PARENT, 224 + .ops = &clk_alpha_pll_postdiv_ops, 225 + }, 226 + }; 227 + 228 + static struct clk_alpha_pll gpll3 = { 229 + .offset = 0x3000, 230 + .vco_table = default_vco, 231 + .num_vco = ARRAY_SIZE(default_vco), 232 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 233 + .clkr = { 234 + .enable_reg = 0x79000, 235 + .enable_mask = BIT(3), 236 + .hw.init = &(struct clk_init_data){ 237 + .name = "gpll3", 238 + .parent_data = &(const struct clk_parent_data){ 239 + .fw_name = "bi_tcxo", 240 + }, 241 + .num_parents = 1, 242 + .ops = &clk_alpha_pll_ops, 243 + }, 244 + }, 245 + }; 246 + 247 + static struct clk_alpha_pll gpll4 = { 248 + .offset = 0x4000, 249 + .vco_table = default_vco, 250 + .num_vco = ARRAY_SIZE(default_vco), 251 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 252 + .clkr = { 253 + .enable_reg = 0x79000, 254 + .enable_mask = BIT(4), 255 + .hw.init = &(struct clk_init_data){ 256 + .name = "gpll4", 257 + .parent_data = &(const struct clk_parent_data){ 258 + .fw_name = "bi_tcxo", 259 + }, 260 + .num_parents = 1, 261 + .ops = &clk_alpha_pll_ops, 262 + }, 263 + }, 264 + }; 265 + 266 + static const struct clk_div_table post_div_table_gpll4_out_main[] = { 267 + { 0x0, 1 }, 268 + { } 269 + }; 270 + 271 + static struct clk_alpha_pll_postdiv gpll4_out_main = { 272 + .offset = 0x4000, 273 + .post_div_shift = 8, 274 + .post_div_table = post_div_table_gpll4_out_main, 275 + .num_post_div = ARRAY_SIZE(post_div_table_gpll4_out_main), 276 + .width = 4, 277 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 278 + .clkr.hw.init = &(struct clk_init_data){ 279 + .name = "gpll4_out_main", 280 + .parent_hws = (const struct clk_hw *[]){ &gpll4.clkr.hw }, 281 + .num_parents = 1, 282 + .ops = &clk_alpha_pll_postdiv_ro_ops, 283 + }, 284 + }; 285 + 286 + static struct clk_alpha_pll gpll6 = { 287 + .offset = 0x6000, 288 + .vco_table = default_vco, 289 + .num_vco = ARRAY_SIZE(default_vco), 290 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 291 + .clkr = { 292 + .enable_reg = 0x79000, 293 + .enable_mask = BIT(6), 294 + .hw.init = &(struct clk_init_data){ 295 + .name = "gpll6", 296 + .parent_data = &(const struct clk_parent_data){ 297 + .fw_name = "bi_tcxo", 298 + }, 299 + .num_parents = 1, 300 + .ops = &clk_alpha_pll_ops, 301 + }, 302 + }, 303 + }; 304 + 305 + static const struct clk_div_table post_div_table_gpll6_out_main[] = { 306 + { 0x1, 2 }, 307 + { } 308 + }; 309 + 310 + static struct clk_alpha_pll_postdiv gpll6_out_main = { 311 + .offset = 0x6000, 312 + .post_div_shift = 8, 313 + .post_div_table = post_div_table_gpll6_out_main, 314 + .num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_main), 315 + .width = 4, 316 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 317 + .clkr.hw.init = &(struct clk_init_data){ 318 + .name = "gpll6_out_main", 319 + .parent_hws = (const struct clk_hw *[]){ &gpll6.clkr.hw }, 320 + .num_parents = 1, 321 + .ops = &clk_alpha_pll_postdiv_ro_ops, 322 + }, 323 + }; 324 + 325 + static struct clk_alpha_pll gpll7 = { 326 + .offset = 0x7000, 327 + .vco_table = default_vco, 328 + .num_vco = ARRAY_SIZE(default_vco), 329 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 330 + .clkr = { 331 + .enable_reg = 0x79000, 332 + .enable_mask = BIT(7), 333 + .hw.init = &(struct clk_init_data){ 334 + .name = "gpll7", 335 + .parent_data = &(const struct clk_parent_data){ 336 + .fw_name = "bi_tcxo", 337 + }, 338 + .num_parents = 1, 339 + .ops = &clk_alpha_pll_ops, 340 + }, 341 + }, 342 + }; 343 + 344 + static const struct clk_div_table post_div_table_gpll7_out_main[] = { 345 + { 0x0, 1 }, 346 + { } 347 + }; 348 + 349 + static struct clk_alpha_pll_postdiv gpll7_out_main = { 350 + .offset = 0x7000, 351 + .post_div_shift = 8, 352 + .post_div_table = post_div_table_gpll7_out_main, 353 + .num_post_div = ARRAY_SIZE(post_div_table_gpll7_out_main), 354 + .width = 4, 355 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 356 + .clkr.hw.init = &(struct clk_init_data){ 357 + .name = "gpll7_out_main", 358 + .parent_hws = (const struct clk_hw *[]){ &gpll7.clkr.hw }, 359 + .num_parents = 1, 360 + .ops = &clk_alpha_pll_postdiv_ro_ops, 361 + }, 362 + }; 363 + 364 + /* 800MHz configuration */ 365 + static const struct alpha_pll_config gpll8_config = { 366 + .l = 0x29, 367 + .alpha = 0xAAAAAAAA, 368 + .alpha_hi = 0xAA, 369 + .alpha_en_mask = BIT(24), 370 + .vco_val = 0x2 << 20, 371 + .vco_mask = GENMASK(21, 20), 372 + .main_output_mask = BIT(0), 373 + .early_output_mask = BIT(3), 374 + .post_div_val = 0x1 << 8, 375 + .post_div_mask = GENMASK(11, 8), 376 + .config_ctl_val = 0x4001055b, 377 + }; 378 + 379 + static struct clk_alpha_pll gpll8 = { 380 + .offset = 0x8000, 381 + .vco_table = default_vco, 382 + .num_vco = ARRAY_SIZE(default_vco), 383 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 384 + .flags = SUPPORTS_DYNAMIC_UPDATE, 385 + .clkr = { 386 + .enable_reg = 0x79000, 387 + .enable_mask = BIT(8), 388 + .hw.init = &(struct clk_init_data){ 389 + .name = "gpll8", 390 + .parent_data = &(const struct clk_parent_data){ 391 + .fw_name = "bi_tcxo", 392 + }, 393 + .num_parents = 1, 394 + .ops = &clk_alpha_pll_ops, 395 + }, 396 + }, 397 + }; 398 + 399 + static const struct clk_div_table post_div_table_gpll8_out_main[] = { 400 + { 0x1, 2 }, 401 + { } 402 + }; 403 + 404 + static struct clk_alpha_pll_postdiv gpll8_out_main = { 405 + .offset = 0x8000, 406 + .post_div_shift = 8, 407 + .post_div_table = post_div_table_gpll8_out_main, 408 + .num_post_div = ARRAY_SIZE(post_div_table_gpll8_out_main), 409 + .width = 4, 410 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 411 + .clkr.hw.init = &(struct clk_init_data){ 412 + .name = "gpll8_out_main", 413 + .parent_hws = (const struct clk_hw *[]){ &gpll8.clkr.hw }, 414 + .num_parents = 1, 415 + .flags = CLK_SET_RATE_PARENT, 416 + .ops = &clk_alpha_pll_postdiv_ro_ops, 417 + }, 418 + }; 419 + 420 + /* 1152MHz configuration */ 421 + static const struct alpha_pll_config gpll9_config = { 422 + .l = 0x3C, 423 + .alpha = 0x0, 424 + .post_div_val = 0x1 << 8, 425 + .post_div_mask = GENMASK(9, 8), 426 + .main_output_mask = BIT(0), 427 + .config_ctl_val = 0x00004289, 428 + }; 429 + 430 + static struct clk_alpha_pll gpll9 = { 431 + .offset = 0x9000, 432 + .vco_table = gpll9_vco, 433 + .num_vco = ARRAY_SIZE(gpll9_vco), 434 + .regs = clk_gpll9_regs, 435 + .clkr = { 436 + .enable_reg = 0x79000, 437 + .enable_mask = BIT(9), 438 + .hw.init = &(struct clk_init_data){ 439 + .name = "gpll9", 440 + .parent_data = &(const struct clk_parent_data){ 441 + .fw_name = "bi_tcxo", 442 + }, 443 + .num_parents = 1, 444 + .ops = &clk_alpha_pll_ops, 445 + }, 446 + }, 447 + }; 448 + 449 + static const struct clk_div_table post_div_table_gpll9_out_main[] = { 450 + { 0x1, 2 }, 451 + { } 452 + }; 453 + 454 + static struct clk_alpha_pll_postdiv gpll9_out_main = { 455 + .offset = 0x9000, 456 + .post_div_shift = 8, 457 + .post_div_table = post_div_table_gpll9_out_main, 458 + .num_post_div = ARRAY_SIZE(post_div_table_gpll9_out_main), 459 + .width = 2, 460 + .regs = clk_gpll9_regs, 461 + .clkr.hw.init = &(struct clk_init_data){ 462 + .name = "gpll9_out_main", 463 + .parent_hws = (const struct clk_hw *[]){ &gpll9.clkr.hw }, 464 + .num_parents = 1, 465 + .flags = CLK_SET_RATE_PARENT, 466 + .ops = &clk_alpha_pll_postdiv_ops, 467 + }, 468 + }; 469 + 470 + static const struct parent_map gcc_parent_map_0[] = { 471 + { P_BI_TCXO, 0 }, 472 + { P_GPLL0_OUT_EARLY, 1 }, 473 + { P_GPLL0_OUT_AUX2, 2 }, 474 + }; 475 + 476 + static const struct clk_parent_data gcc_parents_0[] = { 477 + { .fw_name = "bi_tcxo" }, 478 + { .hw = &gpll0.clkr.hw }, 479 + { .hw = &gpll0_out_aux2.clkr.hw }, 480 + }; 481 + 482 + static const struct parent_map gcc_parent_map_1[] = { 483 + { P_BI_TCXO, 0 }, 484 + { P_GPLL0_OUT_EARLY, 1 }, 485 + { P_GPLL0_OUT_AUX2, 2 }, 486 + { P_GPLL6_OUT_MAIN, 4 }, 487 + }; 488 + 489 + static const struct clk_parent_data gcc_parents_1[] = { 490 + { .fw_name = "bi_tcxo" }, 491 + { .hw = &gpll0.clkr.hw }, 492 + { .hw = &gpll0_out_aux2.clkr.hw }, 493 + { .hw = &gpll6_out_main.clkr.hw }, 494 + }; 495 + 496 + static const struct parent_map gcc_parent_map_2[] = { 497 + { P_BI_TCXO, 0 }, 498 + { P_GPLL0_OUT_EARLY, 1 }, 499 + { P_GPLL0_OUT_AUX2, 2 }, 500 + { P_SLEEP_CLK, 5 }, 501 + }; 502 + 503 + static const struct clk_parent_data gcc_parents_2[] = { 504 + { .fw_name = "bi_tcxo" }, 505 + { .hw = &gpll0.clkr.hw }, 506 + { .hw = &gpll0_out_aux2.clkr.hw }, 507 + { .fw_name = "sleep_clk" }, 508 + }; 509 + 510 + static const struct parent_map gcc_parent_map_3[] = { 511 + { P_BI_TCXO, 0 }, 512 + { P_GPLL0_OUT_EARLY, 1 }, 513 + { P_GPLL9_OUT_EARLY, 2 }, 514 + { P_GPLL10_OUT_MAIN, 3 }, 515 + { P_GPLL9_OUT_MAIN, 5 }, 516 + }; 517 + 518 + static const struct clk_parent_data gcc_parents_3[] = { 519 + { .fw_name = "bi_tcxo" }, 520 + { .hw = &gpll0.clkr.hw }, 521 + { .hw = &gpll9.clkr.hw }, 522 + { .hw = &gpll10_out_main.clkr.hw }, 523 + { .hw = &gpll9_out_main.clkr.hw }, 524 + }; 525 + 526 + static const struct parent_map gcc_parent_map_4[] = { 527 + { P_BI_TCXO, 0 }, 528 + { P_GPLL0_OUT_EARLY, 1 }, 529 + { P_GPLL0_OUT_AUX2, 2 }, 530 + { P_GPLL4_OUT_MAIN, 5 }, 531 + }; 532 + 533 + static const struct clk_parent_data gcc_parents_4[] = { 534 + { .fw_name = "bi_tcxo" }, 535 + { .hw = &gpll0.clkr.hw }, 536 + { .hw = &gpll0_out_aux2.clkr.hw }, 537 + { .hw = &gpll4_out_main.clkr.hw }, 538 + }; 539 + 540 + static const struct parent_map gcc_parent_map_5[] = { 541 + { P_BI_TCXO, 0 }, 542 + { P_GPLL0_OUT_EARLY, 1 }, 543 + { P_GPLL8_OUT_EARLY, 2 }, 544 + { P_GPLL10_OUT_MAIN, 3 }, 545 + { P_GPLL8_OUT_MAIN, 4 }, 546 + { P_GPLL9_OUT_MAIN, 5 }, 547 + }; 548 + 549 + static const struct clk_parent_data gcc_parents_5[] = { 550 + { .fw_name = "bi_tcxo" }, 551 + { .hw = &gpll0.clkr.hw }, 552 + { .hw = &gpll8.clkr.hw }, 553 + { .hw = &gpll10_out_main.clkr.hw }, 554 + { .hw = &gpll8_out_main.clkr.hw }, 555 + { .hw = &gpll9_out_main.clkr.hw }, 556 + }; 557 + 558 + static const struct parent_map gcc_parent_map_6[] = { 559 + { P_BI_TCXO, 0 }, 560 + { P_GPLL0_OUT_EARLY, 1 }, 561 + { P_GPLL8_OUT_EARLY, 2 }, 562 + { P_GPLL10_OUT_MAIN, 3 }, 563 + { P_GPLL6_OUT_MAIN, 4 }, 564 + { P_GPLL9_OUT_MAIN, 5 }, 565 + { P_GPLL3_OUT_EARLY, 6 }, 566 + }; 567 + 568 + static const struct clk_parent_data gcc_parents_6[] = { 569 + { .fw_name = "bi_tcxo" }, 570 + { .hw = &gpll0.clkr.hw }, 571 + { .hw = &gpll8.clkr.hw }, 572 + { .hw = &gpll10_out_main.clkr.hw }, 573 + { .hw = &gpll6_out_main.clkr.hw }, 574 + { .hw = &gpll9_out_main.clkr.hw }, 575 + { .hw = &gpll3.clkr.hw }, 576 + }; 577 + 578 + static const struct parent_map gcc_parent_map_7[] = { 579 + { P_BI_TCXO, 0 }, 580 + { P_GPLL0_OUT_EARLY, 1 }, 581 + { P_GPLL0_OUT_AUX2, 2 }, 582 + { P_GPLL10_OUT_MAIN, 3 }, 583 + { P_GPLL4_OUT_MAIN, 5 }, 584 + { P_GPLL3_OUT_EARLY, 6 }, 585 + }; 586 + 587 + static const struct clk_parent_data gcc_parents_7[] = { 588 + { .fw_name = "bi_tcxo" }, 589 + { .hw = &gpll0.clkr.hw }, 590 + { .hw = &gpll0_out_aux2.clkr.hw }, 591 + { .hw = &gpll10_out_main.clkr.hw }, 592 + { .hw = &gpll4_out_main.clkr.hw }, 593 + { .hw = &gpll3.clkr.hw }, 594 + }; 595 + 596 + static const struct parent_map gcc_parent_map_8[] = { 597 + { P_BI_TCXO, 0 }, 598 + { P_GPLL0_OUT_EARLY, 1 }, 599 + { P_GPLL8_OUT_EARLY, 2 }, 600 + { P_GPLL10_OUT_MAIN, 3 }, 601 + { P_GPLL8_OUT_MAIN, 4 }, 602 + { P_GPLL9_OUT_MAIN, 5 }, 603 + { P_GPLL3_OUT_EARLY, 6 }, 604 + }; 605 + 606 + static const struct clk_parent_data gcc_parents_8[] = { 607 + { .fw_name = "bi_tcxo" }, 608 + { .hw = &gpll0.clkr.hw }, 609 + { .hw = &gpll8.clkr.hw }, 610 + { .hw = &gpll10_out_main.clkr.hw }, 611 + { .hw = &gpll8_out_main.clkr.hw }, 612 + { .hw = &gpll9_out_main.clkr.hw }, 613 + { .hw = &gpll3.clkr.hw }, 614 + }; 615 + 616 + static const struct parent_map gcc_parent_map_9[] = { 617 + { P_BI_TCXO, 0 }, 618 + { P_GPLL0_OUT_EARLY, 1 }, 619 + { P_GPLL0_OUT_AUX2, 2 }, 620 + { P_GPLL10_OUT_MAIN, 3 }, 621 + { P_GPLL8_OUT_MAIN, 4 }, 622 + { P_GPLL9_OUT_MAIN, 5 }, 623 + { P_GPLL3_OUT_EARLY, 6 }, 624 + }; 625 + 626 + static const struct clk_parent_data gcc_parents_9[] = { 627 + { .fw_name = "bi_tcxo" }, 628 + { .hw = &gpll0.clkr.hw }, 629 + { .hw = &gpll0_out_aux2.clkr.hw }, 630 + { .hw = &gpll10_out_main.clkr.hw }, 631 + { .hw = &gpll8_out_main.clkr.hw }, 632 + { .hw = &gpll9_out_main.clkr.hw }, 633 + { .hw = &gpll3.clkr.hw }, 634 + }; 635 + 636 + static const struct parent_map gcc_parent_map_10[] = { 637 + { P_BI_TCXO, 0 }, 638 + { P_GPLL0_OUT_EARLY, 1 }, 639 + { P_GPLL8_OUT_EARLY, 2 }, 640 + { P_GPLL10_OUT_MAIN, 3 }, 641 + { P_GPLL6_OUT_EARLY, 4 }, 642 + { P_GPLL9_OUT_MAIN, 5 }, 643 + }; 644 + 645 + static const struct clk_parent_data gcc_parents_10[] = { 646 + { .fw_name = "bi_tcxo" }, 647 + { .hw = &gpll0.clkr.hw }, 648 + { .hw = &gpll8.clkr.hw }, 649 + { .hw = &gpll10_out_main.clkr.hw }, 650 + { .hw = &gpll6.clkr.hw }, 651 + { .hw = &gpll9_out_main.clkr.hw }, 652 + }; 653 + 654 + static const struct parent_map gcc_parent_map_11[] = { 655 + { P_BI_TCXO, 0 }, 656 + { P_GPLL0_OUT_EARLY, 1 }, 657 + { P_GPLL0_OUT_AUX2, 2 }, 658 + { P_GPLL7_OUT_MAIN, 3 }, 659 + { P_GPLL4_OUT_MAIN, 5 }, 660 + }; 661 + 662 + static const struct clk_parent_data gcc_parents_11[] = { 663 + { .fw_name = "bi_tcxo" }, 664 + { .hw = &gpll0.clkr.hw }, 665 + { .hw = &gpll0_out_aux2.clkr.hw }, 666 + { .hw = &gpll7_out_main.clkr.hw }, 667 + { .hw = &gpll4_out_main.clkr.hw }, 668 + }; 669 + 670 + static const struct parent_map gcc_parent_map_12[] = { 671 + { P_BI_TCXO, 0 }, 672 + { P_SLEEP_CLK, 5 }, 673 + }; 674 + 675 + static const struct clk_parent_data gcc_parents_12[] = { 676 + { .fw_name = "bi_tcxo" }, 677 + { .fw_name = "sleep_clk" }, 678 + }; 679 + 680 + static const struct parent_map gcc_parent_map_13[] = { 681 + { P_BI_TCXO, 0 }, 682 + { P_GPLL11_OUT_MAIN, 1 }, 683 + }; 684 + 685 + static const struct clk_parent_data gcc_parents_13[] = { 686 + { .fw_name = "bi_tcxo" }, 687 + { .hw = &gpll11_out_main.clkr.hw }, 688 + }; 689 + 690 + static const struct freq_tbl ftbl_gcc_camss_axi_clk_src[] = { 691 + F(19200000, P_BI_TCXO, 1, 0, 0), 692 + F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0), 693 + F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0), 694 + F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0), 695 + { } 696 + }; 697 + 698 + static struct clk_rcg2 gcc_camss_axi_clk_src = { 699 + .cmd_rcgr = 0x5802c, 700 + .mnd_width = 0, 701 + .hid_width = 5, 702 + .parent_map = gcc_parent_map_7, 703 + .freq_tbl = ftbl_gcc_camss_axi_clk_src, 704 + .clkr.hw.init = &(struct clk_init_data){ 705 + .name = "gcc_camss_axi_clk_src", 706 + .parent_data = gcc_parents_7, 707 + .num_parents = ARRAY_SIZE(gcc_parents_7), 708 + .flags = CLK_SET_RATE_PARENT, 709 + .ops = &clk_rcg2_ops, 710 + }, 711 + }; 712 + 713 + static const struct freq_tbl ftbl_gcc_camss_cci_clk_src[] = { 714 + F(19200000, P_BI_TCXO, 1, 0, 0), 715 + F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0), 716 + { } 717 + }; 718 + 719 + static struct clk_rcg2 gcc_camss_cci_clk_src = { 720 + .cmd_rcgr = 0x56000, 721 + .mnd_width = 0, 722 + .hid_width = 5, 723 + .parent_map = gcc_parent_map_9, 724 + .freq_tbl = ftbl_gcc_camss_cci_clk_src, 725 + .clkr.hw.init = &(struct clk_init_data){ 726 + .name = "gcc_camss_cci_clk_src", 727 + .parent_data = gcc_parents_9, 728 + .num_parents = ARRAY_SIZE(gcc_parents_9), 729 + .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 730 + .ops = &clk_rcg2_ops, 731 + }, 732 + }; 733 + 734 + static const struct freq_tbl ftbl_gcc_camss_csi0phytimer_clk_src[] = { 735 + F(19200000, P_BI_TCXO, 1, 0, 0), 736 + F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 737 + F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0), 738 + F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0), 739 + { } 740 + }; 741 + 742 + static struct clk_rcg2 gcc_camss_csi0phytimer_clk_src = { 743 + .cmd_rcgr = 0x59000, 744 + .mnd_width = 0, 745 + .hid_width = 5, 746 + .parent_map = gcc_parent_map_4, 747 + .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src, 748 + .clkr.hw.init = &(struct clk_init_data){ 749 + .name = "gcc_camss_csi0phytimer_clk_src", 750 + .parent_data = gcc_parents_4, 751 + .num_parents = ARRAY_SIZE(gcc_parents_4), 752 + .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 753 + .ops = &clk_rcg2_ops, 754 + }, 755 + }; 756 + 757 + static struct clk_rcg2 gcc_camss_csi1phytimer_clk_src = { 758 + .cmd_rcgr = 0x5901c, 759 + .mnd_width = 0, 760 + .hid_width = 5, 761 + .parent_map = gcc_parent_map_4, 762 + .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src, 763 + .clkr.hw.init = &(struct clk_init_data){ 764 + .name = "gcc_camss_csi1phytimer_clk_src", 765 + .parent_data = gcc_parents_4, 766 + .num_parents = ARRAY_SIZE(gcc_parents_4), 767 + .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 768 + .ops = &clk_rcg2_ops, 769 + }, 770 + }; 771 + 772 + static struct clk_rcg2 gcc_camss_csi2phytimer_clk_src = { 773 + .cmd_rcgr = 0x59038, 774 + .mnd_width = 0, 775 + .hid_width = 5, 776 + .parent_map = gcc_parent_map_4, 777 + .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src, 778 + .clkr.hw.init = &(struct clk_init_data){ 779 + .name = "gcc_camss_csi2phytimer_clk_src", 780 + .parent_data = gcc_parents_4, 781 + .num_parents = ARRAY_SIZE(gcc_parents_4), 782 + .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 783 + .ops = &clk_rcg2_ops, 784 + }, 785 + }; 786 + 787 + static const struct freq_tbl ftbl_gcc_camss_mclk0_clk_src[] = { 788 + F(19200000, P_BI_TCXO, 1, 0, 0), 789 + F(24000000, P_GPLL9_OUT_MAIN, 1, 1, 24), 790 + F(64000000, P_GPLL9_OUT_MAIN, 1, 1, 9), 791 + { } 792 + }; 793 + 794 + static struct clk_rcg2 gcc_camss_mclk0_clk_src = { 795 + .cmd_rcgr = 0x51000, 796 + .mnd_width = 8, 797 + .hid_width = 5, 798 + .parent_map = gcc_parent_map_3, 799 + .freq_tbl = ftbl_gcc_camss_mclk0_clk_src, 800 + .clkr.hw.init = &(struct clk_init_data){ 801 + .name = "gcc_camss_mclk0_clk_src", 802 + .parent_data = gcc_parents_3, 803 + .num_parents = ARRAY_SIZE(gcc_parents_3), 804 + .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 805 + .ops = &clk_rcg2_ops, 806 + }, 807 + }; 808 + 809 + static struct clk_rcg2 gcc_camss_mclk1_clk_src = { 810 + .cmd_rcgr = 0x5101c, 811 + .mnd_width = 8, 812 + .hid_width = 5, 813 + .parent_map = gcc_parent_map_3, 814 + .freq_tbl = ftbl_gcc_camss_mclk0_clk_src, 815 + .clkr.hw.init = &(struct clk_init_data){ 816 + .name = "gcc_camss_mclk1_clk_src", 817 + .parent_data = gcc_parents_3, 818 + .num_parents = ARRAY_SIZE(gcc_parents_3), 819 + .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 820 + .ops = &clk_rcg2_ops, 821 + }, 822 + }; 823 + 824 + static struct clk_rcg2 gcc_camss_mclk2_clk_src = { 825 + .cmd_rcgr = 0x51038, 826 + .mnd_width = 8, 827 + .hid_width = 5, 828 + .parent_map = gcc_parent_map_3, 829 + .freq_tbl = ftbl_gcc_camss_mclk0_clk_src, 830 + .clkr.hw.init = &(struct clk_init_data){ 831 + .name = "gcc_camss_mclk2_clk_src", 832 + .parent_data = gcc_parents_3, 833 + .num_parents = ARRAY_SIZE(gcc_parents_3), 834 + .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 835 + .ops = &clk_rcg2_ops, 836 + }, 837 + }; 838 + 839 + static struct clk_rcg2 gcc_camss_mclk3_clk_src = { 840 + .cmd_rcgr = 0x51054, 841 + .mnd_width = 8, 842 + .hid_width = 5, 843 + .parent_map = gcc_parent_map_3, 844 + .freq_tbl = ftbl_gcc_camss_mclk0_clk_src, 845 + .clkr.hw.init = &(struct clk_init_data){ 846 + .name = "gcc_camss_mclk3_clk_src", 847 + .parent_data = gcc_parents_3, 848 + .num_parents = ARRAY_SIZE(gcc_parents_3), 849 + .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 850 + .ops = &clk_rcg2_ops, 851 + }, 852 + }; 853 + 854 + static const struct freq_tbl ftbl_gcc_camss_ope_ahb_clk_src[] = { 855 + F(19200000, P_BI_TCXO, 1, 0, 0), 856 + F(171428571, P_GPLL0_OUT_EARLY, 3.5, 0, 0), 857 + F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0), 858 + { } 859 + }; 860 + 861 + static struct clk_rcg2 gcc_camss_ope_ahb_clk_src = { 862 + .cmd_rcgr = 0x55024, 863 + .mnd_width = 0, 864 + .hid_width = 5, 865 + .parent_map = gcc_parent_map_8, 866 + .freq_tbl = ftbl_gcc_camss_ope_ahb_clk_src, 867 + .clkr.hw.init = &(struct clk_init_data){ 868 + .name = "gcc_camss_ope_ahb_clk_src", 869 + .parent_data = gcc_parents_8, 870 + .num_parents = ARRAY_SIZE(gcc_parents_8), 871 + .flags = CLK_SET_RATE_PARENT, 872 + .ops = &clk_rcg2_ops, 873 + }, 874 + }; 875 + 876 + static const struct freq_tbl ftbl_gcc_camss_ope_clk_src[] = { 877 + F(19200000, P_BI_TCXO, 1, 0, 0), 878 + F(200000000, P_GPLL8_OUT_MAIN, 2, 0, 0), 879 + F(266600000, P_GPLL8_OUT_MAIN, 1, 0, 0), 880 + F(465000000, P_GPLL8_OUT_MAIN, 1, 0, 0), 881 + F(576000000, P_GPLL9_OUT_MAIN, 1, 0, 0), 882 + { } 883 + }; 884 + 885 + static struct clk_rcg2 gcc_camss_ope_clk_src = { 886 + .cmd_rcgr = 0x55004, 887 + .mnd_width = 0, 888 + .hid_width = 5, 889 + .parent_map = gcc_parent_map_8, 890 + .freq_tbl = ftbl_gcc_camss_ope_clk_src, 891 + .clkr.hw.init = &(struct clk_init_data){ 892 + .name = "gcc_camss_ope_clk_src", 893 + .parent_data = gcc_parents_8, 894 + .num_parents = ARRAY_SIZE(gcc_parents_8), 895 + .flags = CLK_SET_RATE_PARENT, 896 + .ops = &clk_rcg2_ops, 897 + }, 898 + }; 899 + 900 + static const struct freq_tbl ftbl_gcc_camss_tfe_0_clk_src[] = { 901 + F(19200000, P_BI_TCXO, 1, 0, 0), 902 + F(128000000, P_GPLL10_OUT_MAIN, 9, 0, 0), 903 + F(135529412, P_GPLL10_OUT_MAIN, 8.5, 0, 0), 904 + F(144000000, P_GPLL10_OUT_MAIN, 8, 0, 0), 905 + F(153600000, P_GPLL10_OUT_MAIN, 7.5, 0, 0), 906 + F(164571429, P_GPLL10_OUT_MAIN, 7, 0, 0), 907 + F(177230769, P_GPLL10_OUT_MAIN, 6.5, 0, 0), 908 + F(192000000, P_GPLL10_OUT_MAIN, 6, 0, 0), 909 + F(209454545, P_GPLL10_OUT_MAIN, 5.5, 0, 0), 910 + F(230400000, P_GPLL10_OUT_MAIN, 5, 0, 0), 911 + F(256000000, P_GPLL10_OUT_MAIN, 4.5, 0, 0), 912 + F(288000000, P_GPLL10_OUT_MAIN, 4, 0, 0), 913 + F(329142857, P_GPLL10_OUT_MAIN, 3.5, 0, 0), 914 + F(384000000, P_GPLL10_OUT_MAIN, 3, 0, 0), 915 + F(460800000, P_GPLL10_OUT_MAIN, 2.5, 0, 0), 916 + F(576000000, P_GPLL10_OUT_MAIN, 2, 0, 0), 917 + { } 918 + }; 919 + 920 + static struct clk_rcg2 gcc_camss_tfe_0_clk_src = { 921 + .cmd_rcgr = 0x52004, 922 + .mnd_width = 8, 923 + .hid_width = 5, 924 + .parent_map = gcc_parent_map_5, 925 + .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src, 926 + .clkr.hw.init = &(struct clk_init_data){ 927 + .name = "gcc_camss_tfe_0_clk_src", 928 + .parent_data = gcc_parents_5, 929 + .num_parents = ARRAY_SIZE(gcc_parents_5), 930 + .flags = CLK_SET_RATE_PARENT, 931 + .ops = &clk_rcg2_ops, 932 + }, 933 + }; 934 + 935 + static const struct freq_tbl ftbl_gcc_camss_tfe_0_csid_clk_src[] = { 936 + F(19200000, P_BI_TCXO, 1, 0, 0), 937 + F(120000000, P_GPLL0_OUT_EARLY, 5, 0, 0), 938 + F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0), 939 + F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0), 940 + F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0), 941 + F(426400000, P_GPLL3_OUT_EARLY, 2.5, 0, 0), 942 + { } 943 + }; 944 + 945 + static struct clk_rcg2 gcc_camss_tfe_0_csid_clk_src = { 946 + .cmd_rcgr = 0x52094, 947 + .mnd_width = 0, 948 + .hid_width = 5, 949 + .parent_map = gcc_parent_map_6, 950 + .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src, 951 + .clkr.hw.init = &(struct clk_init_data){ 952 + .name = "gcc_camss_tfe_0_csid_clk_src", 953 + .parent_data = gcc_parents_6, 954 + .num_parents = ARRAY_SIZE(gcc_parents_6), 955 + .flags = CLK_SET_RATE_PARENT, 956 + .ops = &clk_rcg2_ops, 957 + }, 958 + }; 959 + 960 + static struct clk_rcg2 gcc_camss_tfe_1_clk_src = { 961 + .cmd_rcgr = 0x52024, 962 + .mnd_width = 8, 963 + .hid_width = 5, 964 + .parent_map = gcc_parent_map_5, 965 + .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src, 966 + .clkr.hw.init = &(struct clk_init_data){ 967 + .name = "gcc_camss_tfe_1_clk_src", 968 + .parent_data = gcc_parents_5, 969 + .num_parents = ARRAY_SIZE(gcc_parents_5), 970 + .flags = CLK_SET_RATE_PARENT, 971 + .ops = &clk_rcg2_ops, 972 + }, 973 + }; 974 + 975 + static struct clk_rcg2 gcc_camss_tfe_1_csid_clk_src = { 976 + .cmd_rcgr = 0x520b4, 977 + .mnd_width = 0, 978 + .hid_width = 5, 979 + .parent_map = gcc_parent_map_6, 980 + .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src, 981 + .clkr.hw.init = &(struct clk_init_data){ 982 + .name = "gcc_camss_tfe_1_csid_clk_src", 983 + .parent_data = gcc_parents_6, 984 + .num_parents = ARRAY_SIZE(gcc_parents_6), 985 + .flags = CLK_SET_RATE_PARENT, 986 + .ops = &clk_rcg2_ops, 987 + }, 988 + }; 989 + 990 + static struct clk_rcg2 gcc_camss_tfe_2_clk_src = { 991 + .cmd_rcgr = 0x52044, 992 + .mnd_width = 8, 993 + .hid_width = 5, 994 + .parent_map = gcc_parent_map_5, 995 + .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src, 996 + .clkr.hw.init = &(struct clk_init_data){ 997 + .name = "gcc_camss_tfe_2_clk_src", 998 + .parent_data = gcc_parents_5, 999 + .num_parents = ARRAY_SIZE(gcc_parents_5), 1000 + .flags = CLK_SET_RATE_PARENT, 1001 + .ops = &clk_rcg2_ops, 1002 + }, 1003 + }; 1004 + 1005 + static struct clk_rcg2 gcc_camss_tfe_2_csid_clk_src = { 1006 + .cmd_rcgr = 0x520d4, 1007 + .mnd_width = 0, 1008 + .hid_width = 5, 1009 + .parent_map = gcc_parent_map_6, 1010 + .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src, 1011 + .clkr.hw.init = &(struct clk_init_data){ 1012 + .name = "gcc_camss_tfe_2_csid_clk_src", 1013 + .parent_data = gcc_parents_6, 1014 + .num_parents = ARRAY_SIZE(gcc_parents_6), 1015 + .flags = CLK_SET_RATE_PARENT, 1016 + .ops = &clk_rcg2_ops, 1017 + }, 1018 + }; 1019 + 1020 + static const struct freq_tbl ftbl_gcc_camss_tfe_cphy_rx_clk_src[] = { 1021 + F(19200000, P_BI_TCXO, 1, 0, 0), 1022 + F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0), 1023 + F(341333333, P_GPLL6_OUT_EARLY, 1, 4, 9), 1024 + F(384000000, P_GPLL6_OUT_EARLY, 2, 0, 0), 1025 + { } 1026 + }; 1027 + 1028 + static struct clk_rcg2 gcc_camss_tfe_cphy_rx_clk_src = { 1029 + .cmd_rcgr = 0x52064, 1030 + .mnd_width = 16, 1031 + .hid_width = 5, 1032 + .parent_map = gcc_parent_map_10, 1033 + .freq_tbl = ftbl_gcc_camss_tfe_cphy_rx_clk_src, 1034 + .clkr.hw.init = &(struct clk_init_data){ 1035 + .name = "gcc_camss_tfe_cphy_rx_clk_src", 1036 + .parent_data = gcc_parents_10, 1037 + .num_parents = ARRAY_SIZE(gcc_parents_10), 1038 + .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 1039 + .ops = &clk_rcg2_ops, 1040 + }, 1041 + }; 1042 + 1043 + static const struct freq_tbl ftbl_gcc_camss_top_ahb_clk_src[] = { 1044 + F(19200000, P_BI_TCXO, 1, 0, 0), 1045 + F(40000000, P_GPLL0_OUT_AUX2, 7.5, 0, 0), 1046 + F(80000000, P_GPLL0_OUT_EARLY, 7.5, 0, 0), 1047 + { } 1048 + }; 1049 + 1050 + static struct clk_rcg2 gcc_camss_top_ahb_clk_src = { 1051 + .cmd_rcgr = 0x58010, 1052 + .mnd_width = 0, 1053 + .hid_width = 5, 1054 + .parent_map = gcc_parent_map_7, 1055 + .freq_tbl = ftbl_gcc_camss_top_ahb_clk_src, 1056 + .clkr.hw.init = &(struct clk_init_data){ 1057 + .name = "gcc_camss_top_ahb_clk_src", 1058 + .parent_data = gcc_parents_7, 1059 + .num_parents = ARRAY_SIZE(gcc_parents_7), 1060 + .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 1061 + .ops = &clk_rcg2_ops, 1062 + }, 1063 + }; 1064 + 1065 + static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = { 1066 + F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0), 1067 + F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0), 1068 + F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1069 + F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0), 1070 + { } 1071 + }; 1072 + 1073 + static struct clk_rcg2 gcc_gp1_clk_src = { 1074 + .cmd_rcgr = 0x4d004, 1075 + .mnd_width = 8, 1076 + .hid_width = 5, 1077 + .parent_map = gcc_parent_map_2, 1078 + .freq_tbl = ftbl_gcc_gp1_clk_src, 1079 + .clkr.hw.init = &(struct clk_init_data){ 1080 + .name = "gcc_gp1_clk_src", 1081 + .parent_data = gcc_parents_2, 1082 + .num_parents = ARRAY_SIZE(gcc_parents_2), 1083 + .ops = &clk_rcg2_ops, 1084 + }, 1085 + }; 1086 + 1087 + static struct clk_rcg2 gcc_gp2_clk_src = { 1088 + .cmd_rcgr = 0x4e004, 1089 + .mnd_width = 8, 1090 + .hid_width = 5, 1091 + .parent_map = gcc_parent_map_2, 1092 + .freq_tbl = ftbl_gcc_gp1_clk_src, 1093 + .clkr.hw.init = &(struct clk_init_data){ 1094 + .name = "gcc_gp2_clk_src", 1095 + .parent_data = gcc_parents_2, 1096 + .num_parents = ARRAY_SIZE(gcc_parents_2), 1097 + .ops = &clk_rcg2_ops, 1098 + }, 1099 + }; 1100 + 1101 + static struct clk_rcg2 gcc_gp3_clk_src = { 1102 + .cmd_rcgr = 0x4f004, 1103 + .mnd_width = 8, 1104 + .hid_width = 5, 1105 + .parent_map = gcc_parent_map_2, 1106 + .freq_tbl = ftbl_gcc_gp1_clk_src, 1107 + .clkr.hw.init = &(struct clk_init_data){ 1108 + .name = "gcc_gp3_clk_src", 1109 + .parent_data = gcc_parents_2, 1110 + .num_parents = ARRAY_SIZE(gcc_parents_2), 1111 + .ops = &clk_rcg2_ops, 1112 + }, 1113 + }; 1114 + 1115 + static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = { 1116 + F(19200000, P_BI_TCXO, 1, 0, 0), 1117 + F(60000000, P_GPLL0_OUT_AUX2, 5, 0, 0), 1118 + { } 1119 + }; 1120 + 1121 + static struct clk_rcg2 gcc_pdm2_clk_src = { 1122 + .cmd_rcgr = 0x20010, 1123 + .mnd_width = 0, 1124 + .hid_width = 5, 1125 + .parent_map = gcc_parent_map_0, 1126 + .freq_tbl = ftbl_gcc_pdm2_clk_src, 1127 + .clkr.hw.init = &(struct clk_init_data){ 1128 + .name = "gcc_pdm2_clk_src", 1129 + .parent_data = gcc_parents_0, 1130 + .num_parents = ARRAY_SIZE(gcc_parents_0), 1131 + .ops = &clk_rcg2_ops, 1132 + }, 1133 + }; 1134 + 1135 + static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = { 1136 + F(7372800, P_GPLL0_OUT_AUX2, 1, 384, 15625), 1137 + F(14745600, P_GPLL0_OUT_AUX2, 1, 768, 15625), 1138 + F(19200000, P_BI_TCXO, 1, 0, 0), 1139 + F(29491200, P_GPLL0_OUT_AUX2, 1, 1536, 15625), 1140 + F(32000000, P_GPLL0_OUT_AUX2, 1, 8, 75), 1141 + F(48000000, P_GPLL0_OUT_AUX2, 1, 4, 25), 1142 + F(64000000, P_GPLL0_OUT_AUX2, 1, 16, 75), 1143 + F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0), 1144 + F(80000000, P_GPLL0_OUT_AUX2, 1, 4, 15), 1145 + F(96000000, P_GPLL0_OUT_AUX2, 1, 8, 25), 1146 + F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1147 + F(102400000, P_GPLL0_OUT_AUX2, 1, 128, 375), 1148 + F(112000000, P_GPLL0_OUT_AUX2, 1, 28, 75), 1149 + F(117964800, P_GPLL0_OUT_AUX2, 1, 6144, 15625), 1150 + F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0), 1151 + F(128000000, P_GPLL6_OUT_MAIN, 3, 0, 0), 1152 + { } 1153 + }; 1154 + 1155 + static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = { 1156 + .name = "gcc_qupv3_wrap0_s0_clk_src", 1157 + .parent_data = gcc_parents_1, 1158 + .num_parents = ARRAY_SIZE(gcc_parents_1), 1159 + .ops = &clk_rcg2_ops, 1160 + }; 1161 + 1162 + static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = { 1163 + .cmd_rcgr = 0x1f148, 1164 + .mnd_width = 16, 1165 + .hid_width = 5, 1166 + .parent_map = gcc_parent_map_1, 1167 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1168 + .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init, 1169 + }; 1170 + 1171 + static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = { 1172 + .name = "gcc_qupv3_wrap0_s1_clk_src", 1173 + .parent_data = gcc_parents_1, 1174 + .num_parents = ARRAY_SIZE(gcc_parents_1), 1175 + .ops = &clk_rcg2_ops, 1176 + }; 1177 + 1178 + static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = { 1179 + .cmd_rcgr = 0x1f278, 1180 + .mnd_width = 16, 1181 + .hid_width = 5, 1182 + .parent_map = gcc_parent_map_1, 1183 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1184 + .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init, 1185 + }; 1186 + 1187 + static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = { 1188 + .name = "gcc_qupv3_wrap0_s2_clk_src", 1189 + .parent_data = gcc_parents_1, 1190 + .num_parents = ARRAY_SIZE(gcc_parents_1), 1191 + .ops = &clk_rcg2_ops, 1192 + }; 1193 + 1194 + static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = { 1195 + .cmd_rcgr = 0x1f3a8, 1196 + .mnd_width = 16, 1197 + .hid_width = 5, 1198 + .parent_map = gcc_parent_map_1, 1199 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1200 + .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init, 1201 + }; 1202 + 1203 + static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = { 1204 + .name = "gcc_qupv3_wrap0_s3_clk_src", 1205 + .parent_data = gcc_parents_1, 1206 + .num_parents = ARRAY_SIZE(gcc_parents_1), 1207 + .ops = &clk_rcg2_ops, 1208 + }; 1209 + 1210 + static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = { 1211 + .cmd_rcgr = 0x1f4d8, 1212 + .mnd_width = 16, 1213 + .hid_width = 5, 1214 + .parent_map = gcc_parent_map_1, 1215 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1216 + .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init, 1217 + }; 1218 + 1219 + static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = { 1220 + .name = "gcc_qupv3_wrap0_s4_clk_src", 1221 + .parent_data = gcc_parents_1, 1222 + .num_parents = ARRAY_SIZE(gcc_parents_1), 1223 + .ops = &clk_rcg2_ops, 1224 + }; 1225 + 1226 + static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = { 1227 + .cmd_rcgr = 0x1f608, 1228 + .mnd_width = 16, 1229 + .hid_width = 5, 1230 + .parent_map = gcc_parent_map_1, 1231 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1232 + .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init, 1233 + }; 1234 + 1235 + static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = { 1236 + .name = "gcc_qupv3_wrap0_s5_clk_src", 1237 + .parent_data = gcc_parents_1, 1238 + .num_parents = ARRAY_SIZE(gcc_parents_1), 1239 + .ops = &clk_rcg2_ops, 1240 + }; 1241 + 1242 + static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = { 1243 + .cmd_rcgr = 0x1f738, 1244 + .mnd_width = 16, 1245 + .hid_width = 5, 1246 + .parent_map = gcc_parent_map_1, 1247 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1248 + .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init, 1249 + }; 1250 + 1251 + static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = { 1252 + F(144000, P_BI_TCXO, 16, 3, 25), 1253 + F(400000, P_BI_TCXO, 12, 1, 4), 1254 + F(20000000, P_GPLL0_OUT_AUX2, 5, 1, 3), 1255 + F(25000000, P_GPLL0_OUT_AUX2, 6, 1, 2), 1256 + F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0), 1257 + F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1258 + F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0), 1259 + F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0), 1260 + { } 1261 + }; 1262 + 1263 + static struct clk_rcg2 gcc_sdcc1_apps_clk_src = { 1264 + .cmd_rcgr = 0x38028, 1265 + .mnd_width = 8, 1266 + .hid_width = 5, 1267 + .parent_map = gcc_parent_map_1, 1268 + .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src, 1269 + .clkr.hw.init = &(struct clk_init_data){ 1270 + .name = "gcc_sdcc1_apps_clk_src", 1271 + .parent_data = gcc_parents_1, 1272 + .num_parents = ARRAY_SIZE(gcc_parents_1), 1273 + .ops = &clk_rcg2_ops, 1274 + }, 1275 + }; 1276 + 1277 + static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = { 1278 + F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0), 1279 + F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1280 + F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0), 1281 + F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0), 1282 + F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0), 1283 + { } 1284 + }; 1285 + 1286 + static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = { 1287 + .cmd_rcgr = 0x38010, 1288 + .mnd_width = 0, 1289 + .hid_width = 5, 1290 + .parent_map = gcc_parent_map_0, 1291 + .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src, 1292 + .clkr.hw.init = &(struct clk_init_data){ 1293 + .name = "gcc_sdcc1_ice_core_clk_src", 1294 + .parent_data = gcc_parents_0, 1295 + .num_parents = ARRAY_SIZE(gcc_parents_0), 1296 + .ops = &clk_rcg2_ops, 1297 + }, 1298 + }; 1299 + 1300 + static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { 1301 + F(400000, P_BI_TCXO, 12, 1, 4), 1302 + F(19200000, P_BI_TCXO, 1, 0, 0), 1303 + F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0), 1304 + F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0), 1305 + F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1306 + F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0), 1307 + { } 1308 + }; 1309 + 1310 + static struct clk_rcg2 gcc_sdcc2_apps_clk_src = { 1311 + .cmd_rcgr = 0x1e00c, 1312 + .mnd_width = 8, 1313 + .hid_width = 5, 1314 + .parent_map = gcc_parent_map_11, 1315 + .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src, 1316 + .clkr.hw.init = &(struct clk_init_data){ 1317 + .name = "gcc_sdcc2_apps_clk_src", 1318 + .parent_data = gcc_parents_11, 1319 + .num_parents = ARRAY_SIZE(gcc_parents_11), 1320 + .ops = &clk_rcg2_ops, 1321 + .flags = CLK_OPS_PARENT_ENABLE, 1322 + }, 1323 + }; 1324 + 1325 + static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = { 1326 + F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0), 1327 + F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0), 1328 + F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1329 + F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0), 1330 + F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0), 1331 + { } 1332 + }; 1333 + 1334 + static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = { 1335 + .cmd_rcgr = 0x45020, 1336 + .mnd_width = 8, 1337 + .hid_width = 5, 1338 + .parent_map = gcc_parent_map_0, 1339 + .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src, 1340 + .clkr.hw.init = &(struct clk_init_data){ 1341 + .name = "gcc_ufs_phy_axi_clk_src", 1342 + .parent_data = gcc_parents_0, 1343 + .num_parents = ARRAY_SIZE(gcc_parents_0), 1344 + .ops = &clk_rcg2_ops, 1345 + }, 1346 + }; 1347 + 1348 + static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = { 1349 + F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0), 1350 + F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0), 1351 + F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0), 1352 + F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0), 1353 + { } 1354 + }; 1355 + 1356 + static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = { 1357 + .cmd_rcgr = 0x45048, 1358 + .mnd_width = 0, 1359 + .hid_width = 5, 1360 + .parent_map = gcc_parent_map_0, 1361 + .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src, 1362 + .clkr.hw.init = &(struct clk_init_data){ 1363 + .name = "gcc_ufs_phy_ice_core_clk_src", 1364 + .parent_data = gcc_parents_0, 1365 + .num_parents = ARRAY_SIZE(gcc_parents_0), 1366 + .ops = &clk_rcg2_ops, 1367 + }, 1368 + }; 1369 + 1370 + static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = { 1371 + F(9600000, P_BI_TCXO, 2, 0, 0), 1372 + F(19200000, P_BI_TCXO, 1, 0, 0), 1373 + { } 1374 + }; 1375 + 1376 + static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = { 1377 + .cmd_rcgr = 0x4507c, 1378 + .mnd_width = 0, 1379 + .hid_width = 5, 1380 + .parent_map = gcc_parent_map_0, 1381 + .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src, 1382 + .clkr.hw.init = &(struct clk_init_data){ 1383 + .name = "gcc_ufs_phy_phy_aux_clk_src", 1384 + .parent_data = gcc_parents_0, 1385 + .num_parents = ARRAY_SIZE(gcc_parents_0), 1386 + .ops = &clk_rcg2_ops, 1387 + }, 1388 + }; 1389 + 1390 + static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = { 1391 + F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0), 1392 + F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0), 1393 + F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0), 1394 + { } 1395 + }; 1396 + 1397 + static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = { 1398 + .cmd_rcgr = 0x45060, 1399 + .mnd_width = 0, 1400 + .hid_width = 5, 1401 + .parent_map = gcc_parent_map_0, 1402 + .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src, 1403 + .clkr.hw.init = &(struct clk_init_data){ 1404 + .name = "gcc_ufs_phy_unipro_core_clk_src", 1405 + .parent_data = gcc_parents_0, 1406 + .num_parents = ARRAY_SIZE(gcc_parents_0), 1407 + .ops = &clk_rcg2_ops, 1408 + }, 1409 + }; 1410 + 1411 + static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = { 1412 + F(66666667, P_GPLL0_OUT_AUX2, 4.5, 0, 0), 1413 + F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0), 1414 + F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0), 1415 + F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0), 1416 + { } 1417 + }; 1418 + 1419 + static struct clk_rcg2 gcc_usb30_prim_master_clk_src = { 1420 + .cmd_rcgr = 0x1a01c, 1421 + .mnd_width = 8, 1422 + .hid_width = 5, 1423 + .parent_map = gcc_parent_map_0, 1424 + .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src, 1425 + .clkr.hw.init = &(struct clk_init_data){ 1426 + .name = "gcc_usb30_prim_master_clk_src", 1427 + .parent_data = gcc_parents_0, 1428 + .num_parents = ARRAY_SIZE(gcc_parents_0), 1429 + .ops = &clk_rcg2_ops, 1430 + }, 1431 + }; 1432 + 1433 + static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = { 1434 + F(19200000, P_BI_TCXO, 1, 0, 0), 1435 + { } 1436 + }; 1437 + 1438 + static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = { 1439 + .cmd_rcgr = 0x1a034, 1440 + .mnd_width = 0, 1441 + .hid_width = 5, 1442 + .parent_map = gcc_parent_map_0, 1443 + .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src, 1444 + .clkr.hw.init = &(struct clk_init_data){ 1445 + .name = "gcc_usb30_prim_mock_utmi_clk_src", 1446 + .parent_data = gcc_parents_0, 1447 + .num_parents = ARRAY_SIZE(gcc_parents_0), 1448 + .ops = &clk_rcg2_ops, 1449 + }, 1450 + }; 1451 + 1452 + static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = { 1453 + .reg = 0x1a04c, 1454 + .shift = 0, 1455 + .width = 2, 1456 + .clkr.hw.init = &(struct clk_init_data) { 1457 + .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src", 1458 + .parent_hws = (const struct clk_hw *[]) { 1459 + &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw }, 1460 + .num_parents = 1, 1461 + .ops = &clk_regmap_div_ro_ops, 1462 + }, 1463 + }; 1464 + 1465 + static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = { 1466 + .cmd_rcgr = 0x1a060, 1467 + .mnd_width = 0, 1468 + .hid_width = 5, 1469 + .parent_map = gcc_parent_map_12, 1470 + .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src, 1471 + .clkr.hw.init = &(struct clk_init_data){ 1472 + .name = "gcc_usb3_prim_phy_aux_clk_src", 1473 + .parent_data = gcc_parents_12, 1474 + .num_parents = ARRAY_SIZE(gcc_parents_12), 1475 + .ops = &clk_rcg2_ops, 1476 + }, 1477 + }; 1478 + 1479 + static const struct freq_tbl ftbl_gcc_video_venus_clk_src[] = { 1480 + F(133333333, P_GPLL11_OUT_MAIN, 4.5, 0, 0), 1481 + F(240000000, P_GPLL11_OUT_MAIN, 2.5, 0, 0), 1482 + F(300000000, P_GPLL11_OUT_MAIN, 2, 0, 0), 1483 + F(384000000, P_GPLL11_OUT_MAIN, 2, 0, 0), 1484 + { } 1485 + }; 1486 + 1487 + static struct clk_rcg2 gcc_video_venus_clk_src = { 1488 + .cmd_rcgr = 0x58060, 1489 + .mnd_width = 0, 1490 + .hid_width = 5, 1491 + .parent_map = gcc_parent_map_13, 1492 + .freq_tbl = ftbl_gcc_video_venus_clk_src, 1493 + .clkr.hw.init = &(struct clk_init_data){ 1494 + .name = "gcc_video_venus_clk_src", 1495 + .parent_data = gcc_parents_13, 1496 + .num_parents = ARRAY_SIZE(gcc_parents_13), 1497 + .flags = CLK_SET_RATE_PARENT, 1498 + .ops = &clk_rcg2_ops, 1499 + }, 1500 + }; 1501 + 1502 + static struct clk_branch gcc_ahb2phy_csi_clk = { 1503 + .halt_reg = 0x1d004, 1504 + .halt_check = BRANCH_HALT, 1505 + .hwcg_reg = 0x1d004, 1506 + .hwcg_bit = 1, 1507 + .clkr = { 1508 + .enable_reg = 0x1d004, 1509 + .enable_mask = BIT(0), 1510 + .hw.init = &(struct clk_init_data){ 1511 + .name = "gcc_ahb2phy_csi_clk", 1512 + .ops = &clk_branch2_ops, 1513 + }, 1514 + }, 1515 + }; 1516 + 1517 + static struct clk_branch gcc_ahb2phy_usb_clk = { 1518 + .halt_reg = 0x1d008, 1519 + .halt_check = BRANCH_HALT, 1520 + .hwcg_reg = 0x1d008, 1521 + .hwcg_bit = 1, 1522 + .clkr = { 1523 + .enable_reg = 0x1d008, 1524 + .enable_mask = BIT(0), 1525 + .hw.init = &(struct clk_init_data){ 1526 + .name = "gcc_ahb2phy_usb_clk", 1527 + .ops = &clk_branch2_ops, 1528 + }, 1529 + }, 1530 + }; 1531 + 1532 + static struct clk_branch gcc_bimc_gpu_axi_clk = { 1533 + .halt_reg = 0x71154, 1534 + .halt_check = BRANCH_HALT_DELAY, 1535 + .hwcg_reg = 0x71154, 1536 + .hwcg_bit = 1, 1537 + .clkr = { 1538 + .enable_reg = 0x71154, 1539 + .enable_mask = BIT(0), 1540 + .hw.init = &(struct clk_init_data){ 1541 + .name = "gcc_bimc_gpu_axi_clk", 1542 + .ops = &clk_branch2_ops, 1543 + }, 1544 + }, 1545 + }; 1546 + 1547 + static struct clk_branch gcc_boot_rom_ahb_clk = { 1548 + .halt_reg = 0x23004, 1549 + .halt_check = BRANCH_HALT_VOTED, 1550 + .hwcg_reg = 0x23004, 1551 + .hwcg_bit = 1, 1552 + .clkr = { 1553 + .enable_reg = 0x79004, 1554 + .enable_mask = BIT(10), 1555 + .hw.init = &(struct clk_init_data){ 1556 + .name = "gcc_boot_rom_ahb_clk", 1557 + .ops = &clk_branch2_ops, 1558 + }, 1559 + }, 1560 + }; 1561 + 1562 + static struct clk_branch gcc_cam_throttle_nrt_clk = { 1563 + .halt_reg = 0x17070, 1564 + .halt_check = BRANCH_HALT_VOTED, 1565 + .hwcg_reg = 0x17070, 1566 + .hwcg_bit = 1, 1567 + .clkr = { 1568 + .enable_reg = 0x79004, 1569 + .enable_mask = BIT(27), 1570 + .hw.init = &(struct clk_init_data){ 1571 + .name = "gcc_cam_throttle_nrt_clk", 1572 + .ops = &clk_branch2_ops, 1573 + }, 1574 + }, 1575 + }; 1576 + 1577 + static struct clk_branch gcc_cam_throttle_rt_clk = { 1578 + .halt_reg = 0x1706c, 1579 + .halt_check = BRANCH_HALT_VOTED, 1580 + .hwcg_reg = 0x1706c, 1581 + .hwcg_bit = 1, 1582 + .clkr = { 1583 + .enable_reg = 0x79004, 1584 + .enable_mask = BIT(26), 1585 + .hw.init = &(struct clk_init_data){ 1586 + .name = "gcc_cam_throttle_rt_clk", 1587 + .ops = &clk_branch2_ops, 1588 + }, 1589 + }, 1590 + }; 1591 + 1592 + static struct clk_branch gcc_camera_ahb_clk = { 1593 + .halt_reg = 0x17008, 1594 + .halt_check = BRANCH_HALT_DELAY, 1595 + .hwcg_reg = 0x17008, 1596 + .hwcg_bit = 1, 1597 + .clkr = { 1598 + .enable_reg = 0x17008, 1599 + .enable_mask = BIT(0), 1600 + .hw.init = &(struct clk_init_data){ 1601 + .name = "gcc_camera_ahb_clk", 1602 + .flags = CLK_IS_CRITICAL, 1603 + .ops = &clk_branch2_ops, 1604 + }, 1605 + }, 1606 + }; 1607 + 1608 + static struct clk_branch gcc_camera_xo_clk = { 1609 + .halt_reg = 0x17028, 1610 + .halt_check = BRANCH_HALT, 1611 + .clkr = { 1612 + .enable_reg = 0x17028, 1613 + .enable_mask = BIT(0), 1614 + .hw.init = &(struct clk_init_data){ 1615 + .name = "gcc_camera_xo_clk", 1616 + .flags = CLK_IS_CRITICAL, 1617 + .ops = &clk_branch2_ops, 1618 + }, 1619 + }, 1620 + }; 1621 + 1622 + static struct clk_branch gcc_camss_axi_clk = { 1623 + .halt_reg = 0x58044, 1624 + .halt_check = BRANCH_HALT, 1625 + .clkr = { 1626 + .enable_reg = 0x58044, 1627 + .enable_mask = BIT(0), 1628 + .hw.init = &(struct clk_init_data){ 1629 + .name = "gcc_camss_axi_clk", 1630 + .parent_hws = (const struct clk_hw *[]){ 1631 + &gcc_camss_axi_clk_src.clkr.hw, 1632 + }, 1633 + .num_parents = 1, 1634 + .flags = CLK_SET_RATE_PARENT, 1635 + .ops = &clk_branch2_ops, 1636 + }, 1637 + }, 1638 + }; 1639 + 1640 + static struct clk_branch gcc_camss_camnoc_atb_clk = { 1641 + .halt_reg = 0x5804c, 1642 + .halt_check = BRANCH_HALT_DELAY, 1643 + .hwcg_reg = 0x5804c, 1644 + .hwcg_bit = 1, 1645 + .clkr = { 1646 + .enable_reg = 0x5804c, 1647 + .enable_mask = BIT(0), 1648 + .hw.init = &(struct clk_init_data){ 1649 + .name = "gcc_camss_camnoc_atb_clk", 1650 + .ops = &clk_branch2_ops, 1651 + }, 1652 + }, 1653 + }; 1654 + 1655 + static struct clk_branch gcc_camss_camnoc_nts_xo_clk = { 1656 + .halt_reg = 0x58050, 1657 + .halt_check = BRANCH_HALT_DELAY, 1658 + .hwcg_reg = 0x58050, 1659 + .hwcg_bit = 1, 1660 + .clkr = { 1661 + .enable_reg = 0x58050, 1662 + .enable_mask = BIT(0), 1663 + .hw.init = &(struct clk_init_data){ 1664 + .name = "gcc_camss_camnoc_nts_xo_clk", 1665 + .ops = &clk_branch2_ops, 1666 + }, 1667 + }, 1668 + }; 1669 + 1670 + static struct clk_branch gcc_camss_cci_0_clk = { 1671 + .halt_reg = 0x56018, 1672 + .halt_check = BRANCH_HALT, 1673 + .clkr = { 1674 + .enable_reg = 0x56018, 1675 + .enable_mask = BIT(0), 1676 + .hw.init = &(struct clk_init_data){ 1677 + .name = "gcc_camss_cci_0_clk", 1678 + .parent_hws = (const struct clk_hw *[]){ 1679 + &gcc_camss_cci_clk_src.clkr.hw, 1680 + }, 1681 + .num_parents = 1, 1682 + .flags = CLK_SET_RATE_PARENT, 1683 + .ops = &clk_branch2_ops, 1684 + }, 1685 + }, 1686 + }; 1687 + 1688 + static struct clk_branch gcc_camss_cphy_0_clk = { 1689 + .halt_reg = 0x52088, 1690 + .halt_check = BRANCH_HALT, 1691 + .clkr = { 1692 + .enable_reg = 0x52088, 1693 + .enable_mask = BIT(0), 1694 + .hw.init = &(struct clk_init_data){ 1695 + .name = "gcc_camss_cphy_0_clk", 1696 + .parent_hws = (const struct clk_hw *[]){ 1697 + &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw, 1698 + }, 1699 + .num_parents = 1, 1700 + .flags = CLK_SET_RATE_PARENT, 1701 + .ops = &clk_branch2_ops, 1702 + }, 1703 + }, 1704 + }; 1705 + 1706 + static struct clk_branch gcc_camss_cphy_1_clk = { 1707 + .halt_reg = 0x5208c, 1708 + .halt_check = BRANCH_HALT, 1709 + .clkr = { 1710 + .enable_reg = 0x5208c, 1711 + .enable_mask = BIT(0), 1712 + .hw.init = &(struct clk_init_data){ 1713 + .name = "gcc_camss_cphy_1_clk", 1714 + .parent_hws = (const struct clk_hw *[]){ 1715 + &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw, 1716 + }, 1717 + .num_parents = 1, 1718 + .flags = CLK_SET_RATE_PARENT, 1719 + .ops = &clk_branch2_ops, 1720 + }, 1721 + }, 1722 + }; 1723 + 1724 + static struct clk_branch gcc_camss_cphy_2_clk = { 1725 + .halt_reg = 0x52090, 1726 + .halt_check = BRANCH_HALT, 1727 + .clkr = { 1728 + .enable_reg = 0x52090, 1729 + .enable_mask = BIT(0), 1730 + .hw.init = &(struct clk_init_data){ 1731 + .name = "gcc_camss_cphy_2_clk", 1732 + .parent_hws = (const struct clk_hw *[]){ 1733 + &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw, 1734 + }, 1735 + .num_parents = 1, 1736 + .flags = CLK_SET_RATE_PARENT, 1737 + .ops = &clk_branch2_ops, 1738 + }, 1739 + }, 1740 + }; 1741 + 1742 + static struct clk_branch gcc_camss_csi0phytimer_clk = { 1743 + .halt_reg = 0x59018, 1744 + .halt_check = BRANCH_HALT, 1745 + .clkr = { 1746 + .enable_reg = 0x59018, 1747 + .enable_mask = BIT(0), 1748 + .hw.init = &(struct clk_init_data){ 1749 + .name = "gcc_camss_csi0phytimer_clk", 1750 + .parent_hws = (const struct clk_hw *[]){ 1751 + &gcc_camss_csi0phytimer_clk_src.clkr.hw, 1752 + }, 1753 + .num_parents = 1, 1754 + .flags = CLK_SET_RATE_PARENT, 1755 + .ops = &clk_branch2_ops, 1756 + }, 1757 + }, 1758 + }; 1759 + 1760 + static struct clk_branch gcc_camss_csi1phytimer_clk = { 1761 + .halt_reg = 0x59034, 1762 + .halt_check = BRANCH_HALT, 1763 + .clkr = { 1764 + .enable_reg = 0x59034, 1765 + .enable_mask = BIT(0), 1766 + .hw.init = &(struct clk_init_data){ 1767 + .name = "gcc_camss_csi1phytimer_clk", 1768 + .parent_hws = (const struct clk_hw *[]){ 1769 + &gcc_camss_csi1phytimer_clk_src.clkr.hw, 1770 + }, 1771 + .num_parents = 1, 1772 + .flags = CLK_SET_RATE_PARENT, 1773 + .ops = &clk_branch2_ops, 1774 + }, 1775 + }, 1776 + }; 1777 + 1778 + static struct clk_branch gcc_camss_csi2phytimer_clk = { 1779 + .halt_reg = 0x59050, 1780 + .halt_check = BRANCH_HALT, 1781 + .clkr = { 1782 + .enable_reg = 0x59050, 1783 + .enable_mask = BIT(0), 1784 + .hw.init = &(struct clk_init_data){ 1785 + .name = "gcc_camss_csi2phytimer_clk", 1786 + .parent_hws = (const struct clk_hw *[]){ 1787 + &gcc_camss_csi2phytimer_clk_src.clkr.hw, 1788 + }, 1789 + .num_parents = 1, 1790 + .flags = CLK_SET_RATE_PARENT, 1791 + .ops = &clk_branch2_ops, 1792 + }, 1793 + }, 1794 + }; 1795 + 1796 + static struct clk_branch gcc_camss_mclk0_clk = { 1797 + .halt_reg = 0x51018, 1798 + .halt_check = BRANCH_HALT, 1799 + .clkr = { 1800 + .enable_reg = 0x51018, 1801 + .enable_mask = BIT(0), 1802 + .hw.init = &(struct clk_init_data){ 1803 + .name = "gcc_camss_mclk0_clk", 1804 + .parent_hws = (const struct clk_hw *[]){ 1805 + &gcc_camss_mclk0_clk_src.clkr.hw, 1806 + }, 1807 + .num_parents = 1, 1808 + .flags = CLK_SET_RATE_PARENT, 1809 + .ops = &clk_branch2_ops, 1810 + }, 1811 + }, 1812 + }; 1813 + 1814 + static struct clk_branch gcc_camss_mclk1_clk = { 1815 + .halt_reg = 0x51034, 1816 + .halt_check = BRANCH_HALT, 1817 + .clkr = { 1818 + .enable_reg = 0x51034, 1819 + .enable_mask = BIT(0), 1820 + .hw.init = &(struct clk_init_data){ 1821 + .name = "gcc_camss_mclk1_clk", 1822 + .parent_hws = (const struct clk_hw *[]){ 1823 + &gcc_camss_mclk1_clk_src.clkr.hw, 1824 + }, 1825 + .num_parents = 1, 1826 + .flags = CLK_SET_RATE_PARENT, 1827 + .ops = &clk_branch2_ops, 1828 + }, 1829 + }, 1830 + }; 1831 + 1832 + static struct clk_branch gcc_camss_mclk2_clk = { 1833 + .halt_reg = 0x51050, 1834 + .halt_check = BRANCH_HALT, 1835 + .clkr = { 1836 + .enable_reg = 0x51050, 1837 + .enable_mask = BIT(0), 1838 + .hw.init = &(struct clk_init_data){ 1839 + .name = "gcc_camss_mclk2_clk", 1840 + .parent_hws = (const struct clk_hw *[]){ 1841 + &gcc_camss_mclk2_clk_src.clkr.hw, 1842 + }, 1843 + .num_parents = 1, 1844 + .flags = CLK_SET_RATE_PARENT, 1845 + .ops = &clk_branch2_ops, 1846 + }, 1847 + }, 1848 + }; 1849 + 1850 + static struct clk_branch gcc_camss_mclk3_clk = { 1851 + .halt_reg = 0x5106c, 1852 + .halt_check = BRANCH_HALT, 1853 + .clkr = { 1854 + .enable_reg = 0x5106c, 1855 + .enable_mask = BIT(0), 1856 + .hw.init = &(struct clk_init_data){ 1857 + .name = "gcc_camss_mclk3_clk", 1858 + .parent_hws = (const struct clk_hw *[]){ 1859 + &gcc_camss_mclk3_clk_src.clkr.hw, 1860 + }, 1861 + .num_parents = 1, 1862 + .flags = CLK_SET_RATE_PARENT, 1863 + .ops = &clk_branch2_ops, 1864 + }, 1865 + }, 1866 + }; 1867 + 1868 + static struct clk_branch gcc_camss_nrt_axi_clk = { 1869 + .halt_reg = 0x58054, 1870 + .halt_check = BRANCH_HALT, 1871 + .clkr = { 1872 + .enable_reg = 0x58054, 1873 + .enable_mask = BIT(0), 1874 + .hw.init = &(struct clk_init_data){ 1875 + .name = "gcc_camss_nrt_axi_clk", 1876 + .ops = &clk_branch2_ops, 1877 + }, 1878 + }, 1879 + }; 1880 + 1881 + static struct clk_branch gcc_camss_ope_ahb_clk = { 1882 + .halt_reg = 0x5503c, 1883 + .halt_check = BRANCH_HALT, 1884 + .clkr = { 1885 + .enable_reg = 0x5503c, 1886 + .enable_mask = BIT(0), 1887 + .hw.init = &(struct clk_init_data){ 1888 + .name = "gcc_camss_ope_ahb_clk", 1889 + .parent_hws = (const struct clk_hw *[]){ 1890 + &gcc_camss_ope_ahb_clk_src.clkr.hw, 1891 + }, 1892 + .num_parents = 1, 1893 + .flags = CLK_SET_RATE_PARENT, 1894 + .ops = &clk_branch2_ops, 1895 + }, 1896 + }, 1897 + }; 1898 + 1899 + static struct clk_branch gcc_camss_ope_clk = { 1900 + .halt_reg = 0x5501c, 1901 + .halt_check = BRANCH_HALT, 1902 + .clkr = { 1903 + .enable_reg = 0x5501c, 1904 + .enable_mask = BIT(0), 1905 + .hw.init = &(struct clk_init_data){ 1906 + .name = "gcc_camss_ope_clk", 1907 + .parent_hws = (const struct clk_hw *[]){ 1908 + &gcc_camss_ope_clk_src.clkr.hw, 1909 + }, 1910 + .num_parents = 1, 1911 + .flags = CLK_SET_RATE_PARENT, 1912 + .ops = &clk_branch2_ops, 1913 + }, 1914 + }, 1915 + }; 1916 + 1917 + static struct clk_branch gcc_camss_rt_axi_clk = { 1918 + .halt_reg = 0x5805c, 1919 + .halt_check = BRANCH_HALT, 1920 + .clkr = { 1921 + .enable_reg = 0x5805c, 1922 + .enable_mask = BIT(0), 1923 + .hw.init = &(struct clk_init_data){ 1924 + .name = "gcc_camss_rt_axi_clk", 1925 + .ops = &clk_branch2_ops, 1926 + }, 1927 + }, 1928 + }; 1929 + 1930 + static struct clk_branch gcc_camss_tfe_0_clk = { 1931 + .halt_reg = 0x5201c, 1932 + .halt_check = BRANCH_HALT, 1933 + .clkr = { 1934 + .enable_reg = 0x5201c, 1935 + .enable_mask = BIT(0), 1936 + .hw.init = &(struct clk_init_data){ 1937 + .name = "gcc_camss_tfe_0_clk", 1938 + .parent_hws = (const struct clk_hw *[]){ 1939 + &gcc_camss_tfe_0_clk_src.clkr.hw, 1940 + }, 1941 + .num_parents = 1, 1942 + .flags = CLK_SET_RATE_PARENT, 1943 + .ops = &clk_branch2_ops, 1944 + }, 1945 + }, 1946 + }; 1947 + 1948 + static struct clk_branch gcc_camss_tfe_0_cphy_rx_clk = { 1949 + .halt_reg = 0x5207c, 1950 + .halt_check = BRANCH_HALT, 1951 + .clkr = { 1952 + .enable_reg = 0x5207c, 1953 + .enable_mask = BIT(0), 1954 + .hw.init = &(struct clk_init_data){ 1955 + .name = "gcc_camss_tfe_0_cphy_rx_clk", 1956 + .parent_hws = (const struct clk_hw *[]){ 1957 + &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw, 1958 + }, 1959 + .num_parents = 1, 1960 + .flags = CLK_SET_RATE_PARENT, 1961 + .ops = &clk_branch2_ops, 1962 + }, 1963 + }, 1964 + }; 1965 + 1966 + static struct clk_branch gcc_camss_tfe_0_csid_clk = { 1967 + .halt_reg = 0x520ac, 1968 + .halt_check = BRANCH_HALT, 1969 + .clkr = { 1970 + .enable_reg = 0x520ac, 1971 + .enable_mask = BIT(0), 1972 + .hw.init = &(struct clk_init_data){ 1973 + .name = "gcc_camss_tfe_0_csid_clk", 1974 + .parent_hws = (const struct clk_hw *[]){ 1975 + &gcc_camss_tfe_0_csid_clk_src.clkr.hw, 1976 + }, 1977 + .num_parents = 1, 1978 + .flags = CLK_SET_RATE_PARENT, 1979 + .ops = &clk_branch2_ops, 1980 + }, 1981 + }, 1982 + }; 1983 + 1984 + static struct clk_branch gcc_camss_tfe_1_clk = { 1985 + .halt_reg = 0x5203c, 1986 + .halt_check = BRANCH_HALT, 1987 + .clkr = { 1988 + .enable_reg = 0x5203c, 1989 + .enable_mask = BIT(0), 1990 + .hw.init = &(struct clk_init_data){ 1991 + .name = "gcc_camss_tfe_1_clk", 1992 + .parent_hws = (const struct clk_hw *[]){ 1993 + &gcc_camss_tfe_1_clk_src.clkr.hw, 1994 + }, 1995 + .num_parents = 1, 1996 + .flags = CLK_SET_RATE_PARENT, 1997 + .ops = &clk_branch2_ops, 1998 + }, 1999 + }, 2000 + }; 2001 + 2002 + static struct clk_branch gcc_camss_tfe_1_cphy_rx_clk = { 2003 + .halt_reg = 0x52080, 2004 + .halt_check = BRANCH_HALT, 2005 + .clkr = { 2006 + .enable_reg = 0x52080, 2007 + .enable_mask = BIT(0), 2008 + .hw.init = &(struct clk_init_data){ 2009 + .name = "gcc_camss_tfe_1_cphy_rx_clk", 2010 + .parent_hws = (const struct clk_hw *[]){ 2011 + &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw, 2012 + }, 2013 + .num_parents = 1, 2014 + .flags = CLK_SET_RATE_PARENT, 2015 + .ops = &clk_branch2_ops, 2016 + }, 2017 + }, 2018 + }; 2019 + 2020 + static struct clk_branch gcc_camss_tfe_1_csid_clk = { 2021 + .halt_reg = 0x520cc, 2022 + .halt_check = BRANCH_HALT, 2023 + .clkr = { 2024 + .enable_reg = 0x520cc, 2025 + .enable_mask = BIT(0), 2026 + .hw.init = &(struct clk_init_data){ 2027 + .name = "gcc_camss_tfe_1_csid_clk", 2028 + .parent_hws = (const struct clk_hw *[]){ 2029 + &gcc_camss_tfe_1_csid_clk_src.clkr.hw, 2030 + }, 2031 + .num_parents = 1, 2032 + .flags = CLK_SET_RATE_PARENT, 2033 + .ops = &clk_branch2_ops, 2034 + }, 2035 + }, 2036 + }; 2037 + 2038 + static struct clk_branch gcc_camss_tfe_2_clk = { 2039 + .halt_reg = 0x5205c, 2040 + .halt_check = BRANCH_HALT, 2041 + .clkr = { 2042 + .enable_reg = 0x5205c, 2043 + .enable_mask = BIT(0), 2044 + .hw.init = &(struct clk_init_data){ 2045 + .name = "gcc_camss_tfe_2_clk", 2046 + .parent_hws = (const struct clk_hw *[]){ 2047 + &gcc_camss_tfe_2_clk_src.clkr.hw, 2048 + }, 2049 + .num_parents = 1, 2050 + .flags = CLK_SET_RATE_PARENT, 2051 + .ops = &clk_branch2_ops, 2052 + }, 2053 + }, 2054 + }; 2055 + 2056 + static struct clk_branch gcc_camss_tfe_2_cphy_rx_clk = { 2057 + .halt_reg = 0x52084, 2058 + .halt_check = BRANCH_HALT, 2059 + .clkr = { 2060 + .enable_reg = 0x52084, 2061 + .enable_mask = BIT(0), 2062 + .hw.init = &(struct clk_init_data){ 2063 + .name = "gcc_camss_tfe_2_cphy_rx_clk", 2064 + .parent_hws = (const struct clk_hw *[]){ 2065 + &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw, 2066 + }, 2067 + .num_parents = 1, 2068 + .flags = CLK_SET_RATE_PARENT, 2069 + .ops = &clk_branch2_ops, 2070 + }, 2071 + }, 2072 + }; 2073 + 2074 + static struct clk_branch gcc_camss_tfe_2_csid_clk = { 2075 + .halt_reg = 0x520ec, 2076 + .halt_check = BRANCH_HALT, 2077 + .clkr = { 2078 + .enable_reg = 0x520ec, 2079 + .enable_mask = BIT(0), 2080 + .hw.init = &(struct clk_init_data){ 2081 + .name = "gcc_camss_tfe_2_csid_clk", 2082 + .parent_hws = (const struct clk_hw *[]){ 2083 + &gcc_camss_tfe_2_csid_clk_src.clkr.hw, 2084 + }, 2085 + .num_parents = 1, 2086 + .flags = CLK_SET_RATE_PARENT, 2087 + .ops = &clk_branch2_ops, 2088 + }, 2089 + }, 2090 + }; 2091 + 2092 + static struct clk_branch gcc_camss_top_ahb_clk = { 2093 + .halt_reg = 0x58028, 2094 + .halt_check = BRANCH_HALT, 2095 + .clkr = { 2096 + .enable_reg = 0x58028, 2097 + .enable_mask = BIT(0), 2098 + .hw.init = &(struct clk_init_data){ 2099 + .name = "gcc_camss_top_ahb_clk", 2100 + .parent_hws = (const struct clk_hw *[]){ 2101 + &gcc_camss_top_ahb_clk_src.clkr.hw, 2102 + }, 2103 + .num_parents = 1, 2104 + .flags = CLK_SET_RATE_PARENT, 2105 + .ops = &clk_branch2_ops, 2106 + }, 2107 + }, 2108 + }; 2109 + 2110 + static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = { 2111 + .halt_reg = 0x1a084, 2112 + .halt_check = BRANCH_HALT, 2113 + .hwcg_reg = 0x1a084, 2114 + .hwcg_bit = 1, 2115 + .clkr = { 2116 + .enable_reg = 0x1a084, 2117 + .enable_mask = BIT(0), 2118 + .hw.init = &(struct clk_init_data){ 2119 + .name = "gcc_cfg_noc_usb3_prim_axi_clk", 2120 + .parent_hws = (const struct clk_hw *[]){ 2121 + &gcc_usb30_prim_master_clk_src.clkr.hw, 2122 + }, 2123 + .num_parents = 1, 2124 + .flags = CLK_SET_RATE_PARENT, 2125 + .ops = &clk_branch2_ops, 2126 + }, 2127 + }, 2128 + }; 2129 + 2130 + static struct clk_branch gcc_cpuss_gnoc_clk = { 2131 + .halt_reg = 0x2b004, 2132 + .halt_check = BRANCH_HALT_VOTED, 2133 + .hwcg_reg = 0x2b004, 2134 + .hwcg_bit = 1, 2135 + .clkr = { 2136 + .enable_reg = 0x79004, 2137 + .enable_mask = BIT(22), 2138 + .hw.init = &(struct clk_init_data){ 2139 + .name = "gcc_cpuss_gnoc_clk", 2140 + .flags = CLK_IS_CRITICAL, 2141 + .ops = &clk_branch2_ops, 2142 + }, 2143 + }, 2144 + }; 2145 + 2146 + static struct clk_branch gcc_disp_ahb_clk = { 2147 + .halt_reg = 0x1700c, 2148 + .halt_check = BRANCH_HALT, 2149 + .hwcg_reg = 0x1700c, 2150 + .hwcg_bit = 1, 2151 + .clkr = { 2152 + .enable_reg = 0x1700c, 2153 + .enable_mask = BIT(0), 2154 + .hw.init = &(struct clk_init_data){ 2155 + .name = "gcc_disp_ahb_clk", 2156 + .flags = CLK_IS_CRITICAL, 2157 + .ops = &clk_branch2_ops, 2158 + }, 2159 + }, 2160 + }; 2161 + 2162 + static struct clk_regmap_div gcc_disp_gpll0_clk_src = { 2163 + .reg = 0x17058, 2164 + .shift = 0, 2165 + .width = 2, 2166 + .clkr.hw.init = &(struct clk_init_data) { 2167 + .name = "gcc_disp_gpll0_clk_src", 2168 + .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw }, 2169 + .num_parents = 1, 2170 + .ops = &clk_regmap_div_ops, 2171 + }, 2172 + }; 2173 + 2174 + static struct clk_branch gcc_disp_gpll0_div_clk_src = { 2175 + .halt_check = BRANCH_HALT_DELAY, 2176 + .clkr = { 2177 + .enable_reg = 0x79004, 2178 + .enable_mask = BIT(20), 2179 + .hw.init = &(struct clk_init_data){ 2180 + .name = "gcc_disp_gpll0_div_clk_src", 2181 + .parent_hws = (const struct clk_hw *[]){ 2182 + &gcc_disp_gpll0_clk_src.clkr.hw, 2183 + }, 2184 + .num_parents = 1, 2185 + .flags = CLK_SET_RATE_PARENT, 2186 + .ops = &clk_branch2_ops, 2187 + }, 2188 + }, 2189 + }; 2190 + 2191 + static struct clk_branch gcc_disp_hf_axi_clk = { 2192 + .halt_reg = 0x17020, 2193 + .halt_check = BRANCH_HALT, 2194 + .hwcg_reg = 0x17020, 2195 + .hwcg_bit = 1, 2196 + .clkr = { 2197 + .enable_reg = 0x17020, 2198 + .enable_mask = BIT(0), 2199 + .hw.init = &(struct clk_init_data){ 2200 + .name = "gcc_disp_hf_axi_clk", 2201 + .ops = &clk_branch2_ops, 2202 + }, 2203 + }, 2204 + }; 2205 + 2206 + static struct clk_branch gcc_disp_throttle_core_clk = { 2207 + .halt_reg = 0x17064, 2208 + .halt_check = BRANCH_HALT_VOTED, 2209 + .hwcg_reg = 0x17064, 2210 + .hwcg_bit = 1, 2211 + .clkr = { 2212 + .enable_reg = 0x7900c, 2213 + .enable_mask = BIT(5), 2214 + .hw.init = &(struct clk_init_data){ 2215 + .name = "gcc_disp_throttle_core_clk", 2216 + .ops = &clk_branch2_ops, 2217 + }, 2218 + }, 2219 + }; 2220 + 2221 + static struct clk_branch gcc_disp_xo_clk = { 2222 + .halt_reg = 0x1702c, 2223 + .halt_check = BRANCH_HALT, 2224 + .clkr = { 2225 + .enable_reg = 0x1702c, 2226 + .enable_mask = BIT(0), 2227 + .hw.init = &(struct clk_init_data){ 2228 + .name = "gcc_disp_xo_clk", 2229 + .flags = CLK_IS_CRITICAL, 2230 + .ops = &clk_branch2_ops, 2231 + }, 2232 + }, 2233 + }; 2234 + 2235 + static struct clk_branch gcc_gp1_clk = { 2236 + .halt_reg = 0x4d000, 2237 + .halt_check = BRANCH_HALT, 2238 + .clkr = { 2239 + .enable_reg = 0x4d000, 2240 + .enable_mask = BIT(0), 2241 + .hw.init = &(struct clk_init_data){ 2242 + .name = "gcc_gp1_clk", 2243 + .parent_hws = (const struct clk_hw *[]){ 2244 + &gcc_gp1_clk_src.clkr.hw, 2245 + }, 2246 + .num_parents = 1, 2247 + .flags = CLK_SET_RATE_PARENT, 2248 + .ops = &clk_branch2_ops, 2249 + }, 2250 + }, 2251 + }; 2252 + 2253 + static struct clk_branch gcc_gp2_clk = { 2254 + .halt_reg = 0x4e000, 2255 + .halt_check = BRANCH_HALT, 2256 + .clkr = { 2257 + .enable_reg = 0x4e000, 2258 + .enable_mask = BIT(0), 2259 + .hw.init = &(struct clk_init_data){ 2260 + .name = "gcc_gp2_clk", 2261 + .parent_hws = (const struct clk_hw *[]){ 2262 + &gcc_gp2_clk_src.clkr.hw, 2263 + }, 2264 + .num_parents = 1, 2265 + .flags = CLK_SET_RATE_PARENT, 2266 + .ops = &clk_branch2_ops, 2267 + }, 2268 + }, 2269 + }; 2270 + 2271 + static struct clk_branch gcc_gp3_clk = { 2272 + .halt_reg = 0x4f000, 2273 + .halt_check = BRANCH_HALT, 2274 + .clkr = { 2275 + .enable_reg = 0x4f000, 2276 + .enable_mask = BIT(0), 2277 + .hw.init = &(struct clk_init_data){ 2278 + .name = "gcc_gp3_clk", 2279 + .parent_hws = (const struct clk_hw *[]){ 2280 + &gcc_gp3_clk_src.clkr.hw, 2281 + }, 2282 + .num_parents = 1, 2283 + .flags = CLK_SET_RATE_PARENT, 2284 + .ops = &clk_branch2_ops, 2285 + }, 2286 + }, 2287 + }; 2288 + 2289 + static struct clk_branch gcc_gpu_cfg_ahb_clk = { 2290 + .halt_reg = 0x36004, 2291 + .halt_check = BRANCH_HALT, 2292 + .hwcg_reg = 0x36004, 2293 + .hwcg_bit = 1, 2294 + .clkr = { 2295 + .enable_reg = 0x36004, 2296 + .enable_mask = BIT(0), 2297 + .hw.init = &(struct clk_init_data){ 2298 + .name = "gcc_gpu_cfg_ahb_clk", 2299 + .flags = CLK_IS_CRITICAL, 2300 + .ops = &clk_branch2_ops, 2301 + }, 2302 + }, 2303 + }; 2304 + 2305 + static struct clk_branch gcc_gpu_gpll0_clk_src = { 2306 + .halt_check = BRANCH_HALT_DELAY, 2307 + .clkr = { 2308 + .enable_reg = 0x79004, 2309 + .enable_mask = BIT(15), 2310 + .hw.init = &(struct clk_init_data){ 2311 + .name = "gcc_gpu_gpll0_clk_src", 2312 + .parent_hws = (const struct clk_hw *[]){ 2313 + &gpll0.clkr.hw, 2314 + }, 2315 + .num_parents = 1, 2316 + .flags = CLK_SET_RATE_PARENT, 2317 + .ops = &clk_branch2_ops, 2318 + }, 2319 + }, 2320 + }; 2321 + 2322 + static struct clk_branch gcc_gpu_gpll0_div_clk_src = { 2323 + .halt_check = BRANCH_HALT_DELAY, 2324 + .clkr = { 2325 + .enable_reg = 0x79004, 2326 + .enable_mask = BIT(16), 2327 + .hw.init = &(struct clk_init_data){ 2328 + .name = "gcc_gpu_gpll0_div_clk_src", 2329 + .parent_hws = (const struct clk_hw *[]){ 2330 + &gpll0_out_aux2.clkr.hw, 2331 + }, 2332 + .num_parents = 1, 2333 + .flags = CLK_SET_RATE_PARENT, 2334 + .ops = &clk_branch2_ops, 2335 + }, 2336 + }, 2337 + }; 2338 + 2339 + static struct clk_branch gcc_gpu_iref_clk = { 2340 + .halt_reg = 0x36100, 2341 + .halt_check = BRANCH_HALT_DELAY, 2342 + .clkr = { 2343 + .enable_reg = 0x36100, 2344 + .enable_mask = BIT(0), 2345 + .hw.init = &(struct clk_init_data){ 2346 + .name = "gcc_gpu_iref_clk", 2347 + .ops = &clk_branch2_ops, 2348 + }, 2349 + }, 2350 + }; 2351 + 2352 + static struct clk_branch gcc_gpu_memnoc_gfx_clk = { 2353 + .halt_reg = 0x3600c, 2354 + .halt_check = BRANCH_VOTED, 2355 + .hwcg_reg = 0x3600c, 2356 + .hwcg_bit = 1, 2357 + .clkr = { 2358 + .enable_reg = 0x3600c, 2359 + .enable_mask = BIT(0), 2360 + .hw.init = &(struct clk_init_data){ 2361 + .name = "gcc_gpu_memnoc_gfx_clk", 2362 + .ops = &clk_branch2_ops, 2363 + }, 2364 + }, 2365 + }; 2366 + 2367 + static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = { 2368 + .halt_reg = 0x36018, 2369 + .halt_check = BRANCH_HALT, 2370 + .clkr = { 2371 + .enable_reg = 0x36018, 2372 + .enable_mask = BIT(0), 2373 + .hw.init = &(struct clk_init_data){ 2374 + .name = "gcc_gpu_snoc_dvm_gfx_clk", 2375 + .ops = &clk_branch2_ops, 2376 + }, 2377 + }, 2378 + }; 2379 + 2380 + static struct clk_branch gcc_gpu_throttle_core_clk = { 2381 + .halt_reg = 0x36048, 2382 + .halt_check = BRANCH_HALT_VOTED, 2383 + .hwcg_reg = 0x36048, 2384 + .hwcg_bit = 1, 2385 + .clkr = { 2386 + .enable_reg = 0x79004, 2387 + .enable_mask = BIT(31), 2388 + .hw.init = &(struct clk_init_data){ 2389 + .name = "gcc_gpu_throttle_core_clk", 2390 + .ops = &clk_branch2_ops, 2391 + }, 2392 + }, 2393 + }; 2394 + 2395 + static struct clk_branch gcc_pdm2_clk = { 2396 + .halt_reg = 0x2000c, 2397 + .halt_check = BRANCH_HALT, 2398 + .clkr = { 2399 + .enable_reg = 0x2000c, 2400 + .enable_mask = BIT(0), 2401 + .hw.init = &(struct clk_init_data){ 2402 + .name = "gcc_pdm2_clk", 2403 + .parent_hws = (const struct clk_hw *[]){ 2404 + &gcc_pdm2_clk_src.clkr.hw, 2405 + }, 2406 + .num_parents = 1, 2407 + .flags = CLK_SET_RATE_PARENT, 2408 + .ops = &clk_branch2_ops, 2409 + }, 2410 + }, 2411 + }; 2412 + 2413 + static struct clk_branch gcc_pdm_ahb_clk = { 2414 + .halt_reg = 0x20004, 2415 + .halt_check = BRANCH_HALT, 2416 + .hwcg_reg = 0x20004, 2417 + .hwcg_bit = 1, 2418 + .clkr = { 2419 + .enable_reg = 0x20004, 2420 + .enable_mask = BIT(0), 2421 + .hw.init = &(struct clk_init_data){ 2422 + .name = "gcc_pdm_ahb_clk", 2423 + .ops = &clk_branch2_ops, 2424 + }, 2425 + }, 2426 + }; 2427 + 2428 + static struct clk_branch gcc_pdm_xo4_clk = { 2429 + .halt_reg = 0x20008, 2430 + .halt_check = BRANCH_HALT, 2431 + .clkr = { 2432 + .enable_reg = 0x20008, 2433 + .enable_mask = BIT(0), 2434 + .hw.init = &(struct clk_init_data){ 2435 + .name = "gcc_pdm_xo4_clk", 2436 + .ops = &clk_branch2_ops, 2437 + }, 2438 + }, 2439 + }; 2440 + 2441 + static struct clk_branch gcc_prng_ahb_clk = { 2442 + .halt_reg = 0x21004, 2443 + .halt_check = BRANCH_HALT_VOTED, 2444 + .hwcg_reg = 0x21004, 2445 + .hwcg_bit = 1, 2446 + .clkr = { 2447 + .enable_reg = 0x79004, 2448 + .enable_mask = BIT(13), 2449 + .hw.init = &(struct clk_init_data){ 2450 + .name = "gcc_prng_ahb_clk", 2451 + .ops = &clk_branch2_ops, 2452 + }, 2453 + }, 2454 + }; 2455 + 2456 + static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = { 2457 + .halt_reg = 0x17014, 2458 + .halt_check = BRANCH_HALT_VOTED, 2459 + .hwcg_reg = 0x17014, 2460 + .hwcg_bit = 1, 2461 + .clkr = { 2462 + .enable_reg = 0x7900c, 2463 + .enable_mask = BIT(0), 2464 + .hw.init = &(struct clk_init_data){ 2465 + .name = "gcc_qmip_camera_nrt_ahb_clk", 2466 + .ops = &clk_branch2_ops, 2467 + }, 2468 + }, 2469 + }; 2470 + 2471 + static struct clk_branch gcc_qmip_camera_rt_ahb_clk = { 2472 + .halt_reg = 0x17060, 2473 + .halt_check = BRANCH_HALT_VOTED, 2474 + .hwcg_reg = 0x17060, 2475 + .hwcg_bit = 1, 2476 + .clkr = { 2477 + .enable_reg = 0x7900c, 2478 + .enable_mask = BIT(2), 2479 + .hw.init = &(struct clk_init_data){ 2480 + .name = "gcc_qmip_camera_rt_ahb_clk", 2481 + .ops = &clk_branch2_ops, 2482 + }, 2483 + }, 2484 + }; 2485 + 2486 + static struct clk_branch gcc_qmip_disp_ahb_clk = { 2487 + .halt_reg = 0x17018, 2488 + .halt_check = BRANCH_HALT_VOTED, 2489 + .hwcg_reg = 0x17018, 2490 + .hwcg_bit = 1, 2491 + .clkr = { 2492 + .enable_reg = 0x7900c, 2493 + .enable_mask = BIT(1), 2494 + .hw.init = &(struct clk_init_data){ 2495 + .name = "gcc_qmip_disp_ahb_clk", 2496 + .ops = &clk_branch2_ops, 2497 + }, 2498 + }, 2499 + }; 2500 + 2501 + static struct clk_branch gcc_qmip_gpu_cfg_ahb_clk = { 2502 + .halt_reg = 0x36040, 2503 + .halt_check = BRANCH_HALT_VOTED, 2504 + .hwcg_reg = 0x36040, 2505 + .hwcg_bit = 1, 2506 + .clkr = { 2507 + .enable_reg = 0x7900c, 2508 + .enable_mask = BIT(4), 2509 + .hw.init = &(struct clk_init_data){ 2510 + .name = "gcc_qmip_gpu_cfg_ahb_clk", 2511 + .ops = &clk_branch2_ops, 2512 + }, 2513 + }, 2514 + }; 2515 + 2516 + static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = { 2517 + .halt_reg = 0x17010, 2518 + .halt_check = BRANCH_HALT_VOTED, 2519 + .hwcg_reg = 0x17010, 2520 + .hwcg_bit = 1, 2521 + .clkr = { 2522 + .enable_reg = 0x79004, 2523 + .enable_mask = BIT(25), 2524 + .hw.init = &(struct clk_init_data){ 2525 + .name = "gcc_qmip_video_vcodec_ahb_clk", 2526 + .ops = &clk_branch2_ops, 2527 + }, 2528 + }, 2529 + }; 2530 + 2531 + static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = { 2532 + .halt_reg = 0x1f014, 2533 + .halt_check = BRANCH_HALT_VOTED, 2534 + .clkr = { 2535 + .enable_reg = 0x7900c, 2536 + .enable_mask = BIT(9), 2537 + .hw.init = &(struct clk_init_data){ 2538 + .name = "gcc_qupv3_wrap0_core_2x_clk", 2539 + .ops = &clk_branch2_ops, 2540 + }, 2541 + }, 2542 + }; 2543 + 2544 + static struct clk_branch gcc_qupv3_wrap0_core_clk = { 2545 + .halt_reg = 0x1f00c, 2546 + .halt_check = BRANCH_HALT_VOTED, 2547 + .clkr = { 2548 + .enable_reg = 0x7900c, 2549 + .enable_mask = BIT(8), 2550 + .hw.init = &(struct clk_init_data){ 2551 + .name = "gcc_qupv3_wrap0_core_clk", 2552 + .ops = &clk_branch2_ops, 2553 + }, 2554 + }, 2555 + }; 2556 + 2557 + static struct clk_branch gcc_qupv3_wrap0_s0_clk = { 2558 + .halt_reg = 0x1f144, 2559 + .halt_check = BRANCH_HALT_VOTED, 2560 + .clkr = { 2561 + .enable_reg = 0x7900c, 2562 + .enable_mask = BIT(10), 2563 + .hw.init = &(struct clk_init_data){ 2564 + .name = "gcc_qupv3_wrap0_s0_clk", 2565 + .parent_hws = (const struct clk_hw *[]){ 2566 + &gcc_qupv3_wrap0_s0_clk_src.clkr.hw, 2567 + }, 2568 + .num_parents = 1, 2569 + .flags = CLK_SET_RATE_PARENT, 2570 + .ops = &clk_branch2_ops, 2571 + }, 2572 + }, 2573 + }; 2574 + 2575 + static struct clk_branch gcc_qupv3_wrap0_s1_clk = { 2576 + .halt_reg = 0x1f274, 2577 + .halt_check = BRANCH_HALT_VOTED, 2578 + .clkr = { 2579 + .enable_reg = 0x7900c, 2580 + .enable_mask = BIT(11), 2581 + .hw.init = &(struct clk_init_data){ 2582 + .name = "gcc_qupv3_wrap0_s1_clk", 2583 + .parent_hws = (const struct clk_hw *[]){ 2584 + &gcc_qupv3_wrap0_s1_clk_src.clkr.hw, 2585 + }, 2586 + .num_parents = 1, 2587 + .flags = CLK_SET_RATE_PARENT, 2588 + .ops = &clk_branch2_ops, 2589 + }, 2590 + }, 2591 + }; 2592 + 2593 + static struct clk_branch gcc_qupv3_wrap0_s2_clk = { 2594 + .halt_reg = 0x1f3a4, 2595 + .halt_check = BRANCH_HALT_VOTED, 2596 + .clkr = { 2597 + .enable_reg = 0x7900c, 2598 + .enable_mask = BIT(12), 2599 + .hw.init = &(struct clk_init_data){ 2600 + .name = "gcc_qupv3_wrap0_s2_clk", 2601 + .parent_hws = (const struct clk_hw *[]){ 2602 + &gcc_qupv3_wrap0_s2_clk_src.clkr.hw, 2603 + }, 2604 + .num_parents = 1, 2605 + .flags = CLK_SET_RATE_PARENT, 2606 + .ops = &clk_branch2_ops, 2607 + }, 2608 + }, 2609 + }; 2610 + 2611 + static struct clk_branch gcc_qupv3_wrap0_s3_clk = { 2612 + .halt_reg = 0x1f4d4, 2613 + .halt_check = BRANCH_HALT_VOTED, 2614 + .clkr = { 2615 + .enable_reg = 0x7900c, 2616 + .enable_mask = BIT(13), 2617 + .hw.init = &(struct clk_init_data){ 2618 + .name = "gcc_qupv3_wrap0_s3_clk", 2619 + .parent_hws = (const struct clk_hw *[]){ 2620 + &gcc_qupv3_wrap0_s3_clk_src.clkr.hw, 2621 + }, 2622 + .num_parents = 1, 2623 + .flags = CLK_SET_RATE_PARENT, 2624 + .ops = &clk_branch2_ops, 2625 + }, 2626 + }, 2627 + }; 2628 + 2629 + static struct clk_branch gcc_qupv3_wrap0_s4_clk = { 2630 + .halt_reg = 0x1f604, 2631 + .halt_check = BRANCH_HALT_VOTED, 2632 + .clkr = { 2633 + .enable_reg = 0x7900c, 2634 + .enable_mask = BIT(14), 2635 + .hw.init = &(struct clk_init_data){ 2636 + .name = "gcc_qupv3_wrap0_s4_clk", 2637 + .parent_hws = (const struct clk_hw *[]){ 2638 + &gcc_qupv3_wrap0_s4_clk_src.clkr.hw, 2639 + }, 2640 + .num_parents = 1, 2641 + .flags = CLK_SET_RATE_PARENT, 2642 + .ops = &clk_branch2_ops, 2643 + }, 2644 + }, 2645 + }; 2646 + 2647 + static struct clk_branch gcc_qupv3_wrap0_s5_clk = { 2648 + .halt_reg = 0x1f734, 2649 + .halt_check = BRANCH_HALT_VOTED, 2650 + .clkr = { 2651 + .enable_reg = 0x7900c, 2652 + .enable_mask = BIT(15), 2653 + .hw.init = &(struct clk_init_data){ 2654 + .name = "gcc_qupv3_wrap0_s5_clk", 2655 + .parent_hws = (const struct clk_hw *[]){ 2656 + &gcc_qupv3_wrap0_s5_clk_src.clkr.hw, 2657 + }, 2658 + .num_parents = 1, 2659 + .flags = CLK_SET_RATE_PARENT, 2660 + .ops = &clk_branch2_ops, 2661 + }, 2662 + }, 2663 + }; 2664 + 2665 + static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = { 2666 + .halt_reg = 0x1f004, 2667 + .halt_check = BRANCH_HALT_VOTED, 2668 + .hwcg_reg = 0x1f004, 2669 + .hwcg_bit = 1, 2670 + .clkr = { 2671 + .enable_reg = 0x7900c, 2672 + .enable_mask = BIT(6), 2673 + .hw.init = &(struct clk_init_data){ 2674 + .name = "gcc_qupv3_wrap_0_m_ahb_clk", 2675 + .ops = &clk_branch2_ops, 2676 + }, 2677 + }, 2678 + }; 2679 + 2680 + static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = { 2681 + .halt_reg = 0x1f008, 2682 + .halt_check = BRANCH_HALT_VOTED, 2683 + .hwcg_reg = 0x1f008, 2684 + .hwcg_bit = 1, 2685 + .clkr = { 2686 + .enable_reg = 0x7900c, 2687 + .enable_mask = BIT(7), 2688 + .hw.init = &(struct clk_init_data){ 2689 + .name = "gcc_qupv3_wrap_0_s_ahb_clk", 2690 + .ops = &clk_branch2_ops, 2691 + }, 2692 + }, 2693 + }; 2694 + 2695 + static struct clk_branch gcc_sdcc1_ahb_clk = { 2696 + .halt_reg = 0x38008, 2697 + .halt_check = BRANCH_HALT, 2698 + .clkr = { 2699 + .enable_reg = 0x38008, 2700 + .enable_mask = BIT(0), 2701 + .hw.init = &(struct clk_init_data){ 2702 + .name = "gcc_sdcc1_ahb_clk", 2703 + .ops = &clk_branch2_ops, 2704 + }, 2705 + }, 2706 + }; 2707 + 2708 + static struct clk_branch gcc_sdcc1_apps_clk = { 2709 + .halt_reg = 0x38004, 2710 + .halt_check = BRANCH_HALT, 2711 + .clkr = { 2712 + .enable_reg = 0x38004, 2713 + .enable_mask = BIT(0), 2714 + .hw.init = &(struct clk_init_data){ 2715 + .name = "gcc_sdcc1_apps_clk", 2716 + .parent_hws = (const struct clk_hw *[]){ 2717 + &gcc_sdcc1_apps_clk_src.clkr.hw, 2718 + }, 2719 + .num_parents = 1, 2720 + .flags = CLK_SET_RATE_PARENT /* | CLK_ENABLE_HAND_OFF */, 2721 + .ops = &clk_branch2_ops, 2722 + }, 2723 + }, 2724 + }; 2725 + 2726 + static struct clk_branch gcc_sdcc1_ice_core_clk = { 2727 + .halt_reg = 0x3800c, 2728 + .halt_check = BRANCH_HALT, 2729 + .hwcg_reg = 0x3800c, 2730 + .hwcg_bit = 1, 2731 + .clkr = { 2732 + .enable_reg = 0x3800c, 2733 + .enable_mask = BIT(0), 2734 + .hw.init = &(struct clk_init_data){ 2735 + .name = "gcc_sdcc1_ice_core_clk", 2736 + .parent_hws = (const struct clk_hw *[]){ 2737 + &gcc_sdcc1_ice_core_clk_src.clkr.hw, 2738 + }, 2739 + .num_parents = 1, 2740 + .flags = CLK_SET_RATE_PARENT, 2741 + .ops = &clk_branch2_ops, 2742 + }, 2743 + }, 2744 + }; 2745 + 2746 + static struct clk_branch gcc_sdcc2_ahb_clk = { 2747 + .halt_reg = 0x1e008, 2748 + .halt_check = BRANCH_HALT, 2749 + .clkr = { 2750 + .enable_reg = 0x1e008, 2751 + .enable_mask = BIT(0), 2752 + .hw.init = &(struct clk_init_data){ 2753 + .name = "gcc_sdcc2_ahb_clk", 2754 + .ops = &clk_branch2_ops, 2755 + }, 2756 + }, 2757 + }; 2758 + 2759 + static struct clk_branch gcc_sdcc2_apps_clk = { 2760 + .halt_reg = 0x1e004, 2761 + .halt_check = BRANCH_HALT, 2762 + .clkr = { 2763 + .enable_reg = 0x1e004, 2764 + .enable_mask = BIT(0), 2765 + .hw.init = &(struct clk_init_data){ 2766 + .name = "gcc_sdcc2_apps_clk", 2767 + .parent_hws = (const struct clk_hw *[]){ 2768 + &gcc_sdcc2_apps_clk_src.clkr.hw, 2769 + }, 2770 + .num_parents = 1, 2771 + .flags = CLK_SET_RATE_PARENT, 2772 + .ops = &clk_branch2_ops, 2773 + }, 2774 + }, 2775 + }; 2776 + 2777 + static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = { 2778 + .halt_reg = 0x2b06c, 2779 + .halt_check = BRANCH_HALT_VOTED, 2780 + .hwcg_reg = 0x2b06c, 2781 + .hwcg_bit = 1, 2782 + .clkr = { 2783 + .enable_reg = 0x79004, 2784 + .enable_mask = BIT(0), 2785 + .hw.init = &(struct clk_init_data){ 2786 + .name = "gcc_sys_noc_cpuss_ahb_clk", 2787 + .flags = CLK_IS_CRITICAL, 2788 + .ops = &clk_branch2_ops, 2789 + }, 2790 + }, 2791 + }; 2792 + 2793 + static struct clk_branch gcc_sys_noc_ufs_phy_axi_clk = { 2794 + .halt_reg = 0x45098, 2795 + .halt_check = BRANCH_HALT, 2796 + .clkr = { 2797 + .enable_reg = 0x45098, 2798 + .enable_mask = BIT(0), 2799 + .hw.init = &(struct clk_init_data){ 2800 + .name = "gcc_sys_noc_ufs_phy_axi_clk", 2801 + .parent_hws = (const struct clk_hw *[]){ 2802 + &gcc_ufs_phy_axi_clk_src.clkr.hw, 2803 + }, 2804 + .num_parents = 1, 2805 + .flags = CLK_SET_RATE_PARENT, 2806 + .ops = &clk_branch2_ops, 2807 + }, 2808 + }, 2809 + }; 2810 + 2811 + static struct clk_branch gcc_sys_noc_usb3_prim_axi_clk = { 2812 + .halt_reg = 0x1a080, 2813 + .halt_check = BRANCH_HALT, 2814 + .hwcg_reg = 0x1a080, 2815 + .hwcg_bit = 1, 2816 + .clkr = { 2817 + .enable_reg = 0x1a080, 2818 + .enable_mask = BIT(0), 2819 + .hw.init = &(struct clk_init_data){ 2820 + .name = "gcc_sys_noc_usb3_prim_axi_clk", 2821 + .parent_hws = (const struct clk_hw *[]){ 2822 + &gcc_usb30_prim_master_clk_src.clkr.hw, 2823 + }, 2824 + .num_parents = 1, 2825 + .flags = CLK_SET_RATE_PARENT, 2826 + .ops = &clk_branch2_ops, 2827 + }, 2828 + }, 2829 + }; 2830 + 2831 + static struct clk_branch gcc_ufs_clkref_clk = { 2832 + .halt_reg = 0x8c000, 2833 + .halt_check = BRANCH_HALT, 2834 + .clkr = { 2835 + .enable_reg = 0x8c000, 2836 + .enable_mask = BIT(0), 2837 + .hw.init = &(struct clk_init_data){ 2838 + .name = "gcc_ufs_clkref_clk", 2839 + .ops = &clk_branch2_ops, 2840 + }, 2841 + }, 2842 + }; 2843 + 2844 + static struct clk_branch gcc_ufs_phy_ahb_clk = { 2845 + .halt_reg = 0x45014, 2846 + .halt_check = BRANCH_HALT, 2847 + .hwcg_reg = 0x45014, 2848 + .hwcg_bit = 1, 2849 + .clkr = { 2850 + .enable_reg = 0x45014, 2851 + .enable_mask = BIT(0), 2852 + .hw.init = &(struct clk_init_data){ 2853 + .name = "gcc_ufs_phy_ahb_clk", 2854 + .ops = &clk_branch2_ops, 2855 + }, 2856 + }, 2857 + }; 2858 + 2859 + static struct clk_branch gcc_ufs_phy_axi_clk = { 2860 + .halt_reg = 0x45010, 2861 + .halt_check = BRANCH_HALT, 2862 + .hwcg_reg = 0x45010, 2863 + .hwcg_bit = 1, 2864 + .clkr = { 2865 + .enable_reg = 0x45010, 2866 + .enable_mask = BIT(0), 2867 + .hw.init = &(struct clk_init_data){ 2868 + .name = "gcc_ufs_phy_axi_clk", 2869 + .parent_hws = (const struct clk_hw *[]){ 2870 + &gcc_ufs_phy_axi_clk_src.clkr.hw, 2871 + }, 2872 + .num_parents = 1, 2873 + .flags = CLK_SET_RATE_PARENT, 2874 + .ops = &clk_branch2_ops, 2875 + }, 2876 + }, 2877 + }; 2878 + 2879 + static struct clk_branch gcc_ufs_phy_ice_core_clk = { 2880 + .halt_reg = 0x45044, 2881 + .halt_check = BRANCH_HALT, 2882 + .hwcg_reg = 0x45044, 2883 + .hwcg_bit = 1, 2884 + .clkr = { 2885 + .enable_reg = 0x45044, 2886 + .enable_mask = BIT(0), 2887 + .hw.init = &(struct clk_init_data){ 2888 + .name = "gcc_ufs_phy_ice_core_clk", 2889 + .parent_hws = (const struct clk_hw *[]){ 2890 + &gcc_ufs_phy_ice_core_clk_src.clkr.hw, 2891 + }, 2892 + .num_parents = 1, 2893 + .flags = CLK_SET_RATE_PARENT, 2894 + .ops = &clk_branch2_ops, 2895 + }, 2896 + }, 2897 + }; 2898 + 2899 + static struct clk_branch gcc_ufs_phy_phy_aux_clk = { 2900 + .halt_reg = 0x45078, 2901 + .halt_check = BRANCH_HALT, 2902 + .hwcg_reg = 0x45078, 2903 + .hwcg_bit = 1, 2904 + .clkr = { 2905 + .enable_reg = 0x45078, 2906 + .enable_mask = BIT(0), 2907 + .hw.init = &(struct clk_init_data){ 2908 + .name = "gcc_ufs_phy_phy_aux_clk", 2909 + .parent_hws = (const struct clk_hw *[]){ 2910 + &gcc_ufs_phy_phy_aux_clk_src.clkr.hw, 2911 + }, 2912 + .num_parents = 1, 2913 + .flags = CLK_SET_RATE_PARENT, 2914 + .ops = &clk_branch2_ops, 2915 + }, 2916 + }, 2917 + }; 2918 + 2919 + static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = { 2920 + .halt_reg = 0x4501c, 2921 + .halt_check = BRANCH_HALT_SKIP, 2922 + .clkr = { 2923 + .enable_reg = 0x4501c, 2924 + .enable_mask = BIT(0), 2925 + .hw.init = &(struct clk_init_data){ 2926 + .name = "gcc_ufs_phy_rx_symbol_0_clk", 2927 + .ops = &clk_branch2_ops, 2928 + }, 2929 + }, 2930 + }; 2931 + 2932 + static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = { 2933 + .halt_reg = 0x45018, 2934 + .halt_check = BRANCH_HALT_SKIP, 2935 + .clkr = { 2936 + .enable_reg = 0x45018, 2937 + .enable_mask = BIT(0), 2938 + .hw.init = &(struct clk_init_data){ 2939 + .name = "gcc_ufs_phy_tx_symbol_0_clk", 2940 + .ops = &clk_branch2_ops, 2941 + }, 2942 + }, 2943 + }; 2944 + 2945 + static struct clk_branch gcc_ufs_phy_unipro_core_clk = { 2946 + .halt_reg = 0x45040, 2947 + .halt_check = BRANCH_HALT, 2948 + .hwcg_reg = 0x45040, 2949 + .hwcg_bit = 1, 2950 + .clkr = { 2951 + .enable_reg = 0x45040, 2952 + .enable_mask = BIT(0), 2953 + .hw.init = &(struct clk_init_data){ 2954 + .name = "gcc_ufs_phy_unipro_core_clk", 2955 + .parent_hws = (const struct clk_hw *[]){ 2956 + &gcc_ufs_phy_unipro_core_clk_src.clkr.hw, 2957 + }, 2958 + .num_parents = 1, 2959 + .flags = CLK_SET_RATE_PARENT, 2960 + .ops = &clk_branch2_ops, 2961 + }, 2962 + }, 2963 + }; 2964 + 2965 + static struct clk_branch gcc_usb30_prim_master_clk = { 2966 + .halt_reg = 0x1a010, 2967 + .halt_check = BRANCH_HALT, 2968 + .clkr = { 2969 + .enable_reg = 0x1a010, 2970 + .enable_mask = BIT(0), 2971 + .hw.init = &(struct clk_init_data){ 2972 + .name = "gcc_usb30_prim_master_clk", 2973 + .parent_hws = (const struct clk_hw *[]){ 2974 + &gcc_usb30_prim_master_clk_src.clkr.hw, 2975 + }, 2976 + .num_parents = 1, 2977 + .flags = CLK_SET_RATE_PARENT, 2978 + .ops = &clk_branch2_ops, 2979 + }, 2980 + }, 2981 + }; 2982 + 2983 + static struct clk_branch gcc_usb30_prim_mock_utmi_clk = { 2984 + .halt_reg = 0x1a018, 2985 + .halt_check = BRANCH_HALT, 2986 + .clkr = { 2987 + .enable_reg = 0x1a018, 2988 + .enable_mask = BIT(0), 2989 + .hw.init = &(struct clk_init_data){ 2990 + .name = "gcc_usb30_prim_mock_utmi_clk", 2991 + .parent_hws = (const struct clk_hw *[]){ 2992 + &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw, 2993 + }, 2994 + .num_parents = 1, 2995 + .flags = CLK_SET_RATE_PARENT, 2996 + .ops = &clk_branch2_ops, 2997 + }, 2998 + }, 2999 + }; 3000 + 3001 + static struct clk_branch gcc_usb30_prim_sleep_clk = { 3002 + .halt_reg = 0x1a014, 3003 + .halt_check = BRANCH_HALT, 3004 + .clkr = { 3005 + .enable_reg = 0x1a014, 3006 + .enable_mask = BIT(0), 3007 + .hw.init = &(struct clk_init_data){ 3008 + .name = "gcc_usb30_prim_sleep_clk", 3009 + .ops = &clk_branch2_ops, 3010 + }, 3011 + }, 3012 + }; 3013 + 3014 + static struct clk_branch gcc_usb3_prim_clkref_clk = { 3015 + .halt_reg = 0x9f000, 3016 + .halt_check = BRANCH_HALT, 3017 + .clkr = { 3018 + .enable_reg = 0x9f000, 3019 + .enable_mask = BIT(0), 3020 + .hw.init = &(struct clk_init_data){ 3021 + .name = "gcc_usb3_prim_clkref_clk", 3022 + .ops = &clk_branch2_ops, 3023 + }, 3024 + }, 3025 + }; 3026 + 3027 + static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = { 3028 + .halt_reg = 0x1a054, 3029 + .halt_check = BRANCH_HALT, 3030 + .clkr = { 3031 + .enable_reg = 0x1a054, 3032 + .enable_mask = BIT(0), 3033 + .hw.init = &(struct clk_init_data){ 3034 + .name = "gcc_usb3_prim_phy_com_aux_clk", 3035 + .parent_hws = (const struct clk_hw *[]){ 3036 + &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 3037 + }, 3038 + .num_parents = 1, 3039 + .flags = CLK_SET_RATE_PARENT, 3040 + .ops = &clk_branch2_ops, 3041 + }, 3042 + }, 3043 + }; 3044 + 3045 + static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 3046 + .halt_reg = 0x1a058, 3047 + .halt_check = BRANCH_HALT_SKIP, 3048 + .hwcg_reg = 0x1a058, 3049 + .hwcg_bit = 1, 3050 + .clkr = { 3051 + .enable_reg = 0x1a058, 3052 + .enable_mask = BIT(0), 3053 + .hw.init = &(struct clk_init_data){ 3054 + .name = "gcc_usb3_prim_phy_pipe_clk", 3055 + .ops = &clk_branch2_ops, 3056 + }, 3057 + }, 3058 + }; 3059 + 3060 + static struct clk_branch gcc_vcodec0_axi_clk = { 3061 + .halt_reg = 0x6e008, 3062 + .halt_check = BRANCH_HALT, 3063 + .clkr = { 3064 + .enable_reg = 0x6e008, 3065 + .enable_mask = BIT(0), 3066 + .hw.init = &(struct clk_init_data){ 3067 + .name = "gcc_vcodec0_axi_clk", 3068 + .ops = &clk_branch2_ops, 3069 + }, 3070 + }, 3071 + }; 3072 + 3073 + static struct clk_branch gcc_venus_ahb_clk = { 3074 + .halt_reg = 0x6e010, 3075 + .halt_check = BRANCH_HALT, 3076 + .clkr = { 3077 + .enable_reg = 0x6e010, 3078 + .enable_mask = BIT(0), 3079 + .hw.init = &(struct clk_init_data){ 3080 + .name = "gcc_venus_ahb_clk", 3081 + .ops = &clk_branch2_ops, 3082 + }, 3083 + }, 3084 + }; 3085 + 3086 + static struct clk_branch gcc_venus_ctl_axi_clk = { 3087 + .halt_reg = 0x6e004, 3088 + .halt_check = BRANCH_HALT, 3089 + .clkr = { 3090 + .enable_reg = 0x6e004, 3091 + .enable_mask = BIT(0), 3092 + .hw.init = &(struct clk_init_data){ 3093 + .name = "gcc_venus_ctl_axi_clk", 3094 + .ops = &clk_branch2_ops, 3095 + }, 3096 + }, 3097 + }; 3098 + 3099 + static struct clk_branch gcc_video_ahb_clk = { 3100 + .halt_reg = 0x17004, 3101 + .halt_check = BRANCH_HALT, 3102 + .hwcg_reg = 0x17004, 3103 + .hwcg_bit = 1, 3104 + .clkr = { 3105 + .enable_reg = 0x17004, 3106 + .enable_mask = BIT(0), 3107 + .hw.init = &(struct clk_init_data){ 3108 + .name = "gcc_video_ahb_clk", 3109 + .ops = &clk_branch2_ops, 3110 + }, 3111 + }, 3112 + }; 3113 + 3114 + static struct clk_branch gcc_video_axi0_clk = { 3115 + .halt_reg = 0x1701c, 3116 + .halt_check = BRANCH_HALT, 3117 + .hwcg_reg = 0x1701c, 3118 + .hwcg_bit = 1, 3119 + .clkr = { 3120 + .enable_reg = 0x1701c, 3121 + .enable_mask = BIT(0), 3122 + .hw.init = &(struct clk_init_data){ 3123 + .name = "gcc_video_axi0_clk", 3124 + .ops = &clk_branch2_ops, 3125 + }, 3126 + }, 3127 + }; 3128 + 3129 + static struct clk_branch gcc_video_throttle_core_clk = { 3130 + .halt_reg = 0x17068, 3131 + .halt_check = BRANCH_HALT_VOTED, 3132 + .hwcg_reg = 0x17068, 3133 + .hwcg_bit = 1, 3134 + .clkr = { 3135 + .enable_reg = 0x79004, 3136 + .enable_mask = BIT(28), 3137 + .hw.init = &(struct clk_init_data){ 3138 + .name = "gcc_video_throttle_core_clk", 3139 + .ops = &clk_branch2_ops, 3140 + }, 3141 + }, 3142 + }; 3143 + 3144 + static struct clk_branch gcc_video_vcodec0_sys_clk = { 3145 + .halt_reg = 0x580a4, 3146 + .halt_check = BRANCH_HALT_DELAY, 3147 + .hwcg_reg = 0x580a4, 3148 + .hwcg_bit = 1, 3149 + .clkr = { 3150 + .enable_reg = 0x580a4, 3151 + .enable_mask = BIT(0), 3152 + .hw.init = &(struct clk_init_data){ 3153 + .name = "gcc_video_vcodec0_sys_clk", 3154 + .parent_hws = (const struct clk_hw *[]){ 3155 + &gcc_video_venus_clk_src.clkr.hw, 3156 + }, 3157 + .num_parents = 1, 3158 + .flags = CLK_SET_RATE_PARENT, 3159 + .ops = &clk_branch2_ops, 3160 + }, 3161 + }, 3162 + }; 3163 + 3164 + static struct clk_branch gcc_video_venus_ctl_clk = { 3165 + .halt_reg = 0x5808c, 3166 + .halt_check = BRANCH_HALT, 3167 + .clkr = { 3168 + .enable_reg = 0x5808c, 3169 + .enable_mask = BIT(0), 3170 + .hw.init = &(struct clk_init_data){ 3171 + .name = "gcc_video_venus_ctl_clk", 3172 + .parent_hws = (const struct clk_hw *[]){ 3173 + &gcc_video_venus_clk_src.clkr.hw, 3174 + }, 3175 + .num_parents = 1, 3176 + .flags = CLK_SET_RATE_PARENT, 3177 + .ops = &clk_branch2_ops, 3178 + }, 3179 + }, 3180 + }; 3181 + 3182 + static struct clk_branch gcc_video_xo_clk = { 3183 + .halt_reg = 0x17024, 3184 + .halt_check = BRANCH_HALT, 3185 + .clkr = { 3186 + .enable_reg = 0x17024, 3187 + .enable_mask = BIT(0), 3188 + .hw.init = &(struct clk_init_data){ 3189 + .name = "gcc_video_xo_clk", 3190 + .ops = &clk_branch2_ops, 3191 + }, 3192 + }, 3193 + }; 3194 + 3195 + static struct gdsc gcc_camss_top_gdsc = { 3196 + .gdscr = 0x58004, 3197 + .pd = { 3198 + .name = "gcc_camss_top", 3199 + }, 3200 + .pwrsts = PWRSTS_OFF_ON, 3201 + }; 3202 + 3203 + static struct gdsc gcc_ufs_phy_gdsc = { 3204 + .gdscr = 0x45004, 3205 + .pd = { 3206 + .name = "gcc_ufs_phy", 3207 + }, 3208 + .pwrsts = PWRSTS_OFF_ON, 3209 + }; 3210 + 3211 + static struct gdsc gcc_usb30_prim_gdsc = { 3212 + .gdscr = 0x1a004, 3213 + .pd = { 3214 + .name = "gcc_usb30_prim", 3215 + }, 3216 + .pwrsts = PWRSTS_OFF_ON, 3217 + }; 3218 + 3219 + static struct gdsc gcc_vcodec0_gdsc = { 3220 + .gdscr = 0x58098, 3221 + .pd = { 3222 + .name = "gcc_vcodec0", 3223 + }, 3224 + .pwrsts = PWRSTS_OFF_ON, 3225 + }; 3226 + 3227 + static struct gdsc gcc_venus_gdsc = { 3228 + .gdscr = 0x5807c, 3229 + .pd = { 3230 + .name = "gcc_venus", 3231 + }, 3232 + .pwrsts = PWRSTS_OFF_ON, 3233 + }; 3234 + 3235 + static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = { 3236 + .gdscr = 0x7d060, 3237 + .pd = { 3238 + .name = "hlos1_vote_turing_mmu_tbu1", 3239 + }, 3240 + .pwrsts = PWRSTS_OFF_ON, 3241 + .flags = VOTABLE, 3242 + }; 3243 + 3244 + static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = { 3245 + .gdscr = 0x7d060, 3246 + .pd = { 3247 + .name = "hlos1_vote_turing_mmu_tbu0", 3248 + }, 3249 + .pwrsts = PWRSTS_OFF_ON, 3250 + .flags = VOTABLE, 3251 + }; 3252 + 3253 + static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc = { 3254 + .gdscr = 0x7d074, 3255 + .pd = { 3256 + .name = "hlos1_vote_mm_snoc_mmu_tbu_rt", 3257 + }, 3258 + .pwrsts = PWRSTS_OFF_ON, 3259 + .flags = VOTABLE, 3260 + }; 3261 + 3262 + static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc = { 3263 + .gdscr = 0x7d078, 3264 + .pd = { 3265 + .name = "hlos1_vote_mm_snoc_mmu_tbu_nrt", 3266 + }, 3267 + .pwrsts = PWRSTS_OFF_ON, 3268 + .flags = VOTABLE, 3269 + }; 3270 + 3271 + static struct clk_regmap *gcc_sm6115_clocks[] = { 3272 + [GCC_AHB2PHY_CSI_CLK] = &gcc_ahb2phy_csi_clk.clkr, 3273 + [GCC_AHB2PHY_USB_CLK] = &gcc_ahb2phy_usb_clk.clkr, 3274 + [GCC_BIMC_GPU_AXI_CLK] = &gcc_bimc_gpu_axi_clk.clkr, 3275 + [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 3276 + [GCC_CAM_THROTTLE_NRT_CLK] = &gcc_cam_throttle_nrt_clk.clkr, 3277 + [GCC_CAM_THROTTLE_RT_CLK] = &gcc_cam_throttle_rt_clk.clkr, 3278 + [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr, 3279 + [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr, 3280 + [GCC_CAMSS_AXI_CLK] = &gcc_camss_axi_clk.clkr, 3281 + [GCC_CAMSS_AXI_CLK_SRC] = &gcc_camss_axi_clk_src.clkr, 3282 + [GCC_CAMSS_CAMNOC_ATB_CLK] = &gcc_camss_camnoc_atb_clk.clkr, 3283 + [GCC_CAMSS_CAMNOC_NTS_XO_CLK] = &gcc_camss_camnoc_nts_xo_clk.clkr, 3284 + [GCC_CAMSS_CCI_0_CLK] = &gcc_camss_cci_0_clk.clkr, 3285 + [GCC_CAMSS_CCI_CLK_SRC] = &gcc_camss_cci_clk_src.clkr, 3286 + [GCC_CAMSS_CPHY_0_CLK] = &gcc_camss_cphy_0_clk.clkr, 3287 + [GCC_CAMSS_CPHY_1_CLK] = &gcc_camss_cphy_1_clk.clkr, 3288 + [GCC_CAMSS_CPHY_2_CLK] = &gcc_camss_cphy_2_clk.clkr, 3289 + [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr, 3290 + [GCC_CAMSS_CSI0PHYTIMER_CLK_SRC] = &gcc_camss_csi0phytimer_clk_src.clkr, 3291 + [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr, 3292 + [GCC_CAMSS_CSI1PHYTIMER_CLK_SRC] = &gcc_camss_csi1phytimer_clk_src.clkr, 3293 + [GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr, 3294 + [GCC_CAMSS_CSI2PHYTIMER_CLK_SRC] = &gcc_camss_csi2phytimer_clk_src.clkr, 3295 + [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr, 3296 + [GCC_CAMSS_MCLK0_CLK_SRC] = &gcc_camss_mclk0_clk_src.clkr, 3297 + [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr, 3298 + [GCC_CAMSS_MCLK1_CLK_SRC] = &gcc_camss_mclk1_clk_src.clkr, 3299 + [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr, 3300 + [GCC_CAMSS_MCLK2_CLK_SRC] = &gcc_camss_mclk2_clk_src.clkr, 3301 + [GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr, 3302 + [GCC_CAMSS_MCLK3_CLK_SRC] = &gcc_camss_mclk3_clk_src.clkr, 3303 + [GCC_CAMSS_NRT_AXI_CLK] = &gcc_camss_nrt_axi_clk.clkr, 3304 + [GCC_CAMSS_OPE_AHB_CLK] = &gcc_camss_ope_ahb_clk.clkr, 3305 + [GCC_CAMSS_OPE_AHB_CLK_SRC] = &gcc_camss_ope_ahb_clk_src.clkr, 3306 + [GCC_CAMSS_OPE_CLK] = &gcc_camss_ope_clk.clkr, 3307 + [GCC_CAMSS_OPE_CLK_SRC] = &gcc_camss_ope_clk_src.clkr, 3308 + [GCC_CAMSS_RT_AXI_CLK] = &gcc_camss_rt_axi_clk.clkr, 3309 + [GCC_CAMSS_TFE_0_CLK] = &gcc_camss_tfe_0_clk.clkr, 3310 + [GCC_CAMSS_TFE_0_CLK_SRC] = &gcc_camss_tfe_0_clk_src.clkr, 3311 + [GCC_CAMSS_TFE_0_CPHY_RX_CLK] = &gcc_camss_tfe_0_cphy_rx_clk.clkr, 3312 + [GCC_CAMSS_TFE_0_CSID_CLK] = &gcc_camss_tfe_0_csid_clk.clkr, 3313 + [GCC_CAMSS_TFE_0_CSID_CLK_SRC] = &gcc_camss_tfe_0_csid_clk_src.clkr, 3314 + [GCC_CAMSS_TFE_1_CLK] = &gcc_camss_tfe_1_clk.clkr, 3315 + [GCC_CAMSS_TFE_1_CLK_SRC] = &gcc_camss_tfe_1_clk_src.clkr, 3316 + [GCC_CAMSS_TFE_1_CPHY_RX_CLK] = &gcc_camss_tfe_1_cphy_rx_clk.clkr, 3317 + [GCC_CAMSS_TFE_1_CSID_CLK] = &gcc_camss_tfe_1_csid_clk.clkr, 3318 + [GCC_CAMSS_TFE_1_CSID_CLK_SRC] = &gcc_camss_tfe_1_csid_clk_src.clkr, 3319 + [GCC_CAMSS_TFE_2_CLK] = &gcc_camss_tfe_2_clk.clkr, 3320 + [GCC_CAMSS_TFE_2_CLK_SRC] = &gcc_camss_tfe_2_clk_src.clkr, 3321 + [GCC_CAMSS_TFE_2_CPHY_RX_CLK] = &gcc_camss_tfe_2_cphy_rx_clk.clkr, 3322 + [GCC_CAMSS_TFE_2_CSID_CLK] = &gcc_camss_tfe_2_csid_clk.clkr, 3323 + [GCC_CAMSS_TFE_2_CSID_CLK_SRC] = &gcc_camss_tfe_2_csid_clk_src.clkr, 3324 + [GCC_CAMSS_TFE_CPHY_RX_CLK_SRC] = &gcc_camss_tfe_cphy_rx_clk_src.clkr, 3325 + [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr, 3326 + [GCC_CAMSS_TOP_AHB_CLK_SRC] = &gcc_camss_top_ahb_clk_src.clkr, 3327 + [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, 3328 + [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr, 3329 + [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr, 3330 + [GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr, 3331 + [GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr, 3332 + [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr, 3333 + [GCC_DISP_THROTTLE_CORE_CLK] = &gcc_disp_throttle_core_clk.clkr, 3334 + [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr, 3335 + [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 3336 + [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr, 3337 + [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 3338 + [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr, 3339 + [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 3340 + [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr, 3341 + [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr, 3342 + [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr, 3343 + [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr, 3344 + [GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr, 3345 + [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr, 3346 + [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr, 3347 + [GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr, 3348 + [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 3349 + [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr, 3350 + [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 3351 + [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr, 3352 + [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 3353 + [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr, 3354 + [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr, 3355 + [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr, 3356 + [GCC_QMIP_GPU_CFG_AHB_CLK] = &gcc_qmip_gpu_cfg_ahb_clk.clkr, 3357 + [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr, 3358 + [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr, 3359 + [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr, 3360 + [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr, 3361 + [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr, 3362 + [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr, 3363 + [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr, 3364 + [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr, 3365 + [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr, 3366 + [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr, 3367 + [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr, 3368 + [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr, 3369 + [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr, 3370 + [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr, 3371 + [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr, 3372 + [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr, 3373 + [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr, 3374 + [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 3375 + [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 3376 + [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr, 3377 + [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr, 3378 + [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr, 3379 + [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 3380 + [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 3381 + [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr, 3382 + [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr, 3383 + [GCC_SYS_NOC_UFS_PHY_AXI_CLK] = &gcc_sys_noc_ufs_phy_axi_clk.clkr, 3384 + [GCC_SYS_NOC_USB3_PRIM_AXI_CLK] = &gcc_sys_noc_usb3_prim_axi_clk.clkr, 3385 + [GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr, 3386 + [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr, 3387 + [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr, 3388 + [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr, 3389 + [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr, 3390 + [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr, 3391 + [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr, 3392 + [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr, 3393 + [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr, 3394 + [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr, 3395 + [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr, 3396 + [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = 3397 + &gcc_ufs_phy_unipro_core_clk_src.clkr, 3398 + [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr, 3399 + [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr, 3400 + [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr, 3401 + [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = 3402 + &gcc_usb30_prim_mock_utmi_clk_src.clkr, 3403 + [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = 3404 + &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr, 3405 + [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr, 3406 + [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr, 3407 + [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr, 3408 + [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr, 3409 + [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr, 3410 + [GCC_VCODEC0_AXI_CLK] = &gcc_vcodec0_axi_clk.clkr, 3411 + [GCC_VENUS_AHB_CLK] = &gcc_venus_ahb_clk.clkr, 3412 + [GCC_VENUS_CTL_AXI_CLK] = &gcc_venus_ctl_axi_clk.clkr, 3413 + [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr, 3414 + [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr, 3415 + [GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr, 3416 + [GCC_VIDEO_VCODEC0_SYS_CLK] = &gcc_video_vcodec0_sys_clk.clkr, 3417 + [GCC_VIDEO_VENUS_CLK_SRC] = &gcc_video_venus_clk_src.clkr, 3418 + [GCC_VIDEO_VENUS_CTL_CLK] = &gcc_video_venus_ctl_clk.clkr, 3419 + [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr, 3420 + [GPLL0] = &gpll0.clkr, 3421 + [GPLL0_OUT_AUX2] = &gpll0_out_aux2.clkr, 3422 + [GPLL0_OUT_MAIN] = &gpll0_out_main.clkr, 3423 + [GPLL10] = &gpll10.clkr, 3424 + [GPLL10_OUT_MAIN] = &gpll10_out_main.clkr, 3425 + [GPLL11] = &gpll11.clkr, 3426 + [GPLL11_OUT_MAIN] = &gpll11_out_main.clkr, 3427 + [GPLL3] = &gpll3.clkr, 3428 + [GPLL4] = &gpll4.clkr, 3429 + [GPLL4_OUT_MAIN] = &gpll4_out_main.clkr, 3430 + [GPLL6] = &gpll6.clkr, 3431 + [GPLL6_OUT_MAIN] = &gpll6_out_main.clkr, 3432 + [GPLL7] = &gpll7.clkr, 3433 + [GPLL7_OUT_MAIN] = &gpll7_out_main.clkr, 3434 + [GPLL8] = &gpll8.clkr, 3435 + [GPLL8_OUT_MAIN] = &gpll8_out_main.clkr, 3436 + [GPLL9] = &gpll9.clkr, 3437 + [GPLL9_OUT_MAIN] = &gpll9_out_main.clkr, 3438 + }; 3439 + 3440 + static const struct qcom_reset_map gcc_sm6115_resets[] = { 3441 + [GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 }, 3442 + [GCC_QUSB2PHY_SEC_BCR] = { 0x1c004 }, 3443 + [GCC_SDCC1_BCR] = { 0x38000 }, 3444 + [GCC_SDCC2_BCR] = { 0x1e000 }, 3445 + [GCC_UFS_PHY_BCR] = { 0x45000 }, 3446 + [GCC_USB30_PRIM_BCR] = { 0x1a000 }, 3447 + [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 }, 3448 + [GCC_USB3PHY_PHY_PRIM_SP0_BCR] = { 0x1b008 }, 3449 + [GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x1b000 }, 3450 + [GCC_VCODEC0_BCR] = { 0x58094 }, 3451 + [GCC_VENUS_BCR] = { 0x58078 }, 3452 + [GCC_VIDEO_INTERFACE_BCR] = { 0x6e000 }, 3453 + }; 3454 + 3455 + static struct gdsc *gcc_sm6115_gdscs[] = { 3456 + [GCC_CAMSS_TOP_GDSC] = &gcc_camss_top_gdsc, 3457 + [GCC_UFS_PHY_GDSC] = &gcc_ufs_phy_gdsc, 3458 + [GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc, 3459 + [GCC_VCODEC0_GDSC] = &gcc_vcodec0_gdsc, 3460 + [GCC_VENUS_GDSC] = &gcc_venus_gdsc, 3461 + [HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc, 3462 + [HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc, 3463 + [HLOS1_VOTE_MM_SNOC_MMU_TBU_RT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc, 3464 + [HLOS1_VOTE_MM_SNOC_MMU_TBU_NRT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc, 3465 + }; 3466 + 3467 + static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = { 3468 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src), 3469 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src), 3470 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src), 3471 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src), 3472 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src), 3473 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src), 3474 + }; 3475 + 3476 + static const struct regmap_config gcc_sm6115_regmap_config = { 3477 + .reg_bits = 32, 3478 + .reg_stride = 4, 3479 + .val_bits = 32, 3480 + .max_register = 0xc7000, 3481 + .fast_io = true, 3482 + }; 3483 + 3484 + static const struct qcom_cc_desc gcc_sm6115_desc = { 3485 + .config = &gcc_sm6115_regmap_config, 3486 + .clks = gcc_sm6115_clocks, 3487 + .num_clks = ARRAY_SIZE(gcc_sm6115_clocks), 3488 + .resets = gcc_sm6115_resets, 3489 + .num_resets = ARRAY_SIZE(gcc_sm6115_resets), 3490 + .gdscs = gcc_sm6115_gdscs, 3491 + .num_gdscs = ARRAY_SIZE(gcc_sm6115_gdscs), 3492 + }; 3493 + 3494 + static const struct of_device_id gcc_sm6115_match_table[] = { 3495 + { .compatible = "qcom,gcc-sm6115" }, 3496 + { } 3497 + }; 3498 + MODULE_DEVICE_TABLE(of, gcc_sm6115_match_table); 3499 + 3500 + static int gcc_sm6115_probe(struct platform_device *pdev) 3501 + { 3502 + struct regmap *regmap; 3503 + int ret; 3504 + 3505 + regmap = qcom_cc_map(pdev, &gcc_sm6115_desc); 3506 + if (IS_ERR(regmap)) 3507 + return PTR_ERR(regmap); 3508 + 3509 + ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, 3510 + ARRAY_SIZE(gcc_dfs_clocks)); 3511 + if (ret) 3512 + return ret; 3513 + 3514 + clk_alpha_pll_configure(&gpll8, regmap, &gpll8_config); 3515 + clk_alpha_pll_configure(&gpll9, regmap, &gpll9_config); 3516 + clk_alpha_pll_configure(&gpll10, regmap, &gpll10_config); 3517 + clk_alpha_pll_configure(&gpll11, regmap, &gpll11_config); 3518 + 3519 + return qcom_cc_really_probe(pdev, &gcc_sm6115_desc, regmap); 3520 + } 3521 + 3522 + static struct platform_driver gcc_sm6115_driver = { 3523 + .probe = gcc_sm6115_probe, 3524 + .driver = { 3525 + .name = "gcc-sm6115", 3526 + .of_match_table = gcc_sm6115_match_table, 3527 + }, 3528 + }; 3529 + 3530 + static int __init gcc_sm6115_init(void) 3531 + { 3532 + return platform_driver_register(&gcc_sm6115_driver); 3533 + } 3534 + subsys_initcall(gcc_sm6115_init); 3535 + 3536 + static void __exit gcc_sm6115_exit(void) 3537 + { 3538 + platform_driver_unregister(&gcc_sm6115_driver); 3539 + } 3540 + module_exit(gcc_sm6115_exit); 3541 + 3542 + MODULE_DESCRIPTION("QTI GCC SM6115 and SM4250 Driver"); 3543 + MODULE_LICENSE("GPL v2"); 3544 + MODULE_ALIAS("platform:gcc-sm6115");
+2588
drivers/clk/qcom/gcc-sm6350.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * Copyright (c) 2021, The Linux Foundation. All rights reserved. 4 + * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org> 5 + */ 6 + 7 + #include <linux/module.h> 8 + #include <linux/platform_device.h> 9 + #include <linux/regmap.h> 10 + 11 + #include <dt-bindings/clock/qcom,gcc-sm6350.h> 12 + 13 + #include "clk-alpha-pll.h" 14 + #include "clk-branch.h" 15 + #include "clk-rcg.h" 16 + #include "clk-regmap.h" 17 + #include "clk-regmap-divider.h" 18 + #include "clk-regmap-mux.h" 19 + #include "common.h" 20 + #include "gdsc.h" 21 + #include "reset.h" 22 + 23 + enum { 24 + P_BI_TCXO, 25 + P_GPLL0_OUT_EVEN, 26 + P_GPLL0_OUT_MAIN, 27 + P_GPLL0_OUT_ODD, 28 + P_GPLL6_OUT_EVEN, 29 + P_GPLL7_OUT_MAIN, 30 + P_SLEEP_CLK, 31 + }; 32 + 33 + static struct clk_alpha_pll gpll0 = { 34 + .offset = 0x0, 35 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 36 + .clkr = { 37 + .enable_reg = 0x52010, 38 + .enable_mask = BIT(0), 39 + .hw.init = &(struct clk_init_data){ 40 + .name = "gpll0", 41 + .parent_data = &(const struct clk_parent_data){ 42 + .fw_name = "bi_tcxo", 43 + }, 44 + .num_parents = 1, 45 + .ops = &clk_alpha_pll_fixed_fabia_ops, 46 + }, 47 + }, 48 + }; 49 + 50 + static const struct clk_div_table post_div_table_gpll0_out_even[] = { 51 + { 0x1, 2 }, 52 + { } 53 + }; 54 + 55 + static struct clk_alpha_pll_postdiv gpll0_out_even = { 56 + .offset = 0x0, 57 + .post_div_shift = 8, 58 + .post_div_table = post_div_table_gpll0_out_even, 59 + .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_even), 60 + .width = 4, 61 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 62 + .clkr.hw.init = &(struct clk_init_data){ 63 + .name = "gpll0_out_even", 64 + .parent_hws = (const struct clk_hw*[]){ 65 + &gpll0.clkr.hw, 66 + }, 67 + .num_parents = 1, 68 + .ops = &clk_alpha_pll_postdiv_fabia_ops, 69 + }, 70 + }; 71 + 72 + static const struct clk_div_table post_div_table_gpll0_out_odd[] = { 73 + { 0x3, 3 }, 74 + { } 75 + }; 76 + 77 + static struct clk_alpha_pll_postdiv gpll0_out_odd = { 78 + .offset = 0x0, 79 + .post_div_shift = 12, 80 + .post_div_table = post_div_table_gpll0_out_odd, 81 + .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_odd), 82 + .width = 4, 83 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 84 + .clkr.hw.init = &(struct clk_init_data){ 85 + .name = "gpll0_out_odd", 86 + .parent_hws = (const struct clk_hw*[]){ 87 + &gpll0.clkr.hw, 88 + }, 89 + .num_parents = 1, 90 + .ops = &clk_alpha_pll_postdiv_fabia_ops, 91 + }, 92 + }; 93 + 94 + static struct clk_alpha_pll gpll6 = { 95 + .offset = 0x6000, 96 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 97 + .clkr = { 98 + .enable_reg = 0x52010, 99 + .enable_mask = BIT(6), 100 + .hw.init = &(struct clk_init_data){ 101 + .name = "gpll6", 102 + .parent_hws = (const struct clk_hw*[]){ 103 + &gpll0.clkr.hw, 104 + }, 105 + .num_parents = 1, 106 + .ops = &clk_alpha_pll_fixed_fabia_ops, 107 + }, 108 + }, 109 + }; 110 + 111 + static const struct clk_div_table post_div_table_gpll6_out_even[] = { 112 + { 0x1, 2 }, 113 + { } 114 + }; 115 + 116 + static struct clk_alpha_pll_postdiv gpll6_out_even = { 117 + .offset = 0x6000, 118 + .post_div_shift = 8, 119 + .post_div_table = post_div_table_gpll6_out_even, 120 + .num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_even), 121 + .width = 4, 122 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 123 + .clkr.hw.init = &(struct clk_init_data){ 124 + .name = "gpll6_out_even", 125 + .parent_hws = (const struct clk_hw*[]){ 126 + &gpll0.clkr.hw, 127 + }, 128 + .num_parents = 1, 129 + .ops = &clk_alpha_pll_postdiv_fabia_ops, 130 + }, 131 + }; 132 + 133 + static struct clk_alpha_pll gpll7 = { 134 + .offset = 0x7000, 135 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 136 + .clkr = { 137 + .enable_reg = 0x52010, 138 + .enable_mask = BIT(7), 139 + .hw.init = &(struct clk_init_data){ 140 + .name = "gpll7", 141 + .parent_hws = (const struct clk_hw*[]){ 142 + &gpll0.clkr.hw, 143 + }, 144 + .num_parents = 1, 145 + .ops = &clk_alpha_pll_fixed_fabia_ops, 146 + }, 147 + }, 148 + }; 149 + 150 + static const struct parent_map gcc_parent_map_0[] = { 151 + { P_BI_TCXO, 0 }, 152 + { P_GPLL0_OUT_MAIN, 1 }, 153 + { P_GPLL6_OUT_EVEN, 2 }, 154 + { P_GPLL0_OUT_EVEN, 6 }, 155 + }; 156 + 157 + static const struct clk_parent_data gcc_parent_data_0[] = { 158 + { .fw_name = "bi_tcxo" }, 159 + { .hw = &gpll0.clkr.hw }, 160 + { .hw = &gpll6_out_even.clkr.hw }, 161 + { .hw = &gpll0_out_even.clkr.hw }, 162 + }; 163 + 164 + static const struct parent_map gcc_parent_map_1[] = { 165 + { P_BI_TCXO, 0 }, 166 + { P_GPLL0_OUT_EVEN, 6 }, 167 + }; 168 + 169 + static const struct clk_parent_data gcc_parent_data_1[] = { 170 + { .fw_name = "bi_tcxo" }, 171 + { .hw = &gpll0_out_even.clkr.hw }, 172 + }; 173 + 174 + static const struct parent_map gcc_parent_map_2[] = { 175 + { P_BI_TCXO, 0 }, 176 + { P_GPLL0_OUT_ODD, 2 }, 177 + }; 178 + 179 + static const struct clk_parent_data gcc_parent_data_2[] = { 180 + { .fw_name = "bi_tcxo" }, 181 + { .hw = &gpll0_out_odd.clkr.hw }, 182 + }; 183 + static const struct clk_parent_data gcc_parent_data_2_ao[] = { 184 + { .fw_name = "bi_tcxo_ao" }, 185 + { .hw = &gpll0_out_odd.clkr.hw }, 186 + }; 187 + 188 + static const struct parent_map gcc_parent_map_4[] = { 189 + { P_BI_TCXO, 0 }, 190 + { P_GPLL0_OUT_MAIN, 1 }, 191 + { P_GPLL0_OUT_ODD, 2 }, 192 + }; 193 + 194 + static const struct clk_parent_data gcc_parent_data_4[] = { 195 + { .fw_name = "bi_tcxo" }, 196 + { .hw = &gpll0.clkr.hw }, 197 + { .hw = &gpll0_out_odd.clkr.hw }, 198 + }; 199 + 200 + static const struct parent_map gcc_parent_map_5[] = { 201 + { P_BI_TCXO, 0 }, 202 + { P_GPLL0_OUT_ODD, 2 }, 203 + { P_SLEEP_CLK, 5 }, 204 + { P_GPLL0_OUT_EVEN, 6 }, 205 + }; 206 + 207 + static const struct clk_parent_data gcc_parent_data_5[] = { 208 + { .fw_name = "bi_tcxo" }, 209 + { .hw = &gpll0_out_odd.clkr.hw }, 210 + { .fw_name = "sleep_clk" }, 211 + { .hw = &gpll0_out_even.clkr.hw }, 212 + }; 213 + 214 + static const struct parent_map gcc_parent_map_6[] = { 215 + { P_BI_TCXO, 0 }, 216 + { P_SLEEP_CLK, 5 }, 217 + }; 218 + 219 + static const struct clk_parent_data gcc_parent_data_6[] = { 220 + { .fw_name = "bi_tcxo" }, 221 + { .fw_name = "sleep_clk" } 222 + }; 223 + 224 + static const struct parent_map gcc_parent_map_7[] = { 225 + { P_BI_TCXO, 0 }, 226 + { P_GPLL6_OUT_EVEN, 2 }, 227 + { P_GPLL0_OUT_EVEN, 6 }, 228 + }; 229 + 230 + static const struct clk_parent_data gcc_parent_data_7[] = { 231 + { .fw_name = "bi_tcxo" }, 232 + { .hw = &gpll6_out_even.clkr.hw }, 233 + { .hw = &gpll0_out_even.clkr.hw }, 234 + }; 235 + 236 + static const struct parent_map gcc_parent_map_8[] = { 237 + { P_BI_TCXO, 0 }, 238 + { P_GPLL0_OUT_ODD, 2 }, 239 + { P_GPLL7_OUT_MAIN, 3 }, 240 + }; 241 + 242 + static const struct clk_parent_data gcc_parent_data_8[] = { 243 + { .fw_name = "bi_tcxo" }, 244 + { .hw = &gpll0_out_odd.clkr.hw }, 245 + { .hw = &gpll7.clkr.hw }, 246 + }; 247 + 248 + static struct clk_regmap_div gcc_gpu_gpll0_main_div_clk_src = { 249 + .reg = 0x4514C, 250 + .shift = 0, 251 + .width = 2, 252 + .clkr.hw.init = &(struct clk_init_data) { 253 + .name = "gcc_gpu_gpll0_main_div_clk_src", 254 + .parent_hws = (const struct clk_hw*[]){ 255 + &gpll0.clkr.hw, 256 + }, 257 + .num_parents = 1, 258 + .ops = &clk_regmap_div_ro_ops, 259 + }, 260 + }; 261 + 262 + static struct clk_regmap_div gcc_npu_pll0_main_div_clk_src = { 263 + .reg = 0x4ce00, 264 + .shift = 0, 265 + .width = 2, 266 + .clkr.hw.init = &(struct clk_init_data) { 267 + .name = "gcc_npu_pll0_main_div_clk_src", 268 + .parent_hws = (const struct clk_hw*[]){ 269 + &gpll0.clkr.hw, 270 + }, 271 + .num_parents = 1, 272 + .ops = &clk_regmap_div_ro_ops, 273 + }, 274 + }; 275 + 276 + static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = { 277 + F(19200000, P_BI_TCXO, 1, 0, 0), 278 + { } 279 + }; 280 + 281 + static struct clk_rcg2 gcc_cpuss_ahb_clk_src = { 282 + .cmd_rcgr = 0x30014, 283 + .mnd_width = 0, 284 + .hid_width = 5, 285 + .parent_map = gcc_parent_map_2, 286 + .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src, 287 + .clkr.hw.init = &(struct clk_init_data){ 288 + .name = "gcc_cpuss_ahb_clk_src", 289 + .parent_data = gcc_parent_data_2_ao, 290 + .num_parents = ARRAY_SIZE(gcc_parent_data_2_ao), 291 + .ops = &clk_rcg2_ops, 292 + }, 293 + }; 294 + 295 + static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = { 296 + F(19200000, P_BI_TCXO, 1, 0, 0), 297 + F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 298 + F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0), 299 + F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0), 300 + F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0), 301 + { } 302 + }; 303 + 304 + static struct clk_rcg2 gcc_gp1_clk_src = { 305 + .cmd_rcgr = 0x37004, 306 + .mnd_width = 8, 307 + .hid_width = 5, 308 + .parent_map = gcc_parent_map_5, 309 + .freq_tbl = ftbl_gcc_gp1_clk_src, 310 + .clkr.hw.init = &(struct clk_init_data){ 311 + .name = "gcc_gp1_clk_src", 312 + .parent_data = gcc_parent_data_5, 313 + .num_parents = ARRAY_SIZE(gcc_parent_data_5), 314 + .ops = &clk_rcg2_ops, 315 + }, 316 + }; 317 + 318 + static struct clk_rcg2 gcc_gp2_clk_src = { 319 + .cmd_rcgr = 0x38004, 320 + .mnd_width = 8, 321 + .hid_width = 5, 322 + .parent_map = gcc_parent_map_5, 323 + .freq_tbl = ftbl_gcc_gp1_clk_src, 324 + .clkr.hw.init = &(struct clk_init_data){ 325 + .name = "gcc_gp2_clk_src", 326 + .parent_data = gcc_parent_data_5, 327 + .num_parents = ARRAY_SIZE(gcc_parent_data_5), 328 + .ops = &clk_rcg2_ops, 329 + }, 330 + }; 331 + 332 + static struct clk_rcg2 gcc_gp3_clk_src = { 333 + .cmd_rcgr = 0x39004, 334 + .mnd_width = 8, 335 + .hid_width = 5, 336 + .parent_map = gcc_parent_map_5, 337 + .freq_tbl = ftbl_gcc_gp1_clk_src, 338 + .clkr.hw.init = &(struct clk_init_data){ 339 + .name = "gcc_gp3_clk_src", 340 + .parent_data = gcc_parent_data_5, 341 + .num_parents = ARRAY_SIZE(gcc_parent_data_5), 342 + .ops = &clk_rcg2_ops, 343 + }, 344 + }; 345 + 346 + static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = { 347 + F(19200000, P_BI_TCXO, 1, 0, 0), 348 + F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0), 349 + { } 350 + }; 351 + 352 + static struct clk_rcg2 gcc_pdm2_clk_src = { 353 + .cmd_rcgr = 0x23010, 354 + .mnd_width = 0, 355 + .hid_width = 5, 356 + .parent_map = gcc_parent_map_1, 357 + .freq_tbl = ftbl_gcc_pdm2_clk_src, 358 + .clkr.hw.init = &(struct clk_init_data){ 359 + .name = "gcc_pdm2_clk_src", 360 + .parent_data = gcc_parent_data_1, 361 + .num_parents = ARRAY_SIZE(gcc_parent_data_1), 362 + .ops = &clk_rcg2_ops, 363 + }, 364 + }; 365 + 366 + static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = { 367 + F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625), 368 + F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625), 369 + F(19200000, P_BI_TCXO, 1, 0, 0), 370 + F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625), 371 + F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75), 372 + F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25), 373 + F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75), 374 + F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 375 + F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15), 376 + F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25), 377 + F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0), 378 + F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375), 379 + F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75), 380 + F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625), 381 + F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0), 382 + F(128000000, P_GPLL6_OUT_EVEN, 3, 0, 0), 383 + { } 384 + }; 385 + 386 + static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = { 387 + .name = "gcc_qupv3_wrap0_s0_clk_src", 388 + .parent_data = gcc_parent_data_0, 389 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 390 + .ops = &clk_rcg2_ops, 391 + }; 392 + 393 + static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = { 394 + .cmd_rcgr = 0x21148, 395 + .mnd_width = 16, 396 + .hid_width = 5, 397 + .parent_map = gcc_parent_map_0, 398 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 399 + .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init, 400 + }; 401 + 402 + static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = { 403 + .name = "gcc_qupv3_wrap0_s1_clk_src", 404 + .parent_data = gcc_parent_data_0, 405 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 406 + .ops = &clk_rcg2_ops, 407 + }; 408 + 409 + static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = { 410 + .cmd_rcgr = 0x21278, 411 + .mnd_width = 16, 412 + .hid_width = 5, 413 + .parent_map = gcc_parent_map_0, 414 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 415 + .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init, 416 + }; 417 + 418 + static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = { 419 + .name = "gcc_qupv3_wrap0_s2_clk_src", 420 + .parent_data = gcc_parent_data_0, 421 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 422 + .ops = &clk_rcg2_ops, 423 + }; 424 + 425 + static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = { 426 + .cmd_rcgr = 0x213a8, 427 + .mnd_width = 16, 428 + .hid_width = 5, 429 + .parent_map = gcc_parent_map_0, 430 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 431 + .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init, 432 + }; 433 + 434 + static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = { 435 + .name = "gcc_qupv3_wrap0_s3_clk_src", 436 + .parent_data = gcc_parent_data_0, 437 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 438 + .ops = &clk_rcg2_ops, 439 + }; 440 + 441 + static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = { 442 + .cmd_rcgr = 0x214d8, 443 + .mnd_width = 16, 444 + .hid_width = 5, 445 + .parent_map = gcc_parent_map_0, 446 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 447 + .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init, 448 + }; 449 + 450 + static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = { 451 + .name = "gcc_qupv3_wrap0_s4_clk_src", 452 + .parent_data = gcc_parent_data_0, 453 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 454 + .ops = &clk_rcg2_ops, 455 + }; 456 + 457 + static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = { 458 + .cmd_rcgr = 0x21608, 459 + .mnd_width = 16, 460 + .hid_width = 5, 461 + .parent_map = gcc_parent_map_0, 462 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 463 + .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init, 464 + }; 465 + 466 + static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = { 467 + .name = "gcc_qupv3_wrap0_s5_clk_src", 468 + .parent_data = gcc_parent_data_0, 469 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 470 + .ops = &clk_rcg2_ops, 471 + }; 472 + 473 + static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = { 474 + .cmd_rcgr = 0x21738, 475 + .mnd_width = 16, 476 + .hid_width = 5, 477 + .parent_map = gcc_parent_map_0, 478 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 479 + .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init, 480 + }; 481 + 482 + static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = { 483 + .name = "gcc_qupv3_wrap1_s0_clk_src", 484 + .parent_data = gcc_parent_data_0, 485 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 486 + .ops = &clk_rcg2_ops, 487 + }; 488 + 489 + static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = { 490 + .cmd_rcgr = 0x22018, 491 + .mnd_width = 16, 492 + .hid_width = 5, 493 + .parent_map = gcc_parent_map_0, 494 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 495 + .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init, 496 + }; 497 + 498 + static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = { 499 + .name = "gcc_qupv3_wrap1_s1_clk_src", 500 + .parent_data = gcc_parent_data_0, 501 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 502 + .ops = &clk_rcg2_ops, 503 + }; 504 + 505 + static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = { 506 + .cmd_rcgr = 0x22148, 507 + .mnd_width = 16, 508 + .hid_width = 5, 509 + .parent_map = gcc_parent_map_0, 510 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 511 + .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init, 512 + }; 513 + 514 + static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = { 515 + .name = "gcc_qupv3_wrap1_s2_clk_src", 516 + .parent_data = gcc_parent_data_0, 517 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 518 + .ops = &clk_rcg2_ops, 519 + }; 520 + 521 + static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = { 522 + .cmd_rcgr = 0x22278, 523 + .mnd_width = 16, 524 + .hid_width = 5, 525 + .parent_map = gcc_parent_map_0, 526 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 527 + .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init, 528 + }; 529 + 530 + static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = { 531 + .name = "gcc_qupv3_wrap1_s3_clk_src", 532 + .parent_data = gcc_parent_data_0, 533 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 534 + .ops = &clk_rcg2_ops, 535 + }; 536 + 537 + static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = { 538 + .cmd_rcgr = 0x223a8, 539 + .mnd_width = 16, 540 + .hid_width = 5, 541 + .parent_map = gcc_parent_map_0, 542 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 543 + .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init, 544 + }; 545 + 546 + static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = { 547 + .name = "gcc_qupv3_wrap1_s4_clk_src", 548 + .parent_data = gcc_parent_data_0, 549 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 550 + .ops = &clk_rcg2_ops, 551 + }; 552 + 553 + static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = { 554 + .cmd_rcgr = 0x224d8, 555 + .mnd_width = 16, 556 + .hid_width = 5, 557 + .parent_map = gcc_parent_map_0, 558 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 559 + .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init, 560 + }; 561 + 562 + static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = { 563 + .name = "gcc_qupv3_wrap1_s5_clk_src", 564 + .parent_data = gcc_parent_data_0, 565 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 566 + .ops = &clk_rcg2_ops, 567 + }; 568 + 569 + static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = { 570 + .cmd_rcgr = 0x22608, 571 + .mnd_width = 16, 572 + .hid_width = 5, 573 + .parent_map = gcc_parent_map_0, 574 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 575 + .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init, 576 + }; 577 + 578 + static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = { 579 + F(144000, P_BI_TCXO, 16, 3, 25), 580 + F(400000, P_BI_TCXO, 12, 1, 4), 581 + F(19200000, P_BI_TCXO, 1, 0, 0), 582 + F(20000000, P_GPLL0_OUT_EVEN, 5, 1, 3), 583 + F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 584 + F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 585 + F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0), 586 + F(192000000, P_GPLL6_OUT_EVEN, 2, 0, 0), 587 + F(384000000, P_GPLL6_OUT_EVEN, 1, 0, 0), 588 + { } 589 + }; 590 + 591 + static struct clk_rcg2 gcc_sdcc1_apps_clk_src = { 592 + .cmd_rcgr = 0x4b024, 593 + .mnd_width = 8, 594 + .hid_width = 5, 595 + .parent_map = gcc_parent_map_7, 596 + .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src, 597 + .clkr.hw.init = &(struct clk_init_data){ 598 + .name = "gcc_sdcc1_apps_clk_src", 599 + .parent_data = gcc_parent_data_7, 600 + .num_parents = ARRAY_SIZE(gcc_parent_data_7), 601 + .ops = &clk_rcg2_ops, 602 + }, 603 + }; 604 + 605 + static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = { 606 + F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0), 607 + F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0), 608 + F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0), 609 + { } 610 + }; 611 + 612 + static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = { 613 + .cmd_rcgr = 0x4b00c, 614 + .mnd_width = 0, 615 + .hid_width = 5, 616 + .parent_map = gcc_parent_map_1, 617 + .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src, 618 + .clkr.hw.init = &(struct clk_init_data){ 619 + .name = "gcc_sdcc1_ice_core_clk_src", 620 + .parent_data = gcc_parent_data_1, 621 + .num_parents = ARRAY_SIZE(gcc_parent_data_1), 622 + .ops = &clk_rcg2_ops, 623 + }, 624 + }; 625 + 626 + static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { 627 + F(400000, P_BI_TCXO, 12, 1, 4), 628 + F(9600000, P_BI_TCXO, 2, 0, 0), 629 + F(19200000, P_BI_TCXO, 1, 0, 0), 630 + F(25000000, P_GPLL0_OUT_ODD, 8, 0, 0), 631 + F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0), 632 + F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0), 633 + F(202000000, P_GPLL7_OUT_MAIN, 4, 0, 0), 634 + { } 635 + }; 636 + 637 + static struct clk_rcg2 gcc_sdcc2_apps_clk_src = { 638 + .cmd_rcgr = 0x2000c, 639 + .mnd_width = 8, 640 + .hid_width = 5, 641 + .parent_map = gcc_parent_map_8, 642 + .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src, 643 + .clkr.hw.init = &(struct clk_init_data){ 644 + .name = "gcc_sdcc2_apps_clk_src", 645 + .parent_data = gcc_parent_data_8, 646 + .num_parents = ARRAY_SIZE(gcc_parent_data_8), 647 + .ops = &clk_rcg2_floor_ops, 648 + }, 649 + }; 650 + 651 + static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = { 652 + F(25000000, P_GPLL0_OUT_ODD, 8, 0, 0), 653 + F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0), 654 + F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0), 655 + F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0), 656 + F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0), 657 + { } 658 + }; 659 + 660 + static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = { 661 + .cmd_rcgr = 0x3a01c, 662 + .mnd_width = 8, 663 + .hid_width = 5, 664 + .parent_map = gcc_parent_map_4, 665 + .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src, 666 + .clkr.hw.init = &(struct clk_init_data){ 667 + .name = "gcc_ufs_phy_axi_clk_src", 668 + .parent_data = gcc_parent_data_4, 669 + .num_parents = ARRAY_SIZE(gcc_parent_data_4), 670 + .ops = &clk_rcg2_ops, 671 + }, 672 + }; 673 + 674 + static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = { 675 + F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0), 676 + F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 677 + F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0), 678 + F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0), 679 + { } 680 + }; 681 + 682 + static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = { 683 + .cmd_rcgr = 0x3a048, 684 + .mnd_width = 0, 685 + .hid_width = 5, 686 + .parent_map = gcc_parent_map_1, 687 + .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src, 688 + .clkr.hw.init = &(struct clk_init_data){ 689 + .name = "gcc_ufs_phy_ice_core_clk_src", 690 + .parent_data = gcc_parent_data_1, 691 + .num_parents = ARRAY_SIZE(gcc_parent_data_1), 692 + .ops = &clk_rcg2_ops, 693 + }, 694 + }; 695 + 696 + static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = { 697 + F(9600000, P_BI_TCXO, 2, 0, 0), 698 + F(19200000, P_BI_TCXO, 1, 0, 0), 699 + { } 700 + }; 701 + 702 + static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = { 703 + .cmd_rcgr = 0x3a0b0, 704 + .mnd_width = 0, 705 + .hid_width = 5, 706 + .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src, 707 + .clkr.hw.init = &(struct clk_init_data){ 708 + .name = "gcc_ufs_phy_phy_aux_clk_src", 709 + .parent_data = &(const struct clk_parent_data){ 710 + .fw_name = "bi_tcxo", 711 + }, 712 + .num_parents = 1, 713 + .ops = &clk_rcg2_ops, 714 + }, 715 + }; 716 + 717 + static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = { 718 + F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0), 719 + F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 720 + F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0), 721 + { } 722 + }; 723 + 724 + static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = { 725 + .cmd_rcgr = 0x3a060, 726 + .mnd_width = 0, 727 + .hid_width = 5, 728 + .parent_map = gcc_parent_map_1, 729 + .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src, 730 + .clkr.hw.init = &(struct clk_init_data){ 731 + .name = "gcc_ufs_phy_unipro_core_clk_src", 732 + .parent_data = gcc_parent_data_1, 733 + .num_parents = ARRAY_SIZE(gcc_parent_data_1), 734 + .ops = &clk_rcg2_ops, 735 + }, 736 + }; 737 + 738 + static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = { 739 + F(66666667, P_GPLL0_OUT_ODD, 3, 0, 0), 740 + F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0), 741 + F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), 742 + F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0), 743 + { } 744 + }; 745 + 746 + static struct clk_rcg2 gcc_usb30_prim_master_clk_src = { 747 + .cmd_rcgr = 0x1a01c, 748 + .mnd_width = 8, 749 + .hid_width = 5, 750 + .parent_map = gcc_parent_map_4, 751 + .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src, 752 + .clkr.hw.init = &(struct clk_init_data){ 753 + .name = "gcc_usb30_prim_master_clk_src", 754 + .parent_data = gcc_parent_data_4, 755 + .num_parents = ARRAY_SIZE(gcc_parent_data_4), 756 + .ops = &clk_rcg2_ops, 757 + }, 758 + }; 759 + 760 + static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = { 761 + F(19200000, P_BI_TCXO, 1, 0, 0), 762 + { } 763 + }; 764 + 765 + static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = { 766 + .cmd_rcgr = 0x1a034, 767 + .mnd_width = 0, 768 + .hid_width = 5, 769 + .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src, 770 + .clkr.hw.init = &(struct clk_init_data){ 771 + .name = "gcc_usb30_prim_mock_utmi_clk_src", 772 + .parent_data = &(const struct clk_parent_data){ 773 + .fw_name = "bi_tcxo", 774 + }, 775 + .num_parents = 1, 776 + .ops = &clk_rcg2_ops, 777 + }, 778 + }; 779 + 780 + static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = { 781 + .cmd_rcgr = 0x1a060, 782 + .mnd_width = 0, 783 + .hid_width = 5, 784 + .parent_map = gcc_parent_map_6, 785 + .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src, 786 + .clkr.hw.init = &(struct clk_init_data){ 787 + .name = "gcc_usb3_prim_phy_aux_clk_src", 788 + .parent_data = gcc_parent_data_6, 789 + .num_parents = ARRAY_SIZE(gcc_parent_data_6), 790 + .ops = &clk_rcg2_ops, 791 + }, 792 + }; 793 + 794 + static struct clk_branch gcc_aggre_ufs_phy_axi_clk = { 795 + .halt_reg = 0x3e014, 796 + .halt_check = BRANCH_HALT_DELAY, 797 + .hwcg_reg = 0x3e014, 798 + .hwcg_bit = 1, 799 + .clkr = { 800 + .enable_reg = 0x3e014, 801 + .enable_mask = BIT(0), 802 + .hw.init = &(struct clk_init_data){ 803 + .name = "gcc_aggre_ufs_phy_axi_clk", 804 + .parent_hws = (const struct clk_hw*[]){ 805 + &gcc_ufs_phy_axi_clk_src.clkr.hw, 806 + }, 807 + .num_parents = 1, 808 + .flags = CLK_SET_RATE_PARENT, 809 + .ops = &clk_branch2_ops, 810 + }, 811 + }, 812 + }; 813 + 814 + static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = { 815 + .halt_reg = 0x3e014, 816 + .halt_check = BRANCH_HALT, 817 + .hwcg_reg = 0x3e014, 818 + .hwcg_bit = 1, 819 + .clkr = { 820 + .enable_reg = 0x3e014, 821 + .enable_mask = BIT(1), 822 + .hw.init = &(struct clk_init_data){ 823 + .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk", 824 + .parent_hws = (const struct clk_hw*[]){ 825 + &gcc_ufs_phy_axi_clk_src.clkr.hw, 826 + }, 827 + .num_parents = 1, 828 + .flags = CLK_SET_RATE_PARENT, 829 + .ops = &clk_branch2_ops, 830 + }, 831 + }, 832 + }; 833 + 834 + static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = { 835 + .halt_reg = 0x3e014, 836 + .halt_check = BRANCH_HALT, 837 + .hwcg_reg = 0x3e014, 838 + .hwcg_bit = 1, 839 + .clkr = { 840 + .enable_reg = 0x3e014, 841 + .enable_mask = BIT(1), 842 + .hw.init = &(struct clk_init_data){ 843 + .name = "gcc_ufs_phy_axi_hw_ctl_clk", 844 + .parent_hws = (const struct clk_hw*[]){ 845 + &gcc_ufs_phy_axi_clk_src.clkr.hw, 846 + }, 847 + .num_parents = 1, 848 + .flags = CLK_SET_RATE_PARENT, 849 + .ops = &clk_branch2_ops, 850 + }, 851 + }, 852 + }; 853 + 854 + static struct clk_branch gcc_aggre_usb3_prim_axi_clk = { 855 + .halt_reg = 0x3e010, 856 + .halt_check = BRANCH_HALT, 857 + .hwcg_reg = 0x3e010, 858 + .hwcg_bit = 1, 859 + .clkr = { 860 + .enable_reg = 0x3e010, 861 + .enable_mask = BIT(0), 862 + .hw.init = &(struct clk_init_data){ 863 + .name = "gcc_aggre_usb3_prim_axi_clk", 864 + .parent_hws = (const struct clk_hw*[]){ 865 + &gcc_usb30_prim_master_clk_src.clkr.hw, 866 + }, 867 + .num_parents = 1, 868 + .flags = CLK_SET_RATE_PARENT, 869 + .ops = &clk_branch2_ops, 870 + }, 871 + }, 872 + }; 873 + 874 + static struct clk_branch gcc_boot_rom_ahb_clk = { 875 + .halt_reg = 0x26004, 876 + .halt_check = BRANCH_HALT_VOTED, 877 + .hwcg_reg = 0x26004, 878 + .hwcg_bit = 1, 879 + .clkr = { 880 + .enable_reg = 0x52000, 881 + .enable_mask = BIT(28), 882 + .hw.init = &(struct clk_init_data){ 883 + .name = "gcc_boot_rom_ahb_clk", 884 + .ops = &clk_branch2_ops, 885 + }, 886 + }, 887 + }; 888 + 889 + static struct clk_branch gcc_camera_ahb_clk = { 890 + .halt_reg = 0x17008, 891 + .halt_check = BRANCH_HALT, 892 + .hwcg_reg = 0x17008, 893 + .hwcg_bit = 1, 894 + .clkr = { 895 + .enable_reg = 0x17008, 896 + .enable_mask = BIT(0), 897 + .hw.init = &(struct clk_init_data){ 898 + .name = "gcc_camera_ahb_clk", 899 + .flags = CLK_IS_CRITICAL, 900 + .ops = &clk_branch2_ops, 901 + }, 902 + }, 903 + }; 904 + 905 + static struct clk_branch gcc_camera_axi_clk = { 906 + .halt_reg = 0x17018, 907 + .halt_check = BRANCH_HALT, 908 + .hwcg_reg = 0x17018, 909 + .hwcg_bit = 1, 910 + .clkr = { 911 + .enable_reg = 0x17018, 912 + .enable_mask = BIT(0), 913 + .hw.init = &(struct clk_init_data){ 914 + .name = "gcc_camera_axi_clk", 915 + .ops = &clk_branch2_ops, 916 + }, 917 + }, 918 + }; 919 + 920 + static struct clk_branch gcc_camera_throttle_nrt_axi_clk = { 921 + .halt_reg = 0x17078, 922 + .halt_check = BRANCH_VOTED, 923 + .hwcg_reg = 0x17078, 924 + .hwcg_bit = 1, 925 + .clkr = { 926 + .enable_reg = 0x17078, 927 + .enable_mask = BIT(0), 928 + .hw.init = &(struct clk_init_data){ 929 + .name = "gcc_camera_throttle_nrt_axi_clk", 930 + .ops = &clk_branch2_ops, 931 + }, 932 + }, 933 + }; 934 + 935 + static struct clk_branch gcc_camera_throttle_rt_axi_clk = { 936 + .halt_reg = 0x17024, 937 + .halt_check = BRANCH_VOTED, 938 + .hwcg_reg = 0x17024, 939 + .hwcg_bit = 1, 940 + .clkr = { 941 + .enable_reg = 0x17024, 942 + .enable_mask = BIT(0), 943 + .hw.init = &(struct clk_init_data){ 944 + .name = "gcc_camera_throttle_rt_axi_clk", 945 + .ops = &clk_branch2_ops, 946 + }, 947 + }, 948 + }; 949 + 950 + static struct clk_branch gcc_camera_xo_clk = { 951 + .halt_reg = 0x17030, 952 + .halt_check = BRANCH_HALT, 953 + .clkr = { 954 + .enable_reg = 0x17030, 955 + .enable_mask = BIT(0), 956 + .hw.init = &(struct clk_init_data){ 957 + .name = "gcc_camera_xo_clk", 958 + .flags = CLK_IS_CRITICAL, 959 + .ops = &clk_branch2_ops, 960 + }, 961 + }, 962 + }; 963 + 964 + static struct clk_branch gcc_ce1_ahb_clk = { 965 + .halt_reg = 0x2b00c, 966 + .halt_check = BRANCH_HALT_VOTED, 967 + .hwcg_reg = 0x2b00c, 968 + .hwcg_bit = 1, 969 + .clkr = { 970 + .enable_reg = 0x52008, 971 + .enable_mask = BIT(3), 972 + .hw.init = &(struct clk_init_data){ 973 + .name = "gcc_ce1_ahb_clk", 974 + .ops = &clk_branch2_ops, 975 + }, 976 + }, 977 + }; 978 + 979 + static struct clk_branch gcc_ce1_axi_clk = { 980 + .halt_reg = 0x2b008, 981 + .halt_check = BRANCH_HALT_VOTED, 982 + .clkr = { 983 + .enable_reg = 0x52008, 984 + .enable_mask = BIT(2), 985 + .hw.init = &(struct clk_init_data){ 986 + .name = "gcc_ce1_axi_clk", 987 + .ops = &clk_branch2_ops, 988 + }, 989 + }, 990 + }; 991 + 992 + static struct clk_branch gcc_ce1_clk = { 993 + .halt_reg = 0x2b004, 994 + .halt_check = BRANCH_HALT_VOTED, 995 + .clkr = { 996 + .enable_reg = 0x52008, 997 + .enable_mask = BIT(1), 998 + .hw.init = &(struct clk_init_data){ 999 + .name = "gcc_ce1_clk", 1000 + .ops = &clk_branch2_ops, 1001 + }, 1002 + }, 1003 + }; 1004 + 1005 + static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = { 1006 + .halt_reg = 0x1101c, 1007 + .halt_check = BRANCH_HALT, 1008 + .hwcg_reg = 0x1101c, 1009 + .hwcg_bit = 1, 1010 + .clkr = { 1011 + .enable_reg = 0x1101c, 1012 + .enable_mask = BIT(0), 1013 + .hw.init = &(struct clk_init_data){ 1014 + .name = "gcc_cfg_noc_usb3_prim_axi_clk", 1015 + .parent_hws = (const struct clk_hw*[]){ 1016 + &gcc_usb30_prim_master_clk_src.clkr.hw, 1017 + }, 1018 + .num_parents = 1, 1019 + .flags = CLK_SET_RATE_PARENT, 1020 + .ops = &clk_branch2_ops, 1021 + }, 1022 + }, 1023 + }; 1024 + 1025 + static struct clk_branch gcc_cpuss_ahb_clk = { 1026 + .halt_reg = 0x30000, 1027 + .halt_check = BRANCH_HALT_VOTED, 1028 + .hwcg_reg = 0x30000, 1029 + .hwcg_bit = 1, 1030 + .clkr = { 1031 + .enable_reg = 0x52008, 1032 + .enable_mask = BIT(4), 1033 + .hw.init = &(struct clk_init_data){ 1034 + .name = "gcc_cpuss_ahb_clk", 1035 + .parent_hws = (const struct clk_hw*[]){ 1036 + &gcc_cpuss_ahb_clk_src.clkr.hw, 1037 + }, 1038 + .num_parents = 1, 1039 + .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 1040 + .ops = &clk_branch2_ops, 1041 + }, 1042 + }, 1043 + }; 1044 + 1045 + static struct clk_branch gcc_cpuss_gnoc_clk = { 1046 + .halt_reg = 0x30004, 1047 + .halt_check = BRANCH_HALT_VOTED, 1048 + .hwcg_reg = 0x30004, 1049 + .hwcg_bit = 1, 1050 + .clkr = { 1051 + .enable_reg = 0x52008, 1052 + .enable_mask = BIT(5), 1053 + .hw.init = &(struct clk_init_data){ 1054 + .name = "gcc_cpuss_gnoc_clk", 1055 + .flags = CLK_IS_CRITICAL, 1056 + .ops = &clk_branch2_ops, 1057 + }, 1058 + }, 1059 + }; 1060 + 1061 + static struct clk_branch gcc_cpuss_rbcpr_clk = { 1062 + .halt_reg = 0x30008, 1063 + .halt_check = BRANCH_HALT, 1064 + .clkr = { 1065 + .enable_reg = 0x30008, 1066 + .enable_mask = BIT(0), 1067 + .hw.init = &(struct clk_init_data){ 1068 + .name = "gcc_cpuss_rbcpr_clk", 1069 + .ops = &clk_branch2_ops, 1070 + }, 1071 + }, 1072 + }; 1073 + 1074 + static struct clk_branch gcc_ddrss_gpu_axi_clk = { 1075 + .halt_reg = 0x2d038, 1076 + .halt_check = BRANCH_VOTED, 1077 + .hwcg_reg = 0x2d038, 1078 + .hwcg_bit = 1, 1079 + .clkr = { 1080 + .enable_reg = 0x2d038, 1081 + .enable_mask = BIT(0), 1082 + .hw.init = &(struct clk_init_data){ 1083 + .name = "gcc_ddrss_gpu_axi_clk", 1084 + .ops = &clk_branch2_ops, 1085 + }, 1086 + }, 1087 + }; 1088 + 1089 + static struct clk_branch gcc_disp_ahb_clk = { 1090 + .halt_reg = 0x1700c, 1091 + .halt_check = BRANCH_HALT, 1092 + .hwcg_reg = 0x1700c, 1093 + .hwcg_bit = 1, 1094 + .clkr = { 1095 + .enable_reg = 0x1700c, 1096 + .enable_mask = BIT(0), 1097 + .hw.init = &(struct clk_init_data){ 1098 + .name = "gcc_disp_ahb_clk", 1099 + .flags = CLK_IS_CRITICAL, 1100 + .ops = &clk_branch2_ops, 1101 + }, 1102 + }, 1103 + }; 1104 + 1105 + static struct clk_branch gcc_disp_axi_clk = { 1106 + .halt_reg = 0x1701c, 1107 + .halt_check = BRANCH_HALT, 1108 + .hwcg_reg = 0x1701c, 1109 + .hwcg_bit = 1, 1110 + .clkr = { 1111 + .enable_reg = 0x1701c, 1112 + .enable_mask = BIT(0), 1113 + .hw.init = &(struct clk_init_data){ 1114 + .name = "gcc_disp_axi_clk", 1115 + .ops = &clk_branch2_ops, 1116 + }, 1117 + }, 1118 + }; 1119 + 1120 + static struct clk_branch gcc_disp_cc_sleep_clk = { 1121 + .halt_reg = 0x17074, 1122 + .halt_check = BRANCH_HALT_DELAY, 1123 + .hwcg_reg = 0x17074, 1124 + .hwcg_bit = 1, 1125 + .clkr = { 1126 + .enable_reg = 0x17074, 1127 + .enable_mask = BIT(0), 1128 + .hw.init = &(struct clk_init_data){ 1129 + .name = "gcc_disp_cc_sleep_clk", 1130 + .ops = &clk_branch2_ops, 1131 + }, 1132 + }, 1133 + }; 1134 + 1135 + static struct clk_branch gcc_disp_cc_xo_clk = { 1136 + .halt_reg = 0x17070, 1137 + .halt_check = BRANCH_HALT, 1138 + .hwcg_reg = 0x17070, 1139 + .hwcg_bit = 1, 1140 + .clkr = { 1141 + .enable_reg = 0x17070, 1142 + .enable_mask = BIT(0), 1143 + .hw.init = &(struct clk_init_data){ 1144 + .name = "gcc_disp_cc_xo_clk", 1145 + .flags = CLK_IS_CRITICAL, 1146 + .ops = &clk_branch2_ops, 1147 + }, 1148 + }, 1149 + }; 1150 + 1151 + static struct clk_branch gcc_disp_gpll0_clk = { 1152 + .halt_check = BRANCH_HALT_DELAY, 1153 + .clkr = { 1154 + .enable_reg = 0x52000, 1155 + .enable_mask = BIT(2), 1156 + .hw.init = &(struct clk_init_data){ 1157 + .name = "gcc_disp_gpll0_clk", 1158 + .parent_hws = (const struct clk_hw*[]){ 1159 + &gpll0.clkr.hw, 1160 + }, 1161 + .num_parents = 1, 1162 + .ops = &clk_branch2_ops, 1163 + }, 1164 + }, 1165 + }; 1166 + 1167 + static struct clk_branch gcc_disp_throttle_axi_clk = { 1168 + .halt_reg = 0x17028, 1169 + .halt_check = BRANCH_HALT, 1170 + .hwcg_reg = 0x17028, 1171 + .hwcg_bit = 1, 1172 + .clkr = { 1173 + .enable_reg = 0x17028, 1174 + .enable_mask = BIT(0), 1175 + .hw.init = &(struct clk_init_data){ 1176 + .name = "gcc_disp_throttle_axi_clk", 1177 + .ops = &clk_branch2_ops, 1178 + }, 1179 + }, 1180 + }; 1181 + 1182 + static struct clk_branch gcc_disp_xo_clk = { 1183 + .halt_reg = 0x17034, 1184 + .halt_check = BRANCH_HALT, 1185 + .clkr = { 1186 + .enable_reg = 0x17034, 1187 + .enable_mask = BIT(0), 1188 + .hw.init = &(struct clk_init_data){ 1189 + .name = "gcc_disp_xo_clk", 1190 + .ops = &clk_branch2_ops, 1191 + }, 1192 + }, 1193 + }; 1194 + 1195 + static struct clk_branch gcc_gp1_clk = { 1196 + .halt_reg = 0x37000, 1197 + .halt_check = BRANCH_HALT, 1198 + .clkr = { 1199 + .enable_reg = 0x37000, 1200 + .enable_mask = BIT(0), 1201 + .hw.init = &(struct clk_init_data){ 1202 + .name = "gcc_gp1_clk", 1203 + .parent_hws = (const struct clk_hw*[]){ 1204 + &gcc_gp1_clk_src.clkr.hw, 1205 + }, 1206 + .num_parents = 1, 1207 + .flags = CLK_SET_RATE_PARENT, 1208 + .ops = &clk_branch2_ops, 1209 + }, 1210 + }, 1211 + }; 1212 + 1213 + static struct clk_branch gcc_gp2_clk = { 1214 + .halt_reg = 0x38000, 1215 + .halt_check = BRANCH_HALT, 1216 + .clkr = { 1217 + .enable_reg = 0x38000, 1218 + .enable_mask = BIT(0), 1219 + .hw.init = &(struct clk_init_data){ 1220 + .name = "gcc_gp2_clk", 1221 + .parent_hws = (const struct clk_hw*[]){ 1222 + &gcc_gp2_clk_src.clkr.hw, 1223 + }, 1224 + .num_parents = 1, 1225 + .flags = CLK_SET_RATE_PARENT, 1226 + .ops = &clk_branch2_ops, 1227 + }, 1228 + }, 1229 + }; 1230 + 1231 + static struct clk_branch gcc_gp3_clk = { 1232 + .halt_reg = 0x39000, 1233 + .halt_check = BRANCH_HALT, 1234 + .clkr = { 1235 + .enable_reg = 0x39000, 1236 + .enable_mask = BIT(0), 1237 + .hw.init = &(struct clk_init_data){ 1238 + .name = "gcc_gp3_clk", 1239 + .parent_hws = (const struct clk_hw*[]){ 1240 + &gcc_gp3_clk_src.clkr.hw, 1241 + }, 1242 + .num_parents = 1, 1243 + .flags = CLK_SET_RATE_PARENT, 1244 + .ops = &clk_branch2_ops, 1245 + }, 1246 + }, 1247 + }; 1248 + 1249 + static struct clk_branch gcc_gpu_cfg_ahb_clk = { 1250 + .halt_reg = 0x45004, 1251 + .halt_check = BRANCH_HALT, 1252 + .hwcg_reg = 0x45004, 1253 + .hwcg_bit = 1, 1254 + .clkr = { 1255 + .enable_reg = 0x45004, 1256 + .enable_mask = BIT(0), 1257 + .hw.init = &(struct clk_init_data){ 1258 + .name = "gcc_gpu_cfg_ahb_clk", 1259 + .flags = CLK_IS_CRITICAL, 1260 + .ops = &clk_branch2_ops, 1261 + }, 1262 + }, 1263 + }; 1264 + 1265 + static struct clk_branch gcc_gpu_gpll0_clk = { 1266 + .halt_check = BRANCH_HALT_DELAY, 1267 + .clkr = { 1268 + .enable_reg = 0x52008, 1269 + .enable_mask = BIT(7), 1270 + .hw.init = &(struct clk_init_data){ 1271 + .name = "gcc_gpu_gpll0_clk", 1272 + .parent_hws = (const struct clk_hw*[]){ 1273 + &gpll0.clkr.hw, 1274 + }, 1275 + .num_parents = 1, 1276 + .ops = &clk_branch2_ops, 1277 + }, 1278 + }, 1279 + }; 1280 + 1281 + static struct clk_branch gcc_gpu_gpll0_div_clk = { 1282 + .halt_check = BRANCH_HALT_DELAY, 1283 + .clkr = { 1284 + .enable_reg = 0x52008, 1285 + .enable_mask = BIT(8), 1286 + .hw.init = &(struct clk_init_data){ 1287 + .name = "gcc_gpu_gpll0_div_clk", 1288 + .parent_hws = (const struct clk_hw*[]){ 1289 + &gcc_gpu_gpll0_main_div_clk_src.clkr.hw, 1290 + }, 1291 + .num_parents = 1, 1292 + .ops = &clk_branch2_ops, 1293 + }, 1294 + }, 1295 + }; 1296 + 1297 + static struct clk_branch gcc_gpu_memnoc_gfx_clk = { 1298 + .halt_reg = 0x4500c, 1299 + .halt_check = BRANCH_VOTED, 1300 + .hwcg_reg = 0x4500c, 1301 + .hwcg_bit = 1, 1302 + .clkr = { 1303 + .enable_reg = 0x4500c, 1304 + .enable_mask = BIT(0), 1305 + .hw.init = &(struct clk_init_data){ 1306 + .name = "gcc_gpu_memnoc_gfx_clk", 1307 + .ops = &clk_branch2_ops, 1308 + }, 1309 + }, 1310 + }; 1311 + 1312 + static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = { 1313 + .halt_reg = 0x45014, 1314 + .halt_check = BRANCH_HALT, 1315 + .hwcg_reg = 0x45014, 1316 + .hwcg_bit = 1, 1317 + .clkr = { 1318 + .enable_reg = 0x45014, 1319 + .enable_mask = BIT(0), 1320 + .hw.init = &(struct clk_init_data){ 1321 + .name = "gcc_gpu_snoc_dvm_gfx_clk", 1322 + .ops = &clk_branch2_ops, 1323 + }, 1324 + }, 1325 + }; 1326 + 1327 + static struct clk_branch gcc_npu_axi_clk = { 1328 + .halt_reg = 0x4c008, 1329 + .halt_check = BRANCH_VOTED, 1330 + .hwcg_reg = 0x4c008, 1331 + .hwcg_bit = 1, 1332 + .clkr = { 1333 + .enable_reg = 0x4c008, 1334 + .enable_mask = BIT(0), 1335 + .hw.init = &(struct clk_init_data){ 1336 + .name = "gcc_npu_axi_clk", 1337 + .ops = &clk_branch2_ops, 1338 + }, 1339 + }, 1340 + }; 1341 + 1342 + static struct clk_branch gcc_npu_bwmon_axi_clk = { 1343 + .halt_reg = 0x4d004, 1344 + .halt_check = BRANCH_HALT_DELAY, 1345 + .hwcg_reg = 0x4d004, 1346 + .hwcg_bit = 1, 1347 + .clkr = { 1348 + .enable_reg = 0x4d004, 1349 + .enable_mask = BIT(0), 1350 + .hw.init = &(struct clk_init_data){ 1351 + .name = "gcc_npu_bwmon_axi_clk", 1352 + .ops = &clk_branch2_ops, 1353 + }, 1354 + }, 1355 + }; 1356 + 1357 + static struct clk_branch gcc_npu_bwmon_dma_cfg_ahb_clk = { 1358 + .halt_reg = 0x4d008, 1359 + .halt_check = BRANCH_HALT, 1360 + .clkr = { 1361 + .enable_reg = 0x4d008, 1362 + .enable_mask = BIT(0), 1363 + .hw.init = &(struct clk_init_data){ 1364 + .name = "gcc_npu_bwmon_dma_cfg_ahb_clk", 1365 + .ops = &clk_branch2_ops, 1366 + }, 1367 + }, 1368 + }; 1369 + 1370 + static struct clk_branch gcc_npu_bwmon_dsp_cfg_ahb_clk = { 1371 + .halt_reg = 0x4d00c, 1372 + .halt_check = BRANCH_HALT, 1373 + .clkr = { 1374 + .enable_reg = 0x4d00c, 1375 + .enable_mask = BIT(0), 1376 + .hw.init = &(struct clk_init_data){ 1377 + .name = "gcc_npu_bwmon_dsp_cfg_ahb_clk", 1378 + .ops = &clk_branch2_ops, 1379 + }, 1380 + }, 1381 + }; 1382 + 1383 + static struct clk_branch gcc_npu_cfg_ahb_clk = { 1384 + .halt_reg = 0x4c004, 1385 + .halt_check = BRANCH_HALT, 1386 + .hwcg_reg = 0x4c004, 1387 + .hwcg_bit = 1, 1388 + .clkr = { 1389 + .enable_reg = 0x4c004, 1390 + .enable_mask = BIT(0), 1391 + .hw.init = &(struct clk_init_data){ 1392 + .name = "gcc_npu_cfg_ahb_clk", 1393 + .flags = CLK_IS_CRITICAL, 1394 + .ops = &clk_branch2_ops, 1395 + }, 1396 + }, 1397 + }; 1398 + 1399 + static struct clk_branch gcc_npu_dma_clk = { 1400 + .halt_reg = 0x4c140, 1401 + .halt_check = BRANCH_VOTED, 1402 + .hwcg_reg = 0x4c140, 1403 + .hwcg_bit = 1, 1404 + .clkr = { 1405 + .enable_reg = 0x4c140, 1406 + .enable_mask = BIT(0), 1407 + .hw.init = &(struct clk_init_data){ 1408 + .name = "gcc_npu_dma_clk", 1409 + .ops = &clk_branch2_ops, 1410 + }, 1411 + }, 1412 + }; 1413 + 1414 + static struct clk_branch gcc_npu_gpll0_clk = { 1415 + .halt_check = BRANCH_HALT_DELAY, 1416 + .clkr = { 1417 + .enable_reg = 0x52008, 1418 + .enable_mask = BIT(9), 1419 + .hw.init = &(struct clk_init_data){ 1420 + .name = "gcc_npu_gpll0_clk", 1421 + .parent_hws = (const struct clk_hw*[]){ 1422 + &gpll0.clkr.hw, 1423 + }, 1424 + .num_parents = 1, 1425 + .ops = &clk_branch2_ops, 1426 + }, 1427 + }, 1428 + }; 1429 + 1430 + static struct clk_branch gcc_npu_gpll0_div_clk = { 1431 + .halt_check = BRANCH_HALT_DELAY, 1432 + .clkr = { 1433 + .enable_reg = 0x52008, 1434 + .enable_mask = BIT(10), 1435 + .hw.init = &(struct clk_init_data){ 1436 + .name = "gcc_npu_gpll0_div_clk", 1437 + .parent_hws = (const struct clk_hw*[]){ 1438 + &gcc_npu_pll0_main_div_clk_src.clkr.hw, 1439 + }, 1440 + .num_parents = 1, 1441 + .ops = &clk_branch2_ops, 1442 + }, 1443 + }, 1444 + }; 1445 + 1446 + static struct clk_branch gcc_pdm2_clk = { 1447 + .halt_reg = 0x2300c, 1448 + .halt_check = BRANCH_HALT, 1449 + .clkr = { 1450 + .enable_reg = 0x2300c, 1451 + .enable_mask = BIT(0), 1452 + .hw.init = &(struct clk_init_data){ 1453 + .name = "gcc_pdm2_clk", 1454 + .parent_hws = (const struct clk_hw*[]){ 1455 + &gcc_pdm2_clk_src.clkr.hw, 1456 + }, 1457 + .num_parents = 1, 1458 + .flags = CLK_SET_RATE_PARENT, 1459 + .ops = &clk_branch2_ops, 1460 + }, 1461 + }, 1462 + }; 1463 + 1464 + static struct clk_branch gcc_pdm_ahb_clk = { 1465 + .halt_reg = 0x23004, 1466 + .halt_check = BRANCH_HALT, 1467 + .hwcg_reg = 0x23004, 1468 + .hwcg_bit = 1, 1469 + .clkr = { 1470 + .enable_reg = 0x23004, 1471 + .enable_mask = BIT(0), 1472 + .hw.init = &(struct clk_init_data){ 1473 + .name = "gcc_pdm_ahb_clk", 1474 + .ops = &clk_branch2_ops, 1475 + }, 1476 + }, 1477 + }; 1478 + 1479 + static struct clk_branch gcc_pdm_xo4_clk = { 1480 + .halt_reg = 0x23008, 1481 + .halt_check = BRANCH_HALT, 1482 + .clkr = { 1483 + .enable_reg = 0x23008, 1484 + .enable_mask = BIT(0), 1485 + .hw.init = &(struct clk_init_data){ 1486 + .name = "gcc_pdm_xo4_clk", 1487 + .ops = &clk_branch2_ops, 1488 + }, 1489 + }, 1490 + }; 1491 + 1492 + static struct clk_branch gcc_prng_ahb_clk = { 1493 + .halt_reg = 0x24004, 1494 + .halt_check = BRANCH_HALT_VOTED, 1495 + .hwcg_reg = 0x24004, 1496 + .hwcg_bit = 1, 1497 + .clkr = { 1498 + .enable_reg = 0x52000, 1499 + .enable_mask = BIT(26), 1500 + .hw.init = &(struct clk_init_data){ 1501 + .name = "gcc_prng_ahb_clk", 1502 + .ops = &clk_branch2_ops, 1503 + }, 1504 + }, 1505 + }; 1506 + 1507 + static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = { 1508 + .halt_reg = 0x21014, 1509 + .halt_check = BRANCH_HALT_VOTED, 1510 + .clkr = { 1511 + .enable_reg = 0x52000, 1512 + .enable_mask = BIT(9), 1513 + .hw.init = &(struct clk_init_data){ 1514 + .name = "gcc_qupv3_wrap0_core_2x_clk", 1515 + .ops = &clk_branch2_ops, 1516 + }, 1517 + }, 1518 + }; 1519 + 1520 + static struct clk_branch gcc_qupv3_wrap0_core_clk = { 1521 + .halt_reg = 0x2100c, 1522 + .halt_check = BRANCH_HALT_VOTED, 1523 + .clkr = { 1524 + .enable_reg = 0x52000, 1525 + .enable_mask = BIT(8), 1526 + .hw.init = &(struct clk_init_data){ 1527 + .name = "gcc_qupv3_wrap0_core_clk", 1528 + .ops = &clk_branch2_ops, 1529 + }, 1530 + }, 1531 + }; 1532 + 1533 + static struct clk_branch gcc_qupv3_wrap0_s0_clk = { 1534 + .halt_reg = 0x21144, 1535 + .halt_check = BRANCH_HALT_VOTED, 1536 + .clkr = { 1537 + .enable_reg = 0x52000, 1538 + .enable_mask = BIT(10), 1539 + .hw.init = &(struct clk_init_data){ 1540 + .name = "gcc_qupv3_wrap0_s0_clk", 1541 + .parent_hws = (const struct clk_hw*[]){ 1542 + &gcc_qupv3_wrap0_s0_clk_src.clkr.hw, 1543 + }, 1544 + .num_parents = 1, 1545 + .flags = CLK_SET_RATE_PARENT, 1546 + .ops = &clk_branch2_ops, 1547 + }, 1548 + }, 1549 + }; 1550 + 1551 + static struct clk_branch gcc_qupv3_wrap0_s1_clk = { 1552 + .halt_reg = 0x21274, 1553 + .halt_check = BRANCH_HALT_VOTED, 1554 + .clkr = { 1555 + .enable_reg = 0x52000, 1556 + .enable_mask = BIT(11), 1557 + .hw.init = &(struct clk_init_data){ 1558 + .name = "gcc_qupv3_wrap0_s1_clk", 1559 + .parent_hws = (const struct clk_hw*[]){ 1560 + &gcc_qupv3_wrap0_s1_clk_src.clkr.hw, 1561 + }, 1562 + .num_parents = 1, 1563 + .flags = CLK_SET_RATE_PARENT, 1564 + .ops = &clk_branch2_ops, 1565 + }, 1566 + }, 1567 + }; 1568 + 1569 + static struct clk_branch gcc_qupv3_wrap0_s2_clk = { 1570 + .halt_reg = 0x213a4, 1571 + .halt_check = BRANCH_HALT_VOTED, 1572 + .clkr = { 1573 + .enable_reg = 0x52000, 1574 + .enable_mask = BIT(12), 1575 + .hw.init = &(struct clk_init_data){ 1576 + .name = "gcc_qupv3_wrap0_s2_clk", 1577 + .parent_hws = (const struct clk_hw*[]){ 1578 + &gcc_qupv3_wrap0_s2_clk_src.clkr.hw, 1579 + }, 1580 + .num_parents = 1, 1581 + .flags = CLK_SET_RATE_PARENT, 1582 + .ops = &clk_branch2_ops, 1583 + }, 1584 + }, 1585 + }; 1586 + 1587 + static struct clk_branch gcc_qupv3_wrap0_s3_clk = { 1588 + .halt_reg = 0x214d4, 1589 + .halt_check = BRANCH_HALT_VOTED, 1590 + .clkr = { 1591 + .enable_reg = 0x52000, 1592 + .enable_mask = BIT(13), 1593 + .hw.init = &(struct clk_init_data){ 1594 + .name = "gcc_qupv3_wrap0_s3_clk", 1595 + .parent_hws = (const struct clk_hw*[]){ 1596 + &gcc_qupv3_wrap0_s3_clk_src.clkr.hw, 1597 + }, 1598 + .num_parents = 1, 1599 + .flags = CLK_SET_RATE_PARENT, 1600 + .ops = &clk_branch2_ops, 1601 + }, 1602 + }, 1603 + }; 1604 + 1605 + static struct clk_branch gcc_qupv3_wrap0_s4_clk = { 1606 + .halt_reg = 0x21604, 1607 + .halt_check = BRANCH_HALT_VOTED, 1608 + .clkr = { 1609 + .enable_reg = 0x52000, 1610 + .enable_mask = BIT(14), 1611 + .hw.init = &(struct clk_init_data){ 1612 + .name = "gcc_qupv3_wrap0_s4_clk", 1613 + .parent_hws = (const struct clk_hw*[]){ 1614 + &gcc_qupv3_wrap0_s4_clk_src.clkr.hw, 1615 + }, 1616 + .num_parents = 1, 1617 + .flags = CLK_SET_RATE_PARENT, 1618 + .ops = &clk_branch2_ops, 1619 + }, 1620 + }, 1621 + }; 1622 + 1623 + static struct clk_branch gcc_qupv3_wrap0_s5_clk = { 1624 + .halt_reg = 0x21734, 1625 + .halt_check = BRANCH_HALT_VOTED, 1626 + .clkr = { 1627 + .enable_reg = 0x52000, 1628 + .enable_mask = BIT(15), 1629 + .hw.init = &(struct clk_init_data){ 1630 + .name = "gcc_qupv3_wrap0_s5_clk", 1631 + .parent_hws = (const struct clk_hw*[]){ 1632 + &gcc_qupv3_wrap0_s5_clk_src.clkr.hw, 1633 + }, 1634 + .num_parents = 1, 1635 + .flags = CLK_SET_RATE_PARENT, 1636 + .ops = &clk_branch2_ops, 1637 + }, 1638 + }, 1639 + }; 1640 + 1641 + static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = { 1642 + .halt_reg = 0x22004, 1643 + .halt_check = BRANCH_HALT_VOTED, 1644 + .clkr = { 1645 + .enable_reg = 0x52000, 1646 + .enable_mask = BIT(16), 1647 + .hw.init = &(struct clk_init_data){ 1648 + .name = "gcc_qupv3_wrap1_core_2x_clk", 1649 + .ops = &clk_branch2_ops, 1650 + }, 1651 + }, 1652 + }; 1653 + 1654 + static struct clk_branch gcc_qupv3_wrap1_core_clk = { 1655 + .halt_reg = 0x22008, 1656 + .halt_check = BRANCH_HALT_VOTED, 1657 + .clkr = { 1658 + .enable_reg = 0x52000, 1659 + .enable_mask = BIT(17), 1660 + .hw.init = &(struct clk_init_data){ 1661 + .name = "gcc_qupv3_wrap1_core_clk", 1662 + .ops = &clk_branch2_ops, 1663 + }, 1664 + }, 1665 + }; 1666 + 1667 + static struct clk_branch gcc_qupv3_wrap1_s0_clk = { 1668 + .halt_reg = 0x22014, 1669 + .halt_check = BRANCH_HALT_VOTED, 1670 + .clkr = { 1671 + .enable_reg = 0x52000, 1672 + .enable_mask = BIT(20), 1673 + .hw.init = &(struct clk_init_data){ 1674 + .name = "gcc_qupv3_wrap1_s0_clk", 1675 + .parent_hws = (const struct clk_hw*[]){ 1676 + &gcc_qupv3_wrap1_s0_clk_src.clkr.hw, 1677 + }, 1678 + .num_parents = 1, 1679 + .flags = CLK_SET_RATE_PARENT, 1680 + .ops = &clk_branch2_ops, 1681 + }, 1682 + }, 1683 + }; 1684 + 1685 + static struct clk_branch gcc_qupv3_wrap1_s1_clk = { 1686 + .halt_reg = 0x22144, 1687 + .halt_check = BRANCH_HALT_VOTED, 1688 + .clkr = { 1689 + .enable_reg = 0x52000, 1690 + .enable_mask = BIT(21), 1691 + .hw.init = &(struct clk_init_data){ 1692 + .name = "gcc_qupv3_wrap1_s1_clk", 1693 + .parent_hws = (const struct clk_hw*[]){ 1694 + &gcc_qupv3_wrap1_s1_clk_src.clkr.hw, 1695 + }, 1696 + .num_parents = 1, 1697 + .flags = CLK_SET_RATE_PARENT, 1698 + .ops = &clk_branch2_ops, 1699 + }, 1700 + }, 1701 + }; 1702 + 1703 + static struct clk_branch gcc_qupv3_wrap1_s2_clk = { 1704 + .halt_reg = 0x22274, 1705 + .halt_check = BRANCH_HALT_VOTED, 1706 + .clkr = { 1707 + .enable_reg = 0x52000, 1708 + .enable_mask = BIT(22), 1709 + .hw.init = &(struct clk_init_data){ 1710 + .name = "gcc_qupv3_wrap1_s2_clk", 1711 + .parent_hws = (const struct clk_hw*[]){ 1712 + &gcc_qupv3_wrap1_s2_clk_src.clkr.hw, 1713 + }, 1714 + .num_parents = 1, 1715 + .flags = CLK_SET_RATE_PARENT, 1716 + .ops = &clk_branch2_ops, 1717 + }, 1718 + }, 1719 + }; 1720 + 1721 + static struct clk_branch gcc_qupv3_wrap1_s3_clk = { 1722 + .halt_reg = 0x223a4, 1723 + .halt_check = BRANCH_HALT_VOTED, 1724 + .clkr = { 1725 + .enable_reg = 0x52000, 1726 + .enable_mask = BIT(23), 1727 + .hw.init = &(struct clk_init_data){ 1728 + .name = "gcc_qupv3_wrap1_s3_clk", 1729 + .parent_hws = (const struct clk_hw*[]){ 1730 + &gcc_qupv3_wrap1_s3_clk_src.clkr.hw, 1731 + }, 1732 + .num_parents = 1, 1733 + .flags = CLK_SET_RATE_PARENT, 1734 + .ops = &clk_branch2_ops, 1735 + }, 1736 + }, 1737 + }; 1738 + 1739 + static struct clk_branch gcc_qupv3_wrap1_s4_clk = { 1740 + .halt_reg = 0x224d4, 1741 + .halt_check = BRANCH_HALT_VOTED, 1742 + .clkr = { 1743 + .enable_reg = 0x52000, 1744 + .enable_mask = BIT(24), 1745 + .hw.init = &(struct clk_init_data){ 1746 + .name = "gcc_qupv3_wrap1_s4_clk", 1747 + .parent_hws = (const struct clk_hw*[]){ 1748 + &gcc_qupv3_wrap1_s4_clk_src.clkr.hw, 1749 + }, 1750 + .num_parents = 1, 1751 + .flags = CLK_SET_RATE_PARENT, 1752 + .ops = &clk_branch2_ops, 1753 + }, 1754 + }, 1755 + }; 1756 + 1757 + static struct clk_branch gcc_qupv3_wrap1_s5_clk = { 1758 + .halt_reg = 0x22604, 1759 + .halt_check = BRANCH_HALT_VOTED, 1760 + .clkr = { 1761 + .enable_reg = 0x52000, 1762 + .enable_mask = BIT(25), 1763 + .hw.init = &(struct clk_init_data){ 1764 + .name = "gcc_qupv3_wrap1_s5_clk", 1765 + .parent_hws = (const struct clk_hw*[]){ 1766 + &gcc_qupv3_wrap1_s5_clk_src.clkr.hw, 1767 + }, 1768 + .num_parents = 1, 1769 + .flags = CLK_SET_RATE_PARENT, 1770 + .ops = &clk_branch2_ops, 1771 + }, 1772 + }, 1773 + }; 1774 + 1775 + static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = { 1776 + .halt_reg = 0x21004, 1777 + .halt_check = BRANCH_HALT_VOTED, 1778 + .hwcg_reg = 0x21004, 1779 + .hwcg_bit = 1, 1780 + .clkr = { 1781 + .enable_reg = 0x52000, 1782 + .enable_mask = BIT(6), 1783 + .hw.init = &(struct clk_init_data){ 1784 + .name = "gcc_qupv3_wrap_0_m_ahb_clk", 1785 + .ops = &clk_branch2_ops, 1786 + }, 1787 + }, 1788 + }; 1789 + 1790 + static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = { 1791 + .halt_reg = 0x21008, 1792 + .halt_check = BRANCH_HALT_VOTED, 1793 + .hwcg_reg = 0x21008, 1794 + .hwcg_bit = 1, 1795 + .clkr = { 1796 + .enable_reg = 0x52000, 1797 + .enable_mask = BIT(7), 1798 + .hw.init = &(struct clk_init_data){ 1799 + .name = "gcc_qupv3_wrap_0_s_ahb_clk", 1800 + .ops = &clk_branch2_ops, 1801 + }, 1802 + }, 1803 + }; 1804 + 1805 + static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = { 1806 + .halt_reg = 0x2200c, 1807 + .halt_check = BRANCH_HALT_VOTED, 1808 + .hwcg_reg = 0x2200c, 1809 + .hwcg_bit = 1, 1810 + .clkr = { 1811 + .enable_reg = 0x52000, 1812 + .enable_mask = BIT(18), 1813 + .hw.init = &(struct clk_init_data){ 1814 + .name = "gcc_qupv3_wrap_1_m_ahb_clk", 1815 + .ops = &clk_branch2_ops, 1816 + }, 1817 + }, 1818 + }; 1819 + 1820 + static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = { 1821 + .halt_reg = 0x22010, 1822 + .halt_check = BRANCH_HALT_VOTED, 1823 + .hwcg_reg = 0x22010, 1824 + .hwcg_bit = 1, 1825 + .clkr = { 1826 + .enable_reg = 0x52000, 1827 + .enable_mask = BIT(19), 1828 + .hw.init = &(struct clk_init_data){ 1829 + .name = "gcc_qupv3_wrap_1_s_ahb_clk", 1830 + .ops = &clk_branch2_ops, 1831 + }, 1832 + }, 1833 + }; 1834 + 1835 + static struct clk_branch gcc_sdcc1_ahb_clk = { 1836 + .halt_reg = 0x4b004, 1837 + .halt_check = BRANCH_HALT, 1838 + .clkr = { 1839 + .enable_reg = 0x4b004, 1840 + .enable_mask = BIT(0), 1841 + .hw.init = &(struct clk_init_data){ 1842 + .name = "gcc_sdcc1_ahb_clk", 1843 + .ops = &clk_branch2_ops, 1844 + }, 1845 + }, 1846 + }; 1847 + 1848 + static struct clk_branch gcc_sdcc1_apps_clk = { 1849 + .halt_reg = 0x4b008, 1850 + .halt_check = BRANCH_HALT, 1851 + .clkr = { 1852 + .enable_reg = 0x4b008, 1853 + .enable_mask = BIT(0), 1854 + .hw.init = &(struct clk_init_data){ 1855 + .name = "gcc_sdcc1_apps_clk", 1856 + .parent_hws = (const struct clk_hw*[]){ 1857 + &gcc_sdcc1_apps_clk_src.clkr.hw, 1858 + }, 1859 + .num_parents = 1, 1860 + .flags = CLK_SET_RATE_PARENT, 1861 + .ops = &clk_branch2_ops, 1862 + }, 1863 + }, 1864 + }; 1865 + 1866 + static struct clk_branch gcc_sdcc1_ice_core_clk = { 1867 + .halt_reg = 0x4b03c, 1868 + .halt_check = BRANCH_HALT, 1869 + .hwcg_reg = 0x4b03c, 1870 + .hwcg_bit = 1, 1871 + .clkr = { 1872 + .enable_reg = 0x4b03c, 1873 + .enable_mask = BIT(0), 1874 + .hw.init = &(struct clk_init_data){ 1875 + .name = "gcc_sdcc1_ice_core_clk", 1876 + .parent_hws = (const struct clk_hw*[]){ 1877 + &gcc_sdcc1_ice_core_clk_src.clkr.hw, 1878 + }, 1879 + .num_parents = 1, 1880 + .flags = CLK_SET_RATE_PARENT, 1881 + .ops = &clk_branch2_ops, 1882 + }, 1883 + }, 1884 + }; 1885 + 1886 + static struct clk_branch gcc_sdcc2_ahb_clk = { 1887 + .halt_reg = 0x20008, 1888 + .halt_check = BRANCH_HALT, 1889 + .clkr = { 1890 + .enable_reg = 0x20008, 1891 + .enable_mask = BIT(0), 1892 + .hw.init = &(struct clk_init_data){ 1893 + .name = "gcc_sdcc2_ahb_clk", 1894 + .ops = &clk_branch2_ops, 1895 + }, 1896 + }, 1897 + }; 1898 + 1899 + static struct clk_branch gcc_sdcc2_apps_clk = { 1900 + .halt_reg = 0x20004, 1901 + .halt_check = BRANCH_HALT, 1902 + .clkr = { 1903 + .enable_reg = 0x20004, 1904 + .enable_mask = BIT(0), 1905 + .hw.init = &(struct clk_init_data){ 1906 + .name = "gcc_sdcc2_apps_clk", 1907 + .parent_hws = (const struct clk_hw*[]){ 1908 + &gcc_sdcc2_apps_clk_src.clkr.hw, 1909 + }, 1910 + .num_parents = 1, 1911 + .flags = CLK_SET_RATE_PARENT, 1912 + .ops = &clk_branch2_ops, 1913 + }, 1914 + }, 1915 + }; 1916 + 1917 + static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = { 1918 + .halt_reg = 0x10140, 1919 + .halt_check = BRANCH_HALT_VOTED, 1920 + .hwcg_reg = 0x10140, 1921 + .hwcg_bit = 1, 1922 + .clkr = { 1923 + .enable_reg = 0x52000, 1924 + .enable_mask = BIT(0), 1925 + .hw.init = &(struct clk_init_data){ 1926 + .name = "gcc_sys_noc_cpuss_ahb_clk", 1927 + .parent_hws = (const struct clk_hw*[]){ 1928 + &gcc_cpuss_ahb_clk_src.clkr.hw, 1929 + }, 1930 + .num_parents = 1, 1931 + .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 1932 + .ops = &clk_branch2_ops, 1933 + }, 1934 + }, 1935 + }; 1936 + 1937 + static struct clk_branch gcc_ufs_mem_clkref_clk = { 1938 + .halt_reg = 0x8c000, 1939 + .halt_check = BRANCH_HALT, 1940 + .clkr = { 1941 + .enable_reg = 0x8c000, 1942 + .enable_mask = BIT(0), 1943 + .hw.init = &(struct clk_init_data){ 1944 + .name = "gcc_ufs_mem_clkref_clk", 1945 + .ops = &clk_branch2_ops, 1946 + }, 1947 + }, 1948 + }; 1949 + 1950 + static struct clk_branch gcc_ufs_phy_ahb_clk = { 1951 + .halt_reg = 0x3a00c, 1952 + .halt_check = BRANCH_HALT, 1953 + .hwcg_reg = 0x3a00c, 1954 + .hwcg_bit = 1, 1955 + .clkr = { 1956 + .enable_reg = 0x3a00c, 1957 + .enable_mask = BIT(0), 1958 + .hw.init = &(struct clk_init_data){ 1959 + .name = "gcc_ufs_phy_ahb_clk", 1960 + .ops = &clk_branch2_ops, 1961 + }, 1962 + }, 1963 + }; 1964 + 1965 + static struct clk_branch gcc_ufs_phy_axi_clk = { 1966 + .halt_reg = 0x3a034, 1967 + .halt_check = BRANCH_HALT, 1968 + .hwcg_reg = 0x3a034, 1969 + .hwcg_bit = 1, 1970 + .clkr = { 1971 + .enable_reg = 0x3a034, 1972 + .enable_mask = BIT(0), 1973 + .hw.init = &(struct clk_init_data){ 1974 + .name = "gcc_ufs_phy_axi_clk", 1975 + .parent_hws = (const struct clk_hw*[]){ 1976 + &gcc_ufs_phy_axi_clk_src.clkr.hw, 1977 + }, 1978 + .num_parents = 1, 1979 + .flags = CLK_SET_RATE_PARENT, 1980 + .ops = &clk_branch2_ops, 1981 + }, 1982 + }, 1983 + }; 1984 + 1985 + static struct clk_branch gcc_ufs_phy_ice_core_clk = { 1986 + .halt_reg = 0x3a0a4, 1987 + .halt_check = BRANCH_HALT, 1988 + .hwcg_reg = 0x3a0a4, 1989 + .hwcg_bit = 1, 1990 + .clkr = { 1991 + .enable_reg = 0x3a0a4, 1992 + .enable_mask = BIT(0), 1993 + .hw.init = &(struct clk_init_data){ 1994 + .name = "gcc_ufs_phy_ice_core_clk", 1995 + .parent_hws = (const struct clk_hw*[]){ 1996 + &gcc_ufs_phy_ice_core_clk_src.clkr.hw, 1997 + }, 1998 + .num_parents = 1, 1999 + .flags = CLK_SET_RATE_PARENT, 2000 + .ops = &clk_branch2_ops, 2001 + }, 2002 + }, 2003 + }; 2004 + 2005 + static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = { 2006 + .halt_reg = 0x3a0a4, 2007 + .halt_check = BRANCH_HALT, 2008 + .hwcg_reg = 0x3a0a4, 2009 + .hwcg_bit = 1, 2010 + .clkr = { 2011 + .enable_reg = 0x3a0a4, 2012 + .enable_mask = BIT(1), 2013 + .hw.init = &(struct clk_init_data){ 2014 + .name = "gcc_ufs_phy_ice_core_hw_ctl_clk", 2015 + .parent_hws = (const struct clk_hw*[]){ 2016 + &gcc_ufs_phy_ice_core_clk_src.clkr.hw, 2017 + }, 2018 + .num_parents = 1, 2019 + .flags = CLK_SET_RATE_PARENT, 2020 + .ops = &clk_branch2_ops, 2021 + }, 2022 + }, 2023 + }; 2024 + 2025 + static struct clk_branch gcc_ufs_phy_phy_aux_clk = { 2026 + .halt_reg = 0x3a0ac, 2027 + .halt_check = BRANCH_HALT, 2028 + .hwcg_reg = 0x3a0ac, 2029 + .hwcg_bit = 1, 2030 + .clkr = { 2031 + .enable_reg = 0x3a0ac, 2032 + .enable_mask = BIT(0), 2033 + .hw.init = &(struct clk_init_data){ 2034 + .name = "gcc_ufs_phy_phy_aux_clk", 2035 + .parent_hws = (const struct clk_hw*[]){ 2036 + &gcc_ufs_phy_phy_aux_clk_src.clkr.hw, 2037 + }, 2038 + .num_parents = 1, 2039 + .flags = CLK_SET_RATE_PARENT, 2040 + .ops = &clk_branch2_ops, 2041 + }, 2042 + }, 2043 + }; 2044 + 2045 + static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = { 2046 + .halt_reg = 0x3a0ac, 2047 + .halt_check = BRANCH_HALT, 2048 + .hwcg_reg = 0x3a0ac, 2049 + .hwcg_bit = 1, 2050 + .clkr = { 2051 + .enable_reg = 0x3a0ac, 2052 + .enable_mask = BIT(1), 2053 + .hw.init = &(struct clk_init_data){ 2054 + .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk", 2055 + .parent_hws = (const struct clk_hw*[]){ 2056 + &gcc_ufs_phy_phy_aux_clk_src.clkr.hw, 2057 + }, 2058 + .num_parents = 1, 2059 + .flags = CLK_SET_RATE_PARENT, 2060 + .ops = &clk_branch2_ops, 2061 + }, 2062 + }, 2063 + }; 2064 + 2065 + static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = { 2066 + .halt_reg = 0x3a014, 2067 + .halt_check = BRANCH_HALT_SKIP, 2068 + .clkr = { 2069 + .enable_reg = 0x3a014, 2070 + .enable_mask = BIT(0), 2071 + .hw.init = &(struct clk_init_data){ 2072 + .name = "gcc_ufs_phy_rx_symbol_0_clk", 2073 + .ops = &clk_branch2_ops, 2074 + }, 2075 + }, 2076 + }; 2077 + 2078 + static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = { 2079 + .halt_reg = 0x3a018, 2080 + .halt_check = BRANCH_HALT_SKIP, 2081 + .clkr = { 2082 + .enable_reg = 0x3a018, 2083 + .enable_mask = BIT(0), 2084 + .hw.init = &(struct clk_init_data){ 2085 + .name = "gcc_ufs_phy_rx_symbol_1_clk", 2086 + .ops = &clk_branch2_ops, 2087 + }, 2088 + }, 2089 + }; 2090 + 2091 + static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = { 2092 + .halt_reg = 0x3a010, 2093 + .halt_check = BRANCH_HALT_SKIP, 2094 + .clkr = { 2095 + .enable_reg = 0x3a010, 2096 + .enable_mask = BIT(0), 2097 + .hw.init = &(struct clk_init_data){ 2098 + .name = "gcc_ufs_phy_tx_symbol_0_clk", 2099 + .ops = &clk_branch2_ops, 2100 + }, 2101 + }, 2102 + }; 2103 + 2104 + static struct clk_branch gcc_ufs_phy_unipro_core_clk = { 2105 + .halt_reg = 0x3a09c, 2106 + .halt_check = BRANCH_HALT, 2107 + .hwcg_reg = 0x3a09c, 2108 + .hwcg_bit = 1, 2109 + .clkr = { 2110 + .enable_reg = 0x3a09c, 2111 + .enable_mask = BIT(0), 2112 + .hw.init = &(struct clk_init_data){ 2113 + .name = "gcc_ufs_phy_unipro_core_clk", 2114 + .parent_hws = (const struct clk_hw*[]){ 2115 + &gcc_ufs_phy_unipro_core_clk_src.clkr.hw, 2116 + }, 2117 + .num_parents = 1, 2118 + .flags = CLK_SET_RATE_PARENT, 2119 + .ops = &clk_branch2_ops, 2120 + }, 2121 + }, 2122 + }; 2123 + 2124 + static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = { 2125 + .halt_reg = 0x3a09c, 2126 + .halt_check = BRANCH_HALT, 2127 + .hwcg_reg = 0x3a09c, 2128 + .hwcg_bit = 1, 2129 + .clkr = { 2130 + .enable_reg = 0x3a09c, 2131 + .enable_mask = BIT(1), 2132 + .hw.init = &(struct clk_init_data){ 2133 + .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk", 2134 + .parent_hws = (const struct clk_hw*[]){ 2135 + &gcc_ufs_phy_unipro_core_clk_src.clkr.hw, 2136 + }, 2137 + .num_parents = 1, 2138 + .flags = CLK_SET_RATE_PARENT, 2139 + .ops = &clk_branch2_ops, 2140 + }, 2141 + }, 2142 + }; 2143 + 2144 + static struct clk_branch gcc_usb30_prim_master_clk = { 2145 + .halt_reg = 0x1a00c, 2146 + .halt_check = BRANCH_HALT, 2147 + .clkr = { 2148 + .enable_reg = 0x1a00c, 2149 + .enable_mask = BIT(0), 2150 + .hw.init = &(struct clk_init_data){ 2151 + .name = "gcc_usb30_prim_master_clk", 2152 + .parent_hws = (const struct clk_hw*[]){ 2153 + &gcc_usb30_prim_master_clk_src.clkr.hw, 2154 + }, 2155 + .num_parents = 1, 2156 + .flags = CLK_SET_RATE_PARENT, 2157 + .ops = &clk_branch2_ops, 2158 + }, 2159 + }, 2160 + }; 2161 + 2162 + static struct clk_branch gcc_usb30_prim_mock_utmi_clk = { 2163 + .halt_reg = 0x1a018, 2164 + .halt_check = BRANCH_HALT, 2165 + .clkr = { 2166 + .enable_reg = 0x1a018, 2167 + .enable_mask = BIT(0), 2168 + .hw.init = &(struct clk_init_data){ 2169 + .name = "gcc_usb30_prim_mock_utmi_clk", 2170 + .parent_hws = (const struct clk_hw*[]){ 2171 + &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw, 2172 + }, 2173 + .num_parents = 1, 2174 + .flags = CLK_SET_RATE_PARENT, 2175 + .ops = &clk_branch2_ops, 2176 + }, 2177 + }, 2178 + }; 2179 + 2180 + static struct clk_branch gcc_usb30_prim_sleep_clk = { 2181 + .halt_reg = 0x1a014, 2182 + .halt_check = BRANCH_HALT, 2183 + .clkr = { 2184 + .enable_reg = 0x1a014, 2185 + .enable_mask = BIT(0), 2186 + .hw.init = &(struct clk_init_data){ 2187 + .name = "gcc_usb30_prim_sleep_clk", 2188 + .ops = &clk_branch2_ops, 2189 + }, 2190 + }, 2191 + }; 2192 + 2193 + static struct clk_branch gcc_usb3_prim_clkref_clk = { 2194 + .halt_reg = 0x8c010, 2195 + .halt_check = BRANCH_HALT, 2196 + .clkr = { 2197 + .enable_reg = 0x8c010, 2198 + .enable_mask = BIT(0), 2199 + .hw.init = &(struct clk_init_data){ 2200 + .name = "gcc_usb3_prim_clkref_clk", 2201 + .ops = &clk_branch2_ops, 2202 + }, 2203 + }, 2204 + }; 2205 + 2206 + static struct clk_branch gcc_usb3_prim_phy_aux_clk = { 2207 + .halt_reg = 0x1a050, 2208 + .halt_check = BRANCH_HALT, 2209 + .clkr = { 2210 + .enable_reg = 0x1a050, 2211 + .enable_mask = BIT(0), 2212 + .hw.init = &(struct clk_init_data){ 2213 + .name = "gcc_usb3_prim_phy_aux_clk", 2214 + .parent_hws = (const struct clk_hw*[]){ 2215 + &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 2216 + }, 2217 + .num_parents = 1, 2218 + .flags = CLK_SET_RATE_PARENT, 2219 + .ops = &clk_branch2_ops, 2220 + }, 2221 + }, 2222 + }; 2223 + 2224 + static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = { 2225 + .halt_reg = 0x1a054, 2226 + .halt_check = BRANCH_HALT, 2227 + .clkr = { 2228 + .enable_reg = 0x1a054, 2229 + .enable_mask = BIT(0), 2230 + .hw.init = &(struct clk_init_data){ 2231 + .name = "gcc_usb3_prim_phy_com_aux_clk", 2232 + .parent_hws = (const struct clk_hw*[]){ 2233 + &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 2234 + }, 2235 + .num_parents = 1, 2236 + .flags = CLK_SET_RATE_PARENT, 2237 + .ops = &clk_branch2_ops, 2238 + }, 2239 + }, 2240 + }; 2241 + 2242 + static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 2243 + .halt_reg = 0x1a058, 2244 + .halt_check = BRANCH_HALT_SKIP, 2245 + .hwcg_reg = 0x1a058, 2246 + .hwcg_bit = 1, 2247 + .clkr = { 2248 + .enable_reg = 0x1a058, 2249 + .enable_mask = BIT(0), 2250 + .hw.init = &(struct clk_init_data){ 2251 + .name = "gcc_usb3_prim_phy_pipe_clk", 2252 + .ops = &clk_branch2_ops, 2253 + }, 2254 + }, 2255 + }; 2256 + 2257 + static struct clk_branch gcc_video_ahb_clk = { 2258 + .halt_reg = 0x17004, 2259 + .halt_check = BRANCH_HALT, 2260 + .hwcg_reg = 0x17004, 2261 + .hwcg_bit = 1, 2262 + .clkr = { 2263 + .enable_reg = 0x17004, 2264 + .enable_mask = BIT(0), 2265 + .hw.init = &(struct clk_init_data){ 2266 + .name = "gcc_video_ahb_clk", 2267 + .flags = CLK_IS_CRITICAL, 2268 + .ops = &clk_branch2_ops, 2269 + }, 2270 + }, 2271 + }; 2272 + 2273 + static struct clk_branch gcc_video_axi_clk = { 2274 + .halt_reg = 0x17014, 2275 + .halt_check = BRANCH_HALT, 2276 + .hwcg_reg = 0x17014, 2277 + .hwcg_bit = 1, 2278 + .clkr = { 2279 + .enable_reg = 0x17014, 2280 + .enable_mask = BIT(0), 2281 + .hw.init = &(struct clk_init_data){ 2282 + .name = "gcc_video_axi_clk", 2283 + .ops = &clk_branch2_ops, 2284 + }, 2285 + }, 2286 + }; 2287 + 2288 + static struct clk_branch gcc_video_throttle_axi_clk = { 2289 + .halt_reg = 0x17020, 2290 + .halt_check = BRANCH_HALT, 2291 + .hwcg_reg = 0x17020, 2292 + .hwcg_bit = 1, 2293 + .clkr = { 2294 + .enable_reg = 0x17020, 2295 + .enable_mask = BIT(0), 2296 + .hw.init = &(struct clk_init_data){ 2297 + .name = "gcc_video_throttle_axi_clk", 2298 + .ops = &clk_branch2_ops, 2299 + }, 2300 + }, 2301 + }; 2302 + 2303 + static struct clk_branch gcc_video_xo_clk = { 2304 + .halt_reg = 0x1702c, 2305 + .halt_check = BRANCH_HALT, 2306 + .clkr = { 2307 + .enable_reg = 0x1702c, 2308 + .enable_mask = BIT(0), 2309 + .hw.init = &(struct clk_init_data){ 2310 + .name = "gcc_video_xo_clk", 2311 + .flags = CLK_IS_CRITICAL, 2312 + .ops = &clk_branch2_ops, 2313 + }, 2314 + }, 2315 + }; 2316 + 2317 + static struct gdsc usb30_prim_gdsc = { 2318 + .gdscr = 0x1a004, 2319 + .pd = { 2320 + .name = "usb30_prim_gdsc", 2321 + }, 2322 + .pwrsts = PWRSTS_OFF_ON, 2323 + }; 2324 + 2325 + static struct gdsc ufs_phy_gdsc = { 2326 + .gdscr = 0x3a004, 2327 + .pd = { 2328 + .name = "ufs_phy_gdsc", 2329 + }, 2330 + .pwrsts = PWRSTS_OFF_ON, 2331 + }; 2332 + 2333 + static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = { 2334 + .gdscr = 0xb7040, 2335 + .pd = { 2336 + .name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc", 2337 + }, 2338 + .pwrsts = PWRSTS_OFF_ON, 2339 + .flags = VOTABLE, 2340 + }; 2341 + 2342 + static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = { 2343 + .gdscr = 0xb7044, 2344 + .pd = { 2345 + .name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc", 2346 + }, 2347 + .pwrsts = PWRSTS_OFF_ON, 2348 + .flags = VOTABLE, 2349 + }; 2350 + 2351 + static struct clk_regmap *gcc_sm6350_clocks[] = { 2352 + [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr, 2353 + [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr, 2354 + [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 2355 + [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr, 2356 + [GCC_CAMERA_AXI_CLK] = &gcc_camera_axi_clk.clkr, 2357 + [GCC_CAMERA_THROTTLE_NRT_AXI_CLK] = 2358 + &gcc_camera_throttle_nrt_axi_clk.clkr, 2359 + [GCC_CAMERA_THROTTLE_RT_AXI_CLK] = &gcc_camera_throttle_rt_axi_clk.clkr, 2360 + [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr, 2361 + [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr, 2362 + [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr, 2363 + [GCC_CE1_CLK] = &gcc_ce1_clk.clkr, 2364 + [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, 2365 + [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr, 2366 + [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr, 2367 + [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr, 2368 + [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr, 2369 + [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr, 2370 + [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr, 2371 + [GCC_DISP_AXI_CLK] = &gcc_disp_axi_clk.clkr, 2372 + [GCC_DISP_CC_SLEEP_CLK] = &gcc_disp_cc_sleep_clk.clkr, 2373 + [GCC_DISP_CC_XO_CLK] = &gcc_disp_cc_xo_clk.clkr, 2374 + [GCC_DISP_GPLL0_CLK] = &gcc_disp_gpll0_clk.clkr, 2375 + [GCC_DISP_THROTTLE_AXI_CLK] = &gcc_disp_throttle_axi_clk.clkr, 2376 + [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr, 2377 + [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 2378 + [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr, 2379 + [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 2380 + [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr, 2381 + [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 2382 + [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr, 2383 + [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr, 2384 + [GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr, 2385 + [GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr, 2386 + [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr, 2387 + [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr, 2388 + [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr, 2389 + [GCC_NPU_BWMON_AXI_CLK] = &gcc_npu_bwmon_axi_clk.clkr, 2390 + [GCC_NPU_BWMON_DMA_CFG_AHB_CLK] = &gcc_npu_bwmon_dma_cfg_ahb_clk.clkr, 2391 + [GCC_NPU_BWMON_DSP_CFG_AHB_CLK] = &gcc_npu_bwmon_dsp_cfg_ahb_clk.clkr, 2392 + [GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr, 2393 + [GCC_NPU_DMA_CLK] = &gcc_npu_dma_clk.clkr, 2394 + [GCC_NPU_GPLL0_CLK] = &gcc_npu_gpll0_clk.clkr, 2395 + [GCC_NPU_GPLL0_DIV_CLK] = &gcc_npu_gpll0_div_clk.clkr, 2396 + [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 2397 + [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr, 2398 + [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 2399 + [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr, 2400 + [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 2401 + [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr, 2402 + [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr, 2403 + [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr, 2404 + [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr, 2405 + [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr, 2406 + [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr, 2407 + [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr, 2408 + [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr, 2409 + [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr, 2410 + [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr, 2411 + [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr, 2412 + [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr, 2413 + [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr, 2414 + [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr, 2415 + [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr, 2416 + [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr, 2417 + [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr, 2418 + [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr, 2419 + [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr, 2420 + [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr, 2421 + [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr, 2422 + [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr, 2423 + [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr, 2424 + [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr, 2425 + [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr, 2426 + [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr, 2427 + [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr, 2428 + [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr, 2429 + [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr, 2430 + [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr, 2431 + [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr, 2432 + [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr, 2433 + [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 2434 + [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 2435 + [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr, 2436 + [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr, 2437 + [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr, 2438 + [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 2439 + [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 2440 + [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr, 2441 + [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr, 2442 + [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr, 2443 + [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr, 2444 + [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr, 2445 + [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr, 2446 + [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr, 2447 + [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr, 2448 + [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr, 2449 + [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr, 2450 + [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr, 2451 + [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr, 2452 + [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr, 2453 + [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr, 2454 + [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = 2455 + &gcc_ufs_phy_unipro_core_clk_src.clkr, 2456 + [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr, 2457 + [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr, 2458 + [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr, 2459 + [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = 2460 + &gcc_usb30_prim_mock_utmi_clk_src.clkr, 2461 + [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr, 2462 + [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr, 2463 + [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr, 2464 + [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr, 2465 + [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr, 2466 + [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr, 2467 + [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr, 2468 + [GCC_VIDEO_AXI_CLK] = &gcc_video_axi_clk.clkr, 2469 + [GCC_VIDEO_THROTTLE_AXI_CLK] = &gcc_video_throttle_axi_clk.clkr, 2470 + [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr, 2471 + [GPLL0] = &gpll0.clkr, 2472 + [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr, 2473 + [GPLL0_OUT_ODD] = &gpll0_out_odd.clkr, 2474 + [GPLL6] = &gpll6.clkr, 2475 + [GPLL6_OUT_EVEN] = &gpll6_out_even.clkr, 2476 + [GPLL7] = &gpll7.clkr, 2477 + [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr, 2478 + [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr, 2479 + [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = 2480 + &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr, 2481 + [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = 2482 + &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr, 2483 + [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = 2484 + &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr, 2485 + [GCC_GPU_GPLL0_MAIN_DIV_CLK_SRC] = &gcc_gpu_gpll0_main_div_clk_src.clkr, 2486 + [GCC_NPU_PLL0_MAIN_DIV_CLK_SRC] = &gcc_npu_pll0_main_div_clk_src.clkr, 2487 + }; 2488 + 2489 + static struct gdsc *gcc_sm6350_gdscs[] = { 2490 + [USB30_PRIM_GDSC] = &usb30_prim_gdsc, 2491 + [UFS_PHY_GDSC] = &ufs_phy_gdsc, 2492 + [HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc, 2493 + [HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc, 2494 + }; 2495 + 2496 + static const struct qcom_reset_map gcc_sm6350_resets[] = { 2497 + [GCC_QUSB2PHY_PRIM_BCR] = { 0x1d000 }, 2498 + [GCC_QUSB2PHY_SEC_BCR] = { 0x1e000 }, 2499 + [GCC_SDCC1_BCR] = { 0x4b000 }, 2500 + [GCC_SDCC2_BCR] = { 0x20000 }, 2501 + [GCC_UFS_PHY_BCR] = { 0x3a000 }, 2502 + [GCC_USB30_PRIM_BCR] = { 0x1a000 }, 2503 + [GCC_USB3_PHY_PRIM_BCR] = { 0x1c000 }, 2504 + [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x1c008 }, 2505 + }; 2506 + 2507 + static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = { 2508 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src), 2509 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src), 2510 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src), 2511 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src), 2512 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src), 2513 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src), 2514 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src), 2515 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src), 2516 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src), 2517 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src), 2518 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src), 2519 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src), 2520 + }; 2521 + 2522 + static const struct regmap_config gcc_sm6350_regmap_config = { 2523 + .reg_bits = 32, 2524 + .reg_stride = 4, 2525 + .val_bits = 32, 2526 + .max_register = 0xbf030, 2527 + .fast_io = true, 2528 + }; 2529 + 2530 + static const struct qcom_cc_desc gcc_sm6350_desc = { 2531 + .config = &gcc_sm6350_regmap_config, 2532 + .clks = gcc_sm6350_clocks, 2533 + .num_clks = ARRAY_SIZE(gcc_sm6350_clocks), 2534 + .resets = gcc_sm6350_resets, 2535 + .num_resets = ARRAY_SIZE(gcc_sm6350_resets), 2536 + .gdscs = gcc_sm6350_gdscs, 2537 + .num_gdscs = ARRAY_SIZE(gcc_sm6350_gdscs), 2538 + }; 2539 + 2540 + static const struct of_device_id gcc_sm6350_match_table[] = { 2541 + { .compatible = "qcom,gcc-sm6350" }, 2542 + { } 2543 + }; 2544 + MODULE_DEVICE_TABLE(of, gcc_sm6350_match_table); 2545 + 2546 + static int gcc_sm6350_probe(struct platform_device *pdev) 2547 + { 2548 + struct regmap *regmap; 2549 + int ret; 2550 + 2551 + regmap = qcom_cc_map(pdev, &gcc_sm6350_desc); 2552 + if (IS_ERR(regmap)) 2553 + return PTR_ERR(regmap); 2554 + 2555 + /* Disable the GPLL0 active input to NPU and GPU via MISC registers */ 2556 + regmap_update_bits(regmap, 0x4cf00, 0x3, 0x3); 2557 + regmap_update_bits(regmap, 0x45f00, 0x3, 0x3); 2558 + 2559 + ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, 2560 + ARRAY_SIZE(gcc_dfs_clocks)); 2561 + if (ret) 2562 + return ret; 2563 + 2564 + return qcom_cc_really_probe(pdev, &gcc_sm6350_desc, regmap);; 2565 + } 2566 + 2567 + static struct platform_driver gcc_sm6350_driver = { 2568 + .probe = gcc_sm6350_probe, 2569 + .driver = { 2570 + .name = "gcc-sm6350", 2571 + .of_match_table = gcc_sm6350_match_table, 2572 + }, 2573 + }; 2574 + 2575 + static int __init gcc_sm6350_init(void) 2576 + { 2577 + return platform_driver_register(&gcc_sm6350_driver); 2578 + } 2579 + core_initcall(gcc_sm6350_init); 2580 + 2581 + static void __exit gcc_sm6350_exit(void) 2582 + { 2583 + platform_driver_unregister(&gcc_sm6350_driver); 2584 + } 2585 + module_exit(gcc_sm6350_exit); 2586 + 2587 + MODULE_DESCRIPTION("QTI GCC SM6350 Driver"); 2588 + MODULE_LICENSE("GPL v2");
+491
drivers/clk/qcom/gpucc-sc7280.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * Copyright (c) 2021, The Linux Foundation. All rights reserved. 4 + */ 5 + 6 + #include <linux/clk-provider.h> 7 + #include <linux/module.h> 8 + #include <linux/platform_device.h> 9 + #include <linux/regmap.h> 10 + 11 + #include <dt-bindings/clock/qcom,gpucc-sc7280.h> 12 + 13 + #include "clk-alpha-pll.h" 14 + #include "clk-branch.h" 15 + #include "clk-rcg.h" 16 + #include "clk-regmap-divider.h" 17 + #include "common.h" 18 + #include "reset.h" 19 + #include "gdsc.h" 20 + 21 + enum { 22 + P_BI_TCXO, 23 + P_GCC_GPU_GPLL0_CLK_SRC, 24 + P_GCC_GPU_GPLL0_DIV_CLK_SRC, 25 + P_GPU_CC_PLL0_OUT_MAIN, 26 + P_GPU_CC_PLL1_OUT_MAIN, 27 + }; 28 + 29 + static const struct pll_vco lucid_vco[] = { 30 + { 249600000, 2000000000, 0 }, 31 + }; 32 + 33 + static struct clk_alpha_pll gpu_cc_pll0 = { 34 + .offset = 0x0, 35 + .vco_table = lucid_vco, 36 + .num_vco = ARRAY_SIZE(lucid_vco), 37 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 38 + .clkr = { 39 + .hw.init = &(struct clk_init_data){ 40 + .name = "gpu_cc_pll0", 41 + .parent_data = &(const struct clk_parent_data){ 42 + .fw_name = "bi_tcxo", 43 + }, 44 + .num_parents = 1, 45 + .ops = &clk_alpha_pll_lucid_ops, 46 + }, 47 + }, 48 + }; 49 + 50 + /* 500MHz Configuration */ 51 + static const struct alpha_pll_config gpu_cc_pll1_config = { 52 + .l = 0x1A, 53 + .alpha = 0xAAA, 54 + .config_ctl_val = 0x20485699, 55 + .config_ctl_hi_val = 0x00002261, 56 + .config_ctl_hi1_val = 0x329A299C, 57 + .user_ctl_val = 0x00000001, 58 + .user_ctl_hi_val = 0x00000805, 59 + .user_ctl_hi1_val = 0x00000000, 60 + }; 61 + 62 + static struct clk_alpha_pll gpu_cc_pll1 = { 63 + .offset = 0x100, 64 + .vco_table = lucid_vco, 65 + .num_vco = ARRAY_SIZE(lucid_vco), 66 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 67 + .clkr = { 68 + .hw.init = &(struct clk_init_data){ 69 + .name = "gpu_cc_pll1", 70 + .parent_data = &(const struct clk_parent_data){ 71 + .fw_name = "bi_tcxo", 72 + }, 73 + .num_parents = 1, 74 + .ops = &clk_alpha_pll_lucid_ops, 75 + }, 76 + }, 77 + }; 78 + 79 + static const struct parent_map gpu_cc_parent_map_0[] = { 80 + { P_BI_TCXO, 0 }, 81 + { P_GPU_CC_PLL0_OUT_MAIN, 1 }, 82 + { P_GPU_CC_PLL1_OUT_MAIN, 3 }, 83 + { P_GCC_GPU_GPLL0_CLK_SRC, 5 }, 84 + { P_GCC_GPU_GPLL0_DIV_CLK_SRC, 6 }, 85 + }; 86 + 87 + static const struct clk_parent_data gpu_cc_parent_data_0[] = { 88 + { .fw_name = "bi_tcxo" }, 89 + { .hw = &gpu_cc_pll0.clkr.hw }, 90 + { .hw = &gpu_cc_pll1.clkr.hw }, 91 + { .fw_name = "gcc_gpu_gpll0_clk_src" }, 92 + { .fw_name = "gcc_gpu_gpll0_div_clk_src" }, 93 + }; 94 + 95 + static const struct parent_map gpu_cc_parent_map_1[] = { 96 + { P_BI_TCXO, 0 }, 97 + { P_GPU_CC_PLL1_OUT_MAIN, 3 }, 98 + { P_GCC_GPU_GPLL0_CLK_SRC, 5 }, 99 + { P_GCC_GPU_GPLL0_DIV_CLK_SRC, 6 }, 100 + }; 101 + 102 + static const struct clk_parent_data gpu_cc_parent_data_1[] = { 103 + { .fw_name = "bi_tcxo", }, 104 + { .hw = &gpu_cc_pll1.clkr.hw }, 105 + { .fw_name = "gcc_gpu_gpll0_clk_src", }, 106 + { .fw_name = "gcc_gpu_gpll0_div_clk_src", }, 107 + }; 108 + 109 + static const struct freq_tbl ftbl_gpu_cc_gmu_clk_src[] = { 110 + F(19200000, P_BI_TCXO, 1, 0, 0), 111 + F(200000000, P_GCC_GPU_GPLL0_DIV_CLK_SRC, 1.5, 0, 0), 112 + F(500000000, P_GPU_CC_PLL1_OUT_MAIN, 1, 0, 0), 113 + { } 114 + }; 115 + 116 + static struct clk_rcg2 gpu_cc_gmu_clk_src = { 117 + .cmd_rcgr = 0x1120, 118 + .mnd_width = 0, 119 + .hid_width = 5, 120 + .parent_map = gpu_cc_parent_map_0, 121 + .freq_tbl = ftbl_gpu_cc_gmu_clk_src, 122 + .clkr.hw.init = &(struct clk_init_data){ 123 + .name = "gpu_cc_gmu_clk_src", 124 + .parent_data = gpu_cc_parent_data_0, 125 + .num_parents = ARRAY_SIZE(gpu_cc_parent_data_0), 126 + .ops = &clk_rcg2_shared_ops, 127 + }, 128 + }; 129 + 130 + static const struct freq_tbl ftbl_gpu_cc_hub_clk_src[] = { 131 + F(150000000, P_GCC_GPU_GPLL0_DIV_CLK_SRC, 2, 0, 0), 132 + F(240000000, P_GCC_GPU_GPLL0_CLK_SRC, 2.5, 0, 0), 133 + F(300000000, P_GCC_GPU_GPLL0_CLK_SRC, 2, 0, 0), 134 + { } 135 + }; 136 + 137 + static struct clk_rcg2 gpu_cc_hub_clk_src = { 138 + .cmd_rcgr = 0x117c, 139 + .mnd_width = 0, 140 + .hid_width = 5, 141 + .parent_map = gpu_cc_parent_map_1, 142 + .freq_tbl = ftbl_gpu_cc_hub_clk_src, 143 + .clkr.hw.init = &(struct clk_init_data){ 144 + .name = "gpu_cc_hub_clk_src", 145 + .parent_data = gpu_cc_parent_data_1, 146 + .num_parents = ARRAY_SIZE(gpu_cc_parent_data_1), 147 + .ops = &clk_rcg2_shared_ops, 148 + }, 149 + }; 150 + 151 + static struct clk_regmap_div gpu_cc_hub_ahb_div_clk_src = { 152 + .reg = 0x11c0, 153 + .shift = 0, 154 + .width = 4, 155 + .clkr.hw.init = &(struct clk_init_data) { 156 + .name = "gpu_cc_hub_ahb_div_clk_src", 157 + .parent_hws = (const struct clk_hw*[]){ 158 + &gpu_cc_hub_clk_src.clkr.hw, 159 + }, 160 + .num_parents = 1, 161 + .flags = CLK_SET_RATE_PARENT, 162 + .ops = &clk_regmap_div_ro_ops, 163 + }, 164 + }; 165 + 166 + static struct clk_regmap_div gpu_cc_hub_cx_int_div_clk_src = { 167 + .reg = 0x11bc, 168 + .shift = 0, 169 + .width = 4, 170 + .clkr.hw.init = &(struct clk_init_data) { 171 + .name = "gpu_cc_hub_cx_int_div_clk_src", 172 + .parent_hws = (const struct clk_hw*[]){ 173 + &gpu_cc_hub_clk_src.clkr.hw, 174 + }, 175 + .num_parents = 1, 176 + .flags = CLK_SET_RATE_PARENT, 177 + .ops = &clk_regmap_div_ro_ops, 178 + }, 179 + }; 180 + 181 + static struct clk_branch gpu_cc_ahb_clk = { 182 + .halt_reg = 0x1078, 183 + .halt_check = BRANCH_HALT_DELAY, 184 + .clkr = { 185 + .enable_reg = 0x1078, 186 + .enable_mask = BIT(0), 187 + .hw.init = &(struct clk_init_data){ 188 + .name = "gpu_cc_ahb_clk", 189 + .parent_hws = (const struct clk_hw*[]){ 190 + &gpu_cc_hub_ahb_div_clk_src.clkr.hw, 191 + }, 192 + .num_parents = 1, 193 + .flags = CLK_SET_RATE_PARENT, 194 + .ops = &clk_branch2_ops, 195 + }, 196 + }, 197 + }; 198 + 199 + static struct clk_branch gpu_cc_crc_ahb_clk = { 200 + .halt_reg = 0x107c, 201 + .halt_check = BRANCH_HALT_VOTED, 202 + .clkr = { 203 + .enable_reg = 0x107c, 204 + .enable_mask = BIT(0), 205 + .hw.init = &(struct clk_init_data){ 206 + .name = "gpu_cc_crc_ahb_clk", 207 + .parent_hws = (const struct clk_hw*[]){ 208 + &gpu_cc_hub_ahb_div_clk_src.clkr.hw, 209 + }, 210 + .num_parents = 1, 211 + .flags = CLK_SET_RATE_PARENT, 212 + .ops = &clk_branch2_ops, 213 + }, 214 + }, 215 + }; 216 + 217 + static struct clk_branch gpu_cc_cx_gmu_clk = { 218 + .halt_reg = 0x1098, 219 + .halt_check = BRANCH_HALT, 220 + .clkr = { 221 + .enable_reg = 0x1098, 222 + .enable_mask = BIT(0), 223 + .hw.init = &(struct clk_init_data){ 224 + .name = "gpu_cc_cx_gmu_clk", 225 + .parent_hws = (const struct clk_hw*[]){ 226 + &gpu_cc_gmu_clk_src.clkr.hw, 227 + }, 228 + .num_parents = 1, 229 + .flags = CLK_SET_RATE_PARENT, 230 + .ops = &clk_branch2_aon_ops, 231 + }, 232 + }, 233 + }; 234 + 235 + static struct clk_branch gpu_cc_cx_snoc_dvm_clk = { 236 + .halt_reg = 0x108c, 237 + .halt_check = BRANCH_HALT_VOTED, 238 + .clkr = { 239 + .enable_reg = 0x108c, 240 + .enable_mask = BIT(0), 241 + .hw.init = &(struct clk_init_data){ 242 + .name = "gpu_cc_cx_snoc_dvm_clk", 243 + .ops = &clk_branch2_ops, 244 + }, 245 + }, 246 + }; 247 + 248 + static struct clk_branch gpu_cc_cxo_aon_clk = { 249 + .halt_reg = 0x1004, 250 + .halt_check = BRANCH_HALT_VOTED, 251 + .clkr = { 252 + .enable_reg = 0x1004, 253 + .enable_mask = BIT(0), 254 + .hw.init = &(struct clk_init_data){ 255 + .name = "gpu_cc_cxo_aon_clk", 256 + .ops = &clk_branch2_ops, 257 + }, 258 + }, 259 + }; 260 + 261 + static struct clk_branch gpu_cc_cxo_clk = { 262 + .halt_reg = 0x109c, 263 + .halt_check = BRANCH_HALT, 264 + .clkr = { 265 + .enable_reg = 0x109c, 266 + .enable_mask = BIT(0), 267 + .hw.init = &(struct clk_init_data){ 268 + .name = "gpu_cc_cxo_clk", 269 + .ops = &clk_branch2_aon_ops, 270 + }, 271 + }, 272 + }; 273 + 274 + static struct clk_branch gpu_cc_gx_gmu_clk = { 275 + .halt_reg = 0x1064, 276 + .halt_check = BRANCH_HALT, 277 + .clkr = { 278 + .enable_reg = 0x1064, 279 + .enable_mask = BIT(0), 280 + .hw.init = &(struct clk_init_data){ 281 + .name = "gpu_cc_gx_gmu_clk", 282 + .parent_hws = (const struct clk_hw*[]){ 283 + &gpu_cc_gmu_clk_src.clkr.hw, 284 + }, 285 + .num_parents = 1, 286 + .flags = CLK_SET_RATE_PARENT, 287 + .ops = &clk_branch2_ops, 288 + }, 289 + }, 290 + }; 291 + 292 + static struct clk_branch gpu_cc_hlos1_vote_gpu_smmu_clk = { 293 + .halt_reg = 0x5000, 294 + .halt_check = BRANCH_VOTED, 295 + .clkr = { 296 + .enable_reg = 0x5000, 297 + .enable_mask = BIT(0), 298 + .hw.init = &(struct clk_init_data){ 299 + .name = "gpu_cc_hlos1_vote_gpu_smmu_clk", 300 + .ops = &clk_branch2_ops, 301 + }, 302 + }, 303 + }; 304 + 305 + static struct clk_branch gpu_cc_hub_aon_clk = { 306 + .halt_reg = 0x1178, 307 + .halt_check = BRANCH_HALT, 308 + .clkr = { 309 + .enable_reg = 0x1178, 310 + .enable_mask = BIT(0), 311 + .hw.init = &(struct clk_init_data){ 312 + .name = "gpu_cc_hub_aon_clk", 313 + .parent_hws = (const struct clk_hw*[]){ 314 + &gpu_cc_hub_clk_src.clkr.hw, 315 + }, 316 + .num_parents = 1, 317 + .flags = CLK_SET_RATE_PARENT, 318 + .ops = &clk_branch2_aon_ops, 319 + }, 320 + }, 321 + }; 322 + 323 + static struct clk_branch gpu_cc_hub_cx_int_clk = { 324 + .halt_reg = 0x1204, 325 + .halt_check = BRANCH_HALT, 326 + .clkr = { 327 + .enable_reg = 0x1204, 328 + .enable_mask = BIT(0), 329 + .hw.init = &(struct clk_init_data){ 330 + .name = "gpu_cc_hub_cx_int_clk", 331 + .parent_hws = (const struct clk_hw*[]){ 332 + &gpu_cc_hub_cx_int_div_clk_src.clkr.hw, 333 + }, 334 + .num_parents = 1, 335 + .flags = CLK_SET_RATE_PARENT, 336 + .ops = &clk_branch2_aon_ops, 337 + }, 338 + }, 339 + }; 340 + 341 + static struct clk_branch gpu_cc_mnd1x_0_gfx3d_clk = { 342 + .halt_reg = 0x802c, 343 + .halt_check = BRANCH_HALT_SKIP, 344 + .clkr = { 345 + .enable_reg = 0x802c, 346 + .enable_mask = BIT(0), 347 + .hw.init = &(struct clk_init_data){ 348 + .name = "gpu_cc_mnd1x_0_gfx3d_clk", 349 + .ops = &clk_branch2_ops, 350 + }, 351 + }, 352 + }; 353 + 354 + static struct clk_branch gpu_cc_mnd1x_1_gfx3d_clk = { 355 + .halt_reg = 0x8030, 356 + .halt_check = BRANCH_HALT_SKIP, 357 + .clkr = { 358 + .enable_reg = 0x8030, 359 + .enable_mask = BIT(0), 360 + .hw.init = &(struct clk_init_data){ 361 + .name = "gpu_cc_mnd1x_1_gfx3d_clk", 362 + .ops = &clk_branch2_ops, 363 + }, 364 + }, 365 + }; 366 + 367 + static struct clk_branch gpu_cc_sleep_clk = { 368 + .halt_reg = 0x1090, 369 + .halt_check = BRANCH_HALT_VOTED, 370 + .clkr = { 371 + .enable_reg = 0x1090, 372 + .enable_mask = BIT(0), 373 + .hw.init = &(struct clk_init_data){ 374 + .name = "gpu_cc_sleep_clk", 375 + .ops = &clk_branch2_ops, 376 + }, 377 + }, 378 + }; 379 + 380 + static struct gdsc cx_gdsc = { 381 + .gdscr = 0x106c, 382 + .gds_hw_ctrl = 0x1540, 383 + .pd = { 384 + .name = "cx_gdsc", 385 + }, 386 + .pwrsts = PWRSTS_OFF_ON, 387 + .flags = VOTABLE | RETAIN_FF_ENABLE, 388 + }; 389 + 390 + static struct gdsc gx_gdsc = { 391 + .gdscr = 0x100c, 392 + .clamp_io_ctrl = 0x1508, 393 + .pd = { 394 + .name = "gx_gdsc", 395 + .power_on = gdsc_gx_do_nothing_enable, 396 + }, 397 + .pwrsts = PWRSTS_OFF_ON, 398 + .flags = CLAMP_IO | RETAIN_FF_ENABLE, 399 + }; 400 + 401 + static struct gdsc *gpu_cc_sc7180_gdscs[] = { 402 + [GPU_CC_CX_GDSC] = &cx_gdsc, 403 + [GPU_CC_GX_GDSC] = &gx_gdsc, 404 + }; 405 + 406 + static struct clk_regmap *gpu_cc_sc7280_clocks[] = { 407 + [GPU_CC_AHB_CLK] = &gpu_cc_ahb_clk.clkr, 408 + [GPU_CC_CRC_AHB_CLK] = &gpu_cc_crc_ahb_clk.clkr, 409 + [GPU_CC_CX_GMU_CLK] = &gpu_cc_cx_gmu_clk.clkr, 410 + [GPU_CC_CX_SNOC_DVM_CLK] = &gpu_cc_cx_snoc_dvm_clk.clkr, 411 + [GPU_CC_CXO_AON_CLK] = &gpu_cc_cxo_aon_clk.clkr, 412 + [GPU_CC_CXO_CLK] = &gpu_cc_cxo_clk.clkr, 413 + [GPU_CC_GMU_CLK_SRC] = &gpu_cc_gmu_clk_src.clkr, 414 + [GPU_CC_GX_GMU_CLK] = &gpu_cc_gx_gmu_clk.clkr, 415 + [GPU_CC_HLOS1_VOTE_GPU_SMMU_CLK] = &gpu_cc_hlos1_vote_gpu_smmu_clk.clkr, 416 + [GPU_CC_HUB_AHB_DIV_CLK_SRC] = &gpu_cc_hub_ahb_div_clk_src.clkr, 417 + [GPU_CC_HUB_AON_CLK] = &gpu_cc_hub_aon_clk.clkr, 418 + [GPU_CC_HUB_CLK_SRC] = &gpu_cc_hub_clk_src.clkr, 419 + [GPU_CC_HUB_CX_INT_CLK] = &gpu_cc_hub_cx_int_clk.clkr, 420 + [GPU_CC_HUB_CX_INT_DIV_CLK_SRC] = &gpu_cc_hub_cx_int_div_clk_src.clkr, 421 + [GPU_CC_MND1X_0_GFX3D_CLK] = &gpu_cc_mnd1x_0_gfx3d_clk.clkr, 422 + [GPU_CC_MND1X_1_GFX3D_CLK] = &gpu_cc_mnd1x_1_gfx3d_clk.clkr, 423 + [GPU_CC_PLL0] = &gpu_cc_pll0.clkr, 424 + [GPU_CC_PLL1] = &gpu_cc_pll1.clkr, 425 + [GPU_CC_SLEEP_CLK] = &gpu_cc_sleep_clk.clkr, 426 + }; 427 + 428 + static const struct regmap_config gpu_cc_sc7280_regmap_config = { 429 + .reg_bits = 32, 430 + .reg_stride = 4, 431 + .val_bits = 32, 432 + .max_register = 0x8030, 433 + .fast_io = true, 434 + }; 435 + 436 + static const struct qcom_cc_desc gpu_cc_sc7280_desc = { 437 + .config = &gpu_cc_sc7280_regmap_config, 438 + .clks = gpu_cc_sc7280_clocks, 439 + .num_clks = ARRAY_SIZE(gpu_cc_sc7280_clocks), 440 + .gdscs = gpu_cc_sc7180_gdscs, 441 + .num_gdscs = ARRAY_SIZE(gpu_cc_sc7180_gdscs), 442 + }; 443 + 444 + static const struct of_device_id gpu_cc_sc7280_match_table[] = { 445 + { .compatible = "qcom,sc7280-gpucc" }, 446 + { } 447 + }; 448 + MODULE_DEVICE_TABLE(of, gpu_cc_sc7280_match_table); 449 + 450 + static int gpu_cc_sc7280_probe(struct platform_device *pdev) 451 + { 452 + struct regmap *regmap; 453 + 454 + regmap = qcom_cc_map(pdev, &gpu_cc_sc7280_desc); 455 + if (IS_ERR(regmap)) 456 + return PTR_ERR(regmap); 457 + 458 + clk_lucid_pll_configure(&gpu_cc_pll1, regmap, &gpu_cc_pll1_config); 459 + 460 + /* 461 + * Keep the clocks always-ON 462 + * GPU_CC_CB_CLK, GPUCC_CX_GMU_CLK 463 + */ 464 + regmap_update_bits(regmap, 0x1170, BIT(0), BIT(0)); 465 + regmap_update_bits(regmap, 0x1098, BIT(0), BIT(0)); 466 + 467 + return qcom_cc_really_probe(pdev, &gpu_cc_sc7280_desc, regmap); 468 + } 469 + 470 + static struct platform_driver gpu_cc_sc7280_driver = { 471 + .probe = gpu_cc_sc7280_probe, 472 + .driver = { 473 + .name = "gpu_cc-sc7280", 474 + .of_match_table = gpu_cc_sc7280_match_table, 475 + }, 476 + }; 477 + 478 + static int __init gpu_cc_sc7280_init(void) 479 + { 480 + return platform_driver_register(&gpu_cc_sc7280_driver); 481 + } 482 + subsys_initcall(gpu_cc_sc7280_init); 483 + 484 + static void __exit gpu_cc_sc7280_exit(void) 485 + { 486 + platform_driver_unregister(&gpu_cc_sc7280_driver); 487 + } 488 + module_exit(gpu_cc_sc7280_exit); 489 + 490 + MODULE_DESCRIPTION("QTI GPU_CC SC7280 Driver"); 491 + MODULE_LICENSE("GPL v2");
+12
drivers/clk/qcom/gpucc-sm8150.c
··· 82 82 { } 83 83 }; 84 84 85 + static const struct freq_tbl ftbl_gpu_cc_gmu_clk_src_sc8180x[] = { 86 + F(19200000, P_BI_TCXO, 1, 0, 0), 87 + F(200000000, P_GPLL0_OUT_MAIN_DIV, 1.5, 0, 0), 88 + F(400000000, P_GPLL0_OUT_MAIN, 1.5, 0, 0), 89 + F(500000000, P_GPU_CC_PLL1_OUT_MAIN, 1, 0, 0), 90 + { } 91 + }; 92 + 85 93 static struct clk_rcg2 gpu_cc_gmu_clk_src = { 86 94 .cmd_rcgr = 0x1120, 87 95 .mnd_width = 0, ··· 285 277 }; 286 278 287 279 static const struct of_device_id gpu_cc_sm8150_match_table[] = { 280 + { .compatible = "qcom,sc8180x-gpucc" }, 288 281 { .compatible = "qcom,sm8150-gpucc" }, 289 282 { } 290 283 }; ··· 298 289 regmap = qcom_cc_map(pdev, &gpu_cc_sm8150_desc); 299 290 if (IS_ERR(regmap)) 300 291 return PTR_ERR(regmap); 292 + 293 + if (of_device_is_compatible(pdev->dev.of_node, "qcom,sc8180x-gpucc")) 294 + gpu_cc_gmu_clk_src.freq_tbl = ftbl_gpu_cc_gmu_clk_src_sc8180x; 301 295 302 296 clk_trion_pll_configure(&gpu_cc_pll1, regmap, &gpu_cc_pll1_config); 303 297
+9 -12
drivers/clk/qcom/lpass-gfm-sm8250.c
··· 251 251 if (IS_ERR(cc->base)) 252 252 return PTR_ERR(cc->base); 253 253 254 - pm_runtime_enable(dev); 255 - err = pm_clk_create(dev); 254 + err = devm_pm_runtime_enable(dev); 256 255 if (err) 257 - goto pm_clk_err; 256 + return err; 257 + 258 + err = devm_pm_clk_create(dev); 259 + if (err) 260 + return err; 258 261 259 262 err = of_pm_clk_add_clks(dev); 260 263 if (err < 0) { 261 264 dev_dbg(dev, "Failed to get lpass core voting clocks\n"); 262 - goto clk_reg_err; 265 + return err; 263 266 } 264 267 265 268 for (i = 0; i < data->onecell_data->num; i++) { ··· 276 273 277 274 err = devm_clk_hw_register(dev, &data->gfm_clks[i]->hw); 278 275 if (err) 279 - goto clk_reg_err; 276 + return err; 280 277 281 278 } 282 279 283 280 err = devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, 284 281 data->onecell_data); 285 282 if (err) 286 - goto clk_reg_err; 283 + return err; 287 284 288 285 return 0; 289 - 290 - clk_reg_err: 291 - pm_clk_destroy(dev); 292 - pm_clk_err: 293 - pm_runtime_disable(dev); 294 - return err; 295 286 } 296 287 297 288 static const struct of_device_id lpass_gfm_clk_match_table[] = {
+2 -16
drivers/clk/qcom/lpasscorecc-sc7180.c
··· 356 356 .num_gdscs = ARRAY_SIZE(lpass_audio_hm_sc7180_gdscs), 357 357 }; 358 358 359 - static void lpass_pm_runtime_disable(void *data) 360 - { 361 - pm_runtime_disable(data); 362 - } 363 - 364 - static void lpass_pm_clk_destroy(void *data) 365 - { 366 - pm_clk_destroy(data); 367 - } 368 - 369 359 static int lpass_create_pm_clks(struct platform_device *pdev) 370 360 { 371 361 int ret; 372 362 373 363 pm_runtime_use_autosuspend(&pdev->dev); 374 364 pm_runtime_set_autosuspend_delay(&pdev->dev, 500); 375 - pm_runtime_enable(&pdev->dev); 376 365 377 - ret = devm_add_action_or_reset(&pdev->dev, lpass_pm_runtime_disable, &pdev->dev); 366 + ret = devm_pm_runtime_enable(&pdev->dev); 378 367 if (ret) 379 368 return ret; 380 369 381 - ret = pm_clk_create(&pdev->dev); 382 - if (ret) 383 - return ret; 384 - ret = devm_add_action_or_reset(&pdev->dev, lpass_pm_clk_destroy, &pdev->dev); 370 + ret = devm_pm_clk_create(&pdev->dev); 385 371 if (ret) 386 372 return ret; 387 373
+2620
drivers/clk/qcom/mmcc-msm8994.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org> 4 + */ 5 + 6 + #include <linux/kernel.h> 7 + #include <linux/bitops.h> 8 + #include <linux/err.h> 9 + #include <linux/platform_device.h> 10 + #include <linux/module.h> 11 + #include <linux/of.h> 12 + #include <linux/of_device.h> 13 + #include <linux/clk-provider.h> 14 + #include <linux/regmap.h> 15 + #include <linux/reset-controller.h> 16 + #include <linux/clk.h> 17 + 18 + #include <dt-bindings/clock/qcom,mmcc-msm8994.h> 19 + 20 + #include "common.h" 21 + #include "clk-regmap.h" 22 + #include "clk-regmap-divider.h" 23 + #include "clk-alpha-pll.h" 24 + #include "clk-rcg.h" 25 + #include "clk-branch.h" 26 + #include "reset.h" 27 + #include "gdsc.h" 28 + 29 + 30 + enum { 31 + P_XO, 32 + P_GPLL0, 33 + P_MMPLL0, 34 + P_MMPLL1, 35 + P_MMPLL3, 36 + P_MMPLL4, 37 + P_MMPLL5, /* Is this one even used by anything? Downstream doesn't tell. */ 38 + P_DSI0PLL, 39 + P_DSI1PLL, 40 + P_DSI0PLL_BYTE, 41 + P_DSI1PLL_BYTE, 42 + P_HDMIPLL, 43 + }; 44 + static const struct parent_map mmcc_xo_gpll0_map[] = { 45 + { P_XO, 0 }, 46 + { P_GPLL0, 5 } 47 + }; 48 + 49 + static const struct clk_parent_data mmcc_xo_gpll0[] = { 50 + { .fw_name = "xo" }, 51 + { .fw_name = "gpll0" }, 52 + }; 53 + 54 + static const struct parent_map mmss_xo_hdmi_map[] = { 55 + { P_XO, 0 }, 56 + { P_HDMIPLL, 3 } 57 + }; 58 + 59 + static const struct clk_parent_data mmss_xo_hdmi[] = { 60 + { .fw_name = "xo" }, 61 + { .fw_name = "hdmipll" }, 62 + }; 63 + 64 + static const struct parent_map mmcc_xo_dsi0pll_dsi1pll_map[] = { 65 + { P_XO, 0 }, 66 + { P_DSI0PLL, 1 }, 67 + { P_DSI1PLL, 2 } 68 + }; 69 + 70 + static const struct clk_parent_data mmcc_xo_dsi0pll_dsi1pll[] = { 71 + { .fw_name = "xo" }, 72 + { .fw_name = "dsi0pll" }, 73 + { .fw_name = "dsi1pll" }, 74 + }; 75 + 76 + static const struct parent_map mmcc_xo_dsibyte_map[] = { 77 + { P_XO, 0 }, 78 + { P_DSI0PLL_BYTE, 1 }, 79 + { P_DSI1PLL_BYTE, 2 } 80 + }; 81 + 82 + static const struct clk_parent_data mmcc_xo_dsibyte[] = { 83 + { .fw_name = "xo" }, 84 + { .fw_name = "dsi0pllbyte" }, 85 + { .fw_name = "dsi1pllbyte" }, 86 + }; 87 + 88 + static struct pll_vco mmpll_p_vco[] = { 89 + { 250000000, 500000000, 3 }, 90 + { 500000000, 1000000000, 2 }, 91 + { 1000000000, 1500000000, 1 }, 92 + { 1500000000, 2000000000, 0 }, 93 + }; 94 + 95 + static struct pll_vco mmpll_t_vco[] = { 96 + { 500000000, 1500000000, 0 }, 97 + }; 98 + 99 + static const struct alpha_pll_config mmpll_p_config = { 100 + .post_div_mask = 0xf00, 101 + }; 102 + 103 + static struct clk_alpha_pll mmpll0_early = { 104 + .offset = 0x0, 105 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 106 + .vco_table = mmpll_p_vco, 107 + .num_vco = ARRAY_SIZE(mmpll_p_vco), 108 + .clkr = { 109 + .enable_reg = 0x100, 110 + .enable_mask = BIT(0), 111 + .hw.init = &(struct clk_init_data){ 112 + .name = "mmpll0_early", 113 + .parent_data = &(const struct clk_parent_data){ 114 + .fw_name = "xo", 115 + }, 116 + .num_parents = 1, 117 + .ops = &clk_alpha_pll_ops, 118 + }, 119 + }, 120 + }; 121 + 122 + static struct clk_alpha_pll_postdiv mmpll0 = { 123 + .offset = 0x0, 124 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 125 + .width = 4, 126 + .clkr.hw.init = &(struct clk_init_data){ 127 + .name = "mmpll0", 128 + .parent_hws = (const struct clk_hw *[]){ &mmpll0_early.clkr.hw }, 129 + .num_parents = 1, 130 + .ops = &clk_alpha_pll_postdiv_ops, 131 + .flags = CLK_SET_RATE_PARENT, 132 + }, 133 + }; 134 + 135 + static struct clk_alpha_pll mmpll1_early = { 136 + .offset = 0x30, 137 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 138 + .vco_table = mmpll_p_vco, 139 + .num_vco = ARRAY_SIZE(mmpll_p_vco), 140 + .clkr = { 141 + .enable_reg = 0x100, 142 + .enable_mask = BIT(1), 143 + .hw.init = &(struct clk_init_data){ 144 + .name = "mmpll1_early", 145 + .parent_data = &(const struct clk_parent_data){ 146 + .fw_name = "xo", 147 + }, 148 + .num_parents = 1, 149 + .ops = &clk_alpha_pll_ops, 150 + } 151 + }, 152 + }; 153 + 154 + static struct clk_alpha_pll_postdiv mmpll1 = { 155 + .offset = 0x30, 156 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 157 + .width = 4, 158 + .clkr.hw.init = &(struct clk_init_data){ 159 + .name = "mmpll1", 160 + .parent_hws = (const struct clk_hw *[]){ &mmpll1_early.clkr.hw }, 161 + .num_parents = 1, 162 + .ops = &clk_alpha_pll_postdiv_ops, 163 + .flags = CLK_SET_RATE_PARENT, 164 + }, 165 + }; 166 + 167 + static struct clk_alpha_pll mmpll3_early = { 168 + .offset = 0x60, 169 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 170 + .vco_table = mmpll_p_vco, 171 + .num_vco = ARRAY_SIZE(mmpll_p_vco), 172 + .clkr.hw.init = &(struct clk_init_data){ 173 + .name = "mmpll3_early", 174 + .parent_data = &(const struct clk_parent_data){ 175 + .fw_name = "xo", 176 + }, 177 + .num_parents = 1, 178 + .ops = &clk_alpha_pll_ops, 179 + }, 180 + }; 181 + 182 + static struct clk_alpha_pll_postdiv mmpll3 = { 183 + .offset = 0x60, 184 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 185 + .width = 4, 186 + .clkr.hw.init = &(struct clk_init_data){ 187 + .name = "mmpll3", 188 + .parent_hws = (const struct clk_hw *[]){ &mmpll3_early.clkr.hw }, 189 + .num_parents = 1, 190 + .ops = &clk_alpha_pll_postdiv_ops, 191 + .flags = CLK_SET_RATE_PARENT, 192 + }, 193 + }; 194 + 195 + static struct clk_alpha_pll mmpll4_early = { 196 + .offset = 0x90, 197 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 198 + .vco_table = mmpll_t_vco, 199 + .num_vco = ARRAY_SIZE(mmpll_t_vco), 200 + .clkr.hw.init = &(struct clk_init_data){ 201 + .name = "mmpll4_early", 202 + .parent_data = &(const struct clk_parent_data){ 203 + .fw_name = "xo", 204 + }, 205 + .num_parents = 1, 206 + .ops = &clk_alpha_pll_ops, 207 + }, 208 + }; 209 + 210 + static struct clk_alpha_pll_postdiv mmpll4 = { 211 + .offset = 0x90, 212 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 213 + .width = 2, 214 + .clkr.hw.init = &(struct clk_init_data){ 215 + .name = "mmpll4", 216 + .parent_hws = (const struct clk_hw *[]){ &mmpll4_early.clkr.hw }, 217 + .num_parents = 1, 218 + .ops = &clk_alpha_pll_postdiv_ops, 219 + .flags = CLK_SET_RATE_PARENT, 220 + }, 221 + }; 222 + 223 + static const struct parent_map mmcc_xo_gpll0_mmpll1_map[] = { 224 + { P_XO, 0 }, 225 + { P_GPLL0, 5 }, 226 + { P_MMPLL1, 2 } 227 + }; 228 + 229 + static const struct clk_parent_data mmcc_xo_gpll0_mmpll1[] = { 230 + { .fw_name = "xo" }, 231 + { .fw_name = "gpll0" }, 232 + { .hw = &mmpll1.clkr.hw }, 233 + }; 234 + 235 + static const struct parent_map mmcc_xo_gpll0_mmpll0_map[] = { 236 + { P_XO, 0 }, 237 + { P_GPLL0, 5 }, 238 + { P_MMPLL0, 1 } 239 + }; 240 + 241 + static const struct clk_parent_data mmcc_xo_gpll0_mmpll0[] = { 242 + { .fw_name = "xo" }, 243 + { .fw_name = "gpll0" }, 244 + { .hw = &mmpll0.clkr.hw }, 245 + }; 246 + 247 + static const struct parent_map mmcc_xo_gpll0_mmpll0_mmpll3_map[] = { 248 + { P_XO, 0 }, 249 + { P_GPLL0, 5 }, 250 + { P_MMPLL0, 1 }, 251 + { P_MMPLL3, 3 } 252 + }; 253 + 254 + static const struct clk_parent_data mmcc_xo_gpll0_mmpll0_mmpll3[] = { 255 + { .fw_name = "xo" }, 256 + { .fw_name = "gpll0" }, 257 + { .hw = &mmpll0.clkr.hw }, 258 + { .hw = &mmpll3.clkr.hw }, 259 + }; 260 + 261 + static const struct parent_map mmcc_xo_gpll0_mmpll0_mmpll4_map[] = { 262 + { P_XO, 0 }, 263 + { P_GPLL0, 5 }, 264 + { P_MMPLL0, 1 }, 265 + { P_MMPLL4, 3 } 266 + }; 267 + 268 + static const struct clk_parent_data mmcc_xo_gpll0_mmpll0_mmpll4[] = { 269 + { .fw_name = "xo" }, 270 + { .fw_name = "gpll0" }, 271 + { .hw = &mmpll0.clkr.hw }, 272 + { .hw = &mmpll4.clkr.hw }, 273 + }; 274 + 275 + static struct clk_alpha_pll mmpll5_early = { 276 + .offset = 0xc0, 277 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 278 + .vco_table = mmpll_p_vco, 279 + .num_vco = ARRAY_SIZE(mmpll_p_vco), 280 + .clkr.hw.init = &(struct clk_init_data){ 281 + .name = "mmpll5_early", 282 + .parent_data = &(const struct clk_parent_data){ 283 + .fw_name = "xo", 284 + }, 285 + .num_parents = 1, 286 + .ops = &clk_alpha_pll_ops, 287 + }, 288 + }; 289 + 290 + static struct clk_alpha_pll_postdiv mmpll5 = { 291 + .offset = 0xc0, 292 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 293 + .width = 4, 294 + .clkr.hw.init = &(struct clk_init_data){ 295 + .name = "mmpll5", 296 + .parent_hws = (const struct clk_hw *[]){ &mmpll5_early.clkr.hw }, 297 + .num_parents = 1, 298 + .ops = &clk_alpha_pll_postdiv_ops, 299 + .flags = CLK_SET_RATE_PARENT, 300 + }, 301 + }; 302 + 303 + static const struct freq_tbl ftbl_ahb_clk_src[] = { 304 + /* Note: There might be more frequencies desired here. */ 305 + F(19200000, P_XO, 1, 0, 0), 306 + F(40000000, P_GPLL0, 15, 0, 0), 307 + F(80000000, P_MMPLL0, 10, 0, 0), 308 + { } 309 + }; 310 + 311 + static struct clk_rcg2 ahb_clk_src = { 312 + .cmd_rcgr = 0x5000, 313 + .hid_width = 5, 314 + .parent_map = mmcc_xo_gpll0_mmpll0_map, 315 + .freq_tbl = ftbl_ahb_clk_src, 316 + .clkr.hw.init = &(struct clk_init_data){ 317 + .name = "ahb_clk_src", 318 + .parent_data = mmcc_xo_gpll0_mmpll0, 319 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0), 320 + .ops = &clk_rcg2_ops, 321 + }, 322 + }; 323 + 324 + static const struct freq_tbl ftbl_axi_clk_src[] = { 325 + F(75000000, P_GPLL0, 8, 0, 0), 326 + F(150000000, P_GPLL0, 4, 0, 0), 327 + F(333430000, P_MMPLL1, 3.5, 0, 0), 328 + F(466800000, P_MMPLL1, 2.5, 0, 0), 329 + { } 330 + }; 331 + 332 + static const struct freq_tbl ftbl_axi_clk_src_8992[] = { 333 + F(75000000, P_GPLL0, 8, 0, 0), 334 + F(150000000, P_GPLL0, 4, 0, 0), 335 + F(300000000, P_GPLL0, 2, 0, 0), 336 + F(404000000, P_MMPLL1, 2, 0, 0), 337 + { } 338 + }; 339 + 340 + static struct clk_rcg2 axi_clk_src = { 341 + .cmd_rcgr = 0x5040, 342 + .hid_width = 5, 343 + .parent_map = mmcc_xo_gpll0_mmpll1_map, 344 + .freq_tbl = ftbl_axi_clk_src, 345 + .clkr.hw.init = &(struct clk_init_data){ 346 + .name = "axi_clk_src", 347 + .parent_data = mmcc_xo_gpll0_mmpll1, 348 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll1), 349 + .ops = &clk_rcg2_ops, 350 + }, 351 + }; 352 + 353 + static const struct freq_tbl ftbl_csi0_1_2_3_clk_src[] = { 354 + F(100000000, P_GPLL0, 6, 0, 0), 355 + F(240000000, P_GPLL0, 2.5, 0, 0), 356 + F(266670000, P_MMPLL0, 3, 0, 0), 357 + { } 358 + }; 359 + 360 + static const struct freq_tbl ftbl_csi0_1_2_3_clk_src_8992[] = { 361 + F(100000000, P_GPLL0, 6, 0, 0), 362 + F(266670000, P_MMPLL0, 3, 0, 0), 363 + { } 364 + }; 365 + 366 + static struct clk_rcg2 csi0_clk_src = { 367 + .cmd_rcgr = 0x3090, 368 + .hid_width = 5, 369 + .parent_map = mmcc_xo_gpll0_mmpll0_map, 370 + .freq_tbl = ftbl_csi0_1_2_3_clk_src, 371 + .clkr.hw.init = &(struct clk_init_data){ 372 + .name = "csi0_clk_src", 373 + .parent_data = mmcc_xo_gpll0_mmpll0, 374 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0), 375 + .ops = &clk_rcg2_ops, 376 + }, 377 + }; 378 + 379 + static const struct freq_tbl ftbl_vcodec0_clk_src[] = { 380 + F(66670000, P_GPLL0, 9, 0, 0), 381 + F(100000000, P_GPLL0, 6, 0, 0), 382 + F(133330000, P_GPLL0, 4.5, 0, 0), 383 + F(150000000, P_GPLL0, 4, 0, 0), 384 + F(200000000, P_MMPLL0, 4, 0, 0), 385 + F(240000000, P_GPLL0, 2.5, 0, 0), 386 + F(266670000, P_MMPLL0, 3, 0, 0), 387 + F(320000000, P_MMPLL0, 2.5, 0, 0), 388 + F(510000000, P_MMPLL3, 2, 0, 0), 389 + { } 390 + }; 391 + 392 + static const struct freq_tbl ftbl_vcodec0_clk_src_8992[] = { 393 + F(66670000, P_GPLL0, 9, 0, 0), 394 + F(100000000, P_GPLL0, 6, 0, 0), 395 + F(133330000, P_GPLL0, 4.5, 0, 0), 396 + F(200000000, P_MMPLL0, 4, 0, 0), 397 + F(320000000, P_MMPLL0, 2.5, 0, 0), 398 + F(510000000, P_MMPLL3, 2, 0, 0), 399 + { } 400 + }; 401 + 402 + static struct clk_rcg2 vcodec0_clk_src = { 403 + .cmd_rcgr = 0x1000, 404 + .mnd_width = 8, 405 + .hid_width = 5, 406 + .parent_map = mmcc_xo_gpll0_mmpll0_mmpll3_map, 407 + .freq_tbl = ftbl_vcodec0_clk_src, 408 + .clkr.hw.init = &(struct clk_init_data){ 409 + .name = "vcodec0_clk_src", 410 + .parent_data = mmcc_xo_gpll0_mmpll0_mmpll3, 411 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll3), 412 + .ops = &clk_rcg2_ops, 413 + }, 414 + }; 415 + 416 + static struct clk_rcg2 csi1_clk_src = { 417 + .cmd_rcgr = 0x3100, 418 + .hid_width = 5, 419 + .parent_map = mmcc_xo_gpll0_mmpll0_map, 420 + .freq_tbl = ftbl_csi0_1_2_3_clk_src, 421 + .clkr.hw.init = &(struct clk_init_data){ 422 + .name = "csi1_clk_src", 423 + .parent_data = mmcc_xo_gpll0_mmpll0, 424 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0), 425 + .ops = &clk_rcg2_ops, 426 + }, 427 + }; 428 + 429 + static struct clk_rcg2 csi2_clk_src = { 430 + .cmd_rcgr = 0x3160, 431 + .hid_width = 5, 432 + .parent_map = mmcc_xo_gpll0_mmpll0_map, 433 + .freq_tbl = ftbl_csi0_1_2_3_clk_src, 434 + .clkr.hw.init = &(struct clk_init_data){ 435 + .name = "csi2_clk_src", 436 + .parent_data = mmcc_xo_gpll0_mmpll0, 437 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0), 438 + .ops = &clk_rcg2_ops, 439 + }, 440 + }; 441 + 442 + static struct clk_rcg2 csi3_clk_src = { 443 + .cmd_rcgr = 0x31c0, 444 + .hid_width = 5, 445 + .parent_map = mmcc_xo_gpll0_mmpll0_map, 446 + .freq_tbl = ftbl_csi0_1_2_3_clk_src, 447 + .clkr.hw.init = &(struct clk_init_data){ 448 + .name = "csi3_clk_src", 449 + .parent_data = mmcc_xo_gpll0_mmpll0, 450 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0), 451 + .ops = &clk_rcg2_ops, 452 + }, 453 + }; 454 + 455 + static const struct freq_tbl ftbl_vfe0_clk_src[] = { 456 + F(80000000, P_GPLL0, 7.5, 0, 0), 457 + F(100000000, P_GPLL0, 6, 0, 0), 458 + F(200000000, P_GPLL0, 3, 0, 0), 459 + F(320000000, P_MMPLL0, 2.5, 0, 0), 460 + F(400000000, P_MMPLL0, 2, 0, 0), 461 + F(480000000, P_MMPLL4, 2, 0, 0), 462 + F(533330000, P_MMPLL0, 1.5, 0, 0), 463 + F(600000000, P_GPLL0, 1, 0, 0), 464 + { } 465 + }; 466 + 467 + static const struct freq_tbl ftbl_vfe0_1_clk_src_8992[] = { 468 + F(80000000, P_GPLL0, 7.5, 0, 0), 469 + F(100000000, P_GPLL0, 6, 0, 0), 470 + F(200000000, P_GPLL0, 3, 0, 0), 471 + F(320000000, P_MMPLL0, 2.5, 0, 0), 472 + F(480000000, P_MMPLL4, 2, 0, 0), 473 + F(600000000, P_GPLL0, 1, 0, 0), 474 + { } 475 + }; 476 + 477 + static struct clk_rcg2 vfe0_clk_src = { 478 + .cmd_rcgr = 0x3600, 479 + .hid_width = 5, 480 + .parent_map = mmcc_xo_gpll0_mmpll0_mmpll4_map, 481 + .freq_tbl = ftbl_vfe0_clk_src, 482 + .clkr.hw.init = &(struct clk_init_data){ 483 + .name = "vfe0_clk_src", 484 + .parent_data = mmcc_xo_gpll0_mmpll0_mmpll4, 485 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll4), 486 + .ops = &clk_rcg2_ops, 487 + }, 488 + }; 489 + 490 + static const struct freq_tbl ftbl_vfe1_clk_src[] = { 491 + F(80000000, P_GPLL0, 7.5, 0, 0), 492 + F(100000000, P_GPLL0, 6, 0, 0), 493 + F(200000000, P_GPLL0, 3, 0, 0), 494 + F(320000000, P_MMPLL0, 2.5, 0, 0), 495 + F(400000000, P_MMPLL0, 2, 0, 0), 496 + F(533330000, P_MMPLL0, 1.5, 0, 0), 497 + { } 498 + }; 499 + 500 + static struct clk_rcg2 vfe1_clk_src = { 501 + .cmd_rcgr = 0x3620, 502 + .hid_width = 5, 503 + .parent_map = mmcc_xo_gpll0_mmpll0_mmpll4_map, 504 + .freq_tbl = ftbl_vfe1_clk_src, 505 + .clkr.hw.init = &(struct clk_init_data){ 506 + .name = "vfe1_clk_src", 507 + .parent_data = mmcc_xo_gpll0_mmpll0_mmpll4, 508 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll4), 509 + .ops = &clk_rcg2_ops, 510 + }, 511 + }; 512 + 513 + static const struct freq_tbl ftbl_cpp_clk_src[] = { 514 + F(100000000, P_GPLL0, 6, 0, 0), 515 + F(200000000, P_GPLL0, 3, 0, 0), 516 + F(320000000, P_MMPLL0, 2.5, 0, 0), 517 + F(480000000, P_MMPLL4, 2, 0, 0), 518 + F(600000000, P_GPLL0, 1, 0, 0), 519 + F(640000000, P_MMPLL4, 1.5, 0, 0), 520 + { } 521 + }; 522 + 523 + static const struct freq_tbl ftbl_cpp_clk_src_8992[] = { 524 + F(100000000, P_GPLL0, 6, 0, 0), 525 + F(200000000, P_GPLL0, 3, 0, 0), 526 + F(320000000, P_MMPLL0, 2.5, 0, 0), 527 + F(480000000, P_MMPLL4, 2, 0, 0), 528 + F(640000000, P_MMPLL4, 1.5, 0, 0), 529 + { } 530 + }; 531 + 532 + static struct clk_rcg2 cpp_clk_src = { 533 + .cmd_rcgr = 0x3640, 534 + .hid_width = 5, 535 + .parent_map = mmcc_xo_gpll0_mmpll0_mmpll4_map, 536 + .freq_tbl = ftbl_cpp_clk_src, 537 + .clkr.hw.init = &(struct clk_init_data){ 538 + .name = "cpp_clk_src", 539 + .parent_data = mmcc_xo_gpll0_mmpll0_mmpll4, 540 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll4), 541 + .ops = &clk_rcg2_ops, 542 + }, 543 + }; 544 + 545 + static const struct freq_tbl ftbl_jpeg0_1_clk_src[] = { 546 + F(75000000, P_GPLL0, 8, 0, 0), 547 + F(150000000, P_GPLL0, 4, 0, 0), 548 + F(228570000, P_MMPLL0, 3.5, 0, 0), 549 + F(266670000, P_MMPLL0, 3, 0, 0), 550 + F(320000000, P_MMPLL0, 2.5, 0, 0), 551 + F(480000000, P_MMPLL4, 2, 0, 0), 552 + { } 553 + }; 554 + 555 + static struct clk_rcg2 jpeg1_clk_src = { 556 + .cmd_rcgr = 0x3520, 557 + .hid_width = 5, 558 + .parent_map = mmcc_xo_gpll0_mmpll0_mmpll4_map, 559 + .freq_tbl = ftbl_jpeg0_1_clk_src, 560 + .clkr.hw.init = &(struct clk_init_data){ 561 + .name = "jpeg1_clk_src", 562 + .parent_data = mmcc_xo_gpll0_mmpll0_mmpll4, 563 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll4), 564 + .ops = &clk_rcg2_ops, 565 + }, 566 + }; 567 + 568 + static const struct freq_tbl ftbl_jpeg2_clk_src[] = { 569 + F(75000000, P_GPLL0, 8, 0, 0), 570 + F(133330000, P_GPLL0, 4.5, 0, 0), 571 + F(150000000, P_GPLL0, 4, 0, 0), 572 + F(228570000, P_MMPLL0, 3.5, 0, 0), 573 + F(266670000, P_MMPLL0, 3, 0, 0), 574 + F(320000000, P_MMPLL0, 2.5, 0, 0), 575 + { } 576 + }; 577 + 578 + static struct clk_rcg2 jpeg2_clk_src = { 579 + .cmd_rcgr = 0x3540, 580 + .hid_width = 5, 581 + .parent_map = mmcc_xo_gpll0_mmpll0_map, 582 + .freq_tbl = ftbl_jpeg2_clk_src, 583 + .clkr.hw.init = &(struct clk_init_data){ 584 + .name = "jpeg2_clk_src", 585 + .parent_data = mmcc_xo_gpll0_mmpll0, 586 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0), 587 + .ops = &clk_rcg2_ops, 588 + }, 589 + }; 590 + 591 + static const struct freq_tbl ftbl_csi2phytimer_clk_src[] = { 592 + F(50000000, P_GPLL0, 12, 0, 0), 593 + F(100000000, P_GPLL0, 6, 0, 0), 594 + F(200000000, P_MMPLL0, 4, 0, 0), 595 + { } 596 + }; 597 + 598 + static struct clk_rcg2 csi2phytimer_clk_src = { 599 + .cmd_rcgr = 0x3060, 600 + .hid_width = 5, 601 + .parent_map = mmcc_xo_gpll0_mmpll0_map, 602 + .freq_tbl = ftbl_csi2phytimer_clk_src, 603 + .clkr.hw.init = &(struct clk_init_data){ 604 + .name = "csi2phytimer_clk_src", 605 + .parent_data = mmcc_xo_gpll0_mmpll0, 606 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0), 607 + .ops = &clk_rcg2_ops, 608 + }, 609 + }; 610 + 611 + static const struct freq_tbl ftbl_fd_core_clk_src[] = { 612 + F(60000000, P_GPLL0, 10, 0, 0), 613 + F(200000000, P_GPLL0, 3, 0, 0), 614 + F(320000000, P_MMPLL0, 2.5, 0, 0), 615 + F(400000000, P_MMPLL0, 2, 0, 0), 616 + { } 617 + }; 618 + 619 + static struct clk_rcg2 fd_core_clk_src = { 620 + .cmd_rcgr = 0x3b00, 621 + .hid_width = 5, 622 + .parent_map = mmcc_xo_gpll0_mmpll0_map, 623 + .freq_tbl = ftbl_fd_core_clk_src, 624 + .clkr.hw.init = &(struct clk_init_data){ 625 + .name = "fd_core_clk_src", 626 + .parent_data = mmcc_xo_gpll0_mmpll0, 627 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0), 628 + .ops = &clk_rcg2_ops, 629 + }, 630 + }; 631 + 632 + static const struct freq_tbl ftbl_mdp_clk_src[] = { 633 + F(85710000, P_GPLL0, 7, 0, 0), 634 + F(100000000, P_GPLL0, 6, 0, 0), 635 + F(120000000, P_GPLL0, 5, 0, 0), 636 + F(150000000, P_GPLL0, 4, 0, 0), 637 + F(171430000, P_GPLL0, 3.5, 0, 0), 638 + F(200000000, P_GPLL0, 3, 0, 0), 639 + F(240000000, P_GPLL0, 2.5, 0, 0), 640 + F(266670000, P_MMPLL0, 3, 0, 0), 641 + F(300000000, P_GPLL0, 2, 0, 0), 642 + F(320000000, P_MMPLL0, 2.5, 0, 0), 643 + F(400000000, P_MMPLL0, 2, 0, 0), 644 + { } 645 + }; 646 + 647 + static const struct freq_tbl ftbl_mdp_clk_src_8992[] = { 648 + F(85710000, P_GPLL0, 7, 0, 0), 649 + F(171430000, P_GPLL0, 3.5, 0, 0), 650 + F(200000000, P_GPLL0, 3, 0, 0), 651 + F(240000000, P_GPLL0, 2.5, 0, 0), 652 + F(266670000, P_MMPLL0, 3, 0, 0), 653 + F(320000000, P_MMPLL0, 2.5, 0, 0), 654 + F(400000000, P_MMPLL0, 2, 0, 0), 655 + { } 656 + }; 657 + 658 + static struct clk_rcg2 mdp_clk_src = { 659 + .cmd_rcgr = 0x2040, 660 + .hid_width = 5, 661 + .parent_map = mmcc_xo_gpll0_mmpll0_map, 662 + .freq_tbl = ftbl_mdp_clk_src, 663 + .clkr.hw.init = &(struct clk_init_data){ 664 + .name = "mdp_clk_src", 665 + .parent_data = mmcc_xo_gpll0_mmpll0, 666 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0), 667 + .ops = &clk_rcg2_ops, 668 + }, 669 + }; 670 + 671 + static struct clk_rcg2 pclk0_clk_src = { 672 + .cmd_rcgr = 0x2000, 673 + .mnd_width = 8, 674 + .hid_width = 5, 675 + .parent_map = mmcc_xo_dsi0pll_dsi1pll_map, 676 + .clkr.hw.init = &(struct clk_init_data){ 677 + .name = "pclk0_clk_src", 678 + .parent_data = mmcc_xo_dsi0pll_dsi1pll, 679 + .num_parents = ARRAY_SIZE(mmcc_xo_dsi0pll_dsi1pll), 680 + .ops = &clk_pixel_ops, 681 + .flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE, 682 + }, 683 + }; 684 + 685 + static struct clk_rcg2 pclk1_clk_src = { 686 + .cmd_rcgr = 0x2020, 687 + .mnd_width = 8, 688 + .hid_width = 5, 689 + .parent_map = mmcc_xo_dsi0pll_dsi1pll_map, 690 + .clkr.hw.init = &(struct clk_init_data){ 691 + .name = "pclk1_clk_src", 692 + .parent_data = mmcc_xo_dsi0pll_dsi1pll, 693 + .num_parents = ARRAY_SIZE(mmcc_xo_dsi0pll_dsi1pll), 694 + .ops = &clk_pixel_ops, 695 + .flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE, 696 + }, 697 + }; 698 + 699 + static const struct freq_tbl ftbl_ocmemnoc_clk_src[] = { 700 + F(19200000, P_XO, 1, 0, 0), 701 + F(75000000, P_GPLL0, 8, 0, 0), 702 + F(100000000, P_GPLL0, 6, 0, 0), 703 + F(150000000, P_GPLL0, 4, 0, 0), 704 + F(228570000, P_MMPLL0, 3.5, 0, 0), 705 + F(266670000, P_MMPLL0, 3, 0, 0), 706 + F(320000000, P_MMPLL0, 2.5, 0, 0), 707 + F(400000000, P_MMPLL0, 2, 0, 0), 708 + { } 709 + }; 710 + 711 + static const struct freq_tbl ftbl_ocmemnoc_clk_src_8992[] = { 712 + F(19200000, P_XO, 1, 0, 0), 713 + F(75000000, P_GPLL0, 8, 0, 0), 714 + F(100000000, P_GPLL0, 6, 0, 0), 715 + F(150000000, P_GPLL0, 4, 0, 0), 716 + F(320000000, P_MMPLL0, 2.5, 0, 0), 717 + F(400000000, P_MMPLL0, 2, 0, 0), 718 + { } 719 + }; 720 + 721 + static struct clk_rcg2 ocmemnoc_clk_src = { 722 + .cmd_rcgr = 0x5090, 723 + .hid_width = 5, 724 + .parent_map = mmcc_xo_gpll0_mmpll0_map, 725 + .freq_tbl = ftbl_ocmemnoc_clk_src, 726 + .clkr.hw.init = &(struct clk_init_data){ 727 + .name = "ocmemnoc_clk_src", 728 + .parent_data = mmcc_xo_gpll0_mmpll0, 729 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0), 730 + .ops = &clk_rcg2_ops, 731 + }, 732 + }; 733 + 734 + static const struct freq_tbl ftbl_cci_clk_src[] = { 735 + F(19200000, P_XO, 1, 0, 0), 736 + F(37500000, P_GPLL0, 16, 0, 0), 737 + F(50000000, P_GPLL0, 12, 0, 0), 738 + F(100000000, P_GPLL0, 6, 0, 0), 739 + { } 740 + }; 741 + 742 + static struct clk_rcg2 cci_clk_src = { 743 + .cmd_rcgr = 0x3300, 744 + .mnd_width = 8, 745 + .hid_width = 5, 746 + .parent_map = mmcc_xo_gpll0_map, 747 + .freq_tbl = ftbl_cci_clk_src, 748 + .clkr.hw.init = &(struct clk_init_data){ 749 + .name = "cci_clk_src", 750 + .parent_data = mmcc_xo_gpll0, 751 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0), 752 + .ops = &clk_rcg2_ops, 753 + }, 754 + }; 755 + 756 + static const struct freq_tbl ftbl_mmss_gp0_1_clk_src[] = { 757 + F(10000, P_XO, 16, 10, 120), 758 + F(24000, P_GPLL0, 16, 1, 50), 759 + F(6000000, P_GPLL0, 10, 1, 10), 760 + F(12000000, P_GPLL0, 10, 1, 5), 761 + F(13000000, P_GPLL0, 4, 13, 150), 762 + F(24000000, P_GPLL0, 5, 1, 5), 763 + { } 764 + }; 765 + 766 + static struct clk_rcg2 mmss_gp0_clk_src = { 767 + .cmd_rcgr = 0x3420, 768 + .mnd_width = 8, 769 + .hid_width = 5, 770 + .parent_map = mmcc_xo_gpll0_map, 771 + .freq_tbl = ftbl_mmss_gp0_1_clk_src, 772 + .clkr.hw.init = &(struct clk_init_data){ 773 + .name = "mmss_gp0_clk_src", 774 + .parent_data = mmcc_xo_gpll0, 775 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0), 776 + .ops = &clk_rcg2_ops, 777 + }, 778 + }; 779 + 780 + static struct clk_rcg2 mmss_gp1_clk_src = { 781 + .cmd_rcgr = 0x3450, 782 + .mnd_width = 8, 783 + .hid_width = 5, 784 + .parent_map = mmcc_xo_gpll0_map, 785 + .freq_tbl = ftbl_mmss_gp0_1_clk_src, 786 + .clkr.hw.init = &(struct clk_init_data){ 787 + .name = "mmss_gp1_clk_src", 788 + .parent_data = mmcc_xo_gpll0, 789 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0), 790 + .ops = &clk_rcg2_ops, 791 + }, 792 + }; 793 + 794 + static struct clk_rcg2 jpeg0_clk_src = { 795 + .cmd_rcgr = 0x3500, 796 + .hid_width = 5, 797 + .parent_map = mmcc_xo_gpll0_mmpll0_mmpll4_map, 798 + .freq_tbl = ftbl_jpeg0_1_clk_src, 799 + .clkr.hw.init = &(struct clk_init_data){ 800 + .name = "jpeg0_clk_src", 801 + .parent_data = mmcc_xo_gpll0_mmpll0_mmpll4, 802 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll4), 803 + .ops = &clk_rcg2_ops, 804 + }, 805 + }; 806 + 807 + static struct clk_rcg2 jpeg_dma_clk_src = { 808 + .cmd_rcgr = 0x3560, 809 + .hid_width = 5, 810 + .parent_map = mmcc_xo_gpll0_mmpll0_mmpll4_map, 811 + .freq_tbl = ftbl_jpeg0_1_clk_src, 812 + .clkr.hw.init = &(struct clk_init_data){ 813 + .name = "jpeg_dma_clk_src", 814 + .parent_data = mmcc_xo_gpll0_mmpll0_mmpll4, 815 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll4), 816 + .ops = &clk_rcg2_ops, 817 + }, 818 + }; 819 + 820 + static const struct freq_tbl ftbl_mclk0_1_2_3_clk_src[] = { 821 + F(4800000, P_XO, 4, 0, 0), 822 + F(6000000, P_GPLL0, 10, 1, 10), 823 + F(8000000, P_GPLL0, 15, 1, 5), 824 + F(9600000, P_XO, 2, 0, 0), 825 + F(16000000, P_MMPLL0, 10, 1, 5), 826 + F(19200000, P_XO, 1, 0, 0), 827 + F(24000000, P_GPLL0, 5, 1, 5), 828 + F(32000000, P_MMPLL0, 5, 1, 5), 829 + F(48000000, P_GPLL0, 12.5, 0, 0), 830 + F(64000000, P_MMPLL0, 12.5, 0, 0), 831 + { } 832 + }; 833 + 834 + static const struct freq_tbl ftbl_mclk0_clk_src_8992[] = { 835 + F(4800000, P_XO, 4, 0, 0), 836 + F(6000000, P_MMPLL4, 10, 1, 16), 837 + F(8000000, P_MMPLL4, 10, 1, 12), 838 + F(9600000, P_XO, 2, 0, 0), 839 + F(12000000, P_MMPLL4, 10, 1, 8), 840 + F(16000000, P_MMPLL4, 10, 1, 6), 841 + F(19200000, P_XO, 1, 0, 0), 842 + F(24000000, P_MMPLL4, 10, 1, 4), 843 + F(32000000, P_MMPLL4, 10, 1, 3), 844 + F(48000000, P_MMPLL4, 10, 1, 2), 845 + F(64000000, P_MMPLL4, 15, 0, 0), 846 + { } 847 + }; 848 + 849 + static const struct freq_tbl ftbl_mclk1_2_3_clk_src_8992[] = { 850 + F(4800000, P_XO, 4, 0, 0), 851 + F(6000000, P_MMPLL4, 10, 1, 16), 852 + F(8000000, P_MMPLL4, 10, 1, 12), 853 + F(9600000, P_XO, 2, 0, 0), 854 + F(16000000, P_MMPLL4, 10, 1, 6), 855 + F(19200000, P_XO, 1, 0, 0), 856 + F(24000000, P_MMPLL4, 10, 1, 4), 857 + F(32000000, P_MMPLL4, 10, 1, 3), 858 + F(48000000, P_MMPLL4, 10, 1, 2), 859 + F(64000000, P_MMPLL4, 15, 0, 0), 860 + { } 861 + }; 862 + 863 + static struct clk_rcg2 mclk0_clk_src = { 864 + .cmd_rcgr = 0x3360, 865 + .mnd_width = 8, 866 + .hid_width = 5, 867 + .parent_map = mmcc_xo_gpll0_mmpll0_map, 868 + .freq_tbl = ftbl_mclk0_1_2_3_clk_src, 869 + .clkr.hw.init = &(struct clk_init_data){ 870 + .name = "mclk0_clk_src", 871 + .parent_data = mmcc_xo_gpll0_mmpll0, 872 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0), 873 + .ops = &clk_rcg2_ops, 874 + }, 875 + }; 876 + 877 + static struct clk_rcg2 mclk1_clk_src = { 878 + .cmd_rcgr = 0x3390, 879 + .mnd_width = 8, 880 + .hid_width = 5, 881 + .parent_map = mmcc_xo_gpll0_mmpll0_map, 882 + .freq_tbl = ftbl_mclk0_1_2_3_clk_src, 883 + .clkr.hw.init = &(struct clk_init_data){ 884 + .name = "mclk1_clk_src", 885 + .parent_data = mmcc_xo_gpll0_mmpll0, 886 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0), 887 + .ops = &clk_rcg2_ops, 888 + }, 889 + }; 890 + 891 + static struct clk_rcg2 mclk2_clk_src = { 892 + .cmd_rcgr = 0x33c0, 893 + .mnd_width = 8, 894 + .hid_width = 5, 895 + .parent_map = mmcc_xo_gpll0_mmpll0_map, 896 + .freq_tbl = ftbl_mclk0_1_2_3_clk_src, 897 + .clkr.hw.init = &(struct clk_init_data){ 898 + .name = "mclk2_clk_src", 899 + .parent_data = mmcc_xo_gpll0_mmpll0, 900 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0), 901 + .ops = &clk_rcg2_ops, 902 + }, 903 + }; 904 + 905 + static struct clk_rcg2 mclk3_clk_src = { 906 + .cmd_rcgr = 0x33f0, 907 + .mnd_width = 8, 908 + .hid_width = 5, 909 + .parent_map = mmcc_xo_gpll0_mmpll0_map, 910 + .freq_tbl = ftbl_mclk0_1_2_3_clk_src, 911 + .clkr.hw.init = &(struct clk_init_data){ 912 + .name = "mclk3_clk_src", 913 + .parent_data = mmcc_xo_gpll0_mmpll0, 914 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0), 915 + .ops = &clk_rcg2_ops, 916 + }, 917 + }; 918 + 919 + static const struct freq_tbl ftbl_csi0_1phytimer_clk_src[] = { 920 + F(50000000, P_GPLL0, 12, 0, 0), 921 + F(100000000, P_GPLL0, 6, 0, 0), 922 + F(200000000, P_MMPLL0, 4, 0, 0), 923 + { } 924 + }; 925 + 926 + static struct clk_rcg2 csi0phytimer_clk_src = { 927 + .cmd_rcgr = 0x3000, 928 + .hid_width = 5, 929 + .parent_map = mmcc_xo_gpll0_mmpll0_map, 930 + .freq_tbl = ftbl_csi0_1phytimer_clk_src, 931 + .clkr.hw.init = &(struct clk_init_data){ 932 + .name = "csi0phytimer_clk_src", 933 + .parent_data = mmcc_xo_gpll0_mmpll0, 934 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0), 935 + .ops = &clk_rcg2_ops, 936 + }, 937 + }; 938 + 939 + static struct clk_rcg2 csi1phytimer_clk_src = { 940 + .cmd_rcgr = 0x3030, 941 + .hid_width = 5, 942 + .parent_map = mmcc_xo_gpll0_mmpll0_map, 943 + .freq_tbl = ftbl_csi0_1phytimer_clk_src, 944 + .clkr.hw.init = &(struct clk_init_data){ 945 + .name = "csi1phytimer_clk_src", 946 + .parent_data = mmcc_xo_gpll0_mmpll0, 947 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0), 948 + .ops = &clk_rcg2_ops, 949 + }, 950 + }; 951 + 952 + static struct clk_rcg2 byte0_clk_src = { 953 + .cmd_rcgr = 0x2120, 954 + .hid_width = 5, 955 + .parent_map = mmcc_xo_dsibyte_map, 956 + .clkr.hw.init = &(struct clk_init_data){ 957 + .name = "byte0_clk_src", 958 + .parent_data = mmcc_xo_dsibyte, 959 + .num_parents = ARRAY_SIZE(mmcc_xo_dsibyte), 960 + .ops = &clk_byte2_ops, 961 + .flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE, 962 + }, 963 + }; 964 + 965 + static struct clk_rcg2 byte1_clk_src = { 966 + .cmd_rcgr = 0x2140, 967 + .hid_width = 5, 968 + .parent_map = mmcc_xo_dsibyte_map, 969 + .clkr.hw.init = &(struct clk_init_data){ 970 + .name = "byte1_clk_src", 971 + .parent_data = mmcc_xo_dsibyte, 972 + .num_parents = ARRAY_SIZE(mmcc_xo_dsibyte), 973 + .ops = &clk_byte2_ops, 974 + .flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE, 975 + }, 976 + }; 977 + 978 + static struct freq_tbl ftbl_mdss_esc0_1_clk[] = { 979 + F(19200000, P_XO, 1, 0, 0), 980 + { } 981 + }; 982 + 983 + static struct clk_rcg2 esc0_clk_src = { 984 + .cmd_rcgr = 0x2160, 985 + .hid_width = 5, 986 + .parent_map = mmcc_xo_dsibyte_map, 987 + .freq_tbl = ftbl_mdss_esc0_1_clk, 988 + .clkr.hw.init = &(struct clk_init_data){ 989 + .name = "esc0_clk_src", 990 + .parent_data = mmcc_xo_dsibyte, 991 + .num_parents = ARRAY_SIZE(mmcc_xo_dsibyte), 992 + .ops = &clk_rcg2_ops, 993 + }, 994 + }; 995 + 996 + static struct clk_rcg2 esc1_clk_src = { 997 + .cmd_rcgr = 0x2180, 998 + .hid_width = 5, 999 + .parent_map = mmcc_xo_dsibyte_map, 1000 + .freq_tbl = ftbl_mdss_esc0_1_clk, 1001 + .clkr.hw.init = &(struct clk_init_data){ 1002 + .name = "esc1_clk_src", 1003 + .parent_data = mmcc_xo_dsibyte, 1004 + .num_parents = ARRAY_SIZE(mmcc_xo_dsibyte), 1005 + .ops = &clk_rcg2_ops, 1006 + }, 1007 + }; 1008 + 1009 + static struct freq_tbl extpclk_freq_tbl[] = { 1010 + { .src = P_HDMIPLL }, 1011 + { } 1012 + }; 1013 + 1014 + static struct clk_rcg2 extpclk_clk_src = { 1015 + .cmd_rcgr = 0x2060, 1016 + .hid_width = 5, 1017 + .parent_map = mmss_xo_hdmi_map, 1018 + .freq_tbl = extpclk_freq_tbl, 1019 + .clkr.hw.init = &(struct clk_init_data){ 1020 + .name = "extpclk_clk_src", 1021 + .parent_data = mmss_xo_hdmi, 1022 + .num_parents = ARRAY_SIZE(mmss_xo_hdmi), 1023 + .ops = &clk_rcg2_ops, 1024 + .flags = CLK_SET_RATE_PARENT, 1025 + }, 1026 + }; 1027 + 1028 + static struct freq_tbl ftbl_hdmi_clk_src[] = { 1029 + F(19200000, P_XO, 1, 0, 0), 1030 + { } 1031 + }; 1032 + 1033 + static struct clk_rcg2 hdmi_clk_src = { 1034 + .cmd_rcgr = 0x2100, 1035 + .hid_width = 5, 1036 + .parent_map = mmcc_xo_gpll0_map, 1037 + .freq_tbl = ftbl_hdmi_clk_src, 1038 + .clkr.hw.init = &(struct clk_init_data){ 1039 + .name = "hdmi_clk_src", 1040 + .parent_data = mmcc_xo_gpll0, 1041 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0), 1042 + .ops = &clk_rcg2_ops, 1043 + }, 1044 + }; 1045 + 1046 + static struct freq_tbl ftbl_mdss_vsync_clk[] = { 1047 + F(19200000, P_XO, 1, 0, 0), 1048 + { } 1049 + }; 1050 + 1051 + static struct clk_rcg2 vsync_clk_src = { 1052 + .cmd_rcgr = 0x2080, 1053 + .hid_width = 5, 1054 + .parent_map = mmcc_xo_gpll0_map, 1055 + .freq_tbl = ftbl_mdss_vsync_clk, 1056 + .clkr.hw.init = &(struct clk_init_data){ 1057 + .name = "vsync_clk_src", 1058 + .parent_data = mmcc_xo_gpll0, 1059 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0), 1060 + .ops = &clk_rcg2_ops, 1061 + }, 1062 + }; 1063 + 1064 + static const struct freq_tbl ftbl_rbbmtimer_clk_src[] = { 1065 + F(19200000, P_XO, 1, 0, 0), 1066 + { } 1067 + }; 1068 + 1069 + static struct clk_rcg2 rbbmtimer_clk_src = { 1070 + .cmd_rcgr = 0x4090, 1071 + .hid_width = 5, 1072 + .parent_map = mmcc_xo_gpll0_map, 1073 + .freq_tbl = ftbl_rbbmtimer_clk_src, 1074 + .clkr.hw.init = &(struct clk_init_data){ 1075 + .name = "rbbmtimer_clk_src", 1076 + .parent_data = mmcc_xo_gpll0, 1077 + .num_parents = ARRAY_SIZE(mmcc_xo_gpll0), 1078 + .ops = &clk_rcg2_ops, 1079 + }, 1080 + }; 1081 + 1082 + static struct clk_branch camss_ahb_clk = { 1083 + .halt_reg = 0x348c, 1084 + .clkr = { 1085 + .enable_reg = 0x348c, 1086 + .enable_mask = BIT(0), 1087 + .hw.init = &(struct clk_init_data){ 1088 + .name = "camss_ahb_clk", 1089 + .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1090 + .num_parents = 1, 1091 + .flags = CLK_SET_RATE_PARENT, 1092 + .ops = &clk_branch2_ops, 1093 + }, 1094 + }, 1095 + }; 1096 + 1097 + static struct clk_branch camss_cci_cci_ahb_clk = { 1098 + .halt_reg = 0x3348, 1099 + .clkr = { 1100 + .enable_reg = 0x3348, 1101 + .enable_mask = BIT(0), 1102 + .hw.init = &(struct clk_init_data){ 1103 + .name = "camss_cci_cci_ahb_clk", 1104 + .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1105 + .num_parents = 1, 1106 + .flags = CLK_SET_RATE_PARENT, 1107 + .ops = &clk_branch2_ops, 1108 + }, 1109 + }, 1110 + }; 1111 + 1112 + static struct clk_branch camss_cci_cci_clk = { 1113 + .halt_reg = 0x3344, 1114 + .clkr = { 1115 + .enable_reg = 0x3344, 1116 + .enable_mask = BIT(0), 1117 + .hw.init = &(struct clk_init_data){ 1118 + .name = "camss_cci_cci_clk", 1119 + .parent_hws = (const struct clk_hw *[]){ &cci_clk_src.clkr.hw }, 1120 + .num_parents = 1, 1121 + .ops = &clk_branch2_ops, 1122 + }, 1123 + }, 1124 + }; 1125 + 1126 + static struct clk_branch camss_vfe_cpp_ahb_clk = { 1127 + .halt_reg = 0x36b4, 1128 + .clkr = { 1129 + .enable_reg = 0x36b4, 1130 + .enable_mask = BIT(0), 1131 + .hw.init = &(struct clk_init_data){ 1132 + .name = "camss_vfe_cpp_ahb_clk", 1133 + .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1134 + .num_parents = 1, 1135 + .flags = CLK_SET_RATE_PARENT, 1136 + .ops = &clk_branch2_ops, 1137 + }, 1138 + }, 1139 + }; 1140 + 1141 + static struct clk_branch camss_vfe_cpp_axi_clk = { 1142 + .halt_reg = 0x36c4, 1143 + .clkr = { 1144 + .enable_reg = 0x36c4, 1145 + .enable_mask = BIT(0), 1146 + .hw.init = &(struct clk_init_data){ 1147 + .name = "camss_vfe_cpp_axi_clk", 1148 + .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw }, 1149 + .num_parents = 1, 1150 + .ops = &clk_branch2_ops, 1151 + }, 1152 + }, 1153 + }; 1154 + 1155 + static struct clk_branch camss_vfe_cpp_clk = { 1156 + .halt_reg = 0x36b0, 1157 + .clkr = { 1158 + .enable_reg = 0x36b0, 1159 + .enable_mask = BIT(0), 1160 + .hw.init = &(struct clk_init_data){ 1161 + .name = "camss_vfe_cpp_clk", 1162 + .parent_hws = (const struct clk_hw *[]){ &cpp_clk_src.clkr.hw }, 1163 + .num_parents = 1, 1164 + .ops = &clk_branch2_ops, 1165 + }, 1166 + }, 1167 + }; 1168 + 1169 + static struct clk_branch camss_csi0_ahb_clk = { 1170 + .halt_reg = 0x30bc, 1171 + .clkr = { 1172 + .enable_reg = 0x30bc, 1173 + .enable_mask = BIT(0), 1174 + .hw.init = &(struct clk_init_data){ 1175 + .name = "camss_csi0_ahb_clk", 1176 + .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1177 + .num_parents = 1, 1178 + .flags = CLK_SET_RATE_PARENT, 1179 + .ops = &clk_branch2_ops, 1180 + }, 1181 + }, 1182 + }; 1183 + 1184 + static struct clk_branch camss_csi0_clk = { 1185 + .halt_reg = 0x30b4, 1186 + .clkr = { 1187 + .enable_reg = 0x30b4, 1188 + .enable_mask = BIT(0), 1189 + .hw.init = &(struct clk_init_data){ 1190 + .name = "camss_csi0_clk", 1191 + .parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw }, 1192 + .num_parents = 1, 1193 + .ops = &clk_branch2_ops, 1194 + }, 1195 + }, 1196 + }; 1197 + 1198 + static struct clk_branch camss_csi0phy_clk = { 1199 + .halt_reg = 0x30c4, 1200 + .clkr = { 1201 + .enable_reg = 0x30c4, 1202 + .enable_mask = BIT(0), 1203 + .hw.init = &(struct clk_init_data){ 1204 + .name = "camss_csi0phy_clk", 1205 + .parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw }, 1206 + .num_parents = 1, 1207 + .ops = &clk_branch2_ops, 1208 + }, 1209 + }, 1210 + }; 1211 + 1212 + static struct clk_branch camss_csi0pix_clk = { 1213 + .halt_reg = 0x30e4, 1214 + .clkr = { 1215 + .enable_reg = 0x30e4, 1216 + .enable_mask = BIT(0), 1217 + .hw.init = &(struct clk_init_data){ 1218 + .name = "camss_csi0pix_clk", 1219 + .parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw }, 1220 + .num_parents = 1, 1221 + .ops = &clk_branch2_ops, 1222 + }, 1223 + }, 1224 + }; 1225 + 1226 + static struct clk_branch camss_csi0rdi_clk = { 1227 + .halt_reg = 0x30d4, 1228 + .clkr = { 1229 + .enable_reg = 0x30d4, 1230 + .enable_mask = BIT(0), 1231 + .hw.init = &(struct clk_init_data){ 1232 + .name = "camss_csi0rdi_clk", 1233 + .parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw }, 1234 + .num_parents = 1, 1235 + .ops = &clk_branch2_ops, 1236 + }, 1237 + }, 1238 + }; 1239 + 1240 + static struct clk_branch camss_csi1_ahb_clk = { 1241 + .halt_reg = 0x3128, 1242 + .clkr = { 1243 + .enable_reg = 0x3128, 1244 + .enable_mask = BIT(0), 1245 + .hw.init = &(struct clk_init_data){ 1246 + .name = "camss_csi1_ahb_clk", 1247 + .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1248 + .num_parents = 1, 1249 + .flags = CLK_SET_RATE_PARENT, 1250 + .ops = &clk_branch2_ops, 1251 + }, 1252 + }, 1253 + }; 1254 + 1255 + static struct clk_branch camss_csi1_clk = { 1256 + .halt_reg = 0x3124, 1257 + .clkr = { 1258 + .enable_reg = 0x3124, 1259 + .enable_mask = BIT(0), 1260 + .hw.init = &(struct clk_init_data){ 1261 + .name = "camss_csi1_clk", 1262 + .parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw }, 1263 + .num_parents = 1, 1264 + .ops = &clk_branch2_ops, 1265 + }, 1266 + }, 1267 + }; 1268 + 1269 + static struct clk_branch camss_csi1phy_clk = { 1270 + .halt_reg = 0x3134, 1271 + .clkr = { 1272 + .enable_reg = 0x3134, 1273 + .enable_mask = BIT(0), 1274 + .hw.init = &(struct clk_init_data){ 1275 + .name = "camss_csi1phy_clk", 1276 + .parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw }, 1277 + .num_parents = 1, 1278 + .ops = &clk_branch2_ops, 1279 + }, 1280 + }, 1281 + }; 1282 + 1283 + static struct clk_branch camss_csi1pix_clk = { 1284 + .halt_reg = 0x3154, 1285 + .clkr = { 1286 + .enable_reg = 0x3154, 1287 + .enable_mask = BIT(0), 1288 + .hw.init = &(struct clk_init_data){ 1289 + .name = "camss_csi1pix_clk", 1290 + .parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw }, 1291 + .num_parents = 1, 1292 + .ops = &clk_branch2_ops, 1293 + }, 1294 + }, 1295 + }; 1296 + 1297 + static struct clk_branch camss_csi1rdi_clk = { 1298 + .halt_reg = 0x3144, 1299 + .clkr = { 1300 + .enable_reg = 0x3144, 1301 + .enable_mask = BIT(0), 1302 + .hw.init = &(struct clk_init_data){ 1303 + .name = "camss_csi1rdi_clk", 1304 + .parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw }, 1305 + .num_parents = 1, 1306 + .ops = &clk_branch2_ops, 1307 + }, 1308 + }, 1309 + }; 1310 + 1311 + static struct clk_branch camss_csi2_ahb_clk = { 1312 + .halt_reg = 0x3188, 1313 + .clkr = { 1314 + .enable_reg = 0x3188, 1315 + .enable_mask = BIT(0), 1316 + .hw.init = &(struct clk_init_data){ 1317 + .name = "camss_csi2_ahb_clk", 1318 + .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1319 + .num_parents = 1, 1320 + .flags = CLK_SET_RATE_PARENT, 1321 + .ops = &clk_branch2_ops, 1322 + }, 1323 + }, 1324 + }; 1325 + 1326 + static struct clk_branch camss_csi2_clk = { 1327 + .halt_reg = 0x3184, 1328 + .clkr = { 1329 + .enable_reg = 0x3184, 1330 + .enable_mask = BIT(0), 1331 + .hw.init = &(struct clk_init_data){ 1332 + .name = "camss_csi2_clk", 1333 + .parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw }, 1334 + .num_parents = 1, 1335 + .ops = &clk_branch2_ops, 1336 + }, 1337 + }, 1338 + }; 1339 + 1340 + static struct clk_branch camss_csi2phy_clk = { 1341 + .halt_reg = 0x3194, 1342 + .clkr = { 1343 + .enable_reg = 0x3194, 1344 + .enable_mask = BIT(0), 1345 + .hw.init = &(struct clk_init_data){ 1346 + .name = "camss_csi2phy_clk", 1347 + .parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw }, 1348 + .num_parents = 1, 1349 + .ops = &clk_branch2_ops, 1350 + }, 1351 + }, 1352 + }; 1353 + 1354 + static struct clk_branch camss_csi2pix_clk = { 1355 + .halt_reg = 0x31b4, 1356 + .clkr = { 1357 + .enable_reg = 0x31b4, 1358 + .enable_mask = BIT(0), 1359 + .hw.init = &(struct clk_init_data){ 1360 + .name = "camss_csi2pix_clk", 1361 + .parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw }, 1362 + .num_parents = 1, 1363 + .ops = &clk_branch2_ops, 1364 + }, 1365 + }, 1366 + }; 1367 + 1368 + static struct clk_branch camss_csi2rdi_clk = { 1369 + .halt_reg = 0x31a4, 1370 + .clkr = { 1371 + .enable_reg = 0x31a4, 1372 + .enable_mask = BIT(0), 1373 + .hw.init = &(struct clk_init_data){ 1374 + .name = "camss_csi2rdi_clk", 1375 + .parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw }, 1376 + .num_parents = 1, 1377 + .ops = &clk_branch2_ops, 1378 + }, 1379 + }, 1380 + }; 1381 + 1382 + static struct clk_branch camss_csi3_ahb_clk = { 1383 + .halt_reg = 0x31e8, 1384 + .clkr = { 1385 + .enable_reg = 0x31e8, 1386 + .enable_mask = BIT(0), 1387 + .hw.init = &(struct clk_init_data){ 1388 + .name = "camss_csi3_ahb_clk", 1389 + .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1390 + .num_parents = 1, 1391 + .flags = CLK_SET_RATE_PARENT, 1392 + .ops = &clk_branch2_ops, 1393 + }, 1394 + }, 1395 + }; 1396 + 1397 + static struct clk_branch camss_csi3_clk = { 1398 + .halt_reg = 0x31e4, 1399 + .clkr = { 1400 + .enable_reg = 0x31e4, 1401 + .enable_mask = BIT(0), 1402 + .hw.init = &(struct clk_init_data){ 1403 + .name = "camss_csi3_clk", 1404 + .parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw }, 1405 + .num_parents = 1, 1406 + .ops = &clk_branch2_ops, 1407 + }, 1408 + }, 1409 + }; 1410 + 1411 + static struct clk_branch camss_csi3phy_clk = { 1412 + .halt_reg = 0x31f4, 1413 + .clkr = { 1414 + .enable_reg = 0x31f4, 1415 + .enable_mask = BIT(0), 1416 + .hw.init = &(struct clk_init_data){ 1417 + .name = "camss_csi3phy_clk", 1418 + .parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw }, 1419 + .num_parents = 1, 1420 + .ops = &clk_branch2_ops, 1421 + }, 1422 + }, 1423 + }; 1424 + 1425 + static struct clk_branch camss_csi3pix_clk = { 1426 + .halt_reg = 0x3214, 1427 + .clkr = { 1428 + .enable_reg = 0x3214, 1429 + .enable_mask = BIT(0), 1430 + .hw.init = &(struct clk_init_data){ 1431 + .name = "camss_csi3pix_clk", 1432 + .parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw }, 1433 + .num_parents = 1, 1434 + .ops = &clk_branch2_ops, 1435 + }, 1436 + }, 1437 + }; 1438 + 1439 + static struct clk_branch camss_csi3rdi_clk = { 1440 + .halt_reg = 0x3204, 1441 + .clkr = { 1442 + .enable_reg = 0x3204, 1443 + .enable_mask = BIT(0), 1444 + .hw.init = &(struct clk_init_data){ 1445 + .name = "camss_csi3rdi_clk", 1446 + .parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw }, 1447 + .num_parents = 1, 1448 + .ops = &clk_branch2_ops, 1449 + }, 1450 + }, 1451 + }; 1452 + 1453 + static struct clk_branch camss_csi_vfe0_clk = { 1454 + .halt_reg = 0x3704, 1455 + .clkr = { 1456 + .enable_reg = 0x3704, 1457 + .enable_mask = BIT(0), 1458 + .hw.init = &(struct clk_init_data){ 1459 + .name = "camss_csi_vfe0_clk", 1460 + .parent_hws = (const struct clk_hw *[]){ &vfe0_clk_src.clkr.hw }, 1461 + .num_parents = 1, 1462 + .ops = &clk_branch2_ops, 1463 + }, 1464 + }, 1465 + }; 1466 + 1467 + static struct clk_branch camss_csi_vfe1_clk = { 1468 + .halt_reg = 0x3714, 1469 + .clkr = { 1470 + .enable_reg = 0x3714, 1471 + .enable_mask = BIT(0), 1472 + .hw.init = &(struct clk_init_data){ 1473 + .name = "camss_csi_vfe1_clk", 1474 + .parent_hws = (const struct clk_hw *[]){ &vfe1_clk_src.clkr.hw }, 1475 + .num_parents = 1, 1476 + .ops = &clk_branch2_ops, 1477 + }, 1478 + }, 1479 + }; 1480 + 1481 + static struct clk_branch camss_gp0_clk = { 1482 + .halt_reg = 0x3444, 1483 + .clkr = { 1484 + .enable_reg = 0x3444, 1485 + .enable_mask = BIT(0), 1486 + .hw.init = &(struct clk_init_data){ 1487 + .name = "camss_gp0_clk", 1488 + .parent_hws = (const struct clk_hw *[]){ &mmss_gp0_clk_src.clkr.hw }, 1489 + .num_parents = 1, 1490 + .ops = &clk_branch2_ops, 1491 + }, 1492 + }, 1493 + }; 1494 + 1495 + static struct clk_branch camss_gp1_clk = { 1496 + .halt_reg = 0x3474, 1497 + .clkr = { 1498 + .enable_reg = 0x3474, 1499 + .enable_mask = BIT(0), 1500 + .hw.init = &(struct clk_init_data){ 1501 + .name = "camss_gp1_clk", 1502 + .parent_hws = (const struct clk_hw *[]){ &mmss_gp1_clk_src.clkr.hw }, 1503 + .num_parents = 1, 1504 + .ops = &clk_branch2_ops, 1505 + }, 1506 + }, 1507 + }; 1508 + 1509 + static struct clk_branch camss_ispif_ahb_clk = { 1510 + .halt_reg = 0x3224, 1511 + .clkr = { 1512 + .enable_reg = 0x3224, 1513 + .enable_mask = BIT(0), 1514 + .hw.init = &(struct clk_init_data){ 1515 + .name = "camss_ispif_ahb_clk", 1516 + .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1517 + .num_parents = 1, 1518 + .flags = CLK_SET_RATE_PARENT, 1519 + .ops = &clk_branch2_ops, 1520 + }, 1521 + }, 1522 + }; 1523 + 1524 + static struct clk_branch camss_jpeg_dma_clk = { 1525 + .halt_reg = 0x35c0, 1526 + .clkr = { 1527 + .enable_reg = 0x35c0, 1528 + .enable_mask = BIT(0), 1529 + .hw.init = &(struct clk_init_data){ 1530 + .name = "camss_jpeg_dma_clk", 1531 + .parent_hws = (const struct clk_hw *[]){ &jpeg_dma_clk_src.clkr.hw }, 1532 + .num_parents = 1, 1533 + .ops = &clk_branch2_ops, 1534 + }, 1535 + }, 1536 + }; 1537 + 1538 + static struct clk_branch camss_jpeg_jpeg0_clk = { 1539 + .halt_reg = 0x35a8, 1540 + .clkr = { 1541 + .enable_reg = 0x35a8, 1542 + .enable_mask = BIT(0), 1543 + .hw.init = &(struct clk_init_data){ 1544 + .name = "camss_jpeg_jpeg0_clk", 1545 + .parent_hws = (const struct clk_hw *[]){ &jpeg0_clk_src.clkr.hw }, 1546 + .num_parents = 1, 1547 + .ops = &clk_branch2_ops, 1548 + }, 1549 + }, 1550 + }; 1551 + 1552 + static struct clk_branch camss_jpeg_jpeg1_clk = { 1553 + .halt_reg = 0x35ac, 1554 + .clkr = { 1555 + .enable_reg = 0x35ac, 1556 + .enable_mask = BIT(0), 1557 + .hw.init = &(struct clk_init_data){ 1558 + .name = "camss_jpeg_jpeg1_clk", 1559 + .parent_hws = (const struct clk_hw *[]){ &jpeg1_clk_src.clkr.hw }, 1560 + .num_parents = 1, 1561 + .ops = &clk_branch2_ops, 1562 + }, 1563 + }, 1564 + }; 1565 + 1566 + static struct clk_branch camss_jpeg_jpeg2_clk = { 1567 + .halt_reg = 0x35b0, 1568 + .clkr = { 1569 + .enable_reg = 0x35b0, 1570 + .enable_mask = BIT(0), 1571 + .hw.init = &(struct clk_init_data){ 1572 + .name = "camss_jpeg_jpeg2_clk", 1573 + .parent_hws = (const struct clk_hw *[]){ &jpeg2_clk_src.clkr.hw }, 1574 + .num_parents = 1, 1575 + .ops = &clk_branch2_ops, 1576 + }, 1577 + }, 1578 + }; 1579 + 1580 + static struct clk_branch camss_jpeg_jpeg_ahb_clk = { 1581 + .halt_reg = 0x35b4, 1582 + .clkr = { 1583 + .enable_reg = 0x35b4, 1584 + .enable_mask = BIT(0), 1585 + .hw.init = &(struct clk_init_data){ 1586 + .name = "camss_jpeg_jpeg_ahb_clk", 1587 + .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1588 + .num_parents = 1, 1589 + .flags = CLK_SET_RATE_PARENT, 1590 + .ops = &clk_branch2_ops, 1591 + }, 1592 + }, 1593 + }; 1594 + 1595 + static struct clk_branch camss_jpeg_jpeg_axi_clk = { 1596 + .halt_reg = 0x35b8, 1597 + .clkr = { 1598 + .enable_reg = 0x35b8, 1599 + .enable_mask = BIT(0), 1600 + .hw.init = &(struct clk_init_data){ 1601 + .name = "camss_jpeg_jpeg_axi_clk", 1602 + .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw }, 1603 + .num_parents = 1, 1604 + .ops = &clk_branch2_ops, 1605 + }, 1606 + }, 1607 + }; 1608 + 1609 + static struct clk_branch camss_mclk0_clk = { 1610 + .halt_reg = 0x3384, 1611 + .clkr = { 1612 + .enable_reg = 0x3384, 1613 + .enable_mask = BIT(0), 1614 + .hw.init = &(struct clk_init_data){ 1615 + .name = "camss_mclk0_clk", 1616 + .parent_hws = (const struct clk_hw *[]){ &mclk0_clk_src.clkr.hw }, 1617 + .num_parents = 1, 1618 + .ops = &clk_branch2_ops, 1619 + }, 1620 + }, 1621 + }; 1622 + 1623 + static struct clk_branch camss_mclk1_clk = { 1624 + .halt_reg = 0x33b4, 1625 + .clkr = { 1626 + .enable_reg = 0x33b4, 1627 + .enable_mask = BIT(0), 1628 + .hw.init = &(struct clk_init_data){ 1629 + .name = "camss_mclk1_clk", 1630 + .parent_hws = (const struct clk_hw *[]){ &mclk1_clk_src.clkr.hw }, 1631 + .num_parents = 1, 1632 + .ops = &clk_branch2_ops, 1633 + }, 1634 + }, 1635 + }; 1636 + 1637 + static struct clk_branch camss_mclk2_clk = { 1638 + .halt_reg = 0x33e4, 1639 + .clkr = { 1640 + .enable_reg = 0x33e4, 1641 + .enable_mask = BIT(0), 1642 + .hw.init = &(struct clk_init_data){ 1643 + .name = "camss_mclk2_clk", 1644 + .parent_hws = (const struct clk_hw *[]){ &mclk2_clk_src.clkr.hw }, 1645 + .num_parents = 1, 1646 + .ops = &clk_branch2_ops, 1647 + }, 1648 + }, 1649 + }; 1650 + 1651 + static struct clk_branch camss_mclk3_clk = { 1652 + .halt_reg = 0x3414, 1653 + .clkr = { 1654 + .enable_reg = 0x3414, 1655 + .enable_mask = BIT(0), 1656 + .hw.init = &(struct clk_init_data){ 1657 + .name = "camss_mclk3_clk", 1658 + .parent_hws = (const struct clk_hw *[]){ &mclk3_clk_src.clkr.hw }, 1659 + .num_parents = 1, 1660 + .ops = &clk_branch2_ops, 1661 + }, 1662 + }, 1663 + }; 1664 + 1665 + static struct clk_branch camss_micro_ahb_clk = { 1666 + .halt_reg = 0x3494, 1667 + .clkr = { 1668 + .enable_reg = 0x3494, 1669 + .enable_mask = BIT(0), 1670 + .hw.init = &(struct clk_init_data){ 1671 + .name = "camss_micro_ahb_clk", 1672 + .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1673 + .num_parents = 1, 1674 + .flags = CLK_SET_RATE_PARENT, 1675 + .ops = &clk_branch2_ops, 1676 + }, 1677 + }, 1678 + }; 1679 + 1680 + static struct clk_branch camss_phy0_csi0phytimer_clk = { 1681 + .halt_reg = 0x3024, 1682 + .clkr = { 1683 + .enable_reg = 0x3024, 1684 + .enable_mask = BIT(0), 1685 + .hw.init = &(struct clk_init_data){ 1686 + .name = "camss_phy0_csi0phytimer_clk", 1687 + .parent_hws = (const struct clk_hw *[]){ &csi0phytimer_clk_src.clkr.hw }, 1688 + .num_parents = 1, 1689 + .ops = &clk_branch2_ops, 1690 + }, 1691 + }, 1692 + }; 1693 + 1694 + static struct clk_branch camss_phy1_csi1phytimer_clk = { 1695 + .halt_reg = 0x3054, 1696 + .clkr = { 1697 + .enable_reg = 0x3054, 1698 + .enable_mask = BIT(0), 1699 + .hw.init = &(struct clk_init_data){ 1700 + .name = "camss_phy1_csi1phytimer_clk", 1701 + .parent_hws = (const struct clk_hw *[]){ &csi1phytimer_clk_src.clkr.hw }, 1702 + .num_parents = 1, 1703 + .ops = &clk_branch2_ops, 1704 + }, 1705 + }, 1706 + }; 1707 + 1708 + static struct clk_branch camss_phy2_csi2phytimer_clk = { 1709 + .halt_reg = 0x3084, 1710 + .clkr = { 1711 + .enable_reg = 0x3084, 1712 + .enable_mask = BIT(0), 1713 + .hw.init = &(struct clk_init_data){ 1714 + .name = "camss_phy2_csi2phytimer_clk", 1715 + .parent_hws = (const struct clk_hw *[]){ &csi2phytimer_clk_src.clkr.hw }, 1716 + .num_parents = 1, 1717 + .ops = &clk_branch2_ops, 1718 + }, 1719 + }, 1720 + }; 1721 + 1722 + static struct clk_branch camss_top_ahb_clk = { 1723 + .halt_reg = 0x3484, 1724 + .clkr = { 1725 + .enable_reg = 0x3484, 1726 + .enable_mask = BIT(0), 1727 + .hw.init = &(struct clk_init_data){ 1728 + .name = "camss_top_ahb_clk", 1729 + .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1730 + .num_parents = 1, 1731 + .flags = CLK_SET_RATE_PARENT, 1732 + .ops = &clk_branch2_ops, 1733 + }, 1734 + }, 1735 + }; 1736 + 1737 + static struct clk_branch camss_vfe_vfe0_clk = { 1738 + .halt_reg = 0x36a8, 1739 + .clkr = { 1740 + .enable_reg = 0x36a8, 1741 + .enable_mask = BIT(0), 1742 + .hw.init = &(struct clk_init_data){ 1743 + .name = "camss_vfe_vfe0_clk", 1744 + .parent_hws = (const struct clk_hw *[]){ &vfe0_clk_src.clkr.hw }, 1745 + .num_parents = 1, 1746 + .ops = &clk_branch2_ops, 1747 + }, 1748 + }, 1749 + }; 1750 + 1751 + static struct clk_branch camss_vfe_vfe1_clk = { 1752 + .halt_reg = 0x36ac, 1753 + .clkr = { 1754 + .enable_reg = 0x36ac, 1755 + .enable_mask = BIT(0), 1756 + .hw.init = &(struct clk_init_data){ 1757 + .name = "camss_vfe_vfe1_clk", 1758 + .parent_hws = (const struct clk_hw *[]){ &vfe1_clk_src.clkr.hw }, 1759 + .num_parents = 1, 1760 + .ops = &clk_branch2_ops, 1761 + }, 1762 + }, 1763 + }; 1764 + 1765 + static struct clk_branch camss_vfe_vfe_ahb_clk = { 1766 + .halt_reg = 0x36b8, 1767 + .clkr = { 1768 + .enable_reg = 0x36b8, 1769 + .enable_mask = BIT(0), 1770 + .hw.init = &(struct clk_init_data){ 1771 + .name = "camss_vfe_vfe_ahb_clk", 1772 + .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1773 + .num_parents = 1, 1774 + .flags = CLK_SET_RATE_PARENT, 1775 + .ops = &clk_branch2_ops, 1776 + }, 1777 + }, 1778 + }; 1779 + 1780 + static struct clk_branch camss_vfe_vfe_axi_clk = { 1781 + .halt_reg = 0x36bc, 1782 + .clkr = { 1783 + .enable_reg = 0x36bc, 1784 + .enable_mask = BIT(0), 1785 + .hw.init = &(struct clk_init_data){ 1786 + .name = "camss_vfe_vfe_axi_clk", 1787 + .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw }, 1788 + .num_parents = 1, 1789 + .ops = &clk_branch2_ops, 1790 + }, 1791 + }, 1792 + }; 1793 + 1794 + static struct clk_branch fd_ahb_clk = { 1795 + .halt_reg = 0x3b74, 1796 + .clkr = { 1797 + .enable_reg = 0x3b74, 1798 + .enable_mask = BIT(0), 1799 + .hw.init = &(struct clk_init_data){ 1800 + .name = "fd_ahb_clk", 1801 + .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1802 + .num_parents = 1, 1803 + .ops = &clk_branch2_ops, 1804 + }, 1805 + }, 1806 + }; 1807 + 1808 + static struct clk_branch fd_axi_clk = { 1809 + .halt_reg = 0x3b70, 1810 + .clkr = { 1811 + .enable_reg = 0x3b70, 1812 + .enable_mask = BIT(0), 1813 + .hw.init = &(struct clk_init_data){ 1814 + .name = "fd_axi_clk", 1815 + .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw }, 1816 + .num_parents = 1, 1817 + .ops = &clk_branch2_ops, 1818 + }, 1819 + }, 1820 + }; 1821 + 1822 + static struct clk_branch fd_core_clk = { 1823 + .halt_reg = 0x3b68, 1824 + .clkr = { 1825 + .enable_reg = 0x3b68, 1826 + .enable_mask = BIT(0), 1827 + .hw.init = &(struct clk_init_data){ 1828 + .name = "fd_core_clk", 1829 + .parent_hws = (const struct clk_hw *[]){ &fd_core_clk_src.clkr.hw }, 1830 + .num_parents = 1, 1831 + .ops = &clk_branch2_ops, 1832 + }, 1833 + }, 1834 + }; 1835 + 1836 + static struct clk_branch fd_core_uar_clk = { 1837 + .halt_reg = 0x3b6c, 1838 + .clkr = { 1839 + .enable_reg = 0x3b6c, 1840 + .enable_mask = BIT(0), 1841 + .hw.init = &(struct clk_init_data){ 1842 + .name = "fd_core_uar_clk", 1843 + .parent_hws = (const struct clk_hw *[]){ &fd_core_clk_src.clkr.hw }, 1844 + .num_parents = 1, 1845 + .ops = &clk_branch2_ops, 1846 + }, 1847 + }, 1848 + }; 1849 + 1850 + static struct clk_branch mdss_ahb_clk = { 1851 + .halt_reg = 0x2308, 1852 + .halt_check = BRANCH_HALT, 1853 + .clkr = { 1854 + .enable_reg = 0x2308, 1855 + .enable_mask = BIT(0), 1856 + .hw.init = &(struct clk_init_data){ 1857 + .name = "mdss_ahb_clk", 1858 + .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1859 + .num_parents = 1, 1860 + .flags = CLK_SET_RATE_PARENT, 1861 + .ops = &clk_branch2_ops, 1862 + }, 1863 + }, 1864 + }; 1865 + 1866 + static struct clk_branch mdss_axi_clk = { 1867 + .halt_reg = 0x2310, 1868 + .clkr = { 1869 + .enable_reg = 0x2310, 1870 + .enable_mask = BIT(0), 1871 + .hw.init = &(struct clk_init_data){ 1872 + .name = "mdss_axi_clk", 1873 + .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw }, 1874 + .num_parents = 1, 1875 + .flags = CLK_SET_RATE_PARENT, 1876 + .ops = &clk_branch2_ops, 1877 + }, 1878 + }, 1879 + }; 1880 + 1881 + static struct clk_branch mdss_byte0_clk = { 1882 + .halt_reg = 0x233c, 1883 + .clkr = { 1884 + .enable_reg = 0x233c, 1885 + .enable_mask = BIT(0), 1886 + .hw.init = &(struct clk_init_data){ 1887 + .name = "mdss_byte0_clk", 1888 + .parent_hws = (const struct clk_hw *[]){ &byte0_clk_src.clkr.hw }, 1889 + .num_parents = 1, 1890 + .flags = CLK_SET_RATE_PARENT, 1891 + .ops = &clk_branch2_ops, 1892 + }, 1893 + }, 1894 + }; 1895 + 1896 + static struct clk_branch mdss_byte1_clk = { 1897 + .halt_reg = 0x2340, 1898 + .clkr = { 1899 + .enable_reg = 0x2340, 1900 + .enable_mask = BIT(0), 1901 + .hw.init = &(struct clk_init_data){ 1902 + .name = "mdss_byte1_clk", 1903 + .parent_hws = (const struct clk_hw *[]){ &byte1_clk_src.clkr.hw }, 1904 + .num_parents = 1, 1905 + .flags = CLK_SET_RATE_PARENT, 1906 + .ops = &clk_branch2_ops, 1907 + }, 1908 + }, 1909 + }; 1910 + 1911 + static struct clk_branch mdss_esc0_clk = { 1912 + .halt_reg = 0x2344, 1913 + .clkr = { 1914 + .enable_reg = 0x2344, 1915 + .enable_mask = BIT(0), 1916 + .hw.init = &(struct clk_init_data){ 1917 + .name = "mdss_esc0_clk", 1918 + .parent_hws = (const struct clk_hw *[]){ &esc0_clk_src.clkr.hw }, 1919 + .num_parents = 1, 1920 + .flags = CLK_SET_RATE_PARENT, 1921 + .ops = &clk_branch2_ops, 1922 + }, 1923 + }, 1924 + }; 1925 + 1926 + static struct clk_branch mdss_esc1_clk = { 1927 + .halt_reg = 0x2348, 1928 + .clkr = { 1929 + .enable_reg = 0x2348, 1930 + .enable_mask = BIT(0), 1931 + .hw.init = &(struct clk_init_data){ 1932 + .name = "mdss_esc1_clk", 1933 + .parent_hws = (const struct clk_hw *[]){ &esc1_clk_src.clkr.hw }, 1934 + .num_parents = 1, 1935 + .flags = CLK_SET_RATE_PARENT, 1936 + .ops = &clk_branch2_ops, 1937 + }, 1938 + }, 1939 + }; 1940 + 1941 + static struct clk_branch mdss_extpclk_clk = { 1942 + .halt_reg = 0x2324, 1943 + .clkr = { 1944 + .enable_reg = 0x2324, 1945 + .enable_mask = BIT(0), 1946 + .hw.init = &(struct clk_init_data){ 1947 + .name = "mdss_extpclk_clk", 1948 + .parent_hws = (const struct clk_hw *[]){ &extpclk_clk_src.clkr.hw }, 1949 + .num_parents = 1, 1950 + .flags = CLK_SET_RATE_PARENT, 1951 + .ops = &clk_branch2_ops, 1952 + }, 1953 + }, 1954 + }; 1955 + 1956 + static struct clk_branch mdss_hdmi_ahb_clk = { 1957 + .halt_reg = 0x230c, 1958 + .clkr = { 1959 + .enable_reg = 0x230c, 1960 + .enable_mask = BIT(0), 1961 + .hw.init = &(struct clk_init_data){ 1962 + .name = "mdss_hdmi_ahb_clk", 1963 + .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1964 + .num_parents = 1, 1965 + .flags = CLK_SET_RATE_PARENT, 1966 + .ops = &clk_branch2_ops, 1967 + }, 1968 + }, 1969 + }; 1970 + 1971 + static struct clk_branch mdss_hdmi_clk = { 1972 + .halt_reg = 0x2338, 1973 + .clkr = { 1974 + .enable_reg = 0x2338, 1975 + .enable_mask = BIT(0), 1976 + .hw.init = &(struct clk_init_data){ 1977 + .name = "mdss_hdmi_clk", 1978 + .parent_hws = (const struct clk_hw *[]){ &hdmi_clk_src.clkr.hw }, 1979 + .num_parents = 1, 1980 + .flags = CLK_SET_RATE_PARENT, 1981 + .ops = &clk_branch2_ops, 1982 + }, 1983 + }, 1984 + }; 1985 + 1986 + static struct clk_branch mdss_mdp_clk = { 1987 + .halt_reg = 0x231c, 1988 + .clkr = { 1989 + .enable_reg = 0x231c, 1990 + .enable_mask = BIT(0), 1991 + .hw.init = &(struct clk_init_data){ 1992 + .name = "mdss_mdp_clk", 1993 + .parent_hws = (const struct clk_hw *[]){ &mdp_clk_src.clkr.hw }, 1994 + .num_parents = 1, 1995 + .flags = CLK_SET_RATE_PARENT, 1996 + .ops = &clk_branch2_ops, 1997 + }, 1998 + }, 1999 + }; 2000 + 2001 + static struct clk_branch mdss_pclk0_clk = { 2002 + .halt_reg = 0x2314, 2003 + .clkr = { 2004 + .enable_reg = 0x2314, 2005 + .enable_mask = BIT(0), 2006 + .hw.init = &(struct clk_init_data){ 2007 + .name = "mdss_pclk0_clk", 2008 + .parent_hws = (const struct clk_hw *[]){ &pclk0_clk_src.clkr.hw }, 2009 + .num_parents = 1, 2010 + .flags = CLK_SET_RATE_PARENT, 2011 + .ops = &clk_branch2_ops, 2012 + }, 2013 + }, 2014 + }; 2015 + 2016 + static struct clk_branch mdss_pclk1_clk = { 2017 + .halt_reg = 0x2318, 2018 + .clkr = { 2019 + .enable_reg = 0x2318, 2020 + .enable_mask = BIT(0), 2021 + .hw.init = &(struct clk_init_data){ 2022 + .name = "mdss_pclk1_clk", 2023 + .parent_hws = (const struct clk_hw *[]){ &pclk1_clk_src.clkr.hw }, 2024 + .num_parents = 1, 2025 + .flags = CLK_SET_RATE_PARENT, 2026 + .ops = &clk_branch2_ops, 2027 + }, 2028 + }, 2029 + }; 2030 + 2031 + static struct clk_branch mdss_vsync_clk = { 2032 + .halt_reg = 0x2328, 2033 + .clkr = { 2034 + .enable_reg = 0x2328, 2035 + .enable_mask = BIT(0), 2036 + .hw.init = &(struct clk_init_data){ 2037 + .name = "mdss_vsync_clk", 2038 + .parent_hws = (const struct clk_hw *[]){ &vsync_clk_src.clkr.hw }, 2039 + .num_parents = 1, 2040 + .flags = CLK_SET_RATE_PARENT, 2041 + .ops = &clk_branch2_ops, 2042 + }, 2043 + }, 2044 + }; 2045 + 2046 + static struct clk_branch mmss_misc_ahb_clk = { 2047 + .halt_reg = 0x502c, 2048 + .clkr = { 2049 + .enable_reg = 0x502c, 2050 + .enable_mask = BIT(0), 2051 + .hw.init = &(struct clk_init_data){ 2052 + .name = "mmss_misc_ahb_clk", 2053 + .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 2054 + .num_parents = 1, 2055 + .flags = CLK_SET_RATE_PARENT, 2056 + .ops = &clk_branch2_ops, 2057 + }, 2058 + }, 2059 + }; 2060 + 2061 + static struct clk_branch mmss_mmssnoc_axi_clk = { 2062 + .halt_reg = 0x506c, 2063 + .clkr = { 2064 + .enable_reg = 0x506c, 2065 + .enable_mask = BIT(0), 2066 + .hw.init = &(struct clk_init_data){ 2067 + .name = "mmss_mmssnoc_axi_clk", 2068 + .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw }, 2069 + .num_parents = 1, 2070 + /* Gating this clock will wreck havoc among MMSS! */ 2071 + .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 2072 + .ops = &clk_branch2_ops, 2073 + }, 2074 + }, 2075 + }; 2076 + 2077 + static struct clk_branch mmss_s0_axi_clk = { 2078 + .halt_reg = 0x5064, 2079 + .clkr = { 2080 + .enable_reg = 0x5064, 2081 + .enable_mask = BIT(0), 2082 + .hw.init = &(struct clk_init_data){ 2083 + .name = "mmss_s0_axi_clk", 2084 + .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw, }, 2085 + .num_parents = 1, 2086 + .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 2087 + .ops = &clk_branch2_ops, 2088 + }, 2089 + }, 2090 + }; 2091 + 2092 + static struct clk_branch ocmemcx_ocmemnoc_clk = { 2093 + .halt_reg = 0x4058, 2094 + .clkr = { 2095 + .enable_reg = 0x4058, 2096 + .enable_mask = BIT(0), 2097 + .hw.init = &(struct clk_init_data){ 2098 + .name = "ocmemcx_ocmemnoc_clk", 2099 + .parent_hws = (const struct clk_hw *[]){ &ocmemnoc_clk_src.clkr.hw }, 2100 + .num_parents = 1, 2101 + .flags = CLK_SET_RATE_PARENT, 2102 + .ops = &clk_branch2_ops, 2103 + }, 2104 + }, 2105 + }; 2106 + 2107 + static struct clk_branch oxili_gfx3d_clk = { 2108 + .halt_reg = 0x4028, 2109 + .clkr = { 2110 + .enable_reg = 0x4028, 2111 + .enable_mask = BIT(0), 2112 + .hw.init = &(struct clk_init_data){ 2113 + .name = "oxili_gfx3d_clk", 2114 + .parent_data = &(const struct clk_parent_data){ 2115 + .fw_name = "oxili_gfx3d_clk_src", 2116 + .name = "oxili_gfx3d_clk_src" 2117 + }, 2118 + .num_parents = 1, 2119 + .flags = CLK_SET_RATE_PARENT, 2120 + .ops = &clk_branch2_ops, 2121 + }, 2122 + }, 2123 + }; 2124 + 2125 + static struct clk_branch oxili_rbbmtimer_clk = { 2126 + .halt_reg = 0x40b0, 2127 + .clkr = { 2128 + .enable_reg = 0x40b0, 2129 + .enable_mask = BIT(0), 2130 + .hw.init = &(struct clk_init_data){ 2131 + .name = "oxili_rbbmtimer_clk", 2132 + .parent_hws = (const struct clk_hw *[]){ &rbbmtimer_clk_src.clkr.hw }, 2133 + .num_parents = 1, 2134 + .flags = CLK_SET_RATE_PARENT, 2135 + .ops = &clk_branch2_ops, 2136 + }, 2137 + }, 2138 + }; 2139 + 2140 + static struct clk_branch oxilicx_ahb_clk = { 2141 + .halt_reg = 0x403c, 2142 + .clkr = { 2143 + .enable_reg = 0x403c, 2144 + .enable_mask = BIT(0), 2145 + .hw.init = &(struct clk_init_data){ 2146 + .name = "oxilicx_ahb_clk", 2147 + .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 2148 + .num_parents = 1, 2149 + .flags = CLK_SET_RATE_PARENT, 2150 + .ops = &clk_branch2_ops, 2151 + }, 2152 + }, 2153 + }; 2154 + 2155 + static struct clk_branch venus0_ahb_clk = { 2156 + .halt_reg = 0x1030, 2157 + .clkr = { 2158 + .enable_reg = 0x1030, 2159 + .enable_mask = BIT(0), 2160 + .hw.init = &(struct clk_init_data){ 2161 + .name = "venus0_ahb_clk", 2162 + .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 2163 + .num_parents = 1, 2164 + .flags = CLK_SET_RATE_PARENT, 2165 + .ops = &clk_branch2_ops, 2166 + }, 2167 + }, 2168 + }; 2169 + 2170 + static struct clk_branch venus0_axi_clk = { 2171 + .halt_reg = 0x1034, 2172 + .clkr = { 2173 + .enable_reg = 0x1034, 2174 + .enable_mask = BIT(0), 2175 + .hw.init = &(struct clk_init_data){ 2176 + .name = "venus0_axi_clk", 2177 + .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw }, 2178 + .num_parents = 1, 2179 + .ops = &clk_branch2_ops, 2180 + }, 2181 + }, 2182 + }; 2183 + 2184 + static struct clk_branch venus0_ocmemnoc_clk = { 2185 + .halt_reg = 0x1038, 2186 + .clkr = { 2187 + .enable_reg = 0x1038, 2188 + .enable_mask = BIT(0), 2189 + .hw.init = &(struct clk_init_data){ 2190 + .name = "venus0_ocmemnoc_clk", 2191 + .parent_hws = (const struct clk_hw *[]){ &ocmemnoc_clk_src.clkr.hw }, 2192 + .num_parents = 1, 2193 + .flags = CLK_SET_RATE_PARENT, 2194 + .ops = &clk_branch2_ops, 2195 + }, 2196 + }, 2197 + }; 2198 + 2199 + static struct clk_branch venus0_vcodec0_clk = { 2200 + .halt_reg = 0x1028, 2201 + .clkr = { 2202 + .enable_reg = 0x1028, 2203 + .enable_mask = BIT(0), 2204 + .hw.init = &(struct clk_init_data){ 2205 + .name = "venus0_vcodec0_clk", 2206 + .parent_hws = (const struct clk_hw *[]){ &vcodec0_clk_src.clkr.hw }, 2207 + .num_parents = 1, 2208 + .flags = CLK_SET_RATE_PARENT, 2209 + .ops = &clk_branch2_ops, 2210 + }, 2211 + }, 2212 + }; 2213 + 2214 + static struct clk_branch venus0_core0_vcodec_clk = { 2215 + .halt_reg = 0x1048, 2216 + .clkr = { 2217 + .enable_reg = 0x1048, 2218 + .enable_mask = BIT(0), 2219 + .hw.init = &(struct clk_init_data){ 2220 + .name = "venus0_core0_vcodec_clk", 2221 + .parent_hws = (const struct clk_hw *[]){ &vcodec0_clk_src.clkr.hw }, 2222 + .num_parents = 1, 2223 + .flags = CLK_SET_RATE_PARENT, 2224 + .ops = &clk_branch2_ops, 2225 + }, 2226 + }, 2227 + }; 2228 + 2229 + static struct clk_branch venus0_core1_vcodec_clk = { 2230 + .halt_reg = 0x104c, 2231 + .clkr = { 2232 + .enable_reg = 0x104c, 2233 + .enable_mask = BIT(0), 2234 + .hw.init = &(struct clk_init_data){ 2235 + .name = "venus0_core1_vcodec_clk", 2236 + .parent_hws = (const struct clk_hw *[]){ &vcodec0_clk_src.clkr.hw }, 2237 + .num_parents = 1, 2238 + .flags = CLK_SET_RATE_PARENT, 2239 + .ops = &clk_branch2_ops, 2240 + }, 2241 + }, 2242 + }; 2243 + 2244 + static struct clk_branch venus0_core2_vcodec_clk = { 2245 + .halt_reg = 0x1054, 2246 + .clkr = { 2247 + .enable_reg = 0x1054, 2248 + .enable_mask = BIT(0), 2249 + .hw.init = &(struct clk_init_data){ 2250 + .name = "venus0_core2_vcodec_clk", 2251 + .parent_hws = (const struct clk_hw *[]){ &vcodec0_clk_src.clkr.hw }, 2252 + .num_parents = 1, 2253 + .flags = CLK_SET_RATE_PARENT, 2254 + .ops = &clk_branch2_ops, 2255 + }, 2256 + }, 2257 + }; 2258 + 2259 + static struct gdsc venus_gdsc = { 2260 + .gdscr = 0x1024, 2261 + .cxcs = (unsigned int []){ 0x1038, 0x1034, 0x1048 }, 2262 + .cxc_count = 3, 2263 + .pd = { 2264 + .name = "venus_gdsc", 2265 + }, 2266 + .pwrsts = PWRSTS_OFF_ON, 2267 + }; 2268 + 2269 + static struct gdsc venus_core0_gdsc = { 2270 + .gdscr = 0x1040, 2271 + .cxcs = (unsigned int []){ 0x1048 }, 2272 + .cxc_count = 1, 2273 + .pd = { 2274 + .name = "venus_core0_gdsc", 2275 + }, 2276 + .pwrsts = PWRSTS_OFF_ON, 2277 + .flags = HW_CTRL, 2278 + }; 2279 + 2280 + static struct gdsc venus_core1_gdsc = { 2281 + .gdscr = 0x1044, 2282 + .cxcs = (unsigned int []){ 0x104c }, 2283 + .cxc_count = 1, 2284 + .pd = { 2285 + .name = "venus_core1_gdsc", 2286 + }, 2287 + .pwrsts = PWRSTS_OFF_ON, 2288 + .flags = HW_CTRL, 2289 + }; 2290 + 2291 + static struct gdsc venus_core2_gdsc = { 2292 + .gdscr = 0x1050, 2293 + .cxcs = (unsigned int []){ 0x1054 }, 2294 + .cxc_count = 1, 2295 + .pd = { 2296 + .name = "venus_core2_gdsc", 2297 + }, 2298 + .pwrsts = PWRSTS_OFF_ON, 2299 + .flags = HW_CTRL, 2300 + }; 2301 + 2302 + static struct gdsc mdss_gdsc = { 2303 + .gdscr = 0x2304, 2304 + .cxcs = (unsigned int []){ 0x2310, 0x231c }, 2305 + .cxc_count = 2, 2306 + .pd = { 2307 + .name = "mdss_gdsc", 2308 + }, 2309 + .pwrsts = PWRSTS_OFF_ON, 2310 + }; 2311 + 2312 + static struct gdsc camss_top_gdsc = { 2313 + .gdscr = 0x34a0, 2314 + .cxcs = (unsigned int []){ 0x3704, 0x3714, 0x3494 }, 2315 + .cxc_count = 3, 2316 + .pd = { 2317 + .name = "camss_top_gdsc", 2318 + }, 2319 + .pwrsts = PWRSTS_OFF_ON, 2320 + }; 2321 + 2322 + static struct gdsc jpeg_gdsc = { 2323 + .gdscr = 0x35a4, 2324 + .cxcs = (unsigned int []){ 0x35a8 }, 2325 + .cxc_count = 1, 2326 + .pd = { 2327 + .name = "jpeg_gdsc", 2328 + }, 2329 + .parent = &camss_top_gdsc.pd, 2330 + .pwrsts = PWRSTS_OFF_ON, 2331 + }; 2332 + 2333 + static struct gdsc vfe_gdsc = { 2334 + .gdscr = 0x36a4, 2335 + .cxcs = (unsigned int []){ 0x36bc }, 2336 + .cxc_count = 1, 2337 + .pd = { 2338 + .name = "vfe_gdsc", 2339 + }, 2340 + .parent = &camss_top_gdsc.pd, 2341 + .pwrsts = PWRSTS_OFF_ON, 2342 + }; 2343 + 2344 + static struct gdsc cpp_gdsc = { 2345 + .gdscr = 0x36d4, 2346 + .cxcs = (unsigned int []){ 0x36c4, 0x36b0 }, 2347 + .cxc_count = 2, 2348 + .pd = { 2349 + .name = "cpp_gdsc", 2350 + }, 2351 + .parent = &camss_top_gdsc.pd, 2352 + .pwrsts = PWRSTS_OFF_ON, 2353 + }; 2354 + 2355 + static struct gdsc fd_gdsc = { 2356 + .gdscr = 0x3b64, 2357 + .cxcs = (unsigned int []){ 0x3b70, 0x3b68 }, 2358 + .pd = { 2359 + .name = "fd_gdsc", 2360 + }, 2361 + .pwrsts = PWRSTS_OFF_ON, 2362 + }; 2363 + 2364 + static struct gdsc oxili_cx_gdsc = { 2365 + .gdscr = 0x4034, 2366 + .pd = { 2367 + .name = "oxili_cx_gdsc", 2368 + }, 2369 + .pwrsts = PWRSTS_OFF_ON, 2370 + .flags = VOTABLE, 2371 + }; 2372 + 2373 + static struct gdsc oxili_gx_gdsc = { 2374 + .gdscr = 0x4024, 2375 + .cxcs = (unsigned int []){ 0x4028 }, 2376 + .cxc_count = 1, 2377 + .pd = { 2378 + .name = "oxili_gx_gdsc", 2379 + }, 2380 + .pwrsts = PWRSTS_OFF_ON, 2381 + .parent = &oxili_cx_gdsc.pd, 2382 + .flags = CLAMP_IO, 2383 + .supply = "VDD_GFX", 2384 + }; 2385 + 2386 + static struct clk_regmap *mmcc_msm8994_clocks[] = { 2387 + [MMPLL0_EARLY] = &mmpll0_early.clkr, 2388 + [MMPLL0_PLL] = &mmpll0.clkr, 2389 + [MMPLL1_EARLY] = &mmpll1_early.clkr, 2390 + [MMPLL1_PLL] = &mmpll1.clkr, 2391 + [MMPLL3_EARLY] = &mmpll3_early.clkr, 2392 + [MMPLL3_PLL] = &mmpll3.clkr, 2393 + [MMPLL4_EARLY] = &mmpll4_early.clkr, 2394 + [MMPLL4_PLL] = &mmpll4.clkr, 2395 + [MMPLL5_EARLY] = &mmpll5_early.clkr, 2396 + [MMPLL5_PLL] = &mmpll5.clkr, 2397 + [AHB_CLK_SRC] = &ahb_clk_src.clkr, 2398 + [AXI_CLK_SRC] = &axi_clk_src.clkr, 2399 + [CSI0_CLK_SRC] = &csi0_clk_src.clkr, 2400 + [CSI1_CLK_SRC] = &csi1_clk_src.clkr, 2401 + [CSI2_CLK_SRC] = &csi2_clk_src.clkr, 2402 + [CSI3_CLK_SRC] = &csi3_clk_src.clkr, 2403 + [VFE0_CLK_SRC] = &vfe0_clk_src.clkr, 2404 + [VFE1_CLK_SRC] = &vfe1_clk_src.clkr, 2405 + [CPP_CLK_SRC] = &cpp_clk_src.clkr, 2406 + [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr, 2407 + [JPEG1_CLK_SRC] = &jpeg1_clk_src.clkr, 2408 + [JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr, 2409 + [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr, 2410 + [FD_CORE_CLK_SRC] = &fd_core_clk_src.clkr, 2411 + [MDP_CLK_SRC] = &mdp_clk_src.clkr, 2412 + [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr, 2413 + [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr, 2414 + [OCMEMNOC_CLK_SRC] = &ocmemnoc_clk_src.clkr, 2415 + [CCI_CLK_SRC] = &cci_clk_src.clkr, 2416 + [MMSS_GP0_CLK_SRC] = &mmss_gp0_clk_src.clkr, 2417 + [MMSS_GP1_CLK_SRC] = &mmss_gp1_clk_src.clkr, 2418 + [JPEG_DMA_CLK_SRC] = &jpeg_dma_clk_src.clkr, 2419 + [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr, 2420 + [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr, 2421 + [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr, 2422 + [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr, 2423 + [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr, 2424 + [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr, 2425 + [BYTE0_CLK_SRC] = &byte0_clk_src.clkr, 2426 + [BYTE1_CLK_SRC] = &byte1_clk_src.clkr, 2427 + [ESC0_CLK_SRC] = &esc0_clk_src.clkr, 2428 + [ESC1_CLK_SRC] = &esc1_clk_src.clkr, 2429 + [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr, 2430 + [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr, 2431 + [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr, 2432 + [HDMI_CLK_SRC] = &hdmi_clk_src.clkr, 2433 + [VSYNC_CLK_SRC] = &vsync_clk_src.clkr, 2434 + [RBBMTIMER_CLK_SRC] = &rbbmtimer_clk_src.clkr, 2435 + [CAMSS_AHB_CLK] = &camss_ahb_clk.clkr, 2436 + [CAMSS_CCI_CCI_AHB_CLK] = &camss_cci_cci_ahb_clk.clkr, 2437 + [CAMSS_CCI_CCI_CLK] = &camss_cci_cci_clk.clkr, 2438 + [CAMSS_VFE_CPP_AHB_CLK] = &camss_vfe_cpp_ahb_clk.clkr, 2439 + [CAMSS_VFE_CPP_AXI_CLK] = &camss_vfe_cpp_axi_clk.clkr, 2440 + [CAMSS_VFE_CPP_CLK] = &camss_vfe_cpp_clk.clkr, 2441 + [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr, 2442 + [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr, 2443 + [CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr, 2444 + [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr, 2445 + [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr, 2446 + [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr, 2447 + [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr, 2448 + [CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr, 2449 + [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr, 2450 + [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr, 2451 + [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr, 2452 + [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr, 2453 + [CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr, 2454 + [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr, 2455 + [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr, 2456 + [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr, 2457 + [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr, 2458 + [CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr, 2459 + [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr, 2460 + [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr, 2461 + [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr, 2462 + [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr, 2463 + [CAMSS_GP0_CLK] = &camss_gp0_clk.clkr, 2464 + [CAMSS_GP1_CLK] = &camss_gp1_clk.clkr, 2465 + [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr, 2466 + [CAMSS_JPEG_DMA_CLK] = &camss_jpeg_dma_clk.clkr, 2467 + [CAMSS_JPEG_JPEG0_CLK] = &camss_jpeg_jpeg0_clk.clkr, 2468 + [CAMSS_JPEG_JPEG1_CLK] = &camss_jpeg_jpeg1_clk.clkr, 2469 + [CAMSS_JPEG_JPEG2_CLK] = &camss_jpeg_jpeg2_clk.clkr, 2470 + [CAMSS_JPEG_JPEG_AHB_CLK] = &camss_jpeg_jpeg_ahb_clk.clkr, 2471 + [CAMSS_JPEG_JPEG_AXI_CLK] = &camss_jpeg_jpeg_axi_clk.clkr, 2472 + [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr, 2473 + [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr, 2474 + [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr, 2475 + [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr, 2476 + [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr, 2477 + [CAMSS_PHY0_CSI0PHYTIMER_CLK] = &camss_phy0_csi0phytimer_clk.clkr, 2478 + [CAMSS_PHY1_CSI1PHYTIMER_CLK] = &camss_phy1_csi1phytimer_clk.clkr, 2479 + [CAMSS_PHY2_CSI2PHYTIMER_CLK] = &camss_phy2_csi2phytimer_clk.clkr, 2480 + [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr, 2481 + [CAMSS_VFE_VFE0_CLK] = &camss_vfe_vfe0_clk.clkr, 2482 + [CAMSS_VFE_VFE1_CLK] = &camss_vfe_vfe1_clk.clkr, 2483 + [CAMSS_VFE_VFE_AHB_CLK] = &camss_vfe_vfe_ahb_clk.clkr, 2484 + [CAMSS_VFE_VFE_AXI_CLK] = &camss_vfe_vfe_axi_clk.clkr, 2485 + [FD_AHB_CLK] = &fd_ahb_clk.clkr, 2486 + [FD_AXI_CLK] = &fd_axi_clk.clkr, 2487 + [FD_CORE_CLK] = &fd_core_clk.clkr, 2488 + [FD_CORE_UAR_CLK] = &fd_core_uar_clk.clkr, 2489 + [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr, 2490 + [MDSS_AXI_CLK] = &mdss_axi_clk.clkr, 2491 + [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr, 2492 + [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr, 2493 + [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr, 2494 + [MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr, 2495 + [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr, 2496 + [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr, 2497 + [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr, 2498 + [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr, 2499 + [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr, 2500 + [MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr, 2501 + [MMSS_MMSSNOC_AXI_CLK] = &mmss_mmssnoc_axi_clk.clkr, 2502 + [MMSS_S0_AXI_CLK] = &mmss_s0_axi_clk.clkr, 2503 + [OCMEMCX_OCMEMNOC_CLK] = &ocmemcx_ocmemnoc_clk.clkr, 2504 + [OXILI_GFX3D_CLK] = &oxili_gfx3d_clk.clkr, 2505 + [OXILI_RBBMTIMER_CLK] = &oxili_rbbmtimer_clk.clkr, 2506 + [OXILICX_AHB_CLK] = &oxilicx_ahb_clk.clkr, 2507 + [VENUS0_AHB_CLK] = &venus0_ahb_clk.clkr, 2508 + [VENUS0_AXI_CLK] = &venus0_axi_clk.clkr, 2509 + [VENUS0_OCMEMNOC_CLK] = &venus0_ocmemnoc_clk.clkr, 2510 + [VENUS0_VCODEC0_CLK] = &venus0_vcodec0_clk.clkr, 2511 + [VENUS0_CORE0_VCODEC_CLK] = &venus0_core0_vcodec_clk.clkr, 2512 + [VENUS0_CORE1_VCODEC_CLK] = &venus0_core1_vcodec_clk.clkr, 2513 + [VENUS0_CORE2_VCODEC_CLK] = &venus0_core2_vcodec_clk.clkr, 2514 + }; 2515 + 2516 + static struct gdsc *mmcc_msm8994_gdscs[] = { 2517 + [VENUS_GDSC] = &venus_gdsc, 2518 + [VENUS_CORE0_GDSC] = &venus_core0_gdsc, 2519 + [VENUS_CORE1_GDSC] = &venus_core1_gdsc, 2520 + [VENUS_CORE2_GDSC] = &venus_core2_gdsc, 2521 + [CAMSS_TOP_GDSC] = &camss_top_gdsc, 2522 + [MDSS_GDSC] = &mdss_gdsc, 2523 + [JPEG_GDSC] = &jpeg_gdsc, 2524 + [VFE_GDSC] = &vfe_gdsc, 2525 + [CPP_GDSC] = &cpp_gdsc, 2526 + [OXILI_GX_GDSC] = &oxili_gx_gdsc, 2527 + [OXILI_CX_GDSC] = &oxili_cx_gdsc, 2528 + [FD_GDSC] = &fd_gdsc, 2529 + }; 2530 + 2531 + static const struct qcom_reset_map mmcc_msm8994_resets[] = { 2532 + [CAMSS_MICRO_BCR] = { 0x3490 }, 2533 + }; 2534 + 2535 + static const struct regmap_config mmcc_msm8994_regmap_config = { 2536 + .reg_bits = 32, 2537 + .reg_stride = 4, 2538 + .val_bits = 32, 2539 + .max_register = 0x5200, 2540 + .fast_io = true, 2541 + }; 2542 + 2543 + static const struct qcom_cc_desc mmcc_msm8994_desc = { 2544 + .config = &mmcc_msm8994_regmap_config, 2545 + .clks = mmcc_msm8994_clocks, 2546 + .num_clks = ARRAY_SIZE(mmcc_msm8994_clocks), 2547 + .resets = mmcc_msm8994_resets, 2548 + .num_resets = ARRAY_SIZE(mmcc_msm8994_resets), 2549 + .gdscs = mmcc_msm8994_gdscs, 2550 + .num_gdscs = ARRAY_SIZE(mmcc_msm8994_gdscs), 2551 + }; 2552 + 2553 + static const struct of_device_id mmcc_msm8994_match_table[] = { 2554 + { .compatible = "qcom,mmcc-msm8992" }, 2555 + { .compatible = "qcom,mmcc-msm8994" }, /* V2 and V2.1 */ 2556 + { } 2557 + }; 2558 + MODULE_DEVICE_TABLE(of, mmcc_msm8994_match_table); 2559 + 2560 + static int mmcc_msm8994_probe(struct platform_device *pdev) 2561 + { 2562 + struct regmap *regmap; 2563 + 2564 + if (of_device_is_compatible(pdev->dev.of_node, "qcom,mmcc-msm8992")) { 2565 + /* MSM8992 features less clocks and some have different freq tables */ 2566 + mmcc_msm8994_desc.clks[CAMSS_JPEG_JPEG1_CLK] = NULL; 2567 + mmcc_msm8994_desc.clks[CAMSS_JPEG_JPEG2_CLK] = NULL; 2568 + mmcc_msm8994_desc.clks[FD_CORE_CLK_SRC] = NULL; 2569 + mmcc_msm8994_desc.clks[FD_CORE_CLK] = NULL; 2570 + mmcc_msm8994_desc.clks[FD_CORE_UAR_CLK] = NULL; 2571 + mmcc_msm8994_desc.clks[FD_AXI_CLK] = NULL; 2572 + mmcc_msm8994_desc.clks[FD_AHB_CLK] = NULL; 2573 + mmcc_msm8994_desc.clks[JPEG1_CLK_SRC] = NULL; 2574 + mmcc_msm8994_desc.clks[JPEG2_CLK_SRC] = NULL; 2575 + mmcc_msm8994_desc.clks[VENUS0_CORE2_VCODEC_CLK] = NULL; 2576 + 2577 + mmcc_msm8994_desc.gdscs[FD_GDSC] = NULL; 2578 + mmcc_msm8994_desc.gdscs[VENUS_CORE2_GDSC] = NULL; 2579 + 2580 + axi_clk_src.freq_tbl = ftbl_axi_clk_src_8992; 2581 + cpp_clk_src.freq_tbl = ftbl_cpp_clk_src_8992; 2582 + csi0_clk_src.freq_tbl = ftbl_csi0_1_2_3_clk_src_8992; 2583 + csi1_clk_src.freq_tbl = ftbl_csi0_1_2_3_clk_src_8992; 2584 + csi2_clk_src.freq_tbl = ftbl_csi0_1_2_3_clk_src_8992; 2585 + csi3_clk_src.freq_tbl = ftbl_csi0_1_2_3_clk_src_8992; 2586 + mclk0_clk_src.freq_tbl = ftbl_mclk0_clk_src_8992; 2587 + mclk1_clk_src.freq_tbl = ftbl_mclk1_2_3_clk_src_8992; 2588 + mclk2_clk_src.freq_tbl = ftbl_mclk1_2_3_clk_src_8992; 2589 + mclk3_clk_src.freq_tbl = ftbl_mclk1_2_3_clk_src_8992; 2590 + mdp_clk_src.freq_tbl = ftbl_mdp_clk_src_8992; 2591 + ocmemnoc_clk_src.freq_tbl = ftbl_ocmemnoc_clk_src_8992; 2592 + vcodec0_clk_src.freq_tbl = ftbl_vcodec0_clk_src_8992; 2593 + vfe0_clk_src.freq_tbl = ftbl_vfe0_1_clk_src_8992; 2594 + vfe1_clk_src.freq_tbl = ftbl_vfe0_1_clk_src_8992; 2595 + } 2596 + 2597 + regmap = qcom_cc_map(pdev, &mmcc_msm8994_desc); 2598 + if (IS_ERR(regmap)) 2599 + return PTR_ERR(regmap); 2600 + 2601 + clk_alpha_pll_configure(&mmpll0_early, regmap, &mmpll_p_config); 2602 + clk_alpha_pll_configure(&mmpll1_early, regmap, &mmpll_p_config); 2603 + clk_alpha_pll_configure(&mmpll3_early, regmap, &mmpll_p_config); 2604 + clk_alpha_pll_configure(&mmpll5_early, regmap, &mmpll_p_config); 2605 + 2606 + return qcom_cc_really_probe(pdev, &mmcc_msm8994_desc, regmap); 2607 + } 2608 + 2609 + static struct platform_driver mmcc_msm8994_driver = { 2610 + .probe = mmcc_msm8994_probe, 2611 + .driver = { 2612 + .name = "mmcc-msm8994", 2613 + .of_match_table = mmcc_msm8994_match_table, 2614 + }, 2615 + }; 2616 + module_platform_driver(mmcc_msm8994_driver); 2617 + 2618 + MODULE_DESCRIPTION("QCOM MMCC MSM8994 Driver"); 2619 + MODULE_LICENSE("GPL v2"); 2620 + MODULE_ALIAS("platform:mmcc-msm8994");
+8 -22
drivers/clk/qcom/mss-sc7180.c
··· 73 73 { 74 74 int ret; 75 75 76 - pm_runtime_enable(&pdev->dev); 77 - ret = pm_clk_create(&pdev->dev); 76 + ret = devm_pm_runtime_enable(&pdev->dev); 78 77 if (ret) 79 - goto disable_pm_runtime; 78 + return ret; 79 + 80 + ret = devm_pm_clk_create(&pdev->dev); 81 + if (ret) 82 + return ret; 80 83 81 84 ret = pm_clk_add(&pdev->dev, "cfg_ahb"); 82 85 if (ret < 0) { 83 86 dev_err(&pdev->dev, "failed to acquire iface clock\n"); 84 - goto destroy_pm_clk; 87 + return ret; 85 88 } 86 89 87 90 ret = qcom_cc_probe(pdev, &mss_sc7180_desc); 88 91 if (ret < 0) 89 - goto destroy_pm_clk; 90 - 91 - return 0; 92 - 93 - destroy_pm_clk: 94 - pm_clk_destroy(&pdev->dev); 95 - 96 - disable_pm_runtime: 97 - pm_runtime_disable(&pdev->dev); 98 - 99 - return ret; 100 - } 101 - 102 - static int mss_sc7180_remove(struct platform_device *pdev) 103 - { 104 - pm_clk_destroy(&pdev->dev); 105 - pm_runtime_disable(&pdev->dev); 92 + return ret; 106 93 107 94 return 0; 108 95 } ··· 106 119 107 120 static struct platform_driver mss_sc7180_driver = { 108 121 .probe = mss_sc7180_probe, 109 - .remove = mss_sc7180_remove, 110 122 .driver = { 111 123 .name = "sc7180-mss", 112 124 .of_match_table = mss_sc7180_match_table,
+9 -23
drivers/clk/qcom/q6sstop-qcs404.c
··· 159 159 const struct qcom_cc_desc *desc; 160 160 int ret; 161 161 162 - pm_runtime_enable(&pdev->dev); 163 - ret = pm_clk_create(&pdev->dev); 162 + ret = devm_pm_runtime_enable(&pdev->dev); 164 163 if (ret) 165 - goto disable_pm_runtime; 164 + return ret; 165 + 166 + ret = devm_pm_clk_create(&pdev->dev); 167 + if (ret) 168 + return ret; 166 169 167 170 ret = pm_clk_add(&pdev->dev, NULL); 168 171 if (ret < 0) { 169 172 dev_err(&pdev->dev, "failed to acquire iface clock\n"); 170 - goto destroy_pm_clk; 173 + return ret; 171 174 } 172 175 173 176 q6sstop_regmap_config.name = "q6sstop_tcsr"; ··· 178 175 179 176 ret = qcom_cc_probe_by_index(pdev, 1, desc); 180 177 if (ret) 181 - goto destroy_pm_clk; 178 + return ret; 182 179 183 180 q6sstop_regmap_config.name = "q6sstop_cc"; 184 181 desc = &q6sstop_qcs404_desc; 185 182 186 183 ret = qcom_cc_probe_by_index(pdev, 0, desc); 187 184 if (ret) 188 - goto destroy_pm_clk; 189 - 190 - return 0; 191 - 192 - destroy_pm_clk: 193 - pm_clk_destroy(&pdev->dev); 194 - 195 - disable_pm_runtime: 196 - pm_runtime_disable(&pdev->dev); 197 - 198 - return ret; 199 - } 200 - 201 - static int q6sstopcc_qcs404_remove(struct platform_device *pdev) 202 - { 203 - pm_clk_destroy(&pdev->dev); 204 - pm_runtime_disable(&pdev->dev); 185 + return ret; 205 186 206 187 return 0; 207 188 } ··· 196 209 197 210 static struct platform_driver q6sstopcc_qcs404_driver = { 198 211 .probe = q6sstopcc_qcs404_probe, 199 - .remove = q6sstopcc_qcs404_remove, 200 212 .driver = { 201 213 .name = "qcs404-q6sstopcc", 202 214 .of_match_table = q6sstopcc_qcs404_match_table,
+8 -22
drivers/clk/qcom/turingcc-qcs404.c
··· 110 110 { 111 111 int ret; 112 112 113 - pm_runtime_enable(&pdev->dev); 114 - ret = pm_clk_create(&pdev->dev); 113 + ret = devm_pm_runtime_enable(&pdev->dev); 115 114 if (ret) 116 - goto disable_pm_runtime; 115 + return ret; 116 + 117 + ret = devm_pm_clk_create(&pdev->dev); 118 + if (ret) 119 + return ret; 117 120 118 121 ret = pm_clk_add(&pdev->dev, NULL); 119 122 if (ret < 0) { 120 123 dev_err(&pdev->dev, "failed to acquire iface clock\n"); 121 - goto destroy_pm_clk; 124 + return ret; 122 125 } 123 126 124 127 ret = qcom_cc_probe(pdev, &turingcc_desc); 125 128 if (ret < 0) 126 - goto destroy_pm_clk; 127 - 128 - return 0; 129 - 130 - destroy_pm_clk: 131 - pm_clk_destroy(&pdev->dev); 132 - 133 - disable_pm_runtime: 134 - pm_runtime_disable(&pdev->dev); 135 - 136 - return ret; 137 - } 138 - 139 - static int turingcc_remove(struct platform_device *pdev) 140 - { 141 - pm_clk_destroy(&pdev->dev); 142 - pm_runtime_disable(&pdev->dev); 129 + return ret; 143 130 144 131 return 0; 145 132 } ··· 143 156 144 157 static struct platform_driver turingcc_driver = { 145 158 .probe = turingcc_probe, 146 - .remove = turingcc_remove, 147 159 .driver = { 148 160 .name = "qcs404-turingcc", 149 161 .of_match_table = turingcc_match_table,
+325
drivers/clk/qcom/videocc-sc7280.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * Copyright (c) 2021, The Linux Foundation. All rights reserved. 4 + */ 5 + 6 + #include <linux/clk-provider.h> 7 + #include <linux/module.h> 8 + #include <linux/platform_device.h> 9 + #include <linux/regmap.h> 10 + 11 + #include <dt-bindings/clock/qcom,videocc-sc7280.h> 12 + 13 + #include "clk-alpha-pll.h" 14 + #include "clk-branch.h" 15 + #include "clk-rcg.h" 16 + #include "common.h" 17 + #include "reset.h" 18 + #include "gdsc.h" 19 + 20 + enum { 21 + P_BI_TCXO, 22 + P_SLEEP_CLK, 23 + P_VIDEO_PLL0_OUT_EVEN, 24 + }; 25 + 26 + static const struct pll_vco lucid_vco[] = { 27 + { 249600000, 2000000000, 0 }, 28 + }; 29 + 30 + /* 400MHz Configuration */ 31 + static const struct alpha_pll_config video_pll0_config = { 32 + .l = 0x14, 33 + .alpha = 0xD555, 34 + .config_ctl_val = 0x20485699, 35 + .config_ctl_hi_val = 0x00002261, 36 + .config_ctl_hi1_val = 0x329A299C, 37 + .user_ctl_val = 0x00000001, 38 + .user_ctl_hi_val = 0x00000805, 39 + .user_ctl_hi1_val = 0x00000000, 40 + }; 41 + 42 + static struct clk_alpha_pll video_pll0 = { 43 + .offset = 0x0, 44 + .vco_table = lucid_vco, 45 + .num_vco = ARRAY_SIZE(lucid_vco), 46 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 47 + .clkr = { 48 + .hw.init = &(struct clk_init_data){ 49 + .name = "video_pll0", 50 + .parent_data = &(const struct clk_parent_data){ 51 + .fw_name = "bi_tcxo", 52 + }, 53 + .num_parents = 1, 54 + .ops = &clk_alpha_pll_lucid_ops, 55 + }, 56 + }, 57 + }; 58 + 59 + static const struct parent_map video_cc_parent_map_0[] = { 60 + { P_BI_TCXO, 0 }, 61 + { P_VIDEO_PLL0_OUT_EVEN, 3 }, 62 + }; 63 + 64 + static const struct clk_parent_data video_cc_parent_data_0[] = { 65 + { .fw_name = "bi_tcxo" }, 66 + { .hw = &video_pll0.clkr.hw }, 67 + }; 68 + 69 + static const struct parent_map video_cc_parent_map_1[] = { 70 + { P_SLEEP_CLK, 0 }, 71 + }; 72 + 73 + static const struct clk_parent_data video_cc_parent_data_1[] = { 74 + { .fw_name = "sleep_clk" }, 75 + }; 76 + 77 + static const struct freq_tbl ftbl_video_cc_iris_clk_src[] = { 78 + F(133333333, P_VIDEO_PLL0_OUT_EVEN, 3, 0, 0), 79 + F(240000000, P_VIDEO_PLL0_OUT_EVEN, 2, 0, 0), 80 + F(335000000, P_VIDEO_PLL0_OUT_EVEN, 2, 0, 0), 81 + F(424000000, P_VIDEO_PLL0_OUT_EVEN, 2, 0, 0), 82 + F(460000000, P_VIDEO_PLL0_OUT_EVEN, 2, 0, 0), 83 + { } 84 + }; 85 + 86 + static struct clk_rcg2 video_cc_iris_clk_src = { 87 + .cmd_rcgr = 0x1000, 88 + .mnd_width = 0, 89 + .hid_width = 5, 90 + .parent_map = video_cc_parent_map_0, 91 + .freq_tbl = ftbl_video_cc_iris_clk_src, 92 + .clkr.hw.init = &(struct clk_init_data){ 93 + .name = "video_cc_iris_clk_src", 94 + .parent_data = video_cc_parent_data_0, 95 + .num_parents = ARRAY_SIZE(video_cc_parent_data_0), 96 + .flags = CLK_SET_RATE_PARENT, 97 + .ops = &clk_rcg2_shared_ops, 98 + }, 99 + }; 100 + 101 + static const struct freq_tbl ftbl_video_cc_sleep_clk_src[] = { 102 + F(32000, P_SLEEP_CLK, 1, 0, 0), 103 + { } 104 + }; 105 + 106 + static struct clk_rcg2 video_cc_sleep_clk_src = { 107 + .cmd_rcgr = 0x701c, 108 + .mnd_width = 0, 109 + .hid_width = 5, 110 + .parent_map = video_cc_parent_map_1, 111 + .freq_tbl = ftbl_video_cc_sleep_clk_src, 112 + .clkr.hw.init = &(struct clk_init_data){ 113 + .name = "video_cc_sleep_clk_src", 114 + .parent_data = video_cc_parent_data_1, 115 + .num_parents = ARRAY_SIZE(video_cc_parent_data_1), 116 + .ops = &clk_rcg2_ops, 117 + }, 118 + }; 119 + 120 + static struct clk_branch video_cc_iris_ahb_clk = { 121 + .halt_reg = 0x5004, 122 + .halt_check = BRANCH_HALT_VOTED, 123 + .clkr = { 124 + .enable_reg = 0x5004, 125 + .enable_mask = BIT(0), 126 + .hw.init = &(struct clk_init_data){ 127 + .name = "video_cc_iris_ahb_clk", 128 + .parent_hws = (const struct clk_hw*[]){ 129 + &video_cc_iris_clk_src.clkr.hw, 130 + }, 131 + .num_parents = 1, 132 + .flags = CLK_SET_RATE_PARENT, 133 + .ops = &clk_branch2_ops, 134 + }, 135 + }, 136 + }; 137 + 138 + static struct clk_branch video_cc_mvs0_axi_clk = { 139 + .halt_reg = 0x800c, 140 + .halt_check = BRANCH_HALT, 141 + .clkr = { 142 + .enable_reg = 0x800c, 143 + .enable_mask = BIT(0), 144 + .hw.init = &(struct clk_init_data){ 145 + .name = "video_cc_mvs0_axi_clk", 146 + .ops = &clk_branch2_ops, 147 + }, 148 + }, 149 + }; 150 + 151 + static struct clk_branch video_cc_mvs0_core_clk = { 152 + .halt_reg = 0x3010, 153 + .halt_check = BRANCH_HALT_VOTED, 154 + .hwcg_reg = 0x3010, 155 + .hwcg_bit = 1, 156 + .clkr = { 157 + .enable_reg = 0x3010, 158 + .enable_mask = BIT(0), 159 + .hw.init = &(struct clk_init_data){ 160 + .name = "video_cc_mvs0_core_clk", 161 + .parent_hws = (const struct clk_hw*[]){ 162 + &video_cc_iris_clk_src.clkr.hw, 163 + }, 164 + .num_parents = 1, 165 + .flags = CLK_SET_RATE_PARENT, 166 + .ops = &clk_branch2_ops, 167 + }, 168 + }, 169 + }; 170 + 171 + static struct clk_branch video_cc_mvsc_core_clk = { 172 + .halt_reg = 0x2014, 173 + .halt_check = BRANCH_HALT, 174 + .clkr = { 175 + .enable_reg = 0x2014, 176 + .enable_mask = BIT(0), 177 + .hw.init = &(struct clk_init_data){ 178 + .name = "video_cc_mvsc_core_clk", 179 + .parent_hws = (const struct clk_hw*[]){ 180 + &video_cc_iris_clk_src.clkr.hw, 181 + }, 182 + .num_parents = 1, 183 + .flags = CLK_SET_RATE_PARENT, 184 + .ops = &clk_branch2_ops, 185 + }, 186 + }, 187 + }; 188 + 189 + static struct clk_branch video_cc_mvsc_ctl_axi_clk = { 190 + .halt_reg = 0x8004, 191 + .halt_check = BRANCH_HALT, 192 + .clkr = { 193 + .enable_reg = 0x8004, 194 + .enable_mask = BIT(0), 195 + .hw.init = &(struct clk_init_data){ 196 + .name = "video_cc_mvsc_ctl_axi_clk", 197 + .ops = &clk_branch2_ops, 198 + }, 199 + }, 200 + }; 201 + 202 + static struct clk_branch video_cc_sleep_clk = { 203 + .halt_reg = 0x7034, 204 + .halt_check = BRANCH_HALT, 205 + .clkr = { 206 + .enable_reg = 0x7034, 207 + .enable_mask = BIT(0), 208 + .hw.init = &(struct clk_init_data){ 209 + .name = "video_cc_sleep_clk", 210 + .parent_hws = (const struct clk_hw*[]){ 211 + &video_cc_sleep_clk_src.clkr.hw, 212 + }, 213 + .num_parents = 1, 214 + .flags = CLK_SET_RATE_PARENT, 215 + .ops = &clk_branch2_ops, 216 + }, 217 + }, 218 + }; 219 + 220 + static struct clk_branch video_cc_venus_ahb_clk = { 221 + .halt_reg = 0x801c, 222 + .halt_check = BRANCH_HALT, 223 + .clkr = { 224 + .enable_reg = 0x801c, 225 + .enable_mask = BIT(0), 226 + .hw.init = &(struct clk_init_data){ 227 + .name = "video_cc_venus_ahb_clk", 228 + .ops = &clk_branch2_ops, 229 + }, 230 + }, 231 + }; 232 + 233 + static struct gdsc mvs0_gdsc = { 234 + .gdscr = 0x3004, 235 + .pd = { 236 + .name = "mvs0_gdsc", 237 + }, 238 + .pwrsts = PWRSTS_OFF_ON, 239 + .flags = HW_CTRL | RETAIN_FF_ENABLE, 240 + }; 241 + 242 + static struct gdsc mvsc_gdsc = { 243 + .gdscr = 0x2004, 244 + .pd = { 245 + .name = "mvsc_gdsc", 246 + }, 247 + .flags = RETAIN_FF_ENABLE, 248 + .pwrsts = PWRSTS_OFF_ON, 249 + }; 250 + 251 + static struct clk_regmap *video_cc_sc7280_clocks[] = { 252 + [VIDEO_CC_IRIS_AHB_CLK] = &video_cc_iris_ahb_clk.clkr, 253 + [VIDEO_CC_IRIS_CLK_SRC] = &video_cc_iris_clk_src.clkr, 254 + [VIDEO_CC_MVS0_AXI_CLK] = &video_cc_mvs0_axi_clk.clkr, 255 + [VIDEO_CC_MVS0_CORE_CLK] = &video_cc_mvs0_core_clk.clkr, 256 + [VIDEO_CC_MVSC_CORE_CLK] = &video_cc_mvsc_core_clk.clkr, 257 + [VIDEO_CC_MVSC_CTL_AXI_CLK] = &video_cc_mvsc_ctl_axi_clk.clkr, 258 + [VIDEO_CC_SLEEP_CLK] = &video_cc_sleep_clk.clkr, 259 + [VIDEO_CC_SLEEP_CLK_SRC] = &video_cc_sleep_clk_src.clkr, 260 + [VIDEO_CC_VENUS_AHB_CLK] = &video_cc_venus_ahb_clk.clkr, 261 + [VIDEO_PLL0] = &video_pll0.clkr, 262 + }; 263 + 264 + static struct gdsc *video_cc_sc7280_gdscs[] = { 265 + [MVS0_GDSC] = &mvs0_gdsc, 266 + [MVSC_GDSC] = &mvsc_gdsc, 267 + }; 268 + 269 + static const struct regmap_config video_cc_sc7280_regmap_config = { 270 + .reg_bits = 32, 271 + .reg_stride = 4, 272 + .val_bits = 32, 273 + .max_register = 0xb000, 274 + .fast_io = true, 275 + }; 276 + 277 + static const struct qcom_cc_desc video_cc_sc7280_desc = { 278 + .config = &video_cc_sc7280_regmap_config, 279 + .clks = video_cc_sc7280_clocks, 280 + .num_clks = ARRAY_SIZE(video_cc_sc7280_clocks), 281 + .gdscs = video_cc_sc7280_gdscs, 282 + .num_gdscs = ARRAY_SIZE(video_cc_sc7280_gdscs), 283 + }; 284 + 285 + static const struct of_device_id video_cc_sc7280_match_table[] = { 286 + { .compatible = "qcom,sc7280-videocc" }, 287 + { } 288 + }; 289 + MODULE_DEVICE_TABLE(of, video_cc_sc7280_match_table); 290 + 291 + static int video_cc_sc7280_probe(struct platform_device *pdev) 292 + { 293 + struct regmap *regmap; 294 + 295 + regmap = qcom_cc_map(pdev, &video_cc_sc7280_desc); 296 + if (IS_ERR(regmap)) 297 + return PTR_ERR(regmap); 298 + 299 + clk_lucid_pll_configure(&video_pll0, regmap, &video_pll0_config); 300 + 301 + return qcom_cc_really_probe(pdev, &video_cc_sc7280_desc, regmap); 302 + } 303 + 304 + static struct platform_driver video_cc_sc7280_driver = { 305 + .probe = video_cc_sc7280_probe, 306 + .driver = { 307 + .name = "video_cc-sc7280", 308 + .of_match_table = video_cc_sc7280_match_table, 309 + }, 310 + }; 311 + 312 + static int __init video_cc_sc7280_init(void) 313 + { 314 + return platform_driver_register(&video_cc_sc7280_driver); 315 + } 316 + subsys_initcall(video_cc_sc7280_init); 317 + 318 + static void __exit video_cc_sc7280_exit(void) 319 + { 320 + platform_driver_unregister(&video_cc_sc7280_driver); 321 + } 322 + module_exit(video_cc_sc7280_exit); 323 + 324 + MODULE_DESCRIPTION("QTI VIDEO_CC sc7280 Driver"); 325 + MODULE_LICENSE("GPL v2");
+1 -8
drivers/clk/ralink/clk-mt7621.c
··· 131 131 struct mt7621_gate *sclk) 132 132 { 133 133 struct clk_init_data init = { 134 - /* 135 - * Until now no clock driver existed so 136 - * these SoC drivers are not prepared 137 - * yet for the clock. We don't want kernel to 138 - * disable anything so we add CLK_IS_CRITICAL 139 - * flag here. 140 - */ 141 - .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 134 + .flags = CLK_SET_RATE_PARENT, 142 135 .num_parents = 1, 143 136 .parent_names = &sclk->parent_name, 144 137 .ops = &mt7621_gate_ops,
+1 -3
drivers/clk/renesas/Kconfig
··· 153 153 select CLK_RENESAS_CPG_MSSR 154 154 155 155 config CLK_R9A06G032 156 - bool "Renesas R9A06G032 clock driver" 157 - help 158 - This is a driver for R9A06G032 clocks 156 + bool "RZ/N1D clock support" if COMPILE_TEST 159 157 160 158 config CLK_R9A07G044 161 159 bool "RZ/G2L clock support" if COMPILE_TEST
+1 -1
drivers/clk/renesas/Makefile
··· 37 37 obj-$(CONFIG_CLK_RCAR_GEN2_CPG) += rcar-gen2-cpg.o 38 38 obj-$(CONFIG_CLK_RCAR_GEN3_CPG) += rcar-gen3-cpg.o 39 39 obj-$(CONFIG_CLK_RCAR_USB2_CLOCK_SEL) += rcar-usb2-clock-sel.o 40 - obj-$(CONFIG_CLK_RZG2L) += renesas-rzg2l-cpg.o 40 + obj-$(CONFIG_CLK_RZG2L) += rzg2l-cpg.o 41 41 42 42 # Generic 43 43 obj-$(CONFIG_CLK_RENESAS_CPG_MSSR) += renesas-cpg-mssr.o
+1 -1
drivers/clk/renesas/r8a774a1-cpg-mssr.c
··· 210 210 DEF_MOD("rpc-if", 917, R8A774A1_CLK_RPCD2), 211 211 DEF_MOD("i2c6", 918, R8A774A1_CLK_S0D6), 212 212 DEF_MOD("i2c5", 919, R8A774A1_CLK_S0D6), 213 - DEF_MOD("i2c-dvfs", 926, R8A774A1_CLK_CP), 213 + DEF_MOD("iic-pmic", 926, R8A774A1_CLK_CP), 214 214 DEF_MOD("i2c4", 927, R8A774A1_CLK_S0D6), 215 215 DEF_MOD("i2c3", 928, R8A774A1_CLK_S0D6), 216 216 DEF_MOD("i2c2", 929, R8A774A1_CLK_S3D2),
+1 -1
drivers/clk/renesas/r8a774b1-cpg-mssr.c
··· 206 206 DEF_MOD("rpc-if", 917, R8A774B1_CLK_RPCD2), 207 207 DEF_MOD("i2c6", 918, R8A774B1_CLK_S0D6), 208 208 DEF_MOD("i2c5", 919, R8A774B1_CLK_S0D6), 209 - DEF_MOD("i2c-dvfs", 926, R8A774B1_CLK_CP), 209 + DEF_MOD("iic-pmic", 926, R8A774B1_CLK_CP), 210 210 DEF_MOD("i2c4", 927, R8A774B1_CLK_S0D6), 211 211 DEF_MOD("i2c3", 928, R8A774B1_CLK_S0D6), 212 212 DEF_MOD("i2c2", 929, R8A774B1_CLK_S3D2),
+1 -1
drivers/clk/renesas/r8a774c0-cpg-mssr.c
··· 210 210 DEF_MOD("rpc-if", 917, R8A774C0_CLK_RPCD2), 211 211 DEF_MOD("i2c6", 918, R8A774C0_CLK_S3D2), 212 212 DEF_MOD("i2c5", 919, R8A774C0_CLK_S3D2), 213 - DEF_MOD("i2c-dvfs", 926, R8A774C0_CLK_CP), 213 + DEF_MOD("iic-pmic", 926, R8A774C0_CLK_CP), 214 214 DEF_MOD("i2c4", 927, R8A774C0_CLK_S3D2), 215 215 DEF_MOD("i2c3", 928, R8A774C0_CLK_S3D2), 216 216 DEF_MOD("i2c2", 929, R8A774C0_CLK_S3D2),
+1 -1
drivers/clk/renesas/r8a774e1-cpg-mssr.c
··· 219 219 DEF_MOD("i2c6", 918, R8A774E1_CLK_S0D6), 220 220 DEF_MOD("i2c5", 919, R8A774E1_CLK_S0D6), 221 221 DEF_MOD("adg", 922, R8A774E1_CLK_S0D1), 222 - DEF_MOD("i2c-dvfs", 926, R8A774E1_CLK_CP), 222 + DEF_MOD("iic-pmic", 926, R8A774E1_CLK_CP), 223 223 DEF_MOD("i2c4", 927, R8A774E1_CLK_S0D6), 224 224 DEF_MOD("i2c3", 928, R8A774E1_CLK_S0D6), 225 225 DEF_MOD("i2c2", 929, R8A774E1_CLK_S3D2),
+4 -1
drivers/clk/renesas/r8a779a0-cpg-mssr.c
··· 135 135 DEF_FIXED("zt", R8A779A0_CLK_ZT, CLK_PLL1_DIV2, 2, 1), 136 136 DEF_FIXED("ztr", R8A779A0_CLK_ZTR, CLK_PLL1_DIV2, 2, 1), 137 137 DEF_FIXED("zr", R8A779A0_CLK_ZR, CLK_PLL1_DIV2, 1, 1), 138 - DEF_FIXED("dsi", R8A779A0_CLK_DSI, CLK_PLL5_DIV4, 1, 1), 139 138 DEF_FIXED("cnndsp", R8A779A0_CLK_CNNDSP, CLK_PLL5_DIV4, 1, 1), 140 139 DEF_FIXED("vip", R8A779A0_CLK_VIP, CLK_PLL5, 5, 1), 141 140 DEF_FIXED("adgh", R8A779A0_CLK_ADGH, CLK_PLL5_DIV4, 1, 1), ··· 150 151 DEF_DIV6P1("mso", R8A779A0_CLK_MSO, CLK_PLL5_DIV4, 0x87c), 151 152 DEF_DIV6P1("canfd", R8A779A0_CLK_CANFD, CLK_PLL5_DIV4, 0x878), 152 153 DEF_DIV6P1("csi0", R8A779A0_CLK_CSI0, CLK_PLL5_DIV4, 0x880), 154 + DEF_DIV6P1("dsi", R8A779A0_CLK_DSI, CLK_PLL5_DIV4, 0x884), 153 155 154 156 DEF_OSC("osc", R8A779A0_CLK_OSC, CLK_EXTAL, 8), 155 157 DEF_MDSEL("r", R8A779A0_CLK_R, 29, CLK_EXTALR, 1, CLK_OCO, 1), ··· 167 167 DEF_MOD("csi41", 400, R8A779A0_CLK_CSI0), 168 168 DEF_MOD("csi42", 401, R8A779A0_CLK_CSI0), 169 169 DEF_MOD("csi43", 402, R8A779A0_CLK_CSI0), 170 + DEF_MOD("du", 411, R8A779A0_CLK_S3D1), 171 + DEF_MOD("dsi0", 415, R8A779A0_CLK_DSI), 172 + DEF_MOD("dsi1", 416, R8A779A0_CLK_DSI), 170 173 DEF_MOD("fcpvd0", 508, R8A779A0_CLK_S3D1), 171 174 DEF_MOD("fcpvd1", 509, R8A779A0_CLK_S3D1), 172 175 DEF_MOD("hscif0", 514, R8A779A0_CLK_S1D2),
+70 -2
drivers/clk/renesas/r9a07g044-cpg.c
··· 12 12 13 13 #include <dt-bindings/clock/r9a07g044-cpg.h> 14 14 15 - #include "renesas-rzg2l-cpg.h" 15 + #include "rzg2l-cpg.h" 16 16 17 17 enum clk_ids { 18 18 /* Core Clock Outputs exported to DT */ 19 - LAST_DT_CORE_CLK = R9A07G044_OSCCLK, 19 + LAST_DT_CORE_CLK = R9A07G044_CLK_P0_DIV2, 20 20 21 21 /* External Input Clocks */ 22 22 CLK_EXTAL, ··· 37 37 CLK_PLL5, 38 38 CLK_PLL5_DIV2, 39 39 CLK_PLL6, 40 + CLK_P1_DIV2, 40 41 41 42 /* Module Clocks */ 42 43 MOD_CLK_BASE, ··· 77 76 DEF_FIXED("I", R9A07G044_CLK_I, CLK_PLL1, 1, 1), 78 77 DEF_DIV("P0", R9A07G044_CLK_P0, CLK_PLL2_DIV16, DIVPL2A, 79 78 dtable_1_32, CLK_DIVIDER_HIWORD_MASK), 79 + DEF_FIXED("P0_DIV2", R9A07G044_CLK_P0_DIV2, R9A07G044_CLK_P0, 1, 2), 80 80 DEF_FIXED("TSU", R9A07G044_CLK_TSU, CLK_PLL2_DIV20, 1, 1), 81 81 DEF_DIV("P1", R9A07G044_CLK_P1, CLK_PLL3_DIV2_4, 82 82 DIVPL3B, dtable_1_32, CLK_DIVIDER_HIWORD_MASK), 83 + DEF_FIXED("P1_DIV2", CLK_P1_DIV2, R9A07G044_CLK_P1, 1, 2), 83 84 DEF_DIV("P2", R9A07G044_CLK_P2, CLK_PLL3_DIV2_4_2, 84 85 DIVPL3A, dtable_1_32, CLK_DIVIDER_HIWORD_MASK), 85 86 }; ··· 93 90 0x518, 0), 94 91 DEF_MOD("ia55_clk", R9A07G044_IA55_CLK, R9A07G044_CLK_P1, 95 92 0x518, 1), 93 + DEF_MOD("dmac_aclk", R9A07G044_DMAC_ACLK, R9A07G044_CLK_P1, 94 + 0x52c, 0), 95 + DEF_MOD("dmac_pclk", R9A07G044_DMAC_PCLK, CLK_P1_DIV2, 96 + 0x52c, 1), 97 + DEF_MOD("ssi0_pclk", R9A07G044_SSI0_PCLK2, R9A07G044_CLK_P0, 98 + 0x570, 0), 99 + DEF_MOD("ssi0_sfr", R9A07G044_SSI0_PCLK_SFR, R9A07G044_CLK_P0, 100 + 0x570, 1), 101 + DEF_MOD("ssi1_pclk", R9A07G044_SSI1_PCLK2, R9A07G044_CLK_P0, 102 + 0x570, 2), 103 + DEF_MOD("ssi1_sfr", R9A07G044_SSI1_PCLK_SFR, R9A07G044_CLK_P0, 104 + 0x570, 3), 105 + DEF_MOD("ssi2_pclk", R9A07G044_SSI2_PCLK2, R9A07G044_CLK_P0, 106 + 0x570, 4), 107 + DEF_MOD("ssi2_sfr", R9A07G044_SSI2_PCLK_SFR, R9A07G044_CLK_P0, 108 + 0x570, 5), 109 + DEF_MOD("ssi3_pclk", R9A07G044_SSI3_PCLK2, R9A07G044_CLK_P0, 110 + 0x570, 6), 111 + DEF_MOD("ssi3_sfr", R9A07G044_SSI3_PCLK_SFR, R9A07G044_CLK_P0, 112 + 0x570, 7), 113 + DEF_MOD("usb0_host", R9A07G044_USB_U2H0_HCLK, R9A07G044_CLK_P1, 114 + 0x578, 0), 115 + DEF_MOD("usb1_host", R9A07G044_USB_U2H1_HCLK, R9A07G044_CLK_P1, 116 + 0x578, 1), 117 + DEF_MOD("usb0_func", R9A07G044_USB_U2P_EXR_CPUCLK, R9A07G044_CLK_P1, 118 + 0x578, 2), 119 + DEF_MOD("usb_pclk", R9A07G044_USB_PCLK, R9A07G044_CLK_P1, 120 + 0x578, 3), 121 + DEF_MOD("i2c0", R9A07G044_I2C0_PCLK, R9A07G044_CLK_P0, 122 + 0x580, 0), 123 + DEF_MOD("i2c1", R9A07G044_I2C1_PCLK, R9A07G044_CLK_P0, 124 + 0x580, 1), 125 + DEF_MOD("i2c2", R9A07G044_I2C2_PCLK, R9A07G044_CLK_P0, 126 + 0x580, 2), 127 + DEF_MOD("i2c3", R9A07G044_I2C3_PCLK, R9A07G044_CLK_P0, 128 + 0x580, 3), 96 129 DEF_MOD("scif0", R9A07G044_SCIF0_CLK_PCK, R9A07G044_CLK_P0, 97 130 0x584, 0), 98 131 DEF_MOD("scif1", R9A07G044_SCIF1_CLK_PCK, R9A07G044_CLK_P0, ··· 141 102 0x584, 4), 142 103 DEF_MOD("sci0", R9A07G044_SCI0_CLKP, R9A07G044_CLK_P0, 143 104 0x588, 0), 105 + DEF_MOD("canfd", R9A07G044_CANFD_PCLK, R9A07G044_CLK_P0, 106 + 0x594, 0), 107 + DEF_MOD("gpio", R9A07G044_GPIO_HCLK, R9A07G044_OSCCLK, 108 + 0x598, 0), 109 + DEF_MOD("adc_adclk", R9A07G044_ADC_ADCLK, R9A07G044_CLK_TSU, 110 + 0x5a8, 0), 111 + DEF_MOD("adc_pclk", R9A07G044_ADC_PCLK, R9A07G044_CLK_P0, 112 + 0x5a8, 1), 144 113 }; 145 114 146 115 static struct rzg2l_reset r9a07g044_resets[] = { 147 116 DEF_RST(R9A07G044_GIC600_GICRESET_N, 0x814, 0), 148 117 DEF_RST(R9A07G044_GIC600_DBG_GICRESET_N, 0x814, 1), 149 118 DEF_RST(R9A07G044_IA55_RESETN, 0x818, 0), 119 + DEF_RST(R9A07G044_DMAC_ARESETN, 0x82c, 0), 120 + DEF_RST(R9A07G044_DMAC_RST_ASYNC, 0x82c, 1), 121 + DEF_RST(R9A07G044_SSI0_RST_M2_REG, 0x870, 0), 122 + DEF_RST(R9A07G044_SSI1_RST_M2_REG, 0x870, 1), 123 + DEF_RST(R9A07G044_SSI2_RST_M2_REG, 0x870, 2), 124 + DEF_RST(R9A07G044_SSI3_RST_M2_REG, 0x870, 3), 125 + DEF_RST(R9A07G044_USB_U2H0_HRESETN, 0x878, 0), 126 + DEF_RST(R9A07G044_USB_U2H1_HRESETN, 0x878, 1), 127 + DEF_RST(R9A07G044_USB_U2P_EXL_SYSRST, 0x878, 2), 128 + DEF_RST(R9A07G044_USB_PRESETN, 0x878, 3), 129 + DEF_RST(R9A07G044_I2C0_MRST, 0x880, 0), 130 + DEF_RST(R9A07G044_I2C1_MRST, 0x880, 1), 131 + DEF_RST(R9A07G044_I2C2_MRST, 0x880, 2), 132 + DEF_RST(R9A07G044_I2C3_MRST, 0x880, 3), 150 133 DEF_RST(R9A07G044_SCIF0_RST_SYSTEM_N, 0x884, 0), 151 134 DEF_RST(R9A07G044_SCIF1_RST_SYSTEM_N, 0x884, 1), 152 135 DEF_RST(R9A07G044_SCIF2_RST_SYSTEM_N, 0x884, 2), 153 136 DEF_RST(R9A07G044_SCIF3_RST_SYSTEM_N, 0x884, 3), 154 137 DEF_RST(R9A07G044_SCIF4_RST_SYSTEM_N, 0x884, 4), 155 138 DEF_RST(R9A07G044_SCI0_RST, 0x888, 0), 139 + DEF_RST(R9A07G044_CANFD_RSTP_N, 0x894, 0), 140 + DEF_RST(R9A07G044_CANFD_RSTC_N, 0x894, 1), 141 + DEF_RST(R9A07G044_GPIO_RSTN, 0x898, 0), 142 + DEF_RST(R9A07G044_GPIO_PORT_RESETN, 0x898, 1), 143 + DEF_RST(R9A07G044_GPIO_SPARE_RESETN, 0x898, 2), 144 + DEF_RST(R9A07G044_ADC_PRESETN, 0x8a8, 0), 145 + DEF_RST(R9A07G044_ADC_ADRST_N, 0x8a8, 1), 156 146 }; 157 147 158 148 static const unsigned int r9a07g044_crit_mod_clks[] __initconst = {
+7 -15
drivers/clk/renesas/renesas-rzg2l-cpg.c drivers/clk/renesas/rzg2l-cpg.c
··· 29 29 30 30 #include <dt-bindings/clock/renesas-cpg-mssr.h> 31 31 32 - #include "renesas-rzg2l-cpg.h" 32 + #include "rzg2l-cpg.h" 33 33 34 34 #ifdef DEBUG 35 35 #define WARN_DEBUG(x) WARN_ON(x) ··· 125 125 core->flag, &priv->rmw_lock); 126 126 127 127 if (IS_ERR(clk_hw)) 128 - return NULL; 128 + return ERR_CAST(clk_hw); 129 129 130 130 return clk_hw->clk; 131 131 } ··· 175 175 struct clk_init_data init; 176 176 const char *parent_name; 177 177 struct pll_clk *pll_clk; 178 - struct clk *clk; 179 178 180 179 parent = clks[core->parent & 0xffff]; 181 180 if (IS_ERR(parent)) 182 181 return ERR_CAST(parent); 183 182 184 183 pll_clk = devm_kzalloc(dev, sizeof(*pll_clk), GFP_KERNEL); 185 - if (!pll_clk) { 186 - clk = ERR_PTR(-ENOMEM); 187 - return NULL; 188 - } 184 + if (!pll_clk) 185 + return ERR_PTR(-ENOMEM); 189 186 190 187 parent_name = __clk_get_name(parent); 191 188 init.name = core->name; ··· 197 200 pll_clk->priv = priv; 198 201 pll_clk->type = core->type; 199 202 200 - clk = clk_register(NULL, &pll_clk->hw); 201 - if (IS_ERR(clk)) 202 - kfree(pll_clk); 203 - 204 - return clk; 203 + return clk_register(NULL, &pll_clk->hw); 205 204 } 206 205 207 206 static struct clk ··· 222 229 223 230 case CPG_MOD: 224 231 type = "module"; 225 - if (clkidx > priv->num_mod_clks) { 232 + if (clkidx >= priv->num_mod_clks) { 226 233 dev_err(dev, "Invalid %s clock index %u\n", type, 227 234 clkidx); 228 235 return ERR_PTR(-EINVAL); ··· 290 297 break; 291 298 default: 292 299 goto fail; 293 - }; 300 + } 294 301 295 302 if (IS_ERR_OR_NULL(clk)) 296 303 goto fail; ··· 466 473 fail: 467 474 dev_err(dev, "Failed to register %s clock %s: %ld\n", "module", 468 475 mod->name, PTR_ERR(clk)); 469 - kfree(clock); 470 476 } 471 477 472 478 #define rcdev_to_priv(x) container_of(x, struct rzg2l_cpg_priv, rcdev)
drivers/clk/renesas/renesas-rzg2l-cpg.h drivers/clk/renesas/rzg2l-cpg.h
+1 -1
drivers/clk/rockchip/clk-pll.c
··· 940 940 switch (pll_type) { 941 941 case pll_rk3036: 942 942 case pll_rk3328: 943 - if (!pll->rate_table || IS_ERR(ctx->grf)) 943 + if (!pll->rate_table) 944 944 init.ops = &rockchip_rk3036_pll_clk_norate_ops; 945 945 else 946 946 init.ops = &rockchip_rk3036_pll_clk_ops;
+3 -2
drivers/clk/rockchip/clk-rk3036.c
··· 121 121 PNAME(mux_timer_p) = { "xin24m", "pclk_peri_src" }; 122 122 123 123 PNAME(mux_pll_src_apll_dpll_gpll_usb480m_p) = { "apll", "dpll", "gpll", "usb480m" }; 124 + PNAME(mux_pll_src_dmyapll_dpll_gpll_xin24_p) = { "dummy_apll", "dpll", "gpll", "xin24m" }; 124 125 125 126 PNAME(mux_mmc_src_p) = { "apll", "dpll", "gpll", "xin24m" }; 126 127 PNAME(mux_i2s_pre_p) = { "i2s_src", "i2s_frac", "ext_i2s", "xin12m" }; ··· 341 340 RK2928_CLKSEL_CON(16), 8, 2, MFLAGS, 10, 5, DFLAGS, 342 341 RK2928_CLKGATE_CON(10), 4, GFLAGS), 343 342 344 - COMPOSITE(SCLK_SFC, "sclk_sfc", mux_pll_src_apll_dpll_gpll_usb480m_p, 0, 343 + COMPOSITE(SCLK_SFC, "sclk_sfc", mux_pll_src_dmyapll_dpll_gpll_xin24_p, 0, 345 344 RK2928_CLKSEL_CON(16), 0, 2, MFLAGS, 2, 5, DFLAGS, 346 345 RK2928_CLKGATE_CON(10), 5, GFLAGS), 347 346 ··· 404 403 GATE(HCLK_OTG0, "hclk_otg0", "hclk_peri", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(5), 13, GFLAGS), 405 404 GATE(HCLK_OTG1, "hclk_otg1", "hclk_peri", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(7), 3, GFLAGS), 406 405 GATE(HCLK_I2S, "hclk_i2s", "hclk_peri", 0, RK2928_CLKGATE_CON(7), 2, GFLAGS), 407 - GATE(0, "hclk_sfc", "hclk_peri", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(3), 14, GFLAGS), 406 + GATE(HCLK_SFC, "hclk_sfc", "hclk_peri", 0, RK2928_CLKGATE_CON(3), 14, GFLAGS), 408 407 GATE(HCLK_MAC, "hclk_mac", "hclk_peri", 0, RK2928_CLKGATE_CON(3), 5, GFLAGS), 409 408 410 409 /* pclk_peri gates */
+1
drivers/clk/rockchip/clk-rk3308.c
··· 911 911 "hclk_audio", 912 912 "pclk_audio", 913 913 "sclk_ddrc", 914 + "clk_ddrphy4x", 914 915 }; 915 916 916 917 static void __init rk3308_clk_init(struct device_node *np)
+3 -14
drivers/clk/rockchip/clk.c
··· 22 22 #include <linux/regmap.h> 23 23 #include <linux/reboot.h> 24 24 #include <linux/rational.h> 25 + 26 + #include "../clk-fractional-divider.h" 25 27 #include "clk.h" 26 28 27 29 /* ··· 180 178 unsigned long rate, unsigned long *parent_rate, 181 179 unsigned long *m, unsigned long *n) 182 180 { 183 - struct clk_fractional_divider *fd = to_clk_fd(hw); 184 181 unsigned long p_rate, p_parent_rate; 185 182 struct clk_hw *p_parent; 186 - unsigned long scale; 187 183 188 184 p_rate = clk_hw_get_rate(clk_hw_get_parent(hw)); 189 185 if ((rate * 20 > p_rate) && (p_rate % rate != 0)) { ··· 190 190 *parent_rate = p_parent_rate; 191 191 } 192 192 193 - /* 194 - * Get rate closer to *parent_rate to guarantee there is no overflow 195 - * for m and n. In the result it will be the nearest rate left shifted 196 - * by (scale - fd->nwidth) bits. 197 - */ 198 - scale = fls_long(*parent_rate / rate - 1); 199 - if (scale > fd->nwidth) 200 - rate <<= scale - fd->nwidth; 201 - 202 - rational_best_approximation(rate, *parent_rate, 203 - GENMASK(fd->mwidth - 1, 0), GENMASK(fd->nwidth - 1, 0), 204 - m, n); 193 + clk_fractional_divider_general_approximation(hw, rate, parent_rate, m, n); 205 194 } 206 195 207 196 static struct clk *rockchip_clk_register_frac_branch(
+14 -5
drivers/clk/socfpga/clk-agilex.c
··· 107 107 }; 108 108 109 109 static const struct clk_parent_data psi_ref_free_mux[] = { 110 - { .fw_name = "main_pll_c3", 111 - .name = "main_pll_c3", }, 112 - { .fw_name = "peri_pll_c3", 113 - .name = "peri_pll_c3", }, 110 + { .fw_name = "main_pll_c2", 111 + .name = "main_pll_c2", }, 112 + { .fw_name = "peri_pll_c2", 113 + .name = "peri_pll_c2", }, 114 114 { .fw_name = "osc1", 115 115 .name = "osc1", }, 116 116 { .fw_name = "cb-intosc-hs-div2-clk", ··· 195 195 .name = "boot_clk", }, 196 196 }; 197 197 198 + static const struct clk_parent_data s2f_user0_mux[] = { 199 + { .fw_name = "s2f_user0_free_clk", 200 + .name = "s2f_user0_free_clk", }, 201 + { .fw_name = "boot_clk", 202 + .name = "boot_clk", }, 203 + }; 204 + 198 205 static const struct clk_parent_data s2f_user1_mux[] = { 199 206 { .fw_name = "s2f_user1_free_clk", 200 207 .name = "s2f_user1_free_clk", }, ··· 280 273 { AGILEX_SDMMC_FREE_CLK, "sdmmc_free_clk", NULL, sdmmc_free_mux, 281 274 ARRAY_SIZE(sdmmc_free_mux), 0, 0xE4, 0, 0, 0}, 282 275 { AGILEX_S2F_USER0_FREE_CLK, "s2f_user0_free_clk", NULL, s2f_usr0_free_mux, 283 - ARRAY_SIZE(s2f_usr0_free_mux), 0, 0xE8, 0, 0, 0}, 276 + ARRAY_SIZE(s2f_usr0_free_mux), 0, 0xE8, 0, 0x30, 2}, 284 277 { AGILEX_S2F_USER1_FREE_CLK, "s2f_user1_free_clk", NULL, s2f_usr1_free_mux, 285 278 ARRAY_SIZE(s2f_usr1_free_mux), 0, 0xEC, 0, 0x88, 5}, 286 279 { AGILEX_PSI_REF_FREE_CLK, "psi_ref_free_clk", NULL, psi_ref_free_mux, ··· 326 319 4, 0x98, 0, 16, 0x88, 3, 0}, 327 320 { AGILEX_SDMMC_CLK, "sdmmc_clk", NULL, sdmmc_mux, ARRAY_SIZE(sdmmc_mux), 0, 0x7C, 328 321 5, 0, 0, 0, 0x88, 4, 4}, 322 + { AGILEX_S2F_USER0_CLK, "s2f_user0_clk", NULL, s2f_user0_mux, ARRAY_SIZE(s2f_user0_mux), 0, 0x24, 323 + 6, 0, 0, 0, 0x30, 2, 0}, 329 324 { AGILEX_S2F_USER1_CLK, "s2f_user1_clk", NULL, s2f_user1_mux, ARRAY_SIZE(s2f_user1_mux), 0, 0x7C, 330 325 6, 0, 0, 0, 0x88, 5, 0}, 331 326 { AGILEX_PSI_REF_CLK, "psi_ref_clk", NULL, psi_mux, ARRAY_SIZE(psi_mux), 0, 0x7C,
+1 -1
drivers/clk/tegra/clk-dfll.c
··· 1377 1377 } 1378 1378 1379 1379 #else 1380 - static void inline dfll_debug_init(struct tegra_dfll *td) { } 1380 + static inline void dfll_debug_init(struct tegra_dfll *td) { } 1381 1381 #endif /* CONFIG_DEBUG_FS */ 1382 1382 1383 1383 /*
+1 -5
drivers/clk/tegra/clk-tegra-periph.c
··· 777 777 GATE("ahbdma", "hclk", 33, 0, tegra_clk_ahbdma, 0), 778 778 GATE("apbdma", "pclk", 34, 0, tegra_clk_apbdma, 0), 779 779 GATE("kbc", "clk_32k", 36, TEGRA_PERIPH_ON_APB | TEGRA_PERIPH_NO_RESET, tegra_clk_kbc, 0), 780 - /* 781 - * Critical for RAM re-repair operation, which must occur on resume 782 - * from LP1 system suspend and as part of CCPLEX cluster switching. 783 - */ 784 - GATE("fuse", "clk_m", 39, TEGRA_PERIPH_ON_APB, tegra_clk_fuse, CLK_IS_CRITICAL), 780 + GATE("fuse", "clk_m", 39, TEGRA_PERIPH_ON_APB, tegra_clk_fuse, 0), 785 781 GATE("fuse_burn", "clk_m", 39, TEGRA_PERIPH_ON_APB, tegra_clk_fuse_burn, 0), 786 782 GATE("kfuse", "clk_m", 40, TEGRA_PERIPH_ON_APB, tegra_clk_kfuse, 0), 787 783 GATE("apbif", "clk_m", 107, TEGRA_PERIPH_ON_APB, tegra_clk_apbif, 0),
+1 -1
drivers/clk/x86/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 2 obj-$(CONFIG_PMC_ATOM) += clk-pmc-atom.o 3 3 obj-$(CONFIG_X86_AMD_PLATFORM_DEVICE) += clk-fch.o 4 - clk-x86-lpss-objs := clk-lpt.o 4 + clk-x86-lpss-y := clk-lpss-atom.o 5 5 obj-$(CONFIG_X86_INTEL_LPSS) += clk-x86-lpss.o 6 6 obj-$(CONFIG_CLK_LGM_CGU) += clk-cgu.o clk-cgu-pll.o clk-lgm.o
+6 -6
drivers/clk/x86/clk-lpt.c drivers/clk/x86/clk-lpss-atom.c
··· 13 13 #include <linux/platform_data/x86/clk-lpss.h> 14 14 #include <linux/platform_device.h> 15 15 16 - static int lpt_clk_probe(struct platform_device *pdev) 16 + static int lpss_atom_clk_probe(struct platform_device *pdev) 17 17 { 18 18 struct lpss_clk_data *drvdata; 19 19 struct clk *clk; ··· 34 34 return 0; 35 35 } 36 36 37 - static struct platform_driver lpt_clk_driver = { 37 + static struct platform_driver lpss_atom_clk_driver = { 38 38 .driver = { 39 - .name = "clk-lpt", 39 + .name = "clk-lpss-atom", 40 40 }, 41 - .probe = lpt_clk_probe, 41 + .probe = lpss_atom_clk_probe, 42 42 }; 43 43 44 - int __init lpt_clk_init(void) 44 + int __init lpss_atom_clk_init(void) 45 45 { 46 - return platform_driver_register(&lpt_clk_driver); 46 + return platform_driver_register(&lpss_atom_clk_driver); 47 47 }
+2 -2
drivers/clk/zynqmp/clk-gate-zynqmp.c
··· 12 12 #include "clk-zynqmp.h" 13 13 14 14 /** 15 - * struct clk_gate - gating clock 15 + * struct zynqmp_clk_gate - gating clock 16 16 * @hw: handle between common and hardware-specific interfaces 17 17 * @flags: hardware-specific flags 18 18 * @clk_id: Id of clock ··· 66 66 } 67 67 68 68 /** 69 - * zynqmp_clk_gate_is_enable() - Check clock state 69 + * zynqmp_clk_gate_is_enabled() - Check clock state 70 70 * @hw: handle between common and hardware-specific interfaces 71 71 * 72 72 * Return: 1 if enabled, 0 if disabled else error code
+1 -1
drivers/clk/zynqmp/clk-mux-zynqmp.c
··· 159 159 hw = &mux->hw; 160 160 ret = clk_hw_register(NULL, hw); 161 161 if (ret) { 162 - kfree(hw); 162 + kfree(mux); 163 163 hw = ERR_PTR(ret); 164 164 } 165 165
+1
drivers/clk/zynqmp/clk-zynqmp.h
··· 56 56 * @type: Type of topology 57 57 * @flag: Topology flags 58 58 * @type_flag: Topology type specific flag 59 + * @custom_type_flag: Topology type specific custom flag 59 60 */ 60 61 struct clock_topology { 61 62 u32 type;
+1 -3
drivers/clk/zynqmp/clkc.c
··· 762 762 zynqmp_register_clocks(np); 763 763 764 764 zynqmp_data->num = clock_max_idx; 765 - of_clk_add_hw_provider(np, of_clk_hw_onecell_get, zynqmp_data); 766 - 767 - return 0; 765 + return of_clk_add_hw_provider(np, of_clk_hw_onecell_get, zynqmp_data); 768 766 } 769 767 770 768 static int zynqmp_clock_probe(struct platform_device *pdev)
+2 -1
drivers/mfd/intel-lpss.c
··· 301 301 302 302 snprintf(name, sizeof(name), "%s-div", devname); 303 303 tmp = clk_register_fractional_divider(NULL, name, __clk_get_name(tmp), 304 - 0, lpss->priv, 1, 15, 16, 15, 0, 304 + CLK_FRAC_DIVIDER_POWER_OF_TWO_PS, 305 + lpss->priv, 1, 15, 16, 15, 0, 305 306 NULL); 306 307 if (IS_ERR(tmp)) 307 308 return PTR_ERR(tmp);
+3 -1
include/dt-bindings/clock/imx8mn-clock.h
··· 241 241 #define IMX8MN_CLK_CLKOUT2_DIV 219 242 242 #define IMX8MN_CLK_CLKOUT2 220 243 243 244 - #define IMX8MN_CLK_END 221 244 + #define IMX8MN_CLK_M7_CORE 221 245 + 246 + #define IMX8MN_CLK_END 222 245 247 246 248 #endif
+585
include/dt-bindings/clock/mt8192-clk.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0-only */ 2 + /* 3 + * Copyright (c) 2021 MediaTek Inc. 4 + * Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 + */ 6 + 7 + #ifndef _DT_BINDINGS_CLK_MT8192_H 8 + #define _DT_BINDINGS_CLK_MT8192_H 9 + 10 + /* TOPCKGEN */ 11 + 12 + #define CLK_TOP_AXI_SEL 0 13 + #define CLK_TOP_SPM_SEL 1 14 + #define CLK_TOP_SCP_SEL 2 15 + #define CLK_TOP_BUS_AXIMEM_SEL 3 16 + #define CLK_TOP_DISP_SEL 4 17 + #define CLK_TOP_MDP_SEL 5 18 + #define CLK_TOP_IMG1_SEL 6 19 + #define CLK_TOP_IMG2_SEL 7 20 + #define CLK_TOP_IPE_SEL 8 21 + #define CLK_TOP_DPE_SEL 9 22 + #define CLK_TOP_CAM_SEL 10 23 + #define CLK_TOP_CCU_SEL 11 24 + #define CLK_TOP_DSP7_SEL 12 25 + #define CLK_TOP_MFG_REF_SEL 13 26 + #define CLK_TOP_MFG_PLL_SEL 14 27 + #define CLK_TOP_CAMTG_SEL 15 28 + #define CLK_TOP_CAMTG2_SEL 16 29 + #define CLK_TOP_CAMTG3_SEL 17 30 + #define CLK_TOP_CAMTG4_SEL 18 31 + #define CLK_TOP_CAMTG5_SEL 19 32 + #define CLK_TOP_CAMTG6_SEL 20 33 + #define CLK_TOP_UART_SEL 21 34 + #define CLK_TOP_SPI_SEL 22 35 + #define CLK_TOP_MSDC50_0_H_SEL 23 36 + #define CLK_TOP_MSDC50_0_SEL 24 37 + #define CLK_TOP_MSDC30_1_SEL 25 38 + #define CLK_TOP_MSDC30_2_SEL 26 39 + #define CLK_TOP_AUDIO_SEL 27 40 + #define CLK_TOP_AUD_INTBUS_SEL 28 41 + #define CLK_TOP_PWRAP_ULPOSC_SEL 29 42 + #define CLK_TOP_ATB_SEL 30 43 + #define CLK_TOP_DPI_SEL 31 44 + #define CLK_TOP_SCAM_SEL 32 45 + #define CLK_TOP_DISP_PWM_SEL 33 46 + #define CLK_TOP_USB_TOP_SEL 34 47 + #define CLK_TOP_SSUSB_XHCI_SEL 35 48 + #define CLK_TOP_I2C_SEL 36 49 + #define CLK_TOP_SENINF_SEL 37 50 + #define CLK_TOP_SENINF1_SEL 38 51 + #define CLK_TOP_SENINF2_SEL 39 52 + #define CLK_TOP_SENINF3_SEL 40 53 + #define CLK_TOP_TL_SEL 41 54 + #define CLK_TOP_DXCC_SEL 42 55 + #define CLK_TOP_AUD_ENGEN1_SEL 43 56 + #define CLK_TOP_AUD_ENGEN2_SEL 44 57 + #define CLK_TOP_AES_UFSFDE_SEL 45 58 + #define CLK_TOP_UFS_SEL 46 59 + #define CLK_TOP_AUD_1_SEL 47 60 + #define CLK_TOP_AUD_2_SEL 48 61 + #define CLK_TOP_ADSP_SEL 49 62 + #define CLK_TOP_DPMAIF_MAIN_SEL 50 63 + #define CLK_TOP_VENC_SEL 51 64 + #define CLK_TOP_VDEC_SEL 52 65 + #define CLK_TOP_CAMTM_SEL 53 66 + #define CLK_TOP_PWM_SEL 54 67 + #define CLK_TOP_AUDIO_H_SEL 55 68 + #define CLK_TOP_SPMI_MST_SEL 56 69 + #define CLK_TOP_AES_MSDCFDE_SEL 57 70 + #define CLK_TOP_SFLASH_SEL 58 71 + #define CLK_TOP_APLL_I2S0_M_SEL 59 72 + #define CLK_TOP_APLL_I2S1_M_SEL 60 73 + #define CLK_TOP_APLL_I2S2_M_SEL 61 74 + #define CLK_TOP_APLL_I2S3_M_SEL 62 75 + #define CLK_TOP_APLL_I2S4_M_SEL 63 76 + #define CLK_TOP_APLL_I2S5_M_SEL 64 77 + #define CLK_TOP_APLL_I2S6_M_SEL 65 78 + #define CLK_TOP_APLL_I2S7_M_SEL 66 79 + #define CLK_TOP_APLL_I2S8_M_SEL 67 80 + #define CLK_TOP_APLL_I2S9_M_SEL 68 81 + #define CLK_TOP_MAINPLL_D3 69 82 + #define CLK_TOP_MAINPLL_D4 70 83 + #define CLK_TOP_MAINPLL_D4_D2 71 84 + #define CLK_TOP_MAINPLL_D4_D4 72 85 + #define CLK_TOP_MAINPLL_D4_D8 73 86 + #define CLK_TOP_MAINPLL_D4_D16 74 87 + #define CLK_TOP_MAINPLL_D5 75 88 + #define CLK_TOP_MAINPLL_D5_D2 76 89 + #define CLK_TOP_MAINPLL_D5_D4 77 90 + #define CLK_TOP_MAINPLL_D5_D8 78 91 + #define CLK_TOP_MAINPLL_D6 79 92 + #define CLK_TOP_MAINPLL_D6_D2 80 93 + #define CLK_TOP_MAINPLL_D6_D4 81 94 + #define CLK_TOP_MAINPLL_D7 82 95 + #define CLK_TOP_MAINPLL_D7_D2 83 96 + #define CLK_TOP_MAINPLL_D7_D4 84 97 + #define CLK_TOP_MAINPLL_D7_D8 85 98 + #define CLK_TOP_UNIVPLL_D3 86 99 + #define CLK_TOP_UNIVPLL_D4 87 100 + #define CLK_TOP_UNIVPLL_D4_D2 88 101 + #define CLK_TOP_UNIVPLL_D4_D4 89 102 + #define CLK_TOP_UNIVPLL_D4_D8 90 103 + #define CLK_TOP_UNIVPLL_D5 91 104 + #define CLK_TOP_UNIVPLL_D5_D2 92 105 + #define CLK_TOP_UNIVPLL_D5_D4 93 106 + #define CLK_TOP_UNIVPLL_D5_D8 94 107 + #define CLK_TOP_UNIVPLL_D6 95 108 + #define CLK_TOP_UNIVPLL_D6_D2 96 109 + #define CLK_TOP_UNIVPLL_D6_D4 97 110 + #define CLK_TOP_UNIVPLL_D6_D8 98 111 + #define CLK_TOP_UNIVPLL_D6_D16 99 112 + #define CLK_TOP_UNIVPLL_D7 100 113 + #define CLK_TOP_APLL1 101 114 + #define CLK_TOP_APLL1_D2 102 115 + #define CLK_TOP_APLL1_D4 103 116 + #define CLK_TOP_APLL1_D8 104 117 + #define CLK_TOP_APLL2 105 118 + #define CLK_TOP_APLL2_D2 106 119 + #define CLK_TOP_APLL2_D4 107 120 + #define CLK_TOP_APLL2_D8 108 121 + #define CLK_TOP_MMPLL_D4 109 122 + #define CLK_TOP_MMPLL_D4_D2 110 123 + #define CLK_TOP_MMPLL_D5 111 124 + #define CLK_TOP_MMPLL_D5_D2 112 125 + #define CLK_TOP_MMPLL_D6 113 126 + #define CLK_TOP_MMPLL_D6_D2 114 127 + #define CLK_TOP_MMPLL_D7 115 128 + #define CLK_TOP_MMPLL_D9 116 129 + #define CLK_TOP_APUPLL 117 130 + #define CLK_TOP_NPUPLL 118 131 + #define CLK_TOP_TVDPLL 119 132 + #define CLK_TOP_TVDPLL_D2 120 133 + #define CLK_TOP_TVDPLL_D4 121 134 + #define CLK_TOP_TVDPLL_D8 122 135 + #define CLK_TOP_TVDPLL_D16 123 136 + #define CLK_TOP_MSDCPLL 124 137 + #define CLK_TOP_MSDCPLL_D2 125 138 + #define CLK_TOP_MSDCPLL_D4 126 139 + #define CLK_TOP_ULPOSC 127 140 + #define CLK_TOP_OSC_D2 128 141 + #define CLK_TOP_OSC_D4 129 142 + #define CLK_TOP_OSC_D8 130 143 + #define CLK_TOP_OSC_D10 131 144 + #define CLK_TOP_OSC_D16 132 145 + #define CLK_TOP_OSC_D20 133 146 + #define CLK_TOP_CSW_F26M_D2 134 147 + #define CLK_TOP_ADSPPLL 135 148 + #define CLK_TOP_UNIVPLL_192M 136 149 + #define CLK_TOP_UNIVPLL_192M_D2 137 150 + #define CLK_TOP_UNIVPLL_192M_D4 138 151 + #define CLK_TOP_UNIVPLL_192M_D8 139 152 + #define CLK_TOP_UNIVPLL_192M_D16 140 153 + #define CLK_TOP_UNIVPLL_192M_D32 141 154 + #define CLK_TOP_APLL12_DIV0 142 155 + #define CLK_TOP_APLL12_DIV1 143 156 + #define CLK_TOP_APLL12_DIV2 144 157 + #define CLK_TOP_APLL12_DIV3 145 158 + #define CLK_TOP_APLL12_DIV4 146 159 + #define CLK_TOP_APLL12_DIVB 147 160 + #define CLK_TOP_APLL12_DIV5 148 161 + #define CLK_TOP_APLL12_DIV6 149 162 + #define CLK_TOP_APLL12_DIV7 150 163 + #define CLK_TOP_APLL12_DIV8 151 164 + #define CLK_TOP_APLL12_DIV9 152 165 + #define CLK_TOP_SSUSB_TOP_REF 153 166 + #define CLK_TOP_SSUSB_PHY_REF 154 167 + #define CLK_TOP_NR_CLK 155 168 + 169 + /* INFRACFG */ 170 + 171 + #define CLK_INFRA_PMIC_TMR 0 172 + #define CLK_INFRA_PMIC_AP 1 173 + #define CLK_INFRA_PMIC_MD 2 174 + #define CLK_INFRA_PMIC_CONN 3 175 + #define CLK_INFRA_SCPSYS 4 176 + #define CLK_INFRA_SEJ 5 177 + #define CLK_INFRA_APXGPT 6 178 + #define CLK_INFRA_GCE 7 179 + #define CLK_INFRA_GCE2 8 180 + #define CLK_INFRA_THERM 9 181 + #define CLK_INFRA_I2C0 10 182 + #define CLK_INFRA_AP_DMA_PSEUDO 11 183 + #define CLK_INFRA_I2C2 12 184 + #define CLK_INFRA_I2C3 13 185 + #define CLK_INFRA_PWM_H 14 186 + #define CLK_INFRA_PWM1 15 187 + #define CLK_INFRA_PWM2 16 188 + #define CLK_INFRA_PWM3 17 189 + #define CLK_INFRA_PWM4 18 190 + #define CLK_INFRA_PWM 19 191 + #define CLK_INFRA_UART0 20 192 + #define CLK_INFRA_UART1 21 193 + #define CLK_INFRA_UART2 22 194 + #define CLK_INFRA_UART3 23 195 + #define CLK_INFRA_GCE_26M 24 196 + #define CLK_INFRA_CQ_DMA_FPC 25 197 + #define CLK_INFRA_BTIF 26 198 + #define CLK_INFRA_SPI0 27 199 + #define CLK_INFRA_MSDC0 28 200 + #define CLK_INFRA_MSDC1 29 201 + #define CLK_INFRA_MSDC2 30 202 + #define CLK_INFRA_MSDC0_SRC 31 203 + #define CLK_INFRA_GCPU 32 204 + #define CLK_INFRA_TRNG 33 205 + #define CLK_INFRA_AUXADC 34 206 + #define CLK_INFRA_CPUM 35 207 + #define CLK_INFRA_CCIF1_AP 36 208 + #define CLK_INFRA_CCIF1_MD 37 209 + #define CLK_INFRA_AUXADC_MD 38 210 + #define CLK_INFRA_PCIE_TL_26M 39 211 + #define CLK_INFRA_MSDC1_SRC 40 212 + #define CLK_INFRA_MSDC2_SRC 41 213 + #define CLK_INFRA_PCIE_TL_96M 42 214 + #define CLK_INFRA_PCIE_PL_P_250M 43 215 + #define CLK_INFRA_DEVICE_APC 44 216 + #define CLK_INFRA_CCIF_AP 45 217 + #define CLK_INFRA_DEBUGSYS 46 218 + #define CLK_INFRA_AUDIO 47 219 + #define CLK_INFRA_CCIF_MD 48 220 + #define CLK_INFRA_DXCC_SEC_CORE 49 221 + #define CLK_INFRA_DXCC_AO 50 222 + #define CLK_INFRA_DBG_TRACE 51 223 + #define CLK_INFRA_DEVMPU_B 52 224 + #define CLK_INFRA_DRAMC_F26M 53 225 + #define CLK_INFRA_IRTX 54 226 + #define CLK_INFRA_SSUSB 55 227 + #define CLK_INFRA_DISP_PWM 56 228 + #define CLK_INFRA_CLDMA_B 57 229 + #define CLK_INFRA_AUDIO_26M_B 58 230 + #define CLK_INFRA_MODEM_TEMP_SHARE 59 231 + #define CLK_INFRA_SPI1 60 232 + #define CLK_INFRA_I2C4 61 233 + #define CLK_INFRA_SPI2 62 234 + #define CLK_INFRA_SPI3 63 235 + #define CLK_INFRA_UNIPRO_SYS 64 236 + #define CLK_INFRA_UNIPRO_TICK 65 237 + #define CLK_INFRA_UFS_MP_SAP_B 66 238 + #define CLK_INFRA_MD32_B 67 239 + #define CLK_INFRA_UNIPRO_MBIST 68 240 + #define CLK_INFRA_I2C5 69 241 + #define CLK_INFRA_I2C5_ARBITER 70 242 + #define CLK_INFRA_I2C5_IMM 71 243 + #define CLK_INFRA_I2C1_ARBITER 72 244 + #define CLK_INFRA_I2C1_IMM 73 245 + #define CLK_INFRA_I2C2_ARBITER 74 246 + #define CLK_INFRA_I2C2_IMM 75 247 + #define CLK_INFRA_SPI4 76 248 + #define CLK_INFRA_SPI5 77 249 + #define CLK_INFRA_CQ_DMA 78 250 + #define CLK_INFRA_UFS 79 251 + #define CLK_INFRA_AES_UFSFDE 80 252 + #define CLK_INFRA_UFS_TICK 81 253 + #define CLK_INFRA_SSUSB_XHCI 82 254 + #define CLK_INFRA_MSDC0_SELF 83 255 + #define CLK_INFRA_MSDC1_SELF 84 256 + #define CLK_INFRA_MSDC2_SELF 85 257 + #define CLK_INFRA_UFS_AXI 86 258 + #define CLK_INFRA_I2C6 87 259 + #define CLK_INFRA_AP_MSDC0 88 260 + #define CLK_INFRA_MD_MSDC0 89 261 + #define CLK_INFRA_CCIF5_AP 90 262 + #define CLK_INFRA_CCIF5_MD 91 263 + #define CLK_INFRA_PCIE_TOP_H_133M 92 264 + #define CLK_INFRA_FLASHIF_TOP_H_133M 93 265 + #define CLK_INFRA_PCIE_PERI_26M 94 266 + #define CLK_INFRA_CCIF2_AP 95 267 + #define CLK_INFRA_CCIF2_MD 96 268 + #define CLK_INFRA_CCIF3_AP 97 269 + #define CLK_INFRA_CCIF3_MD 98 270 + #define CLK_INFRA_SEJ_F13M 99 271 + #define CLK_INFRA_AES 100 272 + #define CLK_INFRA_I2C7 101 273 + #define CLK_INFRA_I2C8 102 274 + #define CLK_INFRA_FBIST2FPC 103 275 + #define CLK_INFRA_DEVICE_APC_SYNC 104 276 + #define CLK_INFRA_DPMAIF_MAIN 105 277 + #define CLK_INFRA_PCIE_TL_32K 106 278 + #define CLK_INFRA_CCIF4_AP 107 279 + #define CLK_INFRA_CCIF4_MD 108 280 + #define CLK_INFRA_SPI6 109 281 + #define CLK_INFRA_SPI7 110 282 + #define CLK_INFRA_133M 111 283 + #define CLK_INFRA_66M 112 284 + #define CLK_INFRA_66M_PERI_BUS 113 285 + #define CLK_INFRA_FREE_DCM_133M 114 286 + #define CLK_INFRA_FREE_DCM_66M 115 287 + #define CLK_INFRA_PERI_BUS_DCM_133M 116 288 + #define CLK_INFRA_PERI_BUS_DCM_66M 117 289 + #define CLK_INFRA_FLASHIF_PERI_26M 118 290 + #define CLK_INFRA_FLASHIF_SFLASH 119 291 + #define CLK_INFRA_AP_DMA 120 292 + #define CLK_INFRA_NR_CLK 121 293 + 294 + /* PERICFG */ 295 + 296 + #define CLK_PERI_PERIAXI 0 297 + #define CLK_PERI_NR_CLK 1 298 + 299 + /* APMIXEDSYS */ 300 + 301 + #define CLK_APMIXED_MAINPLL 0 302 + #define CLK_APMIXED_UNIVPLL 1 303 + #define CLK_APMIXED_USBPLL 2 304 + #define CLK_APMIXED_MSDCPLL 3 305 + #define CLK_APMIXED_MMPLL 4 306 + #define CLK_APMIXED_ADSPPLL 5 307 + #define CLK_APMIXED_MFGPLL 6 308 + #define CLK_APMIXED_TVDPLL 7 309 + #define CLK_APMIXED_APLL1 8 310 + #define CLK_APMIXED_APLL2 9 311 + #define CLK_APMIXED_MIPID26M 10 312 + #define CLK_APMIXED_NR_CLK 11 313 + 314 + /* SCP_ADSP */ 315 + 316 + #define CLK_SCP_ADSP_AUDIODSP 0 317 + #define CLK_SCP_ADSP_NR_CLK 1 318 + 319 + /* IMP_IIC_WRAP_C */ 320 + 321 + #define CLK_IMP_IIC_WRAP_C_I2C10 0 322 + #define CLK_IMP_IIC_WRAP_C_I2C11 1 323 + #define CLK_IMP_IIC_WRAP_C_I2C12 2 324 + #define CLK_IMP_IIC_WRAP_C_I2C13 3 325 + #define CLK_IMP_IIC_WRAP_C_NR_CLK 4 326 + 327 + /* AUDSYS */ 328 + 329 + #define CLK_AUD_AFE 0 330 + #define CLK_AUD_22M 1 331 + #define CLK_AUD_24M 2 332 + #define CLK_AUD_APLL2_TUNER 3 333 + #define CLK_AUD_APLL_TUNER 4 334 + #define CLK_AUD_TDM 5 335 + #define CLK_AUD_ADC 6 336 + #define CLK_AUD_DAC 7 337 + #define CLK_AUD_DAC_PREDIS 8 338 + #define CLK_AUD_TML 9 339 + #define CLK_AUD_NLE 10 340 + #define CLK_AUD_I2S1_B 11 341 + #define CLK_AUD_I2S2_B 12 342 + #define CLK_AUD_I2S3_B 13 343 + #define CLK_AUD_I2S4_B 14 344 + #define CLK_AUD_CONNSYS_I2S_ASRC 15 345 + #define CLK_AUD_GENERAL1_ASRC 16 346 + #define CLK_AUD_GENERAL2_ASRC 17 347 + #define CLK_AUD_DAC_HIRES 18 348 + #define CLK_AUD_ADC_HIRES 19 349 + #define CLK_AUD_ADC_HIRES_TML 20 350 + #define CLK_AUD_ADDA6_ADC 21 351 + #define CLK_AUD_ADDA6_ADC_HIRES 22 352 + #define CLK_AUD_3RD_DAC 23 353 + #define CLK_AUD_3RD_DAC_PREDIS 24 354 + #define CLK_AUD_3RD_DAC_TML 25 355 + #define CLK_AUD_3RD_DAC_HIRES 26 356 + #define CLK_AUD_I2S5_B 27 357 + #define CLK_AUD_I2S6_B 28 358 + #define CLK_AUD_I2S7_B 29 359 + #define CLK_AUD_I2S8_B 30 360 + #define CLK_AUD_I2S9_B 31 361 + #define CLK_AUD_NR_CLK 32 362 + 363 + /* IMP_IIC_WRAP_E */ 364 + 365 + #define CLK_IMP_IIC_WRAP_E_I2C3 0 366 + #define CLK_IMP_IIC_WRAP_E_NR_CLK 1 367 + 368 + /* IMP_IIC_WRAP_S */ 369 + 370 + #define CLK_IMP_IIC_WRAP_S_I2C7 0 371 + #define CLK_IMP_IIC_WRAP_S_I2C8 1 372 + #define CLK_IMP_IIC_WRAP_S_I2C9 2 373 + #define CLK_IMP_IIC_WRAP_S_NR_CLK 3 374 + 375 + /* IMP_IIC_WRAP_WS */ 376 + 377 + #define CLK_IMP_IIC_WRAP_WS_I2C1 0 378 + #define CLK_IMP_IIC_WRAP_WS_I2C2 1 379 + #define CLK_IMP_IIC_WRAP_WS_I2C4 2 380 + #define CLK_IMP_IIC_WRAP_WS_NR_CLK 3 381 + 382 + /* IMP_IIC_WRAP_W */ 383 + 384 + #define CLK_IMP_IIC_WRAP_W_I2C5 0 385 + #define CLK_IMP_IIC_WRAP_W_NR_CLK 1 386 + 387 + /* IMP_IIC_WRAP_N */ 388 + 389 + #define CLK_IMP_IIC_WRAP_N_I2C0 0 390 + #define CLK_IMP_IIC_WRAP_N_I2C6 1 391 + #define CLK_IMP_IIC_WRAP_N_NR_CLK 2 392 + 393 + /* MSDC_TOP */ 394 + 395 + #define CLK_MSDC_TOP_AES_0P 0 396 + #define CLK_MSDC_TOP_SRC_0P 1 397 + #define CLK_MSDC_TOP_SRC_1P 2 398 + #define CLK_MSDC_TOP_SRC_2P 3 399 + #define CLK_MSDC_TOP_P_MSDC0 4 400 + #define CLK_MSDC_TOP_P_MSDC1 5 401 + #define CLK_MSDC_TOP_P_MSDC2 6 402 + #define CLK_MSDC_TOP_P_CFG 7 403 + #define CLK_MSDC_TOP_AXI 8 404 + #define CLK_MSDC_TOP_H_MST_0P 9 405 + #define CLK_MSDC_TOP_H_MST_1P 10 406 + #define CLK_MSDC_TOP_H_MST_2P 11 407 + #define CLK_MSDC_TOP_MEM_OFF_DLY_26M 12 408 + #define CLK_MSDC_TOP_32K 13 409 + #define CLK_MSDC_TOP_AHB2AXI_BRG_AXI 14 410 + #define CLK_MSDC_TOP_NR_CLK 15 411 + 412 + /* MSDC */ 413 + 414 + #define CLK_MSDC_AXI_WRAP 0 415 + #define CLK_MSDC_NR_CLK 1 416 + 417 + /* MFGCFG */ 418 + 419 + #define CLK_MFG_BG3D 0 420 + #define CLK_MFG_NR_CLK 1 421 + 422 + /* MMSYS */ 423 + 424 + #define CLK_MM_DISP_MUTEX0 0 425 + #define CLK_MM_DISP_CONFIG 1 426 + #define CLK_MM_DISP_OVL0 2 427 + #define CLK_MM_DISP_RDMA0 3 428 + #define CLK_MM_DISP_OVL0_2L 4 429 + #define CLK_MM_DISP_WDMA0 5 430 + #define CLK_MM_DISP_UFBC_WDMA0 6 431 + #define CLK_MM_DISP_RSZ0 7 432 + #define CLK_MM_DISP_AAL0 8 433 + #define CLK_MM_DISP_CCORR0 9 434 + #define CLK_MM_DISP_DITHER0 10 435 + #define CLK_MM_SMI_INFRA 11 436 + #define CLK_MM_DISP_GAMMA0 12 437 + #define CLK_MM_DISP_POSTMASK0 13 438 + #define CLK_MM_DISP_DSC_WRAP0 14 439 + #define CLK_MM_DSI0 15 440 + #define CLK_MM_DISP_COLOR0 16 441 + #define CLK_MM_SMI_COMMON 17 442 + #define CLK_MM_DISP_FAKE_ENG0 18 443 + #define CLK_MM_DISP_FAKE_ENG1 19 444 + #define CLK_MM_MDP_TDSHP4 20 445 + #define CLK_MM_MDP_RSZ4 21 446 + #define CLK_MM_MDP_AAL4 22 447 + #define CLK_MM_MDP_HDR4 23 448 + #define CLK_MM_MDP_RDMA4 24 449 + #define CLK_MM_MDP_COLOR4 25 450 + #define CLK_MM_DISP_Y2R0 26 451 + #define CLK_MM_SMI_GALS 27 452 + #define CLK_MM_DISP_OVL2_2L 28 453 + #define CLK_MM_DISP_RDMA4 29 454 + #define CLK_MM_DISP_DPI0 30 455 + #define CLK_MM_SMI_IOMMU 31 456 + #define CLK_MM_DSI_DSI0 32 457 + #define CLK_MM_DPI_DPI0 33 458 + #define CLK_MM_26MHZ 34 459 + #define CLK_MM_32KHZ 35 460 + #define CLK_MM_NR_CLK 36 461 + 462 + /* IMGSYS */ 463 + 464 + #define CLK_IMG_LARB9 0 465 + #define CLK_IMG_LARB10 1 466 + #define CLK_IMG_DIP 2 467 + #define CLK_IMG_GALS 3 468 + #define CLK_IMG_NR_CLK 4 469 + 470 + /* IMGSYS2 */ 471 + 472 + #define CLK_IMG2_LARB11 0 473 + #define CLK_IMG2_LARB12 1 474 + #define CLK_IMG2_MFB 2 475 + #define CLK_IMG2_WPE 3 476 + #define CLK_IMG2_MSS 4 477 + #define CLK_IMG2_GALS 5 478 + #define CLK_IMG2_NR_CLK 6 479 + 480 + /* VDECSYS_SOC */ 481 + 482 + #define CLK_VDEC_SOC_LARB1 0 483 + #define CLK_VDEC_SOC_LAT 1 484 + #define CLK_VDEC_SOC_LAT_ACTIVE 2 485 + #define CLK_VDEC_SOC_VDEC 3 486 + #define CLK_VDEC_SOC_VDEC_ACTIVE 4 487 + #define CLK_VDEC_SOC_NR_CLK 5 488 + 489 + /* VDECSYS */ 490 + 491 + #define CLK_VDEC_LARB1 0 492 + #define CLK_VDEC_LAT 1 493 + #define CLK_VDEC_LAT_ACTIVE 2 494 + #define CLK_VDEC_VDEC 3 495 + #define CLK_VDEC_ACTIVE 4 496 + #define CLK_VDEC_NR_CLK 5 497 + 498 + /* VENCSYS */ 499 + 500 + #define CLK_VENC_SET0_LARB 0 501 + #define CLK_VENC_SET1_VENC 1 502 + #define CLK_VENC_SET2_JPGENC 2 503 + #define CLK_VENC_SET5_GALS 3 504 + #define CLK_VENC_NR_CLK 4 505 + 506 + /* CAMSYS */ 507 + 508 + #define CLK_CAM_LARB13 0 509 + #define CLK_CAM_DFP_VAD 1 510 + #define CLK_CAM_LARB14 2 511 + #define CLK_CAM_CAM 3 512 + #define CLK_CAM_CAMTG 4 513 + #define CLK_CAM_SENINF 5 514 + #define CLK_CAM_CAMSV0 6 515 + #define CLK_CAM_CAMSV1 7 516 + #define CLK_CAM_CAMSV2 8 517 + #define CLK_CAM_CAMSV3 9 518 + #define CLK_CAM_CCU0 10 519 + #define CLK_CAM_CCU1 11 520 + #define CLK_CAM_MRAW0 12 521 + #define CLK_CAM_FAKE_ENG 13 522 + #define CLK_CAM_CCU_GALS 14 523 + #define CLK_CAM_CAM2MM_GALS 15 524 + #define CLK_CAM_NR_CLK 16 525 + 526 + /* CAMSYS_RAWA */ 527 + 528 + #define CLK_CAM_RAWA_LARBX 0 529 + #define CLK_CAM_RAWA_CAM 1 530 + #define CLK_CAM_RAWA_CAMTG 2 531 + #define CLK_CAM_RAWA_NR_CLK 3 532 + 533 + /* CAMSYS_RAWB */ 534 + 535 + #define CLK_CAM_RAWB_LARBX 0 536 + #define CLK_CAM_RAWB_CAM 1 537 + #define CLK_CAM_RAWB_CAMTG 2 538 + #define CLK_CAM_RAWB_NR_CLK 3 539 + 540 + /* CAMSYS_RAWC */ 541 + 542 + #define CLK_CAM_RAWC_LARBX 0 543 + #define CLK_CAM_RAWC_CAM 1 544 + #define CLK_CAM_RAWC_CAMTG 2 545 + #define CLK_CAM_RAWC_NR_CLK 3 546 + 547 + /* IPESYS */ 548 + 549 + #define CLK_IPE_LARB19 0 550 + #define CLK_IPE_LARB20 1 551 + #define CLK_IPE_SMI_SUBCOM 2 552 + #define CLK_IPE_FD 3 553 + #define CLK_IPE_FE 4 554 + #define CLK_IPE_RSC 5 555 + #define CLK_IPE_DPE 6 556 + #define CLK_IPE_GALS 7 557 + #define CLK_IPE_NR_CLK 8 558 + 559 + /* MDPSYS */ 560 + 561 + #define CLK_MDP_RDMA0 0 562 + #define CLK_MDP_TDSHP0 1 563 + #define CLK_MDP_IMG_DL_ASYNC0 2 564 + #define CLK_MDP_IMG_DL_ASYNC1 3 565 + #define CLK_MDP_RDMA1 4 566 + #define CLK_MDP_TDSHP1 5 567 + #define CLK_MDP_SMI0 6 568 + #define CLK_MDP_APB_BUS 7 569 + #define CLK_MDP_WROT0 8 570 + #define CLK_MDP_RSZ0 9 571 + #define CLK_MDP_HDR0 10 572 + #define CLK_MDP_MUTEX0 11 573 + #define CLK_MDP_WROT1 12 574 + #define CLK_MDP_RSZ1 13 575 + #define CLK_MDP_HDR1 14 576 + #define CLK_MDP_FAKE_ENG0 15 577 + #define CLK_MDP_AAL0 16 578 + #define CLK_MDP_AAL1 17 579 + #define CLK_MDP_COLOR0 18 580 + #define CLK_MDP_COLOR1 19 581 + #define CLK_MDP_IMG_DL_RELAY0_ASYNC0 20 582 + #define CLK_MDP_IMG_DL_RELAY1_ASYNC1 21 583 + #define CLK_MDP_NR_CLK 22 584 + 585 + #endif /* _DT_BINDINGS_CLK_MT8192_H */
+55
include/dt-bindings/clock/qcom,dispcc-sc7280.h
··· 1 + /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2 + /* 3 + * Copyright (c) 2021, The Linux Foundation. All rights reserved. 4 + */ 5 + 6 + #ifndef _DT_BINDINGS_CLK_QCOM_DISP_CC_SC7280_H 7 + #define _DT_BINDINGS_CLK_QCOM_DISP_CC_SC7280_H 8 + 9 + /* DISP_CC clocks */ 10 + #define DISP_CC_PLL0 0 11 + #define DISP_CC_MDSS_AHB_CLK 1 12 + #define DISP_CC_MDSS_AHB_CLK_SRC 2 13 + #define DISP_CC_MDSS_BYTE0_CLK 3 14 + #define DISP_CC_MDSS_BYTE0_CLK_SRC 4 15 + #define DISP_CC_MDSS_BYTE0_DIV_CLK_SRC 5 16 + #define DISP_CC_MDSS_BYTE0_INTF_CLK 6 17 + #define DISP_CC_MDSS_DP_AUX_CLK 7 18 + #define DISP_CC_MDSS_DP_AUX_CLK_SRC 8 19 + #define DISP_CC_MDSS_DP_CRYPTO_CLK 9 20 + #define DISP_CC_MDSS_DP_CRYPTO_CLK_SRC 10 21 + #define DISP_CC_MDSS_DP_LINK_CLK 11 22 + #define DISP_CC_MDSS_DP_LINK_CLK_SRC 12 23 + #define DISP_CC_MDSS_DP_LINK_DIV_CLK_SRC 13 24 + #define DISP_CC_MDSS_DP_LINK_INTF_CLK 14 25 + #define DISP_CC_MDSS_DP_PIXEL_CLK 15 26 + #define DISP_CC_MDSS_DP_PIXEL_CLK_SRC 16 27 + #define DISP_CC_MDSS_EDP_AUX_CLK 17 28 + #define DISP_CC_MDSS_EDP_AUX_CLK_SRC 18 29 + #define DISP_CC_MDSS_EDP_LINK_CLK 19 30 + #define DISP_CC_MDSS_EDP_LINK_CLK_SRC 20 31 + #define DISP_CC_MDSS_EDP_LINK_DIV_CLK_SRC 21 32 + #define DISP_CC_MDSS_EDP_LINK_INTF_CLK 22 33 + #define DISP_CC_MDSS_EDP_PIXEL_CLK 23 34 + #define DISP_CC_MDSS_EDP_PIXEL_CLK_SRC 24 35 + #define DISP_CC_MDSS_ESC0_CLK 25 36 + #define DISP_CC_MDSS_ESC0_CLK_SRC 26 37 + #define DISP_CC_MDSS_MDP_CLK 27 38 + #define DISP_CC_MDSS_MDP_CLK_SRC 28 39 + #define DISP_CC_MDSS_MDP_LUT_CLK 29 40 + #define DISP_CC_MDSS_NON_GDSC_AHB_CLK 30 41 + #define DISP_CC_MDSS_PCLK0_CLK 31 42 + #define DISP_CC_MDSS_PCLK0_CLK_SRC 32 43 + #define DISP_CC_MDSS_ROT_CLK 33 44 + #define DISP_CC_MDSS_ROT_CLK_SRC 34 45 + #define DISP_CC_MDSS_RSCC_AHB_CLK 35 46 + #define DISP_CC_MDSS_RSCC_VSYNC_CLK 36 47 + #define DISP_CC_MDSS_VSYNC_CLK 37 48 + #define DISP_CC_MDSS_VSYNC_CLK_SRC 38 49 + #define DISP_CC_SLEEP_CLK 39 50 + #define DISP_CC_XO_CLK 40 51 + 52 + /* DISP_CC power domains */ 53 + #define DISP_CC_MDSS_CORE_GDSC 0 54 + 55 + #endif
+234
include/dt-bindings/clock/qcom,gcc-msm8953.h
··· 1 + /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2 + 3 + #ifndef _DT_BINDINGS_CLK_MSM_GCC_8953_H 4 + #define _DT_BINDINGS_CLK_MSM_GCC_8953_H 5 + 6 + /* Clocks */ 7 + #define APC0_DROOP_DETECTOR_CLK_SRC 0 8 + #define APC1_DROOP_DETECTOR_CLK_SRC 1 9 + #define APSS_AHB_CLK_SRC 2 10 + #define BLSP1_QUP1_I2C_APPS_CLK_SRC 3 11 + #define BLSP1_QUP1_SPI_APPS_CLK_SRC 4 12 + #define BLSP1_QUP2_I2C_APPS_CLK_SRC 5 13 + #define BLSP1_QUP2_SPI_APPS_CLK_SRC 6 14 + #define BLSP1_QUP3_I2C_APPS_CLK_SRC 7 15 + #define BLSP1_QUP3_SPI_APPS_CLK_SRC 8 16 + #define BLSP1_QUP4_I2C_APPS_CLK_SRC 9 17 + #define BLSP1_QUP4_SPI_APPS_CLK_SRC 10 18 + #define BLSP1_UART1_APPS_CLK_SRC 11 19 + #define BLSP1_UART2_APPS_CLK_SRC 12 20 + #define BLSP2_QUP1_I2C_APPS_CLK_SRC 13 21 + #define BLSP2_QUP1_SPI_APPS_CLK_SRC 14 22 + #define BLSP2_QUP2_I2C_APPS_CLK_SRC 15 23 + #define BLSP2_QUP2_SPI_APPS_CLK_SRC 16 24 + #define BLSP2_QUP3_I2C_APPS_CLK_SRC 17 25 + #define BLSP2_QUP3_SPI_APPS_CLK_SRC 18 26 + #define BLSP2_QUP4_I2C_APPS_CLK_SRC 19 27 + #define BLSP2_QUP4_SPI_APPS_CLK_SRC 20 28 + #define BLSP2_UART1_APPS_CLK_SRC 21 29 + #define BLSP2_UART2_APPS_CLK_SRC 22 30 + #define BYTE0_CLK_SRC 23 31 + #define BYTE1_CLK_SRC 24 32 + #define CAMSS_GP0_CLK_SRC 25 33 + #define CAMSS_GP1_CLK_SRC 26 34 + #define CAMSS_TOP_AHB_CLK_SRC 27 35 + #define CCI_CLK_SRC 28 36 + #define CPP_CLK_SRC 29 37 + #define CRYPTO_CLK_SRC 30 38 + #define CSI0PHYTIMER_CLK_SRC 31 39 + #define CSI0P_CLK_SRC 32 40 + #define CSI0_CLK_SRC 33 41 + #define CSI1PHYTIMER_CLK_SRC 34 42 + #define CSI1P_CLK_SRC 35 43 + #define CSI1_CLK_SRC 36 44 + #define CSI2PHYTIMER_CLK_SRC 37 45 + #define CSI2P_CLK_SRC 38 46 + #define CSI2_CLK_SRC 39 47 + #define ESC0_CLK_SRC 40 48 + #define ESC1_CLK_SRC 41 49 + #define GCC_APC0_DROOP_DETECTOR_GPLL0_CLK 42 50 + #define GCC_APC1_DROOP_DETECTOR_GPLL0_CLK 43 51 + #define GCC_APSS_AHB_CLK 44 52 + #define GCC_APSS_AXI_CLK 45 53 + #define GCC_APSS_TCU_ASYNC_CLK 46 54 + #define GCC_BIMC_GFX_CLK 47 55 + #define GCC_BIMC_GPU_CLK 48 56 + #define GCC_BLSP1_AHB_CLK 49 57 + #define GCC_BLSP1_QUP1_I2C_APPS_CLK 50 58 + #define GCC_BLSP1_QUP1_SPI_APPS_CLK 51 59 + #define GCC_BLSP1_QUP2_I2C_APPS_CLK 52 60 + #define GCC_BLSP1_QUP2_SPI_APPS_CLK 53 61 + #define GCC_BLSP1_QUP3_I2C_APPS_CLK 54 62 + #define GCC_BLSP1_QUP3_SPI_APPS_CLK 55 63 + #define GCC_BLSP1_QUP4_I2C_APPS_CLK 56 64 + #define GCC_BLSP1_QUP4_SPI_APPS_CLK 57 65 + #define GCC_BLSP1_UART1_APPS_CLK 58 66 + #define GCC_BLSP1_UART2_APPS_CLK 59 67 + #define GCC_BLSP2_AHB_CLK 60 68 + #define GCC_BLSP2_QUP1_I2C_APPS_CLK 61 69 + #define GCC_BLSP2_QUP1_SPI_APPS_CLK 62 70 + #define GCC_BLSP2_QUP2_I2C_APPS_CLK 63 71 + #define GCC_BLSP2_QUP2_SPI_APPS_CLK 64 72 + #define GCC_BLSP2_QUP3_I2C_APPS_CLK 65 73 + #define GCC_BLSP2_QUP3_SPI_APPS_CLK 66 74 + #define GCC_BLSP2_QUP4_I2C_APPS_CLK 67 75 + #define GCC_BLSP2_QUP4_SPI_APPS_CLK 68 76 + #define GCC_BLSP2_UART1_APPS_CLK 69 77 + #define GCC_BLSP2_UART2_APPS_CLK 70 78 + #define GCC_BOOT_ROM_AHB_CLK 71 79 + #define GCC_CAMSS_AHB_CLK 72 80 + #define GCC_CAMSS_CCI_AHB_CLK 73 81 + #define GCC_CAMSS_CCI_CLK 74 82 + #define GCC_CAMSS_CPP_AHB_CLK 75 83 + #define GCC_CAMSS_CPP_AXI_CLK 76 84 + #define GCC_CAMSS_CPP_CLK 77 85 + #define GCC_CAMSS_CSI0PHYTIMER_CLK 78 86 + #define GCC_CAMSS_CSI0PHY_CLK 79 87 + #define GCC_CAMSS_CSI0PIX_CLK 80 88 + #define GCC_CAMSS_CSI0RDI_CLK 81 89 + #define GCC_CAMSS_CSI0_AHB_CLK 82 90 + #define GCC_CAMSS_CSI0_CLK 83 91 + #define GCC_CAMSS_CSI0_CSIPHY_3P_CLK 84 92 + #define GCC_CAMSS_CSI1PHYTIMER_CLK 85 93 + #define GCC_CAMSS_CSI1PHY_CLK 86 94 + #define GCC_CAMSS_CSI1PIX_CLK 87 95 + #define GCC_CAMSS_CSI1RDI_CLK 88 96 + #define GCC_CAMSS_CSI1_AHB_CLK 89 97 + #define GCC_CAMSS_CSI1_CLK 90 98 + #define GCC_CAMSS_CSI1_CSIPHY_3P_CLK 91 99 + #define GCC_CAMSS_CSI2PHYTIMER_CLK 92 100 + #define GCC_CAMSS_CSI2PHY_CLK 93 101 + #define GCC_CAMSS_CSI2PIX_CLK 94 102 + #define GCC_CAMSS_CSI2RDI_CLK 95 103 + #define GCC_CAMSS_CSI2_AHB_CLK 96 104 + #define GCC_CAMSS_CSI2_CLK 97 105 + #define GCC_CAMSS_CSI2_CSIPHY_3P_CLK 98 106 + #define GCC_CAMSS_CSI_VFE0_CLK 99 107 + #define GCC_CAMSS_CSI_VFE1_CLK 100 108 + #define GCC_CAMSS_GP0_CLK 101 109 + #define GCC_CAMSS_GP1_CLK 102 110 + #define GCC_CAMSS_ISPIF_AHB_CLK 103 111 + #define GCC_CAMSS_JPEG0_CLK 104 112 + #define GCC_CAMSS_JPEG_AHB_CLK 105 113 + #define GCC_CAMSS_JPEG_AXI_CLK 106 114 + #define GCC_CAMSS_MCLK0_CLK 107 115 + #define GCC_CAMSS_MCLK1_CLK 108 116 + #define GCC_CAMSS_MCLK2_CLK 109 117 + #define GCC_CAMSS_MCLK3_CLK 110 118 + #define GCC_CAMSS_MICRO_AHB_CLK 111 119 + #define GCC_CAMSS_TOP_AHB_CLK 112 120 + #define GCC_CAMSS_VFE0_AHB_CLK 113 121 + #define GCC_CAMSS_VFE0_AXI_CLK 114 122 + #define GCC_CAMSS_VFE0_CLK 115 123 + #define GCC_CAMSS_VFE1_AHB_CLK 116 124 + #define GCC_CAMSS_VFE1_AXI_CLK 117 125 + #define GCC_CAMSS_VFE1_CLK 118 126 + #define GCC_CPP_TBU_CLK 119 127 + #define GCC_CRYPTO_AHB_CLK 120 128 + #define GCC_CRYPTO_AXI_CLK 121 129 + #define GCC_CRYPTO_CLK 122 130 + #define GCC_DCC_CLK 123 131 + #define GCC_GP1_CLK 124 132 + #define GCC_GP2_CLK 125 133 + #define GCC_GP3_CLK 126 134 + #define GCC_JPEG_TBU_CLK 127 135 + #define GCC_MDP_TBU_CLK 128 136 + #define GCC_MDSS_AHB_CLK 129 137 + #define GCC_MDSS_AXI_CLK 130 138 + #define GCC_MDSS_BYTE0_CLK 131 139 + #define GCC_MDSS_BYTE1_CLK 132 140 + #define GCC_MDSS_ESC0_CLK 133 141 + #define GCC_MDSS_ESC1_CLK 134 142 + #define GCC_MDSS_MDP_CLK 135 143 + #define GCC_MDSS_PCLK0_CLK 136 144 + #define GCC_MDSS_PCLK1_CLK 137 145 + #define GCC_MDSS_VSYNC_CLK 138 146 + #define GCC_MSS_CFG_AHB_CLK 139 147 + #define GCC_MSS_Q6_BIMC_AXI_CLK 140 148 + #define GCC_OXILI_AHB_CLK 141 149 + #define GCC_OXILI_AON_CLK 142 150 + #define GCC_OXILI_GFX3D_CLK 143 151 + #define GCC_OXILI_TIMER_CLK 144 152 + #define GCC_PCNOC_USB3_AXI_CLK 145 153 + #define GCC_PDM2_CLK 146 154 + #define GCC_PDM_AHB_CLK 147 155 + #define GCC_PRNG_AHB_CLK 148 156 + #define GCC_QDSS_DAP_CLK 149 157 + #define GCC_QUSB_REF_CLK 150 158 + #define GCC_RBCPR_GFX_CLK 151 159 + #define GCC_SDCC1_AHB_CLK 152 160 + #define GCC_SDCC1_APPS_CLK 153 161 + #define GCC_SDCC1_ICE_CORE_CLK 154 162 + #define GCC_SDCC2_AHB_CLK 155 163 + #define GCC_SDCC2_APPS_CLK 156 164 + #define GCC_SMMU_CFG_CLK 157 165 + #define GCC_USB30_MASTER_CLK 158 166 + #define GCC_USB30_MOCK_UTMI_CLK 159 167 + #define GCC_USB30_SLEEP_CLK 160 168 + #define GCC_USB3_AUX_CLK 161 169 + #define GCC_USB3_PIPE_CLK 162 170 + #define GCC_USB_PHY_CFG_AHB_CLK 163 171 + #define GCC_USB_SS_REF_CLK 164 172 + #define GCC_VENUS0_AHB_CLK 165 173 + #define GCC_VENUS0_AXI_CLK 166 174 + #define GCC_VENUS0_CORE0_VCODEC0_CLK 167 175 + #define GCC_VENUS0_VCODEC0_CLK 168 176 + #define GCC_VENUS_TBU_CLK 169 177 + #define GCC_VFE1_TBU_CLK 170 178 + #define GCC_VFE_TBU_CLK 171 179 + #define GFX3D_CLK_SRC 172 180 + #define GP1_CLK_SRC 173 181 + #define GP2_CLK_SRC 174 182 + #define GP3_CLK_SRC 175 183 + #define GPLL0 176 184 + #define GPLL0_EARLY 177 185 + #define GPLL2 178 186 + #define GPLL2_EARLY 179 187 + #define GPLL3 180 188 + #define GPLL3_EARLY 181 189 + #define GPLL4 182 190 + #define GPLL4_EARLY 183 191 + #define GPLL6 184 192 + #define GPLL6_EARLY 185 193 + #define JPEG0_CLK_SRC 186 194 + #define MCLK0_CLK_SRC 187 195 + #define MCLK1_CLK_SRC 188 196 + #define MCLK2_CLK_SRC 189 197 + #define MCLK3_CLK_SRC 190 198 + #define MDP_CLK_SRC 191 199 + #define PCLK0_CLK_SRC 192 200 + #define PCLK1_CLK_SRC 193 201 + #define PDM2_CLK_SRC 194 202 + #define RBCPR_GFX_CLK_SRC 195 203 + #define SDCC1_APPS_CLK_SRC 196 204 + #define SDCC1_ICE_CORE_CLK_SRC 197 205 + #define SDCC2_APPS_CLK_SRC 198 206 + #define USB30_MASTER_CLK_SRC 199 207 + #define USB30_MOCK_UTMI_CLK_SRC 200 208 + #define USB3_AUX_CLK_SRC 201 209 + #define VCODEC0_CLK_SRC 202 210 + #define VFE0_CLK_SRC 203 211 + #define VFE1_CLK_SRC 204 212 + #define VSYNC_CLK_SRC 205 213 + 214 + /* GCC block resets */ 215 + #define GCC_CAMSS_MICRO_BCR 0 216 + #define GCC_MSS_BCR 1 217 + #define GCC_QUSB2_PHY_BCR 2 218 + #define GCC_USB3PHY_PHY_BCR 3 219 + #define GCC_USB3_PHY_BCR 4 220 + #define GCC_USB_30_BCR 5 221 + 222 + /* GDSCs */ 223 + #define CPP_GDSC 0 224 + #define JPEG_GDSC 1 225 + #define MDSS_GDSC 2 226 + #define OXILI_CX_GDSC 3 227 + #define OXILI_GX_GDSC 4 228 + #define USB30_GDSC 5 229 + #define VENUS_CORE0_GDSC 6 230 + #define VENUS_GDSC 7 231 + #define VFE0_GDSC 8 232 + #define VFE1_GDSC 9 233 + 234 + #endif
+1 -1
include/dt-bindings/clock/qcom,gcc-sc7280.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0-only */ 1 + /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2 2 /* 3 3 * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved. 4 4 */
+201
include/dt-bindings/clock/qcom,gcc-sm6115.h
··· 1 + /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2 + /* 3 + * Copyright (c) 2019-2021, The Linux Foundation. All rights reserved. 4 + */ 5 + 6 + #ifndef _DT_BINDINGS_CLK_QCOM_GCC_SM6115_H 7 + #define _DT_BINDINGS_CLK_QCOM_GCC_SM6115_H 8 + 9 + /* GCC clocks */ 10 + #define GPLL0 0 11 + #define GPLL0_OUT_AUX2 1 12 + #define GPLL0_OUT_MAIN 2 13 + #define GPLL10 3 14 + #define GPLL10_OUT_MAIN 4 15 + #define GPLL11 5 16 + #define GPLL11_OUT_MAIN 6 17 + #define GPLL3 7 18 + #define GPLL4 8 19 + #define GPLL4_OUT_MAIN 9 20 + #define GPLL6 10 21 + #define GPLL6_OUT_MAIN 11 22 + #define GPLL7 12 23 + #define GPLL7_OUT_MAIN 13 24 + #define GPLL8 14 25 + #define GPLL8_OUT_MAIN 15 26 + #define GPLL9 16 27 + #define GPLL9_OUT_MAIN 17 28 + #define GCC_CAMSS_CSI0PHYTIMER_CLK 18 29 + #define GCC_CAMSS_CSI0PHYTIMER_CLK_SRC 19 30 + #define GCC_CAMSS_CSI1PHYTIMER_CLK 20 31 + #define GCC_CAMSS_CSI1PHYTIMER_CLK_SRC 21 32 + #define GCC_CAMSS_CSI2PHYTIMER_CLK 22 33 + #define GCC_CAMSS_CSI2PHYTIMER_CLK_SRC 23 34 + #define GCC_CAMSS_MCLK0_CLK 24 35 + #define GCC_CAMSS_MCLK0_CLK_SRC 25 36 + #define GCC_CAMSS_MCLK1_CLK 26 37 + #define GCC_CAMSS_MCLK1_CLK_SRC 27 38 + #define GCC_CAMSS_MCLK2_CLK 28 39 + #define GCC_CAMSS_MCLK2_CLK_SRC 29 40 + #define GCC_CAMSS_MCLK3_CLK 30 41 + #define GCC_CAMSS_MCLK3_CLK_SRC 31 42 + #define GCC_CAMSS_NRT_AXI_CLK 32 43 + #define GCC_CAMSS_OPE_AHB_CLK 33 44 + #define GCC_CAMSS_OPE_AHB_CLK_SRC 34 45 + #define GCC_CAMSS_OPE_CLK 35 46 + #define GCC_CAMSS_OPE_CLK_SRC 36 47 + #define GCC_CAMSS_RT_AXI_CLK 37 48 + #define GCC_CAMSS_TFE_0_CLK 38 49 + #define GCC_CAMSS_TFE_0_CLK_SRC 39 50 + #define GCC_CAMSS_TFE_0_CPHY_RX_CLK 40 51 + #define GCC_CAMSS_TFE_0_CSID_CLK 41 52 + #define GCC_CAMSS_TFE_0_CSID_CLK_SRC 42 53 + #define GCC_CAMSS_TFE_1_CLK 43 54 + #define GCC_CAMSS_TFE_1_CLK_SRC 44 55 + #define GCC_CAMSS_TFE_1_CPHY_RX_CLK 45 56 + #define GCC_CAMSS_TFE_1_CSID_CLK 46 57 + #define GCC_CAMSS_TFE_1_CSID_CLK_SRC 47 58 + #define GCC_CAMSS_TFE_2_CLK 48 59 + #define GCC_CAMSS_TFE_2_CLK_SRC 49 60 + #define GCC_CAMSS_TFE_2_CPHY_RX_CLK 50 61 + #define GCC_CAMSS_TFE_2_CSID_CLK 51 62 + #define GCC_CAMSS_TFE_2_CSID_CLK_SRC 52 63 + #define GCC_CAMSS_TFE_CPHY_RX_CLK_SRC 53 64 + #define GCC_CAMSS_TOP_AHB_CLK 54 65 + #define GCC_CAMSS_TOP_AHB_CLK_SRC 55 66 + #define GCC_CFG_NOC_USB3_PRIM_AXI_CLK 56 67 + #define GCC_CPUSS_AHB_CLK 57 68 + #define GCC_CPUSS_GNOC_CLK 60 69 + #define GCC_DISP_AHB_CLK 61 70 + #define GCC_DISP_GPLL0_DIV_CLK_SRC 62 71 + #define GCC_DISP_HF_AXI_CLK 63 72 + #define GCC_DISP_THROTTLE_CORE_CLK 64 73 + #define GCC_DISP_XO_CLK 65 74 + #define GCC_GP1_CLK 66 75 + #define GCC_GP1_CLK_SRC 67 76 + #define GCC_GP2_CLK 68 77 + #define GCC_GP2_CLK_SRC 69 78 + #define GCC_GP3_CLK 70 79 + #define GCC_GP3_CLK_SRC 71 80 + #define GCC_GPU_CFG_AHB_CLK 72 81 + #define GCC_GPU_GPLL0_CLK_SRC 73 82 + #define GCC_GPU_GPLL0_DIV_CLK_SRC 74 83 + #define GCC_GPU_IREF_CLK 75 84 + #define GCC_GPU_MEMNOC_GFX_CLK 76 85 + #define GCC_GPU_SNOC_DVM_GFX_CLK 77 86 + #define GCC_GPU_THROTTLE_CORE_CLK 78 87 + #define GCC_GPU_THROTTLE_XO_CLK 79 88 + #define GCC_PDM2_CLK 80 89 + #define GCC_PDM2_CLK_SRC 81 90 + #define GCC_PDM_AHB_CLK 82 91 + #define GCC_PDM_XO4_CLK 83 92 + #define GCC_PRNG_AHB_CLK 84 93 + #define GCC_QMIP_CAMERA_NRT_AHB_CLK 85 94 + #define GCC_QMIP_CAMERA_RT_AHB_CLK 86 95 + #define GCC_QMIP_DISP_AHB_CLK 87 96 + #define GCC_QMIP_GPU_CFG_AHB_CLK 88 97 + #define GCC_QMIP_VIDEO_VCODEC_AHB_CLK 89 98 + #define GCC_QUPV3_WRAP0_CORE_2X_CLK 90 99 + #define GCC_QUPV3_WRAP0_CORE_CLK 91 100 + #define GCC_QUPV3_WRAP0_S0_CLK 92 101 + #define GCC_QUPV3_WRAP0_S0_CLK_SRC 93 102 + #define GCC_QUPV3_WRAP0_S1_CLK 94 103 + #define GCC_QUPV3_WRAP0_S1_CLK_SRC 95 104 + #define GCC_QUPV3_WRAP0_S2_CLK 96 105 + #define GCC_QUPV3_WRAP0_S2_CLK_SRC 97 106 + #define GCC_QUPV3_WRAP0_S3_CLK 98 107 + #define GCC_QUPV3_WRAP0_S3_CLK_SRC 99 108 + #define GCC_QUPV3_WRAP0_S4_CLK 100 109 + #define GCC_QUPV3_WRAP0_S4_CLK_SRC 101 110 + #define GCC_QUPV3_WRAP0_S5_CLK 102 111 + #define GCC_QUPV3_WRAP0_S5_CLK_SRC 103 112 + #define GCC_QUPV3_WRAP_0_M_AHB_CLK 104 113 + #define GCC_QUPV3_WRAP_0_S_AHB_CLK 105 114 + #define GCC_SDCC1_AHB_CLK 106 115 + #define GCC_SDCC1_APPS_CLK 107 116 + #define GCC_SDCC1_APPS_CLK_SRC 108 117 + #define GCC_SDCC1_ICE_CORE_CLK 109 118 + #define GCC_SDCC1_ICE_CORE_CLK_SRC 110 119 + #define GCC_SDCC2_AHB_CLK 111 120 + #define GCC_SDCC2_APPS_CLK 112 121 + #define GCC_SDCC2_APPS_CLK_SRC 113 122 + #define GCC_SYS_NOC_CPUSS_AHB_CLK 114 123 + #define GCC_SYS_NOC_UFS_PHY_AXI_CLK 115 124 + #define GCC_SYS_NOC_USB3_PRIM_AXI_CLK 116 125 + #define GCC_UFS_PHY_AHB_CLK 117 126 + #define GCC_UFS_PHY_AXI_CLK 118 127 + #define GCC_UFS_PHY_AXI_CLK_SRC 119 128 + #define GCC_UFS_PHY_ICE_CORE_CLK 120 129 + #define GCC_UFS_PHY_ICE_CORE_CLK_SRC 121 130 + #define GCC_UFS_PHY_PHY_AUX_CLK 122 131 + #define GCC_UFS_PHY_PHY_AUX_CLK_SRC 123 132 + #define GCC_UFS_PHY_RX_SYMBOL_0_CLK 124 133 + #define GCC_UFS_PHY_TX_SYMBOL_0_CLK 125 134 + #define GCC_UFS_PHY_UNIPRO_CORE_CLK 126 135 + #define GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC 127 136 + #define GCC_USB30_PRIM_MASTER_CLK 128 137 + #define GCC_USB30_PRIM_MASTER_CLK_SRC 129 138 + #define GCC_USB30_PRIM_MOCK_UTMI_CLK 130 139 + #define GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC 131 140 + #define GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC 132 141 + #define GCC_USB30_PRIM_SLEEP_CLK 133 142 + #define GCC_USB3_PRIM_CLKREF_CLK 134 143 + #define GCC_USB3_PRIM_PHY_AUX_CLK_SRC 135 144 + #define GCC_USB3_PRIM_PHY_COM_AUX_CLK 136 145 + #define GCC_USB3_PRIM_PHY_PIPE_CLK 137 146 + #define GCC_VCODEC0_AXI_CLK 138 147 + #define GCC_VENUS_AHB_CLK 139 148 + #define GCC_VENUS_CTL_AXI_CLK 140 149 + #define GCC_VIDEO_AHB_CLK 141 150 + #define GCC_VIDEO_AXI0_CLK 142 151 + #define GCC_VIDEO_THROTTLE_CORE_CLK 143 152 + #define GCC_VIDEO_VCODEC0_SYS_CLK 144 153 + #define GCC_VIDEO_VENUS_CLK_SRC 145 154 + #define GCC_VIDEO_VENUS_CTL_CLK 146 155 + #define GCC_VIDEO_XO_CLK 147 156 + #define GCC_AHB2PHY_CSI_CLK 148 157 + #define GCC_AHB2PHY_USB_CLK 149 158 + #define GCC_BIMC_GPU_AXI_CLK 150 159 + #define GCC_BOOT_ROM_AHB_CLK 151 160 + #define GCC_CAM_THROTTLE_NRT_CLK 152 161 + #define GCC_CAM_THROTTLE_RT_CLK 153 162 + #define GCC_CAMERA_AHB_CLK 154 163 + #define GCC_CAMERA_XO_CLK 155 164 + #define GCC_CAMSS_AXI_CLK 156 165 + #define GCC_CAMSS_AXI_CLK_SRC 157 166 + #define GCC_CAMSS_CAMNOC_ATB_CLK 158 167 + #define GCC_CAMSS_CAMNOC_NTS_XO_CLK 159 168 + #define GCC_CAMSS_CCI_0_CLK 160 169 + #define GCC_CAMSS_CCI_CLK_SRC 161 170 + #define GCC_CAMSS_CPHY_0_CLK 162 171 + #define GCC_CAMSS_CPHY_1_CLK 163 172 + #define GCC_CAMSS_CPHY_2_CLK 164 173 + #define GCC_UFS_CLKREF_CLK 165 174 + #define GCC_DISP_GPLL0_CLK_SRC 166 175 + 176 + /* GCC resets */ 177 + #define GCC_QUSB2PHY_PRIM_BCR 0 178 + #define GCC_QUSB2PHY_SEC_BCR 1 179 + #define GCC_SDCC1_BCR 2 180 + #define GCC_UFS_PHY_BCR 3 181 + #define GCC_USB30_PRIM_BCR 4 182 + #define GCC_USB_PHY_CFG_AHB2PHY_BCR 5 183 + #define GCC_VCODEC0_BCR 6 184 + #define GCC_VENUS_BCR 7 185 + #define GCC_VIDEO_INTERFACE_BCR 8 186 + #define GCC_USB3PHY_PHY_PRIM_SP0_BCR 9 187 + #define GCC_USB3_PHY_PRIM_SP0_BCR 10 188 + #define GCC_SDCC2_BCR 11 189 + 190 + /* Indexes for GDSCs */ 191 + #define GCC_CAMSS_TOP_GDSC 0 192 + #define GCC_UFS_PHY_GDSC 1 193 + #define GCC_USB30_PRIM_GDSC 2 194 + #define GCC_VCODEC0_GDSC 3 195 + #define GCC_VENUS_GDSC 4 196 + #define HLOS1_VOTE_TURING_MMU_TBU1_GDSC 5 197 + #define HLOS1_VOTE_TURING_MMU_TBU0_GDSC 6 198 + #define HLOS1_VOTE_MM_SNOC_MMU_TBU_RT_GDSC 7 199 + #define HLOS1_VOTE_MM_SNOC_MMU_TBU_NRT_GDSC 8 200 + 201 + #endif
+178
include/dt-bindings/clock/qcom,gcc-sm6350.h
··· 1 + /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2 + /* 3 + * Copyright (c) 2021, The Linux Foundation. All rights reserved. 4 + * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org> 5 + */ 6 + 7 + #ifndef _DT_BINDINGS_CLK_QCOM_GCC_SM6350_H 8 + #define _DT_BINDINGS_CLK_QCOM_GCC_SM6350_H 9 + 10 + /* GCC clocks */ 11 + #define GPLL0 0 12 + #define GPLL0_OUT_EVEN 1 13 + #define GPLL0_OUT_ODD 2 14 + #define GPLL6 3 15 + #define GPLL6_OUT_EVEN 4 16 + #define GPLL7 5 17 + #define GCC_AGGRE_CNOC_PERIPH_CENTER_AHB_CLK 6 18 + #define GCC_AGGRE_NOC_CENTER_AHB_CLK 7 19 + #define GCC_AGGRE_NOC_PCIE_SF_AXI_CLK 8 20 + #define GCC_AGGRE_NOC_PCIE_TBU_CLK 9 21 + #define GCC_AGGRE_NOC_WLAN_AXI_CLK 10 22 + #define GCC_AGGRE_UFS_PHY_AXI_CLK 11 23 + #define GCC_AGGRE_USB3_PRIM_AXI_CLK 12 24 + #define GCC_BOOT_ROM_AHB_CLK 13 25 + #define GCC_CAMERA_AHB_CLK 14 26 + #define GCC_CAMERA_AXI_CLK 15 27 + #define GCC_CAMERA_THROTTLE_NRT_AXI_CLK 16 28 + #define GCC_CAMERA_THROTTLE_RT_AXI_CLK 17 29 + #define GCC_CAMERA_XO_CLK 18 30 + #define GCC_CE1_AHB_CLK 19 31 + #define GCC_CE1_AXI_CLK 20 32 + #define GCC_CE1_CLK 21 33 + #define GCC_CFG_NOC_USB3_PRIM_AXI_CLK 22 34 + #define GCC_CPUSS_AHB_CLK 23 35 + #define GCC_CPUSS_AHB_CLK_SRC 24 36 + #define GCC_CPUSS_AHB_DIV_CLK_SRC 25 37 + #define GCC_CPUSS_GNOC_CLK 26 38 + #define GCC_CPUSS_RBCPR_CLK 27 39 + #define GCC_DDRSS_GPU_AXI_CLK 28 40 + #define GCC_DISP_AHB_CLK 29 41 + #define GCC_DISP_AXI_CLK 30 42 + #define GCC_DISP_CC_SLEEP_CLK 31 43 + #define GCC_DISP_CC_XO_CLK 32 44 + #define GCC_DISP_GPLL0_CLK 33 45 + #define GCC_DISP_THROTTLE_AXI_CLK 34 46 + #define GCC_DISP_XO_CLK 35 47 + #define GCC_GP1_CLK 36 48 + #define GCC_GP1_CLK_SRC 37 49 + #define GCC_GP2_CLK 38 50 + #define GCC_GP2_CLK_SRC 39 51 + #define GCC_GP3_CLK 40 52 + #define GCC_GP3_CLK_SRC 41 53 + #define GCC_GPU_CFG_AHB_CLK 42 54 + #define GCC_GPU_GPLL0_CLK 43 55 + #define GCC_GPU_GPLL0_DIV_CLK 44 56 + #define GCC_GPU_MEMNOC_GFX_CLK 45 57 + #define GCC_GPU_SNOC_DVM_GFX_CLK 46 58 + #define GCC_NPU_AXI_CLK 47 59 + #define GCC_NPU_BWMON_AXI_CLK 48 60 + #define GCC_NPU_BWMON_DMA_CFG_AHB_CLK 49 61 + #define GCC_NPU_BWMON_DSP_CFG_AHB_CLK 50 62 + #define GCC_NPU_CFG_AHB_CLK 51 63 + #define GCC_NPU_DMA_CLK 52 64 + #define GCC_NPU_GPLL0_CLK 53 65 + #define GCC_NPU_GPLL0_DIV_CLK 54 66 + #define GCC_PCIE_0_AUX_CLK 55 67 + #define GCC_PCIE_0_AUX_CLK_SRC 56 68 + #define GCC_PCIE_0_CFG_AHB_CLK 57 69 + #define GCC_PCIE_0_MSTR_AXI_CLK 58 70 + #define GCC_PCIE_0_PIPE_CLK 59 71 + #define GCC_PCIE_0_SLV_AXI_CLK 60 72 + #define GCC_PCIE_0_SLV_Q2A_AXI_CLK 61 73 + #define GCC_PCIE_PHY_RCHNG_CLK 62 74 + #define GCC_PCIE_PHY_RCHNG_CLK_SRC 63 75 + #define GCC_PDM2_CLK 64 76 + #define GCC_PDM2_CLK_SRC 65 77 + #define GCC_PDM_AHB_CLK 66 78 + #define GCC_PDM_XO4_CLK 67 79 + #define GCC_PRNG_AHB_CLK 68 80 + #define GCC_QUPV3_WRAP0_CORE_2X_CLK 69 81 + #define GCC_QUPV3_WRAP0_CORE_CLK 70 82 + #define GCC_QUPV3_WRAP0_S0_CLK 71 83 + #define GCC_QUPV3_WRAP0_S0_CLK_SRC 72 84 + #define GCC_QUPV3_WRAP0_S1_CLK 73 85 + #define GCC_QUPV3_WRAP0_S1_CLK_SRC 74 86 + #define GCC_QUPV3_WRAP0_S2_CLK 75 87 + #define GCC_QUPV3_WRAP0_S2_CLK_SRC 76 88 + #define GCC_QUPV3_WRAP0_S3_CLK 77 89 + #define GCC_QUPV3_WRAP0_S3_CLK_SRC 78 90 + #define GCC_QUPV3_WRAP0_S4_CLK 79 91 + #define GCC_QUPV3_WRAP0_S4_CLK_SRC 80 92 + #define GCC_QUPV3_WRAP0_S5_CLK 81 93 + #define GCC_QUPV3_WRAP0_S5_CLK_SRC 82 94 + #define GCC_QUPV3_WRAP1_CORE_2X_CLK 83 95 + #define GCC_QUPV3_WRAP1_CORE_CLK 84 96 + #define GCC_QUPV3_WRAP1_S0_CLK 85 97 + #define GCC_QUPV3_WRAP1_S0_CLK_SRC 86 98 + #define GCC_QUPV3_WRAP1_S1_CLK 87 99 + #define GCC_QUPV3_WRAP1_S1_CLK_SRC 88 100 + #define GCC_QUPV3_WRAP1_S2_CLK 89 101 + #define GCC_QUPV3_WRAP1_S2_CLK_SRC 90 102 + #define GCC_QUPV3_WRAP1_S3_CLK 91 103 + #define GCC_QUPV3_WRAP1_S3_CLK_SRC 92 104 + #define GCC_QUPV3_WRAP1_S4_CLK 93 105 + #define GCC_QUPV3_WRAP1_S4_CLK_SRC 94 106 + #define GCC_QUPV3_WRAP1_S5_CLK 95 107 + #define GCC_QUPV3_WRAP1_S5_CLK_SRC 96 108 + #define GCC_QUPV3_WRAP_0_M_AHB_CLK 97 109 + #define GCC_QUPV3_WRAP_0_S_AHB_CLK 98 110 + #define GCC_QUPV3_WRAP_1_M_AHB_CLK 99 111 + #define GCC_QUPV3_WRAP_1_S_AHB_CLK 100 112 + #define GCC_SDCC1_AHB_CLK 101 113 + #define GCC_SDCC1_APPS_CLK 102 114 + #define GCC_SDCC1_APPS_CLK_SRC 103 115 + #define GCC_SDCC1_ICE_CORE_CLK 104 116 + #define GCC_SDCC1_ICE_CORE_CLK_SRC 105 117 + #define GCC_SDCC2_AHB_CLK 106 118 + #define GCC_SDCC2_APPS_CLK 107 119 + #define GCC_SDCC2_APPS_CLK_SRC 108 120 + #define GCC_SYS_NOC_CPUSS_AHB_CLK 109 121 + #define GCC_UFS_MEM_CLKREF_CLK 110 122 + #define GCC_UFS_PHY_AHB_CLK 111 123 + #define GCC_UFS_PHY_AXI_CLK 112 124 + #define GCC_UFS_PHY_AXI_CLK_SRC 113 125 + #define GCC_UFS_PHY_ICE_CORE_CLK 114 126 + #define GCC_UFS_PHY_ICE_CORE_CLK_SRC 115 127 + #define GCC_UFS_PHY_PHY_AUX_CLK 116 128 + #define GCC_UFS_PHY_PHY_AUX_CLK_SRC 117 129 + #define GCC_UFS_PHY_RX_SYMBOL_0_CLK 118 130 + #define GCC_UFS_PHY_RX_SYMBOL_1_CLK 119 131 + #define GCC_UFS_PHY_TX_SYMBOL_0_CLK 120 132 + #define GCC_UFS_PHY_UNIPRO_CORE_CLK 121 133 + #define GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC 122 134 + #define GCC_USB30_PRIM_MASTER_CLK 123 135 + #define GCC_USB30_PRIM_MASTER_CLK_SRC 124 136 + #define GCC_USB30_PRIM_MOCK_UTMI_CLK 125 137 + #define GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC 126 138 + #define GCC_USB30_PRIM_MOCK_UTMI_DIV_CLK_SRC 127 139 + #define GCC_USB3_PRIM_CLKREF_CLK 128 140 + #define GCC_USB30_PRIM_SLEEP_CLK 129 141 + #define GCC_USB3_PRIM_PHY_AUX_CLK 130 142 + #define GCC_USB3_PRIM_PHY_AUX_CLK_SRC 131 143 + #define GCC_USB3_PRIM_PHY_COM_AUX_CLK 132 144 + #define GCC_USB3_PRIM_PHY_PIPE_CLK 133 145 + #define GCC_VIDEO_AHB_CLK 134 146 + #define GCC_VIDEO_AXI_CLK 135 147 + #define GCC_VIDEO_THROTTLE_AXI_CLK 136 148 + #define GCC_VIDEO_XO_CLK 137 149 + #define GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK 138 150 + #define GCC_UFS_PHY_AXI_HW_CTL_CLK 139 151 + #define GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK 140 152 + #define GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK 141 153 + #define GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK 142 154 + #define GCC_RX5_PCIE_CLKREF_CLK 143 155 + #define GCC_GPU_GPLL0_MAIN_DIV_CLK_SRC 144 156 + #define GCC_NPU_PLL0_MAIN_DIV_CLK_SRC 145 157 + 158 + /* GCC resets */ 159 + #define GCC_QUSB2PHY_PRIM_BCR 0 160 + #define GCC_QUSB2PHY_SEC_BCR 1 161 + #define GCC_SDCC1_BCR 2 162 + #define GCC_SDCC2_BCR 3 163 + #define GCC_UFS_PHY_BCR 4 164 + #define GCC_USB30_PRIM_BCR 5 165 + #define GCC_PCIE_0_BCR 6 166 + #define GCC_PCIE_0_PHY_BCR 7 167 + #define GCC_QUPV3_WRAPPER_0_BCR 8 168 + #define GCC_QUPV3_WRAPPER_1_BCR 9 169 + #define GCC_USB3_PHY_PRIM_BCR 10 170 + #define GCC_USB3_DP_PHY_PRIM_BCR 11 171 + 172 + /* GCC GDSCs */ 173 + #define USB30_PRIM_GDSC 0 174 + #define UFS_PHY_GDSC 1 175 + #define HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC 2 176 + #define HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC 3 177 + 178 + #endif
+35
include/dt-bindings/clock/qcom,gpucc-sc7280.h
··· 1 + /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2 + /* 3 + * Copyright (c) 2021, The Linux Foundation. All rights reserved. 4 + */ 5 + 6 + #ifndef _DT_BINDINGS_CLK_QCOM_GPU_CC_SC7280_H 7 + #define _DT_BINDINGS_CLK_QCOM_GPU_CC_SC7280_H 8 + 9 + /* GPU_CC clocks */ 10 + #define GPU_CC_PLL0 0 11 + #define GPU_CC_PLL1 1 12 + #define GPU_CC_AHB_CLK 2 13 + #define GPU_CC_CB_CLK 3 14 + #define GPU_CC_CRC_AHB_CLK 4 15 + #define GPU_CC_CX_GMU_CLK 5 16 + #define GPU_CC_CX_SNOC_DVM_CLK 6 17 + #define GPU_CC_CXO_AON_CLK 7 18 + #define GPU_CC_CXO_CLK 8 19 + #define GPU_CC_GMU_CLK_SRC 9 20 + #define GPU_CC_GX_GMU_CLK 10 21 + #define GPU_CC_HLOS1_VOTE_GPU_SMMU_CLK 11 22 + #define GPU_CC_HUB_AHB_DIV_CLK_SRC 12 23 + #define GPU_CC_HUB_AON_CLK 13 24 + #define GPU_CC_HUB_CLK_SRC 14 25 + #define GPU_CC_HUB_CX_INT_CLK 15 26 + #define GPU_CC_HUB_CX_INT_DIV_CLK_SRC 16 27 + #define GPU_CC_MND1X_0_GFX3D_CLK 17 28 + #define GPU_CC_MND1X_1_GFX3D_CLK 18 29 + #define GPU_CC_SLEEP_CLK 19 30 + 31 + /* GPU_CC power domains */ 32 + #define GPU_CC_CX_GDSC 0 33 + #define GPU_CC_GX_GDSC 1 34 + 35 + #endif
+155
include/dt-bindings/clock/qcom,mmcc-msm8994.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0-only */ 2 + /* 3 + * Copyright (c) 2020, Konrad Dybcio 4 + */ 5 + 6 + #ifndef _DT_BINDINGS_CLK_MSM_MMCC_8994_H 7 + #define _DT_BINDINGS_CLK_MSM_MMCC_8994_H 8 + 9 + /* Clocks */ 10 + #define MMPLL0_EARLY 0 11 + #define MMPLL0_PLL 1 12 + #define MMPLL1_EARLY 2 13 + #define MMPLL1_PLL 3 14 + #define MMPLL3_EARLY 4 15 + #define MMPLL3_PLL 5 16 + #define MMPLL4_EARLY 6 17 + #define MMPLL4_PLL 7 18 + #define MMPLL5_EARLY 8 19 + #define MMPLL5_PLL 9 20 + #define AXI_CLK_SRC 10 21 + #define RBBMTIMER_CLK_SRC 11 22 + #define PCLK0_CLK_SRC 12 23 + #define PCLK1_CLK_SRC 13 24 + #define MDP_CLK_SRC 14 25 + #define VSYNC_CLK_SRC 15 26 + #define BYTE0_CLK_SRC 16 27 + #define BYTE1_CLK_SRC 17 28 + #define ESC0_CLK_SRC 18 29 + #define ESC1_CLK_SRC 19 30 + #define MDSS_AHB_CLK 20 31 + #define MDSS_PCLK0_CLK 21 32 + #define MDSS_PCLK1_CLK 22 33 + #define MDSS_VSYNC_CLK 23 34 + #define MDSS_BYTE0_CLK 24 35 + #define MDSS_BYTE1_CLK 25 36 + #define MDSS_ESC0_CLK 26 37 + #define MDSS_ESC1_CLK 27 38 + #define CSI0_CLK_SRC 28 39 + #define CSI1_CLK_SRC 29 40 + #define CSI2_CLK_SRC 30 41 + #define CSI3_CLK_SRC 31 42 + #define VFE0_CLK_SRC 32 43 + #define VFE1_CLK_SRC 33 44 + #define CPP_CLK_SRC 34 45 + #define JPEG0_CLK_SRC 35 46 + #define JPEG1_CLK_SRC 36 47 + #define JPEG2_CLK_SRC 37 48 + #define CSI2PHYTIMER_CLK_SRC 38 49 + #define FD_CORE_CLK_SRC 39 50 + #define OCMEMNOC_CLK_SRC 40 51 + #define CCI_CLK_SRC 41 52 + #define MMSS_GP0_CLK_SRC 42 53 + #define MMSS_GP1_CLK_SRC 43 54 + #define JPEG_DMA_CLK_SRC 44 55 + #define MCLK0_CLK_SRC 45 56 + #define MCLK1_CLK_SRC 46 57 + #define MCLK2_CLK_SRC 47 58 + #define MCLK3_CLK_SRC 48 59 + #define CSI0PHYTIMER_CLK_SRC 49 60 + #define CSI1PHYTIMER_CLK_SRC 50 61 + #define EXTPCLK_CLK_SRC 51 62 + #define HDMI_CLK_SRC 52 63 + #define CAMSS_AHB_CLK 53 64 + #define CAMSS_CCI_CCI_AHB_CLK 54 65 + #define CAMSS_CCI_CCI_CLK 55 66 + #define CAMSS_VFE_CPP_AHB_CLK 56 67 + #define CAMSS_VFE_CPP_AXI_CLK 57 68 + #define CAMSS_VFE_CPP_CLK 58 69 + #define CAMSS_CSI0_AHB_CLK 59 70 + #define CAMSS_CSI0_CLK 60 71 + #define CAMSS_CSI0PHY_CLK 61 72 + #define CAMSS_CSI0PIX_CLK 62 73 + #define CAMSS_CSI0RDI_CLK 63 74 + #define CAMSS_CSI1_AHB_CLK 64 75 + #define CAMSS_CSI1_CLK 65 76 + #define CAMSS_CSI1PHY_CLK 66 77 + #define CAMSS_CSI1PIX_CLK 67 78 + #define CAMSS_CSI1RDI_CLK 68 79 + #define CAMSS_CSI2_AHB_CLK 69 80 + #define CAMSS_CSI2_CLK 70 81 + #define CAMSS_CSI2PHY_CLK 71 82 + #define CAMSS_CSI2PIX_CLK 72 83 + #define CAMSS_CSI2RDI_CLK 73 84 + #define CAMSS_CSI3_AHB_CLK 74 85 + #define CAMSS_CSI3_CLK 75 86 + #define CAMSS_CSI3PHY_CLK 76 87 + #define CAMSS_CSI3PIX_CLK 77 88 + #define CAMSS_CSI3RDI_CLK 78 89 + #define CAMSS_CSI_VFE0_CLK 79 90 + #define CAMSS_CSI_VFE1_CLK 80 91 + #define CAMSS_GP0_CLK 81 92 + #define CAMSS_GP1_CLK 82 93 + #define CAMSS_ISPIF_AHB_CLK 83 94 + #define CAMSS_JPEG_DMA_CLK 84 95 + #define CAMSS_JPEG_JPEG0_CLK 85 96 + #define CAMSS_JPEG_JPEG1_CLK 86 97 + #define CAMSS_JPEG_JPEG2_CLK 87 98 + #define CAMSS_JPEG_JPEG_AHB_CLK 88 99 + #define CAMSS_JPEG_JPEG_AXI_CLK 89 100 + #define CAMSS_MCLK0_CLK 90 101 + #define CAMSS_MCLK1_CLK 91 102 + #define CAMSS_MCLK2_CLK 92 103 + #define CAMSS_MCLK3_CLK 93 104 + #define CAMSS_MICRO_AHB_CLK 94 105 + #define CAMSS_PHY0_CSI0PHYTIMER_CLK 95 106 + #define CAMSS_PHY1_CSI1PHYTIMER_CLK 96 107 + #define CAMSS_PHY2_CSI2PHYTIMER_CLK 97 108 + #define CAMSS_TOP_AHB_CLK 98 109 + #define CAMSS_VFE_VFE0_CLK 99 110 + #define CAMSS_VFE_VFE1_CLK 100 111 + #define CAMSS_VFE_VFE_AHB_CLK 101 112 + #define CAMSS_VFE_VFE_AXI_CLK 102 113 + #define FD_AXI_CLK 103 114 + #define FD_CORE_CLK 104 115 + #define FD_CORE_UAR_CLK 105 116 + #define MDSS_AXI_CLK 106 117 + #define MDSS_EXTPCLK_CLK 107 118 + #define MDSS_HDMI_AHB_CLK 108 119 + #define MDSS_HDMI_CLK 109 120 + #define MDSS_MDP_CLK 110 121 + #define MMSS_MISC_AHB_CLK 111 122 + #define MMSS_MMSSNOC_AXI_CLK 112 123 + #define MMSS_S0_AXI_CLK 113 124 + #define OCMEMCX_OCMEMNOC_CLK 114 125 + #define OXILI_GFX3D_CLK 115 126 + #define OXILI_RBBMTIMER_CLK 116 127 + #define OXILICX_AHB_CLK 117 128 + #define VENUS0_AHB_CLK 118 129 + #define VENUS0_AXI_CLK 119 130 + #define VENUS0_OCMEMNOC_CLK 120 131 + #define VENUS0_VCODEC0_CLK 121 132 + #define VENUS0_CORE0_VCODEC_CLK 122 133 + #define VENUS0_CORE1_VCODEC_CLK 123 134 + #define VENUS0_CORE2_VCODEC_CLK 124 135 + #define AHB_CLK_SRC 125 136 + #define FD_AHB_CLK 126 137 + 138 + /* GDSCs */ 139 + #define VENUS_GDSC 0 140 + #define VENUS_CORE0_GDSC 1 141 + #define VENUS_CORE1_GDSC 2 142 + #define VENUS_CORE2_GDSC 3 143 + #define CAMSS_TOP_GDSC 4 144 + #define MDSS_GDSC 5 145 + #define JPEG_GDSC 6 146 + #define VFE_GDSC 7 147 + #define CPP_GDSC 8 148 + #define OXILI_GX_GDSC 9 149 + #define OXILI_CX_GDSC 10 150 + #define FD_GDSC 11 151 + 152 + /* Resets */ 153 + #define CAMSS_MICRO_BCR 0 154 + 155 + #endif
+10
include/dt-bindings/clock/qcom,rpmcc.h
··· 149 149 #define RPM_SMD_CE2_A_CLK 103 150 150 #define RPM_SMD_CE3_CLK 104 151 151 #define RPM_SMD_CE3_A_CLK 105 152 + #define RPM_SMD_QUP_CLK 106 153 + #define RPM_SMD_QUP_A_CLK 107 154 + #define RPM_SMD_MMRT_CLK 108 155 + #define RPM_SMD_MMRT_A_CLK 109 156 + #define RPM_SMD_MMNRT_CLK 110 157 + #define RPM_SMD_MMNRT_A_CLK 111 158 + #define RPM_SMD_SNOC_PERIPH_CLK 112 159 + #define RPM_SMD_SNOC_PERIPH_A_CLK 113 160 + #define RPM_SMD_SNOC_LPASS_CLK 114 161 + #define RPM_SMD_SNOC_LPASS_A_CLK 115 152 162 153 163 #endif
+2
include/dt-bindings/clock/qcom,rpmh.h
··· 31 31 #define RPMH_RF_CLK5_A 22 32 32 #define RPMH_PKA_CLK 23 33 33 #define RPMH_HWKM_CLK 24 34 + #define RPMH_QLINK_CLK 25 35 + #define RPMH_QLINK_CLK_A 26 34 36 35 37 #endif
+27
include/dt-bindings/clock/qcom,videocc-sc7280.h
··· 1 + /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2 + /* 3 + * Copyright (c) 2021, The Linux Foundation. All rights reserved. 4 + */ 5 + 6 + #ifndef _DT_BINDINGS_CLK_QCOM_VIDEO_CC_SC7280_H 7 + #define _DT_BINDINGS_CLK_QCOM_VIDEO_CC_SC7280_H 8 + 9 + /* VIDEO_CC clocks */ 10 + #define VIDEO_PLL0 0 11 + #define VIDEO_CC_IRIS_AHB_CLK 1 12 + #define VIDEO_CC_IRIS_CLK_SRC 2 13 + #define VIDEO_CC_MVS0_AXI_CLK 3 14 + #define VIDEO_CC_MVS0_CORE_CLK 4 15 + #define VIDEO_CC_MVSC_CORE_CLK 5 16 + #define VIDEO_CC_MVSC_CTL_AXI_CLK 6 17 + #define VIDEO_CC_SLEEP_CLK 7 18 + #define VIDEO_CC_SLEEP_CLK_SRC 8 19 + #define VIDEO_CC_VENUS_AHB_CLK 9 20 + #define VIDEO_CC_XO_CLK 10 21 + #define VIDEO_CC_XO_CLK_SRC 11 22 + 23 + /* VIDEO_CC power domains */ 24 + #define MVS0_GDSC 0 25 + #define MVSC_GDSC 1 26 + 27 + #endif
+1
include/dt-bindings/clock/rk3036-cru.h
··· 81 81 #define HCLK_OTG0 449 82 82 #define HCLK_OTG1 450 83 83 #define HCLK_NANDC 453 84 + #define HCLK_SFC 454 84 85 #define HCLK_SDMMC 456 85 86 #define HCLK_SDIO 457 86 87 #define HCLK_EMMC 459
+10 -4
include/linux/clk-provider.h
··· 342 342 unsigned long flags; 343 343 }; 344 344 345 - #define CLK_FIXED_RATE_PARENT_ACCURACY BIT(0) 345 + #define CLK_FIXED_RATE_PARENT_ACCURACY BIT(0) 346 346 347 347 extern const struct clk_ops clk_fixed_rate_ops; 348 348 struct clk_hw *__clk_hw_register_fixed_rate(struct device *dev, ··· 1001 1001 * CLK_FRAC_DIVIDER_BIG_ENDIAN - By default little endian register accesses are 1002 1002 * used for the divider register. Setting this flag makes the register 1003 1003 * accesses big endian. 1004 + * CLK_FRAC_DIVIDER_POWER_OF_TWO_PS - By default the resulting fraction might 1005 + * be saturated and the caller will get quite far from the good enough 1006 + * approximation. Instead the caller may require, by setting this flag, 1007 + * to shift left by a few bits in case, when the asked one is quite small 1008 + * to satisfy the desired range of denominator. It assumes that on the 1009 + * caller's side the power-of-two capable prescaler exists. 1004 1010 */ 1005 1011 struct clk_fractional_divider { 1006 1012 struct clk_hw hw; ··· 1028 1022 1029 1023 #define CLK_FRAC_DIVIDER_ZERO_BASED BIT(0) 1030 1024 #define CLK_FRAC_DIVIDER_BIG_ENDIAN BIT(1) 1025 + #define CLK_FRAC_DIVIDER_POWER_OF_TWO_PS BIT(2) 1031 1026 1032 - extern const struct clk_ops clk_fractional_divider_ops; 1033 1027 struct clk *clk_register_fractional_divider(struct device *dev, 1034 1028 const char *name, const char *parent_name, unsigned long flags, 1035 1029 void __iomem *reg, u8 mshift, u8 mwidth, u8 nshift, u8 nwidth, ··· 1075 1069 1076 1070 #define to_clk_multiplier(_hw) container_of(_hw, struct clk_multiplier, hw) 1077 1071 1078 - #define CLK_MULTIPLIER_ZERO_BYPASS BIT(0) 1072 + #define CLK_MULTIPLIER_ZERO_BYPASS BIT(0) 1079 1073 #define CLK_MULTIPLIER_ROUND_CLOSEST BIT(1) 1080 - #define CLK_MULTIPLIER_BIG_ENDIAN BIT(2) 1074 + #define CLK_MULTIPLIER_BIG_ENDIAN BIT(2) 1081 1075 1082 1076 extern const struct clk_ops clk_multiplier_ops; 1083 1077
+1 -1
include/linux/platform_data/x86/clk-lpss.h
··· 15 15 struct clk *clk; 16 16 }; 17 17 18 - extern int lpt_clk_init(void); 18 + extern int lpss_atom_clk_init(void); 19 19 20 20 #endif /* __CLK_LPSS_H */
+5
include/linux/pm_clock.h
··· 47 47 extern void pm_clk_remove_clk(struct device *dev, struct clk *clk); 48 48 extern int pm_clk_suspend(struct device *dev); 49 49 extern int pm_clk_resume(struct device *dev); 50 + extern int devm_pm_clk_create(struct device *dev); 50 51 #else 51 52 static inline bool pm_clk_no_clocks(struct device *dev) 52 53 { ··· 83 82 #define pm_clk_resume NULL 84 83 static inline void pm_clk_remove_clk(struct device *dev, struct clk *clk) 85 84 { 85 + } 86 + static inline int devm_pm_clk_create(struct device *dev) 87 + { 88 + return -EINVAL; 86 89 } 87 90 #endif 88 91
+4
include/linux/pm_runtime.h
··· 59 59 extern void pm_runtime_new_link(struct device *dev); 60 60 extern void pm_runtime_drop_link(struct device_link *link); 61 61 62 + extern int devm_pm_runtime_enable(struct device *dev); 63 + 62 64 /** 63 65 * pm_runtime_get_if_in_use - Conditionally bump up runtime PM usage counter. 64 66 * @dev: Target device. ··· 254 252 static inline void __pm_runtime_disable(struct device *dev, bool c) {} 255 253 static inline void pm_runtime_allow(struct device *dev) {} 256 254 static inline void pm_runtime_forbid(struct device *dev) {} 255 + 256 + static inline int devm_pm_runtime_enable(struct device *dev) { return 0; } 257 257 258 258 static inline void pm_suspend_ignore_children(struct device *dev, bool enable) {} 259 259 static inline void pm_runtime_get_noresume(struct device *dev) {}
+1
include/linux/soc/qcom/smd-rpm.h
··· 29 29 #define QCOM_SMD_RPM_NCPB 0x6270636E 30 30 #define QCOM_SMD_RPM_OCMEM_PWR 0x706d636f 31 31 #define QCOM_SMD_RPM_QPIC_CLK 0x63697071 32 + #define QCOM_SMD_RPM_QUP_CLK 0x707571 32 33 #define QCOM_SMD_RPM_SMPA 0x61706d73 33 34 #define QCOM_SMD_RPM_SMPB 0x62706d73 34 35 #define QCOM_SMD_RPM_SPDM 0x63707362