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

Merge branch 'clk-qcom' into clk-next

* clk-qcom: (87 commits)
clk: qcom: Fix SM_GPUCC_8450 dependencies
clk: qcom: smd-rpm: Set XO rate and CLK_IS_CRITICAL on PCNoC
clk: qcom: smd-rpm: Add a way to define bus clocks with rate and flags
clk: qcom: gcc-ipq5018: change some variable static
clk: qcom: gcc-ipq4019: add missing networking resets
dt-bindings: clock: qcom: ipq4019: add missing networking resets
clk: qcom: gcc-msm8917: Enable GPLL0_SLEEP_CLK_SRC
dt-bindings: clock: gcc-msm8917: Add definition for GPLL0_SLEEP_CLK_SRC
clk: qcom: gcc-qdu1000: Update the RCGs ops
clk: qcom: gcc-qdu1000: Update the SDCC clock RCG ops
clk: qcom: gcc-qdu1000: Add support for GDSCs
clk: qcom: gcc-qdu1000: Add gcc_ddrss_ecpri_gsi_clk support
clk: qcom: gcc-qdu1000: Register gcc_gpll1_out_even clock
clk: qcom: gcc-qdu1000: Fix clkref clocks handling
clk: qcom: gcc-qdu1000: Fix gcc_pcie_0_pipe_clk_src clock handling
dt-bindings: clock: Update GCC clocks for QDU1000 and QRU1000 SoCs
clk: qcom: gcc-sm8450: Use floor ops for SDCC RCGs
clk: qcom: ipq5332: drop the gcc_apss_axi_clk_src clock
clk: qcom: ipq5332: drop the mem noc clocks
clk: qcom: gcc-msm8998: Don't check halt bit on some branch clks
...

