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 subsystem updates from Stephen Boyd:
"This pull request is full of clk driver changes. In fact, there aren't
any changes to the clk framework this time around. That's probably
because everyone was on vacation (yours truly included). We did lose a
couple clk drivers this time around because nobody was using those
devices. That skews the diffstat a bit, but either way, nothing looks
out of the ordinary here. The usual suspects are chugging along adding
support for more SoCs and fixing bugs.

If I had to choose, I'd say the theme for the past few months has been
"polish". There's quite a few patches that migrate to
devm_platform_ioremap_resource() in here. And there's more than a
handful of patches that move the NR_CLKS define from the DT binding
header to the driver. There's even patches that migrate drivers to use
clk_parent_data and clk_hw to describe clk tree topology. It seems
that the spring (summer?) cleaning bug got some folks, or the
semiconductor shortage finally hit the software side.

New Drivers:
- StarFive JH7110 SoC clock drivers
- Qualcomm IPQ5018 Global Clock Controller driver
- Versa3 clk generator to support 48KHz playback/record with audio
codec on RZ/G2L SMARC EVK

Removed Drivers:
- Remove non-OF mmp clk drivers
- Remove OXNAS clk driver

Updates:
- Add __counted_by to struct clk_hw_onecell_data and struct
spmi_pmic_div_clk_cc
- Move defines for numbers of clks (NR_CLKS) from DT headers to
drivers
- Introduce kstrdup_and_replace() and use it
- Add PLL rates for Rockchip rk3568
- Add the display clock tree for Rockchip rv1126
- Add Audio Clock Generator (ADG) clocks on Renesas R-Car Gen3 and
RZ/G2 SoCs
- Convert sun9i-mmc clock to use
devm_platform_get_and_ioremap_resource()
- Fix function name in a comment in ccu_mmc_timing.c
- Parameter name correction for ccu_nkm_round_rate()
- Implement CLK_SET_RATE_PARENT for Allwinner NKM clocks, i.e.
consider alternative parent rates when determining clock rates
- Set CLK_SET_RATE_PARENT for Allwinner A64 pll-mipi
- Support finding closest (as opposed to closest but not higher)
clock rate for NM, NKM, mux and div type clocks, as use it for
Allwinner A64 pll-video0
- Prefer current parent rate if able to generate ideal clock rate for
Allwinner NKM clocks
- Clean up Qualcomm SMD RPM driver, with interconnect bus clocks
moved out to the interconnect drivers
- Fix various PM runtime bugs across many Qualcomm clk drivers
- Migrate Qualcomm MDM9615 is to parent_hw and parent_data
- Add network related resets on Qualcomm IPQ4019
- Add a couple missing USB related clocks to Qualcomm IPQ9574
- Add missing gpll0_sleep_clk_src to Qualcomm MSM8917 global clock
controller
- In the Qualcomm QDU1000 global clock controller, GDSCs, clkrefs,
and GPLL1 are added, while PCIe pipe clock, SDCC rcg ops are
corrected
- Add missing GDSCs to and correct GDSCs for the SC8280XP global
clock controller driver
- Support retention for the Qualcomm SC8280XP display clock
controller GDSCs.
- Qualcommm's SDCC apps_clk_src is marked with CLK_OPS_PARENT_ENABLE
to fix issues with missing parent clocks across sc7180, sm7150,
sm6350 and sm8250, while sm8450 is corrected to use floor ops
- Correct Qualcomm SM6350 GPU clock controller's clock supplies
- Drop unwanted clocks from the Qualcomm IPQ5332 GCC driver
- Add missing OXILICX GDSC to Qualcomm MSM8226 GCC
- Change the delay in the Qualcomm reset controller to fsleep() for
correctness
- Extend the Qualcomm SM83550 Video clock controller to support
SC8280XP
- Add graphics clock support on Renesas RZ/G2M, RZ/G2N, RZ/G2E, and
R-Car H3, M3-W, and M3-N SoCs
- Add Clocked Serial Interface (CSI) clocks on Renesas RZ/V2M
- Add PWM (MTU3) clock and reset on Renesas RZ/G2UL and RZ/Five
- Add the PDM IPC clock for i.MX93
- Add 519.75MHz frequency support for i.MX9 PLL
- Simplify the .determine_rate() implementation for i.MX GPR mux
- Make the i.MX8QXP LPCG clock use devm_platform_ioremap_resource()
- Add the audio mux clock to i.MX8
- Fix the SPLL2 MULT range for PLLv4
- Update the SPLL2 type in i.MX8ULP
- Fix the SAI4 clock on i.MX8MP
- Add silicon revision print for i.MX25 on clocks init
- Drop the return value from __mx25_clocks_init()
- Fix the clock pauses on no-op set_rate for i.MX8M composite clock
- Drop restrictions for i.MX PLL14xx and fix its max prediv value
- Drop the 393216000 and 361267200 from i.MX PLL14xx rate table to
allow glitch free switching"

* tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux: (207 commits)
clk: qcom: Fix SM_GPUCC_8450 dependencies
clk: lmk04832: Support using PLL1_LD as SPI readback pin
clk: lmk04832: Don't disable vco clock on probe fail
clk: lmk04832: Set missing parent_names for output clocks
clk: mvebu: Convert to devm_platform_ioremap_resource()
clk: nuvoton: Convert to devm_platform_ioremap_resource()
clk: socfpga: agilex: Convert to devm_platform_ioremap_resource()
clk: ti: Use devm_platform_get_and_ioremap_resource()
clk: mediatek: Convert to devm_platform_ioremap_resource()
clk: hsdk-pll: Convert to devm_platform_ioremap_resource()
clk: gemini: Convert to devm_platform_ioremap_resource()
clk: fsl-sai: Convert to devm_platform_ioremap_resource()
clk: bm1880: Convert to devm_platform_ioremap_resource()
clk: axm5516: Convert to devm_platform_ioremap_resource()
clk: actions: Convert to devm_platform_ioremap_resource()
clk: cdce925: Remove redundant of_match_ptr()
clk: pxa910: Move number of clocks to driver source
clk: pxa1928: Move number of clocks to driver source
clk: pxa168: Move number of clocks to driver source
clk: mmp2: Move number of clocks to driver source
...

+12697 -7106
+20
Documentation/devicetree/bindings/arm/hisilicon/controller/cpuctrl.yaml
··· 29 29 30 30 ranges: true 31 31 32 + patternProperties: 33 + "^clock@[0-9a-f]+$": 34 + type: object 35 + additionalProperties: false 36 + 37 + properties: 38 + compatible: 39 + const: hisilicon,hix5hd2-clock 40 + 41 + reg: 42 + maxItems: 1 43 + 44 + "#clock-cells": 45 + const: 1 46 + 47 + required: 48 + - compatible 49 + - reg 50 + - "#clock-cells" 51 + 32 52 required: 33 53 - compatible 34 54 - reg
-64
Documentation/devicetree/bindings/clock/amlogic,gxbb-aoclkc.txt
··· 1 - * Amlogic GXBB AO Clock and Reset Unit 2 - 3 - The Amlogic GXBB AO clock controller generates and supplies clock to various 4 - controllers within the Always-On part of the SoC. 5 - 6 - Required Properties: 7 - 8 - - compatible: value should be different for each SoC family as : 9 - - GXBB (S905) : "amlogic,meson-gxbb-aoclkc" 10 - - GXL (S905X, S905D) : "amlogic,meson-gxl-aoclkc" 11 - - GXM (S912) : "amlogic,meson-gxm-aoclkc" 12 - - AXG (A113D, A113X) : "amlogic,meson-axg-aoclkc" 13 - - G12A (S905X2, S905D2, S905Y2) : "amlogic,meson-g12a-aoclkc" 14 - followed by the common "amlogic,meson-gx-aoclkc" 15 - - clocks: list of clock phandle, one for each entry clock-names. 16 - - clock-names: should contain the following: 17 - * "xtal" : the platform xtal 18 - * "mpeg-clk" : the main clock controller mother clock (aka clk81) 19 - * "ext-32k-0" : external 32kHz reference #0 if any (optional) 20 - * "ext-32k-1" : external 32kHz reference #1 if any (optional - gx only) 21 - * "ext-32k-2" : external 32kHz reference #2 if any (optional - gx only) 22 - 23 - - #clock-cells: should be 1. 24 - 25 - Each clock is assigned an identifier and client nodes can use this identifier 26 - to specify the clock which they consume. All available clocks are defined as 27 - preprocessor macros in the dt-bindings/clock/gxbb-aoclkc.h header and can be 28 - used in device tree sources. 29 - 30 - - #reset-cells: should be 1. 31 - 32 - Each reset is assigned an identifier and client nodes can use this identifier 33 - to specify the reset which they consume. All available resets are defined as 34 - preprocessor macros in the dt-bindings/reset/gxbb-aoclkc.h header and can be 35 - used in device tree sources. 36 - 37 - Parent node should have the following properties : 38 - - compatible: "amlogic,meson-gx-ao-sysctrl", "syscon", "simple-mfd" 39 - - reg: base address and size of the AO system control register space. 40 - 41 - Example: AO Clock controller node: 42 - 43 - ao_sysctrl: sys-ctrl@0 { 44 - compatible = "amlogic,meson-gx-ao-sysctrl", "syscon", "simple-mfd"; 45 - reg = <0x0 0x0 0x0 0x100>; 46 - 47 - clkc_AO: clock-controller { 48 - compatible = "amlogic,meson-gxbb-aoclkc", "amlogic,meson-gx-aoclkc"; 49 - #clock-cells = <1>; 50 - #reset-cells = <1>; 51 - clocks = <&xtal>, <&clkc CLKID_CLK81>; 52 - clock-names = "xtal", "mpeg-clk"; 53 - }; 54 - 55 - Example: UART controller node that consumes the clock and reset generated 56 - by the clock controller: 57 - 58 - uart_AO: serial@4c0 { 59 - compatible = "amlogic,meson-uart"; 60 - reg = <0x4c0 0x14>; 61 - interrupts = <0 90 1>; 62 - clocks = <&clkc_AO CLKID_AO_UART1>; 63 - resets = <&clkc_AO RESET_AO_UART1>; 64 - };
+85
Documentation/devicetree/bindings/clock/amlogic,gxbb-aoclkc.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/amlogic,gxbb-aoclkc.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Amlogic Always-On Clock Controller 8 + 9 + maintainers: 10 + - Neil Armstrong <neil.armstrong@linaro.org> 11 + 12 + properties: 13 + compatible: 14 + oneOf: 15 + - items: 16 + - enum: 17 + - amlogic,meson-gxbb-aoclkc 18 + - amlogic,meson-gxl-aoclkc 19 + - amlogic,meson-gxm-aoclkc 20 + - amlogic,meson-axg-aoclkc 21 + - const: amlogic,meson-gx-aoclkc 22 + - enum: 23 + - amlogic,meson-axg-aoclkc 24 + - amlogic,meson-g12a-aoclkc 25 + 26 + clocks: 27 + minItems: 2 28 + maxItems: 5 29 + 30 + clock-names: 31 + minItems: 2 32 + items: 33 + - const: xtal 34 + - const: mpeg-clk 35 + - const: ext-32k-0 36 + - const: ext-32k-1 37 + - const: ext-32k-2 38 + 39 + '#clock-cells': 40 + const: 1 41 + 42 + '#reset-cells': 43 + const: 1 44 + 45 + required: 46 + - compatible 47 + - clocks 48 + - clock-names 49 + - '#clock-cells' 50 + - '#reset-cells' 51 + 52 + allOf: 53 + - if: 54 + properties: 55 + compatible: 56 + enum: 57 + - amlogic,meson-g12a-aoclkc 58 + 59 + then: 60 + properties: 61 + clocks: 62 + minItems: 2 63 + maxItems: 3 64 + 65 + clock-names: 66 + minItems: 2 67 + maxItems: 3 68 + 69 + - if: 70 + properties: 71 + compatible: 72 + enum: 73 + - amlogic,meson-gxl-aoclkc 74 + - amlogic,meson-gxm-aoclkc 75 + - amlogic,meson-axg-aoclkc 76 + 77 + then: 78 + properties: 79 + clocks: 80 + maxItems: 2 81 + 82 + clock-names: 83 + maxItems: 2 84 + 85 + additionalProperties: false
-53
Documentation/devicetree/bindings/clock/amlogic,gxbb-clkc.txt
··· 1 - * Amlogic GXBB Clock and Reset Unit 2 - 3 - The Amlogic GXBB clock controller generates and supplies clock to various 4 - controllers within the SoC. 5 - 6 - Required Properties: 7 - 8 - - compatible: should be: 9 - "amlogic,gxbb-clkc" for GXBB SoC, 10 - "amlogic,gxl-clkc" for GXL and GXM SoC, 11 - "amlogic,axg-clkc" for AXG SoC. 12 - "amlogic,g12a-clkc" for G12A SoC. 13 - "amlogic,g12b-clkc" for G12B SoC. 14 - "amlogic,sm1-clkc" for SM1 SoC. 15 - - clocks : list of clock phandle, one for each entry clock-names. 16 - - clock-names : should contain the following: 17 - * "xtal": the platform xtal 18 - 19 - - #clock-cells: should be 1. 20 - 21 - Each clock is assigned an identifier and client nodes can use this identifier 22 - to specify the clock which they consume. All available clocks are defined as 23 - preprocessor macros in the dt-bindings/clock/gxbb-clkc.h header and can be 24 - used in device tree sources. 25 - 26 - Parent node should have the following properties : 27 - - compatible: "syscon", "simple-mfd, and "amlogic,meson-gx-hhi-sysctrl" or 28 - "amlogic,meson-axg-hhi-sysctrl" 29 - - reg: base address and size of the HHI system control register space. 30 - 31 - Example: Clock controller node: 32 - 33 - sysctrl: system-controller@0 { 34 - compatible = "amlogic,meson-gx-hhi-sysctrl", "syscon", "simple-mfd"; 35 - reg = <0 0 0 0x400>; 36 - 37 - clkc: clock-controller { 38 - #clock-cells = <1>; 39 - compatible = "amlogic,gxbb-clkc"; 40 - clocks = <&xtal>; 41 - clock-names = "xtal"; 42 - }; 43 - }; 44 - 45 - Example: UART controller node that consumes the clock generated by the clock 46 - controller: 47 - 48 - uart_AO: serial@c81004c0 { 49 - compatible = "amlogic,meson-uart"; 50 - reg = <0xc81004c0 0x14>; 51 - interrupts = <0 90 1>; 52 - clocks = <&clkc CLKID_CLK81>; 53 - };
+37
Documentation/devicetree/bindings/clock/amlogic,gxbb-clkc.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/amlogic,gxbb-clkc.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Amlogic Clock Controller 8 + 9 + maintainers: 10 + - Neil Armstrong <neil.armstrong@linaro.org> 11 + 12 + properties: 13 + compatible: 14 + enum: 15 + - amlogic,gxbb-clkc 16 + - amlogic,gxl-clkc 17 + - amlogic,axg-clkc 18 + - amlogic,g12a-clkc 19 + - amlogic,g12b-clkc 20 + - amlogic,sm1-clkc 21 + 22 + clocks: 23 + maxItems: 1 24 + 25 + clock-names: 26 + const: xtal 27 + 28 + '#clock-cells': 29 + const: 1 30 + 31 + required: 32 + - compatible 33 + - clocks 34 + - clock-names 35 + - '#clock-cells' 36 + 37 + additionalProperties: false
+282
Documentation/devicetree/bindings/clock/fsl,imx8-acm.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/clock/fsl,imx8-acm.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: NXP i.MX8 Audio Clock Mux 8 + 9 + maintainers: 10 + - Shengjiu Wang <shengjiu.wang@nxp.com> 11 + 12 + description: | 13 + NXP i.MX8 Audio Clock Mux is dedicated clock muxing IP 14 + used to control Audio related clock on the SoC. 15 + 16 + properties: 17 + compatible: 18 + enum: 19 + - fsl,imx8dxl-acm 20 + - fsl,imx8qm-acm 21 + - fsl,imx8qxp-acm 22 + 23 + reg: 24 + maxItems: 1 25 + 26 + power-domains: 27 + minItems: 13 28 + maxItems: 21 29 + 30 + '#clock-cells': 31 + const: 1 32 + description: 33 + The clock consumer should specify the desired clock by having the clock 34 + ID in its "clocks" phandle cell. See include/dt-bindings/clock/imx8-clock.h 35 + for the full list of i.MX8 ACM clock IDs. 36 + 37 + clocks: 38 + minItems: 13 39 + maxItems: 27 40 + 41 + clock-names: 42 + minItems: 13 43 + maxItems: 27 44 + 45 + required: 46 + - compatible 47 + - reg 48 + - power-domains 49 + - '#clock-cells' 50 + - clocks 51 + - clock-names 52 + 53 + allOf: 54 + - if: 55 + properties: 56 + compatible: 57 + contains: 58 + enum: 59 + - fsl,imx8qxp-acm 60 + then: 61 + properties: 62 + power-domains: 63 + items: 64 + - description: power domain of IMX_SC_R_AUDIO_CLK_0 65 + - description: power domain of IMX_SC_R_AUDIO_CLK_1 66 + - description: power domain of IMX_SC_R_MCLK_OUT_0 67 + - description: power domain of IMX_SC_R_MCLK_OUT_1 68 + - description: power domain of IMX_SC_R_AUDIO_PLL_0 69 + - description: power domain of IMX_SC_R_AUDIO_PLL_1 70 + - description: power domain of IMX_SC_R_ASRC_0 71 + - description: power domain of IMX_SC_R_ASRC_1 72 + - description: power domain of IMX_SC_R_ESAI_0 73 + - description: power domain of IMX_SC_R_SAI_0 74 + - description: power domain of IMX_SC_R_SAI_1 75 + - description: power domain of IMX_SC_R_SAI_2 76 + - description: power domain of IMX_SC_R_SAI_3 77 + - description: power domain of IMX_SC_R_SAI_4 78 + - description: power domain of IMX_SC_R_SAI_5 79 + - description: power domain of IMX_SC_R_SPDIF_0 80 + - description: power domain of IMX_SC_R_MQS_0 81 + 82 + clocks: 83 + minItems: 18 84 + maxItems: 18 85 + 86 + clock-names: 87 + items: 88 + - const: aud_rec_clk0_lpcg_clk 89 + - const: aud_rec_clk1_lpcg_clk 90 + - const: aud_pll_div_clk0_lpcg_clk 91 + - const: aud_pll_div_clk1_lpcg_clk 92 + - const: ext_aud_mclk0 93 + - const: ext_aud_mclk1 94 + - const: esai0_rx_clk 95 + - const: esai0_rx_hf_clk 96 + - const: esai0_tx_clk 97 + - const: esai0_tx_hf_clk 98 + - const: spdif0_rx 99 + - const: sai0_rx_bclk 100 + - const: sai0_tx_bclk 101 + - const: sai1_rx_bclk 102 + - const: sai1_tx_bclk 103 + - const: sai2_rx_bclk 104 + - const: sai3_rx_bclk 105 + - const: sai4_rx_bclk 106 + 107 + - if: 108 + properties: 109 + compatible: 110 + contains: 111 + enum: 112 + - fsl,imx8qm-acm 113 + then: 114 + properties: 115 + power-domains: 116 + items: 117 + - description: power domain of IMX_SC_R_AUDIO_CLK_0 118 + - description: power domain of IMX_SC_R_AUDIO_CLK_1 119 + - description: power domain of IMX_SC_R_MCLK_OUT_0 120 + - description: power domain of IMX_SC_R_MCLK_OUT_1 121 + - description: power domain of IMX_SC_R_AUDIO_PLL_0 122 + - description: power domain of IMX_SC_R_AUDIO_PLL_1 123 + - description: power domain of IMX_SC_R_ASRC_0 124 + - description: power domain of IMX_SC_R_ASRC_1 125 + - description: power domain of IMX_SC_R_ESAI_0 126 + - description: power domain of IMX_SC_R_ESAI_1 127 + - description: power domain of IMX_SC_R_SAI_0 128 + - description: power domain of IMX_SC_R_SAI_1 129 + - description: power domain of IMX_SC_R_SAI_2 130 + - description: power domain of IMX_SC_R_SAI_3 131 + - description: power domain of IMX_SC_R_SAI_4 132 + - description: power domain of IMX_SC_R_SAI_5 133 + - description: power domain of IMX_SC_R_SAI_6 134 + - description: power domain of IMX_SC_R_SAI_7 135 + - description: power domain of IMX_SC_R_SPDIF_0 136 + - description: power domain of IMX_SC_R_SPDIF_1 137 + - description: power domain of IMX_SC_R_MQS_0 138 + 139 + clocks: 140 + minItems: 27 141 + maxItems: 27 142 + 143 + clock-names: 144 + items: 145 + - const: aud_rec_clk0_lpcg_clk 146 + - const: aud_rec_clk1_lpcg_clk 147 + - const: aud_pll_div_clk0_lpcg_clk 148 + - const: aud_pll_div_clk1_lpcg_clk 149 + - const: mlb_clk 150 + - const: hdmi_rx_mclk 151 + - const: ext_aud_mclk0 152 + - const: ext_aud_mclk1 153 + - const: esai0_rx_clk 154 + - const: esai0_rx_hf_clk 155 + - const: esai0_tx_clk 156 + - const: esai0_tx_hf_clk 157 + - const: esai1_rx_clk 158 + - const: esai1_rx_hf_clk 159 + - const: esai1_tx_clk 160 + - const: esai1_tx_hf_clk 161 + - const: spdif0_rx 162 + - const: spdif1_rx 163 + - const: sai0_rx_bclk 164 + - const: sai0_tx_bclk 165 + - const: sai1_rx_bclk 166 + - const: sai1_tx_bclk 167 + - const: sai2_rx_bclk 168 + - const: sai3_rx_bclk 169 + - const: sai4_rx_bclk 170 + - const: sai5_tx_bclk 171 + - const: sai6_rx_bclk 172 + 173 + - if: 174 + properties: 175 + compatible: 176 + contains: 177 + enum: 178 + - fsl,imx8dxl-acm 179 + then: 180 + properties: 181 + power-domains: 182 + items: 183 + - description: power domain of IMX_SC_R_AUDIO_CLK_0 184 + - description: power domain of IMX_SC_R_AUDIO_CLK_1 185 + - description: power domain of IMX_SC_R_MCLK_OUT_0 186 + - description: power domain of IMX_SC_R_MCLK_OUT_1 187 + - description: power domain of IMX_SC_R_AUDIO_PLL_0 188 + - description: power domain of IMX_SC_R_AUDIO_PLL_1 189 + - description: power domain of IMX_SC_R_ASRC_0 190 + - description: power domain of IMX_SC_R_SAI_0 191 + - description: power domain of IMX_SC_R_SAI_1 192 + - description: power domain of IMX_SC_R_SAI_2 193 + - description: power domain of IMX_SC_R_SAI_3 194 + - description: power domain of IMX_SC_R_SPDIF_0 195 + - description: power domain of IMX_SC_R_MQS_0 196 + 197 + clocks: 198 + minItems: 13 199 + maxItems: 13 200 + 201 + clock-names: 202 + items: 203 + - const: aud_rec_clk0_lpcg_clk 204 + - const: aud_rec_clk1_lpcg_clk 205 + - const: aud_pll_div_clk0_lpcg_clk 206 + - const: aud_pll_div_clk1_lpcg_clk 207 + - const: ext_aud_mclk0 208 + - const: ext_aud_mclk1 209 + - const: spdif0_rx 210 + - const: sai0_rx_bclk 211 + - const: sai0_tx_bclk 212 + - const: sai1_rx_bclk 213 + - const: sai1_tx_bclk 214 + - const: sai2_rx_bclk 215 + - const: sai3_rx_bclk 216 + 217 + additionalProperties: false 218 + 219 + examples: 220 + # Clock Control Module node: 221 + - | 222 + #include <dt-bindings/clock/imx8-lpcg.h> 223 + #include <dt-bindings/firmware/imx/rsrc.h> 224 + 225 + clock-controller@59e00000 { 226 + compatible = "fsl,imx8qxp-acm"; 227 + reg = <0x59e00000 0x1d0000>; 228 + #clock-cells = <1>; 229 + power-domains = <&pd IMX_SC_R_AUDIO_CLK_0>, 230 + <&pd IMX_SC_R_AUDIO_CLK_1>, 231 + <&pd IMX_SC_R_MCLK_OUT_0>, 232 + <&pd IMX_SC_R_MCLK_OUT_1>, 233 + <&pd IMX_SC_R_AUDIO_PLL_0>, 234 + <&pd IMX_SC_R_AUDIO_PLL_1>, 235 + <&pd IMX_SC_R_ASRC_0>, 236 + <&pd IMX_SC_R_ASRC_1>, 237 + <&pd IMX_SC_R_ESAI_0>, 238 + <&pd IMX_SC_R_SAI_0>, 239 + <&pd IMX_SC_R_SAI_1>, 240 + <&pd IMX_SC_R_SAI_2>, 241 + <&pd IMX_SC_R_SAI_3>, 242 + <&pd IMX_SC_R_SAI_4>, 243 + <&pd IMX_SC_R_SAI_5>, 244 + <&pd IMX_SC_R_SPDIF_0>, 245 + <&pd IMX_SC_R_MQS_0>; 246 + clocks = <&aud_rec0_lpcg IMX_LPCG_CLK_0>, 247 + <&aud_rec1_lpcg IMX_LPCG_CLK_0>, 248 + <&aud_pll_div0_lpcg IMX_LPCG_CLK_0>, 249 + <&aud_pll_div1_lpcg IMX_LPCG_CLK_0>, 250 + <&clk_ext_aud_mclk0>, 251 + <&clk_ext_aud_mclk1>, 252 + <&clk_esai0_rx_clk>, 253 + <&clk_esai0_rx_hf_clk>, 254 + <&clk_esai0_tx_clk>, 255 + <&clk_esai0_tx_hf_clk>, 256 + <&clk_spdif0_rx>, 257 + <&clk_sai0_rx_bclk>, 258 + <&clk_sai0_tx_bclk>, 259 + <&clk_sai1_rx_bclk>, 260 + <&clk_sai1_tx_bclk>, 261 + <&clk_sai2_rx_bclk>, 262 + <&clk_sai3_rx_bclk>, 263 + <&clk_sai4_rx_bclk>; 264 + clock-names = "aud_rec_clk0_lpcg_clk", 265 + "aud_rec_clk1_lpcg_clk", 266 + "aud_pll_div_clk0_lpcg_clk", 267 + "aud_pll_div_clk1_lpcg_clk", 268 + "ext_aud_mclk0", 269 + "ext_aud_mclk1", 270 + "esai0_rx_clk", 271 + "esai0_rx_hf_clk", 272 + "esai0_tx_clk", 273 + "esai0_tx_hf_clk", 274 + "spdif0_rx", 275 + "sai0_rx_bclk", 276 + "sai0_tx_bclk", 277 + "sai1_rx_bclk", 278 + "sai1_tx_bclk", 279 + "sai2_rx_bclk", 280 + "sai3_rx_bclk", 281 + "sai4_rx_bclk"; 282 + };
-30
Documentation/devicetree/bindings/clock/hix5hd2-clock.txt
··· 1 - * Hisilicon Hix5hd2 Clock Controller 2 - 3 - The hix5hd2 clock controller generates and supplies clock to various 4 - controllers within the hix5hd2 SoC. 5 - 6 - Required Properties: 7 - 8 - - compatible: should be "hisilicon,hix5hd2-clock" 9 - - reg: Address and length of the register set 10 - - #clock-cells: Should be <1> 11 - 12 - Each clock is assigned an identifier and client nodes use this identifier 13 - to specify the clock which they consume. 14 - 15 - All these identifier could be found in <dt-bindings/clock/hix5hd2-clock.h>. 16 - 17 - Examples: 18 - clock: clock@f8a22000 { 19 - compatible = "hisilicon,hix5hd2-clock"; 20 - reg = <0xf8a22000 0x1000>; 21 - #clock-cells = <1>; 22 - }; 23 - 24 - uart0: uart@f8b00000 { 25 - compatible = "arm,pl011", "arm,primecell"; 26 - reg = <0xf8b00000 0x1000>; 27 - interrupts = <0 49 4>; 28 - clocks = <&clock HIX5HD2_FIXED_83M>; 29 - clock-names = "apb_pclk"; 30 - };
-28
Documentation/devicetree/bindings/clock/oxnas,stdclk.txt
··· 1 - Oxford Semiconductor OXNAS SoC Family Standard Clocks 2 - ================================================ 3 - 4 - Please also refer to clock-bindings.txt in this directory for common clock 5 - bindings usage. 6 - 7 - Required properties: 8 - - compatible: For OX810SE, should be "oxsemi,ox810se-stdclk" 9 - For OX820, should be "oxsemi,ox820-stdclk" 10 - - #clock-cells: 1, see below 11 - 12 - Parent node should have the following properties : 13 - - compatible: For OX810SE, should be 14 - "oxsemi,ox810se-sys-ctrl", "syscon", "simple-mfd" 15 - For OX820, should be 16 - "oxsemi,ox820-sys-ctrl", "syscon", "simple-mfd" 17 - 18 - example: 19 - 20 - sys: sys-ctrl@000000 { 21 - compatible = "oxsemi,ox810se-sys-ctrl", "syscon", "simple-mfd"; 22 - reg = <0x000000 0x100000>; 23 - 24 - stdclk: stdclk { 25 - compatible = "oxsemi,ox810se-stdclk"; 26 - #clock-cells = <1>; 27 - }; 28 - };
+1 -1
Documentation/devicetree/bindings/clock/qcom,gcc-apq8064.yaml
··· 8 8 9 9 maintainers: 10 10 - Stephen Boyd <sboyd@kernel.org> 11 - - Taniya Das <tdas@codeaurora.org> 11 + - Taniya Das <quic_tdas@quicinc.com> 12 12 13 13 description: | 14 14 Qualcomm global clock control module provides the clocks, resets and power
+1 -1
Documentation/devicetree/bindings/clock/qcom,gcc-ipq4019.yaml
··· 8 8 9 9 maintainers: 10 10 - Stephen Boyd <sboyd@kernel.org> 11 - - Taniya Das <tdas@codeaurora.org> 11 + - Taniya Das <quic_tdas@quicinc.com> 12 12 - Robert Marko <robert.markoo@sartura.hr> 13 13 14 14 description: |
+1 -1
Documentation/devicetree/bindings/clock/qcom,gcc-ipq8074.yaml
··· 8 8 9 9 maintainers: 10 10 - Stephen Boyd <sboyd@kernel.org> 11 - - Taniya Das <tdas@codeaurora.org> 11 + - Taniya Das <quic_tdas@quicinc.com> 12 12 13 13 description: | 14 14 Qualcomm global clock control module provides the clocks, resets and power
+1 -1
Documentation/devicetree/bindings/clock/qcom,gcc-msm8976.yaml
··· 8 8 9 9 maintainers: 10 10 - Stephen Boyd <sboyd@kernel.org> 11 - - Taniya Das <tdas@codeaurora.org> 11 + - Taniya Das <quic_tdas@quicinc.com> 12 12 13 13 description: | 14 14 Qualcomm global clock control module provides the clocks, resets and power
+1 -1
Documentation/devicetree/bindings/clock/qcom,gcc-msm8996.yaml
··· 8 8 9 9 maintainers: 10 10 - Stephen Boyd <sboyd@kernel.org> 11 - - Taniya Das <tdas@codeaurora.org> 11 + - Taniya Das <quic_tdas@quicinc.com> 12 12 13 13 description: | 14 14 Qualcomm global clock control module which provides the clocks, resets and
+1 -1
Documentation/devicetree/bindings/clock/qcom,gcc-msm8998.yaml
··· 8 8 9 9 maintainers: 10 10 - Stephen Boyd <sboyd@kernel.org> 11 - - Taniya Das <tdas@codeaurora.org> 11 + - Taniya Das <quic_tdas@quicinc.com> 12 12 13 13 description: | 14 14 Qualcomm global clock control module provides the clocks, resets and power
+1 -4
Documentation/devicetree/bindings/clock/qcom,gcc-other.yaml
··· 8 8 9 9 maintainers: 10 10 - Stephen Boyd <sboyd@kernel.org> 11 - - Taniya Das <tdas@codeaurora.org> 11 + - Taniya Das <quic_tdas@quicinc.com> 12 12 13 13 description: | 14 14 Qualcomm global clock control module provides the clocks, resets and power ··· 19 19 include/dt-bindings/reset/qcom,gcc-ipq6018.h 20 20 include/dt-bindings/clock/qcom,gcc-msm8953.h 21 21 include/dt-bindings/clock/qcom,gcc-mdm9607.h 22 - include/dt-bindings/clock/qcom,gcc-mdm9615.h 23 - include/dt-bindings/reset/qcom,gcc-mdm9615.h 24 22 25 23 allOf: 26 24 - $ref: qcom,gcc.yaml# ··· 28 30 enum: 29 31 - qcom,gcc-ipq6018 30 32 - qcom,gcc-mdm9607 31 - - qcom,gcc-mdm9615 32 33 33 34 required: 34 35 - compatible
+1 -1
Documentation/devicetree/bindings/clock/qcom,gcc-qcs404.yaml
··· 8 8 9 9 maintainers: 10 10 - Stephen Boyd <sboyd@kernel.org> 11 - - Taniya Das <tdas@codeaurora.org> 11 + - Taniya Das <quic_tdas@quicinc.com> 12 12 13 13 description: | 14 14 Qualcomm global clock control module provides the clocks, resets and power
+1 -1
Documentation/devicetree/bindings/clock/qcom,gcc-sc7180.yaml
··· 8 8 9 9 maintainers: 10 10 - Stephen Boyd <sboyd@kernel.org> 11 - - Taniya Das <tdas@codeaurora.org> 11 + - Taniya Das <quic_tdas@quicinc.com> 12 12 13 13 description: | 14 14 Qualcomm global clock control module provides the clocks, resets and power
+1 -1
Documentation/devicetree/bindings/clock/qcom,gcc-sc7280.yaml
··· 7 7 title: Qualcomm Global Clock & Reset Controller on SC7280 8 8 9 9 maintainers: 10 - - Taniya Das <tdas@codeaurora.org> 10 + - Taniya Das <quic_tdas@quicinc.com> 11 11 12 12 description: | 13 13 Qualcomm global clock control module provides the clocks, resets and power
+1 -1
Documentation/devicetree/bindings/clock/qcom,gcc-sdm845.yaml
··· 8 8 9 9 maintainers: 10 10 - Stephen Boyd <sboyd@kernel.org> 11 - - Taniya Das <tdas@codeaurora.org> 11 + - Taniya Das <quic_tdas@quicinc.com> 12 12 13 13 description: | 14 14 Qualcomm global clock control module provides the clocks, resets and power
+1 -1
Documentation/devicetree/bindings/clock/qcom,gcc-sm8150.yaml
··· 8 8 9 9 maintainers: 10 10 - Stephen Boyd <sboyd@kernel.org> 11 - - Taniya Das <tdas@codeaurora.org> 11 + - Taniya Das <quic_tdas@quicinc.com> 12 12 13 13 description: | 14 14 Qualcomm global clock control module provides the clocks, resets and power
+1 -1
Documentation/devicetree/bindings/clock/qcom,gcc-sm8250.yaml
··· 8 8 9 9 maintainers: 10 10 - Stephen Boyd <sboyd@kernel.org> 11 - - Taniya Das <tdas@codeaurora.org> 11 + - Taniya Das <quic_tdas@quicinc.com> 12 12 13 13 description: | 14 14 Qualcomm global clock control module provides the clocks, resets and power
+1 -1
Documentation/devicetree/bindings/clock/qcom,gcc.yaml
··· 8 8 9 9 maintainers: 10 10 - Stephen Boyd <sboyd@kernel.org> 11 - - Taniya Das <tdas@codeaurora.org> 11 + - Taniya Das <quic_tdas@quicinc.com> 12 12 13 13 description: | 14 14 Common bindings for Qualcomm global clock control module providing the
+1 -1
Documentation/devicetree/bindings/clock/qcom,gpucc.yaml
··· 7 7 title: Qualcomm Graphics Clock & Reset Controller 8 8 9 9 maintainers: 10 - - Taniya Das <tdas@codeaurora.org> 10 + - Taniya Das <quic_tdas@quicinc.com> 11 11 12 12 description: | 13 13 Qualcomm graphics clock control module provides the clocks, resets and power
+34
Documentation/devicetree/bindings/clock/qcom,lcc.yaml
··· 76 76 - clocks 77 77 - clock-names 78 78 79 + - if: 80 + properties: 81 + compatible: 82 + contains: 83 + enum: 84 + - qcom,lcc-mdm9615 85 + then: 86 + properties: 87 + clocks: 88 + items: 89 + - description: Board CXO source 90 + - description: PLL 4 Vote clock 91 + - description: MI2S codec clock 92 + - description: Mic I2S codec clock 93 + - description: Mic I2S spare clock 94 + - description: Speaker I2S codec clock 95 + - description: Speaker I2S spare clock 96 + - description: PCM codec clock 97 + 98 + clock-names: 99 + items: 100 + - const: cxo 101 + - const: pll4_vote 102 + - const: mi2s_codec_clk 103 + - const: codec_i2s_mic_codec_clk 104 + - const: spare_i2s_mic_codec_clk 105 + - const: codec_i2s_spkr_codec_clk 106 + - const: spare_i2s_spkr_codec_clk 107 + - const: pcm_codec_clk 108 + 109 + required: 110 + - clocks 111 + - clock-names 112 + 79 113 examples: 80 114 - | 81 115 clock-controller@28000000 {
+3 -1
Documentation/devicetree/bindings/clock/qcom,mmcc.yaml
··· 8 8 9 9 maintainers: 10 10 - Jeffrey Hugo <quic_jhugo@quicinc.com> 11 - - Taniya Das <tdas@codeaurora.org> 11 + - Taniya Das <quic_tdas@quicinc.com> 12 12 13 13 description: | 14 14 Qualcomm multimedia clock control module provides the clocks, resets and ··· 297 297 - description: HDMI phy PLL clock 298 298 - description: DisplayPort phy PLL link clock 299 299 - description: DisplayPort phy PLL vco clock 300 + - description: Global PLL 0 DIV clock 300 301 301 302 clock-names: 302 303 items: ··· 310 309 - const: hdmipll 311 310 - const: dplink 312 311 - const: dpvco 312 + - const: gpll0_div 313 313 314 314 - if: 315 315 properties:
+3 -1
Documentation/devicetree/bindings/clock/qcom,msm8996-cbf.yaml
··· 15 15 16 16 properties: 17 17 compatible: 18 - const: qcom,msm8996-cbf 18 + enum: 19 + - qcom,msm8996-cbf 20 + - qcom,msm8996pro-cbf 19 21 20 22 reg: 21 23 maxItems: 1
+1 -1
Documentation/devicetree/bindings/clock/qcom,msm8998-gpucc.yaml
··· 7 7 title: Qualcomm Graphics Clock & Reset Controller on MSM8998 8 8 9 9 maintainers: 10 - - Taniya Das <tdas@codeaurora.org> 10 + - Taniya Das <quic_tdas@quicinc.com> 11 11 12 12 description: | 13 13 Qualcomm graphics clock control module provides the clocks, resets and power
+2 -1
Documentation/devicetree/bindings/clock/qcom,qdu1000-gcc.yaml
··· 7 7 title: Qualcomm Global Clock & Reset Controller for QDU1000 and QRU1000 8 8 9 9 maintainers: 10 - - Melody Olvera <quic_molvera@quicinc.com> 10 + - Taniya Das <quic_tdas@quicinc.com> 11 + - Imran Shaik <quic_imrashai@quicinc.com> 11 12 12 13 description: | 13 14 Qualcomm global clock control module which supports the clocks, resets and
+1 -1
Documentation/devicetree/bindings/clock/qcom,rpmhcc.yaml
··· 7 7 title: Qualcomm Technologies, Inc. RPMh Clocks 8 8 9 9 maintainers: 10 - - Taniya Das <tdas@codeaurora.org> 10 + - Taniya Das <quic_tdas@quicinc.com> 11 11 12 12 description: | 13 13 Resource Power Manager Hardened (RPMh) manages shared resources on
+1 -1
Documentation/devicetree/bindings/clock/qcom,sc7180-camcc.yaml
··· 7 7 title: Qualcomm Camera Clock & Reset Controller on SC7180 8 8 9 9 maintainers: 10 - - Taniya Das <tdas@codeaurora.org> 10 + - Taniya Das <quic_tdas@quicinc.com> 11 11 12 12 description: | 13 13 Qualcomm camera clock control module provides the clocks, resets and power
+1 -1
Documentation/devicetree/bindings/clock/qcom,sc7180-dispcc.yaml
··· 7 7 title: Qualcomm Display Clock & Reset Controller on SC7180 8 8 9 9 maintainers: 10 - - Taniya Das <tdas@codeaurora.org> 10 + - Taniya Das <quic_tdas@quicinc.com> 11 11 12 12 description: | 13 13 Qualcomm display clock control module provides the clocks, resets and power
+1 -1
Documentation/devicetree/bindings/clock/qcom,sc7180-lpasscorecc.yaml
··· 7 7 title: Qualcomm LPASS Core Clock Controller on SC7180 8 8 9 9 maintainers: 10 - - Taniya Das <tdas@codeaurora.org> 10 + - Taniya Das <quic_tdas@quicinc.com> 11 11 12 12 description: | 13 13 Qualcomm LPASS core clock control module provides the clocks and power
+1 -1
Documentation/devicetree/bindings/clock/qcom,sc7180-mss.yaml
··· 7 7 title: Qualcomm Modem Clock Controller on SC7180 8 8 9 9 maintainers: 10 - - Taniya Das <tdas@codeaurora.org> 10 + - Taniya Das <quic_tdas@quicinc.com> 11 11 12 12 description: | 13 13 Qualcomm modem clock control module provides the clocks on SC7180.
+1 -1
Documentation/devicetree/bindings/clock/qcom,sc7280-camcc.yaml
··· 7 7 title: Qualcomm Camera Clock & Reset Controller on SC7280 8 8 9 9 maintainers: 10 - - Taniya Das <tdas@codeaurora.org> 10 + - Taniya Das <quic_tdas@quicinc.com> 11 11 12 12 description: | 13 13 Qualcomm camera clock control module provides the clocks, resets and
+1 -1
Documentation/devicetree/bindings/clock/qcom,sc7280-dispcc.yaml
··· 7 7 title: Qualcomm Display Clock & Reset Controller on SC7280 8 8 9 9 maintainers: 10 - - Taniya Das <tdas@codeaurora.org> 10 + - Taniya Das <quic_tdas@quicinc.com> 11 11 12 12 description: | 13 13 Qualcomm display clock control module provides the clocks, resets and power
+1 -1
Documentation/devicetree/bindings/clock/qcom,sc7280-lpasscc.yaml
··· 7 7 title: Qualcomm LPASS Core Clock Controller on SC7280 8 8 9 9 maintainers: 10 - - Taniya Das <tdas@codeaurora.org> 10 + - Taniya Das <quic_tdas@quicinc.com> 11 11 12 12 description: | 13 13 Qualcomm LPASS core clock control module provides the clocks and power
+1 -1
Documentation/devicetree/bindings/clock/qcom,sc7280-lpasscorecc.yaml
··· 7 7 title: Qualcomm LPASS Core & Audio Clock Controller on SC7280 8 8 9 9 maintainers: 10 - - Taniya Das <tdas@codeaurora.org> 10 + - Taniya Das <quic_tdas@quicinc.com> 11 11 12 12 description: | 13 13 Qualcomm LPASS core and audio clock control module provides the clocks and
+1 -1
Documentation/devicetree/bindings/clock/qcom,sdm845-dispcc.yaml
··· 7 7 title: Qualcomm Display Clock & Reset Controller on SDM845 8 8 9 9 maintainers: 10 - - Taniya Das <tdas@codeaurora.org> 10 + - Taniya Das <quic_tdas@quicinc.com> 11 11 12 12 description: | 13 13 Qualcomm display clock control module provides the clocks, resets and power
+3 -1
Documentation/devicetree/bindings/clock/qcom,sm8350-videocc.yaml
··· 19 19 20 20 properties: 21 21 compatible: 22 - const: qcom,sm8350-videocc 22 + enum: 23 + - qcom,sc8280xp-videocc 24 + - qcom,sm8350-videocc 23 25 24 26 clocks: 25 27 items:
+1 -1
Documentation/devicetree/bindings/clock/qcom,videocc.yaml
··· 7 7 title: Qualcomm Video Clock & Reset Controller 8 8 9 9 maintainers: 10 - - Taniya Das <tdas@codeaurora.org> 10 + - Taniya Das <quic_tdas@quicinc.com> 11 11 12 12 description: | 13 13 Qualcomm video clock control module provides the clocks, resets and power
+86
Documentation/devicetree/bindings/clock/renesas,5p35023.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/renesas,5p35023.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Renesas 5p35023 VersaClock 3 programmable I2C clock generator 8 + 9 + maintainers: 10 + - Biju Das <biju.das.jz@bp.renesas.com> 11 + 12 + description: | 13 + The 5P35023 is a VersaClock programmable clock generator and 14 + is designed for low-power, consumer, and high-performance PCI 15 + express applications. The 5P35023 device is a three PLL 16 + architecture design, and each PLL is individually programmable 17 + and allowing for up to 6 unique frequency outputs. 18 + 19 + An internal OTP memory allows the user to store the configuration 20 + in the device. After power up, the user can change the device register 21 + settings through the I2C interface when I2C mode is selected. 22 + 23 + The driver can read a full register map from the DT, and will use that 24 + register map to initialize the attached part (via I2C) when the system 25 + boots. Any configuration not supported by the common clock framework 26 + must be done via the full register map, including optimized settings. 27 + 28 + Link to datasheet: 29 + https://www.renesas.com/us/en/products/clocks-timing/clock-generation/programmable-clocks/5p35023-versaclock-3s-programmable-clock-generator 30 + 31 + properties: 32 + compatible: 33 + enum: 34 + - renesas,5p35023 35 + 36 + reg: 37 + maxItems: 1 38 + 39 + '#clock-cells': 40 + const: 1 41 + 42 + clocks: 43 + maxItems: 1 44 + 45 + renesas,settings: 46 + description: Optional, complete register map of the device. 47 + Optimized settings for the device must be provided in full 48 + and are written during initialization. 49 + $ref: /schemas/types.yaml#/definitions/uint8-array 50 + maxItems: 37 51 + 52 + required: 53 + - compatible 54 + - reg 55 + - '#clock-cells' 56 + - clocks 57 + 58 + additionalProperties: false 59 + 60 + examples: 61 + - | 62 + i2c { 63 + #address-cells = <1>; 64 + #size-cells = <0>; 65 + 66 + versa3: clock-generator@68 { 67 + compatible = "renesas,5p35023"; 68 + reg = <0x68>; 69 + #clock-cells = <1>; 70 + 71 + clocks = <&x1_x2>; 72 + 73 + renesas,settings = [ 74 + 80 00 11 19 4c 02 23 7f 83 19 08 a9 5f 25 24 bf 75 + 00 14 7a e1 00 00 00 00 01 55 59 bb 3f 30 90 b6 76 + 80 b0 45 c4 95 77 + ]; 78 + 79 + assigned-clocks = <&versa3 0>, <&versa3 1>, 80 + <&versa3 2>, <&versa3 3>, 81 + <&versa3 4>, <&versa3 5>; 82 + assigned-clock-rates = <12288000>, <25000000>, 83 + <12000000>, <11289600>, 84 + <11289600>, <24000000>; 85 + }; 86 + };
+76 -11
Documentation/devicetree/bindings/clock/xlnx,versal-clk.yaml
··· 14 14 reads required input clock frequencies from the devicetree and acts as clock 15 15 provider for all clock consumers of PS clocks. 16 16 17 - select: false 18 - 19 17 properties: 20 18 compatible: 21 - const: xlnx,versal-clk 19 + oneOf: 20 + - enum: 21 + - xlnx,versal-clk 22 + - xlnx,zynqmp-clk 23 + - items: 24 + - enum: 25 + - xlnx,versal-net-clk 26 + - const: xlnx,versal-clk 22 27 23 28 "#clock-cells": 24 29 const: 1 ··· 31 26 clocks: 32 27 description: List of clock specifiers which are external input 33 28 clocks to the given clock controller. 34 - items: 35 - - description: reference clock 36 - - description: alternate reference clock 37 - - description: alternate reference clock for programmable logic 29 + minItems: 3 30 + maxItems: 8 38 31 39 32 clock-names: 40 - items: 41 - - const: ref 42 - - const: alt_ref 43 - - const: pl_alt_ref 33 + minItems: 3 34 + maxItems: 8 44 35 45 36 required: 46 37 - compatible ··· 45 44 - clock-names 46 45 47 46 additionalProperties: false 47 + 48 + allOf: 49 + - if: 50 + properties: 51 + compatible: 52 + contains: 53 + enum: 54 + - xlnx,versal-clk 55 + 56 + then: 57 + properties: 58 + clocks: 59 + items: 60 + - description: reference clock 61 + - description: alternate reference clock 62 + - description: alternate reference clock for programmable logic 63 + 64 + clock-names: 65 + items: 66 + - const: ref 67 + - const: alt_ref 68 + - const: pl_alt_ref 69 + 70 + - if: 71 + properties: 72 + compatible: 73 + contains: 74 + enum: 75 + - xlnx,zynqmp-clk 76 + 77 + then: 78 + properties: 79 + clocks: 80 + minItems: 5 81 + items: 82 + - description: PS reference clock 83 + - description: reference clock for video system 84 + - description: alternative PS reference clock 85 + - description: auxiliary reference clock 86 + - description: transceiver reference clock 87 + - description: (E)MIO clock source (Optional clock) 88 + - description: GEM emio clock (Optional clock) 89 + - description: Watchdog external clock (Optional clock) 90 + 91 + clock-names: 92 + minItems: 5 93 + items: 94 + - const: pss_ref_clk 95 + - const: video_clk 96 + - const: pss_alt_ref_clk 97 + - const: aux_ref_clk 98 + - const: gt_crx_ref_clk 99 + - pattern: "^mio_clk[00-77]+.*$" 100 + - pattern: "gem[0-3]+_emio_clk.*$" 101 + - pattern: "swdt[0-1]+_ext_clk.*$" 48 102 49 103 examples: 50 104 - | ··· 114 58 clock-names = "ref", "alt_ref", "pl_alt_ref"; 115 59 }; 116 60 }; 61 + }; 62 + 63 + clock-controller { 64 + #clock-cells = <1>; 65 + compatible = "xlnx,zynqmp-clk"; 66 + clocks = <&pss_ref_clk>, <&video_clk>, <&pss_alt_ref_clk>, 67 + <&aux_ref_clk>, <&gt_crx_ref_clk>; 68 + clock-names = "pss_ref_clk", "video_clk", "pss_alt_ref_clk", 69 + "aux_ref_clk", "gt_crx_ref_clk"; 117 70 }; 118 71 ...
-63
Documentation/devicetree/bindings/clock/xlnx,zynqmp-clk.txt
··· 1 - -------------------------------------------------------------------------- 2 - Device Tree Clock bindings for the Zynq Ultrascale+ MPSoC controlled using 3 - Zynq MPSoC firmware interface 4 - -------------------------------------------------------------------------- 5 - The clock controller is a h/w block of Zynq Ultrascale+ MPSoC clock 6 - tree. It reads required input clock frequencies from the devicetree and acts 7 - as clock provider for all clock consumers of PS clocks. 8 - 9 - See clock_bindings.txt for more information on the generic clock bindings. 10 - 11 - Required properties: 12 - - #clock-cells: Must be 1 13 - - compatible: Must contain: "xlnx,zynqmp-clk" 14 - - clocks: List of clock specifiers which are external input 15 - clocks to the given clock controller. Please refer 16 - the next section to find the input clocks for a 17 - given controller. 18 - - clock-names: List of clock names which are exteral input clocks 19 - to the given clock controller. Please refer to the 20 - clock bindings for more details. 21 - 22 - Input clocks for zynqmp Ultrascale+ clock controller: 23 - 24 - The Zynq UltraScale+ MPSoC has one primary and four alternative reference clock 25 - inputs. These required clock inputs are: 26 - - pss_ref_clk (PS reference clock) 27 - - video_clk (reference clock for video system ) 28 - - pss_alt_ref_clk (alternative PS reference clock) 29 - - aux_ref_clk 30 - - gt_crx_ref_clk (transceiver reference clock) 31 - 32 - The following strings are optional parameters to the 'clock-names' property in 33 - order to provide an optional (E)MIO clock source: 34 - - swdt0_ext_clk 35 - - swdt1_ext_clk 36 - - gem0_emio_clk 37 - - gem1_emio_clk 38 - - gem2_emio_clk 39 - - gem3_emio_clk 40 - - mio_clk_XX # with XX = 00..77 41 - - mio_clk_50_or_51 #for the mux clock to gem tsu from 50 or 51 42 - 43 - 44 - Output clocks are registered based on clock information received 45 - from firmware. Output clocks indexes are mentioned in 46 - include/dt-bindings/clock/xlnx-zynqmp-clk.h. 47 - 48 - ------- 49 - Example 50 - ------- 51 - 52 - firmware { 53 - zynqmp_firmware: zynqmp-firmware { 54 - compatible = "xlnx,zynqmp-firmware"; 55 - method = "smc"; 56 - zynqmp_clk: clock-controller { 57 - #clock-cells = <1>; 58 - compatible = "xlnx,zynqmp-clk"; 59 - clocks = <&pss_ref_clk>, <&video_clk>, <&pss_alt_ref_clk>, <&aux_ref_clk>, <&gt_crx_ref_clk>; 60 - clock-names = "pss_ref_clk", "video_clk", "pss_alt_ref_clk","aux_ref_clk", "gt_crx_ref_clk"; 61 - }; 62 - }; 63 - };
+160
Documentation/devicetree/bindings/soc/amlogic/amlogic,meson-gx-hhi-sysctrl.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/soc/amlogic/amlogic,meson-gx-hhi-sysctrl.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Amlogic Meson System Control registers 8 + 9 + maintainers: 10 + - Neil Armstrong <neil.armstrong@linaro.org> 11 + 12 + properties: 13 + compatible: 14 + items: 15 + - enum: 16 + - amlogic,meson-gx-hhi-sysctrl 17 + - amlogic,meson-gx-ao-sysctrl 18 + - amlogic,meson-axg-hhi-sysctrl 19 + - amlogic,meson-axg-ao-sysctrl 20 + - const: simple-mfd 21 + - const: syscon 22 + 23 + reg: 24 + maxItems: 1 25 + 26 + clock-controller: 27 + type: object 28 + 29 + power-controller: 30 + $ref: /schemas/power/amlogic,meson-ee-pwrc.yaml 31 + 32 + pinctrl: 33 + type: object 34 + 35 + phy: 36 + type: object 37 + 38 + allOf: 39 + - if: 40 + properties: 41 + compatible: 42 + enum: 43 + - amlogic,meson-gx-hhi-sysctrl 44 + - amlogic,meson-axg-hhi-sysctrl 45 + then: 46 + properties: 47 + clock-controller: 48 + $ref: /schemas/clock/amlogic,gxbb-clkc.yaml# 49 + 50 + required: 51 + - power-controller 52 + 53 + - if: 54 + properties: 55 + compatible: 56 + enum: 57 + - amlogic,meson-gx-ao-sysctrl 58 + - amlogic,meson-axg-ao-sysctrl 59 + then: 60 + properties: 61 + clock-controller: 62 + $ref: /schemas/clock/amlogic,gxbb-aoclkc.yaml# 63 + 64 + power-controller: false 65 + phy: false 66 + 67 + - if: 68 + properties: 69 + compatible: 70 + enum: 71 + - amlogic,meson-gx-hhi-sysctrl 72 + then: 73 + properties: 74 + phy: false 75 + 76 + - if: 77 + properties: 78 + compatible: 79 + enum: 80 + - amlogic,meson-axg-hhi-sysctrl 81 + then: 82 + properties: 83 + phy: 84 + oneOf: 85 + - $ref: /schemas/phy/amlogic,g12a-mipi-dphy-analog.yaml 86 + - $ref: /schemas/phy/amlogic,meson-axg-mipi-pcie-analog.yaml 87 + 88 + required: 89 + - compatible 90 + - reg 91 + - clock-controller 92 + 93 + additionalProperties: false 94 + 95 + examples: 96 + - | 97 + bus@c883c000 { 98 + compatible = "simple-bus"; 99 + reg = <0xc883c000 0x2000>; 100 + #address-cells = <1>; 101 + #size-cells = <1>; 102 + ranges = <0x0 0xc883c000 0x2000>; 103 + 104 + sysctrl: system-controller@0 { 105 + compatible = "amlogic,meson-gx-hhi-sysctrl", "simple-mfd", "syscon"; 106 + reg = <0 0x400>; 107 + 108 + clock-controller { 109 + compatible = "amlogic,gxbb-clkc"; 110 + #clock-cells = <1>; 111 + clocks = <&xtal>; 112 + clock-names = "xtal"; 113 + }; 114 + 115 + power-controller { 116 + compatible = "amlogic,meson-gxbb-pwrc"; 117 + #power-domain-cells = <1>; 118 + amlogic,ao-sysctrl = <&sysctrl_AO>; 119 + 120 + resets = <&reset_viu>, 121 + <&reset_venc>, 122 + <&reset_vcbus>, 123 + <&reset_bt656>, 124 + <&reset_dvin>, 125 + <&reset_rdma>, 126 + <&reset_venci>, 127 + <&reset_vencp>, 128 + <&reset_vdac>, 129 + <&reset_vdi6>, 130 + <&reset_vencl>, 131 + <&reset_vid_lock>; 132 + reset-names = "viu", "venc", "vcbus", "bt656", "dvin", 133 + "rdma", "venci", "vencp", "vdac", "vdi6", 134 + "vencl", "vid_lock"; 135 + clocks = <&clk_vpu>, <&clk_vapb>; 136 + clock-names = "vpu", "vapb"; 137 + }; 138 + }; 139 + }; 140 + 141 + bus@c8100000 { 142 + compatible = "simple-bus"; 143 + reg = <0xc8100000 0x100000>; 144 + #address-cells = <1>; 145 + #size-cells = <1>; 146 + ranges = <0x0 0xc8100000 0x100000>; 147 + 148 + sysctrl_AO: system-controller@0 { 149 + compatible = "amlogic,meson-gx-ao-sysctrl", "simple-mfd", "syscon"; 150 + reg = <0 0x100>; 151 + 152 + clock-controller { 153 + compatible = "amlogic,meson-gxbb-aoclkc", "amlogic,meson-gx-aoclkc"; 154 + #clock-cells = <1>; 155 + #reset-cells = <1>; 156 + clocks = <&xtal>, <&clk81>; 157 + clock-names = "xtal", "mpeg-clk"; 158 + }; 159 + }; 160 + };
+6
MAINTAINERS
··· 20369 20369 F: Documentation/devicetree/bindings/mmc/starfive* 20370 20370 F: drivers/mmc/host/dw_mmc-starfive.c 20371 20371 20372 + STARFIVE JH7110 PLL CLOCK DRIVER 20373 + M: Xingyu Wu <xingyu.wu@starfivetech.com> 20374 + S: Supported 20375 + F: Documentation/devicetree/bindings/clock/starfive,jh7110-pll.yaml 20376 + F: drivers/clk/starfive/clk-starfive-jh7110-pll.c 20377 + 20372 20378 STARFIVE JH7110 SYSCON 20373 20379 M: William Qiu <william.qiu@starfivetech.com> 20374 20380 M: Xingyu Wu <xingyu.wu@starfivetech.com>
+2 -3
drivers/base/core.c
··· 17 17 #include <linux/kstrtox.h> 18 18 #include <linux/module.h> 19 19 #include <linux/slab.h> 20 - #include <linux/string.h> 21 20 #include <linux/kdev_t.h> 22 21 #include <linux/notifier.h> 23 22 #include <linux/of.h> ··· 27 28 #include <linux/netdevice.h> 28 29 #include <linux/sched/signal.h> 29 30 #include <linux/sched/mm.h> 31 + #include <linux/string_helpers.h> 30 32 #include <linux/swiotlb.h> 31 33 #include <linux/sysfs.h> 32 34 #include <linux/dma-map-ops.h> /* for dma_default_coherent */ ··· 3908 3908 return dev_name(dev); 3909 3909 3910 3910 /* replace '!' in the name with '/' */ 3911 - s = kstrdup(dev_name(dev), GFP_KERNEL); 3911 + s = kstrdup_and_replace(dev_name(dev), '!', '/', GFP_KERNEL); 3912 3912 if (!s) 3913 3913 return NULL; 3914 - strreplace(s, '!', '/'); 3915 3914 return *tmp = s; 3916 3915 } 3917 3916
+9 -7
drivers/clk/Kconfig
··· 360 360 help 361 361 Support for the Marvell PXA SoC. 362 362 363 - config COMMON_CLK_OXNAS 364 - bool "Clock driver for the OXNAS SoC Family" 365 - depends on ARCH_OXNAS || COMPILE_TEST 366 - select MFD_SYSCON 367 - help 368 - Support for the OXNAS SoC Family clocks. 369 - 370 363 config COMMON_CLK_RS9_PCIE 371 364 tristate "Clock driver for Renesas 9-series PCIe clock generators" 372 365 depends on I2C ··· 377 384 help 378 385 This driver supports the SkyWorks Si521xx PCIe clock generator 379 386 models Si52144/Si52146/Si52147. 387 + 388 + config COMMON_CLK_VC3 389 + tristate "Clock driver for Renesas VersaClock 3 devices" 390 + depends on I2C 391 + depends on OF 392 + select REGMAP_I2C 393 + help 394 + This driver supports the Renesas VersaClock 3 programmable clock 395 + generators. 380 396 381 397 config COMMON_CLK_VC5 382 398 tristate "Clock driver for IDT VersaClock 5,6 devices"
+1 -1
drivers/clk/Makefile
··· 52 52 obj-$(CONFIG_ARCH_NOMADIK) += clk-nomadik.o 53 53 obj-$(CONFIG_ARCH_NPCM7XX) += clk-npcm7xx.o 54 54 obj-$(CONFIG_ARCH_NSPIRE) += clk-nspire.o 55 - obj-$(CONFIG_COMMON_CLK_OXNAS) += clk-oxnas.o 56 55 obj-$(CONFIG_COMMON_CLK_PALMAS) += clk-palmas.o 57 56 obj-$(CONFIG_CLK_LS1028A_PLLDIG) += clk-plldig.o 58 57 obj-$(CONFIG_COMMON_CLK_PWM) += clk-pwm.o ··· 75 76 obj-$(CONFIG_ARCH_VT8500) += clk-vt8500.o 76 77 obj-$(CONFIG_COMMON_CLK_RS9_PCIE) += clk-renesas-pcie.o 77 78 obj-$(CONFIG_COMMON_CLK_SI521XX) += clk-si521xx.o 79 + obj-$(CONFIG_COMMON_CLK_VC3) += clk-versaclock3.o 78 80 obj-$(CONFIG_COMMON_CLK_VC5) += clk-versaclock5.o 79 81 obj-$(CONFIG_COMMON_CLK_VC7) += clk-versaclock7.o 80 82 obj-$(CONFIG_COMMON_CLK_WM831X) += clk-wm831x.o
+1 -5
drivers/clk/actions/owl-common.c
··· 8 8 // Copyright (c) 2018 Linaro Ltd. 9 9 // Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> 10 10 11 - #include <linux/of_address.h> 12 - #include <linux/of_platform.h> 13 11 #include <linux/platform_device.h> 14 12 #include <linux/regmap.h> 15 13 ··· 41 43 { 42 44 void __iomem *base; 43 45 struct regmap *regmap; 44 - struct resource *res; 45 46 46 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 47 - base = devm_ioremap_resource(&pdev->dev, res); 47 + base = devm_platform_ioremap_resource(pdev, 0); 48 48 if (IS_ERR(base)) 49 49 return PTR_ERR(base); 50 50
+1 -1
drivers/clk/actions/owl-common.h
··· 12 12 #define _OWL_COMMON_H_ 13 13 14 14 #include <linux/clk-provider.h> 15 - #include <linux/of_platform.h> 16 15 #include <linux/regmap.h> 17 16 18 17 struct device_node; 18 + struct platform_device; 19 19 20 20 struct owl_clk_common { 21 21 struct regmap *regmap;
+2 -3
drivers/clk/axs10x/pll_clock.c
··· 12 12 #include <linux/err.h> 13 13 #include <linux/device.h> 14 14 #include <linux/io.h> 15 - #include <linux/of_address.h> 16 - #include <linux/of_device.h> 17 - #include <linux/slab.h> 18 15 #include <linux/of.h> 16 + #include <linux/of_address.h> 17 + #include <linux/slab.h> 19 18 20 19 /* PLL registers addresses */ 21 20 #define PLL_REG_IDIV 0x0
-1
drivers/clk/baikal-t1/clk-ccu-div.c
··· 20 20 #include <linux/mfd/syscon.h> 21 21 #include <linux/of.h> 22 22 #include <linux/of_address.h> 23 - #include <linux/of_platform.h> 24 23 #include <linux/ioport.h> 25 24 #include <linux/regmap.h> 26 25
+1 -1
drivers/clk/bcm/clk-bcm2835.c
··· 32 32 #include <linux/io.h> 33 33 #include <linux/math.h> 34 34 #include <linux/module.h> 35 - #include <linux/of_device.h> 35 + #include <linux/of.h> 36 36 #include <linux/platform_device.h> 37 37 #include <linux/slab.h> 38 38 #include <dt-bindings/clock/bcm2835.h>
-1
drivers/clk/bcm/clk-bcm63xx-gate.c
··· 3 3 #include <linux/clk-provider.h> 4 4 #include <linux/init.h> 5 5 #include <linux/of.h> 6 - #include <linux/of_device.h> 7 6 #include <linux/platform_device.h> 8 7 9 8 #include <dt-bindings/clock/bcm3368-clock.h>
+1 -1
drivers/clk/bcm/clk-sr.c
··· 5 5 6 6 #include <linux/err.h> 7 7 #include <linux/clk-provider.h> 8 - #include <linux/of_device.h> 8 + #include <linux/of.h> 9 9 #include <linux/platform_device.h> 10 10 11 11 #include <dt-bindings/clock/bcm-sr.h>
+2 -3
drivers/clk/clk-aspeed.c
··· 4 4 #define pr_fmt(fmt) "clk-aspeed: " fmt 5 5 6 6 #include <linux/mfd/syscon.h> 7 + #include <linux/of.h> 7 8 #include <linux/of_address.h> 8 - #include <linux/of_device.h> 9 9 #include <linux/platform_device.h> 10 10 #include <linux/regmap.h> 11 11 #include <linux/slab.h> ··· 701 701 GFP_KERNEL); 702 702 if (!aspeed_clk_data) 703 703 return; 704 + aspeed_clk_data->num = ASPEED_NUM_CLKS; 704 705 705 706 /* 706 707 * This way all clocks fetched before the platform device probes, ··· 733 732 aspeed_ast2500_cc(map); 734 733 else 735 734 pr_err("unknown platform, failed to add clocks\n"); 736 - 737 - aspeed_clk_data->num = ASPEED_NUM_CLKS; 738 735 ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, aspeed_clk_data); 739 736 if (ret) 740 737 pr_err("failed to add DT provider: %d\n", ret);
+2 -2
drivers/clk/clk-ast2600.c
··· 5 5 #define pr_fmt(fmt) "clk-ast2600: " fmt 6 6 7 7 #include <linux/mfd/syscon.h> 8 + #include <linux/mod_devicetable.h> 8 9 #include <linux/of_address.h> 9 - #include <linux/of_device.h> 10 10 #include <linux/platform_device.h> 11 11 #include <linux/regmap.h> 12 12 #include <linux/slab.h> ··· 839 839 ASPEED_G6_NUM_CLKS), GFP_KERNEL); 840 840 if (!aspeed_g6_clk_data) 841 841 return; 842 + aspeed_g6_clk_data->num = ASPEED_G6_NUM_CLKS; 842 843 843 844 /* 844 845 * This way all clocks fetched before the platform device probes, ··· 861 860 } 862 861 863 862 aspeed_g6_cc(map); 864 - aspeed_g6_clk_data->num = ASPEED_G6_NUM_CLKS; 865 863 ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, aspeed_g6_clk_data); 866 864 if (ret) 867 865 pr_err("failed to add DT provider: %d\n", ret);
+1 -3
drivers/clk/clk-axm5516.c
··· 541 541 static int axmclk_probe(struct platform_device *pdev) 542 542 { 543 543 void __iomem *base; 544 - struct resource *res; 545 544 int i, ret; 546 545 struct device *dev = &pdev->dev; 547 546 struct regmap *regmap; 548 547 size_t num_clks; 549 548 550 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 551 - base = devm_ioremap_resource(dev, res); 549 + base = devm_platform_ioremap_resource(pdev, 0); 552 550 if (IS_ERR(base)) 553 551 return PTR_ERR(base); 554 552
+4 -7
drivers/clk/clk-bm1880.c
··· 7 7 */ 8 8 9 9 #include <linux/clk-provider.h> 10 + #include <linux/io.h> 10 11 #include <linux/kernel.h> 12 + #include <linux/mod_devicetable.h> 11 13 #include <linux/module.h> 12 - #include <linux/of_address.h> 13 - #include <linux/of_device.h> 14 14 #include <linux/platform_device.h> 15 15 #include <linux/slab.h> 16 16 ··· 876 876 struct bm1880_clock_data *clk_data; 877 877 void __iomem *pll_base, *sys_base; 878 878 struct device *dev = &pdev->dev; 879 - struct resource *res; 880 879 int num_clks, i; 881 880 882 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 883 - pll_base = devm_ioremap_resource(&pdev->dev, res); 881 + pll_base = devm_platform_ioremap_resource(pdev, 0); 884 882 if (IS_ERR(pll_base)) 885 883 return PTR_ERR(pll_base); 886 884 887 - res = platform_get_resource(pdev, IORESOURCE_MEM, 1); 888 - sys_base = devm_ioremap_resource(&pdev->dev, res); 885 + sys_base = devm_platform_ioremap_resource(pdev, 1); 889 886 if (IS_ERR(sys_base)) 890 887 return PTR_ERR(sys_base); 891 888
+1 -1
drivers/clk/clk-cdce925.c
··· 834 834 static struct i2c_driver cdce925_driver = { 835 835 .driver = { 836 836 .name = "cdce925", 837 - .of_match_table = of_match_ptr(clk_cdce925_of_match), 837 + .of_match_table = clk_cdce925_of_match, 838 838 }, 839 839 .probe = cdce925_probe, 840 840 .id_table = cdce925_id,
+1 -1
drivers/clk/clk-cs2000-cp.c
··· 9 9 #include <linux/delay.h> 10 10 #include <linux/clk.h> 11 11 #include <linux/i2c.h> 12 - #include <linux/of_device.h> 12 + #include <linux/of.h> 13 13 #include <linux/module.h> 14 14 #include <linux/regmap.h> 15 15
+1 -2
drivers/clk/clk-en7523.c
··· 2 2 3 3 #include <linux/delay.h> 4 4 #include <linux/clk-provider.h> 5 + #include <linux/io.h> 5 6 #include <linux/of.h> 6 - #include <linux/of_address.h> 7 - #include <linux/of_device.h> 8 7 #include <linux/platform_device.h> 9 8 #include <dt-bindings/clock/en7523-clk.h> 10 9
+1 -3
drivers/clk/clk-fsl-sai.c
··· 33 33 struct clk_parent_data pdata = { .index = 0 }; 34 34 void __iomem *base; 35 35 struct clk_hw *hw; 36 - struct resource *res; 37 36 38 37 sai_clk = devm_kzalloc(dev, sizeof(*sai_clk), GFP_KERNEL); 39 38 if (!sai_clk) 40 39 return -ENOMEM; 41 40 42 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 43 - base = devm_ioremap_resource(dev, res); 41 + base = devm_platform_ioremap_resource(pdev, 0); 44 42 if (IS_ERR(base)) 45 43 return PTR_ERR(base); 46 44
+2 -4
drivers/clk/clk-gemini.c
··· 276 276 struct device *dev = &pdev->dev; 277 277 struct device_node *np = dev->of_node; 278 278 unsigned int mult, div; 279 - struct resource *res; 280 279 u32 val; 281 280 int ret; 282 281 int i; ··· 285 286 return -ENOMEM; 286 287 287 288 /* Remap the system controller for the exclusive register */ 288 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 289 - base = devm_ioremap_resource(dev, res); 289 + base = devm_platform_ioremap_resource(pdev, 0); 290 290 if (IS_ERR(base)) 291 291 return PTR_ERR(base); 292 292 ··· 402 404 GFP_KERNEL); 403 405 if (!gemini_clk_data) 404 406 return; 407 + gemini_clk_data->num = GEMINI_NUM_CLKS; 405 408 406 409 /* 407 410 * This way all clock fetched before the platform device probes, ··· 456 457 gemini_clk_data->hws[GEMINI_CLK_APB] = hw; 457 458 458 459 /* Register the clocks to be accessed by the device tree */ 459 - gemini_clk_data->num = GEMINI_NUM_CLKS; 460 460 of_clk_add_hw_provider(np, of_clk_hw_onecell_get, gemini_clk_data); 461 461 } 462 462 CLK_OF_DECLARE_DRIVER(gemini_cc, "cortina,gemini-syscon", gemini_cc_init);
+1 -1
drivers/clk/clk-gpio.c
··· 15 15 #include <linux/gpio/consumer.h> 16 16 #include <linux/err.h> 17 17 #include <linux/device.h> 18 + #include <linux/of.h> 18 19 #include <linux/platform_device.h> 19 - #include <linux/of_device.h> 20 20 21 21 /** 22 22 * DOC: basic gpio gated clock which can be enabled and disabled
+1 -4
drivers/clk/clk-hsdk-pll.c
··· 12 12 #include <linux/io.h> 13 13 #include <linux/of.h> 14 14 #include <linux/of_address.h> 15 - #include <linux/of_device.h> 16 15 #include <linux/platform_device.h> 17 16 #include <linux/slab.h> 18 17 ··· 303 304 static int hsdk_pll_clk_probe(struct platform_device *pdev) 304 305 { 305 306 int ret; 306 - struct resource *mem; 307 307 const char *parent_name; 308 308 unsigned int num_parents; 309 309 struct hsdk_pll_clk *pll_clk; ··· 313 315 if (!pll_clk) 314 316 return -ENOMEM; 315 317 316 - mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 317 - pll_clk->regs = devm_ioremap_resource(dev, mem); 318 + pll_clk->regs = devm_platform_ioremap_resource(pdev, 0); 318 319 if (IS_ERR(pll_clk->regs)) 319 320 return PTR_ERR(pll_clk->regs); 320 321
-1
drivers/clk/clk-k210.c
··· 11 11 #include <linux/platform_device.h> 12 12 #include <linux/of.h> 13 13 #include <linux/of_clk.h> 14 - #include <linux/of_platform.h> 15 14 #include <linux/of_address.h> 16 15 #include <linux/clk-provider.h> 17 16 #include <linux/bitfield.h>
+23 -12
drivers/clk/clk-lmk04832.c
··· 134 134 /* 0x14b - 0x152 Holdover */ 135 135 136 136 /* 0x153 - 0x15f PLL1 Configuration */ 137 + #define LMK04832_REG_PLL1_LD 0x15f 138 + #define LMK04832_BIT_PLL1_LD_MUX GENMASK(7, 3) 139 + #define LMK04832_VAL_PLL1_LD_MUX_SPI_RDBK 0x07 140 + #define LMK04832_BIT_PLL1_LD_TYPE GENMASK(2, 0) 141 + #define LMK04832_VAL_PLL1_LD_TYPE_OUT_PP 0x03 137 142 138 143 /* 0x160 - 0x16e PLL2 Configuration */ 139 144 #define LMK04832_REG_PLL2_R_MSB 0x160 ··· 211 206 RDBK_CLKIN_SEL0, 212 207 RDBK_CLKIN_SEL1, 213 208 RDBK_RESET, 209 + RDBK_PLL1_LD, 214 210 }; 215 211 216 212 struct lmk_dclk { ··· 1303 1297 sprintf(dclk_name, "lmk-dclk%02d_%02d", num, num + 1); 1304 1298 init.name = dclk_name; 1305 1299 parent_names[0] = clk_hw_get_name(&lmk->vco); 1300 + init.parent_names = parent_names; 1306 1301 init.ops = &lmk04832_dclk_ops; 1307 1302 init.flags = CLK_SET_RATE_PARENT; 1308 1303 init.num_parents = 1; ··· 1352 1345 { 1353 1346 int reg; 1354 1347 int ret; 1348 + int val = FIELD_PREP(LMK04832_BIT_CLKIN_SEL_MUX, 1349 + LMK04832_VAL_CLKIN_SEL_MUX_SPI_RDBK) | 1350 + FIELD_PREP(LMK04832_BIT_CLKIN_SEL_TYPE, 1351 + LMK04832_VAL_CLKIN_SEL_TYPE_OUT); 1355 1352 1356 1353 dev_info(lmk->dev, "setting up 4-wire mode\n"); 1357 1354 ret = regmap_write(lmk->regmap, LMK04832_REG_RST3W, ··· 1373 1362 case RDBK_RESET: 1374 1363 reg = LMK04832_REG_CLKIN_RST; 1375 1364 break; 1365 + case RDBK_PLL1_LD: 1366 + reg = LMK04832_REG_PLL1_LD; 1367 + val = FIELD_PREP(LMK04832_BIT_PLL1_LD_MUX, 1368 + LMK04832_VAL_PLL1_LD_MUX_SPI_RDBK) | 1369 + FIELD_PREP(LMK04832_BIT_PLL1_LD_TYPE, 1370 + LMK04832_VAL_PLL1_LD_TYPE_OUT_PP); 1371 + break; 1376 1372 default: 1377 1373 return -EINVAL; 1378 1374 } 1379 1375 1380 - return regmap_write(lmk->regmap, reg, 1381 - FIELD_PREP(LMK04832_BIT_CLKIN_SEL_MUX, 1382 - LMK04832_VAL_CLKIN_SEL_MUX_SPI_RDBK) | 1383 - FIELD_PREP(LMK04832_BIT_CLKIN_SEL_TYPE, 1384 - LMK04832_VAL_CLKIN_SEL_TYPE_OUT)); 1376 + return regmap_write(lmk->regmap, reg, val); 1385 1377 } 1386 1378 1387 1379 static int lmk04832_probe(struct spi_device *spi) ··· 1518 1504 ret = clk_set_rate(lmk->vco.clk, lmk->vco_rate); 1519 1505 if (ret) { 1520 1506 dev_err(lmk->dev, "failed to set VCO rate\n"); 1521 - goto err_disable_vco; 1507 + goto err_disable_oscin; 1522 1508 } 1523 1509 } 1524 1510 1525 1511 ret = lmk04832_register_sclk(lmk); 1526 1512 if (ret) { 1527 1513 dev_err(lmk->dev, "failed to init SYNC/SYSREF clock path\n"); 1528 - goto err_disable_vco; 1514 + goto err_disable_oscin; 1529 1515 } 1530 1516 1531 1517 for (i = 0; i < info->num_channels; i++) { 1532 1518 ret = lmk04832_register_clkout(lmk, i); 1533 1519 if (ret) { 1534 1520 dev_err(lmk->dev, "failed to register clk %d\n", i); 1535 - goto err_disable_vco; 1521 + goto err_disable_oscin; 1536 1522 } 1537 1523 } 1538 1524 ··· 1541 1527 lmk->clk_data); 1542 1528 if (ret) { 1543 1529 dev_err(lmk->dev, "failed to add provider (%d)\n", ret); 1544 - goto err_disable_vco; 1530 + goto err_disable_oscin; 1545 1531 } 1546 1532 1547 1533 spi_set_drvdata(spi, lmk); 1548 1534 1549 1535 return 0; 1550 - 1551 - err_disable_vco: 1552 - clk_disable_unprepare(lmk->vco.clk); 1553 1536 1554 1537 err_disable_oscin: 1555 1538 clk_disable_unprepare(lmk->oscin);
+1 -2
drivers/clk/clk-milbeaut.c
··· 618 618 619 619 if (!m10v_clk_data) 620 620 return; 621 + m10v_clk_data->num = M10V_NUM_CLKS; 621 622 622 623 base = of_iomap(np, 0); 623 624 if (!base) { ··· 655 654 base + CLKSEL(1), 0, 3, 0, rclk_table, 656 655 &m10v_crglock, NULL); 657 656 m10v_clk_data->hws[M10V_RCLK_ID] = hw; 658 - 659 - m10v_clk_data->num = M10V_NUM_CLKS; 660 657 of_clk_add_hw_provider(np, of_clk_hw_onecell_get, m10v_clk_data); 661 658 } 662 659 CLK_OF_DECLARE_DRIVER(m10v_cc, "socionext,milbeaut-m10v-ccu", m10v_cc_init);
-251
drivers/clk/clk-oxnas.c
··· 1 - // SPDX-License-Identifier: GPL-2.0-only 2 - /* 3 - * Copyright (C) 2010 Broadcom 4 - * Copyright (C) 2012 Stephen Warren 5 - * Copyright (C) 2016 Neil Armstrong <narmstrong@baylibre.com> 6 - */ 7 - 8 - #include <linux/clk-provider.h> 9 - #include <linux/kernel.h> 10 - #include <linux/init.h> 11 - #include <linux/of.h> 12 - #include <linux/of_device.h> 13 - #include <linux/platform_device.h> 14 - #include <linux/stringify.h> 15 - #include <linux/regmap.h> 16 - #include <linux/mfd/syscon.h> 17 - 18 - #include <dt-bindings/clock/oxsemi,ox810se.h> 19 - #include <dt-bindings/clock/oxsemi,ox820.h> 20 - 21 - /* Standard regmap gate clocks */ 22 - struct clk_oxnas_gate { 23 - struct clk_hw hw; 24 - unsigned int bit; 25 - struct regmap *regmap; 26 - }; 27 - 28 - struct oxnas_stdclk_data { 29 - struct clk_hw_onecell_data *onecell_data; 30 - struct clk_oxnas_gate **gates; 31 - unsigned int ngates; 32 - struct clk_oxnas_pll **plls; 33 - unsigned int nplls; 34 - }; 35 - 36 - /* Regmap offsets */ 37 - #define CLK_STAT_REGOFFSET 0x24 38 - #define CLK_SET_REGOFFSET 0x2c 39 - #define CLK_CLR_REGOFFSET 0x30 40 - 41 - static inline struct clk_oxnas_gate *to_clk_oxnas_gate(struct clk_hw *hw) 42 - { 43 - return container_of(hw, struct clk_oxnas_gate, hw); 44 - } 45 - 46 - static int oxnas_clk_gate_is_enabled(struct clk_hw *hw) 47 - { 48 - struct clk_oxnas_gate *std = to_clk_oxnas_gate(hw); 49 - int ret; 50 - unsigned int val; 51 - 52 - ret = regmap_read(std->regmap, CLK_STAT_REGOFFSET, &val); 53 - if (ret < 0) 54 - return ret; 55 - 56 - return val & BIT(std->bit); 57 - } 58 - 59 - static int oxnas_clk_gate_enable(struct clk_hw *hw) 60 - { 61 - struct clk_oxnas_gate *std = to_clk_oxnas_gate(hw); 62 - 63 - regmap_write(std->regmap, CLK_SET_REGOFFSET, BIT(std->bit)); 64 - 65 - return 0; 66 - } 67 - 68 - static void oxnas_clk_gate_disable(struct clk_hw *hw) 69 - { 70 - struct clk_oxnas_gate *std = to_clk_oxnas_gate(hw); 71 - 72 - regmap_write(std->regmap, CLK_CLR_REGOFFSET, BIT(std->bit)); 73 - } 74 - 75 - static const struct clk_ops oxnas_clk_gate_ops = { 76 - .enable = oxnas_clk_gate_enable, 77 - .disable = oxnas_clk_gate_disable, 78 - .is_enabled = oxnas_clk_gate_is_enabled, 79 - }; 80 - 81 - static const char *const osc_parents[] = { 82 - "oscillator", 83 - }; 84 - 85 - static const char *const eth_parents[] = { 86 - "gmacclk", 87 - }; 88 - 89 - #define OXNAS_GATE(_name, _bit, _parents) \ 90 - struct clk_oxnas_gate _name = { \ 91 - .bit = (_bit), \ 92 - .hw.init = &(struct clk_init_data) { \ 93 - .name = #_name, \ 94 - .ops = &oxnas_clk_gate_ops, \ 95 - .parent_names = _parents, \ 96 - .num_parents = ARRAY_SIZE(_parents), \ 97 - .flags = (CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED), \ 98 - }, \ 99 - } 100 - 101 - static OXNAS_GATE(ox810se_leon, 0, osc_parents); 102 - static OXNAS_GATE(ox810se_dma_sgdma, 1, osc_parents); 103 - static OXNAS_GATE(ox810se_cipher, 2, osc_parents); 104 - static OXNAS_GATE(ox810se_sata, 4, osc_parents); 105 - static OXNAS_GATE(ox810se_audio, 5, osc_parents); 106 - static OXNAS_GATE(ox810se_usbmph, 6, osc_parents); 107 - static OXNAS_GATE(ox810se_etha, 7, eth_parents); 108 - static OXNAS_GATE(ox810se_pciea, 8, osc_parents); 109 - static OXNAS_GATE(ox810se_nand, 9, osc_parents); 110 - 111 - static struct clk_oxnas_gate *ox810se_gates[] = { 112 - &ox810se_leon, 113 - &ox810se_dma_sgdma, 114 - &ox810se_cipher, 115 - &ox810se_sata, 116 - &ox810se_audio, 117 - &ox810se_usbmph, 118 - &ox810se_etha, 119 - &ox810se_pciea, 120 - &ox810se_nand, 121 - }; 122 - 123 - static OXNAS_GATE(ox820_leon, 0, osc_parents); 124 - static OXNAS_GATE(ox820_dma_sgdma, 1, osc_parents); 125 - static OXNAS_GATE(ox820_cipher, 2, osc_parents); 126 - static OXNAS_GATE(ox820_sd, 3, osc_parents); 127 - static OXNAS_GATE(ox820_sata, 4, osc_parents); 128 - static OXNAS_GATE(ox820_audio, 5, osc_parents); 129 - static OXNAS_GATE(ox820_usbmph, 6, osc_parents); 130 - static OXNAS_GATE(ox820_etha, 7, eth_parents); 131 - static OXNAS_GATE(ox820_pciea, 8, osc_parents); 132 - static OXNAS_GATE(ox820_nand, 9, osc_parents); 133 - static OXNAS_GATE(ox820_ethb, 10, eth_parents); 134 - static OXNAS_GATE(ox820_pcieb, 11, osc_parents); 135 - static OXNAS_GATE(ox820_ref600, 12, osc_parents); 136 - static OXNAS_GATE(ox820_usbdev, 13, osc_parents); 137 - 138 - static struct clk_oxnas_gate *ox820_gates[] = { 139 - &ox820_leon, 140 - &ox820_dma_sgdma, 141 - &ox820_cipher, 142 - &ox820_sd, 143 - &ox820_sata, 144 - &ox820_audio, 145 - &ox820_usbmph, 146 - &ox820_etha, 147 - &ox820_pciea, 148 - &ox820_nand, 149 - &ox820_etha, 150 - &ox820_pciea, 151 - &ox820_ref600, 152 - &ox820_usbdev, 153 - }; 154 - 155 - static struct clk_hw_onecell_data ox810se_hw_onecell_data = { 156 - .hws = { 157 - [CLK_810_LEON] = &ox810se_leon.hw, 158 - [CLK_810_DMA_SGDMA] = &ox810se_dma_sgdma.hw, 159 - [CLK_810_CIPHER] = &ox810se_cipher.hw, 160 - [CLK_810_SATA] = &ox810se_sata.hw, 161 - [CLK_810_AUDIO] = &ox810se_audio.hw, 162 - [CLK_810_USBMPH] = &ox810se_usbmph.hw, 163 - [CLK_810_ETHA] = &ox810se_etha.hw, 164 - [CLK_810_PCIEA] = &ox810se_pciea.hw, 165 - [CLK_810_NAND] = &ox810se_nand.hw, 166 - }, 167 - .num = ARRAY_SIZE(ox810se_gates), 168 - }; 169 - 170 - static struct clk_hw_onecell_data ox820_hw_onecell_data = { 171 - .hws = { 172 - [CLK_820_LEON] = &ox820_leon.hw, 173 - [CLK_820_DMA_SGDMA] = &ox820_dma_sgdma.hw, 174 - [CLK_820_CIPHER] = &ox820_cipher.hw, 175 - [CLK_820_SD] = &ox820_sd.hw, 176 - [CLK_820_SATA] = &ox820_sata.hw, 177 - [CLK_820_AUDIO] = &ox820_audio.hw, 178 - [CLK_820_USBMPH] = &ox820_usbmph.hw, 179 - [CLK_820_ETHA] = &ox820_etha.hw, 180 - [CLK_820_PCIEA] = &ox820_pciea.hw, 181 - [CLK_820_NAND] = &ox820_nand.hw, 182 - [CLK_820_ETHB] = &ox820_ethb.hw, 183 - [CLK_820_PCIEB] = &ox820_pcieb.hw, 184 - [CLK_820_REF600] = &ox820_ref600.hw, 185 - [CLK_820_USBDEV] = &ox820_usbdev.hw, 186 - }, 187 - .num = ARRAY_SIZE(ox820_gates), 188 - }; 189 - 190 - static struct oxnas_stdclk_data ox810se_stdclk_data = { 191 - .onecell_data = &ox810se_hw_onecell_data, 192 - .gates = ox810se_gates, 193 - .ngates = ARRAY_SIZE(ox810se_gates), 194 - }; 195 - 196 - static struct oxnas_stdclk_data ox820_stdclk_data = { 197 - .onecell_data = &ox820_hw_onecell_data, 198 - .gates = ox820_gates, 199 - .ngates = ARRAY_SIZE(ox820_gates), 200 - }; 201 - 202 - static const struct of_device_id oxnas_stdclk_dt_ids[] = { 203 - { .compatible = "oxsemi,ox810se-stdclk", &ox810se_stdclk_data }, 204 - { .compatible = "oxsemi,ox820-stdclk", &ox820_stdclk_data }, 205 - { } 206 - }; 207 - 208 - static int oxnas_stdclk_probe(struct platform_device *pdev) 209 - { 210 - struct device_node *np = pdev->dev.of_node, *parent_np; 211 - const struct oxnas_stdclk_data *data; 212 - struct regmap *regmap; 213 - int ret; 214 - int i; 215 - 216 - data = of_device_get_match_data(&pdev->dev); 217 - 218 - parent_np = of_get_parent(np); 219 - regmap = syscon_node_to_regmap(parent_np); 220 - of_node_put(parent_np); 221 - if (IS_ERR(regmap)) { 222 - dev_err(&pdev->dev, "failed to have parent regmap\n"); 223 - return PTR_ERR(regmap); 224 - } 225 - 226 - for (i = 0 ; i < data->ngates ; ++i) 227 - data->gates[i]->regmap = regmap; 228 - 229 - for (i = 0; i < data->onecell_data->num; i++) { 230 - if (!data->onecell_data->hws[i]) 231 - continue; 232 - 233 - ret = devm_clk_hw_register(&pdev->dev, 234 - data->onecell_data->hws[i]); 235 - if (ret) 236 - return ret; 237 - } 238 - 239 - return of_clk_add_hw_provider(np, of_clk_hw_onecell_get, 240 - data->onecell_data); 241 - } 242 - 243 - static struct platform_driver oxnas_stdclk_driver = { 244 - .probe = oxnas_stdclk_probe, 245 - .driver = { 246 - .name = "oxnas-stdclk", 247 - .suppress_bind_attrs = true, 248 - .of_match_table = oxnas_stdclk_dt_ids, 249 - }, 250 - }; 251 - builtin_platform_driver(oxnas_stdclk_driver);
-1
drivers/clk/clk-palmas.c
··· 14 14 #include <linux/mfd/palmas.h> 15 15 #include <linux/module.h> 16 16 #include <linux/of.h> 17 - #include <linux/of_device.h> 18 17 #include <linux/platform_device.h> 19 18 #include <linux/slab.h> 20 19
-2
drivers/clk/clk-plldig.c
··· 12 12 #include <linux/io.h> 13 13 #include <linux/iopoll.h> 14 14 #include <linux/of.h> 15 - #include <linux/of_address.h> 16 - #include <linux/of_device.h> 17 15 #include <linux/platform_device.h> 18 16 #include <linux/slab.h> 19 17 #include <linux/bitfield.h>
+1 -1
drivers/clk/clk-qoriq.c
··· 17 17 #include <linux/kernel.h> 18 18 #include <linux/module.h> 19 19 #include <linux/of_address.h> 20 - #include <linux/of_platform.h> 21 20 #include <linux/of.h> 21 + #include <linux/platform_device.h> 22 22 #include <linux/slab.h> 23 23 24 24 #define PLL_DIV1 0
-1
drivers/clk/clk-scpi.c
··· 10 10 #include <linux/err.h> 11 11 #include <linux/of.h> 12 12 #include <linux/module.h> 13 - #include <linux/of_platform.h> 14 13 #include <linux/platform_device.h> 15 14 #include <linux/scpi_protocol.h> 16 15
+1 -1
drivers/clk/clk-si5351.c
··· 21 21 #include <linux/errno.h> 22 22 #include <linux/rational.h> 23 23 #include <linux/i2c.h> 24 - #include <linux/of_platform.h> 24 + #include <linux/of.h> 25 25 #include <linux/platform_data/si5351.h> 26 26 #include <linux/regmap.h> 27 27 #include <linux/slab.h>
+1 -2
drivers/clk/clk-sp7021.c
··· 621 621 GFP_KERNEL); 622 622 if (!clk_data) 623 623 return -ENOMEM; 624 + clk_data->num = CLK_MAX; 624 625 625 626 hws = clk_data->hws; 626 627 pd_ext.index = 0; ··· 688 687 if (IS_ERR(hws[i])) 689 688 return PTR_ERR(hws[i]); 690 689 } 691 - 692 - clk_data->num = CLK_MAX; 693 690 694 691 return devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, clk_data); 695 692 }
+1143
drivers/clk/clk-versaclock3.c
··· 1 + // SPDX-License-Identifier: GPL-2.0+ 2 + /* 3 + * Driver for Renesas Versaclock 3 4 + * 5 + * Copyright (C) 2023 Renesas Electronics Corp. 6 + */ 7 + 8 + #include <linux/clk-provider.h> 9 + #include <linux/i2c.h> 10 + #include <linux/limits.h> 11 + #include <linux/module.h> 12 + #include <linux/regmap.h> 13 + 14 + #define NUM_CONFIG_REGISTERS 37 15 + 16 + #define VC3_GENERAL_CTR 0x0 17 + #define VC3_GENERAL_CTR_DIV1_SRC_SEL BIT(3) 18 + #define VC3_GENERAL_CTR_PLL3_REFIN_SEL BIT(2) 19 + 20 + #define VC3_PLL3_M_DIVIDER 0x3 21 + #define VC3_PLL3_M_DIV1 BIT(7) 22 + #define VC3_PLL3_M_DIV2 BIT(6) 23 + #define VC3_PLL3_M_DIV(n) ((n) & GENMASK(5, 0)) 24 + 25 + #define VC3_PLL3_N_DIVIDER 0x4 26 + #define VC3_PLL3_LOOP_FILTER_N_DIV_MSB 0x5 27 + 28 + #define VC3_PLL3_CHARGE_PUMP_CTRL 0x6 29 + #define VC3_PLL3_CHARGE_PUMP_CTRL_OUTDIV3_SRC_SEL BIT(7) 30 + 31 + #define VC3_PLL1_CTRL_OUTDIV5 0x7 32 + #define VC3_PLL1_CTRL_OUTDIV5_PLL1_MDIV_DOUBLER BIT(7) 33 + 34 + #define VC3_PLL1_M_DIVIDER 0x8 35 + #define VC3_PLL1_M_DIV1 BIT(7) 36 + #define VC3_PLL1_M_DIV2 BIT(6) 37 + #define VC3_PLL1_M_DIV(n) ((n) & GENMASK(5, 0)) 38 + 39 + #define VC3_PLL1_VCO_N_DIVIDER 0x9 40 + #define VC3_PLL1_LOOP_FILTER_N_DIV_MSB 0x0a 41 + 42 + #define VC3_OUT_DIV1_DIV2_CTRL 0xf 43 + 44 + #define VC3_PLL2_FB_INT_DIV_MSB 0x10 45 + #define VC3_PLL2_FB_INT_DIV_LSB 0x11 46 + #define VC3_PLL2_FB_FRC_DIV_MSB 0x12 47 + #define VC3_PLL2_FB_FRC_DIV_LSB 0x13 48 + 49 + #define VC3_PLL2_M_DIVIDER 0x1a 50 + #define VC3_PLL2_MDIV_DOUBLER BIT(7) 51 + #define VC3_PLL2_M_DIV1 BIT(6) 52 + #define VC3_PLL2_M_DIV2 BIT(5) 53 + #define VC3_PLL2_M_DIV(n) ((n) & GENMASK(4, 0)) 54 + 55 + #define VC3_OUT_DIV3_DIV4_CTRL 0x1b 56 + 57 + #define VC3_PLL_OP_CTRL 0x1c 58 + #define VC3_PLL_OP_CTRL_PLL2_REFIN_SEL 6 59 + 60 + #define VC3_OUTPUT_CTR 0x1d 61 + #define VC3_OUTPUT_CTR_DIV4_SRC_SEL BIT(3) 62 + 63 + #define VC3_SE2_CTRL_REG0 0x1f 64 + #define VC3_SE2_CTRL_REG0_SE2_CLK_SEL BIT(6) 65 + 66 + #define VC3_SE3_DIFF1_CTRL_REG 0x21 67 + #define VC3_SE3_DIFF1_CTRL_REG_SE3_CLK_SEL BIT(6) 68 + 69 + #define VC3_DIFF1_CTRL_REG 0x22 70 + #define VC3_DIFF1_CTRL_REG_DIFF1_CLK_SEL BIT(7) 71 + 72 + #define VC3_DIFF2_CTRL_REG 0x23 73 + #define VC3_DIFF2_CTRL_REG_DIFF2_CLK_SEL BIT(7) 74 + 75 + #define VC3_SE1_DIV4_CTRL 0x24 76 + #define VC3_SE1_DIV4_CTRL_SE1_CLK_SEL BIT(3) 77 + 78 + #define VC3_PLL1_VCO_MIN 300000000UL 79 + #define VC3_PLL1_VCO_MAX 600000000UL 80 + 81 + #define VC3_PLL2_VCO_MIN 400000000UL 82 + #define VC3_PLL2_VCO_MAX 1200000000UL 83 + 84 + #define VC3_PLL3_VCO_MIN 300000000UL 85 + #define VC3_PLL3_VCO_MAX 800000000UL 86 + 87 + #define VC3_2_POW_16 (U16_MAX + 1) 88 + #define VC3_DIV_MASK(width) ((1 << (width)) - 1) 89 + 90 + enum vc3_pfd_mux { 91 + VC3_PFD2_MUX, 92 + VC3_PFD3_MUX, 93 + }; 94 + 95 + enum vc3_pfd { 96 + VC3_PFD1, 97 + VC3_PFD2, 98 + VC3_PFD3, 99 + }; 100 + 101 + enum vc3_pll { 102 + VC3_PLL1, 103 + VC3_PLL2, 104 + VC3_PLL3, 105 + }; 106 + 107 + enum vc3_div_mux { 108 + VC3_DIV1_MUX, 109 + VC3_DIV3_MUX, 110 + VC3_DIV4_MUX, 111 + }; 112 + 113 + enum vc3_div { 114 + VC3_DIV1, 115 + VC3_DIV2, 116 + VC3_DIV3, 117 + VC3_DIV4, 118 + VC3_DIV5, 119 + }; 120 + 121 + enum vc3_clk_mux { 122 + VC3_DIFF2_MUX, 123 + VC3_DIFF1_MUX, 124 + VC3_SE3_MUX, 125 + VC3_SE2_MUX, 126 + VC3_SE1_MUX, 127 + }; 128 + 129 + enum vc3_clk { 130 + VC3_DIFF2, 131 + VC3_DIFF1, 132 + VC3_SE3, 133 + VC3_SE2, 134 + VC3_SE1, 135 + VC3_REF, 136 + }; 137 + 138 + struct vc3_clk_data { 139 + u8 offs; 140 + u8 bitmsk; 141 + }; 142 + 143 + struct vc3_pfd_data { 144 + u8 num; 145 + u8 offs; 146 + u8 mdiv1_bitmsk; 147 + u8 mdiv2_bitmsk; 148 + }; 149 + 150 + struct vc3_pll_data { 151 + u8 num; 152 + u8 int_div_msb_offs; 153 + u8 int_div_lsb_offs; 154 + unsigned long vco_min; 155 + unsigned long vco_max; 156 + }; 157 + 158 + struct vc3_div_data { 159 + u8 offs; 160 + const struct clk_div_table *table; 161 + u8 shift; 162 + u8 width; 163 + u8 flags; 164 + }; 165 + 166 + struct vc3_hw_data { 167 + struct clk_hw hw; 168 + struct regmap *regmap; 169 + const void *data; 170 + 171 + u32 div_int; 172 + u32 div_frc; 173 + }; 174 + 175 + static const struct clk_div_table div1_divs[] = { 176 + { .val = 0, .div = 1, }, { .val = 1, .div = 4, }, 177 + { .val = 2, .div = 5, }, { .val = 3, .div = 6, }, 178 + { .val = 4, .div = 2, }, { .val = 5, .div = 8, }, 179 + { .val = 6, .div = 10, }, { .val = 7, .div = 12, }, 180 + { .val = 8, .div = 4, }, { .val = 9, .div = 16, }, 181 + { .val = 10, .div = 20, }, { .val = 11, .div = 24, }, 182 + { .val = 12, .div = 8, }, { .val = 13, .div = 32, }, 183 + { .val = 14, .div = 40, }, { .val = 15, .div = 48, }, 184 + {} 185 + }; 186 + 187 + static const struct clk_div_table div245_divs[] = { 188 + { .val = 0, .div = 1, }, { .val = 1, .div = 3, }, 189 + { .val = 2, .div = 5, }, { .val = 3, .div = 10, }, 190 + { .val = 4, .div = 2, }, { .val = 5, .div = 6, }, 191 + { .val = 6, .div = 10, }, { .val = 7, .div = 20, }, 192 + { .val = 8, .div = 4, }, { .val = 9, .div = 12, }, 193 + { .val = 10, .div = 20, }, { .val = 11, .div = 40, }, 194 + { .val = 12, .div = 5, }, { .val = 13, .div = 15, }, 195 + { .val = 14, .div = 25, }, { .val = 15, .div = 50, }, 196 + {} 197 + }; 198 + 199 + static const struct clk_div_table div3_divs[] = { 200 + { .val = 0, .div = 1, }, { .val = 1, .div = 3, }, 201 + { .val = 2, .div = 5, }, { .val = 3, .div = 10, }, 202 + { .val = 4, .div = 2, }, { .val = 5, .div = 6, }, 203 + { .val = 6, .div = 10, }, { .val = 7, .div = 20, }, 204 + { .val = 8, .div = 4, }, { .val = 9, .div = 12, }, 205 + { .val = 10, .div = 20, }, { .val = 11, .div = 40, }, 206 + { .val = 12, .div = 8, }, { .val = 13, .div = 24, }, 207 + { .val = 14, .div = 40, }, { .val = 15, .div = 80, }, 208 + {} 209 + }; 210 + 211 + static struct clk_hw *clk_out[6]; 212 + 213 + static unsigned char vc3_pfd_mux_get_parent(struct clk_hw *hw) 214 + { 215 + struct vc3_hw_data *vc3 = container_of(hw, struct vc3_hw_data, hw); 216 + const struct vc3_clk_data *pfd_mux = vc3->data; 217 + u32 src; 218 + 219 + regmap_read(vc3->regmap, pfd_mux->offs, &src); 220 + 221 + return !!(src & pfd_mux->bitmsk); 222 + } 223 + 224 + static int vc3_pfd_mux_set_parent(struct clk_hw *hw, u8 index) 225 + { 226 + struct vc3_hw_data *vc3 = container_of(hw, struct vc3_hw_data, hw); 227 + const struct vc3_clk_data *pfd_mux = vc3->data; 228 + 229 + regmap_update_bits(vc3->regmap, pfd_mux->offs, pfd_mux->bitmsk, 230 + index ? pfd_mux->bitmsk : 0); 231 + return 0; 232 + } 233 + 234 + static const struct clk_ops vc3_pfd_mux_ops = { 235 + .determine_rate = clk_hw_determine_rate_no_reparent, 236 + .set_parent = vc3_pfd_mux_set_parent, 237 + .get_parent = vc3_pfd_mux_get_parent, 238 + }; 239 + 240 + static unsigned long vc3_pfd_recalc_rate(struct clk_hw *hw, 241 + unsigned long parent_rate) 242 + { 243 + struct vc3_hw_data *vc3 = container_of(hw, struct vc3_hw_data, hw); 244 + const struct vc3_pfd_data *pfd = vc3->data; 245 + unsigned int prediv, premul; 246 + unsigned long rate; 247 + u8 mdiv; 248 + 249 + regmap_read(vc3->regmap, pfd->offs, &prediv); 250 + if (pfd->num == VC3_PFD1) { 251 + /* The bypass_prediv is set, PLL fed from Ref_in directly. */ 252 + if (prediv & pfd->mdiv1_bitmsk) { 253 + /* check doubler is set or not */ 254 + regmap_read(vc3->regmap, VC3_PLL1_CTRL_OUTDIV5, &premul); 255 + if (premul & VC3_PLL1_CTRL_OUTDIV5_PLL1_MDIV_DOUBLER) 256 + parent_rate *= 2; 257 + return parent_rate; 258 + } 259 + mdiv = VC3_PLL1_M_DIV(prediv); 260 + } else if (pfd->num == VC3_PFD2) { 261 + /* The bypass_prediv is set, PLL fed from Ref_in directly. */ 262 + if (prediv & pfd->mdiv1_bitmsk) { 263 + regmap_read(vc3->regmap, VC3_PLL2_M_DIVIDER, &premul); 264 + /* check doubler is set or not */ 265 + if (premul & VC3_PLL2_MDIV_DOUBLER) 266 + parent_rate *= 2; 267 + return parent_rate; 268 + } 269 + 270 + mdiv = VC3_PLL2_M_DIV(prediv); 271 + } else { 272 + /* The bypass_prediv is set, PLL fed from Ref_in directly. */ 273 + if (prediv & pfd->mdiv1_bitmsk) 274 + return parent_rate; 275 + 276 + mdiv = VC3_PLL3_M_DIV(prediv); 277 + } 278 + 279 + if (prediv & pfd->mdiv2_bitmsk) 280 + rate = parent_rate / 2; 281 + else 282 + rate = parent_rate / mdiv; 283 + 284 + return rate; 285 + } 286 + 287 + static long vc3_pfd_round_rate(struct clk_hw *hw, unsigned long rate, 288 + unsigned long *parent_rate) 289 + { 290 + struct vc3_hw_data *vc3 = container_of(hw, struct vc3_hw_data, hw); 291 + const struct vc3_pfd_data *pfd = vc3->data; 292 + unsigned long idiv; 293 + 294 + /* PLL cannot operate with input clock above 50 MHz. */ 295 + if (rate > 50000000) 296 + return -EINVAL; 297 + 298 + /* CLKIN within range of PLL input, feed directly to PLL. */ 299 + if (*parent_rate <= 50000000) 300 + return *parent_rate; 301 + 302 + idiv = DIV_ROUND_UP(*parent_rate, rate); 303 + if (pfd->num == VC3_PFD1 || pfd->num == VC3_PFD3) { 304 + if (idiv > 63) 305 + return -EINVAL; 306 + } else { 307 + if (idiv > 31) 308 + return -EINVAL; 309 + } 310 + 311 + return *parent_rate / idiv; 312 + } 313 + 314 + static int vc3_pfd_set_rate(struct clk_hw *hw, unsigned long rate, 315 + unsigned long parent_rate) 316 + { 317 + struct vc3_hw_data *vc3 = container_of(hw, struct vc3_hw_data, hw); 318 + const struct vc3_pfd_data *pfd = vc3->data; 319 + unsigned long idiv; 320 + u8 div; 321 + 322 + /* CLKIN within range of PLL input, feed directly to PLL. */ 323 + if (parent_rate <= 50000000) { 324 + regmap_update_bits(vc3->regmap, pfd->offs, pfd->mdiv1_bitmsk, 325 + pfd->mdiv1_bitmsk); 326 + regmap_update_bits(vc3->regmap, pfd->offs, pfd->mdiv2_bitmsk, 0); 327 + return 0; 328 + } 329 + 330 + idiv = DIV_ROUND_UP(parent_rate, rate); 331 + /* We have dedicated div-2 predivider. */ 332 + if (idiv == 2) { 333 + regmap_update_bits(vc3->regmap, pfd->offs, pfd->mdiv2_bitmsk, 334 + pfd->mdiv2_bitmsk); 335 + regmap_update_bits(vc3->regmap, pfd->offs, pfd->mdiv1_bitmsk, 0); 336 + } else { 337 + if (pfd->num == VC3_PFD1) 338 + div = VC3_PLL1_M_DIV(idiv); 339 + else if (pfd->num == VC3_PFD2) 340 + div = VC3_PLL2_M_DIV(idiv); 341 + else 342 + div = VC3_PLL3_M_DIV(idiv); 343 + 344 + regmap_write(vc3->regmap, pfd->offs, div); 345 + } 346 + 347 + return 0; 348 + } 349 + 350 + static const struct clk_ops vc3_pfd_ops = { 351 + .recalc_rate = vc3_pfd_recalc_rate, 352 + .round_rate = vc3_pfd_round_rate, 353 + .set_rate = vc3_pfd_set_rate, 354 + }; 355 + 356 + static unsigned long vc3_pll_recalc_rate(struct clk_hw *hw, 357 + unsigned long parent_rate) 358 + { 359 + struct vc3_hw_data *vc3 = container_of(hw, struct vc3_hw_data, hw); 360 + const struct vc3_pll_data *pll = vc3->data; 361 + u32 div_int, div_frc, val; 362 + unsigned long rate; 363 + 364 + regmap_read(vc3->regmap, pll->int_div_msb_offs, &val); 365 + div_int = (val & GENMASK(2, 0)) << 8; 366 + regmap_read(vc3->regmap, pll->int_div_lsb_offs, &val); 367 + div_int |= val; 368 + 369 + if (pll->num == VC3_PLL2) { 370 + regmap_read(vc3->regmap, VC3_PLL2_FB_FRC_DIV_MSB, &val); 371 + div_frc = val << 8; 372 + regmap_read(vc3->regmap, VC3_PLL2_FB_FRC_DIV_LSB, &val); 373 + div_frc |= val; 374 + rate = (parent_rate * 375 + (div_int * VC3_2_POW_16 + div_frc) / VC3_2_POW_16); 376 + } else { 377 + rate = parent_rate * div_int; 378 + } 379 + 380 + return rate; 381 + } 382 + 383 + static long vc3_pll_round_rate(struct clk_hw *hw, unsigned long rate, 384 + unsigned long *parent_rate) 385 + { 386 + struct vc3_hw_data *vc3 = container_of(hw, struct vc3_hw_data, hw); 387 + const struct vc3_pll_data *pll = vc3->data; 388 + u64 div_frc; 389 + 390 + if (rate < pll->vco_min) 391 + rate = pll->vco_min; 392 + if (rate > pll->vco_max) 393 + rate = pll->vco_max; 394 + 395 + vc3->div_int = rate / *parent_rate; 396 + 397 + if (pll->num == VC3_PLL2) { 398 + if (vc3->div_int > 0x7ff) 399 + rate = *parent_rate * 0x7ff; 400 + 401 + /* Determine best fractional part, which is 16 bit wide */ 402 + div_frc = rate % *parent_rate; 403 + div_frc *= BIT(16) - 1; 404 + do_div(div_frc, *parent_rate); 405 + 406 + vc3->div_frc = (u32)div_frc; 407 + rate = (*parent_rate * 408 + (vc3->div_int * VC3_2_POW_16 + div_frc) / VC3_2_POW_16); 409 + } else { 410 + rate = *parent_rate * vc3->div_int; 411 + } 412 + 413 + return rate; 414 + } 415 + 416 + static int vc3_pll_set_rate(struct clk_hw *hw, unsigned long rate, 417 + unsigned long parent_rate) 418 + { 419 + struct vc3_hw_data *vc3 = container_of(hw, struct vc3_hw_data, hw); 420 + const struct vc3_pll_data *pll = vc3->data; 421 + u32 val; 422 + 423 + regmap_read(vc3->regmap, pll->int_div_msb_offs, &val); 424 + val = (val & 0xf8) | ((vc3->div_int >> 8) & 0x7); 425 + regmap_write(vc3->regmap, pll->int_div_msb_offs, val); 426 + regmap_write(vc3->regmap, pll->int_div_lsb_offs, vc3->div_int & 0xff); 427 + 428 + if (pll->num == VC3_PLL2) { 429 + regmap_write(vc3->regmap, VC3_PLL2_FB_FRC_DIV_MSB, 430 + vc3->div_frc >> 8); 431 + regmap_write(vc3->regmap, VC3_PLL2_FB_FRC_DIV_LSB, 432 + vc3->div_frc & 0xff); 433 + } 434 + 435 + return 0; 436 + } 437 + 438 + static const struct clk_ops vc3_pll_ops = { 439 + .recalc_rate = vc3_pll_recalc_rate, 440 + .round_rate = vc3_pll_round_rate, 441 + .set_rate = vc3_pll_set_rate, 442 + }; 443 + 444 + static unsigned char vc3_div_mux_get_parent(struct clk_hw *hw) 445 + { 446 + struct vc3_hw_data *vc3 = container_of(hw, struct vc3_hw_data, hw); 447 + const struct vc3_clk_data *div_mux = vc3->data; 448 + u32 src; 449 + 450 + regmap_read(vc3->regmap, div_mux->offs, &src); 451 + 452 + return !!(src & div_mux->bitmsk); 453 + } 454 + 455 + static int vc3_div_mux_set_parent(struct clk_hw *hw, u8 index) 456 + { 457 + struct vc3_hw_data *vc3 = container_of(hw, struct vc3_hw_data, hw); 458 + const struct vc3_clk_data *div_mux = vc3->data; 459 + 460 + regmap_update_bits(vc3->regmap, div_mux->offs, div_mux->bitmsk, 461 + index ? div_mux->bitmsk : 0); 462 + 463 + return 0; 464 + } 465 + 466 + static const struct clk_ops vc3_div_mux_ops = { 467 + .determine_rate = clk_hw_determine_rate_no_reparent, 468 + .set_parent = vc3_div_mux_set_parent, 469 + .get_parent = vc3_div_mux_get_parent, 470 + }; 471 + 472 + static unsigned int vc3_get_div(const struct clk_div_table *table, 473 + unsigned int val, unsigned long flag) 474 + { 475 + const struct clk_div_table *clkt; 476 + 477 + for (clkt = table; clkt->div; clkt++) 478 + if (clkt->val == val) 479 + return clkt->div; 480 + 481 + return 0; 482 + } 483 + 484 + static unsigned long vc3_div_recalc_rate(struct clk_hw *hw, 485 + unsigned long parent_rate) 486 + { 487 + struct vc3_hw_data *vc3 = container_of(hw, struct vc3_hw_data, hw); 488 + const struct vc3_div_data *div_data = vc3->data; 489 + unsigned int val; 490 + 491 + regmap_read(vc3->regmap, div_data->offs, &val); 492 + val >>= div_data->shift; 493 + val &= VC3_DIV_MASK(div_data->width); 494 + 495 + return divider_recalc_rate(hw, parent_rate, val, div_data->table, 496 + div_data->flags, div_data->width); 497 + } 498 + 499 + static long vc3_div_round_rate(struct clk_hw *hw, unsigned long rate, 500 + unsigned long *parent_rate) 501 + { 502 + struct vc3_hw_data *vc3 = container_of(hw, struct vc3_hw_data, hw); 503 + const struct vc3_div_data *div_data = vc3->data; 504 + unsigned int bestdiv; 505 + 506 + /* if read only, just return current value */ 507 + if (div_data->flags & CLK_DIVIDER_READ_ONLY) { 508 + regmap_read(vc3->regmap, div_data->offs, &bestdiv); 509 + bestdiv >>= div_data->shift; 510 + bestdiv &= VC3_DIV_MASK(div_data->width); 511 + bestdiv = vc3_get_div(div_data->table, bestdiv, div_data->flags); 512 + return DIV_ROUND_UP(*parent_rate, bestdiv); 513 + } 514 + 515 + return divider_round_rate(hw, rate, parent_rate, div_data->table, 516 + div_data->width, div_data->flags); 517 + } 518 + 519 + static int vc3_div_set_rate(struct clk_hw *hw, unsigned long rate, 520 + unsigned long parent_rate) 521 + { 522 + struct vc3_hw_data *vc3 = container_of(hw, struct vc3_hw_data, hw); 523 + const struct vc3_div_data *div_data = vc3->data; 524 + unsigned int value; 525 + 526 + value = divider_get_val(rate, parent_rate, div_data->table, 527 + div_data->width, div_data->flags); 528 + regmap_update_bits(vc3->regmap, div_data->offs, 529 + VC3_DIV_MASK(div_data->width) << div_data->shift, 530 + value << div_data->shift); 531 + return 0; 532 + } 533 + 534 + static const struct clk_ops vc3_div_ops = { 535 + .recalc_rate = vc3_div_recalc_rate, 536 + .round_rate = vc3_div_round_rate, 537 + .set_rate = vc3_div_set_rate, 538 + }; 539 + 540 + static int vc3_clk_mux_determine_rate(struct clk_hw *hw, 541 + struct clk_rate_request *req) 542 + { 543 + int ret; 544 + int frc; 545 + 546 + ret = clk_mux_determine_rate_flags(hw, req, CLK_SET_RATE_PARENT); 547 + if (ret) { 548 + /* The below check is equivalent to (best_parent_rate/rate) */ 549 + if (req->best_parent_rate >= req->rate) { 550 + frc = DIV_ROUND_CLOSEST_ULL(req->best_parent_rate, 551 + req->rate); 552 + req->rate *= frc; 553 + return clk_mux_determine_rate_flags(hw, req, 554 + CLK_SET_RATE_PARENT); 555 + } 556 + ret = 0; 557 + } 558 + 559 + return ret; 560 + } 561 + 562 + static unsigned char vc3_clk_mux_get_parent(struct clk_hw *hw) 563 + { 564 + struct vc3_hw_data *vc3 = container_of(hw, struct vc3_hw_data, hw); 565 + const struct vc3_clk_data *clk_mux = vc3->data; 566 + u32 val; 567 + 568 + regmap_read(vc3->regmap, clk_mux->offs, &val); 569 + 570 + return !!(val & clk_mux->bitmsk); 571 + } 572 + 573 + static int vc3_clk_mux_set_parent(struct clk_hw *hw, u8 index) 574 + { 575 + struct vc3_hw_data *vc3 = container_of(hw, struct vc3_hw_data, hw); 576 + const struct vc3_clk_data *clk_mux = vc3->data; 577 + 578 + regmap_update_bits(vc3->regmap, clk_mux->offs, 579 + clk_mux->bitmsk, index ? clk_mux->bitmsk : 0); 580 + return 0; 581 + } 582 + 583 + static const struct clk_ops vc3_clk_mux_ops = { 584 + .determine_rate = vc3_clk_mux_determine_rate, 585 + .set_parent = vc3_clk_mux_set_parent, 586 + .get_parent = vc3_clk_mux_get_parent, 587 + }; 588 + 589 + static bool vc3_regmap_is_writeable(struct device *dev, unsigned int reg) 590 + { 591 + return true; 592 + } 593 + 594 + static const struct regmap_config vc3_regmap_config = { 595 + .reg_bits = 8, 596 + .val_bits = 8, 597 + .cache_type = REGCACHE_RBTREE, 598 + .max_register = 0x24, 599 + .writeable_reg = vc3_regmap_is_writeable, 600 + }; 601 + 602 + static struct vc3_hw_data clk_div[5]; 603 + 604 + static const struct clk_parent_data pfd_mux_parent_data[] = { 605 + { .index = 0, }, 606 + { .hw = &clk_div[VC3_DIV2].hw } 607 + }; 608 + 609 + static struct vc3_hw_data clk_pfd_mux[] = { 610 + [VC3_PFD2_MUX] = { 611 + .data = &(struct vc3_clk_data) { 612 + .offs = VC3_PLL_OP_CTRL, 613 + .bitmsk = BIT(VC3_PLL_OP_CTRL_PLL2_REFIN_SEL) 614 + }, 615 + .hw.init = &(struct clk_init_data){ 616 + .name = "pfd2_mux", 617 + .ops = &vc3_pfd_mux_ops, 618 + .parent_data = pfd_mux_parent_data, 619 + .num_parents = 2, 620 + .flags = CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT 621 + } 622 + }, 623 + [VC3_PFD3_MUX] = { 624 + .data = &(struct vc3_clk_data) { 625 + .offs = VC3_GENERAL_CTR, 626 + .bitmsk = BIT(VC3_GENERAL_CTR_PLL3_REFIN_SEL) 627 + }, 628 + .hw.init = &(struct clk_init_data){ 629 + .name = "pfd3_mux", 630 + .ops = &vc3_pfd_mux_ops, 631 + .parent_data = pfd_mux_parent_data, 632 + .num_parents = 2, 633 + .flags = CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT 634 + } 635 + } 636 + }; 637 + 638 + static struct vc3_hw_data clk_pfd[] = { 639 + [VC3_PFD1] = { 640 + .data = &(struct vc3_pfd_data) { 641 + .num = VC3_PFD1, 642 + .offs = VC3_PLL1_M_DIVIDER, 643 + .mdiv1_bitmsk = VC3_PLL1_M_DIV1, 644 + .mdiv2_bitmsk = VC3_PLL1_M_DIV2 645 + }, 646 + .hw.init = &(struct clk_init_data){ 647 + .name = "pfd1", 648 + .ops = &vc3_pfd_ops, 649 + .parent_data = &(const struct clk_parent_data) { 650 + .index = 0 651 + }, 652 + .num_parents = 1, 653 + .flags = CLK_SET_RATE_PARENT 654 + } 655 + }, 656 + [VC3_PFD2] = { 657 + .data = &(struct vc3_pfd_data) { 658 + .num = VC3_PFD2, 659 + .offs = VC3_PLL2_M_DIVIDER, 660 + .mdiv1_bitmsk = VC3_PLL2_M_DIV1, 661 + .mdiv2_bitmsk = VC3_PLL2_M_DIV2 662 + }, 663 + .hw.init = &(struct clk_init_data){ 664 + .name = "pfd2", 665 + .ops = &vc3_pfd_ops, 666 + .parent_hws = (const struct clk_hw *[]) { 667 + &clk_pfd_mux[VC3_PFD2_MUX].hw 668 + }, 669 + .num_parents = 1, 670 + .flags = CLK_SET_RATE_PARENT 671 + } 672 + }, 673 + [VC3_PFD3] = { 674 + .data = &(struct vc3_pfd_data) { 675 + .num = VC3_PFD3, 676 + .offs = VC3_PLL3_M_DIVIDER, 677 + .mdiv1_bitmsk = VC3_PLL3_M_DIV1, 678 + .mdiv2_bitmsk = VC3_PLL3_M_DIV2 679 + }, 680 + .hw.init = &(struct clk_init_data){ 681 + .name = "pfd3", 682 + .ops = &vc3_pfd_ops, 683 + .parent_hws = (const struct clk_hw *[]) { 684 + &clk_pfd_mux[VC3_PFD3_MUX].hw 685 + }, 686 + .num_parents = 1, 687 + .flags = CLK_SET_RATE_PARENT 688 + } 689 + } 690 + }; 691 + 692 + static struct vc3_hw_data clk_pll[] = { 693 + [VC3_PLL1] = { 694 + .data = &(struct vc3_pll_data) { 695 + .num = VC3_PLL1, 696 + .int_div_msb_offs = VC3_PLL1_LOOP_FILTER_N_DIV_MSB, 697 + .int_div_lsb_offs = VC3_PLL1_VCO_N_DIVIDER, 698 + .vco_min = VC3_PLL1_VCO_MIN, 699 + .vco_max = VC3_PLL1_VCO_MAX 700 + }, 701 + .hw.init = &(struct clk_init_data){ 702 + .name = "pll1", 703 + .ops = &vc3_pll_ops, 704 + .parent_hws = (const struct clk_hw *[]) { 705 + &clk_pfd[VC3_PFD1].hw 706 + }, 707 + .num_parents = 1, 708 + .flags = CLK_SET_RATE_PARENT 709 + } 710 + }, 711 + [VC3_PLL2] = { 712 + .data = &(struct vc3_pll_data) { 713 + .num = VC3_PLL2, 714 + .int_div_msb_offs = VC3_PLL2_FB_INT_DIV_MSB, 715 + .int_div_lsb_offs = VC3_PLL2_FB_INT_DIV_LSB, 716 + .vco_min = VC3_PLL2_VCO_MIN, 717 + .vco_max = VC3_PLL2_VCO_MAX 718 + }, 719 + .hw.init = &(struct clk_init_data){ 720 + .name = "pll2", 721 + .ops = &vc3_pll_ops, 722 + .parent_hws = (const struct clk_hw *[]) { 723 + &clk_pfd[VC3_PFD2].hw 724 + }, 725 + .num_parents = 1, 726 + .flags = CLK_SET_RATE_PARENT 727 + } 728 + }, 729 + [VC3_PLL3] = { 730 + .data = &(struct vc3_pll_data) { 731 + .num = VC3_PLL3, 732 + .int_div_msb_offs = VC3_PLL3_LOOP_FILTER_N_DIV_MSB, 733 + .int_div_lsb_offs = VC3_PLL3_N_DIVIDER, 734 + .vco_min = VC3_PLL3_VCO_MIN, 735 + .vco_max = VC3_PLL3_VCO_MAX 736 + }, 737 + .hw.init = &(struct clk_init_data){ 738 + .name = "pll3", 739 + .ops = &vc3_pll_ops, 740 + .parent_hws = (const struct clk_hw *[]) { 741 + &clk_pfd[VC3_PFD3].hw 742 + }, 743 + .num_parents = 1, 744 + .flags = CLK_SET_RATE_PARENT 745 + } 746 + } 747 + }; 748 + 749 + static const struct clk_parent_data div_mux_parent_data[][2] = { 750 + [VC3_DIV1_MUX] = { 751 + { .hw = &clk_pll[VC3_PLL1].hw }, 752 + { .index = 0 } 753 + }, 754 + [VC3_DIV3_MUX] = { 755 + { .hw = &clk_pll[VC3_PLL2].hw }, 756 + { .hw = &clk_pll[VC3_PLL3].hw } 757 + }, 758 + [VC3_DIV4_MUX] = { 759 + { .hw = &clk_pll[VC3_PLL2].hw }, 760 + { .index = 0 } 761 + } 762 + }; 763 + 764 + static struct vc3_hw_data clk_div_mux[] = { 765 + [VC3_DIV1_MUX] = { 766 + .data = &(struct vc3_clk_data) { 767 + .offs = VC3_GENERAL_CTR, 768 + .bitmsk = VC3_GENERAL_CTR_DIV1_SRC_SEL 769 + }, 770 + .hw.init = &(struct clk_init_data){ 771 + .name = "div1_mux", 772 + .ops = &vc3_div_mux_ops, 773 + .parent_data = div_mux_parent_data[VC3_DIV1_MUX], 774 + .num_parents = 2, 775 + .flags = CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT 776 + } 777 + }, 778 + [VC3_DIV3_MUX] = { 779 + .data = &(struct vc3_clk_data) { 780 + .offs = VC3_PLL3_CHARGE_PUMP_CTRL, 781 + .bitmsk = VC3_PLL3_CHARGE_PUMP_CTRL_OUTDIV3_SRC_SEL 782 + }, 783 + .hw.init = &(struct clk_init_data){ 784 + .name = "div3_mux", 785 + .ops = &vc3_div_mux_ops, 786 + .parent_data = div_mux_parent_data[VC3_DIV3_MUX], 787 + .num_parents = 2, 788 + .flags = CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT 789 + } 790 + }, 791 + [VC3_DIV4_MUX] = { 792 + .data = &(struct vc3_clk_data) { 793 + .offs = VC3_OUTPUT_CTR, 794 + .bitmsk = VC3_OUTPUT_CTR_DIV4_SRC_SEL 795 + }, 796 + .hw.init = &(struct clk_init_data){ 797 + .name = "div4_mux", 798 + .ops = &vc3_div_mux_ops, 799 + .parent_data = div_mux_parent_data[VC3_DIV4_MUX], 800 + .num_parents = 2, 801 + .flags = CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT 802 + } 803 + } 804 + }; 805 + 806 + static struct vc3_hw_data clk_div[] = { 807 + [VC3_DIV1] = { 808 + .data = &(struct vc3_div_data) { 809 + .offs = VC3_OUT_DIV1_DIV2_CTRL, 810 + .table = div1_divs, 811 + .shift = 4, 812 + .width = 4, 813 + .flags = CLK_DIVIDER_READ_ONLY 814 + }, 815 + .hw.init = &(struct clk_init_data){ 816 + .name = "div1", 817 + .ops = &vc3_div_ops, 818 + .parent_hws = (const struct clk_hw *[]) { 819 + &clk_div_mux[VC3_DIV1_MUX].hw 820 + }, 821 + .num_parents = 1, 822 + .flags = CLK_SET_RATE_PARENT 823 + } 824 + }, 825 + [VC3_DIV2] = { 826 + .data = &(struct vc3_div_data) { 827 + .offs = VC3_OUT_DIV1_DIV2_CTRL, 828 + .table = div245_divs, 829 + .shift = 0, 830 + .width = 4, 831 + .flags = CLK_DIVIDER_READ_ONLY 832 + }, 833 + .hw.init = &(struct clk_init_data){ 834 + .name = "div2", 835 + .ops = &vc3_div_ops, 836 + .parent_hws = (const struct clk_hw *[]) { 837 + &clk_pll[VC3_PLL1].hw 838 + }, 839 + .num_parents = 1, 840 + .flags = CLK_SET_RATE_PARENT 841 + } 842 + }, 843 + [VC3_DIV3] = { 844 + .data = &(struct vc3_div_data) { 845 + .offs = VC3_OUT_DIV3_DIV4_CTRL, 846 + .table = div3_divs, 847 + .shift = 4, 848 + .width = 4, 849 + .flags = CLK_DIVIDER_READ_ONLY 850 + }, 851 + .hw.init = &(struct clk_init_data){ 852 + .name = "div3", 853 + .ops = &vc3_div_ops, 854 + .parent_hws = (const struct clk_hw *[]) { 855 + &clk_div_mux[VC3_DIV3_MUX].hw 856 + }, 857 + .num_parents = 1, 858 + .flags = CLK_SET_RATE_PARENT 859 + } 860 + }, 861 + [VC3_DIV4] = { 862 + .data = &(struct vc3_div_data) { 863 + .offs = VC3_OUT_DIV3_DIV4_CTRL, 864 + .table = div245_divs, 865 + .shift = 0, 866 + .width = 4, 867 + .flags = CLK_DIVIDER_READ_ONLY 868 + }, 869 + .hw.init = &(struct clk_init_data){ 870 + .name = "div4", 871 + .ops = &vc3_div_ops, 872 + .parent_hws = (const struct clk_hw *[]) { 873 + &clk_div_mux[VC3_DIV4_MUX].hw 874 + }, 875 + .num_parents = 1, 876 + .flags = CLK_SET_RATE_PARENT 877 + } 878 + }, 879 + [VC3_DIV5] = { 880 + .data = &(struct vc3_div_data) { 881 + .offs = VC3_PLL1_CTRL_OUTDIV5, 882 + .table = div245_divs, 883 + .shift = 0, 884 + .width = 4, 885 + .flags = CLK_DIVIDER_READ_ONLY 886 + }, 887 + .hw.init = &(struct clk_init_data){ 888 + .name = "div5", 889 + .ops = &vc3_div_ops, 890 + .parent_hws = (const struct clk_hw *[]) { 891 + &clk_pll[VC3_PLL3].hw 892 + }, 893 + .num_parents = 1, 894 + .flags = CLK_SET_RATE_PARENT 895 + } 896 + } 897 + }; 898 + 899 + static struct vc3_hw_data clk_mux[] = { 900 + [VC3_DIFF2_MUX] = { 901 + .data = &(struct vc3_clk_data) { 902 + .offs = VC3_DIFF2_CTRL_REG, 903 + .bitmsk = VC3_DIFF2_CTRL_REG_DIFF2_CLK_SEL 904 + }, 905 + .hw.init = &(struct clk_init_data){ 906 + .name = "diff2_mux", 907 + .ops = &vc3_clk_mux_ops, 908 + .parent_hws = (const struct clk_hw *[]) { 909 + &clk_div[VC3_DIV1].hw, 910 + &clk_div[VC3_DIV3].hw 911 + }, 912 + .num_parents = 2, 913 + .flags = CLK_SET_RATE_PARENT 914 + } 915 + }, 916 + [VC3_DIFF1_MUX] = { 917 + .data = &(struct vc3_clk_data) { 918 + .offs = VC3_DIFF1_CTRL_REG, 919 + .bitmsk = VC3_DIFF1_CTRL_REG_DIFF1_CLK_SEL 920 + }, 921 + .hw.init = &(struct clk_init_data){ 922 + .name = "diff1_mux", 923 + .ops = &vc3_clk_mux_ops, 924 + .parent_hws = (const struct clk_hw *[]) { 925 + &clk_div[VC3_DIV1].hw, 926 + &clk_div[VC3_DIV3].hw 927 + }, 928 + .num_parents = 2, 929 + .flags = CLK_SET_RATE_PARENT 930 + } 931 + }, 932 + [VC3_SE3_MUX] = { 933 + .data = &(struct vc3_clk_data) { 934 + .offs = VC3_SE3_DIFF1_CTRL_REG, 935 + .bitmsk = VC3_SE3_DIFF1_CTRL_REG_SE3_CLK_SEL 936 + }, 937 + .hw.init = &(struct clk_init_data){ 938 + .name = "se3_mux", 939 + .ops = &vc3_clk_mux_ops, 940 + .parent_hws = (const struct clk_hw *[]) { 941 + &clk_div[VC3_DIV2].hw, 942 + &clk_div[VC3_DIV4].hw 943 + }, 944 + .num_parents = 2, 945 + .flags = CLK_SET_RATE_PARENT 946 + } 947 + }, 948 + [VC3_SE2_MUX] = { 949 + .data = &(struct vc3_clk_data) { 950 + .offs = VC3_SE2_CTRL_REG0, 951 + .bitmsk = VC3_SE2_CTRL_REG0_SE2_CLK_SEL 952 + }, 953 + .hw.init = &(struct clk_init_data){ 954 + .name = "se2_mux", 955 + .ops = &vc3_clk_mux_ops, 956 + .parent_hws = (const struct clk_hw *[]) { 957 + &clk_div[VC3_DIV5].hw, 958 + &clk_div[VC3_DIV4].hw 959 + }, 960 + .num_parents = 2, 961 + .flags = CLK_SET_RATE_PARENT 962 + } 963 + }, 964 + [VC3_SE1_MUX] = { 965 + .data = &(struct vc3_clk_data) { 966 + .offs = VC3_SE1_DIV4_CTRL, 967 + .bitmsk = VC3_SE1_DIV4_CTRL_SE1_CLK_SEL 968 + }, 969 + .hw.init = &(struct clk_init_data){ 970 + .name = "se1_mux", 971 + .ops = &vc3_clk_mux_ops, 972 + .parent_hws = (const struct clk_hw *[]) { 973 + &clk_div[VC3_DIV5].hw, 974 + &clk_div[VC3_DIV4].hw 975 + }, 976 + .num_parents = 2, 977 + .flags = CLK_SET_RATE_PARENT 978 + } 979 + } 980 + }; 981 + 982 + static struct clk_hw *vc3_of_clk_get(struct of_phandle_args *clkspec, 983 + void *data) 984 + { 985 + unsigned int idx = clkspec->args[0]; 986 + struct clk_hw **clkout_hw = data; 987 + 988 + if (idx >= ARRAY_SIZE(clk_out)) { 989 + pr_err("invalid clk index %u for provider %pOF\n", idx, clkspec->np); 990 + return ERR_PTR(-EINVAL); 991 + } 992 + 993 + return clkout_hw[idx]; 994 + } 995 + 996 + static int vc3_probe(struct i2c_client *client) 997 + { 998 + struct device *dev = &client->dev; 999 + u8 settings[NUM_CONFIG_REGISTERS]; 1000 + struct regmap *regmap; 1001 + const char *name; 1002 + int ret, i; 1003 + 1004 + regmap = devm_regmap_init_i2c(client, &vc3_regmap_config); 1005 + if (IS_ERR(regmap)) 1006 + return dev_err_probe(dev, PTR_ERR(regmap), 1007 + "failed to allocate register map\n"); 1008 + 1009 + ret = of_property_read_u8_array(dev->of_node, "renesas,settings", 1010 + settings, ARRAY_SIZE(settings)); 1011 + if (!ret) { 1012 + /* 1013 + * A raw settings array was specified in the DT. Write the 1014 + * settings to the device immediately. 1015 + */ 1016 + for (i = 0; i < NUM_CONFIG_REGISTERS; i++) { 1017 + ret = regmap_write(regmap, i, settings[i]); 1018 + if (ret) { 1019 + dev_err(dev, "error writing to chip (%i)\n", ret); 1020 + return ret; 1021 + } 1022 + } 1023 + } else if (ret == -EOVERFLOW) { 1024 + dev_err(&client->dev, "EOVERFLOW reg settings. ARRAY_SIZE: %zu\n", 1025 + ARRAY_SIZE(settings)); 1026 + return ret; 1027 + } 1028 + 1029 + /* Register pfd muxes */ 1030 + for (i = 0; i < ARRAY_SIZE(clk_pfd_mux); i++) { 1031 + clk_pfd_mux[i].regmap = regmap; 1032 + ret = devm_clk_hw_register(dev, &clk_pfd_mux[i].hw); 1033 + if (ret) 1034 + return dev_err_probe(dev, ret, "%s failed\n", 1035 + clk_pfd_mux[i].hw.init->name); 1036 + } 1037 + 1038 + /* Register pfd's */ 1039 + for (i = 0; i < ARRAY_SIZE(clk_pfd); i++) { 1040 + clk_pfd[i].regmap = regmap; 1041 + ret = devm_clk_hw_register(dev, &clk_pfd[i].hw); 1042 + if (ret) 1043 + return dev_err_probe(dev, ret, "%s failed\n", 1044 + clk_pfd[i].hw.init->name); 1045 + } 1046 + 1047 + /* Register pll's */ 1048 + for (i = 0; i < ARRAY_SIZE(clk_pll); i++) { 1049 + clk_pll[i].regmap = regmap; 1050 + ret = devm_clk_hw_register(dev, &clk_pll[i].hw); 1051 + if (ret) 1052 + return dev_err_probe(dev, ret, "%s failed\n", 1053 + clk_pll[i].hw.init->name); 1054 + } 1055 + 1056 + /* Register divider muxes */ 1057 + for (i = 0; i < ARRAY_SIZE(clk_div_mux); i++) { 1058 + clk_div_mux[i].regmap = regmap; 1059 + ret = devm_clk_hw_register(dev, &clk_div_mux[i].hw); 1060 + if (ret) 1061 + return dev_err_probe(dev, ret, "%s failed\n", 1062 + clk_div_mux[i].hw.init->name); 1063 + } 1064 + 1065 + /* Register dividers */ 1066 + for (i = 0; i < ARRAY_SIZE(clk_div); i++) { 1067 + clk_div[i].regmap = regmap; 1068 + ret = devm_clk_hw_register(dev, &clk_div[i].hw); 1069 + if (ret) 1070 + return dev_err_probe(dev, ret, "%s failed\n", 1071 + clk_div[i].hw.init->name); 1072 + } 1073 + 1074 + /* Register clk muxes */ 1075 + for (i = 0; i < ARRAY_SIZE(clk_mux); i++) { 1076 + clk_mux[i].regmap = regmap; 1077 + ret = devm_clk_hw_register(dev, &clk_mux[i].hw); 1078 + if (ret) 1079 + return dev_err_probe(dev, ret, "%s failed\n", 1080 + clk_mux[i].hw.init->name); 1081 + } 1082 + 1083 + /* Register clk outputs */ 1084 + for (i = 0; i < ARRAY_SIZE(clk_out); i++) { 1085 + switch (i) { 1086 + case VC3_DIFF2: 1087 + name = "diff2"; 1088 + break; 1089 + case VC3_DIFF1: 1090 + name = "diff1"; 1091 + break; 1092 + case VC3_SE3: 1093 + name = "se3"; 1094 + break; 1095 + case VC3_SE2: 1096 + name = "se2"; 1097 + break; 1098 + case VC3_SE1: 1099 + name = "se1"; 1100 + break; 1101 + case VC3_REF: 1102 + name = "ref"; 1103 + break; 1104 + default: 1105 + return dev_err_probe(dev, -EINVAL, "invalid clk output %d\n", i); 1106 + } 1107 + 1108 + if (i == VC3_REF) 1109 + clk_out[i] = devm_clk_hw_register_fixed_factor_index(dev, 1110 + name, 0, CLK_SET_RATE_PARENT, 1, 1); 1111 + else 1112 + clk_out[i] = devm_clk_hw_register_fixed_factor_parent_hw(dev, 1113 + name, &clk_mux[i].hw, CLK_SET_RATE_PARENT, 1, 1); 1114 + 1115 + if (IS_ERR(clk_out[i])) 1116 + return PTR_ERR(clk_out[i]); 1117 + } 1118 + 1119 + ret = devm_of_clk_add_hw_provider(dev, vc3_of_clk_get, clk_out); 1120 + if (ret) 1121 + return dev_err_probe(dev, ret, "unable to add clk provider\n"); 1122 + 1123 + return ret; 1124 + } 1125 + 1126 + static const struct of_device_id dev_ids[] = { 1127 + { .compatible = "renesas,5p35023" }, 1128 + { /* Sentinel */ } 1129 + }; 1130 + MODULE_DEVICE_TABLE(of, dev_ids); 1131 + 1132 + static struct i2c_driver vc3_driver = { 1133 + .driver = { 1134 + .name = "vc3", 1135 + .of_match_table = of_match_ptr(dev_ids), 1136 + }, 1137 + .probe = vc3_probe, 1138 + }; 1139 + module_i2c_driver(vc3_driver); 1140 + 1141 + MODULE_AUTHOR("Biju Das <biju.das.jz@bp.renesas.com>"); 1142 + MODULE_DESCRIPTION("Renesas VersaClock 3 driver"); 1143 + MODULE_LICENSE("GPL");
+1 -2
drivers/clk/clk-versaclock5.c
··· 19 19 #include <linux/mod_devicetable.h> 20 20 #include <linux/module.h> 21 21 #include <linux/of.h> 22 - #include <linux/of_platform.h> 23 22 #include <linux/property.h> 24 23 #include <linux/regmap.h> 25 24 #include <linux/slab.h> ··· 955 956 956 957 i2c_set_clientdata(client, vc5); 957 958 vc5->client = client; 958 - vc5->chip_info = device_get_match_data(&client->dev); 959 + vc5->chip_info = i2c_get_match_data(client); 959 960 960 961 vc5->pin_xin = devm_clk_get(&client->dev, "xin"); 961 962 if (PTR_ERR(vc5->pin_xin) == -EPROBE_DEFER)
+1 -2
drivers/clk/clk-versaclock7.c
··· 14 14 #include <linux/math64.h> 15 15 #include <linux/module.h> 16 16 #include <linux/of.h> 17 - #include <linux/of_platform.h> 18 17 #include <linux/property.h> 19 18 #include <linux/regmap.h> 20 19 #include <linux/swab.h> ··· 1108 1109 1109 1110 i2c_set_clientdata(client, vc7); 1110 1111 vc7->client = client; 1111 - vc7->chip_info = device_get_match_data(&client->dev); 1112 + vc7->chip_info = i2c_get_match_data(client); 1112 1113 1113 1114 vc7->pin_xin = devm_clk_get(&client->dev, "xin"); 1114 1115 if (PTR_ERR(vc7->pin_xin) == -EPROBE_DEFER) {
+1 -1
drivers/clk/hisilicon/clk-hi3559a.c
··· 9 9 10 10 #include <linux/clk-provider.h> 11 11 #include <linux/module.h> 12 - #include <linux/of_device.h> 12 + #include <linux/of.h> 13 13 #include <linux/platform_device.h> 14 14 #include <linux/slab.h> 15 15
-1
drivers/clk/hisilicon/clk-hi3620.c
··· 14 14 #include <linux/io.h> 15 15 #include <linux/of.h> 16 16 #include <linux/of_address.h> 17 - #include <linux/of_device.h> 18 17 #include <linux/slab.h> 19 18 20 19 #include <dt-bindings/clock/hi3620-clock.h>
+1 -1
drivers/clk/hisilicon/clk-hi3660.c
··· 6 6 7 7 #include <dt-bindings/clock/hi3660-clock.h> 8 8 #include <linux/clk-provider.h> 9 - #include <linux/of_device.h> 9 + #include <linux/of.h> 10 10 #include <linux/platform_device.h> 11 11 #include "clk.h" 12 12
+1 -1
drivers/clk/hisilicon/clk-hi3670.c
··· 9 9 10 10 #include <dt-bindings/clock/hi3670-clock.h> 11 11 #include <linux/clk-provider.h> 12 - #include <linux/of_device.h> 12 + #include <linux/of.h> 13 13 #include <linux/platform_device.h> 14 14 #include "clk.h" 15 15
+1 -1
drivers/clk/hisilicon/clk-hi6220-stub.c
··· 14 14 #include <linux/mfd/syscon.h> 15 15 #include <linux/mailbox_client.h> 16 16 #include <linux/of.h> 17 - #include <linux/of_device.h> 17 + #include <linux/platform_device.h> 18 18 #include <linux/regmap.h> 19 19 20 20 /* Stub clocks id */
-3
drivers/clk/hisilicon/clk-hi6220.c
··· 11 11 #include <linux/clk-provider.h> 12 12 #include <linux/clkdev.h> 13 13 #include <linux/io.h> 14 - #include <linux/of.h> 15 - #include <linux/of_address.h> 16 - #include <linux/of_device.h> 17 14 #include <linux/slab.h> 18 15 19 16 #include <dt-bindings/clock/hi6220-clock.h>
-3
drivers/clk/hisilicon/clk-hip04.c
··· 11 11 #include <linux/kernel.h> 12 12 #include <linux/clk-provider.h> 13 13 #include <linux/io.h> 14 - #include <linux/of.h> 15 - #include <linux/of_address.h> 16 - #include <linux/of_device.h> 17 14 #include <linux/slab.h> 18 15 19 16 #include <dt-bindings/clock/hip04-clock.h>
+1 -1
drivers/clk/hisilicon/clk.c
··· 16 16 #include <linux/io.h> 17 17 #include <linux/of.h> 18 18 #include <linux/of_address.h> 19 - #include <linux/of_device.h> 19 + #include <linux/platform_device.h> 20 20 #include <linux/slab.h> 21 21 22 22 #include "clk.h"
+1 -1
drivers/clk/hisilicon/crg-hi3516cv300.c
··· 8 8 #include <dt-bindings/clock/hi3516cv300-clock.h> 9 9 #include <linux/clk-provider.h> 10 10 #include <linux/module.h> 11 - #include <linux/of_device.h> 11 + #include <linux/of.h> 12 12 #include <linux/platform_device.h> 13 13 #include "clk.h" 14 14 #include "crg.h"
+1 -1
drivers/clk/hisilicon/crg-hi3798cv200.c
··· 8 8 #include <dt-bindings/clock/histb-clock.h> 9 9 #include <linux/clk-provider.h> 10 10 #include <linux/module.h> 11 - #include <linux/of_device.h> 11 + #include <linux/of.h> 12 12 #include <linux/platform_device.h> 13 13 #include "clk.h" 14 14 #include "crg.h"
+2 -1
drivers/clk/imx/Makefile
··· 32 32 33 33 obj-$(CONFIG_CLK_IMX93) += clk-imx93.o 34 34 35 - obj-$(CONFIG_MXC_CLK_SCU) += clk-imx-scu.o clk-imx-lpcg-scu.o 35 + obj-$(CONFIG_MXC_CLK_SCU) += clk-imx-scu.o clk-imx-lpcg-scu.o clk-imx-acm.o 36 36 clk-imx-scu-$(CONFIG_CLK_IMX8QXP) += clk-scu.o clk-imx8qxp.o \ 37 37 clk-imx8qxp-rsrc.o clk-imx8qm-rsrc.o \ 38 38 clk-imx8dxl-rsrc.o 39 39 clk-imx-lpcg-scu-$(CONFIG_CLK_IMX8QXP) += clk-lpcg-scu.o clk-imx8qxp-lpcg.o 40 + clk-imx-acm-$(CONFIG_CLK_IMX8QXP) = clk-imx8-acm.o 40 41 41 42 obj-$(CONFIG_CLK_IMX8ULP) += clk-imx8ulp.o 42 43
+7 -5
drivers/clk/imx/clk-composite-8m.c
··· 97 97 int prediv_value; 98 98 int div_value; 99 99 int ret; 100 - u32 val; 100 + u32 orig, val; 101 101 102 102 ret = imx8m_clk_composite_compute_dividers(rate, parent_rate, 103 103 &prediv_value, &div_value); ··· 106 106 107 107 spin_lock_irqsave(divider->lock, flags); 108 108 109 - val = readl(divider->reg); 110 - val &= ~((clk_div_mask(divider->width) << divider->shift) | 111 - (clk_div_mask(PCG_DIV_WIDTH) << PCG_DIV_SHIFT)); 109 + orig = readl(divider->reg); 110 + val = orig & ~((clk_div_mask(divider->width) << divider->shift) | 111 + (clk_div_mask(PCG_DIV_WIDTH) << PCG_DIV_SHIFT)); 112 112 113 113 val |= (u32)(prediv_value - 1) << divider->shift; 114 114 val |= (u32)(div_value - 1) << PCG_DIV_SHIFT; 115 - writel(val, divider->reg); 115 + 116 + if (val != orig) 117 + writel(val, divider->reg); 116 118 117 119 spin_unlock_irqrestore(divider->lock, flags); 118 120
+1
drivers/clk/imx/clk-fracn-gppll.c
··· 81 81 PLL_FRACN_GP(650000000U, 162, 50, 100, 0, 6), 82 82 PLL_FRACN_GP(594000000U, 198, 0, 1, 0, 8), 83 83 PLL_FRACN_GP(560000000U, 140, 0, 1, 0, 6), 84 + PLL_FRACN_GP(519750000U, 173, 25, 100, 1, 8), 84 85 PLL_FRACN_GP(498000000U, 166, 0, 1, 0, 8), 85 86 PLL_FRACN_GP(484000000U, 121, 0, 1, 0, 6), 86 87 PLL_FRACN_GP(445333333U, 167, 0, 1, 0, 9),
+1 -7
drivers/clk/imx/clk-gpr-mux.c
··· 65 65 return regmap_update_bits(priv->regmap, priv->reg, priv->mask, val); 66 66 } 67 67 68 - static int imx_clk_gpr_mux_determine_rate(struct clk_hw *hw, 69 - struct clk_rate_request *req) 70 - { 71 - return clk_mux_determine_rate_flags(hw, req, 0); 72 - } 73 - 74 68 static const struct clk_ops imx_clk_gpr_mux_ops = { 75 69 .get_parent = imx_clk_gpr_mux_get_parent, 76 70 .set_parent = imx_clk_gpr_mux_set_parent, 77 - .determine_rate = imx_clk_gpr_mux_determine_rate, 71 + .determine_rate = __clk_mux_determine_rate, 78 72 }; 79 73 80 74 struct clk_hw *imx_clk_gpr_mux(const char *name, const char *compatible,
+3 -2
drivers/clk/imx/clk-imx25.c
··· 13 13 #include <linux/of.h> 14 14 #include <linux/of_address.h> 15 15 #include <linux/of_irq.h> 16 + #include <soc/imx/revision.h> 16 17 17 18 #include "clk.h" 18 19 ··· 74 73 75 74 static struct clk *clk[clk_max]; 76 75 77 - static int __init __mx25_clocks_init(void __iomem *ccm_base) 76 + static void __init __mx25_clocks_init(void __iomem *ccm_base) 78 77 { 79 78 BUG_ON(!ccm_base); 80 79 ··· 221 220 222 221 imx_register_uart_clocks(); 223 222 224 - return 0; 223 + imx_print_silicon_rev("i.MX25", mx25_revision()); 225 224 } 226 225 227 226 static void __init mx25_clocks_init_dt(struct device_node *np)
+476
drivers/clk/imx/clk-imx8-acm.c
··· 1 + // SPDX-License-Identifier: GPL-2.0+ 2 + // 3 + // Copyright 2023 NXP 4 + // 5 + 6 + #include <dt-bindings/clock/imx8-clock.h> 7 + #include <linux/clk-provider.h> 8 + #include <linux/device.h> 9 + #include <linux/err.h> 10 + #include <linux/io.h> 11 + #include <linux/module.h> 12 + #include <linux/of.h> 13 + #include <linux/of_device.h> 14 + #include <linux/platform_device.h> 15 + #include <linux/pm_domain.h> 16 + #include <linux/pm_runtime.h> 17 + #include <linux/slab.h> 18 + 19 + #include "clk.h" 20 + 21 + /** 22 + * struct clk_imx_acm_pm_domains - structure for multi power domain 23 + * @pd_dev: power domain device 24 + * @pd_dev_link: power domain device link 25 + * @num_domains: power domain nummber 26 + */ 27 + struct clk_imx_acm_pm_domains { 28 + struct device **pd_dev; 29 + struct device_link **pd_dev_link; 30 + int num_domains; 31 + }; 32 + 33 + /** 34 + * struct clk_imx8_acm_sel - for clock mux 35 + * @name: clock name 36 + * @clkid: clock id 37 + * @parents: clock parents 38 + * @num_parents: clock parents number 39 + * @reg: register offset 40 + * @shift: bit shift in register 41 + * @width: bits width 42 + */ 43 + struct clk_imx8_acm_sel { 44 + const char *name; 45 + int clkid; 46 + const struct clk_parent_data *parents; /* For mux */ 47 + int num_parents; 48 + u32 reg; 49 + u8 shift; 50 + u8 width; 51 + }; 52 + 53 + /** 54 + * struct imx8_acm_soc_data - soc specific data 55 + * @sels: pointer to struct clk_imx8_acm_sel 56 + * @num_sels: numbers of items 57 + */ 58 + struct imx8_acm_soc_data { 59 + struct clk_imx8_acm_sel *sels; 60 + unsigned int num_sels; 61 + }; 62 + 63 + /** 64 + * struct imx8_acm_priv - private structure 65 + * @dev_pm: multi power domain 66 + * @soc_data: pointer to soc data 67 + * @reg: base address of registers 68 + * @regs: save registers for suspend 69 + */ 70 + struct imx8_acm_priv { 71 + struct clk_imx_acm_pm_domains dev_pm; 72 + const struct imx8_acm_soc_data *soc_data; 73 + void __iomem *reg; 74 + u32 regs[IMX_ADMA_ACM_CLK_END]; 75 + }; 76 + 77 + static const struct clk_parent_data imx8qm_aud_clk_sels[] = { 78 + { .fw_name = "aud_rec_clk0_lpcg_clk" }, 79 + { .fw_name = "aud_rec_clk1_lpcg_clk" }, 80 + { .fw_name = "mlb_clk" }, 81 + { .fw_name = "hdmi_rx_mclk" }, 82 + { .fw_name = "ext_aud_mclk0" }, 83 + { .fw_name = "ext_aud_mclk1" }, 84 + { .fw_name = "esai0_rx_clk" }, 85 + { .fw_name = "esai0_rx_hf_clk" }, 86 + { .fw_name = "esai0_tx_clk" }, 87 + { .fw_name = "esai0_tx_hf_clk" }, 88 + { .fw_name = "esai1_rx_clk" }, 89 + { .fw_name = "esai1_rx_hf_clk" }, 90 + { .fw_name = "esai1_tx_clk" }, 91 + { .fw_name = "esai1_tx_hf_clk" }, 92 + { .fw_name = "spdif0_rx" }, 93 + { .fw_name = "spdif1_rx" }, 94 + { .fw_name = "sai0_rx_bclk" }, 95 + { .fw_name = "sai0_tx_bclk" }, 96 + { .fw_name = "sai1_rx_bclk" }, 97 + { .fw_name = "sai1_tx_bclk" }, 98 + { .fw_name = "sai2_rx_bclk" }, 99 + { .fw_name = "sai3_rx_bclk" }, 100 + { .fw_name = "sai4_rx_bclk" }, 101 + }; 102 + 103 + static const struct clk_parent_data imx8qm_mclk_out_sels[] = { 104 + { .fw_name = "aud_rec_clk0_lpcg_clk" }, 105 + { .fw_name = "aud_rec_clk1_lpcg_clk" }, 106 + { .fw_name = "mlb_clk" }, 107 + { .fw_name = "hdmi_rx_mclk" }, 108 + { .fw_name = "spdif0_rx" }, 109 + { .fw_name = "spdif1_rx" }, 110 + { .fw_name = "sai4_rx_bclk" }, 111 + { .fw_name = "sai6_rx_bclk" }, 112 + }; 113 + 114 + static const struct clk_parent_data imx8qm_mclk_sels[] = { 115 + { .fw_name = "aud_pll_div_clk0_lpcg_clk" }, 116 + { .fw_name = "aud_pll_div_clk1_lpcg_clk" }, 117 + { .fw_name = "acm_aud_clk0_sel" }, 118 + { .fw_name = "acm_aud_clk1_sel" }, 119 + }; 120 + 121 + static const struct clk_parent_data imx8qm_asrc_mux_clk_sels[] = { 122 + { .fw_name = "sai4_rx_bclk" }, 123 + { .fw_name = "sai5_tx_bclk" }, 124 + { .index = -1 }, 125 + { .fw_name = "mlb_clk" }, 126 + 127 + }; 128 + 129 + static struct clk_imx8_acm_sel imx8qm_sels[] = { 130 + { "acm_aud_clk0_sel", IMX_ADMA_ACM_AUD_CLK0_SEL, imx8qm_aud_clk_sels, ARRAY_SIZE(imx8qm_aud_clk_sels), 0x000000, 0, 5 }, 131 + { "acm_aud_clk1_sel", IMX_ADMA_ACM_AUD_CLK1_SEL, imx8qm_aud_clk_sels, ARRAY_SIZE(imx8qm_aud_clk_sels), 0x010000, 0, 5 }, 132 + { "acm_mclkout0_sel", IMX_ADMA_ACM_MCLKOUT0_SEL, imx8qm_mclk_out_sels, ARRAY_SIZE(imx8qm_mclk_out_sels), 0x020000, 0, 3 }, 133 + { "acm_mclkout1_sel", IMX_ADMA_ACM_MCLKOUT1_SEL, imx8qm_mclk_out_sels, ARRAY_SIZE(imx8qm_mclk_out_sels), 0x030000, 0, 3 }, 134 + { "acm_asrc0_mclk_sel", IMX_ADMA_ACM_ASRC0_MUX_CLK_SEL, imx8qm_asrc_mux_clk_sels, ARRAY_SIZE(imx8qm_asrc_mux_clk_sels), 0x040000, 0, 2 }, 135 + { "acm_esai0_mclk_sel", IMX_ADMA_ACM_ESAI0_MCLK_SEL, imx8qm_mclk_sels, ARRAY_SIZE(imx8qm_mclk_sels), 0x060000, 0, 2 }, 136 + { "acm_esai1_mclk_sel", IMX_ADMA_ACM_ESAI1_MCLK_SEL, imx8qm_mclk_sels, ARRAY_SIZE(imx8qm_mclk_sels), 0x070000, 0, 2 }, 137 + { "acm_sai0_mclk_sel", IMX_ADMA_ACM_SAI0_MCLK_SEL, imx8qm_mclk_sels, ARRAY_SIZE(imx8qm_mclk_sels), 0x0E0000, 0, 2 }, 138 + { "acm_sai1_mclk_sel", IMX_ADMA_ACM_SAI1_MCLK_SEL, imx8qm_mclk_sels, ARRAY_SIZE(imx8qm_mclk_sels), 0x0F0000, 0, 2 }, 139 + { "acm_sai2_mclk_sel", IMX_ADMA_ACM_SAI2_MCLK_SEL, imx8qm_mclk_sels, ARRAY_SIZE(imx8qm_mclk_sels), 0x100000, 0, 2 }, 140 + { "acm_sai3_mclk_sel", IMX_ADMA_ACM_SAI3_MCLK_SEL, imx8qm_mclk_sels, ARRAY_SIZE(imx8qm_mclk_sels), 0x110000, 0, 2 }, 141 + { "acm_sai4_mclk_sel", IMX_ADMA_ACM_SAI4_MCLK_SEL, imx8qm_mclk_sels, ARRAY_SIZE(imx8qm_mclk_sels), 0x120000, 0, 2 }, 142 + { "acm_sai5_mclk_sel", IMX_ADMA_ACM_SAI5_MCLK_SEL, imx8qm_mclk_sels, ARRAY_SIZE(imx8qm_mclk_sels), 0x130000, 0, 2 }, 143 + { "acm_sai6_mclk_sel", IMX_ADMA_ACM_SAI6_MCLK_SEL, imx8qm_mclk_sels, ARRAY_SIZE(imx8qm_mclk_sels), 0x140000, 0, 2 }, 144 + { "acm_sai7_mclk_sel", IMX_ADMA_ACM_SAI7_MCLK_SEL, imx8qm_mclk_sels, ARRAY_SIZE(imx8qm_mclk_sels), 0x150000, 0, 2 }, 145 + { "acm_spdif0_mclk_sel", IMX_ADMA_ACM_SPDIF0_TX_CLK_SEL, imx8qm_mclk_sels, ARRAY_SIZE(imx8qm_mclk_sels), 0x1A0000, 0, 2 }, 146 + { "acm_spdif1_mclk_sel", IMX_ADMA_ACM_SPDIF1_TX_CLK_SEL, imx8qm_mclk_sels, ARRAY_SIZE(imx8qm_mclk_sels), 0x1B0000, 0, 2 }, 147 + { "acm_mqs_mclk_sel", IMX_ADMA_ACM_MQS_TX_CLK_SEL, imx8qm_mclk_sels, ARRAY_SIZE(imx8qm_mclk_sels), 0x1C0000, 0, 2 }, 148 + }; 149 + 150 + static const struct clk_parent_data imx8qxp_aud_clk_sels[] = { 151 + { .fw_name = "aud_rec_clk0_lpcg_clk" }, 152 + { .fw_name = "aud_rec_clk1_lpcg_clk" }, 153 + { .fw_name = "ext_aud_mclk0" }, 154 + { .fw_name = "ext_aud_mclk1" }, 155 + { .fw_name = "esai0_rx_clk" }, 156 + { .fw_name = "esai0_rx_hf_clk" }, 157 + { .fw_name = "esai0_tx_clk" }, 158 + { .fw_name = "esai0_tx_hf_clk" }, 159 + { .fw_name = "spdif0_rx" }, 160 + { .fw_name = "sai0_rx_bclk" }, 161 + { .fw_name = "sai0_tx_bclk" }, 162 + { .fw_name = "sai1_rx_bclk" }, 163 + { .fw_name = "sai1_tx_bclk" }, 164 + { .fw_name = "sai2_rx_bclk" }, 165 + { .fw_name = "sai3_rx_bclk" }, 166 + }; 167 + 168 + static const struct clk_parent_data imx8qxp_mclk_out_sels[] = { 169 + { .fw_name = "aud_rec_clk0_lpcg_clk" }, 170 + { .fw_name = "aud_rec_clk1_lpcg_clk" }, 171 + { .index = -1 }, 172 + { .index = -1 }, 173 + { .fw_name = "spdif0_rx" }, 174 + { .index = -1 }, 175 + { .index = -1 }, 176 + { .fw_name = "sai4_rx_bclk" }, 177 + }; 178 + 179 + static const struct clk_parent_data imx8qxp_mclk_sels[] = { 180 + { .fw_name = "aud_pll_div_clk0_lpcg_clk" }, 181 + { .fw_name = "aud_pll_div_clk1_lpcg_clk" }, 182 + { .fw_name = "acm_aud_clk0_sel" }, 183 + { .fw_name = "acm_aud_clk1_sel" }, 184 + }; 185 + 186 + static struct clk_imx8_acm_sel imx8qxp_sels[] = { 187 + { "acm_aud_clk0_sel", IMX_ADMA_ACM_AUD_CLK0_SEL, imx8qxp_aud_clk_sels, ARRAY_SIZE(imx8qxp_aud_clk_sels), 0x000000, 0, 5 }, 188 + { "acm_aud_clk1_sel", IMX_ADMA_ACM_AUD_CLK1_SEL, imx8qxp_aud_clk_sels, ARRAY_SIZE(imx8qxp_aud_clk_sels), 0x010000, 0, 5 }, 189 + { "acm_mclkout0_sel", IMX_ADMA_ACM_MCLKOUT0_SEL, imx8qxp_mclk_out_sels, ARRAY_SIZE(imx8qxp_mclk_out_sels), 0x020000, 0, 3 }, 190 + { "acm_mclkout1_sel", IMX_ADMA_ACM_MCLKOUT1_SEL, imx8qxp_mclk_out_sels, ARRAY_SIZE(imx8qxp_mclk_out_sels), 0x030000, 0, 3 }, 191 + { "acm_esai0_mclk_sel", IMX_ADMA_ACM_ESAI0_MCLK_SEL, imx8qxp_mclk_sels, ARRAY_SIZE(imx8qxp_mclk_sels), 0x060000, 0, 2 }, 192 + { "acm_sai0_mclk_sel", IMX_ADMA_ACM_SAI0_MCLK_SEL, imx8qxp_mclk_sels, ARRAY_SIZE(imx8qxp_mclk_sels), 0x0E0000, 0, 2 }, 193 + { "acm_sai1_mclk_sel", IMX_ADMA_ACM_SAI1_MCLK_SEL, imx8qxp_mclk_sels, ARRAY_SIZE(imx8qxp_mclk_sels), 0x0F0000, 0, 2 }, 194 + { "acm_sai2_mclk_sel", IMX_ADMA_ACM_SAI2_MCLK_SEL, imx8qxp_mclk_sels, ARRAY_SIZE(imx8qxp_mclk_sels), 0x100000, 0, 2 }, 195 + { "acm_sai3_mclk_sel", IMX_ADMA_ACM_SAI3_MCLK_SEL, imx8qxp_mclk_sels, ARRAY_SIZE(imx8qxp_mclk_sels), 0x110000, 0, 2 }, 196 + { "acm_sai4_mclk_sel", IMX_ADMA_ACM_SAI4_MCLK_SEL, imx8qxp_mclk_sels, ARRAY_SIZE(imx8qxp_mclk_sels), 0x140000, 0, 2 }, 197 + { "acm_sai5_mclk_sel", IMX_ADMA_ACM_SAI5_MCLK_SEL, imx8qxp_mclk_sels, ARRAY_SIZE(imx8qxp_mclk_sels), 0x150000, 0, 2 }, 198 + { "acm_spdif0_mclk_sel", IMX_ADMA_ACM_SPDIF0_TX_CLK_SEL, imx8qxp_mclk_sels, ARRAY_SIZE(imx8qxp_mclk_sels), 0x1A0000, 0, 2 }, 199 + { "acm_mqs_mclk_sel", IMX_ADMA_ACM_MQS_TX_CLK_SEL, imx8qxp_mclk_sels, ARRAY_SIZE(imx8qxp_mclk_sels), 0x1C0000, 0, 2 }, 200 + }; 201 + 202 + static const struct clk_parent_data imx8dxl_aud_clk_sels[] = { 203 + { .fw_name = "aud_rec_clk0_lpcg_clk" }, 204 + { .fw_name = "aud_rec_clk1_lpcg_clk" }, 205 + { .fw_name = "ext_aud_mclk0" }, 206 + { .fw_name = "ext_aud_mclk1" }, 207 + { .index = -1 }, 208 + { .index = -1 }, 209 + { .index = -1 }, 210 + { .index = -1 }, 211 + { .fw_name = "spdif0_rx" }, 212 + { .fw_name = "sai0_rx_bclk" }, 213 + { .fw_name = "sai0_tx_bclk" }, 214 + { .fw_name = "sai1_rx_bclk" }, 215 + { .fw_name = "sai1_tx_bclk" }, 216 + { .fw_name = "sai2_rx_bclk" }, 217 + { .fw_name = "sai3_rx_bclk" }, 218 + }; 219 + 220 + static const struct clk_parent_data imx8dxl_mclk_out_sels[] = { 221 + { .fw_name = "aud_rec_clk0_lpcg_clk" }, 222 + { .fw_name = "aud_rec_clk1_lpcg_clk" }, 223 + { .index = -1 }, 224 + { .index = -1 }, 225 + { .fw_name = "spdif0_rx" }, 226 + { .index = -1 }, 227 + { .index = -1 }, 228 + { .index = -1 }, 229 + }; 230 + 231 + static const struct clk_parent_data imx8dxl_mclk_sels[] = { 232 + { .fw_name = "aud_pll_div_clk0_lpcg_clk" }, 233 + { .fw_name = "aud_pll_div_clk1_lpcg_clk" }, 234 + { .fw_name = "acm_aud_clk0_sel" }, 235 + { .fw_name = "acm_aud_clk1_sel" }, 236 + }; 237 + 238 + static struct clk_imx8_acm_sel imx8dxl_sels[] = { 239 + { "acm_aud_clk0_sel", IMX_ADMA_ACM_AUD_CLK0_SEL, imx8dxl_aud_clk_sels, ARRAY_SIZE(imx8dxl_aud_clk_sels), 0x000000, 0, 5 }, 240 + { "acm_aud_clk1_sel", IMX_ADMA_ACM_AUD_CLK1_SEL, imx8dxl_aud_clk_sels, ARRAY_SIZE(imx8dxl_aud_clk_sels), 0x010000, 0, 5 }, 241 + { "acm_mclkout0_sel", IMX_ADMA_ACM_MCLKOUT0_SEL, imx8dxl_mclk_out_sels, ARRAY_SIZE(imx8dxl_mclk_out_sels), 0x020000, 0, 3 }, 242 + { "acm_mclkout1_sel", IMX_ADMA_ACM_MCLKOUT1_SEL, imx8dxl_mclk_out_sels, ARRAY_SIZE(imx8dxl_mclk_out_sels), 0x030000, 0, 3 }, 243 + { "acm_sai0_mclk_sel", IMX_ADMA_ACM_SAI0_MCLK_SEL, imx8dxl_mclk_sels, ARRAY_SIZE(imx8dxl_mclk_sels), 0x0E0000, 0, 2 }, 244 + { "acm_sai1_mclk_sel", IMX_ADMA_ACM_SAI1_MCLK_SEL, imx8dxl_mclk_sels, ARRAY_SIZE(imx8dxl_mclk_sels), 0x0F0000, 0, 2 }, 245 + { "acm_sai2_mclk_sel", IMX_ADMA_ACM_SAI2_MCLK_SEL, imx8dxl_mclk_sels, ARRAY_SIZE(imx8dxl_mclk_sels), 0x100000, 0, 2 }, 246 + { "acm_sai3_mclk_sel", IMX_ADMA_ACM_SAI3_MCLK_SEL, imx8dxl_mclk_sels, ARRAY_SIZE(imx8dxl_mclk_sels), 0x110000, 0, 2 }, 247 + { "acm_spdif0_mclk_sel", IMX_ADMA_ACM_SPDIF0_TX_CLK_SEL, imx8dxl_mclk_sels, ARRAY_SIZE(imx8dxl_mclk_sels), 0x1A0000, 0, 2 }, 248 + { "acm_mqs_mclk_sel", IMX_ADMA_ACM_MQS_TX_CLK_SEL, imx8dxl_mclk_sels, ARRAY_SIZE(imx8dxl_mclk_sels), 0x1C0000, 0, 2 }, 249 + }; 250 + 251 + /** 252 + * clk_imx_acm_attach_pm_domains: attach multi power domains 253 + * @dev: device pointer 254 + * @dev_pm: power domains for device 255 + */ 256 + static int clk_imx_acm_attach_pm_domains(struct device *dev, 257 + struct clk_imx_acm_pm_domains *dev_pm) 258 + { 259 + int ret; 260 + int i; 261 + 262 + dev_pm->num_domains = of_count_phandle_with_args(dev->of_node, "power-domains", 263 + "#power-domain-cells"); 264 + if (dev_pm->num_domains <= 1) 265 + return 0; 266 + 267 + dev_pm->pd_dev = devm_kmalloc_array(dev, dev_pm->num_domains, 268 + sizeof(*dev_pm->pd_dev), 269 + GFP_KERNEL); 270 + if (!dev_pm->pd_dev) 271 + return -ENOMEM; 272 + 273 + dev_pm->pd_dev_link = devm_kmalloc_array(dev, 274 + dev_pm->num_domains, 275 + sizeof(*dev_pm->pd_dev_link), 276 + GFP_KERNEL); 277 + if (!dev_pm->pd_dev_link) 278 + return -ENOMEM; 279 + 280 + for (i = 0; i < dev_pm->num_domains; i++) { 281 + dev_pm->pd_dev[i] = dev_pm_domain_attach_by_id(dev, i); 282 + if (IS_ERR(dev_pm->pd_dev[i])) 283 + return PTR_ERR(dev_pm->pd_dev[i]); 284 + 285 + dev_pm->pd_dev_link[i] = device_link_add(dev, 286 + dev_pm->pd_dev[i], 287 + DL_FLAG_STATELESS | 288 + DL_FLAG_PM_RUNTIME | 289 + DL_FLAG_RPM_ACTIVE); 290 + if (IS_ERR(dev_pm->pd_dev_link[i])) { 291 + dev_pm_domain_detach(dev_pm->pd_dev[i], false); 292 + ret = PTR_ERR(dev_pm->pd_dev_link[i]); 293 + goto detach_pm; 294 + } 295 + } 296 + return 0; 297 + 298 + detach_pm: 299 + while (--i >= 0) { 300 + device_link_del(dev_pm->pd_dev_link[i]); 301 + dev_pm_domain_detach(dev_pm->pd_dev[i], false); 302 + } 303 + return ret; 304 + } 305 + 306 + /** 307 + * clk_imx_acm_detach_pm_domains: detach multi power domains 308 + * @dev: deivice pointer 309 + * @dev_pm: multi power domain for device 310 + */ 311 + static int clk_imx_acm_detach_pm_domains(struct device *dev, 312 + struct clk_imx_acm_pm_domains *dev_pm) 313 + { 314 + int i; 315 + 316 + if (dev_pm->num_domains <= 1) 317 + return 0; 318 + 319 + for (i = 0; i < dev_pm->num_domains; i++) { 320 + device_link_del(dev_pm->pd_dev_link[i]); 321 + dev_pm_domain_detach(dev_pm->pd_dev[i], false); 322 + } 323 + 324 + return 0; 325 + } 326 + 327 + static int imx8_acm_clk_probe(struct platform_device *pdev) 328 + { 329 + struct clk_hw_onecell_data *clk_hw_data; 330 + struct device *dev = &pdev->dev; 331 + struct clk_imx8_acm_sel *sels; 332 + struct imx8_acm_priv *priv; 333 + struct clk_hw **hws; 334 + void __iomem *base; 335 + int ret; 336 + int i; 337 + 338 + base = devm_of_iomap(dev, dev->of_node, 0, NULL); 339 + if (WARN_ON(IS_ERR(base))) 340 + return PTR_ERR(base); 341 + 342 + priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); 343 + if (!priv) 344 + return -ENOMEM; 345 + 346 + priv->reg = base; 347 + priv->soc_data = of_device_get_match_data(dev); 348 + platform_set_drvdata(pdev, priv); 349 + 350 + clk_hw_data = devm_kzalloc(&pdev->dev, struct_size(clk_hw_data, hws, IMX_ADMA_ACM_CLK_END), 351 + GFP_KERNEL); 352 + if (!clk_hw_data) 353 + return -ENOMEM; 354 + 355 + clk_hw_data->num = IMX_ADMA_ACM_CLK_END; 356 + hws = clk_hw_data->hws; 357 + 358 + ret = clk_imx_acm_attach_pm_domains(&pdev->dev, &priv->dev_pm); 359 + if (ret) 360 + return ret; 361 + 362 + pm_runtime_enable(&pdev->dev); 363 + pm_runtime_get_sync(&pdev->dev); 364 + 365 + sels = priv->soc_data->sels; 366 + for (i = 0; i < priv->soc_data->num_sels; i++) { 367 + hws[sels[i].clkid] = devm_clk_hw_register_mux_parent_data_table(dev, 368 + sels[i].name, sels[i].parents, 369 + sels[i].num_parents, 0, 370 + base + sels[i].reg, 371 + sels[i].shift, sels[i].width, 372 + 0, NULL, NULL); 373 + if (IS_ERR(hws[sels[i].clkid])) { 374 + pm_runtime_disable(&pdev->dev); 375 + goto err_clk_register; 376 + } 377 + } 378 + 379 + imx_check_clk_hws(hws, IMX_ADMA_ACM_CLK_END); 380 + 381 + ret = devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, clk_hw_data); 382 + if (ret < 0) { 383 + dev_err(dev, "failed to register hws for ACM\n"); 384 + pm_runtime_disable(&pdev->dev); 385 + } 386 + 387 + err_clk_register: 388 + 389 + pm_runtime_put_sync(&pdev->dev); 390 + 391 + return ret; 392 + } 393 + 394 + static int imx8_acm_clk_remove(struct platform_device *pdev) 395 + { 396 + struct imx8_acm_priv *priv = dev_get_drvdata(&pdev->dev); 397 + 398 + pm_runtime_disable(&pdev->dev); 399 + 400 + clk_imx_acm_detach_pm_domains(&pdev->dev, &priv->dev_pm); 401 + 402 + return 0; 403 + } 404 + 405 + static const struct imx8_acm_soc_data imx8qm_acm_data = { 406 + .sels = imx8qm_sels, 407 + .num_sels = ARRAY_SIZE(imx8qm_sels), 408 + }; 409 + 410 + static const struct imx8_acm_soc_data imx8qxp_acm_data = { 411 + .sels = imx8qxp_sels, 412 + .num_sels = ARRAY_SIZE(imx8qxp_sels), 413 + }; 414 + 415 + static const struct imx8_acm_soc_data imx8dxl_acm_data = { 416 + .sels = imx8dxl_sels, 417 + .num_sels = ARRAY_SIZE(imx8dxl_sels), 418 + }; 419 + 420 + static const struct of_device_id imx8_acm_match[] = { 421 + { .compatible = "fsl,imx8qm-acm", .data = &imx8qm_acm_data }, 422 + { .compatible = "fsl,imx8qxp-acm", .data = &imx8qxp_acm_data }, 423 + { .compatible = "fsl,imx8dxl-acm", .data = &imx8dxl_acm_data }, 424 + { /* sentinel */ } 425 + }; 426 + MODULE_DEVICE_TABLE(of, imx8_acm_match); 427 + 428 + static int __maybe_unused imx8_acm_runtime_suspend(struct device *dev) 429 + { 430 + struct imx8_acm_priv *priv = dev_get_drvdata(dev); 431 + struct clk_imx8_acm_sel *sels; 432 + int i; 433 + 434 + sels = priv->soc_data->sels; 435 + 436 + for (i = 0; i < priv->soc_data->num_sels; i++) 437 + priv->regs[i] = readl_relaxed(priv->reg + sels[i].reg); 438 + 439 + return 0; 440 + } 441 + 442 + static int __maybe_unused imx8_acm_runtime_resume(struct device *dev) 443 + { 444 + struct imx8_acm_priv *priv = dev_get_drvdata(dev); 445 + struct clk_imx8_acm_sel *sels; 446 + int i; 447 + 448 + sels = priv->soc_data->sels; 449 + 450 + for (i = 0; i < priv->soc_data->num_sels; i++) 451 + writel_relaxed(priv->regs[i], priv->reg + sels[i].reg); 452 + 453 + return 0; 454 + } 455 + 456 + static const struct dev_pm_ops imx8_acm_pm_ops = { 457 + SET_RUNTIME_PM_OPS(imx8_acm_runtime_suspend, 458 + imx8_acm_runtime_resume, NULL) 459 + SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, 460 + pm_runtime_force_resume) 461 + }; 462 + 463 + static struct platform_driver imx8_acm_clk_driver = { 464 + .driver = { 465 + .name = "imx8-acm", 466 + .of_match_table = imx8_acm_match, 467 + .pm = &imx8_acm_pm_ops, 468 + }, 469 + .probe = imx8_acm_clk_probe, 470 + .remove = imx8_acm_clk_remove, 471 + }; 472 + module_platform_driver(imx8_acm_clk_driver); 473 + 474 + MODULE_AUTHOR("Shengjiu Wang <shengjiu.wang@nxp.com>"); 475 + MODULE_DESCRIPTION("Freescale i.MX8 Audio Clock Mux driver"); 476 + MODULE_LICENSE("GPL");
-5
drivers/clk/imx/clk-imx8mp.c
··· 178 178 "video_pll1_out", "sys_pll1_133m", "osc_hdmi", 179 179 "clk_ext3", "clk_ext4", }; 180 180 181 - static const char * const imx8mp_sai4_sels[] = {"osc_24m", "audio_pll1_out", "audio_pll2_out", 182 - "video_pll1_out", "sys_pll1_133m", "osc_hdmi", 183 - "clk_ext1", "clk_ext2", }; 184 - 185 181 static const char * const imx8mp_sai5_sels[] = {"osc_24m", "audio_pll1_out", "audio_pll2_out", 186 182 "video_pll1_out", "sys_pll1_133m", "osc_hdmi", 187 183 "clk_ext2", "clk_ext3", }; ··· 563 567 hws[IMX8MP_CLK_SAI1] = imx8m_clk_hw_composite("sai1", imx8mp_sai1_sels, ccm_base + 0xa580); 564 568 hws[IMX8MP_CLK_SAI2] = imx8m_clk_hw_composite("sai2", imx8mp_sai2_sels, ccm_base + 0xa600); 565 569 hws[IMX8MP_CLK_SAI3] = imx8m_clk_hw_composite("sai3", imx8mp_sai3_sels, ccm_base + 0xa680); 566 - hws[IMX8MP_CLK_SAI4] = imx8m_clk_hw_composite("sai4", imx8mp_sai4_sels, ccm_base + 0xa700); 567 570 hws[IMX8MP_CLK_SAI5] = imx8m_clk_hw_composite("sai5", imx8mp_sai5_sels, ccm_base + 0xa780); 568 571 hws[IMX8MP_CLK_SAI6] = imx8m_clk_hw_composite("sai6", imx8mp_sai6_sels, ccm_base + 0xa800); 569 572 hws[IMX8MP_CLK_ENET_QOS] = imx8m_clk_hw_composite("enet_qos", imx8mp_enet_qos_sels, ccm_base + 0xa880);
+1 -5
drivers/clk/imx/clk-imx8qxp-lpcg.c
··· 9 9 #include <linux/io.h> 10 10 #include <linux/module.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_address.h> 13 - #include <linux/of_device.h> 14 12 #include <linux/platform_device.h> 15 13 #include <linux/pm_runtime.h> 16 14 #include <linux/slab.h> ··· 181 183 unsigned int bit_offset[IMX_LPCG_MAX_CLKS]; 182 184 struct clk_hw_onecell_data *clk_data; 183 185 struct clk_hw **clk_hws; 184 - struct resource *res; 185 186 void __iomem *base; 186 187 int count; 187 188 int idx; ··· 190 193 if (!of_device_is_compatible(np, "fsl,imx8qxp-lpcg")) 191 194 return -EINVAL; 192 195 193 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 194 - base = devm_ioremap_resource(&pdev->dev, res); 196 + base = devm_platform_ioremap_resource(pdev, 0); 195 197 if (IS_ERR(base)) 196 198 return PTR_ERR(base); 197 199
-1
drivers/clk/imx/clk-imx8qxp.c
··· 9 9 #include <linux/io.h> 10 10 #include <linux/module.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/platform_device.h> 14 13 #include <linux/slab.h> 15 14
+2 -2
drivers/clk/imx/clk-imx8ulp.c
··· 7 7 #include <linux/err.h> 8 8 #include <linux/io.h> 9 9 #include <linux/module.h> 10 - #include <linux/of_device.h> 10 + #include <linux/of.h> 11 11 #include <linux/platform_device.h> 12 12 #include <linux/reset-controller.h> 13 13 #include <linux/slab.h> ··· 167 167 clks[IMX8ULP_CLK_SPLL2_PRE_SEL] = imx_clk_hw_mux_flags("spll2_pre_sel", base + 0x510, 0, 1, pll_pre_sels, ARRAY_SIZE(pll_pre_sels), CLK_SET_PARENT_GATE); 168 168 clks[IMX8ULP_CLK_SPLL3_PRE_SEL] = imx_clk_hw_mux_flags("spll3_pre_sel", base + 0x610, 0, 1, pll_pre_sels, ARRAY_SIZE(pll_pre_sels), CLK_SET_PARENT_GATE); 169 169 170 - clks[IMX8ULP_CLK_SPLL2] = imx_clk_hw_pllv4(IMX_PLLV4_IMX8ULP, "spll2", "spll2_pre_sel", base + 0x500); 170 + clks[IMX8ULP_CLK_SPLL2] = imx_clk_hw_pllv4(IMX_PLLV4_IMX8ULP_1GHZ, "spll2", "spll2_pre_sel", base + 0x500); 171 171 clks[IMX8ULP_CLK_SPLL3] = imx_clk_hw_pllv4(IMX_PLLV4_IMX8ULP, "spll3", "spll3_pre_sel", base + 0x600); 172 172 clks[IMX8ULP_CLK_SPLL3_VCODIV] = imx_clk_hw_divider("spll3_vcodiv", "spll3", base + 0x604, 0, 6); 173 173
+3 -1
drivers/clk/imx/clk-imx93.c
··· 32 32 static u32 share_count_sai2; 33 33 static u32 share_count_sai3; 34 34 static u32 share_count_mub; 35 + static u32 share_count_pdm; 35 36 36 37 static const char * const a55_core_sels[] = {"a55_alt", "arm_pll"}; 37 38 static const char *parent_names[MAX_SEL][4] = { ··· 237 236 { IMX93_CLK_USB_CONTROLLER_GATE, "usb_controller", "hsio_root", 0x9a00, }, 238 237 { IMX93_CLK_USB_TEST_60M_GATE, "usb_test_60m", "hsio_usb_test_60m_root", 0x9a40, }, 239 238 { IMX93_CLK_HSIO_TROUT_24M_GATE, "hsio_trout_24m", "osc_24m", 0x9a80, }, 240 - { IMX93_CLK_PDM_GATE, "pdm", "pdm_root", 0x9ac0, }, 239 + { IMX93_CLK_PDM_GATE, "pdm", "pdm_root", 0x9ac0, 0, &share_count_pdm}, 240 + { IMX93_CLK_PDM_IPG, "pdm_ipg_clk", "bus_aon_root", 0x9ac0, 0, &share_count_pdm}, 241 241 { IMX93_CLK_MQS1_GATE, "mqs1", "sai1_root", 0x9b00, }, 242 242 { IMX93_CLK_MQS2_GATE, "mqs2", "sai3_root", 0x9b40, }, 243 243 { IMX93_CLK_AUD_XCVR_GATE, "aud_xcvr", "audio_xcvr_root", 0x9b80, },
+5 -8
drivers/clk/imx/clk-pll14xx.c
··· 64 64 PLL_1443X_RATE(650000000U, 325, 3, 2, 0), 65 65 PLL_1443X_RATE(594000000U, 198, 2, 2, 0), 66 66 PLL_1443X_RATE(519750000U, 173, 2, 2, 16384), 67 - PLL_1443X_RATE(393216000U, 262, 2, 3, 9437), 68 - PLL_1443X_RATE(361267200U, 361, 3, 3, 17511), 69 67 }; 70 68 71 69 struct imx_pll14xx_clk imx_1443x_pll = { ··· 137 139 /* 138 140 * Fractional PLL constrains: 139 141 * 140 - * a) 6MHz <= prate <= 25MHz 141 - * b) 1 <= p <= 63 (1 <= p <= 4 prate = 24MHz) 142 - * c) 64 <= m <= 1023 143 - * d) 0 <= s <= 6 144 - * e) -32768 <= k <= 32767 142 + * a) 1 <= p <= 63 143 + * b) 64 <= m <= 1023 144 + * c) 0 <= s <= 6 145 + * d) -32768 <= k <= 32767 145 146 * 146 147 * fvco = (m * 65536 + k) * prate / (p * 65536) 147 148 */ ··· 183 186 } 184 187 185 188 /* Finally calculate best values */ 186 - for (pdiv = 1; pdiv <= 7; pdiv++) { 189 + for (pdiv = 1; pdiv <= 63; pdiv++) { 187 190 for (sdiv = 0; sdiv <= 6; sdiv++) { 188 191 /* calc mdiv = round(rate * pdiv * 2^sdiv) / prate) */ 189 192 mdiv = DIV_ROUND_CLOSEST(rate * (pdiv << sdiv), prate);
+35 -9
drivers/clk/imx/clk-pllv4.c
··· 44 44 u32 cfg_offset; 45 45 u32 num_offset; 46 46 u32 denom_offset; 47 + bool use_mult_range; 47 48 }; 48 49 49 50 /* Valid PLL MULT Table */ 50 51 static const int pllv4_mult_table[] = {33, 27, 22, 20, 17, 16}; 52 + 53 + /* Valid PLL MULT range, (max, min) */ 54 + static const int pllv4_mult_range[] = {54, 27}; 51 55 52 56 #define to_clk_pllv4(__hw) container_of(__hw, struct clk_pllv4, hw) 53 57 ··· 98 94 static long clk_pllv4_round_rate(struct clk_hw *hw, unsigned long rate, 99 95 unsigned long *prate) 100 96 { 97 + struct clk_pllv4 *pll = to_clk_pllv4(hw); 101 98 unsigned long parent_rate = *prate; 102 99 unsigned long round_rate, i; 103 100 u32 mfn, mfd = DEFAULT_MFD; 104 101 bool found = false; 105 102 u64 temp64; 103 + u32 mult; 106 104 107 - for (i = 0; i < ARRAY_SIZE(pllv4_mult_table); i++) { 108 - round_rate = parent_rate * pllv4_mult_table[i]; 109 - if (rate >= round_rate) { 105 + if (pll->use_mult_range) { 106 + temp64 = (u64)rate; 107 + do_div(temp64, parent_rate); 108 + mult = temp64; 109 + if (mult >= pllv4_mult_range[1] && 110 + mult <= pllv4_mult_range[0]) { 111 + round_rate = parent_rate * mult; 110 112 found = true; 111 - break; 113 + } 114 + } else { 115 + for (i = 0; i < ARRAY_SIZE(pllv4_mult_table); i++) { 116 + round_rate = parent_rate * pllv4_mult_table[i]; 117 + if (rate >= round_rate) { 118 + found = true; 119 + break; 120 + } 112 121 } 113 122 } 114 123 ··· 155 138 return round_rate + (u32)temp64; 156 139 } 157 140 158 - static bool clk_pllv4_is_valid_mult(unsigned int mult) 141 + static bool clk_pllv4_is_valid_mult(struct clk_pllv4 *pll, unsigned int mult) 159 142 { 160 143 int i; 161 144 162 145 /* check if mult is in valid MULT table */ 163 - for (i = 0; i < ARRAY_SIZE(pllv4_mult_table); i++) { 164 - if (pllv4_mult_table[i] == mult) 146 + if (pll->use_mult_range) { 147 + if (mult >= pllv4_mult_range[1] && 148 + mult <= pllv4_mult_range[0]) 165 149 return true; 150 + } else { 151 + for (i = 0; i < ARRAY_SIZE(pllv4_mult_table); i++) { 152 + if (pllv4_mult_table[i] == mult) 153 + return true; 154 + } 166 155 } 167 156 168 157 return false; ··· 183 160 184 161 mult = rate / parent_rate; 185 162 186 - if (!clk_pllv4_is_valid_mult(mult)) 163 + if (!clk_pllv4_is_valid_mult(pll, mult)) 187 164 return -EINVAL; 188 165 189 166 if (parent_rate <= MAX_MFD) ··· 250 227 251 228 pll->base = base; 252 229 253 - if (type == IMX_PLLV4_IMX8ULP) { 230 + if (type == IMX_PLLV4_IMX8ULP || 231 + type == IMX_PLLV4_IMX8ULP_1GHZ) { 254 232 pll->cfg_offset = IMX8ULP_PLL_CFG_OFFSET; 255 233 pll->num_offset = IMX8ULP_PLL_NUM_OFFSET; 256 234 pll->denom_offset = IMX8ULP_PLL_DENOM_OFFSET; 235 + if (type == IMX_PLLV4_IMX8ULP_1GHZ) 236 + pll->use_mult_range = true; 257 237 } else { 258 238 pll->cfg_offset = PLL_CFG_OFFSET; 259 239 pll->num_offset = PLL_NUM_OFFSET;
+1 -1
drivers/clk/imx/clk-scu.c
··· 9 9 #include <linux/bsearch.h> 10 10 #include <linux/clk-provider.h> 11 11 #include <linux/err.h> 12 - #include <linux/of_platform.h> 12 + #include <linux/of.h> 13 13 #include <linux/platform_device.h> 14 14 #include <linux/pm_domain.h> 15 15 #include <linux/pm_runtime.h>
+1
drivers/clk/imx/clk.h
··· 45 45 enum imx_pllv4_type { 46 46 IMX_PLLV4_IMX7ULP, 47 47 IMX_PLLV4_IMX8ULP, 48 + IMX_PLLV4_IMX8ULP_1GHZ, 48 49 }; 49 50 50 51 enum imx_pfdv2_type {
+1 -1
drivers/clk/keystone/pll.c
··· 209 209 } 210 210 211 211 clk = clk_register_pll(NULL, node->name, parent_name, pll_data); 212 - if (clk) { 212 + if (!IS_ERR_OR_NULL(clk)) { 213 213 of_clk_add_provider(node, of_clk_src_simple_get, clk); 214 214 return; 215 215 }
+1 -2
drivers/clk/keystone/sci-clk.c
··· 9 9 #include <linux/err.h> 10 10 #include <linux/io.h> 11 11 #include <linux/module.h> 12 - #include <linux/of_address.h> 13 - #include <linux/of_device.h> 12 + #include <linux/of.h> 14 13 #include <linux/platform_device.h> 15 14 #include <linux/slab.h> 16 15 #include <linux/soc/ti/ti_sci_protocol.h>
+1 -1
drivers/clk/mediatek/clk-mt2701-aud.c
··· 7 7 #include <linux/clk-provider.h> 8 8 #include <linux/of.h> 9 9 #include <linux/of_address.h> 10 - #include <linux/of_device.h> 10 + #include <linux/of_platform.h> 11 11 #include <linux/platform_device.h> 12 12 13 13 #include "clk-mtk.h"
+1 -3
drivers/clk/mediatek/clk-mt2701-g3d.c
··· 6 6 */ 7 7 8 8 #include <linux/clk-provider.h> 9 - #include <linux/of.h> 10 - #include <linux/of_address.h> 11 - #include <linux/of_device.h> 9 + #include <linux/mod_devicetable.h> 12 10 #include <linux/platform_device.h> 13 11 14 12 #include "clk-mtk.h"
+3 -7
drivers/clk/mediatek/clk-mt2701.c
··· 5 5 */ 6 6 7 7 #include <linux/clk-provider.h> 8 - #include <linux/of.h> 9 - #include <linux/of_address.h> 10 - #include <linux/of_device.h> 8 + #include <linux/mod_devicetable.h> 11 9 #include <linux/platform_device.h> 12 10 13 11 #include "clk-cpumux.h" ··· 661 663 struct clk_hw_onecell_data *clk_data; 662 664 void __iomem *base; 663 665 struct device_node *node = pdev->dev.of_node; 664 - struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 665 666 666 - base = devm_ioremap_resource(&pdev->dev, res); 667 + base = devm_platform_ioremap_resource(pdev, 0); 667 668 if (IS_ERR(base)) 668 669 return PTR_ERR(base); 669 670 ··· 884 887 void __iomem *base; 885 888 int r; 886 889 struct device_node *node = pdev->dev.of_node; 887 - struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 888 890 889 - base = devm_ioremap_resource(&pdev->dev, res); 891 + base = devm_platform_ioremap_resource(pdev, 0); 890 892 if (IS_ERR(base)) 891 893 return PTR_ERR(base); 892 894
+1 -3
drivers/clk/mediatek/clk-mt2712.c
··· 7 7 #include <linux/clk.h> 8 8 #include <linux/delay.h> 9 9 #include <linux/mfd/syscon.h> 10 - #include <linux/of.h> 11 - #include <linux/of_address.h> 12 - #include <linux/of_device.h> 10 + #include <linux/mod_devicetable.h> 13 11 #include <linux/platform_device.h> 14 12 #include <linux/slab.h> 15 13
+7 -16
drivers/clk/mediatek/clk-mt6765.c
··· 9 9 #include <linux/of_address.h> 10 10 #include <linux/slab.h> 11 11 #include <linux/mfd/syscon.h> 12 - #include <linux/of_device.h> 12 + #include <linux/mod_devicetable.h> 13 13 #include <linux/platform_device.h> 14 14 15 15 #include "clk-gate.h" ··· 731 731 int r; 732 732 struct device_node *node = pdev->dev.of_node; 733 733 void __iomem *base; 734 - struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 735 734 736 - base = devm_ioremap_resource(&pdev->dev, res); 737 - if (IS_ERR(base)) { 738 - pr_err("%s(): ioremap failed\n", __func__); 735 + base = devm_platform_ioremap_resource(pdev, 0); 736 + if (IS_ERR(base)) 739 737 return PTR_ERR(base); 740 - } 741 738 742 739 clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK); 743 740 ··· 763 766 struct device_node *node = pdev->dev.of_node; 764 767 void __iomem *base; 765 768 struct clk_hw_onecell_data *clk_data; 766 - struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 767 769 768 - base = devm_ioremap_resource(&pdev->dev, res); 769 - if (IS_ERR(base)) { 770 - pr_err("%s(): ioremap failed\n", __func__); 770 + base = devm_platform_ioremap_resource(pdev, 0); 771 + if (IS_ERR(base)) 771 772 return PTR_ERR(base); 772 - } 773 773 774 774 clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK); 775 775 ··· 801 807 int r; 802 808 struct device_node *node = pdev->dev.of_node; 803 809 void __iomem *base; 804 - struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 805 810 806 - base = devm_ioremap_resource(&pdev->dev, res); 807 - if (IS_ERR(base)) { 808 - pr_err("%s(): ioremap failed\n", __func__); 811 + base = devm_platform_ioremap_resource(pdev, 0); 812 + if (IS_ERR(base)) 809 813 return PTR_ERR(base); 810 - } 811 814 812 815 clk_data = mtk_alloc_clk_data(CLK_IFR_NR_CLK); 813 816
+1 -3
drivers/clk/mediatek/clk-mt6779-aud.c
··· 6 6 7 7 #include <linux/module.h> 8 8 #include <linux/clk-provider.h> 9 - #include <linux/of.h> 10 - #include <linux/of_address.h> 11 - #include <linux/of_device.h> 9 + #include <linux/mod_devicetable.h> 12 10 #include <linux/platform_device.h> 13 11 14 12 #include "clk-mtk.h"
-2
drivers/clk/mediatek/clk-mt6779.c
··· 6 6 7 7 #include <linux/module.h> 8 8 #include <linux/of.h> 9 - #include <linux/of_address.h> 10 - #include <linux/of_device.h> 11 9 #include <linux/platform_device.h> 12 10 13 11 #include "clk-gate.h"
-2
drivers/clk/mediatek/clk-mt6797.c
··· 5 5 */ 6 6 7 7 #include <linux/of.h> 8 - #include <linux/of_address.h> 9 - #include <linux/of_device.h> 10 8 #include <linux/platform_device.h> 11 9 12 10 #include "clk-gate.h"
+1 -1
drivers/clk/mediatek/clk-mt7622-aud.c
··· 8 8 #include <linux/clk-provider.h> 9 9 #include <linux/of.h> 10 10 #include <linux/of_address.h> 11 - #include <linux/of_device.h> 11 + #include <linux/of_platform.h> 12 12 #include <linux/platform_device.h> 13 13 14 14 #include "clk-mtk.h"
+1 -3
drivers/clk/mediatek/clk-mt7622-eth.c
··· 6 6 */ 7 7 8 8 #include <linux/clk-provider.h> 9 - #include <linux/of.h> 10 - #include <linux/of_address.h> 11 - #include <linux/of_device.h> 9 + #include <linux/mod_devicetable.h> 12 10 #include <linux/platform_device.h> 13 11 14 12 #include "clk-mtk.h"
+1 -3
drivers/clk/mediatek/clk-mt7622-hif.c
··· 6 6 */ 7 7 8 8 #include <linux/clk-provider.h> 9 - #include <linux/of.h> 10 - #include <linux/of_address.h> 11 - #include <linux/of_device.h> 9 + #include <linux/mod_devicetable.h> 12 10 #include <linux/platform_device.h> 13 11 14 12 #include "clk-mtk.h"
+1 -3
drivers/clk/mediatek/clk-mt7622.c
··· 6 6 */ 7 7 8 8 #include <linux/clk-provider.h> 9 - #include <linux/of.h> 10 - #include <linux/of_address.h> 11 - #include <linux/of_device.h> 9 + #include <linux/mod_devicetable.h> 12 10 #include <linux/platform_device.h> 13 11 14 12 #include "clk-cpumux.h"
-2
drivers/clk/mediatek/clk-mt7629-eth.c
··· 7 7 8 8 #include <linux/clk-provider.h> 9 9 #include <linux/of.h> 10 - #include <linux/of_address.h> 11 - #include <linux/of_device.h> 12 10 #include <linux/platform_device.h> 13 11 14 12 #include "clk-mtk.h"
+1 -3
drivers/clk/mediatek/clk-mt7629-hif.c
··· 6 6 */ 7 7 8 8 #include <linux/clk-provider.h> 9 - #include <linux/of.h> 10 - #include <linux/of_address.h> 11 - #include <linux/of_device.h> 9 + #include <linux/mod_devicetable.h> 12 10 #include <linux/platform_device.h> 13 11 14 12 #include "clk-mtk.h"
-2
drivers/clk/mediatek/clk-mt7629.c
··· 8 8 #include <linux/clk.h> 9 9 #include <linux/clk-provider.h> 10 10 #include <linux/of.h> 11 - #include <linux/of_address.h> 12 - #include <linux/of_device.h> 13 11 #include <linux/platform_device.h> 14 12 15 13 #include "clk-cpumux.h"
+1 -3
drivers/clk/mediatek/clk-mt7981-apmixed.c
··· 8 8 */ 9 9 10 10 #include <linux/clk-provider.h> 11 - #include <linux/of.h> 12 - #include <linux/of_address.h> 13 - #include <linux/of_device.h> 11 + #include <linux/mod_devicetable.h> 14 12 #include <linux/platform_device.h> 15 13 16 14 #include "clk-gate.h"
+1 -3
drivers/clk/mediatek/clk-mt7981-eth.c
··· 8 8 */ 9 9 10 10 #include <linux/clk-provider.h> 11 - #include <linux/of.h> 12 - #include <linux/of_address.h> 13 - #include <linux/of_device.h> 11 + #include <linux/mod_devicetable.h> 14 12 #include <linux/platform_device.h> 15 13 16 14 #include "clk-mtk.h"
+1 -3
drivers/clk/mediatek/clk-mt7981-infracfg.c
··· 8 8 */ 9 9 10 10 #include <linux/clk-provider.h> 11 - #include <linux/of.h> 12 - #include <linux/of_address.h> 13 - #include <linux/of_device.h> 11 + #include <linux/mod_devicetable.h> 14 12 #include <linux/platform_device.h> 15 13 #include "clk-mtk.h" 16 14 #include "clk-gate.h"
+1 -3
drivers/clk/mediatek/clk-mt7981-topckgen.c
··· 8 8 9 9 10 10 #include <linux/clk-provider.h> 11 - #include <linux/of.h> 12 - #include <linux/of_address.h> 13 - #include <linux/of_device.h> 11 + #include <linux/mod_devicetable.h> 14 12 #include <linux/platform_device.h> 15 13 #include "clk-mtk.h" 16 14 #include "clk-gate.h"
+1 -3
drivers/clk/mediatek/clk-mt7986-apmixed.c
··· 6 6 */ 7 7 8 8 #include <linux/clk-provider.h> 9 - #include <linux/of.h> 10 - #include <linux/of_address.h> 11 - #include <linux/of_device.h> 9 + #include <linux/mod_devicetable.h> 12 10 #include <linux/platform_device.h> 13 11 14 12 #include "clk-gate.h"
+1 -3
drivers/clk/mediatek/clk-mt7986-eth.c
··· 6 6 */ 7 7 8 8 #include <linux/clk-provider.h> 9 - #include <linux/of.h> 10 - #include <linux/of_address.h> 11 - #include <linux/of_device.h> 9 + #include <linux/mod_devicetable.h> 12 10 #include <linux/platform_device.h> 13 11 14 12 #include "clk-mtk.h"
+1 -3
drivers/clk/mediatek/clk-mt7986-infracfg.c
··· 6 6 */ 7 7 8 8 #include <linux/clk-provider.h> 9 - #include <linux/of.h> 10 - #include <linux/of_address.h> 11 - #include <linux/of_device.h> 9 + #include <linux/mod_devicetable.h> 12 10 #include <linux/platform_device.h> 13 11 #include "clk-mtk.h" 14 12 #include "clk-gate.h"
+1 -3
drivers/clk/mediatek/clk-mt7986-topckgen.c
··· 6 6 */ 7 7 8 8 #include <linux/clk-provider.h> 9 - #include <linux/of.h> 10 - #include <linux/of_address.h> 11 - #include <linux/of_device.h> 9 + #include <linux/mod_devicetable.h> 12 10 #include <linux/platform_device.h> 13 11 #include "clk-mtk.h" 14 12 #include "clk-gate.h"
+1 -3
drivers/clk/mediatek/clk-mt8167-aud.c
··· 7 7 */ 8 8 9 9 #include <linux/clk-provider.h> 10 - #include <linux/of.h> 11 - #include <linux/of_address.h> 12 - #include <linux/of_device.h> 10 + #include <linux/mod_devicetable.h> 13 11 #include <linux/platform_device.h> 14 12 15 13 #include "clk-mtk.h"
+1 -3
drivers/clk/mediatek/clk-mt8167-img.c
··· 7 7 */ 8 8 9 9 #include <linux/clk-provider.h> 10 - #include <linux/of.h> 11 - #include <linux/of_address.h> 12 - #include <linux/of_device.h> 10 + #include <linux/mod_devicetable.h> 13 11 #include <linux/platform_device.h> 14 12 15 13 #include "clk-mtk.h"
+1 -3
drivers/clk/mediatek/clk-mt8167-mfgcfg.c
··· 7 7 */ 8 8 9 9 #include <linux/clk-provider.h> 10 - #include <linux/of.h> 11 - #include <linux/of_address.h> 12 - #include <linux/of_device.h> 10 + #include <linux/mod_devicetable.h> 13 11 #include <linux/platform_device.h> 14 12 15 13 #include "clk-mtk.h"
+1 -3
drivers/clk/mediatek/clk-mt8167-mm.c
··· 7 7 */ 8 8 9 9 #include <linux/clk-provider.h> 10 - #include <linux/of.h> 11 - #include <linux/of_address.h> 12 - #include <linux/of_device.h> 10 + #include <linux/mod_devicetable.h> 13 11 #include <linux/platform_device.h> 14 12 15 13 #include "clk-mtk.h"
+1 -3
drivers/clk/mediatek/clk-mt8167-vdec.c
··· 7 7 */ 8 8 9 9 #include <linux/clk-provider.h> 10 - #include <linux/of.h> 11 - #include <linux/of_address.h> 12 - #include <linux/of_device.h> 10 + #include <linux/mod_devicetable.h> 13 11 #include <linux/platform_device.h> 14 12 15 13 #include "clk-mtk.h"
+1 -1
drivers/clk/mediatek/clk-mt8173-mm.c
··· 5 5 */ 6 6 7 7 #include <linux/clk-provider.h> 8 - #include <linux/of_device.h> 8 + #include <linux/mod_devicetable.h> 9 9 #include <linux/platform_device.h> 10 10 11 11 #include "clk-gate.h"
+1 -3
drivers/clk/mediatek/clk-mt8183.c
··· 5 5 6 6 #include <linux/delay.h> 7 7 #include <linux/mfd/syscon.h> 8 - #include <linux/of.h> 9 - #include <linux/of_address.h> 10 - #include <linux/of_device.h> 8 + #include <linux/mod_devicetable.h> 11 9 #include <linux/platform_device.h> 12 10 #include <linux/slab.h> 13 11
+1 -1
drivers/clk/mediatek/clk-mt8188-apmixedsys.c
··· 5 5 */ 6 6 7 7 #include <dt-bindings/clock/mediatek,mt8188-clk.h> 8 - #include <linux/of_device.h> 8 + #include <linux/mod_devicetable.h> 9 9 #include <linux/platform_device.h> 10 10 11 11 #include "clk-gate.h"
+1 -1
drivers/clk/mediatek/clk-mt8188-topckgen.c
··· 5 5 */ 6 6 7 7 #include <dt-bindings/clock/mediatek,mt8188-clk.h> 8 - #include <linux/of_device.h> 8 + #include <linux/mod_devicetable.h> 9 9 #include <linux/platform_device.h> 10 10 11 11 #include "clk-gate.h"
+1 -1
drivers/clk/mediatek/clk-mt8192-cam.c
··· 4 4 // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 5 6 6 #include <linux/clk-provider.h> 7 - #include <linux/of_device.h> 7 + #include <linux/mod_devicetable.h> 8 8 #include <linux/platform_device.h> 9 9 10 10 #include "clk-mtk.h"
+1 -1
drivers/clk/mediatek/clk-mt8192-img.c
··· 4 4 // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 5 6 6 #include <linux/clk-provider.h> 7 - #include <linux/of_device.h> 7 + #include <linux/mod_devicetable.h> 8 8 #include <linux/platform_device.h> 9 9 10 10 #include "clk-mtk.h"
+1 -1
drivers/clk/mediatek/clk-mt8192-imp_iic_wrap.c
··· 4 4 // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 5 6 6 #include <linux/clk-provider.h> 7 - #include <linux/of_device.h> 7 + #include <linux/mod_devicetable.h> 8 8 #include <linux/platform_device.h> 9 9 10 10 #include "clk-mtk.h"
+1 -1
drivers/clk/mediatek/clk-mt8192-ipe.c
··· 4 4 // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 5 6 6 #include <linux/clk-provider.h> 7 - #include <linux/of_device.h> 7 + #include <linux/mod_devicetable.h> 8 8 #include <linux/platform_device.h> 9 9 10 10 #include "clk-mtk.h"
+1 -1
drivers/clk/mediatek/clk-mt8192-mdp.c
··· 4 4 // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 5 6 6 #include <linux/clk-provider.h> 7 - #include <linux/of_device.h> 7 + #include <linux/mod_devicetable.h> 8 8 #include <linux/platform_device.h> 9 9 10 10 #include "clk-mtk.h"
+1 -1
drivers/clk/mediatek/clk-mt8192-mfg.c
··· 4 4 // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 5 6 6 #include <linux/clk-provider.h> 7 - #include <linux/of_device.h> 7 + #include <linux/mod_devicetable.h> 8 8 #include <linux/platform_device.h> 9 9 10 10 #include "clk-mtk.h"
+1 -1
drivers/clk/mediatek/clk-mt8192-msdc.c
··· 4 4 // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 5 6 6 #include <linux/clk-provider.h> 7 - #include <linux/of_device.h> 7 + #include <linux/mod_devicetable.h> 8 8 #include <linux/platform_device.h> 9 9 10 10 #include "clk-mtk.h"
+1 -1
drivers/clk/mediatek/clk-mt8192-scp_adsp.c
··· 4 4 // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 5 6 6 #include <linux/clk-provider.h> 7 - #include <linux/of_device.h> 7 + #include <linux/mod_devicetable.h> 8 8 #include <linux/platform_device.h> 9 9 10 10 #include "clk-mtk.h"
+1 -1
drivers/clk/mediatek/clk-mt8192-vdec.c
··· 4 4 // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 5 6 6 #include <linux/clk-provider.h> 7 - #include <linux/of_device.h> 7 + #include <linux/mod_devicetable.h> 8 8 #include <linux/platform_device.h> 9 9 10 10 #include "clk-mtk.h"
+1 -1
drivers/clk/mediatek/clk-mt8192-venc.c
··· 4 4 // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 5 6 6 #include <linux/clk-provider.h> 7 - #include <linux/of_device.h> 7 + #include <linux/mod_devicetable.h> 8 8 #include <linux/platform_device.h> 9 9 10 10 #include "clk-mtk.h"
+1 -3
drivers/clk/mediatek/clk-mt8192.c
··· 6 6 #include <linux/clk.h> 7 7 #include <linux/delay.h> 8 8 #include <linux/mfd/syscon.h> 9 - #include <linux/of.h> 10 - #include <linux/of_address.h> 11 - #include <linux/of_device.h> 9 + #include <linux/mod_devicetable.h> 12 10 #include <linux/platform_device.h> 13 11 #include <linux/slab.h> 14 12
+1 -1
drivers/clk/mediatek/clk-mt8195-apmixedsys.c
··· 10 10 #include "clk-pllfh.h" 11 11 12 12 #include <dt-bindings/clock/mt8195-clk.h> 13 - #include <linux/of_device.h> 13 + #include <linux/mod_devicetable.h> 14 14 #include <linux/platform_device.h> 15 15 16 16 static const struct mtk_gate_regs apmixed_cg_regs = {
+1 -1
drivers/clk/mediatek/clk-mt8195-topckgen.c
··· 8 8 #include "clk-mux.h" 9 9 10 10 #include <dt-bindings/clock/mt8195-clk.h> 11 - #include <linux/of_device.h> 11 + #include <linux/mod_devicetable.h> 12 12 #include <linux/platform_device.h> 13 13 14 14 static DEFINE_SPINLOCK(mt8195_clk_lock);
+1 -3
drivers/clk/mediatek/clk-mt8365.c
··· 10 10 #include <linux/clk-provider.h> 11 11 #include <linux/delay.h> 12 12 #include <linux/mfd/syscon.h> 13 - #include <linux/of.h> 14 - #include <linux/of_address.h> 15 - #include <linux/of_device.h> 13 + #include <linux/mod_devicetable.h> 16 14 #include <linux/platform_device.h> 17 15 #include <linux/slab.h> 18 16
+1 -3
drivers/clk/mediatek/clk-mt8516-aud.c
··· 7 7 */ 8 8 9 9 #include <linux/clk-provider.h> 10 - #include <linux/of.h> 11 - #include <linux/of_address.h> 12 - #include <linux/of_device.h> 10 + #include <linux/mod_devicetable.h> 13 11 #include <linux/platform_device.h> 14 12 15 13 #include "clk-mtk.h"
+9
drivers/clk/meson/Kconfig
··· 30 30 tristate 31 31 select COMMON_CLK_MESON_REGMAP 32 32 33 + config COMMON_CLK_MESON_CLKC_UTILS 34 + tristate 35 + 33 36 config COMMON_CLK_MESON_AO_CLKC 34 37 tristate 35 38 select COMMON_CLK_MESON_REGMAP 39 + select COMMON_CLK_MESON_CLKC_UTILS 36 40 select RESET_CONTROLLER 37 41 38 42 config COMMON_CLK_MESON_EE_CLKC 39 43 tristate 40 44 select COMMON_CLK_MESON_REGMAP 45 + select COMMON_CLK_MESON_CLKC_UTILS 41 46 42 47 config COMMON_CLK_MESON_CPU_DYNDIV 43 48 tristate ··· 53 48 depends on ARM 54 49 default y 55 50 select COMMON_CLK_MESON_REGMAP 51 + select COMMON_CLK_MESON_CLKC_UTILS 56 52 select COMMON_CLK_MESON_MPLL 57 53 select COMMON_CLK_MESON_PLL 58 54 select MFD_SYSCON ··· 100 94 select COMMON_CLK_MESON_REGMAP 101 95 select COMMON_CLK_MESON_PHASE 102 96 select COMMON_CLK_MESON_SCLK_DIV 97 + select COMMON_CLK_MESON_CLKC_UTILS 103 98 select REGMAP_MMIO 104 99 help 105 100 Support for the audio clock controller on AmLogic A113D devices, ··· 110 103 tristate "Amlogic A1 SoC PLL controller support" 111 104 depends on ARM64 112 105 select COMMON_CLK_MESON_REGMAP 106 + select COMMON_CLK_MESON_CLKC_UTILS 113 107 select COMMON_CLK_MESON_PLL 114 108 help 115 109 Support for the PLL clock controller on Amlogic A113L based ··· 122 114 depends on ARM64 123 115 select COMMON_CLK_MESON_DUALDIV 124 116 select COMMON_CLK_MESON_REGMAP 117 + select COMMON_CLK_MESON_CLKC_UTILS 125 118 help 126 119 Support for the Peripherals clock controller on Amlogic A113L based 127 120 device, A1 SoC Family. Say Y if you want A1 Peripherals clock
+1
drivers/clk/meson/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 2 # Amlogic clock drivers 3 3 4 + obj-$(CONFIG_COMMON_CLK_MESON_CLKC_UTILS) += meson-clkc-utils.o 4 5 obj-$(CONFIG_COMMON_CLK_MESON_AO_CLKC) += meson-aoclk.o 5 6 obj-$(CONFIG_COMMON_CLK_MESON_CPU_DYNDIV) += clk-cpu-dyndiv.o 6 7 obj-$(CONFIG_COMMON_CLK_MESON_DUALDIV) += clk-dualdiv.o
+165 -162
drivers/clk/meson/a1-peripherals.c
··· 8 8 */ 9 9 10 10 #include <linux/clk-provider.h> 11 - #include <linux/of_device.h> 11 + #include <linux/mod_devicetable.h> 12 12 #include <linux/platform_device.h> 13 13 #include "a1-peripherals.h" 14 14 #include "clk-dualdiv.h" 15 15 #include "clk-regmap.h" 16 + #include "meson-clkc-utils.h" 17 + 18 + #include <dt-bindings/clock/amlogic,a1-peripherals-clkc.h> 16 19 17 20 static struct clk_regmap xtal_in = { 18 21 .data = &(struct clk_regmap_gate_data){ ··· 1869 1866 static MESON_GATE(prod_i2c, AXI_CLK_EN, 12); 1870 1867 1871 1868 /* Array of all clocks registered by this provider */ 1872 - static struct clk_hw_onecell_data a1_periphs_clks = { 1873 - .hws = { 1874 - [CLKID_XTAL_IN] = &xtal_in.hw, 1875 - [CLKID_FIXPLL_IN] = &fixpll_in.hw, 1876 - [CLKID_USB_PHY_IN] = &usb_phy_in.hw, 1877 - [CLKID_USB_CTRL_IN] = &usb_ctrl_in.hw, 1878 - [CLKID_HIFIPLL_IN] = &hifipll_in.hw, 1879 - [CLKID_SYSPLL_IN] = &syspll_in.hw, 1880 - [CLKID_DDS_IN] = &dds_in.hw, 1881 - [CLKID_SYS] = &sys.hw, 1882 - [CLKID_CLKTREE] = &clktree.hw, 1883 - [CLKID_RESET_CTRL] = &reset_ctrl.hw, 1884 - [CLKID_ANALOG_CTRL] = &analog_ctrl.hw, 1885 - [CLKID_PWR_CTRL] = &pwr_ctrl.hw, 1886 - [CLKID_PAD_CTRL] = &pad_ctrl.hw, 1887 - [CLKID_SYS_CTRL] = &sys_ctrl.hw, 1888 - [CLKID_TEMP_SENSOR] = &temp_sensor.hw, 1889 - [CLKID_AM2AXI_DIV] = &am2axi_dev.hw, 1890 - [CLKID_SPICC_B] = &spicc_b.hw, 1891 - [CLKID_SPICC_A] = &spicc_a.hw, 1892 - [CLKID_MSR] = &msr.hw, 1893 - [CLKID_AUDIO] = &audio.hw, 1894 - [CLKID_JTAG_CTRL] = &jtag_ctrl.hw, 1895 - [CLKID_SARADC_EN] = &saradc_en.hw, 1896 - [CLKID_PWM_EF] = &pwm_ef.hw, 1897 - [CLKID_PWM_CD] = &pwm_cd.hw, 1898 - [CLKID_PWM_AB] = &pwm_ab.hw, 1899 - [CLKID_CEC] = &cec.hw, 1900 - [CLKID_I2C_S] = &i2c_s.hw, 1901 - [CLKID_IR_CTRL] = &ir_ctrl.hw, 1902 - [CLKID_I2C_M_D] = &i2c_m_d.hw, 1903 - [CLKID_I2C_M_C] = &i2c_m_c.hw, 1904 - [CLKID_I2C_M_B] = &i2c_m_b.hw, 1905 - [CLKID_I2C_M_A] = &i2c_m_a.hw, 1906 - [CLKID_ACODEC] = &acodec.hw, 1907 - [CLKID_OTP] = &otp.hw, 1908 - [CLKID_SD_EMMC_A] = &sd_emmc_a.hw, 1909 - [CLKID_USB_PHY] = &usb_phy.hw, 1910 - [CLKID_USB_CTRL] = &usb_ctrl.hw, 1911 - [CLKID_SYS_DSPB] = &sys_dspb.hw, 1912 - [CLKID_SYS_DSPA] = &sys_dspa.hw, 1913 - [CLKID_DMA] = &dma.hw, 1914 - [CLKID_IRQ_CTRL] = &irq_ctrl.hw, 1915 - [CLKID_NIC] = &nic.hw, 1916 - [CLKID_GIC] = &gic.hw, 1917 - [CLKID_UART_C] = &uart_c.hw, 1918 - [CLKID_UART_B] = &uart_b.hw, 1919 - [CLKID_UART_A] = &uart_a.hw, 1920 - [CLKID_SYS_PSRAM] = &sys_psram.hw, 1921 - [CLKID_RSA] = &rsa.hw, 1922 - [CLKID_CORESIGHT] = &coresight.hw, 1923 - [CLKID_AM2AXI_VAD] = &am2axi_vad.hw, 1924 - [CLKID_AUDIO_VAD] = &audio_vad.hw, 1925 - [CLKID_AXI_DMC] = &axi_dmc.hw, 1926 - [CLKID_AXI_PSRAM] = &axi_psram.hw, 1927 - [CLKID_RAMB] = &ramb.hw, 1928 - [CLKID_RAMA] = &rama.hw, 1929 - [CLKID_AXI_SPIFC] = &axi_spifc.hw, 1930 - [CLKID_AXI_NIC] = &axi_nic.hw, 1931 - [CLKID_AXI_DMA] = &axi_dma.hw, 1932 - [CLKID_CPU_CTRL] = &cpu_ctrl.hw, 1933 - [CLKID_ROM] = &rom.hw, 1934 - [CLKID_PROC_I2C] = &prod_i2c.hw, 1935 - [CLKID_DSPA_SEL] = &dspa_sel.hw, 1936 - [CLKID_DSPB_SEL] = &dspb_sel.hw, 1937 - [CLKID_DSPA_EN] = &dspa_en.hw, 1938 - [CLKID_DSPA_EN_NIC] = &dspa_en_nic.hw, 1939 - [CLKID_DSPB_EN] = &dspb_en.hw, 1940 - [CLKID_DSPB_EN_NIC] = &dspb_en_nic.hw, 1941 - [CLKID_RTC] = &rtc.hw, 1942 - [CLKID_CECA_32K] = &ceca_32k_out.hw, 1943 - [CLKID_CECB_32K] = &cecb_32k_out.hw, 1944 - [CLKID_24M] = &clk_24m.hw, 1945 - [CLKID_12M] = &clk_12m.hw, 1946 - [CLKID_FCLK_DIV2_DIVN] = &fclk_div2_divn.hw, 1947 - [CLKID_GEN] = &gen.hw, 1948 - [CLKID_SARADC_SEL] = &saradc_sel.hw, 1949 - [CLKID_SARADC] = &saradc.hw, 1950 - [CLKID_PWM_A] = &pwm_a.hw, 1951 - [CLKID_PWM_B] = &pwm_b.hw, 1952 - [CLKID_PWM_C] = &pwm_c.hw, 1953 - [CLKID_PWM_D] = &pwm_d.hw, 1954 - [CLKID_PWM_E] = &pwm_e.hw, 1955 - [CLKID_PWM_F] = &pwm_f.hw, 1956 - [CLKID_SPICC] = &spicc.hw, 1957 - [CLKID_TS] = &ts.hw, 1958 - [CLKID_SPIFC] = &spifc.hw, 1959 - [CLKID_USB_BUS] = &usb_bus.hw, 1960 - [CLKID_SD_EMMC] = &sd_emmc.hw, 1961 - [CLKID_PSRAM] = &psram.hw, 1962 - [CLKID_DMC] = &dmc.hw, 1963 - [CLKID_SYS_A_SEL] = &sys_a_sel.hw, 1964 - [CLKID_SYS_A_DIV] = &sys_a_div.hw, 1965 - [CLKID_SYS_A] = &sys_a.hw, 1966 - [CLKID_SYS_B_SEL] = &sys_b_sel.hw, 1967 - [CLKID_SYS_B_DIV] = &sys_b_div.hw, 1968 - [CLKID_SYS_B] = &sys_b.hw, 1969 - [CLKID_DSPA_A_SEL] = &dspa_a_sel.hw, 1970 - [CLKID_DSPA_A_DIV] = &dspa_a_div.hw, 1971 - [CLKID_DSPA_A] = &dspa_a.hw, 1972 - [CLKID_DSPA_B_SEL] = &dspa_b_sel.hw, 1973 - [CLKID_DSPA_B_DIV] = &dspa_b_div.hw, 1974 - [CLKID_DSPA_B] = &dspa_b.hw, 1975 - [CLKID_DSPB_A_SEL] = &dspb_a_sel.hw, 1976 - [CLKID_DSPB_A_DIV] = &dspb_a_div.hw, 1977 - [CLKID_DSPB_A] = &dspb_a.hw, 1978 - [CLKID_DSPB_B_SEL] = &dspb_b_sel.hw, 1979 - [CLKID_DSPB_B_DIV] = &dspb_b_div.hw, 1980 - [CLKID_DSPB_B] = &dspb_b.hw, 1981 - [CLKID_RTC_32K_IN] = &rtc_32k_in.hw, 1982 - [CLKID_RTC_32K_DIV] = &rtc_32k_div.hw, 1983 - [CLKID_RTC_32K_XTAL] = &rtc_32k_xtal.hw, 1984 - [CLKID_RTC_32K_SEL] = &rtc_32k_sel.hw, 1985 - [CLKID_CECB_32K_IN] = &cecb_32k_in.hw, 1986 - [CLKID_CECB_32K_DIV] = &cecb_32k_div.hw, 1987 - [CLKID_CECB_32K_SEL_PRE] = &cecb_32k_sel_pre.hw, 1988 - [CLKID_CECB_32K_SEL] = &cecb_32k_sel.hw, 1989 - [CLKID_CECA_32K_IN] = &ceca_32k_in.hw, 1990 - [CLKID_CECA_32K_DIV] = &ceca_32k_div.hw, 1991 - [CLKID_CECA_32K_SEL_PRE] = &ceca_32k_sel_pre.hw, 1992 - [CLKID_CECA_32K_SEL] = &ceca_32k_sel.hw, 1993 - [CLKID_DIV2_PRE] = &fclk_div2_divn_pre.hw, 1994 - [CLKID_24M_DIV2] = &clk_24m_div2.hw, 1995 - [CLKID_GEN_SEL] = &gen_sel.hw, 1996 - [CLKID_GEN_DIV] = &gen_div.hw, 1997 - [CLKID_SARADC_DIV] = &saradc_div.hw, 1998 - [CLKID_PWM_A_SEL] = &pwm_a_sel.hw, 1999 - [CLKID_PWM_A_DIV] = &pwm_a_div.hw, 2000 - [CLKID_PWM_B_SEL] = &pwm_b_sel.hw, 2001 - [CLKID_PWM_B_DIV] = &pwm_b_div.hw, 2002 - [CLKID_PWM_C_SEL] = &pwm_c_sel.hw, 2003 - [CLKID_PWM_C_DIV] = &pwm_c_div.hw, 2004 - [CLKID_PWM_D_SEL] = &pwm_d_sel.hw, 2005 - [CLKID_PWM_D_DIV] = &pwm_d_div.hw, 2006 - [CLKID_PWM_E_SEL] = &pwm_e_sel.hw, 2007 - [CLKID_PWM_E_DIV] = &pwm_e_div.hw, 2008 - [CLKID_PWM_F_SEL] = &pwm_f_sel.hw, 2009 - [CLKID_PWM_F_DIV] = &pwm_f_div.hw, 2010 - [CLKID_SPICC_SEL] = &spicc_sel.hw, 2011 - [CLKID_SPICC_DIV] = &spicc_div.hw, 2012 - [CLKID_SPICC_SEL2] = &spicc_sel2.hw, 2013 - [CLKID_TS_DIV] = &ts_div.hw, 2014 - [CLKID_SPIFC_SEL] = &spifc_sel.hw, 2015 - [CLKID_SPIFC_DIV] = &spifc_div.hw, 2016 - [CLKID_SPIFC_SEL2] = &spifc_sel2.hw, 2017 - [CLKID_USB_BUS_SEL] = &usb_bus_sel.hw, 2018 - [CLKID_USB_BUS_DIV] = &usb_bus_div.hw, 2019 - [CLKID_SD_EMMC_SEL] = &sd_emmc_sel.hw, 2020 - [CLKID_SD_EMMC_DIV] = &sd_emmc_div.hw, 2021 - [CLKID_SD_EMMC_SEL2] = &sd_emmc_sel2.hw, 2022 - [CLKID_PSRAM_SEL] = &psram_sel.hw, 2023 - [CLKID_PSRAM_DIV] = &psram_div.hw, 2024 - [CLKID_PSRAM_SEL2] = &psram_sel2.hw, 2025 - [CLKID_DMC_SEL] = &dmc_sel.hw, 2026 - [CLKID_DMC_DIV] = &dmc_div.hw, 2027 - [CLKID_DMC_SEL2] = &dmc_sel2.hw, 2028 - [NR_CLKS] = NULL, 2029 - }, 2030 - .num = NR_CLKS, 1869 + static struct clk_hw *a1_periphs_hw_clks[] = { 1870 + [CLKID_XTAL_IN] = &xtal_in.hw, 1871 + [CLKID_FIXPLL_IN] = &fixpll_in.hw, 1872 + [CLKID_USB_PHY_IN] = &usb_phy_in.hw, 1873 + [CLKID_USB_CTRL_IN] = &usb_ctrl_in.hw, 1874 + [CLKID_HIFIPLL_IN] = &hifipll_in.hw, 1875 + [CLKID_SYSPLL_IN] = &syspll_in.hw, 1876 + [CLKID_DDS_IN] = &dds_in.hw, 1877 + [CLKID_SYS] = &sys.hw, 1878 + [CLKID_CLKTREE] = &clktree.hw, 1879 + [CLKID_RESET_CTRL] = &reset_ctrl.hw, 1880 + [CLKID_ANALOG_CTRL] = &analog_ctrl.hw, 1881 + [CLKID_PWR_CTRL] = &pwr_ctrl.hw, 1882 + [CLKID_PAD_CTRL] = &pad_ctrl.hw, 1883 + [CLKID_SYS_CTRL] = &sys_ctrl.hw, 1884 + [CLKID_TEMP_SENSOR] = &temp_sensor.hw, 1885 + [CLKID_AM2AXI_DIV] = &am2axi_dev.hw, 1886 + [CLKID_SPICC_B] = &spicc_b.hw, 1887 + [CLKID_SPICC_A] = &spicc_a.hw, 1888 + [CLKID_MSR] = &msr.hw, 1889 + [CLKID_AUDIO] = &audio.hw, 1890 + [CLKID_JTAG_CTRL] = &jtag_ctrl.hw, 1891 + [CLKID_SARADC_EN] = &saradc_en.hw, 1892 + [CLKID_PWM_EF] = &pwm_ef.hw, 1893 + [CLKID_PWM_CD] = &pwm_cd.hw, 1894 + [CLKID_PWM_AB] = &pwm_ab.hw, 1895 + [CLKID_CEC] = &cec.hw, 1896 + [CLKID_I2C_S] = &i2c_s.hw, 1897 + [CLKID_IR_CTRL] = &ir_ctrl.hw, 1898 + [CLKID_I2C_M_D] = &i2c_m_d.hw, 1899 + [CLKID_I2C_M_C] = &i2c_m_c.hw, 1900 + [CLKID_I2C_M_B] = &i2c_m_b.hw, 1901 + [CLKID_I2C_M_A] = &i2c_m_a.hw, 1902 + [CLKID_ACODEC] = &acodec.hw, 1903 + [CLKID_OTP] = &otp.hw, 1904 + [CLKID_SD_EMMC_A] = &sd_emmc_a.hw, 1905 + [CLKID_USB_PHY] = &usb_phy.hw, 1906 + [CLKID_USB_CTRL] = &usb_ctrl.hw, 1907 + [CLKID_SYS_DSPB] = &sys_dspb.hw, 1908 + [CLKID_SYS_DSPA] = &sys_dspa.hw, 1909 + [CLKID_DMA] = &dma.hw, 1910 + [CLKID_IRQ_CTRL] = &irq_ctrl.hw, 1911 + [CLKID_NIC] = &nic.hw, 1912 + [CLKID_GIC] = &gic.hw, 1913 + [CLKID_UART_C] = &uart_c.hw, 1914 + [CLKID_UART_B] = &uart_b.hw, 1915 + [CLKID_UART_A] = &uart_a.hw, 1916 + [CLKID_SYS_PSRAM] = &sys_psram.hw, 1917 + [CLKID_RSA] = &rsa.hw, 1918 + [CLKID_CORESIGHT] = &coresight.hw, 1919 + [CLKID_AM2AXI_VAD] = &am2axi_vad.hw, 1920 + [CLKID_AUDIO_VAD] = &audio_vad.hw, 1921 + [CLKID_AXI_DMC] = &axi_dmc.hw, 1922 + [CLKID_AXI_PSRAM] = &axi_psram.hw, 1923 + [CLKID_RAMB] = &ramb.hw, 1924 + [CLKID_RAMA] = &rama.hw, 1925 + [CLKID_AXI_SPIFC] = &axi_spifc.hw, 1926 + [CLKID_AXI_NIC] = &axi_nic.hw, 1927 + [CLKID_AXI_DMA] = &axi_dma.hw, 1928 + [CLKID_CPU_CTRL] = &cpu_ctrl.hw, 1929 + [CLKID_ROM] = &rom.hw, 1930 + [CLKID_PROC_I2C] = &prod_i2c.hw, 1931 + [CLKID_DSPA_SEL] = &dspa_sel.hw, 1932 + [CLKID_DSPB_SEL] = &dspb_sel.hw, 1933 + [CLKID_DSPA_EN] = &dspa_en.hw, 1934 + [CLKID_DSPA_EN_NIC] = &dspa_en_nic.hw, 1935 + [CLKID_DSPB_EN] = &dspb_en.hw, 1936 + [CLKID_DSPB_EN_NIC] = &dspb_en_nic.hw, 1937 + [CLKID_RTC] = &rtc.hw, 1938 + [CLKID_CECA_32K] = &ceca_32k_out.hw, 1939 + [CLKID_CECB_32K] = &cecb_32k_out.hw, 1940 + [CLKID_24M] = &clk_24m.hw, 1941 + [CLKID_12M] = &clk_12m.hw, 1942 + [CLKID_FCLK_DIV2_DIVN] = &fclk_div2_divn.hw, 1943 + [CLKID_GEN] = &gen.hw, 1944 + [CLKID_SARADC_SEL] = &saradc_sel.hw, 1945 + [CLKID_SARADC] = &saradc.hw, 1946 + [CLKID_PWM_A] = &pwm_a.hw, 1947 + [CLKID_PWM_B] = &pwm_b.hw, 1948 + [CLKID_PWM_C] = &pwm_c.hw, 1949 + [CLKID_PWM_D] = &pwm_d.hw, 1950 + [CLKID_PWM_E] = &pwm_e.hw, 1951 + [CLKID_PWM_F] = &pwm_f.hw, 1952 + [CLKID_SPICC] = &spicc.hw, 1953 + [CLKID_TS] = &ts.hw, 1954 + [CLKID_SPIFC] = &spifc.hw, 1955 + [CLKID_USB_BUS] = &usb_bus.hw, 1956 + [CLKID_SD_EMMC] = &sd_emmc.hw, 1957 + [CLKID_PSRAM] = &psram.hw, 1958 + [CLKID_DMC] = &dmc.hw, 1959 + [CLKID_SYS_A_SEL] = &sys_a_sel.hw, 1960 + [CLKID_SYS_A_DIV] = &sys_a_div.hw, 1961 + [CLKID_SYS_A] = &sys_a.hw, 1962 + [CLKID_SYS_B_SEL] = &sys_b_sel.hw, 1963 + [CLKID_SYS_B_DIV] = &sys_b_div.hw, 1964 + [CLKID_SYS_B] = &sys_b.hw, 1965 + [CLKID_DSPA_A_SEL] = &dspa_a_sel.hw, 1966 + [CLKID_DSPA_A_DIV] = &dspa_a_div.hw, 1967 + [CLKID_DSPA_A] = &dspa_a.hw, 1968 + [CLKID_DSPA_B_SEL] = &dspa_b_sel.hw, 1969 + [CLKID_DSPA_B_DIV] = &dspa_b_div.hw, 1970 + [CLKID_DSPA_B] = &dspa_b.hw, 1971 + [CLKID_DSPB_A_SEL] = &dspb_a_sel.hw, 1972 + [CLKID_DSPB_A_DIV] = &dspb_a_div.hw, 1973 + [CLKID_DSPB_A] = &dspb_a.hw, 1974 + [CLKID_DSPB_B_SEL] = &dspb_b_sel.hw, 1975 + [CLKID_DSPB_B_DIV] = &dspb_b_div.hw, 1976 + [CLKID_DSPB_B] = &dspb_b.hw, 1977 + [CLKID_RTC_32K_IN] = &rtc_32k_in.hw, 1978 + [CLKID_RTC_32K_DIV] = &rtc_32k_div.hw, 1979 + [CLKID_RTC_32K_XTAL] = &rtc_32k_xtal.hw, 1980 + [CLKID_RTC_32K_SEL] = &rtc_32k_sel.hw, 1981 + [CLKID_CECB_32K_IN] = &cecb_32k_in.hw, 1982 + [CLKID_CECB_32K_DIV] = &cecb_32k_div.hw, 1983 + [CLKID_CECB_32K_SEL_PRE] = &cecb_32k_sel_pre.hw, 1984 + [CLKID_CECB_32K_SEL] = &cecb_32k_sel.hw, 1985 + [CLKID_CECA_32K_IN] = &ceca_32k_in.hw, 1986 + [CLKID_CECA_32K_DIV] = &ceca_32k_div.hw, 1987 + [CLKID_CECA_32K_SEL_PRE] = &ceca_32k_sel_pre.hw, 1988 + [CLKID_CECA_32K_SEL] = &ceca_32k_sel.hw, 1989 + [CLKID_DIV2_PRE] = &fclk_div2_divn_pre.hw, 1990 + [CLKID_24M_DIV2] = &clk_24m_div2.hw, 1991 + [CLKID_GEN_SEL] = &gen_sel.hw, 1992 + [CLKID_GEN_DIV] = &gen_div.hw, 1993 + [CLKID_SARADC_DIV] = &saradc_div.hw, 1994 + [CLKID_PWM_A_SEL] = &pwm_a_sel.hw, 1995 + [CLKID_PWM_A_DIV] = &pwm_a_div.hw, 1996 + [CLKID_PWM_B_SEL] = &pwm_b_sel.hw, 1997 + [CLKID_PWM_B_DIV] = &pwm_b_div.hw, 1998 + [CLKID_PWM_C_SEL] = &pwm_c_sel.hw, 1999 + [CLKID_PWM_C_DIV] = &pwm_c_div.hw, 2000 + [CLKID_PWM_D_SEL] = &pwm_d_sel.hw, 2001 + [CLKID_PWM_D_DIV] = &pwm_d_div.hw, 2002 + [CLKID_PWM_E_SEL] = &pwm_e_sel.hw, 2003 + [CLKID_PWM_E_DIV] = &pwm_e_div.hw, 2004 + [CLKID_PWM_F_SEL] = &pwm_f_sel.hw, 2005 + [CLKID_PWM_F_DIV] = &pwm_f_div.hw, 2006 + [CLKID_SPICC_SEL] = &spicc_sel.hw, 2007 + [CLKID_SPICC_DIV] = &spicc_div.hw, 2008 + [CLKID_SPICC_SEL2] = &spicc_sel2.hw, 2009 + [CLKID_TS_DIV] = &ts_div.hw, 2010 + [CLKID_SPIFC_SEL] = &spifc_sel.hw, 2011 + [CLKID_SPIFC_DIV] = &spifc_div.hw, 2012 + [CLKID_SPIFC_SEL2] = &spifc_sel2.hw, 2013 + [CLKID_USB_BUS_SEL] = &usb_bus_sel.hw, 2014 + [CLKID_USB_BUS_DIV] = &usb_bus_div.hw, 2015 + [CLKID_SD_EMMC_SEL] = &sd_emmc_sel.hw, 2016 + [CLKID_SD_EMMC_DIV] = &sd_emmc_div.hw, 2017 + [CLKID_SD_EMMC_SEL2] = &sd_emmc_sel2.hw, 2018 + [CLKID_PSRAM_SEL] = &psram_sel.hw, 2019 + [CLKID_PSRAM_DIV] = &psram_div.hw, 2020 + [CLKID_PSRAM_SEL2] = &psram_sel2.hw, 2021 + [CLKID_DMC_SEL] = &dmc_sel.hw, 2022 + [CLKID_DMC_DIV] = &dmc_div.hw, 2023 + [CLKID_DMC_SEL2] = &dmc_sel2.hw, 2031 2024 }; 2032 2025 2033 2026 /* Convenience table to populate regmap in .probe */ ··· 2189 2190 .reg_stride = 4, 2190 2191 }; 2191 2192 2193 + static struct meson_clk_hw_data a1_periphs_clks = { 2194 + .hws = a1_periphs_hw_clks, 2195 + .num = ARRAY_SIZE(a1_periphs_hw_clks), 2196 + }; 2197 + 2192 2198 static int meson_a1_periphs_probe(struct platform_device *pdev) 2193 2199 { 2194 2200 struct device *dev = &pdev->dev; ··· 2223 2219 clkid); 2224 2220 } 2225 2221 2226 - return devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, 2227 - &a1_periphs_clks); 2222 + return devm_of_clk_add_hw_provider(dev, meson_clk_hw_get, &a1_periphs_clks); 2228 2223 } 2229 2224 2230 2225 static const struct of_device_id a1_periphs_clkc_match_table[] = {
-67
drivers/clk/meson/a1-peripherals.h
··· 43 43 #define PSRAM_CLK_CTRL 0xf4 44 44 #define DMC_CLK_CTRL 0xf8 45 45 46 - /* include the CLKIDs that have been made part of the DT binding */ 47 - #include <dt-bindings/clock/amlogic,a1-peripherals-clkc.h> 48 - 49 - /* 50 - * CLKID index values for internal clocks 51 - * 52 - * These indices are entirely contrived and do not map onto the hardware. 53 - * It has now been decided to expose everything by default in the DT header: 54 - * include/dt-bindings/clock/a1-peripherals-clkc.h. 55 - * Only the clocks ids we don't want to expose, such as the internal muxes and 56 - * dividers of composite clocks, will remain defined here. 57 - */ 58 - #define CLKID_XTAL_IN 0 59 - #define CLKID_DSPA_SEL 61 60 - #define CLKID_DSPB_SEL 62 61 - #define CLKID_SARADC_SEL 74 62 - #define CLKID_SYS_A_SEL 89 63 - #define CLKID_SYS_A_DIV 90 64 - #define CLKID_SYS_A 91 65 - #define CLKID_SYS_B_SEL 92 66 - #define CLKID_SYS_B_DIV 93 67 - #define CLKID_SYS_B 94 68 - #define CLKID_DSPA_A_DIV 96 69 - #define CLKID_DSPA_A 97 70 - #define CLKID_DSPA_B_DIV 99 71 - #define CLKID_DSPA_B 100 72 - #define CLKID_DSPB_A_DIV 102 73 - #define CLKID_DSPB_A 103 74 - #define CLKID_DSPB_B_DIV 105 75 - #define CLKID_DSPB_B 106 76 - #define CLKID_RTC_32K_IN 107 77 - #define CLKID_RTC_32K_DIV 108 78 - #define CLKID_RTC_32K_XTAL 109 79 - #define CLKID_RTC_32K_SEL 110 80 - #define CLKID_CECB_32K_IN 111 81 - #define CLKID_CECB_32K_DIV 112 82 - #define CLKID_CECA_32K_IN 115 83 - #define CLKID_CECA_32K_DIV 116 84 - #define CLKID_DIV2_PRE 119 85 - #define CLKID_24M_DIV2 120 86 - #define CLKID_GEN_DIV 122 87 - #define CLKID_SARADC_DIV 123 88 - #define CLKID_PWM_A_DIV 125 89 - #define CLKID_PWM_B_DIV 127 90 - #define CLKID_PWM_C_DIV 129 91 - #define CLKID_PWM_D_DIV 131 92 - #define CLKID_PWM_E_DIV 133 93 - #define CLKID_PWM_F_DIV 135 94 - #define CLKID_SPICC_SEL 136 95 - #define CLKID_SPICC_DIV 137 96 - #define CLKID_SPICC_SEL2 138 97 - #define CLKID_TS_DIV 139 98 - #define CLKID_SPIFC_SEL 140 99 - #define CLKID_SPIFC_DIV 141 100 - #define CLKID_SPIFC_SEL2 142 101 - #define CLKID_USB_BUS_SEL 143 102 - #define CLKID_USB_BUS_DIV 144 103 - #define CLKID_SD_EMMC_SEL 145 104 - #define CLKID_SD_EMMC_DIV 146 105 - #define CLKID_PSRAM_SEL 148 106 - #define CLKID_PSRAM_DIV 149 107 - #define CLKID_PSRAM_SEL2 150 108 - #define CLKID_DMC_SEL 151 109 - #define CLKID_DMC_DIV 152 110 - #define CLKID_DMC_SEL2 153 111 - #define NR_CLKS 154 112 - 113 46 #endif /* __A1_PERIPHERALS_H */
+22 -18
drivers/clk/meson/a1-pll.c
··· 8 8 */ 9 9 10 10 #include <linux/clk-provider.h> 11 - #include <linux/of_device.h> 11 + #include <linux/mod_devicetable.h> 12 12 #include <linux/platform_device.h> 13 13 #include "a1-pll.h" 14 14 #include "clk-regmap.h" 15 + #include "meson-clkc-utils.h" 16 + 17 + #include <dt-bindings/clock/amlogic,a1-pll-clkc.h> 15 18 16 19 static struct clk_regmap fixed_pll_dco = { 17 20 .data = &(struct meson_clk_pll_data){ ··· 271 268 }; 272 269 273 270 /* Array of all clocks registered by this provider */ 274 - static struct clk_hw_onecell_data a1_pll_clks = { 275 - .hws = { 276 - [CLKID_FIXED_PLL_DCO] = &fixed_pll_dco.hw, 277 - [CLKID_FIXED_PLL] = &fixed_pll.hw, 278 - [CLKID_FCLK_DIV2_DIV] = &fclk_div2_div.hw, 279 - [CLKID_FCLK_DIV3_DIV] = &fclk_div3_div.hw, 280 - [CLKID_FCLK_DIV5_DIV] = &fclk_div5_div.hw, 281 - [CLKID_FCLK_DIV7_DIV] = &fclk_div7_div.hw, 282 - [CLKID_FCLK_DIV2] = &fclk_div2.hw, 283 - [CLKID_FCLK_DIV3] = &fclk_div3.hw, 284 - [CLKID_FCLK_DIV5] = &fclk_div5.hw, 285 - [CLKID_FCLK_DIV7] = &fclk_div7.hw, 286 - [CLKID_HIFI_PLL] = &hifi_pll.hw, 287 - [NR_PLL_CLKS] = NULL, 288 - }, 289 - .num = NR_PLL_CLKS, 271 + static struct clk_hw *a1_pll_hw_clks[] = { 272 + [CLKID_FIXED_PLL_DCO] = &fixed_pll_dco.hw, 273 + [CLKID_FIXED_PLL] = &fixed_pll.hw, 274 + [CLKID_FCLK_DIV2_DIV] = &fclk_div2_div.hw, 275 + [CLKID_FCLK_DIV3_DIV] = &fclk_div3_div.hw, 276 + [CLKID_FCLK_DIV5_DIV] = &fclk_div5_div.hw, 277 + [CLKID_FCLK_DIV7_DIV] = &fclk_div7_div.hw, 278 + [CLKID_FCLK_DIV2] = &fclk_div2.hw, 279 + [CLKID_FCLK_DIV3] = &fclk_div3.hw, 280 + [CLKID_FCLK_DIV5] = &fclk_div5.hw, 281 + [CLKID_FCLK_DIV7] = &fclk_div7.hw, 282 + [CLKID_HIFI_PLL] = &hifi_pll.hw, 290 283 }; 291 284 292 285 static struct clk_regmap *const a1_pll_regmaps[] = { ··· 299 300 .reg_bits = 32, 300 301 .val_bits = 32, 301 302 .reg_stride = 4, 303 + }; 304 + 305 + static struct meson_clk_hw_data a1_pll_clks = { 306 + .hws = a1_pll_hw_clks, 307 + .num = ARRAY_SIZE(a1_pll_hw_clks), 302 308 }; 303 309 304 310 static int meson_a1_pll_probe(struct platform_device *pdev) ··· 336 332 clkid); 337 333 } 338 334 339 - return devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, 335 + return devm_of_clk_add_hw_provider(dev, meson_clk_hw_get, 340 336 &a1_pll_clks); 341 337 } 342 338
-19
drivers/clk/meson/a1-pll.h
··· 25 25 #define ANACTRL_HIFIPLL_CTRL4 0xd0 26 26 #define ANACTRL_HIFIPLL_STS 0xd4 27 27 28 - /* include the CLKIDs that have been made part of the DT binding */ 29 - #include <dt-bindings/clock/amlogic,a1-pll-clkc.h> 30 - 31 - /* 32 - * CLKID index values for internal clocks 33 - * 34 - * These indices are entirely contrived and do not map onto the hardware. 35 - * It has now been decided to expose everything by default in the DT header: 36 - * include/dt-bindings/clock/a1-pll-clkc.h. Only the clocks ids we don't want 37 - * to expose, such as the internal muxes and dividers of composite clocks, 38 - * will remain defined here. 39 - */ 40 - #define CLKID_FIXED_PLL_DCO 0 41 - #define CLKID_FCLK_DIV2_DIV 2 42 - #define CLKID_FCLK_DIV3_DIV 3 43 - #define CLKID_FCLK_DIV5_DIV 4 44 - #define CLKID_FCLK_DIV7_DIV 5 45 - #define NR_PLL_CLKS 11 46 - 47 28 #endif /* __A1_PLL_H */
+25 -23
drivers/clk/meson/axg-aoclk.c
··· 14 14 #include <linux/mfd/syscon.h> 15 15 #include <linux/module.h> 16 16 #include "meson-aoclk.h" 17 - #include "axg-aoclk.h" 18 17 19 18 #include "clk-regmap.h" 20 19 #include "clk-dualdiv.h" 20 + 21 + #include <dt-bindings/clock/axg-aoclkc.h> 22 + #include <dt-bindings/reset/axg-aoclkc.h> 21 23 22 24 /* 23 25 * AO Configuration Clock registers offsets ··· 290 288 &axg_aoclk_saradc_gate, 291 289 }; 292 290 293 - static const struct clk_hw_onecell_data axg_aoclk_onecell_data = { 294 - .hws = { 295 - [CLKID_AO_REMOTE] = &axg_aoclk_remote.hw, 296 - [CLKID_AO_I2C_MASTER] = &axg_aoclk_i2c_master.hw, 297 - [CLKID_AO_I2C_SLAVE] = &axg_aoclk_i2c_slave.hw, 298 - [CLKID_AO_UART1] = &axg_aoclk_uart1.hw, 299 - [CLKID_AO_UART2] = &axg_aoclk_uart2.hw, 300 - [CLKID_AO_IR_BLASTER] = &axg_aoclk_ir_blaster.hw, 301 - [CLKID_AO_SAR_ADC] = &axg_aoclk_saradc.hw, 302 - [CLKID_AO_CLK81] = &axg_aoclk_clk81.hw, 303 - [CLKID_AO_SAR_ADC_SEL] = &axg_aoclk_saradc_mux.hw, 304 - [CLKID_AO_SAR_ADC_DIV] = &axg_aoclk_saradc_div.hw, 305 - [CLKID_AO_SAR_ADC_CLK] = &axg_aoclk_saradc_gate.hw, 306 - [CLKID_AO_CTS_OSCIN] = &axg_aoclk_cts_oscin.hw, 307 - [CLKID_AO_32K_PRE] = &axg_aoclk_32k_pre.hw, 308 - [CLKID_AO_32K_DIV] = &axg_aoclk_32k_div.hw, 309 - [CLKID_AO_32K_SEL] = &axg_aoclk_32k_sel.hw, 310 - [CLKID_AO_32K] = &axg_aoclk_32k.hw, 311 - [CLKID_AO_CTS_RTC_OSCIN] = &axg_aoclk_cts_rtc_oscin.hw, 312 - }, 313 - .num = NR_CLKS, 291 + static struct clk_hw *axg_aoclk_hw_clks[] = { 292 + [CLKID_AO_REMOTE] = &axg_aoclk_remote.hw, 293 + [CLKID_AO_I2C_MASTER] = &axg_aoclk_i2c_master.hw, 294 + [CLKID_AO_I2C_SLAVE] = &axg_aoclk_i2c_slave.hw, 295 + [CLKID_AO_UART1] = &axg_aoclk_uart1.hw, 296 + [CLKID_AO_UART2] = &axg_aoclk_uart2.hw, 297 + [CLKID_AO_IR_BLASTER] = &axg_aoclk_ir_blaster.hw, 298 + [CLKID_AO_SAR_ADC] = &axg_aoclk_saradc.hw, 299 + [CLKID_AO_CLK81] = &axg_aoclk_clk81.hw, 300 + [CLKID_AO_SAR_ADC_SEL] = &axg_aoclk_saradc_mux.hw, 301 + [CLKID_AO_SAR_ADC_DIV] = &axg_aoclk_saradc_div.hw, 302 + [CLKID_AO_SAR_ADC_CLK] = &axg_aoclk_saradc_gate.hw, 303 + [CLKID_AO_CTS_OSCIN] = &axg_aoclk_cts_oscin.hw, 304 + [CLKID_AO_32K_PRE] = &axg_aoclk_32k_pre.hw, 305 + [CLKID_AO_32K_DIV] = &axg_aoclk_32k_div.hw, 306 + [CLKID_AO_32K_SEL] = &axg_aoclk_32k_sel.hw, 307 + [CLKID_AO_32K] = &axg_aoclk_32k.hw, 308 + [CLKID_AO_CTS_RTC_OSCIN] = &axg_aoclk_cts_rtc_oscin.hw, 314 309 }; 315 310 316 311 static const struct meson_aoclk_data axg_aoclkc_data = { ··· 316 317 .reset = axg_aoclk_reset, 317 318 .num_clks = ARRAY_SIZE(axg_aoclk_regmap), 318 319 .clks = axg_aoclk_regmap, 319 - .hw_data = &axg_aoclk_onecell_data, 320 + .hw_clks = { 321 + .hws = axg_aoclk_hw_clks, 322 + .num = ARRAY_SIZE(axg_aoclk_hw_clks), 323 + }, 320 324 }; 321 325 322 326 static const struct of_device_id axg_aoclkc_match_table[] = {
-18
drivers/clk/meson/axg-aoclk.h
··· 1 - /* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */ 2 - /* 3 - * Copyright (c) 2017 BayLibre, SAS 4 - * Author: Neil Armstrong <narmstrong@baylibre.com> 5 - * 6 - * Copyright (c) 2018 Amlogic, inc. 7 - * Author: Qiufang Dai <qiufang.dai@amlogic.com> 8 - */ 9 - 10 - #ifndef __AXG_AOCLKC_H 11 - #define __AXG_AOCLKC_H 12 - 13 - #define NR_CLKS 17 14 - 15 - #include <dt-bindings/clock/axg-aoclkc.h> 16 - #include <dt-bindings/reset/axg-aoclkc.h> 17 - 18 - #endif /* __AXG_AOCLKC_H */
+426 -427
drivers/clk/meson/axg-audio.c
··· 7 7 #include <linux/clk.h> 8 8 #include <linux/clk-provider.h> 9 9 #include <linux/init.h> 10 - #include <linux/of_device.h> 11 10 #include <linux/module.h> 11 + #include <linux/of.h> 12 12 #include <linux/platform_device.h> 13 13 #include <linux/regmap.h> 14 14 #include <linux/reset.h> 15 15 #include <linux/reset-controller.h> 16 16 #include <linux/slab.h> 17 17 18 + #include "meson-clkc-utils.h" 18 19 #include "axg-audio.h" 19 20 #include "clk-regmap.h" 20 21 #include "clk-phase.h" 21 22 #include "sclk-div.h" 23 + 24 + #include <dt-bindings/clock/axg-audio-clkc.h> 22 25 23 26 #define AUD_GATE(_name, _reg, _bit, _pname, _iflags) { \ 24 27 .data = &(struct clk_regmap_gate_data){ \ ··· 814 811 * Array of all clocks provided by this provider 815 812 * The input clocks of the controller will be populated at runtime 816 813 */ 817 - static struct clk_hw_onecell_data axg_audio_hw_onecell_data = { 818 - .hws = { 819 - [AUD_CLKID_DDR_ARB] = &ddr_arb.hw, 820 - [AUD_CLKID_PDM] = &pdm.hw, 821 - [AUD_CLKID_TDMIN_A] = &tdmin_a.hw, 822 - [AUD_CLKID_TDMIN_B] = &tdmin_b.hw, 823 - [AUD_CLKID_TDMIN_C] = &tdmin_c.hw, 824 - [AUD_CLKID_TDMIN_LB] = &tdmin_lb.hw, 825 - [AUD_CLKID_TDMOUT_A] = &tdmout_a.hw, 826 - [AUD_CLKID_TDMOUT_B] = &tdmout_b.hw, 827 - [AUD_CLKID_TDMOUT_C] = &tdmout_c.hw, 828 - [AUD_CLKID_FRDDR_A] = &frddr_a.hw, 829 - [AUD_CLKID_FRDDR_B] = &frddr_b.hw, 830 - [AUD_CLKID_FRDDR_C] = &frddr_c.hw, 831 - [AUD_CLKID_TODDR_A] = &toddr_a.hw, 832 - [AUD_CLKID_TODDR_B] = &toddr_b.hw, 833 - [AUD_CLKID_TODDR_C] = &toddr_c.hw, 834 - [AUD_CLKID_LOOPBACK] = &loopback.hw, 835 - [AUD_CLKID_SPDIFIN] = &spdifin.hw, 836 - [AUD_CLKID_SPDIFOUT] = &spdifout.hw, 837 - [AUD_CLKID_RESAMPLE] = &resample.hw, 838 - [AUD_CLKID_POWER_DETECT] = &power_detect.hw, 839 - [AUD_CLKID_MST_A_MCLK_SEL] = &mst_a_mclk_sel.hw, 840 - [AUD_CLKID_MST_B_MCLK_SEL] = &mst_b_mclk_sel.hw, 841 - [AUD_CLKID_MST_C_MCLK_SEL] = &mst_c_mclk_sel.hw, 842 - [AUD_CLKID_MST_D_MCLK_SEL] = &mst_d_mclk_sel.hw, 843 - [AUD_CLKID_MST_E_MCLK_SEL] = &mst_e_mclk_sel.hw, 844 - [AUD_CLKID_MST_F_MCLK_SEL] = &mst_f_mclk_sel.hw, 845 - [AUD_CLKID_MST_A_MCLK_DIV] = &mst_a_mclk_div.hw, 846 - [AUD_CLKID_MST_B_MCLK_DIV] = &mst_b_mclk_div.hw, 847 - [AUD_CLKID_MST_C_MCLK_DIV] = &mst_c_mclk_div.hw, 848 - [AUD_CLKID_MST_D_MCLK_DIV] = &mst_d_mclk_div.hw, 849 - [AUD_CLKID_MST_E_MCLK_DIV] = &mst_e_mclk_div.hw, 850 - [AUD_CLKID_MST_F_MCLK_DIV] = &mst_f_mclk_div.hw, 851 - [AUD_CLKID_MST_A_MCLK] = &mst_a_mclk.hw, 852 - [AUD_CLKID_MST_B_MCLK] = &mst_b_mclk.hw, 853 - [AUD_CLKID_MST_C_MCLK] = &mst_c_mclk.hw, 854 - [AUD_CLKID_MST_D_MCLK] = &mst_d_mclk.hw, 855 - [AUD_CLKID_MST_E_MCLK] = &mst_e_mclk.hw, 856 - [AUD_CLKID_MST_F_MCLK] = &mst_f_mclk.hw, 857 - [AUD_CLKID_SPDIFOUT_CLK_SEL] = &spdifout_clk_sel.hw, 858 - [AUD_CLKID_SPDIFOUT_CLK_DIV] = &spdifout_clk_div.hw, 859 - [AUD_CLKID_SPDIFOUT_CLK] = &spdifout_clk.hw, 860 - [AUD_CLKID_SPDIFIN_CLK_SEL] = &spdifin_clk_sel.hw, 861 - [AUD_CLKID_SPDIFIN_CLK_DIV] = &spdifin_clk_div.hw, 862 - [AUD_CLKID_SPDIFIN_CLK] = &spdifin_clk.hw, 863 - [AUD_CLKID_PDM_DCLK_SEL] = &pdm_dclk_sel.hw, 864 - [AUD_CLKID_PDM_DCLK_DIV] = &pdm_dclk_div.hw, 865 - [AUD_CLKID_PDM_DCLK] = &pdm_dclk.hw, 866 - [AUD_CLKID_PDM_SYSCLK_SEL] = &pdm_sysclk_sel.hw, 867 - [AUD_CLKID_PDM_SYSCLK_DIV] = &pdm_sysclk_div.hw, 868 - [AUD_CLKID_PDM_SYSCLK] = &pdm_sysclk.hw, 869 - [AUD_CLKID_MST_A_SCLK_PRE_EN] = &mst_a_sclk_pre_en.hw, 870 - [AUD_CLKID_MST_B_SCLK_PRE_EN] = &mst_b_sclk_pre_en.hw, 871 - [AUD_CLKID_MST_C_SCLK_PRE_EN] = &mst_c_sclk_pre_en.hw, 872 - [AUD_CLKID_MST_D_SCLK_PRE_EN] = &mst_d_sclk_pre_en.hw, 873 - [AUD_CLKID_MST_E_SCLK_PRE_EN] = &mst_e_sclk_pre_en.hw, 874 - [AUD_CLKID_MST_F_SCLK_PRE_EN] = &mst_f_sclk_pre_en.hw, 875 - [AUD_CLKID_MST_A_SCLK_DIV] = &mst_a_sclk_div.hw, 876 - [AUD_CLKID_MST_B_SCLK_DIV] = &mst_b_sclk_div.hw, 877 - [AUD_CLKID_MST_C_SCLK_DIV] = &mst_c_sclk_div.hw, 878 - [AUD_CLKID_MST_D_SCLK_DIV] = &mst_d_sclk_div.hw, 879 - [AUD_CLKID_MST_E_SCLK_DIV] = &mst_e_sclk_div.hw, 880 - [AUD_CLKID_MST_F_SCLK_DIV] = &mst_f_sclk_div.hw, 881 - [AUD_CLKID_MST_A_SCLK_POST_EN] = &mst_a_sclk_post_en.hw, 882 - [AUD_CLKID_MST_B_SCLK_POST_EN] = &mst_b_sclk_post_en.hw, 883 - [AUD_CLKID_MST_C_SCLK_POST_EN] = &mst_c_sclk_post_en.hw, 884 - [AUD_CLKID_MST_D_SCLK_POST_EN] = &mst_d_sclk_post_en.hw, 885 - [AUD_CLKID_MST_E_SCLK_POST_EN] = &mst_e_sclk_post_en.hw, 886 - [AUD_CLKID_MST_F_SCLK_POST_EN] = &mst_f_sclk_post_en.hw, 887 - [AUD_CLKID_MST_A_SCLK] = &mst_a_sclk.hw, 888 - [AUD_CLKID_MST_B_SCLK] = &mst_b_sclk.hw, 889 - [AUD_CLKID_MST_C_SCLK] = &mst_c_sclk.hw, 890 - [AUD_CLKID_MST_D_SCLK] = &mst_d_sclk.hw, 891 - [AUD_CLKID_MST_E_SCLK] = &mst_e_sclk.hw, 892 - [AUD_CLKID_MST_F_SCLK] = &mst_f_sclk.hw, 893 - [AUD_CLKID_MST_A_LRCLK_DIV] = &mst_a_lrclk_div.hw, 894 - [AUD_CLKID_MST_B_LRCLK_DIV] = &mst_b_lrclk_div.hw, 895 - [AUD_CLKID_MST_C_LRCLK_DIV] = &mst_c_lrclk_div.hw, 896 - [AUD_CLKID_MST_D_LRCLK_DIV] = &mst_d_lrclk_div.hw, 897 - [AUD_CLKID_MST_E_LRCLK_DIV] = &mst_e_lrclk_div.hw, 898 - [AUD_CLKID_MST_F_LRCLK_DIV] = &mst_f_lrclk_div.hw, 899 - [AUD_CLKID_MST_A_LRCLK] = &mst_a_lrclk.hw, 900 - [AUD_CLKID_MST_B_LRCLK] = &mst_b_lrclk.hw, 901 - [AUD_CLKID_MST_C_LRCLK] = &mst_c_lrclk.hw, 902 - [AUD_CLKID_MST_D_LRCLK] = &mst_d_lrclk.hw, 903 - [AUD_CLKID_MST_E_LRCLK] = &mst_e_lrclk.hw, 904 - [AUD_CLKID_MST_F_LRCLK] = &mst_f_lrclk.hw, 905 - [AUD_CLKID_TDMIN_A_SCLK_SEL] = &tdmin_a_sclk_sel.hw, 906 - [AUD_CLKID_TDMIN_B_SCLK_SEL] = &tdmin_b_sclk_sel.hw, 907 - [AUD_CLKID_TDMIN_C_SCLK_SEL] = &tdmin_c_sclk_sel.hw, 908 - [AUD_CLKID_TDMIN_LB_SCLK_SEL] = &tdmin_lb_sclk_sel.hw, 909 - [AUD_CLKID_TDMOUT_A_SCLK_SEL] = &tdmout_a_sclk_sel.hw, 910 - [AUD_CLKID_TDMOUT_B_SCLK_SEL] = &tdmout_b_sclk_sel.hw, 911 - [AUD_CLKID_TDMOUT_C_SCLK_SEL] = &tdmout_c_sclk_sel.hw, 912 - [AUD_CLKID_TDMIN_A_SCLK_PRE_EN] = &tdmin_a_sclk_pre_en.hw, 913 - [AUD_CLKID_TDMIN_B_SCLK_PRE_EN] = &tdmin_b_sclk_pre_en.hw, 914 - [AUD_CLKID_TDMIN_C_SCLK_PRE_EN] = &tdmin_c_sclk_pre_en.hw, 915 - [AUD_CLKID_TDMIN_LB_SCLK_PRE_EN] = &tdmin_lb_sclk_pre_en.hw, 916 - [AUD_CLKID_TDMOUT_A_SCLK_PRE_EN] = &tdmout_a_sclk_pre_en.hw, 917 - [AUD_CLKID_TDMOUT_B_SCLK_PRE_EN] = &tdmout_b_sclk_pre_en.hw, 918 - [AUD_CLKID_TDMOUT_C_SCLK_PRE_EN] = &tdmout_c_sclk_pre_en.hw, 919 - [AUD_CLKID_TDMIN_A_SCLK_POST_EN] = &tdmin_a_sclk_post_en.hw, 920 - [AUD_CLKID_TDMIN_B_SCLK_POST_EN] = &tdmin_b_sclk_post_en.hw, 921 - [AUD_CLKID_TDMIN_C_SCLK_POST_EN] = &tdmin_c_sclk_post_en.hw, 922 - [AUD_CLKID_TDMIN_LB_SCLK_POST_EN] = &tdmin_lb_sclk_post_en.hw, 923 - [AUD_CLKID_TDMOUT_A_SCLK_POST_EN] = &tdmout_a_sclk_post_en.hw, 924 - [AUD_CLKID_TDMOUT_B_SCLK_POST_EN] = &tdmout_b_sclk_post_en.hw, 925 - [AUD_CLKID_TDMOUT_C_SCLK_POST_EN] = &tdmout_c_sclk_post_en.hw, 926 - [AUD_CLKID_TDMIN_A_SCLK] = &tdmin_a_sclk.hw, 927 - [AUD_CLKID_TDMIN_B_SCLK] = &tdmin_b_sclk.hw, 928 - [AUD_CLKID_TDMIN_C_SCLK] = &tdmin_c_sclk.hw, 929 - [AUD_CLKID_TDMIN_LB_SCLK] = &tdmin_lb_sclk.hw, 930 - [AUD_CLKID_TDMOUT_A_SCLK] = &axg_tdmout_a_sclk.hw, 931 - [AUD_CLKID_TDMOUT_B_SCLK] = &axg_tdmout_b_sclk.hw, 932 - [AUD_CLKID_TDMOUT_C_SCLK] = &axg_tdmout_c_sclk.hw, 933 - [AUD_CLKID_TDMIN_A_LRCLK] = &tdmin_a_lrclk.hw, 934 - [AUD_CLKID_TDMIN_B_LRCLK] = &tdmin_b_lrclk.hw, 935 - [AUD_CLKID_TDMIN_C_LRCLK] = &tdmin_c_lrclk.hw, 936 - [AUD_CLKID_TDMIN_LB_LRCLK] = &tdmin_lb_lrclk.hw, 937 - [AUD_CLKID_TDMOUT_A_LRCLK] = &tdmout_a_lrclk.hw, 938 - [AUD_CLKID_TDMOUT_B_LRCLK] = &tdmout_b_lrclk.hw, 939 - [AUD_CLKID_TDMOUT_C_LRCLK] = &tdmout_c_lrclk.hw, 940 - [AUD_CLKID_TOP] = &axg_aud_top, 941 - [NR_CLKS] = NULL, 942 - }, 943 - .num = NR_CLKS, 814 + static struct clk_hw *axg_audio_hw_clks[] = { 815 + [AUD_CLKID_DDR_ARB] = &ddr_arb.hw, 816 + [AUD_CLKID_PDM] = &pdm.hw, 817 + [AUD_CLKID_TDMIN_A] = &tdmin_a.hw, 818 + [AUD_CLKID_TDMIN_B] = &tdmin_b.hw, 819 + [AUD_CLKID_TDMIN_C] = &tdmin_c.hw, 820 + [AUD_CLKID_TDMIN_LB] = &tdmin_lb.hw, 821 + [AUD_CLKID_TDMOUT_A] = &tdmout_a.hw, 822 + [AUD_CLKID_TDMOUT_B] = &tdmout_b.hw, 823 + [AUD_CLKID_TDMOUT_C] = &tdmout_c.hw, 824 + [AUD_CLKID_FRDDR_A] = &frddr_a.hw, 825 + [AUD_CLKID_FRDDR_B] = &frddr_b.hw, 826 + [AUD_CLKID_FRDDR_C] = &frddr_c.hw, 827 + [AUD_CLKID_TODDR_A] = &toddr_a.hw, 828 + [AUD_CLKID_TODDR_B] = &toddr_b.hw, 829 + [AUD_CLKID_TODDR_C] = &toddr_c.hw, 830 + [AUD_CLKID_LOOPBACK] = &loopback.hw, 831 + [AUD_CLKID_SPDIFIN] = &spdifin.hw, 832 + [AUD_CLKID_SPDIFOUT] = &spdifout.hw, 833 + [AUD_CLKID_RESAMPLE] = &resample.hw, 834 + [AUD_CLKID_POWER_DETECT] = &power_detect.hw, 835 + [AUD_CLKID_MST_A_MCLK_SEL] = &mst_a_mclk_sel.hw, 836 + [AUD_CLKID_MST_B_MCLK_SEL] = &mst_b_mclk_sel.hw, 837 + [AUD_CLKID_MST_C_MCLK_SEL] = &mst_c_mclk_sel.hw, 838 + [AUD_CLKID_MST_D_MCLK_SEL] = &mst_d_mclk_sel.hw, 839 + [AUD_CLKID_MST_E_MCLK_SEL] = &mst_e_mclk_sel.hw, 840 + [AUD_CLKID_MST_F_MCLK_SEL] = &mst_f_mclk_sel.hw, 841 + [AUD_CLKID_MST_A_MCLK_DIV] = &mst_a_mclk_div.hw, 842 + [AUD_CLKID_MST_B_MCLK_DIV] = &mst_b_mclk_div.hw, 843 + [AUD_CLKID_MST_C_MCLK_DIV] = &mst_c_mclk_div.hw, 844 + [AUD_CLKID_MST_D_MCLK_DIV] = &mst_d_mclk_div.hw, 845 + [AUD_CLKID_MST_E_MCLK_DIV] = &mst_e_mclk_div.hw, 846 + [AUD_CLKID_MST_F_MCLK_DIV] = &mst_f_mclk_div.hw, 847 + [AUD_CLKID_MST_A_MCLK] = &mst_a_mclk.hw, 848 + [AUD_CLKID_MST_B_MCLK] = &mst_b_mclk.hw, 849 + [AUD_CLKID_MST_C_MCLK] = &mst_c_mclk.hw, 850 + [AUD_CLKID_MST_D_MCLK] = &mst_d_mclk.hw, 851 + [AUD_CLKID_MST_E_MCLK] = &mst_e_mclk.hw, 852 + [AUD_CLKID_MST_F_MCLK] = &mst_f_mclk.hw, 853 + [AUD_CLKID_SPDIFOUT_CLK_SEL] = &spdifout_clk_sel.hw, 854 + [AUD_CLKID_SPDIFOUT_CLK_DIV] = &spdifout_clk_div.hw, 855 + [AUD_CLKID_SPDIFOUT_CLK] = &spdifout_clk.hw, 856 + [AUD_CLKID_SPDIFIN_CLK_SEL] = &spdifin_clk_sel.hw, 857 + [AUD_CLKID_SPDIFIN_CLK_DIV] = &spdifin_clk_div.hw, 858 + [AUD_CLKID_SPDIFIN_CLK] = &spdifin_clk.hw, 859 + [AUD_CLKID_PDM_DCLK_SEL] = &pdm_dclk_sel.hw, 860 + [AUD_CLKID_PDM_DCLK_DIV] = &pdm_dclk_div.hw, 861 + [AUD_CLKID_PDM_DCLK] = &pdm_dclk.hw, 862 + [AUD_CLKID_PDM_SYSCLK_SEL] = &pdm_sysclk_sel.hw, 863 + [AUD_CLKID_PDM_SYSCLK_DIV] = &pdm_sysclk_div.hw, 864 + [AUD_CLKID_PDM_SYSCLK] = &pdm_sysclk.hw, 865 + [AUD_CLKID_MST_A_SCLK_PRE_EN] = &mst_a_sclk_pre_en.hw, 866 + [AUD_CLKID_MST_B_SCLK_PRE_EN] = &mst_b_sclk_pre_en.hw, 867 + [AUD_CLKID_MST_C_SCLK_PRE_EN] = &mst_c_sclk_pre_en.hw, 868 + [AUD_CLKID_MST_D_SCLK_PRE_EN] = &mst_d_sclk_pre_en.hw, 869 + [AUD_CLKID_MST_E_SCLK_PRE_EN] = &mst_e_sclk_pre_en.hw, 870 + [AUD_CLKID_MST_F_SCLK_PRE_EN] = &mst_f_sclk_pre_en.hw, 871 + [AUD_CLKID_MST_A_SCLK_DIV] = &mst_a_sclk_div.hw, 872 + [AUD_CLKID_MST_B_SCLK_DIV] = &mst_b_sclk_div.hw, 873 + [AUD_CLKID_MST_C_SCLK_DIV] = &mst_c_sclk_div.hw, 874 + [AUD_CLKID_MST_D_SCLK_DIV] = &mst_d_sclk_div.hw, 875 + [AUD_CLKID_MST_E_SCLK_DIV] = &mst_e_sclk_div.hw, 876 + [AUD_CLKID_MST_F_SCLK_DIV] = &mst_f_sclk_div.hw, 877 + [AUD_CLKID_MST_A_SCLK_POST_EN] = &mst_a_sclk_post_en.hw, 878 + [AUD_CLKID_MST_B_SCLK_POST_EN] = &mst_b_sclk_post_en.hw, 879 + [AUD_CLKID_MST_C_SCLK_POST_EN] = &mst_c_sclk_post_en.hw, 880 + [AUD_CLKID_MST_D_SCLK_POST_EN] = &mst_d_sclk_post_en.hw, 881 + [AUD_CLKID_MST_E_SCLK_POST_EN] = &mst_e_sclk_post_en.hw, 882 + [AUD_CLKID_MST_F_SCLK_POST_EN] = &mst_f_sclk_post_en.hw, 883 + [AUD_CLKID_MST_A_SCLK] = &mst_a_sclk.hw, 884 + [AUD_CLKID_MST_B_SCLK] = &mst_b_sclk.hw, 885 + [AUD_CLKID_MST_C_SCLK] = &mst_c_sclk.hw, 886 + [AUD_CLKID_MST_D_SCLK] = &mst_d_sclk.hw, 887 + [AUD_CLKID_MST_E_SCLK] = &mst_e_sclk.hw, 888 + [AUD_CLKID_MST_F_SCLK] = &mst_f_sclk.hw, 889 + [AUD_CLKID_MST_A_LRCLK_DIV] = &mst_a_lrclk_div.hw, 890 + [AUD_CLKID_MST_B_LRCLK_DIV] = &mst_b_lrclk_div.hw, 891 + [AUD_CLKID_MST_C_LRCLK_DIV] = &mst_c_lrclk_div.hw, 892 + [AUD_CLKID_MST_D_LRCLK_DIV] = &mst_d_lrclk_div.hw, 893 + [AUD_CLKID_MST_E_LRCLK_DIV] = &mst_e_lrclk_div.hw, 894 + [AUD_CLKID_MST_F_LRCLK_DIV] = &mst_f_lrclk_div.hw, 895 + [AUD_CLKID_MST_A_LRCLK] = &mst_a_lrclk.hw, 896 + [AUD_CLKID_MST_B_LRCLK] = &mst_b_lrclk.hw, 897 + [AUD_CLKID_MST_C_LRCLK] = &mst_c_lrclk.hw, 898 + [AUD_CLKID_MST_D_LRCLK] = &mst_d_lrclk.hw, 899 + [AUD_CLKID_MST_E_LRCLK] = &mst_e_lrclk.hw, 900 + [AUD_CLKID_MST_F_LRCLK] = &mst_f_lrclk.hw, 901 + [AUD_CLKID_TDMIN_A_SCLK_SEL] = &tdmin_a_sclk_sel.hw, 902 + [AUD_CLKID_TDMIN_B_SCLK_SEL] = &tdmin_b_sclk_sel.hw, 903 + [AUD_CLKID_TDMIN_C_SCLK_SEL] = &tdmin_c_sclk_sel.hw, 904 + [AUD_CLKID_TDMIN_LB_SCLK_SEL] = &tdmin_lb_sclk_sel.hw, 905 + [AUD_CLKID_TDMOUT_A_SCLK_SEL] = &tdmout_a_sclk_sel.hw, 906 + [AUD_CLKID_TDMOUT_B_SCLK_SEL] = &tdmout_b_sclk_sel.hw, 907 + [AUD_CLKID_TDMOUT_C_SCLK_SEL] = &tdmout_c_sclk_sel.hw, 908 + [AUD_CLKID_TDMIN_A_SCLK_PRE_EN] = &tdmin_a_sclk_pre_en.hw, 909 + [AUD_CLKID_TDMIN_B_SCLK_PRE_EN] = &tdmin_b_sclk_pre_en.hw, 910 + [AUD_CLKID_TDMIN_C_SCLK_PRE_EN] = &tdmin_c_sclk_pre_en.hw, 911 + [AUD_CLKID_TDMIN_LB_SCLK_PRE_EN] = &tdmin_lb_sclk_pre_en.hw, 912 + [AUD_CLKID_TDMOUT_A_SCLK_PRE_EN] = &tdmout_a_sclk_pre_en.hw, 913 + [AUD_CLKID_TDMOUT_B_SCLK_PRE_EN] = &tdmout_b_sclk_pre_en.hw, 914 + [AUD_CLKID_TDMOUT_C_SCLK_PRE_EN] = &tdmout_c_sclk_pre_en.hw, 915 + [AUD_CLKID_TDMIN_A_SCLK_POST_EN] = &tdmin_a_sclk_post_en.hw, 916 + [AUD_CLKID_TDMIN_B_SCLK_POST_EN] = &tdmin_b_sclk_post_en.hw, 917 + [AUD_CLKID_TDMIN_C_SCLK_POST_EN] = &tdmin_c_sclk_post_en.hw, 918 + [AUD_CLKID_TDMIN_LB_SCLK_POST_EN] = &tdmin_lb_sclk_post_en.hw, 919 + [AUD_CLKID_TDMOUT_A_SCLK_POST_EN] = &tdmout_a_sclk_post_en.hw, 920 + [AUD_CLKID_TDMOUT_B_SCLK_POST_EN] = &tdmout_b_sclk_post_en.hw, 921 + [AUD_CLKID_TDMOUT_C_SCLK_POST_EN] = &tdmout_c_sclk_post_en.hw, 922 + [AUD_CLKID_TDMIN_A_SCLK] = &tdmin_a_sclk.hw, 923 + [AUD_CLKID_TDMIN_B_SCLK] = &tdmin_b_sclk.hw, 924 + [AUD_CLKID_TDMIN_C_SCLK] = &tdmin_c_sclk.hw, 925 + [AUD_CLKID_TDMIN_LB_SCLK] = &tdmin_lb_sclk.hw, 926 + [AUD_CLKID_TDMOUT_A_SCLK] = &axg_tdmout_a_sclk.hw, 927 + [AUD_CLKID_TDMOUT_B_SCLK] = &axg_tdmout_b_sclk.hw, 928 + [AUD_CLKID_TDMOUT_C_SCLK] = &axg_tdmout_c_sclk.hw, 929 + [AUD_CLKID_TDMIN_A_LRCLK] = &tdmin_a_lrclk.hw, 930 + [AUD_CLKID_TDMIN_B_LRCLK] = &tdmin_b_lrclk.hw, 931 + [AUD_CLKID_TDMIN_C_LRCLK] = &tdmin_c_lrclk.hw, 932 + [AUD_CLKID_TDMIN_LB_LRCLK] = &tdmin_lb_lrclk.hw, 933 + [AUD_CLKID_TDMOUT_A_LRCLK] = &tdmout_a_lrclk.hw, 934 + [AUD_CLKID_TDMOUT_B_LRCLK] = &tdmout_b_lrclk.hw, 935 + [AUD_CLKID_TDMOUT_C_LRCLK] = &tdmout_c_lrclk.hw, 936 + [AUD_CLKID_TOP] = &axg_aud_top, 944 937 }; 945 938 946 939 /* 947 940 * Array of all G12A clocks provided by this provider 948 941 * The input clocks of the controller will be populated at runtime 949 942 */ 950 - static struct clk_hw_onecell_data g12a_audio_hw_onecell_data = { 951 - .hws = { 952 - [AUD_CLKID_DDR_ARB] = &ddr_arb.hw, 953 - [AUD_CLKID_PDM] = &pdm.hw, 954 - [AUD_CLKID_TDMIN_A] = &tdmin_a.hw, 955 - [AUD_CLKID_TDMIN_B] = &tdmin_b.hw, 956 - [AUD_CLKID_TDMIN_C] = &tdmin_c.hw, 957 - [AUD_CLKID_TDMIN_LB] = &tdmin_lb.hw, 958 - [AUD_CLKID_TDMOUT_A] = &tdmout_a.hw, 959 - [AUD_CLKID_TDMOUT_B] = &tdmout_b.hw, 960 - [AUD_CLKID_TDMOUT_C] = &tdmout_c.hw, 961 - [AUD_CLKID_FRDDR_A] = &frddr_a.hw, 962 - [AUD_CLKID_FRDDR_B] = &frddr_b.hw, 963 - [AUD_CLKID_FRDDR_C] = &frddr_c.hw, 964 - [AUD_CLKID_TODDR_A] = &toddr_a.hw, 965 - [AUD_CLKID_TODDR_B] = &toddr_b.hw, 966 - [AUD_CLKID_TODDR_C] = &toddr_c.hw, 967 - [AUD_CLKID_LOOPBACK] = &loopback.hw, 968 - [AUD_CLKID_SPDIFIN] = &spdifin.hw, 969 - [AUD_CLKID_SPDIFOUT] = &spdifout.hw, 970 - [AUD_CLKID_RESAMPLE] = &resample.hw, 971 - [AUD_CLKID_POWER_DETECT] = &power_detect.hw, 972 - [AUD_CLKID_SPDIFOUT_B] = &spdifout_b.hw, 973 - [AUD_CLKID_MST_A_MCLK_SEL] = &mst_a_mclk_sel.hw, 974 - [AUD_CLKID_MST_B_MCLK_SEL] = &mst_b_mclk_sel.hw, 975 - [AUD_CLKID_MST_C_MCLK_SEL] = &mst_c_mclk_sel.hw, 976 - [AUD_CLKID_MST_D_MCLK_SEL] = &mst_d_mclk_sel.hw, 977 - [AUD_CLKID_MST_E_MCLK_SEL] = &mst_e_mclk_sel.hw, 978 - [AUD_CLKID_MST_F_MCLK_SEL] = &mst_f_mclk_sel.hw, 979 - [AUD_CLKID_MST_A_MCLK_DIV] = &mst_a_mclk_div.hw, 980 - [AUD_CLKID_MST_B_MCLK_DIV] = &mst_b_mclk_div.hw, 981 - [AUD_CLKID_MST_C_MCLK_DIV] = &mst_c_mclk_div.hw, 982 - [AUD_CLKID_MST_D_MCLK_DIV] = &mst_d_mclk_div.hw, 983 - [AUD_CLKID_MST_E_MCLK_DIV] = &mst_e_mclk_div.hw, 984 - [AUD_CLKID_MST_F_MCLK_DIV] = &mst_f_mclk_div.hw, 985 - [AUD_CLKID_MST_A_MCLK] = &mst_a_mclk.hw, 986 - [AUD_CLKID_MST_B_MCLK] = &mst_b_mclk.hw, 987 - [AUD_CLKID_MST_C_MCLK] = &mst_c_mclk.hw, 988 - [AUD_CLKID_MST_D_MCLK] = &mst_d_mclk.hw, 989 - [AUD_CLKID_MST_E_MCLK] = &mst_e_mclk.hw, 990 - [AUD_CLKID_MST_F_MCLK] = &mst_f_mclk.hw, 991 - [AUD_CLKID_SPDIFOUT_CLK_SEL] = &spdifout_clk_sel.hw, 992 - [AUD_CLKID_SPDIFOUT_CLK_DIV] = &spdifout_clk_div.hw, 993 - [AUD_CLKID_SPDIFOUT_CLK] = &spdifout_clk.hw, 994 - [AUD_CLKID_SPDIFOUT_B_CLK_SEL] = &spdifout_b_clk_sel.hw, 995 - [AUD_CLKID_SPDIFOUT_B_CLK_DIV] = &spdifout_b_clk_div.hw, 996 - [AUD_CLKID_SPDIFOUT_B_CLK] = &spdifout_b_clk.hw, 997 - [AUD_CLKID_SPDIFIN_CLK_SEL] = &spdifin_clk_sel.hw, 998 - [AUD_CLKID_SPDIFIN_CLK_DIV] = &spdifin_clk_div.hw, 999 - [AUD_CLKID_SPDIFIN_CLK] = &spdifin_clk.hw, 1000 - [AUD_CLKID_PDM_DCLK_SEL] = &pdm_dclk_sel.hw, 1001 - [AUD_CLKID_PDM_DCLK_DIV] = &pdm_dclk_div.hw, 1002 - [AUD_CLKID_PDM_DCLK] = &pdm_dclk.hw, 1003 - [AUD_CLKID_PDM_SYSCLK_SEL] = &pdm_sysclk_sel.hw, 1004 - [AUD_CLKID_PDM_SYSCLK_DIV] = &pdm_sysclk_div.hw, 1005 - [AUD_CLKID_PDM_SYSCLK] = &pdm_sysclk.hw, 1006 - [AUD_CLKID_MST_A_SCLK_PRE_EN] = &mst_a_sclk_pre_en.hw, 1007 - [AUD_CLKID_MST_B_SCLK_PRE_EN] = &mst_b_sclk_pre_en.hw, 1008 - [AUD_CLKID_MST_C_SCLK_PRE_EN] = &mst_c_sclk_pre_en.hw, 1009 - [AUD_CLKID_MST_D_SCLK_PRE_EN] = &mst_d_sclk_pre_en.hw, 1010 - [AUD_CLKID_MST_E_SCLK_PRE_EN] = &mst_e_sclk_pre_en.hw, 1011 - [AUD_CLKID_MST_F_SCLK_PRE_EN] = &mst_f_sclk_pre_en.hw, 1012 - [AUD_CLKID_MST_A_SCLK_DIV] = &mst_a_sclk_div.hw, 1013 - [AUD_CLKID_MST_B_SCLK_DIV] = &mst_b_sclk_div.hw, 1014 - [AUD_CLKID_MST_C_SCLK_DIV] = &mst_c_sclk_div.hw, 1015 - [AUD_CLKID_MST_D_SCLK_DIV] = &mst_d_sclk_div.hw, 1016 - [AUD_CLKID_MST_E_SCLK_DIV] = &mst_e_sclk_div.hw, 1017 - [AUD_CLKID_MST_F_SCLK_DIV] = &mst_f_sclk_div.hw, 1018 - [AUD_CLKID_MST_A_SCLK_POST_EN] = &mst_a_sclk_post_en.hw, 1019 - [AUD_CLKID_MST_B_SCLK_POST_EN] = &mst_b_sclk_post_en.hw, 1020 - [AUD_CLKID_MST_C_SCLK_POST_EN] = &mst_c_sclk_post_en.hw, 1021 - [AUD_CLKID_MST_D_SCLK_POST_EN] = &mst_d_sclk_post_en.hw, 1022 - [AUD_CLKID_MST_E_SCLK_POST_EN] = &mst_e_sclk_post_en.hw, 1023 - [AUD_CLKID_MST_F_SCLK_POST_EN] = &mst_f_sclk_post_en.hw, 1024 - [AUD_CLKID_MST_A_SCLK] = &mst_a_sclk.hw, 1025 - [AUD_CLKID_MST_B_SCLK] = &mst_b_sclk.hw, 1026 - [AUD_CLKID_MST_C_SCLK] = &mst_c_sclk.hw, 1027 - [AUD_CLKID_MST_D_SCLK] = &mst_d_sclk.hw, 1028 - [AUD_CLKID_MST_E_SCLK] = &mst_e_sclk.hw, 1029 - [AUD_CLKID_MST_F_SCLK] = &mst_f_sclk.hw, 1030 - [AUD_CLKID_MST_A_LRCLK_DIV] = &mst_a_lrclk_div.hw, 1031 - [AUD_CLKID_MST_B_LRCLK_DIV] = &mst_b_lrclk_div.hw, 1032 - [AUD_CLKID_MST_C_LRCLK_DIV] = &mst_c_lrclk_div.hw, 1033 - [AUD_CLKID_MST_D_LRCLK_DIV] = &mst_d_lrclk_div.hw, 1034 - [AUD_CLKID_MST_E_LRCLK_DIV] = &mst_e_lrclk_div.hw, 1035 - [AUD_CLKID_MST_F_LRCLK_DIV] = &mst_f_lrclk_div.hw, 1036 - [AUD_CLKID_MST_A_LRCLK] = &mst_a_lrclk.hw, 1037 - [AUD_CLKID_MST_B_LRCLK] = &mst_b_lrclk.hw, 1038 - [AUD_CLKID_MST_C_LRCLK] = &mst_c_lrclk.hw, 1039 - [AUD_CLKID_MST_D_LRCLK] = &mst_d_lrclk.hw, 1040 - [AUD_CLKID_MST_E_LRCLK] = &mst_e_lrclk.hw, 1041 - [AUD_CLKID_MST_F_LRCLK] = &mst_f_lrclk.hw, 1042 - [AUD_CLKID_TDMIN_A_SCLK_SEL] = &tdmin_a_sclk_sel.hw, 1043 - [AUD_CLKID_TDMIN_B_SCLK_SEL] = &tdmin_b_sclk_sel.hw, 1044 - [AUD_CLKID_TDMIN_C_SCLK_SEL] = &tdmin_c_sclk_sel.hw, 1045 - [AUD_CLKID_TDMIN_LB_SCLK_SEL] = &tdmin_lb_sclk_sel.hw, 1046 - [AUD_CLKID_TDMOUT_A_SCLK_SEL] = &tdmout_a_sclk_sel.hw, 1047 - [AUD_CLKID_TDMOUT_B_SCLK_SEL] = &tdmout_b_sclk_sel.hw, 1048 - [AUD_CLKID_TDMOUT_C_SCLK_SEL] = &tdmout_c_sclk_sel.hw, 1049 - [AUD_CLKID_TDMIN_A_SCLK_PRE_EN] = &tdmin_a_sclk_pre_en.hw, 1050 - [AUD_CLKID_TDMIN_B_SCLK_PRE_EN] = &tdmin_b_sclk_pre_en.hw, 1051 - [AUD_CLKID_TDMIN_C_SCLK_PRE_EN] = &tdmin_c_sclk_pre_en.hw, 1052 - [AUD_CLKID_TDMIN_LB_SCLK_PRE_EN] = &tdmin_lb_sclk_pre_en.hw, 1053 - [AUD_CLKID_TDMOUT_A_SCLK_PRE_EN] = &tdmout_a_sclk_pre_en.hw, 1054 - [AUD_CLKID_TDMOUT_B_SCLK_PRE_EN] = &tdmout_b_sclk_pre_en.hw, 1055 - [AUD_CLKID_TDMOUT_C_SCLK_PRE_EN] = &tdmout_c_sclk_pre_en.hw, 1056 - [AUD_CLKID_TDMIN_A_SCLK_POST_EN] = &tdmin_a_sclk_post_en.hw, 1057 - [AUD_CLKID_TDMIN_B_SCLK_POST_EN] = &tdmin_b_sclk_post_en.hw, 1058 - [AUD_CLKID_TDMIN_C_SCLK_POST_EN] = &tdmin_c_sclk_post_en.hw, 1059 - [AUD_CLKID_TDMIN_LB_SCLK_POST_EN] = &tdmin_lb_sclk_post_en.hw, 1060 - [AUD_CLKID_TDMOUT_A_SCLK_POST_EN] = &tdmout_a_sclk_post_en.hw, 1061 - [AUD_CLKID_TDMOUT_B_SCLK_POST_EN] = &tdmout_b_sclk_post_en.hw, 1062 - [AUD_CLKID_TDMOUT_C_SCLK_POST_EN] = &tdmout_c_sclk_post_en.hw, 1063 - [AUD_CLKID_TDMIN_A_SCLK] = &tdmin_a_sclk.hw, 1064 - [AUD_CLKID_TDMIN_B_SCLK] = &tdmin_b_sclk.hw, 1065 - [AUD_CLKID_TDMIN_C_SCLK] = &tdmin_c_sclk.hw, 1066 - [AUD_CLKID_TDMIN_LB_SCLK] = &tdmin_lb_sclk.hw, 1067 - [AUD_CLKID_TDMOUT_A_SCLK] = &g12a_tdmout_a_sclk.hw, 1068 - [AUD_CLKID_TDMOUT_B_SCLK] = &g12a_tdmout_b_sclk.hw, 1069 - [AUD_CLKID_TDMOUT_C_SCLK] = &g12a_tdmout_c_sclk.hw, 1070 - [AUD_CLKID_TDMIN_A_LRCLK] = &tdmin_a_lrclk.hw, 1071 - [AUD_CLKID_TDMIN_B_LRCLK] = &tdmin_b_lrclk.hw, 1072 - [AUD_CLKID_TDMIN_C_LRCLK] = &tdmin_c_lrclk.hw, 1073 - [AUD_CLKID_TDMIN_LB_LRCLK] = &tdmin_lb_lrclk.hw, 1074 - [AUD_CLKID_TDMOUT_A_LRCLK] = &tdmout_a_lrclk.hw, 1075 - [AUD_CLKID_TDMOUT_B_LRCLK] = &tdmout_b_lrclk.hw, 1076 - [AUD_CLKID_TDMOUT_C_LRCLK] = &tdmout_c_lrclk.hw, 1077 - [AUD_CLKID_TDM_MCLK_PAD0] = &g12a_tdm_mclk_pad_0.hw, 1078 - [AUD_CLKID_TDM_MCLK_PAD1] = &g12a_tdm_mclk_pad_1.hw, 1079 - [AUD_CLKID_TDM_LRCLK_PAD0] = &g12a_tdm_lrclk_pad_0.hw, 1080 - [AUD_CLKID_TDM_LRCLK_PAD1] = &g12a_tdm_lrclk_pad_1.hw, 1081 - [AUD_CLKID_TDM_LRCLK_PAD2] = &g12a_tdm_lrclk_pad_2.hw, 1082 - [AUD_CLKID_TDM_SCLK_PAD0] = &g12a_tdm_sclk_pad_0.hw, 1083 - [AUD_CLKID_TDM_SCLK_PAD1] = &g12a_tdm_sclk_pad_1.hw, 1084 - [AUD_CLKID_TDM_SCLK_PAD2] = &g12a_tdm_sclk_pad_2.hw, 1085 - [AUD_CLKID_TOP] = &axg_aud_top, 1086 - [NR_CLKS] = NULL, 1087 - }, 1088 - .num = NR_CLKS, 943 + static struct clk_hw *g12a_audio_hw_clks[] = { 944 + [AUD_CLKID_DDR_ARB] = &ddr_arb.hw, 945 + [AUD_CLKID_PDM] = &pdm.hw, 946 + [AUD_CLKID_TDMIN_A] = &tdmin_a.hw, 947 + [AUD_CLKID_TDMIN_B] = &tdmin_b.hw, 948 + [AUD_CLKID_TDMIN_C] = &tdmin_c.hw, 949 + [AUD_CLKID_TDMIN_LB] = &tdmin_lb.hw, 950 + [AUD_CLKID_TDMOUT_A] = &tdmout_a.hw, 951 + [AUD_CLKID_TDMOUT_B] = &tdmout_b.hw, 952 + [AUD_CLKID_TDMOUT_C] = &tdmout_c.hw, 953 + [AUD_CLKID_FRDDR_A] = &frddr_a.hw, 954 + [AUD_CLKID_FRDDR_B] = &frddr_b.hw, 955 + [AUD_CLKID_FRDDR_C] = &frddr_c.hw, 956 + [AUD_CLKID_TODDR_A] = &toddr_a.hw, 957 + [AUD_CLKID_TODDR_B] = &toddr_b.hw, 958 + [AUD_CLKID_TODDR_C] = &toddr_c.hw, 959 + [AUD_CLKID_LOOPBACK] = &loopback.hw, 960 + [AUD_CLKID_SPDIFIN] = &spdifin.hw, 961 + [AUD_CLKID_SPDIFOUT] = &spdifout.hw, 962 + [AUD_CLKID_RESAMPLE] = &resample.hw, 963 + [AUD_CLKID_POWER_DETECT] = &power_detect.hw, 964 + [AUD_CLKID_SPDIFOUT_B] = &spdifout_b.hw, 965 + [AUD_CLKID_MST_A_MCLK_SEL] = &mst_a_mclk_sel.hw, 966 + [AUD_CLKID_MST_B_MCLK_SEL] = &mst_b_mclk_sel.hw, 967 + [AUD_CLKID_MST_C_MCLK_SEL] = &mst_c_mclk_sel.hw, 968 + [AUD_CLKID_MST_D_MCLK_SEL] = &mst_d_mclk_sel.hw, 969 + [AUD_CLKID_MST_E_MCLK_SEL] = &mst_e_mclk_sel.hw, 970 + [AUD_CLKID_MST_F_MCLK_SEL] = &mst_f_mclk_sel.hw, 971 + [AUD_CLKID_MST_A_MCLK_DIV] = &mst_a_mclk_div.hw, 972 + [AUD_CLKID_MST_B_MCLK_DIV] = &mst_b_mclk_div.hw, 973 + [AUD_CLKID_MST_C_MCLK_DIV] = &mst_c_mclk_div.hw, 974 + [AUD_CLKID_MST_D_MCLK_DIV] = &mst_d_mclk_div.hw, 975 + [AUD_CLKID_MST_E_MCLK_DIV] = &mst_e_mclk_div.hw, 976 + [AUD_CLKID_MST_F_MCLK_DIV] = &mst_f_mclk_div.hw, 977 + [AUD_CLKID_MST_A_MCLK] = &mst_a_mclk.hw, 978 + [AUD_CLKID_MST_B_MCLK] = &mst_b_mclk.hw, 979 + [AUD_CLKID_MST_C_MCLK] = &mst_c_mclk.hw, 980 + [AUD_CLKID_MST_D_MCLK] = &mst_d_mclk.hw, 981 + [AUD_CLKID_MST_E_MCLK] = &mst_e_mclk.hw, 982 + [AUD_CLKID_MST_F_MCLK] = &mst_f_mclk.hw, 983 + [AUD_CLKID_SPDIFOUT_CLK_SEL] = &spdifout_clk_sel.hw, 984 + [AUD_CLKID_SPDIFOUT_CLK_DIV] = &spdifout_clk_div.hw, 985 + [AUD_CLKID_SPDIFOUT_CLK] = &spdifout_clk.hw, 986 + [AUD_CLKID_SPDIFOUT_B_CLK_SEL] = &spdifout_b_clk_sel.hw, 987 + [AUD_CLKID_SPDIFOUT_B_CLK_DIV] = &spdifout_b_clk_div.hw, 988 + [AUD_CLKID_SPDIFOUT_B_CLK] = &spdifout_b_clk.hw, 989 + [AUD_CLKID_SPDIFIN_CLK_SEL] = &spdifin_clk_sel.hw, 990 + [AUD_CLKID_SPDIFIN_CLK_DIV] = &spdifin_clk_div.hw, 991 + [AUD_CLKID_SPDIFIN_CLK] = &spdifin_clk.hw, 992 + [AUD_CLKID_PDM_DCLK_SEL] = &pdm_dclk_sel.hw, 993 + [AUD_CLKID_PDM_DCLK_DIV] = &pdm_dclk_div.hw, 994 + [AUD_CLKID_PDM_DCLK] = &pdm_dclk.hw, 995 + [AUD_CLKID_PDM_SYSCLK_SEL] = &pdm_sysclk_sel.hw, 996 + [AUD_CLKID_PDM_SYSCLK_DIV] = &pdm_sysclk_div.hw, 997 + [AUD_CLKID_PDM_SYSCLK] = &pdm_sysclk.hw, 998 + [AUD_CLKID_MST_A_SCLK_PRE_EN] = &mst_a_sclk_pre_en.hw, 999 + [AUD_CLKID_MST_B_SCLK_PRE_EN] = &mst_b_sclk_pre_en.hw, 1000 + [AUD_CLKID_MST_C_SCLK_PRE_EN] = &mst_c_sclk_pre_en.hw, 1001 + [AUD_CLKID_MST_D_SCLK_PRE_EN] = &mst_d_sclk_pre_en.hw, 1002 + [AUD_CLKID_MST_E_SCLK_PRE_EN] = &mst_e_sclk_pre_en.hw, 1003 + [AUD_CLKID_MST_F_SCLK_PRE_EN] = &mst_f_sclk_pre_en.hw, 1004 + [AUD_CLKID_MST_A_SCLK_DIV] = &mst_a_sclk_div.hw, 1005 + [AUD_CLKID_MST_B_SCLK_DIV] = &mst_b_sclk_div.hw, 1006 + [AUD_CLKID_MST_C_SCLK_DIV] = &mst_c_sclk_div.hw, 1007 + [AUD_CLKID_MST_D_SCLK_DIV] = &mst_d_sclk_div.hw, 1008 + [AUD_CLKID_MST_E_SCLK_DIV] = &mst_e_sclk_div.hw, 1009 + [AUD_CLKID_MST_F_SCLK_DIV] = &mst_f_sclk_div.hw, 1010 + [AUD_CLKID_MST_A_SCLK_POST_EN] = &mst_a_sclk_post_en.hw, 1011 + [AUD_CLKID_MST_B_SCLK_POST_EN] = &mst_b_sclk_post_en.hw, 1012 + [AUD_CLKID_MST_C_SCLK_POST_EN] = &mst_c_sclk_post_en.hw, 1013 + [AUD_CLKID_MST_D_SCLK_POST_EN] = &mst_d_sclk_post_en.hw, 1014 + [AUD_CLKID_MST_E_SCLK_POST_EN] = &mst_e_sclk_post_en.hw, 1015 + [AUD_CLKID_MST_F_SCLK_POST_EN] = &mst_f_sclk_post_en.hw, 1016 + [AUD_CLKID_MST_A_SCLK] = &mst_a_sclk.hw, 1017 + [AUD_CLKID_MST_B_SCLK] = &mst_b_sclk.hw, 1018 + [AUD_CLKID_MST_C_SCLK] = &mst_c_sclk.hw, 1019 + [AUD_CLKID_MST_D_SCLK] = &mst_d_sclk.hw, 1020 + [AUD_CLKID_MST_E_SCLK] = &mst_e_sclk.hw, 1021 + [AUD_CLKID_MST_F_SCLK] = &mst_f_sclk.hw, 1022 + [AUD_CLKID_MST_A_LRCLK_DIV] = &mst_a_lrclk_div.hw, 1023 + [AUD_CLKID_MST_B_LRCLK_DIV] = &mst_b_lrclk_div.hw, 1024 + [AUD_CLKID_MST_C_LRCLK_DIV] = &mst_c_lrclk_div.hw, 1025 + [AUD_CLKID_MST_D_LRCLK_DIV] = &mst_d_lrclk_div.hw, 1026 + [AUD_CLKID_MST_E_LRCLK_DIV] = &mst_e_lrclk_div.hw, 1027 + [AUD_CLKID_MST_F_LRCLK_DIV] = &mst_f_lrclk_div.hw, 1028 + [AUD_CLKID_MST_A_LRCLK] = &mst_a_lrclk.hw, 1029 + [AUD_CLKID_MST_B_LRCLK] = &mst_b_lrclk.hw, 1030 + [AUD_CLKID_MST_C_LRCLK] = &mst_c_lrclk.hw, 1031 + [AUD_CLKID_MST_D_LRCLK] = &mst_d_lrclk.hw, 1032 + [AUD_CLKID_MST_E_LRCLK] = &mst_e_lrclk.hw, 1033 + [AUD_CLKID_MST_F_LRCLK] = &mst_f_lrclk.hw, 1034 + [AUD_CLKID_TDMIN_A_SCLK_SEL] = &tdmin_a_sclk_sel.hw, 1035 + [AUD_CLKID_TDMIN_B_SCLK_SEL] = &tdmin_b_sclk_sel.hw, 1036 + [AUD_CLKID_TDMIN_C_SCLK_SEL] = &tdmin_c_sclk_sel.hw, 1037 + [AUD_CLKID_TDMIN_LB_SCLK_SEL] = &tdmin_lb_sclk_sel.hw, 1038 + [AUD_CLKID_TDMOUT_A_SCLK_SEL] = &tdmout_a_sclk_sel.hw, 1039 + [AUD_CLKID_TDMOUT_B_SCLK_SEL] = &tdmout_b_sclk_sel.hw, 1040 + [AUD_CLKID_TDMOUT_C_SCLK_SEL] = &tdmout_c_sclk_sel.hw, 1041 + [AUD_CLKID_TDMIN_A_SCLK_PRE_EN] = &tdmin_a_sclk_pre_en.hw, 1042 + [AUD_CLKID_TDMIN_B_SCLK_PRE_EN] = &tdmin_b_sclk_pre_en.hw, 1043 + [AUD_CLKID_TDMIN_C_SCLK_PRE_EN] = &tdmin_c_sclk_pre_en.hw, 1044 + [AUD_CLKID_TDMIN_LB_SCLK_PRE_EN] = &tdmin_lb_sclk_pre_en.hw, 1045 + [AUD_CLKID_TDMOUT_A_SCLK_PRE_EN] = &tdmout_a_sclk_pre_en.hw, 1046 + [AUD_CLKID_TDMOUT_B_SCLK_PRE_EN] = &tdmout_b_sclk_pre_en.hw, 1047 + [AUD_CLKID_TDMOUT_C_SCLK_PRE_EN] = &tdmout_c_sclk_pre_en.hw, 1048 + [AUD_CLKID_TDMIN_A_SCLK_POST_EN] = &tdmin_a_sclk_post_en.hw, 1049 + [AUD_CLKID_TDMIN_B_SCLK_POST_EN] = &tdmin_b_sclk_post_en.hw, 1050 + [AUD_CLKID_TDMIN_C_SCLK_POST_EN] = &tdmin_c_sclk_post_en.hw, 1051 + [AUD_CLKID_TDMIN_LB_SCLK_POST_EN] = &tdmin_lb_sclk_post_en.hw, 1052 + [AUD_CLKID_TDMOUT_A_SCLK_POST_EN] = &tdmout_a_sclk_post_en.hw, 1053 + [AUD_CLKID_TDMOUT_B_SCLK_POST_EN] = &tdmout_b_sclk_post_en.hw, 1054 + [AUD_CLKID_TDMOUT_C_SCLK_POST_EN] = &tdmout_c_sclk_post_en.hw, 1055 + [AUD_CLKID_TDMIN_A_SCLK] = &tdmin_a_sclk.hw, 1056 + [AUD_CLKID_TDMIN_B_SCLK] = &tdmin_b_sclk.hw, 1057 + [AUD_CLKID_TDMIN_C_SCLK] = &tdmin_c_sclk.hw, 1058 + [AUD_CLKID_TDMIN_LB_SCLK] = &tdmin_lb_sclk.hw, 1059 + [AUD_CLKID_TDMOUT_A_SCLK] = &g12a_tdmout_a_sclk.hw, 1060 + [AUD_CLKID_TDMOUT_B_SCLK] = &g12a_tdmout_b_sclk.hw, 1061 + [AUD_CLKID_TDMOUT_C_SCLK] = &g12a_tdmout_c_sclk.hw, 1062 + [AUD_CLKID_TDMIN_A_LRCLK] = &tdmin_a_lrclk.hw, 1063 + [AUD_CLKID_TDMIN_B_LRCLK] = &tdmin_b_lrclk.hw, 1064 + [AUD_CLKID_TDMIN_C_LRCLK] = &tdmin_c_lrclk.hw, 1065 + [AUD_CLKID_TDMIN_LB_LRCLK] = &tdmin_lb_lrclk.hw, 1066 + [AUD_CLKID_TDMOUT_A_LRCLK] = &tdmout_a_lrclk.hw, 1067 + [AUD_CLKID_TDMOUT_B_LRCLK] = &tdmout_b_lrclk.hw, 1068 + [AUD_CLKID_TDMOUT_C_LRCLK] = &tdmout_c_lrclk.hw, 1069 + [AUD_CLKID_TDM_MCLK_PAD0] = &g12a_tdm_mclk_pad_0.hw, 1070 + [AUD_CLKID_TDM_MCLK_PAD1] = &g12a_tdm_mclk_pad_1.hw, 1071 + [AUD_CLKID_TDM_LRCLK_PAD0] = &g12a_tdm_lrclk_pad_0.hw, 1072 + [AUD_CLKID_TDM_LRCLK_PAD1] = &g12a_tdm_lrclk_pad_1.hw, 1073 + [AUD_CLKID_TDM_LRCLK_PAD2] = &g12a_tdm_lrclk_pad_2.hw, 1074 + [AUD_CLKID_TDM_SCLK_PAD0] = &g12a_tdm_sclk_pad_0.hw, 1075 + [AUD_CLKID_TDM_SCLK_PAD1] = &g12a_tdm_sclk_pad_1.hw, 1076 + [AUD_CLKID_TDM_SCLK_PAD2] = &g12a_tdm_sclk_pad_2.hw, 1077 + [AUD_CLKID_TOP] = &axg_aud_top, 1089 1078 }; 1090 1079 1091 1080 /* 1092 1081 * Array of all SM1 clocks provided by this provider 1093 1082 * The input clocks of the controller will be populated at runtime 1094 1083 */ 1095 - static struct clk_hw_onecell_data sm1_audio_hw_onecell_data = { 1096 - .hws = { 1097 - [AUD_CLKID_DDR_ARB] = &ddr_arb.hw, 1098 - [AUD_CLKID_PDM] = &pdm.hw, 1099 - [AUD_CLKID_TDMIN_A] = &tdmin_a.hw, 1100 - [AUD_CLKID_TDMIN_B] = &tdmin_b.hw, 1101 - [AUD_CLKID_TDMIN_C] = &tdmin_c.hw, 1102 - [AUD_CLKID_TDMIN_LB] = &tdmin_lb.hw, 1103 - [AUD_CLKID_TDMOUT_A] = &tdmout_a.hw, 1104 - [AUD_CLKID_TDMOUT_B] = &tdmout_b.hw, 1105 - [AUD_CLKID_TDMOUT_C] = &tdmout_c.hw, 1106 - [AUD_CLKID_FRDDR_A] = &frddr_a.hw, 1107 - [AUD_CLKID_FRDDR_B] = &frddr_b.hw, 1108 - [AUD_CLKID_FRDDR_C] = &frddr_c.hw, 1109 - [AUD_CLKID_TODDR_A] = &toddr_a.hw, 1110 - [AUD_CLKID_TODDR_B] = &toddr_b.hw, 1111 - [AUD_CLKID_TODDR_C] = &toddr_c.hw, 1112 - [AUD_CLKID_LOOPBACK] = &loopback.hw, 1113 - [AUD_CLKID_SPDIFIN] = &spdifin.hw, 1114 - [AUD_CLKID_SPDIFOUT] = &spdifout.hw, 1115 - [AUD_CLKID_RESAMPLE] = &resample.hw, 1116 - [AUD_CLKID_SPDIFOUT_B] = &spdifout_b.hw, 1117 - [AUD_CLKID_MST_A_MCLK_SEL] = &sm1_mst_a_mclk_sel.hw, 1118 - [AUD_CLKID_MST_B_MCLK_SEL] = &sm1_mst_b_mclk_sel.hw, 1119 - [AUD_CLKID_MST_C_MCLK_SEL] = &sm1_mst_c_mclk_sel.hw, 1120 - [AUD_CLKID_MST_D_MCLK_SEL] = &sm1_mst_d_mclk_sel.hw, 1121 - [AUD_CLKID_MST_E_MCLK_SEL] = &sm1_mst_e_mclk_sel.hw, 1122 - [AUD_CLKID_MST_F_MCLK_SEL] = &sm1_mst_f_mclk_sel.hw, 1123 - [AUD_CLKID_MST_A_MCLK_DIV] = &sm1_mst_a_mclk_div.hw, 1124 - [AUD_CLKID_MST_B_MCLK_DIV] = &sm1_mst_b_mclk_div.hw, 1125 - [AUD_CLKID_MST_C_MCLK_DIV] = &sm1_mst_c_mclk_div.hw, 1126 - [AUD_CLKID_MST_D_MCLK_DIV] = &sm1_mst_d_mclk_div.hw, 1127 - [AUD_CLKID_MST_E_MCLK_DIV] = &sm1_mst_e_mclk_div.hw, 1128 - [AUD_CLKID_MST_F_MCLK_DIV] = &sm1_mst_f_mclk_div.hw, 1129 - [AUD_CLKID_MST_A_MCLK] = &sm1_mst_a_mclk.hw, 1130 - [AUD_CLKID_MST_B_MCLK] = &sm1_mst_b_mclk.hw, 1131 - [AUD_CLKID_MST_C_MCLK] = &sm1_mst_c_mclk.hw, 1132 - [AUD_CLKID_MST_D_MCLK] = &sm1_mst_d_mclk.hw, 1133 - [AUD_CLKID_MST_E_MCLK] = &sm1_mst_e_mclk.hw, 1134 - [AUD_CLKID_MST_F_MCLK] = &sm1_mst_f_mclk.hw, 1135 - [AUD_CLKID_SPDIFOUT_CLK_SEL] = &spdifout_clk_sel.hw, 1136 - [AUD_CLKID_SPDIFOUT_CLK_DIV] = &spdifout_clk_div.hw, 1137 - [AUD_CLKID_SPDIFOUT_CLK] = &spdifout_clk.hw, 1138 - [AUD_CLKID_SPDIFOUT_B_CLK_SEL] = &spdifout_b_clk_sel.hw, 1139 - [AUD_CLKID_SPDIFOUT_B_CLK_DIV] = &spdifout_b_clk_div.hw, 1140 - [AUD_CLKID_SPDIFOUT_B_CLK] = &spdifout_b_clk.hw, 1141 - [AUD_CLKID_SPDIFIN_CLK_SEL] = &spdifin_clk_sel.hw, 1142 - [AUD_CLKID_SPDIFIN_CLK_DIV] = &spdifin_clk_div.hw, 1143 - [AUD_CLKID_SPDIFIN_CLK] = &spdifin_clk.hw, 1144 - [AUD_CLKID_PDM_DCLK_SEL] = &pdm_dclk_sel.hw, 1145 - [AUD_CLKID_PDM_DCLK_DIV] = &pdm_dclk_div.hw, 1146 - [AUD_CLKID_PDM_DCLK] = &pdm_dclk.hw, 1147 - [AUD_CLKID_PDM_SYSCLK_SEL] = &pdm_sysclk_sel.hw, 1148 - [AUD_CLKID_PDM_SYSCLK_DIV] = &pdm_sysclk_div.hw, 1149 - [AUD_CLKID_PDM_SYSCLK] = &pdm_sysclk.hw, 1150 - [AUD_CLKID_MST_A_SCLK_PRE_EN] = &mst_a_sclk_pre_en.hw, 1151 - [AUD_CLKID_MST_B_SCLK_PRE_EN] = &mst_b_sclk_pre_en.hw, 1152 - [AUD_CLKID_MST_C_SCLK_PRE_EN] = &mst_c_sclk_pre_en.hw, 1153 - [AUD_CLKID_MST_D_SCLK_PRE_EN] = &mst_d_sclk_pre_en.hw, 1154 - [AUD_CLKID_MST_E_SCLK_PRE_EN] = &mst_e_sclk_pre_en.hw, 1155 - [AUD_CLKID_MST_F_SCLK_PRE_EN] = &mst_f_sclk_pre_en.hw, 1156 - [AUD_CLKID_MST_A_SCLK_DIV] = &mst_a_sclk_div.hw, 1157 - [AUD_CLKID_MST_B_SCLK_DIV] = &mst_b_sclk_div.hw, 1158 - [AUD_CLKID_MST_C_SCLK_DIV] = &mst_c_sclk_div.hw, 1159 - [AUD_CLKID_MST_D_SCLK_DIV] = &mst_d_sclk_div.hw, 1160 - [AUD_CLKID_MST_E_SCLK_DIV] = &mst_e_sclk_div.hw, 1161 - [AUD_CLKID_MST_F_SCLK_DIV] = &mst_f_sclk_div.hw, 1162 - [AUD_CLKID_MST_A_SCLK_POST_EN] = &mst_a_sclk_post_en.hw, 1163 - [AUD_CLKID_MST_B_SCLK_POST_EN] = &mst_b_sclk_post_en.hw, 1164 - [AUD_CLKID_MST_C_SCLK_POST_EN] = &mst_c_sclk_post_en.hw, 1165 - [AUD_CLKID_MST_D_SCLK_POST_EN] = &mst_d_sclk_post_en.hw, 1166 - [AUD_CLKID_MST_E_SCLK_POST_EN] = &mst_e_sclk_post_en.hw, 1167 - [AUD_CLKID_MST_F_SCLK_POST_EN] = &mst_f_sclk_post_en.hw, 1168 - [AUD_CLKID_MST_A_SCLK] = &mst_a_sclk.hw, 1169 - [AUD_CLKID_MST_B_SCLK] = &mst_b_sclk.hw, 1170 - [AUD_CLKID_MST_C_SCLK] = &mst_c_sclk.hw, 1171 - [AUD_CLKID_MST_D_SCLK] = &mst_d_sclk.hw, 1172 - [AUD_CLKID_MST_E_SCLK] = &mst_e_sclk.hw, 1173 - [AUD_CLKID_MST_F_SCLK] = &mst_f_sclk.hw, 1174 - [AUD_CLKID_MST_A_LRCLK_DIV] = &mst_a_lrclk_div.hw, 1175 - [AUD_CLKID_MST_B_LRCLK_DIV] = &mst_b_lrclk_div.hw, 1176 - [AUD_CLKID_MST_C_LRCLK_DIV] = &mst_c_lrclk_div.hw, 1177 - [AUD_CLKID_MST_D_LRCLK_DIV] = &mst_d_lrclk_div.hw, 1178 - [AUD_CLKID_MST_E_LRCLK_DIV] = &mst_e_lrclk_div.hw, 1179 - [AUD_CLKID_MST_F_LRCLK_DIV] = &mst_f_lrclk_div.hw, 1180 - [AUD_CLKID_MST_A_LRCLK] = &mst_a_lrclk.hw, 1181 - [AUD_CLKID_MST_B_LRCLK] = &mst_b_lrclk.hw, 1182 - [AUD_CLKID_MST_C_LRCLK] = &mst_c_lrclk.hw, 1183 - [AUD_CLKID_MST_D_LRCLK] = &mst_d_lrclk.hw, 1184 - [AUD_CLKID_MST_E_LRCLK] = &mst_e_lrclk.hw, 1185 - [AUD_CLKID_MST_F_LRCLK] = &mst_f_lrclk.hw, 1186 - [AUD_CLKID_TDMIN_A_SCLK_SEL] = &tdmin_a_sclk_sel.hw, 1187 - [AUD_CLKID_TDMIN_B_SCLK_SEL] = &tdmin_b_sclk_sel.hw, 1188 - [AUD_CLKID_TDMIN_C_SCLK_SEL] = &tdmin_c_sclk_sel.hw, 1189 - [AUD_CLKID_TDMIN_LB_SCLK_SEL] = &tdmin_lb_sclk_sel.hw, 1190 - [AUD_CLKID_TDMOUT_A_SCLK_SEL] = &tdmout_a_sclk_sel.hw, 1191 - [AUD_CLKID_TDMOUT_B_SCLK_SEL] = &tdmout_b_sclk_sel.hw, 1192 - [AUD_CLKID_TDMOUT_C_SCLK_SEL] = &tdmout_c_sclk_sel.hw, 1193 - [AUD_CLKID_TDMIN_A_SCLK_PRE_EN] = &tdmin_a_sclk_pre_en.hw, 1194 - [AUD_CLKID_TDMIN_B_SCLK_PRE_EN] = &tdmin_b_sclk_pre_en.hw, 1195 - [AUD_CLKID_TDMIN_C_SCLK_PRE_EN] = &tdmin_c_sclk_pre_en.hw, 1196 - [AUD_CLKID_TDMIN_LB_SCLK_PRE_EN] = &tdmin_lb_sclk_pre_en.hw, 1197 - [AUD_CLKID_TDMOUT_A_SCLK_PRE_EN] = &tdmout_a_sclk_pre_en.hw, 1198 - [AUD_CLKID_TDMOUT_B_SCLK_PRE_EN] = &tdmout_b_sclk_pre_en.hw, 1199 - [AUD_CLKID_TDMOUT_C_SCLK_PRE_EN] = &tdmout_c_sclk_pre_en.hw, 1200 - [AUD_CLKID_TDMIN_A_SCLK_POST_EN] = &tdmin_a_sclk_post_en.hw, 1201 - [AUD_CLKID_TDMIN_B_SCLK_POST_EN] = &tdmin_b_sclk_post_en.hw, 1202 - [AUD_CLKID_TDMIN_C_SCLK_POST_EN] = &tdmin_c_sclk_post_en.hw, 1203 - [AUD_CLKID_TDMIN_LB_SCLK_POST_EN] = &tdmin_lb_sclk_post_en.hw, 1204 - [AUD_CLKID_TDMOUT_A_SCLK_POST_EN] = &tdmout_a_sclk_post_en.hw, 1205 - [AUD_CLKID_TDMOUT_B_SCLK_POST_EN] = &tdmout_b_sclk_post_en.hw, 1206 - [AUD_CLKID_TDMOUT_C_SCLK_POST_EN] = &tdmout_c_sclk_post_en.hw, 1207 - [AUD_CLKID_TDMIN_A_SCLK] = &tdmin_a_sclk.hw, 1208 - [AUD_CLKID_TDMIN_B_SCLK] = &tdmin_b_sclk.hw, 1209 - [AUD_CLKID_TDMIN_C_SCLK] = &tdmin_c_sclk.hw, 1210 - [AUD_CLKID_TDMIN_LB_SCLK] = &tdmin_lb_sclk.hw, 1211 - [AUD_CLKID_TDMOUT_A_SCLK] = &g12a_tdmout_a_sclk.hw, 1212 - [AUD_CLKID_TDMOUT_B_SCLK] = &g12a_tdmout_b_sclk.hw, 1213 - [AUD_CLKID_TDMOUT_C_SCLK] = &g12a_tdmout_c_sclk.hw, 1214 - [AUD_CLKID_TDMIN_A_LRCLK] = &tdmin_a_lrclk.hw, 1215 - [AUD_CLKID_TDMIN_B_LRCLK] = &tdmin_b_lrclk.hw, 1216 - [AUD_CLKID_TDMIN_C_LRCLK] = &tdmin_c_lrclk.hw, 1217 - [AUD_CLKID_TDMIN_LB_LRCLK] = &tdmin_lb_lrclk.hw, 1218 - [AUD_CLKID_TDMOUT_A_LRCLK] = &tdmout_a_lrclk.hw, 1219 - [AUD_CLKID_TDMOUT_B_LRCLK] = &tdmout_b_lrclk.hw, 1220 - [AUD_CLKID_TDMOUT_C_LRCLK] = &tdmout_c_lrclk.hw, 1221 - [AUD_CLKID_TDM_MCLK_PAD0] = &sm1_tdm_mclk_pad_0.hw, 1222 - [AUD_CLKID_TDM_MCLK_PAD1] = &sm1_tdm_mclk_pad_1.hw, 1223 - [AUD_CLKID_TDM_LRCLK_PAD0] = &sm1_tdm_lrclk_pad_0.hw, 1224 - [AUD_CLKID_TDM_LRCLK_PAD1] = &sm1_tdm_lrclk_pad_1.hw, 1225 - [AUD_CLKID_TDM_LRCLK_PAD2] = &sm1_tdm_lrclk_pad_2.hw, 1226 - [AUD_CLKID_TDM_SCLK_PAD0] = &sm1_tdm_sclk_pad_0.hw, 1227 - [AUD_CLKID_TDM_SCLK_PAD1] = &sm1_tdm_sclk_pad_1.hw, 1228 - [AUD_CLKID_TDM_SCLK_PAD2] = &sm1_tdm_sclk_pad_2.hw, 1229 - [AUD_CLKID_TOP] = &sm1_aud_top.hw, 1230 - [AUD_CLKID_TORAM] = &toram.hw, 1231 - [AUD_CLKID_EQDRC] = &eqdrc.hw, 1232 - [AUD_CLKID_RESAMPLE_B] = &resample_b.hw, 1233 - [AUD_CLKID_TOVAD] = &tovad.hw, 1234 - [AUD_CLKID_LOCKER] = &locker.hw, 1235 - [AUD_CLKID_SPDIFIN_LB] = &spdifin_lb.hw, 1236 - [AUD_CLKID_FRDDR_D] = &frddr_d.hw, 1237 - [AUD_CLKID_TODDR_D] = &toddr_d.hw, 1238 - [AUD_CLKID_LOOPBACK_B] = &loopback_b.hw, 1239 - [AUD_CLKID_CLK81_EN] = &sm1_clk81_en.hw, 1240 - [AUD_CLKID_SYSCLK_A_DIV] = &sm1_sysclk_a_div.hw, 1241 - [AUD_CLKID_SYSCLK_A_EN] = &sm1_sysclk_a_en.hw, 1242 - [AUD_CLKID_SYSCLK_B_DIV] = &sm1_sysclk_b_div.hw, 1243 - [AUD_CLKID_SYSCLK_B_EN] = &sm1_sysclk_b_en.hw, 1244 - [NR_CLKS] = NULL, 1245 - }, 1246 - .num = NR_CLKS, 1084 + static struct clk_hw *sm1_audio_hw_clks[] = { 1085 + [AUD_CLKID_DDR_ARB] = &ddr_arb.hw, 1086 + [AUD_CLKID_PDM] = &pdm.hw, 1087 + [AUD_CLKID_TDMIN_A] = &tdmin_a.hw, 1088 + [AUD_CLKID_TDMIN_B] = &tdmin_b.hw, 1089 + [AUD_CLKID_TDMIN_C] = &tdmin_c.hw, 1090 + [AUD_CLKID_TDMIN_LB] = &tdmin_lb.hw, 1091 + [AUD_CLKID_TDMOUT_A] = &tdmout_a.hw, 1092 + [AUD_CLKID_TDMOUT_B] = &tdmout_b.hw, 1093 + [AUD_CLKID_TDMOUT_C] = &tdmout_c.hw, 1094 + [AUD_CLKID_FRDDR_A] = &frddr_a.hw, 1095 + [AUD_CLKID_FRDDR_B] = &frddr_b.hw, 1096 + [AUD_CLKID_FRDDR_C] = &frddr_c.hw, 1097 + [AUD_CLKID_TODDR_A] = &toddr_a.hw, 1098 + [AUD_CLKID_TODDR_B] = &toddr_b.hw, 1099 + [AUD_CLKID_TODDR_C] = &toddr_c.hw, 1100 + [AUD_CLKID_LOOPBACK] = &loopback.hw, 1101 + [AUD_CLKID_SPDIFIN] = &spdifin.hw, 1102 + [AUD_CLKID_SPDIFOUT] = &spdifout.hw, 1103 + [AUD_CLKID_RESAMPLE] = &resample.hw, 1104 + [AUD_CLKID_SPDIFOUT_B] = &spdifout_b.hw, 1105 + [AUD_CLKID_MST_A_MCLK_SEL] = &sm1_mst_a_mclk_sel.hw, 1106 + [AUD_CLKID_MST_B_MCLK_SEL] = &sm1_mst_b_mclk_sel.hw, 1107 + [AUD_CLKID_MST_C_MCLK_SEL] = &sm1_mst_c_mclk_sel.hw, 1108 + [AUD_CLKID_MST_D_MCLK_SEL] = &sm1_mst_d_mclk_sel.hw, 1109 + [AUD_CLKID_MST_E_MCLK_SEL] = &sm1_mst_e_mclk_sel.hw, 1110 + [AUD_CLKID_MST_F_MCLK_SEL] = &sm1_mst_f_mclk_sel.hw, 1111 + [AUD_CLKID_MST_A_MCLK_DIV] = &sm1_mst_a_mclk_div.hw, 1112 + [AUD_CLKID_MST_B_MCLK_DIV] = &sm1_mst_b_mclk_div.hw, 1113 + [AUD_CLKID_MST_C_MCLK_DIV] = &sm1_mst_c_mclk_div.hw, 1114 + [AUD_CLKID_MST_D_MCLK_DIV] = &sm1_mst_d_mclk_div.hw, 1115 + [AUD_CLKID_MST_E_MCLK_DIV] = &sm1_mst_e_mclk_div.hw, 1116 + [AUD_CLKID_MST_F_MCLK_DIV] = &sm1_mst_f_mclk_div.hw, 1117 + [AUD_CLKID_MST_A_MCLK] = &sm1_mst_a_mclk.hw, 1118 + [AUD_CLKID_MST_B_MCLK] = &sm1_mst_b_mclk.hw, 1119 + [AUD_CLKID_MST_C_MCLK] = &sm1_mst_c_mclk.hw, 1120 + [AUD_CLKID_MST_D_MCLK] = &sm1_mst_d_mclk.hw, 1121 + [AUD_CLKID_MST_E_MCLK] = &sm1_mst_e_mclk.hw, 1122 + [AUD_CLKID_MST_F_MCLK] = &sm1_mst_f_mclk.hw, 1123 + [AUD_CLKID_SPDIFOUT_CLK_SEL] = &spdifout_clk_sel.hw, 1124 + [AUD_CLKID_SPDIFOUT_CLK_DIV] = &spdifout_clk_div.hw, 1125 + [AUD_CLKID_SPDIFOUT_CLK] = &spdifout_clk.hw, 1126 + [AUD_CLKID_SPDIFOUT_B_CLK_SEL] = &spdifout_b_clk_sel.hw, 1127 + [AUD_CLKID_SPDIFOUT_B_CLK_DIV] = &spdifout_b_clk_div.hw, 1128 + [AUD_CLKID_SPDIFOUT_B_CLK] = &spdifout_b_clk.hw, 1129 + [AUD_CLKID_SPDIFIN_CLK_SEL] = &spdifin_clk_sel.hw, 1130 + [AUD_CLKID_SPDIFIN_CLK_DIV] = &spdifin_clk_div.hw, 1131 + [AUD_CLKID_SPDIFIN_CLK] = &spdifin_clk.hw, 1132 + [AUD_CLKID_PDM_DCLK_SEL] = &pdm_dclk_sel.hw, 1133 + [AUD_CLKID_PDM_DCLK_DIV] = &pdm_dclk_div.hw, 1134 + [AUD_CLKID_PDM_DCLK] = &pdm_dclk.hw, 1135 + [AUD_CLKID_PDM_SYSCLK_SEL] = &pdm_sysclk_sel.hw, 1136 + [AUD_CLKID_PDM_SYSCLK_DIV] = &pdm_sysclk_div.hw, 1137 + [AUD_CLKID_PDM_SYSCLK] = &pdm_sysclk.hw, 1138 + [AUD_CLKID_MST_A_SCLK_PRE_EN] = &mst_a_sclk_pre_en.hw, 1139 + [AUD_CLKID_MST_B_SCLK_PRE_EN] = &mst_b_sclk_pre_en.hw, 1140 + [AUD_CLKID_MST_C_SCLK_PRE_EN] = &mst_c_sclk_pre_en.hw, 1141 + [AUD_CLKID_MST_D_SCLK_PRE_EN] = &mst_d_sclk_pre_en.hw, 1142 + [AUD_CLKID_MST_E_SCLK_PRE_EN] = &mst_e_sclk_pre_en.hw, 1143 + [AUD_CLKID_MST_F_SCLK_PRE_EN] = &mst_f_sclk_pre_en.hw, 1144 + [AUD_CLKID_MST_A_SCLK_DIV] = &mst_a_sclk_div.hw, 1145 + [AUD_CLKID_MST_B_SCLK_DIV] = &mst_b_sclk_div.hw, 1146 + [AUD_CLKID_MST_C_SCLK_DIV] = &mst_c_sclk_div.hw, 1147 + [AUD_CLKID_MST_D_SCLK_DIV] = &mst_d_sclk_div.hw, 1148 + [AUD_CLKID_MST_E_SCLK_DIV] = &mst_e_sclk_div.hw, 1149 + [AUD_CLKID_MST_F_SCLK_DIV] = &mst_f_sclk_div.hw, 1150 + [AUD_CLKID_MST_A_SCLK_POST_EN] = &mst_a_sclk_post_en.hw, 1151 + [AUD_CLKID_MST_B_SCLK_POST_EN] = &mst_b_sclk_post_en.hw, 1152 + [AUD_CLKID_MST_C_SCLK_POST_EN] = &mst_c_sclk_post_en.hw, 1153 + [AUD_CLKID_MST_D_SCLK_POST_EN] = &mst_d_sclk_post_en.hw, 1154 + [AUD_CLKID_MST_E_SCLK_POST_EN] = &mst_e_sclk_post_en.hw, 1155 + [AUD_CLKID_MST_F_SCLK_POST_EN] = &mst_f_sclk_post_en.hw, 1156 + [AUD_CLKID_MST_A_SCLK] = &mst_a_sclk.hw, 1157 + [AUD_CLKID_MST_B_SCLK] = &mst_b_sclk.hw, 1158 + [AUD_CLKID_MST_C_SCLK] = &mst_c_sclk.hw, 1159 + [AUD_CLKID_MST_D_SCLK] = &mst_d_sclk.hw, 1160 + [AUD_CLKID_MST_E_SCLK] = &mst_e_sclk.hw, 1161 + [AUD_CLKID_MST_F_SCLK] = &mst_f_sclk.hw, 1162 + [AUD_CLKID_MST_A_LRCLK_DIV] = &mst_a_lrclk_div.hw, 1163 + [AUD_CLKID_MST_B_LRCLK_DIV] = &mst_b_lrclk_div.hw, 1164 + [AUD_CLKID_MST_C_LRCLK_DIV] = &mst_c_lrclk_div.hw, 1165 + [AUD_CLKID_MST_D_LRCLK_DIV] = &mst_d_lrclk_div.hw, 1166 + [AUD_CLKID_MST_E_LRCLK_DIV] = &mst_e_lrclk_div.hw, 1167 + [AUD_CLKID_MST_F_LRCLK_DIV] = &mst_f_lrclk_div.hw, 1168 + [AUD_CLKID_MST_A_LRCLK] = &mst_a_lrclk.hw, 1169 + [AUD_CLKID_MST_B_LRCLK] = &mst_b_lrclk.hw, 1170 + [AUD_CLKID_MST_C_LRCLK] = &mst_c_lrclk.hw, 1171 + [AUD_CLKID_MST_D_LRCLK] = &mst_d_lrclk.hw, 1172 + [AUD_CLKID_MST_E_LRCLK] = &mst_e_lrclk.hw, 1173 + [AUD_CLKID_MST_F_LRCLK] = &mst_f_lrclk.hw, 1174 + [AUD_CLKID_TDMIN_A_SCLK_SEL] = &tdmin_a_sclk_sel.hw, 1175 + [AUD_CLKID_TDMIN_B_SCLK_SEL] = &tdmin_b_sclk_sel.hw, 1176 + [AUD_CLKID_TDMIN_C_SCLK_SEL] = &tdmin_c_sclk_sel.hw, 1177 + [AUD_CLKID_TDMIN_LB_SCLK_SEL] = &tdmin_lb_sclk_sel.hw, 1178 + [AUD_CLKID_TDMOUT_A_SCLK_SEL] = &tdmout_a_sclk_sel.hw, 1179 + [AUD_CLKID_TDMOUT_B_SCLK_SEL] = &tdmout_b_sclk_sel.hw, 1180 + [AUD_CLKID_TDMOUT_C_SCLK_SEL] = &tdmout_c_sclk_sel.hw, 1181 + [AUD_CLKID_TDMIN_A_SCLK_PRE_EN] = &tdmin_a_sclk_pre_en.hw, 1182 + [AUD_CLKID_TDMIN_B_SCLK_PRE_EN] = &tdmin_b_sclk_pre_en.hw, 1183 + [AUD_CLKID_TDMIN_C_SCLK_PRE_EN] = &tdmin_c_sclk_pre_en.hw, 1184 + [AUD_CLKID_TDMIN_LB_SCLK_PRE_EN] = &tdmin_lb_sclk_pre_en.hw, 1185 + [AUD_CLKID_TDMOUT_A_SCLK_PRE_EN] = &tdmout_a_sclk_pre_en.hw, 1186 + [AUD_CLKID_TDMOUT_B_SCLK_PRE_EN] = &tdmout_b_sclk_pre_en.hw, 1187 + [AUD_CLKID_TDMOUT_C_SCLK_PRE_EN] = &tdmout_c_sclk_pre_en.hw, 1188 + [AUD_CLKID_TDMIN_A_SCLK_POST_EN] = &tdmin_a_sclk_post_en.hw, 1189 + [AUD_CLKID_TDMIN_B_SCLK_POST_EN] = &tdmin_b_sclk_post_en.hw, 1190 + [AUD_CLKID_TDMIN_C_SCLK_POST_EN] = &tdmin_c_sclk_post_en.hw, 1191 + [AUD_CLKID_TDMIN_LB_SCLK_POST_EN] = &tdmin_lb_sclk_post_en.hw, 1192 + [AUD_CLKID_TDMOUT_A_SCLK_POST_EN] = &tdmout_a_sclk_post_en.hw, 1193 + [AUD_CLKID_TDMOUT_B_SCLK_POST_EN] = &tdmout_b_sclk_post_en.hw, 1194 + [AUD_CLKID_TDMOUT_C_SCLK_POST_EN] = &tdmout_c_sclk_post_en.hw, 1195 + [AUD_CLKID_TDMIN_A_SCLK] = &tdmin_a_sclk.hw, 1196 + [AUD_CLKID_TDMIN_B_SCLK] = &tdmin_b_sclk.hw, 1197 + [AUD_CLKID_TDMIN_C_SCLK] = &tdmin_c_sclk.hw, 1198 + [AUD_CLKID_TDMIN_LB_SCLK] = &tdmin_lb_sclk.hw, 1199 + [AUD_CLKID_TDMOUT_A_SCLK] = &g12a_tdmout_a_sclk.hw, 1200 + [AUD_CLKID_TDMOUT_B_SCLK] = &g12a_tdmout_b_sclk.hw, 1201 + [AUD_CLKID_TDMOUT_C_SCLK] = &g12a_tdmout_c_sclk.hw, 1202 + [AUD_CLKID_TDMIN_A_LRCLK] = &tdmin_a_lrclk.hw, 1203 + [AUD_CLKID_TDMIN_B_LRCLK] = &tdmin_b_lrclk.hw, 1204 + [AUD_CLKID_TDMIN_C_LRCLK] = &tdmin_c_lrclk.hw, 1205 + [AUD_CLKID_TDMIN_LB_LRCLK] = &tdmin_lb_lrclk.hw, 1206 + [AUD_CLKID_TDMOUT_A_LRCLK] = &tdmout_a_lrclk.hw, 1207 + [AUD_CLKID_TDMOUT_B_LRCLK] = &tdmout_b_lrclk.hw, 1208 + [AUD_CLKID_TDMOUT_C_LRCLK] = &tdmout_c_lrclk.hw, 1209 + [AUD_CLKID_TDM_MCLK_PAD0] = &sm1_tdm_mclk_pad_0.hw, 1210 + [AUD_CLKID_TDM_MCLK_PAD1] = &sm1_tdm_mclk_pad_1.hw, 1211 + [AUD_CLKID_TDM_LRCLK_PAD0] = &sm1_tdm_lrclk_pad_0.hw, 1212 + [AUD_CLKID_TDM_LRCLK_PAD1] = &sm1_tdm_lrclk_pad_1.hw, 1213 + [AUD_CLKID_TDM_LRCLK_PAD2] = &sm1_tdm_lrclk_pad_2.hw, 1214 + [AUD_CLKID_TDM_SCLK_PAD0] = &sm1_tdm_sclk_pad_0.hw, 1215 + [AUD_CLKID_TDM_SCLK_PAD1] = &sm1_tdm_sclk_pad_1.hw, 1216 + [AUD_CLKID_TDM_SCLK_PAD2] = &sm1_tdm_sclk_pad_2.hw, 1217 + [AUD_CLKID_TOP] = &sm1_aud_top.hw, 1218 + [AUD_CLKID_TORAM] = &toram.hw, 1219 + [AUD_CLKID_EQDRC] = &eqdrc.hw, 1220 + [AUD_CLKID_RESAMPLE_B] = &resample_b.hw, 1221 + [AUD_CLKID_TOVAD] = &tovad.hw, 1222 + [AUD_CLKID_LOCKER] = &locker.hw, 1223 + [AUD_CLKID_SPDIFIN_LB] = &spdifin_lb.hw, 1224 + [AUD_CLKID_FRDDR_D] = &frddr_d.hw, 1225 + [AUD_CLKID_TODDR_D] = &toddr_d.hw, 1226 + [AUD_CLKID_LOOPBACK_B] = &loopback_b.hw, 1227 + [AUD_CLKID_CLK81_EN] = &sm1_clk81_en.hw, 1228 + [AUD_CLKID_SYSCLK_A_DIV] = &sm1_sysclk_a_div.hw, 1229 + [AUD_CLKID_SYSCLK_A_EN] = &sm1_sysclk_a_en.hw, 1230 + [AUD_CLKID_SYSCLK_B_DIV] = &sm1_sysclk_b_div.hw, 1231 + [AUD_CLKID_SYSCLK_B_EN] = &sm1_sysclk_b_en.hw, 1247 1232 }; 1248 1233 1249 1234 ··· 1736 1745 struct audioclk_data { 1737 1746 struct clk_regmap *const *regmap_clks; 1738 1747 unsigned int regmap_clk_num; 1739 - struct clk_hw_onecell_data *hw_onecell_data; 1748 + struct meson_clk_hw_data hw_clks; 1740 1749 unsigned int reset_offset; 1741 1750 unsigned int reset_num; 1742 1751 }; ··· 1782 1791 data->regmap_clks[i]->map = map; 1783 1792 1784 1793 /* Take care to skip the registered input clocks */ 1785 - for (i = AUD_CLKID_DDR_ARB; i < data->hw_onecell_data->num; i++) { 1794 + for (i = AUD_CLKID_DDR_ARB; i < data->hw_clks.num; i++) { 1786 1795 const char *name; 1787 1796 1788 - hw = data->hw_onecell_data->hws[i]; 1797 + hw = data->hw_clks.hws[i]; 1789 1798 /* array might be sparse */ 1790 1799 if (!hw) 1791 1800 continue; ··· 1799 1808 } 1800 1809 } 1801 1810 1802 - ret = devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, 1803 - data->hw_onecell_data); 1811 + ret = devm_of_clk_add_hw_provider(dev, meson_clk_hw_get, (void *)&data->hw_clks); 1804 1812 if (ret) 1805 1813 return ret; 1806 1814 ··· 1824 1834 static const struct audioclk_data axg_audioclk_data = { 1825 1835 .regmap_clks = axg_clk_regmaps, 1826 1836 .regmap_clk_num = ARRAY_SIZE(axg_clk_regmaps), 1827 - .hw_onecell_data = &axg_audio_hw_onecell_data, 1837 + .hw_clks = { 1838 + .hws = axg_audio_hw_clks, 1839 + .num = ARRAY_SIZE(axg_audio_hw_clks), 1840 + }, 1828 1841 }; 1829 1842 1830 1843 static const struct audioclk_data g12a_audioclk_data = { 1831 1844 .regmap_clks = g12a_clk_regmaps, 1832 1845 .regmap_clk_num = ARRAY_SIZE(g12a_clk_regmaps), 1833 - .hw_onecell_data = &g12a_audio_hw_onecell_data, 1846 + .hw_clks = { 1847 + .hws = g12a_audio_hw_clks, 1848 + .num = ARRAY_SIZE(g12a_audio_hw_clks), 1849 + }, 1834 1850 .reset_offset = AUDIO_SW_RESET, 1835 1851 .reset_num = 26, 1836 1852 }; ··· 1844 1848 static const struct audioclk_data sm1_audioclk_data = { 1845 1849 .regmap_clks = sm1_clk_regmaps, 1846 1850 .regmap_clk_num = ARRAY_SIZE(sm1_clk_regmaps), 1847 - .hw_onecell_data = &sm1_audio_hw_onecell_data, 1851 + .hw_clks = { 1852 + .hws = sm1_audio_hw_clks, 1853 + .num = ARRAY_SIZE(sm1_audio_hw_clks), 1854 + }, 1848 1855 .reset_offset = AUDIO_SM1_SW_RESET0, 1849 1856 .reset_num = 39, 1850 1857 };
-75
drivers/clk/meson/axg-audio.h
··· 64 64 #define AUDIO_SM1_SW_RESET1 0x02C 65 65 #define AUDIO_CLK81_CTRL 0x030 66 66 #define AUDIO_CLK81_EN 0x034 67 - /* 68 - * CLKID index values 69 - * These indices are entirely contrived and do not map onto the hardware. 70 - */ 71 - 72 - #define AUD_CLKID_MST_A_MCLK_SEL 59 73 - #define AUD_CLKID_MST_B_MCLK_SEL 60 74 - #define AUD_CLKID_MST_C_MCLK_SEL 61 75 - #define AUD_CLKID_MST_D_MCLK_SEL 62 76 - #define AUD_CLKID_MST_E_MCLK_SEL 63 77 - #define AUD_CLKID_MST_F_MCLK_SEL 64 78 - #define AUD_CLKID_MST_A_MCLK_DIV 65 79 - #define AUD_CLKID_MST_B_MCLK_DIV 66 80 - #define AUD_CLKID_MST_C_MCLK_DIV 67 81 - #define AUD_CLKID_MST_D_MCLK_DIV 68 82 - #define AUD_CLKID_MST_E_MCLK_DIV 69 83 - #define AUD_CLKID_MST_F_MCLK_DIV 70 84 - #define AUD_CLKID_SPDIFOUT_CLK_SEL 71 85 - #define AUD_CLKID_SPDIFOUT_CLK_DIV 72 86 - #define AUD_CLKID_SPDIFIN_CLK_SEL 73 87 - #define AUD_CLKID_SPDIFIN_CLK_DIV 74 88 - #define AUD_CLKID_PDM_DCLK_SEL 75 89 - #define AUD_CLKID_PDM_DCLK_DIV 76 90 - #define AUD_CLKID_PDM_SYSCLK_SEL 77 91 - #define AUD_CLKID_PDM_SYSCLK_DIV 78 92 - #define AUD_CLKID_MST_A_SCLK_PRE_EN 92 93 - #define AUD_CLKID_MST_B_SCLK_PRE_EN 93 94 - #define AUD_CLKID_MST_C_SCLK_PRE_EN 94 95 - #define AUD_CLKID_MST_D_SCLK_PRE_EN 95 96 - #define AUD_CLKID_MST_E_SCLK_PRE_EN 96 97 - #define AUD_CLKID_MST_F_SCLK_PRE_EN 97 98 - #define AUD_CLKID_MST_A_SCLK_DIV 98 99 - #define AUD_CLKID_MST_B_SCLK_DIV 99 100 - #define AUD_CLKID_MST_C_SCLK_DIV 100 101 - #define AUD_CLKID_MST_D_SCLK_DIV 101 102 - #define AUD_CLKID_MST_E_SCLK_DIV 102 103 - #define AUD_CLKID_MST_F_SCLK_DIV 103 104 - #define AUD_CLKID_MST_A_SCLK_POST_EN 104 105 - #define AUD_CLKID_MST_B_SCLK_POST_EN 105 106 - #define AUD_CLKID_MST_C_SCLK_POST_EN 106 107 - #define AUD_CLKID_MST_D_SCLK_POST_EN 107 108 - #define AUD_CLKID_MST_E_SCLK_POST_EN 108 109 - #define AUD_CLKID_MST_F_SCLK_POST_EN 109 110 - #define AUD_CLKID_MST_A_LRCLK_DIV 110 111 - #define AUD_CLKID_MST_B_LRCLK_DIV 111 112 - #define AUD_CLKID_MST_C_LRCLK_DIV 112 113 - #define AUD_CLKID_MST_D_LRCLK_DIV 113 114 - #define AUD_CLKID_MST_E_LRCLK_DIV 114 115 - #define AUD_CLKID_MST_F_LRCLK_DIV 115 116 - #define AUD_CLKID_TDMIN_A_SCLK_PRE_EN 137 117 - #define AUD_CLKID_TDMIN_B_SCLK_PRE_EN 138 118 - #define AUD_CLKID_TDMIN_C_SCLK_PRE_EN 139 119 - #define AUD_CLKID_TDMIN_LB_SCLK_PRE_EN 140 120 - #define AUD_CLKID_TDMOUT_A_SCLK_PRE_EN 141 121 - #define AUD_CLKID_TDMOUT_B_SCLK_PRE_EN 142 122 - #define AUD_CLKID_TDMOUT_C_SCLK_PRE_EN 143 123 - #define AUD_CLKID_TDMIN_A_SCLK_POST_EN 144 124 - #define AUD_CLKID_TDMIN_B_SCLK_POST_EN 145 125 - #define AUD_CLKID_TDMIN_C_SCLK_POST_EN 146 126 - #define AUD_CLKID_TDMIN_LB_SCLK_POST_EN 147 127 - #define AUD_CLKID_TDMOUT_A_SCLK_POST_EN 148 128 - #define AUD_CLKID_TDMOUT_B_SCLK_POST_EN 149 129 - #define AUD_CLKID_TDMOUT_C_SCLK_POST_EN 150 130 - #define AUD_CLKID_SPDIFOUT_B_CLK_SEL 153 131 - #define AUD_CLKID_SPDIFOUT_B_CLK_DIV 154 132 - #define AUD_CLKID_CLK81_EN 173 133 - #define AUD_CLKID_SYSCLK_A_DIV 174 134 - #define AUD_CLKID_SYSCLK_B_DIV 175 135 - #define AUD_CLKID_SYSCLK_A_EN 176 136 - #define AUD_CLKID_SYSCLK_B_EN 177 137 - 138 - /* include the CLKIDs which are part of the DT bindings */ 139 - #include <dt-bindings/clock/axg-audio-clkc.h> 140 - 141 - #define NR_CLKS 178 142 67 143 68 #endif /*__AXG_AUDIO_CLKC_H */
+144 -143
drivers/clk/meson/axg.c
··· 11 11 12 12 #include <linux/clk-provider.h> 13 13 #include <linux/init.h> 14 - #include <linux/of_device.h> 14 + #include <linux/mod_devicetable.h> 15 15 #include <linux/platform_device.h> 16 16 #include <linux/module.h> 17 17 ··· 20 20 #include "clk-mpll.h" 21 21 #include "axg.h" 22 22 #include "meson-eeclk.h" 23 + 24 + #include <dt-bindings/clock/axg-clkc.h> 23 25 24 26 static DEFINE_SPINLOCK(meson_clk_lock); 25 27 ··· 1892 1890 1893 1891 /* Array of all clocks provided by this provider */ 1894 1892 1895 - static struct clk_hw_onecell_data axg_hw_onecell_data = { 1896 - .hws = { 1897 - [CLKID_SYS_PLL] = &axg_sys_pll.hw, 1898 - [CLKID_FIXED_PLL] = &axg_fixed_pll.hw, 1899 - [CLKID_FCLK_DIV2] = &axg_fclk_div2.hw, 1900 - [CLKID_FCLK_DIV3] = &axg_fclk_div3.hw, 1901 - [CLKID_FCLK_DIV4] = &axg_fclk_div4.hw, 1902 - [CLKID_FCLK_DIV5] = &axg_fclk_div5.hw, 1903 - [CLKID_FCLK_DIV7] = &axg_fclk_div7.hw, 1904 - [CLKID_GP0_PLL] = &axg_gp0_pll.hw, 1905 - [CLKID_MPEG_SEL] = &axg_mpeg_clk_sel.hw, 1906 - [CLKID_MPEG_DIV] = &axg_mpeg_clk_div.hw, 1907 - [CLKID_CLK81] = &axg_clk81.hw, 1908 - [CLKID_MPLL0] = &axg_mpll0.hw, 1909 - [CLKID_MPLL1] = &axg_mpll1.hw, 1910 - [CLKID_MPLL2] = &axg_mpll2.hw, 1911 - [CLKID_MPLL3] = &axg_mpll3.hw, 1912 - [CLKID_DDR] = &axg_ddr.hw, 1913 - [CLKID_AUDIO_LOCKER] = &axg_audio_locker.hw, 1914 - [CLKID_MIPI_DSI_HOST] = &axg_mipi_dsi_host.hw, 1915 - [CLKID_ISA] = &axg_isa.hw, 1916 - [CLKID_PL301] = &axg_pl301.hw, 1917 - [CLKID_PERIPHS] = &axg_periphs.hw, 1918 - [CLKID_SPICC0] = &axg_spicc_0.hw, 1919 - [CLKID_I2C] = &axg_i2c.hw, 1920 - [CLKID_RNG0] = &axg_rng0.hw, 1921 - [CLKID_UART0] = &axg_uart0.hw, 1922 - [CLKID_MIPI_DSI_PHY] = &axg_mipi_dsi_phy.hw, 1923 - [CLKID_SPICC1] = &axg_spicc_1.hw, 1924 - [CLKID_PCIE_A] = &axg_pcie_a.hw, 1925 - [CLKID_PCIE_B] = &axg_pcie_b.hw, 1926 - [CLKID_HIU_IFACE] = &axg_hiu_reg.hw, 1927 - [CLKID_ASSIST_MISC] = &axg_assist_misc.hw, 1928 - [CLKID_SD_EMMC_B] = &axg_emmc_b.hw, 1929 - [CLKID_SD_EMMC_C] = &axg_emmc_c.hw, 1930 - [CLKID_DMA] = &axg_dma.hw, 1931 - [CLKID_SPI] = &axg_spi.hw, 1932 - [CLKID_AUDIO] = &axg_audio.hw, 1933 - [CLKID_ETH] = &axg_eth_core.hw, 1934 - [CLKID_UART1] = &axg_uart1.hw, 1935 - [CLKID_G2D] = &axg_g2d.hw, 1936 - [CLKID_USB0] = &axg_usb0.hw, 1937 - [CLKID_USB1] = &axg_usb1.hw, 1938 - [CLKID_RESET] = &axg_reset.hw, 1939 - [CLKID_USB] = &axg_usb_general.hw, 1940 - [CLKID_AHB_ARB0] = &axg_ahb_arb0.hw, 1941 - [CLKID_EFUSE] = &axg_efuse.hw, 1942 - [CLKID_BOOT_ROM] = &axg_boot_rom.hw, 1943 - [CLKID_AHB_DATA_BUS] = &axg_ahb_data_bus.hw, 1944 - [CLKID_AHB_CTRL_BUS] = &axg_ahb_ctrl_bus.hw, 1945 - [CLKID_USB1_DDR_BRIDGE] = &axg_usb1_to_ddr.hw, 1946 - [CLKID_USB0_DDR_BRIDGE] = &axg_usb0_to_ddr.hw, 1947 - [CLKID_MMC_PCLK] = &axg_mmc_pclk.hw, 1948 - [CLKID_VPU_INTR] = &axg_vpu_intr.hw, 1949 - [CLKID_SEC_AHB_AHB3_BRIDGE] = &axg_sec_ahb_ahb3_bridge.hw, 1950 - [CLKID_GIC] = &axg_gic.hw, 1951 - [CLKID_AO_MEDIA_CPU] = &axg_ao_media_cpu.hw, 1952 - [CLKID_AO_AHB_SRAM] = &axg_ao_ahb_sram.hw, 1953 - [CLKID_AO_AHB_BUS] = &axg_ao_ahb_bus.hw, 1954 - [CLKID_AO_IFACE] = &axg_ao_iface.hw, 1955 - [CLKID_AO_I2C] = &axg_ao_i2c.hw, 1956 - [CLKID_SD_EMMC_B_CLK0_SEL] = &axg_sd_emmc_b_clk0_sel.hw, 1957 - [CLKID_SD_EMMC_B_CLK0_DIV] = &axg_sd_emmc_b_clk0_div.hw, 1958 - [CLKID_SD_EMMC_B_CLK0] = &axg_sd_emmc_b_clk0.hw, 1959 - [CLKID_SD_EMMC_C_CLK0_SEL] = &axg_sd_emmc_c_clk0_sel.hw, 1960 - [CLKID_SD_EMMC_C_CLK0_DIV] = &axg_sd_emmc_c_clk0_div.hw, 1961 - [CLKID_SD_EMMC_C_CLK0] = &axg_sd_emmc_c_clk0.hw, 1962 - [CLKID_MPLL0_DIV] = &axg_mpll0_div.hw, 1963 - [CLKID_MPLL1_DIV] = &axg_mpll1_div.hw, 1964 - [CLKID_MPLL2_DIV] = &axg_mpll2_div.hw, 1965 - [CLKID_MPLL3_DIV] = &axg_mpll3_div.hw, 1966 - [CLKID_HIFI_PLL] = &axg_hifi_pll.hw, 1967 - [CLKID_MPLL_PREDIV] = &axg_mpll_prediv.hw, 1968 - [CLKID_FCLK_DIV2_DIV] = &axg_fclk_div2_div.hw, 1969 - [CLKID_FCLK_DIV3_DIV] = &axg_fclk_div3_div.hw, 1970 - [CLKID_FCLK_DIV4_DIV] = &axg_fclk_div4_div.hw, 1971 - [CLKID_FCLK_DIV5_DIV] = &axg_fclk_div5_div.hw, 1972 - [CLKID_FCLK_DIV7_DIV] = &axg_fclk_div7_div.hw, 1973 - [CLKID_PCIE_PLL] = &axg_pcie_pll.hw, 1974 - [CLKID_PCIE_MUX] = &axg_pcie_mux.hw, 1975 - [CLKID_PCIE_REF] = &axg_pcie_ref.hw, 1976 - [CLKID_PCIE_CML_EN0] = &axg_pcie_cml_en0.hw, 1977 - [CLKID_PCIE_CML_EN1] = &axg_pcie_cml_en1.hw, 1978 - [CLKID_GEN_CLK_SEL] = &axg_gen_clk_sel.hw, 1979 - [CLKID_GEN_CLK_DIV] = &axg_gen_clk_div.hw, 1980 - [CLKID_GEN_CLK] = &axg_gen_clk.hw, 1981 - [CLKID_SYS_PLL_DCO] = &axg_sys_pll_dco.hw, 1982 - [CLKID_FIXED_PLL_DCO] = &axg_fixed_pll_dco.hw, 1983 - [CLKID_GP0_PLL_DCO] = &axg_gp0_pll_dco.hw, 1984 - [CLKID_HIFI_PLL_DCO] = &axg_hifi_pll_dco.hw, 1985 - [CLKID_PCIE_PLL_DCO] = &axg_pcie_pll_dco.hw, 1986 - [CLKID_PCIE_PLL_OD] = &axg_pcie_pll_od.hw, 1987 - [CLKID_VPU_0_DIV] = &axg_vpu_0_div.hw, 1988 - [CLKID_VPU_0_SEL] = &axg_vpu_0_sel.hw, 1989 - [CLKID_VPU_0] = &axg_vpu_0.hw, 1990 - [CLKID_VPU_1_DIV] = &axg_vpu_1_div.hw, 1991 - [CLKID_VPU_1_SEL] = &axg_vpu_1_sel.hw, 1992 - [CLKID_VPU_1] = &axg_vpu_1.hw, 1993 - [CLKID_VPU] = &axg_vpu.hw, 1994 - [CLKID_VAPB_0_DIV] = &axg_vapb_0_div.hw, 1995 - [CLKID_VAPB_0_SEL] = &axg_vapb_0_sel.hw, 1996 - [CLKID_VAPB_0] = &axg_vapb_0.hw, 1997 - [CLKID_VAPB_1_DIV] = &axg_vapb_1_div.hw, 1998 - [CLKID_VAPB_1_SEL] = &axg_vapb_1_sel.hw, 1999 - [CLKID_VAPB_1] = &axg_vapb_1.hw, 2000 - [CLKID_VAPB_SEL] = &axg_vapb_sel.hw, 2001 - [CLKID_VAPB] = &axg_vapb.hw, 2002 - [CLKID_VCLK] = &axg_vclk.hw, 2003 - [CLKID_VCLK2] = &axg_vclk2.hw, 2004 - [CLKID_VCLK_SEL] = &axg_vclk_sel.hw, 2005 - [CLKID_VCLK2_SEL] = &axg_vclk2_sel.hw, 2006 - [CLKID_VCLK_INPUT] = &axg_vclk_input.hw, 2007 - [CLKID_VCLK2_INPUT] = &axg_vclk2_input.hw, 2008 - [CLKID_VCLK_DIV] = &axg_vclk_div.hw, 2009 - [CLKID_VCLK2_DIV] = &axg_vclk2_div.hw, 2010 - [CLKID_VCLK_DIV2_EN] = &axg_vclk_div2_en.hw, 2011 - [CLKID_VCLK_DIV4_EN] = &axg_vclk_div4_en.hw, 2012 - [CLKID_VCLK_DIV6_EN] = &axg_vclk_div6_en.hw, 2013 - [CLKID_VCLK_DIV12_EN] = &axg_vclk_div12_en.hw, 2014 - [CLKID_VCLK2_DIV2_EN] = &axg_vclk2_div2_en.hw, 2015 - [CLKID_VCLK2_DIV4_EN] = &axg_vclk2_div4_en.hw, 2016 - [CLKID_VCLK2_DIV6_EN] = &axg_vclk2_div6_en.hw, 2017 - [CLKID_VCLK2_DIV12_EN] = &axg_vclk2_div12_en.hw, 2018 - [CLKID_VCLK_DIV1] = &axg_vclk_div1.hw, 2019 - [CLKID_VCLK_DIV2] = &axg_vclk_div2.hw, 2020 - [CLKID_VCLK_DIV4] = &axg_vclk_div4.hw, 2021 - [CLKID_VCLK_DIV6] = &axg_vclk_div6.hw, 2022 - [CLKID_VCLK_DIV12] = &axg_vclk_div12.hw, 2023 - [CLKID_VCLK2_DIV1] = &axg_vclk2_div1.hw, 2024 - [CLKID_VCLK2_DIV2] = &axg_vclk2_div2.hw, 2025 - [CLKID_VCLK2_DIV4] = &axg_vclk2_div4.hw, 2026 - [CLKID_VCLK2_DIV6] = &axg_vclk2_div6.hw, 2027 - [CLKID_VCLK2_DIV12] = &axg_vclk2_div12.hw, 2028 - [CLKID_CTS_ENCL_SEL] = &axg_cts_encl_sel.hw, 2029 - [CLKID_CTS_ENCL] = &axg_cts_encl.hw, 2030 - [CLKID_VDIN_MEAS_SEL] = &axg_vdin_meas_sel.hw, 2031 - [CLKID_VDIN_MEAS_DIV] = &axg_vdin_meas_div.hw, 2032 - [CLKID_VDIN_MEAS] = &axg_vdin_meas.hw, 2033 - [NR_CLKS] = NULL, 2034 - }, 2035 - .num = NR_CLKS, 1893 + static struct clk_hw *axg_hw_clks[] = { 1894 + [CLKID_SYS_PLL] = &axg_sys_pll.hw, 1895 + [CLKID_FIXED_PLL] = &axg_fixed_pll.hw, 1896 + [CLKID_FCLK_DIV2] = &axg_fclk_div2.hw, 1897 + [CLKID_FCLK_DIV3] = &axg_fclk_div3.hw, 1898 + [CLKID_FCLK_DIV4] = &axg_fclk_div4.hw, 1899 + [CLKID_FCLK_DIV5] = &axg_fclk_div5.hw, 1900 + [CLKID_FCLK_DIV7] = &axg_fclk_div7.hw, 1901 + [CLKID_GP0_PLL] = &axg_gp0_pll.hw, 1902 + [CLKID_MPEG_SEL] = &axg_mpeg_clk_sel.hw, 1903 + [CLKID_MPEG_DIV] = &axg_mpeg_clk_div.hw, 1904 + [CLKID_CLK81] = &axg_clk81.hw, 1905 + [CLKID_MPLL0] = &axg_mpll0.hw, 1906 + [CLKID_MPLL1] = &axg_mpll1.hw, 1907 + [CLKID_MPLL2] = &axg_mpll2.hw, 1908 + [CLKID_MPLL3] = &axg_mpll3.hw, 1909 + [CLKID_DDR] = &axg_ddr.hw, 1910 + [CLKID_AUDIO_LOCKER] = &axg_audio_locker.hw, 1911 + [CLKID_MIPI_DSI_HOST] = &axg_mipi_dsi_host.hw, 1912 + [CLKID_ISA] = &axg_isa.hw, 1913 + [CLKID_PL301] = &axg_pl301.hw, 1914 + [CLKID_PERIPHS] = &axg_periphs.hw, 1915 + [CLKID_SPICC0] = &axg_spicc_0.hw, 1916 + [CLKID_I2C] = &axg_i2c.hw, 1917 + [CLKID_RNG0] = &axg_rng0.hw, 1918 + [CLKID_UART0] = &axg_uart0.hw, 1919 + [CLKID_MIPI_DSI_PHY] = &axg_mipi_dsi_phy.hw, 1920 + [CLKID_SPICC1] = &axg_spicc_1.hw, 1921 + [CLKID_PCIE_A] = &axg_pcie_a.hw, 1922 + [CLKID_PCIE_B] = &axg_pcie_b.hw, 1923 + [CLKID_HIU_IFACE] = &axg_hiu_reg.hw, 1924 + [CLKID_ASSIST_MISC] = &axg_assist_misc.hw, 1925 + [CLKID_SD_EMMC_B] = &axg_emmc_b.hw, 1926 + [CLKID_SD_EMMC_C] = &axg_emmc_c.hw, 1927 + [CLKID_DMA] = &axg_dma.hw, 1928 + [CLKID_SPI] = &axg_spi.hw, 1929 + [CLKID_AUDIO] = &axg_audio.hw, 1930 + [CLKID_ETH] = &axg_eth_core.hw, 1931 + [CLKID_UART1] = &axg_uart1.hw, 1932 + [CLKID_G2D] = &axg_g2d.hw, 1933 + [CLKID_USB0] = &axg_usb0.hw, 1934 + [CLKID_USB1] = &axg_usb1.hw, 1935 + [CLKID_RESET] = &axg_reset.hw, 1936 + [CLKID_USB] = &axg_usb_general.hw, 1937 + [CLKID_AHB_ARB0] = &axg_ahb_arb0.hw, 1938 + [CLKID_EFUSE] = &axg_efuse.hw, 1939 + [CLKID_BOOT_ROM] = &axg_boot_rom.hw, 1940 + [CLKID_AHB_DATA_BUS] = &axg_ahb_data_bus.hw, 1941 + [CLKID_AHB_CTRL_BUS] = &axg_ahb_ctrl_bus.hw, 1942 + [CLKID_USB1_DDR_BRIDGE] = &axg_usb1_to_ddr.hw, 1943 + [CLKID_USB0_DDR_BRIDGE] = &axg_usb0_to_ddr.hw, 1944 + [CLKID_MMC_PCLK] = &axg_mmc_pclk.hw, 1945 + [CLKID_VPU_INTR] = &axg_vpu_intr.hw, 1946 + [CLKID_SEC_AHB_AHB3_BRIDGE] = &axg_sec_ahb_ahb3_bridge.hw, 1947 + [CLKID_GIC] = &axg_gic.hw, 1948 + [CLKID_AO_MEDIA_CPU] = &axg_ao_media_cpu.hw, 1949 + [CLKID_AO_AHB_SRAM] = &axg_ao_ahb_sram.hw, 1950 + [CLKID_AO_AHB_BUS] = &axg_ao_ahb_bus.hw, 1951 + [CLKID_AO_IFACE] = &axg_ao_iface.hw, 1952 + [CLKID_AO_I2C] = &axg_ao_i2c.hw, 1953 + [CLKID_SD_EMMC_B_CLK0_SEL] = &axg_sd_emmc_b_clk0_sel.hw, 1954 + [CLKID_SD_EMMC_B_CLK0_DIV] = &axg_sd_emmc_b_clk0_div.hw, 1955 + [CLKID_SD_EMMC_B_CLK0] = &axg_sd_emmc_b_clk0.hw, 1956 + [CLKID_SD_EMMC_C_CLK0_SEL] = &axg_sd_emmc_c_clk0_sel.hw, 1957 + [CLKID_SD_EMMC_C_CLK0_DIV] = &axg_sd_emmc_c_clk0_div.hw, 1958 + [CLKID_SD_EMMC_C_CLK0] = &axg_sd_emmc_c_clk0.hw, 1959 + [CLKID_MPLL0_DIV] = &axg_mpll0_div.hw, 1960 + [CLKID_MPLL1_DIV] = &axg_mpll1_div.hw, 1961 + [CLKID_MPLL2_DIV] = &axg_mpll2_div.hw, 1962 + [CLKID_MPLL3_DIV] = &axg_mpll3_div.hw, 1963 + [CLKID_HIFI_PLL] = &axg_hifi_pll.hw, 1964 + [CLKID_MPLL_PREDIV] = &axg_mpll_prediv.hw, 1965 + [CLKID_FCLK_DIV2_DIV] = &axg_fclk_div2_div.hw, 1966 + [CLKID_FCLK_DIV3_DIV] = &axg_fclk_div3_div.hw, 1967 + [CLKID_FCLK_DIV4_DIV] = &axg_fclk_div4_div.hw, 1968 + [CLKID_FCLK_DIV5_DIV] = &axg_fclk_div5_div.hw, 1969 + [CLKID_FCLK_DIV7_DIV] = &axg_fclk_div7_div.hw, 1970 + [CLKID_PCIE_PLL] = &axg_pcie_pll.hw, 1971 + [CLKID_PCIE_MUX] = &axg_pcie_mux.hw, 1972 + [CLKID_PCIE_REF] = &axg_pcie_ref.hw, 1973 + [CLKID_PCIE_CML_EN0] = &axg_pcie_cml_en0.hw, 1974 + [CLKID_PCIE_CML_EN1] = &axg_pcie_cml_en1.hw, 1975 + [CLKID_GEN_CLK_SEL] = &axg_gen_clk_sel.hw, 1976 + [CLKID_GEN_CLK_DIV] = &axg_gen_clk_div.hw, 1977 + [CLKID_GEN_CLK] = &axg_gen_clk.hw, 1978 + [CLKID_SYS_PLL_DCO] = &axg_sys_pll_dco.hw, 1979 + [CLKID_FIXED_PLL_DCO] = &axg_fixed_pll_dco.hw, 1980 + [CLKID_GP0_PLL_DCO] = &axg_gp0_pll_dco.hw, 1981 + [CLKID_HIFI_PLL_DCO] = &axg_hifi_pll_dco.hw, 1982 + [CLKID_PCIE_PLL_DCO] = &axg_pcie_pll_dco.hw, 1983 + [CLKID_PCIE_PLL_OD] = &axg_pcie_pll_od.hw, 1984 + [CLKID_VPU_0_DIV] = &axg_vpu_0_div.hw, 1985 + [CLKID_VPU_0_SEL] = &axg_vpu_0_sel.hw, 1986 + [CLKID_VPU_0] = &axg_vpu_0.hw, 1987 + [CLKID_VPU_1_DIV] = &axg_vpu_1_div.hw, 1988 + [CLKID_VPU_1_SEL] = &axg_vpu_1_sel.hw, 1989 + [CLKID_VPU_1] = &axg_vpu_1.hw, 1990 + [CLKID_VPU] = &axg_vpu.hw, 1991 + [CLKID_VAPB_0_DIV] = &axg_vapb_0_div.hw, 1992 + [CLKID_VAPB_0_SEL] = &axg_vapb_0_sel.hw, 1993 + [CLKID_VAPB_0] = &axg_vapb_0.hw, 1994 + [CLKID_VAPB_1_DIV] = &axg_vapb_1_div.hw, 1995 + [CLKID_VAPB_1_SEL] = &axg_vapb_1_sel.hw, 1996 + [CLKID_VAPB_1] = &axg_vapb_1.hw, 1997 + [CLKID_VAPB_SEL] = &axg_vapb_sel.hw, 1998 + [CLKID_VAPB] = &axg_vapb.hw, 1999 + [CLKID_VCLK] = &axg_vclk.hw, 2000 + [CLKID_VCLK2] = &axg_vclk2.hw, 2001 + [CLKID_VCLK_SEL] = &axg_vclk_sel.hw, 2002 + [CLKID_VCLK2_SEL] = &axg_vclk2_sel.hw, 2003 + [CLKID_VCLK_INPUT] = &axg_vclk_input.hw, 2004 + [CLKID_VCLK2_INPUT] = &axg_vclk2_input.hw, 2005 + [CLKID_VCLK_DIV] = &axg_vclk_div.hw, 2006 + [CLKID_VCLK2_DIV] = &axg_vclk2_div.hw, 2007 + [CLKID_VCLK_DIV2_EN] = &axg_vclk_div2_en.hw, 2008 + [CLKID_VCLK_DIV4_EN] = &axg_vclk_div4_en.hw, 2009 + [CLKID_VCLK_DIV6_EN] = &axg_vclk_div6_en.hw, 2010 + [CLKID_VCLK_DIV12_EN] = &axg_vclk_div12_en.hw, 2011 + [CLKID_VCLK2_DIV2_EN] = &axg_vclk2_div2_en.hw, 2012 + [CLKID_VCLK2_DIV4_EN] = &axg_vclk2_div4_en.hw, 2013 + [CLKID_VCLK2_DIV6_EN] = &axg_vclk2_div6_en.hw, 2014 + [CLKID_VCLK2_DIV12_EN] = &axg_vclk2_div12_en.hw, 2015 + [CLKID_VCLK_DIV1] = &axg_vclk_div1.hw, 2016 + [CLKID_VCLK_DIV2] = &axg_vclk_div2.hw, 2017 + [CLKID_VCLK_DIV4] = &axg_vclk_div4.hw, 2018 + [CLKID_VCLK_DIV6] = &axg_vclk_div6.hw, 2019 + [CLKID_VCLK_DIV12] = &axg_vclk_div12.hw, 2020 + [CLKID_VCLK2_DIV1] = &axg_vclk2_div1.hw, 2021 + [CLKID_VCLK2_DIV2] = &axg_vclk2_div2.hw, 2022 + [CLKID_VCLK2_DIV4] = &axg_vclk2_div4.hw, 2023 + [CLKID_VCLK2_DIV6] = &axg_vclk2_div6.hw, 2024 + [CLKID_VCLK2_DIV12] = &axg_vclk2_div12.hw, 2025 + [CLKID_CTS_ENCL_SEL] = &axg_cts_encl_sel.hw, 2026 + [CLKID_CTS_ENCL] = &axg_cts_encl.hw, 2027 + [CLKID_VDIN_MEAS_SEL] = &axg_vdin_meas_sel.hw, 2028 + [CLKID_VDIN_MEAS_DIV] = &axg_vdin_meas_div.hw, 2029 + [CLKID_VDIN_MEAS] = &axg_vdin_meas.hw, 2036 2030 }; 2037 2031 2038 2032 /* Convenience table to populate regmap in .probe */ ··· 2161 2163 static const struct meson_eeclkc_data axg_clkc_data = { 2162 2164 .regmap_clks = axg_clk_regmaps, 2163 2165 .regmap_clk_num = ARRAY_SIZE(axg_clk_regmaps), 2164 - .hw_onecell_data = &axg_hw_onecell_data, 2166 + .hw_clks = { 2167 + .hws = axg_hw_clks, 2168 + .num = ARRAY_SIZE(axg_hw_clks), 2169 + }, 2165 2170 }; 2166 2171 2167 2172
-63
drivers/clk/meson/axg.h
··· 102 102 #define HHI_DPLL_TOP_I 0x318 103 103 #define HHI_DPLL_TOP2_I 0x31C 104 104 105 - /* 106 - * CLKID index values 107 - * 108 - * These indices are entirely contrived and do not map onto the hardware. 109 - * It has now been decided to expose everything by default in the DT header: 110 - * include/dt-bindings/clock/axg-clkc.h. Only the clocks ids we don't want 111 - * to expose, such as the internal muxes and dividers of composite clocks, 112 - * will remain defined here. 113 - */ 114 - #define CLKID_MPEG_SEL 8 115 - #define CLKID_MPEG_DIV 9 116 - #define CLKID_SD_EMMC_B_CLK0_SEL 61 117 - #define CLKID_SD_EMMC_B_CLK0_DIV 62 118 - #define CLKID_SD_EMMC_C_CLK0_SEL 63 119 - #define CLKID_SD_EMMC_C_CLK0_DIV 64 120 - #define CLKID_MPLL0_DIV 65 121 - #define CLKID_MPLL1_DIV 66 122 - #define CLKID_MPLL2_DIV 67 123 - #define CLKID_MPLL3_DIV 68 124 - #define CLKID_MPLL_PREDIV 70 125 - #define CLKID_FCLK_DIV2_DIV 71 126 - #define CLKID_FCLK_DIV3_DIV 72 127 - #define CLKID_FCLK_DIV4_DIV 73 128 - #define CLKID_FCLK_DIV5_DIV 74 129 - #define CLKID_FCLK_DIV7_DIV 75 130 - #define CLKID_PCIE_PLL 76 131 - #define CLKID_PCIE_MUX 77 132 - #define CLKID_PCIE_REF 78 133 - #define CLKID_GEN_CLK_SEL 82 134 - #define CLKID_GEN_CLK_DIV 83 135 - #define CLKID_SYS_PLL_DCO 85 136 - #define CLKID_FIXED_PLL_DCO 86 137 - #define CLKID_GP0_PLL_DCO 87 138 - #define CLKID_HIFI_PLL_DCO 88 139 - #define CLKID_PCIE_PLL_DCO 89 140 - #define CLKID_PCIE_PLL_OD 90 141 - #define CLKID_VPU_0_DIV 91 142 - #define CLKID_VPU_1_DIV 94 143 - #define CLKID_VAPB_0_DIV 98 144 - #define CLKID_VAPB_1_DIV 101 145 - #define CLKID_VCLK_SEL 108 146 - #define CLKID_VCLK2_SEL 109 147 - #define CLKID_VCLK_INPUT 110 148 - #define CLKID_VCLK2_INPUT 111 149 - #define CLKID_VCLK_DIV 112 150 - #define CLKID_VCLK2_DIV 113 151 - #define CLKID_VCLK_DIV2_EN 114 152 - #define CLKID_VCLK_DIV4_EN 115 153 - #define CLKID_VCLK_DIV6_EN 116 154 - #define CLKID_VCLK_DIV12_EN 117 155 - #define CLKID_VCLK2_DIV2_EN 118 156 - #define CLKID_VCLK2_DIV4_EN 119 157 - #define CLKID_VCLK2_DIV6_EN 120 158 - #define CLKID_VCLK2_DIV12_EN 121 159 - #define CLKID_CTS_ENCL_SEL 132 160 - #define CLKID_VDIN_MEAS_SEL 134 161 - #define CLKID_VDIN_MEAS_DIV 135 162 - 163 - #define NR_CLKS 137 164 - 165 - /* include the CLKIDs that have been made part of the DT binding */ 166 - #include <dt-bindings/clock/axg-clkc.h> 167 - 168 105 #endif /* __AXG_H */
+37 -35
drivers/clk/meson/g12a-aoclk.c
··· 14 14 #include <linux/mfd/syscon.h> 15 15 #include <linux/module.h> 16 16 #include "meson-aoclk.h" 17 - #include "g12a-aoclk.h" 18 17 19 18 #include "clk-regmap.h" 20 19 #include "clk-dualdiv.h" 20 + 21 + #include <dt-bindings/clock/g12a-aoclkc.h> 22 + #include <dt-bindings/reset/g12a-aoclkc.h> 21 23 22 24 /* 23 25 * AO Configuration Clock registers offsets ··· 413 411 &g12a_aoclk_saradc_gate, 414 412 }; 415 413 416 - static const struct clk_hw_onecell_data g12a_aoclk_onecell_data = { 417 - .hws = { 418 - [CLKID_AO_AHB] = &g12a_aoclk_ahb.hw, 419 - [CLKID_AO_IR_IN] = &g12a_aoclk_ir_in.hw, 420 - [CLKID_AO_I2C_M0] = &g12a_aoclk_i2c_m0.hw, 421 - [CLKID_AO_I2C_S0] = &g12a_aoclk_i2c_s0.hw, 422 - [CLKID_AO_UART] = &g12a_aoclk_uart.hw, 423 - [CLKID_AO_PROD_I2C] = &g12a_aoclk_prod_i2c.hw, 424 - [CLKID_AO_UART2] = &g12a_aoclk_uart2.hw, 425 - [CLKID_AO_IR_OUT] = &g12a_aoclk_ir_out.hw, 426 - [CLKID_AO_SAR_ADC] = &g12a_aoclk_saradc.hw, 427 - [CLKID_AO_MAILBOX] = &g12a_aoclk_mailbox.hw, 428 - [CLKID_AO_M3] = &g12a_aoclk_m3.hw, 429 - [CLKID_AO_AHB_SRAM] = &g12a_aoclk_ahb_sram.hw, 430 - [CLKID_AO_RTI] = &g12a_aoclk_rti.hw, 431 - [CLKID_AO_M4_FCLK] = &g12a_aoclk_m4_fclk.hw, 432 - [CLKID_AO_M4_HCLK] = &g12a_aoclk_m4_hclk.hw, 433 - [CLKID_AO_CLK81] = &g12a_aoclk_clk81.hw, 434 - [CLKID_AO_SAR_ADC_SEL] = &g12a_aoclk_saradc_mux.hw, 435 - [CLKID_AO_SAR_ADC_DIV] = &g12a_aoclk_saradc_div.hw, 436 - [CLKID_AO_SAR_ADC_CLK] = &g12a_aoclk_saradc_gate.hw, 437 - [CLKID_AO_CTS_OSCIN] = &g12a_aoclk_cts_oscin.hw, 438 - [CLKID_AO_32K_PRE] = &g12a_aoclk_32k_by_oscin_pre.hw, 439 - [CLKID_AO_32K_DIV] = &g12a_aoclk_32k_by_oscin_div.hw, 440 - [CLKID_AO_32K_SEL] = &g12a_aoclk_32k_by_oscin_sel.hw, 441 - [CLKID_AO_32K] = &g12a_aoclk_32k_by_oscin.hw, 442 - [CLKID_AO_CEC_PRE] = &g12a_aoclk_cec_pre.hw, 443 - [CLKID_AO_CEC_DIV] = &g12a_aoclk_cec_div.hw, 444 - [CLKID_AO_CEC_SEL] = &g12a_aoclk_cec_sel.hw, 445 - [CLKID_AO_CEC] = &g12a_aoclk_cec.hw, 446 - [CLKID_AO_CTS_RTC_OSCIN] = &g12a_aoclk_cts_rtc_oscin.hw, 447 - }, 448 - .num = NR_CLKS, 414 + static struct clk_hw *g12a_aoclk_hw_clks[] = { 415 + [CLKID_AO_AHB] = &g12a_aoclk_ahb.hw, 416 + [CLKID_AO_IR_IN] = &g12a_aoclk_ir_in.hw, 417 + [CLKID_AO_I2C_M0] = &g12a_aoclk_i2c_m0.hw, 418 + [CLKID_AO_I2C_S0] = &g12a_aoclk_i2c_s0.hw, 419 + [CLKID_AO_UART] = &g12a_aoclk_uart.hw, 420 + [CLKID_AO_PROD_I2C] = &g12a_aoclk_prod_i2c.hw, 421 + [CLKID_AO_UART2] = &g12a_aoclk_uart2.hw, 422 + [CLKID_AO_IR_OUT] = &g12a_aoclk_ir_out.hw, 423 + [CLKID_AO_SAR_ADC] = &g12a_aoclk_saradc.hw, 424 + [CLKID_AO_MAILBOX] = &g12a_aoclk_mailbox.hw, 425 + [CLKID_AO_M3] = &g12a_aoclk_m3.hw, 426 + [CLKID_AO_AHB_SRAM] = &g12a_aoclk_ahb_sram.hw, 427 + [CLKID_AO_RTI] = &g12a_aoclk_rti.hw, 428 + [CLKID_AO_M4_FCLK] = &g12a_aoclk_m4_fclk.hw, 429 + [CLKID_AO_M4_HCLK] = &g12a_aoclk_m4_hclk.hw, 430 + [CLKID_AO_CLK81] = &g12a_aoclk_clk81.hw, 431 + [CLKID_AO_SAR_ADC_SEL] = &g12a_aoclk_saradc_mux.hw, 432 + [CLKID_AO_SAR_ADC_DIV] = &g12a_aoclk_saradc_div.hw, 433 + [CLKID_AO_SAR_ADC_CLK] = &g12a_aoclk_saradc_gate.hw, 434 + [CLKID_AO_CTS_OSCIN] = &g12a_aoclk_cts_oscin.hw, 435 + [CLKID_AO_32K_PRE] = &g12a_aoclk_32k_by_oscin_pre.hw, 436 + [CLKID_AO_32K_DIV] = &g12a_aoclk_32k_by_oscin_div.hw, 437 + [CLKID_AO_32K_SEL] = &g12a_aoclk_32k_by_oscin_sel.hw, 438 + [CLKID_AO_32K] = &g12a_aoclk_32k_by_oscin.hw, 439 + [CLKID_AO_CEC_PRE] = &g12a_aoclk_cec_pre.hw, 440 + [CLKID_AO_CEC_DIV] = &g12a_aoclk_cec_div.hw, 441 + [CLKID_AO_CEC_SEL] = &g12a_aoclk_cec_sel.hw, 442 + [CLKID_AO_CEC] = &g12a_aoclk_cec.hw, 443 + [CLKID_AO_CTS_RTC_OSCIN] = &g12a_aoclk_cts_rtc_oscin.hw, 449 444 }; 450 445 451 446 static const struct meson_aoclk_data g12a_aoclkc_data = { ··· 451 452 .reset = g12a_aoclk_reset, 452 453 .num_clks = ARRAY_SIZE(g12a_aoclk_regmap), 453 454 .clks = g12a_aoclk_regmap, 454 - .hw_data = &g12a_aoclk_onecell_data, 455 + .hw_clks = { 456 + .hws = g12a_aoclk_hw_clks, 457 + .num = ARRAY_SIZE(g12a_aoclk_hw_clks), 458 + }, 455 459 }; 456 460 457 461 static const struct of_device_id g12a_aoclkc_match_table[] = {
-32
drivers/clk/meson/g12a-aoclk.h
··· 1 - /* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */ 2 - /* 3 - * Copyright (c) 2019 BayLibre, SAS 4 - * Author: Neil Armstrong <narmstrong@baylibre.com> 5 - */ 6 - 7 - #ifndef __G12A_AOCLKC_H 8 - #define __G12A_AOCLKC_H 9 - 10 - /* 11 - * CLKID index values 12 - * 13 - * These indices are entirely contrived and do not map onto the hardware. 14 - * It has now been decided to expose everything by default in the DT header: 15 - * include/dt-bindings/clock/g12a-aoclkc.h. Only the clocks ids we don't want 16 - * to expose, such as the internal muxes and dividers of composite clocks, 17 - * will remain defined here. 18 - */ 19 - #define CLKID_AO_SAR_ADC_DIV 17 20 - #define CLKID_AO_32K_PRE 20 21 - #define CLKID_AO_32K_DIV 21 22 - #define CLKID_AO_32K_SEL 22 23 - #define CLKID_AO_CEC_PRE 24 24 - #define CLKID_AO_CEC_DIV 25 25 - #define CLKID_AO_CEC_SEL 26 26 - 27 - #define NR_CLKS 29 28 - 29 - #include <dt-bindings/clock/g12a-aoclkc.h> 30 - #include <dt-bindings/reset/g12a-aoclkc.h> 31 - 32 - #endif /* __G12A_AOCLKC_H */
+741 -742
drivers/clk/meson/g12a.c
··· 12 12 13 13 #include <linux/clk-provider.h> 14 14 #include <linux/init.h> 15 - #include <linux/of_device.h> 15 + #include <linux/of.h> 16 16 #include <linux/platform_device.h> 17 17 #include <linux/clk.h> 18 18 #include <linux/module.h> ··· 24 24 #include "vid-pll-div.h" 25 25 #include "meson-eeclk.h" 26 26 #include "g12a.h" 27 + 28 + #include <dt-bindings/clock/g12a-clkc.h> 27 29 28 30 static DEFINE_SPINLOCK(meson_clk_lock); 29 31 ··· 4246 4244 static MESON_GATE_RO(g12a_sec_ahb_apb3, HHI_GCLK_OTHER2, 4); 4247 4245 4248 4246 /* Array of all clocks provided by this provider */ 4249 - static struct clk_hw_onecell_data g12a_hw_onecell_data = { 4250 - .hws = { 4251 - [CLKID_SYS_PLL] = &g12a_sys_pll.hw, 4252 - [CLKID_FIXED_PLL] = &g12a_fixed_pll.hw, 4253 - [CLKID_FCLK_DIV2] = &g12a_fclk_div2.hw, 4254 - [CLKID_FCLK_DIV3] = &g12a_fclk_div3.hw, 4255 - [CLKID_FCLK_DIV4] = &g12a_fclk_div4.hw, 4256 - [CLKID_FCLK_DIV5] = &g12a_fclk_div5.hw, 4257 - [CLKID_FCLK_DIV7] = &g12a_fclk_div7.hw, 4258 - [CLKID_FCLK_DIV2P5] = &g12a_fclk_div2p5.hw, 4259 - [CLKID_GP0_PLL] = &g12a_gp0_pll.hw, 4260 - [CLKID_MPEG_SEL] = &g12a_mpeg_clk_sel.hw, 4261 - [CLKID_MPEG_DIV] = &g12a_mpeg_clk_div.hw, 4262 - [CLKID_CLK81] = &g12a_clk81.hw, 4263 - [CLKID_MPLL0] = &g12a_mpll0.hw, 4264 - [CLKID_MPLL1] = &g12a_mpll1.hw, 4265 - [CLKID_MPLL2] = &g12a_mpll2.hw, 4266 - [CLKID_MPLL3] = &g12a_mpll3.hw, 4267 - [CLKID_DDR] = &g12a_ddr.hw, 4268 - [CLKID_DOS] = &g12a_dos.hw, 4269 - [CLKID_AUDIO_LOCKER] = &g12a_audio_locker.hw, 4270 - [CLKID_MIPI_DSI_HOST] = &g12a_mipi_dsi_host.hw, 4271 - [CLKID_ETH_PHY] = &g12a_eth_phy.hw, 4272 - [CLKID_ISA] = &g12a_isa.hw, 4273 - [CLKID_PL301] = &g12a_pl301.hw, 4274 - [CLKID_PERIPHS] = &g12a_periphs.hw, 4275 - [CLKID_SPICC0] = &g12a_spicc_0.hw, 4276 - [CLKID_I2C] = &g12a_i2c.hw, 4277 - [CLKID_SANA] = &g12a_sana.hw, 4278 - [CLKID_SD] = &g12a_sd.hw, 4279 - [CLKID_RNG0] = &g12a_rng0.hw, 4280 - [CLKID_UART0] = &g12a_uart0.hw, 4281 - [CLKID_SPICC1] = &g12a_spicc_1.hw, 4282 - [CLKID_HIU_IFACE] = &g12a_hiu_reg.hw, 4283 - [CLKID_MIPI_DSI_PHY] = &g12a_mipi_dsi_phy.hw, 4284 - [CLKID_ASSIST_MISC] = &g12a_assist_misc.hw, 4285 - [CLKID_SD_EMMC_A] = &g12a_emmc_a.hw, 4286 - [CLKID_SD_EMMC_B] = &g12a_emmc_b.hw, 4287 - [CLKID_SD_EMMC_C] = &g12a_emmc_c.hw, 4288 - [CLKID_AUDIO_CODEC] = &g12a_audio_codec.hw, 4289 - [CLKID_AUDIO] = &g12a_audio.hw, 4290 - [CLKID_ETH] = &g12a_eth_core.hw, 4291 - [CLKID_DEMUX] = &g12a_demux.hw, 4292 - [CLKID_AUDIO_IFIFO] = &g12a_audio_ififo.hw, 4293 - [CLKID_ADC] = &g12a_adc.hw, 4294 - [CLKID_UART1] = &g12a_uart1.hw, 4295 - [CLKID_G2D] = &g12a_g2d.hw, 4296 - [CLKID_RESET] = &g12a_reset.hw, 4297 - [CLKID_PCIE_COMB] = &g12a_pcie_comb.hw, 4298 - [CLKID_PARSER] = &g12a_parser.hw, 4299 - [CLKID_USB] = &g12a_usb_general.hw, 4300 - [CLKID_PCIE_PHY] = &g12a_pcie_phy.hw, 4301 - [CLKID_AHB_ARB0] = &g12a_ahb_arb0.hw, 4302 - [CLKID_AHB_DATA_BUS] = &g12a_ahb_data_bus.hw, 4303 - [CLKID_AHB_CTRL_BUS] = &g12a_ahb_ctrl_bus.hw, 4304 - [CLKID_HTX_HDCP22] = &g12a_htx_hdcp22.hw, 4305 - [CLKID_HTX_PCLK] = &g12a_htx_pclk.hw, 4306 - [CLKID_BT656] = &g12a_bt656.hw, 4307 - [CLKID_USB1_DDR_BRIDGE] = &g12a_usb1_to_ddr.hw, 4308 - [CLKID_MMC_PCLK] = &g12a_mmc_pclk.hw, 4309 - [CLKID_UART2] = &g12a_uart2.hw, 4310 - [CLKID_VPU_INTR] = &g12a_vpu_intr.hw, 4311 - [CLKID_GIC] = &g12a_gic.hw, 4312 - [CLKID_SD_EMMC_A_CLK0_SEL] = &g12a_sd_emmc_a_clk0_sel.hw, 4313 - [CLKID_SD_EMMC_A_CLK0_DIV] = &g12a_sd_emmc_a_clk0_div.hw, 4314 - [CLKID_SD_EMMC_A_CLK0] = &g12a_sd_emmc_a_clk0.hw, 4315 - [CLKID_SD_EMMC_B_CLK0_SEL] = &g12a_sd_emmc_b_clk0_sel.hw, 4316 - [CLKID_SD_EMMC_B_CLK0_DIV] = &g12a_sd_emmc_b_clk0_div.hw, 4317 - [CLKID_SD_EMMC_B_CLK0] = &g12a_sd_emmc_b_clk0.hw, 4318 - [CLKID_SD_EMMC_C_CLK0_SEL] = &g12a_sd_emmc_c_clk0_sel.hw, 4319 - [CLKID_SD_EMMC_C_CLK0_DIV] = &g12a_sd_emmc_c_clk0_div.hw, 4320 - [CLKID_SD_EMMC_C_CLK0] = &g12a_sd_emmc_c_clk0.hw, 4321 - [CLKID_MPLL0_DIV] = &g12a_mpll0_div.hw, 4322 - [CLKID_MPLL1_DIV] = &g12a_mpll1_div.hw, 4323 - [CLKID_MPLL2_DIV] = &g12a_mpll2_div.hw, 4324 - [CLKID_MPLL3_DIV] = &g12a_mpll3_div.hw, 4325 - [CLKID_FCLK_DIV2_DIV] = &g12a_fclk_div2_div.hw, 4326 - [CLKID_FCLK_DIV3_DIV] = &g12a_fclk_div3_div.hw, 4327 - [CLKID_FCLK_DIV4_DIV] = &g12a_fclk_div4_div.hw, 4328 - [CLKID_FCLK_DIV5_DIV] = &g12a_fclk_div5_div.hw, 4329 - [CLKID_FCLK_DIV7_DIV] = &g12a_fclk_div7_div.hw, 4330 - [CLKID_FCLK_DIV2P5_DIV] = &g12a_fclk_div2p5_div.hw, 4331 - [CLKID_HIFI_PLL] = &g12a_hifi_pll.hw, 4332 - [CLKID_VCLK2_VENCI0] = &g12a_vclk2_venci0.hw, 4333 - [CLKID_VCLK2_VENCI1] = &g12a_vclk2_venci1.hw, 4334 - [CLKID_VCLK2_VENCP0] = &g12a_vclk2_vencp0.hw, 4335 - [CLKID_VCLK2_VENCP1] = &g12a_vclk2_vencp1.hw, 4336 - [CLKID_VCLK2_VENCT0] = &g12a_vclk2_venct0.hw, 4337 - [CLKID_VCLK2_VENCT1] = &g12a_vclk2_venct1.hw, 4338 - [CLKID_VCLK2_OTHER] = &g12a_vclk2_other.hw, 4339 - [CLKID_VCLK2_ENCI] = &g12a_vclk2_enci.hw, 4340 - [CLKID_VCLK2_ENCP] = &g12a_vclk2_encp.hw, 4341 - [CLKID_DAC_CLK] = &g12a_dac_clk.hw, 4342 - [CLKID_AOCLK] = &g12a_aoclk_gate.hw, 4343 - [CLKID_IEC958] = &g12a_iec958_gate.hw, 4344 - [CLKID_ENC480P] = &g12a_enc480p.hw, 4345 - [CLKID_RNG1] = &g12a_rng1.hw, 4346 - [CLKID_VCLK2_ENCT] = &g12a_vclk2_enct.hw, 4347 - [CLKID_VCLK2_ENCL] = &g12a_vclk2_encl.hw, 4348 - [CLKID_VCLK2_VENCLMMC] = &g12a_vclk2_venclmmc.hw, 4349 - [CLKID_VCLK2_VENCL] = &g12a_vclk2_vencl.hw, 4350 - [CLKID_VCLK2_OTHER1] = &g12a_vclk2_other1.hw, 4351 - [CLKID_FIXED_PLL_DCO] = &g12a_fixed_pll_dco.hw, 4352 - [CLKID_SYS_PLL_DCO] = &g12a_sys_pll_dco.hw, 4353 - [CLKID_GP0_PLL_DCO] = &g12a_gp0_pll_dco.hw, 4354 - [CLKID_HIFI_PLL_DCO] = &g12a_hifi_pll_dco.hw, 4355 - [CLKID_DMA] = &g12a_dma.hw, 4356 - [CLKID_EFUSE] = &g12a_efuse.hw, 4357 - [CLKID_ROM_BOOT] = &g12a_rom_boot.hw, 4358 - [CLKID_RESET_SEC] = &g12a_reset_sec.hw, 4359 - [CLKID_SEC_AHB_APB3] = &g12a_sec_ahb_apb3.hw, 4360 - [CLKID_MPLL_PREDIV] = &g12a_mpll_prediv.hw, 4361 - [CLKID_VPU_0_SEL] = &g12a_vpu_0_sel.hw, 4362 - [CLKID_VPU_0_DIV] = &g12a_vpu_0_div.hw, 4363 - [CLKID_VPU_0] = &g12a_vpu_0.hw, 4364 - [CLKID_VPU_1_SEL] = &g12a_vpu_1_sel.hw, 4365 - [CLKID_VPU_1_DIV] = &g12a_vpu_1_div.hw, 4366 - [CLKID_VPU_1] = &g12a_vpu_1.hw, 4367 - [CLKID_VPU] = &g12a_vpu.hw, 4368 - [CLKID_VAPB_0_SEL] = &g12a_vapb_0_sel.hw, 4369 - [CLKID_VAPB_0_DIV] = &g12a_vapb_0_div.hw, 4370 - [CLKID_VAPB_0] = &g12a_vapb_0.hw, 4371 - [CLKID_VAPB_1_SEL] = &g12a_vapb_1_sel.hw, 4372 - [CLKID_VAPB_1_DIV] = &g12a_vapb_1_div.hw, 4373 - [CLKID_VAPB_1] = &g12a_vapb_1.hw, 4374 - [CLKID_VAPB_SEL] = &g12a_vapb_sel.hw, 4375 - [CLKID_VAPB] = &g12a_vapb.hw, 4376 - [CLKID_HDMI_PLL_DCO] = &g12a_hdmi_pll_dco.hw, 4377 - [CLKID_HDMI_PLL_OD] = &g12a_hdmi_pll_od.hw, 4378 - [CLKID_HDMI_PLL_OD2] = &g12a_hdmi_pll_od2.hw, 4379 - [CLKID_HDMI_PLL] = &g12a_hdmi_pll.hw, 4380 - [CLKID_VID_PLL] = &g12a_vid_pll_div.hw, 4381 - [CLKID_VID_PLL_SEL] = &g12a_vid_pll_sel.hw, 4382 - [CLKID_VID_PLL_DIV] = &g12a_vid_pll.hw, 4383 - [CLKID_VCLK_SEL] = &g12a_vclk_sel.hw, 4384 - [CLKID_VCLK2_SEL] = &g12a_vclk2_sel.hw, 4385 - [CLKID_VCLK_INPUT] = &g12a_vclk_input.hw, 4386 - [CLKID_VCLK2_INPUT] = &g12a_vclk2_input.hw, 4387 - [CLKID_VCLK_DIV] = &g12a_vclk_div.hw, 4388 - [CLKID_VCLK2_DIV] = &g12a_vclk2_div.hw, 4389 - [CLKID_VCLK] = &g12a_vclk.hw, 4390 - [CLKID_VCLK2] = &g12a_vclk2.hw, 4391 - [CLKID_VCLK_DIV1] = &g12a_vclk_div1.hw, 4392 - [CLKID_VCLK_DIV2_EN] = &g12a_vclk_div2_en.hw, 4393 - [CLKID_VCLK_DIV4_EN] = &g12a_vclk_div4_en.hw, 4394 - [CLKID_VCLK_DIV6_EN] = &g12a_vclk_div6_en.hw, 4395 - [CLKID_VCLK_DIV12_EN] = &g12a_vclk_div12_en.hw, 4396 - [CLKID_VCLK2_DIV1] = &g12a_vclk2_div1.hw, 4397 - [CLKID_VCLK2_DIV2_EN] = &g12a_vclk2_div2_en.hw, 4398 - [CLKID_VCLK2_DIV4_EN] = &g12a_vclk2_div4_en.hw, 4399 - [CLKID_VCLK2_DIV6_EN] = &g12a_vclk2_div6_en.hw, 4400 - [CLKID_VCLK2_DIV12_EN] = &g12a_vclk2_div12_en.hw, 4401 - [CLKID_VCLK_DIV2] = &g12a_vclk_div2.hw, 4402 - [CLKID_VCLK_DIV4] = &g12a_vclk_div4.hw, 4403 - [CLKID_VCLK_DIV6] = &g12a_vclk_div6.hw, 4404 - [CLKID_VCLK_DIV12] = &g12a_vclk_div12.hw, 4405 - [CLKID_VCLK2_DIV2] = &g12a_vclk2_div2.hw, 4406 - [CLKID_VCLK2_DIV4] = &g12a_vclk2_div4.hw, 4407 - [CLKID_VCLK2_DIV6] = &g12a_vclk2_div6.hw, 4408 - [CLKID_VCLK2_DIV12] = &g12a_vclk2_div12.hw, 4409 - [CLKID_CTS_ENCI_SEL] = &g12a_cts_enci_sel.hw, 4410 - [CLKID_CTS_ENCP_SEL] = &g12a_cts_encp_sel.hw, 4411 - [CLKID_CTS_VDAC_SEL] = &g12a_cts_vdac_sel.hw, 4412 - [CLKID_HDMI_TX_SEL] = &g12a_hdmi_tx_sel.hw, 4413 - [CLKID_CTS_ENCI] = &g12a_cts_enci.hw, 4414 - [CLKID_CTS_ENCP] = &g12a_cts_encp.hw, 4415 - [CLKID_CTS_VDAC] = &g12a_cts_vdac.hw, 4416 - [CLKID_HDMI_TX] = &g12a_hdmi_tx.hw, 4417 - [CLKID_HDMI_SEL] = &g12a_hdmi_sel.hw, 4418 - [CLKID_HDMI_DIV] = &g12a_hdmi_div.hw, 4419 - [CLKID_HDMI] = &g12a_hdmi.hw, 4420 - [CLKID_MALI_0_SEL] = &g12a_mali_0_sel.hw, 4421 - [CLKID_MALI_0_DIV] = &g12a_mali_0_div.hw, 4422 - [CLKID_MALI_0] = &g12a_mali_0.hw, 4423 - [CLKID_MALI_1_SEL] = &g12a_mali_1_sel.hw, 4424 - [CLKID_MALI_1_DIV] = &g12a_mali_1_div.hw, 4425 - [CLKID_MALI_1] = &g12a_mali_1.hw, 4426 - [CLKID_MALI] = &g12a_mali.hw, 4427 - [CLKID_MPLL_50M_DIV] = &g12a_mpll_50m_div.hw, 4428 - [CLKID_MPLL_50M] = &g12a_mpll_50m.hw, 4429 - [CLKID_SYS_PLL_DIV16_EN] = &g12a_sys_pll_div16_en.hw, 4430 - [CLKID_SYS_PLL_DIV16] = &g12a_sys_pll_div16.hw, 4431 - [CLKID_CPU_CLK_DYN0_SEL] = &g12a_cpu_clk_premux0.hw, 4432 - [CLKID_CPU_CLK_DYN0_DIV] = &g12a_cpu_clk_mux0_div.hw, 4433 - [CLKID_CPU_CLK_DYN0] = &g12a_cpu_clk_postmux0.hw, 4434 - [CLKID_CPU_CLK_DYN1_SEL] = &g12a_cpu_clk_premux1.hw, 4435 - [CLKID_CPU_CLK_DYN1_DIV] = &g12a_cpu_clk_mux1_div.hw, 4436 - [CLKID_CPU_CLK_DYN1] = &g12a_cpu_clk_postmux1.hw, 4437 - [CLKID_CPU_CLK_DYN] = &g12a_cpu_clk_dyn.hw, 4438 - [CLKID_CPU_CLK] = &g12a_cpu_clk.hw, 4439 - [CLKID_CPU_CLK_DIV16_EN] = &g12a_cpu_clk_div16_en.hw, 4440 - [CLKID_CPU_CLK_DIV16] = &g12a_cpu_clk_div16.hw, 4441 - [CLKID_CPU_CLK_APB_DIV] = &g12a_cpu_clk_apb_div.hw, 4442 - [CLKID_CPU_CLK_APB] = &g12a_cpu_clk_apb.hw, 4443 - [CLKID_CPU_CLK_ATB_DIV] = &g12a_cpu_clk_atb_div.hw, 4444 - [CLKID_CPU_CLK_ATB] = &g12a_cpu_clk_atb.hw, 4445 - [CLKID_CPU_CLK_AXI_DIV] = &g12a_cpu_clk_axi_div.hw, 4446 - [CLKID_CPU_CLK_AXI] = &g12a_cpu_clk_axi.hw, 4447 - [CLKID_CPU_CLK_TRACE_DIV] = &g12a_cpu_clk_trace_div.hw, 4448 - [CLKID_CPU_CLK_TRACE] = &g12a_cpu_clk_trace.hw, 4449 - [CLKID_PCIE_PLL_DCO] = &g12a_pcie_pll_dco.hw, 4450 - [CLKID_PCIE_PLL_DCO_DIV2] = &g12a_pcie_pll_dco_div2.hw, 4451 - [CLKID_PCIE_PLL_OD] = &g12a_pcie_pll_od.hw, 4452 - [CLKID_PCIE_PLL] = &g12a_pcie_pll.hw, 4453 - [CLKID_VDEC_1_SEL] = &g12a_vdec_1_sel.hw, 4454 - [CLKID_VDEC_1_DIV] = &g12a_vdec_1_div.hw, 4455 - [CLKID_VDEC_1] = &g12a_vdec_1.hw, 4456 - [CLKID_VDEC_HEVC_SEL] = &g12a_vdec_hevc_sel.hw, 4457 - [CLKID_VDEC_HEVC_DIV] = &g12a_vdec_hevc_div.hw, 4458 - [CLKID_VDEC_HEVC] = &g12a_vdec_hevc.hw, 4459 - [CLKID_VDEC_HEVCF_SEL] = &g12a_vdec_hevcf_sel.hw, 4460 - [CLKID_VDEC_HEVCF_DIV] = &g12a_vdec_hevcf_div.hw, 4461 - [CLKID_VDEC_HEVCF] = &g12a_vdec_hevcf.hw, 4462 - [CLKID_TS_DIV] = &g12a_ts_div.hw, 4463 - [CLKID_TS] = &g12a_ts.hw, 4464 - [CLKID_SPICC0_SCLK_SEL] = &g12a_spicc0_sclk_sel.hw, 4465 - [CLKID_SPICC0_SCLK_DIV] = &g12a_spicc0_sclk_div.hw, 4466 - [CLKID_SPICC0_SCLK] = &g12a_spicc0_sclk.hw, 4467 - [CLKID_SPICC1_SCLK_SEL] = &g12a_spicc1_sclk_sel.hw, 4468 - [CLKID_SPICC1_SCLK_DIV] = &g12a_spicc1_sclk_div.hw, 4469 - [CLKID_SPICC1_SCLK] = &g12a_spicc1_sclk.hw, 4470 - [CLKID_MIPI_DSI_PXCLK_SEL] = &g12a_mipi_dsi_pxclk_sel.hw, 4471 - [CLKID_MIPI_DSI_PXCLK_DIV] = &g12a_mipi_dsi_pxclk_div.hw, 4472 - [CLKID_MIPI_DSI_PXCLK] = &g12a_mipi_dsi_pxclk.hw, 4473 - [NR_CLKS] = NULL, 4474 - }, 4475 - .num = NR_CLKS, 4247 + static struct clk_hw *g12a_hw_clks[] = { 4248 + [CLKID_SYS_PLL] = &g12a_sys_pll.hw, 4249 + [CLKID_FIXED_PLL] = &g12a_fixed_pll.hw, 4250 + [CLKID_FCLK_DIV2] = &g12a_fclk_div2.hw, 4251 + [CLKID_FCLK_DIV3] = &g12a_fclk_div3.hw, 4252 + [CLKID_FCLK_DIV4] = &g12a_fclk_div4.hw, 4253 + [CLKID_FCLK_DIV5] = &g12a_fclk_div5.hw, 4254 + [CLKID_FCLK_DIV7] = &g12a_fclk_div7.hw, 4255 + [CLKID_FCLK_DIV2P5] = &g12a_fclk_div2p5.hw, 4256 + [CLKID_GP0_PLL] = &g12a_gp0_pll.hw, 4257 + [CLKID_MPEG_SEL] = &g12a_mpeg_clk_sel.hw, 4258 + [CLKID_MPEG_DIV] = &g12a_mpeg_clk_div.hw, 4259 + [CLKID_CLK81] = &g12a_clk81.hw, 4260 + [CLKID_MPLL0] = &g12a_mpll0.hw, 4261 + [CLKID_MPLL1] = &g12a_mpll1.hw, 4262 + [CLKID_MPLL2] = &g12a_mpll2.hw, 4263 + [CLKID_MPLL3] = &g12a_mpll3.hw, 4264 + [CLKID_DDR] = &g12a_ddr.hw, 4265 + [CLKID_DOS] = &g12a_dos.hw, 4266 + [CLKID_AUDIO_LOCKER] = &g12a_audio_locker.hw, 4267 + [CLKID_MIPI_DSI_HOST] = &g12a_mipi_dsi_host.hw, 4268 + [CLKID_ETH_PHY] = &g12a_eth_phy.hw, 4269 + [CLKID_ISA] = &g12a_isa.hw, 4270 + [CLKID_PL301] = &g12a_pl301.hw, 4271 + [CLKID_PERIPHS] = &g12a_periphs.hw, 4272 + [CLKID_SPICC0] = &g12a_spicc_0.hw, 4273 + [CLKID_I2C] = &g12a_i2c.hw, 4274 + [CLKID_SANA] = &g12a_sana.hw, 4275 + [CLKID_SD] = &g12a_sd.hw, 4276 + [CLKID_RNG0] = &g12a_rng0.hw, 4277 + [CLKID_UART0] = &g12a_uart0.hw, 4278 + [CLKID_SPICC1] = &g12a_spicc_1.hw, 4279 + [CLKID_HIU_IFACE] = &g12a_hiu_reg.hw, 4280 + [CLKID_MIPI_DSI_PHY] = &g12a_mipi_dsi_phy.hw, 4281 + [CLKID_ASSIST_MISC] = &g12a_assist_misc.hw, 4282 + [CLKID_SD_EMMC_A] = &g12a_emmc_a.hw, 4283 + [CLKID_SD_EMMC_B] = &g12a_emmc_b.hw, 4284 + [CLKID_SD_EMMC_C] = &g12a_emmc_c.hw, 4285 + [CLKID_AUDIO_CODEC] = &g12a_audio_codec.hw, 4286 + [CLKID_AUDIO] = &g12a_audio.hw, 4287 + [CLKID_ETH] = &g12a_eth_core.hw, 4288 + [CLKID_DEMUX] = &g12a_demux.hw, 4289 + [CLKID_AUDIO_IFIFO] = &g12a_audio_ififo.hw, 4290 + [CLKID_ADC] = &g12a_adc.hw, 4291 + [CLKID_UART1] = &g12a_uart1.hw, 4292 + [CLKID_G2D] = &g12a_g2d.hw, 4293 + [CLKID_RESET] = &g12a_reset.hw, 4294 + [CLKID_PCIE_COMB] = &g12a_pcie_comb.hw, 4295 + [CLKID_PARSER] = &g12a_parser.hw, 4296 + [CLKID_USB] = &g12a_usb_general.hw, 4297 + [CLKID_PCIE_PHY] = &g12a_pcie_phy.hw, 4298 + [CLKID_AHB_ARB0] = &g12a_ahb_arb0.hw, 4299 + [CLKID_AHB_DATA_BUS] = &g12a_ahb_data_bus.hw, 4300 + [CLKID_AHB_CTRL_BUS] = &g12a_ahb_ctrl_bus.hw, 4301 + [CLKID_HTX_HDCP22] = &g12a_htx_hdcp22.hw, 4302 + [CLKID_HTX_PCLK] = &g12a_htx_pclk.hw, 4303 + [CLKID_BT656] = &g12a_bt656.hw, 4304 + [CLKID_USB1_DDR_BRIDGE] = &g12a_usb1_to_ddr.hw, 4305 + [CLKID_MMC_PCLK] = &g12a_mmc_pclk.hw, 4306 + [CLKID_UART2] = &g12a_uart2.hw, 4307 + [CLKID_VPU_INTR] = &g12a_vpu_intr.hw, 4308 + [CLKID_GIC] = &g12a_gic.hw, 4309 + [CLKID_SD_EMMC_A_CLK0_SEL] = &g12a_sd_emmc_a_clk0_sel.hw, 4310 + [CLKID_SD_EMMC_A_CLK0_DIV] = &g12a_sd_emmc_a_clk0_div.hw, 4311 + [CLKID_SD_EMMC_A_CLK0] = &g12a_sd_emmc_a_clk0.hw, 4312 + [CLKID_SD_EMMC_B_CLK0_SEL] = &g12a_sd_emmc_b_clk0_sel.hw, 4313 + [CLKID_SD_EMMC_B_CLK0_DIV] = &g12a_sd_emmc_b_clk0_div.hw, 4314 + [CLKID_SD_EMMC_B_CLK0] = &g12a_sd_emmc_b_clk0.hw, 4315 + [CLKID_SD_EMMC_C_CLK0_SEL] = &g12a_sd_emmc_c_clk0_sel.hw, 4316 + [CLKID_SD_EMMC_C_CLK0_DIV] = &g12a_sd_emmc_c_clk0_div.hw, 4317 + [CLKID_SD_EMMC_C_CLK0] = &g12a_sd_emmc_c_clk0.hw, 4318 + [CLKID_MPLL0_DIV] = &g12a_mpll0_div.hw, 4319 + [CLKID_MPLL1_DIV] = &g12a_mpll1_div.hw, 4320 + [CLKID_MPLL2_DIV] = &g12a_mpll2_div.hw, 4321 + [CLKID_MPLL3_DIV] = &g12a_mpll3_div.hw, 4322 + [CLKID_FCLK_DIV2_DIV] = &g12a_fclk_div2_div.hw, 4323 + [CLKID_FCLK_DIV3_DIV] = &g12a_fclk_div3_div.hw, 4324 + [CLKID_FCLK_DIV4_DIV] = &g12a_fclk_div4_div.hw, 4325 + [CLKID_FCLK_DIV5_DIV] = &g12a_fclk_div5_div.hw, 4326 + [CLKID_FCLK_DIV7_DIV] = &g12a_fclk_div7_div.hw, 4327 + [CLKID_FCLK_DIV2P5_DIV] = &g12a_fclk_div2p5_div.hw, 4328 + [CLKID_HIFI_PLL] = &g12a_hifi_pll.hw, 4329 + [CLKID_VCLK2_VENCI0] = &g12a_vclk2_venci0.hw, 4330 + [CLKID_VCLK2_VENCI1] = &g12a_vclk2_venci1.hw, 4331 + [CLKID_VCLK2_VENCP0] = &g12a_vclk2_vencp0.hw, 4332 + [CLKID_VCLK2_VENCP1] = &g12a_vclk2_vencp1.hw, 4333 + [CLKID_VCLK2_VENCT0] = &g12a_vclk2_venct0.hw, 4334 + [CLKID_VCLK2_VENCT1] = &g12a_vclk2_venct1.hw, 4335 + [CLKID_VCLK2_OTHER] = &g12a_vclk2_other.hw, 4336 + [CLKID_VCLK2_ENCI] = &g12a_vclk2_enci.hw, 4337 + [CLKID_VCLK2_ENCP] = &g12a_vclk2_encp.hw, 4338 + [CLKID_DAC_CLK] = &g12a_dac_clk.hw, 4339 + [CLKID_AOCLK] = &g12a_aoclk_gate.hw, 4340 + [CLKID_IEC958] = &g12a_iec958_gate.hw, 4341 + [CLKID_ENC480P] = &g12a_enc480p.hw, 4342 + [CLKID_RNG1] = &g12a_rng1.hw, 4343 + [CLKID_VCLK2_ENCT] = &g12a_vclk2_enct.hw, 4344 + [CLKID_VCLK2_ENCL] = &g12a_vclk2_encl.hw, 4345 + [CLKID_VCLK2_VENCLMMC] = &g12a_vclk2_venclmmc.hw, 4346 + [CLKID_VCLK2_VENCL] = &g12a_vclk2_vencl.hw, 4347 + [CLKID_VCLK2_OTHER1] = &g12a_vclk2_other1.hw, 4348 + [CLKID_FIXED_PLL_DCO] = &g12a_fixed_pll_dco.hw, 4349 + [CLKID_SYS_PLL_DCO] = &g12a_sys_pll_dco.hw, 4350 + [CLKID_GP0_PLL_DCO] = &g12a_gp0_pll_dco.hw, 4351 + [CLKID_HIFI_PLL_DCO] = &g12a_hifi_pll_dco.hw, 4352 + [CLKID_DMA] = &g12a_dma.hw, 4353 + [CLKID_EFUSE] = &g12a_efuse.hw, 4354 + [CLKID_ROM_BOOT] = &g12a_rom_boot.hw, 4355 + [CLKID_RESET_SEC] = &g12a_reset_sec.hw, 4356 + [CLKID_SEC_AHB_APB3] = &g12a_sec_ahb_apb3.hw, 4357 + [CLKID_MPLL_PREDIV] = &g12a_mpll_prediv.hw, 4358 + [CLKID_VPU_0_SEL] = &g12a_vpu_0_sel.hw, 4359 + [CLKID_VPU_0_DIV] = &g12a_vpu_0_div.hw, 4360 + [CLKID_VPU_0] = &g12a_vpu_0.hw, 4361 + [CLKID_VPU_1_SEL] = &g12a_vpu_1_sel.hw, 4362 + [CLKID_VPU_1_DIV] = &g12a_vpu_1_div.hw, 4363 + [CLKID_VPU_1] = &g12a_vpu_1.hw, 4364 + [CLKID_VPU] = &g12a_vpu.hw, 4365 + [CLKID_VAPB_0_SEL] = &g12a_vapb_0_sel.hw, 4366 + [CLKID_VAPB_0_DIV] = &g12a_vapb_0_div.hw, 4367 + [CLKID_VAPB_0] = &g12a_vapb_0.hw, 4368 + [CLKID_VAPB_1_SEL] = &g12a_vapb_1_sel.hw, 4369 + [CLKID_VAPB_1_DIV] = &g12a_vapb_1_div.hw, 4370 + [CLKID_VAPB_1] = &g12a_vapb_1.hw, 4371 + [CLKID_VAPB_SEL] = &g12a_vapb_sel.hw, 4372 + [CLKID_VAPB] = &g12a_vapb.hw, 4373 + [CLKID_HDMI_PLL_DCO] = &g12a_hdmi_pll_dco.hw, 4374 + [CLKID_HDMI_PLL_OD] = &g12a_hdmi_pll_od.hw, 4375 + [CLKID_HDMI_PLL_OD2] = &g12a_hdmi_pll_od2.hw, 4376 + [CLKID_HDMI_PLL] = &g12a_hdmi_pll.hw, 4377 + [CLKID_VID_PLL] = &g12a_vid_pll_div.hw, 4378 + [CLKID_VID_PLL_SEL] = &g12a_vid_pll_sel.hw, 4379 + [CLKID_VID_PLL_DIV] = &g12a_vid_pll.hw, 4380 + [CLKID_VCLK_SEL] = &g12a_vclk_sel.hw, 4381 + [CLKID_VCLK2_SEL] = &g12a_vclk2_sel.hw, 4382 + [CLKID_VCLK_INPUT] = &g12a_vclk_input.hw, 4383 + [CLKID_VCLK2_INPUT] = &g12a_vclk2_input.hw, 4384 + [CLKID_VCLK_DIV] = &g12a_vclk_div.hw, 4385 + [CLKID_VCLK2_DIV] = &g12a_vclk2_div.hw, 4386 + [CLKID_VCLK] = &g12a_vclk.hw, 4387 + [CLKID_VCLK2] = &g12a_vclk2.hw, 4388 + [CLKID_VCLK_DIV1] = &g12a_vclk_div1.hw, 4389 + [CLKID_VCLK_DIV2_EN] = &g12a_vclk_div2_en.hw, 4390 + [CLKID_VCLK_DIV4_EN] = &g12a_vclk_div4_en.hw, 4391 + [CLKID_VCLK_DIV6_EN] = &g12a_vclk_div6_en.hw, 4392 + [CLKID_VCLK_DIV12_EN] = &g12a_vclk_div12_en.hw, 4393 + [CLKID_VCLK2_DIV1] = &g12a_vclk2_div1.hw, 4394 + [CLKID_VCLK2_DIV2_EN] = &g12a_vclk2_div2_en.hw, 4395 + [CLKID_VCLK2_DIV4_EN] = &g12a_vclk2_div4_en.hw, 4396 + [CLKID_VCLK2_DIV6_EN] = &g12a_vclk2_div6_en.hw, 4397 + [CLKID_VCLK2_DIV12_EN] = &g12a_vclk2_div12_en.hw, 4398 + [CLKID_VCLK_DIV2] = &g12a_vclk_div2.hw, 4399 + [CLKID_VCLK_DIV4] = &g12a_vclk_div4.hw, 4400 + [CLKID_VCLK_DIV6] = &g12a_vclk_div6.hw, 4401 + [CLKID_VCLK_DIV12] = &g12a_vclk_div12.hw, 4402 + [CLKID_VCLK2_DIV2] = &g12a_vclk2_div2.hw, 4403 + [CLKID_VCLK2_DIV4] = &g12a_vclk2_div4.hw, 4404 + [CLKID_VCLK2_DIV6] = &g12a_vclk2_div6.hw, 4405 + [CLKID_VCLK2_DIV12] = &g12a_vclk2_div12.hw, 4406 + [CLKID_CTS_ENCI_SEL] = &g12a_cts_enci_sel.hw, 4407 + [CLKID_CTS_ENCP_SEL] = &g12a_cts_encp_sel.hw, 4408 + [CLKID_CTS_VDAC_SEL] = &g12a_cts_vdac_sel.hw, 4409 + [CLKID_HDMI_TX_SEL] = &g12a_hdmi_tx_sel.hw, 4410 + [CLKID_CTS_ENCI] = &g12a_cts_enci.hw, 4411 + [CLKID_CTS_ENCP] = &g12a_cts_encp.hw, 4412 + [CLKID_CTS_VDAC] = &g12a_cts_vdac.hw, 4413 + [CLKID_HDMI_TX] = &g12a_hdmi_tx.hw, 4414 + [CLKID_HDMI_SEL] = &g12a_hdmi_sel.hw, 4415 + [CLKID_HDMI_DIV] = &g12a_hdmi_div.hw, 4416 + [CLKID_HDMI] = &g12a_hdmi.hw, 4417 + [CLKID_MALI_0_SEL] = &g12a_mali_0_sel.hw, 4418 + [CLKID_MALI_0_DIV] = &g12a_mali_0_div.hw, 4419 + [CLKID_MALI_0] = &g12a_mali_0.hw, 4420 + [CLKID_MALI_1_SEL] = &g12a_mali_1_sel.hw, 4421 + [CLKID_MALI_1_DIV] = &g12a_mali_1_div.hw, 4422 + [CLKID_MALI_1] = &g12a_mali_1.hw, 4423 + [CLKID_MALI] = &g12a_mali.hw, 4424 + [CLKID_MPLL_50M_DIV] = &g12a_mpll_50m_div.hw, 4425 + [CLKID_MPLL_50M] = &g12a_mpll_50m.hw, 4426 + [CLKID_SYS_PLL_DIV16_EN] = &g12a_sys_pll_div16_en.hw, 4427 + [CLKID_SYS_PLL_DIV16] = &g12a_sys_pll_div16.hw, 4428 + [CLKID_CPU_CLK_DYN0_SEL] = &g12a_cpu_clk_premux0.hw, 4429 + [CLKID_CPU_CLK_DYN0_DIV] = &g12a_cpu_clk_mux0_div.hw, 4430 + [CLKID_CPU_CLK_DYN0] = &g12a_cpu_clk_postmux0.hw, 4431 + [CLKID_CPU_CLK_DYN1_SEL] = &g12a_cpu_clk_premux1.hw, 4432 + [CLKID_CPU_CLK_DYN1_DIV] = &g12a_cpu_clk_mux1_div.hw, 4433 + [CLKID_CPU_CLK_DYN1] = &g12a_cpu_clk_postmux1.hw, 4434 + [CLKID_CPU_CLK_DYN] = &g12a_cpu_clk_dyn.hw, 4435 + [CLKID_CPU_CLK] = &g12a_cpu_clk.hw, 4436 + [CLKID_CPU_CLK_DIV16_EN] = &g12a_cpu_clk_div16_en.hw, 4437 + [CLKID_CPU_CLK_DIV16] = &g12a_cpu_clk_div16.hw, 4438 + [CLKID_CPU_CLK_APB_DIV] = &g12a_cpu_clk_apb_div.hw, 4439 + [CLKID_CPU_CLK_APB] = &g12a_cpu_clk_apb.hw, 4440 + [CLKID_CPU_CLK_ATB_DIV] = &g12a_cpu_clk_atb_div.hw, 4441 + [CLKID_CPU_CLK_ATB] = &g12a_cpu_clk_atb.hw, 4442 + [CLKID_CPU_CLK_AXI_DIV] = &g12a_cpu_clk_axi_div.hw, 4443 + [CLKID_CPU_CLK_AXI] = &g12a_cpu_clk_axi.hw, 4444 + [CLKID_CPU_CLK_TRACE_DIV] = &g12a_cpu_clk_trace_div.hw, 4445 + [CLKID_CPU_CLK_TRACE] = &g12a_cpu_clk_trace.hw, 4446 + [CLKID_PCIE_PLL_DCO] = &g12a_pcie_pll_dco.hw, 4447 + [CLKID_PCIE_PLL_DCO_DIV2] = &g12a_pcie_pll_dco_div2.hw, 4448 + [CLKID_PCIE_PLL_OD] = &g12a_pcie_pll_od.hw, 4449 + [CLKID_PCIE_PLL] = &g12a_pcie_pll.hw, 4450 + [CLKID_VDEC_1_SEL] = &g12a_vdec_1_sel.hw, 4451 + [CLKID_VDEC_1_DIV] = &g12a_vdec_1_div.hw, 4452 + [CLKID_VDEC_1] = &g12a_vdec_1.hw, 4453 + [CLKID_VDEC_HEVC_SEL] = &g12a_vdec_hevc_sel.hw, 4454 + [CLKID_VDEC_HEVC_DIV] = &g12a_vdec_hevc_div.hw, 4455 + [CLKID_VDEC_HEVC] = &g12a_vdec_hevc.hw, 4456 + [CLKID_VDEC_HEVCF_SEL] = &g12a_vdec_hevcf_sel.hw, 4457 + [CLKID_VDEC_HEVCF_DIV] = &g12a_vdec_hevcf_div.hw, 4458 + [CLKID_VDEC_HEVCF] = &g12a_vdec_hevcf.hw, 4459 + [CLKID_TS_DIV] = &g12a_ts_div.hw, 4460 + [CLKID_TS] = &g12a_ts.hw, 4461 + [CLKID_SPICC0_SCLK_SEL] = &g12a_spicc0_sclk_sel.hw, 4462 + [CLKID_SPICC0_SCLK_DIV] = &g12a_spicc0_sclk_div.hw, 4463 + [CLKID_SPICC0_SCLK] = &g12a_spicc0_sclk.hw, 4464 + [CLKID_SPICC1_SCLK_SEL] = &g12a_spicc1_sclk_sel.hw, 4465 + [CLKID_SPICC1_SCLK_DIV] = &g12a_spicc1_sclk_div.hw, 4466 + [CLKID_SPICC1_SCLK] = &g12a_spicc1_sclk.hw, 4467 + [CLKID_MIPI_DSI_PXCLK_SEL] = &g12a_mipi_dsi_pxclk_sel.hw, 4468 + [CLKID_MIPI_DSI_PXCLK_DIV] = &g12a_mipi_dsi_pxclk_div.hw, 4469 + [CLKID_MIPI_DSI_PXCLK] = &g12a_mipi_dsi_pxclk.hw, 4476 4470 }; 4477 4471 4478 - static struct clk_hw_onecell_data g12b_hw_onecell_data = { 4479 - .hws = { 4480 - [CLKID_SYS_PLL] = &g12a_sys_pll.hw, 4481 - [CLKID_FIXED_PLL] = &g12a_fixed_pll.hw, 4482 - [CLKID_FCLK_DIV2] = &g12a_fclk_div2.hw, 4483 - [CLKID_FCLK_DIV3] = &g12a_fclk_div3.hw, 4484 - [CLKID_FCLK_DIV4] = &g12a_fclk_div4.hw, 4485 - [CLKID_FCLK_DIV5] = &g12a_fclk_div5.hw, 4486 - [CLKID_FCLK_DIV7] = &g12a_fclk_div7.hw, 4487 - [CLKID_FCLK_DIV2P5] = &g12a_fclk_div2p5.hw, 4488 - [CLKID_GP0_PLL] = &g12a_gp0_pll.hw, 4489 - [CLKID_MPEG_SEL] = &g12a_mpeg_clk_sel.hw, 4490 - [CLKID_MPEG_DIV] = &g12a_mpeg_clk_div.hw, 4491 - [CLKID_CLK81] = &g12a_clk81.hw, 4492 - [CLKID_MPLL0] = &g12a_mpll0.hw, 4493 - [CLKID_MPLL1] = &g12a_mpll1.hw, 4494 - [CLKID_MPLL2] = &g12a_mpll2.hw, 4495 - [CLKID_MPLL3] = &g12a_mpll3.hw, 4496 - [CLKID_DDR] = &g12a_ddr.hw, 4497 - [CLKID_DOS] = &g12a_dos.hw, 4498 - [CLKID_AUDIO_LOCKER] = &g12a_audio_locker.hw, 4499 - [CLKID_MIPI_DSI_HOST] = &g12a_mipi_dsi_host.hw, 4500 - [CLKID_ETH_PHY] = &g12a_eth_phy.hw, 4501 - [CLKID_ISA] = &g12a_isa.hw, 4502 - [CLKID_PL301] = &g12a_pl301.hw, 4503 - [CLKID_PERIPHS] = &g12a_periphs.hw, 4504 - [CLKID_SPICC0] = &g12a_spicc_0.hw, 4505 - [CLKID_I2C] = &g12a_i2c.hw, 4506 - [CLKID_SANA] = &g12a_sana.hw, 4507 - [CLKID_SD] = &g12a_sd.hw, 4508 - [CLKID_RNG0] = &g12a_rng0.hw, 4509 - [CLKID_UART0] = &g12a_uart0.hw, 4510 - [CLKID_SPICC1] = &g12a_spicc_1.hw, 4511 - [CLKID_HIU_IFACE] = &g12a_hiu_reg.hw, 4512 - [CLKID_MIPI_DSI_PHY] = &g12a_mipi_dsi_phy.hw, 4513 - [CLKID_ASSIST_MISC] = &g12a_assist_misc.hw, 4514 - [CLKID_SD_EMMC_A] = &g12a_emmc_a.hw, 4515 - [CLKID_SD_EMMC_B] = &g12a_emmc_b.hw, 4516 - [CLKID_SD_EMMC_C] = &g12a_emmc_c.hw, 4517 - [CLKID_AUDIO_CODEC] = &g12a_audio_codec.hw, 4518 - [CLKID_AUDIO] = &g12a_audio.hw, 4519 - [CLKID_ETH] = &g12a_eth_core.hw, 4520 - [CLKID_DEMUX] = &g12a_demux.hw, 4521 - [CLKID_AUDIO_IFIFO] = &g12a_audio_ififo.hw, 4522 - [CLKID_ADC] = &g12a_adc.hw, 4523 - [CLKID_UART1] = &g12a_uart1.hw, 4524 - [CLKID_G2D] = &g12a_g2d.hw, 4525 - [CLKID_RESET] = &g12a_reset.hw, 4526 - [CLKID_PCIE_COMB] = &g12a_pcie_comb.hw, 4527 - [CLKID_PARSER] = &g12a_parser.hw, 4528 - [CLKID_USB] = &g12a_usb_general.hw, 4529 - [CLKID_PCIE_PHY] = &g12a_pcie_phy.hw, 4530 - [CLKID_AHB_ARB0] = &g12a_ahb_arb0.hw, 4531 - [CLKID_AHB_DATA_BUS] = &g12a_ahb_data_bus.hw, 4532 - [CLKID_AHB_CTRL_BUS] = &g12a_ahb_ctrl_bus.hw, 4533 - [CLKID_HTX_HDCP22] = &g12a_htx_hdcp22.hw, 4534 - [CLKID_HTX_PCLK] = &g12a_htx_pclk.hw, 4535 - [CLKID_BT656] = &g12a_bt656.hw, 4536 - [CLKID_USB1_DDR_BRIDGE] = &g12a_usb1_to_ddr.hw, 4537 - [CLKID_MMC_PCLK] = &g12a_mmc_pclk.hw, 4538 - [CLKID_UART2] = &g12a_uart2.hw, 4539 - [CLKID_VPU_INTR] = &g12a_vpu_intr.hw, 4540 - [CLKID_GIC] = &g12a_gic.hw, 4541 - [CLKID_SD_EMMC_A_CLK0_SEL] = &g12a_sd_emmc_a_clk0_sel.hw, 4542 - [CLKID_SD_EMMC_A_CLK0_DIV] = &g12a_sd_emmc_a_clk0_div.hw, 4543 - [CLKID_SD_EMMC_A_CLK0] = &g12a_sd_emmc_a_clk0.hw, 4544 - [CLKID_SD_EMMC_B_CLK0_SEL] = &g12a_sd_emmc_b_clk0_sel.hw, 4545 - [CLKID_SD_EMMC_B_CLK0_DIV] = &g12a_sd_emmc_b_clk0_div.hw, 4546 - [CLKID_SD_EMMC_B_CLK0] = &g12a_sd_emmc_b_clk0.hw, 4547 - [CLKID_SD_EMMC_C_CLK0_SEL] = &g12a_sd_emmc_c_clk0_sel.hw, 4548 - [CLKID_SD_EMMC_C_CLK0_DIV] = &g12a_sd_emmc_c_clk0_div.hw, 4549 - [CLKID_SD_EMMC_C_CLK0] = &g12a_sd_emmc_c_clk0.hw, 4550 - [CLKID_MPLL0_DIV] = &g12a_mpll0_div.hw, 4551 - [CLKID_MPLL1_DIV] = &g12a_mpll1_div.hw, 4552 - [CLKID_MPLL2_DIV] = &g12a_mpll2_div.hw, 4553 - [CLKID_MPLL3_DIV] = &g12a_mpll3_div.hw, 4554 - [CLKID_FCLK_DIV2_DIV] = &g12a_fclk_div2_div.hw, 4555 - [CLKID_FCLK_DIV3_DIV] = &g12a_fclk_div3_div.hw, 4556 - [CLKID_FCLK_DIV4_DIV] = &g12a_fclk_div4_div.hw, 4557 - [CLKID_FCLK_DIV5_DIV] = &g12a_fclk_div5_div.hw, 4558 - [CLKID_FCLK_DIV7_DIV] = &g12a_fclk_div7_div.hw, 4559 - [CLKID_FCLK_DIV2P5_DIV] = &g12a_fclk_div2p5_div.hw, 4560 - [CLKID_HIFI_PLL] = &g12a_hifi_pll.hw, 4561 - [CLKID_VCLK2_VENCI0] = &g12a_vclk2_venci0.hw, 4562 - [CLKID_VCLK2_VENCI1] = &g12a_vclk2_venci1.hw, 4563 - [CLKID_VCLK2_VENCP0] = &g12a_vclk2_vencp0.hw, 4564 - [CLKID_VCLK2_VENCP1] = &g12a_vclk2_vencp1.hw, 4565 - [CLKID_VCLK2_VENCT0] = &g12a_vclk2_venct0.hw, 4566 - [CLKID_VCLK2_VENCT1] = &g12a_vclk2_venct1.hw, 4567 - [CLKID_VCLK2_OTHER] = &g12a_vclk2_other.hw, 4568 - [CLKID_VCLK2_ENCI] = &g12a_vclk2_enci.hw, 4569 - [CLKID_VCLK2_ENCP] = &g12a_vclk2_encp.hw, 4570 - [CLKID_DAC_CLK] = &g12a_dac_clk.hw, 4571 - [CLKID_AOCLK] = &g12a_aoclk_gate.hw, 4572 - [CLKID_IEC958] = &g12a_iec958_gate.hw, 4573 - [CLKID_ENC480P] = &g12a_enc480p.hw, 4574 - [CLKID_RNG1] = &g12a_rng1.hw, 4575 - [CLKID_VCLK2_ENCT] = &g12a_vclk2_enct.hw, 4576 - [CLKID_VCLK2_ENCL] = &g12a_vclk2_encl.hw, 4577 - [CLKID_VCLK2_VENCLMMC] = &g12a_vclk2_venclmmc.hw, 4578 - [CLKID_VCLK2_VENCL] = &g12a_vclk2_vencl.hw, 4579 - [CLKID_VCLK2_OTHER1] = &g12a_vclk2_other1.hw, 4580 - [CLKID_FIXED_PLL_DCO] = &g12a_fixed_pll_dco.hw, 4581 - [CLKID_SYS_PLL_DCO] = &g12a_sys_pll_dco.hw, 4582 - [CLKID_GP0_PLL_DCO] = &g12a_gp0_pll_dco.hw, 4583 - [CLKID_HIFI_PLL_DCO] = &g12a_hifi_pll_dco.hw, 4584 - [CLKID_DMA] = &g12a_dma.hw, 4585 - [CLKID_EFUSE] = &g12a_efuse.hw, 4586 - [CLKID_ROM_BOOT] = &g12a_rom_boot.hw, 4587 - [CLKID_RESET_SEC] = &g12a_reset_sec.hw, 4588 - [CLKID_SEC_AHB_APB3] = &g12a_sec_ahb_apb3.hw, 4589 - [CLKID_MPLL_PREDIV] = &g12a_mpll_prediv.hw, 4590 - [CLKID_VPU_0_SEL] = &g12a_vpu_0_sel.hw, 4591 - [CLKID_VPU_0_DIV] = &g12a_vpu_0_div.hw, 4592 - [CLKID_VPU_0] = &g12a_vpu_0.hw, 4593 - [CLKID_VPU_1_SEL] = &g12a_vpu_1_sel.hw, 4594 - [CLKID_VPU_1_DIV] = &g12a_vpu_1_div.hw, 4595 - [CLKID_VPU_1] = &g12a_vpu_1.hw, 4596 - [CLKID_VPU] = &g12a_vpu.hw, 4597 - [CLKID_VAPB_0_SEL] = &g12a_vapb_0_sel.hw, 4598 - [CLKID_VAPB_0_DIV] = &g12a_vapb_0_div.hw, 4599 - [CLKID_VAPB_0] = &g12a_vapb_0.hw, 4600 - [CLKID_VAPB_1_SEL] = &g12a_vapb_1_sel.hw, 4601 - [CLKID_VAPB_1_DIV] = &g12a_vapb_1_div.hw, 4602 - [CLKID_VAPB_1] = &g12a_vapb_1.hw, 4603 - [CLKID_VAPB_SEL] = &g12a_vapb_sel.hw, 4604 - [CLKID_VAPB] = &g12a_vapb.hw, 4605 - [CLKID_HDMI_PLL_DCO] = &g12a_hdmi_pll_dco.hw, 4606 - [CLKID_HDMI_PLL_OD] = &g12a_hdmi_pll_od.hw, 4607 - [CLKID_HDMI_PLL_OD2] = &g12a_hdmi_pll_od2.hw, 4608 - [CLKID_HDMI_PLL] = &g12a_hdmi_pll.hw, 4609 - [CLKID_VID_PLL] = &g12a_vid_pll_div.hw, 4610 - [CLKID_VID_PLL_SEL] = &g12a_vid_pll_sel.hw, 4611 - [CLKID_VID_PLL_DIV] = &g12a_vid_pll.hw, 4612 - [CLKID_VCLK_SEL] = &g12a_vclk_sel.hw, 4613 - [CLKID_VCLK2_SEL] = &g12a_vclk2_sel.hw, 4614 - [CLKID_VCLK_INPUT] = &g12a_vclk_input.hw, 4615 - [CLKID_VCLK2_INPUT] = &g12a_vclk2_input.hw, 4616 - [CLKID_VCLK_DIV] = &g12a_vclk_div.hw, 4617 - [CLKID_VCLK2_DIV] = &g12a_vclk2_div.hw, 4618 - [CLKID_VCLK] = &g12a_vclk.hw, 4619 - [CLKID_VCLK2] = &g12a_vclk2.hw, 4620 - [CLKID_VCLK_DIV1] = &g12a_vclk_div1.hw, 4621 - [CLKID_VCLK_DIV2_EN] = &g12a_vclk_div2_en.hw, 4622 - [CLKID_VCLK_DIV4_EN] = &g12a_vclk_div4_en.hw, 4623 - [CLKID_VCLK_DIV6_EN] = &g12a_vclk_div6_en.hw, 4624 - [CLKID_VCLK_DIV12_EN] = &g12a_vclk_div12_en.hw, 4625 - [CLKID_VCLK2_DIV1] = &g12a_vclk2_div1.hw, 4626 - [CLKID_VCLK2_DIV2_EN] = &g12a_vclk2_div2_en.hw, 4627 - [CLKID_VCLK2_DIV4_EN] = &g12a_vclk2_div4_en.hw, 4628 - [CLKID_VCLK2_DIV6_EN] = &g12a_vclk2_div6_en.hw, 4629 - [CLKID_VCLK2_DIV12_EN] = &g12a_vclk2_div12_en.hw, 4630 - [CLKID_VCLK_DIV2] = &g12a_vclk_div2.hw, 4631 - [CLKID_VCLK_DIV4] = &g12a_vclk_div4.hw, 4632 - [CLKID_VCLK_DIV6] = &g12a_vclk_div6.hw, 4633 - [CLKID_VCLK_DIV12] = &g12a_vclk_div12.hw, 4634 - [CLKID_VCLK2_DIV2] = &g12a_vclk2_div2.hw, 4635 - [CLKID_VCLK2_DIV4] = &g12a_vclk2_div4.hw, 4636 - [CLKID_VCLK2_DIV6] = &g12a_vclk2_div6.hw, 4637 - [CLKID_VCLK2_DIV12] = &g12a_vclk2_div12.hw, 4638 - [CLKID_CTS_ENCI_SEL] = &g12a_cts_enci_sel.hw, 4639 - [CLKID_CTS_ENCP_SEL] = &g12a_cts_encp_sel.hw, 4640 - [CLKID_CTS_VDAC_SEL] = &g12a_cts_vdac_sel.hw, 4641 - [CLKID_HDMI_TX_SEL] = &g12a_hdmi_tx_sel.hw, 4642 - [CLKID_CTS_ENCI] = &g12a_cts_enci.hw, 4643 - [CLKID_CTS_ENCP] = &g12a_cts_encp.hw, 4644 - [CLKID_CTS_VDAC] = &g12a_cts_vdac.hw, 4645 - [CLKID_HDMI_TX] = &g12a_hdmi_tx.hw, 4646 - [CLKID_HDMI_SEL] = &g12a_hdmi_sel.hw, 4647 - [CLKID_HDMI_DIV] = &g12a_hdmi_div.hw, 4648 - [CLKID_HDMI] = &g12a_hdmi.hw, 4649 - [CLKID_MALI_0_SEL] = &g12a_mali_0_sel.hw, 4650 - [CLKID_MALI_0_DIV] = &g12a_mali_0_div.hw, 4651 - [CLKID_MALI_0] = &g12a_mali_0.hw, 4652 - [CLKID_MALI_1_SEL] = &g12a_mali_1_sel.hw, 4653 - [CLKID_MALI_1_DIV] = &g12a_mali_1_div.hw, 4654 - [CLKID_MALI_1] = &g12a_mali_1.hw, 4655 - [CLKID_MALI] = &g12a_mali.hw, 4656 - [CLKID_MPLL_50M_DIV] = &g12a_mpll_50m_div.hw, 4657 - [CLKID_MPLL_50M] = &g12a_mpll_50m.hw, 4658 - [CLKID_SYS_PLL_DIV16_EN] = &g12a_sys_pll_div16_en.hw, 4659 - [CLKID_SYS_PLL_DIV16] = &g12a_sys_pll_div16.hw, 4660 - [CLKID_CPU_CLK_DYN0_SEL] = &g12a_cpu_clk_premux0.hw, 4661 - [CLKID_CPU_CLK_DYN0_DIV] = &g12a_cpu_clk_mux0_div.hw, 4662 - [CLKID_CPU_CLK_DYN0] = &g12a_cpu_clk_postmux0.hw, 4663 - [CLKID_CPU_CLK_DYN1_SEL] = &g12a_cpu_clk_premux1.hw, 4664 - [CLKID_CPU_CLK_DYN1_DIV] = &g12a_cpu_clk_mux1_div.hw, 4665 - [CLKID_CPU_CLK_DYN1] = &g12a_cpu_clk_postmux1.hw, 4666 - [CLKID_CPU_CLK_DYN] = &g12a_cpu_clk_dyn.hw, 4667 - [CLKID_CPU_CLK] = &g12b_cpu_clk.hw, 4668 - [CLKID_CPU_CLK_DIV16_EN] = &g12a_cpu_clk_div16_en.hw, 4669 - [CLKID_CPU_CLK_DIV16] = &g12a_cpu_clk_div16.hw, 4670 - [CLKID_CPU_CLK_APB_DIV] = &g12a_cpu_clk_apb_div.hw, 4671 - [CLKID_CPU_CLK_APB] = &g12a_cpu_clk_apb.hw, 4672 - [CLKID_CPU_CLK_ATB_DIV] = &g12a_cpu_clk_atb_div.hw, 4673 - [CLKID_CPU_CLK_ATB] = &g12a_cpu_clk_atb.hw, 4674 - [CLKID_CPU_CLK_AXI_DIV] = &g12a_cpu_clk_axi_div.hw, 4675 - [CLKID_CPU_CLK_AXI] = &g12a_cpu_clk_axi.hw, 4676 - [CLKID_CPU_CLK_TRACE_DIV] = &g12a_cpu_clk_trace_div.hw, 4677 - [CLKID_CPU_CLK_TRACE] = &g12a_cpu_clk_trace.hw, 4678 - [CLKID_PCIE_PLL_DCO] = &g12a_pcie_pll_dco.hw, 4679 - [CLKID_PCIE_PLL_DCO_DIV2] = &g12a_pcie_pll_dco_div2.hw, 4680 - [CLKID_PCIE_PLL_OD] = &g12a_pcie_pll_od.hw, 4681 - [CLKID_PCIE_PLL] = &g12a_pcie_pll.hw, 4682 - [CLKID_VDEC_1_SEL] = &g12a_vdec_1_sel.hw, 4683 - [CLKID_VDEC_1_DIV] = &g12a_vdec_1_div.hw, 4684 - [CLKID_VDEC_1] = &g12a_vdec_1.hw, 4685 - [CLKID_VDEC_HEVC_SEL] = &g12a_vdec_hevc_sel.hw, 4686 - [CLKID_VDEC_HEVC_DIV] = &g12a_vdec_hevc_div.hw, 4687 - [CLKID_VDEC_HEVC] = &g12a_vdec_hevc.hw, 4688 - [CLKID_VDEC_HEVCF_SEL] = &g12a_vdec_hevcf_sel.hw, 4689 - [CLKID_VDEC_HEVCF_DIV] = &g12a_vdec_hevcf_div.hw, 4690 - [CLKID_VDEC_HEVCF] = &g12a_vdec_hevcf.hw, 4691 - [CLKID_TS_DIV] = &g12a_ts_div.hw, 4692 - [CLKID_TS] = &g12a_ts.hw, 4693 - [CLKID_SYS1_PLL_DCO] = &g12b_sys1_pll_dco.hw, 4694 - [CLKID_SYS1_PLL] = &g12b_sys1_pll.hw, 4695 - [CLKID_SYS1_PLL_DIV16_EN] = &g12b_sys1_pll_div16_en.hw, 4696 - [CLKID_SYS1_PLL_DIV16] = &g12b_sys1_pll_div16.hw, 4697 - [CLKID_CPUB_CLK_DYN0_SEL] = &g12b_cpub_clk_premux0.hw, 4698 - [CLKID_CPUB_CLK_DYN0_DIV] = &g12b_cpub_clk_mux0_div.hw, 4699 - [CLKID_CPUB_CLK_DYN0] = &g12b_cpub_clk_postmux0.hw, 4700 - [CLKID_CPUB_CLK_DYN1_SEL] = &g12b_cpub_clk_premux1.hw, 4701 - [CLKID_CPUB_CLK_DYN1_DIV] = &g12b_cpub_clk_mux1_div.hw, 4702 - [CLKID_CPUB_CLK_DYN1] = &g12b_cpub_clk_postmux1.hw, 4703 - [CLKID_CPUB_CLK_DYN] = &g12b_cpub_clk_dyn.hw, 4704 - [CLKID_CPUB_CLK] = &g12b_cpub_clk.hw, 4705 - [CLKID_CPUB_CLK_DIV16_EN] = &g12b_cpub_clk_div16_en.hw, 4706 - [CLKID_CPUB_CLK_DIV16] = &g12b_cpub_clk_div16.hw, 4707 - [CLKID_CPUB_CLK_DIV2] = &g12b_cpub_clk_div2.hw, 4708 - [CLKID_CPUB_CLK_DIV3] = &g12b_cpub_clk_div3.hw, 4709 - [CLKID_CPUB_CLK_DIV4] = &g12b_cpub_clk_div4.hw, 4710 - [CLKID_CPUB_CLK_DIV5] = &g12b_cpub_clk_div5.hw, 4711 - [CLKID_CPUB_CLK_DIV6] = &g12b_cpub_clk_div6.hw, 4712 - [CLKID_CPUB_CLK_DIV7] = &g12b_cpub_clk_div7.hw, 4713 - [CLKID_CPUB_CLK_DIV8] = &g12b_cpub_clk_div8.hw, 4714 - [CLKID_CPUB_CLK_APB_SEL] = &g12b_cpub_clk_apb_sel.hw, 4715 - [CLKID_CPUB_CLK_APB] = &g12b_cpub_clk_apb.hw, 4716 - [CLKID_CPUB_CLK_ATB_SEL] = &g12b_cpub_clk_atb_sel.hw, 4717 - [CLKID_CPUB_CLK_ATB] = &g12b_cpub_clk_atb.hw, 4718 - [CLKID_CPUB_CLK_AXI_SEL] = &g12b_cpub_clk_axi_sel.hw, 4719 - [CLKID_CPUB_CLK_AXI] = &g12b_cpub_clk_axi.hw, 4720 - [CLKID_CPUB_CLK_TRACE_SEL] = &g12b_cpub_clk_trace_sel.hw, 4721 - [CLKID_CPUB_CLK_TRACE] = &g12b_cpub_clk_trace.hw, 4722 - [CLKID_SPICC0_SCLK_SEL] = &g12a_spicc0_sclk_sel.hw, 4723 - [CLKID_SPICC0_SCLK_DIV] = &g12a_spicc0_sclk_div.hw, 4724 - [CLKID_SPICC0_SCLK] = &g12a_spicc0_sclk.hw, 4725 - [CLKID_SPICC1_SCLK_SEL] = &g12a_spicc1_sclk_sel.hw, 4726 - [CLKID_SPICC1_SCLK_DIV] = &g12a_spicc1_sclk_div.hw, 4727 - [CLKID_SPICC1_SCLK] = &g12a_spicc1_sclk.hw, 4728 - [CLKID_NNA_AXI_CLK_SEL] = &sm1_nna_axi_clk_sel.hw, 4729 - [CLKID_NNA_AXI_CLK_DIV] = &sm1_nna_axi_clk_div.hw, 4730 - [CLKID_NNA_AXI_CLK] = &sm1_nna_axi_clk.hw, 4731 - [CLKID_NNA_CORE_CLK_SEL] = &sm1_nna_core_clk_sel.hw, 4732 - [CLKID_NNA_CORE_CLK_DIV] = &sm1_nna_core_clk_div.hw, 4733 - [CLKID_NNA_CORE_CLK] = &sm1_nna_core_clk.hw, 4734 - [CLKID_MIPI_DSI_PXCLK_SEL] = &g12a_mipi_dsi_pxclk_sel.hw, 4735 - [CLKID_MIPI_DSI_PXCLK_DIV] = &g12a_mipi_dsi_pxclk_div.hw, 4736 - [CLKID_MIPI_DSI_PXCLK] = &g12a_mipi_dsi_pxclk.hw, 4737 - [NR_CLKS] = NULL, 4738 - }, 4739 - .num = NR_CLKS, 4472 + static struct clk_hw *g12b_hw_clks[] = { 4473 + [CLKID_SYS_PLL] = &g12a_sys_pll.hw, 4474 + [CLKID_FIXED_PLL] = &g12a_fixed_pll.hw, 4475 + [CLKID_FCLK_DIV2] = &g12a_fclk_div2.hw, 4476 + [CLKID_FCLK_DIV3] = &g12a_fclk_div3.hw, 4477 + [CLKID_FCLK_DIV4] = &g12a_fclk_div4.hw, 4478 + [CLKID_FCLK_DIV5] = &g12a_fclk_div5.hw, 4479 + [CLKID_FCLK_DIV7] = &g12a_fclk_div7.hw, 4480 + [CLKID_FCLK_DIV2P5] = &g12a_fclk_div2p5.hw, 4481 + [CLKID_GP0_PLL] = &g12a_gp0_pll.hw, 4482 + [CLKID_MPEG_SEL] = &g12a_mpeg_clk_sel.hw, 4483 + [CLKID_MPEG_DIV] = &g12a_mpeg_clk_div.hw, 4484 + [CLKID_CLK81] = &g12a_clk81.hw, 4485 + [CLKID_MPLL0] = &g12a_mpll0.hw, 4486 + [CLKID_MPLL1] = &g12a_mpll1.hw, 4487 + [CLKID_MPLL2] = &g12a_mpll2.hw, 4488 + [CLKID_MPLL3] = &g12a_mpll3.hw, 4489 + [CLKID_DDR] = &g12a_ddr.hw, 4490 + [CLKID_DOS] = &g12a_dos.hw, 4491 + [CLKID_AUDIO_LOCKER] = &g12a_audio_locker.hw, 4492 + [CLKID_MIPI_DSI_HOST] = &g12a_mipi_dsi_host.hw, 4493 + [CLKID_ETH_PHY] = &g12a_eth_phy.hw, 4494 + [CLKID_ISA] = &g12a_isa.hw, 4495 + [CLKID_PL301] = &g12a_pl301.hw, 4496 + [CLKID_PERIPHS] = &g12a_periphs.hw, 4497 + [CLKID_SPICC0] = &g12a_spicc_0.hw, 4498 + [CLKID_I2C] = &g12a_i2c.hw, 4499 + [CLKID_SANA] = &g12a_sana.hw, 4500 + [CLKID_SD] = &g12a_sd.hw, 4501 + [CLKID_RNG0] = &g12a_rng0.hw, 4502 + [CLKID_UART0] = &g12a_uart0.hw, 4503 + [CLKID_SPICC1] = &g12a_spicc_1.hw, 4504 + [CLKID_HIU_IFACE] = &g12a_hiu_reg.hw, 4505 + [CLKID_MIPI_DSI_PHY] = &g12a_mipi_dsi_phy.hw, 4506 + [CLKID_ASSIST_MISC] = &g12a_assist_misc.hw, 4507 + [CLKID_SD_EMMC_A] = &g12a_emmc_a.hw, 4508 + [CLKID_SD_EMMC_B] = &g12a_emmc_b.hw, 4509 + [CLKID_SD_EMMC_C] = &g12a_emmc_c.hw, 4510 + [CLKID_AUDIO_CODEC] = &g12a_audio_codec.hw, 4511 + [CLKID_AUDIO] = &g12a_audio.hw, 4512 + [CLKID_ETH] = &g12a_eth_core.hw, 4513 + [CLKID_DEMUX] = &g12a_demux.hw, 4514 + [CLKID_AUDIO_IFIFO] = &g12a_audio_ififo.hw, 4515 + [CLKID_ADC] = &g12a_adc.hw, 4516 + [CLKID_UART1] = &g12a_uart1.hw, 4517 + [CLKID_G2D] = &g12a_g2d.hw, 4518 + [CLKID_RESET] = &g12a_reset.hw, 4519 + [CLKID_PCIE_COMB] = &g12a_pcie_comb.hw, 4520 + [CLKID_PARSER] = &g12a_parser.hw, 4521 + [CLKID_USB] = &g12a_usb_general.hw, 4522 + [CLKID_PCIE_PHY] = &g12a_pcie_phy.hw, 4523 + [CLKID_AHB_ARB0] = &g12a_ahb_arb0.hw, 4524 + [CLKID_AHB_DATA_BUS] = &g12a_ahb_data_bus.hw, 4525 + [CLKID_AHB_CTRL_BUS] = &g12a_ahb_ctrl_bus.hw, 4526 + [CLKID_HTX_HDCP22] = &g12a_htx_hdcp22.hw, 4527 + [CLKID_HTX_PCLK] = &g12a_htx_pclk.hw, 4528 + [CLKID_BT656] = &g12a_bt656.hw, 4529 + [CLKID_USB1_DDR_BRIDGE] = &g12a_usb1_to_ddr.hw, 4530 + [CLKID_MMC_PCLK] = &g12a_mmc_pclk.hw, 4531 + [CLKID_UART2] = &g12a_uart2.hw, 4532 + [CLKID_VPU_INTR] = &g12a_vpu_intr.hw, 4533 + [CLKID_GIC] = &g12a_gic.hw, 4534 + [CLKID_SD_EMMC_A_CLK0_SEL] = &g12a_sd_emmc_a_clk0_sel.hw, 4535 + [CLKID_SD_EMMC_A_CLK0_DIV] = &g12a_sd_emmc_a_clk0_div.hw, 4536 + [CLKID_SD_EMMC_A_CLK0] = &g12a_sd_emmc_a_clk0.hw, 4537 + [CLKID_SD_EMMC_B_CLK0_SEL] = &g12a_sd_emmc_b_clk0_sel.hw, 4538 + [CLKID_SD_EMMC_B_CLK0_DIV] = &g12a_sd_emmc_b_clk0_div.hw, 4539 + [CLKID_SD_EMMC_B_CLK0] = &g12a_sd_emmc_b_clk0.hw, 4540 + [CLKID_SD_EMMC_C_CLK0_SEL] = &g12a_sd_emmc_c_clk0_sel.hw, 4541 + [CLKID_SD_EMMC_C_CLK0_DIV] = &g12a_sd_emmc_c_clk0_div.hw, 4542 + [CLKID_SD_EMMC_C_CLK0] = &g12a_sd_emmc_c_clk0.hw, 4543 + [CLKID_MPLL0_DIV] = &g12a_mpll0_div.hw, 4544 + [CLKID_MPLL1_DIV] = &g12a_mpll1_div.hw, 4545 + [CLKID_MPLL2_DIV] = &g12a_mpll2_div.hw, 4546 + [CLKID_MPLL3_DIV] = &g12a_mpll3_div.hw, 4547 + [CLKID_FCLK_DIV2_DIV] = &g12a_fclk_div2_div.hw, 4548 + [CLKID_FCLK_DIV3_DIV] = &g12a_fclk_div3_div.hw, 4549 + [CLKID_FCLK_DIV4_DIV] = &g12a_fclk_div4_div.hw, 4550 + [CLKID_FCLK_DIV5_DIV] = &g12a_fclk_div5_div.hw, 4551 + [CLKID_FCLK_DIV7_DIV] = &g12a_fclk_div7_div.hw, 4552 + [CLKID_FCLK_DIV2P5_DIV] = &g12a_fclk_div2p5_div.hw, 4553 + [CLKID_HIFI_PLL] = &g12a_hifi_pll.hw, 4554 + [CLKID_VCLK2_VENCI0] = &g12a_vclk2_venci0.hw, 4555 + [CLKID_VCLK2_VENCI1] = &g12a_vclk2_venci1.hw, 4556 + [CLKID_VCLK2_VENCP0] = &g12a_vclk2_vencp0.hw, 4557 + [CLKID_VCLK2_VENCP1] = &g12a_vclk2_vencp1.hw, 4558 + [CLKID_VCLK2_VENCT0] = &g12a_vclk2_venct0.hw, 4559 + [CLKID_VCLK2_VENCT1] = &g12a_vclk2_venct1.hw, 4560 + [CLKID_VCLK2_OTHER] = &g12a_vclk2_other.hw, 4561 + [CLKID_VCLK2_ENCI] = &g12a_vclk2_enci.hw, 4562 + [CLKID_VCLK2_ENCP] = &g12a_vclk2_encp.hw, 4563 + [CLKID_DAC_CLK] = &g12a_dac_clk.hw, 4564 + [CLKID_AOCLK] = &g12a_aoclk_gate.hw, 4565 + [CLKID_IEC958] = &g12a_iec958_gate.hw, 4566 + [CLKID_ENC480P] = &g12a_enc480p.hw, 4567 + [CLKID_RNG1] = &g12a_rng1.hw, 4568 + [CLKID_VCLK2_ENCT] = &g12a_vclk2_enct.hw, 4569 + [CLKID_VCLK2_ENCL] = &g12a_vclk2_encl.hw, 4570 + [CLKID_VCLK2_VENCLMMC] = &g12a_vclk2_venclmmc.hw, 4571 + [CLKID_VCLK2_VENCL] = &g12a_vclk2_vencl.hw, 4572 + [CLKID_VCLK2_OTHER1] = &g12a_vclk2_other1.hw, 4573 + [CLKID_FIXED_PLL_DCO] = &g12a_fixed_pll_dco.hw, 4574 + [CLKID_SYS_PLL_DCO] = &g12a_sys_pll_dco.hw, 4575 + [CLKID_GP0_PLL_DCO] = &g12a_gp0_pll_dco.hw, 4576 + [CLKID_HIFI_PLL_DCO] = &g12a_hifi_pll_dco.hw, 4577 + [CLKID_DMA] = &g12a_dma.hw, 4578 + [CLKID_EFUSE] = &g12a_efuse.hw, 4579 + [CLKID_ROM_BOOT] = &g12a_rom_boot.hw, 4580 + [CLKID_RESET_SEC] = &g12a_reset_sec.hw, 4581 + [CLKID_SEC_AHB_APB3] = &g12a_sec_ahb_apb3.hw, 4582 + [CLKID_MPLL_PREDIV] = &g12a_mpll_prediv.hw, 4583 + [CLKID_VPU_0_SEL] = &g12a_vpu_0_sel.hw, 4584 + [CLKID_VPU_0_DIV] = &g12a_vpu_0_div.hw, 4585 + [CLKID_VPU_0] = &g12a_vpu_0.hw, 4586 + [CLKID_VPU_1_SEL] = &g12a_vpu_1_sel.hw, 4587 + [CLKID_VPU_1_DIV] = &g12a_vpu_1_div.hw, 4588 + [CLKID_VPU_1] = &g12a_vpu_1.hw, 4589 + [CLKID_VPU] = &g12a_vpu.hw, 4590 + [CLKID_VAPB_0_SEL] = &g12a_vapb_0_sel.hw, 4591 + [CLKID_VAPB_0_DIV] = &g12a_vapb_0_div.hw, 4592 + [CLKID_VAPB_0] = &g12a_vapb_0.hw, 4593 + [CLKID_VAPB_1_SEL] = &g12a_vapb_1_sel.hw, 4594 + [CLKID_VAPB_1_DIV] = &g12a_vapb_1_div.hw, 4595 + [CLKID_VAPB_1] = &g12a_vapb_1.hw, 4596 + [CLKID_VAPB_SEL] = &g12a_vapb_sel.hw, 4597 + [CLKID_VAPB] = &g12a_vapb.hw, 4598 + [CLKID_HDMI_PLL_DCO] = &g12a_hdmi_pll_dco.hw, 4599 + [CLKID_HDMI_PLL_OD] = &g12a_hdmi_pll_od.hw, 4600 + [CLKID_HDMI_PLL_OD2] = &g12a_hdmi_pll_od2.hw, 4601 + [CLKID_HDMI_PLL] = &g12a_hdmi_pll.hw, 4602 + [CLKID_VID_PLL] = &g12a_vid_pll_div.hw, 4603 + [CLKID_VID_PLL_SEL] = &g12a_vid_pll_sel.hw, 4604 + [CLKID_VID_PLL_DIV] = &g12a_vid_pll.hw, 4605 + [CLKID_VCLK_SEL] = &g12a_vclk_sel.hw, 4606 + [CLKID_VCLK2_SEL] = &g12a_vclk2_sel.hw, 4607 + [CLKID_VCLK_INPUT] = &g12a_vclk_input.hw, 4608 + [CLKID_VCLK2_INPUT] = &g12a_vclk2_input.hw, 4609 + [CLKID_VCLK_DIV] = &g12a_vclk_div.hw, 4610 + [CLKID_VCLK2_DIV] = &g12a_vclk2_div.hw, 4611 + [CLKID_VCLK] = &g12a_vclk.hw, 4612 + [CLKID_VCLK2] = &g12a_vclk2.hw, 4613 + [CLKID_VCLK_DIV1] = &g12a_vclk_div1.hw, 4614 + [CLKID_VCLK_DIV2_EN] = &g12a_vclk_div2_en.hw, 4615 + [CLKID_VCLK_DIV4_EN] = &g12a_vclk_div4_en.hw, 4616 + [CLKID_VCLK_DIV6_EN] = &g12a_vclk_div6_en.hw, 4617 + [CLKID_VCLK_DIV12_EN] = &g12a_vclk_div12_en.hw, 4618 + [CLKID_VCLK2_DIV1] = &g12a_vclk2_div1.hw, 4619 + [CLKID_VCLK2_DIV2_EN] = &g12a_vclk2_div2_en.hw, 4620 + [CLKID_VCLK2_DIV4_EN] = &g12a_vclk2_div4_en.hw, 4621 + [CLKID_VCLK2_DIV6_EN] = &g12a_vclk2_div6_en.hw, 4622 + [CLKID_VCLK2_DIV12_EN] = &g12a_vclk2_div12_en.hw, 4623 + [CLKID_VCLK_DIV2] = &g12a_vclk_div2.hw, 4624 + [CLKID_VCLK_DIV4] = &g12a_vclk_div4.hw, 4625 + [CLKID_VCLK_DIV6] = &g12a_vclk_div6.hw, 4626 + [CLKID_VCLK_DIV12] = &g12a_vclk_div12.hw, 4627 + [CLKID_VCLK2_DIV2] = &g12a_vclk2_div2.hw, 4628 + [CLKID_VCLK2_DIV4] = &g12a_vclk2_div4.hw, 4629 + [CLKID_VCLK2_DIV6] = &g12a_vclk2_div6.hw, 4630 + [CLKID_VCLK2_DIV12] = &g12a_vclk2_div12.hw, 4631 + [CLKID_CTS_ENCI_SEL] = &g12a_cts_enci_sel.hw, 4632 + [CLKID_CTS_ENCP_SEL] = &g12a_cts_encp_sel.hw, 4633 + [CLKID_CTS_VDAC_SEL] = &g12a_cts_vdac_sel.hw, 4634 + [CLKID_HDMI_TX_SEL] = &g12a_hdmi_tx_sel.hw, 4635 + [CLKID_CTS_ENCI] = &g12a_cts_enci.hw, 4636 + [CLKID_CTS_ENCP] = &g12a_cts_encp.hw, 4637 + [CLKID_CTS_VDAC] = &g12a_cts_vdac.hw, 4638 + [CLKID_HDMI_TX] = &g12a_hdmi_tx.hw, 4639 + [CLKID_HDMI_SEL] = &g12a_hdmi_sel.hw, 4640 + [CLKID_HDMI_DIV] = &g12a_hdmi_div.hw, 4641 + [CLKID_HDMI] = &g12a_hdmi.hw, 4642 + [CLKID_MALI_0_SEL] = &g12a_mali_0_sel.hw, 4643 + [CLKID_MALI_0_DIV] = &g12a_mali_0_div.hw, 4644 + [CLKID_MALI_0] = &g12a_mali_0.hw, 4645 + [CLKID_MALI_1_SEL] = &g12a_mali_1_sel.hw, 4646 + [CLKID_MALI_1_DIV] = &g12a_mali_1_div.hw, 4647 + [CLKID_MALI_1] = &g12a_mali_1.hw, 4648 + [CLKID_MALI] = &g12a_mali.hw, 4649 + [CLKID_MPLL_50M_DIV] = &g12a_mpll_50m_div.hw, 4650 + [CLKID_MPLL_50M] = &g12a_mpll_50m.hw, 4651 + [CLKID_SYS_PLL_DIV16_EN] = &g12a_sys_pll_div16_en.hw, 4652 + [CLKID_SYS_PLL_DIV16] = &g12a_sys_pll_div16.hw, 4653 + [CLKID_CPU_CLK_DYN0_SEL] = &g12a_cpu_clk_premux0.hw, 4654 + [CLKID_CPU_CLK_DYN0_DIV] = &g12a_cpu_clk_mux0_div.hw, 4655 + [CLKID_CPU_CLK_DYN0] = &g12a_cpu_clk_postmux0.hw, 4656 + [CLKID_CPU_CLK_DYN1_SEL] = &g12a_cpu_clk_premux1.hw, 4657 + [CLKID_CPU_CLK_DYN1_DIV] = &g12a_cpu_clk_mux1_div.hw, 4658 + [CLKID_CPU_CLK_DYN1] = &g12a_cpu_clk_postmux1.hw, 4659 + [CLKID_CPU_CLK_DYN] = &g12a_cpu_clk_dyn.hw, 4660 + [CLKID_CPU_CLK] = &g12b_cpu_clk.hw, 4661 + [CLKID_CPU_CLK_DIV16_EN] = &g12a_cpu_clk_div16_en.hw, 4662 + [CLKID_CPU_CLK_DIV16] = &g12a_cpu_clk_div16.hw, 4663 + [CLKID_CPU_CLK_APB_DIV] = &g12a_cpu_clk_apb_div.hw, 4664 + [CLKID_CPU_CLK_APB] = &g12a_cpu_clk_apb.hw, 4665 + [CLKID_CPU_CLK_ATB_DIV] = &g12a_cpu_clk_atb_div.hw, 4666 + [CLKID_CPU_CLK_ATB] = &g12a_cpu_clk_atb.hw, 4667 + [CLKID_CPU_CLK_AXI_DIV] = &g12a_cpu_clk_axi_div.hw, 4668 + [CLKID_CPU_CLK_AXI] = &g12a_cpu_clk_axi.hw, 4669 + [CLKID_CPU_CLK_TRACE_DIV] = &g12a_cpu_clk_trace_div.hw, 4670 + [CLKID_CPU_CLK_TRACE] = &g12a_cpu_clk_trace.hw, 4671 + [CLKID_PCIE_PLL_DCO] = &g12a_pcie_pll_dco.hw, 4672 + [CLKID_PCIE_PLL_DCO_DIV2] = &g12a_pcie_pll_dco_div2.hw, 4673 + [CLKID_PCIE_PLL_OD] = &g12a_pcie_pll_od.hw, 4674 + [CLKID_PCIE_PLL] = &g12a_pcie_pll.hw, 4675 + [CLKID_VDEC_1_SEL] = &g12a_vdec_1_sel.hw, 4676 + [CLKID_VDEC_1_DIV] = &g12a_vdec_1_div.hw, 4677 + [CLKID_VDEC_1] = &g12a_vdec_1.hw, 4678 + [CLKID_VDEC_HEVC_SEL] = &g12a_vdec_hevc_sel.hw, 4679 + [CLKID_VDEC_HEVC_DIV] = &g12a_vdec_hevc_div.hw, 4680 + [CLKID_VDEC_HEVC] = &g12a_vdec_hevc.hw, 4681 + [CLKID_VDEC_HEVCF_SEL] = &g12a_vdec_hevcf_sel.hw, 4682 + [CLKID_VDEC_HEVCF_DIV] = &g12a_vdec_hevcf_div.hw, 4683 + [CLKID_VDEC_HEVCF] = &g12a_vdec_hevcf.hw, 4684 + [CLKID_TS_DIV] = &g12a_ts_div.hw, 4685 + [CLKID_TS] = &g12a_ts.hw, 4686 + [CLKID_SYS1_PLL_DCO] = &g12b_sys1_pll_dco.hw, 4687 + [CLKID_SYS1_PLL] = &g12b_sys1_pll.hw, 4688 + [CLKID_SYS1_PLL_DIV16_EN] = &g12b_sys1_pll_div16_en.hw, 4689 + [CLKID_SYS1_PLL_DIV16] = &g12b_sys1_pll_div16.hw, 4690 + [CLKID_CPUB_CLK_DYN0_SEL] = &g12b_cpub_clk_premux0.hw, 4691 + [CLKID_CPUB_CLK_DYN0_DIV] = &g12b_cpub_clk_mux0_div.hw, 4692 + [CLKID_CPUB_CLK_DYN0] = &g12b_cpub_clk_postmux0.hw, 4693 + [CLKID_CPUB_CLK_DYN1_SEL] = &g12b_cpub_clk_premux1.hw, 4694 + [CLKID_CPUB_CLK_DYN1_DIV] = &g12b_cpub_clk_mux1_div.hw, 4695 + [CLKID_CPUB_CLK_DYN1] = &g12b_cpub_clk_postmux1.hw, 4696 + [CLKID_CPUB_CLK_DYN] = &g12b_cpub_clk_dyn.hw, 4697 + [CLKID_CPUB_CLK] = &g12b_cpub_clk.hw, 4698 + [CLKID_CPUB_CLK_DIV16_EN] = &g12b_cpub_clk_div16_en.hw, 4699 + [CLKID_CPUB_CLK_DIV16] = &g12b_cpub_clk_div16.hw, 4700 + [CLKID_CPUB_CLK_DIV2] = &g12b_cpub_clk_div2.hw, 4701 + [CLKID_CPUB_CLK_DIV3] = &g12b_cpub_clk_div3.hw, 4702 + [CLKID_CPUB_CLK_DIV4] = &g12b_cpub_clk_div4.hw, 4703 + [CLKID_CPUB_CLK_DIV5] = &g12b_cpub_clk_div5.hw, 4704 + [CLKID_CPUB_CLK_DIV6] = &g12b_cpub_clk_div6.hw, 4705 + [CLKID_CPUB_CLK_DIV7] = &g12b_cpub_clk_div7.hw, 4706 + [CLKID_CPUB_CLK_DIV8] = &g12b_cpub_clk_div8.hw, 4707 + [CLKID_CPUB_CLK_APB_SEL] = &g12b_cpub_clk_apb_sel.hw, 4708 + [CLKID_CPUB_CLK_APB] = &g12b_cpub_clk_apb.hw, 4709 + [CLKID_CPUB_CLK_ATB_SEL] = &g12b_cpub_clk_atb_sel.hw, 4710 + [CLKID_CPUB_CLK_ATB] = &g12b_cpub_clk_atb.hw, 4711 + [CLKID_CPUB_CLK_AXI_SEL] = &g12b_cpub_clk_axi_sel.hw, 4712 + [CLKID_CPUB_CLK_AXI] = &g12b_cpub_clk_axi.hw, 4713 + [CLKID_CPUB_CLK_TRACE_SEL] = &g12b_cpub_clk_trace_sel.hw, 4714 + [CLKID_CPUB_CLK_TRACE] = &g12b_cpub_clk_trace.hw, 4715 + [CLKID_SPICC0_SCLK_SEL] = &g12a_spicc0_sclk_sel.hw, 4716 + [CLKID_SPICC0_SCLK_DIV] = &g12a_spicc0_sclk_div.hw, 4717 + [CLKID_SPICC0_SCLK] = &g12a_spicc0_sclk.hw, 4718 + [CLKID_SPICC1_SCLK_SEL] = &g12a_spicc1_sclk_sel.hw, 4719 + [CLKID_SPICC1_SCLK_DIV] = &g12a_spicc1_sclk_div.hw, 4720 + [CLKID_SPICC1_SCLK] = &g12a_spicc1_sclk.hw, 4721 + [CLKID_NNA_AXI_CLK_SEL] = &sm1_nna_axi_clk_sel.hw, 4722 + [CLKID_NNA_AXI_CLK_DIV] = &sm1_nna_axi_clk_div.hw, 4723 + [CLKID_NNA_AXI_CLK] = &sm1_nna_axi_clk.hw, 4724 + [CLKID_NNA_CORE_CLK_SEL] = &sm1_nna_core_clk_sel.hw, 4725 + [CLKID_NNA_CORE_CLK_DIV] = &sm1_nna_core_clk_div.hw, 4726 + [CLKID_NNA_CORE_CLK] = &sm1_nna_core_clk.hw, 4727 + [CLKID_MIPI_DSI_PXCLK_SEL] = &g12a_mipi_dsi_pxclk_sel.hw, 4728 + [CLKID_MIPI_DSI_PXCLK_DIV] = &g12a_mipi_dsi_pxclk_div.hw, 4729 + [CLKID_MIPI_DSI_PXCLK] = &g12a_mipi_dsi_pxclk.hw, 4740 4730 }; 4741 4731 4742 - static struct clk_hw_onecell_data sm1_hw_onecell_data = { 4743 - .hws = { 4744 - [CLKID_SYS_PLL] = &g12a_sys_pll.hw, 4745 - [CLKID_FIXED_PLL] = &g12a_fixed_pll.hw, 4746 - [CLKID_FCLK_DIV2] = &g12a_fclk_div2.hw, 4747 - [CLKID_FCLK_DIV3] = &g12a_fclk_div3.hw, 4748 - [CLKID_FCLK_DIV4] = &g12a_fclk_div4.hw, 4749 - [CLKID_FCLK_DIV5] = &g12a_fclk_div5.hw, 4750 - [CLKID_FCLK_DIV7] = &g12a_fclk_div7.hw, 4751 - [CLKID_FCLK_DIV2P5] = &g12a_fclk_div2p5.hw, 4752 - [CLKID_GP0_PLL] = &g12a_gp0_pll.hw, 4753 - [CLKID_MPEG_SEL] = &g12a_mpeg_clk_sel.hw, 4754 - [CLKID_MPEG_DIV] = &g12a_mpeg_clk_div.hw, 4755 - [CLKID_CLK81] = &g12a_clk81.hw, 4756 - [CLKID_MPLL0] = &g12a_mpll0.hw, 4757 - [CLKID_MPLL1] = &g12a_mpll1.hw, 4758 - [CLKID_MPLL2] = &g12a_mpll2.hw, 4759 - [CLKID_MPLL3] = &g12a_mpll3.hw, 4760 - [CLKID_DDR] = &g12a_ddr.hw, 4761 - [CLKID_DOS] = &g12a_dos.hw, 4762 - [CLKID_AUDIO_LOCKER] = &g12a_audio_locker.hw, 4763 - [CLKID_MIPI_DSI_HOST] = &g12a_mipi_dsi_host.hw, 4764 - [CLKID_ETH_PHY] = &g12a_eth_phy.hw, 4765 - [CLKID_ISA] = &g12a_isa.hw, 4766 - [CLKID_PL301] = &g12a_pl301.hw, 4767 - [CLKID_PERIPHS] = &g12a_periphs.hw, 4768 - [CLKID_SPICC0] = &g12a_spicc_0.hw, 4769 - [CLKID_I2C] = &g12a_i2c.hw, 4770 - [CLKID_SANA] = &g12a_sana.hw, 4771 - [CLKID_SD] = &g12a_sd.hw, 4772 - [CLKID_RNG0] = &g12a_rng0.hw, 4773 - [CLKID_UART0] = &g12a_uart0.hw, 4774 - [CLKID_SPICC1] = &g12a_spicc_1.hw, 4775 - [CLKID_HIU_IFACE] = &g12a_hiu_reg.hw, 4776 - [CLKID_MIPI_DSI_PHY] = &g12a_mipi_dsi_phy.hw, 4777 - [CLKID_ASSIST_MISC] = &g12a_assist_misc.hw, 4778 - [CLKID_SD_EMMC_A] = &g12a_emmc_a.hw, 4779 - [CLKID_SD_EMMC_B] = &g12a_emmc_b.hw, 4780 - [CLKID_SD_EMMC_C] = &g12a_emmc_c.hw, 4781 - [CLKID_AUDIO_CODEC] = &g12a_audio_codec.hw, 4782 - [CLKID_AUDIO] = &g12a_audio.hw, 4783 - [CLKID_ETH] = &g12a_eth_core.hw, 4784 - [CLKID_DEMUX] = &g12a_demux.hw, 4785 - [CLKID_AUDIO_IFIFO] = &g12a_audio_ififo.hw, 4786 - [CLKID_ADC] = &g12a_adc.hw, 4787 - [CLKID_UART1] = &g12a_uart1.hw, 4788 - [CLKID_G2D] = &g12a_g2d.hw, 4789 - [CLKID_RESET] = &g12a_reset.hw, 4790 - [CLKID_PCIE_COMB] = &g12a_pcie_comb.hw, 4791 - [CLKID_PARSER] = &g12a_parser.hw, 4792 - [CLKID_USB] = &g12a_usb_general.hw, 4793 - [CLKID_PCIE_PHY] = &g12a_pcie_phy.hw, 4794 - [CLKID_AHB_ARB0] = &g12a_ahb_arb0.hw, 4795 - [CLKID_AHB_DATA_BUS] = &g12a_ahb_data_bus.hw, 4796 - [CLKID_AHB_CTRL_BUS] = &g12a_ahb_ctrl_bus.hw, 4797 - [CLKID_HTX_HDCP22] = &g12a_htx_hdcp22.hw, 4798 - [CLKID_HTX_PCLK] = &g12a_htx_pclk.hw, 4799 - [CLKID_BT656] = &g12a_bt656.hw, 4800 - [CLKID_USB1_DDR_BRIDGE] = &g12a_usb1_to_ddr.hw, 4801 - [CLKID_MMC_PCLK] = &g12a_mmc_pclk.hw, 4802 - [CLKID_UART2] = &g12a_uart2.hw, 4803 - [CLKID_VPU_INTR] = &g12a_vpu_intr.hw, 4804 - [CLKID_GIC] = &g12a_gic.hw, 4805 - [CLKID_SD_EMMC_A_CLK0_SEL] = &g12a_sd_emmc_a_clk0_sel.hw, 4806 - [CLKID_SD_EMMC_A_CLK0_DIV] = &g12a_sd_emmc_a_clk0_div.hw, 4807 - [CLKID_SD_EMMC_A_CLK0] = &g12a_sd_emmc_a_clk0.hw, 4808 - [CLKID_SD_EMMC_B_CLK0_SEL] = &g12a_sd_emmc_b_clk0_sel.hw, 4809 - [CLKID_SD_EMMC_B_CLK0_DIV] = &g12a_sd_emmc_b_clk0_div.hw, 4810 - [CLKID_SD_EMMC_B_CLK0] = &g12a_sd_emmc_b_clk0.hw, 4811 - [CLKID_SD_EMMC_C_CLK0_SEL] = &g12a_sd_emmc_c_clk0_sel.hw, 4812 - [CLKID_SD_EMMC_C_CLK0_DIV] = &g12a_sd_emmc_c_clk0_div.hw, 4813 - [CLKID_SD_EMMC_C_CLK0] = &g12a_sd_emmc_c_clk0.hw, 4814 - [CLKID_MPLL0_DIV] = &g12a_mpll0_div.hw, 4815 - [CLKID_MPLL1_DIV] = &g12a_mpll1_div.hw, 4816 - [CLKID_MPLL2_DIV] = &g12a_mpll2_div.hw, 4817 - [CLKID_MPLL3_DIV] = &g12a_mpll3_div.hw, 4818 - [CLKID_FCLK_DIV2_DIV] = &g12a_fclk_div2_div.hw, 4819 - [CLKID_FCLK_DIV3_DIV] = &g12a_fclk_div3_div.hw, 4820 - [CLKID_FCLK_DIV4_DIV] = &g12a_fclk_div4_div.hw, 4821 - [CLKID_FCLK_DIV5_DIV] = &g12a_fclk_div5_div.hw, 4822 - [CLKID_FCLK_DIV7_DIV] = &g12a_fclk_div7_div.hw, 4823 - [CLKID_FCLK_DIV2P5_DIV] = &g12a_fclk_div2p5_div.hw, 4824 - [CLKID_HIFI_PLL] = &g12a_hifi_pll.hw, 4825 - [CLKID_VCLK2_VENCI0] = &g12a_vclk2_venci0.hw, 4826 - [CLKID_VCLK2_VENCI1] = &g12a_vclk2_venci1.hw, 4827 - [CLKID_VCLK2_VENCP0] = &g12a_vclk2_vencp0.hw, 4828 - [CLKID_VCLK2_VENCP1] = &g12a_vclk2_vencp1.hw, 4829 - [CLKID_VCLK2_VENCT0] = &g12a_vclk2_venct0.hw, 4830 - [CLKID_VCLK2_VENCT1] = &g12a_vclk2_venct1.hw, 4831 - [CLKID_VCLK2_OTHER] = &g12a_vclk2_other.hw, 4832 - [CLKID_VCLK2_ENCI] = &g12a_vclk2_enci.hw, 4833 - [CLKID_VCLK2_ENCP] = &g12a_vclk2_encp.hw, 4834 - [CLKID_DAC_CLK] = &g12a_dac_clk.hw, 4835 - [CLKID_AOCLK] = &g12a_aoclk_gate.hw, 4836 - [CLKID_IEC958] = &g12a_iec958_gate.hw, 4837 - [CLKID_ENC480P] = &g12a_enc480p.hw, 4838 - [CLKID_RNG1] = &g12a_rng1.hw, 4839 - [CLKID_VCLK2_ENCT] = &g12a_vclk2_enct.hw, 4840 - [CLKID_VCLK2_ENCL] = &g12a_vclk2_encl.hw, 4841 - [CLKID_VCLK2_VENCLMMC] = &g12a_vclk2_venclmmc.hw, 4842 - [CLKID_VCLK2_VENCL] = &g12a_vclk2_vencl.hw, 4843 - [CLKID_VCLK2_OTHER1] = &g12a_vclk2_other1.hw, 4844 - [CLKID_FIXED_PLL_DCO] = &g12a_fixed_pll_dco.hw, 4845 - [CLKID_SYS_PLL_DCO] = &g12a_sys_pll_dco.hw, 4846 - [CLKID_GP0_PLL_DCO] = &g12a_gp0_pll_dco.hw, 4847 - [CLKID_HIFI_PLL_DCO] = &g12a_hifi_pll_dco.hw, 4848 - [CLKID_DMA] = &g12a_dma.hw, 4849 - [CLKID_EFUSE] = &g12a_efuse.hw, 4850 - [CLKID_ROM_BOOT] = &g12a_rom_boot.hw, 4851 - [CLKID_RESET_SEC] = &g12a_reset_sec.hw, 4852 - [CLKID_SEC_AHB_APB3] = &g12a_sec_ahb_apb3.hw, 4853 - [CLKID_MPLL_PREDIV] = &g12a_mpll_prediv.hw, 4854 - [CLKID_VPU_0_SEL] = &g12a_vpu_0_sel.hw, 4855 - [CLKID_VPU_0_DIV] = &g12a_vpu_0_div.hw, 4856 - [CLKID_VPU_0] = &g12a_vpu_0.hw, 4857 - [CLKID_VPU_1_SEL] = &g12a_vpu_1_sel.hw, 4858 - [CLKID_VPU_1_DIV] = &g12a_vpu_1_div.hw, 4859 - [CLKID_VPU_1] = &g12a_vpu_1.hw, 4860 - [CLKID_VPU] = &g12a_vpu.hw, 4861 - [CLKID_VAPB_0_SEL] = &g12a_vapb_0_sel.hw, 4862 - [CLKID_VAPB_0_DIV] = &g12a_vapb_0_div.hw, 4863 - [CLKID_VAPB_0] = &g12a_vapb_0.hw, 4864 - [CLKID_VAPB_1_SEL] = &g12a_vapb_1_sel.hw, 4865 - [CLKID_VAPB_1_DIV] = &g12a_vapb_1_div.hw, 4866 - [CLKID_VAPB_1] = &g12a_vapb_1.hw, 4867 - [CLKID_VAPB_SEL] = &g12a_vapb_sel.hw, 4868 - [CLKID_VAPB] = &g12a_vapb.hw, 4869 - [CLKID_HDMI_PLL_DCO] = &g12a_hdmi_pll_dco.hw, 4870 - [CLKID_HDMI_PLL_OD] = &g12a_hdmi_pll_od.hw, 4871 - [CLKID_HDMI_PLL_OD2] = &g12a_hdmi_pll_od2.hw, 4872 - [CLKID_HDMI_PLL] = &g12a_hdmi_pll.hw, 4873 - [CLKID_VID_PLL] = &g12a_vid_pll_div.hw, 4874 - [CLKID_VID_PLL_SEL] = &g12a_vid_pll_sel.hw, 4875 - [CLKID_VID_PLL_DIV] = &g12a_vid_pll.hw, 4876 - [CLKID_VCLK_SEL] = &g12a_vclk_sel.hw, 4877 - [CLKID_VCLK2_SEL] = &g12a_vclk2_sel.hw, 4878 - [CLKID_VCLK_INPUT] = &g12a_vclk_input.hw, 4879 - [CLKID_VCLK2_INPUT] = &g12a_vclk2_input.hw, 4880 - [CLKID_VCLK_DIV] = &g12a_vclk_div.hw, 4881 - [CLKID_VCLK2_DIV] = &g12a_vclk2_div.hw, 4882 - [CLKID_VCLK] = &g12a_vclk.hw, 4883 - [CLKID_VCLK2] = &g12a_vclk2.hw, 4884 - [CLKID_VCLK_DIV1] = &g12a_vclk_div1.hw, 4885 - [CLKID_VCLK_DIV2_EN] = &g12a_vclk_div2_en.hw, 4886 - [CLKID_VCLK_DIV4_EN] = &g12a_vclk_div4_en.hw, 4887 - [CLKID_VCLK_DIV6_EN] = &g12a_vclk_div6_en.hw, 4888 - [CLKID_VCLK_DIV12_EN] = &g12a_vclk_div12_en.hw, 4889 - [CLKID_VCLK2_DIV1] = &g12a_vclk2_div1.hw, 4890 - [CLKID_VCLK2_DIV2_EN] = &g12a_vclk2_div2_en.hw, 4891 - [CLKID_VCLK2_DIV4_EN] = &g12a_vclk2_div4_en.hw, 4892 - [CLKID_VCLK2_DIV6_EN] = &g12a_vclk2_div6_en.hw, 4893 - [CLKID_VCLK2_DIV12_EN] = &g12a_vclk2_div12_en.hw, 4894 - [CLKID_VCLK_DIV2] = &g12a_vclk_div2.hw, 4895 - [CLKID_VCLK_DIV4] = &g12a_vclk_div4.hw, 4896 - [CLKID_VCLK_DIV6] = &g12a_vclk_div6.hw, 4897 - [CLKID_VCLK_DIV12] = &g12a_vclk_div12.hw, 4898 - [CLKID_VCLK2_DIV2] = &g12a_vclk2_div2.hw, 4899 - [CLKID_VCLK2_DIV4] = &g12a_vclk2_div4.hw, 4900 - [CLKID_VCLK2_DIV6] = &g12a_vclk2_div6.hw, 4901 - [CLKID_VCLK2_DIV12] = &g12a_vclk2_div12.hw, 4902 - [CLKID_CTS_ENCI_SEL] = &g12a_cts_enci_sel.hw, 4903 - [CLKID_CTS_ENCP_SEL] = &g12a_cts_encp_sel.hw, 4904 - [CLKID_CTS_VDAC_SEL] = &g12a_cts_vdac_sel.hw, 4905 - [CLKID_HDMI_TX_SEL] = &g12a_hdmi_tx_sel.hw, 4906 - [CLKID_CTS_ENCI] = &g12a_cts_enci.hw, 4907 - [CLKID_CTS_ENCP] = &g12a_cts_encp.hw, 4908 - [CLKID_CTS_VDAC] = &g12a_cts_vdac.hw, 4909 - [CLKID_HDMI_TX] = &g12a_hdmi_tx.hw, 4910 - [CLKID_HDMI_SEL] = &g12a_hdmi_sel.hw, 4911 - [CLKID_HDMI_DIV] = &g12a_hdmi_div.hw, 4912 - [CLKID_HDMI] = &g12a_hdmi.hw, 4913 - [CLKID_MALI_0_SEL] = &g12a_mali_0_sel.hw, 4914 - [CLKID_MALI_0_DIV] = &g12a_mali_0_div.hw, 4915 - [CLKID_MALI_0] = &g12a_mali_0.hw, 4916 - [CLKID_MALI_1_SEL] = &g12a_mali_1_sel.hw, 4917 - [CLKID_MALI_1_DIV] = &g12a_mali_1_div.hw, 4918 - [CLKID_MALI_1] = &g12a_mali_1.hw, 4919 - [CLKID_MALI] = &g12a_mali.hw, 4920 - [CLKID_MPLL_50M_DIV] = &g12a_mpll_50m_div.hw, 4921 - [CLKID_MPLL_50M] = &g12a_mpll_50m.hw, 4922 - [CLKID_SYS_PLL_DIV16_EN] = &g12a_sys_pll_div16_en.hw, 4923 - [CLKID_SYS_PLL_DIV16] = &g12a_sys_pll_div16.hw, 4924 - [CLKID_CPU_CLK_DYN0_SEL] = &g12a_cpu_clk_premux0.hw, 4925 - [CLKID_CPU_CLK_DYN0_DIV] = &g12a_cpu_clk_mux0_div.hw, 4926 - [CLKID_CPU_CLK_DYN0] = &g12a_cpu_clk_postmux0.hw, 4927 - [CLKID_CPU_CLK_DYN1_SEL] = &g12a_cpu_clk_premux1.hw, 4928 - [CLKID_CPU_CLK_DYN1_DIV] = &g12a_cpu_clk_mux1_div.hw, 4929 - [CLKID_CPU_CLK_DYN1] = &g12a_cpu_clk_postmux1.hw, 4930 - [CLKID_CPU_CLK_DYN] = &g12a_cpu_clk_dyn.hw, 4931 - [CLKID_CPU_CLK] = &g12a_cpu_clk.hw, 4932 - [CLKID_CPU_CLK_DIV16_EN] = &g12a_cpu_clk_div16_en.hw, 4933 - [CLKID_CPU_CLK_DIV16] = &g12a_cpu_clk_div16.hw, 4934 - [CLKID_CPU_CLK_APB_DIV] = &g12a_cpu_clk_apb_div.hw, 4935 - [CLKID_CPU_CLK_APB] = &g12a_cpu_clk_apb.hw, 4936 - [CLKID_CPU_CLK_ATB_DIV] = &g12a_cpu_clk_atb_div.hw, 4937 - [CLKID_CPU_CLK_ATB] = &g12a_cpu_clk_atb.hw, 4938 - [CLKID_CPU_CLK_AXI_DIV] = &g12a_cpu_clk_axi_div.hw, 4939 - [CLKID_CPU_CLK_AXI] = &g12a_cpu_clk_axi.hw, 4940 - [CLKID_CPU_CLK_TRACE_DIV] = &g12a_cpu_clk_trace_div.hw, 4941 - [CLKID_CPU_CLK_TRACE] = &g12a_cpu_clk_trace.hw, 4942 - [CLKID_PCIE_PLL_DCO] = &g12a_pcie_pll_dco.hw, 4943 - [CLKID_PCIE_PLL_DCO_DIV2] = &g12a_pcie_pll_dco_div2.hw, 4944 - [CLKID_PCIE_PLL_OD] = &g12a_pcie_pll_od.hw, 4945 - [CLKID_PCIE_PLL] = &g12a_pcie_pll.hw, 4946 - [CLKID_VDEC_1_SEL] = &g12a_vdec_1_sel.hw, 4947 - [CLKID_VDEC_1_DIV] = &g12a_vdec_1_div.hw, 4948 - [CLKID_VDEC_1] = &g12a_vdec_1.hw, 4949 - [CLKID_VDEC_HEVC_SEL] = &g12a_vdec_hevc_sel.hw, 4950 - [CLKID_VDEC_HEVC_DIV] = &g12a_vdec_hevc_div.hw, 4951 - [CLKID_VDEC_HEVC] = &g12a_vdec_hevc.hw, 4952 - [CLKID_VDEC_HEVCF_SEL] = &g12a_vdec_hevcf_sel.hw, 4953 - [CLKID_VDEC_HEVCF_DIV] = &g12a_vdec_hevcf_div.hw, 4954 - [CLKID_VDEC_HEVCF] = &g12a_vdec_hevcf.hw, 4955 - [CLKID_TS_DIV] = &g12a_ts_div.hw, 4956 - [CLKID_TS] = &g12a_ts.hw, 4957 - [CLKID_GP1_PLL_DCO] = &sm1_gp1_pll_dco.hw, 4958 - [CLKID_GP1_PLL] = &sm1_gp1_pll.hw, 4959 - [CLKID_DSU_CLK_DYN0_SEL] = &sm1_dsu_clk_premux0.hw, 4960 - [CLKID_DSU_CLK_DYN0_DIV] = &sm1_dsu_clk_premux1.hw, 4961 - [CLKID_DSU_CLK_DYN0] = &sm1_dsu_clk_mux0_div.hw, 4962 - [CLKID_DSU_CLK_DYN1_SEL] = &sm1_dsu_clk_postmux0.hw, 4963 - [CLKID_DSU_CLK_DYN1_DIV] = &sm1_dsu_clk_mux1_div.hw, 4964 - [CLKID_DSU_CLK_DYN1] = &sm1_dsu_clk_postmux1.hw, 4965 - [CLKID_DSU_CLK_DYN] = &sm1_dsu_clk_dyn.hw, 4966 - [CLKID_DSU_CLK_FINAL] = &sm1_dsu_final_clk.hw, 4967 - [CLKID_DSU_CLK] = &sm1_dsu_clk.hw, 4968 - [CLKID_CPU1_CLK] = &sm1_cpu1_clk.hw, 4969 - [CLKID_CPU2_CLK] = &sm1_cpu2_clk.hw, 4970 - [CLKID_CPU3_CLK] = &sm1_cpu3_clk.hw, 4971 - [CLKID_SPICC0_SCLK_SEL] = &g12a_spicc0_sclk_sel.hw, 4972 - [CLKID_SPICC0_SCLK_DIV] = &g12a_spicc0_sclk_div.hw, 4973 - [CLKID_SPICC0_SCLK] = &g12a_spicc0_sclk.hw, 4974 - [CLKID_SPICC1_SCLK_SEL] = &g12a_spicc1_sclk_sel.hw, 4975 - [CLKID_SPICC1_SCLK_DIV] = &g12a_spicc1_sclk_div.hw, 4976 - [CLKID_SPICC1_SCLK] = &g12a_spicc1_sclk.hw, 4977 - [CLKID_NNA_AXI_CLK_SEL] = &sm1_nna_axi_clk_sel.hw, 4978 - [CLKID_NNA_AXI_CLK_DIV] = &sm1_nna_axi_clk_div.hw, 4979 - [CLKID_NNA_AXI_CLK] = &sm1_nna_axi_clk.hw, 4980 - [CLKID_NNA_CORE_CLK_SEL] = &sm1_nna_core_clk_sel.hw, 4981 - [CLKID_NNA_CORE_CLK_DIV] = &sm1_nna_core_clk_div.hw, 4982 - [CLKID_NNA_CORE_CLK] = &sm1_nna_core_clk.hw, 4983 - [CLKID_MIPI_DSI_PXCLK_SEL] = &g12a_mipi_dsi_pxclk_sel.hw, 4984 - [CLKID_MIPI_DSI_PXCLK_DIV] = &g12a_mipi_dsi_pxclk_div.hw, 4985 - [CLKID_MIPI_DSI_PXCLK] = &g12a_mipi_dsi_pxclk.hw, 4986 - [NR_CLKS] = NULL, 4987 - }, 4988 - .num = NR_CLKS, 4732 + static struct clk_hw *sm1_hw_clks[] = { 4733 + [CLKID_SYS_PLL] = &g12a_sys_pll.hw, 4734 + [CLKID_FIXED_PLL] = &g12a_fixed_pll.hw, 4735 + [CLKID_FCLK_DIV2] = &g12a_fclk_div2.hw, 4736 + [CLKID_FCLK_DIV3] = &g12a_fclk_div3.hw, 4737 + [CLKID_FCLK_DIV4] = &g12a_fclk_div4.hw, 4738 + [CLKID_FCLK_DIV5] = &g12a_fclk_div5.hw, 4739 + [CLKID_FCLK_DIV7] = &g12a_fclk_div7.hw, 4740 + [CLKID_FCLK_DIV2P5] = &g12a_fclk_div2p5.hw, 4741 + [CLKID_GP0_PLL] = &g12a_gp0_pll.hw, 4742 + [CLKID_MPEG_SEL] = &g12a_mpeg_clk_sel.hw, 4743 + [CLKID_MPEG_DIV] = &g12a_mpeg_clk_div.hw, 4744 + [CLKID_CLK81] = &g12a_clk81.hw, 4745 + [CLKID_MPLL0] = &g12a_mpll0.hw, 4746 + [CLKID_MPLL1] = &g12a_mpll1.hw, 4747 + [CLKID_MPLL2] = &g12a_mpll2.hw, 4748 + [CLKID_MPLL3] = &g12a_mpll3.hw, 4749 + [CLKID_DDR] = &g12a_ddr.hw, 4750 + [CLKID_DOS] = &g12a_dos.hw, 4751 + [CLKID_AUDIO_LOCKER] = &g12a_audio_locker.hw, 4752 + [CLKID_MIPI_DSI_HOST] = &g12a_mipi_dsi_host.hw, 4753 + [CLKID_ETH_PHY] = &g12a_eth_phy.hw, 4754 + [CLKID_ISA] = &g12a_isa.hw, 4755 + [CLKID_PL301] = &g12a_pl301.hw, 4756 + [CLKID_PERIPHS] = &g12a_periphs.hw, 4757 + [CLKID_SPICC0] = &g12a_spicc_0.hw, 4758 + [CLKID_I2C] = &g12a_i2c.hw, 4759 + [CLKID_SANA] = &g12a_sana.hw, 4760 + [CLKID_SD] = &g12a_sd.hw, 4761 + [CLKID_RNG0] = &g12a_rng0.hw, 4762 + [CLKID_UART0] = &g12a_uart0.hw, 4763 + [CLKID_SPICC1] = &g12a_spicc_1.hw, 4764 + [CLKID_HIU_IFACE] = &g12a_hiu_reg.hw, 4765 + [CLKID_MIPI_DSI_PHY] = &g12a_mipi_dsi_phy.hw, 4766 + [CLKID_ASSIST_MISC] = &g12a_assist_misc.hw, 4767 + [CLKID_SD_EMMC_A] = &g12a_emmc_a.hw, 4768 + [CLKID_SD_EMMC_B] = &g12a_emmc_b.hw, 4769 + [CLKID_SD_EMMC_C] = &g12a_emmc_c.hw, 4770 + [CLKID_AUDIO_CODEC] = &g12a_audio_codec.hw, 4771 + [CLKID_AUDIO] = &g12a_audio.hw, 4772 + [CLKID_ETH] = &g12a_eth_core.hw, 4773 + [CLKID_DEMUX] = &g12a_demux.hw, 4774 + [CLKID_AUDIO_IFIFO] = &g12a_audio_ififo.hw, 4775 + [CLKID_ADC] = &g12a_adc.hw, 4776 + [CLKID_UART1] = &g12a_uart1.hw, 4777 + [CLKID_G2D] = &g12a_g2d.hw, 4778 + [CLKID_RESET] = &g12a_reset.hw, 4779 + [CLKID_PCIE_COMB] = &g12a_pcie_comb.hw, 4780 + [CLKID_PARSER] = &g12a_parser.hw, 4781 + [CLKID_USB] = &g12a_usb_general.hw, 4782 + [CLKID_PCIE_PHY] = &g12a_pcie_phy.hw, 4783 + [CLKID_AHB_ARB0] = &g12a_ahb_arb0.hw, 4784 + [CLKID_AHB_DATA_BUS] = &g12a_ahb_data_bus.hw, 4785 + [CLKID_AHB_CTRL_BUS] = &g12a_ahb_ctrl_bus.hw, 4786 + [CLKID_HTX_HDCP22] = &g12a_htx_hdcp22.hw, 4787 + [CLKID_HTX_PCLK] = &g12a_htx_pclk.hw, 4788 + [CLKID_BT656] = &g12a_bt656.hw, 4789 + [CLKID_USB1_DDR_BRIDGE] = &g12a_usb1_to_ddr.hw, 4790 + [CLKID_MMC_PCLK] = &g12a_mmc_pclk.hw, 4791 + [CLKID_UART2] = &g12a_uart2.hw, 4792 + [CLKID_VPU_INTR] = &g12a_vpu_intr.hw, 4793 + [CLKID_GIC] = &g12a_gic.hw, 4794 + [CLKID_SD_EMMC_A_CLK0_SEL] = &g12a_sd_emmc_a_clk0_sel.hw, 4795 + [CLKID_SD_EMMC_A_CLK0_DIV] = &g12a_sd_emmc_a_clk0_div.hw, 4796 + [CLKID_SD_EMMC_A_CLK0] = &g12a_sd_emmc_a_clk0.hw, 4797 + [CLKID_SD_EMMC_B_CLK0_SEL] = &g12a_sd_emmc_b_clk0_sel.hw, 4798 + [CLKID_SD_EMMC_B_CLK0_DIV] = &g12a_sd_emmc_b_clk0_div.hw, 4799 + [CLKID_SD_EMMC_B_CLK0] = &g12a_sd_emmc_b_clk0.hw, 4800 + [CLKID_SD_EMMC_C_CLK0_SEL] = &g12a_sd_emmc_c_clk0_sel.hw, 4801 + [CLKID_SD_EMMC_C_CLK0_DIV] = &g12a_sd_emmc_c_clk0_div.hw, 4802 + [CLKID_SD_EMMC_C_CLK0] = &g12a_sd_emmc_c_clk0.hw, 4803 + [CLKID_MPLL0_DIV] = &g12a_mpll0_div.hw, 4804 + [CLKID_MPLL1_DIV] = &g12a_mpll1_div.hw, 4805 + [CLKID_MPLL2_DIV] = &g12a_mpll2_div.hw, 4806 + [CLKID_MPLL3_DIV] = &g12a_mpll3_div.hw, 4807 + [CLKID_FCLK_DIV2_DIV] = &g12a_fclk_div2_div.hw, 4808 + [CLKID_FCLK_DIV3_DIV] = &g12a_fclk_div3_div.hw, 4809 + [CLKID_FCLK_DIV4_DIV] = &g12a_fclk_div4_div.hw, 4810 + [CLKID_FCLK_DIV5_DIV] = &g12a_fclk_div5_div.hw, 4811 + [CLKID_FCLK_DIV7_DIV] = &g12a_fclk_div7_div.hw, 4812 + [CLKID_FCLK_DIV2P5_DIV] = &g12a_fclk_div2p5_div.hw, 4813 + [CLKID_HIFI_PLL] = &g12a_hifi_pll.hw, 4814 + [CLKID_VCLK2_VENCI0] = &g12a_vclk2_venci0.hw, 4815 + [CLKID_VCLK2_VENCI1] = &g12a_vclk2_venci1.hw, 4816 + [CLKID_VCLK2_VENCP0] = &g12a_vclk2_vencp0.hw, 4817 + [CLKID_VCLK2_VENCP1] = &g12a_vclk2_vencp1.hw, 4818 + [CLKID_VCLK2_VENCT0] = &g12a_vclk2_venct0.hw, 4819 + [CLKID_VCLK2_VENCT1] = &g12a_vclk2_venct1.hw, 4820 + [CLKID_VCLK2_OTHER] = &g12a_vclk2_other.hw, 4821 + [CLKID_VCLK2_ENCI] = &g12a_vclk2_enci.hw, 4822 + [CLKID_VCLK2_ENCP] = &g12a_vclk2_encp.hw, 4823 + [CLKID_DAC_CLK] = &g12a_dac_clk.hw, 4824 + [CLKID_AOCLK] = &g12a_aoclk_gate.hw, 4825 + [CLKID_IEC958] = &g12a_iec958_gate.hw, 4826 + [CLKID_ENC480P] = &g12a_enc480p.hw, 4827 + [CLKID_RNG1] = &g12a_rng1.hw, 4828 + [CLKID_VCLK2_ENCT] = &g12a_vclk2_enct.hw, 4829 + [CLKID_VCLK2_ENCL] = &g12a_vclk2_encl.hw, 4830 + [CLKID_VCLK2_VENCLMMC] = &g12a_vclk2_venclmmc.hw, 4831 + [CLKID_VCLK2_VENCL] = &g12a_vclk2_vencl.hw, 4832 + [CLKID_VCLK2_OTHER1] = &g12a_vclk2_other1.hw, 4833 + [CLKID_FIXED_PLL_DCO] = &g12a_fixed_pll_dco.hw, 4834 + [CLKID_SYS_PLL_DCO] = &g12a_sys_pll_dco.hw, 4835 + [CLKID_GP0_PLL_DCO] = &g12a_gp0_pll_dco.hw, 4836 + [CLKID_HIFI_PLL_DCO] = &g12a_hifi_pll_dco.hw, 4837 + [CLKID_DMA] = &g12a_dma.hw, 4838 + [CLKID_EFUSE] = &g12a_efuse.hw, 4839 + [CLKID_ROM_BOOT] = &g12a_rom_boot.hw, 4840 + [CLKID_RESET_SEC] = &g12a_reset_sec.hw, 4841 + [CLKID_SEC_AHB_APB3] = &g12a_sec_ahb_apb3.hw, 4842 + [CLKID_MPLL_PREDIV] = &g12a_mpll_prediv.hw, 4843 + [CLKID_VPU_0_SEL] = &g12a_vpu_0_sel.hw, 4844 + [CLKID_VPU_0_DIV] = &g12a_vpu_0_div.hw, 4845 + [CLKID_VPU_0] = &g12a_vpu_0.hw, 4846 + [CLKID_VPU_1_SEL] = &g12a_vpu_1_sel.hw, 4847 + [CLKID_VPU_1_DIV] = &g12a_vpu_1_div.hw, 4848 + [CLKID_VPU_1] = &g12a_vpu_1.hw, 4849 + [CLKID_VPU] = &g12a_vpu.hw, 4850 + [CLKID_VAPB_0_SEL] = &g12a_vapb_0_sel.hw, 4851 + [CLKID_VAPB_0_DIV] = &g12a_vapb_0_div.hw, 4852 + [CLKID_VAPB_0] = &g12a_vapb_0.hw, 4853 + [CLKID_VAPB_1_SEL] = &g12a_vapb_1_sel.hw, 4854 + [CLKID_VAPB_1_DIV] = &g12a_vapb_1_div.hw, 4855 + [CLKID_VAPB_1] = &g12a_vapb_1.hw, 4856 + [CLKID_VAPB_SEL] = &g12a_vapb_sel.hw, 4857 + [CLKID_VAPB] = &g12a_vapb.hw, 4858 + [CLKID_HDMI_PLL_DCO] = &g12a_hdmi_pll_dco.hw, 4859 + [CLKID_HDMI_PLL_OD] = &g12a_hdmi_pll_od.hw, 4860 + [CLKID_HDMI_PLL_OD2] = &g12a_hdmi_pll_od2.hw, 4861 + [CLKID_HDMI_PLL] = &g12a_hdmi_pll.hw, 4862 + [CLKID_VID_PLL] = &g12a_vid_pll_div.hw, 4863 + [CLKID_VID_PLL_SEL] = &g12a_vid_pll_sel.hw, 4864 + [CLKID_VID_PLL_DIV] = &g12a_vid_pll.hw, 4865 + [CLKID_VCLK_SEL] = &g12a_vclk_sel.hw, 4866 + [CLKID_VCLK2_SEL] = &g12a_vclk2_sel.hw, 4867 + [CLKID_VCLK_INPUT] = &g12a_vclk_input.hw, 4868 + [CLKID_VCLK2_INPUT] = &g12a_vclk2_input.hw, 4869 + [CLKID_VCLK_DIV] = &g12a_vclk_div.hw, 4870 + [CLKID_VCLK2_DIV] = &g12a_vclk2_div.hw, 4871 + [CLKID_VCLK] = &g12a_vclk.hw, 4872 + [CLKID_VCLK2] = &g12a_vclk2.hw, 4873 + [CLKID_VCLK_DIV1] = &g12a_vclk_div1.hw, 4874 + [CLKID_VCLK_DIV2_EN] = &g12a_vclk_div2_en.hw, 4875 + [CLKID_VCLK_DIV4_EN] = &g12a_vclk_div4_en.hw, 4876 + [CLKID_VCLK_DIV6_EN] = &g12a_vclk_div6_en.hw, 4877 + [CLKID_VCLK_DIV12_EN] = &g12a_vclk_div12_en.hw, 4878 + [CLKID_VCLK2_DIV1] = &g12a_vclk2_div1.hw, 4879 + [CLKID_VCLK2_DIV2_EN] = &g12a_vclk2_div2_en.hw, 4880 + [CLKID_VCLK2_DIV4_EN] = &g12a_vclk2_div4_en.hw, 4881 + [CLKID_VCLK2_DIV6_EN] = &g12a_vclk2_div6_en.hw, 4882 + [CLKID_VCLK2_DIV12_EN] = &g12a_vclk2_div12_en.hw, 4883 + [CLKID_VCLK_DIV2] = &g12a_vclk_div2.hw, 4884 + [CLKID_VCLK_DIV4] = &g12a_vclk_div4.hw, 4885 + [CLKID_VCLK_DIV6] = &g12a_vclk_div6.hw, 4886 + [CLKID_VCLK_DIV12] = &g12a_vclk_div12.hw, 4887 + [CLKID_VCLK2_DIV2] = &g12a_vclk2_div2.hw, 4888 + [CLKID_VCLK2_DIV4] = &g12a_vclk2_div4.hw, 4889 + [CLKID_VCLK2_DIV6] = &g12a_vclk2_div6.hw, 4890 + [CLKID_VCLK2_DIV12] = &g12a_vclk2_div12.hw, 4891 + [CLKID_CTS_ENCI_SEL] = &g12a_cts_enci_sel.hw, 4892 + [CLKID_CTS_ENCP_SEL] = &g12a_cts_encp_sel.hw, 4893 + [CLKID_CTS_VDAC_SEL] = &g12a_cts_vdac_sel.hw, 4894 + [CLKID_HDMI_TX_SEL] = &g12a_hdmi_tx_sel.hw, 4895 + [CLKID_CTS_ENCI] = &g12a_cts_enci.hw, 4896 + [CLKID_CTS_ENCP] = &g12a_cts_encp.hw, 4897 + [CLKID_CTS_VDAC] = &g12a_cts_vdac.hw, 4898 + [CLKID_HDMI_TX] = &g12a_hdmi_tx.hw, 4899 + [CLKID_HDMI_SEL] = &g12a_hdmi_sel.hw, 4900 + [CLKID_HDMI_DIV] = &g12a_hdmi_div.hw, 4901 + [CLKID_HDMI] = &g12a_hdmi.hw, 4902 + [CLKID_MALI_0_SEL] = &g12a_mali_0_sel.hw, 4903 + [CLKID_MALI_0_DIV] = &g12a_mali_0_div.hw, 4904 + [CLKID_MALI_0] = &g12a_mali_0.hw, 4905 + [CLKID_MALI_1_SEL] = &g12a_mali_1_sel.hw, 4906 + [CLKID_MALI_1_DIV] = &g12a_mali_1_div.hw, 4907 + [CLKID_MALI_1] = &g12a_mali_1.hw, 4908 + [CLKID_MALI] = &g12a_mali.hw, 4909 + [CLKID_MPLL_50M_DIV] = &g12a_mpll_50m_div.hw, 4910 + [CLKID_MPLL_50M] = &g12a_mpll_50m.hw, 4911 + [CLKID_SYS_PLL_DIV16_EN] = &g12a_sys_pll_div16_en.hw, 4912 + [CLKID_SYS_PLL_DIV16] = &g12a_sys_pll_div16.hw, 4913 + [CLKID_CPU_CLK_DYN0_SEL] = &g12a_cpu_clk_premux0.hw, 4914 + [CLKID_CPU_CLK_DYN0_DIV] = &g12a_cpu_clk_mux0_div.hw, 4915 + [CLKID_CPU_CLK_DYN0] = &g12a_cpu_clk_postmux0.hw, 4916 + [CLKID_CPU_CLK_DYN1_SEL] = &g12a_cpu_clk_premux1.hw, 4917 + [CLKID_CPU_CLK_DYN1_DIV] = &g12a_cpu_clk_mux1_div.hw, 4918 + [CLKID_CPU_CLK_DYN1] = &g12a_cpu_clk_postmux1.hw, 4919 + [CLKID_CPU_CLK_DYN] = &g12a_cpu_clk_dyn.hw, 4920 + [CLKID_CPU_CLK] = &g12a_cpu_clk.hw, 4921 + [CLKID_CPU_CLK_DIV16_EN] = &g12a_cpu_clk_div16_en.hw, 4922 + [CLKID_CPU_CLK_DIV16] = &g12a_cpu_clk_div16.hw, 4923 + [CLKID_CPU_CLK_APB_DIV] = &g12a_cpu_clk_apb_div.hw, 4924 + [CLKID_CPU_CLK_APB] = &g12a_cpu_clk_apb.hw, 4925 + [CLKID_CPU_CLK_ATB_DIV] = &g12a_cpu_clk_atb_div.hw, 4926 + [CLKID_CPU_CLK_ATB] = &g12a_cpu_clk_atb.hw, 4927 + [CLKID_CPU_CLK_AXI_DIV] = &g12a_cpu_clk_axi_div.hw, 4928 + [CLKID_CPU_CLK_AXI] = &g12a_cpu_clk_axi.hw, 4929 + [CLKID_CPU_CLK_TRACE_DIV] = &g12a_cpu_clk_trace_div.hw, 4930 + [CLKID_CPU_CLK_TRACE] = &g12a_cpu_clk_trace.hw, 4931 + [CLKID_PCIE_PLL_DCO] = &g12a_pcie_pll_dco.hw, 4932 + [CLKID_PCIE_PLL_DCO_DIV2] = &g12a_pcie_pll_dco_div2.hw, 4933 + [CLKID_PCIE_PLL_OD] = &g12a_pcie_pll_od.hw, 4934 + [CLKID_PCIE_PLL] = &g12a_pcie_pll.hw, 4935 + [CLKID_VDEC_1_SEL] = &g12a_vdec_1_sel.hw, 4936 + [CLKID_VDEC_1_DIV] = &g12a_vdec_1_div.hw, 4937 + [CLKID_VDEC_1] = &g12a_vdec_1.hw, 4938 + [CLKID_VDEC_HEVC_SEL] = &g12a_vdec_hevc_sel.hw, 4939 + [CLKID_VDEC_HEVC_DIV] = &g12a_vdec_hevc_div.hw, 4940 + [CLKID_VDEC_HEVC] = &g12a_vdec_hevc.hw, 4941 + [CLKID_VDEC_HEVCF_SEL] = &g12a_vdec_hevcf_sel.hw, 4942 + [CLKID_VDEC_HEVCF_DIV] = &g12a_vdec_hevcf_div.hw, 4943 + [CLKID_VDEC_HEVCF] = &g12a_vdec_hevcf.hw, 4944 + [CLKID_TS_DIV] = &g12a_ts_div.hw, 4945 + [CLKID_TS] = &g12a_ts.hw, 4946 + [CLKID_GP1_PLL_DCO] = &sm1_gp1_pll_dco.hw, 4947 + [CLKID_GP1_PLL] = &sm1_gp1_pll.hw, 4948 + [CLKID_DSU_CLK_DYN0_SEL] = &sm1_dsu_clk_premux0.hw, 4949 + [CLKID_DSU_CLK_DYN0_DIV] = &sm1_dsu_clk_premux1.hw, 4950 + [CLKID_DSU_CLK_DYN0] = &sm1_dsu_clk_mux0_div.hw, 4951 + [CLKID_DSU_CLK_DYN1_SEL] = &sm1_dsu_clk_postmux0.hw, 4952 + [CLKID_DSU_CLK_DYN1_DIV] = &sm1_dsu_clk_mux1_div.hw, 4953 + [CLKID_DSU_CLK_DYN1] = &sm1_dsu_clk_postmux1.hw, 4954 + [CLKID_DSU_CLK_DYN] = &sm1_dsu_clk_dyn.hw, 4955 + [CLKID_DSU_CLK_FINAL] = &sm1_dsu_final_clk.hw, 4956 + [CLKID_DSU_CLK] = &sm1_dsu_clk.hw, 4957 + [CLKID_CPU1_CLK] = &sm1_cpu1_clk.hw, 4958 + [CLKID_CPU2_CLK] = &sm1_cpu2_clk.hw, 4959 + [CLKID_CPU3_CLK] = &sm1_cpu3_clk.hw, 4960 + [CLKID_SPICC0_SCLK_SEL] = &g12a_spicc0_sclk_sel.hw, 4961 + [CLKID_SPICC0_SCLK_DIV] = &g12a_spicc0_sclk_div.hw, 4962 + [CLKID_SPICC0_SCLK] = &g12a_spicc0_sclk.hw, 4963 + [CLKID_SPICC1_SCLK_SEL] = &g12a_spicc1_sclk_sel.hw, 4964 + [CLKID_SPICC1_SCLK_DIV] = &g12a_spicc1_sclk_div.hw, 4965 + [CLKID_SPICC1_SCLK] = &g12a_spicc1_sclk.hw, 4966 + [CLKID_NNA_AXI_CLK_SEL] = &sm1_nna_axi_clk_sel.hw, 4967 + [CLKID_NNA_AXI_CLK_DIV] = &sm1_nna_axi_clk_div.hw, 4968 + [CLKID_NNA_AXI_CLK] = &sm1_nna_axi_clk.hw, 4969 + [CLKID_NNA_CORE_CLK_SEL] = &sm1_nna_core_clk_sel.hw, 4970 + [CLKID_NNA_CORE_CLK_DIV] = &sm1_nna_core_clk_div.hw, 4971 + [CLKID_NNA_CORE_CLK] = &sm1_nna_core_clk.hw, 4972 + [CLKID_MIPI_DSI_PXCLK_SEL] = &g12a_mipi_dsi_pxclk_sel.hw, 4973 + [CLKID_MIPI_DSI_PXCLK_DIV] = &g12a_mipi_dsi_pxclk_div.hw, 4974 + [CLKID_MIPI_DSI_PXCLK] = &g12a_mipi_dsi_pxclk.hw, 4989 4975 }; 4990 4976 4991 4977 /* Convenience table to populate regmap in .probe */ ··· 5264 5274 5265 5275 static int meson_g12b_dvfs_setup(struct platform_device *pdev) 5266 5276 { 5267 - struct clk_hw **hws = g12b_hw_onecell_data.hws; 5277 + struct clk_hw **hws = g12b_hw_clks; 5268 5278 struct device *dev = &pdev->dev; 5269 5279 struct clk *notifier_clk; 5270 5280 struct clk_hw *xtal; ··· 5341 5351 5342 5352 static int meson_g12a_dvfs_setup(struct platform_device *pdev) 5343 5353 { 5344 - struct clk_hw **hws = g12a_hw_onecell_data.hws; 5354 + struct clk_hw **hws = g12a_hw_clks; 5345 5355 struct device *dev = &pdev->dev; 5346 5356 struct clk *notifier_clk; 5347 5357 int ret; ··· 5403 5413 .eeclkc_data = { 5404 5414 .regmap_clks = g12a_clk_regmaps, 5405 5415 .regmap_clk_num = ARRAY_SIZE(g12a_clk_regmaps), 5406 - .hw_onecell_data = &g12a_hw_onecell_data, 5416 + .hw_clks = { 5417 + .hws = g12a_hw_clks, 5418 + .num = ARRAY_SIZE(g12a_hw_clks), 5419 + }, 5407 5420 .init_regs = g12a_init_regs, 5408 5421 .init_count = ARRAY_SIZE(g12a_init_regs), 5409 5422 }, ··· 5417 5424 .eeclkc_data = { 5418 5425 .regmap_clks = g12a_clk_regmaps, 5419 5426 .regmap_clk_num = ARRAY_SIZE(g12a_clk_regmaps), 5420 - .hw_onecell_data = &g12b_hw_onecell_data, 5427 + .hw_clks = { 5428 + .hws = g12b_hw_clks, 5429 + .num = ARRAY_SIZE(g12b_hw_clks), 5430 + }, 5421 5431 }, 5422 5432 .dvfs_setup = meson_g12b_dvfs_setup, 5423 5433 }; ··· 5429 5433 .eeclkc_data = { 5430 5434 .regmap_clks = g12a_clk_regmaps, 5431 5435 .regmap_clk_num = ARRAY_SIZE(g12a_clk_regmaps), 5432 - .hw_onecell_data = &sm1_hw_onecell_data, 5436 + .hw_clks = { 5437 + .hws = sm1_hw_clks, 5438 + .num = ARRAY_SIZE(sm1_hw_clks), 5439 + }, 5433 5440 }, 5434 5441 .dvfs_setup = meson_g12a_dvfs_setup, 5435 5442 };
-145
drivers/clk/meson/g12a.h
··· 126 126 #define HHI_SYS1_PLL_CNTL5 0x394 127 127 #define HHI_SYS1_PLL_CNTL6 0x398 128 128 129 - /* 130 - * CLKID index values 131 - * 132 - * These indices are entirely contrived and do not map onto the hardware. 133 - * It has now been decided to expose everything by default in the DT header: 134 - * include/dt-bindings/clock/g12a-clkc.h. Only the clocks ids we don't want 135 - * to expose, such as the internal muxes and dividers of composite clocks, 136 - * will remain defined here. 137 - */ 138 - #define CLKID_MPEG_SEL 8 139 - #define CLKID_MPEG_DIV 9 140 - #define CLKID_SD_EMMC_A_CLK0_SEL 63 141 - #define CLKID_SD_EMMC_A_CLK0_DIV 64 142 - #define CLKID_SD_EMMC_B_CLK0_SEL 65 143 - #define CLKID_SD_EMMC_B_CLK0_DIV 66 144 - #define CLKID_SD_EMMC_C_CLK0_SEL 67 145 - #define CLKID_SD_EMMC_C_CLK0_DIV 68 146 - #define CLKID_MPLL0_DIV 69 147 - #define CLKID_MPLL1_DIV 70 148 - #define CLKID_MPLL2_DIV 71 149 - #define CLKID_MPLL3_DIV 72 150 - #define CLKID_MPLL_PREDIV 73 151 - #define CLKID_FCLK_DIV2_DIV 75 152 - #define CLKID_FCLK_DIV3_DIV 76 153 - #define CLKID_FCLK_DIV4_DIV 77 154 - #define CLKID_FCLK_DIV5_DIV 78 155 - #define CLKID_FCLK_DIV7_DIV 79 156 - #define CLKID_FCLK_DIV2P5_DIV 100 157 - #define CLKID_FIXED_PLL_DCO 101 158 - #define CLKID_SYS_PLL_DCO 102 159 - #define CLKID_GP0_PLL_DCO 103 160 - #define CLKID_HIFI_PLL_DCO 104 161 - #define CLKID_VPU_0_DIV 111 162 - #define CLKID_VPU_1_DIV 114 163 - #define CLKID_VAPB_0_DIV 118 164 - #define CLKID_VAPB_1_DIV 121 165 - #define CLKID_HDMI_PLL_DCO 125 166 - #define CLKID_HDMI_PLL_OD 126 167 - #define CLKID_HDMI_PLL_OD2 127 168 - #define CLKID_VID_PLL_SEL 130 169 - #define CLKID_VID_PLL_DIV 131 170 - #define CLKID_VCLK_SEL 132 171 - #define CLKID_VCLK2_SEL 133 172 - #define CLKID_VCLK_INPUT 134 173 - #define CLKID_VCLK2_INPUT 135 174 - #define CLKID_VCLK_DIV 136 175 - #define CLKID_VCLK2_DIV 137 176 - #define CLKID_VCLK_DIV2_EN 140 177 - #define CLKID_VCLK_DIV4_EN 141 178 - #define CLKID_VCLK_DIV6_EN 142 179 - #define CLKID_VCLK_DIV12_EN 143 180 - #define CLKID_VCLK2_DIV2_EN 144 181 - #define CLKID_VCLK2_DIV4_EN 145 182 - #define CLKID_VCLK2_DIV6_EN 146 183 - #define CLKID_VCLK2_DIV12_EN 147 184 - #define CLKID_CTS_ENCI_SEL 158 185 - #define CLKID_CTS_ENCP_SEL 159 186 - #define CLKID_CTS_VDAC_SEL 160 187 - #define CLKID_HDMI_TX_SEL 161 188 - #define CLKID_HDMI_SEL 166 189 - #define CLKID_HDMI_DIV 167 190 - #define CLKID_MALI_0_DIV 170 191 - #define CLKID_MALI_1_DIV 173 192 - #define CLKID_MPLL_50M_DIV 176 193 - #define CLKID_SYS_PLL_DIV16_EN 178 194 - #define CLKID_SYS_PLL_DIV16 179 195 - #define CLKID_CPU_CLK_DYN0_SEL 180 196 - #define CLKID_CPU_CLK_DYN0_DIV 181 197 - #define CLKID_CPU_CLK_DYN0 182 198 - #define CLKID_CPU_CLK_DYN1_SEL 183 199 - #define CLKID_CPU_CLK_DYN1_DIV 184 200 - #define CLKID_CPU_CLK_DYN1 185 201 - #define CLKID_CPU_CLK_DYN 186 202 - #define CLKID_CPU_CLK_DIV16_EN 188 203 - #define CLKID_CPU_CLK_DIV16 189 204 - #define CLKID_CPU_CLK_APB_DIV 190 205 - #define CLKID_CPU_CLK_APB 191 206 - #define CLKID_CPU_CLK_ATB_DIV 192 207 - #define CLKID_CPU_CLK_ATB 193 208 - #define CLKID_CPU_CLK_AXI_DIV 194 209 - #define CLKID_CPU_CLK_AXI 195 210 - #define CLKID_CPU_CLK_TRACE_DIV 196 211 - #define CLKID_CPU_CLK_TRACE 197 212 - #define CLKID_PCIE_PLL_DCO 198 213 - #define CLKID_PCIE_PLL_DCO_DIV2 199 214 - #define CLKID_PCIE_PLL_OD 200 215 - #define CLKID_VDEC_1_SEL 202 216 - #define CLKID_VDEC_1_DIV 203 217 - #define CLKID_VDEC_HEVC_SEL 205 218 - #define CLKID_VDEC_HEVC_DIV 206 219 - #define CLKID_VDEC_HEVCF_SEL 208 220 - #define CLKID_VDEC_HEVCF_DIV 209 221 - #define CLKID_TS_DIV 211 222 - #define CLKID_SYS1_PLL_DCO 213 223 - #define CLKID_SYS1_PLL 214 224 - #define CLKID_SYS1_PLL_DIV16_EN 215 225 - #define CLKID_SYS1_PLL_DIV16 216 226 - #define CLKID_CPUB_CLK_DYN0_SEL 217 227 - #define CLKID_CPUB_CLK_DYN0_DIV 218 228 - #define CLKID_CPUB_CLK_DYN0 219 229 - #define CLKID_CPUB_CLK_DYN1_SEL 220 230 - #define CLKID_CPUB_CLK_DYN1_DIV 221 231 - #define CLKID_CPUB_CLK_DYN1 222 232 - #define CLKID_CPUB_CLK_DYN 223 233 - #define CLKID_CPUB_CLK_DIV16_EN 225 234 - #define CLKID_CPUB_CLK_DIV16 226 235 - #define CLKID_CPUB_CLK_DIV2 227 236 - #define CLKID_CPUB_CLK_DIV3 228 237 - #define CLKID_CPUB_CLK_DIV4 229 238 - #define CLKID_CPUB_CLK_DIV5 230 239 - #define CLKID_CPUB_CLK_DIV6 231 240 - #define CLKID_CPUB_CLK_DIV7 232 241 - #define CLKID_CPUB_CLK_DIV8 233 242 - #define CLKID_CPUB_CLK_APB_SEL 234 243 - #define CLKID_CPUB_CLK_APB 235 244 - #define CLKID_CPUB_CLK_ATB_SEL 236 245 - #define CLKID_CPUB_CLK_ATB 237 246 - #define CLKID_CPUB_CLK_AXI_SEL 238 247 - #define CLKID_CPUB_CLK_AXI 239 248 - #define CLKID_CPUB_CLK_TRACE_SEL 240 249 - #define CLKID_CPUB_CLK_TRACE 241 250 - #define CLKID_GP1_PLL_DCO 242 251 - #define CLKID_DSU_CLK_DYN0_SEL 244 252 - #define CLKID_DSU_CLK_DYN0_DIV 245 253 - #define CLKID_DSU_CLK_DYN0 246 254 - #define CLKID_DSU_CLK_DYN1_SEL 247 255 - #define CLKID_DSU_CLK_DYN1_DIV 248 256 - #define CLKID_DSU_CLK_DYN1 249 257 - #define CLKID_DSU_CLK_DYN 250 258 - #define CLKID_DSU_CLK_FINAL 251 259 - #define CLKID_SPICC0_SCLK_SEL 256 260 - #define CLKID_SPICC0_SCLK_DIV 257 261 - #define CLKID_SPICC1_SCLK_SEL 259 262 - #define CLKID_SPICC1_SCLK_DIV 260 263 - #define CLKID_NNA_AXI_CLK_SEL 262 264 - #define CLKID_NNA_AXI_CLK_DIV 263 265 - #define CLKID_NNA_CORE_CLK_SEL 265 266 - #define CLKID_NNA_CORE_CLK_DIV 266 267 - #define CLKID_MIPI_DSI_PXCLK_DIV 268 268 - 269 - #define NR_CLKS 271 270 - 271 - /* include the CLKIDs that have been made part of the DT binding */ 272 - #include <dt-bindings/clock/g12a-clkc.h> 273 - 274 129 #endif /* __G12A_H */
+8 -6
drivers/clk/meson/gxbb-aoclk.c
··· 7 7 #include <linux/mfd/syscon.h> 8 8 #include <linux/module.h> 9 9 #include "meson-aoclk.h" 10 - #include "gxbb-aoclk.h" 11 10 12 11 #include "clk-regmap.h" 13 12 #include "clk-dualdiv.h" 13 + 14 + #include <dt-bindings/clock/gxbb-aoclkc.h> 15 + #include <dt-bindings/reset/gxbb-aoclkc.h> 14 16 15 17 /* AO Configuration Clock registers offsets */ 16 18 #define AO_RTI_PWR_CNTL_REG1 0x0c ··· 254 252 &ao_cts_cec, 255 253 }; 256 254 257 - static const struct clk_hw_onecell_data gxbb_aoclk_onecell_data = { 258 - .hws = { 255 + static struct clk_hw *gxbb_aoclk_hw_clks[] = { 259 256 [CLKID_AO_REMOTE] = &remote_ao.hw, 260 257 [CLKID_AO_I2C_MASTER] = &i2c_master_ao.hw, 261 258 [CLKID_AO_I2C_SLAVE] = &i2c_slave_ao.hw, ··· 269 268 [CLKID_AO_32K] = &ao_32k.hw, 270 269 [CLKID_AO_CTS_RTC_OSCIN] = &ao_cts_rtc_oscin.hw, 271 270 [CLKID_AO_CLK81] = &ao_clk81.hw, 272 - }, 273 - .num = NR_CLKS, 274 271 }; 275 272 276 273 static const struct meson_aoclk_data gxbb_aoclkc_data = { ··· 277 278 .reset = gxbb_aoclk_reset, 278 279 .num_clks = ARRAY_SIZE(gxbb_aoclk), 279 280 .clks = gxbb_aoclk, 280 - .hw_data = &gxbb_aoclk_onecell_data, 281 + .hw_clks = { 282 + .hws = gxbb_aoclk_hw_clks, 283 + .num = ARRAY_SIZE(gxbb_aoclk_hw_clks), 284 + }, 281 285 }; 282 286 283 287 static const struct of_device_id gxbb_aoclkc_match_table[] = {
-15
drivers/clk/meson/gxbb-aoclk.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0+ */ 2 - /* 3 - * Copyright (c) 2017 BayLibre, SAS 4 - * Author: Neil Armstrong <narmstrong@baylibre.com> 5 - */ 6 - 7 - #ifndef __GXBB_AOCLKC_H 8 - #define __GXBB_AOCLKC_H 9 - 10 - #define NR_CLKS 14 11 - 12 - #include <dt-bindings/clock/gxbb-aoclkc.h> 13 - #include <dt-bindings/reset/gxbb-aoclkc.h> 14 - 15 - #endif /* __GXBB_AOCLKC_H */
+423 -423
drivers/clk/meson/gxbb.c
··· 6 6 7 7 #include <linux/clk-provider.h> 8 8 #include <linux/init.h> 9 - #include <linux/of_device.h> 9 + #include <linux/mod_devicetable.h> 10 10 #include <linux/platform_device.h> 11 11 #include <linux/module.h> 12 12 ··· 16 16 #include "clk-mpll.h" 17 17 #include "meson-eeclk.h" 18 18 #include "vid-pll-div.h" 19 + 20 + #include <dt-bindings/clock/gxbb-clkc.h> 19 21 20 22 static DEFINE_SPINLOCK(meson_clk_lock); 21 23 ··· 2730 2728 2731 2729 /* Array of all clocks provided by this provider */ 2732 2730 2733 - static struct clk_hw_onecell_data gxbb_hw_onecell_data = { 2734 - .hws = { 2735 - [CLKID_SYS_PLL] = &gxbb_sys_pll.hw, 2736 - [CLKID_HDMI_PLL] = &gxbb_hdmi_pll.hw, 2737 - [CLKID_FIXED_PLL] = &gxbb_fixed_pll.hw, 2738 - [CLKID_FCLK_DIV2] = &gxbb_fclk_div2.hw, 2739 - [CLKID_FCLK_DIV3] = &gxbb_fclk_div3.hw, 2740 - [CLKID_FCLK_DIV4] = &gxbb_fclk_div4.hw, 2741 - [CLKID_FCLK_DIV5] = &gxbb_fclk_div5.hw, 2742 - [CLKID_FCLK_DIV7] = &gxbb_fclk_div7.hw, 2743 - [CLKID_GP0_PLL] = &gxbb_gp0_pll.hw, 2744 - [CLKID_MPEG_SEL] = &gxbb_mpeg_clk_sel.hw, 2745 - [CLKID_MPEG_DIV] = &gxbb_mpeg_clk_div.hw, 2746 - [CLKID_CLK81] = &gxbb_clk81.hw, 2747 - [CLKID_MPLL0] = &gxbb_mpll0.hw, 2748 - [CLKID_MPLL1] = &gxbb_mpll1.hw, 2749 - [CLKID_MPLL2] = &gxbb_mpll2.hw, 2750 - [CLKID_DDR] = &gxbb_ddr.hw, 2751 - [CLKID_DOS] = &gxbb_dos.hw, 2752 - [CLKID_ISA] = &gxbb_isa.hw, 2753 - [CLKID_PL301] = &gxbb_pl301.hw, 2754 - [CLKID_PERIPHS] = &gxbb_periphs.hw, 2755 - [CLKID_SPICC] = &gxbb_spicc.hw, 2756 - [CLKID_I2C] = &gxbb_i2c.hw, 2757 - [CLKID_SAR_ADC] = &gxbb_sar_adc.hw, 2758 - [CLKID_SMART_CARD] = &gxbb_smart_card.hw, 2759 - [CLKID_RNG0] = &gxbb_rng0.hw, 2760 - [CLKID_UART0] = &gxbb_uart0.hw, 2761 - [CLKID_SDHC] = &gxbb_sdhc.hw, 2762 - [CLKID_STREAM] = &gxbb_stream.hw, 2763 - [CLKID_ASYNC_FIFO] = &gxbb_async_fifo.hw, 2764 - [CLKID_SDIO] = &gxbb_sdio.hw, 2765 - [CLKID_ABUF] = &gxbb_abuf.hw, 2766 - [CLKID_HIU_IFACE] = &gxbb_hiu_iface.hw, 2767 - [CLKID_ASSIST_MISC] = &gxbb_assist_misc.hw, 2768 - [CLKID_SPI] = &gxbb_spi.hw, 2769 - [CLKID_I2S_SPDIF] = &gxbb_i2s_spdif.hw, 2770 - [CLKID_ETH] = &gxbb_eth.hw, 2771 - [CLKID_DEMUX] = &gxbb_demux.hw, 2772 - [CLKID_AIU_GLUE] = &gxbb_aiu_glue.hw, 2773 - [CLKID_IEC958] = &gxbb_iec958.hw, 2774 - [CLKID_I2S_OUT] = &gxbb_i2s_out.hw, 2775 - [CLKID_AMCLK] = &gxbb_amclk.hw, 2776 - [CLKID_AIFIFO2] = &gxbb_aififo2.hw, 2777 - [CLKID_MIXER] = &gxbb_mixer.hw, 2778 - [CLKID_MIXER_IFACE] = &gxbb_mixer_iface.hw, 2779 - [CLKID_ADC] = &gxbb_adc.hw, 2780 - [CLKID_BLKMV] = &gxbb_blkmv.hw, 2781 - [CLKID_AIU] = &gxbb_aiu.hw, 2782 - [CLKID_UART1] = &gxbb_uart1.hw, 2783 - [CLKID_G2D] = &gxbb_g2d.hw, 2784 - [CLKID_USB0] = &gxbb_usb0.hw, 2785 - [CLKID_USB1] = &gxbb_usb1.hw, 2786 - [CLKID_RESET] = &gxbb_reset.hw, 2787 - [CLKID_NAND] = &gxbb_nand.hw, 2788 - [CLKID_DOS_PARSER] = &gxbb_dos_parser.hw, 2789 - [CLKID_USB] = &gxbb_usb.hw, 2790 - [CLKID_VDIN1] = &gxbb_vdin1.hw, 2791 - [CLKID_AHB_ARB0] = &gxbb_ahb_arb0.hw, 2792 - [CLKID_EFUSE] = &gxbb_efuse.hw, 2793 - [CLKID_BOOT_ROM] = &gxbb_boot_rom.hw, 2794 - [CLKID_AHB_DATA_BUS] = &gxbb_ahb_data_bus.hw, 2795 - [CLKID_AHB_CTRL_BUS] = &gxbb_ahb_ctrl_bus.hw, 2796 - [CLKID_HDMI_INTR_SYNC] = &gxbb_hdmi_intr_sync.hw, 2797 - [CLKID_HDMI_PCLK] = &gxbb_hdmi_pclk.hw, 2798 - [CLKID_USB1_DDR_BRIDGE] = &gxbb_usb1_ddr_bridge.hw, 2799 - [CLKID_USB0_DDR_BRIDGE] = &gxbb_usb0_ddr_bridge.hw, 2800 - [CLKID_MMC_PCLK] = &gxbb_mmc_pclk.hw, 2801 - [CLKID_DVIN] = &gxbb_dvin.hw, 2802 - [CLKID_UART2] = &gxbb_uart2.hw, 2803 - [CLKID_SANA] = &gxbb_sana.hw, 2804 - [CLKID_VPU_INTR] = &gxbb_vpu_intr.hw, 2805 - [CLKID_SEC_AHB_AHB3_BRIDGE] = &gxbb_sec_ahb_ahb3_bridge.hw, 2806 - [CLKID_CLK81_A53] = &gxbb_clk81_a53.hw, 2807 - [CLKID_VCLK2_VENCI0] = &gxbb_vclk2_venci0.hw, 2808 - [CLKID_VCLK2_VENCI1] = &gxbb_vclk2_venci1.hw, 2809 - [CLKID_VCLK2_VENCP0] = &gxbb_vclk2_vencp0.hw, 2810 - [CLKID_VCLK2_VENCP1] = &gxbb_vclk2_vencp1.hw, 2811 - [CLKID_GCLK_VENCI_INT0] = &gxbb_gclk_venci_int0.hw, 2812 - [CLKID_GCLK_VENCI_INT] = &gxbb_gclk_vencp_int.hw, 2813 - [CLKID_DAC_CLK] = &gxbb_dac_clk.hw, 2814 - [CLKID_AOCLK_GATE] = &gxbb_aoclk_gate.hw, 2815 - [CLKID_IEC958_GATE] = &gxbb_iec958_gate.hw, 2816 - [CLKID_ENC480P] = &gxbb_enc480p.hw, 2817 - [CLKID_RNG1] = &gxbb_rng1.hw, 2818 - [CLKID_GCLK_VENCI_INT1] = &gxbb_gclk_venci_int1.hw, 2819 - [CLKID_VCLK2_VENCLMCC] = &gxbb_vclk2_venclmcc.hw, 2820 - [CLKID_VCLK2_VENCL] = &gxbb_vclk2_vencl.hw, 2821 - [CLKID_VCLK_OTHER] = &gxbb_vclk_other.hw, 2822 - [CLKID_EDP] = &gxbb_edp.hw, 2823 - [CLKID_AO_MEDIA_CPU] = &gxbb_ao_media_cpu.hw, 2824 - [CLKID_AO_AHB_SRAM] = &gxbb_ao_ahb_sram.hw, 2825 - [CLKID_AO_AHB_BUS] = &gxbb_ao_ahb_bus.hw, 2826 - [CLKID_AO_IFACE] = &gxbb_ao_iface.hw, 2827 - [CLKID_AO_I2C] = &gxbb_ao_i2c.hw, 2828 - [CLKID_SD_EMMC_A] = &gxbb_emmc_a.hw, 2829 - [CLKID_SD_EMMC_B] = &gxbb_emmc_b.hw, 2830 - [CLKID_SD_EMMC_C] = &gxbb_emmc_c.hw, 2831 - [CLKID_SAR_ADC_CLK] = &gxbb_sar_adc_clk.hw, 2832 - [CLKID_SAR_ADC_SEL] = &gxbb_sar_adc_clk_sel.hw, 2833 - [CLKID_SAR_ADC_DIV] = &gxbb_sar_adc_clk_div.hw, 2834 - [CLKID_MALI_0_SEL] = &gxbb_mali_0_sel.hw, 2835 - [CLKID_MALI_0_DIV] = &gxbb_mali_0_div.hw, 2836 - [CLKID_MALI_0] = &gxbb_mali_0.hw, 2837 - [CLKID_MALI_1_SEL] = &gxbb_mali_1_sel.hw, 2838 - [CLKID_MALI_1_DIV] = &gxbb_mali_1_div.hw, 2839 - [CLKID_MALI_1] = &gxbb_mali_1.hw, 2840 - [CLKID_MALI] = &gxbb_mali.hw, 2841 - [CLKID_CTS_AMCLK] = &gxbb_cts_amclk.hw, 2842 - [CLKID_CTS_AMCLK_SEL] = &gxbb_cts_amclk_sel.hw, 2843 - [CLKID_CTS_AMCLK_DIV] = &gxbb_cts_amclk_div.hw, 2844 - [CLKID_CTS_MCLK_I958] = &gxbb_cts_mclk_i958.hw, 2845 - [CLKID_CTS_MCLK_I958_SEL] = &gxbb_cts_mclk_i958_sel.hw, 2846 - [CLKID_CTS_MCLK_I958_DIV] = &gxbb_cts_mclk_i958_div.hw, 2847 - [CLKID_CTS_I958] = &gxbb_cts_i958.hw, 2848 - [CLKID_32K_CLK] = &gxbb_32k_clk.hw, 2849 - [CLKID_32K_CLK_SEL] = &gxbb_32k_clk_sel.hw, 2850 - [CLKID_32K_CLK_DIV] = &gxbb_32k_clk_div.hw, 2851 - [CLKID_SD_EMMC_A_CLK0_SEL] = &gxbb_sd_emmc_a_clk0_sel.hw, 2852 - [CLKID_SD_EMMC_A_CLK0_DIV] = &gxbb_sd_emmc_a_clk0_div.hw, 2853 - [CLKID_SD_EMMC_A_CLK0] = &gxbb_sd_emmc_a_clk0.hw, 2854 - [CLKID_SD_EMMC_B_CLK0_SEL] = &gxbb_sd_emmc_b_clk0_sel.hw, 2855 - [CLKID_SD_EMMC_B_CLK0_DIV] = &gxbb_sd_emmc_b_clk0_div.hw, 2856 - [CLKID_SD_EMMC_B_CLK0] = &gxbb_sd_emmc_b_clk0.hw, 2857 - [CLKID_SD_EMMC_C_CLK0_SEL] = &gxbb_sd_emmc_c_clk0_sel.hw, 2858 - [CLKID_SD_EMMC_C_CLK0_DIV] = &gxbb_sd_emmc_c_clk0_div.hw, 2859 - [CLKID_SD_EMMC_C_CLK0] = &gxbb_sd_emmc_c_clk0.hw, 2860 - [CLKID_VPU_0_SEL] = &gxbb_vpu_0_sel.hw, 2861 - [CLKID_VPU_0_DIV] = &gxbb_vpu_0_div.hw, 2862 - [CLKID_VPU_0] = &gxbb_vpu_0.hw, 2863 - [CLKID_VPU_1_SEL] = &gxbb_vpu_1_sel.hw, 2864 - [CLKID_VPU_1_DIV] = &gxbb_vpu_1_div.hw, 2865 - [CLKID_VPU_1] = &gxbb_vpu_1.hw, 2866 - [CLKID_VPU] = &gxbb_vpu.hw, 2867 - [CLKID_VAPB_0_SEL] = &gxbb_vapb_0_sel.hw, 2868 - [CLKID_VAPB_0_DIV] = &gxbb_vapb_0_div.hw, 2869 - [CLKID_VAPB_0] = &gxbb_vapb_0.hw, 2870 - [CLKID_VAPB_1_SEL] = &gxbb_vapb_1_sel.hw, 2871 - [CLKID_VAPB_1_DIV] = &gxbb_vapb_1_div.hw, 2872 - [CLKID_VAPB_1] = &gxbb_vapb_1.hw, 2873 - [CLKID_VAPB_SEL] = &gxbb_vapb_sel.hw, 2874 - [CLKID_VAPB] = &gxbb_vapb.hw, 2875 - [CLKID_HDMI_PLL_PRE_MULT] = &gxbb_hdmi_pll_pre_mult.hw, 2876 - [CLKID_MPLL0_DIV] = &gxbb_mpll0_div.hw, 2877 - [CLKID_MPLL1_DIV] = &gxbb_mpll1_div.hw, 2878 - [CLKID_MPLL2_DIV] = &gxbb_mpll2_div.hw, 2879 - [CLKID_MPLL_PREDIV] = &gxbb_mpll_prediv.hw, 2880 - [CLKID_FCLK_DIV2_DIV] = &gxbb_fclk_div2_div.hw, 2881 - [CLKID_FCLK_DIV3_DIV] = &gxbb_fclk_div3_div.hw, 2882 - [CLKID_FCLK_DIV4_DIV] = &gxbb_fclk_div4_div.hw, 2883 - [CLKID_FCLK_DIV5_DIV] = &gxbb_fclk_div5_div.hw, 2884 - [CLKID_FCLK_DIV7_DIV] = &gxbb_fclk_div7_div.hw, 2885 - [CLKID_VDEC_1_SEL] = &gxbb_vdec_1_sel.hw, 2886 - [CLKID_VDEC_1_DIV] = &gxbb_vdec_1_div.hw, 2887 - [CLKID_VDEC_1] = &gxbb_vdec_1.hw, 2888 - [CLKID_VDEC_HEVC_SEL] = &gxbb_vdec_hevc_sel.hw, 2889 - [CLKID_VDEC_HEVC_DIV] = &gxbb_vdec_hevc_div.hw, 2890 - [CLKID_VDEC_HEVC] = &gxbb_vdec_hevc.hw, 2891 - [CLKID_GEN_CLK_SEL] = &gxbb_gen_clk_sel.hw, 2892 - [CLKID_GEN_CLK_DIV] = &gxbb_gen_clk_div.hw, 2893 - [CLKID_GEN_CLK] = &gxbb_gen_clk.hw, 2894 - [CLKID_FIXED_PLL_DCO] = &gxbb_fixed_pll_dco.hw, 2895 - [CLKID_HDMI_PLL_DCO] = &gxbb_hdmi_pll_dco.hw, 2896 - [CLKID_HDMI_PLL_OD] = &gxbb_hdmi_pll_od.hw, 2897 - [CLKID_HDMI_PLL_OD2] = &gxbb_hdmi_pll_od2.hw, 2898 - [CLKID_SYS_PLL_DCO] = &gxbb_sys_pll_dco.hw, 2899 - [CLKID_GP0_PLL_DCO] = &gxbb_gp0_pll_dco.hw, 2900 - [CLKID_VID_PLL_DIV] = &gxbb_vid_pll_div.hw, 2901 - [CLKID_VID_PLL_SEL] = &gxbb_vid_pll_sel.hw, 2902 - [CLKID_VID_PLL] = &gxbb_vid_pll.hw, 2903 - [CLKID_VCLK_SEL] = &gxbb_vclk_sel.hw, 2904 - [CLKID_VCLK2_SEL] = &gxbb_vclk2_sel.hw, 2905 - [CLKID_VCLK_INPUT] = &gxbb_vclk_input.hw, 2906 - [CLKID_VCLK2_INPUT] = &gxbb_vclk2_input.hw, 2907 - [CLKID_VCLK_DIV] = &gxbb_vclk_div.hw, 2908 - [CLKID_VCLK2_DIV] = &gxbb_vclk2_div.hw, 2909 - [CLKID_VCLK] = &gxbb_vclk.hw, 2910 - [CLKID_VCLK2] = &gxbb_vclk2.hw, 2911 - [CLKID_VCLK_DIV1] = &gxbb_vclk_div1.hw, 2912 - [CLKID_VCLK_DIV2_EN] = &gxbb_vclk_div2_en.hw, 2913 - [CLKID_VCLK_DIV2] = &gxbb_vclk_div2.hw, 2914 - [CLKID_VCLK_DIV4_EN] = &gxbb_vclk_div4_en.hw, 2915 - [CLKID_VCLK_DIV4] = &gxbb_vclk_div4.hw, 2916 - [CLKID_VCLK_DIV6_EN] = &gxbb_vclk_div6_en.hw, 2917 - [CLKID_VCLK_DIV6] = &gxbb_vclk_div6.hw, 2918 - [CLKID_VCLK_DIV12_EN] = &gxbb_vclk_div12_en.hw, 2919 - [CLKID_VCLK_DIV12] = &gxbb_vclk_div12.hw, 2920 - [CLKID_VCLK2_DIV1] = &gxbb_vclk2_div1.hw, 2921 - [CLKID_VCLK2_DIV2_EN] = &gxbb_vclk2_div2_en.hw, 2922 - [CLKID_VCLK2_DIV2] = &gxbb_vclk2_div2.hw, 2923 - [CLKID_VCLK2_DIV4_EN] = &gxbb_vclk2_div4_en.hw, 2924 - [CLKID_VCLK2_DIV4] = &gxbb_vclk2_div4.hw, 2925 - [CLKID_VCLK2_DIV6_EN] = &gxbb_vclk2_div6_en.hw, 2926 - [CLKID_VCLK2_DIV6] = &gxbb_vclk2_div6.hw, 2927 - [CLKID_VCLK2_DIV12_EN] = &gxbb_vclk2_div12_en.hw, 2928 - [CLKID_VCLK2_DIV12] = &gxbb_vclk2_div12.hw, 2929 - [CLKID_CTS_ENCI_SEL] = &gxbb_cts_enci_sel.hw, 2930 - [CLKID_CTS_ENCP_SEL] = &gxbb_cts_encp_sel.hw, 2931 - [CLKID_CTS_VDAC_SEL] = &gxbb_cts_vdac_sel.hw, 2932 - [CLKID_HDMI_TX_SEL] = &gxbb_hdmi_tx_sel.hw, 2933 - [CLKID_CTS_ENCI] = &gxbb_cts_enci.hw, 2934 - [CLKID_CTS_ENCP] = &gxbb_cts_encp.hw, 2935 - [CLKID_CTS_VDAC] = &gxbb_cts_vdac.hw, 2936 - [CLKID_HDMI_TX] = &gxbb_hdmi_tx.hw, 2937 - [CLKID_HDMI_SEL] = &gxbb_hdmi_sel.hw, 2938 - [CLKID_HDMI_DIV] = &gxbb_hdmi_div.hw, 2939 - [CLKID_HDMI] = &gxbb_hdmi.hw, 2940 - [NR_CLKS] = NULL, 2941 - }, 2942 - .num = NR_CLKS, 2731 + static struct clk_hw *gxbb_hw_clks[] = { 2732 + [CLKID_SYS_PLL] = &gxbb_sys_pll.hw, 2733 + [CLKID_HDMI_PLL] = &gxbb_hdmi_pll.hw, 2734 + [CLKID_FIXED_PLL] = &gxbb_fixed_pll.hw, 2735 + [CLKID_FCLK_DIV2] = &gxbb_fclk_div2.hw, 2736 + [CLKID_FCLK_DIV3] = &gxbb_fclk_div3.hw, 2737 + [CLKID_FCLK_DIV4] = &gxbb_fclk_div4.hw, 2738 + [CLKID_FCLK_DIV5] = &gxbb_fclk_div5.hw, 2739 + [CLKID_FCLK_DIV7] = &gxbb_fclk_div7.hw, 2740 + [CLKID_GP0_PLL] = &gxbb_gp0_pll.hw, 2741 + [CLKID_MPEG_SEL] = &gxbb_mpeg_clk_sel.hw, 2742 + [CLKID_MPEG_DIV] = &gxbb_mpeg_clk_div.hw, 2743 + [CLKID_CLK81] = &gxbb_clk81.hw, 2744 + [CLKID_MPLL0] = &gxbb_mpll0.hw, 2745 + [CLKID_MPLL1] = &gxbb_mpll1.hw, 2746 + [CLKID_MPLL2] = &gxbb_mpll2.hw, 2747 + [CLKID_DDR] = &gxbb_ddr.hw, 2748 + [CLKID_DOS] = &gxbb_dos.hw, 2749 + [CLKID_ISA] = &gxbb_isa.hw, 2750 + [CLKID_PL301] = &gxbb_pl301.hw, 2751 + [CLKID_PERIPHS] = &gxbb_periphs.hw, 2752 + [CLKID_SPICC] = &gxbb_spicc.hw, 2753 + [CLKID_I2C] = &gxbb_i2c.hw, 2754 + [CLKID_SAR_ADC] = &gxbb_sar_adc.hw, 2755 + [CLKID_SMART_CARD] = &gxbb_smart_card.hw, 2756 + [CLKID_RNG0] = &gxbb_rng0.hw, 2757 + [CLKID_UART0] = &gxbb_uart0.hw, 2758 + [CLKID_SDHC] = &gxbb_sdhc.hw, 2759 + [CLKID_STREAM] = &gxbb_stream.hw, 2760 + [CLKID_ASYNC_FIFO] = &gxbb_async_fifo.hw, 2761 + [CLKID_SDIO] = &gxbb_sdio.hw, 2762 + [CLKID_ABUF] = &gxbb_abuf.hw, 2763 + [CLKID_HIU_IFACE] = &gxbb_hiu_iface.hw, 2764 + [CLKID_ASSIST_MISC] = &gxbb_assist_misc.hw, 2765 + [CLKID_SPI] = &gxbb_spi.hw, 2766 + [CLKID_I2S_SPDIF] = &gxbb_i2s_spdif.hw, 2767 + [CLKID_ETH] = &gxbb_eth.hw, 2768 + [CLKID_DEMUX] = &gxbb_demux.hw, 2769 + [CLKID_AIU_GLUE] = &gxbb_aiu_glue.hw, 2770 + [CLKID_IEC958] = &gxbb_iec958.hw, 2771 + [CLKID_I2S_OUT] = &gxbb_i2s_out.hw, 2772 + [CLKID_AMCLK] = &gxbb_amclk.hw, 2773 + [CLKID_AIFIFO2] = &gxbb_aififo2.hw, 2774 + [CLKID_MIXER] = &gxbb_mixer.hw, 2775 + [CLKID_MIXER_IFACE] = &gxbb_mixer_iface.hw, 2776 + [CLKID_ADC] = &gxbb_adc.hw, 2777 + [CLKID_BLKMV] = &gxbb_blkmv.hw, 2778 + [CLKID_AIU] = &gxbb_aiu.hw, 2779 + [CLKID_UART1] = &gxbb_uart1.hw, 2780 + [CLKID_G2D] = &gxbb_g2d.hw, 2781 + [CLKID_USB0] = &gxbb_usb0.hw, 2782 + [CLKID_USB1] = &gxbb_usb1.hw, 2783 + [CLKID_RESET] = &gxbb_reset.hw, 2784 + [CLKID_NAND] = &gxbb_nand.hw, 2785 + [CLKID_DOS_PARSER] = &gxbb_dos_parser.hw, 2786 + [CLKID_USB] = &gxbb_usb.hw, 2787 + [CLKID_VDIN1] = &gxbb_vdin1.hw, 2788 + [CLKID_AHB_ARB0] = &gxbb_ahb_arb0.hw, 2789 + [CLKID_EFUSE] = &gxbb_efuse.hw, 2790 + [CLKID_BOOT_ROM] = &gxbb_boot_rom.hw, 2791 + [CLKID_AHB_DATA_BUS] = &gxbb_ahb_data_bus.hw, 2792 + [CLKID_AHB_CTRL_BUS] = &gxbb_ahb_ctrl_bus.hw, 2793 + [CLKID_HDMI_INTR_SYNC] = &gxbb_hdmi_intr_sync.hw, 2794 + [CLKID_HDMI_PCLK] = &gxbb_hdmi_pclk.hw, 2795 + [CLKID_USB1_DDR_BRIDGE] = &gxbb_usb1_ddr_bridge.hw, 2796 + [CLKID_USB0_DDR_BRIDGE] = &gxbb_usb0_ddr_bridge.hw, 2797 + [CLKID_MMC_PCLK] = &gxbb_mmc_pclk.hw, 2798 + [CLKID_DVIN] = &gxbb_dvin.hw, 2799 + [CLKID_UART2] = &gxbb_uart2.hw, 2800 + [CLKID_SANA] = &gxbb_sana.hw, 2801 + [CLKID_VPU_INTR] = &gxbb_vpu_intr.hw, 2802 + [CLKID_SEC_AHB_AHB3_BRIDGE] = &gxbb_sec_ahb_ahb3_bridge.hw, 2803 + [CLKID_CLK81_A53] = &gxbb_clk81_a53.hw, 2804 + [CLKID_VCLK2_VENCI0] = &gxbb_vclk2_venci0.hw, 2805 + [CLKID_VCLK2_VENCI1] = &gxbb_vclk2_venci1.hw, 2806 + [CLKID_VCLK2_VENCP0] = &gxbb_vclk2_vencp0.hw, 2807 + [CLKID_VCLK2_VENCP1] = &gxbb_vclk2_vencp1.hw, 2808 + [CLKID_GCLK_VENCI_INT0] = &gxbb_gclk_venci_int0.hw, 2809 + [CLKID_GCLK_VENCI_INT] = &gxbb_gclk_vencp_int.hw, 2810 + [CLKID_DAC_CLK] = &gxbb_dac_clk.hw, 2811 + [CLKID_AOCLK_GATE] = &gxbb_aoclk_gate.hw, 2812 + [CLKID_IEC958_GATE] = &gxbb_iec958_gate.hw, 2813 + [CLKID_ENC480P] = &gxbb_enc480p.hw, 2814 + [CLKID_RNG1] = &gxbb_rng1.hw, 2815 + [CLKID_GCLK_VENCI_INT1] = &gxbb_gclk_venci_int1.hw, 2816 + [CLKID_VCLK2_VENCLMCC] = &gxbb_vclk2_venclmcc.hw, 2817 + [CLKID_VCLK2_VENCL] = &gxbb_vclk2_vencl.hw, 2818 + [CLKID_VCLK_OTHER] = &gxbb_vclk_other.hw, 2819 + [CLKID_EDP] = &gxbb_edp.hw, 2820 + [CLKID_AO_MEDIA_CPU] = &gxbb_ao_media_cpu.hw, 2821 + [CLKID_AO_AHB_SRAM] = &gxbb_ao_ahb_sram.hw, 2822 + [CLKID_AO_AHB_BUS] = &gxbb_ao_ahb_bus.hw, 2823 + [CLKID_AO_IFACE] = &gxbb_ao_iface.hw, 2824 + [CLKID_AO_I2C] = &gxbb_ao_i2c.hw, 2825 + [CLKID_SD_EMMC_A] = &gxbb_emmc_a.hw, 2826 + [CLKID_SD_EMMC_B] = &gxbb_emmc_b.hw, 2827 + [CLKID_SD_EMMC_C] = &gxbb_emmc_c.hw, 2828 + [CLKID_SAR_ADC_CLK] = &gxbb_sar_adc_clk.hw, 2829 + [CLKID_SAR_ADC_SEL] = &gxbb_sar_adc_clk_sel.hw, 2830 + [CLKID_SAR_ADC_DIV] = &gxbb_sar_adc_clk_div.hw, 2831 + [CLKID_MALI_0_SEL] = &gxbb_mali_0_sel.hw, 2832 + [CLKID_MALI_0_DIV] = &gxbb_mali_0_div.hw, 2833 + [CLKID_MALI_0] = &gxbb_mali_0.hw, 2834 + [CLKID_MALI_1_SEL] = &gxbb_mali_1_sel.hw, 2835 + [CLKID_MALI_1_DIV] = &gxbb_mali_1_div.hw, 2836 + [CLKID_MALI_1] = &gxbb_mali_1.hw, 2837 + [CLKID_MALI] = &gxbb_mali.hw, 2838 + [CLKID_CTS_AMCLK] = &gxbb_cts_amclk.hw, 2839 + [CLKID_CTS_AMCLK_SEL] = &gxbb_cts_amclk_sel.hw, 2840 + [CLKID_CTS_AMCLK_DIV] = &gxbb_cts_amclk_div.hw, 2841 + [CLKID_CTS_MCLK_I958] = &gxbb_cts_mclk_i958.hw, 2842 + [CLKID_CTS_MCLK_I958_SEL] = &gxbb_cts_mclk_i958_sel.hw, 2843 + [CLKID_CTS_MCLK_I958_DIV] = &gxbb_cts_mclk_i958_div.hw, 2844 + [CLKID_CTS_I958] = &gxbb_cts_i958.hw, 2845 + [CLKID_32K_CLK] = &gxbb_32k_clk.hw, 2846 + [CLKID_32K_CLK_SEL] = &gxbb_32k_clk_sel.hw, 2847 + [CLKID_32K_CLK_DIV] = &gxbb_32k_clk_div.hw, 2848 + [CLKID_SD_EMMC_A_CLK0_SEL] = &gxbb_sd_emmc_a_clk0_sel.hw, 2849 + [CLKID_SD_EMMC_A_CLK0_DIV] = &gxbb_sd_emmc_a_clk0_div.hw, 2850 + [CLKID_SD_EMMC_A_CLK0] = &gxbb_sd_emmc_a_clk0.hw, 2851 + [CLKID_SD_EMMC_B_CLK0_SEL] = &gxbb_sd_emmc_b_clk0_sel.hw, 2852 + [CLKID_SD_EMMC_B_CLK0_DIV] = &gxbb_sd_emmc_b_clk0_div.hw, 2853 + [CLKID_SD_EMMC_B_CLK0] = &gxbb_sd_emmc_b_clk0.hw, 2854 + [CLKID_SD_EMMC_C_CLK0_SEL] = &gxbb_sd_emmc_c_clk0_sel.hw, 2855 + [CLKID_SD_EMMC_C_CLK0_DIV] = &gxbb_sd_emmc_c_clk0_div.hw, 2856 + [CLKID_SD_EMMC_C_CLK0] = &gxbb_sd_emmc_c_clk0.hw, 2857 + [CLKID_VPU_0_SEL] = &gxbb_vpu_0_sel.hw, 2858 + [CLKID_VPU_0_DIV] = &gxbb_vpu_0_div.hw, 2859 + [CLKID_VPU_0] = &gxbb_vpu_0.hw, 2860 + [CLKID_VPU_1_SEL] = &gxbb_vpu_1_sel.hw, 2861 + [CLKID_VPU_1_DIV] = &gxbb_vpu_1_div.hw, 2862 + [CLKID_VPU_1] = &gxbb_vpu_1.hw, 2863 + [CLKID_VPU] = &gxbb_vpu.hw, 2864 + [CLKID_VAPB_0_SEL] = &gxbb_vapb_0_sel.hw, 2865 + [CLKID_VAPB_0_DIV] = &gxbb_vapb_0_div.hw, 2866 + [CLKID_VAPB_0] = &gxbb_vapb_0.hw, 2867 + [CLKID_VAPB_1_SEL] = &gxbb_vapb_1_sel.hw, 2868 + [CLKID_VAPB_1_DIV] = &gxbb_vapb_1_div.hw, 2869 + [CLKID_VAPB_1] = &gxbb_vapb_1.hw, 2870 + [CLKID_VAPB_SEL] = &gxbb_vapb_sel.hw, 2871 + [CLKID_VAPB] = &gxbb_vapb.hw, 2872 + [CLKID_HDMI_PLL_PRE_MULT] = &gxbb_hdmi_pll_pre_mult.hw, 2873 + [CLKID_MPLL0_DIV] = &gxbb_mpll0_div.hw, 2874 + [CLKID_MPLL1_DIV] = &gxbb_mpll1_div.hw, 2875 + [CLKID_MPLL2_DIV] = &gxbb_mpll2_div.hw, 2876 + [CLKID_MPLL_PREDIV] = &gxbb_mpll_prediv.hw, 2877 + [CLKID_FCLK_DIV2_DIV] = &gxbb_fclk_div2_div.hw, 2878 + [CLKID_FCLK_DIV3_DIV] = &gxbb_fclk_div3_div.hw, 2879 + [CLKID_FCLK_DIV4_DIV] = &gxbb_fclk_div4_div.hw, 2880 + [CLKID_FCLK_DIV5_DIV] = &gxbb_fclk_div5_div.hw, 2881 + [CLKID_FCLK_DIV7_DIV] = &gxbb_fclk_div7_div.hw, 2882 + [CLKID_VDEC_1_SEL] = &gxbb_vdec_1_sel.hw, 2883 + [CLKID_VDEC_1_DIV] = &gxbb_vdec_1_div.hw, 2884 + [CLKID_VDEC_1] = &gxbb_vdec_1.hw, 2885 + [CLKID_VDEC_HEVC_SEL] = &gxbb_vdec_hevc_sel.hw, 2886 + [CLKID_VDEC_HEVC_DIV] = &gxbb_vdec_hevc_div.hw, 2887 + [CLKID_VDEC_HEVC] = &gxbb_vdec_hevc.hw, 2888 + [CLKID_GEN_CLK_SEL] = &gxbb_gen_clk_sel.hw, 2889 + [CLKID_GEN_CLK_DIV] = &gxbb_gen_clk_div.hw, 2890 + [CLKID_GEN_CLK] = &gxbb_gen_clk.hw, 2891 + [CLKID_FIXED_PLL_DCO] = &gxbb_fixed_pll_dco.hw, 2892 + [CLKID_HDMI_PLL_DCO] = &gxbb_hdmi_pll_dco.hw, 2893 + [CLKID_HDMI_PLL_OD] = &gxbb_hdmi_pll_od.hw, 2894 + [CLKID_HDMI_PLL_OD2] = &gxbb_hdmi_pll_od2.hw, 2895 + [CLKID_SYS_PLL_DCO] = &gxbb_sys_pll_dco.hw, 2896 + [CLKID_GP0_PLL_DCO] = &gxbb_gp0_pll_dco.hw, 2897 + [CLKID_VID_PLL_DIV] = &gxbb_vid_pll_div.hw, 2898 + [CLKID_VID_PLL_SEL] = &gxbb_vid_pll_sel.hw, 2899 + [CLKID_VID_PLL] = &gxbb_vid_pll.hw, 2900 + [CLKID_VCLK_SEL] = &gxbb_vclk_sel.hw, 2901 + [CLKID_VCLK2_SEL] = &gxbb_vclk2_sel.hw, 2902 + [CLKID_VCLK_INPUT] = &gxbb_vclk_input.hw, 2903 + [CLKID_VCLK2_INPUT] = &gxbb_vclk2_input.hw, 2904 + [CLKID_VCLK_DIV] = &gxbb_vclk_div.hw, 2905 + [CLKID_VCLK2_DIV] = &gxbb_vclk2_div.hw, 2906 + [CLKID_VCLK] = &gxbb_vclk.hw, 2907 + [CLKID_VCLK2] = &gxbb_vclk2.hw, 2908 + [CLKID_VCLK_DIV1] = &gxbb_vclk_div1.hw, 2909 + [CLKID_VCLK_DIV2_EN] = &gxbb_vclk_div2_en.hw, 2910 + [CLKID_VCLK_DIV2] = &gxbb_vclk_div2.hw, 2911 + [CLKID_VCLK_DIV4_EN] = &gxbb_vclk_div4_en.hw, 2912 + [CLKID_VCLK_DIV4] = &gxbb_vclk_div4.hw, 2913 + [CLKID_VCLK_DIV6_EN] = &gxbb_vclk_div6_en.hw, 2914 + [CLKID_VCLK_DIV6] = &gxbb_vclk_div6.hw, 2915 + [CLKID_VCLK_DIV12_EN] = &gxbb_vclk_div12_en.hw, 2916 + [CLKID_VCLK_DIV12] = &gxbb_vclk_div12.hw, 2917 + [CLKID_VCLK2_DIV1] = &gxbb_vclk2_div1.hw, 2918 + [CLKID_VCLK2_DIV2_EN] = &gxbb_vclk2_div2_en.hw, 2919 + [CLKID_VCLK2_DIV2] = &gxbb_vclk2_div2.hw, 2920 + [CLKID_VCLK2_DIV4_EN] = &gxbb_vclk2_div4_en.hw, 2921 + [CLKID_VCLK2_DIV4] = &gxbb_vclk2_div4.hw, 2922 + [CLKID_VCLK2_DIV6_EN] = &gxbb_vclk2_div6_en.hw, 2923 + [CLKID_VCLK2_DIV6] = &gxbb_vclk2_div6.hw, 2924 + [CLKID_VCLK2_DIV12_EN] = &gxbb_vclk2_div12_en.hw, 2925 + [CLKID_VCLK2_DIV12] = &gxbb_vclk2_div12.hw, 2926 + [CLKID_CTS_ENCI_SEL] = &gxbb_cts_enci_sel.hw, 2927 + [CLKID_CTS_ENCP_SEL] = &gxbb_cts_encp_sel.hw, 2928 + [CLKID_CTS_VDAC_SEL] = &gxbb_cts_vdac_sel.hw, 2929 + [CLKID_HDMI_TX_SEL] = &gxbb_hdmi_tx_sel.hw, 2930 + [CLKID_CTS_ENCI] = &gxbb_cts_enci.hw, 2931 + [CLKID_CTS_ENCP] = &gxbb_cts_encp.hw, 2932 + [CLKID_CTS_VDAC] = &gxbb_cts_vdac.hw, 2933 + [CLKID_HDMI_TX] = &gxbb_hdmi_tx.hw, 2934 + [CLKID_HDMI_SEL] = &gxbb_hdmi_sel.hw, 2935 + [CLKID_HDMI_DIV] = &gxbb_hdmi_div.hw, 2936 + [CLKID_HDMI] = &gxbb_hdmi.hw, 2943 2937 }; 2944 2938 2945 - static struct clk_hw_onecell_data gxl_hw_onecell_data = { 2946 - .hws = { 2947 - [CLKID_SYS_PLL] = &gxbb_sys_pll.hw, 2948 - [CLKID_HDMI_PLL] = &gxl_hdmi_pll.hw, 2949 - [CLKID_FIXED_PLL] = &gxbb_fixed_pll.hw, 2950 - [CLKID_FCLK_DIV2] = &gxbb_fclk_div2.hw, 2951 - [CLKID_FCLK_DIV3] = &gxbb_fclk_div3.hw, 2952 - [CLKID_FCLK_DIV4] = &gxbb_fclk_div4.hw, 2953 - [CLKID_FCLK_DIV5] = &gxbb_fclk_div5.hw, 2954 - [CLKID_FCLK_DIV7] = &gxbb_fclk_div7.hw, 2955 - [CLKID_GP0_PLL] = &gxbb_gp0_pll.hw, 2956 - [CLKID_MPEG_SEL] = &gxbb_mpeg_clk_sel.hw, 2957 - [CLKID_MPEG_DIV] = &gxbb_mpeg_clk_div.hw, 2958 - [CLKID_CLK81] = &gxbb_clk81.hw, 2959 - [CLKID_MPLL0] = &gxbb_mpll0.hw, 2960 - [CLKID_MPLL1] = &gxbb_mpll1.hw, 2961 - [CLKID_MPLL2] = &gxbb_mpll2.hw, 2962 - [CLKID_DDR] = &gxbb_ddr.hw, 2963 - [CLKID_DOS] = &gxbb_dos.hw, 2964 - [CLKID_ISA] = &gxbb_isa.hw, 2965 - [CLKID_PL301] = &gxbb_pl301.hw, 2966 - [CLKID_PERIPHS] = &gxbb_periphs.hw, 2967 - [CLKID_SPICC] = &gxbb_spicc.hw, 2968 - [CLKID_I2C] = &gxbb_i2c.hw, 2969 - [CLKID_SAR_ADC] = &gxbb_sar_adc.hw, 2970 - [CLKID_SMART_CARD] = &gxbb_smart_card.hw, 2971 - [CLKID_RNG0] = &gxbb_rng0.hw, 2972 - [CLKID_UART0] = &gxbb_uart0.hw, 2973 - [CLKID_SDHC] = &gxbb_sdhc.hw, 2974 - [CLKID_STREAM] = &gxbb_stream.hw, 2975 - [CLKID_ASYNC_FIFO] = &gxbb_async_fifo.hw, 2976 - [CLKID_SDIO] = &gxbb_sdio.hw, 2977 - [CLKID_ABUF] = &gxbb_abuf.hw, 2978 - [CLKID_HIU_IFACE] = &gxbb_hiu_iface.hw, 2979 - [CLKID_ASSIST_MISC] = &gxbb_assist_misc.hw, 2980 - [CLKID_SPI] = &gxbb_spi.hw, 2981 - [CLKID_I2S_SPDIF] = &gxbb_i2s_spdif.hw, 2982 - [CLKID_ETH] = &gxbb_eth.hw, 2983 - [CLKID_DEMUX] = &gxbb_demux.hw, 2984 - [CLKID_AIU_GLUE] = &gxbb_aiu_glue.hw, 2985 - [CLKID_IEC958] = &gxbb_iec958.hw, 2986 - [CLKID_I2S_OUT] = &gxbb_i2s_out.hw, 2987 - [CLKID_AMCLK] = &gxbb_amclk.hw, 2988 - [CLKID_AIFIFO2] = &gxbb_aififo2.hw, 2989 - [CLKID_MIXER] = &gxbb_mixer.hw, 2990 - [CLKID_MIXER_IFACE] = &gxbb_mixer_iface.hw, 2991 - [CLKID_ADC] = &gxbb_adc.hw, 2992 - [CLKID_BLKMV] = &gxbb_blkmv.hw, 2993 - [CLKID_AIU] = &gxbb_aiu.hw, 2994 - [CLKID_UART1] = &gxbb_uart1.hw, 2995 - [CLKID_G2D] = &gxbb_g2d.hw, 2996 - [CLKID_USB0] = &gxbb_usb0.hw, 2997 - [CLKID_USB1] = &gxbb_usb1.hw, 2998 - [CLKID_RESET] = &gxbb_reset.hw, 2999 - [CLKID_NAND] = &gxbb_nand.hw, 3000 - [CLKID_DOS_PARSER] = &gxbb_dos_parser.hw, 3001 - [CLKID_USB] = &gxbb_usb.hw, 3002 - [CLKID_VDIN1] = &gxbb_vdin1.hw, 3003 - [CLKID_AHB_ARB0] = &gxbb_ahb_arb0.hw, 3004 - [CLKID_EFUSE] = &gxbb_efuse.hw, 3005 - [CLKID_BOOT_ROM] = &gxbb_boot_rom.hw, 3006 - [CLKID_AHB_DATA_BUS] = &gxbb_ahb_data_bus.hw, 3007 - [CLKID_AHB_CTRL_BUS] = &gxbb_ahb_ctrl_bus.hw, 3008 - [CLKID_HDMI_INTR_SYNC] = &gxbb_hdmi_intr_sync.hw, 3009 - [CLKID_HDMI_PCLK] = &gxbb_hdmi_pclk.hw, 3010 - [CLKID_USB1_DDR_BRIDGE] = &gxbb_usb1_ddr_bridge.hw, 3011 - [CLKID_USB0_DDR_BRIDGE] = &gxbb_usb0_ddr_bridge.hw, 3012 - [CLKID_MMC_PCLK] = &gxbb_mmc_pclk.hw, 3013 - [CLKID_DVIN] = &gxbb_dvin.hw, 3014 - [CLKID_UART2] = &gxbb_uart2.hw, 3015 - [CLKID_SANA] = &gxbb_sana.hw, 3016 - [CLKID_VPU_INTR] = &gxbb_vpu_intr.hw, 3017 - [CLKID_SEC_AHB_AHB3_BRIDGE] = &gxbb_sec_ahb_ahb3_bridge.hw, 3018 - [CLKID_CLK81_A53] = &gxbb_clk81_a53.hw, 3019 - [CLKID_VCLK2_VENCI0] = &gxbb_vclk2_venci0.hw, 3020 - [CLKID_VCLK2_VENCI1] = &gxbb_vclk2_venci1.hw, 3021 - [CLKID_VCLK2_VENCP0] = &gxbb_vclk2_vencp0.hw, 3022 - [CLKID_VCLK2_VENCP1] = &gxbb_vclk2_vencp1.hw, 3023 - [CLKID_GCLK_VENCI_INT0] = &gxbb_gclk_venci_int0.hw, 3024 - [CLKID_GCLK_VENCI_INT] = &gxbb_gclk_vencp_int.hw, 3025 - [CLKID_DAC_CLK] = &gxbb_dac_clk.hw, 3026 - [CLKID_AOCLK_GATE] = &gxbb_aoclk_gate.hw, 3027 - [CLKID_IEC958_GATE] = &gxbb_iec958_gate.hw, 3028 - [CLKID_ENC480P] = &gxbb_enc480p.hw, 3029 - [CLKID_RNG1] = &gxbb_rng1.hw, 3030 - [CLKID_GCLK_VENCI_INT1] = &gxbb_gclk_venci_int1.hw, 3031 - [CLKID_VCLK2_VENCLMCC] = &gxbb_vclk2_venclmcc.hw, 3032 - [CLKID_VCLK2_VENCL] = &gxbb_vclk2_vencl.hw, 3033 - [CLKID_VCLK_OTHER] = &gxbb_vclk_other.hw, 3034 - [CLKID_EDP] = &gxbb_edp.hw, 3035 - [CLKID_AO_MEDIA_CPU] = &gxbb_ao_media_cpu.hw, 3036 - [CLKID_AO_AHB_SRAM] = &gxbb_ao_ahb_sram.hw, 3037 - [CLKID_AO_AHB_BUS] = &gxbb_ao_ahb_bus.hw, 3038 - [CLKID_AO_IFACE] = &gxbb_ao_iface.hw, 3039 - [CLKID_AO_I2C] = &gxbb_ao_i2c.hw, 3040 - [CLKID_SD_EMMC_A] = &gxbb_emmc_a.hw, 3041 - [CLKID_SD_EMMC_B] = &gxbb_emmc_b.hw, 3042 - [CLKID_SD_EMMC_C] = &gxbb_emmc_c.hw, 3043 - [CLKID_SAR_ADC_CLK] = &gxbb_sar_adc_clk.hw, 3044 - [CLKID_SAR_ADC_SEL] = &gxbb_sar_adc_clk_sel.hw, 3045 - [CLKID_SAR_ADC_DIV] = &gxbb_sar_adc_clk_div.hw, 3046 - [CLKID_MALI_0_SEL] = &gxbb_mali_0_sel.hw, 3047 - [CLKID_MALI_0_DIV] = &gxbb_mali_0_div.hw, 3048 - [CLKID_MALI_0] = &gxbb_mali_0.hw, 3049 - [CLKID_MALI_1_SEL] = &gxbb_mali_1_sel.hw, 3050 - [CLKID_MALI_1_DIV] = &gxbb_mali_1_div.hw, 3051 - [CLKID_MALI_1] = &gxbb_mali_1.hw, 3052 - [CLKID_MALI] = &gxbb_mali.hw, 3053 - [CLKID_CTS_AMCLK] = &gxbb_cts_amclk.hw, 3054 - [CLKID_CTS_AMCLK_SEL] = &gxbb_cts_amclk_sel.hw, 3055 - [CLKID_CTS_AMCLK_DIV] = &gxbb_cts_amclk_div.hw, 3056 - [CLKID_CTS_MCLK_I958] = &gxbb_cts_mclk_i958.hw, 3057 - [CLKID_CTS_MCLK_I958_SEL] = &gxbb_cts_mclk_i958_sel.hw, 3058 - [CLKID_CTS_MCLK_I958_DIV] = &gxbb_cts_mclk_i958_div.hw, 3059 - [CLKID_CTS_I958] = &gxbb_cts_i958.hw, 3060 - [CLKID_32K_CLK] = &gxbb_32k_clk.hw, 3061 - [CLKID_32K_CLK_SEL] = &gxbb_32k_clk_sel.hw, 3062 - [CLKID_32K_CLK_DIV] = &gxbb_32k_clk_div.hw, 3063 - [CLKID_SD_EMMC_A_CLK0_SEL] = &gxbb_sd_emmc_a_clk0_sel.hw, 3064 - [CLKID_SD_EMMC_A_CLK0_DIV] = &gxbb_sd_emmc_a_clk0_div.hw, 3065 - [CLKID_SD_EMMC_A_CLK0] = &gxbb_sd_emmc_a_clk0.hw, 3066 - [CLKID_SD_EMMC_B_CLK0_SEL] = &gxbb_sd_emmc_b_clk0_sel.hw, 3067 - [CLKID_SD_EMMC_B_CLK0_DIV] = &gxbb_sd_emmc_b_clk0_div.hw, 3068 - [CLKID_SD_EMMC_B_CLK0] = &gxbb_sd_emmc_b_clk0.hw, 3069 - [CLKID_SD_EMMC_C_CLK0_SEL] = &gxbb_sd_emmc_c_clk0_sel.hw, 3070 - [CLKID_SD_EMMC_C_CLK0_DIV] = &gxbb_sd_emmc_c_clk0_div.hw, 3071 - [CLKID_SD_EMMC_C_CLK0] = &gxbb_sd_emmc_c_clk0.hw, 3072 - [CLKID_VPU_0_SEL] = &gxbb_vpu_0_sel.hw, 3073 - [CLKID_VPU_0_DIV] = &gxbb_vpu_0_div.hw, 3074 - [CLKID_VPU_0] = &gxbb_vpu_0.hw, 3075 - [CLKID_VPU_1_SEL] = &gxbb_vpu_1_sel.hw, 3076 - [CLKID_VPU_1_DIV] = &gxbb_vpu_1_div.hw, 3077 - [CLKID_VPU_1] = &gxbb_vpu_1.hw, 3078 - [CLKID_VPU] = &gxbb_vpu.hw, 3079 - [CLKID_VAPB_0_SEL] = &gxbb_vapb_0_sel.hw, 3080 - [CLKID_VAPB_0_DIV] = &gxbb_vapb_0_div.hw, 3081 - [CLKID_VAPB_0] = &gxbb_vapb_0.hw, 3082 - [CLKID_VAPB_1_SEL] = &gxbb_vapb_1_sel.hw, 3083 - [CLKID_VAPB_1_DIV] = &gxbb_vapb_1_div.hw, 3084 - [CLKID_VAPB_1] = &gxbb_vapb_1.hw, 3085 - [CLKID_VAPB_SEL] = &gxbb_vapb_sel.hw, 3086 - [CLKID_VAPB] = &gxbb_vapb.hw, 3087 - [CLKID_MPLL0_DIV] = &gxl_mpll0_div.hw, 3088 - [CLKID_MPLL1_DIV] = &gxbb_mpll1_div.hw, 3089 - [CLKID_MPLL2_DIV] = &gxbb_mpll2_div.hw, 3090 - [CLKID_MPLL_PREDIV] = &gxbb_mpll_prediv.hw, 3091 - [CLKID_FCLK_DIV2_DIV] = &gxbb_fclk_div2_div.hw, 3092 - [CLKID_FCLK_DIV3_DIV] = &gxbb_fclk_div3_div.hw, 3093 - [CLKID_FCLK_DIV4_DIV] = &gxbb_fclk_div4_div.hw, 3094 - [CLKID_FCLK_DIV5_DIV] = &gxbb_fclk_div5_div.hw, 3095 - [CLKID_FCLK_DIV7_DIV] = &gxbb_fclk_div7_div.hw, 3096 - [CLKID_VDEC_1_SEL] = &gxbb_vdec_1_sel.hw, 3097 - [CLKID_VDEC_1_DIV] = &gxbb_vdec_1_div.hw, 3098 - [CLKID_VDEC_1] = &gxbb_vdec_1.hw, 3099 - [CLKID_VDEC_HEVC_SEL] = &gxbb_vdec_hevc_sel.hw, 3100 - [CLKID_VDEC_HEVC_DIV] = &gxbb_vdec_hevc_div.hw, 3101 - [CLKID_VDEC_HEVC] = &gxbb_vdec_hevc.hw, 3102 - [CLKID_GEN_CLK_SEL] = &gxbb_gen_clk_sel.hw, 3103 - [CLKID_GEN_CLK_DIV] = &gxbb_gen_clk_div.hw, 3104 - [CLKID_GEN_CLK] = &gxbb_gen_clk.hw, 3105 - [CLKID_FIXED_PLL_DCO] = &gxbb_fixed_pll_dco.hw, 3106 - [CLKID_HDMI_PLL_DCO] = &gxl_hdmi_pll_dco.hw, 3107 - [CLKID_HDMI_PLL_OD] = &gxl_hdmi_pll_od.hw, 3108 - [CLKID_HDMI_PLL_OD2] = &gxl_hdmi_pll_od2.hw, 3109 - [CLKID_SYS_PLL_DCO] = &gxbb_sys_pll_dco.hw, 3110 - [CLKID_GP0_PLL_DCO] = &gxl_gp0_pll_dco.hw, 3111 - [CLKID_VID_PLL_DIV] = &gxbb_vid_pll_div.hw, 3112 - [CLKID_VID_PLL_SEL] = &gxbb_vid_pll_sel.hw, 3113 - [CLKID_VID_PLL] = &gxbb_vid_pll.hw, 3114 - [CLKID_VCLK_SEL] = &gxbb_vclk_sel.hw, 3115 - [CLKID_VCLK2_SEL] = &gxbb_vclk2_sel.hw, 3116 - [CLKID_VCLK_INPUT] = &gxbb_vclk_input.hw, 3117 - [CLKID_VCLK2_INPUT] = &gxbb_vclk2_input.hw, 3118 - [CLKID_VCLK_DIV] = &gxbb_vclk_div.hw, 3119 - [CLKID_VCLK2_DIV] = &gxbb_vclk2_div.hw, 3120 - [CLKID_VCLK] = &gxbb_vclk.hw, 3121 - [CLKID_VCLK2] = &gxbb_vclk2.hw, 3122 - [CLKID_VCLK_DIV1] = &gxbb_vclk_div1.hw, 3123 - [CLKID_VCLK_DIV2_EN] = &gxbb_vclk_div2_en.hw, 3124 - [CLKID_VCLK_DIV2] = &gxbb_vclk_div2.hw, 3125 - [CLKID_VCLK_DIV4_EN] = &gxbb_vclk_div4_en.hw, 3126 - [CLKID_VCLK_DIV4] = &gxbb_vclk_div4.hw, 3127 - [CLKID_VCLK_DIV6_EN] = &gxbb_vclk_div6_en.hw, 3128 - [CLKID_VCLK_DIV6] = &gxbb_vclk_div6.hw, 3129 - [CLKID_VCLK_DIV12_EN] = &gxbb_vclk_div12_en.hw, 3130 - [CLKID_VCLK_DIV12] = &gxbb_vclk_div12.hw, 3131 - [CLKID_VCLK2_DIV1] = &gxbb_vclk2_div1.hw, 3132 - [CLKID_VCLK2_DIV2_EN] = &gxbb_vclk2_div2_en.hw, 3133 - [CLKID_VCLK2_DIV2] = &gxbb_vclk2_div2.hw, 3134 - [CLKID_VCLK2_DIV4_EN] = &gxbb_vclk2_div4_en.hw, 3135 - [CLKID_VCLK2_DIV4] = &gxbb_vclk2_div4.hw, 3136 - [CLKID_VCLK2_DIV6_EN] = &gxbb_vclk2_div6_en.hw, 3137 - [CLKID_VCLK2_DIV6] = &gxbb_vclk2_div6.hw, 3138 - [CLKID_VCLK2_DIV12_EN] = &gxbb_vclk2_div12_en.hw, 3139 - [CLKID_VCLK2_DIV12] = &gxbb_vclk2_div12.hw, 3140 - [CLKID_CTS_ENCI_SEL] = &gxbb_cts_enci_sel.hw, 3141 - [CLKID_CTS_ENCP_SEL] = &gxbb_cts_encp_sel.hw, 3142 - [CLKID_CTS_VDAC_SEL] = &gxbb_cts_vdac_sel.hw, 3143 - [CLKID_HDMI_TX_SEL] = &gxbb_hdmi_tx_sel.hw, 3144 - [CLKID_CTS_ENCI] = &gxbb_cts_enci.hw, 3145 - [CLKID_CTS_ENCP] = &gxbb_cts_encp.hw, 3146 - [CLKID_CTS_VDAC] = &gxbb_cts_vdac.hw, 3147 - [CLKID_HDMI_TX] = &gxbb_hdmi_tx.hw, 3148 - [CLKID_HDMI_SEL] = &gxbb_hdmi_sel.hw, 3149 - [CLKID_HDMI_DIV] = &gxbb_hdmi_div.hw, 3150 - [CLKID_HDMI] = &gxbb_hdmi.hw, 3151 - [CLKID_ACODEC] = &gxl_acodec.hw, 3152 - [NR_CLKS] = NULL, 3153 - }, 3154 - .num = NR_CLKS, 2939 + static struct clk_hw *gxl_hw_clks[] = { 2940 + [CLKID_SYS_PLL] = &gxbb_sys_pll.hw, 2941 + [CLKID_HDMI_PLL] = &gxl_hdmi_pll.hw, 2942 + [CLKID_FIXED_PLL] = &gxbb_fixed_pll.hw, 2943 + [CLKID_FCLK_DIV2] = &gxbb_fclk_div2.hw, 2944 + [CLKID_FCLK_DIV3] = &gxbb_fclk_div3.hw, 2945 + [CLKID_FCLK_DIV4] = &gxbb_fclk_div4.hw, 2946 + [CLKID_FCLK_DIV5] = &gxbb_fclk_div5.hw, 2947 + [CLKID_FCLK_DIV7] = &gxbb_fclk_div7.hw, 2948 + [CLKID_GP0_PLL] = &gxbb_gp0_pll.hw, 2949 + [CLKID_MPEG_SEL] = &gxbb_mpeg_clk_sel.hw, 2950 + [CLKID_MPEG_DIV] = &gxbb_mpeg_clk_div.hw, 2951 + [CLKID_CLK81] = &gxbb_clk81.hw, 2952 + [CLKID_MPLL0] = &gxbb_mpll0.hw, 2953 + [CLKID_MPLL1] = &gxbb_mpll1.hw, 2954 + [CLKID_MPLL2] = &gxbb_mpll2.hw, 2955 + [CLKID_DDR] = &gxbb_ddr.hw, 2956 + [CLKID_DOS] = &gxbb_dos.hw, 2957 + [CLKID_ISA] = &gxbb_isa.hw, 2958 + [CLKID_PL301] = &gxbb_pl301.hw, 2959 + [CLKID_PERIPHS] = &gxbb_periphs.hw, 2960 + [CLKID_SPICC] = &gxbb_spicc.hw, 2961 + [CLKID_I2C] = &gxbb_i2c.hw, 2962 + [CLKID_SAR_ADC] = &gxbb_sar_adc.hw, 2963 + [CLKID_SMART_CARD] = &gxbb_smart_card.hw, 2964 + [CLKID_RNG0] = &gxbb_rng0.hw, 2965 + [CLKID_UART0] = &gxbb_uart0.hw, 2966 + [CLKID_SDHC] = &gxbb_sdhc.hw, 2967 + [CLKID_STREAM] = &gxbb_stream.hw, 2968 + [CLKID_ASYNC_FIFO] = &gxbb_async_fifo.hw, 2969 + [CLKID_SDIO] = &gxbb_sdio.hw, 2970 + [CLKID_ABUF] = &gxbb_abuf.hw, 2971 + [CLKID_HIU_IFACE] = &gxbb_hiu_iface.hw, 2972 + [CLKID_ASSIST_MISC] = &gxbb_assist_misc.hw, 2973 + [CLKID_SPI] = &gxbb_spi.hw, 2974 + [CLKID_I2S_SPDIF] = &gxbb_i2s_spdif.hw, 2975 + [CLKID_ETH] = &gxbb_eth.hw, 2976 + [CLKID_DEMUX] = &gxbb_demux.hw, 2977 + [CLKID_AIU_GLUE] = &gxbb_aiu_glue.hw, 2978 + [CLKID_IEC958] = &gxbb_iec958.hw, 2979 + [CLKID_I2S_OUT] = &gxbb_i2s_out.hw, 2980 + [CLKID_AMCLK] = &gxbb_amclk.hw, 2981 + [CLKID_AIFIFO2] = &gxbb_aififo2.hw, 2982 + [CLKID_MIXER] = &gxbb_mixer.hw, 2983 + [CLKID_MIXER_IFACE] = &gxbb_mixer_iface.hw, 2984 + [CLKID_ADC] = &gxbb_adc.hw, 2985 + [CLKID_BLKMV] = &gxbb_blkmv.hw, 2986 + [CLKID_AIU] = &gxbb_aiu.hw, 2987 + [CLKID_UART1] = &gxbb_uart1.hw, 2988 + [CLKID_G2D] = &gxbb_g2d.hw, 2989 + [CLKID_USB0] = &gxbb_usb0.hw, 2990 + [CLKID_USB1] = &gxbb_usb1.hw, 2991 + [CLKID_RESET] = &gxbb_reset.hw, 2992 + [CLKID_NAND] = &gxbb_nand.hw, 2993 + [CLKID_DOS_PARSER] = &gxbb_dos_parser.hw, 2994 + [CLKID_USB] = &gxbb_usb.hw, 2995 + [CLKID_VDIN1] = &gxbb_vdin1.hw, 2996 + [CLKID_AHB_ARB0] = &gxbb_ahb_arb0.hw, 2997 + [CLKID_EFUSE] = &gxbb_efuse.hw, 2998 + [CLKID_BOOT_ROM] = &gxbb_boot_rom.hw, 2999 + [CLKID_AHB_DATA_BUS] = &gxbb_ahb_data_bus.hw, 3000 + [CLKID_AHB_CTRL_BUS] = &gxbb_ahb_ctrl_bus.hw, 3001 + [CLKID_HDMI_INTR_SYNC] = &gxbb_hdmi_intr_sync.hw, 3002 + [CLKID_HDMI_PCLK] = &gxbb_hdmi_pclk.hw, 3003 + [CLKID_USB1_DDR_BRIDGE] = &gxbb_usb1_ddr_bridge.hw, 3004 + [CLKID_USB0_DDR_BRIDGE] = &gxbb_usb0_ddr_bridge.hw, 3005 + [CLKID_MMC_PCLK] = &gxbb_mmc_pclk.hw, 3006 + [CLKID_DVIN] = &gxbb_dvin.hw, 3007 + [CLKID_UART2] = &gxbb_uart2.hw, 3008 + [CLKID_SANA] = &gxbb_sana.hw, 3009 + [CLKID_VPU_INTR] = &gxbb_vpu_intr.hw, 3010 + [CLKID_SEC_AHB_AHB3_BRIDGE] = &gxbb_sec_ahb_ahb3_bridge.hw, 3011 + [CLKID_CLK81_A53] = &gxbb_clk81_a53.hw, 3012 + [CLKID_VCLK2_VENCI0] = &gxbb_vclk2_venci0.hw, 3013 + [CLKID_VCLK2_VENCI1] = &gxbb_vclk2_venci1.hw, 3014 + [CLKID_VCLK2_VENCP0] = &gxbb_vclk2_vencp0.hw, 3015 + [CLKID_VCLK2_VENCP1] = &gxbb_vclk2_vencp1.hw, 3016 + [CLKID_GCLK_VENCI_INT0] = &gxbb_gclk_venci_int0.hw, 3017 + [CLKID_GCLK_VENCI_INT] = &gxbb_gclk_vencp_int.hw, 3018 + [CLKID_DAC_CLK] = &gxbb_dac_clk.hw, 3019 + [CLKID_AOCLK_GATE] = &gxbb_aoclk_gate.hw, 3020 + [CLKID_IEC958_GATE] = &gxbb_iec958_gate.hw, 3021 + [CLKID_ENC480P] = &gxbb_enc480p.hw, 3022 + [CLKID_RNG1] = &gxbb_rng1.hw, 3023 + [CLKID_GCLK_VENCI_INT1] = &gxbb_gclk_venci_int1.hw, 3024 + [CLKID_VCLK2_VENCLMCC] = &gxbb_vclk2_venclmcc.hw, 3025 + [CLKID_VCLK2_VENCL] = &gxbb_vclk2_vencl.hw, 3026 + [CLKID_VCLK_OTHER] = &gxbb_vclk_other.hw, 3027 + [CLKID_EDP] = &gxbb_edp.hw, 3028 + [CLKID_AO_MEDIA_CPU] = &gxbb_ao_media_cpu.hw, 3029 + [CLKID_AO_AHB_SRAM] = &gxbb_ao_ahb_sram.hw, 3030 + [CLKID_AO_AHB_BUS] = &gxbb_ao_ahb_bus.hw, 3031 + [CLKID_AO_IFACE] = &gxbb_ao_iface.hw, 3032 + [CLKID_AO_I2C] = &gxbb_ao_i2c.hw, 3033 + [CLKID_SD_EMMC_A] = &gxbb_emmc_a.hw, 3034 + [CLKID_SD_EMMC_B] = &gxbb_emmc_b.hw, 3035 + [CLKID_SD_EMMC_C] = &gxbb_emmc_c.hw, 3036 + [CLKID_SAR_ADC_CLK] = &gxbb_sar_adc_clk.hw, 3037 + [CLKID_SAR_ADC_SEL] = &gxbb_sar_adc_clk_sel.hw, 3038 + [CLKID_SAR_ADC_DIV] = &gxbb_sar_adc_clk_div.hw, 3039 + [CLKID_MALI_0_SEL] = &gxbb_mali_0_sel.hw, 3040 + [CLKID_MALI_0_DIV] = &gxbb_mali_0_div.hw, 3041 + [CLKID_MALI_0] = &gxbb_mali_0.hw, 3042 + [CLKID_MALI_1_SEL] = &gxbb_mali_1_sel.hw, 3043 + [CLKID_MALI_1_DIV] = &gxbb_mali_1_div.hw, 3044 + [CLKID_MALI_1] = &gxbb_mali_1.hw, 3045 + [CLKID_MALI] = &gxbb_mali.hw, 3046 + [CLKID_CTS_AMCLK] = &gxbb_cts_amclk.hw, 3047 + [CLKID_CTS_AMCLK_SEL] = &gxbb_cts_amclk_sel.hw, 3048 + [CLKID_CTS_AMCLK_DIV] = &gxbb_cts_amclk_div.hw, 3049 + [CLKID_CTS_MCLK_I958] = &gxbb_cts_mclk_i958.hw, 3050 + [CLKID_CTS_MCLK_I958_SEL] = &gxbb_cts_mclk_i958_sel.hw, 3051 + [CLKID_CTS_MCLK_I958_DIV] = &gxbb_cts_mclk_i958_div.hw, 3052 + [CLKID_CTS_I958] = &gxbb_cts_i958.hw, 3053 + [CLKID_32K_CLK] = &gxbb_32k_clk.hw, 3054 + [CLKID_32K_CLK_SEL] = &gxbb_32k_clk_sel.hw, 3055 + [CLKID_32K_CLK_DIV] = &gxbb_32k_clk_div.hw, 3056 + [CLKID_SD_EMMC_A_CLK0_SEL] = &gxbb_sd_emmc_a_clk0_sel.hw, 3057 + [CLKID_SD_EMMC_A_CLK0_DIV] = &gxbb_sd_emmc_a_clk0_div.hw, 3058 + [CLKID_SD_EMMC_A_CLK0] = &gxbb_sd_emmc_a_clk0.hw, 3059 + [CLKID_SD_EMMC_B_CLK0_SEL] = &gxbb_sd_emmc_b_clk0_sel.hw, 3060 + [CLKID_SD_EMMC_B_CLK0_DIV] = &gxbb_sd_emmc_b_clk0_div.hw, 3061 + [CLKID_SD_EMMC_B_CLK0] = &gxbb_sd_emmc_b_clk0.hw, 3062 + [CLKID_SD_EMMC_C_CLK0_SEL] = &gxbb_sd_emmc_c_clk0_sel.hw, 3063 + [CLKID_SD_EMMC_C_CLK0_DIV] = &gxbb_sd_emmc_c_clk0_div.hw, 3064 + [CLKID_SD_EMMC_C_CLK0] = &gxbb_sd_emmc_c_clk0.hw, 3065 + [CLKID_VPU_0_SEL] = &gxbb_vpu_0_sel.hw, 3066 + [CLKID_VPU_0_DIV] = &gxbb_vpu_0_div.hw, 3067 + [CLKID_VPU_0] = &gxbb_vpu_0.hw, 3068 + [CLKID_VPU_1_SEL] = &gxbb_vpu_1_sel.hw, 3069 + [CLKID_VPU_1_DIV] = &gxbb_vpu_1_div.hw, 3070 + [CLKID_VPU_1] = &gxbb_vpu_1.hw, 3071 + [CLKID_VPU] = &gxbb_vpu.hw, 3072 + [CLKID_VAPB_0_SEL] = &gxbb_vapb_0_sel.hw, 3073 + [CLKID_VAPB_0_DIV] = &gxbb_vapb_0_div.hw, 3074 + [CLKID_VAPB_0] = &gxbb_vapb_0.hw, 3075 + [CLKID_VAPB_1_SEL] = &gxbb_vapb_1_sel.hw, 3076 + [CLKID_VAPB_1_DIV] = &gxbb_vapb_1_div.hw, 3077 + [CLKID_VAPB_1] = &gxbb_vapb_1.hw, 3078 + [CLKID_VAPB_SEL] = &gxbb_vapb_sel.hw, 3079 + [CLKID_VAPB] = &gxbb_vapb.hw, 3080 + [CLKID_MPLL0_DIV] = &gxl_mpll0_div.hw, 3081 + [CLKID_MPLL1_DIV] = &gxbb_mpll1_div.hw, 3082 + [CLKID_MPLL2_DIV] = &gxbb_mpll2_div.hw, 3083 + [CLKID_MPLL_PREDIV] = &gxbb_mpll_prediv.hw, 3084 + [CLKID_FCLK_DIV2_DIV] = &gxbb_fclk_div2_div.hw, 3085 + [CLKID_FCLK_DIV3_DIV] = &gxbb_fclk_div3_div.hw, 3086 + [CLKID_FCLK_DIV4_DIV] = &gxbb_fclk_div4_div.hw, 3087 + [CLKID_FCLK_DIV5_DIV] = &gxbb_fclk_div5_div.hw, 3088 + [CLKID_FCLK_DIV7_DIV] = &gxbb_fclk_div7_div.hw, 3089 + [CLKID_VDEC_1_SEL] = &gxbb_vdec_1_sel.hw, 3090 + [CLKID_VDEC_1_DIV] = &gxbb_vdec_1_div.hw, 3091 + [CLKID_VDEC_1] = &gxbb_vdec_1.hw, 3092 + [CLKID_VDEC_HEVC_SEL] = &gxbb_vdec_hevc_sel.hw, 3093 + [CLKID_VDEC_HEVC_DIV] = &gxbb_vdec_hevc_div.hw, 3094 + [CLKID_VDEC_HEVC] = &gxbb_vdec_hevc.hw, 3095 + [CLKID_GEN_CLK_SEL] = &gxbb_gen_clk_sel.hw, 3096 + [CLKID_GEN_CLK_DIV] = &gxbb_gen_clk_div.hw, 3097 + [CLKID_GEN_CLK] = &gxbb_gen_clk.hw, 3098 + [CLKID_FIXED_PLL_DCO] = &gxbb_fixed_pll_dco.hw, 3099 + [CLKID_HDMI_PLL_DCO] = &gxl_hdmi_pll_dco.hw, 3100 + [CLKID_HDMI_PLL_OD] = &gxl_hdmi_pll_od.hw, 3101 + [CLKID_HDMI_PLL_OD2] = &gxl_hdmi_pll_od2.hw, 3102 + [CLKID_SYS_PLL_DCO] = &gxbb_sys_pll_dco.hw, 3103 + [CLKID_GP0_PLL_DCO] = &gxl_gp0_pll_dco.hw, 3104 + [CLKID_VID_PLL_DIV] = &gxbb_vid_pll_div.hw, 3105 + [CLKID_VID_PLL_SEL] = &gxbb_vid_pll_sel.hw, 3106 + [CLKID_VID_PLL] = &gxbb_vid_pll.hw, 3107 + [CLKID_VCLK_SEL] = &gxbb_vclk_sel.hw, 3108 + [CLKID_VCLK2_SEL] = &gxbb_vclk2_sel.hw, 3109 + [CLKID_VCLK_INPUT] = &gxbb_vclk_input.hw, 3110 + [CLKID_VCLK2_INPUT] = &gxbb_vclk2_input.hw, 3111 + [CLKID_VCLK_DIV] = &gxbb_vclk_div.hw, 3112 + [CLKID_VCLK2_DIV] = &gxbb_vclk2_div.hw, 3113 + [CLKID_VCLK] = &gxbb_vclk.hw, 3114 + [CLKID_VCLK2] = &gxbb_vclk2.hw, 3115 + [CLKID_VCLK_DIV1] = &gxbb_vclk_div1.hw, 3116 + [CLKID_VCLK_DIV2_EN] = &gxbb_vclk_div2_en.hw, 3117 + [CLKID_VCLK_DIV2] = &gxbb_vclk_div2.hw, 3118 + [CLKID_VCLK_DIV4_EN] = &gxbb_vclk_div4_en.hw, 3119 + [CLKID_VCLK_DIV4] = &gxbb_vclk_div4.hw, 3120 + [CLKID_VCLK_DIV6_EN] = &gxbb_vclk_div6_en.hw, 3121 + [CLKID_VCLK_DIV6] = &gxbb_vclk_div6.hw, 3122 + [CLKID_VCLK_DIV12_EN] = &gxbb_vclk_div12_en.hw, 3123 + [CLKID_VCLK_DIV12] = &gxbb_vclk_div12.hw, 3124 + [CLKID_VCLK2_DIV1] = &gxbb_vclk2_div1.hw, 3125 + [CLKID_VCLK2_DIV2_EN] = &gxbb_vclk2_div2_en.hw, 3126 + [CLKID_VCLK2_DIV2] = &gxbb_vclk2_div2.hw, 3127 + [CLKID_VCLK2_DIV4_EN] = &gxbb_vclk2_div4_en.hw, 3128 + [CLKID_VCLK2_DIV4] = &gxbb_vclk2_div4.hw, 3129 + [CLKID_VCLK2_DIV6_EN] = &gxbb_vclk2_div6_en.hw, 3130 + [CLKID_VCLK2_DIV6] = &gxbb_vclk2_div6.hw, 3131 + [CLKID_VCLK2_DIV12_EN] = &gxbb_vclk2_div12_en.hw, 3132 + [CLKID_VCLK2_DIV12] = &gxbb_vclk2_div12.hw, 3133 + [CLKID_CTS_ENCI_SEL] = &gxbb_cts_enci_sel.hw, 3134 + [CLKID_CTS_ENCP_SEL] = &gxbb_cts_encp_sel.hw, 3135 + [CLKID_CTS_VDAC_SEL] = &gxbb_cts_vdac_sel.hw, 3136 + [CLKID_HDMI_TX_SEL] = &gxbb_hdmi_tx_sel.hw, 3137 + [CLKID_CTS_ENCI] = &gxbb_cts_enci.hw, 3138 + [CLKID_CTS_ENCP] = &gxbb_cts_encp.hw, 3139 + [CLKID_CTS_VDAC] = &gxbb_cts_vdac.hw, 3140 + [CLKID_HDMI_TX] = &gxbb_hdmi_tx.hw, 3141 + [CLKID_HDMI_SEL] = &gxbb_hdmi_sel.hw, 3142 + [CLKID_HDMI_DIV] = &gxbb_hdmi_div.hw, 3143 + [CLKID_HDMI] = &gxbb_hdmi.hw, 3144 + [CLKID_ACODEC] = &gxl_acodec.hw, 3155 3145 }; 3156 3146 3157 3147 static struct clk_regmap *const gxbb_clk_regmaps[] = { ··· 3538 3544 static const struct meson_eeclkc_data gxbb_clkc_data = { 3539 3545 .regmap_clks = gxbb_clk_regmaps, 3540 3546 .regmap_clk_num = ARRAY_SIZE(gxbb_clk_regmaps), 3541 - .hw_onecell_data = &gxbb_hw_onecell_data, 3547 + .hw_clks = { 3548 + .hws = gxbb_hw_clks, 3549 + .num = ARRAY_SIZE(gxbb_hw_clks), 3550 + }, 3542 3551 }; 3543 3552 3544 3553 static const struct meson_eeclkc_data gxl_clkc_data = { 3545 3554 .regmap_clks = gxl_clk_regmaps, 3546 3555 .regmap_clk_num = ARRAY_SIZE(gxl_clk_regmaps), 3547 - .hw_onecell_data = &gxl_hw_onecell_data, 3556 + .hw_clks = { 3557 + .hws = gxl_hw_clks, 3558 + .num = ARRAY_SIZE(gxl_hw_clks), 3559 + }, 3548 3560 }; 3549 3561 3550 3562 static const struct of_device_id clkc_match_table[] = {
-81
drivers/clk/meson/gxbb.h
··· 112 112 #define HHI_BT656_CLK_CNTL 0x3D4 /* 0xf5 offset in data sheet */ 113 113 #define HHI_SAR_CLK_CNTL 0x3D8 /* 0xf6 offset in data sheet */ 114 114 115 - /* 116 - * CLKID index values 117 - * 118 - * These indices are entirely contrived and do not map onto the hardware. 119 - * It has now been decided to expose everything by default in the DT header: 120 - * include/dt-bindings/clock/gxbb-clkc.h. Only the clocks ids we don't want 121 - * to expose, such as the internal muxes and dividers of composite clocks, 122 - * will remain defined here. 123 - */ 124 - /* ID 1 is unused (it was used by the non-existing CLKID_CPUCLK before) */ 125 - #define CLKID_MPEG_SEL 10 126 - #define CLKID_MPEG_DIV 11 127 - #define CLKID_SAR_ADC_DIV 99 128 - #define CLKID_MALI_0_DIV 101 129 - #define CLKID_MALI_1_DIV 104 130 - #define CLKID_CTS_AMCLK_SEL 108 131 - #define CLKID_CTS_AMCLK_DIV 109 132 - #define CLKID_CTS_MCLK_I958_SEL 111 133 - #define CLKID_CTS_MCLK_I958_DIV 112 134 - #define CLKID_32K_CLK_SEL 115 135 - #define CLKID_32K_CLK_DIV 116 136 - #define CLKID_SD_EMMC_A_CLK0_SEL 117 137 - #define CLKID_SD_EMMC_A_CLK0_DIV 118 138 - #define CLKID_SD_EMMC_B_CLK0_SEL 120 139 - #define CLKID_SD_EMMC_B_CLK0_DIV 121 140 - #define CLKID_SD_EMMC_C_CLK0_SEL 123 141 - #define CLKID_SD_EMMC_C_CLK0_DIV 124 142 - #define CLKID_VPU_0_DIV 127 143 - #define CLKID_VPU_1_DIV 130 144 - #define CLKID_VAPB_0_DIV 134 145 - #define CLKID_VAPB_1_DIV 137 146 - #define CLKID_HDMI_PLL_PRE_MULT 141 147 - #define CLKID_MPLL0_DIV 142 148 - #define CLKID_MPLL1_DIV 143 149 - #define CLKID_MPLL2_DIV 144 150 - #define CLKID_MPLL_PREDIV 145 151 - #define CLKID_FCLK_DIV2_DIV 146 152 - #define CLKID_FCLK_DIV3_DIV 147 153 - #define CLKID_FCLK_DIV4_DIV 148 154 - #define CLKID_FCLK_DIV5_DIV 149 155 - #define CLKID_FCLK_DIV7_DIV 150 156 - #define CLKID_VDEC_1_SEL 151 157 - #define CLKID_VDEC_1_DIV 152 158 - #define CLKID_VDEC_HEVC_SEL 154 159 - #define CLKID_VDEC_HEVC_DIV 155 160 - #define CLKID_GEN_CLK_SEL 157 161 - #define CLKID_GEN_CLK_DIV 158 162 - #define CLKID_FIXED_PLL_DCO 160 163 - #define CLKID_HDMI_PLL_DCO 161 164 - #define CLKID_HDMI_PLL_OD 162 165 - #define CLKID_HDMI_PLL_OD2 163 166 - #define CLKID_SYS_PLL_DCO 164 167 - #define CLKID_GP0_PLL_DCO 165 168 - #define CLKID_VID_PLL_SEL 167 169 - #define CLKID_VID_PLL_DIV 168 170 - #define CLKID_VCLK_SEL 169 171 - #define CLKID_VCLK2_SEL 170 172 - #define CLKID_VCLK_INPUT 171 173 - #define CLKID_VCLK2_INPUT 172 174 - #define CLKID_VCLK_DIV 173 175 - #define CLKID_VCLK2_DIV 174 176 - #define CLKID_VCLK_DIV2_EN 177 177 - #define CLKID_VCLK_DIV4_EN 178 178 - #define CLKID_VCLK_DIV6_EN 179 179 - #define CLKID_VCLK_DIV12_EN 180 180 - #define CLKID_VCLK2_DIV2_EN 181 181 - #define CLKID_VCLK2_DIV4_EN 182 182 - #define CLKID_VCLK2_DIV6_EN 183 183 - #define CLKID_VCLK2_DIV12_EN 184 184 - #define CLKID_CTS_ENCI_SEL 195 185 - #define CLKID_CTS_ENCP_SEL 196 186 - #define CLKID_CTS_VDAC_SEL 197 187 - #define CLKID_HDMI_TX_SEL 198 188 - #define CLKID_HDMI_SEL 203 189 - #define CLKID_HDMI_DIV 204 190 - 191 - #define NR_CLKS 207 192 - 193 - /* include the CLKIDs that have been made part of the DT binding */ 194 - #include <dt-bindings/clock/gxbb-clkc.h> 195 - 196 115 #endif /* __GXBB_H */
+5 -6
drivers/clk/meson/meson-aoclk.c
··· 13 13 #include <linux/platform_device.h> 14 14 #include <linux/reset-controller.h> 15 15 #include <linux/mfd/syscon.h> 16 - #include <linux/of_device.h> 16 + #include <linux/of.h> 17 17 #include <linux/module.h> 18 18 19 19 #include <linux/slab.h> ··· 75 75 data->clks[clkid]->map = regmap; 76 76 77 77 /* Register all clks */ 78 - for (clkid = 0; clkid < data->hw_data->num; clkid++) { 79 - if (!data->hw_data->hws[clkid]) 78 + for (clkid = 0; clkid < data->hw_clks.num; clkid++) { 79 + if (!data->hw_clks.hws[clkid]) 80 80 continue; 81 81 82 - ret = devm_clk_hw_register(dev, data->hw_data->hws[clkid]); 82 + ret = devm_clk_hw_register(dev, data->hw_clks.hws[clkid]); 83 83 if (ret) { 84 84 dev_err(dev, "Clock registration failed\n"); 85 85 return ret; 86 86 } 87 87 } 88 88 89 - return devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, 90 - (void *) data->hw_data); 89 + return devm_of_clk_add_hw_provider(dev, meson_clk_hw_get, (void *)&data->hw_clks); 91 90 } 92 91 EXPORT_SYMBOL_GPL(meson_aoclkc_probe); 93 92 MODULE_LICENSE("GPL v2");
+2 -1
drivers/clk/meson/meson-aoclk.h
··· 17 17 #include <linux/reset-controller.h> 18 18 19 19 #include "clk-regmap.h" 20 + #include "meson-clkc-utils.h" 20 21 21 22 struct meson_aoclk_data { 22 23 const unsigned int reset_reg; ··· 25 24 const unsigned int *reset; 26 25 const int num_clks; 27 26 struct clk_regmap **clks; 28 - const struct clk_hw_onecell_data *hw_data; 27 + struct meson_clk_hw_data hw_clks; 29 28 }; 30 29 31 30 struct meson_aoclk_reset_controller {
+25
drivers/clk/meson/meson-clkc-utils.c
··· 1 + // SPDX-License-Identifier: GPL-2.0+ 2 + /* 3 + * Copyright (c) 2023 Neil Armstrong <neil.armstrong@linaro.org> 4 + */ 5 + 6 + #include <linux/of_device.h> 7 + #include <linux/clk-provider.h> 8 + #include <linux/module.h> 9 + #include "meson-clkc-utils.h" 10 + 11 + struct clk_hw *meson_clk_hw_get(struct of_phandle_args *clkspec, void *clk_hw_data) 12 + { 13 + const struct meson_clk_hw_data *data = clk_hw_data; 14 + unsigned int idx = clkspec->args[0]; 15 + 16 + if (idx >= data->num) { 17 + pr_err("%s: invalid index %u\n", __func__, idx); 18 + return ERR_PTR(-EINVAL); 19 + } 20 + 21 + return data->hws[idx]; 22 + } 23 + EXPORT_SYMBOL_GPL(meson_clk_hw_get); 24 + 25 + MODULE_LICENSE("GPL");
+19
drivers/clk/meson/meson-clkc-utils.h
··· 1 + /* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */ 2 + /* 3 + * Copyright (c) 2023 Neil Armstrong <neil.armstrong@linaro.org> 4 + */ 5 + 6 + #ifndef __MESON_CLKC_UTILS_H__ 7 + #define __MESON_CLKC_UTILS_H__ 8 + 9 + #include <linux/of_device.h> 10 + #include <linux/clk-provider.h> 11 + 12 + struct meson_clk_hw_data { 13 + struct clk_hw **hws; 14 + unsigned int num; 15 + }; 16 + 17 + struct clk_hw *meson_clk_hw_get(struct of_phandle_args *clkspec, void *clk_hw_data); 18 + 19 + #endif
+5 -6
drivers/clk/meson/meson-eeclk.c
··· 5 5 */ 6 6 7 7 #include <linux/clk-provider.h> 8 - #include <linux/of_device.h> 8 + #include <linux/of.h> 9 9 #include <linux/platform_device.h> 10 10 #include <linux/mfd/syscon.h> 11 11 #include <linux/regmap.h> ··· 43 43 for (i = 0; i < data->regmap_clk_num; i++) 44 44 data->regmap_clks[i]->map = map; 45 45 46 - for (i = 0; i < data->hw_onecell_data->num; i++) { 46 + for (i = 0; i < data->hw_clks.num; i++) { 47 47 /* array might be sparse */ 48 - if (!data->hw_onecell_data->hws[i]) 48 + if (!data->hw_clks.hws[i]) 49 49 continue; 50 50 51 - ret = devm_clk_hw_register(dev, data->hw_onecell_data->hws[i]); 51 + ret = devm_clk_hw_register(dev, data->hw_clks.hws[i]); 52 52 if (ret) { 53 53 dev_err(dev, "Clock registration failed\n"); 54 54 return ret; 55 55 } 56 56 } 57 57 58 - return devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, 59 - data->hw_onecell_data); 58 + return devm_of_clk_add_hw_provider(dev, meson_clk_hw_get, (void *)&data->hw_clks); 60 59 } 61 60 EXPORT_SYMBOL_GPL(meson_eeclkc_probe); 62 61 MODULE_LICENSE("GPL v2");
+2 -1
drivers/clk/meson/meson-eeclk.h
··· 9 9 10 10 #include <linux/clk-provider.h> 11 11 #include "clk-regmap.h" 12 + #include "meson-clkc-utils.h" 12 13 13 14 struct platform_device; 14 15 ··· 18 17 unsigned int regmap_clk_num; 19 18 const struct reg_sequence *init_regs; 20 19 unsigned int init_count; 21 - struct clk_hw_onecell_data *hw_onecell_data; 20 + struct meson_clk_hw_data hw_clks; 22 21 }; 23 22 24 23 int meson_eeclkc_probe(struct platform_device *pdev);
+658 -652
drivers/clk/meson/meson8b.c
··· 18 18 19 19 #include "meson8b.h" 20 20 #include "clk-regmap.h" 21 + #include "meson-clkc-utils.h" 21 22 #include "clk-pll.h" 22 23 #include "clk-mpll.h" 24 + 25 + #include <dt-bindings/clock/meson8b-clkc.h> 26 + #include <dt-bindings/reset/amlogic,meson8b-clkc-reset.h> 23 27 24 28 static DEFINE_SPINLOCK(meson_clk_lock); 25 29 ··· 2776 2772 static MESON_GATE(meson8b_ao_ahb_bus, HHI_GCLK_AO, 2); 2777 2773 static MESON_GATE(meson8b_ao_iface, HHI_GCLK_AO, 3); 2778 2774 2779 - static struct clk_hw_onecell_data meson8_hw_onecell_data = { 2780 - .hws = { 2781 - [CLKID_PLL_FIXED] = &meson8b_fixed_pll.hw, 2782 - [CLKID_PLL_VID] = &meson8b_vid_pll.hw, 2783 - [CLKID_PLL_SYS] = &meson8b_sys_pll.hw, 2784 - [CLKID_FCLK_DIV2] = &meson8b_fclk_div2.hw, 2785 - [CLKID_FCLK_DIV3] = &meson8b_fclk_div3.hw, 2786 - [CLKID_FCLK_DIV4] = &meson8b_fclk_div4.hw, 2787 - [CLKID_FCLK_DIV5] = &meson8b_fclk_div5.hw, 2788 - [CLKID_FCLK_DIV7] = &meson8b_fclk_div7.hw, 2789 - [CLKID_CPUCLK] = &meson8b_cpu_clk.hw, 2790 - [CLKID_MPEG_SEL] = &meson8b_mpeg_clk_sel.hw, 2791 - [CLKID_MPEG_DIV] = &meson8b_mpeg_clk_div.hw, 2792 - [CLKID_CLK81] = &meson8b_clk81.hw, 2793 - [CLKID_DDR] = &meson8b_ddr.hw, 2794 - [CLKID_DOS] = &meson8b_dos.hw, 2795 - [CLKID_ISA] = &meson8b_isa.hw, 2796 - [CLKID_PL301] = &meson8b_pl301.hw, 2797 - [CLKID_PERIPHS] = &meson8b_periphs.hw, 2798 - [CLKID_SPICC] = &meson8b_spicc.hw, 2799 - [CLKID_I2C] = &meson8b_i2c.hw, 2800 - [CLKID_SAR_ADC] = &meson8b_sar_adc.hw, 2801 - [CLKID_SMART_CARD] = &meson8b_smart_card.hw, 2802 - [CLKID_RNG0] = &meson8b_rng0.hw, 2803 - [CLKID_UART0] = &meson8b_uart0.hw, 2804 - [CLKID_SDHC] = &meson8b_sdhc.hw, 2805 - [CLKID_STREAM] = &meson8b_stream.hw, 2806 - [CLKID_ASYNC_FIFO] = &meson8b_async_fifo.hw, 2807 - [CLKID_SDIO] = &meson8b_sdio.hw, 2808 - [CLKID_ABUF] = &meson8b_abuf.hw, 2809 - [CLKID_HIU_IFACE] = &meson8b_hiu_iface.hw, 2810 - [CLKID_ASSIST_MISC] = &meson8b_assist_misc.hw, 2811 - [CLKID_SPI] = &meson8b_spi.hw, 2812 - [CLKID_I2S_SPDIF] = &meson8b_i2s_spdif.hw, 2813 - [CLKID_ETH] = &meson8b_eth.hw, 2814 - [CLKID_DEMUX] = &meson8b_demux.hw, 2815 - [CLKID_AIU_GLUE] = &meson8b_aiu_glue.hw, 2816 - [CLKID_IEC958] = &meson8b_iec958.hw, 2817 - [CLKID_I2S_OUT] = &meson8b_i2s_out.hw, 2818 - [CLKID_AMCLK] = &meson8b_amclk.hw, 2819 - [CLKID_AIFIFO2] = &meson8b_aififo2.hw, 2820 - [CLKID_MIXER] = &meson8b_mixer.hw, 2821 - [CLKID_MIXER_IFACE] = &meson8b_mixer_iface.hw, 2822 - [CLKID_ADC] = &meson8b_adc.hw, 2823 - [CLKID_BLKMV] = &meson8b_blkmv.hw, 2824 - [CLKID_AIU] = &meson8b_aiu.hw, 2825 - [CLKID_UART1] = &meson8b_uart1.hw, 2826 - [CLKID_G2D] = &meson8b_g2d.hw, 2827 - [CLKID_USB0] = &meson8b_usb0.hw, 2828 - [CLKID_USB1] = &meson8b_usb1.hw, 2829 - [CLKID_RESET] = &meson8b_reset.hw, 2830 - [CLKID_NAND] = &meson8b_nand.hw, 2831 - [CLKID_DOS_PARSER] = &meson8b_dos_parser.hw, 2832 - [CLKID_USB] = &meson8b_usb.hw, 2833 - [CLKID_VDIN1] = &meson8b_vdin1.hw, 2834 - [CLKID_AHB_ARB0] = &meson8b_ahb_arb0.hw, 2835 - [CLKID_EFUSE] = &meson8b_efuse.hw, 2836 - [CLKID_BOOT_ROM] = &meson8b_boot_rom.hw, 2837 - [CLKID_AHB_DATA_BUS] = &meson8b_ahb_data_bus.hw, 2838 - [CLKID_AHB_CTRL_BUS] = &meson8b_ahb_ctrl_bus.hw, 2839 - [CLKID_HDMI_INTR_SYNC] = &meson8b_hdmi_intr_sync.hw, 2840 - [CLKID_HDMI_PCLK] = &meson8b_hdmi_pclk.hw, 2841 - [CLKID_USB1_DDR_BRIDGE] = &meson8b_usb1_ddr_bridge.hw, 2842 - [CLKID_USB0_DDR_BRIDGE] = &meson8b_usb0_ddr_bridge.hw, 2843 - [CLKID_MMC_PCLK] = &meson8b_mmc_pclk.hw, 2844 - [CLKID_DVIN] = &meson8b_dvin.hw, 2845 - [CLKID_UART2] = &meson8b_uart2.hw, 2846 - [CLKID_SANA] = &meson8b_sana.hw, 2847 - [CLKID_VPU_INTR] = &meson8b_vpu_intr.hw, 2848 - [CLKID_SEC_AHB_AHB3_BRIDGE] = &meson8b_sec_ahb_ahb3_bridge.hw, 2849 - [CLKID_CLK81_A9] = &meson8b_clk81_a9.hw, 2850 - [CLKID_VCLK2_VENCI0] = &meson8b_vclk2_venci0.hw, 2851 - [CLKID_VCLK2_VENCI1] = &meson8b_vclk2_venci1.hw, 2852 - [CLKID_VCLK2_VENCP0] = &meson8b_vclk2_vencp0.hw, 2853 - [CLKID_VCLK2_VENCP1] = &meson8b_vclk2_vencp1.hw, 2854 - [CLKID_GCLK_VENCI_INT] = &meson8b_gclk_venci_int.hw, 2855 - [CLKID_GCLK_VENCP_INT] = &meson8b_gclk_vencp_int.hw, 2856 - [CLKID_DAC_CLK] = &meson8b_dac_clk.hw, 2857 - [CLKID_AOCLK_GATE] = &meson8b_aoclk_gate.hw, 2858 - [CLKID_IEC958_GATE] = &meson8b_iec958_gate.hw, 2859 - [CLKID_ENC480P] = &meson8b_enc480p.hw, 2860 - [CLKID_RNG1] = &meson8b_rng1.hw, 2861 - [CLKID_GCLK_VENCL_INT] = &meson8b_gclk_vencl_int.hw, 2862 - [CLKID_VCLK2_VENCLMCC] = &meson8b_vclk2_venclmcc.hw, 2863 - [CLKID_VCLK2_VENCL] = &meson8b_vclk2_vencl.hw, 2864 - [CLKID_VCLK2_OTHER] = &meson8b_vclk2_other.hw, 2865 - [CLKID_EDP] = &meson8b_edp.hw, 2866 - [CLKID_AO_MEDIA_CPU] = &meson8b_ao_media_cpu.hw, 2867 - [CLKID_AO_AHB_SRAM] = &meson8b_ao_ahb_sram.hw, 2868 - [CLKID_AO_AHB_BUS] = &meson8b_ao_ahb_bus.hw, 2869 - [CLKID_AO_IFACE] = &meson8b_ao_iface.hw, 2870 - [CLKID_MPLL0] = &meson8b_mpll0.hw, 2871 - [CLKID_MPLL1] = &meson8b_mpll1.hw, 2872 - [CLKID_MPLL2] = &meson8b_mpll2.hw, 2873 - [CLKID_MPLL0_DIV] = &meson8b_mpll0_div.hw, 2874 - [CLKID_MPLL1_DIV] = &meson8b_mpll1_div.hw, 2875 - [CLKID_MPLL2_DIV] = &meson8b_mpll2_div.hw, 2876 - [CLKID_CPU_IN_SEL] = &meson8b_cpu_in_sel.hw, 2877 - [CLKID_CPU_IN_DIV2] = &meson8b_cpu_in_div2.hw, 2878 - [CLKID_CPU_IN_DIV3] = &meson8b_cpu_in_div3.hw, 2879 - [CLKID_CPU_SCALE_DIV] = &meson8b_cpu_scale_div.hw, 2880 - [CLKID_CPU_SCALE_OUT_SEL] = &meson8b_cpu_scale_out_sel.hw, 2881 - [CLKID_MPLL_PREDIV] = &meson8b_mpll_prediv.hw, 2882 - [CLKID_FCLK_DIV2_DIV] = &meson8b_fclk_div2_div.hw, 2883 - [CLKID_FCLK_DIV3_DIV] = &meson8b_fclk_div3_div.hw, 2884 - [CLKID_FCLK_DIV4_DIV] = &meson8b_fclk_div4_div.hw, 2885 - [CLKID_FCLK_DIV5_DIV] = &meson8b_fclk_div5_div.hw, 2886 - [CLKID_FCLK_DIV7_DIV] = &meson8b_fclk_div7_div.hw, 2887 - [CLKID_NAND_SEL] = &meson8b_nand_clk_sel.hw, 2888 - [CLKID_NAND_DIV] = &meson8b_nand_clk_div.hw, 2889 - [CLKID_NAND_CLK] = &meson8b_nand_clk_gate.hw, 2890 - [CLKID_PLL_FIXED_DCO] = &meson8b_fixed_pll_dco.hw, 2891 - [CLKID_HDMI_PLL_DCO] = &meson8b_hdmi_pll_dco.hw, 2892 - [CLKID_PLL_SYS_DCO] = &meson8b_sys_pll_dco.hw, 2893 - [CLKID_CPU_CLK_DIV2] = &meson8b_cpu_clk_div2.hw, 2894 - [CLKID_CPU_CLK_DIV3] = &meson8b_cpu_clk_div3.hw, 2895 - [CLKID_CPU_CLK_DIV4] = &meson8b_cpu_clk_div4.hw, 2896 - [CLKID_CPU_CLK_DIV5] = &meson8b_cpu_clk_div5.hw, 2897 - [CLKID_CPU_CLK_DIV6] = &meson8b_cpu_clk_div6.hw, 2898 - [CLKID_CPU_CLK_DIV7] = &meson8b_cpu_clk_div7.hw, 2899 - [CLKID_CPU_CLK_DIV8] = &meson8b_cpu_clk_div8.hw, 2900 - [CLKID_APB_SEL] = &meson8b_apb_clk_sel.hw, 2901 - [CLKID_APB] = &meson8b_apb_clk_gate.hw, 2902 - [CLKID_PERIPH_SEL] = &meson8b_periph_clk_sel.hw, 2903 - [CLKID_PERIPH] = &meson8b_periph_clk_gate.hw, 2904 - [CLKID_AXI_SEL] = &meson8b_axi_clk_sel.hw, 2905 - [CLKID_AXI] = &meson8b_axi_clk_gate.hw, 2906 - [CLKID_L2_DRAM_SEL] = &meson8b_l2_dram_clk_sel.hw, 2907 - [CLKID_L2_DRAM] = &meson8b_l2_dram_clk_gate.hw, 2908 - [CLKID_HDMI_PLL_LVDS_OUT] = &meson8b_hdmi_pll_lvds_out.hw, 2909 - [CLKID_HDMI_PLL_HDMI_OUT] = &meson8b_hdmi_pll_hdmi_out.hw, 2910 - [CLKID_VID_PLL_IN_SEL] = &meson8b_vid_pll_in_sel.hw, 2911 - [CLKID_VID_PLL_IN_EN] = &meson8b_vid_pll_in_en.hw, 2912 - [CLKID_VID_PLL_PRE_DIV] = &meson8b_vid_pll_pre_div.hw, 2913 - [CLKID_VID_PLL_POST_DIV] = &meson8b_vid_pll_post_div.hw, 2914 - [CLKID_VID_PLL_FINAL_DIV] = &meson8b_vid_pll_final_div.hw, 2915 - [CLKID_VCLK_IN_SEL] = &meson8b_vclk_in_sel.hw, 2916 - [CLKID_VCLK_IN_EN] = &meson8b_vclk_in_en.hw, 2917 - [CLKID_VCLK_EN] = &meson8b_vclk_en.hw, 2918 - [CLKID_VCLK_DIV1] = &meson8b_vclk_div1_gate.hw, 2919 - [CLKID_VCLK_DIV2_DIV] = &meson8b_vclk_div2_div.hw, 2920 - [CLKID_VCLK_DIV2] = &meson8b_vclk_div2_div_gate.hw, 2921 - [CLKID_VCLK_DIV4_DIV] = &meson8b_vclk_div4_div.hw, 2922 - [CLKID_VCLK_DIV4] = &meson8b_vclk_div4_div_gate.hw, 2923 - [CLKID_VCLK_DIV6_DIV] = &meson8b_vclk_div6_div.hw, 2924 - [CLKID_VCLK_DIV6] = &meson8b_vclk_div6_div_gate.hw, 2925 - [CLKID_VCLK_DIV12_DIV] = &meson8b_vclk_div12_div.hw, 2926 - [CLKID_VCLK_DIV12] = &meson8b_vclk_div12_div_gate.hw, 2927 - [CLKID_VCLK2_IN_SEL] = &meson8b_vclk2_in_sel.hw, 2928 - [CLKID_VCLK2_IN_EN] = &meson8b_vclk2_clk_in_en.hw, 2929 - [CLKID_VCLK2_EN] = &meson8b_vclk2_clk_en.hw, 2930 - [CLKID_VCLK2_DIV1] = &meson8b_vclk2_div1_gate.hw, 2931 - [CLKID_VCLK2_DIV2_DIV] = &meson8b_vclk2_div2_div.hw, 2932 - [CLKID_VCLK2_DIV2] = &meson8b_vclk2_div2_div_gate.hw, 2933 - [CLKID_VCLK2_DIV4_DIV] = &meson8b_vclk2_div4_div.hw, 2934 - [CLKID_VCLK2_DIV4] = &meson8b_vclk2_div4_div_gate.hw, 2935 - [CLKID_VCLK2_DIV6_DIV] = &meson8b_vclk2_div6_div.hw, 2936 - [CLKID_VCLK2_DIV6] = &meson8b_vclk2_div6_div_gate.hw, 2937 - [CLKID_VCLK2_DIV12_DIV] = &meson8b_vclk2_div12_div.hw, 2938 - [CLKID_VCLK2_DIV12] = &meson8b_vclk2_div12_div_gate.hw, 2939 - [CLKID_CTS_ENCT_SEL] = &meson8b_cts_enct_sel.hw, 2940 - [CLKID_CTS_ENCT] = &meson8b_cts_enct.hw, 2941 - [CLKID_CTS_ENCP_SEL] = &meson8b_cts_encp_sel.hw, 2942 - [CLKID_CTS_ENCP] = &meson8b_cts_encp.hw, 2943 - [CLKID_CTS_ENCI_SEL] = &meson8b_cts_enci_sel.hw, 2944 - [CLKID_CTS_ENCI] = &meson8b_cts_enci.hw, 2945 - [CLKID_HDMI_TX_PIXEL_SEL] = &meson8b_hdmi_tx_pixel_sel.hw, 2946 - [CLKID_HDMI_TX_PIXEL] = &meson8b_hdmi_tx_pixel.hw, 2947 - [CLKID_CTS_ENCL_SEL] = &meson8b_cts_encl_sel.hw, 2948 - [CLKID_CTS_ENCL] = &meson8b_cts_encl.hw, 2949 - [CLKID_CTS_VDAC0_SEL] = &meson8b_cts_vdac0_sel.hw, 2950 - [CLKID_CTS_VDAC0] = &meson8b_cts_vdac0.hw, 2951 - [CLKID_HDMI_SYS_SEL] = &meson8b_hdmi_sys_sel.hw, 2952 - [CLKID_HDMI_SYS_DIV] = &meson8b_hdmi_sys_div.hw, 2953 - [CLKID_HDMI_SYS] = &meson8b_hdmi_sys.hw, 2954 - [CLKID_MALI_0_SEL] = &meson8b_mali_0_sel.hw, 2955 - [CLKID_MALI_0_DIV] = &meson8b_mali_0_div.hw, 2956 - [CLKID_MALI] = &meson8b_mali_0.hw, 2957 - [CLKID_VPU_0_SEL] = &meson8b_vpu_0_sel.hw, 2958 - [CLKID_VPU_0_DIV] = &meson8b_vpu_0_div.hw, 2959 - [CLKID_VPU] = &meson8b_vpu_0.hw, 2960 - [CLKID_VDEC_1_SEL] = &meson8b_vdec_1_sel.hw, 2961 - [CLKID_VDEC_1_1_DIV] = &meson8b_vdec_1_1_div.hw, 2962 - [CLKID_VDEC_1] = &meson8b_vdec_1_1.hw, 2963 - [CLKID_VDEC_HCODEC_SEL] = &meson8b_vdec_hcodec_sel.hw, 2964 - [CLKID_VDEC_HCODEC_DIV] = &meson8b_vdec_hcodec_div.hw, 2965 - [CLKID_VDEC_HCODEC] = &meson8b_vdec_hcodec.hw, 2966 - [CLKID_VDEC_2_SEL] = &meson8b_vdec_2_sel.hw, 2967 - [CLKID_VDEC_2_DIV] = &meson8b_vdec_2_div.hw, 2968 - [CLKID_VDEC_2] = &meson8b_vdec_2.hw, 2969 - [CLKID_VDEC_HEVC_SEL] = &meson8b_vdec_hevc_sel.hw, 2970 - [CLKID_VDEC_HEVC_DIV] = &meson8b_vdec_hevc_div.hw, 2971 - [CLKID_VDEC_HEVC_EN] = &meson8b_vdec_hevc_en.hw, 2972 - [CLKID_VDEC_HEVC] = &meson8b_vdec_hevc.hw, 2973 - [CLKID_CTS_AMCLK_SEL] = &meson8b_cts_amclk_sel.hw, 2974 - [CLKID_CTS_AMCLK_DIV] = &meson8b_cts_amclk_div.hw, 2975 - [CLKID_CTS_AMCLK] = &meson8b_cts_amclk.hw, 2976 - [CLKID_CTS_MCLK_I958_SEL] = &meson8b_cts_mclk_i958_sel.hw, 2977 - [CLKID_CTS_MCLK_I958_DIV] = &meson8b_cts_mclk_i958_div.hw, 2978 - [CLKID_CTS_MCLK_I958] = &meson8b_cts_mclk_i958.hw, 2979 - [CLKID_CTS_I958] = &meson8b_cts_i958.hw, 2980 - [CLKID_VID_PLL_LVDS_EN] = &meson8b_vid_pll_lvds_en.hw, 2981 - [CLKID_HDMI_PLL_DCO_IN] = &hdmi_pll_dco_in.hw, 2982 - [CLK_NR_CLKS] = NULL, 2983 - }, 2984 - .num = CLK_NR_CLKS, 2775 + static struct clk_hw *meson8_hw_clks[] = { 2776 + [CLKID_PLL_FIXED] = &meson8b_fixed_pll.hw, 2777 + [CLKID_PLL_VID] = &meson8b_vid_pll.hw, 2778 + [CLKID_PLL_SYS] = &meson8b_sys_pll.hw, 2779 + [CLKID_FCLK_DIV2] = &meson8b_fclk_div2.hw, 2780 + [CLKID_FCLK_DIV3] = &meson8b_fclk_div3.hw, 2781 + [CLKID_FCLK_DIV4] = &meson8b_fclk_div4.hw, 2782 + [CLKID_FCLK_DIV5] = &meson8b_fclk_div5.hw, 2783 + [CLKID_FCLK_DIV7] = &meson8b_fclk_div7.hw, 2784 + [CLKID_CPUCLK] = &meson8b_cpu_clk.hw, 2785 + [CLKID_MPEG_SEL] = &meson8b_mpeg_clk_sel.hw, 2786 + [CLKID_MPEG_DIV] = &meson8b_mpeg_clk_div.hw, 2787 + [CLKID_CLK81] = &meson8b_clk81.hw, 2788 + [CLKID_DDR] = &meson8b_ddr.hw, 2789 + [CLKID_DOS] = &meson8b_dos.hw, 2790 + [CLKID_ISA] = &meson8b_isa.hw, 2791 + [CLKID_PL301] = &meson8b_pl301.hw, 2792 + [CLKID_PERIPHS] = &meson8b_periphs.hw, 2793 + [CLKID_SPICC] = &meson8b_spicc.hw, 2794 + [CLKID_I2C] = &meson8b_i2c.hw, 2795 + [CLKID_SAR_ADC] = &meson8b_sar_adc.hw, 2796 + [CLKID_SMART_CARD] = &meson8b_smart_card.hw, 2797 + [CLKID_RNG0] = &meson8b_rng0.hw, 2798 + [CLKID_UART0] = &meson8b_uart0.hw, 2799 + [CLKID_SDHC] = &meson8b_sdhc.hw, 2800 + [CLKID_STREAM] = &meson8b_stream.hw, 2801 + [CLKID_ASYNC_FIFO] = &meson8b_async_fifo.hw, 2802 + [CLKID_SDIO] = &meson8b_sdio.hw, 2803 + [CLKID_ABUF] = &meson8b_abuf.hw, 2804 + [CLKID_HIU_IFACE] = &meson8b_hiu_iface.hw, 2805 + [CLKID_ASSIST_MISC] = &meson8b_assist_misc.hw, 2806 + [CLKID_SPI] = &meson8b_spi.hw, 2807 + [CLKID_I2S_SPDIF] = &meson8b_i2s_spdif.hw, 2808 + [CLKID_ETH] = &meson8b_eth.hw, 2809 + [CLKID_DEMUX] = &meson8b_demux.hw, 2810 + [CLKID_AIU_GLUE] = &meson8b_aiu_glue.hw, 2811 + [CLKID_IEC958] = &meson8b_iec958.hw, 2812 + [CLKID_I2S_OUT] = &meson8b_i2s_out.hw, 2813 + [CLKID_AMCLK] = &meson8b_amclk.hw, 2814 + [CLKID_AIFIFO2] = &meson8b_aififo2.hw, 2815 + [CLKID_MIXER] = &meson8b_mixer.hw, 2816 + [CLKID_MIXER_IFACE] = &meson8b_mixer_iface.hw, 2817 + [CLKID_ADC] = &meson8b_adc.hw, 2818 + [CLKID_BLKMV] = &meson8b_blkmv.hw, 2819 + [CLKID_AIU] = &meson8b_aiu.hw, 2820 + [CLKID_UART1] = &meson8b_uart1.hw, 2821 + [CLKID_G2D] = &meson8b_g2d.hw, 2822 + [CLKID_USB0] = &meson8b_usb0.hw, 2823 + [CLKID_USB1] = &meson8b_usb1.hw, 2824 + [CLKID_RESET] = &meson8b_reset.hw, 2825 + [CLKID_NAND] = &meson8b_nand.hw, 2826 + [CLKID_DOS_PARSER] = &meson8b_dos_parser.hw, 2827 + [CLKID_USB] = &meson8b_usb.hw, 2828 + [CLKID_VDIN1] = &meson8b_vdin1.hw, 2829 + [CLKID_AHB_ARB0] = &meson8b_ahb_arb0.hw, 2830 + [CLKID_EFUSE] = &meson8b_efuse.hw, 2831 + [CLKID_BOOT_ROM] = &meson8b_boot_rom.hw, 2832 + [CLKID_AHB_DATA_BUS] = &meson8b_ahb_data_bus.hw, 2833 + [CLKID_AHB_CTRL_BUS] = &meson8b_ahb_ctrl_bus.hw, 2834 + [CLKID_HDMI_INTR_SYNC] = &meson8b_hdmi_intr_sync.hw, 2835 + [CLKID_HDMI_PCLK] = &meson8b_hdmi_pclk.hw, 2836 + [CLKID_USB1_DDR_BRIDGE] = &meson8b_usb1_ddr_bridge.hw, 2837 + [CLKID_USB0_DDR_BRIDGE] = &meson8b_usb0_ddr_bridge.hw, 2838 + [CLKID_MMC_PCLK] = &meson8b_mmc_pclk.hw, 2839 + [CLKID_DVIN] = &meson8b_dvin.hw, 2840 + [CLKID_UART2] = &meson8b_uart2.hw, 2841 + [CLKID_SANA] = &meson8b_sana.hw, 2842 + [CLKID_VPU_INTR] = &meson8b_vpu_intr.hw, 2843 + [CLKID_SEC_AHB_AHB3_BRIDGE] = &meson8b_sec_ahb_ahb3_bridge.hw, 2844 + [CLKID_CLK81_A9] = &meson8b_clk81_a9.hw, 2845 + [CLKID_VCLK2_VENCI0] = &meson8b_vclk2_venci0.hw, 2846 + [CLKID_VCLK2_VENCI1] = &meson8b_vclk2_venci1.hw, 2847 + [CLKID_VCLK2_VENCP0] = &meson8b_vclk2_vencp0.hw, 2848 + [CLKID_VCLK2_VENCP1] = &meson8b_vclk2_vencp1.hw, 2849 + [CLKID_GCLK_VENCI_INT] = &meson8b_gclk_venci_int.hw, 2850 + [CLKID_GCLK_VENCP_INT] = &meson8b_gclk_vencp_int.hw, 2851 + [CLKID_DAC_CLK] = &meson8b_dac_clk.hw, 2852 + [CLKID_AOCLK_GATE] = &meson8b_aoclk_gate.hw, 2853 + [CLKID_IEC958_GATE] = &meson8b_iec958_gate.hw, 2854 + [CLKID_ENC480P] = &meson8b_enc480p.hw, 2855 + [CLKID_RNG1] = &meson8b_rng1.hw, 2856 + [CLKID_GCLK_VENCL_INT] = &meson8b_gclk_vencl_int.hw, 2857 + [CLKID_VCLK2_VENCLMCC] = &meson8b_vclk2_venclmcc.hw, 2858 + [CLKID_VCLK2_VENCL] = &meson8b_vclk2_vencl.hw, 2859 + [CLKID_VCLK2_OTHER] = &meson8b_vclk2_other.hw, 2860 + [CLKID_EDP] = &meson8b_edp.hw, 2861 + [CLKID_AO_MEDIA_CPU] = &meson8b_ao_media_cpu.hw, 2862 + [CLKID_AO_AHB_SRAM] = &meson8b_ao_ahb_sram.hw, 2863 + [CLKID_AO_AHB_BUS] = &meson8b_ao_ahb_bus.hw, 2864 + [CLKID_AO_IFACE] = &meson8b_ao_iface.hw, 2865 + [CLKID_MPLL0] = &meson8b_mpll0.hw, 2866 + [CLKID_MPLL1] = &meson8b_mpll1.hw, 2867 + [CLKID_MPLL2] = &meson8b_mpll2.hw, 2868 + [CLKID_MPLL0_DIV] = &meson8b_mpll0_div.hw, 2869 + [CLKID_MPLL1_DIV] = &meson8b_mpll1_div.hw, 2870 + [CLKID_MPLL2_DIV] = &meson8b_mpll2_div.hw, 2871 + [CLKID_CPU_IN_SEL] = &meson8b_cpu_in_sel.hw, 2872 + [CLKID_CPU_IN_DIV2] = &meson8b_cpu_in_div2.hw, 2873 + [CLKID_CPU_IN_DIV3] = &meson8b_cpu_in_div3.hw, 2874 + [CLKID_CPU_SCALE_DIV] = &meson8b_cpu_scale_div.hw, 2875 + [CLKID_CPU_SCALE_OUT_SEL] = &meson8b_cpu_scale_out_sel.hw, 2876 + [CLKID_MPLL_PREDIV] = &meson8b_mpll_prediv.hw, 2877 + [CLKID_FCLK_DIV2_DIV] = &meson8b_fclk_div2_div.hw, 2878 + [CLKID_FCLK_DIV3_DIV] = &meson8b_fclk_div3_div.hw, 2879 + [CLKID_FCLK_DIV4_DIV] = &meson8b_fclk_div4_div.hw, 2880 + [CLKID_FCLK_DIV5_DIV] = &meson8b_fclk_div5_div.hw, 2881 + [CLKID_FCLK_DIV7_DIV] = &meson8b_fclk_div7_div.hw, 2882 + [CLKID_NAND_SEL] = &meson8b_nand_clk_sel.hw, 2883 + [CLKID_NAND_DIV] = &meson8b_nand_clk_div.hw, 2884 + [CLKID_NAND_CLK] = &meson8b_nand_clk_gate.hw, 2885 + [CLKID_PLL_FIXED_DCO] = &meson8b_fixed_pll_dco.hw, 2886 + [CLKID_HDMI_PLL_DCO] = &meson8b_hdmi_pll_dco.hw, 2887 + [CLKID_PLL_SYS_DCO] = &meson8b_sys_pll_dco.hw, 2888 + [CLKID_CPU_CLK_DIV2] = &meson8b_cpu_clk_div2.hw, 2889 + [CLKID_CPU_CLK_DIV3] = &meson8b_cpu_clk_div3.hw, 2890 + [CLKID_CPU_CLK_DIV4] = &meson8b_cpu_clk_div4.hw, 2891 + [CLKID_CPU_CLK_DIV5] = &meson8b_cpu_clk_div5.hw, 2892 + [CLKID_CPU_CLK_DIV6] = &meson8b_cpu_clk_div6.hw, 2893 + [CLKID_CPU_CLK_DIV7] = &meson8b_cpu_clk_div7.hw, 2894 + [CLKID_CPU_CLK_DIV8] = &meson8b_cpu_clk_div8.hw, 2895 + [CLKID_APB_SEL] = &meson8b_apb_clk_sel.hw, 2896 + [CLKID_APB] = &meson8b_apb_clk_gate.hw, 2897 + [CLKID_PERIPH_SEL] = &meson8b_periph_clk_sel.hw, 2898 + [CLKID_PERIPH] = &meson8b_periph_clk_gate.hw, 2899 + [CLKID_AXI_SEL] = &meson8b_axi_clk_sel.hw, 2900 + [CLKID_AXI] = &meson8b_axi_clk_gate.hw, 2901 + [CLKID_L2_DRAM_SEL] = &meson8b_l2_dram_clk_sel.hw, 2902 + [CLKID_L2_DRAM] = &meson8b_l2_dram_clk_gate.hw, 2903 + [CLKID_HDMI_PLL_LVDS_OUT] = &meson8b_hdmi_pll_lvds_out.hw, 2904 + [CLKID_HDMI_PLL_HDMI_OUT] = &meson8b_hdmi_pll_hdmi_out.hw, 2905 + [CLKID_VID_PLL_IN_SEL] = &meson8b_vid_pll_in_sel.hw, 2906 + [CLKID_VID_PLL_IN_EN] = &meson8b_vid_pll_in_en.hw, 2907 + [CLKID_VID_PLL_PRE_DIV] = &meson8b_vid_pll_pre_div.hw, 2908 + [CLKID_VID_PLL_POST_DIV] = &meson8b_vid_pll_post_div.hw, 2909 + [CLKID_VID_PLL_FINAL_DIV] = &meson8b_vid_pll_final_div.hw, 2910 + [CLKID_VCLK_IN_SEL] = &meson8b_vclk_in_sel.hw, 2911 + [CLKID_VCLK_IN_EN] = &meson8b_vclk_in_en.hw, 2912 + [CLKID_VCLK_EN] = &meson8b_vclk_en.hw, 2913 + [CLKID_VCLK_DIV1] = &meson8b_vclk_div1_gate.hw, 2914 + [CLKID_VCLK_DIV2_DIV] = &meson8b_vclk_div2_div.hw, 2915 + [CLKID_VCLK_DIV2] = &meson8b_vclk_div2_div_gate.hw, 2916 + [CLKID_VCLK_DIV4_DIV] = &meson8b_vclk_div4_div.hw, 2917 + [CLKID_VCLK_DIV4] = &meson8b_vclk_div4_div_gate.hw, 2918 + [CLKID_VCLK_DIV6_DIV] = &meson8b_vclk_div6_div.hw, 2919 + [CLKID_VCLK_DIV6] = &meson8b_vclk_div6_div_gate.hw, 2920 + [CLKID_VCLK_DIV12_DIV] = &meson8b_vclk_div12_div.hw, 2921 + [CLKID_VCLK_DIV12] = &meson8b_vclk_div12_div_gate.hw, 2922 + [CLKID_VCLK2_IN_SEL] = &meson8b_vclk2_in_sel.hw, 2923 + [CLKID_VCLK2_IN_EN] = &meson8b_vclk2_clk_in_en.hw, 2924 + [CLKID_VCLK2_EN] = &meson8b_vclk2_clk_en.hw, 2925 + [CLKID_VCLK2_DIV1] = &meson8b_vclk2_div1_gate.hw, 2926 + [CLKID_VCLK2_DIV2_DIV] = &meson8b_vclk2_div2_div.hw, 2927 + [CLKID_VCLK2_DIV2] = &meson8b_vclk2_div2_div_gate.hw, 2928 + [CLKID_VCLK2_DIV4_DIV] = &meson8b_vclk2_div4_div.hw, 2929 + [CLKID_VCLK2_DIV4] = &meson8b_vclk2_div4_div_gate.hw, 2930 + [CLKID_VCLK2_DIV6_DIV] = &meson8b_vclk2_div6_div.hw, 2931 + [CLKID_VCLK2_DIV6] = &meson8b_vclk2_div6_div_gate.hw, 2932 + [CLKID_VCLK2_DIV12_DIV] = &meson8b_vclk2_div12_div.hw, 2933 + [CLKID_VCLK2_DIV12] = &meson8b_vclk2_div12_div_gate.hw, 2934 + [CLKID_CTS_ENCT_SEL] = &meson8b_cts_enct_sel.hw, 2935 + [CLKID_CTS_ENCT] = &meson8b_cts_enct.hw, 2936 + [CLKID_CTS_ENCP_SEL] = &meson8b_cts_encp_sel.hw, 2937 + [CLKID_CTS_ENCP] = &meson8b_cts_encp.hw, 2938 + [CLKID_CTS_ENCI_SEL] = &meson8b_cts_enci_sel.hw, 2939 + [CLKID_CTS_ENCI] = &meson8b_cts_enci.hw, 2940 + [CLKID_HDMI_TX_PIXEL_SEL] = &meson8b_hdmi_tx_pixel_sel.hw, 2941 + [CLKID_HDMI_TX_PIXEL] = &meson8b_hdmi_tx_pixel.hw, 2942 + [CLKID_CTS_ENCL_SEL] = &meson8b_cts_encl_sel.hw, 2943 + [CLKID_CTS_ENCL] = &meson8b_cts_encl.hw, 2944 + [CLKID_CTS_VDAC0_SEL] = &meson8b_cts_vdac0_sel.hw, 2945 + [CLKID_CTS_VDAC0] = &meson8b_cts_vdac0.hw, 2946 + [CLKID_HDMI_SYS_SEL] = &meson8b_hdmi_sys_sel.hw, 2947 + [CLKID_HDMI_SYS_DIV] = &meson8b_hdmi_sys_div.hw, 2948 + [CLKID_HDMI_SYS] = &meson8b_hdmi_sys.hw, 2949 + [CLKID_MALI_0_SEL] = &meson8b_mali_0_sel.hw, 2950 + [CLKID_MALI_0_DIV] = &meson8b_mali_0_div.hw, 2951 + [CLKID_MALI] = &meson8b_mali_0.hw, 2952 + [CLKID_VPU_0_SEL] = &meson8b_vpu_0_sel.hw, 2953 + [CLKID_VPU_0_DIV] = &meson8b_vpu_0_div.hw, 2954 + [CLKID_VPU] = &meson8b_vpu_0.hw, 2955 + [CLKID_VDEC_1_SEL] = &meson8b_vdec_1_sel.hw, 2956 + [CLKID_VDEC_1_1_DIV] = &meson8b_vdec_1_1_div.hw, 2957 + [CLKID_VDEC_1] = &meson8b_vdec_1_1.hw, 2958 + [CLKID_VDEC_HCODEC_SEL] = &meson8b_vdec_hcodec_sel.hw, 2959 + [CLKID_VDEC_HCODEC_DIV] = &meson8b_vdec_hcodec_div.hw, 2960 + [CLKID_VDEC_HCODEC] = &meson8b_vdec_hcodec.hw, 2961 + [CLKID_VDEC_2_SEL] = &meson8b_vdec_2_sel.hw, 2962 + [CLKID_VDEC_2_DIV] = &meson8b_vdec_2_div.hw, 2963 + [CLKID_VDEC_2] = &meson8b_vdec_2.hw, 2964 + [CLKID_VDEC_HEVC_SEL] = &meson8b_vdec_hevc_sel.hw, 2965 + [CLKID_VDEC_HEVC_DIV] = &meson8b_vdec_hevc_div.hw, 2966 + [CLKID_VDEC_HEVC_EN] = &meson8b_vdec_hevc_en.hw, 2967 + [CLKID_VDEC_HEVC] = &meson8b_vdec_hevc.hw, 2968 + [CLKID_CTS_AMCLK_SEL] = &meson8b_cts_amclk_sel.hw, 2969 + [CLKID_CTS_AMCLK_DIV] = &meson8b_cts_amclk_div.hw, 2970 + [CLKID_CTS_AMCLK] = &meson8b_cts_amclk.hw, 2971 + [CLKID_CTS_MCLK_I958_SEL] = &meson8b_cts_mclk_i958_sel.hw, 2972 + [CLKID_CTS_MCLK_I958_DIV] = &meson8b_cts_mclk_i958_div.hw, 2973 + [CLKID_CTS_MCLK_I958] = &meson8b_cts_mclk_i958.hw, 2974 + [CLKID_CTS_I958] = &meson8b_cts_i958.hw, 2975 + [CLKID_VID_PLL_LVDS_EN] = &meson8b_vid_pll_lvds_en.hw, 2976 + [CLKID_HDMI_PLL_DCO_IN] = &hdmi_pll_dco_in.hw, 2985 2977 }; 2986 2978 2987 - static struct clk_hw_onecell_data meson8b_hw_onecell_data = { 2988 - .hws = { 2989 - [CLKID_PLL_FIXED] = &meson8b_fixed_pll.hw, 2990 - [CLKID_PLL_VID] = &meson8b_vid_pll.hw, 2991 - [CLKID_PLL_SYS] = &meson8b_sys_pll.hw, 2992 - [CLKID_FCLK_DIV2] = &meson8b_fclk_div2.hw, 2993 - [CLKID_FCLK_DIV3] = &meson8b_fclk_div3.hw, 2994 - [CLKID_FCLK_DIV4] = &meson8b_fclk_div4.hw, 2995 - [CLKID_FCLK_DIV5] = &meson8b_fclk_div5.hw, 2996 - [CLKID_FCLK_DIV7] = &meson8b_fclk_div7.hw, 2997 - [CLKID_CPUCLK] = &meson8b_cpu_clk.hw, 2998 - [CLKID_MPEG_SEL] = &meson8b_mpeg_clk_sel.hw, 2999 - [CLKID_MPEG_DIV] = &meson8b_mpeg_clk_div.hw, 3000 - [CLKID_CLK81] = &meson8b_clk81.hw, 3001 - [CLKID_DDR] = &meson8b_ddr.hw, 3002 - [CLKID_DOS] = &meson8b_dos.hw, 3003 - [CLKID_ISA] = &meson8b_isa.hw, 3004 - [CLKID_PL301] = &meson8b_pl301.hw, 3005 - [CLKID_PERIPHS] = &meson8b_periphs.hw, 3006 - [CLKID_SPICC] = &meson8b_spicc.hw, 3007 - [CLKID_I2C] = &meson8b_i2c.hw, 3008 - [CLKID_SAR_ADC] = &meson8b_sar_adc.hw, 3009 - [CLKID_SMART_CARD] = &meson8b_smart_card.hw, 3010 - [CLKID_RNG0] = &meson8b_rng0.hw, 3011 - [CLKID_UART0] = &meson8b_uart0.hw, 3012 - [CLKID_SDHC] = &meson8b_sdhc.hw, 3013 - [CLKID_STREAM] = &meson8b_stream.hw, 3014 - [CLKID_ASYNC_FIFO] = &meson8b_async_fifo.hw, 3015 - [CLKID_SDIO] = &meson8b_sdio.hw, 3016 - [CLKID_ABUF] = &meson8b_abuf.hw, 3017 - [CLKID_HIU_IFACE] = &meson8b_hiu_iface.hw, 3018 - [CLKID_ASSIST_MISC] = &meson8b_assist_misc.hw, 3019 - [CLKID_SPI] = &meson8b_spi.hw, 3020 - [CLKID_I2S_SPDIF] = &meson8b_i2s_spdif.hw, 3021 - [CLKID_ETH] = &meson8b_eth.hw, 3022 - [CLKID_DEMUX] = &meson8b_demux.hw, 3023 - [CLKID_AIU_GLUE] = &meson8b_aiu_glue.hw, 3024 - [CLKID_IEC958] = &meson8b_iec958.hw, 3025 - [CLKID_I2S_OUT] = &meson8b_i2s_out.hw, 3026 - [CLKID_AMCLK] = &meson8b_amclk.hw, 3027 - [CLKID_AIFIFO2] = &meson8b_aififo2.hw, 3028 - [CLKID_MIXER] = &meson8b_mixer.hw, 3029 - [CLKID_MIXER_IFACE] = &meson8b_mixer_iface.hw, 3030 - [CLKID_ADC] = &meson8b_adc.hw, 3031 - [CLKID_BLKMV] = &meson8b_blkmv.hw, 3032 - [CLKID_AIU] = &meson8b_aiu.hw, 3033 - [CLKID_UART1] = &meson8b_uart1.hw, 3034 - [CLKID_G2D] = &meson8b_g2d.hw, 3035 - [CLKID_USB0] = &meson8b_usb0.hw, 3036 - [CLKID_USB1] = &meson8b_usb1.hw, 3037 - [CLKID_RESET] = &meson8b_reset.hw, 3038 - [CLKID_NAND] = &meson8b_nand.hw, 3039 - [CLKID_DOS_PARSER] = &meson8b_dos_parser.hw, 3040 - [CLKID_USB] = &meson8b_usb.hw, 3041 - [CLKID_VDIN1] = &meson8b_vdin1.hw, 3042 - [CLKID_AHB_ARB0] = &meson8b_ahb_arb0.hw, 3043 - [CLKID_EFUSE] = &meson8b_efuse.hw, 3044 - [CLKID_BOOT_ROM] = &meson8b_boot_rom.hw, 3045 - [CLKID_AHB_DATA_BUS] = &meson8b_ahb_data_bus.hw, 3046 - [CLKID_AHB_CTRL_BUS] = &meson8b_ahb_ctrl_bus.hw, 3047 - [CLKID_HDMI_INTR_SYNC] = &meson8b_hdmi_intr_sync.hw, 3048 - [CLKID_HDMI_PCLK] = &meson8b_hdmi_pclk.hw, 3049 - [CLKID_USB1_DDR_BRIDGE] = &meson8b_usb1_ddr_bridge.hw, 3050 - [CLKID_USB0_DDR_BRIDGE] = &meson8b_usb0_ddr_bridge.hw, 3051 - [CLKID_MMC_PCLK] = &meson8b_mmc_pclk.hw, 3052 - [CLKID_DVIN] = &meson8b_dvin.hw, 3053 - [CLKID_UART2] = &meson8b_uart2.hw, 3054 - [CLKID_SANA] = &meson8b_sana.hw, 3055 - [CLKID_VPU_INTR] = &meson8b_vpu_intr.hw, 3056 - [CLKID_SEC_AHB_AHB3_BRIDGE] = &meson8b_sec_ahb_ahb3_bridge.hw, 3057 - [CLKID_CLK81_A9] = &meson8b_clk81_a9.hw, 3058 - [CLKID_VCLK2_VENCI0] = &meson8b_vclk2_venci0.hw, 3059 - [CLKID_VCLK2_VENCI1] = &meson8b_vclk2_venci1.hw, 3060 - [CLKID_VCLK2_VENCP0] = &meson8b_vclk2_vencp0.hw, 3061 - [CLKID_VCLK2_VENCP1] = &meson8b_vclk2_vencp1.hw, 3062 - [CLKID_GCLK_VENCI_INT] = &meson8b_gclk_venci_int.hw, 3063 - [CLKID_GCLK_VENCP_INT] = &meson8b_gclk_vencp_int.hw, 3064 - [CLKID_DAC_CLK] = &meson8b_dac_clk.hw, 3065 - [CLKID_AOCLK_GATE] = &meson8b_aoclk_gate.hw, 3066 - [CLKID_IEC958_GATE] = &meson8b_iec958_gate.hw, 3067 - [CLKID_ENC480P] = &meson8b_enc480p.hw, 3068 - [CLKID_RNG1] = &meson8b_rng1.hw, 3069 - [CLKID_GCLK_VENCL_INT] = &meson8b_gclk_vencl_int.hw, 3070 - [CLKID_VCLK2_VENCLMCC] = &meson8b_vclk2_venclmcc.hw, 3071 - [CLKID_VCLK2_VENCL] = &meson8b_vclk2_vencl.hw, 3072 - [CLKID_VCLK2_OTHER] = &meson8b_vclk2_other.hw, 3073 - [CLKID_EDP] = &meson8b_edp.hw, 3074 - [CLKID_AO_MEDIA_CPU] = &meson8b_ao_media_cpu.hw, 3075 - [CLKID_AO_AHB_SRAM] = &meson8b_ao_ahb_sram.hw, 3076 - [CLKID_AO_AHB_BUS] = &meson8b_ao_ahb_bus.hw, 3077 - [CLKID_AO_IFACE] = &meson8b_ao_iface.hw, 3078 - [CLKID_MPLL0] = &meson8b_mpll0.hw, 3079 - [CLKID_MPLL1] = &meson8b_mpll1.hw, 3080 - [CLKID_MPLL2] = &meson8b_mpll2.hw, 3081 - [CLKID_MPLL0_DIV] = &meson8b_mpll0_div.hw, 3082 - [CLKID_MPLL1_DIV] = &meson8b_mpll1_div.hw, 3083 - [CLKID_MPLL2_DIV] = &meson8b_mpll2_div.hw, 3084 - [CLKID_CPU_IN_SEL] = &meson8b_cpu_in_sel.hw, 3085 - [CLKID_CPU_IN_DIV2] = &meson8b_cpu_in_div2.hw, 3086 - [CLKID_CPU_IN_DIV3] = &meson8b_cpu_in_div3.hw, 3087 - [CLKID_CPU_SCALE_DIV] = &meson8b_cpu_scale_div.hw, 3088 - [CLKID_CPU_SCALE_OUT_SEL] = &meson8b_cpu_scale_out_sel.hw, 3089 - [CLKID_MPLL_PREDIV] = &meson8b_mpll_prediv.hw, 3090 - [CLKID_FCLK_DIV2_DIV] = &meson8b_fclk_div2_div.hw, 3091 - [CLKID_FCLK_DIV3_DIV] = &meson8b_fclk_div3_div.hw, 3092 - [CLKID_FCLK_DIV4_DIV] = &meson8b_fclk_div4_div.hw, 3093 - [CLKID_FCLK_DIV5_DIV] = &meson8b_fclk_div5_div.hw, 3094 - [CLKID_FCLK_DIV7_DIV] = &meson8b_fclk_div7_div.hw, 3095 - [CLKID_NAND_SEL] = &meson8b_nand_clk_sel.hw, 3096 - [CLKID_NAND_DIV] = &meson8b_nand_clk_div.hw, 3097 - [CLKID_NAND_CLK] = &meson8b_nand_clk_gate.hw, 3098 - [CLKID_PLL_FIXED_DCO] = &meson8b_fixed_pll_dco.hw, 3099 - [CLKID_HDMI_PLL_DCO] = &meson8b_hdmi_pll_dco.hw, 3100 - [CLKID_PLL_SYS_DCO] = &meson8b_sys_pll_dco.hw, 3101 - [CLKID_CPU_CLK_DIV2] = &meson8b_cpu_clk_div2.hw, 3102 - [CLKID_CPU_CLK_DIV3] = &meson8b_cpu_clk_div3.hw, 3103 - [CLKID_CPU_CLK_DIV4] = &meson8b_cpu_clk_div4.hw, 3104 - [CLKID_CPU_CLK_DIV5] = &meson8b_cpu_clk_div5.hw, 3105 - [CLKID_CPU_CLK_DIV6] = &meson8b_cpu_clk_div6.hw, 3106 - [CLKID_CPU_CLK_DIV7] = &meson8b_cpu_clk_div7.hw, 3107 - [CLKID_CPU_CLK_DIV8] = &meson8b_cpu_clk_div8.hw, 3108 - [CLKID_APB_SEL] = &meson8b_apb_clk_sel.hw, 3109 - [CLKID_APB] = &meson8b_apb_clk_gate.hw, 3110 - [CLKID_PERIPH_SEL] = &meson8b_periph_clk_sel.hw, 3111 - [CLKID_PERIPH] = &meson8b_periph_clk_gate.hw, 3112 - [CLKID_AXI_SEL] = &meson8b_axi_clk_sel.hw, 3113 - [CLKID_AXI] = &meson8b_axi_clk_gate.hw, 3114 - [CLKID_L2_DRAM_SEL] = &meson8b_l2_dram_clk_sel.hw, 3115 - [CLKID_L2_DRAM] = &meson8b_l2_dram_clk_gate.hw, 3116 - [CLKID_HDMI_PLL_LVDS_OUT] = &meson8b_hdmi_pll_lvds_out.hw, 3117 - [CLKID_HDMI_PLL_HDMI_OUT] = &meson8b_hdmi_pll_hdmi_out.hw, 3118 - [CLKID_VID_PLL_IN_SEL] = &meson8b_vid_pll_in_sel.hw, 3119 - [CLKID_VID_PLL_IN_EN] = &meson8b_vid_pll_in_en.hw, 3120 - [CLKID_VID_PLL_PRE_DIV] = &meson8b_vid_pll_pre_div.hw, 3121 - [CLKID_VID_PLL_POST_DIV] = &meson8b_vid_pll_post_div.hw, 3122 - [CLKID_VID_PLL_FINAL_DIV] = &meson8b_vid_pll_final_div.hw, 3123 - [CLKID_VCLK_IN_SEL] = &meson8b_vclk_in_sel.hw, 3124 - [CLKID_VCLK_IN_EN] = &meson8b_vclk_in_en.hw, 3125 - [CLKID_VCLK_EN] = &meson8b_vclk_en.hw, 3126 - [CLKID_VCLK_DIV1] = &meson8b_vclk_div1_gate.hw, 3127 - [CLKID_VCLK_DIV2_DIV] = &meson8b_vclk_div2_div.hw, 3128 - [CLKID_VCLK_DIV2] = &meson8b_vclk_div2_div_gate.hw, 3129 - [CLKID_VCLK_DIV4_DIV] = &meson8b_vclk_div4_div.hw, 3130 - [CLKID_VCLK_DIV4] = &meson8b_vclk_div4_div_gate.hw, 3131 - [CLKID_VCLK_DIV6_DIV] = &meson8b_vclk_div6_div.hw, 3132 - [CLKID_VCLK_DIV6] = &meson8b_vclk_div6_div_gate.hw, 3133 - [CLKID_VCLK_DIV12_DIV] = &meson8b_vclk_div12_div.hw, 3134 - [CLKID_VCLK_DIV12] = &meson8b_vclk_div12_div_gate.hw, 3135 - [CLKID_VCLK2_IN_SEL] = &meson8b_vclk2_in_sel.hw, 3136 - [CLKID_VCLK2_IN_EN] = &meson8b_vclk2_clk_in_en.hw, 3137 - [CLKID_VCLK2_EN] = &meson8b_vclk2_clk_en.hw, 3138 - [CLKID_VCLK2_DIV1] = &meson8b_vclk2_div1_gate.hw, 3139 - [CLKID_VCLK2_DIV2_DIV] = &meson8b_vclk2_div2_div.hw, 3140 - [CLKID_VCLK2_DIV2] = &meson8b_vclk2_div2_div_gate.hw, 3141 - [CLKID_VCLK2_DIV4_DIV] = &meson8b_vclk2_div4_div.hw, 3142 - [CLKID_VCLK2_DIV4] = &meson8b_vclk2_div4_div_gate.hw, 3143 - [CLKID_VCLK2_DIV6_DIV] = &meson8b_vclk2_div6_div.hw, 3144 - [CLKID_VCLK2_DIV6] = &meson8b_vclk2_div6_div_gate.hw, 3145 - [CLKID_VCLK2_DIV12_DIV] = &meson8b_vclk2_div12_div.hw, 3146 - [CLKID_VCLK2_DIV12] = &meson8b_vclk2_div12_div_gate.hw, 3147 - [CLKID_CTS_ENCT_SEL] = &meson8b_cts_enct_sel.hw, 3148 - [CLKID_CTS_ENCT] = &meson8b_cts_enct.hw, 3149 - [CLKID_CTS_ENCP_SEL] = &meson8b_cts_encp_sel.hw, 3150 - [CLKID_CTS_ENCP] = &meson8b_cts_encp.hw, 3151 - [CLKID_CTS_ENCI_SEL] = &meson8b_cts_enci_sel.hw, 3152 - [CLKID_CTS_ENCI] = &meson8b_cts_enci.hw, 3153 - [CLKID_HDMI_TX_PIXEL_SEL] = &meson8b_hdmi_tx_pixel_sel.hw, 3154 - [CLKID_HDMI_TX_PIXEL] = &meson8b_hdmi_tx_pixel.hw, 3155 - [CLKID_CTS_ENCL_SEL] = &meson8b_cts_encl_sel.hw, 3156 - [CLKID_CTS_ENCL] = &meson8b_cts_encl.hw, 3157 - [CLKID_CTS_VDAC0_SEL] = &meson8b_cts_vdac0_sel.hw, 3158 - [CLKID_CTS_VDAC0] = &meson8b_cts_vdac0.hw, 3159 - [CLKID_HDMI_SYS_SEL] = &meson8b_hdmi_sys_sel.hw, 3160 - [CLKID_HDMI_SYS_DIV] = &meson8b_hdmi_sys_div.hw, 3161 - [CLKID_HDMI_SYS] = &meson8b_hdmi_sys.hw, 3162 - [CLKID_MALI_0_SEL] = &meson8b_mali_0_sel.hw, 3163 - [CLKID_MALI_0_DIV] = &meson8b_mali_0_div.hw, 3164 - [CLKID_MALI_0] = &meson8b_mali_0.hw, 3165 - [CLKID_MALI_1_SEL] = &meson8b_mali_1_sel.hw, 3166 - [CLKID_MALI_1_DIV] = &meson8b_mali_1_div.hw, 3167 - [CLKID_MALI_1] = &meson8b_mali_1.hw, 3168 - [CLKID_MALI] = &meson8b_mali.hw, 3169 - [CLKID_VPU_0_SEL] = &meson8b_vpu_0_sel.hw, 3170 - [CLKID_VPU_0_DIV] = &meson8b_vpu_0_div.hw, 3171 - [CLKID_VPU_0] = &meson8b_vpu_0.hw, 3172 - [CLKID_VPU_1_SEL] = &meson8b_vpu_1_sel.hw, 3173 - [CLKID_VPU_1_DIV] = &meson8b_vpu_1_div.hw, 3174 - [CLKID_VPU_1] = &meson8b_vpu_1.hw, 3175 - [CLKID_VPU] = &meson8b_vpu.hw, 3176 - [CLKID_VDEC_1_SEL] = &meson8b_vdec_1_sel.hw, 3177 - [CLKID_VDEC_1_1_DIV] = &meson8b_vdec_1_1_div.hw, 3178 - [CLKID_VDEC_1_1] = &meson8b_vdec_1_1.hw, 3179 - [CLKID_VDEC_1_2_DIV] = &meson8b_vdec_1_2_div.hw, 3180 - [CLKID_VDEC_1_2] = &meson8b_vdec_1_2.hw, 3181 - [CLKID_VDEC_1] = &meson8b_vdec_1.hw, 3182 - [CLKID_VDEC_HCODEC_SEL] = &meson8b_vdec_hcodec_sel.hw, 3183 - [CLKID_VDEC_HCODEC_DIV] = &meson8b_vdec_hcodec_div.hw, 3184 - [CLKID_VDEC_HCODEC] = &meson8b_vdec_hcodec.hw, 3185 - [CLKID_VDEC_2_SEL] = &meson8b_vdec_2_sel.hw, 3186 - [CLKID_VDEC_2_DIV] = &meson8b_vdec_2_div.hw, 3187 - [CLKID_VDEC_2] = &meson8b_vdec_2.hw, 3188 - [CLKID_VDEC_HEVC_SEL] = &meson8b_vdec_hevc_sel.hw, 3189 - [CLKID_VDEC_HEVC_DIV] = &meson8b_vdec_hevc_div.hw, 3190 - [CLKID_VDEC_HEVC_EN] = &meson8b_vdec_hevc_en.hw, 3191 - [CLKID_VDEC_HEVC] = &meson8b_vdec_hevc.hw, 3192 - [CLKID_CTS_AMCLK_SEL] = &meson8b_cts_amclk_sel.hw, 3193 - [CLKID_CTS_AMCLK_DIV] = &meson8b_cts_amclk_div.hw, 3194 - [CLKID_CTS_AMCLK] = &meson8b_cts_amclk.hw, 3195 - [CLKID_CTS_MCLK_I958_SEL] = &meson8b_cts_mclk_i958_sel.hw, 3196 - [CLKID_CTS_MCLK_I958_DIV] = &meson8b_cts_mclk_i958_div.hw, 3197 - [CLKID_CTS_MCLK_I958] = &meson8b_cts_mclk_i958.hw, 3198 - [CLKID_CTS_I958] = &meson8b_cts_i958.hw, 3199 - [CLKID_VID_PLL_LVDS_EN] = &meson8b_vid_pll_lvds_en.hw, 3200 - [CLKID_HDMI_PLL_DCO_IN] = &hdmi_pll_dco_in.hw, 3201 - [CLK_NR_CLKS] = NULL, 3202 - }, 3203 - .num = CLK_NR_CLKS, 2979 + static struct clk_hw *meson8b_hw_clks[] = { 2980 + [CLKID_PLL_FIXED] = &meson8b_fixed_pll.hw, 2981 + [CLKID_PLL_VID] = &meson8b_vid_pll.hw, 2982 + [CLKID_PLL_SYS] = &meson8b_sys_pll.hw, 2983 + [CLKID_FCLK_DIV2] = &meson8b_fclk_div2.hw, 2984 + [CLKID_FCLK_DIV3] = &meson8b_fclk_div3.hw, 2985 + [CLKID_FCLK_DIV4] = &meson8b_fclk_div4.hw, 2986 + [CLKID_FCLK_DIV5] = &meson8b_fclk_div5.hw, 2987 + [CLKID_FCLK_DIV7] = &meson8b_fclk_div7.hw, 2988 + [CLKID_CPUCLK] = &meson8b_cpu_clk.hw, 2989 + [CLKID_MPEG_SEL] = &meson8b_mpeg_clk_sel.hw, 2990 + [CLKID_MPEG_DIV] = &meson8b_mpeg_clk_div.hw, 2991 + [CLKID_CLK81] = &meson8b_clk81.hw, 2992 + [CLKID_DDR] = &meson8b_ddr.hw, 2993 + [CLKID_DOS] = &meson8b_dos.hw, 2994 + [CLKID_ISA] = &meson8b_isa.hw, 2995 + [CLKID_PL301] = &meson8b_pl301.hw, 2996 + [CLKID_PERIPHS] = &meson8b_periphs.hw, 2997 + [CLKID_SPICC] = &meson8b_spicc.hw, 2998 + [CLKID_I2C] = &meson8b_i2c.hw, 2999 + [CLKID_SAR_ADC] = &meson8b_sar_adc.hw, 3000 + [CLKID_SMART_CARD] = &meson8b_smart_card.hw, 3001 + [CLKID_RNG0] = &meson8b_rng0.hw, 3002 + [CLKID_UART0] = &meson8b_uart0.hw, 3003 + [CLKID_SDHC] = &meson8b_sdhc.hw, 3004 + [CLKID_STREAM] = &meson8b_stream.hw, 3005 + [CLKID_ASYNC_FIFO] = &meson8b_async_fifo.hw, 3006 + [CLKID_SDIO] = &meson8b_sdio.hw, 3007 + [CLKID_ABUF] = &meson8b_abuf.hw, 3008 + [CLKID_HIU_IFACE] = &meson8b_hiu_iface.hw, 3009 + [CLKID_ASSIST_MISC] = &meson8b_assist_misc.hw, 3010 + [CLKID_SPI] = &meson8b_spi.hw, 3011 + [CLKID_I2S_SPDIF] = &meson8b_i2s_spdif.hw, 3012 + [CLKID_ETH] = &meson8b_eth.hw, 3013 + [CLKID_DEMUX] = &meson8b_demux.hw, 3014 + [CLKID_AIU_GLUE] = &meson8b_aiu_glue.hw, 3015 + [CLKID_IEC958] = &meson8b_iec958.hw, 3016 + [CLKID_I2S_OUT] = &meson8b_i2s_out.hw, 3017 + [CLKID_AMCLK] = &meson8b_amclk.hw, 3018 + [CLKID_AIFIFO2] = &meson8b_aififo2.hw, 3019 + [CLKID_MIXER] = &meson8b_mixer.hw, 3020 + [CLKID_MIXER_IFACE] = &meson8b_mixer_iface.hw, 3021 + [CLKID_ADC] = &meson8b_adc.hw, 3022 + [CLKID_BLKMV] = &meson8b_blkmv.hw, 3023 + [CLKID_AIU] = &meson8b_aiu.hw, 3024 + [CLKID_UART1] = &meson8b_uart1.hw, 3025 + [CLKID_G2D] = &meson8b_g2d.hw, 3026 + [CLKID_USB0] = &meson8b_usb0.hw, 3027 + [CLKID_USB1] = &meson8b_usb1.hw, 3028 + [CLKID_RESET] = &meson8b_reset.hw, 3029 + [CLKID_NAND] = &meson8b_nand.hw, 3030 + [CLKID_DOS_PARSER] = &meson8b_dos_parser.hw, 3031 + [CLKID_USB] = &meson8b_usb.hw, 3032 + [CLKID_VDIN1] = &meson8b_vdin1.hw, 3033 + [CLKID_AHB_ARB0] = &meson8b_ahb_arb0.hw, 3034 + [CLKID_EFUSE] = &meson8b_efuse.hw, 3035 + [CLKID_BOOT_ROM] = &meson8b_boot_rom.hw, 3036 + [CLKID_AHB_DATA_BUS] = &meson8b_ahb_data_bus.hw, 3037 + [CLKID_AHB_CTRL_BUS] = &meson8b_ahb_ctrl_bus.hw, 3038 + [CLKID_HDMI_INTR_SYNC] = &meson8b_hdmi_intr_sync.hw, 3039 + [CLKID_HDMI_PCLK] = &meson8b_hdmi_pclk.hw, 3040 + [CLKID_USB1_DDR_BRIDGE] = &meson8b_usb1_ddr_bridge.hw, 3041 + [CLKID_USB0_DDR_BRIDGE] = &meson8b_usb0_ddr_bridge.hw, 3042 + [CLKID_MMC_PCLK] = &meson8b_mmc_pclk.hw, 3043 + [CLKID_DVIN] = &meson8b_dvin.hw, 3044 + [CLKID_UART2] = &meson8b_uart2.hw, 3045 + [CLKID_SANA] = &meson8b_sana.hw, 3046 + [CLKID_VPU_INTR] = &meson8b_vpu_intr.hw, 3047 + [CLKID_SEC_AHB_AHB3_BRIDGE] = &meson8b_sec_ahb_ahb3_bridge.hw, 3048 + [CLKID_CLK81_A9] = &meson8b_clk81_a9.hw, 3049 + [CLKID_VCLK2_VENCI0] = &meson8b_vclk2_venci0.hw, 3050 + [CLKID_VCLK2_VENCI1] = &meson8b_vclk2_venci1.hw, 3051 + [CLKID_VCLK2_VENCP0] = &meson8b_vclk2_vencp0.hw, 3052 + [CLKID_VCLK2_VENCP1] = &meson8b_vclk2_vencp1.hw, 3053 + [CLKID_GCLK_VENCI_INT] = &meson8b_gclk_venci_int.hw, 3054 + [CLKID_GCLK_VENCP_INT] = &meson8b_gclk_vencp_int.hw, 3055 + [CLKID_DAC_CLK] = &meson8b_dac_clk.hw, 3056 + [CLKID_AOCLK_GATE] = &meson8b_aoclk_gate.hw, 3057 + [CLKID_IEC958_GATE] = &meson8b_iec958_gate.hw, 3058 + [CLKID_ENC480P] = &meson8b_enc480p.hw, 3059 + [CLKID_RNG1] = &meson8b_rng1.hw, 3060 + [CLKID_GCLK_VENCL_INT] = &meson8b_gclk_vencl_int.hw, 3061 + [CLKID_VCLK2_VENCLMCC] = &meson8b_vclk2_venclmcc.hw, 3062 + [CLKID_VCLK2_VENCL] = &meson8b_vclk2_vencl.hw, 3063 + [CLKID_VCLK2_OTHER] = &meson8b_vclk2_other.hw, 3064 + [CLKID_EDP] = &meson8b_edp.hw, 3065 + [CLKID_AO_MEDIA_CPU] = &meson8b_ao_media_cpu.hw, 3066 + [CLKID_AO_AHB_SRAM] = &meson8b_ao_ahb_sram.hw, 3067 + [CLKID_AO_AHB_BUS] = &meson8b_ao_ahb_bus.hw, 3068 + [CLKID_AO_IFACE] = &meson8b_ao_iface.hw, 3069 + [CLKID_MPLL0] = &meson8b_mpll0.hw, 3070 + [CLKID_MPLL1] = &meson8b_mpll1.hw, 3071 + [CLKID_MPLL2] = &meson8b_mpll2.hw, 3072 + [CLKID_MPLL0_DIV] = &meson8b_mpll0_div.hw, 3073 + [CLKID_MPLL1_DIV] = &meson8b_mpll1_div.hw, 3074 + [CLKID_MPLL2_DIV] = &meson8b_mpll2_div.hw, 3075 + [CLKID_CPU_IN_SEL] = &meson8b_cpu_in_sel.hw, 3076 + [CLKID_CPU_IN_DIV2] = &meson8b_cpu_in_div2.hw, 3077 + [CLKID_CPU_IN_DIV3] = &meson8b_cpu_in_div3.hw, 3078 + [CLKID_CPU_SCALE_DIV] = &meson8b_cpu_scale_div.hw, 3079 + [CLKID_CPU_SCALE_OUT_SEL] = &meson8b_cpu_scale_out_sel.hw, 3080 + [CLKID_MPLL_PREDIV] = &meson8b_mpll_prediv.hw, 3081 + [CLKID_FCLK_DIV2_DIV] = &meson8b_fclk_div2_div.hw, 3082 + [CLKID_FCLK_DIV3_DIV] = &meson8b_fclk_div3_div.hw, 3083 + [CLKID_FCLK_DIV4_DIV] = &meson8b_fclk_div4_div.hw, 3084 + [CLKID_FCLK_DIV5_DIV] = &meson8b_fclk_div5_div.hw, 3085 + [CLKID_FCLK_DIV7_DIV] = &meson8b_fclk_div7_div.hw, 3086 + [CLKID_NAND_SEL] = &meson8b_nand_clk_sel.hw, 3087 + [CLKID_NAND_DIV] = &meson8b_nand_clk_div.hw, 3088 + [CLKID_NAND_CLK] = &meson8b_nand_clk_gate.hw, 3089 + [CLKID_PLL_FIXED_DCO] = &meson8b_fixed_pll_dco.hw, 3090 + [CLKID_HDMI_PLL_DCO] = &meson8b_hdmi_pll_dco.hw, 3091 + [CLKID_PLL_SYS_DCO] = &meson8b_sys_pll_dco.hw, 3092 + [CLKID_CPU_CLK_DIV2] = &meson8b_cpu_clk_div2.hw, 3093 + [CLKID_CPU_CLK_DIV3] = &meson8b_cpu_clk_div3.hw, 3094 + [CLKID_CPU_CLK_DIV4] = &meson8b_cpu_clk_div4.hw, 3095 + [CLKID_CPU_CLK_DIV5] = &meson8b_cpu_clk_div5.hw, 3096 + [CLKID_CPU_CLK_DIV6] = &meson8b_cpu_clk_div6.hw, 3097 + [CLKID_CPU_CLK_DIV7] = &meson8b_cpu_clk_div7.hw, 3098 + [CLKID_CPU_CLK_DIV8] = &meson8b_cpu_clk_div8.hw, 3099 + [CLKID_APB_SEL] = &meson8b_apb_clk_sel.hw, 3100 + [CLKID_APB] = &meson8b_apb_clk_gate.hw, 3101 + [CLKID_PERIPH_SEL] = &meson8b_periph_clk_sel.hw, 3102 + [CLKID_PERIPH] = &meson8b_periph_clk_gate.hw, 3103 + [CLKID_AXI_SEL] = &meson8b_axi_clk_sel.hw, 3104 + [CLKID_AXI] = &meson8b_axi_clk_gate.hw, 3105 + [CLKID_L2_DRAM_SEL] = &meson8b_l2_dram_clk_sel.hw, 3106 + [CLKID_L2_DRAM] = &meson8b_l2_dram_clk_gate.hw, 3107 + [CLKID_HDMI_PLL_LVDS_OUT] = &meson8b_hdmi_pll_lvds_out.hw, 3108 + [CLKID_HDMI_PLL_HDMI_OUT] = &meson8b_hdmi_pll_hdmi_out.hw, 3109 + [CLKID_VID_PLL_IN_SEL] = &meson8b_vid_pll_in_sel.hw, 3110 + [CLKID_VID_PLL_IN_EN] = &meson8b_vid_pll_in_en.hw, 3111 + [CLKID_VID_PLL_PRE_DIV] = &meson8b_vid_pll_pre_div.hw, 3112 + [CLKID_VID_PLL_POST_DIV] = &meson8b_vid_pll_post_div.hw, 3113 + [CLKID_VID_PLL_FINAL_DIV] = &meson8b_vid_pll_final_div.hw, 3114 + [CLKID_VCLK_IN_SEL] = &meson8b_vclk_in_sel.hw, 3115 + [CLKID_VCLK_IN_EN] = &meson8b_vclk_in_en.hw, 3116 + [CLKID_VCLK_EN] = &meson8b_vclk_en.hw, 3117 + [CLKID_VCLK_DIV1] = &meson8b_vclk_div1_gate.hw, 3118 + [CLKID_VCLK_DIV2_DIV] = &meson8b_vclk_div2_div.hw, 3119 + [CLKID_VCLK_DIV2] = &meson8b_vclk_div2_div_gate.hw, 3120 + [CLKID_VCLK_DIV4_DIV] = &meson8b_vclk_div4_div.hw, 3121 + [CLKID_VCLK_DIV4] = &meson8b_vclk_div4_div_gate.hw, 3122 + [CLKID_VCLK_DIV6_DIV] = &meson8b_vclk_div6_div.hw, 3123 + [CLKID_VCLK_DIV6] = &meson8b_vclk_div6_div_gate.hw, 3124 + [CLKID_VCLK_DIV12_DIV] = &meson8b_vclk_div12_div.hw, 3125 + [CLKID_VCLK_DIV12] = &meson8b_vclk_div12_div_gate.hw, 3126 + [CLKID_VCLK2_IN_SEL] = &meson8b_vclk2_in_sel.hw, 3127 + [CLKID_VCLK2_IN_EN] = &meson8b_vclk2_clk_in_en.hw, 3128 + [CLKID_VCLK2_EN] = &meson8b_vclk2_clk_en.hw, 3129 + [CLKID_VCLK2_DIV1] = &meson8b_vclk2_div1_gate.hw, 3130 + [CLKID_VCLK2_DIV2_DIV] = &meson8b_vclk2_div2_div.hw, 3131 + [CLKID_VCLK2_DIV2] = &meson8b_vclk2_div2_div_gate.hw, 3132 + [CLKID_VCLK2_DIV4_DIV] = &meson8b_vclk2_div4_div.hw, 3133 + [CLKID_VCLK2_DIV4] = &meson8b_vclk2_div4_div_gate.hw, 3134 + [CLKID_VCLK2_DIV6_DIV] = &meson8b_vclk2_div6_div.hw, 3135 + [CLKID_VCLK2_DIV6] = &meson8b_vclk2_div6_div_gate.hw, 3136 + [CLKID_VCLK2_DIV12_DIV] = &meson8b_vclk2_div12_div.hw, 3137 + [CLKID_VCLK2_DIV12] = &meson8b_vclk2_div12_div_gate.hw, 3138 + [CLKID_CTS_ENCT_SEL] = &meson8b_cts_enct_sel.hw, 3139 + [CLKID_CTS_ENCT] = &meson8b_cts_enct.hw, 3140 + [CLKID_CTS_ENCP_SEL] = &meson8b_cts_encp_sel.hw, 3141 + [CLKID_CTS_ENCP] = &meson8b_cts_encp.hw, 3142 + [CLKID_CTS_ENCI_SEL] = &meson8b_cts_enci_sel.hw, 3143 + [CLKID_CTS_ENCI] = &meson8b_cts_enci.hw, 3144 + [CLKID_HDMI_TX_PIXEL_SEL] = &meson8b_hdmi_tx_pixel_sel.hw, 3145 + [CLKID_HDMI_TX_PIXEL] = &meson8b_hdmi_tx_pixel.hw, 3146 + [CLKID_CTS_ENCL_SEL] = &meson8b_cts_encl_sel.hw, 3147 + [CLKID_CTS_ENCL] = &meson8b_cts_encl.hw, 3148 + [CLKID_CTS_VDAC0_SEL] = &meson8b_cts_vdac0_sel.hw, 3149 + [CLKID_CTS_VDAC0] = &meson8b_cts_vdac0.hw, 3150 + [CLKID_HDMI_SYS_SEL] = &meson8b_hdmi_sys_sel.hw, 3151 + [CLKID_HDMI_SYS_DIV] = &meson8b_hdmi_sys_div.hw, 3152 + [CLKID_HDMI_SYS] = &meson8b_hdmi_sys.hw, 3153 + [CLKID_MALI_0_SEL] = &meson8b_mali_0_sel.hw, 3154 + [CLKID_MALI_0_DIV] = &meson8b_mali_0_div.hw, 3155 + [CLKID_MALI_0] = &meson8b_mali_0.hw, 3156 + [CLKID_MALI_1_SEL] = &meson8b_mali_1_sel.hw, 3157 + [CLKID_MALI_1_DIV] = &meson8b_mali_1_div.hw, 3158 + [CLKID_MALI_1] = &meson8b_mali_1.hw, 3159 + [CLKID_MALI] = &meson8b_mali.hw, 3160 + [CLKID_VPU_0_SEL] = &meson8b_vpu_0_sel.hw, 3161 + [CLKID_VPU_0_DIV] = &meson8b_vpu_0_div.hw, 3162 + [CLKID_VPU_0] = &meson8b_vpu_0.hw, 3163 + [CLKID_VPU_1_SEL] = &meson8b_vpu_1_sel.hw, 3164 + [CLKID_VPU_1_DIV] = &meson8b_vpu_1_div.hw, 3165 + [CLKID_VPU_1] = &meson8b_vpu_1.hw, 3166 + [CLKID_VPU] = &meson8b_vpu.hw, 3167 + [CLKID_VDEC_1_SEL] = &meson8b_vdec_1_sel.hw, 3168 + [CLKID_VDEC_1_1_DIV] = &meson8b_vdec_1_1_div.hw, 3169 + [CLKID_VDEC_1_1] = &meson8b_vdec_1_1.hw, 3170 + [CLKID_VDEC_1_2_DIV] = &meson8b_vdec_1_2_div.hw, 3171 + [CLKID_VDEC_1_2] = &meson8b_vdec_1_2.hw, 3172 + [CLKID_VDEC_1] = &meson8b_vdec_1.hw, 3173 + [CLKID_VDEC_HCODEC_SEL] = &meson8b_vdec_hcodec_sel.hw, 3174 + [CLKID_VDEC_HCODEC_DIV] = &meson8b_vdec_hcodec_div.hw, 3175 + [CLKID_VDEC_HCODEC] = &meson8b_vdec_hcodec.hw, 3176 + [CLKID_VDEC_2_SEL] = &meson8b_vdec_2_sel.hw, 3177 + [CLKID_VDEC_2_DIV] = &meson8b_vdec_2_div.hw, 3178 + [CLKID_VDEC_2] = &meson8b_vdec_2.hw, 3179 + [CLKID_VDEC_HEVC_SEL] = &meson8b_vdec_hevc_sel.hw, 3180 + [CLKID_VDEC_HEVC_DIV] = &meson8b_vdec_hevc_div.hw, 3181 + [CLKID_VDEC_HEVC_EN] = &meson8b_vdec_hevc_en.hw, 3182 + [CLKID_VDEC_HEVC] = &meson8b_vdec_hevc.hw, 3183 + [CLKID_CTS_AMCLK_SEL] = &meson8b_cts_amclk_sel.hw, 3184 + [CLKID_CTS_AMCLK_DIV] = &meson8b_cts_amclk_div.hw, 3185 + [CLKID_CTS_AMCLK] = &meson8b_cts_amclk.hw, 3186 + [CLKID_CTS_MCLK_I958_SEL] = &meson8b_cts_mclk_i958_sel.hw, 3187 + [CLKID_CTS_MCLK_I958_DIV] = &meson8b_cts_mclk_i958_div.hw, 3188 + [CLKID_CTS_MCLK_I958] = &meson8b_cts_mclk_i958.hw, 3189 + [CLKID_CTS_I958] = &meson8b_cts_i958.hw, 3190 + [CLKID_VID_PLL_LVDS_EN] = &meson8b_vid_pll_lvds_en.hw, 3191 + [CLKID_HDMI_PLL_DCO_IN] = &hdmi_pll_dco_in.hw, 3204 3192 }; 3205 3193 3206 - static struct clk_hw_onecell_data meson8m2_hw_onecell_data = { 3207 - .hws = { 3208 - [CLKID_PLL_FIXED] = &meson8b_fixed_pll.hw, 3209 - [CLKID_PLL_VID] = &meson8b_vid_pll.hw, 3210 - [CLKID_PLL_SYS] = &meson8b_sys_pll.hw, 3211 - [CLKID_FCLK_DIV2] = &meson8b_fclk_div2.hw, 3212 - [CLKID_FCLK_DIV3] = &meson8b_fclk_div3.hw, 3213 - [CLKID_FCLK_DIV4] = &meson8b_fclk_div4.hw, 3214 - [CLKID_FCLK_DIV5] = &meson8b_fclk_div5.hw, 3215 - [CLKID_FCLK_DIV7] = &meson8b_fclk_div7.hw, 3216 - [CLKID_CPUCLK] = &meson8b_cpu_clk.hw, 3217 - [CLKID_MPEG_SEL] = &meson8b_mpeg_clk_sel.hw, 3218 - [CLKID_MPEG_DIV] = &meson8b_mpeg_clk_div.hw, 3219 - [CLKID_CLK81] = &meson8b_clk81.hw, 3220 - [CLKID_DDR] = &meson8b_ddr.hw, 3221 - [CLKID_DOS] = &meson8b_dos.hw, 3222 - [CLKID_ISA] = &meson8b_isa.hw, 3223 - [CLKID_PL301] = &meson8b_pl301.hw, 3224 - [CLKID_PERIPHS] = &meson8b_periphs.hw, 3225 - [CLKID_SPICC] = &meson8b_spicc.hw, 3226 - [CLKID_I2C] = &meson8b_i2c.hw, 3227 - [CLKID_SAR_ADC] = &meson8b_sar_adc.hw, 3228 - [CLKID_SMART_CARD] = &meson8b_smart_card.hw, 3229 - [CLKID_RNG0] = &meson8b_rng0.hw, 3230 - [CLKID_UART0] = &meson8b_uart0.hw, 3231 - [CLKID_SDHC] = &meson8b_sdhc.hw, 3232 - [CLKID_STREAM] = &meson8b_stream.hw, 3233 - [CLKID_ASYNC_FIFO] = &meson8b_async_fifo.hw, 3234 - [CLKID_SDIO] = &meson8b_sdio.hw, 3235 - [CLKID_ABUF] = &meson8b_abuf.hw, 3236 - [CLKID_HIU_IFACE] = &meson8b_hiu_iface.hw, 3237 - [CLKID_ASSIST_MISC] = &meson8b_assist_misc.hw, 3238 - [CLKID_SPI] = &meson8b_spi.hw, 3239 - [CLKID_I2S_SPDIF] = &meson8b_i2s_spdif.hw, 3240 - [CLKID_ETH] = &meson8b_eth.hw, 3241 - [CLKID_DEMUX] = &meson8b_demux.hw, 3242 - [CLKID_AIU_GLUE] = &meson8b_aiu_glue.hw, 3243 - [CLKID_IEC958] = &meson8b_iec958.hw, 3244 - [CLKID_I2S_OUT] = &meson8b_i2s_out.hw, 3245 - [CLKID_AMCLK] = &meson8b_amclk.hw, 3246 - [CLKID_AIFIFO2] = &meson8b_aififo2.hw, 3247 - [CLKID_MIXER] = &meson8b_mixer.hw, 3248 - [CLKID_MIXER_IFACE] = &meson8b_mixer_iface.hw, 3249 - [CLKID_ADC] = &meson8b_adc.hw, 3250 - [CLKID_BLKMV] = &meson8b_blkmv.hw, 3251 - [CLKID_AIU] = &meson8b_aiu.hw, 3252 - [CLKID_UART1] = &meson8b_uart1.hw, 3253 - [CLKID_G2D] = &meson8b_g2d.hw, 3254 - [CLKID_USB0] = &meson8b_usb0.hw, 3255 - [CLKID_USB1] = &meson8b_usb1.hw, 3256 - [CLKID_RESET] = &meson8b_reset.hw, 3257 - [CLKID_NAND] = &meson8b_nand.hw, 3258 - [CLKID_DOS_PARSER] = &meson8b_dos_parser.hw, 3259 - [CLKID_USB] = &meson8b_usb.hw, 3260 - [CLKID_VDIN1] = &meson8b_vdin1.hw, 3261 - [CLKID_AHB_ARB0] = &meson8b_ahb_arb0.hw, 3262 - [CLKID_EFUSE] = &meson8b_efuse.hw, 3263 - [CLKID_BOOT_ROM] = &meson8b_boot_rom.hw, 3264 - [CLKID_AHB_DATA_BUS] = &meson8b_ahb_data_bus.hw, 3265 - [CLKID_AHB_CTRL_BUS] = &meson8b_ahb_ctrl_bus.hw, 3266 - [CLKID_HDMI_INTR_SYNC] = &meson8b_hdmi_intr_sync.hw, 3267 - [CLKID_HDMI_PCLK] = &meson8b_hdmi_pclk.hw, 3268 - [CLKID_USB1_DDR_BRIDGE] = &meson8b_usb1_ddr_bridge.hw, 3269 - [CLKID_USB0_DDR_BRIDGE] = &meson8b_usb0_ddr_bridge.hw, 3270 - [CLKID_MMC_PCLK] = &meson8b_mmc_pclk.hw, 3271 - [CLKID_DVIN] = &meson8b_dvin.hw, 3272 - [CLKID_UART2] = &meson8b_uart2.hw, 3273 - [CLKID_SANA] = &meson8b_sana.hw, 3274 - [CLKID_VPU_INTR] = &meson8b_vpu_intr.hw, 3275 - [CLKID_SEC_AHB_AHB3_BRIDGE] = &meson8b_sec_ahb_ahb3_bridge.hw, 3276 - [CLKID_CLK81_A9] = &meson8b_clk81_a9.hw, 3277 - [CLKID_VCLK2_VENCI0] = &meson8b_vclk2_venci0.hw, 3278 - [CLKID_VCLK2_VENCI1] = &meson8b_vclk2_venci1.hw, 3279 - [CLKID_VCLK2_VENCP0] = &meson8b_vclk2_vencp0.hw, 3280 - [CLKID_VCLK2_VENCP1] = &meson8b_vclk2_vencp1.hw, 3281 - [CLKID_GCLK_VENCI_INT] = &meson8b_gclk_venci_int.hw, 3282 - [CLKID_GCLK_VENCP_INT] = &meson8b_gclk_vencp_int.hw, 3283 - [CLKID_DAC_CLK] = &meson8b_dac_clk.hw, 3284 - [CLKID_AOCLK_GATE] = &meson8b_aoclk_gate.hw, 3285 - [CLKID_IEC958_GATE] = &meson8b_iec958_gate.hw, 3286 - [CLKID_ENC480P] = &meson8b_enc480p.hw, 3287 - [CLKID_RNG1] = &meson8b_rng1.hw, 3288 - [CLKID_GCLK_VENCL_INT] = &meson8b_gclk_vencl_int.hw, 3289 - [CLKID_VCLK2_VENCLMCC] = &meson8b_vclk2_venclmcc.hw, 3290 - [CLKID_VCLK2_VENCL] = &meson8b_vclk2_vencl.hw, 3291 - [CLKID_VCLK2_OTHER] = &meson8b_vclk2_other.hw, 3292 - [CLKID_EDP] = &meson8b_edp.hw, 3293 - [CLKID_AO_MEDIA_CPU] = &meson8b_ao_media_cpu.hw, 3294 - [CLKID_AO_AHB_SRAM] = &meson8b_ao_ahb_sram.hw, 3295 - [CLKID_AO_AHB_BUS] = &meson8b_ao_ahb_bus.hw, 3296 - [CLKID_AO_IFACE] = &meson8b_ao_iface.hw, 3297 - [CLKID_MPLL0] = &meson8b_mpll0.hw, 3298 - [CLKID_MPLL1] = &meson8b_mpll1.hw, 3299 - [CLKID_MPLL2] = &meson8b_mpll2.hw, 3300 - [CLKID_MPLL0_DIV] = &meson8b_mpll0_div.hw, 3301 - [CLKID_MPLL1_DIV] = &meson8b_mpll1_div.hw, 3302 - [CLKID_MPLL2_DIV] = &meson8b_mpll2_div.hw, 3303 - [CLKID_CPU_IN_SEL] = &meson8b_cpu_in_sel.hw, 3304 - [CLKID_CPU_IN_DIV2] = &meson8b_cpu_in_div2.hw, 3305 - [CLKID_CPU_IN_DIV3] = &meson8b_cpu_in_div3.hw, 3306 - [CLKID_CPU_SCALE_DIV] = &meson8b_cpu_scale_div.hw, 3307 - [CLKID_CPU_SCALE_OUT_SEL] = &meson8b_cpu_scale_out_sel.hw, 3308 - [CLKID_MPLL_PREDIV] = &meson8b_mpll_prediv.hw, 3309 - [CLKID_FCLK_DIV2_DIV] = &meson8b_fclk_div2_div.hw, 3310 - [CLKID_FCLK_DIV3_DIV] = &meson8b_fclk_div3_div.hw, 3311 - [CLKID_FCLK_DIV4_DIV] = &meson8b_fclk_div4_div.hw, 3312 - [CLKID_FCLK_DIV5_DIV] = &meson8b_fclk_div5_div.hw, 3313 - [CLKID_FCLK_DIV7_DIV] = &meson8b_fclk_div7_div.hw, 3314 - [CLKID_NAND_SEL] = &meson8b_nand_clk_sel.hw, 3315 - [CLKID_NAND_DIV] = &meson8b_nand_clk_div.hw, 3316 - [CLKID_NAND_CLK] = &meson8b_nand_clk_gate.hw, 3317 - [CLKID_PLL_FIXED_DCO] = &meson8b_fixed_pll_dco.hw, 3318 - [CLKID_HDMI_PLL_DCO] = &meson8b_hdmi_pll_dco.hw, 3319 - [CLKID_PLL_SYS_DCO] = &meson8b_sys_pll_dco.hw, 3320 - [CLKID_CPU_CLK_DIV2] = &meson8b_cpu_clk_div2.hw, 3321 - [CLKID_CPU_CLK_DIV3] = &meson8b_cpu_clk_div3.hw, 3322 - [CLKID_CPU_CLK_DIV4] = &meson8b_cpu_clk_div4.hw, 3323 - [CLKID_CPU_CLK_DIV5] = &meson8b_cpu_clk_div5.hw, 3324 - [CLKID_CPU_CLK_DIV6] = &meson8b_cpu_clk_div6.hw, 3325 - [CLKID_CPU_CLK_DIV7] = &meson8b_cpu_clk_div7.hw, 3326 - [CLKID_CPU_CLK_DIV8] = &meson8b_cpu_clk_div8.hw, 3327 - [CLKID_APB_SEL] = &meson8b_apb_clk_sel.hw, 3328 - [CLKID_APB] = &meson8b_apb_clk_gate.hw, 3329 - [CLKID_PERIPH_SEL] = &meson8b_periph_clk_sel.hw, 3330 - [CLKID_PERIPH] = &meson8b_periph_clk_gate.hw, 3331 - [CLKID_AXI_SEL] = &meson8b_axi_clk_sel.hw, 3332 - [CLKID_AXI] = &meson8b_axi_clk_gate.hw, 3333 - [CLKID_L2_DRAM_SEL] = &meson8b_l2_dram_clk_sel.hw, 3334 - [CLKID_L2_DRAM] = &meson8b_l2_dram_clk_gate.hw, 3335 - [CLKID_HDMI_PLL_LVDS_OUT] = &meson8b_hdmi_pll_lvds_out.hw, 3336 - [CLKID_HDMI_PLL_HDMI_OUT] = &meson8b_hdmi_pll_hdmi_out.hw, 3337 - [CLKID_VID_PLL_IN_SEL] = &meson8b_vid_pll_in_sel.hw, 3338 - [CLKID_VID_PLL_IN_EN] = &meson8b_vid_pll_in_en.hw, 3339 - [CLKID_VID_PLL_PRE_DIV] = &meson8b_vid_pll_pre_div.hw, 3340 - [CLKID_VID_PLL_POST_DIV] = &meson8b_vid_pll_post_div.hw, 3341 - [CLKID_VID_PLL_FINAL_DIV] = &meson8b_vid_pll_final_div.hw, 3342 - [CLKID_VCLK_IN_SEL] = &meson8b_vclk_in_sel.hw, 3343 - [CLKID_VCLK_IN_EN] = &meson8b_vclk_in_en.hw, 3344 - [CLKID_VCLK_EN] = &meson8b_vclk_en.hw, 3345 - [CLKID_VCLK_DIV1] = &meson8b_vclk_div1_gate.hw, 3346 - [CLKID_VCLK_DIV2_DIV] = &meson8b_vclk_div2_div.hw, 3347 - [CLKID_VCLK_DIV2] = &meson8b_vclk_div2_div_gate.hw, 3348 - [CLKID_VCLK_DIV4_DIV] = &meson8b_vclk_div4_div.hw, 3349 - [CLKID_VCLK_DIV4] = &meson8b_vclk_div4_div_gate.hw, 3350 - [CLKID_VCLK_DIV6_DIV] = &meson8b_vclk_div6_div.hw, 3351 - [CLKID_VCLK_DIV6] = &meson8b_vclk_div6_div_gate.hw, 3352 - [CLKID_VCLK_DIV12_DIV] = &meson8b_vclk_div12_div.hw, 3353 - [CLKID_VCLK_DIV12] = &meson8b_vclk_div12_div_gate.hw, 3354 - [CLKID_VCLK2_IN_SEL] = &meson8b_vclk2_in_sel.hw, 3355 - [CLKID_VCLK2_IN_EN] = &meson8b_vclk2_clk_in_en.hw, 3356 - [CLKID_VCLK2_EN] = &meson8b_vclk2_clk_en.hw, 3357 - [CLKID_VCLK2_DIV1] = &meson8b_vclk2_div1_gate.hw, 3358 - [CLKID_VCLK2_DIV2_DIV] = &meson8b_vclk2_div2_div.hw, 3359 - [CLKID_VCLK2_DIV2] = &meson8b_vclk2_div2_div_gate.hw, 3360 - [CLKID_VCLK2_DIV4_DIV] = &meson8b_vclk2_div4_div.hw, 3361 - [CLKID_VCLK2_DIV4] = &meson8b_vclk2_div4_div_gate.hw, 3362 - [CLKID_VCLK2_DIV6_DIV] = &meson8b_vclk2_div6_div.hw, 3363 - [CLKID_VCLK2_DIV6] = &meson8b_vclk2_div6_div_gate.hw, 3364 - [CLKID_VCLK2_DIV12_DIV] = &meson8b_vclk2_div12_div.hw, 3365 - [CLKID_VCLK2_DIV12] = &meson8b_vclk2_div12_div_gate.hw, 3366 - [CLKID_CTS_ENCT_SEL] = &meson8b_cts_enct_sel.hw, 3367 - [CLKID_CTS_ENCT] = &meson8b_cts_enct.hw, 3368 - [CLKID_CTS_ENCP_SEL] = &meson8b_cts_encp_sel.hw, 3369 - [CLKID_CTS_ENCP] = &meson8b_cts_encp.hw, 3370 - [CLKID_CTS_ENCI_SEL] = &meson8b_cts_enci_sel.hw, 3371 - [CLKID_CTS_ENCI] = &meson8b_cts_enci.hw, 3372 - [CLKID_HDMI_TX_PIXEL_SEL] = &meson8b_hdmi_tx_pixel_sel.hw, 3373 - [CLKID_HDMI_TX_PIXEL] = &meson8b_hdmi_tx_pixel.hw, 3374 - [CLKID_CTS_ENCL_SEL] = &meson8b_cts_encl_sel.hw, 3375 - [CLKID_CTS_ENCL] = &meson8b_cts_encl.hw, 3376 - [CLKID_CTS_VDAC0_SEL] = &meson8b_cts_vdac0_sel.hw, 3377 - [CLKID_CTS_VDAC0] = &meson8b_cts_vdac0.hw, 3378 - [CLKID_HDMI_SYS_SEL] = &meson8b_hdmi_sys_sel.hw, 3379 - [CLKID_HDMI_SYS_DIV] = &meson8b_hdmi_sys_div.hw, 3380 - [CLKID_HDMI_SYS] = &meson8b_hdmi_sys.hw, 3381 - [CLKID_MALI_0_SEL] = &meson8b_mali_0_sel.hw, 3382 - [CLKID_MALI_0_DIV] = &meson8b_mali_0_div.hw, 3383 - [CLKID_MALI_0] = &meson8b_mali_0.hw, 3384 - [CLKID_MALI_1_SEL] = &meson8b_mali_1_sel.hw, 3385 - [CLKID_MALI_1_DIV] = &meson8b_mali_1_div.hw, 3386 - [CLKID_MALI_1] = &meson8b_mali_1.hw, 3387 - [CLKID_MALI] = &meson8b_mali.hw, 3388 - [CLKID_GP_PLL_DCO] = &meson8m2_gp_pll_dco.hw, 3389 - [CLKID_GP_PLL] = &meson8m2_gp_pll.hw, 3390 - [CLKID_VPU_0_SEL] = &meson8m2_vpu_0_sel.hw, 3391 - [CLKID_VPU_0_DIV] = &meson8b_vpu_0_div.hw, 3392 - [CLKID_VPU_0] = &meson8b_vpu_0.hw, 3393 - [CLKID_VPU_1_SEL] = &meson8m2_vpu_1_sel.hw, 3394 - [CLKID_VPU_1_DIV] = &meson8b_vpu_1_div.hw, 3395 - [CLKID_VPU_1] = &meson8b_vpu_1.hw, 3396 - [CLKID_VPU] = &meson8b_vpu.hw, 3397 - [CLKID_VDEC_1_SEL] = &meson8b_vdec_1_sel.hw, 3398 - [CLKID_VDEC_1_1_DIV] = &meson8b_vdec_1_1_div.hw, 3399 - [CLKID_VDEC_1_1] = &meson8b_vdec_1_1.hw, 3400 - [CLKID_VDEC_1_2_DIV] = &meson8b_vdec_1_2_div.hw, 3401 - [CLKID_VDEC_1_2] = &meson8b_vdec_1_2.hw, 3402 - [CLKID_VDEC_1] = &meson8b_vdec_1.hw, 3403 - [CLKID_VDEC_HCODEC_SEL] = &meson8b_vdec_hcodec_sel.hw, 3404 - [CLKID_VDEC_HCODEC_DIV] = &meson8b_vdec_hcodec_div.hw, 3405 - [CLKID_VDEC_HCODEC] = &meson8b_vdec_hcodec.hw, 3406 - [CLKID_VDEC_2_SEL] = &meson8b_vdec_2_sel.hw, 3407 - [CLKID_VDEC_2_DIV] = &meson8b_vdec_2_div.hw, 3408 - [CLKID_VDEC_2] = &meson8b_vdec_2.hw, 3409 - [CLKID_VDEC_HEVC_SEL] = &meson8b_vdec_hevc_sel.hw, 3410 - [CLKID_VDEC_HEVC_DIV] = &meson8b_vdec_hevc_div.hw, 3411 - [CLKID_VDEC_HEVC_EN] = &meson8b_vdec_hevc_en.hw, 3412 - [CLKID_VDEC_HEVC] = &meson8b_vdec_hevc.hw, 3413 - [CLKID_CTS_AMCLK_SEL] = &meson8b_cts_amclk_sel.hw, 3414 - [CLKID_CTS_AMCLK_DIV] = &meson8b_cts_amclk_div.hw, 3415 - [CLKID_CTS_AMCLK] = &meson8b_cts_amclk.hw, 3416 - [CLKID_CTS_MCLK_I958_SEL] = &meson8b_cts_mclk_i958_sel.hw, 3417 - [CLKID_CTS_MCLK_I958_DIV] = &meson8b_cts_mclk_i958_div.hw, 3418 - [CLKID_CTS_MCLK_I958] = &meson8b_cts_mclk_i958.hw, 3419 - [CLKID_CTS_I958] = &meson8b_cts_i958.hw, 3420 - [CLKID_VID_PLL_LVDS_EN] = &meson8b_vid_pll_lvds_en.hw, 3421 - [CLKID_HDMI_PLL_DCO_IN] = &hdmi_pll_dco_in.hw, 3422 - [CLK_NR_CLKS] = NULL, 3423 - }, 3424 - .num = CLK_NR_CLKS, 3194 + static struct clk_hw *meson8m2_hw_clks[] = { 3195 + [CLKID_PLL_FIXED] = &meson8b_fixed_pll.hw, 3196 + [CLKID_PLL_VID] = &meson8b_vid_pll.hw, 3197 + [CLKID_PLL_SYS] = &meson8b_sys_pll.hw, 3198 + [CLKID_FCLK_DIV2] = &meson8b_fclk_div2.hw, 3199 + [CLKID_FCLK_DIV3] = &meson8b_fclk_div3.hw, 3200 + [CLKID_FCLK_DIV4] = &meson8b_fclk_div4.hw, 3201 + [CLKID_FCLK_DIV5] = &meson8b_fclk_div5.hw, 3202 + [CLKID_FCLK_DIV7] = &meson8b_fclk_div7.hw, 3203 + [CLKID_CPUCLK] = &meson8b_cpu_clk.hw, 3204 + [CLKID_MPEG_SEL] = &meson8b_mpeg_clk_sel.hw, 3205 + [CLKID_MPEG_DIV] = &meson8b_mpeg_clk_div.hw, 3206 + [CLKID_CLK81] = &meson8b_clk81.hw, 3207 + [CLKID_DDR] = &meson8b_ddr.hw, 3208 + [CLKID_DOS] = &meson8b_dos.hw, 3209 + [CLKID_ISA] = &meson8b_isa.hw, 3210 + [CLKID_PL301] = &meson8b_pl301.hw, 3211 + [CLKID_PERIPHS] = &meson8b_periphs.hw, 3212 + [CLKID_SPICC] = &meson8b_spicc.hw, 3213 + [CLKID_I2C] = &meson8b_i2c.hw, 3214 + [CLKID_SAR_ADC] = &meson8b_sar_adc.hw, 3215 + [CLKID_SMART_CARD] = &meson8b_smart_card.hw, 3216 + [CLKID_RNG0] = &meson8b_rng0.hw, 3217 + [CLKID_UART0] = &meson8b_uart0.hw, 3218 + [CLKID_SDHC] = &meson8b_sdhc.hw, 3219 + [CLKID_STREAM] = &meson8b_stream.hw, 3220 + [CLKID_ASYNC_FIFO] = &meson8b_async_fifo.hw, 3221 + [CLKID_SDIO] = &meson8b_sdio.hw, 3222 + [CLKID_ABUF] = &meson8b_abuf.hw, 3223 + [CLKID_HIU_IFACE] = &meson8b_hiu_iface.hw, 3224 + [CLKID_ASSIST_MISC] = &meson8b_assist_misc.hw, 3225 + [CLKID_SPI] = &meson8b_spi.hw, 3226 + [CLKID_I2S_SPDIF] = &meson8b_i2s_spdif.hw, 3227 + [CLKID_ETH] = &meson8b_eth.hw, 3228 + [CLKID_DEMUX] = &meson8b_demux.hw, 3229 + [CLKID_AIU_GLUE] = &meson8b_aiu_glue.hw, 3230 + [CLKID_IEC958] = &meson8b_iec958.hw, 3231 + [CLKID_I2S_OUT] = &meson8b_i2s_out.hw, 3232 + [CLKID_AMCLK] = &meson8b_amclk.hw, 3233 + [CLKID_AIFIFO2] = &meson8b_aififo2.hw, 3234 + [CLKID_MIXER] = &meson8b_mixer.hw, 3235 + [CLKID_MIXER_IFACE] = &meson8b_mixer_iface.hw, 3236 + [CLKID_ADC] = &meson8b_adc.hw, 3237 + [CLKID_BLKMV] = &meson8b_blkmv.hw, 3238 + [CLKID_AIU] = &meson8b_aiu.hw, 3239 + [CLKID_UART1] = &meson8b_uart1.hw, 3240 + [CLKID_G2D] = &meson8b_g2d.hw, 3241 + [CLKID_USB0] = &meson8b_usb0.hw, 3242 + [CLKID_USB1] = &meson8b_usb1.hw, 3243 + [CLKID_RESET] = &meson8b_reset.hw, 3244 + [CLKID_NAND] = &meson8b_nand.hw, 3245 + [CLKID_DOS_PARSER] = &meson8b_dos_parser.hw, 3246 + [CLKID_USB] = &meson8b_usb.hw, 3247 + [CLKID_VDIN1] = &meson8b_vdin1.hw, 3248 + [CLKID_AHB_ARB0] = &meson8b_ahb_arb0.hw, 3249 + [CLKID_EFUSE] = &meson8b_efuse.hw, 3250 + [CLKID_BOOT_ROM] = &meson8b_boot_rom.hw, 3251 + [CLKID_AHB_DATA_BUS] = &meson8b_ahb_data_bus.hw, 3252 + [CLKID_AHB_CTRL_BUS] = &meson8b_ahb_ctrl_bus.hw, 3253 + [CLKID_HDMI_INTR_SYNC] = &meson8b_hdmi_intr_sync.hw, 3254 + [CLKID_HDMI_PCLK] = &meson8b_hdmi_pclk.hw, 3255 + [CLKID_USB1_DDR_BRIDGE] = &meson8b_usb1_ddr_bridge.hw, 3256 + [CLKID_USB0_DDR_BRIDGE] = &meson8b_usb0_ddr_bridge.hw, 3257 + [CLKID_MMC_PCLK] = &meson8b_mmc_pclk.hw, 3258 + [CLKID_DVIN] = &meson8b_dvin.hw, 3259 + [CLKID_UART2] = &meson8b_uart2.hw, 3260 + [CLKID_SANA] = &meson8b_sana.hw, 3261 + [CLKID_VPU_INTR] = &meson8b_vpu_intr.hw, 3262 + [CLKID_SEC_AHB_AHB3_BRIDGE] = &meson8b_sec_ahb_ahb3_bridge.hw, 3263 + [CLKID_CLK81_A9] = &meson8b_clk81_a9.hw, 3264 + [CLKID_VCLK2_VENCI0] = &meson8b_vclk2_venci0.hw, 3265 + [CLKID_VCLK2_VENCI1] = &meson8b_vclk2_venci1.hw, 3266 + [CLKID_VCLK2_VENCP0] = &meson8b_vclk2_vencp0.hw, 3267 + [CLKID_VCLK2_VENCP1] = &meson8b_vclk2_vencp1.hw, 3268 + [CLKID_GCLK_VENCI_INT] = &meson8b_gclk_venci_int.hw, 3269 + [CLKID_GCLK_VENCP_INT] = &meson8b_gclk_vencp_int.hw, 3270 + [CLKID_DAC_CLK] = &meson8b_dac_clk.hw, 3271 + [CLKID_AOCLK_GATE] = &meson8b_aoclk_gate.hw, 3272 + [CLKID_IEC958_GATE] = &meson8b_iec958_gate.hw, 3273 + [CLKID_ENC480P] = &meson8b_enc480p.hw, 3274 + [CLKID_RNG1] = &meson8b_rng1.hw, 3275 + [CLKID_GCLK_VENCL_INT] = &meson8b_gclk_vencl_int.hw, 3276 + [CLKID_VCLK2_VENCLMCC] = &meson8b_vclk2_venclmcc.hw, 3277 + [CLKID_VCLK2_VENCL] = &meson8b_vclk2_vencl.hw, 3278 + [CLKID_VCLK2_OTHER] = &meson8b_vclk2_other.hw, 3279 + [CLKID_EDP] = &meson8b_edp.hw, 3280 + [CLKID_AO_MEDIA_CPU] = &meson8b_ao_media_cpu.hw, 3281 + [CLKID_AO_AHB_SRAM] = &meson8b_ao_ahb_sram.hw, 3282 + [CLKID_AO_AHB_BUS] = &meson8b_ao_ahb_bus.hw, 3283 + [CLKID_AO_IFACE] = &meson8b_ao_iface.hw, 3284 + [CLKID_MPLL0] = &meson8b_mpll0.hw, 3285 + [CLKID_MPLL1] = &meson8b_mpll1.hw, 3286 + [CLKID_MPLL2] = &meson8b_mpll2.hw, 3287 + [CLKID_MPLL0_DIV] = &meson8b_mpll0_div.hw, 3288 + [CLKID_MPLL1_DIV] = &meson8b_mpll1_div.hw, 3289 + [CLKID_MPLL2_DIV] = &meson8b_mpll2_div.hw, 3290 + [CLKID_CPU_IN_SEL] = &meson8b_cpu_in_sel.hw, 3291 + [CLKID_CPU_IN_DIV2] = &meson8b_cpu_in_div2.hw, 3292 + [CLKID_CPU_IN_DIV3] = &meson8b_cpu_in_div3.hw, 3293 + [CLKID_CPU_SCALE_DIV] = &meson8b_cpu_scale_div.hw, 3294 + [CLKID_CPU_SCALE_OUT_SEL] = &meson8b_cpu_scale_out_sel.hw, 3295 + [CLKID_MPLL_PREDIV] = &meson8b_mpll_prediv.hw, 3296 + [CLKID_FCLK_DIV2_DIV] = &meson8b_fclk_div2_div.hw, 3297 + [CLKID_FCLK_DIV3_DIV] = &meson8b_fclk_div3_div.hw, 3298 + [CLKID_FCLK_DIV4_DIV] = &meson8b_fclk_div4_div.hw, 3299 + [CLKID_FCLK_DIV5_DIV] = &meson8b_fclk_div5_div.hw, 3300 + [CLKID_FCLK_DIV7_DIV] = &meson8b_fclk_div7_div.hw, 3301 + [CLKID_NAND_SEL] = &meson8b_nand_clk_sel.hw, 3302 + [CLKID_NAND_DIV] = &meson8b_nand_clk_div.hw, 3303 + [CLKID_NAND_CLK] = &meson8b_nand_clk_gate.hw, 3304 + [CLKID_PLL_FIXED_DCO] = &meson8b_fixed_pll_dco.hw, 3305 + [CLKID_HDMI_PLL_DCO] = &meson8b_hdmi_pll_dco.hw, 3306 + [CLKID_PLL_SYS_DCO] = &meson8b_sys_pll_dco.hw, 3307 + [CLKID_CPU_CLK_DIV2] = &meson8b_cpu_clk_div2.hw, 3308 + [CLKID_CPU_CLK_DIV3] = &meson8b_cpu_clk_div3.hw, 3309 + [CLKID_CPU_CLK_DIV4] = &meson8b_cpu_clk_div4.hw, 3310 + [CLKID_CPU_CLK_DIV5] = &meson8b_cpu_clk_div5.hw, 3311 + [CLKID_CPU_CLK_DIV6] = &meson8b_cpu_clk_div6.hw, 3312 + [CLKID_CPU_CLK_DIV7] = &meson8b_cpu_clk_div7.hw, 3313 + [CLKID_CPU_CLK_DIV8] = &meson8b_cpu_clk_div8.hw, 3314 + [CLKID_APB_SEL] = &meson8b_apb_clk_sel.hw, 3315 + [CLKID_APB] = &meson8b_apb_clk_gate.hw, 3316 + [CLKID_PERIPH_SEL] = &meson8b_periph_clk_sel.hw, 3317 + [CLKID_PERIPH] = &meson8b_periph_clk_gate.hw, 3318 + [CLKID_AXI_SEL] = &meson8b_axi_clk_sel.hw, 3319 + [CLKID_AXI] = &meson8b_axi_clk_gate.hw, 3320 + [CLKID_L2_DRAM_SEL] = &meson8b_l2_dram_clk_sel.hw, 3321 + [CLKID_L2_DRAM] = &meson8b_l2_dram_clk_gate.hw, 3322 + [CLKID_HDMI_PLL_LVDS_OUT] = &meson8b_hdmi_pll_lvds_out.hw, 3323 + [CLKID_HDMI_PLL_HDMI_OUT] = &meson8b_hdmi_pll_hdmi_out.hw, 3324 + [CLKID_VID_PLL_IN_SEL] = &meson8b_vid_pll_in_sel.hw, 3325 + [CLKID_VID_PLL_IN_EN] = &meson8b_vid_pll_in_en.hw, 3326 + [CLKID_VID_PLL_PRE_DIV] = &meson8b_vid_pll_pre_div.hw, 3327 + [CLKID_VID_PLL_POST_DIV] = &meson8b_vid_pll_post_div.hw, 3328 + [CLKID_VID_PLL_FINAL_DIV] = &meson8b_vid_pll_final_div.hw, 3329 + [CLKID_VCLK_IN_SEL] = &meson8b_vclk_in_sel.hw, 3330 + [CLKID_VCLK_IN_EN] = &meson8b_vclk_in_en.hw, 3331 + [CLKID_VCLK_EN] = &meson8b_vclk_en.hw, 3332 + [CLKID_VCLK_DIV1] = &meson8b_vclk_div1_gate.hw, 3333 + [CLKID_VCLK_DIV2_DIV] = &meson8b_vclk_div2_div.hw, 3334 + [CLKID_VCLK_DIV2] = &meson8b_vclk_div2_div_gate.hw, 3335 + [CLKID_VCLK_DIV4_DIV] = &meson8b_vclk_div4_div.hw, 3336 + [CLKID_VCLK_DIV4] = &meson8b_vclk_div4_div_gate.hw, 3337 + [CLKID_VCLK_DIV6_DIV] = &meson8b_vclk_div6_div.hw, 3338 + [CLKID_VCLK_DIV6] = &meson8b_vclk_div6_div_gate.hw, 3339 + [CLKID_VCLK_DIV12_DIV] = &meson8b_vclk_div12_div.hw, 3340 + [CLKID_VCLK_DIV12] = &meson8b_vclk_div12_div_gate.hw, 3341 + [CLKID_VCLK2_IN_SEL] = &meson8b_vclk2_in_sel.hw, 3342 + [CLKID_VCLK2_IN_EN] = &meson8b_vclk2_clk_in_en.hw, 3343 + [CLKID_VCLK2_EN] = &meson8b_vclk2_clk_en.hw, 3344 + [CLKID_VCLK2_DIV1] = &meson8b_vclk2_div1_gate.hw, 3345 + [CLKID_VCLK2_DIV2_DIV] = &meson8b_vclk2_div2_div.hw, 3346 + [CLKID_VCLK2_DIV2] = &meson8b_vclk2_div2_div_gate.hw, 3347 + [CLKID_VCLK2_DIV4_DIV] = &meson8b_vclk2_div4_div.hw, 3348 + [CLKID_VCLK2_DIV4] = &meson8b_vclk2_div4_div_gate.hw, 3349 + [CLKID_VCLK2_DIV6_DIV] = &meson8b_vclk2_div6_div.hw, 3350 + [CLKID_VCLK2_DIV6] = &meson8b_vclk2_div6_div_gate.hw, 3351 + [CLKID_VCLK2_DIV12_DIV] = &meson8b_vclk2_div12_div.hw, 3352 + [CLKID_VCLK2_DIV12] = &meson8b_vclk2_div12_div_gate.hw, 3353 + [CLKID_CTS_ENCT_SEL] = &meson8b_cts_enct_sel.hw, 3354 + [CLKID_CTS_ENCT] = &meson8b_cts_enct.hw, 3355 + [CLKID_CTS_ENCP_SEL] = &meson8b_cts_encp_sel.hw, 3356 + [CLKID_CTS_ENCP] = &meson8b_cts_encp.hw, 3357 + [CLKID_CTS_ENCI_SEL] = &meson8b_cts_enci_sel.hw, 3358 + [CLKID_CTS_ENCI] = &meson8b_cts_enci.hw, 3359 + [CLKID_HDMI_TX_PIXEL_SEL] = &meson8b_hdmi_tx_pixel_sel.hw, 3360 + [CLKID_HDMI_TX_PIXEL] = &meson8b_hdmi_tx_pixel.hw, 3361 + [CLKID_CTS_ENCL_SEL] = &meson8b_cts_encl_sel.hw, 3362 + [CLKID_CTS_ENCL] = &meson8b_cts_encl.hw, 3363 + [CLKID_CTS_VDAC0_SEL] = &meson8b_cts_vdac0_sel.hw, 3364 + [CLKID_CTS_VDAC0] = &meson8b_cts_vdac0.hw, 3365 + [CLKID_HDMI_SYS_SEL] = &meson8b_hdmi_sys_sel.hw, 3366 + [CLKID_HDMI_SYS_DIV] = &meson8b_hdmi_sys_div.hw, 3367 + [CLKID_HDMI_SYS] = &meson8b_hdmi_sys.hw, 3368 + [CLKID_MALI_0_SEL] = &meson8b_mali_0_sel.hw, 3369 + [CLKID_MALI_0_DIV] = &meson8b_mali_0_div.hw, 3370 + [CLKID_MALI_0] = &meson8b_mali_0.hw, 3371 + [CLKID_MALI_1_SEL] = &meson8b_mali_1_sel.hw, 3372 + [CLKID_MALI_1_DIV] = &meson8b_mali_1_div.hw, 3373 + [CLKID_MALI_1] = &meson8b_mali_1.hw, 3374 + [CLKID_MALI] = &meson8b_mali.hw, 3375 + [CLKID_GP_PLL_DCO] = &meson8m2_gp_pll_dco.hw, 3376 + [CLKID_GP_PLL] = &meson8m2_gp_pll.hw, 3377 + [CLKID_VPU_0_SEL] = &meson8m2_vpu_0_sel.hw, 3378 + [CLKID_VPU_0_DIV] = &meson8b_vpu_0_div.hw, 3379 + [CLKID_VPU_0] = &meson8b_vpu_0.hw, 3380 + [CLKID_VPU_1_SEL] = &meson8m2_vpu_1_sel.hw, 3381 + [CLKID_VPU_1_DIV] = &meson8b_vpu_1_div.hw, 3382 + [CLKID_VPU_1] = &meson8b_vpu_1.hw, 3383 + [CLKID_VPU] = &meson8b_vpu.hw, 3384 + [CLKID_VDEC_1_SEL] = &meson8b_vdec_1_sel.hw, 3385 + [CLKID_VDEC_1_1_DIV] = &meson8b_vdec_1_1_div.hw, 3386 + [CLKID_VDEC_1_1] = &meson8b_vdec_1_1.hw, 3387 + [CLKID_VDEC_1_2_DIV] = &meson8b_vdec_1_2_div.hw, 3388 + [CLKID_VDEC_1_2] = &meson8b_vdec_1_2.hw, 3389 + [CLKID_VDEC_1] = &meson8b_vdec_1.hw, 3390 + [CLKID_VDEC_HCODEC_SEL] = &meson8b_vdec_hcodec_sel.hw, 3391 + [CLKID_VDEC_HCODEC_DIV] = &meson8b_vdec_hcodec_div.hw, 3392 + [CLKID_VDEC_HCODEC] = &meson8b_vdec_hcodec.hw, 3393 + [CLKID_VDEC_2_SEL] = &meson8b_vdec_2_sel.hw, 3394 + [CLKID_VDEC_2_DIV] = &meson8b_vdec_2_div.hw, 3395 + [CLKID_VDEC_2] = &meson8b_vdec_2.hw, 3396 + [CLKID_VDEC_HEVC_SEL] = &meson8b_vdec_hevc_sel.hw, 3397 + [CLKID_VDEC_HEVC_DIV] = &meson8b_vdec_hevc_div.hw, 3398 + [CLKID_VDEC_HEVC_EN] = &meson8b_vdec_hevc_en.hw, 3399 + [CLKID_VDEC_HEVC] = &meson8b_vdec_hevc.hw, 3400 + [CLKID_CTS_AMCLK_SEL] = &meson8b_cts_amclk_sel.hw, 3401 + [CLKID_CTS_AMCLK_DIV] = &meson8b_cts_amclk_div.hw, 3402 + [CLKID_CTS_AMCLK] = &meson8b_cts_amclk.hw, 3403 + [CLKID_CTS_MCLK_I958_SEL] = &meson8b_cts_mclk_i958_sel.hw, 3404 + [CLKID_CTS_MCLK_I958_DIV] = &meson8b_cts_mclk_i958_div.hw, 3405 + [CLKID_CTS_MCLK_I958] = &meson8b_cts_mclk_i958.hw, 3406 + [CLKID_CTS_I958] = &meson8b_cts_i958.hw, 3407 + [CLKID_VID_PLL_LVDS_EN] = &meson8b_vid_pll_lvds_en.hw, 3408 + [CLKID_HDMI_PLL_DCO_IN] = &hdmi_pll_dco_in.hw, 3425 3409 }; 3426 3410 3427 3411 static struct clk_regmap *const meson8b_clk_regmaps[] = { ··· 3780 3788 .nb.notifier_call = meson8b_cpu_clk_notifier_cb, 3781 3789 }; 3782 3790 3791 + static struct meson_clk_hw_data meson8_clks = { 3792 + .hws = meson8_hw_clks, 3793 + .num = ARRAY_SIZE(meson8_hw_clks), 3794 + }; 3795 + 3796 + static struct meson_clk_hw_data meson8b_clks = { 3797 + .hws = meson8b_hw_clks, 3798 + .num = ARRAY_SIZE(meson8b_hw_clks), 3799 + }; 3800 + 3801 + static struct meson_clk_hw_data meson8m2_clks = { 3802 + .hws = meson8m2_hw_clks, 3803 + .num = ARRAY_SIZE(meson8m2_hw_clks), 3804 + }; 3805 + 3783 3806 static void __init meson8b_clkc_init_common(struct device_node *np, 3784 - struct clk_hw_onecell_data *clk_hw_onecell_data) 3807 + struct meson_clk_hw_data *hw_clks) 3785 3808 { 3786 3809 struct meson8b_clk_reset *rstc; 3787 3810 struct device_node *parent_np; ··· 3837 3830 * register all clks and start with the first used ID (which is 3838 3831 * CLKID_PLL_FIXED) 3839 3832 */ 3840 - for (i = CLKID_PLL_FIXED; i < CLK_NR_CLKS; i++) { 3833 + for (i = CLKID_PLL_FIXED; i < hw_clks->num; i++) { 3841 3834 /* array might be sparse */ 3842 - if (!clk_hw_onecell_data->hws[i]) 3835 + if (!hw_clks->hws[i]) 3843 3836 continue; 3844 3837 3845 - ret = of_clk_hw_register(np, clk_hw_onecell_data->hws[i]); 3838 + ret = of_clk_hw_register(np, hw_clks->hws[i]); 3846 3839 if (ret) 3847 3840 return; 3848 3841 } 3849 3842 3850 - meson8b_cpu_nb_data.cpu_clk = clk_hw_onecell_data->hws[CLKID_CPUCLK]; 3843 + meson8b_cpu_nb_data.cpu_clk = hw_clks->hws[CLKID_CPUCLK]; 3851 3844 3852 3845 /* 3853 3846 * FIXME we shouldn't program the muxes in notifier handlers. The ··· 3863 3856 return; 3864 3857 } 3865 3858 3866 - ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, 3867 - clk_hw_onecell_data); 3859 + ret = of_clk_add_hw_provider(np, meson_clk_hw_get, hw_clks); 3868 3860 if (ret) 3869 3861 pr_err("%s: failed to register clock provider\n", __func__); 3870 3862 } 3871 3863 3872 3864 static void __init meson8_clkc_init(struct device_node *np) 3873 3865 { 3874 - return meson8b_clkc_init_common(np, &meson8_hw_onecell_data); 3866 + return meson8b_clkc_init_common(np, &meson8_clks); 3875 3867 } 3876 3868 3877 3869 static void __init meson8b_clkc_init(struct device_node *np) 3878 3870 { 3879 - return meson8b_clkc_init_common(np, &meson8b_hw_onecell_data); 3871 + return meson8b_clkc_init_common(np, &meson8b_clks); 3880 3872 } 3881 3873 3882 3874 static void __init meson8m2_clkc_init(struct device_node *np) 3883 3875 { 3884 - return meson8b_clkc_init_common(np, &meson8m2_hw_onecell_data); 3876 + return meson8b_clkc_init_common(np, &meson8m2_clks); 3885 3877 } 3886 3878 3887 3879 CLK_OF_DECLARE_DRIVER(meson8_clkc, "amlogic,meson8-clkc",
-117
drivers/clk/meson/meson8b.h
··· 77 77 #define HHI_MPLL_CNTL9 0x2A0 /* 0xa8 offset in data sheet */ 78 78 #define HHI_MPLL_CNTL10 0x2A4 /* 0xa9 offset in data sheet */ 79 79 80 - /* 81 - * CLKID index values 82 - * 83 - * These indices are entirely contrived and do not map onto the hardware. 84 - * It has now been decided to expose everything by default in the DT header: 85 - * include/dt-bindings/clock/gxbb-clkc.h. Only the clocks ids we don't want 86 - * to expose, such as the internal muxes and dividers of composite clocks, 87 - * will remain defined here. 88 - */ 89 - 90 - #define CLKID_MPLL0_DIV 96 91 - #define CLKID_MPLL1_DIV 97 92 - #define CLKID_MPLL2_DIV 98 93 - #define CLKID_CPU_IN_SEL 99 94 - #define CLKID_CPU_IN_DIV2 100 95 - #define CLKID_CPU_IN_DIV3 101 96 - #define CLKID_CPU_SCALE_DIV 102 97 - #define CLKID_CPU_SCALE_OUT_SEL 103 98 - #define CLKID_MPLL_PREDIV 104 99 - #define CLKID_FCLK_DIV2_DIV 105 100 - #define CLKID_FCLK_DIV3_DIV 106 101 - #define CLKID_FCLK_DIV4_DIV 107 102 - #define CLKID_FCLK_DIV5_DIV 108 103 - #define CLKID_FCLK_DIV7_DIV 109 104 - #define CLKID_NAND_SEL 110 105 - #define CLKID_NAND_DIV 111 106 - #define CLKID_PLL_FIXED_DCO 113 107 - #define CLKID_HDMI_PLL_DCO 114 108 - #define CLKID_PLL_SYS_DCO 115 109 - #define CLKID_CPU_CLK_DIV2 116 110 - #define CLKID_CPU_CLK_DIV3 117 111 - #define CLKID_CPU_CLK_DIV4 118 112 - #define CLKID_CPU_CLK_DIV5 119 113 - #define CLKID_CPU_CLK_DIV6 120 114 - #define CLKID_CPU_CLK_DIV7 121 115 - #define CLKID_CPU_CLK_DIV8 122 116 - #define CLKID_APB_SEL 123 117 - #define CLKID_PERIPH_SEL 125 118 - #define CLKID_AXI_SEL 127 119 - #define CLKID_L2_DRAM_SEL 129 120 - #define CLKID_HDMI_PLL_LVDS_OUT 131 121 - #define CLKID_VID_PLL_IN_SEL 133 122 - #define CLKID_VID_PLL_IN_EN 134 123 - #define CLKID_VID_PLL_PRE_DIV 135 124 - #define CLKID_VID_PLL_POST_DIV 136 125 - #define CLKID_VCLK_IN_EN 139 126 - #define CLKID_VCLK_DIV1 140 127 - #define CLKID_VCLK_DIV2_DIV 141 128 - #define CLKID_VCLK_DIV2 142 129 - #define CLKID_VCLK_DIV4_DIV 143 130 - #define CLKID_VCLK_DIV4 144 131 - #define CLKID_VCLK_DIV6_DIV 145 132 - #define CLKID_VCLK_DIV6 146 133 - #define CLKID_VCLK_DIV12_DIV 147 134 - #define CLKID_VCLK_DIV12 148 135 - #define CLKID_VCLK2_IN_EN 150 136 - #define CLKID_VCLK2_DIV1 151 137 - #define CLKID_VCLK2_DIV2_DIV 152 138 - #define CLKID_VCLK2_DIV2 153 139 - #define CLKID_VCLK2_DIV4_DIV 154 140 - #define CLKID_VCLK2_DIV4 155 141 - #define CLKID_VCLK2_DIV6_DIV 156 142 - #define CLKID_VCLK2_DIV6 157 143 - #define CLKID_VCLK2_DIV12_DIV 158 144 - #define CLKID_VCLK2_DIV12 159 145 - #define CLKID_CTS_ENCT_SEL 160 146 - #define CLKID_CTS_ENCP_SEL 162 147 - #define CLKID_CTS_ENCI_SEL 164 148 - #define CLKID_HDMI_TX_PIXEL_SEL 166 149 - #define CLKID_CTS_ENCL_SEL 168 150 - #define CLKID_CTS_VDAC0_SEL 170 151 - #define CLKID_HDMI_SYS_SEL 172 152 - #define CLKID_HDMI_SYS_DIV 173 153 - #define CLKID_MALI_0_SEL 175 154 - #define CLKID_MALI_0_DIV 176 155 - #define CLKID_MALI_0 177 156 - #define CLKID_MALI_1_SEL 178 157 - #define CLKID_MALI_1_DIV 179 158 - #define CLKID_MALI_1 180 159 - #define CLKID_GP_PLL_DCO 181 160 - #define CLKID_GP_PLL 182 161 - #define CLKID_VPU_0_SEL 183 162 - #define CLKID_VPU_0_DIV 184 163 - #define CLKID_VPU_0 185 164 - #define CLKID_VPU_1_SEL 186 165 - #define CLKID_VPU_1_DIV 187 166 - #define CLKID_VPU_1 189 167 - #define CLKID_VDEC_1_SEL 191 168 - #define CLKID_VDEC_1_1_DIV 192 169 - #define CLKID_VDEC_1_1 193 170 - #define CLKID_VDEC_1_2_DIV 194 171 - #define CLKID_VDEC_1_2 195 172 - #define CLKID_VDEC_HCODEC_SEL 197 173 - #define CLKID_VDEC_HCODEC_DIV 198 174 - #define CLKID_VDEC_2_SEL 200 175 - #define CLKID_VDEC_2_DIV 201 176 - #define CLKID_VDEC_HEVC_SEL 203 177 - #define CLKID_VDEC_HEVC_DIV 204 178 - #define CLKID_VDEC_HEVC_EN 205 179 - #define CLKID_CTS_AMCLK_SEL 207 180 - #define CLKID_CTS_AMCLK_DIV 208 181 - #define CLKID_CTS_MCLK_I958_SEL 210 182 - #define CLKID_CTS_MCLK_I958_DIV 211 183 - #define CLKID_VCLK_EN 214 184 - #define CLKID_VCLK2_EN 215 185 - #define CLKID_VID_PLL_LVDS_EN 216 186 - #define CLKID_HDMI_PLL_DCO_IN 217 187 - 188 - #define CLK_NR_CLKS 218 189 - 190 - /* 191 - * include the CLKID and RESETID that have 192 - * been made part of the stable DT binding 193 - */ 194 - #include <dt-bindings/clock/meson8b-clkc.h> 195 - #include <dt-bindings/reset/amlogic,meson8b-clkc-reset.h> 196 - 197 80 #endif /* __MESON8B_H */
+1 -1
drivers/clk/microchip/clk-pic32mzda.c
··· 9 9 #include <linux/clkdev.h> 10 10 #include <linux/io.h> 11 11 #include <linux/module.h> 12 + #include <linux/of.h> 12 13 #include <linux/of_address.h> 13 - #include <linux/of_platform.h> 14 14 #include <linux/platform_device.h> 15 15 #include <asm/traps.h> 16 16
-4
drivers/clk/mmp/Makefile
··· 11 11 obj-$(CONFIG_COMMON_CLK_MMP2) += clk-of-mmp2.o clk-pll.o pwr-island.o 12 12 obj-$(CONFIG_COMMON_CLK_MMP2_AUDIO) += clk-audio.o 13 13 14 - obj-$(CONFIG_CPU_PXA168) += clk-pxa168.o 15 - obj-$(CONFIG_CPU_PXA910) += clk-pxa910.o 16 - obj-$(CONFIG_CPU_MMP2) += clk-mmp2.o 17 - 18 14 obj-y += clk-of-pxa1928.o
+4 -2
drivers/clk/mmp/clk-audio.c
··· 55 55 #define SSPA_AUD_PLL_CTRL1_DIV_OCLK_PATTERN_MASK (0x7ff << 0) 56 56 #define SSPA_AUD_PLL_CTRL1_DIV_OCLK_PATTERN(x) ((x) << 0) 57 57 58 + #define CLK_AUDIO_NR_CLKS 3 59 + 58 60 struct mmp2_audio_clk { 59 61 void __iomem *mmio_base; 60 62 ··· 338 336 priv->clk_data.hws[MMP2_CLK_AUDIO_SYSCLK] = &priv->sysclk_gate.hw; 339 337 priv->clk_data.hws[MMP2_CLK_AUDIO_SSPA0] = &priv->sspa0_gate.hw; 340 338 priv->clk_data.hws[MMP2_CLK_AUDIO_SSPA1] = &priv->sspa1_gate.hw; 341 - priv->clk_data.num = MMP2_CLK_AUDIO_NR_CLKS; 339 + priv->clk_data.num = CLK_AUDIO_NR_CLKS; 342 340 343 341 return of_clk_add_hw_provider(dev->of_node, of_clk_hw_onecell_get, 344 342 &priv->clk_data); ··· 351 349 352 350 priv = devm_kzalloc(&pdev->dev, 353 351 struct_size(priv, clk_data.hws, 354 - MMP2_CLK_AUDIO_NR_CLKS), 352 + CLK_AUDIO_NR_CLKS), 355 353 GFP_KERNEL); 356 354 if (!priv) 357 355 return -ENOMEM;
-454
drivers/clk/mmp/clk-mmp2.c
··· 1 - // SPDX-License-Identifier: GPL-2.0-only 2 - /* 3 - * mmp2 clock framework source file 4 - * 5 - * Copyright (C) 2012 Marvell 6 - * Chao Xie <xiechao.mail@gmail.com> 7 - */ 8 - 9 - #include <linux/clk.h> 10 - #include <linux/module.h> 11 - #include <linux/kernel.h> 12 - #include <linux/spinlock.h> 13 - #include <linux/io.h> 14 - #include <linux/delay.h> 15 - #include <linux/err.h> 16 - #include <linux/clk/mmp.h> 17 - 18 - #include "clk.h" 19 - 20 - #define APBC_RTC 0x0 21 - #define APBC_TWSI0 0x4 22 - #define APBC_TWSI1 0x8 23 - #define APBC_TWSI2 0xc 24 - #define APBC_TWSI3 0x10 25 - #define APBC_TWSI4 0x7c 26 - #define APBC_TWSI5 0x80 27 - #define APBC_KPC 0x18 28 - #define APBC_UART0 0x2c 29 - #define APBC_UART1 0x30 30 - #define APBC_UART2 0x34 31 - #define APBC_UART3 0x88 32 - #define APBC_GPIO 0x38 33 - #define APBC_PWM0 0x3c 34 - #define APBC_PWM1 0x40 35 - #define APBC_PWM2 0x44 36 - #define APBC_PWM3 0x48 37 - #define APBC_SSP0 0x50 38 - #define APBC_SSP1 0x54 39 - #define APBC_SSP2 0x58 40 - #define APBC_SSP3 0x5c 41 - #define APMU_SDH0 0x54 42 - #define APMU_SDH1 0x58 43 - #define APMU_SDH2 0xe8 44 - #define APMU_SDH3 0xec 45 - #define APMU_USB 0x5c 46 - #define APMU_DISP0 0x4c 47 - #define APMU_DISP1 0x110 48 - #define APMU_CCIC0 0x50 49 - #define APMU_CCIC1 0xf4 50 - #define MPMU_UART_PLL 0x14 51 - 52 - static DEFINE_SPINLOCK(clk_lock); 53 - 54 - static struct mmp_clk_factor_masks uart_factor_masks = { 55 - .factor = 2, 56 - .num_mask = 0x1fff, 57 - .den_mask = 0x1fff, 58 - .num_shift = 16, 59 - .den_shift = 0, 60 - }; 61 - 62 - static struct mmp_clk_factor_tbl uart_factor_tbl[] = { 63 - {.num = 8125, .den = 1536}, /*14.745MHZ */ 64 - {.num = 3521, .den = 689}, /*19.23MHZ */ 65 - }; 66 - 67 - static const char *uart_parent[] = {"uart_pll", "vctcxo"}; 68 - static const char *ssp_parent[] = {"vctcxo_4", "vctcxo_2", "vctcxo", "pll1_16"}; 69 - static const char *sdh_parent[] = {"pll1_4", "pll2", "usb_pll", "pll1"}; 70 - static const char *disp_parent[] = {"pll1", "pll1_16", "pll2", "vctcxo"}; 71 - static const char *ccic_parent[] = {"pll1_2", "pll1_16", "vctcxo"}; 72 - 73 - void __init mmp2_clk_init(phys_addr_t mpmu_phys, phys_addr_t apmu_phys, 74 - phys_addr_t apbc_phys) 75 - { 76 - struct clk *clk; 77 - struct clk *vctcxo; 78 - void __iomem *mpmu_base; 79 - void __iomem *apmu_base; 80 - void __iomem *apbc_base; 81 - 82 - mpmu_base = ioremap(mpmu_phys, SZ_4K); 83 - if (!mpmu_base) { 84 - pr_err("error to ioremap MPMU base\n"); 85 - return; 86 - } 87 - 88 - apmu_base = ioremap(apmu_phys, SZ_4K); 89 - if (!apmu_base) { 90 - pr_err("error to ioremap APMU base\n"); 91 - return; 92 - } 93 - 94 - apbc_base = ioremap(apbc_phys, SZ_4K); 95 - if (!apbc_base) { 96 - pr_err("error to ioremap APBC base\n"); 97 - return; 98 - } 99 - 100 - clk = clk_register_fixed_rate(NULL, "clk32", NULL, 0, 3200); 101 - clk_register_clkdev(clk, "clk32", NULL); 102 - 103 - vctcxo = clk_register_fixed_rate(NULL, "vctcxo", NULL, 0, 26000000); 104 - clk_register_clkdev(vctcxo, "vctcxo", NULL); 105 - 106 - clk = clk_register_fixed_rate(NULL, "pll1", NULL, 0, 800000000); 107 - clk_register_clkdev(clk, "pll1", NULL); 108 - 109 - clk = clk_register_fixed_rate(NULL, "usb_pll", NULL, 0, 480000000); 110 - clk_register_clkdev(clk, "usb_pll", NULL); 111 - 112 - clk = clk_register_fixed_rate(NULL, "pll2", NULL, 0, 960000000); 113 - clk_register_clkdev(clk, "pll2", NULL); 114 - 115 - clk = clk_register_fixed_factor(NULL, "pll1_2", "pll1", 116 - CLK_SET_RATE_PARENT, 1, 2); 117 - clk_register_clkdev(clk, "pll1_2", NULL); 118 - 119 - clk = clk_register_fixed_factor(NULL, "pll1_4", "pll1_2", 120 - CLK_SET_RATE_PARENT, 1, 2); 121 - clk_register_clkdev(clk, "pll1_4", NULL); 122 - 123 - clk = clk_register_fixed_factor(NULL, "pll1_8", "pll1_4", 124 - CLK_SET_RATE_PARENT, 1, 2); 125 - clk_register_clkdev(clk, "pll1_8", NULL); 126 - 127 - clk = clk_register_fixed_factor(NULL, "pll1_16", "pll1_8", 128 - CLK_SET_RATE_PARENT, 1, 2); 129 - clk_register_clkdev(clk, "pll1_16", NULL); 130 - 131 - clk = clk_register_fixed_factor(NULL, "pll1_20", "pll1_4", 132 - CLK_SET_RATE_PARENT, 1, 5); 133 - clk_register_clkdev(clk, "pll1_20", NULL); 134 - 135 - clk = clk_register_fixed_factor(NULL, "pll1_3", "pll1", 136 - CLK_SET_RATE_PARENT, 1, 3); 137 - clk_register_clkdev(clk, "pll1_3", NULL); 138 - 139 - clk = clk_register_fixed_factor(NULL, "pll1_6", "pll1_3", 140 - CLK_SET_RATE_PARENT, 1, 2); 141 - clk_register_clkdev(clk, "pll1_6", NULL); 142 - 143 - clk = clk_register_fixed_factor(NULL, "pll1_12", "pll1_6", 144 - CLK_SET_RATE_PARENT, 1, 2); 145 - clk_register_clkdev(clk, "pll1_12", NULL); 146 - 147 - clk = clk_register_fixed_factor(NULL, "pll2_2", "pll2", 148 - CLK_SET_RATE_PARENT, 1, 2); 149 - clk_register_clkdev(clk, "pll2_2", NULL); 150 - 151 - clk = clk_register_fixed_factor(NULL, "pll2_4", "pll2_2", 152 - CLK_SET_RATE_PARENT, 1, 2); 153 - clk_register_clkdev(clk, "pll2_4", NULL); 154 - 155 - clk = clk_register_fixed_factor(NULL, "pll2_8", "pll2_4", 156 - CLK_SET_RATE_PARENT, 1, 2); 157 - clk_register_clkdev(clk, "pll2_8", NULL); 158 - 159 - clk = clk_register_fixed_factor(NULL, "pll2_16", "pll2_8", 160 - CLK_SET_RATE_PARENT, 1, 2); 161 - clk_register_clkdev(clk, "pll2_16", NULL); 162 - 163 - clk = clk_register_fixed_factor(NULL, "pll2_3", "pll2", 164 - CLK_SET_RATE_PARENT, 1, 3); 165 - clk_register_clkdev(clk, "pll2_3", NULL); 166 - 167 - clk = clk_register_fixed_factor(NULL, "pll2_6", "pll2_3", 168 - CLK_SET_RATE_PARENT, 1, 2); 169 - clk_register_clkdev(clk, "pll2_6", NULL); 170 - 171 - clk = clk_register_fixed_factor(NULL, "pll2_12", "pll2_6", 172 - CLK_SET_RATE_PARENT, 1, 2); 173 - clk_register_clkdev(clk, "pll2_12", NULL); 174 - 175 - clk = clk_register_fixed_factor(NULL, "vctcxo_2", "vctcxo", 176 - CLK_SET_RATE_PARENT, 1, 2); 177 - clk_register_clkdev(clk, "vctcxo_2", NULL); 178 - 179 - clk = clk_register_fixed_factor(NULL, "vctcxo_4", "vctcxo_2", 180 - CLK_SET_RATE_PARENT, 1, 2); 181 - clk_register_clkdev(clk, "vctcxo_4", NULL); 182 - 183 - clk = mmp_clk_register_factor("uart_pll", "pll1_4", 0, 184 - mpmu_base + MPMU_UART_PLL, 185 - &uart_factor_masks, uart_factor_tbl, 186 - ARRAY_SIZE(uart_factor_tbl), &clk_lock); 187 - clk_set_rate(clk, 14745600); 188 - clk_register_clkdev(clk, "uart_pll", NULL); 189 - 190 - clk = mmp_clk_register_apbc("twsi0", "vctcxo", 191 - apbc_base + APBC_TWSI0, 10, 0, &clk_lock); 192 - clk_register_clkdev(clk, NULL, "pxa2xx-i2c.0"); 193 - 194 - clk = mmp_clk_register_apbc("twsi1", "vctcxo", 195 - apbc_base + APBC_TWSI1, 10, 0, &clk_lock); 196 - clk_register_clkdev(clk, NULL, "pxa2xx-i2c.1"); 197 - 198 - clk = mmp_clk_register_apbc("twsi2", "vctcxo", 199 - apbc_base + APBC_TWSI2, 10, 0, &clk_lock); 200 - clk_register_clkdev(clk, NULL, "pxa2xx-i2c.2"); 201 - 202 - clk = mmp_clk_register_apbc("twsi3", "vctcxo", 203 - apbc_base + APBC_TWSI3, 10, 0, &clk_lock); 204 - clk_register_clkdev(clk, NULL, "pxa2xx-i2c.3"); 205 - 206 - clk = mmp_clk_register_apbc("twsi4", "vctcxo", 207 - apbc_base + APBC_TWSI4, 10, 0, &clk_lock); 208 - clk_register_clkdev(clk, NULL, "pxa2xx-i2c.4"); 209 - 210 - clk = mmp_clk_register_apbc("twsi5", "vctcxo", 211 - apbc_base + APBC_TWSI5, 10, 0, &clk_lock); 212 - clk_register_clkdev(clk, NULL, "pxa2xx-i2c.5"); 213 - 214 - clk = mmp_clk_register_apbc("gpio", "vctcxo", 215 - apbc_base + APBC_GPIO, 10, 0, &clk_lock); 216 - clk_register_clkdev(clk, NULL, "mmp2-gpio"); 217 - 218 - clk = mmp_clk_register_apbc("kpc", "clk32", 219 - apbc_base + APBC_KPC, 10, 0, &clk_lock); 220 - clk_register_clkdev(clk, NULL, "pxa27x-keypad"); 221 - 222 - clk = mmp_clk_register_apbc("rtc", "clk32", 223 - apbc_base + APBC_RTC, 10, 0, &clk_lock); 224 - clk_register_clkdev(clk, NULL, "mmp-rtc"); 225 - 226 - clk = mmp_clk_register_apbc("pwm0", "vctcxo", 227 - apbc_base + APBC_PWM0, 10, 0, &clk_lock); 228 - clk_register_clkdev(clk, NULL, "mmp2-pwm.0"); 229 - 230 - clk = mmp_clk_register_apbc("pwm1", "vctcxo", 231 - apbc_base + APBC_PWM1, 10, 0, &clk_lock); 232 - clk_register_clkdev(clk, NULL, "mmp2-pwm.1"); 233 - 234 - clk = mmp_clk_register_apbc("pwm2", "vctcxo", 235 - apbc_base + APBC_PWM2, 10, 0, &clk_lock); 236 - clk_register_clkdev(clk, NULL, "mmp2-pwm.2"); 237 - 238 - clk = mmp_clk_register_apbc("pwm3", "vctcxo", 239 - apbc_base + APBC_PWM3, 10, 0, &clk_lock); 240 - clk_register_clkdev(clk, NULL, "mmp2-pwm.3"); 241 - 242 - clk = clk_register_mux(NULL, "uart0_mux", uart_parent, 243 - ARRAY_SIZE(uart_parent), 244 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 245 - apbc_base + APBC_UART0, 4, 3, 0, &clk_lock); 246 - clk_set_parent(clk, vctcxo); 247 - clk_register_clkdev(clk, "uart_mux.0", NULL); 248 - 249 - clk = mmp_clk_register_apbc("uart0", "uart0_mux", 250 - apbc_base + APBC_UART0, 10, 0, &clk_lock); 251 - clk_register_clkdev(clk, NULL, "pxa2xx-uart.0"); 252 - 253 - clk = clk_register_mux(NULL, "uart1_mux", uart_parent, 254 - ARRAY_SIZE(uart_parent), 255 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 256 - apbc_base + APBC_UART1, 4, 3, 0, &clk_lock); 257 - clk_set_parent(clk, vctcxo); 258 - clk_register_clkdev(clk, "uart_mux.1", NULL); 259 - 260 - clk = mmp_clk_register_apbc("uart1", "uart1_mux", 261 - apbc_base + APBC_UART1, 10, 0, &clk_lock); 262 - clk_register_clkdev(clk, NULL, "pxa2xx-uart.1"); 263 - 264 - clk = clk_register_mux(NULL, "uart2_mux", uart_parent, 265 - ARRAY_SIZE(uart_parent), 266 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 267 - apbc_base + APBC_UART2, 4, 3, 0, &clk_lock); 268 - clk_set_parent(clk, vctcxo); 269 - clk_register_clkdev(clk, "uart_mux.2", NULL); 270 - 271 - clk = mmp_clk_register_apbc("uart2", "uart2_mux", 272 - apbc_base + APBC_UART2, 10, 0, &clk_lock); 273 - clk_register_clkdev(clk, NULL, "pxa2xx-uart.2"); 274 - 275 - clk = clk_register_mux(NULL, "uart3_mux", uart_parent, 276 - ARRAY_SIZE(uart_parent), 277 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 278 - apbc_base + APBC_UART3, 4, 3, 0, &clk_lock); 279 - clk_set_parent(clk, vctcxo); 280 - clk_register_clkdev(clk, "uart_mux.3", NULL); 281 - 282 - clk = mmp_clk_register_apbc("uart3", "uart3_mux", 283 - apbc_base + APBC_UART3, 10, 0, &clk_lock); 284 - clk_register_clkdev(clk, NULL, "pxa2xx-uart.3"); 285 - 286 - clk = clk_register_mux(NULL, "ssp0_mux", ssp_parent, 287 - ARRAY_SIZE(ssp_parent), 288 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 289 - apbc_base + APBC_SSP0, 4, 3, 0, &clk_lock); 290 - clk_register_clkdev(clk, "uart_mux.0", NULL); 291 - 292 - clk = mmp_clk_register_apbc("ssp0", "ssp0_mux", 293 - apbc_base + APBC_SSP0, 10, 0, &clk_lock); 294 - clk_register_clkdev(clk, NULL, "mmp-ssp.0"); 295 - 296 - clk = clk_register_mux(NULL, "ssp1_mux", ssp_parent, 297 - ARRAY_SIZE(ssp_parent), 298 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 299 - apbc_base + APBC_SSP1, 4, 3, 0, &clk_lock); 300 - clk_register_clkdev(clk, "ssp_mux.1", NULL); 301 - 302 - clk = mmp_clk_register_apbc("ssp1", "ssp1_mux", 303 - apbc_base + APBC_SSP1, 10, 0, &clk_lock); 304 - clk_register_clkdev(clk, NULL, "mmp-ssp.1"); 305 - 306 - clk = clk_register_mux(NULL, "ssp2_mux", ssp_parent, 307 - ARRAY_SIZE(ssp_parent), 308 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 309 - apbc_base + APBC_SSP2, 4, 3, 0, &clk_lock); 310 - clk_register_clkdev(clk, "ssp_mux.2", NULL); 311 - 312 - clk = mmp_clk_register_apbc("ssp2", "ssp2_mux", 313 - apbc_base + APBC_SSP2, 10, 0, &clk_lock); 314 - clk_register_clkdev(clk, NULL, "mmp-ssp.2"); 315 - 316 - clk = clk_register_mux(NULL, "ssp3_mux", ssp_parent, 317 - ARRAY_SIZE(ssp_parent), 318 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 319 - apbc_base + APBC_SSP3, 4, 3, 0, &clk_lock); 320 - clk_register_clkdev(clk, "ssp_mux.3", NULL); 321 - 322 - clk = mmp_clk_register_apbc("ssp3", "ssp3_mux", 323 - apbc_base + APBC_SSP3, 10, 0, &clk_lock); 324 - clk_register_clkdev(clk, NULL, "mmp-ssp.3"); 325 - 326 - clk = clk_register_mux(NULL, "sdh_mux", sdh_parent, 327 - ARRAY_SIZE(sdh_parent), 328 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 329 - apmu_base + APMU_SDH0, 8, 2, 0, &clk_lock); 330 - clk_register_clkdev(clk, "sdh_mux", NULL); 331 - 332 - clk = clk_register_divider(NULL, "sdh_div", "sdh_mux", 333 - CLK_SET_RATE_PARENT, apmu_base + APMU_SDH0, 334 - 10, 4, CLK_DIVIDER_ONE_BASED, &clk_lock); 335 - clk_register_clkdev(clk, "sdh_div", NULL); 336 - 337 - clk = mmp_clk_register_apmu("sdh0", "sdh_div", apmu_base + APMU_SDH0, 338 - 0x1b, &clk_lock); 339 - clk_register_clkdev(clk, NULL, "sdhci-pxav3.0"); 340 - 341 - clk = mmp_clk_register_apmu("sdh1", "sdh_div", apmu_base + APMU_SDH1, 342 - 0x1b, &clk_lock); 343 - clk_register_clkdev(clk, NULL, "sdhci-pxav3.1"); 344 - 345 - clk = mmp_clk_register_apmu("sdh2", "sdh_div", apmu_base + APMU_SDH2, 346 - 0x1b, &clk_lock); 347 - clk_register_clkdev(clk, NULL, "sdhci-pxav3.2"); 348 - 349 - clk = mmp_clk_register_apmu("sdh3", "sdh_div", apmu_base + APMU_SDH3, 350 - 0x1b, &clk_lock); 351 - clk_register_clkdev(clk, NULL, "sdhci-pxav3.3"); 352 - 353 - clk = mmp_clk_register_apmu("usb", "usb_pll", apmu_base + APMU_USB, 354 - 0x9, &clk_lock); 355 - clk_register_clkdev(clk, "usb_clk", NULL); 356 - 357 - clk = clk_register_mux(NULL, "disp0_mux", disp_parent, 358 - ARRAY_SIZE(disp_parent), 359 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 360 - apmu_base + APMU_DISP0, 6, 2, 0, &clk_lock); 361 - clk_register_clkdev(clk, "disp_mux.0", NULL); 362 - 363 - clk = clk_register_divider(NULL, "disp0_div", "disp0_mux", 364 - CLK_SET_RATE_PARENT, apmu_base + APMU_DISP0, 365 - 8, 4, CLK_DIVIDER_ONE_BASED, &clk_lock); 366 - clk_register_clkdev(clk, "disp_div.0", NULL); 367 - 368 - clk = mmp_clk_register_apmu("disp0", "disp0_div", 369 - apmu_base + APMU_DISP0, 0x1b, &clk_lock); 370 - clk_register_clkdev(clk, NULL, "mmp-disp.0"); 371 - 372 - clk = clk_register_divider(NULL, "disp0_sphy_div", "disp0_mux", 0, 373 - apmu_base + APMU_DISP0, 15, 5, 0, &clk_lock); 374 - clk_register_clkdev(clk, "disp_sphy_div.0", NULL); 375 - 376 - clk = mmp_clk_register_apmu("disp0_sphy", "disp0_sphy_div", 377 - apmu_base + APMU_DISP0, 0x1024, &clk_lock); 378 - clk_register_clkdev(clk, "disp_sphy.0", NULL); 379 - 380 - clk = clk_register_mux(NULL, "disp1_mux", disp_parent, 381 - ARRAY_SIZE(disp_parent), 382 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 383 - apmu_base + APMU_DISP1, 6, 2, 0, &clk_lock); 384 - clk_register_clkdev(clk, "disp_mux.1", NULL); 385 - 386 - clk = clk_register_divider(NULL, "disp1_div", "disp1_mux", 387 - CLK_SET_RATE_PARENT, apmu_base + APMU_DISP1, 388 - 8, 4, CLK_DIVIDER_ONE_BASED, &clk_lock); 389 - clk_register_clkdev(clk, "disp_div.1", NULL); 390 - 391 - clk = mmp_clk_register_apmu("disp1", "disp1_div", 392 - apmu_base + APMU_DISP1, 0x1b, &clk_lock); 393 - clk_register_clkdev(clk, NULL, "mmp-disp.1"); 394 - 395 - clk = mmp_clk_register_apmu("ccic_arbiter", "vctcxo", 396 - apmu_base + APMU_CCIC0, 0x1800, &clk_lock); 397 - clk_register_clkdev(clk, "ccic_arbiter", NULL); 398 - 399 - clk = clk_register_mux(NULL, "ccic0_mux", ccic_parent, 400 - ARRAY_SIZE(ccic_parent), 401 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 402 - apmu_base + APMU_CCIC0, 6, 2, 0, &clk_lock); 403 - clk_register_clkdev(clk, "ccic_mux.0", NULL); 404 - 405 - clk = clk_register_divider(NULL, "ccic0_div", "ccic0_mux", 406 - CLK_SET_RATE_PARENT, apmu_base + APMU_CCIC0, 407 - 17, 4, CLK_DIVIDER_ONE_BASED, &clk_lock); 408 - clk_register_clkdev(clk, "ccic_div.0", NULL); 409 - 410 - clk = mmp_clk_register_apmu("ccic0", "ccic0_div", 411 - apmu_base + APMU_CCIC0, 0x1b, &clk_lock); 412 - clk_register_clkdev(clk, "fnclk", "mmp-ccic.0"); 413 - 414 - clk = mmp_clk_register_apmu("ccic0_phy", "ccic0_div", 415 - apmu_base + APMU_CCIC0, 0x24, &clk_lock); 416 - clk_register_clkdev(clk, "phyclk", "mmp-ccic.0"); 417 - 418 - clk = clk_register_divider(NULL, "ccic0_sphy_div", "ccic0_div", 419 - CLK_SET_RATE_PARENT, apmu_base + APMU_CCIC0, 420 - 10, 5, 0, &clk_lock); 421 - clk_register_clkdev(clk, "sphyclk_div", "mmp-ccic.0"); 422 - 423 - clk = mmp_clk_register_apmu("ccic0_sphy", "ccic0_sphy_div", 424 - apmu_base + APMU_CCIC0, 0x300, &clk_lock); 425 - clk_register_clkdev(clk, "sphyclk", "mmp-ccic.0"); 426 - 427 - clk = clk_register_mux(NULL, "ccic1_mux", ccic_parent, 428 - ARRAY_SIZE(ccic_parent), 429 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 430 - apmu_base + APMU_CCIC1, 6, 2, 0, &clk_lock); 431 - clk_register_clkdev(clk, "ccic_mux.1", NULL); 432 - 433 - clk = clk_register_divider(NULL, "ccic1_div", "ccic1_mux", 434 - CLK_SET_RATE_PARENT, apmu_base + APMU_CCIC1, 435 - 16, 4, CLK_DIVIDER_ONE_BASED, &clk_lock); 436 - clk_register_clkdev(clk, "ccic_div.1", NULL); 437 - 438 - clk = mmp_clk_register_apmu("ccic1", "ccic1_div", 439 - apmu_base + APMU_CCIC1, 0x1b, &clk_lock); 440 - clk_register_clkdev(clk, "fnclk", "mmp-ccic.1"); 441 - 442 - clk = mmp_clk_register_apmu("ccic1_phy", "ccic1_div", 443 - apmu_base + APMU_CCIC1, 0x24, &clk_lock); 444 - clk_register_clkdev(clk, "phyclk", "mmp-ccic.1"); 445 - 446 - clk = clk_register_divider(NULL, "ccic1_sphy_div", "ccic1_div", 447 - CLK_SET_RATE_PARENT, apmu_base + APMU_CCIC1, 448 - 10, 5, 0, &clk_lock); 449 - clk_register_clkdev(clk, "sphyclk_div", "mmp-ccic.1"); 450 - 451 - clk = mmp_clk_register_apmu("ccic1_sphy", "ccic1_sphy_div", 452 - apmu_base + APMU_CCIC1, 0x300, &clk_lock); 453 - clk_register_clkdev(clk, "sphyclk", "mmp-ccic.1"); 454 - }
+3 -1
drivers/clk/mmp/clk-of-mmp2.c
··· 78 78 #define MPMU_PLL_DIFF_CTRL 0x68 79 79 #define MPMU_PLL2_CTRL1 0x414 80 80 81 + #define NR_CLKS 200 82 + 81 83 enum mmp2_clk_model { 82 84 CLK_MODEL_MMP2, 83 85 CLK_MODEL_MMP3, ··· 545 543 546 544 mmp2_pm_domain_init(np, pxa_unit); 547 545 548 - mmp_clk_init(np, &pxa_unit->unit, MMP2_NR_CLKS); 546 + mmp_clk_init(np, &pxa_unit->unit, NR_CLKS); 549 547 550 548 mmp2_main_clk_init(pxa_unit); 551 549
+3 -1
drivers/clk/mmp/clk-of-pxa168.c
··· 62 62 #define APMU_EPD 0x104 63 63 #define MPMU_UART_PLL 0x14 64 64 65 + #define NR_CLKS 200 66 + 65 67 struct pxa168_clk_unit { 66 68 struct mmp_clk_unit unit; 67 69 void __iomem *mpmu_base; ··· 323 321 return; 324 322 } 325 323 326 - mmp_clk_init(np, &pxa_unit->unit, PXA168_NR_CLKS); 324 + mmp_clk_init(np, &pxa_unit->unit, NR_CLKS); 327 325 328 326 pxa168_pll_init(pxa_unit); 329 327
+5 -2
drivers/clk/mmp/clk-of-pxa1928.c
··· 22 22 23 23 #define MPMU_UART_PLL 0x14 24 24 25 + #define APBC_NR_CLKS 48 26 + #define APMU_NR_CLKS 96 27 + 25 28 struct pxa1928_clk_unit { 26 29 struct mmp_clk_unit unit; 27 30 void __iomem *mpmu_base; ··· 238 235 return; 239 236 } 240 237 241 - mmp_clk_init(np, &pxa_unit->unit, PXA1928_APMU_NR_CLKS); 238 + mmp_clk_init(np, &pxa_unit->unit, APMU_NR_CLKS); 242 239 243 240 pxa1928_axi_periph_clk_init(pxa_unit); 244 241 } ··· 259 256 return; 260 257 } 261 258 262 - mmp_clk_init(np, &pxa_unit->unit, PXA1928_APBC_NR_CLKS); 259 + mmp_clk_init(np, &pxa_unit->unit, APBC_NR_CLKS); 263 260 264 261 pxa1928_apb_periph_clk_init(pxa_unit); 265 262 pxa1928_clk_reset_init(np, pxa_unit);
+3 -1
drivers/clk/mmp/clk-of-pxa910.c
··· 44 44 #define APMU_DFC 0x60 45 45 #define MPMU_UART_PLL 0x14 46 46 47 + #define NR_CLKS 200 48 + 47 49 struct pxa910_clk_unit { 48 50 struct mmp_clk_unit unit; 49 51 void __iomem *mpmu_base; ··· 298 296 goto unmap_apbc_region; 299 297 } 300 298 301 - mmp_clk_init(np, &pxa_unit->unit, PXA910_NR_CLKS); 299 + mmp_clk_init(np, &pxa_unit->unit, NR_CLKS); 302 300 303 301 pxa910_pll_init(pxa_unit); 304 302
-354
drivers/clk/mmp/clk-pxa168.c
··· 1 - // SPDX-License-Identifier: GPL-2.0-only 2 - /* 3 - * pxa168 clock framework source file 4 - * 5 - * Copyright (C) 2012 Marvell 6 - * Chao Xie <xiechao.mail@gmail.com> 7 - */ 8 - 9 - #include <linux/clk.h> 10 - #include <linux/clk/mmp.h> 11 - #include <linux/module.h> 12 - #include <linux/kernel.h> 13 - #include <linux/spinlock.h> 14 - #include <linux/io.h> 15 - #include <linux/delay.h> 16 - #include <linux/err.h> 17 - 18 - #include "clk.h" 19 - 20 - #define APBC_RTC 0x28 21 - #define APBC_TWSI0 0x2c 22 - #define APBC_KPC 0x30 23 - #define APBC_UART0 0x0 24 - #define APBC_UART1 0x4 25 - #define APBC_GPIO 0x8 26 - #define APBC_PWM0 0xc 27 - #define APBC_PWM1 0x10 28 - #define APBC_PWM2 0x14 29 - #define APBC_PWM3 0x18 30 - #define APBC_SSP0 0x81c 31 - #define APBC_SSP1 0x820 32 - #define APBC_SSP2 0x84c 33 - #define APBC_SSP3 0x858 34 - #define APBC_SSP4 0x85c 35 - #define APBC_TWSI1 0x6c 36 - #define APBC_UART2 0x70 37 - #define APMU_SDH0 0x54 38 - #define APMU_SDH1 0x58 39 - #define APMU_USB 0x5c 40 - #define APMU_DISP0 0x4c 41 - #define APMU_CCIC0 0x50 42 - #define APMU_DFC 0x60 43 - #define MPMU_UART_PLL 0x14 44 - 45 - static DEFINE_SPINLOCK(clk_lock); 46 - 47 - static struct mmp_clk_factor_masks uart_factor_masks = { 48 - .factor = 2, 49 - .num_mask = 0x1fff, 50 - .den_mask = 0x1fff, 51 - .num_shift = 16, 52 - .den_shift = 0, 53 - }; 54 - 55 - static struct mmp_clk_factor_tbl uart_factor_tbl[] = { 56 - {.num = 8125, .den = 1536}, /*14.745MHZ */ 57 - }; 58 - 59 - static const char *uart_parent[] = {"pll1_3_16", "uart_pll"}; 60 - static const char *ssp_parent[] = {"pll1_96", "pll1_48", "pll1_24", "pll1_12"}; 61 - static const char *sdh_parent[] = {"pll1_12", "pll1_13"}; 62 - static const char *disp_parent[] = {"pll1_2", "pll1_12"}; 63 - static const char *ccic_parent[] = {"pll1_2", "pll1_12"}; 64 - static const char *ccic_phy_parent[] = {"pll1_6", "pll1_12"}; 65 - 66 - void __init pxa168_clk_init(phys_addr_t mpmu_phys, phys_addr_t apmu_phys, 67 - phys_addr_t apbc_phys) 68 - { 69 - struct clk *clk; 70 - struct clk *uart_pll; 71 - void __iomem *mpmu_base; 72 - void __iomem *apmu_base; 73 - void __iomem *apbc_base; 74 - 75 - mpmu_base = ioremap(mpmu_phys, SZ_4K); 76 - if (!mpmu_base) { 77 - pr_err("error to ioremap MPMU base\n"); 78 - return; 79 - } 80 - 81 - apmu_base = ioremap(apmu_phys, SZ_4K); 82 - if (!apmu_base) { 83 - pr_err("error to ioremap APMU base\n"); 84 - return; 85 - } 86 - 87 - apbc_base = ioremap(apbc_phys, SZ_4K); 88 - if (!apbc_base) { 89 - pr_err("error to ioremap APBC base\n"); 90 - return; 91 - } 92 - 93 - clk = clk_register_fixed_rate(NULL, "clk32", NULL, 0, 3200); 94 - clk_register_clkdev(clk, "clk32", NULL); 95 - 96 - clk = clk_register_fixed_rate(NULL, "vctcxo", NULL, 0, 26000000); 97 - clk_register_clkdev(clk, "vctcxo", NULL); 98 - 99 - clk = clk_register_fixed_rate(NULL, "pll1", NULL, 0, 624000000); 100 - clk_register_clkdev(clk, "pll1", NULL); 101 - 102 - clk = clk_register_fixed_factor(NULL, "pll1_2", "pll1", 103 - CLK_SET_RATE_PARENT, 1, 2); 104 - clk_register_clkdev(clk, "pll1_2", NULL); 105 - 106 - clk = clk_register_fixed_factor(NULL, "pll1_4", "pll1_2", 107 - CLK_SET_RATE_PARENT, 1, 2); 108 - clk_register_clkdev(clk, "pll1_4", NULL); 109 - 110 - clk = clk_register_fixed_factor(NULL, "pll1_8", "pll1_4", 111 - CLK_SET_RATE_PARENT, 1, 2); 112 - clk_register_clkdev(clk, "pll1_8", NULL); 113 - 114 - clk = clk_register_fixed_factor(NULL, "pll1_16", "pll1_8", 115 - CLK_SET_RATE_PARENT, 1, 2); 116 - clk_register_clkdev(clk, "pll1_16", NULL); 117 - 118 - clk = clk_register_fixed_factor(NULL, "pll1_6", "pll1_2", 119 - CLK_SET_RATE_PARENT, 1, 3); 120 - clk_register_clkdev(clk, "pll1_6", NULL); 121 - 122 - clk = clk_register_fixed_factor(NULL, "pll1_12", "pll1_6", 123 - CLK_SET_RATE_PARENT, 1, 2); 124 - clk_register_clkdev(clk, "pll1_12", NULL); 125 - 126 - clk = clk_register_fixed_factor(NULL, "pll1_24", "pll1_12", 127 - CLK_SET_RATE_PARENT, 1, 2); 128 - clk_register_clkdev(clk, "pll1_24", NULL); 129 - 130 - clk = clk_register_fixed_factor(NULL, "pll1_48", "pll1_24", 131 - CLK_SET_RATE_PARENT, 1, 2); 132 - clk_register_clkdev(clk, "pll1_48", NULL); 133 - 134 - clk = clk_register_fixed_factor(NULL, "pll1_96", "pll1_48", 135 - CLK_SET_RATE_PARENT, 1, 2); 136 - clk_register_clkdev(clk, "pll1_96", NULL); 137 - 138 - clk = clk_register_fixed_factor(NULL, "pll1_13", "pll1", 139 - CLK_SET_RATE_PARENT, 1, 13); 140 - clk_register_clkdev(clk, "pll1_13", NULL); 141 - 142 - clk = clk_register_fixed_factor(NULL, "pll1_13_1_5", "pll1", 143 - CLK_SET_RATE_PARENT, 2, 3); 144 - clk_register_clkdev(clk, "pll1_13_1_5", NULL); 145 - 146 - clk = clk_register_fixed_factor(NULL, "pll1_2_1_5", "pll1", 147 - CLK_SET_RATE_PARENT, 2, 3); 148 - clk_register_clkdev(clk, "pll1_2_1_5", NULL); 149 - 150 - clk = clk_register_fixed_factor(NULL, "pll1_3_16", "pll1", 151 - CLK_SET_RATE_PARENT, 3, 16); 152 - clk_register_clkdev(clk, "pll1_3_16", NULL); 153 - 154 - uart_pll = mmp_clk_register_factor("uart_pll", "pll1_4", 0, 155 - mpmu_base + MPMU_UART_PLL, 156 - &uart_factor_masks, uart_factor_tbl, 157 - ARRAY_SIZE(uart_factor_tbl), &clk_lock); 158 - clk_set_rate(uart_pll, 14745600); 159 - clk_register_clkdev(uart_pll, "uart_pll", NULL); 160 - 161 - clk = mmp_clk_register_apbc("twsi0", "pll1_13_1_5", 162 - apbc_base + APBC_TWSI0, 10, 0, &clk_lock); 163 - clk_register_clkdev(clk, NULL, "pxa2xx-i2c.0"); 164 - 165 - clk = mmp_clk_register_apbc("twsi1", "pll1_13_1_5", 166 - apbc_base + APBC_TWSI1, 10, 0, &clk_lock); 167 - clk_register_clkdev(clk, NULL, "pxa2xx-i2c.1"); 168 - 169 - clk = mmp_clk_register_apbc("gpio", "vctcxo", 170 - apbc_base + APBC_GPIO, 10, 0, &clk_lock); 171 - clk_register_clkdev(clk, NULL, "mmp-gpio"); 172 - 173 - clk = mmp_clk_register_apbc("kpc", "clk32", 174 - apbc_base + APBC_KPC, 10, 0, &clk_lock); 175 - clk_register_clkdev(clk, NULL, "pxa27x-keypad"); 176 - 177 - clk = mmp_clk_register_apbc("rtc", "clk32", 178 - apbc_base + APBC_RTC, 10, 0, &clk_lock); 179 - clk_register_clkdev(clk, NULL, "sa1100-rtc"); 180 - 181 - clk = mmp_clk_register_apbc("pwm0", "pll1_48", 182 - apbc_base + APBC_PWM0, 10, 0, &clk_lock); 183 - clk_register_clkdev(clk, NULL, "pxa168-pwm.0"); 184 - 185 - clk = mmp_clk_register_apbc("pwm1", "pll1_48", 186 - apbc_base + APBC_PWM1, 10, 0, &clk_lock); 187 - clk_register_clkdev(clk, NULL, "pxa168-pwm.1"); 188 - 189 - clk = mmp_clk_register_apbc("pwm2", "pll1_48", 190 - apbc_base + APBC_PWM2, 10, 0, &clk_lock); 191 - clk_register_clkdev(clk, NULL, "pxa168-pwm.2"); 192 - 193 - clk = mmp_clk_register_apbc("pwm3", "pll1_48", 194 - apbc_base + APBC_PWM3, 10, 0, &clk_lock); 195 - clk_register_clkdev(clk, NULL, "pxa168-pwm.3"); 196 - 197 - clk = clk_register_mux(NULL, "uart0_mux", uart_parent, 198 - ARRAY_SIZE(uart_parent), 199 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 200 - apbc_base + APBC_UART0, 4, 3, 0, &clk_lock); 201 - clk_set_parent(clk, uart_pll); 202 - clk_register_clkdev(clk, "uart_mux.0", NULL); 203 - 204 - clk = mmp_clk_register_apbc("uart0", "uart0_mux", 205 - apbc_base + APBC_UART0, 10, 0, &clk_lock); 206 - clk_register_clkdev(clk, NULL, "pxa2xx-uart.0"); 207 - 208 - clk = clk_register_mux(NULL, "uart1_mux", uart_parent, 209 - ARRAY_SIZE(uart_parent), 210 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 211 - apbc_base + APBC_UART1, 4, 3, 0, &clk_lock); 212 - clk_set_parent(clk, uart_pll); 213 - clk_register_clkdev(clk, "uart_mux.1", NULL); 214 - 215 - clk = mmp_clk_register_apbc("uart1", "uart1_mux", 216 - apbc_base + APBC_UART1, 10, 0, &clk_lock); 217 - clk_register_clkdev(clk, NULL, "pxa2xx-uart.1"); 218 - 219 - clk = clk_register_mux(NULL, "uart2_mux", uart_parent, 220 - ARRAY_SIZE(uart_parent), 221 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 222 - apbc_base + APBC_UART2, 4, 3, 0, &clk_lock); 223 - clk_set_parent(clk, uart_pll); 224 - clk_register_clkdev(clk, "uart_mux.2", NULL); 225 - 226 - clk = mmp_clk_register_apbc("uart2", "uart2_mux", 227 - apbc_base + APBC_UART2, 10, 0, &clk_lock); 228 - clk_register_clkdev(clk, NULL, "pxa2xx-uart.2"); 229 - 230 - clk = clk_register_mux(NULL, "ssp0_mux", ssp_parent, 231 - ARRAY_SIZE(ssp_parent), 232 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 233 - apbc_base + APBC_SSP0, 4, 3, 0, &clk_lock); 234 - clk_register_clkdev(clk, "uart_mux.0", NULL); 235 - 236 - clk = mmp_clk_register_apbc("ssp0", "ssp0_mux", apbc_base + APBC_SSP0, 237 - 10, 0, &clk_lock); 238 - clk_register_clkdev(clk, NULL, "mmp-ssp.0"); 239 - 240 - clk = clk_register_mux(NULL, "ssp1_mux", ssp_parent, 241 - ARRAY_SIZE(ssp_parent), 242 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 243 - apbc_base + APBC_SSP1, 4, 3, 0, &clk_lock); 244 - clk_register_clkdev(clk, "ssp_mux.1", NULL); 245 - 246 - clk = mmp_clk_register_apbc("ssp1", "ssp1_mux", apbc_base + APBC_SSP1, 247 - 10, 0, &clk_lock); 248 - clk_register_clkdev(clk, NULL, "mmp-ssp.1"); 249 - 250 - clk = clk_register_mux(NULL, "ssp2_mux", ssp_parent, 251 - ARRAY_SIZE(ssp_parent), 252 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 253 - apbc_base + APBC_SSP2, 4, 3, 0, &clk_lock); 254 - clk_register_clkdev(clk, "ssp_mux.2", NULL); 255 - 256 - clk = mmp_clk_register_apbc("ssp2", "ssp1_mux", apbc_base + APBC_SSP2, 257 - 10, 0, &clk_lock); 258 - clk_register_clkdev(clk, NULL, "mmp-ssp.2"); 259 - 260 - clk = clk_register_mux(NULL, "ssp3_mux", ssp_parent, 261 - ARRAY_SIZE(ssp_parent), 262 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 263 - apbc_base + APBC_SSP3, 4, 3, 0, &clk_lock); 264 - clk_register_clkdev(clk, "ssp_mux.3", NULL); 265 - 266 - clk = mmp_clk_register_apbc("ssp3", "ssp1_mux", apbc_base + APBC_SSP3, 267 - 10, 0, &clk_lock); 268 - clk_register_clkdev(clk, NULL, "mmp-ssp.3"); 269 - 270 - clk = clk_register_mux(NULL, "ssp4_mux", ssp_parent, 271 - ARRAY_SIZE(ssp_parent), 272 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 273 - apbc_base + APBC_SSP4, 4, 3, 0, &clk_lock); 274 - clk_register_clkdev(clk, "ssp_mux.4", NULL); 275 - 276 - clk = mmp_clk_register_apbc("ssp4", "ssp1_mux", apbc_base + APBC_SSP4, 277 - 10, 0, &clk_lock); 278 - clk_register_clkdev(clk, NULL, "mmp-ssp.4"); 279 - 280 - clk = mmp_clk_register_apmu("dfc", "pll1_4", apmu_base + APMU_DFC, 281 - 0x19b, &clk_lock); 282 - clk_register_clkdev(clk, NULL, "pxa3xx-nand.0"); 283 - 284 - clk = clk_register_mux(NULL, "sdh0_mux", sdh_parent, 285 - ARRAY_SIZE(sdh_parent), 286 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 287 - apmu_base + APMU_SDH0, 6, 1, 0, &clk_lock); 288 - clk_register_clkdev(clk, "sdh0_mux", NULL); 289 - 290 - clk = mmp_clk_register_apmu("sdh0", "sdh_mux", apmu_base + APMU_SDH0, 291 - 0x1b, &clk_lock); 292 - clk_register_clkdev(clk, NULL, "sdhci-pxa.0"); 293 - 294 - clk = clk_register_mux(NULL, "sdh1_mux", sdh_parent, 295 - ARRAY_SIZE(sdh_parent), 296 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 297 - apmu_base + APMU_SDH1, 6, 1, 0, &clk_lock); 298 - clk_register_clkdev(clk, "sdh1_mux", NULL); 299 - 300 - clk = mmp_clk_register_apmu("sdh1", "sdh1_mux", apmu_base + APMU_SDH1, 301 - 0x1b, &clk_lock); 302 - clk_register_clkdev(clk, NULL, "sdhci-pxa.1"); 303 - 304 - clk = mmp_clk_register_apmu("usb", "usb_pll", apmu_base + APMU_USB, 305 - 0x9, &clk_lock); 306 - clk_register_clkdev(clk, "usb_clk", NULL); 307 - 308 - clk = mmp_clk_register_apmu("sph", "usb_pll", apmu_base + APMU_USB, 309 - 0x12, &clk_lock); 310 - clk_register_clkdev(clk, "sph_clk", NULL); 311 - 312 - clk = clk_register_mux(NULL, "disp0_mux", disp_parent, 313 - ARRAY_SIZE(disp_parent), 314 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 315 - apmu_base + APMU_DISP0, 6, 1, 0, &clk_lock); 316 - clk_register_clkdev(clk, "disp_mux.0", NULL); 317 - 318 - clk = mmp_clk_register_apmu("disp0", "disp0_mux", 319 - apmu_base + APMU_DISP0, 0x1b, &clk_lock); 320 - clk_register_clkdev(clk, "fnclk", "mmp-disp.0"); 321 - 322 - clk = mmp_clk_register_apmu("disp0_hclk", "disp0_mux", 323 - apmu_base + APMU_DISP0, 0x24, &clk_lock); 324 - clk_register_clkdev(clk, "hclk", "mmp-disp.0"); 325 - 326 - clk = clk_register_mux(NULL, "ccic0_mux", ccic_parent, 327 - ARRAY_SIZE(ccic_parent), 328 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 329 - apmu_base + APMU_CCIC0, 6, 1, 0, &clk_lock); 330 - clk_register_clkdev(clk, "ccic_mux.0", NULL); 331 - 332 - clk = mmp_clk_register_apmu("ccic0", "ccic0_mux", 333 - apmu_base + APMU_CCIC0, 0x1b, &clk_lock); 334 - clk_register_clkdev(clk, "fnclk", "mmp-ccic.0"); 335 - 336 - clk = clk_register_mux(NULL, "ccic0_phy_mux", ccic_phy_parent, 337 - ARRAY_SIZE(ccic_phy_parent), 338 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 339 - apmu_base + APMU_CCIC0, 7, 1, 0, &clk_lock); 340 - clk_register_clkdev(clk, "ccic_phy_mux.0", NULL); 341 - 342 - clk = mmp_clk_register_apmu("ccic0_phy", "ccic0_phy_mux", 343 - apmu_base + APMU_CCIC0, 0x24, &clk_lock); 344 - clk_register_clkdev(clk, "phyclk", "mmp-ccic.0"); 345 - 346 - clk = clk_register_divider(NULL, "ccic0_sphy_div", "ccic0_mux", 347 - CLK_SET_RATE_PARENT, apmu_base + APMU_CCIC0, 348 - 10, 5, 0, &clk_lock); 349 - clk_register_clkdev(clk, "sphyclk_div", NULL); 350 - 351 - clk = mmp_clk_register_apmu("ccic0_sphy", "ccic0_sphy_div", 352 - apmu_base + APMU_CCIC0, 0x300, &clk_lock); 353 - clk_register_clkdev(clk, "sphyclk", "mmp-ccic.0"); 354 - }
-325
drivers/clk/mmp/clk-pxa910.c
··· 1 - // SPDX-License-Identifier: GPL-2.0-only 2 - /* 3 - * pxa910 clock framework source file 4 - * 5 - * Copyright (C) 2012 Marvell 6 - * Chao Xie <xiechao.mail@gmail.com> 7 - */ 8 - 9 - #include <linux/clk.h> 10 - #include <linux/clk/mmp.h> 11 - #include <linux/module.h> 12 - #include <linux/kernel.h> 13 - #include <linux/spinlock.h> 14 - #include <linux/io.h> 15 - #include <linux/delay.h> 16 - #include <linux/err.h> 17 - 18 - #include "clk.h" 19 - 20 - #define APBC_RTC 0x28 21 - #define APBC_TWSI0 0x2c 22 - #define APBC_KPC 0x18 23 - #define APBC_UART0 0x0 24 - #define APBC_UART1 0x4 25 - #define APBC_GPIO 0x8 26 - #define APBC_PWM0 0xc 27 - #define APBC_PWM1 0x10 28 - #define APBC_PWM2 0x14 29 - #define APBC_PWM3 0x18 30 - #define APBC_SSP0 0x1c 31 - #define APBC_SSP1 0x20 32 - #define APBC_SSP2 0x4c 33 - #define APBCP_TWSI1 0x28 34 - #define APBCP_UART2 0x1c 35 - #define APMU_SDH0 0x54 36 - #define APMU_SDH1 0x58 37 - #define APMU_USB 0x5c 38 - #define APMU_DISP0 0x4c 39 - #define APMU_CCIC0 0x50 40 - #define APMU_DFC 0x60 41 - #define MPMU_UART_PLL 0x14 42 - 43 - static DEFINE_SPINLOCK(clk_lock); 44 - 45 - static struct mmp_clk_factor_masks uart_factor_masks = { 46 - .factor = 2, 47 - .num_mask = 0x1fff, 48 - .den_mask = 0x1fff, 49 - .num_shift = 16, 50 - .den_shift = 0, 51 - }; 52 - 53 - static struct mmp_clk_factor_tbl uart_factor_tbl[] = { 54 - {.num = 8125, .den = 1536}, /*14.745MHZ */ 55 - }; 56 - 57 - static const char *uart_parent[] = {"pll1_3_16", "uart_pll"}; 58 - static const char *ssp_parent[] = {"pll1_96", "pll1_48", "pll1_24", "pll1_12"}; 59 - static const char *sdh_parent[] = {"pll1_12", "pll1_13"}; 60 - static const char *disp_parent[] = {"pll1_2", "pll1_12"}; 61 - static const char *ccic_parent[] = {"pll1_2", "pll1_12"}; 62 - static const char *ccic_phy_parent[] = {"pll1_6", "pll1_12"}; 63 - 64 - void __init pxa910_clk_init(phys_addr_t mpmu_phys, phys_addr_t apmu_phys, 65 - phys_addr_t apbc_phys, phys_addr_t apbcp_phys) 66 - { 67 - struct clk *clk; 68 - struct clk *uart_pll; 69 - void __iomem *mpmu_base; 70 - void __iomem *apmu_base; 71 - void __iomem *apbcp_base; 72 - void __iomem *apbc_base; 73 - 74 - mpmu_base = ioremap(mpmu_phys, SZ_4K); 75 - if (!mpmu_base) { 76 - pr_err("error to ioremap MPMU base\n"); 77 - return; 78 - } 79 - 80 - apmu_base = ioremap(apmu_phys, SZ_4K); 81 - if (!apmu_base) { 82 - pr_err("error to ioremap APMU base\n"); 83 - return; 84 - } 85 - 86 - apbcp_base = ioremap(apbcp_phys, SZ_4K); 87 - if (!apbcp_base) { 88 - pr_err("error to ioremap APBC extension base\n"); 89 - return; 90 - } 91 - 92 - apbc_base = ioremap(apbc_phys, SZ_4K); 93 - if (!apbc_base) { 94 - pr_err("error to ioremap APBC base\n"); 95 - return; 96 - } 97 - 98 - clk = clk_register_fixed_rate(NULL, "clk32", NULL, 0, 3200); 99 - clk_register_clkdev(clk, "clk32", NULL); 100 - 101 - clk = clk_register_fixed_rate(NULL, "vctcxo", NULL, 0, 26000000); 102 - clk_register_clkdev(clk, "vctcxo", NULL); 103 - 104 - clk = clk_register_fixed_rate(NULL, "pll1", NULL, 0, 624000000); 105 - clk_register_clkdev(clk, "pll1", NULL); 106 - 107 - clk = clk_register_fixed_factor(NULL, "pll1_2", "pll1", 108 - CLK_SET_RATE_PARENT, 1, 2); 109 - clk_register_clkdev(clk, "pll1_2", NULL); 110 - 111 - clk = clk_register_fixed_factor(NULL, "pll1_4", "pll1_2", 112 - CLK_SET_RATE_PARENT, 1, 2); 113 - clk_register_clkdev(clk, "pll1_4", NULL); 114 - 115 - clk = clk_register_fixed_factor(NULL, "pll1_8", "pll1_4", 116 - CLK_SET_RATE_PARENT, 1, 2); 117 - clk_register_clkdev(clk, "pll1_8", NULL); 118 - 119 - clk = clk_register_fixed_factor(NULL, "pll1_16", "pll1_8", 120 - CLK_SET_RATE_PARENT, 1, 2); 121 - clk_register_clkdev(clk, "pll1_16", NULL); 122 - 123 - clk = clk_register_fixed_factor(NULL, "pll1_6", "pll1_2", 124 - CLK_SET_RATE_PARENT, 1, 3); 125 - clk_register_clkdev(clk, "pll1_6", NULL); 126 - 127 - clk = clk_register_fixed_factor(NULL, "pll1_12", "pll1_6", 128 - CLK_SET_RATE_PARENT, 1, 2); 129 - clk_register_clkdev(clk, "pll1_12", NULL); 130 - 131 - clk = clk_register_fixed_factor(NULL, "pll1_24", "pll1_12", 132 - CLK_SET_RATE_PARENT, 1, 2); 133 - clk_register_clkdev(clk, "pll1_24", NULL); 134 - 135 - clk = clk_register_fixed_factor(NULL, "pll1_48", "pll1_24", 136 - CLK_SET_RATE_PARENT, 1, 2); 137 - clk_register_clkdev(clk, "pll1_48", NULL); 138 - 139 - clk = clk_register_fixed_factor(NULL, "pll1_96", "pll1_48", 140 - CLK_SET_RATE_PARENT, 1, 2); 141 - clk_register_clkdev(clk, "pll1_96", NULL); 142 - 143 - clk = clk_register_fixed_factor(NULL, "pll1_13", "pll1", 144 - CLK_SET_RATE_PARENT, 1, 13); 145 - clk_register_clkdev(clk, "pll1_13", NULL); 146 - 147 - clk = clk_register_fixed_factor(NULL, "pll1_13_1_5", "pll1", 148 - CLK_SET_RATE_PARENT, 2, 3); 149 - clk_register_clkdev(clk, "pll1_13_1_5", NULL); 150 - 151 - clk = clk_register_fixed_factor(NULL, "pll1_2_1_5", "pll1", 152 - CLK_SET_RATE_PARENT, 2, 3); 153 - clk_register_clkdev(clk, "pll1_2_1_5", NULL); 154 - 155 - clk = clk_register_fixed_factor(NULL, "pll1_3_16", "pll1", 156 - CLK_SET_RATE_PARENT, 3, 16); 157 - clk_register_clkdev(clk, "pll1_3_16", NULL); 158 - 159 - uart_pll = mmp_clk_register_factor("uart_pll", "pll1_4", 0, 160 - mpmu_base + MPMU_UART_PLL, 161 - &uart_factor_masks, uart_factor_tbl, 162 - ARRAY_SIZE(uart_factor_tbl), &clk_lock); 163 - clk_set_rate(uart_pll, 14745600); 164 - clk_register_clkdev(uart_pll, "uart_pll", NULL); 165 - 166 - clk = mmp_clk_register_apbc("twsi0", "pll1_13_1_5", 167 - apbc_base + APBC_TWSI0, 10, 0, &clk_lock); 168 - clk_register_clkdev(clk, NULL, "pxa2xx-i2c.0"); 169 - 170 - clk = mmp_clk_register_apbc("twsi1", "pll1_13_1_5", 171 - apbcp_base + APBCP_TWSI1, 10, 0, &clk_lock); 172 - clk_register_clkdev(clk, NULL, "pxa2xx-i2c.1"); 173 - 174 - clk = mmp_clk_register_apbc("gpio", "vctcxo", 175 - apbc_base + APBC_GPIO, 10, 0, &clk_lock); 176 - clk_register_clkdev(clk, NULL, "mmp-gpio"); 177 - 178 - clk = mmp_clk_register_apbc("kpc", "clk32", 179 - apbc_base + APBC_KPC, 10, 0, &clk_lock); 180 - clk_register_clkdev(clk, NULL, "pxa27x-keypad"); 181 - 182 - clk = mmp_clk_register_apbc("rtc", "clk32", 183 - apbc_base + APBC_RTC, 10, 0, &clk_lock); 184 - clk_register_clkdev(clk, NULL, "sa1100-rtc"); 185 - 186 - clk = mmp_clk_register_apbc("pwm0", "pll1_48", 187 - apbc_base + APBC_PWM0, 10, 0, &clk_lock); 188 - clk_register_clkdev(clk, NULL, "pxa910-pwm.0"); 189 - 190 - clk = mmp_clk_register_apbc("pwm1", "pll1_48", 191 - apbc_base + APBC_PWM1, 10, 0, &clk_lock); 192 - clk_register_clkdev(clk, NULL, "pxa910-pwm.1"); 193 - 194 - clk = mmp_clk_register_apbc("pwm2", "pll1_48", 195 - apbc_base + APBC_PWM2, 10, 0, &clk_lock); 196 - clk_register_clkdev(clk, NULL, "pxa910-pwm.2"); 197 - 198 - clk = mmp_clk_register_apbc("pwm3", "pll1_48", 199 - apbc_base + APBC_PWM3, 10, 0, &clk_lock); 200 - clk_register_clkdev(clk, NULL, "pxa910-pwm.3"); 201 - 202 - clk = clk_register_mux(NULL, "uart0_mux", uart_parent, 203 - ARRAY_SIZE(uart_parent), 204 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 205 - apbc_base + APBC_UART0, 4, 3, 0, &clk_lock); 206 - clk_set_parent(clk, uart_pll); 207 - clk_register_clkdev(clk, "uart_mux.0", NULL); 208 - 209 - clk = mmp_clk_register_apbc("uart0", "uart0_mux", 210 - apbc_base + APBC_UART0, 10, 0, &clk_lock); 211 - clk_register_clkdev(clk, NULL, "pxa2xx-uart.0"); 212 - 213 - clk = clk_register_mux(NULL, "uart1_mux", uart_parent, 214 - ARRAY_SIZE(uart_parent), 215 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 216 - apbc_base + APBC_UART1, 4, 3, 0, &clk_lock); 217 - clk_set_parent(clk, uart_pll); 218 - clk_register_clkdev(clk, "uart_mux.1", NULL); 219 - 220 - clk = mmp_clk_register_apbc("uart1", "uart1_mux", 221 - apbc_base + APBC_UART1, 10, 0, &clk_lock); 222 - clk_register_clkdev(clk, NULL, "pxa2xx-uart.1"); 223 - 224 - clk = clk_register_mux(NULL, "uart2_mux", uart_parent, 225 - ARRAY_SIZE(uart_parent), 226 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 227 - apbcp_base + APBCP_UART2, 4, 3, 0, &clk_lock); 228 - clk_set_parent(clk, uart_pll); 229 - clk_register_clkdev(clk, "uart_mux.2", NULL); 230 - 231 - clk = mmp_clk_register_apbc("uart2", "uart2_mux", 232 - apbcp_base + APBCP_UART2, 10, 0, &clk_lock); 233 - clk_register_clkdev(clk, NULL, "pxa2xx-uart.2"); 234 - 235 - clk = clk_register_mux(NULL, "ssp0_mux", ssp_parent, 236 - ARRAY_SIZE(ssp_parent), 237 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 238 - apbc_base + APBC_SSP0, 4, 3, 0, &clk_lock); 239 - clk_register_clkdev(clk, "uart_mux.0", NULL); 240 - 241 - clk = mmp_clk_register_apbc("ssp0", "ssp0_mux", 242 - apbc_base + APBC_SSP0, 10, 0, &clk_lock); 243 - clk_register_clkdev(clk, NULL, "mmp-ssp.0"); 244 - 245 - clk = clk_register_mux(NULL, "ssp1_mux", ssp_parent, 246 - ARRAY_SIZE(ssp_parent), 247 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 248 - apbc_base + APBC_SSP1, 4, 3, 0, &clk_lock); 249 - clk_register_clkdev(clk, "ssp_mux.1", NULL); 250 - 251 - clk = mmp_clk_register_apbc("ssp1", "ssp1_mux", 252 - apbc_base + APBC_SSP1, 10, 0, &clk_lock); 253 - clk_register_clkdev(clk, NULL, "mmp-ssp.1"); 254 - 255 - clk = mmp_clk_register_apmu("dfc", "pll1_4", 256 - apmu_base + APMU_DFC, 0x19b, &clk_lock); 257 - clk_register_clkdev(clk, NULL, "pxa3xx-nand.0"); 258 - 259 - clk = clk_register_mux(NULL, "sdh0_mux", sdh_parent, 260 - ARRAY_SIZE(sdh_parent), 261 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 262 - apmu_base + APMU_SDH0, 6, 1, 0, &clk_lock); 263 - clk_register_clkdev(clk, "sdh0_mux", NULL); 264 - 265 - clk = mmp_clk_register_apmu("sdh0", "sdh_mux", 266 - apmu_base + APMU_SDH0, 0x1b, &clk_lock); 267 - clk_register_clkdev(clk, NULL, "sdhci-pxa.0"); 268 - 269 - clk = clk_register_mux(NULL, "sdh1_mux", sdh_parent, 270 - ARRAY_SIZE(sdh_parent), 271 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 272 - apmu_base + APMU_SDH1, 6, 1, 0, &clk_lock); 273 - clk_register_clkdev(clk, "sdh1_mux", NULL); 274 - 275 - clk = mmp_clk_register_apmu("sdh1", "sdh1_mux", 276 - apmu_base + APMU_SDH1, 0x1b, &clk_lock); 277 - clk_register_clkdev(clk, NULL, "sdhci-pxa.1"); 278 - 279 - clk = mmp_clk_register_apmu("usb", "usb_pll", 280 - apmu_base + APMU_USB, 0x9, &clk_lock); 281 - clk_register_clkdev(clk, "usb_clk", NULL); 282 - 283 - clk = mmp_clk_register_apmu("sph", "usb_pll", 284 - apmu_base + APMU_USB, 0x12, &clk_lock); 285 - clk_register_clkdev(clk, "sph_clk", NULL); 286 - 287 - clk = clk_register_mux(NULL, "disp0_mux", disp_parent, 288 - ARRAY_SIZE(disp_parent), 289 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 290 - apmu_base + APMU_DISP0, 6, 1, 0, &clk_lock); 291 - clk_register_clkdev(clk, "disp_mux.0", NULL); 292 - 293 - clk = mmp_clk_register_apmu("disp0", "disp0_mux", 294 - apmu_base + APMU_DISP0, 0x1b, &clk_lock); 295 - clk_register_clkdev(clk, NULL, "mmp-disp.0"); 296 - 297 - clk = clk_register_mux(NULL, "ccic0_mux", ccic_parent, 298 - ARRAY_SIZE(ccic_parent), 299 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 300 - apmu_base + APMU_CCIC0, 6, 1, 0, &clk_lock); 301 - clk_register_clkdev(clk, "ccic_mux.0", NULL); 302 - 303 - clk = mmp_clk_register_apmu("ccic0", "ccic0_mux", 304 - apmu_base + APMU_CCIC0, 0x1b, &clk_lock); 305 - clk_register_clkdev(clk, "fnclk", "mmp-ccic.0"); 306 - 307 - clk = clk_register_mux(NULL, "ccic0_phy_mux", ccic_phy_parent, 308 - ARRAY_SIZE(ccic_phy_parent), 309 - CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 310 - apmu_base + APMU_CCIC0, 7, 1, 0, &clk_lock); 311 - clk_register_clkdev(clk, "ccic_phy_mux.0", NULL); 312 - 313 - clk = mmp_clk_register_apmu("ccic0_phy", "ccic0_phy_mux", 314 - apmu_base + APMU_CCIC0, 0x24, &clk_lock); 315 - clk_register_clkdev(clk, "phyclk", "mmp-ccic.0"); 316 - 317 - clk = clk_register_divider(NULL, "ccic0_sphy_div", "ccic0_mux", 318 - CLK_SET_RATE_PARENT, apmu_base + APMU_CCIC0, 319 - 10, 5, 0, &clk_lock); 320 - clk_register_clkdev(clk, "sphyclk_div", NULL); 321 - 322 - clk = mmp_clk_register_apmu("ccic0_sphy", "ccic0_sphy_div", 323 - apmu_base + APMU_CCIC0, 0x300, &clk_lock); 324 - clk_register_clkdev(clk, "sphyclk", "mmp-ccic.0"); 325 - }
-1
drivers/clk/mvebu/ap-cpu-clk.c
··· 15 15 #include <linux/mfd/syscon.h> 16 16 #include <linux/of.h> 17 17 #include <linux/of_address.h> 18 - #include <linux/of_platform.h> 19 18 #include <linux/platform_device.h> 20 19 #include <linux/regmap.h> 21 20 #include "armada_ap_cp_helper.h"
+1 -4
drivers/clk/mvebu/armada-37xx-periph.c
··· 21 21 #include <linux/io.h> 22 22 #include <linux/mfd/syscon.h> 23 23 #include <linux/of.h> 24 - #include <linux/of_device.h> 25 24 #include <linux/platform_device.h> 26 25 #include <linux/regmap.h> 27 26 #include <linux/slab.h> ··· 732 733 const struct clk_periph_data *data; 733 734 struct device *dev = &pdev->dev; 734 735 int num_periph = 0, i, ret; 735 - struct resource *res; 736 736 737 737 data = of_device_get_match_data(dev); 738 738 if (!data) ··· 752 754 return -ENOMEM; 753 755 driver_data->hw_data->num = num_periph; 754 756 755 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 756 - driver_data->reg = devm_ioremap_resource(dev, res); 757 + driver_data->reg = devm_platform_ioremap_resource(pdev, 0); 757 758 if (IS_ERR(driver_data->reg)) 758 759 return PTR_ERR(driver_data->reg); 759 760
+1 -3
drivers/clk/mvebu/armada-37xx-tbg.c
··· 84 84 struct clk_hw_onecell_data *hw_tbg_data; 85 85 struct device *dev = &pdev->dev; 86 86 const char *parent_name; 87 - struct resource *res; 88 87 struct clk *parent; 89 88 void __iomem *reg; 90 89 int i; ··· 104 105 parent_name = __clk_get_name(parent); 105 106 clk_put(parent); 106 107 107 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 108 - reg = devm_ioremap_resource(dev, res); 108 + reg = devm_platform_ioremap_resource(pdev, 0); 109 109 if (IS_ERR(reg)) 110 110 return PTR_ERR(reg); 111 111
+1 -1
drivers/clk/mvebu/cp110-system-controller.c
··· 240 240 GFP_KERNEL); 241 241 if (!cp110_clk_data) 242 242 return -ENOMEM; 243 + cp110_clk_data->num = CP110_CLK_NUM; 243 244 244 245 cp110_clks = cp110_clk_data->hws; 245 - cp110_clk_data->num = CP110_CLK_NUM; 246 246 247 247 /* Register the PLL0 which is the root of the hw tree */ 248 248 pll0_name = ap_cp_unique_name(dev, syscon_node, "pll0");
+1 -2
drivers/clk/nuvoton/clk-ma35d1.c
··· 460 460 { 461 461 struct device *dev = &pdev->dev; 462 462 struct device_node *clk_node = pdev->dev.of_node; 463 - struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 464 463 void __iomem *clk_base; 465 464 static struct clk_hw **hws; 466 465 static struct clk_hw_onecell_data *ma35d1_hw_data; ··· 475 476 ma35d1_hw_data->num = CLK_MAX_IDX; 476 477 hws = ma35d1_hw_data->hws; 477 478 478 - clk_base = devm_ioremap_resource(dev, res); 479 + clk_base = devm_platform_ioremap_resource(pdev, 0); 479 480 if (IS_ERR(clk_base)) 480 481 return PTR_ERR(clk_base); 481 482
+16 -12
drivers/clk/qcom/Kconfig
··· 145 145 Say Y if you want to use peripheral devices such as UART, SPI, 146 146 i2c, USB, SD/eMMC, etc. 147 147 148 + config IPQ_GCC_5018 149 + tristate "IPQ5018 Global Clock Controller" 150 + depends on ARM64 || COMPILE_TEST 151 + help 152 + Support for global clock controller on ipq5018 devices. 153 + Say Y if you want to use peripheral devices such as UART, SPI, 154 + i2c, USB, SD/eMMC, etc. 155 + 148 156 config IPQ_GCC_5332 149 157 tristate "IPQ5332 Global Clock Controller" 150 158 depends on ARM64 || COMPILE_TEST ··· 255 247 i2c, USB, SD/eMMC, SATA, PCIe, etc. 256 248 257 249 config MSM_LCC_8960 258 - tristate "APQ8064/MSM8960 LPASS Clock Controller" 250 + tristate "APQ8064/MSM8960/MDM9650 LPASS Clock Controller" 259 251 depends on ARM || COMPILE_TEST 260 - select MSM_GCC_8960 261 252 help 262 - Support for the LPASS clock controller on apq8064/msm8960 devices. 253 + Support for the LPASS clock controller on apq8064/msm8960/mdm9650 254 + devices. 263 255 Say Y if you want to use audio devices such as i2s, pcm, 264 256 SLIMBus, etc. 265 257 ··· 278 270 Support for the global clock controller on mdm9615 devices. 279 271 Say Y if you want to use peripheral devices such as UART, SPI, 280 272 i2c, USB, SD/eMMC, etc. 281 - 282 - config MDM_LCC_9615 283 - tristate "MDM9615 LPASS Clock Controller" 284 - depends on ARM || COMPILE_TEST 285 - select MDM_GCC_9615 286 - help 287 - Support for the LPASS clock controller on mdm9615 devices. 288 - Say Y if you want to use audio devices such as i2s, pcm, 289 - SLIMBus, etc. 290 273 291 274 config MSM_MMCC_8960 292 275 tristate "MSM8960 Multimedia Clock Controller" ··· 986 987 987 988 config SM_GPUCC_8450 988 989 tristate "SM8450 Graphics Clock Controller" 990 + depends on ARM64 || COMPILE_TEST 989 991 select SM_GCC_8450 990 992 help 991 993 Support for the graphics clock controller on SM8450 devices. ··· 995 995 996 996 config SM_GPUCC_8550 997 997 tristate "SM8550 Graphics Clock Controller" 998 + depends on ARM64 || COMPILE_TEST 998 999 select SM_GCC_8550 999 1000 help 1000 1001 Support for the graphics clock controller on SM8550 devices. ··· 1032 1031 1033 1032 config SM_VIDEOCC_8350 1034 1033 tristate "SM8350 Video Clock Controller" 1034 + depends on ARM64 || COMPILE_TEST 1035 1035 select SM_GCC_8350 1036 1036 select QCOM_GDSC 1037 1037 help ··· 1042 1040 1043 1041 config SM_VIDEOCC_8550 1044 1042 tristate "SM8550 Video Clock Controller" 1043 + depends on ARM64 || COMPILE_TEST 1045 1044 select SM_GCC_8550 1046 1045 select QCOM_GDSC 1047 1046 help ··· 1091 1088 1092 1089 config SM_VIDEOCC_8450 1093 1090 tristate "SM8450 Video Clock Controller" 1091 + depends on ARM64 || COMPILE_TEST 1094 1092 select SM_GCC_8450 1095 1093 select QCOM_GDSC 1096 1094 help
+1 -1
drivers/clk/qcom/Makefile
··· 24 24 obj-$(CONFIG_IPQ_APSS_PLL) += apss-ipq-pll.o 25 25 obj-$(CONFIG_IPQ_APSS_6018) += apss-ipq6018.o 26 26 obj-$(CONFIG_IPQ_GCC_4019) += gcc-ipq4019.o 27 + obj-$(CONFIG_IPQ_GCC_5018) += gcc-ipq5018.o 27 28 obj-$(CONFIG_IPQ_GCC_5332) += gcc-ipq5332.o 28 29 obj-$(CONFIG_IPQ_GCC_6018) += gcc-ipq6018.o 29 30 obj-$(CONFIG_IPQ_GCC_806X) += gcc-ipq806x.o ··· 33 32 obj-$(CONFIG_IPQ_LCC_806X) += lcc-ipq806x.o 34 33 obj-$(CONFIG_MDM_GCC_9607) += gcc-mdm9607.o 35 34 obj-$(CONFIG_MDM_GCC_9615) += gcc-mdm9615.o 36 - obj-$(CONFIG_MDM_LCC_9615) += lcc-mdm9615.o 37 35 obj-$(CONFIG_MSM_GCC_8660) += gcc-msm8660.o 38 36 obj-$(CONFIG_MSM_GCC_8909) += gcc-msm8909.o 39 37 obj-$(CONFIG_MSM_GCC_8916) += gcc-msm8916.o
+1 -1
drivers/clk/qcom/apss-ipq-pll.c
··· 2 2 // Copyright (c) 2018, The Linux Foundation. All rights reserved. 3 3 #include <linux/clk-provider.h> 4 4 #include <linux/module.h> 5 - #include <linux/of_device.h> 5 + #include <linux/of.h> 6 6 #include <linux/platform_device.h> 7 7 #include <linux/regmap.h> 8 8
+2 -2
drivers/clk/qcom/camcc-sc7180.c
··· 7 7 #include <linux/err.h> 8 8 #include <linux/module.h> 9 9 #include <linux/of.h> 10 - #include <linux/of_device.h> 10 + #include <linux/platform_device.h> 11 11 #include <linux/pm_clock.h> 12 12 #include <linux/pm_runtime.h> 13 13 #include <linux/regmap.h> ··· 1664 1664 return ret; 1665 1665 } 1666 1666 1667 - ret = pm_runtime_get(&pdev->dev); 1667 + ret = pm_runtime_resume_and_get(&pdev->dev); 1668 1668 if (ret) 1669 1669 return ret; 1670 1670
+1 -1
drivers/clk/qcom/camcc-sc7280.c
··· 7 7 #include <linux/err.h> 8 8 #include <linux/kernel.h> 9 9 #include <linux/module.h> 10 - #include <linux/of_device.h> 11 10 #include <linux/of.h> 11 + #include <linux/platform_device.h> 12 12 #include <linux/regmap.h> 13 13 14 14 #include <dt-bindings/clock/qcom,camcc-sc7280.h>
+8 -2
drivers/clk/qcom/clk-cbf-8996.c
··· 52 52 [PLL_OFF_STATUS] = 0x28, 53 53 }; 54 54 55 - static const struct alpha_pll_config cbfpll_config = { 55 + static struct alpha_pll_config cbfpll_config = { 56 56 .l = 72, 57 57 .config_ctl_val = 0x200d4828, 58 58 .config_ctl_hi_val = 0x006, ··· 141 141 { 142 142 struct clk_hw *parent; 143 143 144 - if (req->rate < (DIV_THRESHOLD / 2)) 144 + if (req->rate < (DIV_THRESHOLD / cbf_pll_postdiv.div)) 145 145 return -EINVAL; 146 146 147 147 if (req->rate < DIV_THRESHOLD) ··· 312 312 /* Switch CBF to use the primary PLL */ 313 313 regmap_update_bits(regmap, CBF_MUX_OFFSET, CBF_MUX_PARENT_MASK, 0x1); 314 314 315 + if (of_device_is_compatible(dev->of_node, "qcom,msm8996pro-cbf")) { 316 + cbfpll_config.post_div_val = 0x3 << 8; 317 + cbf_pll_postdiv.div = 4; 318 + } 319 + 315 320 for (i = 0; i < ARRAY_SIZE(cbf_msm8996_hw_clks); i++) { 316 321 ret = devm_clk_hw_register(dev, cbf_msm8996_hw_clks[i]); 317 322 if (ret) ··· 347 342 348 343 static const struct of_device_id qcom_msm8996_cbf_match_table[] = { 349 344 { .compatible = "qcom,msm8996-cbf" }, 345 + { .compatible = "qcom,msm8996pro-cbf" }, 350 346 { /* sentinel */ }, 351 347 }; 352 348 MODULE_DEVICE_TABLE(of, qcom_msm8996_cbf_match_table);
+1 -1
drivers/clk/qcom/clk-cpu-8996.c
··· 590 590 data = devm_kzalloc(dev, struct_size(data, hws, 2), GFP_KERNEL); 591 591 if (!data) 592 592 return -ENOMEM; 593 + data->num = 2; 593 594 594 595 base = devm_platform_ioremap_resource(pdev, 0); 595 596 if (IS_ERR(base)) ··· 606 605 607 606 data->hws[0] = &pwrcl_pmux.clkr.hw; 608 607 data->hws[1] = &perfcl_pmux.clkr.hw; 609 - data->num = 2; 610 608 611 609 return devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, data); 612 610 }
-1
drivers/clk/qcom/clk-rpm.c
··· 13 13 #include <linux/mutex.h> 14 14 #include <linux/mfd/qcom_rpm.h> 15 15 #include <linux/of.h> 16 - #include <linux/of_device.h> 17 16 #include <linux/platform_device.h> 18 17 19 18 #include <dt-bindings/mfd/qcom-rpm.h>
-1
drivers/clk/qcom/clk-rpmh.c
··· 8 8 #include <linux/kernel.h> 9 9 #include <linux/module.h> 10 10 #include <linux/of.h> 11 - #include <linux/of_device.h> 12 11 #include <linux/platform_device.h> 13 12 #include <soc/qcom/cmd-db.h> 14 13 #include <soc/qcom/rpmh.h>
+153 -187
drivers/clk/qcom/clk-smd-rpm.c
··· 12 12 #include <linux/module.h> 13 13 #include <linux/mutex.h> 14 14 #include <linux/of.h> 15 - #include <linux/of_device.h> 16 15 #include <linux/platform_device.h> 17 16 #include <linux/soc/qcom/smd-rpm.h> 18 17 19 18 #include <dt-bindings/clock/qcom,rpmcc.h> 20 19 21 - #define QCOM_RPM_KEY_SOFTWARE_ENABLE 0x6e657773 22 - #define QCOM_RPM_KEY_PIN_CTRL_CLK_BUFFER_ENABLE_KEY 0x62636370 23 - #define QCOM_RPM_SMD_KEY_RATE 0x007a484b 24 - #define QCOM_RPM_SMD_KEY_ENABLE 0x62616e45 25 - #define QCOM_RPM_SMD_KEY_STATE 0x54415453 26 - #define QCOM_RPM_SCALING_ENABLE_ID 0x2 27 - 28 20 #define __DEFINE_CLK_SMD_RPM_PREFIX(_prefix, _name, _active, \ 29 - type, r_id, key) \ 21 + type, r_id, key, ao_rate, ao_flags) \ 30 22 static struct clk_smd_rpm clk_smd_rpm_##_prefix##_active; \ 31 23 static struct clk_smd_rpm clk_smd_rpm_##_prefix##_name = { \ 32 24 .rpm_res_type = (type), \ ··· 42 50 .active_only = true, \ 43 51 .rpm_key = (key), \ 44 52 .peer = &clk_smd_rpm_##_prefix##_name, \ 45 - .rate = INT_MAX, \ 53 + .rate = (ao_rate), \ 46 54 .hw.init = &(struct clk_init_data){ \ 47 55 .ops = &clk_smd_rpm_ops, \ 48 56 .name = #_active, \ ··· 51 59 .name = "xo_board", \ 52 60 }, \ 53 61 .num_parents = 1, \ 62 + .flags = (ao_flags), \ 54 63 }, \ 55 64 } 56 65 57 - #define __DEFINE_CLK_SMD_RPM(_name, _active, type, r_id, key) \ 66 + #define __DEFINE_CLK_SMD_RPM(_name, _active, type, r_id, key,\ 67 + ao_rate, ao_flags) \ 58 68 __DEFINE_CLK_SMD_RPM_PREFIX(/* empty */, _name, _active, \ 59 - type, r_id, key) 69 + type, r_id, key, ao_rate, ao_flags) 60 70 61 71 #define __DEFINE_CLK_SMD_RPM_BRANCH_PREFIX(_prefix, _name, _active,\ 62 72 type, r_id, r, key, ao_flags) \ ··· 106 112 107 113 #define DEFINE_CLK_SMD_RPM(_name, type, r_id) \ 108 114 __DEFINE_CLK_SMD_RPM(_name##_clk, _name##_a_clk, \ 109 - type, r_id, QCOM_RPM_SMD_KEY_RATE) 115 + type, r_id, QCOM_RPM_SMD_KEY_RATE, INT_MAX, 0) 110 116 111 117 #define DEFINE_CLK_SMD_RPM_BUS(_name, r_id) \ 112 118 __DEFINE_CLK_SMD_RPM_PREFIX(bus_##r_id##_, \ 113 119 _name##_clk, _name##_a_clk, QCOM_SMD_RPM_BUS_CLK, r_id, \ 114 - QCOM_RPM_SMD_KEY_RATE) 120 + QCOM_RPM_SMD_KEY_RATE, INT_MAX, 0) 121 + 122 + #define DEFINE_CLK_SMD_RPM_BUS_A(_name, r_id, ao_rate, ao_flags) \ 123 + __DEFINE_CLK_SMD_RPM_PREFIX(bus_##r_id##_, \ 124 + _name##_clk, _name##_a_clk, QCOM_SMD_RPM_BUS_CLK, r_id, \ 125 + QCOM_RPM_SMD_KEY_RATE, ao_rate, ao_flags) 115 126 116 127 #define DEFINE_CLK_SMD_RPM_CLK_SRC(_name, type, r_id) \ 117 128 __DEFINE_CLK_SMD_RPM( \ 118 129 _name##_clk_src, _name##_a_clk_src, \ 119 - type, r_id, QCOM_RPM_SMD_KEY_RATE) 130 + type, r_id, QCOM_RPM_SMD_KEY_RATE, INT_MAX, 0) 120 131 121 132 #define DEFINE_CLK_SMD_RPM_BRANCH(_name, type, r_id, r) \ 122 133 __DEFINE_CLK_SMD_RPM_BRANCH_PREFIX(branch_, \ ··· 135 136 136 137 #define DEFINE_CLK_SMD_RPM_QDSS(_name, type, r_id) \ 137 138 __DEFINE_CLK_SMD_RPM(_name##_clk, _name##_a_clk, \ 138 - type, r_id, QCOM_RPM_SMD_KEY_STATE) 139 + type, r_id, QCOM_RPM_SMD_KEY_STATE, INT_MAX, 0) 139 140 140 141 #define DEFINE_CLK_SMD_RPM_XO_BUFFER(_name, r_id, r) \ 141 142 __DEFINE_CLK_SMD_RPM_BRANCH(_name, _name##_a, \ ··· 170 171 unsigned long rate; 171 172 }; 172 173 173 - struct clk_smd_rpm_req { 174 - __le32 key; 175 - __le32 nbytes; 176 - __le32 value; 177 - }; 178 - 179 174 struct rpm_smd_clk_desc { 180 175 struct clk_smd_rpm **clks; 181 176 size_t num_clks; 177 + 178 + /* 179 + * Interconnect clocks are managed by the icc framework, this driver 180 + * only kickstarts them so that they don't get gated between 181 + * clk_smd_rpm_enable_scaling() and interconnect driver initialization. 182 + */ 183 + const struct clk_smd_rpm ** const icc_clks; 184 + size_t num_icc_clks; 182 185 bool scaling_before_handover; 183 186 }; 184 187 185 188 static DEFINE_MUTEX(rpm_smd_clk_lock); 186 189 187 - static int clk_smd_rpm_handoff(struct clk_smd_rpm *r) 190 + static int clk_smd_rpm_handoff(const struct clk_smd_rpm *r) 188 191 { 189 192 int ret; 190 193 struct clk_smd_rpm_req req = { ··· 455 454 DEFINE_CLK_SMD_RPM(aggre1_noc, QCOM_SMD_RPM_AGGR_CLK, 1); 456 455 DEFINE_CLK_SMD_RPM(aggre2_noc, QCOM_SMD_RPM_AGGR_CLK, 2); 457 456 458 - DEFINE_CLK_SMD_RPM_BUS(pcnoc, 0); 457 + DEFINE_CLK_SMD_RPM_BUS_A(pcnoc, 0, 19200000, CLK_IS_CRITICAL); 459 458 DEFINE_CLK_SMD_RPM_BUS(snoc, 1); 460 459 DEFINE_CLK_SMD_RPM_BUS(sysmmnoc, 2); 461 460 DEFINE_CLK_SMD_RPM_BUS(cnoc, 2); ··· 512 511 DEFINE_CLK_SMD_RPM_XO_BUFFER(div_clk2, 12, 19200000); 513 512 DEFINE_CLK_SMD_RPM_XO_BUFFER(div_clk3, 13, 19200000); 514 513 514 + static const struct clk_smd_rpm *bimc_pcnoc_icc_clks[] = { 515 + &clk_smd_rpm_bimc_clk, 516 + &clk_smd_rpm_bus_0_pcnoc_clk, 517 + }; 518 + 519 + static const struct clk_smd_rpm *bimc_pcnoc_snoc_icc_clks[] = { 520 + &clk_smd_rpm_bimc_clk, 521 + &clk_smd_rpm_bus_0_pcnoc_clk, 522 + &clk_smd_rpm_bus_1_snoc_clk, 523 + }; 524 + 525 + static const struct clk_smd_rpm *bimc_pcnoc_snoc_smmnoc_icc_clks[] = { 526 + &clk_smd_rpm_bimc_clk, 527 + &clk_smd_rpm_bus_0_pcnoc_clk, 528 + &clk_smd_rpm_bus_1_snoc_clk, 529 + &clk_smd_rpm_bus_2_sysmmnoc_clk, 530 + }; 531 + 532 + static const struct clk_smd_rpm *bimc_pcnoc_snoc_cnoc_ocmem_icc_clks[] = { 533 + &clk_smd_rpm_bimc_clk, 534 + &clk_smd_rpm_bus_0_pcnoc_clk, 535 + &clk_smd_rpm_bus_1_snoc_clk, 536 + &clk_smd_rpm_bus_2_cnoc_clk, 537 + &clk_smd_rpm_ocmemgx_clk, 538 + }; 539 + 540 + static const struct clk_smd_rpm *msm8996_icc_clks[] = { 541 + &clk_smd_rpm_bimc_clk, 542 + &clk_smd_rpm_branch_aggre1_noc_clk, 543 + &clk_smd_rpm_branch_aggre2_noc_clk, 544 + &clk_smd_rpm_bus_0_pcnoc_clk, 545 + &clk_smd_rpm_bus_1_snoc_clk, 546 + &clk_smd_rpm_bus_2_cnoc_clk, 547 + &clk_smd_rpm_mmssnoc_axi_rpm_clk, 548 + }; 549 + 550 + static const struct clk_smd_rpm *msm8998_icc_clks[] = { 551 + &clk_smd_rpm_aggre1_noc_clk, 552 + &clk_smd_rpm_aggre2_noc_clk, 553 + &clk_smd_rpm_bimc_clk, 554 + &clk_smd_rpm_bus_1_snoc_clk, 555 + &clk_smd_rpm_bus_2_cnoc_clk, 556 + &clk_smd_rpm_mmssnoc_axi_rpm_clk, 557 + }; 558 + 559 + static const struct clk_smd_rpm *sdm660_icc_clks[] = { 560 + &clk_smd_rpm_aggre2_noc_clk, 561 + &clk_smd_rpm_bimc_clk, 562 + &clk_smd_rpm_bus_1_snoc_clk, 563 + &clk_smd_rpm_bus_2_cnoc_clk, 564 + &clk_smd_rpm_mmssnoc_axi_rpm_clk, 565 + }; 566 + 567 + static const struct clk_smd_rpm *sm_qnoc_icc_clks[] = { 568 + &clk_smd_rpm_bimc_clk, 569 + &clk_smd_rpm_bus_1_cnoc_clk, 570 + &clk_smd_rpm_mmnrt_clk, 571 + &clk_smd_rpm_mmrt_clk, 572 + &clk_smd_rpm_qup_clk, 573 + &clk_smd_rpm_bus_2_snoc_clk, 574 + }; 575 + 515 576 static struct clk_smd_rpm *msm8909_clks[] = { 516 - [RPM_SMD_PCNOC_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk, 517 - [RPM_SMD_PCNOC_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk, 518 - [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_1_snoc_clk, 519 - [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_1_snoc_a_clk, 520 - [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk, 521 - [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk, 522 577 [RPM_SMD_QPIC_CLK] = &clk_smd_rpm_qpic_clk, 523 578 [RPM_SMD_QPIC_CLK_A] = &clk_smd_rpm_qpic_a_clk, 524 579 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, ··· 600 543 static const struct rpm_smd_clk_desc rpm_clk_msm8909 = { 601 544 .clks = msm8909_clks, 602 545 .num_clks = ARRAY_SIZE(msm8909_clks), 546 + .icc_clks = bimc_pcnoc_snoc_icc_clks, 547 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_icc_clks), 603 548 }; 604 549 605 550 static struct clk_smd_rpm *msm8916_clks[] = { 606 - [RPM_SMD_PCNOC_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk, 607 - [RPM_SMD_PCNOC_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk, 608 - [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_1_snoc_clk, 609 - [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_1_snoc_a_clk, 610 - [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk, 611 - [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk, 612 551 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, 613 552 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk, 614 553 [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1, ··· 628 575 static const struct rpm_smd_clk_desc rpm_clk_msm8916 = { 629 576 .clks = msm8916_clks, 630 577 .num_clks = ARRAY_SIZE(msm8916_clks), 578 + .icc_clks = bimc_pcnoc_snoc_icc_clks, 579 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_icc_clks), 631 580 }; 632 581 633 582 static struct clk_smd_rpm *msm8917_clks[] = { 634 583 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 635 584 [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a, 636 - [RPM_SMD_PNOC_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk, 637 - [RPM_SMD_PNOC_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk, 638 - [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_1_snoc_clk, 639 - [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_1_snoc_a_clk, 640 - [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk, 641 - [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk, 642 585 [RPM_SMD_BIMC_GPU_CLK] = &clk_smd_rpm_bimc_gpu_clk, 643 586 [RPM_SMD_BIMC_GPU_A_CLK] = &clk_smd_rpm_bimc_gpu_a_clk, 644 - [RPM_SMD_SYSMMNOC_CLK] = &clk_smd_rpm_bus_2_sysmmnoc_clk, 645 - [RPM_SMD_SYSMMNOC_A_CLK] = &clk_smd_rpm_bus_2_sysmmnoc_a_clk, 646 587 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, 647 588 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk, 648 589 [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1, ··· 656 609 static const struct rpm_smd_clk_desc rpm_clk_msm8917 = { 657 610 .clks = msm8917_clks, 658 611 .num_clks = ARRAY_SIZE(msm8917_clks), 612 + .icc_clks = bimc_pcnoc_snoc_smmnoc_icc_clks, 613 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_smmnoc_icc_clks), 659 614 }; 660 615 661 616 static struct clk_smd_rpm *msm8936_clks[] = { 662 617 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 663 618 [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a, 664 - [RPM_SMD_PCNOC_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk, 665 - [RPM_SMD_PCNOC_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk, 666 - [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_1_snoc_clk, 667 - [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_1_snoc_a_clk, 668 - [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk, 669 - [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk, 670 - [RPM_SMD_SYSMMNOC_CLK] = &clk_smd_rpm_bus_2_sysmmnoc_clk, 671 - [RPM_SMD_SYSMMNOC_A_CLK] = &clk_smd_rpm_bus_2_sysmmnoc_a_clk, 672 619 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, 673 620 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk, 674 621 [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1, ··· 686 645 static const struct rpm_smd_clk_desc rpm_clk_msm8936 = { 687 646 .clks = msm8936_clks, 688 647 .num_clks = ARRAY_SIZE(msm8936_clks), 648 + .icc_clks = bimc_pcnoc_snoc_smmnoc_icc_clks, 649 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_smmnoc_icc_clks), 689 650 }; 690 651 691 652 static struct clk_smd_rpm *msm8974_clks[] = { 692 653 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 693 654 [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a, 694 - [RPM_SMD_PNOC_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk, 695 - [RPM_SMD_PNOC_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk, 696 - [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_1_snoc_clk, 697 - [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_1_snoc_a_clk, 698 - [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_2_cnoc_clk, 699 - [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_2_cnoc_a_clk, 700 655 [RPM_SMD_MMSSNOC_AHB_CLK] = &clk_smd_rpm_bus_3_mmssnoc_ahb_clk, 701 656 [RPM_SMD_MMSSNOC_AHB_A_CLK] = &clk_smd_rpm_bus_3_mmssnoc_ahb_a_clk, 702 - [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk, 703 657 [RPM_SMD_GFX3D_CLK_SRC] = &clk_smd_rpm_gfx3d_clk_src, 704 658 [RPM_SMD_GFX3D_A_CLK_SRC] = &clk_smd_rpm_gfx3d_a_clk_src, 705 - [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk, 706 - [RPM_SMD_OCMEMGX_CLK] = &clk_smd_rpm_ocmemgx_clk, 707 - [RPM_SMD_OCMEMGX_A_CLK] = &clk_smd_rpm_ocmemgx_a_clk, 708 659 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, 709 660 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk, 710 661 [RPM_SMD_CXO_D0] = &clk_smd_rpm_cxo_d0, ··· 730 697 static const struct rpm_smd_clk_desc rpm_clk_msm8974 = { 731 698 .clks = msm8974_clks, 732 699 .num_clks = ARRAY_SIZE(msm8974_clks), 700 + .icc_clks = bimc_pcnoc_snoc_cnoc_ocmem_icc_clks, 701 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_cnoc_ocmem_icc_clks), 733 702 .scaling_before_handover = true, 734 703 }; 735 704 736 705 static struct clk_smd_rpm *msm8976_clks[] = { 737 706 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 738 707 [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a, 739 - [RPM_SMD_PCNOC_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk, 740 - [RPM_SMD_PCNOC_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk, 741 - [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_1_snoc_clk, 742 - [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_1_snoc_a_clk, 743 - [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk, 744 - [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk, 745 - [RPM_SMD_SYSMMNOC_CLK] = &clk_smd_rpm_bus_2_sysmmnoc_clk, 746 - [RPM_SMD_SYSMMNOC_A_CLK] = &clk_smd_rpm_bus_2_sysmmnoc_a_clk, 747 708 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, 748 709 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk, 749 710 [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1, ··· 758 731 759 732 static const struct rpm_smd_clk_desc rpm_clk_msm8976 = { 760 733 .clks = msm8976_clks, 761 - .num_clks = ARRAY_SIZE(msm8976_clks), 734 + .icc_clks = bimc_pcnoc_snoc_smmnoc_icc_clks, 735 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_smmnoc_icc_clks), 762 736 }; 763 737 764 738 static struct clk_smd_rpm *msm8992_clks[] = { 765 739 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 766 740 [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a, 767 - [RPM_SMD_PNOC_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk, 768 - [RPM_SMD_PNOC_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk, 769 - [RPM_SMD_OCMEMGX_CLK] = &clk_smd_rpm_ocmemgx_clk, 770 - [RPM_SMD_OCMEMGX_A_CLK] = &clk_smd_rpm_ocmemgx_a_clk, 771 - [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk, 772 - [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk, 773 - [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_2_cnoc_clk, 774 - [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_2_cnoc_a_clk, 775 741 [RPM_SMD_GFX3D_CLK_SRC] = &clk_smd_rpm_gfx3d_clk_src, 776 742 [RPM_SMD_GFX3D_A_CLK_SRC] = &clk_smd_rpm_gfx3d_a_clk_src, 777 - [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_1_snoc_clk, 778 - [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_1_snoc_a_clk, 779 743 [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1, 780 744 [RPM_SMD_BB_CLK1_A] = &clk_smd_rpm_bb_clk1_a, 781 745 [RPM_SMD_BB_CLK1_PIN] = &clk_smd_rpm_bb_clk1_pin, ··· 808 790 static const struct rpm_smd_clk_desc rpm_clk_msm8992 = { 809 791 .clks = msm8992_clks, 810 792 .num_clks = ARRAY_SIZE(msm8992_clks), 793 + .icc_clks = bimc_pcnoc_snoc_cnoc_ocmem_icc_clks, 794 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_cnoc_ocmem_icc_clks), 811 795 }; 812 796 813 797 static struct clk_smd_rpm *msm8994_clks[] = { 814 798 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 815 799 [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a, 816 - [RPM_SMD_PNOC_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk, 817 - [RPM_SMD_PNOC_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk, 818 - [RPM_SMD_OCMEMGX_CLK] = &clk_smd_rpm_ocmemgx_clk, 819 - [RPM_SMD_OCMEMGX_A_CLK] = &clk_smd_rpm_ocmemgx_a_clk, 820 - [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk, 821 - [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk, 822 - [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_2_cnoc_clk, 823 - [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_2_cnoc_a_clk, 824 800 [RPM_SMD_GFX3D_CLK_SRC] = &clk_smd_rpm_gfx3d_clk_src, 825 801 [RPM_SMD_GFX3D_A_CLK_SRC] = &clk_smd_rpm_gfx3d_a_clk_src, 826 - [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_1_snoc_clk, 827 - [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_1_snoc_a_clk, 828 802 [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1, 829 803 [RPM_SMD_BB_CLK1_A] = &clk_smd_rpm_bb_clk1_a, 830 804 [RPM_SMD_BB_CLK1_PIN] = &clk_smd_rpm_bb_clk1_pin, ··· 860 850 static const struct rpm_smd_clk_desc rpm_clk_msm8994 = { 861 851 .clks = msm8994_clks, 862 852 .num_clks = ARRAY_SIZE(msm8994_clks), 853 + .icc_clks = bimc_pcnoc_snoc_cnoc_ocmem_icc_clks, 854 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_cnoc_ocmem_icc_clks), 863 855 }; 864 856 865 857 static struct clk_smd_rpm *msm8996_clks[] = { 866 858 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 867 859 [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a, 868 - [RPM_SMD_PCNOC_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk, 869 - [RPM_SMD_PCNOC_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk, 870 - [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_1_snoc_clk, 871 - [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_1_snoc_a_clk, 872 - [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_2_cnoc_clk, 873 - [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_2_cnoc_a_clk, 874 - [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk, 875 - [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk, 876 - [RPM_SMD_MMAXI_CLK] = &clk_smd_rpm_mmssnoc_axi_rpm_clk, 877 - [RPM_SMD_MMAXI_A_CLK] = &clk_smd_rpm_mmssnoc_axi_rpm_a_clk, 878 860 [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk, 879 861 [RPM_SMD_IPA_A_CLK] = &clk_smd_rpm_ipa_a_clk, 880 862 [RPM_SMD_CE1_CLK] = &clk_smd_rpm_ce1_clk, 881 863 [RPM_SMD_CE1_A_CLK] = &clk_smd_rpm_ce1_a_clk, 882 - [RPM_SMD_AGGR1_NOC_CLK] = &clk_smd_rpm_branch_aggre1_noc_clk, 883 - [RPM_SMD_AGGR1_NOC_A_CLK] = &clk_smd_rpm_branch_aggre1_noc_a_clk, 884 - [RPM_SMD_AGGR2_NOC_CLK] = &clk_smd_rpm_branch_aggre2_noc_clk, 885 - [RPM_SMD_AGGR2_NOC_A_CLK] = &clk_smd_rpm_branch_aggre2_noc_a_clk, 886 864 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, 887 865 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk, 888 866 [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1, ··· 902 904 static const struct rpm_smd_clk_desc rpm_clk_msm8996 = { 903 905 .clks = msm8996_clks, 904 906 .num_clks = ARRAY_SIZE(msm8996_clks), 907 + .icc_clks = msm8996_icc_clks, 908 + .num_icc_clks = ARRAY_SIZE(msm8996_icc_clks), 905 909 }; 906 910 907 911 static struct clk_smd_rpm *qcs404_clks[] = { ··· 932 932 static const struct rpm_smd_clk_desc rpm_clk_qcs404 = { 933 933 .clks = qcs404_clks, 934 934 .num_clks = ARRAY_SIZE(qcs404_clks), 935 + .icc_clks = bimc_pcnoc_snoc_icc_clks, 936 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_icc_clks), 935 937 }; 936 938 937 939 static struct clk_smd_rpm *msm8998_clks[] = { 938 940 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 939 941 [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a, 940 - [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk, 941 - [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk, 942 942 [RPM_SMD_PCNOC_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk, 943 943 [RPM_SMD_PCNOC_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk, 944 - [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_1_snoc_clk, 945 - [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_1_snoc_a_clk, 946 - [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_2_cnoc_clk, 947 - [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_2_cnoc_a_clk, 948 944 [RPM_SMD_CE1_CLK] = &clk_smd_rpm_ce1_clk, 949 945 [RPM_SMD_CE1_A_CLK] = &clk_smd_rpm_ce1_a_clk, 950 946 [RPM_SMD_DIV_CLK1] = &clk_smd_rpm_div_clk1, ··· 963 967 [RPM_SMD_LN_BB_CLK2_A_PIN] = &clk_smd_rpm_ln_bb_clk2_a_pin, 964 968 [RPM_SMD_LN_BB_CLK3_PIN] = &clk_smd_rpm_ln_bb_clk3_pin, 965 969 [RPM_SMD_LN_BB_CLK3_A_PIN] = &clk_smd_rpm_ln_bb_clk3_a_pin, 966 - [RPM_SMD_MMAXI_CLK] = &clk_smd_rpm_mmssnoc_axi_rpm_clk, 967 - [RPM_SMD_MMAXI_A_CLK] = &clk_smd_rpm_mmssnoc_axi_rpm_a_clk, 968 - [RPM_SMD_AGGR1_NOC_CLK] = &clk_smd_rpm_aggre1_noc_clk, 969 - [RPM_SMD_AGGR1_NOC_A_CLK] = &clk_smd_rpm_aggre1_noc_a_clk, 970 - [RPM_SMD_AGGR2_NOC_CLK] = &clk_smd_rpm_aggre2_noc_clk, 971 - [RPM_SMD_AGGR2_NOC_A_CLK] = &clk_smd_rpm_aggre2_noc_a_clk, 972 970 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, 973 971 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk, 974 972 [RPM_SMD_RF_CLK1] = &clk_smd_rpm_rf_clk1, ··· 982 992 static const struct rpm_smd_clk_desc rpm_clk_msm8998 = { 983 993 .clks = msm8998_clks, 984 994 .num_clks = ARRAY_SIZE(msm8998_clks), 995 + .icc_clks = msm8998_icc_clks, 996 + .num_icc_clks = ARRAY_SIZE(msm8998_icc_clks), 985 997 }; 986 998 987 999 static struct clk_smd_rpm *sdm660_clks[] = { 988 1000 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 989 1001 [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a, 990 - [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_1_snoc_clk, 991 - [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_1_snoc_a_clk, 992 - [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_2_cnoc_clk, 993 - [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_2_cnoc_a_clk, 994 1002 [RPM_SMD_CNOC_PERIPH_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk, 995 1003 [RPM_SMD_CNOC_PERIPH_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk, 996 - [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk, 997 - [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk, 998 - [RPM_SMD_MMSSNOC_AXI_CLK] = &clk_smd_rpm_mmssnoc_axi_rpm_clk, 999 - [RPM_SMD_MMSSNOC_AXI_CLK_A] = &clk_smd_rpm_mmssnoc_axi_rpm_a_clk, 1000 1004 [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk, 1001 1005 [RPM_SMD_IPA_A_CLK] = &clk_smd_rpm_ipa_a_clk, 1002 1006 [RPM_SMD_CE1_CLK] = &clk_smd_rpm_ce1_clk, 1003 1007 [RPM_SMD_CE1_A_CLK] = &clk_smd_rpm_ce1_a_clk, 1004 - [RPM_SMD_AGGR2_NOC_CLK] = &clk_smd_rpm_aggre2_noc_clk, 1005 - [RPM_SMD_AGGR2_NOC_A_CLK] = &clk_smd_rpm_aggre2_noc_a_clk, 1006 1008 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, 1007 1009 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk, 1008 1010 [RPM_SMD_RF_CLK1] = &clk_smd_rpm_rf_clk1, ··· 1020 1038 static const struct rpm_smd_clk_desc rpm_clk_sdm660 = { 1021 1039 .clks = sdm660_clks, 1022 1040 .num_clks = ARRAY_SIZE(sdm660_clks), 1041 + .icc_clks = sdm660_icc_clks, 1042 + .num_icc_clks = ARRAY_SIZE(sdm660_icc_clks), 1023 1043 }; 1024 1044 1025 1045 static struct clk_smd_rpm *mdm9607_clks[] = { 1026 1046 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 1027 1047 [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a, 1028 - [RPM_SMD_PCNOC_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk, 1029 - [RPM_SMD_PCNOC_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk, 1030 - [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk, 1031 - [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk, 1032 1048 [RPM_SMD_QPIC_CLK] = &clk_smd_rpm_qpic_clk, 1033 1049 [RPM_SMD_QPIC_CLK_A] = &clk_smd_rpm_qpic_a_clk, 1034 1050 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, ··· 1040 1060 static const struct rpm_smd_clk_desc rpm_clk_mdm9607 = { 1041 1061 .clks = mdm9607_clks, 1042 1062 .num_clks = ARRAY_SIZE(mdm9607_clks), 1063 + .icc_clks = bimc_pcnoc_icc_clks, 1064 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_icc_clks), 1043 1065 }; 1044 1066 1045 1067 static struct clk_smd_rpm *msm8953_clks[] = { 1046 1068 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 1047 1069 [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a, 1048 - [RPM_SMD_PCNOC_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk, 1049 - [RPM_SMD_PCNOC_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk, 1050 - [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_1_snoc_clk, 1051 - [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_1_snoc_a_clk, 1052 - [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk, 1053 - [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk, 1054 1070 [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk, 1055 1071 [RPM_SMD_IPA_A_CLK] = &clk_smd_rpm_ipa_a_clk, 1056 - [RPM_SMD_SYSMMNOC_CLK] = &clk_smd_rpm_bus_2_sysmmnoc_clk, 1057 - [RPM_SMD_SYSMMNOC_A_CLK] = &clk_smd_rpm_bus_2_sysmmnoc_a_clk, 1058 1072 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, 1059 1073 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk, 1060 1074 [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1, ··· 1070 1096 static const struct rpm_smd_clk_desc rpm_clk_msm8953 = { 1071 1097 .clks = msm8953_clks, 1072 1098 .num_clks = ARRAY_SIZE(msm8953_clks), 1099 + .icc_clks = bimc_pcnoc_snoc_smmnoc_icc_clks, 1100 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_smmnoc_icc_clks), 1073 1101 }; 1074 1102 1075 1103 static struct clk_smd_rpm *sm6125_clks[] = { 1076 1104 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 1077 1105 [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a, 1078 - [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_2_snoc_clk, 1079 - [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_2_snoc_a_clk, 1080 - [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk, 1081 - [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk, 1082 1106 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_branch_qdss_clk, 1083 1107 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_branch_qdss_a_clk, 1084 1108 [RPM_SMD_RF_CLK1] = &clk_smd_rpm_rf_clk1, 1085 1109 [RPM_SMD_RF_CLK1_A] = &clk_smd_rpm_rf_clk1_a, 1086 1110 [RPM_SMD_RF_CLK2] = &clk_smd_rpm_rf_clk2, 1087 1111 [RPM_SMD_RF_CLK2_A] = &clk_smd_rpm_rf_clk2_a, 1088 - [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_1_cnoc_clk, 1089 - [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_1_cnoc_a_clk, 1090 1112 [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk, 1091 1113 [RPM_SMD_IPA_A_CLK] = &clk_smd_rpm_ipa_a_clk, 1092 1114 [RPM_SMD_CE1_CLK] = &clk_smd_rpm_ce1_clk, ··· 1093 1123 [RPM_SMD_LN_BB_CLK2_A] = &clk_smd_rpm_ln_bb_clk2_a, 1094 1124 [RPM_SMD_LN_BB_CLK3] = &clk_smd_rpm_ln_bb_clk3, 1095 1125 [RPM_SMD_LN_BB_CLK3_A] = &clk_smd_rpm_ln_bb_clk3_a, 1096 - [RPM_SMD_QUP_CLK] = &clk_smd_rpm_qup_clk, 1097 - [RPM_SMD_QUP_A_CLK] = &clk_smd_rpm_qup_a_clk, 1098 - [RPM_SMD_MMRT_CLK] = &clk_smd_rpm_mmrt_clk, 1099 - [RPM_SMD_MMRT_A_CLK] = &clk_smd_rpm_mmrt_a_clk, 1100 - [RPM_SMD_MMNRT_CLK] = &clk_smd_rpm_mmnrt_clk, 1101 - [RPM_SMD_MMNRT_A_CLK] = &clk_smd_rpm_mmnrt_a_clk, 1102 1126 [RPM_SMD_SNOC_PERIPH_CLK] = &clk_smd_rpm_bus_0_snoc_periph_clk, 1103 1127 [RPM_SMD_SNOC_PERIPH_A_CLK] = &clk_smd_rpm_bus_0_snoc_periph_a_clk, 1104 1128 [RPM_SMD_SNOC_LPASS_CLK] = &clk_smd_rpm_bus_5_snoc_lpass_clk, ··· 1102 1138 static const struct rpm_smd_clk_desc rpm_clk_sm6125 = { 1103 1139 .clks = sm6125_clks, 1104 1140 .num_clks = ARRAY_SIZE(sm6125_clks), 1141 + .icc_clks = sm_qnoc_icc_clks, 1142 + .num_icc_clks = ARRAY_SIZE(sm_qnoc_icc_clks) 1105 1143 }; 1106 1144 1107 1145 /* SM6115 */ 1108 1146 static struct clk_smd_rpm *sm6115_clks[] = { 1109 1147 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 1110 1148 [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a, 1111 - [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_2_snoc_clk, 1112 - [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_2_snoc_a_clk, 1113 - [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk, 1114 - [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk, 1115 1149 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_branch_qdss_clk, 1116 1150 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_branch_qdss_a_clk, 1117 1151 [RPM_SMD_RF_CLK1] = &clk_smd_rpm_rf_clk1, 1118 1152 [RPM_SMD_RF_CLK1_A] = &clk_smd_rpm_rf_clk1_a, 1119 1153 [RPM_SMD_RF_CLK2] = &clk_smd_rpm_rf_clk2, 1120 1154 [RPM_SMD_RF_CLK2_A] = &clk_smd_rpm_rf_clk2_a, 1121 - [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_1_cnoc_clk, 1122 - [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_1_cnoc_a_clk, 1123 1155 [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk, 1124 1156 [RPM_SMD_IPA_A_CLK] = &clk_smd_rpm_ipa_a_clk, 1125 1157 [RPM_SMD_CE1_CLK] = &clk_smd_rpm_ce1_clk, 1126 1158 [RPM_SMD_CE1_A_CLK] = &clk_smd_rpm_ce1_a_clk, 1127 - [RPM_SMD_QUP_CLK] = &clk_smd_rpm_qup_clk, 1128 - [RPM_SMD_QUP_A_CLK] = &clk_smd_rpm_qup_a_clk, 1129 - [RPM_SMD_MMRT_CLK] = &clk_smd_rpm_mmrt_clk, 1130 - [RPM_SMD_MMRT_A_CLK] = &clk_smd_rpm_mmrt_a_clk, 1131 - [RPM_SMD_MMNRT_CLK] = &clk_smd_rpm_mmnrt_clk, 1132 - [RPM_SMD_MMNRT_A_CLK] = &clk_smd_rpm_mmnrt_a_clk, 1133 1159 [RPM_SMD_SNOC_PERIPH_CLK] = &clk_smd_rpm_bus_0_snoc_periph_clk, 1134 1160 [RPM_SMD_SNOC_PERIPH_A_CLK] = &clk_smd_rpm_bus_0_snoc_periph_a_clk, 1135 1161 [RPM_SMD_SNOC_LPASS_CLK] = &clk_smd_rpm_bus_5_snoc_lpass_clk, ··· 1133 1179 static const struct rpm_smd_clk_desc rpm_clk_sm6115 = { 1134 1180 .clks = sm6115_clks, 1135 1181 .num_clks = ARRAY_SIZE(sm6115_clks), 1182 + .icc_clks = sm_qnoc_icc_clks, 1183 + .num_icc_clks = ARRAY_SIZE(sm_qnoc_icc_clks) 1136 1184 }; 1137 1185 1138 1186 static struct clk_smd_rpm *sm6375_clks[] = { 1139 1187 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 1140 1188 [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a, 1141 - [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_2_snoc_clk, 1142 - [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_2_snoc_a_clk, 1143 - [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk, 1144 - [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk, 1145 1189 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_branch_qdss_clk, 1146 1190 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_branch_qdss_a_clk, 1147 - [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_1_cnoc_clk, 1148 - [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_1_cnoc_a_clk, 1149 1191 [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk, 1150 1192 [RPM_SMD_IPA_A_CLK] = &clk_smd_rpm_ipa_a_clk, 1151 - [RPM_SMD_QUP_CLK] = &clk_smd_rpm_qup_clk, 1152 - [RPM_SMD_QUP_A_CLK] = &clk_smd_rpm_qup_a_clk, 1153 - [RPM_SMD_MMRT_CLK] = &clk_smd_rpm_mmrt_clk, 1154 - [RPM_SMD_MMRT_A_CLK] = &clk_smd_rpm_mmrt_a_clk, 1155 - [RPM_SMD_MMNRT_CLK] = &clk_smd_rpm_mmnrt_clk, 1156 - [RPM_SMD_MMNRT_A_CLK] = &clk_smd_rpm_mmnrt_a_clk, 1157 1193 [RPM_SMD_SNOC_PERIPH_CLK] = &clk_smd_rpm_bus_0_snoc_periph_clk, 1158 1194 [RPM_SMD_SNOC_PERIPH_A_CLK] = &clk_smd_rpm_bus_0_snoc_periph_a_clk, 1159 1195 [RPM_SMD_SNOC_LPASS_CLK] = &clk_smd_rpm_bus_5_snoc_lpass_clk, ··· 1160 1216 static const struct rpm_smd_clk_desc rpm_clk_sm6375 = { 1161 1217 .clks = sm6375_clks, 1162 1218 .num_clks = ARRAY_SIZE(sm6375_clks), 1219 + .icc_clks = sm_qnoc_icc_clks, 1220 + .num_icc_clks = ARRAY_SIZE(sm_qnoc_icc_clks) 1163 1221 }; 1164 1222 1165 1223 static struct clk_smd_rpm *qcm2290_clks[] = { 1166 1224 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 1167 1225 [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a, 1168 - [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_2_snoc_clk, 1169 - [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_2_snoc_a_clk, 1170 - [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk, 1171 - [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk, 1172 1226 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_branch_qdss_clk, 1173 1227 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_branch_qdss_a_clk, 1174 1228 [RPM_SMD_LN_BB_CLK2] = &clk_smd_rpm_ln_bb_clk2, 1175 1229 [RPM_SMD_LN_BB_CLK2_A] = &clk_smd_rpm_ln_bb_clk2_a, 1176 1230 [RPM_SMD_RF_CLK3] = &clk_smd_rpm_38m4_rf_clk3, 1177 1231 [RPM_SMD_RF_CLK3_A] = &clk_smd_rpm_38m4_rf_clk3_a, 1178 - [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_1_cnoc_clk, 1179 - [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_1_cnoc_a_clk, 1180 1232 [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk, 1181 1233 [RPM_SMD_IPA_A_CLK] = &clk_smd_rpm_ipa_a_clk, 1182 - [RPM_SMD_QUP_CLK] = &clk_smd_rpm_qup_clk, 1183 - [RPM_SMD_QUP_A_CLK] = &clk_smd_rpm_qup_a_clk, 1184 - [RPM_SMD_MMRT_CLK] = &clk_smd_rpm_mmrt_clk, 1185 - [RPM_SMD_MMRT_A_CLK] = &clk_smd_rpm_mmrt_a_clk, 1186 - [RPM_SMD_MMNRT_CLK] = &clk_smd_rpm_mmnrt_clk, 1187 - [RPM_SMD_MMNRT_A_CLK] = &clk_smd_rpm_mmnrt_a_clk, 1188 1234 [RPM_SMD_SNOC_PERIPH_CLK] = &clk_smd_rpm_bus_0_snoc_periph_clk, 1189 1235 [RPM_SMD_SNOC_PERIPH_A_CLK] = &clk_smd_rpm_bus_0_snoc_periph_a_clk, 1190 1236 [RPM_SMD_SNOC_LPASS_CLK] = &clk_smd_rpm_bus_5_snoc_lpass_clk, ··· 1196 1262 static const struct rpm_smd_clk_desc rpm_clk_qcm2290 = { 1197 1263 .clks = qcm2290_clks, 1198 1264 .num_clks = ARRAY_SIZE(qcm2290_clks), 1265 + .icc_clks = sm_qnoc_icc_clks, 1266 + .num_icc_clks = ARRAY_SIZE(sm_qnoc_icc_clks) 1199 1267 }; 1200 1268 1201 1269 static const struct of_device_id rpm_smd_clk_match_table[] = { ··· 1238 1302 return desc->clks[idx] ? &desc->clks[idx]->hw : ERR_PTR(-ENOENT); 1239 1303 } 1240 1304 1305 + static void rpm_smd_unregister_icc(void *data) 1306 + { 1307 + struct platform_device *icc_pdev = data; 1308 + 1309 + platform_device_unregister(icc_pdev); 1310 + } 1311 + 1241 1312 static int rpm_smd_clk_probe(struct platform_device *pdev) 1242 1313 { 1243 1314 int ret; 1244 1315 size_t num_clks, i; 1245 1316 struct clk_smd_rpm **rpm_smd_clks; 1246 1317 const struct rpm_smd_clk_desc *desc; 1318 + struct platform_device *icc_pdev; 1247 1319 1248 1320 rpmcc_smd_rpm = dev_get_drvdata(pdev->dev.parent); 1249 1321 if (!rpmcc_smd_rpm) { ··· 1281 1337 goto err; 1282 1338 } 1283 1339 1340 + for (i = 0; i < desc->num_icc_clks; i++) { 1341 + if (!desc->icc_clks[i]) 1342 + continue; 1343 + 1344 + ret = clk_smd_rpm_handoff(desc->icc_clks[i]); 1345 + if (ret) 1346 + goto err; 1347 + } 1348 + 1284 1349 if (!desc->scaling_before_handover) { 1285 1350 ret = clk_smd_rpm_enable_scaling(); 1286 1351 if (ret) ··· 1309 1356 (void *)desc); 1310 1357 if (ret) 1311 1358 goto err; 1359 + 1360 + icc_pdev = platform_device_register_data(pdev->dev.parent, 1361 + "icc_smd_rpm", -1, NULL, 0); 1362 + if (IS_ERR(icc_pdev)) { 1363 + dev_err(&pdev->dev, "Failed to register icc_smd_rpm device: %pE\n", 1364 + icc_pdev); 1365 + /* No need to unregister clocks because of this */ 1366 + } else { 1367 + ret = devm_add_action_or_reset(&pdev->dev, rpm_smd_unregister_icc, 1368 + icc_pdev); 1369 + if (ret) 1370 + goto err; 1371 + } 1312 1372 1313 1373 return 0; 1314 1374 err:
+1 -1
drivers/clk/qcom/clk-spmi-pmic-div.c
··· 177 177 178 178 struct spmi_pmic_div_clk_cc { 179 179 int nclks; 180 - struct clkdiv clks[]; 180 + struct clkdiv clks[] __counted_by(nclks); 181 181 }; 182 182 183 183 static struct clk_hw *
+1 -1
drivers/clk/qcom/dispcc-qcm2290.c
··· 7 7 #include <linux/err.h> 8 8 #include <linux/kernel.h> 9 9 #include <linux/module.h> 10 - #include <linux/of_device.h> 11 10 #include <linux/of.h> 11 + #include <linux/platform_device.h> 12 12 #include <linux/regmap.h> 13 13 14 14 #include <dt-bindings/clock/qcom,dispcc-qcm2290.h>
+4 -4
drivers/clk/qcom/dispcc-sc8280xp.c
··· 3057 3057 .name = "disp0_mdss_gdsc", 3058 3058 }, 3059 3059 .pwrsts = PWRSTS_OFF_ON, 3060 - .flags = HW_CTRL, 3060 + .flags = HW_CTRL | RETAIN_FF_ENABLE, 3061 3061 }; 3062 3062 3063 3063 static struct gdsc disp1_mdss_gdsc = { ··· 3069 3069 .name = "disp1_mdss_gdsc", 3070 3070 }, 3071 3071 .pwrsts = PWRSTS_OFF_ON, 3072 - .flags = HW_CTRL, 3072 + .flags = HW_CTRL | RETAIN_FF_ENABLE, 3073 3073 }; 3074 3074 3075 3075 static struct gdsc disp0_mdss_int2_gdsc = { ··· 3081 3081 .name = "disp0_mdss_int2_gdsc", 3082 3082 }, 3083 3083 .pwrsts = PWRSTS_OFF_ON, 3084 - .flags = HW_CTRL, 3084 + .flags = HW_CTRL | RETAIN_FF_ENABLE, 3085 3085 }; 3086 3086 3087 3087 static struct gdsc disp1_mdss_int2_gdsc = { ··· 3093 3093 .name = "disp1_mdss_int2_gdsc", 3094 3094 }, 3095 3095 .pwrsts = PWRSTS_OFF_ON, 3096 - .flags = HW_CTRL, 3096 + .flags = HW_CTRL | RETAIN_FF_ENABLE, 3097 3097 }; 3098 3098 3099 3099 static struct gdsc *disp0_cc_sc8280xp_gdscs[] = {
+1 -1
drivers/clk/qcom/dispcc-sm6115.c
··· 8 8 #include <linux/err.h> 9 9 #include <linux/kernel.h> 10 10 #include <linux/module.h> 11 - #include <linux/of_device.h> 12 11 #include <linux/of.h> 12 + #include <linux/platform_device.h> 13 13 #include <linux/regmap.h> 14 14 15 15 #include <dt-bindings/clock/qcom,sm6115-dispcc.h>
+12 -3
drivers/clk/qcom/dispcc-sm8450.c
··· 9 9 #include <linux/err.h> 10 10 #include <linux/kernel.h> 11 11 #include <linux/module.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/of.h> 13 + #include <linux/platform_device.h> 14 14 #include <linux/regmap.h> 15 15 #include <linux/pm_runtime.h> 16 16 ··· 1776 1776 return ret; 1777 1777 1778 1778 regmap = qcom_cc_map(pdev, &disp_cc_sm8450_desc); 1779 - if (IS_ERR(regmap)) 1780 - return PTR_ERR(regmap); 1779 + if (IS_ERR(regmap)) { 1780 + ret = PTR_ERR(regmap); 1781 + goto err_put_rpm; 1782 + } 1781 1783 1782 1784 clk_lucid_evo_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config); 1783 1785 clk_lucid_evo_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config); ··· 1794 1792 regmap_update_bits(regmap, 0xe05c, BIT(0), BIT(0)); 1795 1793 1796 1794 ret = qcom_cc_really_probe(pdev, &disp_cc_sm8450_desc, regmap); 1795 + if (ret) 1796 + goto err_put_rpm; 1797 1797 1798 1798 pm_runtime_put(&pdev->dev); 1799 + 1800 + return 0; 1801 + 1802 + err_put_rpm: 1803 + pm_runtime_put_sync(&pdev->dev); 1799 1804 1800 1805 return ret; 1801 1806 }
+12 -3
drivers/clk/qcom/dispcc-sm8550.c
··· 9 9 #include <linux/err.h> 10 10 #include <linux/kernel.h> 11 11 #include <linux/module.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/of.h> 13 + #include <linux/platform_device.h> 14 14 #include <linux/regmap.h> 15 15 #include <linux/pm_runtime.h> 16 16 ··· 1761 1761 return ret; 1762 1762 1763 1763 regmap = qcom_cc_map(pdev, &disp_cc_sm8550_desc); 1764 - if (IS_ERR(regmap)) 1765 - return PTR_ERR(regmap); 1764 + if (IS_ERR(regmap)) { 1765 + ret = PTR_ERR(regmap); 1766 + goto err_put_rpm; 1767 + } 1766 1768 1767 1769 clk_lucid_evo_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config); 1768 1770 clk_lucid_evo_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config); ··· 1779 1777 regmap_update_bits(regmap, 0xe054, BIT(0), BIT(0)); 1780 1778 1781 1779 ret = qcom_cc_really_probe(pdev, &disp_cc_sm8550_desc, regmap); 1780 + if (ret) 1781 + goto err_put_rpm; 1782 1782 1783 1783 pm_runtime_put(&pdev->dev); 1784 + 1785 + return 0; 1786 + 1787 + err_put_rpm: 1788 + pm_runtime_put_sync(&pdev->dev); 1784 1789 1785 1790 return ret; 1786 1791 }
-1
drivers/clk/qcom/gcc-apq8084.c
··· 9 9 #include <linux/platform_device.h> 10 10 #include <linux/module.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/clk-provider.h> 14 13 #include <linux/regmap.h> 15 14 #include <linux/reset-controller.h>
+6 -1
drivers/clk/qcom/gcc-ipq4019.c
··· 8 8 #include <linux/platform_device.h> 9 9 #include <linux/module.h> 10 10 #include <linux/of.h> 11 - #include <linux/of_device.h> 12 11 #include <linux/clk-provider.h> 13 12 #include <linux/regmap.h> 14 13 #include <linux/reset-controller.h> ··· 1685 1686 [GCC_TCSR_BCR] = {0x22000, 0}, 1686 1687 [GCC_MPM_BCR] = {0x24000, 0}, 1687 1688 [GCC_SPDM_BCR] = {0x25000, 0}, 1689 + [ESS_MAC1_ARES] = {0x1200C, 0}, 1690 + [ESS_MAC2_ARES] = {0x1200C, 1}, 1691 + [ESS_MAC3_ARES] = {0x1200C, 2}, 1692 + [ESS_MAC4_ARES] = {0x1200C, 3}, 1693 + [ESS_MAC5_ARES] = {0x1200C, 4}, 1694 + [ESS_PSGMII_ARES] = {0x1200C, 5}, 1688 1695 }; 1689 1696 1690 1697 static const struct regmap_config gcc_ipq4019_regmap_config = {
+3724
drivers/clk/qcom/gcc-ipq5018.c
··· 1 + // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + /* 3 + * Copyright (c) 2023, The Linux Foundation. All rights reserved. 4 + */ 5 + #include <linux/clk-provider.h> 6 + #include <linux/module.h> 7 + #include <linux/of_device.h> 8 + #include <linux/regmap.h> 9 + 10 + #include <dt-bindings/clock/qcom,gcc-ipq5018.h> 11 + #include <dt-bindings/reset/qcom,gcc-ipq5018.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 "clk-regmap-phy-mux.h" 20 + #include "reset.h" 21 + 22 + /* Need to match the order of clocks in DT binding */ 23 + enum { 24 + DT_XO, 25 + DT_SLEEP_CLK, 26 + DT_PCIE20_PHY0_PIPE_CLK, 27 + DT_PCIE20_PHY1_PIPE_CLK, 28 + DT_USB3_PHY0_CC_PIPE_CLK, 29 + DT_GEPHY_RX_CLK, 30 + DT_GEPHY_TX_CLK, 31 + DT_UNIPHY_RX_CLK, 32 + DT_UNIPHY_TX_CLK, 33 + }; 34 + 35 + enum { 36 + P_XO, 37 + P_CORE_PI_SLEEP_CLK, 38 + P_PCIE20_PHY0_PIPE, 39 + P_PCIE20_PHY1_PIPE, 40 + P_USB3PHY_0_PIPE, 41 + P_GEPHY_RX, 42 + P_GEPHY_TX, 43 + P_UNIPHY_RX, 44 + P_UNIPHY_TX, 45 + P_GPLL0, 46 + P_GPLL0_DIV2, 47 + P_GPLL2, 48 + P_GPLL4, 49 + P_UBI32_PLL, 50 + }; 51 + 52 + static const struct clk_parent_data gcc_xo_data[] = { 53 + { .index = DT_XO }, 54 + }; 55 + 56 + static const struct clk_parent_data gcc_sleep_clk_data[] = { 57 + { .index = DT_SLEEP_CLK }, 58 + }; 59 + 60 + static struct clk_alpha_pll gpll0_main = { 61 + .offset = 0x21000, 62 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 63 + .clkr = { 64 + .enable_reg = 0x0b000, 65 + .enable_mask = BIT(0), 66 + .hw.init = &(struct clk_init_data) { 67 + .name = "gpll0_main", 68 + .parent_data = gcc_xo_data, 69 + .num_parents = ARRAY_SIZE(gcc_xo_data), 70 + .ops = &clk_alpha_pll_stromer_ops, 71 + }, 72 + }, 73 + }; 74 + 75 + static struct clk_alpha_pll gpll2_main = { 76 + .offset = 0x4a000, 77 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 78 + .clkr = { 79 + .enable_reg = 0x0b000, 80 + .enable_mask = BIT(2), 81 + .hw.init = &(struct clk_init_data) { 82 + .name = "gpll2_main", 83 + .parent_data = gcc_xo_data, 84 + .num_parents = ARRAY_SIZE(gcc_xo_data), 85 + .ops = &clk_alpha_pll_stromer_ops, 86 + }, 87 + }, 88 + }; 89 + 90 + static struct clk_alpha_pll gpll4_main = { 91 + .offset = 0x24000, 92 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 93 + .clkr = { 94 + .enable_reg = 0x0b000, 95 + .enable_mask = BIT(5), 96 + .hw.init = &(struct clk_init_data) { 97 + .name = "gpll4_main", 98 + .parent_data = gcc_xo_data, 99 + .num_parents = ARRAY_SIZE(gcc_xo_data), 100 + .ops = &clk_alpha_pll_stromer_ops, 101 + }, 102 + }, 103 + }; 104 + 105 + static struct clk_alpha_pll ubi32_pll_main = { 106 + .offset = 0x25000, 107 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 108 + .clkr = { 109 + .enable_reg = 0x0b000, 110 + .enable_mask = BIT(6), 111 + .hw.init = &(struct clk_init_data) { 112 + .name = "ubi32_pll_main", 113 + .parent_data = gcc_xo_data, 114 + .num_parents = ARRAY_SIZE(gcc_xo_data), 115 + .ops = &clk_alpha_pll_stromer_ops, 116 + }, 117 + }, 118 + }; 119 + 120 + static struct clk_alpha_pll_postdiv gpll0 = { 121 + .offset = 0x21000, 122 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 123 + .width = 4, 124 + .clkr.hw.init = &(struct clk_init_data) { 125 + .name = "gpll0", 126 + .parent_hws = (const struct clk_hw *[]) { 127 + &gpll0_main.clkr.hw, 128 + }, 129 + .num_parents = 1, 130 + .ops = &clk_alpha_pll_postdiv_ro_ops, 131 + .flags = CLK_SET_RATE_PARENT, 132 + }, 133 + }; 134 + 135 + static struct clk_alpha_pll_postdiv gpll2 = { 136 + .offset = 0x4a000, 137 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 138 + .width = 4, 139 + .clkr.hw.init = &(struct clk_init_data) { 140 + .name = "gpll2", 141 + .parent_hws = (const struct clk_hw *[]) { 142 + &gpll2_main.clkr.hw, 143 + }, 144 + .num_parents = 1, 145 + .ops = &clk_alpha_pll_postdiv_ro_ops, 146 + .flags = CLK_SET_RATE_PARENT, 147 + }, 148 + }; 149 + 150 + static struct clk_alpha_pll_postdiv gpll4 = { 151 + .offset = 0x24000, 152 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 153 + .width = 4, 154 + .clkr.hw.init = &(struct clk_init_data) { 155 + .name = "gpll4", 156 + .parent_hws = (const struct clk_hw *[]) { 157 + &gpll4_main.clkr.hw, 158 + }, 159 + .num_parents = 1, 160 + .ops = &clk_alpha_pll_postdiv_ro_ops, 161 + .flags = CLK_SET_RATE_PARENT, 162 + }, 163 + }; 164 + 165 + static struct clk_alpha_pll_postdiv ubi32_pll = { 166 + .offset = 0x25000, 167 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 168 + .width = 4, 169 + .clkr.hw.init = &(struct clk_init_data) { 170 + .name = "ubi32_pll", 171 + .parent_hws = (const struct clk_hw *[]) { 172 + &ubi32_pll_main.clkr.hw, 173 + }, 174 + .num_parents = 1, 175 + .ops = &clk_alpha_pll_postdiv_ro_ops, 176 + .flags = CLK_SET_RATE_PARENT, 177 + }, 178 + }; 179 + 180 + static struct clk_fixed_factor gpll0_out_main_div2 = { 181 + .mult = 1, 182 + .div = 2, 183 + .hw.init = &(struct clk_init_data) { 184 + .name = "gpll0_out_main_div2", 185 + .parent_hws = (const struct clk_hw *[]) { 186 + &gpll0_main.clkr.hw, 187 + }, 188 + .num_parents = 1, 189 + .ops = &clk_fixed_factor_ops, 190 + .flags = CLK_SET_RATE_PARENT, 191 + }, 192 + }; 193 + 194 + static const struct clk_parent_data gcc_xo_gpll0_gpll0_out_main_div2[] = { 195 + { .index = DT_XO }, 196 + { .hw = &gpll0.clkr.hw }, 197 + { .hw = &gpll0_out_main_div2.hw }, 198 + }; 199 + 200 + static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_map[] = { 201 + { P_XO, 0 }, 202 + { P_GPLL0, 1 }, 203 + { P_GPLL0_DIV2, 4 }, 204 + }; 205 + 206 + static const struct clk_parent_data gcc_xo_gpll0[] = { 207 + { .index = DT_XO }, 208 + { .hw = &gpll0.clkr.hw }, 209 + }; 210 + 211 + static const struct parent_map gcc_xo_gpll0_map[] = { 212 + { P_XO, 0 }, 213 + { P_GPLL0, 1 }, 214 + }; 215 + 216 + static const struct clk_parent_data gcc_xo_gpll0_out_main_div2_gpll0[] = { 217 + { .index = DT_XO }, 218 + { .hw = &gpll0_out_main_div2.hw }, 219 + { .hw = &gpll0.clkr.hw }, 220 + }; 221 + 222 + static const struct parent_map gcc_xo_gpll0_out_main_div2_gpll0_map[] = { 223 + { P_XO, 0 }, 224 + { P_GPLL0_DIV2, 2 }, 225 + { P_GPLL0, 1 }, 226 + }; 227 + 228 + static const struct clk_parent_data gcc_xo_ubi32_gpll0[] = { 229 + { .index = DT_XO }, 230 + { .hw = &ubi32_pll.clkr.hw }, 231 + { .hw = &gpll0.clkr.hw }, 232 + }; 233 + 234 + static const struct parent_map gcc_xo_ubi32_gpll0_map[] = { 235 + { P_XO, 0 }, 236 + { P_UBI32_PLL, 1 }, 237 + { P_GPLL0, 2 }, 238 + }; 239 + 240 + static const struct clk_parent_data gcc_xo_gpll0_gpll2[] = { 241 + { .index = DT_XO }, 242 + { .hw = &gpll0.clkr.hw }, 243 + { .hw = &gpll2.clkr.hw }, 244 + }; 245 + 246 + static const struct parent_map gcc_xo_gpll0_gpll2_map[] = { 247 + { P_XO, 0 }, 248 + { P_GPLL0, 1 }, 249 + { P_GPLL2, 2 }, 250 + }; 251 + 252 + static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll4[] = { 253 + { .index = DT_XO }, 254 + { .hw = &gpll0.clkr.hw }, 255 + { .hw = &gpll2.clkr.hw }, 256 + { .hw = &gpll4.clkr.hw }, 257 + }; 258 + 259 + static const struct parent_map gcc_xo_gpll0_gpll2_gpll4_map[] = { 260 + { P_XO, 0 }, 261 + { P_GPLL0, 1 }, 262 + { P_GPLL2, 2 }, 263 + { P_GPLL4, 3 }, 264 + }; 265 + 266 + static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = { 267 + { .index = DT_XO }, 268 + { .hw = &gpll0.clkr.hw }, 269 + { .hw = &gpll4.clkr.hw }, 270 + }; 271 + 272 + static const struct parent_map gcc_xo_gpll0_gpll4_map[] = { 273 + { P_XO, 0 }, 274 + { P_GPLL0, 1 }, 275 + { P_GPLL4, 2 }, 276 + }; 277 + 278 + static const struct clk_parent_data gcc_xo_gpll0_core_pi_sleep_clk[] = { 279 + { .index = DT_XO }, 280 + { .hw = &gpll0.clkr.hw }, 281 + { .index = DT_SLEEP_CLK }, 282 + }; 283 + 284 + static const struct parent_map gcc_xo_gpll0_core_pi_sleep_clk_map[] = { 285 + { P_XO, 0 }, 286 + { P_GPLL0, 2 }, 287 + { P_CORE_PI_SLEEP_CLK, 6 }, 288 + }; 289 + 290 + static const struct clk_parent_data gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk[] = { 291 + { .index = DT_XO }, 292 + { .hw = &gpll0.clkr.hw }, 293 + { .hw = &gpll0_out_main_div2.hw }, 294 + { .index = DT_SLEEP_CLK }, 295 + }; 296 + 297 + static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk_map[] = { 298 + { P_XO, 0 }, 299 + { P_GPLL0, 1 }, 300 + { P_GPLL0_DIV2, 4 }, 301 + { P_CORE_PI_SLEEP_CLK, 6 }, 302 + }; 303 + 304 + static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll0_out_main_div2[] = { 305 + { .index = DT_XO }, 306 + { .hw = &gpll0.clkr.hw }, 307 + { .hw = &gpll2.clkr.hw }, 308 + { .hw = &gpll0_out_main_div2.hw }, 309 + }; 310 + 311 + static const struct parent_map gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map[] = { 312 + { P_XO, 0 }, 313 + { P_GPLL0, 1 }, 314 + { P_GPLL2, 2 }, 315 + { P_GPLL0_DIV2, 4 }, 316 + }; 317 + 318 + static const struct clk_parent_data gcc_xo_gpll4_gpll0_gpll0_out_main_div2[] = { 319 + { .index = DT_XO }, 320 + { .hw = &gpll4.clkr.hw }, 321 + { .hw = &gpll0.clkr.hw }, 322 + { .hw = &gpll0_out_main_div2.hw }, 323 + }; 324 + 325 + static const struct parent_map gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map1[] = { 326 + { P_XO, 0 }, 327 + { P_GPLL4, 1 }, 328 + { P_GPLL0, 2 }, 329 + { P_GPLL0_DIV2, 4 }, 330 + }; 331 + 332 + static const struct parent_map gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map2[] = { 333 + { P_XO, 0 }, 334 + { P_GPLL4, 1 }, 335 + { P_GPLL0, 3 }, 336 + { P_GPLL0_DIV2, 4 }, 337 + }; 338 + 339 + static const struct clk_parent_data gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0[] = { 340 + { .index = DT_XO }, 341 + { .index = DT_GEPHY_RX_CLK }, 342 + { .index = DT_GEPHY_TX_CLK }, 343 + { .hw = &ubi32_pll.clkr.hw }, 344 + { .hw = &gpll0.clkr.hw }, 345 + }; 346 + 347 + static const struct parent_map gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0_map[] = { 348 + { P_XO, 0 }, 349 + { P_GEPHY_RX, 1 }, 350 + { P_GEPHY_TX, 2 }, 351 + { P_UBI32_PLL, 3 }, 352 + { P_GPLL0, 4 }, 353 + }; 354 + 355 + static const struct clk_parent_data gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0[] = { 356 + { .index = DT_XO }, 357 + { .index = DT_GEPHY_TX_CLK }, 358 + { .index = DT_GEPHY_RX_CLK }, 359 + { .hw = &ubi32_pll.clkr.hw }, 360 + { .hw = &gpll0.clkr.hw }, 361 + }; 362 + 363 + static const struct parent_map gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0_map[] = { 364 + { P_XO, 0 }, 365 + { P_GEPHY_TX, 1 }, 366 + { P_GEPHY_RX, 2 }, 367 + { P_UBI32_PLL, 3 }, 368 + { P_GPLL0, 4 }, 369 + }; 370 + 371 + static const struct clk_parent_data gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0[] = { 372 + { .index = DT_XO }, 373 + { .index = DT_UNIPHY_RX_CLK }, 374 + { .index = DT_UNIPHY_TX_CLK }, 375 + { .hw = &ubi32_pll.clkr.hw }, 376 + { .hw = &gpll0.clkr.hw }, 377 + }; 378 + 379 + static const struct parent_map gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0_map[] = { 380 + { P_XO, 0 }, 381 + { P_UNIPHY_RX, 1 }, 382 + { P_UNIPHY_TX, 2 }, 383 + { P_UBI32_PLL, 3 }, 384 + { P_GPLL0, 4 }, 385 + }; 386 + 387 + static const struct clk_parent_data gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0[] = { 388 + { .index = DT_XO }, 389 + { .index = DT_UNIPHY_TX_CLK }, 390 + { .index = DT_UNIPHY_RX_CLK }, 391 + { .hw = &ubi32_pll.clkr.hw }, 392 + { .hw = &gpll0.clkr.hw }, 393 + }; 394 + 395 + static const struct parent_map gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0_map[] = { 396 + { P_XO, 0 }, 397 + { P_UNIPHY_TX, 1 }, 398 + { P_UNIPHY_RX, 2 }, 399 + { P_UBI32_PLL, 3 }, 400 + { P_GPLL0, 4 }, 401 + }; 402 + 403 + static const struct clk_parent_data gcc_pcie20_phy0_pipe_clk_xo[] = { 404 + { .index = DT_PCIE20_PHY0_PIPE_CLK }, 405 + { .index = DT_XO }, 406 + }; 407 + 408 + static const struct parent_map gcc_pcie20_phy0_pipe_clk_xo_map[] = { 409 + { P_PCIE20_PHY0_PIPE, 0 }, 410 + { P_XO, 2 }, 411 + }; 412 + 413 + static const struct clk_parent_data gcc_pcie20_phy1_pipe_clk_xo[] = { 414 + { .index = DT_PCIE20_PHY1_PIPE_CLK }, 415 + { .index = DT_XO }, 416 + }; 417 + 418 + static const struct parent_map gcc_pcie20_phy1_pipe_clk_xo_map[] = { 419 + { P_PCIE20_PHY1_PIPE, 0 }, 420 + { P_XO, 2 }, 421 + }; 422 + 423 + static const struct clk_parent_data gcc_usb3phy_0_cc_pipe_clk_xo[] = { 424 + { .index = DT_USB3_PHY0_CC_PIPE_CLK }, 425 + { .index = DT_XO }, 426 + }; 427 + 428 + static const struct parent_map gcc_usb3phy_0_cc_pipe_clk_xo_map[] = { 429 + { P_USB3PHY_0_PIPE, 0 }, 430 + { P_XO, 2 }, 431 + }; 432 + 433 + static const struct freq_tbl ftbl_adss_pwm_clk_src[] = { 434 + F(24000000, P_XO, 1, 0, 0), 435 + F(100000000, P_GPLL0, 8, 0, 0), 436 + { } 437 + }; 438 + 439 + static struct clk_rcg2 adss_pwm_clk_src = { 440 + .cmd_rcgr = 0x1f008, 441 + .freq_tbl = ftbl_adss_pwm_clk_src, 442 + .hid_width = 5, 443 + .parent_map = gcc_xo_gpll0_map, 444 + .clkr.hw.init = &(struct clk_init_data) { 445 + .name = "adss_pwm_clk_src", 446 + .parent_data = gcc_xo_gpll0, 447 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 448 + .ops = &clk_rcg2_ops, 449 + }, 450 + }; 451 + 452 + static const struct freq_tbl ftbl_blsp1_qup_i2c_apps_clk_src[] = { 453 + F(50000000, P_GPLL0, 16, 0, 0), 454 + { } 455 + }; 456 + 457 + static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = { 458 + .cmd_rcgr = 0x0200c, 459 + .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src, 460 + .hid_width = 5, 461 + .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 462 + .clkr.hw.init = &(struct clk_init_data) { 463 + .name = "blsp1_qup1_i2c_apps_clk_src", 464 + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 465 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2), 466 + .ops = &clk_rcg2_ops, 467 + }, 468 + }; 469 + 470 + static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = { 471 + .cmd_rcgr = 0x03000, 472 + .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src, 473 + .hid_width = 5, 474 + .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 475 + .clkr.hw.init = &(struct clk_init_data) { 476 + .name = "blsp1_qup2_i2c_apps_clk_src", 477 + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 478 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2), 479 + .ops = &clk_rcg2_ops, 480 + }, 481 + }; 482 + 483 + static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = { 484 + .cmd_rcgr = 0x04000, 485 + .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src, 486 + .hid_width = 5, 487 + .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 488 + .clkr.hw.init = &(struct clk_init_data) { 489 + .name = "blsp1_qup3_i2c_apps_clk_src", 490 + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 491 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2), 492 + .ops = &clk_rcg2_ops, 493 + }, 494 + }; 495 + 496 + static const struct freq_tbl ftbl_blsp1_qup_spi_apps_clk_src[] = { 497 + F(960000, P_XO, 10, 2, 5), 498 + F(4800000, P_XO, 5, 0, 0), 499 + F(9600000, P_XO, 2, 4, 5), 500 + F(16000000, P_GPLL0, 10, 1, 5), 501 + F(24000000, P_XO, 1, 0, 0), 502 + F(50000000, P_GPLL0, 16, 0, 0), 503 + { } 504 + }; 505 + 506 + static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = { 507 + .cmd_rcgr = 0x02024, 508 + .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src, 509 + .mnd_width = 8, 510 + .hid_width = 5, 511 + .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 512 + .clkr.hw.init = &(struct clk_init_data) { 513 + .name = "blsp1_qup1_spi_apps_clk_src", 514 + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 515 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2), 516 + .ops = &clk_rcg2_ops, 517 + }, 518 + }; 519 + 520 + static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = { 521 + .cmd_rcgr = 0x03014, 522 + .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src, 523 + .mnd_width = 8, 524 + .hid_width = 5, 525 + .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 526 + .clkr.hw.init = &(struct clk_init_data) { 527 + .name = "blsp1_qup2_spi_apps_clk_src", 528 + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 529 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2), 530 + .ops = &clk_rcg2_ops, 531 + }, 532 + }; 533 + 534 + static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = { 535 + .cmd_rcgr = 0x04014, 536 + .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src, 537 + .mnd_width = 8, 538 + .hid_width = 5, 539 + .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 540 + .clkr.hw.init = &(struct clk_init_data) { 541 + .name = "blsp1_qup3_spi_apps_clk_src", 542 + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 543 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2), 544 + .ops = &clk_rcg2_ops, 545 + }, 546 + }; 547 + 548 + static const struct freq_tbl ftbl_blsp1_uart_apps_clk_src[] = { 549 + F(3686400, P_GPLL0_DIV2, 1, 144, 15625), 550 + F(7372800, P_GPLL0_DIV2, 1, 288, 15625), 551 + F(14745600, P_GPLL0_DIV2, 1, 576, 15625), 552 + F(24000000, P_XO, 1, 0, 0), 553 + F(25000000, P_GPLL0, 16, 1, 2), 554 + F(40000000, P_GPLL0, 1, 1, 20), 555 + F(46400000, P_GPLL0, 1, 29, 500), 556 + F(48000000, P_GPLL0, 1, 3, 50), 557 + F(51200000, P_GPLL0, 1, 8, 125), 558 + F(56000000, P_GPLL0, 1, 7, 100), 559 + F(58982400, P_GPLL0, 1, 1152, 15625), 560 + F(60000000, P_GPLL0, 1, 3, 40), 561 + F(64000000, P_GPLL0, 10, 4, 5), 562 + { } 563 + }; 564 + 565 + static struct clk_rcg2 blsp1_uart1_apps_clk_src = { 566 + .cmd_rcgr = 0x02044, 567 + .freq_tbl = ftbl_blsp1_uart_apps_clk_src, 568 + .mnd_width = 16, 569 + .hid_width = 5, 570 + .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 571 + .clkr.hw.init = &(struct clk_init_data) { 572 + .name = "blsp1_uart1_apps_clk_src", 573 + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 574 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2), 575 + .ops = &clk_rcg2_ops, 576 + }, 577 + }; 578 + 579 + static struct clk_rcg2 blsp1_uart2_apps_clk_src = { 580 + .cmd_rcgr = 0x03034, 581 + .freq_tbl = ftbl_blsp1_uart_apps_clk_src, 582 + .mnd_width = 16, 583 + .hid_width = 5, 584 + .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 585 + .clkr.hw.init = &(struct clk_init_data) { 586 + .name = "blsp1_uart2_apps_clk_src", 587 + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 588 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2), 589 + .ops = &clk_rcg2_ops, 590 + }, 591 + }; 592 + 593 + static const struct freq_tbl ftbl_crypto_clk_src[] = { 594 + F(160000000, P_GPLL0, 5, 0, 0), 595 + { } 596 + }; 597 + 598 + static struct clk_rcg2 crypto_clk_src = { 599 + .cmd_rcgr = 0x16004, 600 + .freq_tbl = ftbl_crypto_clk_src, 601 + .hid_width = 5, 602 + .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 603 + .clkr.hw.init = &(struct clk_init_data) { 604 + .name = "crypto_clk_src", 605 + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 606 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2), 607 + .ops = &clk_rcg2_ops, 608 + }, 609 + }; 610 + 611 + static const struct freq_tbl ftbl_gmac0_tx_clk_src[] = { 612 + F(2500000, P_GEPHY_TX, 5, 0, 0), 613 + F(24000000, P_XO, 1, 0, 0), 614 + F(25000000, P_GEPHY_TX, 5, 0, 0), 615 + F(125000000, P_GEPHY_TX, 1, 0, 0), 616 + { } 617 + }; 618 + 619 + static struct clk_rcg2 gmac0_rx_clk_src = { 620 + .cmd_rcgr = 0x68020, 621 + .parent_map = gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0_map, 622 + .hid_width = 5, 623 + .freq_tbl = ftbl_gmac0_tx_clk_src, 624 + .clkr.hw.init = &(struct clk_init_data) { 625 + .name = "gmac0_rx_clk_src", 626 + .parent_data = gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0, 627 + .num_parents = ARRAY_SIZE(gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0), 628 + .ops = &clk_rcg2_ops, 629 + }, 630 + }; 631 + 632 + static struct clk_regmap_div gmac0_rx_div_clk_src = { 633 + .reg = 0x68420, 634 + .shift = 0, 635 + .width = 4, 636 + .clkr = { 637 + .hw.init = &(struct clk_init_data) { 638 + .name = "gmac0_rx_div_clk_src", 639 + .parent_hws = (const struct clk_hw *[]) { 640 + &gmac0_rx_clk_src.clkr.hw, 641 + }, 642 + .num_parents = 1, 643 + .ops = &clk_regmap_div_ops, 644 + .flags = CLK_SET_RATE_PARENT, 645 + }, 646 + }, 647 + }; 648 + 649 + static struct clk_rcg2 gmac0_tx_clk_src = { 650 + .cmd_rcgr = 0x68028, 651 + .parent_map = gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0_map, 652 + .hid_width = 5, 653 + .freq_tbl = ftbl_gmac0_tx_clk_src, 654 + .clkr.hw.init = &(struct clk_init_data) { 655 + .name = "gmac0_tx_clk_src", 656 + .parent_data = gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0, 657 + .num_parents = ARRAY_SIZE(gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0), 658 + .ops = &clk_rcg2_ops, 659 + }, 660 + }; 661 + 662 + static struct clk_regmap_div gmac0_tx_div_clk_src = { 663 + .reg = 0x68424, 664 + .shift = 0, 665 + .width = 4, 666 + .clkr = { 667 + .hw.init = &(struct clk_init_data) { 668 + .name = "gmac0_tx_div_clk_src", 669 + .parent_hws = (const struct clk_hw *[]) { 670 + &gmac0_tx_clk_src.clkr.hw, 671 + }, 672 + .num_parents = 1, 673 + .ops = &clk_regmap_div_ops, 674 + .flags = CLK_SET_RATE_PARENT, 675 + }, 676 + }, 677 + }; 678 + 679 + static const struct freq_tbl ftbl_gmac1_rx_clk_src[] = { 680 + F(2500000, P_UNIPHY_RX, 12.5, 0, 0), 681 + F(24000000, P_XO, 1, 0, 0), 682 + F(25000000, P_UNIPHY_RX, 2.5, 0, 0), 683 + F(125000000, P_UNIPHY_RX, 2.5, 0, 0), 684 + F(125000000, P_UNIPHY_RX, 1, 0, 0), 685 + F(312500000, P_UNIPHY_RX, 1, 0, 0), 686 + { } 687 + }; 688 + 689 + static struct clk_rcg2 gmac1_rx_clk_src = { 690 + .cmd_rcgr = 0x68030, 691 + .parent_map = gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0_map, 692 + .hid_width = 5, 693 + .freq_tbl = ftbl_gmac1_rx_clk_src, 694 + .clkr.hw.init = &(struct clk_init_data) { 695 + .name = "gmac1_rx_clk_src", 696 + .parent_data = gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0, 697 + .num_parents = ARRAY_SIZE(gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0), 698 + .ops = &clk_rcg2_ops, 699 + }, 700 + }; 701 + 702 + static struct clk_regmap_div gmac1_rx_div_clk_src = { 703 + .reg = 0x68430, 704 + .shift = 0, 705 + .width = 4, 706 + .clkr = { 707 + .hw.init = &(struct clk_init_data) { 708 + .name = "gmac1_rx_div_clk_src", 709 + .parent_hws = (const struct clk_hw *[]) { 710 + &gmac1_rx_clk_src.clkr.hw, 711 + }, 712 + .num_parents = 1, 713 + .ops = &clk_regmap_div_ops, 714 + .flags = CLK_SET_RATE_PARENT, 715 + }, 716 + }, 717 + }; 718 + 719 + static const struct freq_tbl ftbl_gmac1_tx_clk_src[] = { 720 + F(2500000, P_UNIPHY_TX, 12.5, 0, 0), 721 + F(24000000, P_XO, 1, 0, 0), 722 + F(25000000, P_UNIPHY_TX, 2.5, 0, 0), 723 + F(125000000, P_UNIPHY_TX, 2.5, 0, 0), 724 + F(125000000, P_UNIPHY_TX, 1, 0, 0), 725 + F(312500000, P_UNIPHY_TX, 1, 0, 0), 726 + { } 727 + }; 728 + 729 + static struct clk_rcg2 gmac1_tx_clk_src = { 730 + .cmd_rcgr = 0x68038, 731 + .parent_map = gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0_map, 732 + .hid_width = 5, 733 + .freq_tbl = ftbl_gmac1_tx_clk_src, 734 + .clkr.hw.init = &(struct clk_init_data) { 735 + .name = "gmac1_tx_clk_src", 736 + .parent_data = gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0, 737 + .num_parents = ARRAY_SIZE(gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0), 738 + .ops = &clk_rcg2_ops, 739 + }, 740 + }; 741 + 742 + static struct clk_regmap_div gmac1_tx_div_clk_src = { 743 + .reg = 0x68434, 744 + .shift = 0, 745 + .width = 4, 746 + .clkr = { 747 + .hw.init = &(struct clk_init_data) { 748 + .name = "gmac1_tx_div_clk_src", 749 + .parent_hws = (const struct clk_hw *[]) { 750 + &gmac1_tx_clk_src.clkr.hw, 751 + }, 752 + .num_parents = 1, 753 + .ops = &clk_regmap_div_ops, 754 + .flags = CLK_SET_RATE_PARENT, 755 + }, 756 + }, 757 + }; 758 + 759 + static const struct freq_tbl ftbl_gmac_clk_src[] = { 760 + F(240000000, P_GPLL4, 5, 0, 0), 761 + { } 762 + }; 763 + 764 + static struct clk_rcg2 gmac_clk_src = { 765 + .cmd_rcgr = 0x68080, 766 + .parent_map = gcc_xo_gpll0_gpll4_map, 767 + .hid_width = 5, 768 + .freq_tbl = ftbl_gmac_clk_src, 769 + .clkr.hw.init = &(struct clk_init_data) { 770 + .name = "gmac_clk_src", 771 + .parent_data = gcc_xo_gpll0_gpll4, 772 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4), 773 + .ops = &clk_rcg2_ops, 774 + }, 775 + }; 776 + 777 + static const struct freq_tbl ftbl_gp_clk_src[] = { 778 + F(200000000, P_GPLL0, 4, 0, 0), 779 + { } 780 + }; 781 + 782 + static struct clk_rcg2 gp1_clk_src = { 783 + .cmd_rcgr = 0x08004, 784 + .freq_tbl = ftbl_gp_clk_src, 785 + .mnd_width = 8, 786 + .hid_width = 5, 787 + .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk_map, 788 + .clkr.hw.init = &(struct clk_init_data) { 789 + .name = "gp1_clk_src", 790 + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk, 791 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk), 792 + .ops = &clk_rcg2_ops, 793 + }, 794 + }; 795 + 796 + static struct clk_rcg2 gp2_clk_src = { 797 + .cmd_rcgr = 0x09004, 798 + .freq_tbl = ftbl_gp_clk_src, 799 + .mnd_width = 8, 800 + .hid_width = 5, 801 + .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk_map, 802 + .clkr.hw.init = &(struct clk_init_data) { 803 + .name = "gp2_clk_src", 804 + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk, 805 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk), 806 + .ops = &clk_rcg2_ops, 807 + }, 808 + }; 809 + 810 + static struct clk_rcg2 gp3_clk_src = { 811 + .cmd_rcgr = 0x0a004, 812 + .freq_tbl = ftbl_gp_clk_src, 813 + .mnd_width = 8, 814 + .hid_width = 5, 815 + .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk_map, 816 + .clkr.hw.init = &(struct clk_init_data) { 817 + .name = "gp3_clk_src", 818 + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk, 819 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk), 820 + .ops = &clk_rcg2_ops, 821 + }, 822 + }; 823 + 824 + static const struct freq_tbl ftbl_lpass_axim_clk_src[] = { 825 + F(133333334, P_GPLL0, 6, 0, 0), 826 + { } 827 + }; 828 + 829 + static struct clk_rcg2 lpass_axim_clk_src = { 830 + .cmd_rcgr = 0x2e028, 831 + .freq_tbl = ftbl_lpass_axim_clk_src, 832 + .hid_width = 5, 833 + .parent_map = gcc_xo_gpll0_map, 834 + .clkr.hw.init = &(struct clk_init_data) { 835 + .name = "lpass_axim_clk_src", 836 + .parent_data = gcc_xo_gpll0, 837 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 838 + .ops = &clk_rcg2_ops, 839 + }, 840 + }; 841 + 842 + static const struct freq_tbl ftbl_lpass_sway_clk_src[] = { 843 + F(66666667, P_GPLL0, 12, 0, 0), 844 + { } 845 + }; 846 + 847 + static struct clk_rcg2 lpass_sway_clk_src = { 848 + .cmd_rcgr = 0x2e040, 849 + .freq_tbl = ftbl_lpass_sway_clk_src, 850 + .hid_width = 5, 851 + .parent_map = gcc_xo_gpll0_map, 852 + .clkr.hw.init = &(struct clk_init_data) { 853 + .name = "lpass_sway_clk_src", 854 + .parent_data = gcc_xo_gpll0, 855 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 856 + .ops = &clk_rcg2_ops, 857 + }, 858 + }; 859 + 860 + static const struct freq_tbl ftbl_pcie0_aux_clk_src[] = { 861 + F(2000000, P_XO, 12, 0, 0), 862 + }; 863 + 864 + static struct clk_rcg2 pcie0_aux_clk_src = { 865 + .cmd_rcgr = 0x75020, 866 + .freq_tbl = ftbl_pcie0_aux_clk_src, 867 + .mnd_width = 16, 868 + .hid_width = 5, 869 + .parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map, 870 + .clkr.hw.init = &(struct clk_init_data) { 871 + .name = "pcie0_aux_clk_src", 872 + .parent_data = gcc_xo_gpll0_core_pi_sleep_clk, 873 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_core_pi_sleep_clk), 874 + .ops = &clk_rcg2_ops, 875 + }, 876 + }; 877 + 878 + static const struct freq_tbl ftbl_pcie0_axi_clk_src[] = { 879 + F(240000000, P_GPLL4, 5, 0, 0), 880 + { } 881 + }; 882 + 883 + static struct clk_rcg2 pcie0_axi_clk_src = { 884 + .cmd_rcgr = 0x75050, 885 + .freq_tbl = ftbl_pcie0_axi_clk_src, 886 + .hid_width = 5, 887 + .parent_map = gcc_xo_gpll0_gpll4_map, 888 + .clkr.hw.init = &(struct clk_init_data) { 889 + .name = "pcie0_axi_clk_src", 890 + .parent_data = gcc_xo_gpll0_gpll4, 891 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4), 892 + .ops = &clk_rcg2_ops, 893 + }, 894 + }; 895 + 896 + static struct clk_rcg2 pcie1_aux_clk_src = { 897 + .cmd_rcgr = 0x76020, 898 + .freq_tbl = ftbl_pcie0_aux_clk_src, 899 + .mnd_width = 16, 900 + .hid_width = 5, 901 + .parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map, 902 + .clkr.hw.init = &(struct clk_init_data) { 903 + .name = "pcie1_aux_clk_src", 904 + .parent_data = gcc_xo_gpll0_core_pi_sleep_clk, 905 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_core_pi_sleep_clk), 906 + .ops = &clk_rcg2_ops, 907 + }, 908 + }; 909 + 910 + static struct clk_rcg2 pcie1_axi_clk_src = { 911 + .cmd_rcgr = 0x76050, 912 + .freq_tbl = ftbl_gp_clk_src, 913 + .hid_width = 5, 914 + .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 915 + .clkr.hw.init = &(struct clk_init_data) { 916 + .name = "pcie1_axi_clk_src", 917 + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 918 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2), 919 + .ops = &clk_rcg2_ops, 920 + }, 921 + }; 922 + 923 + static struct clk_regmap_mux pcie0_pipe_clk_src = { 924 + .reg = 0x7501c, 925 + .shift = 8, 926 + .width = 2, 927 + .parent_map = gcc_pcie20_phy0_pipe_clk_xo_map, 928 + .clkr = { 929 + .hw.init = &(struct clk_init_data) { 930 + .name = "pcie0_pipe_clk_src", 931 + .parent_data = gcc_pcie20_phy0_pipe_clk_xo, 932 + .num_parents = ARRAY_SIZE(gcc_pcie20_phy0_pipe_clk_xo), 933 + .ops = &clk_regmap_mux_closest_ops, 934 + .flags = CLK_SET_RATE_PARENT, 935 + }, 936 + }, 937 + }; 938 + 939 + static struct clk_regmap_mux pcie1_pipe_clk_src = { 940 + .reg = 0x7601c, 941 + .shift = 8, 942 + .width = 2, 943 + .parent_map = gcc_pcie20_phy1_pipe_clk_xo_map, .clkr = { 944 + .hw.init = &(struct clk_init_data) { 945 + .name = "pcie1_pipe_clk_src", 946 + .parent_data = gcc_pcie20_phy1_pipe_clk_xo, 947 + .num_parents = ARRAY_SIZE(gcc_pcie20_phy1_pipe_clk_xo), 948 + .ops = &clk_regmap_mux_closest_ops, 949 + .flags = CLK_SET_RATE_PARENT, 950 + }, 951 + }, 952 + }; 953 + 954 + static const struct freq_tbl ftbl_pcnoc_bfdcd_clk_src[] = { 955 + F(100000000, P_GPLL0, 8, 0, 0), 956 + { } 957 + }; 958 + 959 + static struct clk_rcg2 pcnoc_bfdcd_clk_src = { 960 + .cmd_rcgr = 0x27000, 961 + .freq_tbl = ftbl_pcnoc_bfdcd_clk_src, 962 + .hid_width = 5, 963 + .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 964 + .clkr.hw.init = &(struct clk_init_data) { 965 + .name = "pcnoc_bfdcd_clk_src", 966 + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 967 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2), 968 + .ops = &clk_rcg2_ops, 969 + }, 970 + }; 971 + 972 + static struct clk_fixed_factor pcnoc_clk_src = { 973 + .mult = 1, 974 + .div = 1, 975 + .hw.init = &(struct clk_init_data) { 976 + .name = "pcnoc_clk_src", 977 + .parent_hws = (const struct clk_hw *[]) { 978 + &pcnoc_bfdcd_clk_src.clkr.hw, 979 + }, 980 + .num_parents = 1, 981 + .ops = &clk_fixed_factor_ops, 982 + .flags = CLK_SET_RATE_PARENT, 983 + }, 984 + }; 985 + 986 + static const struct freq_tbl ftbl_qdss_at_clk_src[] = { 987 + F(240000000, P_GPLL4, 5, 0, 0), 988 + { } 989 + }; 990 + 991 + static struct clk_rcg2 qdss_at_clk_src = { 992 + .cmd_rcgr = 0x2900c, 993 + .freq_tbl = ftbl_qdss_at_clk_src, 994 + .hid_width = 5, 995 + .parent_map = gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map1, 996 + .clkr.hw.init = &(struct clk_init_data) { 997 + .name = "qdss_at_clk_src", 998 + .parent_data = gcc_xo_gpll4_gpll0_gpll0_out_main_div2, 999 + .num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_out_main_div2), 1000 + .ops = &clk_rcg2_ops, 1001 + }, 1002 + }; 1003 + 1004 + static const struct freq_tbl ftbl_qdss_stm_clk_src[] = { 1005 + F(200000000, P_GPLL0, 4, 0, 0), 1006 + { } 1007 + }; 1008 + 1009 + static struct clk_rcg2 qdss_stm_clk_src = { 1010 + .cmd_rcgr = 0x2902c, 1011 + .freq_tbl = ftbl_qdss_stm_clk_src, 1012 + .hid_width = 5, 1013 + .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1014 + .clkr.hw.init = &(struct clk_init_data) { 1015 + .name = "qdss_stm_clk_src", 1016 + .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1017 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2), 1018 + .ops = &clk_rcg2_ops, 1019 + }, 1020 + }; 1021 + 1022 + static const struct freq_tbl ftbl_qdss_traceclkin_clk_src[] = { 1023 + F(266666667, P_GPLL0, 3, 0, 0), 1024 + { } 1025 + }; 1026 + 1027 + static struct clk_rcg2 qdss_traceclkin_clk_src = { 1028 + .cmd_rcgr = 0x29048, 1029 + .freq_tbl = ftbl_qdss_traceclkin_clk_src, 1030 + .hid_width = 5, 1031 + .parent_map = gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map1, 1032 + .clkr.hw.init = &(struct clk_init_data) { 1033 + .name = "qdss_traceclkin_clk_src", 1034 + .parent_data = gcc_xo_gpll4_gpll0_gpll0_out_main_div2, 1035 + .num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_out_main_div2), 1036 + .ops = &clk_rcg2_ops, 1037 + }, 1038 + }; 1039 + 1040 + static const struct freq_tbl ftbl_qdss_tsctr_clk_src[] = { 1041 + F(600000000, P_GPLL4, 2, 0, 0), 1042 + { } 1043 + }; 1044 + 1045 + static struct clk_rcg2 qdss_tsctr_clk_src = { 1046 + .cmd_rcgr = 0x29064, 1047 + .freq_tbl = ftbl_qdss_tsctr_clk_src, 1048 + .hid_width = 5, 1049 + .parent_map = gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map1, 1050 + .clkr.hw.init = &(struct clk_init_data) { 1051 + .name = "qdss_tsctr_clk_src", 1052 + .parent_data = gcc_xo_gpll4_gpll0_gpll0_out_main_div2, 1053 + .num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_out_main_div2), 1054 + .ops = &clk_rcg2_ops, 1055 + }, 1056 + }; 1057 + 1058 + static struct clk_fixed_factor qdss_tsctr_div2_clk_src = { 1059 + .mult = 1, 1060 + .div = 2, 1061 + .hw.init = &(struct clk_init_data) { 1062 + .name = "qdss_tsctr_div2_clk_src", 1063 + .parent_hws = (const struct clk_hw *[]) { 1064 + &qdss_tsctr_clk_src.clkr.hw, 1065 + }, 1066 + .num_parents = 1, 1067 + .flags = CLK_SET_RATE_PARENT, 1068 + .ops = &clk_fixed_factor_ops, 1069 + }, 1070 + }; 1071 + 1072 + static struct clk_fixed_factor qdss_dap_sync_clk_src = { 1073 + .mult = 1, 1074 + .div = 4, 1075 + .hw.init = &(struct clk_init_data) { 1076 + .name = "qdss_dap_sync_clk_src", 1077 + .parent_hws = (const struct clk_hw *[]) { 1078 + &qdss_tsctr_clk_src.clkr.hw, 1079 + }, 1080 + .num_parents = 1, 1081 + .ops = &clk_fixed_factor_ops, 1082 + }, 1083 + }; 1084 + 1085 + static struct clk_fixed_factor eud_at_clk_src = { 1086 + .mult = 1, 1087 + .div = 6, 1088 + .hw.init = &(struct clk_init_data) { 1089 + .name = "eud_at_clk_src", 1090 + .parent_hws = (const struct clk_hw *[]) { 1091 + &qdss_at_clk_src.clkr.hw, 1092 + }, 1093 + .num_parents = 1, 1094 + .ops = &clk_fixed_factor_ops, 1095 + .flags = CLK_SET_RATE_PARENT, 1096 + }, 1097 + }; 1098 + 1099 + static const struct freq_tbl ftbl_qpic_io_macro_clk_src[] = { 1100 + F(24000000, P_XO, 1, 0, 0), 1101 + F(100000000, P_GPLL0, 8, 0, 0), 1102 + F(200000000, P_GPLL0, 4, 0, 0), 1103 + F(320000000, P_GPLL0, 2.5, 0, 0), 1104 + }; 1105 + 1106 + static struct clk_rcg2 qpic_io_macro_clk_src = { 1107 + .cmd_rcgr = 0x57010, 1108 + .freq_tbl = ftbl_qpic_io_macro_clk_src, 1109 + .hid_width = 5, 1110 + .parent_map = gcc_xo_gpll0_gpll2_map, 1111 + .clkr.hw.init = &(struct clk_init_data) { 1112 + .name = "qpic_io_macro_clk_src", 1113 + .parent_data = gcc_xo_gpll0_gpll2, 1114 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2), 1115 + .ops = &clk_rcg2_ops, 1116 + }, 1117 + }; 1118 + 1119 + static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = { 1120 + F(143713, P_XO, 1, 1, 167), 1121 + F(400000, P_XO, 1, 1, 60), 1122 + F(24000000, P_XO, 1, 0, 0), 1123 + F(48000000, P_GPLL2, 12, 1, 2), 1124 + F(96000000, P_GPLL2, 12, 0, 0), 1125 + F(177777778, P_GPLL0, 1, 2, 9), 1126 + F(192000000, P_GPLL2, 6, 0, 0), 1127 + F(200000000, P_GPLL0, 4, 0, 0), 1128 + { } 1129 + }; 1130 + 1131 + static struct clk_rcg2 sdcc1_apps_clk_src = { 1132 + .cmd_rcgr = 0x42004, 1133 + .freq_tbl = ftbl_sdcc1_apps_clk_src, 1134 + .mnd_width = 8, 1135 + .hid_width = 5, 1136 + .parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map, 1137 + .clkr.hw.init = &(struct clk_init_data) { 1138 + .name = "sdcc1_apps_clk_src", 1139 + .parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2, 1140 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll0_out_main_div2), 1141 + .ops = &clk_rcg2_floor_ops, 1142 + }, 1143 + }; 1144 + 1145 + static const struct freq_tbl ftbl_system_noc_bfdcd_clk_src[] = { 1146 + F(266666667, P_GPLL0, 3, 0, 0), 1147 + { } 1148 + }; 1149 + 1150 + static struct clk_rcg2 system_noc_bfdcd_clk_src = { 1151 + .cmd_rcgr = 0x26004, 1152 + .freq_tbl = ftbl_system_noc_bfdcd_clk_src, 1153 + .hid_width = 5, 1154 + .parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map, 1155 + .clkr.hw.init = &(struct clk_init_data) { 1156 + .name = "system_noc_bfdcd_clk_src", 1157 + .parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2, 1158 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll0_out_main_div2), 1159 + .ops = &clk_rcg2_ops, 1160 + }, 1161 + }; 1162 + 1163 + static struct clk_fixed_factor system_noc_clk_src = { 1164 + .mult = 1, 1165 + .div = 1, 1166 + .hw.init = &(struct clk_init_data) { 1167 + .name = "system_noc_clk_src", 1168 + .parent_hws = (const struct clk_hw *[]) { 1169 + &system_noc_bfdcd_clk_src.clkr.hw, 1170 + }, 1171 + .num_parents = 1, 1172 + .ops = &clk_fixed_factor_ops, 1173 + .flags = CLK_SET_RATE_PARENT, 1174 + }, 1175 + }; 1176 + 1177 + static const struct freq_tbl ftbl_apss_axi_clk_src[] = { 1178 + F(400000000, P_GPLL0, 2, 0, 0), 1179 + { } 1180 + }; 1181 + 1182 + static struct clk_rcg2 ubi0_axi_clk_src = { 1183 + .cmd_rcgr = 0x68088, 1184 + .freq_tbl = ftbl_apss_axi_clk_src, 1185 + .hid_width = 5, 1186 + .parent_map = gcc_xo_gpll0_gpll2_map, 1187 + .clkr.hw.init = &(struct clk_init_data) { 1188 + .name = "ubi0_axi_clk_src", 1189 + .parent_data = gcc_xo_gpll0_gpll2, 1190 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2), 1191 + .ops = &clk_rcg2_ops, 1192 + .flags = CLK_SET_RATE_PARENT, 1193 + }, 1194 + }; 1195 + 1196 + static const struct freq_tbl ftbl_ubi0_core_clk_src[] = { 1197 + F(850000000, P_UBI32_PLL, 1, 0, 0), 1198 + F(1000000000, P_UBI32_PLL, 1, 0, 0), 1199 + }; 1200 + 1201 + static struct clk_rcg2 ubi0_core_clk_src = { 1202 + .cmd_rcgr = 0x68100, 1203 + .freq_tbl = ftbl_ubi0_core_clk_src, 1204 + .hid_width = 5, 1205 + .parent_map = gcc_xo_ubi32_gpll0_map, 1206 + .clkr.hw.init = &(struct clk_init_data) { 1207 + .name = "ubi0_core_clk_src", 1208 + .parent_data = gcc_xo_ubi32_gpll0, 1209 + .num_parents = ARRAY_SIZE(gcc_xo_ubi32_gpll0), 1210 + .ops = &clk_rcg2_ops, 1211 + .flags = CLK_SET_RATE_PARENT, 1212 + }, 1213 + }; 1214 + 1215 + static struct clk_rcg2 usb0_aux_clk_src = { 1216 + .cmd_rcgr = 0x3e05c, 1217 + .freq_tbl = ftbl_pcie0_aux_clk_src, 1218 + .mnd_width = 16, 1219 + .hid_width = 5, 1220 + .parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map, 1221 + .clkr.hw.init = &(struct clk_init_data) { 1222 + .name = "usb0_aux_clk_src", 1223 + .parent_data = gcc_xo_gpll0_core_pi_sleep_clk, 1224 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_core_pi_sleep_clk), 1225 + .ops = &clk_rcg2_ops, 1226 + }, 1227 + }; 1228 + 1229 + static const struct freq_tbl ftbl_usb0_lfps_clk_src[] = { 1230 + F(25000000, P_GPLL0, 16, 1, 2), 1231 + { } 1232 + }; 1233 + 1234 + static struct clk_rcg2 usb0_lfps_clk_src = { 1235 + .cmd_rcgr = 0x3e090, 1236 + .freq_tbl = ftbl_usb0_lfps_clk_src, 1237 + .mnd_width = 8, 1238 + .hid_width = 5, 1239 + .parent_map = gcc_xo_gpll0_map, 1240 + .clkr.hw.init = &(struct clk_init_data) { 1241 + .name = "usb0_lfps_clk_src", 1242 + .parent_data = gcc_xo_gpll0, 1243 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 1244 + .ops = &clk_rcg2_ops, 1245 + }, 1246 + }; 1247 + 1248 + static struct clk_rcg2 usb0_master_clk_src = { 1249 + .cmd_rcgr = 0x3e00c, 1250 + .freq_tbl = ftbl_gp_clk_src, 1251 + .mnd_width = 8, 1252 + .hid_width = 5, 1253 + .parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map, 1254 + .clkr.hw.init = &(struct clk_init_data) { 1255 + .name = "usb0_master_clk_src", 1256 + .parent_data = gcc_xo_gpll0_out_main_div2_gpll0, 1257 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_out_main_div2_gpll0), 1258 + .ops = &clk_rcg2_ops, 1259 + }, 1260 + }; 1261 + 1262 + static const struct freq_tbl ftbl_usb0_mock_utmi_clk_src[] = { 1263 + F(60000000, P_GPLL4, 10, 1, 2), 1264 + { } 1265 + }; 1266 + 1267 + static struct clk_rcg2 usb0_mock_utmi_clk_src = { 1268 + .cmd_rcgr = 0x3e020, 1269 + .freq_tbl = ftbl_usb0_mock_utmi_clk_src, 1270 + .mnd_width = 8, 1271 + .hid_width = 5, 1272 + .parent_map = gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map2, 1273 + .clkr.hw.init = &(struct clk_init_data) { 1274 + .name = "usb0_mock_utmi_clk_src", 1275 + .parent_data = gcc_xo_gpll4_gpll0_gpll0_out_main_div2, 1276 + .num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_out_main_div2), 1277 + .ops = &clk_rcg2_ops, 1278 + }, 1279 + }; 1280 + 1281 + static struct clk_regmap_mux usb0_pipe_clk_src = { 1282 + .reg = 0x3e048, 1283 + .shift = 8, 1284 + .width = 2, 1285 + .parent_map = gcc_usb3phy_0_cc_pipe_clk_xo_map, 1286 + .clkr = { 1287 + .hw.init = &(struct clk_init_data) { 1288 + .name = "usb0_pipe_clk_src", 1289 + .parent_data = gcc_usb3phy_0_cc_pipe_clk_xo, 1290 + .num_parents = ARRAY_SIZE(gcc_usb3phy_0_cc_pipe_clk_xo), 1291 + .ops = &clk_regmap_mux_closest_ops, 1292 + .flags = CLK_SET_RATE_PARENT, 1293 + }, 1294 + }, 1295 + }; 1296 + 1297 + static const struct freq_tbl ftbl_q6_axi_clk_src[] = { 1298 + F(400000000, P_GPLL0, 2, 0, 0), 1299 + { } 1300 + }; 1301 + 1302 + static struct clk_rcg2 q6_axi_clk_src = { 1303 + .cmd_rcgr = 0x59120, 1304 + .freq_tbl = ftbl_q6_axi_clk_src, 1305 + .hid_width = 5, 1306 + .parent_map = gcc_xo_gpll0_gpll2_gpll4_map, 1307 + .clkr.hw.init = &(struct clk_init_data) { 1308 + .name = "q6_axi_clk_src", 1309 + .parent_data = gcc_xo_gpll0_gpll2_gpll4, 1310 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll4), 1311 + .ops = &clk_rcg2_ops, 1312 + }, 1313 + }; 1314 + 1315 + static const struct freq_tbl ftbl_wcss_ahb_clk_src[] = { 1316 + F(133333333, P_GPLL0, 6, 0, 0), 1317 + { } 1318 + }; 1319 + 1320 + static struct clk_rcg2 wcss_ahb_clk_src = { 1321 + .cmd_rcgr = 0x59020, 1322 + .freq_tbl = ftbl_wcss_ahb_clk_src, 1323 + .hid_width = 5, 1324 + .parent_map = gcc_xo_gpll0_map, 1325 + .clkr.hw.init = &(struct clk_init_data) { 1326 + .name = "wcss_ahb_clk_src", 1327 + .parent_data = gcc_xo_gpll0, 1328 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 1329 + .ops = &clk_rcg2_ops, 1330 + }, 1331 + }; 1332 + 1333 + static struct clk_branch gcc_sleep_clk_src = { 1334 + .halt_reg = 0x30000, 1335 + .clkr = { 1336 + .enable_reg = 0x30000, 1337 + .enable_mask = BIT(1), 1338 + .hw.init = &(struct clk_init_data) { 1339 + .name = "gcc_sleep_clk_src", 1340 + .parent_data = gcc_sleep_clk_data, 1341 + .num_parents = ARRAY_SIZE(gcc_sleep_clk_data), 1342 + .ops = &clk_branch2_ops, 1343 + }, 1344 + }, 1345 + }; 1346 + 1347 + static struct clk_branch gcc_xo_clk_src = { 1348 + .halt_reg = 0x30018, 1349 + .clkr = { 1350 + .enable_reg = 0x30018, 1351 + .enable_mask = BIT(1), 1352 + .hw.init = &(struct clk_init_data) { 1353 + .name = "gcc_xo_clk_src", 1354 + .parent_data = gcc_xo_data, 1355 + .num_parents = ARRAY_SIZE(gcc_xo_data), 1356 + .flags = CLK_SET_RATE_PARENT, 1357 + .ops = &clk_branch2_ops, 1358 + }, 1359 + }, 1360 + }; 1361 + 1362 + static struct clk_branch gcc_xo_clk = { 1363 + .halt_reg = 0x30030, 1364 + .clkr = { 1365 + .enable_reg = 0x30030, 1366 + .enable_mask = BIT(0), 1367 + .hw.init = &(struct clk_init_data) { 1368 + .name = "gcc_xo_clk", 1369 + .parent_hws = (const struct clk_hw *[]) { 1370 + &gcc_xo_clk_src.clkr.hw, 1371 + }, 1372 + .num_parents = 1, 1373 + .flags = CLK_SET_RATE_PARENT, 1374 + .ops = &clk_branch2_ops, 1375 + }, 1376 + }, 1377 + }; 1378 + 1379 + static struct clk_branch gcc_adss_pwm_clk = { 1380 + .halt_reg = 0x1f020, 1381 + .clkr = { 1382 + .enable_reg = 0x1f020, 1383 + .enable_mask = BIT(0), 1384 + .hw.init = &(struct clk_init_data) { 1385 + .name = "gcc_adss_pwm_clk", 1386 + .parent_hws = (const struct clk_hw *[]) { 1387 + &adss_pwm_clk_src.clkr.hw, 1388 + }, 1389 + .num_parents = 1, 1390 + .flags = CLK_SET_RATE_PARENT, 1391 + .ops = &clk_branch2_ops, 1392 + }, 1393 + }, 1394 + }; 1395 + 1396 + static struct clk_branch gcc_blsp1_ahb_clk = { 1397 + .halt_reg = 0x01008, 1398 + .halt_check = BRANCH_HALT_VOTED, 1399 + .clkr = { 1400 + .enable_reg = 0x0b004, 1401 + .enable_mask = BIT(10), 1402 + .hw.init = &(struct clk_init_data) { 1403 + .name = "gcc_blsp1_ahb_clk", 1404 + .parent_hws = (const struct clk_hw *[]) { 1405 + &pcnoc_clk_src.hw, 1406 + }, 1407 + .num_parents = 1, 1408 + .flags = CLK_SET_RATE_PARENT, 1409 + .ops = &clk_branch2_ops, 1410 + }, 1411 + }, 1412 + }; 1413 + 1414 + static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = { 1415 + .halt_reg = 0x02008, 1416 + .clkr = { 1417 + .enable_reg = 0x02008, 1418 + .enable_mask = BIT(0), 1419 + .hw.init = &(struct clk_init_data) { 1420 + .name = "gcc_blsp1_qup1_i2c_apps_clk", 1421 + .parent_hws = (const struct clk_hw *[]) { 1422 + &blsp1_qup1_i2c_apps_clk_src.clkr.hw, 1423 + }, 1424 + .num_parents = 1, 1425 + .flags = CLK_SET_RATE_PARENT, 1426 + .ops = &clk_branch2_ops, 1427 + }, 1428 + }, 1429 + }; 1430 + 1431 + static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = { 1432 + .halt_reg = 0x02004, 1433 + .clkr = { 1434 + .enable_reg = 0x02004, 1435 + .enable_mask = BIT(0), 1436 + .hw.init = &(struct clk_init_data) { 1437 + .name = "gcc_blsp1_qup1_spi_apps_clk", 1438 + .parent_hws = (const struct clk_hw *[]) { 1439 + &blsp1_qup1_spi_apps_clk_src.clkr.hw, 1440 + }, 1441 + .num_parents = 1, 1442 + .flags = CLK_SET_RATE_PARENT, 1443 + .ops = &clk_branch2_ops, 1444 + }, 1445 + }, 1446 + }; 1447 + 1448 + static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = { 1449 + .halt_reg = 0x03010, 1450 + .clkr = { 1451 + .enable_reg = 0x03010, 1452 + .enable_mask = BIT(0), 1453 + .hw.init = &(struct clk_init_data) { 1454 + .name = "gcc_blsp1_qup2_i2c_apps_clk", 1455 + .parent_hws = (const struct clk_hw *[]) { 1456 + &blsp1_qup2_i2c_apps_clk_src.clkr.hw, 1457 + }, 1458 + .num_parents = 1, 1459 + .flags = CLK_SET_RATE_PARENT, 1460 + .ops = &clk_branch2_ops, 1461 + }, 1462 + }, 1463 + }; 1464 + 1465 + static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = { 1466 + .halt_reg = 0x0300c, 1467 + .clkr = { 1468 + .enable_reg = 0x0300c, 1469 + .enable_mask = BIT(0), 1470 + .hw.init = &(struct clk_init_data) { 1471 + .name = "gcc_blsp1_qup2_spi_apps_clk", 1472 + .parent_hws = (const struct clk_hw *[]) { 1473 + &blsp1_qup2_spi_apps_clk_src.clkr.hw, 1474 + }, 1475 + .num_parents = 1, 1476 + .flags = CLK_SET_RATE_PARENT, 1477 + .ops = &clk_branch2_ops, 1478 + }, 1479 + }, 1480 + }; 1481 + 1482 + static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = { 1483 + .halt_reg = 0x04010, 1484 + .clkr = { 1485 + .enable_reg = 0x04010, 1486 + .enable_mask = BIT(0), 1487 + .hw.init = &(struct clk_init_data) { 1488 + .name = "gcc_blsp1_qup3_i2c_apps_clk", 1489 + .parent_hws = (const struct clk_hw *[]) { 1490 + &blsp1_qup3_i2c_apps_clk_src.clkr.hw, 1491 + }, 1492 + .num_parents = 1, 1493 + .flags = CLK_SET_RATE_PARENT, 1494 + .ops = &clk_branch2_ops, 1495 + }, 1496 + }, 1497 + }; 1498 + 1499 + static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = { 1500 + .halt_reg = 0x0400c, 1501 + .clkr = { 1502 + .enable_reg = 0x0400c, 1503 + .enable_mask = BIT(0), 1504 + .hw.init = &(struct clk_init_data) { 1505 + .name = "gcc_blsp1_qup3_spi_apps_clk", 1506 + .parent_hws = (const struct clk_hw *[]) { 1507 + &blsp1_qup3_spi_apps_clk_src.clkr.hw, 1508 + }, 1509 + .num_parents = 1, 1510 + .flags = CLK_SET_RATE_PARENT, 1511 + .ops = &clk_branch2_ops, 1512 + }, 1513 + }, 1514 + }; 1515 + 1516 + static struct clk_branch gcc_blsp1_uart1_apps_clk = { 1517 + .halt_reg = 0x0203c, 1518 + .clkr = { 1519 + .enable_reg = 0x0203c, 1520 + .enable_mask = BIT(0), 1521 + .hw.init = &(struct clk_init_data) { 1522 + .name = "gcc_blsp1_uart1_apps_clk", 1523 + .parent_hws = (const struct clk_hw *[]) { 1524 + &blsp1_uart1_apps_clk_src.clkr.hw, 1525 + }, 1526 + .num_parents = 1, 1527 + .flags = CLK_SET_RATE_PARENT, 1528 + .ops = &clk_branch2_ops, 1529 + }, 1530 + }, 1531 + }; 1532 + 1533 + static struct clk_branch gcc_blsp1_uart2_apps_clk = { 1534 + .halt_reg = 0x0302c, 1535 + .clkr = { 1536 + .enable_reg = 0x0302c, 1537 + .enable_mask = BIT(0), 1538 + .hw.init = &(struct clk_init_data) { 1539 + .name = "gcc_blsp1_uart2_apps_clk", 1540 + .parent_hws = (const struct clk_hw *[]) { 1541 + &blsp1_uart2_apps_clk_src.clkr.hw, 1542 + }, 1543 + .num_parents = 1, 1544 + .flags = CLK_SET_RATE_PARENT, 1545 + .ops = &clk_branch2_ops, 1546 + }, 1547 + }, 1548 + }; 1549 + 1550 + static struct clk_branch gcc_btss_lpo_clk = { 1551 + .halt_reg = 0x1c004, 1552 + .clkr = { 1553 + .enable_reg = 0x1c004, 1554 + .enable_mask = BIT(0), 1555 + .hw.init = &(struct clk_init_data) { 1556 + .name = "gcc_btss_lpo_clk", 1557 + .ops = &clk_branch2_ops, 1558 + }, 1559 + }, 1560 + }; 1561 + 1562 + static struct clk_branch gcc_cmn_blk_ahb_clk = { 1563 + .halt_reg = 0x56308, 1564 + .clkr = { 1565 + .enable_reg = 0x56308, 1566 + .enable_mask = BIT(0), 1567 + .hw.init = &(struct clk_init_data) { 1568 + .name = "gcc_cmn_blk_ahb_clk", 1569 + .parent_hws = (const struct clk_hw *[]) { 1570 + &pcnoc_clk_src.hw, 1571 + }, 1572 + .num_parents = 1, 1573 + .flags = CLK_SET_RATE_PARENT, 1574 + .ops = &clk_branch2_ops, 1575 + }, 1576 + }, 1577 + }; 1578 + 1579 + static struct clk_branch gcc_cmn_blk_sys_clk = { 1580 + .halt_reg = 0x5630c, 1581 + .clkr = { 1582 + .enable_reg = 0x5630c, 1583 + .enable_mask = BIT(0), 1584 + .hw.init = &(struct clk_init_data) { 1585 + .name = "gcc_cmn_blk_sys_clk", 1586 + .parent_hws = (const struct clk_hw *[]) { 1587 + &gcc_xo_clk_src.clkr.hw, 1588 + }, 1589 + .num_parents = 1, 1590 + .flags = CLK_SET_RATE_PARENT, 1591 + .ops = &clk_branch2_ops, 1592 + }, 1593 + }, 1594 + }; 1595 + 1596 + static struct clk_branch gcc_crypto_ahb_clk = { 1597 + .halt_reg = 0x16024, 1598 + .halt_check = BRANCH_HALT_VOTED, 1599 + .clkr = { 1600 + .enable_reg = 0x0b004, 1601 + .enable_mask = BIT(0), 1602 + .hw.init = &(struct clk_init_data) { 1603 + .name = "gcc_crypto_ahb_clk", 1604 + .parent_hws = (const struct clk_hw *[]) { 1605 + &pcnoc_clk_src.hw, 1606 + }, 1607 + .num_parents = 1, 1608 + .flags = CLK_SET_RATE_PARENT, 1609 + .ops = &clk_branch2_ops, 1610 + }, 1611 + }, 1612 + }; 1613 + 1614 + static struct clk_branch gcc_crypto_axi_clk = { 1615 + .halt_reg = 0x16020, 1616 + .halt_check = BRANCH_HALT_VOTED, 1617 + .clkr = { 1618 + .enable_reg = 0x0b004, 1619 + .enable_mask = BIT(1), 1620 + .hw.init = &(struct clk_init_data) { 1621 + .name = "gcc_crypto_axi_clk", 1622 + .parent_hws = (const struct clk_hw *[]) { 1623 + &pcnoc_clk_src.hw, 1624 + }, 1625 + .num_parents = 1, 1626 + .flags = CLK_SET_RATE_PARENT, 1627 + .ops = &clk_branch2_ops, 1628 + }, 1629 + }, 1630 + }; 1631 + 1632 + static struct clk_branch gcc_crypto_clk = { 1633 + .halt_reg = 0x1601c, 1634 + .halt_check = BRANCH_HALT_VOTED, 1635 + .clkr = { 1636 + .enable_reg = 0x0b004, 1637 + .enable_mask = BIT(2), 1638 + .hw.init = &(struct clk_init_data) { 1639 + .name = "gcc_crypto_clk", 1640 + .parent_hws = (const struct clk_hw *[]) { 1641 + &crypto_clk_src.clkr.hw, 1642 + }, 1643 + .num_parents = 1, 1644 + .flags = CLK_SET_RATE_PARENT, 1645 + .ops = &clk_branch2_ops, 1646 + }, 1647 + }, 1648 + }; 1649 + 1650 + static struct clk_branch gcc_dcc_clk = { 1651 + .halt_reg = 0x77004, 1652 + .clkr = { 1653 + .enable_reg = 0x77004, 1654 + .enable_mask = BIT(0), 1655 + .hw.init = &(struct clk_init_data) { 1656 + .name = "gcc_dcc_clk", 1657 + .parent_hws = (const struct clk_hw *[]) { 1658 + &pcnoc_clk_src.hw, 1659 + }, 1660 + .num_parents = 1, 1661 + .flags = CLK_SET_RATE_PARENT, 1662 + .ops = &clk_branch2_ops, 1663 + }, 1664 + }, 1665 + }; 1666 + 1667 + static struct clk_branch gcc_gephy_rx_clk = { 1668 + .halt_reg = 0x56010, 1669 + .halt_check = BRANCH_HALT_DELAY, 1670 + .clkr = { 1671 + .enable_reg = 0x56010, 1672 + .enable_mask = BIT(0), 1673 + .hw.init = &(struct clk_init_data) { 1674 + .name = "gcc_gephy_rx_clk", 1675 + .parent_hws = (const struct clk_hw *[]) { 1676 + &gmac0_rx_div_clk_src.clkr.hw, 1677 + }, 1678 + .num_parents = 1, 1679 + .ops = &clk_branch2_ops, 1680 + .flags = CLK_SET_RATE_PARENT, 1681 + }, 1682 + }, 1683 + }; 1684 + 1685 + static struct clk_branch gcc_gephy_tx_clk = { 1686 + .halt_reg = 0x56014, 1687 + .halt_check = BRANCH_HALT_DELAY, 1688 + .clkr = { 1689 + .enable_reg = 0x56014, 1690 + .enable_mask = BIT(0), 1691 + .hw.init = &(struct clk_init_data) { 1692 + .name = "gcc_gephy_tx_clk", 1693 + .parent_hws = (const struct clk_hw *[]) { 1694 + &gmac0_tx_div_clk_src.clkr.hw, 1695 + }, 1696 + .num_parents = 1, 1697 + .ops = &clk_branch2_ops, 1698 + .flags = CLK_SET_RATE_PARENT, 1699 + }, 1700 + }, 1701 + }; 1702 + 1703 + static struct clk_branch gcc_gmac0_cfg_clk = { 1704 + .halt_reg = 0x68304, 1705 + .clkr = { 1706 + .enable_reg = 0x68304, 1707 + .enable_mask = BIT(0), 1708 + .hw.init = &(struct clk_init_data) { 1709 + .name = "gcc_gmac0_cfg_clk", 1710 + .parent_hws = (const struct clk_hw *[]) { 1711 + &gmac_clk_src.clkr.hw, 1712 + }, 1713 + .num_parents = 1, 1714 + .flags = CLK_SET_RATE_PARENT, 1715 + .ops = &clk_branch2_ops, 1716 + }, 1717 + }, 1718 + }; 1719 + 1720 + static struct clk_branch gcc_gmac0_ptp_clk = { 1721 + .halt_reg = 0x68300, 1722 + .clkr = { 1723 + .enable_reg = 0x68300, 1724 + .enable_mask = BIT(0), 1725 + .hw.init = &(struct clk_init_data) { 1726 + .name = "gcc_gmac0_ptp_clk", 1727 + .parent_hws = (const struct clk_hw *[]) { 1728 + &gmac_clk_src.clkr.hw, 1729 + }, 1730 + .num_parents = 1, 1731 + .flags = CLK_SET_RATE_PARENT, 1732 + .ops = &clk_branch2_ops, 1733 + }, 1734 + }, 1735 + }; 1736 + 1737 + static struct clk_branch gcc_gmac0_rx_clk = { 1738 + .halt_reg = 0x68240, 1739 + .clkr = { 1740 + .enable_reg = 0x68240, 1741 + .enable_mask = BIT(0), 1742 + .hw.init = &(struct clk_init_data) { 1743 + .name = "gcc_gmac0_rx_clk", 1744 + .parent_hws = (const struct clk_hw *[]) { 1745 + &gmac0_rx_div_clk_src.clkr.hw, 1746 + }, 1747 + .num_parents = 1, 1748 + .ops = &clk_branch2_ops, 1749 + .flags = CLK_SET_RATE_PARENT, 1750 + }, 1751 + }, 1752 + }; 1753 + 1754 + static struct clk_branch gcc_gmac0_sys_clk = { 1755 + .halt_reg = 0x68190, 1756 + .halt_check = BRANCH_HALT_DELAY, 1757 + .halt_bit = 31, 1758 + .clkr = { 1759 + .enable_reg = 0x683190, 1760 + .enable_mask = BIT(0), 1761 + .hw.init = &(struct clk_init_data) { 1762 + .name = "gcc_gmac0_sys_clk", 1763 + .parent_hws = (const struct clk_hw *[]) { 1764 + &gmac_clk_src.clkr.hw, 1765 + }, 1766 + .num_parents = 1, 1767 + .flags = CLK_SET_RATE_PARENT, 1768 + .ops = &clk_branch2_ops, 1769 + }, 1770 + }, 1771 + }; 1772 + 1773 + static struct clk_branch gcc_gmac0_tx_clk = { 1774 + .halt_reg = 0x68244, 1775 + .clkr = { 1776 + .enable_reg = 0x68244, 1777 + .enable_mask = BIT(0), 1778 + .hw.init = &(struct clk_init_data) { 1779 + .name = "gcc_gmac0_tx_clk", 1780 + .parent_hws = (const struct clk_hw *[]) { 1781 + &gmac0_tx_div_clk_src.clkr.hw, 1782 + }, 1783 + .num_parents = 1, 1784 + .ops = &clk_branch2_ops, 1785 + .flags = CLK_SET_RATE_PARENT, 1786 + }, 1787 + }, 1788 + }; 1789 + 1790 + static struct clk_branch gcc_gmac1_cfg_clk = { 1791 + .halt_reg = 0x68324, 1792 + .clkr = { 1793 + .enable_reg = 0x68324, 1794 + .enable_mask = BIT(0), 1795 + .hw.init = &(struct clk_init_data) { 1796 + .name = "gcc_gmac1_cfg_clk", 1797 + .parent_hws = (const struct clk_hw *[]) { 1798 + &gmac_clk_src.clkr.hw, 1799 + }, 1800 + .num_parents = 1, 1801 + .flags = CLK_SET_RATE_PARENT, 1802 + .ops = &clk_branch2_ops, 1803 + }, 1804 + }, 1805 + }; 1806 + 1807 + static struct clk_branch gcc_gmac1_ptp_clk = { 1808 + .halt_reg = 0x68320, 1809 + .clkr = { 1810 + .enable_reg = 0x68320, 1811 + .enable_mask = BIT(0), 1812 + .hw.init = &(struct clk_init_data) { 1813 + .name = "gcc_gmac1_ptp_clk", 1814 + .parent_hws = (const struct clk_hw *[]) { 1815 + &gmac_clk_src.clkr.hw, 1816 + }, 1817 + .num_parents = 1, 1818 + .flags = CLK_SET_RATE_PARENT, 1819 + .ops = &clk_branch2_ops, 1820 + }, 1821 + }, 1822 + }; 1823 + 1824 + static struct clk_branch gcc_gmac1_rx_clk = { 1825 + .halt_reg = 0x68248, 1826 + .clkr = { 1827 + .enable_reg = 0x68248, 1828 + .enable_mask = BIT(0), 1829 + .hw.init = &(struct clk_init_data) { 1830 + .name = "gcc_gmac1_rx_clk", 1831 + .parent_hws = (const struct clk_hw *[]) { 1832 + &gmac1_rx_div_clk_src.clkr.hw, 1833 + }, 1834 + .num_parents = 1, 1835 + .ops = &clk_branch2_ops, 1836 + .flags = CLK_SET_RATE_PARENT, 1837 + }, 1838 + }, 1839 + }; 1840 + 1841 + static struct clk_branch gcc_gmac1_sys_clk = { 1842 + .halt_reg = 0x68310, 1843 + .clkr = { 1844 + .enable_reg = 0x68310, 1845 + .enable_mask = BIT(0), 1846 + .hw.init = &(struct clk_init_data) { 1847 + .name = "gcc_gmac1_sys_clk", 1848 + .parent_hws = (const struct clk_hw *[]) { 1849 + &gmac_clk_src.clkr.hw, 1850 + }, 1851 + .num_parents = 1, 1852 + .flags = CLK_SET_RATE_PARENT, 1853 + .ops = &clk_branch2_ops, 1854 + }, 1855 + }, 1856 + }; 1857 + 1858 + static struct clk_branch gcc_gmac1_tx_clk = { 1859 + .halt_reg = 0x6824c, 1860 + .clkr = { 1861 + .enable_reg = 0x6824c, 1862 + .enable_mask = BIT(0), 1863 + .hw.init = &(struct clk_init_data) { 1864 + .name = "gcc_gmac1_tx_clk", 1865 + .parent_hws = (const struct clk_hw *[]) { 1866 + &gmac1_tx_div_clk_src.clkr.hw, 1867 + }, 1868 + .num_parents = 1, 1869 + .ops = &clk_branch2_ops, 1870 + .flags = CLK_SET_RATE_PARENT, 1871 + }, 1872 + }, 1873 + }; 1874 + 1875 + static struct clk_branch gcc_gp1_clk = { 1876 + .halt_reg = 0x08000, 1877 + .clkr = { 1878 + .enable_reg = 0x08000, 1879 + .enable_mask = BIT(0), 1880 + .hw.init = &(struct clk_init_data) { 1881 + .name = "gcc_gp1_clk", 1882 + .parent_hws = (const struct clk_hw *[]) { 1883 + &gp1_clk_src.clkr.hw, 1884 + }, 1885 + .num_parents = 1, 1886 + .flags = CLK_SET_RATE_PARENT, 1887 + .ops = &clk_branch2_ops, 1888 + }, 1889 + }, 1890 + }; 1891 + 1892 + static struct clk_branch gcc_gp2_clk = { 1893 + .halt_reg = 0x09000, 1894 + .clkr = { 1895 + .enable_reg = 0x09000, 1896 + .enable_mask = BIT(0), 1897 + .hw.init = &(struct clk_init_data) { 1898 + .name = "gcc_gp2_clk", 1899 + .parent_hws = (const struct clk_hw *[]) { 1900 + &gp2_clk_src.clkr.hw, 1901 + }, 1902 + .num_parents = 1, 1903 + .flags = CLK_SET_RATE_PARENT, 1904 + .ops = &clk_branch2_ops, 1905 + }, 1906 + }, 1907 + }; 1908 + 1909 + static struct clk_branch gcc_gp3_clk = { 1910 + .halt_reg = 0x0a000, 1911 + .clkr = { 1912 + .enable_reg = 0x0a000, 1913 + .enable_mask = BIT(0), 1914 + .hw.init = &(struct clk_init_data) { 1915 + .name = "gcc_gp3_clk", 1916 + .parent_hws = (const struct clk_hw *[]) { 1917 + &gp3_clk_src.clkr.hw, 1918 + }, 1919 + .num_parents = 1, 1920 + .flags = CLK_SET_RATE_PARENT, 1921 + .ops = &clk_branch2_ops, 1922 + }, 1923 + }, 1924 + }; 1925 + 1926 + static struct clk_branch gcc_lpass_core_axim_clk = { 1927 + .halt_reg = 0x2e048, 1928 + .halt_check = BRANCH_VOTED, 1929 + .clkr = { 1930 + .enable_reg = 0x2e048, 1931 + .enable_mask = BIT(0), 1932 + .hw.init = &(struct clk_init_data) { 1933 + .name = "gcc_lpass_core_axim_clk", 1934 + .parent_hws = (const struct clk_hw *[]) { 1935 + &lpass_axim_clk_src.clkr.hw, 1936 + }, 1937 + .num_parents = 1, 1938 + .flags = CLK_SET_RATE_PARENT, 1939 + .ops = &clk_branch2_ops, 1940 + }, 1941 + }, 1942 + }; 1943 + 1944 + static struct clk_branch gcc_lpass_sway_clk = { 1945 + .halt_reg = 0x2e04c, 1946 + .clkr = { 1947 + .enable_reg = 0x2e04c, 1948 + .enable_mask = BIT(0), 1949 + .hw.init = &(struct clk_init_data) { 1950 + .name = "gcc_lpass_sway_clk", 1951 + .parent_hws = (const struct clk_hw *[]) { 1952 + &lpass_sway_clk_src.clkr.hw, 1953 + }, 1954 + .num_parents = 1, 1955 + .flags = CLK_SET_RATE_PARENT, 1956 + .ops = &clk_branch2_ops, 1957 + }, 1958 + }, 1959 + }; 1960 + 1961 + static struct clk_branch gcc_mdio0_ahb_clk = { 1962 + .halt_reg = 0x58004, 1963 + .clkr = { 1964 + .enable_reg = 0x58004, 1965 + .enable_mask = BIT(0), 1966 + .hw.init = &(struct clk_init_data) { 1967 + .name = "gcc_mdioi0_ahb_clk", 1968 + .parent_hws = (const struct clk_hw *[]) { 1969 + &pcnoc_clk_src.hw, 1970 + }, 1971 + .num_parents = 1, 1972 + .flags = CLK_SET_RATE_PARENT, 1973 + .ops = &clk_branch2_ops, 1974 + }, 1975 + }, 1976 + }; 1977 + 1978 + static struct clk_branch gcc_mdio1_ahb_clk = { 1979 + .halt_reg = 0x58014, 1980 + .clkr = { 1981 + .enable_reg = 0x58014, 1982 + .enable_mask = BIT(0), 1983 + .hw.init = &(struct clk_init_data) { 1984 + .name = "gcc_mdio1_ahb_clk", 1985 + .parent_hws = (const struct clk_hw *[]) { 1986 + &pcnoc_clk_src.hw, 1987 + }, 1988 + .num_parents = 1, 1989 + .flags = CLK_SET_RATE_PARENT, 1990 + .ops = &clk_branch2_ops, 1991 + }, 1992 + }, 1993 + }; 1994 + 1995 + static struct clk_branch gcc_pcie0_ahb_clk = { 1996 + .halt_reg = 0x75010, 1997 + .clkr = { 1998 + .enable_reg = 0x75010, 1999 + .enable_mask = BIT(0), 2000 + .hw.init = &(struct clk_init_data) { 2001 + .name = "gcc_pcie0_ahb_clk", 2002 + .parent_hws = (const struct clk_hw *[]) { 2003 + &pcnoc_clk_src.hw, 2004 + }, 2005 + .num_parents = 1, 2006 + .flags = CLK_SET_RATE_PARENT, 2007 + .ops = &clk_branch2_ops, 2008 + }, 2009 + }, 2010 + }; 2011 + 2012 + static struct clk_branch gcc_pcie0_aux_clk = { 2013 + .halt_reg = 0x75014, 2014 + .clkr = { 2015 + .enable_reg = 0x75014, 2016 + .enable_mask = BIT(0), 2017 + .hw.init = &(struct clk_init_data) { 2018 + .name = "gcc_pcie0_aux_clk", 2019 + .parent_hws = (const struct clk_hw *[]) { 2020 + &pcie0_aux_clk_src.clkr.hw, 2021 + }, 2022 + .num_parents = 1, 2023 + .flags = CLK_SET_RATE_PARENT, 2024 + .ops = &clk_branch2_ops, 2025 + }, 2026 + }, 2027 + }; 2028 + 2029 + static struct clk_branch gcc_pcie0_axi_m_clk = { 2030 + .halt_reg = 0x75008, 2031 + .clkr = { 2032 + .enable_reg = 0x75008, 2033 + .enable_mask = BIT(0), 2034 + .hw.init = &(struct clk_init_data) { 2035 + .name = "gcc_pcie0_axi_m_clk", 2036 + .parent_hws = (const struct clk_hw *[]) { 2037 + &pcie0_axi_clk_src.clkr.hw, 2038 + }, 2039 + .num_parents = 1, 2040 + .flags = CLK_SET_RATE_PARENT, 2041 + .ops = &clk_branch2_ops, 2042 + }, 2043 + }, 2044 + }; 2045 + 2046 + static struct clk_branch gcc_pcie0_axi_s_bridge_clk = { 2047 + .halt_reg = 0x75048, 2048 + .clkr = { 2049 + .enable_reg = 0x75048, 2050 + .enable_mask = BIT(0), 2051 + .hw.init = &(struct clk_init_data) { 2052 + .name = "gcc_pcie0_axi_s_bridge_clk", 2053 + .parent_hws = (const struct clk_hw *[]) { 2054 + &pcie0_axi_clk_src.clkr.hw, 2055 + }, 2056 + .num_parents = 1, 2057 + .flags = CLK_SET_RATE_PARENT, 2058 + .ops = &clk_branch2_ops, 2059 + }, 2060 + }, 2061 + }; 2062 + 2063 + static struct clk_branch gcc_pcie0_axi_s_clk = { 2064 + .halt_reg = 0x7500c, 2065 + .clkr = { 2066 + .enable_reg = 0x7500c, 2067 + .enable_mask = BIT(0), 2068 + .hw.init = &(struct clk_init_data) { 2069 + .name = "gcc_pcie0_axi_s_clk", 2070 + .parent_hws = (const struct clk_hw *[]) { 2071 + &pcie0_axi_clk_src.clkr.hw, 2072 + }, 2073 + .num_parents = 1, 2074 + .flags = CLK_SET_RATE_PARENT, 2075 + .ops = &clk_branch2_ops, 2076 + }, 2077 + }, 2078 + }; 2079 + 2080 + static struct clk_branch gcc_pcie0_pipe_clk = { 2081 + .halt_reg = 0x75018, 2082 + .halt_check = BRANCH_HALT_DELAY, 2083 + .halt_bit = 31, 2084 + .clkr = { 2085 + .enable_reg = 0x75018, 2086 + .enable_mask = BIT(0), 2087 + .hw.init = &(struct clk_init_data) { 2088 + .name = "gcc_pcie0_pipe_clk", 2089 + .parent_hws = (const struct clk_hw *[]) { 2090 + &pcie0_pipe_clk_src.clkr.hw, 2091 + }, 2092 + .num_parents = 1, 2093 + .flags = CLK_SET_RATE_PARENT, 2094 + .ops = &clk_branch2_ops, 2095 + }, 2096 + }, 2097 + }; 2098 + 2099 + static struct clk_branch gcc_pcie1_ahb_clk = { 2100 + .halt_reg = 0x76010, 2101 + .clkr = { 2102 + .enable_reg = 0x76010, 2103 + .enable_mask = BIT(0), 2104 + .hw.init = &(struct clk_init_data) { 2105 + .name = "gcc_pcie1_ahb_clk", 2106 + .parent_hws = (const struct clk_hw *[]) { 2107 + &pcnoc_clk_src.hw, 2108 + }, 2109 + .num_parents = 1, 2110 + .flags = CLK_SET_RATE_PARENT, 2111 + .ops = &clk_branch2_ops, 2112 + }, 2113 + }, 2114 + }; 2115 + 2116 + static struct clk_branch gcc_pcie1_aux_clk = { 2117 + .halt_reg = 0x76014, 2118 + .clkr = { 2119 + .enable_reg = 0x76014, 2120 + .enable_mask = BIT(0), 2121 + .hw.init = &(struct clk_init_data) { 2122 + .name = "gcc_pcie1_aux_clk", 2123 + .parent_hws = (const struct clk_hw *[]) { 2124 + &pcie1_aux_clk_src.clkr.hw, 2125 + }, 2126 + .num_parents = 1, 2127 + .flags = CLK_SET_RATE_PARENT, 2128 + .ops = &clk_branch2_ops, 2129 + }, 2130 + }, 2131 + }; 2132 + 2133 + static struct clk_branch gcc_pcie1_axi_m_clk = { 2134 + .halt_reg = 0x76008, 2135 + .clkr = { 2136 + .enable_reg = 0x76008, 2137 + .enable_mask = BIT(0), 2138 + .hw.init = &(struct clk_init_data) { 2139 + .name = "gcc_pcie1_axi_m_clk", 2140 + .parent_hws = (const struct clk_hw *[]) { 2141 + &pcie1_axi_clk_src.clkr.hw, 2142 + }, 2143 + .num_parents = 1, 2144 + .flags = CLK_SET_RATE_PARENT, 2145 + .ops = &clk_branch2_ops, 2146 + }, 2147 + }, 2148 + }; 2149 + 2150 + static struct clk_branch gcc_pcie1_axi_s_bridge_clk = { 2151 + .halt_reg = 0x76048, 2152 + .clkr = { 2153 + .enable_reg = 0x76048, 2154 + .enable_mask = BIT(0), 2155 + .hw.init = &(struct clk_init_data) { 2156 + .name = "gcc_pcie1_axi_s_bridge_clk", 2157 + .parent_hws = (const struct clk_hw *[]) { 2158 + &pcie1_axi_clk_src.clkr.hw, 2159 + }, 2160 + .num_parents = 1, 2161 + .flags = CLK_SET_RATE_PARENT, 2162 + .ops = &clk_branch2_ops, 2163 + }, 2164 + }, 2165 + }; 2166 + 2167 + static struct clk_branch gcc_pcie1_axi_s_clk = { 2168 + .halt_reg = 0x7600c, 2169 + .clkr = { 2170 + .enable_reg = 0x7600c, 2171 + .enable_mask = BIT(0), 2172 + .hw.init = &(struct clk_init_data) { 2173 + .name = "gcc_pcie1_axi_s_clk", 2174 + .parent_hws = (const struct clk_hw *[]) { 2175 + &pcie1_axi_clk_src.clkr.hw, 2176 + }, 2177 + .num_parents = 1, 2178 + .flags = CLK_SET_RATE_PARENT, 2179 + .ops = &clk_branch2_ops, 2180 + }, 2181 + }, 2182 + }; 2183 + 2184 + static struct clk_branch gcc_pcie1_pipe_clk = { 2185 + .halt_reg = 8, 2186 + .halt_check = BRANCH_HALT_DELAY, 2187 + .halt_bit = 31, 2188 + .clkr = { 2189 + .enable_reg = 0x76018, 2190 + .enable_mask = BIT(0), 2191 + .hw.init = &(struct clk_init_data) { 2192 + .name = "gcc_pcie1_pipe_clk", 2193 + .parent_hws = (const struct clk_hw *[]) { 2194 + &pcie1_pipe_clk_src.clkr.hw, 2195 + }, 2196 + .num_parents = 1, 2197 + .flags = CLK_SET_RATE_PARENT, 2198 + .ops = &clk_branch2_ops, 2199 + }, 2200 + }, 2201 + }; 2202 + 2203 + static struct clk_branch gcc_prng_ahb_clk = { 2204 + .halt_reg = 0x13004, 2205 + .halt_check = BRANCH_HALT_VOTED, 2206 + .clkr = { 2207 + .enable_reg = 0x0b004, 2208 + .enable_mask = BIT(8), 2209 + .hw.init = &(struct clk_init_data) { 2210 + .name = "gcc_prng_ahb_clk", 2211 + .parent_hws = (const struct clk_hw *[]) { 2212 + &pcnoc_clk_src.hw, 2213 + }, 2214 + .num_parents = 1, 2215 + .flags = CLK_SET_RATE_PARENT, 2216 + .ops = &clk_branch2_ops, 2217 + }, 2218 + }, 2219 + }; 2220 + 2221 + static struct clk_branch gcc_q6_ahb_clk = { 2222 + .halt_reg = 0x59138, 2223 + .clkr = { 2224 + .enable_reg = 0x59138, 2225 + .enable_mask = BIT(0), 2226 + .hw.init = &(struct clk_init_data) { 2227 + .name = "gcc_q6_ahb_clk", 2228 + .parent_hws = (const struct clk_hw *[]) { 2229 + &wcss_ahb_clk_src.clkr.hw, 2230 + }, 2231 + .num_parents = 1, 2232 + .flags = CLK_SET_RATE_PARENT, 2233 + .ops = &clk_branch2_ops, 2234 + }, 2235 + }, 2236 + }; 2237 + 2238 + static struct clk_branch gcc_q6_ahb_s_clk = { 2239 + .halt_reg = 0x5914c, 2240 + .clkr = { 2241 + .enable_reg = 0x5914c, 2242 + .enable_mask = BIT(0), 2243 + .hw.init = &(struct clk_init_data) { 2244 + .name = "gcc_q6_ahb_s_clk", 2245 + .parent_hws = (const struct clk_hw *[]) { 2246 + &wcss_ahb_clk_src.clkr.hw, 2247 + }, 2248 + .num_parents = 1, 2249 + .flags = CLK_SET_RATE_PARENT, 2250 + .ops = &clk_branch2_ops, 2251 + }, 2252 + }, 2253 + }; 2254 + 2255 + static struct clk_branch gcc_q6_axim_clk = { 2256 + .halt_reg = 0x5913c, 2257 + .clkr = { 2258 + .enable_reg = 0x5913c, 2259 + .enable_mask = BIT(0), 2260 + .hw.init = &(struct clk_init_data) { 2261 + .name = "gcc_q6_axim_clk", 2262 + .parent_hws = (const struct clk_hw *[]) { 2263 + &q6_axi_clk_src.clkr.hw, 2264 + }, 2265 + .num_parents = 1, 2266 + .flags = CLK_SET_RATE_PARENT, 2267 + .ops = &clk_branch2_ops, 2268 + }, 2269 + }, 2270 + }; 2271 + 2272 + static struct clk_branch gcc_q6_axim2_clk = { 2273 + .halt_reg = 0x59150, 2274 + .clkr = { 2275 + .enable_reg = 0x59150, 2276 + .enable_mask = BIT(0), 2277 + .hw.init = &(struct clk_init_data) { 2278 + .name = "gcc_q6_axim2_clk", 2279 + .parent_hws = (const struct clk_hw *[]) { 2280 + &q6_axi_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_q6_axis_clk = { 2290 + .halt_reg = 0x59154, 2291 + .clkr = { 2292 + .enable_reg = 0x59154, 2293 + .enable_mask = BIT(0), 2294 + .hw.init = &(struct clk_init_data) { 2295 + .name = "gcc_q6_axis_clk", 2296 + .parent_hws = (const struct clk_hw *[]) { 2297 + &system_noc_clk_src.hw, 2298 + }, 2299 + .num_parents = 1, 2300 + .flags = CLK_SET_RATE_PARENT, 2301 + .ops = &clk_branch2_ops, 2302 + }, 2303 + }, 2304 + }; 2305 + 2306 + static struct clk_branch gcc_q6_tsctr_1to2_clk = { 2307 + .halt_reg = 0x59148, 2308 + .clkr = { 2309 + .enable_reg = 0x59148, 2310 + .enable_mask = BIT(0), 2311 + .hw.init = &(struct clk_init_data) { 2312 + .name = "gcc_q6_tsctr_1to2_clk", 2313 + .parent_hws = (const struct clk_hw *[]) { 2314 + &qdss_tsctr_div2_clk_src.hw, 2315 + }, 2316 + .num_parents = 1, 2317 + .flags = CLK_SET_RATE_PARENT, 2318 + .ops = &clk_branch2_ops, 2319 + }, 2320 + }, 2321 + }; 2322 + 2323 + static struct clk_branch gcc_q6ss_atbm_clk = { 2324 + .halt_reg = 0x59144, 2325 + .clkr = { 2326 + .enable_reg = 0x59144, 2327 + .enable_mask = BIT(0), 2328 + .hw.init = &(struct clk_init_data) { 2329 + .name = "gcc_q6ss_atbm_clk", 2330 + .parent_hws = (const struct clk_hw *[]) { 2331 + &qdss_at_clk_src.clkr.hw, 2332 + }, 2333 + .num_parents = 1, 2334 + .flags = CLK_SET_RATE_PARENT, 2335 + .ops = &clk_branch2_ops, 2336 + }, 2337 + }, 2338 + }; 2339 + 2340 + static struct clk_branch gcc_q6ss_pclkdbg_clk = { 2341 + .halt_reg = 0x59140, 2342 + .clkr = { 2343 + .enable_reg = 0x59140, 2344 + .enable_mask = BIT(0), 2345 + .hw.init = &(struct clk_init_data) { 2346 + .name = "gcc_q6ss_pclkdbg_clk", 2347 + .parent_hws = (const struct clk_hw *[]) { 2348 + &qdss_dap_sync_clk_src.hw, 2349 + }, 2350 + .num_parents = 1, 2351 + .flags = CLK_SET_RATE_PARENT, 2352 + .ops = &clk_branch2_ops, 2353 + }, 2354 + }, 2355 + }; 2356 + 2357 + static struct clk_branch gcc_q6ss_trig_clk = { 2358 + .halt_reg = 0x59128, 2359 + .clkr = { 2360 + .enable_reg = 0x59128, 2361 + .enable_mask = BIT(0), 2362 + .hw.init = &(struct clk_init_data) { 2363 + .name = "gcc_q6ss_trig_clk", 2364 + .parent_hws = (const struct clk_hw *[]) { 2365 + &qdss_dap_sync_clk_src.hw, 2366 + }, 2367 + .num_parents = 1, 2368 + .flags = CLK_SET_RATE_PARENT, 2369 + .ops = &clk_branch2_ops, 2370 + }, 2371 + }, 2372 + }; 2373 + 2374 + static struct clk_branch gcc_qdss_at_clk = { 2375 + .halt_reg = 0x29024, 2376 + .clkr = { 2377 + .enable_reg = 0x29024, 2378 + .enable_mask = BIT(0), 2379 + .hw.init = &(struct clk_init_data) { 2380 + .name = "gcc_qdss_at_clk", 2381 + .parent_hws = (const struct clk_hw *[]) { 2382 + &qdss_at_clk_src.clkr.hw, 2383 + }, 2384 + .num_parents = 1, 2385 + .flags = CLK_SET_RATE_PARENT, 2386 + .ops = &clk_branch2_ops, 2387 + }, 2388 + }, 2389 + }; 2390 + 2391 + static struct clk_branch gcc_qdss_dap_clk = { 2392 + .halt_reg = 0x29084, 2393 + .clkr = { 2394 + .enable_reg = 0x29084, 2395 + .enable_mask = BIT(0), 2396 + .hw.init = &(struct clk_init_data) { 2397 + .name = "gcc_qdss_dap_clk", 2398 + .parent_hws = (const struct clk_hw *[]) { 2399 + &qdss_tsctr_clk_src.clkr.hw, 2400 + }, 2401 + .num_parents = 1, 2402 + .flags = CLK_SET_RATE_PARENT, 2403 + .ops = &clk_branch2_ops, 2404 + }, 2405 + }, 2406 + }; 2407 + 2408 + static struct clk_branch gcc_qdss_cfg_ahb_clk = { 2409 + .halt_reg = 0x29008, 2410 + .clkr = { 2411 + .enable_reg = 0x29008, 2412 + .enable_mask = BIT(0), 2413 + .hw.init = &(struct clk_init_data) { 2414 + .name = "gcc_qdss_cfg_ahb_clk", 2415 + .parent_hws = (const struct clk_hw *[]) { 2416 + &pcnoc_clk_src.hw, 2417 + }, 2418 + .num_parents = 1, 2419 + .flags = CLK_SET_RATE_PARENT, 2420 + .ops = &clk_branch2_ops, 2421 + }, 2422 + }, 2423 + }; 2424 + 2425 + static struct clk_branch gcc_qdss_dap_ahb_clk = { 2426 + .halt_reg = 0x29004, 2427 + .clkr = { 2428 + .enable_reg = 0x29004, 2429 + .enable_mask = BIT(0), 2430 + .hw.init = &(struct clk_init_data) { 2431 + .name = "gcc_qdss_dap_ahb_clk", 2432 + .parent_hws = (const struct clk_hw *[]) { 2433 + &pcnoc_clk_src.hw, 2434 + }, 2435 + .num_parents = 1, 2436 + .flags = CLK_SET_RATE_PARENT, 2437 + .ops = &clk_branch2_ops, 2438 + }, 2439 + }, 2440 + }; 2441 + 2442 + static struct clk_branch gcc_qdss_etr_usb_clk = { 2443 + .halt_reg = 0x29028, 2444 + .clkr = { 2445 + .enable_reg = 0x29028, 2446 + .enable_mask = BIT(0), 2447 + .hw.init = &(struct clk_init_data) { 2448 + .name = "gcc_qdss_etr_usb_clk", 2449 + .parent_hws = (const struct clk_hw *[]) { 2450 + &system_noc_clk_src.hw, 2451 + }, 2452 + .num_parents = 1, 2453 + .flags = CLK_SET_RATE_PARENT, 2454 + .ops = &clk_branch2_ops, 2455 + }, 2456 + }, 2457 + }; 2458 + 2459 + static struct clk_branch gcc_qdss_eud_at_clk = { 2460 + .halt_reg = 0x29020, 2461 + .clkr = { 2462 + .enable_reg = 0x29020, 2463 + .enable_mask = BIT(0), 2464 + .hw.init = &(struct clk_init_data) { 2465 + .name = "gcc_qdss_eud_at_clk", 2466 + .parent_hws = (const struct clk_hw *[]) { 2467 + &eud_at_clk_src.hw, 2468 + }, 2469 + .num_parents = 1, 2470 + .flags = CLK_SET_RATE_PARENT, 2471 + .ops = &clk_branch2_ops, 2472 + }, 2473 + }, 2474 + }; 2475 + 2476 + static struct clk_branch gcc_qdss_stm_clk = { 2477 + .halt_reg = 0x29044, 2478 + .clkr = { 2479 + .enable_reg = 0x29044, 2480 + .enable_mask = BIT(0), 2481 + .hw.init = &(struct clk_init_data) { 2482 + .name = "gcc_qdss_stm_clk", 2483 + .parent_hws = (const struct clk_hw *[]) { 2484 + &qdss_stm_clk_src.clkr.hw, 2485 + }, 2486 + .num_parents = 1, 2487 + .flags = CLK_SET_RATE_PARENT, 2488 + .ops = &clk_branch2_ops, 2489 + }, 2490 + }, 2491 + }; 2492 + 2493 + static struct clk_branch gcc_qdss_traceclkin_clk = { 2494 + .halt_reg = 0x29060, 2495 + .clkr = { 2496 + .enable_reg = 0x29060, 2497 + .enable_mask = BIT(0), 2498 + .hw.init = &(struct clk_init_data) { 2499 + .name = "gcc_qdss_traceclkin_clk", 2500 + .parent_hws = (const struct clk_hw *[]) { 2501 + &qdss_traceclkin_clk_src.clkr.hw, 2502 + }, 2503 + .num_parents = 1, 2504 + .flags = CLK_SET_RATE_PARENT, 2505 + .ops = &clk_branch2_ops, 2506 + }, 2507 + }, 2508 + }; 2509 + 2510 + static struct clk_branch gcc_qdss_tsctr_div8_clk = { 2511 + .halt_reg = 0x2908c, 2512 + .clkr = { 2513 + .enable_reg = 0x2908c, 2514 + .enable_mask = BIT(0), 2515 + .hw.init = &(struct clk_init_data) { 2516 + .name = "gcc_qdss_tsctr_div8_clk", 2517 + .parent_hws = (const struct clk_hw *[]) { 2518 + &qdss_tsctr_clk_src.clkr.hw, 2519 + }, 2520 + .num_parents = 1, 2521 + .flags = CLK_SET_RATE_PARENT, 2522 + .ops = &clk_branch2_ops, 2523 + }, 2524 + }, 2525 + }; 2526 + 2527 + static struct clk_branch gcc_qpic_ahb_clk = { 2528 + .halt_reg = 0x57024, 2529 + .clkr = { 2530 + .enable_reg = 0x57024, 2531 + .enable_mask = BIT(0), 2532 + .hw.init = &(struct clk_init_data) { 2533 + .name = "gcc_qpic_ahb_clk", 2534 + .parent_hws = (const struct clk_hw *[]) { 2535 + &pcnoc_clk_src.hw, 2536 + }, 2537 + .num_parents = 1, 2538 + .flags = CLK_SET_RATE_PARENT, 2539 + .ops = &clk_branch2_ops, 2540 + }, 2541 + }, 2542 + }; 2543 + 2544 + static struct clk_branch gcc_qpic_clk = { 2545 + .halt_reg = 0x57020, 2546 + .clkr = { 2547 + .enable_reg = 0x57020, 2548 + .enable_mask = BIT(0), 2549 + .hw.init = &(struct clk_init_data) { 2550 + .name = "gcc_qpic_clk", 2551 + .parent_hws = (const struct clk_hw *[]) { 2552 + &pcnoc_clk_src.hw, 2553 + }, 2554 + .num_parents = 1, 2555 + .flags = CLK_SET_RATE_PARENT, 2556 + .ops = &clk_branch2_ops, 2557 + }, 2558 + }, 2559 + }; 2560 + 2561 + static struct clk_branch gcc_qpic_io_macro_clk = { 2562 + .halt_reg = 0x5701c, 2563 + .clkr = { 2564 + .enable_reg = 0x5701c, 2565 + .enable_mask = BIT(0), 2566 + .hw.init = &(struct clk_init_data) { 2567 + .name = "gcc_qpic_io_macro_clk", 2568 + .parent_hws = (const struct clk_hw *[]) { 2569 + &qpic_io_macro_clk_src.clkr.hw, 2570 + }, 2571 + .num_parents = 1, 2572 + .flags = CLK_SET_RATE_PARENT, 2573 + .ops = &clk_branch2_ops, 2574 + }, 2575 + }, 2576 + }; 2577 + 2578 + static struct clk_branch gcc_sdcc1_ahb_clk = { 2579 + .halt_reg = 0x4201c, 2580 + .clkr = { 2581 + .enable_reg = 0x4201c, 2582 + .enable_mask = BIT(0), 2583 + .hw.init = &(struct clk_init_data) { 2584 + .name = "gcc_sdcc1_ahb_clk", 2585 + .parent_hws = (const struct clk_hw *[]) { 2586 + &pcnoc_clk_src.hw, 2587 + }, 2588 + .num_parents = 1, 2589 + .flags = CLK_SET_RATE_PARENT, 2590 + .ops = &clk_branch2_ops, 2591 + }, 2592 + }, 2593 + }; 2594 + 2595 + static struct clk_branch gcc_sdcc1_apps_clk = { 2596 + .halt_reg = 0x42018, 2597 + .clkr = { 2598 + .enable_reg = 0x42018, 2599 + .enable_mask = BIT(0), 2600 + .hw.init = &(struct clk_init_data) { 2601 + .name = "gcc_sdcc1_apps_clk", 2602 + .parent_hws = (const struct clk_hw *[]) { 2603 + &sdcc1_apps_clk_src.clkr.hw, 2604 + }, 2605 + .num_parents = 1, 2606 + .flags = CLK_SET_RATE_PARENT, 2607 + .ops = &clk_branch2_ops, 2608 + }, 2609 + }, 2610 + }; 2611 + 2612 + static struct clk_branch gcc_snoc_gmac0_ahb_clk = { 2613 + .halt_reg = 0x260a0, 2614 + .clkr = { 2615 + .enable_reg = 0x260a0, 2616 + .enable_mask = BIT(0), 2617 + .hw.init = &(struct clk_init_data) { 2618 + .name = "gcc_snoc_gmac0_ahb_clk", 2619 + .parent_hws = (const struct clk_hw *[]) { 2620 + &gmac_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_snoc_gmac0_axi_clk = { 2630 + .halt_reg = 0x26084, 2631 + .clkr = { 2632 + .enable_reg = 0x26084, 2633 + .enable_mask = BIT(0), 2634 + .hw.init = &(struct clk_init_data) { 2635 + .name = "gcc_snoc_gmac0_axi_clk", 2636 + .parent_hws = (const struct clk_hw *[]) { 2637 + &gmac_clk_src.clkr.hw, 2638 + }, 2639 + .num_parents = 1, 2640 + .flags = CLK_SET_RATE_PARENT, 2641 + .ops = &clk_branch2_ops, 2642 + }, 2643 + }, 2644 + }; 2645 + 2646 + static struct clk_branch gcc_snoc_gmac1_ahb_clk = { 2647 + .halt_reg = 0x260a4, 2648 + .clkr = { 2649 + .enable_reg = 0x260a4, 2650 + .enable_mask = BIT(0), 2651 + .hw.init = &(struct clk_init_data) { 2652 + .name = "gcc_snoc_gmac1_ahb_clk", 2653 + .parent_hws = (const struct clk_hw *[]) { 2654 + &gmac_clk_src.clkr.hw, 2655 + }, 2656 + .num_parents = 1, 2657 + .flags = CLK_SET_RATE_PARENT, 2658 + .ops = &clk_branch2_ops, 2659 + }, 2660 + }, 2661 + }; 2662 + 2663 + static struct clk_branch gcc_snoc_gmac1_axi_clk = { 2664 + .halt_reg = 0x26088, 2665 + .clkr = { 2666 + .enable_reg = 0x26088, 2667 + .enable_mask = BIT(0), 2668 + .hw.init = &(struct clk_init_data) { 2669 + .name = "gcc_snoc_gmac1_axi_clk", 2670 + .parent_hws = (const struct clk_hw *[]) { 2671 + &gmac_clk_src.clkr.hw, 2672 + }, 2673 + .num_parents = 1, 2674 + .flags = CLK_SET_RATE_PARENT, 2675 + .ops = &clk_branch2_ops, 2676 + }, 2677 + }, 2678 + }; 2679 + 2680 + static struct clk_branch gcc_snoc_lpass_axim_clk = { 2681 + .halt_reg = 0x26074, 2682 + .clkr = { 2683 + .enable_reg = 0x26074, 2684 + .enable_mask = BIT(0), 2685 + .hw.init = &(struct clk_init_data) { 2686 + .name = "gcc_snoc_lpass_axim_clk", 2687 + .parent_hws = (const struct clk_hw *[]) { 2688 + &lpass_axim_clk_src.clkr.hw, 2689 + }, 2690 + .num_parents = 1, 2691 + .flags = CLK_SET_RATE_PARENT, 2692 + .ops = &clk_branch2_ops, 2693 + }, 2694 + }, 2695 + }; 2696 + 2697 + static struct clk_branch gcc_snoc_lpass_sway_clk = { 2698 + .halt_reg = 0x26078, 2699 + .clkr = { 2700 + .enable_reg = 0x26078, 2701 + .enable_mask = BIT(0), 2702 + .hw.init = &(struct clk_init_data) { 2703 + .name = "gcc_snoc_lpass_sway_clk", 2704 + .parent_hws = (const struct clk_hw *[]) { 2705 + &lpass_sway_clk_src.clkr.hw, 2706 + }, 2707 + .num_parents = 1, 2708 + .flags = CLK_SET_RATE_PARENT, 2709 + .ops = &clk_branch2_ops, 2710 + }, 2711 + }, 2712 + }; 2713 + 2714 + static struct clk_branch gcc_snoc_ubi0_axi_clk = { 2715 + .halt_reg = 0x26094, 2716 + .clkr = { 2717 + .enable_reg = 0x26094, 2718 + .enable_mask = BIT(0), 2719 + .hw.init = &(struct clk_init_data) { 2720 + .name = "gcc_snoc_ubi0_axi_clk", 2721 + .parent_hws = (const struct clk_hw *[]) { 2722 + &ubi0_axi_clk_src.clkr.hw, 2723 + }, 2724 + .num_parents = 1, 2725 + .flags = CLK_SET_RATE_PARENT, 2726 + .ops = &clk_branch2_ops, 2727 + }, 2728 + }, 2729 + }; 2730 + 2731 + static struct clk_branch gcc_sys_noc_pcie0_axi_clk = { 2732 + .halt_reg = 0x26048, 2733 + .clkr = { 2734 + .enable_reg = 0x26048, 2735 + .enable_mask = BIT(0), 2736 + .hw.init = &(struct clk_init_data) { 2737 + .name = "gcc_sys_noc_pcie0_axi_clk", 2738 + .parent_hws = (const struct clk_hw *[]) { 2739 + &pcie0_axi_clk_src.clkr.hw, 2740 + }, 2741 + .num_parents = 1, 2742 + .flags = CLK_SET_RATE_PARENT, 2743 + .ops = &clk_branch2_ops, 2744 + }, 2745 + }, 2746 + }; 2747 + 2748 + static struct clk_branch gcc_sys_noc_pcie1_axi_clk = { 2749 + .halt_reg = 0x2604c, 2750 + .clkr = { 2751 + .enable_reg = 0x2604c, 2752 + .enable_mask = BIT(0), 2753 + .hw.init = &(struct clk_init_data) { 2754 + .name = "gcc_sys_noc_pcie1_axi_clk", 2755 + .parent_hws = (const struct clk_hw *[]) { 2756 + &pcie1_axi_clk_src.clkr.hw, 2757 + }, 2758 + .num_parents = 1, 2759 + .flags = CLK_SET_RATE_PARENT, 2760 + .ops = &clk_branch2_ops, 2761 + }, 2762 + }, 2763 + }; 2764 + 2765 + static struct clk_branch gcc_sys_noc_qdss_stm_axi_clk = { 2766 + .halt_reg = 0x26024, 2767 + .clkr = { 2768 + .enable_reg = 0x26024, 2769 + .enable_mask = BIT(0), 2770 + .hw.init = &(struct clk_init_data) { 2771 + .name = "gcc_sys_noc_qdss_stm_axi_clk", 2772 + .parent_hws = (const struct clk_hw *[]) { 2773 + &qdss_stm_clk_src.clkr.hw, 2774 + }, 2775 + .num_parents = 1, 2776 + .flags = CLK_SET_RATE_PARENT, 2777 + .ops = &clk_branch2_ops, 2778 + }, 2779 + }, 2780 + }; 2781 + 2782 + static struct clk_branch gcc_sys_noc_usb0_axi_clk = { 2783 + .halt_reg = 0x26040, 2784 + .clkr = { 2785 + .enable_reg = 0x26040, 2786 + .enable_mask = BIT(0), 2787 + .hw.init = &(struct clk_init_data) { 2788 + .name = "gcc_sys_noc_usb0_axi_clk", 2789 + .parent_hws = (const struct clk_hw *[]) { 2790 + &usb0_master_clk_src.clkr.hw, 2791 + }, 2792 + .num_parents = 1, 2793 + .flags = CLK_SET_RATE_PARENT, 2794 + .ops = &clk_branch2_ops, 2795 + }, 2796 + }, 2797 + }; 2798 + 2799 + static struct clk_branch gcc_sys_noc_wcss_ahb_clk = { 2800 + .halt_reg = 0x26034, 2801 + .clkr = { 2802 + .enable_reg = 0x26034, 2803 + .enable_mask = BIT(0), 2804 + .hw.init = &(struct clk_init_data) { 2805 + .name = "gcc_sys_noc_wcss_ahb_clk", 2806 + .parent_hws = (const struct clk_hw *[]) { 2807 + &wcss_ahb_clk_src.clkr.hw, 2808 + }, 2809 + .num_parents = 1, 2810 + .flags = CLK_SET_RATE_PARENT, 2811 + .ops = &clk_branch2_ops, 2812 + }, 2813 + }, 2814 + }; 2815 + 2816 + static struct clk_branch gcc_ubi0_axi_clk = { 2817 + .halt_reg = 0x68200, 2818 + .halt_check = BRANCH_HALT_DELAY, 2819 + .clkr = { 2820 + .enable_reg = 0x68200, 2821 + .enable_mask = BIT(0), 2822 + .hw.init = &(struct clk_init_data) { 2823 + .name = "gcc_ubi0_axi_clk", 2824 + .parent_hws = (const struct clk_hw *[]) { 2825 + &ubi0_axi_clk_src.clkr.hw, 2826 + }, 2827 + .num_parents = 1, 2828 + .flags = CLK_SET_RATE_PARENT, 2829 + .ops = &clk_branch2_ops, 2830 + }, 2831 + }, 2832 + }; 2833 + 2834 + static struct clk_branch gcc_ubi0_cfg_clk = { 2835 + .halt_reg = 0x68160, 2836 + .halt_check = BRANCH_HALT_DELAY, 2837 + .clkr = { 2838 + .enable_reg = 0x68160, 2839 + .enable_mask = BIT(0), 2840 + .hw.init = &(struct clk_init_data) { 2841 + .name = "gcc_ubi0_cfg_clk", 2842 + .parent_hws = (const struct clk_hw *[]) { 2843 + &pcnoc_clk_src.hw, 2844 + }, 2845 + .num_parents = 1, 2846 + .flags = CLK_SET_RATE_PARENT, 2847 + .ops = &clk_branch2_ops, 2848 + }, 2849 + }, 2850 + }; 2851 + 2852 + static struct clk_branch gcc_ubi0_dbg_clk = { 2853 + .halt_reg = 0x68214, 2854 + .halt_check = BRANCH_HALT_DELAY, 2855 + .clkr = { 2856 + .enable_reg = 0x68214, 2857 + .enable_mask = BIT(0), 2858 + .hw.init = &(struct clk_init_data) { 2859 + .name = "gcc_ubi0_dbg_clk", 2860 + .parent_hws = (const struct clk_hw *[]) { 2861 + &qdss_tsctr_clk_src.clkr.hw, 2862 + }, 2863 + .num_parents = 1, 2864 + .flags = CLK_SET_RATE_PARENT, 2865 + .ops = &clk_branch2_ops, 2866 + }, 2867 + }, 2868 + }; 2869 + 2870 + static struct clk_branch gcc_ubi0_core_clk = { 2871 + .halt_reg = 0x68210, 2872 + .halt_check = BRANCH_HALT_DELAY, 2873 + .clkr = { 2874 + .enable_reg = 0x68210, 2875 + .enable_mask = BIT(0), 2876 + .hw.init = &(struct clk_init_data) { 2877 + .name = "gcc_ubi0_core_clk", 2878 + .parent_hws = (const struct clk_hw *[]) { 2879 + &ubi0_core_clk_src.clkr.hw, 2880 + }, 2881 + .num_parents = 1, 2882 + .flags = CLK_SET_RATE_PARENT, 2883 + .ops = &clk_branch2_ops, 2884 + }, 2885 + }, 2886 + }; 2887 + 2888 + static struct clk_branch gcc_ubi0_nc_axi_clk = { 2889 + .halt_reg = 0x68204, 2890 + .halt_check = BRANCH_HALT_DELAY, 2891 + .clkr = { 2892 + .enable_reg = 0x68204, 2893 + .enable_mask = BIT(0), 2894 + .hw.init = &(struct clk_init_data) { 2895 + .name = "gcc_ubi0_nc_axi_clk", 2896 + .parent_hws = (const struct clk_hw *[]) { 2897 + &system_noc_clk_src.hw, 2898 + }, 2899 + .num_parents = 1, 2900 + .flags = CLK_SET_RATE_PARENT, 2901 + .ops = &clk_branch2_ops, 2902 + }, 2903 + }, 2904 + }; 2905 + 2906 + static struct clk_branch gcc_ubi0_utcm_clk = { 2907 + .halt_reg = 0x68208, 2908 + .halt_check = BRANCH_HALT_DELAY, 2909 + .clkr = { 2910 + .enable_reg = 0x68208, 2911 + .enable_mask = BIT(0), 2912 + .hw.init = &(struct clk_init_data) { 2913 + .name = "gcc_ubi0_utcm_clk", 2914 + .parent_hws = (const struct clk_hw *[]) { 2915 + &system_noc_clk_src.hw, 2916 + }, 2917 + .num_parents = 1, 2918 + .flags = CLK_SET_RATE_PARENT, 2919 + .ops = &clk_branch2_ops, 2920 + }, 2921 + }, 2922 + }; 2923 + 2924 + static struct clk_branch gcc_uniphy_ahb_clk = { 2925 + .halt_reg = 0x56108, 2926 + .clkr = { 2927 + .enable_reg = 0x56108, 2928 + .enable_mask = BIT(0), 2929 + .hw.init = &(struct clk_init_data) { 2930 + .name = "gcc_uniphy_ahb_clk", 2931 + .parent_hws = (const struct clk_hw *[]) { 2932 + &pcnoc_clk_src.hw, 2933 + }, 2934 + .num_parents = 1, 2935 + .flags = CLK_SET_RATE_PARENT, 2936 + .ops = &clk_branch2_ops, 2937 + }, 2938 + }, 2939 + }; 2940 + 2941 + static struct clk_branch gcc_uniphy_rx_clk = { 2942 + .halt_reg = 0x56110, 2943 + .clkr = { 2944 + .enable_reg = 0x56110, 2945 + .enable_mask = BIT(0), 2946 + .hw.init = &(struct clk_init_data) { 2947 + .name = "gcc_uniphy_rx_clk", 2948 + .parent_hws = (const struct clk_hw *[]) { 2949 + &gmac1_rx_div_clk_src.clkr.hw, 2950 + }, 2951 + .num_parents = 1, 2952 + .ops = &clk_branch2_ops, 2953 + .flags = CLK_SET_RATE_PARENT, 2954 + }, 2955 + }, 2956 + }; 2957 + 2958 + static struct clk_branch gcc_uniphy_tx_clk = { 2959 + .halt_reg = 0x56114, 2960 + .clkr = { 2961 + .enable_reg = 0x56114, 2962 + .enable_mask = BIT(0), 2963 + .hw.init = &(struct clk_init_data) { 2964 + .name = "gcc_uniphy_tx_clk", 2965 + .parent_hws = (const struct clk_hw *[]) { 2966 + &gmac1_tx_div_clk_src.clkr.hw, 2967 + }, 2968 + .num_parents = 1, 2969 + .ops = &clk_branch2_ops, 2970 + .flags = CLK_SET_RATE_PARENT, 2971 + }, 2972 + }, 2973 + }; 2974 + 2975 + static struct clk_branch gcc_uniphy_sys_clk = { 2976 + .halt_reg = 0x5610c, 2977 + .clkr = { 2978 + .enable_reg = 0x5610c, 2979 + .enable_mask = BIT(0), 2980 + .hw.init = &(struct clk_init_data) { 2981 + .name = "gcc_uniphy_sys_clk", 2982 + .parent_hws = (const struct clk_hw *[]) { 2983 + &gcc_xo_clk_src.clkr.hw, 2984 + }, 2985 + .num_parents = 1, 2986 + .flags = CLK_SET_RATE_PARENT, 2987 + .ops = &clk_branch2_ops, 2988 + }, 2989 + }, 2990 + }; 2991 + 2992 + static struct clk_branch gcc_usb0_aux_clk = { 2993 + .halt_reg = 0x3e044, 2994 + .clkr = { 2995 + .enable_reg = 0x3e044, 2996 + .enable_mask = BIT(0), 2997 + .hw.init = &(struct clk_init_data) { 2998 + .name = "gcc_usb0_aux_clk", 2999 + .parent_hws = (const struct clk_hw *[]) { 3000 + &usb0_aux_clk_src.clkr.hw, 3001 + }, 3002 + .num_parents = 1, 3003 + .flags = CLK_SET_RATE_PARENT, 3004 + .ops = &clk_branch2_ops, 3005 + }, 3006 + }, 3007 + }; 3008 + 3009 + static struct clk_branch gcc_usb0_eud_at_clk = { 3010 + .halt_reg = 0x3e04c, 3011 + .halt_check = BRANCH_HALT_VOTED, 3012 + .clkr = { 3013 + .enable_reg = 0x3e04c, 3014 + .enable_mask = BIT(0), 3015 + .hw.init = &(struct clk_init_data) { 3016 + .name = "gcc_usb0_eud_at_clk", 3017 + .parent_hws = (const struct clk_hw *[]) { 3018 + &eud_at_clk_src.hw, 3019 + }, 3020 + .num_parents = 1, 3021 + .flags = CLK_SET_RATE_PARENT, 3022 + .ops = &clk_branch2_ops, 3023 + }, 3024 + }, 3025 + }; 3026 + 3027 + static struct clk_branch gcc_usb0_lfps_clk = { 3028 + .halt_reg = 0x3e050, 3029 + .clkr = { 3030 + .enable_reg = 0x3e050, 3031 + .enable_mask = BIT(0), 3032 + .hw.init = &(struct clk_init_data) { 3033 + .name = "gcc_usb0_lfps_clk", 3034 + .parent_hws = (const struct clk_hw *[]) { 3035 + &usb0_lfps_clk_src.clkr.hw, 3036 + }, 3037 + .num_parents = 1, 3038 + .flags = CLK_SET_RATE_PARENT, 3039 + .ops = &clk_branch2_ops, 3040 + }, 3041 + }, 3042 + }; 3043 + 3044 + static struct clk_branch gcc_usb0_master_clk = { 3045 + .halt_reg = 0x3e000, 3046 + .clkr = { 3047 + .enable_reg = 0x3e000, 3048 + .enable_mask = BIT(0), 3049 + .hw.init = &(struct clk_init_data) { 3050 + .name = "gcc_usb0_master_clk", 3051 + .parent_hws = (const struct clk_hw *[]) { 3052 + &usb0_master_clk_src.clkr.hw, 3053 + }, 3054 + .num_parents = 1, 3055 + .flags = CLK_SET_RATE_PARENT, 3056 + .ops = &clk_branch2_ops, 3057 + }, 3058 + }, 3059 + }; 3060 + 3061 + static struct clk_branch gcc_usb0_mock_utmi_clk = { 3062 + .halt_reg = 0x3e008, 3063 + .clkr = { 3064 + .enable_reg = 0x3e008, 3065 + .enable_mask = BIT(0), 3066 + .hw.init = &(struct clk_init_data) { 3067 + .name = "gcc_usb0_mock_utmi_clk", 3068 + .parent_hws = (const struct clk_hw *[]) { 3069 + &usb0_mock_utmi_clk_src.clkr.hw, 3070 + }, 3071 + .num_parents = 1, 3072 + .flags = CLK_SET_RATE_PARENT, 3073 + .ops = &clk_branch2_ops, 3074 + }, 3075 + }, 3076 + }; 3077 + 3078 + static struct clk_branch gcc_usb0_phy_cfg_ahb_clk = { 3079 + .halt_reg = 0x3e080, 3080 + .clkr = { 3081 + .enable_reg = 0x3e080, 3082 + .enable_mask = BIT(0), 3083 + .hw.init = &(struct clk_init_data) { 3084 + .name = "gcc_usb0_phy_cfg_ahb_clk", 3085 + .parent_hws = (const struct clk_hw *[]) { 3086 + &pcnoc_clk_src.hw, 3087 + }, 3088 + .num_parents = 1, 3089 + .flags = CLK_SET_RATE_PARENT, 3090 + .ops = &clk_branch2_ops, 3091 + }, 3092 + }, 3093 + }; 3094 + 3095 + static struct clk_branch gcc_usb0_sleep_clk = { 3096 + .halt_reg = 0x3e004, 3097 + .clkr = { 3098 + .enable_reg = 0x3e004, 3099 + .enable_mask = BIT(0), 3100 + .hw.init = &(struct clk_init_data) { 3101 + .name = "gcc_usb0_sleep_clk", 3102 + .parent_hws = (const struct clk_hw *[]) { 3103 + &gcc_sleep_clk_src.clkr.hw, 3104 + }, 3105 + .num_parents = 1, 3106 + .flags = CLK_SET_RATE_PARENT, 3107 + .ops = &clk_branch2_ops, 3108 + }, 3109 + }, 3110 + }; 3111 + 3112 + static struct clk_branch gcc_usb0_pipe_clk = { 3113 + .halt_reg = 0x3e040, 3114 + .halt_check = BRANCH_HALT_DELAY, 3115 + .clkr = { 3116 + .enable_reg = 0x3e040, 3117 + .enable_mask = BIT(0), 3118 + .hw.init = &(struct clk_init_data) { 3119 + .name = "gcc_usb0_pipe_clk", 3120 + .parent_hws = (const struct clk_hw *[]) { 3121 + &usb0_pipe_clk_src.clkr.hw, 3122 + }, 3123 + .num_parents = 1, 3124 + .flags = CLK_SET_RATE_PARENT, 3125 + .ops = &clk_branch2_ops, 3126 + }, 3127 + }, 3128 + }; 3129 + 3130 + static struct clk_branch gcc_wcss_acmt_clk = { 3131 + .halt_reg = 0x59064, 3132 + .clkr = { 3133 + .enable_reg = 0x59064, 3134 + .enable_mask = BIT(0), 3135 + .hw.init = &(struct clk_init_data) { 3136 + .name = "gcc_wcss_acmt_clk", 3137 + .parent_hws = (const struct clk_hw *[]) { 3138 + &wcss_ahb_clk_src.clkr.hw, 3139 + }, 3140 + .num_parents = 1, 3141 + .flags = CLK_SET_RATE_PARENT, 3142 + .ops = &clk_branch2_ops, 3143 + }, 3144 + }, 3145 + }; 3146 + 3147 + static struct clk_branch gcc_wcss_ahb_s_clk = { 3148 + .halt_reg = 0x59034, 3149 + .clkr = { 3150 + .enable_reg = 0x59034, 3151 + .enable_mask = BIT(0), 3152 + .hw.init = &(struct clk_init_data) { 3153 + .name = "gcc_wcss_ahb_s_clk", 3154 + .parent_hws = (const struct clk_hw *[]) { 3155 + &wcss_ahb_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_wcss_axi_m_clk = { 3165 + .halt_reg = 0x5903c, 3166 + .clkr = { 3167 + .enable_reg = 0x5903c, 3168 + .enable_mask = BIT(0), 3169 + .hw.init = &(struct clk_init_data) { 3170 + .name = "gcc_wcss_axi_m_clk", 3171 + .parent_hws = (const struct clk_hw *[]) { 3172 + &system_noc_clk_src.hw, 3173 + }, 3174 + .num_parents = 1, 3175 + .flags = CLK_SET_RATE_PARENT, 3176 + .ops = &clk_branch2_ops, 3177 + }, 3178 + }, 3179 + }; 3180 + 3181 + static struct clk_branch gcc_wcss_axi_s_clk = { 3182 + .halt_reg = 0x59068, 3183 + .clkr = { 3184 + .enable_reg = 0x59068, 3185 + .enable_mask = BIT(0), 3186 + .hw.init = &(struct clk_init_data) { 3187 + .name = "gcc_wi_s_clk", 3188 + .parent_hws = (const struct clk_hw *[]) { 3189 + &system_noc_clk_src.hw, 3190 + }, 3191 + .num_parents = 1, 3192 + .flags = CLK_SET_RATE_PARENT, 3193 + .ops = &clk_branch2_ops, 3194 + }, 3195 + }, 3196 + }; 3197 + 3198 + static struct clk_branch gcc_wcss_dbg_ifc_apb_bdg_clk = { 3199 + .halt_reg = 0x59050, 3200 + .clkr = { 3201 + .enable_reg = 0x59050, 3202 + .enable_mask = BIT(0), 3203 + .hw.init = &(struct clk_init_data) { 3204 + .name = "gcc_wcss_dbg_ifc_apb_bdg_clk", 3205 + .parent_hws = (const struct clk_hw *[]) { 3206 + &qdss_dap_sync_clk_src.hw, 3207 + }, 3208 + .num_parents = 1, 3209 + .flags = CLK_SET_RATE_PARENT, 3210 + .ops = &clk_branch2_ops, 3211 + }, 3212 + }, 3213 + }; 3214 + 3215 + static struct clk_branch gcc_wcss_dbg_ifc_apb_clk = { 3216 + .halt_reg = 0x59040, 3217 + .clkr = { 3218 + .enable_reg = 0x59040, 3219 + .enable_mask = BIT(0), 3220 + .hw.init = &(struct clk_init_data) { 3221 + .name = "gcc_wcss_dbg_ifc_apb_clk", 3222 + .parent_hws = (const struct clk_hw *[]) { 3223 + &qdss_dap_sync_clk_src.hw, 3224 + }, 3225 + .num_parents = 1, 3226 + .flags = CLK_SET_RATE_PARENT, 3227 + .ops = &clk_branch2_ops, 3228 + }, 3229 + }, 3230 + }; 3231 + 3232 + static struct clk_branch gcc_wcss_dbg_ifc_atb_bdg_clk = { 3233 + .halt_reg = 0x59054, 3234 + .clkr = { 3235 + .enable_reg = 0x59054, 3236 + .enable_mask = BIT(0), 3237 + .hw.init = &(struct clk_init_data) { 3238 + .name = "gcc_wcss_dbg_ifc_atb_bdg_clk", 3239 + .parent_hws = (const struct clk_hw *[]) { 3240 + &qdss_at_clk_src.clkr.hw, 3241 + }, 3242 + .num_parents = 1, 3243 + .flags = CLK_SET_RATE_PARENT, 3244 + .ops = &clk_branch2_ops, 3245 + }, 3246 + }, 3247 + }; 3248 + 3249 + static struct clk_branch gcc_wcss_dbg_ifc_atb_clk = { 3250 + .halt_reg = 0x59044, 3251 + .clkr = { 3252 + .enable_reg = 0x59044, 3253 + .enable_mask = BIT(0), 3254 + .hw.init = &(struct clk_init_data) { 3255 + .name = "gcc_wcss_dbg_ifc_atb_clk", 3256 + .parent_hws = (const struct clk_hw *[]) { 3257 + &qdss_at_clk_src.clkr.hw, 3258 + }, 3259 + .num_parents = 1, 3260 + .flags = CLK_SET_RATE_PARENT, 3261 + .ops = &clk_branch2_ops, 3262 + }, 3263 + }, 3264 + }; 3265 + 3266 + static struct clk_branch gcc_wcss_dbg_ifc_dapbus_bdg_clk = { 3267 + .halt_reg = 0x59060, 3268 + .clkr = { 3269 + .enable_reg = 0x59060, 3270 + .enable_mask = BIT(0), 3271 + .hw.init = &(struct clk_init_data) { 3272 + .name = "gcc_wcss_dbg_ifc_dapbus_bdg_clk", 3273 + .parent_hws = (const struct clk_hw *[]) { 3274 + &qdss_dap_sync_clk_src.hw, 3275 + }, 3276 + .num_parents = 1, 3277 + .flags = CLK_SET_RATE_PARENT, 3278 + .ops = &clk_branch2_ops, 3279 + }, 3280 + }, 3281 + }; 3282 + 3283 + static struct clk_branch gcc_wcss_dbg_ifc_dapbus_clk = { 3284 + .halt_reg = 0x5905c, 3285 + .clkr = { 3286 + .enable_reg = 0x5905c, 3287 + .enable_mask = BIT(0), 3288 + .hw.init = &(struct clk_init_data) { 3289 + .name = "gcc_wcss_dbg_ifc_dapbus_clk", 3290 + .parent_hws = (const struct clk_hw *[]) { 3291 + &qdss_dap_sync_clk_src.hw, 3292 + }, 3293 + .num_parents = 1, 3294 + .flags = CLK_SET_RATE_PARENT, 3295 + .ops = &clk_branch2_ops, 3296 + }, 3297 + }, 3298 + }; 3299 + 3300 + static struct clk_branch gcc_wcss_dbg_ifc_nts_bdg_clk = { 3301 + .halt_reg = 0x59058, 3302 + .clkr = { 3303 + .enable_reg = 0x59058, 3304 + .enable_mask = BIT(0), 3305 + .hw.init = &(struct clk_init_data) { 3306 + .name = "gcc_wcss_dbg_ifc_nts_bdg_clk", 3307 + .parent_hws = (const struct clk_hw *[]) { 3308 + &qdss_tsctr_div2_clk_src.hw, 3309 + }, 3310 + .num_parents = 1, 3311 + .flags = CLK_SET_RATE_PARENT, 3312 + .ops = &clk_branch2_ops, 3313 + }, 3314 + }, 3315 + }; 3316 + 3317 + static struct clk_branch gcc_wcss_dbg_ifc_nts_clk = { 3318 + .halt_reg = 0x59048, 3319 + .clkr = { 3320 + .enable_reg = 0x59048, 3321 + .enable_mask = BIT(0), 3322 + .hw.init = &(struct clk_init_data) { 3323 + .name = "gcc_wcss_dbg_ifc_nts_clk", 3324 + .parent_hws = (const struct clk_hw *[]) { 3325 + &qdss_tsctr_div2_clk_src.hw, 3326 + }, 3327 + .num_parents = 1, 3328 + .flags = CLK_SET_RATE_PARENT, 3329 + .ops = &clk_branch2_ops, 3330 + }, 3331 + }, 3332 + }; 3333 + 3334 + static struct clk_branch gcc_wcss_ecahb_clk = { 3335 + .halt_reg = 0x59038, 3336 + .clkr = { 3337 + .enable_reg = 0x59038, 3338 + .enable_mask = BIT(0), 3339 + .hw.init = &(struct clk_init_data) { 3340 + .name = "gcc_wcss_ecahb_clk", 3341 + .parent_hws = (const struct clk_hw *[]) { 3342 + &wcss_ahb_clk_src.clkr.hw, 3343 + }, 3344 + .num_parents = 1, 3345 + .flags = CLK_SET_RATE_PARENT, 3346 + .ops = &clk_branch2_ops, 3347 + }, 3348 + }, 3349 + }; 3350 + 3351 + static struct clk_hw *gcc_ipq5018_hws[] = { 3352 + &gpll0_out_main_div2.hw, 3353 + &pcnoc_clk_src.hw, 3354 + &system_noc_clk_src.hw, 3355 + &qdss_dap_sync_clk_src.hw, 3356 + &qdss_tsctr_div2_clk_src.hw, 3357 + &eud_at_clk_src.hw, 3358 + }; 3359 + 3360 + static const struct alpha_pll_config ubi32_pll_config = { 3361 + .l = 0x29, 3362 + .alpha = 0xaaaaaaaa, 3363 + .alpha_hi = 0xaa, 3364 + .config_ctl_val = 0x4001075b, 3365 + .main_output_mask = BIT(0), 3366 + .aux_output_mask = BIT(1), 3367 + .alpha_en_mask = BIT(24), 3368 + .vco_val = 0x1, 3369 + .vco_mask = GENMASK(21, 20), 3370 + .test_ctl_val = 0x0, 3371 + .test_ctl_hi_val = 0x0, 3372 + }; 3373 + 3374 + static struct clk_regmap *gcc_ipq5018_clks[] = { 3375 + [GPLL0_MAIN] = &gpll0_main.clkr, 3376 + [GPLL0] = &gpll0.clkr, 3377 + [GPLL2_MAIN] = &gpll2_main.clkr, 3378 + [GPLL2] = &gpll2.clkr, 3379 + [GPLL4_MAIN] = &gpll4_main.clkr, 3380 + [GPLL4] = &gpll4.clkr, 3381 + [UBI32_PLL_MAIN] = &ubi32_pll_main.clkr, 3382 + [UBI32_PLL] = &ubi32_pll.clkr, 3383 + [ADSS_PWM_CLK_SRC] = &adss_pwm_clk_src.clkr, 3384 + [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr, 3385 + [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr, 3386 + [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr, 3387 + [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr, 3388 + [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr, 3389 + [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr, 3390 + [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr, 3391 + [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr, 3392 + [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr, 3393 + [GCC_ADSS_PWM_CLK] = &gcc_adss_pwm_clk.clkr, 3394 + [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr, 3395 + [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr, 3396 + [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr, 3397 + [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr, 3398 + [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr, 3399 + [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr, 3400 + [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr, 3401 + [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr, 3402 + [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr, 3403 + [GCC_BTSS_LPO_CLK] = &gcc_btss_lpo_clk.clkr, 3404 + [GCC_CMN_BLK_AHB_CLK] = &gcc_cmn_blk_ahb_clk.clkr, 3405 + [GCC_CMN_BLK_SYS_CLK] = &gcc_cmn_blk_sys_clk.clkr, 3406 + [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr, 3407 + [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr, 3408 + [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr, 3409 + [GCC_DCC_CLK] = &gcc_dcc_clk.clkr, 3410 + [GCC_GEPHY_RX_CLK] = &gcc_gephy_rx_clk.clkr, 3411 + [GCC_GEPHY_TX_CLK] = &gcc_gephy_tx_clk.clkr, 3412 + [GCC_GMAC0_CFG_CLK] = &gcc_gmac0_cfg_clk.clkr, 3413 + [GCC_GMAC0_PTP_CLK] = &gcc_gmac0_ptp_clk.clkr, 3414 + [GCC_GMAC0_RX_CLK] = &gcc_gmac0_rx_clk.clkr, 3415 + [GCC_GMAC0_SYS_CLK] = &gcc_gmac0_sys_clk.clkr, 3416 + [GCC_GMAC0_TX_CLK] = &gcc_gmac0_tx_clk.clkr, 3417 + [GCC_GMAC1_CFG_CLK] = &gcc_gmac1_cfg_clk.clkr, 3418 + [GCC_GMAC1_PTP_CLK] = &gcc_gmac1_ptp_clk.clkr, 3419 + [GCC_GMAC1_RX_CLK] = &gcc_gmac1_rx_clk.clkr, 3420 + [GCC_GMAC1_SYS_CLK] = &gcc_gmac1_sys_clk.clkr, 3421 + [GCC_GMAC1_TX_CLK] = &gcc_gmac1_tx_clk.clkr, 3422 + [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 3423 + [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 3424 + [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 3425 + [GCC_LPASS_CORE_AXIM_CLK] = &gcc_lpass_core_axim_clk.clkr, 3426 + [GCC_LPASS_SWAY_CLK] = &gcc_lpass_sway_clk.clkr, 3427 + [GCC_MDIO0_AHB_CLK] = &gcc_mdio0_ahb_clk.clkr, 3428 + [GCC_MDIO1_AHB_CLK] = &gcc_mdio1_ahb_clk.clkr, 3429 + [GCC_PCIE0_AHB_CLK] = &gcc_pcie0_ahb_clk.clkr, 3430 + [GCC_PCIE0_AUX_CLK] = &gcc_pcie0_aux_clk.clkr, 3431 + [GCC_PCIE0_AXI_M_CLK] = &gcc_pcie0_axi_m_clk.clkr, 3432 + [GCC_PCIE0_AXI_S_BRIDGE_CLK] = &gcc_pcie0_axi_s_bridge_clk.clkr, 3433 + [GCC_PCIE0_AXI_S_CLK] = &gcc_pcie0_axi_s_clk.clkr, 3434 + [GCC_PCIE1_AHB_CLK] = &gcc_pcie1_ahb_clk.clkr, 3435 + [GCC_PCIE1_AUX_CLK] = &gcc_pcie1_aux_clk.clkr, 3436 + [GCC_PCIE1_AXI_M_CLK] = &gcc_pcie1_axi_m_clk.clkr, 3437 + [GCC_PCIE1_AXI_S_BRIDGE_CLK] = &gcc_pcie1_axi_s_bridge_clk.clkr, 3438 + [GCC_PCIE1_AXI_S_CLK] = &gcc_pcie1_axi_s_clk.clkr, 3439 + [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 3440 + [GCC_Q6_AXIM_CLK] = &gcc_q6_axim_clk.clkr, 3441 + [GCC_Q6_AXIM2_CLK] = &gcc_q6_axim2_clk.clkr, 3442 + [GCC_Q6_AXIS_CLK] = &gcc_q6_axis_clk.clkr, 3443 + [GCC_Q6_AHB_CLK] = &gcc_q6_ahb_clk.clkr, 3444 + [GCC_Q6_AHB_S_CLK] = &gcc_q6_ahb_s_clk.clkr, 3445 + [GCC_Q6_TSCTR_1TO2_CLK] = &gcc_q6_tsctr_1to2_clk.clkr, 3446 + [GCC_Q6SS_ATBM_CLK] = &gcc_q6ss_atbm_clk.clkr, 3447 + [GCC_Q6SS_PCLKDBG_CLK] = &gcc_q6ss_pclkdbg_clk.clkr, 3448 + [GCC_Q6SS_TRIG_CLK] = &gcc_q6ss_trig_clk.clkr, 3449 + [GCC_QDSS_AT_CLK] = &gcc_qdss_at_clk.clkr, 3450 + [GCC_QDSS_CFG_AHB_CLK] = &gcc_qdss_cfg_ahb_clk.clkr, 3451 + [GCC_QDSS_DAP_AHB_CLK] = &gcc_qdss_dap_ahb_clk.clkr, 3452 + [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr, 3453 + [GCC_QDSS_ETR_USB_CLK] = &gcc_qdss_etr_usb_clk.clkr, 3454 + [GCC_QDSS_EUD_AT_CLK] = &gcc_qdss_eud_at_clk.clkr, 3455 + [GCC_QDSS_STM_CLK] = &gcc_qdss_stm_clk.clkr, 3456 + [GCC_QDSS_TRACECLKIN_CLK] = &gcc_qdss_traceclkin_clk.clkr, 3457 + [GCC_QDSS_TSCTR_DIV8_CLK] = &gcc_qdss_tsctr_div8_clk.clkr, 3458 + [GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr, 3459 + [GCC_QPIC_CLK] = &gcc_qpic_clk.clkr, 3460 + [GCC_QPIC_IO_MACRO_CLK] = &gcc_qpic_io_macro_clk.clkr, 3461 + [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 3462 + [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 3463 + [GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr, 3464 + [GCC_SNOC_GMAC0_AHB_CLK] = &gcc_snoc_gmac0_ahb_clk.clkr, 3465 + [GCC_SNOC_GMAC0_AXI_CLK] = &gcc_snoc_gmac0_axi_clk.clkr, 3466 + [GCC_SNOC_GMAC1_AHB_CLK] = &gcc_snoc_gmac1_ahb_clk.clkr, 3467 + [GCC_SNOC_GMAC1_AXI_CLK] = &gcc_snoc_gmac1_axi_clk.clkr, 3468 + [GCC_SNOC_LPASS_AXIM_CLK] = &gcc_snoc_lpass_axim_clk.clkr, 3469 + [GCC_SNOC_LPASS_SWAY_CLK] = &gcc_snoc_lpass_sway_clk.clkr, 3470 + [GCC_SNOC_UBI0_AXI_CLK] = &gcc_snoc_ubi0_axi_clk.clkr, 3471 + [GCC_SYS_NOC_PCIE0_AXI_CLK] = &gcc_sys_noc_pcie0_axi_clk.clkr, 3472 + [GCC_SYS_NOC_PCIE1_AXI_CLK] = &gcc_sys_noc_pcie1_axi_clk.clkr, 3473 + [GCC_SYS_NOC_QDSS_STM_AXI_CLK] = &gcc_sys_noc_qdss_stm_axi_clk.clkr, 3474 + [GCC_SYS_NOC_USB0_AXI_CLK] = &gcc_sys_noc_usb0_axi_clk.clkr, 3475 + [GCC_SYS_NOC_WCSS_AHB_CLK] = &gcc_sys_noc_wcss_ahb_clk.clkr, 3476 + [GCC_UBI0_AXI_CLK] = &gcc_ubi0_axi_clk.clkr, 3477 + [GCC_UBI0_CFG_CLK] = &gcc_ubi0_cfg_clk.clkr, 3478 + [GCC_UBI0_CORE_CLK] = &gcc_ubi0_core_clk.clkr, 3479 + [GCC_UBI0_DBG_CLK] = &gcc_ubi0_dbg_clk.clkr, 3480 + [GCC_UBI0_NC_AXI_CLK] = &gcc_ubi0_nc_axi_clk.clkr, 3481 + [GCC_UBI0_UTCM_CLK] = &gcc_ubi0_utcm_clk.clkr, 3482 + [GCC_UNIPHY_AHB_CLK] = &gcc_uniphy_ahb_clk.clkr, 3483 + [GCC_UNIPHY_RX_CLK] = &gcc_uniphy_rx_clk.clkr, 3484 + [GCC_UNIPHY_SYS_CLK] = &gcc_uniphy_sys_clk.clkr, 3485 + [GCC_UNIPHY_TX_CLK] = &gcc_uniphy_tx_clk.clkr, 3486 + [GCC_USB0_AUX_CLK] = &gcc_usb0_aux_clk.clkr, 3487 + [GCC_USB0_EUD_AT_CLK] = &gcc_usb0_eud_at_clk.clkr, 3488 + [GCC_USB0_LFPS_CLK] = &gcc_usb0_lfps_clk.clkr, 3489 + [GCC_USB0_MASTER_CLK] = &gcc_usb0_master_clk.clkr, 3490 + [GCC_USB0_MOCK_UTMI_CLK] = &gcc_usb0_mock_utmi_clk.clkr, 3491 + [GCC_USB0_PHY_CFG_AHB_CLK] = &gcc_usb0_phy_cfg_ahb_clk.clkr, 3492 + [GCC_USB0_SLEEP_CLK] = &gcc_usb0_sleep_clk.clkr, 3493 + [GCC_WCSS_ACMT_CLK] = &gcc_wcss_acmt_clk.clkr, 3494 + [GCC_WCSS_AHB_S_CLK] = &gcc_wcss_ahb_s_clk.clkr, 3495 + [GCC_WCSS_AXI_M_CLK] = &gcc_wcss_axi_m_clk.clkr, 3496 + [GCC_WCSS_AXI_S_CLK] = &gcc_wcss_axi_s_clk.clkr, 3497 + [GCC_WCSS_DBG_IFC_APB_BDG_CLK] = &gcc_wcss_dbg_ifc_apb_bdg_clk.clkr, 3498 + [GCC_WCSS_DBG_IFC_APB_CLK] = &gcc_wcss_dbg_ifc_apb_clk.clkr, 3499 + [GCC_WCSS_DBG_IFC_ATB_BDG_CLK] = &gcc_wcss_dbg_ifc_atb_bdg_clk.clkr, 3500 + [GCC_WCSS_DBG_IFC_ATB_CLK] = &gcc_wcss_dbg_ifc_atb_clk.clkr, 3501 + [GCC_WCSS_DBG_IFC_DAPBUS_BDG_CLK] = &gcc_wcss_dbg_ifc_dapbus_bdg_clk.clkr, 3502 + [GCC_WCSS_DBG_IFC_DAPBUS_CLK] = &gcc_wcss_dbg_ifc_dapbus_clk.clkr, 3503 + [GCC_WCSS_DBG_IFC_NTS_BDG_CLK] = &gcc_wcss_dbg_ifc_nts_bdg_clk.clkr, 3504 + [GCC_WCSS_DBG_IFC_NTS_CLK] = &gcc_wcss_dbg_ifc_nts_clk.clkr, 3505 + [GCC_WCSS_ECAHB_CLK] = &gcc_wcss_ecahb_clk.clkr, 3506 + [GCC_XO_CLK] = &gcc_xo_clk.clkr, 3507 + [GCC_XO_CLK_SRC] = &gcc_xo_clk_src.clkr, 3508 + [GMAC0_RX_CLK_SRC] = &gmac0_rx_clk_src.clkr, 3509 + [GMAC0_RX_DIV_CLK_SRC] = &gmac0_rx_div_clk_src.clkr, 3510 + [GMAC0_TX_CLK_SRC] = &gmac0_tx_clk_src.clkr, 3511 + [GMAC0_TX_DIV_CLK_SRC] = &gmac0_tx_div_clk_src.clkr, 3512 + [GMAC1_RX_CLK_SRC] = &gmac1_rx_clk_src.clkr, 3513 + [GMAC1_RX_DIV_CLK_SRC] = &gmac1_rx_div_clk_src.clkr, 3514 + [GMAC1_TX_CLK_SRC] = &gmac1_tx_clk_src.clkr, 3515 + [GMAC1_TX_DIV_CLK_SRC] = &gmac1_tx_div_clk_src.clkr, 3516 + [GMAC_CLK_SRC] = &gmac_clk_src.clkr, 3517 + [GP1_CLK_SRC] = &gp1_clk_src.clkr, 3518 + [GP2_CLK_SRC] = &gp2_clk_src.clkr, 3519 + [GP3_CLK_SRC] = &gp3_clk_src.clkr, 3520 + [LPASS_AXIM_CLK_SRC] = &lpass_axim_clk_src.clkr, 3521 + [LPASS_SWAY_CLK_SRC] = &lpass_sway_clk_src.clkr, 3522 + [PCIE0_AUX_CLK_SRC] = &pcie0_aux_clk_src.clkr, 3523 + [PCIE0_AXI_CLK_SRC] = &pcie0_axi_clk_src.clkr, 3524 + [PCIE1_AUX_CLK_SRC] = &pcie1_aux_clk_src.clkr, 3525 + [PCIE1_AXI_CLK_SRC] = &pcie1_axi_clk_src.clkr, 3526 + [PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr, 3527 + [Q6_AXI_CLK_SRC] = &q6_axi_clk_src.clkr, 3528 + [QDSS_AT_CLK_SRC] = &qdss_at_clk_src.clkr, 3529 + [QDSS_STM_CLK_SRC] = &qdss_stm_clk_src.clkr, 3530 + [QDSS_TSCTR_CLK_SRC] = &qdss_tsctr_clk_src.clkr, 3531 + [QDSS_TRACECLKIN_CLK_SRC] = &qdss_traceclkin_clk_src.clkr, 3532 + [QPIC_IO_MACRO_CLK_SRC] = &qpic_io_macro_clk_src.clkr, 3533 + [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr, 3534 + [SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr, 3535 + [UBI0_AXI_CLK_SRC] = &ubi0_axi_clk_src.clkr, 3536 + [UBI0_CORE_CLK_SRC] = &ubi0_core_clk_src.clkr, 3537 + [USB0_AUX_CLK_SRC] = &usb0_aux_clk_src.clkr, 3538 + [USB0_LFPS_CLK_SRC] = &usb0_lfps_clk_src.clkr, 3539 + [USB0_MASTER_CLK_SRC] = &usb0_master_clk_src.clkr, 3540 + [USB0_MOCK_UTMI_CLK_SRC] = &usb0_mock_utmi_clk_src.clkr, 3541 + [WCSS_AHB_CLK_SRC] = &wcss_ahb_clk_src.clkr, 3542 + [PCIE0_PIPE_CLK_SRC] = &pcie0_pipe_clk_src.clkr, 3543 + [PCIE1_PIPE_CLK_SRC] = &pcie1_pipe_clk_src.clkr, 3544 + [GCC_PCIE0_PIPE_CLK] = &gcc_pcie0_pipe_clk.clkr, 3545 + [GCC_PCIE1_PIPE_CLK] = &gcc_pcie1_pipe_clk.clkr, 3546 + [USB0_PIPE_CLK_SRC] = &usb0_pipe_clk_src.clkr, 3547 + [GCC_USB0_PIPE_CLK] = &gcc_usb0_pipe_clk.clkr, 3548 + }; 3549 + 3550 + static const struct qcom_reset_map gcc_ipq5018_resets[] = { 3551 + [GCC_APC0_VOLTAGE_DROOP_DETECTOR_BCR] = { 0x78000, 0 }, 3552 + [GCC_BLSP1_BCR] = { 0x01000, 0 }, 3553 + [GCC_BLSP1_QUP1_BCR] = { 0x02000, 0 }, 3554 + [GCC_BLSP1_QUP2_BCR] = { 0x03008, 0 }, 3555 + [GCC_BLSP1_QUP3_BCR] = { 0x04008, 0 }, 3556 + [GCC_BLSP1_UART1_BCR] = { 0x02038, 0 }, 3557 + [GCC_BLSP1_UART2_BCR] = { 0x03028, 0 }, 3558 + [GCC_BOOT_ROM_BCR] = { 0x13008, 0 }, 3559 + [GCC_BTSS_BCR] = { 0x1c000, 0 }, 3560 + [GCC_CMN_BLK_BCR] = { 0x56300, 0 }, 3561 + [GCC_CMN_LDO_BCR] = { 0x33000, 0 }, 3562 + [GCC_CE_BCR] = { 0x33014, 0 }, 3563 + [GCC_CRYPTO_BCR] = { 0x16000, 0 }, 3564 + [GCC_DCC_BCR] = { 0x77000, 0 }, 3565 + [GCC_DCD_BCR] = { 0x2a000, 0 }, 3566 + [GCC_DDRSS_BCR] = { 0x1e000, 0 }, 3567 + [GCC_EDPD_BCR] = { 0x3a000, 0 }, 3568 + [GCC_GEPHY_BCR] = { 0x56000, 0 }, 3569 + [GCC_GEPHY_MDC_SW_ARES] = { 0x56004, 0 }, 3570 + [GCC_GEPHY_DSP_HW_ARES] = { 0x56004, 1 }, 3571 + [GCC_GEPHY_RX_ARES] = { 0x56004, 2 }, 3572 + [GCC_GEPHY_TX_ARES] = { 0x56004, 3 }, 3573 + [GCC_GMAC0_BCR] = { 0x19000, 0 }, 3574 + [GCC_GMAC0_CFG_ARES] = { 0x68428, 0 }, 3575 + [GCC_GMAC0_SYS_ARES] = { 0x68428, 1 }, 3576 + [GCC_GMAC1_BCR] = { 0x19100, 0 }, 3577 + [GCC_GMAC1_CFG_ARES] = { 0x68438, 0 }, 3578 + [GCC_GMAC1_SYS_ARES] = { 0x68438, 1 }, 3579 + [GCC_IMEM_BCR] = { 0x0e000, 0 }, 3580 + [GCC_LPASS_BCR] = { 0x2e000, 0 }, 3581 + [GCC_MDIO0_BCR] = { 0x58000, 0 }, 3582 + [GCC_MDIO1_BCR] = { 0x58010, 0 }, 3583 + [GCC_MPM_BCR] = { 0x2c000, 0 }, 3584 + [GCC_PCIE0_BCR] = { 0x75004, 0 }, 3585 + [GCC_PCIE0_LINK_DOWN_BCR] = { 0x750a8, 0 }, 3586 + [GCC_PCIE0_PHY_BCR] = { 0x75038, 0 }, 3587 + [GCC_PCIE0PHY_PHY_BCR] = { 0x7503c, 0 }, 3588 + [GCC_PCIE0_PIPE_ARES] = { 0x75040, 0 }, 3589 + [GCC_PCIE0_SLEEP_ARES] = { 0x75040, 1 }, 3590 + [GCC_PCIE0_CORE_STICKY_ARES] = { 0x75040, 2 }, 3591 + [GCC_PCIE0_AXI_MASTER_ARES] = { 0x75040, 3 }, 3592 + [GCC_PCIE0_AXI_SLAVE_ARES] = { 0x75040, 4 }, 3593 + [GCC_PCIE0_AHB_ARES] = { 0x75040, 5 }, 3594 + [GCC_PCIE0_AXI_MASTER_STICKY_ARES] = { 0x75040, 6 }, 3595 + [GCC_PCIE0_AXI_SLAVE_STICKY_ARES] = { 0x75040, 7 }, 3596 + [GCC_PCIE1_BCR] = { 0x76004, 0 }, 3597 + [GCC_PCIE1_LINK_DOWN_BCR] = { 0x76044, 0 }, 3598 + [GCC_PCIE1_PHY_BCR] = { 0x76038, 0 }, 3599 + [GCC_PCIE1PHY_PHY_BCR] = { 0x7603c, 0 }, 3600 + [GCC_PCIE1_PIPE_ARES] = { 0x76040, 0 }, 3601 + [GCC_PCIE1_SLEEP_ARES] = { 0x76040, 1 }, 3602 + [GCC_PCIE1_CORE_STICKY_ARES] = { 0x76040, 2 }, 3603 + [GCC_PCIE1_AXI_MASTER_ARES] = { 0x76040, 3 }, 3604 + [GCC_PCIE1_AXI_SLAVE_ARES] = { 0x76040, 4 }, 3605 + [GCC_PCIE1_AHB_ARES] = { 0x76040, 5 }, 3606 + [GCC_PCIE1_AXI_MASTER_STICKY_ARES] = { 0x76040, 6 }, 3607 + [GCC_PCIE1_AXI_SLAVE_STICKY_ARES] = { 0x76040, 7 }, 3608 + [GCC_PCNOC_BCR] = { 0x27018, 0 }, 3609 + [GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000, 0 }, 3610 + [GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008, 0 }, 3611 + [GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010, 0 }, 3612 + [GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018, 0 }, 3613 + [GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020, 0 }, 3614 + [GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028, 0 }, 3615 + [GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030, 0 }, 3616 + [GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038, 0 }, 3617 + [GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040, 0 }, 3618 + [GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048, 0 }, 3619 + [GCC_PCNOC_BUS_TIMEOUT10_BCR] = { 0x48050, 0 }, 3620 + [GCC_PCNOC_BUS_TIMEOUT11_BCR] = { 0x48058, 0 }, 3621 + [GCC_PRNG_BCR] = { 0x13000, 0 }, 3622 + [GCC_Q6SS_DBG_ARES] = { 0x59110, 0 }, 3623 + [GCC_Q6_AHB_S_ARES] = { 0x59110, 1 }, 3624 + [GCC_Q6_AHB_ARES] = { 0x59110, 2 }, 3625 + [GCC_Q6_AXIM2_ARES] = { 0x59110, 3 }, 3626 + [GCC_Q6_AXIM_ARES] = { 0x59110, 4 }, 3627 + [GCC_Q6_AXIS_ARES] = { 0x59158, 0 }, 3628 + [GCC_QDSS_BCR] = { 0x29000, 0 }, 3629 + [GCC_QPIC_BCR] = { 0x57018, 0 }, 3630 + [GCC_QUSB2_0_PHY_BCR] = { 0x41030, 0 }, 3631 + [GCC_SDCC1_BCR] = { 0x42000, 0 }, 3632 + [GCC_SEC_CTRL_BCR] = { 0x1a000, 0 }, 3633 + [GCC_SPDM_BCR] = { 0x2f000, 0 }, 3634 + [GCC_SYSTEM_NOC_BCR] = { 0x26000, 0 }, 3635 + [GCC_TCSR_BCR] = { 0x28000, 0 }, 3636 + [GCC_TLMM_BCR] = { 0x34000, 0 }, 3637 + [GCC_UBI0_AXI_ARES] = { 0x680}, 3638 + [GCC_UBI0_AHB_ARES] = { 0x68010, 1 }, 3639 + [GCC_UBI0_NC_AXI_ARES] = { 0x68010, 2 }, 3640 + [GCC_UBI0_DBG_ARES] = { 0x68010, 3 }, 3641 + [GCC_UBI0_UTCM_ARES] = { 0x68010, 6 }, 3642 + [GCC_UBI0_CORE_ARES] = { 0x68010, 7 }, 3643 + [GCC_UBI32_BCR] = { 0x19064, 0 }, 3644 + [GCC_UNIPHY_BCR] = { 0x56100, 0 }, 3645 + [GCC_UNIPHY_AHB_ARES] = { 0x56104, 0 }, 3646 + [GCC_UNIPHY_SYS_ARES] = { 0x56104, 1 }, 3647 + [GCC_UNIPHY_RX_ARES] = { 0x56104, 4 }, 3648 + [GCC_UNIPHY_TX_ARES] = { 0x56104, 5 }, 3649 + [GCC_UNIPHY_SOFT_RESET] = {0x56104, 0 }, 3650 + [GCC_USB0_BCR] = { 0x3e070, 0 }, 3651 + [GCC_USB0_PHY_BCR] = { 0x3e034, 0 }, 3652 + [GCC_WCSS_BCR] = { 0x18000, 0 }, 3653 + [GCC_WCSS_DBG_ARES] = { 0x59008, 0 }, 3654 + [GCC_WCSS_ECAHB_ARES] = { 0x59008, 1 }, 3655 + [GCC_WCSS_ACMT_ARES] = { 0x59008, 2 }, 3656 + [GCC_WCSS_DBG_BDG_ARES] = { 0x59008, 3 }, 3657 + [GCC_WCSS_AHB_S_ARES] = { 0x59008, 4 }, 3658 + [GCC_WCSS_AXI_M_ARES] = { 0x59008, 5 }, 3659 + [GCC_WCSS_AXI_S_ARES] = { 0x59008, 6 }, 3660 + [GCC_WCSS_Q6_BCR] = { 0x18004, 0 }, 3661 + [GCC_WCSSAON_RESET] = { 0x59010, 0}, 3662 + [GCC_GEPHY_MISC_ARES] = { 0x56004, 0 }, 3663 + }; 3664 + 3665 + static const struct of_device_id gcc_ipq5018_match_table[] = { 3666 + { .compatible = "qcom,gcc-ipq5018" }, 3667 + { } 3668 + }; 3669 + MODULE_DEVICE_TABLE(of, gcc_ipq5018_match_table); 3670 + 3671 + static const struct regmap_config gcc_ipq5018_regmap_config = { 3672 + .reg_bits = 32, 3673 + .reg_stride = 4, 3674 + .val_bits = 32, 3675 + .max_register = 0x7fffc, 3676 + .fast_io = true, 3677 + }; 3678 + 3679 + static const struct qcom_cc_desc gcc_ipq5018_desc = { 3680 + .config = &gcc_ipq5018_regmap_config, 3681 + .clks = gcc_ipq5018_clks, 3682 + .num_clks = ARRAY_SIZE(gcc_ipq5018_clks), 3683 + .resets = gcc_ipq5018_resets, 3684 + .num_resets = ARRAY_SIZE(gcc_ipq5018_resets), 3685 + .clk_hws = gcc_ipq5018_hws, 3686 + .num_clk_hws = ARRAY_SIZE(gcc_ipq5018_hws), 3687 + }; 3688 + 3689 + static int gcc_ipq5018_probe(struct platform_device *pdev) 3690 + { 3691 + struct regmap *regmap; 3692 + struct qcom_cc_desc ipq5018_desc = gcc_ipq5018_desc; 3693 + 3694 + regmap = qcom_cc_map(pdev, &ipq5018_desc); 3695 + if (IS_ERR(regmap)) 3696 + return PTR_ERR(regmap); 3697 + 3698 + clk_alpha_pll_configure(&ubi32_pll_main, regmap, &ubi32_pll_config); 3699 + 3700 + return qcom_cc_really_probe(pdev, &ipq5018_desc, regmap); 3701 + } 3702 + 3703 + static struct platform_driver gcc_ipq5018_driver = { 3704 + .probe = gcc_ipq5018_probe, 3705 + .driver = { 3706 + .name = "qcom,gcc-ipq5018", 3707 + .of_match_table = gcc_ipq5018_match_table, 3708 + }, 3709 + }; 3710 + 3711 + static int __init gcc_ipq5018_init(void) 3712 + { 3713 + return platform_driver_register(&gcc_ipq5018_driver); 3714 + } 3715 + core_initcall(gcc_ipq5018_init); 3716 + 3717 + static void __exit gcc_ipq5018_exit(void) 3718 + { 3719 + platform_driver_unregister(&gcc_ipq5018_driver); 3720 + } 3721 + module_exit(gcc_ipq5018_exit); 3722 + 3723 + MODULE_DESCRIPTION("Qualcomm Technologies, Inc. GCC IPQ5018 Driver"); 3724 + MODULE_LICENSE("GPL");
+42 -169
drivers/clk/qcom/gcc-ipq5332.c
··· 4 4 */ 5 5 6 6 #include <linux/clk-provider.h> 7 + #include <linux/mod_devicetable.h> 7 8 #include <linux/module.h> 8 - #include <linux/of_device.h> 9 + #include <linux/platform_device.h> 9 10 #include <linux/regmap.h> 10 11 11 12 #include <dt-bindings/clock/qcom,ipq5332-gcc.h> ··· 227 226 static const struct parent_map gcc_parent_map_5[] = { 228 227 { P_XO, 0 }, 229 228 { P_GPLL0_OUT_MAIN, 1 }, 230 - { P_GPLL2_OUT_AUX, 2 }, 231 - { P_GPLL4_OUT_AUX, 3 }, 232 - { P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 4 }, 233 - { P_GPLL0_OUT_AUX, 5 }, 229 + { P_GPLL0_OUT_AUX, 2 }, 230 + { P_SLEEP_CLK, 6 }, 234 231 }; 235 232 236 233 static const struct clk_parent_data gcc_parent_data_5[] = { 237 234 { .index = DT_XO }, 238 235 { .hw = &gpll0.clkr.hw }, 239 - { .hw = &gpll2.clkr.hw }, 240 - { .hw = &gpll4.clkr.hw }, 241 - { .hw = &gpll0_div2.hw }, 242 236 { .hw = &gpll0.clkr.hw }, 237 + { .index = DT_SLEEP_CLK }, 243 238 }; 244 239 245 240 static const struct parent_map gcc_parent_map_6[] = { 246 241 { P_XO, 0 }, 247 242 { P_GPLL0_OUT_MAIN, 1 }, 248 - { P_GPLL0_OUT_AUX, 2 }, 243 + { P_GPLL2_OUT_AUX, 2 }, 244 + { P_GPLL4_OUT_AUX, 3 }, 249 245 { P_SLEEP_CLK, 6 }, 250 246 }; 251 247 252 248 static const struct clk_parent_data gcc_parent_data_6[] = { 253 249 { .index = DT_XO }, 254 250 { .hw = &gpll0.clkr.hw }, 255 - { .hw = &gpll0.clkr.hw }, 251 + { .hw = &gpll2.clkr.hw }, 252 + { .hw = &gpll4.clkr.hw }, 256 253 { .index = DT_SLEEP_CLK }, 257 254 }; 258 255 ··· 258 259 { P_XO, 0 }, 259 260 { P_GPLL0_OUT_MAIN, 1 }, 260 261 { P_GPLL2_OUT_AUX, 2 }, 261 - { P_GPLL4_OUT_AUX, 3 }, 262 - { P_SLEEP_CLK, 6 }, 263 262 }; 264 263 265 264 static const struct clk_parent_data gcc_parent_data_7[] = { 266 265 { .index = DT_XO }, 267 266 { .hw = &gpll0.clkr.hw }, 268 267 { .hw = &gpll2.clkr.hw }, 269 - { .hw = &gpll4.clkr.hw }, 270 - { .index = DT_SLEEP_CLK }, 271 268 }; 272 269 273 270 static const struct parent_map gcc_parent_map_8[] = { 274 - { P_XO, 0 }, 275 - { P_GPLL0_OUT_MAIN, 1 }, 276 - { P_GPLL2_OUT_AUX, 2 }, 277 - }; 278 - 279 - static const struct clk_parent_data gcc_parent_data_8[] = { 280 - { .index = DT_XO }, 281 - { .hw = &gpll0.clkr.hw }, 282 - { .hw = &gpll2.clkr.hw }, 283 - }; 284 - 285 - static const struct parent_map gcc_parent_map_9[] = { 286 271 { P_XO, 0 }, 287 272 { P_GPLL0_OUT_MAIN, 1 }, 288 273 { P_GPLL2_OUT_MAIN, 2 }, 289 274 { P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 4 }, 290 275 }; 291 276 292 - static const struct clk_parent_data gcc_parent_data_9[] = { 277 + static const struct clk_parent_data gcc_parent_data_8[] = { 293 278 { .index = DT_XO }, 294 279 { .hw = &gpll0.clkr.hw }, 295 280 { .hw = &gpll2.clkr.hw }, 296 281 { .hw = &gpll0_div2.hw }, 297 282 }; 298 283 299 - static const struct parent_map gcc_parent_map_10[] = { 284 + static const struct parent_map gcc_parent_map_9[] = { 300 285 { P_SLEEP_CLK, 6 }, 301 286 }; 302 287 303 - static const struct clk_parent_data gcc_parent_data_10[] = { 288 + static const struct clk_parent_data gcc_parent_data_9[] = { 304 289 { .index = DT_SLEEP_CLK }, 305 290 }; 306 291 307 - static const struct parent_map gcc_parent_map_11[] = { 292 + static const struct parent_map gcc_parent_map_10[] = { 308 293 { P_XO, 0 }, 309 294 { P_GPLL0_OUT_MAIN, 1 }, 310 295 { P_GPLL4_OUT_MAIN, 2 }, 311 296 { P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 3 }, 312 297 }; 313 298 314 - static const struct clk_parent_data gcc_parent_data_11[] = { 299 + static const struct clk_parent_data gcc_parent_data_10[] = { 315 300 { .index = DT_XO }, 316 301 { .hw = &gpll0.clkr.hw }, 317 302 { .hw = &gpll4.clkr.hw }, 318 303 { .hw = &gpll0_div2.hw }, 319 304 }; 320 305 321 - static const struct parent_map gcc_parent_map_12[] = { 306 + static const struct parent_map gcc_parent_map_11[] = { 322 307 { P_XO, 0 }, 323 308 { P_GPLL0_OUT_AUX, 2 }, 324 309 { P_SLEEP_CLK, 6 }, 325 310 }; 326 311 327 - static const struct clk_parent_data gcc_parent_data_12[] = { 312 + static const struct clk_parent_data gcc_parent_data_11[] = { 328 313 { .index = DT_XO }, 329 314 { .hw = &gpll0.clkr.hw }, 330 315 { .index = DT_SLEEP_CLK }, 331 316 }; 332 317 333 - static const struct parent_map gcc_parent_map_13[] = { 318 + static const struct parent_map gcc_parent_map_12[] = { 334 319 { P_XO, 0 }, 335 320 { P_GPLL4_OUT_AUX, 1 }, 336 321 { P_GPLL0_OUT_MAIN, 3 }, 337 322 { P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 4 }, 338 323 }; 339 324 340 - static const struct clk_parent_data gcc_parent_data_13[] = { 325 + static const struct clk_parent_data gcc_parent_data_12[] = { 341 326 { .index = DT_XO }, 342 327 { .hw = &gpll4.clkr.hw }, 343 328 { .hw = &gpll0.clkr.hw }, ··· 352 369 F(480000000, P_GPLL4_OUT_AUX, 2.5, 0, 0), 353 370 F(533333333, P_GPLL0_OUT_MAIN, 1.5, 0, 0), 354 371 { } 355 - }; 356 - 357 - static struct clk_rcg2 gcc_apss_axi_clk_src = { 358 - .cmd_rcgr = 0x24004, 359 - .mnd_width = 0, 360 - .hid_width = 5, 361 - .parent_map = gcc_parent_map_5, 362 - .freq_tbl = ftbl_gcc_apss_axi_clk_src, 363 - .clkr.hw.init = &(const struct clk_init_data) { 364 - .name = "gcc_apss_axi_clk_src", 365 - .parent_data = gcc_parent_data_5, 366 - .num_parents = ARRAY_SIZE(gcc_parent_data_5), 367 - .ops = &clk_rcg2_ops, 368 - }, 369 372 }; 370 373 371 374 static const struct freq_tbl ftbl_gcc_blsp1_qup1_spi_apps_clk_src[] = { ··· 702 733 .cmd_rcgr = 0x28004, 703 734 .mnd_width = 16, 704 735 .hid_width = 5, 705 - .parent_map = gcc_parent_map_6, 736 + .parent_map = gcc_parent_map_5, 706 737 .freq_tbl = ftbl_gcc_pcie_aux_clk_src, 707 738 .clkr.hw.init = &(const struct clk_init_data) { 708 739 .name = "gcc_pcie_aux_clk_src", 709 - .parent_data = gcc_parent_data_6, 710 - .num_parents = ARRAY_SIZE(gcc_parent_data_6), 740 + .parent_data = gcc_parent_data_5, 741 + .num_parents = ARRAY_SIZE(gcc_parent_data_5), 711 742 .ops = &clk_rcg2_ops, 712 743 }, 713 744 }; ··· 779 810 .cmd_rcgr = 0x25004, 780 811 .mnd_width = 0, 781 812 .hid_width = 5, 782 - .parent_map = gcc_parent_map_7, 813 + .parent_map = gcc_parent_map_6, 783 814 .freq_tbl = ftbl_gcc_apss_axi_clk_src, 784 815 .clkr.hw.init = &(const struct clk_init_data) { 785 816 .name = "gcc_q6_axim_clk_src", 786 - .parent_data = gcc_parent_data_7, 787 - .num_parents = ARRAY_SIZE(gcc_parent_data_7), 817 + .parent_data = gcc_parent_data_6, 818 + .num_parents = ARRAY_SIZE(gcc_parent_data_6), 788 819 .ops = &clk_rcg2_ops, 789 820 }, 790 821 }; ··· 900 931 .cmd_rcgr = 0x32004, 901 932 .mnd_width = 0, 902 933 .hid_width = 5, 903 - .parent_map = gcc_parent_map_8, 934 + .parent_map = gcc_parent_map_7, 904 935 .freq_tbl = ftbl_gcc_qpic_io_macro_clk_src, 905 936 .clkr.hw.init = &(const struct clk_init_data) { 906 937 .name = "gcc_qpic_io_macro_clk_src", 907 - .parent_data = gcc_parent_data_8, 908 - .num_parents = ARRAY_SIZE(gcc_parent_data_8), 938 + .parent_data = gcc_parent_data_7, 939 + .num_parents = ARRAY_SIZE(gcc_parent_data_7), 909 940 .ops = &clk_rcg2_ops, 910 941 }, 911 942 }; ··· 926 957 .cmd_rcgr = 0x33004, 927 958 .mnd_width = 8, 928 959 .hid_width = 5, 929 - .parent_map = gcc_parent_map_9, 960 + .parent_map = gcc_parent_map_8, 930 961 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src, 931 962 .clkr.hw.init = &(const struct clk_init_data) { 932 963 .name = "gcc_sdcc1_apps_clk_src", 933 - .parent_data = gcc_parent_data_9, 934 - .num_parents = ARRAY_SIZE(gcc_parent_data_9), 964 + .parent_data = gcc_parent_data_8, 965 + .num_parents = ARRAY_SIZE(gcc_parent_data_8), 935 966 .ops = &clk_rcg2_floor_ops, 936 967 }, 937 968 }; ··· 945 976 .cmd_rcgr = 0x3400c, 946 977 .mnd_width = 0, 947 978 .hid_width = 5, 948 - .parent_map = gcc_parent_map_10, 979 + .parent_map = gcc_parent_map_9, 949 980 .freq_tbl = ftbl_gcc_sleep_clk_src, 950 981 .clkr.hw.init = &(const struct clk_init_data) { 951 982 .name = "gcc_sleep_clk_src", 952 - .parent_data = gcc_parent_data_10, 953 - .num_parents = ARRAY_SIZE(gcc_parent_data_10), 983 + .parent_data = gcc_parent_data_9, 984 + .num_parents = ARRAY_SIZE(gcc_parent_data_9), 954 985 .ops = &clk_rcg2_ops, 955 986 }, 956 987 }; ··· 967 998 .cmd_rcgr = 0x2e004, 968 999 .mnd_width = 0, 969 1000 .hid_width = 5, 970 - .parent_map = gcc_parent_map_11, 1001 + .parent_map = gcc_parent_map_10, 971 1002 .freq_tbl = ftbl_gcc_system_noc_bfdcd_clk_src, 972 1003 .clkr.hw.init = &(const struct clk_init_data) { 973 1004 .name = "gcc_system_noc_bfdcd_clk_src", 974 - .parent_data = gcc_parent_data_11, 975 - .num_parents = ARRAY_SIZE(gcc_parent_data_11), 1005 + .parent_data = gcc_parent_data_10, 1006 + .num_parents = ARRAY_SIZE(gcc_parent_data_10), 976 1007 .ops = &clk_rcg2_ops, 977 1008 }, 978 1009 }; ··· 1008 1039 .cmd_rcgr = 0x2c018, 1009 1040 .mnd_width = 16, 1010 1041 .hid_width = 5, 1011 - .parent_map = gcc_parent_map_12, 1042 + .parent_map = gcc_parent_map_11, 1012 1043 .freq_tbl = ftbl_gcc_pcie_aux_clk_src, 1013 1044 .clkr.hw.init = &(const struct clk_init_data) { 1014 1045 .name = "gcc_usb0_aux_clk_src", 1015 - .parent_data = gcc_parent_data_12, 1016 - .num_parents = ARRAY_SIZE(gcc_parent_data_12), 1046 + .parent_data = gcc_parent_data_11, 1047 + .num_parents = ARRAY_SIZE(gcc_parent_data_11), 1017 1048 .ops = &clk_rcg2_ops, 1018 1049 }, 1019 1050 }; ··· 1060 1091 .cmd_rcgr = 0x2c02c, 1061 1092 .mnd_width = 8, 1062 1093 .hid_width = 5, 1063 - .parent_map = gcc_parent_map_13, 1094 + .parent_map = gcc_parent_map_12, 1064 1095 .freq_tbl = ftbl_gcc_usb0_mock_utmi_clk_src, 1065 1096 .clkr.hw.init = &(const struct clk_init_data) { 1066 1097 .name = "gcc_usb0_mock_utmi_clk_src", 1067 - .parent_data = gcc_parent_data_13, 1068 - .num_parents = ARRAY_SIZE(gcc_parent_data_13), 1098 + .parent_data = gcc_parent_data_12, 1099 + .num_parents = ARRAY_SIZE(gcc_parent_data_12), 1069 1100 .ops = &clk_rcg2_ops, 1070 1101 }, 1071 1102 }; ··· 1596 1627 .name = "gcc_mdio_slave_ahb_clk", 1597 1628 .parent_hws = (const struct clk_hw*[]) { 1598 1629 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 1599 - }, 1600 - .num_parents = 1, 1601 - .flags = CLK_SET_RATE_PARENT, 1602 - .ops = &clk_branch2_ops, 1603 - }, 1604 - }, 1605 - }; 1606 - 1607 - static struct clk_branch gcc_mem_noc_q6_axi_clk = { 1608 - .halt_reg = 0x19010, 1609 - .halt_check = BRANCH_HALT, 1610 - .clkr = { 1611 - .enable_reg = 0x19010, 1612 - .enable_mask = BIT(0), 1613 - .hw.init = &(const struct clk_init_data) { 1614 - .name = "gcc_mem_noc_q6_axi_clk", 1615 - .parent_hws = (const struct clk_hw*[]) { 1616 - &gcc_q6_axim_clk_src.clkr.hw, 1617 - }, 1618 - .num_parents = 1, 1619 - .flags = CLK_SET_RATE_PARENT, 1620 - .ops = &clk_branch2_ops, 1621 - }, 1622 - }, 1623 - }; 1624 - 1625 - static struct clk_branch gcc_mem_noc_ts_clk = { 1626 - .halt_reg = 0x19028, 1627 - .halt_check = BRANCH_HALT_VOTED, 1628 - .clkr = { 1629 - .enable_reg = 0x19028, 1630 - .enable_mask = BIT(0), 1631 - .hw.init = &(const struct clk_init_data) { 1632 - .name = "gcc_mem_noc_ts_clk", 1633 - .parent_hws = (const struct clk_hw*[]) { 1634 - &gcc_qdss_tsctr_div8_clk_src.hw, 1635 1630 }, 1636 1631 .num_parents = 1, 1637 1632 .flags = CLK_SET_RATE_PARENT, ··· 3272 3339 }, 3273 3340 }; 3274 3341 3275 - static struct clk_branch gcc_mem_noc_ahb_clk = { 3276 - .halt_reg = 0x1900c, 3277 - .halt_check = BRANCH_HALT, 3278 - .clkr = { 3279 - .enable_reg = 0x1900c, 3280 - .enable_mask = BIT(0), 3281 - .hw.init = &(const struct clk_init_data) { 3282 - .name = "gcc_mem_noc_ahb_clk", 3283 - .parent_hws = (const struct clk_hw*[]) { 3284 - &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 3285 - }, 3286 - .num_parents = 1, 3287 - .flags = CLK_SET_RATE_PARENT, 3288 - .ops = &clk_branch2_ops, 3289 - }, 3290 - }, 3291 - }; 3292 - 3293 - static struct clk_branch gcc_mem_noc_apss_axi_clk = { 3294 - .halt_reg = 0x1901c, 3295 - .halt_check = BRANCH_HALT_VOTED, 3296 - .clkr = { 3297 - .enable_reg = 0xb004, 3298 - .enable_mask = BIT(6), 3299 - .hw.init = &(const struct clk_init_data) { 3300 - .name = "gcc_mem_noc_apss_axi_clk", 3301 - .parent_hws = (const struct clk_hw*[]) { 3302 - &gcc_apss_axi_clk_src.clkr.hw, 3303 - }, 3304 - .num_parents = 1, 3305 - .flags = CLK_SET_RATE_PARENT, 3306 - .ops = &clk_branch2_ops, 3307 - }, 3308 - }, 3309 - }; 3310 - 3311 3342 static struct clk_regmap_div gcc_snoc_qosgen_extref_div_clk_src = { 3312 3343 .reg = 0x2e010, 3313 3344 .shift = 0, ··· 3287 3390 }, 3288 3391 }; 3289 3392 3290 - static struct clk_branch gcc_mem_noc_qosgen_extref_clk = { 3291 - .halt_reg = 0x19024, 3292 - .halt_check = BRANCH_HALT, 3293 - .clkr = { 3294 - .enable_reg = 0x19024, 3295 - .enable_mask = BIT(0), 3296 - .hw.init = &(const struct clk_init_data) { 3297 - .name = "gcc_mem_noc_qosgen_extref_clk", 3298 - .parent_hws = (const struct clk_hw*[]) { 3299 - &gcc_snoc_qosgen_extref_div_clk_src.clkr.hw, 3300 - }, 3301 - .num_parents = 1, 3302 - .flags = CLK_SET_RATE_PARENT, 3303 - .ops = &clk_branch2_ops, 3304 - }, 3305 - }, 3306 - }; 3307 - 3308 3393 static struct clk_regmap *gcc_ipq5332_clocks[] = { 3309 3394 [GPLL0_MAIN] = &gpll0_main.clkr, 3310 3395 [GPLL0] = &gpll0.clkr, ··· 3297 3418 [GCC_ADSS_PWM_CLK] = &gcc_adss_pwm_clk.clkr, 3298 3419 [GCC_ADSS_PWM_CLK_SRC] = &gcc_adss_pwm_clk_src.clkr, 3299 3420 [GCC_AHB_CLK] = &gcc_ahb_clk.clkr, 3300 - [GCC_APSS_AXI_CLK_SRC] = &gcc_apss_axi_clk_src.clkr, 3301 3421 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr, 3302 3422 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr, 3303 3423 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr, ··· 3329 3451 [GCC_LPASS_SWAY_CLK_SRC] = &gcc_lpass_sway_clk_src.clkr, 3330 3452 [GCC_MDIO_AHB_CLK] = &gcc_mdio_ahb_clk.clkr, 3331 3453 [GCC_MDIO_SLAVE_AHB_CLK] = &gcc_mdio_slave_ahb_clk.clkr, 3332 - [GCC_MEM_NOC_Q6_AXI_CLK] = &gcc_mem_noc_q6_axi_clk.clkr, 3333 - [GCC_MEM_NOC_TS_CLK] = &gcc_mem_noc_ts_clk.clkr, 3334 3454 [GCC_NSS_TS_CLK] = &gcc_nss_ts_clk.clkr, 3335 3455 [GCC_NSS_TS_CLK_SRC] = &gcc_nss_ts_clk_src.clkr, 3336 3456 [GCC_NSSCC_CLK] = &gcc_nsscc_clk.clkr, ··· 3449 3573 [GCC_XO_DIV4_CLK] = &gcc_xo_div4_clk.clkr, 3450 3574 [GCC_IM_SLEEP_CLK] = &gcc_im_sleep_clk.clkr, 3451 3575 [GCC_NSSNOC_PCNOC_1_CLK] = &gcc_nssnoc_pcnoc_1_clk.clkr, 3452 - [GCC_MEM_NOC_AHB_CLK] = &gcc_mem_noc_ahb_clk.clkr, 3453 - [GCC_MEM_NOC_APSS_AXI_CLK] = &gcc_mem_noc_apss_axi_clk.clkr, 3454 3576 [GCC_SNOC_QOSGEN_EXTREF_DIV_CLK_SRC] = &gcc_snoc_qosgen_extref_div_clk_src.clkr, 3455 - [GCC_MEM_NOC_QOSGEN_EXTREF_CLK] = &gcc_mem_noc_qosgen_extref_clk.clkr, 3456 3577 [GCC_PCIE3X2_PIPE_CLK_SRC] = &gcc_pcie3x2_pipe_clk_src.clkr, 3457 3578 [GCC_PCIE3X1_0_PIPE_CLK_SRC] = &gcc_pcie3x1_0_pipe_clk_src.clkr, 3458 3579 [GCC_PCIE3X1_1_PIPE_CLK_SRC] = &gcc_pcie3x1_1_pipe_clk_src.clkr,
-1
drivers/clk/qcom/gcc-ipq6018.c
··· 8 8 #include <linux/platform_device.h> 9 9 #include <linux/module.h> 10 10 #include <linux/of.h> 11 - #include <linux/of_device.h> 12 11 #include <linux/clk-provider.h> 13 12 #include <linux/regmap.h> 14 13
+1 -1
drivers/clk/qcom/gcc-ipq806x.c
··· 9 9 #include <linux/platform_device.h> 10 10 #include <linux/module.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 12 + #include <linux/of_platform.h> 13 13 #include <linux/clk-provider.h> 14 14 #include <linux/regmap.h> 15 15 #include <linux/reset-controller.h>
-1
drivers/clk/qcom/gcc-ipq8074.c
··· 8 8 #include <linux/platform_device.h> 9 9 #include <linux/module.h> 10 10 #include <linux/of.h> 11 - #include <linux/of_device.h> 12 11 #include <linux/clk-provider.h> 13 12 #include <linux/regmap.h> 14 13
+37
drivers/clk/qcom/gcc-ipq9574.c
··· 2004 2004 }, 2005 2005 }; 2006 2006 2007 + static struct clk_branch gcc_usb0_pipe_clk = { 2008 + .halt_reg = 0x2c054, 2009 + .halt_check = BRANCH_HALT_DELAY, 2010 + .clkr = { 2011 + .enable_reg = 0x2c054, 2012 + .enable_mask = BIT(0), 2013 + .hw.init = &(const struct clk_init_data){ 2014 + .name = "gcc_usb0_pipe_clk", 2015 + .parent_hws = (const struct clk_hw *[]) { 2016 + &usb0_pipe_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_usb0_sleep_clk = { 2026 + .halt_reg = 0x2c058, 2027 + .clkr = { 2028 + .enable_reg = 0x2c058, 2029 + .enable_mask = BIT(0), 2030 + .hw.init = &(const struct clk_init_data){ 2031 + .name = "gcc_usb0_sleep_clk", 2032 + .parent_hws = (const struct clk_hw *[]) { 2033 + &gcc_sleep_clk_src.clkr.hw 2034 + }, 2035 + .num_parents = 1, 2036 + .flags = CLK_SET_RATE_PARENT, 2037 + .ops = &clk_branch2_ops, 2038 + }, 2039 + }, 2040 + }; 2041 + 2007 2042 static const struct freq_tbl ftbl_sdcc_apps_clk_src[] = { 2008 2043 F(144000, P_XO, 16, 12, 125), 2009 2044 F(400000, P_XO, 12, 1, 5), ··· 4038 4003 [GCC_USB0_MOCK_UTMI_CLK] = &gcc_usb0_mock_utmi_clk.clkr, 4039 4004 [USB0_PIPE_CLK_SRC] = &usb0_pipe_clk_src.clkr, 4040 4005 [GCC_USB0_PHY_CFG_AHB_CLK] = &gcc_usb0_phy_cfg_ahb_clk.clkr, 4006 + [GCC_USB0_PIPE_CLK] = &gcc_usb0_pipe_clk.clkr, 4007 + [GCC_USB0_SLEEP_CLK] = &gcc_usb0_sleep_clk.clkr, 4041 4008 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr, 4042 4009 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 4043 4010 [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
-1
drivers/clk/qcom/gcc-mdm9607.c
··· 9 9 #include <linux/platform_device.h> 10 10 #include <linux/module.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/clk-provider.h> 14 13 #include <linux/regmap.h> 15 14 #include <linux/reset-controller.h>
+143 -119
drivers/clk/qcom/gcc-mdm9615.c
··· 11 11 #include <linux/platform_device.h> 12 12 #include <linux/module.h> 13 13 #include <linux/of.h> 14 - #include <linux/of_device.h> 15 14 #include <linux/clk-provider.h> 16 15 #include <linux/regmap.h> 17 16 #include <linux/reset-controller.h> ··· 25 26 #include "clk-branch.h" 26 27 #include "reset.h" 27 28 28 - static struct clk_fixed_factor cxo = { 29 - .mult = 1, 30 - .div = 1, 31 - .hw.init = &(struct clk_init_data){ 32 - .name = "cxo", 33 - .parent_names = (const char *[]){ "cxo_board" }, 34 - .num_parents = 1, 35 - .ops = &clk_fixed_factor_ops, 36 - }, 29 + enum { 30 + DT_CXO, 31 + DT_PLL4, 32 + }; 33 + 34 + enum { 35 + P_CXO, 36 + P_PLL8, 37 + P_PLL14, 38 + }; 39 + 40 + static const struct parent_map gcc_cxo_map[] = { 41 + { P_CXO, 0 }, 42 + }; 43 + 44 + static const struct clk_parent_data gcc_cxo[] = { 45 + { .index = DT_CXO, .name = "cxo_board" }, 37 46 }; 38 47 39 48 static struct clk_pll pll0 = { ··· 54 47 .status_bit = 16, 55 48 .clkr.hw.init = &(struct clk_init_data){ 56 49 .name = "pll0", 57 - .parent_names = (const char *[]){ "cxo" }, 58 - .num_parents = 1, 50 + .parent_data = gcc_cxo, 51 + .num_parents = ARRAY_SIZE(gcc_cxo), 59 52 .ops = &clk_pll_ops, 60 53 }, 61 54 }; ··· 65 58 .enable_mask = BIT(0), 66 59 .hw.init = &(struct clk_init_data){ 67 60 .name = "pll0_vote", 68 - .parent_names = (const char *[]){ "pll8" }, 61 + .parent_hws = (const struct clk_hw*[]) { 62 + &pll0.clkr.hw, 63 + }, 69 64 .num_parents = 1, 70 65 .ops = &clk_pll_vote_ops, 71 66 }, ··· 78 69 .enable_mask = BIT(4), 79 70 .hw.init = &(struct clk_init_data){ 80 71 .name = "pll4_vote", 81 - .parent_names = (const char *[]){ "pll4" }, 72 + .parent_data = &(const struct clk_parent_data) { 73 + .index = DT_PLL4, .name = "pll4", 74 + }, 82 75 .num_parents = 1, 83 76 .ops = &clk_pll_vote_ops, 84 77 }, ··· 96 85 .status_bit = 16, 97 86 .clkr.hw.init = &(struct clk_init_data){ 98 87 .name = "pll8", 99 - .parent_names = (const char *[]){ "cxo" }, 100 - .num_parents = 1, 88 + .parent_data = gcc_cxo, 89 + .num_parents = ARRAY_SIZE(gcc_cxo), 101 90 .ops = &clk_pll_ops, 102 91 }, 103 92 }; ··· 107 96 .enable_mask = BIT(8), 108 97 .hw.init = &(struct clk_init_data){ 109 98 .name = "pll8_vote", 110 - .parent_names = (const char *[]){ "pll8" }, 99 + .parent_hws = (const struct clk_hw*[]) { 100 + &pll8.clkr.hw, 101 + }, 111 102 .num_parents = 1, 112 103 .ops = &clk_pll_vote_ops, 113 104 }, ··· 125 112 .status_bit = 16, 126 113 .clkr.hw.init = &(struct clk_init_data){ 127 114 .name = "pll14", 128 - .parent_names = (const char *[]){ "cxo" }, 129 - .num_parents = 1, 115 + .parent_data = gcc_cxo, 116 + .num_parents = ARRAY_SIZE(gcc_cxo), 130 117 .ops = &clk_pll_ops, 131 118 }, 132 119 }; ··· 136 123 .enable_mask = BIT(11), 137 124 .hw.init = &(struct clk_init_data){ 138 125 .name = "pll14_vote", 139 - .parent_names = (const char *[]){ "pll14" }, 126 + .parent_hws = (const struct clk_hw*[]) { 127 + &pll14.clkr.hw, 128 + }, 140 129 .num_parents = 1, 141 130 .ops = &clk_pll_vote_ops, 142 131 }, 143 - }; 144 - 145 - enum { 146 - P_CXO, 147 - P_PLL8, 148 - P_PLL14, 149 132 }; 150 133 151 134 static const struct parent_map gcc_cxo_pll8_map[] = { ··· 149 140 { P_PLL8, 3 } 150 141 }; 151 142 152 - static const char * const gcc_cxo_pll8[] = { 153 - "cxo", 154 - "pll8_vote", 143 + static const struct clk_parent_data gcc_cxo_pll8[] = { 144 + { .index = DT_CXO, .name = "cxo_board" }, 145 + { .hw = &pll8_vote.hw }, 155 146 }; 156 147 157 148 static const struct parent_map gcc_cxo_pll14_map[] = { ··· 159 150 { P_PLL14, 4 } 160 151 }; 161 152 162 - static const char * const gcc_cxo_pll14[] = { 163 - "cxo", 164 - "pll14_vote", 165 - }; 166 - 167 - static const struct parent_map gcc_cxo_map[] = { 168 - { P_CXO, 0 }, 169 - }; 170 - 171 - static const char * const gcc_cxo[] = { 172 - "cxo", 153 + static const struct clk_parent_data gcc_cxo_pll14[] = { 154 + { .index = DT_CXO, .name = "cxo_board" }, 155 + { .hw = &pll14_vote.hw }, 173 156 }; 174 157 175 158 static struct freq_tbl clk_tbl_gsbi_uart[] = { ··· 207 206 .enable_mask = BIT(11), 208 207 .hw.init = &(struct clk_init_data){ 209 208 .name = "gsbi1_uart_src", 210 - .parent_names = gcc_cxo_pll8, 211 - .num_parents = 2, 209 + .parent_data = gcc_cxo_pll8, 210 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 212 211 .ops = &clk_rcg_ops, 213 212 .flags = CLK_SET_PARENT_GATE, 214 213 }, ··· 223 222 .enable_mask = BIT(9), 224 223 .hw.init = &(struct clk_init_data){ 225 224 .name = "gsbi1_uart_clk", 226 - .parent_names = (const char *[]){ 227 - "gsbi1_uart_src", 225 + .parent_hws = (const struct clk_hw*[]) { 226 + &gsbi1_uart_src.clkr.hw, 228 227 }, 229 228 .num_parents = 1, 230 229 .ops = &clk_branch_ops, ··· 258 257 .enable_mask = BIT(11), 259 258 .hw.init = &(struct clk_init_data){ 260 259 .name = "gsbi2_uart_src", 261 - .parent_names = gcc_cxo_pll8, 262 - .num_parents = 2, 260 + .parent_data = gcc_cxo_pll8, 261 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 263 262 .ops = &clk_rcg_ops, 264 263 .flags = CLK_SET_PARENT_GATE, 265 264 }, ··· 274 273 .enable_mask = BIT(9), 275 274 .hw.init = &(struct clk_init_data){ 276 275 .name = "gsbi2_uart_clk", 277 - .parent_names = (const char *[]){ 278 - "gsbi2_uart_src", 276 + .parent_hws = (const struct clk_hw*[]) { 277 + &gsbi2_uart_src.clkr.hw, 279 278 }, 280 279 .num_parents = 1, 281 280 .ops = &clk_branch_ops, ··· 309 308 .enable_mask = BIT(11), 310 309 .hw.init = &(struct clk_init_data){ 311 310 .name = "gsbi3_uart_src", 312 - .parent_names = gcc_cxo_pll8, 313 - .num_parents = 2, 311 + .parent_data = gcc_cxo_pll8, 312 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 314 313 .ops = &clk_rcg_ops, 315 314 .flags = CLK_SET_PARENT_GATE, 316 315 }, ··· 325 324 .enable_mask = BIT(9), 326 325 .hw.init = &(struct clk_init_data){ 327 326 .name = "gsbi3_uart_clk", 328 - .parent_names = (const char *[]){ 329 - "gsbi3_uart_src", 327 + .parent_hws = (const struct clk_hw*[]) { 328 + &gsbi3_uart_src.clkr.hw, 330 329 }, 331 330 .num_parents = 1, 332 331 .ops = &clk_branch_ops, ··· 360 359 .enable_mask = BIT(11), 361 360 .hw.init = &(struct clk_init_data){ 362 361 .name = "gsbi4_uart_src", 363 - .parent_names = gcc_cxo_pll8, 364 - .num_parents = 2, 362 + .parent_data = gcc_cxo_pll8, 363 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 365 364 .ops = &clk_rcg_ops, 366 365 .flags = CLK_SET_PARENT_GATE, 367 366 }, ··· 376 375 .enable_mask = BIT(9), 377 376 .hw.init = &(struct clk_init_data){ 378 377 .name = "gsbi4_uart_clk", 379 - .parent_names = (const char *[]){ 380 - "gsbi4_uart_src", 378 + .parent_hws = (const struct clk_hw*[]) { 379 + &gsbi4_uart_src.clkr.hw, 381 380 }, 382 381 .num_parents = 1, 383 382 .ops = &clk_branch_ops, ··· 411 410 .enable_mask = BIT(11), 412 411 .hw.init = &(struct clk_init_data){ 413 412 .name = "gsbi5_uart_src", 414 - .parent_names = gcc_cxo_pll8, 415 - .num_parents = 2, 413 + .parent_data = gcc_cxo_pll8, 414 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 416 415 .ops = &clk_rcg_ops, 417 416 .flags = CLK_SET_PARENT_GATE, 418 417 }, ··· 427 426 .enable_mask = BIT(9), 428 427 .hw.init = &(struct clk_init_data){ 429 428 .name = "gsbi5_uart_clk", 430 - .parent_names = (const char *[]){ 431 - "gsbi5_uart_src", 429 + .parent_hws = (const struct clk_hw*[]) { 430 + &gsbi5_uart_src.clkr.hw, 432 431 }, 433 432 .num_parents = 1, 434 433 .ops = &clk_branch_ops, ··· 474 473 .enable_mask = BIT(11), 475 474 .hw.init = &(struct clk_init_data){ 476 475 .name = "gsbi1_qup_src", 477 - .parent_names = gcc_cxo_pll8, 478 - .num_parents = 2, 476 + .parent_data = gcc_cxo_pll8, 477 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 479 478 .ops = &clk_rcg_ops, 480 479 .flags = CLK_SET_PARENT_GATE, 481 480 }, ··· 490 489 .enable_mask = BIT(9), 491 490 .hw.init = &(struct clk_init_data){ 492 491 .name = "gsbi1_qup_clk", 493 - .parent_names = (const char *[]){ "gsbi1_qup_src" }, 492 + .parent_hws = (const struct clk_hw*[]) { 493 + &gsbi1_qup_src.clkr.hw, 494 + }, 494 495 .num_parents = 1, 495 496 .ops = &clk_branch_ops, 496 497 .flags = CLK_SET_RATE_PARENT, ··· 525 522 .enable_mask = BIT(11), 526 523 .hw.init = &(struct clk_init_data){ 527 524 .name = "gsbi2_qup_src", 528 - .parent_names = gcc_cxo_pll8, 529 - .num_parents = 2, 525 + .parent_data = gcc_cxo_pll8, 526 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 530 527 .ops = &clk_rcg_ops, 531 528 .flags = CLK_SET_PARENT_GATE, 532 529 }, ··· 541 538 .enable_mask = BIT(9), 542 539 .hw.init = &(struct clk_init_data){ 543 540 .name = "gsbi2_qup_clk", 544 - .parent_names = (const char *[]){ "gsbi2_qup_src" }, 541 + .parent_hws = (const struct clk_hw*[]) { 542 + &gsbi2_qup_src.clkr.hw, 543 + }, 545 544 .num_parents = 1, 546 545 .ops = &clk_branch_ops, 547 546 .flags = CLK_SET_RATE_PARENT, ··· 576 571 .enable_mask = BIT(11), 577 572 .hw.init = &(struct clk_init_data){ 578 573 .name = "gsbi3_qup_src", 579 - .parent_names = gcc_cxo_pll8, 580 - .num_parents = 2, 574 + .parent_data = gcc_cxo_pll8, 575 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 581 576 .ops = &clk_rcg_ops, 582 577 .flags = CLK_SET_PARENT_GATE, 583 578 }, ··· 592 587 .enable_mask = BIT(9), 593 588 .hw.init = &(struct clk_init_data){ 594 589 .name = "gsbi3_qup_clk", 595 - .parent_names = (const char *[]){ "gsbi3_qup_src" }, 590 + .parent_hws = (const struct clk_hw*[]) { 591 + &gsbi3_qup_src.clkr.hw, 592 + }, 596 593 .num_parents = 1, 597 594 .ops = &clk_branch_ops, 598 595 .flags = CLK_SET_RATE_PARENT, ··· 627 620 .enable_mask = BIT(11), 628 621 .hw.init = &(struct clk_init_data){ 629 622 .name = "gsbi4_qup_src", 630 - .parent_names = gcc_cxo_pll8, 631 - .num_parents = 2, 623 + .parent_data = gcc_cxo_pll8, 624 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 632 625 .ops = &clk_rcg_ops, 633 626 .flags = CLK_SET_PARENT_GATE, 634 627 }, ··· 643 636 .enable_mask = BIT(9), 644 637 .hw.init = &(struct clk_init_data){ 645 638 .name = "gsbi4_qup_clk", 646 - .parent_names = (const char *[]){ "gsbi4_qup_src" }, 639 + .parent_hws = (const struct clk_hw*[]) { 640 + &gsbi4_qup_src.clkr.hw, 641 + }, 647 642 .num_parents = 1, 648 643 .ops = &clk_branch_ops, 649 644 .flags = CLK_SET_RATE_PARENT, ··· 678 669 .enable_mask = BIT(11), 679 670 .hw.init = &(struct clk_init_data){ 680 671 .name = "gsbi5_qup_src", 681 - .parent_names = gcc_cxo_pll8, 682 - .num_parents = 2, 672 + .parent_data = gcc_cxo_pll8, 673 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 683 674 .ops = &clk_rcg_ops, 684 675 .flags = CLK_SET_PARENT_GATE, 685 676 }, ··· 694 685 .enable_mask = BIT(9), 695 686 .hw.init = &(struct clk_init_data){ 696 687 .name = "gsbi5_qup_clk", 697 - .parent_names = (const char *[]){ "gsbi5_qup_src" }, 688 + .parent_hws = (const struct clk_hw*[]) { 689 + &gsbi5_qup_src.clkr.hw, 690 + }, 698 691 .num_parents = 1, 699 692 .ops = &clk_branch_ops, 700 693 .flags = CLK_SET_RATE_PARENT, ··· 735 724 .enable_mask = BIT(11), 736 725 .hw.init = &(struct clk_init_data){ 737 726 .name = "gp0_src", 738 - .parent_names = gcc_cxo, 739 - .num_parents = 1, 727 + .parent_data = gcc_cxo, 728 + .num_parents = ARRAY_SIZE(gcc_cxo), 740 729 .ops = &clk_rcg_ops, 741 730 .flags = CLK_SET_PARENT_GATE, 742 731 }, ··· 751 740 .enable_mask = BIT(9), 752 741 .hw.init = &(struct clk_init_data){ 753 742 .name = "gp0_clk", 754 - .parent_names = (const char *[]){ "gp0_src" }, 743 + .parent_hws = (const struct clk_hw*[]) { 744 + &gp0_src.clkr.hw, 745 + }, 755 746 .num_parents = 1, 756 747 .ops = &clk_branch_ops, 757 748 .flags = CLK_SET_RATE_PARENT, ··· 786 773 .enable_mask = BIT(11), 787 774 .hw.init = &(struct clk_init_data){ 788 775 .name = "gp1_src", 789 - .parent_names = gcc_cxo, 790 - .num_parents = 1, 776 + .parent_data = gcc_cxo, 777 + .num_parents = ARRAY_SIZE(gcc_cxo), 791 778 .ops = &clk_rcg_ops, 792 779 .flags = CLK_SET_RATE_GATE, 793 780 }, ··· 802 789 .enable_mask = BIT(9), 803 790 .hw.init = &(struct clk_init_data){ 804 791 .name = "gp1_clk", 805 - .parent_names = (const char *[]){ "gp1_src" }, 792 + .parent_hws = (const struct clk_hw*[]) { 793 + &gp1_src.clkr.hw, 794 + }, 806 795 .num_parents = 1, 807 796 .ops = &clk_branch_ops, 808 797 .flags = CLK_SET_RATE_PARENT, ··· 837 822 .enable_mask = BIT(11), 838 823 .hw.init = &(struct clk_init_data){ 839 824 .name = "gp2_src", 840 - .parent_names = gcc_cxo, 841 - .num_parents = 1, 825 + .parent_data = gcc_cxo, 826 + .num_parents = ARRAY_SIZE(gcc_cxo), 842 827 .ops = &clk_rcg_ops, 843 828 .flags = CLK_SET_RATE_GATE, 844 829 }, ··· 853 838 .enable_mask = BIT(9), 854 839 .hw.init = &(struct clk_init_data){ 855 840 .name = "gp2_clk", 856 - .parent_names = (const char *[]){ "gp2_src" }, 841 + .parent_hws = (const struct clk_hw*[]) { 842 + &gp2_src.clkr.hw, 843 + }, 857 844 .num_parents = 1, 858 845 .ops = &clk_branch_ops, 859 846 .flags = CLK_SET_RATE_PARENT, ··· 891 874 .clkr = { 892 875 .hw.init = &(struct clk_init_data){ 893 876 .name = "prng_src", 894 - .parent_names = gcc_cxo_pll8, 895 - .num_parents = 2, 877 + .parent_data = gcc_cxo_pll8, 878 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 896 879 .ops = &clk_rcg_ops, 897 880 }, 898 881 }, ··· 907 890 .enable_mask = BIT(10), 908 891 .hw.init = &(struct clk_init_data){ 909 892 .name = "prng_clk", 910 - .parent_names = (const char *[]){ "prng_src" }, 893 + .parent_hws = (const struct clk_hw*[]) { 894 + &prng_src.clkr.hw, 895 + }, 911 896 .num_parents = 1, 912 897 .ops = &clk_branch_ops, 913 898 }, ··· 955 936 .enable_mask = BIT(11), 956 937 .hw.init = &(struct clk_init_data){ 957 938 .name = "sdc1_src", 958 - .parent_names = gcc_cxo_pll8, 959 - .num_parents = 2, 939 + .parent_data = gcc_cxo_pll8, 940 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 960 941 .ops = &clk_rcg_ops, 961 942 }, 962 943 } ··· 970 951 .enable_mask = BIT(9), 971 952 .hw.init = &(struct clk_init_data){ 972 953 .name = "sdc1_clk", 973 - .parent_names = (const char *[]){ "sdc1_src" }, 954 + .parent_hws = (const struct clk_hw*[]) { 955 + &sdc1_src.clkr.hw, 956 + }, 974 957 .num_parents = 1, 975 958 .ops = &clk_branch_ops, 976 959 .flags = CLK_SET_RATE_PARENT, ··· 1005 984 .enable_mask = BIT(11), 1006 985 .hw.init = &(struct clk_init_data){ 1007 986 .name = "sdc2_src", 1008 - .parent_names = gcc_cxo_pll8, 1009 - .num_parents = 2, 987 + .parent_data = gcc_cxo_pll8, 988 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 1010 989 .ops = &clk_rcg_ops, 1011 990 }, 1012 991 } ··· 1020 999 .enable_mask = BIT(9), 1021 1000 .hw.init = &(struct clk_init_data){ 1022 1001 .name = "sdc2_clk", 1023 - .parent_names = (const char *[]){ "sdc2_src" }, 1002 + .parent_hws = (const struct clk_hw*[]) { 1003 + &sdc2_src.clkr.hw, 1004 + }, 1024 1005 .num_parents = 1, 1025 1006 .ops = &clk_branch_ops, 1026 1007 .flags = CLK_SET_RATE_PARENT, ··· 1060 1037 .enable_mask = BIT(11), 1061 1038 .hw.init = &(struct clk_init_data){ 1062 1039 .name = "usb_hs1_xcvr_src", 1063 - .parent_names = gcc_cxo_pll8, 1064 - .num_parents = 2, 1040 + .parent_data = gcc_cxo_pll8, 1041 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 1065 1042 .ops = &clk_rcg_ops, 1066 1043 .flags = CLK_SET_RATE_GATE, 1067 1044 }, ··· 1076 1053 .enable_mask = BIT(9), 1077 1054 .hw.init = &(struct clk_init_data){ 1078 1055 .name = "usb_hs1_xcvr_clk", 1079 - .parent_names = (const char *[]){ "usb_hs1_xcvr_src" }, 1056 + .parent_hws = (const struct clk_hw*[]) { 1057 + &usb_hs1_xcvr_src.clkr.hw, 1058 + }, 1080 1059 .num_parents = 1, 1081 1060 .ops = &clk_branch_ops, 1082 1061 .flags = CLK_SET_RATE_PARENT, ··· 1111 1086 .enable_mask = BIT(11), 1112 1087 .hw.init = &(struct clk_init_data){ 1113 1088 .name = "usb_hsic_xcvr_fs_src", 1114 - .parent_names = gcc_cxo_pll8, 1115 - .num_parents = 2, 1089 + .parent_data = gcc_cxo_pll8, 1090 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 1116 1091 .ops = &clk_rcg_ops, 1117 1092 .flags = CLK_SET_RATE_GATE, 1118 1093 }, ··· 1127 1102 .enable_mask = BIT(9), 1128 1103 .hw.init = &(struct clk_init_data){ 1129 1104 .name = "usb_hsic_xcvr_fs_clk", 1130 - .parent_names = 1131 - (const char *[]){ "usb_hsic_xcvr_fs_src" }, 1105 + .parent_hws = (const struct clk_hw*[]) { 1106 + &usb_hsic_xcvr_fs_src.clkr.hw, 1107 + }, 1132 1108 .num_parents = 1, 1133 1109 .ops = &clk_branch_ops, 1134 1110 .flags = CLK_SET_RATE_PARENT, ··· 1167 1141 .enable_mask = BIT(11), 1168 1142 .hw.init = &(struct clk_init_data){ 1169 1143 .name = "usb_hs1_system_src", 1170 - .parent_names = gcc_cxo_pll8, 1171 - .num_parents = 2, 1144 + .parent_data = gcc_cxo_pll8, 1145 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 1172 1146 .ops = &clk_rcg_ops, 1173 1147 .flags = CLK_SET_RATE_GATE, 1174 1148 }, ··· 1182 1156 .enable_reg = 0x36a4, 1183 1157 .enable_mask = BIT(9), 1184 1158 .hw.init = &(struct clk_init_data){ 1185 - .parent_names = 1186 - (const char *[]){ "usb_hs1_system_src" }, 1159 + .parent_hws = (const struct clk_hw*[]) { 1160 + &usb_hs1_system_src.clkr.hw, 1161 + }, 1187 1162 .num_parents = 1, 1188 1163 .name = "usb_hs1_system_clk", 1189 1164 .ops = &clk_branch_ops, ··· 1223 1196 .enable_mask = BIT(11), 1224 1197 .hw.init = &(struct clk_init_data){ 1225 1198 .name = "usb_hsic_system_src", 1226 - .parent_names = gcc_cxo_pll8, 1227 - .num_parents = 2, 1199 + .parent_data = gcc_cxo_pll8, 1200 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 1228 1201 .ops = &clk_rcg_ops, 1229 1202 .flags = CLK_SET_RATE_GATE, 1230 1203 }, ··· 1238 1211 .enable_reg = 0x2b58, 1239 1212 .enable_mask = BIT(9), 1240 1213 .hw.init = &(struct clk_init_data){ 1241 - .parent_names = 1242 - (const char *[]){ "usb_hsic_system_src" }, 1214 + .parent_hws = (const struct clk_hw*[]) { 1215 + &usb_hsic_system_src.clkr.hw, 1216 + }, 1243 1217 .num_parents = 1, 1244 1218 .name = "usb_hsic_system_clk", 1245 1219 .ops = &clk_branch_ops, ··· 1279 1251 .enable_mask = BIT(11), 1280 1252 .hw.init = &(struct clk_init_data){ 1281 1253 .name = "usb_hsic_hsic_src", 1282 - .parent_names = gcc_cxo_pll14, 1283 - .num_parents = 2, 1254 + .parent_data = gcc_cxo_pll14, 1255 + .num_parents = ARRAY_SIZE(gcc_cxo_pll14), 1284 1256 .ops = &clk_rcg_ops, 1285 1257 .flags = CLK_SET_RATE_GATE, 1286 1258 }, ··· 1293 1265 .enable_reg = 0x2b50, 1294 1266 .enable_mask = BIT(9), 1295 1267 .hw.init = &(struct clk_init_data){ 1296 - .parent_names = (const char *[]){ "usb_hsic_hsic_src" }, 1268 + .parent_hws = (const struct clk_hw*[]) { 1269 + &usb_hsic_hsic_src.clkr.hw, 1270 + }, 1297 1271 .num_parents = 1, 1298 1272 .name = "usb_hsic_hsic_clk", 1299 1273 .ops = &clk_branch_ops, ··· 1311 1281 .enable_reg = 0x2b48, 1312 1282 .enable_mask = BIT(0), 1313 1283 .hw.init = &(struct clk_init_data){ 1314 - .parent_names = (const char *[]){ "cxo" }, 1315 - .num_parents = 1, 1284 + .parent_data = gcc_cxo, 1285 + .num_parents = ARRAY_SIZE(gcc_cxo), 1316 1286 .name = "usb_hsic_hsio_cal_clk", 1317 1287 .ops = &clk_branch_ops, 1318 1288 }, ··· 1611 1581 }, 1612 1582 }; 1613 1583 1614 - static struct clk_hw *gcc_mdm9615_hws[] = { 1615 - &cxo.hw, 1616 - }; 1617 - 1618 1584 static struct clk_regmap *gcc_mdm9615_clks[] = { 1619 1585 [PLL0] = &pll0.clkr, 1620 1586 [PLL0_VOTE] = &pll0_vote, ··· 1720 1694 .num_clks = ARRAY_SIZE(gcc_mdm9615_clks), 1721 1695 .resets = gcc_mdm9615_resets, 1722 1696 .num_resets = ARRAY_SIZE(gcc_mdm9615_resets), 1723 - .clk_hws = gcc_mdm9615_hws, 1724 - .num_clk_hws = ARRAY_SIZE(gcc_mdm9615_hws), 1725 1697 }; 1726 1698 1727 1699 static const struct of_device_id gcc_mdm9615_match_table[] = {
-1
drivers/clk/qcom/gcc-msm8660.c
··· 9 9 #include <linux/platform_device.h> 10 10 #include <linux/module.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/clk-provider.h> 14 13 #include <linux/regmap.h> 15 14 #include <linux/reset-controller.h>
-1
drivers/clk/qcom/gcc-msm8909.c
··· 14 14 #include <linux/kernel.h> 15 15 #include <linux/module.h> 16 16 #include <linux/of.h> 17 - #include <linux/of_device.h> 18 17 #include <linux/platform_device.h> 19 18 #include <linux/regmap.h> 20 19 #include <linux/reset-controller.h>
-1
drivers/clk/qcom/gcc-msm8916.c
··· 9 9 #include <linux/platform_device.h> 10 10 #include <linux/module.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/clk-provider.h> 14 13 #include <linux/regmap.h> 15 14 #include <linux/reset-controller.h>
+2 -2
drivers/clk/qcom/gcc-msm8917.c
··· 18 18 #include <linux/kernel.h> 19 19 #include <linux/module.h> 20 20 #include <linux/of.h> 21 - #include <linux/of_device.h> 22 21 #include <linux/platform_device.h> 23 22 #include <linux/regmap.h> 24 23 #include <linux/reset-controller.h> ··· 63 64 .index = DT_XO, 64 65 }, 65 66 .num_parents = 1, 66 - .ops = &clk_alpha_pll_ops, 67 + .ops = &clk_branch_simple_ops, 67 68 }, 68 69 }, 69 70 }; ··· 3041 3042 static struct clk_regmap *gcc_msm8917_clocks[] = { 3042 3043 [GPLL0] = &gpll0.clkr, 3043 3044 [GPLL0_EARLY] = &gpll0_early.clkr, 3045 + [GPLL0_SLEEP_CLK_SRC] = &gpll0_sleep_clk_src.clkr, 3044 3046 [GPLL3] = &gpll3.clkr, 3045 3047 [GPLL3_EARLY] = &gpll3_early.clkr, 3046 3048 [GPLL4] = &gpll4.clkr,
-1
drivers/clk/qcom/gcc-msm8939.c
··· 9 9 #include <linux/platform_device.h> 10 10 #include <linux/module.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/clk-provider.h> 14 13 #include <linux/regmap.h> 15 14 #include <linux/reset-controller.h>
-1
drivers/clk/qcom/gcc-msm8953.c
··· 7 7 #include <linux/module.h> 8 8 #include <linux/platform_device.h> 9 9 #include <linux/of.h> 10 - #include <linux/of_device.h> 11 10 #include <linux/clk-provider.h> 12 11 #include <linux/regmap.h> 13 12 #include <linux/reset-controller.h>
+1 -1
drivers/clk/qcom/gcc-msm8976.c
··· 15 15 #include <linux/err.h> 16 16 #include <linux/kernel.h> 17 17 #include <linux/module.h> 18 - #include <linux/of_device.h> 19 18 #include <linux/of.h> 19 + #include <linux/platform_device.h> 20 20 #include <linux/regmap.h> 21 21 22 22 #include <dt-bindings/clock/qcom,gcc-msm8976.h>
-1
drivers/clk/qcom/gcc-msm8994.c
··· 9 9 #include <linux/ctype.h> 10 10 #include <linux/io.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/platform_device.h> 14 13 #include <linux/module.h> 15 14 #include <linux/regmap.h>
-1
drivers/clk/qcom/gcc-msm8996.c
··· 9 9 #include <linux/platform_device.h> 10 10 #include <linux/module.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/clk-provider.h> 14 13 #include <linux/regmap.h> 15 14 #include <linux/reset-controller.h>
+61 -4
drivers/clk/qcom/gcc-msm8998.c
··· 9 9 #include <linux/platform_device.h> 10 10 #include <linux/module.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/clk-provider.h> 14 13 #include <linux/regmap.h> 15 14 #include <linux/reset-controller.h> ··· 23 24 #include "clk-branch.h" 24 25 #include "reset.h" 25 26 #include "gdsc.h" 27 + 28 + #define GCC_MMSS_MISC 0x0902C 29 + #define GCC_GPU_MISC 0x71028 26 30 27 31 static struct pll_vco fabia_vco[] = { 28 32 { 250000000, 2000000000, 0 }, ··· 1369 1367 }, 1370 1368 }; 1371 1369 1370 + static struct clk_branch gcc_mmss_gpll0_div_clk = { 1371 + .halt_check = BRANCH_HALT_DELAY, 1372 + .clkr = { 1373 + .enable_reg = 0x5200c, 1374 + .enable_mask = BIT(0), 1375 + .hw.init = &(struct clk_init_data){ 1376 + .name = "gcc_mmss_gpll0_div_clk", 1377 + .parent_hws = (const struct clk_hw *[]) { 1378 + &gpll0_out_main.clkr.hw, 1379 + }, 1380 + .num_parents = 1, 1381 + .ops = &clk_branch2_ops, 1382 + }, 1383 + }, 1384 + }; 1385 + 1372 1386 static struct clk_branch gcc_mmss_gpll0_clk = { 1373 1387 .halt_check = BRANCH_HALT_DELAY, 1374 1388 .clkr = { ··· 1408 1390 .enable_mask = BIT(2), 1409 1391 .hw.init = &(struct clk_init_data){ 1410 1392 .name = "gcc_mss_gpll0_div_clk_src", 1393 + .ops = &clk_branch2_ops, 1394 + }, 1395 + }, 1396 + }; 1397 + 1398 + static struct clk_branch gcc_gpu_gpll0_div_clk = { 1399 + .halt_check = BRANCH_HALT_DELAY, 1400 + .clkr = { 1401 + .enable_reg = 0x5200c, 1402 + .enable_mask = BIT(3), 1403 + .hw.init = &(struct clk_init_data){ 1404 + .name = "gcc_gpu_gpll0_div_clk", 1405 + .parent_hws = (const struct clk_hw *[]) { 1406 + &gpll0_out_main.clkr.hw, 1407 + }, 1408 + .num_parents = 1, 1409 + .ops = &clk_branch2_ops, 1410 + }, 1411 + }, 1412 + }; 1413 + 1414 + static struct clk_branch gcc_gpu_gpll0_clk = { 1415 + .halt_check = BRANCH_HALT_DELAY, 1416 + .clkr = { 1417 + .enable_reg = 0x5200c, 1418 + .enable_mask = BIT(4), 1419 + .hw.init = &(struct clk_init_data){ 1420 + .name = "gcc_gpu_gpll0_clk", 1421 + .parent_hws = (const struct clk_hw *[]) { 1422 + &gpll0_out_main.clkr.hw, 1423 + }, 1424 + .num_parents = 1, 1411 1425 .ops = &clk_branch2_ops, 1412 1426 }, 1413 1427 }, ··· 2111 2061 2112 2062 static struct clk_branch gcc_bimc_gfx_clk = { 2113 2063 .halt_reg = 0x46040, 2114 - .halt_check = BRANCH_HALT, 2064 + .halt_check = BRANCH_HALT_SKIP, 2115 2065 .clkr = { 2116 2066 .enable_reg = 0x46040, 2117 2067 .enable_mask = BIT(0), ··· 2124 2074 2125 2075 static struct clk_branch gcc_gpu_bimc_gfx_clk = { 2126 2076 .halt_reg = 0x71010, 2127 - .halt_check = BRANCH_HALT, 2077 + .halt_check = BRANCH_HALT_SKIP, 2128 2078 .clkr = { 2129 2079 .enable_reg = 0x71010, 2130 2080 .enable_mask = BIT(0), ··· 2150 2100 2151 2101 static struct clk_branch gcc_gpu_cfg_ahb_clk = { 2152 2102 .halt_reg = 0x71004, 2153 - .halt_check = BRANCH_HALT, 2103 + .halt_check = BRANCH_HALT_SKIP, 2154 2104 .clkr = { 2155 2105 .enable_reg = 0x71004, 2156 2106 .enable_mask = BIT(0), ··· 3130 3080 [AGGRE2_SNOC_NORTH_AXI] = &aggre2_snoc_north_axi_clk.clkr, 3131 3081 [SSC_XO] = &ssc_xo_clk.clkr, 3132 3082 [SSC_CNOC_AHBS_CLK] = &ssc_cnoc_ahbs_clk.clkr, 3083 + [GCC_MMSS_GPLL0_DIV_CLK] = &gcc_mmss_gpll0_div_clk.clkr, 3084 + [GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr, 3085 + [GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr, 3133 3086 }; 3134 3087 3135 3088 static struct gdsc *gcc_msm8998_gdscs[] = { ··· 3287 3234 ret = regmap_update_bits(regmap, 0x52008, BIT(21), BIT(21)); 3288 3235 if (ret) 3289 3236 return ret; 3237 + 3238 + /* Disable the GPLL0 active input to MMSS and GPU via MISC registers */ 3239 + regmap_write(regmap, GCC_MMSS_MISC, 0x10003); 3240 + regmap_write(regmap, GCC_GPU_MISC, 0x10003); 3290 3241 3291 3242 return qcom_cc_really_probe(pdev, &gcc_msm8998_desc, regmap); 3292 3243 }
+107 -55
drivers/clk/qcom/gcc-qdu1000.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0-only 2 2 /* 3 - * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved. 3 + * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved. 4 4 */ 5 5 6 6 #include <linux/clk-provider.h> 7 7 #include <linux/module.h> 8 - #include <linux/of_device.h> 8 + #include <linux/of.h> 9 + #include <linux/platform_device.h> 9 10 #include <linux/regmap.h> 10 11 11 12 #include <dt-bindings/clock/qcom,qdu1000-gcc.h> ··· 18 17 #include "clk-regmap-divider.h" 19 18 #include "clk-regmap-mux.h" 20 19 #include "clk-regmap-phy-mux.h" 20 + #include "gdsc.h" 21 21 #include "reset.h" 22 22 23 23 enum { ··· 372 370 { .index = DT_TCXO_IDX }, 373 371 }; 374 372 375 - static const struct parent_map gcc_parent_map_7[] = { 376 - { P_PCIE_0_PIPE_CLK, 0 }, 377 - { P_BI_TCXO, 2 }, 378 - }; 379 - 380 - static const struct clk_parent_data gcc_parent_data_7[] = { 381 - { .index = DT_PCIE_0_PIPE_CLK_IDX }, 382 - { .index = DT_TCXO_IDX }, 383 - }; 384 - 385 373 static const struct parent_map gcc_parent_map_8[] = { 386 374 { P_BI_TCXO, 0 }, 387 375 { P_GCC_GPLL0_OUT_MAIN, 1 }, ··· 431 439 }, 432 440 }; 433 441 434 - static struct clk_regmap_mux gcc_pcie_0_pipe_clk_src = { 442 + static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = { 435 443 .reg = 0x9d064, 436 - .shift = 0, 437 - .width = 2, 438 - .parent_map = gcc_parent_map_7, 439 444 .clkr = { 440 445 .hw.init = &(const struct clk_init_data) { 441 446 .name = "gcc_pcie_0_pipe_clk_src", 442 - .parent_data = gcc_parent_data_7, 443 - .num_parents = ARRAY_SIZE(gcc_parent_data_7), 447 + .parent_data = &(const struct clk_parent_data){ 448 + .index = DT_PCIE_0_PIPE_CLK_IDX, 449 + }, 450 + .num_parents = 1, 444 451 .ops = &clk_regmap_phy_mux_ops, 445 452 }, 446 453 }, ··· 476 485 .name = "gcc_aggre_noc_ecpri_dma_clk_src", 477 486 .parent_data = gcc_parent_data_4, 478 487 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 479 - .ops = &clk_rcg2_ops, 488 + .ops = &clk_rcg2_shared_ops, 480 489 }, 481 490 }; 482 491 ··· 496 505 .name = "gcc_aggre_noc_ecpri_gsi_clk_src", 497 506 .parent_data = gcc_parent_data_5, 498 507 .num_parents = ARRAY_SIZE(gcc_parent_data_5), 499 - .ops = &clk_rcg2_ops, 508 + .ops = &clk_rcg2_shared_ops, 500 509 }, 501 510 }; 502 511 ··· 515 524 .name = "gcc_gp1_clk_src", 516 525 .parent_data = gcc_parent_data_1, 517 526 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 518 - .ops = &clk_rcg2_ops, 527 + .ops = &clk_rcg2_shared_ops, 519 528 }, 520 529 }; 521 530 ··· 529 538 .name = "gcc_gp2_clk_src", 530 539 .parent_data = gcc_parent_data_1, 531 540 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 532 - .ops = &clk_rcg2_ops, 541 + .ops = &clk_rcg2_shared_ops, 533 542 }, 534 543 }; 535 544 ··· 543 552 .name = "gcc_gp3_clk_src", 544 553 .parent_data = gcc_parent_data_1, 545 554 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 546 - .ops = &clk_rcg2_ops, 555 + .ops = &clk_rcg2_shared_ops, 547 556 }, 548 557 }; 549 558 ··· 562 571 .name = "gcc_pcie_0_aux_clk_src", 563 572 .parent_data = gcc_parent_data_3, 564 573 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 565 - .ops = &clk_rcg2_ops, 574 + .ops = &clk_rcg2_shared_ops, 566 575 }, 567 576 }; 568 577 ··· 582 591 .name = "gcc_pcie_0_phy_rchng_clk_src", 583 592 .parent_data = gcc_parent_data_0, 584 593 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 585 - .ops = &clk_rcg2_ops, 594 + .ops = &clk_rcg2_shared_ops, 586 595 }, 587 596 }; 588 597 ··· 601 610 .name = "gcc_pdm2_clk_src", 602 611 .parent_data = gcc_parent_data_0, 603 612 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 604 - .ops = &clk_rcg2_ops, 613 + .ops = &clk_rcg2_shared_ops, 605 614 }, 606 615 }; 607 616 ··· 623 632 .name = "gcc_qupv3_wrap0_s0_clk_src", 624 633 .parent_data = gcc_parent_data_0, 625 634 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 626 - .ops = &clk_rcg2_ops, 635 + .ops = &clk_rcg2_shared_ops, 627 636 }; 628 637 629 638 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = { ··· 639 648 .name = "gcc_qupv3_wrap0_s1_clk_src", 640 649 .parent_data = gcc_parent_data_0, 641 650 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 642 - .ops = &clk_rcg2_ops, 651 + .ops = &clk_rcg2_shared_ops, 643 652 }; 644 653 645 654 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = { ··· 655 664 .name = "gcc_qupv3_wrap0_s2_clk_src", 656 665 .parent_data = gcc_parent_data_0, 657 666 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 658 - .ops = &clk_rcg2_ops, 667 + .ops = &clk_rcg2_shared_ops, 659 668 }; 660 669 661 670 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = { ··· 671 680 .name = "gcc_qupv3_wrap0_s3_clk_src", 672 681 .parent_data = gcc_parent_data_0, 673 682 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 674 - .ops = &clk_rcg2_ops, 683 + .ops = &clk_rcg2_shared_ops, 675 684 }; 676 685 677 686 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = { ··· 687 696 .name = "gcc_qupv3_wrap0_s4_clk_src", 688 697 .parent_data = gcc_parent_data_0, 689 698 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 690 - .ops = &clk_rcg2_ops, 699 + .ops = &clk_rcg2_shared_ops, 691 700 }; 692 701 693 702 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = { ··· 708 717 .name = "gcc_qupv3_wrap0_s5_clk_src", 709 718 .parent_data = gcc_parent_data_0, 710 719 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 711 - .ops = &clk_rcg2_ops, 720 + .ops = &clk_rcg2_shared_ops, 712 721 }; 713 722 714 723 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = { ··· 724 733 .name = "gcc_qupv3_wrap0_s6_clk_src", 725 734 .parent_data = gcc_parent_data_0, 726 735 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 727 - .ops = &clk_rcg2_ops, 736 + .ops = &clk_rcg2_shared_ops, 728 737 }; 729 738 730 739 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = { ··· 740 749 .name = "gcc_qupv3_wrap0_s7_clk_src", 741 750 .parent_data = gcc_parent_data_0, 742 751 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 743 - .ops = &clk_rcg2_ops, 752 + .ops = &clk_rcg2_shared_ops, 744 753 }; 745 754 746 755 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = { ··· 756 765 .name = "gcc_qupv3_wrap1_s0_clk_src", 757 766 .parent_data = gcc_parent_data_0, 758 767 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 759 - .ops = &clk_rcg2_ops, 768 + .ops = &clk_rcg2_shared_ops, 760 769 }; 761 770 762 771 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = { ··· 772 781 .name = "gcc_qupv3_wrap1_s1_clk_src", 773 782 .parent_data = gcc_parent_data_0, 774 783 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 775 - .ops = &clk_rcg2_ops, 784 + .ops = &clk_rcg2_shared_ops, 776 785 }; 777 786 778 787 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = { ··· 788 797 .name = "gcc_qupv3_wrap1_s2_clk_src", 789 798 .parent_data = gcc_parent_data_0, 790 799 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 791 - .ops = &clk_rcg2_ops, 800 + .ops = &clk_rcg2_shared_ops, 792 801 }; 793 802 794 803 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = { ··· 804 813 .name = "gcc_qupv3_wrap1_s3_clk_src", 805 814 .parent_data = gcc_parent_data_0, 806 815 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 807 - .ops = &clk_rcg2_ops, 816 + .ops = &clk_rcg2_shared_ops, 808 817 }; 809 818 810 819 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = { ··· 820 829 .name = "gcc_qupv3_wrap1_s4_clk_src", 821 830 .parent_data = gcc_parent_data_0, 822 831 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 823 - .ops = &clk_rcg2_ops, 832 + .ops = &clk_rcg2_shared_ops, 824 833 }; 825 834 826 835 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = { ··· 836 845 .name = "gcc_qupv3_wrap1_s5_clk_src", 837 846 .parent_data = gcc_parent_data_0, 838 847 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 839 - .ops = &clk_rcg2_ops, 848 + .ops = &clk_rcg2_shared_ops, 840 849 }; 841 850 842 851 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = { ··· 852 861 .name = "gcc_qupv3_wrap1_s6_clk_src", 853 862 .parent_data = gcc_parent_data_0, 854 863 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 855 - .ops = &clk_rcg2_ops, 864 + .ops = &clk_rcg2_shared_ops, 856 865 }; 857 866 858 867 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = { ··· 868 877 .name = "gcc_qupv3_wrap1_s7_clk_src", 869 878 .parent_data = gcc_parent_data_0, 870 879 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 871 - .ops = &clk_rcg2_ops, 880 + .ops = &clk_rcg2_shared_ops, 872 881 }; 873 882 874 883 static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = { ··· 904 913 .name = "gcc_sdcc5_apps_clk_src", 905 914 .parent_data = gcc_parent_data_8, 906 915 .num_parents = ARRAY_SIZE(gcc_parent_data_8), 907 - .ops = &clk_rcg2_ops, 916 + .ops = &clk_rcg2_floor_ops, 908 917 }, 909 918 }; 910 919 ··· 923 932 .name = "gcc_sdcc5_ice_core_clk_src", 924 933 .parent_data = gcc_parent_data_2, 925 934 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 926 - .ops = &clk_rcg2_ops, 935 + .ops = &clk_rcg2_floor_ops, 927 936 }, 928 937 }; 929 938 ··· 937 946 .name = "gcc_sm_bus_xo_clk_src", 938 947 .parent_data = gcc_parent_data_2, 939 948 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 940 - .ops = &clk_rcg2_ops, 949 + .ops = &clk_rcg2_shared_ops, 941 950 }, 942 951 }; 943 952 ··· 956 965 .name = "gcc_tsc_clk_src", 957 966 .parent_data = gcc_parent_data_9, 958 967 .num_parents = ARRAY_SIZE(gcc_parent_data_9), 959 - .ops = &clk_rcg2_ops, 968 + .ops = &clk_rcg2_shared_ops, 960 969 }, 961 970 }; 962 971 ··· 976 985 .name = "gcc_usb30_prim_master_clk_src", 977 986 .parent_data = gcc_parent_data_0, 978 987 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 979 - .ops = &clk_rcg2_ops, 988 + .ops = &clk_rcg2_shared_ops, 980 989 }, 981 990 }; 982 991 ··· 990 999 .name = "gcc_usb30_prim_mock_utmi_clk_src", 991 1000 .parent_data = gcc_parent_data_0, 992 1001 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 993 - .ops = &clk_rcg2_ops, 1002 + .ops = &clk_rcg2_shared_ops, 994 1003 }, 995 1004 }; 996 1005 ··· 1004 1013 .name = "gcc_usb3_prim_phy_aux_clk_src", 1005 1014 .parent_data = gcc_parent_data_3, 1006 1015 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 1007 - .ops = &clk_rcg2_ops, 1016 + .ops = &clk_rcg2_shared_ops, 1008 1017 }, 1009 1018 }; 1010 1019 ··· 1125 1134 .name = "gcc_ddrss_ecpri_dma_clk", 1126 1135 .parent_hws = (const struct clk_hw*[]) { 1127 1136 &gcc_aggre_noc_ecpri_dma_clk_src.clkr.hw, 1137 + }, 1138 + .num_parents = 1, 1139 + .flags = CLK_SET_RATE_PARENT, 1140 + .ops = &clk_branch2_aon_ops, 1141 + }, 1142 + }, 1143 + }; 1144 + 1145 + static struct clk_branch gcc_ddrss_ecpri_gsi_clk = { 1146 + .halt_reg = 0x54298, 1147 + .halt_check = BRANCH_HALT_VOTED, 1148 + .hwcg_reg = 0x54298, 1149 + .hwcg_bit = 1, 1150 + .clkr = { 1151 + .enable_reg = 0x54298, 1152 + .enable_mask = BIT(0), 1153 + .hw.init = &(const struct clk_init_data) { 1154 + .name = "gcc_ddrss_ecpri_gsi_clk", 1155 + .parent_hws = (const struct clk_hw*[]) { 1156 + &gcc_aggre_noc_ecpri_gsi_clk_src.clkr.hw, 1128 1157 }, 1129 1158 .num_parents = 1, 1130 1159 .flags = CLK_SET_RATE_PARENT, ··· 1469 1458 1470 1459 static struct clk_branch gcc_pcie_0_clkref_en = { 1471 1460 .halt_reg = 0x9c004, 1472 - .halt_bit = 31, 1473 - .halt_check = BRANCH_HALT_ENABLE, 1461 + .halt_check = BRANCH_HALT, 1474 1462 .clkr = { 1475 1463 .enable_reg = 0x9c004, 1476 1464 .enable_mask = BIT(0), 1477 1465 .hw.init = &(const struct clk_init_data) { 1478 1466 .name = "gcc_pcie_0_clkref_en", 1479 - .ops = &clk_branch_ops, 1467 + .ops = &clk_branch2_ops, 1480 1468 }, 1481 1469 }, 1482 1470 }; ··· 2295 2285 2296 2286 static struct clk_branch gcc_usb2_clkref_en = { 2297 2287 .halt_reg = 0x9c008, 2298 - .halt_bit = 31, 2299 - .halt_check = BRANCH_HALT_ENABLE, 2288 + .halt_check = BRANCH_HALT, 2300 2289 .clkr = { 2301 2290 .enable_reg = 0x9c008, 2302 2291 .enable_mask = BIT(0), 2303 2292 .hw.init = &(const struct clk_init_data) { 2304 2293 .name = "gcc_usb2_clkref_en", 2305 - .ops = &clk_branch_ops, 2294 + .ops = &clk_branch2_ops, 2306 2295 }, 2307 2296 }, 2308 2297 }; ··· 2409 2400 .ops = &clk_branch2_ops, 2410 2401 }, 2411 2402 }, 2403 + }; 2404 + 2405 + static struct gdsc pcie_0_gdsc = { 2406 + .gdscr = 0x9d004, 2407 + .en_rest_wait_val = 0x2, 2408 + .en_few_wait_val = 0x2, 2409 + .clk_dis_wait_val = 0xf, 2410 + .pd = { 2411 + .name = "gcc_pcie_0_gdsc", 2412 + }, 2413 + .pwrsts = PWRSTS_OFF_ON, 2414 + }; 2415 + 2416 + static struct gdsc pcie_0_phy_gdsc = { 2417 + .gdscr = 0x7c004, 2418 + .en_rest_wait_val = 0x2, 2419 + .en_few_wait_val = 0x2, 2420 + .clk_dis_wait_val = 0x2, 2421 + .pd = { 2422 + .name = "gcc_pcie_0_phy_gdsc", 2423 + }, 2424 + .pwrsts = PWRSTS_OFF_ON, 2425 + }; 2426 + 2427 + static struct gdsc usb30_prim_gdsc = { 2428 + .gdscr = 0x49004, 2429 + .en_rest_wait_val = 0x2, 2430 + .en_few_wait_val = 0x2, 2431 + .clk_dis_wait_val = 0xf, 2432 + .pd = { 2433 + .name = "gcc_usb30_prim_gdsc", 2434 + }, 2435 + .pwrsts = PWRSTS_OFF_ON, 2412 2436 }; 2413 2437 2414 2438 static struct clk_regmap *gcc_qdu1000_clocks[] = { ··· 2576 2534 [GCC_AGGRE_NOC_ECPRI_GSI_CLK] = &gcc_aggre_noc_ecpri_gsi_clk.clkr, 2577 2535 [GCC_PCIE_0_PHY_AUX_CLK_SRC] = &gcc_pcie_0_phy_aux_clk_src.clkr, 2578 2536 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr, 2537 + [GCC_GPLL1_OUT_EVEN] = &gcc_gpll1_out_even.clkr, 2538 + [GCC_DDRSS_ECPRI_GSI_CLK] = &gcc_ddrss_ecpri_gsi_clk.clkr, 2539 + }; 2540 + 2541 + static struct gdsc *gcc_qdu1000_gdscs[] = { 2542 + [PCIE_0_GDSC] = &pcie_0_gdsc, 2543 + [PCIE_0_PHY_GDSC] = &pcie_0_phy_gdsc, 2544 + [USB30_PRIM_GDSC] = &usb30_prim_gdsc, 2579 2545 }; 2580 2546 2581 2547 static const struct qcom_reset_map gcc_qdu1000_resets[] = { ··· 2647 2597 .num_clks = ARRAY_SIZE(gcc_qdu1000_clocks), 2648 2598 .resets = gcc_qdu1000_resets, 2649 2599 .num_resets = ARRAY_SIZE(gcc_qdu1000_resets), 2600 + .gdscs = gcc_qdu1000_gdscs, 2601 + .num_gdscs = ARRAY_SIZE(gcc_qdu1000_gdscs), 2650 2602 }; 2651 2603 2652 2604 static const struct of_device_id gcc_qdu1000_match_table[] = {
+1 -1
drivers/clk/qcom/gcc-sa8775p.c
··· 9 9 #include <linux/err.h> 10 10 #include <linux/kernel.h> 11 11 #include <linux/module.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/of.h> 13 + #include <linux/platform_device.h> 14 14 #include <linux/regmap.h> 15 15 16 16 #include <dt-bindings/clock/qcom,sa8775p-gcc.h>
+2 -1
drivers/clk/qcom/gcc-sc7180.c
··· 8 8 #include <linux/kernel.h> 9 9 #include <linux/module.h> 10 10 #include <linux/of.h> 11 - #include <linux/of_device.h> 11 + #include <linux/platform_device.h> 12 12 #include <linux/regmap.h> 13 13 14 14 #include <dt-bindings/clock/qcom,gcc-sc7180.h> ··· 651 651 .name = "gcc_sdcc2_apps_clk_src", 652 652 .parent_data = gcc_parent_data_5, 653 653 .num_parents = ARRAY_SIZE(gcc_parent_data_5), 654 + .flags = CLK_OPS_PARENT_ENABLE, 654 655 .ops = &clk_rcg2_floor_ops, 655 656 }, 656 657 };
+1 -1
drivers/clk/qcom/gcc-sc7280.c
··· 6 6 #include <linux/clk-provider.h> 7 7 #include <linux/kernel.h> 8 8 #include <linux/module.h> 9 - #include <linux/of_device.h> 10 9 #include <linux/of.h> 10 + #include <linux/platform_device.h> 11 11 #include <linux/regmap.h> 12 12 13 13 #include <dt-bindings/clock/qcom,gcc-sc7280.h>
-1
drivers/clk/qcom/gcc-sc8180x.c
··· 10 10 #include <linux/kernel.h> 11 11 #include <linux/module.h> 12 12 #include <linux/of.h> 13 - #include <linux/of_device.h> 14 13 #include <linux/platform_device.h> 15 14 #include <linux/regmap.h> 16 15 #include <linux/reset-controller.h>
+131 -16
drivers/clk/qcom/gcc-sc8280xp.c
··· 8 8 #include <linux/err.h> 9 9 #include <linux/kernel.h> 10 10 #include <linux/module.h> 11 - #include <linux/of_device.h> 12 11 #include <linux/pm_runtime.h> 13 12 #include <linux/of.h> 13 + #include <linux/platform_device.h> 14 14 #include <linux/regmap.h> 15 15 16 16 #include <dt-bindings/clock/qcom,gcc-sc8280xp.h> ··· 6761 6761 .name = "pcie_0_tunnel_gdsc", 6762 6762 }, 6763 6763 .pwrsts = PWRSTS_OFF_ON, 6764 - .flags = VOTABLE, 6764 + .flags = VOTABLE | RETAIN_FF_ENABLE, 6765 6765 }; 6766 6766 6767 6767 static struct gdsc pcie_1_tunnel_gdsc = { ··· 6772 6772 .name = "pcie_1_tunnel_gdsc", 6773 6773 }, 6774 6774 .pwrsts = PWRSTS_OFF_ON, 6775 - .flags = VOTABLE, 6775 + .flags = VOTABLE | RETAIN_FF_ENABLE, 6776 6776 }; 6777 6777 6778 6778 /* ··· 6786 6786 .pd = { 6787 6787 .name = "pcie_2a_gdsc", 6788 6788 }, 6789 - .pwrsts = PWRSTS_OFF_ON, 6790 - .flags = VOTABLE | ALWAYS_ON, 6789 + .pwrsts = PWRSTS_RET_ON, 6790 + .flags = VOTABLE | RETAIN_FF_ENABLE, 6791 6791 }; 6792 6792 6793 6793 static struct gdsc pcie_2b_gdsc = { ··· 6797 6797 .pd = { 6798 6798 .name = "pcie_2b_gdsc", 6799 6799 }, 6800 - .pwrsts = PWRSTS_OFF_ON, 6801 - .flags = VOTABLE | ALWAYS_ON, 6800 + .pwrsts = PWRSTS_RET_ON, 6801 + .flags = VOTABLE | RETAIN_FF_ENABLE, 6802 6802 }; 6803 6803 6804 6804 static struct gdsc pcie_3a_gdsc = { ··· 6808 6808 .pd = { 6809 6809 .name = "pcie_3a_gdsc", 6810 6810 }, 6811 - .pwrsts = PWRSTS_OFF_ON, 6812 - .flags = VOTABLE | ALWAYS_ON, 6811 + .pwrsts = PWRSTS_RET_ON, 6812 + .flags = VOTABLE | RETAIN_FF_ENABLE, 6813 6813 }; 6814 6814 6815 6815 static struct gdsc pcie_3b_gdsc = { ··· 6819 6819 .pd = { 6820 6820 .name = "pcie_3b_gdsc", 6821 6821 }, 6822 - .pwrsts = PWRSTS_OFF_ON, 6823 - .flags = VOTABLE | ALWAYS_ON, 6822 + .pwrsts = PWRSTS_RET_ON, 6823 + .flags = VOTABLE | RETAIN_FF_ENABLE, 6824 6824 }; 6825 6825 6826 6826 static struct gdsc pcie_4_gdsc = { ··· 6830 6830 .pd = { 6831 6831 .name = "pcie_4_gdsc", 6832 6832 }, 6833 - .pwrsts = PWRSTS_OFF_ON, 6834 - .flags = VOTABLE | ALWAYS_ON, 6833 + .pwrsts = PWRSTS_RET_ON, 6834 + .flags = VOTABLE | RETAIN_FF_ENABLE, 6835 6835 }; 6836 6836 6837 6837 static struct gdsc ufs_card_gdsc = { ··· 6840 6840 .name = "ufs_card_gdsc", 6841 6841 }, 6842 6842 .pwrsts = PWRSTS_OFF_ON, 6843 + .flags = RETAIN_FF_ENABLE, 6843 6844 }; 6844 6845 6845 6846 static struct gdsc ufs_phy_gdsc = { ··· 6849 6848 .name = "ufs_phy_gdsc", 6850 6849 }, 6851 6850 .pwrsts = PWRSTS_OFF_ON, 6851 + .flags = RETAIN_FF_ENABLE, 6852 6852 }; 6853 6853 6854 6854 static struct gdsc usb30_mp_gdsc = { ··· 6858 6856 .name = "usb30_mp_gdsc", 6859 6857 }, 6860 6858 .pwrsts = PWRSTS_RET_ON, 6859 + .flags = RETAIN_FF_ENABLE, 6861 6860 }; 6862 6861 6863 6862 static struct gdsc usb30_prim_gdsc = { ··· 6867 6864 .name = "usb30_prim_gdsc", 6868 6865 }, 6869 6866 .pwrsts = PWRSTS_RET_ON, 6867 + .flags = RETAIN_FF_ENABLE, 6870 6868 }; 6871 6869 6872 6870 static struct gdsc usb30_sec_gdsc = { ··· 6876 6872 .name = "usb30_sec_gdsc", 6877 6873 }, 6878 6874 .pwrsts = PWRSTS_RET_ON, 6875 + .flags = RETAIN_FF_ENABLE, 6879 6876 }; 6880 6877 6881 6878 static struct gdsc emac_0_gdsc = { ··· 6885 6880 .name = "emac_0_gdsc", 6886 6881 }, 6887 6882 .pwrsts = PWRSTS_OFF_ON, 6883 + .flags = RETAIN_FF_ENABLE, 6888 6884 }; 6889 6885 6890 6886 static struct gdsc emac_1_gdsc = { ··· 6894 6888 .name = "emac_1_gdsc", 6895 6889 }, 6896 6890 .pwrsts = PWRSTS_OFF_ON, 6891 + .flags = RETAIN_FF_ENABLE, 6892 + }; 6893 + 6894 + static struct gdsc usb4_1_gdsc = { 6895 + .gdscr = 0xb8004, 6896 + .pd = { 6897 + .name = "usb4_1_gdsc", 6898 + }, 6899 + .pwrsts = PWRSTS_OFF_ON, 6900 + .flags = RETAIN_FF_ENABLE, 6901 + }; 6902 + 6903 + static struct gdsc usb4_gdsc = { 6904 + .gdscr = 0x2a004, 6905 + .pd = { 6906 + .name = "usb4_gdsc", 6907 + }, 6908 + .pwrsts = PWRSTS_OFF_ON, 6909 + .flags = RETAIN_FF_ENABLE, 6910 + }; 6911 + 6912 + static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = { 6913 + .gdscr = 0x7d050, 6914 + .pd = { 6915 + .name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc", 6916 + }, 6917 + .pwrsts = PWRSTS_OFF_ON, 6918 + .flags = VOTABLE, 6919 + }; 6920 + 6921 + static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = { 6922 + .gdscr = 0x7d058, 6923 + .pd = { 6924 + .name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc", 6925 + }, 6926 + .pwrsts = PWRSTS_OFF_ON, 6927 + .flags = VOTABLE, 6928 + }; 6929 + 6930 + static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf0_gdsc = { 6931 + .gdscr = 0x7d054, 6932 + .pd = { 6933 + .name = "hlos1_vote_mmnoc_mmu_tbu_sf0_gdsc", 6934 + }, 6935 + .pwrsts = PWRSTS_OFF_ON, 6936 + .flags = VOTABLE, 6937 + }; 6938 + 6939 + static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf1_gdsc = { 6940 + .gdscr = 0x7d06c, 6941 + .pd = { 6942 + .name = "hlos1_vote_mmnoc_mmu_tbu_sf1_gdsc", 6943 + }, 6944 + .pwrsts = PWRSTS_OFF_ON, 6945 + .flags = VOTABLE, 6946 + }; 6947 + 6948 + static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = { 6949 + .gdscr = 0x7d05c, 6950 + .pd = { 6951 + .name = "hlos1_vote_turing_mmu_tbu0_gdsc", 6952 + }, 6953 + .pwrsts = PWRSTS_OFF_ON, 6954 + .flags = VOTABLE, 6955 + }; 6956 + 6957 + static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = { 6958 + .gdscr = 0x7d060, 6959 + .pd = { 6960 + .name = "hlos1_vote_turing_mmu_tbu1_gdsc", 6961 + }, 6962 + .pwrsts = PWRSTS_OFF_ON, 6963 + .flags = VOTABLE, 6964 + }; 6965 + 6966 + static struct gdsc hlos1_vote_turing_mmu_tbu2_gdsc = { 6967 + .gdscr = 0x7d0a0, 6968 + .pd = { 6969 + .name = "hlos1_vote_turing_mmu_tbu2_gdsc", 6970 + }, 6971 + .pwrsts = PWRSTS_OFF_ON, 6972 + .flags = VOTABLE, 6973 + }; 6974 + 6975 + static struct gdsc hlos1_vote_turing_mmu_tbu3_gdsc = { 6976 + .gdscr = 0x7d0a4, 6977 + .pd = { 6978 + .name = "hlos1_vote_turing_mmu_tbu3_gdsc", 6979 + }, 6980 + .pwrsts = PWRSTS_OFF_ON, 6981 + .flags = VOTABLE, 6897 6982 }; 6898 6983 6899 6984 static struct clk_regmap *gcc_sc8280xp_clocks[] = { ··· 7467 7370 [USB30_SEC_GDSC] = &usb30_sec_gdsc, 7468 7371 [EMAC_0_GDSC] = &emac_0_gdsc, 7469 7372 [EMAC_1_GDSC] = &emac_1_gdsc, 7373 + [USB4_1_GDSC] = &usb4_1_gdsc, 7374 + [USB4_GDSC] = &usb4_gdsc, 7375 + [HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc, 7376 + [HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc, 7377 + [HLOS1_VOTE_MMNOC_MMU_TBU_SF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_sf0_gdsc, 7378 + [HLOS1_VOTE_MMNOC_MMU_TBU_SF1_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_sf1_gdsc, 7379 + [HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc, 7380 + [HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc, 7381 + [HLOS1_VOTE_TURING_MMU_TBU2_GDSC] = &hlos1_vote_turing_mmu_tbu2_gdsc, 7382 + [HLOS1_VOTE_TURING_MMU_TBU3_GDSC] = &hlos1_vote_turing_mmu_tbu3_gdsc, 7470 7383 }; 7471 7384 7472 7385 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = { ··· 7539 7432 7540 7433 regmap = qcom_cc_map(pdev, &gcc_sc8280xp_desc); 7541 7434 if (IS_ERR(regmap)) { 7542 - pm_runtime_put(&pdev->dev); 7543 - return PTR_ERR(regmap); 7435 + ret = PTR_ERR(regmap); 7436 + goto err_put_rpm; 7544 7437 } 7545 7438 7546 7439 /* ··· 7561 7454 7562 7455 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, ARRAY_SIZE(gcc_dfs_clocks)); 7563 7456 if (ret) 7564 - return ret; 7457 + goto err_put_rpm; 7565 7458 7566 7459 ret = qcom_cc_really_probe(pdev, &gcc_sc8280xp_desc, regmap); 7460 + if (ret) 7461 + goto err_put_rpm; 7462 + 7567 7463 pm_runtime_put(&pdev->dev); 7464 + 7465 + return 0; 7466 + 7467 + err_put_rpm: 7468 + pm_runtime_put_sync(&pdev->dev); 7568 7469 7569 7470 return ret; 7570 7471 }
-1
drivers/clk/qcom/gcc-sdm660.c
··· 10 10 #include <linux/platform_device.h> 11 11 #include <linux/module.h> 12 12 #include <linux/of.h> 13 - #include <linux/of_device.h> 14 13 #include <linux/clk-provider.h> 15 14 #include <linux/regmap.h> 16 15 #include <linux/reset-controller.h>
-1
drivers/clk/qcom/gcc-sdm845.c
··· 9 9 #include <linux/platform_device.h> 10 10 #include <linux/module.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/clk-provider.h> 14 13 #include <linux/regmap.h> 15 14 #include <linux/reset-controller.h>
+1 -1
drivers/clk/qcom/gcc-sdx65.c
··· 7 7 #include <linux/err.h> 8 8 #include <linux/kernel.h> 9 9 #include <linux/module.h> 10 - #include <linux/of_device.h> 11 10 #include <linux/of.h> 11 + #include <linux/platform_device.h> 12 12 #include <linux/regmap.h> 13 13 14 14 #include <dt-bindings/clock/qcom,gcc-sdx65.h>
+2 -1
drivers/clk/qcom/gcc-sdx75.c
··· 4 4 */ 5 5 6 6 #include <linux/clk-provider.h> 7 + #include <linux/mod_devicetable.h> 7 8 #include <linux/module.h> 8 - #include <linux/of_device.h> 9 + #include <linux/platform_device.h> 9 10 #include <linux/regmap.h> 10 11 11 12 #include <dt-bindings/clock/qcom,sdx75-gcc.h>
+2 -1
drivers/clk/qcom/gcc-sm6115.c
··· 6 6 #include <linux/err.h> 7 7 #include <linux/kernel.h> 8 8 #include <linux/module.h> 9 - #include <linux/of_device.h> 9 + #include <linux/of.h> 10 + #include <linux/platform_device.h> 10 11 #include <linux/clk-provider.h> 11 12 #include <linux/regmap.h> 12 13 #include <linux/reset-controller.h>
-1
drivers/clk/qcom/gcc-sm6125.c
··· 8 8 #include <linux/module.h> 9 9 #include <linux/platform_device.h> 10 10 #include <linux/of.h> 11 - #include <linux/of_device.h> 12 11 #include <linux/clk-provider.h> 13 12 #include <linux/regmap.h> 14 13 #include <linux/reset-controller.h>
+1
drivers/clk/qcom/gcc-sm6350.c
··· 641 641 .name = "gcc_sdcc2_apps_clk_src", 642 642 .parent_data = gcc_parent_data_8, 643 643 .num_parents = ARRAY_SIZE(gcc_parent_data_8), 644 + .flags = CLK_OPS_PARENT_ENABLE, 644 645 .ops = &clk_rcg2_floor_ops, 645 646 }, 646 647 };
+2 -1
drivers/clk/qcom/gcc-sm6375.c
··· 6 6 7 7 #include <linux/clk-provider.h> 8 8 #include <linux/module.h> 9 - #include <linux/of_device.h> 9 + #include <linux/of.h> 10 + #include <linux/platform_device.h> 10 11 #include <linux/regmap.h> 11 12 12 13 #include <dt-bindings/clock/qcom,sm6375-gcc.h>
+3 -2
drivers/clk/qcom/gcc-sm7150.c
··· 8 8 #include <linux/clk-provider.h> 9 9 #include <linux/err.h> 10 10 #include <linux/kernel.h> 11 + #include <linux/mod_devicetable.h> 11 12 #include <linux/module.h> 12 - #include <linux/of.h> 13 - #include <linux/of_device.h> 13 + #include <linux/platform_device.h> 14 14 #include <linux/regmap.h> 15 15 16 16 #include <dt-bindings/clock/qcom,sm7150-gcc.h> ··· 739 739 .parent_data = gcc_parent_data_6, 740 740 .num_parents = ARRAY_SIZE(gcc_parent_data_6), 741 741 .ops = &clk_rcg2_floor_ops, 742 + .flags = CLK_OPS_PARENT_ENABLE, 742 743 }, 743 744 }; 744 745
-1
drivers/clk/qcom/gcc-sm8150.c
··· 7 7 #include <linux/platform_device.h> 8 8 #include <linux/module.h> 9 9 #include <linux/of.h> 10 - #include <linux/of_device.h> 11 10 #include <linux/clk-provider.h> 12 11 #include <linux/regmap.h> 13 12 #include <linux/reset-controller.h>
+2 -1
drivers/clk/qcom/gcc-sm8250.c
··· 7 7 #include <linux/err.h> 8 8 #include <linux/kernel.h> 9 9 #include <linux/module.h> 10 - #include <linux/of_device.h> 11 10 #include <linux/of.h> 11 + #include <linux/platform_device.h> 12 12 #include <linux/regmap.h> 13 13 14 14 #include <dt-bindings/clock/qcom,gcc-sm8250.h> ··· 721 721 .name = "gcc_sdcc2_apps_clk_src", 722 722 .parent_data = gcc_parent_data_4, 723 723 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 724 + .flags = CLK_OPS_PARENT_ENABLE, 724 725 .ops = &clk_rcg2_floor_ops, 725 726 }, 726 727 };
+4 -3
drivers/clk/qcom/gcc-sm8450.c
··· 6 6 7 7 #include <linux/clk-provider.h> 8 8 #include <linux/module.h> 9 - #include <linux/of_device.h> 9 + #include <linux/of.h> 10 + #include <linux/platform_device.h> 10 11 #include <linux/regmap.h> 11 12 12 13 #include <dt-bindings/clock/qcom,gcc-sm8450.h> ··· 936 935 .parent_data = gcc_parent_data_7, 937 936 .num_parents = ARRAY_SIZE(gcc_parent_data_7), 938 937 .flags = CLK_SET_RATE_PARENT, 939 - .ops = &clk_rcg2_ops, 938 + .ops = &clk_rcg2_floor_ops, 940 939 }, 941 940 }; 942 941 ··· 959 958 .parent_data = gcc_parent_data_0, 960 959 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 961 960 .flags = CLK_SET_RATE_PARENT, 962 - .ops = &clk_rcg2_ops, 961 + .ops = &clk_rcg2_floor_ops, 963 962 }, 964 963 }; 965 964
+2 -1
drivers/clk/qcom/gcc-sm8550.c
··· 7 7 8 8 #include <linux/clk-provider.h> 9 9 #include <linux/module.h> 10 - #include <linux/of_device.h> 10 + #include <linux/of.h> 11 + #include <linux/platform_device.h> 11 12 #include <linux/regmap.h> 12 13 13 14 #include <dt-bindings/clock/qcom,sm8550-gcc.h>
+1 -2
drivers/clk/qcom/gpucc-msm8998.c
··· 9 9 #include <linux/platform_device.h> 10 10 #include <linux/module.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/clk-provider.h> 14 13 #include <linux/regmap.h> 15 14 #include <linux/reset-controller.h> ··· 97 98 98 99 static const struct clk_parent_data gpu_xo_gpll0[] = { 99 100 { .hw = &gpucc_cxo_clk.clkr.hw }, 100 - { .fw_name = "gpll0" }, 101 + { .fw_name = "gpll0", .name = "gcc_gpu_gpll0_clk" }, 101 102 }; 102 103 103 104 static const struct parent_map gpu_xo_gpupll0_map[] = {
+2 -2
drivers/clk/qcom/gpucc-sa8775p.c
··· 7 7 #include <linux/clk-provider.h> 8 8 #include <linux/err.h> 9 9 #include <linux/kernel.h> 10 + #include <linux/mod_devicetable.h> 10 11 #include <linux/module.h> 11 - #include <linux/of_device.h> 12 - #include <linux/of.h> 12 + #include <linux/platform_device.h> 13 13 #include <linux/regmap.h> 14 14 15 15 #include <dt-bindings/clock/qcom,sa8775p-gpucc.h>
-1
drivers/clk/qcom/gpucc-sdm660.c
··· 13 13 #include <linux/module.h> 14 14 #include <linux/platform_device.h> 15 15 #include <linux/of.h> 16 - #include <linux/of_device.h> 17 16 #include <linux/regmap.h> 18 17 #include <linux/reset-controller.h> 19 18 #include <dt-bindings/clock/qcom,gpucc-sdm660.h>
+2 -1
drivers/clk/qcom/gpucc-sm6115.c
··· 5 5 */ 6 6 7 7 #include <linux/clk-provider.h> 8 + #include <linux/mod_devicetable.h> 8 9 #include <linux/module.h> 9 - #include <linux/of_device.h> 10 + #include <linux/platform_device.h> 10 11 #include <linux/regmap.h> 11 12 12 13 #include <dt-bindings/clock/qcom,sm6115-gpucc.h>
+2 -1
drivers/clk/qcom/gpucc-sm6125.c
··· 5 5 */ 6 6 7 7 #include <linux/clk-provider.h> 8 + #include <linux/mod_devicetable.h> 8 9 #include <linux/module.h> 9 - #include <linux/of_device.h> 10 + #include <linux/platform_device.h> 10 11 #include <linux/regmap.h> 11 12 12 13 #include <dt-bindings/clock/qcom,sm6125-gpucc.h>
+13 -5
drivers/clk/qcom/gpucc-sm6350.c
··· 25 25 #define CX_GMU_CBCR_WAKE_SHIFT 8 26 26 27 27 enum { 28 + DT_BI_TCXO, 29 + DT_GPLL0_OUT_MAIN, 30 + DT_GPLL0_OUT_MAIN_DIV, 31 + }; 32 + 33 + enum { 28 34 P_BI_TCXO, 29 35 P_GPLL0_OUT_MAIN, 30 36 P_GPLL0_OUT_MAIN_DIV, ··· 67 61 .hw.init = &(struct clk_init_data){ 68 62 .name = "gpu_cc_pll0", 69 63 .parent_data = &(const struct clk_parent_data){ 64 + .index = DT_BI_TCXO, 70 65 .fw_name = "bi_tcxo", 71 66 }, 72 67 .num_parents = 1, ··· 111 104 .hw.init = &(struct clk_init_data){ 112 105 .name = "gpu_cc_pll1", 113 106 .parent_data = &(const struct clk_parent_data){ 107 + .index = DT_BI_TCXO, 114 108 .fw_name = "bi_tcxo", 115 109 }, 116 110 .num_parents = 1, ··· 129 121 }; 130 122 131 123 static const struct clk_parent_data gpu_cc_parent_data_0[] = { 132 - { .fw_name = "bi_tcxo" }, 124 + { .index = DT_BI_TCXO, .fw_name = "bi_tcxo" }, 133 125 { .hw = &gpu_cc_pll0.clkr.hw }, 134 126 { .hw = &gpu_cc_pll1.clkr.hw }, 135 - { .fw_name = "gcc_gpu_gpll0_clk" }, 136 - { .fw_name = "gcc_gpu_gpll0_div_clk" }, 127 + { .index = DT_GPLL0_OUT_MAIN, .fw_name = "gcc_gpu_gpll0_clk_src" }, 128 + { .index = DT_GPLL0_OUT_MAIN_DIV, .fw_name = "gcc_gpu_gpll0_div_clk_src" }, 137 129 }; 138 130 139 131 static const struct parent_map gpu_cc_parent_map_1[] = { ··· 146 138 }; 147 139 148 140 static const struct clk_parent_data gpu_cc_parent_data_1[] = { 149 - { .fw_name = "bi_tcxo" }, 141 + { .index = DT_BI_TCXO, .fw_name = "bi_tcxo" }, 150 142 { .hw = &crc_div.hw }, 151 143 { .hw = &gpu_cc_pll0.clkr.hw }, 152 144 { .hw = &gpu_cc_pll1.clkr.hw }, 153 145 { .hw = &gpu_cc_pll1.clkr.hw }, 154 - { .fw_name = "gcc_gpu_gpll0_clk" }, 146 + { .index = DT_GPLL0_OUT_MAIN, .fw_name = "gcc_gpu_gpll0_clk_src" }, 155 147 }; 156 148 157 149 static const struct freq_tbl ftbl_gpu_cc_gmu_clk_src[] = {
+2 -1
drivers/clk/qcom/gpucc-sm6375.c
··· 5 5 */ 6 6 7 7 #include <linux/clk-provider.h> 8 + #include <linux/mod_devicetable.h> 8 9 #include <linux/module.h> 9 - #include <linux/of_device.h> 10 + #include <linux/platform_device.h> 10 11 #include <linux/pm_runtime.h> 11 12 #include <linux/regmap.h> 12 13
+1 -1
drivers/clk/qcom/gpucc-sm8350.c
··· 8 8 #include <linux/err.h> 9 9 #include <linux/kernel.h> 10 10 #include <linux/module.h> 11 - #include <linux/of_device.h> 12 11 #include <linux/of.h> 12 + #include <linux/platform_device.h> 13 13 #include <linux/regmap.h> 14 14 15 15 #include <dt-bindings/clock/qcom,gpucc-sm8350.h>
+2 -1
drivers/clk/qcom/gpucc-sm8450.c
··· 4 4 */ 5 5 6 6 #include <linux/clk-provider.h> 7 + #include <linux/mod_devicetable.h> 7 8 #include <linux/module.h> 8 - #include <linux/of_device.h> 9 + #include <linux/platform_device.h> 9 10 #include <linux/regmap.h> 10 11 11 12 #include <dt-bindings/clock/qcom,sm8450-gpucc.h>
+2 -1
drivers/clk/qcom/gpucc-sm8550.c
··· 4 4 */ 5 5 6 6 #include <linux/clk-provider.h> 7 + #include <linux/mod_devicetable.h> 7 8 #include <linux/module.h> 8 - #include <linux/of_device.h> 9 + #include <linux/platform_device.h> 9 10 #include <linux/regmap.h> 10 11 11 12 #include <dt-bindings/clock/qcom,sm8550-gpucc.h>
-1
drivers/clk/qcom/lcc-ipq806x.c
··· 9 9 #include <linux/platform_device.h> 10 10 #include <linux/module.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/clk-provider.h> 14 13 #include <linux/regmap.h> 15 14
-572
drivers/clk/qcom/lcc-mdm9615.c
··· 1 - // SPDX-License-Identifier: GPL-2.0-only 2 - /* 3 - * Copyright (c) 2014, The Linux Foundation. All rights reserved. 4 - * Copyright (c) BayLibre, SAS. 5 - * Author : Neil Armstrong <narmstrong@baylibre.com> 6 - */ 7 - 8 - #include <linux/kernel.h> 9 - #include <linux/bitops.h> 10 - #include <linux/err.h> 11 - #include <linux/platform_device.h> 12 - #include <linux/module.h> 13 - #include <linux/of.h> 14 - #include <linux/of_device.h> 15 - #include <linux/clk-provider.h> 16 - #include <linux/regmap.h> 17 - 18 - #include <dt-bindings/clock/qcom,lcc-mdm9615.h> 19 - 20 - #include "common.h" 21 - #include "clk-regmap.h" 22 - #include "clk-pll.h" 23 - #include "clk-rcg.h" 24 - #include "clk-branch.h" 25 - #include "clk-regmap-divider.h" 26 - #include "clk-regmap-mux.h" 27 - 28 - static struct clk_pll pll4 = { 29 - .l_reg = 0x4, 30 - .m_reg = 0x8, 31 - .n_reg = 0xc, 32 - .config_reg = 0x14, 33 - .mode_reg = 0x0, 34 - .status_reg = 0x18, 35 - .status_bit = 16, 36 - .clkr.hw.init = &(struct clk_init_data){ 37 - .name = "pll4", 38 - .parent_names = (const char *[]){ "cxo" }, 39 - .num_parents = 1, 40 - .ops = &clk_pll_ops, 41 - }, 42 - }; 43 - 44 - enum { 45 - P_CXO, 46 - P_PLL4, 47 - }; 48 - 49 - static const struct parent_map lcc_cxo_pll4_map[] = { 50 - { P_CXO, 0 }, 51 - { P_PLL4, 2 } 52 - }; 53 - 54 - static const char * const lcc_cxo_pll4[] = { 55 - "cxo", 56 - "pll4_vote", 57 - }; 58 - 59 - static struct freq_tbl clk_tbl_aif_osr_492[] = { 60 - { 512000, P_PLL4, 4, 1, 240 }, 61 - { 768000, P_PLL4, 4, 1, 160 }, 62 - { 1024000, P_PLL4, 4, 1, 120 }, 63 - { 1536000, P_PLL4, 4, 1, 80 }, 64 - { 2048000, P_PLL4, 4, 1, 60 }, 65 - { 3072000, P_PLL4, 4, 1, 40 }, 66 - { 4096000, P_PLL4, 4, 1, 30 }, 67 - { 6144000, P_PLL4, 4, 1, 20 }, 68 - { 8192000, P_PLL4, 4, 1, 15 }, 69 - { 12288000, P_PLL4, 4, 1, 10 }, 70 - { 24576000, P_PLL4, 4, 1, 5 }, 71 - { 27000000, P_CXO, 1, 0, 0 }, 72 - { } 73 - }; 74 - 75 - static struct freq_tbl clk_tbl_aif_osr_393[] = { 76 - { 512000, P_PLL4, 4, 1, 192 }, 77 - { 768000, P_PLL4, 4, 1, 128 }, 78 - { 1024000, P_PLL4, 4, 1, 96 }, 79 - { 1536000, P_PLL4, 4, 1, 64 }, 80 - { 2048000, P_PLL4, 4, 1, 48 }, 81 - { 3072000, P_PLL4, 4, 1, 32 }, 82 - { 4096000, P_PLL4, 4, 1, 24 }, 83 - { 6144000, P_PLL4, 4, 1, 16 }, 84 - { 8192000, P_PLL4, 4, 1, 12 }, 85 - { 12288000, P_PLL4, 4, 1, 8 }, 86 - { 24576000, P_PLL4, 4, 1, 4 }, 87 - { 27000000, P_CXO, 1, 0, 0 }, 88 - { } 89 - }; 90 - 91 - static struct clk_rcg mi2s_osr_src = { 92 - .ns_reg = 0x48, 93 - .md_reg = 0x4c, 94 - .mn = { 95 - .mnctr_en_bit = 8, 96 - .mnctr_reset_bit = 7, 97 - .mnctr_mode_shift = 5, 98 - .n_val_shift = 24, 99 - .m_val_shift = 8, 100 - .width = 8, 101 - }, 102 - .p = { 103 - .pre_div_shift = 3, 104 - .pre_div_width = 2, 105 - }, 106 - .s = { 107 - .src_sel_shift = 0, 108 - .parent_map = lcc_cxo_pll4_map, 109 - }, 110 - .freq_tbl = clk_tbl_aif_osr_393, 111 - .clkr = { 112 - .enable_reg = 0x48, 113 - .enable_mask = BIT(9), 114 - .hw.init = &(struct clk_init_data){ 115 - .name = "mi2s_osr_src", 116 - .parent_names = lcc_cxo_pll4, 117 - .num_parents = 2, 118 - .ops = &clk_rcg_ops, 119 - .flags = CLK_SET_RATE_GATE, 120 - }, 121 - }, 122 - }; 123 - 124 - static const char * const lcc_mi2s_parents[] = { 125 - "mi2s_osr_src", 126 - }; 127 - 128 - static struct clk_branch mi2s_osr_clk = { 129 - .halt_reg = 0x50, 130 - .halt_bit = 1, 131 - .halt_check = BRANCH_HALT_ENABLE, 132 - .clkr = { 133 - .enable_reg = 0x48, 134 - .enable_mask = BIT(17), 135 - .hw.init = &(struct clk_init_data){ 136 - .name = "mi2s_osr_clk", 137 - .parent_names = lcc_mi2s_parents, 138 - .num_parents = 1, 139 - .ops = &clk_branch_ops, 140 - .flags = CLK_SET_RATE_PARENT, 141 - }, 142 - }, 143 - }; 144 - 145 - static struct clk_regmap_div mi2s_div_clk = { 146 - .reg = 0x48, 147 - .shift = 10, 148 - .width = 4, 149 - .clkr = { 150 - .enable_reg = 0x48, 151 - .enable_mask = BIT(15), 152 - .hw.init = &(struct clk_init_data){ 153 - .name = "mi2s_div_clk", 154 - .parent_names = lcc_mi2s_parents, 155 - .num_parents = 1, 156 - .ops = &clk_regmap_div_ops, 157 - }, 158 - }, 159 - }; 160 - 161 - static struct clk_branch mi2s_bit_div_clk = { 162 - .halt_reg = 0x50, 163 - .halt_bit = 0, 164 - .halt_check = BRANCH_HALT_ENABLE, 165 - .clkr = { 166 - .enable_reg = 0x48, 167 - .enable_mask = BIT(15), 168 - .hw.init = &(struct clk_init_data){ 169 - .name = "mi2s_bit_div_clk", 170 - .parent_names = (const char *[]){ "mi2s_div_clk" }, 171 - .num_parents = 1, 172 - .ops = &clk_branch_ops, 173 - .flags = CLK_SET_RATE_PARENT, 174 - }, 175 - }, 176 - }; 177 - 178 - static struct clk_regmap_mux mi2s_bit_clk = { 179 - .reg = 0x48, 180 - .shift = 14, 181 - .width = 1, 182 - .clkr = { 183 - .hw.init = &(struct clk_init_data){ 184 - .name = "mi2s_bit_clk", 185 - .parent_names = (const char *[]){ 186 - "mi2s_bit_div_clk", 187 - "mi2s_codec_clk", 188 - }, 189 - .num_parents = 2, 190 - .ops = &clk_regmap_mux_closest_ops, 191 - .flags = CLK_SET_RATE_PARENT, 192 - }, 193 - }, 194 - }; 195 - 196 - #define CLK_AIF_OSR_DIV(prefix, _ns, _md, hr) \ 197 - static struct clk_rcg prefix##_osr_src = { \ 198 - .ns_reg = _ns, \ 199 - .md_reg = _md, \ 200 - .mn = { \ 201 - .mnctr_en_bit = 8, \ 202 - .mnctr_reset_bit = 7, \ 203 - .mnctr_mode_shift = 5, \ 204 - .n_val_shift = 24, \ 205 - .m_val_shift = 8, \ 206 - .width = 8, \ 207 - }, \ 208 - .p = { \ 209 - .pre_div_shift = 3, \ 210 - .pre_div_width = 2, \ 211 - }, \ 212 - .s = { \ 213 - .src_sel_shift = 0, \ 214 - .parent_map = lcc_cxo_pll4_map, \ 215 - }, \ 216 - .freq_tbl = clk_tbl_aif_osr_393, \ 217 - .clkr = { \ 218 - .enable_reg = _ns, \ 219 - .enable_mask = BIT(9), \ 220 - .hw.init = &(struct clk_init_data){ \ 221 - .name = #prefix "_osr_src", \ 222 - .parent_names = lcc_cxo_pll4, \ 223 - .num_parents = 2, \ 224 - .ops = &clk_rcg_ops, \ 225 - .flags = CLK_SET_RATE_GATE, \ 226 - }, \ 227 - }, \ 228 - }; \ 229 - \ 230 - static const char * const lcc_##prefix##_parents[] = { \ 231 - #prefix "_osr_src", \ 232 - }; \ 233 - \ 234 - static struct clk_branch prefix##_osr_clk = { \ 235 - .halt_reg = hr, \ 236 - .halt_bit = 1, \ 237 - .halt_check = BRANCH_HALT_ENABLE, \ 238 - .clkr = { \ 239 - .enable_reg = _ns, \ 240 - .enable_mask = BIT(21), \ 241 - .hw.init = &(struct clk_init_data){ \ 242 - .name = #prefix "_osr_clk", \ 243 - .parent_names = lcc_##prefix##_parents, \ 244 - .num_parents = 1, \ 245 - .ops = &clk_branch_ops, \ 246 - .flags = CLK_SET_RATE_PARENT, \ 247 - }, \ 248 - }, \ 249 - }; \ 250 - \ 251 - static struct clk_regmap_div prefix##_div_clk = { \ 252 - .reg = _ns, \ 253 - .shift = 10, \ 254 - .width = 8, \ 255 - .clkr = { \ 256 - .hw.init = &(struct clk_init_data){ \ 257 - .name = #prefix "_div_clk", \ 258 - .parent_names = lcc_##prefix##_parents, \ 259 - .num_parents = 1, \ 260 - .ops = &clk_regmap_div_ops, \ 261 - }, \ 262 - }, \ 263 - }; \ 264 - \ 265 - static struct clk_branch prefix##_bit_div_clk = { \ 266 - .halt_reg = hr, \ 267 - .halt_bit = 0, \ 268 - .halt_check = BRANCH_HALT_ENABLE, \ 269 - .clkr = { \ 270 - .enable_reg = _ns, \ 271 - .enable_mask = BIT(19), \ 272 - .hw.init = &(struct clk_init_data){ \ 273 - .name = #prefix "_bit_div_clk", \ 274 - .parent_names = (const char *[]){ \ 275 - #prefix "_div_clk" \ 276 - }, \ 277 - .num_parents = 1, \ 278 - .ops = &clk_branch_ops, \ 279 - .flags = CLK_SET_RATE_PARENT, \ 280 - }, \ 281 - }, \ 282 - }; \ 283 - \ 284 - static struct clk_regmap_mux prefix##_bit_clk = { \ 285 - .reg = _ns, \ 286 - .shift = 18, \ 287 - .width = 1, \ 288 - .clkr = { \ 289 - .hw.init = &(struct clk_init_data){ \ 290 - .name = #prefix "_bit_clk", \ 291 - .parent_names = (const char *[]){ \ 292 - #prefix "_bit_div_clk", \ 293 - #prefix "_codec_clk", \ 294 - }, \ 295 - .num_parents = 2, \ 296 - .ops = &clk_regmap_mux_closest_ops, \ 297 - .flags = CLK_SET_RATE_PARENT, \ 298 - }, \ 299 - }, \ 300 - } 301 - 302 - CLK_AIF_OSR_DIV(codec_i2s_mic, 0x60, 0x64, 0x68); 303 - CLK_AIF_OSR_DIV(spare_i2s_mic, 0x78, 0x7c, 0x80); 304 - CLK_AIF_OSR_DIV(codec_i2s_spkr, 0x6c, 0x70, 0x74); 305 - CLK_AIF_OSR_DIV(spare_i2s_spkr, 0x84, 0x88, 0x8c); 306 - 307 - static struct freq_tbl clk_tbl_pcm_492[] = { 308 - { 256000, P_PLL4, 4, 1, 480 }, 309 - { 512000, P_PLL4, 4, 1, 240 }, 310 - { 768000, P_PLL4, 4, 1, 160 }, 311 - { 1024000, P_PLL4, 4, 1, 120 }, 312 - { 1536000, P_PLL4, 4, 1, 80 }, 313 - { 2048000, P_PLL4, 4, 1, 60 }, 314 - { 3072000, P_PLL4, 4, 1, 40 }, 315 - { 4096000, P_PLL4, 4, 1, 30 }, 316 - { 6144000, P_PLL4, 4, 1, 20 }, 317 - { 8192000, P_PLL4, 4, 1, 15 }, 318 - { 12288000, P_PLL4, 4, 1, 10 }, 319 - { 24576000, P_PLL4, 4, 1, 5 }, 320 - { 27000000, P_CXO, 1, 0, 0 }, 321 - { } 322 - }; 323 - 324 - static struct freq_tbl clk_tbl_pcm_393[] = { 325 - { 256000, P_PLL4, 4, 1, 384 }, 326 - { 512000, P_PLL4, 4, 1, 192 }, 327 - { 768000, P_PLL4, 4, 1, 128 }, 328 - { 1024000, P_PLL4, 4, 1, 96 }, 329 - { 1536000, P_PLL4, 4, 1, 64 }, 330 - { 2048000, P_PLL4, 4, 1, 48 }, 331 - { 3072000, P_PLL4, 4, 1, 32 }, 332 - { 4096000, P_PLL4, 4, 1, 24 }, 333 - { 6144000, P_PLL4, 4, 1, 16 }, 334 - { 8192000, P_PLL4, 4, 1, 12 }, 335 - { 12288000, P_PLL4, 4, 1, 8 }, 336 - { 24576000, P_PLL4, 4, 1, 4 }, 337 - { 27000000, P_CXO, 1, 0, 0 }, 338 - { } 339 - }; 340 - 341 - static struct clk_rcg pcm_src = { 342 - .ns_reg = 0x54, 343 - .md_reg = 0x58, 344 - .mn = { 345 - .mnctr_en_bit = 8, 346 - .mnctr_reset_bit = 7, 347 - .mnctr_mode_shift = 5, 348 - .n_val_shift = 16, 349 - .m_val_shift = 16, 350 - .width = 16, 351 - }, 352 - .p = { 353 - .pre_div_shift = 3, 354 - .pre_div_width = 2, 355 - }, 356 - .s = { 357 - .src_sel_shift = 0, 358 - .parent_map = lcc_cxo_pll4_map, 359 - }, 360 - .freq_tbl = clk_tbl_pcm_393, 361 - .clkr = { 362 - .enable_reg = 0x54, 363 - .enable_mask = BIT(9), 364 - .hw.init = &(struct clk_init_data){ 365 - .name = "pcm_src", 366 - .parent_names = lcc_cxo_pll4, 367 - .num_parents = 2, 368 - .ops = &clk_rcg_ops, 369 - .flags = CLK_SET_RATE_GATE, 370 - }, 371 - }, 372 - }; 373 - 374 - static struct clk_branch pcm_clk_out = { 375 - .halt_reg = 0x5c, 376 - .halt_bit = 0, 377 - .halt_check = BRANCH_HALT_ENABLE, 378 - .clkr = { 379 - .enable_reg = 0x54, 380 - .enable_mask = BIT(11), 381 - .hw.init = &(struct clk_init_data){ 382 - .name = "pcm_clk_out", 383 - .parent_names = (const char *[]){ "pcm_src" }, 384 - .num_parents = 1, 385 - .ops = &clk_branch_ops, 386 - .flags = CLK_SET_RATE_PARENT, 387 - }, 388 - }, 389 - }; 390 - 391 - static struct clk_regmap_mux pcm_clk = { 392 - .reg = 0x54, 393 - .shift = 10, 394 - .width = 1, 395 - .clkr = { 396 - .hw.init = &(struct clk_init_data){ 397 - .name = "pcm_clk", 398 - .parent_names = (const char *[]){ 399 - "pcm_clk_out", 400 - "pcm_codec_clk", 401 - }, 402 - .num_parents = 2, 403 - .ops = &clk_regmap_mux_closest_ops, 404 - .flags = CLK_SET_RATE_PARENT, 405 - }, 406 - }, 407 - }; 408 - 409 - static struct clk_rcg slimbus_src = { 410 - .ns_reg = 0xcc, 411 - .md_reg = 0xd0, 412 - .mn = { 413 - .mnctr_en_bit = 8, 414 - .mnctr_reset_bit = 7, 415 - .mnctr_mode_shift = 5, 416 - .n_val_shift = 24, 417 - .m_val_shift = 8, 418 - .width = 8, 419 - }, 420 - .p = { 421 - .pre_div_shift = 3, 422 - .pre_div_width = 2, 423 - }, 424 - .s = { 425 - .src_sel_shift = 0, 426 - .parent_map = lcc_cxo_pll4_map, 427 - }, 428 - .freq_tbl = clk_tbl_aif_osr_393, 429 - .clkr = { 430 - .enable_reg = 0xcc, 431 - .enable_mask = BIT(9), 432 - .hw.init = &(struct clk_init_data){ 433 - .name = "slimbus_src", 434 - .parent_names = lcc_cxo_pll4, 435 - .num_parents = 2, 436 - .ops = &clk_rcg_ops, 437 - .flags = CLK_SET_RATE_GATE, 438 - }, 439 - }, 440 - }; 441 - 442 - static const char * const lcc_slimbus_parents[] = { 443 - "slimbus_src", 444 - }; 445 - 446 - static struct clk_branch audio_slimbus_clk = { 447 - .halt_reg = 0xd4, 448 - .halt_bit = 0, 449 - .halt_check = BRANCH_HALT_ENABLE, 450 - .clkr = { 451 - .enable_reg = 0xcc, 452 - .enable_mask = BIT(10), 453 - .hw.init = &(struct clk_init_data){ 454 - .name = "audio_slimbus_clk", 455 - .parent_names = lcc_slimbus_parents, 456 - .num_parents = 1, 457 - .ops = &clk_branch_ops, 458 - .flags = CLK_SET_RATE_PARENT, 459 - }, 460 - }, 461 - }; 462 - 463 - static struct clk_branch sps_slimbus_clk = { 464 - .halt_reg = 0xd4, 465 - .halt_bit = 1, 466 - .halt_check = BRANCH_HALT_ENABLE, 467 - .clkr = { 468 - .enable_reg = 0xcc, 469 - .enable_mask = BIT(12), 470 - .hw.init = &(struct clk_init_data){ 471 - .name = "sps_slimbus_clk", 472 - .parent_names = lcc_slimbus_parents, 473 - .num_parents = 1, 474 - .ops = &clk_branch_ops, 475 - .flags = CLK_SET_RATE_PARENT, 476 - }, 477 - }, 478 - }; 479 - 480 - static struct clk_regmap *lcc_mdm9615_clks[] = { 481 - [PLL4] = &pll4.clkr, 482 - [MI2S_OSR_SRC] = &mi2s_osr_src.clkr, 483 - [MI2S_OSR_CLK] = &mi2s_osr_clk.clkr, 484 - [MI2S_DIV_CLK] = &mi2s_div_clk.clkr, 485 - [MI2S_BIT_DIV_CLK] = &mi2s_bit_div_clk.clkr, 486 - [MI2S_BIT_CLK] = &mi2s_bit_clk.clkr, 487 - [PCM_SRC] = &pcm_src.clkr, 488 - [PCM_CLK_OUT] = &pcm_clk_out.clkr, 489 - [PCM_CLK] = &pcm_clk.clkr, 490 - [SLIMBUS_SRC] = &slimbus_src.clkr, 491 - [AUDIO_SLIMBUS_CLK] = &audio_slimbus_clk.clkr, 492 - [SPS_SLIMBUS_CLK] = &sps_slimbus_clk.clkr, 493 - [CODEC_I2S_MIC_OSR_SRC] = &codec_i2s_mic_osr_src.clkr, 494 - [CODEC_I2S_MIC_OSR_CLK] = &codec_i2s_mic_osr_clk.clkr, 495 - [CODEC_I2S_MIC_DIV_CLK] = &codec_i2s_mic_div_clk.clkr, 496 - [CODEC_I2S_MIC_BIT_DIV_CLK] = &codec_i2s_mic_bit_div_clk.clkr, 497 - [CODEC_I2S_MIC_BIT_CLK] = &codec_i2s_mic_bit_clk.clkr, 498 - [SPARE_I2S_MIC_OSR_SRC] = &spare_i2s_mic_osr_src.clkr, 499 - [SPARE_I2S_MIC_OSR_CLK] = &spare_i2s_mic_osr_clk.clkr, 500 - [SPARE_I2S_MIC_DIV_CLK] = &spare_i2s_mic_div_clk.clkr, 501 - [SPARE_I2S_MIC_BIT_DIV_CLK] = &spare_i2s_mic_bit_div_clk.clkr, 502 - [SPARE_I2S_MIC_BIT_CLK] = &spare_i2s_mic_bit_clk.clkr, 503 - [CODEC_I2S_SPKR_OSR_SRC] = &codec_i2s_spkr_osr_src.clkr, 504 - [CODEC_I2S_SPKR_OSR_CLK] = &codec_i2s_spkr_osr_clk.clkr, 505 - [CODEC_I2S_SPKR_DIV_CLK] = &codec_i2s_spkr_div_clk.clkr, 506 - [CODEC_I2S_SPKR_BIT_DIV_CLK] = &codec_i2s_spkr_bit_div_clk.clkr, 507 - [CODEC_I2S_SPKR_BIT_CLK] = &codec_i2s_spkr_bit_clk.clkr, 508 - [SPARE_I2S_SPKR_OSR_SRC] = &spare_i2s_spkr_osr_src.clkr, 509 - [SPARE_I2S_SPKR_OSR_CLK] = &spare_i2s_spkr_osr_clk.clkr, 510 - [SPARE_I2S_SPKR_DIV_CLK] = &spare_i2s_spkr_div_clk.clkr, 511 - [SPARE_I2S_SPKR_BIT_DIV_CLK] = &spare_i2s_spkr_bit_div_clk.clkr, 512 - [SPARE_I2S_SPKR_BIT_CLK] = &spare_i2s_spkr_bit_clk.clkr, 513 - }; 514 - 515 - static const struct regmap_config lcc_mdm9615_regmap_config = { 516 - .reg_bits = 32, 517 - .reg_stride = 4, 518 - .val_bits = 32, 519 - .max_register = 0xfc, 520 - .fast_io = true, 521 - }; 522 - 523 - static const struct qcom_cc_desc lcc_mdm9615_desc = { 524 - .config = &lcc_mdm9615_regmap_config, 525 - .clks = lcc_mdm9615_clks, 526 - .num_clks = ARRAY_SIZE(lcc_mdm9615_clks), 527 - }; 528 - 529 - static const struct of_device_id lcc_mdm9615_match_table[] = { 530 - { .compatible = "qcom,lcc-mdm9615" }, 531 - { } 532 - }; 533 - MODULE_DEVICE_TABLE(of, lcc_mdm9615_match_table); 534 - 535 - static int lcc_mdm9615_probe(struct platform_device *pdev) 536 - { 537 - u32 val; 538 - struct regmap *regmap; 539 - 540 - regmap = qcom_cc_map(pdev, &lcc_mdm9615_desc); 541 - if (IS_ERR(regmap)) 542 - return PTR_ERR(regmap); 543 - 544 - /* Use the correct frequency plan depending on speed of PLL4 */ 545 - regmap_read(regmap, 0x4, &val); 546 - if (val == 0x12) { 547 - slimbus_src.freq_tbl = clk_tbl_aif_osr_492; 548 - mi2s_osr_src.freq_tbl = clk_tbl_aif_osr_492; 549 - codec_i2s_mic_osr_src.freq_tbl = clk_tbl_aif_osr_492; 550 - spare_i2s_mic_osr_src.freq_tbl = clk_tbl_aif_osr_492; 551 - codec_i2s_spkr_osr_src.freq_tbl = clk_tbl_aif_osr_492; 552 - spare_i2s_spkr_osr_src.freq_tbl = clk_tbl_aif_osr_492; 553 - pcm_src.freq_tbl = clk_tbl_pcm_492; 554 - } 555 - /* Enable PLL4 source on the LPASS Primary PLL Mux */ 556 - regmap_write(regmap, 0xc4, 0x1); 557 - 558 - return qcom_cc_really_probe(pdev, &lcc_mdm9615_desc, regmap); 559 - } 560 - 561 - static struct platform_driver lcc_mdm9615_driver = { 562 - .probe = lcc_mdm9615_probe, 563 - .driver = { 564 - .name = "lcc-mdm9615", 565 - .of_match_table = lcc_mdm9615_match_table, 566 - }, 567 - }; 568 - module_platform_driver(lcc_mdm9615_driver); 569 - 570 - MODULE_DESCRIPTION("QCOM LCC MDM9615 Driver"); 571 - MODULE_LICENSE("GPL v2"); 572 - MODULE_ALIAS("platform:lcc-mdm9615");
+15 -5
drivers/clk/qcom/lcc-msm8960.c
··· 9 9 #include <linux/platform_device.h> 10 10 #include <linux/module.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/clk-provider.h> 14 13 #include <linux/regmap.h> 15 14 ··· 22 23 #include "clk-regmap-divider.h" 23 24 #include "clk-regmap-mux.h" 24 25 26 + static struct clk_parent_data pxo_parent_data = { 27 + .fw_name = "pxo", .name = "pxo_board", 28 + }; 29 + 25 30 static struct clk_pll pll4 = { 26 31 .l_reg = 0x4, 27 32 .m_reg = 0x8, ··· 36 33 .status_bit = 16, 37 34 .clkr.hw.init = &(struct clk_init_data){ 38 35 .name = "pll4", 39 - .parent_data = (const struct clk_parent_data[]){ 40 - { .fw_name = "pxo", .name = "pxo_board" }, 41 - }, 36 + .parent_data = &pxo_parent_data, 42 37 .num_parents = 1, 43 38 .ops = &clk_pll_ops, 44 39 }, ··· 52 51 { P_PLL4, 2 } 53 52 }; 54 53 55 - static const struct clk_parent_data lcc_pxo_pll4[] = { 54 + static struct clk_parent_data lcc_pxo_pll4[] = { 56 55 { .fw_name = "pxo", .name = "pxo_board" }, 57 56 { .fw_name = "pll4_vote", .name = "pll4_vote" }, 58 57 }; ··· 445 444 static const struct of_device_id lcc_msm8960_match_table[] = { 446 445 { .compatible = "qcom,lcc-msm8960" }, 447 446 { .compatible = "qcom,lcc-apq8064" }, 447 + { .compatible = "qcom,lcc-mdm9615" }, 448 448 { } 449 449 }; 450 450 MODULE_DEVICE_TABLE(of, lcc_msm8960_match_table); ··· 454 452 { 455 453 u32 val; 456 454 struct regmap *regmap; 455 + 456 + /* patch for the cxo <-> pxo difference */ 457 + if (of_device_is_compatible(pdev->dev.of_node, "qcom,lcc-mdm9615")) { 458 + pxo_parent_data.fw_name = "cxo"; 459 + pxo_parent_data.name = "cxo_board"; 460 + lcc_pxo_pll4[0].fw_name = "cxo"; 461 + lcc_pxo_pll4[0].name = "cxo_board"; 462 + } 457 463 458 464 regmap = qcom_cc_map(pdev, &lcc_msm8960_desc); 459 465 if (IS_ERR(regmap))
+1 -1
drivers/clk/qcom/lpass-gfm-sm8250.c
··· 15 15 #include <linux/pm_clock.h> 16 16 #include <linux/pm_runtime.h> 17 17 #include <linux/device.h> 18 + #include <linux/of.h> 18 19 #include <linux/platform_device.h> 19 - #include <linux/of_device.h> 20 20 #include <dt-bindings/clock/qcom,sm8250-lpass-audiocc.h> 21 21 #include <dt-bindings/clock/qcom,sm8250-lpass-aoncc.h> 22 22
+2 -1
drivers/clk/qcom/lpassaudiocc-sc7280.c
··· 7 7 #include <linux/err.h> 8 8 #include <linux/kernel.h> 9 9 #include <linux/module.h> 10 - #include <linux/of_device.h> 10 + #include <linux/of.h> 11 + #include <linux/platform_device.h> 11 12 #include <linux/pm_clock.h> 12 13 #include <linux/pm_runtime.h> 13 14 #include <linux/regmap.h>
+12 -4
drivers/clk/qcom/lpasscc-sc7280.c
··· 118 118 ret = pm_clk_add(&pdev->dev, "iface"); 119 119 if (ret < 0) { 120 120 dev_err(&pdev->dev, "failed to acquire iface clock\n"); 121 - goto destroy_pm_clk; 121 + goto err_destroy_pm_clk; 122 122 } 123 + 124 + ret = pm_runtime_resume_and_get(&pdev->dev); 125 + if (ret) 126 + goto err_destroy_pm_clk; 123 127 124 128 if (!of_property_read_bool(pdev->dev.of_node, "qcom,adsp-pil-mode")) { 125 129 lpass_regmap_config.name = "qdsp6ss"; ··· 132 128 133 129 ret = qcom_cc_probe_by_index(pdev, 0, desc); 134 130 if (ret) 135 - goto destroy_pm_clk; 131 + goto err_put_rpm; 136 132 } 137 133 138 134 lpass_regmap_config.name = "top_cc"; ··· 141 137 142 138 ret = qcom_cc_probe_by_index(pdev, 1, desc); 143 139 if (ret) 144 - goto destroy_pm_clk; 140 + goto err_put_rpm; 141 + 142 + pm_runtime_put(&pdev->dev); 145 143 146 144 return 0; 147 145 148 - destroy_pm_clk: 146 + err_put_rpm: 147 + pm_runtime_put_sync(&pdev->dev); 148 + err_destroy_pm_clk: 149 149 pm_clk_destroy(&pdev->dev); 150 150 151 151 return ret;
+3 -1
drivers/clk/qcom/lpasscc-sc8280xp.c
··· 6 6 #include <linux/clk-provider.h> 7 7 #include <linux/err.h> 8 8 #include <linux/kernel.h> 9 + #include <linux/mod_devicetable.h> 9 10 #include <linux/module.h> 10 - #include <linux/of_device.h> 11 + #include <linux/of.h> 12 + #include <linux/platform_device.h> 11 13 #include <linux/regmap.h> 12 14 13 15 #include <dt-bindings/clock/qcom,sc8280xp-lpasscc.h>
+1 -1
drivers/clk/qcom/lpasscorecc-sc7180.c
··· 6 6 #include <linux/clk-provider.h> 7 7 #include <linux/err.h> 8 8 #include <linux/module.h> 9 - #include <linux/of_device.h> 9 + #include <linux/platform_device.h> 10 10 #include <linux/pm_clock.h> 11 11 #include <linux/pm_runtime.h> 12 12 #include <linux/of.h>
+2 -1
drivers/clk/qcom/lpasscorecc-sc7280.c
··· 6 6 #include <linux/clk-provider.h> 7 7 #include <linux/err.h> 8 8 #include <linux/module.h> 9 - #include <linux/of_device.h> 9 + #include <linux/of.h> 10 + #include <linux/platform_device.h> 10 11 #include <linux/pm_clock.h> 11 12 #include <linux/pm_runtime.h> 12 13 #include <linux/regmap.h>
+11 -1
drivers/clk/qcom/mmcc-msm8974.c
··· 9 9 #include <linux/platform_device.h> 10 10 #include <linux/module.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/clk-provider.h> 14 13 #include <linux/regmap.h> 15 14 #include <linux/reset-controller.h> ··· 2425 2426 .pwrsts = PWRSTS_OFF_ON, 2426 2427 }; 2427 2428 2429 + static struct gdsc oxili_cx_gdsc_msm8226 = { 2430 + .gdscr = 0x4034, 2431 + .cxcs = (unsigned int []){ 0x4028 }, 2432 + .cxc_count = 1, 2433 + .pd = { 2434 + .name = "oxili_cx", 2435 + }, 2436 + .pwrsts = PWRSTS_OFF_ON, 2437 + }; 2438 + 2428 2439 static struct clk_regmap *mmcc_msm8226_clocks[] = { 2429 2440 [MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr, 2430 2441 [MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr, ··· 2524 2515 [MDSS_GDSC] = &mdss_gdsc, 2525 2516 [CAMSS_JPEG_GDSC] = &camss_jpeg_gdsc, 2526 2517 [CAMSS_VFE_GDSC] = &camss_vfe_gdsc, 2518 + [OXILICX_GDSC] = &oxili_cx_gdsc_msm8226, 2527 2519 }; 2528 2520 2529 2521 static const struct regmap_config mmcc_msm8226_regmap_config = {
-1
drivers/clk/qcom/mmcc-msm8994.c
··· 9 9 #include <linux/platform_device.h> 10 10 #include <linux/module.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/clk-provider.h> 14 13 #include <linux/regmap.h> 15 14 #include <linux/reset-controller.h>
-1
drivers/clk/qcom/mmcc-msm8996.c
··· 9 9 #include <linux/platform_device.h> 10 10 #include <linux/module.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/clk-provider.h> 14 13 #include <linux/regmap.h> 15 14 #include <linux/reset-controller.h>
+8 -28
drivers/clk/qcom/mmcc-msm8998.c
··· 9 9 #include <linux/platform_device.h> 10 10 #include <linux/module.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/clk-provider.h> 14 13 #include <linux/regmap.h> 15 14 #include <linux/reset-controller.h> ··· 43 44 P_HDMIPLL, 44 45 P_DPVCO, 45 46 P_DPLINK, 46 - }; 47 - 48 - static struct clk_fixed_factor gpll0_div = { 49 - .mult = 1, 50 - .div = 2, 51 - .hw.init = &(struct clk_init_data){ 52 - .name = "mmss_gpll0_div", 53 - .parent_data = &(const struct clk_parent_data){ 54 - .fw_name = "gpll0" 55 - }, 56 - .num_parents = 1, 57 - .ops = &clk_fixed_factor_ops, 58 - }, 59 47 }; 60 48 61 49 static const struct clk_div_table post_div_table_fabia_even[] = { ··· 340 354 static const struct clk_parent_data mmss_xo_gpll0_gpll0_div[] = { 341 355 { .fw_name = "xo" }, 342 356 { .fw_name = "gpll0" }, 343 - { .hw = &gpll0_div.hw }, 357 + { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 344 358 }; 345 359 346 360 static const struct parent_map mmss_xo_mmpll0_gpll0_gpll0_div_map[] = { ··· 354 368 { .fw_name = "xo" }, 355 369 { .hw = &mmpll0_out_even.clkr.hw }, 356 370 { .fw_name = "gpll0" }, 357 - { .hw = &gpll0_div.hw }, 371 + { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 358 372 }; 359 373 360 374 static const struct parent_map mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map[] = { ··· 370 384 { .hw = &mmpll0_out_even.clkr.hw }, 371 385 { .hw = &mmpll1_out_even.clkr.hw }, 372 386 { .fw_name = "gpll0" }, 373 - { .hw = &gpll0_div.hw }, 387 + { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 374 388 }; 375 389 376 390 static const struct parent_map mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map[] = { ··· 386 400 { .hw = &mmpll0_out_even.clkr.hw }, 387 401 { .hw = &mmpll5_out_even.clkr.hw }, 388 402 { .fw_name = "gpll0" }, 389 - { .hw = &gpll0_div.hw }, 403 + { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 390 404 }; 391 405 392 406 static const struct parent_map mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div_map[] = { ··· 404 418 { .hw = &mmpll3_out_even.clkr.hw }, 405 419 { .hw = &mmpll6_out_even.clkr.hw }, 406 420 { .fw_name = "gpll0" }, 407 - { .hw = &gpll0_div.hw }, 421 + { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 408 422 }; 409 423 410 424 static const struct parent_map mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map[] = { ··· 422 436 { .hw = &mmpll7_out_even.clkr.hw }, 423 437 { .hw = &mmpll10_out_even.clkr.hw }, 424 438 { .fw_name = "gpll0" }, 425 - { .hw = &gpll0_div.hw }, 439 + { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 426 440 }; 427 441 428 442 static const struct parent_map mmss_xo_mmpll0_mmpll7_mmpll10_gpll0_gpll0_div_map[] = { ··· 440 454 { .hw = &mmpll7_out_even.clkr.hw }, 441 455 { .hw = &mmpll10_out_even.clkr.hw }, 442 456 { .fw_name = "gpll0" }, 443 - { .hw = &gpll0_div.hw }, 457 + { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 444 458 }; 445 459 446 460 static const struct parent_map mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map[] = { ··· 460 474 { .hw = &mmpll7_out_even.clkr.hw }, 461 475 { .hw = &mmpll10_out_even.clkr.hw }, 462 476 { .fw_name = "gpll0" }, 463 - { .hw = &gpll0_div.hw }, 477 + { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 464 478 }; 465 479 466 480 static struct clk_rcg2 byte0_clk_src = { ··· 2530 2544 }, 2531 2545 }; 2532 2546 2533 - static struct clk_hw *mmcc_msm8998_hws[] = { 2534 - &gpll0_div.hw, 2535 - }; 2536 - 2537 2547 static struct gdsc video_top_gdsc = { 2538 2548 .gdscr = 0x1024, 2539 2549 .pd = { ··· 2837 2855 .num_resets = ARRAY_SIZE(mmcc_msm8998_resets), 2838 2856 .gdscs = mmcc_msm8998_gdscs, 2839 2857 .num_gdscs = ARRAY_SIZE(mmcc_msm8998_gdscs), 2840 - .clk_hws = mmcc_msm8998_hws, 2841 - .num_clk_hws = ARRAY_SIZE(mmcc_msm8998_hws), 2842 2858 }; 2843 2859 2844 2860 static const struct of_device_id mmcc_msm8998_match_table[] = {
+13 -2
drivers/clk/qcom/mss-sc7180.c
··· 87 87 return ret; 88 88 } 89 89 90 - ret = qcom_cc_probe(pdev, &mss_sc7180_desc); 91 - if (ret < 0) 90 + ret = pm_runtime_resume_and_get(&pdev->dev); 91 + if (ret) 92 92 return ret; 93 93 94 + ret = qcom_cc_probe(pdev, &mss_sc7180_desc); 95 + if (ret < 0) 96 + goto err_put_rpm; 97 + 98 + pm_runtime_put(&pdev->dev); 99 + 94 100 return 0; 101 + 102 + err_put_rpm: 103 + pm_runtime_put_sync(&pdev->dev); 104 + 105 + return ret; 95 106 } 96 107 97 108 static const struct dev_pm_ops mss_sc7180_pm_ops = {
+13 -2
drivers/clk/qcom/q6sstop-qcs404.c
··· 174 174 return ret; 175 175 } 176 176 177 + ret = pm_runtime_resume_and_get(&pdev->dev); 178 + if (ret) 179 + return ret; 180 + 177 181 q6sstop_regmap_config.name = "q6sstop_tcsr"; 178 182 desc = &tcsr_qcs404_desc; 179 183 180 184 ret = qcom_cc_probe_by_index(pdev, 1, desc); 181 185 if (ret) 182 - return ret; 186 + goto err_put_rpm; 183 187 184 188 q6sstop_regmap_config.name = "q6sstop_cc"; 185 189 desc = &q6sstop_qcs404_desc; 186 190 187 191 ret = qcom_cc_probe_by_index(pdev, 0, desc); 188 192 if (ret) 189 - return ret; 193 + goto err_put_rpm; 194 + 195 + pm_runtime_put(&pdev->dev); 190 196 191 197 return 0; 198 + 199 + err_put_rpm: 200 + pm_runtime_put_sync(&pdev->dev); 201 + 202 + return ret; 192 203 } 193 204 194 205 static const struct dev_pm_ops q6sstopcc_pm_ops = {
+2 -1
drivers/clk/qcom/reset.c
··· 16 16 struct qcom_reset_controller *rst = to_qcom_reset_controller(rcdev); 17 17 18 18 rcdev->ops->assert(rcdev, id); 19 - udelay(rst->reset_map[id].udelay ?: 1); /* use 1 us as default */ 19 + fsleep(rst->reset_map[id].udelay ?: 1); /* use 1 us as default */ 20 + 20 21 rcdev->ops->deassert(rcdev, id); 21 22 return 0; 22 23 }
+2 -1
drivers/clk/qcom/tcsrcc-sm8550.c
··· 7 7 8 8 #include <linux/clk-provider.h> 9 9 #include <linux/module.h> 10 - #include <linux/of_device.h> 10 + #include <linux/of.h> 11 + #include <linux/platform_device.h> 11 12 #include <linux/regmap.h> 12 13 13 14 #include <dt-bindings/clock/qcom,sm8550-tcsr.h>
+13 -2
drivers/clk/qcom/turingcc-qcs404.c
··· 125 125 return ret; 126 126 } 127 127 128 - ret = qcom_cc_probe(pdev, &turingcc_desc); 129 - if (ret < 0) 128 + ret = pm_runtime_resume_and_get(&pdev->dev); 129 + if (ret) 130 130 return ret; 131 131 132 + ret = qcom_cc_probe(pdev, &turingcc_desc); 133 + if (ret < 0) 134 + goto err_put_rpm; 135 + 136 + pm_runtime_put(&pdev->dev); 137 + 132 138 return 0; 139 + 140 + err_put_rpm: 141 + pm_runtime_put_sync(&pdev->dev); 142 + 143 + return ret; 133 144 } 134 145 135 146 static const struct dev_pm_ops turingcc_pm_ops = {
+41 -1
drivers/clk/qcom/videocc-sm8350.c
··· 41 41 { 249600000, 1750000000, 0 }, 42 42 }; 43 43 44 + static const struct pll_vco lucid_5lpe_vco_8280xp[] = { 45 + { 249600000, 1800000000, 0 }, 46 + }; 47 + 44 48 static const struct alpha_pll_config video_pll0_config = { 45 49 .l = 0x25, 46 50 .alpha = 0x8000, ··· 163 159 { } 164 160 }; 165 161 162 + static const struct freq_tbl ftbl_video_cc_mvs0_clk_src_8280xp[] = { 163 + F(720000000, P_VIDEO_PLL0_OUT_MAIN, 1, 0, 0), 164 + F(1014000000, P_VIDEO_PLL0_OUT_MAIN, 1, 0, 0), 165 + F(1098000000, P_VIDEO_PLL0_OUT_MAIN, 1, 0, 0), 166 + F(1332000000, P_VIDEO_PLL0_OUT_MAIN, 1, 0, 0), 167 + F(1599000000, P_VIDEO_PLL0_OUT_MAIN, 1, 0, 0), 168 + F(1680000000, P_VIDEO_PLL0_OUT_MAIN, 1, 0, 0), 169 + { } 170 + }; 171 + 166 172 static struct clk_rcg2 video_cc_mvs0_clk_src = { 167 173 .cmd_rcgr = 0xb94, 168 174 .mnd_width = 0, ··· 192 178 F(840000000, P_VIDEO_PLL1_OUT_MAIN, 1, 0, 0), 193 179 F(1098000000, P_VIDEO_PLL1_OUT_MAIN, 1, 0, 0), 194 180 F(1332000000, P_VIDEO_PLL1_OUT_MAIN, 1, 0, 0), 181 + { } 182 + }; 183 + 184 + static const struct freq_tbl ftbl_video_cc_mvs1_clk_src_8280xp[] = { 185 + F(840000000, P_VIDEO_PLL1_OUT_MAIN, 1, 0, 0), 186 + F(1098000000, P_VIDEO_PLL1_OUT_MAIN, 1, 0, 0), 187 + F(1332000000, P_VIDEO_PLL1_OUT_MAIN, 1, 0, 0), 188 + F(1600000000, P_VIDEO_PLL1_OUT_MAIN, 1, 0, 0), 189 + F(1800000000, P_VIDEO_PLL1_OUT_MAIN, 1, 0, 0), 195 190 { } 196 191 }; 197 192 ··· 522 499 523 500 static int video_cc_sm8350_probe(struct platform_device *pdev) 524 501 { 502 + u32 video_cc_xo_clk_cbcr = 0xeec; 525 503 struct regmap *regmap; 526 504 int ret; 527 505 ··· 533 509 ret = pm_runtime_resume_and_get(&pdev->dev); 534 510 if (ret) 535 511 return ret; 512 + 513 + if (of_device_is_compatible(pdev->dev.of_node, "qcom,sc8280xp-videocc")) { 514 + video_cc_sleep_clk_src.cmd_rcgr = 0xf38; 515 + video_cc_sleep_clk.halt_reg = 0xf58; 516 + video_cc_sleep_clk.clkr.enable_reg = 0xf58; 517 + video_cc_xo_clk_src.cmd_rcgr = 0xf14; 518 + video_cc_xo_clk_cbcr = 0xf34; 519 + 520 + video_pll0.vco_table = video_pll1.vco_table = lucid_5lpe_vco_8280xp; 521 + /* No change, but assign it for completeness */ 522 + video_pll0.num_vco = video_pll1.num_vco = ARRAY_SIZE(lucid_5lpe_vco_8280xp); 523 + 524 + video_cc_mvs0_clk_src.freq_tbl = ftbl_video_cc_mvs0_clk_src_8280xp; 525 + video_cc_mvs1_clk_src.freq_tbl = ftbl_video_cc_mvs1_clk_src_8280xp; 526 + } 536 527 537 528 regmap = qcom_cc_map(pdev, &video_cc_sm8350_desc); 538 529 if (IS_ERR(regmap)) { ··· 564 525 * video_cc_xo_clk 565 526 */ 566 527 regmap_update_bits(regmap, 0xe58, BIT(0), BIT(0)); 567 - regmap_update_bits(regmap, 0xeec, BIT(0), BIT(0)); 528 + regmap_update_bits(regmap, video_cc_xo_clk_cbcr, BIT(0), BIT(0)); 568 529 569 530 ret = qcom_cc_really_probe(pdev, &video_cc_sm8350_desc, regmap); 570 531 pm_runtime_put(&pdev->dev); ··· 573 534 } 574 535 575 536 static const struct of_device_id video_cc_sm8350_match_table[] = { 537 + { .compatible = "qcom,sc8280xp-videocc" }, 576 538 { .compatible = "qcom,sm8350-videocc" }, 577 539 { } 578 540 };
+2 -1
drivers/clk/qcom/videocc-sm8450.c
··· 4 4 */ 5 5 6 6 #include <linux/clk-provider.h> 7 + #include <linux/mod_devicetable.h> 7 8 #include <linux/module.h> 8 - #include <linux/of_device.h> 9 + #include <linux/platform_device.h> 9 10 #include <linux/pm_runtime.h> 10 11 #include <linux/regmap.h> 11 12
+2 -1
drivers/clk/qcom/videocc-sm8550.c
··· 4 4 */ 5 5 6 6 #include <linux/clk-provider.h> 7 + #include <linux/mod_devicetable.h> 7 8 #include <linux/module.h> 8 - #include <linux/of_device.h> 9 + #include <linux/platform_device.h> 9 10 #include <linux/pm_runtime.h> 10 11 #include <linux/regmap.h> 11 12
+1 -2
drivers/clk/ralink/clk-mt7621.c
··· 521 521 GFP_KERNEL); 522 522 if (!clk_data) 523 523 return -ENOMEM; 524 + clk_data->num = count; 524 525 525 526 for (i = 0; i < ARRAY_SIZE(mt7621_clks_base); i++) 526 527 clk_data->hws[i] = mt7621_clk_early[i]; ··· 537 536 dev_err(dev, "Couldn't register fixed clock gates\n"); 538 537 goto unreg_clk_fixed; 539 538 } 540 - 541 - clk_data->num = count; 542 539 543 540 ret = devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, clk_data); 544 541 if (ret) {
-3
drivers/clk/renesas/clk-emev2.c
··· 6 6 * Copyright (C) 2012 Magnus Damm 7 7 */ 8 8 #include <linux/clk-provider.h> 9 - #include <linux/clkdev.h> 10 9 #include <linux/io.h> 11 10 #include <linux/of.h> 12 11 #include <linux/of_address.h> ··· 73 74 clk = clk_register_divider(NULL, np->name, parent_name, 0, 74 75 smu_base + reg[0], reg[1], 8, 0, &lock); 75 76 of_clk_add_provider(np, of_clk_src_simple_get, clk); 76 - clk_register_clkdev(clk, np->full_name, NULL); 77 77 pr_debug("## %s %pOFn %p\n", __func__, np, clk); 78 78 } 79 79 CLK_OF_DECLARE(emev2_smu_clkdiv, "renesas,emev2-smu-clkdiv", ··· 90 92 clk = clk_register_gate(NULL, np->name, parent_name, 0, 91 93 smu_base + reg[0], reg[1], 0, &lock); 92 94 of_clk_add_provider(np, of_clk_src_simple_get, clk); 93 - clk_register_clkdev(clk, np->full_name, NULL); 94 95 pr_debug("## %s %pOFn %p\n", __func__, np, clk); 95 96 } 96 97 CLK_OF_DECLARE(emev2_smu_gclk, "renesas,emev2-smu-gclk", emev2_smu_gclk_init);
+3
drivers/clk/renesas/r8a774a1-cpg-mssr.c
··· 76 76 /* Core Clock Outputs */ 77 77 DEF_GEN3_Z("z", R8A774A1_CLK_Z, CLK_TYPE_GEN3_Z, CLK_PLL0, 2, 8), 78 78 DEF_GEN3_Z("z2", R8A774A1_CLK_Z2, CLK_TYPE_GEN3_Z, CLK_PLL2, 2, 0), 79 + DEF_GEN3_Z("zg", R8A774A1_CLK_ZG, CLK_TYPE_GEN3_ZG, CLK_PLL4, 4, 24), 79 80 DEF_FIXED("ztr", R8A774A1_CLK_ZTR, CLK_PLL1_DIV2, 6, 1), 80 81 DEF_FIXED("ztrd2", R8A774A1_CLK_ZTRD2, CLK_PLL1_DIV2, 12, 1), 81 82 DEF_FIXED("zt", R8A774A1_CLK_ZT, CLK_PLL1_DIV2, 4, 1), ··· 124 123 }; 125 124 126 125 static const struct mssr_mod_clk r8a774a1_mod_clks[] __initconst = { 126 + DEF_MOD("3dge", 112, R8A774A1_CLK_ZG), 127 127 DEF_MOD("tmu4", 121, R8A774A1_CLK_S0D6), 128 128 DEF_MOD("tmu3", 122, R8A774A1_CLK_S3D2), 129 129 DEF_MOD("tmu2", 123, R8A774A1_CLK_S3D2), ··· 215 213 DEF_MOD("rpc-if", 917, R8A774A1_CLK_RPCD2), 216 214 DEF_MOD("i2c6", 918, R8A774A1_CLK_S0D6), 217 215 DEF_MOD("i2c5", 919, R8A774A1_CLK_S0D6), 216 + DEF_MOD("adg", 922, R8A774A1_CLK_S0D4), 218 217 DEF_MOD("iic-pmic", 926, R8A774A1_CLK_CP), 219 218 DEF_MOD("i2c4", 927, R8A774A1_CLK_S0D6), 220 219 DEF_MOD("i2c3", 928, R8A774A1_CLK_S0D6),
+3
drivers/clk/renesas/r8a774b1-cpg-mssr.c
··· 73 73 74 74 /* Core Clock Outputs */ 75 75 DEF_GEN3_Z("z", R8A774B1_CLK_Z, CLK_TYPE_GEN3_Z, CLK_PLL0, 2, 8), 76 + DEF_GEN3_Z("zg", R8A774B1_CLK_ZG, CLK_TYPE_GEN3_ZG, CLK_PLL4, 4, 24), 76 77 DEF_FIXED("ztr", R8A774B1_CLK_ZTR, CLK_PLL1_DIV2, 6, 1), 77 78 DEF_FIXED("ztrd2", R8A774B1_CLK_ZTRD2, CLK_PLL1_DIV2, 12, 1), 78 79 DEF_FIXED("zt", R8A774B1_CLK_ZT, CLK_PLL1_DIV2, 4, 1), ··· 121 120 }; 122 121 123 122 static const struct mssr_mod_clk r8a774b1_mod_clks[] __initconst = { 123 + DEF_MOD("3dge", 112, R8A774B1_CLK_ZG), 124 124 DEF_MOD("tmu4", 121, R8A774B1_CLK_S0D6), 125 125 DEF_MOD("tmu3", 122, R8A774B1_CLK_S3D2), 126 126 DEF_MOD("tmu2", 123, R8A774B1_CLK_S3D2), ··· 211 209 DEF_MOD("rpc-if", 917, R8A774B1_CLK_RPCD2), 212 210 DEF_MOD("i2c6", 918, R8A774B1_CLK_S0D6), 213 211 DEF_MOD("i2c5", 919, R8A774B1_CLK_S0D6), 212 + DEF_MOD("adg", 922, R8A774B1_CLK_S0D4), 214 213 DEF_MOD("iic-pmic", 926, R8A774B1_CLK_CP), 215 214 DEF_MOD("i2c4", 927, R8A774B1_CLK_S0D6), 216 215 DEF_MOD("i2c3", 928, R8A774B1_CLK_S0D6),
+1
drivers/clk/renesas/r8a774c0-cpg-mssr.c
··· 211 211 DEF_MOD("rpc-if", 917, R8A774C0_CLK_RPCD2), 212 212 DEF_MOD("i2c6", 918, R8A774C0_CLK_S3D2), 213 213 DEF_MOD("i2c5", 919, R8A774C0_CLK_S3D2), 214 + DEF_MOD("adg", 922, R8A774C0_CLK_ZA2), 214 215 DEF_MOD("iic-pmic", 926, R8A774C0_CLK_CP), 215 216 DEF_MOD("i2c4", 927, R8A774C0_CLK_S3D2), 216 217 DEF_MOD("i2c3", 928, R8A774C0_CLK_S3D2),
+3 -1
drivers/clk/renesas/r8a774e1-cpg-mssr.c
··· 76 76 /* Core Clock Outputs */ 77 77 DEF_GEN3_Z("z", R8A774E1_CLK_Z, CLK_TYPE_GEN3_Z, CLK_PLL0, 2, 8), 78 78 DEF_GEN3_Z("z2", R8A774E1_CLK_Z2, CLK_TYPE_GEN3_Z, CLK_PLL2, 2, 0), 79 + DEF_GEN3_Z("zg", R8A774E1_CLK_ZG, CLK_TYPE_GEN3_ZG, CLK_PLL4, 4, 24), 79 80 DEF_FIXED("ztr", R8A774E1_CLK_ZTR, CLK_PLL1_DIV2, 6, 1), 80 81 DEF_FIXED("ztrd2", R8A774E1_CLK_ZTRD2, CLK_PLL1_DIV2, 12, 1), 81 82 DEF_FIXED("zt", R8A774E1_CLK_ZT, CLK_PLL1_DIV2, 4, 1), ··· 125 124 }; 126 125 127 126 static const struct mssr_mod_clk r8a774e1_mod_clks[] __initconst = { 127 + DEF_MOD("3dge", 112, R8A774E1_CLK_ZG), 128 128 DEF_MOD("fdp1-1", 118, R8A774E1_CLK_S0D1), 129 129 DEF_MOD("fdp1-0", 119, R8A774E1_CLK_S0D1), 130 130 DEF_MOD("tmu4", 121, R8A774E1_CLK_S0D6), ··· 223 221 DEF_MOD("rpc-if", 917, R8A774E1_CLK_RPCD2), 224 222 DEF_MOD("i2c6", 918, R8A774E1_CLK_S0D6), 225 223 DEF_MOD("i2c5", 919, R8A774E1_CLK_S0D6), 226 - DEF_MOD("adg", 922, R8A774E1_CLK_S0D1), 224 + DEF_MOD("adg", 922, R8A774E1_CLK_S0D4), 227 225 DEF_MOD("iic-pmic", 926, R8A774E1_CLK_CP), 228 226 DEF_MOD("i2c4", 927, R8A774E1_CLK_S0D6), 229 227 DEF_MOD("i2c3", 928, R8A774E1_CLK_S0D6),
+3
drivers/clk/renesas/r8a7795-cpg-mssr.c
··· 79 79 /* Core Clock Outputs */ 80 80 DEF_GEN3_Z("z", R8A7795_CLK_Z, CLK_TYPE_GEN3_Z, CLK_PLL0, 2, 8), 81 81 DEF_GEN3_Z("z2", R8A7795_CLK_Z2, CLK_TYPE_GEN3_Z, CLK_PLL2, 2, 0), 82 + DEF_GEN3_Z("zg", R8A7795_CLK_ZG, CLK_TYPE_GEN3_ZG, CLK_PLL4, 4, 24), 82 83 DEF_FIXED("ztr", R8A7795_CLK_ZTR, CLK_PLL1_DIV2, 6, 1), 83 84 DEF_FIXED("ztrd2", R8A7795_CLK_ZTRD2, CLK_PLL1_DIV2, 12, 1), 84 85 DEF_FIXED("zt", R8A7795_CLK_ZT, CLK_PLL1_DIV2, 4, 1), ··· 129 128 }; 130 129 131 130 static struct mssr_mod_clk r8a7795_mod_clks[] __initdata = { 131 + DEF_MOD("3dge", 112, R8A7795_CLK_ZG), 132 132 DEF_MOD("fdp1-1", 118, R8A7795_CLK_S0D1), 133 133 DEF_MOD("fdp1-0", 119, R8A7795_CLK_S0D1), 134 134 DEF_MOD("tmu4", 121, R8A7795_CLK_S0D6), ··· 253 251 DEF_MOD("rpc-if", 917, R8A7795_CLK_RPCD2), 254 252 DEF_MOD("i2c6", 918, R8A7795_CLK_S0D6), 255 253 DEF_MOD("i2c5", 919, R8A7795_CLK_S0D6), 254 + DEF_MOD("adg", 922, R8A7795_CLK_S0D4), 256 255 DEF_MOD("i2c-dvfs", 926, R8A7795_CLK_CP), 257 256 DEF_MOD("i2c4", 927, R8A7795_CLK_S0D6), 258 257 DEF_MOD("i2c3", 928, R8A7795_CLK_S0D6),
+3
drivers/clk/renesas/r8a7796-cpg-mssr.c
··· 81 81 /* Core Clock Outputs */ 82 82 DEF_GEN3_Z("z", R8A7796_CLK_Z, CLK_TYPE_GEN3_Z, CLK_PLL0, 2, 8), 83 83 DEF_GEN3_Z("z2", R8A7796_CLK_Z2, CLK_TYPE_GEN3_Z, CLK_PLL2, 2, 0), 84 + DEF_GEN3_Z("zg", R8A7796_CLK_ZG, CLK_TYPE_GEN3_ZG, CLK_PLL4, 4, 24), 84 85 DEF_FIXED("ztr", R8A7796_CLK_ZTR, CLK_PLL1_DIV2, 6, 1), 85 86 DEF_FIXED("ztrd2", R8A7796_CLK_ZTRD2, CLK_PLL1_DIV2, 12, 1), 86 87 DEF_FIXED("zt", R8A7796_CLK_ZT, CLK_PLL1_DIV2, 4, 1), ··· 131 130 }; 132 131 133 132 static struct mssr_mod_clk r8a7796_mod_clks[] __initdata = { 133 + DEF_MOD("3dge", 112, R8A7796_CLK_ZG), 134 134 DEF_MOD("fdp1-0", 119, R8A7796_CLK_S0D1), 135 135 DEF_MOD("tmu4", 121, R8A7796_CLK_S0D6), 136 136 DEF_MOD("tmu3", 122, R8A7796_CLK_S3D2), ··· 238 236 DEF_MOD("rpc-if", 917, R8A7796_CLK_RPCD2), 239 237 DEF_MOD("i2c6", 918, R8A7796_CLK_S0D6), 240 238 DEF_MOD("i2c5", 919, R8A7796_CLK_S0D6), 239 + DEF_MOD("adg", 922, R8A7796_CLK_S0D4), 241 240 DEF_MOD("i2c-dvfs", 926, R8A7796_CLK_CP), 242 241 DEF_MOD("i2c4", 927, R8A7796_CLK_S0D6), 243 242 DEF_MOD("i2c3", 928, R8A7796_CLK_S0D6),
+3
drivers/clk/renesas/r8a77965-cpg-mssr.c
··· 76 76 77 77 /* Core Clock Outputs */ 78 78 DEF_GEN3_Z("z", R8A77965_CLK_Z, CLK_TYPE_GEN3_Z, CLK_PLL0, 2, 8), 79 + DEF_GEN3_Z("zg", R8A77965_CLK_ZG, CLK_TYPE_GEN3_ZG, CLK_PLL4, 4, 24), 79 80 DEF_FIXED("ztr", R8A77965_CLK_ZTR, CLK_PLL1_DIV2, 6, 1), 80 81 DEF_FIXED("ztrd2", R8A77965_CLK_ZTRD2, CLK_PLL1_DIV2, 12, 1), 81 82 DEF_FIXED("zt", R8A77965_CLK_ZT, CLK_PLL1_DIV2, 4, 1), ··· 126 125 }; 127 126 128 127 static const struct mssr_mod_clk r8a77965_mod_clks[] __initconst = { 128 + DEF_MOD("3dge", 112, R8A77965_CLK_ZG), 129 129 DEF_MOD("fdp1-0", 119, R8A77965_CLK_S0D1), 130 130 DEF_MOD("tmu4", 121, R8A77965_CLK_S0D6), 131 131 DEF_MOD("tmu3", 122, R8A77965_CLK_S3D2), ··· 238 236 DEF_MOD("rpc-if", 917, R8A77965_CLK_RPCD2), 239 237 DEF_MOD("i2c6", 918, R8A77965_CLK_S0D6), 240 238 DEF_MOD("i2c5", 919, R8A77965_CLK_S0D6), 239 + DEF_MOD("adg", 922, R8A77965_CLK_S0D4), 241 240 DEF_MOD("i2c-dvfs", 926, R8A77965_CLK_CP), 242 241 DEF_MOD("i2c4", 927, R8A77965_CLK_S0D6), 243 242 DEF_MOD("i2c3", 928, R8A77965_CLK_S0D6),
+1
drivers/clk/renesas/r8a77990-cpg-mssr.c
··· 224 224 DEF_MOD("rpc-if", 917, R8A77990_CLK_RPCD2), 225 225 DEF_MOD("i2c6", 918, R8A77990_CLK_S3D2), 226 226 DEF_MOD("i2c5", 919, R8A77990_CLK_S3D2), 227 + DEF_MOD("adg", 922, R8A77990_CLK_ZA2), 227 228 DEF_MOD("i2c-dvfs", 926, R8A77990_CLK_CP), 228 229 DEF_MOD("i2c4", 927, R8A77990_CLK_S3D2), 229 230 DEF_MOD("i2c3", 928, R8A77990_CLK_S3D2),
+1
drivers/clk/renesas/r8a77995-cpg-mssr.c
··· 181 181 DEF_MOD("can-if1", 915, R8A77995_CLK_S3D4), 182 182 DEF_MOD("can-if0", 916, R8A77995_CLK_S3D4), 183 183 DEF_MOD("rpc-if", 917, R8A77995_CLK_RPCD2), 184 + DEF_MOD("adg", 922, R8A77995_CLK_ZA2), 184 185 DEF_MOD("i2c3", 928, R8A77995_CLK_S3D2), 185 186 DEF_MOD("i2c2", 929, R8A77995_CLK_S3D2), 186 187 DEF_MOD("i2c1", 930, R8A77995_CLK_S3D2),
+3
drivers/clk/renesas/r9a07g043-cpg.c
··· 154 154 0x534, 1), 155 155 DEF_MOD("ostm2_pclk", R9A07G043_OSTM2_PCLK, R9A07G043_CLK_P0, 156 156 0x534, 2), 157 + DEF_MOD("mtu_x_mck", R9A07G043_MTU_X_MCK_MTU3, R9A07G043_CLK_P0, 158 + 0x538, 0), 157 159 DEF_MOD("wdt0_pclk", R9A07G043_WDT0_PCLK, R9A07G043_CLK_P0, 158 160 0x548, 0), 159 161 DEF_MOD("wdt0_clk", R9A07G043_WDT0_CLK, R9A07G043_OSCCLK, ··· 266 264 DEF_RST(R9A07G043_OSTM0_PRESETZ, 0x834, 0), 267 265 DEF_RST(R9A07G043_OSTM1_PRESETZ, 0x834, 1), 268 266 DEF_RST(R9A07G043_OSTM2_PRESETZ, 0x834, 2), 267 + DEF_RST(R9A07G043_MTU_X_PRESET_MTU3, 0x838, 0), 269 268 DEF_RST(R9A07G043_WDT0_PRESETN, 0x848, 0), 270 269 DEF_RST(R9A07G043_SPI_RST, 0x850, 0), 271 270 DEF_RST(R9A07G043_SDHI0_IXRST, 0x854, 0),
+15
drivers/clk/renesas/r9a09g011-cpg.c
··· 28 28 #define DIV_W DDIV_PACK(0x328, 0, 3) 29 29 30 30 #define SEL_B SEL_PLL_PACK(0x214, 0, 1) 31 + #define SEL_CSI0 SEL_PLL_PACK(0x330, 0, 1) 32 + #define SEL_CSI4 SEL_PLL_PACK(0x330, 4, 1) 31 33 #define SEL_D SEL_PLL_PACK(0x214, 1, 1) 32 34 #define SEL_E SEL_PLL_PACK(0x214, 2, 1) 33 35 #define SEL_SDI SEL_PLL_PACK(0x300, 0, 1) ··· 60 58 CLK_DIV_W, 61 59 CLK_SEL_B, 62 60 CLK_SEL_B_D2, 61 + CLK_SEL_CSI0, 62 + CLK_SEL_CSI4, 63 63 CLK_SEL_D, 64 64 CLK_SEL_E, 65 65 CLK_SEL_SDI, ··· 112 108 113 109 /* Mux clock tables */ 114 110 static const char * const sel_b[] = { ".main", ".divb" }; 111 + static const char * const sel_csi[] = { ".main_24", ".main" }; 115 112 static const char * const sel_d[] = { ".main", ".divd" }; 116 113 static const char * const sel_e[] = { ".main", ".dive" }; 117 114 static const char * const sel_w[] = { ".main", ".divw" }; ··· 144 139 DEF_MUX_RO(".seld", CLK_SEL_D, SEL_D, sel_d), 145 140 DEF_MUX_RO(".sele", CLK_SEL_E, SEL_E, sel_e), 146 141 DEF_MUX(".selsdi", CLK_SEL_SDI, SEL_SDI, sel_sdi), 142 + DEF_MUX(".selcsi0", CLK_SEL_CSI0, SEL_CSI0, sel_csi), 143 + DEF_MUX(".selcsi4", CLK_SEL_CSI4, SEL_CSI4, sel_csi), 147 144 DEF_MUX(".selw0", CLK_SEL_W0, SEL_W0, sel_w), 148 145 149 146 DEF_FIXED(".selb_d2", CLK_SEL_B_D2, CLK_SEL_B, 1, 2), ··· 203 196 DEF_MOD("pwm12_clk", R9A09G011_PWM12_CLK, CLK_MAIN, 0x434, 8), 204 197 DEF_MOD("pwm13_clk", R9A09G011_PWM13_CLK, CLK_MAIN, 0x434, 9), 205 198 DEF_MOD("pwm14_clk", R9A09G011_PWM14_CLK, CLK_MAIN, 0x434, 10), 199 + DEF_MOD("cperi_grpg", R9A09G011_CPERI_GRPG_PCLK, CLK_SEL_E, 0x438, 0), 200 + DEF_MOD("cperi_grph", R9A09G011_CPERI_GRPH_PCLK, CLK_SEL_E, 0x438, 1), 206 201 DEF_MOD("urt_pclk", R9A09G011_URT_PCLK, CLK_SEL_E, 0x438, 4), 207 202 DEF_MOD("urt0_clk", R9A09G011_URT0_CLK, CLK_SEL_W0, 0x438, 5), 203 + DEF_MOD("csi0_clk", R9A09G011_CSI0_CLK, CLK_SEL_CSI0, 0x438, 8), 204 + DEF_MOD("csi4_clk", R9A09G011_CSI4_CLK, CLK_SEL_CSI4, 0x438, 12), 208 205 DEF_MOD("ca53", R9A09G011_CA53_CLK, CLK_DIV_A, 0x448, 0), 209 206 }; 210 207 ··· 226 215 DEF_RST(R9A09G011_TIM_GPB_PRESETN, 0x614, 1), 227 216 DEF_RST(R9A09G011_TIM_GPC_PRESETN, 0x614, 2), 228 217 DEF_RST_MON(R9A09G011_PWM_GPF_PRESETN, 0x614, 5, 23), 218 + DEF_RST_MON(R9A09G011_CSI_GPG_PRESETN, 0x614, 6, 22), 219 + DEF_RST_MON(R9A09G011_CSI_GPH_PRESETN, 0x614, 7, 23), 229 220 DEF_RST(R9A09G011_IIC_GPA_PRESETN, 0x614, 8), 230 221 DEF_RST(R9A09G011_IIC_GPB_PRESETN, 0x614, 9), 231 222 DEF_RST_MON(R9A09G011_WDT0_PRESETN, 0x614, 12, 19), ··· 238 225 MOD_CLK_BASE + R9A09G011_CPERI_GRPB_PCLK, 239 226 MOD_CLK_BASE + R9A09G011_CPERI_GRPC_PCLK, 240 227 MOD_CLK_BASE + R9A09G011_CPERI_GRPF_PCLK, 228 + MOD_CLK_BASE + R9A09G011_CPERI_GRPG_PCLK, 229 + MOD_CLK_BASE + R9A09G011_CPERI_GRPH_PCLK, 241 230 MOD_CLK_BASE + R9A09G011_GIC_CLK, 242 231 MOD_CLK_BASE + R9A09G011_SYC_CNT_CLK, 243 232 MOD_CLK_BASE + R9A09G011_URT_PCLK,
+31 -4
drivers/clk/renesas/rcar-gen3-cpg.c
··· 264 264 .set_rate = cpg_z_clk_set_rate, 265 265 }; 266 266 267 - static struct clk * __init cpg_z_clk_register(const char *name, 267 + static struct clk * __init __cpg_z_clk_register(const char *name, 268 268 const char *parent_name, 269 269 void __iomem *reg, 270 270 unsigned int div, 271 - unsigned int offset) 271 + unsigned int offset, 272 + unsigned int fcr, 273 + unsigned int flags) 272 274 { 273 275 struct clk_init_data init = {}; 274 276 struct cpg_z_clk *zclk; ··· 282 280 283 281 init.name = name; 284 282 init.ops = &cpg_z_clk_ops; 285 - init.flags = CLK_SET_RATE_PARENT; 283 + init.flags = flags; 286 284 init.parent_names = &parent_name; 287 285 init.num_parents = 1; 288 286 289 - zclk->reg = reg + CPG_FRQCRC; 287 + zclk->reg = reg + fcr; 290 288 zclk->kick_reg = reg + CPG_FRQCRB; 291 289 zclk->hw.init = &init; 292 290 zclk->mask = GENMASK(offset + 4, offset); ··· 301 299 zclk->max_rate = clk_hw_get_rate(clk_hw_get_parent(&zclk->hw)) / 302 300 zclk->fixed_div; 303 301 return clk; 302 + } 303 + 304 + static struct clk * __init cpg_z_clk_register(const char *name, 305 + const char *parent_name, 306 + void __iomem *reg, 307 + unsigned int div, 308 + unsigned int offset) 309 + { 310 + return __cpg_z_clk_register(name, parent_name, reg, div, offset, 311 + CPG_FRQCRC, CLK_SET_RATE_PARENT); 312 + } 313 + 314 + static struct clk * __init cpg_zg_clk_register(const char *name, 315 + const char *parent_name, 316 + void __iomem *reg, 317 + unsigned int div, 318 + unsigned int offset) 319 + { 320 + return __cpg_z_clk_register(name, parent_name, reg, div, offset, 321 + CPG_FRQCRB, 0); 322 + 304 323 } 305 324 306 325 static const struct clk_div_table cpg_rpcsrc_div_table[] = { ··· 460 437 case CLK_TYPE_GEN3_Z: 461 438 return cpg_z_clk_register(core->name, __clk_get_name(parent), 462 439 base, core->div, core->offset); 440 + 441 + case CLK_TYPE_GEN3_ZG: 442 + return cpg_zg_clk_register(core->name, __clk_get_name(parent), 443 + base, core->div, core->offset); 463 444 464 445 case CLK_TYPE_GEN3_OSC: 465 446 /*
+1
drivers/clk/renesas/rcar-gen3-cpg.h
··· 22 22 CLK_TYPE_GEN3_R, 23 23 CLK_TYPE_GEN3_MDSEL, /* Select parent/divider using mode pin */ 24 24 CLK_TYPE_GEN3_Z, 25 + CLK_TYPE_GEN3_ZG, 25 26 CLK_TYPE_GEN3_OSC, /* OSC EXTAL predivider and fixed divider */ 26 27 CLK_TYPE_GEN3_RCKSEL, /* Select parent/divider using RCKCR.CKSEL */ 27 28 CLK_TYPE_GEN3_RPCSRC,
-1
drivers/clk/renesas/rcar-usb2-clock-sel.c
··· 15 15 #include <linux/init.h> 16 16 #include <linux/io.h> 17 17 #include <linux/module.h> 18 - #include <linux/of_device.h> 19 18 #include <linux/platform_device.h> 20 19 #include <linux/pm.h> 21 20 #include <linux/pm_runtime.h>
-1
drivers/clk/renesas/renesas-cpg-mssr.c
··· 21 21 #include <linux/mod_devicetable.h> 22 22 #include <linux/module.h> 23 23 #include <linux/of_address.h> 24 - #include <linux/of_device.h> 25 24 #include <linux/platform_device.h> 26 25 #include <linux/pm_clock.h> 27 26 #include <linux/pm_domain.h>
+2 -9
drivers/clk/renesas/rzg2l-cpg.c
··· 20 20 #include <linux/iopoll.h> 21 21 #include <linux/mod_devicetable.h> 22 22 #include <linux/module.h> 23 - #include <linux/of_address.h> 24 - #include <linux/of_device.h> 23 + #include <linux/of.h> 25 24 #include <linux/platform_device.h> 26 25 #include <linux/pm_clock.h> 27 26 #include <linux/pm_domain.h> ··· 181 182 return clk_hw->clk; 182 183 } 183 184 184 - static int rzg2l_cpg_sd_clk_mux_determine_rate(struct clk_hw *hw, 185 - struct clk_rate_request *req) 186 - { 187 - return clk_mux_determine_rate_flags(hw, req, CLK_MUX_ROUND_CLOSEST); 188 - } 189 - 190 185 static int rzg2l_cpg_sd_clk_mux_set_parent(struct clk_hw *hw, u8 index) 191 186 { 192 187 struct sd_hw_data *hwdata = to_sd_hw_data(hw); ··· 243 250 } 244 251 245 252 static const struct clk_ops rzg2l_cpg_sd_clk_mux_ops = { 246 - .determine_rate = rzg2l_cpg_sd_clk_mux_determine_rate, 253 + .determine_rate = __clk_mux_determine_rate_closest, 247 254 .set_parent = rzg2l_cpg_sd_clk_mux_set_parent, 248 255 .get_parent = rzg2l_cpg_sd_clk_mux_get_parent, 249 256 };
+3 -2
drivers/clk/rockchip/clk-rk3568.c
··· 7 7 #include <linux/clk-provider.h> 8 8 #include <linux/module.h> 9 9 #include <linux/of.h> 10 - #include <linux/of_device.h> 11 10 #include <linux/of_address.h> 11 + #include <linux/platform_device.h> 12 12 #include <linux/syscore_ops.h> 13 13 #include <dt-bindings/clock/rk3568-cru.h> 14 14 #include "clk.h" ··· 79 79 RK3036_PLL_RATE(135000000, 2, 45, 4, 1, 1, 0), 80 80 RK3036_PLL_RATE(119000000, 3, 119, 4, 2, 1, 0), 81 81 RK3036_PLL_RATE(108000000, 2, 45, 5, 1, 1, 0), 82 + RK3036_PLL_RATE(101000000, 1, 101, 6, 4, 1, 0), 82 83 RK3036_PLL_RATE(100000000, 1, 150, 6, 6, 1, 0), 83 84 RK3036_PLL_RATE(96000000, 1, 96, 6, 4, 1, 0), 84 - RK3036_PLL_RATE(78750000, 1, 96, 6, 4, 1, 0), 85 + RK3036_PLL_RATE(78750000, 4, 315, 6, 4, 1, 0), 85 86 RK3036_PLL_RATE(74250000, 2, 99, 4, 4, 1, 0), 86 87 { /* sentinel */ }, 87 88 };
+60 -1
drivers/clk/rockchip/clk-rv1126.c
··· 8 8 #include <linux/module.h> 9 9 #include <linux/of.h> 10 10 #include <linux/of_address.h> 11 - #include <linux/of_device.h> 11 + #include <linux/platform_device.h> 12 12 #include <linux/syscore_ops.h> 13 13 #include <dt-bindings/clock/rockchip,rv1126-cru.h> 14 14 #include "clk.h" ··· 175 175 PNAME(mux_i2s2_out2io_p) = { "mclk_i2s2", "xin12m" }; 176 176 PNAME(mux_gpll_cpll_xin24m_p) = { "gpll", "cpll", "xin24m" }; 177 177 PNAME(mux_audpwm_p) = { "sclk_audpwm_div", "sclk_audpwm_fracdiv", "xin24m" }; 178 + PNAME(mux_dclk_vop_p) = { "dclk_vop_div", "dclk_vop_fracdiv", "xin24m" }; 178 179 PNAME(mux_usb480m_gpll_p) = { "usb480m", "gpll" }; 179 180 PNAME(clk_gmac_src_m0_p) = { "clk_gmac_div", "clk_gmac_rgmii_m0" }; 180 181 PNAME(clk_gmac_src_m1_p) = { "clk_gmac_div", "clk_gmac_rgmii_m1" }; ··· 259 258 static struct rockchip_clk_branch rv1126_audpwm_fracmux __initdata = 260 259 MUX(SCLK_AUDPWM_MUX, "mclk_audpwm_mux", mux_audpwm_p, CLK_SET_RATE_PARENT, 261 260 RV1126_CLKSEL_CON(36), 8, 2, MFLAGS); 261 + 262 + static struct rockchip_clk_branch rv1126_dclk_vop_fracmux __initdata = 263 + MUX(DCLK_VOP_MUX, "dclk_vop_mux", mux_dclk_vop_p, CLK_SET_RATE_PARENT, 264 + RV1126_CLKSEL_CON(47), 10, 2, MFLAGS); 262 265 263 266 static struct rockchip_clk_branch rv1126_clk_pmu_branches[] __initdata = { 264 267 /* ··· 720 715 RV1126_CLKGATE_CON(11), 1, GFLAGS), 721 716 722 717 /* 718 + * Clock-Architecture Diagram 9 719 + */ 720 + /* PD_VO */ 721 + COMPOSITE(ACLK_PDVO, "aclk_pdvo", mux_gpll_cpll_p, 0, 722 + RV1126_CLKSEL_CON(45), 7, 1, MFLAGS, 0, 5, DFLAGS, 723 + RV1126_CLKGATE_CON(14), 0, GFLAGS), 724 + COMPOSITE_NOMUX(HCLK_PDVO, "hclk_pdvo", "aclk_pdvo", 0, 725 + RV1126_CLKSEL_CON(45), 8, 5, DFLAGS, 726 + RV1126_CLKGATE_CON(14), 1, GFLAGS), 727 + COMPOSITE_NOMUX(PCLK_PDVO, "pclk_pdvo", "aclk_pdvo", 0, 728 + RV1126_CLKSEL_CON(46), 8, 5, DFLAGS, 729 + RV1126_CLKGATE_CON(14), 2, GFLAGS), 730 + GATE(ACLK_RGA, "aclk_rga", "aclk_pdvo", 0, 731 + RV1126_CLKGATE_CON(14), 6, GFLAGS), 732 + GATE(HCLK_RGA, "hclk_rga", "hclk_pdvo", 0, 733 + RV1126_CLKGATE_CON(14), 7, GFLAGS), 734 + COMPOSITE(CLK_RGA_CORE, "clk_rga_core", mux_gpll_cpll_p, 0, 735 + RV1126_CLKSEL_CON(46), 7, 1, MFLAGS, 0, 5, DFLAGS, 736 + RV1126_CLKGATE_CON(14), 8, GFLAGS), 737 + GATE(ACLK_VOP, "aclk_vop", "aclk_pdvo", 0, 738 + RV1126_CLKGATE_CON(14), 9, GFLAGS), 739 + GATE(HCLK_VOP, "hclk_vop", "hclk_pdvo", 0, 740 + RV1126_CLKGATE_CON(14), 10, GFLAGS), 741 + COMPOSITE(DCLK_VOP_DIV, "dclk_vop_div", mux_gpll_cpll_p, 0, 742 + RV1126_CLKSEL_CON(47), 8, 1, MFLAGS, 0, 8, DFLAGS, 743 + RV1126_CLKGATE_CON(14), 11, GFLAGS), 744 + COMPOSITE_FRACMUX(DCLK_VOP_FRACDIV, "dclk_vop_fracdiv", "dclk_vop_div", 745 + CLK_SET_RATE_PARENT, RV1126_CLKSEL_CON(48), 0, 746 + RV1126_CLKGATE_CON(14), 12, GFLAGS, 747 + &rv1126_dclk_vop_fracmux), 748 + GATE(DCLK_VOP, "dclk_vop", "dclk_vop_mux", 0, 749 + RV1126_CLKGATE_CON(14), 13, GFLAGS), 750 + GATE(PCLK_DSIHOST, "pclk_dsihost", "pclk_pdvo", 0, 751 + RV1126_CLKGATE_CON(14), 14, GFLAGS), 752 + GATE(ACLK_IEP, "aclk_iep", "aclk_pdvo", 0, 753 + RV1126_CLKGATE_CON(12), 7, GFLAGS), 754 + GATE(HCLK_IEP, "hclk_iep", "hclk_pdvo", 0, 755 + RV1126_CLKGATE_CON(12), 8, GFLAGS), 756 + COMPOSITE(CLK_IEP_CORE, "clk_iep_core", mux_gpll_cpll_p, 0, 757 + RV1126_CLKSEL_CON(54), 7, 1, MFLAGS, 0, 5, DFLAGS, 758 + RV1126_CLKGATE_CON(12), 9, GFLAGS), 759 + 760 + /* 723 761 * Clock-Architecture Diagram 12 724 762 */ 725 763 /* PD_PHP */ ··· 952 904 RV1126_CLKGATE_CON(9), 2, GFLAGS), 953 905 GATE(0, "pclk_pdaudio_niu", "hclk_pdaudio", CLK_IGNORE_UNUSED, 954 906 RV1126_CLKGATE_CON(9), 3, GFLAGS), 907 + 908 + /* 909 + * Clock-Architecture Diagram 9 910 + */ 911 + /* PD_VO */ 912 + GATE(0, "aclk_pdvo_niu", "aclk_pdvo", CLK_IGNORE_UNUSED, 913 + RV1126_CLKGATE_CON(14), 3, GFLAGS), 914 + GATE(0, "hclk_pdvo_niu", "hclk_pdvo", CLK_IGNORE_UNUSED, 915 + RV1126_CLKGATE_CON(14), 4, GFLAGS), 916 + GATE(0, "pclk_pdvo_niu", "pclk_pdvo", CLK_IGNORE_UNUSED, 917 + RV1126_CLKGATE_CON(14), 5, GFLAGS), 955 918 956 919 /* 957 920 * Clock-Architecture Diagram 12
+2 -1
drivers/clk/samsung/clk-exynos-arm64.c
··· 10 10 */ 11 11 #include <linux/clk.h> 12 12 #include <linux/of_address.h> 13 - #include <linux/of_device.h> 13 + #include <linux/of.h> 14 + #include <linux/platform_device.h> 14 15 #include <linux/pm_runtime.h> 15 16 #include <linux/slab.h> 16 17
+1 -2
drivers/clk/samsung/clk-exynos-audss.c
··· 10 10 #include <linux/io.h> 11 11 #include <linux/clk.h> 12 12 #include <linux/clk-provider.h> 13 - #include <linux/of_address.h> 14 - #include <linux/of_device.h> 13 + #include <linux/of.h> 15 14 #include <linux/module.h> 16 15 #include <linux/platform_device.h> 17 16 #include <linux/pm_runtime.h>
+8 -3
drivers/clk/samsung/clk-exynos3250.c
··· 100 100 #define PWR_CTRL1_USE_CORE1_WFI (1 << 1) 101 101 #define PWR_CTRL1_USE_CORE0_WFI (1 << 0) 102 102 103 + /* NOTE: Must be equal to the last clock ID increased by one */ 104 + #define CLKS_NR_MAIN (CLK_SCLK_MMC2 + 1) 105 + #define CLKS_NR_DMC (CLK_DIV_DMCD + 1) 106 + #define CLKS_NR_ISP (CLK_SCLK_MPWM_ISP + 1) 107 + 103 108 static const unsigned long exynos3250_cmu_clk_regs[] __initconst = { 104 109 SRC_LEFTBUS, 105 110 DIV_LEFTBUS, ··· 812 807 .nr_fixed_factor_clks = ARRAY_SIZE(fixed_factor_clks), 813 808 .cpu_clks = exynos3250_cpu_clks, 814 809 .nr_cpu_clks = ARRAY_SIZE(exynos3250_cpu_clks), 815 - .nr_clk_ids = CLK_NR_CLKS, 810 + .nr_clk_ids = CLKS_NR_MAIN, 816 811 .clk_regs = exynos3250_cmu_clk_regs, 817 812 .nr_clk_regs = ARRAY_SIZE(exynos3250_cmu_clk_regs), 818 813 }; ··· 928 923 .nr_mux_clks = ARRAY_SIZE(dmc_mux_clks), 929 924 .div_clks = dmc_div_clks, 930 925 .nr_div_clks = ARRAY_SIZE(dmc_div_clks), 931 - .nr_clk_ids = NR_CLKS_DMC, 926 + .nr_clk_ids = CLKS_NR_DMC, 932 927 .clk_regs = exynos3250_cmu_dmc_clk_regs, 933 928 .nr_clk_regs = ARRAY_SIZE(exynos3250_cmu_dmc_clk_regs), 934 929 }; ··· 1072 1067 .nr_div_clks = ARRAY_SIZE(isp_div_clks), 1073 1068 .gate_clks = isp_gate_clks, 1074 1069 .nr_gate_clks = ARRAY_SIZE(isp_gate_clks), 1075 - .nr_clk_ids = NR_CLKS_ISP, 1070 + .nr_clk_ids = CLKS_NR_ISP, 1076 1071 }; 1077 1072 1078 1073 static int __init exynos3250_cmu_isp_probe(struct platform_device *pdev)
+4 -1
drivers/clk/samsung/clk-exynos4.c
··· 135 135 #define PWR_CTRL1_USE_CORE1_WFI (1 << 1) 136 136 #define PWR_CTRL1_USE_CORE0_WFI (1 << 0) 137 137 138 + /* NOTE: Must be equal to the last clock ID increased by one */ 139 + #define CLKS_NR (CLK_DIV_CORE2 + 1) 140 + 138 141 /* the exynos4 soc type */ 139 142 enum exynos4_soc { 140 143 EXYNOS4210, ··· 1278 1275 if (!reg_base) 1279 1276 panic("%s: failed to map registers\n", __func__); 1280 1277 1281 - ctx = samsung_clk_init(NULL, reg_base, CLK_NR_CLKS); 1278 + ctx = samsung_clk_init(NULL, reg_base, CLKS_NR); 1282 1279 hws = ctx->clk_data.hws; 1283 1280 1284 1281 samsung_clk_of_register_fixed_ext(ctx, exynos4_fixed_rate_ext_clks,
+4 -1
drivers/clk/samsung/clk-exynos4412-isp.c
··· 22 22 #define E4X12_GATE_ISP0 0x0800 23 23 #define E4X12_GATE_ISP1 0x0804 24 24 25 + /* NOTE: Must be equal to the last clock ID increased by one */ 26 + #define CLKS_NR_ISP (CLK_ISP_DIV_MCUISP1 + 1) 27 + 25 28 /* 26 29 * Support for CMU save/restore across system suspends 27 30 */ ··· 124 121 if (!exynos4x12_save_isp) 125 122 return -ENOMEM; 126 123 127 - ctx = samsung_clk_init(dev, reg_base, CLK_NR_ISP_CLKS); 124 + ctx = samsung_clk_init(dev, reg_base, CLKS_NR_ISP); 128 125 129 126 platform_set_drvdata(pdev, ctx); 130 127
+1 -1
drivers/clk/samsung/clk-exynos5-subcmu.c
··· 5 5 // Common Clock Framework support for Exynos5 power-domain dependent clocks 6 6 7 7 #include <linux/io.h> 8 - #include <linux/of_platform.h> 8 + #include <linux/of.h> 9 9 #include <linux/platform_device.h> 10 10 #include <linux/pm_domain.h> 11 11 #include <linux/pm_runtime.h>
+4 -1
drivers/clk/samsung/clk-exynos5250.c
··· 100 100 #define PWR_CTRL2_CORE2_UP_RATIO (1 << 4) 101 101 #define PWR_CTRL2_CORE1_UP_RATIO (1 << 0) 102 102 103 + /* NOTE: Must be equal to the last clock ID increased by one */ 104 + #define CLKS_NR (CLK_MOUT_VPLLSRC + 1) 105 + 103 106 /* list of PLLs to be registered */ 104 107 enum exynos5250_plls { 105 108 apll, mpll, cpll, epll, vpll, gpll, bpll, ··· 800 797 panic("%s: unable to determine soc\n", __func__); 801 798 } 802 799 803 - ctx = samsung_clk_init(NULL, reg_base, CLK_NR_CLKS); 800 + ctx = samsung_clk_init(NULL, reg_base, CLKS_NR); 804 801 hws = ctx->clk_data.hws; 805 802 806 803 samsung_clk_of_register_fixed_ext(ctx, exynos5250_fixed_rate_ext_clks,
+28 -13
drivers/clk/samsung/clk-exynos5260.c
··· 15 15 16 16 #include <dt-bindings/clock/exynos5260-clk.h> 17 17 18 + /* NOTE: Must be equal to the last clock ID increased by one */ 19 + #define CLKS_NR_TOP (PHYCLK_USBDRD30_UDRD30_PHYCLOCK + 1) 20 + #define CLKS_NR_EGL (EGL_DOUT_EGL1 + 1) 21 + #define CLKS_NR_KFC (KFC_DOUT_KFC1 + 1) 22 + #define CLKS_NR_MIF (MIF_SCLK_LPDDR3PHY_WRAP_U0 + 1) 23 + #define CLKS_NR_G3D (G3D_CLK_G3D + 1) 24 + #define CLKS_NR_AUD (AUD_SCLK_I2S + 1) 25 + #define CLKS_NR_MFC (MFC_CLK_SMMU2_MFCM0 + 1) 26 + #define CLKS_NR_GSCL (GSCL_SCLK_CSIS0_WRAP + 1) 27 + #define CLKS_NR_FSYS (FSYS_PHYCLK_USBHOST20 + 1) 28 + #define CLKS_NR_PERI (PERI_SCLK_PCM1 + 1) 29 + #define CLKS_NR_DISP (DISP_MOUT_HDMI_PHY_PIXEL_USER + 1) 30 + #define CLKS_NR_G2D (G2D_CLK_SMMU3_G2D + 1) 31 + #define CLKS_NR_ISP (ISP_SCLK_UART_EXT + 1) 32 + 18 33 /* 19 34 * Applicable for all 2550 Type PLLS for Exynos5260, listed below 20 35 * DISP_PLL, EGL_PLL, KFC_PLL, MEM_PLL, BUS_PLL, MEDIA_PLL, G3D_PLL. ··· 150 135 .nr_div_clks = ARRAY_SIZE(aud_div_clks), 151 136 .gate_clks = aud_gate_clks, 152 137 .nr_gate_clks = ARRAY_SIZE(aud_gate_clks), 153 - .nr_clk_ids = AUD_NR_CLK, 138 + .nr_clk_ids = CLKS_NR_AUD, 154 139 .clk_regs = aud_clk_regs, 155 140 .nr_clk_regs = ARRAY_SIZE(aud_clk_regs), 156 141 }; ··· 340 325 .nr_div_clks = ARRAY_SIZE(disp_div_clks), 341 326 .gate_clks = disp_gate_clks, 342 327 .nr_gate_clks = ARRAY_SIZE(disp_gate_clks), 343 - .nr_clk_ids = DISP_NR_CLK, 328 + .nr_clk_ids = CLKS_NR_DISP, 344 329 .clk_regs = disp_clk_regs, 345 330 .nr_clk_regs = ARRAY_SIZE(disp_clk_regs), 346 331 }; ··· 404 389 .nr_mux_clks = ARRAY_SIZE(egl_mux_clks), 405 390 .div_clks = egl_div_clks, 406 391 .nr_div_clks = ARRAY_SIZE(egl_div_clks), 407 - .nr_clk_ids = EGL_NR_CLK, 392 + .nr_clk_ids = CLKS_NR_EGL, 408 393 .clk_regs = egl_clk_regs, 409 394 .nr_clk_regs = ARRAY_SIZE(egl_clk_regs), 410 395 }; ··· 504 489 .nr_mux_clks = ARRAY_SIZE(fsys_mux_clks), 505 490 .gate_clks = fsys_gate_clks, 506 491 .nr_gate_clks = ARRAY_SIZE(fsys_gate_clks), 507 - .nr_clk_ids = FSYS_NR_CLK, 492 + .nr_clk_ids = CLKS_NR_FSYS, 508 493 .clk_regs = fsys_clk_regs, 509 494 .nr_clk_regs = ARRAY_SIZE(fsys_clk_regs), 510 495 }; ··· 595 580 .nr_div_clks = ARRAY_SIZE(g2d_div_clks), 596 581 .gate_clks = g2d_gate_clks, 597 582 .nr_gate_clks = ARRAY_SIZE(g2d_gate_clks), 598 - .nr_clk_ids = G2D_NR_CLK, 583 + .nr_clk_ids = CLKS_NR_G2D, 599 584 .clk_regs = g2d_clk_regs, 600 585 .nr_clk_regs = ARRAY_SIZE(g2d_clk_regs), 601 586 }; ··· 658 643 .nr_div_clks = ARRAY_SIZE(g3d_div_clks), 659 644 .gate_clks = g3d_gate_clks, 660 645 .nr_gate_clks = ARRAY_SIZE(g3d_gate_clks), 661 - .nr_clk_ids = G3D_NR_CLK, 646 + .nr_clk_ids = CLKS_NR_G3D, 662 647 .clk_regs = g3d_clk_regs, 663 648 .nr_clk_regs = ARRAY_SIZE(g3d_clk_regs), 664 649 }; ··· 791 776 .nr_div_clks = ARRAY_SIZE(gscl_div_clks), 792 777 .gate_clks = gscl_gate_clks, 793 778 .nr_gate_clks = ARRAY_SIZE(gscl_gate_clks), 794 - .nr_clk_ids = GSCL_NR_CLK, 779 + .nr_clk_ids = CLKS_NR_GSCL, 795 780 .clk_regs = gscl_clk_regs, 796 781 .nr_clk_regs = ARRAY_SIZE(gscl_clk_regs), 797 782 }; ··· 910 895 .nr_div_clks = ARRAY_SIZE(isp_div_clks), 911 896 .gate_clks = isp_gate_clks, 912 897 .nr_gate_clks = ARRAY_SIZE(isp_gate_clks), 913 - .nr_clk_ids = ISP_NR_CLK, 898 + .nr_clk_ids = CLKS_NR_ISP, 914 899 .clk_regs = isp_clk_regs, 915 900 .nr_clk_regs = ARRAY_SIZE(isp_clk_regs), 916 901 }; ··· 974 959 .nr_mux_clks = ARRAY_SIZE(kfc_mux_clks), 975 960 .div_clks = kfc_div_clks, 976 961 .nr_div_clks = ARRAY_SIZE(kfc_div_clks), 977 - .nr_clk_ids = KFC_NR_CLK, 962 + .nr_clk_ids = CLKS_NR_KFC, 978 963 .clk_regs = kfc_clk_regs, 979 964 .nr_clk_regs = ARRAY_SIZE(kfc_clk_regs), 980 965 }; ··· 1030 1015 .nr_div_clks = ARRAY_SIZE(mfc_div_clks), 1031 1016 .gate_clks = mfc_gate_clks, 1032 1017 .nr_gate_clks = ARRAY_SIZE(mfc_gate_clks), 1033 - .nr_clk_ids = MFC_NR_CLK, 1018 + .nr_clk_ids = CLKS_NR_MFC, 1034 1019 .clk_regs = mfc_clk_regs, 1035 1020 .nr_clk_regs = ARRAY_SIZE(mfc_clk_regs), 1036 1021 }; ··· 1179 1164 .nr_div_clks = ARRAY_SIZE(mif_div_clks), 1180 1165 .gate_clks = mif_gate_clks, 1181 1166 .nr_gate_clks = ARRAY_SIZE(mif_gate_clks), 1182 - .nr_clk_ids = MIF_NR_CLK, 1167 + .nr_clk_ids = CLKS_NR_MIF, 1183 1168 .clk_regs = mif_clk_regs, 1184 1169 .nr_clk_regs = ARRAY_SIZE(mif_clk_regs), 1185 1170 }; ··· 1385 1370 .nr_div_clks = ARRAY_SIZE(peri_div_clks), 1386 1371 .gate_clks = peri_gate_clks, 1387 1372 .nr_gate_clks = ARRAY_SIZE(peri_gate_clks), 1388 - .nr_clk_ids = PERI_NR_CLK, 1373 + .nr_clk_ids = CLKS_NR_PERI, 1389 1374 .clk_regs = peri_clk_regs, 1390 1375 .nr_clk_regs = ARRAY_SIZE(peri_clk_regs), 1391 1376 }; ··· 1841 1826 .nr_gate_clks = ARRAY_SIZE(top_gate_clks), 1842 1827 .fixed_clks = fixed_rate_clks, 1843 1828 .nr_fixed_clks = ARRAY_SIZE(fixed_rate_clks), 1844 - .nr_clk_ids = TOP_NR_CLK, 1829 + .nr_clk_ids = CLKS_NR_TOP, 1845 1830 .clk_regs = top_clk_regs, 1846 1831 .nr_clk_regs = ARRAY_SIZE(top_clk_regs), 1847 1832 };
+4 -1
drivers/clk/samsung/clk-exynos5410.c
··· 56 56 #define SRC_KFC 0x28200 57 57 #define DIV_KFC0 0x28500 58 58 59 + /* NOTE: Must be equal to the last clock ID increased by one */ 60 + #define CLKS_NR 512 61 + 59 62 /* list of PLLs */ 60 63 enum exynos5410_plls { 61 64 apll, cpll, epll, mpll, ··· 263 260 .nr_div_clks = ARRAY_SIZE(exynos5410_div_clks), 264 261 .gate_clks = exynos5410_gate_clks, 265 262 .nr_gate_clks = ARRAY_SIZE(exynos5410_gate_clks), 266 - .nr_clk_ids = CLK_NR_CLKS, 263 + .nr_clk_ids = CLKS_NR, 267 264 }; 268 265 269 266 /* register exynos5410 clocks */
+4 -1
drivers/clk/samsung/clk-exynos5420.c
··· 139 139 #define SRC_KFC 0x28200 140 140 #define DIV_KFC0 0x28500 141 141 142 + /* NOTE: Must be equal to the last clock ID increased by one */ 143 + #define CLKS_NR (CLK_DOUT_PCLK_DREX1 + 1) 144 + 142 145 /* Exynos5x SoC type */ 143 146 enum exynos5x_soc { 144 147 EXYNOS5420, ··· 1590 1587 1591 1588 exynos5x_soc = soc; 1592 1589 1593 - ctx = samsung_clk_init(NULL, reg_base, CLK_NR_CLKS); 1590 + ctx = samsung_clk_init(NULL, reg_base, CLKS_NR); 1594 1591 hws = ctx->clk_data.hws; 1595 1592 1596 1593 samsung_clk_of_register_fixed_ext(ctx, exynos5x_fixed_rate_ext_clks,
+44 -21
drivers/clk/samsung/clk-exynos5433.c
··· 21 21 #include "clk-exynos-arm64.h" 22 22 #include "clk-pll.h" 23 23 24 + /* NOTE: Must be equal to the last clock ID increased by one */ 25 + #define CLKS_NR_TOP (CLK_SCLK_HDMI_SPDIF_DISP + 1) 26 + #define CLKS_NR_CPIF (CLK_SCLK_UFS_MPHY + 1) 27 + #define CLKS_NR_MIF (CLK_SCLK_BUS_PLL_ATLAS + 1) 28 + #define CLKS_NR_PERIC (CLK_DIV_SCLK_SC_IN + 1) 29 + #define CLKS_NR_PERIS (CLK_SCLK_OTP_CON + 1) 30 + #define CLKS_NR_FSYS (CLK_PCIE + 1) 31 + #define CLKS_NR_G2D (CLK_PCLK_SMMU_G2D + 1) 32 + #define CLKS_NR_DISP (CLK_PHYCLK_MIPIDPHY0_RXCLKESC0_PHY + 1) 33 + #define CLKS_NR_AUD (CLK_SCLK_AUD_I2S + 1) 34 + #define CLKS_NR_BUSX (CLK_ACLK_BUS2RTND_400 + 1) 35 + #define CLKS_NR_G3D (CLK_SCLK_HPM_G3D + 1) 36 + #define CLKS_NR_GSCL (CLK_PCLK_SMMU_GSCL2 + 1) 37 + #define CLKS_NR_APOLLO (CLK_SCLK_APOLLO + 1) 38 + #define CLKS_NR_ATLAS (CLK_SCLK_ATLAS + 1) 39 + #define CLKS_NR_MSCL (CLK_SCLK_JPEG + 1) 40 + #define CLKS_NR_MFC (CLK_PCLK_SMMU_MFC_0 + 1) 41 + #define CLKS_NR_HEVC (CLK_PCLK_SMMU_HEVC_0 + 1) 42 + #define CLKS_NR_ISP (CLK_SCLK_PIXELASYNCM_ISPC + 1) 43 + #define CLKS_NR_CAM0 (CLK_SCLK_PIXELASYNCS_LITE_C_INIT + 1) 44 + #define CLKS_NR_CAM1 (CLK_SCLK_ISP_CA5 + 1) 45 + #define CLKS_NR_IMEM (CLK_PCLK_SLIMSSS + 1) 46 + 24 47 /* 25 48 * Register offset definitions for CMU_TOP 26 49 */ ··· 821 798 .nr_fixed_clks = ARRAY_SIZE(top_fixed_clks), 822 799 .fixed_factor_clks = top_fixed_factor_clks, 823 800 .nr_fixed_factor_clks = ARRAY_SIZE(top_fixed_factor_clks), 824 - .nr_clk_ids = TOP_NR_CLK, 801 + .nr_clk_ids = CLKS_NR_TOP, 825 802 .clk_regs = top_clk_regs, 826 803 .nr_clk_regs = ARRAY_SIZE(top_clk_regs), 827 804 .suspend_regs = top_suspend_regs, ··· 900 877 .nr_div_clks = ARRAY_SIZE(cpif_div_clks), 901 878 .gate_clks = cpif_gate_clks, 902 879 .nr_gate_clks = ARRAY_SIZE(cpif_gate_clks), 903 - .nr_clk_ids = CPIF_NR_CLK, 880 + .nr_clk_ids = CLKS_NR_CPIF, 904 881 .clk_regs = cpif_clk_regs, 905 882 .nr_clk_regs = ARRAY_SIZE(cpif_clk_regs), 906 883 .suspend_regs = cpif_suspend_regs, ··· 1554 1531 .nr_gate_clks = ARRAY_SIZE(mif_gate_clks), 1555 1532 .fixed_factor_clks = mif_fixed_factor_clks, 1556 1533 .nr_fixed_factor_clks = ARRAY_SIZE(mif_fixed_factor_clks), 1557 - .nr_clk_ids = MIF_NR_CLK, 1534 + .nr_clk_ids = CLKS_NR_MIF, 1558 1535 .clk_regs = mif_clk_regs, 1559 1536 .nr_clk_regs = ARRAY_SIZE(mif_clk_regs), 1560 1537 }; ··· 1753 1730 .nr_div_clks = ARRAY_SIZE(peric_div_clks), 1754 1731 .gate_clks = peric_gate_clks, 1755 1732 .nr_gate_clks = ARRAY_SIZE(peric_gate_clks), 1756 - .nr_clk_ids = PERIC_NR_CLK, 1733 + .nr_clk_ids = CLKS_NR_PERIC, 1757 1734 .clk_regs = peric_clk_regs, 1758 1735 .nr_clk_regs = ARRAY_SIZE(peric_clk_regs), 1759 1736 .suspend_regs = peric_suspend_regs, ··· 1947 1924 static const struct samsung_cmu_info peris_cmu_info __initconst = { 1948 1925 .gate_clks = peris_gate_clks, 1949 1926 .nr_gate_clks = ARRAY_SIZE(peris_gate_clks), 1950 - .nr_clk_ids = PERIS_NR_CLK, 1927 + .nr_clk_ids = CLKS_NR_PERIS, 1951 1928 .clk_regs = peris_clk_regs, 1952 1929 .nr_clk_regs = ARRAY_SIZE(peris_clk_regs), 1953 1930 }; ··· 2359 2336 .nr_gate_clks = ARRAY_SIZE(fsys_gate_clks), 2360 2337 .fixed_clks = fsys_fixed_clks, 2361 2338 .nr_fixed_clks = ARRAY_SIZE(fsys_fixed_clks), 2362 - .nr_clk_ids = FSYS_NR_CLK, 2339 + .nr_clk_ids = CLKS_NR_FSYS, 2363 2340 .clk_regs = fsys_clk_regs, 2364 2341 .nr_clk_regs = ARRAY_SIZE(fsys_clk_regs), 2365 2342 .suspend_regs = fsys_suspend_regs, ··· 2482 2459 .nr_div_clks = ARRAY_SIZE(g2d_div_clks), 2483 2460 .gate_clks = g2d_gate_clks, 2484 2461 .nr_gate_clks = ARRAY_SIZE(g2d_gate_clks), 2485 - .nr_clk_ids = G2D_NR_CLK, 2462 + .nr_clk_ids = CLKS_NR_G2D, 2486 2463 .clk_regs = g2d_clk_regs, 2487 2464 .nr_clk_regs = ARRAY_SIZE(g2d_clk_regs), 2488 2465 .suspend_regs = g2d_suspend_regs, ··· 2910 2887 .nr_fixed_clks = ARRAY_SIZE(disp_fixed_clks), 2911 2888 .fixed_factor_clks = disp_fixed_factor_clks, 2912 2889 .nr_fixed_factor_clks = ARRAY_SIZE(disp_fixed_factor_clks), 2913 - .nr_clk_ids = DISP_NR_CLK, 2890 + .nr_clk_ids = CLKS_NR_DISP, 2914 2891 .clk_regs = disp_clk_regs, 2915 2892 .nr_clk_regs = ARRAY_SIZE(disp_clk_regs), 2916 2893 .suspend_regs = disp_suspend_regs, ··· 3080 3057 .nr_gate_clks = ARRAY_SIZE(aud_gate_clks), 3081 3058 .fixed_clks = aud_fixed_clks, 3082 3059 .nr_fixed_clks = ARRAY_SIZE(aud_fixed_clks), 3083 - .nr_clk_ids = AUD_NR_CLK, 3060 + .nr_clk_ids = CLKS_NR_AUD, 3084 3061 .clk_regs = aud_clk_regs, 3085 3062 .nr_clk_regs = ARRAY_SIZE(aud_clk_regs), 3086 3063 .suspend_regs = aud_suspend_regs, ··· 3212 3189 .nr_div_clks = ARRAY_SIZE(bus##id##_div_clks), \ 3213 3190 .gate_clks = bus##id##_gate_clks, \ 3214 3191 .nr_gate_clks = ARRAY_SIZE(bus##id##_gate_clks), \ 3215 - .nr_clk_ids = BUSx_NR_CLK 3192 + .nr_clk_ids = CLKS_NR_BUSX 3216 3193 3217 3194 static const struct samsung_cmu_info bus0_cmu_info __initconst = { 3218 3195 CMU_BUS_INFO_CLKS(0), ··· 3363 3340 .nr_div_clks = ARRAY_SIZE(g3d_div_clks), 3364 3341 .gate_clks = g3d_gate_clks, 3365 3342 .nr_gate_clks = ARRAY_SIZE(g3d_gate_clks), 3366 - .nr_clk_ids = G3D_NR_CLK, 3343 + .nr_clk_ids = CLKS_NR_G3D, 3367 3344 .clk_regs = g3d_clk_regs, 3368 3345 .nr_clk_regs = ARRAY_SIZE(g3d_clk_regs), 3369 3346 .suspend_regs = g3d_suspend_regs, ··· 3506 3483 .nr_mux_clks = ARRAY_SIZE(gscl_mux_clks), 3507 3484 .gate_clks = gscl_gate_clks, 3508 3485 .nr_gate_clks = ARRAY_SIZE(gscl_gate_clks), 3509 - .nr_clk_ids = GSCL_NR_CLK, 3486 + .nr_clk_ids = CLKS_NR_GSCL, 3510 3487 .clk_regs = gscl_clk_regs, 3511 3488 .nr_clk_regs = ARRAY_SIZE(gscl_clk_regs), 3512 3489 .suspend_regs = gscl_suspend_regs, ··· 3716 3693 .nr_gate_clks = ARRAY_SIZE(apollo_gate_clks), 3717 3694 .cpu_clks = apollo_cpu_clks, 3718 3695 .nr_cpu_clks = ARRAY_SIZE(apollo_cpu_clks), 3719 - .nr_clk_ids = APOLLO_NR_CLK, 3696 + .nr_clk_ids = CLKS_NR_APOLLO, 3720 3697 .clk_regs = apollo_clk_regs, 3721 3698 .nr_clk_regs = ARRAY_SIZE(apollo_clk_regs), 3722 3699 }; ··· 3961 3938 .nr_gate_clks = ARRAY_SIZE(atlas_gate_clks), 3962 3939 .cpu_clks = atlas_cpu_clks, 3963 3940 .nr_cpu_clks = ARRAY_SIZE(atlas_cpu_clks), 3964 - .nr_clk_ids = ATLAS_NR_CLK, 3941 + .nr_clk_ids = CLKS_NR_ATLAS, 3965 3942 .clk_regs = atlas_clk_regs, 3966 3943 .nr_clk_regs = ARRAY_SIZE(atlas_clk_regs), 3967 3944 }; ··· 4135 4112 .nr_div_clks = ARRAY_SIZE(mscl_div_clks), 4136 4113 .gate_clks = mscl_gate_clks, 4137 4114 .nr_gate_clks = ARRAY_SIZE(mscl_gate_clks), 4138 - .nr_clk_ids = MSCL_NR_CLK, 4115 + .nr_clk_ids = CLKS_NR_MSCL, 4139 4116 .clk_regs = mscl_clk_regs, 4140 4117 .nr_clk_regs = ARRAY_SIZE(mscl_clk_regs), 4141 4118 .suspend_regs = mscl_suspend_regs, ··· 4243 4220 .nr_div_clks = ARRAY_SIZE(mfc_div_clks), 4244 4221 .gate_clks = mfc_gate_clks, 4245 4222 .nr_gate_clks = ARRAY_SIZE(mfc_gate_clks), 4246 - .nr_clk_ids = MFC_NR_CLK, 4223 + .nr_clk_ids = CLKS_NR_MFC, 4247 4224 .clk_regs = mfc_clk_regs, 4248 4225 .nr_clk_regs = ARRAY_SIZE(mfc_clk_regs), 4249 4226 .suspend_regs = mfc_suspend_regs, ··· 4353 4330 .nr_div_clks = ARRAY_SIZE(hevc_div_clks), 4354 4331 .gate_clks = hevc_gate_clks, 4355 4332 .nr_gate_clks = ARRAY_SIZE(hevc_gate_clks), 4356 - .nr_clk_ids = HEVC_NR_CLK, 4333 + .nr_clk_ids = CLKS_NR_HEVC, 4357 4334 .clk_regs = hevc_clk_regs, 4358 4335 .nr_clk_regs = ARRAY_SIZE(hevc_clk_regs), 4359 4336 .suspend_regs = hevc_suspend_regs, ··· 4606 4583 .nr_div_clks = ARRAY_SIZE(isp_div_clks), 4607 4584 .gate_clks = isp_gate_clks, 4608 4585 .nr_gate_clks = ARRAY_SIZE(isp_gate_clks), 4609 - .nr_clk_ids = ISP_NR_CLK, 4586 + .nr_clk_ids = CLKS_NR_ISP, 4610 4587 .clk_regs = isp_clk_regs, 4611 4588 .nr_clk_regs = ARRAY_SIZE(isp_clk_regs), 4612 4589 .suspend_regs = isp_suspend_regs, ··· 5088 5065 .nr_gate_clks = ARRAY_SIZE(cam0_gate_clks), 5089 5066 .fixed_clks = cam0_fixed_clks, 5090 5067 .nr_fixed_clks = ARRAY_SIZE(cam0_fixed_clks), 5091 - .nr_clk_ids = CAM0_NR_CLK, 5068 + .nr_clk_ids = CLKS_NR_CAM0, 5092 5069 .clk_regs = cam0_clk_regs, 5093 5070 .nr_clk_regs = ARRAY_SIZE(cam0_clk_regs), 5094 5071 .suspend_regs = cam0_suspend_regs, ··· 5463 5440 .nr_gate_clks = ARRAY_SIZE(cam1_gate_clks), 5464 5441 .fixed_clks = cam1_fixed_clks, 5465 5442 .nr_fixed_clks = ARRAY_SIZE(cam1_fixed_clks), 5466 - .nr_clk_ids = CAM1_NR_CLK, 5443 + .nr_clk_ids = CLKS_NR_CAM1, 5467 5444 .clk_regs = cam1_clk_regs, 5468 5445 .nr_clk_regs = ARRAY_SIZE(cam1_clk_regs), 5469 5446 .suspend_regs = cam1_suspend_regs, ··· 5495 5472 static const struct samsung_cmu_info imem_cmu_info __initconst = { 5496 5473 .gate_clks = imem_gate_clks, 5497 5474 .nr_gate_clks = ARRAY_SIZE(imem_gate_clks), 5498 - .nr_clk_ids = IMEM_NR_CLK, 5475 + .nr_clk_ids = CLKS_NR_IMEM, 5499 5476 .clk_regs = imem_clk_regs, 5500 5477 .nr_clk_regs = ARRAY_SIZE(imem_clk_regs), 5501 5478 .clk_name = "aclk_imem_200",
+10 -5
drivers/clk/samsung/clk-exynos7885.c
··· 9 9 #include <linux/clk.h> 10 10 #include <linux/clk-provider.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/platform_device.h> 14 13 15 14 #include <dt-bindings/clock/exynos7885.h> 16 15 17 16 #include "clk.h" 18 17 #include "clk-exynos-arm64.h" 18 + 19 + /* NOTE: Must be equal to the last clock ID increased by one */ 20 + #define CLKS_NR_TOP (CLK_GOUT_FSYS_USB30DRD + 1) 21 + #define CLKS_NR_CORE (CLK_GOUT_TREX_P_CORE_PCLK_P_CORE + 1) 22 + #define CLKS_NR_PERI (CLK_GOUT_WDT1_PCLK + 1) 23 + #define CLKS_NR_FSYS (CLK_GOUT_MMC_SDIO_SDCLKIN + 1) 19 24 20 25 /* ---- CMU_TOP ------------------------------------------------------------- */ 21 26 ··· 339 334 .nr_div_clks = ARRAY_SIZE(top_div_clks), 340 335 .gate_clks = top_gate_clks, 341 336 .nr_gate_clks = ARRAY_SIZE(top_gate_clks), 342 - .nr_clk_ids = TOP_NR_CLK, 337 + .nr_clk_ids = CLKS_NR_TOP, 343 338 .clk_regs = top_clk_regs, 344 339 .nr_clk_regs = ARRAY_SIZE(top_clk_regs), 345 340 }; ··· 558 553 .nr_mux_clks = ARRAY_SIZE(peri_mux_clks), 559 554 .gate_clks = peri_gate_clks, 560 555 .nr_gate_clks = ARRAY_SIZE(peri_gate_clks), 561 - .nr_clk_ids = PERI_NR_CLK, 556 + .nr_clk_ids = CLKS_NR_PERI, 562 557 .clk_regs = peri_clk_regs, 563 558 .nr_clk_regs = ARRAY_SIZE(peri_clk_regs), 564 559 .clk_name = "dout_peri_bus", ··· 667 662 .nr_div_clks = ARRAY_SIZE(core_div_clks), 668 663 .gate_clks = core_gate_clks, 669 664 .nr_gate_clks = ARRAY_SIZE(core_gate_clks), 670 - .nr_clk_ids = CORE_NR_CLK, 665 + .nr_clk_ids = CLKS_NR_CORE, 671 666 .clk_regs = core_clk_regs, 672 667 .nr_clk_regs = ARRAY_SIZE(core_clk_regs), 673 668 .clk_name = "dout_core_bus", ··· 749 744 .nr_mux_clks = ARRAY_SIZE(fsys_mux_clks), 750 745 .gate_clks = fsys_gate_clks, 751 746 .nr_gate_clks = ARRAY_SIZE(fsys_gate_clks), 752 - .nr_clk_ids = FSYS_NR_CLK, 747 + .nr_clk_ids = CLKS_NR_FSYS, 753 748 .clk_regs = fsys_clk_regs, 754 749 .nr_clk_regs = ARRAY_SIZE(fsys_clk_regs), 755 750 .clk_name = "dout_fsys_bus",
+24 -12
drivers/clk/samsung/clk-exynos850.c
··· 9 9 #include <linux/clk.h> 10 10 #include <linux/clk-provider.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/platform_device.h> 14 13 15 14 #include <dt-bindings/clock/exynos850.h> 16 15 17 16 #include "clk.h" 18 17 #include "clk-exynos-arm64.h" 18 + 19 + /* NOTE: Must be equal to the last clock ID increased by one */ 20 + #define CLKS_NR_TOP (CLK_DOUT_G3D_SWITCH + 1) 21 + #define CLKS_NR_APM (CLK_GOUT_SYSREG_APM_PCLK + 1) 22 + #define CLKS_NR_AUD (CLK_GOUT_AUD_CMU_AUD_PCLK + 1) 23 + #define CLKS_NR_CMGP (CLK_GOUT_SYSREG_CMGP_PCLK + 1) 24 + #define CLKS_NR_G3D (CLK_GOUT_G3D_SYSREG_PCLK + 1) 25 + #define CLKS_NR_HSI (CLK_GOUT_HSI_CMU_HSI_PCLK + 1) 26 + #define CLKS_NR_IS (CLK_GOUT_IS_SYSREG_PCLK + 1) 27 + #define CLKS_NR_MFCMSCL (CLK_GOUT_MFCMSCL_SYSREG_PCLK + 1) 28 + #define CLKS_NR_PERI (CLK_GOUT_WDT1_PCLK + 1) 29 + #define CLKS_NR_CORE (CLK_GOUT_SYSREG_CORE_PCLK + 1) 30 + #define CLKS_NR_DPU (CLK_GOUT_DPU_SYSREG_PCLK + 1) 19 31 20 32 /* ---- CMU_TOP ------------------------------------------------------------- */ 21 33 ··· 498 486 .nr_div_clks = ARRAY_SIZE(top_div_clks), 499 487 .gate_clks = top_gate_clks, 500 488 .nr_gate_clks = ARRAY_SIZE(top_gate_clks), 501 - .nr_clk_ids = TOP_NR_CLK, 489 + .nr_clk_ids = CLKS_NR_TOP, 502 490 .clk_regs = top_clk_regs, 503 491 .nr_clk_regs = ARRAY_SIZE(top_clk_regs), 504 492 }; ··· 638 626 .nr_gate_clks = ARRAY_SIZE(apm_gate_clks), 639 627 .fixed_clks = apm_fixed_clks, 640 628 .nr_fixed_clks = ARRAY_SIZE(apm_fixed_clks), 641 - .nr_clk_ids = APM_NR_CLK, 629 + .nr_clk_ids = CLKS_NR_APM, 642 630 .clk_regs = apm_clk_regs, 643 631 .nr_clk_regs = ARRAY_SIZE(apm_clk_regs), 644 632 .clk_name = "dout_clkcmu_apm_bus", ··· 921 909 .nr_gate_clks = ARRAY_SIZE(aud_gate_clks), 922 910 .fixed_clks = aud_fixed_clks, 923 911 .nr_fixed_clks = ARRAY_SIZE(aud_fixed_clks), 924 - .nr_clk_ids = AUD_NR_CLK, 912 + .nr_clk_ids = CLKS_NR_AUD, 925 913 .clk_regs = aud_clk_regs, 926 914 .nr_clk_regs = ARRAY_SIZE(aud_clk_regs), 927 915 .clk_name = "dout_aud", ··· 1024 1012 .nr_gate_clks = ARRAY_SIZE(cmgp_gate_clks), 1025 1013 .fixed_clks = cmgp_fixed_clks, 1026 1014 .nr_fixed_clks = ARRAY_SIZE(cmgp_fixed_clks), 1027 - .nr_clk_ids = CMGP_NR_CLK, 1015 + .nr_clk_ids = CLKS_NR_CMGP, 1028 1016 .clk_regs = cmgp_clk_regs, 1029 1017 .nr_clk_regs = ARRAY_SIZE(cmgp_clk_regs), 1030 1018 .clk_name = "gout_clkcmu_cmgp_bus", ··· 1120 1108 .nr_div_clks = ARRAY_SIZE(g3d_div_clks), 1121 1109 .gate_clks = g3d_gate_clks, 1122 1110 .nr_gate_clks = ARRAY_SIZE(g3d_gate_clks), 1123 - .nr_clk_ids = G3D_NR_CLK, 1111 + .nr_clk_ids = CLKS_NR_G3D, 1124 1112 .clk_regs = g3d_clk_regs, 1125 1113 .nr_clk_regs = ARRAY_SIZE(g3d_clk_regs), 1126 1114 .clk_name = "dout_g3d_switch", ··· 1222 1210 .nr_mux_clks = ARRAY_SIZE(hsi_mux_clks), 1223 1211 .gate_clks = hsi_gate_clks, 1224 1212 .nr_gate_clks = ARRAY_SIZE(hsi_gate_clks), 1225 - .nr_clk_ids = HSI_NR_CLK, 1213 + .nr_clk_ids = CLKS_NR_HSI, 1226 1214 .clk_regs = hsi_clk_regs, 1227 1215 .nr_clk_regs = ARRAY_SIZE(hsi_clk_regs), 1228 1216 .clk_name = "dout_hsi_bus", ··· 1354 1342 .nr_div_clks = ARRAY_SIZE(is_div_clks), 1355 1343 .gate_clks = is_gate_clks, 1356 1344 .nr_gate_clks = ARRAY_SIZE(is_gate_clks), 1357 - .nr_clk_ids = IS_NR_CLK, 1345 + .nr_clk_ids = CLKS_NR_IS, 1358 1346 .clk_regs = is_clk_regs, 1359 1347 .nr_clk_regs = ARRAY_SIZE(is_clk_regs), 1360 1348 .clk_name = "dout_is_bus", ··· 1463 1451 .nr_div_clks = ARRAY_SIZE(mfcmscl_div_clks), 1464 1452 .gate_clks = mfcmscl_gate_clks, 1465 1453 .nr_gate_clks = ARRAY_SIZE(mfcmscl_gate_clks), 1466 - .nr_clk_ids = MFCMSCL_NR_CLK, 1454 + .nr_clk_ids = CLKS_NR_MFCMSCL, 1467 1455 .clk_regs = mfcmscl_clk_regs, 1468 1456 .nr_clk_regs = ARRAY_SIZE(mfcmscl_clk_regs), 1469 1457 .clk_name = "dout_mfcmscl_mfc", ··· 1638 1626 .nr_div_clks = ARRAY_SIZE(peri_div_clks), 1639 1627 .gate_clks = peri_gate_clks, 1640 1628 .nr_gate_clks = ARRAY_SIZE(peri_gate_clks), 1641 - .nr_clk_ids = PERI_NR_CLK, 1629 + .nr_clk_ids = CLKS_NR_PERI, 1642 1630 .clk_regs = peri_clk_regs, 1643 1631 .nr_clk_regs = ARRAY_SIZE(peri_clk_regs), 1644 1632 .clk_name = "dout_peri_bus", ··· 1745 1733 .nr_div_clks = ARRAY_SIZE(core_div_clks), 1746 1734 .gate_clks = core_gate_clks, 1747 1735 .nr_gate_clks = ARRAY_SIZE(core_gate_clks), 1748 - .nr_clk_ids = CORE_NR_CLK, 1736 + .nr_clk_ids = CLKS_NR_CORE, 1749 1737 .clk_regs = core_clk_regs, 1750 1738 .nr_clk_regs = ARRAY_SIZE(core_clk_regs), 1751 1739 .clk_name = "dout_core_bus", ··· 1819 1807 .nr_div_clks = ARRAY_SIZE(dpu_div_clks), 1820 1808 .gate_clks = dpu_gate_clks, 1821 1809 .nr_gate_clks = ARRAY_SIZE(dpu_gate_clks), 1822 - .nr_clk_ids = DPU_NR_CLK, 1810 + .nr_clk_ids = CLKS_NR_DPU, 1823 1811 .clk_regs = dpu_clk_regs, 1824 1812 .nr_clk_regs = ARRAY_SIZE(dpu_clk_regs), 1825 1813 .clk_name = "dout_dpu",
+20 -11
drivers/clk/samsung/clk-exynosautov9.c
··· 9 9 #include <linux/clk.h> 10 10 #include <linux/clk-provider.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_address.h> 13 - #include <linux/of_device.h> 14 12 #include <linux/platform_device.h> 15 13 16 14 #include <dt-bindings/clock/samsung,exynosautov9.h> 17 15 18 16 #include "clk.h" 19 17 #include "clk-exynos-arm64.h" 18 + 19 + /* NOTE: Must be equal to the last clock ID increased by one */ 20 + #define CLKS_NR_TOP (GOUT_CLKCMU_PERIS_BUS + 1) 21 + #define CLKS_NR_BUSMC (CLK_GOUT_BUSMC_SPDMA_PCLK + 1) 22 + #define CLKS_NR_CORE (CLK_GOUT_CORE_CMU_CORE_PCLK + 1) 23 + #define CLKS_NR_FSYS0 (CLK_GOUT_FSYS0_PCIE_GEN3B_4L_CLK + 1) 24 + #define CLKS_NR_FSYS1 (CLK_GOUT_FSYS1_USB30_1_ACLK + 1) 25 + #define CLKS_NR_FSYS2 (CLK_GOUT_FSYS2_UFS_EMBD1_UNIPRO + 1) 26 + #define CLKS_NR_PERIC0 (CLK_GOUT_PERIC0_PCLK_11 + 1) 27 + #define CLKS_NR_PERIC1 (CLK_GOUT_PERIC1_PCLK_11 + 1) 28 + #define CLKS_NR_PERIS (CLK_GOUT_WDT_CLUSTER1 + 1) 20 29 21 30 /* ---- CMU_TOP ------------------------------------------------------------ */ 22 31 ··· 952 943 .nr_fixed_factor_clks = ARRAY_SIZE(top_fixed_factor_clks), 953 944 .gate_clks = top_gate_clks, 954 945 .nr_gate_clks = ARRAY_SIZE(top_gate_clks), 955 - .nr_clk_ids = TOP_NR_CLK, 946 + .nr_clk_ids = CLKS_NR_TOP, 956 947 .clk_regs = top_clk_regs, 957 948 .nr_clk_regs = ARRAY_SIZE(top_clk_regs), 958 949 }; ··· 1012 1003 .nr_div_clks = ARRAY_SIZE(busmc_div_clks), 1013 1004 .gate_clks = busmc_gate_clks, 1014 1005 .nr_gate_clks = ARRAY_SIZE(busmc_gate_clks), 1015 - .nr_clk_ids = BUSMC_NR_CLK, 1006 + .nr_clk_ids = CLKS_NR_BUSMC, 1016 1007 .clk_regs = busmc_clk_regs, 1017 1008 .nr_clk_regs = ARRAY_SIZE(busmc_clk_regs), 1018 1009 .clk_name = "dout_clkcmu_busmc_bus", ··· 1070 1061 .nr_div_clks = ARRAY_SIZE(core_div_clks), 1071 1062 .gate_clks = core_gate_clks, 1072 1063 .nr_gate_clks = ARRAY_SIZE(core_gate_clks), 1073 - .nr_clk_ids = CORE_NR_CLK, 1064 + .nr_clk_ids = CLKS_NR_CORE, 1074 1065 .clk_regs = core_clk_regs, 1075 1066 .nr_clk_regs = ARRAY_SIZE(core_clk_regs), 1076 1067 .clk_name = "dout_clkcmu_core_bus", ··· 1310 1301 .nr_mux_clks = ARRAY_SIZE(fsys0_mux_clks), 1311 1302 .gate_clks = fsys0_gate_clks, 1312 1303 .nr_gate_clks = ARRAY_SIZE(fsys0_gate_clks), 1313 - .nr_clk_ids = FSYS0_NR_CLK, 1304 + .nr_clk_ids = CLKS_NR_FSYS0, 1314 1305 .clk_regs = fsys0_clk_regs, 1315 1306 .nr_clk_regs = ARRAY_SIZE(fsys0_clk_regs), 1316 1307 .clk_name = "dout_clkcmu_fsys0_bus", ··· 1437 1428 .nr_div_clks = ARRAY_SIZE(fsys1_div_clks), 1438 1429 .gate_clks = fsys1_gate_clks, 1439 1430 .nr_gate_clks = ARRAY_SIZE(fsys1_gate_clks), 1440 - .nr_clk_ids = FSYS1_NR_CLK, 1431 + .nr_clk_ids = CLKS_NR_FSYS1, 1441 1432 .clk_regs = fsys1_clk_regs, 1442 1433 .nr_clk_regs = ARRAY_SIZE(fsys1_clk_regs), 1443 1434 .clk_name = "dout_clkcmu_fsys1_bus", ··· 1504 1495 .nr_mux_clks = ARRAY_SIZE(fsys2_mux_clks), 1505 1496 .gate_clks = fsys2_gate_clks, 1506 1497 .nr_gate_clks = ARRAY_SIZE(fsys2_gate_clks), 1507 - .nr_clk_ids = FSYS2_NR_CLK, 1498 + .nr_clk_ids = CLKS_NR_FSYS2, 1508 1499 .clk_regs = fsys2_clk_regs, 1509 1500 .nr_clk_regs = ARRAY_SIZE(fsys2_clk_regs), 1510 1501 .clk_name = "dout_clkcmu_fsys2_bus", ··· 1759 1750 .nr_div_clks = ARRAY_SIZE(peric0_div_clks), 1760 1751 .gate_clks = peric0_gate_clks, 1761 1752 .nr_gate_clks = ARRAY_SIZE(peric0_gate_clks), 1762 - .nr_clk_ids = PERIC0_NR_CLK, 1753 + .nr_clk_ids = CLKS_NR_PERIC0, 1763 1754 .clk_regs = peric0_clk_regs, 1764 1755 .nr_clk_regs = ARRAY_SIZE(peric0_clk_regs), 1765 1756 .clk_name = "dout_clkcmu_peric0_bus", ··· 2014 2005 .nr_div_clks = ARRAY_SIZE(peric1_div_clks), 2015 2006 .gate_clks = peric1_gate_clks, 2016 2007 .nr_gate_clks = ARRAY_SIZE(peric1_gate_clks), 2017 - .nr_clk_ids = PERIC1_NR_CLK, 2008 + .nr_clk_ids = CLKS_NR_PERIC1, 2018 2009 .clk_regs = peric1_clk_regs, 2019 2010 .nr_clk_regs = ARRAY_SIZE(peric1_clk_regs), 2020 2011 .clk_name = "dout_clkcmu_peric1_bus", ··· 2061 2052 .nr_mux_clks = ARRAY_SIZE(peris_mux_clks), 2062 2053 .gate_clks = peris_gate_clks, 2063 2054 .nr_gate_clks = ARRAY_SIZE(peris_gate_clks), 2064 - .nr_clk_ids = PERIS_NR_CLK, 2055 + .nr_clk_ids = CLKS_NR_PERIS, 2065 2056 .clk_regs = peris_clk_regs, 2066 2057 .nr_clk_regs = ARRAY_SIZE(peris_clk_regs), 2067 2058 .clk_name = "dout_clkcmu_peris_bus",
-2
drivers/clk/samsung/clk-fsd.c
··· 13 13 #include <linux/init.h> 14 14 #include <linux/kernel.h> 15 15 #include <linux/of.h> 16 - #include <linux/of_address.h> 17 - #include <linux/of_device.h> 18 16 #include <linux/platform_device.h> 19 17 20 18 #include <dt-bindings/clock/fsd-clk.h>
+1 -1
drivers/clk/sifive/sifive-prci.c
··· 7 7 #include <linux/clkdev.h> 8 8 #include <linux/delay.h> 9 9 #include <linux/io.h> 10 - #include <linux/of_device.h> 10 + #include <linux/of.h> 11 11 #include "sifive-prci.h" 12 12 #include "fu540-prci.h" 13 13 #include "fu740-prci.h"
+2 -5
drivers/clk/socfpga/clk-agilex.c
··· 4 4 */ 5 5 #include <linux/slab.h> 6 6 #include <linux/clk-provider.h> 7 - #include <linux/of_device.h> 8 - #include <linux/of_address.h> 7 + #include <linux/of.h> 9 8 #include <linux/platform_device.h> 10 9 11 10 #include <dt-bindings/clock/agilex-clock.h> ··· 457 458 struct device_node *np = pdev->dev.of_node; 458 459 struct device *dev = &pdev->dev; 459 460 struct stratix10_clock_data *clk_data; 460 - struct resource *res; 461 461 void __iomem *base; 462 462 int i, num_clks; 463 463 464 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 465 - base = devm_ioremap_resource(dev, res); 464 + base = devm_platform_ioremap_resource(pdev, 0); 466 465 if (IS_ERR(base)) 467 466 return PTR_ERR(base); 468 467
+1 -2
drivers/clk/socfpga/clk-s10.c
··· 4 4 */ 5 5 #include <linux/slab.h> 6 6 #include <linux/clk-provider.h> 7 - #include <linux/of_device.h> 8 - #include <linux/of_address.h> 7 + #include <linux/of.h> 9 8 #include <linux/platform_device.h> 10 9 11 10 #include <dt-bindings/clock/stratix10-clock.h>
-1
drivers/clk/spear/spear1310_clock.c
··· 12 12 #include <linux/clk/spear.h> 13 13 #include <linux/err.h> 14 14 #include <linux/io.h> 15 - #include <linux/of_platform.h> 16 15 #include <linux/spinlock_types.h> 17 16 #include "clk.h" 18 17
-1
drivers/clk/spear/spear1340_clock.c
··· 12 12 #include <linux/clk/spear.h> 13 13 #include <linux/err.h> 14 14 #include <linux/io.h> 15 - #include <linux/of_platform.h> 16 15 #include <linux/spinlock_types.h> 17 16 #include "clk.h" 18 17
+1 -1
drivers/clk/spear/spear3xx_clock.c
··· 11 11 #include <linux/clk/spear.h> 12 12 #include <linux/err.h> 13 13 #include <linux/io.h> 14 - #include <linux/of_platform.h> 14 + #include <linux/of.h> 15 15 #include <linux/spinlock_types.h> 16 16 #include "clk.h" 17 17
+1 -1
drivers/clk/sprd/common.c
··· 8 8 #include <linux/mfd/syscon.h> 9 9 #include <linux/module.h> 10 10 #include <linux/of_address.h> 11 - #include <linux/of_platform.h> 11 + #include <linux/platform_device.h> 12 12 #include <linux/regmap.h> 13 13 14 14 #include "common.h"
+1 -1
drivers/clk/sprd/sc9860-clk.c
··· 9 9 #include <linux/err.h> 10 10 #include <linux/io.h> 11 11 #include <linux/module.h> 12 - #include <linux/of_device.h> 12 + #include <linux/of.h> 13 13 #include <linux/platform_device.h> 14 14 #include <linux/slab.h> 15 15
+1 -1
drivers/clk/sprd/ums512-clk.c
··· 9 9 #include <linux/clk-provider.h> 10 10 #include <linux/err.h> 11 11 #include <linux/io.h> 12 + #include <linux/mod_devicetable.h> 12 13 #include <linux/module.h> 13 - #include <linux/of_device.h> 14 14 #include <linux/platform_device.h> 15 15 #include <linux/slab.h> 16 16
+33
drivers/clk/starfive/Kconfig
··· 21 21 Say Y or M here to support the audio clocks on the StarFive JH7100 22 22 SoC. 23 23 24 + config CLK_STARFIVE_JH7110_PLL 25 + bool "StarFive JH7110 PLL clock support" 26 + depends on ARCH_STARFIVE || COMPILE_TEST 27 + default ARCH_STARFIVE 28 + help 29 + Say yes here to support the PLL clock controller on the 30 + StarFive JH7110 SoC. 31 + 24 32 config CLK_STARFIVE_JH7110_SYS 25 33 bool "StarFive JH7110 system clock support" 26 34 depends on ARCH_STARFIVE || COMPILE_TEST 27 35 select AUXILIARY_BUS 28 36 select CLK_STARFIVE_JH71X0 29 37 select RESET_STARFIVE_JH7110 if RESET_CONTROLLER 38 + select CLK_STARFIVE_JH7110_PLL 30 39 default ARCH_STARFIVE 31 40 help 32 41 Say yes here to support the system clock controller on the ··· 48 39 help 49 40 Say yes here to support the always-on clock controller on the 50 41 StarFive JH7110 SoC. 42 + 43 + config CLK_STARFIVE_JH7110_STG 44 + tristate "StarFive JH7110 System-Top-Group clock support" 45 + depends on CLK_STARFIVE_JH7110_SYS 46 + default m if ARCH_STARFIVE 47 + help 48 + Say yes here to support the System-Top-Group clock controller 49 + on the StarFive JH7110 SoC. 50 + 51 + config CLK_STARFIVE_JH7110_ISP 52 + tristate "StarFive JH7110 Image-Signal-Process clock support" 53 + depends on CLK_STARFIVE_JH7110_SYS && JH71XX_PMU 54 + default m if ARCH_STARFIVE 55 + help 56 + Say yes here to support the Image-Signal-Process clock controller 57 + on the StarFive JH7110 SoC. 58 + 59 + config CLK_STARFIVE_JH7110_VOUT 60 + tristate "StarFive JH7110 Video-Output clock support" 61 + depends on CLK_STARFIVE_JH7110_SYS && JH71XX_PMU 62 + default m if ARCH_STARFIVE 63 + help 64 + Say yes here to support the Video-Output clock controller 65 + on the StarFive JH7110 SoC.
+4
drivers/clk/starfive/Makefile
··· 4 4 obj-$(CONFIG_CLK_STARFIVE_JH7100) += clk-starfive-jh7100.o 5 5 obj-$(CONFIG_CLK_STARFIVE_JH7100_AUDIO) += clk-starfive-jh7100-audio.o 6 6 7 + obj-$(CONFIG_CLK_STARFIVE_JH7110_PLL) += clk-starfive-jh7110-pll.o 7 8 obj-$(CONFIG_CLK_STARFIVE_JH7110_SYS) += clk-starfive-jh7110-sys.o 8 9 obj-$(CONFIG_CLK_STARFIVE_JH7110_AON) += clk-starfive-jh7110-aon.o 10 + obj-$(CONFIG_CLK_STARFIVE_JH7110_STG) += clk-starfive-jh7110-stg.o 11 + obj-$(CONFIG_CLK_STARFIVE_JH7110_ISP) += clk-starfive-jh7110-isp.o 12 + obj-$(CONFIG_CLK_STARFIVE_JH7110_VOUT) += clk-starfive-jh7110-vout.o
-1
drivers/clk/starfive/clk-starfive-jh7100-audio.c
··· 11 11 #include <linux/kernel.h> 12 12 #include <linux/mod_devicetable.h> 13 13 #include <linux/module.h> 14 - #include <linux/of_device.h> 15 14 #include <linux/platform_device.h> 16 15 17 16 #include <dt-bindings/clock/starfive-jh7100-audio.h>
+232
drivers/clk/starfive/clk-starfive-jh7110-isp.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * StarFive JH7110 Image-Signal-Process Clock Driver 4 + * 5 + * Copyright (C) 2022-2023 StarFive Technology Co., Ltd. 6 + */ 7 + 8 + #include <linux/clk.h> 9 + #include <linux/clk-provider.h> 10 + #include <linux/io.h> 11 + #include <linux/platform_device.h> 12 + #include <linux/pm_runtime.h> 13 + #include <linux/reset.h> 14 + 15 + #include <dt-bindings/clock/starfive,jh7110-crg.h> 16 + 17 + #include "clk-starfive-jh7110.h" 18 + 19 + /* external clocks */ 20 + #define JH7110_ISPCLK_ISP_TOP_CORE (JH7110_ISPCLK_END + 0) 21 + #define JH7110_ISPCLK_ISP_TOP_AXI (JH7110_ISPCLK_END + 1) 22 + #define JH7110_ISPCLK_NOC_BUS_ISP_AXI (JH7110_ISPCLK_END + 2) 23 + #define JH7110_ISPCLK_DVP_CLK (JH7110_ISPCLK_END + 3) 24 + #define JH7110_ISPCLK_EXT_END (JH7110_ISPCLK_END + 4) 25 + 26 + static struct clk_bulk_data jh7110_isp_top_clks[] = { 27 + { .id = "isp_top_core" }, 28 + { .id = "isp_top_axi" } 29 + }; 30 + 31 + static const struct jh71x0_clk_data jh7110_ispclk_data[] = { 32 + /* syscon */ 33 + JH71X0__DIV(JH7110_ISPCLK_DOM4_APB_FUNC, "dom4_apb_func", 15, 34 + JH7110_ISPCLK_ISP_TOP_AXI), 35 + JH71X0__DIV(JH7110_ISPCLK_MIPI_RX0_PXL, "mipi_rx0_pxl", 8, 36 + JH7110_ISPCLK_ISP_TOP_CORE), 37 + JH71X0__INV(JH7110_ISPCLK_DVP_INV, "dvp_inv", JH7110_ISPCLK_DVP_CLK), 38 + /* vin */ 39 + JH71X0__DIV(JH7110_ISPCLK_M31DPHY_CFG_IN, "m31dphy_cfg_in", 16, 40 + JH7110_ISPCLK_ISP_TOP_CORE), 41 + JH71X0__DIV(JH7110_ISPCLK_M31DPHY_REF_IN, "m31dphy_ref_in", 16, 42 + JH7110_ISPCLK_ISP_TOP_CORE), 43 + JH71X0__DIV(JH7110_ISPCLK_M31DPHY_TX_ESC_LAN0, "m31dphy_tx_esc_lan0", 60, 44 + JH7110_ISPCLK_ISP_TOP_CORE), 45 + JH71X0_GATE(JH7110_ISPCLK_VIN_APB, "vin_apb", 0, 46 + JH7110_ISPCLK_DOM4_APB_FUNC), 47 + JH71X0__DIV(JH7110_ISPCLK_VIN_SYS, "vin_sys", 8, JH7110_ISPCLK_ISP_TOP_CORE), 48 + JH71X0_GATE(JH7110_ISPCLK_VIN_PIXEL_IF0, "vin_pixel_if0", 0, 49 + JH7110_ISPCLK_MIPI_RX0_PXL), 50 + JH71X0_GATE(JH7110_ISPCLK_VIN_PIXEL_IF1, "vin_pixel_if1", 0, 51 + JH7110_ISPCLK_MIPI_RX0_PXL), 52 + JH71X0_GATE(JH7110_ISPCLK_VIN_PIXEL_IF2, "vin_pixel_if2", 0, 53 + JH7110_ISPCLK_MIPI_RX0_PXL), 54 + JH71X0_GATE(JH7110_ISPCLK_VIN_PIXEL_IF3, "vin_pixel_if3", 0, 55 + JH7110_ISPCLK_MIPI_RX0_PXL), 56 + JH71X0__MUX(JH7110_ISPCLK_VIN_P_AXI_WR, "vin_p_axi_wr", 2, 57 + JH7110_ISPCLK_MIPI_RX0_PXL, 58 + JH7110_ISPCLK_DVP_INV), 59 + /* ispv2_top_wrapper */ 60 + JH71X0_GMUX(JH7110_ISPCLK_ISPV2_TOP_WRAPPER_C, "ispv2_top_wrapper_c", 0, 2, 61 + JH7110_ISPCLK_MIPI_RX0_PXL, 62 + JH7110_ISPCLK_DVP_INV), 63 + }; 64 + 65 + static inline int jh7110_isp_top_rst_init(struct jh71x0_clk_priv *priv) 66 + { 67 + struct reset_control *top_rsts; 68 + 69 + /* The resets should be shared and other ISP modules will use its. */ 70 + top_rsts = devm_reset_control_array_get_shared(priv->dev); 71 + if (IS_ERR(top_rsts)) 72 + return dev_err_probe(priv->dev, PTR_ERR(top_rsts), 73 + "failed to get top resets\n"); 74 + 75 + return reset_control_deassert(top_rsts); 76 + } 77 + 78 + static struct clk_hw *jh7110_ispclk_get(struct of_phandle_args *clkspec, void *data) 79 + { 80 + struct jh71x0_clk_priv *priv = data; 81 + unsigned int idx = clkspec->args[0]; 82 + 83 + if (idx < JH7110_ISPCLK_END) 84 + return &priv->reg[idx].hw; 85 + 86 + return ERR_PTR(-EINVAL); 87 + } 88 + 89 + #ifdef CONFIG_PM 90 + static int jh7110_ispcrg_suspend(struct device *dev) 91 + { 92 + struct jh7110_top_sysclk *top = dev_get_drvdata(dev); 93 + 94 + clk_bulk_disable_unprepare(top->top_clks_num, top->top_clks); 95 + 96 + return 0; 97 + } 98 + 99 + static int jh7110_ispcrg_resume(struct device *dev) 100 + { 101 + struct jh7110_top_sysclk *top = dev_get_drvdata(dev); 102 + 103 + return clk_bulk_prepare_enable(top->top_clks_num, top->top_clks); 104 + } 105 + 106 + static const struct dev_pm_ops jh7110_ispcrg_pm_ops = { 107 + RUNTIME_PM_OPS(jh7110_ispcrg_suspend, jh7110_ispcrg_resume, NULL) 108 + }; 109 + #endif 110 + 111 + static int jh7110_ispcrg_probe(struct platform_device *pdev) 112 + { 113 + struct jh71x0_clk_priv *priv; 114 + struct jh7110_top_sysclk *top; 115 + unsigned int idx; 116 + int ret; 117 + 118 + priv = devm_kzalloc(&pdev->dev, 119 + struct_size(priv, reg, JH7110_ISPCLK_END), 120 + GFP_KERNEL); 121 + if (!priv) 122 + return -ENOMEM; 123 + 124 + top = devm_kzalloc(&pdev->dev, sizeof(*top), GFP_KERNEL); 125 + if (!top) 126 + return -ENOMEM; 127 + 128 + spin_lock_init(&priv->rmw_lock); 129 + priv->dev = &pdev->dev; 130 + priv->base = devm_platform_ioremap_resource(pdev, 0); 131 + if (IS_ERR(priv->base)) 132 + return PTR_ERR(priv->base); 133 + 134 + top->top_clks = jh7110_isp_top_clks; 135 + top->top_clks_num = ARRAY_SIZE(jh7110_isp_top_clks); 136 + ret = devm_clk_bulk_get(priv->dev, top->top_clks_num, top->top_clks); 137 + if (ret) 138 + return dev_err_probe(priv->dev, ret, "failed to get main clocks\n"); 139 + dev_set_drvdata(priv->dev, top); 140 + 141 + /* enable power domain and clocks */ 142 + pm_runtime_enable(priv->dev); 143 + ret = pm_runtime_get_sync(priv->dev); 144 + if (ret < 0) 145 + return dev_err_probe(priv->dev, ret, "failed to turn on power\n"); 146 + 147 + ret = jh7110_isp_top_rst_init(priv); 148 + if (ret) 149 + goto err_exit; 150 + 151 + for (idx = 0; idx < JH7110_ISPCLK_END; idx++) { 152 + u32 max = jh7110_ispclk_data[idx].max; 153 + struct clk_parent_data parents[4] = {}; 154 + struct clk_init_data init = { 155 + .name = jh7110_ispclk_data[idx].name, 156 + .ops = starfive_jh71x0_clk_ops(max), 157 + .parent_data = parents, 158 + .num_parents = 159 + ((max & JH71X0_CLK_MUX_MASK) >> JH71X0_CLK_MUX_SHIFT) + 1, 160 + .flags = jh7110_ispclk_data[idx].flags, 161 + }; 162 + struct jh71x0_clk *clk = &priv->reg[idx]; 163 + unsigned int i; 164 + const char *fw_name[JH7110_ISPCLK_EXT_END - JH7110_ISPCLK_END] = { 165 + "isp_top_core", 166 + "isp_top_axi", 167 + "noc_bus_isp_axi", 168 + "dvp_clk" 169 + }; 170 + 171 + for (i = 0; i < init.num_parents; i++) { 172 + unsigned int pidx = jh7110_ispclk_data[idx].parents[i]; 173 + 174 + if (pidx < JH7110_ISPCLK_END) 175 + parents[i].hw = &priv->reg[pidx].hw; 176 + else 177 + parents[i].fw_name = fw_name[pidx - JH7110_ISPCLK_END]; 178 + } 179 + 180 + clk->hw.init = &init; 181 + clk->idx = idx; 182 + clk->max_div = max & JH71X0_CLK_DIV_MASK; 183 + 184 + ret = devm_clk_hw_register(&pdev->dev, &clk->hw); 185 + if (ret) 186 + goto err_exit; 187 + } 188 + 189 + ret = devm_of_clk_add_hw_provider(&pdev->dev, jh7110_ispclk_get, priv); 190 + if (ret) 191 + goto err_exit; 192 + 193 + ret = jh7110_reset_controller_register(priv, "rst-isp", 3); 194 + if (ret) 195 + goto err_exit; 196 + 197 + return 0; 198 + 199 + err_exit: 200 + pm_runtime_put_sync(priv->dev); 201 + pm_runtime_disable(priv->dev); 202 + return ret; 203 + } 204 + 205 + static int jh7110_ispcrg_remove(struct platform_device *pdev) 206 + { 207 + pm_runtime_put_sync(&pdev->dev); 208 + pm_runtime_disable(&pdev->dev); 209 + 210 + return 0; 211 + } 212 + 213 + static const struct of_device_id jh7110_ispcrg_match[] = { 214 + { .compatible = "starfive,jh7110-ispcrg" }, 215 + { /* sentinel */ } 216 + }; 217 + MODULE_DEVICE_TABLE(of, jh7110_ispcrg_match); 218 + 219 + static struct platform_driver jh7110_ispcrg_driver = { 220 + .probe = jh7110_ispcrg_probe, 221 + .remove = jh7110_ispcrg_remove, 222 + .driver = { 223 + .name = "clk-starfive-jh7110-isp", 224 + .of_match_table = jh7110_ispcrg_match, 225 + .pm = pm_ptr(&jh7110_ispcrg_pm_ops), 226 + }, 227 + }; 228 + module_platform_driver(jh7110_ispcrg_driver); 229 + 230 + MODULE_AUTHOR("Xingyu Wu <xingyu.wu@starfivetech.com>"); 231 + MODULE_DESCRIPTION("StarFive JH7110 Image-Signal-Process clock driver"); 232 + MODULE_LICENSE("GPL");
+507
drivers/clk/starfive/clk-starfive-jh7110-pll.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * StarFive JH7110 PLL Clock Generator Driver 4 + * 5 + * Copyright (C) 2023 StarFive Technology Co., Ltd. 6 + * Copyright (C) 2023 Emil Renner Berthing <emil.renner.berthing@canonical.com> 7 + * 8 + * This driver is about to register JH7110 PLL clock generator and support ops. 9 + * The JH7110 have three PLL clock, PLL0, PLL1 and PLL2. 10 + * Each PLL clocks work in integer mode or fraction mode by some dividers, 11 + * and the configuration registers and dividers are set in several syscon registers. 12 + * The formula for calculating frequency is: 13 + * Fvco = Fref * (NI + NF) / M / Q1 14 + * Fref: OSC source clock rate 15 + * NI: integer frequency dividing ratio of feedback divider, set by fbdiv[11:0]. 16 + * NF: fractional frequency dividing ratio, set by frac[23:0]. NF = frac[23:0] / 2^24 = 0 ~ 0.999. 17 + * M: frequency dividing ratio of pre-divider, set by prediv[5:0]. 18 + * Q1: frequency dividing ratio of post divider, set by 2^postdiv1[1:0], eg. 1, 2, 4 or 8. 19 + */ 20 + 21 + #include <linux/bits.h> 22 + #include <linux/clk-provider.h> 23 + #include <linux/debugfs.h> 24 + #include <linux/device.h> 25 + #include <linux/kernel.h> 26 + #include <linux/mfd/syscon.h> 27 + #include <linux/platform_device.h> 28 + #include <linux/regmap.h> 29 + 30 + #include <dt-bindings/clock/starfive,jh7110-crg.h> 31 + 32 + /* this driver expects a 24MHz input frequency from the oscillator */ 33 + #define JH7110_PLL_OSC_RATE 24000000UL 34 + 35 + #define JH7110_PLL0_PD_OFFSET 0x18 36 + #define JH7110_PLL0_DACPD_SHIFT 24 37 + #define JH7110_PLL0_DACPD_MASK BIT(24) 38 + #define JH7110_PLL0_DSMPD_SHIFT 25 39 + #define JH7110_PLL0_DSMPD_MASK BIT(25) 40 + #define JH7110_PLL0_FBDIV_OFFSET 0x1c 41 + #define JH7110_PLL0_FBDIV_SHIFT 0 42 + #define JH7110_PLL0_FBDIV_MASK GENMASK(11, 0) 43 + #define JH7110_PLL0_FRAC_OFFSET 0x20 44 + #define JH7110_PLL0_PREDIV_OFFSET 0x24 45 + 46 + #define JH7110_PLL1_PD_OFFSET 0x24 47 + #define JH7110_PLL1_DACPD_SHIFT 15 48 + #define JH7110_PLL1_DACPD_MASK BIT(15) 49 + #define JH7110_PLL1_DSMPD_SHIFT 16 50 + #define JH7110_PLL1_DSMPD_MASK BIT(16) 51 + #define JH7110_PLL1_FBDIV_OFFSET 0x24 52 + #define JH7110_PLL1_FBDIV_SHIFT 17 53 + #define JH7110_PLL1_FBDIV_MASK GENMASK(28, 17) 54 + #define JH7110_PLL1_FRAC_OFFSET 0x28 55 + #define JH7110_PLL1_PREDIV_OFFSET 0x2c 56 + 57 + #define JH7110_PLL2_PD_OFFSET 0x2c 58 + #define JH7110_PLL2_DACPD_SHIFT 15 59 + #define JH7110_PLL2_DACPD_MASK BIT(15) 60 + #define JH7110_PLL2_DSMPD_SHIFT 16 61 + #define JH7110_PLL2_DSMPD_MASK BIT(16) 62 + #define JH7110_PLL2_FBDIV_OFFSET 0x2c 63 + #define JH7110_PLL2_FBDIV_SHIFT 17 64 + #define JH7110_PLL2_FBDIV_MASK GENMASK(28, 17) 65 + #define JH7110_PLL2_FRAC_OFFSET 0x30 66 + #define JH7110_PLL2_PREDIV_OFFSET 0x34 67 + 68 + #define JH7110_PLL_FRAC_SHIFT 0 69 + #define JH7110_PLL_FRAC_MASK GENMASK(23, 0) 70 + #define JH7110_PLL_POSTDIV1_SHIFT 28 71 + #define JH7110_PLL_POSTDIV1_MASK GENMASK(29, 28) 72 + #define JH7110_PLL_PREDIV_SHIFT 0 73 + #define JH7110_PLL_PREDIV_MASK GENMASK(5, 0) 74 + 75 + enum jh7110_pll_mode { 76 + JH7110_PLL_MODE_FRACTION, 77 + JH7110_PLL_MODE_INTEGER, 78 + }; 79 + 80 + struct jh7110_pll_preset { 81 + unsigned long freq; 82 + u32 frac; /* frac value should be decimals multiplied by 2^24 */ 83 + unsigned fbdiv : 12; /* fbdiv value should be 8 to 4095 */ 84 + unsigned prediv : 6; 85 + unsigned postdiv1 : 2; 86 + unsigned mode : 1; 87 + }; 88 + 89 + struct jh7110_pll_info { 90 + char *name; 91 + const struct jh7110_pll_preset *presets; 92 + unsigned int npresets; 93 + struct { 94 + unsigned int pd; 95 + unsigned int fbdiv; 96 + unsigned int frac; 97 + unsigned int prediv; 98 + } offsets; 99 + struct { 100 + u32 dacpd; 101 + u32 dsmpd; 102 + u32 fbdiv; 103 + } masks; 104 + struct { 105 + char dacpd; 106 + char dsmpd; 107 + char fbdiv; 108 + } shifts; 109 + }; 110 + 111 + #define _JH7110_PLL(_idx, _name, _presets) \ 112 + [_idx] = { \ 113 + .name = _name, \ 114 + .presets = _presets, \ 115 + .npresets = ARRAY_SIZE(_presets), \ 116 + .offsets = { \ 117 + .pd = JH7110_PLL##_idx##_PD_OFFSET, \ 118 + .fbdiv = JH7110_PLL##_idx##_FBDIV_OFFSET, \ 119 + .frac = JH7110_PLL##_idx##_FRAC_OFFSET, \ 120 + .prediv = JH7110_PLL##_idx##_PREDIV_OFFSET, \ 121 + }, \ 122 + .masks = { \ 123 + .dacpd = JH7110_PLL##_idx##_DACPD_MASK, \ 124 + .dsmpd = JH7110_PLL##_idx##_DSMPD_MASK, \ 125 + .fbdiv = JH7110_PLL##_idx##_FBDIV_MASK, \ 126 + }, \ 127 + .shifts = { \ 128 + .dacpd = JH7110_PLL##_idx##_DACPD_SHIFT, \ 129 + .dsmpd = JH7110_PLL##_idx##_DSMPD_SHIFT, \ 130 + .fbdiv = JH7110_PLL##_idx##_FBDIV_SHIFT, \ 131 + }, \ 132 + } 133 + #define JH7110_PLL(idx, name, presets) _JH7110_PLL(idx, name, presets) 134 + 135 + struct jh7110_pll_data { 136 + struct clk_hw hw; 137 + unsigned int idx; 138 + }; 139 + 140 + struct jh7110_pll_priv { 141 + struct device *dev; 142 + struct regmap *regmap; 143 + struct jh7110_pll_data pll[JH7110_PLLCLK_END]; 144 + }; 145 + 146 + struct jh7110_pll_regvals { 147 + u32 dacpd; 148 + u32 dsmpd; 149 + u32 fbdiv; 150 + u32 frac; 151 + u32 postdiv1; 152 + u32 prediv; 153 + }; 154 + 155 + /* 156 + * Because the pll frequency is relatively fixed, 157 + * it cannot be set arbitrarily, so it needs a specific configuration. 158 + * PLL0 frequency should be multiple of 125MHz (USB frequency). 159 + */ 160 + static const struct jh7110_pll_preset jh7110_pll0_presets[] = { 161 + { 162 + .freq = 375000000, 163 + .fbdiv = 125, 164 + .prediv = 8, 165 + .postdiv1 = 0, 166 + .mode = JH7110_PLL_MODE_INTEGER, 167 + }, { 168 + .freq = 500000000, 169 + .fbdiv = 125, 170 + .prediv = 6, 171 + .postdiv1 = 0, 172 + .mode = JH7110_PLL_MODE_INTEGER, 173 + }, { 174 + .freq = 625000000, 175 + .fbdiv = 625, 176 + .prediv = 24, 177 + .postdiv1 = 0, 178 + .mode = JH7110_PLL_MODE_INTEGER, 179 + }, { 180 + .freq = 750000000, 181 + .fbdiv = 125, 182 + .prediv = 4, 183 + .postdiv1 = 0, 184 + .mode = JH7110_PLL_MODE_INTEGER, 185 + }, { 186 + .freq = 875000000, 187 + .fbdiv = 875, 188 + .prediv = 24, 189 + .postdiv1 = 0, 190 + .mode = JH7110_PLL_MODE_INTEGER, 191 + }, { 192 + .freq = 1000000000, 193 + .fbdiv = 125, 194 + .prediv = 3, 195 + .postdiv1 = 0, 196 + .mode = JH7110_PLL_MODE_INTEGER, 197 + }, { 198 + .freq = 1250000000, 199 + .fbdiv = 625, 200 + .prediv = 12, 201 + .postdiv1 = 0, 202 + .mode = JH7110_PLL_MODE_INTEGER, 203 + }, { 204 + .freq = 1375000000, 205 + .fbdiv = 1375, 206 + .prediv = 24, 207 + .postdiv1 = 0, 208 + .mode = JH7110_PLL_MODE_INTEGER, 209 + }, { 210 + .freq = 1500000000, 211 + .fbdiv = 125, 212 + .prediv = 2, 213 + .postdiv1 = 0, 214 + .mode = JH7110_PLL_MODE_INTEGER, 215 + }, 216 + }; 217 + 218 + static const struct jh7110_pll_preset jh7110_pll1_presets[] = { 219 + { 220 + .freq = 1066000000, 221 + .fbdiv = 533, 222 + .prediv = 12, 223 + .postdiv1 = 0, 224 + .mode = JH7110_PLL_MODE_INTEGER, 225 + }, { 226 + .freq = 1200000000, 227 + .fbdiv = 50, 228 + .prediv = 1, 229 + .postdiv1 = 0, 230 + .mode = JH7110_PLL_MODE_INTEGER, 231 + }, { 232 + .freq = 1400000000, 233 + .fbdiv = 350, 234 + .prediv = 6, 235 + .postdiv1 = 0, 236 + .mode = JH7110_PLL_MODE_INTEGER, 237 + }, { 238 + .freq = 1600000000, 239 + .fbdiv = 200, 240 + .prediv = 3, 241 + .postdiv1 = 0, 242 + .mode = JH7110_PLL_MODE_INTEGER, 243 + }, 244 + }; 245 + 246 + static const struct jh7110_pll_preset jh7110_pll2_presets[] = { 247 + { 248 + .freq = 1188000000, 249 + .fbdiv = 99, 250 + .prediv = 2, 251 + .postdiv1 = 0, 252 + .mode = JH7110_PLL_MODE_INTEGER, 253 + }, { 254 + .freq = 1228800000, 255 + .fbdiv = 256, 256 + .prediv = 5, 257 + .postdiv1 = 0, 258 + .mode = JH7110_PLL_MODE_INTEGER, 259 + }, 260 + }; 261 + 262 + static const struct jh7110_pll_info jh7110_plls[JH7110_PLLCLK_END] = { 263 + JH7110_PLL(JH7110_PLLCLK_PLL0_OUT, "pll0_out", jh7110_pll0_presets), 264 + JH7110_PLL(JH7110_PLLCLK_PLL1_OUT, "pll1_out", jh7110_pll1_presets), 265 + JH7110_PLL(JH7110_PLLCLK_PLL2_OUT, "pll2_out", jh7110_pll2_presets), 266 + }; 267 + 268 + static struct jh7110_pll_data *jh7110_pll_data_from(struct clk_hw *hw) 269 + { 270 + return container_of(hw, struct jh7110_pll_data, hw); 271 + } 272 + 273 + static struct jh7110_pll_priv *jh7110_pll_priv_from(struct jh7110_pll_data *pll) 274 + { 275 + return container_of(pll, struct jh7110_pll_priv, pll[pll->idx]); 276 + } 277 + 278 + static void jh7110_pll_regvals_get(struct regmap *regmap, 279 + const struct jh7110_pll_info *info, 280 + struct jh7110_pll_regvals *ret) 281 + { 282 + u32 val; 283 + 284 + regmap_read(regmap, info->offsets.pd, &val); 285 + ret->dacpd = (val & info->masks.dacpd) >> info->shifts.dacpd; 286 + ret->dsmpd = (val & info->masks.dsmpd) >> info->shifts.dsmpd; 287 + 288 + regmap_read(regmap, info->offsets.fbdiv, &val); 289 + ret->fbdiv = (val & info->masks.fbdiv) >> info->shifts.fbdiv; 290 + 291 + regmap_read(regmap, info->offsets.frac, &val); 292 + ret->frac = (val & JH7110_PLL_FRAC_MASK) >> JH7110_PLL_FRAC_SHIFT; 293 + ret->postdiv1 = (val & JH7110_PLL_POSTDIV1_MASK) >> JH7110_PLL_POSTDIV1_SHIFT; 294 + 295 + regmap_read(regmap, info->offsets.prediv, &val); 296 + ret->prediv = (val & JH7110_PLL_PREDIV_MASK) >> JH7110_PLL_PREDIV_SHIFT; 297 + } 298 + 299 + static unsigned long jh7110_pll_recalc_rate(struct clk_hw *hw, unsigned long parent_rate) 300 + { 301 + struct jh7110_pll_data *pll = jh7110_pll_data_from(hw); 302 + struct jh7110_pll_priv *priv = jh7110_pll_priv_from(pll); 303 + struct jh7110_pll_regvals val; 304 + unsigned long rate; 305 + 306 + jh7110_pll_regvals_get(priv->regmap, &jh7110_plls[pll->idx], &val); 307 + 308 + /* 309 + * dacpd = dsmpd = 0: fraction mode 310 + * dacpd = dsmpd = 1: integer mode, frac value ignored 311 + * 312 + * rate = parent * (fbdiv + frac/2^24) / prediv / 2^postdiv1 313 + * = (parent * fbdiv + parent * frac / 2^24) / (prediv * 2^postdiv1) 314 + */ 315 + if (val.dacpd == 0 && val.dsmpd == 0) 316 + rate = parent_rate * val.frac / (1UL << 24); 317 + else if (val.dacpd == 1 && val.dsmpd == 1) 318 + rate = 0; 319 + else 320 + return 0; 321 + 322 + rate += parent_rate * val.fbdiv; 323 + rate /= val.prediv << val.postdiv1; 324 + 325 + return rate; 326 + } 327 + 328 + static int jh7110_pll_determine_rate(struct clk_hw *hw, struct clk_rate_request *req) 329 + { 330 + struct jh7110_pll_data *pll = jh7110_pll_data_from(hw); 331 + const struct jh7110_pll_info *info = &jh7110_plls[pll->idx]; 332 + const struct jh7110_pll_preset *selected = &info->presets[0]; 333 + unsigned int idx; 334 + 335 + /* if the parent rate doesn't match our expectations the presets won't work */ 336 + if (req->best_parent_rate != JH7110_PLL_OSC_RATE) { 337 + req->rate = jh7110_pll_recalc_rate(hw, req->best_parent_rate); 338 + return 0; 339 + } 340 + 341 + /* find highest rate lower or equal to the requested rate */ 342 + for (idx = 1; idx < info->npresets; idx++) { 343 + const struct jh7110_pll_preset *val = &info->presets[idx]; 344 + 345 + if (req->rate < val->freq) 346 + break; 347 + 348 + selected = val; 349 + } 350 + 351 + req->rate = selected->freq; 352 + return 0; 353 + } 354 + 355 + static int jh7110_pll_set_rate(struct clk_hw *hw, unsigned long rate, 356 + unsigned long parent_rate) 357 + { 358 + struct jh7110_pll_data *pll = jh7110_pll_data_from(hw); 359 + struct jh7110_pll_priv *priv = jh7110_pll_priv_from(pll); 360 + const struct jh7110_pll_info *info = &jh7110_plls[pll->idx]; 361 + const struct jh7110_pll_preset *val; 362 + unsigned int idx; 363 + 364 + /* if the parent rate doesn't match our expectations the presets won't work */ 365 + if (parent_rate != JH7110_PLL_OSC_RATE) 366 + return -EINVAL; 367 + 368 + for (idx = 0, val = &info->presets[0]; idx < info->npresets; idx++, val++) { 369 + if (val->freq == rate) 370 + goto found; 371 + } 372 + return -EINVAL; 373 + 374 + found: 375 + if (val->mode == JH7110_PLL_MODE_FRACTION) 376 + regmap_update_bits(priv->regmap, info->offsets.frac, JH7110_PLL_FRAC_MASK, 377 + val->frac << JH7110_PLL_FRAC_SHIFT); 378 + 379 + regmap_update_bits(priv->regmap, info->offsets.pd, info->masks.dacpd, 380 + (u32)val->mode << info->shifts.dacpd); 381 + regmap_update_bits(priv->regmap, info->offsets.pd, info->masks.dsmpd, 382 + (u32)val->mode << info->shifts.dsmpd); 383 + regmap_update_bits(priv->regmap, info->offsets.prediv, JH7110_PLL_PREDIV_MASK, 384 + (u32)val->prediv << JH7110_PLL_PREDIV_SHIFT); 385 + regmap_update_bits(priv->regmap, info->offsets.fbdiv, info->masks.fbdiv, 386 + val->fbdiv << info->shifts.fbdiv); 387 + regmap_update_bits(priv->regmap, info->offsets.frac, JH7110_PLL_POSTDIV1_MASK, 388 + (u32)val->postdiv1 << JH7110_PLL_POSTDIV1_SHIFT); 389 + 390 + return 0; 391 + } 392 + 393 + #ifdef CONFIG_DEBUG_FS 394 + static int jh7110_pll_registers_read(struct seq_file *s, void *unused) 395 + { 396 + struct jh7110_pll_data *pll = s->private; 397 + struct jh7110_pll_priv *priv = jh7110_pll_priv_from(pll); 398 + struct jh7110_pll_regvals val; 399 + 400 + jh7110_pll_regvals_get(priv->regmap, &jh7110_plls[pll->idx], &val); 401 + 402 + seq_printf(s, "fbdiv=%u\n" 403 + "frac=%u\n" 404 + "prediv=%u\n" 405 + "postdiv1=%u\n" 406 + "dacpd=%u\n" 407 + "dsmpd=%u\n", 408 + val.fbdiv, val.frac, val.prediv, val.postdiv1, 409 + val.dacpd, val.dsmpd); 410 + 411 + return 0; 412 + } 413 + 414 + static int jh7110_pll_registers_open(struct inode *inode, struct file *f) 415 + { 416 + return single_open(f, jh7110_pll_registers_read, inode->i_private); 417 + } 418 + 419 + static const struct file_operations jh7110_pll_registers_ops = { 420 + .owner = THIS_MODULE, 421 + .open = jh7110_pll_registers_open, 422 + .release = single_release, 423 + .read = seq_read, 424 + .llseek = seq_lseek 425 + }; 426 + 427 + static void jh7110_pll_debug_init(struct clk_hw *hw, struct dentry *dentry) 428 + { 429 + struct jh7110_pll_data *pll = jh7110_pll_data_from(hw); 430 + 431 + debugfs_create_file("registers", 0400, dentry, pll, 432 + &jh7110_pll_registers_ops); 433 + } 434 + #else 435 + #define jh7110_pll_debug_init NULL 436 + #endif 437 + 438 + static const struct clk_ops jh7110_pll_ops = { 439 + .recalc_rate = jh7110_pll_recalc_rate, 440 + .determine_rate = jh7110_pll_determine_rate, 441 + .set_rate = jh7110_pll_set_rate, 442 + .debug_init = jh7110_pll_debug_init, 443 + }; 444 + 445 + static struct clk_hw *jh7110_pll_get(struct of_phandle_args *clkspec, void *data) 446 + { 447 + struct jh7110_pll_priv *priv = data; 448 + unsigned int idx = clkspec->args[0]; 449 + 450 + if (idx < JH7110_PLLCLK_END) 451 + return &priv->pll[idx].hw; 452 + 453 + return ERR_PTR(-EINVAL); 454 + } 455 + 456 + static int jh7110_pll_probe(struct platform_device *pdev) 457 + { 458 + struct jh7110_pll_priv *priv; 459 + unsigned int idx; 460 + int ret; 461 + 462 + priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); 463 + if (!priv) 464 + return -ENOMEM; 465 + 466 + priv->dev = &pdev->dev; 467 + priv->regmap = syscon_node_to_regmap(priv->dev->of_node->parent); 468 + if (IS_ERR(priv->regmap)) 469 + return PTR_ERR(priv->regmap); 470 + 471 + for (idx = 0; idx < JH7110_PLLCLK_END; idx++) { 472 + struct clk_parent_data parents = { 473 + .index = 0, 474 + }; 475 + struct clk_init_data init = { 476 + .name = jh7110_plls[idx].name, 477 + .ops = &jh7110_pll_ops, 478 + .parent_data = &parents, 479 + .num_parents = 1, 480 + .flags = 0, 481 + }; 482 + struct jh7110_pll_data *pll = &priv->pll[idx]; 483 + 484 + pll->hw.init = &init; 485 + pll->idx = idx; 486 + 487 + ret = devm_clk_hw_register(&pdev->dev, &pll->hw); 488 + if (ret) 489 + return ret; 490 + } 491 + 492 + return devm_of_clk_add_hw_provider(&pdev->dev, jh7110_pll_get, priv); 493 + } 494 + 495 + static const struct of_device_id jh7110_pll_match[] = { 496 + { .compatible = "starfive,jh7110-pll" }, 497 + { /* sentinel */ } 498 + }; 499 + MODULE_DEVICE_TABLE(of, jh7110_pll_match); 500 + 501 + static struct platform_driver jh7110_pll_driver = { 502 + .driver = { 503 + .name = "clk-starfive-jh7110-pll", 504 + .of_match_table = jh7110_pll_match, 505 + }, 506 + }; 507 + builtin_platform_driver_probe(jh7110_pll_driver, jh7110_pll_probe);
+173
drivers/clk/starfive/clk-starfive-jh7110-stg.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * StarFive JH7110 System-Top-Group Clock Driver 4 + * 5 + * Copyright (C) 2022 Emil Renner Berthing <kernel@esmil.dk> 6 + * Copyright (C) 2022 StarFive Technology Co., Ltd. 7 + */ 8 + 9 + #include <linux/clk-provider.h> 10 + #include <linux/io.h> 11 + #include <linux/platform_device.h> 12 + 13 + #include <dt-bindings/clock/starfive,jh7110-crg.h> 14 + 15 + #include "clk-starfive-jh7110.h" 16 + 17 + /* external clocks */ 18 + #define JH7110_STGCLK_OSC (JH7110_STGCLK_END + 0) 19 + #define JH7110_STGCLK_HIFI4_CORE (JH7110_STGCLK_END + 1) 20 + #define JH7110_STGCLK_STG_AXIAHB (JH7110_STGCLK_END + 2) 21 + #define JH7110_STGCLK_USB_125M (JH7110_STGCLK_END + 3) 22 + #define JH7110_STGCLK_CPU_BUS (JH7110_STGCLK_END + 4) 23 + #define JH7110_STGCLK_HIFI4_AXI (JH7110_STGCLK_END + 5) 24 + #define JH7110_STGCLK_NOCSTG_BUS (JH7110_STGCLK_END + 6) 25 + #define JH7110_STGCLK_APB_BUS (JH7110_STGCLK_END + 7) 26 + #define JH7110_STGCLK_EXT_END (JH7110_STGCLK_END + 8) 27 + 28 + static const struct jh71x0_clk_data jh7110_stgclk_data[] = { 29 + /* hifi4 */ 30 + JH71X0_GATE(JH7110_STGCLK_HIFI4_CLK_CORE, "hifi4_clk_core", 0, 31 + JH7110_STGCLK_HIFI4_CORE), 32 + /* usb */ 33 + JH71X0_GATE(JH7110_STGCLK_USB0_APB, "usb0_apb", 0, JH7110_STGCLK_APB_BUS), 34 + JH71X0_GATE(JH7110_STGCLK_USB0_UTMI_APB, "usb0_utmi_apb", 0, JH7110_STGCLK_APB_BUS), 35 + JH71X0_GATE(JH7110_STGCLK_USB0_AXI, "usb0_axi", 0, JH7110_STGCLK_STG_AXIAHB), 36 + JH71X0_GDIV(JH7110_STGCLK_USB0_LPM, "usb0_lpm", 0, 2, JH7110_STGCLK_OSC), 37 + JH71X0_GDIV(JH7110_STGCLK_USB0_STB, "usb0_stb", 0, 4, JH7110_STGCLK_OSC), 38 + JH71X0_GATE(JH7110_STGCLK_USB0_APP_125, "usb0_app_125", 0, JH7110_STGCLK_USB_125M), 39 + JH71X0__DIV(JH7110_STGCLK_USB0_REFCLK, "usb0_refclk", 2, JH7110_STGCLK_OSC), 40 + /* pci-e */ 41 + JH71X0_GATE(JH7110_STGCLK_PCIE0_AXI_MST0, "pcie0_axi_mst0", 0, 42 + JH7110_STGCLK_STG_AXIAHB), 43 + JH71X0_GATE(JH7110_STGCLK_PCIE0_APB, "pcie0_apb", 0, JH7110_STGCLK_APB_BUS), 44 + JH71X0_GATE(JH7110_STGCLK_PCIE0_TL, "pcie0_tl", 0, JH7110_STGCLK_STG_AXIAHB), 45 + JH71X0_GATE(JH7110_STGCLK_PCIE1_AXI_MST0, "pcie1_axi_mst0", 0, 46 + JH7110_STGCLK_STG_AXIAHB), 47 + JH71X0_GATE(JH7110_STGCLK_PCIE1_APB, "pcie1_apb", 0, JH7110_STGCLK_APB_BUS), 48 + JH71X0_GATE(JH7110_STGCLK_PCIE1_TL, "pcie1_tl", 0, JH7110_STGCLK_STG_AXIAHB), 49 + JH71X0_GATE(JH7110_STGCLK_PCIE_SLV_MAIN, "pcie_slv_main", CLK_IS_CRITICAL, 50 + JH7110_STGCLK_STG_AXIAHB), 51 + /* security */ 52 + JH71X0_GATE(JH7110_STGCLK_SEC_AHB, "sec_ahb", 0, JH7110_STGCLK_STG_AXIAHB), 53 + JH71X0_GATE(JH7110_STGCLK_SEC_MISC_AHB, "sec_misc_ahb", 0, JH7110_STGCLK_STG_AXIAHB), 54 + /* stg mtrx */ 55 + JH71X0_GATE(JH7110_STGCLK_GRP0_MAIN, "mtrx_grp0_main", CLK_IS_CRITICAL, 56 + JH7110_STGCLK_CPU_BUS), 57 + JH71X0_GATE(JH7110_STGCLK_GRP0_BUS, "mtrx_grp0_bus", CLK_IS_CRITICAL, 58 + JH7110_STGCLK_NOCSTG_BUS), 59 + JH71X0_GATE(JH7110_STGCLK_GRP0_STG, "mtrx_grp0_stg", CLK_IS_CRITICAL, 60 + JH7110_STGCLK_STG_AXIAHB), 61 + JH71X0_GATE(JH7110_STGCLK_GRP1_MAIN, "mtrx_grp1_main", CLK_IS_CRITICAL, 62 + JH7110_STGCLK_CPU_BUS), 63 + JH71X0_GATE(JH7110_STGCLK_GRP1_BUS, "mtrx_grp1_bus", CLK_IS_CRITICAL, 64 + JH7110_STGCLK_NOCSTG_BUS), 65 + JH71X0_GATE(JH7110_STGCLK_GRP1_STG, "mtrx_grp1_stg", CLK_IS_CRITICAL, 66 + JH7110_STGCLK_STG_AXIAHB), 67 + JH71X0_GATE(JH7110_STGCLK_GRP1_HIFI, "mtrx_grp1_hifi", CLK_IS_CRITICAL, 68 + JH7110_STGCLK_HIFI4_AXI), 69 + /* e24_rvpi */ 70 + JH71X0_GDIV(JH7110_STGCLK_E2_RTC, "e2_rtc", 0, 24, JH7110_STGCLK_OSC), 71 + JH71X0_GATE(JH7110_STGCLK_E2_CORE, "e2_core", 0, JH7110_STGCLK_STG_AXIAHB), 72 + JH71X0_GATE(JH7110_STGCLK_E2_DBG, "e2_dbg", 0, JH7110_STGCLK_STG_AXIAHB), 73 + /* dw_sgdma1p */ 74 + JH71X0_GATE(JH7110_STGCLK_DMA1P_AXI, "dma1p_axi", 0, JH7110_STGCLK_STG_AXIAHB), 75 + JH71X0_GATE(JH7110_STGCLK_DMA1P_AHB, "dma1p_ahb", 0, JH7110_STGCLK_STG_AXIAHB), 76 + }; 77 + 78 + static struct clk_hw *jh7110_stgclk_get(struct of_phandle_args *clkspec, void *data) 79 + { 80 + struct jh71x0_clk_priv *priv = data; 81 + unsigned int idx = clkspec->args[0]; 82 + 83 + if (idx < JH7110_STGCLK_END) 84 + return &priv->reg[idx].hw; 85 + 86 + return ERR_PTR(-EINVAL); 87 + } 88 + 89 + static int jh7110_stgcrg_probe(struct platform_device *pdev) 90 + { 91 + struct jh71x0_clk_priv *priv; 92 + unsigned int idx; 93 + int ret; 94 + 95 + priv = devm_kzalloc(&pdev->dev, struct_size(priv, reg, JH7110_STGCLK_END), 96 + GFP_KERNEL); 97 + if (!priv) 98 + return -ENOMEM; 99 + 100 + spin_lock_init(&priv->rmw_lock); 101 + priv->dev = &pdev->dev; 102 + priv->base = devm_platform_ioremap_resource(pdev, 0); 103 + if (IS_ERR(priv->base)) 104 + return PTR_ERR(priv->base); 105 + 106 + for (idx = 0; idx < JH7110_STGCLK_END; idx++) { 107 + u32 max = jh7110_stgclk_data[idx].max; 108 + struct clk_parent_data parents[4] = {}; 109 + struct clk_init_data init = { 110 + .name = jh7110_stgclk_data[idx].name, 111 + .ops = starfive_jh71x0_clk_ops(max), 112 + .parent_data = parents, 113 + .num_parents = 114 + ((max & JH71X0_CLK_MUX_MASK) >> JH71X0_CLK_MUX_SHIFT) + 1, 115 + .flags = jh7110_stgclk_data[idx].flags, 116 + }; 117 + struct jh71x0_clk *clk = &priv->reg[idx]; 118 + const char *fw_name[JH7110_STGCLK_EXT_END - JH7110_STGCLK_END] = { 119 + "osc", 120 + "hifi4_core", 121 + "stg_axiahb", 122 + "usb_125m", 123 + "cpu_bus", 124 + "hifi4_axi", 125 + "nocstg_bus", 126 + "apb_bus" 127 + }; 128 + unsigned int i; 129 + 130 + for (i = 0; i < init.num_parents; i++) { 131 + unsigned int pidx = jh7110_stgclk_data[idx].parents[i]; 132 + 133 + if (pidx < JH7110_STGCLK_END) 134 + parents[i].hw = &priv->reg[pidx].hw; 135 + else if (pidx < JH7110_STGCLK_EXT_END) 136 + parents[i].fw_name = fw_name[pidx - JH7110_STGCLK_END]; 137 + } 138 + 139 + clk->hw.init = &init; 140 + clk->idx = idx; 141 + clk->max_div = max & JH71X0_CLK_DIV_MASK; 142 + 143 + ret = devm_clk_hw_register(&pdev->dev, &clk->hw); 144 + if (ret) 145 + return ret; 146 + } 147 + 148 + ret = devm_of_clk_add_hw_provider(&pdev->dev, jh7110_stgclk_get, priv); 149 + if (ret) 150 + return ret; 151 + 152 + return jh7110_reset_controller_register(priv, "rst-stg", 2); 153 + } 154 + 155 + static const struct of_device_id jh7110_stgcrg_match[] = { 156 + { .compatible = "starfive,jh7110-stgcrg" }, 157 + { /* sentinel */ } 158 + }; 159 + MODULE_DEVICE_TABLE(of, jh7110_stgcrg_match); 160 + 161 + static struct platform_driver jh7110_stgcrg_driver = { 162 + .probe = jh7110_stgcrg_probe, 163 + .driver = { 164 + .name = "clk-starfive-jh7110-stg", 165 + .of_match_table = jh7110_stgcrg_match, 166 + }, 167 + }; 168 + module_platform_driver(jh7110_stgcrg_driver); 169 + 170 + MODULE_AUTHOR("Xingyu Wu <xingyu.wu@starfivetech.com>"); 171 + MODULE_AUTHOR("Emil Renner Berthing <kernel@esmil.dk>"); 172 + MODULE_DESCRIPTION("StarFive JH7110 System-Top-Group clock driver"); 173 + MODULE_LICENSE("GPL");
+42 -20
drivers/clk/starfive/clk-starfive-jh7110-sys.c
··· 7 7 */ 8 8 9 9 #include <linux/auxiliary_bus.h> 10 + #include <linux/clk.h> 10 11 #include <linux/clk-provider.h> 11 12 #include <linux/init.h> 12 13 #include <linux/io.h> ··· 390 389 struct jh71x0_clk_priv *priv; 391 390 unsigned int idx; 392 391 int ret; 392 + struct clk *pllclk; 393 393 394 394 priv = devm_kzalloc(&pdev->dev, 395 395 struct_size(priv, reg, JH7110_SYSCLK_END), ··· 404 402 if (IS_ERR(priv->base)) 405 403 return PTR_ERR(priv->base); 406 404 407 - /* 408 - * These PLL clocks are not actually fixed factor clocks and can be 409 - * controlled by the syscon registers of JH7110. They will be dropped 410 - * and registered in the PLL clock driver instead. 411 - */ 412 - /* 24MHz -> 1000.0MHz */ 413 - priv->pll[0] = devm_clk_hw_register_fixed_factor(priv->dev, "pll0_out", 414 - "osc", 0, 125, 3); 415 - if (IS_ERR(priv->pll[0])) 416 - return PTR_ERR(priv->pll[0]); 405 + /* Use fixed factor clocks if can not get the PLL clocks from DTS */ 406 + pllclk = clk_get(priv->dev, "pll0_out"); 407 + if (IS_ERR(pllclk)) { 408 + /* 24MHz -> 1000.0MHz */ 409 + priv->pll[0] = devm_clk_hw_register_fixed_factor(priv->dev, "pll0_out", 410 + "osc", 0, 125, 3); 411 + if (IS_ERR(priv->pll[0])) 412 + return PTR_ERR(priv->pll[0]); 413 + } else { 414 + clk_put(pllclk); 415 + priv->pll[0] = NULL; 416 + } 417 417 418 - /* 24MHz -> 1066.0MHz */ 419 - priv->pll[1] = devm_clk_hw_register_fixed_factor(priv->dev, "pll1_out", 420 - "osc", 0, 533, 12); 421 - if (IS_ERR(priv->pll[1])) 422 - return PTR_ERR(priv->pll[1]); 418 + pllclk = clk_get(priv->dev, "pll1_out"); 419 + if (IS_ERR(pllclk)) { 420 + /* 24MHz -> 1066.0MHz */ 421 + priv->pll[1] = devm_clk_hw_register_fixed_factor(priv->dev, "pll1_out", 422 + "osc", 0, 533, 12); 423 + if (IS_ERR(priv->pll[1])) 424 + return PTR_ERR(priv->pll[1]); 425 + } else { 426 + clk_put(pllclk); 427 + priv->pll[1] = NULL; 428 + } 423 429 424 - /* 24MHz -> 1188.0MHz */ 425 - priv->pll[2] = devm_clk_hw_register_fixed_factor(priv->dev, "pll2_out", 426 - "osc", 0, 99, 2); 427 - if (IS_ERR(priv->pll[2])) 428 - return PTR_ERR(priv->pll[2]); 430 + pllclk = clk_get(priv->dev, "pll2_out"); 431 + if (IS_ERR(pllclk)) { 432 + /* 24MHz -> 1188.0MHz */ 433 + priv->pll[2] = devm_clk_hw_register_fixed_factor(priv->dev, "pll2_out", 434 + "osc", 0, 99, 2); 435 + if (IS_ERR(priv->pll[2])) 436 + return PTR_ERR(priv->pll[2]); 437 + } else { 438 + clk_put(pllclk); 439 + priv->pll[2] = NULL; 440 + } 429 441 430 442 for (idx = 0; idx < JH7110_SYSCLK_END; idx++) { 431 443 u32 max = jh7110_sysclk_data[idx].max; ··· 478 462 parents[i].fw_name = "tdm_ext"; 479 463 else if (pidx == JH7110_SYSCLK_MCLK_EXT) 480 464 parents[i].fw_name = "mclk_ext"; 465 + else if (pidx == JH7110_SYSCLK_PLL0_OUT && !priv->pll[0]) 466 + parents[i].fw_name = "pll0_out"; 467 + else if (pidx == JH7110_SYSCLK_PLL1_OUT && !priv->pll[1]) 468 + parents[i].fw_name = "pll1_out"; 469 + else if (pidx == JH7110_SYSCLK_PLL2_OUT && !priv->pll[2]) 470 + parents[i].fw_name = "pll2_out"; 481 471 else 482 472 parents[i].hw = priv->pll[pidx - JH7110_SYSCLK_PLL0_OUT]; 483 473 }
+239
drivers/clk/starfive/clk-starfive-jh7110-vout.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * StarFive JH7110 Video-Output Clock Driver 4 + * 5 + * Copyright (C) 2022-2023 StarFive Technology Co., Ltd. 6 + */ 7 + 8 + #include <linux/clk.h> 9 + #include <linux/clk-provider.h> 10 + #include <linux/io.h> 11 + #include <linux/platform_device.h> 12 + #include <linux/pm_runtime.h> 13 + #include <linux/reset.h> 14 + 15 + #include <dt-bindings/clock/starfive,jh7110-crg.h> 16 + 17 + #include "clk-starfive-jh7110.h" 18 + 19 + /* external clocks */ 20 + #define JH7110_VOUTCLK_VOUT_SRC (JH7110_VOUTCLK_END + 0) 21 + #define JH7110_VOUTCLK_VOUT_TOP_AHB (JH7110_VOUTCLK_END + 1) 22 + #define JH7110_VOUTCLK_VOUT_TOP_AXI (JH7110_VOUTCLK_END + 2) 23 + #define JH7110_VOUTCLK_VOUT_TOP_HDMITX0_MCLK (JH7110_VOUTCLK_END + 3) 24 + #define JH7110_VOUTCLK_I2STX0_BCLK (JH7110_VOUTCLK_END + 4) 25 + #define JH7110_VOUTCLK_HDMITX0_PIXELCLK (JH7110_VOUTCLK_END + 5) 26 + #define JH7110_VOUTCLK_EXT_END (JH7110_VOUTCLK_END + 6) 27 + 28 + static struct clk_bulk_data jh7110_vout_top_clks[] = { 29 + { .id = "vout_src" }, 30 + { .id = "vout_top_ahb" } 31 + }; 32 + 33 + static const struct jh71x0_clk_data jh7110_voutclk_data[] = { 34 + /* divider */ 35 + JH71X0__DIV(JH7110_VOUTCLK_APB, "apb", 8, JH7110_VOUTCLK_VOUT_TOP_AHB), 36 + JH71X0__DIV(JH7110_VOUTCLK_DC8200_PIX, "dc8200_pix", 63, JH7110_VOUTCLK_VOUT_SRC), 37 + JH71X0__DIV(JH7110_VOUTCLK_DSI_SYS, "dsi_sys", 31, JH7110_VOUTCLK_VOUT_SRC), 38 + JH71X0__DIV(JH7110_VOUTCLK_TX_ESC, "tx_esc", 31, JH7110_VOUTCLK_VOUT_TOP_AHB), 39 + /* dc8200 */ 40 + JH71X0_GATE(JH7110_VOUTCLK_DC8200_AXI, "dc8200_axi", 0, JH7110_VOUTCLK_VOUT_TOP_AXI), 41 + JH71X0_GATE(JH7110_VOUTCLK_DC8200_CORE, "dc8200_core", 0, JH7110_VOUTCLK_VOUT_TOP_AXI), 42 + JH71X0_GATE(JH7110_VOUTCLK_DC8200_AHB, "dc8200_ahb", 0, JH7110_VOUTCLK_VOUT_TOP_AHB), 43 + JH71X0_GMUX(JH7110_VOUTCLK_DC8200_PIX0, "dc8200_pix0", 0, 2, 44 + JH7110_VOUTCLK_DC8200_PIX, 45 + JH7110_VOUTCLK_HDMITX0_PIXELCLK), 46 + JH71X0_GMUX(JH7110_VOUTCLK_DC8200_PIX1, "dc8200_pix1", 0, 2, 47 + JH7110_VOUTCLK_DC8200_PIX, 48 + JH7110_VOUTCLK_HDMITX0_PIXELCLK), 49 + /* LCD */ 50 + JH71X0_GMUX(JH7110_VOUTCLK_DOM_VOUT_TOP_LCD, "dom_vout_top_lcd", 0, 2, 51 + JH7110_VOUTCLK_DC8200_PIX0, 52 + JH7110_VOUTCLK_DC8200_PIX1), 53 + /* dsiTx */ 54 + JH71X0_GATE(JH7110_VOUTCLK_DSITX_APB, "dsiTx_apb", 0, JH7110_VOUTCLK_DSI_SYS), 55 + JH71X0_GATE(JH7110_VOUTCLK_DSITX_SYS, "dsiTx_sys", 0, JH7110_VOUTCLK_DSI_SYS), 56 + JH71X0_GMUX(JH7110_VOUTCLK_DSITX_DPI, "dsiTx_dpi", 0, 2, 57 + JH7110_VOUTCLK_DC8200_PIX, 58 + JH7110_VOUTCLK_HDMITX0_PIXELCLK), 59 + JH71X0_GATE(JH7110_VOUTCLK_DSITX_TXESC, "dsiTx_txesc", 0, JH7110_VOUTCLK_TX_ESC), 60 + /* mipitx DPHY */ 61 + JH71X0_GATE(JH7110_VOUTCLK_MIPITX_DPHY_TXESC, "mipitx_dphy_txesc", 0, 62 + JH7110_VOUTCLK_TX_ESC), 63 + /* hdmi */ 64 + JH71X0_GATE(JH7110_VOUTCLK_HDMI_TX_MCLK, "hdmi_tx_mclk", 0, 65 + JH7110_VOUTCLK_VOUT_TOP_HDMITX0_MCLK), 66 + JH71X0_GATE(JH7110_VOUTCLK_HDMI_TX_BCLK, "hdmi_tx_bclk", 0, 67 + JH7110_VOUTCLK_I2STX0_BCLK), 68 + JH71X0_GATE(JH7110_VOUTCLK_HDMI_TX_SYS, "hdmi_tx_sys", 0, JH7110_VOUTCLK_APB), 69 + }; 70 + 71 + static int jh7110_vout_top_rst_init(struct jh71x0_clk_priv *priv) 72 + { 73 + struct reset_control *top_rst; 74 + 75 + /* The reset should be shared and other Vout modules will use its. */ 76 + top_rst = devm_reset_control_get_shared(priv->dev, NULL); 77 + if (IS_ERR(top_rst)) 78 + return dev_err_probe(priv->dev, PTR_ERR(top_rst), "failed to get top reset\n"); 79 + 80 + return reset_control_deassert(top_rst); 81 + } 82 + 83 + static struct clk_hw *jh7110_voutclk_get(struct of_phandle_args *clkspec, void *data) 84 + { 85 + struct jh71x0_clk_priv *priv = data; 86 + unsigned int idx = clkspec->args[0]; 87 + 88 + if (idx < JH7110_VOUTCLK_END) 89 + return &priv->reg[idx].hw; 90 + 91 + return ERR_PTR(-EINVAL); 92 + } 93 + 94 + #ifdef CONFIG_PM 95 + static int jh7110_voutcrg_suspend(struct device *dev) 96 + { 97 + struct jh7110_top_sysclk *top = dev_get_drvdata(dev); 98 + 99 + clk_bulk_disable_unprepare(top->top_clks_num, top->top_clks); 100 + 101 + return 0; 102 + } 103 + 104 + static int jh7110_voutcrg_resume(struct device *dev) 105 + { 106 + struct jh7110_top_sysclk *top = dev_get_drvdata(dev); 107 + 108 + return clk_bulk_prepare_enable(top->top_clks_num, top->top_clks); 109 + } 110 + 111 + static const struct dev_pm_ops jh7110_voutcrg_pm_ops = { 112 + RUNTIME_PM_OPS(jh7110_voutcrg_suspend, jh7110_voutcrg_resume, NULL) 113 + }; 114 + #endif 115 + 116 + static int jh7110_voutcrg_probe(struct platform_device *pdev) 117 + { 118 + struct jh71x0_clk_priv *priv; 119 + struct jh7110_top_sysclk *top; 120 + unsigned int idx; 121 + int ret; 122 + 123 + priv = devm_kzalloc(&pdev->dev, 124 + struct_size(priv, reg, JH7110_VOUTCLK_END), 125 + GFP_KERNEL); 126 + if (!priv) 127 + return -ENOMEM; 128 + 129 + top = devm_kzalloc(&pdev->dev, sizeof(*top), GFP_KERNEL); 130 + if (!top) 131 + return -ENOMEM; 132 + 133 + spin_lock_init(&priv->rmw_lock); 134 + priv->dev = &pdev->dev; 135 + priv->base = devm_platform_ioremap_resource(pdev, 0); 136 + if (IS_ERR(priv->base)) 137 + return PTR_ERR(priv->base); 138 + 139 + top->top_clks = jh7110_vout_top_clks; 140 + top->top_clks_num = ARRAY_SIZE(jh7110_vout_top_clks); 141 + ret = devm_clk_bulk_get(priv->dev, top->top_clks_num, top->top_clks); 142 + if (ret) 143 + return dev_err_probe(priv->dev, ret, "failed to get top clocks\n"); 144 + dev_set_drvdata(priv->dev, top); 145 + 146 + /* enable power domain and clocks */ 147 + pm_runtime_enable(priv->dev); 148 + ret = pm_runtime_get_sync(priv->dev); 149 + if (ret < 0) 150 + return dev_err_probe(priv->dev, ret, "failed to turn on power\n"); 151 + 152 + ret = jh7110_vout_top_rst_init(priv); 153 + if (ret) 154 + goto err_exit; 155 + 156 + for (idx = 0; idx < JH7110_VOUTCLK_END; idx++) { 157 + u32 max = jh7110_voutclk_data[idx].max; 158 + struct clk_parent_data parents[4] = {}; 159 + struct clk_init_data init = { 160 + .name = jh7110_voutclk_data[idx].name, 161 + .ops = starfive_jh71x0_clk_ops(max), 162 + .parent_data = parents, 163 + .num_parents = 164 + ((max & JH71X0_CLK_MUX_MASK) >> JH71X0_CLK_MUX_SHIFT) + 1, 165 + .flags = jh7110_voutclk_data[idx].flags, 166 + }; 167 + struct jh71x0_clk *clk = &priv->reg[idx]; 168 + unsigned int i; 169 + const char *fw_name[JH7110_VOUTCLK_EXT_END - JH7110_VOUTCLK_END] = { 170 + "vout_src", 171 + "vout_top_ahb", 172 + "vout_top_axi", 173 + "vout_top_hdmitx0_mclk", 174 + "i2stx0_bclk", 175 + "hdmitx0_pixelclk" 176 + }; 177 + 178 + for (i = 0; i < init.num_parents; i++) { 179 + unsigned int pidx = jh7110_voutclk_data[idx].parents[i]; 180 + 181 + if (pidx < JH7110_VOUTCLK_END) 182 + parents[i].hw = &priv->reg[pidx].hw; 183 + else if (pidx < JH7110_VOUTCLK_EXT_END) 184 + parents[i].fw_name = fw_name[pidx - JH7110_VOUTCLK_END]; 185 + } 186 + 187 + clk->hw.init = &init; 188 + clk->idx = idx; 189 + clk->max_div = max & JH71X0_CLK_DIV_MASK; 190 + 191 + ret = devm_clk_hw_register(&pdev->dev, &clk->hw); 192 + if (ret) 193 + goto err_exit; 194 + } 195 + 196 + ret = devm_of_clk_add_hw_provider(&pdev->dev, jh7110_voutclk_get, priv); 197 + if (ret) 198 + goto err_exit; 199 + 200 + ret = jh7110_reset_controller_register(priv, "rst-vo", 4); 201 + if (ret) 202 + goto err_exit; 203 + 204 + return 0; 205 + 206 + err_exit: 207 + pm_runtime_put_sync(priv->dev); 208 + pm_runtime_disable(priv->dev); 209 + return ret; 210 + } 211 + 212 + static int jh7110_voutcrg_remove(struct platform_device *pdev) 213 + { 214 + pm_runtime_put_sync(&pdev->dev); 215 + pm_runtime_disable(&pdev->dev); 216 + 217 + return 0; 218 + } 219 + 220 + static const struct of_device_id jh7110_voutcrg_match[] = { 221 + { .compatible = "starfive,jh7110-voutcrg" }, 222 + { /* sentinel */ } 223 + }; 224 + MODULE_DEVICE_TABLE(of, jh7110_voutcrg_match); 225 + 226 + static struct platform_driver jh7110_voutcrg_driver = { 227 + .probe = jh7110_voutcrg_probe, 228 + .remove = jh7110_voutcrg_remove, 229 + .driver = { 230 + .name = "clk-starfive-jh7110-vout", 231 + .of_match_table = jh7110_voutcrg_match, 232 + .pm = pm_ptr(&jh7110_voutcrg_pm_ops), 233 + }, 234 + }; 235 + module_platform_driver(jh7110_voutcrg_driver); 236 + 237 + MODULE_AUTHOR("Xingyu Wu <xingyu.wu@starfivetech.com>"); 238 + MODULE_DESCRIPTION("StarFive JH7110 Video-Output clock driver"); 239 + MODULE_LICENSE("GPL");
+6
drivers/clk/starfive/clk-starfive-jh7110.h
··· 4 4 5 5 #include "clk-starfive-jh71x0.h" 6 6 7 + /* top clocks of ISP/VOUT domain from JH7110 SYSCRG */ 8 + struct jh7110_top_sysclk { 9 + struct clk_bulk_data *top_clks; 10 + int top_clks_num; 11 + }; 12 + 7 13 int jh7110_reset_controller_register(struct jh71x0_clk_priv *priv, 8 14 const char *adev_name, 9 15 u32 adev_id);
+2 -8
drivers/clk/starfive/clk-starfive-jh71x0.c
··· 174 174 return 0; 175 175 } 176 176 177 - static int jh71x0_clk_mux_determine_rate(struct clk_hw *hw, 178 - struct clk_rate_request *req) 179 - { 180 - return clk_mux_determine_rate_flags(hw, req, 0); 181 - } 182 - 183 177 static int jh71x0_clk_get_phase(struct clk_hw *hw) 184 178 { 185 179 struct jh71x0_clk *clk = jh71x0_clk_from(hw); ··· 255 261 }; 256 262 257 263 static const struct clk_ops jh71x0_clk_mux_ops = { 258 - .determine_rate = jh71x0_clk_mux_determine_rate, 264 + .determine_rate = __clk_mux_determine_rate, 259 265 .set_parent = jh71x0_clk_set_parent, 260 266 .get_parent = jh71x0_clk_get_parent, 261 267 .debug_init = jh71x0_clk_debug_init, ··· 265 271 .enable = jh71x0_clk_enable, 266 272 .disable = jh71x0_clk_disable, 267 273 .is_enabled = jh71x0_clk_is_enabled, 268 - .determine_rate = jh71x0_clk_mux_determine_rate, 274 + .determine_rate = __clk_mux_determine_rate, 269 275 .set_parent = jh71x0_clk_set_parent, 270 276 .get_parent = jh71x0_clk_get_parent, 271 277 .debug_init = jh71x0_clk_debug_init,
+1 -1
drivers/clk/sunxi-ng/ccu-sun4i-a10.c
··· 8 8 #include <linux/clk-provider.h> 9 9 #include <linux/io.h> 10 10 #include <linux/module.h> 11 - #include <linux/of_device.h> 11 + #include <linux/of.h> 12 12 #include <linux/platform_device.h> 13 13 14 14 #include "ccu_common.h"
+18 -23
drivers/clk/sunxi-ng/ccu-sun50i-a64.c
··· 68 68 BIT(28), /* lock */ 69 69 CLK_SET_RATE_UNGATE); 70 70 71 - static SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK_MIN_MAX(pll_video0_clk, "pll-video0", 71 + static SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK_MIN_MAX_CLOSEST(pll_video0_clk, "pll-video0", 72 72 "osc24M", 0x010, 73 73 192000000, /* Minimum rate */ 74 74 1008000000, /* Maximum rate */ ··· 179 179 .common = { 180 180 .reg = 0x040, 181 181 .hw.init = CLK_HW_INIT("pll-mipi", "pll-video0", 182 - &ccu_nkm_ops, CLK_SET_RATE_UNGATE), 182 + &ccu_nkm_ops, 183 + CLK_SET_RATE_UNGATE | CLK_SET_RATE_PARENT), 184 + .features = CCU_FEATURE_CLOSEST_RATE, 183 185 }, 184 186 }; 185 187 ··· 538 536 539 537 static const char * const tcon0_parents[] = { "pll-mipi", "pll-video0-2x" }; 540 538 static const u8 tcon0_table[] = { 0, 2, }; 541 - static SUNXI_CCU_MUX_TABLE_WITH_GATE(tcon0_clk, "tcon0", tcon0_parents, 542 - tcon0_table, 0x118, 24, 3, BIT(31), 543 - CLK_SET_RATE_PARENT | 544 - CLK_SET_RATE_NO_REPARENT); 539 + static SUNXI_CCU_MUX_TABLE_WITH_GATE_CLOSEST(tcon0_clk, "tcon0", tcon0_parents, 540 + tcon0_table, 0x118, 24, 3, BIT(31), 541 + CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT); 545 542 546 543 static const char * const tcon1_parents[] = { "pll-video0", "pll-video1" }; 547 544 static const u8 tcon1_table[] = { 0, 2, }; 548 - static struct ccu_div tcon1_clk = { 549 - .enable = BIT(31), 550 - .div = _SUNXI_CCU_DIV(0, 4), 551 - .mux = _SUNXI_CCU_MUX_TABLE(24, 2, tcon1_table), 552 - .common = { 553 - .reg = 0x11c, 554 - .hw.init = CLK_HW_INIT_PARENTS("tcon1", 555 - tcon1_parents, 556 - &ccu_div_ops, 557 - CLK_SET_RATE_PARENT), 558 - }, 559 - }; 545 + static SUNXI_CCU_M_WITH_MUX_TABLE_GATE_CLOSEST(tcon1_clk, "tcon1", tcon1_parents, 546 + tcon1_table, 0x11c, 547 + 0, 4, /* M */ 548 + 24, 2, /* mux */ 549 + BIT(31), /* gate */ 550 + CLK_SET_RATE_PARENT); 560 551 561 552 static const char * const deinterlace_parents[] = { "pll-periph0", "pll-periph1" }; 562 553 static SUNXI_CCU_M_WITH_MUX_GATE(deinterlace_clk, "deinterlace", deinterlace_parents, ··· 579 584 0x144, BIT(31), 0); 580 585 581 586 static const char * const hdmi_parents[] = { "pll-video0", "pll-video1" }; 582 - static SUNXI_CCU_M_WITH_MUX_GATE(hdmi_clk, "hdmi", hdmi_parents, 583 - 0x150, 0, 4, 24, 2, BIT(31), CLK_SET_RATE_PARENT); 587 + static SUNXI_CCU_M_WITH_MUX_GATE_CLOSEST(hdmi_clk, "hdmi", hdmi_parents, 588 + 0x150, 0, 4, 24, 2, BIT(31), CLK_SET_RATE_PARENT); 584 589 585 590 static SUNXI_CCU_GATE(hdmi_ddc_clk, "hdmi-ddc", "osc24M", 586 591 0x154, BIT(31), 0); ··· 592 597 593 598 static const char * const dsi_dphy_parents[] = { "pll-video0", "pll-periph0" }; 594 599 static const u8 dsi_dphy_table[] = { 0, 2, }; 595 - static SUNXI_CCU_M_WITH_MUX_TABLE_GATE(dsi_dphy_clk, "dsi-dphy", 596 - dsi_dphy_parents, dsi_dphy_table, 597 - 0x168, 0, 4, 8, 2, BIT(15), CLK_SET_RATE_PARENT); 600 + static SUNXI_CCU_M_WITH_MUX_TABLE_GATE_CLOSEST(dsi_dphy_clk, "dsi-dphy", 601 + dsi_dphy_parents, dsi_dphy_table, 602 + 0x168, 0, 4, 8, 2, BIT(15), CLK_SET_RATE_PARENT); 598 603 599 604 static SUNXI_CCU_M_WITH_GATE(gpu_clk, "gpu", "pll-gpu", 600 605 0x1a0, 0, 3, BIT(31), CLK_SET_RATE_PARENT);
+1 -1
drivers/clk/sunxi-ng/ccu-sun50i-h6-r.c
··· 5 5 6 6 #include <linux/clk-provider.h> 7 7 #include <linux/module.h> 8 - #include <linux/of_device.h> 8 + #include <linux/of.h> 9 9 #include <linux/platform_device.h> 10 10 11 11 #include "ccu_common.h"
+2
drivers/clk/sunxi-ng/ccu-sun6i-rtc.c
··· 5 5 6 6 #include <linux/clk.h> 7 7 #include <linux/clk-provider.h> 8 + #include <linux/device.h> 8 9 #include <linux/io.h> 9 10 #include <linux/module.h> 11 + #include <linux/of.h> 10 12 #include <linux/of_device.h> 11 13 12 14 #include <linux/clk/sunxi-ng.h>
+1 -1
drivers/clk/sunxi-ng/ccu-sun8i-de2.c
··· 6 6 #include <linux/clk.h> 7 7 #include <linux/clk-provider.h> 8 8 #include <linux/module.h> 9 - #include <linux/of_device.h> 9 + #include <linux/of.h> 10 10 #include <linux/platform_device.h> 11 11 #include <linux/reset.h> 12 12
+1 -1
drivers/clk/sunxi-ng/ccu-sun8i-h3.c
··· 6 6 #include <linux/clk-provider.h> 7 7 #include <linux/io.h> 8 8 #include <linux/module.h> 9 - #include <linux/of_device.h> 9 + #include <linux/of.h> 10 10 #include <linux/platform_device.h> 11 11 12 12 #include "ccu_common.h"
+1 -1
drivers/clk/sunxi-ng/ccu-sun8i-r.c
··· 5 5 6 6 #include <linux/clk-provider.h> 7 7 #include <linux/module.h> 8 - #include <linux/of_device.h> 8 + #include <linux/of.h> 9 9 #include <linux/platform_device.h> 10 10 11 11 #include "ccu_common.h"
+1 -1
drivers/clk/sunxi-ng/ccu-sun8i-v3s.c
··· 9 9 #include <linux/clk-provider.h> 10 10 #include <linux/io.h> 11 11 #include <linux/module.h> 12 - #include <linux/of_device.h> 12 + #include <linux/of.h> 13 13 #include <linux/platform_device.h> 14 14 15 15 #include "ccu_common.h"
+12
drivers/clk/sunxi-ng/ccu_common.c
··· 39 39 } 40 40 EXPORT_SYMBOL_NS_GPL(ccu_helper_wait_for_lock, SUNXI_CCU); 41 41 42 + bool ccu_is_better_rate(struct ccu_common *common, 43 + unsigned long target_rate, 44 + unsigned long current_rate, 45 + unsigned long best_rate) 46 + { 47 + if (common->features & CCU_FEATURE_CLOSEST_RATE) 48 + return abs(current_rate - target_rate) < abs(best_rate - target_rate); 49 + 50 + return current_rate <= target_rate && current_rate > best_rate; 51 + } 52 + EXPORT_SYMBOL_NS_GPL(ccu_is_better_rate, SUNXI_CCU); 53 + 42 54 /* 43 55 * This clock notifier is called when the frequency of a PLL clock is 44 56 * changed. In common PLL designs, changes to the dividers take effect
+6
drivers/clk/sunxi-ng/ccu_common.h
··· 18 18 #define CCU_FEATURE_MMC_TIMING_SWITCH BIT(6) 19 19 #define CCU_FEATURE_SIGMA_DELTA_MOD BIT(7) 20 20 #define CCU_FEATURE_KEY_FIELD BIT(8) 21 + #define CCU_FEATURE_CLOSEST_RATE BIT(9) 21 22 22 23 /* MMC timing mode switch bit */ 23 24 #define CCU_MMC_NEW_TIMING_MODE BIT(30) ··· 52 51 }; 53 52 54 53 void ccu_helper_wait_for_lock(struct ccu_common *common, u32 lock); 54 + 55 + bool ccu_is_better_rate(struct ccu_common *common, 56 + unsigned long target_rate, 57 + unsigned long current_rate, 58 + unsigned long best_rate); 55 59 56 60 struct ccu_pll_nb { 57 61 struct notifier_block clk_nb;
+30
drivers/clk/sunxi-ng/ccu_div.h
··· 143 143 }, \ 144 144 } 145 145 146 + #define SUNXI_CCU_M_WITH_MUX_TABLE_GATE_CLOSEST(_struct, _name, \ 147 + _parents, _table, \ 148 + _reg, \ 149 + _mshift, _mwidth, \ 150 + _muxshift, _muxwidth, \ 151 + _gate, _flags) \ 152 + struct ccu_div _struct = { \ 153 + .enable = _gate, \ 154 + .div = _SUNXI_CCU_DIV_FLAGS(_mshift, _mwidth, CLK_DIVIDER_ROUND_CLOSEST), \ 155 + .mux = _SUNXI_CCU_MUX_TABLE(_muxshift, _muxwidth, _table), \ 156 + .common = { \ 157 + .reg = _reg, \ 158 + .hw.init = CLK_HW_INIT_PARENTS(_name, \ 159 + _parents, \ 160 + &ccu_div_ops, \ 161 + _flags), \ 162 + .features = CCU_FEATURE_CLOSEST_RATE, \ 163 + }, \ 164 + } 165 + 146 166 #define SUNXI_CCU_M_WITH_MUX_GATE(_struct, _name, _parents, _reg, \ 147 167 _mshift, _mwidth, _muxshift, _muxwidth, \ 148 168 _gate, _flags) \ ··· 171 151 _reg, _mshift, _mwidth, \ 172 152 _muxshift, _muxwidth, \ 173 153 _gate, _flags) 154 + 155 + #define SUNXI_CCU_M_WITH_MUX_GATE_CLOSEST(_struct, _name, _parents, \ 156 + _reg, _mshift, _mwidth, \ 157 + _muxshift, _muxwidth, \ 158 + _gate, _flags) \ 159 + SUNXI_CCU_M_WITH_MUX_TABLE_GATE_CLOSEST(_struct, _name, \ 160 + _parents, NULL, \ 161 + _reg, _mshift, _mwidth, \ 162 + _muxshift, _muxwidth, \ 163 + _gate, _flags) 174 164 175 165 #define SUNXI_CCU_M_WITH_MUX(_struct, _name, _parents, _reg, \ 176 166 _mshift, _mwidth, _muxshift, _muxwidth, \
+1 -1
drivers/clk/sunxi-ng/ccu_mmc_timing.c
··· 43 43 EXPORT_SYMBOL_GPL(sunxi_ccu_set_mmc_timing_mode); 44 44 45 45 /** 46 - * sunxi_ccu_set_mmc_timing_mode: Get the current MMC clock timing mode 46 + * sunxi_ccu_get_mmc_timing_mode: Get the current MMC clock timing mode 47 47 * @clk: clock to query 48 48 * 49 49 * Return: %0 if the clock is in old timing mode, > %0 if it is in
+13 -2
drivers/clk/sunxi-ng/ccu_mux.c
··· 139 139 goto out; 140 140 } 141 141 142 - if ((req->rate - tmp_rate) < (req->rate - best_rate)) { 142 + if (ccu_is_better_rate(common, req->rate, tmp_rate, best_rate)) { 143 143 best_rate = tmp_rate; 144 144 best_parent_rate = parent_rate; 145 145 best_parent = parent; ··· 242 242 return ccu_mux_helper_set_parent(&cm->common, &cm->mux, index); 243 243 } 244 244 245 + static int ccu_mux_determine_rate(struct clk_hw *hw, 246 + struct clk_rate_request *req) 247 + { 248 + struct ccu_mux *cm = hw_to_ccu_mux(hw); 249 + 250 + if (cm->common.features & CCU_FEATURE_CLOSEST_RATE) 251 + return clk_mux_determine_rate_flags(hw, req, CLK_MUX_ROUND_CLOSEST); 252 + 253 + return clk_mux_determine_rate_flags(hw, req, 0); 254 + } 255 + 245 256 static unsigned long ccu_mux_recalc_rate(struct clk_hw *hw, 246 257 unsigned long parent_rate) 247 258 { ··· 270 259 .get_parent = ccu_mux_get_parent, 271 260 .set_parent = ccu_mux_set_parent, 272 261 273 - .determine_rate = __clk_mux_determine_rate, 262 + .determine_rate = ccu_mux_determine_rate, 274 263 .recalc_rate = ccu_mux_recalc_rate, 275 264 }; 276 265 EXPORT_SYMBOL_NS_GPL(ccu_mux_ops, SUNXI_CCU);
+27 -11
drivers/clk/sunxi-ng/ccu_mux.h
··· 46 46 struct ccu_common common; 47 47 }; 48 48 49 + #define SUNXI_CCU_MUX_TABLE_WITH_GATE_FEAT(_struct, _name, _parents, _table, \ 50 + _reg, _shift, _width, _gate, \ 51 + _flags, _features) \ 52 + struct ccu_mux _struct = { \ 53 + .enable = _gate, \ 54 + .mux = _SUNXI_CCU_MUX_TABLE(_shift, _width, _table), \ 55 + .common = { \ 56 + .reg = _reg, \ 57 + .hw.init = CLK_HW_INIT_PARENTS(_name, \ 58 + _parents, \ 59 + &ccu_mux_ops, \ 60 + _flags), \ 61 + .features = _features, \ 62 + } \ 63 + } 64 + 65 + #define SUNXI_CCU_MUX_TABLE_WITH_GATE_CLOSEST(_struct, _name, _parents, \ 66 + _table, _reg, _shift, \ 67 + _width, _gate, _flags) \ 68 + SUNXI_CCU_MUX_TABLE_WITH_GATE_FEAT(_struct, _name, _parents, \ 69 + _table, _reg, _shift, \ 70 + _width, _gate, _flags, \ 71 + CCU_FEATURE_CLOSEST_RATE) 72 + 49 73 #define SUNXI_CCU_MUX_TABLE_WITH_GATE(_struct, _name, _parents, _table, \ 50 74 _reg, _shift, _width, _gate, \ 51 75 _flags) \ 52 - struct ccu_mux _struct = { \ 53 - .enable = _gate, \ 54 - .mux = _SUNXI_CCU_MUX_TABLE(_shift, _width, _table), \ 55 - .common = { \ 56 - .reg = _reg, \ 57 - .hw.init = CLK_HW_INIT_PARENTS(_name, \ 58 - _parents, \ 59 - &ccu_mux_ops, \ 60 - _flags), \ 61 - } \ 62 - } 76 + SUNXI_CCU_MUX_TABLE_WITH_GATE_FEAT(_struct, _name, _parents, \ 77 + _table, _reg, _shift, \ 78 + _width, _gate, _flags, 0) 63 79 64 80 #define SUNXI_CCU_MUX_WITH_GATE(_struct, _name, _parents, _reg, \ 65 81 _shift, _width, _gate, _flags) \
+48 -7
drivers/clk/sunxi-ng/ccu_nkm.c
··· 16 16 unsigned long m, min_m, max_m; 17 17 }; 18 18 19 + static unsigned long ccu_nkm_find_best_with_parent_adj(struct ccu_common *common, 20 + struct clk_hw *parent_hw, 21 + unsigned long *parent, unsigned long rate, 22 + struct _ccu_nkm *nkm) 23 + { 24 + unsigned long best_rate = 0, best_parent_rate = *parent, tmp_parent = *parent; 25 + unsigned long best_n = 0, best_k = 0, best_m = 0; 26 + unsigned long _n, _k, _m; 27 + 28 + for (_k = nkm->min_k; _k <= nkm->max_k; _k++) { 29 + for (_n = nkm->min_n; _n <= nkm->max_n; _n++) { 30 + for (_m = nkm->min_m; _m <= nkm->max_m; _m++) { 31 + unsigned long tmp_rate; 32 + 33 + tmp_parent = clk_hw_round_rate(parent_hw, rate * _m / (_n * _k)); 34 + 35 + tmp_rate = tmp_parent * _n * _k / _m; 36 + 37 + if (ccu_is_better_rate(common, rate, tmp_rate, best_rate) || 38 + (tmp_parent == *parent && tmp_rate == best_rate)) { 39 + best_rate = tmp_rate; 40 + best_parent_rate = tmp_parent; 41 + best_n = _n; 42 + best_k = _k; 43 + best_m = _m; 44 + } 45 + } 46 + } 47 + } 48 + 49 + nkm->n = best_n; 50 + nkm->k = best_k; 51 + nkm->m = best_m; 52 + 53 + *parent = best_parent_rate; 54 + 55 + return best_rate; 56 + } 57 + 19 58 static unsigned long ccu_nkm_find_best(unsigned long parent, unsigned long rate, 20 - struct _ccu_nkm *nkm) 59 + struct _ccu_nkm *nkm, struct ccu_common *common) 21 60 { 22 61 unsigned long best_rate = 0; 23 62 unsigned long best_n = 0, best_k = 0, best_m = 0; ··· 69 30 70 31 tmp_rate = parent * _n * _k / _m; 71 32 72 - if (tmp_rate > rate) 73 - continue; 74 - if ((rate - tmp_rate) < (rate - best_rate)) { 33 + if (ccu_is_better_rate(common, rate, tmp_rate, best_rate)) { 75 34 best_rate = tmp_rate; 76 35 best_n = _n; 77 36 best_k = _k; ··· 143 106 } 144 107 145 108 static unsigned long ccu_nkm_round_rate(struct ccu_mux_internal *mux, 146 - struct clk_hw *hw, 109 + struct clk_hw *parent_hw, 147 110 unsigned long *parent_rate, 148 111 unsigned long rate, 149 112 void *data) ··· 161 124 if (nkm->common.features & CCU_FEATURE_FIXED_POSTDIV) 162 125 rate *= nkm->fixed_post_div; 163 126 164 - rate = ccu_nkm_find_best(*parent_rate, rate, &_nkm); 127 + if (!clk_hw_can_set_rate_parent(&nkm->common.hw)) 128 + rate = ccu_nkm_find_best(*parent_rate, rate, &_nkm, &nkm->common); 129 + else 130 + rate = ccu_nkm_find_best_with_parent_adj(&nkm->common, parent_hw, parent_rate, rate, 131 + &_nkm); 165 132 166 133 if (nkm->common.features & CCU_FEATURE_FIXED_POSTDIV) 167 134 rate /= nkm->fixed_post_div; ··· 200 159 _nkm.min_m = 1; 201 160 _nkm.max_m = nkm->m.max ?: 1 << nkm->m.width; 202 161 203 - ccu_nkm_find_best(parent_rate, rate, &_nkm); 162 + ccu_nkm_find_best(parent_rate, rate, &_nkm, &nkm->common); 204 163 205 164 spin_lock_irqsave(nkm->common.lock, flags); 206 165
+5 -8
drivers/clk/sunxi-ng/ccu_nm.c
··· 27 27 return rate; 28 28 } 29 29 30 - static unsigned long ccu_nm_find_best(unsigned long parent, unsigned long rate, 31 - struct _ccu_nm *nm) 30 + static unsigned long ccu_nm_find_best(struct ccu_common *common, unsigned long parent, 31 + unsigned long rate, struct _ccu_nm *nm) 32 32 { 33 33 unsigned long best_rate = 0; 34 34 unsigned long best_n = 0, best_m = 0; ··· 39 39 unsigned long tmp_rate = ccu_nm_calc_rate(parent, 40 40 _n, _m); 41 41 42 - if (tmp_rate > rate) 43 - continue; 44 - 45 - if ((rate - tmp_rate) < (rate - best_rate)) { 42 + if (ccu_is_better_rate(common, rate, tmp_rate, best_rate)) { 46 43 best_rate = tmp_rate; 47 44 best_n = _n; 48 45 best_m = _m; ··· 156 159 _nm.min_m = 1; 157 160 _nm.max_m = nm->m.max ?: 1 << nm->m.width; 158 161 159 - rate = ccu_nm_find_best(*parent_rate, rate, &_nm); 162 + rate = ccu_nm_find_best(&nm->common, *parent_rate, rate, &_nm); 160 163 161 164 if (nm->common.features & CCU_FEATURE_FIXED_POSTDIV) 162 165 rate /= nm->fixed_post_div; ··· 207 210 &_nm.m, &_nm.n); 208 211 } else { 209 212 ccu_sdm_helper_disable(&nm->common, &nm->sdm); 210 - ccu_nm_find_best(parent_rate, rate, &_nm); 213 + ccu_nm_find_best(&nm->common, parent_rate, rate, &_nm); 211 214 } 212 215 213 216 spin_lock_irqsave(nm->common.lock, flags);
+45 -3
drivers/clk/sunxi-ng/ccu_nm.h
··· 108 108 }, \ 109 109 } 110 110 111 - #define SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK_MIN_MAX(_struct, _name, \ 111 + #define SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK_MIN_MAX_FEAT(_struct, _name, \ 112 112 _parent, _reg, \ 113 113 _min_rate, _max_rate, \ 114 114 _nshift, _nwidth, \ ··· 116 116 _frac_en, _frac_sel, \ 117 117 _frac_rate_0, \ 118 118 _frac_rate_1, \ 119 - _gate, _lock, _flags) \ 119 + _gate, _lock, _flags, \ 120 + _features) \ 120 121 struct ccu_nm _struct = { \ 121 122 .enable = _gate, \ 122 123 .lock = _lock, \ ··· 130 129 .max_rate = _max_rate, \ 131 130 .common = { \ 132 131 .reg = _reg, \ 133 - .features = CCU_FEATURE_FRACTIONAL, \ 132 + .features = _features, \ 134 133 .hw.init = CLK_HW_INIT(_name, \ 135 134 _parent, \ 136 135 &ccu_nm_ops, \ 137 136 _flags), \ 138 137 }, \ 139 138 } 139 + 140 + #define SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK_MIN_MAX(_struct, _name, \ 141 + _parent, _reg, \ 142 + _min_rate, _max_rate, \ 143 + _nshift, _nwidth, \ 144 + _mshift, _mwidth, \ 145 + _frac_en, _frac_sel, \ 146 + _frac_rate_0, \ 147 + _frac_rate_1, \ 148 + _gate, _lock, _flags) \ 149 + SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK_MIN_MAX_FEAT(_struct, _name, \ 150 + _parent, _reg, \ 151 + _min_rate, _max_rate, \ 152 + _nshift, _nwidth, \ 153 + _mshift, _mwidth, \ 154 + _frac_en, _frac_sel, \ 155 + _frac_rate_0, \ 156 + _frac_rate_1, \ 157 + _gate, _lock, _flags, \ 158 + CCU_FEATURE_FRACTIONAL) 159 + 160 + #define SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK_MIN_MAX_CLOSEST(_struct, _name, \ 161 + _parent, _reg, \ 162 + _min_rate, _max_rate, \ 163 + _nshift, _nwidth, \ 164 + _mshift, _mwidth, \ 165 + _frac_en, _frac_sel, \ 166 + _frac_rate_0, \ 167 + _frac_rate_1, \ 168 + _gate, _lock, _flags) \ 169 + SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK_MIN_MAX_FEAT(_struct, _name, \ 170 + _parent, _reg, \ 171 + _min_rate, _max_rate, \ 172 + _nshift, _nwidth, \ 173 + _mshift, _mwidth, \ 174 + _frac_en, _frac_sel, \ 175 + _frac_rate_0, \ 176 + _frac_rate_1, \ 177 + _gate, _lock, _flags, \ 178 + CCU_FEATURE_FRACTIONAL |\ 179 + CCU_FEATURE_CLOSEST_RATE) 140 180 141 181 #define SUNXI_CCU_NM_WITH_GATE_LOCK(_struct, _name, _parent, _reg, \ 142 182 _nshift, _nwidth, \
-1
drivers/clk/sunxi/clk-sun6i-apb0-gates.c
··· 10 10 #include <linux/clk-provider.h> 11 11 #include <linux/init.h> 12 12 #include <linux/of.h> 13 - #include <linux/of_device.h> 14 13 #include <linux/platform_device.h> 15 14 16 15 #define SUN6I_APB0_GATES_MAX_SIZE 32
+4 -7
drivers/clk/sunxi/clk-sun9i-mmc.c
··· 11 11 #include <linux/init.h> 12 12 #include <linux/io.h> 13 13 #include <linux/of.h> 14 - #include <linux/of_device.h> 15 14 #include <linux/reset.h> 16 15 #include <linux/platform_device.h> 17 16 #include <linux/reset-controller.h> ··· 107 108 108 109 spin_lock_init(&data->lock); 109 110 110 - r = platform_get_resource(pdev, IORESOURCE_MEM, 0); 111 - if (!r) 112 - return -EINVAL; 113 - /* one clock/reset pair per word */ 114 - count = DIV_ROUND_UP((resource_size(r)), SUN9I_MMC_WIDTH); 115 - data->membase = devm_ioremap_resource(&pdev->dev, r); 111 + data->membase = devm_platform_get_and_ioremap_resource(pdev, 0, &r); 116 112 if (IS_ERR(data->membase)) 117 113 return PTR_ERR(data->membase); 114 + 115 + /* one clock/reset pair per word */ 116 + count = DIV_ROUND_UP((resource_size(r)), SUN9I_MMC_WIDTH); 118 117 119 118 clk_data = &data->clk_data; 120 119 clk_data->clk_num = count;
+1 -1
drivers/clk/tegra/clk-device.c
··· 2 2 3 3 #include <linux/clk.h> 4 4 #include <linux/clk-provider.h> 5 + #include <linux/mod_devicetable.h> 5 6 #include <linux/mutex.h> 6 - #include <linux/of_device.h> 7 7 #include <linux/platform_device.h> 8 8 #include <linux/pm_domain.h> 9 9 #include <linux/pm_opp.h>
+1 -1
drivers/clk/tegra/clk-tegra124-dfll-fcpu.c
··· 12 12 #include <linux/err.h> 13 13 #include <linux/kernel.h> 14 14 #include <linux/init.h> 15 - #include <linux/of_device.h> 15 + #include <linux/of.h> 16 16 #include <linux/platform_device.h> 17 17 #include <linux/regulator/consumer.h> 18 18 #include <soc/tegra/fuse.h>
-1
drivers/clk/tegra/clk-tegra20.c
··· 9 9 #include <linux/init.h> 10 10 #include <linux/of.h> 11 11 #include <linux/of_address.h> 12 - #include <linux/of_device.h> 13 12 #include <linux/platform_device.h> 14 13 #include <linux/clk/tegra.h> 15 14 #include <linux/delay.h>
-1
drivers/clk/tegra/clk-tegra30.c
··· 10 10 #include <linux/init.h> 11 11 #include <linux/of.h> 12 12 #include <linux/of_address.h> 13 - #include <linux/of_device.h> 14 13 #include <linux/platform_device.h> 15 14 #include <linux/clk/tegra.h> 16 15
+3 -5
drivers/clk/tegra/clk.c
··· 9 9 #include <linux/delay.h> 10 10 #include <linux/io.h> 11 11 #include <linux/of.h> 12 - #include <linux/of_device.h> 12 + #include <linux/of_platform.h> 13 13 #include <linux/clk/tegra.h> 14 14 #include <linux/platform_device.h> 15 15 #include <linux/pm_runtime.h> 16 16 #include <linux/reset-controller.h> 17 - #include <linux/string.h> 17 + #include <linux/string_helpers.h> 18 18 19 19 #include <soc/tegra/fuse.h> 20 20 ··· 384 384 struct device_node *np; 385 385 char *node_name; 386 386 387 - node_name = kstrdup(hw->init->name, GFP_KERNEL); 387 + node_name = kstrdup_and_replace(hw->init->name, '_', '-', GFP_KERNEL); 388 388 if (!node_name) 389 389 return NULL; 390 - 391 - strreplace(node_name, '_', '-'); 392 390 393 391 for_each_child_of_node(tegra_car_np, np) { 394 392 if (!strcmp(np->name, node_name))
+2 -6
drivers/clk/ti/adpll.c
··· 881 881 dev_set_drvdata(d->dev, d); 882 882 spin_lock_init(&d->lock); 883 883 884 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 885 - if (!res) 886 - return -ENODEV; 887 - d->pa = res->start; 888 - 889 - d->iobase = devm_ioremap_resource(dev, res); 884 + d->iobase = devm_platform_get_and_ioremap_resource(pdev, 0, &res); 890 885 if (IS_ERR(d->iobase)) 891 886 return PTR_ERR(d->iobase); 887 + d->pa = res->start; 892 888 893 889 err = ti_adpll_init_registers(d); 894 890 if (err)
+2 -2
drivers/clk/ti/clk.c
··· 16 16 #include <linux/of_address.h> 17 17 #include <linux/list.h> 18 18 #include <linux/regmap.h> 19 + #include <linux/string_helpers.h> 19 20 #include <linux/memblock.h> 20 21 #include <linux/device.h> 21 22 ··· 124 123 const char *n; 125 124 char *tmp; 126 125 127 - tmp = kstrdup(name, GFP_KERNEL); 126 + tmp = kstrdup_and_replace(name, '-', '_', GFP_KERNEL); 128 127 if (!tmp) 129 128 return NULL; 130 - strreplace(tmp, '-', '_'); 131 129 132 130 /* Node named "clock" with "clock-output-names" */ 133 131 for_each_of_allnodes_from(from, np) {
+5 -4
drivers/clk/ti/clkctrl.c
··· 13 13 #include <linux/of_address.h> 14 14 #include <linux/clk/ti.h> 15 15 #include <linux/delay.h> 16 + #include <linux/string_helpers.h> 16 17 #include <linux/timekeeping.h> 17 18 #include "clock.h" 18 19 ··· 474 473 const int prefix_len = 11; 475 474 const char *compat; 476 475 const char *output; 476 + const char *end; 477 477 char *name; 478 478 479 479 if (!of_property_read_string_index(np, "clock-output-names", 0, 480 480 &output)) { 481 - const char *end; 482 481 int len; 483 482 484 483 len = strlen(output); ··· 492 491 493 492 of_property_for_each_string(np, "compatible", prop, compat) { 494 493 if (!strncmp("ti,clkctrl-", compat, prefix_len)) { 494 + end = compat + prefix_len; 495 495 /* Two letter minimum name length for l3, l4 etc */ 496 - if (strnlen(compat + prefix_len, 16) < 2) 496 + if (strnlen(end, 16) < 2) 497 497 continue; 498 - name = kasprintf(GFP_KERNEL, "%s", compat + prefix_len); 498 + name = kstrdup_and_replace(end, '-', '_', GFP_KERNEL); 499 499 if (!name) 500 500 continue; 501 - strreplace(name, '-', '_'); 502 501 503 502 return name; 504 503 }
-1
drivers/clk/uniphier/clk-uniphier-core.c
··· 8 8 #include <linux/init.h> 9 9 #include <linux/mfd/syscon.h> 10 10 #include <linux/of.h> 11 - #include <linux/of_device.h> 12 11 #include <linux/platform_device.h> 13 12 14 13 #include "clk-uniphier.h"
+1 -1
drivers/clk/xilinx/xlnx_vcu.c
··· 15 15 #include <linux/mfd/syscon.h> 16 16 #include <linux/mfd/syscon/xlnx-vcu.h> 17 17 #include <linux/module.h> 18 - #include <linux/of_platform.h> 18 + #include <linux/mod_devicetable.h> 19 19 #include <linux/platform_device.h> 20 20 #include <linux/regmap.h> 21 21
+2 -1
drivers/clk/zynqmp/clkc.c
··· 11 11 #include <linux/clk.h> 12 12 #include <linux/clk-provider.h> 13 13 #include <linux/module.h> 14 - #include <linux/of_platform.h> 14 + #include <linux/of.h> 15 + #include <linux/platform_device.h> 15 16 #include <linux/slab.h> 16 17 #include <linux/string.h> 17 18
+1 -2
drivers/gpu/drm/sun4i/sun8i_tcon_top.c
··· 141 141 GFP_KERNEL); 142 142 if (!clk_data) 143 143 return -ENOMEM; 144 + clk_data->num = CLK_NUM; 144 145 tcon_top->clk_data = clk_data; 145 146 146 147 spin_lock_init(&tcon_top->reg_lock); ··· 213 212 ret = PTR_ERR(clk_data->hws[i]); 214 213 goto err_unregister_gates; 215 214 } 216 - 217 - clk_data->num = CLK_NUM; 218 215 219 216 ret = of_clk_add_hw_provider(dev->of_node, of_clk_hw_onecell_get, 220 217 clk_data);
+1 -1
drivers/interconnect/qcom/Makefile
··· 29 29 qnoc-sm8350-objs := sm8350.o 30 30 qnoc-sm8450-objs := sm8450.o 31 31 qnoc-sm8550-objs := sm8550.o 32 - icc-smd-rpm-objs := smd-rpm.o icc-rpm.o 32 + icc-smd-rpm-objs := smd-rpm.o icc-rpm.o icc-rpm-clocks.o 33 33 34 34 obj-$(CONFIG_INTERCONNECT_QCOM_BCM_VOTER) += icc-bcm-voter.o 35 35 obj-$(CONFIG_INTERCONNECT_QCOM_MSM8916) += qnoc-msm8916.o
+77
drivers/interconnect/qcom/icc-rpm-clocks.c
··· 1 + /* SPDX-License-Identifier: GPL-2.0 */ 2 + /* 3 + * Copyright (C) 2023 Linaro Ltd 4 + */ 5 + 6 + #include <linux/soc/qcom/smd-rpm.h> 7 + 8 + #include "icc-rpm.h" 9 + 10 + const struct rpm_clk_resource aggre1_clk = { 11 + .resource_type = QCOM_SMD_RPM_AGGR_CLK, 12 + .clock_id = 1, 13 + }; 14 + EXPORT_SYMBOL_GPL(aggre1_clk); 15 + 16 + const struct rpm_clk_resource aggre2_clk = { 17 + .resource_type = QCOM_SMD_RPM_AGGR_CLK, 18 + .clock_id = 2, 19 + }; 20 + EXPORT_SYMBOL_GPL(aggre2_clk); 21 + 22 + const struct rpm_clk_resource bimc_clk = { 23 + .resource_type = QCOM_SMD_RPM_MEM_CLK, 24 + .clock_id = 0, 25 + }; 26 + EXPORT_SYMBOL_GPL(bimc_clk); 27 + 28 + const struct rpm_clk_resource bus_0_clk = { 29 + .resource_type = QCOM_SMD_RPM_BUS_CLK, 30 + .clock_id = 0, 31 + }; 32 + EXPORT_SYMBOL_GPL(bus_0_clk); 33 + 34 + const struct rpm_clk_resource bus_1_clk = { 35 + .resource_type = QCOM_SMD_RPM_BUS_CLK, 36 + .clock_id = 1, 37 + }; 38 + EXPORT_SYMBOL_GPL(bus_1_clk); 39 + 40 + const struct rpm_clk_resource bus_2_clk = { 41 + .resource_type = QCOM_SMD_RPM_BUS_CLK, 42 + .clock_id = 2, 43 + }; 44 + EXPORT_SYMBOL_GPL(bus_2_clk); 45 + 46 + const struct rpm_clk_resource mmaxi_0_clk = { 47 + .resource_type = QCOM_SMD_RPM_MMAXI_CLK, 48 + .clock_id = 0, 49 + }; 50 + EXPORT_SYMBOL_GPL(mmaxi_0_clk); 51 + 52 + const struct rpm_clk_resource mmaxi_1_clk = { 53 + .resource_type = QCOM_SMD_RPM_MMAXI_CLK, 54 + .clock_id = 1, 55 + }; 56 + EXPORT_SYMBOL_GPL(mmaxi_1_clk); 57 + 58 + const struct rpm_clk_resource qup_clk = { 59 + .resource_type = QCOM_SMD_RPM_QUP_CLK, 60 + .clock_id = 0, 61 + }; 62 + EXPORT_SYMBOL_GPL(qup_clk); 63 + 64 + /* Branch clocks */ 65 + const struct rpm_clk_resource aggre1_branch_clk = { 66 + .resource_type = QCOM_SMD_RPM_AGGR_CLK, 67 + .clock_id = 1, 68 + .branch = true, 69 + }; 70 + EXPORT_SYMBOL_GPL(aggre1_branch_clk); 71 + 72 + const struct rpm_clk_resource aggre2_branch_clk = { 73 + .resource_type = QCOM_SMD_RPM_AGGR_CLK, 74 + .clock_id = 2, 75 + .branch = true, 76 + }; 77 + EXPORT_SYMBOL_GPL(aggre2_branch_clk);
+111 -105
drivers/interconnect/qcom/icc-rpm.c
··· 3 3 * Copyright (C) 2020 Linaro Ltd 4 4 */ 5 5 6 - #include <linux/clk.h> 7 6 #include <linux/device.h> 8 7 #include <linux/interconnect-provider.h> 9 8 #include <linux/io.h> ··· 13 14 #include <linux/regmap.h> 14 15 #include <linux/slab.h> 15 16 16 - #include "smd-rpm.h" 17 17 #include "icc-common.h" 18 18 #include "icc-rpm.h" 19 19 ··· 47 49 48 50 #define NOC_QOS_MODE_FIXED_VAL 0x0 49 51 #define NOC_QOS_MODE_BYPASS_VAL 0x2 52 + 53 + #define ICC_BUS_CLK_MIN_RATE 19200ULL /* kHz */ 50 54 51 55 static int qcom_icc_set_qnoc_qos(struct icc_node *src) 52 56 { ··· 204 204 } 205 205 } 206 206 207 - static int qcom_icc_rpm_set(struct qcom_icc_node *qn, u64 sum_bw) 207 + static int qcom_icc_rpm_set(struct qcom_icc_node *qn, u64 *bw) 208 208 { 209 - int ret = 0; 209 + int ret, rpm_ctx = 0; 210 + u64 bw_bps; 210 211 211 212 if (qn->qos.ap_owned) 212 213 return 0; 213 214 214 - if (qn->mas_rpm_id != -1) { 215 - ret = qcom_icc_rpm_smd_send(QCOM_SMD_RPM_ACTIVE_STATE, 216 - RPM_BUS_MASTER_REQ, 217 - qn->mas_rpm_id, 218 - sum_bw); 219 - if (ret) { 220 - pr_err("qcom_icc_rpm_smd_send mas %d error %d\n", 221 - qn->mas_rpm_id, ret); 222 - return ret; 223 - } 224 - } 215 + for (rpm_ctx = 0; rpm_ctx < QCOM_SMD_RPM_STATE_NUM; rpm_ctx++) { 216 + bw_bps = icc_units_to_bps(bw[rpm_ctx]); 225 217 226 - if (qn->slv_rpm_id != -1) { 227 - ret = qcom_icc_rpm_smd_send(QCOM_SMD_RPM_ACTIVE_STATE, 228 - RPM_BUS_SLAVE_REQ, 229 - qn->slv_rpm_id, 230 - sum_bw); 231 - if (ret) { 232 - pr_err("qcom_icc_rpm_smd_send slv %d error %d\n", 233 - qn->slv_rpm_id, ret); 234 - return ret; 218 + if (qn->mas_rpm_id != -1) { 219 + ret = qcom_icc_rpm_smd_send(rpm_ctx, 220 + RPM_BUS_MASTER_REQ, 221 + qn->mas_rpm_id, 222 + bw_bps); 223 + if (ret) { 224 + pr_err("qcom_icc_rpm_smd_send mas %d error %d\n", 225 + qn->mas_rpm_id, ret); 226 + return ret; 227 + } 228 + } 229 + 230 + if (qn->slv_rpm_id != -1) { 231 + ret = qcom_icc_rpm_smd_send(rpm_ctx, 232 + RPM_BUS_SLAVE_REQ, 233 + qn->slv_rpm_id, 234 + bw_bps); 235 + if (ret) { 236 + pr_err("qcom_icc_rpm_smd_send slv %d error %d\n", 237 + qn->slv_rpm_id, ret); 238 + return ret; 239 + } 235 240 } 236 241 } 237 242 ··· 253 248 size_t i; 254 249 255 250 qn = node->data; 256 - for (i = 0; i < QCOM_ICC_NUM_BUCKETS; i++) { 251 + for (i = 0; i < QCOM_SMD_RPM_STATE_NUM; i++) { 257 252 qn->sum_avg[i] = 0; 258 253 qn->max_peak[i] = 0; 259 254 } ··· 277 272 qn = node->data; 278 273 279 274 if (!tag) 280 - tag = QCOM_ICC_TAG_ALWAYS; 275 + tag = RPM_ALWAYS_TAG; 281 276 282 - for (i = 0; i < QCOM_ICC_NUM_BUCKETS; i++) { 277 + for (i = 0; i < QCOM_SMD_RPM_STATE_NUM; i++) { 283 278 if (tag & BIT(i)) { 284 279 qn->sum_avg[i] += avg_bw; 285 280 qn->max_peak[i] = max_t(u32, qn->max_peak[i], peak_bw); ··· 292 287 } 293 288 294 289 /** 295 - * qcom_icc_bus_aggregate - aggregate bandwidth by traversing all nodes 290 + * qcom_icc_bus_aggregate - calculate bus clock rates by traversing all nodes 296 291 * @provider: generic interconnect provider 297 - * @agg_avg: an array for aggregated average bandwidth of buckets 298 - * @agg_peak: an array for aggregated peak bandwidth of buckets 299 - * @max_agg_avg: pointer to max value of aggregated average bandwidth 292 + * @agg_clk_rate: array containing the aggregated clock rates in kHz 300 293 */ 301 - static void qcom_icc_bus_aggregate(struct icc_provider *provider, 302 - u64 *agg_avg, u64 *agg_peak, 303 - u64 *max_agg_avg) 294 + static void qcom_icc_bus_aggregate(struct icc_provider *provider, u64 *agg_clk_rate) 304 295 { 305 - struct icc_node *node; 296 + u64 agg_avg_rate, agg_rate; 306 297 struct qcom_icc_node *qn; 307 - u64 sum_avg[QCOM_ICC_NUM_BUCKETS]; 298 + struct icc_node *node; 308 299 int i; 309 300 310 - /* Initialise aggregate values */ 311 - for (i = 0; i < QCOM_ICC_NUM_BUCKETS; i++) { 312 - agg_avg[i] = 0; 313 - agg_peak[i] = 0; 314 - } 315 - 316 - *max_agg_avg = 0; 317 - 318 301 /* 319 - * Iterate nodes on the interconnect and aggregate bandwidth 320 - * requests for every bucket. 302 + * Iterate nodes on the provider, aggregate bandwidth requests for 303 + * every bucket and convert them into bus clock rates. 321 304 */ 322 305 list_for_each_entry(node, &provider->nodes, node_list) { 323 306 qn = node->data; 324 - for (i = 0; i < QCOM_ICC_NUM_BUCKETS; i++) { 307 + for (i = 0; i < QCOM_SMD_RPM_STATE_NUM; i++) { 325 308 if (qn->channels) 326 - sum_avg[i] = div_u64(qn->sum_avg[i], qn->channels); 309 + agg_avg_rate = div_u64(qn->sum_avg[i], qn->channels); 327 310 else 328 - sum_avg[i] = qn->sum_avg[i]; 329 - agg_avg[i] += sum_avg[i]; 330 - agg_peak[i] = max_t(u64, agg_peak[i], qn->max_peak[i]); 311 + agg_avg_rate = qn->sum_avg[i]; 312 + 313 + agg_rate = max_t(u64, agg_avg_rate, qn->max_peak[i]); 314 + do_div(agg_rate, qn->buswidth); 315 + 316 + agg_clk_rate[i] = max_t(u64, agg_clk_rate[i], agg_rate); 331 317 } 332 318 } 333 - 334 - /* Find maximum values across all buckets */ 335 - for (i = 0; i < QCOM_ICC_NUM_BUCKETS; i++) 336 - *max_agg_avg = max_t(u64, *max_agg_avg, agg_avg[i]); 337 319 } 338 320 339 321 static int qcom_icc_set(struct icc_node *src, struct icc_node *dst) 340 322 { 341 - struct qcom_icc_provider *qp; 342 323 struct qcom_icc_node *src_qn = NULL, *dst_qn = NULL; 324 + u64 agg_clk_rate[QCOM_SMD_RPM_STATE_NUM] = { 0 }; 343 325 struct icc_provider *provider; 344 - u64 sum_bw; 345 - u64 rate; 346 - u64 agg_avg[QCOM_ICC_NUM_BUCKETS], agg_peak[QCOM_ICC_NUM_BUCKETS]; 347 - u64 max_agg_avg; 348 - int ret, i; 349 - int bucket; 326 + struct qcom_icc_provider *qp; 327 + u64 active_rate, sleep_rate; 328 + int ret; 350 329 351 330 src_qn = src->data; 352 331 if (dst) ··· 338 349 provider = src->provider; 339 350 qp = to_qcom_provider(provider); 340 351 341 - qcom_icc_bus_aggregate(provider, agg_avg, agg_peak, &max_agg_avg); 352 + qcom_icc_bus_aggregate(provider, agg_clk_rate); 353 + active_rate = agg_clk_rate[QCOM_SMD_RPM_ACTIVE_STATE]; 354 + sleep_rate = agg_clk_rate[QCOM_SMD_RPM_SLEEP_STATE]; 342 355 343 - sum_bw = icc_units_to_bps(max_agg_avg); 344 - 345 - ret = qcom_icc_rpm_set(src_qn, sum_bw); 356 + ret = qcom_icc_rpm_set(src_qn, src_qn->sum_avg); 346 357 if (ret) 347 358 return ret; 348 359 349 360 if (dst_qn) { 350 - ret = qcom_icc_rpm_set(dst_qn, sum_bw); 361 + ret = qcom_icc_rpm_set(dst_qn, dst_qn->sum_avg); 351 362 if (ret) 352 363 return ret; 353 364 } 354 365 355 - for (i = 0; i < qp->num_bus_clks; i++) { 356 - /* 357 - * Use WAKE bucket for active clock, otherwise, use SLEEP bucket 358 - * for other clocks. If a platform doesn't set interconnect 359 - * path tags, by default use sleep bucket for all clocks. 360 - * 361 - * Note, AMC bucket is not supported yet. 362 - */ 363 - if (!strcmp(qp->bus_clks[i].id, "bus_a")) 364 - bucket = QCOM_ICC_BUCKET_WAKE; 365 - else 366 - bucket = QCOM_ICC_BUCKET_SLEEP; 366 + /* Some providers don't have a bus clock to scale */ 367 + if (!qp->bus_clk_desc && !qp->bus_clk) 368 + return 0; 367 369 368 - rate = icc_units_to_bps(max(agg_avg[bucket], agg_peak[bucket])); 369 - do_div(rate, src_qn->buswidth); 370 - rate = min_t(u64, rate, LONG_MAX); 370 + /* 371 + * Downstream checks whether the requested rate is zero, but it makes little sense 372 + * to vote for a value that's below the lower threshold, so let's not do so. 373 + */ 374 + if (qp->keep_alive) 375 + active_rate = max(ICC_BUS_CLK_MIN_RATE, active_rate); 371 376 372 - if (qp->bus_clk_rate[i] == rate) 373 - continue; 377 + /* Some providers have a non-RPM-owned bus clock - convert kHz->Hz for the CCF */ 378 + if (qp->bus_clk) { 379 + active_rate = max_t(u64, active_rate, sleep_rate); 380 + /* ARM32 caps clk_set_rate arg to u32.. Nothing we can do about that! */ 381 + active_rate = min_t(u64, 1000ULL * active_rate, ULONG_MAX); 382 + return clk_set_rate(qp->bus_clk, active_rate); 383 + } 374 384 375 - ret = clk_set_rate(qp->bus_clks[i].clk, rate); 376 - if (ret) { 377 - pr_err("%s clk_set_rate error: %d\n", 378 - qp->bus_clks[i].id, ret); 385 + /* RPM only accepts <=INT_MAX rates */ 386 + active_rate = min_t(u64, active_rate, INT_MAX); 387 + sleep_rate = min_t(u64, sleep_rate, INT_MAX); 388 + 389 + if (active_rate != qp->bus_clk_rate[QCOM_SMD_RPM_ACTIVE_STATE]) { 390 + ret = qcom_icc_rpm_set_bus_rate(qp->bus_clk_desc, QCOM_SMD_RPM_ACTIVE_STATE, 391 + active_rate); 392 + if (ret) 379 393 return ret; 380 - } 381 - qp->bus_clk_rate[i] = rate; 394 + 395 + /* Cache the rate after we've successfully commited it to RPM */ 396 + qp->bus_clk_rate[QCOM_SMD_RPM_ACTIVE_STATE] = active_rate; 397 + } 398 + 399 + if (sleep_rate != qp->bus_clk_rate[QCOM_SMD_RPM_SLEEP_STATE]) { 400 + ret = qcom_icc_rpm_set_bus_rate(qp->bus_clk_desc, QCOM_SMD_RPM_SLEEP_STATE, 401 + sleep_rate); 402 + if (ret) 403 + return ret; 404 + 405 + /* Cache the rate after we've successfully commited it to RPM */ 406 + qp->bus_clk_rate[QCOM_SMD_RPM_SLEEP_STATE] = sleep_rate; 382 407 } 383 408 384 409 return 0; 385 410 } 386 - 387 - static const char * const bus_clocks[] = { 388 - "bus", "bus_a", 389 - }; 390 411 391 412 int qnoc_probe(struct platform_device *pdev) 392 413 { ··· 439 440 if (!qp->intf_clks) 440 441 return -ENOMEM; 441 442 443 + if (desc->bus_clk_desc) { 444 + qp->bus_clk_desc = devm_kzalloc(dev, sizeof(*qp->bus_clk_desc), 445 + GFP_KERNEL); 446 + if (!qp->bus_clk_desc) 447 + return -ENOMEM; 448 + 449 + qp->bus_clk_desc = desc->bus_clk_desc; 450 + } else { 451 + /* Some older SoCs may have a single non-RPM-owned bus clock. */ 452 + qp->bus_clk = devm_clk_get_optional(dev, "bus"); 453 + if (IS_ERR(qp->bus_clk)) 454 + return PTR_ERR(qp->bus_clk); 455 + } 456 + 442 457 data = devm_kzalloc(dev, struct_size(data, nodes, num_nodes), 443 458 GFP_KERNEL); 444 459 if (!data) ··· 462 449 for (i = 0; i < cd_num; i++) 463 450 qp->intf_clks[i].id = cds[i]; 464 451 465 - qp->num_bus_clks = desc->no_clk_scaling ? 0 : NUM_BUS_CLKS; 466 - for (i = 0; i < qp->num_bus_clks; i++) 467 - qp->bus_clks[i].id = bus_clocks[i]; 468 - 452 + qp->keep_alive = desc->keep_alive; 469 453 qp->type = desc->type; 470 454 qp->qos_offset = desc->qos_offset; 471 455 ··· 491 481 } 492 482 493 483 regmap_done: 494 - ret = devm_clk_bulk_get(dev, qp->num_bus_clks, qp->bus_clks); 495 - if (ret) 496 - return ret; 497 - 498 - ret = clk_bulk_prepare_enable(qp->num_bus_clks, qp->bus_clks); 484 + ret = clk_prepare_enable(qp->bus_clk); 499 485 if (ret) 500 486 return ret; 501 487 ··· 563 557 icc_provider_deregister(provider); 564 558 err_remove_nodes: 565 559 icc_nodes_remove(provider); 566 - clk_bulk_disable_unprepare(qp->num_bus_clks, qp->bus_clks); 560 + clk_disable_unprepare(qp->bus_clk); 567 561 568 562 return ret; 569 563 } ··· 575 569 576 570 icc_provider_deregister(&qp->provider); 577 571 icc_nodes_remove(&qp->provider); 578 - clk_bulk_disable_unprepare(qp->num_bus_clks, qp->bus_clks); 572 + clk_disable_unprepare(qp->bus_clk); 579 573 580 574 return 0; 581 575 }
+45 -11
drivers/interconnect/qcom/icc-rpm.h
··· 6 6 #ifndef __DRIVERS_INTERCONNECT_QCOM_ICC_RPM_H 7 7 #define __DRIVERS_INTERCONNECT_QCOM_ICC_RPM_H 8 8 9 - #include <dt-bindings/interconnect/qcom,icc.h> 9 + #include <linux/soc/qcom/smd-rpm.h> 10 + 11 + #include <dt-bindings/interconnect/qcom,rpm-icc.h> 12 + #include <linux/clk.h> 13 + #include <linux/interconnect-provider.h> 14 + #include <linux/platform_device.h> 10 15 11 16 #define RPM_BUS_MASTER_REQ 0x73616d62 12 17 #define RPM_BUS_SLAVE_REQ 0x766c7362 ··· 25 20 QCOM_ICC_QNOC, 26 21 }; 27 22 28 - #define NUM_BUS_CLKS 2 23 + /** 24 + * struct rpm_clk_resource - RPM bus clock resource 25 + * @resource_type: RPM resource type of the clock resource 26 + * @clock_id: index of the clock resource of a specific resource type 27 + * @branch: whether the resource represents a branch clock 28 + */ 29 + struct rpm_clk_resource { 30 + u32 resource_type; 31 + u32 clock_id; 32 + bool branch; 33 + }; 29 34 30 35 /** 31 36 * struct qcom_icc_provider - Qualcomm specific interconnect provider 32 37 * @provider: generic interconnect provider 33 - * @num_bus_clks: the total number of bus_clks clk_bulk_data entries (0 or 2) 34 38 * @num_intf_clks: the total number of intf_clks clk_bulk_data entries 35 39 * @type: the ICC provider type 36 40 * @regmap: regmap for QoS registers read/write access 37 41 * @qos_offset: offset to QoS registers 38 42 * @bus_clk_rate: bus clock rate in Hz 39 - * @bus_clks: the clk_bulk_data table of bus clocks 43 + * @bus_clk_desc: a pointer to a rpm_clk_resource description of bus clocks 44 + * @bus_clk: a pointer to a HLOS-owned bus clock 40 45 * @intf_clks: a clk_bulk_data array of interface clocks 46 + * @keep_alive: whether to always keep a minimum vote on the bus clocks 41 47 * @is_on: whether the bus is powered on 42 48 */ 43 49 struct qcom_icc_provider { 44 50 struct icc_provider provider; 45 - int num_bus_clks; 46 51 int num_intf_clks; 47 52 enum qcom_icc_type type; 48 53 struct regmap *regmap; 49 54 unsigned int qos_offset; 50 - u64 bus_clk_rate[NUM_BUS_CLKS]; 51 - struct clk_bulk_data bus_clks[NUM_BUS_CLKS]; 55 + u32 bus_clk_rate[QCOM_SMD_RPM_STATE_NUM]; 56 + const struct rpm_clk_resource *bus_clk_desc; 57 + struct clk *bus_clk; 52 58 struct clk_bulk_data *intf_clks; 59 + bool keep_alive; 53 60 bool is_on; 54 61 }; 55 62 ··· 106 89 u16 num_links; 107 90 u16 channels; 108 91 u16 buswidth; 109 - u64 sum_avg[QCOM_ICC_NUM_BUCKETS]; 110 - u64 max_peak[QCOM_ICC_NUM_BUCKETS]; 92 + u64 sum_avg[QCOM_SMD_RPM_STATE_NUM]; 93 + u64 max_peak[QCOM_SMD_RPM_STATE_NUM]; 111 94 int mas_rpm_id; 112 95 int slv_rpm_id; 113 96 struct qcom_icc_qos qos; ··· 116 99 struct qcom_icc_desc { 117 100 struct qcom_icc_node * const *nodes; 118 101 size_t num_nodes; 119 - const char * const *bus_clocks; 102 + const struct rpm_clk_resource *bus_clk_desc; 120 103 const char * const *intf_clocks; 121 104 size_t num_intf_clocks; 122 - bool no_clk_scaling; 105 + bool keep_alive; 123 106 enum qcom_icc_type type; 124 107 const struct regmap_config *regmap_cfg; 125 108 unsigned int qos_offset; ··· 132 115 NOC_QOS_MODE_BYPASS, 133 116 }; 134 117 118 + extern const struct rpm_clk_resource aggre1_clk; 119 + extern const struct rpm_clk_resource aggre2_clk; 120 + extern const struct rpm_clk_resource bimc_clk; 121 + extern const struct rpm_clk_resource bus_0_clk; 122 + extern const struct rpm_clk_resource bus_1_clk; 123 + extern const struct rpm_clk_resource bus_2_clk; 124 + extern const struct rpm_clk_resource mmaxi_0_clk; 125 + extern const struct rpm_clk_resource mmaxi_1_clk; 126 + extern const struct rpm_clk_resource qup_clk; 127 + 128 + extern const struct rpm_clk_resource aggre1_branch_clk; 129 + extern const struct rpm_clk_resource aggre2_branch_clk; 130 + 135 131 int qnoc_probe(struct platform_device *pdev); 136 132 int qnoc_remove(struct platform_device *pdev); 133 + 134 + bool qcom_icc_rpm_smd_available(void); 135 + int qcom_icc_rpm_smd_send(int ctx, int rsc_type, int id, u32 val); 136 + int qcom_icc_rpm_set_bus_rate(const struct rpm_clk_resource *clk, int ctx, u32 rate); 137 137 138 138 #endif
+3 -2
drivers/interconnect/qcom/msm8916.c
··· 4 4 * Author: Georgi Djakov <georgi.djakov@linaro.org> 5 5 */ 6 6 7 - #include <linux/clk.h> 8 7 #include <linux/device.h> 9 8 #include <linux/interconnect-provider.h> 10 9 #include <linux/io.h> ··· 14 15 15 16 #include <dt-bindings/interconnect/qcom,msm8916.h> 16 17 17 - #include "smd-rpm.h" 18 18 #include "icc-rpm.h" 19 19 20 20 enum { ··· 1230 1232 .type = QCOM_ICC_NOC, 1231 1233 .nodes = msm8916_snoc_nodes, 1232 1234 .num_nodes = ARRAY_SIZE(msm8916_snoc_nodes), 1235 + .bus_clk_desc = &bus_1_clk, 1233 1236 .regmap_cfg = &msm8916_snoc_regmap_config, 1234 1237 .qos_offset = 0x7000, 1235 1238 }; ··· 1259 1260 .type = QCOM_ICC_BIMC, 1260 1261 .nodes = msm8916_bimc_nodes, 1261 1262 .num_nodes = ARRAY_SIZE(msm8916_bimc_nodes), 1263 + .bus_clk_desc = &bimc_clk, 1262 1264 .regmap_cfg = &msm8916_bimc_regmap_config, 1263 1265 .qos_offset = 0x8000, 1264 1266 }; ··· 1329 1329 .type = QCOM_ICC_NOC, 1330 1330 .nodes = msm8916_pcnoc_nodes, 1331 1331 .num_nodes = ARRAY_SIZE(msm8916_pcnoc_nodes), 1332 + .bus_clk_desc = &bus_0_clk, 1332 1333 .regmap_cfg = &msm8916_pcnoc_regmap_config, 1333 1334 .qos_offset = 0x7000, 1334 1335 };
+4 -2
drivers/interconnect/qcom/msm8939.c
··· 5 5 * With reference of msm8916 interconnect driver of Georgi Djakov. 6 6 */ 7 7 8 - #include <linux/clk.h> 9 8 #include <linux/device.h> 10 9 #include <linux/interconnect-provider.h> 11 10 #include <linux/io.h> ··· 15 16 16 17 #include <dt-bindings/interconnect/qcom,msm8939.h> 17 18 18 - #include "smd-rpm.h" 19 19 #include "icc-rpm.h" 20 20 21 21 enum { ··· 1283 1285 .type = QCOM_ICC_NOC, 1284 1286 .nodes = msm8939_snoc_nodes, 1285 1287 .num_nodes = ARRAY_SIZE(msm8939_snoc_nodes), 1288 + .bus_clk_desc = &bus_1_clk, 1286 1289 .regmap_cfg = &msm8939_snoc_regmap_config, 1287 1290 .qos_offset = 0x7000, 1288 1291 }; ··· 1304 1305 .type = QCOM_ICC_NOC, 1305 1306 .nodes = msm8939_snoc_mm_nodes, 1306 1307 .num_nodes = ARRAY_SIZE(msm8939_snoc_mm_nodes), 1308 + .bus_clk_desc = &bus_2_clk, 1307 1309 .regmap_cfg = &msm8939_snoc_regmap_config, 1308 1310 .qos_offset = 0x7000, 1309 1311 }; ··· 1333 1333 .type = QCOM_ICC_BIMC, 1334 1334 .nodes = msm8939_bimc_nodes, 1335 1335 .num_nodes = ARRAY_SIZE(msm8939_bimc_nodes), 1336 + .bus_clk_desc = &bimc_clk, 1336 1337 .regmap_cfg = &msm8939_bimc_regmap_config, 1337 1338 .qos_offset = 0x8000, 1338 1339 }; ··· 1405 1404 .type = QCOM_ICC_NOC, 1406 1405 .nodes = msm8939_pcnoc_nodes, 1407 1406 .num_nodes = ARRAY_SIZE(msm8939_pcnoc_nodes), 1407 + .bus_clk_desc = &bus_0_clk, 1408 1408 .regmap_cfg = &msm8939_pcnoc_regmap_config, 1409 1409 .qos_offset = 0x7000, 1410 1410 };
+1 -1
drivers/interconnect/qcom/msm8974.c
··· 38 38 #include <linux/platform_device.h> 39 39 #include <linux/slab.h> 40 40 41 - #include "smd-rpm.h" 41 + #include "icc-rpm.h" 42 42 43 43 enum { 44 44 MSM8974_BIMC_MAS_AMPSS_M0 = 1,
+7 -3
drivers/interconnect/qcom/msm8996.c
··· 5 5 * Copyright (c) 2021 Yassine Oudjana <y.oudjana@protonmail.com> 6 6 */ 7 7 8 - #include <linux/clk.h> 9 8 #include <linux/device.h> 10 9 #include <linux/interconnect-provider.h> 11 10 #include <linux/io.h> ··· 17 18 #include <dt-bindings/interconnect/qcom,msm8996.h> 18 19 19 20 #include "icc-rpm.h" 20 - #include "smd-rpm.h" 21 21 #include "msm8996.h" 22 22 23 23 static const char * const mm_intf_clocks[] = { ··· 1817 1819 .num_nodes = ARRAY_SIZE(a0noc_nodes), 1818 1820 .intf_clocks = a0noc_intf_clocks, 1819 1821 .num_intf_clocks = ARRAY_SIZE(a0noc_intf_clocks), 1820 - .no_clk_scaling = true, 1821 1822 .regmap_cfg = &msm8996_a0noc_regmap_config 1822 1823 }; 1823 1824 ··· 1838 1841 .type = QCOM_ICC_NOC, 1839 1842 .nodes = a1noc_nodes, 1840 1843 .num_nodes = ARRAY_SIZE(a1noc_nodes), 1844 + .bus_clk_desc = &aggre1_branch_clk, 1841 1845 .regmap_cfg = &msm8996_a1noc_regmap_config 1842 1846 }; 1843 1847 ··· 1860 1862 .type = QCOM_ICC_NOC, 1861 1863 .nodes = a2noc_nodes, 1862 1864 .num_nodes = ARRAY_SIZE(a2noc_nodes), 1865 + .bus_clk_desc = &aggre2_branch_clk, 1863 1866 .intf_clocks = a2noc_intf_clocks, 1864 1867 .num_intf_clocks = ARRAY_SIZE(a2noc_intf_clocks), 1865 1868 .regmap_cfg = &msm8996_a2noc_regmap_config ··· 1889 1890 .type = QCOM_ICC_BIMC, 1890 1891 .nodes = bimc_nodes, 1891 1892 .num_nodes = ARRAY_SIZE(bimc_nodes), 1893 + .bus_clk_desc = &bimc_clk, 1892 1894 .regmap_cfg = &msm8996_bimc_regmap_config 1893 1895 }; 1894 1896 ··· 1948 1948 .type = QCOM_ICC_NOC, 1949 1949 .nodes = cnoc_nodes, 1950 1950 .num_nodes = ARRAY_SIZE(cnoc_nodes), 1951 + .bus_clk_desc = &bus_2_clk, 1951 1952 .regmap_cfg = &msm8996_cnoc_regmap_config 1952 1953 }; 1953 1954 ··· 2002 2001 .type = QCOM_ICC_NOC, 2003 2002 .nodes = mnoc_nodes, 2004 2003 .num_nodes = ARRAY_SIZE(mnoc_nodes), 2004 + .bus_clk_desc = &mmaxi_0_clk, 2005 2005 .intf_clocks = mm_intf_clocks, 2006 2006 .num_intf_clocks = ARRAY_SIZE(mm_intf_clocks), 2007 2007 .regmap_cfg = &msm8996_mnoc_regmap_config ··· 2041 2039 .type = QCOM_ICC_NOC, 2042 2040 .nodes = pnoc_nodes, 2043 2041 .num_nodes = ARRAY_SIZE(pnoc_nodes), 2042 + .bus_clk_desc = &bus_0_clk, 2044 2043 .regmap_cfg = &msm8996_pnoc_regmap_config 2045 2044 }; 2046 2045 ··· 2086 2083 .type = QCOM_ICC_NOC, 2087 2084 .nodes = snoc_nodes, 2088 2085 .num_nodes = ARRAY_SIZE(snoc_nodes), 2086 + .bus_clk_desc = &bus_1_clk, 2089 2087 .regmap_cfg = &msm8996_snoc_regmap_config 2090 2088 }; 2091 2089
+6 -2
drivers/interconnect/qcom/qcm2290.c
··· 7 7 */ 8 8 9 9 #include <dt-bindings/interconnect/qcom,qcm2290.h> 10 - #include <linux/clk.h> 11 10 #include <linux/device.h> 12 11 #include <linux/interconnect-provider.h> 13 12 #include <linux/io.h> ··· 18 19 #include <linux/slab.h> 19 20 20 21 #include "icc-rpm.h" 21 - #include "smd-rpm.h" 22 22 23 23 enum { 24 24 QCM2290_MASTER_APPSS_PROC = 1, ··· 1195 1197 .type = QCOM_ICC_BIMC, 1196 1198 .nodes = qcm2290_bimc_nodes, 1197 1199 .num_nodes = ARRAY_SIZE(qcm2290_bimc_nodes), 1200 + .bus_clk_desc = &bimc_clk, 1198 1201 .regmap_cfg = &qcm2290_bimc_regmap_config, 1199 1202 /* M_REG_BASE() in vendor msm_bus_bimc_adhoc driver */ 1200 1203 .qos_offset = 0x8000, ··· 1251 1252 .type = QCOM_ICC_NOC, 1252 1253 .nodes = qcm2290_cnoc_nodes, 1253 1254 .num_nodes = ARRAY_SIZE(qcm2290_cnoc_nodes), 1255 + .bus_clk_desc = &bus_1_clk, 1254 1256 .regmap_cfg = &qcm2290_cnoc_regmap_config, 1255 1257 }; 1256 1258 ··· 1293 1293 .type = QCOM_ICC_QNOC, 1294 1294 .nodes = qcm2290_snoc_nodes, 1295 1295 .num_nodes = ARRAY_SIZE(qcm2290_snoc_nodes), 1296 + .bus_clk_desc = &bus_2_clk, 1296 1297 .regmap_cfg = &qcm2290_snoc_regmap_config, 1297 1298 /* Vendor DT node fab-sys_noc property 'qcom,base-offset' */ 1298 1299 .qos_offset = 0x15000, ··· 1308 1307 .type = QCOM_ICC_QNOC, 1309 1308 .nodes = qcm2290_qup_virt_nodes, 1310 1309 .num_nodes = ARRAY_SIZE(qcm2290_qup_virt_nodes), 1310 + .bus_clk_desc = &qup_clk, 1311 1311 }; 1312 1312 1313 1313 static struct qcom_icc_node * const qcm2290_mmnrt_virt_nodes[] = { ··· 1322 1320 .type = QCOM_ICC_QNOC, 1323 1321 .nodes = qcm2290_mmnrt_virt_nodes, 1324 1322 .num_nodes = ARRAY_SIZE(qcm2290_mmnrt_virt_nodes), 1323 + .bus_clk_desc = &mmaxi_0_clk, 1325 1324 .regmap_cfg = &qcm2290_snoc_regmap_config, 1326 1325 .qos_offset = 0x15000, 1327 1326 }; ··· 1337 1334 .type = QCOM_ICC_QNOC, 1338 1335 .nodes = qcm2290_mmrt_virt_nodes, 1339 1336 .num_nodes = ARRAY_SIZE(qcm2290_mmrt_virt_nodes), 1337 + .bus_clk_desc = &mmaxi_1_clk, 1340 1338 .regmap_cfg = &qcm2290_snoc_regmap_config, 1341 1339 .qos_offset = 0x15000, 1342 1340 };
+3 -2
drivers/interconnect/qcom/qcs404.c
··· 4 4 */ 5 5 6 6 #include <dt-bindings/interconnect/qcom,qcs404.h> 7 - #include <linux/clk.h> 8 7 #include <linux/device.h> 9 8 #include <linux/interconnect-provider.h> 10 9 #include <linux/io.h> ··· 12 13 #include <linux/of_device.h> 13 14 14 15 15 - #include "smd-rpm.h" 16 16 #include "icc-rpm.h" 17 17 18 18 enum { ··· 983 985 }; 984 986 985 987 static const struct qcom_icc_desc qcs404_bimc = { 988 + .bus_clk_desc = &bimc_clk, 986 989 .nodes = qcs404_bimc_nodes, 987 990 .num_nodes = ARRAY_SIZE(qcs404_bimc_nodes), 988 991 }; ··· 1038 1039 }; 1039 1040 1040 1041 static const struct qcom_icc_desc qcs404_pcnoc = { 1042 + .bus_clk_desc = &bus_0_clk, 1041 1043 .nodes = qcs404_pcnoc_nodes, 1042 1044 .num_nodes = ARRAY_SIZE(qcs404_pcnoc_nodes), 1043 1045 }; ··· 1067 1067 }; 1068 1068 1069 1069 static const struct qcom_icc_desc qcs404_snoc = { 1070 + .bus_clk_desc = &bus_1_clk, 1070 1071 .nodes = qcs404_snoc_nodes, 1071 1072 .num_nodes = ARRAY_SIZE(qcs404_snoc_nodes), 1072 1073 };
+5 -3
drivers/interconnect/qcom/sdm660.c
··· 5 5 */ 6 6 7 7 #include <dt-bindings/interconnect/qcom,sdm660.h> 8 - #include <linux/clk.h> 9 8 #include <linux/device.h> 10 9 #include <linux/interconnect-provider.h> 11 10 #include <linux/io.h> ··· 16 17 #include <linux/slab.h> 17 18 18 19 #include "icc-rpm.h" 19 - #include "smd-rpm.h" 20 20 21 21 enum { 22 22 SDM660_MASTER_IPA = 1, ··· 1510 1512 .type = QCOM_ICC_NOC, 1511 1513 .nodes = sdm660_a2noc_nodes, 1512 1514 .num_nodes = ARRAY_SIZE(sdm660_a2noc_nodes), 1515 + .bus_clk_desc = &aggre2_clk, 1513 1516 .intf_clocks = a2noc_intf_clocks, 1514 1517 .num_intf_clocks = ARRAY_SIZE(a2noc_intf_clocks), 1515 1518 .regmap_cfg = &sdm660_a2noc_regmap_config, ··· 1539 1540 .type = QCOM_ICC_BIMC, 1540 1541 .nodes = sdm660_bimc_nodes, 1541 1542 .num_nodes = ARRAY_SIZE(sdm660_bimc_nodes), 1543 + .bus_clk_desc = &bimc_clk, 1542 1544 .regmap_cfg = &sdm660_bimc_regmap_config, 1543 1545 }; 1544 1546 ··· 1594 1594 .type = QCOM_ICC_NOC, 1595 1595 .nodes = sdm660_cnoc_nodes, 1596 1596 .num_nodes = ARRAY_SIZE(sdm660_cnoc_nodes), 1597 + .bus_clk_desc = &bus_2_clk, 1597 1598 .regmap_cfg = &sdm660_cnoc_regmap_config, 1598 1599 }; 1599 1600 ··· 1617 1616 .nodes = sdm660_gnoc_nodes, 1618 1617 .num_nodes = ARRAY_SIZE(sdm660_gnoc_nodes), 1619 1618 .regmap_cfg = &sdm660_gnoc_regmap_config, 1620 - .no_clk_scaling = true, 1621 1619 }; 1622 1620 1623 1621 static struct qcom_icc_node * const sdm660_mnoc_nodes[] = { ··· 1656 1656 .type = QCOM_ICC_NOC, 1657 1657 .nodes = sdm660_mnoc_nodes, 1658 1658 .num_nodes = ARRAY_SIZE(sdm660_mnoc_nodes), 1659 + .bus_clk_desc = &mmaxi_0_clk, 1659 1660 .intf_clocks = mm_intf_clocks, 1660 1661 .num_intf_clocks = ARRAY_SIZE(mm_intf_clocks), 1661 1662 .regmap_cfg = &sdm660_mnoc_regmap_config, ··· 1694 1693 .type = QCOM_ICC_NOC, 1695 1694 .nodes = sdm660_snoc_nodes, 1696 1695 .num_nodes = ARRAY_SIZE(sdm660_snoc_nodes), 1696 + .bus_clk_desc = &bus_1_clk, 1697 1697 .regmap_cfg = &sdm660_snoc_regmap_config, 1698 1698 }; 1699 1699
+22 -1
drivers/interconnect/qcom/smd-rpm.c
··· 13 13 #include <linux/platform_device.h> 14 14 #include <linux/soc/qcom/smd-rpm.h> 15 15 16 - #include "smd-rpm.h" 16 + #include "icc-rpm.h" 17 17 18 18 #define RPM_KEY_BW 0x00007762 19 + #define QCOM_RPM_SMD_KEY_RATE 0x007a484b 19 20 20 21 static struct qcom_smd_rpm *icc_smd_rpm; 21 22 ··· 44 43 sizeof(req)); 45 44 } 46 45 EXPORT_SYMBOL_GPL(qcom_icc_rpm_smd_send); 46 + 47 + int qcom_icc_rpm_set_bus_rate(const struct rpm_clk_resource *clk, int ctx, u32 rate) 48 + { 49 + struct clk_smd_rpm_req req = { 50 + .key = cpu_to_le32(QCOM_RPM_SMD_KEY_RATE), 51 + .nbytes = cpu_to_le32(sizeof(u32)), 52 + }; 53 + 54 + /* Branch clocks are only on/off */ 55 + if (clk->branch) 56 + rate = !!rate; 57 + 58 + req.value = cpu_to_le32(rate); 59 + return qcom_rpm_smd_write(icc_smd_rpm, 60 + ctx, 61 + clk->resource_type, 62 + clk->clock_id, 63 + &req, sizeof(req)); 64 + } 65 + EXPORT_SYMBOL_GPL(qcom_icc_rpm_set_bus_rate); 47 66 48 67 static int qcom_icc_rpm_smd_remove(struct platform_device *pdev) 49 68 {
-15
drivers/interconnect/qcom/smd-rpm.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0 */ 2 - /* 3 - * Copyright (c) 2019, Linaro Ltd. 4 - * Author: Georgi Djakov <georgi.djakov@linaro.org> 5 - */ 6 - 7 - #ifndef __DRIVERS_INTERCONNECT_QCOM_SMD_RPM_H 8 - #define __DRIVERS_INTERCONNECT_QCOM_SMD_RPM_H 9 - 10 - #include <linux/soc/qcom/smd-rpm.h> 11 - 12 - bool qcom_icc_rpm_smd_available(void); 13 - int qcom_icc_rpm_smd_send(int ctx, int rsc_type, int id, u32 val); 14 - 15 - #endif
+1 -1
drivers/phy/qualcomm/phy-qcom-edp.c
··· 746 746 data = devm_kzalloc(edp->dev, struct_size(data, hws, 2), GFP_KERNEL); 747 747 if (!data) 748 748 return -ENOMEM; 749 + data->num = 2; 749 750 750 751 snprintf(name, sizeof(name), "%s::link_clk", dev_name(edp->dev)); 751 752 init.ops = &qcom_edp_dp_link_clk_ops; ··· 766 765 767 766 data->hws[0] = &edp->dp_link_hw; 768 767 data->hws[1] = &edp->dp_pixel_hw; 769 - data->num = 2; 770 768 771 769 return devm_of_clk_add_hw_provider(edp->dev, of_clk_hw_onecell_get, data); 772 770 }
+30
drivers/reset/starfive/reset-starfive-jh7110.c
··· 31 31 .status_offset = 0x3C, 32 32 }; 33 33 34 + static const struct jh7110_reset_info jh7110_stg_info = { 35 + .nr_resets = JH7110_STGRST_END, 36 + .assert_offset = 0x74, 37 + .status_offset = 0x78, 38 + }; 39 + 40 + static const struct jh7110_reset_info jh7110_isp_info = { 41 + .nr_resets = JH7110_ISPRST_END, 42 + .assert_offset = 0x38, 43 + .status_offset = 0x3C, 44 + }; 45 + 46 + static const struct jh7110_reset_info jh7110_vout_info = { 47 + .nr_resets = JH7110_VOUTRST_END, 48 + .assert_offset = 0x48, 49 + .status_offset = 0x4C, 50 + }; 51 + 34 52 static int jh7110_reset_probe(struct auxiliary_device *adev, 35 53 const struct auxiliary_device_id *id) 36 54 { ··· 75 57 { 76 58 .name = "clk_starfive_jh7110_sys.rst-aon", 77 59 .driver_data = (kernel_ulong_t)&jh7110_aon_info, 60 + }, 61 + { 62 + .name = "clk_starfive_jh7110_sys.rst-stg", 63 + .driver_data = (kernel_ulong_t)&jh7110_stg_info, 64 + }, 65 + { 66 + .name = "clk_starfive_jh7110_sys.rst-isp", 67 + .driver_data = (kernel_ulong_t)&jh7110_isp_info, 68 + }, 69 + { 70 + .name = "clk_starfive_jh7110_sys.rst-vo", 71 + .driver_data = (kernel_ulong_t)&jh7110_vout_info, 78 72 }, 79 73 { /* sentinel */ } 80 74 };
+1 -16
drivers/soc/qcom/smd-rpm.c
··· 19 19 /** 20 20 * struct qcom_smd_rpm - state of the rpm device driver 21 21 * @rpm_channel: reference to the smd channel 22 - * @icc: interconnect proxy device 23 22 * @dev: rpm device 24 23 * @ack: completion for acks 25 24 * @lock: mutual exclusion around the send/complete pair ··· 26 27 */ 27 28 struct qcom_smd_rpm { 28 29 struct rpmsg_endpoint *rpm_channel; 29 - struct platform_device *icc; 30 30 struct device *dev; 31 31 32 32 struct completion ack; ··· 195 197 static int qcom_smd_rpm_probe(struct rpmsg_device *rpdev) 196 198 { 197 199 struct qcom_smd_rpm *rpm; 198 - int ret; 199 200 200 201 if (!rpdev->dev.of_node) 201 202 return -EINVAL; ··· 210 213 rpm->rpm_channel = rpdev->ept; 211 214 dev_set_drvdata(&rpdev->dev, rpm); 212 215 213 - rpm->icc = platform_device_register_data(&rpdev->dev, "icc_smd_rpm", -1, 214 - NULL, 0); 215 - if (IS_ERR(rpm->icc)) 216 - return PTR_ERR(rpm->icc); 217 - 218 - ret = of_platform_populate(rpdev->dev.of_node, NULL, NULL, &rpdev->dev); 219 - if (ret) 220 - platform_device_unregister(rpm->icc); 221 - 222 - return ret; 216 + return of_platform_populate(rpdev->dev.of_node, NULL, NULL, &rpdev->dev); 223 217 } 224 218 225 219 static void qcom_smd_rpm_remove(struct rpmsg_device *rpdev) 226 220 { 227 - struct qcom_smd_rpm *rpm = dev_get_drvdata(&rpdev->dev); 228 - 229 - platform_device_unregister(rpm->icc); 230 221 of_platform_depopulate(&rpdev->dev); 231 222 } 232 223
+53
include/dt-bindings/clock/amlogic,a1-peripherals-clkc.h
··· 10 10 #ifndef __A1_PERIPHERALS_CLKC_H 11 11 #define __A1_PERIPHERALS_CLKC_H 12 12 13 + #define CLKID_XTAL_IN 0 13 14 #define CLKID_FIXPLL_IN 1 14 15 #define CLKID_USB_PHY_IN 2 15 16 #define CLKID_USB_CTRL_IN 3 ··· 71 70 #define CLKID_CPU_CTRL 58 72 71 #define CLKID_ROM 59 73 72 #define CLKID_PROC_I2C 60 73 + #define CLKID_DSPA_SEL 61 74 + #define CLKID_DSPB_SEL 62 74 75 #define CLKID_DSPA_EN 63 75 76 #define CLKID_DSPA_EN_NIC 64 76 77 #define CLKID_DSPB_EN 65 ··· 84 81 #define CLKID_12M 71 85 82 #define CLKID_FCLK_DIV2_DIVN 72 86 83 #define CLKID_GEN 73 84 + #define CLKID_SARADC_SEL 74 87 85 #define CLKID_SARADC 75 88 86 #define CLKID_PWM_A 76 89 87 #define CLKID_PWM_B 77 ··· 99 95 #define CLKID_SD_EMMC 86 100 96 #define CLKID_PSRAM 87 101 97 #define CLKID_DMC 88 98 + #define CLKID_SYS_A_SEL 89 99 + #define CLKID_SYS_A_DIV 90 100 + #define CLKID_SYS_A 91 101 + #define CLKID_SYS_B_SEL 92 102 + #define CLKID_SYS_B_DIV 93 103 + #define CLKID_SYS_B 94 102 104 #define CLKID_DSPA_A_SEL 95 105 + #define CLKID_DSPA_A_DIV 96 106 + #define CLKID_DSPA_A 97 103 107 #define CLKID_DSPA_B_SEL 98 108 + #define CLKID_DSPA_B_DIV 99 109 + #define CLKID_DSPA_B 100 104 110 #define CLKID_DSPB_A_SEL 101 111 + #define CLKID_DSPB_A_DIV 102 112 + #define CLKID_DSPB_A 103 105 113 #define CLKID_DSPB_B_SEL 104 114 + #define CLKID_DSPB_B_DIV 105 115 + #define CLKID_DSPB_B 106 116 + #define CLKID_RTC_32K_IN 107 117 + #define CLKID_RTC_32K_DIV 108 118 + #define CLKID_RTC_32K_XTAL 109 119 + #define CLKID_RTC_32K_SEL 110 120 + #define CLKID_CECB_32K_IN 111 121 + #define CLKID_CECB_32K_DIV 112 106 122 #define CLKID_CECB_32K_SEL_PRE 113 107 123 #define CLKID_CECB_32K_SEL 114 124 + #define CLKID_CECA_32K_IN 115 125 + #define CLKID_CECA_32K_DIV 116 108 126 #define CLKID_CECA_32K_SEL_PRE 117 109 127 #define CLKID_CECA_32K_SEL 118 128 + #define CLKID_DIV2_PRE 119 129 + #define CLKID_24M_DIV2 120 110 130 #define CLKID_GEN_SEL 121 131 + #define CLKID_GEN_DIV 122 132 + #define CLKID_SARADC_DIV 123 111 133 #define CLKID_PWM_A_SEL 124 134 + #define CLKID_PWM_A_DIV 125 112 135 #define CLKID_PWM_B_SEL 126 136 + #define CLKID_PWM_B_DIV 127 113 137 #define CLKID_PWM_C_SEL 128 138 + #define CLKID_PWM_C_DIV 129 114 139 #define CLKID_PWM_D_SEL 130 140 + #define CLKID_PWM_D_DIV 131 115 141 #define CLKID_PWM_E_SEL 132 142 + #define CLKID_PWM_E_DIV 133 116 143 #define CLKID_PWM_F_SEL 134 144 + #define CLKID_PWM_F_DIV 135 145 + #define CLKID_SPICC_SEL 136 146 + #define CLKID_SPICC_DIV 137 147 + #define CLKID_SPICC_SEL2 138 148 + #define CLKID_TS_DIV 139 149 + #define CLKID_SPIFC_SEL 140 150 + #define CLKID_SPIFC_DIV 141 151 + #define CLKID_SPIFC_SEL2 142 152 + #define CLKID_USB_BUS_SEL 143 153 + #define CLKID_USB_BUS_DIV 144 154 + #define CLKID_SD_EMMC_SEL 145 155 + #define CLKID_SD_EMMC_DIV 146 117 156 #define CLKID_SD_EMMC_SEL2 147 157 + #define CLKID_PSRAM_SEL 148 158 + #define CLKID_PSRAM_DIV 149 159 + #define CLKID_PSRAM_SEL2 150 160 + #define CLKID_DMC_SEL 151 161 + #define CLKID_DMC_DIV 152 162 + #define CLKID_DMC_SEL2 153 118 163 119 164 #endif /* __A1_PERIPHERALS_CLKC_H */
+5
include/dt-bindings/clock/amlogic,a1-pll-clkc.h
··· 10 10 #ifndef __A1_PLL_CLKC_H 11 11 #define __A1_PLL_CLKC_H 12 12 13 + #define CLKID_FIXED_PLL_DCO 0 13 14 #define CLKID_FIXED_PLL 1 15 + #define CLKID_FCLK_DIV2_DIV 2 16 + #define CLKID_FCLK_DIV3_DIV 3 17 + #define CLKID_FCLK_DIV5_DIV 4 18 + #define CLKID_FCLK_DIV7_DIV 5 14 19 #define CLKID_FCLK_DIV2 6 15 20 #define CLKID_FCLK_DIV3 7 16 21 #define CLKID_FCLK_DIV5 8
+12
include/dt-bindings/clock/ast2600-clock.h
··· 90 90 /* Only list resets here that are not part of a clock gate + reset pair */ 91 91 #define ASPEED_RESET_ADC 55 92 92 #define ASPEED_RESET_JTAG_MASTER2 54 93 + 94 + #define ASPEED_RESET_MAC4 53 95 + #define ASPEED_RESET_MAC3 52 96 + 97 + #define ASPEED_RESET_I3C5 45 98 + #define ASPEED_RESET_I3C4 44 99 + #define ASPEED_RESET_I3C3 43 100 + #define ASPEED_RESET_I3C2 42 101 + #define ASPEED_RESET_I3C1 41 102 + #define ASPEED_RESET_I3C0 40 103 + #define ASPEED_RESET_I3C 39 93 104 #define ASPEED_RESET_I3C_DMA 39 105 + 94 106 #define ASPEED_RESET_PWM 37 95 107 #define ASPEED_RESET_PECI 36 96 108 #define ASPEED_RESET_MII 35
+65
include/dt-bindings/clock/axg-audio-clkc.h
··· 37 37 #define AUD_CLKID_SPDIFIN_CLK 56 38 38 #define AUD_CLKID_PDM_DCLK 57 39 39 #define AUD_CLKID_PDM_SYSCLK 58 40 + #define AUD_CLKID_MST_A_MCLK_SEL 59 41 + #define AUD_CLKID_MST_B_MCLK_SEL 60 42 + #define AUD_CLKID_MST_C_MCLK_SEL 61 43 + #define AUD_CLKID_MST_D_MCLK_SEL 62 44 + #define AUD_CLKID_MST_E_MCLK_SEL 63 45 + #define AUD_CLKID_MST_F_MCLK_SEL 64 46 + #define AUD_CLKID_MST_A_MCLK_DIV 65 47 + #define AUD_CLKID_MST_B_MCLK_DIV 66 48 + #define AUD_CLKID_MST_C_MCLK_DIV 67 49 + #define AUD_CLKID_MST_D_MCLK_DIV 68 50 + #define AUD_CLKID_MST_E_MCLK_DIV 69 51 + #define AUD_CLKID_MST_F_MCLK_DIV 70 52 + #define AUD_CLKID_SPDIFOUT_CLK_SEL 71 53 + #define AUD_CLKID_SPDIFOUT_CLK_DIV 72 54 + #define AUD_CLKID_SPDIFIN_CLK_SEL 73 55 + #define AUD_CLKID_SPDIFIN_CLK_DIV 74 56 + #define AUD_CLKID_PDM_DCLK_SEL 75 57 + #define AUD_CLKID_PDM_DCLK_DIV 76 58 + #define AUD_CLKID_PDM_SYSCLK_SEL 77 59 + #define AUD_CLKID_PDM_SYSCLK_DIV 78 40 60 #define AUD_CLKID_MST_A_SCLK 79 41 61 #define AUD_CLKID_MST_B_SCLK 80 42 62 #define AUD_CLKID_MST_C_SCLK 81 ··· 69 49 #define AUD_CLKID_MST_D_LRCLK 89 70 50 #define AUD_CLKID_MST_E_LRCLK 90 71 51 #define AUD_CLKID_MST_F_LRCLK 91 52 + #define AUD_CLKID_MST_A_SCLK_PRE_EN 92 53 + #define AUD_CLKID_MST_B_SCLK_PRE_EN 93 54 + #define AUD_CLKID_MST_C_SCLK_PRE_EN 94 55 + #define AUD_CLKID_MST_D_SCLK_PRE_EN 95 56 + #define AUD_CLKID_MST_E_SCLK_PRE_EN 96 57 + #define AUD_CLKID_MST_F_SCLK_PRE_EN 97 58 + #define AUD_CLKID_MST_A_SCLK_DIV 98 59 + #define AUD_CLKID_MST_B_SCLK_DIV 99 60 + #define AUD_CLKID_MST_C_SCLK_DIV 100 61 + #define AUD_CLKID_MST_D_SCLK_DIV 101 62 + #define AUD_CLKID_MST_E_SCLK_DIV 102 63 + #define AUD_CLKID_MST_F_SCLK_DIV 103 64 + #define AUD_CLKID_MST_A_SCLK_POST_EN 104 65 + #define AUD_CLKID_MST_B_SCLK_POST_EN 105 66 + #define AUD_CLKID_MST_C_SCLK_POST_EN 106 67 + #define AUD_CLKID_MST_D_SCLK_POST_EN 107 68 + #define AUD_CLKID_MST_E_SCLK_POST_EN 108 69 + #define AUD_CLKID_MST_F_SCLK_POST_EN 109 70 + #define AUD_CLKID_MST_A_LRCLK_DIV 110 71 + #define AUD_CLKID_MST_B_LRCLK_DIV 111 72 + #define AUD_CLKID_MST_C_LRCLK_DIV 112 73 + #define AUD_CLKID_MST_D_LRCLK_DIV 113 74 + #define AUD_CLKID_MST_E_LRCLK_DIV 114 75 + #define AUD_CLKID_MST_F_LRCLK_DIV 115 72 76 #define AUD_CLKID_TDMIN_A_SCLK_SEL 116 73 77 #define AUD_CLKID_TDMIN_B_SCLK_SEL 117 74 78 #define AUD_CLKID_TDMIN_C_SCLK_SEL 118 ··· 114 70 #define AUD_CLKID_TDMOUT_A_LRCLK 134 115 71 #define AUD_CLKID_TDMOUT_B_LRCLK 135 116 72 #define AUD_CLKID_TDMOUT_C_LRCLK 136 73 + #define AUD_CLKID_TDMIN_A_SCLK_PRE_EN 137 74 + #define AUD_CLKID_TDMIN_B_SCLK_PRE_EN 138 75 + #define AUD_CLKID_TDMIN_C_SCLK_PRE_EN 139 76 + #define AUD_CLKID_TDMIN_LB_SCLK_PRE_EN 140 77 + #define AUD_CLKID_TDMOUT_A_SCLK_PRE_EN 141 78 + #define AUD_CLKID_TDMOUT_B_SCLK_PRE_EN 142 79 + #define AUD_CLKID_TDMOUT_C_SCLK_PRE_EN 143 80 + #define AUD_CLKID_TDMIN_A_SCLK_POST_EN 144 81 + #define AUD_CLKID_TDMIN_B_SCLK_POST_EN 145 82 + #define AUD_CLKID_TDMIN_C_SCLK_POST_EN 146 83 + #define AUD_CLKID_TDMIN_LB_SCLK_POST_EN 147 84 + #define AUD_CLKID_TDMOUT_A_SCLK_POST_EN 148 85 + #define AUD_CLKID_TDMOUT_B_SCLK_POST_EN 149 86 + #define AUD_CLKID_TDMOUT_C_SCLK_POST_EN 150 117 87 #define AUD_CLKID_SPDIFOUT_B 151 118 88 #define AUD_CLKID_SPDIFOUT_B_CLK 152 89 + #define AUD_CLKID_SPDIFOUT_B_CLK_SEL 153 90 + #define AUD_CLKID_SPDIFOUT_B_CLK_DIV 154 119 91 #define AUD_CLKID_TDM_MCLK_PAD0 155 120 92 #define AUD_CLKID_TDM_MCLK_PAD1 156 121 93 #define AUD_CLKID_TDM_LRCLK_PAD0 157 ··· 150 90 #define AUD_CLKID_FRDDR_D 170 151 91 #define AUD_CLKID_TODDR_D 171 152 92 #define AUD_CLKID_LOOPBACK_B 172 93 + #define AUD_CLKID_CLK81_EN 173 94 + #define AUD_CLKID_SYSCLK_A_DIV 174 95 + #define AUD_CLKID_SYSCLK_B_DIV 175 96 + #define AUD_CLKID_SYSCLK_A_EN 176 97 + #define AUD_CLKID_SYSCLK_B_EN 177 153 98 154 99 #endif /* __AXG_AUDIO_CLKC_BINDINGS_H */
+48
include/dt-bindings/clock/axg-clkc.h
··· 16 16 #define CLKID_FCLK_DIV5 5 17 17 #define CLKID_FCLK_DIV7 6 18 18 #define CLKID_GP0_PLL 7 19 + #define CLKID_MPEG_SEL 8 20 + #define CLKID_MPEG_DIV 9 19 21 #define CLKID_CLK81 10 20 22 #define CLKID_MPLL0 11 21 23 #define CLKID_MPLL1 12 ··· 69 67 #define CLKID_AO_I2C 58 70 68 #define CLKID_SD_EMMC_B_CLK0 59 71 69 #define CLKID_SD_EMMC_C_CLK0 60 70 + #define CLKID_SD_EMMC_B_CLK0_SEL 61 71 + #define CLKID_SD_EMMC_B_CLK0_DIV 62 72 + #define CLKID_SD_EMMC_C_CLK0_SEL 63 73 + #define CLKID_SD_EMMC_C_CLK0_DIV 64 74 + #define CLKID_MPLL0_DIV 65 75 + #define CLKID_MPLL1_DIV 66 76 + #define CLKID_MPLL2_DIV 67 77 + #define CLKID_MPLL3_DIV 68 72 78 #define CLKID_HIFI_PLL 69 79 + #define CLKID_MPLL_PREDIV 70 80 + #define CLKID_FCLK_DIV2_DIV 71 81 + #define CLKID_FCLK_DIV3_DIV 72 82 + #define CLKID_FCLK_DIV4_DIV 73 83 + #define CLKID_FCLK_DIV5_DIV 74 84 + #define CLKID_FCLK_DIV7_DIV 75 85 + #define CLKID_PCIE_PLL 76 86 + #define CLKID_PCIE_MUX 77 87 + #define CLKID_PCIE_REF 78 73 88 #define CLKID_PCIE_CML_EN0 79 74 89 #define CLKID_PCIE_CML_EN1 80 90 + #define CLKID_GEN_CLK_SEL 82 91 + #define CLKID_GEN_CLK_DIV 83 75 92 #define CLKID_GEN_CLK 84 93 + #define CLKID_SYS_PLL_DCO 85 94 + #define CLKID_FIXED_PLL_DCO 86 95 + #define CLKID_GP0_PLL_DCO 87 96 + #define CLKID_HIFI_PLL_DCO 88 97 + #define CLKID_PCIE_PLL_DCO 89 98 + #define CLKID_PCIE_PLL_OD 90 99 + #define CLKID_VPU_0_DIV 91 76 100 #define CLKID_VPU_0_SEL 92 77 101 #define CLKID_VPU_0 93 102 + #define CLKID_VPU_1_DIV 94 78 103 #define CLKID_VPU_1_SEL 95 79 104 #define CLKID_VPU_1 96 80 105 #define CLKID_VPU 97 106 + #define CLKID_VAPB_0_DIV 98 81 107 #define CLKID_VAPB_0_SEL 99 82 108 #define CLKID_VAPB_0 100 109 + #define CLKID_VAPB_1_DIV 101 83 110 #define CLKID_VAPB_1_SEL 102 84 111 #define CLKID_VAPB_1 103 85 112 #define CLKID_VAPB_SEL 104 86 113 #define CLKID_VAPB 105 87 114 #define CLKID_VCLK 106 88 115 #define CLKID_VCLK2 107 116 + #define CLKID_VCLK_SEL 108 117 + #define CLKID_VCLK2_SEL 109 118 + #define CLKID_VCLK_INPUT 110 119 + #define CLKID_VCLK2_INPUT 111 120 + #define CLKID_VCLK_DIV 112 121 + #define CLKID_VCLK2_DIV 113 122 + #define CLKID_VCLK_DIV2_EN 114 123 + #define CLKID_VCLK_DIV4_EN 115 124 + #define CLKID_VCLK_DIV6_EN 116 125 + #define CLKID_VCLK_DIV12_EN 117 126 + #define CLKID_VCLK2_DIV2_EN 118 127 + #define CLKID_VCLK2_DIV4_EN 119 128 + #define CLKID_VCLK2_DIV6_EN 120 129 + #define CLKID_VCLK2_DIV12_EN 121 89 130 #define CLKID_VCLK_DIV1 122 90 131 #define CLKID_VCLK_DIV2 123 91 132 #define CLKID_VCLK_DIV4 124 ··· 139 94 #define CLKID_VCLK2_DIV4 129 140 95 #define CLKID_VCLK2_DIV6 130 141 96 #define CLKID_VCLK2_DIV12 131 97 + #define CLKID_CTS_ENCL_SEL 132 142 98 #define CLKID_CTS_ENCL 133 99 + #define CLKID_VDIN_MEAS_SEL 134 100 + #define CLKID_VDIN_MEAS_DIV 135 143 101 #define CLKID_VDIN_MEAS 136 144 102 145 103 #endif /* __AXG_CLKC_H */
-18
include/dt-bindings/clock/exynos3250.h
··· 257 257 #define CLK_SCLK_MMC2 249 258 258 259 259 /* 260 - * Total number of clocks of main CMU. 261 - * NOTE: Must be equal to last clock ID increased by one. 262 - */ 263 - #define CLK_NR_CLKS 250 264 - 265 - /* 266 260 * CMU DMC 267 261 */ 268 262 ··· 276 282 #define CLK_DIV_DMC_PRE 18 277 283 #define CLK_DIV_DMCP 19 278 284 #define CLK_DIV_DMCD 20 279 - 280 - /* 281 - * Total number of clocks of main CMU. 282 - * NOTE: Must be equal to last clock ID increased by one. 283 - */ 284 - #define NR_CLKS_DMC 21 285 285 286 286 /* 287 287 * CMU ISP ··· 331 343 #define CLK_SMMU_ISPCX 45 332 344 #define CLK_ASYNCAXIM 46 333 345 #define CLK_SCLK_MPWM_ISP 47 334 - 335 - /* 336 - * Total number of clocks of CMU_ISP. 337 - * NOTE: Must be equal to last clock ID increased by one. 338 - */ 339 - #define NR_CLKS_ISP 48 340 346 341 347 #endif /* _DT_BINDINGS_CLOCK_SAMSUNG_EXYNOS3250_CLOCK_H */
-5
include/dt-bindings/clock/exynos4.h
··· 239 239 #define CLK_DIV_GDR 460 240 240 #define CLK_DIV_CORE2 461 241 241 242 - /* must be greater than maximal clock id */ 243 - #define CLK_NR_CLKS 462 244 - 245 242 /* Exynos4x12 ISP clocks */ 246 243 #define CLK_ISP_FIMC_ISP 1 247 244 #define CLK_ISP_FIMC_DRC 2 ··· 271 274 #define CLK_ISP_DIV_ISP1 28 272 275 #define CLK_ISP_DIV_MCUISP0 29 273 276 #define CLK_ISP_DIV_MCUISP1 30 274 - 275 - #define CLK_NR_ISP_CLKS 31 276 277 277 278 #endif /* _DT_BINDINGS_CLOCK_EXYNOS_4_H */
-3
include/dt-bindings/clock/exynos5250.h
··· 177 177 #define CLK_MOUT_MPLL 1029 178 178 #define CLK_MOUT_VPLLSRC 1030 179 179 180 - /* must be greater than maximal clock id */ 181 - #define CLK_NR_CLKS 1031 182 - 183 180 #endif /* _DT_BINDINGS_CLOCK_EXYNOS_5250_H */
-25
include/dt-bindings/clock/exynos5260-clk.h
··· 137 137 #define PHYCLK_USBHOST20_PHY_CLK48MOHCI 122 138 138 #define PHYCLK_USBDRD30_UDRD30_PIPE_PCLK 123 139 139 #define PHYCLK_USBDRD30_UDRD30_PHYCLOCK 124 140 - #define TOP_NR_CLK 125 141 - 142 140 143 141 /* List Of Clocks For CMU_EGL */ 144 142 ··· 151 153 #define EGL_DOUT_ACLK_EGL 9 152 154 #define EGL_DOUT_EGL2 10 153 155 #define EGL_DOUT_EGL1 11 154 - #define EGL_NR_CLK 12 155 - 156 156 157 157 /* List Of Clocks For CMU_KFC */ 158 158 ··· 164 168 #define KFC_DOUT_KFC_ATCLK 8 165 169 #define KFC_DOUT_KFC2 9 166 170 #define KFC_DOUT_KFC1 10 167 - #define KFC_NR_CLK 11 168 - 169 171 170 172 /* List Of Clocks For CMU_MIF */ 171 173 ··· 194 200 #define MIF_CLK_INTMEM 25 195 201 #define MIF_SCLK_LPDDR3PHY_WRAP_U1 26 196 202 #define MIF_SCLK_LPDDR3PHY_WRAP_U0 27 197 - #define MIF_NR_CLK 28 198 - 199 203 200 204 /* List Of Clocks For CMU_G3D */ 201 205 ··· 203 211 #define G3D_DOUT_ACLK_G3D 4 204 212 #define G3D_CLK_G3D_HPM 5 205 213 #define G3D_CLK_G3D 6 206 - #define G3D_NR_CLK 7 207 - 208 214 209 215 /* List Of Clocks For CMU_AUD */ 210 216 ··· 221 231 #define AUD_SCLK_AUD_UART 13 222 232 #define AUD_SCLK_PCM 14 223 233 #define AUD_SCLK_I2S 15 224 - #define AUD_NR_CLK 16 225 - 226 234 227 235 /* List Of Clocks For CMU_MFC */ 228 236 ··· 229 241 #define MFC_CLK_MFC 3 230 242 #define MFC_CLK_SMMU2_MFCM1 4 231 243 #define MFC_CLK_SMMU2_MFCM0 5 232 - #define MFC_NR_CLK 6 233 - 234 244 235 245 /* List Of Clocks For CMU_GSCL */ 236 246 ··· 258 272 #define GSCL_CLK_SMMU3_MSCL1 24 259 273 #define GSCL_SCLK_CSIS1_WRAP 25 260 274 #define GSCL_SCLK_CSIS0_WRAP 26 261 - #define GSCL_NR_CLK 27 262 - 263 275 264 276 /* List Of Clocks For CMU_FSYS */ 265 277 ··· 279 295 #define FSYS_CLK_SMMU_RTIC 16 280 296 #define FSYS_PHYCLK_USBDRD30 17 281 297 #define FSYS_PHYCLK_USBHOST20 18 282 - #define FSYS_NR_CLK 19 283 - 284 298 285 299 /* List Of Clocks For CMU_PERI */ 286 300 ··· 348 366 #define PERI_SCLK_SPDIF 64 349 367 #define PERI_SCLK_I2S 65 350 368 #define PERI_SCLK_PCM1 66 351 - #define PERI_NR_CLK 67 352 - 353 369 354 370 /* List Of Clocks For CMU_DISP */ 355 371 ··· 386 406 #define DISP_CLK_DP 33 387 407 #define DISP_SCLK_PIXEL 34 388 408 #define DISP_MOUT_HDMI_PHY_PIXEL_USER 35 389 - #define DISP_NR_CLK 36 390 - 391 409 392 410 /* List Of Clocks For CMU_G2D */ 393 411 ··· 401 423 #define G2D_CLK_SMMU_SSS 10 402 424 #define G2D_CLK_SMMU_MDMA 11 403 425 #define G2D_CLK_SMMU3_G2D 12 404 - #define G2D_NR_CLK 13 405 - 406 426 407 427 /* List Of Clocks For CMU_ISP */ 408 428 ··· 437 461 #define ISP_SCLK_SPI0_EXT 31 438 462 #define ISP_SCLK_SPI1_EXT 32 439 463 #define ISP_SCLK_UART_EXT 33 440 - #define ISP_NR_CLK 34 441 464 442 465 #endif
-2
include/dt-bindings/clock/exynos5410.h
··· 61 61 #define CLK_USBD301 367 62 62 #define CLK_SSS 471 63 63 64 - #define CLK_NR_CLKS 512 65 - 66 64 #endif /* _DT_BINDINGS_CLOCK_EXYNOS_5410_H */
-3
include/dt-bindings/clock/exynos5420.h
··· 271 271 #define CLK_DOUT_PCLK_DREX0 798 272 272 #define CLK_DOUT_PCLK_DREX1 799 273 273 274 - /* must be greater than maximal clock id */ 275 - #define CLK_NR_CLKS 800 276 - 277 274 #endif /* _DT_BINDINGS_CLOCK_EXYNOS_5420_H */
-42
include/dt-bindings/clock/exynos5433.h
··· 188 188 #define CLK_SCLK_ISP_SPI0_CAM1 252 189 189 #define CLK_SCLK_HDMI_SPDIF_DISP 253 190 190 191 - #define TOP_NR_CLK 254 192 - 193 191 /* CMU_CPIF */ 194 192 #define CLK_FOUT_MPHY_PLL 1 195 193 ··· 197 199 198 200 #define CLK_SCLK_MPHY_PLL 11 199 201 #define CLK_SCLK_UFS_MPHY 11 200 - 201 - #define CPIF_NR_CLK 12 202 202 203 203 /* CMU_MIF */ 204 204 #define CLK_FOUT_MEM0_PLL 1 ··· 392 396 #define CLK_SCLK_BUS_PLL_APOLLO 199 393 397 #define CLK_SCLK_BUS_PLL_ATLAS 200 394 398 395 - #define MIF_NR_CLK 201 396 - 397 399 /* CMU_PERIC */ 398 400 #define CLK_PCLK_SPI2 1 399 401 #define CLK_PCLK_SPI1 2 ··· 462 468 #define CLK_DIV_SCLK_SCI 70 463 469 #define CLK_DIV_SCLK_SC_IN 71 464 470 465 - #define PERIC_NR_CLK 72 466 - 467 471 /* CMU_PERIS */ 468 472 #define CLK_PCLK_HPM_APBIF 1 469 473 #define CLK_PCLK_TMU1_APBIF 2 ··· 504 512 #define CLK_SCLK_CUSTOM_EFUSE 39 505 513 #define CLK_SCLK_ANTIRBK_CNT 40 506 514 #define CLK_SCLK_OTP_CON 41 507 - 508 - #define PERIS_NR_CLK 42 509 515 510 516 /* CMU_FSYS */ 511 517 #define CLK_MOUT_ACLK_FSYS_200_USER 1 ··· 611 621 #define CLK_SCLK_USBDRD30 114 612 622 #define CLK_PCIE 115 613 623 614 - #define FSYS_NR_CLK 116 615 - 616 624 /* CMU_G2D */ 617 625 #define CLK_MUX_ACLK_G2D_266_USER 1 618 626 #define CLK_MUX_ACLK_G2D_400_USER 2 ··· 640 652 #define CLK_PCLK_SYSREG_G2D 24 641 653 #define CLK_PCLK_G2D 25 642 654 #define CLK_PCLK_SMMU_G2D 26 643 - 644 - #define G2D_NR_CLK 27 645 655 646 656 /* CMU_DISP */ 647 657 #define CLK_FOUT_DISP_PLL 1 ··· 757 771 #define CLK_PHYCLK_MIPIDPHY0_BITCLKDIV8_PHY 114 758 772 #define CLK_PHYCLK_MIPIDPHY0_RXCLKESC0_PHY 115 759 773 760 - #define DISP_NR_CLK 116 761 - 762 774 /* CMU_AUD */ 763 775 #define CLK_MOUT_AUD_PLL_USER 1 764 776 #define CLK_MOUT_SCLK_AUD_PCM 2 ··· 808 824 #define CLK_SCLK_I2S_BCLK 46 809 825 #define CLK_SCLK_AUD_I2S 47 810 826 811 - #define AUD_NR_CLK 48 812 - 813 827 /* CMU_BUS{0|1|2} */ 814 828 #define CLK_DIV_PCLK_BUS_133 1 815 829 ··· 821 839 #define CLK_MOUT_ACLK_BUS2_400_USER 8 /* Only CMU_BUS2 */ 822 840 #define CLK_ACLK_BUS2BEND_400 9 /* Only CMU_BUS2 */ 823 841 #define CLK_ACLK_BUS2RTND_400 10 /* Only CMU_BUS2 */ 824 - 825 - #define BUSx_NR_CLK 11 826 842 827 843 /* CMU_G3D */ 828 844 #define CLK_FOUT_G3D_PLL 1 ··· 844 864 #define CLK_PCLK_PMU_G3D 17 845 865 #define CLK_PCLK_SYSREG_G3D 18 846 866 #define CLK_SCLK_HPM_G3D 19 847 - 848 - #define G3D_NR_CLK 20 849 867 850 868 /* CMU_GSCL */ 851 869 #define CLK_MOUT_ACLK_GSCL_111_USER 1 ··· 875 897 #define CLK_PCLK_SMMU_GSCL0 26 876 898 #define CLK_PCLK_SMMU_GSCL1 27 877 899 #define CLK_PCLK_SMMU_GSCL2 28 878 - 879 - #define GSCL_NR_CLK 29 880 900 881 901 /* CMU_APOLLO */ 882 902 #define CLK_FOUT_APOLLO_PLL 1 ··· 910 934 #define CLK_CNTCLK_APOLLO 28 911 935 #define CLK_SCLK_HPM_APOLLO 29 912 936 #define CLK_SCLK_APOLLO 30 913 - 914 - #define APOLLO_NR_CLK 31 915 937 916 938 /* CMU_ATLAS */ 917 939 #define CLK_FOUT_ATLAS_PLL 1 ··· 955 981 #define CLK_ATCLK 38 956 982 #define CLK_SCLK_ATLAS 39 957 983 958 - #define ATLAS_NR_CLK 40 959 - 960 984 /* CMU_MSCL */ 961 985 #define CLK_MOUT_SCLK_JPEG_USER 1 962 986 #define CLK_MOUT_ACLK_MSCL_400_USER 2 ··· 988 1016 #define CLK_PCLK_SMMU_JPEG 28 989 1017 #define CLK_SCLK_JPEG 29 990 1018 991 - #define MSCL_NR_CLK 30 992 - 993 1019 /* CMU_MFC */ 994 1020 #define CLK_MOUT_ACLK_MFC_400_USER 1 995 1021 ··· 1010 1040 #define CLK_PCLK_SMMU_MFC_1 17 1011 1041 #define CLK_PCLK_SMMU_MFC_0 18 1012 1042 1013 - #define MFC_NR_CLK 19 1014 - 1015 1043 /* CMU_HEVC */ 1016 1044 #define CLK_MOUT_ACLK_HEVC_400_USER 1 1017 1045 ··· 1031 1063 #define CLK_PCLK_HEVC 16 1032 1064 #define CLK_PCLK_SMMU_HEVC_1 17 1033 1065 #define CLK_PCLK_SMMU_HEVC_0 18 1034 - 1035 - #define HEVC_NR_CLK 19 1036 1066 1037 1067 /* CMU_ISP */ 1038 1068 #define CLK_MOUT_ACLK_ISP_DIS_400_USER 1 ··· 1112 1146 #define CLK_SCLK_PIXELASYNCM_ISPD 75 1113 1147 #define CLK_SCLK_PIXELASYNCS_ISPC 76 1114 1148 #define CLK_SCLK_PIXELASYNCM_ISPC 77 1115 - 1116 - #define ISP_NR_CLK 78 1117 1149 1118 1150 /* CMU_CAM0 */ 1119 1151 #define CLK_PHYCLK_RXBYTEECLKHS0_S4_PHY 1 ··· 1249 1285 #define CLK_SCLK_PIXELASYNCM_LITE_C_INIT 132 1250 1286 #define CLK_SCLK_PIXELASYNCS_LITE_C_INIT 133 1251 1287 1252 - #define CAM0_NR_CLK 134 1253 - 1254 1288 /* CMU_CAM1 */ 1255 1289 #define CLK_PHYCLK_RXBYTEECLKHS0_S2B 1 1256 1290 ··· 1366 1404 #define CLK_ATCLK_ISP 111 1367 1405 #define CLK_SCLK_ISP_CA5 112 1368 1406 1369 - #define CAM1_NR_CLK 113 1370 - 1371 1407 /* CMU_IMEM */ 1372 1408 #define CLK_ACLK_SLIMSSS 2 1373 1409 #define CLK_PCLK_SLIMSSS 35 1374 - 1375 - #define IMEM_NR_CLK 36 1376 1410 1377 1411 #endif /* _DT_BINDINGS_CLOCK_EXYNOS5433_H */
-4
include/dt-bindings/clock/exynos7885.h
··· 69 69 #define CLK_GOUT_FSYS_MMC_EMBD 58 70 70 #define CLK_GOUT_FSYS_MMC_SDIO 59 71 71 #define CLK_GOUT_FSYS_USB30DRD 60 72 - #define TOP_NR_CLK 61 73 72 74 73 /* CMU_CORE */ 75 74 #define CLK_MOUT_CORE_BUS_USER 1 ··· 85 86 #define CLK_GOUT_TREX_P_CORE_CCLK_P_CORE 12 86 87 #define CLK_GOUT_TREX_P_CORE_PCLK 13 87 88 #define CLK_GOUT_TREX_P_CORE_PCLK_P_CORE 14 88 - #define CORE_NR_CLK 15 89 89 90 90 /* CMU_PERI */ 91 91 #define CLK_MOUT_PERI_BUS_USER 1 ··· 130 132 #define CLK_GOUT_SYSREG_PERI_PCLK 41 131 133 #define CLK_GOUT_WDT0_PCLK 42 132 134 #define CLK_GOUT_WDT1_PCLK 43 133 - #define PERI_NR_CLK 44 134 135 135 136 /* CMU_FSYS */ 136 137 #define CLK_MOUT_FSYS_BUS_USER 1 ··· 143 146 #define CLK_GOUT_MMC_EMBD_SDCLKIN 8 144 147 #define CLK_GOUT_MMC_SDIO_ACLK 9 145 148 #define CLK_GOUT_MMC_SDIO_SDCLKIN 10 146 - #define FSYS_NR_CLK 11 147 149 148 150 #endif /* _DT_BINDINGS_CLOCK_EXYNOS_7885_H */
-10
include/dt-bindings/clock/exynos850.h
··· 88 88 #define CLK_MOUT_G3D_SWITCH 76 89 89 #define CLK_GOUT_G3D_SWITCH 77 90 90 #define CLK_DOUT_G3D_SWITCH 78 91 - #define TOP_NR_CLK 79 92 91 93 92 /* CMU_APM */ 94 93 #define CLK_RCO_I3C_PMIC 1 ··· 114 115 #define CLK_GOUT_GPIO_ALIVE_PCLK 22 115 116 #define CLK_GOUT_PMU_ALIVE_PCLK 23 116 117 #define CLK_GOUT_SYSREG_APM_PCLK 24 117 - #define APM_NR_CLK 25 118 118 119 119 /* CMU_AUD */ 120 120 #define CLK_DOUT_AUD_AUDIF 1 ··· 177 179 #define IOCLK_AUDIOCDCLK6 59 178 180 #define TICK_USB 60 179 181 #define CLK_GOUT_AUD_CMU_AUD_PCLK 61 180 - #define AUD_NR_CLK 62 181 182 182 183 /* CMU_CMGP */ 183 184 #define CLK_RCO_CMGP 1 ··· 194 197 #define CLK_GOUT_CMGP_USI1_IPCLK 13 195 198 #define CLK_GOUT_CMGP_USI1_PCLK 14 196 199 #define CLK_GOUT_SYSREG_CMGP_PCLK 15 197 - #define CMGP_NR_CLK 16 198 200 199 201 /* CMU_G3D */ 200 202 #define CLK_FOUT_G3D_PLL 1 ··· 208 212 #define CLK_GOUT_G3D_BUSD_CLK 10 209 213 #define CLK_GOUT_G3D_BUSP_CLK 11 210 214 #define CLK_GOUT_G3D_SYSREG_PCLK 12 211 - #define G3D_NR_CLK 13 212 215 213 216 /* CMU_HSI */ 214 217 #define CLK_MOUT_HSI_BUS_USER 1 ··· 226 231 #define CLK_GOUT_HSI_PPMU_ACLK 14 227 232 #define CLK_GOUT_HSI_PPMU_PCLK 15 228 233 #define CLK_GOUT_HSI_CMU_HSI_PCLK 16 229 - #define HSI_NR_CLK 17 230 234 231 235 /* CMU_IS */ 232 236 #define CLK_MOUT_IS_BUS_USER 1 ··· 251 257 #define CLK_GOUT_IS_SYSMMU_IS0_CLK 21 252 258 #define CLK_GOUT_IS_SYSMMU_IS1_CLK 22 253 259 #define CLK_GOUT_IS_SYSREG_PCLK 23 254 - #define IS_NR_CLK 24 255 260 256 261 /* CMU_MFCMSCL */ 257 262 #define CLK_MOUT_MFCMSCL_MFC_USER 1 ··· 268 275 #define CLK_GOUT_MFCMSCL_PPMU_PCLK 13 269 276 #define CLK_GOUT_MFCMSCL_SYSMMU_CLK 14 270 277 #define CLK_GOUT_MFCMSCL_SYSREG_PCLK 15 271 - #define MFCMSCL_NR_CLK 16 272 278 273 279 /* CMU_PERI */ 274 280 #define CLK_MOUT_PERI_BUS_USER 1 ··· 304 312 #define CLK_GOUT_UART_PCLK 32 305 313 #define CLK_GOUT_WDT0_PCLK 33 306 314 #define CLK_GOUT_WDT1_PCLK 34 307 - #define PERI_NR_CLK 35 308 315 309 316 /* CMU_CORE */ 310 317 #define CLK_MOUT_CORE_BUS_USER 1 ··· 320 329 #define CLK_GOUT_SSS_PCLK 12 321 330 #define CLK_GOUT_GPIO_CORE_PCLK 13 322 331 #define CLK_GOUT_SYSREG_CORE_PCLK 14 323 - #define CORE_NR_CLK 15 324 332 325 333 /* CMU_DPU */ 326 334 #define CLK_MOUT_DPU_USER 1
+7
include/dt-bindings/clock/g12a-aoclkc.h
··· 26 26 #define CLKID_AO_M4_FCLK 13 27 27 #define CLKID_AO_M4_HCLK 14 28 28 #define CLKID_AO_CLK81 15 29 + #define CLKID_AO_SAR_ADC_DIV 17 29 30 #define CLKID_AO_SAR_ADC_SEL 16 30 31 #define CLKID_AO_SAR_ADC_CLK 18 31 32 #define CLKID_AO_CTS_OSCIN 19 33 + #define CLKID_AO_32K_PRE 20 34 + #define CLKID_AO_32K_DIV 21 35 + #define CLKID_AO_32K_SEL 22 32 36 #define CLKID_AO_32K 23 37 + #define CLKID_AO_CEC_PRE 24 38 + #define CLKID_AO_CEC_DIV 25 39 + #define CLKID_AO_CEC_SEL 26 33 40 #define CLKID_AO_CEC 27 34 41 #define CLKID_AO_CTS_RTC_OSCIN 28 35 42
+130
include/dt-bindings/clock/g12a-clkc.h
··· 16 16 #define CLKID_FCLK_DIV5 5 17 17 #define CLKID_FCLK_DIV7 6 18 18 #define CLKID_GP0_PLL 7 19 + #define CLKID_MPEG_SEL 8 20 + #define CLKID_MPEG_DIV 9 19 21 #define CLKID_CLK81 10 20 22 #define CLKID_MPLL0 11 21 23 #define CLKID_MPLL1 12 ··· 71 69 #define CLKID_SD_EMMC_A_CLK0 60 72 70 #define CLKID_SD_EMMC_B_CLK0 61 73 71 #define CLKID_SD_EMMC_C_CLK0 62 72 + #define CLKID_SD_EMMC_A_CLK0_SEL 63 73 + #define CLKID_SD_EMMC_A_CLK0_DIV 64 74 + #define CLKID_SD_EMMC_B_CLK0_SEL 65 75 + #define CLKID_SD_EMMC_B_CLK0_DIV 66 76 + #define CLKID_SD_EMMC_C_CLK0_SEL 67 77 + #define CLKID_SD_EMMC_C_CLK0_DIV 68 78 + #define CLKID_MPLL0_DIV 69 79 + #define CLKID_MPLL1_DIV 70 80 + #define CLKID_MPLL2_DIV 71 81 + #define CLKID_MPLL3_DIV 72 82 + #define CLKID_MPLL_PREDIV 73 74 83 #define CLKID_HIFI_PLL 74 84 + #define CLKID_FCLK_DIV2_DIV 75 85 + #define CLKID_FCLK_DIV3_DIV 76 86 + #define CLKID_FCLK_DIV4_DIV 77 87 + #define CLKID_FCLK_DIV5_DIV 78 88 + #define CLKID_FCLK_DIV7_DIV 79 75 89 #define CLKID_VCLK2_VENCI0 80 76 90 #define CLKID_VCLK2_VENCI1 81 77 91 #define CLKID_VCLK2_VENCP0 82 ··· 108 90 #define CLKID_VCLK2_VENCL 97 109 91 #define CLKID_VCLK2_OTHER1 98 110 92 #define CLKID_FCLK_DIV2P5 99 93 + #define CLKID_FCLK_DIV2P5_DIV 100 94 + #define CLKID_FIXED_PLL_DCO 101 95 + #define CLKID_SYS_PLL_DCO 102 96 + #define CLKID_GP0_PLL_DCO 103 97 + #define CLKID_HIFI_PLL_DCO 104 111 98 #define CLKID_DMA 105 112 99 #define CLKID_EFUSE 106 113 100 #define CLKID_ROM_BOOT 107 114 101 #define CLKID_RESET_SEC 108 115 102 #define CLKID_SEC_AHB_APB3 109 116 103 #define CLKID_VPU_0_SEL 110 104 + #define CLKID_VPU_0_DIV 111 117 105 #define CLKID_VPU_0 112 118 106 #define CLKID_VPU_1_SEL 113 107 + #define CLKID_VPU_1_DIV 114 119 108 #define CLKID_VPU_1 115 120 109 #define CLKID_VPU 116 121 110 #define CLKID_VAPB_0_SEL 117 111 + #define CLKID_VAPB_0_DIV 118 122 112 #define CLKID_VAPB_0 119 123 113 #define CLKID_VAPB_1_SEL 120 114 + #define CLKID_VAPB_1_DIV 121 124 115 #define CLKID_VAPB_1 122 125 116 #define CLKID_VAPB_SEL 123 126 117 #define CLKID_VAPB 124 118 + #define CLKID_HDMI_PLL_DCO 125 119 + #define CLKID_HDMI_PLL_OD 126 120 + #define CLKID_HDMI_PLL_OD2 127 127 121 #define CLKID_HDMI_PLL 128 128 122 #define CLKID_VID_PLL 129 123 + #define CLKID_VID_PLL_SEL 130 124 + #define CLKID_VID_PLL_DIV 131 125 + #define CLKID_VCLK_SEL 132 126 + #define CLKID_VCLK2_SEL 133 127 + #define CLKID_VCLK_INPUT 134 128 + #define CLKID_VCLK2_INPUT 135 129 + #define CLKID_VCLK_DIV 136 130 + #define CLKID_VCLK2_DIV 137 129 131 #define CLKID_VCLK 138 130 132 #define CLKID_VCLK2 139 133 + #define CLKID_VCLK_DIV2_EN 140 134 + #define CLKID_VCLK_DIV4_EN 141 135 + #define CLKID_VCLK_DIV6_EN 142 136 + #define CLKID_VCLK_DIV12_EN 143 137 + #define CLKID_VCLK2_DIV2_EN 144 138 + #define CLKID_VCLK2_DIV4_EN 145 139 + #define CLKID_VCLK2_DIV6_EN 146 140 + #define CLKID_VCLK2_DIV12_EN 147 131 141 #define CLKID_VCLK_DIV1 148 132 142 #define CLKID_VCLK_DIV2 149 133 143 #define CLKID_VCLK_DIV4 150 ··· 166 120 #define CLKID_VCLK2_DIV4 155 167 121 #define CLKID_VCLK2_DIV6 156 168 122 #define CLKID_VCLK2_DIV12 157 123 + #define CLKID_CTS_ENCI_SEL 158 124 + #define CLKID_CTS_ENCP_SEL 159 125 + #define CLKID_CTS_VDAC_SEL 160 126 + #define CLKID_HDMI_TX_SEL 161 169 127 #define CLKID_CTS_ENCI 162 170 128 #define CLKID_CTS_ENCP 163 171 129 #define CLKID_CTS_VDAC 164 172 130 #define CLKID_HDMI_TX 165 131 + #define CLKID_HDMI_SEL 166 132 + #define CLKID_HDMI_DIV 167 173 133 #define CLKID_HDMI 168 174 134 #define CLKID_MALI_0_SEL 169 135 + #define CLKID_MALI_0_DIV 170 175 136 #define CLKID_MALI_0 171 176 137 #define CLKID_MALI_1_SEL 172 138 + #define CLKID_MALI_1_DIV 173 177 139 #define CLKID_MALI_1 174 178 140 #define CLKID_MALI 175 141 + #define CLKID_MPLL_50M_DIV 176 179 142 #define CLKID_MPLL_50M 177 143 + #define CLKID_SYS_PLL_DIV16_EN 178 144 + #define CLKID_SYS_PLL_DIV16 179 145 + #define CLKID_CPU_CLK_DYN0_SEL 180 146 + #define CLKID_CPU_CLK_DYN0_DIV 181 147 + #define CLKID_CPU_CLK_DYN0 182 148 + #define CLKID_CPU_CLK_DYN1_SEL 183 149 + #define CLKID_CPU_CLK_DYN1_DIV 184 150 + #define CLKID_CPU_CLK_DYN1 185 151 + #define CLKID_CPU_CLK_DYN 186 180 152 #define CLKID_CPU_CLK 187 153 + #define CLKID_CPU_CLK_DIV16_EN 188 154 + #define CLKID_CPU_CLK_DIV16 189 155 + #define CLKID_CPU_CLK_APB_DIV 190 156 + #define CLKID_CPU_CLK_APB 191 157 + #define CLKID_CPU_CLK_ATB_DIV 192 158 + #define CLKID_CPU_CLK_ATB 193 159 + #define CLKID_CPU_CLK_AXI_DIV 194 160 + #define CLKID_CPU_CLK_AXI 195 161 + #define CLKID_CPU_CLK_TRACE_DIV 196 162 + #define CLKID_CPU_CLK_TRACE 197 163 + #define CLKID_PCIE_PLL_DCO 198 164 + #define CLKID_PCIE_PLL_DCO_DIV2 199 165 + #define CLKID_PCIE_PLL_OD 200 181 166 #define CLKID_PCIE_PLL 201 167 + #define CLKID_VDEC_1_SEL 202 168 + #define CLKID_VDEC_1_DIV 203 182 169 #define CLKID_VDEC_1 204 170 + #define CLKID_VDEC_HEVC_SEL 205 171 + #define CLKID_VDEC_HEVC_DIV 206 183 172 #define CLKID_VDEC_HEVC 207 173 + #define CLKID_VDEC_HEVCF_SEL 208 174 + #define CLKID_VDEC_HEVCF_DIV 209 184 175 #define CLKID_VDEC_HEVCF 210 176 + #define CLKID_TS_DIV 211 185 177 #define CLKID_TS 212 178 + #define CLKID_SYS1_PLL_DCO 213 179 + #define CLKID_SYS1_PLL 214 180 + #define CLKID_SYS1_PLL_DIV16_EN 215 181 + #define CLKID_SYS1_PLL_DIV16 216 182 + #define CLKID_CPUB_CLK_DYN0_SEL 217 183 + #define CLKID_CPUB_CLK_DYN0_DIV 218 184 + #define CLKID_CPUB_CLK_DYN0 219 185 + #define CLKID_CPUB_CLK_DYN1_SEL 220 186 + #define CLKID_CPUB_CLK_DYN1_DIV 221 187 + #define CLKID_CPUB_CLK_DYN1 222 188 + #define CLKID_CPUB_CLK_DYN 223 186 189 #define CLKID_CPUB_CLK 224 190 + #define CLKID_CPUB_CLK_DIV16_EN 225 191 + #define CLKID_CPUB_CLK_DIV16 226 192 + #define CLKID_CPUB_CLK_DIV2 227 193 + #define CLKID_CPUB_CLK_DIV3 228 194 + #define CLKID_CPUB_CLK_DIV4 229 195 + #define CLKID_CPUB_CLK_DIV5 230 196 + #define CLKID_CPUB_CLK_DIV6 231 197 + #define CLKID_CPUB_CLK_DIV7 232 198 + #define CLKID_CPUB_CLK_DIV8 233 199 + #define CLKID_CPUB_CLK_APB_SEL 234 200 + #define CLKID_CPUB_CLK_APB 235 201 + #define CLKID_CPUB_CLK_ATB_SEL 236 202 + #define CLKID_CPUB_CLK_ATB 237 203 + #define CLKID_CPUB_CLK_AXI_SEL 238 204 + #define CLKID_CPUB_CLK_AXI 239 205 + #define CLKID_CPUB_CLK_TRACE_SEL 240 206 + #define CLKID_CPUB_CLK_TRACE 241 207 + #define CLKID_GP1_PLL_DCO 242 187 208 #define CLKID_GP1_PLL 243 209 + #define CLKID_DSU_CLK_DYN0_SEL 244 210 + #define CLKID_DSU_CLK_DYN0_DIV 245 211 + #define CLKID_DSU_CLK_DYN0 246 212 + #define CLKID_DSU_CLK_DYN1_SEL 247 213 + #define CLKID_DSU_CLK_DYN1_DIV 248 214 + #define CLKID_DSU_CLK_DYN1 249 215 + #define CLKID_DSU_CLK_DYN 250 216 + #define CLKID_DSU_CLK_FINAL 251 188 217 #define CLKID_DSU_CLK 252 189 218 #define CLKID_CPU1_CLK 253 190 219 #define CLKID_CPU2_CLK 254 191 220 #define CLKID_CPU3_CLK 255 221 + #define CLKID_SPICC0_SCLK_SEL 256 222 + #define CLKID_SPICC0_SCLK_DIV 257 192 223 #define CLKID_SPICC0_SCLK 258 224 + #define CLKID_SPICC1_SCLK_SEL 259 225 + #define CLKID_SPICC1_SCLK_DIV 260 193 226 #define CLKID_SPICC1_SCLK 261 227 + #define CLKID_NNA_AXI_CLK_SEL 262 228 + #define CLKID_NNA_AXI_CLK_DIV 263 194 229 #define CLKID_NNA_AXI_CLK 264 230 + #define CLKID_NNA_CORE_CLK_SEL 265 231 + #define CLKID_NNA_CORE_CLK_DIV 266 195 232 #define CLKID_NNA_CORE_CLK 267 233 + #define CLKID_MIPI_DSI_PXCLK_DIV 268 196 234 #define CLKID_MIPI_DSI_PXCLK_SEL 269 197 235 #define CLKID_MIPI_DSI_PXCLK 270 198 236
+65
include/dt-bindings/clock/gxbb-clkc.h
··· 15 15 #define CLKID_FCLK_DIV5 7 16 16 #define CLKID_FCLK_DIV7 8 17 17 #define CLKID_GP0_PLL 9 18 + #define CLKID_MPEG_SEL 10 19 + #define CLKID_MPEG_DIV 11 18 20 #define CLKID_CLK81 12 19 21 #define CLKID_MPLL0 13 20 22 #define CLKID_MPLL1 14 ··· 104 102 #define CLKID_SD_EMMC_C 96 105 103 #define CLKID_SAR_ADC_CLK 97 106 104 #define CLKID_SAR_ADC_SEL 98 105 + #define CLKID_SAR_ADC_DIV 99 107 106 #define CLKID_MALI_0_SEL 100 107 + #define CLKID_MALI_0_DIV 101 108 108 #define CLKID_MALI_0 102 109 109 #define CLKID_MALI_1_SEL 103 110 + #define CLKID_MALI_1_DIV 104 110 111 #define CLKID_MALI_1 105 111 112 #define CLKID_MALI 106 112 113 #define CLKID_CTS_AMCLK 107 114 + #define CLKID_CTS_AMCLK_SEL 108 115 + #define CLKID_CTS_AMCLK_DIV 109 113 116 #define CLKID_CTS_MCLK_I958 110 117 + #define CLKID_CTS_MCLK_I958_SEL 111 118 + #define CLKID_CTS_MCLK_I958_DIV 112 114 119 #define CLKID_CTS_I958 113 115 120 #define CLKID_32K_CLK 114 121 + #define CLKID_32K_CLK_SEL 115 122 + #define CLKID_32K_CLK_DIV 116 123 + #define CLKID_SD_EMMC_A_CLK0_SEL 117 124 + #define CLKID_SD_EMMC_A_CLK0_DIV 118 116 125 #define CLKID_SD_EMMC_A_CLK0 119 126 + #define CLKID_SD_EMMC_B_CLK0_SEL 120 127 + #define CLKID_SD_EMMC_B_CLK0_DIV 121 117 128 #define CLKID_SD_EMMC_B_CLK0 122 129 + #define CLKID_SD_EMMC_C_CLK0_SEL 123 130 + #define CLKID_SD_EMMC_C_CLK0_DIV 124 118 131 #define CLKID_SD_EMMC_C_CLK0 125 119 132 #define CLKID_VPU_0_SEL 126 133 + #define CLKID_VPU_0_DIV 127 120 134 #define CLKID_VPU_0 128 121 135 #define CLKID_VPU_1_SEL 129 136 + #define CLKID_VPU_1_DIV 130 122 137 #define CLKID_VPU_1 131 123 138 #define CLKID_VPU 132 124 139 #define CLKID_VAPB_0_SEL 133 140 + #define CLKID_VAPB_0_DIV 134 125 141 #define CLKID_VAPB_0 135 126 142 #define CLKID_VAPB_1_SEL 136 143 + #define CLKID_VAPB_1_DIV 137 127 144 #define CLKID_VAPB_1 138 128 145 #define CLKID_VAPB_SEL 139 129 146 #define CLKID_VAPB 140 147 + #define CLKID_HDMI_PLL_PRE_MULT 141 148 + #define CLKID_MPLL0_DIV 142 149 + #define CLKID_MPLL1_DIV 143 150 + #define CLKID_MPLL2_DIV 144 151 + #define CLKID_MPLL_PREDIV 145 152 + #define CLKID_FCLK_DIV2_DIV 146 153 + #define CLKID_FCLK_DIV3_DIV 147 154 + #define CLKID_FCLK_DIV4_DIV 148 155 + #define CLKID_FCLK_DIV5_DIV 149 156 + #define CLKID_FCLK_DIV7_DIV 150 157 + #define CLKID_VDEC_1_SEL 151 158 + #define CLKID_VDEC_1_DIV 152 130 159 #define CLKID_VDEC_1 153 160 + #define CLKID_VDEC_HEVC_SEL 154 161 + #define CLKID_VDEC_HEVC_DIV 155 131 162 #define CLKID_VDEC_HEVC 156 163 + #define CLKID_GEN_CLK_SEL 157 164 + #define CLKID_GEN_CLK_DIV 158 132 165 #define CLKID_GEN_CLK 159 166 + #define CLKID_FIXED_PLL_DCO 160 167 + #define CLKID_HDMI_PLL_DCO 161 168 + #define CLKID_HDMI_PLL_OD 162 169 + #define CLKID_HDMI_PLL_OD2 163 170 + #define CLKID_SYS_PLL_DCO 164 171 + #define CLKID_GP0_PLL_DCO 165 133 172 #define CLKID_VID_PLL 166 173 + #define CLKID_VID_PLL_SEL 167 174 + #define CLKID_VID_PLL_DIV 168 175 + #define CLKID_VCLK_SEL 169 176 + #define CLKID_VCLK2_SEL 170 177 + #define CLKID_VCLK_INPUT 171 178 + #define CLKID_VCLK2_INPUT 172 179 + #define CLKID_VCLK_DIV 173 180 + #define CLKID_VCLK2_DIV 174 134 181 #define CLKID_VCLK 175 135 182 #define CLKID_VCLK2 176 183 + #define CLKID_VCLK_DIV2_EN 177 184 + #define CLKID_VCLK_DIV4_EN 178 185 + #define CLKID_VCLK_DIV6_EN 179 186 + #define CLKID_VCLK_DIV12_EN 180 187 + #define CLKID_VCLK2_DIV2_EN 181 188 + #define CLKID_VCLK2_DIV4_EN 182 189 + #define CLKID_VCLK2_DIV6_EN 183 190 + #define CLKID_VCLK2_DIV12_EN 184 136 191 #define CLKID_VCLK_DIV1 185 137 192 #define CLKID_VCLK_DIV2 186 138 193 #define CLKID_VCLK_DIV4 187 ··· 200 141 #define CLKID_VCLK2_DIV4 192 201 142 #define CLKID_VCLK2_DIV6 193 202 143 #define CLKID_VCLK2_DIV12 194 144 + #define CLKID_CTS_ENCI_SEL 195 145 + #define CLKID_CTS_ENCP_SEL 196 146 + #define CLKID_CTS_VDAC_SEL 197 147 + #define CLKID_HDMI_TX_SEL 198 203 148 #define CLKID_CTS_ENCI 199 204 149 #define CLKID_CTS_ENCP 200 205 150 #define CLKID_CTS_VDAC 201 206 151 #define CLKID_HDMI_TX 202 152 + #define CLKID_HDMI_SEL 203 153 + #define CLKID_HDMI_DIV 204 207 154 #define CLKID_HDMI 205 208 155 #define CLKID_ACODEC 206 209 156
+28
include/dt-bindings/clock/imx8-clock.h
··· 164 164 165 165 #define IMX_ADMA_LPCG_CLK_END 45 166 166 167 + #define IMX_ADMA_ACM_AUD_CLK0_SEL 0 168 + #define IMX_ADMA_ACM_AUD_CLK1_SEL 1 169 + #define IMX_ADMA_ACM_MCLKOUT0_SEL 2 170 + #define IMX_ADMA_ACM_MCLKOUT1_SEL 3 171 + #define IMX_ADMA_ACM_ESAI0_MCLK_SEL 4 172 + #define IMX_ADMA_ACM_ESAI1_MCLK_SEL 5 173 + #define IMX_ADMA_ACM_GPT0_MUX_CLK_SEL 6 174 + #define IMX_ADMA_ACM_GPT1_MUX_CLK_SEL 7 175 + #define IMX_ADMA_ACM_GPT2_MUX_CLK_SEL 8 176 + #define IMX_ADMA_ACM_GPT3_MUX_CLK_SEL 9 177 + #define IMX_ADMA_ACM_GPT4_MUX_CLK_SEL 10 178 + #define IMX_ADMA_ACM_GPT5_MUX_CLK_SEL 11 179 + #define IMX_ADMA_ACM_SAI0_MCLK_SEL 12 180 + #define IMX_ADMA_ACM_SAI1_MCLK_SEL 13 181 + #define IMX_ADMA_ACM_SAI2_MCLK_SEL 14 182 + #define IMX_ADMA_ACM_SAI3_MCLK_SEL 15 183 + #define IMX_ADMA_ACM_SAI4_MCLK_SEL 16 184 + #define IMX_ADMA_ACM_SAI5_MCLK_SEL 17 185 + #define IMX_ADMA_ACM_SAI6_MCLK_SEL 18 186 + #define IMX_ADMA_ACM_SAI7_MCLK_SEL 19 187 + #define IMX_ADMA_ACM_SPDIF0_TX_CLK_SEL 20 188 + #define IMX_ADMA_ACM_SPDIF1_TX_CLK_SEL 21 189 + #define IMX_ADMA_ACM_MQS_TX_CLK_SEL 22 190 + #define IMX_ADMA_ACM_ASRC0_MUX_CLK_SEL 23 191 + #define IMX_ADMA_ACM_ASRC1_MUX_CLK_SEL 24 192 + 193 + #define IMX_ADMA_ACM_CLK_END 25 194 + 167 195 #endif /* __DT_BINDINGS_CLOCK_IMX_H */
+1 -1
include/dt-bindings/clock/imx8mp-clock.h
··· 130 130 #define IMX8MP_CLK_SAI1 123 131 131 #define IMX8MP_CLK_SAI2 124 132 132 #define IMX8MP_CLK_SAI3 125 133 - #define IMX8MP_CLK_SAI4 126 133 + /* #define IMX8MP_CLK_SAI4 126 */ 134 134 #define IMX8MP_CLK_SAI5 127 135 135 #define IMX8MP_CLK_SAI6 128 136 136 #define IMX8MP_CLK_ENET_QOS 129
+2 -1
include/dt-bindings/clock/imx93-clock.h
··· 203 203 #define IMX93_CLK_ARM_PLL 198 204 204 #define IMX93_CLK_A55_SEL 199 205 205 #define IMX93_CLK_A55_CORE 200 206 - #define IMX93_CLK_END 201 206 + #define IMX93_CLK_PDM_IPG 201 207 + #define IMX93_CLK_END 202 207 208 208 209 #endif
-1
include/dt-bindings/clock/marvell,mmp2-audio.h
··· 6 6 #define MMP2_CLK_AUDIO_SSPA0 1 7 7 #define MMP2_CLK_AUDIO_SSPA1 2 8 8 9 - #define MMP2_CLK_AUDIO_NR_CLKS 3 10 9 #endif
-1
include/dt-bindings/clock/marvell,mmp2.h
··· 91 91 #define MMP3_CLK_SDH4 126 92 92 #define MMP2_CLK_AUDIO 127 93 93 94 - #define MMP2_NR_CLKS 200 95 94 #endif
-1
include/dt-bindings/clock/marvell,pxa168.h
··· 63 63 #define PXA168_CLK_SDH01_AXI 111 64 64 #define PXA168_CLK_SDH23_AXI 112 65 65 66 - #define PXA168_NR_CLKS 200 67 66 #endif
-3
include/dt-bindings/clock/marvell,pxa1928.h
··· 36 36 #define PXA1928_CLK_THSENS_CPU 0x26 37 37 #define PXA1928_CLK_THSENS_VPU 0x27 38 38 #define PXA1928_CLK_THSENS_GC 0x28 39 - #define PXA1928_APBC_NR_CLKS 0x30 40 39 41 40 42 41 /* axi peripherals */ ··· 51 52 #define PXA1928_CLK_SDH4 0x57 52 53 #define PXA1928_CLK_GC3D 0x5d 53 54 #define PXA1928_CLK_GC2D 0x5f 54 - 55 - #define PXA1928_APMU_NR_CLKS 0x60 56 55 57 56 #endif
-1
include/dt-bindings/clock/marvell,pxa910.h
··· 55 55 #define PXA910_CLK_CCIC0_PHY 108 56 56 #define PXA910_CLK_CCIC0_SPHY 109 57 57 58 - #define PXA910_NR_CLKS 200 59 58 #endif
+97
include/dt-bindings/clock/meson8b-clkc.h
··· 100 100 #define CLKID_MPLL0 93 101 101 #define CLKID_MPLL1 94 102 102 #define CLKID_MPLL2 95 103 + #define CLKID_MPLL0_DIV 96 104 + #define CLKID_MPLL1_DIV 97 105 + #define CLKID_MPLL2_DIV 98 106 + #define CLKID_CPU_IN_SEL 99 107 + #define CLKID_CPU_IN_DIV2 100 108 + #define CLKID_CPU_IN_DIV3 101 109 + #define CLKID_CPU_SCALE_DIV 102 110 + #define CLKID_CPU_SCALE_OUT_SEL 103 111 + #define CLKID_MPLL_PREDIV 104 112 + #define CLKID_FCLK_DIV2_DIV 105 113 + #define CLKID_FCLK_DIV3_DIV 106 114 + #define CLKID_FCLK_DIV4_DIV 107 115 + #define CLKID_FCLK_DIV5_DIV 108 116 + #define CLKID_FCLK_DIV7_DIV 109 117 + #define CLKID_NAND_SEL 110 118 + #define CLKID_NAND_DIV 111 103 119 #define CLKID_NAND_CLK 112 120 + #define CLKID_PLL_FIXED_DCO 113 121 + #define CLKID_HDMI_PLL_DCO 114 122 + #define CLKID_PLL_SYS_DCO 115 123 + #define CLKID_CPU_CLK_DIV2 116 124 + #define CLKID_CPU_CLK_DIV3 117 125 + #define CLKID_CPU_CLK_DIV4 118 126 + #define CLKID_CPU_CLK_DIV5 119 127 + #define CLKID_CPU_CLK_DIV6 120 128 + #define CLKID_CPU_CLK_DIV7 121 129 + #define CLKID_CPU_CLK_DIV8 122 130 + #define CLKID_APB_SEL 123 104 131 #define CLKID_APB 124 132 + #define CLKID_PERIPH_SEL 125 105 133 #define CLKID_PERIPH 126 134 + #define CLKID_AXI_SEL 127 106 135 #define CLKID_AXI 128 107 136 #define CLKID_L2_DRAM 130 137 + #define CLKID_L2_DRAM_SEL 129 138 + #define CLKID_HDMI_PLL_LVDS_OUT 131 108 139 #define CLKID_HDMI_PLL_HDMI_OUT 132 140 + #define CLKID_VID_PLL_IN_SEL 133 141 + #define CLKID_VID_PLL_IN_EN 134 142 + #define CLKID_VID_PLL_PRE_DIV 135 143 + #define CLKID_VID_PLL_POST_DIV 136 109 144 #define CLKID_VID_PLL_FINAL_DIV 137 110 145 #define CLKID_VCLK_IN_SEL 138 146 + #define CLKID_VCLK_IN_EN 139 147 + #define CLKID_VCLK_DIV1 140 148 + #define CLKID_VCLK_DIV2_DIV 141 149 + #define CLKID_VCLK_DIV2 142 150 + #define CLKID_VCLK_DIV4_DIV 143 151 + #define CLKID_VCLK_DIV4 144 152 + #define CLKID_VCLK_DIV6_DIV 145 153 + #define CLKID_VCLK_DIV6 146 154 + #define CLKID_VCLK_DIV12_DIV 147 155 + #define CLKID_VCLK_DIV12 148 111 156 #define CLKID_VCLK2_IN_SEL 149 157 + #define CLKID_VCLK2_IN_EN 150 158 + #define CLKID_VCLK2_DIV1 151 159 + #define CLKID_VCLK2_DIV2_DIV 152 160 + #define CLKID_VCLK2_DIV2 153 161 + #define CLKID_VCLK2_DIV4_DIV 154 162 + #define CLKID_VCLK2_DIV4 155 163 + #define CLKID_VCLK2_DIV6_DIV 156 164 + #define CLKID_VCLK2_DIV6 157 165 + #define CLKID_VCLK2_DIV12_DIV 158 166 + #define CLKID_VCLK2_DIV12 159 167 + #define CLKID_CTS_ENCT_SEL 160 112 168 #define CLKID_CTS_ENCT 161 169 + #define CLKID_CTS_ENCP_SEL 162 113 170 #define CLKID_CTS_ENCP 163 171 + #define CLKID_CTS_ENCI_SEL 164 114 172 #define CLKID_CTS_ENCI 165 173 + #define CLKID_HDMI_TX_PIXEL_SEL 166 115 174 #define CLKID_HDMI_TX_PIXEL 167 175 + #define CLKID_CTS_ENCL_SEL 168 116 176 #define CLKID_CTS_ENCL 169 177 + #define CLKID_CTS_VDAC0_SEL 170 117 178 #define CLKID_CTS_VDAC0 171 179 + #define CLKID_HDMI_SYS_SEL 172 180 + #define CLKID_HDMI_SYS_DIV 173 118 181 #define CLKID_HDMI_SYS 174 182 + #define CLKID_MALI_0_SEL 175 183 + #define CLKID_MALI_0_DIV 176 184 + #define CLKID_MALI_0 177 185 + #define CLKID_MALI_1_SEL 178 186 + #define CLKID_MALI_1_DIV 179 187 + #define CLKID_MALI_1 180 188 + #define CLKID_GP_PLL_DCO 181 189 + #define CLKID_GP_PLL 182 190 + #define CLKID_VPU_0_SEL 183 191 + #define CLKID_VPU_0_DIV 184 192 + #define CLKID_VPU_0 185 193 + #define CLKID_VPU_1_SEL 186 194 + #define CLKID_VPU_1_DIV 187 195 + #define CLKID_VPU_1 189 119 196 #define CLKID_VPU 190 197 + #define CLKID_VDEC_1_SEL 191 198 + #define CLKID_VDEC_1_1_DIV 192 199 + #define CLKID_VDEC_1_1 193 200 + #define CLKID_VDEC_1_2_DIV 194 201 + #define CLKID_VDEC_1_2 195 120 202 #define CLKID_VDEC_1 196 203 + #define CLKID_VDEC_HCODEC_SEL 197 204 + #define CLKID_VDEC_HCODEC_DIV 198 121 205 #define CLKID_VDEC_HCODEC 199 206 + #define CLKID_VDEC_2_SEL 200 207 + #define CLKID_VDEC_2_DIV 201 122 208 #define CLKID_VDEC_2 202 209 + #define CLKID_VDEC_HEVC_SEL 203 210 + #define CLKID_VDEC_HEVC_DIV 204 211 + #define CLKID_VDEC_HEVC_EN 205 123 212 #define CLKID_VDEC_HEVC 206 213 + #define CLKID_CTS_AMCLK_SEL 207 214 + #define CLKID_CTS_AMCLK_DIV 208 124 215 #define CLKID_CTS_AMCLK 209 216 + #define CLKID_CTS_MCLK_I958_SEL 210 217 + #define CLKID_CTS_MCLK_I958_DIV 211 125 218 #define CLKID_CTS_MCLK_I958 212 126 219 #define CLKID_CTS_I958 213 220 + #define CLKID_VCLK_EN 214 221 + #define CLKID_VCLK2_EN 215 222 + #define CLKID_VID_PLL_LVDS_EN 216 223 + #define CLKID_HDMI_PLL_DCO_IN 217 127 224 128 225 #endif /* __MESON8B_CLKC_H */
+6
include/dt-bindings/clock/qcom,gcc-ipq4019.h
··· 165 165 #define GCC_QDSS_BCR 69 166 166 #define GCC_MPM_BCR 70 167 167 #define GCC_SPDM_BCR 71 168 + #define ESS_MAC1_ARES 72 169 + #define ESS_MAC2_ARES 73 170 + #define ESS_MAC3_ARES 74 171 + #define ESS_MAC4_ARES 75 172 + #define ESS_MAC5_ARES 76 173 + #define ESS_PSGMII_ARES 77 168 174 169 175 #endif
+1
include/dt-bindings/clock/qcom,gcc-msm8917.h
··· 169 169 #define VFE0_CLK_SRC 162 170 170 #define VFE1_CLK_SRC 163 171 171 #define VSYNC_CLK_SRC 164 172 + #define GPLL0_SLEEP_CLK_SRC 165 172 173 173 174 /* GCC block resets */ 174 175 #define GCC_CAMSS_MICRO_BCR 0
-44
include/dt-bindings/clock/qcom,lcc-mdm9615.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0-only */ 2 - /* 3 - * Copyright (c) 2014, The Linux Foundation. All rights reserved. 4 - * Copyright (c) BayLibre, SAS. 5 - * Author : Neil Armstrong <narmstrong@baylibre.com> 6 - */ 7 - 8 - #ifndef _DT_BINDINGS_CLK_LCC_MDM9615_H 9 - #define _DT_BINDINGS_CLK_LCC_MDM9615_H 10 - 11 - #define PLL4 0 12 - #define MI2S_OSR_SRC 1 13 - #define MI2S_OSR_CLK 2 14 - #define MI2S_DIV_CLK 3 15 - #define MI2S_BIT_DIV_CLK 4 16 - #define MI2S_BIT_CLK 5 17 - #define PCM_SRC 6 18 - #define PCM_CLK_OUT 7 19 - #define PCM_CLK 8 20 - #define SLIMBUS_SRC 9 21 - #define AUDIO_SLIMBUS_CLK 10 22 - #define SPS_SLIMBUS_CLK 11 23 - #define CODEC_I2S_MIC_OSR_SRC 12 24 - #define CODEC_I2S_MIC_OSR_CLK 13 25 - #define CODEC_I2S_MIC_DIV_CLK 14 26 - #define CODEC_I2S_MIC_BIT_DIV_CLK 15 27 - #define CODEC_I2S_MIC_BIT_CLK 16 28 - #define SPARE_I2S_MIC_OSR_SRC 17 29 - #define SPARE_I2S_MIC_OSR_CLK 18 30 - #define SPARE_I2S_MIC_DIV_CLK 19 31 - #define SPARE_I2S_MIC_BIT_DIV_CLK 20 32 - #define SPARE_I2S_MIC_BIT_CLK 21 33 - #define CODEC_I2S_SPKR_OSR_SRC 22 34 - #define CODEC_I2S_SPKR_OSR_CLK 23 35 - #define CODEC_I2S_SPKR_DIV_CLK 24 36 - #define CODEC_I2S_SPKR_BIT_DIV_CLK 25 37 - #define CODEC_I2S_SPKR_BIT_CLK 26 38 - #define SPARE_I2S_SPKR_OSR_SRC 27 39 - #define SPARE_I2S_SPKR_OSR_CLK 28 40 - #define SPARE_I2S_SPKR_DIV_CLK 29 41 - #define SPARE_I2S_SPKR_BIT_DIV_CLK 30 42 - #define SPARE_I2S_SPKR_BIT_CLK 31 43 - 44 - #endif
+3 -1
include/dt-bindings/clock/qcom,qdu1000-gcc.h
··· 1 1 /* SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause */ 2 2 /* 3 - * Copyright (c) 2021-2022, Qualcomm Innovation Center, Inc. All rights reserved. 3 + * Copyright (c) 2021-2023, Qualcomm Innovation Center, Inc. All rights reserved. 4 4 */ 5 5 6 6 #ifndef _DT_BINDINGS_CLK_QCOM_GCC_QDU1000_H ··· 138 138 #define GCC_AGGRE_NOC_ECPRI_GSI_CLK 128 139 139 #define GCC_PCIE_0_PIPE_CLK_SRC 129 140 140 #define GCC_PCIE_0_PHY_AUX_CLK_SRC 130 141 + #define GCC_GPLL1_OUT_EVEN 131 142 + #define GCC_DDRSS_ECPRI_GSI_CLK 132 141 143 142 144 /* GCC resets */ 143 145 #define GCC_ECPRI_CC_BCR 0
-18
include/dt-bindings/clock/samsung,exynosautov9.h
··· 166 166 #define GOUT_CLKCMU_PERIC1_IP 248 167 167 #define GOUT_CLKCMU_PERIS_BUS 249 168 168 169 - #define TOP_NR_CLK 250 170 - 171 169 /* CMU_BUSMC */ 172 170 #define CLK_MOUT_BUSMC_BUS_USER 1 173 171 #define CLK_DOUT_BUSMC_BUSP 2 174 172 #define CLK_GOUT_BUSMC_PDMA0_PCLK 3 175 173 #define CLK_GOUT_BUSMC_SPDMA_PCLK 4 176 - 177 - #define BUSMC_NR_CLK 5 178 174 179 175 /* CMU_CORE */ 180 176 #define CLK_MOUT_CORE_BUS_USER 1 ··· 178 182 #define CLK_GOUT_CORE_CCI_CLK 3 179 183 #define CLK_GOUT_CORE_CCI_PCLK 4 180 184 #define CLK_GOUT_CORE_CMU_CORE_PCLK 5 181 - 182 - #define CORE_NR_CLK 6 183 185 184 186 /* CMU_FSYS0 */ 185 187 #define CLK_MOUT_FSYS0_BUS_USER 1 ··· 220 226 #define CLK_GOUT_FSYS0_PCIE_GEN3A_4L_CLK 35 221 227 #define CLK_GOUT_FSYS0_PCIE_GEN3B_4L_CLK 36 222 228 223 - #define FSYS0_NR_CLK 37 224 - 225 229 /* CMU_FSYS1 */ 226 230 #define FOUT_MMC_PLL 1 227 231 ··· 243 251 #define CLK_GOUT_FSYS1_USB30_0_ACLK 17 244 252 #define CLK_GOUT_FSYS1_USB30_1_ACLK 18 245 253 246 - #define FSYS1_NR_CLK 19 247 - 248 254 /* CMU_FSYS2 */ 249 255 #define CLK_MOUT_FSYS2_BUS_USER 1 250 256 #define CLK_MOUT_FSYS2_UFS_EMBD_USER 2 ··· 251 261 #define CLK_GOUT_FSYS2_UFS_EMBD0_UNIPRO 5 252 262 #define CLK_GOUT_FSYS2_UFS_EMBD1_ACLK 6 253 263 #define CLK_GOUT_FSYS2_UFS_EMBD1_UNIPRO 7 254 - 255 - #define FSYS2_NR_CLK 8 256 264 257 265 /* CMU_PERIC0 */ 258 266 #define CLK_MOUT_PERIC0_BUS_USER 1 ··· 296 308 #define CLK_GOUT_PERIC0_PCLK_10 42 297 309 #define CLK_GOUT_PERIC0_PCLK_11 43 298 310 299 - #define PERIC0_NR_CLK 44 300 - 301 311 /* CMU_PERIC1 */ 302 312 #define CLK_MOUT_PERIC1_BUS_USER 1 303 313 #define CLK_MOUT_PERIC1_IP_USER 2 ··· 340 354 #define CLK_GOUT_PERIC1_PCLK_10 42 341 355 #define CLK_GOUT_PERIC1_PCLK_11 43 342 356 343 - #define PERIC1_NR_CLK 44 344 - 345 357 /* CMU_PERIS */ 346 358 #define CLK_MOUT_PERIS_BUS_USER 1 347 359 #define CLK_GOUT_SYSREG_PERIS_PCLK 2 348 360 #define CLK_GOUT_WDT_CLUSTER0 3 349 361 #define CLK_GOUT_WDT_CLUSTER1 4 350 - 351 - #define PERIS_NR_CLK 5 352 362 353 363 #endif /* _DT_BINDINGS_CLOCK_EXYNOSAUTOV9_H */
+13
include/dt-bindings/interconnect/qcom,rpm-icc.h
··· 1 + /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2 + /* 3 + * Copyright (c) 2023, Linaro Limited 4 + */ 5 + 6 + #ifndef __DT_BINDINGS_INTERCONNECT_QCOM_RPM_ICC_H 7 + #define __DT_BINDINGS_INTERCONNECT_QCOM_RPM_ICC_H 8 + 9 + #define RPM_ACTIVE_TAG (1 << 0) 10 + #define RPM_SLEEP_TAG (1 << 1) 11 + #define RPM_ALWAYS_TAG (RPM_ACTIVE_TAG | RPM_SLEEP_TAG) 12 + 13 + #endif
+1 -1
include/linux/clk-provider.h
··· 1379 1379 1380 1380 struct clk_hw_onecell_data { 1381 1381 unsigned int num; 1382 - struct clk_hw *hws[]; 1382 + struct clk_hw *hws[] __counted_by(num); 1383 1383 }; 1384 1384 1385 1385 #define CLK_OF_DECLARE(name, compat, fn) \
-18
include/linux/clk/mmp.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0 */ 2 - #ifndef __CLK_MMP_H 3 - #define __CLK_MMP_H 4 - 5 - #include <linux/types.h> 6 - 7 - extern void pxa168_clk_init(phys_addr_t mpmu_phys, 8 - phys_addr_t apmu_phys, 9 - phys_addr_t apbc_phys); 10 - extern void pxa910_clk_init(phys_addr_t mpmu_phys, 11 - phys_addr_t apmu_phys, 12 - phys_addr_t apbc_phys, 13 - phys_addr_t apbcp_phys); 14 - extern void mmp2_clk_init(phys_addr_t mpmu_phys, 15 - phys_addr_t apmu_phys, 16 - phys_addr_t apbc_phys); 17 - 18 - #endif
+18 -2
include/linux/soc/qcom/smd-rpm.h
··· 2 2 #ifndef __QCOM_SMD_RPM_H__ 3 3 #define __QCOM_SMD_RPM_H__ 4 4 5 + #include <linux/types.h> 6 + 5 7 struct qcom_smd_rpm; 6 8 7 - #define QCOM_SMD_RPM_ACTIVE_STATE 0 8 - #define QCOM_SMD_RPM_SLEEP_STATE 1 9 + #define QCOM_SMD_RPM_ACTIVE_STATE 0 10 + #define QCOM_SMD_RPM_SLEEP_STATE 1 11 + #define QCOM_SMD_RPM_STATE_NUM 2 9 12 10 13 /* 11 14 * Constants used for addressing resources in the RPM. ··· 46 43 #define QCOM_SMD_RPM_HWKM_CLK 0x6d6b7768 47 44 #define QCOM_SMD_RPM_PKA_CLK 0x616b70 48 45 #define QCOM_SMD_RPM_MCFG_CLK 0x6766636d 46 + 47 + #define QCOM_RPM_KEY_SOFTWARE_ENABLE 0x6e657773 48 + #define QCOM_RPM_KEY_PIN_CTRL_CLK_BUFFER_ENABLE_KEY 0x62636370 49 + #define QCOM_RPM_SMD_KEY_RATE 0x007a484b 50 + #define QCOM_RPM_SMD_KEY_ENABLE 0x62616e45 51 + #define QCOM_RPM_SMD_KEY_STATE 0x54415453 52 + #define QCOM_RPM_SCALING_ENABLE_ID 0x2 53 + 54 + struct clk_smd_rpm_req { 55 + __le32 key; 56 + __le32 nbytes; 57 + __le32 value; 58 + }; 49 59 50 60 int qcom_rpm_smd_write(struct qcom_smd_rpm *rpm, 51 61 int state,
+2
include/linux/string_helpers.h
··· 109 109 char *kstrdup_quotable_cmdline(struct task_struct *task, gfp_t gfp); 110 110 char *kstrdup_quotable_file(struct file *file, gfp_t gfp); 111 111 112 + char *kstrdup_and_replace(const char *src, char old, char new, gfp_t gfp); 113 + 112 114 char **kasprintf_strarray(gfp_t gfp, const char *prefix, size_t n); 113 115 void kfree_strarray(char **array, size_t n); 114 116
+1
include/soc/imx/revision.h
··· 22 22 #define IMX_CHIP_REVISION_3_3 0x33 23 23 #define IMX_CHIP_REVISION_UNKNOWN 0xff 24 24 25 + int mx25_revision(void); 25 26 int mx27_revision(void); 26 27 int mx31_revision(void); 27 28 int mx35_revision(void);
+15
lib/string_helpers.c
··· 719 719 } 720 720 EXPORT_SYMBOL_GPL(kstrdup_quotable_file); 721 721 722 + /* 723 + * Returns duplicate string in which the @old characters are replaced by @new. 724 + */ 725 + char *kstrdup_and_replace(const char *src, char old, char new, gfp_t gfp) 726 + { 727 + char *dst; 728 + 729 + dst = kstrdup(src, gfp); 730 + if (!dst) 731 + return NULL; 732 + 733 + return strreplace(dst, old, new); 734 + } 735 + EXPORT_SYMBOL_GPL(kstrdup_and_replace); 736 + 722 737 /** 723 738 * kasprintf_strarray - allocate and fill array of sequential strings 724 739 * @gfp: flags for the slab allocator