xref: /openbmc/linux/drivers/clk/qcom/gcc-msm8960.c (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
19c92ab61SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
22ec94130SStephen Boyd /*
32d85a713SKumar Gala  * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
42ec94130SStephen Boyd  */
52ec94130SStephen Boyd 
62ec94130SStephen Boyd #include <linux/kernel.h>
72ec94130SStephen Boyd #include <linux/bitops.h>
82ec94130SStephen Boyd #include <linux/err.h>
92ec94130SStephen Boyd #include <linux/platform_device.h>
102ec94130SStephen Boyd #include <linux/module.h>
112ec94130SStephen Boyd #include <linux/of.h>
122ec94130SStephen Boyd #include <linux/of_device.h>
132ec94130SStephen Boyd #include <linux/clk-provider.h>
142ec94130SStephen Boyd #include <linux/regmap.h>
152ec94130SStephen Boyd #include <linux/reset-controller.h>
162ec94130SStephen Boyd 
172ec94130SStephen Boyd #include <dt-bindings/clock/qcom,gcc-msm8960.h>
182ec94130SStephen Boyd #include <dt-bindings/reset/qcom,gcc-msm8960.h>
192ec94130SStephen Boyd 
2049fc825fSStephen Boyd #include "common.h"
212ec94130SStephen Boyd #include "clk-regmap.h"
222ec94130SStephen Boyd #include "clk-pll.h"
232ec94130SStephen Boyd #include "clk-rcg.h"
242ec94130SStephen Boyd #include "clk-branch.h"
2572ad7207SStephen Boyd #include "clk-hfpll.h"
262ec94130SStephen Boyd #include "reset.h"
272ec94130SStephen Boyd 
282ec94130SStephen Boyd static struct clk_pll pll3 = {
292ec94130SStephen Boyd 	.l_reg = 0x3164,
302ec94130SStephen Boyd 	.m_reg = 0x3168,
312ec94130SStephen Boyd 	.n_reg = 0x316c,
322ec94130SStephen Boyd 	.config_reg = 0x3174,
332ec94130SStephen Boyd 	.mode_reg = 0x3160,
342ec94130SStephen Boyd 	.status_reg = 0x3178,
352ec94130SStephen Boyd 	.status_bit = 16,
362ec94130SStephen Boyd 	.clkr.hw.init = &(struct clk_init_data){
372ec94130SStephen Boyd 		.name = "pll3",
38e38fc8f0SDmitry Baryshkov 		.parent_data = &(const struct clk_parent_data){
39e38fc8f0SDmitry Baryshkov 			.fw_name = "pxo", .name = "pxo_board",
40e38fc8f0SDmitry Baryshkov 		},
412ec94130SStephen Boyd 		.num_parents = 1,
422ec94130SStephen Boyd 		.ops = &clk_pll_ops,
432ec94130SStephen Boyd 	},
442ec94130SStephen Boyd };
452ec94130SStephen Boyd 
464be8fc04SStephen Boyd static struct clk_regmap pll4_vote = {
474be8fc04SStephen Boyd 	.enable_reg = 0x34c0,
484be8fc04SStephen Boyd 	.enable_mask = BIT(4),
494be8fc04SStephen Boyd 	.hw.init = &(struct clk_init_data){
504be8fc04SStephen Boyd 		.name = "pll4_vote",
51e38fc8f0SDmitry Baryshkov 		.parent_data = &(const struct clk_parent_data){
52e38fc8f0SDmitry Baryshkov 			.fw_name = "pll4", .name = "pll4",
53e38fc8f0SDmitry Baryshkov 		},
544be8fc04SStephen Boyd 		.num_parents = 1,
554be8fc04SStephen Boyd 		.ops = &clk_pll_vote_ops,
564be8fc04SStephen Boyd 	},
574be8fc04SStephen Boyd };
584be8fc04SStephen Boyd 
592ec94130SStephen Boyd static struct clk_pll pll8 = {
602ec94130SStephen Boyd 	.l_reg = 0x3144,
612ec94130SStephen Boyd 	.m_reg = 0x3148,
622ec94130SStephen Boyd 	.n_reg = 0x314c,
632ec94130SStephen Boyd 	.config_reg = 0x3154,
642ec94130SStephen Boyd 	.mode_reg = 0x3140,
652ec94130SStephen Boyd 	.status_reg = 0x3158,
662ec94130SStephen Boyd 	.status_bit = 16,
672ec94130SStephen Boyd 	.clkr.hw.init = &(struct clk_init_data){
682ec94130SStephen Boyd 		.name = "pll8",
69e38fc8f0SDmitry Baryshkov 		.parent_data = &(const struct clk_parent_data){
70e38fc8f0SDmitry Baryshkov 			.fw_name = "pxo", .name = "pxo_board",
71e38fc8f0SDmitry Baryshkov 		},
722ec94130SStephen Boyd 		.num_parents = 1,
732ec94130SStephen Boyd 		.ops = &clk_pll_ops,
742ec94130SStephen Boyd 	},
752ec94130SStephen Boyd };
762ec94130SStephen Boyd 
772ec94130SStephen Boyd static struct clk_regmap pll8_vote = {
782ec94130SStephen Boyd 	.enable_reg = 0x34c0,
792ec94130SStephen Boyd 	.enable_mask = BIT(8),
802ec94130SStephen Boyd 	.hw.init = &(struct clk_init_data){
812ec94130SStephen Boyd 		.name = "pll8_vote",
82e38fc8f0SDmitry Baryshkov 		.parent_hws = (const struct clk_hw*[]){
83e38fc8f0SDmitry Baryshkov 			&pll8.clkr.hw
84e38fc8f0SDmitry Baryshkov 		},
852ec94130SStephen Boyd 		.num_parents = 1,
862ec94130SStephen Boyd 		.ops = &clk_pll_vote_ops,
872ec94130SStephen Boyd 	},
882ec94130SStephen Boyd };
892ec94130SStephen Boyd 
9072ad7207SStephen Boyd static struct hfpll_data hfpll0_data = {
9172ad7207SStephen Boyd 	.mode_reg = 0x3200,
9272ad7207SStephen Boyd 	.l_reg = 0x3208,
9372ad7207SStephen Boyd 	.m_reg = 0x320c,
9472ad7207SStephen Boyd 	.n_reg = 0x3210,
9572ad7207SStephen Boyd 	.config_reg = 0x3204,
9672ad7207SStephen Boyd 	.status_reg = 0x321c,
9772ad7207SStephen Boyd 	.config_val = 0x7845c665,
9872ad7207SStephen Boyd 	.droop_reg = 0x3214,
9972ad7207SStephen Boyd 	.droop_val = 0x0108c000,
10072ad7207SStephen Boyd 	.min_rate = 600000000UL,
10172ad7207SStephen Boyd 	.max_rate = 1800000000UL,
10272ad7207SStephen Boyd };
10372ad7207SStephen Boyd 
10472ad7207SStephen Boyd static struct clk_hfpll hfpll0 = {
10572ad7207SStephen Boyd 	.d = &hfpll0_data,
10672ad7207SStephen Boyd 	.clkr.hw.init = &(struct clk_init_data){
107e38fc8f0SDmitry Baryshkov 		.parent_data = &(const struct clk_parent_data){
108e38fc8f0SDmitry Baryshkov 			.fw_name = "pxo", .name = "pxo_board",
109e38fc8f0SDmitry Baryshkov 		},
11072ad7207SStephen Boyd 		.num_parents = 1,
11172ad7207SStephen Boyd 		.name = "hfpll0",
11272ad7207SStephen Boyd 		.ops = &clk_ops_hfpll,
11372ad7207SStephen Boyd 		.flags = CLK_IGNORE_UNUSED,
11472ad7207SStephen Boyd 	},
11572ad7207SStephen Boyd 	.lock = __SPIN_LOCK_UNLOCKED(hfpll0.lock),
11672ad7207SStephen Boyd };
11772ad7207SStephen Boyd 
11872ad7207SStephen Boyd static struct hfpll_data hfpll1_8064_data = {
11972ad7207SStephen Boyd 	.mode_reg = 0x3240,
12072ad7207SStephen Boyd 	.l_reg = 0x3248,
12172ad7207SStephen Boyd 	.m_reg = 0x324c,
12272ad7207SStephen Boyd 	.n_reg = 0x3250,
12372ad7207SStephen Boyd 	.config_reg = 0x3244,
12472ad7207SStephen Boyd 	.status_reg = 0x325c,
12572ad7207SStephen Boyd 	.config_val = 0x7845c665,
12672ad7207SStephen Boyd 	.droop_reg = 0x3254,
12772ad7207SStephen Boyd 	.droop_val = 0x0108c000,
12872ad7207SStephen Boyd 	.min_rate = 600000000UL,
12972ad7207SStephen Boyd 	.max_rate = 1800000000UL,
13072ad7207SStephen Boyd };
13172ad7207SStephen Boyd 
13272ad7207SStephen Boyd static struct hfpll_data hfpll1_data = {
13372ad7207SStephen Boyd 	.mode_reg = 0x3300,
13472ad7207SStephen Boyd 	.l_reg = 0x3308,
13572ad7207SStephen Boyd 	.m_reg = 0x330c,
13672ad7207SStephen Boyd 	.n_reg = 0x3310,
13772ad7207SStephen Boyd 	.config_reg = 0x3304,
13872ad7207SStephen Boyd 	.status_reg = 0x331c,
13972ad7207SStephen Boyd 	.config_val = 0x7845c665,
14072ad7207SStephen Boyd 	.droop_reg = 0x3314,
14172ad7207SStephen Boyd 	.droop_val = 0x0108c000,
14272ad7207SStephen Boyd 	.min_rate = 600000000UL,
14372ad7207SStephen Boyd 	.max_rate = 1800000000UL,
14472ad7207SStephen Boyd };
14572ad7207SStephen Boyd 
14672ad7207SStephen Boyd static struct clk_hfpll hfpll1 = {
14772ad7207SStephen Boyd 	.d = &hfpll1_data,
14872ad7207SStephen Boyd 	.clkr.hw.init = &(struct clk_init_data){
149e38fc8f0SDmitry Baryshkov 		.parent_data = &(const struct clk_parent_data){
150e38fc8f0SDmitry Baryshkov 			.fw_name = "pxo", .name = "pxo_board",
151e38fc8f0SDmitry Baryshkov 		},
15272ad7207SStephen Boyd 		.num_parents = 1,
15372ad7207SStephen Boyd 		.name = "hfpll1",
15472ad7207SStephen Boyd 		.ops = &clk_ops_hfpll,
15572ad7207SStephen Boyd 		.flags = CLK_IGNORE_UNUSED,
15672ad7207SStephen Boyd 	},
15772ad7207SStephen Boyd 	.lock = __SPIN_LOCK_UNLOCKED(hfpll1.lock),
15872ad7207SStephen Boyd };
15972ad7207SStephen Boyd 
16072ad7207SStephen Boyd static struct hfpll_data hfpll2_data = {
16172ad7207SStephen Boyd 	.mode_reg = 0x3280,
16272ad7207SStephen Boyd 	.l_reg = 0x3288,
16372ad7207SStephen Boyd 	.m_reg = 0x328c,
16472ad7207SStephen Boyd 	.n_reg = 0x3290,
16572ad7207SStephen Boyd 	.config_reg = 0x3284,
16672ad7207SStephen Boyd 	.status_reg = 0x329c,
16772ad7207SStephen Boyd 	.config_val = 0x7845c665,
16872ad7207SStephen Boyd 	.droop_reg = 0x3294,
16972ad7207SStephen Boyd 	.droop_val = 0x0108c000,
17072ad7207SStephen Boyd 	.min_rate = 600000000UL,
17172ad7207SStephen Boyd 	.max_rate = 1800000000UL,
17272ad7207SStephen Boyd };
17372ad7207SStephen Boyd 
17472ad7207SStephen Boyd static struct clk_hfpll hfpll2 = {
17572ad7207SStephen Boyd 	.d = &hfpll2_data,
17672ad7207SStephen Boyd 	.clkr.hw.init = &(struct clk_init_data){
177e38fc8f0SDmitry Baryshkov 		.parent_data = &(const struct clk_parent_data){
178e38fc8f0SDmitry Baryshkov 			.fw_name = "pxo", .name = "pxo_board",
179e38fc8f0SDmitry Baryshkov 		},
18072ad7207SStephen Boyd 		.num_parents = 1,
18172ad7207SStephen Boyd 		.name = "hfpll2",
18272ad7207SStephen Boyd 		.ops = &clk_ops_hfpll,
18372ad7207SStephen Boyd 		.flags = CLK_IGNORE_UNUSED,
18472ad7207SStephen Boyd 	},
18572ad7207SStephen Boyd 	.lock = __SPIN_LOCK_UNLOCKED(hfpll2.lock),
18672ad7207SStephen Boyd };
18772ad7207SStephen Boyd 
18872ad7207SStephen Boyd static struct hfpll_data hfpll3_data = {
18972ad7207SStephen Boyd 	.mode_reg = 0x32c0,
19072ad7207SStephen Boyd 	.l_reg = 0x32c8,
19172ad7207SStephen Boyd 	.m_reg = 0x32cc,
19272ad7207SStephen Boyd 	.n_reg = 0x32d0,
19372ad7207SStephen Boyd 	.config_reg = 0x32c4,
19472ad7207SStephen Boyd 	.status_reg = 0x32dc,
19572ad7207SStephen Boyd 	.config_val = 0x7845c665,
19672ad7207SStephen Boyd 	.droop_reg = 0x32d4,
19772ad7207SStephen Boyd 	.droop_val = 0x0108c000,
19872ad7207SStephen Boyd 	.min_rate = 600000000UL,
19972ad7207SStephen Boyd 	.max_rate = 1800000000UL,
20072ad7207SStephen Boyd };
20172ad7207SStephen Boyd 
20272ad7207SStephen Boyd static struct clk_hfpll hfpll3 = {
20372ad7207SStephen Boyd 	.d = &hfpll3_data,
20472ad7207SStephen Boyd 	.clkr.hw.init = &(struct clk_init_data){
205e38fc8f0SDmitry Baryshkov 		.parent_data = &(const struct clk_parent_data){
206e38fc8f0SDmitry Baryshkov 			.fw_name = "pxo", .name = "pxo_board",
207e38fc8f0SDmitry Baryshkov 		},
20872ad7207SStephen Boyd 		.num_parents = 1,
20972ad7207SStephen Boyd 		.name = "hfpll3",
21072ad7207SStephen Boyd 		.ops = &clk_ops_hfpll,
21172ad7207SStephen Boyd 		.flags = CLK_IGNORE_UNUSED,
21272ad7207SStephen Boyd 	},
21372ad7207SStephen Boyd 	.lock = __SPIN_LOCK_UNLOCKED(hfpll3.lock),
21472ad7207SStephen Boyd };
21572ad7207SStephen Boyd 
21672ad7207SStephen Boyd static struct hfpll_data hfpll_l2_8064_data = {
21772ad7207SStephen Boyd 	.mode_reg = 0x3300,
21872ad7207SStephen Boyd 	.l_reg = 0x3308,
21972ad7207SStephen Boyd 	.m_reg = 0x330c,
22072ad7207SStephen Boyd 	.n_reg = 0x3310,
22172ad7207SStephen Boyd 	.config_reg = 0x3304,
22272ad7207SStephen Boyd 	.status_reg = 0x331c,
22372ad7207SStephen Boyd 	.config_val = 0x7845c665,
22472ad7207SStephen Boyd 	.droop_reg = 0x3314,
22572ad7207SStephen Boyd 	.droop_val = 0x0108c000,
22672ad7207SStephen Boyd 	.min_rate = 600000000UL,
22772ad7207SStephen Boyd 	.max_rate = 1800000000UL,
22872ad7207SStephen Boyd };
22972ad7207SStephen Boyd 
23072ad7207SStephen Boyd static struct hfpll_data hfpll_l2_data = {
23172ad7207SStephen Boyd 	.mode_reg = 0x3400,
23272ad7207SStephen Boyd 	.l_reg = 0x3408,
23372ad7207SStephen Boyd 	.m_reg = 0x340c,
23472ad7207SStephen Boyd 	.n_reg = 0x3410,
23572ad7207SStephen Boyd 	.config_reg = 0x3404,
23672ad7207SStephen Boyd 	.status_reg = 0x341c,
23772ad7207SStephen Boyd 	.config_val = 0x7845c665,
23872ad7207SStephen Boyd 	.droop_reg = 0x3414,
23972ad7207SStephen Boyd 	.droop_val = 0x0108c000,
24072ad7207SStephen Boyd 	.min_rate = 600000000UL,
24172ad7207SStephen Boyd 	.max_rate = 1800000000UL,
24272ad7207SStephen Boyd };
24372ad7207SStephen Boyd 
24472ad7207SStephen Boyd static struct clk_hfpll hfpll_l2 = {
24572ad7207SStephen Boyd 	.d = &hfpll_l2_data,
24672ad7207SStephen Boyd 	.clkr.hw.init = &(struct clk_init_data){
247e38fc8f0SDmitry Baryshkov 		.parent_data = &(const struct clk_parent_data){
248e38fc8f0SDmitry Baryshkov 			.fw_name = "pxo", .name = "pxo_board",
249e38fc8f0SDmitry Baryshkov 		},
25072ad7207SStephen Boyd 		.num_parents = 1,
25172ad7207SStephen Boyd 		.name = "hfpll_l2",
25272ad7207SStephen Boyd 		.ops = &clk_ops_hfpll,
25372ad7207SStephen Boyd 		.flags = CLK_IGNORE_UNUSED,
25472ad7207SStephen Boyd 	},
25572ad7207SStephen Boyd 	.lock = __SPIN_LOCK_UNLOCKED(hfpll_l2.lock),
25672ad7207SStephen Boyd };
25772ad7207SStephen Boyd 
2582ec94130SStephen Boyd static struct clk_pll pll14 = {
2592ec94130SStephen Boyd 	.l_reg = 0x31c4,
2602ec94130SStephen Boyd 	.m_reg = 0x31c8,
2612ec94130SStephen Boyd 	.n_reg = 0x31cc,
2622ec94130SStephen Boyd 	.config_reg = 0x31d4,
2632ec94130SStephen Boyd 	.mode_reg = 0x31c0,
2642ec94130SStephen Boyd 	.status_reg = 0x31d8,
2652ec94130SStephen Boyd 	.status_bit = 16,
2662ec94130SStephen Boyd 	.clkr.hw.init = &(struct clk_init_data){
2672ec94130SStephen Boyd 		.name = "pll14",
268e38fc8f0SDmitry Baryshkov 		.parent_data = &(const struct clk_parent_data){
269e38fc8f0SDmitry Baryshkov 			.fw_name = "pxo", .name = "pxo_board",
270e38fc8f0SDmitry Baryshkov 		},
2712ec94130SStephen Boyd 		.num_parents = 1,
2722ec94130SStephen Boyd 		.ops = &clk_pll_ops,
2732ec94130SStephen Boyd 	},
2742ec94130SStephen Boyd };
2752ec94130SStephen Boyd 
2762ec94130SStephen Boyd static struct clk_regmap pll14_vote = {
2772ec94130SStephen Boyd 	.enable_reg = 0x34c0,
2782ec94130SStephen Boyd 	.enable_mask = BIT(14),
2792ec94130SStephen Boyd 	.hw.init = &(struct clk_init_data){
2802ec94130SStephen Boyd 		.name = "pll14_vote",
281e38fc8f0SDmitry Baryshkov 		.parent_hws = (const struct clk_hw*[]){
282e38fc8f0SDmitry Baryshkov 			&pll14.clkr.hw
283e38fc8f0SDmitry Baryshkov 		},
2842ec94130SStephen Boyd 		.num_parents = 1,
2852ec94130SStephen Boyd 		.ops = &clk_pll_vote_ops,
2862ec94130SStephen Boyd 	},
2872ec94130SStephen Boyd };
2882ec94130SStephen Boyd 
289293d2e97SGeorgi Djakov enum {
290293d2e97SGeorgi Djakov 	P_PXO,
291293d2e97SGeorgi Djakov 	P_PLL8,
292293d2e97SGeorgi Djakov 	P_PLL3,
293293d2e97SGeorgi Djakov 	P_CXO,
294293d2e97SGeorgi Djakov };
2952ec94130SStephen Boyd 
296293d2e97SGeorgi Djakov static const struct parent_map gcc_pxo_pll8_map[] = {
297293d2e97SGeorgi Djakov 	{ P_PXO, 0 },
298293d2e97SGeorgi Djakov 	{ P_PLL8, 3 }
2992ec94130SStephen Boyd };
3002ec94130SStephen Boyd 
301e38fc8f0SDmitry Baryshkov static const struct clk_parent_data gcc_pxo_pll8[] = {
302e38fc8f0SDmitry Baryshkov 	{ .fw_name = "pxo", .name = "pxo_board" },
303e38fc8f0SDmitry Baryshkov 	{ .hw = &pll8_vote.hw },
3042ec94130SStephen Boyd };
3052ec94130SStephen Boyd 
306293d2e97SGeorgi Djakov static const struct parent_map gcc_pxo_pll8_cxo_map[] = {
307293d2e97SGeorgi Djakov 	{ P_PXO, 0 },
308293d2e97SGeorgi Djakov 	{ P_PLL8, 3 },
309293d2e97SGeorgi Djakov 	{ P_CXO, 5 }
3102ec94130SStephen Boyd };
3112ec94130SStephen Boyd 
312e38fc8f0SDmitry Baryshkov static const struct clk_parent_data gcc_pxo_pll8_cxo[] = {
313e38fc8f0SDmitry Baryshkov 	{ .fw_name = "pxo", .name = "pxo_board" },
314e38fc8f0SDmitry Baryshkov 	{ .hw = &pll8_vote.hw },
315e38fc8f0SDmitry Baryshkov 	{ .fw_name = "cxo", .name = "cxo_board" },
3162ec94130SStephen Boyd };
3172ec94130SStephen Boyd 
318293d2e97SGeorgi Djakov static const struct parent_map gcc_pxo_pll8_pll3_map[] = {
319293d2e97SGeorgi Djakov 	{ P_PXO, 0 },
320293d2e97SGeorgi Djakov 	{ P_PLL8, 3 },
321293d2e97SGeorgi Djakov 	{ P_PLL3, 6 }
3225f775498SStephen Boyd };
3235f775498SStephen Boyd 
324e38fc8f0SDmitry Baryshkov static const struct clk_parent_data gcc_pxo_pll8_pll3[] = {
325e38fc8f0SDmitry Baryshkov 	{ .fw_name = "pxo", .name = "pxo_board" },
326e38fc8f0SDmitry Baryshkov 	{ .hw = &pll8_vote.hw },
327e38fc8f0SDmitry Baryshkov 	{ .hw = &pll3.clkr.hw },
3285f775498SStephen Boyd };
3295f775498SStephen Boyd 
3302ec94130SStephen Boyd static struct freq_tbl clk_tbl_gsbi_uart[] = {
3312ec94130SStephen Boyd 	{  1843200, P_PLL8, 2,  6, 625 },
3322ec94130SStephen Boyd 	{  3686400, P_PLL8, 2, 12, 625 },
3332ec94130SStephen Boyd 	{  7372800, P_PLL8, 2, 24, 625 },
3342ec94130SStephen Boyd 	{ 14745600, P_PLL8, 2, 48, 625 },
3352ec94130SStephen Boyd 	{ 16000000, P_PLL8, 4,  1,   6 },
3362ec94130SStephen Boyd 	{ 24000000, P_PLL8, 4,  1,   4 },
3372ec94130SStephen Boyd 	{ 32000000, P_PLL8, 4,  1,   3 },
3382ec94130SStephen Boyd 	{ 40000000, P_PLL8, 1,  5,  48 },
3392ec94130SStephen Boyd 	{ 46400000, P_PLL8, 1, 29, 240 },
3402ec94130SStephen Boyd 	{ 48000000, P_PLL8, 4,  1,   2 },
3412ec94130SStephen Boyd 	{ 51200000, P_PLL8, 1,  2,  15 },
3422ec94130SStephen Boyd 	{ 56000000, P_PLL8, 1,  7,  48 },
3432ec94130SStephen Boyd 	{ 58982400, P_PLL8, 1, 96, 625 },
3442ec94130SStephen Boyd 	{ 64000000, P_PLL8, 2,  1,   3 },
3452ec94130SStephen Boyd 	{ }
3462ec94130SStephen Boyd };
3472ec94130SStephen Boyd 
3482ec94130SStephen Boyd static struct clk_rcg gsbi1_uart_src = {
3492ec94130SStephen Boyd 	.ns_reg = 0x29d4,
3502ec94130SStephen Boyd 	.md_reg = 0x29d0,
3512ec94130SStephen Boyd 	.mn = {
3522ec94130SStephen Boyd 		.mnctr_en_bit = 8,
3532ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
3542ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
3552ec94130SStephen Boyd 		.n_val_shift = 16,
3562ec94130SStephen Boyd 		.m_val_shift = 16,
3572ec94130SStephen Boyd 		.width = 16,
3582ec94130SStephen Boyd 	},
3592ec94130SStephen Boyd 	.p = {
3602ec94130SStephen Boyd 		.pre_div_shift = 3,
3612ec94130SStephen Boyd 		.pre_div_width = 2,
3622ec94130SStephen Boyd 	},
3632ec94130SStephen Boyd 	.s = {
3642ec94130SStephen Boyd 		.src_sel_shift = 0,
3652ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
3662ec94130SStephen Boyd 	},
3672ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_uart,
3682ec94130SStephen Boyd 	.clkr = {
3692ec94130SStephen Boyd 		.enable_reg = 0x29d4,
3702ec94130SStephen Boyd 		.enable_mask = BIT(11),
3712ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
3722ec94130SStephen Boyd 			.name = "gsbi1_uart_src",
373e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
374d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
3752ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
3762ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
3772ec94130SStephen Boyd 		},
3782ec94130SStephen Boyd 	},
3792ec94130SStephen Boyd };
3802ec94130SStephen Boyd 
3812ec94130SStephen Boyd static struct clk_branch gsbi1_uart_clk = {
3822ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
3832ec94130SStephen Boyd 	.halt_bit = 10,
3842ec94130SStephen Boyd 	.clkr = {
3852ec94130SStephen Boyd 		.enable_reg = 0x29d4,
3862ec94130SStephen Boyd 		.enable_mask = BIT(9),
3872ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
3882ec94130SStephen Boyd 			.name = "gsbi1_uart_clk",
389e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
390e38fc8f0SDmitry Baryshkov 				&gsbi1_uart_src.clkr.hw
3912ec94130SStephen Boyd 			},
3922ec94130SStephen Boyd 			.num_parents = 1,
3932ec94130SStephen Boyd 			.ops = &clk_branch_ops,
3942ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
3952ec94130SStephen Boyd 		},
3962ec94130SStephen Boyd 	},
3972ec94130SStephen Boyd };
3982ec94130SStephen Boyd 
3992ec94130SStephen Boyd static struct clk_rcg gsbi2_uart_src = {
4002ec94130SStephen Boyd 	.ns_reg = 0x29f4,
4012ec94130SStephen Boyd 	.md_reg = 0x29f0,
4022ec94130SStephen Boyd 	.mn = {
4032ec94130SStephen Boyd 		.mnctr_en_bit = 8,
4042ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
4052ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
4062ec94130SStephen Boyd 		.n_val_shift = 16,
4072ec94130SStephen Boyd 		.m_val_shift = 16,
4082ec94130SStephen Boyd 		.width = 16,
4092ec94130SStephen Boyd 	},
4102ec94130SStephen Boyd 	.p = {
4112ec94130SStephen Boyd 		.pre_div_shift = 3,
4122ec94130SStephen Boyd 		.pre_div_width = 2,
4132ec94130SStephen Boyd 	},
4142ec94130SStephen Boyd 	.s = {
4152ec94130SStephen Boyd 		.src_sel_shift = 0,
4162ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
4172ec94130SStephen Boyd 	},
4182ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_uart,
4192ec94130SStephen Boyd 	.clkr = {
4202ec94130SStephen Boyd 		.enable_reg = 0x29f4,
4212ec94130SStephen Boyd 		.enable_mask = BIT(11),
4222ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
4232ec94130SStephen Boyd 			.name = "gsbi2_uart_src",
424e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
425d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
4262ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
4272ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
4282ec94130SStephen Boyd 		},
4292ec94130SStephen Boyd 	},
4302ec94130SStephen Boyd };
4312ec94130SStephen Boyd 
4322ec94130SStephen Boyd static struct clk_branch gsbi2_uart_clk = {
4332ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
4342ec94130SStephen Boyd 	.halt_bit = 6,
4352ec94130SStephen Boyd 	.clkr = {
4362ec94130SStephen Boyd 		.enable_reg = 0x29f4,
4372ec94130SStephen Boyd 		.enable_mask = BIT(9),
4382ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
4392ec94130SStephen Boyd 			.name = "gsbi2_uart_clk",
440e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
441e38fc8f0SDmitry Baryshkov 				&gsbi2_uart_src.clkr.hw
4422ec94130SStephen Boyd 			},
4432ec94130SStephen Boyd 			.num_parents = 1,
4442ec94130SStephen Boyd 			.ops = &clk_branch_ops,
4452ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
4462ec94130SStephen Boyd 		},
4472ec94130SStephen Boyd 	},
4482ec94130SStephen Boyd };
4492ec94130SStephen Boyd 
4502ec94130SStephen Boyd static struct clk_rcg gsbi3_uart_src = {
4512ec94130SStephen Boyd 	.ns_reg = 0x2a14,
4522ec94130SStephen Boyd 	.md_reg = 0x2a10,
4532ec94130SStephen Boyd 	.mn = {
4542ec94130SStephen Boyd 		.mnctr_en_bit = 8,
4552ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
4562ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
4572ec94130SStephen Boyd 		.n_val_shift = 16,
4582ec94130SStephen Boyd 		.m_val_shift = 16,
4592ec94130SStephen Boyd 		.width = 16,
4602ec94130SStephen Boyd 	},
4612ec94130SStephen Boyd 	.p = {
4622ec94130SStephen Boyd 		.pre_div_shift = 3,
4632ec94130SStephen Boyd 		.pre_div_width = 2,
4642ec94130SStephen Boyd 	},
4652ec94130SStephen Boyd 	.s = {
4662ec94130SStephen Boyd 		.src_sel_shift = 0,
4672ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
4682ec94130SStephen Boyd 	},
4692ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_uart,
4702ec94130SStephen Boyd 	.clkr = {
4712ec94130SStephen Boyd 		.enable_reg = 0x2a14,
4722ec94130SStephen Boyd 		.enable_mask = BIT(11),
4732ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
4742ec94130SStephen Boyd 			.name = "gsbi3_uart_src",
475e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
476d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
4772ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
4782ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
4792ec94130SStephen Boyd 		},
4802ec94130SStephen Boyd 	},
4812ec94130SStephen Boyd };
4822ec94130SStephen Boyd 
4832ec94130SStephen Boyd static struct clk_branch gsbi3_uart_clk = {
4842ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
4852ec94130SStephen Boyd 	.halt_bit = 2,
4862ec94130SStephen Boyd 	.clkr = {
4872ec94130SStephen Boyd 		.enable_reg = 0x2a14,
4882ec94130SStephen Boyd 		.enable_mask = BIT(9),
4892ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
4902ec94130SStephen Boyd 			.name = "gsbi3_uart_clk",
491e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
492e38fc8f0SDmitry Baryshkov 				&gsbi3_uart_src.clkr.hw
4932ec94130SStephen Boyd 			},
4942ec94130SStephen Boyd 			.num_parents = 1,
4952ec94130SStephen Boyd 			.ops = &clk_branch_ops,
4962ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
4972ec94130SStephen Boyd 		},
4982ec94130SStephen Boyd 	},
4992ec94130SStephen Boyd };
5002ec94130SStephen Boyd 
5012ec94130SStephen Boyd static struct clk_rcg gsbi4_uart_src = {
5022ec94130SStephen Boyd 	.ns_reg = 0x2a34,
5032ec94130SStephen Boyd 	.md_reg = 0x2a30,
5042ec94130SStephen Boyd 	.mn = {
5052ec94130SStephen Boyd 		.mnctr_en_bit = 8,
5062ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
5072ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
5082ec94130SStephen Boyd 		.n_val_shift = 16,
5092ec94130SStephen Boyd 		.m_val_shift = 16,
5102ec94130SStephen Boyd 		.width = 16,
5112ec94130SStephen Boyd 	},
5122ec94130SStephen Boyd 	.p = {
5132ec94130SStephen Boyd 		.pre_div_shift = 3,
5142ec94130SStephen Boyd 		.pre_div_width = 2,
5152ec94130SStephen Boyd 	},
5162ec94130SStephen Boyd 	.s = {
5172ec94130SStephen Boyd 		.src_sel_shift = 0,
5182ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
5192ec94130SStephen Boyd 	},
5202ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_uart,
5212ec94130SStephen Boyd 	.clkr = {
5222ec94130SStephen Boyd 		.enable_reg = 0x2a34,
5232ec94130SStephen Boyd 		.enable_mask = BIT(11),
5242ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
5252ec94130SStephen Boyd 			.name = "gsbi4_uart_src",
526e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
527d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
5282ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
5292ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
5302ec94130SStephen Boyd 		},
5312ec94130SStephen Boyd 	},
5322ec94130SStephen Boyd };
5332ec94130SStephen Boyd 
5342ec94130SStephen Boyd static struct clk_branch gsbi4_uart_clk = {
5352ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
5362ec94130SStephen Boyd 	.halt_bit = 26,
5372ec94130SStephen Boyd 	.clkr = {
5382ec94130SStephen Boyd 		.enable_reg = 0x2a34,
5392ec94130SStephen Boyd 		.enable_mask = BIT(9),
5402ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
5412ec94130SStephen Boyd 			.name = "gsbi4_uart_clk",
542e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
543e38fc8f0SDmitry Baryshkov 				&gsbi4_uart_src.clkr.hw
5442ec94130SStephen Boyd 			},
5452ec94130SStephen Boyd 			.num_parents = 1,
5462ec94130SStephen Boyd 			.ops = &clk_branch_ops,
5472ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
5482ec94130SStephen Boyd 		},
5492ec94130SStephen Boyd 	},
5502ec94130SStephen Boyd };
5512ec94130SStephen Boyd 
5522ec94130SStephen Boyd static struct clk_rcg gsbi5_uart_src = {
5532ec94130SStephen Boyd 	.ns_reg = 0x2a54,
5542ec94130SStephen Boyd 	.md_reg = 0x2a50,
5552ec94130SStephen Boyd 	.mn = {
5562ec94130SStephen Boyd 		.mnctr_en_bit = 8,
5572ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
5582ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
5592ec94130SStephen Boyd 		.n_val_shift = 16,
5602ec94130SStephen Boyd 		.m_val_shift = 16,
5612ec94130SStephen Boyd 		.width = 16,
5622ec94130SStephen Boyd 	},
5632ec94130SStephen Boyd 	.p = {
5642ec94130SStephen Boyd 		.pre_div_shift = 3,
5652ec94130SStephen Boyd 		.pre_div_width = 2,
5662ec94130SStephen Boyd 	},
5672ec94130SStephen Boyd 	.s = {
5682ec94130SStephen Boyd 		.src_sel_shift = 0,
5692ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
5702ec94130SStephen Boyd 	},
5712ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_uart,
5722ec94130SStephen Boyd 	.clkr = {
5732ec94130SStephen Boyd 		.enable_reg = 0x2a54,
5742ec94130SStephen Boyd 		.enable_mask = BIT(11),
5752ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
5762ec94130SStephen Boyd 			.name = "gsbi5_uart_src",
577e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
578d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
5792ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
5802ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
5812ec94130SStephen Boyd 		},
5822ec94130SStephen Boyd 	},
5832ec94130SStephen Boyd };
5842ec94130SStephen Boyd 
5852ec94130SStephen Boyd static struct clk_branch gsbi5_uart_clk = {
5862ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
5872ec94130SStephen Boyd 	.halt_bit = 22,
5882ec94130SStephen Boyd 	.clkr = {
5892ec94130SStephen Boyd 		.enable_reg = 0x2a54,
5902ec94130SStephen Boyd 		.enable_mask = BIT(9),
5912ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
5922ec94130SStephen Boyd 			.name = "gsbi5_uart_clk",
593e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
594e38fc8f0SDmitry Baryshkov 				&gsbi5_uart_src.clkr.hw
5952ec94130SStephen Boyd 			},
5962ec94130SStephen Boyd 			.num_parents = 1,
5972ec94130SStephen Boyd 			.ops = &clk_branch_ops,
5982ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
5992ec94130SStephen Boyd 		},
6002ec94130SStephen Boyd 	},
6012ec94130SStephen Boyd };
6022ec94130SStephen Boyd 
6032ec94130SStephen Boyd static struct clk_rcg gsbi6_uart_src = {
6042ec94130SStephen Boyd 	.ns_reg = 0x2a74,
6052ec94130SStephen Boyd 	.md_reg = 0x2a70,
6062ec94130SStephen Boyd 	.mn = {
6072ec94130SStephen Boyd 		.mnctr_en_bit = 8,
6082ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
6092ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
6102ec94130SStephen Boyd 		.n_val_shift = 16,
6112ec94130SStephen Boyd 		.m_val_shift = 16,
6122ec94130SStephen Boyd 		.width = 16,
6132ec94130SStephen Boyd 	},
6142ec94130SStephen Boyd 	.p = {
6152ec94130SStephen Boyd 		.pre_div_shift = 3,
6162ec94130SStephen Boyd 		.pre_div_width = 2,
6172ec94130SStephen Boyd 	},
6182ec94130SStephen Boyd 	.s = {
6192ec94130SStephen Boyd 		.src_sel_shift = 0,
6202ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
6212ec94130SStephen Boyd 	},
6222ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_uart,
6232ec94130SStephen Boyd 	.clkr = {
6242ec94130SStephen Boyd 		.enable_reg = 0x2a74,
6252ec94130SStephen Boyd 		.enable_mask = BIT(11),
6262ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
6272ec94130SStephen Boyd 			.name = "gsbi6_uart_src",
628e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
629d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
6302ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
6312ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
6322ec94130SStephen Boyd 		},
6332ec94130SStephen Boyd 	},
6342ec94130SStephen Boyd };
6352ec94130SStephen Boyd 
6362ec94130SStephen Boyd static struct clk_branch gsbi6_uart_clk = {
6372ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
6382ec94130SStephen Boyd 	.halt_bit = 18,
6392ec94130SStephen Boyd 	.clkr = {
6402ec94130SStephen Boyd 		.enable_reg = 0x2a74,
6412ec94130SStephen Boyd 		.enable_mask = BIT(9),
6422ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
6432ec94130SStephen Boyd 			.name = "gsbi6_uart_clk",
644e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
645e38fc8f0SDmitry Baryshkov 				&gsbi6_uart_src.clkr.hw
6462ec94130SStephen Boyd 			},
6472ec94130SStephen Boyd 			.num_parents = 1,
6482ec94130SStephen Boyd 			.ops = &clk_branch_ops,
6492ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
6502ec94130SStephen Boyd 		},
6512ec94130SStephen Boyd 	},
6522ec94130SStephen Boyd };
6532ec94130SStephen Boyd 
6542ec94130SStephen Boyd static struct clk_rcg gsbi7_uart_src = {
6552ec94130SStephen Boyd 	.ns_reg = 0x2a94,
6562ec94130SStephen Boyd 	.md_reg = 0x2a90,
6572ec94130SStephen Boyd 	.mn = {
6582ec94130SStephen Boyd 		.mnctr_en_bit = 8,
6592ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
6602ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
6612ec94130SStephen Boyd 		.n_val_shift = 16,
6622ec94130SStephen Boyd 		.m_val_shift = 16,
6632ec94130SStephen Boyd 		.width = 16,
6642ec94130SStephen Boyd 	},
6652ec94130SStephen Boyd 	.p = {
6662ec94130SStephen Boyd 		.pre_div_shift = 3,
6672ec94130SStephen Boyd 		.pre_div_width = 2,
6682ec94130SStephen Boyd 	},
6692ec94130SStephen Boyd 	.s = {
6702ec94130SStephen Boyd 		.src_sel_shift = 0,
6712ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
6722ec94130SStephen Boyd 	},
6732ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_uart,
6742ec94130SStephen Boyd 	.clkr = {
6752ec94130SStephen Boyd 		.enable_reg = 0x2a94,
6762ec94130SStephen Boyd 		.enable_mask = BIT(11),
6772ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
6782ec94130SStephen Boyd 			.name = "gsbi7_uart_src",
679e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
680d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
6812ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
6822ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
6832ec94130SStephen Boyd 		},
6842ec94130SStephen Boyd 	},
6852ec94130SStephen Boyd };
6862ec94130SStephen Boyd 
6872ec94130SStephen Boyd static struct clk_branch gsbi7_uart_clk = {
6882ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
6892ec94130SStephen Boyd 	.halt_bit = 14,
6902ec94130SStephen Boyd 	.clkr = {
6912ec94130SStephen Boyd 		.enable_reg = 0x2a94,
6922ec94130SStephen Boyd 		.enable_mask = BIT(9),
6932ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
6942ec94130SStephen Boyd 			.name = "gsbi7_uart_clk",
695e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
696e38fc8f0SDmitry Baryshkov 				&gsbi7_uart_src.clkr.hw
6972ec94130SStephen Boyd 			},
6982ec94130SStephen Boyd 			.num_parents = 1,
6992ec94130SStephen Boyd 			.ops = &clk_branch_ops,
7002ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
7012ec94130SStephen Boyd 		},
7022ec94130SStephen Boyd 	},
7032ec94130SStephen Boyd };
7042ec94130SStephen Boyd 
7052ec94130SStephen Boyd static struct clk_rcg gsbi8_uart_src = {
7062ec94130SStephen Boyd 	.ns_reg = 0x2ab4,
7072ec94130SStephen Boyd 	.md_reg = 0x2ab0,
7082ec94130SStephen Boyd 	.mn = {
7092ec94130SStephen Boyd 		.mnctr_en_bit = 8,
7102ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
7112ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
7122ec94130SStephen Boyd 		.n_val_shift = 16,
7132ec94130SStephen Boyd 		.m_val_shift = 16,
7142ec94130SStephen Boyd 		.width = 16,
7152ec94130SStephen Boyd 	},
7162ec94130SStephen Boyd 	.p = {
7172ec94130SStephen Boyd 		.pre_div_shift = 3,
7182ec94130SStephen Boyd 		.pre_div_width = 2,
7192ec94130SStephen Boyd 	},
7202ec94130SStephen Boyd 	.s = {
7212ec94130SStephen Boyd 		.src_sel_shift = 0,
7222ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
7232ec94130SStephen Boyd 	},
7242ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_uart,
7252ec94130SStephen Boyd 	.clkr = {
7262ec94130SStephen Boyd 		.enable_reg = 0x2ab4,
7272ec94130SStephen Boyd 		.enable_mask = BIT(11),
7282ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
7292ec94130SStephen Boyd 			.name = "gsbi8_uart_src",
730e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
731d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
7322ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
7332ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
7342ec94130SStephen Boyd 		},
7352ec94130SStephen Boyd 	},
7362ec94130SStephen Boyd };
7372ec94130SStephen Boyd 
7382ec94130SStephen Boyd static struct clk_branch gsbi8_uart_clk = {
7392ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
7402ec94130SStephen Boyd 	.halt_bit = 10,
7412ec94130SStephen Boyd 	.clkr = {
7422ec94130SStephen Boyd 		.enable_reg = 0x2ab4,
7432ec94130SStephen Boyd 		.enable_mask = BIT(9),
7442ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
7452ec94130SStephen Boyd 			.name = "gsbi8_uart_clk",
746e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
747e38fc8f0SDmitry Baryshkov 				&gsbi8_uart_src.clkr.hw
748e38fc8f0SDmitry Baryshkov 			},
7492ec94130SStephen Boyd 			.num_parents = 1,
7502ec94130SStephen Boyd 			.ops = &clk_branch_ops,
7512ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
7522ec94130SStephen Boyd 		},
7532ec94130SStephen Boyd 	},
7542ec94130SStephen Boyd };
7552ec94130SStephen Boyd 
7562ec94130SStephen Boyd static struct clk_rcg gsbi9_uart_src = {
7572ec94130SStephen Boyd 	.ns_reg = 0x2ad4,
7582ec94130SStephen Boyd 	.md_reg = 0x2ad0,
7592ec94130SStephen Boyd 	.mn = {
7602ec94130SStephen Boyd 		.mnctr_en_bit = 8,
7612ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
7622ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
7632ec94130SStephen Boyd 		.n_val_shift = 16,
7642ec94130SStephen Boyd 		.m_val_shift = 16,
7652ec94130SStephen Boyd 		.width = 16,
7662ec94130SStephen Boyd 	},
7672ec94130SStephen Boyd 	.p = {
7682ec94130SStephen Boyd 		.pre_div_shift = 3,
7692ec94130SStephen Boyd 		.pre_div_width = 2,
7702ec94130SStephen Boyd 	},
7712ec94130SStephen Boyd 	.s = {
7722ec94130SStephen Boyd 		.src_sel_shift = 0,
7732ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
7742ec94130SStephen Boyd 	},
7752ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_uart,
7762ec94130SStephen Boyd 	.clkr = {
7772ec94130SStephen Boyd 		.enable_reg = 0x2ad4,
7782ec94130SStephen Boyd 		.enable_mask = BIT(11),
7792ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
7802ec94130SStephen Boyd 			.name = "gsbi9_uart_src",
781e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
782d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
7832ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
7842ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
7852ec94130SStephen Boyd 		},
7862ec94130SStephen Boyd 	},
7872ec94130SStephen Boyd };
7882ec94130SStephen Boyd 
7892ec94130SStephen Boyd static struct clk_branch gsbi9_uart_clk = {
7902ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
7912ec94130SStephen Boyd 	.halt_bit = 6,
7922ec94130SStephen Boyd 	.clkr = {
7932ec94130SStephen Boyd 		.enable_reg = 0x2ad4,
7942ec94130SStephen Boyd 		.enable_mask = BIT(9),
7952ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
7962ec94130SStephen Boyd 			.name = "gsbi9_uart_clk",
797e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
798e38fc8f0SDmitry Baryshkov 				&gsbi9_uart_src.clkr.hw
799e38fc8f0SDmitry Baryshkov 			},
8002ec94130SStephen Boyd 			.num_parents = 1,
8012ec94130SStephen Boyd 			.ops = &clk_branch_ops,
8022ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
8032ec94130SStephen Boyd 		},
8042ec94130SStephen Boyd 	},
8052ec94130SStephen Boyd };
8062ec94130SStephen Boyd 
8072ec94130SStephen Boyd static struct clk_rcg gsbi10_uart_src = {
8082ec94130SStephen Boyd 	.ns_reg = 0x2af4,
8092ec94130SStephen Boyd 	.md_reg = 0x2af0,
8102ec94130SStephen Boyd 	.mn = {
8112ec94130SStephen Boyd 		.mnctr_en_bit = 8,
8122ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
8132ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
8142ec94130SStephen Boyd 		.n_val_shift = 16,
8152ec94130SStephen Boyd 		.m_val_shift = 16,
8162ec94130SStephen Boyd 		.width = 16,
8172ec94130SStephen Boyd 	},
8182ec94130SStephen Boyd 	.p = {
8192ec94130SStephen Boyd 		.pre_div_shift = 3,
8202ec94130SStephen Boyd 		.pre_div_width = 2,
8212ec94130SStephen Boyd 	},
8222ec94130SStephen Boyd 	.s = {
8232ec94130SStephen Boyd 		.src_sel_shift = 0,
8242ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
8252ec94130SStephen Boyd 	},
8262ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_uart,
8272ec94130SStephen Boyd 	.clkr = {
8282ec94130SStephen Boyd 		.enable_reg = 0x2af4,
8292ec94130SStephen Boyd 		.enable_mask = BIT(11),
8302ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
8312ec94130SStephen Boyd 			.name = "gsbi10_uart_src",
832e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
833d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
8342ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
8352ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
8362ec94130SStephen Boyd 		},
8372ec94130SStephen Boyd 	},
8382ec94130SStephen Boyd };
8392ec94130SStephen Boyd 
8402ec94130SStephen Boyd static struct clk_branch gsbi10_uart_clk = {
8412ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
8422ec94130SStephen Boyd 	.halt_bit = 2,
8432ec94130SStephen Boyd 	.clkr = {
8442ec94130SStephen Boyd 		.enable_reg = 0x2af4,
8452ec94130SStephen Boyd 		.enable_mask = BIT(9),
8462ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
8472ec94130SStephen Boyd 			.name = "gsbi10_uart_clk",
848e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
849e38fc8f0SDmitry Baryshkov 				&gsbi10_uart_src.clkr.hw
850e38fc8f0SDmitry Baryshkov 			},
8512ec94130SStephen Boyd 			.num_parents = 1,
8522ec94130SStephen Boyd 			.ops = &clk_branch_ops,
8532ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
8542ec94130SStephen Boyd 		},
8552ec94130SStephen Boyd 	},
8562ec94130SStephen Boyd };
8572ec94130SStephen Boyd 
8582ec94130SStephen Boyd static struct clk_rcg gsbi11_uart_src = {
8592ec94130SStephen Boyd 	.ns_reg = 0x2b14,
8602ec94130SStephen Boyd 	.md_reg = 0x2b10,
8612ec94130SStephen Boyd 	.mn = {
8622ec94130SStephen Boyd 		.mnctr_en_bit = 8,
8632ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
8642ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
8652ec94130SStephen Boyd 		.n_val_shift = 16,
8662ec94130SStephen Boyd 		.m_val_shift = 16,
8672ec94130SStephen Boyd 		.width = 16,
8682ec94130SStephen Boyd 	},
8692ec94130SStephen Boyd 	.p = {
8702ec94130SStephen Boyd 		.pre_div_shift = 3,
8712ec94130SStephen Boyd 		.pre_div_width = 2,
8722ec94130SStephen Boyd 	},
8732ec94130SStephen Boyd 	.s = {
8742ec94130SStephen Boyd 		.src_sel_shift = 0,
8752ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
8762ec94130SStephen Boyd 	},
8772ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_uart,
8782ec94130SStephen Boyd 	.clkr = {
8792ec94130SStephen Boyd 		.enable_reg = 0x2b14,
8802ec94130SStephen Boyd 		.enable_mask = BIT(11),
8812ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
8822ec94130SStephen Boyd 			.name = "gsbi11_uart_src",
883e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
884d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
8852ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
8862ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
8872ec94130SStephen Boyd 		},
8882ec94130SStephen Boyd 	},
8892ec94130SStephen Boyd };
8902ec94130SStephen Boyd 
8912ec94130SStephen Boyd static struct clk_branch gsbi11_uart_clk = {
8922ec94130SStephen Boyd 	.halt_reg = 0x2fd4,
8932ec94130SStephen Boyd 	.halt_bit = 17,
8942ec94130SStephen Boyd 	.clkr = {
8952ec94130SStephen Boyd 		.enable_reg = 0x2b14,
8962ec94130SStephen Boyd 		.enable_mask = BIT(9),
8972ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
8982ec94130SStephen Boyd 			.name = "gsbi11_uart_clk",
899e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
900e38fc8f0SDmitry Baryshkov 				&gsbi11_uart_src.clkr.hw
901e38fc8f0SDmitry Baryshkov 			},
9022ec94130SStephen Boyd 			.num_parents = 1,
9032ec94130SStephen Boyd 			.ops = &clk_branch_ops,
9042ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
9052ec94130SStephen Boyd 		},
9062ec94130SStephen Boyd 	},
9072ec94130SStephen Boyd };
9082ec94130SStephen Boyd 
9092ec94130SStephen Boyd static struct clk_rcg gsbi12_uart_src = {
9102ec94130SStephen Boyd 	.ns_reg = 0x2b34,
9112ec94130SStephen Boyd 	.md_reg = 0x2b30,
9122ec94130SStephen Boyd 	.mn = {
9132ec94130SStephen Boyd 		.mnctr_en_bit = 8,
9142ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
9152ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
9162ec94130SStephen Boyd 		.n_val_shift = 16,
9172ec94130SStephen Boyd 		.m_val_shift = 16,
9182ec94130SStephen Boyd 		.width = 16,
9192ec94130SStephen Boyd 	},
9202ec94130SStephen Boyd 	.p = {
9212ec94130SStephen Boyd 		.pre_div_shift = 3,
9222ec94130SStephen Boyd 		.pre_div_width = 2,
9232ec94130SStephen Boyd 	},
9242ec94130SStephen Boyd 	.s = {
9252ec94130SStephen Boyd 		.src_sel_shift = 0,
9262ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
9272ec94130SStephen Boyd 	},
9282ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_uart,
9292ec94130SStephen Boyd 	.clkr = {
9302ec94130SStephen Boyd 		.enable_reg = 0x2b34,
9312ec94130SStephen Boyd 		.enable_mask = BIT(11),
9322ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
9332ec94130SStephen Boyd 			.name = "gsbi12_uart_src",
934e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
935d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
9362ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
9372ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
9382ec94130SStephen Boyd 		},
9392ec94130SStephen Boyd 	},
9402ec94130SStephen Boyd };
9412ec94130SStephen Boyd 
9422ec94130SStephen Boyd static struct clk_branch gsbi12_uart_clk = {
9432ec94130SStephen Boyd 	.halt_reg = 0x2fd4,
9442ec94130SStephen Boyd 	.halt_bit = 13,
9452ec94130SStephen Boyd 	.clkr = {
9462ec94130SStephen Boyd 		.enable_reg = 0x2b34,
9472ec94130SStephen Boyd 		.enable_mask = BIT(9),
9482ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
9492ec94130SStephen Boyd 			.name = "gsbi12_uart_clk",
950e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
951e38fc8f0SDmitry Baryshkov 				&gsbi12_uart_src.clkr.hw
952e38fc8f0SDmitry Baryshkov 			},
9532ec94130SStephen Boyd 			.num_parents = 1,
9542ec94130SStephen Boyd 			.ops = &clk_branch_ops,
9552ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
9562ec94130SStephen Boyd 		},
9572ec94130SStephen Boyd 	},
9582ec94130SStephen Boyd };
9592ec94130SStephen Boyd 
9602ec94130SStephen Boyd static struct freq_tbl clk_tbl_gsbi_qup[] = {
9612ec94130SStephen Boyd 	{  1100000, P_PXO,  1, 2, 49 },
9622ec94130SStephen Boyd 	{  5400000, P_PXO,  1, 1,  5 },
9632ec94130SStephen Boyd 	{ 10800000, P_PXO,  1, 2,  5 },
9642ec94130SStephen Boyd 	{ 15060000, P_PLL8, 1, 2, 51 },
9652ec94130SStephen Boyd 	{ 24000000, P_PLL8, 4, 1,  4 },
9662ec94130SStephen Boyd 	{ 25600000, P_PLL8, 1, 1, 15 },
9672ec94130SStephen Boyd 	{ 27000000, P_PXO,  1, 0,  0 },
9682ec94130SStephen Boyd 	{ 48000000, P_PLL8, 4, 1,  2 },
9692ec94130SStephen Boyd 	{ 51200000, P_PLL8, 1, 2, 15 },
9702ec94130SStephen Boyd 	{ }
9712ec94130SStephen Boyd };
9722ec94130SStephen Boyd 
9732ec94130SStephen Boyd static struct clk_rcg gsbi1_qup_src = {
9742ec94130SStephen Boyd 	.ns_reg = 0x29cc,
9752ec94130SStephen Boyd 	.md_reg = 0x29c8,
9762ec94130SStephen Boyd 	.mn = {
9772ec94130SStephen Boyd 		.mnctr_en_bit = 8,
9782ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
9792ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
9802ec94130SStephen Boyd 		.n_val_shift = 16,
9812ec94130SStephen Boyd 		.m_val_shift = 16,
9822ec94130SStephen Boyd 		.width = 8,
9832ec94130SStephen Boyd 	},
9842ec94130SStephen Boyd 	.p = {
9852ec94130SStephen Boyd 		.pre_div_shift = 3,
9862ec94130SStephen Boyd 		.pre_div_width = 2,
9872ec94130SStephen Boyd 	},
9882ec94130SStephen Boyd 	.s = {
9892ec94130SStephen Boyd 		.src_sel_shift = 0,
9902ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
9912ec94130SStephen Boyd 	},
9922ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_qup,
9932ec94130SStephen Boyd 	.clkr = {
9942ec94130SStephen Boyd 		.enable_reg = 0x29cc,
9952ec94130SStephen Boyd 		.enable_mask = BIT(11),
9962ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
9972ec94130SStephen Boyd 			.name = "gsbi1_qup_src",
998e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
999d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
10002ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
10012ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
10022ec94130SStephen Boyd 		},
10032ec94130SStephen Boyd 	},
10042ec94130SStephen Boyd };
10052ec94130SStephen Boyd 
10062ec94130SStephen Boyd static struct clk_branch gsbi1_qup_clk = {
10072ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
10082ec94130SStephen Boyd 	.halt_bit = 9,
10092ec94130SStephen Boyd 	.clkr = {
10102ec94130SStephen Boyd 		.enable_reg = 0x29cc,
10112ec94130SStephen Boyd 		.enable_mask = BIT(9),
10122ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
10132ec94130SStephen Boyd 			.name = "gsbi1_qup_clk",
1014e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1015e38fc8f0SDmitry Baryshkov 				&gsbi1_qup_src.clkr.hw
1016e38fc8f0SDmitry Baryshkov 			},
10172ec94130SStephen Boyd 			.num_parents = 1,
10182ec94130SStephen Boyd 			.ops = &clk_branch_ops,
10192ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
10202ec94130SStephen Boyd 		},
10212ec94130SStephen Boyd 	},
10222ec94130SStephen Boyd };
10232ec94130SStephen Boyd 
10242ec94130SStephen Boyd static struct clk_rcg gsbi2_qup_src = {
10252ec94130SStephen Boyd 	.ns_reg = 0x29ec,
10262ec94130SStephen Boyd 	.md_reg = 0x29e8,
10272ec94130SStephen Boyd 	.mn = {
10282ec94130SStephen Boyd 		.mnctr_en_bit = 8,
10292ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
10302ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
10312ec94130SStephen Boyd 		.n_val_shift = 16,
10322ec94130SStephen Boyd 		.m_val_shift = 16,
10332ec94130SStephen Boyd 		.width = 8,
10342ec94130SStephen Boyd 	},
10352ec94130SStephen Boyd 	.p = {
10362ec94130SStephen Boyd 		.pre_div_shift = 3,
10372ec94130SStephen Boyd 		.pre_div_width = 2,
10382ec94130SStephen Boyd 	},
10392ec94130SStephen Boyd 	.s = {
10402ec94130SStephen Boyd 		.src_sel_shift = 0,
10412ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
10422ec94130SStephen Boyd 	},
10432ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_qup,
10442ec94130SStephen Boyd 	.clkr = {
10452ec94130SStephen Boyd 		.enable_reg = 0x29ec,
10462ec94130SStephen Boyd 		.enable_mask = BIT(11),
10472ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
10482ec94130SStephen Boyd 			.name = "gsbi2_qup_src",
1049e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
1050d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
10512ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
10522ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
10532ec94130SStephen Boyd 		},
10542ec94130SStephen Boyd 	},
10552ec94130SStephen Boyd };
10562ec94130SStephen Boyd 
10572ec94130SStephen Boyd static struct clk_branch gsbi2_qup_clk = {
10582ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
10592ec94130SStephen Boyd 	.halt_bit = 4,
10602ec94130SStephen Boyd 	.clkr = {
10612ec94130SStephen Boyd 		.enable_reg = 0x29ec,
10622ec94130SStephen Boyd 		.enable_mask = BIT(9),
10632ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
10642ec94130SStephen Boyd 			.name = "gsbi2_qup_clk",
1065e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1066e38fc8f0SDmitry Baryshkov 				&gsbi2_qup_src.clkr.hw
1067e38fc8f0SDmitry Baryshkov 			},
10682ec94130SStephen Boyd 			.num_parents = 1,
10692ec94130SStephen Boyd 			.ops = &clk_branch_ops,
10702ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
10712ec94130SStephen Boyd 		},
10722ec94130SStephen Boyd 	},
10732ec94130SStephen Boyd };
10742ec94130SStephen Boyd 
10752ec94130SStephen Boyd static struct clk_rcg gsbi3_qup_src = {
10762ec94130SStephen Boyd 	.ns_reg = 0x2a0c,
10772ec94130SStephen Boyd 	.md_reg = 0x2a08,
10782ec94130SStephen Boyd 	.mn = {
10792ec94130SStephen Boyd 		.mnctr_en_bit = 8,
10802ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
10812ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
10822ec94130SStephen Boyd 		.n_val_shift = 16,
10832ec94130SStephen Boyd 		.m_val_shift = 16,
10842ec94130SStephen Boyd 		.width = 8,
10852ec94130SStephen Boyd 	},
10862ec94130SStephen Boyd 	.p = {
10872ec94130SStephen Boyd 		.pre_div_shift = 3,
10882ec94130SStephen Boyd 		.pre_div_width = 2,
10892ec94130SStephen Boyd 	},
10902ec94130SStephen Boyd 	.s = {
10912ec94130SStephen Boyd 		.src_sel_shift = 0,
10922ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
10932ec94130SStephen Boyd 	},
10942ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_qup,
10952ec94130SStephen Boyd 	.clkr = {
10962ec94130SStephen Boyd 		.enable_reg = 0x2a0c,
10972ec94130SStephen Boyd 		.enable_mask = BIT(11),
10982ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
10992ec94130SStephen Boyd 			.name = "gsbi3_qup_src",
1100e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
1101d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
11022ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
11032ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
11042ec94130SStephen Boyd 		},
11052ec94130SStephen Boyd 	},
11062ec94130SStephen Boyd };
11072ec94130SStephen Boyd 
11082ec94130SStephen Boyd static struct clk_branch gsbi3_qup_clk = {
11092ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
11102ec94130SStephen Boyd 	.halt_bit = 0,
11112ec94130SStephen Boyd 	.clkr = {
11122ec94130SStephen Boyd 		.enable_reg = 0x2a0c,
11132ec94130SStephen Boyd 		.enable_mask = BIT(9),
11142ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
11152ec94130SStephen Boyd 			.name = "gsbi3_qup_clk",
1116e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1117e38fc8f0SDmitry Baryshkov 				&gsbi3_qup_src.clkr.hw
1118e38fc8f0SDmitry Baryshkov 			},
11192ec94130SStephen Boyd 			.num_parents = 1,
11202ec94130SStephen Boyd 			.ops = &clk_branch_ops,
11212ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
11222ec94130SStephen Boyd 		},
11232ec94130SStephen Boyd 	},
11242ec94130SStephen Boyd };
11252ec94130SStephen Boyd 
11262ec94130SStephen Boyd static struct clk_rcg gsbi4_qup_src = {
11272ec94130SStephen Boyd 	.ns_reg = 0x2a2c,
11282ec94130SStephen Boyd 	.md_reg = 0x2a28,
11292ec94130SStephen Boyd 	.mn = {
11302ec94130SStephen Boyd 		.mnctr_en_bit = 8,
11312ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
11322ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
11332ec94130SStephen Boyd 		.n_val_shift = 16,
11342ec94130SStephen Boyd 		.m_val_shift = 16,
11352ec94130SStephen Boyd 		.width = 8,
11362ec94130SStephen Boyd 	},
11372ec94130SStephen Boyd 	.p = {
11382ec94130SStephen Boyd 		.pre_div_shift = 3,
11392ec94130SStephen Boyd 		.pre_div_width = 2,
11402ec94130SStephen Boyd 	},
11412ec94130SStephen Boyd 	.s = {
11422ec94130SStephen Boyd 		.src_sel_shift = 0,
11432ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
11442ec94130SStephen Boyd 	},
11452ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_qup,
11462ec94130SStephen Boyd 	.clkr = {
11472ec94130SStephen Boyd 		.enable_reg = 0x2a2c,
11482ec94130SStephen Boyd 		.enable_mask = BIT(11),
11492ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
11502ec94130SStephen Boyd 			.name = "gsbi4_qup_src",
1151e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
1152d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
11532ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
11542ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
11552ec94130SStephen Boyd 		},
11562ec94130SStephen Boyd 	},
11572ec94130SStephen Boyd };
11582ec94130SStephen Boyd 
11592ec94130SStephen Boyd static struct clk_branch gsbi4_qup_clk = {
11602ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
11612ec94130SStephen Boyd 	.halt_bit = 24,
11622ec94130SStephen Boyd 	.clkr = {
11632ec94130SStephen Boyd 		.enable_reg = 0x2a2c,
11642ec94130SStephen Boyd 		.enable_mask = BIT(9),
11652ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
11662ec94130SStephen Boyd 			.name = "gsbi4_qup_clk",
1167e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1168e38fc8f0SDmitry Baryshkov 				&gsbi4_qup_src.clkr.hw
1169e38fc8f0SDmitry Baryshkov 			},
11702ec94130SStephen Boyd 			.num_parents = 1,
11712ec94130SStephen Boyd 			.ops = &clk_branch_ops,
11722ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
11732ec94130SStephen Boyd 		},
11742ec94130SStephen Boyd 	},
11752ec94130SStephen Boyd };
11762ec94130SStephen Boyd 
11772ec94130SStephen Boyd static struct clk_rcg gsbi5_qup_src = {
11782ec94130SStephen Boyd 	.ns_reg = 0x2a4c,
11792ec94130SStephen Boyd 	.md_reg = 0x2a48,
11802ec94130SStephen Boyd 	.mn = {
11812ec94130SStephen Boyd 		.mnctr_en_bit = 8,
11822ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
11832ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
11842ec94130SStephen Boyd 		.n_val_shift = 16,
11852ec94130SStephen Boyd 		.m_val_shift = 16,
11862ec94130SStephen Boyd 		.width = 8,
11872ec94130SStephen Boyd 	},
11882ec94130SStephen Boyd 	.p = {
11892ec94130SStephen Boyd 		.pre_div_shift = 3,
11902ec94130SStephen Boyd 		.pre_div_width = 2,
11912ec94130SStephen Boyd 	},
11922ec94130SStephen Boyd 	.s = {
11932ec94130SStephen Boyd 		.src_sel_shift = 0,
11942ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
11952ec94130SStephen Boyd 	},
11962ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_qup,
11972ec94130SStephen Boyd 	.clkr = {
11982ec94130SStephen Boyd 		.enable_reg = 0x2a4c,
11992ec94130SStephen Boyd 		.enable_mask = BIT(11),
12002ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
12012ec94130SStephen Boyd 			.name = "gsbi5_qup_src",
1202e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
1203d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
12042ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
12052ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
12062ec94130SStephen Boyd 		},
12072ec94130SStephen Boyd 	},
12082ec94130SStephen Boyd };
12092ec94130SStephen Boyd 
12102ec94130SStephen Boyd static struct clk_branch gsbi5_qup_clk = {
12112ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
12122ec94130SStephen Boyd 	.halt_bit = 20,
12132ec94130SStephen Boyd 	.clkr = {
12142ec94130SStephen Boyd 		.enable_reg = 0x2a4c,
12152ec94130SStephen Boyd 		.enable_mask = BIT(9),
12162ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
12172ec94130SStephen Boyd 			.name = "gsbi5_qup_clk",
1218e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1219e38fc8f0SDmitry Baryshkov 				&gsbi5_qup_src.clkr.hw
1220e38fc8f0SDmitry Baryshkov 			},
12212ec94130SStephen Boyd 			.num_parents = 1,
12222ec94130SStephen Boyd 			.ops = &clk_branch_ops,
12232ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
12242ec94130SStephen Boyd 		},
12252ec94130SStephen Boyd 	},
12262ec94130SStephen Boyd };
12272ec94130SStephen Boyd 
12282ec94130SStephen Boyd static struct clk_rcg gsbi6_qup_src = {
12292ec94130SStephen Boyd 	.ns_reg = 0x2a6c,
12302ec94130SStephen Boyd 	.md_reg = 0x2a68,
12312ec94130SStephen Boyd 	.mn = {
12322ec94130SStephen Boyd 		.mnctr_en_bit = 8,
12332ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
12342ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
12352ec94130SStephen Boyd 		.n_val_shift = 16,
12362ec94130SStephen Boyd 		.m_val_shift = 16,
12372ec94130SStephen Boyd 		.width = 8,
12382ec94130SStephen Boyd 	},
12392ec94130SStephen Boyd 	.p = {
12402ec94130SStephen Boyd 		.pre_div_shift = 3,
12412ec94130SStephen Boyd 		.pre_div_width = 2,
12422ec94130SStephen Boyd 	},
12432ec94130SStephen Boyd 	.s = {
12442ec94130SStephen Boyd 		.src_sel_shift = 0,
12452ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
12462ec94130SStephen Boyd 	},
12472ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_qup,
12482ec94130SStephen Boyd 	.clkr = {
12492ec94130SStephen Boyd 		.enable_reg = 0x2a6c,
12502ec94130SStephen Boyd 		.enable_mask = BIT(11),
12512ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
12522ec94130SStephen Boyd 			.name = "gsbi6_qup_src",
1253e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
1254d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
12552ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
12562ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
12572ec94130SStephen Boyd 		},
12582ec94130SStephen Boyd 	},
12592ec94130SStephen Boyd };
12602ec94130SStephen Boyd 
12612ec94130SStephen Boyd static struct clk_branch gsbi6_qup_clk = {
12622ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
12632ec94130SStephen Boyd 	.halt_bit = 16,
12642ec94130SStephen Boyd 	.clkr = {
12652ec94130SStephen Boyd 		.enable_reg = 0x2a6c,
12662ec94130SStephen Boyd 		.enable_mask = BIT(9),
12672ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
12682ec94130SStephen Boyd 			.name = "gsbi6_qup_clk",
1269e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1270e38fc8f0SDmitry Baryshkov 				&gsbi6_qup_src.clkr.hw
1271e38fc8f0SDmitry Baryshkov 			},
12722ec94130SStephen Boyd 			.num_parents = 1,
12732ec94130SStephen Boyd 			.ops = &clk_branch_ops,
12742ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
12752ec94130SStephen Boyd 		},
12762ec94130SStephen Boyd 	},
12772ec94130SStephen Boyd };
12782ec94130SStephen Boyd 
12792ec94130SStephen Boyd static struct clk_rcg gsbi7_qup_src = {
12802ec94130SStephen Boyd 	.ns_reg = 0x2a8c,
12812ec94130SStephen Boyd 	.md_reg = 0x2a88,
12822ec94130SStephen Boyd 	.mn = {
12832ec94130SStephen Boyd 		.mnctr_en_bit = 8,
12842ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
12852ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
12862ec94130SStephen Boyd 		.n_val_shift = 16,
12872ec94130SStephen Boyd 		.m_val_shift = 16,
12882ec94130SStephen Boyd 		.width = 8,
12892ec94130SStephen Boyd 	},
12902ec94130SStephen Boyd 	.p = {
12912ec94130SStephen Boyd 		.pre_div_shift = 3,
12922ec94130SStephen Boyd 		.pre_div_width = 2,
12932ec94130SStephen Boyd 	},
12942ec94130SStephen Boyd 	.s = {
12952ec94130SStephen Boyd 		.src_sel_shift = 0,
12962ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
12972ec94130SStephen Boyd 	},
12982ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_qup,
12992ec94130SStephen Boyd 	.clkr = {
13002ec94130SStephen Boyd 		.enable_reg = 0x2a8c,
13012ec94130SStephen Boyd 		.enable_mask = BIT(11),
13022ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
13032ec94130SStephen Boyd 			.name = "gsbi7_qup_src",
1304e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
1305d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
13062ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
13072ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
13082ec94130SStephen Boyd 		},
13092ec94130SStephen Boyd 	},
13102ec94130SStephen Boyd };
13112ec94130SStephen Boyd 
13122ec94130SStephen Boyd static struct clk_branch gsbi7_qup_clk = {
13132ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
13142ec94130SStephen Boyd 	.halt_bit = 12,
13152ec94130SStephen Boyd 	.clkr = {
13162ec94130SStephen Boyd 		.enable_reg = 0x2a8c,
13172ec94130SStephen Boyd 		.enable_mask = BIT(9),
13182ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
13192ec94130SStephen Boyd 			.name = "gsbi7_qup_clk",
1320e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1321e38fc8f0SDmitry Baryshkov 				&gsbi7_qup_src.clkr.hw
1322e38fc8f0SDmitry Baryshkov 			},
13232ec94130SStephen Boyd 			.num_parents = 1,
13242ec94130SStephen Boyd 			.ops = &clk_branch_ops,
13252ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
13262ec94130SStephen Boyd 		},
13272ec94130SStephen Boyd 	},
13282ec94130SStephen Boyd };
13292ec94130SStephen Boyd 
13302ec94130SStephen Boyd static struct clk_rcg gsbi8_qup_src = {
13312ec94130SStephen Boyd 	.ns_reg = 0x2aac,
13322ec94130SStephen Boyd 	.md_reg = 0x2aa8,
13332ec94130SStephen Boyd 	.mn = {
13342ec94130SStephen Boyd 		.mnctr_en_bit = 8,
13352ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
13362ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
13372ec94130SStephen Boyd 		.n_val_shift = 16,
13382ec94130SStephen Boyd 		.m_val_shift = 16,
13392ec94130SStephen Boyd 		.width = 8,
13402ec94130SStephen Boyd 	},
13412ec94130SStephen Boyd 	.p = {
13422ec94130SStephen Boyd 		.pre_div_shift = 3,
13432ec94130SStephen Boyd 		.pre_div_width = 2,
13442ec94130SStephen Boyd 	},
13452ec94130SStephen Boyd 	.s = {
13462ec94130SStephen Boyd 		.src_sel_shift = 0,
13472ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
13482ec94130SStephen Boyd 	},
13492ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_qup,
13502ec94130SStephen Boyd 	.clkr = {
13512ec94130SStephen Boyd 		.enable_reg = 0x2aac,
13522ec94130SStephen Boyd 		.enable_mask = BIT(11),
13532ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
13542ec94130SStephen Boyd 			.name = "gsbi8_qup_src",
1355e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
1356d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
13572ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
13582ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
13592ec94130SStephen Boyd 		},
13602ec94130SStephen Boyd 	},
13612ec94130SStephen Boyd };
13622ec94130SStephen Boyd 
13632ec94130SStephen Boyd static struct clk_branch gsbi8_qup_clk = {
13642ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
13652ec94130SStephen Boyd 	.halt_bit = 8,
13662ec94130SStephen Boyd 	.clkr = {
13672ec94130SStephen Boyd 		.enable_reg = 0x2aac,
13682ec94130SStephen Boyd 		.enable_mask = BIT(9),
13692ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
13702ec94130SStephen Boyd 			.name = "gsbi8_qup_clk",
1371e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1372e38fc8f0SDmitry Baryshkov 				&gsbi8_qup_src.clkr.hw
1373e38fc8f0SDmitry Baryshkov 			},
13742ec94130SStephen Boyd 			.num_parents = 1,
13752ec94130SStephen Boyd 			.ops = &clk_branch_ops,
13762ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
13772ec94130SStephen Boyd 		},
13782ec94130SStephen Boyd 	},
13792ec94130SStephen Boyd };
13802ec94130SStephen Boyd 
13812ec94130SStephen Boyd static struct clk_rcg gsbi9_qup_src = {
13822ec94130SStephen Boyd 	.ns_reg = 0x2acc,
13832ec94130SStephen Boyd 	.md_reg = 0x2ac8,
13842ec94130SStephen Boyd 	.mn = {
13852ec94130SStephen Boyd 		.mnctr_en_bit = 8,
13862ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
13872ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
13882ec94130SStephen Boyd 		.n_val_shift = 16,
13892ec94130SStephen Boyd 		.m_val_shift = 16,
13902ec94130SStephen Boyd 		.width = 8,
13912ec94130SStephen Boyd 	},
13922ec94130SStephen Boyd 	.p = {
13932ec94130SStephen Boyd 		.pre_div_shift = 3,
13942ec94130SStephen Boyd 		.pre_div_width = 2,
13952ec94130SStephen Boyd 	},
13962ec94130SStephen Boyd 	.s = {
13972ec94130SStephen Boyd 		.src_sel_shift = 0,
13982ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
13992ec94130SStephen Boyd 	},
14002ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_qup,
14012ec94130SStephen Boyd 	.clkr = {
14022ec94130SStephen Boyd 		.enable_reg = 0x2acc,
14032ec94130SStephen Boyd 		.enable_mask = BIT(11),
14042ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
14052ec94130SStephen Boyd 			.name = "gsbi9_qup_src",
1406e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
1407d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
14082ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
14092ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
14102ec94130SStephen Boyd 		},
14112ec94130SStephen Boyd 	},
14122ec94130SStephen Boyd };
14132ec94130SStephen Boyd 
14142ec94130SStephen Boyd static struct clk_branch gsbi9_qup_clk = {
14152ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
14162ec94130SStephen Boyd 	.halt_bit = 4,
14172ec94130SStephen Boyd 	.clkr = {
14182ec94130SStephen Boyd 		.enable_reg = 0x2acc,
14192ec94130SStephen Boyd 		.enable_mask = BIT(9),
14202ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
14212ec94130SStephen Boyd 			.name = "gsbi9_qup_clk",
1422e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1423e38fc8f0SDmitry Baryshkov 				&gsbi9_qup_src.clkr.hw
1424e38fc8f0SDmitry Baryshkov 			},
14252ec94130SStephen Boyd 			.num_parents = 1,
14262ec94130SStephen Boyd 			.ops = &clk_branch_ops,
14272ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
14282ec94130SStephen Boyd 		},
14292ec94130SStephen Boyd 	},
14302ec94130SStephen Boyd };
14312ec94130SStephen Boyd 
14322ec94130SStephen Boyd static struct clk_rcg gsbi10_qup_src = {
14332ec94130SStephen Boyd 	.ns_reg = 0x2aec,
14342ec94130SStephen Boyd 	.md_reg = 0x2ae8,
14352ec94130SStephen Boyd 	.mn = {
14362ec94130SStephen Boyd 		.mnctr_en_bit = 8,
14372ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
14382ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
14392ec94130SStephen Boyd 		.n_val_shift = 16,
14402ec94130SStephen Boyd 		.m_val_shift = 16,
14412ec94130SStephen Boyd 		.width = 8,
14422ec94130SStephen Boyd 	},
14432ec94130SStephen Boyd 	.p = {
14442ec94130SStephen Boyd 		.pre_div_shift = 3,
14452ec94130SStephen Boyd 		.pre_div_width = 2,
14462ec94130SStephen Boyd 	},
14472ec94130SStephen Boyd 	.s = {
14482ec94130SStephen Boyd 		.src_sel_shift = 0,
14492ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
14502ec94130SStephen Boyd 	},
14512ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_qup,
14522ec94130SStephen Boyd 	.clkr = {
14532ec94130SStephen Boyd 		.enable_reg = 0x2aec,
14542ec94130SStephen Boyd 		.enable_mask = BIT(11),
14552ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
14562ec94130SStephen Boyd 			.name = "gsbi10_qup_src",
1457e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
1458d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
14592ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
14602ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
14612ec94130SStephen Boyd 		},
14622ec94130SStephen Boyd 	},
14632ec94130SStephen Boyd };
14642ec94130SStephen Boyd 
14652ec94130SStephen Boyd static struct clk_branch gsbi10_qup_clk = {
14662ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
14672ec94130SStephen Boyd 	.halt_bit = 0,
14682ec94130SStephen Boyd 	.clkr = {
14692ec94130SStephen Boyd 		.enable_reg = 0x2aec,
14702ec94130SStephen Boyd 		.enable_mask = BIT(9),
14712ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
14722ec94130SStephen Boyd 			.name = "gsbi10_qup_clk",
1473e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1474e38fc8f0SDmitry Baryshkov 				&gsbi10_qup_src.clkr.hw
1475e38fc8f0SDmitry Baryshkov 			},
14762ec94130SStephen Boyd 			.num_parents = 1,
14772ec94130SStephen Boyd 			.ops = &clk_branch_ops,
14782ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
14792ec94130SStephen Boyd 		},
14802ec94130SStephen Boyd 	},
14812ec94130SStephen Boyd };
14822ec94130SStephen Boyd 
14832ec94130SStephen Boyd static struct clk_rcg gsbi11_qup_src = {
14842ec94130SStephen Boyd 	.ns_reg = 0x2b0c,
14852ec94130SStephen Boyd 	.md_reg = 0x2b08,
14862ec94130SStephen Boyd 	.mn = {
14872ec94130SStephen Boyd 		.mnctr_en_bit = 8,
14882ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
14892ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
14902ec94130SStephen Boyd 		.n_val_shift = 16,
14912ec94130SStephen Boyd 		.m_val_shift = 16,
14922ec94130SStephen Boyd 		.width = 8,
14932ec94130SStephen Boyd 	},
14942ec94130SStephen Boyd 	.p = {
14952ec94130SStephen Boyd 		.pre_div_shift = 3,
14962ec94130SStephen Boyd 		.pre_div_width = 2,
14972ec94130SStephen Boyd 	},
14982ec94130SStephen Boyd 	.s = {
14992ec94130SStephen Boyd 		.src_sel_shift = 0,
15002ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
15012ec94130SStephen Boyd 	},
15022ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_qup,
15032ec94130SStephen Boyd 	.clkr = {
15042ec94130SStephen Boyd 		.enable_reg = 0x2b0c,
15052ec94130SStephen Boyd 		.enable_mask = BIT(11),
15062ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
15072ec94130SStephen Boyd 			.name = "gsbi11_qup_src",
1508e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
1509d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
15102ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
15112ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
15122ec94130SStephen Boyd 		},
15132ec94130SStephen Boyd 	},
15142ec94130SStephen Boyd };
15152ec94130SStephen Boyd 
15162ec94130SStephen Boyd static struct clk_branch gsbi11_qup_clk = {
15172ec94130SStephen Boyd 	.halt_reg = 0x2fd4,
15182ec94130SStephen Boyd 	.halt_bit = 15,
15192ec94130SStephen Boyd 	.clkr = {
15202ec94130SStephen Boyd 		.enable_reg = 0x2b0c,
15212ec94130SStephen Boyd 		.enable_mask = BIT(9),
15222ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
15232ec94130SStephen Boyd 			.name = "gsbi11_qup_clk",
1524e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1525e38fc8f0SDmitry Baryshkov 				&gsbi11_qup_src.clkr.hw
1526e38fc8f0SDmitry Baryshkov 			},
15272ec94130SStephen Boyd 			.num_parents = 1,
15282ec94130SStephen Boyd 			.ops = &clk_branch_ops,
15292ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
15302ec94130SStephen Boyd 		},
15312ec94130SStephen Boyd 	},
15322ec94130SStephen Boyd };
15332ec94130SStephen Boyd 
15342ec94130SStephen Boyd static struct clk_rcg gsbi12_qup_src = {
15352ec94130SStephen Boyd 	.ns_reg = 0x2b2c,
15362ec94130SStephen Boyd 	.md_reg = 0x2b28,
15372ec94130SStephen Boyd 	.mn = {
15382ec94130SStephen Boyd 		.mnctr_en_bit = 8,
15392ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
15402ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
15412ec94130SStephen Boyd 		.n_val_shift = 16,
15422ec94130SStephen Boyd 		.m_val_shift = 16,
15432ec94130SStephen Boyd 		.width = 8,
15442ec94130SStephen Boyd 	},
15452ec94130SStephen Boyd 	.p = {
15462ec94130SStephen Boyd 		.pre_div_shift = 3,
15472ec94130SStephen Boyd 		.pre_div_width = 2,
15482ec94130SStephen Boyd 	},
15492ec94130SStephen Boyd 	.s = {
15502ec94130SStephen Boyd 		.src_sel_shift = 0,
15512ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
15522ec94130SStephen Boyd 	},
15532ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gsbi_qup,
15542ec94130SStephen Boyd 	.clkr = {
15552ec94130SStephen Boyd 		.enable_reg = 0x2b2c,
15562ec94130SStephen Boyd 		.enable_mask = BIT(11),
15572ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
15582ec94130SStephen Boyd 			.name = "gsbi12_qup_src",
1559e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
1560d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
15612ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
15622ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
15632ec94130SStephen Boyd 		},
15642ec94130SStephen Boyd 	},
15652ec94130SStephen Boyd };
15662ec94130SStephen Boyd 
15672ec94130SStephen Boyd static struct clk_branch gsbi12_qup_clk = {
15682ec94130SStephen Boyd 	.halt_reg = 0x2fd4,
15692ec94130SStephen Boyd 	.halt_bit = 11,
15702ec94130SStephen Boyd 	.clkr = {
15712ec94130SStephen Boyd 		.enable_reg = 0x2b2c,
15722ec94130SStephen Boyd 		.enable_mask = BIT(9),
15732ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
15742ec94130SStephen Boyd 			.name = "gsbi12_qup_clk",
1575e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1576e38fc8f0SDmitry Baryshkov 				&gsbi12_qup_src.clkr.hw
1577e38fc8f0SDmitry Baryshkov 			},
15782ec94130SStephen Boyd 			.num_parents = 1,
15792ec94130SStephen Boyd 			.ops = &clk_branch_ops,
15802ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
15812ec94130SStephen Boyd 		},
15822ec94130SStephen Boyd 	},
15832ec94130SStephen Boyd };
15842ec94130SStephen Boyd 
15852ec94130SStephen Boyd static const struct freq_tbl clk_tbl_gp[] = {
15862ec94130SStephen Boyd 	{ 9600000, P_CXO,  2, 0, 0 },
15872ec94130SStephen Boyd 	{ 13500000, P_PXO,  2, 0, 0 },
15882ec94130SStephen Boyd 	{ 19200000, P_CXO,  1, 0, 0 },
15892ec94130SStephen Boyd 	{ 27000000, P_PXO,  1, 0, 0 },
15902ec94130SStephen Boyd 	{ 64000000, P_PLL8, 2, 1, 3 },
15912ec94130SStephen Boyd 	{ 76800000, P_PLL8, 1, 1, 5 },
15922ec94130SStephen Boyd 	{ 96000000, P_PLL8, 4, 0, 0 },
15932ec94130SStephen Boyd 	{ 128000000, P_PLL8, 3, 0, 0 },
15942ec94130SStephen Boyd 	{ 192000000, P_PLL8, 2, 0, 0 },
15952ec94130SStephen Boyd 	{ }
15962ec94130SStephen Boyd };
15972ec94130SStephen Boyd 
15982ec94130SStephen Boyd static struct clk_rcg gp0_src = {
15992ec94130SStephen Boyd 	.ns_reg = 0x2d24,
16002ec94130SStephen Boyd 	.md_reg = 0x2d00,
16012ec94130SStephen Boyd 	.mn = {
16022ec94130SStephen Boyd 		.mnctr_en_bit = 8,
16032ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
16042ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
16052ec94130SStephen Boyd 		.n_val_shift = 16,
16062ec94130SStephen Boyd 		.m_val_shift = 16,
16072ec94130SStephen Boyd 		.width = 8,
16082ec94130SStephen Boyd 	},
16092ec94130SStephen Boyd 	.p = {
16102ec94130SStephen Boyd 		.pre_div_shift = 3,
16112ec94130SStephen Boyd 		.pre_div_width = 2,
16122ec94130SStephen Boyd 	},
16132ec94130SStephen Boyd 	.s = {
16142ec94130SStephen Boyd 		.src_sel_shift = 0,
16152ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_cxo_map,
16162ec94130SStephen Boyd 	},
16172ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gp,
16182ec94130SStephen Boyd 	.clkr = {
16192ec94130SStephen Boyd 		.enable_reg = 0x2d24,
16202ec94130SStephen Boyd 		.enable_mask = BIT(11),
16212ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
16222ec94130SStephen Boyd 			.name = "gp0_src",
1623e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8_cxo,
1624d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_cxo),
16252ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
16262ec94130SStephen Boyd 			.flags = CLK_SET_PARENT_GATE,
16272ec94130SStephen Boyd 		},
16282ec94130SStephen Boyd 	}
16292ec94130SStephen Boyd };
16302ec94130SStephen Boyd 
16312ec94130SStephen Boyd static struct clk_branch gp0_clk = {
16322ec94130SStephen Boyd 	.halt_reg = 0x2fd8,
16332ec94130SStephen Boyd 	.halt_bit = 7,
16342ec94130SStephen Boyd 	.clkr = {
16352ec94130SStephen Boyd 		.enable_reg = 0x2d24,
16362ec94130SStephen Boyd 		.enable_mask = BIT(9),
16372ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
16382ec94130SStephen Boyd 			.name = "gp0_clk",
1639e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1640e38fc8f0SDmitry Baryshkov 				&gp0_src.clkr.hw
1641e38fc8f0SDmitry Baryshkov 			},
16422ec94130SStephen Boyd 			.num_parents = 1,
16432ec94130SStephen Boyd 			.ops = &clk_branch_ops,
16442ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
16452ec94130SStephen Boyd 		},
16462ec94130SStephen Boyd 	},
16472ec94130SStephen Boyd };
16482ec94130SStephen Boyd 
16492ec94130SStephen Boyd static struct clk_rcg gp1_src = {
16502ec94130SStephen Boyd 	.ns_reg = 0x2d44,
16512ec94130SStephen Boyd 	.md_reg = 0x2d40,
16522ec94130SStephen Boyd 	.mn = {
16532ec94130SStephen Boyd 		.mnctr_en_bit = 8,
16542ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
16552ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
16562ec94130SStephen Boyd 		.n_val_shift = 16,
16572ec94130SStephen Boyd 		.m_val_shift = 16,
16582ec94130SStephen Boyd 		.width = 8,
16592ec94130SStephen Boyd 	},
16602ec94130SStephen Boyd 	.p = {
16612ec94130SStephen Boyd 		.pre_div_shift = 3,
16622ec94130SStephen Boyd 		.pre_div_width = 2,
16632ec94130SStephen Boyd 	},
16642ec94130SStephen Boyd 	.s = {
16652ec94130SStephen Boyd 		.src_sel_shift = 0,
16662ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_cxo_map,
16672ec94130SStephen Boyd 	},
16682ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gp,
16692ec94130SStephen Boyd 	.clkr = {
16702ec94130SStephen Boyd 		.enable_reg = 0x2d44,
16712ec94130SStephen Boyd 		.enable_mask = BIT(11),
16722ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
16732ec94130SStephen Boyd 			.name = "gp1_src",
1674e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8_cxo,
1675d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_cxo),
16762ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
16772ec94130SStephen Boyd 			.flags = CLK_SET_RATE_GATE,
16782ec94130SStephen Boyd 		},
16792ec94130SStephen Boyd 	}
16802ec94130SStephen Boyd };
16812ec94130SStephen Boyd 
16822ec94130SStephen Boyd static struct clk_branch gp1_clk = {
16832ec94130SStephen Boyd 	.halt_reg = 0x2fd8,
16842ec94130SStephen Boyd 	.halt_bit = 6,
16852ec94130SStephen Boyd 	.clkr = {
16862ec94130SStephen Boyd 		.enable_reg = 0x2d44,
16872ec94130SStephen Boyd 		.enable_mask = BIT(9),
16882ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
16892ec94130SStephen Boyd 			.name = "gp1_clk",
1690e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1691e38fc8f0SDmitry Baryshkov 				&gp1_src.clkr.hw
1692e38fc8f0SDmitry Baryshkov 			},
16932ec94130SStephen Boyd 			.num_parents = 1,
16942ec94130SStephen Boyd 			.ops = &clk_branch_ops,
16952ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
16962ec94130SStephen Boyd 		},
16972ec94130SStephen Boyd 	},
16982ec94130SStephen Boyd };
16992ec94130SStephen Boyd 
17002ec94130SStephen Boyd static struct clk_rcg gp2_src = {
17012ec94130SStephen Boyd 	.ns_reg = 0x2d64,
17022ec94130SStephen Boyd 	.md_reg = 0x2d60,
17032ec94130SStephen Boyd 	.mn = {
17042ec94130SStephen Boyd 		.mnctr_en_bit = 8,
17052ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
17062ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
17072ec94130SStephen Boyd 		.n_val_shift = 16,
17082ec94130SStephen Boyd 		.m_val_shift = 16,
17092ec94130SStephen Boyd 		.width = 8,
17102ec94130SStephen Boyd 	},
17112ec94130SStephen Boyd 	.p = {
17122ec94130SStephen Boyd 		.pre_div_shift = 3,
17132ec94130SStephen Boyd 		.pre_div_width = 2,
17142ec94130SStephen Boyd 	},
17152ec94130SStephen Boyd 	.s = {
17162ec94130SStephen Boyd 		.src_sel_shift = 0,
17172ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_cxo_map,
17182ec94130SStephen Boyd 	},
17192ec94130SStephen Boyd 	.freq_tbl = clk_tbl_gp,
17202ec94130SStephen Boyd 	.clkr = {
17212ec94130SStephen Boyd 		.enable_reg = 0x2d64,
17222ec94130SStephen Boyd 		.enable_mask = BIT(11),
17232ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
17242ec94130SStephen Boyd 			.name = "gp2_src",
1725e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8_cxo,
1726d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_cxo),
17272ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
17282ec94130SStephen Boyd 			.flags = CLK_SET_RATE_GATE,
17292ec94130SStephen Boyd 		},
17302ec94130SStephen Boyd 	}
17312ec94130SStephen Boyd };
17322ec94130SStephen Boyd 
17332ec94130SStephen Boyd static struct clk_branch gp2_clk = {
17342ec94130SStephen Boyd 	.halt_reg = 0x2fd8,
17352ec94130SStephen Boyd 	.halt_bit = 5,
17362ec94130SStephen Boyd 	.clkr = {
17372ec94130SStephen Boyd 		.enable_reg = 0x2d64,
17382ec94130SStephen Boyd 		.enable_mask = BIT(9),
17392ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
17402ec94130SStephen Boyd 			.name = "gp2_clk",
1741e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1742e38fc8f0SDmitry Baryshkov 				&gp2_src.clkr.hw
1743e38fc8f0SDmitry Baryshkov 			},
17442ec94130SStephen Boyd 			.num_parents = 1,
17452ec94130SStephen Boyd 			.ops = &clk_branch_ops,
17462ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
17472ec94130SStephen Boyd 		},
17482ec94130SStephen Boyd 	},
17492ec94130SStephen Boyd };
17502ec94130SStephen Boyd 
17512ec94130SStephen Boyd static struct clk_branch pmem_clk = {
17522ec94130SStephen Boyd 	.hwcg_reg = 0x25a0,
17532ec94130SStephen Boyd 	.hwcg_bit = 6,
17542ec94130SStephen Boyd 	.halt_reg = 0x2fc8,
17552ec94130SStephen Boyd 	.halt_bit = 20,
17562ec94130SStephen Boyd 	.clkr = {
17572ec94130SStephen Boyd 		.enable_reg = 0x25a0,
17582ec94130SStephen Boyd 		.enable_mask = BIT(4),
17592ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
17602ec94130SStephen Boyd 			.name = "pmem_clk",
17612ec94130SStephen Boyd 			.ops = &clk_branch_ops,
17622ec94130SStephen Boyd 		},
17632ec94130SStephen Boyd 	},
17642ec94130SStephen Boyd };
17652ec94130SStephen Boyd 
17662ec94130SStephen Boyd static struct clk_rcg prng_src = {
17672ec94130SStephen Boyd 	.ns_reg = 0x2e80,
17682ec94130SStephen Boyd 	.p = {
17692ec94130SStephen Boyd 		.pre_div_shift = 3,
17702ec94130SStephen Boyd 		.pre_div_width = 4,
17712ec94130SStephen Boyd 	},
17722ec94130SStephen Boyd 	.s = {
17732ec94130SStephen Boyd 		.src_sel_shift = 0,
17742ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
17752ec94130SStephen Boyd 	},
17762ec94130SStephen Boyd 	.clkr = {
17772ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
17782ec94130SStephen Boyd 			.name = "prng_src",
1779e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
1780d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
17812ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
17822ec94130SStephen Boyd 		},
17832ec94130SStephen Boyd 	},
17842ec94130SStephen Boyd };
17852ec94130SStephen Boyd 
17862ec94130SStephen Boyd static struct clk_branch prng_clk = {
17872ec94130SStephen Boyd 	.halt_reg = 0x2fd8,
17882ec94130SStephen Boyd 	.halt_check = BRANCH_HALT_VOTED,
17892ec94130SStephen Boyd 	.halt_bit = 10,
17902ec94130SStephen Boyd 	.clkr = {
17912ec94130SStephen Boyd 		.enable_reg = 0x3080,
17922ec94130SStephen Boyd 		.enable_mask = BIT(10),
17932ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
17942ec94130SStephen Boyd 			.name = "prng_clk",
1795e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1796e38fc8f0SDmitry Baryshkov 				&prng_src.clkr.hw
1797e38fc8f0SDmitry Baryshkov 			},
17982ec94130SStephen Boyd 			.num_parents = 1,
17992ec94130SStephen Boyd 			.ops = &clk_branch_ops,
18002ec94130SStephen Boyd 		},
18012ec94130SStephen Boyd 	},
18022ec94130SStephen Boyd };
18032ec94130SStephen Boyd 
18042ec94130SStephen Boyd static const struct freq_tbl clk_tbl_sdc[] = {
18052ec94130SStephen Boyd 	{    144000, P_PXO,   3, 2, 125 },
18062ec94130SStephen Boyd 	{    400000, P_PLL8,  4, 1, 240 },
18072ec94130SStephen Boyd 	{  16000000, P_PLL8,  4, 1,   6 },
18082ec94130SStephen Boyd 	{  17070000, P_PLL8,  1, 2,  45 },
18092ec94130SStephen Boyd 	{  20210000, P_PLL8,  1, 1,  19 },
18102ec94130SStephen Boyd 	{  24000000, P_PLL8,  4, 1,   4 },
18112ec94130SStephen Boyd 	{  48000000, P_PLL8,  4, 1,   2 },
18122ec94130SStephen Boyd 	{  64000000, P_PLL8,  3, 1,   2 },
18132ec94130SStephen Boyd 	{  96000000, P_PLL8,  4, 0,   0 },
18142ec94130SStephen Boyd 	{ 192000000, P_PLL8,  2, 0,   0 },
18152ec94130SStephen Boyd 	{ }
18162ec94130SStephen Boyd };
18172ec94130SStephen Boyd 
18182ec94130SStephen Boyd static struct clk_rcg sdc1_src = {
18192ec94130SStephen Boyd 	.ns_reg = 0x282c,
18202ec94130SStephen Boyd 	.md_reg = 0x2828,
18212ec94130SStephen Boyd 	.mn = {
18222ec94130SStephen Boyd 		.mnctr_en_bit = 8,
18232ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
18242ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
18252ec94130SStephen Boyd 		.n_val_shift = 16,
18262ec94130SStephen Boyd 		.m_val_shift = 16,
18272ec94130SStephen Boyd 		.width = 8,
18282ec94130SStephen Boyd 	},
18292ec94130SStephen Boyd 	.p = {
18302ec94130SStephen Boyd 		.pre_div_shift = 3,
18312ec94130SStephen Boyd 		.pre_div_width = 2,
18322ec94130SStephen Boyd 	},
18332ec94130SStephen Boyd 	.s = {
18342ec94130SStephen Boyd 		.src_sel_shift = 0,
18352ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
18362ec94130SStephen Boyd 	},
18372ec94130SStephen Boyd 	.freq_tbl = clk_tbl_sdc,
18382ec94130SStephen Boyd 	.clkr = {
18392ec94130SStephen Boyd 		.enable_reg = 0x282c,
18402ec94130SStephen Boyd 		.enable_mask = BIT(11),
18412ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
18422ec94130SStephen Boyd 			.name = "sdc1_src",
1843e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
1844d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
18452ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
18462ec94130SStephen Boyd 		},
18472ec94130SStephen Boyd 	}
18482ec94130SStephen Boyd };
18492ec94130SStephen Boyd 
18502ec94130SStephen Boyd static struct clk_branch sdc1_clk = {
18512ec94130SStephen Boyd 	.halt_reg = 0x2fc8,
18522ec94130SStephen Boyd 	.halt_bit = 6,
18532ec94130SStephen Boyd 	.clkr = {
18542ec94130SStephen Boyd 		.enable_reg = 0x282c,
18552ec94130SStephen Boyd 		.enable_mask = BIT(9),
18562ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
18572ec94130SStephen Boyd 			.name = "sdc1_clk",
1858e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1859e38fc8f0SDmitry Baryshkov 				&sdc1_src.clkr.hw
1860e38fc8f0SDmitry Baryshkov 			},
18612ec94130SStephen Boyd 			.num_parents = 1,
18622ec94130SStephen Boyd 			.ops = &clk_branch_ops,
18632ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
18642ec94130SStephen Boyd 		},
18652ec94130SStephen Boyd 	},
18662ec94130SStephen Boyd };
18672ec94130SStephen Boyd 
18682ec94130SStephen Boyd static struct clk_rcg sdc2_src = {
18692ec94130SStephen Boyd 	.ns_reg = 0x284c,
18702ec94130SStephen Boyd 	.md_reg = 0x2848,
18712ec94130SStephen Boyd 	.mn = {
18722ec94130SStephen Boyd 		.mnctr_en_bit = 8,
18732ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
18742ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
18752ec94130SStephen Boyd 		.n_val_shift = 16,
18762ec94130SStephen Boyd 		.m_val_shift = 16,
18772ec94130SStephen Boyd 		.width = 8,
18782ec94130SStephen Boyd 	},
18792ec94130SStephen Boyd 	.p = {
18802ec94130SStephen Boyd 		.pre_div_shift = 3,
18812ec94130SStephen Boyd 		.pre_div_width = 2,
18822ec94130SStephen Boyd 	},
18832ec94130SStephen Boyd 	.s = {
18842ec94130SStephen Boyd 		.src_sel_shift = 0,
18852ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
18862ec94130SStephen Boyd 	},
18872ec94130SStephen Boyd 	.freq_tbl = clk_tbl_sdc,
18882ec94130SStephen Boyd 	.clkr = {
18892ec94130SStephen Boyd 		.enable_reg = 0x284c,
18902ec94130SStephen Boyd 		.enable_mask = BIT(11),
18912ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
18922ec94130SStephen Boyd 			.name = "sdc2_src",
1893e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
1894d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
18952ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
18962ec94130SStephen Boyd 		},
18972ec94130SStephen Boyd 	}
18982ec94130SStephen Boyd };
18992ec94130SStephen Boyd 
19002ec94130SStephen Boyd static struct clk_branch sdc2_clk = {
19012ec94130SStephen Boyd 	.halt_reg = 0x2fc8,
19022ec94130SStephen Boyd 	.halt_bit = 5,
19032ec94130SStephen Boyd 	.clkr = {
19042ec94130SStephen Boyd 		.enable_reg = 0x284c,
19052ec94130SStephen Boyd 		.enable_mask = BIT(9),
19062ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
19072ec94130SStephen Boyd 			.name = "sdc2_clk",
1908e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1909e38fc8f0SDmitry Baryshkov 				&sdc2_src.clkr.hw
1910e38fc8f0SDmitry Baryshkov 			},
19112ec94130SStephen Boyd 			.num_parents = 1,
19122ec94130SStephen Boyd 			.ops = &clk_branch_ops,
19132ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
19142ec94130SStephen Boyd 		},
19152ec94130SStephen Boyd 	},
19162ec94130SStephen Boyd };
19172ec94130SStephen Boyd 
19182ec94130SStephen Boyd static struct clk_rcg sdc3_src = {
19192ec94130SStephen Boyd 	.ns_reg = 0x286c,
19202ec94130SStephen Boyd 	.md_reg = 0x2868,
19212ec94130SStephen Boyd 	.mn = {
19222ec94130SStephen Boyd 		.mnctr_en_bit = 8,
19232ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
19242ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
19252ec94130SStephen Boyd 		.n_val_shift = 16,
19262ec94130SStephen Boyd 		.m_val_shift = 16,
19272ec94130SStephen Boyd 		.width = 8,
19282ec94130SStephen Boyd 	},
19292ec94130SStephen Boyd 	.p = {
19302ec94130SStephen Boyd 		.pre_div_shift = 3,
19312ec94130SStephen Boyd 		.pre_div_width = 2,
19322ec94130SStephen Boyd 	},
19332ec94130SStephen Boyd 	.s = {
19342ec94130SStephen Boyd 		.src_sel_shift = 0,
19352ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
19362ec94130SStephen Boyd 	},
19372ec94130SStephen Boyd 	.freq_tbl = clk_tbl_sdc,
19382ec94130SStephen Boyd 	.clkr = {
19392ec94130SStephen Boyd 		.enable_reg = 0x286c,
19402ec94130SStephen Boyd 		.enable_mask = BIT(11),
19412ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
19422ec94130SStephen Boyd 			.name = "sdc3_src",
1943e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
1944d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
19452ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
19462ec94130SStephen Boyd 		},
19472ec94130SStephen Boyd 	}
19482ec94130SStephen Boyd };
19492ec94130SStephen Boyd 
19502ec94130SStephen Boyd static struct clk_branch sdc3_clk = {
19512ec94130SStephen Boyd 	.halt_reg = 0x2fc8,
19522ec94130SStephen Boyd 	.halt_bit = 4,
19532ec94130SStephen Boyd 	.clkr = {
19542ec94130SStephen Boyd 		.enable_reg = 0x286c,
19552ec94130SStephen Boyd 		.enable_mask = BIT(9),
19562ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
19572ec94130SStephen Boyd 			.name = "sdc3_clk",
1958e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
1959e38fc8f0SDmitry Baryshkov 				&sdc3_src.clkr.hw
1960e38fc8f0SDmitry Baryshkov 			},
19612ec94130SStephen Boyd 			.num_parents = 1,
19622ec94130SStephen Boyd 			.ops = &clk_branch_ops,
19632ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
19642ec94130SStephen Boyd 		},
19652ec94130SStephen Boyd 	},
19662ec94130SStephen Boyd };
19672ec94130SStephen Boyd 
19682ec94130SStephen Boyd static struct clk_rcg sdc4_src = {
19692ec94130SStephen Boyd 	.ns_reg = 0x288c,
19702ec94130SStephen Boyd 	.md_reg = 0x2888,
19712ec94130SStephen Boyd 	.mn = {
19722ec94130SStephen Boyd 		.mnctr_en_bit = 8,
19732ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
19742ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
19752ec94130SStephen Boyd 		.n_val_shift = 16,
19762ec94130SStephen Boyd 		.m_val_shift = 16,
19772ec94130SStephen Boyd 		.width = 8,
19782ec94130SStephen Boyd 	},
19792ec94130SStephen Boyd 	.p = {
19802ec94130SStephen Boyd 		.pre_div_shift = 3,
19812ec94130SStephen Boyd 		.pre_div_width = 2,
19822ec94130SStephen Boyd 	},
19832ec94130SStephen Boyd 	.s = {
19842ec94130SStephen Boyd 		.src_sel_shift = 0,
19852ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
19862ec94130SStephen Boyd 	},
19872ec94130SStephen Boyd 	.freq_tbl = clk_tbl_sdc,
19882ec94130SStephen Boyd 	.clkr = {
19892ec94130SStephen Boyd 		.enable_reg = 0x288c,
19902ec94130SStephen Boyd 		.enable_mask = BIT(11),
19912ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
19922ec94130SStephen Boyd 			.name = "sdc4_src",
1993e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
1994d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
19952ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
19962ec94130SStephen Boyd 		},
19972ec94130SStephen Boyd 	}
19982ec94130SStephen Boyd };
19992ec94130SStephen Boyd 
20002ec94130SStephen Boyd static struct clk_branch sdc4_clk = {
20012ec94130SStephen Boyd 	.halt_reg = 0x2fc8,
20022ec94130SStephen Boyd 	.halt_bit = 3,
20032ec94130SStephen Boyd 	.clkr = {
20042ec94130SStephen Boyd 		.enable_reg = 0x288c,
20052ec94130SStephen Boyd 		.enable_mask = BIT(9),
20062ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
20072ec94130SStephen Boyd 			.name = "sdc4_clk",
2008e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
2009e38fc8f0SDmitry Baryshkov 				&sdc4_src.clkr.hw
2010e38fc8f0SDmitry Baryshkov 			},
20112ec94130SStephen Boyd 			.num_parents = 1,
20122ec94130SStephen Boyd 			.ops = &clk_branch_ops,
20132ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
20142ec94130SStephen Boyd 		},
20152ec94130SStephen Boyd 	},
20162ec94130SStephen Boyd };
20172ec94130SStephen Boyd 
20182ec94130SStephen Boyd static struct clk_rcg sdc5_src = {
20192ec94130SStephen Boyd 	.ns_reg = 0x28ac,
20202ec94130SStephen Boyd 	.md_reg = 0x28a8,
20212ec94130SStephen Boyd 	.mn = {
20222ec94130SStephen Boyd 		.mnctr_en_bit = 8,
20232ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
20242ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
20252ec94130SStephen Boyd 		.n_val_shift = 16,
20262ec94130SStephen Boyd 		.m_val_shift = 16,
20272ec94130SStephen Boyd 		.width = 8,
20282ec94130SStephen Boyd 	},
20292ec94130SStephen Boyd 	.p = {
20302ec94130SStephen Boyd 		.pre_div_shift = 3,
20312ec94130SStephen Boyd 		.pre_div_width = 2,
20322ec94130SStephen Boyd 	},
20332ec94130SStephen Boyd 	.s = {
20342ec94130SStephen Boyd 		.src_sel_shift = 0,
20352ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
20362ec94130SStephen Boyd 	},
20372ec94130SStephen Boyd 	.freq_tbl = clk_tbl_sdc,
20382ec94130SStephen Boyd 	.clkr = {
20392ec94130SStephen Boyd 		.enable_reg = 0x28ac,
20402ec94130SStephen Boyd 		.enable_mask = BIT(11),
20412ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
20422ec94130SStephen Boyd 			.name = "sdc5_src",
2043e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
2044d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
20452ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
20462ec94130SStephen Boyd 		},
20472ec94130SStephen Boyd 	}
20482ec94130SStephen Boyd };
20492ec94130SStephen Boyd 
20502ec94130SStephen Boyd static struct clk_branch sdc5_clk = {
20512ec94130SStephen Boyd 	.halt_reg = 0x2fc8,
20522ec94130SStephen Boyd 	.halt_bit = 2,
20532ec94130SStephen Boyd 	.clkr = {
20542ec94130SStephen Boyd 		.enable_reg = 0x28ac,
20552ec94130SStephen Boyd 		.enable_mask = BIT(9),
20562ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
20572ec94130SStephen Boyd 			.name = "sdc5_clk",
2058e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
2059e38fc8f0SDmitry Baryshkov 				&sdc5_src.clkr.hw
2060e38fc8f0SDmitry Baryshkov 			},
20612ec94130SStephen Boyd 			.num_parents = 1,
20622ec94130SStephen Boyd 			.ops = &clk_branch_ops,
20632ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
20642ec94130SStephen Boyd 		},
20652ec94130SStephen Boyd 	},
20662ec94130SStephen Boyd };
20672ec94130SStephen Boyd 
20682ec94130SStephen Boyd static const struct freq_tbl clk_tbl_tsif_ref[] = {
20692ec94130SStephen Boyd 	{ 105000, P_PXO,  1, 1, 256 },
20702ec94130SStephen Boyd 	{ }
20712ec94130SStephen Boyd };
20722ec94130SStephen Boyd 
20732ec94130SStephen Boyd static struct clk_rcg tsif_ref_src = {
20742ec94130SStephen Boyd 	.ns_reg = 0x2710,
20752ec94130SStephen Boyd 	.md_reg = 0x270c,
20762ec94130SStephen Boyd 	.mn = {
20772ec94130SStephen Boyd 		.mnctr_en_bit = 8,
20782ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
20792ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
20802ec94130SStephen Boyd 		.n_val_shift = 16,
20812ec94130SStephen Boyd 		.m_val_shift = 16,
20822ec94130SStephen Boyd 		.width = 16,
20832ec94130SStephen Boyd 	},
20842ec94130SStephen Boyd 	.p = {
20852ec94130SStephen Boyd 		.pre_div_shift = 3,
20862ec94130SStephen Boyd 		.pre_div_width = 2,
20872ec94130SStephen Boyd 	},
20882ec94130SStephen Boyd 	.s = {
20892ec94130SStephen Boyd 		.src_sel_shift = 0,
20902ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
20912ec94130SStephen Boyd 	},
20922ec94130SStephen Boyd 	.freq_tbl = clk_tbl_tsif_ref,
20932ec94130SStephen Boyd 	.clkr = {
20942ec94130SStephen Boyd 		.enable_reg = 0x2710,
20952ec94130SStephen Boyd 		.enable_mask = BIT(11),
20962ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
20972ec94130SStephen Boyd 			.name = "tsif_ref_src",
2098e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
2099d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
21002ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
21012ec94130SStephen Boyd 			.flags = CLK_SET_RATE_GATE,
21022ec94130SStephen Boyd 		},
21032ec94130SStephen Boyd 	}
21042ec94130SStephen Boyd };
21052ec94130SStephen Boyd 
21062ec94130SStephen Boyd static struct clk_branch tsif_ref_clk = {
21072ec94130SStephen Boyd 	.halt_reg = 0x2fd4,
21082ec94130SStephen Boyd 	.halt_bit = 5,
21092ec94130SStephen Boyd 	.clkr = {
21102ec94130SStephen Boyd 		.enable_reg = 0x2710,
21112ec94130SStephen Boyd 		.enable_mask = BIT(9),
21122ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
21132ec94130SStephen Boyd 			.name = "tsif_ref_clk",
2114e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
2115e38fc8f0SDmitry Baryshkov 				&tsif_ref_src.clkr.hw
2116e38fc8f0SDmitry Baryshkov 			},
21172ec94130SStephen Boyd 			.num_parents = 1,
21182ec94130SStephen Boyd 			.ops = &clk_branch_ops,
21192ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
21202ec94130SStephen Boyd 		},
21212ec94130SStephen Boyd 	},
21222ec94130SStephen Boyd };
21232ec94130SStephen Boyd 
21242ec94130SStephen Boyd static const struct freq_tbl clk_tbl_usb[] = {
21252ec94130SStephen Boyd 	{ 60000000, P_PLL8, 1, 5, 32 },
21262ec94130SStephen Boyd 	{ }
21272ec94130SStephen Boyd };
21282ec94130SStephen Boyd 
21292ec94130SStephen Boyd static struct clk_rcg usb_hs1_xcvr_src = {
21302ec94130SStephen Boyd 	.ns_reg = 0x290c,
21312ec94130SStephen Boyd 	.md_reg = 0x2908,
21322ec94130SStephen Boyd 	.mn = {
21332ec94130SStephen Boyd 		.mnctr_en_bit = 8,
21342ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
21352ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
21362ec94130SStephen Boyd 		.n_val_shift = 16,
21372ec94130SStephen Boyd 		.m_val_shift = 16,
21382ec94130SStephen Boyd 		.width = 8,
21392ec94130SStephen Boyd 	},
21402ec94130SStephen Boyd 	.p = {
21412ec94130SStephen Boyd 		.pre_div_shift = 3,
21422ec94130SStephen Boyd 		.pre_div_width = 2,
21432ec94130SStephen Boyd 	},
21442ec94130SStephen Boyd 	.s = {
21452ec94130SStephen Boyd 		.src_sel_shift = 0,
21462ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
21472ec94130SStephen Boyd 	},
21482ec94130SStephen Boyd 	.freq_tbl = clk_tbl_usb,
21492ec94130SStephen Boyd 	.clkr = {
21502ec94130SStephen Boyd 		.enable_reg = 0x290c,
21512ec94130SStephen Boyd 		.enable_mask = BIT(11),
21522ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
21532ec94130SStephen Boyd 			.name = "usb_hs1_xcvr_src",
2154e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
2155d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
21562ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
21572ec94130SStephen Boyd 			.flags = CLK_SET_RATE_GATE,
21582ec94130SStephen Boyd 		},
21592ec94130SStephen Boyd 	}
21602ec94130SStephen Boyd };
21612ec94130SStephen Boyd 
21622ec94130SStephen Boyd static struct clk_branch usb_hs1_xcvr_clk = {
21632ec94130SStephen Boyd 	.halt_reg = 0x2fc8,
21642ec94130SStephen Boyd 	.halt_bit = 0,
21652ec94130SStephen Boyd 	.clkr = {
21662ec94130SStephen Boyd 		.enable_reg = 0x290c,
21672ec94130SStephen Boyd 		.enable_mask = BIT(9),
21682ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
21692ec94130SStephen Boyd 			.name = "usb_hs1_xcvr_clk",
2170e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
2171e38fc8f0SDmitry Baryshkov 				&usb_hs1_xcvr_src.clkr.hw
2172e38fc8f0SDmitry Baryshkov 			},
21732ec94130SStephen Boyd 			.num_parents = 1,
21742ec94130SStephen Boyd 			.ops = &clk_branch_ops,
21752ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
21762ec94130SStephen Boyd 		},
21772ec94130SStephen Boyd 	},
21782ec94130SStephen Boyd };
21792ec94130SStephen Boyd 
21805f775498SStephen Boyd static struct clk_rcg usb_hs3_xcvr_src = {
21815f775498SStephen Boyd 	.ns_reg = 0x370c,
21825f775498SStephen Boyd 	.md_reg = 0x3708,
21835f775498SStephen Boyd 	.mn = {
21845f775498SStephen Boyd 		.mnctr_en_bit = 8,
21855f775498SStephen Boyd 		.mnctr_reset_bit = 7,
21865f775498SStephen Boyd 		.mnctr_mode_shift = 5,
21875f775498SStephen Boyd 		.n_val_shift = 16,
21885f775498SStephen Boyd 		.m_val_shift = 16,
21895f775498SStephen Boyd 		.width = 8,
21905f775498SStephen Boyd 	},
21915f775498SStephen Boyd 	.p = {
21925f775498SStephen Boyd 		.pre_div_shift = 3,
21935f775498SStephen Boyd 		.pre_div_width = 2,
21945f775498SStephen Boyd 	},
21955f775498SStephen Boyd 	.s = {
21965f775498SStephen Boyd 		.src_sel_shift = 0,
21975f775498SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
21985f775498SStephen Boyd 	},
21995f775498SStephen Boyd 	.freq_tbl = clk_tbl_usb,
22005f775498SStephen Boyd 	.clkr = {
22015f775498SStephen Boyd 		.enable_reg = 0x370c,
22025f775498SStephen Boyd 		.enable_mask = BIT(11),
22035f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
22045f775498SStephen Boyd 			.name = "usb_hs3_xcvr_src",
2205e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
2206d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
22075f775498SStephen Boyd 			.ops = &clk_rcg_ops,
22085f775498SStephen Boyd 			.flags = CLK_SET_RATE_GATE,
22095f775498SStephen Boyd 		},
22105f775498SStephen Boyd 	}
22115f775498SStephen Boyd };
22125f775498SStephen Boyd 
22135f775498SStephen Boyd static struct clk_branch usb_hs3_xcvr_clk = {
22145f775498SStephen Boyd 	.halt_reg = 0x2fc8,
22155f775498SStephen Boyd 	.halt_bit = 30,
22165f775498SStephen Boyd 	.clkr = {
22175f775498SStephen Boyd 		.enable_reg = 0x370c,
22185f775498SStephen Boyd 		.enable_mask = BIT(9),
22195f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
22205f775498SStephen Boyd 			.name = "usb_hs3_xcvr_clk",
2221e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
2222e38fc8f0SDmitry Baryshkov 				&usb_hs3_xcvr_src.clkr.hw
2223e38fc8f0SDmitry Baryshkov 			},
22245f775498SStephen Boyd 			.num_parents = 1,
22255f775498SStephen Boyd 			.ops = &clk_branch_ops,
22265f775498SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
22275f775498SStephen Boyd 		},
22285f775498SStephen Boyd 	},
22295f775498SStephen Boyd };
22305f775498SStephen Boyd 
22315f775498SStephen Boyd static struct clk_rcg usb_hs4_xcvr_src = {
22325f775498SStephen Boyd 	.ns_reg = 0x372c,
22335f775498SStephen Boyd 	.md_reg = 0x3728,
22345f775498SStephen Boyd 	.mn = {
22355f775498SStephen Boyd 		.mnctr_en_bit = 8,
22365f775498SStephen Boyd 		.mnctr_reset_bit = 7,
22375f775498SStephen Boyd 		.mnctr_mode_shift = 5,
22385f775498SStephen Boyd 		.n_val_shift = 16,
22395f775498SStephen Boyd 		.m_val_shift = 16,
22405f775498SStephen Boyd 		.width = 8,
22415f775498SStephen Boyd 	},
22425f775498SStephen Boyd 	.p = {
22435f775498SStephen Boyd 		.pre_div_shift = 3,
22445f775498SStephen Boyd 		.pre_div_width = 2,
22455f775498SStephen Boyd 	},
22465f775498SStephen Boyd 	.s = {
22475f775498SStephen Boyd 		.src_sel_shift = 0,
22485f775498SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
22495f775498SStephen Boyd 	},
22505f775498SStephen Boyd 	.freq_tbl = clk_tbl_usb,
22515f775498SStephen Boyd 	.clkr = {
22525f775498SStephen Boyd 		.enable_reg = 0x372c,
22535f775498SStephen Boyd 		.enable_mask = BIT(11),
22545f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
22555f775498SStephen Boyd 			.name = "usb_hs4_xcvr_src",
2256e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
2257d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
22585f775498SStephen Boyd 			.ops = &clk_rcg_ops,
22595f775498SStephen Boyd 			.flags = CLK_SET_RATE_GATE,
22605f775498SStephen Boyd 		},
22615f775498SStephen Boyd 	}
22625f775498SStephen Boyd };
22635f775498SStephen Boyd 
22645f775498SStephen Boyd static struct clk_branch usb_hs4_xcvr_clk = {
22655f775498SStephen Boyd 	.halt_reg = 0x2fc8,
22665f775498SStephen Boyd 	.halt_bit = 2,
22675f775498SStephen Boyd 	.clkr = {
22685f775498SStephen Boyd 		.enable_reg = 0x372c,
22695f775498SStephen Boyd 		.enable_mask = BIT(9),
22705f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
22715f775498SStephen Boyd 			.name = "usb_hs4_xcvr_clk",
2272e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
2273e38fc8f0SDmitry Baryshkov 				&usb_hs4_xcvr_src.clkr.hw
2274e38fc8f0SDmitry Baryshkov 			},
22755f775498SStephen Boyd 			.num_parents = 1,
22765f775498SStephen Boyd 			.ops = &clk_branch_ops,
22775f775498SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
22785f775498SStephen Boyd 		},
22795f775498SStephen Boyd 	},
22805f775498SStephen Boyd };
22815f775498SStephen Boyd 
22822ec94130SStephen Boyd static struct clk_rcg usb_hsic_xcvr_fs_src = {
22832ec94130SStephen Boyd 	.ns_reg = 0x2928,
22842ec94130SStephen Boyd 	.md_reg = 0x2924,
22852ec94130SStephen Boyd 	.mn = {
22862ec94130SStephen Boyd 		.mnctr_en_bit = 8,
22872ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
22882ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
22892ec94130SStephen Boyd 		.n_val_shift = 16,
22902ec94130SStephen Boyd 		.m_val_shift = 16,
22912ec94130SStephen Boyd 		.width = 8,
22922ec94130SStephen Boyd 	},
22932ec94130SStephen Boyd 	.p = {
22942ec94130SStephen Boyd 		.pre_div_shift = 3,
22952ec94130SStephen Boyd 		.pre_div_width = 2,
22962ec94130SStephen Boyd 	},
22972ec94130SStephen Boyd 	.s = {
22982ec94130SStephen Boyd 		.src_sel_shift = 0,
22992ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
23002ec94130SStephen Boyd 	},
23012ec94130SStephen Boyd 	.freq_tbl = clk_tbl_usb,
23022ec94130SStephen Boyd 	.clkr = {
23032ec94130SStephen Boyd 		.enable_reg = 0x2928,
23042ec94130SStephen Boyd 		.enable_mask = BIT(11),
23052ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
23062ec94130SStephen Boyd 			.name = "usb_hsic_xcvr_fs_src",
2307e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
2308d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
23092ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
23102ec94130SStephen Boyd 			.flags = CLK_SET_RATE_GATE,
23112ec94130SStephen Boyd 		},
23122ec94130SStephen Boyd 	}
23132ec94130SStephen Boyd };
23142ec94130SStephen Boyd 
23152ec94130SStephen Boyd static struct clk_branch usb_hsic_xcvr_fs_clk = {
23162ec94130SStephen Boyd 	.halt_reg = 0x2fc8,
23172ec94130SStephen Boyd 	.halt_bit = 2,
23182ec94130SStephen Boyd 	.clkr = {
23192ec94130SStephen Boyd 		.enable_reg = 0x2928,
23202ec94130SStephen Boyd 		.enable_mask = BIT(9),
23212ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
23222ec94130SStephen Boyd 			.name = "usb_hsic_xcvr_fs_clk",
2323e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
2324e38fc8f0SDmitry Baryshkov 				&usb_hsic_xcvr_fs_src.clkr.hw,
2325e38fc8f0SDmitry Baryshkov 			},
2326e38fc8f0SDmitry Baryshkov 			.num_parents = 1,
23272ec94130SStephen Boyd 			.ops = &clk_branch_ops,
23282ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
23292ec94130SStephen Boyd 		},
23302ec94130SStephen Boyd 	},
23312ec94130SStephen Boyd };
23322ec94130SStephen Boyd 
23332ec94130SStephen Boyd static struct clk_branch usb_hsic_system_clk = {
23342ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
23352ec94130SStephen Boyd 	.halt_bit = 24,
23362ec94130SStephen Boyd 	.clkr = {
23372ec94130SStephen Boyd 		.enable_reg = 0x292c,
23382ec94130SStephen Boyd 		.enable_mask = BIT(4),
23392ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
2340e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
2341e38fc8f0SDmitry Baryshkov 				&usb_hsic_xcvr_fs_src.clkr.hw,
2342e38fc8f0SDmitry Baryshkov 			},
2343e38fc8f0SDmitry Baryshkov 			.num_parents = 1,
23442ec94130SStephen Boyd 			.name = "usb_hsic_system_clk",
23452ec94130SStephen Boyd 			.ops = &clk_branch_ops,
23462ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
23472ec94130SStephen Boyd 		},
23482ec94130SStephen Boyd 	},
23492ec94130SStephen Boyd };
23502ec94130SStephen Boyd 
23512ec94130SStephen Boyd static struct clk_branch usb_hsic_hsic_clk = {
23522ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
23532ec94130SStephen Boyd 	.halt_bit = 19,
23542ec94130SStephen Boyd 	.clkr = {
23552ec94130SStephen Boyd 		.enable_reg = 0x2b44,
23562ec94130SStephen Boyd 		.enable_mask = BIT(0),
23572ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
2358e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
2359e38fc8f0SDmitry Baryshkov 				&pll14_vote.hw
2360e38fc8f0SDmitry Baryshkov 			},
23612ec94130SStephen Boyd 			.num_parents = 1,
23622ec94130SStephen Boyd 			.name = "usb_hsic_hsic_clk",
23632ec94130SStephen Boyd 			.ops = &clk_branch_ops,
23642ec94130SStephen Boyd 		},
23652ec94130SStephen Boyd 	},
23662ec94130SStephen Boyd };
23672ec94130SStephen Boyd 
23682ec94130SStephen Boyd static struct clk_branch usb_hsic_hsio_cal_clk = {
23692ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
23702ec94130SStephen Boyd 	.halt_bit = 23,
23712ec94130SStephen Boyd 	.clkr = {
23722ec94130SStephen Boyd 		.enable_reg = 0x2b48,
23732ec94130SStephen Boyd 		.enable_mask = BIT(0),
23742ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
23752ec94130SStephen Boyd 			.name = "usb_hsic_hsio_cal_clk",
23762ec94130SStephen Boyd 			.ops = &clk_branch_ops,
23772ec94130SStephen Boyd 		},
23782ec94130SStephen Boyd 	},
23792ec94130SStephen Boyd };
23802ec94130SStephen Boyd 
23812ec94130SStephen Boyd static struct clk_rcg usb_fs1_xcvr_fs_src = {
23822ec94130SStephen Boyd 	.ns_reg = 0x2968,
23832ec94130SStephen Boyd 	.md_reg = 0x2964,
23842ec94130SStephen Boyd 	.mn = {
23852ec94130SStephen Boyd 		.mnctr_en_bit = 8,
23862ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
23872ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
23882ec94130SStephen Boyd 		.n_val_shift = 16,
23892ec94130SStephen Boyd 		.m_val_shift = 16,
23902ec94130SStephen Boyd 		.width = 8,
23912ec94130SStephen Boyd 	},
23922ec94130SStephen Boyd 	.p = {
23932ec94130SStephen Boyd 		.pre_div_shift = 3,
23942ec94130SStephen Boyd 		.pre_div_width = 2,
23952ec94130SStephen Boyd 	},
23962ec94130SStephen Boyd 	.s = {
23972ec94130SStephen Boyd 		.src_sel_shift = 0,
23982ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
23992ec94130SStephen Boyd 	},
24002ec94130SStephen Boyd 	.freq_tbl = clk_tbl_usb,
24012ec94130SStephen Boyd 	.clkr = {
24022ec94130SStephen Boyd 		.enable_reg = 0x2968,
24032ec94130SStephen Boyd 		.enable_mask = BIT(11),
24042ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
24052ec94130SStephen Boyd 			.name = "usb_fs1_xcvr_fs_src",
2406e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
2407d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
24082ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
24092ec94130SStephen Boyd 			.flags = CLK_SET_RATE_GATE,
24102ec94130SStephen Boyd 		},
24112ec94130SStephen Boyd 	}
24122ec94130SStephen Boyd };
24132ec94130SStephen Boyd 
24142ec94130SStephen Boyd static struct clk_branch usb_fs1_xcvr_fs_clk = {
24152ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
24162ec94130SStephen Boyd 	.halt_bit = 15,
24172ec94130SStephen Boyd 	.clkr = {
24182ec94130SStephen Boyd 		.enable_reg = 0x2968,
24192ec94130SStephen Boyd 		.enable_mask = BIT(9),
24202ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
24212ec94130SStephen Boyd 			.name = "usb_fs1_xcvr_fs_clk",
2422e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
2423e38fc8f0SDmitry Baryshkov 				&usb_fs1_xcvr_fs_src.clkr.hw,
2424e38fc8f0SDmitry Baryshkov 			},
2425e38fc8f0SDmitry Baryshkov 			.num_parents = 1,
24262ec94130SStephen Boyd 			.ops = &clk_branch_ops,
24272ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
24282ec94130SStephen Boyd 		},
24292ec94130SStephen Boyd 	},
24302ec94130SStephen Boyd };
24312ec94130SStephen Boyd 
24322ec94130SStephen Boyd static struct clk_branch usb_fs1_system_clk = {
24332ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
24342ec94130SStephen Boyd 	.halt_bit = 16,
24352ec94130SStephen Boyd 	.clkr = {
24362ec94130SStephen Boyd 		.enable_reg = 0x296c,
24372ec94130SStephen Boyd 		.enable_mask = BIT(4),
24382ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
2439e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
2440e38fc8f0SDmitry Baryshkov 				&usb_fs1_xcvr_fs_src.clkr.hw,
2441e38fc8f0SDmitry Baryshkov 			},
2442e38fc8f0SDmitry Baryshkov 			.num_parents = 1,
24432ec94130SStephen Boyd 			.name = "usb_fs1_system_clk",
24442ec94130SStephen Boyd 			.ops = &clk_branch_ops,
24452ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
24462ec94130SStephen Boyd 		},
24472ec94130SStephen Boyd 	},
24482ec94130SStephen Boyd };
24492ec94130SStephen Boyd 
24502ec94130SStephen Boyd static struct clk_rcg usb_fs2_xcvr_fs_src = {
24512ec94130SStephen Boyd 	.ns_reg = 0x2988,
24522ec94130SStephen Boyd 	.md_reg = 0x2984,
24532ec94130SStephen Boyd 	.mn = {
24542ec94130SStephen Boyd 		.mnctr_en_bit = 8,
24552ec94130SStephen Boyd 		.mnctr_reset_bit = 7,
24562ec94130SStephen Boyd 		.mnctr_mode_shift = 5,
24572ec94130SStephen Boyd 		.n_val_shift = 16,
24582ec94130SStephen Boyd 		.m_val_shift = 16,
24592ec94130SStephen Boyd 		.width = 8,
24602ec94130SStephen Boyd 	},
24612ec94130SStephen Boyd 	.p = {
24622ec94130SStephen Boyd 		.pre_div_shift = 3,
24632ec94130SStephen Boyd 		.pre_div_width = 2,
24642ec94130SStephen Boyd 	},
24652ec94130SStephen Boyd 	.s = {
24662ec94130SStephen Boyd 		.src_sel_shift = 0,
24672ec94130SStephen Boyd 		.parent_map = gcc_pxo_pll8_map,
24682ec94130SStephen Boyd 	},
24692ec94130SStephen Boyd 	.freq_tbl = clk_tbl_usb,
24702ec94130SStephen Boyd 	.clkr = {
24712ec94130SStephen Boyd 		.enable_reg = 0x2988,
24722ec94130SStephen Boyd 		.enable_mask = BIT(11),
24732ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
24742ec94130SStephen Boyd 			.name = "usb_fs2_xcvr_fs_src",
2475e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8,
2476d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
24772ec94130SStephen Boyd 			.ops = &clk_rcg_ops,
24782ec94130SStephen Boyd 			.flags = CLK_SET_RATE_GATE,
24792ec94130SStephen Boyd 		},
24802ec94130SStephen Boyd 	}
24812ec94130SStephen Boyd };
24822ec94130SStephen Boyd 
24832ec94130SStephen Boyd static struct clk_branch usb_fs2_xcvr_fs_clk = {
24842ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
24852ec94130SStephen Boyd 	.halt_bit = 12,
24862ec94130SStephen Boyd 	.clkr = {
24872ec94130SStephen Boyd 		.enable_reg = 0x2988,
24882ec94130SStephen Boyd 		.enable_mask = BIT(9),
24892ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
24902ec94130SStephen Boyd 			.name = "usb_fs2_xcvr_fs_clk",
2491e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
2492e38fc8f0SDmitry Baryshkov 				&usb_fs2_xcvr_fs_src.clkr.hw,
2493e38fc8f0SDmitry Baryshkov 			},
2494e38fc8f0SDmitry Baryshkov 			.num_parents = 1,
24952ec94130SStephen Boyd 			.ops = &clk_branch_ops,
24962ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
24972ec94130SStephen Boyd 		},
24982ec94130SStephen Boyd 	},
24992ec94130SStephen Boyd };
25002ec94130SStephen Boyd 
25012ec94130SStephen Boyd static struct clk_branch usb_fs2_system_clk = {
25022ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
25032ec94130SStephen Boyd 	.halt_bit = 13,
25042ec94130SStephen Boyd 	.clkr = {
25052ec94130SStephen Boyd 		.enable_reg = 0x298c,
25062ec94130SStephen Boyd 		.enable_mask = BIT(4),
25072ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
25082ec94130SStephen Boyd 			.name = "usb_fs2_system_clk",
2509e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
2510e38fc8f0SDmitry Baryshkov 				&usb_fs2_xcvr_fs_src.clkr.hw,
2511e38fc8f0SDmitry Baryshkov 			},
2512e38fc8f0SDmitry Baryshkov 			.num_parents = 1,
25132ec94130SStephen Boyd 			.ops = &clk_branch_ops,
25142ec94130SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
25152ec94130SStephen Boyd 		},
25162ec94130SStephen Boyd 	},
25172ec94130SStephen Boyd };
25182ec94130SStephen Boyd 
25192ec94130SStephen Boyd static struct clk_branch ce1_core_clk = {
25202ec94130SStephen Boyd 	.hwcg_reg = 0x2724,
25212ec94130SStephen Boyd 	.hwcg_bit = 6,
25222ec94130SStephen Boyd 	.halt_reg = 0x2fd4,
25232ec94130SStephen Boyd 	.halt_bit = 27,
25242ec94130SStephen Boyd 	.clkr = {
25252ec94130SStephen Boyd 		.enable_reg = 0x2724,
25262ec94130SStephen Boyd 		.enable_mask = BIT(4),
25272ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
25282ec94130SStephen Boyd 			.name = "ce1_core_clk",
25292ec94130SStephen Boyd 			.ops = &clk_branch_ops,
25302ec94130SStephen Boyd 		},
25312ec94130SStephen Boyd 	},
25322ec94130SStephen Boyd };
25332ec94130SStephen Boyd 
25342ec94130SStephen Boyd static struct clk_branch ce1_h_clk = {
25352ec94130SStephen Boyd 	.halt_reg = 0x2fd4,
25362ec94130SStephen Boyd 	.halt_bit = 1,
25372ec94130SStephen Boyd 	.clkr = {
25382ec94130SStephen Boyd 		.enable_reg = 0x2720,
25392ec94130SStephen Boyd 		.enable_mask = BIT(4),
25402ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
25412ec94130SStephen Boyd 			.name = "ce1_h_clk",
25422ec94130SStephen Boyd 			.ops = &clk_branch_ops,
25432ec94130SStephen Boyd 		},
25442ec94130SStephen Boyd 	},
25452ec94130SStephen Boyd };
25462ec94130SStephen Boyd 
25472ec94130SStephen Boyd static struct clk_branch dma_bam_h_clk = {
25482ec94130SStephen Boyd 	.hwcg_reg = 0x25c0,
25492ec94130SStephen Boyd 	.hwcg_bit = 6,
25502ec94130SStephen Boyd 	.halt_reg = 0x2fc8,
25512ec94130SStephen Boyd 	.halt_bit = 12,
25522ec94130SStephen Boyd 	.clkr = {
25532ec94130SStephen Boyd 		.enable_reg = 0x25c0,
25542ec94130SStephen Boyd 		.enable_mask = BIT(4),
25552ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
25562ec94130SStephen Boyd 			.name = "dma_bam_h_clk",
25572ec94130SStephen Boyd 			.ops = &clk_branch_ops,
25582ec94130SStephen Boyd 		},
25592ec94130SStephen Boyd 	},
25602ec94130SStephen Boyd };
25612ec94130SStephen Boyd 
25622ec94130SStephen Boyd static struct clk_branch gsbi1_h_clk = {
25632ec94130SStephen Boyd 	.hwcg_reg = 0x29c0,
25642ec94130SStephen Boyd 	.hwcg_bit = 6,
25652ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
25662ec94130SStephen Boyd 	.halt_bit = 11,
25672ec94130SStephen Boyd 	.clkr = {
25682ec94130SStephen Boyd 		.enable_reg = 0x29c0,
25692ec94130SStephen Boyd 		.enable_mask = BIT(4),
25702ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
25712ec94130SStephen Boyd 			.name = "gsbi1_h_clk",
25722ec94130SStephen Boyd 			.ops = &clk_branch_ops,
25732ec94130SStephen Boyd 		},
25742ec94130SStephen Boyd 	},
25752ec94130SStephen Boyd };
25762ec94130SStephen Boyd 
25772ec94130SStephen Boyd static struct clk_branch gsbi2_h_clk = {
25782ec94130SStephen Boyd 	.hwcg_reg = 0x29e0,
25792ec94130SStephen Boyd 	.hwcg_bit = 6,
25802ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
25812ec94130SStephen Boyd 	.halt_bit = 7,
25822ec94130SStephen Boyd 	.clkr = {
25832ec94130SStephen Boyd 		.enable_reg = 0x29e0,
25842ec94130SStephen Boyd 		.enable_mask = BIT(4),
25852ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
25862ec94130SStephen Boyd 			.name = "gsbi2_h_clk",
25872ec94130SStephen Boyd 			.ops = &clk_branch_ops,
25882ec94130SStephen Boyd 		},
25892ec94130SStephen Boyd 	},
25902ec94130SStephen Boyd };
25912ec94130SStephen Boyd 
25922ec94130SStephen Boyd static struct clk_branch gsbi3_h_clk = {
25932ec94130SStephen Boyd 	.hwcg_reg = 0x2a00,
25942ec94130SStephen Boyd 	.hwcg_bit = 6,
25952ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
25962ec94130SStephen Boyd 	.halt_bit = 3,
25972ec94130SStephen Boyd 	.clkr = {
25982ec94130SStephen Boyd 		.enable_reg = 0x2a00,
25992ec94130SStephen Boyd 		.enable_mask = BIT(4),
26002ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
26012ec94130SStephen Boyd 			.name = "gsbi3_h_clk",
26022ec94130SStephen Boyd 			.ops = &clk_branch_ops,
26032ec94130SStephen Boyd 		},
26042ec94130SStephen Boyd 	},
26052ec94130SStephen Boyd };
26062ec94130SStephen Boyd 
26072ec94130SStephen Boyd static struct clk_branch gsbi4_h_clk = {
26082ec94130SStephen Boyd 	.hwcg_reg = 0x2a20,
26092ec94130SStephen Boyd 	.hwcg_bit = 6,
26102ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
26112ec94130SStephen Boyd 	.halt_bit = 27,
26122ec94130SStephen Boyd 	.clkr = {
26132ec94130SStephen Boyd 		.enable_reg = 0x2a20,
26142ec94130SStephen Boyd 		.enable_mask = BIT(4),
26152ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
26162ec94130SStephen Boyd 			.name = "gsbi4_h_clk",
26172ec94130SStephen Boyd 			.ops = &clk_branch_ops,
26182ec94130SStephen Boyd 		},
26192ec94130SStephen Boyd 	},
26202ec94130SStephen Boyd };
26212ec94130SStephen Boyd 
26222ec94130SStephen Boyd static struct clk_branch gsbi5_h_clk = {
26232ec94130SStephen Boyd 	.hwcg_reg = 0x2a40,
26242ec94130SStephen Boyd 	.hwcg_bit = 6,
26252ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
26262ec94130SStephen Boyd 	.halt_bit = 23,
26272ec94130SStephen Boyd 	.clkr = {
26282ec94130SStephen Boyd 		.enable_reg = 0x2a40,
26292ec94130SStephen Boyd 		.enable_mask = BIT(4),
26302ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
26312ec94130SStephen Boyd 			.name = "gsbi5_h_clk",
26322ec94130SStephen Boyd 			.ops = &clk_branch_ops,
26332ec94130SStephen Boyd 		},
26342ec94130SStephen Boyd 	},
26352ec94130SStephen Boyd };
26362ec94130SStephen Boyd 
26372ec94130SStephen Boyd static struct clk_branch gsbi6_h_clk = {
26382ec94130SStephen Boyd 	.hwcg_reg = 0x2a60,
26392ec94130SStephen Boyd 	.hwcg_bit = 6,
26402ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
26412ec94130SStephen Boyd 	.halt_bit = 19,
26422ec94130SStephen Boyd 	.clkr = {
26432ec94130SStephen Boyd 		.enable_reg = 0x2a60,
26442ec94130SStephen Boyd 		.enable_mask = BIT(4),
26452ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
26462ec94130SStephen Boyd 			.name = "gsbi6_h_clk",
26472ec94130SStephen Boyd 			.ops = &clk_branch_ops,
26482ec94130SStephen Boyd 		},
26492ec94130SStephen Boyd 	},
26502ec94130SStephen Boyd };
26512ec94130SStephen Boyd 
26522ec94130SStephen Boyd static struct clk_branch gsbi7_h_clk = {
26532ec94130SStephen Boyd 	.hwcg_reg = 0x2a80,
26542ec94130SStephen Boyd 	.hwcg_bit = 6,
26552ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
26562ec94130SStephen Boyd 	.halt_bit = 15,
26572ec94130SStephen Boyd 	.clkr = {
26582ec94130SStephen Boyd 		.enable_reg = 0x2a80,
26592ec94130SStephen Boyd 		.enable_mask = BIT(4),
26602ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
26612ec94130SStephen Boyd 			.name = "gsbi7_h_clk",
26622ec94130SStephen Boyd 			.ops = &clk_branch_ops,
26632ec94130SStephen Boyd 		},
26642ec94130SStephen Boyd 	},
26652ec94130SStephen Boyd };
26662ec94130SStephen Boyd 
26672ec94130SStephen Boyd static struct clk_branch gsbi8_h_clk = {
26682ec94130SStephen Boyd 	.hwcg_reg = 0x2aa0,
26692ec94130SStephen Boyd 	.hwcg_bit = 6,
26702ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
26712ec94130SStephen Boyd 	.halt_bit = 11,
26722ec94130SStephen Boyd 	.clkr = {
26732ec94130SStephen Boyd 		.enable_reg = 0x2aa0,
26742ec94130SStephen Boyd 		.enable_mask = BIT(4),
26752ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
26762ec94130SStephen Boyd 			.name = "gsbi8_h_clk",
26772ec94130SStephen Boyd 			.ops = &clk_branch_ops,
26782ec94130SStephen Boyd 		},
26792ec94130SStephen Boyd 	},
26802ec94130SStephen Boyd };
26812ec94130SStephen Boyd 
26822ec94130SStephen Boyd static struct clk_branch gsbi9_h_clk = {
26832ec94130SStephen Boyd 	.hwcg_reg = 0x2ac0,
26842ec94130SStephen Boyd 	.hwcg_bit = 6,
26852ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
26862ec94130SStephen Boyd 	.halt_bit = 7,
26872ec94130SStephen Boyd 	.clkr = {
26882ec94130SStephen Boyd 		.enable_reg = 0x2ac0,
26892ec94130SStephen Boyd 		.enable_mask = BIT(4),
26902ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
26912ec94130SStephen Boyd 			.name = "gsbi9_h_clk",
26922ec94130SStephen Boyd 			.ops = &clk_branch_ops,
26932ec94130SStephen Boyd 		},
26942ec94130SStephen Boyd 	},
26952ec94130SStephen Boyd };
26962ec94130SStephen Boyd 
26972ec94130SStephen Boyd static struct clk_branch gsbi10_h_clk = {
26982ec94130SStephen Boyd 	.hwcg_reg = 0x2ae0,
26992ec94130SStephen Boyd 	.hwcg_bit = 6,
27002ec94130SStephen Boyd 	.halt_reg = 0x2fd0,
27012ec94130SStephen Boyd 	.halt_bit = 3,
27022ec94130SStephen Boyd 	.clkr = {
27032ec94130SStephen Boyd 		.enable_reg = 0x2ae0,
27042ec94130SStephen Boyd 		.enable_mask = BIT(4),
27052ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
27062ec94130SStephen Boyd 			.name = "gsbi10_h_clk",
27072ec94130SStephen Boyd 			.ops = &clk_branch_ops,
27082ec94130SStephen Boyd 		},
27092ec94130SStephen Boyd 	},
27102ec94130SStephen Boyd };
27112ec94130SStephen Boyd 
27122ec94130SStephen Boyd static struct clk_branch gsbi11_h_clk = {
27132ec94130SStephen Boyd 	.hwcg_reg = 0x2b00,
27142ec94130SStephen Boyd 	.hwcg_bit = 6,
27152ec94130SStephen Boyd 	.halt_reg = 0x2fd4,
27162ec94130SStephen Boyd 	.halt_bit = 18,
27172ec94130SStephen Boyd 	.clkr = {
27182ec94130SStephen Boyd 		.enable_reg = 0x2b00,
27192ec94130SStephen Boyd 		.enable_mask = BIT(4),
27202ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
27212ec94130SStephen Boyd 			.name = "gsbi11_h_clk",
27222ec94130SStephen Boyd 			.ops = &clk_branch_ops,
27232ec94130SStephen Boyd 		},
27242ec94130SStephen Boyd 	},
27252ec94130SStephen Boyd };
27262ec94130SStephen Boyd 
27272ec94130SStephen Boyd static struct clk_branch gsbi12_h_clk = {
27282ec94130SStephen Boyd 	.hwcg_reg = 0x2b20,
27292ec94130SStephen Boyd 	.hwcg_bit = 6,
27302ec94130SStephen Boyd 	.halt_reg = 0x2fd4,
27312ec94130SStephen Boyd 	.halt_bit = 14,
27322ec94130SStephen Boyd 	.clkr = {
27332ec94130SStephen Boyd 		.enable_reg = 0x2b20,
27342ec94130SStephen Boyd 		.enable_mask = BIT(4),
27352ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
27362ec94130SStephen Boyd 			.name = "gsbi12_h_clk",
27372ec94130SStephen Boyd 			.ops = &clk_branch_ops,
27382ec94130SStephen Boyd 		},
27392ec94130SStephen Boyd 	},
27402ec94130SStephen Boyd };
27412ec94130SStephen Boyd 
27422ec94130SStephen Boyd static struct clk_branch tsif_h_clk = {
27432ec94130SStephen Boyd 	.hwcg_reg = 0x2700,
27442ec94130SStephen Boyd 	.hwcg_bit = 6,
27452ec94130SStephen Boyd 	.halt_reg = 0x2fd4,
27462ec94130SStephen Boyd 	.halt_bit = 7,
27472ec94130SStephen Boyd 	.clkr = {
27482ec94130SStephen Boyd 		.enable_reg = 0x2700,
27492ec94130SStephen Boyd 		.enable_mask = BIT(4),
27502ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
27512ec94130SStephen Boyd 			.name = "tsif_h_clk",
27522ec94130SStephen Boyd 			.ops = &clk_branch_ops,
27532ec94130SStephen Boyd 		},
27542ec94130SStephen Boyd 	},
27552ec94130SStephen Boyd };
27562ec94130SStephen Boyd 
27572ec94130SStephen Boyd static struct clk_branch usb_fs1_h_clk = {
27582ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
27592ec94130SStephen Boyd 	.halt_bit = 17,
27602ec94130SStephen Boyd 	.clkr = {
27612ec94130SStephen Boyd 		.enable_reg = 0x2960,
27622ec94130SStephen Boyd 		.enable_mask = BIT(4),
27632ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
27642ec94130SStephen Boyd 			.name = "usb_fs1_h_clk",
27652ec94130SStephen Boyd 			.ops = &clk_branch_ops,
27662ec94130SStephen Boyd 		},
27672ec94130SStephen Boyd 	},
27682ec94130SStephen Boyd };
27692ec94130SStephen Boyd 
27702ec94130SStephen Boyd static struct clk_branch usb_fs2_h_clk = {
27712ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
27722ec94130SStephen Boyd 	.halt_bit = 14,
27732ec94130SStephen Boyd 	.clkr = {
27742ec94130SStephen Boyd 		.enable_reg = 0x2980,
27752ec94130SStephen Boyd 		.enable_mask = BIT(4),
27762ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
27772ec94130SStephen Boyd 			.name = "usb_fs2_h_clk",
27782ec94130SStephen Boyd 			.ops = &clk_branch_ops,
27792ec94130SStephen Boyd 		},
27802ec94130SStephen Boyd 	},
27812ec94130SStephen Boyd };
27822ec94130SStephen Boyd 
27832ec94130SStephen Boyd static struct clk_branch usb_hs1_h_clk = {
27842ec94130SStephen Boyd 	.hwcg_reg = 0x2900,
27852ec94130SStephen Boyd 	.hwcg_bit = 6,
27862ec94130SStephen Boyd 	.halt_reg = 0x2fc8,
27872ec94130SStephen Boyd 	.halt_bit = 1,
27882ec94130SStephen Boyd 	.clkr = {
27892ec94130SStephen Boyd 		.enable_reg = 0x2900,
27902ec94130SStephen Boyd 		.enable_mask = BIT(4),
27912ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
27922ec94130SStephen Boyd 			.name = "usb_hs1_h_clk",
27932ec94130SStephen Boyd 			.ops = &clk_branch_ops,
27942ec94130SStephen Boyd 		},
27952ec94130SStephen Boyd 	},
27962ec94130SStephen Boyd };
27972ec94130SStephen Boyd 
27985f775498SStephen Boyd static struct clk_branch usb_hs3_h_clk = {
27995f775498SStephen Boyd 	.halt_reg = 0x2fc8,
28005f775498SStephen Boyd 	.halt_bit = 31,
28015f775498SStephen Boyd 	.clkr = {
28025f775498SStephen Boyd 		.enable_reg = 0x3700,
28035f775498SStephen Boyd 		.enable_mask = BIT(4),
28045f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
28055f775498SStephen Boyd 			.name = "usb_hs3_h_clk",
28065f775498SStephen Boyd 			.ops = &clk_branch_ops,
28075f775498SStephen Boyd 		},
28085f775498SStephen Boyd 	},
28095f775498SStephen Boyd };
28105f775498SStephen Boyd 
28115f775498SStephen Boyd static struct clk_branch usb_hs4_h_clk = {
28125f775498SStephen Boyd 	.halt_reg = 0x2fc8,
28135f775498SStephen Boyd 	.halt_bit = 7,
28145f775498SStephen Boyd 	.clkr = {
28155f775498SStephen Boyd 		.enable_reg = 0x3720,
28165f775498SStephen Boyd 		.enable_mask = BIT(4),
28175f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
28185f775498SStephen Boyd 			.name = "usb_hs4_h_clk",
28195f775498SStephen Boyd 			.ops = &clk_branch_ops,
28205f775498SStephen Boyd 		},
28215f775498SStephen Boyd 	},
28225f775498SStephen Boyd };
28235f775498SStephen Boyd 
28242ec94130SStephen Boyd static struct clk_branch usb_hsic_h_clk = {
28252ec94130SStephen Boyd 	.halt_reg = 0x2fcc,
28262ec94130SStephen Boyd 	.halt_bit = 28,
28272ec94130SStephen Boyd 	.clkr = {
28282ec94130SStephen Boyd 		.enable_reg = 0x2920,
28292ec94130SStephen Boyd 		.enable_mask = BIT(4),
28302ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
28312ec94130SStephen Boyd 			.name = "usb_hsic_h_clk",
28322ec94130SStephen Boyd 			.ops = &clk_branch_ops,
28332ec94130SStephen Boyd 		},
28342ec94130SStephen Boyd 	},
28352ec94130SStephen Boyd };
28362ec94130SStephen Boyd 
28372ec94130SStephen Boyd static struct clk_branch sdc1_h_clk = {
28382ec94130SStephen Boyd 	.hwcg_reg = 0x2820,
28392ec94130SStephen Boyd 	.hwcg_bit = 6,
28402ec94130SStephen Boyd 	.halt_reg = 0x2fc8,
28412ec94130SStephen Boyd 	.halt_bit = 11,
28422ec94130SStephen Boyd 	.clkr = {
28432ec94130SStephen Boyd 		.enable_reg = 0x2820,
28442ec94130SStephen Boyd 		.enable_mask = BIT(4),
28452ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
28462ec94130SStephen Boyd 			.name = "sdc1_h_clk",
28472ec94130SStephen Boyd 			.ops = &clk_branch_ops,
28482ec94130SStephen Boyd 		},
28492ec94130SStephen Boyd 	},
28502ec94130SStephen Boyd };
28512ec94130SStephen Boyd 
28522ec94130SStephen Boyd static struct clk_branch sdc2_h_clk = {
28532ec94130SStephen Boyd 	.hwcg_reg = 0x2840,
28542ec94130SStephen Boyd 	.hwcg_bit = 6,
28552ec94130SStephen Boyd 	.halt_reg = 0x2fc8,
28562ec94130SStephen Boyd 	.halt_bit = 10,
28572ec94130SStephen Boyd 	.clkr = {
28582ec94130SStephen Boyd 		.enable_reg = 0x2840,
28592ec94130SStephen Boyd 		.enable_mask = BIT(4),
28602ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
28612ec94130SStephen Boyd 			.name = "sdc2_h_clk",
28622ec94130SStephen Boyd 			.ops = &clk_branch_ops,
28632ec94130SStephen Boyd 		},
28642ec94130SStephen Boyd 	},
28652ec94130SStephen Boyd };
28662ec94130SStephen Boyd 
28672ec94130SStephen Boyd static struct clk_branch sdc3_h_clk = {
28682ec94130SStephen Boyd 	.hwcg_reg = 0x2860,
28692ec94130SStephen Boyd 	.hwcg_bit = 6,
28702ec94130SStephen Boyd 	.halt_reg = 0x2fc8,
28712ec94130SStephen Boyd 	.halt_bit = 9,
28722ec94130SStephen Boyd 	.clkr = {
28732ec94130SStephen Boyd 		.enable_reg = 0x2860,
28742ec94130SStephen Boyd 		.enable_mask = BIT(4),
28752ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
28762ec94130SStephen Boyd 			.name = "sdc3_h_clk",
28772ec94130SStephen Boyd 			.ops = &clk_branch_ops,
28782ec94130SStephen Boyd 		},
28792ec94130SStephen Boyd 	},
28802ec94130SStephen Boyd };
28812ec94130SStephen Boyd 
28822ec94130SStephen Boyd static struct clk_branch sdc4_h_clk = {
28832ec94130SStephen Boyd 	.hwcg_reg = 0x2880,
28842ec94130SStephen Boyd 	.hwcg_bit = 6,
28852ec94130SStephen Boyd 	.halt_reg = 0x2fc8,
28862ec94130SStephen Boyd 	.halt_bit = 8,
28872ec94130SStephen Boyd 	.clkr = {
28882ec94130SStephen Boyd 		.enable_reg = 0x2880,
28892ec94130SStephen Boyd 		.enable_mask = BIT(4),
28902ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
28912ec94130SStephen Boyd 			.name = "sdc4_h_clk",
28922ec94130SStephen Boyd 			.ops = &clk_branch_ops,
28932ec94130SStephen Boyd 		},
28942ec94130SStephen Boyd 	},
28952ec94130SStephen Boyd };
28962ec94130SStephen Boyd 
28972ec94130SStephen Boyd static struct clk_branch sdc5_h_clk = {
28982ec94130SStephen Boyd 	.hwcg_reg = 0x28a0,
28992ec94130SStephen Boyd 	.hwcg_bit = 6,
29002ec94130SStephen Boyd 	.halt_reg = 0x2fc8,
29012ec94130SStephen Boyd 	.halt_bit = 7,
29022ec94130SStephen Boyd 	.clkr = {
29032ec94130SStephen Boyd 		.enable_reg = 0x28a0,
29042ec94130SStephen Boyd 		.enable_mask = BIT(4),
29052ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
29062ec94130SStephen Boyd 			.name = "sdc5_h_clk",
29072ec94130SStephen Boyd 			.ops = &clk_branch_ops,
29082ec94130SStephen Boyd 		},
29092ec94130SStephen Boyd 	},
29102ec94130SStephen Boyd };
29112ec94130SStephen Boyd 
29122ec94130SStephen Boyd static struct clk_branch adm0_clk = {
29132ec94130SStephen Boyd 	.halt_reg = 0x2fdc,
29142ec94130SStephen Boyd 	.halt_check = BRANCH_HALT_VOTED,
29152ec94130SStephen Boyd 	.halt_bit = 14,
29162ec94130SStephen Boyd 	.clkr = {
29172ec94130SStephen Boyd 		.enable_reg = 0x3080,
29182ec94130SStephen Boyd 		.enable_mask = BIT(2),
29192ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
29202ec94130SStephen Boyd 			.name = "adm0_clk",
29212ec94130SStephen Boyd 			.ops = &clk_branch_ops,
29222ec94130SStephen Boyd 		},
29232ec94130SStephen Boyd 	},
29242ec94130SStephen Boyd };
29252ec94130SStephen Boyd 
29262ec94130SStephen Boyd static struct clk_branch adm0_pbus_clk = {
29272ec94130SStephen Boyd 	.hwcg_reg = 0x2208,
29282ec94130SStephen Boyd 	.hwcg_bit = 6,
29292ec94130SStephen Boyd 	.halt_reg = 0x2fdc,
29302ec94130SStephen Boyd 	.halt_check = BRANCH_HALT_VOTED,
29312ec94130SStephen Boyd 	.halt_bit = 13,
29322ec94130SStephen Boyd 	.clkr = {
29332ec94130SStephen Boyd 		.enable_reg = 0x3080,
29342ec94130SStephen Boyd 		.enable_mask = BIT(3),
29352ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
29362ec94130SStephen Boyd 			.name = "adm0_pbus_clk",
29372ec94130SStephen Boyd 			.ops = &clk_branch_ops,
29382ec94130SStephen Boyd 		},
29392ec94130SStephen Boyd 	},
29402ec94130SStephen Boyd };
29412ec94130SStephen Boyd 
29425f775498SStephen Boyd static struct freq_tbl clk_tbl_ce3[] = {
29435f775498SStephen Boyd 	{ 48000000, P_PLL8, 8 },
29445f775498SStephen Boyd 	{ 100000000, P_PLL3, 12 },
29455f775498SStephen Boyd 	{ 120000000, P_PLL3, 10 },
29465f775498SStephen Boyd 	{ }
29475f775498SStephen Boyd };
29485f775498SStephen Boyd 
29495f775498SStephen Boyd static struct clk_rcg ce3_src = {
29505f775498SStephen Boyd 	.ns_reg = 0x36c0,
29515f775498SStephen Boyd 	.p = {
29525f775498SStephen Boyd 		.pre_div_shift = 3,
29535f775498SStephen Boyd 		.pre_div_width = 4,
29545f775498SStephen Boyd 	},
29555f775498SStephen Boyd 	.s = {
29565f775498SStephen Boyd 		.src_sel_shift = 0,
29575f775498SStephen Boyd 		.parent_map = gcc_pxo_pll8_pll3_map,
29585f775498SStephen Boyd 	},
29595f775498SStephen Boyd 	.freq_tbl = clk_tbl_ce3,
29605f775498SStephen Boyd 	.clkr = {
29610f75e1a3SStephen Boyd 		.enable_reg = 0x36c0,
29625f775498SStephen Boyd 		.enable_mask = BIT(7),
29635f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
29645f775498SStephen Boyd 			.name = "ce3_src",
2965e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8_pll3,
2966d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_pll3),
29675f775498SStephen Boyd 			.ops = &clk_rcg_ops,
29685f775498SStephen Boyd 			.flags = CLK_SET_RATE_GATE,
29695f775498SStephen Boyd 		},
29705f775498SStephen Boyd 	},
29715f775498SStephen Boyd };
29725f775498SStephen Boyd 
29735f775498SStephen Boyd static struct clk_branch ce3_core_clk = {
29745f775498SStephen Boyd 	.halt_reg = 0x2fdc,
29755f775498SStephen Boyd 	.halt_bit = 5,
29765f775498SStephen Boyd 	.clkr = {
2977732d6913SSrinivas Kandagatla 		.enable_reg = 0x36cc,
29785f775498SStephen Boyd 		.enable_mask = BIT(4),
29795f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
29805f775498SStephen Boyd 			.name = "ce3_core_clk",
2981e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
2982e38fc8f0SDmitry Baryshkov 				&ce3_src.clkr.hw
2983e38fc8f0SDmitry Baryshkov 			},
29845f775498SStephen Boyd 			.num_parents = 1,
29855f775498SStephen Boyd 			.ops = &clk_branch_ops,
29865f775498SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
29875f775498SStephen Boyd 		},
29885f775498SStephen Boyd 	},
29895f775498SStephen Boyd };
29905f775498SStephen Boyd 
29915f775498SStephen Boyd static struct clk_branch ce3_h_clk = {
29925f775498SStephen Boyd 	.halt_reg = 0x2fc4,
29935f775498SStephen Boyd 	.halt_bit = 16,
29945f775498SStephen Boyd 	.clkr = {
29955f775498SStephen Boyd 		.enable_reg = 0x36c4,
29965f775498SStephen Boyd 		.enable_mask = BIT(4),
29975f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
29985f775498SStephen Boyd 			.name = "ce3_h_clk",
2999e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
3000e38fc8f0SDmitry Baryshkov 				&ce3_src.clkr.hw
3001e38fc8f0SDmitry Baryshkov 			},
30025f775498SStephen Boyd 			.num_parents = 1,
30035f775498SStephen Boyd 			.ops = &clk_branch_ops,
30045f775498SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
30055f775498SStephen Boyd 		},
30065f775498SStephen Boyd 	},
30075f775498SStephen Boyd };
30085f775498SStephen Boyd 
30095f775498SStephen Boyd static const struct freq_tbl clk_tbl_sata_ref[] = {
30105f775498SStephen Boyd 	{ 48000000, P_PLL8, 8, 0, 0 },
30115f775498SStephen Boyd 	{ 100000000, P_PLL3, 12, 0, 0 },
30125f775498SStephen Boyd 	{ }
30135f775498SStephen Boyd };
30145f775498SStephen Boyd 
30155f775498SStephen Boyd static struct clk_rcg sata_clk_src = {
30165f775498SStephen Boyd 	.ns_reg = 0x2c08,
30175f775498SStephen Boyd 	.p = {
30185f775498SStephen Boyd 		.pre_div_shift = 3,
30195f775498SStephen Boyd 		.pre_div_width = 4,
30205f775498SStephen Boyd 	},
30215f775498SStephen Boyd 	.s = {
30225f775498SStephen Boyd 		.src_sel_shift = 0,
30235f775498SStephen Boyd 		.parent_map = gcc_pxo_pll8_pll3_map,
30245f775498SStephen Boyd 	},
30255f775498SStephen Boyd 	.freq_tbl = clk_tbl_sata_ref,
30265f775498SStephen Boyd 	.clkr = {
30275f775498SStephen Boyd 		.enable_reg = 0x2c08,
30285f775498SStephen Boyd 		.enable_mask = BIT(7),
30295f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
30305f775498SStephen Boyd 			.name = "sata_clk_src",
3031e38fc8f0SDmitry Baryshkov 			.parent_data = gcc_pxo_pll8_pll3,
3032d247abe6SDmitry Baryshkov 			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_pll3),
30335f775498SStephen Boyd 			.ops = &clk_rcg_ops,
30345f775498SStephen Boyd 			.flags = CLK_SET_RATE_GATE,
30355f775498SStephen Boyd 		},
30365f775498SStephen Boyd 	},
30375f775498SStephen Boyd };
30385f775498SStephen Boyd 
30395f775498SStephen Boyd static struct clk_branch sata_rxoob_clk = {
30405f775498SStephen Boyd 	.halt_reg = 0x2fdc,
30415f775498SStephen Boyd 	.halt_bit = 26,
30425f775498SStephen Boyd 	.clkr = {
30435f775498SStephen Boyd 		.enable_reg = 0x2c0c,
30445f775498SStephen Boyd 		.enable_mask = BIT(4),
30455f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
30465f775498SStephen Boyd 			.name = "sata_rxoob_clk",
3047e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
3048e38fc8f0SDmitry Baryshkov 				&sata_clk_src.clkr.hw,
3049e38fc8f0SDmitry Baryshkov 			},
30505f775498SStephen Boyd 			.num_parents = 1,
30515f775498SStephen Boyd 			.ops = &clk_branch_ops,
30525f775498SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
30535f775498SStephen Boyd 		},
30545f775498SStephen Boyd 	},
30555f775498SStephen Boyd };
30565f775498SStephen Boyd 
30575f775498SStephen Boyd static struct clk_branch sata_pmalive_clk = {
30585f775498SStephen Boyd 	.halt_reg = 0x2fdc,
30595f775498SStephen Boyd 	.halt_bit = 25,
30605f775498SStephen Boyd 	.clkr = {
30615f775498SStephen Boyd 		.enable_reg = 0x2c10,
30625f775498SStephen Boyd 		.enable_mask = BIT(4),
30635f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
30645f775498SStephen Boyd 			.name = "sata_pmalive_clk",
3065e38fc8f0SDmitry Baryshkov 			.parent_hws = (const struct clk_hw*[]){
3066e38fc8f0SDmitry Baryshkov 				&sata_clk_src.clkr.hw,
3067e38fc8f0SDmitry Baryshkov 			},
30685f775498SStephen Boyd 			.num_parents = 1,
30695f775498SStephen Boyd 			.ops = &clk_branch_ops,
30705f775498SStephen Boyd 			.flags = CLK_SET_RATE_PARENT,
30715f775498SStephen Boyd 		},
30725f775498SStephen Boyd 	},
30735f775498SStephen Boyd };
30745f775498SStephen Boyd 
30755f775498SStephen Boyd static struct clk_branch sata_phy_ref_clk = {
30765f775498SStephen Boyd 	.halt_reg = 0x2fdc,
30775f775498SStephen Boyd 	.halt_bit = 24,
30785f775498SStephen Boyd 	.clkr = {
30795f775498SStephen Boyd 		.enable_reg = 0x2c14,
30805f775498SStephen Boyd 		.enable_mask = BIT(4),
30815f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
30825f775498SStephen Boyd 			.name = "sata_phy_ref_clk",
3083e38fc8f0SDmitry Baryshkov 			.parent_data = &(const struct clk_parent_data){
3084e38fc8f0SDmitry Baryshkov 				.fw_name = "pxo", .name = "pxo_board",
3085e38fc8f0SDmitry Baryshkov 			},
30865f775498SStephen Boyd 			.num_parents = 1,
30875f775498SStephen Boyd 			.ops = &clk_branch_ops,
30885f775498SStephen Boyd 		},
30895f775498SStephen Boyd 	},
30905f775498SStephen Boyd };
30915f775498SStephen Boyd 
30925f775498SStephen Boyd static struct clk_branch sata_a_clk = {
30935f775498SStephen Boyd 	.halt_reg = 0x2fc0,
30945f775498SStephen Boyd 	.halt_bit = 12,
30955f775498SStephen Boyd 	.clkr = {
30965f775498SStephen Boyd 		.enable_reg = 0x2c20,
30975f775498SStephen Boyd 		.enable_mask = BIT(4),
30985f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
30995f775498SStephen Boyd 			.name = "sata_a_clk",
31005f775498SStephen Boyd 			.ops = &clk_branch_ops,
31015f775498SStephen Boyd 		},
31025f775498SStephen Boyd 	},
31035f775498SStephen Boyd };
31045f775498SStephen Boyd 
31055f775498SStephen Boyd static struct clk_branch sata_h_clk = {
31065f775498SStephen Boyd 	.halt_reg = 0x2fdc,
31075f775498SStephen Boyd 	.halt_bit = 27,
31085f775498SStephen Boyd 	.clkr = {
31095f775498SStephen Boyd 		.enable_reg = 0x2c00,
31105f775498SStephen Boyd 		.enable_mask = BIT(4),
31115f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
31125f775498SStephen Boyd 			.name = "sata_h_clk",
31135f775498SStephen Boyd 			.ops = &clk_branch_ops,
31145f775498SStephen Boyd 		},
31155f775498SStephen Boyd 	},
31165f775498SStephen Boyd };
31175f775498SStephen Boyd 
31185f775498SStephen Boyd static struct clk_branch sfab_sata_s_h_clk = {
31195f775498SStephen Boyd 	.halt_reg = 0x2fc4,
31205f775498SStephen Boyd 	.halt_bit = 14,
31215f775498SStephen Boyd 	.clkr = {
31225f775498SStephen Boyd 		.enable_reg = 0x2480,
31235f775498SStephen Boyd 		.enable_mask = BIT(4),
31245f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
31255f775498SStephen Boyd 			.name = "sfab_sata_s_h_clk",
31265f775498SStephen Boyd 			.ops = &clk_branch_ops,
31275f775498SStephen Boyd 		},
31285f775498SStephen Boyd 	},
31295f775498SStephen Boyd };
31305f775498SStephen Boyd 
31315f775498SStephen Boyd static struct clk_branch sata_phy_cfg_clk = {
31325f775498SStephen Boyd 	.halt_reg = 0x2fcc,
31335f775498SStephen Boyd 	.halt_bit = 12,
31345f775498SStephen Boyd 	.clkr = {
31355f775498SStephen Boyd 		.enable_reg = 0x2c40,
31365f775498SStephen Boyd 		.enable_mask = BIT(4),
31375f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
31385f775498SStephen Boyd 			.name = "sata_phy_cfg_clk",
31395f775498SStephen Boyd 			.ops = &clk_branch_ops,
31405f775498SStephen Boyd 		},
31415f775498SStephen Boyd 	},
31425f775498SStephen Boyd };
31435f775498SStephen Boyd 
31445f775498SStephen Boyd static struct clk_branch pcie_phy_ref_clk = {
31455f775498SStephen Boyd 	.halt_reg = 0x2fdc,
31465f775498SStephen Boyd 	.halt_bit = 29,
31475f775498SStephen Boyd 	.clkr = {
31485f775498SStephen Boyd 		.enable_reg = 0x22d0,
31495f775498SStephen Boyd 		.enable_mask = BIT(4),
31505f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
31515f775498SStephen Boyd 			.name = "pcie_phy_ref_clk",
31525f775498SStephen Boyd 			.ops = &clk_branch_ops,
31535f775498SStephen Boyd 		},
31545f775498SStephen Boyd 	},
31555f775498SStephen Boyd };
31565f775498SStephen Boyd 
31575f775498SStephen Boyd static struct clk_branch pcie_h_clk = {
31585f775498SStephen Boyd 	.halt_reg = 0x2fd4,
31595f775498SStephen Boyd 	.halt_bit = 8,
31605f775498SStephen Boyd 	.clkr = {
31615f775498SStephen Boyd 		.enable_reg = 0x22cc,
31625f775498SStephen Boyd 		.enable_mask = BIT(4),
31635f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
31645f775498SStephen Boyd 			.name = "pcie_h_clk",
31655f775498SStephen Boyd 			.ops = &clk_branch_ops,
31665f775498SStephen Boyd 		},
31675f775498SStephen Boyd 	},
31685f775498SStephen Boyd };
31695f775498SStephen Boyd 
31705f775498SStephen Boyd static struct clk_branch pcie_a_clk = {
31715f775498SStephen Boyd 	.halt_reg = 0x2fc0,
31725f775498SStephen Boyd 	.halt_bit = 13,
31735f775498SStephen Boyd 	.clkr = {
31745f775498SStephen Boyd 		.enable_reg = 0x22c0,
31755f775498SStephen Boyd 		.enable_mask = BIT(4),
31765f775498SStephen Boyd 		.hw.init = &(struct clk_init_data){
31775f775498SStephen Boyd 			.name = "pcie_a_clk",
31785f775498SStephen Boyd 			.ops = &clk_branch_ops,
31795f775498SStephen Boyd 		},
31805f775498SStephen Boyd 	},
31815f775498SStephen Boyd };
31825f775498SStephen Boyd 
31832ec94130SStephen Boyd static struct clk_branch pmic_arb0_h_clk = {
31842ec94130SStephen Boyd 	.halt_reg = 0x2fd8,
31852ec94130SStephen Boyd 	.halt_check = BRANCH_HALT_VOTED,
31862ec94130SStephen Boyd 	.halt_bit = 22,
31872ec94130SStephen Boyd 	.clkr = {
31882ec94130SStephen Boyd 		.enable_reg = 0x3080,
31892ec94130SStephen Boyd 		.enable_mask = BIT(8),
31902ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
31912ec94130SStephen Boyd 			.name = "pmic_arb0_h_clk",
31922ec94130SStephen Boyd 			.ops = &clk_branch_ops,
31932ec94130SStephen Boyd 		},
31942ec94130SStephen Boyd 	},
31952ec94130SStephen Boyd };
31962ec94130SStephen Boyd 
31972ec94130SStephen Boyd static struct clk_branch pmic_arb1_h_clk = {
31982ec94130SStephen Boyd 	.halt_reg = 0x2fd8,
31992ec94130SStephen Boyd 	.halt_check = BRANCH_HALT_VOTED,
32002ec94130SStephen Boyd 	.halt_bit = 21,
32012ec94130SStephen Boyd 	.clkr = {
32022ec94130SStephen Boyd 		.enable_reg = 0x3080,
32032ec94130SStephen Boyd 		.enable_mask = BIT(9),
32042ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
32052ec94130SStephen Boyd 			.name = "pmic_arb1_h_clk",
32062ec94130SStephen Boyd 			.ops = &clk_branch_ops,
32072ec94130SStephen Boyd 		},
32082ec94130SStephen Boyd 	},
32092ec94130SStephen Boyd };
32102ec94130SStephen Boyd 
32112ec94130SStephen Boyd static struct clk_branch pmic_ssbi2_clk = {
32122ec94130SStephen Boyd 	.halt_reg = 0x2fd8,
32132ec94130SStephen Boyd 	.halt_check = BRANCH_HALT_VOTED,
32142ec94130SStephen Boyd 	.halt_bit = 23,
32152ec94130SStephen Boyd 	.clkr = {
32162ec94130SStephen Boyd 		.enable_reg = 0x3080,
32172ec94130SStephen Boyd 		.enable_mask = BIT(7),
32182ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
32192ec94130SStephen Boyd 			.name = "pmic_ssbi2_clk",
32202ec94130SStephen Boyd 			.ops = &clk_branch_ops,
32212ec94130SStephen Boyd 		},
32222ec94130SStephen Boyd 	},
32232ec94130SStephen Boyd };
32242ec94130SStephen Boyd 
32252ec94130SStephen Boyd static struct clk_branch rpm_msg_ram_h_clk = {
32262ec94130SStephen Boyd 	.hwcg_reg = 0x27e0,
32272ec94130SStephen Boyd 	.hwcg_bit = 6,
32282ec94130SStephen Boyd 	.halt_reg = 0x2fd8,
32292ec94130SStephen Boyd 	.halt_check = BRANCH_HALT_VOTED,
32302ec94130SStephen Boyd 	.halt_bit = 12,
32312ec94130SStephen Boyd 	.clkr = {
32322ec94130SStephen Boyd 		.enable_reg = 0x3080,
32332ec94130SStephen Boyd 		.enable_mask = BIT(6),
32342ec94130SStephen Boyd 		.hw.init = &(struct clk_init_data){
32352ec94130SStephen Boyd 			.name = "rpm_msg_ram_h_clk",
32362ec94130SStephen Boyd 			.ops = &clk_branch_ops,
32372ec94130SStephen Boyd 		},
32382ec94130SStephen Boyd 	},
32392ec94130SStephen Boyd };
32402ec94130SStephen Boyd 
32412ec94130SStephen Boyd static struct clk_regmap *gcc_msm8960_clks[] = {
32422ec94130SStephen Boyd 	[PLL3] = &pll3.clkr,
32434be8fc04SStephen Boyd 	[PLL4_VOTE] = &pll4_vote,
32442ec94130SStephen Boyd 	[PLL8] = &pll8.clkr,
32452ec94130SStephen Boyd 	[PLL8_VOTE] = &pll8_vote,
32462ec94130SStephen Boyd 	[PLL14] = &pll14.clkr,
32472ec94130SStephen Boyd 	[PLL14_VOTE] = &pll14_vote,
32482ec94130SStephen Boyd 	[GSBI1_UART_SRC] = &gsbi1_uart_src.clkr,
32492ec94130SStephen Boyd 	[GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr,
32502ec94130SStephen Boyd 	[GSBI2_UART_SRC] = &gsbi2_uart_src.clkr,
32512ec94130SStephen Boyd 	[GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr,
32522ec94130SStephen Boyd 	[GSBI3_UART_SRC] = &gsbi3_uart_src.clkr,
32532ec94130SStephen Boyd 	[GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr,
32542ec94130SStephen Boyd 	[GSBI4_UART_SRC] = &gsbi4_uart_src.clkr,
32552ec94130SStephen Boyd 	[GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr,
32562ec94130SStephen Boyd 	[GSBI5_UART_SRC] = &gsbi5_uart_src.clkr,
32572ec94130SStephen Boyd 	[GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr,
32582ec94130SStephen Boyd 	[GSBI6_UART_SRC] = &gsbi6_uart_src.clkr,
32592ec94130SStephen Boyd 	[GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr,
32602ec94130SStephen Boyd 	[GSBI7_UART_SRC] = &gsbi7_uart_src.clkr,
32612ec94130SStephen Boyd 	[GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr,
32622ec94130SStephen Boyd 	[GSBI8_UART_SRC] = &gsbi8_uart_src.clkr,
32632ec94130SStephen Boyd 	[GSBI8_UART_CLK] = &gsbi8_uart_clk.clkr,
32642ec94130SStephen Boyd 	[GSBI9_UART_SRC] = &gsbi9_uart_src.clkr,
32652ec94130SStephen Boyd 	[GSBI9_UART_CLK] = &gsbi9_uart_clk.clkr,
32662ec94130SStephen Boyd 	[GSBI10_UART_SRC] = &gsbi10_uart_src.clkr,
32672ec94130SStephen Boyd 	[GSBI10_UART_CLK] = &gsbi10_uart_clk.clkr,
32682ec94130SStephen Boyd 	[GSBI11_UART_SRC] = &gsbi11_uart_src.clkr,
32692ec94130SStephen Boyd 	[GSBI11_UART_CLK] = &gsbi11_uart_clk.clkr,
32702ec94130SStephen Boyd 	[GSBI12_UART_SRC] = &gsbi12_uart_src.clkr,
32712ec94130SStephen Boyd 	[GSBI12_UART_CLK] = &gsbi12_uart_clk.clkr,
32722ec94130SStephen Boyd 	[GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr,
32732ec94130SStephen Boyd 	[GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr,
32742ec94130SStephen Boyd 	[GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr,
32752ec94130SStephen Boyd 	[GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr,
32762ec94130SStephen Boyd 	[GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr,
32772ec94130SStephen Boyd 	[GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr,
32782ec94130SStephen Boyd 	[GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr,
32792ec94130SStephen Boyd 	[GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr,
32802ec94130SStephen Boyd 	[GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr,
32812ec94130SStephen Boyd 	[GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr,
32822ec94130SStephen Boyd 	[GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr,
32832ec94130SStephen Boyd 	[GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr,
32842ec94130SStephen Boyd 	[GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr,
32852ec94130SStephen Boyd 	[GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr,
32862ec94130SStephen Boyd 	[GSBI8_QUP_SRC] = &gsbi8_qup_src.clkr,
32872ec94130SStephen Boyd 	[GSBI8_QUP_CLK] = &gsbi8_qup_clk.clkr,
32882ec94130SStephen Boyd 	[GSBI9_QUP_SRC] = &gsbi9_qup_src.clkr,
32892ec94130SStephen Boyd 	[GSBI9_QUP_CLK] = &gsbi9_qup_clk.clkr,
32902ec94130SStephen Boyd 	[GSBI10_QUP_SRC] = &gsbi10_qup_src.clkr,
32912ec94130SStephen Boyd 	[GSBI10_QUP_CLK] = &gsbi10_qup_clk.clkr,
32922ec94130SStephen Boyd 	[GSBI11_QUP_SRC] = &gsbi11_qup_src.clkr,
32932ec94130SStephen Boyd 	[GSBI11_QUP_CLK] = &gsbi11_qup_clk.clkr,
32942ec94130SStephen Boyd 	[GSBI12_QUP_SRC] = &gsbi12_qup_src.clkr,
32952ec94130SStephen Boyd 	[GSBI12_QUP_CLK] = &gsbi12_qup_clk.clkr,
32962ec94130SStephen Boyd 	[GP0_SRC] = &gp0_src.clkr,
32972ec94130SStephen Boyd 	[GP0_CLK] = &gp0_clk.clkr,
32982ec94130SStephen Boyd 	[GP1_SRC] = &gp1_src.clkr,
32992ec94130SStephen Boyd 	[GP1_CLK] = &gp1_clk.clkr,
33002ec94130SStephen Boyd 	[GP2_SRC] = &gp2_src.clkr,
33012ec94130SStephen Boyd 	[GP2_CLK] = &gp2_clk.clkr,
33022ec94130SStephen Boyd 	[PMEM_A_CLK] = &pmem_clk.clkr,
33032ec94130SStephen Boyd 	[PRNG_SRC] = &prng_src.clkr,
33042ec94130SStephen Boyd 	[PRNG_CLK] = &prng_clk.clkr,
33052ec94130SStephen Boyd 	[SDC1_SRC] = &sdc1_src.clkr,
33062ec94130SStephen Boyd 	[SDC1_CLK] = &sdc1_clk.clkr,
33072ec94130SStephen Boyd 	[SDC2_SRC] = &sdc2_src.clkr,
33082ec94130SStephen Boyd 	[SDC2_CLK] = &sdc2_clk.clkr,
33092ec94130SStephen Boyd 	[SDC3_SRC] = &sdc3_src.clkr,
33102ec94130SStephen Boyd 	[SDC3_CLK] = &sdc3_clk.clkr,
33112ec94130SStephen Boyd 	[SDC4_SRC] = &sdc4_src.clkr,
33122ec94130SStephen Boyd 	[SDC4_CLK] = &sdc4_clk.clkr,
33132ec94130SStephen Boyd 	[SDC5_SRC] = &sdc5_src.clkr,
33142ec94130SStephen Boyd 	[SDC5_CLK] = &sdc5_clk.clkr,
33152ec94130SStephen Boyd 	[TSIF_REF_SRC] = &tsif_ref_src.clkr,
33162ec94130SStephen Boyd 	[TSIF_REF_CLK] = &tsif_ref_clk.clkr,
33172ec94130SStephen Boyd 	[USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr,
33182ec94130SStephen Boyd 	[USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr,
33192ec94130SStephen Boyd 	[USB_HSIC_XCVR_FS_SRC] = &usb_hsic_xcvr_fs_src.clkr,
33202ec94130SStephen Boyd 	[USB_HSIC_XCVR_FS_CLK] = &usb_hsic_xcvr_fs_clk.clkr,
33212ec94130SStephen Boyd 	[USB_HSIC_SYSTEM_CLK] = &usb_hsic_system_clk.clkr,
33222ec94130SStephen Boyd 	[USB_HSIC_HSIC_CLK] = &usb_hsic_hsic_clk.clkr,
33232ec94130SStephen Boyd 	[USB_HSIC_HSIO_CAL_CLK] = &usb_hsic_hsio_cal_clk.clkr,
33242ec94130SStephen Boyd 	[USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr,
33252ec94130SStephen Boyd 	[USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr,
33262ec94130SStephen Boyd 	[USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr,
33272ec94130SStephen Boyd 	[USB_FS2_XCVR_FS_SRC] = &usb_fs2_xcvr_fs_src.clkr,
33282ec94130SStephen Boyd 	[USB_FS2_XCVR_FS_CLK] = &usb_fs2_xcvr_fs_clk.clkr,
33292ec94130SStephen Boyd 	[USB_FS2_SYSTEM_CLK] = &usb_fs2_system_clk.clkr,
33302ec94130SStephen Boyd 	[CE1_CORE_CLK] = &ce1_core_clk.clkr,
33312ec94130SStephen Boyd 	[CE1_H_CLK] = &ce1_h_clk.clkr,
33322ec94130SStephen Boyd 	[DMA_BAM_H_CLK] = &dma_bam_h_clk.clkr,
33332ec94130SStephen Boyd 	[GSBI1_H_CLK] = &gsbi1_h_clk.clkr,
33342ec94130SStephen Boyd 	[GSBI2_H_CLK] = &gsbi2_h_clk.clkr,
33352ec94130SStephen Boyd 	[GSBI3_H_CLK] = &gsbi3_h_clk.clkr,
33362ec94130SStephen Boyd 	[GSBI4_H_CLK] = &gsbi4_h_clk.clkr,
33372ec94130SStephen Boyd 	[GSBI5_H_CLK] = &gsbi5_h_clk.clkr,
33382ec94130SStephen Boyd 	[GSBI6_H_CLK] = &gsbi6_h_clk.clkr,
33392ec94130SStephen Boyd 	[GSBI7_H_CLK] = &gsbi7_h_clk.clkr,
33402ec94130SStephen Boyd 	[GSBI8_H_CLK] = &gsbi8_h_clk.clkr,
33412ec94130SStephen Boyd 	[GSBI9_H_CLK] = &gsbi9_h_clk.clkr,
33422ec94130SStephen Boyd 	[GSBI10_H_CLK] = &gsbi10_h_clk.clkr,
33432ec94130SStephen Boyd 	[GSBI11_H_CLK] = &gsbi11_h_clk.clkr,
33442ec94130SStephen Boyd 	[GSBI12_H_CLK] = &gsbi12_h_clk.clkr,
33452ec94130SStephen Boyd 	[TSIF_H_CLK] = &tsif_h_clk.clkr,
33462ec94130SStephen Boyd 	[USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr,
33472ec94130SStephen Boyd 	[USB_FS2_H_CLK] = &usb_fs2_h_clk.clkr,
33482ec94130SStephen Boyd 	[USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr,
33492ec94130SStephen Boyd 	[USB_HSIC_H_CLK] = &usb_hsic_h_clk.clkr,
33502ec94130SStephen Boyd 	[SDC1_H_CLK] = &sdc1_h_clk.clkr,
33512ec94130SStephen Boyd 	[SDC2_H_CLK] = &sdc2_h_clk.clkr,
33522ec94130SStephen Boyd 	[SDC3_H_CLK] = &sdc3_h_clk.clkr,
33532ec94130SStephen Boyd 	[SDC4_H_CLK] = &sdc4_h_clk.clkr,
33542ec94130SStephen Boyd 	[SDC5_H_CLK] = &sdc5_h_clk.clkr,
33552ec94130SStephen Boyd 	[ADM0_CLK] = &adm0_clk.clkr,
33562ec94130SStephen Boyd 	[ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr,
33572ec94130SStephen Boyd 	[PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr,
33582ec94130SStephen Boyd 	[PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr,
33592ec94130SStephen Boyd 	[PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr,
33602ec94130SStephen Boyd 	[RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr,
336172ad7207SStephen Boyd 	[PLL9] = &hfpll0.clkr,
336272ad7207SStephen Boyd 	[PLL10] = &hfpll1.clkr,
336372ad7207SStephen Boyd 	[PLL12] = &hfpll_l2.clkr,
33642ec94130SStephen Boyd };
33652ec94130SStephen Boyd 
33662ec94130SStephen Boyd static const struct qcom_reset_map gcc_msm8960_resets[] = {
33672ec94130SStephen Boyd 	[SFAB_MSS_Q6_SW_RESET] = { 0x2040, 7 },
33682ec94130SStephen Boyd 	[SFAB_MSS_Q6_FW_RESET] = { 0x2044, 7 },
33692ec94130SStephen Boyd 	[QDSS_STM_RESET] = { 0x2060, 6 },
33702ec94130SStephen Boyd 	[AFAB_SMPSS_S_RESET] = { 0x20b8, 2 },
33712ec94130SStephen Boyd 	[AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 },
33722ec94130SStephen Boyd 	[AFAB_SMPSS_M0_RESET] = { 0x20b8 },
33732ec94130SStephen Boyd 	[AFAB_EBI1_CH0_RESET] = { 0x20c0, 7 },
33742ec94130SStephen Boyd 	[AFAB_EBI1_CH1_RESET] = { 0x20c4, 7},
33752ec94130SStephen Boyd 	[SFAB_ADM0_M0_RESET] = { 0x21e0, 7 },
33762ec94130SStephen Boyd 	[SFAB_ADM0_M1_RESET] = { 0x21e4, 7 },
33772ec94130SStephen Boyd 	[SFAB_ADM0_M2_RESET] = { 0x21e8, 7 },
33782ec94130SStephen Boyd 	[ADM0_C2_RESET] = { 0x220c, 4},
33792ec94130SStephen Boyd 	[ADM0_C1_RESET] = { 0x220c, 3},
33802ec94130SStephen Boyd 	[ADM0_C0_RESET] = { 0x220c, 2},
33812ec94130SStephen Boyd 	[ADM0_PBUS_RESET] = { 0x220c, 1 },
33822ec94130SStephen Boyd 	[ADM0_RESET] = { 0x220c },
33832ec94130SStephen Boyd 	[QDSS_CLKS_SW_RESET] = { 0x2260, 5 },
33842ec94130SStephen Boyd 	[QDSS_POR_RESET] = { 0x2260, 4 },
33852ec94130SStephen Boyd 	[QDSS_TSCTR_RESET] = { 0x2260, 3 },
33862ec94130SStephen Boyd 	[QDSS_HRESET_RESET] = { 0x2260, 2 },
33872ec94130SStephen Boyd 	[QDSS_AXI_RESET] = { 0x2260, 1 },
33882ec94130SStephen Boyd 	[QDSS_DBG_RESET] = { 0x2260 },
33892ec94130SStephen Boyd 	[PCIE_A_RESET] = { 0x22c0, 7 },
33902ec94130SStephen Boyd 	[PCIE_AUX_RESET] = { 0x22c8, 7 },
33912ec94130SStephen Boyd 	[PCIE_H_RESET] = { 0x22d0, 7 },
33922ec94130SStephen Boyd 	[SFAB_PCIE_M_RESET] = { 0x22d4, 1 },
33932ec94130SStephen Boyd 	[SFAB_PCIE_S_RESET] = { 0x22d4 },
33942ec94130SStephen Boyd 	[SFAB_MSS_M_RESET] = { 0x2340, 7 },
33952ec94130SStephen Boyd 	[SFAB_USB3_M_RESET] = { 0x2360, 7 },
33962ec94130SStephen Boyd 	[SFAB_RIVA_M_RESET] = { 0x2380, 7 },
33972ec94130SStephen Boyd 	[SFAB_LPASS_RESET] = { 0x23a0, 7 },
33982ec94130SStephen Boyd 	[SFAB_AFAB_M_RESET] = { 0x23e0, 7 },
33992ec94130SStephen Boyd 	[AFAB_SFAB_M0_RESET] = { 0x2420, 7 },
34002ec94130SStephen Boyd 	[AFAB_SFAB_M1_RESET] = { 0x2424, 7 },
34012ec94130SStephen Boyd 	[SFAB_SATA_S_RESET] = { 0x2480, 7 },
34022ec94130SStephen Boyd 	[SFAB_DFAB_M_RESET] = { 0x2500, 7 },
34032ec94130SStephen Boyd 	[DFAB_SFAB_M_RESET] = { 0x2520, 7 },
34042ec94130SStephen Boyd 	[DFAB_SWAY0_RESET] = { 0x2540, 7 },
34052ec94130SStephen Boyd 	[DFAB_SWAY1_RESET] = { 0x2544, 7 },
34062ec94130SStephen Boyd 	[DFAB_ARB0_RESET] = { 0x2560, 7 },
34072ec94130SStephen Boyd 	[DFAB_ARB1_RESET] = { 0x2564, 7 },
34082ec94130SStephen Boyd 	[PPSS_PROC_RESET] = { 0x2594, 1 },
34092ec94130SStephen Boyd 	[PPSS_RESET] = { 0x2594},
34102ec94130SStephen Boyd 	[DMA_BAM_RESET] = { 0x25c0, 7 },
34112c07e3c7SKumar Gala 	[SPS_TIC_H_RESET] = { 0x2600, 7 },
34122ec94130SStephen Boyd 	[SLIMBUS_H_RESET] = { 0x2620, 7 },
34132ec94130SStephen Boyd 	[SFAB_CFPB_M_RESET] = { 0x2680, 7 },
34142ec94130SStephen Boyd 	[SFAB_CFPB_S_RESET] = { 0x26c0, 7 },
34152ec94130SStephen Boyd 	[TSIF_H_RESET] = { 0x2700, 7 },
34162ec94130SStephen Boyd 	[CE1_H_RESET] = { 0x2720, 7 },
34172ec94130SStephen Boyd 	[CE1_CORE_RESET] = { 0x2724, 7 },
34182ec94130SStephen Boyd 	[CE1_SLEEP_RESET] = { 0x2728, 7 },
34192ec94130SStephen Boyd 	[CE2_H_RESET] = { 0x2740, 7 },
34202ec94130SStephen Boyd 	[CE2_CORE_RESET] = { 0x2744, 7 },
34212ec94130SStephen Boyd 	[SFAB_SFPB_M_RESET] = { 0x2780, 7 },
34222ec94130SStephen Boyd 	[SFAB_SFPB_S_RESET] = { 0x27a0, 7 },
34232ec94130SStephen Boyd 	[RPM_PROC_RESET] = { 0x27c0, 7 },
34242c07e3c7SKumar Gala 	[PMIC_SSBI2_RESET] = { 0x280c, 12 },
34252ec94130SStephen Boyd 	[SDC1_RESET] = { 0x2830 },
34262ec94130SStephen Boyd 	[SDC2_RESET] = { 0x2850 },
34272ec94130SStephen Boyd 	[SDC3_RESET] = { 0x2870 },
34282ec94130SStephen Boyd 	[SDC4_RESET] = { 0x2890 },
34292ec94130SStephen Boyd 	[SDC5_RESET] = { 0x28b0 },
34302ec94130SStephen Boyd 	[DFAB_A2_RESET] = { 0x28c0, 7 },
34312ec94130SStephen Boyd 	[USB_HS1_RESET] = { 0x2910 },
34322ec94130SStephen Boyd 	[USB_HSIC_RESET] = { 0x2934 },
34332ec94130SStephen Boyd 	[USB_FS1_XCVR_RESET] = { 0x2974, 1 },
34342ec94130SStephen Boyd 	[USB_FS1_RESET] = { 0x2974 },
34352ec94130SStephen Boyd 	[USB_FS2_XCVR_RESET] = { 0x2994, 1 },
34362ec94130SStephen Boyd 	[USB_FS2_RESET] = { 0x2994 },
34372ec94130SStephen Boyd 	[GSBI1_RESET] = { 0x29dc },
34382ec94130SStephen Boyd 	[GSBI2_RESET] = { 0x29fc },
34392ec94130SStephen Boyd 	[GSBI3_RESET] = { 0x2a1c },
34402ec94130SStephen Boyd 	[GSBI4_RESET] = { 0x2a3c },
34412ec94130SStephen Boyd 	[GSBI5_RESET] = { 0x2a5c },
34422ec94130SStephen Boyd 	[GSBI6_RESET] = { 0x2a7c },
34432ec94130SStephen Boyd 	[GSBI7_RESET] = { 0x2a9c },
34442ec94130SStephen Boyd 	[GSBI8_RESET] = { 0x2abc },
34452ec94130SStephen Boyd 	[GSBI9_RESET] = { 0x2adc },
34462ec94130SStephen Boyd 	[GSBI10_RESET] = { 0x2afc },
34472ec94130SStephen Boyd 	[GSBI11_RESET] = { 0x2b1c },
34482ec94130SStephen Boyd 	[GSBI12_RESET] = { 0x2b3c },
34492ec94130SStephen Boyd 	[SPDM_RESET] = { 0x2b6c },
34502ec94130SStephen Boyd 	[TLMM_H_RESET] = { 0x2ba0, 7 },
34512ec94130SStephen Boyd 	[SFAB_MSS_S_RESET] = { 0x2c00, 7 },
34522ec94130SStephen Boyd 	[MSS_SLP_RESET] = { 0x2c60, 7 },
34532ec94130SStephen Boyd 	[MSS_Q6SW_JTAG_RESET] = { 0x2c68, 7 },
34542ec94130SStephen Boyd 	[MSS_Q6FW_JTAG_RESET] = { 0x2c6c, 7 },
34552ec94130SStephen Boyd 	[MSS_RESET] = { 0x2c64 },
34562ec94130SStephen Boyd 	[SATA_H_RESET] = { 0x2c80, 7 },
34572ec94130SStephen Boyd 	[SATA_RXOOB_RESE] = { 0x2c8c, 7 },
34582ec94130SStephen Boyd 	[SATA_PMALIVE_RESET] = { 0x2c90, 7 },
34592ec94130SStephen Boyd 	[SATA_SFAB_M_RESET] = { 0x2c98, 7 },
34602ec94130SStephen Boyd 	[TSSC_RESET] = { 0x2ca0, 7 },
34612ec94130SStephen Boyd 	[PDM_RESET] = { 0x2cc0, 12 },
34622ec94130SStephen Boyd 	[MPM_H_RESET] = { 0x2da0, 7 },
34632ec94130SStephen Boyd 	[MPM_RESET] = { 0x2da4 },
34642ec94130SStephen Boyd 	[SFAB_SMPSS_S_RESET] = { 0x2e00, 7 },
34652ec94130SStephen Boyd 	[PRNG_RESET] = { 0x2e80, 12 },
34662ec94130SStephen Boyd 	[RIVA_RESET] = { 0x35e0 },
34672ec94130SStephen Boyd };
34682ec94130SStephen Boyd 
34692d85a713SKumar Gala static struct clk_regmap *gcc_apq8064_clks[] = {
34705f775498SStephen Boyd 	[PLL3] = &pll3.clkr,
34714be8fc04SStephen Boyd 	[PLL4_VOTE] = &pll4_vote,
34722d85a713SKumar Gala 	[PLL8] = &pll8.clkr,
34732d85a713SKumar Gala 	[PLL8_VOTE] = &pll8_vote,
34745f775498SStephen Boyd 	[PLL14] = &pll14.clkr,
34755f775498SStephen Boyd 	[PLL14_VOTE] = &pll14_vote,
34765f775498SStephen Boyd 	[GSBI1_UART_SRC] = &gsbi1_uart_src.clkr,
34775f775498SStephen Boyd 	[GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr,
34785f775498SStephen Boyd 	[GSBI2_UART_SRC] = &gsbi2_uart_src.clkr,
34795f775498SStephen Boyd 	[GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr,
34805f775498SStephen Boyd 	[GSBI3_UART_SRC] = &gsbi3_uart_src.clkr,
34815f775498SStephen Boyd 	[GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr,
34825f775498SStephen Boyd 	[GSBI4_UART_SRC] = &gsbi4_uart_src.clkr,
34835f775498SStephen Boyd 	[GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr,
34845f775498SStephen Boyd 	[GSBI5_UART_SRC] = &gsbi5_uart_src.clkr,
34855f775498SStephen Boyd 	[GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr,
34865f775498SStephen Boyd 	[GSBI6_UART_SRC] = &gsbi6_uart_src.clkr,
34875f775498SStephen Boyd 	[GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr,
34882d85a713SKumar Gala 	[GSBI7_UART_SRC] = &gsbi7_uart_src.clkr,
34892d85a713SKumar Gala 	[GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr,
34905f775498SStephen Boyd 	[GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr,
34915f775498SStephen Boyd 	[GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr,
34925f775498SStephen Boyd 	[GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr,
34935f775498SStephen Boyd 	[GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr,
34945f775498SStephen Boyd 	[GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr,
34955f775498SStephen Boyd 	[GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr,
34965f775498SStephen Boyd 	[GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr,
34975f775498SStephen Boyd 	[GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr,
34985f775498SStephen Boyd 	[GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr,
34995f775498SStephen Boyd 	[GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr,
35005f775498SStephen Boyd 	[GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr,
35015f775498SStephen Boyd 	[GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr,
35022d85a713SKumar Gala 	[GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr,
35032d85a713SKumar Gala 	[GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr,
35045f775498SStephen Boyd 	[GP0_SRC] = &gp0_src.clkr,
35055f775498SStephen Boyd 	[GP0_CLK] = &gp0_clk.clkr,
35065f775498SStephen Boyd 	[GP1_SRC] = &gp1_src.clkr,
35075f775498SStephen Boyd 	[GP1_CLK] = &gp1_clk.clkr,
35085f775498SStephen Boyd 	[GP2_SRC] = &gp2_src.clkr,
35095f775498SStephen Boyd 	[GP2_CLK] = &gp2_clk.clkr,
35105f775498SStephen Boyd 	[PMEM_A_CLK] = &pmem_clk.clkr,
35115f775498SStephen Boyd 	[PRNG_SRC] = &prng_src.clkr,
35125f775498SStephen Boyd 	[PRNG_CLK] = &prng_clk.clkr,
35137f9b72aeSSrinivas Kandagatla 	[SDC1_SRC] = &sdc1_src.clkr,
35147f9b72aeSSrinivas Kandagatla 	[SDC1_CLK] = &sdc1_clk.clkr,
35157f9b72aeSSrinivas Kandagatla 	[SDC2_SRC] = &sdc2_src.clkr,
35167f9b72aeSSrinivas Kandagatla 	[SDC2_CLK] = &sdc2_clk.clkr,
35177f9b72aeSSrinivas Kandagatla 	[SDC3_SRC] = &sdc3_src.clkr,
35187f9b72aeSSrinivas Kandagatla 	[SDC3_CLK] = &sdc3_clk.clkr,
35197f9b72aeSSrinivas Kandagatla 	[SDC4_SRC] = &sdc4_src.clkr,
35207f9b72aeSSrinivas Kandagatla 	[SDC4_CLK] = &sdc4_clk.clkr,
35215f775498SStephen Boyd 	[TSIF_REF_SRC] = &tsif_ref_src.clkr,
35225f775498SStephen Boyd 	[TSIF_REF_CLK] = &tsif_ref_clk.clkr,
35235f775498SStephen Boyd 	[USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr,
35245f775498SStephen Boyd 	[USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr,
35255f775498SStephen Boyd 	[USB_HS3_XCVR_SRC] = &usb_hs3_xcvr_src.clkr,
35265f775498SStephen Boyd 	[USB_HS3_XCVR_CLK] = &usb_hs3_xcvr_clk.clkr,
35275f775498SStephen Boyd 	[USB_HS4_XCVR_SRC] = &usb_hs4_xcvr_src.clkr,
35285f775498SStephen Boyd 	[USB_HS4_XCVR_CLK] = &usb_hs4_xcvr_clk.clkr,
35295f775498SStephen Boyd 	[USB_HSIC_XCVR_FS_SRC] = &usb_hsic_xcvr_fs_src.clkr,
35305f775498SStephen Boyd 	[USB_HSIC_XCVR_FS_CLK] = &usb_hsic_xcvr_fs_clk.clkr,
35315f775498SStephen Boyd 	[USB_HSIC_SYSTEM_CLK] = &usb_hsic_system_clk.clkr,
35325f775498SStephen Boyd 	[USB_HSIC_HSIC_CLK] = &usb_hsic_hsic_clk.clkr,
35335f775498SStephen Boyd 	[USB_HSIC_HSIO_CAL_CLK] = &usb_hsic_hsio_cal_clk.clkr,
35345f775498SStephen Boyd 	[USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr,
35355f775498SStephen Boyd 	[USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr,
35365f775498SStephen Boyd 	[USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr,
35375f775498SStephen Boyd 	[SATA_H_CLK] = &sata_h_clk.clkr,
35385f775498SStephen Boyd 	[SATA_CLK_SRC] = &sata_clk_src.clkr,
35395f775498SStephen Boyd 	[SATA_RXOOB_CLK] = &sata_rxoob_clk.clkr,
35405f775498SStephen Boyd 	[SATA_PMALIVE_CLK] = &sata_pmalive_clk.clkr,
35415f775498SStephen Boyd 	[SATA_PHY_REF_CLK] = &sata_phy_ref_clk.clkr,
35425f775498SStephen Boyd 	[SATA_PHY_CFG_CLK] = &sata_phy_cfg_clk.clkr,
35435f775498SStephen Boyd 	[SATA_A_CLK] = &sata_a_clk.clkr,
35445f775498SStephen Boyd 	[SFAB_SATA_S_H_CLK] = &sfab_sata_s_h_clk.clkr,
35455f775498SStephen Boyd 	[CE3_SRC] = &ce3_src.clkr,
35465f775498SStephen Boyd 	[CE3_CORE_CLK] = &ce3_core_clk.clkr,
35475f775498SStephen Boyd 	[CE3_H_CLK] = &ce3_h_clk.clkr,
35485f775498SStephen Boyd 	[DMA_BAM_H_CLK] = &dma_bam_h_clk.clkr,
35495f775498SStephen Boyd 	[GSBI1_H_CLK] = &gsbi1_h_clk.clkr,
35505f775498SStephen Boyd 	[GSBI2_H_CLK] = &gsbi2_h_clk.clkr,
35515f775498SStephen Boyd 	[GSBI3_H_CLK] = &gsbi3_h_clk.clkr,
35525f775498SStephen Boyd 	[GSBI4_H_CLK] = &gsbi4_h_clk.clkr,
35535f775498SStephen Boyd 	[GSBI5_H_CLK] = &gsbi5_h_clk.clkr,
35545f775498SStephen Boyd 	[GSBI6_H_CLK] = &gsbi6_h_clk.clkr,
35555f775498SStephen Boyd 	[GSBI7_H_CLK] = &gsbi7_h_clk.clkr,
35565f775498SStephen Boyd 	[TSIF_H_CLK] = &tsif_h_clk.clkr,
35575f775498SStephen Boyd 	[USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr,
35585f775498SStephen Boyd 	[USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr,
35595f775498SStephen Boyd 	[USB_HSIC_H_CLK] = &usb_hsic_h_clk.clkr,
35605f775498SStephen Boyd 	[USB_HS3_H_CLK] = &usb_hs3_h_clk.clkr,
35615f775498SStephen Boyd 	[USB_HS4_H_CLK] = &usb_hs4_h_clk.clkr,
35627f9b72aeSSrinivas Kandagatla 	[SDC1_H_CLK] = &sdc1_h_clk.clkr,
35637f9b72aeSSrinivas Kandagatla 	[SDC2_H_CLK] = &sdc2_h_clk.clkr,
35647f9b72aeSSrinivas Kandagatla 	[SDC3_H_CLK] = &sdc3_h_clk.clkr,
35657f9b72aeSSrinivas Kandagatla 	[SDC4_H_CLK] = &sdc4_h_clk.clkr,
35665f775498SStephen Boyd 	[ADM0_CLK] = &adm0_clk.clkr,
35675f775498SStephen Boyd 	[ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr,
35685f775498SStephen Boyd 	[PCIE_A_CLK] = &pcie_a_clk.clkr,
35695f775498SStephen Boyd 	[PCIE_PHY_REF_CLK] = &pcie_phy_ref_clk.clkr,
35705f775498SStephen Boyd 	[PCIE_H_CLK] = &pcie_h_clk.clkr,
35715f775498SStephen Boyd 	[PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr,
35725f775498SStephen Boyd 	[PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr,
35735f775498SStephen Boyd 	[PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr,
35745f775498SStephen Boyd 	[RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr,
357572ad7207SStephen Boyd 	[PLL9] = &hfpll0.clkr,
357672ad7207SStephen Boyd 	[PLL10] = &hfpll1.clkr,
357772ad7207SStephen Boyd 	[PLL12] = &hfpll_l2.clkr,
357872ad7207SStephen Boyd 	[PLL16] = &hfpll2.clkr,
357972ad7207SStephen Boyd 	[PLL17] = &hfpll3.clkr,
35805f775498SStephen Boyd };
35815f775498SStephen Boyd 
35825f775498SStephen Boyd static const struct qcom_reset_map gcc_apq8064_resets[] = {
35835f775498SStephen Boyd 	[QDSS_STM_RESET] = { 0x2060, 6 },
35845f775498SStephen Boyd 	[AFAB_SMPSS_S_RESET] = { 0x20b8, 2 },
35855f775498SStephen Boyd 	[AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 },
35865f775498SStephen Boyd 	[AFAB_SMPSS_M0_RESET] = { 0x20b8 },
35875f775498SStephen Boyd 	[AFAB_EBI1_CH0_RESET] = { 0x20c0, 7 },
35885f775498SStephen Boyd 	[AFAB_EBI1_CH1_RESET] = { 0x20c4, 7},
35895f775498SStephen Boyd 	[SFAB_ADM0_M0_RESET] = { 0x21e0, 7 },
35905f775498SStephen Boyd 	[SFAB_ADM0_M1_RESET] = { 0x21e4, 7 },
35915f775498SStephen Boyd 	[SFAB_ADM0_M2_RESET] = { 0x21e8, 7 },
35925f775498SStephen Boyd 	[ADM0_C2_RESET] = { 0x220c, 4},
35935f775498SStephen Boyd 	[ADM0_C1_RESET] = { 0x220c, 3},
35945f775498SStephen Boyd 	[ADM0_C0_RESET] = { 0x220c, 2},
35955f775498SStephen Boyd 	[ADM0_PBUS_RESET] = { 0x220c, 1 },
35965f775498SStephen Boyd 	[ADM0_RESET] = { 0x220c },
35975f775498SStephen Boyd 	[QDSS_CLKS_SW_RESET] = { 0x2260, 5 },
35985f775498SStephen Boyd 	[QDSS_POR_RESET] = { 0x2260, 4 },
35995f775498SStephen Boyd 	[QDSS_TSCTR_RESET] = { 0x2260, 3 },
36005f775498SStephen Boyd 	[QDSS_HRESET_RESET] = { 0x2260, 2 },
36015f775498SStephen Boyd 	[QDSS_AXI_RESET] = { 0x2260, 1 },
36025f775498SStephen Boyd 	[QDSS_DBG_RESET] = { 0x2260 },
36035f775498SStephen Boyd 	[SFAB_PCIE_M_RESET] = { 0x22d8, 1 },
36045f775498SStephen Boyd 	[SFAB_PCIE_S_RESET] = { 0x22d8 },
36055f775498SStephen Boyd 	[PCIE_EXT_PCI_RESET] = { 0x22dc, 6 },
36065f775498SStephen Boyd 	[PCIE_PHY_RESET] = { 0x22dc, 5 },
36075f775498SStephen Boyd 	[PCIE_PCI_RESET] = { 0x22dc, 4 },
36085f775498SStephen Boyd 	[PCIE_POR_RESET] = { 0x22dc, 3 },
36095f775498SStephen Boyd 	[PCIE_HCLK_RESET] = { 0x22dc, 2 },
36105f775498SStephen Boyd 	[PCIE_ACLK_RESET] = { 0x22dc },
36115f775498SStephen Boyd 	[SFAB_USB3_M_RESET] = { 0x2360, 7 },
36125f775498SStephen Boyd 	[SFAB_RIVA_M_RESET] = { 0x2380, 7 },
36135f775498SStephen Boyd 	[SFAB_LPASS_RESET] = { 0x23a0, 7 },
36145f775498SStephen Boyd 	[SFAB_AFAB_M_RESET] = { 0x23e0, 7 },
36155f775498SStephen Boyd 	[AFAB_SFAB_M0_RESET] = { 0x2420, 7 },
36165f775498SStephen Boyd 	[AFAB_SFAB_M1_RESET] = { 0x2424, 7 },
36175f775498SStephen Boyd 	[SFAB_SATA_S_RESET] = { 0x2480, 7 },
36185f775498SStephen Boyd 	[SFAB_DFAB_M_RESET] = { 0x2500, 7 },
36195f775498SStephen Boyd 	[DFAB_SFAB_M_RESET] = { 0x2520, 7 },
36205f775498SStephen Boyd 	[DFAB_SWAY0_RESET] = { 0x2540, 7 },
36215f775498SStephen Boyd 	[DFAB_SWAY1_RESET] = { 0x2544, 7 },
36225f775498SStephen Boyd 	[DFAB_ARB0_RESET] = { 0x2560, 7 },
36235f775498SStephen Boyd 	[DFAB_ARB1_RESET] = { 0x2564, 7 },
36245f775498SStephen Boyd 	[PPSS_PROC_RESET] = { 0x2594, 1 },
36255f775498SStephen Boyd 	[PPSS_RESET] = { 0x2594},
36265f775498SStephen Boyd 	[DMA_BAM_RESET] = { 0x25c0, 7 },
36275f775498SStephen Boyd 	[SPS_TIC_H_RESET] = { 0x2600, 7 },
36285f775498SStephen Boyd 	[SFAB_CFPB_M_RESET] = { 0x2680, 7 },
36295f775498SStephen Boyd 	[SFAB_CFPB_S_RESET] = { 0x26c0, 7 },
36305f775498SStephen Boyd 	[TSIF_H_RESET] = { 0x2700, 7 },
36315f775498SStephen Boyd 	[CE1_H_RESET] = { 0x2720, 7 },
36325f775498SStephen Boyd 	[CE1_CORE_RESET] = { 0x2724, 7 },
36335f775498SStephen Boyd 	[CE1_SLEEP_RESET] = { 0x2728, 7 },
36345f775498SStephen Boyd 	[CE2_H_RESET] = { 0x2740, 7 },
36355f775498SStephen Boyd 	[CE2_CORE_RESET] = { 0x2744, 7 },
36365f775498SStephen Boyd 	[SFAB_SFPB_M_RESET] = { 0x2780, 7 },
36375f775498SStephen Boyd 	[SFAB_SFPB_S_RESET] = { 0x27a0, 7 },
36385f775498SStephen Boyd 	[RPM_PROC_RESET] = { 0x27c0, 7 },
36395f775498SStephen Boyd 	[PMIC_SSBI2_RESET] = { 0x280c, 12 },
36405f775498SStephen Boyd 	[SDC1_RESET] = { 0x2830 },
36415f775498SStephen Boyd 	[SDC2_RESET] = { 0x2850 },
36425f775498SStephen Boyd 	[SDC3_RESET] = { 0x2870 },
36435f775498SStephen Boyd 	[SDC4_RESET] = { 0x2890 },
36445f775498SStephen Boyd 	[USB_HS1_RESET] = { 0x2910 },
36455f775498SStephen Boyd 	[USB_HSIC_RESET] = { 0x2934 },
36465f775498SStephen Boyd 	[USB_FS1_XCVR_RESET] = { 0x2974, 1 },
36475f775498SStephen Boyd 	[USB_FS1_RESET] = { 0x2974 },
36485f775498SStephen Boyd 	[GSBI1_RESET] = { 0x29dc },
36495f775498SStephen Boyd 	[GSBI2_RESET] = { 0x29fc },
36505f775498SStephen Boyd 	[GSBI3_RESET] = { 0x2a1c },
36515f775498SStephen Boyd 	[GSBI4_RESET] = { 0x2a3c },
36525f775498SStephen Boyd 	[GSBI5_RESET] = { 0x2a5c },
36535f775498SStephen Boyd 	[GSBI6_RESET] = { 0x2a7c },
36545f775498SStephen Boyd 	[GSBI7_RESET] = { 0x2a9c },
36555f775498SStephen Boyd 	[SPDM_RESET] = { 0x2b6c },
36565f775498SStephen Boyd 	[TLMM_H_RESET] = { 0x2ba0, 7 },
36575f775498SStephen Boyd 	[SATA_SFAB_M_RESET] = { 0x2c18 },
36585f775498SStephen Boyd 	[SATA_RESET] = { 0x2c1c },
36595f775498SStephen Boyd 	[GSS_SLP_RESET] = { 0x2c60, 7 },
36605f775498SStephen Boyd 	[GSS_RESET] = { 0x2c64 },
36615f775498SStephen Boyd 	[TSSC_RESET] = { 0x2ca0, 7 },
36625f775498SStephen Boyd 	[PDM_RESET] = { 0x2cc0, 12 },
36635f775498SStephen Boyd 	[MPM_H_RESET] = { 0x2da0, 7 },
36645f775498SStephen Boyd 	[MPM_RESET] = { 0x2da4 },
36655f775498SStephen Boyd 	[SFAB_SMPSS_S_RESET] = { 0x2e00, 7 },
36665f775498SStephen Boyd 	[PRNG_RESET] = { 0x2e80, 12 },
36675f775498SStephen Boyd 	[RIVA_RESET] = { 0x35e0 },
36685f775498SStephen Boyd 	[CE3_H_RESET] = { 0x36c4, 7 },
36695f775498SStephen Boyd 	[SFAB_CE3_M_RESET] = { 0x36c8, 1 },
36705f775498SStephen Boyd 	[SFAB_CE3_S_RESET] = { 0x36c8 },
36715f775498SStephen Boyd 	[CE3_RESET] = { 0x36cc, 7 },
36725f775498SStephen Boyd 	[CE3_SLEEP_RESET] = { 0x36d0, 7 },
36735f775498SStephen Boyd 	[USB_HS3_RESET] = { 0x3710 },
36745f775498SStephen Boyd 	[USB_HS4_RESET] = { 0x3730 },
36752d85a713SKumar Gala };
36762d85a713SKumar Gala 
36772ec94130SStephen Boyd static const struct regmap_config gcc_msm8960_regmap_config = {
36782ec94130SStephen Boyd 	.reg_bits	= 32,
36792ec94130SStephen Boyd 	.reg_stride	= 4,
36802ec94130SStephen Boyd 	.val_bits	= 32,
36812ec94130SStephen Boyd 	.max_register	= 0x3660,
36822ec94130SStephen Boyd 	.fast_io	= true,
36832ec94130SStephen Boyd };
36842ec94130SStephen Boyd 
36855f775498SStephen Boyd static const struct regmap_config gcc_apq8064_regmap_config = {
36865f775498SStephen Boyd 	.reg_bits	= 32,
36875f775498SStephen Boyd 	.reg_stride	= 4,
36885f775498SStephen Boyd 	.val_bits	= 32,
36895f775498SStephen Boyd 	.max_register	= 0x3880,
36905f775498SStephen Boyd 	.fast_io	= true,
36915f775498SStephen Boyd };
36925f775498SStephen Boyd 
369349fc825fSStephen Boyd static const struct qcom_cc_desc gcc_msm8960_desc = {
369449fc825fSStephen Boyd 	.config = &gcc_msm8960_regmap_config,
369549fc825fSStephen Boyd 	.clks = gcc_msm8960_clks,
369649fc825fSStephen Boyd 	.num_clks = ARRAY_SIZE(gcc_msm8960_clks),
369749fc825fSStephen Boyd 	.resets = gcc_msm8960_resets,
369849fc825fSStephen Boyd 	.num_resets = ARRAY_SIZE(gcc_msm8960_resets),
369949fc825fSStephen Boyd };
370049fc825fSStephen Boyd 
37012d85a713SKumar Gala static const struct qcom_cc_desc gcc_apq8064_desc = {
37025f775498SStephen Boyd 	.config = &gcc_apq8064_regmap_config,
37032d85a713SKumar Gala 	.clks = gcc_apq8064_clks,
37042d85a713SKumar Gala 	.num_clks = ARRAY_SIZE(gcc_apq8064_clks),
37055f775498SStephen Boyd 	.resets = gcc_apq8064_resets,
37065f775498SStephen Boyd 	.num_resets = ARRAY_SIZE(gcc_apq8064_resets),
37072d85a713SKumar Gala };
37082d85a713SKumar Gala 
37092ec94130SStephen Boyd static const struct of_device_id gcc_msm8960_match_table[] = {
37102d85a713SKumar Gala 	{ .compatible = "qcom,gcc-msm8960", .data = &gcc_msm8960_desc },
37112d85a713SKumar Gala 	{ .compatible = "qcom,gcc-apq8064", .data = &gcc_apq8064_desc },
37122ec94130SStephen Boyd 	{ }
37132ec94130SStephen Boyd };
37142ec94130SStephen Boyd MODULE_DEVICE_TABLE(of, gcc_msm8960_match_table);
37152ec94130SStephen Boyd 
gcc_msm8960_probe(struct platform_device * pdev)37162ec94130SStephen Boyd static int gcc_msm8960_probe(struct platform_device *pdev)
37172ec94130SStephen Boyd {
371849fc825fSStephen Boyd 	struct device *dev = &pdev->dev;
37192d85a713SKumar Gala 	const struct of_device_id *match;
372053c929c9SRajendra Nayak 	struct platform_device *tsens;
372153c929c9SRajendra Nayak 	int ret;
37222d85a713SKumar Gala 
37232d85a713SKumar Gala 	match = of_match_device(gcc_msm8960_match_table, &pdev->dev);
37242d85a713SKumar Gala 	if (!match)
37252d85a713SKumar Gala 		return -EINVAL;
37262ec94130SStephen Boyd 
3727a085f877SStephen Boyd 	ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 19200000);
3728a085f877SStephen Boyd 	if (ret)
3729a085f877SStephen Boyd 		return ret;
37302ec94130SStephen Boyd 
3731a085f877SStephen Boyd 	ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 27000000);
3732a085f877SStephen Boyd 	if (ret)
3733a085f877SStephen Boyd 		return ret;
37342ec94130SStephen Boyd 
373553c929c9SRajendra Nayak 	ret = qcom_cc_probe(pdev, match->data);
373653c929c9SRajendra Nayak 	if (ret)
373753c929c9SRajendra Nayak 		return ret;
373853c929c9SRajendra Nayak 
373972ad7207SStephen Boyd 	if (match->data == &gcc_apq8064_desc) {
374072ad7207SStephen Boyd 		hfpll1.d = &hfpll1_8064_data;
374172ad7207SStephen Boyd 		hfpll_l2.d = &hfpll_l2_8064_data;
374272ad7207SStephen Boyd 	}
374372ad7207SStephen Boyd 
374493b793d8SDmitry Baryshkov 	if (of_get_available_child_count(pdev->dev.of_node) != 0)
374593b793d8SDmitry Baryshkov 		return devm_of_platform_populate(&pdev->dev);
374693b793d8SDmitry Baryshkov 
374753c929c9SRajendra Nayak 	tsens = platform_device_register_data(&pdev->dev, "qcom-tsens", -1,
374853c929c9SRajendra Nayak 					      NULL, 0);
374953c929c9SRajendra Nayak 	if (IS_ERR(tsens))
375053c929c9SRajendra Nayak 		return PTR_ERR(tsens);
375153c929c9SRajendra Nayak 
375253c929c9SRajendra Nayak 	platform_set_drvdata(pdev, tsens);
375353c929c9SRajendra Nayak 
375453c929c9SRajendra Nayak 	return 0;
37552ec94130SStephen Boyd }
37562ec94130SStephen Boyd 
gcc_msm8960_remove(struct platform_device * pdev)3757*c4dc24daSUwe Kleine-König static void gcc_msm8960_remove(struct platform_device *pdev)
37582ec94130SStephen Boyd {
375953c929c9SRajendra Nayak 	struct platform_device *tsens = platform_get_drvdata(pdev);
376053c929c9SRajendra Nayak 
376193b793d8SDmitry Baryshkov 	if (tsens)
376253c929c9SRajendra Nayak 		platform_device_unregister(tsens);
37632ec94130SStephen Boyd }
37642ec94130SStephen Boyd 
37652ec94130SStephen Boyd static struct platform_driver gcc_msm8960_driver = {
37662ec94130SStephen Boyd 	.probe		= gcc_msm8960_probe,
3767*c4dc24daSUwe Kleine-König 	.remove_new	= gcc_msm8960_remove,
37682ec94130SStephen Boyd 	.driver		= {
37692ec94130SStephen Boyd 		.name	= "gcc-msm8960",
37702ec94130SStephen Boyd 		.of_match_table = gcc_msm8960_match_table,
37712ec94130SStephen Boyd 	},
37722ec94130SStephen Boyd };
37732ec94130SStephen Boyd 
gcc_msm8960_init(void)37742ec94130SStephen Boyd static int __init gcc_msm8960_init(void)
37752ec94130SStephen Boyd {
37762ec94130SStephen Boyd 	return platform_driver_register(&gcc_msm8960_driver);
37772ec94130SStephen Boyd }
37782ec94130SStephen Boyd core_initcall(gcc_msm8960_init);
37792ec94130SStephen Boyd 
gcc_msm8960_exit(void)37802ec94130SStephen Boyd static void __exit gcc_msm8960_exit(void)
37812ec94130SStephen Boyd {
37822ec94130SStephen Boyd 	platform_driver_unregister(&gcc_msm8960_driver);
37832ec94130SStephen Boyd }
37842ec94130SStephen Boyd module_exit(gcc_msm8960_exit);
37852ec94130SStephen Boyd 
37862ec94130SStephen Boyd MODULE_DESCRIPTION("QCOM GCC MSM8960 Driver");
37872ec94130SStephen Boyd MODULE_LICENSE("GPL v2");
37882ec94130SStephen Boyd MODULE_ALIAS("platform:gcc-msm8960");
3789