Linux Audio

Check our new training course

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