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