4466 lines · c
1// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)2/*3 * Copyright (c) 2023 The Linux Foundation. All rights reserved.4 */5 6#include <linux/clk-provider.h>7#include <linux/interconnect-clk.h>8#include <linux/interconnect-provider.h>9#include <linux/kernel.h>10#include <linux/module.h>11#include <linux/of.h>12#include <linux/platform_device.h>13#include <linux/regmap.h>14 15#include <dt-bindings/clock/qcom,ipq9574-gcc.h>16#include <dt-bindings/reset/qcom,ipq9574-gcc.h>17#include <dt-bindings/interconnect/qcom,ipq9574.h>18 19#include "clk-alpha-pll.h"20#include "clk-branch.h"21#include "clk-rcg.h"22#include "clk-regmap.h"23#include "clk-regmap-divider.h"24#include "clk-regmap-mux.h"25#include "clk-regmap-phy-mux.h"26#include "common.h"27#include "reset.h"28 29/* Need to match the order of clocks in DT binding */30enum {31 DT_XO,32 DT_SLEEP_CLK,33 DT_BIAS_PLL_UBI_NC_CLK,34 DT_PCIE30_PHY0_PIPE_CLK,35 DT_PCIE30_PHY1_PIPE_CLK,36 DT_PCIE30_PHY2_PIPE_CLK,37 DT_PCIE30_PHY3_PIPE_CLK,38 DT_USB3PHY_0_CC_PIPE_CLK,39};40 41enum {42 P_XO,43 P_PCIE30_PHY0_PIPE,44 P_PCIE30_PHY1_PIPE,45 P_PCIE30_PHY2_PIPE,46 P_PCIE30_PHY3_PIPE,47 P_USB3PHY_0_PIPE,48 P_GPLL0,49 P_GPLL0_DIV2,50 P_GPLL0_OUT_AUX,51 P_GPLL2,52 P_GPLL4,53 P_PI_SLEEP,54 P_BIAS_PLL_UBI_NC_CLK,55};56 57static const struct parent_map gcc_xo_map[] = {58 { P_XO, 0 },59};60 61static const struct clk_parent_data gcc_xo_data[] = {62 { .index = DT_XO },63};64 65static const struct clk_parent_data gcc_sleep_clk_data[] = {66 { .index = DT_SLEEP_CLK },67};68 69static struct clk_alpha_pll gpll0_main = {70 .offset = 0x20000,71 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],72 .clkr = {73 .enable_reg = 0x0b000,74 .enable_mask = BIT(0),75 .hw.init = &(const struct clk_init_data) {76 .name = "gpll0_main",77 .parent_data = gcc_xo_data,78 .num_parents = ARRAY_SIZE(gcc_xo_data),79 .ops = &clk_alpha_pll_ops,80 },81 },82};83 84static struct clk_fixed_factor gpll0_out_main_div2 = {85 .mult = 1,86 .div = 2,87 .hw.init = &(const struct clk_init_data) {88 .name = "gpll0_out_main_div2",89 .parent_hws = (const struct clk_hw *[]) {90 &gpll0_main.clkr.hw91 },92 .num_parents = 1,93 .ops = &clk_fixed_factor_ops,94 },95};96 97static struct clk_alpha_pll_postdiv gpll0 = {98 .offset = 0x20000,99 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],100 .width = 4,101 .clkr.hw.init = &(const struct clk_init_data) {102 .name = "gpll0",103 .parent_hws = (const struct clk_hw *[]) {104 &gpll0_main.clkr.hw105 },106 .num_parents = 1,107 .ops = &clk_alpha_pll_postdiv_ro_ops,108 },109};110 111static struct clk_alpha_pll gpll4_main = {112 .offset = 0x22000,113 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],114 .clkr = {115 .enable_reg = 0x0b000,116 .enable_mask = BIT(2),117 .hw.init = &(const struct clk_init_data) {118 .name = "gpll4_main",119 .parent_data = gcc_xo_data,120 .num_parents = ARRAY_SIZE(gcc_xo_data),121 .ops = &clk_alpha_pll_ops,122 },123 },124};125 126static struct clk_alpha_pll_postdiv gpll4 = {127 .offset = 0x22000,128 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],129 .width = 4,130 .clkr.hw.init = &(const struct clk_init_data) {131 .name = "gpll4",132 .parent_hws = (const struct clk_hw *[]) {133 &gpll4_main.clkr.hw134 },135 .num_parents = 1,136 .ops = &clk_alpha_pll_postdiv_ro_ops,137 },138};139 140static struct clk_alpha_pll gpll2_main = {141 .offset = 0x21000,142 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],143 .clkr = {144 .enable_reg = 0x0b000,145 .enable_mask = BIT(1),146 .hw.init = &(const struct clk_init_data) {147 .name = "gpll2_main",148 .parent_data = gcc_xo_data,149 .num_parents = ARRAY_SIZE(gcc_xo_data),150 .ops = &clk_alpha_pll_ops,151 },152 },153};154 155static struct clk_alpha_pll_postdiv gpll2 = {156 .offset = 0x21000,157 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],158 .width = 4,159 .clkr.hw.init = &(const struct clk_init_data) {160 .name = "gpll2",161 .parent_hws = (const struct clk_hw *[]) {162 &gpll2_main.clkr.hw163 },164 .num_parents = 1,165 .ops = &clk_alpha_pll_postdiv_ro_ops,166 },167};168 169static struct clk_branch gcc_sleep_clk_src = {170 .halt_reg = 0x3400c,171 .clkr = {172 .enable_reg = 0x3400c,173 .enable_mask = BIT(1),174 .hw.init = &(const struct clk_init_data) {175 .name = "gcc_sleep_clk_src",176 .parent_data = gcc_sleep_clk_data,177 .num_parents = ARRAY_SIZE(gcc_sleep_clk_data),178 .flags = CLK_IS_CRITICAL,179 .ops = &clk_branch2_ops,180 },181 },182};183 184static const struct clk_parent_data gcc_xo_gpll0_gpll0_out_main_div2[] = {185 { .index = DT_XO },186 { .hw = &gpll0.clkr.hw },187 { .hw = &gpll0_out_main_div2.hw },188};189 190static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_map[] = {191 { P_XO, 0 },192 { P_GPLL0, 1 },193 { P_GPLL0_DIV2, 4 },194};195 196static const struct clk_parent_data gcc_xo_gpll0[] = {197 { .index = DT_XO },198 { .hw = &gpll0.clkr.hw },199};200 201static const struct parent_map gcc_xo_gpll0_map[] = {202 { P_XO, 0 },203 { P_GPLL0, 1 },204};205 206static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = {207 { .index = DT_XO },208 { .hw = &gpll0.clkr.hw },209 { .hw = &gpll4.clkr.hw },210};211 212static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {213 { P_XO, 0 },214 { P_GPLL0, 1 },215 { P_GPLL4, 2 },216};217 218static const struct clk_parent_data gcc_xo_gpll0_gpll0_div2_gpll0[] = {219 { .index = DT_XO },220 { .hw = &gpll0.clkr.hw },221 { .hw = &gpll0_out_main_div2.hw },222 { .hw = &gpll0.clkr.hw },223};224 225static const struct parent_map gcc_xo_gpll0_gpll0_div2_gpll0_map[] = {226 { P_XO, 0 },227 { P_GPLL0, 1 },228 { P_GPLL0_DIV2, 4 },229 { P_GPLL0, 5 },230};231 232static const struct clk_parent_data gcc_xo_gpll0_gpll0_sleep_clk[] = {233 { .index = DT_XO },234 { .hw = &gpll0.clkr.hw },235 { .hw = &gpll0_out_main_div2.hw },236 { .index = DT_SLEEP_CLK },237};238 239static const struct parent_map gcc_xo_gpll0_gpll0_sleep_clk_map[] = {240 { P_XO, 0 },241 { P_GPLL0, 1 },242 { P_GPLL0_DIV2, 4 },243 { P_PI_SLEEP, 6 },244};245 246static const struct clk_parent_data gcc_xo_gpll0_core_pi_sleep_clk[] = {247 { .index = DT_XO },248 { .hw = &gpll0.clkr.hw },249 { .index = DT_SLEEP_CLK },250};251 252static const struct parent_map gcc_xo_gpll0_core_pi_sleep_clk_map[] = {253 { P_XO, 0 },254 { P_GPLL0, 2 },255 { P_PI_SLEEP, 6 },256};257 258static const struct clk_parent_data gcc_xo_gpll0_gpll4_bias_pll_ubi_nc_clk[] = {259 { .index = DT_XO },260 { .hw = &gpll0.clkr.hw },261 { .hw = &gpll4.clkr.hw },262 { .index = DT_BIAS_PLL_UBI_NC_CLK },263};264 265static const struct parent_map gcc_xo_gpll0_gpll4_bias_pll_ubi_nc_clk_map[] = {266 { P_XO, 0 },267 { P_GPLL0, 1 },268 { P_GPLL4, 2 },269 { P_BIAS_PLL_UBI_NC_CLK, 3 },270};271 272static const struct clk_parent_data273 gcc_xo_gpll0_gpll0_aux_core_pi_sleep_clk[] = {274 { .index = DT_XO },275 { .hw = &gpll0.clkr.hw },276 { .hw = &gpll0.clkr.hw },277 { .index = DT_SLEEP_CLK },278};279 280static const struct parent_map281 gcc_xo_gpll0_gpll0_aux_core_pi_sleep_clk_map[] = {282 { P_XO, 0 },283 { P_GPLL0, 1 },284 { P_GPLL0_OUT_AUX, 2 },285 { P_PI_SLEEP, 6 },286};287 288static const struct clk_parent_data gcc_xo_gpll0_out_main_div2_gpll0[] = {289 { .index = DT_XO },290 { .hw = &gpll0.clkr.hw },291 { .hw = &gpll0_out_main_div2.hw },292};293 294static const struct parent_map gcc_xo_gpll0_out_main_div2_gpll0_map[] = {295 { P_XO, 0 },296 { P_GPLL0, 1 },297 { P_GPLL0_DIV2, 4 },298};299 300static const struct clk_parent_data301 gcc_xo_gpll4_gpll0_gpll0_out_main_div2[] = {302 { .index = DT_XO },303 { .hw = &gpll4.clkr.hw },304 { .hw = &gpll0.clkr.hw },305 { .hw = &gpll0_out_main_div2.hw },306};307 308static const struct parent_map gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map[] = {309 { P_XO, 0 },310 { P_GPLL4, 1 },311 { P_GPLL0, 3 },312 { P_GPLL0_DIV2, 4 },313};314 315static const struct clk_parent_data gcc_usb3phy_0_cc_pipe_clk_xo[] = {316 { .index = DT_USB3PHY_0_CC_PIPE_CLK },317 { .index = DT_XO },318};319 320static const struct parent_map gcc_usb3phy_0_cc_pipe_clk_xo_map[] = {321 { P_USB3PHY_0_PIPE, 0 },322 { P_XO, 2 },323};324 325static const struct clk_parent_data326 gcc_xo_gpll0_gpll2_gpll0_out_main_div2[] = {327 { .index = DT_XO },328 { .hw = &gpll0.clkr.hw },329 { .hw = &gpll2.clkr.hw },330 { .hw = &gpll0_out_main_div2.hw },331};332 333static const struct parent_map gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map[] = {334 { P_XO, 0 },335 { P_GPLL0, 1 },336 { P_GPLL2, 2 },337 { P_GPLL0_DIV2, 4 },338};339 340static const struct clk_parent_data gcc_xo_gpll0_gpll4_gpll0_div2[] = {341 { .index = DT_XO},342 { .hw = &gpll0.clkr.hw },343 { .hw = &gpll4.clkr.hw },344 { .hw = &gpll0_out_main_div2.hw },345};346 347static const struct parent_map gcc_xo_gpll0_gpll4_gpll0_div2_map[] = {348 { P_XO, 0 },349 { P_GPLL0, 1 },350 { P_GPLL4, 2 },351 { P_GPLL0_DIV2, 4 },352};353 354static const struct clk_parent_data gcc_xo_gpll4_gpll0_gpll0_div2[] = {355 { .index = DT_XO },356 { .hw = &gpll4.clkr.hw },357 { .hw = &gpll0.clkr.hw },358 { .hw = &gpll0_out_main_div2.hw },359};360 361static const struct parent_map gcc_xo_gpll4_gpll0_gpll0_div2_map[] = {362 { P_XO, 0 },363 { P_GPLL4, 1 },364 { P_GPLL0, 2 },365 { P_GPLL0_DIV2, 4 },366};367 368static const struct clk_parent_data gcc_xo_gpll0_gpll2[] = {369 { .index = DT_XO },370 { .hw = &gpll0.clkr.hw },371 { .hw = &gpll2.clkr.hw },372};373 374static const struct parent_map gcc_xo_gpll0_gpll2_map[] = {375 { P_XO, 0 },376 { P_GPLL0, 1 },377 { P_GPLL2, 2 },378};379 380static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll4_pi_sleep[] = {381 { .index = DT_XO },382 { .hw = &gpll0.clkr.hw },383 { .hw = &gpll2.clkr.hw },384 { .hw = &gpll4.clkr.hw },385 { .index = DT_SLEEP_CLK },386};387 388static const struct parent_map gcc_xo_gpll0_gpll2_gpll4_pi_sleep_map[] = {389 { P_XO, 0 },390 { P_GPLL0, 1 },391 { P_GPLL2, 2 },392 { P_GPLL4, 3 },393 { P_PI_SLEEP, 6 },394};395 396static const struct clk_parent_data gcc_xo_gpll0_gpll0_aux_gpll2[] = {397 { .index = DT_XO },398 { .hw = &gpll0.clkr.hw },399 { .hw = &gpll0.clkr.hw },400 { .hw = &gpll2.clkr.hw },401};402 403static const struct parent_map gcc_xo_gpll0_gpll0_aux_gpll2_map[] = {404 { P_XO, 0 },405 { P_GPLL0, 1 },406 { P_GPLL0_OUT_AUX, 2 },407 { P_GPLL2, 3 },408};409 410static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {411 F(24000000, P_XO, 1, 0, 0),412 F(50000000, P_GPLL0, 16, 0, 0),413 F(100000000, P_GPLL0, 8, 0, 0),414 { }415};416 417static struct clk_rcg2 apss_ahb_clk_src = {418 .cmd_rcgr = 0x2400c,419 .freq_tbl = ftbl_apss_ahb_clk_src,420 .hid_width = 5,421 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,422 .clkr.hw.init = &(const struct clk_init_data) {423 .name = "apss_ahb_clk_src",424 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,425 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),426 .ops = &clk_rcg2_ops,427 },428};429 430static const struct freq_tbl ftbl_apss_axi_clk_src[] = {431 F(533000000, P_GPLL0, 1.5, 0, 0),432 { }433};434 435static struct clk_rcg2 apss_axi_clk_src = {436 .cmd_rcgr = 0x24004,437 .freq_tbl = ftbl_apss_axi_clk_src,438 .hid_width = 5,439 .parent_map = gcc_xo_gpll0_gpll0_div2_gpll0_map,440 .clkr.hw.init = &(const struct clk_init_data) {441 .name = "apss_axi_clk_src",442 .parent_data = gcc_xo_gpll0_gpll0_div2_gpll0,443 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_div2_gpll0),444 .ops = &clk_rcg2_ops,445 },446};447 448static const struct freq_tbl ftbl_blsp1_qup_i2c_apps_clk_src[] = {449 F(9600000, P_XO, 2.5, 0, 0),450 F(24000000, P_XO, 1, 0, 0),451 F(50000000, P_GPLL0, 16, 0, 0),452 { }453};454 455static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {456 .cmd_rcgr = 0x02018,457 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,458 .hid_width = 5,459 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,460 .clkr.hw.init = &(const struct clk_init_data) {461 .name = "blsp1_qup1_i2c_apps_clk_src",462 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,463 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),464 .ops = &clk_rcg2_ops,465 },466};467 468static const struct freq_tbl ftbl_blsp1_qup_spi_apps_clk_src[] = {469 F(960000, P_XO, 10, 2, 5),470 F(4800000, P_XO, 5, 0, 0),471 F(9600000, P_XO, 2, 4, 5),472 F(16000000, P_GPLL0, 10, 1, 5),473 F(24000000, P_XO, 1, 0, 0),474 F(25000000, P_GPLL0, 16, 1, 2),475 F(50000000, P_GPLL0, 16, 0, 0),476 { }477};478 479static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {480 .cmd_rcgr = 0x02004,481 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,482 .mnd_width = 8,483 .hid_width = 5,484 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,485 .clkr.hw.init = &(const struct clk_init_data) {486 .name = "blsp1_qup1_spi_apps_clk_src",487 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,488 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),489 .ops = &clk_rcg2_ops,490 },491};492 493static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {494 .cmd_rcgr = 0x03018,495 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,496 .hid_width = 5,497 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,498 .clkr.hw.init = &(const struct clk_init_data) {499 .name = "blsp1_qup2_i2c_apps_clk_src",500 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,501 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),502 .ops = &clk_rcg2_ops,503 },504};505 506static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {507 .cmd_rcgr = 0x03004,508 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,509 .mnd_width = 8,510 .hid_width = 5,511 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,512 .clkr.hw.init = &(const struct clk_init_data) {513 .name = "blsp1_qup2_spi_apps_clk_src",514 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,515 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),516 .ops = &clk_rcg2_ops,517 },518};519 520static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {521 .cmd_rcgr = 0x04018,522 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,523 .hid_width = 5,524 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,525 .clkr.hw.init = &(const struct clk_init_data) {526 .name = "blsp1_qup3_i2c_apps_clk_src",527 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,528 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),529 .ops = &clk_rcg2_ops,530 },531};532 533static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {534 .cmd_rcgr = 0x04004,535 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,536 .mnd_width = 8,537 .hid_width = 5,538 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,539 .clkr.hw.init = &(const struct clk_init_data) {540 .name = "blsp1_qup3_spi_apps_clk_src",541 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,542 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),543 .ops = &clk_rcg2_ops,544 },545};546 547static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {548 .cmd_rcgr = 0x05018,549 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,550 .hid_width = 5,551 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,552 .clkr.hw.init = &(const struct clk_init_data) {553 .name = "blsp1_qup4_i2c_apps_clk_src",554 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,555 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),556 .ops = &clk_rcg2_ops,557 },558};559 560static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {561 .cmd_rcgr = 0x05004,562 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,563 .mnd_width = 8,564 .hid_width = 5,565 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,566 .clkr.hw.init = &(const struct clk_init_data) {567 .name = "blsp1_qup4_spi_apps_clk_src",568 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,569 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),570 .ops = &clk_rcg2_ops,571 },572};573 574static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {575 .cmd_rcgr = 0x06018,576 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,577 .hid_width = 5,578 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,579 .clkr.hw.init = &(const struct clk_init_data) {580 .name = "blsp1_qup5_i2c_apps_clk_src",581 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,582 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),583 .ops = &clk_rcg2_ops,584 },585};586 587static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {588 .cmd_rcgr = 0x06004,589 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,590 .mnd_width = 8,591 .hid_width = 5,592 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,593 .clkr.hw.init = &(const struct clk_init_data) {594 .name = "blsp1_qup5_spi_apps_clk_src",595 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,596 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),597 .ops = &clk_rcg2_ops,598 },599};600 601static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {602 .cmd_rcgr = 0x07018,603 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,604 .hid_width = 5,605 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,606 .clkr.hw.init = &(const struct clk_init_data) {607 .name = "blsp1_qup6_i2c_apps_clk_src",608 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,609 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),610 .ops = &clk_rcg2_ops,611 },612};613 614static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {615 .cmd_rcgr = 0x07004,616 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,617 .mnd_width = 8,618 .hid_width = 5,619 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,620 .clkr.hw.init = &(const struct clk_init_data) {621 .name = "blsp1_qup6_spi_apps_clk_src",622 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,623 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),624 .ops = &clk_rcg2_ops,625 },626};627 628static const struct freq_tbl ftbl_blsp1_uart_apps_clk_src[] = {629 F(3686400, P_GPLL0_DIV2, 1, 144, 15625),630 F(7372800, P_GPLL0_DIV2, 1, 288, 15625),631 F(14745600, P_GPLL0_DIV2, 1, 576, 15625),632 F(24000000, P_XO, 1, 0, 0),633 F(25000000, P_GPLL0, 16, 1, 2),634 F(32000000, P_GPLL0, 1, 1, 25),635 F(40000000, P_GPLL0, 1, 1, 20),636 F(46400000, P_GPLL0, 1, 29, 500),637 F(48000000, P_GPLL0, 1, 3, 50),638 F(51200000, P_GPLL0, 1, 8, 125),639 F(56000000, P_GPLL0, 1, 7, 100),640 F(58982400, P_GPLL0, 1, 1152, 15625),641 F(60000000, P_GPLL0, 1, 3, 40),642 F(64000000, P_GPLL0, 12.5, 0, 0),643 { }644};645 646static struct clk_rcg2 blsp1_uart1_apps_clk_src = {647 .cmd_rcgr = 0x0202c,648 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,649 .mnd_width = 16,650 .hid_width = 5,651 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,652 .clkr.hw.init = &(const struct clk_init_data) {653 .name = "blsp1_uart1_apps_clk_src",654 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,655 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),656 .ops = &clk_rcg2_ops,657 },658};659 660static struct clk_rcg2 blsp1_uart2_apps_clk_src = {661 .cmd_rcgr = 0x0302c,662 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,663 .mnd_width = 16,664 .hid_width = 5,665 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,666 .clkr.hw.init = &(const struct clk_init_data) {667 .name = "blsp1_uart2_apps_clk_src",668 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,669 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),670 .ops = &clk_rcg2_ops,671 },672};673 674static struct clk_rcg2 blsp1_uart3_apps_clk_src = {675 .cmd_rcgr = 0x0402c,676 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,677 .mnd_width = 16,678 .hid_width = 5,679 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,680 .clkr.hw.init = &(const struct clk_init_data) {681 .name = "blsp1_uart3_apps_clk_src",682 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,683 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),684 .ops = &clk_rcg2_ops,685 },686};687 688static struct clk_rcg2 blsp1_uart4_apps_clk_src = {689 .cmd_rcgr = 0x0502c,690 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,691 .mnd_width = 16,692 .hid_width = 5,693 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,694 .clkr.hw.init = &(const struct clk_init_data) {695 .name = "blsp1_uart4_apps_clk_src",696 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,697 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),698 .ops = &clk_rcg2_ops,699 },700};701 702static struct clk_rcg2 blsp1_uart5_apps_clk_src = {703 .cmd_rcgr = 0x0602c,704 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,705 .mnd_width = 16,706 .hid_width = 5,707 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,708 .clkr.hw.init = &(const struct clk_init_data) {709 .name = "blsp1_uart5_apps_clk_src",710 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,711 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),712 .ops = &clk_rcg2_ops,713 },714};715 716static struct clk_rcg2 blsp1_uart6_apps_clk_src = {717 .cmd_rcgr = 0x0702c,718 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,719 .mnd_width = 16,720 .hid_width = 5,721 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,722 .clkr.hw.init = &(const struct clk_init_data) {723 .name = "blsp1_uart6_apps_clk_src",724 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,725 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),726 .ops = &clk_rcg2_ops,727 },728};729 730static const struct freq_tbl ftbl_gcc_crypto_clk_src[] = {731 F(160000000, P_GPLL0, 5, 0, 0),732 { }733};734 735static struct clk_rcg2 gcc_crypto_clk_src = {736 .cmd_rcgr = 0x16004,737 .freq_tbl = ftbl_gcc_crypto_clk_src,738 .hid_width = 5,739 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,740 .clkr.hw.init = &(const struct clk_init_data) {741 .name = "gcc_crypto_clk_src",742 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,743 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),744 .ops = &clk_rcg2_ops,745 },746};747 748static struct clk_branch gcc_crypto_clk = {749 .halt_reg = 0x1600c,750 .halt_check = BRANCH_HALT_VOTED,751 .clkr = {752 .enable_reg = 0x0b004,753 .enable_mask = BIT(14),754 .hw.init = &(const struct clk_init_data) {755 .name = "gcc_crypto_clk",756 .parent_hws = (const struct clk_hw *[]) {757 &gcc_crypto_clk_src.clkr.hw },758 .num_parents = 1,759 .flags = CLK_SET_RATE_PARENT,760 .ops = &clk_branch2_ops,761 },762 },763};764 765static struct clk_branch gcc_apss_ahb_clk = {766 .halt_reg = 0x24018,767 .halt_check = BRANCH_HALT_VOTED,768 .clkr = {769 .enable_reg = 0x0b004,770 .enable_mask = BIT(0),771 .hw.init = &(const struct clk_init_data) {772 .name = "gcc_apss_ahb_clk",773 .parent_hws = (const struct clk_hw *[]) {774 &apss_ahb_clk_src.clkr.hw775 },776 .num_parents = 1,777 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,778 .ops = &clk_branch2_ops,779 },780 },781};782 783static struct clk_branch gcc_apss_axi_clk = {784 .halt_reg = 0x2401c,785 .halt_check = BRANCH_HALT_VOTED,786 .clkr = {787 .enable_reg = 0x0b004,788 .enable_mask = BIT(1),789 .hw.init = &(const struct clk_init_data) {790 .name = "gcc_apss_axi_clk",791 .parent_hws = (const struct clk_hw *[]) {792 &apss_axi_clk_src.clkr.hw793 },794 .num_parents = 1,795 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,796 .ops = &clk_branch2_ops,797 },798 },799};800 801static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {802 .halt_reg = 0x2024,803 .clkr = {804 .enable_reg = 0x2024,805 .enable_mask = BIT(0),806 .hw.init = &(const struct clk_init_data) {807 .name = "gcc_blsp1_qup1_i2c_apps_clk",808 .parent_hws = (const struct clk_hw *[]) {809 &blsp1_qup1_i2c_apps_clk_src.clkr.hw810 },811 .num_parents = 1,812 .flags = CLK_SET_RATE_PARENT,813 .ops = &clk_branch2_ops,814 },815 },816};817 818static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {819 .halt_reg = 0x02020,820 .clkr = {821 .enable_reg = 0x02020,822 .enable_mask = BIT(0),823 .hw.init = &(const struct clk_init_data) {824 .name = "gcc_blsp1_qup1_spi_apps_clk",825 .parent_hws = (const struct clk_hw *[]) {826 &blsp1_qup1_spi_apps_clk_src.clkr.hw827 },828 .num_parents = 1,829 .flags = CLK_SET_RATE_PARENT,830 .ops = &clk_branch2_ops,831 },832 },833};834 835static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {836 .halt_reg = 0x03024,837 .clkr = {838 .enable_reg = 0x03024,839 .enable_mask = BIT(0),840 .hw.init = &(const struct clk_init_data) {841 .name = "gcc_blsp1_qup2_i2c_apps_clk",842 .parent_hws = (const struct clk_hw *[]) {843 &blsp1_qup2_i2c_apps_clk_src.clkr.hw844 },845 .num_parents = 1,846 .flags = CLK_SET_RATE_PARENT,847 .ops = &clk_branch2_ops,848 },849 },850};851 852static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {853 .halt_reg = 0x03020,854 .clkr = {855 .enable_reg = 0x03020,856 .enable_mask = BIT(0),857 .hw.init = &(const struct clk_init_data) {858 .name = "gcc_blsp1_qup2_spi_apps_clk",859 .parent_hws = (const struct clk_hw *[]) {860 &blsp1_qup2_spi_apps_clk_src.clkr.hw861 },862 .num_parents = 1,863 .flags = CLK_SET_RATE_PARENT,864 .ops = &clk_branch2_ops,865 },866 },867};868 869static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {870 .halt_reg = 0x04024,871 .clkr = {872 .enable_reg = 0x04024,873 .enable_mask = BIT(0),874 .hw.init = &(const struct clk_init_data) {875 .name = "gcc_blsp1_qup3_i2c_apps_clk",876 .parent_hws = (const struct clk_hw *[]) {877 &blsp1_qup3_i2c_apps_clk_src.clkr.hw878 },879 .num_parents = 1,880 .flags = CLK_SET_RATE_PARENT,881 .ops = &clk_branch2_ops,882 },883 },884};885 886static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {887 .halt_reg = 0x04020,888 .clkr = {889 .enable_reg = 0x04020,890 .enable_mask = BIT(0),891 .hw.init = &(const struct clk_init_data) {892 .name = "gcc_blsp1_qup3_spi_apps_clk",893 .parent_hws = (const struct clk_hw *[]) {894 &blsp1_qup3_spi_apps_clk_src.clkr.hw895 },896 .num_parents = 1,897 .flags = CLK_SET_RATE_PARENT,898 .ops = &clk_branch2_ops,899 },900 },901};902 903static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {904 .halt_reg = 0x05024,905 .clkr = {906 .enable_reg = 0x05024,907 .enable_mask = BIT(0),908 .hw.init = &(const struct clk_init_data) {909 .name = "gcc_blsp1_qup4_i2c_apps_clk",910 .parent_hws = (const struct clk_hw *[]) {911 &blsp1_qup4_i2c_apps_clk_src.clkr.hw912 },913 .num_parents = 1,914 .flags = CLK_SET_RATE_PARENT,915 .ops = &clk_branch2_ops,916 },917 },918};919 920static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {921 .halt_reg = 0x05020,922 .clkr = {923 .enable_reg = 0x05020,924 .enable_mask = BIT(0),925 .hw.init = &(const struct clk_init_data) {926 .name = "gcc_blsp1_qup4_spi_apps_clk",927 .parent_hws = (const struct clk_hw *[]) {928 &blsp1_qup4_spi_apps_clk_src.clkr.hw929 },930 .num_parents = 1,931 .flags = CLK_SET_RATE_PARENT,932 .ops = &clk_branch2_ops,933 },934 },935};936 937static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {938 .halt_reg = 0x06024,939 .clkr = {940 .enable_reg = 0x06024,941 .enable_mask = BIT(0),942 .hw.init = &(const struct clk_init_data) {943 .name = "gcc_blsp1_qup5_i2c_apps_clk",944 .parent_hws = (const struct clk_hw *[]) {945 &blsp1_qup5_i2c_apps_clk_src.clkr.hw946 },947 .num_parents = 1,948 .flags = CLK_SET_RATE_PARENT,949 .ops = &clk_branch2_ops,950 },951 },952};953 954static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {955 .halt_reg = 0x06020,956 .clkr = {957 .enable_reg = 0x06020,958 .enable_mask = BIT(0),959 .hw.init = &(const struct clk_init_data) {960 .name = "gcc_blsp1_qup5_spi_apps_clk",961 .parent_hws = (const struct clk_hw *[]) {962 &blsp1_qup5_spi_apps_clk_src.clkr.hw963 },964 .num_parents = 1,965 .flags = CLK_SET_RATE_PARENT,966 .ops = &clk_branch2_ops,967 },968 },969};970 971static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {972 .halt_reg = 0x07024,973 .clkr = {974 .enable_reg = 0x07024,975 .enable_mask = BIT(0),976 .hw.init = &(const struct clk_init_data) {977 .name = "gcc_blsp1_qup6_i2c_apps_clk",978 .parent_hws = (const struct clk_hw *[]) {979 &blsp1_qup6_i2c_apps_clk_src.clkr.hw980 },981 .num_parents = 1,982 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,983 .ops = &clk_branch2_ops,984 },985 },986};987 988static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {989 .halt_reg = 0x07020,990 .clkr = {991 .enable_reg = 0x07020,992 .enable_mask = BIT(0),993 .hw.init = &(const struct clk_init_data) {994 .name = "gcc_blsp1_qup6_spi_apps_clk",995 .parent_hws = (const struct clk_hw *[]) {996 &blsp1_qup6_spi_apps_clk_src.clkr.hw997 },998 .num_parents = 1,999 .flags = CLK_SET_RATE_PARENT,1000 .ops = &clk_branch2_ops,1001 },1002 },1003};1004 1005static struct clk_branch gcc_blsp1_uart1_apps_clk = {1006 .halt_reg = 0x02040,1007 .clkr = {1008 .enable_reg = 0x02040,1009 .enable_mask = BIT(0),1010 .hw.init = &(const struct clk_init_data) {1011 .name = "gcc_blsp1_uart1_apps_clk",1012 .parent_hws = (const struct clk_hw *[]) {1013 &blsp1_uart1_apps_clk_src.clkr.hw1014 },1015 .num_parents = 1,1016 .flags = CLK_SET_RATE_PARENT,1017 .ops = &clk_branch2_ops,1018 },1019 },1020};1021 1022static struct clk_branch gcc_blsp1_uart2_apps_clk = {1023 .halt_reg = 0x03040,1024 .clkr = {1025 .enable_reg = 0x03040,1026 .enable_mask = BIT(0),1027 .hw.init = &(const struct clk_init_data) {1028 .name = "gcc_blsp1_uart2_apps_clk",1029 .parent_hws = (const struct clk_hw *[]) {1030 &blsp1_uart2_apps_clk_src.clkr.hw1031 },1032 .num_parents = 1,1033 .flags = CLK_SET_RATE_PARENT,1034 .ops = &clk_branch2_ops,1035 },1036 },1037};1038 1039static struct clk_branch gcc_blsp1_uart3_apps_clk = {1040 .halt_reg = 0x04054,1041 .clkr = {1042 .enable_reg = 0x04054,1043 .enable_mask = BIT(0),1044 .hw.init = &(const struct clk_init_data) {1045 .name = "gcc_blsp1_uart3_apps_clk",1046 .parent_hws = (const struct clk_hw *[]) {1047 &blsp1_uart3_apps_clk_src.clkr.hw1048 },1049 .num_parents = 1,1050 .flags = CLK_SET_RATE_PARENT,1051 .ops = &clk_branch2_ops,1052 },1053 },1054};1055 1056static struct clk_branch gcc_blsp1_uart4_apps_clk = {1057 .halt_reg = 0x05040,1058 .clkr = {1059 .enable_reg = 0x05040,1060 .enable_mask = BIT(0),1061 .hw.init = &(const struct clk_init_data) {1062 .name = "gcc_blsp1_uart4_apps_clk",1063 .parent_hws = (const struct clk_hw *[]) {1064 &blsp1_uart4_apps_clk_src.clkr.hw1065 },1066 .num_parents = 1,1067 .flags = CLK_SET_RATE_PARENT,1068 .ops = &clk_branch2_ops,1069 },1070 },1071};1072 1073static struct clk_branch gcc_blsp1_uart5_apps_clk = {1074 .halt_reg = 0x06040,1075 .clkr = {1076 .enable_reg = 0x06040,1077 .enable_mask = BIT(0),1078 .hw.init = &(const struct clk_init_data) {1079 .name = "gcc_blsp1_uart5_apps_clk",1080 .parent_hws = (const struct clk_hw *[]) {1081 &blsp1_uart5_apps_clk_src.clkr.hw1082 },1083 .num_parents = 1,1084 .flags = CLK_SET_RATE_PARENT,1085 .ops = &clk_branch2_ops,1086 },1087 },1088};1089 1090static struct clk_branch gcc_blsp1_uart6_apps_clk = {1091 .halt_reg = 0x07040,1092 .clkr = {1093 .enable_reg = 0x07040,1094 .enable_mask = BIT(0),1095 .hw.init = &(const struct clk_init_data) {1096 .name = "gcc_blsp1_uart6_apps_clk",1097 .parent_hws = (const struct clk_hw *[]) {1098 &blsp1_uart6_apps_clk_src.clkr.hw1099 },1100 .num_parents = 1,1101 .flags = CLK_SET_RATE_PARENT,1102 .ops = &clk_branch2_ops,1103 },1104 },1105};1106 1107static const struct freq_tbl ftbl_pcie0_axi_m_clk_src[] = {1108 F(240000000, P_GPLL4, 5, 0, 0),1109 { }1110};1111 1112static struct clk_rcg2 pcie0_axi_m_clk_src = {1113 .cmd_rcgr = 0x28018,1114 .freq_tbl = ftbl_pcie0_axi_m_clk_src,1115 .hid_width = 5,1116 .parent_map = gcc_xo_gpll0_gpll4_map,1117 .clkr.hw.init = &(const struct clk_init_data) {1118 .name = "pcie0_axi_m_clk_src",1119 .parent_data = gcc_xo_gpll0_gpll4,1120 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),1121 .ops = &clk_rcg2_ops,1122 },1123};1124 1125static struct clk_branch gcc_pcie0_axi_m_clk = {1126 .halt_reg = 0x28038,1127 .clkr = {1128 .enable_reg = 0x28038,1129 .enable_mask = BIT(0),1130 .hw.init = &(const struct clk_init_data) {1131 .name = "gcc_pcie0_axi_m_clk",1132 .parent_hws = (const struct clk_hw *[]) {1133 &pcie0_axi_m_clk_src.clkr.hw1134 },1135 .num_parents = 1,1136 .flags = CLK_SET_RATE_PARENT,1137 .ops = &clk_branch2_ops,1138 },1139 },1140};1141 1142static struct clk_branch gcc_anoc_pcie0_1lane_m_clk = {1143 .halt_reg = 0x2e07c,1144 .clkr = {1145 .enable_reg = 0x2e07c,1146 .enable_mask = BIT(0),1147 .hw.init = &(const struct clk_init_data) {1148 .name = "gcc_anoc_pcie0_1lane_m_clk",1149 .parent_hws = (const struct clk_hw *[]) {1150 &pcie0_axi_m_clk_src.clkr.hw1151 },1152 .num_parents = 1,1153 .flags = CLK_SET_RATE_PARENT,1154 .ops = &clk_branch2_ops,1155 },1156 },1157};1158 1159static struct clk_rcg2 pcie1_axi_m_clk_src = {1160 .cmd_rcgr = 0x29018,1161 .freq_tbl = ftbl_pcie0_axi_m_clk_src,1162 .hid_width = 5,1163 .parent_map = gcc_xo_gpll0_gpll4_map,1164 .clkr.hw.init = &(const struct clk_init_data) {1165 .name = "pcie1_axi_m_clk_src",1166 .parent_data = gcc_xo_gpll0_gpll4,1167 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),1168 .ops = &clk_rcg2_ops,1169 },1170};1171 1172static struct clk_branch gcc_pcie1_axi_m_clk = {1173 .halt_reg = 0x29038,1174 .clkr = {1175 .enable_reg = 0x29038,1176 .enable_mask = BIT(0),1177 .hw.init = &(const struct clk_init_data) {1178 .name = "gcc_pcie1_axi_m_clk",1179 .parent_hws = (const struct clk_hw *[]) {1180 &pcie1_axi_m_clk_src.clkr.hw1181 },1182 .num_parents = 1,1183 .flags = CLK_SET_RATE_PARENT,1184 .ops = &clk_branch2_ops,1185 },1186 },1187};1188 1189static struct clk_branch gcc_anoc_pcie1_1lane_m_clk = {1190 .halt_reg = 0x2e08c,1191 .clkr = {1192 .enable_reg = 0x2e08c,1193 .enable_mask = BIT(0),1194 .hw.init = &(const struct clk_init_data) {1195 .name = "gcc_anoc_pcie1_1lane_m_clk",1196 .parent_hws = (const struct clk_hw *[]) {1197 &pcie1_axi_m_clk_src.clkr.hw1198 },1199 .num_parents = 1,1200 .flags = CLK_SET_RATE_PARENT,1201 .ops = &clk_branch2_ops,1202 },1203 },1204};1205 1206static const struct freq_tbl ftbl_pcie2_axi_m_clk_src[] = {1207 F(342857143, P_GPLL4, 3.5, 0, 0),1208 { }1209};1210 1211static struct clk_rcg2 pcie2_axi_m_clk_src = {1212 .cmd_rcgr = 0x2a018,1213 .freq_tbl = ftbl_pcie2_axi_m_clk_src,1214 .hid_width = 5,1215 .parent_map = gcc_xo_gpll0_gpll4_bias_pll_ubi_nc_clk_map,1216 .clkr.hw.init = &(const struct clk_init_data) {1217 .name = "pcie2_axi_m_clk_src",1218 .parent_data = gcc_xo_gpll0_gpll4_bias_pll_ubi_nc_clk,1219 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4_bias_pll_ubi_nc_clk),1220 .ops = &clk_rcg2_ops,1221 },1222};1223 1224static struct clk_branch gcc_pcie2_axi_m_clk = {1225 .halt_reg = 0x2a038,1226 .clkr = {1227 .enable_reg = 0x2a038,1228 .enable_mask = BIT(0),1229 .hw.init = &(const struct clk_init_data) {1230 .name = "gcc_pcie2_axi_m_clk",1231 .parent_hws = (const struct clk_hw *[]) {1232 &pcie2_axi_m_clk_src.clkr.hw1233 },1234 .num_parents = 1,1235 .flags = CLK_SET_RATE_PARENT,1236 .ops = &clk_branch2_ops,1237 },1238 },1239};1240 1241static struct clk_branch gcc_anoc_pcie2_2lane_m_clk = {1242 .halt_reg = 0x2e080,1243 .clkr = {1244 .enable_reg = 0x2e080,1245 .enable_mask = BIT(0),1246 .hw.init = &(const struct clk_init_data) {1247 .name = "gcc_anoc_pcie2_2lane_m_clk",1248 .parent_hws = (const struct clk_hw *[]) {1249 &pcie2_axi_m_clk_src.clkr.hw1250 },1251 .num_parents = 1,1252 .flags = CLK_SET_RATE_PARENT,1253 .ops = &clk_branch2_ops,1254 },1255 },1256};1257 1258static struct clk_rcg2 pcie3_axi_m_clk_src = {1259 .cmd_rcgr = 0x2b018,1260 .freq_tbl = ftbl_pcie2_axi_m_clk_src,1261 .hid_width = 5,1262 .parent_map = gcc_xo_gpll0_gpll4_bias_pll_ubi_nc_clk_map,1263 .clkr.hw.init = &(const struct clk_init_data) {1264 .name = "pcie3_axi_m_clk_src",1265 .parent_data = gcc_xo_gpll0_gpll4_bias_pll_ubi_nc_clk,1266 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4_bias_pll_ubi_nc_clk),1267 .ops = &clk_rcg2_ops,1268 },1269};1270 1271static struct clk_branch gcc_pcie3_axi_m_clk = {1272 .halt_reg = 0x2b038,1273 .clkr = {1274 .enable_reg = 0x2b038,1275 .enable_mask = BIT(0),1276 .hw.init = &(const struct clk_init_data) {1277 .name = "gcc_pcie3_axi_m_clk",1278 .parent_hws = (const struct clk_hw *[]) {1279 &pcie3_axi_m_clk_src.clkr.hw1280 },1281 .num_parents = 1,1282 .flags = CLK_SET_RATE_PARENT,1283 .ops = &clk_branch2_ops,1284 },1285 },1286};1287 1288static struct clk_branch gcc_anoc_pcie3_2lane_m_clk = {1289 .halt_reg = 0x2e090,1290 .clkr = {1291 .enable_reg = 0x2e090,1292 .enable_mask = BIT(0),1293 .hw.init = &(const struct clk_init_data) {1294 .name = "gcc_anoc_pcie3_2lane_m_clk",1295 .parent_hws = (const struct clk_hw *[]) {1296 &pcie3_axi_m_clk_src.clkr.hw1297 },1298 .num_parents = 1,1299 .flags = CLK_SET_RATE_PARENT,1300 .ops = &clk_branch2_ops,1301 },1302 },1303};1304 1305static struct clk_rcg2 pcie0_axi_s_clk_src = {1306 .cmd_rcgr = 0x28020,1307 .freq_tbl = ftbl_pcie0_axi_m_clk_src,1308 .hid_width = 5,1309 .parent_map = gcc_xo_gpll0_gpll4_map,1310 .clkr.hw.init = &(const struct clk_init_data) {1311 .name = "pcie0_axi_s_clk_src",1312 .parent_data = gcc_xo_gpll0_gpll4,1313 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),1314 .ops = &clk_rcg2_ops,1315 },1316};1317 1318static struct clk_branch gcc_pcie0_axi_s_clk = {1319 .halt_reg = 0x2803c,1320 .clkr = {1321 .enable_reg = 0x2803c,1322 .enable_mask = BIT(0),1323 .hw.init = &(const struct clk_init_data) {1324 .name = "gcc_pcie0_axi_s_clk",1325 .parent_hws = (const struct clk_hw *[]) {1326 &pcie0_axi_s_clk_src.clkr.hw1327 },1328 .num_parents = 1,1329 .flags = CLK_SET_RATE_PARENT,1330 .ops = &clk_branch2_ops,1331 },1332 },1333};1334 1335static struct clk_branch gcc_pcie0_axi_s_bridge_clk = {1336 .halt_reg = 0x28040,1337 .clkr = {1338 .enable_reg = 0x28040,1339 .enable_mask = BIT(0),1340 .hw.init = &(const struct clk_init_data) {1341 .name = "gcc_pcie0_axi_s_bridge_clk",1342 .parent_hws = (const struct clk_hw *[]) {1343 &pcie0_axi_s_clk_src.clkr.hw1344 },1345 .num_parents = 1,1346 .flags = CLK_SET_RATE_PARENT,1347 .ops = &clk_branch2_ops,1348 },1349 },1350};1351 1352static struct clk_branch gcc_snoc_pcie0_1lane_s_clk = {1353 .halt_reg = 0x2e048,1354 .clkr = {1355 .enable_reg = 0x2e048,1356 .enable_mask = BIT(0),1357 .hw.init = &(const struct clk_init_data) {1358 .name = "gcc_snoc_pcie0_1lane_s_clk",1359 .parent_hws = (const struct clk_hw *[]) {1360 &pcie0_axi_s_clk_src.clkr.hw1361 },1362 .num_parents = 1,1363 .flags = CLK_SET_RATE_PARENT,1364 .ops = &clk_branch2_ops,1365 },1366 },1367};1368 1369static struct clk_rcg2 pcie1_axi_s_clk_src = {1370 .cmd_rcgr = 0x29020,1371 .freq_tbl = ftbl_pcie0_axi_m_clk_src,1372 .hid_width = 5,1373 .parent_map = gcc_xo_gpll0_gpll4_map,1374 .clkr.hw.init = &(const struct clk_init_data) {1375 .name = "pcie1_axi_s_clk_src",1376 .parent_data = gcc_xo_gpll0_gpll4,1377 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),1378 .ops = &clk_rcg2_ops,1379 },1380};1381 1382static struct clk_branch gcc_pcie1_axi_s_clk = {1383 .halt_reg = 0x2903c,1384 .clkr = {1385 .enable_reg = 0x2903c,1386 .enable_mask = BIT(0),1387 .hw.init = &(const struct clk_init_data) {1388 .name = "gcc_pcie1_axi_s_clk",1389 .parent_hws = (const struct clk_hw *[]) {1390 &pcie1_axi_s_clk_src.clkr.hw1391 },1392 .num_parents = 1,1393 .flags = CLK_SET_RATE_PARENT,1394 .ops = &clk_branch2_ops,1395 },1396 },1397};1398 1399static struct clk_branch gcc_pcie1_axi_s_bridge_clk = {1400 .halt_reg = 0x29040,1401 .clkr = {1402 .enable_reg = 0x29040,1403 .enable_mask = BIT(0),1404 .hw.init = &(const struct clk_init_data) {1405 .name = "gcc_pcie1_axi_s_bridge_clk",1406 .parent_hws = (const struct clk_hw *[]) {1407 &pcie1_axi_s_clk_src.clkr.hw1408 },1409 .num_parents = 1,1410 .flags = CLK_SET_RATE_PARENT,1411 .ops = &clk_branch2_ops,1412 },1413 },1414};1415 1416static struct clk_branch gcc_snoc_pcie1_1lane_s_clk = {1417 .halt_reg = 0x2e04c,1418 .clkr = {1419 .enable_reg = 0x2e04c,1420 .enable_mask = BIT(0),1421 .hw.init = &(const struct clk_init_data) {1422 .name = "gcc_snoc_pcie1_1lane_s_clk",1423 .parent_hws = (const struct clk_hw *[]) {1424 &pcie1_axi_s_clk_src.clkr.hw1425 },1426 .num_parents = 1,1427 .flags = CLK_SET_RATE_PARENT,1428 .ops = &clk_branch2_ops,1429 },1430 },1431};1432 1433static struct clk_rcg2 pcie2_axi_s_clk_src = {1434 .cmd_rcgr = 0x2a020,1435 .freq_tbl = ftbl_pcie0_axi_m_clk_src,1436 .hid_width = 5,1437 .parent_map = gcc_xo_gpll0_gpll4_map,1438 .clkr.hw.init = &(const struct clk_init_data) {1439 .name = "pcie2_axi_s_clk_src",1440 .parent_data = gcc_xo_gpll0_gpll4,1441 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),1442 .ops = &clk_rcg2_ops,1443 },1444};1445 1446static struct clk_branch gcc_pcie2_axi_s_clk = {1447 .halt_reg = 0x2a03c,1448 .clkr = {1449 .enable_reg = 0x2a03c,1450 .enable_mask = BIT(0),1451 .hw.init = &(const struct clk_init_data) {1452 .name = "gcc_pcie2_axi_s_clk",1453 .parent_hws = (const struct clk_hw *[]) {1454 &pcie2_axi_s_clk_src.clkr.hw1455 },1456 .num_parents = 1,1457 .flags = CLK_SET_RATE_PARENT,1458 .ops = &clk_branch2_ops,1459 },1460 },1461};1462 1463static struct clk_branch gcc_pcie2_axi_s_bridge_clk = {1464 .halt_reg = 0x2a040,1465 .clkr = {1466 .enable_reg = 0x2a040,1467 .enable_mask = BIT(0),1468 .hw.init = &(const struct clk_init_data) {1469 .name = "gcc_pcie2_axi_s_bridge_clk",1470 .parent_hws = (const struct clk_hw *[]) {1471 &pcie2_axi_s_clk_src.clkr.hw1472 },1473 .num_parents = 1,1474 .flags = CLK_SET_RATE_PARENT,1475 .ops = &clk_branch2_ops,1476 },1477 },1478};1479 1480static struct clk_branch gcc_snoc_pcie2_2lane_s_clk = {1481 .halt_reg = 0x2e050,1482 .clkr = {1483 .enable_reg = 0x2e050,1484 .enable_mask = BIT(0),1485 .hw.init = &(const struct clk_init_data) {1486 .name = "gcc_snoc_pcie2_2lane_s_clk",1487 .parent_hws = (const struct clk_hw *[]) {1488 &pcie2_axi_s_clk_src.clkr.hw1489 },1490 .num_parents = 1,1491 .flags = CLK_SET_RATE_PARENT,1492 .ops = &clk_branch2_ops,1493 },1494 },1495};1496 1497static struct clk_rcg2 pcie3_axi_s_clk_src = {1498 .cmd_rcgr = 0x2b020,1499 .freq_tbl = ftbl_pcie0_axi_m_clk_src,1500 .hid_width = 5,1501 .parent_map = gcc_xo_gpll0_gpll4_map,1502 .clkr.hw.init = &(const struct clk_init_data) {1503 .name = "pcie3_axi_s_clk_src",1504 .parent_data = gcc_xo_gpll0_gpll4,1505 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),1506 .ops = &clk_rcg2_ops,1507 },1508};1509 1510static struct clk_branch gcc_pcie3_axi_s_clk = {1511 .halt_reg = 0x2b03c,1512 .clkr = {1513 .enable_reg = 0x2b03c,1514 .enable_mask = BIT(0),1515 .hw.init = &(const struct clk_init_data) {1516 .name = "gcc_pcie3_axi_s_clk",1517 .parent_hws = (const struct clk_hw *[]) {1518 &pcie3_axi_s_clk_src.clkr.hw1519 },1520 .num_parents = 1,1521 .flags = CLK_SET_RATE_PARENT,1522 .ops = &clk_branch2_ops,1523 },1524 },1525};1526 1527static struct clk_branch gcc_pcie3_axi_s_bridge_clk = {1528 .halt_reg = 0x2b040,1529 .clkr = {1530 .enable_reg = 0x2b040,1531 .enable_mask = BIT(0),1532 .hw.init = &(const struct clk_init_data) {1533 .name = "gcc_pcie3_axi_s_bridge_clk",1534 .parent_hws = (const struct clk_hw *[]) {1535 &pcie3_axi_s_clk_src.clkr.hw1536 },1537 .num_parents = 1,1538 .flags = CLK_SET_RATE_PARENT,1539 .ops = &clk_branch2_ops,1540 },1541 },1542};1543 1544static struct clk_branch gcc_snoc_pcie3_2lane_s_clk = {1545 .halt_reg = 0x2e054,1546 .clkr = {1547 .enable_reg = 0x2e054,1548 .enable_mask = BIT(0),1549 .hw.init = &(const struct clk_init_data) {1550 .name = "gcc_snoc_pcie3_2lane_s_clk",1551 .parent_hws = (const struct clk_hw *[]) {1552 &pcie3_axi_s_clk_src.clkr.hw1553 },1554 .num_parents = 1,1555 .flags = CLK_SET_RATE_PARENT,1556 .ops = &clk_branch2_ops,1557 },1558 },1559};1560 1561static struct clk_regmap_phy_mux pcie0_pipe_clk_src = {1562 .reg = 0x28064,1563 .clkr = {1564 .hw.init = &(const struct clk_init_data) {1565 .name = "pcie0_pipe_clk_src",1566 .parent_data = &(const struct clk_parent_data) {1567 .index = DT_PCIE30_PHY0_PIPE_CLK,1568 },1569 .num_parents = 1,1570 .ops = &clk_regmap_phy_mux_ops,1571 },1572 },1573};1574 1575static struct clk_branch gcc_pcie0_pipe_clk = {1576 .halt_reg = 0x28044,1577 .halt_check = BRANCH_HALT_DELAY,1578 .clkr = {1579 .enable_reg = 0x28044,1580 .enable_mask = BIT(0),1581 .hw.init = &(const struct clk_init_data) {1582 .name = "gcc_pcie0_pipe_clk",1583 .parent_hws = (const struct clk_hw *[]) {1584 &pcie0_pipe_clk_src.clkr.hw1585 },1586 .num_parents = 1,1587 .flags = CLK_SET_RATE_PARENT,1588 .ops = &clk_branch2_ops,1589 },1590 },1591};1592 1593static struct clk_regmap_phy_mux pcie1_pipe_clk_src = {1594 .reg = 0x29064,1595 .clkr = {1596 .hw.init = &(const struct clk_init_data) {1597 .name = "pcie1_pipe_clk_src",1598 .parent_data = &(const struct clk_parent_data) {1599 .index = DT_PCIE30_PHY1_PIPE_CLK,1600 },1601 .num_parents = 1,1602 .ops = &clk_regmap_phy_mux_ops,1603 },1604 },1605};1606 1607static struct clk_branch gcc_pcie1_pipe_clk = {1608 .halt_reg = 0x29044,1609 .halt_check = BRANCH_HALT_DELAY,1610 .clkr = {1611 .enable_reg = 0x29044,1612 .enable_mask = BIT(0),1613 .hw.init = &(const struct clk_init_data) {1614 .name = "gcc_pcie1_pipe_clk",1615 .parent_hws = (const struct clk_hw *[]) {1616 &pcie1_pipe_clk_src.clkr.hw1617 },1618 .num_parents = 1,1619 .flags = CLK_SET_RATE_PARENT,1620 .ops = &clk_branch2_ops,1621 },1622 },1623};1624 1625static struct clk_regmap_phy_mux pcie2_pipe_clk_src = {1626 .reg = 0x2a064,1627 .clkr = {1628 .hw.init = &(const struct clk_init_data) {1629 .name = "pcie2_pipe_clk_src",1630 .parent_data = &(const struct clk_parent_data) {1631 .index = DT_PCIE30_PHY2_PIPE_CLK,1632 },1633 .num_parents = 1,1634 .ops = &clk_regmap_phy_mux_ops,1635 },1636 },1637};1638 1639static struct clk_branch gcc_pcie2_pipe_clk = {1640 .halt_reg = 0x2a044,1641 .halt_check = BRANCH_HALT_DELAY,1642 .clkr = {1643 .enable_reg = 0x2a044,1644 .enable_mask = BIT(0),1645 .hw.init = &(const struct clk_init_data) {1646 .name = "gcc_pcie2_pipe_clk",1647 .parent_hws = (const struct clk_hw *[]) {1648 &pcie2_pipe_clk_src.clkr.hw1649 },1650 .num_parents = 1,1651 .flags = CLK_SET_RATE_PARENT,1652 .ops = &clk_branch2_ops,1653 },1654 },1655};1656 1657static struct clk_regmap_phy_mux pcie3_pipe_clk_src = {1658 .reg = 0x2b064,1659 .clkr = {1660 .hw.init = &(const struct clk_init_data) {1661 .name = "pcie3_pipe_clk_src",1662 .parent_data = &(const struct clk_parent_data) {1663 .index = DT_PCIE30_PHY3_PIPE_CLK,1664 },1665 .num_parents = 1,1666 .ops = &clk_regmap_phy_mux_ops,1667 },1668 },1669};1670 1671static struct clk_branch gcc_pcie3_pipe_clk = {1672 .halt_reg = 0x2b044,1673 .halt_check = BRANCH_HALT_DELAY,1674 .clkr = {1675 .enable_reg = 0x2b044,1676 .enable_mask = BIT(0),1677 .hw.init = &(const struct clk_init_data) {1678 .name = "gcc_pcie3_pipe_clk",1679 .parent_hws = (const struct clk_hw *[]) {1680 &pcie3_pipe_clk_src.clkr.hw1681 },1682 .num_parents = 1,1683 .flags = CLK_SET_RATE_PARENT,1684 .ops = &clk_branch2_ops,1685 },1686 },1687};1688 1689static const struct freq_tbl ftbl_pcie_rchng_clk_src[] = {1690 F(24000000, P_XO, 1, 0, 0),1691 F(100000000, P_GPLL0, 8, 0, 0),1692 { }1693};1694 1695static struct clk_rcg2 pcie0_rchng_clk_src = {1696 .cmd_rcgr = 0x28028,1697 .freq_tbl = ftbl_pcie_rchng_clk_src,1698 .hid_width = 5,1699 .parent_map = gcc_xo_gpll0_map,1700 .clkr.hw.init = &(const struct clk_init_data) {1701 .name = "pcie0_rchng_clk_src",1702 .parent_data = gcc_xo_gpll0,1703 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),1704 .ops = &clk_rcg2_ops,1705 },1706};1707 1708static struct clk_branch gcc_pcie0_rchng_clk = {1709 .halt_reg = 0x28028,1710 .clkr = {1711 .enable_reg = 0x28028,1712 .enable_mask = BIT(1),1713 .hw.init = &(const struct clk_init_data) {1714 .name = "gcc_pcie0_rchng_clk",1715 .parent_hws = (const struct clk_hw *[]) {1716 &pcie0_rchng_clk_src.clkr.hw1717 1718 },1719 .num_parents = 1,1720 .flags = CLK_SET_RATE_PARENT,1721 .ops = &clk_branch2_ops,1722 },1723 },1724};1725 1726static struct clk_rcg2 pcie1_rchng_clk_src = {1727 .cmd_rcgr = 0x29028,1728 .freq_tbl = ftbl_pcie_rchng_clk_src,1729 .hid_width = 5,1730 .parent_map = gcc_xo_gpll0_map,1731 .clkr.hw.init = &(const struct clk_init_data) {1732 .name = "pcie1_rchng_clk_src",1733 .parent_data = gcc_xo_gpll0,1734 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),1735 .ops = &clk_rcg2_ops,1736 },1737};1738 1739static struct clk_branch gcc_pcie1_rchng_clk = {1740 .halt_reg = 0x29028,1741 .clkr = {1742 .enable_reg = 0x29028,1743 .enable_mask = BIT(1),1744 .hw.init = &(const struct clk_init_data) {1745 .name = "gcc_pcie1_rchng_clk",1746 .parent_hws = (const struct clk_hw *[]) {1747 &pcie1_rchng_clk_src.clkr.hw1748 },1749 .num_parents = 1,1750 .flags = CLK_SET_RATE_PARENT,1751 .ops = &clk_branch2_ops,1752 },1753 },1754};1755 1756static struct clk_rcg2 pcie2_rchng_clk_src = {1757 .cmd_rcgr = 0x2a028,1758 .freq_tbl = ftbl_pcie_rchng_clk_src,1759 .hid_width = 5,1760 .parent_map = gcc_xo_gpll0_map,1761 .clkr.hw.init = &(const struct clk_init_data) {1762 .name = "pcie2_rchng_clk_src",1763 .parent_data = gcc_xo_gpll0,1764 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),1765 .ops = &clk_rcg2_ops,1766 },1767};1768 1769static struct clk_branch gcc_pcie2_rchng_clk = {1770 .halt_reg = 0x2a028,1771 .clkr = {1772 .enable_reg = 0x2a028,1773 .enable_mask = BIT(1),1774 .hw.init = &(const struct clk_init_data) {1775 .name = "gcc_pcie2_rchng_clk",1776 .parent_hws = (const struct clk_hw *[]) {1777 &pcie2_rchng_clk_src.clkr.hw1778 },1779 .num_parents = 1,1780 .flags = CLK_SET_RATE_PARENT,1781 .ops = &clk_branch2_ops,1782 },1783 },1784};1785 1786static struct clk_rcg2 pcie3_rchng_clk_src = {1787 .cmd_rcgr = 0x2b028,1788 .freq_tbl = ftbl_pcie_rchng_clk_src,1789 .hid_width = 5,1790 .parent_map = gcc_xo_gpll0_map,1791 .clkr.hw.init = &(const struct clk_init_data) {1792 .name = "pcie3_rchng_clk_src",1793 .parent_data = gcc_xo_gpll0,1794 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),1795 .ops = &clk_rcg2_ops,1796 },1797};1798 1799static struct clk_branch gcc_pcie3_rchng_clk = {1800 .halt_reg = 0x2b028,1801 .clkr = {1802 .enable_reg = 0x2b028,1803 .enable_mask = BIT(1),1804 .hw.init = &(const struct clk_init_data) {1805 .name = "gcc_pcie3_rchng_clk",1806 .parent_hws = (const struct clk_hw *[]) {1807 &pcie3_rchng_clk_src.clkr.hw1808 },1809 .num_parents = 1,1810 .flags = CLK_SET_RATE_PARENT,1811 .ops = &clk_branch2_ops,1812 },1813 },1814};1815 1816static const struct freq_tbl ftbl_pcie_aux_clk_src[] = {1817 F(20000000, P_GPLL0, 10, 1, 4),1818 { }1819};1820 1821static struct clk_rcg2 pcie_aux_clk_src = {1822 .cmd_rcgr = 0x28004,1823 .freq_tbl = ftbl_pcie_aux_clk_src,1824 .mnd_width = 16,1825 .hid_width = 5,1826 .parent_map = gcc_xo_gpll0_gpll0_aux_core_pi_sleep_clk_map,1827 .clkr.hw.init = &(const struct clk_init_data) {1828 .name = "pcie_aux_clk_src",1829 .parent_data = gcc_xo_gpll0_gpll0_aux_core_pi_sleep_clk,1830 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_aux_core_pi_sleep_clk),1831 .ops = &clk_rcg2_ops,1832 },1833};1834 1835static struct clk_branch gcc_pcie0_aux_clk = {1836 .halt_reg = 0x28034,1837 .clkr = {1838 .enable_reg = 0x28034,1839 .enable_mask = BIT(0),1840 .hw.init = &(const struct clk_init_data) {1841 .name = "gcc_pcie0_aux_clk",1842 .parent_hws = (const struct clk_hw *[]) {1843 &pcie_aux_clk_src.clkr.hw1844 },1845 .num_parents = 1,1846 .flags = CLK_SET_RATE_PARENT,1847 .ops = &clk_branch2_ops,1848 },1849 },1850};1851 1852static struct clk_branch gcc_pcie1_aux_clk = {1853 .halt_reg = 0x29034,1854 .clkr = {1855 .enable_reg = 0x29034,1856 .enable_mask = BIT(0),1857 .hw.init = &(const struct clk_init_data) {1858 .name = "gcc_pcie1_aux_clk",1859 .parent_hws = (const struct clk_hw *[]) {1860 &pcie_aux_clk_src.clkr.hw1861 },1862 .num_parents = 1,1863 .flags = CLK_SET_RATE_PARENT,1864 .ops = &clk_branch2_ops,1865 },1866 },1867};1868 1869static struct clk_branch gcc_pcie2_aux_clk = {1870 .halt_reg = 0x2a034,1871 .clkr = {1872 .enable_reg = 0x2a034,1873 .enable_mask = BIT(0),1874 .hw.init = &(const struct clk_init_data) {1875 .name = "gcc_pcie2_aux_clk",1876 .parent_hws = (const struct clk_hw *[]) {1877 &pcie_aux_clk_src.clkr.hw1878 },1879 .num_parents = 1,1880 .flags = CLK_SET_RATE_PARENT,1881 .ops = &clk_branch2_ops,1882 },1883 },1884};1885 1886static struct clk_branch gcc_pcie3_aux_clk = {1887 .halt_reg = 0x2b034,1888 .clkr = {1889 .enable_reg = 0x2b034,1890 .enable_mask = BIT(0),1891 .hw.init = &(const struct clk_init_data) {1892 .name = "gcc_pcie3_aux_clk",1893 .parent_hws = (const struct clk_hw *[]) {1894 &pcie_aux_clk_src.clkr.hw1895 },1896 .num_parents = 1,1897 .flags = CLK_SET_RATE_PARENT,1898 .ops = &clk_branch2_ops,1899 },1900 },1901};1902 1903static const struct freq_tbl ftbl_usb_aux_clk_src[] = {1904 F(24000000, P_XO, 1, 0, 0),1905 { }1906};1907 1908static struct clk_rcg2 usb0_aux_clk_src = {1909 .cmd_rcgr = 0x2c018,1910 .freq_tbl = ftbl_usb_aux_clk_src,1911 .mnd_width = 16,1912 .hid_width = 5,1913 .parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map,1914 .clkr.hw.init = &(const struct clk_init_data) {1915 .name = "usb0_aux_clk_src",1916 .parent_data = gcc_xo_gpll0_core_pi_sleep_clk,1917 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_core_pi_sleep_clk),1918 .ops = &clk_rcg2_ops,1919 },1920};1921 1922static struct clk_branch gcc_usb0_aux_clk = {1923 .halt_reg = 0x2c048,1924 .clkr = {1925 .enable_reg = 0x2c048,1926 .enable_mask = BIT(0),1927 .hw.init = &(const struct clk_init_data) {1928 .name = "gcc_usb0_aux_clk",1929 .parent_hws = (const struct clk_hw *[]) {1930 &usb0_aux_clk_src.clkr.hw1931 },1932 .num_parents = 1,1933 .flags = CLK_SET_RATE_PARENT,1934 .ops = &clk_branch2_ops,1935 },1936 },1937};1938 1939static const struct freq_tbl ftbl_usb0_master_clk_src[] = {1940 F(100000000, P_GPLL0, 8, 0, 0),1941 F(200000000, P_GPLL0, 4, 0, 0),1942 { }1943};1944 1945static struct clk_rcg2 usb0_master_clk_src = {1946 .cmd_rcgr = 0x2c004,1947 .freq_tbl = ftbl_usb0_master_clk_src,1948 .mnd_width = 8,1949 .hid_width = 5,1950 .parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,1951 .clkr.hw.init = &(const struct clk_init_data) {1952 .name = "usb0_master_clk_src",1953 .parent_data = gcc_xo_gpll0_out_main_div2_gpll0,1954 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_out_main_div2_gpll0),1955 .ops = &clk_rcg2_ops,1956 },1957};1958 1959static struct clk_branch gcc_usb0_master_clk = {1960 .halt_reg = 0x2c044,1961 .clkr = {1962 .enable_reg = 0x2c044,1963 .enable_mask = BIT(0),1964 .hw.init = &(const struct clk_init_data) {1965 .name = "gcc_usb0_master_clk",1966 .parent_hws = (const struct clk_hw *[]) {1967 &usb0_master_clk_src.clkr.hw1968 },1969 .num_parents = 1,1970 .flags = CLK_SET_RATE_PARENT,1971 .ops = &clk_branch2_ops,1972 },1973 },1974};1975 1976static struct clk_branch gcc_snoc_usb_clk = {1977 .halt_reg = 0x2e058,1978 .clkr = {1979 .enable_reg = 0x2e058,1980 .enable_mask = BIT(0),1981 .hw.init = &(const struct clk_init_data) {1982 .name = "gcc_snoc_usb_clk",1983 .parent_hws = (const struct clk_hw *[]) {1984 &usb0_master_clk_src.clkr.hw1985 },1986 .num_parents = 1,1987 .flags = CLK_SET_RATE_PARENT,1988 .ops = &clk_branch2_ops,1989 },1990 },1991};1992 1993static struct clk_branch gcc_anoc_usb_axi_clk = {1994 .halt_reg = 0x2e084,1995 .clkr = {1996 .enable_reg = 0x2e084,1997 .enable_mask = BIT(0),1998 .hw.init = &(const struct clk_init_data) {1999 .name = "gcc_anoc_usb_axi_clk",2000 .parent_hws = (const struct clk_hw *[]) {2001 &usb0_master_clk_src.clkr.hw2002 },2003 .num_parents = 1,2004 .flags = CLK_SET_RATE_PARENT,2005 .ops = &clk_branch2_ops,2006 },2007 },2008};2009 2010static const struct freq_tbl ftbl_usb0_mock_utmi_clk_src[] = {2011 F(24000000, P_XO, 1, 0, 0),2012 F(60000000, P_GPLL4, 10, 1, 2),2013 { }2014};2015 2016static struct clk_rcg2 usb0_mock_utmi_clk_src = {2017 .cmd_rcgr = 0x2c02c,2018 .freq_tbl = ftbl_usb0_mock_utmi_clk_src,2019 .mnd_width = 8,2020 .hid_width = 5,2021 .parent_map = gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map,2022 .clkr.hw.init = &(const struct clk_init_data) {2023 .name = "usb0_mock_utmi_clk_src",2024 .parent_data = gcc_xo_gpll4_gpll0_gpll0_out_main_div2,2025 .num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_out_main_div2),2026 .ops = &clk_rcg2_ops,2027 },2028};2029 2030static struct clk_regmap_div usb0_mock_utmi_div_clk_src = {2031 .reg = 0x2c040,2032 .shift = 0,2033 .width = 2,2034 .clkr.hw.init = &(const struct clk_init_data) {2035 .name = "usb0_mock_utmi_div_clk_src",2036 .parent_data = &(const struct clk_parent_data) {2037 .hw = &usb0_mock_utmi_clk_src.clkr.hw,2038 },2039 .num_parents = 1,2040 .flags = CLK_SET_RATE_PARENT,2041 .ops = &clk_regmap_div_ro_ops,2042 },2043};2044 2045static struct clk_branch gcc_usb0_mock_utmi_clk = {2046 .halt_reg = 0x2c04c,2047 .clkr = {2048 .enable_reg = 0x2c04c,2049 .enable_mask = BIT(0),2050 .hw.init = &(const struct clk_init_data) {2051 .name = "gcc_usb0_mock_utmi_clk",2052 .parent_hws = (const struct clk_hw *[]) {2053 &usb0_mock_utmi_div_clk_src.clkr.hw2054 },2055 .num_parents = 1,2056 .flags = CLK_SET_RATE_PARENT,2057 .ops = &clk_branch2_ops,2058 },2059 },2060};2061 2062static struct clk_regmap_mux usb0_pipe_clk_src = {2063 .reg = 0x2C074,2064 .shift = 8,2065 .width = 2,2066 .parent_map = gcc_usb3phy_0_cc_pipe_clk_xo_map,2067 .clkr = {2068 .hw.init = &(const struct clk_init_data) {2069 .name = "usb0_pipe_clk_src",2070 .parent_data = gcc_usb3phy_0_cc_pipe_clk_xo,2071 .num_parents = ARRAY_SIZE(gcc_usb3phy_0_cc_pipe_clk_xo),2072 .flags = CLK_SET_RATE_PARENT,2073 .ops = &clk_regmap_mux_closest_ops,2074 },2075 },2076};2077 2078static struct clk_branch gcc_usb0_pipe_clk = {2079 .halt_reg = 0x2c054,2080 .halt_check = BRANCH_HALT_DELAY,2081 .clkr = {2082 .enable_reg = 0x2c054,2083 .enable_mask = BIT(0),2084 .hw.init = &(const struct clk_init_data){2085 .name = "gcc_usb0_pipe_clk",2086 .parent_hws = (const struct clk_hw *[]) {2087 &usb0_pipe_clk_src.clkr.hw2088 },2089 .num_parents = 1,2090 .flags = CLK_SET_RATE_PARENT,2091 .ops = &clk_branch2_ops,2092 },2093 },2094};2095 2096static struct clk_branch gcc_usb0_sleep_clk = {2097 .halt_reg = 0x2c058,2098 .clkr = {2099 .enable_reg = 0x2c058,2100 .enable_mask = BIT(0),2101 .hw.init = &(const struct clk_init_data){2102 .name = "gcc_usb0_sleep_clk",2103 .parent_hws = (const struct clk_hw *[]) {2104 &gcc_sleep_clk_src.clkr.hw2105 },2106 .num_parents = 1,2107 .flags = CLK_SET_RATE_PARENT,2108 .ops = &clk_branch2_ops,2109 },2110 },2111};2112 2113static const struct freq_tbl ftbl_sdcc_apps_clk_src[] = {2114 F(144000, P_XO, 16, 12, 125),2115 F(400000, P_XO, 12, 1, 5),2116 F(24000000, P_GPLL2, 12, 1, 4),2117 F(48000000, P_GPLL2, 12, 1, 2),2118 F(96000000, P_GPLL2, 12, 0, 0),2119 F(177777778, P_GPLL0, 4.5, 0, 0),2120 F(192000000, P_GPLL2, 6, 0, 0),2121 F(384000000, P_GPLL2, 3, 0, 0),2122 F(400000000, P_GPLL0, 2, 0, 0),2123 { }2124};2125 2126static struct clk_rcg2 sdcc1_apps_clk_src = {2127 .cmd_rcgr = 0x33004,2128 .freq_tbl = ftbl_sdcc_apps_clk_src,2129 .mnd_width = 8,2130 .hid_width = 5,2131 .parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,2132 .clkr.hw.init = &(const struct clk_init_data) {2133 .name = "sdcc1_apps_clk_src",2134 .parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,2135 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll0_out_main_div2),2136 .ops = &clk_rcg2_floor_ops,2137 },2138};2139 2140static struct clk_branch gcc_sdcc1_apps_clk = {2141 .halt_reg = 0x3302c,2142 .clkr = {2143 .enable_reg = 0x3302c,2144 .enable_mask = BIT(0),2145 .hw.init = &(const struct clk_init_data) {2146 .name = "gcc_sdcc1_apps_clk",2147 .parent_hws = (const struct clk_hw *[]) {2148 &sdcc1_apps_clk_src.clkr.hw2149 },2150 .num_parents = 1,2151 .flags = CLK_SET_RATE_PARENT,2152 .ops = &clk_branch2_ops,2153 },2154 },2155};2156 2157static const struct freq_tbl ftbl_sdcc_ice_core_clk_src[] = {2158 F(150000000, P_GPLL4, 8, 0, 0),2159 F(300000000, P_GPLL4, 4, 0, 0),2160 { }2161};2162 2163static struct clk_rcg2 sdcc1_ice_core_clk_src = {2164 .cmd_rcgr = 0x33018,2165 .freq_tbl = ftbl_sdcc_ice_core_clk_src,2166 .mnd_width = 8,2167 .hid_width = 5,2168 .parent_map = gcc_xo_gpll0_gpll4_gpll0_div2_map,2169 .clkr.hw.init = &(const struct clk_init_data) {2170 .name = "sdcc1_ice_core_clk_src",2171 .parent_data = gcc_xo_gpll0_gpll4_gpll0_div2,2172 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4_gpll0_div2),2173 .ops = &clk_rcg2_ops,2174 },2175};2176 2177static struct clk_branch gcc_sdcc1_ice_core_clk = {2178 .halt_reg = 0x33030,2179 .clkr = {2180 .enable_reg = 0x33030,2181 .enable_mask = BIT(0),2182 .hw.init = &(const struct clk_init_data) {2183 .name = "gcc_sdcc1_ice_core_clk",2184 .parent_hws = (const struct clk_hw *[]) {2185 &sdcc1_ice_core_clk_src.clkr.hw2186 },2187 .num_parents = 1,2188 .flags = CLK_SET_RATE_PARENT,2189 .ops = &clk_branch2_ops,2190 },2191 },2192};2193 2194static const struct freq_tbl ftbl_pcnoc_bfdcd_clk_src[] = {2195 F(24000000, P_XO, 1, 0, 0),2196 F(50000000, P_GPLL0, 16, 0, 0),2197 F(80000000, P_GPLL0, 10, 0, 0),2198 F(100000000, P_GPLL0, 8, 0, 0),2199 { }2200};2201 2202static struct clk_rcg2 pcnoc_bfdcd_clk_src = {2203 .cmd_rcgr = 0x31004,2204 .freq_tbl = ftbl_pcnoc_bfdcd_clk_src,2205 .hid_width = 5,2206 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,2207 .clkr.hw.init = &(const struct clk_init_data) {2208 .name = "pcnoc_bfdcd_clk_src",2209 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,2210 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),2211 .flags = CLK_IS_CRITICAL,2212 .ops = &clk_rcg2_ops,2213 },2214};2215 2216static struct clk_branch gcc_crypto_axi_clk = {2217 .halt_reg = 0x16010,2218 .halt_check = BRANCH_HALT_VOTED,2219 .clkr = {2220 .enable_reg = 0xb004,2221 .enable_mask = BIT(15),2222 .hw.init = &(const struct clk_init_data) {2223 .name = "gcc_crypto_axi_clk",2224 .parent_hws = (const struct clk_hw *[]) {2225 &pcnoc_bfdcd_clk_src.clkr.hw },2226 .num_parents = 1,2227 .flags = CLK_SET_RATE_PARENT,2228 .ops = &clk_branch2_ops,2229 },2230 },2231};2232 2233static struct clk_branch gcc_crypto_ahb_clk = {2234 .halt_reg = 0x16014,2235 .halt_check = BRANCH_HALT_VOTED,2236 .clkr = {2237 .enable_reg = 0xb004,2238 .enable_mask = BIT(16),2239 .hw.init = &(const struct clk_init_data) {2240 .name = "gcc_crypto_ahb_clk",2241 .parent_hws = (const struct clk_hw *[]) {2242 &pcnoc_bfdcd_clk_src.clkr.hw },2243 .num_parents = 1,2244 .flags = CLK_SET_RATE_PARENT,2245 .ops = &clk_branch2_ops,2246 },2247 },2248};2249 2250static struct clk_branch gcc_nsscfg_clk = {2251 .halt_reg = 0x1702c,2252 .clkr = {2253 .enable_reg = 0x1702c,2254 .enable_mask = BIT(0),2255 .hw.init = &(const struct clk_init_data) {2256 .name = "gcc_nsscfg_clk",2257 .parent_hws = (const struct clk_hw *[]) {2258 &pcnoc_bfdcd_clk_src.clkr.hw2259 },2260 .num_parents = 1,2261 .flags = CLK_SET_RATE_PARENT,2262 .ops = &clk_branch2_ops,2263 },2264 },2265};2266 2267static struct clk_branch gcc_nssnoc_nsscc_clk = {2268 .halt_reg = 0x17030,2269 .clkr = {2270 .enable_reg = 0x17030,2271 .enable_mask = BIT(0),2272 .hw.init = &(const struct clk_init_data) {2273 .name = "gcc_nssnoc_nsscc_clk",2274 .parent_hws = (const struct clk_hw *[]) {2275 &pcnoc_bfdcd_clk_src.clkr.hw2276 },2277 .num_parents = 1,2278 .flags = CLK_SET_RATE_PARENT,2279 .ops = &clk_branch2_ops,2280 },2281 },2282};2283 2284static struct clk_branch gcc_nsscc_clk = {2285 .halt_reg = 0x17034,2286 .clkr = {2287 .enable_reg = 0x17034,2288 .enable_mask = BIT(0),2289 .hw.init = &(const struct clk_init_data) {2290 .name = "gcc_nsscc_clk",2291 .parent_hws = (const struct clk_hw *[]) {2292 &pcnoc_bfdcd_clk_src.clkr.hw2293 },2294 .num_parents = 1,2295 .flags = CLK_SET_RATE_PARENT,2296 .ops = &clk_branch2_ops,2297 },2298 },2299};2300 2301static struct clk_branch gcc_nssnoc_pcnoc_1_clk = {2302 .halt_reg = 0x17080,2303 .clkr = {2304 .enable_reg = 0x17080,2305 .enable_mask = BIT(0),2306 .hw.init = &(const struct clk_init_data) {2307 .name = "gcc_nssnoc_pcnoc_1_clk",2308 .parent_hws = (const struct clk_hw *[]) {2309 &pcnoc_bfdcd_clk_src.clkr.hw2310 },2311 .num_parents = 1,2312 .flags = CLK_SET_RATE_PARENT,2313 .ops = &clk_branch2_ops,2314 },2315 },2316};2317 2318static struct clk_branch gcc_qdss_dap_ahb_clk = {2319 .halt_reg = 0x2d064,2320 .clkr = {2321 .enable_reg = 0x2d064,2322 .enable_mask = BIT(0),2323 .hw.init = &(const struct clk_init_data) {2324 .name = "gcc_qdss_dap_ahb_clk",2325 .parent_hws = (const struct clk_hw *[]) {2326 &pcnoc_bfdcd_clk_src.clkr.hw2327 },2328 .num_parents = 1,2329 .flags = CLK_SET_RATE_PARENT,2330 .ops = &clk_branch2_ops,2331 },2332 },2333};2334 2335static struct clk_branch gcc_qdss_cfg_ahb_clk = {2336 .halt_reg = 0x2d068,2337 .clkr = {2338 .enable_reg = 0x2d068,2339 .enable_mask = BIT(0),2340 .hw.init = &(const struct clk_init_data) {2341 .name = "gcc_qdss_cfg_ahb_clk",2342 .parent_hws = (const struct clk_hw *[]) {2343 &pcnoc_bfdcd_clk_src.clkr.hw2344 },2345 .num_parents = 1,2346 .flags = CLK_SET_RATE_PARENT,2347 .ops = &clk_branch2_ops,2348 },2349 },2350};2351 2352static struct clk_branch gcc_qpic_ahb_clk = {2353 .halt_reg = 0x32010,2354 .clkr = {2355 .enable_reg = 0x32010,2356 .enable_mask = BIT(0),2357 .hw.init = &(const struct clk_init_data) {2358 .name = "gcc_qpic_ahb_clk",2359 .parent_hws = (const struct clk_hw *[]) {2360 &pcnoc_bfdcd_clk_src.clkr.hw2361 },2362 .num_parents = 1,2363 .flags = CLK_SET_RATE_PARENT,2364 .ops = &clk_branch2_ops,2365 },2366 },2367};2368 2369static struct clk_branch gcc_qpic_clk = {2370 .halt_reg = 0x32014,2371 .clkr = {2372 .enable_reg = 0x32014,2373 .enable_mask = BIT(0),2374 .hw.init = &(const struct clk_init_data) {2375 .name = "gcc_qpic_clk",2376 .parent_hws = (const struct clk_hw *[]) {2377 &pcnoc_bfdcd_clk_src.clkr.hw2378 },2379 .num_parents = 1,2380 .flags = CLK_SET_RATE_PARENT,2381 .ops = &clk_branch2_ops,2382 },2383 },2384};2385 2386static struct clk_branch gcc_blsp1_ahb_clk = {2387 .halt_reg = 0x01004,2388 .halt_check = BRANCH_HALT_VOTED,2389 .clkr = {2390 .enable_reg = 0x0b004,2391 .enable_mask = BIT(4),2392 .hw.init = &(const struct clk_init_data) {2393 .name = "gcc_blsp1_ahb_clk",2394 .parent_hws = (const struct clk_hw *[]) {2395 &pcnoc_bfdcd_clk_src.clkr.hw2396 },2397 .num_parents = 1,2398 .flags = CLK_SET_RATE_PARENT,2399 .ops = &clk_branch2_ops,2400 },2401 },2402};2403 2404static struct clk_branch gcc_mdio_ahb_clk = {2405 .halt_reg = 0x17040,2406 .clkr = {2407 .enable_reg = 0x17040,2408 .enable_mask = BIT(0),2409 .hw.init = &(const struct clk_init_data) {2410 .name = "gcc_mdio_ahb_clk",2411 .parent_hws = (const struct clk_hw *[]) {2412 &pcnoc_bfdcd_clk_src.clkr.hw2413 },2414 .num_parents = 1,2415 .flags = CLK_SET_RATE_PARENT,2416 .ops = &clk_branch2_ops,2417 },2418 },2419};2420 2421static struct clk_branch gcc_prng_ahb_clk = {2422 .halt_reg = 0x13024,2423 .halt_check = BRANCH_HALT_VOTED,2424 .clkr = {2425 .enable_reg = 0x0b004,2426 .enable_mask = BIT(10),2427 .hw.init = &(const struct clk_init_data) {2428 .name = "gcc_prng_ahb_clk",2429 .parent_hws = (const struct clk_hw *[]) {2430 &pcnoc_bfdcd_clk_src.clkr.hw2431 },2432 .num_parents = 1,2433 .flags = CLK_SET_RATE_PARENT,2434 .ops = &clk_branch2_ops,2435 },2436 },2437};2438 2439static struct clk_branch gcc_uniphy0_ahb_clk = {2440 .halt_reg = 0x1704c,2441 .clkr = {2442 .enable_reg = 0x1704c,2443 .enable_mask = BIT(0),2444 .hw.init = &(const struct clk_init_data) {2445 .name = "gcc_uniphy0_ahb_clk",2446 .parent_hws = (const struct clk_hw *[]) {2447 &pcnoc_bfdcd_clk_src.clkr.hw2448 },2449 .num_parents = 1,2450 .flags = CLK_SET_RATE_PARENT,2451 .ops = &clk_branch2_ops,2452 },2453 },2454};2455 2456static struct clk_branch gcc_uniphy1_ahb_clk = {2457 .halt_reg = 0x1705c,2458 .clkr = {2459 .enable_reg = 0x1705c,2460 .enable_mask = BIT(0),2461 .hw.init = &(const struct clk_init_data) {2462 .name = "gcc_uniphy1_ahb_clk",2463 .parent_hws = (const struct clk_hw *[]) {2464 &pcnoc_bfdcd_clk_src.clkr.hw2465 },2466 .num_parents = 1,2467 .flags = CLK_SET_RATE_PARENT,2468 .ops = &clk_branch2_ops,2469 },2470 },2471};2472 2473static struct clk_branch gcc_uniphy2_ahb_clk = {2474 .halt_reg = 0x1706c,2475 .clkr = {2476 .enable_reg = 0x1706c,2477 .enable_mask = BIT(0),2478 .hw.init = &(const struct clk_init_data) {2479 .name = "gcc_uniphy2_ahb_clk",2480 .parent_hws = (const struct clk_hw *[]) {2481 &pcnoc_bfdcd_clk_src.clkr.hw2482 },2483 .num_parents = 1,2484 .flags = CLK_SET_RATE_PARENT,2485 .ops = &clk_branch2_ops,2486 },2487 },2488};2489 2490static struct clk_branch gcc_cmn_12gpll_ahb_clk = {2491 .halt_reg = 0x3a004,2492 .clkr = {2493 .enable_reg = 0x3a004,2494 .enable_mask = BIT(0),2495 .hw.init = &(const struct clk_init_data) {2496 .name = "gcc_cmn_12gpll_ahb_clk",2497 .parent_hws = (const struct clk_hw *[]) {2498 &pcnoc_bfdcd_clk_src.clkr.hw2499 },2500 .num_parents = 1,2501 .flags = CLK_SET_RATE_PARENT,2502 .ops = &clk_branch2_ops,2503 },2504 },2505};2506 2507static struct clk_branch gcc_cmn_12gpll_apu_clk = {2508 .halt_reg = 0x3a00c,2509 .clkr = {2510 .enable_reg = 0x3a00c,2511 .enable_mask = BIT(0),2512 .hw.init = &(const struct clk_init_data) {2513 .name = "gcc_cmn_12gpll_apu_clk",2514 .parent_hws = (const struct clk_hw *[]) {2515 &pcnoc_bfdcd_clk_src.clkr.hw2516 },2517 .num_parents = 1,2518 .flags = CLK_SET_RATE_PARENT,2519 .ops = &clk_branch2_ops,2520 },2521 },2522};2523 2524static struct clk_branch gcc_pcie0_ahb_clk = {2525 .halt_reg = 0x28030,2526 .clkr = {2527 .enable_reg = 0x28030,2528 .enable_mask = BIT(0),2529 .hw.init = &(const struct clk_init_data) {2530 .name = "gcc_pcie0_ahb_clk",2531 .parent_hws = (const struct clk_hw *[]) {2532 &pcnoc_bfdcd_clk_src.clkr.hw2533 },2534 .num_parents = 1,2535 .flags = CLK_SET_RATE_PARENT,2536 .ops = &clk_branch2_ops,2537 },2538 },2539};2540 2541static struct clk_branch gcc_pcie1_ahb_clk = {2542 .halt_reg = 0x29030,2543 .clkr = {2544 .enable_reg = 0x29030,2545 .enable_mask = BIT(0),2546 .hw.init = &(const struct clk_init_data) {2547 .name = "gcc_pcie1_ahb_clk",2548 .parent_hws = (const struct clk_hw *[]) {2549 &pcnoc_bfdcd_clk_src.clkr.hw2550 },2551 .num_parents = 1,2552 .flags = CLK_SET_RATE_PARENT,2553 .ops = &clk_branch2_ops,2554 },2555 },2556};2557 2558static struct clk_branch gcc_pcie2_ahb_clk = {2559 .halt_reg = 0x2a030,2560 .clkr = {2561 .enable_reg = 0x2a030,2562 .enable_mask = BIT(0),2563 .hw.init = &(const struct clk_init_data) {2564 .name = "gcc_pcie2_ahb_clk",2565 .parent_hws = (const struct clk_hw *[]) {2566 &pcnoc_bfdcd_clk_src.clkr.hw2567 },2568 .num_parents = 1,2569 .flags = CLK_SET_RATE_PARENT,2570 .ops = &clk_branch2_ops,2571 },2572 },2573};2574 2575static struct clk_branch gcc_pcie3_ahb_clk = {2576 .halt_reg = 0x2b030,2577 .clkr = {2578 .enable_reg = 0x2b030,2579 .enable_mask = BIT(0),2580 .hw.init = &(const struct clk_init_data) {2581 .name = "gcc_pcie3_ahb_clk",2582 .parent_hws = (const struct clk_hw *[]) {2583 &pcnoc_bfdcd_clk_src.clkr.hw2584 },2585 .num_parents = 1,2586 .flags = CLK_SET_RATE_PARENT,2587 .ops = &clk_branch2_ops,2588 },2589 },2590};2591 2592static struct clk_branch gcc_usb0_phy_cfg_ahb_clk = {2593 .halt_reg = 0x2c05c,2594 .clkr = {2595 .enable_reg = 0x2c05c,2596 .enable_mask = BIT(0),2597 .hw.init = &(const struct clk_init_data) {2598 .name = "gcc_usb0_phy_cfg_ahb_clk",2599 .parent_hws = (const struct clk_hw *[]) {2600 &pcnoc_bfdcd_clk_src.clkr.hw2601 },2602 .num_parents = 1,2603 .flags = CLK_SET_RATE_PARENT,2604 .ops = &clk_branch2_ops,2605 },2606 },2607};2608 2609static struct clk_branch gcc_sdcc1_ahb_clk = {2610 .halt_reg = 0x33034,2611 .clkr = {2612 .enable_reg = 0x33034,2613 .enable_mask = BIT(0),2614 .hw.init = &(const struct clk_init_data) {2615 .name = "gcc_sdcc1_ahb_clk",2616 .parent_hws = (const struct clk_hw *[]) {2617 &pcnoc_bfdcd_clk_src.clkr.hw2618 },2619 .num_parents = 1,2620 .flags = CLK_SET_RATE_PARENT,2621 .ops = &clk_branch2_ops,2622 },2623 },2624};2625 2626static const struct freq_tbl ftbl_system_noc_bfdcd_clk_src[] = {2627 F(24000000, P_XO, 1, 0, 0),2628 F(133333333, P_GPLL0, 6, 0, 0),2629 F(200000000, P_GPLL0, 4, 0, 0),2630 F(342850000, P_GPLL4, 3.5, 0, 0),2631 { }2632};2633 2634static struct clk_rcg2 system_noc_bfdcd_clk_src = {2635 .cmd_rcgr = 0x2e004,2636 .freq_tbl = ftbl_system_noc_bfdcd_clk_src,2637 .hid_width = 5,2638 .parent_map = gcc_xo_gpll0_gpll4_map,2639 .clkr.hw.init = &(const struct clk_init_data) {2640 .name = "system_noc_bfdcd_clk_src",2641 .parent_data = gcc_xo_gpll0_gpll4,2642 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),2643 .flags = CLK_IS_CRITICAL,2644 .ops = &clk_rcg2_ops,2645 },2646};2647 2648static struct clk_branch gcc_q6ss_boot_clk = {2649 .halt_reg = 0x25080,2650 .halt_check = BRANCH_HALT_SKIP,2651 .clkr = {2652 .enable_reg = 0x25080,2653 .enable_mask = BIT(0),2654 .hw.init = &(const struct clk_init_data) {2655 .name = "gcc_q6ss_boot_clk",2656 .parent_hws = (const struct clk_hw *[]) {2657 &system_noc_bfdcd_clk_src.clkr.hw2658 },2659 .num_parents = 1,2660 .flags = CLK_SET_RATE_PARENT,2661 .ops = &clk_branch2_ops,2662 },2663 },2664};2665 2666static struct clk_branch gcc_nssnoc_snoc_clk = {2667 .halt_reg = 0x17028,2668 .clkr = {2669 .enable_reg = 0x17028,2670 .enable_mask = BIT(0),2671 .hw.init = &(const struct clk_init_data) {2672 .name = "gcc_nssnoc_snoc_clk",2673 .parent_hws = (const struct clk_hw *[]) {2674 &system_noc_bfdcd_clk_src.clkr.hw2675 },2676 .num_parents = 1,2677 .flags = CLK_SET_RATE_PARENT,2678 .ops = &clk_branch2_ops,2679 },2680 },2681};2682 2683static struct clk_branch gcc_nssnoc_snoc_1_clk = {2684 .halt_reg = 0x1707c,2685 .clkr = {2686 .enable_reg = 0x1707c,2687 .enable_mask = BIT(0),2688 .hw.init = &(const struct clk_init_data) {2689 .name = "gcc_nssnoc_snoc_1_clk",2690 .parent_hws = (const struct clk_hw *[]) {2691 &system_noc_bfdcd_clk_src.clkr.hw2692 },2693 .num_parents = 1,2694 .flags = CLK_SET_RATE_PARENT,2695 .ops = &clk_branch2_ops,2696 },2697 },2698};2699 2700static struct clk_branch gcc_qdss_etr_usb_clk = {2701 .halt_reg = 0x2d060,2702 .clkr = {2703 .enable_reg = 0x2d060,2704 .enable_mask = BIT(0),2705 .hw.init = &(const struct clk_init_data) {2706 .name = "gcc_qdss_etr_usb_clk",2707 .parent_hws = (const struct clk_hw *[]) {2708 &system_noc_bfdcd_clk_src.clkr.hw2709 },2710 .num_parents = 1,2711 .flags = CLK_SET_RATE_PARENT,2712 .ops = &clk_branch2_ops,2713 },2714 },2715};2716 2717static const struct freq_tbl ftbl_wcss_ahb_clk_src[] = {2718 F(24000000, P_XO, 1, 0, 0),2719 F(133333333, P_GPLL0, 6, 0, 0),2720 { }2721};2722 2723static struct clk_rcg2 wcss_ahb_clk_src = {2724 .cmd_rcgr = 0x25030,2725 .freq_tbl = ftbl_wcss_ahb_clk_src,2726 .hid_width = 5,2727 .parent_map = gcc_xo_gpll0_map,2728 .clkr.hw.init = &(const struct clk_init_data) {2729 .name = "wcss_ahb_clk_src",2730 .parent_data = gcc_xo_gpll0,2731 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),2732 .ops = &clk_rcg2_ops,2733 },2734};2735 2736static struct clk_branch gcc_q6_ahb_clk = {2737 .halt_reg = 0x25014,2738 .clkr = {2739 .enable_reg = 0x25014,2740 .enable_mask = BIT(0),2741 .hw.init = &(const struct clk_init_data) {2742 .name = "gcc_q6_ahb_clk",2743 .parent_hws = (const struct clk_hw *[]) {2744 &wcss_ahb_clk_src.clkr.hw2745 },2746 .num_parents = 1,2747 .flags = CLK_SET_RATE_PARENT,2748 .ops = &clk_branch2_ops,2749 },2750 },2751};2752 2753static struct clk_branch gcc_q6_ahb_s_clk = {2754 .halt_reg = 0x25018,2755 .clkr = {2756 .enable_reg = 0x25018,2757 .enable_mask = BIT(0),2758 .hw.init = &(const struct clk_init_data) {2759 .name = "gcc_q6_ahb_s_clk",2760 .parent_hws = (const struct clk_hw *[]) {2761 &wcss_ahb_clk_src.clkr.hw2762 },2763 .num_parents = 1,2764 .flags = CLK_SET_RATE_PARENT,2765 .ops = &clk_branch2_ops,2766 },2767 },2768};2769 2770static struct clk_branch gcc_wcss_ecahb_clk = {2771 .halt_reg = 0x25058,2772 .clkr = {2773 .enable_reg = 0x25058,2774 .enable_mask = BIT(0),2775 .hw.init = &(const struct clk_init_data) {2776 .name = "gcc_wcss_ecahb_clk",2777 .parent_hws = (const struct clk_hw *[]) {2778 &wcss_ahb_clk_src.clkr.hw2779 },2780 .num_parents = 1,2781 .flags = CLK_SET_RATE_PARENT,2782 .ops = &clk_branch2_ops,2783 },2784 },2785};2786 2787static struct clk_branch gcc_wcss_acmt_clk = {2788 .halt_reg = 0x2505c,2789 .clkr = {2790 .enable_reg = 0x2505c,2791 .enable_mask = BIT(0),2792 .hw.init = &(const struct clk_init_data) {2793 .name = "gcc_wcss_acmt_clk",2794 .parent_hws = (const struct clk_hw *[]) {2795 &wcss_ahb_clk_src.clkr.hw2796 },2797 .num_parents = 1,2798 .flags = CLK_SET_RATE_PARENT,2799 .ops = &clk_branch2_ops,2800 },2801 },2802};2803 2804static struct clk_branch gcc_sys_noc_wcss_ahb_clk = {2805 .halt_reg = 0x2e030,2806 .clkr = {2807 .enable_reg = 0x2e030,2808 .enable_mask = BIT(0),2809 .hw.init = &(const struct clk_init_data) {2810 .name = "gcc_sys_noc_wcss_ahb_clk",2811 .parent_hws = (const struct clk_hw *[]) {2812 &wcss_ahb_clk_src.clkr.hw2813 },2814 .num_parents = 1,2815 .flags = CLK_SET_RATE_PARENT,2816 .ops = &clk_branch2_ops,2817 },2818 },2819};2820 2821static const struct freq_tbl ftbl_wcss_axi_m_clk_src[] = {2822 F(24000000, P_XO, 1, 0, 0),2823 F(133333333, P_GPLL0, 6, 0, 0),2824 F(266666667, P_GPLL0, 3, 0, 0),2825 { }2826};2827 2828static struct clk_rcg2 wcss_axi_m_clk_src = {2829 .cmd_rcgr = 0x25078,2830 .freq_tbl = ftbl_wcss_axi_m_clk_src,2831 .hid_width = 5,2832 .parent_map = gcc_xo_gpll0_map,2833 .clkr.hw.init = &(const struct clk_init_data) {2834 .name = "wcss_axi_m_clk_src",2835 .parent_data = gcc_xo_gpll0,2836 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),2837 .ops = &clk_rcg2_ops,2838 },2839};2840 2841static struct clk_branch gcc_anoc_wcss_axi_m_clk = {2842 .halt_reg = 0x2e0a8,2843 .clkr = {2844 .enable_reg = 0x2e0a8,2845 .enable_mask = BIT(0),2846 .hw.init = &(const struct clk_init_data) {2847 .name = "gcc_anoc_wcss_axi_m_clk",2848 .parent_hws = (const struct clk_hw *[]) {2849 &wcss_axi_m_clk_src.clkr.hw2850 },2851 .num_parents = 1,2852 .flags = CLK_SET_RATE_PARENT,2853 .ops = &clk_branch2_ops,2854 },2855 },2856};2857 2858static const struct freq_tbl ftbl_qdss_at_clk_src[] = {2859 F(240000000, P_GPLL4, 5, 0, 0),2860 { }2861};2862 2863static struct clk_rcg2 qdss_at_clk_src = {2864 .cmd_rcgr = 0x2d004,2865 .freq_tbl = ftbl_qdss_at_clk_src,2866 .hid_width = 5,2867 .parent_map = gcc_xo_gpll4_gpll0_gpll0_div2_map,2868 .clkr.hw.init = &(const struct clk_init_data) {2869 .name = "qdss_at_clk_src",2870 .parent_data = gcc_xo_gpll4_gpll0_gpll0_div2,2871 .num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_div2),2872 .ops = &clk_rcg2_ops,2873 },2874};2875 2876static struct clk_branch gcc_q6ss_atbm_clk = {2877 .halt_reg = 0x2501c,2878 .clkr = {2879 .enable_reg = 0x2501c,2880 .enable_mask = BIT(0),2881 .hw.init = &(const struct clk_init_data) {2882 .name = "gcc_q6ss_atbm_clk",2883 .parent_hws = (const struct clk_hw *[]) {2884 &qdss_at_clk_src.clkr.hw2885 },2886 .num_parents = 1,2887 .flags = CLK_SET_RATE_PARENT,2888 .ops = &clk_branch2_ops,2889 },2890 },2891};2892 2893static struct clk_branch gcc_wcss_dbg_ifc_atb_clk = {2894 .halt_reg = 0x2503c,2895 .clkr = {2896 .enable_reg = 0x2503c,2897 .enable_mask = BIT(0),2898 .hw.init = &(const struct clk_init_data) {2899 .name = "gcc_wcss_dbg_ifc_atb_clk",2900 .parent_hws = (const struct clk_hw *[]) {2901 &qdss_at_clk_src.clkr.hw2902 },2903 .num_parents = 1,2904 .flags = CLK_SET_RATE_PARENT,2905 .ops = &clk_branch2_ops,2906 },2907 },2908};2909 2910static struct clk_branch gcc_nssnoc_atb_clk = {2911 .halt_reg = 0x17014,2912 .clkr = {2913 .enable_reg = 0x17014,2914 .enable_mask = BIT(0),2915 .hw.init = &(const struct clk_init_data) {2916 .name = "gcc_nssnoc_atb_clk",2917 .parent_hws = (const struct clk_hw *[]) {2918 &qdss_at_clk_src.clkr.hw2919 },2920 .num_parents = 1,2921 .flags = CLK_SET_RATE_PARENT,2922 .ops = &clk_branch2_ops,2923 },2924 },2925};2926 2927static struct clk_branch gcc_qdss_at_clk = {2928 .halt_reg = 0x2d038,2929 .clkr = {2930 .enable_reg = 0x2d038,2931 .enable_mask = BIT(0),2932 .hw.init = &(const struct clk_init_data) {2933 .name = "gcc_qdss_at_clk",2934 .parent_hws = (const struct clk_hw *[]) {2935 &qdss_at_clk_src.clkr.hw2936 },2937 .num_parents = 1,2938 .flags = CLK_SET_RATE_PARENT,2939 .ops = &clk_branch2_ops,2940 },2941 },2942};2943 2944static struct clk_branch gcc_sys_noc_at_clk = {2945 .halt_reg = 0x2e038,2946 .clkr = {2947 .enable_reg = 0x2e038,2948 .enable_mask = BIT(0),2949 .hw.init = &(const struct clk_init_data) {2950 .name = "gcc_sys_noc_at_clk",2951 .parent_hws = (const struct clk_hw *[]) {2952 &qdss_at_clk_src.clkr.hw2953 },2954 .num_parents = 1,2955 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,2956 .ops = &clk_branch2_ops,2957 },2958 },2959};2960 2961static struct clk_branch gcc_pcnoc_at_clk = {2962 .halt_reg = 0x31024,2963 .clkr = {2964 .enable_reg = 0x31024,2965 .enable_mask = BIT(0),2966 .hw.init = &(const struct clk_init_data) {2967 .name = "gcc_pcnoc_at_clk",2968 .parent_hws = (const struct clk_hw *[]) {2969 &qdss_at_clk_src.clkr.hw2970 },2971 .num_parents = 1,2972 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,2973 .ops = &clk_branch2_ops,2974 },2975 },2976};2977 2978static struct clk_fixed_factor gcc_eud_at_div_clk_src = {2979 .mult = 1,2980 .div = 6,2981 .hw.init = &(const struct clk_init_data) {2982 .name = "gcc_eud_at_div_clk_src",2983 .parent_hws = (const struct clk_hw *[]) {2984 &qdss_at_clk_src.clkr.hw2985 },2986 .num_parents = 1,2987 .flags = CLK_SET_RATE_PARENT,2988 .ops = &clk_fixed_factor_ops,2989 },2990};2991 2992static struct clk_branch gcc_usb0_eud_at_clk = {2993 .halt_reg = 0x30004,2994 .clkr = {2995 .enable_reg = 0x30004,2996 .enable_mask = BIT(0),2997 .hw.init = &(const struct clk_init_data) {2998 .name = "gcc_usb0_eud_at_clk",2999 .parent_hws = (const struct clk_hw *[]) {3000 &gcc_eud_at_div_clk_src.hw3001 },3002 .num_parents = 1,3003 .flags = CLK_SET_RATE_PARENT,3004 .ops = &clk_branch2_ops,3005 },3006 },3007};3008 3009static struct clk_branch gcc_qdss_eud_at_clk = {3010 .halt_reg = 0x2d06c,3011 .clkr = {3012 .enable_reg = 0x2d06c,3013 .enable_mask = BIT(0),3014 .hw.init = &(const struct clk_init_data) {3015 .name = "gcc_qdss_eud_at_clk",3016 .parent_hws = (const struct clk_hw *[]) {3017 &gcc_eud_at_div_clk_src.hw3018 },3019 .num_parents = 1,3020 .flags = CLK_SET_RATE_PARENT,3021 .ops = &clk_branch2_ops,3022 },3023 },3024};3025 3026static const struct freq_tbl ftbl_qdss_stm_clk_src[] = {3027 F(24000000, P_XO, 1, 0, 0),3028 F(200000000, P_GPLL0, 4, 0, 0),3029 { }3030};3031 3032static struct clk_rcg2 qdss_stm_clk_src = {3033 .cmd_rcgr = 0x2d00c,3034 .freq_tbl = ftbl_qdss_stm_clk_src,3035 .hid_width = 5,3036 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,3037 .clkr.hw.init = &(const struct clk_init_data) {3038 .name = "qdss_stm_clk_src",3039 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,3040 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),3041 .ops = &clk_rcg2_ops,3042 },3043};3044 3045static struct clk_branch gcc_qdss_stm_clk = {3046 .halt_reg = 0x2d03c,3047 .clkr = {3048 .enable_reg = 0x2d03c,3049 .enable_mask = BIT(0),3050 .hw.init = &(const struct clk_init_data) {3051 .name = "gcc_qdss_stm_clk",3052 .parent_hws = (const struct clk_hw *[]) {3053 &qdss_stm_clk_src.clkr.hw3054 },3055 .num_parents = 1,3056 .flags = CLK_SET_RATE_PARENT,3057 .ops = &clk_branch2_ops,3058 },3059 },3060};3061 3062static struct clk_branch gcc_sys_noc_qdss_stm_axi_clk = {3063 .halt_reg = 0x2e034,3064 .clkr = {3065 .enable_reg = 0x2e034,3066 .enable_mask = BIT(0),3067 .hw.init = &(const struct clk_init_data) {3068 .name = "gcc_sys_noc_qdss_stm_axi_clk",3069 .parent_hws = (const struct clk_hw *[]) {3070 &qdss_stm_clk_src.clkr.hw3071 },3072 .num_parents = 1,3073 .flags = CLK_SET_RATE_PARENT,3074 .ops = &clk_branch2_ops,3075 },3076 },3077};3078 3079static const struct freq_tbl ftbl_qdss_traceclkin_clk_src[] = {3080 F(300000000, P_GPLL4, 4, 0, 0),3081 { }3082};3083 3084static struct clk_rcg2 qdss_traceclkin_clk_src = {3085 .cmd_rcgr = 0x2d014,3086 .freq_tbl = ftbl_qdss_traceclkin_clk_src,3087 .hid_width = 5,3088 .parent_map = gcc_xo_gpll4_gpll0_gpll0_div2_map,3089 .clkr.hw.init = &(const struct clk_init_data) {3090 .name = "qdss_traceclkin_clk_src",3091 .parent_data = gcc_xo_gpll4_gpll0_gpll0_div2,3092 .num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_div2),3093 .ops = &clk_rcg2_ops,3094 },3095};3096 3097static struct clk_branch gcc_qdss_traceclkin_clk = {3098 .halt_reg = 0x2d040,3099 .clkr = {3100 .enable_reg = 0x2d040,3101 .enable_mask = BIT(0),3102 .hw.init = &(const struct clk_init_data) {3103 .name = "gcc_qdss_traceclkin_clk",3104 .parent_hws = (const struct clk_hw *[]) {3105 &qdss_traceclkin_clk_src.clkr.hw3106 },3107 .num_parents = 1,3108 .flags = CLK_SET_RATE_PARENT,3109 .ops = &clk_branch2_ops,3110 },3111 },3112};3113 3114static const struct freq_tbl ftbl_qdss_tsctr_clk_src[] = {3115 F(600000000, P_GPLL4, 2, 0, 0),3116 { }3117};3118 3119static struct clk_rcg2 qdss_tsctr_clk_src = {3120 .cmd_rcgr = 0x2d01c,3121 .freq_tbl = ftbl_qdss_tsctr_clk_src,3122 .hid_width = 5,3123 .parent_map = gcc_xo_gpll4_gpll0_gpll0_div2_map,3124 .clkr.hw.init = &(const struct clk_init_data) {3125 .name = "qdss_tsctr_clk_src",3126 .parent_data = gcc_xo_gpll4_gpll0_gpll0_div2,3127 .num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_div2),3128 .ops = &clk_rcg2_ops,3129 },3130};3131 3132static struct clk_fixed_factor qdss_tsctr_div2_clk_src = {3133 .mult = 1,3134 .div = 2,3135 .hw.init = &(const struct clk_init_data) {3136 .name = "qdss_tsctr_div2_clk_src",3137 .parent_hws = (const struct clk_hw *[]) {3138 &qdss_tsctr_clk_src.clkr.hw3139 },3140 .num_parents = 1,3141 .flags = CLK_SET_RATE_PARENT,3142 .ops = &clk_fixed_factor_ops,3143 },3144};3145 3146static struct clk_branch gcc_q6_tsctr_1to2_clk = {3147 .halt_reg = 0x25020,3148 .clkr = {3149 .enable_reg = 0x25020,3150 .enable_mask = BIT(0),3151 .hw.init = &(const struct clk_init_data) {3152 .name = "gcc_q6_tsctr_1to2_clk",3153 .parent_hws = (const struct clk_hw *[]) {3154 &qdss_tsctr_div2_clk_src.hw3155 },3156 .num_parents = 1,3157 .flags = CLK_SET_RATE_PARENT,3158 .ops = &clk_branch2_ops,3159 },3160 },3161};3162 3163static struct clk_branch gcc_wcss_dbg_ifc_nts_clk = {3164 .halt_reg = 0x25040,3165 .clkr = {3166 .enable_reg = 0x25040,3167 .enable_mask = BIT(0),3168 .hw.init = &(const struct clk_init_data) {3169 .name = "gcc_wcss_dbg_ifc_nts_clk",3170 .parent_hws = (const struct clk_hw *[]) {3171 &qdss_tsctr_div2_clk_src.hw3172 },3173 .num_parents = 1,3174 .flags = CLK_SET_RATE_PARENT,3175 .ops = &clk_branch2_ops,3176 },3177 },3178};3179 3180static struct clk_branch gcc_qdss_tsctr_div2_clk = {3181 .halt_reg = 0x2d044,3182 .clkr = {3183 .enable_reg = 0x2d044,3184 .enable_mask = BIT(0),3185 .hw.init = &(const struct clk_init_data) {3186 .name = "gcc_qdss_tsctr_div2_clk",3187 .parent_hws = (const struct clk_hw *[]) {3188 &qdss_tsctr_div2_clk_src.hw3189 },3190 .num_parents = 1,3191 .flags = CLK_SET_RATE_PARENT,3192 .ops = &clk_branch2_ops,3193 },3194 },3195};3196 3197static const struct freq_tbl ftbl_uniphy_sys_clk_src[] = {3198 F(24000000, P_XO, 1, 0, 0),3199 { }3200};3201 3202static struct clk_rcg2 uniphy_sys_clk_src = {3203 .cmd_rcgr = 0x17090,3204 .freq_tbl = ftbl_uniphy_sys_clk_src,3205 .mnd_width = 8,3206 .hid_width = 5,3207 .parent_map = gcc_xo_map,3208 .clkr.hw.init = &(const struct clk_init_data) {3209 .name = "uniphy_sys_clk_src",3210 .parent_data = gcc_xo_data,3211 .num_parents = ARRAY_SIZE(gcc_xo_data),3212 .ops = &clk_rcg2_ops,3213 },3214};3215 3216static struct clk_rcg2 nss_ts_clk_src = {3217 .cmd_rcgr = 0x17088,3218 .freq_tbl = ftbl_uniphy_sys_clk_src,3219 .mnd_width = 8,3220 .hid_width = 5,3221 .parent_map = gcc_xo_map,3222 .clkr.hw.init = &(const struct clk_init_data) {3223 .name = "nss_ts_clk_src",3224 .parent_data = gcc_xo_data,3225 .num_parents = ARRAY_SIZE(gcc_xo_data),3226 .ops = &clk_rcg2_ops,3227 },3228};3229 3230static struct clk_branch gcc_qdss_ts_clk = {3231 .halt_reg = 0x2d078,3232 .clkr = {3233 .enable_reg = 0x2d078,3234 .enable_mask = BIT(0),3235 .hw.init = &(const struct clk_init_data) {3236 .name = "gcc_qdss_ts_clk",3237 .parent_hws = (const struct clk_hw *[]) {3238 &nss_ts_clk_src.clkr.hw3239 },3240 .num_parents = 1,3241 .flags = CLK_SET_RATE_PARENT,3242 .ops = &clk_branch2_ops,3243 },3244 },3245};3246 3247static struct clk_fixed_factor qdss_dap_sync_clk_src = {3248 .mult = 1,3249 .div = 4,3250 .hw.init = &(const struct clk_init_data) {3251 .name = "qdss_dap_sync_clk_src",3252 .parent_hws = (const struct clk_hw *[]) {3253 &qdss_tsctr_clk_src.clkr.hw3254 },3255 .num_parents = 1,3256 .ops = &clk_fixed_factor_ops,3257 },3258};3259 3260static struct clk_branch gcc_qdss_tsctr_div4_clk = {3261 .halt_reg = 0x2d04c,3262 .clkr = {3263 .enable_reg = 0x2d04c,3264 .enable_mask = BIT(0),3265 .hw.init = &(const struct clk_init_data) {3266 .name = "gcc_qdss_tsctr_div4_clk",3267 .parent_hws = (const struct clk_hw *[]) {3268 &qdss_dap_sync_clk_src.hw3269 },3270 .num_parents = 1,3271 .flags = CLK_SET_RATE_PARENT,3272 .ops = &clk_branch2_ops,3273 },3274 },3275};3276 3277static struct clk_fixed_factor qdss_tsctr_div8_clk_src = {3278 .mult = 1,3279 .div = 8,3280 .hw.init = &(const struct clk_init_data) {3281 .name = "qdss_tsctr_div8_clk_src",3282 .parent_hws = (const struct clk_hw *[]) {3283 &qdss_tsctr_clk_src.clkr.hw3284 },3285 .num_parents = 1,3286 .ops = &clk_fixed_factor_ops,3287 },3288};3289 3290static struct clk_branch gcc_nss_ts_clk = {3291 .halt_reg = 0x17018,3292 .clkr = {3293 .enable_reg = 0x17018,3294 .enable_mask = BIT(0),3295 .hw.init = &(const struct clk_init_data) {3296 .name = "gcc_nss_ts_clk",3297 .parent_hws = (const struct clk_hw *[]) {3298 &nss_ts_clk_src.clkr.hw3299 },3300 .num_parents = 1,3301 .flags = CLK_SET_RATE_PARENT,3302 .ops = &clk_branch2_ops,3303 },3304 },3305};3306 3307static struct clk_branch gcc_qdss_tsctr_div8_clk = {3308 .halt_reg = 0x2d050,3309 .clkr = {3310 .enable_reg = 0x2d050,3311 .enable_mask = BIT(0),3312 .hw.init = &(const struct clk_init_data) {3313 .name = "gcc_qdss_tsctr_div8_clk",3314 .parent_hws = (const struct clk_hw *[]) {3315 &qdss_tsctr_div8_clk_src.hw3316 },3317 .num_parents = 1,3318 .flags = CLK_SET_RATE_PARENT,3319 .ops = &clk_branch2_ops,3320 },3321 },3322};3323 3324static struct clk_fixed_factor qdss_tsctr_div16_clk_src = {3325 .mult = 1,3326 .div = 16,3327 .hw.init = &(const struct clk_init_data) {3328 .name = "qdss_tsctr_div16_clk_src",3329 .parent_hws = (const struct clk_hw *[]) {3330 &qdss_tsctr_clk_src.clkr.hw3331 },3332 .num_parents = 1,3333 .ops = &clk_fixed_factor_ops,3334 },3335};3336 3337static struct clk_branch gcc_qdss_tsctr_div16_clk = {3338 .halt_reg = 0x2d054,3339 .clkr = {3340 .enable_reg = 0x2d054,3341 .enable_mask = BIT(0),3342 .hw.init = &(const struct clk_init_data) {3343 .name = "gcc_qdss_tsctr_div16_clk",3344 .parent_hws = (const struct clk_hw *[]) {3345 &qdss_tsctr_div16_clk_src.hw3346 },3347 .num_parents = 1,3348 .flags = CLK_SET_RATE_PARENT,3349 .ops = &clk_branch2_ops,3350 },3351 },3352};3353 3354static struct clk_branch gcc_q6ss_pclkdbg_clk = {3355 .halt_reg = 0x25024,3356 .clkr = {3357 .enable_reg = 0x25024,3358 .enable_mask = BIT(0),3359 .hw.init = &(const struct clk_init_data) {3360 .name = "gcc_q6ss_pclkdbg_clk",3361 .parent_hws = (const struct clk_hw *[]) {3362 &qdss_dap_sync_clk_src.hw3363 },3364 .num_parents = 1,3365 .flags = CLK_SET_RATE_PARENT,3366 .ops = &clk_branch2_ops,3367 },3368 },3369};3370 3371static struct clk_branch gcc_q6ss_trig_clk = {3372 .halt_reg = 0x25068,3373 .clkr = {3374 .enable_reg = 0x25068,3375 .enable_mask = BIT(0),3376 .hw.init = &(const struct clk_init_data) {3377 .name = "gcc_q6ss_trig_clk",3378 .parent_hws = (const struct clk_hw *[]) {3379 &qdss_dap_sync_clk_src.hw3380 },3381 .num_parents = 1,3382 .flags = CLK_SET_RATE_PARENT,3383 .ops = &clk_branch2_ops,3384 },3385 },3386};3387 3388static struct clk_branch gcc_wcss_dbg_ifc_apb_clk = {3389 .halt_reg = 0x25038,3390 .clkr = {3391 .enable_reg = 0x25038,3392 .enable_mask = BIT(0),3393 .hw.init = &(const struct clk_init_data) {3394 .name = "gcc_wcss_dbg_ifc_apb_clk",3395 .parent_hws = (const struct clk_hw *[]) {3396 &qdss_dap_sync_clk_src.hw3397 },3398 .num_parents = 1,3399 .flags = CLK_SET_RATE_PARENT,3400 .ops = &clk_branch2_ops,3401 },3402 },3403};3404 3405static struct clk_branch gcc_wcss_dbg_ifc_dapbus_clk = {3406 .halt_reg = 0x25044,3407 .clkr = {3408 .enable_reg = 0x25044,3409 .enable_mask = BIT(0),3410 .hw.init = &(const struct clk_init_data) {3411 .name = "gcc_wcss_dbg_ifc_dapbus_clk",3412 .parent_hws = (const struct clk_hw *[]) {3413 &qdss_dap_sync_clk_src.hw3414 },3415 .num_parents = 1,3416 .flags = CLK_SET_RATE_PARENT,3417 .ops = &clk_branch2_ops,3418 },3419 },3420};3421 3422static struct clk_branch gcc_qdss_dap_clk = {3423 .halt_reg = 0x2d058,3424 .clkr = {3425 .enable_reg = 0x2d058,3426 .enable_mask = BIT(0),3427 .hw.init = &(const struct clk_init_data) {3428 .name = "gcc_qdss_dap_clk",3429 .parent_hws = (const struct clk_hw *[]) {3430 &qdss_dap_sync_clk_src.hw3431 },3432 .num_parents = 1,3433 .flags = CLK_SET_RATE_PARENT,3434 .ops = &clk_branch2_ops,3435 },3436 },3437};3438 3439static struct clk_branch gcc_qdss_apb2jtag_clk = {3440 .halt_reg = 0x2d05c,3441 .clkr = {3442 .enable_reg = 0x2d05c,3443 .enable_mask = BIT(0),3444 .hw.init = &(const struct clk_init_data) {3445 .name = "gcc_qdss_apb2jtag_clk",3446 .parent_hws = (const struct clk_hw *[]) {3447 &qdss_dap_sync_clk_src.hw3448 },3449 .num_parents = 1,3450 .flags = CLK_SET_RATE_PARENT,3451 .ops = &clk_branch2_ops,3452 },3453 },3454};3455 3456static struct clk_fixed_factor qdss_tsctr_div3_clk_src = {3457 .mult = 1,3458 .div = 3,3459 .hw.init = &(const struct clk_init_data) {3460 .name = "qdss_tsctr_div3_clk_src",3461 .parent_hws = (const struct clk_hw *[]) {3462 &qdss_tsctr_clk_src.clkr.hw3463 },3464 .num_parents = 1,3465 .ops = &clk_fixed_factor_ops,3466 },3467};3468 3469static struct clk_branch gcc_qdss_tsctr_div3_clk = {3470 .halt_reg = 0x2d048,3471 .clkr = {3472 .enable_reg = 0x2d048,3473 .enable_mask = BIT(0),3474 .hw.init = &(const struct clk_init_data) {3475 .name = "gcc_qdss_tsctr_div3_clk",3476 .parent_hws = (const struct clk_hw *[]) {3477 &qdss_tsctr_div3_clk_src.hw3478 },3479 .num_parents = 1,3480 .flags = CLK_SET_RATE_PARENT,3481 .ops = &clk_branch2_ops,3482 },3483 },3484};3485 3486static const struct freq_tbl ftbl_qpic_io_macro_clk_src[] = {3487 F(24000000, P_XO, 1, 0, 0),3488 F(100000000, P_GPLL0, 8, 0, 0),3489 F(200000000, P_GPLL0, 4, 0, 0),3490 F(320000000, P_GPLL0, 2.5, 0, 0),3491 F(400000000, P_GPLL0, 2, 0, 0),3492 { }3493};3494 3495static struct clk_rcg2 qpic_io_macro_clk_src = {3496 .cmd_rcgr = 0x32004,3497 .freq_tbl = ftbl_qpic_io_macro_clk_src,3498 .hid_width = 5,3499 .parent_map = gcc_xo_gpll0_gpll2_map,3500 .clkr.hw.init = &(const struct clk_init_data) {3501 .name = "qpic_io_macro_clk_src",3502 .parent_data = gcc_xo_gpll0_gpll2,3503 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2),3504 .ops = &clk_rcg2_ops,3505 },3506};3507 3508static struct clk_branch gcc_qpic_io_macro_clk = {3509 .halt_reg = 0x3200c,3510 .clkr = {3511 .enable_reg = 0x3200c,3512 .enable_mask = BIT(0),3513 .hw.init = &(const struct clk_init_data){3514 .name = "gcc_qpic_io_macro_clk",3515 .parent_hws = (const struct clk_hw *[]){3516 &qpic_io_macro_clk_src.clkr.hw3517 },3518 .num_parents = 1,3519 .flags = CLK_SET_RATE_PARENT,3520 .ops = &clk_branch2_ops,3521 },3522 },3523};3524 3525static const struct freq_tbl ftbl_q6_axi_clk_src[] = {3526 F(533333333, P_GPLL0, 1.5, 0, 0),3527 { }3528};3529 3530static struct clk_rcg2 q6_axi_clk_src = {3531 .cmd_rcgr = 0x25004,3532 .freq_tbl = ftbl_q6_axi_clk_src,3533 .hid_width = 5,3534 .parent_map = gcc_xo_gpll0_gpll2_gpll4_pi_sleep_map,3535 .clkr.hw.init = &(const struct clk_init_data) {3536 .name = "q6_axi_clk_src",3537 .parent_data = gcc_xo_gpll0_gpll2_gpll4_pi_sleep,3538 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll4_pi_sleep),3539 .ops = &clk_rcg2_ops,3540 },3541};3542 3543static struct clk_branch gcc_q6_axim_clk = {3544 .halt_reg = 0x2500c,3545 .clkr = {3546 .enable_reg = 0x2500c,3547 .enable_mask = BIT(0),3548 .hw.init = &(const struct clk_init_data) {3549 .name = "gcc_q6_axim_clk",3550 .parent_hws = (const struct clk_hw *[]) {3551 &q6_axi_clk_src.clkr.hw3552 },3553 .num_parents = 1,3554 .flags = CLK_SET_RATE_PARENT,3555 .ops = &clk_branch2_ops,3556 },3557 },3558};3559 3560static struct clk_branch gcc_wcss_q6_tbu_clk = {3561 .halt_reg = 0x12050,3562 .halt_check = BRANCH_HALT_DELAY,3563 .clkr = {3564 .enable_reg = 0xb00c,3565 .enable_mask = BIT(6),3566 .hw.init = &(const struct clk_init_data) {3567 .name = "gcc_wcss_q6_tbu_clk",3568 .parent_hws = (const struct clk_hw *[]) {3569 &q6_axi_clk_src.clkr.hw3570 },3571 .num_parents = 1,3572 .flags = CLK_SET_RATE_PARENT,3573 .ops = &clk_branch2_ops,3574 },3575 },3576};3577 3578static struct clk_branch gcc_mem_noc_q6_axi_clk = {3579 .halt_reg = 0x19010,3580 .clkr = {3581 .enable_reg = 0x19010,3582 .enable_mask = BIT(0),3583 .hw.init = &(const struct clk_init_data) {3584 .name = "gcc_mem_noc_q6_axi_clk",3585 .parent_hws = (const struct clk_hw *[]) {3586 &q6_axi_clk_src.clkr.hw3587 },3588 .num_parents = 1,3589 .flags = CLK_SET_RATE_PARENT,3590 .ops = &clk_branch2_ops,3591 },3592 },3593};3594 3595static const struct freq_tbl ftbl_q6_axim2_clk_src[] = {3596 F(342857143, P_GPLL4, 3.5, 0, 0),3597 { }3598};3599 3600static const struct parent_map gcc_xo_gpll0_gpll4_bias_pll_ubinc_clk_map[] = {3601 { P_XO, 0 },3602 { P_GPLL0, 1 },3603 { P_GPLL4, 2 },3604 { P_BIAS_PLL_UBI_NC_CLK, 4 },3605};3606 3607static struct clk_rcg2 q6_axim2_clk_src = {3608 .cmd_rcgr = 0x25028,3609 .freq_tbl = ftbl_q6_axim2_clk_src,3610 .hid_width = 5,3611 .parent_map = gcc_xo_gpll0_gpll4_bias_pll_ubinc_clk_map,3612 .clkr.hw.init = &(const struct clk_init_data) {3613 .name = "q6_axim2_clk_src",3614 .parent_data = gcc_xo_gpll0_gpll4_bias_pll_ubi_nc_clk,3615 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4_bias_pll_ubi_nc_clk),3616 .ops = &clk_rcg2_ops,3617 },3618};3619 3620static const struct freq_tbl ftbl_nssnoc_memnoc_bfdcd_clk_src[] = {3621 F(533333333, P_GPLL0, 1.5, 0, 0),3622 { }3623};3624 3625static struct clk_rcg2 nssnoc_memnoc_bfdcd_clk_src = {3626 .cmd_rcgr = 0x17004,3627 .freq_tbl = ftbl_nssnoc_memnoc_bfdcd_clk_src,3628 .hid_width = 5,3629 .parent_map = gcc_xo_gpll0_gpll0_aux_gpll2_map,3630 .clkr.hw.init = &(const struct clk_init_data) {3631 .name = "nssnoc_memnoc_bfdcd_clk_src",3632 .parent_data = gcc_xo_gpll0_gpll0_aux_gpll2,3633 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_aux_gpll2),3634 .ops = &clk_rcg2_ops,3635 },3636};3637 3638static struct clk_branch gcc_nssnoc_memnoc_clk = {3639 .halt_reg = 0x17024,3640 .clkr = {3641 .enable_reg = 0x17024,3642 .enable_mask = BIT(0),3643 .hw.init = &(const struct clk_init_data) {3644 .name = "gcc_nssnoc_memnoc_clk",3645 .parent_hws = (const struct clk_hw *[]) {3646 &nssnoc_memnoc_bfdcd_clk_src.clkr.hw3647 },3648 .num_parents = 1,3649 .flags = CLK_SET_RATE_PARENT,3650 .ops = &clk_branch2_ops,3651 },3652 },3653};3654 3655static struct clk_branch gcc_nssnoc_mem_noc_1_clk = {3656 .halt_reg = 0x17084,3657 .clkr = {3658 .enable_reg = 0x17084,3659 .enable_mask = BIT(0),3660 .hw.init = &(const struct clk_init_data) {3661 .name = "gcc_nssnoc_mem_noc_1_clk",3662 .parent_hws = (const struct clk_hw *[]) {3663 &nssnoc_memnoc_bfdcd_clk_src.clkr.hw3664 },3665 .num_parents = 1,3666 .flags = CLK_SET_RATE_PARENT,3667 .ops = &clk_branch2_ops,3668 },3669 },3670};3671 3672static struct clk_branch gcc_nss_tbu_clk = {3673 .halt_reg = 0x12040,3674 .clkr = {3675 .enable_reg = 0xb00c,3676 .enable_mask = BIT(4),3677 .hw.init = &(const struct clk_init_data) {3678 .name = "gcc_nss_tbu_clk",3679 .parent_hws = (const struct clk_hw *[]) {3680 &nssnoc_memnoc_bfdcd_clk_src.clkr.hw3681 },3682 .num_parents = 1,3683 .flags = CLK_SET_RATE_PARENT,3684 .ops = &clk_branch2_ops,3685 },3686 },3687};3688 3689static struct clk_branch gcc_mem_noc_nssnoc_clk = {3690 .halt_reg = 0x19014,3691 .clkr = {3692 .enable_reg = 0x19014,3693 .enable_mask = BIT(0),3694 .hw.init = &(const struct clk_init_data) {3695 .name = "gcc_mem_noc_nssnoc_clk",3696 .parent_hws = (const struct clk_hw *[]) {3697 &nssnoc_memnoc_bfdcd_clk_src.clkr.hw3698 },3699 .num_parents = 1,3700 .flags = CLK_SET_RATE_PARENT,3701 .ops = &clk_branch2_ops,3702 },3703 },3704};3705 3706static const struct freq_tbl ftbl_lpass_axim_clk_src[] = {3707 F(133333333, P_GPLL0, 6, 0, 0),3708 { }3709};3710 3711static struct clk_rcg2 lpass_axim_clk_src = {3712 .cmd_rcgr = 0x2700c,3713 .freq_tbl = ftbl_lpass_axim_clk_src,3714 .hid_width = 5,3715 .parent_map = gcc_xo_gpll0_map,3716 .clkr.hw.init = &(const struct clk_init_data) {3717 .name = "lpass_axim_clk_src",3718 .parent_data = gcc_xo_gpll0,3719 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),3720 .ops = &clk_rcg2_ops,3721 },3722};3723 3724static struct clk_rcg2 lpass_sway_clk_src = {3725 .cmd_rcgr = 0x27004,3726 .freq_tbl = ftbl_lpass_axim_clk_src,3727 .hid_width = 5,3728 .parent_map = gcc_xo_gpll0_map,3729 .clkr.hw.init = &(const struct clk_init_data) {3730 .name = "lpass_sway_clk_src",3731 .parent_data = gcc_xo_gpll0,3732 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),3733 .ops = &clk_rcg2_ops,3734 },3735};3736 3737static const struct freq_tbl ftbl_adss_pwm_clk_src[] = {3738 F(24000000, P_XO, 1, 0, 0),3739 F(100000000, P_GPLL0, 8, 0, 0),3740 { }3741};3742 3743static struct clk_rcg2 adss_pwm_clk_src = {3744 .cmd_rcgr = 0x1c004,3745 .freq_tbl = ftbl_adss_pwm_clk_src,3746 .hid_width = 5,3747 .parent_map = gcc_xo_gpll0_map,3748 .clkr.hw.init = &(const struct clk_init_data) {3749 .name = "adss_pwm_clk_src",3750 .parent_data = gcc_xo_gpll0,3751 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),3752 .ops = &clk_rcg2_ops,3753 },3754};3755 3756static struct clk_branch gcc_adss_pwm_clk = {3757 .halt_reg = 0x1c00c,3758 .clkr = {3759 .enable_reg = 0x1c00c,3760 .enable_mask = BIT(0),3761 .hw.init = &(const struct clk_init_data) {3762 .name = "gcc_adss_pwm_clk",3763 .parent_hws = (const struct clk_hw *[]) {3764 &adss_pwm_clk_src.clkr.hw3765 },3766 .num_parents = 1,3767 .flags = CLK_SET_RATE_PARENT,3768 .ops = &clk_branch2_ops,3769 },3770 },3771};3772 3773static const struct freq_tbl ftbl_gp1_clk_src[] = {3774 F(24000000, P_XO, 1, 0, 0),3775 F(200000000, P_GPLL0, 4, 0, 0),3776 { }3777};3778 3779static struct clk_rcg2 gp1_clk_src = {3780 .cmd_rcgr = 0x8004,3781 .freq_tbl = ftbl_gp1_clk_src,3782 .hid_width = 5,3783 .parent_map = gcc_xo_gpll0_gpll0_sleep_clk_map,3784 .clkr.hw.init = &(const struct clk_init_data) {3785 .name = "gp1_clk_src",3786 .parent_data = gcc_xo_gpll0_gpll0_sleep_clk,3787 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_sleep_clk),3788 .ops = &clk_rcg2_ops,3789 },3790};3791 3792static struct clk_rcg2 gp2_clk_src = {3793 .cmd_rcgr = 0x9004,3794 .freq_tbl = ftbl_gp1_clk_src,3795 .hid_width = 5,3796 .parent_map = gcc_xo_gpll0_gpll0_sleep_clk_map,3797 .clkr.hw.init = &(const struct clk_init_data) {3798 .name = "gp2_clk_src",3799 .parent_data = gcc_xo_gpll0_gpll0_sleep_clk,3800 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_sleep_clk),3801 .ops = &clk_rcg2_ops,3802 },3803};3804 3805static struct clk_rcg2 gp3_clk_src = {3806 .cmd_rcgr = 0xa004,3807 .freq_tbl = ftbl_gp1_clk_src,3808 .hid_width = 5,3809 .parent_map = gcc_xo_gpll0_gpll0_sleep_clk_map,3810 .clkr.hw.init = &(const struct clk_init_data) {3811 .name = "gp3_clk_src",3812 .parent_data = gcc_xo_gpll0_gpll0_sleep_clk,3813 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_sleep_clk),3814 .ops = &clk_rcg2_ops,3815 },3816};3817 3818static struct clk_branch gcc_xo_clk_src = {3819 .halt_reg = 0x34004,3820 .clkr = {3821 .enable_reg = 0x34004,3822 .enable_mask = BIT(1),3823 .hw.init = &(const struct clk_init_data) {3824 .name = "gcc_xo_clk_src",3825 .parent_data = gcc_xo_data,3826 .num_parents = ARRAY_SIZE(gcc_xo_data),3827 .flags = CLK_SET_RATE_PARENT,3828 .ops = &clk_branch2_ops,3829 },3830 },3831};3832 3833static struct clk_branch gcc_nssnoc_xo_dcd_clk = {3834 .halt_reg = 0x17074,3835 .clkr = {3836 .enable_reg = 0x17074,3837 .enable_mask = BIT(0),3838 .hw.init = &(const struct clk_init_data) {3839 .name = "gcc_nssnoc_xo_dcd_clk",3840 .parent_hws = (const struct clk_hw *[]) {3841 &gcc_xo_clk_src.clkr.hw3842 },3843 .num_parents = 1,3844 .flags = CLK_SET_RATE_PARENT,3845 .ops = &clk_branch2_ops,3846 },3847 },3848};3849 3850static struct clk_branch gcc_xo_clk = {3851 .halt_reg = 0x34018,3852 .clkr = {3853 .enable_reg = 0x34018,3854 .enable_mask = BIT(0),3855 .hw.init = &(const struct clk_init_data) {3856 .name = "gcc_xo_clk",3857 .parent_hws = (const struct clk_hw *[]) {3858 &gcc_xo_clk_src.clkr.hw3859 },3860 .num_parents = 1,3861 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,3862 .ops = &clk_branch2_ops,3863 },3864 },3865};3866 3867static struct clk_branch gcc_uniphy0_sys_clk = {3868 .halt_reg = 0x17048,3869 .clkr = {3870 .enable_reg = 0x17048,3871 .enable_mask = BIT(0),3872 .hw.init = &(const struct clk_init_data) {3873 .name = "gcc_uniphy0_sys_clk",3874 .parent_hws = (const struct clk_hw *[]) {3875 &uniphy_sys_clk_src.clkr.hw3876 },3877 .num_parents = 1,3878 .flags = CLK_SET_RATE_PARENT,3879 .ops = &clk_branch2_ops,3880 },3881 },3882};3883 3884static struct clk_branch gcc_uniphy1_sys_clk = {3885 .halt_reg = 0x17058,3886 .clkr = {3887 .enable_reg = 0x17058,3888 .enable_mask = BIT(0),3889 .hw.init = &(const struct clk_init_data) {3890 .name = "gcc_uniphy1_sys_clk",3891 .parent_hws = (const struct clk_hw *[]) {3892 &uniphy_sys_clk_src.clkr.hw3893 },3894 .num_parents = 1,3895 .flags = CLK_SET_RATE_PARENT,3896 .ops = &clk_branch2_ops,3897 },3898 },3899};3900 3901static struct clk_branch gcc_uniphy2_sys_clk = {3902 .halt_reg = 0x17068,3903 .clkr = {3904 .enable_reg = 0x17068,3905 .enable_mask = BIT(0),3906 .hw.init = &(const struct clk_init_data) {3907 .name = "gcc_uniphy2_sys_clk",3908 .parent_hws = (const struct clk_hw *[]) {3909 &uniphy_sys_clk_src.clkr.hw3910 },3911 .num_parents = 1,3912 .flags = CLK_SET_RATE_PARENT,3913 .ops = &clk_branch2_ops,3914 },3915 },3916};3917 3918static struct clk_branch gcc_cmn_12gpll_sys_clk = {3919 .halt_reg = 0x3a008,3920 .clkr = {3921 .enable_reg = 0x3a008,3922 .enable_mask = BIT(0),3923 .hw.init = &(const struct clk_init_data) {3924 .name = "gcc_cmn_12gpll_sys_clk",3925 .parent_hws = (const struct clk_hw *[]) {3926 &uniphy_sys_clk_src.clkr.hw3927 },3928 .num_parents = 1,3929 .flags = CLK_SET_RATE_PARENT,3930 .ops = &clk_branch2_ops,3931 },3932 },3933};3934 3935static struct clk_fixed_factor gcc_xo_div4_clk_src = {3936 .mult = 1,3937 .div = 4,3938 .hw.init = &(const struct clk_init_data) {3939 .name = "gcc_xo_div4_clk_src",3940 .parent_hws = (const struct clk_hw *[]) {3941 &gcc_xo_clk_src.clkr.hw3942 },3943 .num_parents = 1,3944 .flags = CLK_SET_RATE_PARENT,3945 .ops = &clk_fixed_factor_ops,3946 },3947};3948 3949static struct clk_branch gcc_nssnoc_qosgen_ref_clk = {3950 .halt_reg = 0x1701c,3951 .clkr = {3952 .enable_reg = 0x1701c,3953 .enable_mask = BIT(0),3954 .hw.init = &(const struct clk_init_data) {3955 .name = "gcc_nssnoc_qosgen_ref_clk",3956 .parent_hws = (const struct clk_hw *[]) {3957 &gcc_xo_div4_clk_src.hw3958 },3959 .num_parents = 1,3960 .flags = CLK_SET_RATE_PARENT,3961 .ops = &clk_branch2_ops,3962 },3963 },3964};3965 3966static struct clk_branch gcc_nssnoc_timeout_ref_clk = {3967 .halt_reg = 0x17020,3968 .clkr = {3969 .enable_reg = 0x17020,3970 .enable_mask = BIT(0),3971 .hw.init = &(const struct clk_init_data) {3972 .name = "gcc_nssnoc_timeout_ref_clk",3973 .parent_hws = (const struct clk_hw *[]) {3974 &gcc_xo_div4_clk_src.hw3975 },3976 .num_parents = 1,3977 .flags = CLK_SET_RATE_PARENT,3978 .ops = &clk_branch2_ops,3979 },3980 },3981};3982 3983static struct clk_branch gcc_xo_div4_clk = {3984 .halt_reg = 0x3401c,3985 .clkr = {3986 .enable_reg = 0x3401c,3987 .enable_mask = BIT(0),3988 .hw.init = &(const struct clk_init_data) {3989 .name = "gcc_xo_div4_clk",3990 .parent_hws = (const struct clk_hw *[]) {3991 &gcc_xo_div4_clk_src.hw3992 },3993 .num_parents = 1,3994 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,3995 .ops = &clk_branch2_ops,3996 },3997 },3998};3999 4000static struct clk_hw *gcc_ipq9574_hws[] = {4001 &gpll0_out_main_div2.hw,4002 &gcc_xo_div4_clk_src.hw,4003 &qdss_dap_sync_clk_src.hw,4004 &qdss_tsctr_div2_clk_src.hw,4005 &qdss_tsctr_div8_clk_src.hw,4006 &qdss_tsctr_div16_clk_src.hw,4007 &qdss_tsctr_div3_clk_src.hw,4008 &gcc_eud_at_div_clk_src.hw,4009};4010 4011static struct clk_regmap *gcc_ipq9574_clks[] = {4012 [GPLL0_MAIN] = &gpll0_main.clkr,4013 [GPLL0] = &gpll0.clkr,4014 [GPLL4_MAIN] = &gpll4_main.clkr,4015 [GPLL4] = &gpll4.clkr,4016 [GPLL2_MAIN] = &gpll2_main.clkr,4017 [GPLL2] = &gpll2.clkr,4018 [GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr,4019 [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,4020 [APSS_AXI_CLK_SRC] = &apss_axi_clk_src.clkr,4021 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,4022 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,4023 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,4024 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,4025 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,4026 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,4027 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,4028 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,4029 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,4030 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,4031 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,4032 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,4033 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,4034 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,4035 [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,4036 [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,4037 [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,4038 [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,4039 [GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,4040 [GCC_APSS_AXI_CLK] = &gcc_apss_axi_clk.clkr,4041 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,4042 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,4043 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,4044 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,4045 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,4046 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,4047 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,4048 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,4049 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,4050 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,4051 [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,4052 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,4053 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,4054 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,4055 [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,4056 [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,4057 [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,4058 [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,4059 [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,4060 [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,4061 [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,4062 [GCC_CRYPTO_CLK_SRC] = &gcc_crypto_clk_src.clkr,4063 [PCIE0_AXI_M_CLK_SRC] = &pcie0_axi_m_clk_src.clkr,4064 [GCC_PCIE0_AXI_M_CLK] = &gcc_pcie0_axi_m_clk.clkr,4065 [PCIE1_AXI_M_CLK_SRC] = &pcie1_axi_m_clk_src.clkr,4066 [GCC_PCIE1_AXI_M_CLK] = &gcc_pcie1_axi_m_clk.clkr,4067 [PCIE2_AXI_M_CLK_SRC] = &pcie2_axi_m_clk_src.clkr,4068 [GCC_PCIE2_AXI_M_CLK] = &gcc_pcie2_axi_m_clk.clkr,4069 [PCIE3_AXI_M_CLK_SRC] = &pcie3_axi_m_clk_src.clkr,4070 [GCC_PCIE3_AXI_M_CLK] = &gcc_pcie3_axi_m_clk.clkr,4071 [PCIE0_AXI_S_CLK_SRC] = &pcie0_axi_s_clk_src.clkr,4072 [GCC_PCIE0_AXI_S_BRIDGE_CLK] = &gcc_pcie0_axi_s_bridge_clk.clkr,4073 [GCC_PCIE0_AXI_S_CLK] = &gcc_pcie0_axi_s_clk.clkr,4074 [PCIE1_AXI_S_CLK_SRC] = &pcie1_axi_s_clk_src.clkr,4075 [GCC_PCIE1_AXI_S_BRIDGE_CLK] = &gcc_pcie1_axi_s_bridge_clk.clkr,4076 [GCC_PCIE1_AXI_S_CLK] = &gcc_pcie1_axi_s_clk.clkr,4077 [PCIE2_AXI_S_CLK_SRC] = &pcie2_axi_s_clk_src.clkr,4078 [GCC_PCIE2_AXI_S_BRIDGE_CLK] = &gcc_pcie2_axi_s_bridge_clk.clkr,4079 [GCC_PCIE2_AXI_S_CLK] = &gcc_pcie2_axi_s_clk.clkr,4080 [PCIE3_AXI_S_CLK_SRC] = &pcie3_axi_s_clk_src.clkr,4081 [GCC_PCIE3_AXI_S_BRIDGE_CLK] = &gcc_pcie3_axi_s_bridge_clk.clkr,4082 [GCC_PCIE3_AXI_S_CLK] = &gcc_pcie3_axi_s_clk.clkr,4083 [PCIE0_PIPE_CLK_SRC] = &pcie0_pipe_clk_src.clkr,4084 [PCIE1_PIPE_CLK_SRC] = &pcie1_pipe_clk_src.clkr,4085 [PCIE2_PIPE_CLK_SRC] = &pcie2_pipe_clk_src.clkr,4086 [PCIE3_PIPE_CLK_SRC] = &pcie3_pipe_clk_src.clkr,4087 [PCIE_AUX_CLK_SRC] = &pcie_aux_clk_src.clkr,4088 [GCC_PCIE0_AUX_CLK] = &gcc_pcie0_aux_clk.clkr,4089 [GCC_PCIE1_AUX_CLK] = &gcc_pcie1_aux_clk.clkr,4090 [GCC_PCIE2_AUX_CLK] = &gcc_pcie2_aux_clk.clkr,4091 [GCC_PCIE3_AUX_CLK] = &gcc_pcie3_aux_clk.clkr,4092 [PCIE0_RCHNG_CLK_SRC] = &pcie0_rchng_clk_src.clkr,4093 [GCC_PCIE0_RCHNG_CLK] = &gcc_pcie0_rchng_clk.clkr,4094 [PCIE1_RCHNG_CLK_SRC] = &pcie1_rchng_clk_src.clkr,4095 [GCC_PCIE1_RCHNG_CLK] = &gcc_pcie1_rchng_clk.clkr,4096 [PCIE2_RCHNG_CLK_SRC] = &pcie2_rchng_clk_src.clkr,4097 [GCC_PCIE2_RCHNG_CLK] = &gcc_pcie2_rchng_clk.clkr,4098 [PCIE3_RCHNG_CLK_SRC] = &pcie3_rchng_clk_src.clkr,4099 [GCC_PCIE3_RCHNG_CLK] = &gcc_pcie3_rchng_clk.clkr,4100 [GCC_PCIE0_AHB_CLK] = &gcc_pcie0_ahb_clk.clkr,4101 [GCC_PCIE1_AHB_CLK] = &gcc_pcie1_ahb_clk.clkr,4102 [GCC_PCIE2_AHB_CLK] = &gcc_pcie2_ahb_clk.clkr,4103 [GCC_PCIE3_AHB_CLK] = &gcc_pcie3_ahb_clk.clkr,4104 [USB0_AUX_CLK_SRC] = &usb0_aux_clk_src.clkr,4105 [GCC_USB0_AUX_CLK] = &gcc_usb0_aux_clk.clkr,4106 [USB0_MASTER_CLK_SRC] = &usb0_master_clk_src.clkr,4107 [GCC_USB0_MASTER_CLK] = &gcc_usb0_master_clk.clkr,4108 [GCC_SNOC_USB_CLK] = &gcc_snoc_usb_clk.clkr,4109 [GCC_ANOC_USB_AXI_CLK] = &gcc_anoc_usb_axi_clk.clkr,4110 [USB0_MOCK_UTMI_CLK_SRC] = &usb0_mock_utmi_clk_src.clkr,4111 [USB0_MOCK_UTMI_DIV_CLK_SRC] = &usb0_mock_utmi_div_clk_src.clkr,4112 [GCC_USB0_MOCK_UTMI_CLK] = &gcc_usb0_mock_utmi_clk.clkr,4113 [USB0_PIPE_CLK_SRC] = &usb0_pipe_clk_src.clkr,4114 [GCC_USB0_PHY_CFG_AHB_CLK] = &gcc_usb0_phy_cfg_ahb_clk.clkr,4115 [GCC_USB0_PIPE_CLK] = &gcc_usb0_pipe_clk.clkr,4116 [GCC_USB0_SLEEP_CLK] = &gcc_usb0_sleep_clk.clkr,4117 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,4118 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,4119 [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,4120 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,4121 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,4122 [PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,4123 [GCC_NSSCFG_CLK] = &gcc_nsscfg_clk.clkr,4124 [GCC_NSSNOC_NSSCC_CLK] = &gcc_nssnoc_nsscc_clk.clkr,4125 [GCC_NSSCC_CLK] = &gcc_nsscc_clk.clkr,4126 [GCC_NSSNOC_PCNOC_1_CLK] = &gcc_nssnoc_pcnoc_1_clk.clkr,4127 [GCC_QDSS_DAP_AHB_CLK] = &gcc_qdss_dap_ahb_clk.clkr,4128 [GCC_QDSS_CFG_AHB_CLK] = &gcc_qdss_cfg_ahb_clk.clkr,4129 [GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr,4130 [GCC_QPIC_CLK] = &gcc_qpic_clk.clkr,4131 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,4132 [GCC_MDIO_AHB_CLK] = &gcc_mdio_ahb_clk.clkr,4133 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,4134 [GCC_UNIPHY0_AHB_CLK] = &gcc_uniphy0_ahb_clk.clkr,4135 [GCC_UNIPHY1_AHB_CLK] = &gcc_uniphy1_ahb_clk.clkr,4136 [GCC_UNIPHY2_AHB_CLK] = &gcc_uniphy2_ahb_clk.clkr,4137 [GCC_CMN_12GPLL_AHB_CLK] = &gcc_cmn_12gpll_ahb_clk.clkr,4138 [GCC_CMN_12GPLL_APU_CLK] = &gcc_cmn_12gpll_apu_clk.clkr,4139 [SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,4140 [GCC_NSSNOC_SNOC_CLK] = &gcc_nssnoc_snoc_clk.clkr,4141 [GCC_NSSNOC_SNOC_1_CLK] = &gcc_nssnoc_snoc_1_clk.clkr,4142 [GCC_QDSS_ETR_USB_CLK] = &gcc_qdss_etr_usb_clk.clkr,4143 [WCSS_AHB_CLK_SRC] = &wcss_ahb_clk_src.clkr,4144 [GCC_Q6_AHB_CLK] = &gcc_q6_ahb_clk.clkr,4145 [GCC_Q6_AHB_S_CLK] = &gcc_q6_ahb_s_clk.clkr,4146 [GCC_WCSS_ECAHB_CLK] = &gcc_wcss_ecahb_clk.clkr,4147 [GCC_WCSS_ACMT_CLK] = &gcc_wcss_acmt_clk.clkr,4148 [GCC_SYS_NOC_WCSS_AHB_CLK] = &gcc_sys_noc_wcss_ahb_clk.clkr,4149 [WCSS_AXI_M_CLK_SRC] = &wcss_axi_m_clk_src.clkr,4150 [GCC_ANOC_WCSS_AXI_M_CLK] = &gcc_anoc_wcss_axi_m_clk.clkr,4151 [QDSS_AT_CLK_SRC] = &qdss_at_clk_src.clkr,4152 [GCC_Q6SS_ATBM_CLK] = &gcc_q6ss_atbm_clk.clkr,4153 [GCC_WCSS_DBG_IFC_ATB_CLK] = &gcc_wcss_dbg_ifc_atb_clk.clkr,4154 [GCC_NSSNOC_ATB_CLK] = &gcc_nssnoc_atb_clk.clkr,4155 [GCC_QDSS_AT_CLK] = &gcc_qdss_at_clk.clkr,4156 [GCC_SYS_NOC_AT_CLK] = &gcc_sys_noc_at_clk.clkr,4157 [GCC_PCNOC_AT_CLK] = &gcc_pcnoc_at_clk.clkr,4158 [GCC_USB0_EUD_AT_CLK] = &gcc_usb0_eud_at_clk.clkr,4159 [GCC_QDSS_EUD_AT_CLK] = &gcc_qdss_eud_at_clk.clkr,4160 [QDSS_STM_CLK_SRC] = &qdss_stm_clk_src.clkr,4161 [GCC_QDSS_STM_CLK] = &gcc_qdss_stm_clk.clkr,4162 [GCC_SYS_NOC_QDSS_STM_AXI_CLK] = &gcc_sys_noc_qdss_stm_axi_clk.clkr,4163 [QDSS_TRACECLKIN_CLK_SRC] = &qdss_traceclkin_clk_src.clkr,4164 [GCC_QDSS_TRACECLKIN_CLK] = &gcc_qdss_traceclkin_clk.clkr,4165 [QDSS_TSCTR_CLK_SRC] = &qdss_tsctr_clk_src.clkr,4166 [GCC_Q6_TSCTR_1TO2_CLK] = &gcc_q6_tsctr_1to2_clk.clkr,4167 [GCC_WCSS_DBG_IFC_NTS_CLK] = &gcc_wcss_dbg_ifc_nts_clk.clkr,4168 [GCC_QDSS_TSCTR_DIV2_CLK] = &gcc_qdss_tsctr_div2_clk.clkr,4169 [GCC_QDSS_TS_CLK] = &gcc_qdss_ts_clk.clkr,4170 [GCC_QDSS_TSCTR_DIV4_CLK] = &gcc_qdss_tsctr_div4_clk.clkr,4171 [GCC_NSS_TS_CLK] = &gcc_nss_ts_clk.clkr,4172 [GCC_QDSS_TSCTR_DIV8_CLK] = &gcc_qdss_tsctr_div8_clk.clkr,4173 [GCC_QDSS_TSCTR_DIV16_CLK] = &gcc_qdss_tsctr_div16_clk.clkr,4174 [GCC_Q6SS_PCLKDBG_CLK] = &gcc_q6ss_pclkdbg_clk.clkr,4175 [GCC_Q6SS_TRIG_CLK] = &gcc_q6ss_trig_clk.clkr,4176 [GCC_WCSS_DBG_IFC_APB_CLK] = &gcc_wcss_dbg_ifc_apb_clk.clkr,4177 [GCC_WCSS_DBG_IFC_DAPBUS_CLK] = &gcc_wcss_dbg_ifc_dapbus_clk.clkr,4178 [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,4179 [GCC_QDSS_APB2JTAG_CLK] = &gcc_qdss_apb2jtag_clk.clkr,4180 [GCC_QDSS_TSCTR_DIV3_CLK] = &gcc_qdss_tsctr_div3_clk.clkr,4181 [QPIC_IO_MACRO_CLK_SRC] = &qpic_io_macro_clk_src.clkr,4182 [GCC_QPIC_IO_MACRO_CLK] = &gcc_qpic_io_macro_clk.clkr,4183 [Q6_AXI_CLK_SRC] = &q6_axi_clk_src.clkr,4184 [GCC_Q6_AXIM_CLK] = &gcc_q6_axim_clk.clkr,4185 [GCC_WCSS_Q6_TBU_CLK] = &gcc_wcss_q6_tbu_clk.clkr,4186 [GCC_MEM_NOC_Q6_AXI_CLK] = &gcc_mem_noc_q6_axi_clk.clkr,4187 [Q6_AXIM2_CLK_SRC] = &q6_axim2_clk_src.clkr,4188 [NSSNOC_MEMNOC_BFDCD_CLK_SRC] = &nssnoc_memnoc_bfdcd_clk_src.clkr,4189 [GCC_NSSNOC_MEMNOC_CLK] = &gcc_nssnoc_memnoc_clk.clkr,4190 [GCC_NSSNOC_MEM_NOC_1_CLK] = &gcc_nssnoc_mem_noc_1_clk.clkr,4191 [GCC_NSS_TBU_CLK] = &gcc_nss_tbu_clk.clkr,4192 [GCC_MEM_NOC_NSSNOC_CLK] = &gcc_mem_noc_nssnoc_clk.clkr,4193 [LPASS_AXIM_CLK_SRC] = &lpass_axim_clk_src.clkr,4194 [LPASS_SWAY_CLK_SRC] = &lpass_sway_clk_src.clkr,4195 [ADSS_PWM_CLK_SRC] = &adss_pwm_clk_src.clkr,4196 [GCC_ADSS_PWM_CLK] = &gcc_adss_pwm_clk.clkr,4197 [GP1_CLK_SRC] = &gp1_clk_src.clkr,4198 [GP2_CLK_SRC] = &gp2_clk_src.clkr,4199 [GP3_CLK_SRC] = &gp3_clk_src.clkr,4200 [GCC_XO_CLK_SRC] = &gcc_xo_clk_src.clkr,4201 [GCC_NSSNOC_XO_DCD_CLK] = &gcc_nssnoc_xo_dcd_clk.clkr,4202 [GCC_XO_CLK] = &gcc_xo_clk.clkr,4203 [GCC_NSSNOC_QOSGEN_REF_CLK] = &gcc_nssnoc_qosgen_ref_clk.clkr,4204 [GCC_NSSNOC_TIMEOUT_REF_CLK] = &gcc_nssnoc_timeout_ref_clk.clkr,4205 [GCC_XO_DIV4_CLK] = &gcc_xo_div4_clk.clkr,4206 [GCC_UNIPHY0_SYS_CLK] = &gcc_uniphy0_sys_clk.clkr,4207 [GCC_UNIPHY1_SYS_CLK] = &gcc_uniphy1_sys_clk.clkr,4208 [GCC_UNIPHY2_SYS_CLK] = &gcc_uniphy2_sys_clk.clkr,4209 [GCC_CMN_12GPLL_SYS_CLK] = &gcc_cmn_12gpll_sys_clk.clkr,4210 [GCC_Q6SS_BOOT_CLK] = &gcc_q6ss_boot_clk.clkr,4211 [UNIPHY_SYS_CLK_SRC] = &uniphy_sys_clk_src.clkr,4212 [NSS_TS_CLK_SRC] = &nss_ts_clk_src.clkr,4213 [GCC_ANOC_PCIE0_1LANE_M_CLK] = &gcc_anoc_pcie0_1lane_m_clk.clkr,4214 [GCC_ANOC_PCIE1_1LANE_M_CLK] = &gcc_anoc_pcie1_1lane_m_clk.clkr,4215 [GCC_ANOC_PCIE2_2LANE_M_CLK] = &gcc_anoc_pcie2_2lane_m_clk.clkr,4216 [GCC_ANOC_PCIE3_2LANE_M_CLK] = &gcc_anoc_pcie3_2lane_m_clk.clkr,4217 [GCC_SNOC_PCIE0_1LANE_S_CLK] = &gcc_snoc_pcie0_1lane_s_clk.clkr,4218 [GCC_SNOC_PCIE1_1LANE_S_CLK] = &gcc_snoc_pcie1_1lane_s_clk.clkr,4219 [GCC_SNOC_PCIE2_2LANE_S_CLK] = &gcc_snoc_pcie2_2lane_s_clk.clkr,4220 [GCC_SNOC_PCIE3_2LANE_S_CLK] = &gcc_snoc_pcie3_2lane_s_clk.clkr,4221 [GCC_PCIE0_PIPE_CLK] = &gcc_pcie0_pipe_clk.clkr,4222 [GCC_PCIE1_PIPE_CLK] = &gcc_pcie1_pipe_clk.clkr,4223 [GCC_PCIE2_PIPE_CLK] = &gcc_pcie2_pipe_clk.clkr,4224 [GCC_PCIE3_PIPE_CLK] = &gcc_pcie3_pipe_clk.clkr,4225};4226 4227static const struct qcom_reset_map gcc_ipq9574_resets[] = {4228 [GCC_ADSS_BCR] = { 0x1c000, 0 },4229 [GCC_ANOC0_TBU_BCR] = { 0x1203c, 0 },4230 [GCC_ANOC1_TBU_BCR] = { 0x1204c, 0 },4231 [GCC_ANOC_BCR] = { 0x2e074, 0 },4232 [GCC_APC0_VOLTAGE_DROOP_DETECTOR_BCR] = { 0x38000, 0 },4233 [GCC_APSS_TCU_BCR] = { 0x12014, 0 },4234 [GCC_BLSP1_BCR] = { 0x01000, 0 },4235 [GCC_BLSP1_QUP1_BCR] = { 0x02000, 0 },4236 [GCC_BLSP1_QUP2_BCR] = { 0x03000, 0 },4237 [GCC_BLSP1_QUP3_BCR] = { 0x04000, 0 },4238 [GCC_BLSP1_QUP4_BCR] = { 0x05000, 0 },4239 [GCC_BLSP1_QUP5_BCR] = { 0x06000, 0 },4240 [GCC_BLSP1_QUP6_BCR] = { 0x07000, 0 },4241 [GCC_BLSP1_UART1_BCR] = { 0x02028, 0 },4242 [GCC_BLSP1_UART2_BCR] = { 0x03028, 0 },4243 [GCC_BLSP1_UART3_BCR] = { 0x04028, 0 },4244 [GCC_BLSP1_UART4_BCR] = { 0x05028, 0 },4245 [GCC_BLSP1_UART5_BCR] = { 0x06028, 0 },4246 [GCC_BLSP1_UART6_BCR] = { 0x07028, 0 },4247 [GCC_BOOT_ROM_BCR] = { 0x13028, 0 },4248 [GCC_CMN_BLK_BCR] = { 0x3a000, 0 },4249 [GCC_CMN_BLK_AHB_ARES] = { 0x3a010, 0 },4250 [GCC_CMN_BLK_SYS_ARES] = { 0x3a010, 1 },4251 [GCC_CMN_BLK_APU_ARES] = { 0x3a010, 2 },4252 [GCC_CRYPTO_BCR] = { 0x16000, 0 },4253 [GCC_DCC_BCR] = { 0x35000, 0 },4254 [GCC_DDRSS_BCR] = { 0x11000, 0 },4255 [GCC_IMEM_BCR] = { 0x0e000, 0 },4256 [GCC_LPASS_BCR] = { 0x27000, 0 },4257 [GCC_MDIO_BCR] = { 0x1703c, 0 },4258 [GCC_MPM_BCR] = { 0x37000, 0 },4259 [GCC_MSG_RAM_BCR] = { 0x26000, 0 },4260 [GCC_NSS_BCR] = { 0x17000, 0 },4261 [GCC_NSS_TBU_BCR] = { 0x12044, 0 },4262 [GCC_NSSNOC_MEMNOC_1_ARES] = { 0x17038, 13 },4263 [GCC_NSSNOC_PCNOC_1_ARES] = { 0x17038, 12 },4264 [GCC_NSSNOC_SNOC_1_ARES] = { 0x17038, 11 },4265 [GCC_NSSNOC_XO_DCD_ARES] = { 0x17038, 10 },4266 [GCC_NSSNOC_TS_ARES] = { 0x17038, 9 },4267 [GCC_NSSCC_ARES] = { 0x17038, 8 },4268 [GCC_NSSNOC_NSSCC_ARES] = { 0x17038, 7 },4269 [GCC_NSSNOC_ATB_ARES] = { 0x17038, 6 },4270 [GCC_NSSNOC_MEMNOC_ARES] = { 0x17038, 5 },4271 [GCC_NSSNOC_QOSGEN_REF_ARES] = { 0x17038, 4 },4272 [GCC_NSSNOC_SNOC_ARES] = { 0x17038, 3 },4273 [GCC_NSSNOC_TIMEOUT_REF_ARES] = { 0x17038, 2 },4274 [GCC_NSS_CFG_ARES] = { 0x17038, 1 },4275 [GCC_UBI0_DBG_ARES] = { 0x17038, 0 },4276 [GCC_PCIE0PHY_PHY_BCR] = { 0x2805c, 0 },4277 [GCC_PCIE0_AHB_ARES] = { 0x28058, 7 },4278 [GCC_PCIE0_AUX_ARES] = { 0x28058, 6 },4279 [GCC_PCIE0_AXI_M_ARES] = { 0x28058, 5 },4280 [GCC_PCIE0_AXI_M_STICKY_ARES] = { 0x28058, 4 },4281 [GCC_PCIE0_AXI_S_ARES] = { 0x28058, 3 },4282 [GCC_PCIE0_AXI_S_STICKY_ARES] = { 0x28058, 2 },4283 [GCC_PCIE0_CORE_STICKY_ARES] = { 0x28058, 1 },4284 [GCC_PCIE0_PIPE_ARES] = { 0x28058, 0 },4285 [GCC_PCIE1_AHB_ARES] = { 0x29058, 7 },4286 [GCC_PCIE1_AUX_ARES] = { 0x29058, 6 },4287 [GCC_PCIE1_AXI_M_ARES] = { 0x29058, 5 },4288 [GCC_PCIE1_AXI_M_STICKY_ARES] = { 0x29058, 4 },4289 [GCC_PCIE1_AXI_S_ARES] = { 0x29058, 3 },4290 [GCC_PCIE1_AXI_S_STICKY_ARES] = { 0x29058, 2 },4291 [GCC_PCIE1_CORE_STICKY_ARES] = { 0x29058, 1 },4292 [GCC_PCIE1_PIPE_ARES] = { 0x29058, 0 },4293 [GCC_PCIE2_AHB_ARES] = { 0x2a058, 7 },4294 [GCC_PCIE2_AUX_ARES] = { 0x2a058, 6 },4295 [GCC_PCIE2_AXI_M_ARES] = { 0x2a058, 5 },4296 [GCC_PCIE2_AXI_M_STICKY_ARES] = { 0x2a058, 4 },4297 [GCC_PCIE2_AXI_S_ARES] = { 0x2a058, 3 },4298 [GCC_PCIE2_AXI_S_STICKY_ARES] = { 0x2a058, 2 },4299 [GCC_PCIE2_CORE_STICKY_ARES] = { 0x2a058, 1 },4300 [GCC_PCIE2_PIPE_ARES] = { 0x2a058, 0 },4301 [GCC_PCIE3_AHB_ARES] = { 0x2b058, 7 },4302 [GCC_PCIE3_AUX_ARES] = { 0x2b058, 6 },4303 [GCC_PCIE3_AXI_M_ARES] = { 0x2b058, 5 },4304 [GCC_PCIE3_AXI_M_STICKY_ARES] = { 0x2b058, 4 },4305 [GCC_PCIE3_AXI_S_ARES] = { 0x2b058, 3 },4306 [GCC_PCIE3_AXI_S_STICKY_ARES] = { 0x2b058, 2 },4307 [GCC_PCIE3_CORE_STICKY_ARES] = { 0x2b058, 1 },4308 [GCC_PCIE3_PIPE_ARES] = { 0x2b058, 0 },4309 [GCC_PCIE0_BCR] = { 0x28000, 0 },4310 [GCC_PCIE0_LINK_DOWN_BCR] = { 0x28054, 0 },4311 [GCC_PCIE0_PHY_BCR] = { 0x28060, 0 },4312 [GCC_PCIE1_BCR] = { 0x29000, 0 },4313 [GCC_PCIE1_LINK_DOWN_BCR] = { 0x29054, 0 },4314 [GCC_PCIE1_PHY_BCR] = { 0x29060, 0 },4315 [GCC_PCIE1PHY_PHY_BCR] = { 0x2905c, 0 },4316 [GCC_PCIE2_BCR] = { 0x2a000, 0 },4317 [GCC_PCIE2_LINK_DOWN_BCR] = { 0x2a054, 0 },4318 [GCC_PCIE2_PHY_BCR] = { 0x2a060, 0 },4319 [GCC_PCIE2PHY_PHY_BCR] = { 0x2a05c, 0 },4320 [GCC_PCIE3_BCR] = { 0x2b000, 0 },4321 [GCC_PCIE3_LINK_DOWN_BCR] = { 0x2b054, 0 },4322 [GCC_PCIE3PHY_PHY_BCR] = { 0x2b05c, 0 },4323 [GCC_PCIE3_PHY_BCR] = { 0x2b060, 0 },4324 [GCC_PCNOC_BCR] = { 0x31000, 0 },4325 [GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x31030, 0 },4326 [GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x31038, 0 },4327 [GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x31040, 0 },4328 [GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x31048, 0 },4329 [GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x31050, 0 },4330 [GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x31058, 0 },4331 [GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x31060, 0 },4332 [GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x31068, 0 },4333 [GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x31070, 0 },4334 [GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x31078, 0 },4335 [GCC_PCNOC_TBU_BCR] = { 0x12034, 0 },4336 [GCC_PRNG_BCR] = { 0x13020, 0 },4337 [GCC_Q6SS_DBG_ARES] = { 0x2506c, 4 },4338 [GCC_Q6_AHB_ARES] = { 0x2506c, 3 },4339 [GCC_Q6_AHB_S_ARES] = { 0x2506c, 2 },4340 [GCC_Q6_AXIM2_ARES] = { 0x2506c, 1 },4341 [GCC_Q6_AXIM_ARES] = { 0x2506c, 0 },4342 [GCC_QDSS_BCR] = { 0x2d000, 0 },4343 [GCC_QPIC_BCR] = { 0x32000, 0 },4344 [GCC_QPIC_AHB_ARES] = { 0x3201c, 1 },4345 [GCC_QPIC_ARES] = { 0x3201c, 0 },4346 [GCC_QUSB2_0_PHY_BCR] = { 0x2c068, 0 },4347 [GCC_RBCPR_BCR] = { 0x39000, 0 },4348 [GCC_RBCPR_MX_BCR] = { 0x39014, 0 },4349 [GCC_SDCC_BCR] = { 0x33000, 0 },4350 [GCC_SEC_CTRL_BCR] = { 0x1a000, 0 },4351 [GCC_SMMU_CFG_BCR] = { 0x1202c, 0 },4352 [GCC_SNOC_BCR] = { 0x2e000, 0 },4353 [GCC_SPDM_BCR] = { 0x36000, 0 },4354 [GCC_TCSR_BCR] = { 0x3d000, 0 },4355 [GCC_TLMM_BCR] = { 0x3e000, 0 },4356 [GCC_TME_BCR] = { 0x10000, 0 },4357 [GCC_UNIPHY0_BCR] = { 0x17044, 0 },4358 [GCC_UNIPHY0_SYS_RESET] = { 0x17050, 0 },4359 [GCC_UNIPHY0_AHB_RESET] = { 0x17050, 1 },4360 [GCC_UNIPHY0_XPCS_RESET] = { 0x17050, 2 },4361 [GCC_UNIPHY1_SYS_RESET] = { 0x17060, 0 },4362 [GCC_UNIPHY1_AHB_RESET] = { 0x17060, 1 },4363 [GCC_UNIPHY1_XPCS_RESET] = { 0x17060, 2 },4364 [GCC_UNIPHY2_SYS_RESET] = { 0x17070, 0 },4365 [GCC_UNIPHY2_AHB_RESET] = { 0x17070, 1 },4366 [GCC_UNIPHY2_XPCS_RESET] = { 0x17070, 2 },4367 [GCC_UNIPHY1_BCR] = { 0x17054, 0 },4368 [GCC_UNIPHY2_BCR] = { 0x17064, 0 },4369 [GCC_USB0_PHY_BCR] = { 0x2c06c, 0 },4370 [GCC_USB3PHY_0_PHY_BCR] = { 0x2c070, 0 },4371 [GCC_USB_BCR] = { 0x2c000, 0 },4372 [GCC_USB_MISC_RESET] = { 0x2c064, 0 },4373 [GCC_WCSSAON_RESET] = { 0x25074, 0 },4374 [GCC_WCSS_ACMT_ARES] = { 0x25070, 5 },4375 [GCC_WCSS_AHB_S_ARES] = { 0x25070, 4 },4376 [GCC_WCSS_AXI_M_ARES] = { 0x25070, 3 },4377 [GCC_WCSS_BCR] = { 0x18004, 0 },4378 [GCC_WCSS_DBG_ARES] = { 0x25070, 2 },4379 [GCC_WCSS_DBG_BDG_ARES] = { 0x25070, 1 },4380 [GCC_WCSS_ECAHB_ARES] = { 0x25070, 0 },4381 [GCC_WCSS_Q6_BCR] = { 0x18000, 0 },4382 [GCC_WCSS_Q6_TBU_BCR] = { 0x12054, 0 },4383};4384 4385#define IPQ_APPS_ID 9574 /* some unique value */4386 4387static struct qcom_icc_hws_data icc_ipq9574_hws[] = {4388 { MASTER_ANOC_PCIE0, SLAVE_ANOC_PCIE0, GCC_ANOC_PCIE0_1LANE_M_CLK },4389 { MASTER_SNOC_PCIE0, SLAVE_SNOC_PCIE0, GCC_SNOC_PCIE0_1LANE_S_CLK },4390 { MASTER_ANOC_PCIE1, SLAVE_ANOC_PCIE1, GCC_ANOC_PCIE1_1LANE_M_CLK },4391 { MASTER_SNOC_PCIE1, SLAVE_SNOC_PCIE1, GCC_SNOC_PCIE1_1LANE_S_CLK },4392 { MASTER_ANOC_PCIE2, SLAVE_ANOC_PCIE2, GCC_ANOC_PCIE2_2LANE_M_CLK },4393 { MASTER_SNOC_PCIE2, SLAVE_SNOC_PCIE2, GCC_SNOC_PCIE2_2LANE_S_CLK },4394 { MASTER_ANOC_PCIE3, SLAVE_ANOC_PCIE3, GCC_ANOC_PCIE3_2LANE_M_CLK },4395 { MASTER_SNOC_PCIE3, SLAVE_SNOC_PCIE3, GCC_SNOC_PCIE3_2LANE_S_CLK },4396 { MASTER_USB, SLAVE_USB, GCC_SNOC_USB_CLK },4397 { MASTER_USB_AXI, SLAVE_USB_AXI, GCC_ANOC_USB_AXI_CLK },4398 { MASTER_NSSNOC_NSSCC, SLAVE_NSSNOC_NSSCC, GCC_NSSNOC_NSSCC_CLK },4399 { MASTER_NSSNOC_SNOC_0, SLAVE_NSSNOC_SNOC_0, GCC_NSSNOC_SNOC_CLK },4400 { MASTER_NSSNOC_SNOC_1, SLAVE_NSSNOC_SNOC_1, GCC_NSSNOC_SNOC_1_CLK },4401 { MASTER_NSSNOC_PCNOC_1, SLAVE_NSSNOC_PCNOC_1, GCC_NSSNOC_PCNOC_1_CLK },4402 { MASTER_NSSNOC_QOSGEN_REF, SLAVE_NSSNOC_QOSGEN_REF, GCC_NSSNOC_QOSGEN_REF_CLK },4403 { MASTER_NSSNOC_TIMEOUT_REF, SLAVE_NSSNOC_TIMEOUT_REF, GCC_NSSNOC_TIMEOUT_REF_CLK },4404 { MASTER_NSSNOC_XO_DCD, SLAVE_NSSNOC_XO_DCD, GCC_NSSNOC_XO_DCD_CLK },4405 { MASTER_NSSNOC_ATB, SLAVE_NSSNOC_ATB, GCC_NSSNOC_ATB_CLK },4406 { MASTER_MEM_NOC_NSSNOC, SLAVE_MEM_NOC_NSSNOC, GCC_MEM_NOC_NSSNOC_CLK },4407 { MASTER_NSSNOC_MEMNOC, SLAVE_NSSNOC_MEMNOC, GCC_NSSNOC_MEMNOC_CLK },4408 { MASTER_NSSNOC_MEM_NOC_1, SLAVE_NSSNOC_MEM_NOC_1, GCC_NSSNOC_MEM_NOC_1_CLK },4409};4410 4411static const struct of_device_id gcc_ipq9574_match_table[] = {4412 { .compatible = "qcom,ipq9574-gcc" },4413 { }4414};4415MODULE_DEVICE_TABLE(of, gcc_ipq9574_match_table);4416 4417static const struct regmap_config gcc_ipq9574_regmap_config = {4418 .reg_bits = 32,4419 .reg_stride = 4,4420 .val_bits = 32,4421 .max_register = 0x7fffc,4422 .fast_io = true,4423};4424 4425static const struct qcom_cc_desc gcc_ipq9574_desc = {4426 .config = &gcc_ipq9574_regmap_config,4427 .clks = gcc_ipq9574_clks,4428 .num_clks = ARRAY_SIZE(gcc_ipq9574_clks),4429 .resets = gcc_ipq9574_resets,4430 .num_resets = ARRAY_SIZE(gcc_ipq9574_resets),4431 .clk_hws = gcc_ipq9574_hws,4432 .num_clk_hws = ARRAY_SIZE(gcc_ipq9574_hws),4433 .icc_hws = icc_ipq9574_hws,4434 .num_icc_hws = ARRAY_SIZE(icc_ipq9574_hws),4435 .icc_first_node_id = IPQ_APPS_ID,4436};4437 4438static int gcc_ipq9574_probe(struct platform_device *pdev)4439{4440 return qcom_cc_probe(pdev, &gcc_ipq9574_desc);4441}4442 4443static struct platform_driver gcc_ipq9574_driver = {4444 .probe = gcc_ipq9574_probe,4445 .driver = {4446 .name = "qcom,gcc-ipq9574",4447 .of_match_table = gcc_ipq9574_match_table,4448 .sync_state = icc_sync_state,4449 },4450};4451 4452static int __init gcc_ipq9574_init(void)4453{4454 return platform_driver_register(&gcc_ipq9574_driver);4455}4456core_initcall(gcc_ipq9574_init);4457 4458static void __exit gcc_ipq9574_exit(void)4459{4460 platform_driver_unregister(&gcc_ipq9574_driver);4461}4462module_exit(gcc_ipq9574_exit);4463 4464MODULE_DESCRIPTION("Qualcomm Technologies, Inc. GCC IPQ9574 Driver");4465MODULE_LICENSE("GPL");4466