linux/drivers/clk/qcom/gcc-ipq6018.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Copyright (c) 2018, The Linux Foundation. All rights reserved.
   4 */
   5
   6#include <linux/kernel.h>
   7#include <linux/err.h>
   8#include <linux/platform_device.h>
   9#include <linux/module.h>
  10#include <linux/of.h>
  11#include <linux/of_device.h>
  12#include <linux/clk-provider.h>
  13#include <linux/regmap.h>
  14
  15#include <linux/reset-controller.h>
  16#include <dt-bindings/clock/qcom,gcc-ipq6018.h>
  17#include <dt-bindings/reset/qcom,gcc-ipq6018.h>
  18
  19#include "common.h"
  20#include "clk-regmap.h"
  21#include "clk-pll.h"
  22#include "clk-rcg.h"
  23#include "clk-branch.h"
  24#include "clk-alpha-pll.h"
  25#include "clk-regmap-divider.h"
  26#include "clk-regmap-mux.h"
  27#include "reset.h"
  28
  29#define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
  30
  31enum {
  32        P_XO,
  33        P_BIAS_PLL,
  34        P_UNIPHY0_RX,
  35        P_UNIPHY0_TX,
  36        P_UNIPHY1_RX,
  37        P_BIAS_PLL_NSS_NOC,
  38        P_UNIPHY1_TX,
  39        P_PCIE20_PHY0_PIPE,
  40        P_USB3PHY_0_PIPE,
  41        P_GPLL0,
  42        P_GPLL0_DIV2,
  43        P_GPLL2,
  44        P_GPLL4,
  45        P_GPLL6,
  46        P_SLEEP_CLK,
  47        P_UBI32_PLL,
  48        P_NSS_CRYPTO_PLL,
  49        P_PI_SLEEP,
  50};
  51
  52static struct clk_alpha_pll gpll0_main = {
  53        .offset = 0x21000,
  54        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  55        .clkr = {
  56                .enable_reg = 0x0b000,
  57                .enable_mask = BIT(0),
  58                .hw.init = &(struct clk_init_data){
  59                        .name = "gpll0_main",
  60                        .parent_data = &(const struct clk_parent_data){
  61                                .fw_name = "xo",
  62                        },
  63                        .num_parents = 1,
  64                        .ops = &clk_alpha_pll_ops,
  65                },
  66        },
  67};
  68
  69static struct clk_fixed_factor gpll0_out_main_div2 = {
  70        .mult = 1,
  71        .div = 2,
  72        .hw.init = &(struct clk_init_data){
  73                .name = "gpll0_out_main_div2",
  74                .parent_hws = (const struct clk_hw *[]){
  75                                &gpll0_main.clkr.hw },
  76                .num_parents = 1,
  77                .ops = &clk_fixed_factor_ops,
  78                .flags = CLK_SET_RATE_PARENT,
  79        },
  80};
  81
  82static struct clk_alpha_pll_postdiv gpll0 = {
  83        .offset = 0x21000,
  84        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  85        .width = 4,
  86        .clkr.hw.init = &(struct clk_init_data){
  87                .name = "gpll0",
  88                .parent_hws = (const struct clk_hw *[]){
  89                                &gpll0_main.clkr.hw },
  90                .num_parents = 1,
  91                .ops = &clk_alpha_pll_postdiv_ro_ops,
  92                .flags = CLK_SET_RATE_PARENT,
  93        },
  94};
  95
  96static const struct clk_parent_data gcc_xo_gpll0_gpll0_out_main_div2[] = {
  97        { .fw_name = "xo" },
  98        { .hw = &gpll0.clkr.hw},
  99        { .hw = &gpll0_out_main_div2.hw},
 100};
 101
 102static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_map[] = {
 103        { P_XO, 0 },
 104        { P_GPLL0, 1 },
 105        { P_GPLL0_DIV2, 4 },
 106};
 107
 108static struct clk_alpha_pll ubi32_pll_main = {
 109        .offset = 0x25000,
 110        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA],
 111        .flags = SUPPORTS_DYNAMIC_UPDATE,
 112        .clkr = {
 113                .enable_reg = 0x0b000,
 114                .enable_mask = BIT(6),
 115                .hw.init = &(struct clk_init_data){
 116                        .name = "ubi32_pll_main",
 117                        .parent_data = &(const struct clk_parent_data){
 118                                .fw_name = "xo",
 119                        },
 120                        .num_parents = 1,
 121                        .ops = &clk_alpha_pll_huayra_ops,
 122                },
 123        },
 124};
 125
 126static struct clk_alpha_pll_postdiv ubi32_pll = {
 127        .offset = 0x25000,
 128        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA],
 129        .width = 2,
 130        .clkr.hw.init = &(struct clk_init_data){
 131                .name = "ubi32_pll",
 132                .parent_hws = (const struct clk_hw *[]){
 133                                &ubi32_pll_main.clkr.hw },
 134                .num_parents = 1,
 135                .ops = &clk_alpha_pll_postdiv_ro_ops,
 136                .flags = CLK_SET_RATE_PARENT,
 137        },
 138};
 139
 140static struct clk_alpha_pll gpll6_main = {
 141        .offset = 0x37000,
 142        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
 143        .clkr = {
 144                .enable_reg = 0x0b000,
 145                .enable_mask = BIT(7),
 146                .hw.init = &(struct clk_init_data){
 147                        .name = "gpll6_main",
 148                        .parent_data = &(const struct clk_parent_data){
 149                                .fw_name = "xo",
 150                        },
 151                        .num_parents = 1,
 152                        .ops = &clk_alpha_pll_ops,
 153                },
 154        },
 155};
 156
 157static struct clk_alpha_pll_postdiv gpll6 = {
 158        .offset = 0x37000,
 159        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
 160        .width = 2,
 161        .clkr.hw.init = &(struct clk_init_data){
 162                .name = "gpll6",
 163                .parent_hws = (const struct clk_hw *[]){
 164                                &gpll6_main.clkr.hw },
 165                .num_parents = 1,
 166                .ops = &clk_alpha_pll_postdiv_ro_ops,
 167                .flags = CLK_SET_RATE_PARENT,
 168        },
 169};
 170
 171static struct clk_alpha_pll gpll4_main = {
 172        .offset = 0x24000,
 173        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 174        .clkr = {
 175                .enable_reg = 0x0b000,
 176                .enable_mask = BIT(5),
 177                .hw.init = &(struct clk_init_data){
 178                        .name = "gpll4_main",
 179                        .parent_data = &(const struct clk_parent_data){
 180                                .fw_name = "xo",
 181                        },
 182                        .num_parents = 1,
 183                        .ops = &clk_alpha_pll_ops,
 184                },
 185        },
 186};
 187
 188static struct clk_alpha_pll_postdiv gpll4 = {
 189        .offset = 0x24000,
 190        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 191        .width = 4,
 192        .clkr.hw.init = &(struct clk_init_data){
 193                .name = "gpll4",
 194                .parent_hws = (const struct clk_hw *[]){
 195                                &gpll4_main.clkr.hw },
 196                .num_parents = 1,
 197                .ops = &clk_alpha_pll_postdiv_ro_ops,
 198                .flags = CLK_SET_RATE_PARENT,
 199        },
 200};
 201
 202static const struct freq_tbl ftbl_pcnoc_bfdcd_clk_src[] = {
 203        F(24000000, P_XO, 1, 0, 0),
 204        F(50000000, P_GPLL0, 16, 0, 0),
 205        F(100000000, P_GPLL0, 8, 0, 0),
 206        { }
 207};
 208
 209static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
 210        .cmd_rcgr = 0x27000,
 211        .freq_tbl = ftbl_pcnoc_bfdcd_clk_src,
 212        .hid_width = 5,
 213        .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
 214        .clkr.hw.init = &(struct clk_init_data){
 215                .name = "pcnoc_bfdcd_clk_src",
 216                .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
 217                .num_parents = 3,
 218                .ops = &clk_rcg2_ops,
 219        },
 220};
 221
 222static struct clk_alpha_pll gpll2_main = {
 223        .offset = 0x4a000,
 224        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 225        .clkr = {
 226                .enable_reg = 0x0b000,
 227                .enable_mask = BIT(2),
 228                .hw.init = &(struct clk_init_data){
 229                        .name = "gpll2_main",
 230                        .parent_data = &(const struct clk_parent_data){
 231                                .fw_name = "xo",
 232                        },
 233                        .num_parents = 1,
 234                        .ops = &clk_alpha_pll_ops,
 235                },
 236        },
 237};
 238
 239static struct clk_alpha_pll_postdiv gpll2 = {
 240        .offset = 0x4a000,
 241        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 242        .width = 4,
 243        .clkr.hw.init = &(struct clk_init_data){
 244                .name = "gpll2",
 245                .parent_hws = (const struct clk_hw *[]){
 246                                &gpll2_main.clkr.hw },
 247                .num_parents = 1,
 248                .ops = &clk_alpha_pll_postdiv_ro_ops,
 249                .flags = CLK_SET_RATE_PARENT,
 250        },
 251};
 252
 253static struct clk_alpha_pll nss_crypto_pll_main = {
 254        .offset = 0x22000,
 255        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 256        .clkr = {
 257                .enable_reg = 0x0b000,
 258                .enable_mask = BIT(4),
 259                .hw.init = &(struct clk_init_data){
 260                        .name = "nss_crypto_pll_main",
 261                        .parent_data = &(const struct clk_parent_data){
 262                                .fw_name = "xo",
 263                        },
 264                        .num_parents = 1,
 265                        .ops = &clk_alpha_pll_ops,
 266                },
 267        },
 268};
 269
 270static struct clk_alpha_pll_postdiv nss_crypto_pll = {
 271        .offset = 0x22000,
 272        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 273        .width = 4,
 274        .clkr.hw.init = &(struct clk_init_data){
 275                .name = "nss_crypto_pll",
 276                .parent_hws = (const struct clk_hw *[]){
 277                                &nss_crypto_pll_main.clkr.hw },
 278                .num_parents = 1,
 279                .ops = &clk_alpha_pll_postdiv_ro_ops,
 280                .flags = CLK_SET_RATE_PARENT,
 281        },
 282};
 283
 284static const struct freq_tbl ftbl_qdss_tsctr_clk_src[] = {
 285        F(160000000, P_GPLL0_DIV2, 2.5, 0, 0),
 286        F(320000000, P_GPLL0, 2.5, 0, 0),
 287        F(600000000, P_GPLL4, 2, 0, 0),
 288        { }
 289};
 290
 291static const struct clk_parent_data gcc_xo_gpll4_gpll0_gpll6_gpll0_div2[] = {
 292        { .fw_name = "xo" },
 293        { .hw = &gpll4.clkr.hw },
 294        { .hw = &gpll0.clkr.hw },
 295        { .hw = &gpll6.clkr.hw },
 296        { .hw = &gpll0_out_main_div2.hw },
 297};
 298
 299static const struct parent_map gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map[] = {
 300        { P_XO, 0 },
 301        { P_GPLL4, 1 },
 302        { P_GPLL0, 2 },
 303        { P_GPLL6, 3 },
 304        { P_GPLL0_DIV2, 4 },
 305};
 306
 307static struct clk_rcg2 qdss_tsctr_clk_src = {
 308        .cmd_rcgr = 0x29064,
 309        .freq_tbl = ftbl_qdss_tsctr_clk_src,
 310        .hid_width = 5,
 311        .parent_map = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map,
 312        .clkr.hw.init = &(struct clk_init_data){
 313                .name = "qdss_tsctr_clk_src",
 314                .parent_data = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2,
 315                .num_parents = 5,
 316                .ops = &clk_rcg2_ops,
 317        },
 318};
 319
 320static struct clk_fixed_factor qdss_dap_sync_clk_src = {
 321        .mult = 1,
 322        .div = 4,
 323        .hw.init = &(struct clk_init_data){
 324                .name = "qdss_dap_sync_clk_src",
 325                .parent_hws = (const struct clk_hw *[]){
 326                                &qdss_tsctr_clk_src.clkr.hw },
 327                .num_parents = 1,
 328                .ops = &clk_fixed_factor_ops,
 329        },
 330};
 331
 332static const struct freq_tbl ftbl_qdss_at_clk_src[] = {
 333        F(66670000, P_GPLL0_DIV2, 6, 0, 0),
 334        F(240000000, P_GPLL4, 5, 0, 0),
 335        { }
 336};
 337
 338static struct clk_rcg2 qdss_at_clk_src = {
 339        .cmd_rcgr = 0x2900c,
 340        .freq_tbl = ftbl_qdss_at_clk_src,
 341        .hid_width = 5,
 342        .parent_map = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map,
 343        .clkr.hw.init = &(struct clk_init_data){
 344                .name = "qdss_at_clk_src",
 345                .parent_data = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2,
 346                .num_parents = 5,
 347                .ops = &clk_rcg2_ops,
 348        },
 349};
 350
 351static struct clk_fixed_factor qdss_tsctr_div2_clk_src = {
 352        .mult = 1,
 353        .div = 2,
 354        .hw.init = &(struct clk_init_data){
 355                .name = "qdss_tsctr_div2_clk_src",
 356                .parent_hws = (const struct clk_hw *[]){
 357                                &qdss_tsctr_clk_src.clkr.hw },
 358                .num_parents = 1,
 359                .flags = CLK_SET_RATE_PARENT,
 360                .ops = &clk_fixed_factor_ops,
 361        },
 362};
 363
 364static const struct freq_tbl ftbl_nss_ppe_clk_src[] = {
 365        F(24000000, P_XO, 1, 0, 0),
 366        F(300000000, P_BIAS_PLL, 1, 0, 0),
 367        { }
 368};
 369
 370static const struct clk_parent_data gcc_xo_bias_gpll0_gpll4_nss_ubi32[] = {
 371        { .fw_name = "xo" },
 372        { .fw_name = "bias_pll_cc_clk" },
 373        { .hw = &gpll0.clkr.hw },
 374        { .hw = &gpll4.clkr.hw },
 375        { .hw = &nss_crypto_pll.clkr.hw },
 376        { .hw = &ubi32_pll.clkr.hw },
 377};
 378
 379static const struct parent_map gcc_xo_bias_gpll0_gpll4_nss_ubi32_map[] = {
 380        { P_XO, 0 },
 381        { P_BIAS_PLL, 1 },
 382        { P_GPLL0, 2 },
 383        { P_GPLL4, 3 },
 384        { P_NSS_CRYPTO_PLL, 4 },
 385        { P_UBI32_PLL, 5 },
 386};
 387
 388static struct clk_rcg2 nss_ppe_clk_src = {
 389        .cmd_rcgr = 0x68080,
 390        .freq_tbl = ftbl_nss_ppe_clk_src,
 391        .hid_width = 5,
 392        .parent_map = gcc_xo_bias_gpll0_gpll4_nss_ubi32_map,
 393        .clkr.hw.init = &(struct clk_init_data){
 394                .name = "nss_ppe_clk_src",
 395                .parent_data = gcc_xo_bias_gpll0_gpll4_nss_ubi32,
 396                .num_parents = 6,
 397                .ops = &clk_rcg2_ops,
 398        },
 399};
 400
 401static struct clk_branch gcc_xo_clk_src = {
 402        .halt_reg = 0x30018,
 403        .clkr = {
 404                .enable_reg = 0x30018,
 405                .enable_mask = BIT(1),
 406                .hw.init = &(struct clk_init_data){
 407                        .name = "gcc_xo_clk_src",
 408                        .parent_data = &(const struct clk_parent_data){
 409                                .fw_name = "xo",
 410                        },
 411                        .num_parents = 1,
 412                        .flags = CLK_SET_RATE_PARENT,
 413                        .ops = &clk_branch2_ops,
 414                },
 415        },
 416};
 417
 418static const struct freq_tbl ftbl_nss_ce_clk_src[] = {
 419        F(24000000, P_XO, 1, 0, 0),
 420        F(200000000, P_GPLL0, 4, 0, 0),
 421        { }
 422};
 423
 424static const struct clk_parent_data gcc_xo_gpll0[] = {
 425        { .fw_name = "xo" },
 426        { .hw = &gpll0.clkr.hw },
 427};
 428
 429static const struct parent_map gcc_xo_gpll0_map[] = {
 430        { P_XO, 0 },
 431        { P_GPLL0, 1 },
 432};
 433
 434static struct clk_rcg2 nss_ce_clk_src = {
 435        .cmd_rcgr = 0x68098,
 436        .freq_tbl = ftbl_nss_ce_clk_src,
 437        .hid_width = 5,
 438        .parent_map = gcc_xo_gpll0_map,
 439        .clkr.hw.init = &(struct clk_init_data){
 440                .name = "nss_ce_clk_src",
 441                .parent_data = gcc_xo_gpll0,
 442                .num_parents = 2,
 443                .ops = &clk_rcg2_ops,
 444        },
 445};
 446
 447static struct clk_branch gcc_sleep_clk_src = {
 448        .halt_reg = 0x30000,
 449        .clkr = {
 450                .enable_reg = 0x30000,
 451                .enable_mask = BIT(1),
 452                .hw.init = &(struct clk_init_data){
 453                        .name = "gcc_sleep_clk_src",
 454                        .parent_data = &(const struct clk_parent_data){
 455                                .fw_name = "sleep_clk",
 456                        },
 457                        .num_parents = 1,
 458                        .ops = &clk_branch2_ops,
 459                },
 460        },
 461};
 462
 463static const struct freq_tbl ftbl_snoc_nssnoc_bfdcd_clk_src[] = {
 464        F(24000000, P_XO, 1, 0, 0),
 465        F(50000000, P_GPLL0_DIV2, 8, 0, 0),
 466        F(100000000, P_GPLL0, 8, 0, 0),
 467        F(133333333, P_GPLL0, 6, 0, 0),
 468        F(160000000, P_GPLL0, 5, 0, 0),
 469        F(200000000, P_GPLL0, 4, 0, 0),
 470        F(266666667, P_GPLL0, 3, 0, 0),
 471        { }
 472};
 473
 474static const struct clk_parent_data
 475                        gcc_xo_gpll0_gpll6_gpll0_out_main_div2[] = {
 476        { .fw_name = "xo" },
 477        { .hw = &gpll0.clkr.hw },
 478        { .hw = &gpll6.clkr.hw },
 479        { .hw = &gpll0_out_main_div2.hw },
 480};
 481
 482static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map[] = {
 483        { P_XO, 0 },
 484        { P_GPLL0, 1 },
 485        { P_GPLL6, 2 },
 486        { P_GPLL0_DIV2, 3 },
 487};
 488
 489static struct clk_rcg2 snoc_nssnoc_bfdcd_clk_src = {
 490        .cmd_rcgr = 0x76054,
 491        .freq_tbl = ftbl_snoc_nssnoc_bfdcd_clk_src,
 492        .hid_width = 5,
 493        .parent_map = gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map,
 494        .clkr.hw.init = &(struct clk_init_data){
 495                .name = "snoc_nssnoc_bfdcd_clk_src",
 496                .parent_data = gcc_xo_gpll0_gpll6_gpll0_out_main_div2,
 497                .num_parents = 4,
 498                .ops = &clk_rcg2_ops,
 499        },
 500};
 501
 502static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
 503        F(24000000, P_XO, 1, 0, 0),
 504        F(25000000, P_GPLL0_DIV2, 16, 0, 0),
 505        F(50000000, P_GPLL0, 16, 0, 0),
 506        F(100000000, P_GPLL0, 8, 0, 0),
 507        { }
 508};
 509
 510static struct clk_rcg2 apss_ahb_clk_src = {
 511        .cmd_rcgr = 0x46000,
 512        .freq_tbl = ftbl_apss_ahb_clk_src,
 513        .hid_width = 5,
 514        .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
 515        .clkr.hw.init = &(struct clk_init_data){
 516                .name = "apss_ahb_clk_src",
 517                .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
 518                .num_parents = 3,
 519                .ops = &clk_rcg2_ops,
 520        },
 521};
 522
 523static const struct freq_tbl ftbl_nss_port5_rx_clk_src[] = {
 524        F(24000000, P_XO, 1, 0, 0),
 525        F(25000000, P_UNIPHY1_RX, 12.5, 0, 0),
 526        F(25000000, P_UNIPHY0_RX, 5, 0, 0),
 527        F(78125000, P_UNIPHY1_RX, 4, 0, 0),
 528        F(125000000, P_UNIPHY1_RX, 2.5, 0, 0),
 529        F(125000000, P_UNIPHY0_RX, 1, 0, 0),
 530        F(156250000, P_UNIPHY1_RX, 2, 0, 0),
 531        F(312500000, P_UNIPHY1_RX, 1, 0, 0),
 532        { }
 533};
 534
 535static const struct clk_parent_data
 536gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias[] = {
 537        { .fw_name = "xo" },
 538        { .fw_name = "uniphy0_gcc_rx_clk" },
 539        { .fw_name = "uniphy0_gcc_tx_clk" },
 540        { .fw_name = "uniphy1_gcc_rx_clk" },
 541        { .fw_name = "uniphy1_gcc_tx_clk" },
 542        { .hw = &ubi32_pll.clkr.hw },
 543        { .fw_name = "bias_pll_cc_clk" },
 544};
 545
 546static const struct parent_map
 547gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map[] = {
 548        { P_XO, 0 },
 549        { P_UNIPHY0_RX, 1 },
 550        { P_UNIPHY0_TX, 2 },
 551        { P_UNIPHY1_RX, 3 },
 552        { P_UNIPHY1_TX, 4 },
 553        { P_UBI32_PLL, 5 },
 554        { P_BIAS_PLL, 6 },
 555};
 556
 557static struct clk_rcg2 nss_port5_rx_clk_src = {
 558        .cmd_rcgr = 0x68060,
 559        .freq_tbl = ftbl_nss_port5_rx_clk_src,
 560        .hid_width = 5,
 561        .parent_map = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map,
 562        .clkr.hw.init = &(struct clk_init_data){
 563                .name = "nss_port5_rx_clk_src",
 564                .parent_data = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias,
 565                .num_parents = 7,
 566                .ops = &clk_rcg2_ops,
 567        },
 568};
 569
 570static const struct freq_tbl ftbl_nss_port5_tx_clk_src[] = {
 571        F(24000000, P_XO, 1, 0, 0),
 572        F(25000000, P_UNIPHY1_TX, 12.5, 0, 0),
 573        F(25000000, P_UNIPHY0_TX, 5, 0, 0),
 574        F(78125000, P_UNIPHY1_TX, 4, 0, 0),
 575        F(125000000, P_UNIPHY1_TX, 2.5, 0, 0),
 576        F(125000000, P_UNIPHY0_TX, 1, 0, 0),
 577        F(156250000, P_UNIPHY1_TX, 2, 0, 0),
 578        F(312500000, P_UNIPHY1_TX, 1, 0, 0),
 579        { }
 580};
 581
 582static const struct clk_parent_data
 583gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias[] = {
 584        { .fw_name = "xo" },
 585        { .fw_name = "uniphy0_gcc_tx_clk" },
 586        { .fw_name = "uniphy0_gcc_rx_clk" },
 587        { .fw_name = "uniphy1_gcc_tx_clk" },
 588        { .fw_name = "uniphy1_gcc_rx_clk" },
 589        { .hw = &ubi32_pll.clkr.hw },
 590        { .fw_name = "bias_pll_cc_clk" },
 591};
 592
 593static const struct parent_map
 594gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map[] = {
 595        { P_XO, 0 },
 596        { P_UNIPHY0_TX, 1 },
 597        { P_UNIPHY0_RX, 2 },
 598        { P_UNIPHY1_TX, 3 },
 599        { P_UNIPHY1_RX, 4 },
 600        { P_UBI32_PLL, 5 },
 601        { P_BIAS_PLL, 6 },
 602};
 603
 604static struct clk_rcg2 nss_port5_tx_clk_src = {
 605        .cmd_rcgr = 0x68068,
 606        .freq_tbl = ftbl_nss_port5_tx_clk_src,
 607        .hid_width = 5,
 608        .parent_map = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map,
 609        .clkr.hw.init = &(struct clk_init_data){
 610                .name = "nss_port5_tx_clk_src",
 611                .parent_data = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias,
 612                .num_parents = 7,
 613                .ops = &clk_rcg2_ops,
 614        },
 615};
 616
 617static const struct freq_tbl ftbl_pcie_axi_clk_src[] = {
 618        F(24000000, P_XO, 1, 0, 0),
 619        F(200000000, P_GPLL0, 4, 0, 0),
 620        F(240000000, P_GPLL4, 5, 0, 0),
 621        { }
 622};
 623
 624static const struct freq_tbl ftbl_pcie_rchng_clk_src[] = {
 625        F(24000000, P_XO, 1, 0, 0),
 626        F(100000000, P_GPLL0, 8, 0, 0),
 627        { }
 628};
 629
 630static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = {
 631        { .fw_name = "xo" },
 632        { .hw = &gpll0.clkr.hw },
 633        { .hw = &gpll4.clkr.hw },
 634};
 635
 636static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
 637        { P_XO, 0 },
 638        { P_GPLL0, 1 },
 639        { P_GPLL4, 2 },
 640};
 641
 642static struct clk_rcg2 pcie0_axi_clk_src = {
 643        .cmd_rcgr = 0x75054,
 644        .freq_tbl = ftbl_pcie_axi_clk_src,
 645        .hid_width = 5,
 646        .parent_map = gcc_xo_gpll0_gpll4_map,
 647        .clkr.hw.init = &(struct clk_init_data){
 648                .name = "pcie0_axi_clk_src",
 649                .parent_data = gcc_xo_gpll0_gpll4,
 650                .num_parents = 3,
 651                .ops = &clk_rcg2_ops,
 652        },
 653};
 654
 655static const struct freq_tbl ftbl_usb0_master_clk_src[] = {
 656        F(80000000, P_GPLL0_DIV2, 5, 0, 0),
 657        F(100000000, P_GPLL0, 8, 0, 0),
 658        F(133330000, P_GPLL0, 6, 0, 0),
 659        F(200000000, P_GPLL0, 4, 0, 0),
 660        { }
 661};
 662
 663static const struct clk_parent_data gcc_xo_gpll0_out_main_div2_gpll0[] = {
 664        { .fw_name = "xo" },
 665        { .hw = &gpll0_out_main_div2.hw },
 666        { .hw = &gpll0.clkr.hw },
 667};
 668
 669static const struct parent_map gcc_xo_gpll0_out_main_div2_gpll0_map[] = {
 670        { P_XO, 0 },
 671        { P_GPLL0_DIV2, 2 },
 672        { P_GPLL0, 1 },
 673};
 674
 675static struct clk_rcg2 usb0_master_clk_src = {
 676        .cmd_rcgr = 0x3e00c,
 677        .freq_tbl = ftbl_usb0_master_clk_src,
 678        .mnd_width = 8,
 679        .hid_width = 5,
 680        .parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
 681        .clkr.hw.init = &(struct clk_init_data){
 682                .name = "usb0_master_clk_src",
 683                .parent_data = gcc_xo_gpll0_out_main_div2_gpll0,
 684                .num_parents = 3,
 685                .ops = &clk_rcg2_ops,
 686        },
 687};
 688
 689static struct clk_regmap_div apss_ahb_postdiv_clk_src = {
 690        .reg = 0x46018,
 691        .shift = 4,
 692        .width = 4,
 693        .clkr = {
 694                .hw.init = &(struct clk_init_data){
 695                        .name = "apss_ahb_postdiv_clk_src",
 696                        .parent_hws = (const struct clk_hw *[]){
 697                                        &apss_ahb_clk_src.clkr.hw },
 698                        .num_parents = 1,
 699                        .ops = &clk_regmap_div_ops,
 700                },
 701        },
 702};
 703
 704static struct clk_fixed_factor gcc_xo_div4_clk_src = {
 705        .mult = 1,
 706        .div = 4,
 707        .hw.init = &(struct clk_init_data){
 708                .name = "gcc_xo_div4_clk_src",
 709                .parent_hws = (const struct clk_hw *[]){
 710                                &gcc_xo_clk_src.clkr.hw },
 711                .num_parents = 1,
 712                .ops = &clk_fixed_factor_ops,
 713                .flags = CLK_SET_RATE_PARENT,
 714        },
 715};
 716
 717static const struct freq_tbl ftbl_nss_port1_rx_clk_src[] = {
 718        F(24000000, P_XO, 1, 0, 0),
 719        F(25000000, P_UNIPHY0_RX, 5, 0, 0),
 720        F(125000000, P_UNIPHY0_RX, 1, 0, 0),
 721        { }
 722};
 723
 724static const struct clk_parent_data gcc_xo_uniphy0_rx_tx_ubi32_bias[] = {
 725        { .fw_name = "xo" },
 726        { .fw_name = "uniphy0_gcc_rx_clk" },
 727        { .fw_name = "uniphy0_gcc_tx_clk" },
 728        { .hw = &ubi32_pll.clkr.hw },
 729        { .fw_name = "bias_pll_cc_clk" },
 730};
 731
 732static const struct parent_map gcc_xo_uniphy0_rx_tx_ubi32_bias_map[] = {
 733        { P_XO, 0 },
 734        { P_UNIPHY0_RX, 1 },
 735        { P_UNIPHY0_TX, 2 },
 736        { P_UBI32_PLL, 5 },
 737        { P_BIAS_PLL, 6 },
 738};
 739
 740static struct clk_rcg2 nss_port1_rx_clk_src = {
 741        .cmd_rcgr = 0x68020,
 742        .freq_tbl = ftbl_nss_port1_rx_clk_src,
 743        .hid_width = 5,
 744        .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
 745        .clkr.hw.init = &(struct clk_init_data){
 746                .name = "nss_port1_rx_clk_src",
 747                .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
 748                .num_parents = 5,
 749                .ops = &clk_rcg2_ops,
 750        },
 751};
 752
 753static const struct freq_tbl ftbl_nss_port1_tx_clk_src[] = {
 754        F(24000000, P_XO, 1, 0, 0),
 755        F(25000000, P_UNIPHY0_TX, 5, 0, 0),
 756        F(125000000, P_UNIPHY0_TX, 1, 0, 0),
 757        { }
 758};
 759
 760static const struct clk_parent_data gcc_xo_uniphy0_tx_rx_ubi32_bias[] = {
 761        { .fw_name = "xo" },
 762        { .fw_name = "uniphy0_gcc_tx_clk" },
 763        { .fw_name = "uniphy0_gcc_rx_clk" },
 764        { .hw = &ubi32_pll.clkr.hw },
 765        { .fw_name = "bias_pll_cc_clk" },
 766};
 767
 768static const struct parent_map gcc_xo_uniphy0_tx_rx_ubi32_bias_map[] = {
 769        { P_XO, 0 },
 770        { P_UNIPHY0_TX, 1 },
 771        { P_UNIPHY0_RX, 2 },
 772        { P_UBI32_PLL, 5 },
 773        { P_BIAS_PLL, 6 },
 774};
 775
 776static struct clk_rcg2 nss_port1_tx_clk_src = {
 777        .cmd_rcgr = 0x68028,
 778        .freq_tbl = ftbl_nss_port1_tx_clk_src,
 779        .hid_width = 5,
 780        .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
 781        .clkr.hw.init = &(struct clk_init_data){
 782                .name = "nss_port1_tx_clk_src",
 783                .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
 784                .num_parents = 5,
 785                .ops = &clk_rcg2_ops,
 786        },
 787};
 788
 789static struct clk_rcg2 nss_port2_rx_clk_src = {
 790        .cmd_rcgr = 0x68030,
 791        .freq_tbl = ftbl_nss_port1_rx_clk_src,
 792        .hid_width = 5,
 793        .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
 794        .clkr.hw.init = &(struct clk_init_data){
 795                .name = "nss_port2_rx_clk_src",
 796                .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
 797                .num_parents = 5,
 798                .ops = &clk_rcg2_ops,
 799        },
 800};
 801
 802static struct clk_rcg2 nss_port2_tx_clk_src = {
 803        .cmd_rcgr = 0x68038,
 804        .freq_tbl = ftbl_nss_port1_tx_clk_src,
 805        .hid_width = 5,
 806        .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
 807        .clkr.hw.init = &(struct clk_init_data){
 808                .name = "nss_port2_tx_clk_src",
 809                .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
 810                .num_parents = 5,
 811                .ops = &clk_rcg2_ops,
 812        },
 813};
 814
 815static struct clk_rcg2 nss_port3_rx_clk_src = {
 816        .cmd_rcgr = 0x68040,
 817        .freq_tbl = ftbl_nss_port1_rx_clk_src,
 818        .hid_width = 5,
 819        .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
 820        .clkr.hw.init = &(struct clk_init_data){
 821                .name = "nss_port3_rx_clk_src",
 822                .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
 823                .num_parents = 5,
 824                .ops = &clk_rcg2_ops,
 825        },
 826};
 827
 828static struct clk_rcg2 nss_port3_tx_clk_src = {
 829        .cmd_rcgr = 0x68048,
 830        .freq_tbl = ftbl_nss_port1_tx_clk_src,
 831        .hid_width = 5,
 832        .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
 833        .clkr.hw.init = &(struct clk_init_data){
 834                .name = "nss_port3_tx_clk_src",
 835                .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
 836                .num_parents = 5,
 837                .ops = &clk_rcg2_ops,
 838        },
 839};
 840
 841static struct clk_rcg2 nss_port4_rx_clk_src = {
 842        .cmd_rcgr = 0x68050,
 843        .freq_tbl = ftbl_nss_port1_rx_clk_src,
 844        .hid_width = 5,
 845        .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
 846        .clkr.hw.init = &(struct clk_init_data){
 847                .name = "nss_port4_rx_clk_src",
 848                .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
 849                .num_parents = 5,
 850                .ops = &clk_rcg2_ops,
 851        },
 852};
 853
 854static struct clk_rcg2 nss_port4_tx_clk_src = {
 855        .cmd_rcgr = 0x68058,
 856        .freq_tbl = ftbl_nss_port1_tx_clk_src,
 857        .hid_width = 5,
 858        .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
 859        .clkr.hw.init = &(struct clk_init_data){
 860                .name = "nss_port4_tx_clk_src",
 861                .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
 862                .num_parents = 5,
 863                .ops = &clk_rcg2_ops,
 864        },
 865};
 866
 867static struct clk_regmap_div nss_port5_rx_div_clk_src = {
 868        .reg = 0x68440,
 869        .shift = 0,
 870        .width = 4,
 871        .clkr = {
 872                .hw.init = &(struct clk_init_data){
 873                        .name = "nss_port5_rx_div_clk_src",
 874                        .parent_hws = (const struct clk_hw *[]){
 875                                        &nss_port5_rx_clk_src.clkr.hw },
 876                        .num_parents = 1,
 877                        .ops = &clk_regmap_div_ops,
 878                        .flags = CLK_SET_RATE_PARENT,
 879                },
 880        },
 881};
 882
 883static struct clk_regmap_div nss_port5_tx_div_clk_src = {
 884        .reg = 0x68444,
 885        .shift = 0,
 886        .width = 4,
 887        .clkr = {
 888                .hw.init = &(struct clk_init_data){
 889                        .name = "nss_port5_tx_div_clk_src",
 890                        .parent_hws = (const struct clk_hw *[]){
 891                                        &nss_port5_tx_clk_src.clkr.hw },
 892                        .num_parents = 1,
 893                        .ops = &clk_regmap_div_ops,
 894                        .flags = CLK_SET_RATE_PARENT,
 895                },
 896        },
 897};
 898
 899static const struct freq_tbl ftbl_apss_axi_clk_src[] = {
 900        F(24000000, P_XO, 1, 0, 0),
 901        F(100000000, P_GPLL0_DIV2, 4, 0, 0),
 902        F(200000000, P_GPLL0, 4, 0, 0),
 903        F(308570000, P_GPLL6, 3.5, 0, 0),
 904        F(400000000, P_GPLL0, 2, 0, 0),
 905        F(533000000, P_GPLL0, 1.5, 0, 0),
 906        { }
 907};
 908
 909static const struct clk_parent_data gcc_xo_gpll0_gpll6_ubi32_gpll0_div2[] = {
 910        { .fw_name = "xo" },
 911        { .hw = &gpll0.clkr.hw },
 912        { .hw = &gpll6.clkr.hw },
 913        { .hw = &ubi32_pll.clkr.hw },
 914        { .hw = &gpll0_out_main_div2.hw },
 915};
 916
 917static const struct parent_map
 918gcc_xo_gpll0_gpll6_ubi32_gpll0_div2_map[] = {
 919        { P_XO, 0 },
 920        { P_GPLL0, 1 },
 921        { P_GPLL6, 2 },
 922        { P_UBI32_PLL, 3 },
 923        { P_GPLL0_DIV2, 6 },
 924};
 925
 926static struct clk_rcg2 apss_axi_clk_src = {
 927        .cmd_rcgr = 0x38048,
 928        .freq_tbl = ftbl_apss_axi_clk_src,
 929        .hid_width = 5,
 930        .parent_map = gcc_xo_gpll0_gpll6_ubi32_gpll0_div2_map,
 931        .clkr.hw.init = &(struct clk_init_data){
 932                .name = "apss_axi_clk_src",
 933                .parent_data = gcc_xo_gpll0_gpll6_ubi32_gpll0_div2,
 934                .num_parents = 5,
 935                .ops = &clk_rcg2_ops,
 936        },
 937};
 938
 939static const struct freq_tbl ftbl_nss_crypto_clk_src[] = {
 940        F(24000000, P_XO, 1, 0, 0),
 941        F(300000000, P_NSS_CRYPTO_PLL, 2, 0, 0),
 942        { }
 943};
 944
 945static const struct clk_parent_data gcc_xo_nss_crypto_pll_gpll0[] = {
 946        { .fw_name = "xo" },
 947        { .hw = &nss_crypto_pll.clkr.hw },
 948        { .hw = &gpll0.clkr.hw },
 949};
 950
 951static const struct parent_map gcc_xo_nss_crypto_pll_gpll0_map[] = {
 952        { P_XO, 0 },
 953        { P_NSS_CRYPTO_PLL, 1 },
 954        { P_GPLL0, 2 },
 955};
 956
 957static struct clk_rcg2 nss_crypto_clk_src = {
 958        .cmd_rcgr = 0x68144,
 959        .freq_tbl = ftbl_nss_crypto_clk_src,
 960        .mnd_width = 16,
 961        .hid_width = 5,
 962        .parent_map = gcc_xo_nss_crypto_pll_gpll0_map,
 963        .clkr.hw.init = &(struct clk_init_data){
 964                .name = "nss_crypto_clk_src",
 965                .parent_data = gcc_xo_nss_crypto_pll_gpll0,
 966                .num_parents = 3,
 967                .ops = &clk_rcg2_ops,
 968        },
 969};
 970
 971static struct clk_regmap_div nss_port1_rx_div_clk_src = {
 972        .reg = 0x68400,
 973        .shift = 0,
 974        .width = 4,
 975        .clkr = {
 976                .hw.init = &(struct clk_init_data){
 977                        .name = "nss_port1_rx_div_clk_src",
 978                        .parent_hws = (const struct clk_hw *[]){
 979                                &nss_port1_rx_clk_src.clkr.hw },
 980                        .num_parents = 1,
 981                        .ops = &clk_regmap_div_ops,
 982                        .flags = CLK_SET_RATE_PARENT,
 983                },
 984        },
 985};
 986
 987static struct clk_regmap_div nss_port1_tx_div_clk_src = {
 988        .reg = 0x68404,
 989        .shift = 0,
 990        .width = 4,
 991        .clkr = {
 992                .hw.init = &(struct clk_init_data){
 993                        .name = "nss_port1_tx_div_clk_src",
 994                        .parent_hws = (const struct clk_hw *[]){
 995                                        &nss_port1_tx_clk_src.clkr.hw },
 996                        .num_parents = 1,
 997                        .ops = &clk_regmap_div_ops,
 998                        .flags = CLK_SET_RATE_PARENT,
 999                },
1000        },
1001};
1002
1003static 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
1019static 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
1035static 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
1051static 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
1067static 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
1083static 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
1099static 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
1110static 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
1120static 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
1129static 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
1143static 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
1149static 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
1162static 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
1169static 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
1182static 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
1194static 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
1208static 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
1221static 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
1235static 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
1248static 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
1262static 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
1275static 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
1289static 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
1302static 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
1316static 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
1329static 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
1343static 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
1363static 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
1377static 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
1391static 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
1405static 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
1419static 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
1433static 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
1447static 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
1455static 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
1468static 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
1477static 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
1485static 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
1493static 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
1507static 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
1521static 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
1535static 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
1548static 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
1564static const struct freq_tbl ftbl_pcie_aux_clk_src[] = {
1565        F(24000000, P_XO, 1, 0, 0),
1566};
1567
1568static 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
1574static 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
1580static 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
1594static const struct clk_parent_data gcc_pcie20_phy0_pipe_clk_xo[] = {
1595        { .fw_name = "pcie20_phy0_pipe_clk" },
1596        { .fw_name = "xo" },
1597};
1598
1599static const struct parent_map gcc_pcie20_phy0_pipe_clk_xo_map[] = {
1600        { P_PCIE20_PHY0_PIPE, 0 },
1601        { P_XO, 2 },
1602};
1603
1604static 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
1620static 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
1632static 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
1640static 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
1647static 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
1661static const struct freq_tbl ftbl_usb_aux_clk_src[] = {
1662        F(24000000, P_XO, 1, 0, 0),
1663        { }
1664};
1665
1666static 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
1680static 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
1686static 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
1694static 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
1701static 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
1715static 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
1720static const struct parent_map gcc_usb3phy_0_cc_pipe_clk_xo_map[] = {
1721        { P_USB3PHY_0_PIPE, 0 },
1722        { P_XO, 2 },
1723};
1724
1725static 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
1741static 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
1748static 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
1755static 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
1762static 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
1776static 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
1784static 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
1797static 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
1804static 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
1811static 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
1818static 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
1831static 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
1845static 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
1861static 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
1878static 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
1889static 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
1902static 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
1909static 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
1917static 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
1924static 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
1937static 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
1954static 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
1971static 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
1987static 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
2003static 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
2019static 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
2035static 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
2051static 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
2067static 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
2083static 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
2099static 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
2115static 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
2131static 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
2147static 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
2163static 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
2179static 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
2195static 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
2211static 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
2227static 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
2243static 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
2260static 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
2277static 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
2294static 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
2307static 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
2323static 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
2339static 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
2355static 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
2371static 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
2387static 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
2403static 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
2419static 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
2435static 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
2451static 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
2467static 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
2483static 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
2499static 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
2515static 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
2531static 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
2547static 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
2563static 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
2569static 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
2575static 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
2588static 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
2596static 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
2604static 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
2617static 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
2623static 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
2636static 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
2642static 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
2655static 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
2661static 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
2674static 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
2680static 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
2693static 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
2709static 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
2725static 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
2741static 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
2757static 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
2773static 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
2789static 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
2805static 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
2821static 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
2837static 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
2853static 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
2869static 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
2885static 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
2901static 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
2917static 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
2933static 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
2949static 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
2965static 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
2981static 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
2997static 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
3013static 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
3029static 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
3045static 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
3061static 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
3077static 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
3093static 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
3109static 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
3125static 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
3141static 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
3157static 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
3172static 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
3188static 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
3204static 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
3220static 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
3236static 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
3252static 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
3268static 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
3284static 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
3300static 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
3316static 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
3332static 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
3349static 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
3366static 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
3383static 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
3400static 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
3416static 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
3432static 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
3448static 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
3464static 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
3480static 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
3497static 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
3514static 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
3530static 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
3546static 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
3562static 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
3578static 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
3594static 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
3610static 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
3626static 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
3642static 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
3658static 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
3674static 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
3690static 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
3706static 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
3722static 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
3738static 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
3754static 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
3770static 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
3786static 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
3802static 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
3818static 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
3834static 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
3850static 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
3866static 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
3882static 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
3898static 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
3911static 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
3927static 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
3943static 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
3959static 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
3975static 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
3991static 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
4008static 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
4024static 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
4040static 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
4056static 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
4072static 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
4088static 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
4104static 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
4120static 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
4136static 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
4152static 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
4165static 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
4180static 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
4189static 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
4412static 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
4562static const struct of_device_id gcc_ipq6018_match_table[] = {
4563        { .compatible = "qcom,gcc-ipq6018" },
4564        { }
4565};
4566MODULE_DEVICE_TABLE(of, gcc_ipq6018_match_table);
4567
4568static 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
4576static 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
4586static 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
4614static 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
4622static int __init gcc_ipq6018_init(void)
4623{
4624        return platform_driver_register(&gcc_ipq6018_driver);
4625}
4626core_initcall(gcc_ipq6018_init);
4627
4628static void __exit gcc_ipq6018_exit(void)
4629{
4630        platform_driver_unregister(&gcc_ipq6018_driver);
4631}
4632module_exit(gcc_ipq6018_exit);
4633
4634MODULE_DESCRIPTION("Qualcomm Technologies, Inc. GCC IPQ6018 Driver");
4635MODULE_LICENSE("GPL v2");
4636