Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /*
0003  * Copyright (c) 2018, The Linux Foundation. All rights reserved.
0004  */
0005 
0006 #include <linux/kernel.h>
0007 #include <linux/err.h>
0008 #include <linux/platform_device.h>
0009 #include <linux/module.h>
0010 #include <linux/of.h>
0011 #include <linux/of_device.h>
0012 #include <linux/clk-provider.h>
0013 #include <linux/regmap.h>
0014 
0015 #include <linux/reset-controller.h>
0016 #include <dt-bindings/clock/qcom,gcc-ipq6018.h>
0017 #include <dt-bindings/reset/qcom,gcc-ipq6018.h>
0018 
0019 #include "common.h"
0020 #include "clk-regmap.h"
0021 #include "clk-pll.h"
0022 #include "clk-rcg.h"
0023 #include "clk-branch.h"
0024 #include "clk-alpha-pll.h"
0025 #include "clk-regmap-divider.h"
0026 #include "clk-regmap-mux.h"
0027 #include "reset.h"
0028 
0029 #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
0030 
0031 enum {
0032     P_XO,
0033     P_BIAS_PLL,
0034     P_UNIPHY0_RX,
0035     P_UNIPHY0_TX,
0036     P_UNIPHY1_RX,
0037     P_BIAS_PLL_NSS_NOC,
0038     P_UNIPHY1_TX,
0039     P_PCIE20_PHY0_PIPE,
0040     P_USB3PHY_0_PIPE,
0041     P_GPLL0,
0042     P_GPLL0_DIV2,
0043     P_GPLL2,
0044     P_GPLL4,
0045     P_GPLL6,
0046     P_SLEEP_CLK,
0047     P_UBI32_PLL,
0048     P_NSS_CRYPTO_PLL,
0049     P_PI_SLEEP,
0050 };
0051 
0052 static struct clk_alpha_pll gpll0_main = {
0053     .offset = 0x21000,
0054     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0055     .clkr = {
0056         .enable_reg = 0x0b000,
0057         .enable_mask = BIT(0),
0058         .hw.init = &(struct clk_init_data){
0059             .name = "gpll0_main",
0060             .parent_data = &(const struct clk_parent_data){
0061                 .fw_name = "xo",
0062             },
0063             .num_parents = 1,
0064             .ops = &clk_alpha_pll_ops,
0065         },
0066     },
0067 };
0068 
0069 static struct clk_fixed_factor gpll0_out_main_div2 = {
0070     .mult = 1,
0071     .div = 2,
0072     .hw.init = &(struct clk_init_data){
0073         .name = "gpll0_out_main_div2",
0074         .parent_hws = (const struct clk_hw *[]){
0075                 &gpll0_main.clkr.hw },
0076         .num_parents = 1,
0077         .ops = &clk_fixed_factor_ops,
0078         .flags = CLK_SET_RATE_PARENT,
0079     },
0080 };
0081 
0082 static struct clk_alpha_pll_postdiv gpll0 = {
0083     .offset = 0x21000,
0084     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0085     .width = 4,
0086     .clkr.hw.init = &(struct clk_init_data){
0087         .name = "gpll0",
0088         .parent_hws = (const struct clk_hw *[]){
0089                 &gpll0_main.clkr.hw },
0090         .num_parents = 1,
0091         .ops = &clk_alpha_pll_postdiv_ro_ops,
0092         .flags = CLK_SET_RATE_PARENT,
0093     },
0094 };
0095 
0096 static const struct clk_parent_data gcc_xo_gpll0_gpll0_out_main_div2[] = {
0097     { .fw_name = "xo" },
0098     { .hw = &gpll0.clkr.hw},
0099     { .hw = &gpll0_out_main_div2.hw},
0100 };
0101 
0102 static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_map[] = {
0103     { P_XO, 0 },
0104     { P_GPLL0, 1 },
0105     { P_GPLL0_DIV2, 4 },
0106 };
0107 
0108 static struct clk_alpha_pll ubi32_pll_main = {
0109     .offset = 0x25000,
0110     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA],
0111     .flags = SUPPORTS_DYNAMIC_UPDATE,
0112     .clkr = {
0113         .enable_reg = 0x0b000,
0114         .enable_mask = BIT(6),
0115         .hw.init = &(struct clk_init_data){
0116             .name = "ubi32_pll_main",
0117             .parent_data = &(const struct clk_parent_data){
0118                 .fw_name = "xo",
0119             },
0120             .num_parents = 1,
0121             .ops = &clk_alpha_pll_huayra_ops,
0122         },
0123     },
0124 };
0125 
0126 static struct clk_alpha_pll_postdiv ubi32_pll = {
0127     .offset = 0x25000,
0128     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA],
0129     .width = 2,
0130     .clkr.hw.init = &(struct clk_init_data){
0131         .name = "ubi32_pll",
0132         .parent_hws = (const struct clk_hw *[]){
0133                 &ubi32_pll_main.clkr.hw },
0134         .num_parents = 1,
0135         .ops = &clk_alpha_pll_postdiv_ro_ops,
0136         .flags = CLK_SET_RATE_PARENT,
0137     },
0138 };
0139 
0140 static struct clk_alpha_pll gpll6_main = {
0141     .offset = 0x37000,
0142     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
0143     .clkr = {
0144         .enable_reg = 0x0b000,
0145         .enable_mask = BIT(7),
0146         .hw.init = &(struct clk_init_data){
0147             .name = "gpll6_main",
0148             .parent_data = &(const struct clk_parent_data){
0149                 .fw_name = "xo",
0150             },
0151             .num_parents = 1,
0152             .ops = &clk_alpha_pll_ops,
0153         },
0154     },
0155 };
0156 
0157 static struct clk_alpha_pll_postdiv gpll6 = {
0158     .offset = 0x37000,
0159     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
0160     .width = 2,
0161     .clkr.hw.init = &(struct clk_init_data){
0162         .name = "gpll6",
0163         .parent_hws = (const struct clk_hw *[]){
0164                 &gpll6_main.clkr.hw },
0165         .num_parents = 1,
0166         .ops = &clk_alpha_pll_postdiv_ro_ops,
0167         .flags = CLK_SET_RATE_PARENT,
0168     },
0169 };
0170 
0171 static struct clk_alpha_pll gpll4_main = {
0172     .offset = 0x24000,
0173     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0174     .clkr = {
0175         .enable_reg = 0x0b000,
0176         .enable_mask = BIT(5),
0177         .hw.init = &(struct clk_init_data){
0178             .name = "gpll4_main",
0179             .parent_data = &(const struct clk_parent_data){
0180                 .fw_name = "xo",
0181             },
0182             .num_parents = 1,
0183             .ops = &clk_alpha_pll_ops,
0184         },
0185     },
0186 };
0187 
0188 static struct clk_alpha_pll_postdiv gpll4 = {
0189     .offset = 0x24000,
0190     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0191     .width = 4,
0192     .clkr.hw.init = &(struct clk_init_data){
0193         .name = "gpll4",
0194         .parent_hws = (const struct clk_hw *[]){
0195                 &gpll4_main.clkr.hw },
0196         .num_parents = 1,
0197         .ops = &clk_alpha_pll_postdiv_ro_ops,
0198         .flags = CLK_SET_RATE_PARENT,
0199     },
0200 };
0201 
0202 static const struct freq_tbl ftbl_pcnoc_bfdcd_clk_src[] = {
0203     F(24000000, P_XO, 1, 0, 0),
0204     F(50000000, P_GPLL0, 16, 0, 0),
0205     F(100000000, P_GPLL0, 8, 0, 0),
0206     { }
0207 };
0208 
0209 static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
0210     .cmd_rcgr = 0x27000,
0211     .freq_tbl = ftbl_pcnoc_bfdcd_clk_src,
0212     .hid_width = 5,
0213     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
0214     .clkr.hw.init = &(struct clk_init_data){
0215         .name = "pcnoc_bfdcd_clk_src",
0216         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
0217         .num_parents = 3,
0218         .ops = &clk_rcg2_ops,
0219     },
0220 };
0221 
0222 static struct clk_alpha_pll gpll2_main = {
0223     .offset = 0x4a000,
0224     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0225     .clkr = {
0226         .enable_reg = 0x0b000,
0227         .enable_mask = BIT(2),
0228         .hw.init = &(struct clk_init_data){
0229             .name = "gpll2_main",
0230             .parent_data = &(const struct clk_parent_data){
0231                 .fw_name = "xo",
0232             },
0233             .num_parents = 1,
0234             .ops = &clk_alpha_pll_ops,
0235         },
0236     },
0237 };
0238 
0239 static struct clk_alpha_pll_postdiv gpll2 = {
0240     .offset = 0x4a000,
0241     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0242     .width = 4,
0243     .clkr.hw.init = &(struct clk_init_data){
0244         .name = "gpll2",
0245         .parent_hws = (const struct clk_hw *[]){
0246                 &gpll2_main.clkr.hw },
0247         .num_parents = 1,
0248         .ops = &clk_alpha_pll_postdiv_ro_ops,
0249         .flags = CLK_SET_RATE_PARENT,
0250     },
0251 };
0252 
0253 static struct clk_alpha_pll nss_crypto_pll_main = {
0254     .offset = 0x22000,
0255     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0256     .clkr = {
0257         .enable_reg = 0x0b000,
0258         .enable_mask = BIT(4),
0259         .hw.init = &(struct clk_init_data){
0260             .name = "nss_crypto_pll_main",
0261             .parent_data = &(const struct clk_parent_data){
0262                 .fw_name = "xo",
0263             },
0264             .num_parents = 1,
0265             .ops = &clk_alpha_pll_ops,
0266         },
0267     },
0268 };
0269 
0270 static struct clk_alpha_pll_postdiv nss_crypto_pll = {
0271     .offset = 0x22000,
0272     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0273     .width = 4,
0274     .clkr.hw.init = &(struct clk_init_data){
0275         .name = "nss_crypto_pll",
0276         .parent_hws = (const struct clk_hw *[]){
0277                 &nss_crypto_pll_main.clkr.hw },
0278         .num_parents = 1,
0279         .ops = &clk_alpha_pll_postdiv_ro_ops,
0280         .flags = CLK_SET_RATE_PARENT,
0281     },
0282 };
0283 
0284 static const struct freq_tbl ftbl_qdss_tsctr_clk_src[] = {
0285     F(160000000, P_GPLL0_DIV2, 2.5, 0, 0),
0286     F(320000000, P_GPLL0, 2.5, 0, 0),
0287     F(600000000, P_GPLL4, 2, 0, 0),
0288     { }
0289 };
0290 
0291 static const struct clk_parent_data gcc_xo_gpll4_gpll0_gpll6_gpll0_div2[] = {
0292     { .fw_name = "xo" },
0293     { .hw = &gpll4.clkr.hw },
0294     { .hw = &gpll0.clkr.hw },
0295     { .hw = &gpll6.clkr.hw },
0296     { .hw = &gpll0_out_main_div2.hw },
0297 };
0298 
0299 static const struct parent_map gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map[] = {
0300     { P_XO, 0 },
0301     { P_GPLL4, 1 },
0302     { P_GPLL0, 2 },
0303     { P_GPLL6, 3 },
0304     { P_GPLL0_DIV2, 4 },
0305 };
0306 
0307 static struct clk_rcg2 qdss_tsctr_clk_src = {
0308     .cmd_rcgr = 0x29064,
0309     .freq_tbl = ftbl_qdss_tsctr_clk_src,
0310     .hid_width = 5,
0311     .parent_map = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map,
0312     .clkr.hw.init = &(struct clk_init_data){
0313         .name = "qdss_tsctr_clk_src",
0314         .parent_data = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2,
0315         .num_parents = 5,
0316         .ops = &clk_rcg2_ops,
0317     },
0318 };
0319 
0320 static struct clk_fixed_factor qdss_dap_sync_clk_src = {
0321     .mult = 1,
0322     .div = 4,
0323     .hw.init = &(struct clk_init_data){
0324         .name = "qdss_dap_sync_clk_src",
0325         .parent_hws = (const struct clk_hw *[]){
0326                 &qdss_tsctr_clk_src.clkr.hw },
0327         .num_parents = 1,
0328         .ops = &clk_fixed_factor_ops,
0329     },
0330 };
0331 
0332 static const struct freq_tbl ftbl_qdss_at_clk_src[] = {
0333     F(66670000, P_GPLL0_DIV2, 6, 0, 0),
0334     F(240000000, P_GPLL4, 5, 0, 0),
0335     { }
0336 };
0337 
0338 static struct clk_rcg2 qdss_at_clk_src = {
0339     .cmd_rcgr = 0x2900c,
0340     .freq_tbl = ftbl_qdss_at_clk_src,
0341     .hid_width = 5,
0342     .parent_map = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map,
0343     .clkr.hw.init = &(struct clk_init_data){
0344         .name = "qdss_at_clk_src",
0345         .parent_data = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2,
0346         .num_parents = 5,
0347         .ops = &clk_rcg2_ops,
0348     },
0349 };
0350 
0351 static struct clk_fixed_factor qdss_tsctr_div2_clk_src = {
0352     .mult = 1,
0353     .div = 2,
0354     .hw.init = &(struct clk_init_data){
0355         .name = "qdss_tsctr_div2_clk_src",
0356         .parent_hws = (const struct clk_hw *[]){
0357                 &qdss_tsctr_clk_src.clkr.hw },
0358         .num_parents = 1,
0359         .flags = CLK_SET_RATE_PARENT,
0360         .ops = &clk_fixed_factor_ops,
0361     },
0362 };
0363 
0364 static const struct freq_tbl ftbl_nss_ppe_clk_src[] = {
0365     F(24000000, P_XO, 1, 0, 0),
0366     F(300000000, P_BIAS_PLL, 1, 0, 0),
0367     { }
0368 };
0369 
0370 static const struct clk_parent_data gcc_xo_bias_gpll0_gpll4_nss_ubi32[] = {
0371     { .fw_name = "xo" },
0372     { .fw_name = "bias_pll_cc_clk" },
0373     { .hw = &gpll0.clkr.hw },
0374     { .hw = &gpll4.clkr.hw },
0375     { .hw = &nss_crypto_pll.clkr.hw },
0376     { .hw = &ubi32_pll.clkr.hw },
0377 };
0378 
0379 static const struct parent_map gcc_xo_bias_gpll0_gpll4_nss_ubi32_map[] = {
0380     { P_XO, 0 },
0381     { P_BIAS_PLL, 1 },
0382     { P_GPLL0, 2 },
0383     { P_GPLL4, 3 },
0384     { P_NSS_CRYPTO_PLL, 4 },
0385     { P_UBI32_PLL, 5 },
0386 };
0387 
0388 static struct clk_rcg2 nss_ppe_clk_src = {
0389     .cmd_rcgr = 0x68080,
0390     .freq_tbl = ftbl_nss_ppe_clk_src,
0391     .hid_width = 5,
0392     .parent_map = gcc_xo_bias_gpll0_gpll4_nss_ubi32_map,
0393     .clkr.hw.init = &(struct clk_init_data){
0394         .name = "nss_ppe_clk_src",
0395         .parent_data = gcc_xo_bias_gpll0_gpll4_nss_ubi32,
0396         .num_parents = 6,
0397         .ops = &clk_rcg2_ops,
0398     },
0399 };
0400 
0401 static struct clk_branch gcc_xo_clk_src = {
0402     .halt_reg = 0x30018,
0403     .clkr = {
0404         .enable_reg = 0x30018,
0405         .enable_mask = BIT(1),
0406         .hw.init = &(struct clk_init_data){
0407             .name = "gcc_xo_clk_src",
0408             .parent_data = &(const struct clk_parent_data){
0409                 .fw_name = "xo",
0410             },
0411             .num_parents = 1,
0412             .flags = CLK_SET_RATE_PARENT,
0413             .ops = &clk_branch2_ops,
0414         },
0415     },
0416 };
0417 
0418 static const struct freq_tbl ftbl_nss_ce_clk_src[] = {
0419     F(24000000, P_XO, 1, 0, 0),
0420     F(200000000, P_GPLL0, 4, 0, 0),
0421     { }
0422 };
0423 
0424 static const struct clk_parent_data gcc_xo_gpll0[] = {
0425     { .fw_name = "xo" },
0426     { .hw = &gpll0.clkr.hw },
0427 };
0428 
0429 static const struct parent_map gcc_xo_gpll0_map[] = {
0430     { P_XO, 0 },
0431     { P_GPLL0, 1 },
0432 };
0433 
0434 static struct clk_rcg2 nss_ce_clk_src = {
0435     .cmd_rcgr = 0x68098,
0436     .freq_tbl = ftbl_nss_ce_clk_src,
0437     .hid_width = 5,
0438     .parent_map = gcc_xo_gpll0_map,
0439     .clkr.hw.init = &(struct clk_init_data){
0440         .name = "nss_ce_clk_src",
0441         .parent_data = gcc_xo_gpll0,
0442         .num_parents = 2,
0443         .ops = &clk_rcg2_ops,
0444     },
0445 };
0446 
0447 static struct clk_branch gcc_sleep_clk_src = {
0448     .halt_reg = 0x30000,
0449     .clkr = {
0450         .enable_reg = 0x30000,
0451         .enable_mask = BIT(1),
0452         .hw.init = &(struct clk_init_data){
0453             .name = "gcc_sleep_clk_src",
0454             .parent_data = &(const struct clk_parent_data){
0455                 .fw_name = "sleep_clk",
0456             },
0457             .num_parents = 1,
0458             .ops = &clk_branch2_ops,
0459         },
0460     },
0461 };
0462 
0463 static const struct freq_tbl ftbl_snoc_nssnoc_bfdcd_clk_src[] = {
0464     F(24000000, P_XO, 1, 0, 0),
0465     F(50000000, P_GPLL0_DIV2, 8, 0, 0),
0466     F(100000000, P_GPLL0, 8, 0, 0),
0467     F(133333333, P_GPLL0, 6, 0, 0),
0468     F(160000000, P_GPLL0, 5, 0, 0),
0469     F(200000000, P_GPLL0, 4, 0, 0),
0470     F(266666667, P_GPLL0, 3, 0, 0),
0471     { }
0472 };
0473 
0474 static const struct clk_parent_data
0475             gcc_xo_gpll0_gpll6_gpll0_out_main_div2[] = {
0476     { .fw_name = "xo" },
0477     { .hw = &gpll0.clkr.hw },
0478     { .hw = &gpll6.clkr.hw },
0479     { .hw = &gpll0_out_main_div2.hw },
0480 };
0481 
0482 static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map[] = {
0483     { P_XO, 0 },
0484     { P_GPLL0, 1 },
0485     { P_GPLL6, 2 },
0486     { P_GPLL0_DIV2, 3 },
0487 };
0488 
0489 static struct clk_rcg2 snoc_nssnoc_bfdcd_clk_src = {
0490     .cmd_rcgr = 0x76054,
0491     .freq_tbl = ftbl_snoc_nssnoc_bfdcd_clk_src,
0492     .hid_width = 5,
0493     .parent_map = gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map,
0494     .clkr.hw.init = &(struct clk_init_data){
0495         .name = "snoc_nssnoc_bfdcd_clk_src",
0496         .parent_data = gcc_xo_gpll0_gpll6_gpll0_out_main_div2,
0497         .num_parents = 4,
0498         .ops = &clk_rcg2_ops,
0499     },
0500 };
0501 
0502 static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
0503     F(24000000, P_XO, 1, 0, 0),
0504     F(25000000, P_GPLL0_DIV2, 16, 0, 0),
0505     F(50000000, P_GPLL0, 16, 0, 0),
0506     F(100000000, P_GPLL0, 8, 0, 0),
0507     { }
0508 };
0509 
0510 static struct clk_rcg2 apss_ahb_clk_src = {
0511     .cmd_rcgr = 0x46000,
0512     .freq_tbl = ftbl_apss_ahb_clk_src,
0513     .hid_width = 5,
0514     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
0515     .clkr.hw.init = &(struct clk_init_data){
0516         .name = "apss_ahb_clk_src",
0517         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
0518         .num_parents = 3,
0519         .ops = &clk_rcg2_ops,
0520     },
0521 };
0522 
0523 static const struct freq_tbl ftbl_nss_port5_rx_clk_src[] = {
0524     F(24000000, P_XO, 1, 0, 0),
0525     F(25000000, P_UNIPHY1_RX, 12.5, 0, 0),
0526     F(25000000, P_UNIPHY0_RX, 5, 0, 0),
0527     F(78125000, P_UNIPHY1_RX, 4, 0, 0),
0528     F(125000000, P_UNIPHY1_RX, 2.5, 0, 0),
0529     F(125000000, P_UNIPHY0_RX, 1, 0, 0),
0530     F(156250000, P_UNIPHY1_RX, 2, 0, 0),
0531     F(312500000, P_UNIPHY1_RX, 1, 0, 0),
0532     { }
0533 };
0534 
0535 static const struct clk_parent_data
0536 gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias[] = {
0537     { .fw_name = "xo" },
0538     { .fw_name = "uniphy0_gcc_rx_clk" },
0539     { .fw_name = "uniphy0_gcc_tx_clk" },
0540     { .fw_name = "uniphy1_gcc_rx_clk" },
0541     { .fw_name = "uniphy1_gcc_tx_clk" },
0542     { .hw = &ubi32_pll.clkr.hw },
0543     { .fw_name = "bias_pll_cc_clk" },
0544 };
0545 
0546 static const struct parent_map
0547 gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map[] = {
0548     { P_XO, 0 },
0549     { P_UNIPHY0_RX, 1 },
0550     { P_UNIPHY0_TX, 2 },
0551     { P_UNIPHY1_RX, 3 },
0552     { P_UNIPHY1_TX, 4 },
0553     { P_UBI32_PLL, 5 },
0554     { P_BIAS_PLL, 6 },
0555 };
0556 
0557 static struct clk_rcg2 nss_port5_rx_clk_src = {
0558     .cmd_rcgr = 0x68060,
0559     .freq_tbl = ftbl_nss_port5_rx_clk_src,
0560     .hid_width = 5,
0561     .parent_map = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map,
0562     .clkr.hw.init = &(struct clk_init_data){
0563         .name = "nss_port5_rx_clk_src",
0564         .parent_data = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias,
0565         .num_parents = 7,
0566         .ops = &clk_rcg2_ops,
0567     },
0568 };
0569 
0570 static const struct freq_tbl ftbl_nss_port5_tx_clk_src[] = {
0571     F(24000000, P_XO, 1, 0, 0),
0572     F(25000000, P_UNIPHY1_TX, 12.5, 0, 0),
0573     F(25000000, P_UNIPHY0_TX, 5, 0, 0),
0574     F(78125000, P_UNIPHY1_TX, 4, 0, 0),
0575     F(125000000, P_UNIPHY1_TX, 2.5, 0, 0),
0576     F(125000000, P_UNIPHY0_TX, 1, 0, 0),
0577     F(156250000, P_UNIPHY1_TX, 2, 0, 0),
0578     F(312500000, P_UNIPHY1_TX, 1, 0, 0),
0579     { }
0580 };
0581 
0582 static const struct clk_parent_data
0583 gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias[] = {
0584     { .fw_name = "xo" },
0585     { .fw_name = "uniphy0_gcc_tx_clk" },
0586     { .fw_name = "uniphy0_gcc_rx_clk" },
0587     { .fw_name = "uniphy1_gcc_tx_clk" },
0588     { .fw_name = "uniphy1_gcc_rx_clk" },
0589     { .hw = &ubi32_pll.clkr.hw },
0590     { .fw_name = "bias_pll_cc_clk" },
0591 };
0592 
0593 static const struct parent_map
0594 gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map[] = {
0595     { P_XO, 0 },
0596     { P_UNIPHY0_TX, 1 },
0597     { P_UNIPHY0_RX, 2 },
0598     { P_UNIPHY1_TX, 3 },
0599     { P_UNIPHY1_RX, 4 },
0600     { P_UBI32_PLL, 5 },
0601     { P_BIAS_PLL, 6 },
0602 };
0603 
0604 static struct clk_rcg2 nss_port5_tx_clk_src = {
0605     .cmd_rcgr = 0x68068,
0606     .freq_tbl = ftbl_nss_port5_tx_clk_src,
0607     .hid_width = 5,
0608     .parent_map = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map,
0609     .clkr.hw.init = &(struct clk_init_data){
0610         .name = "nss_port5_tx_clk_src",
0611         .parent_data = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias,
0612         .num_parents = 7,
0613         .ops = &clk_rcg2_ops,
0614     },
0615 };
0616 
0617 static const struct freq_tbl ftbl_pcie_axi_clk_src[] = {
0618     F(24000000, P_XO, 1, 0, 0),
0619     F(200000000, P_GPLL0, 4, 0, 0),
0620     F(240000000, P_GPLL4, 5, 0, 0),
0621     { }
0622 };
0623 
0624 static const struct freq_tbl ftbl_pcie_rchng_clk_src[] = {
0625     F(24000000, P_XO, 1, 0, 0),
0626     F(100000000, P_GPLL0, 8, 0, 0),
0627     { }
0628 };
0629 
0630 static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = {
0631     { .fw_name = "xo" },
0632     { .hw = &gpll0.clkr.hw },
0633     { .hw = &gpll4.clkr.hw },
0634 };
0635 
0636 static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
0637     { P_XO, 0 },
0638     { P_GPLL0, 1 },
0639     { P_GPLL4, 2 },
0640 };
0641 
0642 static struct clk_rcg2 pcie0_axi_clk_src = {
0643     .cmd_rcgr = 0x75054,
0644     .freq_tbl = ftbl_pcie_axi_clk_src,
0645     .hid_width = 5,
0646     .parent_map = gcc_xo_gpll0_gpll4_map,
0647     .clkr.hw.init = &(struct clk_init_data){
0648         .name = "pcie0_axi_clk_src",
0649         .parent_data = gcc_xo_gpll0_gpll4,
0650         .num_parents = 3,
0651         .ops = &clk_rcg2_ops,
0652     },
0653 };
0654 
0655 static const struct freq_tbl ftbl_usb0_master_clk_src[] = {
0656     F(80000000, P_GPLL0_DIV2, 5, 0, 0),
0657     F(100000000, P_GPLL0, 8, 0, 0),
0658     F(133330000, P_GPLL0, 6, 0, 0),
0659     F(200000000, P_GPLL0, 4, 0, 0),
0660     { }
0661 };
0662 
0663 static const struct clk_parent_data gcc_xo_gpll0_out_main_div2_gpll0[] = {
0664     { .fw_name = "xo" },
0665     { .hw = &gpll0_out_main_div2.hw },
0666     { .hw = &gpll0.clkr.hw },
0667 };
0668 
0669 static const struct parent_map gcc_xo_gpll0_out_main_div2_gpll0_map[] = {
0670     { P_XO, 0 },
0671     { P_GPLL0_DIV2, 2 },
0672     { P_GPLL0, 1 },
0673 };
0674 
0675 static struct clk_rcg2 usb0_master_clk_src = {
0676     .cmd_rcgr = 0x3e00c,
0677     .freq_tbl = ftbl_usb0_master_clk_src,
0678     .mnd_width = 8,
0679     .hid_width = 5,
0680     .parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
0681     .clkr.hw.init = &(struct clk_init_data){
0682         .name = "usb0_master_clk_src",
0683         .parent_data = gcc_xo_gpll0_out_main_div2_gpll0,
0684         .num_parents = 3,
0685         .ops = &clk_rcg2_ops,
0686     },
0687 };
0688 
0689 static struct clk_regmap_div apss_ahb_postdiv_clk_src = {
0690     .reg = 0x46018,
0691     .shift = 4,
0692     .width = 4,
0693     .clkr = {
0694         .hw.init = &(struct clk_init_data){
0695             .name = "apss_ahb_postdiv_clk_src",
0696             .parent_hws = (const struct clk_hw *[]){
0697                     &apss_ahb_clk_src.clkr.hw },
0698             .num_parents = 1,
0699             .ops = &clk_regmap_div_ops,
0700         },
0701     },
0702 };
0703 
0704 static struct clk_fixed_factor gcc_xo_div4_clk_src = {
0705     .mult = 1,
0706     .div = 4,
0707     .hw.init = &(struct clk_init_data){
0708         .name = "gcc_xo_div4_clk_src",
0709         .parent_hws = (const struct clk_hw *[]){
0710                 &gcc_xo_clk_src.clkr.hw },
0711         .num_parents = 1,
0712         .ops = &clk_fixed_factor_ops,
0713         .flags = CLK_SET_RATE_PARENT,
0714     },
0715 };
0716 
0717 static const struct freq_tbl ftbl_nss_port1_rx_clk_src[] = {
0718     F(24000000, P_XO, 1, 0, 0),
0719     F(25000000, P_UNIPHY0_RX, 5, 0, 0),
0720     F(125000000, P_UNIPHY0_RX, 1, 0, 0),
0721     { }
0722 };
0723 
0724 static const struct clk_parent_data gcc_xo_uniphy0_rx_tx_ubi32_bias[] = {
0725     { .fw_name = "xo" },
0726     { .fw_name = "uniphy0_gcc_rx_clk" },
0727     { .fw_name = "uniphy0_gcc_tx_clk" },
0728     { .hw = &ubi32_pll.clkr.hw },
0729     { .fw_name = "bias_pll_cc_clk" },
0730 };
0731 
0732 static const struct parent_map gcc_xo_uniphy0_rx_tx_ubi32_bias_map[] = {
0733     { P_XO, 0 },
0734     { P_UNIPHY0_RX, 1 },
0735     { P_UNIPHY0_TX, 2 },
0736     { P_UBI32_PLL, 5 },
0737     { P_BIAS_PLL, 6 },
0738 };
0739 
0740 static struct clk_rcg2 nss_port1_rx_clk_src = {
0741     .cmd_rcgr = 0x68020,
0742     .freq_tbl = ftbl_nss_port1_rx_clk_src,
0743     .hid_width = 5,
0744     .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
0745     .clkr.hw.init = &(struct clk_init_data){
0746         .name = "nss_port1_rx_clk_src",
0747         .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
0748         .num_parents = 5,
0749         .ops = &clk_rcg2_ops,
0750     },
0751 };
0752 
0753 static const struct freq_tbl ftbl_nss_port1_tx_clk_src[] = {
0754     F(24000000, P_XO, 1, 0, 0),
0755     F(25000000, P_UNIPHY0_TX, 5, 0, 0),
0756     F(125000000, P_UNIPHY0_TX, 1, 0, 0),
0757     { }
0758 };
0759 
0760 static const struct clk_parent_data gcc_xo_uniphy0_tx_rx_ubi32_bias[] = {
0761     { .fw_name = "xo" },
0762     { .fw_name = "uniphy0_gcc_tx_clk" },
0763     { .fw_name = "uniphy0_gcc_rx_clk" },
0764     { .hw = &ubi32_pll.clkr.hw },
0765     { .fw_name = "bias_pll_cc_clk" },
0766 };
0767 
0768 static const struct parent_map gcc_xo_uniphy0_tx_rx_ubi32_bias_map[] = {
0769     { P_XO, 0 },
0770     { P_UNIPHY0_TX, 1 },
0771     { P_UNIPHY0_RX, 2 },
0772     { P_UBI32_PLL, 5 },
0773     { P_BIAS_PLL, 6 },
0774 };
0775 
0776 static struct clk_rcg2 nss_port1_tx_clk_src = {
0777     .cmd_rcgr = 0x68028,
0778     .freq_tbl = ftbl_nss_port1_tx_clk_src,
0779     .hid_width = 5,
0780     .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
0781     .clkr.hw.init = &(struct clk_init_data){
0782         .name = "nss_port1_tx_clk_src",
0783         .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
0784         .num_parents = 5,
0785         .ops = &clk_rcg2_ops,
0786     },
0787 };
0788 
0789 static struct clk_rcg2 nss_port2_rx_clk_src = {
0790     .cmd_rcgr = 0x68030,
0791     .freq_tbl = ftbl_nss_port1_rx_clk_src,
0792     .hid_width = 5,
0793     .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
0794     .clkr.hw.init = &(struct clk_init_data){
0795         .name = "nss_port2_rx_clk_src",
0796         .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
0797         .num_parents = 5,
0798         .ops = &clk_rcg2_ops,
0799     },
0800 };
0801 
0802 static struct clk_rcg2 nss_port2_tx_clk_src = {
0803     .cmd_rcgr = 0x68038,
0804     .freq_tbl = ftbl_nss_port1_tx_clk_src,
0805     .hid_width = 5,
0806     .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
0807     .clkr.hw.init = &(struct clk_init_data){
0808         .name = "nss_port2_tx_clk_src",
0809         .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
0810         .num_parents = 5,
0811         .ops = &clk_rcg2_ops,
0812     },
0813 };
0814 
0815 static struct clk_rcg2 nss_port3_rx_clk_src = {
0816     .cmd_rcgr = 0x68040,
0817     .freq_tbl = ftbl_nss_port1_rx_clk_src,
0818     .hid_width = 5,
0819     .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
0820     .clkr.hw.init = &(struct clk_init_data){
0821         .name = "nss_port3_rx_clk_src",
0822         .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
0823         .num_parents = 5,
0824         .ops = &clk_rcg2_ops,
0825     },
0826 };
0827 
0828 static struct clk_rcg2 nss_port3_tx_clk_src = {
0829     .cmd_rcgr = 0x68048,
0830     .freq_tbl = ftbl_nss_port1_tx_clk_src,
0831     .hid_width = 5,
0832     .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
0833     .clkr.hw.init = &(struct clk_init_data){
0834         .name = "nss_port3_tx_clk_src",
0835         .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
0836         .num_parents = 5,
0837         .ops = &clk_rcg2_ops,
0838     },
0839 };
0840 
0841 static struct clk_rcg2 nss_port4_rx_clk_src = {
0842     .cmd_rcgr = 0x68050,
0843     .freq_tbl = ftbl_nss_port1_rx_clk_src,
0844     .hid_width = 5,
0845     .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
0846     .clkr.hw.init = &(struct clk_init_data){
0847         .name = "nss_port4_rx_clk_src",
0848         .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
0849         .num_parents = 5,
0850         .ops = &clk_rcg2_ops,
0851     },
0852 };
0853 
0854 static struct clk_rcg2 nss_port4_tx_clk_src = {
0855     .cmd_rcgr = 0x68058,
0856     .freq_tbl = ftbl_nss_port1_tx_clk_src,
0857     .hid_width = 5,
0858     .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
0859     .clkr.hw.init = &(struct clk_init_data){
0860         .name = "nss_port4_tx_clk_src",
0861         .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
0862         .num_parents = 5,
0863         .ops = &clk_rcg2_ops,
0864     },
0865 };
0866 
0867 static struct clk_regmap_div nss_port5_rx_div_clk_src = {
0868     .reg = 0x68440,
0869     .shift = 0,
0870     .width = 4,
0871     .clkr = {
0872         .hw.init = &(struct clk_init_data){
0873             .name = "nss_port5_rx_div_clk_src",
0874             .parent_hws = (const struct clk_hw *[]){
0875                     &nss_port5_rx_clk_src.clkr.hw },
0876             .num_parents = 1,
0877             .ops = &clk_regmap_div_ops,
0878             .flags = CLK_SET_RATE_PARENT,
0879         },
0880     },
0881 };
0882 
0883 static struct clk_regmap_div nss_port5_tx_div_clk_src = {
0884     .reg = 0x68444,
0885     .shift = 0,
0886     .width = 4,
0887     .clkr = {
0888         .hw.init = &(struct clk_init_data){
0889             .name = "nss_port5_tx_div_clk_src",
0890             .parent_hws = (const struct clk_hw *[]){
0891                     &nss_port5_tx_clk_src.clkr.hw },
0892             .num_parents = 1,
0893             .ops = &clk_regmap_div_ops,
0894             .flags = CLK_SET_RATE_PARENT,
0895         },
0896     },
0897 };
0898 
0899 static const struct freq_tbl ftbl_apss_axi_clk_src[] = {
0900     F(24000000, P_XO, 1, 0, 0),
0901     F(100000000, P_GPLL0_DIV2, 4, 0, 0),
0902     F(200000000, P_GPLL0, 4, 0, 0),
0903     F(308570000, P_GPLL6, 3.5, 0, 0),
0904     F(400000000, P_GPLL0, 2, 0, 0),
0905     F(533000000, P_GPLL0, 1.5, 0, 0),
0906     { }
0907 };
0908 
0909 static const struct clk_parent_data gcc_xo_gpll0_gpll6_ubi32_gpll0_div2[] = {
0910     { .fw_name = "xo" },
0911     { .hw = &gpll0.clkr.hw },
0912     { .hw = &gpll6.clkr.hw },
0913     { .hw = &ubi32_pll.clkr.hw },
0914     { .hw = &gpll0_out_main_div2.hw },
0915 };
0916 
0917 static const struct parent_map
0918 gcc_xo_gpll0_gpll6_ubi32_gpll0_div2_map[] = {
0919     { P_XO, 0 },
0920     { P_GPLL0, 1 },
0921     { P_GPLL6, 2 },
0922     { P_UBI32_PLL, 3 },
0923     { P_GPLL0_DIV2, 6 },
0924 };
0925 
0926 static struct clk_rcg2 apss_axi_clk_src = {
0927     .cmd_rcgr = 0x38048,
0928     .freq_tbl = ftbl_apss_axi_clk_src,
0929     .hid_width = 5,
0930     .parent_map = gcc_xo_gpll0_gpll6_ubi32_gpll0_div2_map,
0931     .clkr.hw.init = &(struct clk_init_data){
0932         .name = "apss_axi_clk_src",
0933         .parent_data = gcc_xo_gpll0_gpll6_ubi32_gpll0_div2,
0934         .num_parents = 5,
0935         .ops = &clk_rcg2_ops,
0936     },
0937 };
0938 
0939 static const struct freq_tbl ftbl_nss_crypto_clk_src[] = {
0940     F(24000000, P_XO, 1, 0, 0),
0941     F(300000000, P_NSS_CRYPTO_PLL, 2, 0, 0),
0942     { }
0943 };
0944 
0945 static const struct clk_parent_data gcc_xo_nss_crypto_pll_gpll0[] = {
0946     { .fw_name = "xo" },
0947     { .hw = &nss_crypto_pll.clkr.hw },
0948     { .hw = &gpll0.clkr.hw },
0949 };
0950 
0951 static const struct parent_map gcc_xo_nss_crypto_pll_gpll0_map[] = {
0952     { P_XO, 0 },
0953     { P_NSS_CRYPTO_PLL, 1 },
0954     { P_GPLL0, 2 },
0955 };
0956 
0957 static struct clk_rcg2 nss_crypto_clk_src = {
0958     .cmd_rcgr = 0x68144,
0959     .freq_tbl = ftbl_nss_crypto_clk_src,
0960     .mnd_width = 16,
0961     .hid_width = 5,
0962     .parent_map = gcc_xo_nss_crypto_pll_gpll0_map,
0963     .clkr.hw.init = &(struct clk_init_data){
0964         .name = "nss_crypto_clk_src",
0965         .parent_data = gcc_xo_nss_crypto_pll_gpll0,
0966         .num_parents = 3,
0967         .ops = &clk_rcg2_ops,
0968     },
0969 };
0970 
0971 static struct clk_regmap_div nss_port1_rx_div_clk_src = {
0972     .reg = 0x68400,
0973     .shift = 0,
0974     .width = 4,
0975     .clkr = {
0976         .hw.init = &(struct clk_init_data){
0977             .name = "nss_port1_rx_div_clk_src",
0978             .parent_hws = (const struct clk_hw *[]){
0979                 &nss_port1_rx_clk_src.clkr.hw },
0980             .num_parents = 1,
0981             .ops = &clk_regmap_div_ops,
0982             .flags = CLK_SET_RATE_PARENT,
0983         },
0984     },
0985 };
0986 
0987 static struct clk_regmap_div nss_port1_tx_div_clk_src = {
0988     .reg = 0x68404,
0989     .shift = 0,
0990     .width = 4,
0991     .clkr = {
0992         .hw.init = &(struct clk_init_data){
0993             .name = "nss_port1_tx_div_clk_src",
0994             .parent_hws = (const struct clk_hw *[]){
0995                     &nss_port1_tx_clk_src.clkr.hw },
0996             .num_parents = 1,
0997             .ops = &clk_regmap_div_ops,
0998             .flags = CLK_SET_RATE_PARENT,
0999         },
1000     },
1001 };
1002 
1003 static struct clk_regmap_div nss_port2_rx_div_clk_src = {
1004     .reg = 0x68410,
1005     .shift = 0,
1006     .width = 4,
1007     .clkr = {
1008         .hw.init = &(struct clk_init_data){
1009             .name = "nss_port2_rx_div_clk_src",
1010             .parent_hws = (const struct clk_hw *[]){
1011                     &nss_port2_rx_clk_src.clkr.hw },
1012             .num_parents = 1,
1013             .ops = &clk_regmap_div_ops,
1014             .flags = CLK_SET_RATE_PARENT,
1015         },
1016     },
1017 };
1018 
1019 static struct clk_regmap_div nss_port2_tx_div_clk_src = {
1020     .reg = 0x68414,
1021     .shift = 0,
1022     .width = 4,
1023     .clkr = {
1024         .hw.init = &(struct clk_init_data){
1025             .name = "nss_port2_tx_div_clk_src",
1026             .parent_hws = (const struct clk_hw *[]){
1027                     &nss_port2_tx_clk_src.clkr.hw },
1028             .num_parents = 1,
1029             .ops = &clk_regmap_div_ops,
1030             .flags = CLK_SET_RATE_PARENT,
1031         },
1032     },
1033 };
1034 
1035 static struct clk_regmap_div nss_port3_rx_div_clk_src = {
1036     .reg = 0x68420,
1037     .shift = 0,
1038     .width = 4,
1039     .clkr = {
1040         .hw.init = &(struct clk_init_data){
1041             .name = "nss_port3_rx_div_clk_src",
1042             .parent_hws = (const struct clk_hw *[]){
1043                     &nss_port3_rx_clk_src.clkr.hw },
1044             .num_parents = 1,
1045             .ops = &clk_regmap_div_ops,
1046             .flags = CLK_SET_RATE_PARENT,
1047         },
1048     },
1049 };
1050 
1051 static struct clk_regmap_div nss_port3_tx_div_clk_src = {
1052     .reg = 0x68424,
1053     .shift = 0,
1054     .width = 4,
1055     .clkr = {
1056         .hw.init = &(struct clk_init_data){
1057             .name = "nss_port3_tx_div_clk_src",
1058             .parent_hws = (const struct clk_hw *[]){
1059                     &nss_port3_tx_clk_src.clkr.hw },
1060             .num_parents = 1,
1061             .ops = &clk_regmap_div_ops,
1062             .flags = CLK_SET_RATE_PARENT,
1063         },
1064     },
1065 };
1066 
1067 static struct clk_regmap_div nss_port4_rx_div_clk_src = {
1068     .reg = 0x68430,
1069     .shift = 0,
1070     .width = 4,
1071     .clkr = {
1072         .hw.init = &(struct clk_init_data){
1073             .name = "nss_port4_rx_div_clk_src",
1074             .parent_hws = (const struct clk_hw *[]){
1075                     &nss_port4_rx_clk_src.clkr.hw },
1076             .num_parents = 1,
1077             .ops = &clk_regmap_div_ops,
1078             .flags = CLK_SET_RATE_PARENT,
1079         },
1080     },
1081 };
1082 
1083 static struct clk_regmap_div nss_port4_tx_div_clk_src = {
1084     .reg = 0x68434,
1085     .shift = 0,
1086     .width = 4,
1087     .clkr = {
1088         .hw.init = &(struct clk_init_data){
1089             .name = "nss_port4_tx_div_clk_src",
1090             .parent_hws = (const struct clk_hw *[]){
1091                     &nss_port4_tx_clk_src.clkr.hw },
1092             .num_parents = 1,
1093             .ops = &clk_regmap_div_ops,
1094             .flags = CLK_SET_RATE_PARENT,
1095         },
1096     },
1097 };
1098 
1099 static const struct freq_tbl ftbl_nss_ubi_clk_src[] = {
1100     F(24000000, P_XO, 1, 0, 0),
1101     F(149760000, P_UBI32_PLL, 10, 0, 0),
1102     F(187200000, P_UBI32_PLL, 8, 0, 0),
1103     F(249600000, P_UBI32_PLL, 6, 0, 0),
1104     F(374400000, P_UBI32_PLL, 4, 0, 0),
1105     F(748800000, P_UBI32_PLL, 2, 0, 0),
1106     F(1497600000, P_UBI32_PLL, 1, 0, 0),
1107     { }
1108 };
1109 
1110 static const struct clk_parent_data
1111             gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6[] = {
1112     { .fw_name = "xo" },
1113     { .hw = &ubi32_pll.clkr.hw },
1114     { .hw = &gpll0.clkr.hw },
1115     { .hw = &gpll2.clkr.hw },
1116     { .hw = &gpll4.clkr.hw },
1117     { .hw = &gpll6.clkr.hw },
1118 };
1119 
1120 static const struct parent_map gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map[] = {
1121     { P_XO, 0 },
1122     { P_UBI32_PLL, 1 },
1123     { P_GPLL0, 2 },
1124     { P_GPLL2, 3 },
1125     { P_GPLL4, 4 },
1126     { P_GPLL6, 5 },
1127 };
1128 
1129 static struct clk_rcg2 nss_ubi0_clk_src = {
1130     .cmd_rcgr = 0x68104,
1131     .freq_tbl = ftbl_nss_ubi_clk_src,
1132     .hid_width = 5,
1133     .parent_map = gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map,
1134     .clkr.hw.init = &(struct clk_init_data){
1135         .name = "nss_ubi0_clk_src",
1136         .parent_data = gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6,
1137         .num_parents = 6,
1138         .ops = &clk_rcg2_ops,
1139         .flags = CLK_SET_RATE_PARENT,
1140     },
1141 };
1142 
1143 static const struct freq_tbl ftbl_adss_pwm_clk_src[] = {
1144     F(24000000, P_XO, 1, 0, 0),
1145     F(100000000, P_GPLL0, 8, 0, 0),
1146     { }
1147 };
1148 
1149 static struct clk_rcg2 adss_pwm_clk_src = {
1150     .cmd_rcgr = 0x1c008,
1151     .freq_tbl = ftbl_adss_pwm_clk_src,
1152     .hid_width = 5,
1153     .parent_map = gcc_xo_gpll0_map,
1154     .clkr.hw.init = &(struct clk_init_data){
1155         .name = "adss_pwm_clk_src",
1156         .parent_data = gcc_xo_gpll0,
1157         .num_parents = 2,
1158         .ops = &clk_rcg2_ops,
1159     },
1160 };
1161 
1162 static const struct freq_tbl ftbl_blsp1_qup_i2c_apps_clk_src[] = {
1163     F(24000000, P_XO, 1, 0, 0),
1164     F(25000000, P_GPLL0_DIV2, 16, 0, 0),
1165     F(50000000, P_GPLL0, 16, 0, 0),
1166     { }
1167 };
1168 
1169 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
1170     .cmd_rcgr = 0x0200c,
1171     .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1172     .hid_width = 5,
1173     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1174     .clkr.hw.init = &(struct clk_init_data){
1175         .name = "blsp1_qup1_i2c_apps_clk_src",
1176         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1177         .num_parents = 3,
1178         .ops = &clk_rcg2_ops,
1179     },
1180 };
1181 
1182 static const struct freq_tbl ftbl_blsp1_qup_spi_apps_clk_src[] = {
1183     F(960000, P_XO, 10, 2, 5),
1184     F(4800000, P_XO, 5, 0, 0),
1185     F(9600000, P_XO, 2, 4, 5),
1186     F(12500000, P_GPLL0_DIV2, 16, 1, 2),
1187     F(16000000, P_GPLL0, 10, 1, 5),
1188     F(24000000, P_XO, 1, 0, 0),
1189     F(25000000, P_GPLL0, 16, 1, 2),
1190     F(50000000, P_GPLL0, 16, 0, 0),
1191     { }
1192 };
1193 
1194 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
1195     .cmd_rcgr = 0x02024,
1196     .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1197     .mnd_width = 8,
1198     .hid_width = 5,
1199     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1200     .clkr.hw.init = &(struct clk_init_data){
1201         .name = "blsp1_qup1_spi_apps_clk_src",
1202         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1203         .num_parents = 3,
1204         .ops = &clk_rcg2_ops,
1205     },
1206 };
1207 
1208 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
1209     .cmd_rcgr = 0x03000,
1210     .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1211     .hid_width = 5,
1212     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1213     .clkr.hw.init = &(struct clk_init_data){
1214         .name = "blsp1_qup2_i2c_apps_clk_src",
1215         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1216         .num_parents = 3,
1217         .ops = &clk_rcg2_ops,
1218     },
1219 };
1220 
1221 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
1222     .cmd_rcgr = 0x03014,
1223     .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1224     .mnd_width = 8,
1225     .hid_width = 5,
1226     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1227     .clkr.hw.init = &(struct clk_init_data){
1228         .name = "blsp1_qup2_spi_apps_clk_src",
1229         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1230         .num_parents = 3,
1231         .ops = &clk_rcg2_ops,
1232     },
1233 };
1234 
1235 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
1236     .cmd_rcgr = 0x04000,
1237     .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1238     .hid_width = 5,
1239     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1240     .clkr.hw.init = &(struct clk_init_data){
1241         .name = "blsp1_qup3_i2c_apps_clk_src",
1242         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1243         .num_parents = 3,
1244         .ops = &clk_rcg2_ops,
1245     },
1246 };
1247 
1248 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
1249     .cmd_rcgr = 0x04014,
1250     .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1251     .mnd_width = 8,
1252     .hid_width = 5,
1253     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1254     .clkr.hw.init = &(struct clk_init_data){
1255         .name = "blsp1_qup3_spi_apps_clk_src",
1256         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1257         .num_parents = 3,
1258         .ops = &clk_rcg2_ops,
1259     },
1260 };
1261 
1262 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
1263     .cmd_rcgr = 0x05000,
1264     .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1265     .hid_width = 5,
1266     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1267     .clkr.hw.init = &(struct clk_init_data){
1268         .name = "blsp1_qup4_i2c_apps_clk_src",
1269         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1270         .num_parents = 3,
1271         .ops = &clk_rcg2_ops,
1272     },
1273 };
1274 
1275 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
1276     .cmd_rcgr = 0x05014,
1277     .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1278     .mnd_width = 8,
1279     .hid_width = 5,
1280     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1281     .clkr.hw.init = &(struct clk_init_data){
1282         .name = "blsp1_qup4_spi_apps_clk_src",
1283         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1284         .num_parents = 3,
1285         .ops = &clk_rcg2_ops,
1286     },
1287 };
1288 
1289 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
1290     .cmd_rcgr = 0x06000,
1291     .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1292     .hid_width = 5,
1293     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1294     .clkr.hw.init = &(struct clk_init_data){
1295         .name = "blsp1_qup5_i2c_apps_clk_src",
1296         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1297         .num_parents = 3,
1298         .ops = &clk_rcg2_ops,
1299     },
1300 };
1301 
1302 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
1303     .cmd_rcgr = 0x06014,
1304     .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1305     .mnd_width = 8,
1306     .hid_width = 5,
1307     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1308     .clkr.hw.init = &(struct clk_init_data){
1309         .name = "blsp1_qup5_spi_apps_clk_src",
1310         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1311         .num_parents = 3,
1312         .ops = &clk_rcg2_ops,
1313     },
1314 };
1315 
1316 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
1317     .cmd_rcgr = 0x07000,
1318     .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1319     .hid_width = 5,
1320     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1321     .clkr.hw.init = &(struct clk_init_data){
1322         .name = "blsp1_qup6_i2c_apps_clk_src",
1323         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1324         .num_parents = 3,
1325         .ops = &clk_rcg2_ops,
1326     },
1327 };
1328 
1329 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
1330     .cmd_rcgr = 0x07014,
1331     .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1332     .mnd_width = 8,
1333     .hid_width = 5,
1334     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1335     .clkr.hw.init = &(struct clk_init_data){
1336         .name = "blsp1_qup6_spi_apps_clk_src",
1337         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1338         .num_parents = 3,
1339         .ops = &clk_rcg2_ops,
1340     },
1341 };
1342 
1343 static const struct freq_tbl ftbl_blsp1_uart_apps_clk_src[] = {
1344     F(3686400, P_GPLL0_DIV2, 1, 144, 15625),
1345     F(7372800, P_GPLL0_DIV2, 1, 288, 15625),
1346     F(14745600, P_GPLL0_DIV2, 1, 576, 15625),
1347     F(16000000, P_GPLL0_DIV2, 5, 1, 5),
1348     F(24000000, P_XO, 1, 0, 0),
1349     F(24000000, P_GPLL0, 1, 3, 100),
1350     F(25000000, P_GPLL0, 16, 1, 2),
1351     F(32000000, P_GPLL0, 1, 1, 25),
1352     F(40000000, P_GPLL0, 1, 1, 20),
1353     F(46400000, P_GPLL0, 1, 29, 500),
1354     F(48000000, P_GPLL0, 1, 3, 50),
1355     F(51200000, P_GPLL0, 1, 8, 125),
1356     F(56000000, P_GPLL0, 1, 7, 100),
1357     F(58982400, P_GPLL0, 1, 1152, 15625),
1358     F(60000000, P_GPLL0, 1, 3, 40),
1359     F(64000000, P_GPLL0, 12.5, 1, 1),
1360     { }
1361 };
1362 
1363 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
1364     .cmd_rcgr = 0x02044,
1365     .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1366     .mnd_width = 16,
1367     .hid_width = 5,
1368     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1369     .clkr.hw.init = &(struct clk_init_data){
1370         .name = "blsp1_uart1_apps_clk_src",
1371         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1372         .num_parents = 3,
1373         .ops = &clk_rcg2_ops,
1374     },
1375 };
1376 
1377 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
1378     .cmd_rcgr = 0x03034,
1379     .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1380     .mnd_width = 16,
1381     .hid_width = 5,
1382     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1383     .clkr.hw.init = &(struct clk_init_data){
1384         .name = "blsp1_uart2_apps_clk_src",
1385         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1386         .num_parents = 3,
1387         .ops = &clk_rcg2_ops,
1388     },
1389 };
1390 
1391 static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
1392     .cmd_rcgr = 0x04034,
1393     .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1394     .mnd_width = 16,
1395     .hid_width = 5,
1396     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1397     .clkr.hw.init = &(struct clk_init_data){
1398         .name = "blsp1_uart3_apps_clk_src",
1399         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1400         .num_parents = 3,
1401         .ops = &clk_rcg2_ops,
1402     },
1403 };
1404 
1405 static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
1406     .cmd_rcgr = 0x05034,
1407     .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1408     .mnd_width = 16,
1409     .hid_width = 5,
1410     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1411     .clkr.hw.init = &(struct clk_init_data){
1412         .name = "blsp1_uart4_apps_clk_src",
1413         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1414         .num_parents = 3,
1415         .ops = &clk_rcg2_ops,
1416     },
1417 };
1418 
1419 static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
1420     .cmd_rcgr = 0x06034,
1421     .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1422     .mnd_width = 16,
1423     .hid_width = 5,
1424     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1425     .clkr.hw.init = &(struct clk_init_data){
1426         .name = "blsp1_uart5_apps_clk_src",
1427         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1428         .num_parents = 3,
1429         .ops = &clk_rcg2_ops,
1430     },
1431 };
1432 
1433 static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
1434     .cmd_rcgr = 0x07034,
1435     .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1436     .mnd_width = 16,
1437     .hid_width = 5,
1438     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1439     .clkr.hw.init = &(struct clk_init_data){
1440         .name = "blsp1_uart6_apps_clk_src",
1441         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1442         .num_parents = 3,
1443         .ops = &clk_rcg2_ops,
1444     },
1445 };
1446 
1447 static const struct freq_tbl ftbl_crypto_clk_src[] = {
1448     F(40000000, P_GPLL0_DIV2, 10, 0, 0),
1449     F(80000000, P_GPLL0, 10, 0, 0),
1450     F(100000000, P_GPLL0, 8, 0, 0),
1451     F(160000000, P_GPLL0, 5, 0, 0),
1452     { }
1453 };
1454 
1455 static struct clk_rcg2 crypto_clk_src = {
1456     .cmd_rcgr = 0x16004,
1457     .freq_tbl = ftbl_crypto_clk_src,
1458     .hid_width = 5,
1459     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1460     .clkr.hw.init = &(struct clk_init_data){
1461         .name = "crypto_clk_src",
1462         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1463         .num_parents = 3,
1464         .ops = &clk_rcg2_ops,
1465     },
1466 };
1467 
1468 static const struct freq_tbl ftbl_gp_clk_src[] = {
1469     F(24000000, P_XO, 1, 0, 0),
1470     F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1471     F(100000000, P_GPLL0, 8, 0, 0),
1472     F(200000000, P_GPLL0, 4, 0, 0),
1473     F(266666666, P_GPLL0, 3, 0, 0),
1474     { }
1475 };
1476 
1477 static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_sleep_clk[] = {
1478     { .fw_name = "xo" },
1479     { .hw = &gpll0.clkr.hw },
1480     { .hw = &gpll6.clkr.hw },
1481     { .hw = &gpll0_out_main_div2.hw },
1482     { .fw_name = "sleep_clk" },
1483 };
1484 
1485 static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map[] = {
1486     { P_XO, 0 },
1487     { P_GPLL0, 1 },
1488     { P_GPLL6, 2 },
1489     { P_GPLL0_DIV2, 4 },
1490     { P_SLEEP_CLK, 6 },
1491 };
1492 
1493 static struct clk_rcg2 gp1_clk_src = {
1494     .cmd_rcgr = 0x08004,
1495     .freq_tbl = ftbl_gp_clk_src,
1496     .mnd_width = 8,
1497     .hid_width = 5,
1498     .parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
1499     .clkr.hw.init = &(struct clk_init_data){
1500         .name = "gp1_clk_src",
1501         .parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
1502         .num_parents = 5,
1503         .ops = &clk_rcg2_ops,
1504     },
1505 };
1506 
1507 static struct clk_rcg2 gp2_clk_src = {
1508     .cmd_rcgr = 0x09004,
1509     .freq_tbl = ftbl_gp_clk_src,
1510     .mnd_width = 8,
1511     .hid_width = 5,
1512     .parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
1513     .clkr.hw.init = &(struct clk_init_data){
1514         .name = "gp2_clk_src",
1515         .parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
1516         .num_parents = 5,
1517         .ops = &clk_rcg2_ops,
1518     },
1519 };
1520 
1521 static struct clk_rcg2 gp3_clk_src = {
1522     .cmd_rcgr = 0x0a004,
1523     .freq_tbl = ftbl_gp_clk_src,
1524     .mnd_width = 8,
1525     .hid_width = 5,
1526     .parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
1527     .clkr.hw.init = &(struct clk_init_data){
1528         .name = "gp3_clk_src",
1529         .parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
1530         .num_parents = 5,
1531         .ops = &clk_rcg2_ops,
1532     },
1533 };
1534 
1535 static struct clk_fixed_factor nss_ppe_cdiv_clk_src = {
1536     .mult = 1,
1537     .div = 4,
1538     .hw.init = &(struct clk_init_data){
1539         .name = "nss_ppe_cdiv_clk_src",
1540         .parent_hws = (const struct clk_hw *[]){
1541                 &nss_ppe_clk_src.clkr.hw },
1542         .num_parents = 1,
1543         .ops = &clk_fixed_factor_ops,
1544         .flags = CLK_SET_RATE_PARENT,
1545     },
1546 };
1547 
1548 static struct clk_regmap_div nss_ubi0_div_clk_src = {
1549     .reg = 0x68118,
1550     .shift = 0,
1551     .width = 4,
1552     .clkr = {
1553         .hw.init = &(struct clk_init_data){
1554             .name = "nss_ubi0_div_clk_src",
1555             .parent_hws = (const struct clk_hw *[]){
1556                 &nss_ubi0_clk_src.clkr.hw },
1557             .num_parents = 1,
1558             .ops = &clk_regmap_div_ro_ops,
1559             .flags = CLK_SET_RATE_PARENT,
1560         },
1561     },
1562 };
1563 
1564 static const struct freq_tbl ftbl_pcie_aux_clk_src[] = {
1565     F(24000000, P_XO, 1, 0, 0),
1566 };
1567 
1568 static const struct clk_parent_data gcc_xo_gpll0_core_pi_sleep_clk[] = {
1569     { .fw_name = "xo" },
1570     { .hw = &gpll0.clkr.hw },
1571     { .fw_name = "sleep_clk" },
1572 };
1573 
1574 static const struct parent_map gcc_xo_gpll0_core_pi_sleep_clk_map[] = {
1575     { P_XO, 0 },
1576     { P_GPLL0, 2 },
1577     { P_PI_SLEEP, 6 },
1578 };
1579 
1580 static struct clk_rcg2 pcie0_aux_clk_src = {
1581     .cmd_rcgr = 0x75024,
1582     .freq_tbl = ftbl_pcie_aux_clk_src,
1583     .mnd_width = 16,
1584     .hid_width = 5,
1585     .parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map,
1586     .clkr.hw.init = &(struct clk_init_data){
1587         .name = "pcie0_aux_clk_src",
1588         .parent_data = gcc_xo_gpll0_core_pi_sleep_clk,
1589         .num_parents = 3,
1590         .ops = &clk_rcg2_ops,
1591     },
1592 };
1593 
1594 static const struct clk_parent_data gcc_pcie20_phy0_pipe_clk_xo[] = {
1595     { .fw_name = "pcie20_phy0_pipe_clk" },
1596     { .fw_name = "xo" },
1597 };
1598 
1599 static const struct parent_map gcc_pcie20_phy0_pipe_clk_xo_map[] = {
1600     { P_PCIE20_PHY0_PIPE, 0 },
1601     { P_XO, 2 },
1602 };
1603 
1604 static struct clk_regmap_mux pcie0_pipe_clk_src = {
1605     .reg = 0x7501c,
1606     .shift = 8,
1607     .width = 2,
1608     .parent_map = gcc_pcie20_phy0_pipe_clk_xo_map,
1609     .clkr = {
1610         .hw.init = &(struct clk_init_data){
1611             .name = "pcie0_pipe_clk_src",
1612             .parent_data = gcc_pcie20_phy0_pipe_clk_xo,
1613             .num_parents = 2,
1614             .ops = &clk_regmap_mux_closest_ops,
1615             .flags = CLK_SET_RATE_PARENT,
1616         },
1617     },
1618 };
1619 
1620 static const struct freq_tbl ftbl_sdcc_apps_clk_src[] = {
1621     F(144000, P_XO, 16, 12, 125),
1622     F(400000, P_XO, 12, 1, 5),
1623     F(24000000, P_GPLL2, 12, 1, 4),
1624     F(48000000, P_GPLL2, 12, 1, 2),
1625     F(96000000, P_GPLL2, 12, 0, 0),
1626     F(177777778, P_GPLL0, 4.5, 0, 0),
1627     F(192000000, P_GPLL2, 6, 0, 0),
1628     F(384000000, P_GPLL2, 3, 0, 0),
1629     { }
1630 };
1631 
1632 static const struct clk_parent_data
1633             gcc_xo_gpll0_gpll2_gpll0_out_main_div2[] = {
1634     { .fw_name = "xo" },
1635     { .hw = &gpll0.clkr.hw },
1636     { .hw = &gpll2.clkr.hw },
1637     { .hw = &gpll0_out_main_div2.hw },
1638 };
1639 
1640 static const struct parent_map gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map[] = {
1641     { P_XO, 0 },
1642     { P_GPLL0, 1 },
1643     { P_GPLL2, 2 },
1644     { P_GPLL0_DIV2, 4 },
1645 };
1646 
1647 static struct clk_rcg2 sdcc1_apps_clk_src = {
1648     .cmd_rcgr = 0x42004,
1649     .freq_tbl = ftbl_sdcc_apps_clk_src,
1650     .mnd_width = 8,
1651     .hid_width = 5,
1652     .parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,
1653     .clkr.hw.init = &(struct clk_init_data){
1654         .name = "sdcc1_apps_clk_src",
1655         .parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
1656         .num_parents = 4,
1657         .ops = &clk_rcg2_ops,
1658     },
1659 };
1660 
1661 static const struct freq_tbl ftbl_usb_aux_clk_src[] = {
1662     F(24000000, P_XO, 1, 0, 0),
1663     { }
1664 };
1665 
1666 static struct clk_rcg2 usb0_aux_clk_src = {
1667     .cmd_rcgr = 0x3e05c,
1668     .freq_tbl = ftbl_usb_aux_clk_src,
1669     .mnd_width = 16,
1670     .hid_width = 5,
1671     .parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map,
1672     .clkr.hw.init = &(struct clk_init_data){
1673         .name = "usb0_aux_clk_src",
1674         .parent_data = gcc_xo_gpll0_core_pi_sleep_clk,
1675         .num_parents = 3,
1676         .ops = &clk_rcg2_ops,
1677     },
1678 };
1679 
1680 static const struct freq_tbl ftbl_usb_mock_utmi_clk_src[] = {
1681     F(24000000, P_XO, 1, 0, 0),
1682     F(60000000, P_GPLL6, 6, 1, 3),
1683     { }
1684 };
1685 
1686 static const struct clk_parent_data
1687             gcc_xo_gpll6_gpll0_gpll0_out_main_div2[] = {
1688     { .fw_name = "xo" },
1689     { .hw = &gpll6.clkr.hw },
1690     { .hw = &gpll0.clkr.hw },
1691     { .hw = &gpll0_out_main_div2.hw },
1692 };
1693 
1694 static const struct parent_map gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map[] = {
1695     { P_XO, 0 },
1696     { P_GPLL6, 1 },
1697     { P_GPLL0, 3 },
1698     { P_GPLL0_DIV2, 4 },
1699 };
1700 
1701 static struct clk_rcg2 usb0_mock_utmi_clk_src = {
1702     .cmd_rcgr = 0x3e020,
1703     .freq_tbl = ftbl_usb_mock_utmi_clk_src,
1704     .mnd_width = 8,
1705     .hid_width = 5,
1706     .parent_map = gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map,
1707     .clkr.hw.init = &(struct clk_init_data){
1708         .name = "usb0_mock_utmi_clk_src",
1709         .parent_data = gcc_xo_gpll6_gpll0_gpll0_out_main_div2,
1710         .num_parents = 4,
1711         .ops = &clk_rcg2_ops,
1712     },
1713 };
1714 
1715 static const struct clk_parent_data gcc_usb3phy_0_cc_pipe_clk_xo[] = {
1716     { .fw_name = "usb3phy_0_cc_pipe_clk" },
1717     { .fw_name = "xo" },
1718 };
1719 
1720 static const struct parent_map gcc_usb3phy_0_cc_pipe_clk_xo_map[] = {
1721     { P_USB3PHY_0_PIPE, 0 },
1722     { P_XO, 2 },
1723 };
1724 
1725 static struct clk_regmap_mux usb0_pipe_clk_src = {
1726     .reg = 0x3e048,
1727     .shift = 8,
1728     .width = 2,
1729     .parent_map = gcc_usb3phy_0_cc_pipe_clk_xo_map,
1730     .clkr = {
1731         .hw.init = &(struct clk_init_data){
1732             .name = "usb0_pipe_clk_src",
1733             .parent_data = gcc_usb3phy_0_cc_pipe_clk_xo,
1734             .num_parents = 2,
1735             .ops = &clk_regmap_mux_closest_ops,
1736             .flags = CLK_SET_RATE_PARENT,
1737         },
1738     },
1739 };
1740 
1741 static const struct freq_tbl ftbl_sdcc_ice_core_clk_src[] = {
1742     F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1743     F(160000000, P_GPLL0, 5, 0, 0),
1744     F(216000000, P_GPLL6, 5, 0, 0),
1745     F(308570000, P_GPLL6, 3.5, 0, 0),
1746 };
1747 
1748 static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_div2[] = {
1749     { .fw_name = "xo"},
1750     { .hw = &gpll0.clkr.hw },
1751     { .hw = &gpll6.clkr.hw },
1752     { .hw = &gpll0_out_main_div2.hw },
1753 };
1754 
1755 static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_div2_map[] = {
1756     { P_XO, 0 },
1757     { P_GPLL0, 1 },
1758     { P_GPLL6, 2 },
1759     { P_GPLL0_DIV2, 4 },
1760 };
1761 
1762 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
1763     .cmd_rcgr = 0x5d000,
1764     .freq_tbl = ftbl_sdcc_ice_core_clk_src,
1765     .mnd_width = 8,
1766     .hid_width = 5,
1767     .parent_map = gcc_xo_gpll0_gpll6_gpll0_div2_map,
1768     .clkr.hw.init = &(struct clk_init_data){
1769         .name = "sdcc1_ice_core_clk_src",
1770         .parent_data = gcc_xo_gpll0_gpll6_gpll0_div2,
1771         .num_parents = 4,
1772         .ops = &clk_rcg2_ops,
1773     },
1774 };
1775 
1776 static const struct freq_tbl ftbl_qdss_stm_clk_src[] = {
1777     F(24000000, P_XO, 1, 0, 0),
1778     F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1779     F(100000000, P_GPLL0, 8, 0, 0),
1780     F(200000000, P_GPLL0, 4, 0, 0),
1781     { }
1782 };
1783 
1784 static struct clk_rcg2 qdss_stm_clk_src = {
1785     .cmd_rcgr = 0x2902C,
1786     .freq_tbl = ftbl_qdss_stm_clk_src,
1787     .hid_width = 5,
1788     .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1789     .clkr.hw.init = &(struct clk_init_data){
1790         .name = "qdss_stm_clk_src",
1791         .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1792         .num_parents = 3,
1793         .ops = &clk_rcg2_ops,
1794     },
1795 };
1796 
1797 static const struct freq_tbl ftbl_qdss_traceclkin_clk_src[] = {
1798     F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1799     F(160000000, P_GPLL0, 5, 0, 0),
1800     F(300000000, P_GPLL4, 4, 0, 0),
1801     { }
1802 };
1803 
1804 static const struct clk_parent_data gcc_xo_gpll4_gpll0_gpll0_div2[] = {
1805     { .fw_name = "xo" },
1806     { .hw = &gpll4.clkr.hw },
1807     { .hw = &gpll0.clkr.hw },
1808     { .hw = &gpll0_out_main_div2.hw },
1809 };
1810 
1811 static const struct parent_map gcc_xo_gpll4_gpll0_gpll0_div2_map[] = {
1812     { P_XO, 0 },
1813     { P_GPLL4, 1 },
1814     { P_GPLL0, 2 },
1815     { P_GPLL0_DIV2, 4 },
1816 };
1817 
1818 static struct clk_rcg2 qdss_traceclkin_clk_src = {
1819     .cmd_rcgr = 0x29048,
1820     .freq_tbl = ftbl_qdss_traceclkin_clk_src,
1821     .hid_width = 5,
1822     .parent_map = gcc_xo_gpll4_gpll0_gpll0_div2_map,
1823     .clkr.hw.init = &(struct clk_init_data){
1824         .name = "qdss_traceclkin_clk_src",
1825         .parent_data = gcc_xo_gpll4_gpll0_gpll0_div2,
1826         .num_parents = 4,
1827         .ops = &clk_rcg2_ops,
1828     },
1829 };
1830 
1831 static struct clk_rcg2 usb1_mock_utmi_clk_src = {
1832     .cmd_rcgr = 0x3f020,
1833     .freq_tbl = ftbl_usb_mock_utmi_clk_src,
1834     .mnd_width = 8,
1835     .hid_width = 5,
1836     .parent_map = gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map,
1837     .clkr.hw.init = &(struct clk_init_data){
1838         .name = "usb1_mock_utmi_clk_src",
1839         .parent_data = gcc_xo_gpll6_gpll0_gpll0_out_main_div2,
1840         .num_parents = 4,
1841         .ops = &clk_rcg2_ops,
1842     },
1843 };
1844 
1845 static struct clk_branch gcc_adss_pwm_clk = {
1846     .halt_reg = 0x1c020,
1847     .clkr = {
1848         .enable_reg = 0x1c020,
1849         .enable_mask = BIT(0),
1850         .hw.init = &(struct clk_init_data){
1851             .name = "gcc_adss_pwm_clk",
1852             .parent_hws = (const struct clk_hw *[]){
1853                     &adss_pwm_clk_src.clkr.hw },
1854             .num_parents = 1,
1855             .flags = CLK_SET_RATE_PARENT,
1856             .ops = &clk_branch2_ops,
1857         },
1858     },
1859 };
1860 
1861 static struct clk_branch gcc_apss_ahb_clk = {
1862     .halt_reg = 0x4601c,
1863     .halt_check = BRANCH_HALT_VOTED,
1864     .clkr = {
1865         .enable_reg = 0x0b004,
1866         .enable_mask = BIT(14),
1867         .hw.init = &(struct clk_init_data){
1868             .name = "gcc_apss_ahb_clk",
1869             .parent_hws = (const struct clk_hw *[]){
1870                     &apss_ahb_postdiv_clk_src.clkr.hw },
1871             .num_parents = 1,
1872             .flags = CLK_SET_RATE_PARENT,
1873             .ops = &clk_branch2_ops,
1874         },
1875     },
1876 };
1877 
1878 static const struct freq_tbl ftbl_system_noc_bfdcd_clk_src[] = {
1879     F(24000000, P_XO, 1, 0, 0),
1880     F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1881     F(100000000, P_GPLL0, 8, 0, 0),
1882     F(133333333, P_GPLL0, 6, 0, 0),
1883     F(160000000, P_GPLL0, 5, 0, 0),
1884     F(200000000, P_GPLL0, 4, 0, 0),
1885     F(266666667, P_GPLL0, 3, 0, 0),
1886     { }
1887 };
1888 
1889 static struct clk_rcg2 system_noc_bfdcd_clk_src = {
1890     .cmd_rcgr = 0x26004,
1891     .freq_tbl = ftbl_system_noc_bfdcd_clk_src,
1892     .hid_width = 5,
1893     .parent_map = gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map,
1894     .clkr.hw.init = &(struct clk_init_data){
1895         .name = "system_noc_bfdcd_clk_src",
1896         .parent_data = gcc_xo_gpll0_gpll6_gpll0_out_main_div2,
1897         .num_parents = 4,
1898         .ops = &clk_rcg2_ops,
1899     },
1900 };
1901 
1902 static const struct freq_tbl ftbl_ubi32_mem_noc_bfdcd_clk_src[] = {
1903     F(24000000, P_XO, 1, 0, 0),
1904     F(307670000, P_BIAS_PLL_NSS_NOC, 1.5, 0, 0),
1905     F(533333333, P_GPLL0, 1.5, 0, 0),
1906     { }
1907 };
1908 
1909 static const struct clk_parent_data
1910             gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk[] = {
1911     { .fw_name = "xo" },
1912     { .hw = &gpll0.clkr.hw },
1913     { .hw = &gpll2.clkr.hw },
1914     { .fw_name = "bias_pll_nss_noc_clk" },
1915 };
1916 
1917 static const struct parent_map gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk_map[] = {
1918     { P_XO, 0 },
1919     { P_GPLL0, 1 },
1920     { P_GPLL2, 3 },
1921     { P_BIAS_PLL_NSS_NOC, 4 },
1922 };
1923 
1924 static struct clk_rcg2 ubi32_mem_noc_bfdcd_clk_src = {
1925     .cmd_rcgr = 0x68088,
1926     .freq_tbl = ftbl_ubi32_mem_noc_bfdcd_clk_src,
1927     .hid_width = 5,
1928     .parent_map = gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk_map,
1929     .clkr.hw.init = &(struct clk_init_data){
1930         .name = "ubi32_mem_noc_bfdcd_clk_src",
1931         .parent_data = gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk,
1932         .num_parents = 4,
1933         .ops = &clk_rcg2_ops,
1934     },
1935 };
1936 
1937 static struct clk_branch gcc_apss_axi_clk = {
1938     .halt_reg = 0x46020,
1939     .halt_check = BRANCH_HALT_VOTED,
1940     .clkr = {
1941         .enable_reg = 0x0b004,
1942         .enable_mask = BIT(13),
1943         .hw.init = &(struct clk_init_data){
1944             .name = "gcc_apss_axi_clk",
1945             .parent_hws = (const struct clk_hw *[]){
1946                     &apss_axi_clk_src.clkr.hw },
1947             .num_parents = 1,
1948             .flags = CLK_SET_RATE_PARENT,
1949             .ops = &clk_branch2_ops,
1950         },
1951     },
1952 };
1953 
1954 static struct clk_branch gcc_blsp1_ahb_clk = {
1955     .halt_reg = 0x01008,
1956     .halt_check = BRANCH_HALT_VOTED,
1957     .clkr = {
1958         .enable_reg = 0x0b004,
1959         .enable_mask = BIT(10),
1960         .hw.init = &(struct clk_init_data){
1961             .name = "gcc_blsp1_ahb_clk",
1962             .parent_hws = (const struct clk_hw *[]){
1963                     &pcnoc_bfdcd_clk_src.clkr.hw },
1964             .num_parents = 1,
1965             .flags = CLK_SET_RATE_PARENT,
1966             .ops = &clk_branch2_ops,
1967         },
1968     },
1969 };
1970 
1971 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1972     .halt_reg = 0x02008,
1973     .clkr = {
1974         .enable_reg = 0x02008,
1975         .enable_mask = BIT(0),
1976         .hw.init = &(struct clk_init_data){
1977             .name = "gcc_blsp1_qup1_i2c_apps_clk",
1978             .parent_hws = (const struct clk_hw *[]){
1979                     &blsp1_qup1_i2c_apps_clk_src.clkr.hw },
1980             .num_parents = 1,
1981             .flags = CLK_SET_RATE_PARENT,
1982             .ops = &clk_branch2_ops,
1983         },
1984     },
1985 };
1986 
1987 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1988     .halt_reg = 0x02004,
1989     .clkr = {
1990         .enable_reg = 0x02004,
1991         .enable_mask = BIT(0),
1992         .hw.init = &(struct clk_init_data){
1993             .name = "gcc_blsp1_qup1_spi_apps_clk",
1994             .parent_hws = (const struct clk_hw *[]){
1995                     &blsp1_qup1_spi_apps_clk_src.clkr.hw },
1996             .num_parents = 1,
1997             .flags = CLK_SET_RATE_PARENT,
1998             .ops = &clk_branch2_ops,
1999         },
2000     },
2001 };
2002 
2003 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
2004     .halt_reg = 0x03010,
2005     .clkr = {
2006         .enable_reg = 0x03010,
2007         .enable_mask = BIT(0),
2008         .hw.init = &(struct clk_init_data){
2009             .name = "gcc_blsp1_qup2_i2c_apps_clk",
2010             .parent_hws = (const struct clk_hw *[]){
2011                     &blsp1_qup2_i2c_apps_clk_src.clkr.hw },
2012             .num_parents = 1,
2013             .flags = CLK_SET_RATE_PARENT,
2014             .ops = &clk_branch2_ops,
2015         },
2016     },
2017 };
2018 
2019 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
2020     .halt_reg = 0x0300c,
2021     .clkr = {
2022         .enable_reg = 0x0300c,
2023         .enable_mask = BIT(0),
2024         .hw.init = &(struct clk_init_data){
2025             .name = "gcc_blsp1_qup2_spi_apps_clk",
2026             .parent_hws = (const struct clk_hw *[]){
2027                     &blsp1_qup2_spi_apps_clk_src.clkr.hw },
2028             .num_parents = 1,
2029             .flags = CLK_SET_RATE_PARENT,
2030             .ops = &clk_branch2_ops,
2031         },
2032     },
2033 };
2034 
2035 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
2036     .halt_reg = 0x04010,
2037     .clkr = {
2038         .enable_reg = 0x04010,
2039         .enable_mask = BIT(0),
2040         .hw.init = &(struct clk_init_data){
2041             .name = "gcc_blsp1_qup3_i2c_apps_clk",
2042             .parent_hws = (const struct clk_hw *[]){
2043                     &blsp1_qup3_i2c_apps_clk_src.clkr.hw },
2044             .num_parents = 1,
2045             .flags = CLK_SET_RATE_PARENT,
2046             .ops = &clk_branch2_ops,
2047         },
2048     },
2049 };
2050 
2051 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
2052     .halt_reg = 0x0400c,
2053     .clkr = {
2054         .enable_reg = 0x0400c,
2055         .enable_mask = BIT(0),
2056         .hw.init = &(struct clk_init_data){
2057             .name = "gcc_blsp1_qup3_spi_apps_clk",
2058             .parent_hws = (const struct clk_hw *[]){
2059                     &blsp1_qup3_spi_apps_clk_src.clkr.hw },
2060             .num_parents = 1,
2061             .flags = CLK_SET_RATE_PARENT,
2062             .ops = &clk_branch2_ops,
2063         },
2064     },
2065 };
2066 
2067 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
2068     .halt_reg = 0x05010,
2069     .clkr = {
2070         .enable_reg = 0x05010,
2071         .enable_mask = BIT(0),
2072         .hw.init = &(struct clk_init_data){
2073             .name = "gcc_blsp1_qup4_i2c_apps_clk",
2074             .parent_hws = (const struct clk_hw *[]){
2075                     &blsp1_qup4_i2c_apps_clk_src.clkr.hw },
2076             .num_parents = 1,
2077             .flags = CLK_SET_RATE_PARENT,
2078             .ops = &clk_branch2_ops,
2079         },
2080     },
2081 };
2082 
2083 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
2084     .halt_reg = 0x0500c,
2085     .clkr = {
2086         .enable_reg = 0x0500c,
2087         .enable_mask = BIT(0),
2088         .hw.init = &(struct clk_init_data){
2089             .name = "gcc_blsp1_qup4_spi_apps_clk",
2090             .parent_hws = (const struct clk_hw *[]){
2091                     &blsp1_qup4_spi_apps_clk_src.clkr.hw },
2092             .num_parents = 1,
2093             .flags = CLK_SET_RATE_PARENT,
2094             .ops = &clk_branch2_ops,
2095         },
2096     },
2097 };
2098 
2099 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
2100     .halt_reg = 0x06010,
2101     .clkr = {
2102         .enable_reg = 0x06010,
2103         .enable_mask = BIT(0),
2104         .hw.init = &(struct clk_init_data){
2105             .name = "gcc_blsp1_qup5_i2c_apps_clk",
2106             .parent_hws = (const struct clk_hw *[]){
2107                     &blsp1_qup5_i2c_apps_clk_src.clkr.hw },
2108             .num_parents = 1,
2109             .flags = CLK_SET_RATE_PARENT,
2110             .ops = &clk_branch2_ops,
2111         },
2112     },
2113 };
2114 
2115 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
2116     .halt_reg = 0x0600c,
2117     .clkr = {
2118         .enable_reg = 0x0600c,
2119         .enable_mask = BIT(0),
2120         .hw.init = &(struct clk_init_data){
2121             .name = "gcc_blsp1_qup5_spi_apps_clk",
2122             .parent_hws = (const struct clk_hw *[]){
2123                     &blsp1_qup5_spi_apps_clk_src.clkr.hw },
2124             .num_parents = 1,
2125             .flags = CLK_SET_RATE_PARENT,
2126             .ops = &clk_branch2_ops,
2127         },
2128     },
2129 };
2130 
2131 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
2132     .halt_reg = 0x0700c,
2133     .clkr = {
2134         .enable_reg = 0x0700c,
2135         .enable_mask = BIT(0),
2136         .hw.init = &(struct clk_init_data){
2137             .name = "gcc_blsp1_qup6_spi_apps_clk",
2138             .parent_hws = (const struct clk_hw *[]){
2139                     &blsp1_qup6_spi_apps_clk_src.clkr.hw },
2140             .num_parents = 1,
2141             .flags = CLK_SET_RATE_PARENT,
2142             .ops = &clk_branch2_ops,
2143         },
2144     },
2145 };
2146 
2147 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
2148     .halt_reg = 0x0203c,
2149     .clkr = {
2150         .enable_reg = 0x0203c,
2151         .enable_mask = BIT(0),
2152         .hw.init = &(struct clk_init_data){
2153             .name = "gcc_blsp1_uart1_apps_clk",
2154             .parent_hws = (const struct clk_hw *[]){
2155                     &blsp1_uart1_apps_clk_src.clkr.hw },
2156             .num_parents = 1,
2157             .flags = CLK_SET_RATE_PARENT,
2158             .ops = &clk_branch2_ops,
2159         },
2160     },
2161 };
2162 
2163 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
2164     .halt_reg = 0x0302c,
2165     .clkr = {
2166         .enable_reg = 0x0302c,
2167         .enable_mask = BIT(0),
2168         .hw.init = &(struct clk_init_data){
2169             .name = "gcc_blsp1_uart2_apps_clk",
2170             .parent_hws = (const struct clk_hw *[]){
2171                     &blsp1_uart2_apps_clk_src.clkr.hw },
2172             .num_parents = 1,
2173             .flags = CLK_SET_RATE_PARENT,
2174             .ops = &clk_branch2_ops,
2175         },
2176     },
2177 };
2178 
2179 static struct clk_branch gcc_blsp1_uart3_apps_clk = {
2180     .halt_reg = 0x0402c,
2181     .clkr = {
2182         .enable_reg = 0x0402c,
2183         .enable_mask = BIT(0),
2184         .hw.init = &(struct clk_init_data){
2185             .name = "gcc_blsp1_uart3_apps_clk",
2186             .parent_hws = (const struct clk_hw *[]){
2187                     &blsp1_uart3_apps_clk_src.clkr.hw },
2188             .num_parents = 1,
2189             .flags = CLK_SET_RATE_PARENT,
2190             .ops = &clk_branch2_ops,
2191         },
2192     },
2193 };
2194 
2195 static struct clk_branch gcc_blsp1_uart4_apps_clk = {
2196     .halt_reg = 0x0502c,
2197     .clkr = {
2198         .enable_reg = 0x0502c,
2199         .enable_mask = BIT(0),
2200         .hw.init = &(struct clk_init_data){
2201             .name = "gcc_blsp1_uart4_apps_clk",
2202             .parent_hws = (const struct clk_hw *[]){
2203                     &blsp1_uart4_apps_clk_src.clkr.hw },
2204             .num_parents = 1,
2205             .flags = CLK_SET_RATE_PARENT,
2206             .ops = &clk_branch2_ops,
2207         },
2208     },
2209 };
2210 
2211 static struct clk_branch gcc_blsp1_uart5_apps_clk = {
2212     .halt_reg = 0x0602c,
2213     .clkr = {
2214         .enable_reg = 0x0602c,
2215         .enable_mask = BIT(0),
2216         .hw.init = &(struct clk_init_data){
2217             .name = "gcc_blsp1_uart5_apps_clk",
2218             .parent_hws = (const struct clk_hw *[]){
2219                     &blsp1_uart5_apps_clk_src.clkr.hw },
2220             .num_parents = 1,
2221             .flags = CLK_SET_RATE_PARENT,
2222             .ops = &clk_branch2_ops,
2223         },
2224     },
2225 };
2226 
2227 static struct clk_branch gcc_blsp1_uart6_apps_clk = {
2228     .halt_reg = 0x0702c,
2229     .clkr = {
2230         .enable_reg = 0x0702c,
2231         .enable_mask = BIT(0),
2232         .hw.init = &(struct clk_init_data){
2233             .name = "gcc_blsp1_uart6_apps_clk",
2234             .parent_hws = (const struct clk_hw *[]){
2235                     &blsp1_uart6_apps_clk_src.clkr.hw },
2236             .num_parents = 1,
2237             .flags = CLK_SET_RATE_PARENT,
2238             .ops = &clk_branch2_ops,
2239         },
2240     },
2241 };
2242 
2243 static struct clk_branch gcc_crypto_ahb_clk = {
2244     .halt_reg = 0x16024,
2245     .halt_check = BRANCH_HALT_VOTED,
2246     .clkr = {
2247         .enable_reg = 0x0b004,
2248         .enable_mask = BIT(0),
2249         .hw.init = &(struct clk_init_data){
2250             .name = "gcc_crypto_ahb_clk",
2251             .parent_hws = (const struct clk_hw *[]){
2252                     &pcnoc_bfdcd_clk_src.clkr.hw },
2253             .num_parents = 1,
2254             .flags = CLK_SET_RATE_PARENT,
2255             .ops = &clk_branch2_ops,
2256         },
2257     },
2258 };
2259 
2260 static struct clk_branch gcc_crypto_axi_clk = {
2261     .halt_reg = 0x16020,
2262     .halt_check = BRANCH_HALT_VOTED,
2263     .clkr = {
2264         .enable_reg = 0x0b004,
2265         .enable_mask = BIT(1),
2266         .hw.init = &(struct clk_init_data){
2267             .name = "gcc_crypto_axi_clk",
2268             .parent_hws = (const struct clk_hw *[]){
2269                     &pcnoc_bfdcd_clk_src.clkr.hw },
2270             .num_parents = 1,
2271             .flags = CLK_SET_RATE_PARENT,
2272             .ops = &clk_branch2_ops,
2273         },
2274     },
2275 };
2276 
2277 static struct clk_branch gcc_crypto_clk = {
2278     .halt_reg = 0x1601c,
2279     .halt_check = BRANCH_HALT_VOTED,
2280     .clkr = {
2281         .enable_reg = 0x0b004,
2282         .enable_mask = BIT(2),
2283         .hw.init = &(struct clk_init_data){
2284             .name = "gcc_crypto_clk",
2285             .parent_hws = (const struct clk_hw *[]){
2286                     &crypto_clk_src.clkr.hw },
2287             .num_parents = 1,
2288             .flags = CLK_SET_RATE_PARENT,
2289             .ops = &clk_branch2_ops,
2290         },
2291     },
2292 };
2293 
2294 static struct clk_fixed_factor gpll6_out_main_div2 = {
2295     .mult = 1,
2296     .div = 2,
2297     .hw.init = &(struct clk_init_data){
2298         .name = "gpll6_out_main_div2",
2299         .parent_hws = (const struct clk_hw *[]){
2300                 &gpll6_main.clkr.hw },
2301         .num_parents = 1,
2302         .ops = &clk_fixed_factor_ops,
2303         .flags = CLK_SET_RATE_PARENT,
2304     },
2305 };
2306 
2307 static struct clk_branch gcc_xo_clk = {
2308     .halt_reg = 0x30030,
2309     .clkr = {
2310         .enable_reg = 0x30030,
2311         .enable_mask = BIT(0),
2312         .hw.init = &(struct clk_init_data){
2313             .name = "gcc_xo_clk",
2314             .parent_hws = (const struct clk_hw *[]){
2315                     &gcc_xo_clk_src.clkr.hw },
2316             .num_parents = 1,
2317             .flags = CLK_SET_RATE_PARENT,
2318             .ops = &clk_branch2_ops,
2319         },
2320     },
2321 };
2322 
2323 static struct clk_branch gcc_gp1_clk = {
2324     .halt_reg = 0x08000,
2325     .clkr = {
2326         .enable_reg = 0x08000,
2327         .enable_mask = BIT(0),
2328         .hw.init = &(struct clk_init_data){
2329             .name = "gcc_gp1_clk",
2330             .parent_hws = (const struct clk_hw *[]){
2331                     &gp1_clk_src.clkr.hw },
2332             .num_parents = 1,
2333             .flags = CLK_SET_RATE_PARENT,
2334             .ops = &clk_branch2_ops,
2335         },
2336     },
2337 };
2338 
2339 static struct clk_branch gcc_gp2_clk = {
2340     .halt_reg = 0x09000,
2341     .clkr = {
2342         .enable_reg = 0x09000,
2343         .enable_mask = BIT(0),
2344         .hw.init = &(struct clk_init_data){
2345             .name = "gcc_gp2_clk",
2346             .parent_hws = (const struct clk_hw *[]){
2347                     &gp2_clk_src.clkr.hw },
2348             .num_parents = 1,
2349             .flags = CLK_SET_RATE_PARENT,
2350             .ops = &clk_branch2_ops,
2351         },
2352     },
2353 };
2354 
2355 static struct clk_branch gcc_gp3_clk = {
2356     .halt_reg = 0x0a000,
2357     .clkr = {
2358         .enable_reg = 0x0a000,
2359         .enable_mask = BIT(0),
2360         .hw.init = &(struct clk_init_data){
2361             .name = "gcc_gp3_clk",
2362             .parent_hws = (const struct clk_hw *[]){
2363                     &gp3_clk_src.clkr.hw },
2364             .num_parents = 1,
2365             .flags = CLK_SET_RATE_PARENT,
2366             .ops = &clk_branch2_ops,
2367         },
2368     },
2369 };
2370 
2371 static struct clk_branch gcc_mdio_ahb_clk = {
2372     .halt_reg = 0x58004,
2373     .clkr = {
2374         .enable_reg = 0x58004,
2375         .enable_mask = BIT(0),
2376         .hw.init = &(struct clk_init_data){
2377             .name = "gcc_mdio_ahb_clk",
2378             .parent_hws = (const struct clk_hw *[]){
2379                     &pcnoc_bfdcd_clk_src.clkr.hw },
2380             .num_parents = 1,
2381             .flags = CLK_SET_RATE_PARENT,
2382             .ops = &clk_branch2_ops,
2383         },
2384     },
2385 };
2386 
2387 static struct clk_branch gcc_crypto_ppe_clk = {
2388     .halt_reg = 0x68310,
2389     .clkr = {
2390         .enable_reg = 0x68310,
2391         .enable_mask = BIT(0),
2392         .hw.init = &(struct clk_init_data){
2393             .name = "gcc_crypto_ppe_clk",
2394             .parent_hws = (const struct clk_hw *[]){
2395                     &nss_ppe_clk_src.clkr.hw },
2396             .num_parents = 1,
2397             .flags = CLK_SET_RATE_PARENT,
2398             .ops = &clk_branch2_ops,
2399         },
2400     },
2401 };
2402 
2403 static struct clk_branch gcc_nss_ce_apb_clk = {
2404     .halt_reg = 0x68174,
2405     .clkr = {
2406         .enable_reg = 0x68174,
2407         .enable_mask = BIT(0),
2408         .hw.init = &(struct clk_init_data){
2409             .name = "gcc_nss_ce_apb_clk",
2410             .parent_hws = (const struct clk_hw *[]){
2411                     &nss_ce_clk_src.clkr.hw },
2412             .num_parents = 1,
2413             .flags = CLK_SET_RATE_PARENT,
2414             .ops = &clk_branch2_ops,
2415         },
2416     },
2417 };
2418 
2419 static struct clk_branch gcc_nss_ce_axi_clk = {
2420     .halt_reg = 0x68170,
2421     .clkr = {
2422         .enable_reg = 0x68170,
2423         .enable_mask = BIT(0),
2424         .hw.init = &(struct clk_init_data){
2425             .name = "gcc_nss_ce_axi_clk",
2426             .parent_hws = (const struct clk_hw *[]){
2427                     &nss_ce_clk_src.clkr.hw },
2428             .num_parents = 1,
2429             .flags = CLK_SET_RATE_PARENT,
2430             .ops = &clk_branch2_ops,
2431         },
2432     },
2433 };
2434 
2435 static struct clk_branch gcc_nss_cfg_clk = {
2436     .halt_reg = 0x68160,
2437     .clkr = {
2438         .enable_reg = 0x68160,
2439         .enable_mask = BIT(0),
2440         .hw.init = &(struct clk_init_data){
2441             .name = "gcc_nss_cfg_clk",
2442             .parent_hws = (const struct clk_hw *[]){
2443                     &pcnoc_bfdcd_clk_src.clkr.hw },
2444             .num_parents = 1,
2445             .flags = CLK_SET_RATE_PARENT,
2446             .ops = &clk_branch2_ops,
2447         },
2448     },
2449 };
2450 
2451 static struct clk_branch gcc_nss_crypto_clk = {
2452     .halt_reg = 0x68164,
2453     .clkr = {
2454         .enable_reg = 0x68164,
2455         .enable_mask = BIT(0),
2456         .hw.init = &(struct clk_init_data){
2457             .name = "gcc_nss_crypto_clk",
2458             .parent_hws = (const struct clk_hw *[]){
2459                     &nss_crypto_clk_src.clkr.hw },
2460             .num_parents = 1,
2461             .flags = CLK_SET_RATE_PARENT,
2462             .ops = &clk_branch2_ops,
2463         },
2464     },
2465 };
2466 
2467 static struct clk_branch gcc_nss_csr_clk = {
2468     .halt_reg = 0x68318,
2469     .clkr = {
2470         .enable_reg = 0x68318,
2471         .enable_mask = BIT(0),
2472         .hw.init = &(struct clk_init_data){
2473             .name = "gcc_nss_csr_clk",
2474             .parent_hws = (const struct clk_hw *[]){
2475                     &nss_ce_clk_src.clkr.hw },
2476             .num_parents = 1,
2477             .flags = CLK_SET_RATE_PARENT,
2478             .ops = &clk_branch2_ops,
2479         },
2480     },
2481 };
2482 
2483 static struct clk_branch gcc_nss_edma_cfg_clk = {
2484     .halt_reg = 0x6819C,
2485     .clkr = {
2486         .enable_reg = 0x6819C,
2487         .enable_mask = BIT(0),
2488         .hw.init = &(struct clk_init_data){
2489             .name = "gcc_nss_edma_cfg_clk",
2490             .parent_hws = (const struct clk_hw *[]){
2491                     &nss_ppe_clk_src.clkr.hw },
2492             .num_parents = 1,
2493             .flags = CLK_SET_RATE_PARENT,
2494             .ops = &clk_branch2_ops,
2495         },
2496     },
2497 };
2498 
2499 static struct clk_branch gcc_nss_edma_clk = {
2500     .halt_reg = 0x68198,
2501     .clkr = {
2502         .enable_reg = 0x68198,
2503         .enable_mask = BIT(0),
2504         .hw.init = &(struct clk_init_data){
2505             .name = "gcc_nss_edma_clk",
2506             .parent_hws = (const struct clk_hw *[]){
2507                     &nss_ppe_clk_src.clkr.hw },
2508             .num_parents = 1,
2509             .flags = CLK_SET_RATE_PARENT,
2510             .ops = &clk_branch2_ops,
2511         },
2512     },
2513 };
2514 
2515 static struct clk_branch gcc_nss_noc_clk = {
2516     .halt_reg = 0x68168,
2517     .clkr = {
2518         .enable_reg = 0x68168,
2519         .enable_mask = BIT(0),
2520         .hw.init = &(struct clk_init_data){
2521             .name = "gcc_nss_noc_clk",
2522             .parent_hws = (const struct clk_hw *[]){
2523                     &snoc_nssnoc_bfdcd_clk_src.clkr.hw },
2524             .num_parents = 1,
2525             .flags = CLK_SET_RATE_PARENT,
2526             .ops = &clk_branch2_ops,
2527         },
2528     },
2529 };
2530 
2531 static struct clk_branch gcc_ubi0_utcm_clk = {
2532     .halt_reg = 0x2606c,
2533     .clkr = {
2534         .enable_reg = 0x2606c,
2535         .enable_mask = BIT(0),
2536         .hw.init = &(struct clk_init_data){
2537             .name = "gcc_ubi0_utcm_clk",
2538             .parent_hws = (const struct clk_hw *[]){
2539                     &snoc_nssnoc_bfdcd_clk_src.clkr.hw },
2540             .num_parents = 1,
2541             .flags = CLK_SET_RATE_PARENT,
2542             .ops = &clk_branch2_ops,
2543         },
2544     },
2545 };
2546 
2547 static struct clk_branch gcc_snoc_nssnoc_clk = {
2548     .halt_reg = 0x26070,
2549     .clkr = {
2550         .enable_reg = 0x26070,
2551         .enable_mask = BIT(0),
2552         .hw.init = &(struct clk_init_data){
2553             .name = "gcc_snoc_nssnoc_clk",
2554             .parent_hws = (const struct clk_hw *[]){
2555                     &snoc_nssnoc_bfdcd_clk_src.clkr.hw },
2556             .num_parents = 1,
2557             .flags = CLK_SET_RATE_PARENT,
2558             .ops = &clk_branch2_ops,
2559         },
2560     },
2561 };
2562 
2563 static const struct freq_tbl ftbl_wcss_ahb_clk_src[] = {
2564     F(24000000, P_XO, 1, 0, 0),
2565     F(133333333, P_GPLL0, 6, 0, 0),
2566     { }
2567 };
2568 
2569 static const struct freq_tbl ftbl_q6_axi_clk_src[] = {
2570     F(24000000, P_XO, 1, 0, 0),
2571     F(400000000, P_GPLL0, 2, 0, 0),
2572     { }
2573 };
2574 
2575 static struct clk_rcg2 wcss_ahb_clk_src = {
2576     .cmd_rcgr = 0x59020,
2577     .freq_tbl = ftbl_wcss_ahb_clk_src,
2578     .hid_width = 5,
2579     .parent_map = gcc_xo_gpll0_map,
2580     .clkr.hw.init = &(struct clk_init_data){
2581         .name = "wcss_ahb_clk_src",
2582         .parent_data = gcc_xo_gpll0,
2583         .num_parents = 2,
2584         .ops = &clk_rcg2_ops,
2585     },
2586 };
2587 
2588 static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll4_gpll6[] = {
2589     { .fw_name = "xo" },
2590     { .hw = &gpll0.clkr.hw },
2591     { .hw = &gpll2.clkr.hw },
2592     { .hw = &gpll4.clkr.hw },
2593     { .hw = &gpll6.clkr.hw },
2594 };
2595 
2596 static const struct parent_map gcc_xo_gpll0_gpll2_gpll4_gpll6_map[] = {
2597     { P_XO, 0 },
2598     { P_GPLL0, 1 },
2599     { P_GPLL2, 2 },
2600     { P_GPLL4, 3 },
2601     { P_GPLL6, 4 },
2602 };
2603 
2604 static struct clk_rcg2 q6_axi_clk_src = {
2605     .cmd_rcgr = 0x59120,
2606     .freq_tbl = ftbl_q6_axi_clk_src,
2607     .hid_width = 5,
2608     .parent_map = gcc_xo_gpll0_gpll2_gpll4_gpll6_map,
2609     .clkr.hw.init = &(struct clk_init_data){
2610         .name = "q6_axi_clk_src",
2611         .parent_data = gcc_xo_gpll0_gpll2_gpll4_gpll6,
2612         .num_parents = 5,
2613         .ops = &clk_rcg2_ops,
2614     },
2615 };
2616 
2617 static const struct freq_tbl ftbl_lpass_core_axim_clk_src[] = {
2618     F(24000000, P_XO, 1, 0, 0),
2619     F(100000000, P_GPLL0, 8, 0, 0),
2620     { }
2621 };
2622 
2623 static struct clk_rcg2 lpass_core_axim_clk_src = {
2624     .cmd_rcgr = 0x1F020,
2625     .freq_tbl = ftbl_lpass_core_axim_clk_src,
2626     .hid_width = 5,
2627     .parent_map = gcc_xo_gpll0_map,
2628     .clkr.hw.init = &(struct clk_init_data){
2629         .name = "lpass_core_axim_clk_src",
2630         .parent_data = gcc_xo_gpll0,
2631         .num_parents = 2,
2632         .ops = &clk_rcg2_ops,
2633     },
2634 };
2635 
2636 static const struct freq_tbl ftbl_lpass_snoc_cfg_clk_src[] = {
2637     F(24000000, P_XO, 1, 0, 0),
2638     F(266666667, P_GPLL0, 3, 0, 0),
2639     { }
2640 };
2641 
2642 static struct clk_rcg2 lpass_snoc_cfg_clk_src = {
2643     .cmd_rcgr = 0x1F040,
2644     .freq_tbl = ftbl_lpass_snoc_cfg_clk_src,
2645     .hid_width = 5,
2646     .parent_map = gcc_xo_gpll0_map,
2647     .clkr.hw.init = &(struct clk_init_data){
2648         .name = "lpass_snoc_cfg_clk_src",
2649         .parent_data = gcc_xo_gpll0,
2650         .num_parents = 2,
2651         .ops = &clk_rcg2_ops,
2652     },
2653 };
2654 
2655 static const struct freq_tbl ftbl_lpass_q6_axim_clk_src[] = {
2656     F(24000000, P_XO, 1, 0, 0),
2657     F(400000000, P_GPLL0, 2, 0, 0),
2658     { }
2659 };
2660 
2661 static struct clk_rcg2 lpass_q6_axim_clk_src = {
2662     .cmd_rcgr = 0x1F008,
2663     .freq_tbl = ftbl_lpass_q6_axim_clk_src,
2664     .hid_width = 5,
2665     .parent_map = gcc_xo_gpll0_map,
2666     .clkr.hw.init = &(struct clk_init_data){
2667         .name = "lpass_q6_axim_clk_src",
2668         .parent_data = gcc_xo_gpll0,
2669         .num_parents = 2,
2670         .ops = &clk_rcg2_ops,
2671     },
2672 };
2673 
2674 static struct freq_tbl ftbl_rbcpr_wcss_clk_src[] = {
2675     F(24000000, P_XO, 1, 0, 0),
2676     F(50000000, P_GPLL0, 16, 0, 0),
2677     { }
2678 };
2679 
2680 static struct clk_rcg2 rbcpr_wcss_clk_src = {
2681     .cmd_rcgr = 0x3a00c,
2682     .freq_tbl = ftbl_rbcpr_wcss_clk_src,
2683     .hid_width = 5,
2684     .parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
2685     .clkr.hw.init = &(struct clk_init_data){
2686         .name = "rbcpr_wcss_clk_src",
2687         .parent_data = gcc_xo_gpll0_out_main_div2_gpll0,
2688         .num_parents = 3,
2689         .ops = &clk_rcg2_ops,
2690     },
2691 };
2692 
2693 static struct clk_branch gcc_lpass_core_axim_clk = {
2694     .halt_reg = 0x1F028,
2695     .clkr = {
2696         .enable_reg = 0x1F028,
2697         .enable_mask = BIT(0),
2698         .hw.init = &(struct clk_init_data){
2699             .name = "gcc_lpass_core_axim_clk",
2700             .parent_hws = (const struct clk_hw *[]){
2701                     &lpass_core_axim_clk_src.clkr.hw },
2702             .num_parents = 1,
2703             .flags = CLK_SET_RATE_PARENT,
2704             .ops = &clk_branch2_ops,
2705         },
2706     },
2707 };
2708 
2709 static struct clk_branch gcc_lpass_snoc_cfg_clk = {
2710     .halt_reg = 0x1F048,
2711     .clkr = {
2712         .enable_reg = 0x1F048,
2713         .enable_mask = BIT(0),
2714         .hw.init = &(struct clk_init_data){
2715             .name = "gcc_lpass_snoc_cfg_clk",
2716             .parent_hws = (const struct clk_hw *[]){
2717                     &lpass_snoc_cfg_clk_src.clkr.hw },
2718             .num_parents = 1,
2719             .flags = CLK_SET_RATE_PARENT,
2720             .ops = &clk_branch2_ops,
2721         },
2722     },
2723 };
2724 
2725 static struct clk_branch gcc_lpass_q6_axim_clk = {
2726     .halt_reg = 0x1F010,
2727     .clkr = {
2728         .enable_reg = 0x1F010,
2729         .enable_mask = BIT(0),
2730         .hw.init = &(struct clk_init_data){
2731             .name = "gcc_lpass_q6_axim_clk",
2732             .parent_hws = (const struct clk_hw *[]){
2733                     &lpass_q6_axim_clk_src.clkr.hw },
2734             .num_parents = 1,
2735             .flags = CLK_SET_RATE_PARENT,
2736             .ops = &clk_branch2_ops,
2737         },
2738     },
2739 };
2740 
2741 static struct clk_branch gcc_lpass_q6_atbm_at_clk = {
2742     .halt_reg = 0x1F018,
2743     .clkr = {
2744         .enable_reg = 0x1F018,
2745         .enable_mask = BIT(0),
2746         .hw.init = &(struct clk_init_data){
2747             .name = "gcc_lpass_q6_atbm_at_clk",
2748             .parent_hws = (const struct clk_hw *[]){
2749                     &qdss_at_clk_src.clkr.hw },
2750             .num_parents = 1,
2751             .flags = CLK_SET_RATE_PARENT,
2752             .ops = &clk_branch2_ops,
2753         },
2754     },
2755 };
2756 
2757 static struct clk_branch gcc_lpass_q6_pclkdbg_clk = {
2758     .halt_reg = 0x1F01C,
2759     .clkr = {
2760         .enable_reg = 0x1F01C,
2761         .enable_mask = BIT(0),
2762         .hw.init = &(struct clk_init_data){
2763             .name = "gcc_lpass_q6_pclkdbg_clk",
2764             .parent_hws = (const struct clk_hw *[]){
2765                     &qdss_dap_sync_clk_src.hw },
2766             .num_parents = 1,
2767             .flags = CLK_SET_RATE_PARENT,
2768             .ops = &clk_branch2_ops,
2769         },
2770     },
2771 };
2772 
2773 static struct clk_branch gcc_lpass_q6ss_tsctr_1to2_clk = {
2774     .halt_reg = 0x1F014,
2775     .clkr = {
2776         .enable_reg = 0x1F014,
2777         .enable_mask = BIT(0),
2778         .hw.init = &(struct clk_init_data){
2779             .name = "gcc_lpass_q6ss_tsctr_1to2_clk",
2780             .parent_hws = (const struct clk_hw *[]){
2781                     &qdss_tsctr_div2_clk_src.hw },
2782             .num_parents = 1,
2783             .flags = CLK_SET_RATE_PARENT,
2784             .ops = &clk_branch2_ops,
2785         },
2786     },
2787 };
2788 
2789 static struct clk_branch gcc_lpass_q6ss_trig_clk = {
2790     .halt_reg = 0x1F038,
2791     .clkr = {
2792         .enable_reg = 0x1F038,
2793         .enable_mask = BIT(0),
2794         .hw.init = &(struct clk_init_data){
2795             .name = "gcc_lpass_q6ss_trig_clk",
2796             .parent_hws = (const struct clk_hw *[]){
2797                     &qdss_dap_sync_clk_src.hw },
2798             .num_parents = 1,
2799             .flags = CLK_SET_RATE_PARENT,
2800             .ops = &clk_branch2_ops,
2801         },
2802     },
2803 };
2804 
2805 static struct clk_branch gcc_lpass_tbu_clk = {
2806     .halt_reg = 0x12094,
2807     .clkr = {
2808         .enable_reg = 0xb00c,
2809         .enable_mask = BIT(10),
2810         .hw.init = &(struct clk_init_data){
2811             .name = "gcc_lpass_tbu_clk",
2812             .parent_hws = (const struct clk_hw *[]){
2813                     &lpass_q6_axim_clk_src.clkr.hw },
2814             .num_parents = 1,
2815             .flags = CLK_SET_RATE_PARENT,
2816             .ops = &clk_branch2_ops,
2817         },
2818     },
2819 };
2820 
2821 static struct clk_branch gcc_pcnoc_lpass_clk = {
2822     .halt_reg = 0x27020,
2823     .clkr = {
2824         .enable_reg = 0x27020,
2825         .enable_mask = BIT(0),
2826         .hw.init = &(struct clk_init_data){
2827             .name = "gcc_pcnoc_lpass_clk",
2828             .parent_hws = (const struct clk_hw *[]){
2829                     &lpass_core_axim_clk_src.clkr.hw },
2830             .num_parents = 1,
2831             .flags = CLK_SET_RATE_PARENT,
2832             .ops = &clk_branch2_ops,
2833         },
2834     },
2835 };
2836 
2837 static struct clk_branch gcc_mem_noc_lpass_clk = {
2838     .halt_reg = 0x1D044,
2839     .clkr = {
2840         .enable_reg = 0x1D044,
2841         .enable_mask = BIT(0),
2842         .hw.init = &(struct clk_init_data){
2843             .name = "gcc_mem_noc_lpass_clk",
2844             .parent_hws = (const struct clk_hw *[]){
2845                     &lpass_q6_axim_clk_src.clkr.hw },
2846             .num_parents = 1,
2847             .flags = CLK_SET_RATE_PARENT,
2848             .ops = &clk_branch2_ops,
2849         },
2850     },
2851 };
2852 
2853 static struct clk_branch gcc_snoc_lpass_cfg_clk = {
2854     .halt_reg = 0x26074,
2855     .clkr = {
2856         .enable_reg = 0x26074,
2857         .enable_mask = BIT(0),
2858         .hw.init = &(struct clk_init_data){
2859             .name = "gcc_snoc_lpass_cfg_clk",
2860             .parent_hws = (const struct clk_hw *[]){
2861                     &lpass_snoc_cfg_clk_src.clkr.hw },
2862             .num_parents = 1,
2863             .flags = CLK_SET_RATE_PARENT,
2864             .ops = &clk_branch2_ops,
2865         },
2866     },
2867 };
2868 
2869 static struct clk_branch gcc_mem_noc_ubi32_clk = {
2870     .halt_reg = 0x1D03C,
2871     .clkr = {
2872         .enable_reg = 0x1D03C,
2873         .enable_mask = BIT(0),
2874         .hw.init = &(struct clk_init_data){
2875             .name = "gcc_mem_noc_ubi32_clk",
2876             .parent_hws = (const struct clk_hw *[]){
2877                     &ubi32_mem_noc_bfdcd_clk_src.clkr.hw },
2878             .num_parents = 1,
2879             .flags = CLK_SET_RATE_PARENT,
2880             .ops = &clk_branch2_ops,
2881         },
2882     },
2883 };
2884 
2885 static struct clk_branch gcc_nss_port1_rx_clk = {
2886     .halt_reg = 0x68240,
2887     .clkr = {
2888         .enable_reg = 0x68240,
2889         .enable_mask = BIT(0),
2890         .hw.init = &(struct clk_init_data){
2891             .name = "gcc_nss_port1_rx_clk",
2892             .parent_hws = (const struct clk_hw *[]){
2893                     &nss_port1_rx_div_clk_src.clkr.hw },
2894             .num_parents = 1,
2895             .flags = CLK_SET_RATE_PARENT,
2896             .ops = &clk_branch2_ops,
2897         },
2898     },
2899 };
2900 
2901 static struct clk_branch gcc_nss_port1_tx_clk = {
2902     .halt_reg = 0x68244,
2903     .clkr = {
2904         .enable_reg = 0x68244,
2905         .enable_mask = BIT(0),
2906         .hw.init = &(struct clk_init_data){
2907             .name = "gcc_nss_port1_tx_clk",
2908             .parent_hws = (const struct clk_hw *[]){
2909                     &nss_port1_tx_div_clk_src.clkr.hw },
2910             .num_parents = 1,
2911             .flags = CLK_SET_RATE_PARENT,
2912             .ops = &clk_branch2_ops,
2913         },
2914     },
2915 };
2916 
2917 static struct clk_branch gcc_nss_port2_rx_clk = {
2918     .halt_reg = 0x68248,
2919     .clkr = {
2920         .enable_reg = 0x68248,
2921         .enable_mask = BIT(0),
2922         .hw.init = &(struct clk_init_data){
2923             .name = "gcc_nss_port2_rx_clk",
2924             .parent_hws = (const struct clk_hw *[]){
2925                     &nss_port2_rx_div_clk_src.clkr.hw },
2926             .num_parents = 1,
2927             .flags = CLK_SET_RATE_PARENT,
2928             .ops = &clk_branch2_ops,
2929         },
2930     },
2931 };
2932 
2933 static struct clk_branch gcc_nss_port2_tx_clk = {
2934     .halt_reg = 0x6824c,
2935     .clkr = {
2936         .enable_reg = 0x6824c,
2937         .enable_mask = BIT(0),
2938         .hw.init = &(struct clk_init_data){
2939             .name = "gcc_nss_port2_tx_clk",
2940             .parent_hws = (const struct clk_hw *[]){
2941                     &nss_port2_tx_div_clk_src.clkr.hw },
2942             .num_parents = 1,
2943             .flags = CLK_SET_RATE_PARENT,
2944             .ops = &clk_branch2_ops,
2945         },
2946     },
2947 };
2948 
2949 static struct clk_branch gcc_nss_port3_rx_clk = {
2950     .halt_reg = 0x68250,
2951     .clkr = {
2952         .enable_reg = 0x68250,
2953         .enable_mask = BIT(0),
2954         .hw.init = &(struct clk_init_data){
2955             .name = "gcc_nss_port3_rx_clk",
2956             .parent_hws = (const struct clk_hw *[]){
2957                     &nss_port3_rx_div_clk_src.clkr.hw },
2958             .num_parents = 1,
2959             .flags = CLK_SET_RATE_PARENT,
2960             .ops = &clk_branch2_ops,
2961         },
2962     },
2963 };
2964 
2965 static struct clk_branch gcc_nss_port3_tx_clk = {
2966     .halt_reg = 0x68254,
2967     .clkr = {
2968         .enable_reg = 0x68254,
2969         .enable_mask = BIT(0),
2970         .hw.init = &(struct clk_init_data){
2971             .name = "gcc_nss_port3_tx_clk",
2972             .parent_hws = (const struct clk_hw *[]){
2973                     &nss_port3_tx_div_clk_src.clkr.hw },
2974             .num_parents = 1,
2975             .flags = CLK_SET_RATE_PARENT,
2976             .ops = &clk_branch2_ops,
2977         },
2978     },
2979 };
2980 
2981 static struct clk_branch gcc_nss_port4_rx_clk = {
2982     .halt_reg = 0x68258,
2983     .clkr = {
2984         .enable_reg = 0x68258,
2985         .enable_mask = BIT(0),
2986         .hw.init = &(struct clk_init_data){
2987             .name = "gcc_nss_port4_rx_clk",
2988             .parent_hws = (const struct clk_hw *[]){
2989                     &nss_port4_rx_div_clk_src.clkr.hw },
2990             .num_parents = 1,
2991             .flags = CLK_SET_RATE_PARENT,
2992             .ops = &clk_branch2_ops,
2993         },
2994     },
2995 };
2996 
2997 static struct clk_branch gcc_nss_port4_tx_clk = {
2998     .halt_reg = 0x6825c,
2999     .clkr = {
3000         .enable_reg = 0x6825c,
3001         .enable_mask = BIT(0),
3002         .hw.init = &(struct clk_init_data){
3003             .name = "gcc_nss_port4_tx_clk",
3004             .parent_hws = (const struct clk_hw *[]){
3005                     &nss_port4_tx_div_clk_src.clkr.hw },
3006             .num_parents = 1,
3007             .flags = CLK_SET_RATE_PARENT,
3008             .ops = &clk_branch2_ops,
3009         },
3010     },
3011 };
3012 
3013 static struct clk_branch gcc_nss_port5_rx_clk = {
3014     .halt_reg = 0x68260,
3015     .clkr = {
3016         .enable_reg = 0x68260,
3017         .enable_mask = BIT(0),
3018         .hw.init = &(struct clk_init_data){
3019             .name = "gcc_nss_port5_rx_clk",
3020             .parent_hws = (const struct clk_hw *[]){
3021                     &nss_port5_rx_div_clk_src.clkr.hw },
3022             .num_parents = 1,
3023             .flags = CLK_SET_RATE_PARENT,
3024             .ops = &clk_branch2_ops,
3025         },
3026     },
3027 };
3028 
3029 static struct clk_branch gcc_nss_port5_tx_clk = {
3030     .halt_reg = 0x68264,
3031     .clkr = {
3032         .enable_reg = 0x68264,
3033         .enable_mask = BIT(0),
3034         .hw.init = &(struct clk_init_data){
3035             .name = "gcc_nss_port5_tx_clk",
3036             .parent_hws = (const struct clk_hw *[]){
3037                     &nss_port5_tx_div_clk_src.clkr.hw },
3038             .num_parents = 1,
3039             .flags = CLK_SET_RATE_PARENT,
3040             .ops = &clk_branch2_ops,
3041         },
3042     },
3043 };
3044 
3045 static struct clk_branch gcc_nss_ppe_cfg_clk = {
3046     .halt_reg = 0x68194,
3047     .clkr = {
3048         .enable_reg = 0x68194,
3049         .enable_mask = BIT(0),
3050         .hw.init = &(struct clk_init_data){
3051             .name = "gcc_nss_ppe_cfg_clk",
3052             .parent_hws = (const struct clk_hw *[]){
3053                     &nss_ppe_clk_src.clkr.hw },
3054             .num_parents = 1,
3055             .flags = CLK_SET_RATE_PARENT,
3056             .ops = &clk_branch2_ops,
3057         },
3058     },
3059 };
3060 
3061 static struct clk_branch gcc_nss_ppe_clk = {
3062     .halt_reg = 0x68190,
3063     .clkr = {
3064         .enable_reg = 0x68190,
3065         .enable_mask = BIT(0),
3066         .hw.init = &(struct clk_init_data){
3067             .name = "gcc_nss_ppe_clk",
3068             .parent_hws = (const struct clk_hw *[]){
3069                     &nss_ppe_clk_src.clkr.hw },
3070             .num_parents = 1,
3071             .flags = CLK_SET_RATE_PARENT,
3072             .ops = &clk_branch2_ops,
3073         },
3074     },
3075 };
3076 
3077 static struct clk_branch gcc_nss_ppe_ipe_clk = {
3078     .halt_reg = 0x68338,
3079     .clkr = {
3080         .enable_reg = 0x68338,
3081         .enable_mask = BIT(0),
3082         .hw.init = &(struct clk_init_data){
3083             .name = "gcc_nss_ppe_ipe_clk",
3084             .parent_hws = (const struct clk_hw *[]){
3085                     &nss_ppe_clk_src.clkr.hw },
3086             .num_parents = 1,
3087             .flags = CLK_SET_RATE_PARENT,
3088             .ops = &clk_branch2_ops,
3089         },
3090     },
3091 };
3092 
3093 static struct clk_branch gcc_nss_ptp_ref_clk = {
3094     .halt_reg = 0x6816C,
3095     .clkr = {
3096         .enable_reg = 0x6816C,
3097         .enable_mask = BIT(0),
3098         .hw.init = &(struct clk_init_data){
3099             .name = "gcc_nss_ptp_ref_clk",
3100             .parent_hws = (const struct clk_hw *[]){
3101                     &nss_ppe_cdiv_clk_src.hw },
3102             .num_parents = 1,
3103             .flags = CLK_SET_RATE_PARENT,
3104             .ops = &clk_branch2_ops,
3105         },
3106     },
3107 };
3108 
3109 static struct clk_branch gcc_nssnoc_ce_apb_clk = {
3110     .halt_reg = 0x6830C,
3111     .clkr = {
3112         .enable_reg = 0x6830C,
3113         .enable_mask = BIT(0),
3114         .hw.init = &(struct clk_init_data){
3115             .name = "gcc_nssnoc_ce_apb_clk",
3116             .parent_hws = (const struct clk_hw *[]){
3117                     &nss_ce_clk_src.clkr.hw },
3118             .num_parents = 1,
3119             .flags = CLK_SET_RATE_PARENT,
3120             .ops = &clk_branch2_ops,
3121         },
3122     },
3123 };
3124 
3125 static struct clk_branch gcc_nssnoc_ce_axi_clk = {
3126     .halt_reg = 0x68308,
3127     .clkr = {
3128         .enable_reg = 0x68308,
3129         .enable_mask = BIT(0),
3130         .hw.init = &(struct clk_init_data){
3131             .name = "gcc_nssnoc_ce_axi_clk",
3132             .parent_hws = (const struct clk_hw *[]){
3133                     &nss_ce_clk_src.clkr.hw },
3134             .num_parents = 1,
3135             .flags = CLK_SET_RATE_PARENT,
3136             .ops = &clk_branch2_ops,
3137         },
3138     },
3139 };
3140 
3141 static struct clk_branch gcc_nssnoc_crypto_clk = {
3142     .halt_reg = 0x68314,
3143     .clkr = {
3144         .enable_reg = 0x68314,
3145         .enable_mask = BIT(0),
3146         .hw.init = &(struct clk_init_data){
3147             .name = "gcc_nssnoc_crypto_clk",
3148             .parent_hws = (const struct clk_hw *[]){
3149                     &nss_crypto_clk_src.clkr.hw },
3150             .num_parents = 1,
3151             .flags = CLK_SET_RATE_PARENT,
3152             .ops = &clk_branch2_ops,
3153         },
3154     },
3155 };
3156 
3157 static struct clk_branch gcc_nssnoc_ppe_cfg_clk = {
3158     .halt_reg = 0x68304,
3159     .clkr = {
3160         .enable_reg = 0x68304,
3161         .enable_mask = BIT(0),
3162         .hw.init = &(struct clk_init_data){
3163             .name = "gcc_nssnoc_ppe_cfg_clk",
3164             .parent_hws = (const struct clk_hw *[]){
3165                     &nss_ppe_clk_src.clkr.hw },
3166             .flags = CLK_SET_RATE_PARENT,
3167             .ops = &clk_branch2_ops,
3168         },
3169     },
3170 };
3171 
3172 static struct clk_branch gcc_nssnoc_ppe_clk = {
3173     .halt_reg = 0x68300,
3174     .clkr = {
3175         .enable_reg = 0x68300,
3176         .enable_mask = BIT(0),
3177         .hw.init = &(struct clk_init_data){
3178             .name = "gcc_nssnoc_ppe_clk",
3179             .parent_hws = (const struct clk_hw *[]){
3180                     &nss_ppe_clk_src.clkr.hw },
3181             .num_parents = 1,
3182             .flags = CLK_SET_RATE_PARENT,
3183             .ops = &clk_branch2_ops,
3184         },
3185     },
3186 };
3187 
3188 static struct clk_branch gcc_nssnoc_qosgen_ref_clk = {
3189     .halt_reg = 0x68180,
3190     .clkr = {
3191         .enable_reg = 0x68180,
3192         .enable_mask = BIT(0),
3193         .hw.init = &(struct clk_init_data){
3194             .name = "gcc_nssnoc_qosgen_ref_clk",
3195             .parent_hws = (const struct clk_hw *[]){
3196                     &gcc_xo_clk_src.clkr.hw },
3197             .num_parents = 1,
3198             .flags = CLK_SET_RATE_PARENT,
3199             .ops = &clk_branch2_ops,
3200         },
3201     },
3202 };
3203 
3204 static struct clk_branch gcc_nssnoc_snoc_clk = {
3205     .halt_reg = 0x68188,
3206     .clkr = {
3207         .enable_reg = 0x68188,
3208         .enable_mask = BIT(0),
3209         .hw.init = &(struct clk_init_data){
3210             .name = "gcc_nssnoc_snoc_clk",
3211             .parent_hws = (const struct clk_hw *[]){
3212                     &system_noc_bfdcd_clk_src.clkr.hw },
3213             .num_parents = 1,
3214             .flags = CLK_SET_RATE_PARENT,
3215             .ops = &clk_branch2_ops,
3216         },
3217     },
3218 };
3219 
3220 static struct clk_branch gcc_nssnoc_timeout_ref_clk = {
3221     .halt_reg = 0x68184,
3222     .clkr = {
3223         .enable_reg = 0x68184,
3224         .enable_mask = BIT(0),
3225         .hw.init = &(struct clk_init_data){
3226             .name = "gcc_nssnoc_timeout_ref_clk",
3227             .parent_hws = (const struct clk_hw *[]){
3228                     &gcc_xo_div4_clk_src.hw },
3229             .num_parents = 1,
3230             .flags = CLK_SET_RATE_PARENT,
3231             .ops = &clk_branch2_ops,
3232         },
3233     },
3234 };
3235 
3236 static struct clk_branch gcc_nssnoc_ubi0_ahb_clk = {
3237     .halt_reg = 0x68270,
3238     .clkr = {
3239         .enable_reg = 0x68270,
3240         .enable_mask = BIT(0),
3241         .hw.init = &(struct clk_init_data){
3242             .name = "gcc_nssnoc_ubi0_ahb_clk",
3243             .parent_hws = (const struct clk_hw *[]){
3244                     &nss_ce_clk_src.clkr.hw },
3245             .num_parents = 1,
3246             .flags = CLK_SET_RATE_PARENT,
3247             .ops = &clk_branch2_ops,
3248         },
3249     },
3250 };
3251 
3252 static struct clk_branch gcc_port1_mac_clk = {
3253     .halt_reg = 0x68320,
3254     .clkr = {
3255         .enable_reg = 0x68320,
3256         .enable_mask = BIT(0),
3257         .hw.init = &(struct clk_init_data){
3258             .name = "gcc_port1_mac_clk",
3259             .parent_hws = (const struct clk_hw *[]){
3260                     &nss_ppe_clk_src.clkr.hw },
3261             .num_parents = 1,
3262             .flags = CLK_SET_RATE_PARENT,
3263             .ops = &clk_branch2_ops,
3264         },
3265     },
3266 };
3267 
3268 static struct clk_branch gcc_port2_mac_clk = {
3269     .halt_reg = 0x68324,
3270     .clkr = {
3271         .enable_reg = 0x68324,
3272         .enable_mask = BIT(0),
3273         .hw.init = &(struct clk_init_data){
3274             .name = "gcc_port2_mac_clk",
3275             .parent_hws = (const struct clk_hw *[]){
3276                     &nss_ppe_clk_src.clkr.hw },
3277             .num_parents = 1,
3278             .flags = CLK_SET_RATE_PARENT,
3279             .ops = &clk_branch2_ops,
3280         },
3281     },
3282 };
3283 
3284 static struct clk_branch gcc_port3_mac_clk = {
3285     .halt_reg = 0x68328,
3286     .clkr = {
3287         .enable_reg = 0x68328,
3288         .enable_mask = BIT(0),
3289         .hw.init = &(struct clk_init_data){
3290             .name = "gcc_port3_mac_clk",
3291             .parent_hws = (const struct clk_hw *[]){
3292                     &nss_ppe_clk_src.clkr.hw },
3293             .num_parents = 1,
3294             .flags = CLK_SET_RATE_PARENT,
3295             .ops = &clk_branch2_ops,
3296         },
3297     },
3298 };
3299 
3300 static struct clk_branch gcc_port4_mac_clk = {
3301     .halt_reg = 0x6832c,
3302     .clkr = {
3303         .enable_reg = 0x6832c,
3304         .enable_mask = BIT(0),
3305         .hw.init = &(struct clk_init_data){
3306             .name = "gcc_port4_mac_clk",
3307             .parent_hws = (const struct clk_hw *[]){
3308                     &nss_ppe_clk_src.clkr.hw },
3309             .num_parents = 1,
3310             .flags = CLK_SET_RATE_PARENT,
3311             .ops = &clk_branch2_ops,
3312         },
3313     },
3314 };
3315 
3316 static struct clk_branch gcc_port5_mac_clk = {
3317     .halt_reg = 0x68330,
3318     .clkr = {
3319         .enable_reg = 0x68330,
3320         .enable_mask = BIT(0),
3321         .hw.init = &(struct clk_init_data){
3322             .name = "gcc_port5_mac_clk",
3323             .parent_hws = (const struct clk_hw *[]){
3324                     &nss_ppe_clk_src.clkr.hw },
3325             .num_parents = 1,
3326             .flags = CLK_SET_RATE_PARENT,
3327             .ops = &clk_branch2_ops,
3328         },
3329     },
3330 };
3331 
3332 static struct clk_branch gcc_ubi0_ahb_clk = {
3333     .halt_reg = 0x6820C,
3334     .halt_check = BRANCH_HALT_DELAY,
3335     .clkr = {
3336         .enable_reg = 0x6820C,
3337         .enable_mask = BIT(0),
3338         .hw.init = &(struct clk_init_data){
3339             .name = "gcc_ubi0_ahb_clk",
3340             .parent_hws = (const struct clk_hw *[]){
3341                     &nss_ce_clk_src.clkr.hw },
3342             .num_parents = 1,
3343             .flags = CLK_SET_RATE_PARENT,
3344             .ops = &clk_branch2_ops,
3345         },
3346     },
3347 };
3348 
3349 static struct clk_branch gcc_ubi0_axi_clk = {
3350     .halt_reg = 0x68200,
3351     .halt_check = BRANCH_HALT_DELAY,
3352     .clkr = {
3353         .enable_reg = 0x68200,
3354         .enable_mask = BIT(0),
3355         .hw.init = &(struct clk_init_data){
3356             .name = "gcc_ubi0_axi_clk",
3357             .parent_hws = (const struct clk_hw *[]){
3358                     &ubi32_mem_noc_bfdcd_clk_src.clkr.hw },
3359             .num_parents = 1,
3360             .flags = CLK_SET_RATE_PARENT,
3361             .ops = &clk_branch2_ops,
3362         },
3363     },
3364 };
3365 
3366 static struct clk_branch gcc_ubi0_nc_axi_clk = {
3367     .halt_reg = 0x68204,
3368     .halt_check = BRANCH_HALT_DELAY,
3369     .clkr = {
3370         .enable_reg = 0x68204,
3371         .enable_mask = BIT(0),
3372         .hw.init = &(struct clk_init_data){
3373             .name = "gcc_ubi0_nc_axi_clk",
3374             .parent_hws = (const struct clk_hw *[]){
3375                     &snoc_nssnoc_bfdcd_clk_src.clkr.hw },
3376             .num_parents = 1,
3377             .flags = CLK_SET_RATE_PARENT,
3378             .ops = &clk_branch2_ops,
3379         },
3380     },
3381 };
3382 
3383 static struct clk_branch gcc_ubi0_core_clk = {
3384     .halt_reg = 0x68210,
3385     .halt_check = BRANCH_HALT_DELAY,
3386     .clkr = {
3387         .enable_reg = 0x68210,
3388         .enable_mask = BIT(0),
3389         .hw.init = &(struct clk_init_data){
3390             .name = "gcc_ubi0_core_clk",
3391             .parent_hws = (const struct clk_hw *[]){
3392                     &nss_ubi0_div_clk_src.clkr.hw },
3393             .num_parents = 1,
3394             .flags = CLK_SET_RATE_PARENT,
3395             .ops = &clk_branch2_ops,
3396         },
3397     },
3398 };
3399 
3400 static struct clk_branch gcc_pcie0_ahb_clk = {
3401     .halt_reg = 0x75010,
3402     .clkr = {
3403         .enable_reg = 0x75010,
3404         .enable_mask = BIT(0),
3405         .hw.init = &(struct clk_init_data){
3406             .name = "gcc_pcie0_ahb_clk",
3407             .parent_hws = (const struct clk_hw *[]){
3408                     &pcnoc_bfdcd_clk_src.clkr.hw },
3409             .num_parents = 1,
3410             .flags = CLK_SET_RATE_PARENT,
3411             .ops = &clk_branch2_ops,
3412         },
3413     },
3414 };
3415 
3416 static struct clk_branch gcc_pcie0_aux_clk = {
3417     .halt_reg = 0x75014,
3418     .clkr = {
3419         .enable_reg = 0x75014,
3420         .enable_mask = BIT(0),
3421         .hw.init = &(struct clk_init_data){
3422             .name = "gcc_pcie0_aux_clk",
3423             .parent_hws = (const struct clk_hw *[]){
3424                     &pcie0_aux_clk_src.clkr.hw },
3425             .num_parents = 1,
3426             .flags = CLK_SET_RATE_PARENT,
3427             .ops = &clk_branch2_ops,
3428         },
3429     },
3430 };
3431 
3432 static struct clk_branch gcc_pcie0_axi_m_clk = {
3433     .halt_reg = 0x75008,
3434     .clkr = {
3435         .enable_reg = 0x75008,
3436         .enable_mask = BIT(0),
3437         .hw.init = &(struct clk_init_data){
3438             .name = "gcc_pcie0_axi_m_clk",
3439             .parent_hws = (const struct clk_hw *[]){
3440                     &pcie0_axi_clk_src.clkr.hw },
3441             .num_parents = 1,
3442             .flags = CLK_SET_RATE_PARENT,
3443             .ops = &clk_branch2_ops,
3444         },
3445     },
3446 };
3447 
3448 static struct clk_branch gcc_pcie0_axi_s_clk = {
3449     .halt_reg = 0x7500c,
3450     .clkr = {
3451         .enable_reg = 0x7500c,
3452         .enable_mask = BIT(0),
3453         .hw.init = &(struct clk_init_data){
3454             .name = "gcc_pcie0_axi_s_clk",
3455             .parent_hws = (const struct clk_hw *[]){
3456                     &pcie0_axi_clk_src.clkr.hw },
3457             .num_parents = 1,
3458             .flags = CLK_SET_RATE_PARENT,
3459             .ops = &clk_branch2_ops,
3460         },
3461     },
3462 };
3463 
3464 static struct clk_branch gcc_sys_noc_pcie0_axi_clk = {
3465     .halt_reg = 0x26048,
3466     .clkr = {
3467         .enable_reg = 0x26048,
3468         .enable_mask = BIT(0),
3469         .hw.init = &(struct clk_init_data){
3470             .name = "gcc_sys_noc_pcie0_axi_clk",
3471             .parent_hws = (const struct clk_hw *[]){
3472                     &pcie0_axi_clk_src.clkr.hw },
3473             .num_parents = 1,
3474             .flags = CLK_SET_RATE_PARENT,
3475             .ops = &clk_branch2_ops,
3476         },
3477     },
3478 };
3479 
3480 static struct clk_branch gcc_pcie0_pipe_clk = {
3481     .halt_reg = 0x75018,
3482     .halt_check = BRANCH_HALT_DELAY,
3483     .clkr = {
3484         .enable_reg = 0x75018,
3485         .enable_mask = BIT(0),
3486         .hw.init = &(struct clk_init_data){
3487             .name = "gcc_pcie0_pipe_clk",
3488             .parent_hws = (const struct clk_hw *[]){
3489                     &pcie0_pipe_clk_src.clkr.hw },
3490             .num_parents = 1,
3491             .flags = CLK_SET_RATE_PARENT,
3492             .ops = &clk_branch2_ops,
3493         },
3494     },
3495 };
3496 
3497 static struct clk_branch gcc_prng_ahb_clk = {
3498     .halt_reg = 0x13004,
3499     .halt_check = BRANCH_HALT_VOTED,
3500     .clkr = {
3501         .enable_reg = 0x0b004,
3502         .enable_mask = BIT(8),
3503         .hw.init = &(struct clk_init_data){
3504             .name = "gcc_prng_ahb_clk",
3505             .parent_hws = (const struct clk_hw *[]){
3506                     &pcnoc_bfdcd_clk_src.clkr.hw },
3507             .num_parents = 1,
3508             .flags = CLK_SET_RATE_PARENT,
3509             .ops = &clk_branch2_ops,
3510         },
3511     },
3512 };
3513 
3514 static struct clk_branch gcc_qdss_dap_clk = {
3515     .halt_reg = 0x29084,
3516     .clkr = {
3517         .enable_reg = 0x29084,
3518         .enable_mask = BIT(0),
3519         .hw.init = &(struct clk_init_data){
3520             .name = "gcc_qdss_dap_clk",
3521             .parent_hws = (const struct clk_hw *[]){
3522                     &qdss_dap_sync_clk_src.hw },
3523             .num_parents = 1,
3524             .flags = CLK_SET_RATE_PARENT,
3525             .ops = &clk_branch2_ops,
3526         },
3527     },
3528 };
3529 
3530 static struct clk_branch gcc_qpic_ahb_clk = {
3531     .halt_reg = 0x57024,
3532     .clkr = {
3533         .enable_reg = 0x57024,
3534         .enable_mask = BIT(0),
3535         .hw.init = &(struct clk_init_data){
3536             .name = "gcc_qpic_ahb_clk",
3537             .parent_hws = (const struct clk_hw *[]){
3538                     &pcnoc_bfdcd_clk_src.clkr.hw },
3539             .num_parents = 1,
3540             .flags = CLK_SET_RATE_PARENT,
3541             .ops = &clk_branch2_ops,
3542         },
3543     },
3544 };
3545 
3546 static struct clk_branch gcc_qpic_clk = {
3547     .halt_reg = 0x57020,
3548     .clkr = {
3549         .enable_reg = 0x57020,
3550         .enable_mask = BIT(0),
3551         .hw.init = &(struct clk_init_data){
3552             .name = "gcc_qpic_clk",
3553             .parent_hws = (const struct clk_hw *[]){
3554                     &pcnoc_bfdcd_clk_src.clkr.hw },
3555             .num_parents = 1,
3556             .flags = CLK_SET_RATE_PARENT,
3557             .ops = &clk_branch2_ops,
3558         },
3559     },
3560 };
3561 
3562 static struct clk_branch gcc_sdcc1_ahb_clk = {
3563     .halt_reg = 0x4201c,
3564     .clkr = {
3565         .enable_reg = 0x4201c,
3566         .enable_mask = BIT(0),
3567         .hw.init = &(struct clk_init_data){
3568             .name = "gcc_sdcc1_ahb_clk",
3569             .parent_hws = (const struct clk_hw *[]){
3570                     &pcnoc_bfdcd_clk_src.clkr.hw },
3571             .num_parents = 1,
3572             .flags = CLK_SET_RATE_PARENT,
3573             .ops = &clk_branch2_ops,
3574         },
3575     },
3576 };
3577 
3578 static struct clk_branch gcc_sdcc1_apps_clk = {
3579     .halt_reg = 0x42018,
3580     .clkr = {
3581         .enable_reg = 0x42018,
3582         .enable_mask = BIT(0),
3583         .hw.init = &(struct clk_init_data){
3584             .name = "gcc_sdcc1_apps_clk",
3585             .parent_hws = (const struct clk_hw *[]){
3586                     &sdcc1_apps_clk_src.clkr.hw },
3587             .num_parents = 1,
3588             .flags = CLK_SET_RATE_PARENT,
3589             .ops = &clk_branch2_ops,
3590         },
3591     },
3592 };
3593 
3594 static struct clk_branch gcc_uniphy0_ahb_clk = {
3595     .halt_reg = 0x56008,
3596     .clkr = {
3597         .enable_reg = 0x56008,
3598         .enable_mask = BIT(0),
3599         .hw.init = &(struct clk_init_data){
3600             .name = "gcc_uniphy0_ahb_clk",
3601             .parent_hws = (const struct clk_hw *[]){
3602                     &pcnoc_bfdcd_clk_src.clkr.hw },
3603             .num_parents = 1,
3604             .flags = CLK_SET_RATE_PARENT,
3605             .ops = &clk_branch2_ops,
3606         },
3607     },
3608 };
3609 
3610 static struct clk_branch gcc_uniphy0_port1_rx_clk = {
3611     .halt_reg = 0x56010,
3612     .clkr = {
3613         .enable_reg = 0x56010,
3614         .enable_mask = BIT(0),
3615         .hw.init = &(struct clk_init_data){
3616             .name = "gcc_uniphy0_port1_rx_clk",
3617             .parent_hws = (const struct clk_hw *[]){
3618                     &nss_port1_rx_div_clk_src.clkr.hw },
3619             .num_parents = 1,
3620             .flags = CLK_SET_RATE_PARENT,
3621             .ops = &clk_branch2_ops,
3622         },
3623     },
3624 };
3625 
3626 static struct clk_branch gcc_uniphy0_port1_tx_clk = {
3627     .halt_reg = 0x56014,
3628     .clkr = {
3629         .enable_reg = 0x56014,
3630         .enable_mask = BIT(0),
3631         .hw.init = &(struct clk_init_data){
3632             .name = "gcc_uniphy0_port1_tx_clk",
3633             .parent_hws = (const struct clk_hw *[]){
3634                     &nss_port1_tx_div_clk_src.clkr.hw },
3635             .num_parents = 1,
3636             .flags = CLK_SET_RATE_PARENT,
3637             .ops = &clk_branch2_ops,
3638         },
3639     },
3640 };
3641 
3642 static struct clk_branch gcc_uniphy0_port2_rx_clk = {
3643     .halt_reg = 0x56018,
3644     .clkr = {
3645         .enable_reg = 0x56018,
3646         .enable_mask = BIT(0),
3647         .hw.init = &(struct clk_init_data){
3648             .name = "gcc_uniphy0_port2_rx_clk",
3649             .parent_hws = (const struct clk_hw *[]){
3650                     &nss_port2_rx_div_clk_src.clkr.hw },
3651             .num_parents = 1,
3652             .flags = CLK_SET_RATE_PARENT,
3653             .ops = &clk_branch2_ops,
3654         },
3655     },
3656 };
3657 
3658 static struct clk_branch gcc_uniphy0_port2_tx_clk = {
3659     .halt_reg = 0x5601c,
3660     .clkr = {
3661         .enable_reg = 0x5601c,
3662         .enable_mask = BIT(0),
3663         .hw.init = &(struct clk_init_data){
3664             .name = "gcc_uniphy0_port2_tx_clk",
3665             .parent_hws = (const struct clk_hw *[]){
3666                     &nss_port2_tx_div_clk_src.clkr.hw },
3667             .num_parents = 1,
3668             .flags = CLK_SET_RATE_PARENT,
3669             .ops = &clk_branch2_ops,
3670         },
3671     },
3672 };
3673 
3674 static struct clk_branch gcc_uniphy0_port3_rx_clk = {
3675     .halt_reg = 0x56020,
3676     .clkr = {
3677         .enable_reg = 0x56020,
3678         .enable_mask = BIT(0),
3679         .hw.init = &(struct clk_init_data){
3680             .name = "gcc_uniphy0_port3_rx_clk",
3681             .parent_hws = (const struct clk_hw *[]){
3682                     &nss_port3_rx_div_clk_src.clkr.hw },
3683             .num_parents = 1,
3684             .flags = CLK_SET_RATE_PARENT,
3685             .ops = &clk_branch2_ops,
3686         },
3687     },
3688 };
3689 
3690 static struct clk_branch gcc_uniphy0_port3_tx_clk = {
3691     .halt_reg = 0x56024,
3692     .clkr = {
3693         .enable_reg = 0x56024,
3694         .enable_mask = BIT(0),
3695         .hw.init = &(struct clk_init_data){
3696             .name = "gcc_uniphy0_port3_tx_clk",
3697             .parent_hws = (const struct clk_hw *[]){
3698                     &nss_port3_tx_div_clk_src.clkr.hw },
3699             .num_parents = 1,
3700             .flags = CLK_SET_RATE_PARENT,
3701             .ops = &clk_branch2_ops,
3702         },
3703     },
3704 };
3705 
3706 static struct clk_branch gcc_uniphy0_port4_rx_clk = {
3707     .halt_reg = 0x56028,
3708     .clkr = {
3709         .enable_reg = 0x56028,
3710         .enable_mask = BIT(0),
3711         .hw.init = &(struct clk_init_data){
3712             .name = "gcc_uniphy0_port4_rx_clk",
3713             .parent_hws = (const struct clk_hw *[]){
3714                     &nss_port4_rx_div_clk_src.clkr.hw },
3715             .num_parents = 1,
3716             .flags = CLK_SET_RATE_PARENT,
3717             .ops = &clk_branch2_ops,
3718         },
3719     },
3720 };
3721 
3722 static struct clk_branch gcc_uniphy0_port4_tx_clk = {
3723     .halt_reg = 0x5602c,
3724     .clkr = {
3725         .enable_reg = 0x5602c,
3726         .enable_mask = BIT(0),
3727         .hw.init = &(struct clk_init_data){
3728             .name = "gcc_uniphy0_port4_tx_clk",
3729             .parent_hws = (const struct clk_hw *[]){
3730                     &nss_port4_tx_div_clk_src.clkr.hw },
3731             .num_parents = 1,
3732             .flags = CLK_SET_RATE_PARENT,
3733             .ops = &clk_branch2_ops,
3734         },
3735     },
3736 };
3737 
3738 static struct clk_branch gcc_uniphy0_port5_rx_clk = {
3739     .halt_reg = 0x56030,
3740     .clkr = {
3741         .enable_reg = 0x56030,
3742         .enable_mask = BIT(0),
3743         .hw.init = &(struct clk_init_data){
3744             .name = "gcc_uniphy0_port5_rx_clk",
3745             .parent_hws = (const struct clk_hw *[]){
3746                     &nss_port5_rx_div_clk_src.clkr.hw },
3747             .num_parents = 1,
3748             .flags = CLK_SET_RATE_PARENT,
3749             .ops = &clk_branch2_ops,
3750         },
3751     },
3752 };
3753 
3754 static struct clk_branch gcc_uniphy0_port5_tx_clk = {
3755     .halt_reg = 0x56034,
3756     .clkr = {
3757         .enable_reg = 0x56034,
3758         .enable_mask = BIT(0),
3759         .hw.init = &(struct clk_init_data){
3760             .name = "gcc_uniphy0_port5_tx_clk",
3761             .parent_hws = (const struct clk_hw *[]){
3762                     &nss_port5_tx_div_clk_src.clkr.hw },
3763             .num_parents = 1,
3764             .flags = CLK_SET_RATE_PARENT,
3765             .ops = &clk_branch2_ops,
3766         },
3767     },
3768 };
3769 
3770 static struct clk_branch gcc_uniphy0_sys_clk = {
3771     .halt_reg = 0x5600C,
3772     .clkr = {
3773         .enable_reg = 0x5600C,
3774         .enable_mask = BIT(0),
3775         .hw.init = &(struct clk_init_data){
3776             .name = "gcc_uniphy0_sys_clk",
3777             .parent_hws = (const struct clk_hw *[]){
3778                     &gcc_xo_clk_src.clkr.hw },
3779             .num_parents = 1,
3780             .flags = CLK_SET_RATE_PARENT,
3781             .ops = &clk_branch2_ops,
3782         },
3783     },
3784 };
3785 
3786 static struct clk_branch gcc_uniphy1_ahb_clk = {
3787     .halt_reg = 0x56108,
3788     .clkr = {
3789         .enable_reg = 0x56108,
3790         .enable_mask = BIT(0),
3791         .hw.init = &(struct clk_init_data){
3792             .name = "gcc_uniphy1_ahb_clk",
3793             .parent_hws = (const struct clk_hw *[]){
3794                     &pcnoc_bfdcd_clk_src.clkr.hw },
3795             .num_parents = 1,
3796             .flags = CLK_SET_RATE_PARENT,
3797             .ops = &clk_branch2_ops,
3798         },
3799     },
3800 };
3801 
3802 static struct clk_branch gcc_uniphy1_port5_rx_clk = {
3803     .halt_reg = 0x56110,
3804     .clkr = {
3805         .enable_reg = 0x56110,
3806         .enable_mask = BIT(0),
3807         .hw.init = &(struct clk_init_data){
3808             .name = "gcc_uniphy1_port5_rx_clk",
3809             .parent_hws = (const struct clk_hw *[]){
3810                     &nss_port5_rx_div_clk_src.clkr.hw },
3811             .num_parents = 1,
3812             .flags = CLK_SET_RATE_PARENT,
3813             .ops = &clk_branch2_ops,
3814         },
3815     },
3816 };
3817 
3818 static struct clk_branch gcc_uniphy1_port5_tx_clk = {
3819     .halt_reg = 0x56114,
3820     .clkr = {
3821         .enable_reg = 0x56114,
3822         .enable_mask = BIT(0),
3823         .hw.init = &(struct clk_init_data){
3824             .name = "gcc_uniphy1_port5_tx_clk",
3825             .parent_hws = (const struct clk_hw *[]){
3826                     &nss_port5_tx_div_clk_src.clkr.hw },
3827             .num_parents = 1,
3828             .flags = CLK_SET_RATE_PARENT,
3829             .ops = &clk_branch2_ops,
3830         },
3831     },
3832 };
3833 
3834 static struct clk_branch gcc_uniphy1_sys_clk = {
3835     .halt_reg = 0x5610C,
3836     .clkr = {
3837         .enable_reg = 0x5610C,
3838         .enable_mask = BIT(0),
3839         .hw.init = &(struct clk_init_data){
3840             .name = "gcc_uniphy1_sys_clk",
3841             .parent_hws = (const struct clk_hw *[]){
3842                     &gcc_xo_clk_src.clkr.hw },
3843             .num_parents = 1,
3844             .flags = CLK_SET_RATE_PARENT,
3845             .ops = &clk_branch2_ops,
3846         },
3847     },
3848 };
3849 
3850 static struct clk_branch gcc_usb0_aux_clk = {
3851     .halt_reg = 0x3e044,
3852     .clkr = {
3853         .enable_reg = 0x3e044,
3854         .enable_mask = BIT(0),
3855         .hw.init = &(struct clk_init_data){
3856             .name = "gcc_usb0_aux_clk",
3857             .parent_hws = (const struct clk_hw *[]){
3858                     &usb0_aux_clk_src.clkr.hw },
3859             .num_parents = 1,
3860             .flags = CLK_SET_RATE_PARENT,
3861             .ops = &clk_branch2_ops,
3862         },
3863     },
3864 };
3865 
3866 static struct clk_branch gcc_usb0_master_clk = {
3867     .halt_reg = 0x3e000,
3868     .clkr = {
3869         .enable_reg = 0x3e000,
3870         .enable_mask = BIT(0),
3871         .hw.init = &(struct clk_init_data){
3872             .name = "gcc_usb0_master_clk",
3873             .parent_hws = (const struct clk_hw *[]){
3874                     &usb0_master_clk_src.clkr.hw },
3875             .num_parents = 1,
3876             .flags = CLK_SET_RATE_PARENT,
3877             .ops = &clk_branch2_ops,
3878         },
3879     },
3880 };
3881 
3882 static struct clk_branch gcc_snoc_bus_timeout2_ahb_clk = {
3883     .halt_reg = 0x47014,
3884     .clkr = {
3885         .enable_reg = 0x47014,
3886         .enable_mask = BIT(0),
3887         .hw.init = &(struct clk_init_data){
3888             .name = "gcc_snoc_bus_timeout2_ahb_clk",
3889             .parent_hws = (const struct clk_hw *[]){
3890                     &usb0_master_clk_src.clkr.hw },
3891             .num_parents = 1,
3892             .flags = CLK_SET_RATE_PARENT,
3893             .ops = &clk_branch2_ops,
3894         },
3895     },
3896 };
3897 
3898 static struct clk_rcg2 pcie0_rchng_clk_src = {
3899     .cmd_rcgr = 0x75070,
3900     .freq_tbl = ftbl_pcie_rchng_clk_src,
3901     .hid_width = 5,
3902     .parent_map = gcc_xo_gpll0_map,
3903     .clkr.hw.init = &(struct clk_init_data){
3904         .name = "pcie0_rchng_clk_src",
3905         .parent_data = gcc_xo_gpll0,
3906         .num_parents = 2,
3907         .ops = &clk_rcg2_ops,
3908     },
3909 };
3910 
3911 static struct clk_branch gcc_pcie0_rchng_clk = {
3912     .halt_reg = 0x75070,
3913     .clkr = {
3914         .enable_reg = 0x75070,
3915         .enable_mask = BIT(1),
3916         .hw.init = &(struct clk_init_data){
3917             .name = "gcc_pcie0_rchng_clk",
3918             .parent_hws = (const struct clk_hw *[]){
3919                     &pcie0_rchng_clk_src.clkr.hw },
3920             .num_parents = 1,
3921             .flags = CLK_SET_RATE_PARENT,
3922             .ops = &clk_branch2_ops,
3923         },
3924     },
3925 };
3926 
3927 static struct clk_branch gcc_pcie0_axi_s_bridge_clk = {
3928     .halt_reg = 0x75048,
3929     .clkr = {
3930         .enable_reg = 0x75048,
3931         .enable_mask = BIT(0),
3932         .hw.init = &(struct clk_init_data){
3933             .name = "gcc_pcie0_axi_s_bridge_clk",
3934             .parent_hws = (const struct clk_hw *[]){
3935                     &pcie0_axi_clk_src.clkr.hw },
3936             .num_parents = 1,
3937             .flags = CLK_SET_RATE_PARENT,
3938             .ops = &clk_branch2_ops,
3939         },
3940     },
3941 };
3942 
3943 static struct clk_branch gcc_sys_noc_usb0_axi_clk = {
3944     .halt_reg = 0x26040,
3945     .clkr = {
3946         .enable_reg = 0x26040,
3947         .enable_mask = BIT(0),
3948         .hw.init = &(struct clk_init_data){
3949             .name = "gcc_sys_noc_usb0_axi_clk",
3950             .parent_hws = (const struct clk_hw *[]){
3951                     &usb0_master_clk_src.clkr.hw },
3952             .num_parents = 1,
3953             .flags = CLK_SET_RATE_PARENT,
3954             .ops = &clk_branch2_ops,
3955         },
3956     },
3957 };
3958 
3959 static struct clk_branch gcc_usb0_mock_utmi_clk = {
3960     .halt_reg = 0x3e008,
3961     .clkr = {
3962         .enable_reg = 0x3e008,
3963         .enable_mask = BIT(0),
3964         .hw.init = &(struct clk_init_data){
3965             .name = "gcc_usb0_mock_utmi_clk",
3966             .parent_hws = (const struct clk_hw *[]){
3967                     &usb0_mock_utmi_clk_src.clkr.hw },
3968             .num_parents = 1,
3969             .flags = CLK_SET_RATE_PARENT,
3970             .ops = &clk_branch2_ops,
3971         },
3972     },
3973 };
3974 
3975 static struct clk_branch gcc_usb0_phy_cfg_ahb_clk = {
3976     .halt_reg = 0x3e080,
3977     .clkr = {
3978         .enable_reg = 0x3e080,
3979         .enable_mask = BIT(0),
3980         .hw.init = &(struct clk_init_data){
3981             .name = "gcc_usb0_phy_cfg_ahb_clk",
3982             .parent_hws = (const struct clk_hw *[]){
3983                     &pcnoc_bfdcd_clk_src.clkr.hw },
3984             .num_parents = 1,
3985             .flags = CLK_SET_RATE_PARENT,
3986             .ops = &clk_branch2_ops,
3987         },
3988     },
3989 };
3990 
3991 static struct clk_branch gcc_usb0_pipe_clk = {
3992     .halt_reg = 0x3e040,
3993     .halt_check = BRANCH_HALT_DELAY,
3994     .clkr = {
3995         .enable_reg = 0x3e040,
3996         .enable_mask = BIT(0),
3997         .hw.init = &(struct clk_init_data){
3998             .name = "gcc_usb0_pipe_clk",
3999             .parent_hws = (const struct clk_hw *[]){
4000                     &usb0_pipe_clk_src.clkr.hw },
4001             .num_parents = 1,
4002             .flags = CLK_SET_RATE_PARENT,
4003             .ops = &clk_branch2_ops,
4004         },
4005     },
4006 };
4007 
4008 static struct clk_branch gcc_usb0_sleep_clk = {
4009     .halt_reg = 0x3e004,
4010     .clkr = {
4011         .enable_reg = 0x3e004,
4012         .enable_mask = BIT(0),
4013         .hw.init = &(struct clk_init_data){
4014             .name = "gcc_usb0_sleep_clk",
4015             .parent_hws = (const struct clk_hw *[]){
4016                     &gcc_sleep_clk_src.clkr.hw },
4017             .num_parents = 1,
4018             .flags = CLK_SET_RATE_PARENT,
4019             .ops = &clk_branch2_ops,
4020         },
4021     },
4022 };
4023 
4024 static struct clk_branch gcc_usb1_master_clk = {
4025     .halt_reg = 0x3f000,
4026     .clkr = {
4027         .enable_reg = 0x3f000,
4028         .enable_mask = BIT(0),
4029         .hw.init = &(struct clk_init_data){
4030             .name = "gcc_usb1_master_clk",
4031             .parent_hws = (const struct clk_hw *[]){
4032                     &pcnoc_bfdcd_clk_src.clkr.hw },
4033             .num_parents = 1,
4034             .flags = CLK_SET_RATE_PARENT,
4035             .ops = &clk_branch2_ops,
4036         },
4037     },
4038 };
4039 
4040 static struct clk_branch gcc_usb1_mock_utmi_clk = {
4041     .halt_reg = 0x3f008,
4042     .clkr = {
4043         .enable_reg = 0x3f008,
4044         .enable_mask = BIT(0),
4045         .hw.init = &(struct clk_init_data){
4046             .name = "gcc_usb1_mock_utmi_clk",
4047             .parent_hws = (const struct clk_hw *[]){
4048                     &usb1_mock_utmi_clk_src.clkr.hw },
4049             .num_parents = 1,
4050             .flags = CLK_SET_RATE_PARENT,
4051             .ops = &clk_branch2_ops,
4052         },
4053     },
4054 };
4055 
4056 static struct clk_branch gcc_usb1_phy_cfg_ahb_clk = {
4057     .halt_reg = 0x3f080,
4058     .clkr = {
4059         .enable_reg = 0x3f080,
4060         .enable_mask = BIT(0),
4061         .hw.init = &(struct clk_init_data){
4062             .name = "gcc_usb1_phy_cfg_ahb_clk",
4063             .parent_hws = (const struct clk_hw *[]){
4064                     &pcnoc_bfdcd_clk_src.clkr.hw },
4065             .num_parents = 1,
4066             .flags = CLK_SET_RATE_PARENT,
4067             .ops = &clk_branch2_ops,
4068         },
4069     },
4070 };
4071 
4072 static struct clk_branch gcc_usb1_sleep_clk = {
4073     .halt_reg = 0x3f004,
4074     .clkr = {
4075         .enable_reg = 0x3f004,
4076         .enable_mask = BIT(0),
4077         .hw.init = &(struct clk_init_data){
4078             .name = "gcc_usb1_sleep_clk",
4079             .parent_hws = (const struct clk_hw *[]){
4080                     &gcc_sleep_clk_src.clkr.hw },
4081             .num_parents = 1,
4082             .flags = CLK_SET_RATE_PARENT,
4083             .ops = &clk_branch2_ops,
4084         },
4085     },
4086 };
4087 
4088 static struct clk_branch gcc_cmn_12gpll_ahb_clk = {
4089     .halt_reg = 0x56308,
4090     .clkr = {
4091         .enable_reg = 0x56308,
4092         .enable_mask = BIT(0),
4093         .hw.init = &(struct clk_init_data){
4094             .name = "gcc_cmn_12gpll_ahb_clk",
4095             .parent_hws = (const struct clk_hw *[]){
4096                     &pcnoc_bfdcd_clk_src.clkr.hw },
4097             .num_parents = 1,
4098             .flags = CLK_SET_RATE_PARENT,
4099             .ops = &clk_branch2_ops,
4100         },
4101     },
4102 };
4103 
4104 static struct clk_branch gcc_cmn_12gpll_sys_clk = {
4105     .halt_reg = 0x5630c,
4106     .clkr = {
4107         .enable_reg = 0x5630c,
4108         .enable_mask = BIT(0),
4109         .hw.init = &(struct clk_init_data){
4110             .name = "gcc_cmn_12gpll_sys_clk",
4111             .parent_hws = (const struct clk_hw *[]){
4112                     &gcc_xo_clk_src.clkr.hw },
4113             .num_parents = 1,
4114             .flags = CLK_SET_RATE_PARENT,
4115             .ops = &clk_branch2_ops,
4116         },
4117     },
4118 };
4119 
4120 static struct clk_branch gcc_sdcc1_ice_core_clk = {
4121     .halt_reg = 0x5d014,
4122     .clkr = {
4123         .enable_reg = 0x5d014,
4124         .enable_mask = BIT(0),
4125         .hw.init = &(struct clk_init_data){
4126             .name = "gcc_sdcc1_ice_core_clk",
4127             .parent_hws = (const struct clk_hw *[]){
4128                     &sdcc1_ice_core_clk_src.clkr.hw },
4129             .num_parents = 1,
4130             .flags = CLK_SET_RATE_PARENT,
4131             .ops = &clk_branch2_ops,
4132         },
4133     },
4134 };
4135 
4136 static struct clk_branch gcc_dcc_clk = {
4137     .halt_reg = 0x77004,
4138     .clkr = {
4139         .enable_reg = 0x77004,
4140         .enable_mask = BIT(0),
4141         .hw.init = &(struct clk_init_data){
4142             .name = "gcc_dcc_clk",
4143             .parent_hws = (const struct clk_hw *[]){
4144                     &pcnoc_bfdcd_clk_src.clkr.hw },
4145             .num_parents = 1,
4146             .flags = CLK_SET_RATE_PARENT,
4147             .ops = &clk_branch2_ops,
4148         },
4149     },
4150 };
4151 
4152 static const struct alpha_pll_config ubi32_pll_config = {
4153     .l = 0x3e,
4154     .alpha = 0x57,
4155     .config_ctl_val = 0x240d6aa8,
4156     .config_ctl_hi_val = 0x3c2,
4157     .main_output_mask = BIT(0),
4158     .aux_output_mask = BIT(1),
4159     .pre_div_val = 0x0,
4160     .pre_div_mask = BIT(12),
4161     .post_div_val = 0x0,
4162     .post_div_mask = GENMASK(9, 8),
4163 };
4164 
4165 static const struct alpha_pll_config nss_crypto_pll_config = {
4166     .l = 0x32,
4167     .alpha = 0x0,
4168     .alpha_hi = 0x0,
4169     .config_ctl_val = 0x4001055b,
4170     .main_output_mask = BIT(0),
4171     .pre_div_val = 0x0,
4172     .pre_div_mask = GENMASK(14, 12),
4173     .post_div_val = 0x1 << 8,
4174     .post_div_mask = GENMASK(11, 8),
4175     .vco_mask = GENMASK(21, 20),
4176     .vco_val = 0x0,
4177     .alpha_en_mask = BIT(24),
4178 };
4179 
4180 static struct clk_hw *gcc_ipq6018_hws[] = {
4181     &gpll0_out_main_div2.hw,
4182     &gcc_xo_div4_clk_src.hw,
4183     &nss_ppe_cdiv_clk_src.hw,
4184     &gpll6_out_main_div2.hw,
4185     &qdss_dap_sync_clk_src.hw,
4186     &qdss_tsctr_div2_clk_src.hw,
4187 };
4188 
4189 static struct clk_regmap *gcc_ipq6018_clks[] = {
4190     [GPLL0_MAIN] = &gpll0_main.clkr,
4191     [GPLL0] = &gpll0.clkr,
4192     [UBI32_PLL_MAIN] = &ubi32_pll_main.clkr,
4193     [UBI32_PLL] = &ubi32_pll.clkr,
4194     [GPLL6_MAIN] = &gpll6_main.clkr,
4195     [GPLL6] = &gpll6.clkr,
4196     [GPLL4_MAIN] = &gpll4_main.clkr,
4197     [GPLL4] = &gpll4.clkr,
4198     [PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
4199     [GPLL2_MAIN] = &gpll2_main.clkr,
4200     [GPLL2] = &gpll2.clkr,
4201     [NSS_CRYPTO_PLL_MAIN] = &nss_crypto_pll_main.clkr,
4202     [NSS_CRYPTO_PLL] = &nss_crypto_pll.clkr,
4203     [QDSS_TSCTR_CLK_SRC] = &qdss_tsctr_clk_src.clkr,
4204     [QDSS_AT_CLK_SRC] = &qdss_at_clk_src.clkr,
4205     [NSS_PPE_CLK_SRC] = &nss_ppe_clk_src.clkr,
4206     [GCC_XO_CLK_SRC] = &gcc_xo_clk_src.clkr,
4207     [SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
4208     [SNOC_NSSNOC_BFDCD_CLK_SRC] = &snoc_nssnoc_bfdcd_clk_src.clkr,
4209     [NSS_CE_CLK_SRC] = &nss_ce_clk_src.clkr,
4210     [GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr,
4211     [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
4212     [NSS_PORT5_RX_CLK_SRC] = &nss_port5_rx_clk_src.clkr,
4213     [NSS_PORT5_TX_CLK_SRC] = &nss_port5_tx_clk_src.clkr,
4214     [UBI32_MEM_NOC_BFDCD_CLK_SRC] = &ubi32_mem_noc_bfdcd_clk_src.clkr,
4215     [PCIE0_AXI_CLK_SRC] = &pcie0_axi_clk_src.clkr,
4216     [USB0_MASTER_CLK_SRC] = &usb0_master_clk_src.clkr,
4217     [APSS_AHB_POSTDIV_CLK_SRC] = &apss_ahb_postdiv_clk_src.clkr,
4218     [NSS_PORT1_RX_CLK_SRC] = &nss_port1_rx_clk_src.clkr,
4219     [NSS_PORT1_TX_CLK_SRC] = &nss_port1_tx_clk_src.clkr,
4220     [NSS_PORT2_RX_CLK_SRC] = &nss_port2_rx_clk_src.clkr,
4221     [NSS_PORT2_TX_CLK_SRC] = &nss_port2_tx_clk_src.clkr,
4222     [NSS_PORT3_RX_CLK_SRC] = &nss_port3_rx_clk_src.clkr,
4223     [NSS_PORT3_TX_CLK_SRC] = &nss_port3_tx_clk_src.clkr,
4224     [NSS_PORT4_RX_CLK_SRC] = &nss_port4_rx_clk_src.clkr,
4225     [NSS_PORT4_TX_CLK_SRC] = &nss_port4_tx_clk_src.clkr,
4226     [NSS_PORT5_RX_DIV_CLK_SRC] = &nss_port5_rx_div_clk_src.clkr,
4227     [NSS_PORT5_TX_DIV_CLK_SRC] = &nss_port5_tx_div_clk_src.clkr,
4228     [APSS_AXI_CLK_SRC] = &apss_axi_clk_src.clkr,
4229     [NSS_CRYPTO_CLK_SRC] = &nss_crypto_clk_src.clkr,
4230     [NSS_PORT1_RX_DIV_CLK_SRC] = &nss_port1_rx_div_clk_src.clkr,
4231     [NSS_PORT1_TX_DIV_CLK_SRC] = &nss_port1_tx_div_clk_src.clkr,
4232     [NSS_PORT2_RX_DIV_CLK_SRC] = &nss_port2_rx_div_clk_src.clkr,
4233     [NSS_PORT2_TX_DIV_CLK_SRC] = &nss_port2_tx_div_clk_src.clkr,
4234     [NSS_PORT3_RX_DIV_CLK_SRC] = &nss_port3_rx_div_clk_src.clkr,
4235     [NSS_PORT3_TX_DIV_CLK_SRC] = &nss_port3_tx_div_clk_src.clkr,
4236     [NSS_PORT4_RX_DIV_CLK_SRC] = &nss_port4_rx_div_clk_src.clkr,
4237     [NSS_PORT4_TX_DIV_CLK_SRC] = &nss_port4_tx_div_clk_src.clkr,
4238     [NSS_UBI0_CLK_SRC] = &nss_ubi0_clk_src.clkr,
4239     [ADSS_PWM_CLK_SRC] = &adss_pwm_clk_src.clkr,
4240     [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
4241     [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
4242     [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
4243     [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
4244     [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
4245     [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
4246     [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
4247     [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
4248     [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
4249     [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
4250     [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
4251     [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
4252     [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
4253     [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
4254     [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
4255     [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
4256     [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
4257     [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
4258     [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
4259     [GP1_CLK_SRC] = &gp1_clk_src.clkr,
4260     [GP2_CLK_SRC] = &gp2_clk_src.clkr,
4261     [GP3_CLK_SRC] = &gp3_clk_src.clkr,
4262     [NSS_UBI0_DIV_CLK_SRC] = &nss_ubi0_div_clk_src.clkr,
4263     [PCIE0_AUX_CLK_SRC] = &pcie0_aux_clk_src.clkr,
4264     [PCIE0_PIPE_CLK_SRC] = &pcie0_pipe_clk_src.clkr,
4265     [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
4266     [USB0_AUX_CLK_SRC] = &usb0_aux_clk_src.clkr,
4267     [USB0_MOCK_UTMI_CLK_SRC] = &usb0_mock_utmi_clk_src.clkr,
4268     [USB0_PIPE_CLK_SRC] = &usb0_pipe_clk_src.clkr,
4269     [USB1_MOCK_UTMI_CLK_SRC] = &usb1_mock_utmi_clk_src.clkr,
4270     [GCC_ADSS_PWM_CLK] = &gcc_adss_pwm_clk.clkr,
4271     [GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,
4272     [GCC_APSS_AXI_CLK] = &gcc_apss_axi_clk.clkr,
4273     [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
4274     [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
4275     [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
4276     [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
4277     [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
4278     [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
4279     [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
4280     [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
4281     [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
4282     [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
4283     [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
4284     [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
4285     [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
4286     [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
4287     [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
4288     [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
4289     [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
4290     [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
4291     [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
4292     [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
4293     [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
4294     [GCC_XO_CLK] = &gcc_xo_clk.clkr,
4295     [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
4296     [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
4297     [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
4298     [GCC_MDIO_AHB_CLK] = &gcc_mdio_ahb_clk.clkr,
4299     [GCC_CRYPTO_PPE_CLK] = &gcc_crypto_ppe_clk.clkr,
4300     [GCC_NSS_CE_APB_CLK] = &gcc_nss_ce_apb_clk.clkr,
4301     [GCC_NSS_CE_AXI_CLK] = &gcc_nss_ce_axi_clk.clkr,
4302     [GCC_NSS_CFG_CLK] = &gcc_nss_cfg_clk.clkr,
4303     [GCC_NSS_CRYPTO_CLK] = &gcc_nss_crypto_clk.clkr,
4304     [GCC_NSS_CSR_CLK] = &gcc_nss_csr_clk.clkr,
4305     [GCC_NSS_EDMA_CFG_CLK] = &gcc_nss_edma_cfg_clk.clkr,
4306     [GCC_NSS_EDMA_CLK] = &gcc_nss_edma_clk.clkr,
4307     [GCC_NSS_NOC_CLK] = &gcc_nss_noc_clk.clkr,
4308     [GCC_UBI0_UTCM_CLK] = &gcc_ubi0_utcm_clk.clkr,
4309     [GCC_SNOC_NSSNOC_CLK] = &gcc_snoc_nssnoc_clk.clkr,
4310     [GCC_NSS_PORT1_RX_CLK] = &gcc_nss_port1_rx_clk.clkr,
4311     [GCC_NSS_PORT1_TX_CLK] = &gcc_nss_port1_tx_clk.clkr,
4312     [GCC_NSS_PORT2_RX_CLK] = &gcc_nss_port2_rx_clk.clkr,
4313     [GCC_NSS_PORT2_TX_CLK] = &gcc_nss_port2_tx_clk.clkr,
4314     [GCC_NSS_PORT3_RX_CLK] = &gcc_nss_port3_rx_clk.clkr,
4315     [GCC_NSS_PORT3_TX_CLK] = &gcc_nss_port3_tx_clk.clkr,
4316     [GCC_NSS_PORT4_RX_CLK] = &gcc_nss_port4_rx_clk.clkr,
4317     [GCC_NSS_PORT4_TX_CLK] = &gcc_nss_port4_tx_clk.clkr,
4318     [GCC_NSS_PORT5_RX_CLK] = &gcc_nss_port5_rx_clk.clkr,
4319     [GCC_NSS_PORT5_TX_CLK] = &gcc_nss_port5_tx_clk.clkr,
4320     [GCC_NSS_PPE_CFG_CLK] = &gcc_nss_ppe_cfg_clk.clkr,
4321     [GCC_NSS_PPE_CLK] = &gcc_nss_ppe_clk.clkr,
4322     [GCC_NSS_PPE_IPE_CLK] = &gcc_nss_ppe_ipe_clk.clkr,
4323     [GCC_NSS_PTP_REF_CLK] = &gcc_nss_ptp_ref_clk.clkr,
4324     [GCC_NSSNOC_CE_APB_CLK] = &gcc_nssnoc_ce_apb_clk.clkr,
4325     [GCC_NSSNOC_CE_AXI_CLK] = &gcc_nssnoc_ce_axi_clk.clkr,
4326     [GCC_NSSNOC_CRYPTO_CLK] = &gcc_nssnoc_crypto_clk.clkr,
4327     [GCC_NSSNOC_PPE_CFG_CLK] = &gcc_nssnoc_ppe_cfg_clk.clkr,
4328     [GCC_NSSNOC_PPE_CLK] = &gcc_nssnoc_ppe_clk.clkr,
4329     [GCC_NSSNOC_QOSGEN_REF_CLK] = &gcc_nssnoc_qosgen_ref_clk.clkr,
4330     [GCC_NSSNOC_SNOC_CLK] = &gcc_nssnoc_snoc_clk.clkr,
4331     [GCC_NSSNOC_TIMEOUT_REF_CLK] = &gcc_nssnoc_timeout_ref_clk.clkr,
4332     [GCC_NSSNOC_UBI0_AHB_CLK] = &gcc_nssnoc_ubi0_ahb_clk.clkr,
4333     [GCC_PORT1_MAC_CLK] = &gcc_port1_mac_clk.clkr,
4334     [GCC_PORT2_MAC_CLK] = &gcc_port2_mac_clk.clkr,
4335     [GCC_PORT3_MAC_CLK] = &gcc_port3_mac_clk.clkr,
4336     [GCC_PORT4_MAC_CLK] = &gcc_port4_mac_clk.clkr,
4337     [GCC_PORT5_MAC_CLK] = &gcc_port5_mac_clk.clkr,
4338     [GCC_UBI0_AHB_CLK] = &gcc_ubi0_ahb_clk.clkr,
4339     [GCC_UBI0_AXI_CLK] = &gcc_ubi0_axi_clk.clkr,
4340     [GCC_UBI0_NC_AXI_CLK] = &gcc_ubi0_nc_axi_clk.clkr,
4341     [GCC_UBI0_CORE_CLK] = &gcc_ubi0_core_clk.clkr,
4342     [GCC_PCIE0_AHB_CLK] = &gcc_pcie0_ahb_clk.clkr,
4343     [GCC_PCIE0_AUX_CLK] = &gcc_pcie0_aux_clk.clkr,
4344     [GCC_PCIE0_AXI_M_CLK] = &gcc_pcie0_axi_m_clk.clkr,
4345     [GCC_PCIE0_AXI_S_CLK] = &gcc_pcie0_axi_s_clk.clkr,
4346     [GCC_SYS_NOC_PCIE0_AXI_CLK] = &gcc_sys_noc_pcie0_axi_clk.clkr,
4347     [GCC_PCIE0_PIPE_CLK] = &gcc_pcie0_pipe_clk.clkr,
4348     [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
4349     [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
4350     [GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr,
4351     [GCC_QPIC_CLK] = &gcc_qpic_clk.clkr,
4352     [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
4353     [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
4354     [GCC_UNIPHY0_AHB_CLK] = &gcc_uniphy0_ahb_clk.clkr,
4355     [GCC_UNIPHY0_PORT1_RX_CLK] = &gcc_uniphy0_port1_rx_clk.clkr,
4356     [GCC_UNIPHY0_PORT1_TX_CLK] = &gcc_uniphy0_port1_tx_clk.clkr,
4357     [GCC_UNIPHY0_PORT2_RX_CLK] = &gcc_uniphy0_port2_rx_clk.clkr,
4358     [GCC_UNIPHY0_PORT2_TX_CLK] = &gcc_uniphy0_port2_tx_clk.clkr,
4359     [GCC_UNIPHY0_PORT3_RX_CLK] = &gcc_uniphy0_port3_rx_clk.clkr,
4360     [GCC_UNIPHY0_PORT3_TX_CLK] = &gcc_uniphy0_port3_tx_clk.clkr,
4361     [GCC_UNIPHY0_PORT4_RX_CLK] = &gcc_uniphy0_port4_rx_clk.clkr,
4362     [GCC_UNIPHY0_PORT4_TX_CLK] = &gcc_uniphy0_port4_tx_clk.clkr,
4363     [GCC_UNIPHY0_PORT5_RX_CLK] = &gcc_uniphy0_port5_rx_clk.clkr,
4364     [GCC_UNIPHY0_PORT5_TX_CLK] = &gcc_uniphy0_port5_tx_clk.clkr,
4365     [GCC_UNIPHY0_SYS_CLK] = &gcc_uniphy0_sys_clk.clkr,
4366     [GCC_UNIPHY1_AHB_CLK] = &gcc_uniphy1_ahb_clk.clkr,
4367     [GCC_UNIPHY1_PORT5_RX_CLK] = &gcc_uniphy1_port5_rx_clk.clkr,
4368     [GCC_UNIPHY1_PORT5_TX_CLK] = &gcc_uniphy1_port5_tx_clk.clkr,
4369     [GCC_UNIPHY1_SYS_CLK] = &gcc_uniphy1_sys_clk.clkr,
4370     [GCC_USB0_AUX_CLK] = &gcc_usb0_aux_clk.clkr,
4371     [GCC_SYS_NOC_USB0_AXI_CLK] = &gcc_sys_noc_usb0_axi_clk.clkr,
4372     [GCC_SNOC_BUS_TIMEOUT2_AHB_CLK] = &gcc_snoc_bus_timeout2_ahb_clk.clkr,
4373     [GCC_USB0_MASTER_CLK] = &gcc_usb0_master_clk.clkr,
4374     [GCC_USB0_MOCK_UTMI_CLK] = &gcc_usb0_mock_utmi_clk.clkr,
4375     [GCC_USB0_PHY_CFG_AHB_CLK] = &gcc_usb0_phy_cfg_ahb_clk.clkr,
4376     [GCC_USB0_PIPE_CLK] = &gcc_usb0_pipe_clk.clkr,
4377     [GCC_USB0_SLEEP_CLK] = &gcc_usb0_sleep_clk.clkr,
4378     [GCC_USB1_MASTER_CLK] = &gcc_usb1_master_clk.clkr,
4379     [GCC_USB1_MOCK_UTMI_CLK] = &gcc_usb1_mock_utmi_clk.clkr,
4380     [GCC_USB1_PHY_CFG_AHB_CLK] = &gcc_usb1_phy_cfg_ahb_clk.clkr,
4381     [GCC_USB1_SLEEP_CLK] = &gcc_usb1_sleep_clk.clkr,
4382     [GCC_CMN_12GPLL_AHB_CLK] = &gcc_cmn_12gpll_ahb_clk.clkr,
4383     [GCC_CMN_12GPLL_SYS_CLK] = &gcc_cmn_12gpll_sys_clk.clkr,
4384     [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
4385     [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
4386     [GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
4387     [PCIE0_RCHNG_CLK_SRC] = &pcie0_rchng_clk_src.clkr,
4388     [GCC_PCIE0_AXI_S_BRIDGE_CLK] = &gcc_pcie0_axi_s_bridge_clk.clkr,
4389     [PCIE0_RCHNG_CLK] = &gcc_pcie0_rchng_clk.clkr,
4390     [WCSS_AHB_CLK_SRC] = &wcss_ahb_clk_src.clkr,
4391     [Q6_AXI_CLK_SRC] = &q6_axi_clk_src.clkr,
4392     [RBCPR_WCSS_CLK_SRC] = &rbcpr_wcss_clk_src.clkr,
4393     [GCC_LPASS_CORE_AXIM_CLK] = &gcc_lpass_core_axim_clk.clkr,
4394     [LPASS_CORE_AXIM_CLK_SRC] = &lpass_core_axim_clk_src.clkr,
4395     [GCC_LPASS_SNOC_CFG_CLK] = &gcc_lpass_snoc_cfg_clk.clkr,
4396     [LPASS_SNOC_CFG_CLK_SRC] = &lpass_snoc_cfg_clk_src.clkr,
4397     [GCC_LPASS_Q6_AXIM_CLK] = &gcc_lpass_q6_axim_clk.clkr,
4398     [LPASS_Q6_AXIM_CLK_SRC] = &lpass_q6_axim_clk_src.clkr,
4399     [GCC_LPASS_Q6_ATBM_AT_CLK] = &gcc_lpass_q6_atbm_at_clk.clkr,
4400     [GCC_LPASS_Q6_PCLKDBG_CLK] = &gcc_lpass_q6_pclkdbg_clk.clkr,
4401     [GCC_LPASS_Q6SS_TSCTR_1TO2_CLK] = &gcc_lpass_q6ss_tsctr_1to2_clk.clkr,
4402     [GCC_LPASS_Q6SS_TRIG_CLK] = &gcc_lpass_q6ss_trig_clk.clkr,
4403     [GCC_LPASS_TBU_CLK] = &gcc_lpass_tbu_clk.clkr,
4404     [GCC_PCNOC_LPASS_CLK] = &gcc_pcnoc_lpass_clk.clkr,
4405     [GCC_MEM_NOC_UBI32_CLK] = &gcc_mem_noc_ubi32_clk.clkr,
4406     [GCC_MEM_NOC_LPASS_CLK] = &gcc_mem_noc_lpass_clk.clkr,
4407     [GCC_SNOC_LPASS_CFG_CLK] = &gcc_snoc_lpass_cfg_clk.clkr,
4408     [QDSS_STM_CLK_SRC] = &qdss_stm_clk_src.clkr,
4409     [QDSS_TRACECLKIN_CLK_SRC] = &qdss_traceclkin_clk_src.clkr,
4410 };
4411 
4412 static const struct qcom_reset_map gcc_ipq6018_resets[] = {
4413     [GCC_BLSP1_BCR] = { 0x01000, 0 },
4414     [GCC_BLSP1_QUP1_BCR] = { 0x02000, 0 },
4415     [GCC_BLSP1_UART1_BCR] = { 0x02038, 0 },
4416     [GCC_BLSP1_QUP2_BCR] = { 0x03008, 0 },
4417     [GCC_BLSP1_UART2_BCR] = { 0x03028, 0 },
4418     [GCC_BLSP1_QUP3_BCR] = { 0x04008, 0 },
4419     [GCC_BLSP1_UART3_BCR] = { 0x04028, 0 },
4420     [GCC_BLSP1_QUP4_BCR] = { 0x05008, 0 },
4421     [GCC_BLSP1_UART4_BCR] = { 0x05028, 0 },
4422     [GCC_BLSP1_QUP5_BCR] = { 0x06008, 0 },
4423     [GCC_BLSP1_UART5_BCR] = { 0x06028, 0 },
4424     [GCC_BLSP1_QUP6_BCR] = { 0x07008, 0 },
4425     [GCC_BLSP1_UART6_BCR] = { 0x07028, 0 },
4426     [GCC_IMEM_BCR] = { 0x0e000, 0 },
4427     [GCC_SMMU_BCR] = { 0x12000, 0 },
4428     [GCC_APSS_TCU_BCR] = { 0x12050, 0 },
4429     [GCC_SMMU_XPU_BCR] = { 0x12054, 0 },
4430     [GCC_PCNOC_TBU_BCR] = { 0x12058, 0 },
4431     [GCC_SMMU_CFG_BCR] = { 0x1208c, 0 },
4432     [GCC_PRNG_BCR] = { 0x13000, 0 },
4433     [GCC_BOOT_ROM_BCR] = { 0x13008, 0 },
4434     [GCC_CRYPTO_BCR] = { 0x16000, 0 },
4435     [GCC_WCSS_BCR] = { 0x18000, 0 },
4436     [GCC_WCSS_Q6_BCR] = { 0x18100, 0 },
4437     [GCC_NSS_BCR] = { 0x19000, 0 },
4438     [GCC_SEC_CTRL_BCR] = { 0x1a000, 0 },
4439     [GCC_ADSS_BCR] = { 0x1c000, 0 },
4440     [GCC_DDRSS_BCR] = { 0x1e000, 0 },
4441     [GCC_SYSTEM_NOC_BCR] = { 0x26000, 0 },
4442     [GCC_PCNOC_BCR] = { 0x27018, 0 },
4443     [GCC_TCSR_BCR] = { 0x28000, 0 },
4444     [GCC_QDSS_BCR] = { 0x29000, 0 },
4445     [GCC_DCD_BCR] = { 0x2a000, 0 },
4446     [GCC_MSG_RAM_BCR] = { 0x2b000, 0 },
4447     [GCC_MPM_BCR] = { 0x2c000, 0 },
4448     [GCC_SPDM_BCR] = { 0x2f000, 0 },
4449     [GCC_RBCPR_BCR] = { 0x33000, 0 },
4450     [GCC_RBCPR_MX_BCR] = { 0x33014, 0 },
4451     [GCC_TLMM_BCR] = { 0x34000, 0 },
4452     [GCC_RBCPR_WCSS_BCR] = { 0x3a000, 0 },
4453     [GCC_USB0_PHY_BCR] = { 0x3e034, 0 },
4454     [GCC_USB3PHY_0_PHY_BCR] = { 0x3e03c, 0 },
4455     [GCC_USB0_BCR] = { 0x3e070, 0 },
4456     [GCC_USB1_BCR] = { 0x3f070, 0 },
4457     [GCC_QUSB2_0_PHY_BCR] = { 0x4103c, 0 },
4458     [GCC_QUSB2_1_PHY_BCR] = { 0x41040, 0 },
4459     [GCC_SDCC1_BCR] = { 0x42000, 0 },
4460     [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x47000, 0 },
4461     [GCC_SNOC_BUS_TIMEOUT1_BCR] = { 0x47008, 0 },
4462     [GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x47010, 0 },
4463     [GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000, 0 },
4464     [GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008, 0 },
4465     [GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010, 0 },
4466     [GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018, 0 },
4467     [GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020, 0 },
4468     [GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028, 0 },
4469     [GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030, 0 },
4470     [GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038, 0 },
4471     [GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040, 0 },
4472     [GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048, 0 },
4473     [GCC_UNIPHY0_BCR] = { 0x56000, 0 },
4474     [GCC_UNIPHY1_BCR] = { 0x56100, 0 },
4475     [GCC_CMN_12GPLL_BCR] = { 0x56300, 0 },
4476     [GCC_QPIC_BCR] = { 0x57018, 0 },
4477     [GCC_MDIO_BCR] = { 0x58000, 0 },
4478     [GCC_WCSS_CORE_TBU_BCR] = { 0x66000, 0 },
4479     [GCC_WCSS_Q6_TBU_BCR] = { 0x67000, 0 },
4480     [GCC_USB0_TBU_BCR] = { 0x6a000, 0 },
4481     [GCC_PCIE0_TBU_BCR] = { 0x6b000, 0 },
4482     [GCC_NSS_NOC_TBU_BCR] = { 0x6e000, 0 },
4483     [GCC_PCIE0_BCR] = { 0x75004, 0 },
4484     [GCC_PCIE0_PHY_BCR] = { 0x75038, 0 },
4485     [GCC_PCIE0PHY_PHY_BCR] = { 0x7503c, 0 },
4486     [GCC_PCIE0_LINK_DOWN_BCR] = { 0x75044, 0 },
4487     [GCC_DCC_BCR] = { 0x77000, 0 },
4488     [GCC_APC0_VOLTAGE_DROOP_DETECTOR_BCR] = { 0x78000, 0 },
4489     [GCC_SMMU_CATS_BCR] = { 0x7c000, 0 },
4490     [GCC_UBI0_AXI_ARES] = { 0x68010, 0 },
4491     [GCC_UBI0_AHB_ARES] = { 0x68010, 1 },
4492     [GCC_UBI0_NC_AXI_ARES] = { 0x68010, 2 },
4493     [GCC_UBI0_DBG_ARES] = { 0x68010, 3 },
4494     [GCC_UBI0_CORE_CLAMP_ENABLE] = { 0x68010, 4 },
4495     [GCC_UBI0_CLKRST_CLAMP_ENABLE] = { 0x68010, 5 },
4496     [GCC_UBI0_UTCM_ARES] = { 0x68010, 6 },
4497     [GCC_UBI0_CORE_ARES] = { 0x68010, 7 },
4498     [GCC_NSS_CFG_ARES] = { 0x68010, 16 },
4499     [GCC_NSS_NOC_ARES] = { 0x68010, 18 },
4500     [GCC_NSS_CRYPTO_ARES] = { 0x68010, 19 },
4501     [GCC_NSS_CSR_ARES] = { 0x68010, 20 },
4502     [GCC_NSS_CE_APB_ARES] = { 0x68010, 21 },
4503     [GCC_NSS_CE_AXI_ARES] = { 0x68010, 22 },
4504     [GCC_NSSNOC_CE_APB_ARES] = { 0x68010, 23 },
4505     [GCC_NSSNOC_CE_AXI_ARES] = { 0x68010, 24 },
4506     [GCC_NSSNOC_UBI0_AHB_ARES] = { 0x68010, 25 },
4507     [GCC_NSSNOC_SNOC_ARES] = { 0x68010, 27 },
4508     [GCC_NSSNOC_CRYPTO_ARES] = { 0x68010, 28 },
4509     [GCC_NSSNOC_ATB_ARES] = { 0x68010, 29 },
4510     [GCC_NSSNOC_QOSGEN_REF_ARES] = { 0x68010, 30 },
4511     [GCC_NSSNOC_TIMEOUT_REF_ARES] = { 0x68010, 31 },
4512     [GCC_PCIE0_PIPE_ARES] = { 0x75040, 0 },
4513     [GCC_PCIE0_SLEEP_ARES] = { 0x75040, 1 },
4514     [GCC_PCIE0_CORE_STICKY_ARES] = { 0x75040, 2 },
4515     [GCC_PCIE0_AXI_MASTER_ARES] = { 0x75040, 3 },
4516     [GCC_PCIE0_AXI_SLAVE_ARES] = { 0x75040, 4 },
4517     [GCC_PCIE0_AHB_ARES] = { 0x75040, 5 },
4518     [GCC_PCIE0_AXI_MASTER_STICKY_ARES] = { 0x75040, 6 },
4519     [GCC_PCIE0_AXI_SLAVE_STICKY_ARES] = { 0x75040, 7 },
4520     [GCC_PPE_FULL_RESET] = { 0x68014, 0 },
4521     [GCC_UNIPHY0_SOFT_RESET] = { 0x56004, 0 },
4522     [GCC_UNIPHY0_XPCS_RESET] = { 0x56004, 2 },
4523     [GCC_UNIPHY1_SOFT_RESET] = { 0x56104, 0 },
4524     [GCC_UNIPHY1_XPCS_RESET] = { 0x56104, 2 },
4525     [GCC_EDMA_HW_RESET] = { 0x68014, 0 },
4526     [GCC_NSSPORT1_RESET] = { 0x68014, 0 },
4527     [GCC_NSSPORT2_RESET] = { 0x68014, 0 },
4528     [GCC_NSSPORT3_RESET] = { 0x68014, 0 },
4529     [GCC_NSSPORT4_RESET] = { 0x68014, 0 },
4530     [GCC_NSSPORT5_RESET] = { 0x68014, 0 },
4531     [GCC_UNIPHY0_PORT1_ARES] = { 0x56004, 0 },
4532     [GCC_UNIPHY0_PORT2_ARES] = { 0x56004, 0 },
4533     [GCC_UNIPHY0_PORT3_ARES] = { 0x56004, 0 },
4534     [GCC_UNIPHY0_PORT4_ARES] = { 0x56004, 0 },
4535     [GCC_UNIPHY0_PORT5_ARES] = { 0x56004, 0 },
4536     [GCC_UNIPHY0_PORT_4_5_RESET] = { 0x56004, 0 },
4537     [GCC_UNIPHY0_PORT_4_RESET] = { 0x56004, 0 },
4538     [GCC_LPASS_BCR] = {0x1F000, 0},
4539     [GCC_UBI32_TBU_BCR] = {0x65000, 0},
4540     [GCC_LPASS_TBU_BCR] = {0x6C000, 0},
4541     [GCC_WCSSAON_RESET] = {0x59010, 0},
4542     [GCC_LPASS_Q6_AXIM_ARES] = {0x1F004, 0},
4543     [GCC_LPASS_Q6SS_TSCTR_1TO2_ARES] = {0x1F004, 1},
4544     [GCC_LPASS_Q6SS_TRIG_ARES] = {0x1F004, 2},
4545     [GCC_LPASS_Q6_ATBM_AT_ARES] = {0x1F004, 3},
4546     [GCC_LPASS_Q6_PCLKDBG_ARES] = {0x1F004, 4},
4547     [GCC_LPASS_CORE_AXIM_ARES] = {0x1F004, 5},
4548     [GCC_LPASS_SNOC_CFG_ARES] = {0x1F004, 6},
4549     [GCC_WCSS_DBG_ARES] = {0x59008, 0},
4550     [GCC_WCSS_ECAHB_ARES] = {0x59008, 1},
4551     [GCC_WCSS_ACMT_ARES] = {0x59008, 2},
4552     [GCC_WCSS_DBG_BDG_ARES] = {0x59008, 3},
4553     [GCC_WCSS_AHB_S_ARES] = {0x59008, 4},
4554     [GCC_WCSS_AXI_M_ARES] = {0x59008, 5},
4555     [GCC_Q6SS_DBG_ARES] = {0x59110, 0},
4556     [GCC_Q6_AHB_S_ARES] = {0x59110, 1},
4557     [GCC_Q6_AHB_ARES] = {0x59110, 2},
4558     [GCC_Q6_AXIM2_ARES] = {0x59110, 3},
4559     [GCC_Q6_AXIM_ARES] = {0x59110, 4},
4560 };
4561 
4562 static const struct of_device_id gcc_ipq6018_match_table[] = {
4563     { .compatible = "qcom,gcc-ipq6018" },
4564     { }
4565 };
4566 MODULE_DEVICE_TABLE(of, gcc_ipq6018_match_table);
4567 
4568 static const struct regmap_config gcc_ipq6018_regmap_config = {
4569     .reg_bits       = 32,
4570     .reg_stride     = 4,
4571     .val_bits       = 32,
4572     .max_register   = 0x7fffc,
4573     .fast_io    = true,
4574 };
4575 
4576 static const struct qcom_cc_desc gcc_ipq6018_desc = {
4577     .config = &gcc_ipq6018_regmap_config,
4578     .clks = gcc_ipq6018_clks,
4579     .num_clks = ARRAY_SIZE(gcc_ipq6018_clks),
4580     .resets = gcc_ipq6018_resets,
4581     .num_resets = ARRAY_SIZE(gcc_ipq6018_resets),
4582     .clk_hws = gcc_ipq6018_hws,
4583     .num_clk_hws = ARRAY_SIZE(gcc_ipq6018_hws),
4584 };
4585 
4586 static int gcc_ipq6018_probe(struct platform_device *pdev)
4587 {
4588     struct regmap *regmap;
4589 
4590     regmap = qcom_cc_map(pdev, &gcc_ipq6018_desc);
4591     if (IS_ERR(regmap))
4592         return PTR_ERR(regmap);
4593 
4594     /* Disable SW_COLLAPSE for USB0 GDSCR */
4595     regmap_update_bits(regmap, 0x3e078, BIT(0), 0x0);
4596     /* Enable SW_OVERRIDE for USB0 GDSCR */
4597     regmap_update_bits(regmap, 0x3e078, BIT(2), BIT(2));
4598     /* Disable SW_COLLAPSE for USB1 GDSCR */
4599     regmap_update_bits(regmap, 0x3f078, BIT(0), 0x0);
4600     /* Enable SW_OVERRIDE for USB1 GDSCR */
4601     regmap_update_bits(regmap, 0x3f078, BIT(2), BIT(2));
4602 
4603     /* SW Workaround for UBI Huyara PLL */
4604     regmap_update_bits(regmap, 0x2501c, BIT(26), BIT(26));
4605 
4606     clk_alpha_pll_configure(&ubi32_pll_main, regmap, &ubi32_pll_config);
4607 
4608     clk_alpha_pll_configure(&nss_crypto_pll_main, regmap,
4609                 &nss_crypto_pll_config);
4610 
4611     return qcom_cc_really_probe(pdev, &gcc_ipq6018_desc, regmap);
4612 }
4613 
4614 static struct platform_driver gcc_ipq6018_driver = {
4615     .probe = gcc_ipq6018_probe,
4616     .driver = {
4617         .name   = "qcom,gcc-ipq6018",
4618         .of_match_table = gcc_ipq6018_match_table,
4619     },
4620 };
4621 
4622 static int __init gcc_ipq6018_init(void)
4623 {
4624     return platform_driver_register(&gcc_ipq6018_driver);
4625 }
4626 core_initcall(gcc_ipq6018_init);
4627 
4628 static void __exit gcc_ipq6018_exit(void)
4629 {
4630     platform_driver_unregister(&gcc_ipq6018_driver);
4631 }
4632 module_exit(gcc_ipq6018_exit);
4633 
4634 MODULE_DESCRIPTION("Qualcomm Technologies, Inc. GCC IPQ6018 Driver");
4635 MODULE_LICENSE("GPL v2");