brintos

brintos / linux-shallow public Read only

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