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

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

DEFINITIONS

This source file includes following definitions.
  1. gcc_msm8960_probe
  2. gcc_msm8960_remove
  3. gcc_msm8960_init
  4. gcc_msm8960_exit

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * Copyright (c) 2013-2014, 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-msm8960.h>
  18 #include <dt-bindings/reset/qcom,gcc-msm8960.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 "clk-hfpll.h"
  26 #include "reset.h"
  27 
  28 static struct clk_pll pll3 = {
  29         .l_reg = 0x3164,
  30         .m_reg = 0x3168,
  31         .n_reg = 0x316c,
  32         .config_reg = 0x3174,
  33         .mode_reg = 0x3160,
  34         .status_reg = 0x3178,
  35         .status_bit = 16,
  36         .clkr.hw.init = &(struct clk_init_data){
  37                 .name = "pll3",
  38                 .parent_names = (const char *[]){ "pxo" },
  39                 .num_parents = 1,
  40                 .ops = &clk_pll_ops,
  41         },
  42 };
  43 
  44 static struct clk_regmap pll4_vote = {
  45         .enable_reg = 0x34c0,
  46         .enable_mask = BIT(4),
  47         .hw.init = &(struct clk_init_data){
  48                 .name = "pll4_vote",
  49                 .parent_names = (const char *[]){ "pll4" },
  50                 .num_parents = 1,
  51                 .ops = &clk_pll_vote_ops,
  52         },
  53 };
  54 
  55 static struct clk_pll pll8 = {
  56         .l_reg = 0x3144,
  57         .m_reg = 0x3148,
  58         .n_reg = 0x314c,
  59         .config_reg = 0x3154,
  60         .mode_reg = 0x3140,
  61         .status_reg = 0x3158,
  62         .status_bit = 16,
  63         .clkr.hw.init = &(struct clk_init_data){
  64                 .name = "pll8",
  65                 .parent_names = (const char *[]){ "pxo" },
  66                 .num_parents = 1,
  67                 .ops = &clk_pll_ops,
  68         },
  69 };
  70 
  71 static struct clk_regmap pll8_vote = {
  72         .enable_reg = 0x34c0,
  73         .enable_mask = BIT(8),
  74         .hw.init = &(struct clk_init_data){
  75                 .name = "pll8_vote",
  76                 .parent_names = (const char *[]){ "pll8" },
  77                 .num_parents = 1,
  78                 .ops = &clk_pll_vote_ops,
  79         },
  80 };
  81 
  82 static struct hfpll_data hfpll0_data = {
  83         .mode_reg = 0x3200,
  84         .l_reg = 0x3208,
  85         .m_reg = 0x320c,
  86         .n_reg = 0x3210,
  87         .config_reg = 0x3204,
  88         .status_reg = 0x321c,
  89         .config_val = 0x7845c665,
  90         .droop_reg = 0x3214,
  91         .droop_val = 0x0108c000,
  92         .min_rate = 600000000UL,
  93         .max_rate = 1800000000UL,
  94 };
  95 
  96 static struct clk_hfpll hfpll0 = {
  97         .d = &hfpll0_data,
  98         .clkr.hw.init = &(struct clk_init_data){
  99                 .parent_names = (const char *[]){ "pxo" },
 100                 .num_parents = 1,
 101                 .name = "hfpll0",
 102                 .ops = &clk_ops_hfpll,
 103                 .flags = CLK_IGNORE_UNUSED,
 104         },
 105         .lock = __SPIN_LOCK_UNLOCKED(hfpll0.lock),
 106 };
 107 
 108 static struct hfpll_data hfpll1_8064_data = {
 109         .mode_reg = 0x3240,
 110         .l_reg = 0x3248,
 111         .m_reg = 0x324c,
 112         .n_reg = 0x3250,
 113         .config_reg = 0x3244,
 114         .status_reg = 0x325c,
 115         .config_val = 0x7845c665,
 116         .droop_reg = 0x3254,
 117         .droop_val = 0x0108c000,
 118         .min_rate = 600000000UL,
 119         .max_rate = 1800000000UL,
 120 };
 121 
 122 static struct hfpll_data hfpll1_data = {
 123         .mode_reg = 0x3300,
 124         .l_reg = 0x3308,
 125         .m_reg = 0x330c,
 126         .n_reg = 0x3310,
 127         .config_reg = 0x3304,
 128         .status_reg = 0x331c,
 129         .config_val = 0x7845c665,
 130         .droop_reg = 0x3314,
 131         .droop_val = 0x0108c000,
 132         .min_rate = 600000000UL,
 133         .max_rate = 1800000000UL,
 134 };
 135 
 136 static struct clk_hfpll hfpll1 = {
 137         .d = &hfpll1_data,
 138         .clkr.hw.init = &(struct clk_init_data){
 139                 .parent_names = (const char *[]){ "pxo" },
 140                 .num_parents = 1,
 141                 .name = "hfpll1",
 142                 .ops = &clk_ops_hfpll,
 143                 .flags = CLK_IGNORE_UNUSED,
 144         },
 145         .lock = __SPIN_LOCK_UNLOCKED(hfpll1.lock),
 146 };
 147 
 148 static struct hfpll_data hfpll2_data = {
 149         .mode_reg = 0x3280,
 150         .l_reg = 0x3288,
 151         .m_reg = 0x328c,
 152         .n_reg = 0x3290,
 153         .config_reg = 0x3284,
 154         .status_reg = 0x329c,
 155         .config_val = 0x7845c665,
 156         .droop_reg = 0x3294,
 157         .droop_val = 0x0108c000,
 158         .min_rate = 600000000UL,
 159         .max_rate = 1800000000UL,
 160 };
 161 
 162 static struct clk_hfpll hfpll2 = {
 163         .d = &hfpll2_data,
 164         .clkr.hw.init = &(struct clk_init_data){
 165                 .parent_names = (const char *[]){ "pxo" },
 166                 .num_parents = 1,
 167                 .name = "hfpll2",
 168                 .ops = &clk_ops_hfpll,
 169                 .flags = CLK_IGNORE_UNUSED,
 170         },
 171         .lock = __SPIN_LOCK_UNLOCKED(hfpll2.lock),
 172 };
 173 
 174 static struct hfpll_data hfpll3_data = {
 175         .mode_reg = 0x32c0,
 176         .l_reg = 0x32c8,
 177         .m_reg = 0x32cc,
 178         .n_reg = 0x32d0,
 179         .config_reg = 0x32c4,
 180         .status_reg = 0x32dc,
 181         .config_val = 0x7845c665,
 182         .droop_reg = 0x32d4,
 183         .droop_val = 0x0108c000,
 184         .min_rate = 600000000UL,
 185         .max_rate = 1800000000UL,
 186 };
 187 
 188 static struct clk_hfpll hfpll3 = {
 189         .d = &hfpll3_data,
 190         .clkr.hw.init = &(struct clk_init_data){
 191                 .parent_names = (const char *[]){ "pxo" },
 192                 .num_parents = 1,
 193                 .name = "hfpll3",
 194                 .ops = &clk_ops_hfpll,
 195                 .flags = CLK_IGNORE_UNUSED,
 196         },
 197         .lock = __SPIN_LOCK_UNLOCKED(hfpll3.lock),
 198 };
 199 
 200 static struct hfpll_data hfpll_l2_8064_data = {
 201         .mode_reg = 0x3300,
 202         .l_reg = 0x3308,
 203         .m_reg = 0x330c,
 204         .n_reg = 0x3310,
 205         .config_reg = 0x3304,
 206         .status_reg = 0x331c,
 207         .config_val = 0x7845c665,
 208         .droop_reg = 0x3314,
 209         .droop_val = 0x0108c000,
 210         .min_rate = 600000000UL,
 211         .max_rate = 1800000000UL,
 212 };
 213 
 214 static struct hfpll_data hfpll_l2_data = {
 215         .mode_reg = 0x3400,
 216         .l_reg = 0x3408,
 217         .m_reg = 0x340c,
 218         .n_reg = 0x3410,
 219         .config_reg = 0x3404,
 220         .status_reg = 0x341c,
 221         .config_val = 0x7845c665,
 222         .droop_reg = 0x3414,
 223         .droop_val = 0x0108c000,
 224         .min_rate = 600000000UL,
 225         .max_rate = 1800000000UL,
 226 };
 227 
 228 static struct clk_hfpll hfpll_l2 = {
 229         .d = &hfpll_l2_data,
 230         .clkr.hw.init = &(struct clk_init_data){
 231                 .parent_names = (const char *[]){ "pxo" },
 232                 .num_parents = 1,
 233                 .name = "hfpll_l2",
 234                 .ops = &clk_ops_hfpll,
 235                 .flags = CLK_IGNORE_UNUSED,
 236         },
 237         .lock = __SPIN_LOCK_UNLOCKED(hfpll_l2.lock),
 238 };
 239 
 240 static struct clk_pll pll14 = {
 241         .l_reg = 0x31c4,
 242         .m_reg = 0x31c8,
 243         .n_reg = 0x31cc,
 244         .config_reg = 0x31d4,
 245         .mode_reg = 0x31c0,
 246         .status_reg = 0x31d8,
 247         .status_bit = 16,
 248         .clkr.hw.init = &(struct clk_init_data){
 249                 .name = "pll14",
 250                 .parent_names = (const char *[]){ "pxo" },
 251                 .num_parents = 1,
 252                 .ops = &clk_pll_ops,
 253         },
 254 };
 255 
 256 static struct clk_regmap pll14_vote = {
 257         .enable_reg = 0x34c0,
 258         .enable_mask = BIT(14),
 259         .hw.init = &(struct clk_init_data){
 260                 .name = "pll14_vote",
 261                 .parent_names = (const char *[]){ "pll14" },
 262                 .num_parents = 1,
 263                 .ops = &clk_pll_vote_ops,
 264         },
 265 };
 266 
 267 enum {
 268         P_PXO,
 269         P_PLL8,
 270         P_PLL3,
 271         P_CXO,
 272 };
 273 
 274 static const struct parent_map gcc_pxo_pll8_map[] = {
 275         { P_PXO, 0 },
 276         { P_PLL8, 3 }
 277 };
 278 
 279 static const char * const gcc_pxo_pll8[] = {
 280         "pxo",
 281         "pll8_vote",
 282 };
 283 
 284 static const struct parent_map gcc_pxo_pll8_cxo_map[] = {
 285         { P_PXO, 0 },
 286         { P_PLL8, 3 },
 287         { P_CXO, 5 }
 288 };
 289 
 290 static const char * const gcc_pxo_pll8_cxo[] = {
 291         "pxo",
 292         "pll8_vote",
 293         "cxo",
 294 };
 295 
 296 static const struct parent_map gcc_pxo_pll8_pll3_map[] = {
 297         { P_PXO, 0 },
 298         { P_PLL8, 3 },
 299         { P_PLL3, 6 }
 300 };
 301 
 302 static const char * const gcc_pxo_pll8_pll3[] = {
 303         "pxo",
 304         "pll8_vote",
 305         "pll3",
 306 };
 307 
 308 static struct freq_tbl clk_tbl_gsbi_uart[] = {
 309         {  1843200, P_PLL8, 2,  6, 625 },
 310         {  3686400, P_PLL8, 2, 12, 625 },
 311         {  7372800, P_PLL8, 2, 24, 625 },
 312         { 14745600, P_PLL8, 2, 48, 625 },
 313         { 16000000, P_PLL8, 4,  1,   6 },
 314         { 24000000, P_PLL8, 4,  1,   4 },
 315         { 32000000, P_PLL8, 4,  1,   3 },
 316         { 40000000, P_PLL8, 1,  5,  48 },
 317         { 46400000, P_PLL8, 1, 29, 240 },
 318         { 48000000, P_PLL8, 4,  1,   2 },
 319         { 51200000, P_PLL8, 1,  2,  15 },
 320         { 56000000, P_PLL8, 1,  7,  48 },
 321         { 58982400, P_PLL8, 1, 96, 625 },
 322         { 64000000, P_PLL8, 2,  1,   3 },
 323         { }
 324 };
 325 
 326 static struct clk_rcg gsbi1_uart_src = {
 327         .ns_reg = 0x29d4,
 328         .md_reg = 0x29d0,
 329         .mn = {
 330                 .mnctr_en_bit = 8,
 331                 .mnctr_reset_bit = 7,
 332                 .mnctr_mode_shift = 5,
 333                 .n_val_shift = 16,
 334                 .m_val_shift = 16,
 335                 .width = 16,
 336         },
 337         .p = {
 338                 .pre_div_shift = 3,
 339                 .pre_div_width = 2,
 340         },
 341         .s = {
 342                 .src_sel_shift = 0,
 343                 .parent_map = gcc_pxo_pll8_map,
 344         },
 345         .freq_tbl = clk_tbl_gsbi_uart,
 346         .clkr = {
 347                 .enable_reg = 0x29d4,
 348                 .enable_mask = BIT(11),
 349                 .hw.init = &(struct clk_init_data){
 350                         .name = "gsbi1_uart_src",
 351                         .parent_names = gcc_pxo_pll8,
 352                         .num_parents = 2,
 353                         .ops = &clk_rcg_ops,
 354                         .flags = CLK_SET_PARENT_GATE,
 355                 },
 356         },
 357 };
 358 
 359 static struct clk_branch gsbi1_uart_clk = {
 360         .halt_reg = 0x2fcc,
 361         .halt_bit = 10,
 362         .clkr = {
 363                 .enable_reg = 0x29d4,
 364                 .enable_mask = BIT(9),
 365                 .hw.init = &(struct clk_init_data){
 366                         .name = "gsbi1_uart_clk",
 367                         .parent_names = (const char *[]){
 368                                 "gsbi1_uart_src",
 369                         },
 370                         .num_parents = 1,
 371                         .ops = &clk_branch_ops,
 372                         .flags = CLK_SET_RATE_PARENT,
 373                 },
 374         },
 375 };
 376 
 377 static struct clk_rcg gsbi2_uart_src = {
 378         .ns_reg = 0x29f4,
 379         .md_reg = 0x29f0,
 380         .mn = {
 381                 .mnctr_en_bit = 8,
 382                 .mnctr_reset_bit = 7,
 383                 .mnctr_mode_shift = 5,
 384                 .n_val_shift = 16,
 385                 .m_val_shift = 16,
 386                 .width = 16,
 387         },
 388         .p = {
 389                 .pre_div_shift = 3,
 390                 .pre_div_width = 2,
 391         },
 392         .s = {
 393                 .src_sel_shift = 0,
 394                 .parent_map = gcc_pxo_pll8_map,
 395         },
 396         .freq_tbl = clk_tbl_gsbi_uart,
 397         .clkr = {
 398                 .enable_reg = 0x29f4,
 399                 .enable_mask = BIT(11),
 400                 .hw.init = &(struct clk_init_data){
 401                         .name = "gsbi2_uart_src",
 402                         .parent_names = gcc_pxo_pll8,
 403                         .num_parents = 2,
 404                         .ops = &clk_rcg_ops,
 405                         .flags = CLK_SET_PARENT_GATE,
 406                 },
 407         },
 408 };
 409 
 410 static struct clk_branch gsbi2_uart_clk = {
 411         .halt_reg = 0x2fcc,
 412         .halt_bit = 6,
 413         .clkr = {
 414                 .enable_reg = 0x29f4,
 415                 .enable_mask = BIT(9),
 416                 .hw.init = &(struct clk_init_data){
 417                         .name = "gsbi2_uart_clk",
 418                         .parent_names = (const char *[]){
 419                                 "gsbi2_uart_src",
 420                         },
 421                         .num_parents = 1,
 422                         .ops = &clk_branch_ops,
 423                         .flags = CLK_SET_RATE_PARENT,
 424                 },
 425         },
 426 };
 427 
 428 static struct clk_rcg gsbi3_uart_src = {
 429         .ns_reg = 0x2a14,
 430         .md_reg = 0x2a10,
 431         .mn = {
 432                 .mnctr_en_bit = 8,
 433                 .mnctr_reset_bit = 7,
 434                 .mnctr_mode_shift = 5,
 435                 .n_val_shift = 16,
 436                 .m_val_shift = 16,
 437                 .width = 16,
 438         },
 439         .p = {
 440                 .pre_div_shift = 3,
 441                 .pre_div_width = 2,
 442         },
 443         .s = {
 444                 .src_sel_shift = 0,
 445                 .parent_map = gcc_pxo_pll8_map,
 446         },
 447         .freq_tbl = clk_tbl_gsbi_uart,
 448         .clkr = {
 449                 .enable_reg = 0x2a14,
 450                 .enable_mask = BIT(11),
 451                 .hw.init = &(struct clk_init_data){
 452                         .name = "gsbi3_uart_src",
 453                         .parent_names = gcc_pxo_pll8,
 454                         .num_parents = 2,
 455                         .ops = &clk_rcg_ops,
 456                         .flags = CLK_SET_PARENT_GATE,
 457                 },
 458         },
 459 };
 460 
 461 static struct clk_branch gsbi3_uart_clk = {
 462         .halt_reg = 0x2fcc,
 463         .halt_bit = 2,
 464         .clkr = {
 465                 .enable_reg = 0x2a14,
 466                 .enable_mask = BIT(9),
 467                 .hw.init = &(struct clk_init_data){
 468                         .name = "gsbi3_uart_clk",
 469                         .parent_names = (const char *[]){
 470                                 "gsbi3_uart_src",
 471                         },
 472                         .num_parents = 1,
 473                         .ops = &clk_branch_ops,
 474                         .flags = CLK_SET_RATE_PARENT,
 475                 },
 476         },
 477 };
 478 
 479 static struct clk_rcg gsbi4_uart_src = {
 480         .ns_reg = 0x2a34,
 481         .md_reg = 0x2a30,
 482         .mn = {
 483                 .mnctr_en_bit = 8,
 484                 .mnctr_reset_bit = 7,
 485                 .mnctr_mode_shift = 5,
 486                 .n_val_shift = 16,
 487                 .m_val_shift = 16,
 488                 .width = 16,
 489         },
 490         .p = {
 491                 .pre_div_shift = 3,
 492                 .pre_div_width = 2,
 493         },
 494         .s = {
 495                 .src_sel_shift = 0,
 496                 .parent_map = gcc_pxo_pll8_map,
 497         },
 498         .freq_tbl = clk_tbl_gsbi_uart,
 499         .clkr = {
 500                 .enable_reg = 0x2a34,
 501                 .enable_mask = BIT(11),
 502                 .hw.init = &(struct clk_init_data){
 503                         .name = "gsbi4_uart_src",
 504                         .parent_names = gcc_pxo_pll8,
 505                         .num_parents = 2,
 506                         .ops = &clk_rcg_ops,
 507                         .flags = CLK_SET_PARENT_GATE,
 508                 },
 509         },
 510 };
 511 
 512 static struct clk_branch gsbi4_uart_clk = {
 513         .halt_reg = 0x2fd0,
 514         .halt_bit = 26,
 515         .clkr = {
 516                 .enable_reg = 0x2a34,
 517                 .enable_mask = BIT(9),
 518                 .hw.init = &(struct clk_init_data){
 519                         .name = "gsbi4_uart_clk",
 520                         .parent_names = (const char *[]){
 521                                 "gsbi4_uart_src",
 522                         },
 523                         .num_parents = 1,
 524                         .ops = &clk_branch_ops,
 525                         .flags = CLK_SET_RATE_PARENT,
 526                 },
 527         },
 528 };
 529 
 530 static struct clk_rcg gsbi5_uart_src = {
 531         .ns_reg = 0x2a54,
 532         .md_reg = 0x2a50,
 533         .mn = {
 534                 .mnctr_en_bit = 8,
 535                 .mnctr_reset_bit = 7,
 536                 .mnctr_mode_shift = 5,
 537                 .n_val_shift = 16,
 538                 .m_val_shift = 16,
 539                 .width = 16,
 540         },
 541         .p = {
 542                 .pre_div_shift = 3,
 543                 .pre_div_width = 2,
 544         },
 545         .s = {
 546                 .src_sel_shift = 0,
 547                 .parent_map = gcc_pxo_pll8_map,
 548         },
 549         .freq_tbl = clk_tbl_gsbi_uart,
 550         .clkr = {
 551                 .enable_reg = 0x2a54,
 552                 .enable_mask = BIT(11),
 553                 .hw.init = &(struct clk_init_data){
 554                         .name = "gsbi5_uart_src",
 555                         .parent_names = gcc_pxo_pll8,
 556                         .num_parents = 2,
 557                         .ops = &clk_rcg_ops,
 558                         .flags = CLK_SET_PARENT_GATE,
 559                 },
 560         },
 561 };
 562 
 563 static struct clk_branch gsbi5_uart_clk = {
 564         .halt_reg = 0x2fd0,
 565         .halt_bit = 22,
 566         .clkr = {
 567                 .enable_reg = 0x2a54,
 568                 .enable_mask = BIT(9),
 569                 .hw.init = &(struct clk_init_data){
 570                         .name = "gsbi5_uart_clk",
 571                         .parent_names = (const char *[]){
 572                                 "gsbi5_uart_src",
 573                         },
 574                         .num_parents = 1,
 575                         .ops = &clk_branch_ops,
 576                         .flags = CLK_SET_RATE_PARENT,
 577                 },
 578         },
 579 };
 580 
 581 static struct clk_rcg gsbi6_uart_src = {
 582         .ns_reg = 0x2a74,
 583         .md_reg = 0x2a70,
 584         .mn = {
 585                 .mnctr_en_bit = 8,
 586                 .mnctr_reset_bit = 7,
 587                 .mnctr_mode_shift = 5,
 588                 .n_val_shift = 16,
 589                 .m_val_shift = 16,
 590                 .width = 16,
 591         },
 592         .p = {
 593                 .pre_div_shift = 3,
 594                 .pre_div_width = 2,
 595         },
 596         .s = {
 597                 .src_sel_shift = 0,
 598                 .parent_map = gcc_pxo_pll8_map,
 599         },
 600         .freq_tbl = clk_tbl_gsbi_uart,
 601         .clkr = {
 602                 .enable_reg = 0x2a74,
 603                 .enable_mask = BIT(11),
 604                 .hw.init = &(struct clk_init_data){
 605                         .name = "gsbi6_uart_src",
 606                         .parent_names = gcc_pxo_pll8,
 607                         .num_parents = 2,
 608                         .ops = &clk_rcg_ops,
 609                         .flags = CLK_SET_PARENT_GATE,
 610                 },
 611         },
 612 };
 613 
 614 static struct clk_branch gsbi6_uart_clk = {
 615         .halt_reg = 0x2fd0,
 616         .halt_bit = 18,
 617         .clkr = {
 618                 .enable_reg = 0x2a74,
 619                 .enable_mask = BIT(9),
 620                 .hw.init = &(struct clk_init_data){
 621                         .name = "gsbi6_uart_clk",
 622                         .parent_names = (const char *[]){
 623                                 "gsbi6_uart_src",
 624                         },
 625                         .num_parents = 1,
 626                         .ops = &clk_branch_ops,
 627                         .flags = CLK_SET_RATE_PARENT,
 628                 },
 629         },
 630 };
 631 
 632 static struct clk_rcg gsbi7_uart_src = {
 633         .ns_reg = 0x2a94,
 634         .md_reg = 0x2a90,
 635         .mn = {
 636                 .mnctr_en_bit = 8,
 637                 .mnctr_reset_bit = 7,
 638                 .mnctr_mode_shift = 5,
 639                 .n_val_shift = 16,
 640                 .m_val_shift = 16,
 641                 .width = 16,
 642         },
 643         .p = {
 644                 .pre_div_shift = 3,
 645                 .pre_div_width = 2,
 646         },
 647         .s = {
 648                 .src_sel_shift = 0,
 649                 .parent_map = gcc_pxo_pll8_map,
 650         },
 651         .freq_tbl = clk_tbl_gsbi_uart,
 652         .clkr = {
 653                 .enable_reg = 0x2a94,
 654                 .enable_mask = BIT(11),
 655                 .hw.init = &(struct clk_init_data){
 656                         .name = "gsbi7_uart_src",
 657                         .parent_names = gcc_pxo_pll8,
 658                         .num_parents = 2,
 659                         .ops = &clk_rcg_ops,
 660                         .flags = CLK_SET_PARENT_GATE,
 661                 },
 662         },
 663 };
 664 
 665 static struct clk_branch gsbi7_uart_clk = {
 666         .halt_reg = 0x2fd0,
 667         .halt_bit = 14,
 668         .clkr = {
 669                 .enable_reg = 0x2a94,
 670                 .enable_mask = BIT(9),
 671                 .hw.init = &(struct clk_init_data){
 672                         .name = "gsbi7_uart_clk",
 673                         .parent_names = (const char *[]){
 674                                 "gsbi7_uart_src",
 675                         },
 676                         .num_parents = 1,
 677                         .ops = &clk_branch_ops,
 678                         .flags = CLK_SET_RATE_PARENT,
 679                 },
 680         },
 681 };
 682 
 683 static struct clk_rcg gsbi8_uart_src = {
 684         .ns_reg = 0x2ab4,
 685         .md_reg = 0x2ab0,
 686         .mn = {
 687                 .mnctr_en_bit = 8,
 688                 .mnctr_reset_bit = 7,
 689                 .mnctr_mode_shift = 5,
 690                 .n_val_shift = 16,
 691                 .m_val_shift = 16,
 692                 .width = 16,
 693         },
 694         .p = {
 695                 .pre_div_shift = 3,
 696                 .pre_div_width = 2,
 697         },
 698         .s = {
 699                 .src_sel_shift = 0,
 700                 .parent_map = gcc_pxo_pll8_map,
 701         },
 702         .freq_tbl = clk_tbl_gsbi_uart,
 703         .clkr = {
 704                 .enable_reg = 0x2ab4,
 705                 .enable_mask = BIT(11),
 706                 .hw.init = &(struct clk_init_data){
 707                         .name = "gsbi8_uart_src",
 708                         .parent_names = gcc_pxo_pll8,
 709                         .num_parents = 2,
 710                         .ops = &clk_rcg_ops,
 711                         .flags = CLK_SET_PARENT_GATE,
 712                 },
 713         },
 714 };
 715 
 716 static struct clk_branch gsbi8_uart_clk = {
 717         .halt_reg = 0x2fd0,
 718         .halt_bit = 10,
 719         .clkr = {
 720                 .enable_reg = 0x2ab4,
 721                 .enable_mask = BIT(9),
 722                 .hw.init = &(struct clk_init_data){
 723                         .name = "gsbi8_uart_clk",
 724                         .parent_names = (const char *[]){ "gsbi8_uart_src" },
 725                         .num_parents = 1,
 726                         .ops = &clk_branch_ops,
 727                         .flags = CLK_SET_RATE_PARENT,
 728                 },
 729         },
 730 };
 731 
 732 static struct clk_rcg gsbi9_uart_src = {
 733         .ns_reg = 0x2ad4,
 734         .md_reg = 0x2ad0,
 735         .mn = {
 736                 .mnctr_en_bit = 8,
 737                 .mnctr_reset_bit = 7,
 738                 .mnctr_mode_shift = 5,
 739                 .n_val_shift = 16,
 740                 .m_val_shift = 16,
 741                 .width = 16,
 742         },
 743         .p = {
 744                 .pre_div_shift = 3,
 745                 .pre_div_width = 2,
 746         },
 747         .s = {
 748                 .src_sel_shift = 0,
 749                 .parent_map = gcc_pxo_pll8_map,
 750         },
 751         .freq_tbl = clk_tbl_gsbi_uart,
 752         .clkr = {
 753                 .enable_reg = 0x2ad4,
 754                 .enable_mask = BIT(11),
 755                 .hw.init = &(struct clk_init_data){
 756                         .name = "gsbi9_uart_src",
 757                         .parent_names = gcc_pxo_pll8,
 758                         .num_parents = 2,
 759                         .ops = &clk_rcg_ops,
 760                         .flags = CLK_SET_PARENT_GATE,
 761                 },
 762         },
 763 };
 764 
 765 static struct clk_branch gsbi9_uart_clk = {
 766         .halt_reg = 0x2fd0,
 767         .halt_bit = 6,
 768         .clkr = {
 769                 .enable_reg = 0x2ad4,
 770                 .enable_mask = BIT(9),
 771                 .hw.init = &(struct clk_init_data){
 772                         .name = "gsbi9_uart_clk",
 773                         .parent_names = (const char *[]){ "gsbi9_uart_src" },
 774                         .num_parents = 1,
 775                         .ops = &clk_branch_ops,
 776                         .flags = CLK_SET_RATE_PARENT,
 777                 },
 778         },
 779 };
 780 
 781 static struct clk_rcg gsbi10_uart_src = {
 782         .ns_reg = 0x2af4,
 783         .md_reg = 0x2af0,
 784         .mn = {
 785                 .mnctr_en_bit = 8,
 786                 .mnctr_reset_bit = 7,
 787                 .mnctr_mode_shift = 5,
 788                 .n_val_shift = 16,
 789                 .m_val_shift = 16,
 790                 .width = 16,
 791         },
 792         .p = {
 793                 .pre_div_shift = 3,
 794                 .pre_div_width = 2,
 795         },
 796         .s = {
 797                 .src_sel_shift = 0,
 798                 .parent_map = gcc_pxo_pll8_map,
 799         },
 800         .freq_tbl = clk_tbl_gsbi_uart,
 801         .clkr = {
 802                 .enable_reg = 0x2af4,
 803                 .enable_mask = BIT(11),
 804                 .hw.init = &(struct clk_init_data){
 805                         .name = "gsbi10_uart_src",
 806                         .parent_names = gcc_pxo_pll8,
 807                         .num_parents = 2,
 808                         .ops = &clk_rcg_ops,
 809                         .flags = CLK_SET_PARENT_GATE,
 810                 },
 811         },
 812 };
 813 
 814 static struct clk_branch gsbi10_uart_clk = {
 815         .halt_reg = 0x2fd0,
 816         .halt_bit = 2,
 817         .clkr = {
 818                 .enable_reg = 0x2af4,
 819                 .enable_mask = BIT(9),
 820                 .hw.init = &(struct clk_init_data){
 821                         .name = "gsbi10_uart_clk",
 822                         .parent_names = (const char *[]){ "gsbi10_uart_src" },
 823                         .num_parents = 1,
 824                         .ops = &clk_branch_ops,
 825                         .flags = CLK_SET_RATE_PARENT,
 826                 },
 827         },
 828 };
 829 
 830 static struct clk_rcg gsbi11_uart_src = {
 831         .ns_reg = 0x2b14,
 832         .md_reg = 0x2b10,
 833         .mn = {
 834                 .mnctr_en_bit = 8,
 835                 .mnctr_reset_bit = 7,
 836                 .mnctr_mode_shift = 5,
 837                 .n_val_shift = 16,
 838                 .m_val_shift = 16,
 839                 .width = 16,
 840         },
 841         .p = {
 842                 .pre_div_shift = 3,
 843                 .pre_div_width = 2,
 844         },
 845         .s = {
 846                 .src_sel_shift = 0,
 847                 .parent_map = gcc_pxo_pll8_map,
 848         },
 849         .freq_tbl = clk_tbl_gsbi_uart,
 850         .clkr = {
 851                 .enable_reg = 0x2b14,
 852                 .enable_mask = BIT(11),
 853                 .hw.init = &(struct clk_init_data){
 854                         .name = "gsbi11_uart_src",
 855                         .parent_names = gcc_pxo_pll8,
 856                         .num_parents = 2,
 857                         .ops = &clk_rcg_ops,
 858                         .flags = CLK_SET_PARENT_GATE,
 859                 },
 860         },
 861 };
 862 
 863 static struct clk_branch gsbi11_uart_clk = {
 864         .halt_reg = 0x2fd4,
 865         .halt_bit = 17,
 866         .clkr = {
 867                 .enable_reg = 0x2b14,
 868                 .enable_mask = BIT(9),
 869                 .hw.init = &(struct clk_init_data){
 870                         .name = "gsbi11_uart_clk",
 871                         .parent_names = (const char *[]){ "gsbi11_uart_src" },
 872                         .num_parents = 1,
 873                         .ops = &clk_branch_ops,
 874                         .flags = CLK_SET_RATE_PARENT,
 875                 },
 876         },
 877 };
 878 
 879 static struct clk_rcg gsbi12_uart_src = {
 880         .ns_reg = 0x2b34,
 881         .md_reg = 0x2b30,
 882         .mn = {
 883                 .mnctr_en_bit = 8,
 884                 .mnctr_reset_bit = 7,
 885                 .mnctr_mode_shift = 5,
 886                 .n_val_shift = 16,
 887                 .m_val_shift = 16,
 888                 .width = 16,
 889         },
 890         .p = {
 891                 .pre_div_shift = 3,
 892                 .pre_div_width = 2,
 893         },
 894         .s = {
 895                 .src_sel_shift = 0,
 896                 .parent_map = gcc_pxo_pll8_map,
 897         },
 898         .freq_tbl = clk_tbl_gsbi_uart,
 899         .clkr = {
 900                 .enable_reg = 0x2b34,
 901                 .enable_mask = BIT(11),
 902                 .hw.init = &(struct clk_init_data){
 903                         .name = "gsbi12_uart_src",
 904                         .parent_names = gcc_pxo_pll8,
 905                         .num_parents = 2,
 906                         .ops = &clk_rcg_ops,
 907                         .flags = CLK_SET_PARENT_GATE,
 908                 },
 909         },
 910 };
 911 
 912 static struct clk_branch gsbi12_uart_clk = {
 913         .halt_reg = 0x2fd4,
 914         .halt_bit = 13,
 915         .clkr = {
 916                 .enable_reg = 0x2b34,
 917                 .enable_mask = BIT(9),
 918                 .hw.init = &(struct clk_init_data){
 919                         .name = "gsbi12_uart_clk",
 920                         .parent_names = (const char *[]){ "gsbi12_uart_src" },
 921                         .num_parents = 1,
 922                         .ops = &clk_branch_ops,
 923                         .flags = CLK_SET_RATE_PARENT,
 924                 },
 925         },
 926 };
 927 
 928 static struct freq_tbl clk_tbl_gsbi_qup[] = {
 929         {  1100000, P_PXO,  1, 2, 49 },
 930         {  5400000, P_PXO,  1, 1,  5 },
 931         { 10800000, P_PXO,  1, 2,  5 },
 932         { 15060000, P_PLL8, 1, 2, 51 },
 933         { 24000000, P_PLL8, 4, 1,  4 },
 934         { 25600000, P_PLL8, 1, 1, 15 },
 935         { 27000000, P_PXO,  1, 0,  0 },
 936         { 48000000, P_PLL8, 4, 1,  2 },
 937         { 51200000, P_PLL8, 1, 2, 15 },
 938         { }
 939 };
 940 
 941 static struct clk_rcg gsbi1_qup_src = {
 942         .ns_reg = 0x29cc,
 943         .md_reg = 0x29c8,
 944         .mn = {
 945                 .mnctr_en_bit = 8,
 946                 .mnctr_reset_bit = 7,
 947                 .mnctr_mode_shift = 5,
 948                 .n_val_shift = 16,
 949                 .m_val_shift = 16,
 950                 .width = 8,
 951         },
 952         .p = {
 953                 .pre_div_shift = 3,
 954                 .pre_div_width = 2,
 955         },
 956         .s = {
 957                 .src_sel_shift = 0,
 958                 .parent_map = gcc_pxo_pll8_map,
 959         },
 960         .freq_tbl = clk_tbl_gsbi_qup,
 961         .clkr = {
 962                 .enable_reg = 0x29cc,
 963                 .enable_mask = BIT(11),
 964                 .hw.init = &(struct clk_init_data){
 965                         .name = "gsbi1_qup_src",
 966                         .parent_names = gcc_pxo_pll8,
 967                         .num_parents = 2,
 968                         .ops = &clk_rcg_ops,
 969                         .flags = CLK_SET_PARENT_GATE,
 970                 },
 971         },
 972 };
 973 
 974 static struct clk_branch gsbi1_qup_clk = {
 975         .halt_reg = 0x2fcc,
 976         .halt_bit = 9,
 977         .clkr = {
 978                 .enable_reg = 0x29cc,
 979                 .enable_mask = BIT(9),
 980                 .hw.init = &(struct clk_init_data){
 981                         .name = "gsbi1_qup_clk",
 982                         .parent_names = (const char *[]){ "gsbi1_qup_src" },
 983                         .num_parents = 1,
 984                         .ops = &clk_branch_ops,
 985                         .flags = CLK_SET_RATE_PARENT,
 986                 },
 987         },
 988 };
 989 
 990 static struct clk_rcg gsbi2_qup_src = {
 991         .ns_reg = 0x29ec,
 992         .md_reg = 0x29e8,
 993         .mn = {
 994                 .mnctr_en_bit = 8,
 995                 .mnctr_reset_bit = 7,
 996                 .mnctr_mode_shift = 5,
 997                 .n_val_shift = 16,
 998                 .m_val_shift = 16,
 999                 .width = 8,
1000         },
1001         .p = {
1002                 .pre_div_shift = 3,
1003                 .pre_div_width = 2,
1004         },
1005         .s = {
1006                 .src_sel_shift = 0,
1007                 .parent_map = gcc_pxo_pll8_map,
1008         },
1009         .freq_tbl = clk_tbl_gsbi_qup,
1010         .clkr = {
1011                 .enable_reg = 0x29ec,
1012                 .enable_mask = BIT(11),
1013                 .hw.init = &(struct clk_init_data){
1014                         .name = "gsbi2_qup_src",
1015                         .parent_names = gcc_pxo_pll8,
1016                         .num_parents = 2,
1017                         .ops = &clk_rcg_ops,
1018                         .flags = CLK_SET_PARENT_GATE,
1019                 },
1020         },
1021 };
1022 
1023 static struct clk_branch gsbi2_qup_clk = {
1024         .halt_reg = 0x2fcc,
1025         .halt_bit = 4,
1026         .clkr = {
1027                 .enable_reg = 0x29ec,
1028                 .enable_mask = BIT(9),
1029                 .hw.init = &(struct clk_init_data){
1030                         .name = "gsbi2_qup_clk",
1031                         .parent_names = (const char *[]){ "gsbi2_qup_src" },
1032                         .num_parents = 1,
1033                         .ops = &clk_branch_ops,
1034                         .flags = CLK_SET_RATE_PARENT,
1035                 },
1036         },
1037 };
1038 
1039 static struct clk_rcg gsbi3_qup_src = {
1040         .ns_reg = 0x2a0c,
1041         .md_reg = 0x2a08,
1042         .mn = {
1043                 .mnctr_en_bit = 8,
1044                 .mnctr_reset_bit = 7,
1045                 .mnctr_mode_shift = 5,
1046                 .n_val_shift = 16,
1047                 .m_val_shift = 16,
1048                 .width = 8,
1049         },
1050         .p = {
1051                 .pre_div_shift = 3,
1052                 .pre_div_width = 2,
1053         },
1054         .s = {
1055                 .src_sel_shift = 0,
1056                 .parent_map = gcc_pxo_pll8_map,
1057         },
1058         .freq_tbl = clk_tbl_gsbi_qup,
1059         .clkr = {
1060                 .enable_reg = 0x2a0c,
1061                 .enable_mask = BIT(11),
1062                 .hw.init = &(struct clk_init_data){
1063                         .name = "gsbi3_qup_src",
1064                         .parent_names = gcc_pxo_pll8,
1065                         .num_parents = 2,
1066                         .ops = &clk_rcg_ops,
1067                         .flags = CLK_SET_PARENT_GATE,
1068                 },
1069         },
1070 };
1071 
1072 static struct clk_branch gsbi3_qup_clk = {
1073         .halt_reg = 0x2fcc,
1074         .halt_bit = 0,
1075         .clkr = {
1076                 .enable_reg = 0x2a0c,
1077                 .enable_mask = BIT(9),
1078                 .hw.init = &(struct clk_init_data){
1079                         .name = "gsbi3_qup_clk",
1080                         .parent_names = (const char *[]){ "gsbi3_qup_src" },
1081                         .num_parents = 1,
1082                         .ops = &clk_branch_ops,
1083                         .flags = CLK_SET_RATE_PARENT,
1084                 },
1085         },
1086 };
1087 
1088 static struct clk_rcg gsbi4_qup_src = {
1089         .ns_reg = 0x2a2c,
1090         .md_reg = 0x2a28,
1091         .mn = {
1092                 .mnctr_en_bit = 8,
1093                 .mnctr_reset_bit = 7,
1094                 .mnctr_mode_shift = 5,
1095                 .n_val_shift = 16,
1096                 .m_val_shift = 16,
1097                 .width = 8,
1098         },
1099         .p = {
1100                 .pre_div_shift = 3,
1101                 .pre_div_width = 2,
1102         },
1103         .s = {
1104                 .src_sel_shift = 0,
1105                 .parent_map = gcc_pxo_pll8_map,
1106         },
1107         .freq_tbl = clk_tbl_gsbi_qup,
1108         .clkr = {
1109                 .enable_reg = 0x2a2c,
1110                 .enable_mask = BIT(11),
1111                 .hw.init = &(struct clk_init_data){
1112                         .name = "gsbi4_qup_src",
1113                         .parent_names = gcc_pxo_pll8,
1114                         .num_parents = 2,
1115                         .ops = &clk_rcg_ops,
1116                         .flags = CLK_SET_PARENT_GATE,
1117                 },
1118         },
1119 };
1120 
1121 static struct clk_branch gsbi4_qup_clk = {
1122         .halt_reg = 0x2fd0,
1123         .halt_bit = 24,
1124         .clkr = {
1125                 .enable_reg = 0x2a2c,
1126                 .enable_mask = BIT(9),
1127                 .hw.init = &(struct clk_init_data){
1128                         .name = "gsbi4_qup_clk",
1129                         .parent_names = (const char *[]){ "gsbi4_qup_src" },
1130                         .num_parents = 1,
1131                         .ops = &clk_branch_ops,
1132                         .flags = CLK_SET_RATE_PARENT,
1133                 },
1134         },
1135 };
1136 
1137 static struct clk_rcg gsbi5_qup_src = {
1138         .ns_reg = 0x2a4c,
1139         .md_reg = 0x2a48,
1140         .mn = {
1141                 .mnctr_en_bit = 8,
1142                 .mnctr_reset_bit = 7,
1143                 .mnctr_mode_shift = 5,
1144                 .n_val_shift = 16,
1145                 .m_val_shift = 16,
1146                 .width = 8,
1147         },
1148         .p = {
1149                 .pre_div_shift = 3,
1150                 .pre_div_width = 2,
1151         },
1152         .s = {
1153                 .src_sel_shift = 0,
1154                 .parent_map = gcc_pxo_pll8_map,
1155         },
1156         .freq_tbl = clk_tbl_gsbi_qup,
1157         .clkr = {
1158                 .enable_reg = 0x2a4c,
1159                 .enable_mask = BIT(11),
1160                 .hw.init = &(struct clk_init_data){
1161                         .name = "gsbi5_qup_src",
1162                         .parent_names = gcc_pxo_pll8,
1163                         .num_parents = 2,
1164                         .ops = &clk_rcg_ops,
1165                         .flags = CLK_SET_PARENT_GATE,
1166                 },
1167         },
1168 };
1169 
1170 static struct clk_branch gsbi5_qup_clk = {
1171         .halt_reg = 0x2fd0,
1172         .halt_bit = 20,
1173         .clkr = {
1174                 .enable_reg = 0x2a4c,
1175                 .enable_mask = BIT(9),
1176                 .hw.init = &(struct clk_init_data){
1177                         .name = "gsbi5_qup_clk",
1178                         .parent_names = (const char *[]){ "gsbi5_qup_src" },
1179                         .num_parents = 1,
1180                         .ops = &clk_branch_ops,
1181                         .flags = CLK_SET_RATE_PARENT,
1182                 },
1183         },
1184 };
1185 
1186 static struct clk_rcg gsbi6_qup_src = {
1187         .ns_reg = 0x2a6c,
1188         .md_reg = 0x2a68,
1189         .mn = {
1190                 .mnctr_en_bit = 8,
1191                 .mnctr_reset_bit = 7,
1192                 .mnctr_mode_shift = 5,
1193                 .n_val_shift = 16,
1194                 .m_val_shift = 16,
1195                 .width = 8,
1196         },
1197         .p = {
1198                 .pre_div_shift = 3,
1199                 .pre_div_width = 2,
1200         },
1201         .s = {
1202                 .src_sel_shift = 0,
1203                 .parent_map = gcc_pxo_pll8_map,
1204         },
1205         .freq_tbl = clk_tbl_gsbi_qup,
1206         .clkr = {
1207                 .enable_reg = 0x2a6c,
1208                 .enable_mask = BIT(11),
1209                 .hw.init = &(struct clk_init_data){
1210                         .name = "gsbi6_qup_src",
1211                         .parent_names = gcc_pxo_pll8,
1212                         .num_parents = 2,
1213                         .ops = &clk_rcg_ops,
1214                         .flags = CLK_SET_PARENT_GATE,
1215                 },
1216         },
1217 };
1218 
1219 static struct clk_branch gsbi6_qup_clk = {
1220         .halt_reg = 0x2fd0,
1221         .halt_bit = 16,
1222         .clkr = {
1223                 .enable_reg = 0x2a6c,
1224                 .enable_mask = BIT(9),
1225                 .hw.init = &(struct clk_init_data){
1226                         .name = "gsbi6_qup_clk",
1227                         .parent_names = (const char *[]){ "gsbi6_qup_src" },
1228                         .num_parents = 1,
1229                         .ops = &clk_branch_ops,
1230                         .flags = CLK_SET_RATE_PARENT,
1231                 },
1232         },
1233 };
1234 
1235 static struct clk_rcg gsbi7_qup_src = {
1236         .ns_reg = 0x2a8c,
1237         .md_reg = 0x2a88,
1238         .mn = {
1239                 .mnctr_en_bit = 8,
1240                 .mnctr_reset_bit = 7,
1241                 .mnctr_mode_shift = 5,
1242                 .n_val_shift = 16,
1243                 .m_val_shift = 16,
1244                 .width = 8,
1245         },
1246         .p = {
1247                 .pre_div_shift = 3,
1248                 .pre_div_width = 2,
1249         },
1250         .s = {
1251                 .src_sel_shift = 0,
1252                 .parent_map = gcc_pxo_pll8_map,
1253         },
1254         .freq_tbl = clk_tbl_gsbi_qup,
1255         .clkr = {
1256                 .enable_reg = 0x2a8c,
1257                 .enable_mask = BIT(11),
1258                 .hw.init = &(struct clk_init_data){
1259                         .name = "gsbi7_qup_src",
1260                         .parent_names = gcc_pxo_pll8,
1261                         .num_parents = 2,
1262                         .ops = &clk_rcg_ops,
1263                         .flags = CLK_SET_PARENT_GATE,
1264                 },
1265         },
1266 };
1267 
1268 static struct clk_branch gsbi7_qup_clk = {
1269         .halt_reg = 0x2fd0,
1270         .halt_bit = 12,
1271         .clkr = {
1272                 .enable_reg = 0x2a8c,
1273                 .enable_mask = BIT(9),
1274                 .hw.init = &(struct clk_init_data){
1275                         .name = "gsbi7_qup_clk",
1276                         .parent_names = (const char *[]){ "gsbi7_qup_src" },
1277                         .num_parents = 1,
1278                         .ops = &clk_branch_ops,
1279                         .flags = CLK_SET_RATE_PARENT,
1280                 },
1281         },
1282 };
1283 
1284 static struct clk_rcg gsbi8_qup_src = {
1285         .ns_reg = 0x2aac,
1286         .md_reg = 0x2aa8,
1287         .mn = {
1288                 .mnctr_en_bit = 8,
1289                 .mnctr_reset_bit = 7,
1290                 .mnctr_mode_shift = 5,
1291                 .n_val_shift = 16,
1292                 .m_val_shift = 16,
1293                 .width = 8,
1294         },
1295         .p = {
1296                 .pre_div_shift = 3,
1297                 .pre_div_width = 2,
1298         },
1299         .s = {
1300                 .src_sel_shift = 0,
1301                 .parent_map = gcc_pxo_pll8_map,
1302         },
1303         .freq_tbl = clk_tbl_gsbi_qup,
1304         .clkr = {
1305                 .enable_reg = 0x2aac,
1306                 .enable_mask = BIT(11),
1307                 .hw.init = &(struct clk_init_data){
1308                         .name = "gsbi8_qup_src",
1309                         .parent_names = gcc_pxo_pll8,
1310                         .num_parents = 2,
1311                         .ops = &clk_rcg_ops,
1312                         .flags = CLK_SET_PARENT_GATE,
1313                 },
1314         },
1315 };
1316 
1317 static struct clk_branch gsbi8_qup_clk = {
1318         .halt_reg = 0x2fd0,
1319         .halt_bit = 8,
1320         .clkr = {
1321                 .enable_reg = 0x2aac,
1322                 .enable_mask = BIT(9),
1323                 .hw.init = &(struct clk_init_data){
1324                         .name = "gsbi8_qup_clk",
1325                         .parent_names = (const char *[]){ "gsbi8_qup_src" },
1326                         .num_parents = 1,
1327                         .ops = &clk_branch_ops,
1328                         .flags = CLK_SET_RATE_PARENT,
1329                 },
1330         },
1331 };
1332 
1333 static struct clk_rcg gsbi9_qup_src = {
1334         .ns_reg = 0x2acc,
1335         .md_reg = 0x2ac8,
1336         .mn = {
1337                 .mnctr_en_bit = 8,
1338                 .mnctr_reset_bit = 7,
1339                 .mnctr_mode_shift = 5,
1340                 .n_val_shift = 16,
1341                 .m_val_shift = 16,
1342                 .width = 8,
1343         },
1344         .p = {
1345                 .pre_div_shift = 3,
1346                 .pre_div_width = 2,
1347         },
1348         .s = {
1349                 .src_sel_shift = 0,
1350                 .parent_map = gcc_pxo_pll8_map,
1351         },
1352         .freq_tbl = clk_tbl_gsbi_qup,
1353         .clkr = {
1354                 .enable_reg = 0x2acc,
1355                 .enable_mask = BIT(11),
1356                 .hw.init = &(struct clk_init_data){
1357                         .name = "gsbi9_qup_src",
1358                         .parent_names = gcc_pxo_pll8,
1359                         .num_parents = 2,
1360                         .ops = &clk_rcg_ops,
1361                         .flags = CLK_SET_PARENT_GATE,
1362                 },
1363         },
1364 };
1365 
1366 static struct clk_branch gsbi9_qup_clk = {
1367         .halt_reg = 0x2fd0,
1368         .halt_bit = 4,
1369         .clkr = {
1370                 .enable_reg = 0x2acc,
1371                 .enable_mask = BIT(9),
1372                 .hw.init = &(struct clk_init_data){
1373                         .name = "gsbi9_qup_clk",
1374                         .parent_names = (const char *[]){ "gsbi9_qup_src" },
1375                         .num_parents = 1,
1376                         .ops = &clk_branch_ops,
1377                         .flags = CLK_SET_RATE_PARENT,
1378                 },
1379         },
1380 };
1381 
1382 static struct clk_rcg gsbi10_qup_src = {
1383         .ns_reg = 0x2aec,
1384         .md_reg = 0x2ae8,
1385         .mn = {
1386                 .mnctr_en_bit = 8,
1387                 .mnctr_reset_bit = 7,
1388                 .mnctr_mode_shift = 5,
1389                 .n_val_shift = 16,
1390                 .m_val_shift = 16,
1391                 .width = 8,
1392         },
1393         .p = {
1394                 .pre_div_shift = 3,
1395                 .pre_div_width = 2,
1396         },
1397         .s = {
1398                 .src_sel_shift = 0,
1399                 .parent_map = gcc_pxo_pll8_map,
1400         },
1401         .freq_tbl = clk_tbl_gsbi_qup,
1402         .clkr = {
1403                 .enable_reg = 0x2aec,
1404                 .enable_mask = BIT(11),
1405                 .hw.init = &(struct clk_init_data){
1406                         .name = "gsbi10_qup_src",
1407                         .parent_names = gcc_pxo_pll8,
1408                         .num_parents = 2,
1409                         .ops = &clk_rcg_ops,
1410                         .flags = CLK_SET_PARENT_GATE,
1411                 },
1412         },
1413 };
1414 
1415 static struct clk_branch gsbi10_qup_clk = {
1416         .halt_reg = 0x2fd0,
1417         .halt_bit = 0,
1418         .clkr = {
1419                 .enable_reg = 0x2aec,
1420                 .enable_mask = BIT(9),
1421                 .hw.init = &(struct clk_init_data){
1422                         .name = "gsbi10_qup_clk",
1423                         .parent_names = (const char *[]){ "gsbi10_qup_src" },
1424                         .num_parents = 1,
1425                         .ops = &clk_branch_ops,
1426                         .flags = CLK_SET_RATE_PARENT,
1427                 },
1428         },
1429 };
1430 
1431 static struct clk_rcg gsbi11_qup_src = {
1432         .ns_reg = 0x2b0c,
1433         .md_reg = 0x2b08,
1434         .mn = {
1435                 .mnctr_en_bit = 8,
1436                 .mnctr_reset_bit = 7,
1437                 .mnctr_mode_shift = 5,
1438                 .n_val_shift = 16,
1439                 .m_val_shift = 16,
1440                 .width = 8,
1441         },
1442         .p = {
1443                 .pre_div_shift = 3,
1444                 .pre_div_width = 2,
1445         },
1446         .s = {
1447                 .src_sel_shift = 0,
1448                 .parent_map = gcc_pxo_pll8_map,
1449         },
1450         .freq_tbl = clk_tbl_gsbi_qup,
1451         .clkr = {
1452                 .enable_reg = 0x2b0c,
1453                 .enable_mask = BIT(11),
1454                 .hw.init = &(struct clk_init_data){
1455                         .name = "gsbi11_qup_src",
1456                         .parent_names = gcc_pxo_pll8,
1457                         .num_parents = 2,
1458                         .ops = &clk_rcg_ops,
1459                         .flags = CLK_SET_PARENT_GATE,
1460                 },
1461         },
1462 };
1463 
1464 static struct clk_branch gsbi11_qup_clk = {
1465         .halt_reg = 0x2fd4,
1466         .halt_bit = 15,
1467         .clkr = {
1468                 .enable_reg = 0x2b0c,
1469                 .enable_mask = BIT(9),
1470                 .hw.init = &(struct clk_init_data){
1471                         .name = "gsbi11_qup_clk",
1472                         .parent_names = (const char *[]){ "gsbi11_qup_src" },
1473                         .num_parents = 1,
1474                         .ops = &clk_branch_ops,
1475                         .flags = CLK_SET_RATE_PARENT,
1476                 },
1477         },
1478 };
1479 
1480 static struct clk_rcg gsbi12_qup_src = {
1481         .ns_reg = 0x2b2c,
1482         .md_reg = 0x2b28,
1483         .mn = {
1484                 .mnctr_en_bit = 8,
1485                 .mnctr_reset_bit = 7,
1486                 .mnctr_mode_shift = 5,
1487                 .n_val_shift = 16,
1488                 .m_val_shift = 16,
1489                 .width = 8,
1490         },
1491         .p = {
1492                 .pre_div_shift = 3,
1493                 .pre_div_width = 2,
1494         },
1495         .s = {
1496                 .src_sel_shift = 0,
1497                 .parent_map = gcc_pxo_pll8_map,
1498         },
1499         .freq_tbl = clk_tbl_gsbi_qup,
1500         .clkr = {
1501                 .enable_reg = 0x2b2c,
1502                 .enable_mask = BIT(11),
1503                 .hw.init = &(struct clk_init_data){
1504                         .name = "gsbi12_qup_src",
1505                         .parent_names = gcc_pxo_pll8,
1506                         .num_parents = 2,
1507                         .ops = &clk_rcg_ops,
1508                         .flags = CLK_SET_PARENT_GATE,
1509                 },
1510         },
1511 };
1512 
1513 static struct clk_branch gsbi12_qup_clk = {
1514         .halt_reg = 0x2fd4,
1515         .halt_bit = 11,
1516         .clkr = {
1517                 .enable_reg = 0x2b2c,
1518                 .enable_mask = BIT(9),
1519                 .hw.init = &(struct clk_init_data){
1520                         .name = "gsbi12_qup_clk",
1521                         .parent_names = (const char *[]){ "gsbi12_qup_src" },
1522                         .num_parents = 1,
1523                         .ops = &clk_branch_ops,
1524                         .flags = CLK_SET_RATE_PARENT,
1525                 },
1526         },
1527 };
1528 
1529 static const struct freq_tbl clk_tbl_gp[] = {
1530         { 9600000, P_CXO,  2, 0, 0 },
1531         { 13500000, P_PXO,  2, 0, 0 },
1532         { 19200000, P_CXO,  1, 0, 0 },
1533         { 27000000, P_PXO,  1, 0, 0 },
1534         { 64000000, P_PLL8, 2, 1, 3 },
1535         { 76800000, P_PLL8, 1, 1, 5 },
1536         { 96000000, P_PLL8, 4, 0, 0 },
1537         { 128000000, P_PLL8, 3, 0, 0 },
1538         { 192000000, P_PLL8, 2, 0, 0 },
1539         { }
1540 };
1541 
1542 static struct clk_rcg gp0_src = {
1543         .ns_reg = 0x2d24,
1544         .md_reg = 0x2d00,
1545         .mn = {
1546                 .mnctr_en_bit = 8,
1547                 .mnctr_reset_bit = 7,
1548                 .mnctr_mode_shift = 5,
1549                 .n_val_shift = 16,
1550                 .m_val_shift = 16,
1551                 .width = 8,
1552         },
1553         .p = {
1554                 .pre_div_shift = 3,
1555                 .pre_div_width = 2,
1556         },
1557         .s = {
1558                 .src_sel_shift = 0,
1559                 .parent_map = gcc_pxo_pll8_cxo_map,
1560         },
1561         .freq_tbl = clk_tbl_gp,
1562         .clkr = {
1563                 .enable_reg = 0x2d24,
1564                 .enable_mask = BIT(11),
1565                 .hw.init = &(struct clk_init_data){
1566                         .name = "gp0_src",
1567                         .parent_names = gcc_pxo_pll8_cxo,
1568                         .num_parents = 3,
1569                         .ops = &clk_rcg_ops,
1570                         .flags = CLK_SET_PARENT_GATE,
1571                 },
1572         }
1573 };
1574 
1575 static struct clk_branch gp0_clk = {
1576         .halt_reg = 0x2fd8,
1577         .halt_bit = 7,
1578         .clkr = {
1579                 .enable_reg = 0x2d24,
1580                 .enable_mask = BIT(9),
1581                 .hw.init = &(struct clk_init_data){
1582                         .name = "gp0_clk",
1583                         .parent_names = (const char *[]){ "gp0_src" },
1584                         .num_parents = 1,
1585                         .ops = &clk_branch_ops,
1586                         .flags = CLK_SET_RATE_PARENT,
1587                 },
1588         },
1589 };
1590 
1591 static struct clk_rcg gp1_src = {
1592         .ns_reg = 0x2d44,
1593         .md_reg = 0x2d40,
1594         .mn = {
1595                 .mnctr_en_bit = 8,
1596                 .mnctr_reset_bit = 7,
1597                 .mnctr_mode_shift = 5,
1598                 .n_val_shift = 16,
1599                 .m_val_shift = 16,
1600                 .width = 8,
1601         },
1602         .p = {
1603                 .pre_div_shift = 3,
1604                 .pre_div_width = 2,
1605         },
1606         .s = {
1607                 .src_sel_shift = 0,
1608                 .parent_map = gcc_pxo_pll8_cxo_map,
1609         },
1610         .freq_tbl = clk_tbl_gp,
1611         .clkr = {
1612                 .enable_reg = 0x2d44,
1613                 .enable_mask = BIT(11),
1614                 .hw.init = &(struct clk_init_data){
1615                         .name = "gp1_src",
1616                         .parent_names = gcc_pxo_pll8_cxo,
1617                         .num_parents = 3,
1618                         .ops = &clk_rcg_ops,
1619                         .flags = CLK_SET_RATE_GATE,
1620                 },
1621         }
1622 };
1623 
1624 static struct clk_branch gp1_clk = {
1625         .halt_reg = 0x2fd8,
1626         .halt_bit = 6,
1627         .clkr = {
1628                 .enable_reg = 0x2d44,
1629                 .enable_mask = BIT(9),
1630                 .hw.init = &(struct clk_init_data){
1631                         .name = "gp1_clk",
1632                         .parent_names = (const char *[]){ "gp1_src" },
1633                         .num_parents = 1,
1634                         .ops = &clk_branch_ops,
1635                         .flags = CLK_SET_RATE_PARENT,
1636                 },
1637         },
1638 };
1639 
1640 static struct clk_rcg gp2_src = {
1641         .ns_reg = 0x2d64,
1642         .md_reg = 0x2d60,
1643         .mn = {
1644                 .mnctr_en_bit = 8,
1645                 .mnctr_reset_bit = 7,
1646                 .mnctr_mode_shift = 5,
1647                 .n_val_shift = 16,
1648                 .m_val_shift = 16,
1649                 .width = 8,
1650         },
1651         .p = {
1652                 .pre_div_shift = 3,
1653                 .pre_div_width = 2,
1654         },
1655         .s = {
1656                 .src_sel_shift = 0,
1657                 .parent_map = gcc_pxo_pll8_cxo_map,
1658         },
1659         .freq_tbl = clk_tbl_gp,
1660         .clkr = {
1661                 .enable_reg = 0x2d64,
1662                 .enable_mask = BIT(11),
1663                 .hw.init = &(struct clk_init_data){
1664                         .name = "gp2_src",
1665                         .parent_names = gcc_pxo_pll8_cxo,
1666                         .num_parents = 3,
1667                         .ops = &clk_rcg_ops,
1668                         .flags = CLK_SET_RATE_GATE,
1669                 },
1670         }
1671 };
1672 
1673 static struct clk_branch gp2_clk = {
1674         .halt_reg = 0x2fd8,
1675         .halt_bit = 5,
1676         .clkr = {
1677                 .enable_reg = 0x2d64,
1678                 .enable_mask = BIT(9),
1679                 .hw.init = &(struct clk_init_data){
1680                         .name = "gp2_clk",
1681                         .parent_names = (const char *[]){ "gp2_src" },
1682                         .num_parents = 1,
1683                         .ops = &clk_branch_ops,
1684                         .flags = CLK_SET_RATE_PARENT,
1685                 },
1686         },
1687 };
1688 
1689 static struct clk_branch pmem_clk = {
1690         .hwcg_reg = 0x25a0,
1691         .hwcg_bit = 6,
1692         .halt_reg = 0x2fc8,
1693         .halt_bit = 20,
1694         .clkr = {
1695                 .enable_reg = 0x25a0,
1696                 .enable_mask = BIT(4),
1697                 .hw.init = &(struct clk_init_data){
1698                         .name = "pmem_clk",
1699                         .ops = &clk_branch_ops,
1700                 },
1701         },
1702 };
1703 
1704 static struct clk_rcg prng_src = {
1705         .ns_reg = 0x2e80,
1706         .p = {
1707                 .pre_div_shift = 3,
1708                 .pre_div_width = 4,
1709         },
1710         .s = {
1711                 .src_sel_shift = 0,
1712                 .parent_map = gcc_pxo_pll8_map,
1713         },
1714         .clkr = {
1715                 .hw.init = &(struct clk_init_data){
1716                         .name = "prng_src",
1717                         .parent_names = gcc_pxo_pll8,
1718                         .num_parents = 2,
1719                         .ops = &clk_rcg_ops,
1720                 },
1721         },
1722 };
1723 
1724 static struct clk_branch prng_clk = {
1725         .halt_reg = 0x2fd8,
1726         .halt_check = BRANCH_HALT_VOTED,
1727         .halt_bit = 10,
1728         .clkr = {
1729                 .enable_reg = 0x3080,
1730                 .enable_mask = BIT(10),
1731                 .hw.init = &(struct clk_init_data){
1732                         .name = "prng_clk",
1733                         .parent_names = (const char *[]){ "prng_src" },
1734                         .num_parents = 1,
1735                         .ops = &clk_branch_ops,
1736                 },
1737         },
1738 };
1739 
1740 static const struct freq_tbl clk_tbl_sdc[] = {
1741         {    144000, P_PXO,   3, 2, 125 },
1742         {    400000, P_PLL8,  4, 1, 240 },
1743         {  16000000, P_PLL8,  4, 1,   6 },
1744         {  17070000, P_PLL8,  1, 2,  45 },
1745         {  20210000, P_PLL8,  1, 1,  19 },
1746         {  24000000, P_PLL8,  4, 1,   4 },
1747         {  48000000, P_PLL8,  4, 1,   2 },
1748         {  64000000, P_PLL8,  3, 1,   2 },
1749         {  96000000, P_PLL8,  4, 0,   0 },
1750         { 192000000, P_PLL8,  2, 0,   0 },
1751         { }
1752 };
1753 
1754 static struct clk_rcg sdc1_src = {
1755         .ns_reg = 0x282c,
1756         .md_reg = 0x2828,
1757         .mn = {
1758                 .mnctr_en_bit = 8,
1759                 .mnctr_reset_bit = 7,
1760                 .mnctr_mode_shift = 5,
1761                 .n_val_shift = 16,
1762                 .m_val_shift = 16,
1763                 .width = 8,
1764         },
1765         .p = {
1766                 .pre_div_shift = 3,
1767                 .pre_div_width = 2,
1768         },
1769         .s = {
1770                 .src_sel_shift = 0,
1771                 .parent_map = gcc_pxo_pll8_map,
1772         },
1773         .freq_tbl = clk_tbl_sdc,
1774         .clkr = {
1775                 .enable_reg = 0x282c,
1776                 .enable_mask = BIT(11),
1777                 .hw.init = &(struct clk_init_data){
1778                         .name = "sdc1_src",
1779                         .parent_names = gcc_pxo_pll8,
1780                         .num_parents = 2,
1781                         .ops = &clk_rcg_ops,
1782                 },
1783         }
1784 };
1785 
1786 static struct clk_branch sdc1_clk = {
1787         .halt_reg = 0x2fc8,
1788         .halt_bit = 6,
1789         .clkr = {
1790                 .enable_reg = 0x282c,
1791                 .enable_mask = BIT(9),
1792                 .hw.init = &(struct clk_init_data){
1793                         .name = "sdc1_clk",
1794                         .parent_names = (const char *[]){ "sdc1_src" },
1795                         .num_parents = 1,
1796                         .ops = &clk_branch_ops,
1797                         .flags = CLK_SET_RATE_PARENT,
1798                 },
1799         },
1800 };
1801 
1802 static struct clk_rcg sdc2_src = {
1803         .ns_reg = 0x284c,
1804         .md_reg = 0x2848,
1805         .mn = {
1806                 .mnctr_en_bit = 8,
1807                 .mnctr_reset_bit = 7,
1808                 .mnctr_mode_shift = 5,
1809                 .n_val_shift = 16,
1810                 .m_val_shift = 16,
1811                 .width = 8,
1812         },
1813         .p = {
1814                 .pre_div_shift = 3,
1815                 .pre_div_width = 2,
1816         },
1817         .s = {
1818                 .src_sel_shift = 0,
1819                 .parent_map = gcc_pxo_pll8_map,
1820         },
1821         .freq_tbl = clk_tbl_sdc,
1822         .clkr = {
1823                 .enable_reg = 0x284c,
1824                 .enable_mask = BIT(11),
1825                 .hw.init = &(struct clk_init_data){
1826                         .name = "sdc2_src",
1827                         .parent_names = gcc_pxo_pll8,
1828                         .num_parents = 2,
1829                         .ops = &clk_rcg_ops,
1830                 },
1831         }
1832 };
1833 
1834 static struct clk_branch sdc2_clk = {
1835         .halt_reg = 0x2fc8,
1836         .halt_bit = 5,
1837         .clkr = {
1838                 .enable_reg = 0x284c,
1839                 .enable_mask = BIT(9),
1840                 .hw.init = &(struct clk_init_data){
1841                         .name = "sdc2_clk",
1842                         .parent_names = (const char *[]){ "sdc2_src" },
1843                         .num_parents = 1,
1844                         .ops = &clk_branch_ops,
1845                         .flags = CLK_SET_RATE_PARENT,
1846                 },
1847         },
1848 };
1849 
1850 static struct clk_rcg sdc3_src = {
1851         .ns_reg = 0x286c,
1852         .md_reg = 0x2868,
1853         .mn = {
1854                 .mnctr_en_bit = 8,
1855                 .mnctr_reset_bit = 7,
1856                 .mnctr_mode_shift = 5,
1857                 .n_val_shift = 16,
1858                 .m_val_shift = 16,
1859                 .width = 8,
1860         },
1861         .p = {
1862                 .pre_div_shift = 3,
1863                 .pre_div_width = 2,
1864         },
1865         .s = {
1866                 .src_sel_shift = 0,
1867                 .parent_map = gcc_pxo_pll8_map,
1868         },
1869         .freq_tbl = clk_tbl_sdc,
1870         .clkr = {
1871                 .enable_reg = 0x286c,
1872                 .enable_mask = BIT(11),
1873                 .hw.init = &(struct clk_init_data){
1874                         .name = "sdc3_src",
1875                         .parent_names = gcc_pxo_pll8,
1876                         .num_parents = 2,
1877                         .ops = &clk_rcg_ops,
1878                 },
1879         }
1880 };
1881 
1882 static struct clk_branch sdc3_clk = {
1883         .halt_reg = 0x2fc8,
1884         .halt_bit = 4,
1885         .clkr = {
1886                 .enable_reg = 0x286c,
1887                 .enable_mask = BIT(9),
1888                 .hw.init = &(struct clk_init_data){
1889                         .name = "sdc3_clk",
1890                         .parent_names = (const char *[]){ "sdc3_src" },
1891                         .num_parents = 1,
1892                         .ops = &clk_branch_ops,
1893                         .flags = CLK_SET_RATE_PARENT,
1894                 },
1895         },
1896 };
1897 
1898 static struct clk_rcg sdc4_src = {
1899         .ns_reg = 0x288c,
1900         .md_reg = 0x2888,
1901         .mn = {
1902                 .mnctr_en_bit = 8,
1903                 .mnctr_reset_bit = 7,
1904                 .mnctr_mode_shift = 5,
1905                 .n_val_shift = 16,
1906                 .m_val_shift = 16,
1907                 .width = 8,
1908         },
1909         .p = {
1910                 .pre_div_shift = 3,
1911                 .pre_div_width = 2,
1912         },
1913         .s = {
1914                 .src_sel_shift = 0,
1915                 .parent_map = gcc_pxo_pll8_map,
1916         },
1917         .freq_tbl = clk_tbl_sdc,
1918         .clkr = {
1919                 .enable_reg = 0x288c,
1920                 .enable_mask = BIT(11),
1921                 .hw.init = &(struct clk_init_data){
1922                         .name = "sdc4_src",
1923                         .parent_names = gcc_pxo_pll8,
1924                         .num_parents = 2,
1925                         .ops = &clk_rcg_ops,
1926                 },
1927         }
1928 };
1929 
1930 static struct clk_branch sdc4_clk = {
1931         .halt_reg = 0x2fc8,
1932         .halt_bit = 3,
1933         .clkr = {
1934                 .enable_reg = 0x288c,
1935                 .enable_mask = BIT(9),
1936                 .hw.init = &(struct clk_init_data){
1937                         .name = "sdc4_clk",
1938                         .parent_names = (const char *[]){ "sdc4_src" },
1939                         .num_parents = 1,
1940                         .ops = &clk_branch_ops,
1941                         .flags = CLK_SET_RATE_PARENT,
1942                 },
1943         },
1944 };
1945 
1946 static struct clk_rcg sdc5_src = {
1947         .ns_reg = 0x28ac,
1948         .md_reg = 0x28a8,
1949         .mn = {
1950                 .mnctr_en_bit = 8,
1951                 .mnctr_reset_bit = 7,
1952                 .mnctr_mode_shift = 5,
1953                 .n_val_shift = 16,
1954                 .m_val_shift = 16,
1955                 .width = 8,
1956         },
1957         .p = {
1958                 .pre_div_shift = 3,
1959                 .pre_div_width = 2,
1960         },
1961         .s = {
1962                 .src_sel_shift = 0,
1963                 .parent_map = gcc_pxo_pll8_map,
1964         },
1965         .freq_tbl = clk_tbl_sdc,
1966         .clkr = {
1967                 .enable_reg = 0x28ac,
1968                 .enable_mask = BIT(11),
1969                 .hw.init = &(struct clk_init_data){
1970                         .name = "sdc5_src",
1971                         .parent_names = gcc_pxo_pll8,
1972                         .num_parents = 2,
1973                         .ops = &clk_rcg_ops,
1974                 },
1975         }
1976 };
1977 
1978 static struct clk_branch sdc5_clk = {
1979         .halt_reg = 0x2fc8,
1980         .halt_bit = 2,
1981         .clkr = {
1982                 .enable_reg = 0x28ac,
1983                 .enable_mask = BIT(9),
1984                 .hw.init = &(struct clk_init_data){
1985                         .name = "sdc5_clk",
1986                         .parent_names = (const char *[]){ "sdc5_src" },
1987                         .num_parents = 1,
1988                         .ops = &clk_branch_ops,
1989                         .flags = CLK_SET_RATE_PARENT,
1990                 },
1991         },
1992 };
1993 
1994 static const struct freq_tbl clk_tbl_tsif_ref[] = {
1995         { 105000, P_PXO,  1, 1, 256 },
1996         { }
1997 };
1998 
1999 static struct clk_rcg tsif_ref_src = {
2000         .ns_reg = 0x2710,
2001         .md_reg = 0x270c,
2002         .mn = {
2003                 .mnctr_en_bit = 8,
2004                 .mnctr_reset_bit = 7,
2005                 .mnctr_mode_shift = 5,
2006                 .n_val_shift = 16,
2007                 .m_val_shift = 16,
2008                 .width = 16,
2009         },
2010         .p = {
2011                 .pre_div_shift = 3,
2012                 .pre_div_width = 2,
2013         },
2014         .s = {
2015                 .src_sel_shift = 0,
2016                 .parent_map = gcc_pxo_pll8_map,
2017         },
2018         .freq_tbl = clk_tbl_tsif_ref,
2019         .clkr = {
2020                 .enable_reg = 0x2710,
2021                 .enable_mask = BIT(11),
2022                 .hw.init = &(struct clk_init_data){
2023                         .name = "tsif_ref_src",
2024                         .parent_names = gcc_pxo_pll8,
2025                         .num_parents = 2,
2026                         .ops = &clk_rcg_ops,
2027                         .flags = CLK_SET_RATE_GATE,
2028                 },
2029         }
2030 };
2031 
2032 static struct clk_branch tsif_ref_clk = {
2033         .halt_reg = 0x2fd4,
2034         .halt_bit = 5,
2035         .clkr = {
2036                 .enable_reg = 0x2710,
2037                 .enable_mask = BIT(9),
2038                 .hw.init = &(struct clk_init_data){
2039                         .name = "tsif_ref_clk",
2040                         .parent_names = (const char *[]){ "tsif_ref_src" },
2041                         .num_parents = 1,
2042                         .ops = &clk_branch_ops,
2043                         .flags = CLK_SET_RATE_PARENT,
2044                 },
2045         },
2046 };
2047 
2048 static const struct freq_tbl clk_tbl_usb[] = {
2049         { 60000000, P_PLL8, 1, 5, 32 },
2050         { }
2051 };
2052 
2053 static struct clk_rcg usb_hs1_xcvr_src = {
2054         .ns_reg = 0x290c,
2055         .md_reg = 0x2908,
2056         .mn = {
2057                 .mnctr_en_bit = 8,
2058                 .mnctr_reset_bit = 7,
2059                 .mnctr_mode_shift = 5,
2060                 .n_val_shift = 16,
2061                 .m_val_shift = 16,
2062                 .width = 8,
2063         },
2064         .p = {
2065                 .pre_div_shift = 3,
2066                 .pre_div_width = 2,
2067         },
2068         .s = {
2069                 .src_sel_shift = 0,
2070                 .parent_map = gcc_pxo_pll8_map,
2071         },
2072         .freq_tbl = clk_tbl_usb,
2073         .clkr = {
2074                 .enable_reg = 0x290c,
2075                 .enable_mask = BIT(11),
2076                 .hw.init = &(struct clk_init_data){
2077                         .name = "usb_hs1_xcvr_src",
2078                         .parent_names = gcc_pxo_pll8,
2079                         .num_parents = 2,
2080                         .ops = &clk_rcg_ops,
2081                         .flags = CLK_SET_RATE_GATE,
2082                 },
2083         }
2084 };
2085 
2086 static struct clk_branch usb_hs1_xcvr_clk = {
2087         .halt_reg = 0x2fc8,
2088         .halt_bit = 0,
2089         .clkr = {
2090                 .enable_reg = 0x290c,
2091                 .enable_mask = BIT(9),
2092                 .hw.init = &(struct clk_init_data){
2093                         .name = "usb_hs1_xcvr_clk",
2094                         .parent_names = (const char *[]){ "usb_hs1_xcvr_src" },
2095                         .num_parents = 1,
2096                         .ops = &clk_branch_ops,
2097                         .flags = CLK_SET_RATE_PARENT,
2098                 },
2099         },
2100 };
2101 
2102 static struct clk_rcg usb_hs3_xcvr_src = {
2103         .ns_reg = 0x370c,
2104         .md_reg = 0x3708,
2105         .mn = {
2106                 .mnctr_en_bit = 8,
2107                 .mnctr_reset_bit = 7,
2108                 .mnctr_mode_shift = 5,
2109                 .n_val_shift = 16,
2110                 .m_val_shift = 16,
2111                 .width = 8,
2112         },
2113         .p = {
2114                 .pre_div_shift = 3,
2115                 .pre_div_width = 2,
2116         },
2117         .s = {
2118                 .src_sel_shift = 0,
2119                 .parent_map = gcc_pxo_pll8_map,
2120         },
2121         .freq_tbl = clk_tbl_usb,
2122         .clkr = {
2123                 .enable_reg = 0x370c,
2124                 .enable_mask = BIT(11),
2125                 .hw.init = &(struct clk_init_data){
2126                         .name = "usb_hs3_xcvr_src",
2127                         .parent_names = gcc_pxo_pll8,
2128                         .num_parents = 2,
2129                         .ops = &clk_rcg_ops,
2130                         .flags = CLK_SET_RATE_GATE,
2131                 },
2132         }
2133 };
2134 
2135 static struct clk_branch usb_hs3_xcvr_clk = {
2136         .halt_reg = 0x2fc8,
2137         .halt_bit = 30,
2138         .clkr = {
2139                 .enable_reg = 0x370c,
2140                 .enable_mask = BIT(9),
2141                 .hw.init = &(struct clk_init_data){
2142                         .name = "usb_hs3_xcvr_clk",
2143                         .parent_names = (const char *[]){ "usb_hs3_xcvr_src" },
2144                         .num_parents = 1,
2145                         .ops = &clk_branch_ops,
2146                         .flags = CLK_SET_RATE_PARENT,
2147                 },
2148         },
2149 };
2150 
2151 static struct clk_rcg usb_hs4_xcvr_src = {
2152         .ns_reg = 0x372c,
2153         .md_reg = 0x3728,
2154         .mn = {
2155                 .mnctr_en_bit = 8,
2156                 .mnctr_reset_bit = 7,
2157                 .mnctr_mode_shift = 5,
2158                 .n_val_shift = 16,
2159                 .m_val_shift = 16,
2160                 .width = 8,
2161         },
2162         .p = {
2163                 .pre_div_shift = 3,
2164                 .pre_div_width = 2,
2165         },
2166         .s = {
2167                 .src_sel_shift = 0,
2168                 .parent_map = gcc_pxo_pll8_map,
2169         },
2170         .freq_tbl = clk_tbl_usb,
2171         .clkr = {
2172                 .enable_reg = 0x372c,
2173                 .enable_mask = BIT(11),
2174                 .hw.init = &(struct clk_init_data){
2175                         .name = "usb_hs4_xcvr_src",
2176                         .parent_names = gcc_pxo_pll8,
2177                         .num_parents = 2,
2178                         .ops = &clk_rcg_ops,
2179                         .flags = CLK_SET_RATE_GATE,
2180                 },
2181         }
2182 };
2183 
2184 static struct clk_branch usb_hs4_xcvr_clk = {
2185         .halt_reg = 0x2fc8,
2186         .halt_bit = 2,
2187         .clkr = {
2188                 .enable_reg = 0x372c,
2189                 .enable_mask = BIT(9),
2190                 .hw.init = &(struct clk_init_data){
2191                         .name = "usb_hs4_xcvr_clk",
2192                         .parent_names = (const char *[]){ "usb_hs4_xcvr_src" },
2193                         .num_parents = 1,
2194                         .ops = &clk_branch_ops,
2195                         .flags = CLK_SET_RATE_PARENT,
2196                 },
2197         },
2198 };
2199 
2200 static struct clk_rcg usb_hsic_xcvr_fs_src = {
2201         .ns_reg = 0x2928,
2202         .md_reg = 0x2924,
2203         .mn = {
2204                 .mnctr_en_bit = 8,
2205                 .mnctr_reset_bit = 7,
2206                 .mnctr_mode_shift = 5,
2207                 .n_val_shift = 16,
2208                 .m_val_shift = 16,
2209                 .width = 8,
2210         },
2211         .p = {
2212                 .pre_div_shift = 3,
2213                 .pre_div_width = 2,
2214         },
2215         .s = {
2216                 .src_sel_shift = 0,
2217                 .parent_map = gcc_pxo_pll8_map,
2218         },
2219         .freq_tbl = clk_tbl_usb,
2220         .clkr = {
2221                 .enable_reg = 0x2928,
2222                 .enable_mask = BIT(11),
2223                 .hw.init = &(struct clk_init_data){
2224                         .name = "usb_hsic_xcvr_fs_src",
2225                         .parent_names = gcc_pxo_pll8,
2226                         .num_parents = 2,
2227                         .ops = &clk_rcg_ops,
2228                         .flags = CLK_SET_RATE_GATE,
2229                 },
2230         }
2231 };
2232 
2233 static const char * const usb_hsic_xcvr_fs_src_p[] = { "usb_hsic_xcvr_fs_src" };
2234 
2235 static struct clk_branch usb_hsic_xcvr_fs_clk = {
2236         .halt_reg = 0x2fc8,
2237         .halt_bit = 2,
2238         .clkr = {
2239                 .enable_reg = 0x2928,
2240                 .enable_mask = BIT(9),
2241                 .hw.init = &(struct clk_init_data){
2242                         .name = "usb_hsic_xcvr_fs_clk",
2243                         .parent_names = usb_hsic_xcvr_fs_src_p,
2244                         .num_parents = 1,
2245                         .ops = &clk_branch_ops,
2246                         .flags = CLK_SET_RATE_PARENT,
2247                 },
2248         },
2249 };
2250 
2251 static struct clk_branch usb_hsic_system_clk = {
2252         .halt_reg = 0x2fcc,
2253         .halt_bit = 24,
2254         .clkr = {
2255                 .enable_reg = 0x292c,
2256                 .enable_mask = BIT(4),
2257                 .hw.init = &(struct clk_init_data){
2258                         .parent_names = usb_hsic_xcvr_fs_src_p,
2259                         .num_parents = 1,
2260                         .name = "usb_hsic_system_clk",
2261                         .ops = &clk_branch_ops,
2262                         .flags = CLK_SET_RATE_PARENT,
2263                 },
2264         },
2265 };
2266 
2267 static struct clk_branch usb_hsic_hsic_clk = {
2268         .halt_reg = 0x2fcc,
2269         .halt_bit = 19,
2270         .clkr = {
2271                 .enable_reg = 0x2b44,
2272                 .enable_mask = BIT(0),
2273                 .hw.init = &(struct clk_init_data){
2274                         .parent_names = (const char *[]){ "pll14_vote" },
2275                         .num_parents = 1,
2276                         .name = "usb_hsic_hsic_clk",
2277                         .ops = &clk_branch_ops,
2278                 },
2279         },
2280 };
2281 
2282 static struct clk_branch usb_hsic_hsio_cal_clk = {
2283         .halt_reg = 0x2fcc,
2284         .halt_bit = 23,
2285         .clkr = {
2286                 .enable_reg = 0x2b48,
2287                 .enable_mask = BIT(0),
2288                 .hw.init = &(struct clk_init_data){
2289                         .name = "usb_hsic_hsio_cal_clk",
2290                         .ops = &clk_branch_ops,
2291                 },
2292         },
2293 };
2294 
2295 static struct clk_rcg usb_fs1_xcvr_fs_src = {
2296         .ns_reg = 0x2968,
2297         .md_reg = 0x2964,
2298         .mn = {
2299                 .mnctr_en_bit = 8,
2300                 .mnctr_reset_bit = 7,
2301                 .mnctr_mode_shift = 5,
2302                 .n_val_shift = 16,
2303                 .m_val_shift = 16,
2304                 .width = 8,
2305         },
2306         .p = {
2307                 .pre_div_shift = 3,
2308                 .pre_div_width = 2,
2309         },
2310         .s = {
2311                 .src_sel_shift = 0,
2312                 .parent_map = gcc_pxo_pll8_map,
2313         },
2314         .freq_tbl = clk_tbl_usb,
2315         .clkr = {
2316                 .enable_reg = 0x2968,
2317                 .enable_mask = BIT(11),
2318                 .hw.init = &(struct clk_init_data){
2319                         .name = "usb_fs1_xcvr_fs_src",
2320                         .parent_names = gcc_pxo_pll8,
2321                         .num_parents = 2,
2322                         .ops = &clk_rcg_ops,
2323                         .flags = CLK_SET_RATE_GATE,
2324                 },
2325         }
2326 };
2327 
2328 static const char * const usb_fs1_xcvr_fs_src_p[] = { "usb_fs1_xcvr_fs_src" };
2329 
2330 static struct clk_branch usb_fs1_xcvr_fs_clk = {
2331         .halt_reg = 0x2fcc,
2332         .halt_bit = 15,
2333         .clkr = {
2334                 .enable_reg = 0x2968,
2335                 .enable_mask = BIT(9),
2336                 .hw.init = &(struct clk_init_data){
2337                         .name = "usb_fs1_xcvr_fs_clk",
2338                         .parent_names = usb_fs1_xcvr_fs_src_p,
2339                         .num_parents = 1,
2340                         .ops = &clk_branch_ops,
2341                         .flags = CLK_SET_RATE_PARENT,
2342                 },
2343         },
2344 };
2345 
2346 static struct clk_branch usb_fs1_system_clk = {
2347         .halt_reg = 0x2fcc,
2348         .halt_bit = 16,
2349         .clkr = {
2350                 .enable_reg = 0x296c,
2351                 .enable_mask = BIT(4),
2352                 .hw.init = &(struct clk_init_data){
2353                         .parent_names = usb_fs1_xcvr_fs_src_p,
2354                         .num_parents = 1,
2355                         .name = "usb_fs1_system_clk",
2356                         .ops = &clk_branch_ops,
2357                         .flags = CLK_SET_RATE_PARENT,
2358                 },
2359         },
2360 };
2361 
2362 static struct clk_rcg usb_fs2_xcvr_fs_src = {
2363         .ns_reg = 0x2988,
2364         .md_reg = 0x2984,
2365         .mn = {
2366                 .mnctr_en_bit = 8,
2367                 .mnctr_reset_bit = 7,
2368                 .mnctr_mode_shift = 5,
2369                 .n_val_shift = 16,
2370                 .m_val_shift = 16,
2371                 .width = 8,
2372         },
2373         .p = {
2374                 .pre_div_shift = 3,
2375                 .pre_div_width = 2,
2376         },
2377         .s = {
2378                 .src_sel_shift = 0,
2379                 .parent_map = gcc_pxo_pll8_map,
2380         },
2381         .freq_tbl = clk_tbl_usb,
2382         .clkr = {
2383                 .enable_reg = 0x2988,
2384                 .enable_mask = BIT(11),
2385                 .hw.init = &(struct clk_init_data){
2386                         .name = "usb_fs2_xcvr_fs_src",
2387                         .parent_names = gcc_pxo_pll8,
2388                         .num_parents = 2,
2389                         .ops = &clk_rcg_ops,
2390                         .flags = CLK_SET_RATE_GATE,
2391                 },
2392         }
2393 };
2394 
2395 static const char * const usb_fs2_xcvr_fs_src_p[] = { "usb_fs2_xcvr_fs_src" };
2396 
2397 static struct clk_branch usb_fs2_xcvr_fs_clk = {
2398         .halt_reg = 0x2fcc,
2399         .halt_bit = 12,
2400         .clkr = {
2401                 .enable_reg = 0x2988,
2402                 .enable_mask = BIT(9),
2403                 .hw.init = &(struct clk_init_data){
2404                         .name = "usb_fs2_xcvr_fs_clk",
2405                         .parent_names = usb_fs2_xcvr_fs_src_p,
2406                         .num_parents = 1,
2407                         .ops = &clk_branch_ops,
2408                         .flags = CLK_SET_RATE_PARENT,
2409                 },
2410         },
2411 };
2412 
2413 static struct clk_branch usb_fs2_system_clk = {
2414         .halt_reg = 0x2fcc,
2415         .halt_bit = 13,
2416         .clkr = {
2417                 .enable_reg = 0x298c,
2418                 .enable_mask = BIT(4),
2419                 .hw.init = &(struct clk_init_data){
2420                         .name = "usb_fs2_system_clk",
2421                         .parent_names = usb_fs2_xcvr_fs_src_p,
2422                         .num_parents = 1,
2423                         .ops = &clk_branch_ops,
2424                         .flags = CLK_SET_RATE_PARENT,
2425                 },
2426         },
2427 };
2428 
2429 static struct clk_branch ce1_core_clk = {
2430         .hwcg_reg = 0x2724,
2431         .hwcg_bit = 6,
2432         .halt_reg = 0x2fd4,
2433         .halt_bit = 27,
2434         .clkr = {
2435                 .enable_reg = 0x2724,
2436                 .enable_mask = BIT(4),
2437                 .hw.init = &(struct clk_init_data){
2438                         .name = "ce1_core_clk",
2439                         .ops = &clk_branch_ops,
2440                 },
2441         },
2442 };
2443 
2444 static struct clk_branch ce1_h_clk = {
2445         .halt_reg = 0x2fd4,
2446         .halt_bit = 1,
2447         .clkr = {
2448                 .enable_reg = 0x2720,
2449                 .enable_mask = BIT(4),
2450                 .hw.init = &(struct clk_init_data){
2451                         .name = "ce1_h_clk",
2452                         .ops = &clk_branch_ops,
2453                 },
2454         },
2455 };
2456 
2457 static struct clk_branch dma_bam_h_clk = {
2458         .hwcg_reg = 0x25c0,
2459         .hwcg_bit = 6,
2460         .halt_reg = 0x2fc8,
2461         .halt_bit = 12,
2462         .clkr = {
2463                 .enable_reg = 0x25c0,
2464                 .enable_mask = BIT(4),
2465                 .hw.init = &(struct clk_init_data){
2466                         .name = "dma_bam_h_clk",
2467                         .ops = &clk_branch_ops,
2468                 },
2469         },
2470 };
2471 
2472 static struct clk_branch gsbi1_h_clk = {
2473         .hwcg_reg = 0x29c0,
2474         .hwcg_bit = 6,
2475         .halt_reg = 0x2fcc,
2476         .halt_bit = 11,
2477         .clkr = {
2478                 .enable_reg = 0x29c0,
2479                 .enable_mask = BIT(4),
2480                 .hw.init = &(struct clk_init_data){
2481                         .name = "gsbi1_h_clk",
2482                         .ops = &clk_branch_ops,
2483                 },
2484         },
2485 };
2486 
2487 static struct clk_branch gsbi2_h_clk = {
2488         .hwcg_reg = 0x29e0,
2489         .hwcg_bit = 6,
2490         .halt_reg = 0x2fcc,
2491         .halt_bit = 7,
2492         .clkr = {
2493                 .enable_reg = 0x29e0,
2494                 .enable_mask = BIT(4),
2495                 .hw.init = &(struct clk_init_data){
2496                         .name = "gsbi2_h_clk",
2497                         .ops = &clk_branch_ops,
2498                 },
2499         },
2500 };
2501 
2502 static struct clk_branch gsbi3_h_clk = {
2503         .hwcg_reg = 0x2a00,
2504         .hwcg_bit = 6,
2505         .halt_reg = 0x2fcc,
2506         .halt_bit = 3,
2507         .clkr = {
2508                 .enable_reg = 0x2a00,
2509                 .enable_mask = BIT(4),
2510                 .hw.init = &(struct clk_init_data){
2511                         .name = "gsbi3_h_clk",
2512                         .ops = &clk_branch_ops,
2513                 },
2514         },
2515 };
2516 
2517 static struct clk_branch gsbi4_h_clk = {
2518         .hwcg_reg = 0x2a20,
2519         .hwcg_bit = 6,
2520         .halt_reg = 0x2fd0,
2521         .halt_bit = 27,
2522         .clkr = {
2523                 .enable_reg = 0x2a20,
2524                 .enable_mask = BIT(4),
2525                 .hw.init = &(struct clk_init_data){
2526                         .name = "gsbi4_h_clk",
2527                         .ops = &clk_branch_ops,
2528                 },
2529         },
2530 };
2531 
2532 static struct clk_branch gsbi5_h_clk = {
2533         .hwcg_reg = 0x2a40,
2534         .hwcg_bit = 6,
2535         .halt_reg = 0x2fd0,
2536         .halt_bit = 23,
2537         .clkr = {
2538                 .enable_reg = 0x2a40,
2539                 .enable_mask = BIT(4),
2540                 .hw.init = &(struct clk_init_data){
2541                         .name = "gsbi5_h_clk",
2542                         .ops = &clk_branch_ops,
2543                 },
2544         },
2545 };
2546 
2547 static struct clk_branch gsbi6_h_clk = {
2548         .hwcg_reg = 0x2a60,
2549         .hwcg_bit = 6,
2550         .halt_reg = 0x2fd0,
2551         .halt_bit = 19,
2552         .clkr = {
2553                 .enable_reg = 0x2a60,
2554                 .enable_mask = BIT(4),
2555                 .hw.init = &(struct clk_init_data){
2556                         .name = "gsbi6_h_clk",
2557                         .ops = &clk_branch_ops,
2558                 },
2559         },
2560 };
2561 
2562 static struct clk_branch gsbi7_h_clk = {
2563         .hwcg_reg = 0x2a80,
2564         .hwcg_bit = 6,
2565         .halt_reg = 0x2fd0,
2566         .halt_bit = 15,
2567         .clkr = {
2568                 .enable_reg = 0x2a80,
2569                 .enable_mask = BIT(4),
2570                 .hw.init = &(struct clk_init_data){
2571                         .name = "gsbi7_h_clk",
2572                         .ops = &clk_branch_ops,
2573                 },
2574         },
2575 };
2576 
2577 static struct clk_branch gsbi8_h_clk = {
2578         .hwcg_reg = 0x2aa0,
2579         .hwcg_bit = 6,
2580         .halt_reg = 0x2fd0,
2581         .halt_bit = 11,
2582         .clkr = {
2583                 .enable_reg = 0x2aa0,
2584                 .enable_mask = BIT(4),
2585                 .hw.init = &(struct clk_init_data){
2586                         .name = "gsbi8_h_clk",
2587                         .ops = &clk_branch_ops,
2588                 },
2589         },
2590 };
2591 
2592 static struct clk_branch gsbi9_h_clk = {
2593         .hwcg_reg = 0x2ac0,
2594         .hwcg_bit = 6,
2595         .halt_reg = 0x2fd0,
2596         .halt_bit = 7,
2597         .clkr = {
2598                 .enable_reg = 0x2ac0,
2599                 .enable_mask = BIT(4),
2600                 .hw.init = &(struct clk_init_data){
2601                         .name = "gsbi9_h_clk",
2602                         .ops = &clk_branch_ops,
2603                 },
2604         },
2605 };
2606 
2607 static struct clk_branch gsbi10_h_clk = {
2608         .hwcg_reg = 0x2ae0,
2609         .hwcg_bit = 6,
2610         .halt_reg = 0x2fd0,
2611         .halt_bit = 3,
2612         .clkr = {
2613                 .enable_reg = 0x2ae0,
2614                 .enable_mask = BIT(4),
2615                 .hw.init = &(struct clk_init_data){
2616                         .name = "gsbi10_h_clk",
2617                         .ops = &clk_branch_ops,
2618                 },
2619         },
2620 };
2621 
2622 static struct clk_branch gsbi11_h_clk = {
2623         .hwcg_reg = 0x2b00,
2624         .hwcg_bit = 6,
2625         .halt_reg = 0x2fd4,
2626         .halt_bit = 18,
2627         .clkr = {
2628                 .enable_reg = 0x2b00,
2629                 .enable_mask = BIT(4),
2630                 .hw.init = &(struct clk_init_data){
2631                         .name = "gsbi11_h_clk",
2632                         .ops = &clk_branch_ops,
2633                 },
2634         },
2635 };
2636 
2637 static struct clk_branch gsbi12_h_clk = {
2638         .hwcg_reg = 0x2b20,
2639         .hwcg_bit = 6,
2640         .halt_reg = 0x2fd4,
2641         .halt_bit = 14,
2642         .clkr = {
2643                 .enable_reg = 0x2b20,
2644                 .enable_mask = BIT(4),
2645                 .hw.init = &(struct clk_init_data){
2646                         .name = "gsbi12_h_clk",
2647                         .ops = &clk_branch_ops,
2648                 },
2649         },
2650 };
2651 
2652 static struct clk_branch tsif_h_clk = {
2653         .hwcg_reg = 0x2700,
2654         .hwcg_bit = 6,
2655         .halt_reg = 0x2fd4,
2656         .halt_bit = 7,
2657         .clkr = {
2658                 .enable_reg = 0x2700,
2659                 .enable_mask = BIT(4),
2660                 .hw.init = &(struct clk_init_data){
2661                         .name = "tsif_h_clk",
2662                         .ops = &clk_branch_ops,
2663                 },
2664         },
2665 };
2666 
2667 static struct clk_branch usb_fs1_h_clk = {
2668         .halt_reg = 0x2fcc,
2669         .halt_bit = 17,
2670         .clkr = {
2671                 .enable_reg = 0x2960,
2672                 .enable_mask = BIT(4),
2673                 .hw.init = &(struct clk_init_data){
2674                         .name = "usb_fs1_h_clk",
2675                         .ops = &clk_branch_ops,
2676                 },
2677         },
2678 };
2679 
2680 static struct clk_branch usb_fs2_h_clk = {
2681         .halt_reg = 0x2fcc,
2682         .halt_bit = 14,
2683         .clkr = {
2684                 .enable_reg = 0x2980,
2685                 .enable_mask = BIT(4),
2686                 .hw.init = &(struct clk_init_data){
2687                         .name = "usb_fs2_h_clk",
2688                         .ops = &clk_branch_ops,
2689                 },
2690         },
2691 };
2692 
2693 static struct clk_branch usb_hs1_h_clk = {
2694         .hwcg_reg = 0x2900,
2695         .hwcg_bit = 6,
2696         .halt_reg = 0x2fc8,
2697         .halt_bit = 1,
2698         .clkr = {
2699                 .enable_reg = 0x2900,
2700                 .enable_mask = BIT(4),
2701                 .hw.init = &(struct clk_init_data){
2702                         .name = "usb_hs1_h_clk",
2703                         .ops = &clk_branch_ops,
2704                 },
2705         },
2706 };
2707 
2708 static struct clk_branch usb_hs3_h_clk = {
2709         .halt_reg = 0x2fc8,
2710         .halt_bit = 31,
2711         .clkr = {
2712                 .enable_reg = 0x3700,
2713                 .enable_mask = BIT(4),
2714                 .hw.init = &(struct clk_init_data){
2715                         .name = "usb_hs3_h_clk",
2716                         .ops = &clk_branch_ops,
2717                 },
2718         },
2719 };
2720 
2721 static struct clk_branch usb_hs4_h_clk = {
2722         .halt_reg = 0x2fc8,
2723         .halt_bit = 7,
2724         .clkr = {
2725                 .enable_reg = 0x3720,
2726                 .enable_mask = BIT(4),
2727                 .hw.init = &(struct clk_init_data){
2728                         .name = "usb_hs4_h_clk",
2729                         .ops = &clk_branch_ops,
2730                 },
2731         },
2732 };
2733 
2734 static struct clk_branch usb_hsic_h_clk = {
2735         .halt_reg = 0x2fcc,
2736         .halt_bit = 28,
2737         .clkr = {
2738                 .enable_reg = 0x2920,
2739                 .enable_mask = BIT(4),
2740                 .hw.init = &(struct clk_init_data){
2741                         .name = "usb_hsic_h_clk",
2742                         .ops = &clk_branch_ops,
2743                 },
2744         },
2745 };
2746 
2747 static struct clk_branch sdc1_h_clk = {
2748         .hwcg_reg = 0x2820,
2749         .hwcg_bit = 6,
2750         .halt_reg = 0x2fc8,
2751         .halt_bit = 11,
2752         .clkr = {
2753                 .enable_reg = 0x2820,
2754                 .enable_mask = BIT(4),
2755                 .hw.init = &(struct clk_init_data){
2756                         .name = "sdc1_h_clk",
2757                         .ops = &clk_branch_ops,
2758                 },
2759         },
2760 };
2761 
2762 static struct clk_branch sdc2_h_clk = {
2763         .hwcg_reg = 0x2840,
2764         .hwcg_bit = 6,
2765         .halt_reg = 0x2fc8,
2766         .halt_bit = 10,
2767         .clkr = {
2768                 .enable_reg = 0x2840,
2769                 .enable_mask = BIT(4),
2770                 .hw.init = &(struct clk_init_data){
2771                         .name = "sdc2_h_clk",
2772                         .ops = &clk_branch_ops,
2773                 },
2774         },
2775 };
2776 
2777 static struct clk_branch sdc3_h_clk = {
2778         .hwcg_reg = 0x2860,
2779         .hwcg_bit = 6,
2780         .halt_reg = 0x2fc8,
2781         .halt_bit = 9,
2782         .clkr = {
2783                 .enable_reg = 0x2860,
2784                 .enable_mask = BIT(4),
2785                 .hw.init = &(struct clk_init_data){
2786                         .name = "sdc3_h_clk",
2787                         .ops = &clk_branch_ops,
2788                 },
2789         },
2790 };
2791 
2792 static struct clk_branch sdc4_h_clk = {
2793         .hwcg_reg = 0x2880,
2794         .hwcg_bit = 6,
2795         .halt_reg = 0x2fc8,
2796         .halt_bit = 8,
2797         .clkr = {
2798                 .enable_reg = 0x2880,
2799                 .enable_mask = BIT(4),
2800                 .hw.init = &(struct clk_init_data){
2801                         .name = "sdc4_h_clk",
2802                         .ops = &clk_branch_ops,
2803                 },
2804         },
2805 };
2806 
2807 static struct clk_branch sdc5_h_clk = {
2808         .hwcg_reg = 0x28a0,
2809         .hwcg_bit = 6,
2810         .halt_reg = 0x2fc8,
2811         .halt_bit = 7,
2812         .clkr = {
2813                 .enable_reg = 0x28a0,
2814                 .enable_mask = BIT(4),
2815                 .hw.init = &(struct clk_init_data){
2816                         .name = "sdc5_h_clk",
2817                         .ops = &clk_branch_ops,
2818                 },
2819         },
2820 };
2821 
2822 static struct clk_branch adm0_clk = {
2823         .halt_reg = 0x2fdc,
2824         .halt_check = BRANCH_HALT_VOTED,
2825         .halt_bit = 14,
2826         .clkr = {
2827                 .enable_reg = 0x3080,
2828                 .enable_mask = BIT(2),
2829                 .hw.init = &(struct clk_init_data){
2830                         .name = "adm0_clk",
2831                         .ops = &clk_branch_ops,
2832                 },
2833         },
2834 };
2835 
2836 static struct clk_branch adm0_pbus_clk = {
2837         .hwcg_reg = 0x2208,
2838         .hwcg_bit = 6,
2839         .halt_reg = 0x2fdc,
2840         .halt_check = BRANCH_HALT_VOTED,
2841         .halt_bit = 13,
2842         .clkr = {
2843                 .enable_reg = 0x3080,
2844                 .enable_mask = BIT(3),
2845                 .hw.init = &(struct clk_init_data){
2846                         .name = "adm0_pbus_clk",
2847                         .ops = &clk_branch_ops,
2848                 },
2849         },
2850 };
2851 
2852 static struct freq_tbl clk_tbl_ce3[] = {
2853         { 48000000, P_PLL8, 8 },
2854         { 100000000, P_PLL3, 12 },
2855         { 120000000, P_PLL3, 10 },
2856         { }
2857 };
2858 
2859 static struct clk_rcg ce3_src = {
2860         .ns_reg = 0x36c0,
2861         .p = {
2862                 .pre_div_shift = 3,
2863                 .pre_div_width = 4,
2864         },
2865         .s = {
2866                 .src_sel_shift = 0,
2867                 .parent_map = gcc_pxo_pll8_pll3_map,
2868         },
2869         .freq_tbl = clk_tbl_ce3,
2870         .clkr = {
2871                 .enable_reg = 0x36c0,
2872                 .enable_mask = BIT(7),
2873                 .hw.init = &(struct clk_init_data){
2874                         .name = "ce3_src",
2875                         .parent_names = gcc_pxo_pll8_pll3,
2876                         .num_parents = 3,
2877                         .ops = &clk_rcg_ops,
2878                         .flags = CLK_SET_RATE_GATE,
2879                 },
2880         },
2881 };
2882 
2883 static struct clk_branch ce3_core_clk = {
2884         .halt_reg = 0x2fdc,
2885         .halt_bit = 5,
2886         .clkr = {
2887                 .enable_reg = 0x36cc,
2888                 .enable_mask = BIT(4),
2889                 .hw.init = &(struct clk_init_data){
2890                         .name = "ce3_core_clk",
2891                         .parent_names = (const char *[]){ "ce3_src" },
2892                         .num_parents = 1,
2893                         .ops = &clk_branch_ops,
2894                         .flags = CLK_SET_RATE_PARENT,
2895                 },
2896         },
2897 };
2898 
2899 static struct clk_branch ce3_h_clk = {
2900         .halt_reg = 0x2fc4,
2901         .halt_bit = 16,
2902         .clkr = {
2903                 .enable_reg = 0x36c4,
2904                 .enable_mask = BIT(4),
2905                 .hw.init = &(struct clk_init_data){
2906                         .name = "ce3_h_clk",
2907                         .parent_names = (const char *[]){ "ce3_src" },
2908                         .num_parents = 1,
2909                         .ops = &clk_branch_ops,
2910                         .flags = CLK_SET_RATE_PARENT,
2911                 },
2912         },
2913 };
2914 
2915 static const struct freq_tbl clk_tbl_sata_ref[] = {
2916         { 48000000, P_PLL8, 8, 0, 0 },
2917         { 100000000, P_PLL3, 12, 0, 0 },
2918         { }
2919 };
2920 
2921 static struct clk_rcg sata_clk_src = {
2922         .ns_reg = 0x2c08,
2923         .p = {
2924                 .pre_div_shift = 3,
2925                 .pre_div_width = 4,
2926         },
2927         .s = {
2928                 .src_sel_shift = 0,
2929                 .parent_map = gcc_pxo_pll8_pll3_map,
2930         },
2931         .freq_tbl = clk_tbl_sata_ref,
2932         .clkr = {
2933                 .enable_reg = 0x2c08,
2934                 .enable_mask = BIT(7),
2935                 .hw.init = &(struct clk_init_data){
2936                         .name = "sata_clk_src",
2937                         .parent_names = gcc_pxo_pll8_pll3,
2938                         .num_parents = 3,
2939                         .ops = &clk_rcg_ops,
2940                         .flags = CLK_SET_RATE_GATE,
2941                 },
2942         },
2943 };
2944 
2945 static struct clk_branch sata_rxoob_clk = {
2946         .halt_reg = 0x2fdc,
2947         .halt_bit = 26,
2948         .clkr = {
2949                 .enable_reg = 0x2c0c,
2950                 .enable_mask = BIT(4),
2951                 .hw.init = &(struct clk_init_data){
2952                         .name = "sata_rxoob_clk",
2953                         .parent_names = (const char *[]){ "sata_clk_src" },
2954                         .num_parents = 1,
2955                         .ops = &clk_branch_ops,
2956                         .flags = CLK_SET_RATE_PARENT,
2957                 },
2958         },
2959 };
2960 
2961 static struct clk_branch sata_pmalive_clk = {
2962         .halt_reg = 0x2fdc,
2963         .halt_bit = 25,
2964         .clkr = {
2965                 .enable_reg = 0x2c10,
2966                 .enable_mask = BIT(4),
2967                 .hw.init = &(struct clk_init_data){
2968                         .name = "sata_pmalive_clk",
2969                         .parent_names = (const char *[]){ "sata_clk_src" },
2970                         .num_parents = 1,
2971                         .ops = &clk_branch_ops,
2972                         .flags = CLK_SET_RATE_PARENT,
2973                 },
2974         },
2975 };
2976 
2977 static struct clk_branch sata_phy_ref_clk = {
2978         .halt_reg = 0x2fdc,
2979         .halt_bit = 24,
2980         .clkr = {
2981                 .enable_reg = 0x2c14,
2982                 .enable_mask = BIT(4),
2983                 .hw.init = &(struct clk_init_data){
2984                         .name = "sata_phy_ref_clk",
2985                         .parent_names = (const char *[]){ "pxo" },
2986                         .num_parents = 1,
2987                         .ops = &clk_branch_ops,
2988                 },
2989         },
2990 };
2991 
2992 static struct clk_branch sata_a_clk = {
2993         .halt_reg = 0x2fc0,
2994         .halt_bit = 12,
2995         .clkr = {
2996                 .enable_reg = 0x2c20,
2997                 .enable_mask = BIT(4),
2998                 .hw.init = &(struct clk_init_data){
2999                         .name = "sata_a_clk",
3000                         .ops = &clk_branch_ops,
3001                 },
3002         },
3003 };
3004 
3005 static struct clk_branch sata_h_clk = {
3006         .halt_reg = 0x2fdc,
3007         .halt_bit = 27,
3008         .clkr = {
3009                 .enable_reg = 0x2c00,
3010                 .enable_mask = BIT(4),
3011                 .hw.init = &(struct clk_init_data){
3012                         .name = "sata_h_clk",
3013                         .ops = &clk_branch_ops,
3014                 },
3015         },
3016 };
3017 
3018 static struct clk_branch sfab_sata_s_h_clk = {
3019         .halt_reg = 0x2fc4,
3020         .halt_bit = 14,
3021         .clkr = {
3022                 .enable_reg = 0x2480,
3023                 .enable_mask = BIT(4),
3024                 .hw.init = &(struct clk_init_data){
3025                         .name = "sfab_sata_s_h_clk",
3026                         .ops = &clk_branch_ops,
3027                 },
3028         },
3029 };
3030 
3031 static struct clk_branch sata_phy_cfg_clk = {
3032         .halt_reg = 0x2fcc,
3033         .halt_bit = 12,
3034         .clkr = {
3035                 .enable_reg = 0x2c40,
3036                 .enable_mask = BIT(4),
3037                 .hw.init = &(struct clk_init_data){
3038                         .name = "sata_phy_cfg_clk",
3039                         .ops = &clk_branch_ops,
3040                 },
3041         },
3042 };
3043 
3044 static struct clk_branch pcie_phy_ref_clk = {
3045         .halt_reg = 0x2fdc,
3046         .halt_bit = 29,
3047         .clkr = {
3048                 .enable_reg = 0x22d0,
3049                 .enable_mask = BIT(4),
3050                 .hw.init = &(struct clk_init_data){
3051                         .name = "pcie_phy_ref_clk",
3052                         .ops = &clk_branch_ops,
3053                 },
3054         },
3055 };
3056 
3057 static struct clk_branch pcie_h_clk = {
3058         .halt_reg = 0x2fd4,
3059         .halt_bit = 8,
3060         .clkr = {
3061                 .enable_reg = 0x22cc,
3062                 .enable_mask = BIT(4),
3063                 .hw.init = &(struct clk_init_data){
3064                         .name = "pcie_h_clk",
3065                         .ops = &clk_branch_ops,
3066                 },
3067         },
3068 };
3069 
3070 static struct clk_branch pcie_a_clk = {
3071         .halt_reg = 0x2fc0,
3072         .halt_bit = 13,
3073         .clkr = {
3074                 .enable_reg = 0x22c0,
3075                 .enable_mask = BIT(4),
3076                 .hw.init = &(struct clk_init_data){
3077                         .name = "pcie_a_clk",
3078                         .ops = &clk_branch_ops,
3079                 },
3080         },
3081 };
3082 
3083 static struct clk_branch pmic_arb0_h_clk = {
3084         .halt_reg = 0x2fd8,
3085         .halt_check = BRANCH_HALT_VOTED,
3086         .halt_bit = 22,
3087         .clkr = {
3088                 .enable_reg = 0x3080,
3089                 .enable_mask = BIT(8),
3090                 .hw.init = &(struct clk_init_data){
3091                         .name = "pmic_arb0_h_clk",
3092                         .ops = &clk_branch_ops,
3093                 },
3094         },
3095 };
3096 
3097 static struct clk_branch pmic_arb1_h_clk = {
3098         .halt_reg = 0x2fd8,
3099         .halt_check = BRANCH_HALT_VOTED,
3100         .halt_bit = 21,
3101         .clkr = {
3102                 .enable_reg = 0x3080,
3103                 .enable_mask = BIT(9),
3104                 .hw.init = &(struct clk_init_data){
3105                         .name = "pmic_arb1_h_clk",
3106                         .ops = &clk_branch_ops,
3107                 },
3108         },
3109 };
3110 
3111 static struct clk_branch pmic_ssbi2_clk = {
3112         .halt_reg = 0x2fd8,
3113         .halt_check = BRANCH_HALT_VOTED,
3114         .halt_bit = 23,
3115         .clkr = {
3116                 .enable_reg = 0x3080,
3117                 .enable_mask = BIT(7),
3118                 .hw.init = &(struct clk_init_data){
3119                         .name = "pmic_ssbi2_clk",
3120                         .ops = &clk_branch_ops,
3121                 },
3122         },
3123 };
3124 
3125 static struct clk_branch rpm_msg_ram_h_clk = {
3126         .hwcg_reg = 0x27e0,
3127         .hwcg_bit = 6,
3128         .halt_reg = 0x2fd8,
3129         .halt_check = BRANCH_HALT_VOTED,
3130         .halt_bit = 12,
3131         .clkr = {
3132                 .enable_reg = 0x3080,
3133                 .enable_mask = BIT(6),
3134                 .hw.init = &(struct clk_init_data){
3135                         .name = "rpm_msg_ram_h_clk",
3136                         .ops = &clk_branch_ops,
3137                 },
3138         },
3139 };
3140 
3141 static struct clk_regmap *gcc_msm8960_clks[] = {
3142         [PLL3] = &pll3.clkr,
3143         [PLL4_VOTE] = &pll4_vote,
3144         [PLL8] = &pll8.clkr,
3145         [PLL8_VOTE] = &pll8_vote,
3146         [PLL14] = &pll14.clkr,
3147         [PLL14_VOTE] = &pll14_vote,
3148         [GSBI1_UART_SRC] = &gsbi1_uart_src.clkr,
3149         [GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr,
3150         [GSBI2_UART_SRC] = &gsbi2_uart_src.clkr,
3151         [GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr,
3152         [GSBI3_UART_SRC] = &gsbi3_uart_src.clkr,
3153         [GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr,
3154         [GSBI4_UART_SRC] = &gsbi4_uart_src.clkr,
3155         [GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr,
3156         [GSBI5_UART_SRC] = &gsbi5_uart_src.clkr,
3157         [GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr,
3158         [GSBI6_UART_SRC] = &gsbi6_uart_src.clkr,
3159         [GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr,
3160         [GSBI7_UART_SRC] = &gsbi7_uart_src.clkr,
3161         [GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr,
3162         [GSBI8_UART_SRC] = &gsbi8_uart_src.clkr,
3163         [GSBI8_UART_CLK] = &gsbi8_uart_clk.clkr,
3164         [GSBI9_UART_SRC] = &gsbi9_uart_src.clkr,
3165         [GSBI9_UART_CLK] = &gsbi9_uart_clk.clkr,
3166         [GSBI10_UART_SRC] = &gsbi10_uart_src.clkr,
3167         [GSBI10_UART_CLK] = &gsbi10_uart_clk.clkr,
3168         [GSBI11_UART_SRC] = &gsbi11_uart_src.clkr,
3169         [GSBI11_UART_CLK] = &gsbi11_uart_clk.clkr,
3170         [GSBI12_UART_SRC] = &gsbi12_uart_src.clkr,
3171         [GSBI12_UART_CLK] = &gsbi12_uart_clk.clkr,
3172         [GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr,
3173         [GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr,
3174         [GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr,
3175         [GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr,
3176         [GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr,
3177         [GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr,
3178         [GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr,
3179         [GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr,
3180         [GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr,
3181         [GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr,
3182         [GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr,
3183         [GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr,
3184         [GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr,
3185         [GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr,
3186         [GSBI8_QUP_SRC] = &gsbi8_qup_src.clkr,
3187         [GSBI8_QUP_CLK] = &gsbi8_qup_clk.clkr,
3188         [GSBI9_QUP_SRC] = &gsbi9_qup_src.clkr,
3189         [GSBI9_QUP_CLK] = &gsbi9_qup_clk.clkr,
3190         [GSBI10_QUP_SRC] = &gsbi10_qup_src.clkr,
3191         [GSBI10_QUP_CLK] = &gsbi10_qup_clk.clkr,
3192         [GSBI11_QUP_SRC] = &gsbi11_qup_src.clkr,
3193         [GSBI11_QUP_CLK] = &gsbi11_qup_clk.clkr,
3194         [GSBI12_QUP_SRC] = &gsbi12_qup_src.clkr,
3195         [GSBI12_QUP_CLK] = &gsbi12_qup_clk.clkr,
3196         [GP0_SRC] = &gp0_src.clkr,
3197         [GP0_CLK] = &gp0_clk.clkr,
3198         [GP1_SRC] = &gp1_src.clkr,
3199         [GP1_CLK] = &gp1_clk.clkr,
3200         [GP2_SRC] = &gp2_src.clkr,
3201         [GP2_CLK] = &gp2_clk.clkr,
3202         [PMEM_A_CLK] = &pmem_clk.clkr,
3203         [PRNG_SRC] = &prng_src.clkr,
3204         [PRNG_CLK] = &prng_clk.clkr,
3205         [SDC1_SRC] = &sdc1_src.clkr,
3206         [SDC1_CLK] = &sdc1_clk.clkr,
3207         [SDC2_SRC] = &sdc2_src.clkr,
3208         [SDC2_CLK] = &sdc2_clk.clkr,
3209         [SDC3_SRC] = &sdc3_src.clkr,
3210         [SDC3_CLK] = &sdc3_clk.clkr,
3211         [SDC4_SRC] = &sdc4_src.clkr,
3212         [SDC4_CLK] = &sdc4_clk.clkr,
3213         [SDC5_SRC] = &sdc5_src.clkr,
3214         [SDC5_CLK] = &sdc5_clk.clkr,
3215         [TSIF_REF_SRC] = &tsif_ref_src.clkr,
3216         [TSIF_REF_CLK] = &tsif_ref_clk.clkr,
3217         [USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr,
3218         [USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr,
3219         [USB_HSIC_XCVR_FS_SRC] = &usb_hsic_xcvr_fs_src.clkr,
3220         [USB_HSIC_XCVR_FS_CLK] = &usb_hsic_xcvr_fs_clk.clkr,
3221         [USB_HSIC_SYSTEM_CLK] = &usb_hsic_system_clk.clkr,
3222         [USB_HSIC_HSIC_CLK] = &usb_hsic_hsic_clk.clkr,
3223         [USB_HSIC_HSIO_CAL_CLK] = &usb_hsic_hsio_cal_clk.clkr,
3224         [USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr,
3225         [USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr,
3226         [USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr,
3227         [USB_FS2_XCVR_FS_SRC] = &usb_fs2_xcvr_fs_src.clkr,
3228         [USB_FS2_XCVR_FS_CLK] = &usb_fs2_xcvr_fs_clk.clkr,
3229         [USB_FS2_SYSTEM_CLK] = &usb_fs2_system_clk.clkr,
3230         [CE1_CORE_CLK] = &ce1_core_clk.clkr,
3231         [CE1_H_CLK] = &ce1_h_clk.clkr,
3232         [DMA_BAM_H_CLK] = &dma_bam_h_clk.clkr,
3233         [GSBI1_H_CLK] = &gsbi1_h_clk.clkr,
3234         [GSBI2_H_CLK] = &gsbi2_h_clk.clkr,
3235         [GSBI3_H_CLK] = &gsbi3_h_clk.clkr,
3236         [GSBI4_H_CLK] = &gsbi4_h_clk.clkr,
3237         [GSBI5_H_CLK] = &gsbi5_h_clk.clkr,
3238         [GSBI6_H_CLK] = &gsbi6_h_clk.clkr,
3239         [GSBI7_H_CLK] = &gsbi7_h_clk.clkr,
3240         [GSBI8_H_CLK] = &gsbi8_h_clk.clkr,
3241         [GSBI9_H_CLK] = &gsbi9_h_clk.clkr,
3242         [GSBI10_H_CLK] = &gsbi10_h_clk.clkr,
3243         [GSBI11_H_CLK] = &gsbi11_h_clk.clkr,
3244         [GSBI12_H_CLK] = &gsbi12_h_clk.clkr,
3245         [TSIF_H_CLK] = &tsif_h_clk.clkr,
3246         [USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr,
3247         [USB_FS2_H_CLK] = &usb_fs2_h_clk.clkr,
3248         [USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr,
3249         [USB_HSIC_H_CLK] = &usb_hsic_h_clk.clkr,
3250         [SDC1_H_CLK] = &sdc1_h_clk.clkr,
3251         [SDC2_H_CLK] = &sdc2_h_clk.clkr,
3252         [SDC3_H_CLK] = &sdc3_h_clk.clkr,
3253         [SDC4_H_CLK] = &sdc4_h_clk.clkr,
3254         [SDC5_H_CLK] = &sdc5_h_clk.clkr,
3255         [ADM0_CLK] = &adm0_clk.clkr,
3256         [ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr,
3257         [PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr,
3258         [PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr,
3259         [PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr,
3260         [RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr,
3261         [PLL9] = &hfpll0.clkr,
3262         [PLL10] = &hfpll1.clkr,
3263         [PLL12] = &hfpll_l2.clkr,
3264 };
3265 
3266 static const struct qcom_reset_map gcc_msm8960_resets[] = {
3267         [SFAB_MSS_Q6_SW_RESET] = { 0x2040, 7 },
3268         [SFAB_MSS_Q6_FW_RESET] = { 0x2044, 7 },
3269         [QDSS_STM_RESET] = { 0x2060, 6 },
3270         [AFAB_SMPSS_S_RESET] = { 0x20b8, 2 },
3271         [AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 },
3272         [AFAB_SMPSS_M0_RESET] = { 0x20b8 },
3273         [AFAB_EBI1_CH0_RESET] = { 0x20c0, 7 },
3274         [AFAB_EBI1_CH1_RESET] = { 0x20c4, 7},
3275         [SFAB_ADM0_M0_RESET] = { 0x21e0, 7 },
3276         [SFAB_ADM0_M1_RESET] = { 0x21e4, 7 },
3277         [SFAB_ADM0_M2_RESET] = { 0x21e8, 7 },
3278         [ADM0_C2_RESET] = { 0x220c, 4},
3279         [ADM0_C1_RESET] = { 0x220c, 3},
3280         [ADM0_C0_RESET] = { 0x220c, 2},
3281         [ADM0_PBUS_RESET] = { 0x220c, 1 },
3282         [ADM0_RESET] = { 0x220c },
3283         [QDSS_CLKS_SW_RESET] = { 0x2260, 5 },
3284         [QDSS_POR_RESET] = { 0x2260, 4 },
3285         [QDSS_TSCTR_RESET] = { 0x2260, 3 },
3286         [QDSS_HRESET_RESET] = { 0x2260, 2 },
3287         [QDSS_AXI_RESET] = { 0x2260, 1 },
3288         [QDSS_DBG_RESET] = { 0x2260 },
3289         [PCIE_A_RESET] = { 0x22c0, 7 },
3290         [PCIE_AUX_RESET] = { 0x22c8, 7 },
3291         [PCIE_H_RESET] = { 0x22d0, 7 },
3292         [SFAB_PCIE_M_RESET] = { 0x22d4, 1 },
3293         [SFAB_PCIE_S_RESET] = { 0x22d4 },
3294         [SFAB_MSS_M_RESET] = { 0x2340, 7 },
3295         [SFAB_USB3_M_RESET] = { 0x2360, 7 },
3296         [SFAB_RIVA_M_RESET] = { 0x2380, 7 },
3297         [SFAB_LPASS_RESET] = { 0x23a0, 7 },
3298         [SFAB_AFAB_M_RESET] = { 0x23e0, 7 },
3299         [AFAB_SFAB_M0_RESET] = { 0x2420, 7 },
3300         [AFAB_SFAB_M1_RESET] = { 0x2424, 7 },
3301         [SFAB_SATA_S_RESET] = { 0x2480, 7 },
3302         [SFAB_DFAB_M_RESET] = { 0x2500, 7 },
3303         [DFAB_SFAB_M_RESET] = { 0x2520, 7 },
3304         [DFAB_SWAY0_RESET] = { 0x2540, 7 },
3305         [DFAB_SWAY1_RESET] = { 0x2544, 7 },
3306         [DFAB_ARB0_RESET] = { 0x2560, 7 },
3307         [DFAB_ARB1_RESET] = { 0x2564, 7 },
3308         [PPSS_PROC_RESET] = { 0x2594, 1 },
3309         [PPSS_RESET] = { 0x2594},
3310         [DMA_BAM_RESET] = { 0x25c0, 7 },
3311         [SPS_TIC_H_RESET] = { 0x2600, 7 },
3312         [SLIMBUS_H_RESET] = { 0x2620, 7 },
3313         [SFAB_CFPB_M_RESET] = { 0x2680, 7 },
3314         [SFAB_CFPB_S_RESET] = { 0x26c0, 7 },
3315         [TSIF_H_RESET] = { 0x2700, 7 },
3316         [CE1_H_RESET] = { 0x2720, 7 },
3317         [CE1_CORE_RESET] = { 0x2724, 7 },
3318         [CE1_SLEEP_RESET] = { 0x2728, 7 },
3319         [CE2_H_RESET] = { 0x2740, 7 },
3320         [CE2_CORE_RESET] = { 0x2744, 7 },
3321         [SFAB_SFPB_M_RESET] = { 0x2780, 7 },
3322         [SFAB_SFPB_S_RESET] = { 0x27a0, 7 },
3323         [RPM_PROC_RESET] = { 0x27c0, 7 },
3324         [PMIC_SSBI2_RESET] = { 0x280c, 12 },
3325         [SDC1_RESET] = { 0x2830 },
3326         [SDC2_RESET] = { 0x2850 },
3327         [SDC3_RESET] = { 0x2870 },
3328         [SDC4_RESET] = { 0x2890 },
3329         [SDC5_RESET] = { 0x28b0 },
3330         [DFAB_A2_RESET] = { 0x28c0, 7 },
3331         [USB_HS1_RESET] = { 0x2910 },
3332         [USB_HSIC_RESET] = { 0x2934 },
3333         [USB_FS1_XCVR_RESET] = { 0x2974, 1 },
3334         [USB_FS1_RESET] = { 0x2974 },
3335         [USB_FS2_XCVR_RESET] = { 0x2994, 1 },
3336         [USB_FS2_RESET] = { 0x2994 },
3337         [GSBI1_RESET] = { 0x29dc },
3338         [GSBI2_RESET] = { 0x29fc },
3339         [GSBI3_RESET] = { 0x2a1c },
3340         [GSBI4_RESET] = { 0x2a3c },
3341         [GSBI5_RESET] = { 0x2a5c },
3342         [GSBI6_RESET] = { 0x2a7c },
3343         [GSBI7_RESET] = { 0x2a9c },
3344         [GSBI8_RESET] = { 0x2abc },
3345         [GSBI9_RESET] = { 0x2adc },
3346         [GSBI10_RESET] = { 0x2afc },
3347         [GSBI11_RESET] = { 0x2b1c },
3348         [GSBI12_RESET] = { 0x2b3c },
3349         [SPDM_RESET] = { 0x2b6c },
3350         [TLMM_H_RESET] = { 0x2ba0, 7 },
3351         [SFAB_MSS_S_RESET] = { 0x2c00, 7 },
3352         [MSS_SLP_RESET] = { 0x2c60, 7 },
3353         [MSS_Q6SW_JTAG_RESET] = { 0x2c68, 7 },
3354         [MSS_Q6FW_JTAG_RESET] = { 0x2c6c, 7 },
3355         [MSS_RESET] = { 0x2c64 },
3356         [SATA_H_RESET] = { 0x2c80, 7 },
3357         [SATA_RXOOB_RESE] = { 0x2c8c, 7 },
3358         [SATA_PMALIVE_RESET] = { 0x2c90, 7 },
3359         [SATA_SFAB_M_RESET] = { 0x2c98, 7 },
3360         [TSSC_RESET] = { 0x2ca0, 7 },
3361         [PDM_RESET] = { 0x2cc0, 12 },
3362         [MPM_H_RESET] = { 0x2da0, 7 },
3363         [MPM_RESET] = { 0x2da4 },
3364         [SFAB_SMPSS_S_RESET] = { 0x2e00, 7 },
3365         [PRNG_RESET] = { 0x2e80, 12 },
3366         [RIVA_RESET] = { 0x35e0 },
3367 };
3368 
3369 static struct clk_regmap *gcc_apq8064_clks[] = {
3370         [PLL3] = &pll3.clkr,
3371         [PLL4_VOTE] = &pll4_vote,
3372         [PLL8] = &pll8.clkr,
3373         [PLL8_VOTE] = &pll8_vote,
3374         [PLL14] = &pll14.clkr,
3375         [PLL14_VOTE] = &pll14_vote,
3376         [GSBI1_UART_SRC] = &gsbi1_uart_src.clkr,
3377         [GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr,
3378         [GSBI2_UART_SRC] = &gsbi2_uart_src.clkr,
3379         [GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr,
3380         [GSBI3_UART_SRC] = &gsbi3_uart_src.clkr,
3381         [GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr,
3382         [GSBI4_UART_SRC] = &gsbi4_uart_src.clkr,
3383         [GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr,
3384         [GSBI5_UART_SRC] = &gsbi5_uart_src.clkr,
3385         [GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr,
3386         [GSBI6_UART_SRC] = &gsbi6_uart_src.clkr,
3387         [GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr,
3388         [GSBI7_UART_SRC] = &gsbi7_uart_src.clkr,
3389         [GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr,
3390         [GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr,
3391         [GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr,
3392         [GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr,
3393         [GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr,
3394         [GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr,
3395         [GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr,
3396         [GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr,
3397         [GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr,
3398         [GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr,
3399         [GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr,
3400         [GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr,
3401         [GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr,
3402         [GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr,
3403         [GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr,
3404         [GP0_SRC] = &gp0_src.clkr,
3405         [GP0_CLK] = &gp0_clk.clkr,
3406         [GP1_SRC] = &gp1_src.clkr,
3407         [GP1_CLK] = &gp1_clk.clkr,
3408         [GP2_SRC] = &gp2_src.clkr,
3409         [GP2_CLK] = &gp2_clk.clkr,
3410         [PMEM_A_CLK] = &pmem_clk.clkr,
3411         [PRNG_SRC] = &prng_src.clkr,
3412         [PRNG_CLK] = &prng_clk.clkr,
3413         [SDC1_SRC] = &sdc1_src.clkr,
3414         [SDC1_CLK] = &sdc1_clk.clkr,
3415         [SDC2_SRC] = &sdc2_src.clkr,
3416         [SDC2_CLK] = &sdc2_clk.clkr,
3417         [SDC3_SRC] = &sdc3_src.clkr,
3418         [SDC3_CLK] = &sdc3_clk.clkr,
3419         [SDC4_SRC] = &sdc4_src.clkr,
3420         [SDC4_CLK] = &sdc4_clk.clkr,
3421         [TSIF_REF_SRC] = &tsif_ref_src.clkr,
3422         [TSIF_REF_CLK] = &tsif_ref_clk.clkr,
3423         [USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr,
3424         [USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr,
3425         [USB_HS3_XCVR_SRC] = &usb_hs3_xcvr_src.clkr,
3426         [USB_HS3_XCVR_CLK] = &usb_hs3_xcvr_clk.clkr,
3427         [USB_HS4_XCVR_SRC] = &usb_hs4_xcvr_src.clkr,
3428         [USB_HS4_XCVR_CLK] = &usb_hs4_xcvr_clk.clkr,
3429         [USB_HSIC_XCVR_FS_SRC] = &usb_hsic_xcvr_fs_src.clkr,
3430         [USB_HSIC_XCVR_FS_CLK] = &usb_hsic_xcvr_fs_clk.clkr,
3431         [USB_HSIC_SYSTEM_CLK] = &usb_hsic_system_clk.clkr,
3432         [USB_HSIC_HSIC_CLK] = &usb_hsic_hsic_clk.clkr,
3433         [USB_HSIC_HSIO_CAL_CLK] = &usb_hsic_hsio_cal_clk.clkr,
3434         [USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr,
3435         [USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr,
3436         [USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr,
3437         [SATA_H_CLK] = &sata_h_clk.clkr,
3438         [SATA_CLK_SRC] = &sata_clk_src.clkr,
3439         [SATA_RXOOB_CLK] = &sata_rxoob_clk.clkr,
3440         [SATA_PMALIVE_CLK] = &sata_pmalive_clk.clkr,
3441         [SATA_PHY_REF_CLK] = &sata_phy_ref_clk.clkr,
3442         [SATA_PHY_CFG_CLK] = &sata_phy_cfg_clk.clkr,
3443         [SATA_A_CLK] = &sata_a_clk.clkr,
3444         [SFAB_SATA_S_H_CLK] = &sfab_sata_s_h_clk.clkr,
3445         [CE3_SRC] = &ce3_src.clkr,
3446         [CE3_CORE_CLK] = &ce3_core_clk.clkr,
3447         [CE3_H_CLK] = &ce3_h_clk.clkr,
3448         [DMA_BAM_H_CLK] = &dma_bam_h_clk.clkr,
3449         [GSBI1_H_CLK] = &gsbi1_h_clk.clkr,
3450         [GSBI2_H_CLK] = &gsbi2_h_clk.clkr,
3451         [GSBI3_H_CLK] = &gsbi3_h_clk.clkr,
3452         [GSBI4_H_CLK] = &gsbi4_h_clk.clkr,
3453         [GSBI5_H_CLK] = &gsbi5_h_clk.clkr,
3454         [GSBI6_H_CLK] = &gsbi6_h_clk.clkr,
3455         [GSBI7_H_CLK] = &gsbi7_h_clk.clkr,
3456         [TSIF_H_CLK] = &tsif_h_clk.clkr,
3457         [USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr,
3458         [USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr,
3459         [USB_HSIC_H_CLK] = &usb_hsic_h_clk.clkr,
3460         [USB_HS3_H_CLK] = &usb_hs3_h_clk.clkr,
3461         [USB_HS4_H_CLK] = &usb_hs4_h_clk.clkr,
3462         [SDC1_H_CLK] = &sdc1_h_clk.clkr,
3463         [SDC2_H_CLK] = &sdc2_h_clk.clkr,
3464         [SDC3_H_CLK] = &sdc3_h_clk.clkr,
3465         [SDC4_H_CLK] = &sdc4_h_clk.clkr,
3466         [ADM0_CLK] = &adm0_clk.clkr,
3467         [ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr,
3468         [PCIE_A_CLK] = &pcie_a_clk.clkr,
3469         [PCIE_PHY_REF_CLK] = &pcie_phy_ref_clk.clkr,
3470         [PCIE_H_CLK] = &pcie_h_clk.clkr,
3471         [PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr,
3472         [PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr,
3473         [PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr,
3474         [RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr,
3475         [PLL9] = &hfpll0.clkr,
3476         [PLL10] = &hfpll1.clkr,
3477         [PLL12] = &hfpll_l2.clkr,
3478         [PLL16] = &hfpll2.clkr,
3479         [PLL17] = &hfpll3.clkr,
3480 };
3481 
3482 static const struct qcom_reset_map gcc_apq8064_resets[] = {
3483         [QDSS_STM_RESET] = { 0x2060, 6 },
3484         [AFAB_SMPSS_S_RESET] = { 0x20b8, 2 },
3485         [AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 },
3486         [AFAB_SMPSS_M0_RESET] = { 0x20b8 },
3487         [AFAB_EBI1_CH0_RESET] = { 0x20c0, 7 },
3488         [AFAB_EBI1_CH1_RESET] = { 0x20c4, 7},
3489         [SFAB_ADM0_M0_RESET] = { 0x21e0, 7 },
3490         [SFAB_ADM0_M1_RESET] = { 0x21e4, 7 },
3491         [SFAB_ADM0_M2_RESET] = { 0x21e8, 7 },
3492         [ADM0_C2_RESET] = { 0x220c, 4},
3493         [ADM0_C1_RESET] = { 0x220c, 3},
3494         [ADM0_C0_RESET] = { 0x220c, 2},
3495         [ADM0_PBUS_RESET] = { 0x220c, 1 },
3496         [ADM0_RESET] = { 0x220c },
3497         [QDSS_CLKS_SW_RESET] = { 0x2260, 5 },
3498         [QDSS_POR_RESET] = { 0x2260, 4 },
3499         [QDSS_TSCTR_RESET] = { 0x2260, 3 },
3500         [QDSS_HRESET_RESET] = { 0x2260, 2 },
3501         [QDSS_AXI_RESET] = { 0x2260, 1 },
3502         [QDSS_DBG_RESET] = { 0x2260 },
3503         [SFAB_PCIE_M_RESET] = { 0x22d8, 1 },
3504         [SFAB_PCIE_S_RESET] = { 0x22d8 },
3505         [PCIE_EXT_PCI_RESET] = { 0x22dc, 6 },
3506         [PCIE_PHY_RESET] = { 0x22dc, 5 },
3507         [PCIE_PCI_RESET] = { 0x22dc, 4 },
3508         [PCIE_POR_RESET] = { 0x22dc, 3 },
3509         [PCIE_HCLK_RESET] = { 0x22dc, 2 },
3510         [PCIE_ACLK_RESET] = { 0x22dc },
3511         [SFAB_USB3_M_RESET] = { 0x2360, 7 },
3512         [SFAB_RIVA_M_RESET] = { 0x2380, 7 },
3513         [SFAB_LPASS_RESET] = { 0x23a0, 7 },
3514         [SFAB_AFAB_M_RESET] = { 0x23e0, 7 },
3515         [AFAB_SFAB_M0_RESET] = { 0x2420, 7 },
3516         [AFAB_SFAB_M1_RESET] = { 0x2424, 7 },
3517         [SFAB_SATA_S_RESET] = { 0x2480, 7 },
3518         [SFAB_DFAB_M_RESET] = { 0x2500, 7 },
3519         [DFAB_SFAB_M_RESET] = { 0x2520, 7 },
3520         [DFAB_SWAY0_RESET] = { 0x2540, 7 },
3521         [DFAB_SWAY1_RESET] = { 0x2544, 7 },
3522         [DFAB_ARB0_RESET] = { 0x2560, 7 },
3523         [DFAB_ARB1_RESET] = { 0x2564, 7 },
3524         [PPSS_PROC_RESET] = { 0x2594, 1 },
3525         [PPSS_RESET] = { 0x2594},
3526         [DMA_BAM_RESET] = { 0x25c0, 7 },
3527         [SPS_TIC_H_RESET] = { 0x2600, 7 },
3528         [SFAB_CFPB_M_RESET] = { 0x2680, 7 },
3529         [SFAB_CFPB_S_RESET] = { 0x26c0, 7 },
3530         [TSIF_H_RESET] = { 0x2700, 7 },
3531         [CE1_H_RESET] = { 0x2720, 7 },
3532         [CE1_CORE_RESET] = { 0x2724, 7 },
3533         [CE1_SLEEP_RESET] = { 0x2728, 7 },
3534         [CE2_H_RESET] = { 0x2740, 7 },
3535         [CE2_CORE_RESET] = { 0x2744, 7 },
3536         [SFAB_SFPB_M_RESET] = { 0x2780, 7 },
3537         [SFAB_SFPB_S_RESET] = { 0x27a0, 7 },
3538         [RPM_PROC_RESET] = { 0x27c0, 7 },
3539         [PMIC_SSBI2_RESET] = { 0x280c, 12 },
3540         [SDC1_RESET] = { 0x2830 },
3541         [SDC2_RESET] = { 0x2850 },
3542         [SDC3_RESET] = { 0x2870 },
3543         [SDC4_RESET] = { 0x2890 },
3544         [USB_HS1_RESET] = { 0x2910 },
3545         [USB_HSIC_RESET] = { 0x2934 },
3546         [USB_FS1_XCVR_RESET] = { 0x2974, 1 },
3547         [USB_FS1_RESET] = { 0x2974 },
3548         [GSBI1_RESET] = { 0x29dc },
3549         [GSBI2_RESET] = { 0x29fc },
3550         [GSBI3_RESET] = { 0x2a1c },
3551         [GSBI4_RESET] = { 0x2a3c },
3552         [GSBI5_RESET] = { 0x2a5c },
3553         [GSBI6_RESET] = { 0x2a7c },
3554         [GSBI7_RESET] = { 0x2a9c },
3555         [SPDM_RESET] = { 0x2b6c },
3556         [TLMM_H_RESET] = { 0x2ba0, 7 },
3557         [SATA_SFAB_M_RESET] = { 0x2c18 },
3558         [SATA_RESET] = { 0x2c1c },
3559         [GSS_SLP_RESET] = { 0x2c60, 7 },
3560         [GSS_RESET] = { 0x2c64 },
3561         [TSSC_RESET] = { 0x2ca0, 7 },
3562         [PDM_RESET] = { 0x2cc0, 12 },
3563         [MPM_H_RESET] = { 0x2da0, 7 },
3564         [MPM_RESET] = { 0x2da4 },
3565         [SFAB_SMPSS_S_RESET] = { 0x2e00, 7 },
3566         [PRNG_RESET] = { 0x2e80, 12 },
3567         [RIVA_RESET] = { 0x35e0 },
3568         [CE3_H_RESET] = { 0x36c4, 7 },
3569         [SFAB_CE3_M_RESET] = { 0x36c8, 1 },
3570         [SFAB_CE3_S_RESET] = { 0x36c8 },
3571         [CE3_RESET] = { 0x36cc, 7 },
3572         [CE3_SLEEP_RESET] = { 0x36d0, 7 },
3573         [USB_HS3_RESET] = { 0x3710 },
3574         [USB_HS4_RESET] = { 0x3730 },
3575 };
3576 
3577 static const struct regmap_config gcc_msm8960_regmap_config = {
3578         .reg_bits       = 32,
3579         .reg_stride     = 4,
3580         .val_bits       = 32,
3581         .max_register   = 0x3660,
3582         .fast_io        = true,
3583 };
3584 
3585 static const struct regmap_config gcc_apq8064_regmap_config = {
3586         .reg_bits       = 32,
3587         .reg_stride     = 4,
3588         .val_bits       = 32,
3589         .max_register   = 0x3880,
3590         .fast_io        = true,
3591 };
3592 
3593 static const struct qcom_cc_desc gcc_msm8960_desc = {
3594         .config = &gcc_msm8960_regmap_config,
3595         .clks = gcc_msm8960_clks,
3596         .num_clks = ARRAY_SIZE(gcc_msm8960_clks),
3597         .resets = gcc_msm8960_resets,
3598         .num_resets = ARRAY_SIZE(gcc_msm8960_resets),
3599 };
3600 
3601 static const struct qcom_cc_desc gcc_apq8064_desc = {
3602         .config = &gcc_apq8064_regmap_config,
3603         .clks = gcc_apq8064_clks,
3604         .num_clks = ARRAY_SIZE(gcc_apq8064_clks),
3605         .resets = gcc_apq8064_resets,
3606         .num_resets = ARRAY_SIZE(gcc_apq8064_resets),
3607 };
3608 
3609 static const struct of_device_id gcc_msm8960_match_table[] = {
3610         { .compatible = "qcom,gcc-msm8960", .data = &gcc_msm8960_desc },
3611         { .compatible = "qcom,gcc-apq8064", .data = &gcc_apq8064_desc },
3612         { }
3613 };
3614 MODULE_DEVICE_TABLE(of, gcc_msm8960_match_table);
3615 
3616 static int gcc_msm8960_probe(struct platform_device *pdev)
3617 {
3618         struct device *dev = &pdev->dev;
3619         const struct of_device_id *match;
3620         struct platform_device *tsens;
3621         int ret;
3622 
3623         match = of_match_device(gcc_msm8960_match_table, &pdev->dev);
3624         if (!match)
3625                 return -EINVAL;
3626 
3627         ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 19200000);
3628         if (ret)
3629                 return ret;
3630 
3631         ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 27000000);
3632         if (ret)
3633                 return ret;
3634 
3635         ret = qcom_cc_probe(pdev, match->data);
3636         if (ret)
3637                 return ret;
3638 
3639         if (match->data == &gcc_apq8064_desc) {
3640                 hfpll1.d = &hfpll1_8064_data;
3641                 hfpll_l2.d = &hfpll_l2_8064_data;
3642         }
3643 
3644         tsens = platform_device_register_data(&pdev->dev, "qcom-tsens", -1,
3645                                               NULL, 0);
3646         if (IS_ERR(tsens))
3647                 return PTR_ERR(tsens);
3648 
3649         platform_set_drvdata(pdev, tsens);
3650 
3651         return 0;
3652 }
3653 
3654 static int gcc_msm8960_remove(struct platform_device *pdev)
3655 {
3656         struct platform_device *tsens = platform_get_drvdata(pdev);
3657 
3658         platform_device_unregister(tsens);
3659 
3660         return 0;
3661 }
3662 
3663 static struct platform_driver gcc_msm8960_driver = {
3664         .probe          = gcc_msm8960_probe,
3665         .remove         = gcc_msm8960_remove,
3666         .driver         = {
3667                 .name   = "gcc-msm8960",
3668                 .of_match_table = gcc_msm8960_match_table,
3669         },
3670 };
3671 
3672 static int __init gcc_msm8960_init(void)
3673 {
3674         return platform_driver_register(&gcc_msm8960_driver);
3675 }
3676 core_initcall(gcc_msm8960_init);
3677 
3678 static void __exit gcc_msm8960_exit(void)
3679 {
3680         platform_driver_unregister(&gcc_msm8960_driver);
3681 }
3682 module_exit(gcc_msm8960_exit);
3683 
3684 MODULE_DESCRIPTION("QCOM GCC MSM8960 Driver");
3685 MODULE_LICENSE("GPL v2");
3686 MODULE_ALIAS("platform:gcc-msm8960");

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