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