+5383 -1436
+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
+63
Documentation/devicetree/bindings/clock/qcom,ipq5018-gcc.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/clock/qcom,ipq5018-gcc.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Qualcomm Global Clock & Reset Controller on IPQ5018 8 + 9 + maintainers: 10 + - Sricharan Ramabadhran <quic_srichara@quicinc.com> 11 + 12 + description: | 13 + Qualcomm global clock control module provides the clocks, resets and power 14 + domains on IPQ5018 15 + 16 + See also:: 17 + include/dt-bindings/clock/qcom,ipq5018-gcc.h 18 + include/dt-bindings/reset/qcom,ipq5018-gcc.h 19 + 20 + properties: 21 + compatible: 22 + const: qcom,gcc-ipq5018 23 + 24 + clocks: 25 + items: 26 + - description: Board XO source 27 + - description: Sleep clock source 28 + - description: PCIE20 PHY0 pipe clock source 29 + - description: PCIE20 PHY1 pipe clock source 30 + - description: USB3 PHY pipe clock source 31 + - description: GEPHY RX clock source 32 + - description: GEPHY TX clock source 33 + - description: UNIPHY RX clock source 34 + - description: UNIPHY TX clk source 35 + 36 + required: 37 + - compatible 38 + - clocks 39 + 40 + allOf: 41 + - $ref: qcom,gcc.yaml# 42 + 43 + unevaluatedProperties: false 44 + 45 + examples: 46 + - | 47 + clock-controller@1800000 { 48 + compatible = "qcom,gcc-ipq5018"; 49 + reg = <0x01800000 0x80000>; 50 + clocks = <&xo_board_clk>, 51 + <&sleep_clk>, 52 + <&pcie20_phy0_pipe_clk>, 53 + <&pcie20_phy1_pipe_clk>, 54 + <&usb3_phy0_pipe_clk>, 55 + <&gephy_rx_clk>, 56 + <&gephy_tx_clk>, 57 + <&uniphy_rx_clk>, 58 + <&uniphy_tx_clk>; 59 + #clock-cells = <1>; 60 + #reset-cells = <1>; 61 + #power-domain-cells = <1>; 62 + }; 63 + ...
+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
+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/camcc-sc7180.c
··· 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
+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);
+153 -186
drivers/clk/qcom/clk-smd-rpm.c
··· 17 17 18 18 #include <dt-bindings/clock/qcom,rpmcc.h> 19 19 20 - #define QCOM_RPM_KEY_SOFTWARE_ENABLE 0x6e657773 21 - #define QCOM_RPM_KEY_PIN_CTRL_CLK_BUFFER_ENABLE_KEY 0x62636370 22 - #define QCOM_RPM_SMD_KEY_RATE 0x007a484b 23 - #define QCOM_RPM_SMD_KEY_ENABLE 0x62616e45 24 - #define QCOM_RPM_SMD_KEY_STATE 0x54415453 25 - #define QCOM_RPM_SCALING_ENABLE_ID 0x2 26 - 27 20 #define __DEFINE_CLK_SMD_RPM_PREFIX(_prefix, _name, _active, \ 28 - type, r_id, key) \ 21 + type, r_id, key, ao_rate, ao_flags) \ 29 22 static struct clk_smd_rpm clk_smd_rpm_##_prefix##_active; \ 30 23 static struct clk_smd_rpm clk_smd_rpm_##_prefix##_name = { \ 31 24 .rpm_res_type = (type), \ ··· 42 49 .active_only = true, \ 43 50 .rpm_key = (key), \ 44 51 .peer = &clk_smd_rpm_##_prefix##_name, \ 45 - .rate = INT_MAX, \ 52 + .rate = (ao_rate), \ 46 53 .hw.init = &(struct clk_init_data){ \ 47 54 .ops = &clk_smd_rpm_ops, \ 48 55 .name = #_active, \ ··· 51 58 .name = "xo_board", \ 52 59 }, \ 53 60 .num_parents = 1, \ 61 + .flags = (ao_flags), \ 54 62 }, \ 55 63 } 56 64 57 - #define __DEFINE_CLK_SMD_RPM(_name, _active, type, r_id, key) \ 65 + #define __DEFINE_CLK_SMD_RPM(_name, _active, type, r_id, key,\ 66 + ao_rate, ao_flags) \ 58 67 __DEFINE_CLK_SMD_RPM_PREFIX(/* empty */, _name, _active, \ 59 - type, r_id, key) 68 + type, r_id, key, ao_rate, ao_flags) 60 69 61 70 #define __DEFINE_CLK_SMD_RPM_BRANCH_PREFIX(_prefix, _name, _active,\ 62 71 type, r_id, r, key, ao_flags) \ ··· 106 111 107 112 #define DEFINE_CLK_SMD_RPM(_name, type, r_id) \ 108 113 __DEFINE_CLK_SMD_RPM(_name##_clk, _name##_a_clk, \ 109 - type, r_id, QCOM_RPM_SMD_KEY_RATE) 114 + type, r_id, QCOM_RPM_SMD_KEY_RATE, INT_MAX, 0) 110 115 111 116 #define DEFINE_CLK_SMD_RPM_BUS(_name, r_id) \ 112 117 __DEFINE_CLK_SMD_RPM_PREFIX(bus_##r_id##_, \ 113 118 _name##_clk, _name##_a_clk, QCOM_SMD_RPM_BUS_CLK, r_id, \ 114 - QCOM_RPM_SMD_KEY_RATE) 119 + QCOM_RPM_SMD_KEY_RATE, INT_MAX, 0) 120 + 121 + #define DEFINE_CLK_SMD_RPM_BUS_A(_name, r_id, ao_rate, ao_flags) \ 122 + __DEFINE_CLK_SMD_RPM_PREFIX(bus_##r_id##_, \ 123 + _name##_clk, _name##_a_clk, QCOM_SMD_RPM_BUS_CLK, r_id, \ 124 + QCOM_RPM_SMD_KEY_RATE, ao_rate, ao_flags) 115 125 116 126 #define DEFINE_CLK_SMD_RPM_CLK_SRC(_name, type, r_id) \ 117 127 __DEFINE_CLK_SMD_RPM( \ 118 128 _name##_clk_src, _name##_a_clk_src, \ 119 - type, r_id, QCOM_RPM_SMD_KEY_RATE) 129 + type, r_id, QCOM_RPM_SMD_KEY_RATE, INT_MAX, 0) 120 130 121 131 #define DEFINE_CLK_SMD_RPM_BRANCH(_name, type, r_id, r) \ 122 132 __DEFINE_CLK_SMD_RPM_BRANCH_PREFIX(branch_, \ ··· 135 135 136 136 #define DEFINE_CLK_SMD_RPM_QDSS(_name, type, r_id) \ 137 137 __DEFINE_CLK_SMD_RPM(_name##_clk, _name##_a_clk, \ 138 - type, r_id, QCOM_RPM_SMD_KEY_STATE) 138 + type, r_id, QCOM_RPM_SMD_KEY_STATE, INT_MAX, 0) 139 139 140 140 #define DEFINE_CLK_SMD_RPM_XO_BUFFER(_name, r_id, r) \ 141 141 __DEFINE_CLK_SMD_RPM_BRANCH(_name, _name##_a, \ ··· 170 170 unsigned long rate; 171 171 }; 172 172 173 - struct clk_smd_rpm_req { 174 - __le32 key; 175 - __le32 nbytes; 176 - __le32 value; 177 - }; 178 - 179 173 struct rpm_smd_clk_desc { 180 174 struct clk_smd_rpm **clks; 181 175 size_t num_clks; 176 + 177 + /* 178 + * Interconnect clocks are managed by the icc framework, this driver 179 + * only kickstarts them so that they don't get gated between 180 + * clk_smd_rpm_enable_scaling() and interconnect driver initialization. 181 + */ 182 + const struct clk_smd_rpm ** const icc_clks; 183 + size_t num_icc_clks; 182 184 bool scaling_before_handover; 183 185 }; 184 186 185 187 static DEFINE_MUTEX(rpm_smd_clk_lock); 186 188 187 - static int clk_smd_rpm_handoff(struct clk_smd_rpm *r) 189 + static int clk_smd_rpm_handoff(const struct clk_smd_rpm *r) 188 190 { 189 191 int ret; 190 192 struct clk_smd_rpm_req req = { ··· 455 453 DEFINE_CLK_SMD_RPM(aggre1_noc, QCOM_SMD_RPM_AGGR_CLK, 1); 456 454 DEFINE_CLK_SMD_RPM(aggre2_noc, QCOM_SMD_RPM_AGGR_CLK, 2); 457 455 458 - DEFINE_CLK_SMD_RPM_BUS(pcnoc, 0); 456 + DEFINE_CLK_SMD_RPM_BUS_A(pcnoc, 0, 19200000, CLK_IS_CRITICAL); 459 457 DEFINE_CLK_SMD_RPM_BUS(snoc, 1); 460 458 DEFINE_CLK_SMD_RPM_BUS(sysmmnoc, 2); 461 459 DEFINE_CLK_SMD_RPM_BUS(cnoc, 2); ··· 512 510 DEFINE_CLK_SMD_RPM_XO_BUFFER(div_clk2, 12, 19200000); 513 511 DEFINE_CLK_SMD_RPM_XO_BUFFER(div_clk3, 13, 19200000); 514 512 513 + static const struct clk_smd_rpm *bimc_pcnoc_icc_clks[] = { 514 + &clk_smd_rpm_bimc_clk, 515 + &clk_smd_rpm_bus_0_pcnoc_clk, 516 + }; 517 + 518 + static const struct clk_smd_rpm *bimc_pcnoc_snoc_icc_clks[] = { 519 + &clk_smd_rpm_bimc_clk, 520 + &clk_smd_rpm_bus_0_pcnoc_clk, 521 + &clk_smd_rpm_bus_1_snoc_clk, 522 + }; 523 + 524 + static const struct clk_smd_rpm *bimc_pcnoc_snoc_smmnoc_icc_clks[] = { 525 + &clk_smd_rpm_bimc_clk, 526 + &clk_smd_rpm_bus_0_pcnoc_clk, 527 + &clk_smd_rpm_bus_1_snoc_clk, 528 + &clk_smd_rpm_bus_2_sysmmnoc_clk, 529 + }; 530 + 531 + static const struct clk_smd_rpm *bimc_pcnoc_snoc_cnoc_ocmem_icc_clks[] = { 532 + &clk_smd_rpm_bimc_clk, 533 + &clk_smd_rpm_bus_0_pcnoc_clk, 534 + &clk_smd_rpm_bus_1_snoc_clk, 535 + &clk_smd_rpm_bus_2_cnoc_clk, 536 + &clk_smd_rpm_ocmemgx_clk, 537 + }; 538 + 539 + static const struct clk_smd_rpm *msm8996_icc_clks[] = { 540 + &clk_smd_rpm_bimc_clk, 541 + &clk_smd_rpm_branch_aggre1_noc_clk, 542 + &clk_smd_rpm_branch_aggre2_noc_clk, 543 + &clk_smd_rpm_bus_0_pcnoc_clk, 544 + &clk_smd_rpm_bus_1_snoc_clk, 545 + &clk_smd_rpm_bus_2_cnoc_clk, 546 + &clk_smd_rpm_mmssnoc_axi_rpm_clk, 547 + }; 548 + 549 + static const struct clk_smd_rpm *msm8998_icc_clks[] = { 550 + &clk_smd_rpm_aggre1_noc_clk, 551 + &clk_smd_rpm_aggre2_noc_clk, 552 + &clk_smd_rpm_bimc_clk, 553 + &clk_smd_rpm_bus_1_snoc_clk, 554 + &clk_smd_rpm_bus_2_cnoc_clk, 555 + &clk_smd_rpm_mmssnoc_axi_rpm_clk, 556 + }; 557 + 558 + static const struct clk_smd_rpm *sdm660_icc_clks[] = { 559 + &clk_smd_rpm_aggre2_noc_clk, 560 + &clk_smd_rpm_bimc_clk, 561 + &clk_smd_rpm_bus_1_snoc_clk, 562 + &clk_smd_rpm_bus_2_cnoc_clk, 563 + &clk_smd_rpm_mmssnoc_axi_rpm_clk, 564 + }; 565 + 566 + static const struct clk_smd_rpm *sm_qnoc_icc_clks[] = { 567 + &clk_smd_rpm_bimc_clk, 568 + &clk_smd_rpm_bus_1_cnoc_clk, 569 + &clk_smd_rpm_mmnrt_clk, 570 + &clk_smd_rpm_mmrt_clk, 571 + &clk_smd_rpm_qup_clk, 572 + &clk_smd_rpm_bus_2_snoc_clk, 573 + }; 574 + 515 575 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 576 [RPM_SMD_QPIC_CLK] = &clk_smd_rpm_qpic_clk, 523 577 [RPM_SMD_QPIC_CLK_A] = &clk_smd_rpm_qpic_a_clk, 524 578 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, ··· 600 542 static const struct rpm_smd_clk_desc rpm_clk_msm8909 = { 601 543 .clks = msm8909_clks, 602 544 .num_clks = ARRAY_SIZE(msm8909_clks), 545 + .icc_clks = bimc_pcnoc_snoc_icc_clks, 546 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_icc_clks), 603 547 }; 604 548 605 549 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 550 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, 613 551 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk, 614 552 [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1, ··· 628 574 static const struct rpm_smd_clk_desc rpm_clk_msm8916 = { 629 575 .clks = msm8916_clks, 630 576 .num_clks = ARRAY_SIZE(msm8916_clks), 577 + .icc_clks = bimc_pcnoc_snoc_icc_clks, 578 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_icc_clks), 631 579 }; 632 580 633 581 static struct clk_smd_rpm *msm8917_clks[] = { 634 582 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 635 583 [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 584 [RPM_SMD_BIMC_GPU_CLK] = &clk_smd_rpm_bimc_gpu_clk, 643 585 [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 586 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, 647 587 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk, 648 588 [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1, ··· 656 608 static const struct rpm_smd_clk_desc rpm_clk_msm8917 = { 657 609 .clks = msm8917_clks, 658 610 .num_clks = ARRAY_SIZE(msm8917_clks), 611 + .icc_clks = bimc_pcnoc_snoc_smmnoc_icc_clks, 612 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_smmnoc_icc_clks), 659 613 }; 660 614 661 615 static struct clk_smd_rpm *msm8936_clks[] = { 662 616 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 663 617 [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 618 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, 673 619 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk, 674 620 [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1, ··· 686 644 static const struct rpm_smd_clk_desc rpm_clk_msm8936 = { 687 645 .clks = msm8936_clks, 688 646 .num_clks = ARRAY_SIZE(msm8936_clks), 647 + .icc_clks = bimc_pcnoc_snoc_smmnoc_icc_clks, 648 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_smmnoc_icc_clks), 689 649 }; 690 650 691 651 static struct clk_smd_rpm *msm8974_clks[] = { 692 652 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 693 653 [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 654 [RPM_SMD_MMSSNOC_AHB_CLK] = &clk_smd_rpm_bus_3_mmssnoc_ahb_clk, 701 655 [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 656 [RPM_SMD_GFX3D_CLK_SRC] = &clk_smd_rpm_gfx3d_clk_src, 704 657 [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 658 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, 709 659 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk, 710 660 [RPM_SMD_CXO_D0] = &clk_smd_rpm_cxo_d0, ··· 730 696 static const struct rpm_smd_clk_desc rpm_clk_msm8974 = { 731 697 .clks = msm8974_clks, 732 698 .num_clks = ARRAY_SIZE(msm8974_clks), 699 + .icc_clks = bimc_pcnoc_snoc_cnoc_ocmem_icc_clks, 700 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_cnoc_ocmem_icc_clks), 733 701 .scaling_before_handover = true, 734 702 }; 735 703 736 704 static struct clk_smd_rpm *msm8976_clks[] = { 737 705 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 738 706 [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 707 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, 748 708 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk, 749 709 [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1, ··· 758 730 759 731 static const struct rpm_smd_clk_desc rpm_clk_msm8976 = { 760 732 .clks = msm8976_clks, 761 - .num_clks = ARRAY_SIZE(msm8976_clks), 733 + .icc_clks = bimc_pcnoc_snoc_smmnoc_icc_clks, 734 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_smmnoc_icc_clks), 762 735 }; 763 736 764 737 static struct clk_smd_rpm *msm8992_clks[] = { 765 738 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 766 739 [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 740 [RPM_SMD_GFX3D_CLK_SRC] = &clk_smd_rpm_gfx3d_clk_src, 776 741 [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 742 [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1, 780 743 [RPM_SMD_BB_CLK1_A] = &clk_smd_rpm_bb_clk1_a, 781 744 [RPM_SMD_BB_CLK1_PIN] = &clk_smd_rpm_bb_clk1_pin, ··· 808 789 static const struct rpm_smd_clk_desc rpm_clk_msm8992 = { 809 790 .clks = msm8992_clks, 810 791 .num_clks = ARRAY_SIZE(msm8992_clks), 792 + .icc_clks = bimc_pcnoc_snoc_cnoc_ocmem_icc_clks, 793 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_cnoc_ocmem_icc_clks), 811 794 }; 812 795 813 796 static struct clk_smd_rpm *msm8994_clks[] = { 814 797 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 815 798 [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 799 [RPM_SMD_GFX3D_CLK_SRC] = &clk_smd_rpm_gfx3d_clk_src, 825 800 [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 801 [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1, 829 802 [RPM_SMD_BB_CLK1_A] = &clk_smd_rpm_bb_clk1_a, 830 803 [RPM_SMD_BB_CLK1_PIN] = &clk_smd_rpm_bb_clk1_pin, ··· 860 849 static const struct rpm_smd_clk_desc rpm_clk_msm8994 = { 861 850 .clks = msm8994_clks, 862 851 .num_clks = ARRAY_SIZE(msm8994_clks), 852 + .icc_clks = bimc_pcnoc_snoc_cnoc_ocmem_icc_clks, 853 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_cnoc_ocmem_icc_clks), 863 854 }; 864 855 865 856 static struct clk_smd_rpm *msm8996_clks[] = { 866 857 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 867 858 [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 859 [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk, 879 860 [RPM_SMD_IPA_A_CLK] = &clk_smd_rpm_ipa_a_clk, 880 861 [RPM_SMD_CE1_CLK] = &clk_smd_rpm_ce1_clk, 881 862 [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 863 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, 887 864 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk, 888 865 [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1, ··· 902 903 static const struct rpm_smd_clk_desc rpm_clk_msm8996 = { 903 904 .clks = msm8996_clks, 904 905 .num_clks = ARRAY_SIZE(msm8996_clks), 906 + .icc_clks = msm8996_icc_clks, 907 + .num_icc_clks = ARRAY_SIZE(msm8996_icc_clks), 905 908 }; 906 909 907 910 static struct clk_smd_rpm *qcs404_clks[] = { ··· 932 931 static const struct rpm_smd_clk_desc rpm_clk_qcs404 = { 933 932 .clks = qcs404_clks, 934 933 .num_clks = ARRAY_SIZE(qcs404_clks), 934 + .icc_clks = bimc_pcnoc_snoc_icc_clks, 935 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_icc_clks), 935 936 }; 936 937 937 938 static struct clk_smd_rpm *msm8998_clks[] = { 938 939 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 939 940 [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 941 [RPM_SMD_PCNOC_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk, 943 942 [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 943 [RPM_SMD_CE1_CLK] = &clk_smd_rpm_ce1_clk, 949 944 [RPM_SMD_CE1_A_CLK] = &clk_smd_rpm_ce1_a_clk, 950 945 [RPM_SMD_DIV_CLK1] = &clk_smd_rpm_div_clk1, ··· 963 966 [RPM_SMD_LN_BB_CLK2_A_PIN] = &clk_smd_rpm_ln_bb_clk2_a_pin, 964 967 [RPM_SMD_LN_BB_CLK3_PIN] = &clk_smd_rpm_ln_bb_clk3_pin, 965 968 [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 969 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, 973 970 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk, 974 971 [RPM_SMD_RF_CLK1] = &clk_smd_rpm_rf_clk1, ··· 982 991 static const struct rpm_smd_clk_desc rpm_clk_msm8998 = { 983 992 .clks = msm8998_clks, 984 993 .num_clks = ARRAY_SIZE(msm8998_clks), 994 + .icc_clks = msm8998_icc_clks, 995 + .num_icc_clks = ARRAY_SIZE(msm8998_icc_clks), 985 996 }; 986 997 987 998 static struct clk_smd_rpm *sdm660_clks[] = { 988 999 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 989 1000 [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 1001 [RPM_SMD_CNOC_PERIPH_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk, 995 1002 [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 1003 [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk, 1001 1004 [RPM_SMD_IPA_A_CLK] = &clk_smd_rpm_ipa_a_clk, 1002 1005 [RPM_SMD_CE1_CLK] = &clk_smd_rpm_ce1_clk, 1003 1006 [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 1007 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, 1007 1008 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk, 1008 1009 [RPM_SMD_RF_CLK1] = &clk_smd_rpm_rf_clk1, ··· 1020 1037 static const struct rpm_smd_clk_desc rpm_clk_sdm660 = { 1021 1038 .clks = sdm660_clks, 1022 1039 .num_clks = ARRAY_SIZE(sdm660_clks), 1040 + .icc_clks = sdm660_icc_clks, 1041 + .num_icc_clks = ARRAY_SIZE(sdm660_icc_clks), 1023 1042 }; 1024 1043 1025 1044 static struct clk_smd_rpm *mdm9607_clks[] = { 1026 1045 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 1027 1046 [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 1047 [RPM_SMD_QPIC_CLK] = &clk_smd_rpm_qpic_clk, 1033 1048 [RPM_SMD_QPIC_CLK_A] = &clk_smd_rpm_qpic_a_clk, 1034 1049 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, ··· 1040 1059 static const struct rpm_smd_clk_desc rpm_clk_mdm9607 = { 1041 1060 .clks = mdm9607_clks, 1042 1061 .num_clks = ARRAY_SIZE(mdm9607_clks), 1062 + .icc_clks = bimc_pcnoc_icc_clks, 1063 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_icc_clks), 1043 1064 }; 1044 1065 1045 1066 static struct clk_smd_rpm *msm8953_clks[] = { 1046 1067 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 1047 1068 [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 1069 [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk, 1055 1070 [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 1071 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk, 1059 1072 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk, 1060 1073 [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1, ··· 1070 1095 static const struct rpm_smd_clk_desc rpm_clk_msm8953 = { 1071 1096 .clks = msm8953_clks, 1072 1097 .num_clks = ARRAY_SIZE(msm8953_clks), 1098 + .icc_clks = bimc_pcnoc_snoc_smmnoc_icc_clks, 1099 + .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_smmnoc_icc_clks), 1073 1100 }; 1074 1101 1075 1102 static struct clk_smd_rpm *sm6125_clks[] = { 1076 1103 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 1077 1104 [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 1105 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_branch_qdss_clk, 1083 1106 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_branch_qdss_a_clk, 1084 1107 [RPM_SMD_RF_CLK1] = &clk_smd_rpm_rf_clk1, 1085 1108 [RPM_SMD_RF_CLK1_A] = &clk_smd_rpm_rf_clk1_a, 1086 1109 [RPM_SMD_RF_CLK2] = &clk_smd_rpm_rf_clk2, 1087 1110 [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 1111 [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk, 1091 1112 [RPM_SMD_IPA_A_CLK] = &clk_smd_rpm_ipa_a_clk, 1092 1113 [RPM_SMD_CE1_CLK] = &clk_smd_rpm_ce1_clk, ··· 1093 1122 [RPM_SMD_LN_BB_CLK2_A] = &clk_smd_rpm_ln_bb_clk2_a, 1094 1123 [RPM_SMD_LN_BB_CLK3] = &clk_smd_rpm_ln_bb_clk3, 1095 1124 [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 1125 [RPM_SMD_SNOC_PERIPH_CLK] = &clk_smd_rpm_bus_0_snoc_periph_clk, 1103 1126 [RPM_SMD_SNOC_PERIPH_A_CLK] = &clk_smd_rpm_bus_0_snoc_periph_a_clk, 1104 1127 [RPM_SMD_SNOC_LPASS_CLK] = &clk_smd_rpm_bus_5_snoc_lpass_clk, ··· 1102 1137 static const struct rpm_smd_clk_desc rpm_clk_sm6125 = { 1103 1138 .clks = sm6125_clks, 1104 1139 .num_clks = ARRAY_SIZE(sm6125_clks), 1140 + .icc_clks = sm_qnoc_icc_clks, 1141 + .num_icc_clks = ARRAY_SIZE(sm_qnoc_icc_clks) 1105 1142 }; 1106 1143 1107 1144 /* SM6115 */ 1108 1145 static struct clk_smd_rpm *sm6115_clks[] = { 1109 1146 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 1110 1147 [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 1148 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_branch_qdss_clk, 1116 1149 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_branch_qdss_a_clk, 1117 1150 [RPM_SMD_RF_CLK1] = &clk_smd_rpm_rf_clk1, 1118 1151 [RPM_SMD_RF_CLK1_A] = &clk_smd_rpm_rf_clk1_a, 1119 1152 [RPM_SMD_RF_CLK2] = &clk_smd_rpm_rf_clk2, 1120 1153 [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 1154 [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk, 1124 1155 [RPM_SMD_IPA_A_CLK] = &clk_smd_rpm_ipa_a_clk, 1125 1156 [RPM_SMD_CE1_CLK] = &clk_smd_rpm_ce1_clk, 1126 1157 [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 1158 [RPM_SMD_SNOC_PERIPH_CLK] = &clk_smd_rpm_bus_0_snoc_periph_clk, 1134 1159 [RPM_SMD_SNOC_PERIPH_A_CLK] = &clk_smd_rpm_bus_0_snoc_periph_a_clk, 1135 1160 [RPM_SMD_SNOC_LPASS_CLK] = &clk_smd_rpm_bus_5_snoc_lpass_clk, ··· 1133 1178 static const struct rpm_smd_clk_desc rpm_clk_sm6115 = { 1134 1179 .clks = sm6115_clks, 1135 1180 .num_clks = ARRAY_SIZE(sm6115_clks), 1181 + .icc_clks = sm_qnoc_icc_clks, 1182 + .num_icc_clks = ARRAY_SIZE(sm_qnoc_icc_clks) 1136 1183 }; 1137 1184 1138 1185 static struct clk_smd_rpm *sm6375_clks[] = { 1139 1186 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 1140 1187 [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 1188 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_branch_qdss_clk, 1146 1189 [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 1190 [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk, 1150 1191 [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 1192 [RPM_SMD_SNOC_PERIPH_CLK] = &clk_smd_rpm_bus_0_snoc_periph_clk, 1158 1193 [RPM_SMD_SNOC_PERIPH_A_CLK] = &clk_smd_rpm_bus_0_snoc_periph_a_clk, 1159 1194 [RPM_SMD_SNOC_LPASS_CLK] = &clk_smd_rpm_bus_5_snoc_lpass_clk, ··· 1160 1215 static const struct rpm_smd_clk_desc rpm_clk_sm6375 = { 1161 1216 .clks = sm6375_clks, 1162 1217 .num_clks = ARRAY_SIZE(sm6375_clks), 1218 + .icc_clks = sm_qnoc_icc_clks, 1219 + .num_icc_clks = ARRAY_SIZE(sm_qnoc_icc_clks) 1163 1220 }; 1164 1221 1165 1222 static struct clk_smd_rpm *qcm2290_clks[] = { 1166 1223 [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo, 1167 1224 [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 1225 [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_branch_qdss_clk, 1173 1226 [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_branch_qdss_a_clk, 1174 1227 [RPM_SMD_LN_BB_CLK2] = &clk_smd_rpm_ln_bb_clk2, 1175 1228 [RPM_SMD_LN_BB_CLK2_A] = &clk_smd_rpm_ln_bb_clk2_a, 1176 1229 [RPM_SMD_RF_CLK3] = &clk_smd_rpm_38m4_rf_clk3, 1177 1230 [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 1231 [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk, 1181 1232 [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 1233 [RPM_SMD_SNOC_PERIPH_CLK] = &clk_smd_rpm_bus_0_snoc_periph_clk, 1189 1234 [RPM_SMD_SNOC_PERIPH_A_CLK] = &clk_smd_rpm_bus_0_snoc_periph_a_clk, 1190 1235 [RPM_SMD_SNOC_LPASS_CLK] = &clk_smd_rpm_bus_5_snoc_lpass_clk, ··· 1196 1261 static const struct rpm_smd_clk_desc rpm_clk_qcm2290 = { 1197 1262 .clks = qcm2290_clks, 1198 1263 .num_clks = ARRAY_SIZE(qcm2290_clks), 1264 + .icc_clks = sm_qnoc_icc_clks, 1265 + .num_icc_clks = ARRAY_SIZE(sm_qnoc_icc_clks) 1199 1266 }; 1200 1267 1201 1268 static const struct of_device_id rpm_smd_clk_match_table[] = { ··· 1238 1301 return desc->clks[idx] ? &desc->clks[idx]->hw : ERR_PTR(-ENOENT); 1239 1302 } 1240 1303 1304 + static void rpm_smd_unregister_icc(void *data) 1305 + { 1306 + struct platform_device *icc_pdev = data; 1307 + 1308 + platform_device_unregister(icc_pdev); 1309 + } 1310 + 1241 1311 static int rpm_smd_clk_probe(struct platform_device *pdev) 1242 1312 { 1243 1313 int ret; 1244 1314 size_t num_clks, i; 1245 1315 struct clk_smd_rpm **rpm_smd_clks; 1246 1316 const struct rpm_smd_clk_desc *desc; 1317 + struct platform_device *icc_pdev; 1247 1318 1248 1319 rpmcc_smd_rpm = dev_get_drvdata(pdev->dev.parent); 1249 1320 if (!rpmcc_smd_rpm) { ··· 1281 1336 goto err; 1282 1337 } 1283 1338 1339 + for (i = 0; i < desc->num_icc_clks; i++) { 1340 + if (!desc->icc_clks[i]) 1341 + continue; 1342 + 1343 + ret = clk_smd_rpm_handoff(desc->icc_clks[i]); 1344 + if (ret) 1345 + goto err; 1346 + } 1347 + 1284 1348 if (!desc->scaling_before_handover) { 1285 1349 ret = clk_smd_rpm_enable_scaling(); 1286 1350 if (ret) ··· 1309 1355 (void *)desc); 1310 1356 if (ret) 1311 1357 goto err; 1358 + 1359 + icc_pdev = platform_device_register_data(pdev->dev.parent, 1360 + "icc_smd_rpm", -1, NULL, 0); 1361 + if (IS_ERR(icc_pdev)) { 1362 + dev_err(&pdev->dev, "Failed to register icc_smd_rpm device: %pE\n", 1363 + icc_pdev); 1364 + /* No need to unregister clocks because of this */ 1365 + } else { 1366 + ret = devm_add_action_or_reset(&pdev->dev, rpm_smd_unregister_icc, 1367 + icc_pdev); 1368 + if (ret) 1369 + goto err; 1370 + } 1312 1371 1313 1372 return 0; 1314 1373 err:
+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[] = {
+11 -2
drivers/clk/qcom/dispcc-sm8450.c
··· 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 }
+11 -2
drivers/clk/qcom/dispcc-sm8550.c
··· 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 }
+6
drivers/clk/qcom/gcc-ipq4019.c
··· 1685 1685 [GCC_TCSR_BCR] = {0x22000, 0}, 1686 1686 [GCC_MPM_BCR] = {0x24000, 0}, 1687 1687 [GCC_SPDM_BCR] = {0x25000, 0}, 1688 + [ESS_MAC1_ARES] = {0x1200C, 0}, 1689 + [ESS_MAC2_ARES] = {0x1200C, 1}, 1690 + [ESS_MAC3_ARES] = {0x1200C, 2}, 1691 + [ESS_MAC4_ARES] = {0x1200C, 3}, 1692 + [ESS_MAC5_ARES] = {0x1200C, 4}, 1693 + [ESS_PSGMII_ARES] = {0x1200C, 5}, 1688 1694 }; 1689 1695 1690 1696 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");
+40 -168
drivers/clk/qcom/gcc-ipq5332.c
··· 227 227 static const struct parent_map gcc_parent_map_5[] = { 228 228 { P_XO, 0 }, 229 229 { 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 }, 230 + { P_GPLL0_OUT_AUX, 2 }, 231 + { P_SLEEP_CLK, 6 }, 234 232 }; 235 233 236 234 static const struct clk_parent_data gcc_parent_data_5[] = { 237 235 { .index = DT_XO }, 238 236 { .hw = &gpll0.clkr.hw }, 239 - { .hw = &gpll2.clkr.hw }, 240 - { .hw = &gpll4.clkr.hw }, 241 - { .hw = &gpll0_div2.hw }, 242 237 { .hw = &gpll0.clkr.hw }, 238 + { .index = DT_SLEEP_CLK }, 243 239 }; 244 240 245 241 static const struct parent_map gcc_parent_map_6[] = { 246 242 { P_XO, 0 }, 247 243 { P_GPLL0_OUT_MAIN, 1 }, 248 - { P_GPLL0_OUT_AUX, 2 }, 244 + { P_GPLL2_OUT_AUX, 2 }, 245 + { P_GPLL4_OUT_AUX, 3 }, 249 246 { P_SLEEP_CLK, 6 }, 250 247 }; 251 248 252 249 static const struct clk_parent_data gcc_parent_data_6[] = { 253 250 { .index = DT_XO }, 254 251 { .hw = &gpll0.clkr.hw }, 255 - { .hw = &gpll0.clkr.hw }, 252 + { .hw = &gpll2.clkr.hw }, 253 + { .hw = &gpll4.clkr.hw }, 256 254 { .index = DT_SLEEP_CLK }, 257 255 }; 258 256 ··· 258 260 { P_XO, 0 }, 259 261 { P_GPLL0_OUT_MAIN, 1 }, 260 262 { P_GPLL2_OUT_AUX, 2 }, 261 - { P_GPLL4_OUT_AUX, 3 }, 262 - { P_SLEEP_CLK, 6 }, 263 263 }; 264 264 265 265 static const struct clk_parent_data gcc_parent_data_7[] = { 266 266 { .index = DT_XO }, 267 267 { .hw = &gpll0.clkr.hw }, 268 268 { .hw = &gpll2.clkr.hw }, 269 - { .hw = &gpll4.clkr.hw }, 270 - { .index = DT_SLEEP_CLK }, 271 269 }; 272 270 273 271 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 272 { P_XO, 0 }, 287 273 { P_GPLL0_OUT_MAIN, 1 }, 288 274 { P_GPLL2_OUT_MAIN, 2 }, 289 275 { P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 4 }, 290 276 }; 291 277 292 - static const struct clk_parent_data gcc_parent_data_9[] = { 278 + static const struct clk_parent_data gcc_parent_data_8[] = { 293 279 { .index = DT_XO }, 294 280 { .hw = &gpll0.clkr.hw }, 295 281 { .hw = &gpll2.clkr.hw }, 296 282 { .hw = &gpll0_div2.hw }, 297 283 }; 298 284 299 - static const struct parent_map gcc_parent_map_10[] = { 285 + static const struct parent_map gcc_parent_map_9[] = { 300 286 { P_SLEEP_CLK, 6 }, 301 287 }; 302 288 303 - static const struct clk_parent_data gcc_parent_data_10[] = { 289 + static const struct clk_parent_data gcc_parent_data_9[] = { 304 290 { .index = DT_SLEEP_CLK }, 305 291 }; 306 292 307 - static const struct parent_map gcc_parent_map_11[] = { 293 + static const struct parent_map gcc_parent_map_10[] = { 308 294 { P_XO, 0 }, 309 295 { P_GPLL0_OUT_MAIN, 1 }, 310 296 { P_GPLL4_OUT_MAIN, 2 }, 311 297 { P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 3 }, 312 298 }; 313 299 314 - static const struct clk_parent_data gcc_parent_data_11[] = { 300 + static const struct clk_parent_data gcc_parent_data_10[] = { 315 301 { .index = DT_XO }, 316 302 { .hw = &gpll0.clkr.hw }, 317 303 { .hw = &gpll4.clkr.hw }, 318 304 { .hw = &gpll0_div2.hw }, 319 305 }; 320 306 321 - static const struct parent_map gcc_parent_map_12[] = { 307 + static const struct parent_map gcc_parent_map_11[] = { 322 308 { P_XO, 0 }, 323 309 { P_GPLL0_OUT_AUX, 2 }, 324 310 { P_SLEEP_CLK, 6 }, 325 311 }; 326 312 327 - static const struct clk_parent_data gcc_parent_data_12[] = { 313 + static const struct clk_parent_data gcc_parent_data_11[] = { 328 314 { .index = DT_XO }, 329 315 { .hw = &gpll0.clkr.hw }, 330 316 { .index = DT_SLEEP_CLK }, 331 317 }; 332 318 333 - static const struct parent_map gcc_parent_map_13[] = { 319 + static const struct parent_map gcc_parent_map_12[] = { 334 320 { P_XO, 0 }, 335 321 { P_GPLL4_OUT_AUX, 1 }, 336 322 { P_GPLL0_OUT_MAIN, 3 }, 337 323 { P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 4 }, 338 324 }; 339 325 340 - static const struct clk_parent_data gcc_parent_data_13[] = { 326 + static const struct clk_parent_data gcc_parent_data_12[] = { 341 327 { .index = DT_XO }, 342 328 { .hw = &gpll4.clkr.hw }, 343 329 { .hw = &gpll0.clkr.hw }, ··· 352 370 F(480000000, P_GPLL4_OUT_AUX, 2.5, 0, 0), 353 371 F(533333333, P_GPLL0_OUT_MAIN, 1.5, 0, 0), 354 372 { } 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 373 }; 370 374 371 375 static const struct freq_tbl ftbl_gcc_blsp1_qup1_spi_apps_clk_src[] = { ··· 702 734 .cmd_rcgr = 0x28004, 703 735 .mnd_width = 16, 704 736 .hid_width = 5, 705 - .parent_map = gcc_parent_map_6, 737 + .parent_map = gcc_parent_map_5, 706 738 .freq_tbl = ftbl_gcc_pcie_aux_clk_src, 707 739 .clkr.hw.init = &(const struct clk_init_data) { 708 740 .name = "gcc_pcie_aux_clk_src", 709 - .parent_data = gcc_parent_data_6, 710 - .num_parents = ARRAY_SIZE(gcc_parent_data_6), 741 + .parent_data = gcc_parent_data_5, 742 + .num_parents = ARRAY_SIZE(gcc_parent_data_5), 711 743 .ops = &clk_rcg2_ops, 712 744 }, 713 745 }; ··· 779 811 .cmd_rcgr = 0x25004, 780 812 .mnd_width = 0, 781 813 .hid_width = 5, 782 - .parent_map = gcc_parent_map_7, 814 + .parent_map = gcc_parent_map_6, 783 815 .freq_tbl = ftbl_gcc_apss_axi_clk_src, 784 816 .clkr.hw.init = &(const struct clk_init_data) { 785 817 .name = "gcc_q6_axim_clk_src", 786 - .parent_data = gcc_parent_data_7, 787 - .num_parents = ARRAY_SIZE(gcc_parent_data_7), 818 + .parent_data = gcc_parent_data_6, 819 + .num_parents = ARRAY_SIZE(gcc_parent_data_6), 788 820 .ops = &clk_rcg2_ops, 789 821 }, 790 822 }; ··· 900 932 .cmd_rcgr = 0x32004, 901 933 .mnd_width = 0, 902 934 .hid_width = 5, 903 - .parent_map = gcc_parent_map_8, 935 + .parent_map = gcc_parent_map_7, 904 936 .freq_tbl = ftbl_gcc_qpic_io_macro_clk_src, 905 937 .clkr.hw.init = &(const struct clk_init_data) { 906 938 .name = "gcc_qpic_io_macro_clk_src", 907 - .parent_data = gcc_parent_data_8, 908 - .num_parents = ARRAY_SIZE(gcc_parent_data_8), 939 + .parent_data = gcc_parent_data_7, 940 + .num_parents = ARRAY_SIZE(gcc_parent_data_7), 909 941 .ops = &clk_rcg2_ops, 910 942 }, 911 943 }; ··· 926 958 .cmd_rcgr = 0x33004, 927 959 .mnd_width = 8, 928 960 .hid_width = 5, 929 - .parent_map = gcc_parent_map_9, 961 + .parent_map = gcc_parent_map_8, 930 962 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src, 931 963 .clkr.hw.init = &(const struct clk_init_data) { 932 964 .name = "gcc_sdcc1_apps_clk_src", 933 - .parent_data = gcc_parent_data_9, 934 - .num_parents = ARRAY_SIZE(gcc_parent_data_9), 965 + .parent_data = gcc_parent_data_8, 966 + .num_parents = ARRAY_SIZE(gcc_parent_data_8), 935 967 .ops = &clk_rcg2_floor_ops, 936 968 }, 937 969 }; ··· 945 977 .cmd_rcgr = 0x3400c, 946 978 .mnd_width = 0, 947 979 .hid_width = 5, 948 - .parent_map = gcc_parent_map_10, 980 + .parent_map = gcc_parent_map_9, 949 981 .freq_tbl = ftbl_gcc_sleep_clk_src, 950 982 .clkr.hw.init = &(const struct clk_init_data) { 951 983 .name = "gcc_sleep_clk_src", 952 - .parent_data = gcc_parent_data_10, 953 - .num_parents = ARRAY_SIZE(gcc_parent_data_10), 984 + .parent_data = gcc_parent_data_9, 985 + .num_parents = ARRAY_SIZE(gcc_parent_data_9), 954 986 .ops = &clk_rcg2_ops, 955 987 }, 956 988 }; ··· 967 999 .cmd_rcgr = 0x2e004, 968 1000 .mnd_width = 0, 969 1001 .hid_width = 5, 970 - .parent_map = gcc_parent_map_11, 1002 + .parent_map = gcc_parent_map_10, 971 1003 .freq_tbl = ftbl_gcc_system_noc_bfdcd_clk_src, 972 1004 .clkr.hw.init = &(const struct clk_init_data) { 973 1005 .name = "gcc_system_noc_bfdcd_clk_src", 974 - .parent_data = gcc_parent_data_11, 975 - .num_parents = ARRAY_SIZE(gcc_parent_data_11), 1006 + .parent_data = gcc_parent_data_10, 1007 + .num_parents = ARRAY_SIZE(gcc_parent_data_10), 976 1008 .ops = &clk_rcg2_ops, 977 1009 }, 978 1010 }; ··· 1008 1040 .cmd_rcgr = 0x2c018, 1009 1041 .mnd_width = 16, 1010 1042 .hid_width = 5, 1011 - .parent_map = gcc_parent_map_12, 1043 + .parent_map = gcc_parent_map_11, 1012 1044 .freq_tbl = ftbl_gcc_pcie_aux_clk_src, 1013 1045 .clkr.hw.init = &(const struct clk_init_data) { 1014 1046 .name = "gcc_usb0_aux_clk_src", 1015 - .parent_data = gcc_parent_data_12, 1016 - .num_parents = ARRAY_SIZE(gcc_parent_data_12), 1047 + .parent_data = gcc_parent_data_11, 1048 + .num_parents = ARRAY_SIZE(gcc_parent_data_11), 1017 1049 .ops = &clk_rcg2_ops, 1018 1050 }, 1019 1051 }; ··· 1060 1092 .cmd_rcgr = 0x2c02c, 1061 1093 .mnd_width = 8, 1062 1094 .hid_width = 5, 1063 - .parent_map = gcc_parent_map_13, 1095 + .parent_map = gcc_parent_map_12, 1064 1096 .freq_tbl = ftbl_gcc_usb0_mock_utmi_clk_src, 1065 1097 .clkr.hw.init = &(const struct clk_init_data) { 1066 1098 .name = "gcc_usb0_mock_utmi_clk_src", 1067 - .parent_data = gcc_parent_data_13, 1068 - .num_parents = ARRAY_SIZE(gcc_parent_data_13), 1099 + .parent_data = gcc_parent_data_12, 1100 + .num_parents = ARRAY_SIZE(gcc_parent_data_12), 1069 1101 .ops = &clk_rcg2_ops, 1070 1102 }, 1071 1103 }; ··· 1596 1628 .name = "gcc_mdio_slave_ahb_clk", 1597 1629 .parent_hws = (const struct clk_hw*[]) { 1598 1630 &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 1631 }, 1636 1632 .num_parents = 1, 1637 1633 .flags = CLK_SET_RATE_PARENT, ··· 3272 3340 }, 3273 3341 }; 3274 3342 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 3343 static struct clk_regmap_div gcc_snoc_qosgen_extref_div_clk_src = { 3312 3344 .reg = 0x2e010, 3313 3345 .shift = 0, ··· 3287 3391 }, 3288 3392 }; 3289 3393 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 3394 static struct clk_regmap *gcc_ipq5332_clocks[] = { 3309 3395 [GPLL0_MAIN] = &gpll0_main.clkr, 3310 3396 [GPLL0] = &gpll0.clkr, ··· 3297 3419 [GCC_ADSS_PWM_CLK] = &gcc_adss_pwm_clk.clkr, 3298 3420 [GCC_ADSS_PWM_CLK_SRC] = &gcc_adss_pwm_clk_src.clkr, 3299 3421 [GCC_AHB_CLK] = &gcc_ahb_clk.clkr, 3300 - [GCC_APSS_AXI_CLK_SRC] = &gcc_apss_axi_clk_src.clkr, 3301 3422 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr, 3302 3423 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr, 3303 3424 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr, ··· 3329 3452 [GCC_LPASS_SWAY_CLK_SRC] = &gcc_lpass_sway_clk_src.clkr, 3330 3453 [GCC_MDIO_AHB_CLK] = &gcc_mdio_ahb_clk.clkr, 3331 3454 [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 3455 [GCC_NSS_TS_CLK] = &gcc_nss_ts_clk.clkr, 3335 3456 [GCC_NSS_TS_CLK_SRC] = &gcc_nss_ts_clk_src.clkr, 3336 3457 [GCC_NSSCC_CLK] = &gcc_nsscc_clk.clkr, ··· 3449 3574 [GCC_XO_DIV4_CLK] = &gcc_xo_div4_clk.clkr, 3450 3575 [GCC_IM_SLEEP_CLK] = &gcc_im_sleep_clk.clkr, 3451 3576 [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 3577 [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 3578 [GCC_PCIE3X2_PIPE_CLK_SRC] = &gcc_pcie3x2_pipe_clk_src.clkr, 3457 3579 [GCC_PCIE3X1_0_PIPE_CLK_SRC] = &gcc_pcie3x1_0_pipe_clk_src.clkr, 3458 3580 [GCC_PCIE3X1_1_PIPE_CLK_SRC] = &gcc_pcie3x1_1_pipe_clk_src.clkr,
+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,
+143 -118
drivers/clk/qcom/gcc-mdm9615.c
··· 25 25 #include "clk-branch.h" 26 26 #include "reset.h" 27 27 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 - }, 28 + enum { 29 + DT_CXO, 30 + DT_PLL4, 31 + }; 32 + 33 + enum { 34 + P_CXO, 35 + P_PLL8, 36 + P_PLL14, 37 + }; 38 + 39 + static const struct parent_map gcc_cxo_map[] = { 40 + { P_CXO, 0 }, 41 + }; 42 + 43 + static const struct clk_parent_data gcc_cxo[] = { 44 + { .index = DT_CXO, .name = "cxo_board" }, 37 45 }; 38 46 39 47 static struct clk_pll pll0 = { ··· 54 46 .status_bit = 16, 55 47 .clkr.hw.init = &(struct clk_init_data){ 56 48 .name = "pll0", 57 - .parent_names = (const char *[]){ "cxo" }, 58 - .num_parents = 1, 49 + .parent_data = gcc_cxo, 50 + .num_parents = ARRAY_SIZE(gcc_cxo), 59 51 .ops = &clk_pll_ops, 60 52 }, 61 53 }; ··· 65 57 .enable_mask = BIT(0), 66 58 .hw.init = &(struct clk_init_data){ 67 59 .name = "pll0_vote", 68 - .parent_names = (const char *[]){ "pll8" }, 60 + .parent_hws = (const struct clk_hw*[]) { 61 + &pll0.clkr.hw, 62 + }, 69 63 .num_parents = 1, 70 64 .ops = &clk_pll_vote_ops, 71 65 }, ··· 78 68 .enable_mask = BIT(4), 79 69 .hw.init = &(struct clk_init_data){ 80 70 .name = "pll4_vote", 81 - .parent_names = (const char *[]){ "pll4" }, 71 + .parent_data = &(const struct clk_parent_data) { 72 + .index = DT_PLL4, .name = "pll4", 73 + }, 82 74 .num_parents = 1, 83 75 .ops = &clk_pll_vote_ops, 84 76 }, ··· 96 84 .status_bit = 16, 97 85 .clkr.hw.init = &(struct clk_init_data){ 98 86 .name = "pll8", 99 - .parent_names = (const char *[]){ "cxo" }, 100 - .num_parents = 1, 87 + .parent_data = gcc_cxo, 88 + .num_parents = ARRAY_SIZE(gcc_cxo), 101 89 .ops = &clk_pll_ops, 102 90 }, 103 91 }; ··· 107 95 .enable_mask = BIT(8), 108 96 .hw.init = &(struct clk_init_data){ 109 97 .name = "pll8_vote", 110 - .parent_names = (const char *[]){ "pll8" }, 98 + .parent_hws = (const struct clk_hw*[]) { 99 + &pll8.clkr.hw, 100 + }, 111 101 .num_parents = 1, 112 102 .ops = &clk_pll_vote_ops, 113 103 }, ··· 125 111 .status_bit = 16, 126 112 .clkr.hw.init = &(struct clk_init_data){ 127 113 .name = "pll14", 128 - .parent_names = (const char *[]){ "cxo" }, 129 - .num_parents = 1, 114 + .parent_data = gcc_cxo, 115 + .num_parents = ARRAY_SIZE(gcc_cxo), 130 116 .ops = &clk_pll_ops, 131 117 }, 132 118 }; ··· 136 122 .enable_mask = BIT(11), 137 123 .hw.init = &(struct clk_init_data){ 138 124 .name = "pll14_vote", 139 - .parent_names = (const char *[]){ "pll14" }, 125 + .parent_hws = (const struct clk_hw*[]) { 126 + &pll14.clkr.hw, 127 + }, 140 128 .num_parents = 1, 141 129 .ops = &clk_pll_vote_ops, 142 130 }, 143 - }; 144 - 145 - enum { 146 - P_CXO, 147 - P_PLL8, 148 - P_PLL14, 149 131 }; 150 132 151 133 static const struct parent_map gcc_cxo_pll8_map[] = { ··· 149 139 { P_PLL8, 3 } 150 140 }; 151 141 152 - static const char * const gcc_cxo_pll8[] = { 153 - "cxo", 154 - "pll8_vote", 142 + static const struct clk_parent_data gcc_cxo_pll8[] = { 143 + { .index = DT_CXO, .name = "cxo_board" }, 144 + { .hw = &pll8_vote.hw }, 155 145 }; 156 146 157 147 static const struct parent_map gcc_cxo_pll14_map[] = { ··· 159 149 { P_PLL14, 4 } 160 150 }; 161 151 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", 152 + static const struct clk_parent_data gcc_cxo_pll14[] = { 153 + { .index = DT_CXO, .name = "cxo_board" }, 154 + { .hw = &pll14_vote.hw }, 173 155 }; 174 156 175 157 static struct freq_tbl clk_tbl_gsbi_uart[] = { ··· 207 205 .enable_mask = BIT(11), 208 206 .hw.init = &(struct clk_init_data){ 209 207 .name = "gsbi1_uart_src", 210 - .parent_names = gcc_cxo_pll8, 211 - .num_parents = 2, 208 + .parent_data = gcc_cxo_pll8, 209 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 212 210 .ops = &clk_rcg_ops, 213 211 .flags = CLK_SET_PARENT_GATE, 214 212 }, ··· 223 221 .enable_mask = BIT(9), 224 222 .hw.init = &(struct clk_init_data){ 225 223 .name = "gsbi1_uart_clk", 226 - .parent_names = (const char *[]){ 227 - "gsbi1_uart_src", 224 + .parent_hws = (const struct clk_hw*[]) { 225 + &gsbi1_uart_src.clkr.hw, 228 226 }, 229 227 .num_parents = 1, 230 228 .ops = &clk_branch_ops, ··· 258 256 .enable_mask = BIT(11), 259 257 .hw.init = &(struct clk_init_data){ 260 258 .name = "gsbi2_uart_src", 261 - .parent_names = gcc_cxo_pll8, 262 - .num_parents = 2, 259 + .parent_data = gcc_cxo_pll8, 260 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 263 261 .ops = &clk_rcg_ops, 264 262 .flags = CLK_SET_PARENT_GATE, 265 263 }, ··· 274 272 .enable_mask = BIT(9), 275 273 .hw.init = &(struct clk_init_data){ 276 274 .name = "gsbi2_uart_clk", 277 - .parent_names = (const char *[]){ 278 - "gsbi2_uart_src", 275 + .parent_hws = (const struct clk_hw*[]) { 276 + &gsbi2_uart_src.clkr.hw, 279 277 }, 280 278 .num_parents = 1, 281 279 .ops = &clk_branch_ops, ··· 309 307 .enable_mask = BIT(11), 310 308 .hw.init = &(struct clk_init_data){ 311 309 .name = "gsbi3_uart_src", 312 - .parent_names = gcc_cxo_pll8, 313 - .num_parents = 2, 310 + .parent_data = gcc_cxo_pll8, 311 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 314 312 .ops = &clk_rcg_ops, 315 313 .flags = CLK_SET_PARENT_GATE, 316 314 }, ··· 325 323 .enable_mask = BIT(9), 326 324 .hw.init = &(struct clk_init_data){ 327 325 .name = "gsbi3_uart_clk", 328 - .parent_names = (const char *[]){ 329 - "gsbi3_uart_src", 326 + .parent_hws = (const struct clk_hw*[]) { 327 + &gsbi3_uart_src.clkr.hw, 330 328 }, 331 329 .num_parents = 1, 332 330 .ops = &clk_branch_ops, ··· 360 358 .enable_mask = BIT(11), 361 359 .hw.init = &(struct clk_init_data){ 362 360 .name = "gsbi4_uart_src", 363 - .parent_names = gcc_cxo_pll8, 364 - .num_parents = 2, 361 + .parent_data = gcc_cxo_pll8, 362 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 365 363 .ops = &clk_rcg_ops, 366 364 .flags = CLK_SET_PARENT_GATE, 367 365 }, ··· 376 374 .enable_mask = BIT(9), 377 375 .hw.init = &(struct clk_init_data){ 378 376 .name = "gsbi4_uart_clk", 379 - .parent_names = (const char *[]){ 380 - "gsbi4_uart_src", 377 + .parent_hws = (const struct clk_hw*[]) { 378 + &gsbi4_uart_src.clkr.hw, 381 379 }, 382 380 .num_parents = 1, 383 381 .ops = &clk_branch_ops, ··· 411 409 .enable_mask = BIT(11), 412 410 .hw.init = &(struct clk_init_data){ 413 411 .name = "gsbi5_uart_src", 414 - .parent_names = gcc_cxo_pll8, 415 - .num_parents = 2, 412 + .parent_data = gcc_cxo_pll8, 413 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 416 414 .ops = &clk_rcg_ops, 417 415 .flags = CLK_SET_PARENT_GATE, 418 416 }, ··· 427 425 .enable_mask = BIT(9), 428 426 .hw.init = &(struct clk_init_data){ 429 427 .name = "gsbi5_uart_clk", 430 - .parent_names = (const char *[]){ 431 - "gsbi5_uart_src", 428 + .parent_hws = (const struct clk_hw*[]) { 429 + &gsbi5_uart_src.clkr.hw, 432 430 }, 433 431 .num_parents = 1, 434 432 .ops = &clk_branch_ops, ··· 474 472 .enable_mask = BIT(11), 475 473 .hw.init = &(struct clk_init_data){ 476 474 .name = "gsbi1_qup_src", 477 - .parent_names = gcc_cxo_pll8, 478 - .num_parents = 2, 475 + .parent_data = gcc_cxo_pll8, 476 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 479 477 .ops = &clk_rcg_ops, 480 478 .flags = CLK_SET_PARENT_GATE, 481 479 }, ··· 490 488 .enable_mask = BIT(9), 491 489 .hw.init = &(struct clk_init_data){ 492 490 .name = "gsbi1_qup_clk", 493 - .parent_names = (const char *[]){ "gsbi1_qup_src" }, 491 + .parent_hws = (const struct clk_hw*[]) { 492 + &gsbi1_qup_src.clkr.hw, 493 + }, 494 494 .num_parents = 1, 495 495 .ops = &clk_branch_ops, 496 496 .flags = CLK_SET_RATE_PARENT, ··· 525 521 .enable_mask = BIT(11), 526 522 .hw.init = &(struct clk_init_data){ 527 523 .name = "gsbi2_qup_src", 528 - .parent_names = gcc_cxo_pll8, 529 - .num_parents = 2, 524 + .parent_data = gcc_cxo_pll8, 525 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 530 526 .ops = &clk_rcg_ops, 531 527 .flags = CLK_SET_PARENT_GATE, 532 528 }, ··· 541 537 .enable_mask = BIT(9), 542 538 .hw.init = &(struct clk_init_data){ 543 539 .name = "gsbi2_qup_clk", 544 - .parent_names = (const char *[]){ "gsbi2_qup_src" }, 540 + .parent_hws = (const struct clk_hw*[]) { 541 + &gsbi2_qup_src.clkr.hw, 542 + }, 545 543 .num_parents = 1, 546 544 .ops = &clk_branch_ops, 547 545 .flags = CLK_SET_RATE_PARENT, ··· 576 570 .enable_mask = BIT(11), 577 571 .hw.init = &(struct clk_init_data){ 578 572 .name = "gsbi3_qup_src", 579 - .parent_names = gcc_cxo_pll8, 580 - .num_parents = 2, 573 + .parent_data = gcc_cxo_pll8, 574 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 581 575 .ops = &clk_rcg_ops, 582 576 .flags = CLK_SET_PARENT_GATE, 583 577 }, ··· 592 586 .enable_mask = BIT(9), 593 587 .hw.init = &(struct clk_init_data){ 594 588 .name = "gsbi3_qup_clk", 595 - .parent_names = (const char *[]){ "gsbi3_qup_src" }, 589 + .parent_hws = (const struct clk_hw*[]) { 590 + &gsbi3_qup_src.clkr.hw, 591 + }, 596 592 .num_parents = 1, 597 593 .ops = &clk_branch_ops, 598 594 .flags = CLK_SET_RATE_PARENT, ··· 627 619 .enable_mask = BIT(11), 628 620 .hw.init = &(struct clk_init_data){ 629 621 .name = "gsbi4_qup_src", 630 - .parent_names = gcc_cxo_pll8, 631 - .num_parents = 2, 622 + .parent_data = gcc_cxo_pll8, 623 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 632 624 .ops = &clk_rcg_ops, 633 625 .flags = CLK_SET_PARENT_GATE, 634 626 }, ··· 643 635 .enable_mask = BIT(9), 644 636 .hw.init = &(struct clk_init_data){ 645 637 .name = "gsbi4_qup_clk", 646 - .parent_names = (const char *[]){ "gsbi4_qup_src" }, 638 + .parent_hws = (const struct clk_hw*[]) { 639 + &gsbi4_qup_src.clkr.hw, 640 + }, 647 641 .num_parents = 1, 648 642 .ops = &clk_branch_ops, 649 643 .flags = CLK_SET_RATE_PARENT, ··· 678 668 .enable_mask = BIT(11), 679 669 .hw.init = &(struct clk_init_data){ 680 670 .name = "gsbi5_qup_src", 681 - .parent_names = gcc_cxo_pll8, 682 - .num_parents = 2, 671 + .parent_data = gcc_cxo_pll8, 672 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 683 673 .ops = &clk_rcg_ops, 684 674 .flags = CLK_SET_PARENT_GATE, 685 675 }, ··· 694 684 .enable_mask = BIT(9), 695 685 .hw.init = &(struct clk_init_data){ 696 686 .name = "gsbi5_qup_clk", 697 - .parent_names = (const char *[]){ "gsbi5_qup_src" }, 687 + .parent_hws = (const struct clk_hw*[]) { 688 + &gsbi5_qup_src.clkr.hw, 689 + }, 698 690 .num_parents = 1, 699 691 .ops = &clk_branch_ops, 700 692 .flags = CLK_SET_RATE_PARENT, ··· 735 723 .enable_mask = BIT(11), 736 724 .hw.init = &(struct clk_init_data){ 737 725 .name = "gp0_src", 738 - .parent_names = gcc_cxo, 739 - .num_parents = 1, 726 + .parent_data = gcc_cxo, 727 + .num_parents = ARRAY_SIZE(gcc_cxo), 740 728 .ops = &clk_rcg_ops, 741 729 .flags = CLK_SET_PARENT_GATE, 742 730 }, ··· 751 739 .enable_mask = BIT(9), 752 740 .hw.init = &(struct clk_init_data){ 753 741 .name = "gp0_clk", 754 - .parent_names = (const char *[]){ "gp0_src" }, 742 + .parent_hws = (const struct clk_hw*[]) { 743 + &gp0_src.clkr.hw, 744 + }, 755 745 .num_parents = 1, 756 746 .ops = &clk_branch_ops, 757 747 .flags = CLK_SET_RATE_PARENT, ··· 786 772 .enable_mask = BIT(11), 787 773 .hw.init = &(struct clk_init_data){ 788 774 .name = "gp1_src", 789 - .parent_names = gcc_cxo, 790 - .num_parents = 1, 775 + .parent_data = gcc_cxo, 776 + .num_parents = ARRAY_SIZE(gcc_cxo), 791 777 .ops = &clk_rcg_ops, 792 778 .flags = CLK_SET_RATE_GATE, 793 779 }, ··· 802 788 .enable_mask = BIT(9), 803 789 .hw.init = &(struct clk_init_data){ 804 790 .name = "gp1_clk", 805 - .parent_names = (const char *[]){ "gp1_src" }, 791 + .parent_hws = (const struct clk_hw*[]) { 792 + &gp1_src.clkr.hw, 793 + }, 806 794 .num_parents = 1, 807 795 .ops = &clk_branch_ops, 808 796 .flags = CLK_SET_RATE_PARENT, ··· 837 821 .enable_mask = BIT(11), 838 822 .hw.init = &(struct clk_init_data){ 839 823 .name = "gp2_src", 840 - .parent_names = gcc_cxo, 841 - .num_parents = 1, 824 + .parent_data = gcc_cxo, 825 + .num_parents = ARRAY_SIZE(gcc_cxo), 842 826 .ops = &clk_rcg_ops, 843 827 .flags = CLK_SET_RATE_GATE, 844 828 }, ··· 853 837 .enable_mask = BIT(9), 854 838 .hw.init = &(struct clk_init_data){ 855 839 .name = "gp2_clk", 856 - .parent_names = (const char *[]){ "gp2_src" }, 840 + .parent_hws = (const struct clk_hw*[]) { 841 + &gp2_src.clkr.hw, 842 + }, 857 843 .num_parents = 1, 858 844 .ops = &clk_branch_ops, 859 845 .flags = CLK_SET_RATE_PARENT, ··· 891 873 .clkr = { 892 874 .hw.init = &(struct clk_init_data){ 893 875 .name = "prng_src", 894 - .parent_names = gcc_cxo_pll8, 895 - .num_parents = 2, 876 + .parent_data = gcc_cxo_pll8, 877 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 896 878 .ops = &clk_rcg_ops, 897 879 }, 898 880 }, ··· 907 889 .enable_mask = BIT(10), 908 890 .hw.init = &(struct clk_init_data){ 909 891 .name = "prng_clk", 910 - .parent_names = (const char *[]){ "prng_src" }, 892 + .parent_hws = (const struct clk_hw*[]) { 893 + &prng_src.clkr.hw, 894 + }, 911 895 .num_parents = 1, 912 896 .ops = &clk_branch_ops, 913 897 }, ··· 955 935 .enable_mask = BIT(11), 956 936 .hw.init = &(struct clk_init_data){ 957 937 .name = "sdc1_src", 958 - .parent_names = gcc_cxo_pll8, 959 - .num_parents = 2, 938 + .parent_data = gcc_cxo_pll8, 939 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 960 940 .ops = &clk_rcg_ops, 961 941 }, 962 942 } ··· 970 950 .enable_mask = BIT(9), 971 951 .hw.init = &(struct clk_init_data){ 972 952 .name = "sdc1_clk", 973 - .parent_names = (const char *[]){ "sdc1_src" }, 953 + .parent_hws = (const struct clk_hw*[]) { 954 + &sdc1_src.clkr.hw, 955 + }, 974 956 .num_parents = 1, 975 957 .ops = &clk_branch_ops, 976 958 .flags = CLK_SET_RATE_PARENT, ··· 1005 983 .enable_mask = BIT(11), 1006 984 .hw.init = &(struct clk_init_data){ 1007 985 .name = "sdc2_src", 1008 - .parent_names = gcc_cxo_pll8, 1009 - .num_parents = 2, 986 + .parent_data = gcc_cxo_pll8, 987 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 1010 988 .ops = &clk_rcg_ops, 1011 989 }, 1012 990 } ··· 1020 998 .enable_mask = BIT(9), 1021 999 .hw.init = &(struct clk_init_data){ 1022 1000 .name = "sdc2_clk", 1023 - .parent_names = (const char *[]){ "sdc2_src" }, 1001 + .parent_hws = (const struct clk_hw*[]) { 1002 + &sdc2_src.clkr.hw, 1003 + }, 1024 1004 .num_parents = 1, 1025 1005 .ops = &clk_branch_ops, 1026 1006 .flags = CLK_SET_RATE_PARENT, ··· 1060 1036 .enable_mask = BIT(11), 1061 1037 .hw.init = &(struct clk_init_data){ 1062 1038 .name = "usb_hs1_xcvr_src", 1063 - .parent_names = gcc_cxo_pll8, 1064 - .num_parents = 2, 1039 + .parent_data = gcc_cxo_pll8, 1040 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 1065 1041 .ops = &clk_rcg_ops, 1066 1042 .flags = CLK_SET_RATE_GATE, 1067 1043 }, ··· 1076 1052 .enable_mask = BIT(9), 1077 1053 .hw.init = &(struct clk_init_data){ 1078 1054 .name = "usb_hs1_xcvr_clk", 1079 - .parent_names = (const char *[]){ "usb_hs1_xcvr_src" }, 1055 + .parent_hws = (const struct clk_hw*[]) { 1056 + &usb_hs1_xcvr_src.clkr.hw, 1057 + }, 1080 1058 .num_parents = 1, 1081 1059 .ops = &clk_branch_ops, 1082 1060 .flags = CLK_SET_RATE_PARENT, ··· 1111 1085 .enable_mask = BIT(11), 1112 1086 .hw.init = &(struct clk_init_data){ 1113 1087 .name = "usb_hsic_xcvr_fs_src", 1114 - .parent_names = gcc_cxo_pll8, 1115 - .num_parents = 2, 1088 + .parent_data = gcc_cxo_pll8, 1089 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 1116 1090 .ops = &clk_rcg_ops, 1117 1091 .flags = CLK_SET_RATE_GATE, 1118 1092 }, ··· 1127 1101 .enable_mask = BIT(9), 1128 1102 .hw.init = &(struct clk_init_data){ 1129 1103 .name = "usb_hsic_xcvr_fs_clk", 1130 - .parent_names = 1131 - (const char *[]){ "usb_hsic_xcvr_fs_src" }, 1104 + .parent_hws = (const struct clk_hw*[]) { 1105 + &usb_hsic_xcvr_fs_src.clkr.hw, 1106 + }, 1132 1107 .num_parents = 1, 1133 1108 .ops = &clk_branch_ops, 1134 1109 .flags = CLK_SET_RATE_PARENT, ··· 1167 1140 .enable_mask = BIT(11), 1168 1141 .hw.init = &(struct clk_init_data){ 1169 1142 .name = "usb_hs1_system_src", 1170 - .parent_names = gcc_cxo_pll8, 1171 - .num_parents = 2, 1143 + .parent_data = gcc_cxo_pll8, 1144 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 1172 1145 .ops = &clk_rcg_ops, 1173 1146 .flags = CLK_SET_RATE_GATE, 1174 1147 }, ··· 1182 1155 .enable_reg = 0x36a4, 1183 1156 .enable_mask = BIT(9), 1184 1157 .hw.init = &(struct clk_init_data){ 1185 - .parent_names = 1186 - (const char *[]){ "usb_hs1_system_src" }, 1158 + .parent_hws = (const struct clk_hw*[]) { 1159 + &usb_hs1_system_src.clkr.hw, 1160 + }, 1187 1161 .num_parents = 1, 1188 1162 .name = "usb_hs1_system_clk", 1189 1163 .ops = &clk_branch_ops, ··· 1223 1195 .enable_mask = BIT(11), 1224 1196 .hw.init = &(struct clk_init_data){ 1225 1197 .name = "usb_hsic_system_src", 1226 - .parent_names = gcc_cxo_pll8, 1227 - .num_parents = 2, 1198 + .parent_data = gcc_cxo_pll8, 1199 + .num_parents = ARRAY_SIZE(gcc_cxo_pll8), 1228 1200 .ops = &clk_rcg_ops, 1229 1201 .flags = CLK_SET_RATE_GATE, 1230 1202 }, ··· 1238 1210 .enable_reg = 0x2b58, 1239 1211 .enable_mask = BIT(9), 1240 1212 .hw.init = &(struct clk_init_data){ 1241 - .parent_names = 1242 - (const char *[]){ "usb_hsic_system_src" }, 1213 + .parent_hws = (const struct clk_hw*[]) { 1214 + &usb_hsic_system_src.clkr.hw, 1215 + }, 1243 1216 .num_parents = 1, 1244 1217 .name = "usb_hsic_system_clk", 1245 1218 .ops = &clk_branch_ops, ··· 1279 1250 .enable_mask = BIT(11), 1280 1251 .hw.init = &(struct clk_init_data){ 1281 1252 .name = "usb_hsic_hsic_src", 1282 - .parent_names = gcc_cxo_pll14, 1283 - .num_parents = 2, 1253 + .parent_data = gcc_cxo_pll14, 1254 + .num_parents = ARRAY_SIZE(gcc_cxo_pll14), 1284 1255 .ops = &clk_rcg_ops, 1285 1256 .flags = CLK_SET_RATE_GATE, 1286 1257 }, ··· 1293 1264 .enable_reg = 0x2b50, 1294 1265 .enable_mask = BIT(9), 1295 1266 .hw.init = &(struct clk_init_data){ 1296 - .parent_names = (const char *[]){ "usb_hsic_hsic_src" }, 1267 + .parent_hws = (const struct clk_hw*[]) { 1268 + &usb_hsic_hsic_src.clkr.hw, 1269 + }, 1297 1270 .num_parents = 1, 1298 1271 .name = "usb_hsic_hsic_clk", 1299 1272 .ops = &clk_branch_ops, ··· 1311 1280 .enable_reg = 0x2b48, 1312 1281 .enable_mask = BIT(0), 1313 1282 .hw.init = &(struct clk_init_data){ 1314 - .parent_names = (const char *[]){ "cxo" }, 1315 - .num_parents = 1, 1283 + .parent_data = gcc_cxo, 1284 + .num_parents = ARRAY_SIZE(gcc_cxo), 1316 1285 .name = "usb_hsic_hsio_cal_clk", 1317 1286 .ops = &clk_branch_ops, 1318 1287 }, ··· 1611 1580 }, 1612 1581 }; 1613 1582 1614 - static struct clk_hw *gcc_mdm9615_hws[] = { 1615 - &cxo.hw, 1616 - }; 1617 - 1618 1583 static struct clk_regmap *gcc_mdm9615_clks[] = { 1619 1584 [PLL0] = &pll0.clkr, 1620 1585 [PLL0_VOTE] = &pll0_vote, ··· 1720 1693 .num_clks = ARRAY_SIZE(gcc_mdm9615_clks), 1721 1694 .resets = gcc_mdm9615_resets, 1722 1695 .num_resets = ARRAY_SIZE(gcc_mdm9615_resets), 1723 - .clk_hws = gcc_mdm9615_hws, 1724 - .num_clk_hws = ARRAY_SIZE(gcc_mdm9615_hws), 1725 1696 }; 1726 1697 1727 1698 static const struct of_device_id gcc_mdm9615_match_table[] = {
+2 -1
drivers/clk/qcom/gcc-msm8917.c
··· 63 63 .index = DT_XO, 64 64 }, 65 65 .num_parents = 1, 66 - .ops = &clk_alpha_pll_ops, 66 + .ops = &clk_branch_simple_ops, 67 67 }, 68 68 }, 69 69 }; ··· 3041 3041 static struct clk_regmap *gcc_msm8917_clocks[] = { 3042 3042 [GPLL0] = &gpll0.clkr, 3043 3043 [GPLL0_EARLY] = &gpll0_early.clkr, 3044 + [GPLL0_SLEEP_CLK_SRC] = &gpll0_sleep_clk_src.clkr, 3044 3045 [GPLL3] = &gpll3.clkr, 3045 3046 [GPLL3_EARLY] = &gpll3_early.clkr, 3046 3047 [GPLL4] = &gpll4.clkr,
+61 -3
drivers/clk/qcom/gcc-msm8998.c
··· 24 24 #include "reset.h" 25 25 #include "gdsc.h" 26 26 27 + #define GCC_MMSS_MISC 0x0902C 28 + #define GCC_GPU_MISC 0x71028 29 + 27 30 static struct pll_vco fabia_vco[] = { 28 31 { 250000000, 2000000000, 0 }, 29 32 { 125000000, 1000000000, 1 }, ··· 1369 1366 }, 1370 1367 }; 1371 1368 1369 + static struct clk_branch gcc_mmss_gpll0_div_clk = { 1370 + .halt_check = BRANCH_HALT_DELAY, 1371 + .clkr = { 1372 + .enable_reg = 0x5200c, 1373 + .enable_mask = BIT(0), 1374 + .hw.init = &(struct clk_init_data){ 1375 + .name = "gcc_mmss_gpll0_div_clk", 1376 + .parent_hws = (const struct clk_hw *[]) { 1377 + &gpll0_out_main.clkr.hw, 1378 + }, 1379 + .num_parents = 1, 1380 + .ops = &clk_branch2_ops, 1381 + }, 1382 + }, 1383 + }; 1384 + 1372 1385 static struct clk_branch gcc_mmss_gpll0_clk = { 1373 1386 .halt_check = BRANCH_HALT_DELAY, 1374 1387 .clkr = { ··· 1408 1389 .enable_mask = BIT(2), 1409 1390 .hw.init = &(struct clk_init_data){ 1410 1391 .name = "gcc_mss_gpll0_div_clk_src", 1392 + .ops = &clk_branch2_ops, 1393 + }, 1394 + }, 1395 + }; 1396 + 1397 + static struct clk_branch gcc_gpu_gpll0_div_clk = { 1398 + .halt_check = BRANCH_HALT_DELAY, 1399 + .clkr = { 1400 + .enable_reg = 0x5200c, 1401 + .enable_mask = BIT(3), 1402 + .hw.init = &(struct clk_init_data){ 1403 + .name = "gcc_gpu_gpll0_div_clk", 1404 + .parent_hws = (const struct clk_hw *[]) { 1405 + &gpll0_out_main.clkr.hw, 1406 + }, 1407 + .num_parents = 1, 1408 + .ops = &clk_branch2_ops, 1409 + }, 1410 + }, 1411 + }; 1412 + 1413 + static struct clk_branch gcc_gpu_gpll0_clk = { 1414 + .halt_check = BRANCH_HALT_DELAY, 1415 + .clkr = { 1416 + .enable_reg = 0x5200c, 1417 + .enable_mask = BIT(4), 1418 + .hw.init = &(struct clk_init_data){ 1419 + .name = "gcc_gpu_gpll0_clk", 1420 + .parent_hws = (const struct clk_hw *[]) { 1421 + &gpll0_out_main.clkr.hw, 1422 + }, 1423 + .num_parents = 1, 1411 1424 .ops = &clk_branch2_ops, 1412 1425 }, 1413 1426 }, ··· 2111 2060 2112 2061 static struct clk_branch gcc_bimc_gfx_clk = { 2113 2062 .halt_reg = 0x46040, 2114 - .halt_check = BRANCH_HALT, 2063 + .halt_check = BRANCH_HALT_SKIP, 2115 2064 .clkr = { 2116 2065 .enable_reg = 0x46040, 2117 2066 .enable_mask = BIT(0), ··· 2124 2073 2125 2074 static struct clk_branch gcc_gpu_bimc_gfx_clk = { 2126 2075 .halt_reg = 0x71010, 2127 - .halt_check = BRANCH_HALT, 2076 + .halt_check = BRANCH_HALT_SKIP, 2128 2077 .clkr = { 2129 2078 .enable_reg = 0x71010, 2130 2079 .enable_mask = BIT(0), ··· 2150 2099 2151 2100 static struct clk_branch gcc_gpu_cfg_ahb_clk = { 2152 2101 .halt_reg = 0x71004, 2153 - .halt_check = BRANCH_HALT, 2102 + .halt_check = BRANCH_HALT_SKIP, 2154 2103 .clkr = { 2155 2104 .enable_reg = 0x71004, 2156 2105 .enable_mask = BIT(0), ··· 3130 3079 [AGGRE2_SNOC_NORTH_AXI] = &aggre2_snoc_north_axi_clk.clkr, 3131 3080 [SSC_XO] = &ssc_xo_clk.clkr, 3132 3081 [SSC_CNOC_AHBS_CLK] = &ssc_cnoc_ahbs_clk.clkr, 3082 + [GCC_MMSS_GPLL0_DIV_CLK] = &gcc_mmss_gpll0_div_clk.clkr, 3083 + [GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr, 3084 + [GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr, 3133 3085 }; 3134 3086 3135 3087 static struct gdsc *gcc_msm8998_gdscs[] = { ··· 3287 3233 ret = regmap_update_bits(regmap, 0x52008, BIT(21), BIT(21)); 3288 3234 if (ret) 3289 3235 return ret; 3236 + 3237 + /* Disable the GPLL0 active input to MMSS and GPU via MISC registers */ 3238 + regmap_write(regmap, GCC_MMSS_MISC, 0x10003); 3239 + regmap_write(regmap, GCC_GPU_MISC, 0x10003); 3290 3240 3291 3241 return qcom_cc_really_probe(pdev, &gcc_msm8998_desc, regmap); 3292 3242 }
+105 -54
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> ··· 18 18 #include "clk-regmap-divider.h" 19 19 #include "clk-regmap-mux.h" 20 20 #include "clk-regmap-phy-mux.h" 21 + #include "gdsc.h" 21 22 #include "reset.h" 22 23 23 24 enum { ··· 372 371 { .index = DT_TCXO_IDX }, 373 372 }; 374 373 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 374 static const struct parent_map gcc_parent_map_8[] = { 386 375 { P_BI_TCXO, 0 }, 387 376 { P_GCC_GPLL0_OUT_MAIN, 1 }, ··· 431 440 }, 432 441 }; 433 442 434 - static struct clk_regmap_mux gcc_pcie_0_pipe_clk_src = { 443 + static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = { 435 444 .reg = 0x9d064, 436 - .shift = 0, 437 - .width = 2, 438 - .parent_map = gcc_parent_map_7, 439 445 .clkr = { 440 446 .hw.init = &(const struct clk_init_data) { 441 447 .name = "gcc_pcie_0_pipe_clk_src", 442 - .parent_data = gcc_parent_data_7, 443 - .num_parents = ARRAY_SIZE(gcc_parent_data_7), 448 + .parent_data = &(const struct clk_parent_data){ 449 + .index = DT_PCIE_0_PIPE_CLK_IDX, 450 + }, 451 + .num_parents = 1, 444 452 .ops = &clk_regmap_phy_mux_ops, 445 453 }, 446 454 }, ··· 476 486 .name = "gcc_aggre_noc_ecpri_dma_clk_src", 477 487 .parent_data = gcc_parent_data_4, 478 488 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 479 - .ops = &clk_rcg2_ops, 489 + .ops = &clk_rcg2_shared_ops, 480 490 }, 481 491 }; 482 492 ··· 496 506 .name = "gcc_aggre_noc_ecpri_gsi_clk_src", 497 507 .parent_data = gcc_parent_data_5, 498 508 .num_parents = ARRAY_SIZE(gcc_parent_data_5), 499 - .ops = &clk_rcg2_ops, 509 + .ops = &clk_rcg2_shared_ops, 500 510 }, 501 511 }; 502 512 ··· 515 525 .name = "gcc_gp1_clk_src", 516 526 .parent_data = gcc_parent_data_1, 517 527 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 518 - .ops = &clk_rcg2_ops, 528 + .ops = &clk_rcg2_shared_ops, 519 529 }, 520 530 }; 521 531 ··· 529 539 .name = "gcc_gp2_clk_src", 530 540 .parent_data = gcc_parent_data_1, 531 541 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 532 - .ops = &clk_rcg2_ops, 542 + .ops = &clk_rcg2_shared_ops, 533 543 }, 534 544 }; 535 545 ··· 543 553 .name = "gcc_gp3_clk_src", 544 554 .parent_data = gcc_parent_data_1, 545 555 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 546 - .ops = &clk_rcg2_ops, 556 + .ops = &clk_rcg2_shared_ops, 547 557 }, 548 558 }; 549 559 ··· 562 572 .name = "gcc_pcie_0_aux_clk_src", 563 573 .parent_data = gcc_parent_data_3, 564 574 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 565 - .ops = &clk_rcg2_ops, 575 + .ops = &clk_rcg2_shared_ops, 566 576 }, 567 577 }; 568 578 ··· 582 592 .name = "gcc_pcie_0_phy_rchng_clk_src", 583 593 .parent_data = gcc_parent_data_0, 584 594 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 585 - .ops = &clk_rcg2_ops, 595 + .ops = &clk_rcg2_shared_ops, 586 596 }, 587 597 }; 588 598 ··· 601 611 .name = "gcc_pdm2_clk_src", 602 612 .parent_data = gcc_parent_data_0, 603 613 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 604 - .ops = &clk_rcg2_ops, 614 + .ops = &clk_rcg2_shared_ops, 605 615 }, 606 616 }; 607 617 ··· 623 633 .name = "gcc_qupv3_wrap0_s0_clk_src", 624 634 .parent_data = gcc_parent_data_0, 625 635 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 626 - .ops = &clk_rcg2_ops, 636 + .ops = &clk_rcg2_shared_ops, 627 637 }; 628 638 629 639 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = { ··· 639 649 .name = "gcc_qupv3_wrap0_s1_clk_src", 640 650 .parent_data = gcc_parent_data_0, 641 651 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 642 - .ops = &clk_rcg2_ops, 652 + .ops = &clk_rcg2_shared_ops, 643 653 }; 644 654 645 655 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = { ··· 655 665 .name = "gcc_qupv3_wrap0_s2_clk_src", 656 666 .parent_data = gcc_parent_data_0, 657 667 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 658 - .ops = &clk_rcg2_ops, 668 + .ops = &clk_rcg2_shared_ops, 659 669 }; 660 670 661 671 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = { ··· 671 681 .name = "gcc_qupv3_wrap0_s3_clk_src", 672 682 .parent_data = gcc_parent_data_0, 673 683 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 674 - .ops = &clk_rcg2_ops, 684 + .ops = &clk_rcg2_shared_ops, 675 685 }; 676 686 677 687 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = { ··· 687 697 .name = "gcc_qupv3_wrap0_s4_clk_src", 688 698 .parent_data = gcc_parent_data_0, 689 699 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 690 - .ops = &clk_rcg2_ops, 700 + .ops = &clk_rcg2_shared_ops, 691 701 }; 692 702 693 703 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = { ··· 708 718 .name = "gcc_qupv3_wrap0_s5_clk_src", 709 719 .parent_data = gcc_parent_data_0, 710 720 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 711 - .ops = &clk_rcg2_ops, 721 + .ops = &clk_rcg2_shared_ops, 712 722 }; 713 723 714 724 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = { ··· 724 734 .name = "gcc_qupv3_wrap0_s6_clk_src", 725 735 .parent_data = gcc_parent_data_0, 726 736 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 727 - .ops = &clk_rcg2_ops, 737 + .ops = &clk_rcg2_shared_ops, 728 738 }; 729 739 730 740 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = { ··· 740 750 .name = "gcc_qupv3_wrap0_s7_clk_src", 741 751 .parent_data = gcc_parent_data_0, 742 752 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 743 - .ops = &clk_rcg2_ops, 753 + .ops = &clk_rcg2_shared_ops, 744 754 }; 745 755 746 756 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = { ··· 756 766 .name = "gcc_qupv3_wrap1_s0_clk_src", 757 767 .parent_data = gcc_parent_data_0, 758 768 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 759 - .ops = &clk_rcg2_ops, 769 + .ops = &clk_rcg2_shared_ops, 760 770 }; 761 771 762 772 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = { ··· 772 782 .name = "gcc_qupv3_wrap1_s1_clk_src", 773 783 .parent_data = gcc_parent_data_0, 774 784 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 775 - .ops = &clk_rcg2_ops, 785 + .ops = &clk_rcg2_shared_ops, 776 786 }; 777 787 778 788 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = { ··· 788 798 .name = "gcc_qupv3_wrap1_s2_clk_src", 789 799 .parent_data = gcc_parent_data_0, 790 800 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 791 - .ops = &clk_rcg2_ops, 801 + .ops = &clk_rcg2_shared_ops, 792 802 }; 793 803 794 804 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = { ··· 804 814 .name = "gcc_qupv3_wrap1_s3_clk_src", 805 815 .parent_data = gcc_parent_data_0, 806 816 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 807 - .ops = &clk_rcg2_ops, 817 + .ops = &clk_rcg2_shared_ops, 808 818 }; 809 819 810 820 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = { ··· 820 830 .name = "gcc_qupv3_wrap1_s4_clk_src", 821 831 .parent_data = gcc_parent_data_0, 822 832 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 823 - .ops = &clk_rcg2_ops, 833 + .ops = &clk_rcg2_shared_ops, 824 834 }; 825 835 826 836 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = { ··· 836 846 .name = "gcc_qupv3_wrap1_s5_clk_src", 837 847 .parent_data = gcc_parent_data_0, 838 848 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 839 - .ops = &clk_rcg2_ops, 849 + .ops = &clk_rcg2_shared_ops, 840 850 }; 841 851 842 852 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = { ··· 852 862 .name = "gcc_qupv3_wrap1_s6_clk_src", 853 863 .parent_data = gcc_parent_data_0, 854 864 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 855 - .ops = &clk_rcg2_ops, 865 + .ops = &clk_rcg2_shared_ops, 856 866 }; 857 867 858 868 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = { ··· 868 878 .name = "gcc_qupv3_wrap1_s7_clk_src", 869 879 .parent_data = gcc_parent_data_0, 870 880 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 871 - .ops = &clk_rcg2_ops, 881 + .ops = &clk_rcg2_shared_ops, 872 882 }; 873 883 874 884 static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = { ··· 904 914 .name = "gcc_sdcc5_apps_clk_src", 905 915 .parent_data = gcc_parent_data_8, 906 916 .num_parents = ARRAY_SIZE(gcc_parent_data_8), 907 - .ops = &clk_rcg2_ops, 917 + .ops = &clk_rcg2_floor_ops, 908 918 }, 909 919 }; 910 920 ··· 923 933 .name = "gcc_sdcc5_ice_core_clk_src", 924 934 .parent_data = gcc_parent_data_2, 925 935 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 926 - .ops = &clk_rcg2_ops, 936 + .ops = &clk_rcg2_floor_ops, 927 937 }, 928 938 }; 929 939 ··· 937 947 .name = "gcc_sm_bus_xo_clk_src", 938 948 .parent_data = gcc_parent_data_2, 939 949 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 940 - .ops = &clk_rcg2_ops, 950 + .ops = &clk_rcg2_shared_ops, 941 951 }, 942 952 }; 943 953 ··· 956 966 .name = "gcc_tsc_clk_src", 957 967 .parent_data = gcc_parent_data_9, 958 968 .num_parents = ARRAY_SIZE(gcc_parent_data_9), 959 - .ops = &clk_rcg2_ops, 969 + .ops = &clk_rcg2_shared_ops, 960 970 }, 961 971 }; 962 972 ··· 976 986 .name = "gcc_usb30_prim_master_clk_src", 977 987 .parent_data = gcc_parent_data_0, 978 988 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 979 - .ops = &clk_rcg2_ops, 989 + .ops = &clk_rcg2_shared_ops, 980 990 }, 981 991 }; 982 992 ··· 990 1000 .name = "gcc_usb30_prim_mock_utmi_clk_src", 991 1001 .parent_data = gcc_parent_data_0, 992 1002 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 993 - .ops = &clk_rcg2_ops, 1003 + .ops = &clk_rcg2_shared_ops, 994 1004 }, 995 1005 }; 996 1006 ··· 1004 1014 .name = "gcc_usb3_prim_phy_aux_clk_src", 1005 1015 .parent_data = gcc_parent_data_3, 1006 1016 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 1007 - .ops = &clk_rcg2_ops, 1017 + .ops = &clk_rcg2_shared_ops, 1008 1018 }, 1009 1019 }; 1010 1020 ··· 1125 1135 .name = "gcc_ddrss_ecpri_dma_clk", 1126 1136 .parent_hws = (const struct clk_hw*[]) { 1127 1137 &gcc_aggre_noc_ecpri_dma_clk_src.clkr.hw, 1138 + }, 1139 + .num_parents = 1, 1140 + .flags = CLK_SET_RATE_PARENT, 1141 + .ops = &clk_branch2_aon_ops, 1142 + }, 1143 + }, 1144 + }; 1145 + 1146 + static struct clk_branch gcc_ddrss_ecpri_gsi_clk = { 1147 + .halt_reg = 0x54298, 1148 + .halt_check = BRANCH_HALT_VOTED, 1149 + .hwcg_reg = 0x54298, 1150 + .hwcg_bit = 1, 1151 + .clkr = { 1152 + .enable_reg = 0x54298, 1153 + .enable_mask = BIT(0), 1154 + .hw.init = &(const struct clk_init_data) { 1155 + .name = "gcc_ddrss_ecpri_gsi_clk", 1156 + .parent_hws = (const struct clk_hw*[]) { 1157 + &gcc_aggre_noc_ecpri_gsi_clk_src.clkr.hw, 1128 1158 }, 1129 1159 .num_parents = 1, 1130 1160 .flags = CLK_SET_RATE_PARENT, ··· 1469 1459 1470 1460 static struct clk_branch gcc_pcie_0_clkref_en = { 1471 1461 .halt_reg = 0x9c004, 1472 - .halt_bit = 31, 1473 - .halt_check = BRANCH_HALT_ENABLE, 1462 + .halt_check = BRANCH_HALT, 1474 1463 .clkr = { 1475 1464 .enable_reg = 0x9c004, 1476 1465 .enable_mask = BIT(0), 1477 1466 .hw.init = &(const struct clk_init_data) { 1478 1467 .name = "gcc_pcie_0_clkref_en", 1479 - .ops = &clk_branch_ops, 1468 + .ops = &clk_branch2_ops, 1480 1469 }, 1481 1470 }, 1482 1471 }; ··· 2295 2286 2296 2287 static struct clk_branch gcc_usb2_clkref_en = { 2297 2288 .halt_reg = 0x9c008, 2298 - .halt_bit = 31, 2299 - .halt_check = BRANCH_HALT_ENABLE, 2289 + .halt_check = BRANCH_HALT, 2300 2290 .clkr = { 2301 2291 .enable_reg = 0x9c008, 2302 2292 .enable_mask = BIT(0), 2303 2293 .hw.init = &(const struct clk_init_data) { 2304 2294 .name = "gcc_usb2_clkref_en", 2305 - .ops = &clk_branch_ops, 2295 + .ops = &clk_branch2_ops, 2306 2296 }, 2307 2297 }, 2308 2298 }; ··· 2409 2401 .ops = &clk_branch2_ops, 2410 2402 }, 2411 2403 }, 2404 + }; 2405 + 2406 + static struct gdsc pcie_0_gdsc = { 2407 + .gdscr = 0x9d004, 2408 + .en_rest_wait_val = 0x2, 2409 + .en_few_wait_val = 0x2, 2410 + .clk_dis_wait_val = 0xf, 2411 + .pd = { 2412 + .name = "gcc_pcie_0_gdsc", 2413 + }, 2414 + .pwrsts = PWRSTS_OFF_ON, 2415 + }; 2416 + 2417 + static struct gdsc pcie_0_phy_gdsc = { 2418 + .gdscr = 0x7c004, 2419 + .en_rest_wait_val = 0x2, 2420 + .en_few_wait_val = 0x2, 2421 + .clk_dis_wait_val = 0x2, 2422 + .pd = { 2423 + .name = "gcc_pcie_0_phy_gdsc", 2424 + }, 2425 + .pwrsts = PWRSTS_OFF_ON, 2426 + }; 2427 + 2428 + static struct gdsc usb30_prim_gdsc = { 2429 + .gdscr = 0x49004, 2430 + .en_rest_wait_val = 0x2, 2431 + .en_few_wait_val = 0x2, 2432 + .clk_dis_wait_val = 0xf, 2433 + .pd = { 2434 + .name = "gcc_usb30_prim_gdsc", 2435 + }, 2436 + .pwrsts = PWRSTS_OFF_ON, 2412 2437 }; 2413 2438 2414 2439 static struct clk_regmap *gcc_qdu1000_clocks[] = { ··· 2576 2535 [GCC_AGGRE_NOC_ECPRI_GSI_CLK] = &gcc_aggre_noc_ecpri_gsi_clk.clkr, 2577 2536 [GCC_PCIE_0_PHY_AUX_CLK_SRC] = &gcc_pcie_0_phy_aux_clk_src.clkr, 2578 2537 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr, 2538 + [GCC_GPLL1_OUT_EVEN] = &gcc_gpll1_out_even.clkr, 2539 + [GCC_DDRSS_ECPRI_GSI_CLK] = &gcc_ddrss_ecpri_gsi_clk.clkr, 2540 + }; 2541 + 2542 + static struct gdsc *gcc_qdu1000_gdscs[] = { 2543 + [PCIE_0_GDSC] = &pcie_0_gdsc, 2544 + [PCIE_0_PHY_GDSC] = &pcie_0_phy_gdsc, 2545 + [USB30_PRIM_GDSC] = &usb30_prim_gdsc, 2579 2546 }; 2580 2547 2581 2548 static const struct qcom_reset_map gcc_qdu1000_resets[] = { ··· 2647 2598 .num_clks = ARRAY_SIZE(gcc_qdu1000_clocks), 2648 2599 .resets = gcc_qdu1000_resets, 2649 2600 .num_resets = ARRAY_SIZE(gcc_qdu1000_resets), 2601 + .gdscs = gcc_qdu1000_gdscs, 2602 + .num_gdscs = ARRAY_SIZE(gcc_qdu1000_gdscs), 2650 2603 }; 2651 2604 2652 2605 static const struct of_device_id gcc_qdu1000_match_table[] = {
+1
drivers/clk/qcom/gcc-sc7180.c
··· 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 };
+130 -15
drivers/clk/qcom/gcc-sc8280xp.c
··· 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-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 };
+1
drivers/clk/qcom/gcc-sm7150.c
··· 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-sm8250.c
··· 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 };
+2 -2
drivers/clk/qcom/gcc-sm8450.c
··· 936 936 .parent_data = gcc_parent_data_7, 937 937 .num_parents = ARRAY_SIZE(gcc_parent_data_7), 938 938 .flags = CLK_SET_RATE_PARENT, 939 - .ops = &clk_rcg2_ops, 939 + .ops = &clk_rcg2_floor_ops, 940 940 }, 941 941 }; 942 942 ··· 959 959 .parent_data = gcc_parent_data_0, 960 960 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 961 961 .flags = CLK_SET_RATE_PARENT, 962 - .ops = &clk_rcg2_ops, 962 + .ops = &clk_rcg2_floor_ops, 963 963 }, 964 964 }; 965 965
+1 -1
drivers/clk/qcom/gpucc-msm8998.c
··· 97 97 98 98 static const struct clk_parent_data gpu_xo_gpll0[] = { 99 99 { .hw = &gpucc_cxo_clk.clkr.hw }, 100 - { .fw_name = "gpll0" }, 100 + { .fw_name = "gpll0", .name = "gcc_gpu_gpll0_clk" }, 101 101 }; 102 102 103 103 static const struct parent_map gpu_xo_gpupll0_map[] = {
+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[] = {
-571
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/clk-provider.h> 15 - #include <linux/regmap.h> 16 - 17 - #include <dt-bindings/clock/qcom,lcc-mdm9615.h> 18 - 19 - #include "common.h" 20 - #include "clk-regmap.h" 21 - #include "clk-pll.h" 22 - #include "clk-rcg.h" 23 - #include "clk-branch.h" 24 - #include "clk-regmap-divider.h" 25 - #include "clk-regmap-mux.h" 26 - 27 - static struct clk_pll pll4 = { 28 - .l_reg = 0x4, 29 - .m_reg = 0x8, 30 - .n_reg = 0xc, 31 - .config_reg = 0x14, 32 - .mode_reg = 0x0, 33 - .status_reg = 0x18, 34 - .status_bit = 16, 35 - .clkr.hw.init = &(struct clk_init_data){ 36 - .name = "pll4", 37 - .parent_names = (const char *[]){ "cxo" }, 38 - .num_parents = 1, 39 - .ops = &clk_pll_ops, 40 - }, 41 - }; 42 - 43 - enum { 44 - P_CXO, 45 - P_PLL4, 46 - }; 47 - 48 - static const struct parent_map lcc_cxo_pll4_map[] = { 49 - { P_CXO, 0 }, 50 - { P_PLL4, 2 } 51 - }; 52 - 53 - static const char * const lcc_cxo_pll4[] = { 54 - "cxo", 55 - "pll4_vote", 56 - }; 57 - 58 - static struct freq_tbl clk_tbl_aif_osr_492[] = { 59 - { 512000, P_PLL4, 4, 1, 240 }, 60 - { 768000, P_PLL4, 4, 1, 160 }, 61 - { 1024000, P_PLL4, 4, 1, 120 }, 62 - { 1536000, P_PLL4, 4, 1, 80 }, 63 - { 2048000, P_PLL4, 4, 1, 60 }, 64 - { 3072000, P_PLL4, 4, 1, 40 }, 65 - { 4096000, P_PLL4, 4, 1, 30 }, 66 - { 6144000, P_PLL4, 4, 1, 20 }, 67 - { 8192000, P_PLL4, 4, 1, 15 }, 68 - { 12288000, P_PLL4, 4, 1, 10 }, 69 - { 24576000, P_PLL4, 4, 1, 5 }, 70 - { 27000000, P_CXO, 1, 0, 0 }, 71 - { } 72 - }; 73 - 74 - static struct freq_tbl clk_tbl_aif_osr_393[] = { 75 - { 512000, P_PLL4, 4, 1, 192 }, 76 - { 768000, P_PLL4, 4, 1, 128 }, 77 - { 1024000, P_PLL4, 4, 1, 96 }, 78 - { 1536000, P_PLL4, 4, 1, 64 }, 79 - { 2048000, P_PLL4, 4, 1, 48 }, 80 - { 3072000, P_PLL4, 4, 1, 32 }, 81 - { 4096000, P_PLL4, 4, 1, 24 }, 82 - { 6144000, P_PLL4, 4, 1, 16 }, 83 - { 8192000, P_PLL4, 4, 1, 12 }, 84 - { 12288000, P_PLL4, 4, 1, 8 }, 85 - { 24576000, P_PLL4, 4, 1, 4 }, 86 - { 27000000, P_CXO, 1, 0, 0 }, 87 - { } 88 - }; 89 - 90 - static struct clk_rcg mi2s_osr_src = { 91 - .ns_reg = 0x48, 92 - .md_reg = 0x4c, 93 - .mn = { 94 - .mnctr_en_bit = 8, 95 - .mnctr_reset_bit = 7, 96 - .mnctr_mode_shift = 5, 97 - .n_val_shift = 24, 98 - .m_val_shift = 8, 99 - .width = 8, 100 - }, 101 - .p = { 102 - .pre_div_shift = 3, 103 - .pre_div_width = 2, 104 - }, 105 - .s = { 106 - .src_sel_shift = 0, 107 - .parent_map = lcc_cxo_pll4_map, 108 - }, 109 - .freq_tbl = clk_tbl_aif_osr_393, 110 - .clkr = { 111 - .enable_reg = 0x48, 112 - .enable_mask = BIT(9), 113 - .hw.init = &(struct clk_init_data){ 114 - .name = "mi2s_osr_src", 115 - .parent_names = lcc_cxo_pll4, 116 - .num_parents = 2, 117 - .ops = &clk_rcg_ops, 118 - .flags = CLK_SET_RATE_GATE, 119 - }, 120 - }, 121 - }; 122 - 123 - static const char * const lcc_mi2s_parents[] = { 124 - "mi2s_osr_src", 125 - }; 126 - 127 - static struct clk_branch mi2s_osr_clk = { 128 - .halt_reg = 0x50, 129 - .halt_bit = 1, 130 - .halt_check = BRANCH_HALT_ENABLE, 131 - .clkr = { 132 - .enable_reg = 0x48, 133 - .enable_mask = BIT(17), 134 - .hw.init = &(struct clk_init_data){ 135 - .name = "mi2s_osr_clk", 136 - .parent_names = lcc_mi2s_parents, 137 - .num_parents = 1, 138 - .ops = &clk_branch_ops, 139 - .flags = CLK_SET_RATE_PARENT, 140 - }, 141 - }, 142 - }; 143 - 144 - static struct clk_regmap_div mi2s_div_clk = { 145 - .reg = 0x48, 146 - .shift = 10, 147 - .width = 4, 148 - .clkr = { 149 - .enable_reg = 0x48, 150 - .enable_mask = BIT(15), 151 - .hw.init = &(struct clk_init_data){ 152 - .name = "mi2s_div_clk", 153 - .parent_names = lcc_mi2s_parents, 154 - .num_parents = 1, 155 - .ops = &clk_regmap_div_ops, 156 - }, 157 - }, 158 - }; 159 - 160 - static struct clk_branch mi2s_bit_div_clk = { 161 - .halt_reg = 0x50, 162 - .halt_bit = 0, 163 - .halt_check = BRANCH_HALT_ENABLE, 164 - .clkr = { 165 - .enable_reg = 0x48, 166 - .enable_mask = BIT(15), 167 - .hw.init = &(struct clk_init_data){ 168 - .name = "mi2s_bit_div_clk", 169 - .parent_names = (const char *[]){ "mi2s_div_clk" }, 170 - .num_parents = 1, 171 - .ops = &clk_branch_ops, 172 - .flags = CLK_SET_RATE_PARENT, 173 - }, 174 - }, 175 - }; 176 - 177 - static struct clk_regmap_mux mi2s_bit_clk = { 178 - .reg = 0x48, 179 - .shift = 14, 180 - .width = 1, 181 - .clkr = { 182 - .hw.init = &(struct clk_init_data){ 183 - .name = "mi2s_bit_clk", 184 - .parent_names = (const char *[]){ 185 - "mi2s_bit_div_clk", 186 - "mi2s_codec_clk", 187 - }, 188 - .num_parents = 2, 189 - .ops = &clk_regmap_mux_closest_ops, 190 - .flags = CLK_SET_RATE_PARENT, 191 - }, 192 - }, 193 - }; 194 - 195 - #define CLK_AIF_OSR_DIV(prefix, _ns, _md, hr) \ 196 - static struct clk_rcg prefix##_osr_src = { \ 197 - .ns_reg = _ns, \ 198 - .md_reg = _md, \ 199 - .mn = { \ 200 - .mnctr_en_bit = 8, \ 201 - .mnctr_reset_bit = 7, \ 202 - .mnctr_mode_shift = 5, \ 203 - .n_val_shift = 24, \ 204 - .m_val_shift = 8, \ 205 - .width = 8, \ 206 - }, \ 207 - .p = { \ 208 - .pre_div_shift = 3, \ 209 - .pre_div_width = 2, \ 210 - }, \ 211 - .s = { \ 212 - .src_sel_shift = 0, \ 213 - .parent_map = lcc_cxo_pll4_map, \ 214 - }, \ 215 - .freq_tbl = clk_tbl_aif_osr_393, \ 216 - .clkr = { \ 217 - .enable_reg = _ns, \ 218 - .enable_mask = BIT(9), \ 219 - .hw.init = &(struct clk_init_data){ \ 220 - .name = #prefix "_osr_src", \ 221 - .parent_names = lcc_cxo_pll4, \ 222 - .num_parents = 2, \ 223 - .ops = &clk_rcg_ops, \ 224 - .flags = CLK_SET_RATE_GATE, \ 225 - }, \ 226 - }, \ 227 - }; \ 228 - \ 229 - static const char * const lcc_##prefix##_parents[] = { \ 230 - #prefix "_osr_src", \ 231 - }; \ 232 - \ 233 - static struct clk_branch prefix##_osr_clk = { \ 234 - .halt_reg = hr, \ 235 - .halt_bit = 1, \ 236 - .halt_check = BRANCH_HALT_ENABLE, \ 237 - .clkr = { \ 238 - .enable_reg = _ns, \ 239 - .enable_mask = BIT(21), \ 240 - .hw.init = &(struct clk_init_data){ \ 241 - .name = #prefix "_osr_clk", \ 242 - .parent_names = lcc_##prefix##_parents, \ 243 - .num_parents = 1, \ 244 - .ops = &clk_branch_ops, \ 245 - .flags = CLK_SET_RATE_PARENT, \ 246 - }, \ 247 - }, \ 248 - }; \ 249 - \ 250 - static struct clk_regmap_div prefix##_div_clk = { \ 251 - .reg = _ns, \ 252 - .shift = 10, \ 253 - .width = 8, \ 254 - .clkr = { \ 255 - .hw.init = &(struct clk_init_data){ \ 256 - .name = #prefix "_div_clk", \ 257 - .parent_names = lcc_##prefix##_parents, \ 258 - .num_parents = 1, \ 259 - .ops = &clk_regmap_div_ops, \ 260 - }, \ 261 - }, \ 262 - }; \ 263 - \ 264 - static struct clk_branch prefix##_bit_div_clk = { \ 265 - .halt_reg = hr, \ 266 - .halt_bit = 0, \ 267 - .halt_check = BRANCH_HALT_ENABLE, \ 268 - .clkr = { \ 269 - .enable_reg = _ns, \ 270 - .enable_mask = BIT(19), \ 271 - .hw.init = &(struct clk_init_data){ \ 272 - .name = #prefix "_bit_div_clk", \ 273 - .parent_names = (const char *[]){ \ 274 - #prefix "_div_clk" \ 275 - }, \ 276 - .num_parents = 1, \ 277 - .ops = &clk_branch_ops, \ 278 - .flags = CLK_SET_RATE_PARENT, \ 279 - }, \ 280 - }, \ 281 - }; \ 282 - \ 283 - static struct clk_regmap_mux prefix##_bit_clk = { \ 284 - .reg = _ns, \ 285 - .shift = 18, \ 286 - .width = 1, \ 287 - .clkr = { \ 288 - .hw.init = &(struct clk_init_data){ \ 289 - .name = #prefix "_bit_clk", \ 290 - .parent_names = (const char *[]){ \ 291 - #prefix "_bit_div_clk", \ 292 - #prefix "_codec_clk", \ 293 - }, \ 294 - .num_parents = 2, \ 295 - .ops = &clk_regmap_mux_closest_ops, \ 296 - .flags = CLK_SET_RATE_PARENT, \ 297 - }, \ 298 - }, \ 299 - } 300 - 301 - CLK_AIF_OSR_DIV(codec_i2s_mic, 0x60, 0x64, 0x68); 302 - CLK_AIF_OSR_DIV(spare_i2s_mic, 0x78, 0x7c, 0x80); 303 - CLK_AIF_OSR_DIV(codec_i2s_spkr, 0x6c, 0x70, 0x74); 304 - CLK_AIF_OSR_DIV(spare_i2s_spkr, 0x84, 0x88, 0x8c); 305 - 306 - static struct freq_tbl clk_tbl_pcm_492[] = { 307 - { 256000, P_PLL4, 4, 1, 480 }, 308 - { 512000, P_PLL4, 4, 1, 240 }, 309 - { 768000, P_PLL4, 4, 1, 160 }, 310 - { 1024000, P_PLL4, 4, 1, 120 }, 311 - { 1536000, P_PLL4, 4, 1, 80 }, 312 - { 2048000, P_PLL4, 4, 1, 60 }, 313 - { 3072000, P_PLL4, 4, 1, 40 }, 314 - { 4096000, P_PLL4, 4, 1, 30 }, 315 - { 6144000, P_PLL4, 4, 1, 20 }, 316 - { 8192000, P_PLL4, 4, 1, 15 }, 317 - { 12288000, P_PLL4, 4, 1, 10 }, 318 - { 24576000, P_PLL4, 4, 1, 5 }, 319 - { 27000000, P_CXO, 1, 0, 0 }, 320 - { } 321 - }; 322 - 323 - static struct freq_tbl clk_tbl_pcm_393[] = { 324 - { 256000, P_PLL4, 4, 1, 384 }, 325 - { 512000, P_PLL4, 4, 1, 192 }, 326 - { 768000, P_PLL4, 4, 1, 128 }, 327 - { 1024000, P_PLL4, 4, 1, 96 }, 328 - { 1536000, P_PLL4, 4, 1, 64 }, 329 - { 2048000, P_PLL4, 4, 1, 48 }, 330 - { 3072000, P_PLL4, 4, 1, 32 }, 331 - { 4096000, P_PLL4, 4, 1, 24 }, 332 - { 6144000, P_PLL4, 4, 1, 16 }, 333 - { 8192000, P_PLL4, 4, 1, 12 }, 334 - { 12288000, P_PLL4, 4, 1, 8 }, 335 - { 24576000, P_PLL4, 4, 1, 4 }, 336 - { 27000000, P_CXO, 1, 0, 0 }, 337 - { } 338 - }; 339 - 340 - static struct clk_rcg pcm_src = { 341 - .ns_reg = 0x54, 342 - .md_reg = 0x58, 343 - .mn = { 344 - .mnctr_en_bit = 8, 345 - .mnctr_reset_bit = 7, 346 - .mnctr_mode_shift = 5, 347 - .n_val_shift = 16, 348 - .m_val_shift = 16, 349 - .width = 16, 350 - }, 351 - .p = { 352 - .pre_div_shift = 3, 353 - .pre_div_width = 2, 354 - }, 355 - .s = { 356 - .src_sel_shift = 0, 357 - .parent_map = lcc_cxo_pll4_map, 358 - }, 359 - .freq_tbl = clk_tbl_pcm_393, 360 - .clkr = { 361 - .enable_reg = 0x54, 362 - .enable_mask = BIT(9), 363 - .hw.init = &(struct clk_init_data){ 364 - .name = "pcm_src", 365 - .parent_names = lcc_cxo_pll4, 366 - .num_parents = 2, 367 - .ops = &clk_rcg_ops, 368 - .flags = CLK_SET_RATE_GATE, 369 - }, 370 - }, 371 - }; 372 - 373 - static struct clk_branch pcm_clk_out = { 374 - .halt_reg = 0x5c, 375 - .halt_bit = 0, 376 - .halt_check = BRANCH_HALT_ENABLE, 377 - .clkr = { 378 - .enable_reg = 0x54, 379 - .enable_mask = BIT(11), 380 - .hw.init = &(struct clk_init_data){ 381 - .name = "pcm_clk_out", 382 - .parent_names = (const char *[]){ "pcm_src" }, 383 - .num_parents = 1, 384 - .ops = &clk_branch_ops, 385 - .flags = CLK_SET_RATE_PARENT, 386 - }, 387 - }, 388 - }; 389 - 390 - static struct clk_regmap_mux pcm_clk = { 391 - .reg = 0x54, 392 - .shift = 10, 393 - .width = 1, 394 - .clkr = { 395 - .hw.init = &(struct clk_init_data){ 396 - .name = "pcm_clk", 397 - .parent_names = (const char *[]){ 398 - "pcm_clk_out", 399 - "pcm_codec_clk", 400 - }, 401 - .num_parents = 2, 402 - .ops = &clk_regmap_mux_closest_ops, 403 - .flags = CLK_SET_RATE_PARENT, 404 - }, 405 - }, 406 - }; 407 - 408 - static struct clk_rcg slimbus_src = { 409 - .ns_reg = 0xcc, 410 - .md_reg = 0xd0, 411 - .mn = { 412 - .mnctr_en_bit = 8, 413 - .mnctr_reset_bit = 7, 414 - .mnctr_mode_shift = 5, 415 - .n_val_shift = 24, 416 - .m_val_shift = 8, 417 - .width = 8, 418 - }, 419 - .p = { 420 - .pre_div_shift = 3, 421 - .pre_div_width = 2, 422 - }, 423 - .s = { 424 - .src_sel_shift = 0, 425 - .parent_map = lcc_cxo_pll4_map, 426 - }, 427 - .freq_tbl = clk_tbl_aif_osr_393, 428 - .clkr = { 429 - .enable_reg = 0xcc, 430 - .enable_mask = BIT(9), 431 - .hw.init = &(struct clk_init_data){ 432 - .name = "slimbus_src", 433 - .parent_names = lcc_cxo_pll4, 434 - .num_parents = 2, 435 - .ops = &clk_rcg_ops, 436 - .flags = CLK_SET_RATE_GATE, 437 - }, 438 - }, 439 - }; 440 - 441 - static const char * const lcc_slimbus_parents[] = { 442 - "slimbus_src", 443 - }; 444 - 445 - static struct clk_branch audio_slimbus_clk = { 446 - .halt_reg = 0xd4, 447 - .halt_bit = 0, 448 - .halt_check = BRANCH_HALT_ENABLE, 449 - .clkr = { 450 - .enable_reg = 0xcc, 451 - .enable_mask = BIT(10), 452 - .hw.init = &(struct clk_init_data){ 453 - .name = "audio_slimbus_clk", 454 - .parent_names = lcc_slimbus_parents, 455 - .num_parents = 1, 456 - .ops = &clk_branch_ops, 457 - .flags = CLK_SET_RATE_PARENT, 458 - }, 459 - }, 460 - }; 461 - 462 - static struct clk_branch sps_slimbus_clk = { 463 - .halt_reg = 0xd4, 464 - .halt_bit = 1, 465 - .halt_check = BRANCH_HALT_ENABLE, 466 - .clkr = { 467 - .enable_reg = 0xcc, 468 - .enable_mask = BIT(12), 469 - .hw.init = &(struct clk_init_data){ 470 - .name = "sps_slimbus_clk", 471 - .parent_names = lcc_slimbus_parents, 472 - .num_parents = 1, 473 - .ops = &clk_branch_ops, 474 - .flags = CLK_SET_RATE_PARENT, 475 - }, 476 - }, 477 - }; 478 - 479 - static struct clk_regmap *lcc_mdm9615_clks[] = { 480 - [PLL4] = &pll4.clkr, 481 - [MI2S_OSR_SRC] = &mi2s_osr_src.clkr, 482 - [MI2S_OSR_CLK] = &mi2s_osr_clk.clkr, 483 - [MI2S_DIV_CLK] = &mi2s_div_clk.clkr, 484 - [MI2S_BIT_DIV_CLK] = &mi2s_bit_div_clk.clkr, 485 - [MI2S_BIT_CLK] = &mi2s_bit_clk.clkr, 486 - [PCM_SRC] = &pcm_src.clkr, 487 - [PCM_CLK_OUT] = &pcm_clk_out.clkr, 488 - [PCM_CLK] = &pcm_clk.clkr, 489 - [SLIMBUS_SRC] = &slimbus_src.clkr, 490 - [AUDIO_SLIMBUS_CLK] = &audio_slimbus_clk.clkr, 491 - [SPS_SLIMBUS_CLK] = &sps_slimbus_clk.clkr, 492 - [CODEC_I2S_MIC_OSR_SRC] = &codec_i2s_mic_osr_src.clkr, 493 - [CODEC_I2S_MIC_OSR_CLK] = &codec_i2s_mic_osr_clk.clkr, 494 - [CODEC_I2S_MIC_DIV_CLK] = &codec_i2s_mic_div_clk.clkr, 495 - [CODEC_I2S_MIC_BIT_DIV_CLK] = &codec_i2s_mic_bit_div_clk.clkr, 496 - [CODEC_I2S_MIC_BIT_CLK] = &codec_i2s_mic_bit_clk.clkr, 497 - [SPARE_I2S_MIC_OSR_SRC] = &spare_i2s_mic_osr_src.clkr, 498 - [SPARE_I2S_MIC_OSR_CLK] = &spare_i2s_mic_osr_clk.clkr, 499 - [SPARE_I2S_MIC_DIV_CLK] = &spare_i2s_mic_div_clk.clkr, 500 - [SPARE_I2S_MIC_BIT_DIV_CLK] = &spare_i2s_mic_bit_div_clk.clkr, 501 - [SPARE_I2S_MIC_BIT_CLK] = &spare_i2s_mic_bit_clk.clkr, 502 - [CODEC_I2S_SPKR_OSR_SRC] = &codec_i2s_spkr_osr_src.clkr, 503 - [CODEC_I2S_SPKR_OSR_CLK] = &codec_i2s_spkr_osr_clk.clkr, 504 - [CODEC_I2S_SPKR_DIV_CLK] = &codec_i2s_spkr_div_clk.clkr, 505 - [CODEC_I2S_SPKR_BIT_DIV_CLK] = &codec_i2s_spkr_bit_div_clk.clkr, 506 - [CODEC_I2S_SPKR_BIT_CLK] = &codec_i2s_spkr_bit_clk.clkr, 507 - [SPARE_I2S_SPKR_OSR_SRC] = &spare_i2s_spkr_osr_src.clkr, 508 - [SPARE_I2S_SPKR_OSR_CLK] = &spare_i2s_spkr_osr_clk.clkr, 509 - [SPARE_I2S_SPKR_DIV_CLK] = &spare_i2s_spkr_div_clk.clkr, 510 - [SPARE_I2S_SPKR_BIT_DIV_CLK] = &spare_i2s_spkr_bit_div_clk.clkr, 511 - [SPARE_I2S_SPKR_BIT_CLK] = &spare_i2s_spkr_bit_clk.clkr, 512 - }; 513 - 514 - static const struct regmap_config lcc_mdm9615_regmap_config = { 515 - .reg_bits = 32, 516 - .reg_stride = 4, 517 - .val_bits = 32, 518 - .max_register = 0xfc, 519 - .fast_io = true, 520 - }; 521 - 522 - static const struct qcom_cc_desc lcc_mdm9615_desc = { 523 - .config = &lcc_mdm9615_regmap_config, 524 - .clks = lcc_mdm9615_clks, 525 - .num_clks = ARRAY_SIZE(lcc_mdm9615_clks), 526 - }; 527 - 528 - static const struct of_device_id lcc_mdm9615_match_table[] = { 529 - { .compatible = "qcom,lcc-mdm9615" }, 530 - { } 531 - }; 532 - MODULE_DEVICE_TABLE(of, lcc_mdm9615_match_table); 533 - 534 - static int lcc_mdm9615_probe(struct platform_device *pdev) 535 - { 536 - u32 val; 537 - struct regmap *regmap; 538 - 539 - regmap = qcom_cc_map(pdev, &lcc_mdm9615_desc); 540 - if (IS_ERR(regmap)) 541 - return PTR_ERR(regmap); 542 - 543 - /* Use the correct frequency plan depending on speed of PLL4 */ 544 - regmap_read(regmap, 0x4, &val); 545 - if (val == 0x12) { 546 - slimbus_src.freq_tbl = clk_tbl_aif_osr_492; 547 - mi2s_osr_src.freq_tbl = clk_tbl_aif_osr_492; 548 - codec_i2s_mic_osr_src.freq_tbl = clk_tbl_aif_osr_492; 549 - spare_i2s_mic_osr_src.freq_tbl = clk_tbl_aif_osr_492; 550 - codec_i2s_spkr_osr_src.freq_tbl = clk_tbl_aif_osr_492; 551 - spare_i2s_spkr_osr_src.freq_tbl = clk_tbl_aif_osr_492; 552 - pcm_src.freq_tbl = clk_tbl_pcm_492; 553 - } 554 - /* Enable PLL4 source on the LPASS Primary PLL Mux */ 555 - regmap_write(regmap, 0xc4, 0x1); 556 - 557 - return qcom_cc_really_probe(pdev, &lcc_mdm9615_desc, regmap); 558 - } 559 - 560 - static struct platform_driver lcc_mdm9615_driver = { 561 - .probe = lcc_mdm9615_probe, 562 - .driver = { 563 - .name = "lcc-mdm9615", 564 - .of_match_table = lcc_mdm9615_match_table, 565 - }, 566 - }; 567 - module_platform_driver(lcc_mdm9615_driver); 568 - 569 - MODULE_DESCRIPTION("QCOM LCC MDM9615 Driver"); 570 - MODULE_LICENSE("GPL v2"); 571 - MODULE_ALIAS("platform:lcc-mdm9615");
+15 -4
drivers/clk/qcom/lcc-msm8960.c
··· 22 22 #include "clk-regmap-divider.h" 23 23 #include "clk-regmap-mux.h" 24 24 25 + static struct clk_parent_data pxo_parent_data = { 26 + .fw_name = "pxo", .name = "pxo_board", 27 + }; 28 + 25 29 static struct clk_pll pll4 = { 26 30 .l_reg = 0x4, 27 31 .m_reg = 0x8, ··· 36 32 .status_bit = 16, 37 33 .clkr.hw.init = &(struct clk_init_data){ 38 34 .name = "pll4", 39 - .parent_data = (const struct clk_parent_data[]){ 40 - { .fw_name = "pxo", .name = "pxo_board" }, 41 - }, 35 + .parent_data = &pxo_parent_data, 42 36 .num_parents = 1, 43 37 .ops = &clk_pll_ops, 44 38 }, ··· 52 50 { P_PLL4, 2 } 53 51 }; 54 52 55 - static const struct clk_parent_data lcc_pxo_pll4[] = { 53 + static struct clk_parent_data lcc_pxo_pll4[] = { 56 54 { .fw_name = "pxo", .name = "pxo_board" }, 57 55 { .fw_name = "pll4_vote", .name = "pll4_vote" }, 58 56 }; ··· 445 443 static const struct of_device_id lcc_msm8960_match_table[] = { 446 444 { .compatible = "qcom,lcc-msm8960" }, 447 445 { .compatible = "qcom,lcc-apq8064" }, 446 + { .compatible = "qcom,lcc-mdm9615" }, 448 447 { } 449 448 }; 450 449 MODULE_DEVICE_TABLE(of, lcc_msm8960_match_table); ··· 454 451 { 455 452 u32 val; 456 453 struct regmap *regmap; 454 + 455 + /* patch for the cxo <-> pxo difference */ 456 + if (of_device_is_compatible(pdev->dev.of_node, "qcom,lcc-mdm9615")) { 457 + pxo_parent_data.fw_name = "cxo"; 458 + pxo_parent_data.name = "cxo_board"; 459 + lcc_pxo_pll4[0].fw_name = "cxo"; 460 + lcc_pxo_pll4[0].name = "cxo_board"; 461 + } 457 462 458 463 regmap = qcom_cc_map(pdev, &lcc_msm8960_desc); 459 464 if (IS_ERR(regmap))
+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;
+11
drivers/clk/qcom/mmcc-msm8974.c
··· 2425 2425 .pwrsts = PWRSTS_OFF_ON, 2426 2426 }; 2427 2427 2428 + static struct gdsc oxili_cx_gdsc_msm8226 = { 2429 + .gdscr = 0x4034, 2430 + .cxcs = (unsigned int []){ 0x4028 }, 2431 + .cxc_count = 1, 2432 + .pd = { 2433 + .name = "oxili_cx", 2434 + }, 2435 + .pwrsts = PWRSTS_OFF_ON, 2436 + }; 2437 + 2428 2438 static struct clk_regmap *mmcc_msm8226_clocks[] = { 2429 2439 [MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr, 2430 2440 [MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr, ··· 2524 2514 [MDSS_GDSC] = &mdss_gdsc, 2525 2515 [CAMSS_JPEG_GDSC] = &camss_jpeg_gdsc, 2526 2516 [CAMSS_VFE_GDSC] = &camss_vfe_gdsc, 2517 + [OXILICX_GDSC] = &oxili_cx_gdsc_msm8226, 2527 2518 }; 2528 2519 2529 2520 static const struct regmap_config mmcc_msm8226_regmap_config = {
+8 -27
drivers/clk/qcom/mmcc-msm8998.c
··· 45 45 P_DPLINK, 46 46 }; 47 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 - }; 60 - 61 48 static const struct clk_div_table post_div_table_fabia_even[] = { 62 49 { 0x0, 1 }, 63 50 { 0x1, 2 }, ··· 340 353 static const struct clk_parent_data mmss_xo_gpll0_gpll0_div[] = { 341 354 { .fw_name = "xo" }, 342 355 { .fw_name = "gpll0" }, 343 - { .hw = &gpll0_div.hw }, 356 + { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 344 357 }; 345 358 346 359 static const struct parent_map mmss_xo_mmpll0_gpll0_gpll0_div_map[] = { ··· 354 367 { .fw_name = "xo" }, 355 368 { .hw = &mmpll0_out_even.clkr.hw }, 356 369 { .fw_name = "gpll0" }, 357 - { .hw = &gpll0_div.hw }, 370 + { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 358 371 }; 359 372 360 373 static const struct parent_map mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map[] = { ··· 370 383 { .hw = &mmpll0_out_even.clkr.hw }, 371 384 { .hw = &mmpll1_out_even.clkr.hw }, 372 385 { .fw_name = "gpll0" }, 373 - { .hw = &gpll0_div.hw }, 386 + { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 374 387 }; 375 388 376 389 static const struct parent_map mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map[] = { ··· 386 399 { .hw = &mmpll0_out_even.clkr.hw }, 387 400 { .hw = &mmpll5_out_even.clkr.hw }, 388 401 { .fw_name = "gpll0" }, 389 - { .hw = &gpll0_div.hw }, 402 + { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 390 403 }; 391 404 392 405 static const struct parent_map mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div_map[] = { ··· 404 417 { .hw = &mmpll3_out_even.clkr.hw }, 405 418 { .hw = &mmpll6_out_even.clkr.hw }, 406 419 { .fw_name = "gpll0" }, 407 - { .hw = &gpll0_div.hw }, 420 + { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 408 421 }; 409 422 410 423 static const struct parent_map mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map[] = { ··· 422 435 { .hw = &mmpll7_out_even.clkr.hw }, 423 436 { .hw = &mmpll10_out_even.clkr.hw }, 424 437 { .fw_name = "gpll0" }, 425 - { .hw = &gpll0_div.hw }, 438 + { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 426 439 }; 427 440 428 441 static const struct parent_map mmss_xo_mmpll0_mmpll7_mmpll10_gpll0_gpll0_div_map[] = { ··· 440 453 { .hw = &mmpll7_out_even.clkr.hw }, 441 454 { .hw = &mmpll10_out_even.clkr.hw }, 442 455 { .fw_name = "gpll0" }, 443 - { .hw = &gpll0_div.hw }, 456 + { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 444 457 }; 445 458 446 459 static const struct parent_map mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map[] = { ··· 460 473 { .hw = &mmpll7_out_even.clkr.hw }, 461 474 { .hw = &mmpll10_out_even.clkr.hw }, 462 475 { .fw_name = "gpll0" }, 463 - { .hw = &gpll0_div.hw }, 476 + { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 464 477 }; 465 478 466 479 static struct clk_rcg2 byte0_clk_src = { ··· 2530 2543 }, 2531 2544 }; 2532 2545 2533 - static struct clk_hw *mmcc_msm8998_hws[] = { 2534 - &gpll0_div.hw, 2535 - }; 2536 - 2537 2546 static struct gdsc video_top_gdsc = { 2538 2547 .gdscr = 0x1024, 2539 2548 .pd = { ··· 2837 2854 .num_resets = ARRAY_SIZE(mmcc_msm8998_resets), 2838 2855 .gdscs = mmcc_msm8998_gdscs, 2839 2856 .num_gdscs = ARRAY_SIZE(mmcc_msm8998_gdscs), 2840 - .clk_hws = mmcc_msm8998_hws, 2841 - .num_clk_hws = ARRAY_SIZE(mmcc_msm8998_hws), 2842 2857 }; 2843 2858 2844 2859 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 }
+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 };
+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 -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 rpm = devm_kzalloc(&rpdev->dev, sizeof(*rpm), GFP_KERNEL); 201 202 if (!rpm) ··· 207 210 rpm->rpm_channel = rpdev->ept; 208 211 dev_set_drvdata(&rpdev->dev, rpm); 209 212 210 - rpm->icc = platform_device_register_data(&rpdev->dev, "icc_smd_rpm", -1, 211 - NULL, 0); 212 - if (IS_ERR(rpm->icc)) 213 - return PTR_ERR(rpm->icc); 214 - 215 - ret = of_platform_populate(rpdev->dev.of_node, NULL, NULL, &rpdev->dev); 216 - if (ret) 217 - platform_device_unregister(rpm->icc); 218 - 219 - return ret; 213 + return of_platform_populate(rpdev->dev.of_node, NULL, NULL, &rpdev->dev); 220 214 } 221 215 222 216 static void qcom_smd_rpm_remove(struct rpmsg_device *rpdev) 223 217 { 224 - struct qcom_smd_rpm *rpm = dev_get_drvdata(&rpdev->dev); 225 - 226 - platform_device_unregister(rpm->icc); 227 218 of_platform_depopulate(&rpdev->dev); 228 219 } 229 220
+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
+183
include/dt-bindings/clock/qcom,gcc-ipq5018.h
··· 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 + 6 + #ifndef _DT_BINDINGS_CLOCK_IPQ_GCC_5018_H 7 + #define _DT_BINDINGS_CLOCK_IPQ_GCC_5018_H 8 + 9 + #define GPLL0_MAIN 0 10 + #define GPLL0 1 11 + #define GPLL2_MAIN 2 12 + #define GPLL2 3 13 + #define GPLL4_MAIN 4 14 + #define GPLL4 5 15 + #define UBI32_PLL_MAIN 6 16 + #define UBI32_PLL 7 17 + #define ADSS_PWM_CLK_SRC 8 18 + #define BLSP1_QUP1_I2C_APPS_CLK_SRC 9 19 + #define BLSP1_QUP1_SPI_APPS_CLK_SRC 10 20 + #define BLSP1_QUP2_I2C_APPS_CLK_SRC 11 21 + #define BLSP1_QUP2_SPI_APPS_CLK_SRC 12 22 + #define BLSP1_QUP3_I2C_APPS_CLK_SRC 13 23 + #define BLSP1_QUP3_SPI_APPS_CLK_SRC 14 24 + #define BLSP1_UART1_APPS_CLK_SRC 15 25 + #define BLSP1_UART2_APPS_CLK_SRC 16 26 + #define CRYPTO_CLK_SRC 17 27 + #define GCC_ADSS_PWM_CLK 18 28 + #define GCC_BLSP1_AHB_CLK 19 29 + #define GCC_BLSP1_QUP1_I2C_APPS_CLK 20 30 + #define GCC_BLSP1_QUP1_SPI_APPS_CLK 21 31 + #define GCC_BLSP1_QUP2_I2C_APPS_CLK 22 32 + #define GCC_BLSP1_QUP2_SPI_APPS_CLK 23 33 + #define GCC_BLSP1_QUP3_I2C_APPS_CLK 24 34 + #define GCC_BLSP1_QUP3_SPI_APPS_CLK 25 35 + #define GCC_BLSP1_UART1_APPS_CLK 26 36 + #define GCC_BLSP1_UART2_APPS_CLK 27 37 + #define GCC_BTSS_LPO_CLK 28 38 + #define GCC_CMN_BLK_AHB_CLK 29 39 + #define GCC_CMN_BLK_SYS_CLK 30 40 + #define GCC_CRYPTO_AHB_CLK 31 41 + #define GCC_CRYPTO_AXI_CLK 32 42 + #define GCC_CRYPTO_CLK 33 43 + #define GCC_CRYPTO_PPE_CLK 34 44 + #define GCC_DCC_CLK 35 45 + #define GCC_GEPHY_RX_CLK 36 46 + #define GCC_GEPHY_TX_CLK 37 47 + #define GCC_GMAC0_CFG_CLK 38 48 + #define GCC_GMAC0_PTP_CLK 39 49 + #define GCC_GMAC0_RX_CLK 40 50 + #define GCC_GMAC0_SYS_CLK 41 51 + #define GCC_GMAC0_TX_CLK 42 52 + #define GCC_GMAC1_CFG_CLK 43 53 + #define GCC_GMAC1_PTP_CLK 44 54 + #define GCC_GMAC1_RX_CLK 45 55 + #define GCC_GMAC1_SYS_CLK 46 56 + #define GCC_GMAC1_TX_CLK 47 57 + #define GCC_GP1_CLK 48 58 + #define GCC_GP2_CLK 49 59 + #define GCC_GP3_CLK 50 60 + #define GCC_LPASS_CORE_AXIM_CLK 51 61 + #define GCC_LPASS_SWAY_CLK 52 62 + #define GCC_MDIO0_AHB_CLK 53 63 + #define GCC_MDIO1_AHB_CLK 54 64 + #define GCC_PCIE0_AHB_CLK 55 65 + #define GCC_PCIE0_AUX_CLK 56 66 + #define GCC_PCIE0_AXI_M_CLK 57 67 + #define GCC_PCIE0_AXI_S_BRIDGE_CLK 58 68 + #define GCC_PCIE0_AXI_S_CLK 59 69 + #define GCC_PCIE0_PIPE_CLK 60 70 + #define GCC_PCIE1_AHB_CLK 61 71 + #define GCC_PCIE1_AUX_CLK 62 72 + #define GCC_PCIE1_AXI_M_CLK 63 73 + #define GCC_PCIE1_AXI_S_BRIDGE_CLK 64 74 + #define GCC_PCIE1_AXI_S_CLK 65 75 + #define GCC_PCIE1_PIPE_CLK 66 76 + #define GCC_PRNG_AHB_CLK 67 77 + #define GCC_Q6_AXIM_CLK 68 78 + #define GCC_Q6_AXIM2_CLK 69 79 + #define GCC_Q6_AXIS_CLK 70 80 + #define GCC_Q6_AHB_CLK 71 81 + #define GCC_Q6_AHB_S_CLK 72 82 + #define GCC_Q6_TSCTR_1TO2_CLK 73 83 + #define GCC_Q6SS_ATBM_CLK 74 84 + #define GCC_Q6SS_PCLKDBG_CLK 75 85 + #define GCC_Q6SS_TRIG_CLK 76 86 + #define GCC_QDSS_AT_CLK 77 87 + #define GCC_QDSS_CFG_AHB_CLK 78 88 + #define GCC_QDSS_DAP_AHB_CLK 79 89 + #define GCC_QDSS_DAP_CLK 80 90 + #define GCC_QDSS_ETR_USB_CLK 81 91 + #define GCC_QDSS_EUD_AT_CLK 82 92 + #define GCC_QDSS_STM_CLK 83 93 + #define GCC_QDSS_TRACECLKIN_CLK 84 94 + #define GCC_QDSS_TSCTR_DIV8_CLK 85 95 + #define GCC_QPIC_AHB_CLK 86 96 + #define GCC_QPIC_CLK 87 97 + #define GCC_QPIC_IO_MACRO_CLK 88 98 + #define GCC_SDCC1_AHB_CLK 89 99 + #define GCC_SDCC1_APPS_CLK 90 100 + #define GCC_SLEEP_CLK_SRC 91 101 + #define GCC_SNOC_GMAC0_AHB_CLK 92 102 + #define GCC_SNOC_GMAC0_AXI_CLK 93 103 + #define GCC_SNOC_GMAC1_AHB_CLK 94 104 + #define GCC_SNOC_GMAC1_AXI_CLK 95 105 + #define GCC_SNOC_LPASS_AXIM_CLK 96 106 + #define GCC_SNOC_LPASS_SWAY_CLK 97 107 + #define GCC_SNOC_UBI0_AXI_CLK 98 108 + #define GCC_SYS_NOC_PCIE0_AXI_CLK 99 109 + #define GCC_SYS_NOC_PCIE1_AXI_CLK 100 110 + #define GCC_SYS_NOC_QDSS_STM_AXI_CLK 101 111 + #define GCC_SYS_NOC_USB0_AXI_CLK 102 112 + #define GCC_SYS_NOC_WCSS_AHB_CLK 103 113 + #define GCC_UBI0_AXI_CLK 104 114 + #define GCC_UBI0_CFG_CLK 105 115 + #define GCC_UBI0_CORE_CLK 106 116 + #define GCC_UBI0_DBG_CLK 107 117 + #define GCC_UBI0_NC_AXI_CLK 108 118 + #define GCC_UBI0_UTCM_CLK 109 119 + #define GCC_UNIPHY_AHB_CLK 110 120 + #define GCC_UNIPHY_RX_CLK 111 121 + #define GCC_UNIPHY_SYS_CLK 112 122 + #define GCC_UNIPHY_TX_CLK 113 123 + #define GCC_USB0_AUX_CLK 114 124 + #define GCC_USB0_EUD_AT_CLK 115 125 + #define GCC_USB0_LFPS_CLK 116 126 + #define GCC_USB0_MASTER_CLK 117 127 + #define GCC_USB0_MOCK_UTMI_CLK 118 128 + #define GCC_USB0_PHY_CFG_AHB_CLK 119 129 + #define GCC_USB0_SLEEP_CLK 120 130 + #define GCC_WCSS_ACMT_CLK 121 131 + #define GCC_WCSS_AHB_S_CLK 122 132 + #define GCC_WCSS_AXI_M_CLK 123 133 + #define GCC_WCSS_AXI_S_CLK 124 134 + #define GCC_WCSS_DBG_IFC_APB_BDG_CLK 125 135 + #define GCC_WCSS_DBG_IFC_APB_CLK 126 136 + #define GCC_WCSS_DBG_IFC_ATB_BDG_CLK 127 137 + #define GCC_WCSS_DBG_IFC_ATB_CLK 128 138 + #define GCC_WCSS_DBG_IFC_DAPBUS_BDG_CLK 129 139 + #define GCC_WCSS_DBG_IFC_DAPBUS_CLK 130 140 + #define GCC_WCSS_DBG_IFC_NTS_BDG_CLK 131 141 + #define GCC_WCSS_DBG_IFC_NTS_CLK 132 142 + #define GCC_WCSS_ECAHB_CLK 133 143 + #define GCC_XO_CLK 134 144 + #define GCC_XO_CLK_SRC 135 145 + #define GMAC0_RX_CLK_SRC 136 146 + #define GMAC0_TX_CLK_SRC 137 147 + #define GMAC1_RX_CLK_SRC 138 148 + #define GMAC1_TX_CLK_SRC 139 149 + #define GMAC_CLK_SRC 140 150 + #define GP1_CLK_SRC 141 151 + #define GP2_CLK_SRC 142 152 + #define GP3_CLK_SRC 143 153 + #define LPASS_AXIM_CLK_SRC 144 154 + #define LPASS_SWAY_CLK_SRC 145 155 + #define PCIE0_AUX_CLK_SRC 146 156 + #define PCIE0_AXI_CLK_SRC 147 157 + #define PCIE1_AUX_CLK_SRC 148 158 + #define PCIE1_AXI_CLK_SRC 149 159 + #define PCNOC_BFDCD_CLK_SRC 150 160 + #define Q6_AXI_CLK_SRC 151 161 + #define QDSS_AT_CLK_SRC 152 162 + #define QDSS_STM_CLK_SRC 153 163 + #define QDSS_TSCTR_CLK_SRC 154 164 + #define QDSS_TRACECLKIN_CLK_SRC 155 165 + #define QPIC_IO_MACRO_CLK_SRC 156 166 + #define SDCC1_APPS_CLK_SRC 157 167 + #define SYSTEM_NOC_BFDCD_CLK_SRC 158 168 + #define UBI0_AXI_CLK_SRC 159 169 + #define UBI0_CORE_CLK_SRC 160 170 + #define USB0_AUX_CLK_SRC 161 171 + #define USB0_LFPS_CLK_SRC 162 172 + #define USB0_MASTER_CLK_SRC 163 173 + #define USB0_MOCK_UTMI_CLK_SRC 164 174 + #define WCSS_AHB_CLK_SRC 165 175 + #define PCIE0_PIPE_CLK_SRC 166 176 + #define PCIE1_PIPE_CLK_SRC 167 177 + #define USB0_PIPE_CLK_SRC 168 178 + #define GCC_USB0_PIPE_CLK 169 179 + #define GMAC0_RX_DIV_CLK_SRC 170 180 + #define GMAC0_TX_DIV_CLK_SRC 171 181 + #define GMAC1_RX_DIV_CLK_SRC 172 182 + #define GMAC1_TX_DIV_CLK_SRC 173 183 + #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
+3
include/dt-bindings/clock/qcom,gcc-msm8998.h
··· 190 190 #define AGGRE2_SNOC_NORTH_AXI 181 191 191 #define SSC_XO 182 192 192 #define SSC_CNOC_AHBS_CLK 183 193 + #define GCC_MMSS_GPLL0_DIV_CLK 184 194 + #define GCC_GPU_GPLL0_DIV_CLK 185 195 + #define GCC_GPU_GPLL0_CLK 186 193 196 194 197 #define PCIE_0_GDSC 0 195 198 #define UFS_GDSC 1
+10
include/dt-bindings/clock/qcom,gcc-sc8280xp.h
··· 494 494 #define USB30_SEC_GDSC 11 495 495 #define EMAC_0_GDSC 12 496 496 #define EMAC_1_GDSC 13 497 + #define USB4_1_GDSC 14 498 + #define USB4_GDSC 15 499 + #define HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC 16 500 + #define HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC 17 501 + #define HLOS1_VOTE_MMNOC_MMU_TBU_SF0_GDSC 18 502 + #define HLOS1_VOTE_MMNOC_MMU_TBU_SF1_GDSC 19 503 + #define HLOS1_VOTE_TURING_MMU_TBU0_GDSC 20 504 + #define HLOS1_VOTE_TURING_MMU_TBU1_GDSC 21 505 + #define HLOS1_VOTE_TURING_MMU_TBU2_GDSC 22 506 + #define HLOS1_VOTE_TURING_MMU_TBU3_GDSC 23 497 507 498 508 #endif
+2
include/dt-bindings/clock/qcom,ipq9574-gcc.h
··· 214 214 #define GCC_CRYPTO_CLK 205 215 215 #define GCC_CRYPTO_AXI_CLK 206 216 216 #define GCC_CRYPTO_AHB_CLK 207 217 + #define GCC_USB0_PIPE_CLK 208 218 + #define GCC_USB0_SLEEP_CLK 209 217 219 #endif
-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
+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
+122
include/dt-bindings/reset/qcom,gcc-ipq5018.h
··· 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 + 6 + #ifndef _DT_BINDINGS_RESET_IPQ_GCC_5018_H 7 + #define _DT_BINDINGS_RESET_IPQ_GCC_5018_H 8 + 9 + #define GCC_APC0_VOLTAGE_DROOP_DETECTOR_BCR 0 10 + #define GCC_BLSP1_BCR 1 11 + #define GCC_BLSP1_QUP1_BCR 2 12 + #define GCC_BLSP1_QUP2_BCR 3 13 + #define GCC_BLSP1_QUP3_BCR 4 14 + #define GCC_BLSP1_UART1_BCR 5 15 + #define GCC_BLSP1_UART2_BCR 6 16 + #define GCC_BOOT_ROM_BCR 7 17 + #define GCC_BTSS_BCR 8 18 + #define GCC_CMN_BLK_BCR 9 19 + #define GCC_CMN_LDO_BCR 10 20 + #define GCC_CE_BCR 11 21 + #define GCC_CRYPTO_BCR 12 22 + #define GCC_DCC_BCR 13 23 + #define GCC_DCD_BCR 14 24 + #define GCC_DDRSS_BCR 15 25 + #define GCC_EDPD_BCR 16 26 + #define GCC_GEPHY_BCR 17 27 + #define GCC_GEPHY_MDC_SW_ARES 18 28 + #define GCC_GEPHY_DSP_HW_ARES 19 29 + #define GCC_GEPHY_RX_ARES 20 30 + #define GCC_GEPHY_TX_ARES 21 31 + #define GCC_GMAC0_BCR 22 32 + #define GCC_GMAC0_CFG_ARES 23 33 + #define GCC_GMAC0_SYS_ARES 24 34 + #define GCC_GMAC1_BCR 25 35 + #define GCC_GMAC1_CFG_ARES 26 36 + #define GCC_GMAC1_SYS_ARES 27 37 + #define GCC_IMEM_BCR 28 38 + #define GCC_LPASS_BCR 29 39 + #define GCC_MDIO0_BCR 30 40 + #define GCC_MDIO1_BCR 31 41 + #define GCC_MPM_BCR 32 42 + #define GCC_PCIE0_BCR 33 43 + #define GCC_PCIE0_LINK_DOWN_BCR 34 44 + #define GCC_PCIE0_PHY_BCR 35 45 + #define GCC_PCIE0PHY_PHY_BCR 36 46 + #define GCC_PCIE0_PIPE_ARES 37 47 + #define GCC_PCIE0_SLEEP_ARES 38 48 + #define GCC_PCIE0_CORE_STICKY_ARES 39 49 + #define GCC_PCIE0_AXI_MASTER_ARES 40 50 + #define GCC_PCIE0_AXI_SLAVE_ARES 41 51 + #define GCC_PCIE0_AHB_ARES 42 52 + #define GCC_PCIE0_AXI_MASTER_STICKY_ARES 43 53 + #define GCC_PCIE0_AXI_SLAVE_STICKY_ARES 44 54 + #define GCC_PCIE1_BCR 45 55 + #define GCC_PCIE1_LINK_DOWN_BCR 46 56 + #define GCC_PCIE1_PHY_BCR 47 57 + #define GCC_PCIE1PHY_PHY_BCR 48 58 + #define GCC_PCIE1_PIPE_ARES 49 59 + #define GCC_PCIE1_SLEEP_ARES 50 60 + #define GCC_PCIE1_CORE_STICKY_ARES 51 61 + #define GCC_PCIE1_AXI_MASTER_ARES 52 62 + #define GCC_PCIE1_AXI_SLAVE_ARES 53 63 + #define GCC_PCIE1_AHB_ARES 54 64 + #define GCC_PCIE1_AXI_MASTER_STICKY_ARES 55 65 + #define GCC_PCIE1_AXI_SLAVE_STICKY_ARES 56 66 + #define GCC_PCNOC_BCR 57 67 + #define GCC_PCNOC_BUS_TIMEOUT0_BCR 58 68 + #define GCC_PCNOC_BUS_TIMEOUT1_BCR 59 69 + #define GCC_PCNOC_BUS_TIMEOUT2_BCR 60 70 + #define GCC_PCNOC_BUS_TIMEOUT3_BCR 61 71 + #define GCC_PCNOC_BUS_TIMEOUT4_BCR 62 72 + #define GCC_PCNOC_BUS_TIMEOUT5_BCR 63 73 + #define GCC_PCNOC_BUS_TIMEOUT6_BCR 64 74 + #define GCC_PCNOC_BUS_TIMEOUT7_BCR 65 75 + #define GCC_PCNOC_BUS_TIMEOUT8_BCR 66 76 + #define GCC_PCNOC_BUS_TIMEOUT9_BCR 67 77 + #define GCC_PCNOC_BUS_TIMEOUT10_BCR 68 78 + #define GCC_PCNOC_BUS_TIMEOUT11_BCR 69 79 + #define GCC_PRNG_BCR 70 80 + #define GCC_Q6SS_DBG_ARES 71 81 + #define GCC_Q6_AHB_S_ARES 72 82 + #define GCC_Q6_AHB_ARES 73 83 + #define GCC_Q6_AXIM2_ARES 74 84 + #define GCC_Q6_AXIM_ARES 75 85 + #define GCC_Q6_AXIS_ARES 76 86 + #define GCC_QDSS_BCR 77 87 + #define GCC_QPIC_BCR 78 88 + #define GCC_QUSB2_0_PHY_BCR 79 89 + #define GCC_SDCC1_BCR 80 90 + #define GCC_SEC_CTRL_BCR 81 91 + #define GCC_SPDM_BCR 82 92 + #define GCC_SYSTEM_NOC_BCR 83 93 + #define GCC_TCSR_BCR 84 94 + #define GCC_TLMM_BCR 85 95 + #define GCC_UBI0_AXI_ARES 86 96 + #define GCC_UBI0_AHB_ARES 87 97 + #define GCC_UBI0_NC_AXI_ARES 88 98 + #define GCC_UBI0_DBG_ARES 89 99 + #define GCC_UBI0_UTCM_ARES 90 100 + #define GCC_UBI0_CORE_ARES 91 101 + #define GCC_UBI32_BCR 92 102 + #define GCC_UNIPHY_BCR 93 103 + #define GCC_UNIPHY_AHB_ARES 94 104 + #define GCC_UNIPHY_SYS_ARES 95 105 + #define GCC_UNIPHY_RX_ARES 96 106 + #define GCC_UNIPHY_TX_ARES 97 107 + #define GCC_USB0_BCR 98 108 + #define GCC_USB0_PHY_BCR 99 109 + #define GCC_WCSS_BCR 100 110 + #define GCC_WCSS_DBG_ARES 101 111 + #define GCC_WCSS_ECAHB_ARES 102 112 + #define GCC_WCSS_ACMT_ARES 103 113 + #define GCC_WCSS_DBG_BDG_ARES 104 114 + #define GCC_WCSS_AHB_S_ARES 105 115 + #define GCC_WCSS_AXI_M_ARES 106 116 + #define GCC_WCSS_AXI_S_ARES 107 117 + #define GCC_WCSS_Q6_BCR 108 118 + #define GCC_WCSSAON_RESET 109 119 + #define GCC_UNIPHY_SOFT_RESET 110 120 + #define GCC_GEPHY_MISC_ARES 111 121 + 122 + #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,