brintos

brintos / linux-shallow public Read only

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