Linux Audio

Check our new training course

Linux BSP development engineering services

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