3542 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Copyright (c) 2019-2021, The Linux Foundation. All rights reserved.4 */5 6#include <linux/err.h>7#include <linux/kernel.h>8#include <linux/module.h>9#include <linux/of.h>10#include <linux/platform_device.h>11#include <linux/clk-provider.h>12#include <linux/regmap.h>13#include <linux/reset-controller.h>14 15#include <dt-bindings/clock/qcom,gcc-sm6115.h>16 17#include "clk-alpha-pll.h"18#include "clk-branch.h"19#include "clk-pll.h"20#include "clk-rcg.h"21#include "clk-regmap.h"22#include "clk-regmap-divider.h"23#include "common.h"24#include "gdsc.h"25#include "reset.h"26 27enum {28 P_BI_TCXO,29 P_GPLL0_OUT_AUX2,30 P_GPLL0_OUT_EARLY,31 P_GPLL10_OUT_MAIN,32 P_GPLL11_OUT_MAIN,33 P_GPLL3_OUT_EARLY,34 P_GPLL4_OUT_MAIN,35 P_GPLL6_OUT_EARLY,36 P_GPLL6_OUT_MAIN,37 P_GPLL7_OUT_MAIN,38 P_GPLL8_OUT_EARLY,39 P_GPLL8_OUT_MAIN,40 P_GPLL9_OUT_EARLY,41 P_GPLL9_OUT_MAIN,42 P_SLEEP_CLK,43};44 45static const struct pll_vco default_vco[] = {46 { 500000000, 1000000000, 2 },47};48 49static const struct pll_vco gpll9_vco[] = {50 { 500000000, 1250000000, 0 },51};52 53static const struct pll_vco gpll10_vco[] = {54 { 750000000, 1500000000, 1 },55};56 57static struct clk_alpha_pll gpll0 = {58 .offset = 0x0,59 .vco_table = default_vco,60 .num_vco = ARRAY_SIZE(default_vco),61 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],62 .clkr = {63 .enable_reg = 0x79000,64 .enable_mask = BIT(0),65 .hw.init = &(struct clk_init_data){66 .name = "gpll0",67 .parent_data = &(const struct clk_parent_data){68 .fw_name = "bi_tcxo",69 },70 .num_parents = 1,71 .ops = &clk_alpha_pll_ops,72 },73 },74};75 76static const struct clk_div_table post_div_table_gpll0_out_aux2[] = {77 { 0x1, 2 },78 { }79};80 81static struct clk_alpha_pll_postdiv gpll0_out_aux2 = {82 .offset = 0x0,83 .post_div_shift = 8,84 .post_div_table = post_div_table_gpll0_out_aux2,85 .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_aux2),86 .width = 4,87 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],88 .clkr.hw.init = &(struct clk_init_data){89 .name = "gpll0_out_aux2",90 .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },91 .num_parents = 1,92 .ops = &clk_alpha_pll_postdiv_ro_ops,93 },94};95 96static const struct clk_div_table post_div_table_gpll0_out_main[] = {97 { 0x0, 1 },98 { }99};100 101static struct clk_alpha_pll_postdiv gpll0_out_main = {102 .offset = 0x0,103 .post_div_shift = 8,104 .post_div_table = post_div_table_gpll0_out_main,105 .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_main),106 .width = 4,107 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],108 .clkr.hw.init = &(struct clk_init_data){109 .name = "gpll0_out_main",110 .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },111 .num_parents = 1,112 .ops = &clk_alpha_pll_postdiv_ro_ops,113 },114};115 116/* 1152MHz configuration */117static const struct alpha_pll_config gpll10_config = {118 .l = 0x3c,119 .vco_val = 0x1 << 20,120 .vco_mask = GENMASK(21, 20),121 .main_output_mask = BIT(0),122 .config_ctl_val = 0x4001055b,123 .test_ctl_hi1_val = 0x1,124 .test_ctl_hi_mask = 0x1,125};126 127static struct clk_alpha_pll gpll10 = {128 .offset = 0xa000,129 .vco_table = gpll10_vco,130 .num_vco = ARRAY_SIZE(gpll10_vco),131 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],132 .clkr = {133 .enable_reg = 0x79000,134 .enable_mask = BIT(10),135 .hw.init = &(struct clk_init_data){136 .name = "gpll10",137 .parent_data = &(const struct clk_parent_data){138 .fw_name = "bi_tcxo",139 },140 .num_parents = 1,141 .ops = &clk_alpha_pll_ops,142 },143 },144};145 146static const struct clk_div_table post_div_table_gpll10_out_main[] = {147 { 0x0, 1 },148 { }149};150 151static struct clk_alpha_pll_postdiv gpll10_out_main = {152 .offset = 0xa000,153 .post_div_shift = 8,154 .post_div_table = post_div_table_gpll10_out_main,155 .num_post_div = ARRAY_SIZE(post_div_table_gpll10_out_main),156 .width = 4,157 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],158 .clkr.hw.init = &(struct clk_init_data){159 .name = "gpll10_out_main",160 .parent_hws = (const struct clk_hw *[]){ &gpll10.clkr.hw },161 .num_parents = 1,162 .flags = CLK_SET_RATE_PARENT,163 .ops = &clk_alpha_pll_postdiv_ops,164 },165};166 167/* 600MHz configuration */168static const struct alpha_pll_config gpll11_config = {169 .l = 0x1F,170 .alpha = 0x0,171 .alpha_hi = 0x40,172 .alpha_en_mask = BIT(24),173 .vco_val = 0x2 << 20,174 .vco_mask = GENMASK(21, 20),175 .config_ctl_val = 0x4001055b,176 .test_ctl_hi1_val = 0x1,177 .test_ctl_hi_mask = 0x1,178};179 180static struct clk_alpha_pll gpll11 = {181 .offset = 0xb000,182 .vco_table = default_vco,183 .num_vco = ARRAY_SIZE(default_vco),184 .flags = SUPPORTS_DYNAMIC_UPDATE,185 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],186 .clkr = {187 .enable_reg = 0x79000,188 .enable_mask = BIT(11),189 .hw.init = &(struct clk_init_data){190 .name = "gpll11",191 .parent_data = &(const struct clk_parent_data){192 .fw_name = "bi_tcxo",193 },194 .num_parents = 1,195 .ops = &clk_alpha_pll_ops,196 },197 },198};199 200static const struct clk_div_table post_div_table_gpll11_out_main[] = {201 { 0x0, 1 },202 { }203};204 205static struct clk_alpha_pll_postdiv gpll11_out_main = {206 .offset = 0xb000,207 .post_div_shift = 8,208 .post_div_table = post_div_table_gpll11_out_main,209 .num_post_div = ARRAY_SIZE(post_div_table_gpll11_out_main),210 .width = 4,211 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],212 .clkr.hw.init = &(struct clk_init_data){213 .name = "gpll11_out_main",214 .parent_hws = (const struct clk_hw *[]){ &gpll11.clkr.hw },215 .num_parents = 1,216 .flags = CLK_SET_RATE_PARENT,217 .ops = &clk_alpha_pll_postdiv_ops,218 },219};220 221static struct clk_alpha_pll gpll3 = {222 .offset = 0x3000,223 .vco_table = default_vco,224 .num_vco = ARRAY_SIZE(default_vco),225 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],226 .clkr = {227 .enable_reg = 0x79000,228 .enable_mask = BIT(3),229 .hw.init = &(struct clk_init_data){230 .name = "gpll3",231 .parent_data = &(const struct clk_parent_data){232 .fw_name = "bi_tcxo",233 },234 .num_parents = 1,235 .ops = &clk_alpha_pll_ops,236 },237 },238};239 240static struct clk_alpha_pll gpll4 = {241 .offset = 0x4000,242 .vco_table = default_vco,243 .num_vco = ARRAY_SIZE(default_vco),244 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],245 .clkr = {246 .enable_reg = 0x79000,247 .enable_mask = BIT(4),248 .hw.init = &(struct clk_init_data){249 .name = "gpll4",250 .parent_data = &(const struct clk_parent_data){251 .fw_name = "bi_tcxo",252 },253 .num_parents = 1,254 .ops = &clk_alpha_pll_ops,255 },256 },257};258 259static const struct clk_div_table post_div_table_gpll4_out_main[] = {260 { 0x0, 1 },261 { }262};263 264static struct clk_alpha_pll_postdiv gpll4_out_main = {265 .offset = 0x4000,266 .post_div_shift = 8,267 .post_div_table = post_div_table_gpll4_out_main,268 .num_post_div = ARRAY_SIZE(post_div_table_gpll4_out_main),269 .width = 4,270 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],271 .clkr.hw.init = &(struct clk_init_data){272 .name = "gpll4_out_main",273 .parent_hws = (const struct clk_hw *[]){ &gpll4.clkr.hw },274 .num_parents = 1,275 .ops = &clk_alpha_pll_postdiv_ro_ops,276 },277};278 279static struct clk_alpha_pll gpll6 = {280 .offset = 0x6000,281 .vco_table = default_vco,282 .num_vco = ARRAY_SIZE(default_vco),283 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],284 .clkr = {285 .enable_reg = 0x79000,286 .enable_mask = BIT(6),287 .hw.init = &(struct clk_init_data){288 .name = "gpll6",289 .parent_data = &(const struct clk_parent_data){290 .fw_name = "bi_tcxo",291 },292 .num_parents = 1,293 .ops = &clk_alpha_pll_ops,294 },295 },296};297 298static const struct clk_div_table post_div_table_gpll6_out_main[] = {299 { 0x1, 2 },300 { }301};302 303static struct clk_alpha_pll_postdiv gpll6_out_main = {304 .offset = 0x6000,305 .post_div_shift = 8,306 .post_div_table = post_div_table_gpll6_out_main,307 .num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_main),308 .width = 4,309 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],310 .clkr.hw.init = &(struct clk_init_data){311 .name = "gpll6_out_main",312 .parent_hws = (const struct clk_hw *[]){ &gpll6.clkr.hw },313 .num_parents = 1,314 .ops = &clk_alpha_pll_postdiv_ro_ops,315 },316};317 318static struct clk_alpha_pll gpll7 = {319 .offset = 0x7000,320 .vco_table = default_vco,321 .num_vco = ARRAY_SIZE(default_vco),322 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],323 .clkr = {324 .enable_reg = 0x79000,325 .enable_mask = BIT(7),326 .hw.init = &(struct clk_init_data){327 .name = "gpll7",328 .parent_data = &(const struct clk_parent_data){329 .fw_name = "bi_tcxo",330 },331 .num_parents = 1,332 .ops = &clk_alpha_pll_ops,333 },334 },335};336 337static const struct clk_div_table post_div_table_gpll7_out_main[] = {338 { 0x0, 1 },339 { }340};341 342static struct clk_alpha_pll_postdiv gpll7_out_main = {343 .offset = 0x7000,344 .post_div_shift = 8,345 .post_div_table = post_div_table_gpll7_out_main,346 .num_post_div = ARRAY_SIZE(post_div_table_gpll7_out_main),347 .width = 4,348 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],349 .clkr.hw.init = &(struct clk_init_data){350 .name = "gpll7_out_main",351 .parent_hws = (const struct clk_hw *[]){ &gpll7.clkr.hw },352 .num_parents = 1,353 .ops = &clk_alpha_pll_postdiv_ro_ops,354 },355};356 357/* 800MHz configuration */358static const struct alpha_pll_config gpll8_config = {359 .l = 0x29,360 .alpha = 0xAAAAAAAA,361 .alpha_hi = 0xAA,362 .alpha_en_mask = BIT(24),363 .vco_val = 0x2 << 20,364 .vco_mask = GENMASK(21, 20),365 .main_output_mask = BIT(0),366 .early_output_mask = BIT(3),367 .post_div_val = 0x1 << 8,368 .post_div_mask = GENMASK(11, 8),369 .config_ctl_val = 0x4001055b,370 .test_ctl_hi1_val = 0x1,371 .test_ctl_hi_mask = 0x1,372};373 374static struct clk_alpha_pll gpll8 = {375 .offset = 0x8000,376 .vco_table = default_vco,377 .num_vco = ARRAY_SIZE(default_vco),378 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],379 .flags = SUPPORTS_DYNAMIC_UPDATE,380 .clkr = {381 .enable_reg = 0x79000,382 .enable_mask = BIT(8),383 .hw.init = &(struct clk_init_data){384 .name = "gpll8",385 .parent_data = &(const struct clk_parent_data){386 .fw_name = "bi_tcxo",387 },388 .num_parents = 1,389 .ops = &clk_alpha_pll_ops,390 },391 },392};393 394static const struct clk_div_table post_div_table_gpll8_out_main[] = {395 { 0x1, 2 },396 { }397};398 399static struct clk_alpha_pll_postdiv gpll8_out_main = {400 .offset = 0x8000,401 .post_div_shift = 8,402 .post_div_table = post_div_table_gpll8_out_main,403 .num_post_div = ARRAY_SIZE(post_div_table_gpll8_out_main),404 .width = 4,405 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],406 .clkr.hw.init = &(struct clk_init_data){407 .name = "gpll8_out_main",408 .parent_hws = (const struct clk_hw *[]){ &gpll8.clkr.hw },409 .num_parents = 1,410 .flags = CLK_SET_RATE_PARENT,411 .ops = &clk_alpha_pll_postdiv_ro_ops,412 },413};414 415/* 1152MHz configuration */416static const struct alpha_pll_config gpll9_config = {417 .l = 0x3C,418 .alpha = 0x0,419 .post_div_val = 0x1 << 8,420 .post_div_mask = GENMASK(9, 8),421 .main_output_mask = BIT(0),422 .config_ctl_val = 0x00004289,423 .test_ctl_mask = GENMASK(31, 0),424 .test_ctl_val = 0x08000000,425};426 427static struct clk_alpha_pll gpll9 = {428 .offset = 0x9000,429 .vco_table = gpll9_vco,430 .num_vco = ARRAY_SIZE(gpll9_vco),431 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO_EVO],432 .clkr = {433 .enable_reg = 0x79000,434 .enable_mask = BIT(9),435 .hw.init = &(struct clk_init_data){436 .name = "gpll9",437 .parent_data = &(const struct clk_parent_data){438 .fw_name = "bi_tcxo",439 },440 .num_parents = 1,441 .ops = &clk_alpha_pll_ops,442 },443 },444};445 446static const struct clk_div_table post_div_table_gpll9_out_main[] = {447 { 0x1, 2 },448 { }449};450 451static struct clk_alpha_pll_postdiv gpll9_out_main = {452 .offset = 0x9000,453 .post_div_shift = 8,454 .post_div_table = post_div_table_gpll9_out_main,455 .num_post_div = ARRAY_SIZE(post_div_table_gpll9_out_main),456 .width = 2,457 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO_EVO],458 .clkr.hw.init = &(struct clk_init_data){459 .name = "gpll9_out_main",460 .parent_hws = (const struct clk_hw *[]){ &gpll9.clkr.hw },461 .num_parents = 1,462 .flags = CLK_SET_RATE_PARENT,463 .ops = &clk_alpha_pll_postdiv_ops,464 },465};466 467static const struct parent_map gcc_parent_map_0[] = {468 { P_BI_TCXO, 0 },469 { P_GPLL0_OUT_EARLY, 1 },470 { P_GPLL0_OUT_AUX2, 2 },471};472 473static const struct clk_parent_data gcc_parents_0[] = {474 { .fw_name = "bi_tcxo" },475 { .hw = &gpll0.clkr.hw },476 { .hw = &gpll0_out_aux2.clkr.hw },477};478 479static const struct parent_map gcc_parent_map_1[] = {480 { P_BI_TCXO, 0 },481 { P_GPLL0_OUT_EARLY, 1 },482 { P_GPLL0_OUT_AUX2, 2 },483 { P_GPLL6_OUT_MAIN, 4 },484};485 486static const struct clk_parent_data gcc_parents_1[] = {487 { .fw_name = "bi_tcxo" },488 { .hw = &gpll0.clkr.hw },489 { .hw = &gpll0_out_aux2.clkr.hw },490 { .hw = &gpll6_out_main.clkr.hw },491};492 493static const struct parent_map gcc_parent_map_2[] = {494 { P_BI_TCXO, 0 },495 { P_GPLL0_OUT_EARLY, 1 },496 { P_GPLL0_OUT_AUX2, 2 },497 { P_SLEEP_CLK, 5 },498};499 500static const struct clk_parent_data gcc_parents_2[] = {501 { .fw_name = "bi_tcxo" },502 { .hw = &gpll0.clkr.hw },503 { .hw = &gpll0_out_aux2.clkr.hw },504 { .fw_name = "sleep_clk" },505};506 507static const struct parent_map gcc_parent_map_3[] = {508 { P_BI_TCXO, 0 },509 { P_GPLL0_OUT_EARLY, 1 },510 { P_GPLL9_OUT_EARLY, 2 },511 { P_GPLL10_OUT_MAIN, 3 },512 { P_GPLL9_OUT_MAIN, 5 },513};514 515static const struct clk_parent_data gcc_parents_3[] = {516 { .fw_name = "bi_tcxo" },517 { .hw = &gpll0.clkr.hw },518 { .hw = &gpll9.clkr.hw },519 { .hw = &gpll10_out_main.clkr.hw },520 { .hw = &gpll9_out_main.clkr.hw },521};522 523static const struct parent_map gcc_parent_map_4[] = {524 { P_BI_TCXO, 0 },525 { P_GPLL0_OUT_EARLY, 1 },526 { P_GPLL0_OUT_AUX2, 2 },527 { P_GPLL4_OUT_MAIN, 5 },528};529 530static const struct clk_parent_data gcc_parents_4[] = {531 { .fw_name = "bi_tcxo" },532 { .hw = &gpll0.clkr.hw },533 { .hw = &gpll0_out_aux2.clkr.hw },534 { .hw = &gpll4_out_main.clkr.hw },535};536 537static const struct parent_map gcc_parent_map_5[] = {538 { P_BI_TCXO, 0 },539 { P_GPLL0_OUT_EARLY, 1 },540 { P_GPLL8_OUT_EARLY, 2 },541 { P_GPLL10_OUT_MAIN, 3 },542 { P_GPLL8_OUT_MAIN, 4 },543 { P_GPLL9_OUT_MAIN, 5 },544};545 546static const struct clk_parent_data gcc_parents_5[] = {547 { .fw_name = "bi_tcxo" },548 { .hw = &gpll0.clkr.hw },549 { .hw = &gpll8.clkr.hw },550 { .hw = &gpll10_out_main.clkr.hw },551 { .hw = &gpll8_out_main.clkr.hw },552 { .hw = &gpll9_out_main.clkr.hw },553};554 555static const struct parent_map gcc_parent_map_6[] = {556 { P_BI_TCXO, 0 },557 { P_GPLL0_OUT_EARLY, 1 },558 { P_GPLL8_OUT_EARLY, 2 },559 { P_GPLL10_OUT_MAIN, 3 },560 { P_GPLL6_OUT_MAIN, 4 },561 { P_GPLL9_OUT_MAIN, 5 },562 { P_GPLL3_OUT_EARLY, 6 },563};564 565static const struct clk_parent_data gcc_parents_6[] = {566 { .fw_name = "bi_tcxo" },567 { .hw = &gpll0.clkr.hw },568 { .hw = &gpll8.clkr.hw },569 { .hw = &gpll10_out_main.clkr.hw },570 { .hw = &gpll6_out_main.clkr.hw },571 { .hw = &gpll9_out_main.clkr.hw },572 { .hw = &gpll3.clkr.hw },573};574 575static const struct parent_map gcc_parent_map_7[] = {576 { P_BI_TCXO, 0 },577 { P_GPLL0_OUT_EARLY, 1 },578 { P_GPLL0_OUT_AUX2, 2 },579 { P_GPLL10_OUT_MAIN, 3 },580 { P_GPLL4_OUT_MAIN, 5 },581 { P_GPLL3_OUT_EARLY, 6 },582};583 584static const struct clk_parent_data gcc_parents_7[] = {585 { .fw_name = "bi_tcxo" },586 { .hw = &gpll0.clkr.hw },587 { .hw = &gpll0_out_aux2.clkr.hw },588 { .hw = &gpll10_out_main.clkr.hw },589 { .hw = &gpll4_out_main.clkr.hw },590 { .hw = &gpll3.clkr.hw },591};592 593static const struct parent_map gcc_parent_map_8[] = {594 { P_BI_TCXO, 0 },595 { P_GPLL0_OUT_EARLY, 1 },596 { P_GPLL8_OUT_EARLY, 2 },597 { P_GPLL10_OUT_MAIN, 3 },598 { P_GPLL8_OUT_MAIN, 4 },599 { P_GPLL9_OUT_MAIN, 5 },600 { P_GPLL3_OUT_EARLY, 6 },601};602 603static const struct clk_parent_data gcc_parents_8[] = {604 { .fw_name = "bi_tcxo" },605 { .hw = &gpll0.clkr.hw },606 { .hw = &gpll8.clkr.hw },607 { .hw = &gpll10_out_main.clkr.hw },608 { .hw = &gpll8_out_main.clkr.hw },609 { .hw = &gpll9_out_main.clkr.hw },610 { .hw = &gpll3.clkr.hw },611};612 613static const struct parent_map gcc_parent_map_9[] = {614 { P_BI_TCXO, 0 },615 { P_GPLL0_OUT_EARLY, 1 },616 { P_GPLL0_OUT_AUX2, 2 },617 { P_GPLL10_OUT_MAIN, 3 },618 { P_GPLL8_OUT_MAIN, 4 },619 { P_GPLL9_OUT_MAIN, 5 },620 { P_GPLL3_OUT_EARLY, 6 },621};622 623static const struct clk_parent_data gcc_parents_9[] = {624 { .fw_name = "bi_tcxo" },625 { .hw = &gpll0.clkr.hw },626 { .hw = &gpll0_out_aux2.clkr.hw },627 { .hw = &gpll10_out_main.clkr.hw },628 { .hw = &gpll8_out_main.clkr.hw },629 { .hw = &gpll9_out_main.clkr.hw },630 { .hw = &gpll3.clkr.hw },631};632 633static const struct parent_map gcc_parent_map_10[] = {634 { P_BI_TCXO, 0 },635 { P_GPLL0_OUT_EARLY, 1 },636 { P_GPLL8_OUT_EARLY, 2 },637 { P_GPLL10_OUT_MAIN, 3 },638 { P_GPLL6_OUT_EARLY, 4 },639 { P_GPLL9_OUT_MAIN, 5 },640};641 642static const struct clk_parent_data gcc_parents_10[] = {643 { .fw_name = "bi_tcxo" },644 { .hw = &gpll0.clkr.hw },645 { .hw = &gpll8.clkr.hw },646 { .hw = &gpll10_out_main.clkr.hw },647 { .hw = &gpll6.clkr.hw },648 { .hw = &gpll9_out_main.clkr.hw },649};650 651static const struct parent_map gcc_parent_map_11[] = {652 { P_BI_TCXO, 0 },653 { P_GPLL0_OUT_EARLY, 1 },654 { P_GPLL0_OUT_AUX2, 2 },655 { P_GPLL7_OUT_MAIN, 3 },656 { P_GPLL4_OUT_MAIN, 5 },657};658 659static const struct clk_parent_data gcc_parents_11[] = {660 { .fw_name = "bi_tcxo" },661 { .hw = &gpll0.clkr.hw },662 { .hw = &gpll0_out_aux2.clkr.hw },663 { .hw = &gpll7_out_main.clkr.hw },664 { .hw = &gpll4_out_main.clkr.hw },665};666 667static const struct parent_map gcc_parent_map_12[] = {668 { P_BI_TCXO, 0 },669 { P_SLEEP_CLK, 5 },670};671 672static const struct clk_parent_data gcc_parents_12[] = {673 { .fw_name = "bi_tcxo" },674 { .fw_name = "sleep_clk" },675};676 677static const struct parent_map gcc_parent_map_13[] = {678 { P_BI_TCXO, 0 },679 { P_GPLL11_OUT_MAIN, 1 },680};681 682static const struct clk_parent_data gcc_parents_13[] = {683 { .fw_name = "bi_tcxo" },684 { .hw = &gpll11_out_main.clkr.hw },685};686 687static const struct freq_tbl ftbl_gcc_camss_axi_clk_src[] = {688 F(19200000, P_BI_TCXO, 1, 0, 0),689 F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),690 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),691 F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),692 { }693};694 695static struct clk_rcg2 gcc_camss_axi_clk_src = {696 .cmd_rcgr = 0x5802c,697 .mnd_width = 0,698 .hid_width = 5,699 .parent_map = gcc_parent_map_7,700 .freq_tbl = ftbl_gcc_camss_axi_clk_src,701 .clkr.hw.init = &(struct clk_init_data){702 .name = "gcc_camss_axi_clk_src",703 .parent_data = gcc_parents_7,704 .num_parents = ARRAY_SIZE(gcc_parents_7),705 .flags = CLK_SET_RATE_PARENT,706 .ops = &clk_rcg2_shared_ops,707 },708};709 710static const struct freq_tbl ftbl_gcc_camss_cci_clk_src[] = {711 F(19200000, P_BI_TCXO, 1, 0, 0),712 F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),713 { }714};715 716static struct clk_rcg2 gcc_camss_cci_clk_src = {717 .cmd_rcgr = 0x56000,718 .mnd_width = 0,719 .hid_width = 5,720 .parent_map = gcc_parent_map_9,721 .freq_tbl = ftbl_gcc_camss_cci_clk_src,722 .clkr.hw.init = &(struct clk_init_data){723 .name = "gcc_camss_cci_clk_src",724 .parent_data = gcc_parents_9,725 .num_parents = ARRAY_SIZE(gcc_parents_9),726 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,727 .ops = &clk_rcg2_shared_ops,728 },729};730 731static const struct freq_tbl ftbl_gcc_camss_csi0phytimer_clk_src[] = {732 F(19200000, P_BI_TCXO, 1, 0, 0),733 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),734 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),735 F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0),736 { }737};738 739static struct clk_rcg2 gcc_camss_csi0phytimer_clk_src = {740 .cmd_rcgr = 0x59000,741 .mnd_width = 0,742 .hid_width = 5,743 .parent_map = gcc_parent_map_4,744 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,745 .clkr.hw.init = &(struct clk_init_data){746 .name = "gcc_camss_csi0phytimer_clk_src",747 .parent_data = gcc_parents_4,748 .num_parents = ARRAY_SIZE(gcc_parents_4),749 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,750 .ops = &clk_rcg2_shared_ops,751 },752};753 754static struct clk_rcg2 gcc_camss_csi1phytimer_clk_src = {755 .cmd_rcgr = 0x5901c,756 .mnd_width = 0,757 .hid_width = 5,758 .parent_map = gcc_parent_map_4,759 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,760 .clkr.hw.init = &(struct clk_init_data){761 .name = "gcc_camss_csi1phytimer_clk_src",762 .parent_data = gcc_parents_4,763 .num_parents = ARRAY_SIZE(gcc_parents_4),764 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,765 .ops = &clk_rcg2_shared_ops,766 },767};768 769static struct clk_rcg2 gcc_camss_csi2phytimer_clk_src = {770 .cmd_rcgr = 0x59038,771 .mnd_width = 0,772 .hid_width = 5,773 .parent_map = gcc_parent_map_4,774 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,775 .clkr.hw.init = &(struct clk_init_data){776 .name = "gcc_camss_csi2phytimer_clk_src",777 .parent_data = gcc_parents_4,778 .num_parents = ARRAY_SIZE(gcc_parents_4),779 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,780 .ops = &clk_rcg2_shared_ops,781 },782};783 784static const struct freq_tbl ftbl_gcc_camss_mclk0_clk_src[] = {785 F(19200000, P_BI_TCXO, 1, 0, 0),786 F(24000000, P_GPLL9_OUT_MAIN, 1, 1, 24),787 F(64000000, P_GPLL9_OUT_MAIN, 1, 1, 9),788 { }789};790 791static struct clk_rcg2 gcc_camss_mclk0_clk_src = {792 .cmd_rcgr = 0x51000,793 .mnd_width = 8,794 .hid_width = 5,795 .parent_map = gcc_parent_map_3,796 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,797 .clkr.hw.init = &(struct clk_init_data){798 .name = "gcc_camss_mclk0_clk_src",799 .parent_data = gcc_parents_3,800 .num_parents = ARRAY_SIZE(gcc_parents_3),801 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,802 .ops = &clk_rcg2_shared_ops,803 },804};805 806static struct clk_rcg2 gcc_camss_mclk1_clk_src = {807 .cmd_rcgr = 0x5101c,808 .mnd_width = 8,809 .hid_width = 5,810 .parent_map = gcc_parent_map_3,811 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,812 .clkr.hw.init = &(struct clk_init_data){813 .name = "gcc_camss_mclk1_clk_src",814 .parent_data = gcc_parents_3,815 .num_parents = ARRAY_SIZE(gcc_parents_3),816 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,817 .ops = &clk_rcg2_shared_ops,818 },819};820 821static struct clk_rcg2 gcc_camss_mclk2_clk_src = {822 .cmd_rcgr = 0x51038,823 .mnd_width = 8,824 .hid_width = 5,825 .parent_map = gcc_parent_map_3,826 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,827 .clkr.hw.init = &(struct clk_init_data){828 .name = "gcc_camss_mclk2_clk_src",829 .parent_data = gcc_parents_3,830 .num_parents = ARRAY_SIZE(gcc_parents_3),831 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,832 .ops = &clk_rcg2_shared_ops,833 },834};835 836static struct clk_rcg2 gcc_camss_mclk3_clk_src = {837 .cmd_rcgr = 0x51054,838 .mnd_width = 8,839 .hid_width = 5,840 .parent_map = gcc_parent_map_3,841 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,842 .clkr.hw.init = &(struct clk_init_data){843 .name = "gcc_camss_mclk3_clk_src",844 .parent_data = gcc_parents_3,845 .num_parents = ARRAY_SIZE(gcc_parents_3),846 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,847 .ops = &clk_rcg2_shared_ops,848 },849};850 851static const struct freq_tbl ftbl_gcc_camss_ope_ahb_clk_src[] = {852 F(19200000, P_BI_TCXO, 1, 0, 0),853 F(171428571, P_GPLL0_OUT_EARLY, 3.5, 0, 0),854 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),855 { }856};857 858static struct clk_rcg2 gcc_camss_ope_ahb_clk_src = {859 .cmd_rcgr = 0x55024,860 .mnd_width = 0,861 .hid_width = 5,862 .parent_map = gcc_parent_map_8,863 .freq_tbl = ftbl_gcc_camss_ope_ahb_clk_src,864 .clkr.hw.init = &(struct clk_init_data){865 .name = "gcc_camss_ope_ahb_clk_src",866 .parent_data = gcc_parents_8,867 .num_parents = ARRAY_SIZE(gcc_parents_8),868 .flags = CLK_SET_RATE_PARENT,869 .ops = &clk_rcg2_shared_ops,870 },871};872 873static const struct freq_tbl ftbl_gcc_camss_ope_clk_src[] = {874 F(19200000, P_BI_TCXO, 1, 0, 0),875 F(200000000, P_GPLL8_OUT_MAIN, 2, 0, 0),876 F(266600000, P_GPLL8_OUT_MAIN, 1, 0, 0),877 F(465000000, P_GPLL8_OUT_MAIN, 1, 0, 0),878 F(576000000, P_GPLL9_OUT_MAIN, 1, 0, 0),879 { }880};881 882static struct clk_rcg2 gcc_camss_ope_clk_src = {883 .cmd_rcgr = 0x55004,884 .mnd_width = 0,885 .hid_width = 5,886 .parent_map = gcc_parent_map_8,887 .freq_tbl = ftbl_gcc_camss_ope_clk_src,888 .clkr.hw.init = &(struct clk_init_data){889 .name = "gcc_camss_ope_clk_src",890 .parent_data = gcc_parents_8,891 .num_parents = ARRAY_SIZE(gcc_parents_8),892 .flags = CLK_SET_RATE_PARENT,893 .ops = &clk_rcg2_shared_ops,894 },895};896 897static const struct freq_tbl ftbl_gcc_camss_tfe_0_clk_src[] = {898 F(19200000, P_BI_TCXO, 1, 0, 0),899 F(128000000, P_GPLL10_OUT_MAIN, 9, 0, 0),900 F(135529412, P_GPLL10_OUT_MAIN, 8.5, 0, 0),901 F(144000000, P_GPLL10_OUT_MAIN, 8, 0, 0),902 F(153600000, P_GPLL10_OUT_MAIN, 7.5, 0, 0),903 F(164571429, P_GPLL10_OUT_MAIN, 7, 0, 0),904 F(177230769, P_GPLL10_OUT_MAIN, 6.5, 0, 0),905 F(192000000, P_GPLL10_OUT_MAIN, 6, 0, 0),906 F(209454545, P_GPLL10_OUT_MAIN, 5.5, 0, 0),907 F(230400000, P_GPLL10_OUT_MAIN, 5, 0, 0),908 F(256000000, P_GPLL10_OUT_MAIN, 4.5, 0, 0),909 F(288000000, P_GPLL10_OUT_MAIN, 4, 0, 0),910 F(329142857, P_GPLL10_OUT_MAIN, 3.5, 0, 0),911 F(384000000, P_GPLL10_OUT_MAIN, 3, 0, 0),912 F(460800000, P_GPLL10_OUT_MAIN, 2.5, 0, 0),913 F(576000000, P_GPLL10_OUT_MAIN, 2, 0, 0),914 { }915};916 917static struct clk_rcg2 gcc_camss_tfe_0_clk_src = {918 .cmd_rcgr = 0x52004,919 .mnd_width = 8,920 .hid_width = 5,921 .parent_map = gcc_parent_map_5,922 .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,923 .clkr.hw.init = &(struct clk_init_data){924 .name = "gcc_camss_tfe_0_clk_src",925 .parent_data = gcc_parents_5,926 .num_parents = ARRAY_SIZE(gcc_parents_5),927 .flags = CLK_SET_RATE_PARENT,928 .ops = &clk_rcg2_shared_ops,929 },930};931 932static const struct freq_tbl ftbl_gcc_camss_tfe_0_csid_clk_src[] = {933 F(19200000, P_BI_TCXO, 1, 0, 0),934 F(120000000, P_GPLL0_OUT_EARLY, 5, 0, 0),935 F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),936 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),937 F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),938 F(426400000, P_GPLL3_OUT_EARLY, 2.5, 0, 0),939 { }940};941 942static struct clk_rcg2 gcc_camss_tfe_0_csid_clk_src = {943 .cmd_rcgr = 0x52094,944 .mnd_width = 0,945 .hid_width = 5,946 .parent_map = gcc_parent_map_6,947 .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,948 .clkr.hw.init = &(struct clk_init_data){949 .name = "gcc_camss_tfe_0_csid_clk_src",950 .parent_data = gcc_parents_6,951 .num_parents = ARRAY_SIZE(gcc_parents_6),952 .flags = CLK_SET_RATE_PARENT,953 .ops = &clk_rcg2_shared_ops,954 },955};956 957static struct clk_rcg2 gcc_camss_tfe_1_clk_src = {958 .cmd_rcgr = 0x52024,959 .mnd_width = 8,960 .hid_width = 5,961 .parent_map = gcc_parent_map_5,962 .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,963 .clkr.hw.init = &(struct clk_init_data){964 .name = "gcc_camss_tfe_1_clk_src",965 .parent_data = gcc_parents_5,966 .num_parents = ARRAY_SIZE(gcc_parents_5),967 .flags = CLK_SET_RATE_PARENT,968 .ops = &clk_rcg2_shared_ops,969 },970};971 972static struct clk_rcg2 gcc_camss_tfe_1_csid_clk_src = {973 .cmd_rcgr = 0x520b4,974 .mnd_width = 0,975 .hid_width = 5,976 .parent_map = gcc_parent_map_6,977 .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,978 .clkr.hw.init = &(struct clk_init_data){979 .name = "gcc_camss_tfe_1_csid_clk_src",980 .parent_data = gcc_parents_6,981 .num_parents = ARRAY_SIZE(gcc_parents_6),982 .flags = CLK_SET_RATE_PARENT,983 .ops = &clk_rcg2_shared_ops,984 },985};986 987static struct clk_rcg2 gcc_camss_tfe_2_clk_src = {988 .cmd_rcgr = 0x52044,989 .mnd_width = 8,990 .hid_width = 5,991 .parent_map = gcc_parent_map_5,992 .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,993 .clkr.hw.init = &(struct clk_init_data){994 .name = "gcc_camss_tfe_2_clk_src",995 .parent_data = gcc_parents_5,996 .num_parents = ARRAY_SIZE(gcc_parents_5),997 .flags = CLK_SET_RATE_PARENT,998 .ops = &clk_rcg2_shared_ops,999 },1000};1001 1002static struct clk_rcg2 gcc_camss_tfe_2_csid_clk_src = {1003 .cmd_rcgr = 0x520d4,1004 .mnd_width = 0,1005 .hid_width = 5,1006 .parent_map = gcc_parent_map_6,1007 .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,1008 .clkr.hw.init = &(struct clk_init_data){1009 .name = "gcc_camss_tfe_2_csid_clk_src",1010 .parent_data = gcc_parents_6,1011 .num_parents = ARRAY_SIZE(gcc_parents_6),1012 .flags = CLK_SET_RATE_PARENT,1013 .ops = &clk_rcg2_shared_ops,1014 },1015};1016 1017static const struct freq_tbl ftbl_gcc_camss_tfe_cphy_rx_clk_src[] = {1018 F(19200000, P_BI_TCXO, 1, 0, 0),1019 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),1020 F(341333333, P_GPLL6_OUT_EARLY, 1, 4, 9),1021 F(384000000, P_GPLL6_OUT_EARLY, 2, 0, 0),1022 { }1023};1024 1025static struct clk_rcg2 gcc_camss_tfe_cphy_rx_clk_src = {1026 .cmd_rcgr = 0x52064,1027 .mnd_width = 16,1028 .hid_width = 5,1029 .parent_map = gcc_parent_map_10,1030 .freq_tbl = ftbl_gcc_camss_tfe_cphy_rx_clk_src,1031 .clkr.hw.init = &(struct clk_init_data){1032 .name = "gcc_camss_tfe_cphy_rx_clk_src",1033 .parent_data = gcc_parents_10,1034 .num_parents = ARRAY_SIZE(gcc_parents_10),1035 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,1036 .ops = &clk_rcg2_shared_ops,1037 },1038};1039 1040static const struct freq_tbl ftbl_gcc_camss_top_ahb_clk_src[] = {1041 F(19200000, P_BI_TCXO, 1, 0, 0),1042 F(40000000, P_GPLL0_OUT_AUX2, 7.5, 0, 0),1043 F(80000000, P_GPLL0_OUT_EARLY, 7.5, 0, 0),1044 { }1045};1046 1047static struct clk_rcg2 gcc_camss_top_ahb_clk_src = {1048 .cmd_rcgr = 0x58010,1049 .mnd_width = 0,1050 .hid_width = 5,1051 .parent_map = gcc_parent_map_7,1052 .freq_tbl = ftbl_gcc_camss_top_ahb_clk_src,1053 .clkr.hw.init = &(struct clk_init_data){1054 .name = "gcc_camss_top_ahb_clk_src",1055 .parent_data = gcc_parents_7,1056 .num_parents = ARRAY_SIZE(gcc_parents_7),1057 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,1058 .ops = &clk_rcg2_shared_ops,1059 },1060};1061 1062static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {1063 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),1064 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),1065 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),1066 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),1067 { }1068};1069 1070static struct clk_rcg2 gcc_gp1_clk_src = {1071 .cmd_rcgr = 0x4d004,1072 .mnd_width = 8,1073 .hid_width = 5,1074 .parent_map = gcc_parent_map_2,1075 .freq_tbl = ftbl_gcc_gp1_clk_src,1076 .clkr.hw.init = &(struct clk_init_data){1077 .name = "gcc_gp1_clk_src",1078 .parent_data = gcc_parents_2,1079 .num_parents = ARRAY_SIZE(gcc_parents_2),1080 .ops = &clk_rcg2_ops,1081 },1082};1083 1084static struct clk_rcg2 gcc_gp2_clk_src = {1085 .cmd_rcgr = 0x4e004,1086 .mnd_width = 8,1087 .hid_width = 5,1088 .parent_map = gcc_parent_map_2,1089 .freq_tbl = ftbl_gcc_gp1_clk_src,1090 .clkr.hw.init = &(struct clk_init_data){1091 .name = "gcc_gp2_clk_src",1092 .parent_data = gcc_parents_2,1093 .num_parents = ARRAY_SIZE(gcc_parents_2),1094 .ops = &clk_rcg2_ops,1095 },1096};1097 1098static struct clk_rcg2 gcc_gp3_clk_src = {1099 .cmd_rcgr = 0x4f004,1100 .mnd_width = 8,1101 .hid_width = 5,1102 .parent_map = gcc_parent_map_2,1103 .freq_tbl = ftbl_gcc_gp1_clk_src,1104 .clkr.hw.init = &(struct clk_init_data){1105 .name = "gcc_gp3_clk_src",1106 .parent_data = gcc_parents_2,1107 .num_parents = ARRAY_SIZE(gcc_parents_2),1108 .ops = &clk_rcg2_ops,1109 },1110};1111 1112static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {1113 F(19200000, P_BI_TCXO, 1, 0, 0),1114 F(60000000, P_GPLL0_OUT_AUX2, 5, 0, 0),1115 { }1116};1117 1118static struct clk_rcg2 gcc_pdm2_clk_src = {1119 .cmd_rcgr = 0x20010,1120 .mnd_width = 0,1121 .hid_width = 5,1122 .parent_map = gcc_parent_map_0,1123 .freq_tbl = ftbl_gcc_pdm2_clk_src,1124 .clkr.hw.init = &(struct clk_init_data){1125 .name = "gcc_pdm2_clk_src",1126 .parent_data = gcc_parents_0,1127 .num_parents = ARRAY_SIZE(gcc_parents_0),1128 .ops = &clk_rcg2_shared_ops,1129 },1130};1131 1132static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {1133 F(7372800, P_GPLL0_OUT_AUX2, 1, 384, 15625),1134 F(14745600, P_GPLL0_OUT_AUX2, 1, 768, 15625),1135 F(19200000, P_BI_TCXO, 1, 0, 0),1136 F(29491200, P_GPLL0_OUT_AUX2, 1, 1536, 15625),1137 F(32000000, P_GPLL0_OUT_AUX2, 1, 8, 75),1138 F(48000000, P_GPLL0_OUT_AUX2, 1, 4, 25),1139 F(64000000, P_GPLL0_OUT_AUX2, 1, 16, 75),1140 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),1141 F(80000000, P_GPLL0_OUT_AUX2, 1, 4, 15),1142 F(96000000, P_GPLL0_OUT_AUX2, 1, 8, 25),1143 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),1144 F(102400000, P_GPLL0_OUT_AUX2, 1, 128, 375),1145 F(112000000, P_GPLL0_OUT_AUX2, 1, 28, 75),1146 F(117964800, P_GPLL0_OUT_AUX2, 1, 6144, 15625),1147 F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0),1148 F(128000000, P_GPLL6_OUT_MAIN, 3, 0, 0),1149 { }1150};1151 1152static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {1153 .name = "gcc_qupv3_wrap0_s0_clk_src",1154 .parent_data = gcc_parents_1,1155 .num_parents = ARRAY_SIZE(gcc_parents_1),1156 .ops = &clk_rcg2_ops,1157};1158 1159static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {1160 .cmd_rcgr = 0x1f148,1161 .mnd_width = 16,1162 .hid_width = 5,1163 .parent_map = gcc_parent_map_1,1164 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,1165 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,1166};1167 1168static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {1169 .name = "gcc_qupv3_wrap0_s1_clk_src",1170 .parent_data = gcc_parents_1,1171 .num_parents = ARRAY_SIZE(gcc_parents_1),1172 .ops = &clk_rcg2_ops,1173};1174 1175static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {1176 .cmd_rcgr = 0x1f278,1177 .mnd_width = 16,1178 .hid_width = 5,1179 .parent_map = gcc_parent_map_1,1180 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,1181 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,1182};1183 1184static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {1185 .name = "gcc_qupv3_wrap0_s2_clk_src",1186 .parent_data = gcc_parents_1,1187 .num_parents = ARRAY_SIZE(gcc_parents_1),1188 .ops = &clk_rcg2_ops,1189};1190 1191static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {1192 .cmd_rcgr = 0x1f3a8,1193 .mnd_width = 16,1194 .hid_width = 5,1195 .parent_map = gcc_parent_map_1,1196 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,1197 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,1198};1199 1200static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {1201 .name = "gcc_qupv3_wrap0_s3_clk_src",1202 .parent_data = gcc_parents_1,1203 .num_parents = ARRAY_SIZE(gcc_parents_1),1204 .ops = &clk_rcg2_ops,1205};1206 1207static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {1208 .cmd_rcgr = 0x1f4d8,1209 .mnd_width = 16,1210 .hid_width = 5,1211 .parent_map = gcc_parent_map_1,1212 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,1213 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,1214};1215 1216static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {1217 .name = "gcc_qupv3_wrap0_s4_clk_src",1218 .parent_data = gcc_parents_1,1219 .num_parents = ARRAY_SIZE(gcc_parents_1),1220 .ops = &clk_rcg2_ops,1221};1222 1223static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {1224 .cmd_rcgr = 0x1f608,1225 .mnd_width = 16,1226 .hid_width = 5,1227 .parent_map = gcc_parent_map_1,1228 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,1229 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,1230};1231 1232static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {1233 .name = "gcc_qupv3_wrap0_s5_clk_src",1234 .parent_data = gcc_parents_1,1235 .num_parents = ARRAY_SIZE(gcc_parents_1),1236 .ops = &clk_rcg2_ops,1237};1238 1239static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {1240 .cmd_rcgr = 0x1f738,1241 .mnd_width = 16,1242 .hid_width = 5,1243 .parent_map = gcc_parent_map_1,1244 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,1245 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,1246};1247 1248static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {1249 F(144000, P_BI_TCXO, 16, 3, 25),1250 F(400000, P_BI_TCXO, 12, 1, 4),1251 F(20000000, P_GPLL0_OUT_AUX2, 5, 1, 3),1252 F(25000000, P_GPLL0_OUT_AUX2, 6, 1, 2),1253 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),1254 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),1255 F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),1256 F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),1257 { }1258};1259 1260static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {1261 .cmd_rcgr = 0x38028,1262 .mnd_width = 8,1263 .hid_width = 5,1264 .parent_map = gcc_parent_map_1,1265 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,1266 .clkr.hw.init = &(struct clk_init_data){1267 .name = "gcc_sdcc1_apps_clk_src",1268 .parent_data = gcc_parents_1,1269 .num_parents = ARRAY_SIZE(gcc_parents_1),1270 .ops = &clk_rcg2_floor_ops,1271 },1272};1273 1274static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {1275 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),1276 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),1277 F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),1278 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),1279 F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),1280 { }1281};1282 1283static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {1284 .cmd_rcgr = 0x38010,1285 .mnd_width = 0,1286 .hid_width = 5,1287 .parent_map = gcc_parent_map_0,1288 .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,1289 .clkr.hw.init = &(struct clk_init_data){1290 .name = "gcc_sdcc1_ice_core_clk_src",1291 .parent_data = gcc_parents_0,1292 .num_parents = ARRAY_SIZE(gcc_parents_0),1293 .ops = &clk_rcg2_ops,1294 },1295};1296 1297static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {1298 F(400000, P_BI_TCXO, 12, 1, 4),1299 F(19200000, P_BI_TCXO, 1, 0, 0),1300 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),1301 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),1302 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),1303 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),1304 { }1305};1306 1307static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {1308 .cmd_rcgr = 0x1e00c,1309 .mnd_width = 8,1310 .hid_width = 5,1311 .parent_map = gcc_parent_map_11,1312 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,1313 .clkr.hw.init = &(struct clk_init_data){1314 .name = "gcc_sdcc2_apps_clk_src",1315 .parent_data = gcc_parents_11,1316 .num_parents = ARRAY_SIZE(gcc_parents_11),1317 .ops = &clk_rcg2_floor_ops,1318 .flags = CLK_OPS_PARENT_ENABLE,1319 },1320};1321 1322static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {1323 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),1324 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),1325 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),1326 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),1327 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),1328 { }1329};1330 1331static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {1332 .cmd_rcgr = 0x45020,1333 .mnd_width = 8,1334 .hid_width = 5,1335 .parent_map = gcc_parent_map_0,1336 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,1337 .clkr.hw.init = &(struct clk_init_data){1338 .name = "gcc_ufs_phy_axi_clk_src",1339 .parent_data = gcc_parents_0,1340 .num_parents = ARRAY_SIZE(gcc_parents_0),1341 .ops = &clk_rcg2_shared_ops,1342 },1343};1344 1345static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {1346 F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),1347 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),1348 F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),1349 F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),1350 { }1351};1352 1353static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {1354 .cmd_rcgr = 0x45048,1355 .mnd_width = 0,1356 .hid_width = 5,1357 .parent_map = gcc_parent_map_0,1358 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,1359 .clkr.hw.init = &(struct clk_init_data){1360 .name = "gcc_ufs_phy_ice_core_clk_src",1361 .parent_data = gcc_parents_0,1362 .num_parents = ARRAY_SIZE(gcc_parents_0),1363 .ops = &clk_rcg2_shared_ops,1364 },1365};1366 1367static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {1368 F(9600000, P_BI_TCXO, 2, 0, 0),1369 F(19200000, P_BI_TCXO, 1, 0, 0),1370 { }1371};1372 1373static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {1374 .cmd_rcgr = 0x4507c,1375 .mnd_width = 0,1376 .hid_width = 5,1377 .parent_map = gcc_parent_map_0,1378 .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,1379 .clkr.hw.init = &(struct clk_init_data){1380 .name = "gcc_ufs_phy_phy_aux_clk_src",1381 .parent_data = gcc_parents_0,1382 .num_parents = ARRAY_SIZE(gcc_parents_0),1383 .ops = &clk_rcg2_ops,1384 },1385};1386 1387static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {1388 F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),1389 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),1390 F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),1391 { }1392};1393 1394static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {1395 .cmd_rcgr = 0x45060,1396 .mnd_width = 0,1397 .hid_width = 5,1398 .parent_map = gcc_parent_map_0,1399 .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,1400 .clkr.hw.init = &(struct clk_init_data){1401 .name = "gcc_ufs_phy_unipro_core_clk_src",1402 .parent_data = gcc_parents_0,1403 .num_parents = ARRAY_SIZE(gcc_parents_0),1404 .ops = &clk_rcg2_shared_ops,1405 },1406};1407 1408static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {1409 F(66666667, P_GPLL0_OUT_AUX2, 4.5, 0, 0),1410 F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0),1411 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),1412 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),1413 { }1414};1415 1416static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {1417 .cmd_rcgr = 0x1a01c,1418 .mnd_width = 8,1419 .hid_width = 5,1420 .parent_map = gcc_parent_map_0,1421 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,1422 .clkr.hw.init = &(struct clk_init_data){1423 .name = "gcc_usb30_prim_master_clk_src",1424 .parent_data = gcc_parents_0,1425 .num_parents = ARRAY_SIZE(gcc_parents_0),1426 .ops = &clk_rcg2_shared_ops,1427 },1428};1429 1430static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {1431 F(19200000, P_BI_TCXO, 1, 0, 0),1432 { }1433};1434 1435static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {1436 .cmd_rcgr = 0x1a034,1437 .mnd_width = 0,1438 .hid_width = 5,1439 .parent_map = gcc_parent_map_0,1440 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,1441 .clkr.hw.init = &(struct clk_init_data){1442 .name = "gcc_usb30_prim_mock_utmi_clk_src",1443 .parent_data = gcc_parents_0,1444 .num_parents = ARRAY_SIZE(gcc_parents_0),1445 .ops = &clk_rcg2_ops,1446 },1447};1448 1449static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {1450 .reg = 0x1a04c,1451 .shift = 0,1452 .width = 2,1453 .clkr.hw.init = &(struct clk_init_data) {1454 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",1455 .parent_hws = (const struct clk_hw *[]) {1456 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw },1457 .num_parents = 1,1458 .ops = &clk_regmap_div_ro_ops,1459 },1460};1461 1462static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {1463 .cmd_rcgr = 0x1a060,1464 .mnd_width = 0,1465 .hid_width = 5,1466 .parent_map = gcc_parent_map_12,1467 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,1468 .clkr.hw.init = &(struct clk_init_data){1469 .name = "gcc_usb3_prim_phy_aux_clk_src",1470 .parent_data = gcc_parents_12,1471 .num_parents = ARRAY_SIZE(gcc_parents_12),1472 .ops = &clk_rcg2_ops,1473 },1474};1475 1476static const struct freq_tbl ftbl_gcc_video_venus_clk_src[] = {1477 F(133333333, P_GPLL11_OUT_MAIN, 4.5, 0, 0),1478 F(240000000, P_GPLL11_OUT_MAIN, 2.5, 0, 0),1479 F(300000000, P_GPLL11_OUT_MAIN, 2, 0, 0),1480 F(384000000, P_GPLL11_OUT_MAIN, 2, 0, 0),1481 { }1482};1483 1484static struct clk_rcg2 gcc_video_venus_clk_src = {1485 .cmd_rcgr = 0x58060,1486 .mnd_width = 0,1487 .hid_width = 5,1488 .parent_map = gcc_parent_map_13,1489 .freq_tbl = ftbl_gcc_video_venus_clk_src,1490 .clkr.hw.init = &(struct clk_init_data){1491 .name = "gcc_video_venus_clk_src",1492 .parent_data = gcc_parents_13,1493 .num_parents = ARRAY_SIZE(gcc_parents_13),1494 .flags = CLK_SET_RATE_PARENT,1495 .ops = &clk_rcg2_shared_ops,1496 },1497};1498 1499static struct clk_branch gcc_ahb2phy_csi_clk = {1500 .halt_reg = 0x1d004,1501 .halt_check = BRANCH_HALT,1502 .hwcg_reg = 0x1d004,1503 .hwcg_bit = 1,1504 .clkr = {1505 .enable_reg = 0x1d004,1506 .enable_mask = BIT(0),1507 .hw.init = &(struct clk_init_data){1508 .name = "gcc_ahb2phy_csi_clk",1509 .ops = &clk_branch2_ops,1510 },1511 },1512};1513 1514static struct clk_branch gcc_ahb2phy_usb_clk = {1515 .halt_reg = 0x1d008,1516 .halt_check = BRANCH_HALT,1517 .hwcg_reg = 0x1d008,1518 .hwcg_bit = 1,1519 .clkr = {1520 .enable_reg = 0x1d008,1521 .enable_mask = BIT(0),1522 .hw.init = &(struct clk_init_data){1523 .name = "gcc_ahb2phy_usb_clk",1524 .ops = &clk_branch2_ops,1525 },1526 },1527};1528 1529static struct clk_branch gcc_bimc_gpu_axi_clk = {1530 .halt_reg = 0x71154,1531 .halt_check = BRANCH_HALT_DELAY,1532 .hwcg_reg = 0x71154,1533 .hwcg_bit = 1,1534 .clkr = {1535 .enable_reg = 0x71154,1536 .enable_mask = BIT(0),1537 .hw.init = &(struct clk_init_data){1538 .name = "gcc_bimc_gpu_axi_clk",1539 .ops = &clk_branch2_ops,1540 },1541 },1542};1543 1544static struct clk_branch gcc_boot_rom_ahb_clk = {1545 .halt_reg = 0x23004,1546 .halt_check = BRANCH_HALT_VOTED,1547 .hwcg_reg = 0x23004,1548 .hwcg_bit = 1,1549 .clkr = {1550 .enable_reg = 0x79004,1551 .enable_mask = BIT(10),1552 .hw.init = &(struct clk_init_data){1553 .name = "gcc_boot_rom_ahb_clk",1554 .ops = &clk_branch2_ops,1555 },1556 },1557};1558 1559static struct clk_branch gcc_cam_throttle_nrt_clk = {1560 .halt_reg = 0x17070,1561 .halt_check = BRANCH_HALT_VOTED,1562 .hwcg_reg = 0x17070,1563 .hwcg_bit = 1,1564 .clkr = {1565 .enable_reg = 0x79004,1566 .enable_mask = BIT(27),1567 .hw.init = &(struct clk_init_data){1568 .name = "gcc_cam_throttle_nrt_clk",1569 .ops = &clk_branch2_ops,1570 },1571 },1572};1573 1574static struct clk_branch gcc_cam_throttle_rt_clk = {1575 .halt_reg = 0x1706c,1576 .halt_check = BRANCH_HALT_VOTED,1577 .hwcg_reg = 0x1706c,1578 .hwcg_bit = 1,1579 .clkr = {1580 .enable_reg = 0x79004,1581 .enable_mask = BIT(26),1582 .hw.init = &(struct clk_init_data){1583 .name = "gcc_cam_throttle_rt_clk",1584 .ops = &clk_branch2_ops,1585 },1586 },1587};1588 1589static struct clk_branch gcc_camera_ahb_clk = {1590 .halt_reg = 0x17008,1591 .halt_check = BRANCH_HALT_DELAY,1592 .hwcg_reg = 0x17008,1593 .hwcg_bit = 1,1594 .clkr = {1595 .enable_reg = 0x17008,1596 .enable_mask = BIT(0),1597 .hw.init = &(struct clk_init_data){1598 .name = "gcc_camera_ahb_clk",1599 .flags = CLK_IS_CRITICAL,1600 .ops = &clk_branch2_ops,1601 },1602 },1603};1604 1605static struct clk_branch gcc_camera_xo_clk = {1606 .halt_reg = 0x17028,1607 .halt_check = BRANCH_HALT,1608 .clkr = {1609 .enable_reg = 0x17028,1610 .enable_mask = BIT(0),1611 .hw.init = &(struct clk_init_data){1612 .name = "gcc_camera_xo_clk",1613 .flags = CLK_IS_CRITICAL,1614 .ops = &clk_branch2_ops,1615 },1616 },1617};1618 1619static struct clk_branch gcc_camss_axi_clk = {1620 .halt_reg = 0x58044,1621 .halt_check = BRANCH_HALT,1622 .clkr = {1623 .enable_reg = 0x58044,1624 .enable_mask = BIT(0),1625 .hw.init = &(struct clk_init_data){1626 .name = "gcc_camss_axi_clk",1627 .parent_hws = (const struct clk_hw *[]){1628 &gcc_camss_axi_clk_src.clkr.hw,1629 },1630 .num_parents = 1,1631 .flags = CLK_SET_RATE_PARENT,1632 .ops = &clk_branch2_ops,1633 },1634 },1635};1636 1637static struct clk_branch gcc_camss_camnoc_atb_clk = {1638 .halt_reg = 0x5804c,1639 .halt_check = BRANCH_HALT_DELAY,1640 .hwcg_reg = 0x5804c,1641 .hwcg_bit = 1,1642 .clkr = {1643 .enable_reg = 0x5804c,1644 .enable_mask = BIT(0),1645 .hw.init = &(struct clk_init_data){1646 .name = "gcc_camss_camnoc_atb_clk",1647 .ops = &clk_branch2_ops,1648 },1649 },1650};1651 1652static struct clk_branch gcc_camss_camnoc_nts_xo_clk = {1653 .halt_reg = 0x58050,1654 .halt_check = BRANCH_HALT_DELAY,1655 .hwcg_reg = 0x58050,1656 .hwcg_bit = 1,1657 .clkr = {1658 .enable_reg = 0x58050,1659 .enable_mask = BIT(0),1660 .hw.init = &(struct clk_init_data){1661 .name = "gcc_camss_camnoc_nts_xo_clk",1662 .ops = &clk_branch2_ops,1663 },1664 },1665};1666 1667static struct clk_branch gcc_camss_cci_0_clk = {1668 .halt_reg = 0x56018,1669 .halt_check = BRANCH_HALT,1670 .clkr = {1671 .enable_reg = 0x56018,1672 .enable_mask = BIT(0),1673 .hw.init = &(struct clk_init_data){1674 .name = "gcc_camss_cci_0_clk",1675 .parent_hws = (const struct clk_hw *[]){1676 &gcc_camss_cci_clk_src.clkr.hw,1677 },1678 .num_parents = 1,1679 .flags = CLK_SET_RATE_PARENT,1680 .ops = &clk_branch2_ops,1681 },1682 },1683};1684 1685static struct clk_branch gcc_camss_cphy_0_clk = {1686 .halt_reg = 0x52088,1687 .halt_check = BRANCH_HALT,1688 .clkr = {1689 .enable_reg = 0x52088,1690 .enable_mask = BIT(0),1691 .hw.init = &(struct clk_init_data){1692 .name = "gcc_camss_cphy_0_clk",1693 .parent_hws = (const struct clk_hw *[]){1694 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,1695 },1696 .num_parents = 1,1697 .flags = CLK_SET_RATE_PARENT,1698 .ops = &clk_branch2_ops,1699 },1700 },1701};1702 1703static struct clk_branch gcc_camss_cphy_1_clk = {1704 .halt_reg = 0x5208c,1705 .halt_check = BRANCH_HALT,1706 .clkr = {1707 .enable_reg = 0x5208c,1708 .enable_mask = BIT(0),1709 .hw.init = &(struct clk_init_data){1710 .name = "gcc_camss_cphy_1_clk",1711 .parent_hws = (const struct clk_hw *[]){1712 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,1713 },1714 .num_parents = 1,1715 .flags = CLK_SET_RATE_PARENT,1716 .ops = &clk_branch2_ops,1717 },1718 },1719};1720 1721static struct clk_branch gcc_camss_cphy_2_clk = {1722 .halt_reg = 0x52090,1723 .halt_check = BRANCH_HALT,1724 .clkr = {1725 .enable_reg = 0x52090,1726 .enable_mask = BIT(0),1727 .hw.init = &(struct clk_init_data){1728 .name = "gcc_camss_cphy_2_clk",1729 .parent_hws = (const struct clk_hw *[]){1730 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,1731 },1732 .num_parents = 1,1733 .flags = CLK_SET_RATE_PARENT,1734 .ops = &clk_branch2_ops,1735 },1736 },1737};1738 1739static struct clk_branch gcc_camss_csi0phytimer_clk = {1740 .halt_reg = 0x59018,1741 .halt_check = BRANCH_HALT,1742 .clkr = {1743 .enable_reg = 0x59018,1744 .enable_mask = BIT(0),1745 .hw.init = &(struct clk_init_data){1746 .name = "gcc_camss_csi0phytimer_clk",1747 .parent_hws = (const struct clk_hw *[]){1748 &gcc_camss_csi0phytimer_clk_src.clkr.hw,1749 },1750 .num_parents = 1,1751 .flags = CLK_SET_RATE_PARENT,1752 .ops = &clk_branch2_ops,1753 },1754 },1755};1756 1757static struct clk_branch gcc_camss_csi1phytimer_clk = {1758 .halt_reg = 0x59034,1759 .halt_check = BRANCH_HALT,1760 .clkr = {1761 .enable_reg = 0x59034,1762 .enable_mask = BIT(0),1763 .hw.init = &(struct clk_init_data){1764 .name = "gcc_camss_csi1phytimer_clk",1765 .parent_hws = (const struct clk_hw *[]){1766 &gcc_camss_csi1phytimer_clk_src.clkr.hw,1767 },1768 .num_parents = 1,1769 .flags = CLK_SET_RATE_PARENT,1770 .ops = &clk_branch2_ops,1771 },1772 },1773};1774 1775static struct clk_branch gcc_camss_csi2phytimer_clk = {1776 .halt_reg = 0x59050,1777 .halt_check = BRANCH_HALT,1778 .clkr = {1779 .enable_reg = 0x59050,1780 .enable_mask = BIT(0),1781 .hw.init = &(struct clk_init_data){1782 .name = "gcc_camss_csi2phytimer_clk",1783 .parent_hws = (const struct clk_hw *[]){1784 &gcc_camss_csi2phytimer_clk_src.clkr.hw,1785 },1786 .num_parents = 1,1787 .flags = CLK_SET_RATE_PARENT,1788 .ops = &clk_branch2_ops,1789 },1790 },1791};1792 1793static struct clk_branch gcc_camss_mclk0_clk = {1794 .halt_reg = 0x51018,1795 .halt_check = BRANCH_HALT,1796 .clkr = {1797 .enable_reg = 0x51018,1798 .enable_mask = BIT(0),1799 .hw.init = &(struct clk_init_data){1800 .name = "gcc_camss_mclk0_clk",1801 .parent_hws = (const struct clk_hw *[]){1802 &gcc_camss_mclk0_clk_src.clkr.hw,1803 },1804 .num_parents = 1,1805 .flags = CLK_SET_RATE_PARENT,1806 .ops = &clk_branch2_ops,1807 },1808 },1809};1810 1811static struct clk_branch gcc_camss_mclk1_clk = {1812 .halt_reg = 0x51034,1813 .halt_check = BRANCH_HALT,1814 .clkr = {1815 .enable_reg = 0x51034,1816 .enable_mask = BIT(0),1817 .hw.init = &(struct clk_init_data){1818 .name = "gcc_camss_mclk1_clk",1819 .parent_hws = (const struct clk_hw *[]){1820 &gcc_camss_mclk1_clk_src.clkr.hw,1821 },1822 .num_parents = 1,1823 .flags = CLK_SET_RATE_PARENT,1824 .ops = &clk_branch2_ops,1825 },1826 },1827};1828 1829static struct clk_branch gcc_camss_mclk2_clk = {1830 .halt_reg = 0x51050,1831 .halt_check = BRANCH_HALT,1832 .clkr = {1833 .enable_reg = 0x51050,1834 .enable_mask = BIT(0),1835 .hw.init = &(struct clk_init_data){1836 .name = "gcc_camss_mclk2_clk",1837 .parent_hws = (const struct clk_hw *[]){1838 &gcc_camss_mclk2_clk_src.clkr.hw,1839 },1840 .num_parents = 1,1841 .flags = CLK_SET_RATE_PARENT,1842 .ops = &clk_branch2_ops,1843 },1844 },1845};1846 1847static struct clk_branch gcc_camss_mclk3_clk = {1848 .halt_reg = 0x5106c,1849 .halt_check = BRANCH_HALT,1850 .clkr = {1851 .enable_reg = 0x5106c,1852 .enable_mask = BIT(0),1853 .hw.init = &(struct clk_init_data){1854 .name = "gcc_camss_mclk3_clk",1855 .parent_hws = (const struct clk_hw *[]){1856 &gcc_camss_mclk3_clk_src.clkr.hw,1857 },1858 .num_parents = 1,1859 .flags = CLK_SET_RATE_PARENT,1860 .ops = &clk_branch2_ops,1861 },1862 },1863};1864 1865static struct clk_branch gcc_camss_nrt_axi_clk = {1866 .halt_reg = 0x58054,1867 .halt_check = BRANCH_HALT,1868 .clkr = {1869 .enable_reg = 0x58054,1870 .enable_mask = BIT(0),1871 .hw.init = &(struct clk_init_data){1872 .name = "gcc_camss_nrt_axi_clk",1873 .ops = &clk_branch2_ops,1874 },1875 },1876};1877 1878static struct clk_branch gcc_camss_ope_ahb_clk = {1879 .halt_reg = 0x5503c,1880 .halt_check = BRANCH_HALT,1881 .clkr = {1882 .enable_reg = 0x5503c,1883 .enable_mask = BIT(0),1884 .hw.init = &(struct clk_init_data){1885 .name = "gcc_camss_ope_ahb_clk",1886 .parent_hws = (const struct clk_hw *[]){1887 &gcc_camss_ope_ahb_clk_src.clkr.hw,1888 },1889 .num_parents = 1,1890 .flags = CLK_SET_RATE_PARENT,1891 .ops = &clk_branch2_ops,1892 },1893 },1894};1895 1896static struct clk_branch gcc_camss_ope_clk = {1897 .halt_reg = 0x5501c,1898 .halt_check = BRANCH_HALT,1899 .clkr = {1900 .enable_reg = 0x5501c,1901 .enable_mask = BIT(0),1902 .hw.init = &(struct clk_init_data){1903 .name = "gcc_camss_ope_clk",1904 .parent_hws = (const struct clk_hw *[]){1905 &gcc_camss_ope_clk_src.clkr.hw,1906 },1907 .num_parents = 1,1908 .flags = CLK_SET_RATE_PARENT,1909 .ops = &clk_branch2_ops,1910 },1911 },1912};1913 1914static struct clk_branch gcc_camss_rt_axi_clk = {1915 .halt_reg = 0x5805c,1916 .halt_check = BRANCH_HALT,1917 .clkr = {1918 .enable_reg = 0x5805c,1919 .enable_mask = BIT(0),1920 .hw.init = &(struct clk_init_data){1921 .name = "gcc_camss_rt_axi_clk",1922 .ops = &clk_branch2_ops,1923 },1924 },1925};1926 1927static struct clk_branch gcc_camss_tfe_0_clk = {1928 .halt_reg = 0x5201c,1929 .halt_check = BRANCH_HALT,1930 .clkr = {1931 .enable_reg = 0x5201c,1932 .enable_mask = BIT(0),1933 .hw.init = &(struct clk_init_data){1934 .name = "gcc_camss_tfe_0_clk",1935 .parent_hws = (const struct clk_hw *[]){1936 &gcc_camss_tfe_0_clk_src.clkr.hw,1937 },1938 .num_parents = 1,1939 .flags = CLK_SET_RATE_PARENT,1940 .ops = &clk_branch2_ops,1941 },1942 },1943};1944 1945static struct clk_branch gcc_camss_tfe_0_cphy_rx_clk = {1946 .halt_reg = 0x5207c,1947 .halt_check = BRANCH_HALT,1948 .clkr = {1949 .enable_reg = 0x5207c,1950 .enable_mask = BIT(0),1951 .hw.init = &(struct clk_init_data){1952 .name = "gcc_camss_tfe_0_cphy_rx_clk",1953 .parent_hws = (const struct clk_hw *[]){1954 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,1955 },1956 .num_parents = 1,1957 .flags = CLK_SET_RATE_PARENT,1958 .ops = &clk_branch2_ops,1959 },1960 },1961};1962 1963static struct clk_branch gcc_camss_tfe_0_csid_clk = {1964 .halt_reg = 0x520ac,1965 .halt_check = BRANCH_HALT,1966 .clkr = {1967 .enable_reg = 0x520ac,1968 .enable_mask = BIT(0),1969 .hw.init = &(struct clk_init_data){1970 .name = "gcc_camss_tfe_0_csid_clk",1971 .parent_hws = (const struct clk_hw *[]){1972 &gcc_camss_tfe_0_csid_clk_src.clkr.hw,1973 },1974 .num_parents = 1,1975 .flags = CLK_SET_RATE_PARENT,1976 .ops = &clk_branch2_ops,1977 },1978 },1979};1980 1981static struct clk_branch gcc_camss_tfe_1_clk = {1982 .halt_reg = 0x5203c,1983 .halt_check = BRANCH_HALT,1984 .clkr = {1985 .enable_reg = 0x5203c,1986 .enable_mask = BIT(0),1987 .hw.init = &(struct clk_init_data){1988 .name = "gcc_camss_tfe_1_clk",1989 .parent_hws = (const struct clk_hw *[]){1990 &gcc_camss_tfe_1_clk_src.clkr.hw,1991 },1992 .num_parents = 1,1993 .flags = CLK_SET_RATE_PARENT,1994 .ops = &clk_branch2_ops,1995 },1996 },1997};1998 1999static struct clk_branch gcc_camss_tfe_1_cphy_rx_clk = {2000 .halt_reg = 0x52080,2001 .halt_check = BRANCH_HALT,2002 .clkr = {2003 .enable_reg = 0x52080,2004 .enable_mask = BIT(0),2005 .hw.init = &(struct clk_init_data){2006 .name = "gcc_camss_tfe_1_cphy_rx_clk",2007 .parent_hws = (const struct clk_hw *[]){2008 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,2009 },2010 .num_parents = 1,2011 .flags = CLK_SET_RATE_PARENT,2012 .ops = &clk_branch2_ops,2013 },2014 },2015};2016 2017static struct clk_branch gcc_camss_tfe_1_csid_clk = {2018 .halt_reg = 0x520cc,2019 .halt_check = BRANCH_HALT,2020 .clkr = {2021 .enable_reg = 0x520cc,2022 .enable_mask = BIT(0),2023 .hw.init = &(struct clk_init_data){2024 .name = "gcc_camss_tfe_1_csid_clk",2025 .parent_hws = (const struct clk_hw *[]){2026 &gcc_camss_tfe_1_csid_clk_src.clkr.hw,2027 },2028 .num_parents = 1,2029 .flags = CLK_SET_RATE_PARENT,2030 .ops = &clk_branch2_ops,2031 },2032 },2033};2034 2035static struct clk_branch gcc_camss_tfe_2_clk = {2036 .halt_reg = 0x5205c,2037 .halt_check = BRANCH_HALT,2038 .clkr = {2039 .enable_reg = 0x5205c,2040 .enable_mask = BIT(0),2041 .hw.init = &(struct clk_init_data){2042 .name = "gcc_camss_tfe_2_clk",2043 .parent_hws = (const struct clk_hw *[]){2044 &gcc_camss_tfe_2_clk_src.clkr.hw,2045 },2046 .num_parents = 1,2047 .flags = CLK_SET_RATE_PARENT,2048 .ops = &clk_branch2_ops,2049 },2050 },2051};2052 2053static struct clk_branch gcc_camss_tfe_2_cphy_rx_clk = {2054 .halt_reg = 0x52084,2055 .halt_check = BRANCH_HALT,2056 .clkr = {2057 .enable_reg = 0x52084,2058 .enable_mask = BIT(0),2059 .hw.init = &(struct clk_init_data){2060 .name = "gcc_camss_tfe_2_cphy_rx_clk",2061 .parent_hws = (const struct clk_hw *[]){2062 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,2063 },2064 .num_parents = 1,2065 .flags = CLK_SET_RATE_PARENT,2066 .ops = &clk_branch2_ops,2067 },2068 },2069};2070 2071static struct clk_branch gcc_camss_tfe_2_csid_clk = {2072 .halt_reg = 0x520ec,2073 .halt_check = BRANCH_HALT,2074 .clkr = {2075 .enable_reg = 0x520ec,2076 .enable_mask = BIT(0),2077 .hw.init = &(struct clk_init_data){2078 .name = "gcc_camss_tfe_2_csid_clk",2079 .parent_hws = (const struct clk_hw *[]){2080 &gcc_camss_tfe_2_csid_clk_src.clkr.hw,2081 },2082 .num_parents = 1,2083 .flags = CLK_SET_RATE_PARENT,2084 .ops = &clk_branch2_ops,2085 },2086 },2087};2088 2089static struct clk_branch gcc_camss_top_ahb_clk = {2090 .halt_reg = 0x58028,2091 .halt_check = BRANCH_HALT,2092 .clkr = {2093 .enable_reg = 0x58028,2094 .enable_mask = BIT(0),2095 .hw.init = &(struct clk_init_data){2096 .name = "gcc_camss_top_ahb_clk",2097 .parent_hws = (const struct clk_hw *[]){2098 &gcc_camss_top_ahb_clk_src.clkr.hw,2099 },2100 .num_parents = 1,2101 .flags = CLK_SET_RATE_PARENT,2102 .ops = &clk_branch2_ops,2103 },2104 },2105};2106 2107static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {2108 .halt_reg = 0x1a084,2109 .halt_check = BRANCH_HALT,2110 .hwcg_reg = 0x1a084,2111 .hwcg_bit = 1,2112 .clkr = {2113 .enable_reg = 0x1a084,2114 .enable_mask = BIT(0),2115 .hw.init = &(struct clk_init_data){2116 .name = "gcc_cfg_noc_usb3_prim_axi_clk",2117 .parent_hws = (const struct clk_hw *[]){2118 &gcc_usb30_prim_master_clk_src.clkr.hw,2119 },2120 .num_parents = 1,2121 .flags = CLK_SET_RATE_PARENT,2122 .ops = &clk_branch2_ops,2123 },2124 },2125};2126 2127static struct clk_branch gcc_cpuss_gnoc_clk = {2128 .halt_reg = 0x2b004,2129 .halt_check = BRANCH_HALT_VOTED,2130 .hwcg_reg = 0x2b004,2131 .hwcg_bit = 1,2132 .clkr = {2133 .enable_reg = 0x79004,2134 .enable_mask = BIT(22),2135 .hw.init = &(struct clk_init_data){2136 .name = "gcc_cpuss_gnoc_clk",2137 .flags = CLK_IS_CRITICAL,2138 .ops = &clk_branch2_ops,2139 },2140 },2141};2142 2143static struct clk_branch gcc_disp_ahb_clk = {2144 .halt_reg = 0x1700c,2145 .halt_check = BRANCH_HALT,2146 .hwcg_reg = 0x1700c,2147 .hwcg_bit = 1,2148 .clkr = {2149 .enable_reg = 0x1700c,2150 .enable_mask = BIT(0),2151 .hw.init = &(struct clk_init_data){2152 .name = "gcc_disp_ahb_clk",2153 .flags = CLK_IS_CRITICAL,2154 .ops = &clk_branch2_ops,2155 },2156 },2157};2158 2159static struct clk_regmap_div gcc_disp_gpll0_clk_src = {2160 .reg = 0x17058,2161 .shift = 0,2162 .width = 2,2163 .clkr.hw.init = &(struct clk_init_data) {2164 .name = "gcc_disp_gpll0_clk_src",2165 .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },2166 .num_parents = 1,2167 .ops = &clk_regmap_div_ops,2168 },2169};2170 2171static struct clk_branch gcc_disp_gpll0_div_clk_src = {2172 .halt_check = BRANCH_HALT_DELAY,2173 .clkr = {2174 .enable_reg = 0x79004,2175 .enable_mask = BIT(20),2176 .hw.init = &(struct clk_init_data){2177 .name = "gcc_disp_gpll0_div_clk_src",2178 .parent_hws = (const struct clk_hw *[]){2179 &gcc_disp_gpll0_clk_src.clkr.hw,2180 },2181 .num_parents = 1,2182 .flags = CLK_SET_RATE_PARENT,2183 .ops = &clk_branch2_ops,2184 },2185 },2186};2187 2188static struct clk_branch gcc_disp_hf_axi_clk = {2189 .halt_reg = 0x17020,2190 .halt_check = BRANCH_HALT,2191 .hwcg_reg = 0x17020,2192 .hwcg_bit = 1,2193 .clkr = {2194 .enable_reg = 0x17020,2195 .enable_mask = BIT(0),2196 .hw.init = &(struct clk_init_data){2197 .name = "gcc_disp_hf_axi_clk",2198 .ops = &clk_branch2_ops,2199 },2200 },2201};2202 2203static struct clk_branch gcc_disp_throttle_core_clk = {2204 .halt_reg = 0x17064,2205 .halt_check = BRANCH_HALT_VOTED,2206 .hwcg_reg = 0x17064,2207 .hwcg_bit = 1,2208 .clkr = {2209 .enable_reg = 0x7900c,2210 .enable_mask = BIT(5),2211 .hw.init = &(struct clk_init_data){2212 .name = "gcc_disp_throttle_core_clk",2213 .ops = &clk_branch2_ops,2214 },2215 },2216};2217 2218static struct clk_branch gcc_disp_xo_clk = {2219 .halt_reg = 0x1702c,2220 .halt_check = BRANCH_HALT,2221 .clkr = {2222 .enable_reg = 0x1702c,2223 .enable_mask = BIT(0),2224 .hw.init = &(struct clk_init_data){2225 .name = "gcc_disp_xo_clk",2226 .flags = CLK_IS_CRITICAL,2227 .ops = &clk_branch2_ops,2228 },2229 },2230};2231 2232static struct clk_branch gcc_gp1_clk = {2233 .halt_reg = 0x4d000,2234 .halt_check = BRANCH_HALT,2235 .clkr = {2236 .enable_reg = 0x4d000,2237 .enable_mask = BIT(0),2238 .hw.init = &(struct clk_init_data){2239 .name = "gcc_gp1_clk",2240 .parent_hws = (const struct clk_hw *[]){2241 &gcc_gp1_clk_src.clkr.hw,2242 },2243 .num_parents = 1,2244 .flags = CLK_SET_RATE_PARENT,2245 .ops = &clk_branch2_ops,2246 },2247 },2248};2249 2250static struct clk_branch gcc_gp2_clk = {2251 .halt_reg = 0x4e000,2252 .halt_check = BRANCH_HALT,2253 .clkr = {2254 .enable_reg = 0x4e000,2255 .enable_mask = BIT(0),2256 .hw.init = &(struct clk_init_data){2257 .name = "gcc_gp2_clk",2258 .parent_hws = (const struct clk_hw *[]){2259 &gcc_gp2_clk_src.clkr.hw,2260 },2261 .num_parents = 1,2262 .flags = CLK_SET_RATE_PARENT,2263 .ops = &clk_branch2_ops,2264 },2265 },2266};2267 2268static struct clk_branch gcc_gp3_clk = {2269 .halt_reg = 0x4f000,2270 .halt_check = BRANCH_HALT,2271 .clkr = {2272 .enable_reg = 0x4f000,2273 .enable_mask = BIT(0),2274 .hw.init = &(struct clk_init_data){2275 .name = "gcc_gp3_clk",2276 .parent_hws = (const struct clk_hw *[]){2277 &gcc_gp3_clk_src.clkr.hw,2278 },2279 .num_parents = 1,2280 .flags = CLK_SET_RATE_PARENT,2281 .ops = &clk_branch2_ops,2282 },2283 },2284};2285 2286static struct clk_branch gcc_gpu_cfg_ahb_clk = {2287 .halt_reg = 0x36004,2288 .halt_check = BRANCH_HALT,2289 .hwcg_reg = 0x36004,2290 .hwcg_bit = 1,2291 .clkr = {2292 .enable_reg = 0x36004,2293 .enable_mask = BIT(0),2294 .hw.init = &(struct clk_init_data){2295 .name = "gcc_gpu_cfg_ahb_clk",2296 .flags = CLK_IS_CRITICAL,2297 .ops = &clk_branch2_ops,2298 },2299 },2300};2301 2302static struct clk_branch gcc_gpu_gpll0_clk_src = {2303 .halt_check = BRANCH_HALT_DELAY,2304 .clkr = {2305 .enable_reg = 0x79004,2306 .enable_mask = BIT(15),2307 .hw.init = &(struct clk_init_data){2308 .name = "gcc_gpu_gpll0_clk_src",2309 .parent_hws = (const struct clk_hw *[]){2310 &gpll0.clkr.hw,2311 },2312 .num_parents = 1,2313 .flags = CLK_SET_RATE_PARENT,2314 .ops = &clk_branch2_ops,2315 },2316 },2317};2318 2319static struct clk_branch gcc_gpu_gpll0_div_clk_src = {2320 .halt_check = BRANCH_HALT_DELAY,2321 .clkr = {2322 .enable_reg = 0x79004,2323 .enable_mask = BIT(16),2324 .hw.init = &(struct clk_init_data){2325 .name = "gcc_gpu_gpll0_div_clk_src",2326 .parent_hws = (const struct clk_hw *[]){2327 &gpll0_out_aux2.clkr.hw,2328 },2329 .num_parents = 1,2330 .flags = CLK_SET_RATE_PARENT,2331 .ops = &clk_branch2_ops,2332 },2333 },2334};2335 2336static struct clk_branch gcc_gpu_iref_clk = {2337 .halt_reg = 0x36100,2338 .halt_check = BRANCH_HALT_DELAY,2339 .clkr = {2340 .enable_reg = 0x36100,2341 .enable_mask = BIT(0),2342 .hw.init = &(struct clk_init_data){2343 .name = "gcc_gpu_iref_clk",2344 .ops = &clk_branch2_ops,2345 },2346 },2347};2348 2349static struct clk_branch gcc_gpu_memnoc_gfx_clk = {2350 .halt_reg = 0x3600c,2351 .halt_check = BRANCH_VOTED,2352 .hwcg_reg = 0x3600c,2353 .hwcg_bit = 1,2354 .clkr = {2355 .enable_reg = 0x3600c,2356 .enable_mask = BIT(0),2357 .hw.init = &(struct clk_init_data){2358 .name = "gcc_gpu_memnoc_gfx_clk",2359 .ops = &clk_branch2_ops,2360 },2361 },2362};2363 2364static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {2365 .halt_reg = 0x36018,2366 .halt_check = BRANCH_HALT,2367 .clkr = {2368 .enable_reg = 0x36018,2369 .enable_mask = BIT(0),2370 .hw.init = &(struct clk_init_data){2371 .name = "gcc_gpu_snoc_dvm_gfx_clk",2372 .ops = &clk_branch2_ops,2373 },2374 },2375};2376 2377static struct clk_branch gcc_gpu_throttle_core_clk = {2378 .halt_reg = 0x36048,2379 .halt_check = BRANCH_HALT_VOTED,2380 .hwcg_reg = 0x36048,2381 .hwcg_bit = 1,2382 .clkr = {2383 .enable_reg = 0x79004,2384 .enable_mask = BIT(31),2385 .hw.init = &(struct clk_init_data){2386 .name = "gcc_gpu_throttle_core_clk",2387 .ops = &clk_branch2_ops,2388 },2389 },2390};2391 2392static struct clk_branch gcc_pdm2_clk = {2393 .halt_reg = 0x2000c,2394 .halt_check = BRANCH_HALT,2395 .clkr = {2396 .enable_reg = 0x2000c,2397 .enable_mask = BIT(0),2398 .hw.init = &(struct clk_init_data){2399 .name = "gcc_pdm2_clk",2400 .parent_hws = (const struct clk_hw *[]){2401 &gcc_pdm2_clk_src.clkr.hw,2402 },2403 .num_parents = 1,2404 .flags = CLK_SET_RATE_PARENT,2405 .ops = &clk_branch2_ops,2406 },2407 },2408};2409 2410static struct clk_branch gcc_pdm_ahb_clk = {2411 .halt_reg = 0x20004,2412 .halt_check = BRANCH_HALT,2413 .hwcg_reg = 0x20004,2414 .hwcg_bit = 1,2415 .clkr = {2416 .enable_reg = 0x20004,2417 .enable_mask = BIT(0),2418 .hw.init = &(struct clk_init_data){2419 .name = "gcc_pdm_ahb_clk",2420 .ops = &clk_branch2_ops,2421 },2422 },2423};2424 2425static struct clk_branch gcc_pdm_xo4_clk = {2426 .halt_reg = 0x20008,2427 .halt_check = BRANCH_HALT,2428 .clkr = {2429 .enable_reg = 0x20008,2430 .enable_mask = BIT(0),2431 .hw.init = &(struct clk_init_data){2432 .name = "gcc_pdm_xo4_clk",2433 .ops = &clk_branch2_ops,2434 },2435 },2436};2437 2438static struct clk_branch gcc_prng_ahb_clk = {2439 .halt_reg = 0x21004,2440 .halt_check = BRANCH_HALT_VOTED,2441 .hwcg_reg = 0x21004,2442 .hwcg_bit = 1,2443 .clkr = {2444 .enable_reg = 0x79004,2445 .enable_mask = BIT(13),2446 .hw.init = &(struct clk_init_data){2447 .name = "gcc_prng_ahb_clk",2448 .ops = &clk_branch2_ops,2449 },2450 },2451};2452 2453static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {2454 .halt_reg = 0x17014,2455 .halt_check = BRANCH_HALT_VOTED,2456 .hwcg_reg = 0x17014,2457 .hwcg_bit = 1,2458 .clkr = {2459 .enable_reg = 0x7900c,2460 .enable_mask = BIT(0),2461 .hw.init = &(struct clk_init_data){2462 .name = "gcc_qmip_camera_nrt_ahb_clk",2463 .ops = &clk_branch2_ops,2464 },2465 },2466};2467 2468static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {2469 .halt_reg = 0x17060,2470 .halt_check = BRANCH_HALT_VOTED,2471 .hwcg_reg = 0x17060,2472 .hwcg_bit = 1,2473 .clkr = {2474 .enable_reg = 0x7900c,2475 .enable_mask = BIT(2),2476 .hw.init = &(struct clk_init_data){2477 .name = "gcc_qmip_camera_rt_ahb_clk",2478 .ops = &clk_branch2_ops,2479 },2480 },2481};2482 2483static struct clk_branch gcc_qmip_disp_ahb_clk = {2484 .halt_reg = 0x17018,2485 .halt_check = BRANCH_HALT_VOTED,2486 .hwcg_reg = 0x17018,2487 .hwcg_bit = 1,2488 .clkr = {2489 .enable_reg = 0x7900c,2490 .enable_mask = BIT(1),2491 .hw.init = &(struct clk_init_data){2492 .name = "gcc_qmip_disp_ahb_clk",2493 .ops = &clk_branch2_ops,2494 },2495 },2496};2497 2498static struct clk_branch gcc_qmip_gpu_cfg_ahb_clk = {2499 .halt_reg = 0x36040,2500 .halt_check = BRANCH_HALT_VOTED,2501 .hwcg_reg = 0x36040,2502 .hwcg_bit = 1,2503 .clkr = {2504 .enable_reg = 0x7900c,2505 .enable_mask = BIT(4),2506 .hw.init = &(struct clk_init_data){2507 .name = "gcc_qmip_gpu_cfg_ahb_clk",2508 .ops = &clk_branch2_ops,2509 },2510 },2511};2512 2513static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {2514 .halt_reg = 0x17010,2515 .halt_check = BRANCH_HALT_VOTED,2516 .hwcg_reg = 0x17010,2517 .hwcg_bit = 1,2518 .clkr = {2519 .enable_reg = 0x79004,2520 .enable_mask = BIT(25),2521 .hw.init = &(struct clk_init_data){2522 .name = "gcc_qmip_video_vcodec_ahb_clk",2523 .ops = &clk_branch2_ops,2524 },2525 },2526};2527 2528static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {2529 .halt_reg = 0x1f014,2530 .halt_check = BRANCH_HALT_VOTED,2531 .clkr = {2532 .enable_reg = 0x7900c,2533 .enable_mask = BIT(9),2534 .hw.init = &(struct clk_init_data){2535 .name = "gcc_qupv3_wrap0_core_2x_clk",2536 .ops = &clk_branch2_ops,2537 },2538 },2539};2540 2541static struct clk_branch gcc_qupv3_wrap0_core_clk = {2542 .halt_reg = 0x1f00c,2543 .halt_check = BRANCH_HALT_VOTED,2544 .clkr = {2545 .enable_reg = 0x7900c,2546 .enable_mask = BIT(8),2547 .hw.init = &(struct clk_init_data){2548 .name = "gcc_qupv3_wrap0_core_clk",2549 .ops = &clk_branch2_ops,2550 },2551 },2552};2553 2554static struct clk_branch gcc_qupv3_wrap0_s0_clk = {2555 .halt_reg = 0x1f144,2556 .halt_check = BRANCH_HALT_VOTED,2557 .clkr = {2558 .enable_reg = 0x7900c,2559 .enable_mask = BIT(10),2560 .hw.init = &(struct clk_init_data){2561 .name = "gcc_qupv3_wrap0_s0_clk",2562 .parent_hws = (const struct clk_hw *[]){2563 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,2564 },2565 .num_parents = 1,2566 .flags = CLK_SET_RATE_PARENT,2567 .ops = &clk_branch2_ops,2568 },2569 },2570};2571 2572static struct clk_branch gcc_qupv3_wrap0_s1_clk = {2573 .halt_reg = 0x1f274,2574 .halt_check = BRANCH_HALT_VOTED,2575 .clkr = {2576 .enable_reg = 0x7900c,2577 .enable_mask = BIT(11),2578 .hw.init = &(struct clk_init_data){2579 .name = "gcc_qupv3_wrap0_s1_clk",2580 .parent_hws = (const struct clk_hw *[]){2581 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,2582 },2583 .num_parents = 1,2584 .flags = CLK_SET_RATE_PARENT,2585 .ops = &clk_branch2_ops,2586 },2587 },2588};2589 2590static struct clk_branch gcc_qupv3_wrap0_s2_clk = {2591 .halt_reg = 0x1f3a4,2592 .halt_check = BRANCH_HALT_VOTED,2593 .clkr = {2594 .enable_reg = 0x7900c,2595 .enable_mask = BIT(12),2596 .hw.init = &(struct clk_init_data){2597 .name = "gcc_qupv3_wrap0_s2_clk",2598 .parent_hws = (const struct clk_hw *[]){2599 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,2600 },2601 .num_parents = 1,2602 .flags = CLK_SET_RATE_PARENT,2603 .ops = &clk_branch2_ops,2604 },2605 },2606};2607 2608static struct clk_branch gcc_qupv3_wrap0_s3_clk = {2609 .halt_reg = 0x1f4d4,2610 .halt_check = BRANCH_HALT_VOTED,2611 .clkr = {2612 .enable_reg = 0x7900c,2613 .enable_mask = BIT(13),2614 .hw.init = &(struct clk_init_data){2615 .name = "gcc_qupv3_wrap0_s3_clk",2616 .parent_hws = (const struct clk_hw *[]){2617 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,2618 },2619 .num_parents = 1,2620 .flags = CLK_SET_RATE_PARENT,2621 .ops = &clk_branch2_ops,2622 },2623 },2624};2625 2626static struct clk_branch gcc_qupv3_wrap0_s4_clk = {2627 .halt_reg = 0x1f604,2628 .halt_check = BRANCH_HALT_VOTED,2629 .clkr = {2630 .enable_reg = 0x7900c,2631 .enable_mask = BIT(14),2632 .hw.init = &(struct clk_init_data){2633 .name = "gcc_qupv3_wrap0_s4_clk",2634 .parent_hws = (const struct clk_hw *[]){2635 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,2636 },2637 .num_parents = 1,2638 .flags = CLK_SET_RATE_PARENT,2639 .ops = &clk_branch2_ops,2640 },2641 },2642};2643 2644static struct clk_branch gcc_qupv3_wrap0_s5_clk = {2645 .halt_reg = 0x1f734,2646 .halt_check = BRANCH_HALT_VOTED,2647 .clkr = {2648 .enable_reg = 0x7900c,2649 .enable_mask = BIT(15),2650 .hw.init = &(struct clk_init_data){2651 .name = "gcc_qupv3_wrap0_s5_clk",2652 .parent_hws = (const struct clk_hw *[]){2653 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,2654 },2655 .num_parents = 1,2656 .flags = CLK_SET_RATE_PARENT,2657 .ops = &clk_branch2_ops,2658 },2659 },2660};2661 2662static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {2663 .halt_reg = 0x1f004,2664 .halt_check = BRANCH_HALT_VOTED,2665 .hwcg_reg = 0x1f004,2666 .hwcg_bit = 1,2667 .clkr = {2668 .enable_reg = 0x7900c,2669 .enable_mask = BIT(6),2670 .hw.init = &(struct clk_init_data){2671 .name = "gcc_qupv3_wrap_0_m_ahb_clk",2672 .ops = &clk_branch2_ops,2673 },2674 },2675};2676 2677static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {2678 .halt_reg = 0x1f008,2679 .halt_check = BRANCH_HALT_VOTED,2680 .hwcg_reg = 0x1f008,2681 .hwcg_bit = 1,2682 .clkr = {2683 .enable_reg = 0x7900c,2684 .enable_mask = BIT(7),2685 .hw.init = &(struct clk_init_data){2686 .name = "gcc_qupv3_wrap_0_s_ahb_clk",2687 .ops = &clk_branch2_ops,2688 },2689 },2690};2691 2692static struct clk_branch gcc_sdcc1_ahb_clk = {2693 .halt_reg = 0x38008,2694 .halt_check = BRANCH_HALT,2695 .clkr = {2696 .enable_reg = 0x38008,2697 .enable_mask = BIT(0),2698 .hw.init = &(struct clk_init_data){2699 .name = "gcc_sdcc1_ahb_clk",2700 .ops = &clk_branch2_ops,2701 },2702 },2703};2704 2705static struct clk_branch gcc_sdcc1_apps_clk = {2706 .halt_reg = 0x38004,2707 .halt_check = BRANCH_HALT,2708 .clkr = {2709 .enable_reg = 0x38004,2710 .enable_mask = BIT(0),2711 .hw.init = &(struct clk_init_data){2712 .name = "gcc_sdcc1_apps_clk",2713 .parent_hws = (const struct clk_hw *[]){2714 &gcc_sdcc1_apps_clk_src.clkr.hw,2715 },2716 .num_parents = 1,2717 .flags = CLK_SET_RATE_PARENT /* | CLK_ENABLE_HAND_OFF */,2718 .ops = &clk_branch2_ops,2719 },2720 },2721};2722 2723static struct clk_branch gcc_sdcc1_ice_core_clk = {2724 .halt_reg = 0x3800c,2725 .halt_check = BRANCH_HALT,2726 .hwcg_reg = 0x3800c,2727 .hwcg_bit = 1,2728 .clkr = {2729 .enable_reg = 0x3800c,2730 .enable_mask = BIT(0),2731 .hw.init = &(struct clk_init_data){2732 .name = "gcc_sdcc1_ice_core_clk",2733 .parent_hws = (const struct clk_hw *[]){2734 &gcc_sdcc1_ice_core_clk_src.clkr.hw,2735 },2736 .num_parents = 1,2737 .flags = CLK_SET_RATE_PARENT,2738 .ops = &clk_branch2_ops,2739 },2740 },2741};2742 2743static struct clk_branch gcc_sdcc2_ahb_clk = {2744 .halt_reg = 0x1e008,2745 .halt_check = BRANCH_HALT,2746 .clkr = {2747 .enable_reg = 0x1e008,2748 .enable_mask = BIT(0),2749 .hw.init = &(struct clk_init_data){2750 .name = "gcc_sdcc2_ahb_clk",2751 .ops = &clk_branch2_ops,2752 },2753 },2754};2755 2756static struct clk_branch gcc_sdcc2_apps_clk = {2757 .halt_reg = 0x1e004,2758 .halt_check = BRANCH_HALT,2759 .clkr = {2760 .enable_reg = 0x1e004,2761 .enable_mask = BIT(0),2762 .hw.init = &(struct clk_init_data){2763 .name = "gcc_sdcc2_apps_clk",2764 .parent_hws = (const struct clk_hw *[]){2765 &gcc_sdcc2_apps_clk_src.clkr.hw,2766 },2767 .num_parents = 1,2768 .flags = CLK_SET_RATE_PARENT,2769 .ops = &clk_branch2_ops,2770 },2771 },2772};2773 2774static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {2775 .halt_reg = 0x2b06c,2776 .halt_check = BRANCH_HALT_VOTED,2777 .hwcg_reg = 0x2b06c,2778 .hwcg_bit = 1,2779 .clkr = {2780 .enable_reg = 0x79004,2781 .enable_mask = BIT(0),2782 .hw.init = &(struct clk_init_data){2783 .name = "gcc_sys_noc_cpuss_ahb_clk",2784 .flags = CLK_IS_CRITICAL,2785 .ops = &clk_branch2_ops,2786 },2787 },2788};2789 2790static struct clk_branch gcc_sys_noc_ufs_phy_axi_clk = {2791 .halt_reg = 0x45098,2792 .halt_check = BRANCH_HALT,2793 .clkr = {2794 .enable_reg = 0x45098,2795 .enable_mask = BIT(0),2796 .hw.init = &(struct clk_init_data){2797 .name = "gcc_sys_noc_ufs_phy_axi_clk",2798 .parent_hws = (const struct clk_hw *[]){2799 &gcc_ufs_phy_axi_clk_src.clkr.hw,2800 },2801 .num_parents = 1,2802 .flags = CLK_SET_RATE_PARENT,2803 .ops = &clk_branch2_ops,2804 },2805 },2806};2807 2808static struct clk_branch gcc_sys_noc_usb3_prim_axi_clk = {2809 .halt_reg = 0x1a080,2810 .halt_check = BRANCH_HALT,2811 .hwcg_reg = 0x1a080,2812 .hwcg_bit = 1,2813 .clkr = {2814 .enable_reg = 0x1a080,2815 .enable_mask = BIT(0),2816 .hw.init = &(struct clk_init_data){2817 .name = "gcc_sys_noc_usb3_prim_axi_clk",2818 .parent_hws = (const struct clk_hw *[]){2819 &gcc_usb30_prim_master_clk_src.clkr.hw,2820 },2821 .num_parents = 1,2822 .flags = CLK_SET_RATE_PARENT,2823 .ops = &clk_branch2_ops,2824 },2825 },2826};2827 2828static struct clk_branch gcc_ufs_clkref_clk = {2829 .halt_reg = 0x8c000,2830 .halt_check = BRANCH_HALT,2831 .clkr = {2832 .enable_reg = 0x8c000,2833 .enable_mask = BIT(0),2834 .hw.init = &(struct clk_init_data){2835 .name = "gcc_ufs_clkref_clk",2836 .ops = &clk_branch2_ops,2837 },2838 },2839};2840 2841static struct clk_branch gcc_ufs_phy_ahb_clk = {2842 .halt_reg = 0x45014,2843 .halt_check = BRANCH_HALT,2844 .hwcg_reg = 0x45014,2845 .hwcg_bit = 1,2846 .clkr = {2847 .enable_reg = 0x45014,2848 .enable_mask = BIT(0),2849 .hw.init = &(struct clk_init_data){2850 .name = "gcc_ufs_phy_ahb_clk",2851 .ops = &clk_branch2_ops,2852 },2853 },2854};2855 2856static struct clk_branch gcc_ufs_phy_axi_clk = {2857 .halt_reg = 0x45010,2858 .halt_check = BRANCH_HALT,2859 .hwcg_reg = 0x45010,2860 .hwcg_bit = 1,2861 .clkr = {2862 .enable_reg = 0x45010,2863 .enable_mask = BIT(0),2864 .hw.init = &(struct clk_init_data){2865 .name = "gcc_ufs_phy_axi_clk",2866 .parent_hws = (const struct clk_hw *[]){2867 &gcc_ufs_phy_axi_clk_src.clkr.hw,2868 },2869 .num_parents = 1,2870 .flags = CLK_SET_RATE_PARENT,2871 .ops = &clk_branch2_ops,2872 },2873 },2874};2875 2876static struct clk_branch gcc_ufs_phy_ice_core_clk = {2877 .halt_reg = 0x45044,2878 .halt_check = BRANCH_HALT,2879 .hwcg_reg = 0x45044,2880 .hwcg_bit = 1,2881 .clkr = {2882 .enable_reg = 0x45044,2883 .enable_mask = BIT(0),2884 .hw.init = &(struct clk_init_data){2885 .name = "gcc_ufs_phy_ice_core_clk",2886 .parent_hws = (const struct clk_hw *[]){2887 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,2888 },2889 .num_parents = 1,2890 .flags = CLK_SET_RATE_PARENT,2891 .ops = &clk_branch2_ops,2892 },2893 },2894};2895 2896static struct clk_branch gcc_ufs_phy_phy_aux_clk = {2897 .halt_reg = 0x45078,2898 .halt_check = BRANCH_HALT,2899 .hwcg_reg = 0x45078,2900 .hwcg_bit = 1,2901 .clkr = {2902 .enable_reg = 0x45078,2903 .enable_mask = BIT(0),2904 .hw.init = &(struct clk_init_data){2905 .name = "gcc_ufs_phy_phy_aux_clk",2906 .parent_hws = (const struct clk_hw *[]){2907 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,2908 },2909 .num_parents = 1,2910 .flags = CLK_SET_RATE_PARENT,2911 .ops = &clk_branch2_ops,2912 },2913 },2914};2915 2916static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {2917 .halt_reg = 0x4501c,2918 .halt_check = BRANCH_HALT_SKIP,2919 .clkr = {2920 .enable_reg = 0x4501c,2921 .enable_mask = BIT(0),2922 .hw.init = &(struct clk_init_data){2923 .name = "gcc_ufs_phy_rx_symbol_0_clk",2924 .ops = &clk_branch2_ops,2925 },2926 },2927};2928 2929static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {2930 .halt_reg = 0x45018,2931 .halt_check = BRANCH_HALT_SKIP,2932 .clkr = {2933 .enable_reg = 0x45018,2934 .enable_mask = BIT(0),2935 .hw.init = &(struct clk_init_data){2936 .name = "gcc_ufs_phy_tx_symbol_0_clk",2937 .ops = &clk_branch2_ops,2938 },2939 },2940};2941 2942static struct clk_branch gcc_ufs_phy_unipro_core_clk = {2943 .halt_reg = 0x45040,2944 .halt_check = BRANCH_HALT,2945 .hwcg_reg = 0x45040,2946 .hwcg_bit = 1,2947 .clkr = {2948 .enable_reg = 0x45040,2949 .enable_mask = BIT(0),2950 .hw.init = &(struct clk_init_data){2951 .name = "gcc_ufs_phy_unipro_core_clk",2952 .parent_hws = (const struct clk_hw *[]){2953 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,2954 },2955 .num_parents = 1,2956 .flags = CLK_SET_RATE_PARENT,2957 .ops = &clk_branch2_ops,2958 },2959 },2960};2961 2962static struct clk_branch gcc_usb30_prim_master_clk = {2963 .halt_reg = 0x1a010,2964 .halt_check = BRANCH_HALT,2965 .clkr = {2966 .enable_reg = 0x1a010,2967 .enable_mask = BIT(0),2968 .hw.init = &(struct clk_init_data){2969 .name = "gcc_usb30_prim_master_clk",2970 .parent_hws = (const struct clk_hw *[]){2971 &gcc_usb30_prim_master_clk_src.clkr.hw,2972 },2973 .num_parents = 1,2974 .flags = CLK_SET_RATE_PARENT,2975 .ops = &clk_branch2_ops,2976 },2977 },2978};2979 2980static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {2981 .halt_reg = 0x1a018,2982 .halt_check = BRANCH_HALT,2983 .clkr = {2984 .enable_reg = 0x1a018,2985 .enable_mask = BIT(0),2986 .hw.init = &(struct clk_init_data){2987 .name = "gcc_usb30_prim_mock_utmi_clk",2988 .parent_hws = (const struct clk_hw *[]){2989 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,2990 },2991 .num_parents = 1,2992 .flags = CLK_SET_RATE_PARENT,2993 .ops = &clk_branch2_ops,2994 },2995 },2996};2997 2998static struct clk_branch gcc_usb30_prim_sleep_clk = {2999 .halt_reg = 0x1a014,3000 .halt_check = BRANCH_HALT,3001 .clkr = {3002 .enable_reg = 0x1a014,3003 .enable_mask = BIT(0),3004 .hw.init = &(struct clk_init_data){3005 .name = "gcc_usb30_prim_sleep_clk",3006 .ops = &clk_branch2_ops,3007 },3008 },3009};3010 3011static struct clk_branch gcc_usb3_prim_clkref_clk = {3012 .halt_reg = 0x9f000,3013 .halt_check = BRANCH_HALT,3014 .clkr = {3015 .enable_reg = 0x9f000,3016 .enable_mask = BIT(0),3017 .hw.init = &(struct clk_init_data){3018 .name = "gcc_usb3_prim_clkref_clk",3019 .ops = &clk_branch2_ops,3020 },3021 },3022};3023 3024static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {3025 .halt_reg = 0x1a054,3026 .halt_check = BRANCH_HALT,3027 .clkr = {3028 .enable_reg = 0x1a054,3029 .enable_mask = BIT(0),3030 .hw.init = &(struct clk_init_data){3031 .name = "gcc_usb3_prim_phy_com_aux_clk",3032 .parent_hws = (const struct clk_hw *[]){3033 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,3034 },3035 .num_parents = 1,3036 .flags = CLK_SET_RATE_PARENT,3037 .ops = &clk_branch2_ops,3038 },3039 },3040};3041 3042static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {3043 .halt_reg = 0x1a058,3044 .halt_check = BRANCH_HALT_SKIP,3045 .hwcg_reg = 0x1a058,3046 .hwcg_bit = 1,3047 .clkr = {3048 .enable_reg = 0x1a058,3049 .enable_mask = BIT(0),3050 .hw.init = &(struct clk_init_data){3051 .name = "gcc_usb3_prim_phy_pipe_clk",3052 .ops = &clk_branch2_ops,3053 },3054 },3055};3056 3057static struct clk_branch gcc_vcodec0_axi_clk = {3058 .halt_reg = 0x6e008,3059 .halt_check = BRANCH_HALT,3060 .clkr = {3061 .enable_reg = 0x6e008,3062 .enable_mask = BIT(0),3063 .hw.init = &(struct clk_init_data){3064 .name = "gcc_vcodec0_axi_clk",3065 .ops = &clk_branch2_ops,3066 },3067 },3068};3069 3070static struct clk_branch gcc_venus_ahb_clk = {3071 .halt_reg = 0x6e010,3072 .halt_check = BRANCH_HALT,3073 .clkr = {3074 .enable_reg = 0x6e010,3075 .enable_mask = BIT(0),3076 .hw.init = &(struct clk_init_data){3077 .name = "gcc_venus_ahb_clk",3078 .ops = &clk_branch2_ops,3079 },3080 },3081};3082 3083static struct clk_branch gcc_venus_ctl_axi_clk = {3084 .halt_reg = 0x6e004,3085 .halt_check = BRANCH_HALT,3086 .clkr = {3087 .enable_reg = 0x6e004,3088 .enable_mask = BIT(0),3089 .hw.init = &(struct clk_init_data){3090 .name = "gcc_venus_ctl_axi_clk",3091 .ops = &clk_branch2_ops,3092 },3093 },3094};3095 3096static struct clk_branch gcc_video_ahb_clk = {3097 .halt_reg = 0x17004,3098 .halt_check = BRANCH_HALT,3099 .hwcg_reg = 0x17004,3100 .hwcg_bit = 1,3101 .clkr = {3102 .enable_reg = 0x17004,3103 .enable_mask = BIT(0),3104 .hw.init = &(struct clk_init_data){3105 .name = "gcc_video_ahb_clk",3106 .ops = &clk_branch2_ops,3107 },3108 },3109};3110 3111static struct clk_branch gcc_video_axi0_clk = {3112 .halt_reg = 0x1701c,3113 .halt_check = BRANCH_HALT,3114 .hwcg_reg = 0x1701c,3115 .hwcg_bit = 1,3116 .clkr = {3117 .enable_reg = 0x1701c,3118 .enable_mask = BIT(0),3119 .hw.init = &(struct clk_init_data){3120 .name = "gcc_video_axi0_clk",3121 .ops = &clk_branch2_ops,3122 },3123 },3124};3125 3126static struct clk_branch gcc_video_throttle_core_clk = {3127 .halt_reg = 0x17068,3128 .halt_check = BRANCH_HALT_VOTED,3129 .hwcg_reg = 0x17068,3130 .hwcg_bit = 1,3131 .clkr = {3132 .enable_reg = 0x79004,3133 .enable_mask = BIT(28),3134 .hw.init = &(struct clk_init_data){3135 .name = "gcc_video_throttle_core_clk",3136 .ops = &clk_branch2_ops,3137 },3138 },3139};3140 3141static struct clk_branch gcc_video_vcodec0_sys_clk = {3142 .halt_reg = 0x580a4,3143 .halt_check = BRANCH_HALT_DELAY,3144 .hwcg_reg = 0x580a4,3145 .hwcg_bit = 1,3146 .clkr = {3147 .enable_reg = 0x580a4,3148 .enable_mask = BIT(0),3149 .hw.init = &(struct clk_init_data){3150 .name = "gcc_video_vcodec0_sys_clk",3151 .parent_hws = (const struct clk_hw *[]){3152 &gcc_video_venus_clk_src.clkr.hw,3153 },3154 .num_parents = 1,3155 .flags = CLK_SET_RATE_PARENT,3156 .ops = &clk_branch2_ops,3157 },3158 },3159};3160 3161static struct clk_branch gcc_video_venus_ctl_clk = {3162 .halt_reg = 0x5808c,3163 .halt_check = BRANCH_HALT,3164 .clkr = {3165 .enable_reg = 0x5808c,3166 .enable_mask = BIT(0),3167 .hw.init = &(struct clk_init_data){3168 .name = "gcc_video_venus_ctl_clk",3169 .parent_hws = (const struct clk_hw *[]){3170 &gcc_video_venus_clk_src.clkr.hw,3171 },3172 .num_parents = 1,3173 .flags = CLK_SET_RATE_PARENT,3174 .ops = &clk_branch2_ops,3175 },3176 },3177};3178 3179static struct clk_branch gcc_video_xo_clk = {3180 .halt_reg = 0x17024,3181 .halt_check = BRANCH_HALT,3182 .clkr = {3183 .enable_reg = 0x17024,3184 .enable_mask = BIT(0),3185 .hw.init = &(struct clk_init_data){3186 .name = "gcc_video_xo_clk",3187 .ops = &clk_branch2_ops,3188 },3189 },3190};3191 3192static struct gdsc gcc_camss_top_gdsc = {3193 .gdscr = 0x58004,3194 .pd = {3195 .name = "gcc_camss_top",3196 },3197 .pwrsts = PWRSTS_OFF_ON,3198};3199 3200static struct gdsc gcc_ufs_phy_gdsc = {3201 .gdscr = 0x45004,3202 .pd = {3203 .name = "gcc_ufs_phy",3204 },3205 .pwrsts = PWRSTS_OFF_ON,3206};3207 3208static struct gdsc gcc_usb30_prim_gdsc = {3209 .gdscr = 0x1a004,3210 .pd = {3211 .name = "gcc_usb30_prim",3212 },3213 .pwrsts = PWRSTS_OFF_ON,3214};3215 3216static struct gdsc gcc_vcodec0_gdsc = {3217 .gdscr = 0x58098,3218 .pd = {3219 .name = "gcc_vcodec0",3220 },3221 .pwrsts = PWRSTS_OFF_ON,3222};3223 3224static struct gdsc gcc_venus_gdsc = {3225 .gdscr = 0x5807c,3226 .pd = {3227 .name = "gcc_venus",3228 },3229 .pwrsts = PWRSTS_OFF_ON,3230};3231 3232static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = {3233 .gdscr = 0x7d060,3234 .pd = {3235 .name = "hlos1_vote_turing_mmu_tbu1",3236 },3237 .pwrsts = PWRSTS_OFF_ON,3238 .flags = VOTABLE,3239};3240 3241static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = {3242 .gdscr = 0x7d07c,3243 .pd = {3244 .name = "hlos1_vote_turing_mmu_tbu0",3245 },3246 .pwrsts = PWRSTS_OFF_ON,3247 .flags = VOTABLE,3248};3249 3250static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc = {3251 .gdscr = 0x7d074,3252 .pd = {3253 .name = "hlos1_vote_mm_snoc_mmu_tbu_rt",3254 },3255 .pwrsts = PWRSTS_OFF_ON,3256 .flags = VOTABLE,3257};3258 3259static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc = {3260 .gdscr = 0x7d078,3261 .pd = {3262 .name = "hlos1_vote_mm_snoc_mmu_tbu_nrt",3263 },3264 .pwrsts = PWRSTS_OFF_ON,3265 .flags = VOTABLE,3266};3267 3268static struct clk_regmap *gcc_sm6115_clocks[] = {3269 [GCC_AHB2PHY_CSI_CLK] = &gcc_ahb2phy_csi_clk.clkr,3270 [GCC_AHB2PHY_USB_CLK] = &gcc_ahb2phy_usb_clk.clkr,3271 [GCC_BIMC_GPU_AXI_CLK] = &gcc_bimc_gpu_axi_clk.clkr,3272 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,3273 [GCC_CAM_THROTTLE_NRT_CLK] = &gcc_cam_throttle_nrt_clk.clkr,3274 [GCC_CAM_THROTTLE_RT_CLK] = &gcc_cam_throttle_rt_clk.clkr,3275 [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,3276 [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,3277 [GCC_CAMSS_AXI_CLK] = &gcc_camss_axi_clk.clkr,3278 [GCC_CAMSS_AXI_CLK_SRC] = &gcc_camss_axi_clk_src.clkr,3279 [GCC_CAMSS_CAMNOC_ATB_CLK] = &gcc_camss_camnoc_atb_clk.clkr,3280 [GCC_CAMSS_CAMNOC_NTS_XO_CLK] = &gcc_camss_camnoc_nts_xo_clk.clkr,3281 [GCC_CAMSS_CCI_0_CLK] = &gcc_camss_cci_0_clk.clkr,3282 [GCC_CAMSS_CCI_CLK_SRC] = &gcc_camss_cci_clk_src.clkr,3283 [GCC_CAMSS_CPHY_0_CLK] = &gcc_camss_cphy_0_clk.clkr,3284 [GCC_CAMSS_CPHY_1_CLK] = &gcc_camss_cphy_1_clk.clkr,3285 [GCC_CAMSS_CPHY_2_CLK] = &gcc_camss_cphy_2_clk.clkr,3286 [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,3287 [GCC_CAMSS_CSI0PHYTIMER_CLK_SRC] = &gcc_camss_csi0phytimer_clk_src.clkr,3288 [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,3289 [GCC_CAMSS_CSI1PHYTIMER_CLK_SRC] = &gcc_camss_csi1phytimer_clk_src.clkr,3290 [GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr,3291 [GCC_CAMSS_CSI2PHYTIMER_CLK_SRC] = &gcc_camss_csi2phytimer_clk_src.clkr,3292 [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,3293 [GCC_CAMSS_MCLK0_CLK_SRC] = &gcc_camss_mclk0_clk_src.clkr,3294 [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,3295 [GCC_CAMSS_MCLK1_CLK_SRC] = &gcc_camss_mclk1_clk_src.clkr,3296 [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,3297 [GCC_CAMSS_MCLK2_CLK_SRC] = &gcc_camss_mclk2_clk_src.clkr,3298 [GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,3299 [GCC_CAMSS_MCLK3_CLK_SRC] = &gcc_camss_mclk3_clk_src.clkr,3300 [GCC_CAMSS_NRT_AXI_CLK] = &gcc_camss_nrt_axi_clk.clkr,3301 [GCC_CAMSS_OPE_AHB_CLK] = &gcc_camss_ope_ahb_clk.clkr,3302 [GCC_CAMSS_OPE_AHB_CLK_SRC] = &gcc_camss_ope_ahb_clk_src.clkr,3303 [GCC_CAMSS_OPE_CLK] = &gcc_camss_ope_clk.clkr,3304 [GCC_CAMSS_OPE_CLK_SRC] = &gcc_camss_ope_clk_src.clkr,3305 [GCC_CAMSS_RT_AXI_CLK] = &gcc_camss_rt_axi_clk.clkr,3306 [GCC_CAMSS_TFE_0_CLK] = &gcc_camss_tfe_0_clk.clkr,3307 [GCC_CAMSS_TFE_0_CLK_SRC] = &gcc_camss_tfe_0_clk_src.clkr,3308 [GCC_CAMSS_TFE_0_CPHY_RX_CLK] = &gcc_camss_tfe_0_cphy_rx_clk.clkr,3309 [GCC_CAMSS_TFE_0_CSID_CLK] = &gcc_camss_tfe_0_csid_clk.clkr,3310 [GCC_CAMSS_TFE_0_CSID_CLK_SRC] = &gcc_camss_tfe_0_csid_clk_src.clkr,3311 [GCC_CAMSS_TFE_1_CLK] = &gcc_camss_tfe_1_clk.clkr,3312 [GCC_CAMSS_TFE_1_CLK_SRC] = &gcc_camss_tfe_1_clk_src.clkr,3313 [GCC_CAMSS_TFE_1_CPHY_RX_CLK] = &gcc_camss_tfe_1_cphy_rx_clk.clkr,3314 [GCC_CAMSS_TFE_1_CSID_CLK] = &gcc_camss_tfe_1_csid_clk.clkr,3315 [GCC_CAMSS_TFE_1_CSID_CLK_SRC] = &gcc_camss_tfe_1_csid_clk_src.clkr,3316 [GCC_CAMSS_TFE_2_CLK] = &gcc_camss_tfe_2_clk.clkr,3317 [GCC_CAMSS_TFE_2_CLK_SRC] = &gcc_camss_tfe_2_clk_src.clkr,3318 [GCC_CAMSS_TFE_2_CPHY_RX_CLK] = &gcc_camss_tfe_2_cphy_rx_clk.clkr,3319 [GCC_CAMSS_TFE_2_CSID_CLK] = &gcc_camss_tfe_2_csid_clk.clkr,3320 [GCC_CAMSS_TFE_2_CSID_CLK_SRC] = &gcc_camss_tfe_2_csid_clk_src.clkr,3321 [GCC_CAMSS_TFE_CPHY_RX_CLK_SRC] = &gcc_camss_tfe_cphy_rx_clk_src.clkr,3322 [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,3323 [GCC_CAMSS_TOP_AHB_CLK_SRC] = &gcc_camss_top_ahb_clk_src.clkr,3324 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,3325 [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,3326 [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,3327 [GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,3328 [GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,3329 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,3330 [GCC_DISP_THROTTLE_CORE_CLK] = &gcc_disp_throttle_core_clk.clkr,3331 [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,3332 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,3333 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,3334 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,3335 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,3336 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,3337 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,3338 [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,3339 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,3340 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,3341 [GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr,3342 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,3343 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,3344 [GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr,3345 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,3346 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,3347 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,3348 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,3349 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,3350 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,3351 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,3352 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,3353 [GCC_QMIP_GPU_CFG_AHB_CLK] = &gcc_qmip_gpu_cfg_ahb_clk.clkr,3354 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,3355 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,3356 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,3357 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,3358 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,3359 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,3360 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,3361 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,3362 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,3363 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,3364 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,3365 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,3366 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,3367 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,3368 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,3369 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,3370 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,3371 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,3372 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,3373 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,3374 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,3375 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,3376 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,3377 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,3378 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,3379 [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,3380 [GCC_SYS_NOC_UFS_PHY_AXI_CLK] = &gcc_sys_noc_ufs_phy_axi_clk.clkr,3381 [GCC_SYS_NOC_USB3_PRIM_AXI_CLK] = &gcc_sys_noc_usb3_prim_axi_clk.clkr,3382 [GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr,3383 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,3384 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,3385 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,3386 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,3387 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,3388 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,3389 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,3390 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,3391 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,3392 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,3393 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =3394 &gcc_ufs_phy_unipro_core_clk_src.clkr,3395 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,3396 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,3397 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,3398 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =3399 &gcc_usb30_prim_mock_utmi_clk_src.clkr,3400 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] =3401 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,3402 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,3403 [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,3404 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,3405 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,3406 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,3407 [GCC_VCODEC0_AXI_CLK] = &gcc_vcodec0_axi_clk.clkr,3408 [GCC_VENUS_AHB_CLK] = &gcc_venus_ahb_clk.clkr,3409 [GCC_VENUS_CTL_AXI_CLK] = &gcc_venus_ctl_axi_clk.clkr,3410 [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,3411 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,3412 [GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr,3413 [GCC_VIDEO_VCODEC0_SYS_CLK] = &gcc_video_vcodec0_sys_clk.clkr,3414 [GCC_VIDEO_VENUS_CLK_SRC] = &gcc_video_venus_clk_src.clkr,3415 [GCC_VIDEO_VENUS_CTL_CLK] = &gcc_video_venus_ctl_clk.clkr,3416 [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,3417 [GPLL0] = &gpll0.clkr,3418 [GPLL0_OUT_AUX2] = &gpll0_out_aux2.clkr,3419 [GPLL0_OUT_MAIN] = &gpll0_out_main.clkr,3420 [GPLL10] = &gpll10.clkr,3421 [GPLL10_OUT_MAIN] = &gpll10_out_main.clkr,3422 [GPLL11] = &gpll11.clkr,3423 [GPLL11_OUT_MAIN] = &gpll11_out_main.clkr,3424 [GPLL3] = &gpll3.clkr,3425 [GPLL4] = &gpll4.clkr,3426 [GPLL4_OUT_MAIN] = &gpll4_out_main.clkr,3427 [GPLL6] = &gpll6.clkr,3428 [GPLL6_OUT_MAIN] = &gpll6_out_main.clkr,3429 [GPLL7] = &gpll7.clkr,3430 [GPLL7_OUT_MAIN] = &gpll7_out_main.clkr,3431 [GPLL8] = &gpll8.clkr,3432 [GPLL8_OUT_MAIN] = &gpll8_out_main.clkr,3433 [GPLL9] = &gpll9.clkr,3434 [GPLL9_OUT_MAIN] = &gpll9_out_main.clkr,3435};3436 3437static const struct qcom_reset_map gcc_sm6115_resets[] = {3438 [GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 },3439 [GCC_QUSB2PHY_SEC_BCR] = { 0x1c004 },3440 [GCC_SDCC1_BCR] = { 0x38000 },3441 [GCC_SDCC2_BCR] = { 0x1e000 },3442 [GCC_UFS_PHY_BCR] = { 0x45000 },3443 [GCC_USB30_PRIM_BCR] = { 0x1a000 },3444 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 },3445 [GCC_USB3PHY_PHY_PRIM_SP0_BCR] = { 0x1b008 },3446 [GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x1b000 },3447 [GCC_VCODEC0_BCR] = { 0x58094 },3448 [GCC_VENUS_BCR] = { 0x58078 },3449 [GCC_VIDEO_INTERFACE_BCR] = { 0x6e000 },3450};3451 3452static struct gdsc *gcc_sm6115_gdscs[] = {3453 [GCC_CAMSS_TOP_GDSC] = &gcc_camss_top_gdsc,3454 [GCC_UFS_PHY_GDSC] = &gcc_ufs_phy_gdsc,3455 [GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc,3456 [GCC_VCODEC0_GDSC] = &gcc_vcodec0_gdsc,3457 [GCC_VENUS_GDSC] = &gcc_venus_gdsc,3458 [HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc,3459 [HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc,3460 [HLOS1_VOTE_MM_SNOC_MMU_TBU_RT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc,3461 [HLOS1_VOTE_MM_SNOC_MMU_TBU_NRT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc,3462};3463 3464static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {3465 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),3466 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),3467 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),3468 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),3469 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),3470 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),3471};3472 3473static const struct regmap_config gcc_sm6115_regmap_config = {3474 .reg_bits = 32,3475 .reg_stride = 4,3476 .val_bits = 32,3477 .max_register = 0xc7000,3478 .fast_io = true,3479};3480 3481static const struct qcom_cc_desc gcc_sm6115_desc = {3482 .config = &gcc_sm6115_regmap_config,3483 .clks = gcc_sm6115_clocks,3484 .num_clks = ARRAY_SIZE(gcc_sm6115_clocks),3485 .resets = gcc_sm6115_resets,3486 .num_resets = ARRAY_SIZE(gcc_sm6115_resets),3487 .gdscs = gcc_sm6115_gdscs,3488 .num_gdscs = ARRAY_SIZE(gcc_sm6115_gdscs),3489};3490 3491static const struct of_device_id gcc_sm6115_match_table[] = {3492 { .compatible = "qcom,gcc-sm6115" },3493 { }3494};3495MODULE_DEVICE_TABLE(of, gcc_sm6115_match_table);3496 3497static int gcc_sm6115_probe(struct platform_device *pdev)3498{3499 struct regmap *regmap;3500 int ret;3501 3502 regmap = qcom_cc_map(pdev, &gcc_sm6115_desc);3503 if (IS_ERR(regmap))3504 return PTR_ERR(regmap);3505 3506 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,3507 ARRAY_SIZE(gcc_dfs_clocks));3508 if (ret)3509 return ret;3510 3511 clk_alpha_pll_configure(&gpll8, regmap, &gpll8_config);3512 clk_alpha_pll_configure(&gpll9, regmap, &gpll9_config);3513 clk_alpha_pll_configure(&gpll10, regmap, &gpll10_config);3514 clk_alpha_pll_configure(&gpll11, regmap, &gpll11_config);3515 3516 return qcom_cc_really_probe(&pdev->dev, &gcc_sm6115_desc, regmap);3517}3518 3519static struct platform_driver gcc_sm6115_driver = {3520 .probe = gcc_sm6115_probe,3521 .driver = {3522 .name = "gcc-sm6115",3523 .of_match_table = gcc_sm6115_match_table,3524 },3525};3526 3527static int __init gcc_sm6115_init(void)3528{3529 return platform_driver_register(&gcc_sm6115_driver);3530}3531subsys_initcall(gcc_sm6115_init);3532 3533static void __exit gcc_sm6115_exit(void)3534{3535 platform_driver_unregister(&gcc_sm6115_driver);3536}3537module_exit(gcc_sm6115_exit);3538 3539MODULE_DESCRIPTION("QTI GCC SM6115 and SM4250 Driver");3540MODULE_LICENSE("GPL v2");3541MODULE_ALIAS("platform:gcc-sm6115");3542