root/drivers/clk/qcom/gcc-msm8660.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. gcc_msm8660_probe
  2. gcc_msm8660_init
  3. gcc_msm8660_exit

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * Copyright (c) 2013, The Linux Foundation. All rights reserved.
   4  */
   5 
   6 #include <linux/kernel.h>
   7 #include <linux/bitops.h>
   8 #include <linux/err.h>
   9 #include <linux/platform_device.h>
  10 #include <linux/module.h>
  11 #include <linux/of.h>
  12 #include <linux/of_device.h>
  13 #include <linux/clk-provider.h>
  14 #include <linux/regmap.h>
  15 #include <linux/reset-controller.h>
  16 
  17 #include <dt-bindings/clock/qcom,gcc-msm8660.h>
  18 #include <dt-bindings/reset/qcom,gcc-msm8660.h>
  19 
  20 #include "common.h"
  21 #include "clk-regmap.h"
  22 #include "clk-pll.h"
  23 #include "clk-rcg.h"
  24 #include "clk-branch.h"
  25 #include "reset.h"
  26 
  27 static struct clk_pll pll8 = {
  28         .l_reg = 0x3144,
  29         .m_reg = 0x3148,
  30         .n_reg = 0x314c,
  31         .config_reg = 0x3154,
  32         .mode_reg = 0x3140,
  33         .status_reg = 0x3158,
  34         .status_bit = 16,
  35         .clkr.hw.init = &(struct clk_init_data){
  36                 .name = "pll8",
  37                 .parent_names = (const char *[]){ "pxo" },
  38                 .num_parents = 1,
  39                 .ops = &clk_pll_ops,
  40         },
  41 };
  42 
  43 static struct clk_regmap pll8_vote = {
  44         .enable_reg = 0x34c0,
  45         .enable_mask = BIT(8),
  46         .hw.init = &(struct clk_init_data){
  47                 .name = "pll8_vote",
  48                 .parent_names = (const char *[]){ "pll8" },
  49                 .num_parents = 1,
  50                 .ops = &clk_pll_vote_ops,
  51         },
  52 };
  53 
  54 enum {
  55         P_PXO,
  56         P_PLL8,
  57         P_CXO,
  58 };
  59 
  60 static const struct parent_map gcc_pxo_pll8_map[] = {
  61         { P_PXO, 0 },
  62         { P_PLL8, 3 }
  63 };
  64 
  65 static const char * const gcc_pxo_pll8[] = {
  66         "pxo",
  67         "pll8_vote",
  68 };
  69 
  70 static const struct parent_map gcc_pxo_pll8_cxo_map[] = {
  71         { P_PXO, 0 },
  72         { P_PLL8, 3 },
  73         { P_CXO, 5 }
  74 };
  75 
  76 static const char * const gcc_pxo_pll8_cxo[] = {
  77         "pxo",
  78         "pll8_vote",
  79         "cxo",
  80 };
  81 
  82 static struct freq_tbl clk_tbl_gsbi_uart[] = {
  83         {  1843200, P_PLL8, 2,  6, 625 },
  84         {  3686400, P_PLL8, 2, 12, 625 },
  85         {  7372800, P_PLL8, 2, 24, 625 },
  86         { 14745600, P_PLL8, 2, 48, 625 },
  87         { 16000000, P_PLL8, 4,  1,   6 },
  88         { 24000000, P_PLL8, 4,  1,   4 },
  89         { 32000000, P_PLL8, 4,  1,   3 },
  90         { 40000000, P_PLL8, 1,  5,  48 },
  91         { 46400000, P_PLL8, 1, 29, 240 },
  92         { 48000000, P_PLL8, 4,  1,   2 },
  93         { 51200000, P_PLL8, 1,  2,  15 },
  94         { 56000000, P_PLL8, 1,  7,  48 },
  95         { 58982400, P_PLL8, 1, 96, 625 },
  96         { 64000000, P_PLL8, 2,  1,   3 },
  97         { }
  98 };
  99 
 100 static struct clk_rcg gsbi1_uart_src = {
 101         .ns_reg = 0x29d4,
 102         .md_reg = 0x29d0,
 103         .mn = {
 104                 .mnctr_en_bit = 8,
 105                 .mnctr_reset_bit = 7,
 106                 .mnctr_mode_shift = 5,
 107                 .n_val_shift = 16,
 108                 .m_val_shift = 16,
 109                 .width = 16,
 110         },
 111         .p = {
 112                 .pre_div_shift = 3,
 113                 .pre_div_width = 2,
 114         },
 115         .s = {
 116                 .src_sel_shift = 0,
 117                 .parent_map = gcc_pxo_pll8_map,
 118         },
 119         .freq_tbl = clk_tbl_gsbi_uart,
 120         .clkr = {
 121                 .enable_reg = 0x29d4,
 122                 .enable_mask = BIT(11),
 123                 .hw.init = &(struct clk_init_data){
 124                         .name = "gsbi1_uart_src",
 125                         .parent_names = gcc_pxo_pll8,
 126                         .num_parents = 2,
 127                         .ops = &clk_rcg_ops,
 128                         .flags = CLK_SET_PARENT_GATE,
 129                 },
 130         },
 131 };
 132 
 133 static struct clk_branch gsbi1_uart_clk = {
 134         .halt_reg = 0x2fcc,
 135         .halt_bit = 10,
 136         .clkr = {
 137                 .enable_reg = 0x29d4,
 138                 .enable_mask = BIT(9),
 139                 .hw.init = &(struct clk_init_data){
 140                         .name = "gsbi1_uart_clk",
 141                         .parent_names = (const char *[]){
 142                                 "gsbi1_uart_src",
 143                         },
 144                         .num_parents = 1,
 145                         .ops = &clk_branch_ops,
 146                         .flags = CLK_SET_RATE_PARENT,
 147                 },
 148         },
 149 };
 150 
 151 static struct clk_rcg gsbi2_uart_src = {
 152         .ns_reg = 0x29f4,
 153         .md_reg = 0x29f0,
 154         .mn = {
 155                 .mnctr_en_bit = 8,
 156                 .mnctr_reset_bit = 7,
 157                 .mnctr_mode_shift = 5,
 158                 .n_val_shift = 16,
 159                 .m_val_shift = 16,
 160                 .width = 16,
 161         },
 162         .p = {
 163                 .pre_div_shift = 3,
 164                 .pre_div_width = 2,
 165         },
 166         .s = {
 167                 .src_sel_shift = 0,
 168                 .parent_map = gcc_pxo_pll8_map,
 169         },
 170         .freq_tbl = clk_tbl_gsbi_uart,
 171         .clkr = {
 172                 .enable_reg = 0x29f4,
 173                 .enable_mask = BIT(11),
 174                 .hw.init = &(struct clk_init_data){
 175                         .name = "gsbi2_uart_src",
 176                         .parent_names = gcc_pxo_pll8,
 177                         .num_parents = 2,
 178                         .ops = &clk_rcg_ops,
 179                         .flags = CLK_SET_PARENT_GATE,
 180                 },
 181         },
 182 };
 183 
 184 static struct clk_branch gsbi2_uart_clk = {
 185         .halt_reg = 0x2fcc,
 186         .halt_bit = 6,
 187         .clkr = {
 188                 .enable_reg = 0x29f4,
 189                 .enable_mask = BIT(9),
 190                 .hw.init = &(struct clk_init_data){
 191                         .name = "gsbi2_uart_clk",
 192                         .parent_names = (const char *[]){
 193                                 "gsbi2_uart_src",
 194                         },
 195                         .num_parents = 1,
 196                         .ops = &clk_branch_ops,
 197                         .flags = CLK_SET_RATE_PARENT,
 198                 },
 199         },
 200 };
 201 
 202 static struct clk_rcg gsbi3_uart_src = {
 203         .ns_reg = 0x2a14,
 204         .md_reg = 0x2a10,
 205         .mn = {
 206                 .mnctr_en_bit = 8,
 207                 .mnctr_reset_bit = 7,
 208                 .mnctr_mode_shift = 5,
 209                 .n_val_shift = 16,
 210                 .m_val_shift = 16,
 211                 .width = 16,
 212         },
 213         .p = {
 214                 .pre_div_shift = 3,
 215                 .pre_div_width = 2,
 216         },
 217         .s = {
 218                 .src_sel_shift = 0,
 219                 .parent_map = gcc_pxo_pll8_map,
 220         },
 221         .freq_tbl = clk_tbl_gsbi_uart,
 222         .clkr = {
 223                 .enable_reg = 0x2a14,
 224                 .enable_mask = BIT(11),
 225                 .hw.init = &(struct clk_init_data){
 226                         .name = "gsbi3_uart_src",
 227                         .parent_names = gcc_pxo_pll8,
 228                         .num_parents = 2,
 229                         .ops = &clk_rcg_ops,
 230                         .flags = CLK_SET_PARENT_GATE,
 231                 },
 232         },
 233 };
 234 
 235 static struct clk_branch gsbi3_uart_clk = {
 236         .halt_reg = 0x2fcc,
 237         .halt_bit = 2,
 238         .clkr = {
 239                 .enable_reg = 0x2a14,
 240                 .enable_mask = BIT(9),
 241                 .hw.init = &(struct clk_init_data){
 242                         .name = "gsbi3_uart_clk",
 243                         .parent_names = (const char *[]){
 244                                 "gsbi3_uart_src",
 245                         },
 246                         .num_parents = 1,
 247                         .ops = &clk_branch_ops,
 248                         .flags = CLK_SET_RATE_PARENT,
 249                 },
 250         },
 251 };
 252 
 253 static struct clk_rcg gsbi4_uart_src = {
 254         .ns_reg = 0x2a34,
 255         .md_reg = 0x2a30,
 256         .mn = {
 257                 .mnctr_en_bit = 8,
 258                 .mnctr_reset_bit = 7,
 259                 .mnctr_mode_shift = 5,
 260                 .n_val_shift = 16,
 261                 .m_val_shift = 16,
 262                 .width = 16,
 263         },
 264         .p = {
 265                 .pre_div_shift = 3,
 266                 .pre_div_width = 2,
 267         },
 268         .s = {
 269                 .src_sel_shift = 0,
 270                 .parent_map = gcc_pxo_pll8_map,
 271         },
 272         .freq_tbl = clk_tbl_gsbi_uart,
 273         .clkr = {
 274                 .enable_reg = 0x2a34,
 275                 .enable_mask = BIT(11),
 276                 .hw.init = &(struct clk_init_data){
 277                         .name = "gsbi4_uart_src",
 278                         .parent_names = gcc_pxo_pll8,
 279                         .num_parents = 2,
 280                         .ops = &clk_rcg_ops,
 281                         .flags = CLK_SET_PARENT_GATE,
 282                 },
 283         },
 284 };
 285 
 286 static struct clk_branch gsbi4_uart_clk = {
 287         .halt_reg = 0x2fd0,
 288         .halt_bit = 26,
 289         .clkr = {
 290                 .enable_reg = 0x2a34,
 291                 .enable_mask = BIT(9),
 292                 .hw.init = &(struct clk_init_data){
 293                         .name = "gsbi4_uart_clk",
 294                         .parent_names = (const char *[]){
 295                                 "gsbi4_uart_src",
 296                         },
 297                         .num_parents = 1,
 298                         .ops = &clk_branch_ops,
 299                         .flags = CLK_SET_RATE_PARENT,
 300                 },
 301         },
 302 };
 303 
 304 static struct clk_rcg gsbi5_uart_src = {
 305         .ns_reg = 0x2a54,
 306         .md_reg = 0x2a50,
 307         .mn = {
 308                 .mnctr_en_bit = 8,
 309                 .mnctr_reset_bit = 7,
 310                 .mnctr_mode_shift = 5,
 311                 .n_val_shift = 16,
 312                 .m_val_shift = 16,
 313                 .width = 16,
 314         },
 315         .p = {
 316                 .pre_div_shift = 3,
 317                 .pre_div_width = 2,
 318         },
 319         .s = {
 320                 .src_sel_shift = 0,
 321                 .parent_map = gcc_pxo_pll8_map,
 322         },
 323         .freq_tbl = clk_tbl_gsbi_uart,
 324         .clkr = {
 325                 .enable_reg = 0x2a54,
 326                 .enable_mask = BIT(11),
 327                 .hw.init = &(struct clk_init_data){
 328                         .name = "gsbi5_uart_src",
 329                         .parent_names = gcc_pxo_pll8,
 330                         .num_parents = 2,
 331                         .ops = &clk_rcg_ops,
 332                         .flags = CLK_SET_PARENT_GATE,
 333                 },
 334         },
 335 };
 336 
 337 static struct clk_branch gsbi5_uart_clk = {
 338         .halt_reg = 0x2fd0,
 339         .halt_bit = 22,
 340         .clkr = {
 341                 .enable_reg = 0x2a54,
 342                 .enable_mask = BIT(9),
 343                 .hw.init = &(struct clk_init_data){
 344                         .name = "gsbi5_uart_clk",
 345                         .parent_names = (const char *[]){
 346                                 "gsbi5_uart_src",
 347                         },
 348                         .num_parents = 1,
 349                         .ops = &clk_branch_ops,
 350                         .flags = CLK_SET_RATE_PARENT,
 351                 },
 352         },
 353 };
 354 
 355 static struct clk_rcg gsbi6_uart_src = {
 356         .ns_reg = 0x2a74,
 357         .md_reg = 0x2a70,
 358         .mn = {
 359                 .mnctr_en_bit = 8,
 360                 .mnctr_reset_bit = 7,
 361                 .mnctr_mode_shift = 5,
 362                 .n_val_shift = 16,
 363                 .m_val_shift = 16,
 364                 .width = 16,
 365         },
 366         .p = {
 367                 .pre_div_shift = 3,
 368                 .pre_div_width = 2,
 369         },
 370         .s = {
 371                 .src_sel_shift = 0,
 372                 .parent_map = gcc_pxo_pll8_map,
 373         },
 374         .freq_tbl = clk_tbl_gsbi_uart,
 375         .clkr = {
 376                 .enable_reg = 0x2a74,
 377                 .enable_mask = BIT(11),
 378                 .hw.init = &(struct clk_init_data){
 379                         .name = "gsbi6_uart_src",
 380                         .parent_names = gcc_pxo_pll8,
 381                         .num_parents = 2,
 382                         .ops = &clk_rcg_ops,
 383                         .flags = CLK_SET_PARENT_GATE,
 384                 },
 385         },
 386 };
 387 
 388 static struct clk_branch gsbi6_uart_clk = {
 389         .halt_reg = 0x2fd0,
 390         .halt_bit = 18,
 391         .clkr = {
 392                 .enable_reg = 0x2a74,
 393                 .enable_mask = BIT(9),
 394                 .hw.init = &(struct clk_init_data){
 395                         .name = "gsbi6_uart_clk",
 396                         .parent_names = (const char *[]){
 397                                 "gsbi6_uart_src",
 398                         },
 399                         .num_parents = 1,
 400                         .ops = &clk_branch_ops,
 401                         .flags = CLK_SET_RATE_PARENT,
 402                 },
 403         },
 404 };
 405 
 406 static struct clk_rcg gsbi7_uart_src = {
 407         .ns_reg = 0x2a94,
 408         .md_reg = 0x2a90,
 409         .mn = {
 410                 .mnctr_en_bit = 8,
 411                 .mnctr_reset_bit = 7,
 412                 .mnctr_mode_shift = 5,
 413                 .n_val_shift = 16,
 414                 .m_val_shift = 16,
 415                 .width = 16,
 416         },
 417         .p = {
 418                 .pre_div_shift = 3,
 419                 .pre_div_width = 2,
 420         },
 421         .s = {
 422                 .src_sel_shift = 0,
 423                 .parent_map = gcc_pxo_pll8_map,
 424         },
 425         .freq_tbl = clk_tbl_gsbi_uart,
 426         .clkr = {
 427                 .enable_reg = 0x2a94,
 428                 .enable_mask = BIT(11),
 429                 .hw.init = &(struct clk_init_data){
 430                         .name = "gsbi7_uart_src",
 431                         .parent_names = gcc_pxo_pll8,
 432                         .num_parents = 2,
 433                         .ops = &clk_rcg_ops,
 434                         .flags = CLK_SET_PARENT_GATE,
 435                 },
 436         },
 437 };
 438 
 439 static struct clk_branch gsbi7_uart_clk = {
 440         .halt_reg = 0x2fd0,
 441         .halt_bit = 14,
 442         .clkr = {
 443                 .enable_reg = 0x2a94,
 444                 .enable_mask = BIT(9),
 445                 .hw.init = &(struct clk_init_data){
 446                         .name = "gsbi7_uart_clk",
 447                         .parent_names = (const char *[]){
 448                                 "gsbi7_uart_src",
 449                         },
 450                         .num_parents = 1,
 451                         .ops = &clk_branch_ops,
 452                         .flags = CLK_SET_RATE_PARENT,
 453                 },
 454         },
 455 };
 456 
 457 static struct clk_rcg gsbi8_uart_src = {
 458         .ns_reg = 0x2ab4,
 459         .md_reg = 0x2ab0,
 460         .mn = {
 461                 .mnctr_en_bit = 8,
 462                 .mnctr_reset_bit = 7,
 463                 .mnctr_mode_shift = 5,
 464                 .n_val_shift = 16,
 465                 .m_val_shift = 16,
 466                 .width = 16,
 467         },
 468         .p = {
 469                 .pre_div_shift = 3,
 470                 .pre_div_width = 2,
 471         },
 472         .s = {
 473                 .src_sel_shift = 0,
 474                 .parent_map = gcc_pxo_pll8_map,
 475         },
 476         .freq_tbl = clk_tbl_gsbi_uart,
 477         .clkr = {
 478                 .enable_reg = 0x2ab4,
 479                 .enable_mask = BIT(11),
 480                 .hw.init = &(struct clk_init_data){
 481                         .name = "gsbi8_uart_src",
 482                         .parent_names = gcc_pxo_pll8,
 483                         .num_parents = 2,
 484                         .ops = &clk_rcg_ops,
 485                         .flags = CLK_SET_PARENT_GATE,
 486                 },
 487         },
 488 };
 489 
 490 static struct clk_branch gsbi8_uart_clk = {
 491         .halt_reg = 0x2fd0,
 492         .halt_bit = 10,
 493         .clkr = {
 494                 .enable_reg = 0x2ab4,
 495                 .enable_mask = BIT(9),
 496                 .hw.init = &(struct clk_init_data){
 497                         .name = "gsbi8_uart_clk",
 498                         .parent_names = (const char *[]){ "gsbi8_uart_src" },
 499                         .num_parents = 1,
 500                         .ops = &clk_branch_ops,
 501                         .flags = CLK_SET_RATE_PARENT,
 502                 },
 503         },
 504 };
 505 
 506 static struct clk_rcg gsbi9_uart_src = {
 507         .ns_reg = 0x2ad4,
 508         .md_reg = 0x2ad0,
 509         .mn = {
 510                 .mnctr_en_bit = 8,
 511                 .mnctr_reset_bit = 7,
 512                 .mnctr_mode_shift = 5,
 513                 .n_val_shift = 16,
 514                 .m_val_shift = 16,
 515                 .width = 16,
 516         },
 517         .p = {
 518                 .pre_div_shift = 3,
 519                 .pre_div_width = 2,
 520         },
 521         .s = {
 522                 .src_sel_shift = 0,
 523                 .parent_map = gcc_pxo_pll8_map,
 524         },
 525         .freq_tbl = clk_tbl_gsbi_uart,
 526         .clkr = {
 527                 .enable_reg = 0x2ad4,
 528                 .enable_mask = BIT(11),
 529                 .hw.init = &(struct clk_init_data){
 530                         .name = "gsbi9_uart_src",
 531                         .parent_names = gcc_pxo_pll8,
 532                         .num_parents = 2,
 533                         .ops = &clk_rcg_ops,
 534                         .flags = CLK_SET_PARENT_GATE,
 535                 },
 536         },
 537 };
 538 
 539 static struct clk_branch gsbi9_uart_clk = {
 540         .halt_reg = 0x2fd0,
 541         .halt_bit = 6,
 542         .clkr = {
 543                 .enable_reg = 0x2ad4,
 544                 .enable_mask = BIT(9),
 545                 .hw.init = &(struct clk_init_data){
 546                         .name = "gsbi9_uart_clk",
 547                         .parent_names = (const char *[]){ "gsbi9_uart_src" },
 548                         .num_parents = 1,
 549                         .ops = &clk_branch_ops,
 550                         .flags = CLK_SET_RATE_PARENT,
 551                 },
 552         },
 553 };
 554 
 555 static struct clk_rcg gsbi10_uart_src = {
 556         .ns_reg = 0x2af4,
 557         .md_reg = 0x2af0,
 558         .mn = {
 559                 .mnctr_en_bit = 8,
 560                 .mnctr_reset_bit = 7,
 561                 .mnctr_mode_shift = 5,
 562                 .n_val_shift = 16,
 563                 .m_val_shift = 16,
 564                 .width = 16,
 565         },
 566         .p = {
 567                 .pre_div_shift = 3,
 568                 .pre_div_width = 2,
 569         },
 570         .s = {
 571                 .src_sel_shift = 0,
 572                 .parent_map = gcc_pxo_pll8_map,
 573         },
 574         .freq_tbl = clk_tbl_gsbi_uart,
 575         .clkr = {
 576                 .enable_reg = 0x2af4,
 577                 .enable_mask = BIT(11),
 578                 .hw.init = &(struct clk_init_data){
 579                         .name = "gsbi10_uart_src",
 580                         .parent_names = gcc_pxo_pll8,
 581                         .num_parents = 2,
 582                         .ops = &clk_rcg_ops,
 583                         .flags = CLK_SET_PARENT_GATE,
 584                 },
 585         },
 586 };
 587 
 588 static struct clk_branch gsbi10_uart_clk = {
 589         .halt_reg = 0x2fd0,
 590         .halt_bit = 2,
 591         .clkr = {
 592                 .enable_reg = 0x2af4,
 593                 .enable_mask = BIT(9),
 594                 .hw.init = &(struct clk_init_data){
 595                         .name = "gsbi10_uart_clk",
 596                         .parent_names = (const char *[]){ "gsbi10_uart_src" },
 597                         .num_parents = 1,
 598                         .ops = &clk_branch_ops,
 599                         .flags = CLK_SET_RATE_PARENT,
 600                 },
 601         },
 602 };
 603 
 604 static struct clk_rcg gsbi11_uart_src = {
 605         .ns_reg = 0x2b14,
 606         .md_reg = 0x2b10,
 607         .mn = {
 608                 .mnctr_en_bit = 8,
 609                 .mnctr_reset_bit = 7,
 610                 .mnctr_mode_shift = 5,
 611                 .n_val_shift = 16,
 612                 .m_val_shift = 16,
 613                 .width = 16,
 614         },
 615         .p = {
 616                 .pre_div_shift = 3,
 617                 .pre_div_width = 2,
 618         },
 619         .s = {
 620                 .src_sel_shift = 0,
 621                 .parent_map = gcc_pxo_pll8_map,
 622         },
 623         .freq_tbl = clk_tbl_gsbi_uart,
 624         .clkr = {
 625                 .enable_reg = 0x2b14,
 626                 .enable_mask = BIT(11),
 627                 .hw.init = &(struct clk_init_data){
 628                         .name = "gsbi11_uart_src",
 629                         .parent_names = gcc_pxo_pll8,
 630                         .num_parents = 2,
 631                         .ops = &clk_rcg_ops,
 632                         .flags = CLK_SET_PARENT_GATE,
 633                 },
 634         },
 635 };
 636 
 637 static struct clk_branch gsbi11_uart_clk = {
 638         .halt_reg = 0x2fd4,
 639         .halt_bit = 17,
 640         .clkr = {
 641                 .enable_reg = 0x2b14,
 642                 .enable_mask = BIT(9),
 643                 .hw.init = &(struct clk_init_data){
 644                         .name = "gsbi11_uart_clk",
 645                         .parent_names = (const char *[]){ "gsbi11_uart_src" },
 646                         .num_parents = 1,
 647                         .ops = &clk_branch_ops,
 648                         .flags = CLK_SET_RATE_PARENT,
 649                 },
 650         },
 651 };
 652 
 653 static struct clk_rcg gsbi12_uart_src = {
 654         .ns_reg = 0x2b34,
 655         .md_reg = 0x2b30,
 656         .mn = {
 657                 .mnctr_en_bit = 8,
 658                 .mnctr_reset_bit = 7,
 659                 .mnctr_mode_shift = 5,
 660                 .n_val_shift = 16,
 661                 .m_val_shift = 16,
 662                 .width = 16,
 663         },
 664         .p = {
 665                 .pre_div_shift = 3,
 666                 .pre_div_width = 2,
 667         },
 668         .s = {
 669                 .src_sel_shift = 0,
 670                 .parent_map = gcc_pxo_pll8_map,
 671         },
 672         .freq_tbl = clk_tbl_gsbi_uart,
 673         .clkr = {
 674                 .enable_reg = 0x2b34,
 675                 .enable_mask = BIT(11),
 676                 .hw.init = &(struct clk_init_data){
 677                         .name = "gsbi12_uart_src",
 678                         .parent_names = gcc_pxo_pll8,
 679                         .num_parents = 2,
 680                         .ops = &clk_rcg_ops,
 681                         .flags = CLK_SET_PARENT_GATE,
 682                 },
 683         },
 684 };
 685 
 686 static struct clk_branch gsbi12_uart_clk = {
 687         .halt_reg = 0x2fd4,
 688         .halt_bit = 13,
 689         .clkr = {
 690                 .enable_reg = 0x2b34,
 691                 .enable_mask = BIT(9),
 692                 .hw.init = &(struct clk_init_data){
 693                         .name = "gsbi12_uart_clk",
 694                         .parent_names = (const char *[]){ "gsbi12_uart_src" },
 695                         .num_parents = 1,
 696                         .ops = &clk_branch_ops,
 697                         .flags = CLK_SET_RATE_PARENT,
 698                 },
 699         },
 700 };
 701 
 702 static struct freq_tbl clk_tbl_gsbi_qup[] = {
 703         {  1100000, P_PXO,  1, 2, 49 },
 704         {  5400000, P_PXO,  1, 1,  5 },
 705         { 10800000, P_PXO,  1, 2,  5 },
 706         { 15060000, P_PLL8, 1, 2, 51 },
 707         { 24000000, P_PLL8, 4, 1,  4 },
 708         { 25600000, P_PLL8, 1, 1, 15 },
 709         { 27000000, P_PXO,  1, 0,  0 },
 710         { 48000000, P_PLL8, 4, 1,  2 },
 711         { 51200000, P_PLL8, 1, 2, 15 },
 712         { }
 713 };
 714 
 715 static struct clk_rcg gsbi1_qup_src = {
 716         .ns_reg = 0x29cc,
 717         .md_reg = 0x29c8,
 718         .mn = {
 719                 .mnctr_en_bit = 8,
 720                 .mnctr_reset_bit = 7,
 721                 .mnctr_mode_shift = 5,
 722                 .n_val_shift = 16,
 723                 .m_val_shift = 16,
 724                 .width = 8,
 725         },
 726         .p = {
 727                 .pre_div_shift = 3,
 728                 .pre_div_width = 2,
 729         },
 730         .s = {
 731                 .src_sel_shift = 0,
 732                 .parent_map = gcc_pxo_pll8_map,
 733         },
 734         .freq_tbl = clk_tbl_gsbi_qup,
 735         .clkr = {
 736                 .enable_reg = 0x29cc,
 737                 .enable_mask = BIT(11),
 738                 .hw.init = &(struct clk_init_data){
 739                         .name = "gsbi1_qup_src",
 740                         .parent_names = gcc_pxo_pll8,
 741                         .num_parents = 2,
 742                         .ops = &clk_rcg_ops,
 743                         .flags = CLK_SET_PARENT_GATE,
 744                 },
 745         },
 746 };
 747 
 748 static struct clk_branch gsbi1_qup_clk = {
 749         .halt_reg = 0x2fcc,
 750         .halt_bit = 9,
 751         .clkr = {
 752                 .enable_reg = 0x29cc,
 753                 .enable_mask = BIT(9),
 754                 .hw.init = &(struct clk_init_data){
 755                         .name = "gsbi1_qup_clk",
 756                         .parent_names = (const char *[]){ "gsbi1_qup_src" },
 757                         .num_parents = 1,
 758                         .ops = &clk_branch_ops,
 759                         .flags = CLK_SET_RATE_PARENT,
 760                 },
 761         },
 762 };
 763 
 764 static struct clk_rcg gsbi2_qup_src = {
 765         .ns_reg = 0x29ec,
 766         .md_reg = 0x29e8,
 767         .mn = {
 768                 .mnctr_en_bit = 8,
 769                 .mnctr_reset_bit = 7,
 770                 .mnctr_mode_shift = 5,
 771                 .n_val_shift = 16,
 772                 .m_val_shift = 16,
 773                 .width = 8,
 774         },
 775         .p = {
 776                 .pre_div_shift = 3,
 777                 .pre_div_width = 2,
 778         },
 779         .s = {
 780                 .src_sel_shift = 0,
 781                 .parent_map = gcc_pxo_pll8_map,
 782         },
 783         .freq_tbl = clk_tbl_gsbi_qup,
 784         .clkr = {
 785                 .enable_reg = 0x29ec,
 786                 .enable_mask = BIT(11),
 787                 .hw.init = &(struct clk_init_data){
 788                         .name = "gsbi2_qup_src",
 789                         .parent_names = gcc_pxo_pll8,
 790                         .num_parents = 2,
 791                         .ops = &clk_rcg_ops,
 792                         .flags = CLK_SET_PARENT_GATE,
 793                 },
 794         },
 795 };
 796 
 797 static struct clk_branch gsbi2_qup_clk = {
 798         .halt_reg = 0x2fcc,
 799         .halt_bit = 4,
 800         .clkr = {
 801                 .enable_reg = 0x29ec,
 802                 .enable_mask = BIT(9),
 803                 .hw.init = &(struct clk_init_data){
 804                         .name = "gsbi2_qup_clk",
 805                         .parent_names = (const char *[]){ "gsbi2_qup_src" },
 806                         .num_parents = 1,
 807                         .ops = &clk_branch_ops,
 808                         .flags = CLK_SET_RATE_PARENT,
 809                 },
 810         },
 811 };
 812 
 813 static struct clk_rcg gsbi3_qup_src = {
 814         .ns_reg = 0x2a0c,
 815         .md_reg = 0x2a08,
 816         .mn = {
 817                 .mnctr_en_bit = 8,
 818                 .mnctr_reset_bit = 7,
 819                 .mnctr_mode_shift = 5,
 820                 .n_val_shift = 16,
 821                 .m_val_shift = 16,
 822                 .width = 8,
 823         },
 824         .p = {
 825                 .pre_div_shift = 3,
 826                 .pre_div_width = 2,
 827         },
 828         .s = {
 829                 .src_sel_shift = 0,
 830                 .parent_map = gcc_pxo_pll8_map,
 831         },
 832         .freq_tbl = clk_tbl_gsbi_qup,
 833         .clkr = {
 834                 .enable_reg = 0x2a0c,
 835                 .enable_mask = BIT(11),
 836                 .hw.init = &(struct clk_init_data){
 837                         .name = "gsbi3_qup_src",
 838                         .parent_names = gcc_pxo_pll8,
 839                         .num_parents = 2,
 840                         .ops = &clk_rcg_ops,
 841                         .flags = CLK_SET_PARENT_GATE,
 842                 },
 843         },
 844 };
 845 
 846 static struct clk_branch gsbi3_qup_clk = {
 847         .halt_reg = 0x2fcc,
 848         .halt_bit = 0,
 849         .clkr = {
 850                 .enable_reg = 0x2a0c,
 851                 .enable_mask = BIT(9),
 852                 .hw.init = &(struct clk_init_data){
 853                         .name = "gsbi3_qup_clk",
 854                         .parent_names = (const char *[]){ "gsbi3_qup_src" },
 855                         .num_parents = 1,
 856                         .ops = &clk_branch_ops,
 857                         .flags = CLK_SET_RATE_PARENT,
 858                 },
 859         },
 860 };
 861 
 862 static struct clk_rcg gsbi4_qup_src = {
 863         .ns_reg = 0x2a2c,
 864         .md_reg = 0x2a28,
 865         .mn = {
 866                 .mnctr_en_bit = 8,
 867                 .mnctr_reset_bit = 7,
 868                 .mnctr_mode_shift = 5,
 869                 .n_val_shift = 16,
 870                 .m_val_shift = 16,
 871                 .width = 8,
 872         },
 873         .p = {
 874                 .pre_div_shift = 3,
 875                 .pre_div_width = 2,
 876         },
 877         .s = {
 878                 .src_sel_shift = 0,
 879                 .parent_map = gcc_pxo_pll8_map,
 880         },
 881         .freq_tbl = clk_tbl_gsbi_qup,
 882         .clkr = {
 883                 .enable_reg = 0x2a2c,
 884                 .enable_mask = BIT(11),
 885                 .hw.init = &(struct clk_init_data){
 886                         .name = "gsbi4_qup_src",
 887                         .parent_names = gcc_pxo_pll8,
 888                         .num_parents = 2,
 889                         .ops = &clk_rcg_ops,
 890                         .flags = CLK_SET_PARENT_GATE,
 891                 },
 892         },
 893 };
 894 
 895 static struct clk_branch gsbi4_qup_clk = {
 896         .halt_reg = 0x2fd0,
 897         .halt_bit = 24,
 898         .clkr = {
 899                 .enable_reg = 0x2a2c,
 900                 .enable_mask = BIT(9),
 901                 .hw.init = &(struct clk_init_data){
 902                         .name = "gsbi4_qup_clk",
 903                         .parent_names = (const char *[]){ "gsbi4_qup_src" },
 904                         .num_parents = 1,
 905                         .ops = &clk_branch_ops,
 906                         .flags = CLK_SET_RATE_PARENT,
 907                 },
 908         },
 909 };
 910 
 911 static struct clk_rcg gsbi5_qup_src = {
 912         .ns_reg = 0x2a4c,
 913         .md_reg = 0x2a48,
 914         .mn = {
 915                 .mnctr_en_bit = 8,
 916                 .mnctr_reset_bit = 7,
 917                 .mnctr_mode_shift = 5,
 918                 .n_val_shift = 16,
 919                 .m_val_shift = 16,
 920                 .width = 8,
 921         },
 922         .p = {
 923                 .pre_div_shift = 3,
 924                 .pre_div_width = 2,
 925         },
 926         .s = {
 927                 .src_sel_shift = 0,
 928                 .parent_map = gcc_pxo_pll8_map,
 929         },
 930         .freq_tbl = clk_tbl_gsbi_qup,
 931         .clkr = {
 932                 .enable_reg = 0x2a4c,
 933                 .enable_mask = BIT(11),
 934                 .hw.init = &(struct clk_init_data){
 935                         .name = "gsbi5_qup_src",
 936                         .parent_names = gcc_pxo_pll8,
 937                         .num_parents = 2,
 938                         .ops = &clk_rcg_ops,
 939                         .flags = CLK_SET_PARENT_GATE,
 940                 },
 941         },
 942 };
 943 
 944 static struct clk_branch gsbi5_qup_clk = {
 945         .halt_reg = 0x2fd0,
 946         .halt_bit = 20,
 947         .clkr = {
 948                 .enable_reg = 0x2a4c,
 949                 .enable_mask = BIT(9),
 950                 .hw.init = &(struct clk_init_data){
 951                         .name = "gsbi5_qup_clk",
 952                         .parent_names = (const char *[]){ "gsbi5_qup_src" },
 953                         .num_parents = 1,
 954                         .ops = &clk_branch_ops,
 955                         .flags = CLK_SET_RATE_PARENT,
 956                 },
 957         },
 958 };
 959 
 960 static struct clk_rcg gsbi6_qup_src = {
 961         .ns_reg = 0x2a6c,
 962         .md_reg = 0x2a68,
 963         .mn = {
 964                 .mnctr_en_bit = 8,
 965                 .mnctr_reset_bit = 7,
 966                 .mnctr_mode_shift = 5,
 967                 .n_val_shift = 16,
 968                 .m_val_shift = 16,
 969                 .width = 8,
 970         },
 971         .p = {
 972                 .pre_div_shift = 3,
 973                 .pre_div_width = 2,
 974         },
 975         .s = {
 976                 .src_sel_shift = 0,
 977                 .parent_map = gcc_pxo_pll8_map,
 978         },
 979         .freq_tbl = clk_tbl_gsbi_qup,
 980         .clkr = {
 981                 .enable_reg = 0x2a6c,
 982                 .enable_mask = BIT(11),
 983                 .hw.init = &(struct clk_init_data){
 984                         .name = "gsbi6_qup_src",
 985                         .parent_names = gcc_pxo_pll8,
 986                         .num_parents = 2,
 987                         .ops = &clk_rcg_ops,
 988                         .flags = CLK_SET_PARENT_GATE,
 989                 },
 990         },
 991 };
 992 
 993 static struct clk_branch gsbi6_qup_clk = {
 994         .halt_reg = 0x2fd0,
 995         .halt_bit = 16,
 996         .clkr = {
 997                 .enable_reg = 0x2a6c,
 998                 .enable_mask = BIT(9),
 999                 .hw.init = &(struct clk_init_data){
1000                         .name = "gsbi6_qup_clk",
1001                         .parent_names = (const char *[]){ "gsbi6_qup_src" },
1002                         .num_parents = 1,
1003                         .ops = &clk_branch_ops,
1004                         .flags = CLK_SET_RATE_PARENT,
1005                 },
1006         },
1007 };
1008 
1009 static struct clk_rcg gsbi7_qup_src = {
1010         .ns_reg = 0x2a8c,
1011         .md_reg = 0x2a88,
1012         .mn = {
1013                 .mnctr_en_bit = 8,
1014                 .mnctr_reset_bit = 7,
1015                 .mnctr_mode_shift = 5,
1016                 .n_val_shift = 16,
1017                 .m_val_shift = 16,
1018                 .width = 8,
1019         },
1020         .p = {
1021                 .pre_div_shift = 3,
1022                 .pre_div_width = 2,
1023         },
1024         .s = {
1025                 .src_sel_shift = 0,
1026                 .parent_map = gcc_pxo_pll8_map,
1027         },
1028         .freq_tbl = clk_tbl_gsbi_qup,
1029         .clkr = {
1030                 .enable_reg = 0x2a8c,
1031                 .enable_mask = BIT(11),
1032                 .hw.init = &(struct clk_init_data){
1033                         .name = "gsbi7_qup_src",
1034                         .parent_names = gcc_pxo_pll8,
1035                         .num_parents = 2,
1036                         .ops = &clk_rcg_ops,
1037                         .flags = CLK_SET_PARENT_GATE,
1038                 },
1039         },
1040 };
1041 
1042 static struct clk_branch gsbi7_qup_clk = {
1043         .halt_reg = 0x2fd0,
1044         .halt_bit = 12,
1045         .clkr = {
1046                 .enable_reg = 0x2a8c,
1047                 .enable_mask = BIT(9),
1048                 .hw.init = &(struct clk_init_data){
1049                         .name = "gsbi7_qup_clk",
1050                         .parent_names = (const char *[]){ "gsbi7_qup_src" },
1051                         .num_parents = 1,
1052                         .ops = &clk_branch_ops,
1053                         .flags = CLK_SET_RATE_PARENT,
1054                 },
1055         },
1056 };
1057 
1058 static struct clk_rcg gsbi8_qup_src = {
1059         .ns_reg = 0x2aac,
1060         .md_reg = 0x2aa8,
1061         .mn = {
1062                 .mnctr_en_bit = 8,
1063                 .mnctr_reset_bit = 7,
1064                 .mnctr_mode_shift = 5,
1065                 .n_val_shift = 16,
1066                 .m_val_shift = 16,
1067                 .width = 8,
1068         },
1069         .p = {
1070                 .pre_div_shift = 3,
1071                 .pre_div_width = 2,
1072         },
1073         .s = {
1074                 .src_sel_shift = 0,
1075                 .parent_map = gcc_pxo_pll8_map,
1076         },
1077         .freq_tbl = clk_tbl_gsbi_qup,
1078         .clkr = {
1079                 .enable_reg = 0x2aac,
1080                 .enable_mask = BIT(11),
1081                 .hw.init = &(struct clk_init_data){
1082                         .name = "gsbi8_qup_src",
1083                         .parent_names = gcc_pxo_pll8,
1084                         .num_parents = 2,
1085                         .ops = &clk_rcg_ops,
1086                         .flags = CLK_SET_PARENT_GATE,
1087                 },
1088         },
1089 };
1090 
1091 static struct clk_branch gsbi8_qup_clk = {
1092         .halt_reg = 0x2fd0,
1093         .halt_bit = 8,
1094         .clkr = {
1095                 .enable_reg = 0x2aac,
1096                 .enable_mask = BIT(9),
1097                 .hw.init = &(struct clk_init_data){
1098                         .name = "gsbi8_qup_clk",
1099                         .parent_names = (const char *[]){ "gsbi8_qup_src" },
1100                         .num_parents = 1,
1101                         .ops = &clk_branch_ops,
1102                         .flags = CLK_SET_RATE_PARENT,
1103                 },
1104         },
1105 };
1106 
1107 static struct clk_rcg gsbi9_qup_src = {
1108         .ns_reg = 0x2acc,
1109         .md_reg = 0x2ac8,
1110         .mn = {
1111                 .mnctr_en_bit = 8,
1112                 .mnctr_reset_bit = 7,
1113                 .mnctr_mode_shift = 5,
1114                 .n_val_shift = 16,
1115                 .m_val_shift = 16,
1116                 .width = 8,
1117         },
1118         .p = {
1119                 .pre_div_shift = 3,
1120                 .pre_div_width = 2,
1121         },
1122         .s = {
1123                 .src_sel_shift = 0,
1124                 .parent_map = gcc_pxo_pll8_map,
1125         },
1126         .freq_tbl = clk_tbl_gsbi_qup,
1127         .clkr = {
1128                 .enable_reg = 0x2acc,
1129                 .enable_mask = BIT(11),
1130                 .hw.init = &(struct clk_init_data){
1131                         .name = "gsbi9_qup_src",
1132                         .parent_names = gcc_pxo_pll8,
1133                         .num_parents = 2,
1134                         .ops = &clk_rcg_ops,
1135                         .flags = CLK_SET_PARENT_GATE,
1136                 },
1137         },
1138 };
1139 
1140 static struct clk_branch gsbi9_qup_clk = {
1141         .halt_reg = 0x2fd0,
1142         .halt_bit = 4,
1143         .clkr = {
1144                 .enable_reg = 0x2acc,
1145                 .enable_mask = BIT(9),
1146                 .hw.init = &(struct clk_init_data){
1147                         .name = "gsbi9_qup_clk",
1148                         .parent_names = (const char *[]){ "gsbi9_qup_src" },
1149                         .num_parents = 1,
1150                         .ops = &clk_branch_ops,
1151                         .flags = CLK_SET_RATE_PARENT,
1152                 },
1153         },
1154 };
1155 
1156 static struct clk_rcg gsbi10_qup_src = {
1157         .ns_reg = 0x2aec,
1158         .md_reg = 0x2ae8,
1159         .mn = {
1160                 .mnctr_en_bit = 8,
1161                 .mnctr_reset_bit = 7,
1162                 .mnctr_mode_shift = 5,
1163                 .n_val_shift = 16,
1164                 .m_val_shift = 16,
1165                 .width = 8,
1166         },
1167         .p = {
1168                 .pre_div_shift = 3,
1169                 .pre_div_width = 2,
1170         },
1171         .s = {
1172                 .src_sel_shift = 0,
1173                 .parent_map = gcc_pxo_pll8_map,
1174         },
1175         .freq_tbl = clk_tbl_gsbi_qup,
1176         .clkr = {
1177                 .enable_reg = 0x2aec,
1178                 .enable_mask = BIT(11),
1179                 .hw.init = &(struct clk_init_data){
1180                         .name = "gsbi10_qup_src",
1181                         .parent_names = gcc_pxo_pll8,
1182                         .num_parents = 2,
1183                         .ops = &clk_rcg_ops,
1184                         .flags = CLK_SET_PARENT_GATE,
1185                 },
1186         },
1187 };
1188 
1189 static struct clk_branch gsbi10_qup_clk = {
1190         .halt_reg = 0x2fd0,
1191         .halt_bit = 0,
1192         .clkr = {
1193                 .enable_reg = 0x2aec,
1194                 .enable_mask = BIT(9),
1195                 .hw.init = &(struct clk_init_data){
1196                         .name = "gsbi10_qup_clk",
1197                         .parent_names = (const char *[]){ "gsbi10_qup_src" },
1198                         .num_parents = 1,
1199                         .ops = &clk_branch_ops,
1200                         .flags = CLK_SET_RATE_PARENT,
1201                 },
1202         },
1203 };
1204 
1205 static struct clk_rcg gsbi11_qup_src = {
1206         .ns_reg = 0x2b0c,
1207         .md_reg = 0x2b08,
1208         .mn = {
1209                 .mnctr_en_bit = 8,
1210                 .mnctr_reset_bit = 7,
1211                 .mnctr_mode_shift = 5,
1212                 .n_val_shift = 16,
1213                 .m_val_shift = 16,
1214                 .width = 8,
1215         },
1216         .p = {
1217                 .pre_div_shift = 3,
1218                 .pre_div_width = 2,
1219         },
1220         .s = {
1221                 .src_sel_shift = 0,
1222                 .parent_map = gcc_pxo_pll8_map,
1223         },
1224         .freq_tbl = clk_tbl_gsbi_qup,
1225         .clkr = {
1226                 .enable_reg = 0x2b0c,
1227                 .enable_mask = BIT(11),
1228                 .hw.init = &(struct clk_init_data){
1229                         .name = "gsbi11_qup_src",
1230                         .parent_names = gcc_pxo_pll8,
1231                         .num_parents = 2,
1232                         .ops = &clk_rcg_ops,
1233                         .flags = CLK_SET_PARENT_GATE,
1234                 },
1235         },
1236 };
1237 
1238 static struct clk_branch gsbi11_qup_clk = {
1239         .halt_reg = 0x2fd4,
1240         .halt_bit = 15,
1241         .clkr = {
1242                 .enable_reg = 0x2b0c,
1243                 .enable_mask = BIT(9),
1244                 .hw.init = &(struct clk_init_data){
1245                         .name = "gsbi11_qup_clk",
1246                         .parent_names = (const char *[]){ "gsbi11_qup_src" },
1247                         .num_parents = 1,
1248                         .ops = &clk_branch_ops,
1249                         .flags = CLK_SET_RATE_PARENT,
1250                 },
1251         },
1252 };
1253 
1254 static struct clk_rcg gsbi12_qup_src = {
1255         .ns_reg = 0x2b2c,
1256         .md_reg = 0x2b28,
1257         .mn = {
1258                 .mnctr_en_bit = 8,
1259                 .mnctr_reset_bit = 7,
1260                 .mnctr_mode_shift = 5,
1261                 .n_val_shift = 16,
1262                 .m_val_shift = 16,
1263                 .width = 8,
1264         },
1265         .p = {
1266                 .pre_div_shift = 3,
1267                 .pre_div_width = 2,
1268         },
1269         .s = {
1270                 .src_sel_shift = 0,
1271                 .parent_map = gcc_pxo_pll8_map,
1272         },
1273         .freq_tbl = clk_tbl_gsbi_qup,
1274         .clkr = {
1275                 .enable_reg = 0x2b2c,
1276                 .enable_mask = BIT(11),
1277                 .hw.init = &(struct clk_init_data){
1278                         .name = "gsbi12_qup_src",
1279                         .parent_names = gcc_pxo_pll8,
1280                         .num_parents = 2,
1281                         .ops = &clk_rcg_ops,
1282                         .flags = CLK_SET_PARENT_GATE,
1283                 },
1284         },
1285 };
1286 
1287 static struct clk_branch gsbi12_qup_clk = {
1288         .halt_reg = 0x2fd4,
1289         .halt_bit = 11,
1290         .clkr = {
1291                 .enable_reg = 0x2b2c,
1292                 .enable_mask = BIT(9),
1293                 .hw.init = &(struct clk_init_data){
1294                         .name = "gsbi12_qup_clk",
1295                         .parent_names = (const char *[]){ "gsbi12_qup_src" },
1296                         .num_parents = 1,
1297                         .ops = &clk_branch_ops,
1298                         .flags = CLK_SET_RATE_PARENT,
1299                 },
1300         },
1301 };
1302 
1303 static const struct freq_tbl clk_tbl_gp[] = {
1304         { 9600000, P_CXO,  2, 0, 0 },
1305         { 13500000, P_PXO,  2, 0, 0 },
1306         { 19200000, P_CXO,  1, 0, 0 },
1307         { 27000000, P_PXO,  1, 0, 0 },
1308         { 64000000, P_PLL8, 2, 1, 3 },
1309         { 76800000, P_PLL8, 1, 1, 5 },
1310         { 96000000, P_PLL8, 4, 0, 0 },
1311         { 128000000, P_PLL8, 3, 0, 0 },
1312         { 192000000, P_PLL8, 2, 0, 0 },
1313         { }
1314 };
1315 
1316 static struct clk_rcg gp0_src = {
1317         .ns_reg = 0x2d24,
1318         .md_reg = 0x2d00,
1319         .mn = {
1320                 .mnctr_en_bit = 8,
1321                 .mnctr_reset_bit = 7,
1322                 .mnctr_mode_shift = 5,
1323                 .n_val_shift = 16,
1324                 .m_val_shift = 16,
1325                 .width = 8,
1326         },
1327         .p = {
1328                 .pre_div_shift = 3,
1329                 .pre_div_width = 2,
1330         },
1331         .s = {
1332                 .src_sel_shift = 0,
1333                 .parent_map = gcc_pxo_pll8_cxo_map,
1334         },
1335         .freq_tbl = clk_tbl_gp,
1336         .clkr = {
1337                 .enable_reg = 0x2d24,
1338                 .enable_mask = BIT(11),
1339                 .hw.init = &(struct clk_init_data){
1340                         .name = "gp0_src",
1341                         .parent_names = gcc_pxo_pll8_cxo,
1342                         .num_parents = 3,
1343                         .ops = &clk_rcg_ops,
1344                         .flags = CLK_SET_PARENT_GATE,
1345                 },
1346         }
1347 };
1348 
1349 static struct clk_branch gp0_clk = {
1350         .halt_reg = 0x2fd8,
1351         .halt_bit = 7,
1352         .clkr = {
1353                 .enable_reg = 0x2d24,
1354                 .enable_mask = BIT(9),
1355                 .hw.init = &(struct clk_init_data){
1356                         .name = "gp0_clk",
1357                         .parent_names = (const char *[]){ "gp0_src" },
1358                         .num_parents = 1,
1359                         .ops = &clk_branch_ops,
1360                         .flags = CLK_SET_RATE_PARENT,
1361                 },
1362         },
1363 };
1364 
1365 static struct clk_rcg gp1_src = {
1366         .ns_reg = 0x2d44,
1367         .md_reg = 0x2d40,
1368         .mn = {
1369                 .mnctr_en_bit = 8,
1370                 .mnctr_reset_bit = 7,
1371                 .mnctr_mode_shift = 5,
1372                 .n_val_shift = 16,
1373                 .m_val_shift = 16,
1374                 .width = 8,
1375         },
1376         .p = {
1377                 .pre_div_shift = 3,
1378                 .pre_div_width = 2,
1379         },
1380         .s = {
1381                 .src_sel_shift = 0,
1382                 .parent_map = gcc_pxo_pll8_cxo_map,
1383         },
1384         .freq_tbl = clk_tbl_gp,
1385         .clkr = {
1386                 .enable_reg = 0x2d44,
1387                 .enable_mask = BIT(11),
1388                 .hw.init = &(struct clk_init_data){
1389                         .name = "gp1_src",
1390                         .parent_names = gcc_pxo_pll8_cxo,
1391                         .num_parents = 3,
1392                         .ops = &clk_rcg_ops,
1393                         .flags = CLK_SET_RATE_GATE,
1394                 },
1395         }
1396 };
1397 
1398 static struct clk_branch gp1_clk = {
1399         .halt_reg = 0x2fd8,
1400         .halt_bit = 6,
1401         .clkr = {
1402                 .enable_reg = 0x2d44,
1403                 .enable_mask = BIT(9),
1404                 .hw.init = &(struct clk_init_data){
1405                         .name = "gp1_clk",
1406                         .parent_names = (const char *[]){ "gp1_src" },
1407                         .num_parents = 1,
1408                         .ops = &clk_branch_ops,
1409                         .flags = CLK_SET_RATE_PARENT,
1410                 },
1411         },
1412 };
1413 
1414 static struct clk_rcg gp2_src = {
1415         .ns_reg = 0x2d64,
1416         .md_reg = 0x2d60,
1417         .mn = {
1418                 .mnctr_en_bit = 8,
1419                 .mnctr_reset_bit = 7,
1420                 .mnctr_mode_shift = 5,
1421                 .n_val_shift = 16,
1422                 .m_val_shift = 16,
1423                 .width = 8,
1424         },
1425         .p = {
1426                 .pre_div_shift = 3,
1427                 .pre_div_width = 2,
1428         },
1429         .s = {
1430                 .src_sel_shift = 0,
1431                 .parent_map = gcc_pxo_pll8_cxo_map,
1432         },
1433         .freq_tbl = clk_tbl_gp,
1434         .clkr = {
1435                 .enable_reg = 0x2d64,
1436                 .enable_mask = BIT(11),
1437                 .hw.init = &(struct clk_init_data){
1438                         .name = "gp2_src",
1439                         .parent_names = gcc_pxo_pll8_cxo,
1440                         .num_parents = 3,
1441                         .ops = &clk_rcg_ops,
1442                         .flags = CLK_SET_RATE_GATE,
1443                 },
1444         }
1445 };
1446 
1447 static struct clk_branch gp2_clk = {
1448         .halt_reg = 0x2fd8,
1449         .halt_bit = 5,
1450         .clkr = {
1451                 .enable_reg = 0x2d64,
1452                 .enable_mask = BIT(9),
1453                 .hw.init = &(struct clk_init_data){
1454                         .name = "gp2_clk",
1455                         .parent_names = (const char *[]){ "gp2_src" },
1456                         .num_parents = 1,
1457                         .ops = &clk_branch_ops,
1458                         .flags = CLK_SET_RATE_PARENT,
1459                 },
1460         },
1461 };
1462 
1463 static struct clk_branch pmem_clk = {
1464         .hwcg_reg = 0x25a0,
1465         .hwcg_bit = 6,
1466         .halt_reg = 0x2fc8,
1467         .halt_bit = 20,
1468         .clkr = {
1469                 .enable_reg = 0x25a0,
1470                 .enable_mask = BIT(4),
1471                 .hw.init = &(struct clk_init_data){
1472                         .name = "pmem_clk",
1473                         .ops = &clk_branch_ops,
1474                 },
1475         },
1476 };
1477 
1478 static struct clk_rcg prng_src = {
1479         .ns_reg = 0x2e80,
1480         .p = {
1481                 .pre_div_shift = 3,
1482                 .pre_div_width = 4,
1483         },
1484         .s = {
1485                 .src_sel_shift = 0,
1486                 .parent_map = gcc_pxo_pll8_map,
1487         },
1488         .clkr.hw = {
1489                 .init = &(struct clk_init_data){
1490                         .name = "prng_src",
1491                         .parent_names = gcc_pxo_pll8,
1492                         .num_parents = 2,
1493                         .ops = &clk_rcg_ops,
1494                 },
1495         },
1496 };
1497 
1498 static struct clk_branch prng_clk = {
1499         .halt_reg = 0x2fd8,
1500         .halt_check = BRANCH_HALT_VOTED,
1501         .halt_bit = 10,
1502         .clkr = {
1503                 .enable_reg = 0x3080,
1504                 .enable_mask = BIT(10),
1505                 .hw.init = &(struct clk_init_data){
1506                         .name = "prng_clk",
1507                         .parent_names = (const char *[]){ "prng_src" },
1508                         .num_parents = 1,
1509                         .ops = &clk_branch_ops,
1510                 },
1511         },
1512 };
1513 
1514 static const struct freq_tbl clk_tbl_sdc[] = {
1515         {    144000, P_PXO,   3, 2, 125 },
1516         {    400000, P_PLL8,  4, 1, 240 },
1517         {  16000000, P_PLL8,  4, 1,   6 },
1518         {  17070000, P_PLL8,  1, 2,  45 },
1519         {  20210000, P_PLL8,  1, 1,  19 },
1520         {  24000000, P_PLL8,  4, 1,   4 },
1521         {  48000000, P_PLL8,  4, 1,   2 },
1522         { }
1523 };
1524 
1525 static struct clk_rcg sdc1_src = {
1526         .ns_reg = 0x282c,
1527         .md_reg = 0x2828,
1528         .mn = {
1529                 .mnctr_en_bit = 8,
1530                 .mnctr_reset_bit = 7,
1531                 .mnctr_mode_shift = 5,
1532                 .n_val_shift = 16,
1533                 .m_val_shift = 16,
1534                 .width = 8,
1535         },
1536         .p = {
1537                 .pre_div_shift = 3,
1538                 .pre_div_width = 2,
1539         },
1540         .s = {
1541                 .src_sel_shift = 0,
1542                 .parent_map = gcc_pxo_pll8_map,
1543         },
1544         .freq_tbl = clk_tbl_sdc,
1545         .clkr = {
1546                 .enable_reg = 0x282c,
1547                 .enable_mask = BIT(11),
1548                 .hw.init = &(struct clk_init_data){
1549                         .name = "sdc1_src",
1550                         .parent_names = gcc_pxo_pll8,
1551                         .num_parents = 2,
1552                         .ops = &clk_rcg_ops,
1553                 },
1554         }
1555 };
1556 
1557 static struct clk_branch sdc1_clk = {
1558         .halt_reg = 0x2fc8,
1559         .halt_bit = 6,
1560         .clkr = {
1561                 .enable_reg = 0x282c,
1562                 .enable_mask = BIT(9),
1563                 .hw.init = &(struct clk_init_data){
1564                         .name = "sdc1_clk",
1565                         .parent_names = (const char *[]){ "sdc1_src" },
1566                         .num_parents = 1,
1567                         .ops = &clk_branch_ops,
1568                         .flags = CLK_SET_RATE_PARENT,
1569                 },
1570         },
1571 };
1572 
1573 static struct clk_rcg sdc2_src = {
1574         .ns_reg = 0x284c,
1575         .md_reg = 0x2848,
1576         .mn = {
1577                 .mnctr_en_bit = 8,
1578                 .mnctr_reset_bit = 7,
1579                 .mnctr_mode_shift = 5,
1580                 .n_val_shift = 16,
1581                 .m_val_shift = 16,
1582                 .width = 8,
1583         },
1584         .p = {
1585                 .pre_div_shift = 3,
1586                 .pre_div_width = 2,
1587         },
1588         .s = {
1589                 .src_sel_shift = 0,
1590                 .parent_map = gcc_pxo_pll8_map,
1591         },
1592         .freq_tbl = clk_tbl_sdc,
1593         .clkr = {
1594                 .enable_reg = 0x284c,
1595                 .enable_mask = BIT(11),
1596                 .hw.init = &(struct clk_init_data){
1597                         .name = "sdc2_src",
1598                         .parent_names = gcc_pxo_pll8,
1599                         .num_parents = 2,
1600                         .ops = &clk_rcg_ops,
1601                 },
1602         }
1603 };
1604 
1605 static struct clk_branch sdc2_clk = {
1606         .halt_reg = 0x2fc8,
1607         .halt_bit = 5,
1608         .clkr = {
1609                 .enable_reg = 0x284c,
1610                 .enable_mask = BIT(9),
1611                 .hw.init = &(struct clk_init_data){
1612                         .name = "sdc2_clk",
1613                         .parent_names = (const char *[]){ "sdc2_src" },
1614                         .num_parents = 1,
1615                         .ops = &clk_branch_ops,
1616                         .flags = CLK_SET_RATE_PARENT,
1617                 },
1618         },
1619 };
1620 
1621 static struct clk_rcg sdc3_src = {
1622         .ns_reg = 0x286c,
1623         .md_reg = 0x2868,
1624         .mn = {
1625                 .mnctr_en_bit = 8,
1626                 .mnctr_reset_bit = 7,
1627                 .mnctr_mode_shift = 5,
1628                 .n_val_shift = 16,
1629                 .m_val_shift = 16,
1630                 .width = 8,
1631         },
1632         .p = {
1633                 .pre_div_shift = 3,
1634                 .pre_div_width = 2,
1635         },
1636         .s = {
1637                 .src_sel_shift = 0,
1638                 .parent_map = gcc_pxo_pll8_map,
1639         },
1640         .freq_tbl = clk_tbl_sdc,
1641         .clkr = {
1642                 .enable_reg = 0x286c,
1643                 .enable_mask = BIT(11),
1644                 .hw.init = &(struct clk_init_data){
1645                         .name = "sdc3_src",
1646                         .parent_names = gcc_pxo_pll8,
1647                         .num_parents = 2,
1648                         .ops = &clk_rcg_ops,
1649                 },
1650         }
1651 };
1652 
1653 static struct clk_branch sdc3_clk = {
1654         .halt_reg = 0x2fc8,
1655         .halt_bit = 4,
1656         .clkr = {
1657                 .enable_reg = 0x286c,
1658                 .enable_mask = BIT(9),
1659                 .hw.init = &(struct clk_init_data){
1660                         .name = "sdc3_clk",
1661                         .parent_names = (const char *[]){ "sdc3_src" },
1662                         .num_parents = 1,
1663                         .ops = &clk_branch_ops,
1664                         .flags = CLK_SET_RATE_PARENT,
1665                 },
1666         },
1667 };
1668 
1669 static struct clk_rcg sdc4_src = {
1670         .ns_reg = 0x288c,
1671         .md_reg = 0x2888,
1672         .mn = {
1673                 .mnctr_en_bit = 8,
1674                 .mnctr_reset_bit = 7,
1675                 .mnctr_mode_shift = 5,
1676                 .n_val_shift = 16,
1677                 .m_val_shift = 16,
1678                 .width = 8,
1679         },
1680         .p = {
1681                 .pre_div_shift = 3,
1682                 .pre_div_width = 2,
1683         },
1684         .s = {
1685                 .src_sel_shift = 0,
1686                 .parent_map = gcc_pxo_pll8_map,
1687         },
1688         .freq_tbl = clk_tbl_sdc,
1689         .clkr = {
1690                 .enable_reg = 0x288c,
1691                 .enable_mask = BIT(11),
1692                 .hw.init = &(struct clk_init_data){
1693                         .name = "sdc4_src",
1694                         .parent_names = gcc_pxo_pll8,
1695                         .num_parents = 2,
1696                         .ops = &clk_rcg_ops,
1697                 },
1698         }
1699 };
1700 
1701 static struct clk_branch sdc4_clk = {
1702         .halt_reg = 0x2fc8,
1703         .halt_bit = 3,
1704         .clkr = {
1705                 .enable_reg = 0x288c,
1706                 .enable_mask = BIT(9),
1707                 .hw.init = &(struct clk_init_data){
1708                         .name = "sdc4_clk",
1709                         .parent_names = (const char *[]){ "sdc4_src" },
1710                         .num_parents = 1,
1711                         .ops = &clk_branch_ops,
1712                         .flags = CLK_SET_RATE_PARENT,
1713                 },
1714         },
1715 };
1716 
1717 static struct clk_rcg sdc5_src = {
1718         .ns_reg = 0x28ac,
1719         .md_reg = 0x28a8,
1720         .mn = {
1721                 .mnctr_en_bit = 8,
1722                 .mnctr_reset_bit = 7,
1723                 .mnctr_mode_shift = 5,
1724                 .n_val_shift = 16,
1725                 .m_val_shift = 16,
1726                 .width = 8,
1727         },
1728         .p = {
1729                 .pre_div_shift = 3,
1730                 .pre_div_width = 2,
1731         },
1732         .s = {
1733                 .src_sel_shift = 0,
1734                 .parent_map = gcc_pxo_pll8_map,
1735         },
1736         .freq_tbl = clk_tbl_sdc,
1737         .clkr = {
1738                 .enable_reg = 0x28ac,
1739                 .enable_mask = BIT(11),
1740                 .hw.init = &(struct clk_init_data){
1741                         .name = "sdc5_src",
1742                         .parent_names = gcc_pxo_pll8,
1743                         .num_parents = 2,
1744                         .ops = &clk_rcg_ops,
1745                 },
1746         }
1747 };
1748 
1749 static struct clk_branch sdc5_clk = {
1750         .halt_reg = 0x2fc8,
1751         .halt_bit = 2,
1752         .clkr = {
1753                 .enable_reg = 0x28ac,
1754                 .enable_mask = BIT(9),
1755                 .hw.init = &(struct clk_init_data){
1756                         .name = "sdc5_clk",
1757                         .parent_names = (const char *[]){ "sdc5_src" },
1758                         .num_parents = 1,
1759                         .ops = &clk_branch_ops,
1760                         .flags = CLK_SET_RATE_PARENT,
1761                 },
1762         },
1763 };
1764 
1765 static const struct freq_tbl clk_tbl_tsif_ref[] = {
1766         { 105000, P_PXO,  1, 1, 256 },
1767         { }
1768 };
1769 
1770 static struct clk_rcg tsif_ref_src = {
1771         .ns_reg = 0x2710,
1772         .md_reg = 0x270c,
1773         .mn = {
1774                 .mnctr_en_bit = 8,
1775                 .mnctr_reset_bit = 7,
1776                 .mnctr_mode_shift = 5,
1777                 .n_val_shift = 16,
1778                 .m_val_shift = 16,
1779                 .width = 16,
1780         },
1781         .p = {
1782                 .pre_div_shift = 3,
1783                 .pre_div_width = 2,
1784         },
1785         .s = {
1786                 .src_sel_shift = 0,
1787                 .parent_map = gcc_pxo_pll8_map,
1788         },
1789         .freq_tbl = clk_tbl_tsif_ref,
1790         .clkr = {
1791                 .enable_reg = 0x2710,
1792                 .enable_mask = BIT(11),
1793                 .hw.init = &(struct clk_init_data){
1794                         .name = "tsif_ref_src",
1795                         .parent_names = gcc_pxo_pll8,
1796                         .num_parents = 2,
1797                         .ops = &clk_rcg_ops,
1798                         .flags = CLK_SET_RATE_GATE,
1799                 },
1800         }
1801 };
1802 
1803 static struct clk_branch tsif_ref_clk = {
1804         .halt_reg = 0x2fd4,
1805         .halt_bit = 5,
1806         .clkr = {
1807                 .enable_reg = 0x2710,
1808                 .enable_mask = BIT(9),
1809                 .hw.init = &(struct clk_init_data){
1810                         .name = "tsif_ref_clk",
1811                         .parent_names = (const char *[]){ "tsif_ref_src" },
1812                         .num_parents = 1,
1813                         .ops = &clk_branch_ops,
1814                         .flags = CLK_SET_RATE_PARENT,
1815                 },
1816         },
1817 };
1818 
1819 static const struct freq_tbl clk_tbl_usb[] = {
1820         { 60000000, P_PLL8, 1, 5, 32 },
1821         { }
1822 };
1823 
1824 static struct clk_rcg usb_hs1_xcvr_src = {
1825         .ns_reg = 0x290c,
1826         .md_reg = 0x2908,
1827         .mn = {
1828                 .mnctr_en_bit = 8,
1829                 .mnctr_reset_bit = 7,
1830                 .mnctr_mode_shift = 5,
1831                 .n_val_shift = 16,
1832                 .m_val_shift = 16,
1833                 .width = 8,
1834         },
1835         .p = {
1836                 .pre_div_shift = 3,
1837                 .pre_div_width = 2,
1838         },
1839         .s = {
1840                 .src_sel_shift = 0,
1841                 .parent_map = gcc_pxo_pll8_map,
1842         },
1843         .freq_tbl = clk_tbl_usb,
1844         .clkr = {
1845                 .enable_reg = 0x290c,
1846                 .enable_mask = BIT(11),
1847                 .hw.init = &(struct clk_init_data){
1848                         .name = "usb_hs1_xcvr_src",
1849                         .parent_names = gcc_pxo_pll8,
1850                         .num_parents = 2,
1851                         .ops = &clk_rcg_ops,
1852                         .flags = CLK_SET_RATE_GATE,
1853                 },
1854         }
1855 };
1856 
1857 static struct clk_branch usb_hs1_xcvr_clk = {
1858         .halt_reg = 0x2fc8,
1859         .halt_bit = 0,
1860         .clkr = {
1861                 .enable_reg = 0x290c,
1862                 .enable_mask = BIT(9),
1863                 .hw.init = &(struct clk_init_data){
1864                         .name = "usb_hs1_xcvr_clk",
1865                         .parent_names = (const char *[]){ "usb_hs1_xcvr_src" },
1866                         .num_parents = 1,
1867                         .ops = &clk_branch_ops,
1868                         .flags = CLK_SET_RATE_PARENT,
1869                 },
1870         },
1871 };
1872 
1873 static struct clk_rcg usb_fs1_xcvr_fs_src = {
1874         .ns_reg = 0x2968,
1875         .md_reg = 0x2964,
1876         .mn = {
1877                 .mnctr_en_bit = 8,
1878                 .mnctr_reset_bit = 7,
1879                 .mnctr_mode_shift = 5,
1880                 .n_val_shift = 16,
1881                 .m_val_shift = 16,
1882                 .width = 8,
1883         },
1884         .p = {
1885                 .pre_div_shift = 3,
1886                 .pre_div_width = 2,
1887         },
1888         .s = {
1889                 .src_sel_shift = 0,
1890                 .parent_map = gcc_pxo_pll8_map,
1891         },
1892         .freq_tbl = clk_tbl_usb,
1893         .clkr = {
1894                 .enable_reg = 0x2968,
1895                 .enable_mask = BIT(11),
1896                 .hw.init = &(struct clk_init_data){
1897                         .name = "usb_fs1_xcvr_fs_src",
1898                         .parent_names = gcc_pxo_pll8,
1899                         .num_parents = 2,
1900                         .ops = &clk_rcg_ops,
1901                         .flags = CLK_SET_RATE_GATE,
1902                 },
1903         }
1904 };
1905 
1906 static const char * const usb_fs1_xcvr_fs_src_p[] = { "usb_fs1_xcvr_fs_src" };
1907 
1908 static struct clk_branch usb_fs1_xcvr_fs_clk = {
1909         .halt_reg = 0x2fcc,
1910         .halt_bit = 15,
1911         .clkr = {
1912                 .enable_reg = 0x2968,
1913                 .enable_mask = BIT(9),
1914                 .hw.init = &(struct clk_init_data){
1915                         .name = "usb_fs1_xcvr_fs_clk",
1916                         .parent_names = usb_fs1_xcvr_fs_src_p,
1917                         .num_parents = 1,
1918                         .ops = &clk_branch_ops,
1919                         .flags = CLK_SET_RATE_PARENT,
1920                 },
1921         },
1922 };
1923 
1924 static struct clk_branch usb_fs1_system_clk = {
1925         .halt_reg = 0x2fcc,
1926         .halt_bit = 16,
1927         .clkr = {
1928                 .enable_reg = 0x296c,
1929                 .enable_mask = BIT(4),
1930                 .hw.init = &(struct clk_init_data){
1931                         .parent_names = usb_fs1_xcvr_fs_src_p,
1932                         .num_parents = 1,
1933                         .name = "usb_fs1_system_clk",
1934                         .ops = &clk_branch_ops,
1935                         .flags = CLK_SET_RATE_PARENT,
1936                 },
1937         },
1938 };
1939 
1940 static struct clk_rcg usb_fs2_xcvr_fs_src = {
1941         .ns_reg = 0x2988,
1942         .md_reg = 0x2984,
1943         .mn = {
1944                 .mnctr_en_bit = 8,
1945                 .mnctr_reset_bit = 7,
1946                 .mnctr_mode_shift = 5,
1947                 .n_val_shift = 16,
1948                 .m_val_shift = 16,
1949                 .width = 8,
1950         },
1951         .p = {
1952                 .pre_div_shift = 3,
1953                 .pre_div_width = 2,
1954         },
1955         .s = {
1956                 .src_sel_shift = 0,
1957                 .parent_map = gcc_pxo_pll8_map,
1958         },
1959         .freq_tbl = clk_tbl_usb,
1960         .clkr = {
1961                 .enable_reg = 0x2988,
1962                 .enable_mask = BIT(11),
1963                 .hw.init = &(struct clk_init_data){
1964                         .name = "usb_fs2_xcvr_fs_src",
1965                         .parent_names = gcc_pxo_pll8,
1966                         .num_parents = 2,
1967                         .ops = &clk_rcg_ops,
1968                         .flags = CLK_SET_RATE_GATE,
1969                 },
1970         }
1971 };
1972 
1973 static const char * const usb_fs2_xcvr_fs_src_p[] = { "usb_fs2_xcvr_fs_src" };
1974 
1975 static struct clk_branch usb_fs2_xcvr_fs_clk = {
1976         .halt_reg = 0x2fcc,
1977         .halt_bit = 12,
1978         .clkr = {
1979                 .enable_reg = 0x2988,
1980                 .enable_mask = BIT(9),
1981                 .hw.init = &(struct clk_init_data){
1982                         .name = "usb_fs2_xcvr_fs_clk",
1983                         .parent_names = usb_fs2_xcvr_fs_src_p,
1984                         .num_parents = 1,
1985                         .ops = &clk_branch_ops,
1986                         .flags = CLK_SET_RATE_PARENT,
1987                 },
1988         },
1989 };
1990 
1991 static struct clk_branch usb_fs2_system_clk = {
1992         .halt_reg = 0x2fcc,
1993         .halt_bit = 13,
1994         .clkr = {
1995                 .enable_reg = 0x298c,
1996                 .enable_mask = BIT(4),
1997                 .hw.init = &(struct clk_init_data){
1998                         .name = "usb_fs2_system_clk",
1999                         .parent_names = usb_fs2_xcvr_fs_src_p,
2000                         .num_parents = 1,
2001                         .ops = &clk_branch_ops,
2002                         .flags = CLK_SET_RATE_PARENT,
2003                 },
2004         },
2005 };
2006 
2007 static struct clk_branch gsbi1_h_clk = {
2008         .halt_reg = 0x2fcc,
2009         .halt_bit = 11,
2010         .clkr = {
2011                 .enable_reg = 0x29c0,
2012                 .enable_mask = BIT(4),
2013                 .hw.init = &(struct clk_init_data){
2014                         .name = "gsbi1_h_clk",
2015                         .ops = &clk_branch_ops,
2016                 },
2017         },
2018 };
2019 
2020 static struct clk_branch gsbi2_h_clk = {
2021         .halt_reg = 0x2fcc,
2022         .halt_bit = 7,
2023         .clkr = {
2024                 .enable_reg = 0x29e0,
2025                 .enable_mask = BIT(4),
2026                 .hw.init = &(struct clk_init_data){
2027                         .name = "gsbi2_h_clk",
2028                         .ops = &clk_branch_ops,
2029                 },
2030         },
2031 };
2032 
2033 static struct clk_branch gsbi3_h_clk = {
2034         .halt_reg = 0x2fcc,
2035         .halt_bit = 3,
2036         .clkr = {
2037                 .enable_reg = 0x2a00,
2038                 .enable_mask = BIT(4),
2039                 .hw.init = &(struct clk_init_data){
2040                         .name = "gsbi3_h_clk",
2041                         .ops = &clk_branch_ops,
2042                 },
2043         },
2044 };
2045 
2046 static struct clk_branch gsbi4_h_clk = {
2047         .halt_reg = 0x2fd0,
2048         .halt_bit = 27,
2049         .clkr = {
2050                 .enable_reg = 0x2a20,
2051                 .enable_mask = BIT(4),
2052                 .hw.init = &(struct clk_init_data){
2053                         .name = "gsbi4_h_clk",
2054                         .ops = &clk_branch_ops,
2055                 },
2056         },
2057 };
2058 
2059 static struct clk_branch gsbi5_h_clk = {
2060         .halt_reg = 0x2fd0,
2061         .halt_bit = 23,
2062         .clkr = {
2063                 .enable_reg = 0x2a40,
2064                 .enable_mask = BIT(4),
2065                 .hw.init = &(struct clk_init_data){
2066                         .name = "gsbi5_h_clk",
2067                         .ops = &clk_branch_ops,
2068                 },
2069         },
2070 };
2071 
2072 static struct clk_branch gsbi6_h_clk = {
2073         .halt_reg = 0x2fd0,
2074         .halt_bit = 19,
2075         .clkr = {
2076                 .enable_reg = 0x2a60,
2077                 .enable_mask = BIT(4),
2078                 .hw.init = &(struct clk_init_data){
2079                         .name = "gsbi6_h_clk",
2080                         .ops = &clk_branch_ops,
2081                 },
2082         },
2083 };
2084 
2085 static struct clk_branch gsbi7_h_clk = {
2086         .halt_reg = 0x2fd0,
2087         .halt_bit = 15,
2088         .clkr = {
2089                 .enable_reg = 0x2a80,
2090                 .enable_mask = BIT(4),
2091                 .hw.init = &(struct clk_init_data){
2092                         .name = "gsbi7_h_clk",
2093                         .ops = &clk_branch_ops,
2094                 },
2095         },
2096 };
2097 
2098 static struct clk_branch gsbi8_h_clk = {
2099         .halt_reg = 0x2fd0,
2100         .halt_bit = 11,
2101         .clkr = {
2102                 .enable_reg = 0x2aa0,
2103                 .enable_mask = BIT(4),
2104                 .hw.init = &(struct clk_init_data){
2105                         .name = "gsbi8_h_clk",
2106                         .ops = &clk_branch_ops,
2107                 },
2108         },
2109 };
2110 
2111 static struct clk_branch gsbi9_h_clk = {
2112         .halt_reg = 0x2fd0,
2113         .halt_bit = 7,
2114         .clkr = {
2115                 .enable_reg = 0x2ac0,
2116                 .enable_mask = BIT(4),
2117                 .hw.init = &(struct clk_init_data){
2118                         .name = "gsbi9_h_clk",
2119                         .ops = &clk_branch_ops,
2120                 },
2121         },
2122 };
2123 
2124 static struct clk_branch gsbi10_h_clk = {
2125         .halt_reg = 0x2fd0,
2126         .halt_bit = 3,
2127         .clkr = {
2128                 .enable_reg = 0x2ae0,
2129                 .enable_mask = BIT(4),
2130                 .hw.init = &(struct clk_init_data){
2131                         .name = "gsbi10_h_clk",
2132                         .ops = &clk_branch_ops,
2133                 },
2134         },
2135 };
2136 
2137 static struct clk_branch gsbi11_h_clk = {
2138         .halt_reg = 0x2fd4,
2139         .halt_bit = 18,
2140         .clkr = {
2141                 .enable_reg = 0x2b00,
2142                 .enable_mask = BIT(4),
2143                 .hw.init = &(struct clk_init_data){
2144                         .name = "gsbi11_h_clk",
2145                         .ops = &clk_branch_ops,
2146                 },
2147         },
2148 };
2149 
2150 static struct clk_branch gsbi12_h_clk = {
2151         .halt_reg = 0x2fd4,
2152         .halt_bit = 14,
2153         .clkr = {
2154                 .enable_reg = 0x2b20,
2155                 .enable_mask = BIT(4),
2156                 .hw.init = &(struct clk_init_data){
2157                         .name = "gsbi12_h_clk",
2158                         .ops = &clk_branch_ops,
2159                 },
2160         },
2161 };
2162 
2163 static struct clk_branch tsif_h_clk = {
2164         .halt_reg = 0x2fd4,
2165         .halt_bit = 7,
2166         .clkr = {
2167                 .enable_reg = 0x2700,
2168                 .enable_mask = BIT(4),
2169                 .hw.init = &(struct clk_init_data){
2170                         .name = "tsif_h_clk",
2171                         .ops = &clk_branch_ops,
2172                 },
2173         },
2174 };
2175 
2176 static struct clk_branch usb_fs1_h_clk = {
2177         .halt_reg = 0x2fcc,
2178         .halt_bit = 17,
2179         .clkr = {
2180                 .enable_reg = 0x2960,
2181                 .enable_mask = BIT(4),
2182                 .hw.init = &(struct clk_init_data){
2183                         .name = "usb_fs1_h_clk",
2184                         .ops = &clk_branch_ops,
2185                 },
2186         },
2187 };
2188 
2189 static struct clk_branch usb_fs2_h_clk = {
2190         .halt_reg = 0x2fcc,
2191         .halt_bit = 14,
2192         .clkr = {
2193                 .enable_reg = 0x2980,
2194                 .enable_mask = BIT(4),
2195                 .hw.init = &(struct clk_init_data){
2196                         .name = "usb_fs2_h_clk",
2197                         .ops = &clk_branch_ops,
2198                 },
2199         },
2200 };
2201 
2202 static struct clk_branch usb_hs1_h_clk = {
2203         .halt_reg = 0x2fc8,
2204         .halt_bit = 1,
2205         .clkr = {
2206                 .enable_reg = 0x2900,
2207                 .enable_mask = BIT(4),
2208                 .hw.init = &(struct clk_init_data){
2209                         .name = "usb_hs1_h_clk",
2210                         .ops = &clk_branch_ops,
2211                 },
2212         },
2213 };
2214 
2215 static struct clk_branch sdc1_h_clk = {
2216         .halt_reg = 0x2fc8,
2217         .halt_bit = 11,
2218         .clkr = {
2219                 .enable_reg = 0x2820,
2220                 .enable_mask = BIT(4),
2221                 .hw.init = &(struct clk_init_data){
2222                         .name = "sdc1_h_clk",
2223                         .ops = &clk_branch_ops,
2224                 },
2225         },
2226 };
2227 
2228 static struct clk_branch sdc2_h_clk = {
2229         .halt_reg = 0x2fc8,
2230         .halt_bit = 10,
2231         .clkr = {
2232                 .enable_reg = 0x2840,
2233                 .enable_mask = BIT(4),
2234                 .hw.init = &(struct clk_init_data){
2235                         .name = "sdc2_h_clk",
2236                         .ops = &clk_branch_ops,
2237                 },
2238         },
2239 };
2240 
2241 static struct clk_branch sdc3_h_clk = {
2242         .halt_reg = 0x2fc8,
2243         .halt_bit = 9,
2244         .clkr = {
2245                 .enable_reg = 0x2860,
2246                 .enable_mask = BIT(4),
2247                 .hw.init = &(struct clk_init_data){
2248                         .name = "sdc3_h_clk",
2249                         .ops = &clk_branch_ops,
2250                 },
2251         },
2252 };
2253 
2254 static struct clk_branch sdc4_h_clk = {
2255         .halt_reg = 0x2fc8,
2256         .halt_bit = 8,
2257         .clkr = {
2258                 .enable_reg = 0x2880,
2259                 .enable_mask = BIT(4),
2260                 .hw.init = &(struct clk_init_data){
2261                         .name = "sdc4_h_clk",
2262                         .ops = &clk_branch_ops,
2263                 },
2264         },
2265 };
2266 
2267 static struct clk_branch sdc5_h_clk = {
2268         .halt_reg = 0x2fc8,
2269         .halt_bit = 7,
2270         .clkr = {
2271                 .enable_reg = 0x28a0,
2272                 .enable_mask = BIT(4),
2273                 .hw.init = &(struct clk_init_data){
2274                         .name = "sdc5_h_clk",
2275                         .ops = &clk_branch_ops,
2276                 },
2277         },
2278 };
2279 
2280 static struct clk_branch ebi2_2x_clk = {
2281         .halt_reg = 0x2fcc,
2282         .halt_bit = 18,
2283         .clkr = {
2284                 .enable_reg = 0x2660,
2285                 .enable_mask = BIT(4),
2286                 .hw.init = &(struct clk_init_data){
2287                         .name = "ebi2_2x_clk",
2288                         .ops = &clk_branch_ops,
2289                 },
2290         },
2291 };
2292 
2293 static struct clk_branch ebi2_clk = {
2294         .halt_reg = 0x2fcc,
2295         .halt_bit = 19,
2296         .clkr = {
2297                 .enable_reg = 0x2664,
2298                 .enable_mask = BIT(4),
2299                 .hw.init = &(struct clk_init_data){
2300                         .name = "ebi2_clk",
2301                         .ops = &clk_branch_ops,
2302                 },
2303         },
2304 };
2305 
2306 static struct clk_branch adm0_clk = {
2307         .halt_reg = 0x2fdc,
2308         .halt_check = BRANCH_HALT_VOTED,
2309         .halt_bit = 14,
2310         .clkr = {
2311                 .enable_reg = 0x3080,
2312                 .enable_mask = BIT(2),
2313                 .hw.init = &(struct clk_init_data){
2314                         .name = "adm0_clk",
2315                         .ops = &clk_branch_ops,
2316                 },
2317         },
2318 };
2319 
2320 static struct clk_branch adm0_pbus_clk = {
2321         .halt_reg = 0x2fdc,
2322         .halt_check = BRANCH_HALT_VOTED,
2323         .halt_bit = 13,
2324         .clkr = {
2325                 .enable_reg = 0x3080,
2326                 .enable_mask = BIT(3),
2327                 .hw.init = &(struct clk_init_data){
2328                         .name = "adm0_pbus_clk",
2329                         .ops = &clk_branch_ops,
2330                 },
2331         },
2332 };
2333 
2334 static struct clk_branch adm1_clk = {
2335         .halt_reg = 0x2fdc,
2336         .halt_bit = 12,
2337         .halt_check = BRANCH_HALT_VOTED,
2338         .clkr = {
2339                 .enable_reg = 0x3080,
2340                 .enable_mask = BIT(4),
2341                 .hw.init = &(struct clk_init_data){
2342                         .name = "adm1_clk",
2343                         .ops = &clk_branch_ops,
2344                 },
2345         },
2346 };
2347 
2348 static struct clk_branch adm1_pbus_clk = {
2349         .halt_reg = 0x2fdc,
2350         .halt_bit = 11,
2351         .halt_check = BRANCH_HALT_VOTED,
2352         .clkr = {
2353                 .enable_reg = 0x3080,
2354                 .enable_mask = BIT(5),
2355                 .hw.init = &(struct clk_init_data){
2356                         .name = "adm1_pbus_clk",
2357                         .ops = &clk_branch_ops,
2358                 },
2359         },
2360 };
2361 
2362 static struct clk_branch modem_ahb1_h_clk = {
2363         .halt_reg = 0x2fdc,
2364         .halt_bit = 8,
2365         .halt_check = BRANCH_HALT_VOTED,
2366         .clkr = {
2367                 .enable_reg = 0x3080,
2368                 .enable_mask = BIT(0),
2369                 .hw.init = &(struct clk_init_data){
2370                         .name = "modem_ahb1_h_clk",
2371                         .ops = &clk_branch_ops,
2372                 },
2373         },
2374 };
2375 
2376 static struct clk_branch modem_ahb2_h_clk = {
2377         .halt_reg = 0x2fdc,
2378         .halt_bit = 7,
2379         .halt_check = BRANCH_HALT_VOTED,
2380         .clkr = {
2381                 .enable_reg = 0x3080,
2382                 .enable_mask = BIT(1),
2383                 .hw.init = &(struct clk_init_data){
2384                         .name = "modem_ahb2_h_clk",
2385                         .ops = &clk_branch_ops,
2386                 },
2387         },
2388 };
2389 
2390 static struct clk_branch pmic_arb0_h_clk = {
2391         .halt_reg = 0x2fd8,
2392         .halt_check = BRANCH_HALT_VOTED,
2393         .halt_bit = 22,
2394         .clkr = {
2395                 .enable_reg = 0x3080,
2396                 .enable_mask = BIT(8),
2397                 .hw.init = &(struct clk_init_data){
2398                         .name = "pmic_arb0_h_clk",
2399                         .ops = &clk_branch_ops,
2400                 },
2401         },
2402 };
2403 
2404 static struct clk_branch pmic_arb1_h_clk = {
2405         .halt_reg = 0x2fd8,
2406         .halt_check = BRANCH_HALT_VOTED,
2407         .halt_bit = 21,
2408         .clkr = {
2409                 .enable_reg = 0x3080,
2410                 .enable_mask = BIT(9),
2411                 .hw.init = &(struct clk_init_data){
2412                         .name = "pmic_arb1_h_clk",
2413                         .ops = &clk_branch_ops,
2414                 },
2415         },
2416 };
2417 
2418 static struct clk_branch pmic_ssbi2_clk = {
2419         .halt_reg = 0x2fd8,
2420         .halt_check = BRANCH_HALT_VOTED,
2421         .halt_bit = 23,
2422         .clkr = {
2423                 .enable_reg = 0x3080,
2424                 .enable_mask = BIT(7),
2425                 .hw.init = &(struct clk_init_data){
2426                         .name = "pmic_ssbi2_clk",
2427                         .ops = &clk_branch_ops,
2428                 },
2429         },
2430 };
2431 
2432 static struct clk_branch rpm_msg_ram_h_clk = {
2433         .hwcg_reg = 0x27e0,
2434         .hwcg_bit = 6,
2435         .halt_reg = 0x2fd8,
2436         .halt_check = BRANCH_HALT_VOTED,
2437         .halt_bit = 12,
2438         .clkr = {
2439                 .enable_reg = 0x3080,
2440                 .enable_mask = BIT(6),
2441                 .hw.init = &(struct clk_init_data){
2442                         .name = "rpm_msg_ram_h_clk",
2443                         .ops = &clk_branch_ops,
2444                 },
2445         },
2446 };
2447 
2448 static struct clk_regmap *gcc_msm8660_clks[] = {
2449         [PLL8] = &pll8.clkr,
2450         [PLL8_VOTE] = &pll8_vote,
2451         [GSBI1_UART_SRC] = &gsbi1_uart_src.clkr,
2452         [GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr,
2453         [GSBI2_UART_SRC] = &gsbi2_uart_src.clkr,
2454         [GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr,
2455         [GSBI3_UART_SRC] = &gsbi3_uart_src.clkr,
2456         [GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr,
2457         [GSBI4_UART_SRC] = &gsbi4_uart_src.clkr,
2458         [GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr,
2459         [GSBI5_UART_SRC] = &gsbi5_uart_src.clkr,
2460         [GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr,
2461         [GSBI6_UART_SRC] = &gsbi6_uart_src.clkr,
2462         [GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr,
2463         [GSBI7_UART_SRC] = &gsbi7_uart_src.clkr,
2464         [GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr,
2465         [GSBI8_UART_SRC] = &gsbi8_uart_src.clkr,
2466         [GSBI8_UART_CLK] = &gsbi8_uart_clk.clkr,
2467         [GSBI9_UART_SRC] = &gsbi9_uart_src.clkr,
2468         [GSBI9_UART_CLK] = &gsbi9_uart_clk.clkr,
2469         [GSBI10_UART_SRC] = &gsbi10_uart_src.clkr,
2470         [GSBI10_UART_CLK] = &gsbi10_uart_clk.clkr,
2471         [GSBI11_UART_SRC] = &gsbi11_uart_src.clkr,
2472         [GSBI11_UART_CLK] = &gsbi11_uart_clk.clkr,
2473         [GSBI12_UART_SRC] = &gsbi12_uart_src.clkr,
2474         [GSBI12_UART_CLK] = &gsbi12_uart_clk.clkr,
2475         [GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr,
2476         [GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr,
2477         [GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr,
2478         [GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr,
2479         [GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr,
2480         [GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr,
2481         [GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr,
2482         [GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr,
2483         [GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr,
2484         [GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr,
2485         [GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr,
2486         [GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr,
2487         [GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr,
2488         [GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr,
2489         [GSBI8_QUP_SRC] = &gsbi8_qup_src.clkr,
2490         [GSBI8_QUP_CLK] = &gsbi8_qup_clk.clkr,
2491         [GSBI9_QUP_SRC] = &gsbi9_qup_src.clkr,
2492         [GSBI9_QUP_CLK] = &gsbi9_qup_clk.clkr,
2493         [GSBI10_QUP_SRC] = &gsbi10_qup_src.clkr,
2494         [GSBI10_QUP_CLK] = &gsbi10_qup_clk.clkr,
2495         [GSBI11_QUP_SRC] = &gsbi11_qup_src.clkr,
2496         [GSBI11_QUP_CLK] = &gsbi11_qup_clk.clkr,
2497         [GSBI12_QUP_SRC] = &gsbi12_qup_src.clkr,
2498         [GSBI12_QUP_CLK] = &gsbi12_qup_clk.clkr,
2499         [GP0_SRC] = &gp0_src.clkr,
2500         [GP0_CLK] = &gp0_clk.clkr,
2501         [GP1_SRC] = &gp1_src.clkr,
2502         [GP1_CLK] = &gp1_clk.clkr,
2503         [GP2_SRC] = &gp2_src.clkr,
2504         [GP2_CLK] = &gp2_clk.clkr,
2505         [PMEM_CLK] = &pmem_clk.clkr,
2506         [PRNG_SRC] = &prng_src.clkr,
2507         [PRNG_CLK] = &prng_clk.clkr,
2508         [SDC1_SRC] = &sdc1_src.clkr,
2509         [SDC1_CLK] = &sdc1_clk.clkr,
2510         [SDC2_SRC] = &sdc2_src.clkr,
2511         [SDC2_CLK] = &sdc2_clk.clkr,
2512         [SDC3_SRC] = &sdc3_src.clkr,
2513         [SDC3_CLK] = &sdc3_clk.clkr,
2514         [SDC4_SRC] = &sdc4_src.clkr,
2515         [SDC4_CLK] = &sdc4_clk.clkr,
2516         [SDC5_SRC] = &sdc5_src.clkr,
2517         [SDC5_CLK] = &sdc5_clk.clkr,
2518         [TSIF_REF_SRC] = &tsif_ref_src.clkr,
2519         [TSIF_REF_CLK] = &tsif_ref_clk.clkr,
2520         [USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr,
2521         [USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr,
2522         [USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr,
2523         [USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr,
2524         [USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr,
2525         [USB_FS2_XCVR_FS_SRC] = &usb_fs2_xcvr_fs_src.clkr,
2526         [USB_FS2_XCVR_FS_CLK] = &usb_fs2_xcvr_fs_clk.clkr,
2527         [USB_FS2_SYSTEM_CLK] = &usb_fs2_system_clk.clkr,
2528         [GSBI1_H_CLK] = &gsbi1_h_clk.clkr,
2529         [GSBI2_H_CLK] = &gsbi2_h_clk.clkr,
2530         [GSBI3_H_CLK] = &gsbi3_h_clk.clkr,
2531         [GSBI4_H_CLK] = &gsbi4_h_clk.clkr,
2532         [GSBI5_H_CLK] = &gsbi5_h_clk.clkr,
2533         [GSBI6_H_CLK] = &gsbi6_h_clk.clkr,
2534         [GSBI7_H_CLK] = &gsbi7_h_clk.clkr,
2535         [GSBI8_H_CLK] = &gsbi8_h_clk.clkr,
2536         [GSBI9_H_CLK] = &gsbi9_h_clk.clkr,
2537         [GSBI10_H_CLK] = &gsbi10_h_clk.clkr,
2538         [GSBI11_H_CLK] = &gsbi11_h_clk.clkr,
2539         [GSBI12_H_CLK] = &gsbi12_h_clk.clkr,
2540         [TSIF_H_CLK] = &tsif_h_clk.clkr,
2541         [USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr,
2542         [USB_FS2_H_CLK] = &usb_fs2_h_clk.clkr,
2543         [USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr,
2544         [SDC1_H_CLK] = &sdc1_h_clk.clkr,
2545         [SDC2_H_CLK] = &sdc2_h_clk.clkr,
2546         [SDC3_H_CLK] = &sdc3_h_clk.clkr,
2547         [SDC4_H_CLK] = &sdc4_h_clk.clkr,
2548         [SDC5_H_CLK] = &sdc5_h_clk.clkr,
2549         [EBI2_2X_CLK] = &ebi2_2x_clk.clkr,
2550         [EBI2_CLK] = &ebi2_clk.clkr,
2551         [ADM0_CLK] = &adm0_clk.clkr,
2552         [ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr,
2553         [ADM1_CLK] = &adm1_clk.clkr,
2554         [ADM1_PBUS_CLK] = &adm1_pbus_clk.clkr,
2555         [MODEM_AHB1_H_CLK] = &modem_ahb1_h_clk.clkr,
2556         [MODEM_AHB2_H_CLK] = &modem_ahb2_h_clk.clkr,
2557         [PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr,
2558         [PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr,
2559         [PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr,
2560         [RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr,
2561 };
2562 
2563 static const struct qcom_reset_map gcc_msm8660_resets[] = {
2564         [AFAB_CORE_RESET] = { 0x2080, 7 },
2565         [SCSS_SYS_RESET] = { 0x20b4, 1 },
2566         [SCSS_SYS_POR_RESET] = { 0x20b4 },
2567         [AFAB_SMPSS_S_RESET] = { 0x20b8, 2 },
2568         [AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 },
2569         [AFAB_SMPSS_M0_RESET] = { 0x20b8 },
2570         [AFAB_EBI1_S_RESET] = { 0x20c0, 7 },
2571         [SFAB_CORE_RESET] = { 0x2120, 7 },
2572         [SFAB_ADM0_M0_RESET] = { 0x21e0, 7 },
2573         [SFAB_ADM0_M1_RESET] = { 0x21e4, 7 },
2574         [SFAB_ADM0_M2_RESET] = { 0x21e4, 7 },
2575         [ADM0_C2_RESET] = { 0x220c, 4 },
2576         [ADM0_C1_RESET] = { 0x220c, 3 },
2577         [ADM0_C0_RESET] = { 0x220c, 2 },
2578         [ADM0_PBUS_RESET] = { 0x220c, 1 },
2579         [ADM0_RESET] = { 0x220c },
2580         [SFAB_ADM1_M0_RESET] = { 0x2220, 7 },
2581         [SFAB_ADM1_M1_RESET] = { 0x2224, 7 },
2582         [SFAB_ADM1_M2_RESET] = { 0x2228, 7 },
2583         [MMFAB_ADM1_M3_RESET] = { 0x2240, 7 },
2584         [ADM1_C3_RESET] = { 0x226c, 5 },
2585         [ADM1_C2_RESET] = { 0x226c, 4 },
2586         [ADM1_C1_RESET] = { 0x226c, 3 },
2587         [ADM1_C0_RESET] = { 0x226c, 2 },
2588         [ADM1_PBUS_RESET] = { 0x226c, 1 },
2589         [ADM1_RESET] = { 0x226c },
2590         [IMEM0_RESET] = { 0x2280, 7 },
2591         [SFAB_LPASS_Q6_RESET] = { 0x23a0, 7 },
2592         [SFAB_AFAB_M_RESET] = { 0x23e0, 7 },
2593         [AFAB_SFAB_M0_RESET] = { 0x2420, 7 },
2594         [AFAB_SFAB_M1_RESET] = { 0x2424, 7 },
2595         [DFAB_CORE_RESET] = { 0x24ac, 7 },
2596         [SFAB_DFAB_M_RESET] = { 0x2500, 7 },
2597         [DFAB_SFAB_M_RESET] = { 0x2520, 7 },
2598         [DFAB_SWAY0_RESET] = { 0x2540, 7 },
2599         [DFAB_SWAY1_RESET] = { 0x2544, 7 },
2600         [DFAB_ARB0_RESET] = { 0x2560, 7 },
2601         [DFAB_ARB1_RESET] = { 0x2564, 7 },
2602         [PPSS_PROC_RESET] = { 0x2594, 1 },
2603         [PPSS_RESET] = { 0x2594 },
2604         [PMEM_RESET] = { 0x25a0, 7 },
2605         [DMA_BAM_RESET] = { 0x25c0, 7 },
2606         [SIC_RESET] = { 0x25e0, 7 },
2607         [SPS_TIC_RESET] = { 0x2600, 7 },
2608         [CFBP0_RESET] = { 0x2650, 7 },
2609         [CFBP1_RESET] = { 0x2654, 7 },
2610         [CFBP2_RESET] = { 0x2658, 7 },
2611         [EBI2_RESET] = { 0x2664, 7 },
2612         [SFAB_CFPB_M_RESET] = { 0x2680, 7 },
2613         [CFPB_MASTER_RESET] = { 0x26a0, 7 },
2614         [SFAB_CFPB_S_RESET] = { 0x26c0, 7 },
2615         [CFPB_SPLITTER_RESET] = { 0x26e0, 7 },
2616         [TSIF_RESET] = { 0x2700, 7 },
2617         [CE1_RESET] = { 0x2720, 7 },
2618         [CE2_RESET] = { 0x2740, 7 },
2619         [SFAB_SFPB_M_RESET] = { 0x2780, 7 },
2620         [SFAB_SFPB_S_RESET] = { 0x27a0, 7 },
2621         [RPM_PROC_RESET] = { 0x27c0, 7 },
2622         [RPM_BUS_RESET] = { 0x27c4, 7 },
2623         [RPM_MSG_RAM_RESET] = { 0x27e0, 7 },
2624         [PMIC_ARB0_RESET] = { 0x2800, 7 },
2625         [PMIC_ARB1_RESET] = { 0x2804, 7 },
2626         [PMIC_SSBI2_RESET] = { 0x280c, 12 },
2627         [SDC1_RESET] = { 0x2830 },
2628         [SDC2_RESET] = { 0x2850 },
2629         [SDC3_RESET] = { 0x2870 },
2630         [SDC4_RESET] = { 0x2890 },
2631         [SDC5_RESET] = { 0x28b0 },
2632         [USB_HS1_RESET] = { 0x2910 },
2633         [USB_HS2_XCVR_RESET] = { 0x2934, 1 },
2634         [USB_HS2_RESET] = { 0x2934 },
2635         [USB_FS1_XCVR_RESET] = { 0x2974, 1 },
2636         [USB_FS1_RESET] = { 0x2974 },
2637         [USB_FS2_XCVR_RESET] = { 0x2994, 1 },
2638         [USB_FS2_RESET] = { 0x2994 },
2639         [GSBI1_RESET] = { 0x29dc },
2640         [GSBI2_RESET] = { 0x29fc },
2641         [GSBI3_RESET] = { 0x2a1c },
2642         [GSBI4_RESET] = { 0x2a3c },
2643         [GSBI5_RESET] = { 0x2a5c },
2644         [GSBI6_RESET] = { 0x2a7c },
2645         [GSBI7_RESET] = { 0x2a9c },
2646         [GSBI8_RESET] = { 0x2abc },
2647         [GSBI9_RESET] = { 0x2adc },
2648         [GSBI10_RESET] = { 0x2afc },
2649         [GSBI11_RESET] = { 0x2b1c },
2650         [GSBI12_RESET] = { 0x2b3c },
2651         [SPDM_RESET] = { 0x2b6c },
2652         [SEC_CTRL_RESET] = { 0x2b80, 7 },
2653         [TLMM_H_RESET] = { 0x2ba0, 7 },
2654         [TLMM_RESET] = { 0x2ba4, 7 },
2655         [MARRM_PWRON_RESET] = { 0x2bd4, 1 },
2656         [MARM_RESET] = { 0x2bd4 },
2657         [MAHB1_RESET] = { 0x2be4, 7 },
2658         [SFAB_MSS_S_RESET] = { 0x2c00, 7 },
2659         [MAHB2_RESET] = { 0x2c20, 7 },
2660         [MODEM_SW_AHB_RESET] = { 0x2c48, 1 },
2661         [MODEM_RESET] = { 0x2c48 },
2662         [SFAB_MSS_MDM1_RESET] = { 0x2c4c, 1 },
2663         [SFAB_MSS_MDM0_RESET] = { 0x2c4c },
2664         [MSS_SLP_RESET] = { 0x2c60, 7 },
2665         [MSS_MARM_SAW_RESET] = { 0x2c68, 1 },
2666         [MSS_WDOG_RESET] = { 0x2c68 },
2667         [TSSC_RESET] = { 0x2ca0, 7 },
2668         [PDM_RESET] = { 0x2cc0, 12 },
2669         [SCSS_CORE0_RESET] = { 0x2d60, 1 },
2670         [SCSS_CORE0_POR_RESET] = { 0x2d60 },
2671         [SCSS_CORE1_RESET] = { 0x2d80, 1 },
2672         [SCSS_CORE1_POR_RESET] = { 0x2d80 },
2673         [MPM_RESET] = { 0x2da4, 1 },
2674         [EBI1_1X_DIV_RESET] = { 0x2dec, 9 },
2675         [EBI1_RESET] = { 0x2dec, 7 },
2676         [SFAB_SMPSS_S_RESET] = { 0x2e00, 7 },
2677         [USB_PHY0_RESET] = { 0x2e20 },
2678         [USB_PHY1_RESET] = { 0x2e40 },
2679         [PRNG_RESET] = { 0x2e80, 12 },
2680 };
2681 
2682 static const struct regmap_config gcc_msm8660_regmap_config = {
2683         .reg_bits       = 32,
2684         .reg_stride     = 4,
2685         .val_bits       = 32,
2686         .max_register   = 0x363c,
2687         .fast_io        = true,
2688 };
2689 
2690 static const struct qcom_cc_desc gcc_msm8660_desc = {
2691         .config = &gcc_msm8660_regmap_config,
2692         .clks = gcc_msm8660_clks,
2693         .num_clks = ARRAY_SIZE(gcc_msm8660_clks),
2694         .resets = gcc_msm8660_resets,
2695         .num_resets = ARRAY_SIZE(gcc_msm8660_resets),
2696 };
2697 
2698 static const struct of_device_id gcc_msm8660_match_table[] = {
2699         { .compatible = "qcom,gcc-msm8660" },
2700         { }
2701 };
2702 MODULE_DEVICE_TABLE(of, gcc_msm8660_match_table);
2703 
2704 static int gcc_msm8660_probe(struct platform_device *pdev)
2705 {
2706         int ret;
2707         struct device *dev = &pdev->dev;
2708 
2709         ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 19200000);
2710         if (ret)
2711                 return ret;
2712 
2713         ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 27000000);
2714         if (ret)
2715                 return ret;
2716 
2717         return qcom_cc_probe(pdev, &gcc_msm8660_desc);
2718 }
2719 
2720 static struct platform_driver gcc_msm8660_driver = {
2721         .probe          = gcc_msm8660_probe,
2722         .driver         = {
2723                 .name   = "gcc-msm8660",
2724                 .of_match_table = gcc_msm8660_match_table,
2725         },
2726 };
2727 
2728 static int __init gcc_msm8660_init(void)
2729 {
2730         return platform_driver_register(&gcc_msm8660_driver);
2731 }
2732 core_initcall(gcc_msm8660_init);
2733 
2734 static void __exit gcc_msm8660_exit(void)
2735 {
2736         platform_driver_unregister(&gcc_msm8660_driver);
2737 }
2738 module_exit(gcc_msm8660_exit);
2739 
2740 MODULE_DESCRIPTION("GCC MSM 8660 Driver");
2741 MODULE_LICENSE("GPL v2");
2742 MODULE_ALIAS("platform:gcc-msm8660");

/* [<][>][^][v][top][bottom][index][help] */