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

clk: qcom: Add Global Clock controller (GCC) driver for SDM660

Add support for the global clock controller found on SDM660
based devices. This should allow most non-multimedia device
drivers to probe and control their clocks.
Based on CAF implementation.

Signed-off-by: Taniya Das <tdas@codeaurora.org>
[craig: rename parents to fit upstream, and other cleanups]
Signed-off-by: Craig Tatlor <ctatlor97@gmail.com>
Acked-by: Rob Herring <robh@kernel.org>
[sboyd@kernel.org: Rename gcc_660 to gcc_sdm660 and fix numbering of
defines to avoid duplicates]
Signed-off-by: Stephen Boyd <sboyd@kernel.org>

authored by

Taniya Das and committed by
Stephen Boyd
f2a76a29 5b394b2d

+2647
+2
Documentation/devicetree/bindings/clock/qcom,gcc.txt
··· 19 19 "qcom,gcc-msm8996" 20 20 "qcom,gcc-msm8998" 21 21 "qcom,gcc-mdm9615" 22 + "qcom,gcc-sdm630" 23 + "qcom,gcc-sdm660" 22 24 "qcom,gcc-sdm845" 23 25 24 26 - reg : shall contain base register location and length
+9
drivers/clk/qcom/Kconfig
··· 235 235 Say Y if you want to use peripheral devices such as UART, SPI, 236 236 i2c, USB, UFS, SD/eMMC, PCIe, etc. 237 237 238 + config SDM_GCC_660 239 + tristate "SDM660 Global Clock Controller" 240 + select QCOM_GDSC 241 + depends on COMMON_CLK_QCOM 242 + help 243 + Support for the global clock controller on SDM660 devices. 244 + Say Y if you want to use peripheral devices such as UART, SPI, 245 + i2C, USB, UFS, SDDC, PCIe, etc. 246 + 238 247 config SDM_GCC_845 239 248 tristate "SDM845 Global Clock Controller" 240 249 select QCOM_GDSC
+1
drivers/clk/qcom/Makefile
··· 40 40 obj-$(CONFIG_QCOM_CLK_RPMH) += clk-rpmh.o 41 41 obj-$(CONFIG_QCOM_CLK_SMD_RPM) += clk-smd-rpm.o 42 42 obj-$(CONFIG_SDM_DISPCC_845) += dispcc-sdm845.o 43 + obj-$(CONFIG_SDM_GCC_660) += gcc-sdm660.o 43 44 obj-$(CONFIG_SDM_GCC_845) += gcc-sdm845.o 44 45 obj-$(CONFIG_SDM_VIDEOCC_845) += videocc-sdm845.o 45 46 obj-$(CONFIG_SPMI_PMIC_CLKDIV) += clk-spmi-pmic-div.o
+2479
drivers/clk/qcom/gcc-sdm660.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. 4 + * Copyright (c) 2018, Craig Tatlor. 5 + */ 6 + 7 + #include <linux/kernel.h> 8 + #include <linux/bitops.h> 9 + #include <linux/err.h> 10 + #include <linux/platform_device.h> 11 + #include <linux/module.h> 12 + #include <linux/of.h> 13 + #include <linux/of_device.h> 14 + #include <linux/clk-provider.h> 15 + #include <linux/regmap.h> 16 + #include <linux/reset-controller.h> 17 + 18 + #include <dt-bindings/clock/qcom,gcc-sdm660.h> 19 + 20 + #include "common.h" 21 + #include "clk-regmap.h" 22 + #include "clk-alpha-pll.h" 23 + #include "clk-rcg.h" 24 + #include "clk-branch.h" 25 + #include "reset.h" 26 + #include "gdsc.h" 27 + 28 + #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) } 29 + 30 + enum { 31 + P_XO, 32 + P_SLEEP_CLK, 33 + P_GPLL0, 34 + P_GPLL1, 35 + P_GPLL4, 36 + P_GPLL0_EARLY_DIV, 37 + P_GPLL1_EARLY_DIV, 38 + }; 39 + 40 + static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div[] = { 41 + { P_XO, 0 }, 42 + { P_GPLL0, 1 }, 43 + { P_GPLL0_EARLY_DIV, 6 }, 44 + }; 45 + 46 + static const char * const gcc_parent_names_xo_gpll0_gpll0_early_div[] = { 47 + "xo", 48 + "gpll0", 49 + "gpll0_early_div", 50 + }; 51 + 52 + static const struct parent_map gcc_parent_map_xo_gpll0[] = { 53 + { P_XO, 0 }, 54 + { P_GPLL0, 1 }, 55 + }; 56 + 57 + static const char * const gcc_parent_names_xo_gpll0[] = { 58 + "xo", 59 + "gpll0", 60 + }; 61 + 62 + static const struct parent_map gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div[] = { 63 + { P_XO, 0 }, 64 + { P_GPLL0, 1 }, 65 + { P_SLEEP_CLK, 5 }, 66 + { P_GPLL0_EARLY_DIV, 6 }, 67 + }; 68 + 69 + static const char * const gcc_parent_names_xo_gpll0_sleep_clk_gpll0_early_div[] = { 70 + "xo", 71 + "gpll0", 72 + "sleep_clk", 73 + "gpll0_early_div", 74 + }; 75 + 76 + static const struct parent_map gcc_parent_map_xo_sleep_clk[] = { 77 + { P_XO, 0 }, 78 + { P_SLEEP_CLK, 5 }, 79 + }; 80 + 81 + static const char * const gcc_parent_names_xo_sleep_clk[] = { 82 + "xo", 83 + "sleep_clk", 84 + }; 85 + 86 + static const struct parent_map gcc_parent_map_xo_gpll4[] = { 87 + { P_XO, 0 }, 88 + { P_GPLL4, 5 }, 89 + }; 90 + 91 + static const char * const gcc_parent_names_xo_gpll4[] = { 92 + "xo", 93 + "gpll4", 94 + }; 95 + 96 + static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div[] = { 97 + { P_XO, 0 }, 98 + { P_GPLL0, 1 }, 99 + { P_GPLL0_EARLY_DIV, 3 }, 100 + { P_GPLL1, 4 }, 101 + { P_GPLL4, 5 }, 102 + { P_GPLL1_EARLY_DIV, 6 }, 103 + }; 104 + 105 + static const char * const gcc_parent_names_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div[] = { 106 + "xo", 107 + "gpll0", 108 + "gpll0_early_div", 109 + "gpll1", 110 + "gpll4", 111 + "gpll1_early_div", 112 + }; 113 + 114 + static const struct parent_map gcc_parent_map_xo_gpll0_gpll4_gpll0_early_div[] = { 115 + { P_XO, 0 }, 116 + { P_GPLL0, 1 }, 117 + { P_GPLL4, 5 }, 118 + { P_GPLL0_EARLY_DIV, 6 }, 119 + }; 120 + 121 + static const char * const gcc_parent_names_xo_gpll0_gpll4_gpll0_early_div[] = { 122 + "xo", 123 + "gpll0", 124 + "gpll4", 125 + "gpll0_early_div", 126 + }; 127 + 128 + static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div_gpll4[] = { 129 + { P_XO, 0 }, 130 + { P_GPLL0, 1 }, 131 + { P_GPLL0_EARLY_DIV, 2 }, 132 + { P_GPLL4, 5 }, 133 + }; 134 + 135 + static const char * const gcc_parent_names_xo_gpll0_gpll0_early_div_gpll4[] = { 136 + "xo", 137 + "gpll0", 138 + "gpll0_early_div", 139 + "gpll4", 140 + }; 141 + 142 + static struct clk_fixed_factor xo = { 143 + .mult = 1, 144 + .div = 1, 145 + .hw.init = &(struct clk_init_data){ 146 + .name = "xo", 147 + .parent_names = (const char *[]){ "xo_board" }, 148 + .num_parents = 1, 149 + .ops = &clk_fixed_factor_ops, 150 + }, 151 + }; 152 + 153 + static struct clk_alpha_pll gpll0_early = { 154 + .offset = 0x0, 155 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 156 + .clkr = { 157 + .enable_reg = 0x52000, 158 + .enable_mask = BIT(0), 159 + .hw.init = &(struct clk_init_data){ 160 + .name = "gpll0_early", 161 + .parent_names = (const char *[]){ "xo" }, 162 + .num_parents = 1, 163 + .ops = &clk_alpha_pll_ops, 164 + }, 165 + }, 166 + }; 167 + 168 + static struct clk_fixed_factor gpll0_early_div = { 169 + .mult = 1, 170 + .div = 2, 171 + .hw.init = &(struct clk_init_data){ 172 + .name = "gpll0_early_div", 173 + .parent_names = (const char *[]){ "gpll0_early" }, 174 + .num_parents = 1, 175 + .ops = &clk_fixed_factor_ops, 176 + }, 177 + }; 178 + 179 + static struct clk_alpha_pll_postdiv gpll0 = { 180 + .offset = 0x00000, 181 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 182 + .clkr.hw.init = &(struct clk_init_data){ 183 + .name = "gpll0", 184 + .parent_names = (const char *[]){ "gpll0_early" }, 185 + .num_parents = 1, 186 + .ops = &clk_alpha_pll_postdiv_ops, 187 + }, 188 + }; 189 + 190 + static struct clk_alpha_pll gpll1_early = { 191 + .offset = 0x1000, 192 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 193 + .clkr = { 194 + .enable_reg = 0x52000, 195 + .enable_mask = BIT(1), 196 + .hw.init = &(struct clk_init_data){ 197 + .name = "gpll1_early", 198 + .parent_names = (const char *[]){ "xo" }, 199 + .num_parents = 1, 200 + .ops = &clk_alpha_pll_ops, 201 + }, 202 + }, 203 + }; 204 + 205 + static struct clk_fixed_factor gpll1_early_div = { 206 + .mult = 1, 207 + .div = 2, 208 + .hw.init = &(struct clk_init_data){ 209 + .name = "gpll1_early_div", 210 + .parent_names = (const char *[]){ "gpll1_early" }, 211 + .num_parents = 1, 212 + .ops = &clk_fixed_factor_ops, 213 + }, 214 + }; 215 + 216 + static struct clk_alpha_pll_postdiv gpll1 = { 217 + .offset = 0x1000, 218 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 219 + .clkr.hw.init = &(struct clk_init_data){ 220 + .name = "gpll1", 221 + .parent_names = (const char *[]){ "gpll1_early" }, 222 + .num_parents = 1, 223 + .ops = &clk_alpha_pll_postdiv_ops, 224 + }, 225 + }; 226 + 227 + static struct clk_alpha_pll gpll4_early = { 228 + .offset = 0x77000, 229 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 230 + .clkr = { 231 + .enable_reg = 0x52000, 232 + .enable_mask = BIT(4), 233 + .hw.init = &(struct clk_init_data){ 234 + .name = "gpll4_early", 235 + .parent_names = (const char *[]){ "xo" }, 236 + .num_parents = 1, 237 + .ops = &clk_alpha_pll_ops, 238 + }, 239 + }, 240 + }; 241 + 242 + static struct clk_alpha_pll_postdiv gpll4 = { 243 + .offset = 0x77000, 244 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 245 + .clkr.hw.init = &(struct clk_init_data) 246 + { 247 + .name = "gpll4", 248 + .parent_names = (const char *[]) { "gpll4_early" }, 249 + .num_parents = 1, 250 + .ops = &clk_alpha_pll_postdiv_ops, 251 + }, 252 + }; 253 + 254 + static const struct freq_tbl ftbl_blsp1_qup1_i2c_apps_clk_src[] = { 255 + F(19200000, P_XO, 1, 0, 0), 256 + F(50000000, P_GPLL0, 12, 0, 0), 257 + { } 258 + }; 259 + 260 + static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = { 261 + .cmd_rcgr = 0x19020, 262 + .mnd_width = 0, 263 + .hid_width = 5, 264 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 265 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 266 + .clkr.hw.init = &(struct clk_init_data){ 267 + .name = "blsp1_qup1_i2c_apps_clk_src", 268 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 269 + .num_parents = 3, 270 + .ops = &clk_rcg2_ops, 271 + }, 272 + }; 273 + 274 + static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = { 275 + F(960000, P_XO, 10, 1, 2), 276 + F(4800000, P_XO, 4, 0, 0), 277 + F(9600000, P_XO, 2, 0, 0), 278 + F(15000000, P_GPLL0, 10, 1, 4), 279 + F(19200000, P_XO, 1, 0, 0), 280 + F(25000000, P_GPLL0, 12, 1, 2), 281 + F(50000000, P_GPLL0, 12, 0, 0), 282 + { } 283 + }; 284 + 285 + static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = { 286 + .cmd_rcgr = 0x1900c, 287 + .mnd_width = 8, 288 + .hid_width = 5, 289 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 290 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 291 + .clkr.hw.init = &(struct clk_init_data){ 292 + .name = "blsp1_qup1_spi_apps_clk_src", 293 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 294 + .num_parents = 3, 295 + .ops = &clk_rcg2_ops, 296 + }, 297 + }; 298 + 299 + static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = { 300 + .cmd_rcgr = 0x1b020, 301 + .mnd_width = 0, 302 + .hid_width = 5, 303 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 304 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 305 + .clkr.hw.init = &(struct clk_init_data){ 306 + .name = "blsp1_qup2_i2c_apps_clk_src", 307 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 308 + .num_parents = 3, 309 + .ops = &clk_rcg2_ops, 310 + }, 311 + }; 312 + 313 + static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = { 314 + .cmd_rcgr = 0x1b00c, 315 + .mnd_width = 8, 316 + .hid_width = 5, 317 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 318 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 319 + .clkr.hw.init = &(struct clk_init_data){ 320 + .name = "blsp1_qup2_spi_apps_clk_src", 321 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 322 + .num_parents = 3, 323 + .ops = &clk_rcg2_ops, 324 + }, 325 + }; 326 + 327 + static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = { 328 + .cmd_rcgr = 0x1d020, 329 + .mnd_width = 0, 330 + .hid_width = 5, 331 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 332 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 333 + .clkr.hw.init = &(struct clk_init_data){ 334 + .name = "blsp1_qup3_i2c_apps_clk_src", 335 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 336 + .num_parents = 3, 337 + .ops = &clk_rcg2_ops, 338 + }, 339 + }; 340 + 341 + static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = { 342 + .cmd_rcgr = 0x1d00c, 343 + .mnd_width = 8, 344 + .hid_width = 5, 345 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 346 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 347 + .clkr.hw.init = &(struct clk_init_data){ 348 + .name = "blsp1_qup3_spi_apps_clk_src", 349 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 350 + .num_parents = 3, 351 + .ops = &clk_rcg2_ops, 352 + }, 353 + }; 354 + 355 + static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = { 356 + .cmd_rcgr = 0x1f020, 357 + .mnd_width = 0, 358 + .hid_width = 5, 359 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 360 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 361 + .clkr.hw.init = &(struct clk_init_data){ 362 + .name = "blsp1_qup4_i2c_apps_clk_src", 363 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 364 + .num_parents = 3, 365 + .ops = &clk_rcg2_ops, 366 + }, 367 + }; 368 + 369 + static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = { 370 + .cmd_rcgr = 0x1f00c, 371 + .mnd_width = 8, 372 + .hid_width = 5, 373 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 374 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 375 + .clkr.hw.init = &(struct clk_init_data){ 376 + .name = "blsp1_qup4_spi_apps_clk_src", 377 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 378 + .num_parents = 3, 379 + .ops = &clk_rcg2_ops, 380 + }, 381 + }; 382 + 383 + static const struct freq_tbl ftbl_blsp1_uart1_apps_clk_src[] = { 384 + F(3686400, P_GPLL0, 1, 96, 15625), 385 + F(7372800, P_GPLL0, 1, 192, 15625), 386 + F(14745600, P_GPLL0, 1, 384, 15625), 387 + F(16000000, P_GPLL0, 5, 2, 15), 388 + F(19200000, P_XO, 1, 0, 0), 389 + F(24000000, P_GPLL0, 5, 1, 5), 390 + F(32000000, P_GPLL0, 1, 4, 75), 391 + F(40000000, P_GPLL0, 15, 0, 0), 392 + F(46400000, P_GPLL0, 1, 29, 375), 393 + F(48000000, P_GPLL0, 12.5, 0, 0), 394 + F(51200000, P_GPLL0, 1, 32, 375), 395 + F(56000000, P_GPLL0, 1, 7, 75), 396 + F(58982400, P_GPLL0, 1, 1536, 15625), 397 + F(60000000, P_GPLL0, 10, 0, 0), 398 + F(63157895, P_GPLL0, 9.5, 0, 0), 399 + { } 400 + }; 401 + 402 + static struct clk_rcg2 blsp1_uart1_apps_clk_src = { 403 + .cmd_rcgr = 0x1a00c, 404 + .mnd_width = 16, 405 + .hid_width = 5, 406 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 407 + .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 408 + .clkr.hw.init = &(struct clk_init_data){ 409 + .name = "blsp1_uart1_apps_clk_src", 410 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 411 + .num_parents = 3, 412 + .ops = &clk_rcg2_ops, 413 + }, 414 + }; 415 + 416 + static struct clk_rcg2 blsp1_uart2_apps_clk_src = { 417 + .cmd_rcgr = 0x1c00c, 418 + .mnd_width = 16, 419 + .hid_width = 5, 420 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 421 + .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 422 + .clkr.hw.init = &(struct clk_init_data){ 423 + .name = "blsp1_uart2_apps_clk_src", 424 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 425 + .num_parents = 3, 426 + .ops = &clk_rcg2_ops, 427 + }, 428 + }; 429 + 430 + static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = { 431 + .cmd_rcgr = 0x26020, 432 + .mnd_width = 0, 433 + .hid_width = 5, 434 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 435 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 436 + .clkr.hw.init = &(struct clk_init_data){ 437 + .name = "blsp2_qup1_i2c_apps_clk_src", 438 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 439 + .num_parents = 3, 440 + .ops = &clk_rcg2_ops, 441 + }, 442 + }; 443 + 444 + static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = { 445 + .cmd_rcgr = 0x2600c, 446 + .mnd_width = 8, 447 + .hid_width = 5, 448 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 449 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 450 + .clkr.hw.init = &(struct clk_init_data){ 451 + .name = "blsp2_qup1_spi_apps_clk_src", 452 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 453 + .num_parents = 3, 454 + .ops = &clk_rcg2_ops, 455 + }, 456 + }; 457 + 458 + static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = { 459 + .cmd_rcgr = 0x28020, 460 + .mnd_width = 0, 461 + .hid_width = 5, 462 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 463 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 464 + .clkr.hw.init = &(struct clk_init_data){ 465 + .name = "blsp2_qup2_i2c_apps_clk_src", 466 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 467 + .num_parents = 3, 468 + .ops = &clk_rcg2_ops, 469 + }, 470 + }; 471 + 472 + static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = { 473 + .cmd_rcgr = 0x2800c, 474 + .mnd_width = 8, 475 + .hid_width = 5, 476 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 477 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 478 + .clkr.hw.init = &(struct clk_init_data){ 479 + .name = "blsp2_qup2_spi_apps_clk_src", 480 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 481 + .num_parents = 3, 482 + .ops = &clk_rcg2_ops, 483 + }, 484 + }; 485 + 486 + static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = { 487 + .cmd_rcgr = 0x2a020, 488 + .mnd_width = 0, 489 + .hid_width = 5, 490 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 491 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 492 + .clkr.hw.init = &(struct clk_init_data){ 493 + .name = "blsp2_qup3_i2c_apps_clk_src", 494 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 495 + .num_parents = 3, 496 + .ops = &clk_rcg2_ops, 497 + }, 498 + }; 499 + 500 + static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = { 501 + .cmd_rcgr = 0x2a00c, 502 + .mnd_width = 8, 503 + .hid_width = 5, 504 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 505 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 506 + .clkr.hw.init = &(struct clk_init_data){ 507 + .name = "blsp2_qup3_spi_apps_clk_src", 508 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 509 + .num_parents = 3, 510 + .ops = &clk_rcg2_ops, 511 + }, 512 + }; 513 + 514 + static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = { 515 + .cmd_rcgr = 0x2c020, 516 + .mnd_width = 0, 517 + .hid_width = 5, 518 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 519 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 520 + .clkr.hw.init = &(struct clk_init_data){ 521 + .name = "blsp2_qup4_i2c_apps_clk_src", 522 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 523 + .num_parents = 3, 524 + .ops = &clk_rcg2_ops, 525 + }, 526 + }; 527 + 528 + static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = { 529 + .cmd_rcgr = 0x2c00c, 530 + .mnd_width = 8, 531 + .hid_width = 5, 532 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 533 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 534 + .clkr.hw.init = &(struct clk_init_data){ 535 + .name = "blsp2_qup4_spi_apps_clk_src", 536 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 537 + .num_parents = 3, 538 + .ops = &clk_rcg2_ops, 539 + }, 540 + }; 541 + 542 + static struct clk_rcg2 blsp2_uart1_apps_clk_src = { 543 + .cmd_rcgr = 0x2700c, 544 + .mnd_width = 16, 545 + .hid_width = 5, 546 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 547 + .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 548 + .clkr.hw.init = &(struct clk_init_data){ 549 + .name = "blsp2_uart1_apps_clk_src", 550 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 551 + .num_parents = 3, 552 + .ops = &clk_rcg2_ops, 553 + }, 554 + }; 555 + 556 + static struct clk_rcg2 blsp2_uart2_apps_clk_src = { 557 + .cmd_rcgr = 0x2900c, 558 + .mnd_width = 16, 559 + .hid_width = 5, 560 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 561 + .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 562 + .clkr.hw.init = &(struct clk_init_data){ 563 + .name = "blsp2_uart2_apps_clk_src", 564 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 565 + .num_parents = 3, 566 + .ops = &clk_rcg2_ops, 567 + }, 568 + }; 569 + 570 + static const struct freq_tbl ftbl_gp1_clk_src[] = { 571 + F(19200000, P_XO, 1, 0, 0), 572 + F(100000000, P_GPLL0, 6, 0, 0), 573 + F(200000000, P_GPLL0, 3, 0, 0), 574 + { } 575 + }; 576 + 577 + static struct clk_rcg2 gp1_clk_src = { 578 + .cmd_rcgr = 0x64004, 579 + .mnd_width = 8, 580 + .hid_width = 5, 581 + .parent_map = gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div, 582 + .freq_tbl = ftbl_gp1_clk_src, 583 + .clkr.hw.init = &(struct clk_init_data){ 584 + .name = "gp1_clk_src", 585 + .parent_names = gcc_parent_names_xo_gpll0_sleep_clk_gpll0_early_div, 586 + .num_parents = 4, 587 + .ops = &clk_rcg2_ops, 588 + }, 589 + }; 590 + 591 + static struct clk_rcg2 gp2_clk_src = { 592 + .cmd_rcgr = 0x65004, 593 + .mnd_width = 8, 594 + .hid_width = 5, 595 + .parent_map = gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div, 596 + .freq_tbl = ftbl_gp1_clk_src, 597 + .clkr.hw.init = &(struct clk_init_data){ 598 + .name = "gp2_clk_src", 599 + .parent_names = gcc_parent_names_xo_gpll0_sleep_clk_gpll0_early_div, 600 + .num_parents = 4, 601 + .ops = &clk_rcg2_ops, 602 + }, 603 + }; 604 + 605 + static struct clk_rcg2 gp3_clk_src = { 606 + .cmd_rcgr = 0x66004, 607 + .mnd_width = 8, 608 + .hid_width = 5, 609 + .parent_map = gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div, 610 + .freq_tbl = ftbl_gp1_clk_src, 611 + .clkr.hw.init = &(struct clk_init_data){ 612 + .name = "gp3_clk_src", 613 + .parent_names = gcc_parent_names_xo_gpll0_sleep_clk_gpll0_early_div, 614 + .num_parents = 4, 615 + .ops = &clk_rcg2_ops, 616 + }, 617 + }; 618 + 619 + static const struct freq_tbl ftbl_hmss_gpll0_clk_src[] = { 620 + F(300000000, P_GPLL0, 2, 0, 0), 621 + F(600000000, P_GPLL0, 1, 0, 0), 622 + { } 623 + }; 624 + 625 + static struct clk_rcg2 hmss_gpll0_clk_src = { 626 + .cmd_rcgr = 0x4805c, 627 + .mnd_width = 0, 628 + .hid_width = 5, 629 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 630 + .freq_tbl = ftbl_hmss_gpll0_clk_src, 631 + .clkr.hw.init = &(struct clk_init_data){ 632 + .name = "hmss_gpll0_clk_src", 633 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 634 + .num_parents = 3, 635 + .ops = &clk_rcg2_ops, 636 + }, 637 + }; 638 + 639 + static const struct freq_tbl ftbl_hmss_gpll4_clk_src[] = { 640 + F(384000000, P_GPLL4, 4, 0, 0), 641 + F(768000000, P_GPLL4, 2, 0, 0), 642 + F(1536000000, P_GPLL4, 1, 0, 0), 643 + { } 644 + }; 645 + 646 + static struct clk_rcg2 hmss_gpll4_clk_src = { 647 + .cmd_rcgr = 0x48074, 648 + .mnd_width = 0, 649 + .hid_width = 5, 650 + .parent_map = gcc_parent_map_xo_gpll4, 651 + .freq_tbl = ftbl_hmss_gpll4_clk_src, 652 + .clkr.hw.init = &(struct clk_init_data){ 653 + .name = "hmss_gpll4_clk_src", 654 + .parent_names = gcc_parent_names_xo_gpll4, 655 + .num_parents = 2, 656 + .ops = &clk_rcg2_ops, 657 + }, 658 + }; 659 + 660 + static const struct freq_tbl ftbl_hmss_rbcpr_clk_src[] = { 661 + F(19200000, P_XO, 1, 0, 0), 662 + { } 663 + }; 664 + 665 + static struct clk_rcg2 hmss_rbcpr_clk_src = { 666 + .cmd_rcgr = 0x48044, 667 + .mnd_width = 0, 668 + .hid_width = 5, 669 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 670 + .freq_tbl = ftbl_hmss_rbcpr_clk_src, 671 + .clkr.hw.init = &(struct clk_init_data){ 672 + .name = "hmss_rbcpr_clk_src", 673 + .parent_names = gcc_parent_names_xo_gpll0, 674 + .num_parents = 2, 675 + .ops = &clk_rcg2_ops, 676 + }, 677 + }; 678 + 679 + static const struct freq_tbl ftbl_pdm2_clk_src[] = { 680 + F(60000000, P_GPLL0, 10, 0, 0), 681 + { } 682 + }; 683 + 684 + static struct clk_rcg2 pdm2_clk_src = { 685 + .cmd_rcgr = 0x33010, 686 + .mnd_width = 0, 687 + .hid_width = 5, 688 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 689 + .freq_tbl = ftbl_pdm2_clk_src, 690 + .clkr.hw.init = &(struct clk_init_data){ 691 + .name = "pdm2_clk_src", 692 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 693 + .num_parents = 3, 694 + .ops = &clk_rcg2_ops, 695 + }, 696 + }; 697 + 698 + static const struct freq_tbl ftbl_qspi_ser_clk_src[] = { 699 + F(19200000, P_XO, 1, 0, 0), 700 + F(80200000, P_GPLL1_EARLY_DIV, 5, 0, 0), 701 + F(160400000, P_GPLL1, 5, 0, 0), 702 + F(267333333, P_GPLL1, 3, 0, 0), 703 + { } 704 + }; 705 + 706 + static struct clk_rcg2 qspi_ser_clk_src = { 707 + .cmd_rcgr = 0x4d00c, 708 + .mnd_width = 0, 709 + .hid_width = 5, 710 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div, 711 + .freq_tbl = ftbl_qspi_ser_clk_src, 712 + .clkr.hw.init = &(struct clk_init_data){ 713 + .name = "qspi_ser_clk_src", 714 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div, 715 + .num_parents = 6, 716 + .ops = &clk_rcg2_ops, 717 + }, 718 + }; 719 + 720 + static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = { 721 + F(144000, P_XO, 16, 3, 25), 722 + F(400000, P_XO, 12, 1, 4), 723 + F(20000000, P_GPLL0_EARLY_DIV, 5, 1, 3), 724 + F(25000000, P_GPLL0_EARLY_DIV, 6, 1, 2), 725 + F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0), 726 + F(100000000, P_GPLL0, 6, 0, 0), 727 + F(192000000, P_GPLL4, 8, 0, 0), 728 + F(384000000, P_GPLL4, 4, 0, 0), 729 + { } 730 + }; 731 + 732 + static struct clk_rcg2 sdcc1_apps_clk_src = { 733 + .cmd_rcgr = 0x1602c, 734 + .mnd_width = 8, 735 + .hid_width = 5, 736 + .parent_map = gcc_parent_map_xo_gpll0_gpll4_gpll0_early_div, 737 + .freq_tbl = ftbl_sdcc1_apps_clk_src, 738 + .clkr.hw.init = &(struct clk_init_data){ 739 + .name = "sdcc1_apps_clk_src", 740 + .parent_names = gcc_parent_names_xo_gpll0_gpll4_gpll0_early_div, 741 + .num_parents = 4, 742 + .ops = &clk_rcg2_ops, 743 + }, 744 + }; 745 + 746 + static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = { 747 + F(75000000, P_GPLL0_EARLY_DIV, 4, 0, 0), 748 + F(150000000, P_GPLL0, 4, 0, 0), 749 + F(200000000, P_GPLL0, 3, 0, 0), 750 + F(300000000, P_GPLL0, 2, 0, 0), 751 + { } 752 + }; 753 + 754 + static struct clk_rcg2 sdcc1_ice_core_clk_src = { 755 + .cmd_rcgr = 0x16010, 756 + .mnd_width = 0, 757 + .hid_width = 5, 758 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 759 + .freq_tbl = ftbl_sdcc1_ice_core_clk_src, 760 + .clkr.hw.init = &(struct clk_init_data){ 761 + .name = "sdcc1_ice_core_clk_src", 762 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 763 + .num_parents = 3, 764 + .ops = &clk_rcg2_ops, 765 + }, 766 + }; 767 + 768 + static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = { 769 + F(144000, P_XO, 16, 3, 25), 770 + F(400000, P_XO, 12, 1, 4), 771 + F(20000000, P_GPLL0_EARLY_DIV, 5, 1, 3), 772 + F(25000000, P_GPLL0_EARLY_DIV, 6, 1, 2), 773 + F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0), 774 + F(100000000, P_GPLL0, 6, 0, 0), 775 + F(192000000, P_GPLL4, 8, 0, 0), 776 + F(200000000, P_GPLL0, 3, 0, 0), 777 + { } 778 + }; 779 + 780 + static struct clk_rcg2 sdcc2_apps_clk_src = { 781 + .cmd_rcgr = 0x14010, 782 + .mnd_width = 8, 783 + .hid_width = 5, 784 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div_gpll4, 785 + .freq_tbl = ftbl_sdcc2_apps_clk_src, 786 + .clkr.hw.init = &(struct clk_init_data){ 787 + .name = "sdcc2_apps_clk_src", 788 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div_gpll4, 789 + .num_parents = 4, 790 + .ops = &clk_rcg2_ops, 791 + }, 792 + }; 793 + 794 + static const struct freq_tbl ftbl_ufs_axi_clk_src[] = { 795 + F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0), 796 + F(100000000, P_GPLL0, 6, 0, 0), 797 + F(150000000, P_GPLL0, 4, 0, 0), 798 + F(200000000, P_GPLL0, 3, 0, 0), 799 + F(240000000, P_GPLL0, 2.5, 0, 0), 800 + { } 801 + }; 802 + 803 + static struct clk_rcg2 ufs_axi_clk_src = { 804 + .cmd_rcgr = 0x75018, 805 + .mnd_width = 8, 806 + .hid_width = 5, 807 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 808 + .freq_tbl = ftbl_ufs_axi_clk_src, 809 + .clkr.hw.init = &(struct clk_init_data){ 810 + .name = "ufs_axi_clk_src", 811 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 812 + .num_parents = 3, 813 + .ops = &clk_rcg2_ops, 814 + }, 815 + }; 816 + 817 + static const struct freq_tbl ftbl_ufs_ice_core_clk_src[] = { 818 + F(75000000, P_GPLL0_EARLY_DIV, 4, 0, 0), 819 + F(150000000, P_GPLL0, 4, 0, 0), 820 + F(300000000, P_GPLL0, 2, 0, 0), 821 + { } 822 + }; 823 + 824 + static struct clk_rcg2 ufs_ice_core_clk_src = { 825 + .cmd_rcgr = 0x76010, 826 + .mnd_width = 0, 827 + .hid_width = 5, 828 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 829 + .freq_tbl = ftbl_ufs_ice_core_clk_src, 830 + .clkr.hw.init = &(struct clk_init_data){ 831 + .name = "ufs_ice_core_clk_src", 832 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 833 + .num_parents = 3, 834 + .ops = &clk_rcg2_ops, 835 + }, 836 + }; 837 + 838 + static struct clk_rcg2 ufs_phy_aux_clk_src = { 839 + .cmd_rcgr = 0x76044, 840 + .mnd_width = 0, 841 + .hid_width = 5, 842 + .parent_map = gcc_parent_map_xo_sleep_clk, 843 + .freq_tbl = ftbl_hmss_rbcpr_clk_src, 844 + .clkr.hw.init = &(struct clk_init_data){ 845 + .name = "ufs_phy_aux_clk_src", 846 + .parent_names = gcc_parent_names_xo_sleep_clk, 847 + .num_parents = 2, 848 + .ops = &clk_rcg2_ops, 849 + }, 850 + }; 851 + 852 + static const struct freq_tbl ftbl_ufs_unipro_core_clk_src[] = { 853 + F(37500000, P_GPLL0_EARLY_DIV, 8, 0, 0), 854 + F(75000000, P_GPLL0, 8, 0, 0), 855 + F(150000000, P_GPLL0, 4, 0, 0), 856 + { } 857 + }; 858 + 859 + static struct clk_rcg2 ufs_unipro_core_clk_src = { 860 + .cmd_rcgr = 0x76028, 861 + .mnd_width = 0, 862 + .hid_width = 5, 863 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 864 + .freq_tbl = ftbl_ufs_unipro_core_clk_src, 865 + .clkr.hw.init = &(struct clk_init_data){ 866 + .name = "ufs_unipro_core_clk_src", 867 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 868 + .num_parents = 3, 869 + .ops = &clk_rcg2_ops, 870 + }, 871 + }; 872 + 873 + static const struct freq_tbl ftbl_usb20_master_clk_src[] = { 874 + F(19200000, P_XO, 1, 0, 0), 875 + F(60000000, P_GPLL0, 10, 0, 0), 876 + F(120000000, P_GPLL0, 5, 0, 0), 877 + { } 878 + }; 879 + 880 + static struct clk_rcg2 usb20_master_clk_src = { 881 + .cmd_rcgr = 0x2f010, 882 + .mnd_width = 8, 883 + .hid_width = 5, 884 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 885 + .freq_tbl = ftbl_usb20_master_clk_src, 886 + .clkr.hw.init = &(struct clk_init_data){ 887 + .name = "usb20_master_clk_src", 888 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 889 + .num_parents = 3, 890 + .ops = &clk_rcg2_ops, 891 + }, 892 + }; 893 + 894 + static const struct freq_tbl ftbl_usb20_mock_utmi_clk_src[] = { 895 + F(19200000, P_XO, 1, 0, 0), 896 + F(60000000, P_GPLL0, 10, 0, 0), 897 + { } 898 + }; 899 + 900 + static struct clk_rcg2 usb20_mock_utmi_clk_src = { 901 + .cmd_rcgr = 0x2f024, 902 + .mnd_width = 0, 903 + .hid_width = 5, 904 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 905 + .freq_tbl = ftbl_usb20_mock_utmi_clk_src, 906 + .clkr.hw.init = &(struct clk_init_data){ 907 + .name = "usb20_mock_utmi_clk_src", 908 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 909 + .num_parents = 3, 910 + .ops = &clk_rcg2_ops, 911 + }, 912 + }; 913 + 914 + static const struct freq_tbl ftbl_usb30_master_clk_src[] = { 915 + F(19200000, P_XO, 1, 0, 0), 916 + F(66666667, P_GPLL0_EARLY_DIV, 4.5, 0, 0), 917 + F(120000000, P_GPLL0, 5, 0, 0), 918 + F(133333333, P_GPLL0, 4.5, 0, 0), 919 + F(150000000, P_GPLL0, 4, 0, 0), 920 + F(200000000, P_GPLL0, 3, 0, 0), 921 + F(240000000, P_GPLL0, 2.5, 0, 0), 922 + { } 923 + }; 924 + 925 + static struct clk_rcg2 usb30_master_clk_src = { 926 + .cmd_rcgr = 0xf014, 927 + .mnd_width = 8, 928 + .hid_width = 5, 929 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 930 + .freq_tbl = ftbl_usb30_master_clk_src, 931 + .clkr.hw.init = &(struct clk_init_data){ 932 + .name = "usb30_master_clk_src", 933 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 934 + .num_parents = 3, 935 + .ops = &clk_rcg2_ops, 936 + }, 937 + }; 938 + 939 + static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = { 940 + F(19200000, P_XO, 1, 0, 0), 941 + F(40000000, P_GPLL0_EARLY_DIV, 7.5, 0, 0), 942 + F(60000000, P_GPLL0, 10, 0, 0), 943 + { } 944 + }; 945 + 946 + static struct clk_rcg2 usb30_mock_utmi_clk_src = { 947 + .cmd_rcgr = 0xf028, 948 + .mnd_width = 0, 949 + .hid_width = 5, 950 + .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div, 951 + .freq_tbl = ftbl_usb30_mock_utmi_clk_src, 952 + .clkr.hw.init = &(struct clk_init_data){ 953 + .name = "usb30_mock_utmi_clk_src", 954 + .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div, 955 + .num_parents = 3, 956 + .ops = &clk_rcg2_ops, 957 + }, 958 + }; 959 + 960 + static const struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = { 961 + F(1200000, P_XO, 16, 0, 0), 962 + F(19200000, P_XO, 1, 0, 0), 963 + { } 964 + }; 965 + 966 + static struct clk_rcg2 usb3_phy_aux_clk_src = { 967 + .cmd_rcgr = 0x5000c, 968 + .mnd_width = 0, 969 + .hid_width = 5, 970 + .parent_map = gcc_parent_map_xo_sleep_clk, 971 + .freq_tbl = ftbl_usb3_phy_aux_clk_src, 972 + .clkr.hw.init = &(struct clk_init_data){ 973 + .name = "usb3_phy_aux_clk_src", 974 + .parent_names = gcc_parent_names_xo_sleep_clk, 975 + .num_parents = 2, 976 + .ops = &clk_rcg2_ops, 977 + }, 978 + }; 979 + 980 + static struct clk_branch gcc_aggre2_ufs_axi_clk = { 981 + .halt_reg = 0x75034, 982 + .halt_check = BRANCH_HALT, 983 + .clkr = { 984 + .enable_reg = 0x75034, 985 + .enable_mask = BIT(0), 986 + .hw.init = &(struct clk_init_data){ 987 + .name = "gcc_aggre2_ufs_axi_clk", 988 + .parent_names = (const char *[]){ 989 + "ufs_axi_clk_src", 990 + }, 991 + .num_parents = 1, 992 + .ops = &clk_branch2_ops, 993 + }, 994 + }, 995 + }; 996 + 997 + static struct clk_branch gcc_aggre2_usb3_axi_clk = { 998 + .halt_reg = 0xf03c, 999 + .halt_check = BRANCH_HALT, 1000 + .clkr = { 1001 + .enable_reg = 0xf03c, 1002 + .enable_mask = BIT(0), 1003 + .hw.init = &(struct clk_init_data){ 1004 + .name = "gcc_aggre2_usb3_axi_clk", 1005 + .parent_names = (const char *[]){ 1006 + "usb30_master_clk_src", 1007 + }, 1008 + .num_parents = 1, 1009 + .ops = &clk_branch2_ops, 1010 + }, 1011 + }, 1012 + }; 1013 + 1014 + static struct clk_branch gcc_bimc_gfx_clk = { 1015 + .halt_reg = 0x7106c, 1016 + .halt_check = BRANCH_VOTED, 1017 + .clkr = { 1018 + .enable_reg = 0x7106c, 1019 + .enable_mask = BIT(0), 1020 + .hw.init = &(struct clk_init_data){ 1021 + .name = "gcc_bimc_gfx_clk", 1022 + .ops = &clk_branch2_ops, 1023 + }, 1024 + }, 1025 + }; 1026 + 1027 + static struct clk_branch gcc_bimc_hmss_axi_clk = { 1028 + .halt_reg = 0x48004, 1029 + .halt_check = BRANCH_HALT_VOTED, 1030 + .clkr = { 1031 + .enable_reg = 0x52004, 1032 + .enable_mask = BIT(22), 1033 + .hw.init = &(struct clk_init_data){ 1034 + .name = "gcc_bimc_hmss_axi_clk", 1035 + .ops = &clk_branch2_ops, 1036 + }, 1037 + }, 1038 + }; 1039 + 1040 + static struct clk_branch gcc_bimc_mss_q6_axi_clk = { 1041 + .halt_reg = 0x4401c, 1042 + .halt_check = BRANCH_HALT, 1043 + .clkr = { 1044 + .enable_reg = 0x4401c, 1045 + .enable_mask = BIT(0), 1046 + .hw.init = &(struct clk_init_data){ 1047 + .name = "gcc_bimc_mss_q6_axi_clk", 1048 + .ops = &clk_branch2_ops, 1049 + }, 1050 + }, 1051 + }; 1052 + 1053 + static struct clk_branch gcc_blsp1_ahb_clk = { 1054 + .halt_reg = 0x17004, 1055 + .halt_check = BRANCH_HALT_VOTED, 1056 + .clkr = { 1057 + .enable_reg = 0x52004, 1058 + .enable_mask = BIT(17), 1059 + .hw.init = &(struct clk_init_data){ 1060 + .name = "gcc_blsp1_ahb_clk", 1061 + .ops = &clk_branch2_ops, 1062 + }, 1063 + }, 1064 + }; 1065 + 1066 + static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = { 1067 + .halt_reg = 0x19008, 1068 + .halt_check = BRANCH_HALT, 1069 + .clkr = { 1070 + .enable_reg = 0x19008, 1071 + .enable_mask = BIT(0), 1072 + .hw.init = &(struct clk_init_data){ 1073 + .name = "gcc_blsp1_qup1_i2c_apps_clk", 1074 + .parent_names = (const char *[]){ 1075 + "blsp1_qup1_i2c_apps_clk_src", 1076 + }, 1077 + .num_parents = 1, 1078 + .flags = CLK_SET_RATE_PARENT, 1079 + .ops = &clk_branch2_ops, 1080 + }, 1081 + }, 1082 + }; 1083 + 1084 + static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = { 1085 + .halt_reg = 0x19004, 1086 + .halt_check = BRANCH_HALT, 1087 + .clkr = { 1088 + .enable_reg = 0x19004, 1089 + .enable_mask = BIT(0), 1090 + .hw.init = &(struct clk_init_data){ 1091 + .name = "gcc_blsp1_qup1_spi_apps_clk", 1092 + .parent_names = (const char *[]){ 1093 + "blsp1_qup1_spi_apps_clk_src", 1094 + }, 1095 + .num_parents = 1, 1096 + .flags = CLK_SET_RATE_PARENT, 1097 + .ops = &clk_branch2_ops, 1098 + }, 1099 + }, 1100 + }; 1101 + 1102 + static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = { 1103 + .halt_reg = 0x1b008, 1104 + .halt_check = BRANCH_HALT, 1105 + .clkr = { 1106 + .enable_reg = 0x1b008, 1107 + .enable_mask = BIT(0), 1108 + .hw.init = &(struct clk_init_data){ 1109 + .name = "gcc_blsp1_qup2_i2c_apps_clk", 1110 + .parent_names = (const char *[]){ 1111 + "blsp1_qup2_i2c_apps_clk_src", 1112 + }, 1113 + .num_parents = 1, 1114 + .flags = CLK_SET_RATE_PARENT, 1115 + .ops = &clk_branch2_ops, 1116 + }, 1117 + }, 1118 + }; 1119 + 1120 + static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = { 1121 + .halt_reg = 0x1b004, 1122 + .halt_check = BRANCH_HALT, 1123 + .clkr = { 1124 + .enable_reg = 0x1b004, 1125 + .enable_mask = BIT(0), 1126 + .hw.init = &(struct clk_init_data){ 1127 + .name = "gcc_blsp1_qup2_spi_apps_clk", 1128 + .parent_names = (const char *[]){ 1129 + "blsp1_qup2_spi_apps_clk_src", 1130 + }, 1131 + .num_parents = 1, 1132 + .flags = CLK_SET_RATE_PARENT, 1133 + .ops = &clk_branch2_ops, 1134 + }, 1135 + }, 1136 + }; 1137 + 1138 + static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = { 1139 + .halt_reg = 0x1d008, 1140 + .halt_check = BRANCH_HALT, 1141 + .clkr = { 1142 + .enable_reg = 0x1d008, 1143 + .enable_mask = BIT(0), 1144 + .hw.init = &(struct clk_init_data){ 1145 + .name = "gcc_blsp1_qup3_i2c_apps_clk", 1146 + .parent_names = (const char *[]){ 1147 + "blsp1_qup3_i2c_apps_clk_src", 1148 + }, 1149 + .num_parents = 1, 1150 + .flags = CLK_SET_RATE_PARENT, 1151 + .ops = &clk_branch2_ops, 1152 + }, 1153 + }, 1154 + }; 1155 + 1156 + static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = { 1157 + .halt_reg = 0x1d004, 1158 + .halt_check = BRANCH_HALT, 1159 + .clkr = { 1160 + .enable_reg = 0x1d004, 1161 + .enable_mask = BIT(0), 1162 + .hw.init = &(struct clk_init_data){ 1163 + .name = "gcc_blsp1_qup3_spi_apps_clk", 1164 + .parent_names = (const char *[]){ 1165 + "blsp1_qup3_spi_apps_clk_src", 1166 + }, 1167 + .num_parents = 1, 1168 + .flags = CLK_SET_RATE_PARENT, 1169 + .ops = &clk_branch2_ops, 1170 + }, 1171 + }, 1172 + }; 1173 + 1174 + static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = { 1175 + .halt_reg = 0x1f008, 1176 + .halt_check = BRANCH_HALT, 1177 + .clkr = { 1178 + .enable_reg = 0x1f008, 1179 + .enable_mask = BIT(0), 1180 + .hw.init = &(struct clk_init_data){ 1181 + .name = "gcc_blsp1_qup4_i2c_apps_clk", 1182 + .parent_names = (const char *[]){ 1183 + "blsp1_qup4_i2c_apps_clk_src", 1184 + }, 1185 + .num_parents = 1, 1186 + .flags = CLK_SET_RATE_PARENT, 1187 + .ops = &clk_branch2_ops, 1188 + }, 1189 + }, 1190 + }; 1191 + 1192 + static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = { 1193 + .halt_reg = 0x1f004, 1194 + .halt_check = BRANCH_HALT, 1195 + .clkr = { 1196 + .enable_reg = 0x1f004, 1197 + .enable_mask = BIT(0), 1198 + .hw.init = &(struct clk_init_data){ 1199 + .name = "gcc_blsp1_qup4_spi_apps_clk", 1200 + .parent_names = (const char *[]){ 1201 + "blsp1_qup4_spi_apps_clk_src", 1202 + }, 1203 + .num_parents = 1, 1204 + .flags = CLK_SET_RATE_PARENT, 1205 + .ops = &clk_branch2_ops, 1206 + }, 1207 + }, 1208 + }; 1209 + 1210 + static struct clk_branch gcc_blsp1_uart1_apps_clk = { 1211 + .halt_reg = 0x1a004, 1212 + .halt_check = BRANCH_HALT, 1213 + .clkr = { 1214 + .enable_reg = 0x1a004, 1215 + .enable_mask = BIT(0), 1216 + .hw.init = &(struct clk_init_data){ 1217 + .name = "gcc_blsp1_uart1_apps_clk", 1218 + .parent_names = (const char *[]){ 1219 + "blsp1_uart1_apps_clk_src", 1220 + }, 1221 + .num_parents = 1, 1222 + .flags = CLK_SET_RATE_PARENT, 1223 + .ops = &clk_branch2_ops, 1224 + }, 1225 + }, 1226 + }; 1227 + 1228 + static struct clk_branch gcc_blsp1_uart2_apps_clk = { 1229 + .halt_reg = 0x1c004, 1230 + .halt_check = BRANCH_HALT, 1231 + .clkr = { 1232 + .enable_reg = 0x1c004, 1233 + .enable_mask = BIT(0), 1234 + .hw.init = &(struct clk_init_data){ 1235 + .name = "gcc_blsp1_uart2_apps_clk", 1236 + .parent_names = (const char *[]){ 1237 + "blsp1_uart2_apps_clk_src", 1238 + }, 1239 + .num_parents = 1, 1240 + .flags = CLK_SET_RATE_PARENT, 1241 + .ops = &clk_branch2_ops, 1242 + }, 1243 + }, 1244 + }; 1245 + 1246 + static struct clk_branch gcc_blsp2_ahb_clk = { 1247 + .halt_reg = 0x25004, 1248 + .halt_check = BRANCH_HALT_VOTED, 1249 + .clkr = { 1250 + .enable_reg = 0x52004, 1251 + .enable_mask = BIT(15), 1252 + .hw.init = &(struct clk_init_data){ 1253 + .name = "gcc_blsp2_ahb_clk", 1254 + .ops = &clk_branch2_ops, 1255 + }, 1256 + }, 1257 + }; 1258 + 1259 + static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = { 1260 + .halt_reg = 0x26008, 1261 + .halt_check = BRANCH_HALT, 1262 + .clkr = { 1263 + .enable_reg = 0x26008, 1264 + .enable_mask = BIT(0), 1265 + .hw.init = &(struct clk_init_data){ 1266 + .name = "gcc_blsp2_qup1_i2c_apps_clk", 1267 + .parent_names = (const char *[]){ 1268 + "blsp2_qup1_i2c_apps_clk_src", 1269 + }, 1270 + .num_parents = 1, 1271 + .flags = CLK_SET_RATE_PARENT, 1272 + .ops = &clk_branch2_ops, 1273 + }, 1274 + }, 1275 + }; 1276 + 1277 + static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = { 1278 + .halt_reg = 0x26004, 1279 + .halt_check = BRANCH_HALT, 1280 + .clkr = { 1281 + .enable_reg = 0x26004, 1282 + .enable_mask = BIT(0), 1283 + .hw.init = &(struct clk_init_data){ 1284 + .name = "gcc_blsp2_qup1_spi_apps_clk", 1285 + .parent_names = (const char *[]){ 1286 + "blsp2_qup1_spi_apps_clk_src", 1287 + }, 1288 + .num_parents = 1, 1289 + .flags = CLK_SET_RATE_PARENT, 1290 + .ops = &clk_branch2_ops, 1291 + }, 1292 + }, 1293 + }; 1294 + 1295 + static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = { 1296 + .halt_reg = 0x28008, 1297 + .halt_check = BRANCH_HALT, 1298 + .clkr = { 1299 + .enable_reg = 0x28008, 1300 + .enable_mask = BIT(0), 1301 + .hw.init = &(struct clk_init_data){ 1302 + .name = "gcc_blsp2_qup2_i2c_apps_clk", 1303 + .parent_names = (const char *[]){ 1304 + "blsp2_qup2_i2c_apps_clk_src", 1305 + }, 1306 + .num_parents = 1, 1307 + .flags = CLK_SET_RATE_PARENT, 1308 + .ops = &clk_branch2_ops, 1309 + }, 1310 + }, 1311 + }; 1312 + 1313 + static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = { 1314 + .halt_reg = 0x28004, 1315 + .halt_check = BRANCH_HALT, 1316 + .clkr = { 1317 + .enable_reg = 0x28004, 1318 + .enable_mask = BIT(0), 1319 + .hw.init = &(struct clk_init_data){ 1320 + .name = "gcc_blsp2_qup2_spi_apps_clk", 1321 + .parent_names = (const char *[]){ 1322 + "blsp2_qup2_spi_apps_clk_src", 1323 + }, 1324 + .num_parents = 1, 1325 + .flags = CLK_SET_RATE_PARENT, 1326 + .ops = &clk_branch2_ops, 1327 + }, 1328 + }, 1329 + }; 1330 + 1331 + static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = { 1332 + .halt_reg = 0x2a008, 1333 + .halt_check = BRANCH_HALT, 1334 + .clkr = { 1335 + .enable_reg = 0x2a008, 1336 + .enable_mask = BIT(0), 1337 + .hw.init = &(struct clk_init_data){ 1338 + .name = "gcc_blsp2_qup3_i2c_apps_clk", 1339 + .parent_names = (const char *[]){ 1340 + "blsp2_qup3_i2c_apps_clk_src", 1341 + }, 1342 + .num_parents = 1, 1343 + .flags = CLK_SET_RATE_PARENT, 1344 + .ops = &clk_branch2_ops, 1345 + }, 1346 + }, 1347 + }; 1348 + 1349 + static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = { 1350 + .halt_reg = 0x2a004, 1351 + .halt_check = BRANCH_HALT, 1352 + .clkr = { 1353 + .enable_reg = 0x2a004, 1354 + .enable_mask = BIT(0), 1355 + .hw.init = &(struct clk_init_data){ 1356 + .name = "gcc_blsp2_qup3_spi_apps_clk", 1357 + .parent_names = (const char *[]){ 1358 + "blsp2_qup3_spi_apps_clk_src", 1359 + }, 1360 + .num_parents = 1, 1361 + .flags = CLK_SET_RATE_PARENT, 1362 + .ops = &clk_branch2_ops, 1363 + }, 1364 + }, 1365 + }; 1366 + 1367 + static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = { 1368 + .halt_reg = 0x2c008, 1369 + .halt_check = BRANCH_HALT, 1370 + .clkr = { 1371 + .enable_reg = 0x2c008, 1372 + .enable_mask = BIT(0), 1373 + .hw.init = &(struct clk_init_data){ 1374 + .name = "gcc_blsp2_qup4_i2c_apps_clk", 1375 + .parent_names = (const char *[]){ 1376 + "blsp2_qup4_i2c_apps_clk_src", 1377 + }, 1378 + .num_parents = 1, 1379 + .flags = CLK_SET_RATE_PARENT, 1380 + .ops = &clk_branch2_ops, 1381 + }, 1382 + }, 1383 + }; 1384 + 1385 + static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = { 1386 + .halt_reg = 0x2c004, 1387 + .halt_check = BRANCH_HALT, 1388 + .clkr = { 1389 + .enable_reg = 0x2c004, 1390 + .enable_mask = BIT(0), 1391 + .hw.init = &(struct clk_init_data){ 1392 + .name = "gcc_blsp2_qup4_spi_apps_clk", 1393 + .parent_names = (const char *[]){ 1394 + "blsp2_qup4_spi_apps_clk_src", 1395 + }, 1396 + .num_parents = 1, 1397 + .flags = CLK_SET_RATE_PARENT, 1398 + .ops = &clk_branch2_ops, 1399 + }, 1400 + }, 1401 + }; 1402 + 1403 + static struct clk_branch gcc_blsp2_uart1_apps_clk = { 1404 + .halt_reg = 0x27004, 1405 + .halt_check = BRANCH_HALT, 1406 + .clkr = { 1407 + .enable_reg = 0x27004, 1408 + .enable_mask = BIT(0), 1409 + .hw.init = &(struct clk_init_data){ 1410 + .name = "gcc_blsp2_uart1_apps_clk", 1411 + .parent_names = (const char *[]){ 1412 + "blsp2_uart1_apps_clk_src", 1413 + }, 1414 + .num_parents = 1, 1415 + .flags = CLK_SET_RATE_PARENT, 1416 + .ops = &clk_branch2_ops, 1417 + }, 1418 + }, 1419 + }; 1420 + 1421 + static struct clk_branch gcc_blsp2_uart2_apps_clk = { 1422 + .halt_reg = 0x29004, 1423 + .halt_check = BRANCH_HALT, 1424 + .clkr = { 1425 + .enable_reg = 0x29004, 1426 + .enable_mask = BIT(0), 1427 + .hw.init = &(struct clk_init_data){ 1428 + .name = "gcc_blsp2_uart2_apps_clk", 1429 + .parent_names = (const char *[]){ 1430 + "blsp2_uart2_apps_clk_src", 1431 + }, 1432 + .num_parents = 1, 1433 + .flags = CLK_SET_RATE_PARENT, 1434 + .ops = &clk_branch2_ops, 1435 + }, 1436 + }, 1437 + }; 1438 + 1439 + static struct clk_branch gcc_boot_rom_ahb_clk = { 1440 + .halt_reg = 0x38004, 1441 + .halt_check = BRANCH_HALT_VOTED, 1442 + .clkr = { 1443 + .enable_reg = 0x52004, 1444 + .enable_mask = BIT(10), 1445 + .hw.init = &(struct clk_init_data){ 1446 + .name = "gcc_boot_rom_ahb_clk", 1447 + .ops = &clk_branch2_ops, 1448 + }, 1449 + }, 1450 + }; 1451 + 1452 + static struct clk_branch gcc_cfg_noc_usb2_axi_clk = { 1453 + .halt_reg = 0x5058, 1454 + .halt_check = BRANCH_HALT, 1455 + .clkr = { 1456 + .enable_reg = 0x5058, 1457 + .enable_mask = BIT(0), 1458 + .hw.init = &(struct clk_init_data){ 1459 + .name = "gcc_cfg_noc_usb2_axi_clk", 1460 + .parent_names = (const char *[]){ 1461 + "usb20_master_clk_src", 1462 + }, 1463 + .num_parents = 1, 1464 + .ops = &clk_branch2_ops, 1465 + }, 1466 + }, 1467 + }; 1468 + 1469 + static struct clk_branch gcc_cfg_noc_usb3_axi_clk = { 1470 + .halt_reg = 0x5018, 1471 + .halt_check = BRANCH_HALT, 1472 + .clkr = { 1473 + .enable_reg = 0x5018, 1474 + .enable_mask = BIT(0), 1475 + .hw.init = &(struct clk_init_data){ 1476 + .name = "gcc_cfg_noc_usb3_axi_clk", 1477 + .parent_names = (const char *[]){ 1478 + "usb30_master_clk_src", 1479 + }, 1480 + .num_parents = 1, 1481 + .ops = &clk_branch2_ops, 1482 + }, 1483 + }, 1484 + }; 1485 + 1486 + static struct clk_branch gcc_dcc_ahb_clk = { 1487 + .halt_reg = 0x84004, 1488 + .clkr = { 1489 + .enable_reg = 0x84004, 1490 + .enable_mask = BIT(0), 1491 + .hw.init = &(struct clk_init_data){ 1492 + .name = "gcc_dcc_ahb_clk", 1493 + .ops = &clk_branch2_ops, 1494 + }, 1495 + }, 1496 + }; 1497 + 1498 + static struct clk_branch gcc_gp1_clk = { 1499 + .halt_reg = 0x64000, 1500 + .halt_check = BRANCH_HALT, 1501 + .clkr = { 1502 + .enable_reg = 0x64000, 1503 + .enable_mask = BIT(0), 1504 + .hw.init = &(struct clk_init_data){ 1505 + .name = "gcc_gp1_clk", 1506 + .parent_names = (const char *[]){ 1507 + "gp1_clk_src", 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_gp2_clk = { 1517 + .halt_reg = 0x65000, 1518 + .halt_check = BRANCH_HALT, 1519 + .clkr = { 1520 + .enable_reg = 0x65000, 1521 + .enable_mask = BIT(0), 1522 + .hw.init = &(struct clk_init_data){ 1523 + .name = "gcc_gp2_clk", 1524 + .parent_names = (const char *[]){ 1525 + "gp2_clk_src", 1526 + }, 1527 + .num_parents = 1, 1528 + .flags = CLK_SET_RATE_PARENT, 1529 + .ops = &clk_branch2_ops, 1530 + }, 1531 + }, 1532 + }; 1533 + 1534 + static struct clk_branch gcc_gp3_clk = { 1535 + .halt_reg = 0x66000, 1536 + .halt_check = BRANCH_HALT, 1537 + .clkr = { 1538 + .enable_reg = 0x66000, 1539 + .enable_mask = BIT(0), 1540 + .hw.init = &(struct clk_init_data){ 1541 + .name = "gcc_gp3_clk", 1542 + .parent_names = (const char *[]){ 1543 + "gp3_clk_src", 1544 + }, 1545 + .num_parents = 1, 1546 + .flags = CLK_SET_RATE_PARENT, 1547 + .ops = &clk_branch2_ops, 1548 + }, 1549 + }, 1550 + }; 1551 + 1552 + static struct clk_branch gcc_gpu_bimc_gfx_clk = { 1553 + .halt_reg = 0x71010, 1554 + .halt_check = BRANCH_VOTED, 1555 + .clkr = { 1556 + .enable_reg = 0x71010, 1557 + .enable_mask = BIT(0), 1558 + .hw.init = &(struct clk_init_data){ 1559 + .name = "gcc_gpu_bimc_gfx_clk", 1560 + .ops = &clk_branch2_ops, 1561 + }, 1562 + }, 1563 + }; 1564 + 1565 + static struct clk_branch gcc_gpu_cfg_ahb_clk = { 1566 + .halt_reg = 0x71004, 1567 + .halt_check = BRANCH_VOTED, 1568 + .clkr = { 1569 + .enable_reg = 0x71004, 1570 + .enable_mask = BIT(0), 1571 + .hw.init = &(struct clk_init_data){ 1572 + .name = "gcc_gpu_cfg_ahb_clk", 1573 + .ops = &clk_branch2_ops, 1574 + }, 1575 + }, 1576 + }; 1577 + 1578 + static struct clk_branch gcc_gpu_gpll0_clk = { 1579 + .halt_reg = 0x5200c, 1580 + .halt_check = BRANCH_HALT_DELAY, 1581 + .clkr = { 1582 + .enable_reg = 0x5200c, 1583 + .enable_mask = BIT(4), 1584 + .hw.init = &(struct clk_init_data){ 1585 + .name = "gcc_gpu_gpll0_clk", 1586 + .parent_names = (const char *[]){ 1587 + "gpll0", 1588 + }, 1589 + .num_parents = 1, 1590 + .ops = &clk_branch2_ops, 1591 + }, 1592 + }, 1593 + }; 1594 + 1595 + static struct clk_branch gcc_gpu_gpll0_div_clk = { 1596 + .halt_reg = 0x5200c, 1597 + .halt_check = BRANCH_HALT_DELAY, 1598 + .clkr = { 1599 + .enable_reg = 0x5200c, 1600 + .enable_mask = BIT(3), 1601 + .hw.init = &(struct clk_init_data){ 1602 + .name = "gcc_gpu_gpll0_div_clk", 1603 + .parent_names = (const char *[]){ 1604 + "gpll0_early_div", 1605 + }, 1606 + .num_parents = 1, 1607 + .ops = &clk_branch2_ops, 1608 + }, 1609 + }, 1610 + }; 1611 + 1612 + static struct clk_branch gcc_hmss_dvm_bus_clk = { 1613 + .halt_reg = 0x4808c, 1614 + .halt_check = BRANCH_HALT, 1615 + .clkr = { 1616 + .enable_reg = 0x4808c, 1617 + .enable_mask = BIT(0), 1618 + .hw.init = &(struct clk_init_data){ 1619 + .name = "gcc_hmss_dvm_bus_clk", 1620 + .ops = &clk_branch2_ops, 1621 + .flags = CLK_IGNORE_UNUSED, 1622 + }, 1623 + }, 1624 + }; 1625 + 1626 + static struct clk_branch gcc_hmss_rbcpr_clk = { 1627 + .halt_reg = 0x48008, 1628 + .halt_check = BRANCH_HALT, 1629 + .clkr = { 1630 + .enable_reg = 0x48008, 1631 + .enable_mask = BIT(0), 1632 + .hw.init = &(struct clk_init_data){ 1633 + .name = "gcc_hmss_rbcpr_clk", 1634 + .parent_names = (const char *[]){ 1635 + "hmss_rbcpr_clk_src", 1636 + }, 1637 + .num_parents = 1, 1638 + .flags = CLK_SET_RATE_PARENT, 1639 + .ops = &clk_branch2_ops, 1640 + }, 1641 + }, 1642 + }; 1643 + 1644 + static struct clk_branch gcc_mmss_gpll0_clk = { 1645 + .halt_reg = 0x5200c, 1646 + .halt_check = BRANCH_HALT_DELAY, 1647 + .clkr = { 1648 + .enable_reg = 0x5200c, 1649 + .enable_mask = BIT(1), 1650 + .hw.init = &(struct clk_init_data){ 1651 + .name = "gcc_mmss_gpll0_clk", 1652 + .parent_names = (const char *[]){ 1653 + "gpll0", 1654 + }, 1655 + .num_parents = 1, 1656 + .ops = &clk_branch2_ops, 1657 + }, 1658 + }, 1659 + }; 1660 + 1661 + static struct clk_branch gcc_mmss_gpll0_div_clk = { 1662 + .halt_reg = 0x5200c, 1663 + .halt_check = BRANCH_HALT_DELAY, 1664 + .clkr = { 1665 + .enable_reg = 0x5200c, 1666 + .enable_mask = BIT(0), 1667 + .hw.init = &(struct clk_init_data){ 1668 + .name = "gcc_mmss_gpll0_div_clk", 1669 + .parent_names = (const char *[]){ 1670 + "gpll0_early_div", 1671 + }, 1672 + .num_parents = 1, 1673 + .ops = &clk_branch2_ops, 1674 + }, 1675 + }, 1676 + }; 1677 + 1678 + static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = { 1679 + .halt_reg = 0x9004, 1680 + .halt_check = BRANCH_HALT, 1681 + .clkr = { 1682 + .enable_reg = 0x9004, 1683 + .enable_mask = BIT(0), 1684 + .hw.init = &(struct clk_init_data){ 1685 + .name = "gcc_mmss_noc_cfg_ahb_clk", 1686 + .ops = &clk_branch2_ops, 1687 + }, 1688 + }, 1689 + }; 1690 + 1691 + static struct clk_branch gcc_mmss_sys_noc_axi_clk = { 1692 + .halt_reg = 0x9000, 1693 + .halt_check = BRANCH_HALT, 1694 + .clkr = { 1695 + .enable_reg = 0x9000, 1696 + .enable_mask = BIT(0), 1697 + .hw.init = &(struct clk_init_data){ 1698 + .name = "gcc_mmss_sys_noc_axi_clk", 1699 + .ops = &clk_branch2_ops, 1700 + }, 1701 + }, 1702 + }; 1703 + 1704 + static struct clk_branch gcc_mss_cfg_ahb_clk = { 1705 + .halt_reg = 0x8a000, 1706 + .clkr = { 1707 + .enable_reg = 0x8a000, 1708 + .enable_mask = BIT(0), 1709 + .hw.init = &(struct clk_init_data){ 1710 + .name = "gcc_mss_cfg_ahb_clk", 1711 + .ops = &clk_branch2_ops, 1712 + }, 1713 + }, 1714 + }; 1715 + 1716 + static struct clk_branch gcc_mss_mnoc_bimc_axi_clk = { 1717 + .halt_reg = 0x8a004, 1718 + .clkr = { 1719 + .enable_reg = 0x8a004, 1720 + .enable_mask = BIT(0), 1721 + .hw.init = &(struct clk_init_data){ 1722 + .name = "gcc_mss_mnoc_bimc_axi_clk", 1723 + .ops = &clk_branch2_ops, 1724 + }, 1725 + }, 1726 + }; 1727 + 1728 + static struct clk_branch gcc_mss_q6_bimc_axi_clk = { 1729 + .halt_reg = 0x8a040, 1730 + .clkr = { 1731 + .enable_reg = 0x8a040, 1732 + .enable_mask = BIT(0), 1733 + .hw.init = &(struct clk_init_data){ 1734 + .name = "gcc_mss_q6_bimc_axi_clk", 1735 + .ops = &clk_branch2_ops, 1736 + }, 1737 + }, 1738 + }; 1739 + 1740 + static struct clk_branch gcc_mss_snoc_axi_clk = { 1741 + .halt_reg = 0x8a03c, 1742 + .clkr = { 1743 + .enable_reg = 0x8a03c, 1744 + .enable_mask = BIT(0), 1745 + .hw.init = &(struct clk_init_data){ 1746 + .name = "gcc_mss_snoc_axi_clk", 1747 + .ops = &clk_branch2_ops, 1748 + }, 1749 + }, 1750 + }; 1751 + 1752 + static struct clk_branch gcc_pdm2_clk = { 1753 + .halt_reg = 0x3300c, 1754 + .halt_check = BRANCH_HALT, 1755 + .clkr = { 1756 + .enable_reg = 0x3300c, 1757 + .enable_mask = BIT(0), 1758 + .hw.init = &(struct clk_init_data){ 1759 + .name = "gcc_pdm2_clk", 1760 + .parent_names = (const char *[]){ 1761 + "pdm2_clk_src", 1762 + }, 1763 + .num_parents = 1, 1764 + .flags = CLK_SET_RATE_PARENT, 1765 + .ops = &clk_branch2_ops, 1766 + }, 1767 + }, 1768 + }; 1769 + 1770 + static struct clk_branch gcc_pdm_ahb_clk = { 1771 + .halt_reg = 0x33004, 1772 + .halt_check = BRANCH_HALT, 1773 + .clkr = { 1774 + .enable_reg = 0x33004, 1775 + .enable_mask = BIT(0), 1776 + .hw.init = &(struct clk_init_data){ 1777 + .name = "gcc_pdm_ahb_clk", 1778 + .ops = &clk_branch2_ops, 1779 + }, 1780 + }, 1781 + }; 1782 + 1783 + static struct clk_branch gcc_prng_ahb_clk = { 1784 + .halt_reg = 0x34004, 1785 + .halt_check = BRANCH_HALT_VOTED, 1786 + .clkr = { 1787 + .enable_reg = 0x52004, 1788 + .enable_mask = BIT(13), 1789 + .hw.init = &(struct clk_init_data){ 1790 + .name = "gcc_prng_ahb_clk", 1791 + .ops = &clk_branch2_ops, 1792 + }, 1793 + }, 1794 + }; 1795 + 1796 + static struct clk_branch gcc_qspi_ahb_clk = { 1797 + .halt_reg = 0x4d004, 1798 + .halt_check = BRANCH_HALT, 1799 + .clkr = { 1800 + .enable_reg = 0x4d004, 1801 + .enable_mask = BIT(0), 1802 + .hw.init = &(struct clk_init_data){ 1803 + .name = "gcc_qspi_ahb_clk", 1804 + .ops = &clk_branch2_ops, 1805 + }, 1806 + }, 1807 + }; 1808 + 1809 + static struct clk_branch gcc_qspi_ser_clk = { 1810 + .halt_reg = 0x4d008, 1811 + .halt_check = BRANCH_HALT, 1812 + .clkr = { 1813 + .enable_reg = 0x4d008, 1814 + .enable_mask = BIT(0), 1815 + .hw.init = &(struct clk_init_data){ 1816 + .name = "gcc_qspi_ser_clk", 1817 + .parent_names = (const char *[]){ 1818 + "qspi_ser_clk_src", 1819 + }, 1820 + .num_parents = 1, 1821 + .flags = CLK_SET_RATE_PARENT, 1822 + .ops = &clk_branch2_ops, 1823 + }, 1824 + }, 1825 + }; 1826 + 1827 + static struct clk_branch gcc_rx0_usb2_clkref_clk = { 1828 + .halt_reg = 0x88018, 1829 + .halt_check = BRANCH_HALT_VOTED, 1830 + .clkr = { 1831 + .enable_reg = 0x88018, 1832 + .enable_mask = BIT(0), 1833 + .hw.init = &(struct clk_init_data){ 1834 + .name = "gcc_rx0_usb2_clkref_clk", 1835 + .ops = &clk_branch2_ops, 1836 + }, 1837 + }, 1838 + }; 1839 + 1840 + static struct clk_branch gcc_rx1_usb2_clkref_clk = { 1841 + .halt_reg = 0x88014, 1842 + .halt_check = BRANCH_HALT_VOTED, 1843 + .clkr = { 1844 + .enable_reg = 0x88014, 1845 + .enable_mask = BIT(0), 1846 + .hw.init = &(struct clk_init_data){ 1847 + .name = "gcc_rx1_usb2_clkref_clk", 1848 + .ops = &clk_branch2_ops, 1849 + }, 1850 + }, 1851 + }; 1852 + 1853 + static struct clk_branch gcc_sdcc1_ahb_clk = { 1854 + .halt_reg = 0x16008, 1855 + .halt_check = BRANCH_HALT, 1856 + .clkr = { 1857 + .enable_reg = 0x16008, 1858 + .enable_mask = BIT(0), 1859 + .hw.init = &(struct clk_init_data){ 1860 + .name = "gcc_sdcc1_ahb_clk", 1861 + .ops = &clk_branch2_ops, 1862 + }, 1863 + }, 1864 + }; 1865 + 1866 + static struct clk_branch gcc_sdcc1_apps_clk = { 1867 + .halt_reg = 0x16004, 1868 + .halt_check = BRANCH_HALT, 1869 + .clkr = { 1870 + .enable_reg = 0x16004, 1871 + .enable_mask = BIT(0), 1872 + .hw.init = &(struct clk_init_data){ 1873 + .name = "gcc_sdcc1_apps_clk", 1874 + .parent_names = (const char *[]){ 1875 + "sdcc1_apps_clk_src", 1876 + }, 1877 + .num_parents = 1, 1878 + .flags = CLK_SET_RATE_PARENT, 1879 + .ops = &clk_branch2_ops, 1880 + }, 1881 + }, 1882 + }; 1883 + 1884 + static struct clk_branch gcc_sdcc1_ice_core_clk = { 1885 + .halt_reg = 0x1600c, 1886 + .halt_check = BRANCH_HALT, 1887 + .clkr = { 1888 + .enable_reg = 0x1600c, 1889 + .enable_mask = BIT(0), 1890 + .hw.init = &(struct clk_init_data){ 1891 + .name = "gcc_sdcc1_ice_core_clk", 1892 + .parent_names = (const char *[]){ 1893 + "sdcc1_ice_core_clk_src", 1894 + }, 1895 + .num_parents = 1, 1896 + .flags = CLK_SET_RATE_PARENT, 1897 + .ops = &clk_branch2_ops, 1898 + }, 1899 + }, 1900 + }; 1901 + 1902 + static struct clk_branch gcc_sdcc2_ahb_clk = { 1903 + .halt_reg = 0x14008, 1904 + .halt_check = BRANCH_HALT, 1905 + .clkr = { 1906 + .enable_reg = 0x14008, 1907 + .enable_mask = BIT(0), 1908 + .hw.init = &(struct clk_init_data){ 1909 + .name = "gcc_sdcc2_ahb_clk", 1910 + .ops = &clk_branch2_ops, 1911 + }, 1912 + }, 1913 + }; 1914 + 1915 + static struct clk_branch gcc_sdcc2_apps_clk = { 1916 + .halt_reg = 0x14004, 1917 + .halt_check = BRANCH_HALT, 1918 + .clkr = { 1919 + .enable_reg = 0x14004, 1920 + .enable_mask = BIT(0), 1921 + .hw.init = &(struct clk_init_data){ 1922 + .name = "gcc_sdcc2_apps_clk", 1923 + .parent_names = (const char *[]){ 1924 + "sdcc2_apps_clk_src", 1925 + }, 1926 + .num_parents = 1, 1927 + .flags = CLK_SET_RATE_PARENT, 1928 + .ops = &clk_branch2_ops, 1929 + }, 1930 + }, 1931 + }; 1932 + 1933 + static struct clk_branch gcc_ufs_ahb_clk = { 1934 + .halt_reg = 0x7500c, 1935 + .halt_check = BRANCH_HALT, 1936 + .clkr = { 1937 + .enable_reg = 0x7500c, 1938 + .enable_mask = BIT(0), 1939 + .hw.init = &(struct clk_init_data){ 1940 + .name = "gcc_ufs_ahb_clk", 1941 + .ops = &clk_branch2_ops, 1942 + }, 1943 + }, 1944 + }; 1945 + 1946 + static struct clk_branch gcc_ufs_axi_clk = { 1947 + .halt_reg = 0x75008, 1948 + .halt_check = BRANCH_HALT, 1949 + .clkr = { 1950 + .enable_reg = 0x75008, 1951 + .enable_mask = BIT(0), 1952 + .hw.init = &(struct clk_init_data){ 1953 + .name = "gcc_ufs_axi_clk", 1954 + .parent_names = (const char *[]){ 1955 + "ufs_axi_clk_src", 1956 + }, 1957 + .num_parents = 1, 1958 + .flags = CLK_SET_RATE_PARENT, 1959 + .ops = &clk_branch2_ops, 1960 + }, 1961 + }, 1962 + }; 1963 + 1964 + static struct clk_branch gcc_ufs_clkref_clk = { 1965 + .halt_reg = 0x88008, 1966 + .halt_check = BRANCH_HALT, 1967 + .clkr = { 1968 + .enable_reg = 0x88008, 1969 + .enable_mask = BIT(0), 1970 + .hw.init = &(struct clk_init_data){ 1971 + .name = "gcc_ufs_clkref_clk", 1972 + .ops = &clk_branch2_ops, 1973 + }, 1974 + }, 1975 + }; 1976 + 1977 + static struct clk_branch gcc_ufs_ice_core_clk = { 1978 + .halt_reg = 0x7600c, 1979 + .halt_check = BRANCH_HALT, 1980 + .clkr = { 1981 + .enable_reg = 0x7600c, 1982 + .enable_mask = BIT(0), 1983 + .hw.init = &(struct clk_init_data){ 1984 + .name = "gcc_ufs_ice_core_clk", 1985 + .parent_names = (const char *[]){ 1986 + "ufs_ice_core_clk_src", 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_ufs_phy_aux_clk = { 1996 + .halt_reg = 0x76040, 1997 + .halt_check = BRANCH_HALT, 1998 + .clkr = { 1999 + .enable_reg = 0x76040, 2000 + .enable_mask = BIT(0), 2001 + .hw.init = &(struct clk_init_data){ 2002 + .name = "gcc_ufs_phy_aux_clk", 2003 + .parent_names = (const char *[]){ 2004 + "ufs_phy_aux_clk_src", 2005 + }, 2006 + .num_parents = 1, 2007 + .flags = CLK_SET_RATE_PARENT, 2008 + .ops = &clk_branch2_ops, 2009 + }, 2010 + }, 2011 + }; 2012 + 2013 + static struct clk_branch gcc_ufs_rx_symbol_0_clk = { 2014 + .halt_reg = 0x75014, 2015 + .halt_check = BRANCH_HALT_SKIP, 2016 + .clkr = { 2017 + .enable_reg = 0x75014, 2018 + .enable_mask = BIT(0), 2019 + .hw.init = &(struct clk_init_data){ 2020 + .name = "gcc_ufs_rx_symbol_0_clk", 2021 + .ops = &clk_branch2_ops, 2022 + }, 2023 + }, 2024 + }; 2025 + 2026 + static struct clk_branch gcc_ufs_rx_symbol_1_clk = { 2027 + .halt_reg = 0x7605c, 2028 + .halt_check = BRANCH_HALT_SKIP, 2029 + .clkr = { 2030 + .enable_reg = 0x7605c, 2031 + .enable_mask = BIT(0), 2032 + .hw.init = &(struct clk_init_data){ 2033 + .name = "gcc_ufs_rx_symbol_1_clk", 2034 + .ops = &clk_branch2_ops, 2035 + }, 2036 + }, 2037 + }; 2038 + 2039 + static struct clk_branch gcc_ufs_tx_symbol_0_clk = { 2040 + .halt_reg = 0x75010, 2041 + .halt_check = BRANCH_HALT_SKIP, 2042 + .clkr = { 2043 + .enable_reg = 0x75010, 2044 + .enable_mask = BIT(0), 2045 + .hw.init = &(struct clk_init_data){ 2046 + .name = "gcc_ufs_tx_symbol_0_clk", 2047 + .ops = &clk_branch2_ops, 2048 + }, 2049 + }, 2050 + }; 2051 + 2052 + static struct clk_branch gcc_ufs_unipro_core_clk = { 2053 + .halt_reg = 0x76008, 2054 + .halt_check = BRANCH_HALT, 2055 + .clkr = { 2056 + .enable_reg = 0x76008, 2057 + .enable_mask = BIT(0), 2058 + .hw.init = &(struct clk_init_data){ 2059 + .name = "gcc_ufs_unipro_core_clk", 2060 + .parent_names = (const char *[]){ 2061 + "ufs_unipro_core_clk_src", 2062 + }, 2063 + .flags = CLK_SET_RATE_PARENT, 2064 + .num_parents = 1, 2065 + .ops = &clk_branch2_ops, 2066 + }, 2067 + }, 2068 + }; 2069 + 2070 + static struct clk_branch gcc_usb20_master_clk = { 2071 + .halt_reg = 0x2f004, 2072 + .halt_check = BRANCH_HALT, 2073 + .clkr = { 2074 + .enable_reg = 0x2f004, 2075 + .enable_mask = BIT(0), 2076 + .hw.init = &(struct clk_init_data){ 2077 + .name = "gcc_usb20_master_clk", 2078 + .parent_names = (const char *[]){ 2079 + "usb20_master_clk_src" 2080 + }, 2081 + .flags = CLK_SET_RATE_PARENT, 2082 + .num_parents = 1, 2083 + .ops = &clk_branch2_ops, 2084 + }, 2085 + }, 2086 + }; 2087 + 2088 + static struct clk_branch gcc_usb20_mock_utmi_clk = { 2089 + .halt_reg = 0x2f00c, 2090 + .halt_check = BRANCH_HALT, 2091 + .clkr = { 2092 + .enable_reg = 0x2f00c, 2093 + .enable_mask = BIT(0), 2094 + .hw.init = &(struct clk_init_data){ 2095 + .name = "gcc_usb20_mock_utmi_clk", 2096 + .parent_names = (const char *[]){ 2097 + "usb20_mock_utmi_clk_src", 2098 + }, 2099 + .num_parents = 1, 2100 + .flags = CLK_SET_RATE_PARENT, 2101 + .ops = &clk_branch2_ops, 2102 + }, 2103 + }, 2104 + }; 2105 + 2106 + static struct clk_branch gcc_usb20_sleep_clk = { 2107 + .halt_reg = 0x2f008, 2108 + .halt_check = BRANCH_HALT, 2109 + .clkr = { 2110 + .enable_reg = 0x2f008, 2111 + .enable_mask = BIT(0), 2112 + .hw.init = &(struct clk_init_data){ 2113 + .name = "gcc_usb20_sleep_clk", 2114 + .ops = &clk_branch2_ops, 2115 + }, 2116 + }, 2117 + }; 2118 + 2119 + static struct clk_branch gcc_usb30_master_clk = { 2120 + .halt_reg = 0xf008, 2121 + .halt_check = BRANCH_HALT, 2122 + .clkr = { 2123 + .enable_reg = 0xf008, 2124 + .enable_mask = BIT(0), 2125 + .hw.init = &(struct clk_init_data){ 2126 + .name = "gcc_usb30_master_clk", 2127 + .parent_names = (const char *[]){ 2128 + "usb30_master_clk_src", 2129 + }, 2130 + .num_parents = 1, 2131 + .flags = CLK_SET_RATE_PARENT, 2132 + .ops = &clk_branch2_ops, 2133 + }, 2134 + }, 2135 + }; 2136 + 2137 + static struct clk_branch gcc_usb30_mock_utmi_clk = { 2138 + .halt_reg = 0xf010, 2139 + .halt_check = BRANCH_HALT, 2140 + .clkr = { 2141 + .enable_reg = 0xf010, 2142 + .enable_mask = BIT(0), 2143 + .hw.init = &(struct clk_init_data){ 2144 + .name = "gcc_usb30_mock_utmi_clk", 2145 + .parent_names = (const char *[]){ 2146 + "usb30_mock_utmi_clk_src", 2147 + }, 2148 + .num_parents = 1, 2149 + .flags = CLK_SET_RATE_PARENT, 2150 + .ops = &clk_branch2_ops, 2151 + }, 2152 + }, 2153 + }; 2154 + 2155 + static struct clk_branch gcc_usb30_sleep_clk = { 2156 + .halt_reg = 0xf00c, 2157 + .halt_check = BRANCH_HALT, 2158 + .clkr = { 2159 + .enable_reg = 0xf00c, 2160 + .enable_mask = BIT(0), 2161 + .hw.init = &(struct clk_init_data){ 2162 + .name = "gcc_usb30_sleep_clk", 2163 + .ops = &clk_branch2_ops, 2164 + }, 2165 + }, 2166 + }; 2167 + 2168 + static struct clk_branch gcc_usb3_clkref_clk = { 2169 + .halt_reg = 0x8800c, 2170 + .halt_check = BRANCH_HALT, 2171 + .clkr = { 2172 + .enable_reg = 0x8800c, 2173 + .enable_mask = BIT(0), 2174 + .hw.init = &(struct clk_init_data){ 2175 + .name = "gcc_usb3_clkref_clk", 2176 + .ops = &clk_branch2_ops, 2177 + }, 2178 + }, 2179 + }; 2180 + 2181 + static struct clk_branch gcc_usb3_phy_aux_clk = { 2182 + .halt_reg = 0x50000, 2183 + .halt_check = BRANCH_HALT, 2184 + .clkr = { 2185 + .enable_reg = 0x50000, 2186 + .enable_mask = BIT(0), 2187 + .hw.init = &(struct clk_init_data){ 2188 + .name = "gcc_usb3_phy_aux_clk", 2189 + .parent_names = (const char *[]){ 2190 + "usb3_phy_aux_clk_src", 2191 + }, 2192 + .num_parents = 1, 2193 + .flags = CLK_SET_RATE_PARENT, 2194 + .ops = &clk_branch2_ops, 2195 + }, 2196 + }, 2197 + }; 2198 + 2199 + static struct clk_branch gcc_usb3_phy_pipe_clk = { 2200 + .halt_reg = 0x50004, 2201 + .halt_check = BRANCH_HALT_DELAY, 2202 + .clkr = { 2203 + .enable_reg = 0x50004, 2204 + .enable_mask = BIT(0), 2205 + .hw.init = &(struct clk_init_data){ 2206 + .name = "gcc_usb3_phy_pipe_clk", 2207 + .ops = &clk_branch2_ops, 2208 + }, 2209 + }, 2210 + }; 2211 + 2212 + static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = { 2213 + .halt_reg = 0x6a004, 2214 + .halt_check = BRANCH_HALT, 2215 + .clkr = { 2216 + .enable_reg = 0x6a004, 2217 + .enable_mask = BIT(0), 2218 + .hw.init = &(struct clk_init_data){ 2219 + .name = "gcc_usb_phy_cfg_ahb2phy_clk", 2220 + .ops = &clk_branch2_ops, 2221 + }, 2222 + }, 2223 + }; 2224 + 2225 + static struct gdsc ufs_gdsc = { 2226 + .gdscr = 0x75004, 2227 + .gds_hw_ctrl = 0x0, 2228 + .pd = { 2229 + .name = "ufs_gdsc", 2230 + }, 2231 + .pwrsts = PWRSTS_OFF_ON, 2232 + .flags = VOTABLE, 2233 + }; 2234 + 2235 + static struct gdsc usb_30_gdsc = { 2236 + .gdscr = 0xf004, 2237 + .gds_hw_ctrl = 0x0, 2238 + .pd = { 2239 + .name = "usb_30_gdsc", 2240 + }, 2241 + .pwrsts = PWRSTS_OFF_ON, 2242 + .flags = VOTABLE, 2243 + }; 2244 + 2245 + static struct gdsc pcie_0_gdsc = { 2246 + .gdscr = 0x6b004, 2247 + .gds_hw_ctrl = 0x0, 2248 + .pd = { 2249 + .name = "pcie_0_gdsc", 2250 + }, 2251 + .pwrsts = PWRSTS_OFF_ON, 2252 + .flags = VOTABLE, 2253 + }; 2254 + 2255 + static struct clk_hw *gcc_sdm660_hws[] = { 2256 + &xo.hw, 2257 + &gpll0_early_div.hw, 2258 + &gpll1_early_div.hw, 2259 + }; 2260 + 2261 + static struct clk_regmap *gcc_sdm660_clocks[] = { 2262 + [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr, 2263 + [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr, 2264 + [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr, 2265 + [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr, 2266 + [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr, 2267 + [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr, 2268 + [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr, 2269 + [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr, 2270 + [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr, 2271 + [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr, 2272 + [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr, 2273 + [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr, 2274 + [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr, 2275 + [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr, 2276 + [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr, 2277 + [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr, 2278 + [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr, 2279 + [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr, 2280 + [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr, 2281 + [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr, 2282 + [GCC_AGGRE2_UFS_AXI_CLK] = &gcc_aggre2_ufs_axi_clk.clkr, 2283 + [GCC_AGGRE2_USB3_AXI_CLK] = &gcc_aggre2_usb3_axi_clk.clkr, 2284 + [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr, 2285 + [GCC_BIMC_HMSS_AXI_CLK] = &gcc_bimc_hmss_axi_clk.clkr, 2286 + [GCC_BIMC_MSS_Q6_AXI_CLK] = &gcc_bimc_mss_q6_axi_clk.clkr, 2287 + [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr, 2288 + [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr, 2289 + [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr, 2290 + [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr, 2291 + [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr, 2292 + [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr, 2293 + [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr, 2294 + [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr, 2295 + [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr, 2296 + [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr, 2297 + [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr, 2298 + [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr, 2299 + [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr, 2300 + [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr, 2301 + [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr, 2302 + [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr, 2303 + [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr, 2304 + [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr, 2305 + [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr, 2306 + [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr, 2307 + [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr, 2308 + [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr, 2309 + [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 2310 + [GCC_CFG_NOC_USB2_AXI_CLK] = &gcc_cfg_noc_usb2_axi_clk.clkr, 2311 + [GCC_CFG_NOC_USB3_AXI_CLK] = &gcc_cfg_noc_usb3_axi_clk.clkr, 2312 + [GCC_DCC_AHB_CLK] = &gcc_dcc_ahb_clk.clkr, 2313 + [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 2314 + [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 2315 + [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 2316 + [GCC_GPU_BIMC_GFX_CLK] = &gcc_gpu_bimc_gfx_clk.clkr, 2317 + [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr, 2318 + [GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr, 2319 + [GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr, 2320 + [GCC_HMSS_DVM_BUS_CLK] = &gcc_hmss_dvm_bus_clk.clkr, 2321 + [GCC_HMSS_RBCPR_CLK] = &gcc_hmss_rbcpr_clk.clkr, 2322 + [GCC_MMSS_GPLL0_CLK] = &gcc_mmss_gpll0_clk.clkr, 2323 + [GCC_MMSS_GPLL0_DIV_CLK] = &gcc_mmss_gpll0_div_clk.clkr, 2324 + [GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr, 2325 + [GCC_MMSS_SYS_NOC_AXI_CLK] = &gcc_mmss_sys_noc_axi_clk.clkr, 2326 + [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr, 2327 + [GCC_MSS_MNOC_BIMC_AXI_CLK] = &gcc_mss_mnoc_bimc_axi_clk.clkr, 2328 + [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr, 2329 + [GCC_MSS_SNOC_AXI_CLK] = &gcc_mss_snoc_axi_clk.clkr, 2330 + [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 2331 + [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 2332 + [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 2333 + [GCC_QSPI_AHB_CLK] = &gcc_qspi_ahb_clk.clkr, 2334 + [GCC_QSPI_SER_CLK] = &gcc_qspi_ser_clk.clkr, 2335 + [GCC_RX0_USB2_CLKREF_CLK] = &gcc_rx0_usb2_clkref_clk.clkr, 2336 + [GCC_RX1_USB2_CLKREF_CLK] = &gcc_rx1_usb2_clkref_clk.clkr, 2337 + [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 2338 + [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 2339 + [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr, 2340 + [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 2341 + [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 2342 + [GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr, 2343 + [GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr, 2344 + [GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr, 2345 + [GCC_UFS_ICE_CORE_CLK] = &gcc_ufs_ice_core_clk.clkr, 2346 + [GCC_UFS_PHY_AUX_CLK] = &gcc_ufs_phy_aux_clk.clkr, 2347 + [GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr, 2348 + [GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr, 2349 + [GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr, 2350 + [GCC_UFS_UNIPRO_CORE_CLK] = &gcc_ufs_unipro_core_clk.clkr, 2351 + [GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr, 2352 + [GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr, 2353 + [GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr, 2354 + [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr, 2355 + [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr, 2356 + [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr, 2357 + [GCC_USB3_CLKREF_CLK] = &gcc_usb3_clkref_clk.clkr, 2358 + [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr, 2359 + [GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr, 2360 + [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr, 2361 + [GP1_CLK_SRC] = &gp1_clk_src.clkr, 2362 + [GP2_CLK_SRC] = &gp2_clk_src.clkr, 2363 + [GP3_CLK_SRC] = &gp3_clk_src.clkr, 2364 + [GPLL0] = &gpll0.clkr, 2365 + [GPLL0_EARLY] = &gpll0_early.clkr, 2366 + [GPLL1] = &gpll1.clkr, 2367 + [GPLL1_EARLY] = &gpll1_early.clkr, 2368 + [GPLL4] = &gpll4.clkr, 2369 + [GPLL4_EARLY] = &gpll4_early.clkr, 2370 + [HMSS_GPLL0_CLK_SRC] = &hmss_gpll0_clk_src.clkr, 2371 + [HMSS_GPLL4_CLK_SRC] = &hmss_gpll4_clk_src.clkr, 2372 + [HMSS_RBCPR_CLK_SRC] = &hmss_rbcpr_clk_src.clkr, 2373 + [PDM2_CLK_SRC] = &pdm2_clk_src.clkr, 2374 + [QSPI_SER_CLK_SRC] = &qspi_ser_clk_src.clkr, 2375 + [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr, 2376 + [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr, 2377 + [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr, 2378 + [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr, 2379 + [UFS_ICE_CORE_CLK_SRC] = &ufs_ice_core_clk_src.clkr, 2380 + [UFS_PHY_AUX_CLK_SRC] = &ufs_phy_aux_clk_src.clkr, 2381 + [UFS_UNIPRO_CORE_CLK_SRC] = &ufs_unipro_core_clk_src.clkr, 2382 + [USB20_MASTER_CLK_SRC] = &usb20_master_clk_src.clkr, 2383 + [USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr, 2384 + [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr, 2385 + [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr, 2386 + [USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr, 2387 + }; 2388 + 2389 + static struct gdsc *gcc_sdm660_gdscs[] = { 2390 + [UFS_GDSC] = &ufs_gdsc, 2391 + [USB_30_GDSC] = &usb_30_gdsc, 2392 + [PCIE_0_GDSC] = &pcie_0_gdsc, 2393 + }; 2394 + 2395 + static const struct qcom_reset_map gcc_sdm660_resets[] = { 2396 + [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 }, 2397 + [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 }, 2398 + [GCC_UFS_BCR] = { 0x75000 }, 2399 + [GCC_USB3_DP_PHY_BCR] = { 0x50028 }, 2400 + [GCC_USB3_PHY_BCR] = { 0x50020 }, 2401 + [GCC_USB3PHY_PHY_BCR] = { 0x50024 }, 2402 + [GCC_USB_20_BCR] = { 0x2f000 }, 2403 + [GCC_USB_30_BCR] = { 0xf000 }, 2404 + [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 }, 2405 + }; 2406 + 2407 + static const struct regmap_config gcc_sdm660_regmap_config = { 2408 + .reg_bits = 32, 2409 + .reg_stride = 4, 2410 + .val_bits = 32, 2411 + .max_register = 0x94000, 2412 + .fast_io = true, 2413 + }; 2414 + 2415 + static const struct qcom_cc_desc gcc_sdm660_desc = { 2416 + .config = &gcc_sdm660_regmap_config, 2417 + .clks = gcc_sdm660_clocks, 2418 + .num_clks = ARRAY_SIZE(gcc_sdm660_clocks), 2419 + .resets = gcc_sdm660_resets, 2420 + .num_resets = ARRAY_SIZE(gcc_sdm660_resets), 2421 + .gdscs = gcc_sdm660_gdscs, 2422 + .num_gdscs = ARRAY_SIZE(gcc_sdm660_gdscs), 2423 + }; 2424 + 2425 + static const struct of_device_id gcc_sdm660_match_table[] = { 2426 + { .compatible = "qcom,gcc-sdm630" }, 2427 + { .compatible = "qcom,gcc-sdm660" }, 2428 + { } 2429 + }; 2430 + MODULE_DEVICE_TABLE(of, gcc_sdm660_match_table); 2431 + 2432 + static int gcc_sdm660_probe(struct platform_device *pdev) 2433 + { 2434 + int i, ret; 2435 + struct regmap *regmap; 2436 + 2437 + regmap = qcom_cc_map(pdev, &gcc_sdm660_desc); 2438 + if (IS_ERR(regmap)) 2439 + return PTR_ERR(regmap); 2440 + 2441 + /* 2442 + * Set the HMSS_AHB_CLK_SLEEP_ENA bit to allow the hmss_ahb_clk to be 2443 + * turned off by hardware during certain apps low power modes. 2444 + */ 2445 + ret = regmap_update_bits(regmap, 0x52008, BIT(21), BIT(21)); 2446 + if (ret) 2447 + return ret; 2448 + 2449 + /* Register the hws */ 2450 + for (i = 0; i < ARRAY_SIZE(gcc_sdm660_hws); i++) { 2451 + ret = devm_clk_hw_register(&pdev->dev, gcc_sdm660_hws[i]); 2452 + if (ret) 2453 + return ret; 2454 + } 2455 + 2456 + return qcom_cc_really_probe(pdev, &gcc_sdm660_desc, regmap); 2457 + } 2458 + 2459 + static struct platform_driver gcc_sdm660_driver = { 2460 + .probe = gcc_sdm660_probe, 2461 + .driver = { 2462 + .name = "gcc-sdm660", 2463 + .of_match_table = gcc_sdm660_match_table, 2464 + }, 2465 + }; 2466 + 2467 + static int __init gcc_sdm660_init(void) 2468 + { 2469 + return platform_driver_register(&gcc_sdm660_driver); 2470 + } 2471 + core_initcall_sync(gcc_sdm660_init); 2472 + 2473 + static void __exit gcc_sdm660_exit(void) 2474 + { 2475 + platform_driver_unregister(&gcc_sdm660_driver); 2476 + } 2477 + module_exit(gcc_sdm660_exit); 2478 + 2479 + MODULE_DESCRIPTION("QCOM GCC sdm660 Driver");
+156
include/dt-bindings/clock/qcom,gcc-sdm660.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 */ 2 + /* 3 + * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. 4 + * Copyright (c) 2018, Craig Tatlor. 5 + */ 6 + 7 + #ifndef _DT_BINDINGS_CLK_MSM_GCC_660_H 8 + #define _DT_BINDINGS_CLK_MSM_GCC_660_H 9 + 10 + #define BLSP1_QUP1_I2C_APPS_CLK_SRC 0 11 + #define BLSP1_QUP1_SPI_APPS_CLK_SRC 1 12 + #define BLSP1_QUP2_I2C_APPS_CLK_SRC 2 13 + #define BLSP1_QUP2_SPI_APPS_CLK_SRC 3 14 + #define BLSP1_QUP3_I2C_APPS_CLK_SRC 4 15 + #define BLSP1_QUP3_SPI_APPS_CLK_SRC 5 16 + #define BLSP1_QUP4_I2C_APPS_CLK_SRC 6 17 + #define BLSP1_QUP4_SPI_APPS_CLK_SRC 7 18 + #define BLSP1_UART1_APPS_CLK_SRC 8 19 + #define BLSP1_UART2_APPS_CLK_SRC 9 20 + #define BLSP2_QUP1_I2C_APPS_CLK_SRC 10 21 + #define BLSP2_QUP1_SPI_APPS_CLK_SRC 11 22 + #define BLSP2_QUP2_I2C_APPS_CLK_SRC 12 23 + #define BLSP2_QUP2_SPI_APPS_CLK_SRC 13 24 + #define BLSP2_QUP3_I2C_APPS_CLK_SRC 14 25 + #define BLSP2_QUP3_SPI_APPS_CLK_SRC 15 26 + #define BLSP2_QUP4_I2C_APPS_CLK_SRC 16 27 + #define BLSP2_QUP4_SPI_APPS_CLK_SRC 17 28 + #define BLSP2_UART1_APPS_CLK_SRC 18 29 + #define BLSP2_UART2_APPS_CLK_SRC 19 30 + #define GCC_AGGRE2_UFS_AXI_CLK 20 31 + #define GCC_AGGRE2_USB3_AXI_CLK 21 32 + #define GCC_BIMC_GFX_CLK 22 33 + #define GCC_BIMC_HMSS_AXI_CLK 23 34 + #define GCC_BIMC_MSS_Q6_AXI_CLK 24 35 + #define GCC_BLSP1_AHB_CLK 25 36 + #define GCC_BLSP1_QUP1_I2C_APPS_CLK 26 37 + #define GCC_BLSP1_QUP1_SPI_APPS_CLK 27 38 + #define GCC_BLSP1_QUP2_I2C_APPS_CLK 28 39 + #define GCC_BLSP1_QUP2_SPI_APPS_CLK 29 40 + #define GCC_BLSP1_QUP3_I2C_APPS_CLK 30 41 + #define GCC_BLSP1_QUP3_SPI_APPS_CLK 31 42 + #define GCC_BLSP1_QUP4_I2C_APPS_CLK 32 43 + #define GCC_BLSP1_QUP4_SPI_APPS_CLK 33 44 + #define GCC_BLSP1_UART1_APPS_CLK 34 45 + #define GCC_BLSP1_UART2_APPS_CLK 35 46 + #define GCC_BLSP2_AHB_CLK 36 47 + #define GCC_BLSP2_QUP1_I2C_APPS_CLK 37 48 + #define GCC_BLSP2_QUP1_SPI_APPS_CLK 38 49 + #define GCC_BLSP2_QUP2_I2C_APPS_CLK 39 50 + #define GCC_BLSP2_QUP2_SPI_APPS_CLK 40 51 + #define GCC_BLSP2_QUP3_I2C_APPS_CLK 41 52 + #define GCC_BLSP2_QUP3_SPI_APPS_CLK 42 53 + #define GCC_BLSP2_QUP4_I2C_APPS_CLK 43 54 + #define GCC_BLSP2_QUP4_SPI_APPS_CLK 44 55 + #define GCC_BLSP2_UART1_APPS_CLK 45 56 + #define GCC_BLSP2_UART2_APPS_CLK 46 57 + #define GCC_BOOT_ROM_AHB_CLK 47 58 + #define GCC_CFG_NOC_USB2_AXI_CLK 48 59 + #define GCC_CFG_NOC_USB3_AXI_CLK 49 60 + #define GCC_DCC_AHB_CLK 50 61 + #define GCC_GP1_CLK 51 62 + #define GCC_GP2_CLK 52 63 + #define GCC_GP3_CLK 53 64 + #define GCC_GPU_BIMC_GFX_CLK 54 65 + #define GCC_GPU_CFG_AHB_CLK 55 66 + #define GCC_GPU_GPLL0_CLK 56 67 + #define GCC_GPU_GPLL0_DIV_CLK 57 68 + #define GCC_HMSS_DVM_BUS_CLK 58 69 + #define GCC_HMSS_RBCPR_CLK 59 70 + #define GCC_MMSS_GPLL0_CLK 60 71 + #define GCC_MMSS_GPLL0_DIV_CLK 61 72 + #define GCC_MMSS_NOC_CFG_AHB_CLK 62 73 + #define GCC_MMSS_SYS_NOC_AXI_CLK 63 74 + #define GCC_MSS_CFG_AHB_CLK 64 75 + #define GCC_MSS_GPLL0_DIV_CLK 65 76 + #define GCC_MSS_MNOC_BIMC_AXI_CLK 66 77 + #define GCC_MSS_Q6_BIMC_AXI_CLK 67 78 + #define GCC_MSS_SNOC_AXI_CLK 68 79 + #define GCC_PDM2_CLK 69 80 + #define GCC_PDM_AHB_CLK 70 81 + #define GCC_PRNG_AHB_CLK 71 82 + #define GCC_QSPI_AHB_CLK 72 83 + #define GCC_QSPI_SER_CLK 73 84 + #define GCC_SDCC1_AHB_CLK 74 85 + #define GCC_SDCC1_APPS_CLK 75 86 + #define GCC_SDCC1_ICE_CORE_CLK 76 87 + #define GCC_SDCC2_AHB_CLK 77 88 + #define GCC_SDCC2_APPS_CLK 78 89 + #define GCC_UFS_AHB_CLK 79 90 + #define GCC_UFS_AXI_CLK 80 91 + #define GCC_UFS_CLKREF_CLK 81 92 + #define GCC_UFS_ICE_CORE_CLK 82 93 + #define GCC_UFS_PHY_AUX_CLK 83 94 + #define GCC_UFS_RX_SYMBOL_0_CLK 84 95 + #define GCC_UFS_RX_SYMBOL_1_CLK 85 96 + #define GCC_UFS_TX_SYMBOL_0_CLK 86 97 + #define GCC_UFS_UNIPRO_CORE_CLK 87 98 + #define GCC_USB20_MASTER_CLK 88 99 + #define GCC_USB20_MOCK_UTMI_CLK 89 100 + #define GCC_USB20_SLEEP_CLK 90 101 + #define GCC_USB30_MASTER_CLK 91 102 + #define GCC_USB30_MOCK_UTMI_CLK 92 103 + #define GCC_USB30_SLEEP_CLK 93 104 + #define GCC_USB3_CLKREF_CLK 94 105 + #define GCC_USB3_PHY_AUX_CLK 95 106 + #define GCC_USB3_PHY_PIPE_CLK 96 107 + #define GCC_USB_PHY_CFG_AHB2PHY_CLK 97 108 + #define GP1_CLK_SRC 98 109 + #define GP2_CLK_SRC 99 110 + #define GP3_CLK_SRC 100 111 + #define GPLL0 101 112 + #define GPLL0_EARLY 102 113 + #define GPLL1 103 114 + #define GPLL1_EARLY 104 115 + #define GPLL4 105 116 + #define GPLL4_EARLY 106 117 + #define HMSS_GPLL0_CLK_SRC 107 118 + #define HMSS_GPLL4_CLK_SRC 108 119 + #define HMSS_RBCPR_CLK_SRC 109 120 + #define PDM2_CLK_SRC 110 121 + #define QSPI_SER_CLK_SRC 111 122 + #define SDCC1_APPS_CLK_SRC 112 123 + #define SDCC1_ICE_CORE_CLK_SRC 113 124 + #define SDCC2_APPS_CLK_SRC 114 125 + #define UFS_AXI_CLK_SRC 115 126 + #define UFS_ICE_CORE_CLK_SRC 116 127 + #define UFS_PHY_AUX_CLK_SRC 117 128 + #define UFS_UNIPRO_CORE_CLK_SRC 118 129 + #define USB20_MASTER_CLK_SRC 119 130 + #define USB20_MOCK_UTMI_CLK_SRC 120 131 + #define USB30_MASTER_CLK_SRC 121 132 + #define USB30_MOCK_UTMI_CLK_SRC 122 133 + #define USB3_PHY_AUX_CLK_SRC 123 134 + #define GPLL0_OUT_MSSCC 124 135 + #define GCC_UFS_AXI_HW_CTL_CLK 125 136 + #define GCC_UFS_ICE_CORE_HW_CTL_CLK 126 137 + #define GCC_UFS_PHY_AUX_HW_CTL_CLK 127 138 + #define GCC_UFS_UNIPRO_CORE_HW_CTL_CLK 128 139 + #define GCC_RX0_USB2_CLKREF_CLK 129 140 + #define GCC_RX1_USB2_CLKREF_CLK 130 141 + 142 + #define PCIE_0_GDSC 0 143 + #define UFS_GDSC 1 144 + #define USB_30_GDSC 2 145 + 146 + #define GCC_QUSB2PHY_PRIM_BCR 0 147 + #define GCC_QUSB2PHY_SEC_BCR 1 148 + #define GCC_UFS_BCR 2 149 + #define GCC_USB3_DP_PHY_BCR 3 150 + #define GCC_USB3_PHY_BCR 4 151 + #define GCC_USB3PHY_PHY_BCR 5 152 + #define GCC_USB_20_BCR 6 153 + #define GCC_USB_30_BCR 7 154 + #define GCC_USB_PHY_CFG_AHB2PHY_BCR 8 155 + 156 + #endif