brintos

brintos / linux-shallow public Read only

0
0
Text · 104.3 KiB · 7431c9a Raw
4136 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Copyright 2020 Linaro Limited4 */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/clk-provider.h>13#include <linux/regmap.h>14#include <linux/reset-controller.h>15 16#include <dt-bindings/clock/qcom,gcc-msm8939.h>17#include <dt-bindings/reset/qcom,gcc-msm8939.h>18 19#include "common.h"20#include "clk-regmap.h"21#include "clk-pll.h"22#include "clk-rcg.h"23#include "clk-branch.h"24#include "reset.h"25#include "gdsc.h"26 27enum {28	P_XO,29	P_GPLL0,30	P_GPLL0_AUX,31	P_BIMC,32	P_GPLL1,33	P_GPLL1_AUX,34	P_GPLL2,35	P_GPLL2_AUX,36	P_GPLL3,37	P_GPLL3_AUX,38	P_GPLL4,39	P_GPLL5,40	P_GPLL5_AUX,41	P_GPLL5_EARLY,42	P_GPLL6,43	P_GPLL6_AUX,44	P_SLEEP_CLK,45	P_DSI0_PHYPLL_BYTE,46	P_DSI0_PHYPLL_DSI,47	P_EXT_PRI_I2S,48	P_EXT_SEC_I2S,49	P_EXT_MCLK,50};51 52static struct clk_pll gpll0 = {53	.l_reg = 0x21004,54	.m_reg = 0x21008,55	.n_reg = 0x2100c,56	.config_reg = 0x21010,57	.mode_reg = 0x21000,58	.status_reg = 0x2101c,59	.status_bit = 17,60	.clkr.hw.init = &(struct clk_init_data){61		.name = "gpll0",62		.parent_data = &(const struct clk_parent_data) {63			.fw_name = "xo",64		},65		.num_parents = 1,66		.ops = &clk_pll_ops,67	},68};69 70static struct clk_regmap gpll0_vote = {71	.enable_reg = 0x45000,72	.enable_mask = BIT(0),73	.hw.init = &(struct clk_init_data){74		.name = "gpll0_vote",75		.parent_hws = (const struct clk_hw*[]) {76			&gpll0.clkr.hw,77		},78		.num_parents = 1,79		.ops = &clk_pll_vote_ops,80	},81};82 83static struct clk_pll gpll1 = {84	.l_reg = 0x20004,85	.m_reg = 0x20008,86	.n_reg = 0x2000c,87	.config_reg = 0x20010,88	.mode_reg = 0x20000,89	.status_reg = 0x2001c,90	.status_bit = 17,91	.clkr.hw.init = &(struct clk_init_data){92		.name = "gpll1",93		.parent_data = &(const struct clk_parent_data) {94			.fw_name = "xo",95		},96		.num_parents = 1,97		.ops = &clk_pll_ops,98	},99};100 101static struct clk_regmap gpll1_vote = {102	.enable_reg = 0x45000,103	.enable_mask = BIT(1),104	.hw.init = &(struct clk_init_data){105		.name = "gpll1_vote",106		.parent_hws = (const struct clk_hw*[]) {107			&gpll1.clkr.hw,108		},109		.num_parents = 1,110		.ops = &clk_pll_vote_ops,111	},112};113 114static struct clk_pll gpll2 = {115	.l_reg = 0x4a004,116	.m_reg = 0x4a008,117	.n_reg = 0x4a00c,118	.config_reg = 0x4a010,119	.mode_reg = 0x4a000,120	.status_reg = 0x4a01c,121	.status_bit = 17,122	.clkr.hw.init = &(struct clk_init_data){123		.name = "gpll2",124		.parent_data = &(const struct clk_parent_data) {125			.fw_name = "xo",126		},127		.num_parents = 1,128		.ops = &clk_pll_ops,129	},130};131 132static struct clk_regmap gpll2_vote = {133	.enable_reg = 0x45000,134	.enable_mask = BIT(2),135	.hw.init = &(struct clk_init_data){136		.name = "gpll2_vote",137		.parent_hws = (const struct clk_hw*[]) {138			&gpll2.clkr.hw,139		},140		.num_parents = 1,141		.ops = &clk_pll_vote_ops,142	},143};144 145static struct clk_pll bimc_pll = {146	.l_reg = 0x23004,147	.m_reg = 0x23008,148	.n_reg = 0x2300c,149	.config_reg = 0x23010,150	.mode_reg = 0x23000,151	.status_reg = 0x2301c,152	.status_bit = 17,153	.clkr.hw.init = &(struct clk_init_data){154		.name = "bimc_pll",155		.parent_data = &(const struct clk_parent_data) {156			.fw_name = "xo",157		},158		.num_parents = 1,159		.ops = &clk_pll_ops,160	},161};162 163static struct clk_regmap bimc_pll_vote = {164	.enable_reg = 0x45000,165	.enable_mask = BIT(3),166	.hw.init = &(struct clk_init_data){167		.name = "bimc_pll_vote",168		.parent_hws = (const struct clk_hw*[]) {169			&bimc_pll.clkr.hw,170		},171		.num_parents = 1,172		.ops = &clk_pll_vote_ops,173	},174};175 176static struct clk_pll gpll3 = {177	.l_reg = 0x22004,178	.m_reg = 0x22008,179	.n_reg = 0x2200c,180	.config_reg = 0x22010,181	.mode_reg = 0x22000,182	.status_reg = 0x2201c,183	.status_bit = 17,184	.clkr.hw.init = &(struct clk_init_data){185		.name = "gpll3",186		.parent_data = &(const struct clk_parent_data) {187			.fw_name = "xo",188		},189		.num_parents = 1,190		.ops = &clk_pll_ops,191	},192};193 194static struct clk_regmap gpll3_vote = {195	.enable_reg = 0x45000,196	.enable_mask = BIT(4),197	.hw.init = &(struct clk_init_data){198		.name = "gpll3_vote",199		.parent_hws = (const struct clk_hw*[]) {200			&gpll3.clkr.hw,201		},202		.num_parents = 1,203		.ops = &clk_pll_vote_ops,204	},205};206 207/* GPLL3 at 1100 MHz, main output enabled. */208static const struct pll_config gpll3_config = {209	.l = 57,210	.m = 7,211	.n = 24,212	.vco_val = 0x0,213	.vco_mask = BIT(20),214	.pre_div_val = 0x0,215	.pre_div_mask = BIT(12),216	.post_div_val = 0x0,217	.post_div_mask = BIT(9) | BIT(8),218	.mn_ena_mask = BIT(24),219	.main_output_mask = BIT(0),220	.aux_output_mask = BIT(1),221};222 223static struct clk_pll gpll4 = {224	.l_reg = 0x24004,225	.m_reg = 0x24008,226	.n_reg = 0x2400c,227	.config_reg = 0x24010,228	.mode_reg = 0x24000,229	.status_reg = 0x2401c,230	.status_bit = 17,231	.clkr.hw.init = &(struct clk_init_data){232		.name = "gpll4",233		.parent_data = &(const struct clk_parent_data) {234			.fw_name = "xo",235		},236		.num_parents = 1,237		.ops = &clk_pll_ops,238	},239};240 241static struct clk_regmap gpll4_vote = {242	.enable_reg = 0x45000,243	.enable_mask = BIT(5),244	.hw.init = &(struct clk_init_data){245		.name = "gpll4_vote",246		.parent_hws = (const struct clk_hw*[]) {247			&gpll4.clkr.hw,248		},249		.num_parents = 1,250		.ops = &clk_pll_vote_ops,251	},252};253 254/* GPLL4 at 1200 MHz, main output enabled. */255static struct pll_config gpll4_config = {256	.l = 62,257	.m = 1,258	.n = 2,259	.vco_val = 0x0,260	.vco_mask = BIT(20),261	.pre_div_val = 0x0,262	.pre_div_mask = BIT(12),263	.post_div_val = 0x0,264	.post_div_mask = BIT(9) | BIT(8),265	.mn_ena_mask = BIT(24),266	.main_output_mask = BIT(0),267};268 269static struct clk_pll gpll5 = {270	.l_reg = 0x25004,271	.m_reg = 0x25008,272	.n_reg = 0x2500c,273	.config_reg = 0x25010,274	.mode_reg = 0x25000,275	.status_reg = 0x2501c,276	.status_bit = 17,277	.clkr.hw.init = &(struct clk_init_data){278		.name = "gpll5",279		.parent_data = &(const struct clk_parent_data) {280			.fw_name = "xo",281		},282		.num_parents = 1,283		.ops = &clk_pll_ops,284	},285};286 287static struct clk_regmap gpll5_vote = {288	.enable_reg = 0x45000,289	.enable_mask = BIT(6),290	.hw.init = &(struct clk_init_data){291		.name = "gpll5_vote",292		.parent_hws = (const struct clk_hw*[]) {293			&gpll5.clkr.hw,294		},295		.num_parents = 1,296		.ops = &clk_pll_vote_ops,297	},298};299 300static struct clk_pll gpll6 = {301	.l_reg = 0x37004,302	.m_reg = 0x37008,303	.n_reg = 0x3700c,304	.config_reg = 0x37010,305	.mode_reg = 0x37000,306	.status_reg = 0x3701c,307	.status_bit = 17,308	.clkr.hw.init = &(struct clk_init_data){309		.name = "gpll6",310		.parent_data = &(const struct clk_parent_data) {311			.fw_name = "xo",312		},313		.num_parents = 1,314		.ops = &clk_pll_ops,315	},316};317 318static struct clk_regmap gpll6_vote = {319	.enable_reg = 0x45000,320	.enable_mask = BIT(7),321	.hw.init = &(struct clk_init_data){322		.name = "gpll6_vote",323		.parent_hws = (const struct clk_hw*[]) {324			&gpll6.clkr.hw,325		},326		.num_parents = 1,327		.ops = &clk_pll_vote_ops,328	},329};330 331static const struct parent_map gcc_xo_gpll0_map[] = {332	{ P_XO, 0 },333	{ P_GPLL0, 1 },334};335 336static const struct clk_parent_data gcc_xo_gpll0_parent_data[] = {337	{ .fw_name = "xo" },338	{ .hw = &gpll0_vote.hw },339};340 341static const struct parent_map gcc_xo_gpll0_bimc_map[] = {342	{ P_XO, 0 },343	{ P_GPLL0, 1 },344	{ P_BIMC, 2 },345};346 347static const struct clk_parent_data gcc_xo_gpll0_bimc_parent_data[] = {348	{ .fw_name = "xo" },349	{ .hw = &gpll0_vote.hw },350	{ .hw = &bimc_pll_vote.hw },351};352 353static const struct parent_map gcc_xo_gpll0_gpll6a_map[] = {354	{ P_XO, 0 },355	{ P_GPLL0, 1 },356	{ P_GPLL6_AUX, 2 },357};358 359static const struct clk_parent_data gcc_xo_gpll0_gpll6a_parent_data[] = {360	{ .fw_name = "xo" },361	{ .hw = &gpll0_vote.hw },362	{ .hw = &gpll6_vote.hw },363};364 365static const struct parent_map gcc_xo_gpll0_gpll2a_gpll3_gpll6a_map[] = {366	{ P_XO, 0 },367	{ P_GPLL0, 1 },368	{ P_GPLL2_AUX, 4 },369	{ P_GPLL3, 2 },370	{ P_GPLL6_AUX, 3 },371};372 373static const struct clk_parent_data gcc_xo_gpll0_gpll2a_gpll3_gpll6a_parent_data[] = {374	{ .fw_name = "xo" },375	{ .hw = &gpll0_vote.hw },376	{ .hw = &gpll2_vote.hw },377	{ .hw = &gpll3_vote.hw },378	{ .hw = &gpll6_vote.hw },379};380 381static const struct parent_map gcc_xo_gpll0_gpll2_map[] = {382	{ P_XO, 0 },383	{ P_GPLL0, 1 },384	{ P_GPLL2, 2 },385};386 387static const struct clk_parent_data gcc_xo_gpll0_gpll2_parent_data[] = {388	{ .fw_name = "xo" },389	{ .hw = &gpll0_vote.hw },390	{ .hw = &gpll2_vote.hw },391};392 393static const struct parent_map gcc_xo_gpll0_gpll2_gpll4_map[] = {394	{ P_XO, 0 },395	{ P_GPLL0, 1 },396	{ P_GPLL2, 3 },397	{ P_GPLL4, 2 },398};399 400static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll4_parent_data[] = {401	{ .fw_name = "xo" },402	{ .hw = &gpll0_vote.hw },403	{ .hw = &gpll2_vote.hw },404	{ .hw = &gpll4_vote.hw },405};406 407static const struct parent_map gcc_xo_gpll0a_map[] = {408	{ P_XO, 0 },409	{ P_GPLL0_AUX, 2 },410};411 412static const struct clk_parent_data gcc_xo_gpll0a_parent_data[] = {413	{ .fw_name = "xo" },414	{ .hw = &gpll0_vote.hw },415};416 417static const struct parent_map gcc_xo_gpll0_gpll1a_sleep_map[] = {418	{ P_XO, 0 },419	{ P_GPLL0, 1 },420	{ P_GPLL1_AUX, 2 },421	{ P_SLEEP_CLK, 6 },422};423 424static const struct clk_parent_data gcc_xo_gpll0_gpll1a_sleep_parent_data[] = {425	{ .fw_name = "xo" },426	{ .hw = &gpll0_vote.hw },427	{ .hw = &gpll1_vote.hw },428	{ .fw_name = "sleep_clk", .name = "sleep_clk" },429};430 431static const struct parent_map gcc_xo_gpll0_gpll1a_gpll6_sleep_map[] = {432	{ P_XO, 0 },433	{ P_GPLL0, 1 },434	{ P_GPLL1_AUX, 2 },435	{ P_GPLL6, 2 },436	{ P_SLEEP_CLK, 6 },437};438 439static const struct clk_parent_data gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data[] = {440	{ .fw_name = "xo" },441	{ .hw = &gpll0_vote.hw },442	{ .hw = &gpll1_vote.hw },443	{ .hw = &gpll6_vote.hw },444	{ .fw_name = "sleep_clk", .name = "sleep_clk" },445};446 447static const struct parent_map gcc_xo_gpll0_gpll1a_map[] = {448	{ P_XO, 0 },449	{ P_GPLL0, 1 },450	{ P_GPLL1_AUX, 2 },451};452 453static const struct clk_parent_data gcc_xo_gpll0_gpll1a_parent_data[] = {454	{ .fw_name = "xo" },455	{ .hw = &gpll0_vote.hw },456	{ .hw = &gpll1_vote.hw },457};458 459static const struct parent_map gcc_xo_dsibyte_map[] = {460	{ P_XO, 0, },461	{ P_DSI0_PHYPLL_BYTE, 2 },462};463 464static const struct clk_parent_data gcc_xo_dsibyte_parent_data[] = {465	{ .fw_name = "xo" },466	{ .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" },467};468 469static const struct parent_map gcc_xo_gpll0a_dsibyte_map[] = {470	{ P_XO, 0 },471	{ P_GPLL0_AUX, 2 },472	{ P_DSI0_PHYPLL_BYTE, 1 },473};474 475static const struct clk_parent_data gcc_xo_gpll0a_dsibyte_parent_data[] = {476	{ .fw_name = "xo" },477	{ .hw = &gpll0_vote.hw },478	{ .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" },479};480 481static const struct parent_map gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_map[] = {482	{ P_XO, 0 },483	{ P_GPLL1, 1 },484	{ P_DSI0_PHYPLL_DSI, 2 },485	{ P_GPLL6, 3 },486	{ P_GPLL3_AUX, 4 },487	{ P_GPLL0_AUX, 5 },488};489 490static const struct clk_parent_data gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_parent_data[] = {491	{ .fw_name = "xo" },492	{ .hw = &gpll1_vote.hw },493	{ .fw_name = "dsi0pll", .name = "dsi0pll" },494	{ .hw = &gpll6_vote.hw },495	{ .hw = &gpll3_vote.hw },496	{ .hw = &gpll0_vote.hw },497};498 499static const struct parent_map gcc_xo_gpll0a_dsiphy_map[] = {500	{ P_XO, 0 },501	{ P_GPLL0_AUX, 2 },502	{ P_DSI0_PHYPLL_DSI, 1 },503};504 505static const struct clk_parent_data gcc_xo_gpll0a_dsiphy_parent_data[] = {506	{ .fw_name = "xo" },507	{ .hw = &gpll0_vote.hw },508	{ .fw_name = "dsi0pll", .name = "dsi0pll" },509};510 511static const struct parent_map gcc_xo_gpll0_gpll5a_gpll6_bimc_map[] = {512	{ P_XO, 0 },513	{ P_GPLL0, 1 },514	{ P_GPLL5_AUX, 3 },515	{ P_GPLL6, 2 },516	{ P_BIMC, 4 },517};518 519static const struct clk_parent_data gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data[] = {520	{ .fw_name = "xo" },521	{ .hw = &gpll0_vote.hw },522	{ .hw = &gpll5_vote.hw },523	{ .hw = &gpll6_vote.hw },524	{ .hw = &bimc_pll_vote.hw },525};526 527static const struct parent_map gcc_xo_gpll0_gpll1_sleep_map[] = {528	{ P_XO, 0 },529	{ P_GPLL0, 1 },530	{ P_GPLL1, 2 },531	{ P_SLEEP_CLK, 6 }532};533 534static const struct clk_parent_data gcc_xo_gpll0_gpll1_sleep_parent_data[] = {535	{ .fw_name = "xo" },536	{ .hw = &gpll0_vote.hw },537	{ .hw = &gpll1_vote.hw },538	{ .fw_name = "sleep_clk", .name = "sleep_clk" },539};540 541static const struct parent_map gcc_xo_gpll1_epi2s_emclk_sleep_map[] = {542	{ P_XO, 0 },543	{ P_GPLL1, 1 },544	{ P_EXT_PRI_I2S, 2 },545	{ P_EXT_MCLK, 3 },546	{ P_SLEEP_CLK, 6 }547};548 549static const struct clk_parent_data gcc_xo_gpll1_epi2s_emclk_sleep_parent_data[] = {550	{ .fw_name = "xo" },551	{ .hw = &gpll0_vote.hw },552	{ .fw_name = "ext_pri_i2s", .name = "ext_pri_i2s" },553	{ .fw_name = "ext_mclk", .name = "ext_mclk" },554	{ .fw_name = "sleep_clk", .name = "sleep_clk" },555};556 557static const struct parent_map gcc_xo_gpll1_esi2s_emclk_sleep_map[] = {558	{ P_XO, 0 },559	{ P_GPLL1, 1 },560	{ P_EXT_SEC_I2S, 2 },561	{ P_EXT_MCLK, 3 },562	{ P_SLEEP_CLK, 6 }563};564 565static const struct clk_parent_data gcc_xo_gpll1_esi2s_emclk_sleep_parent_data[] = {566	{ .fw_name = "xo" },567	{ .hw = &gpll1_vote.hw },568	{ .fw_name = "ext_sec_i2s", .name = "ext_sec_i2s" },569	{ .fw_name = "ext_mclk", .name = "ext_mclk" },570	{ .fw_name = "sleep_clk", .name = "sleep_clk" },571};572 573static const struct parent_map gcc_xo_sleep_map[] = {574	{ P_XO, 0 },575	{ P_SLEEP_CLK, 6 }576};577 578static const struct clk_parent_data gcc_xo_sleep_parent_data[] = {579	{ .fw_name = "xo" },580	{ .fw_name = "sleep_clk", .name = "sleep_clk" },581};582 583static const struct parent_map gcc_xo_gpll1_emclk_sleep_map[] = {584	{ P_XO, 0 },585	{ P_GPLL1, 1 },586	{ P_EXT_MCLK, 2 },587	{ P_SLEEP_CLK, 6 }588};589 590static const struct clk_parent_data gcc_xo_gpll1_emclk_sleep_parent_data[] = {591	{ .fw_name = "xo" },592	{ .hw = &gpll1_vote.hw },593	{ .fw_name = "ext_mclk", .name = "ext_mclk" },594	{ .fw_name = "sleep_clk", .name = "sleep_clk" },595};596 597static const struct clk_parent_data gcc_xo_gpll6_gpll0_parent_data[] = {598	{ .fw_name = "xo" },599	{ .hw = &gpll6_vote.hw },600	{ .hw = &gpll0_vote.hw },601};602 603static const struct clk_parent_data gcc_xo_gpll6_gpll0a_parent_data[] = {604	{ .fw_name = "xo" },605	{ .hw = &gpll6_vote.hw },606	{ .hw = &gpll0_vote.hw },607};608 609static struct clk_rcg2 pcnoc_bfdcd_clk_src = {610	.cmd_rcgr = 0x27000,611	.hid_width = 5,612	.parent_map = gcc_xo_gpll0_map,613	.clkr.hw.init = &(struct clk_init_data){614		.name = "pcnoc_bfdcd_clk_src",615		.parent_data = gcc_xo_gpll0_parent_data,616		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),617		.ops = &clk_rcg2_ops,618	},619};620 621static struct clk_rcg2 system_noc_bfdcd_clk_src = {622	.cmd_rcgr = 0x26004,623	.hid_width = 5,624	.parent_map = gcc_xo_gpll0_gpll6a_map,625	.clkr.hw.init = &(struct clk_init_data){626		.name = "system_noc_bfdcd_clk_src",627		.parent_data = gcc_xo_gpll0_gpll6a_parent_data,628		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6a_parent_data),629		.ops = &clk_rcg2_ops,630	},631};632 633static struct clk_rcg2 bimc_ddr_clk_src = {634	.cmd_rcgr = 0x32024,635	.hid_width = 5,636	.parent_map = gcc_xo_gpll0_bimc_map,637	.clkr.hw.init = &(struct clk_init_data){638		.name = "bimc_ddr_clk_src",639		.parent_data = gcc_xo_gpll0_bimc_parent_data,640		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_parent_data),641		.ops = &clk_rcg2_ops,642		.flags = CLK_GET_RATE_NOCACHE,643	},644};645 646static struct clk_rcg2 system_mm_noc_bfdcd_clk_src = {647	.cmd_rcgr = 0x2600c,648	.hid_width = 5,649	.parent_map = gcc_xo_gpll0_gpll6a_map,650	.clkr.hw.init = &(struct clk_init_data){651		.name = "system_mm_noc_bfdcd_clk_src",652		.parent_data = gcc_xo_gpll0_gpll6a_parent_data,653		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6a_parent_data),654		.ops = &clk_rcg2_ops,655	},656};657 658static const struct freq_tbl ftbl_gcc_camss_ahb_clk[] = {659	F(40000000, P_GPLL0, 10, 1, 2),660	F(80000000, P_GPLL0, 10, 0, 0),661	{ }662};663 664static struct clk_rcg2 camss_ahb_clk_src = {665	.cmd_rcgr = 0x5a000,666	.mnd_width = 8,667	.hid_width = 5,668	.parent_map = gcc_xo_gpll0_map,669	.freq_tbl = ftbl_gcc_camss_ahb_clk,670	.clkr.hw.init = &(struct clk_init_data){671		.name = "camss_ahb_clk_src",672		.parent_data = gcc_xo_gpll0_parent_data,673		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),674		.ops = &clk_rcg2_ops,675	},676};677 678static const struct freq_tbl ftbl_apss_ahb_clk[] = {679	F(19200000, P_XO, 1, 0, 0),680	F(50000000, P_GPLL0, 16, 0, 0),681	F(100000000, P_GPLL0, 8, 0, 0),682	F(133330000, P_GPLL0, 6, 0, 0),683	{ }684};685 686static struct clk_rcg2 apss_ahb_clk_src = {687	.cmd_rcgr = 0x46000,688	.hid_width = 5,689	.parent_map = gcc_xo_gpll0_map,690	.freq_tbl = ftbl_apss_ahb_clk,691	.clkr.hw.init = &(struct clk_init_data){692		.name = "apss_ahb_clk_src",693		.parent_data = gcc_xo_gpll0_parent_data,694		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),695		.ops = &clk_rcg2_ops,696	},697};698 699static const struct freq_tbl ftbl_gcc_camss_csi0_1_2_clk[] = {700	F(100000000, P_GPLL0, 8, 0,	0),701	F(200000000, P_GPLL0, 4, 0,	0),702	{ }703};704 705static struct clk_rcg2 csi0_clk_src = {706	.cmd_rcgr = 0x4e020,707	.hid_width = 5,708	.parent_map = gcc_xo_gpll0_map,709	.freq_tbl = ftbl_gcc_camss_csi0_1_2_clk,710	.clkr.hw.init = &(struct clk_init_data){711		.name = "csi0_clk_src",712		.parent_data = gcc_xo_gpll0_parent_data,713		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),714		.ops = &clk_rcg2_ops,715	},716};717 718static struct clk_rcg2 csi1_clk_src = {719	.cmd_rcgr = 0x4f020,720	.hid_width = 5,721	.parent_map = gcc_xo_gpll0_map,722	.freq_tbl = ftbl_gcc_camss_csi0_1_2_clk,723	.clkr.hw.init = &(struct clk_init_data){724		.name = "csi1_clk_src",725		.parent_data = gcc_xo_gpll0_parent_data,726		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),727		.ops = &clk_rcg2_ops,728	},729};730 731static struct clk_rcg2 csi2_clk_src = {732	.cmd_rcgr = 0x3c020,733	.hid_width = 5,734	.parent_map = gcc_xo_gpll0_map,735	.freq_tbl = ftbl_gcc_camss_csi0_1_2_clk,736	.clkr.hw.init = &(struct clk_init_data){737		.name = "csi2_clk_src",738		.parent_data = gcc_xo_gpll0_parent_data,739		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),740		.ops = &clk_rcg2_ops,741	},742};743 744static const struct freq_tbl ftbl_gcc_oxili_gfx3d_clk[] = {745	F(19200000, P_XO, 1, 0, 0),746	F(50000000, P_GPLL0, 16, 0, 0),747	F(80000000, P_GPLL0, 10, 0, 0),748	F(100000000, P_GPLL0, 8, 0, 0),749	F(160000000, P_GPLL0, 5, 0, 0),750	F(200000000, P_GPLL0, 4, 0, 0),751	F(220000000, P_GPLL3, 5, 0, 0),752	F(266670000, P_GPLL0, 3, 0, 0),753	F(310000000, P_GPLL2_AUX, 3, 0, 0),754	F(400000000, P_GPLL0, 2, 0, 0),755	F(465000000, P_GPLL2_AUX, 2, 0, 0),756	F(550000000, P_GPLL3, 2, 0, 0),757	{ }758};759 760static struct clk_rcg2 gfx3d_clk_src = {761	.cmd_rcgr = 0x59000,762	.hid_width = 5,763	.parent_map = gcc_xo_gpll0_gpll2a_gpll3_gpll6a_map,764	.freq_tbl = ftbl_gcc_oxili_gfx3d_clk,765	.clkr.hw.init = &(struct clk_init_data){766		.name = "gfx3d_clk_src",767		.parent_data = gcc_xo_gpll0_gpll2a_gpll3_gpll6a_parent_data,768		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2a_gpll3_gpll6a_parent_data),769		.ops = &clk_rcg2_ops,770	},771};772 773static const struct freq_tbl ftbl_gcc_camss_vfe0_clk[] = {774	F(50000000, P_GPLL0, 16, 0, 0),775	F(80000000, P_GPLL0, 10, 0, 0),776	F(100000000, P_GPLL0, 8, 0, 0),777	F(160000000, P_GPLL0, 5, 0, 0),778	F(177780000, P_GPLL0, 4.5, 0, 0),779	F(200000000, P_GPLL0, 4, 0, 0),780	F(266670000, P_GPLL0, 3, 0, 0),781	F(320000000, P_GPLL0, 2.5, 0, 0),782	F(400000000, P_GPLL0, 2, 0, 0),783	F(465000000, P_GPLL2, 2, 0, 0),784	F(480000000, P_GPLL4, 2.5, 0, 0),785	F(600000000, P_GPLL4, 2, 0, 0),786	{ }787};788 789static struct clk_rcg2 vfe0_clk_src = {790	.cmd_rcgr = 0x58000,791	.hid_width = 5,792	.parent_map = gcc_xo_gpll0_gpll2_gpll4_map,793	.freq_tbl = ftbl_gcc_camss_vfe0_clk,794	.clkr.hw.init = &(struct clk_init_data){795		.name = "vfe0_clk_src",796		.parent_data = gcc_xo_gpll0_gpll2_gpll4_parent_data,797		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll4_parent_data),798		.ops = &clk_rcg2_ops,799	},800};801 802static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_i2c_apps_clk[] = {803	F(19200000, P_XO, 1, 0, 0),804	F(50000000, P_GPLL0, 16, 0, 0),805	{ }806};807 808static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {809	.cmd_rcgr = 0x0200c,810	.hid_width = 5,811	.parent_map = gcc_xo_gpll0_map,812	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,813	.clkr.hw.init = &(struct clk_init_data){814		.name = "blsp1_qup1_i2c_apps_clk_src",815		.parent_data = gcc_xo_gpll0_parent_data,816		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),817		.ops = &clk_rcg2_ops,818	},819};820 821static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_spi_apps_clk[] = {822	F(960000, P_XO, 10, 1, 2),823	F(4800000, P_XO, 4, 0, 0),824	F(9600000, P_XO, 2, 0, 0),825	F(16000000, P_GPLL0, 10, 1, 5),826	F(19200000, P_XO, 1, 0, 0),827	F(25000000, P_GPLL0, 16, 1, 2),828	F(50000000, P_GPLL0, 16, 0, 0),829	{ }830};831 832static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {833	.cmd_rcgr = 0x02024,834	.mnd_width = 8,835	.hid_width = 5,836	.parent_map = gcc_xo_gpll0_map,837	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,838	.clkr.hw.init = &(struct clk_init_data){839		.name = "blsp1_qup1_spi_apps_clk_src",840		.parent_data = gcc_xo_gpll0_parent_data,841		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),842		.ops = &clk_rcg2_ops,843	},844};845 846static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {847	.cmd_rcgr = 0x03000,848	.hid_width = 5,849	.parent_map = gcc_xo_gpll0_map,850	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,851	.clkr.hw.init = &(struct clk_init_data){852		.name = "blsp1_qup2_i2c_apps_clk_src",853		.parent_data = gcc_xo_gpll0_parent_data,854		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),855		.ops = &clk_rcg2_ops,856	},857};858 859static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {860	.cmd_rcgr = 0x03014,861	.mnd_width = 8,862	.hid_width = 5,863	.parent_map = gcc_xo_gpll0_map,864	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,865	.clkr.hw.init = &(struct clk_init_data){866		.name = "blsp1_qup2_spi_apps_clk_src",867		.parent_data = gcc_xo_gpll0_parent_data,868		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),869		.ops = &clk_rcg2_ops,870	},871};872 873static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {874	.cmd_rcgr = 0x04000,875	.hid_width = 5,876	.parent_map = gcc_xo_gpll0_map,877	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,878	.clkr.hw.init = &(struct clk_init_data){879		.name = "blsp1_qup3_i2c_apps_clk_src",880		.parent_data = gcc_xo_gpll0_parent_data,881		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),882		.ops = &clk_rcg2_ops,883	},884};885 886static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {887	.cmd_rcgr = 0x04024,888	.mnd_width = 8,889	.hid_width = 5,890	.parent_map = gcc_xo_gpll0_map,891	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,892	.clkr.hw.init = &(struct clk_init_data){893		.name = "blsp1_qup3_spi_apps_clk_src",894		.parent_data = gcc_xo_gpll0_parent_data,895		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),896		.ops = &clk_rcg2_ops,897	},898};899 900static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {901	.cmd_rcgr = 0x05000,902	.hid_width = 5,903	.parent_map = gcc_xo_gpll0_map,904	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,905	.clkr.hw.init = &(struct clk_init_data){906		.name = "blsp1_qup4_i2c_apps_clk_src",907		.parent_data = gcc_xo_gpll0_parent_data,908		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),909		.ops = &clk_rcg2_ops,910	},911};912 913static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {914	.cmd_rcgr = 0x05024,915	.mnd_width = 8,916	.hid_width = 5,917	.parent_map = gcc_xo_gpll0_map,918	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,919	.clkr.hw.init = &(struct clk_init_data){920		.name = "blsp1_qup4_spi_apps_clk_src",921		.parent_data = gcc_xo_gpll0_parent_data,922		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),923		.ops = &clk_rcg2_ops,924	},925};926 927static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {928	.cmd_rcgr = 0x06000,929	.hid_width = 5,930	.parent_map = gcc_xo_gpll0_map,931	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,932	.clkr.hw.init = &(struct clk_init_data){933		.name = "blsp1_qup5_i2c_apps_clk_src",934		.parent_data = gcc_xo_gpll0_parent_data,935		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),936		.ops = &clk_rcg2_ops,937	},938};939 940static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {941	.cmd_rcgr = 0x06024,942	.mnd_width = 8,943	.hid_width = 5,944	.parent_map = gcc_xo_gpll0_map,945	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,946	.clkr.hw.init = &(struct clk_init_data){947		.name = "blsp1_qup5_spi_apps_clk_src",948		.parent_data = gcc_xo_gpll0_parent_data,949		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),950		.ops = &clk_rcg2_ops,951	},952};953 954static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {955	.cmd_rcgr = 0x07000,956	.hid_width = 5,957	.parent_map = gcc_xo_gpll0_map,958	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,959	.clkr.hw.init = &(struct clk_init_data){960		.name = "blsp1_qup6_i2c_apps_clk_src",961		.parent_data = gcc_xo_gpll0_parent_data,962		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),963		.ops = &clk_rcg2_ops,964	},965};966 967static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {968	.cmd_rcgr = 0x07024,969	.mnd_width = 8,970	.hid_width = 5,971	.parent_map = gcc_xo_gpll0_map,972	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,973	.clkr.hw.init = &(struct clk_init_data){974		.name = "blsp1_qup6_spi_apps_clk_src",975		.parent_data = gcc_xo_gpll0_parent_data,976		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),977		.ops = &clk_rcg2_ops,978	},979};980 981static const struct freq_tbl ftbl_gcc_blsp1_uart1_6_apps_clk[] = {982	F(3686400, P_GPLL0, 1, 72, 15625),983	F(7372800, P_GPLL0, 1, 144, 15625),984	F(14745600, P_GPLL0, 1, 288, 15625),985	F(16000000, P_GPLL0, 10, 1, 5),986	F(19200000, P_XO, 1, 0, 0),987	F(24000000, P_GPLL0, 1, 3, 100),988	F(25000000, P_GPLL0, 16, 1, 2),989	F(32000000, P_GPLL0, 1, 1, 25),990	F(40000000, P_GPLL0, 1, 1, 20),991	F(46400000, P_GPLL0, 1, 29, 500),992	F(48000000, P_GPLL0, 1, 3, 50),993	F(51200000, P_GPLL0, 1, 8, 125),994	F(56000000, P_GPLL0, 1, 7, 100),995	F(58982400, P_GPLL0, 1, 1152, 15625),996	F(60000000, P_GPLL0, 1, 3, 40),997	{ }998};999 1000static struct clk_rcg2 blsp1_uart1_apps_clk_src = {1001	.cmd_rcgr = 0x02044,1002	.mnd_width = 16,1003	.hid_width = 5,1004	.parent_map = gcc_xo_gpll0_map,1005	.freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,1006	.clkr.hw.init = &(struct clk_init_data){1007		.name = "blsp1_uart1_apps_clk_src",1008		.parent_data = gcc_xo_gpll0_parent_data,1009		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),1010		.ops = &clk_rcg2_ops,1011	},1012};1013 1014static struct clk_rcg2 blsp1_uart2_apps_clk_src = {1015	.cmd_rcgr = 0x03034,1016	.mnd_width = 16,1017	.hid_width = 5,1018	.parent_map = gcc_xo_gpll0_map,1019	.freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,1020	.clkr.hw.init = &(struct clk_init_data){1021		.name = "blsp1_uart2_apps_clk_src",1022		.parent_data = gcc_xo_gpll0_parent_data,1023		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),1024		.ops = &clk_rcg2_ops,1025	},1026};1027 1028static const struct freq_tbl ftbl_gcc_camss_cci_clk[] = {1029	F(19200000, P_XO, 1, 0, 0),1030	F(37500000, P_GPLL0, 1, 3, 64),1031	{ }1032};1033 1034static struct clk_rcg2 cci_clk_src = {1035	.cmd_rcgr = 0x51000,1036	.mnd_width = 8,1037	.hid_width = 5,1038	.parent_map = gcc_xo_gpll0a_map,1039	.freq_tbl = ftbl_gcc_camss_cci_clk,1040	.clkr.hw.init = &(struct clk_init_data){1041		.name = "cci_clk_src",1042		.parent_data = gcc_xo_gpll0a_parent_data,1043		.num_parents = ARRAY_SIZE(gcc_xo_gpll0a_parent_data),1044		.ops = &clk_rcg2_ops,1045	},1046};1047 1048/*1049 * This is a frequency table for "General Purpose" clocks.1050 * These clocks can be muxed to the SoC pins and may be used by1051 * external devices. They're often used as PWM source.1052 *1053 * See comment at ftbl_gcc_gp1_3_clk.1054 */1055static const struct freq_tbl ftbl_gcc_camss_gp0_1_clk[] = {1056	F(10000,   P_XO,    16,  1, 120),1057	F(100000,  P_XO,    16,  1,  12),1058	F(500000,  P_GPLL0, 16,  1, 100),1059	F(1000000, P_GPLL0, 16,  1,  50),1060	F(2500000, P_GPLL0, 16,  1,  20),1061	F(5000000, P_GPLL0, 16,  1,  10),1062	F(100000000, P_GPLL0, 8, 0, 0),1063	F(200000000, P_GPLL0, 4, 0, 0),1064	{ }1065};1066 1067static struct clk_rcg2 camss_gp0_clk_src = {1068	.cmd_rcgr = 0x54000,1069	.mnd_width = 8,1070	.hid_width = 5,1071	.parent_map = gcc_xo_gpll0_gpll1a_sleep_map,1072	.freq_tbl = ftbl_gcc_camss_gp0_1_clk,1073	.clkr.hw.init = &(struct clk_init_data){1074		.name = "camss_gp0_clk_src",1075		.parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data,1076		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data),1077		.ops = &clk_rcg2_ops,1078	},1079};1080 1081static struct clk_rcg2 camss_gp1_clk_src = {1082	.cmd_rcgr = 0x55000,1083	.mnd_width = 8,1084	.hid_width = 5,1085	.parent_map = gcc_xo_gpll0_gpll1a_sleep_map,1086	.freq_tbl = ftbl_gcc_camss_gp0_1_clk,1087	.clkr.hw.init = &(struct clk_init_data){1088		.name = "camss_gp1_clk_src",1089		.parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data,1090		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data),1091		.ops = &clk_rcg2_ops,1092	},1093};1094 1095static const struct freq_tbl ftbl_gcc_camss_jpeg0_clk[] = {1096	F(133330000, P_GPLL0, 6, 0,	0),1097	F(266670000, P_GPLL0, 3, 0,	0),1098	F(320000000, P_GPLL0, 2.5, 0, 0),1099	{ }1100};1101 1102static struct clk_rcg2 jpeg0_clk_src = {1103	.cmd_rcgr = 0x57000,1104	.hid_width = 5,1105	.parent_map = gcc_xo_gpll0_map,1106	.freq_tbl = ftbl_gcc_camss_jpeg0_clk,1107	.clkr.hw.init = &(struct clk_init_data){1108		.name = "jpeg0_clk_src",1109		.parent_data = gcc_xo_gpll0_parent_data,1110		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),1111		.ops = &clk_rcg2_ops,1112	},1113};1114 1115static const struct freq_tbl ftbl_gcc_camss_mclk0_1_clk[] = {1116	F(24000000, P_GPLL0, 1, 1, 45),1117	F(66670000, P_GPLL0, 12, 0, 0),1118	{ }1119};1120 1121static struct clk_rcg2 mclk0_clk_src = {1122	.cmd_rcgr = 0x52000,1123	.mnd_width = 8,1124	.hid_width = 5,1125	.parent_map = gcc_xo_gpll0_gpll1a_gpll6_sleep_map,1126	.freq_tbl = ftbl_gcc_camss_mclk0_1_clk,1127	.clkr.hw.init = &(struct clk_init_data){1128		.name = "mclk0_clk_src",1129		.parent_data = gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data,1130		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data),1131		.ops = &clk_rcg2_ops,1132	},1133};1134 1135static struct clk_rcg2 mclk1_clk_src = {1136	.cmd_rcgr = 0x53000,1137	.mnd_width = 8,1138	.hid_width = 5,1139	.parent_map = gcc_xo_gpll0_gpll1a_gpll6_sleep_map,1140	.freq_tbl = ftbl_gcc_camss_mclk0_1_clk,1141	.clkr.hw.init = &(struct clk_init_data){1142		.name = "mclk1_clk_src",1143		.parent_data = gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data,1144		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data),1145		.ops = &clk_rcg2_ops,1146	},1147};1148 1149static const struct freq_tbl ftbl_gcc_camss_csi0_1phytimer_clk[] = {1150	F(100000000, P_GPLL0, 8, 0,	0),1151	F(200000000, P_GPLL0, 4, 0,	0),1152	{ }1153};1154 1155static struct clk_rcg2 csi0phytimer_clk_src = {1156	.cmd_rcgr = 0x4e000,1157	.hid_width = 5,1158	.parent_map = gcc_xo_gpll0_gpll1a_map,1159	.freq_tbl = ftbl_gcc_camss_csi0_1phytimer_clk,1160	.clkr.hw.init = &(struct clk_init_data){1161		.name = "csi0phytimer_clk_src",1162		.parent_data = gcc_xo_gpll0_gpll1a_parent_data,1163		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_parent_data),1164		.ops = &clk_rcg2_ops,1165	},1166};1167 1168static struct clk_rcg2 csi1phytimer_clk_src = {1169	.cmd_rcgr = 0x4f000,1170	.hid_width = 5,1171	.parent_map = gcc_xo_gpll0_gpll1a_map,1172	.freq_tbl = ftbl_gcc_camss_csi0_1phytimer_clk,1173	.clkr.hw.init = &(struct clk_init_data){1174		.name = "csi1phytimer_clk_src",1175		.parent_data = gcc_xo_gpll0_gpll1a_parent_data,1176		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_parent_data),1177		.ops = &clk_rcg2_ops,1178	},1179};1180 1181static const struct freq_tbl ftbl_gcc_camss_cpp_clk[] = {1182	F(160000000, P_GPLL0, 5, 0, 0),1183	F(200000000, P_GPLL0, 4, 0, 0),1184	F(228570000, P_GPLL0, 3.5, 0, 0),1185	F(266670000, P_GPLL0, 3, 0, 0),1186	F(320000000, P_GPLL0, 2.5, 0, 0),1187	F(465000000, P_GPLL2, 2, 0, 0),1188	{ }1189};1190 1191static struct clk_rcg2 cpp_clk_src = {1192	.cmd_rcgr = 0x58018,1193	.hid_width = 5,1194	.parent_map = gcc_xo_gpll0_gpll2_map,1195	.freq_tbl = ftbl_gcc_camss_cpp_clk,1196	.clkr.hw.init = &(struct clk_init_data){1197		.name = "cpp_clk_src",1198		.parent_data = gcc_xo_gpll0_gpll2_parent_data,1199		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_parent_data),1200		.ops = &clk_rcg2_ops,1201	},1202};1203 1204static const struct freq_tbl ftbl_gcc_crypto_clk[] = {1205	F(50000000, P_GPLL0, 16, 0, 0),1206	F(80000000, P_GPLL0, 10, 0, 0),1207	F(100000000, P_GPLL0, 8, 0, 0),1208	F(160000000, P_GPLL0, 5, 0, 0),1209	{ }1210};1211 1212/* This is not in the documentation but is in the downstream driver */1213static struct clk_rcg2 crypto_clk_src = {1214	.cmd_rcgr = 0x16004,1215	.hid_width = 5,1216	.parent_map = gcc_xo_gpll0_map,1217	.freq_tbl = ftbl_gcc_crypto_clk,1218	.clkr.hw.init = &(struct clk_init_data){1219		.name = "crypto_clk_src",1220		.parent_data = gcc_xo_gpll0_parent_data,1221		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),1222		.ops = &clk_rcg2_ops,1223	},1224};1225 1226/*1227 * This is a frequency table for "General Purpose" clocks.1228 * These clocks can be muxed to the SoC pins and may be used by1229 * external devices. They're often used as PWM source.1230 *1231 * Please note that MND divider must be enabled for duty-cycle1232 * control to be possible. (M != N) Also since D register is configured1233 * with a value multiplied by 2, and duty cycle is calculated as1234 *                             (2 * D) % 2^W1235 *                DutyCycle = ----------------1236 *                              2 * (N % 2^W)1237 * (where W = .mnd_width)1238 * N must be half or less than maximum value for the register.1239 * Otherwise duty-cycle control would be limited.1240 * (e.g. for 8-bit NMD N should be less than 128)1241 */1242static const struct freq_tbl ftbl_gcc_gp1_3_clk[] = {1243	F(10000,   P_XO,    16,  1, 120),1244	F(100000,  P_XO,    16,  1,  12),1245	F(500000,  P_GPLL0, 16,  1, 100),1246	F(1000000, P_GPLL0, 16,  1,  50),1247	F(2500000, P_GPLL0, 16,  1,  20),1248	F(5000000, P_GPLL0, 16,  1,  10),1249	F(19200000, P_XO, 1, 0,	0),1250	{ }1251};1252 1253static struct clk_rcg2 gp1_clk_src = {1254	.cmd_rcgr = 0x08004,1255	.mnd_width = 8,1256	.hid_width = 5,1257	.parent_map = gcc_xo_gpll0_gpll1a_sleep_map,1258	.freq_tbl = ftbl_gcc_gp1_3_clk,1259	.clkr.hw.init = &(struct clk_init_data){1260		.name = "gp1_clk_src",1261		.parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data,1262		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data),1263		.ops = &clk_rcg2_ops,1264	},1265};1266 1267static struct clk_rcg2 gp2_clk_src = {1268	.cmd_rcgr = 0x09004,1269	.mnd_width = 8,1270	.hid_width = 5,1271	.parent_map = gcc_xo_gpll0_gpll1a_sleep_map,1272	.freq_tbl = ftbl_gcc_gp1_3_clk,1273	.clkr.hw.init = &(struct clk_init_data){1274		.name = "gp2_clk_src",1275		.parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data,1276		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data),1277		.ops = &clk_rcg2_ops,1278	},1279};1280 1281static struct clk_rcg2 gp3_clk_src = {1282	.cmd_rcgr = 0x0a004,1283	.mnd_width = 8,1284	.hid_width = 5,1285	.parent_map = gcc_xo_gpll0_gpll1a_sleep_map,1286	.freq_tbl = ftbl_gcc_gp1_3_clk,1287	.clkr.hw.init = &(struct clk_init_data){1288		.name = "gp3_clk_src",1289		.parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data,1290		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data),1291		.ops = &clk_rcg2_ops,1292	},1293};1294 1295static struct clk_rcg2 byte0_clk_src = {1296	.cmd_rcgr = 0x4d044,1297	.hid_width = 5,1298	.parent_map = gcc_xo_gpll0a_dsibyte_map,1299	.clkr.hw.init = &(struct clk_init_data){1300		.name = "byte0_clk_src",1301		.parent_data = gcc_xo_gpll0a_dsibyte_parent_data,1302		.num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsibyte_parent_data),1303		.ops = &clk_byte2_ops,1304		.flags = CLK_SET_RATE_PARENT,1305	},1306};1307 1308static struct clk_rcg2 byte1_clk_src = {1309	.cmd_rcgr = 0x4d0b0,1310	.hid_width = 5,1311	.parent_map = gcc_xo_gpll0a_dsibyte_map,1312	.clkr.hw.init = &(struct clk_init_data){1313		.name = "byte1_clk_src",1314		.parent_data = gcc_xo_gpll0a_dsibyte_parent_data,1315		.num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsibyte_parent_data),1316		.ops = &clk_byte2_ops,1317		.flags = CLK_SET_RATE_PARENT,1318	},1319};1320 1321static const struct freq_tbl ftbl_gcc_mdss_esc_clk[] = {1322	F(19200000, P_XO, 1, 0, 0),1323	{ }1324};1325 1326static struct clk_rcg2 esc0_clk_src = {1327	.cmd_rcgr = 0x4d060,1328	.hid_width = 5,1329	.parent_map = gcc_xo_dsibyte_map,1330	.freq_tbl = ftbl_gcc_mdss_esc_clk,1331	.clkr.hw.init = &(struct clk_init_data){1332		.name = "esc0_clk_src",1333		.parent_data = gcc_xo_dsibyte_parent_data,1334		.num_parents = ARRAY_SIZE(gcc_xo_dsibyte_parent_data),1335		.ops = &clk_rcg2_ops,1336	},1337};1338 1339static struct clk_rcg2 esc1_clk_src = {1340	.cmd_rcgr = 0x4d0a8,1341	.hid_width = 5,1342	.parent_map = gcc_xo_dsibyte_map,1343	.freq_tbl = ftbl_gcc_mdss_esc_clk,1344	.clkr.hw.init = &(struct clk_init_data){1345		.name = "esc1_clk_src",1346		.parent_data = gcc_xo_dsibyte_parent_data,1347		.num_parents = ARRAY_SIZE(gcc_xo_dsibyte_parent_data),1348		.ops = &clk_rcg2_ops,1349	},1350};1351 1352static const struct freq_tbl ftbl_gcc_mdss_mdp_clk[] = {1353	F(50000000, P_GPLL0_AUX, 16, 0, 0),1354	F(80000000, P_GPLL0_AUX, 10, 0, 0),1355	F(100000000, P_GPLL0_AUX, 8, 0, 0),1356	F(145500000, P_GPLL0_AUX, 5.5, 0, 0),1357	F(153600000, P_GPLL0, 4, 0, 0),1358	F(160000000, P_GPLL0_AUX, 5, 0, 0),1359	F(177780000, P_GPLL0_AUX, 4.5, 0, 0),1360	F(200000000, P_GPLL0_AUX, 4, 0, 0),1361	F(266670000, P_GPLL0_AUX, 3, 0, 0),1362	F(307200000, P_GPLL1, 2, 0, 0),1363	F(366670000, P_GPLL3_AUX, 3, 0, 0),1364	{ }1365};1366 1367static struct clk_rcg2 mdp_clk_src = {1368	.cmd_rcgr = 0x4d014,1369	.hid_width = 5,1370	.parent_map = gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_map,1371	.freq_tbl = ftbl_gcc_mdss_mdp_clk,1372	.clkr.hw.init = &(struct clk_init_data){1373		.name = "mdp_clk_src",1374		.parent_data = gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_parent_data,1375		.num_parents = ARRAY_SIZE(gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_parent_data),1376		.ops = &clk_rcg2_ops,1377	},1378};1379 1380static struct clk_rcg2 pclk0_clk_src = {1381	.cmd_rcgr = 0x4d000,1382	.mnd_width = 8,1383	.hid_width = 5,1384	.parent_map = gcc_xo_gpll0a_dsiphy_map,1385	.clkr.hw.init = &(struct clk_init_data){1386		.name = "pclk0_clk_src",1387		.parent_data = gcc_xo_gpll0a_dsiphy_parent_data,1388		.num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsiphy_parent_data),1389		.ops = &clk_pixel_ops,1390		.flags = CLK_SET_RATE_PARENT,1391	},1392};1393 1394static struct clk_rcg2 pclk1_clk_src = {1395	.cmd_rcgr = 0x4d0b8,1396	.mnd_width = 8,1397	.hid_width = 5,1398	.parent_map = gcc_xo_gpll0a_dsiphy_map,1399	.clkr.hw.init = &(struct clk_init_data){1400		.name = "pclk1_clk_src",1401		.parent_data = gcc_xo_gpll0a_dsiphy_parent_data,1402		.num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsiphy_parent_data),1403		.ops = &clk_pixel_ops,1404		.flags = CLK_SET_RATE_PARENT,1405	},1406};1407 1408static const struct freq_tbl ftbl_gcc_mdss_vsync_clk[] = {1409	F(19200000, P_XO, 1, 0,	0),1410	{ }1411};1412 1413static struct clk_rcg2 vsync_clk_src = {1414	.cmd_rcgr = 0x4d02c,1415	.hid_width = 5,1416	.parent_map = gcc_xo_gpll0a_map,1417	.freq_tbl = ftbl_gcc_mdss_vsync_clk,1418	.clkr.hw.init = &(struct clk_init_data){1419		.name = "vsync_clk_src",1420		.parent_data = gcc_xo_gpll0a_parent_data,1421		.num_parents = ARRAY_SIZE(gcc_xo_gpll0a_parent_data),1422		.ops = &clk_rcg2_ops,1423	},1424};1425 1426static const struct freq_tbl ftbl_gcc_pdm2_clk[] = {1427	F(64000000, P_GPLL0, 12.5, 0, 0),1428	{ }1429};1430 1431/* This is not in the documentation but is in the downstream driver */1432static struct clk_rcg2 pdm2_clk_src = {1433	.cmd_rcgr = 0x44010,1434	.hid_width = 5,1435	.parent_map = gcc_xo_gpll0_map,1436	.freq_tbl = ftbl_gcc_pdm2_clk,1437	.clkr.hw.init = &(struct clk_init_data){1438		.name = "pdm2_clk_src",1439		.parent_data = gcc_xo_gpll0_parent_data,1440		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),1441		.ops = &clk_rcg2_ops,1442	},1443};1444 1445static const struct freq_tbl ftbl_gcc_sdcc_apps_clk[] = {1446	F(144000, P_XO, 16, 3, 25),1447	F(400000, P_XO, 12, 1, 4),1448	F(20000000, P_GPLL0, 10, 1, 4),1449	F(25000000, P_GPLL0, 16, 1, 2),1450	F(50000000, P_GPLL0, 16, 0, 0),1451	F(100000000, P_GPLL0, 8, 0, 0),1452	F(177770000, P_GPLL0, 4.5, 0, 0),1453	F(200000000, P_GPLL0, 4, 0, 0),1454	{ }1455};1456 1457static struct clk_rcg2 sdcc1_apps_clk_src = {1458	.cmd_rcgr = 0x42004,1459	.mnd_width = 8,1460	.hid_width = 5,1461	.parent_map = gcc_xo_gpll0_map,1462	.freq_tbl = ftbl_gcc_sdcc_apps_clk,1463	.clkr.hw.init = &(struct clk_init_data){1464		.name = "sdcc1_apps_clk_src",1465		.parent_data = gcc_xo_gpll0_parent_data,1466		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),1467		.ops = &clk_rcg2_floor_ops,1468	},1469};1470 1471static struct clk_rcg2 sdcc2_apps_clk_src = {1472	.cmd_rcgr = 0x43004,1473	.mnd_width = 8,1474	.hid_width = 5,1475	.parent_map = gcc_xo_gpll0_map,1476	.freq_tbl = ftbl_gcc_sdcc_apps_clk,1477	.clkr.hw.init = &(struct clk_init_data){1478		.name = "sdcc2_apps_clk_src",1479		.parent_data = gcc_xo_gpll0_parent_data,1480		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),1481		.ops = &clk_rcg2_floor_ops,1482	},1483};1484 1485static const struct freq_tbl ftbl_gcc_apss_tcu_clk[] = {1486	F(154285000, P_GPLL6, 7, 0, 0),1487	F(320000000, P_GPLL0, 2.5, 0, 0),1488	F(400000000, P_GPLL0, 2, 0, 0),1489	{ }1490};1491 1492static struct clk_rcg2 apss_tcu_clk_src = {1493	.cmd_rcgr = 0x1207c,1494	.hid_width = 5,1495	.parent_map = gcc_xo_gpll0_gpll5a_gpll6_bimc_map,1496	.freq_tbl = ftbl_gcc_apss_tcu_clk,1497	.clkr.hw.init = &(struct clk_init_data){1498		.name = "apss_tcu_clk_src",1499		.parent_data = gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data,1500		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data),1501		.ops = &clk_rcg2_ops,1502	},1503};1504 1505static const struct freq_tbl ftbl_gcc_bimc_gpu_clk[] = {1506	F(19200000, P_XO, 1, 0, 0),1507	F(100000000, P_GPLL0, 8, 0, 0),1508	F(200000000, P_GPLL0, 4, 0, 0),1509	F(266500000, P_BIMC, 4, 0, 0),1510	F(400000000, P_GPLL0, 2, 0, 0),1511	F(533000000, P_BIMC, 2, 0, 0),1512	{ }1513};1514 1515static struct clk_rcg2 bimc_gpu_clk_src = {1516	.cmd_rcgr = 0x31028,1517	.hid_width = 5,1518	.parent_map = gcc_xo_gpll0_gpll5a_gpll6_bimc_map,1519	.freq_tbl = ftbl_gcc_bimc_gpu_clk,1520	.clkr.hw.init = &(struct clk_init_data){1521		.name = "bimc_gpu_clk_src",1522		.parent_data = gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data,1523		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data),1524		.flags = CLK_GET_RATE_NOCACHE,1525		.ops = &clk_rcg2_ops,1526	},1527};1528 1529static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {1530	F(57140000, P_GPLL0, 14, 0, 0),1531	F(80000000, P_GPLL0, 10, 0, 0),1532	F(100000000, P_GPLL0, 8, 0, 0),1533	{ }1534};1535 1536static struct clk_rcg2 usb_hs_system_clk_src = {1537	.cmd_rcgr = 0x41010,1538	.hid_width = 5,1539	.parent_map = gcc_xo_gpll0_map,1540	.freq_tbl = ftbl_gcc_usb_hs_system_clk,1541	.clkr.hw.init = &(struct clk_init_data){1542		.name = "usb_hs_system_clk_src",1543		.parent_data = gcc_xo_gpll0_parent_data,1544		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),1545		.ops = &clk_rcg2_ops,1546	},1547};1548 1549static const struct freq_tbl ftbl_gcc_usb_fs_system_clk[] = {1550	F(64000000, P_GPLL0, 12.5, 0, 0),1551	{ }1552};1553 1554static struct clk_rcg2 usb_fs_system_clk_src = {1555	.cmd_rcgr = 0x3f010,1556	.hid_width = 5,1557	.parent_map = gcc_xo_gpll0_map,1558	.freq_tbl = ftbl_gcc_usb_fs_system_clk,1559	.clkr.hw.init = &(struct clk_init_data){1560		.name = "usb_fs_system_clk_src",1561		.parent_data = gcc_xo_gpll6_gpll0_parent_data,1562		.num_parents = ARRAY_SIZE(gcc_xo_gpll6_gpll0_parent_data),1563		.ops = &clk_rcg2_ops,1564	},1565};1566 1567static const struct freq_tbl ftbl_gcc_usb_fs_ic_clk[] = {1568	F(60000000, P_GPLL6, 1, 1, 18),1569	{ }1570};1571 1572static struct clk_rcg2 usb_fs_ic_clk_src = {1573	.cmd_rcgr = 0x3f034,1574	.hid_width = 5,1575	.parent_map = gcc_xo_gpll0_map,1576	.freq_tbl = ftbl_gcc_usb_fs_ic_clk,1577	.clkr.hw.init = &(struct clk_init_data){1578		.name = "usb_fs_ic_clk_src",1579		.parent_data = gcc_xo_gpll6_gpll0a_parent_data,1580		.num_parents = ARRAY_SIZE(gcc_xo_gpll6_gpll0a_parent_data),1581		.ops = &clk_rcg2_ops,1582	},1583};1584 1585static const struct freq_tbl ftbl_gcc_ultaudio_ahb_clk[] = {1586	F(3200000, P_XO, 6, 0, 0),1587	F(6400000, P_XO, 3, 0, 0),1588	F(9600000, P_XO, 2, 0, 0),1589	F(19200000, P_XO, 1, 0, 0),1590	F(40000000, P_GPLL0, 10, 1, 2),1591	F(66670000, P_GPLL0, 12, 0, 0),1592	F(80000000, P_GPLL0, 10, 0, 0),1593	F(100000000, P_GPLL0, 8, 0, 0),1594	{ }1595};1596 1597static struct clk_rcg2 ultaudio_ahbfabric_clk_src = {1598	.cmd_rcgr = 0x1c010,1599	.hid_width = 5,1600	.mnd_width = 8,1601	.parent_map = gcc_xo_gpll0_gpll1_sleep_map,1602	.freq_tbl = ftbl_gcc_ultaudio_ahb_clk,1603	.clkr.hw.init = &(struct clk_init_data){1604		.name = "ultaudio_ahbfabric_clk_src",1605		.parent_data = gcc_xo_gpll0_gpll1_sleep_parent_data,1606		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1_sleep_parent_data),1607		.ops = &clk_rcg2_ops,1608	},1609};1610 1611static struct clk_branch gcc_ultaudio_ahbfabric_ixfabric_clk = {1612	.halt_reg = 0x1c028,1613	.clkr = {1614		.enable_reg = 0x1c028,1615		.enable_mask = BIT(0),1616		.hw.init = &(struct clk_init_data){1617			.name = "gcc_ultaudio_ahbfabric_ixfabric_clk",1618			.parent_hws = (const struct clk_hw*[]){1619				&ultaudio_ahbfabric_clk_src.clkr.hw,1620			},1621			.num_parents = 1,1622			.flags = CLK_SET_RATE_PARENT,1623			.ops = &clk_branch2_ops,1624		},1625	},1626};1627 1628static struct clk_branch gcc_ultaudio_ahbfabric_ixfabric_lpm_clk = {1629	.halt_reg = 0x1c024,1630	.clkr = {1631		.enable_reg = 0x1c024,1632		.enable_mask = BIT(0),1633		.hw.init = &(struct clk_init_data){1634			.name = "gcc_ultaudio_ahbfabric_ixfabric_lpm_clk",1635			.parent_hws = (const struct clk_hw*[]){1636				&ultaudio_ahbfabric_clk_src.clkr.hw,1637			},1638			.num_parents = 1,1639			.flags = CLK_SET_RATE_PARENT,1640			.ops = &clk_branch2_ops,1641		},1642	},1643};1644 1645static const struct freq_tbl ftbl_gcc_ultaudio_lpaif_i2s_clk[] = {1646	F(128000, P_XO, 10, 1, 15),1647	F(256000, P_XO, 5, 1, 15),1648	F(384000, P_XO, 5, 1, 10),1649	F(512000, P_XO, 5, 2, 15),1650	F(576000, P_XO, 5, 3, 20),1651	F(705600, P_GPLL1, 16, 1, 80),1652	F(768000, P_XO, 5, 1, 5),1653	F(800000, P_XO, 5, 5, 24),1654	F(1024000, P_XO, 5, 4, 15),1655	F(1152000, P_XO, 1, 3, 50),1656	F(1411200, P_GPLL1, 16, 1, 40),1657	F(1536000, P_XO, 1, 2, 25),1658	F(1600000, P_XO, 12, 0, 0),1659	F(1728000, P_XO, 5, 9, 20),1660	F(2048000, P_XO, 5, 8, 15),1661	F(2304000, P_XO, 5, 3, 5),1662	F(2400000, P_XO, 8, 0, 0),1663	F(2822400, P_GPLL1, 16, 1, 20),1664	F(3072000, P_XO, 5, 4, 5),1665	F(4096000, P_GPLL1, 9, 2, 49),1666	F(4800000, P_XO, 4, 0, 0),1667	F(5644800, P_GPLL1, 16, 1, 10),1668	F(6144000, P_GPLL1, 7, 1, 21),1669	F(8192000, P_GPLL1, 9, 4, 49),1670	F(9600000, P_XO, 2, 0, 0),1671	F(11289600, P_GPLL1, 16, 1, 5),1672	F(12288000, P_GPLL1, 7, 2, 21),1673	{ }1674};1675 1676static struct clk_rcg2 ultaudio_lpaif_pri_i2s_clk_src = {1677	.cmd_rcgr = 0x1c054,1678	.hid_width = 5,1679	.mnd_width = 8,1680	.parent_map = gcc_xo_gpll1_epi2s_emclk_sleep_map,1681	.freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk,1682	.clkr.hw.init = &(struct clk_init_data){1683		.name = "ultaudio_lpaif_pri_i2s_clk_src",1684		.parent_data = gcc_xo_gpll1_epi2s_emclk_sleep_parent_data,1685		.num_parents = ARRAY_SIZE(gcc_xo_gpll1_epi2s_emclk_sleep_parent_data),1686		.ops = &clk_rcg2_ops,1687	},1688};1689 1690static struct clk_branch gcc_ultaudio_lpaif_pri_i2s_clk = {1691	.halt_reg = 0x1c068,1692	.clkr = {1693		.enable_reg = 0x1c068,1694		.enable_mask = BIT(0),1695		.hw.init = &(struct clk_init_data){1696			.name = "gcc_ultaudio_lpaif_pri_i2s_clk",1697			.parent_hws = (const struct clk_hw*[]){1698				&ultaudio_lpaif_pri_i2s_clk_src.clkr.hw,1699			},1700			.num_parents = 1,1701			.flags = CLK_SET_RATE_PARENT,1702			.ops = &clk_branch2_ops,1703		},1704	},1705};1706 1707static struct clk_rcg2 ultaudio_lpaif_sec_i2s_clk_src = {1708	.cmd_rcgr = 0x1c06c,1709	.hid_width = 5,1710	.mnd_width = 8,1711	.parent_map = gcc_xo_gpll1_esi2s_emclk_sleep_map,1712	.freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk,1713	.clkr.hw.init = &(struct clk_init_data){1714		.name = "ultaudio_lpaif_sec_i2s_clk_src",1715		.parent_data = gcc_xo_gpll1_esi2s_emclk_sleep_parent_data,1716		.num_parents = ARRAY_SIZE(gcc_xo_gpll1_esi2s_emclk_sleep_parent_data),1717		.ops = &clk_rcg2_ops,1718	},1719};1720 1721static struct clk_branch gcc_ultaudio_lpaif_sec_i2s_clk = {1722	.halt_reg = 0x1c080,1723	.clkr = {1724		.enable_reg = 0x1c080,1725		.enable_mask = BIT(0),1726		.hw.init = &(struct clk_init_data){1727			.name = "gcc_ultaudio_lpaif_sec_i2s_clk",1728			.parent_hws = (const struct clk_hw*[]){1729				&ultaudio_lpaif_sec_i2s_clk_src.clkr.hw,1730			},1731			.num_parents = 1,1732			.flags = CLK_SET_RATE_PARENT,1733			.ops = &clk_branch2_ops,1734		},1735	},1736};1737 1738static struct clk_rcg2 ultaudio_lpaif_aux_i2s_clk_src = {1739	.cmd_rcgr = 0x1c084,1740	.hid_width = 5,1741	.mnd_width = 8,1742	.parent_map = gcc_xo_gpll1_emclk_sleep_map,1743	.freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk,1744	.clkr.hw.init = &(struct clk_init_data){1745		.name = "ultaudio_lpaif_aux_i2s_clk_src",1746		.parent_data = gcc_xo_gpll1_esi2s_emclk_sleep_parent_data,1747		.num_parents = ARRAY_SIZE(gcc_xo_gpll1_esi2s_emclk_sleep_parent_data),1748		.ops = &clk_rcg2_ops,1749	},1750};1751 1752static struct clk_branch gcc_ultaudio_lpaif_aux_i2s_clk = {1753	.halt_reg = 0x1c098,1754	.clkr = {1755		.enable_reg = 0x1c098,1756		.enable_mask = BIT(0),1757		.hw.init = &(struct clk_init_data){1758			.name = "gcc_ultaudio_lpaif_aux_i2s_clk",1759			.parent_hws = (const struct clk_hw*[]){1760				&ultaudio_lpaif_aux_i2s_clk_src.clkr.hw,1761			},1762			.num_parents = 1,1763			.flags = CLK_SET_RATE_PARENT,1764			.ops = &clk_branch2_ops,1765		},1766	},1767};1768 1769static const struct freq_tbl ftbl_gcc_ultaudio_xo_clk[] = {1770	F(19200000, P_XO, 1, 0, 0),1771	{ }1772};1773 1774static struct clk_rcg2 ultaudio_xo_clk_src = {1775	.cmd_rcgr = 0x1c034,1776	.hid_width = 5,1777	.parent_map = gcc_xo_sleep_map,1778	.freq_tbl = ftbl_gcc_ultaudio_xo_clk,1779	.clkr.hw.init = &(struct clk_init_data){1780		.name = "ultaudio_xo_clk_src",1781		.parent_data = gcc_xo_sleep_parent_data,1782		.num_parents = ARRAY_SIZE(gcc_xo_sleep_parent_data),1783		.ops = &clk_rcg2_ops,1784	},1785};1786 1787static struct clk_branch gcc_ultaudio_avsync_xo_clk = {1788	.halt_reg = 0x1c04c,1789	.clkr = {1790		.enable_reg = 0x1c04c,1791		.enable_mask = BIT(0),1792		.hw.init = &(struct clk_init_data){1793			.name = "gcc_ultaudio_avsync_xo_clk",1794			.parent_hws = (const struct clk_hw*[]){1795				&ultaudio_xo_clk_src.clkr.hw,1796			},1797			.num_parents = 1,1798			.flags = CLK_SET_RATE_PARENT,1799			.ops = &clk_branch2_ops,1800		},1801	},1802};1803 1804static struct clk_branch gcc_ultaudio_stc_xo_clk = {1805	.halt_reg = 0x1c050,1806	.clkr = {1807		.enable_reg = 0x1c050,1808		.enable_mask = BIT(0),1809		.hw.init = &(struct clk_init_data){1810			.name = "gcc_ultaudio_stc_xo_clk",1811			.parent_hws = (const struct clk_hw*[]){1812				&ultaudio_xo_clk_src.clkr.hw,1813			},1814			.num_parents = 1,1815			.flags = CLK_SET_RATE_PARENT,1816			.ops = &clk_branch2_ops,1817		},1818	},1819};1820 1821static const struct freq_tbl ftbl_codec_clk[] = {1822	F(9600000, P_XO, 2, 0, 0),1823	F(12288000, P_XO, 1, 16, 25),1824	F(19200000, P_XO, 1, 0, 0),1825	F(11289600, P_EXT_MCLK, 1, 0, 0),1826	{ }1827};1828 1829static struct clk_rcg2 codec_digcodec_clk_src = {1830	.cmd_rcgr = 0x1c09c,1831	.mnd_width = 8,1832	.hid_width = 5,1833	.parent_map = gcc_xo_gpll1_emclk_sleep_map,1834	.freq_tbl = ftbl_codec_clk,1835	.clkr.hw.init = &(struct clk_init_data){1836		.name = "codec_digcodec_clk_src",1837		.parent_data = gcc_xo_gpll1_emclk_sleep_parent_data,1838		.num_parents = ARRAY_SIZE(gcc_xo_gpll1_emclk_sleep_parent_data),1839		.ops = &clk_rcg2_ops,1840	},1841};1842 1843static struct clk_branch gcc_codec_digcodec_clk = {1844	.halt_reg = 0x1c0b0,1845	.clkr = {1846		.enable_reg = 0x1c0b0,1847		.enable_mask = BIT(0),1848		.hw.init = &(struct clk_init_data){1849			.name = "gcc_ultaudio_codec_digcodec_clk",1850			.parent_hws = (const struct clk_hw*[]){1851				&codec_digcodec_clk_src.clkr.hw,1852			},1853			.num_parents = 1,1854			.flags = CLK_SET_RATE_PARENT,1855			.ops = &clk_branch2_ops,1856		},1857	},1858};1859 1860static struct clk_branch gcc_ultaudio_pcnoc_mport_clk = {1861	.halt_reg = 0x1c000,1862	.clkr = {1863		.enable_reg = 0x1c000,1864		.enable_mask = BIT(0),1865		.hw.init = &(struct clk_init_data){1866			.name = "gcc_ultaudio_pcnoc_mport_clk",1867			.parent_hws = (const struct clk_hw*[]){1868				&pcnoc_bfdcd_clk_src.clkr.hw,1869			},1870			.num_parents = 1,1871			.ops = &clk_branch2_ops,1872		},1873	},1874};1875 1876static struct clk_branch gcc_ultaudio_pcnoc_sway_clk = {1877	.halt_reg = 0x1c004,1878	.clkr = {1879		.enable_reg = 0x1c004,1880		.enable_mask = BIT(0),1881		.hw.init = &(struct clk_init_data){1882			.name = "gcc_ultaudio_pcnoc_sway_clk",1883			.parent_hws = (const struct clk_hw*[]){1884				&pcnoc_bfdcd_clk_src.clkr.hw,1885			},1886			.num_parents = 1,1887			.ops = &clk_branch2_ops,1888		},1889	},1890};1891 1892static const struct freq_tbl ftbl_gcc_venus0_vcodec0_clk[] = {1893	F(133330000, P_GPLL0, 6, 0, 0),1894	F(200000000, P_GPLL0, 4, 0, 0),1895	F(266670000, P_GPLL0, 3, 0, 0),1896	{ }1897};1898 1899static struct clk_rcg2 vcodec0_clk_src = {1900	.cmd_rcgr = 0x4C000,1901	.mnd_width = 8,1902	.hid_width = 5,1903	.parent_map = gcc_xo_gpll0_map,1904	.freq_tbl = ftbl_gcc_venus0_vcodec0_clk,1905	.clkr.hw.init = &(struct clk_init_data){1906		.name = "vcodec0_clk_src",1907		.parent_data = gcc_xo_gpll0_parent_data,1908		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),1909		.ops = &clk_rcg2_ops,1910	},1911};1912 1913static struct clk_branch gcc_blsp1_ahb_clk = {1914	.halt_reg = 0x01008,1915	.halt_check = BRANCH_HALT_VOTED,1916	.clkr = {1917		.enable_reg = 0x45004,1918		.enable_mask = BIT(10),1919		.hw.init = &(struct clk_init_data){1920			.name = "gcc_blsp1_ahb_clk",1921			.parent_hws = (const struct clk_hw*[]){1922				&pcnoc_bfdcd_clk_src.clkr.hw,1923			},1924			.num_parents = 1,1925			.ops = &clk_branch2_ops,1926		},1927	},1928};1929 1930static struct clk_branch gcc_blsp1_sleep_clk = {1931	.halt_reg = 0x01004,1932	.clkr = {1933		.enable_reg = 0x01004,1934		.enable_mask = BIT(0),1935		.hw.init = &(struct clk_init_data){1936			.name = "gcc_blsp1_sleep_clk",1937			.ops = &clk_branch2_ops,1938		},1939	},1940};1941 1942static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {1943	.halt_reg = 0x02008,1944	.clkr = {1945		.enable_reg = 0x02008,1946		.enable_mask = BIT(0),1947		.hw.init = &(struct clk_init_data){1948			.name = "gcc_blsp1_qup1_i2c_apps_clk",1949			.parent_hws = (const struct clk_hw*[]){1950				&blsp1_qup1_i2c_apps_clk_src.clkr.hw,1951			},1952			.num_parents = 1,1953			.flags = CLK_SET_RATE_PARENT,1954			.ops = &clk_branch2_ops,1955		},1956	},1957};1958 1959static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {1960	.halt_reg = 0x02004,1961	.clkr = {1962		.enable_reg = 0x02004,1963		.enable_mask = BIT(0),1964		.hw.init = &(struct clk_init_data){1965			.name = "gcc_blsp1_qup1_spi_apps_clk",1966			.parent_hws = (const struct clk_hw*[]){1967				&blsp1_qup1_spi_apps_clk_src.clkr.hw,1968			},1969			.num_parents = 1,1970			.flags = CLK_SET_RATE_PARENT,1971			.ops = &clk_branch2_ops,1972		},1973	},1974};1975 1976static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {1977	.halt_reg = 0x03010,1978	.clkr = {1979		.enable_reg = 0x03010,1980		.enable_mask = BIT(0),1981		.hw.init = &(struct clk_init_data){1982			.name = "gcc_blsp1_qup2_i2c_apps_clk",1983			.parent_hws = (const struct clk_hw*[]){1984				&blsp1_qup2_i2c_apps_clk_src.clkr.hw,1985			},1986			.num_parents = 1,1987			.flags = CLK_SET_RATE_PARENT,1988			.ops = &clk_branch2_ops,1989		},1990	},1991};1992 1993static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {1994	.halt_reg = 0x0300c,1995	.clkr = {1996		.enable_reg = 0x0300c,1997		.enable_mask = BIT(0),1998		.hw.init = &(struct clk_init_data){1999			.name = "gcc_blsp1_qup2_spi_apps_clk",2000			.parent_hws = (const struct clk_hw*[]){2001				&blsp1_qup2_spi_apps_clk_src.clkr.hw,2002			},2003			.num_parents = 1,2004			.flags = CLK_SET_RATE_PARENT,2005			.ops = &clk_branch2_ops,2006		},2007	},2008};2009 2010static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {2011	.halt_reg = 0x04020,2012	.clkr = {2013		.enable_reg = 0x04020,2014		.enable_mask = BIT(0),2015		.hw.init = &(struct clk_init_data){2016			.name = "gcc_blsp1_qup3_i2c_apps_clk",2017			.parent_hws = (const struct clk_hw*[]){2018				&blsp1_qup3_i2c_apps_clk_src.clkr.hw,2019			},2020			.num_parents = 1,2021			.flags = CLK_SET_RATE_PARENT,2022			.ops = &clk_branch2_ops,2023		},2024	},2025};2026 2027static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {2028	.halt_reg = 0x0401c,2029	.clkr = {2030		.enable_reg = 0x0401c,2031		.enable_mask = BIT(0),2032		.hw.init = &(struct clk_init_data){2033			.name = "gcc_blsp1_qup3_spi_apps_clk",2034			.parent_hws = (const struct clk_hw*[]){2035				&blsp1_qup3_spi_apps_clk_src.clkr.hw,2036			},2037			.num_parents = 1,2038			.flags = CLK_SET_RATE_PARENT,2039			.ops = &clk_branch2_ops,2040		},2041	},2042};2043 2044static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {2045	.halt_reg = 0x05020,2046	.clkr = {2047		.enable_reg = 0x05020,2048		.enable_mask = BIT(0),2049		.hw.init = &(struct clk_init_data){2050			.name = "gcc_blsp1_qup4_i2c_apps_clk",2051			.parent_hws = (const struct clk_hw*[]){2052				&blsp1_qup4_i2c_apps_clk_src.clkr.hw,2053			},2054			.num_parents = 1,2055			.flags = CLK_SET_RATE_PARENT,2056			.ops = &clk_branch2_ops,2057		},2058	},2059};2060 2061static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {2062	.halt_reg = 0x0501c,2063	.clkr = {2064		.enable_reg = 0x0501c,2065		.enable_mask = BIT(0),2066		.hw.init = &(struct clk_init_data){2067			.name = "gcc_blsp1_qup4_spi_apps_clk",2068			.parent_hws = (const struct clk_hw*[]){2069				&blsp1_qup4_spi_apps_clk_src.clkr.hw,2070			},2071			.num_parents = 1,2072			.flags = CLK_SET_RATE_PARENT,2073			.ops = &clk_branch2_ops,2074		},2075	},2076};2077 2078static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {2079	.halt_reg = 0x06020,2080	.clkr = {2081		.enable_reg = 0x06020,2082		.enable_mask = BIT(0),2083		.hw.init = &(struct clk_init_data){2084			.name = "gcc_blsp1_qup5_i2c_apps_clk",2085			.parent_hws = (const struct clk_hw*[]){2086				&blsp1_qup5_i2c_apps_clk_src.clkr.hw,2087			},2088			.num_parents = 1,2089			.flags = CLK_SET_RATE_PARENT,2090			.ops = &clk_branch2_ops,2091		},2092	},2093};2094 2095static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {2096	.halt_reg = 0x0601c,2097	.clkr = {2098		.enable_reg = 0x0601c,2099		.enable_mask = BIT(0),2100		.hw.init = &(struct clk_init_data){2101			.name = "gcc_blsp1_qup5_spi_apps_clk",2102			.parent_hws = (const struct clk_hw*[]){2103				&blsp1_qup5_spi_apps_clk_src.clkr.hw,2104			},2105			.num_parents = 1,2106			.flags = CLK_SET_RATE_PARENT,2107			.ops = &clk_branch2_ops,2108		},2109	},2110};2111 2112static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {2113	.halt_reg = 0x07020,2114	.clkr = {2115		.enable_reg = 0x07020,2116		.enable_mask = BIT(0),2117		.hw.init = &(struct clk_init_data){2118			.name = "gcc_blsp1_qup6_i2c_apps_clk",2119			.parent_hws = (const struct clk_hw*[]){2120				&blsp1_qup6_i2c_apps_clk_src.clkr.hw,2121			},2122			.num_parents = 1,2123			.flags = CLK_SET_RATE_PARENT,2124			.ops = &clk_branch2_ops,2125		},2126	},2127};2128 2129static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {2130	.halt_reg = 0x0701c,2131	.clkr = {2132		.enable_reg = 0x0701c,2133		.enable_mask = BIT(0),2134		.hw.init = &(struct clk_init_data){2135			.name = "gcc_blsp1_qup6_spi_apps_clk",2136			.parent_hws = (const struct clk_hw*[]){2137				&blsp1_qup6_spi_apps_clk_src.clkr.hw,2138			},2139			.num_parents = 1,2140			.flags = CLK_SET_RATE_PARENT,2141			.ops = &clk_branch2_ops,2142		},2143	},2144};2145 2146static struct clk_branch gcc_blsp1_uart1_apps_clk = {2147	.halt_reg = 0x0203c,2148	.clkr = {2149		.enable_reg = 0x0203c,2150		.enable_mask = BIT(0),2151		.hw.init = &(struct clk_init_data){2152			.name = "gcc_blsp1_uart1_apps_clk",2153			.parent_hws = (const struct clk_hw*[]){2154				&blsp1_uart1_apps_clk_src.clkr.hw,2155			},2156			.num_parents = 1,2157			.flags = CLK_SET_RATE_PARENT,2158			.ops = &clk_branch2_ops,2159		},2160	},2161};2162 2163static struct clk_branch gcc_blsp1_uart2_apps_clk = {2164	.halt_reg = 0x0302c,2165	.clkr = {2166		.enable_reg = 0x0302c,2167		.enable_mask = BIT(0),2168		.hw.init = &(struct clk_init_data){2169			.name = "gcc_blsp1_uart2_apps_clk",2170			.parent_hws = (const struct clk_hw*[]){2171				&blsp1_uart2_apps_clk_src.clkr.hw,2172			},2173			.num_parents = 1,2174			.flags = CLK_SET_RATE_PARENT,2175			.ops = &clk_branch2_ops,2176		},2177	},2178};2179 2180static struct clk_branch gcc_boot_rom_ahb_clk = {2181	.halt_reg = 0x1300c,2182	.halt_check = BRANCH_HALT_VOTED,2183	.clkr = {2184		.enable_reg = 0x45004,2185		.enable_mask = BIT(7),2186		.hw.init = &(struct clk_init_data){2187			.name = "gcc_boot_rom_ahb_clk",2188			.parent_hws = (const struct clk_hw*[]){2189				&pcnoc_bfdcd_clk_src.clkr.hw,2190			},2191			.num_parents = 1,2192			.ops = &clk_branch2_ops,2193		},2194	},2195};2196 2197static struct clk_branch gcc_camss_cci_ahb_clk = {2198	.halt_reg = 0x5101c,2199	.clkr = {2200		.enable_reg = 0x5101c,2201		.enable_mask = BIT(0),2202		.hw.init = &(struct clk_init_data){2203			.name = "gcc_camss_cci_ahb_clk",2204			.parent_hws = (const struct clk_hw*[]){2205				&camss_ahb_clk_src.clkr.hw,2206			},2207			.num_parents = 1,2208			.flags = CLK_SET_RATE_PARENT,2209			.ops = &clk_branch2_ops,2210		},2211	},2212};2213 2214static struct clk_branch gcc_camss_cci_clk = {2215	.halt_reg = 0x51018,2216	.clkr = {2217		.enable_reg = 0x51018,2218		.enable_mask = BIT(0),2219		.hw.init = &(struct clk_init_data){2220			.name = "gcc_camss_cci_clk",2221			.parent_hws = (const struct clk_hw*[]){2222				&cci_clk_src.clkr.hw,2223			},2224			.num_parents = 1,2225			.flags = CLK_SET_RATE_PARENT,2226			.ops = &clk_branch2_ops,2227		},2228	},2229};2230 2231static struct clk_branch gcc_camss_csi0_ahb_clk = {2232	.halt_reg = 0x4e040,2233	.clkr = {2234		.enable_reg = 0x4e040,2235		.enable_mask = BIT(0),2236		.hw.init = &(struct clk_init_data){2237			.name = "gcc_camss_csi0_ahb_clk",2238			.parent_hws = (const struct clk_hw*[]){2239				&camss_ahb_clk_src.clkr.hw,2240			},2241			.num_parents = 1,2242			.flags = CLK_SET_RATE_PARENT,2243			.ops = &clk_branch2_ops,2244		},2245	},2246};2247 2248static struct clk_branch gcc_camss_csi0_clk = {2249	.halt_reg = 0x4e03c,2250	.clkr = {2251		.enable_reg = 0x4e03c,2252		.enable_mask = BIT(0),2253		.hw.init = &(struct clk_init_data){2254			.name = "gcc_camss_csi0_clk",2255			.parent_hws = (const struct clk_hw*[]){2256				&csi0_clk_src.clkr.hw,2257			},2258			.num_parents = 1,2259			.flags = CLK_SET_RATE_PARENT,2260			.ops = &clk_branch2_ops,2261		},2262	},2263};2264 2265static struct clk_branch gcc_camss_csi0phy_clk = {2266	.halt_reg = 0x4e048,2267	.clkr = {2268		.enable_reg = 0x4e048,2269		.enable_mask = BIT(0),2270		.hw.init = &(struct clk_init_data){2271			.name = "gcc_camss_csi0phy_clk",2272			.parent_hws = (const struct clk_hw*[]){2273				&csi0_clk_src.clkr.hw,2274			},2275			.num_parents = 1,2276			.flags = CLK_SET_RATE_PARENT,2277			.ops = &clk_branch2_ops,2278		},2279	},2280};2281 2282static struct clk_branch gcc_camss_csi0pix_clk = {2283	.halt_reg = 0x4e058,2284	.clkr = {2285		.enable_reg = 0x4e058,2286		.enable_mask = BIT(0),2287		.hw.init = &(struct clk_init_data){2288			.name = "gcc_camss_csi0pix_clk",2289			.parent_hws = (const struct clk_hw*[]){2290				&csi0_clk_src.clkr.hw,2291			},2292			.num_parents = 1,2293			.flags = CLK_SET_RATE_PARENT,2294			.ops = &clk_branch2_ops,2295		},2296	},2297};2298 2299static struct clk_branch gcc_camss_csi0rdi_clk = {2300	.halt_reg = 0x4e050,2301	.clkr = {2302		.enable_reg = 0x4e050,2303		.enable_mask = BIT(0),2304		.hw.init = &(struct clk_init_data){2305			.name = "gcc_camss_csi0rdi_clk",2306			.parent_hws = (const struct clk_hw*[]){2307				&csi0_clk_src.clkr.hw,2308			},2309			.num_parents = 1,2310			.flags = CLK_SET_RATE_PARENT,2311			.ops = &clk_branch2_ops,2312		},2313	},2314};2315 2316static struct clk_branch gcc_camss_csi1_ahb_clk = {2317	.halt_reg = 0x4f040,2318	.clkr = {2319		.enable_reg = 0x4f040,2320		.enable_mask = BIT(0),2321		.hw.init = &(struct clk_init_data){2322			.name = "gcc_camss_csi1_ahb_clk",2323			.parent_hws = (const struct clk_hw*[]){2324				&camss_ahb_clk_src.clkr.hw,2325			},2326			.num_parents = 1,2327			.flags = CLK_SET_RATE_PARENT,2328			.ops = &clk_branch2_ops,2329		},2330	},2331};2332 2333static struct clk_branch gcc_camss_csi1_clk = {2334	.halt_reg = 0x4f03c,2335	.clkr = {2336		.enable_reg = 0x4f03c,2337		.enable_mask = BIT(0),2338		.hw.init = &(struct clk_init_data){2339			.name = "gcc_camss_csi1_clk",2340			.parent_hws = (const struct clk_hw*[]){2341				&csi1_clk_src.clkr.hw,2342			},2343			.num_parents = 1,2344			.flags = CLK_SET_RATE_PARENT,2345			.ops = &clk_branch2_ops,2346		},2347	},2348};2349 2350static struct clk_branch gcc_camss_csi1phy_clk = {2351	.halt_reg = 0x4f048,2352	.clkr = {2353		.enable_reg = 0x4f048,2354		.enable_mask = BIT(0),2355		.hw.init = &(struct clk_init_data){2356			.name = "gcc_camss_csi1phy_clk",2357			.parent_hws = (const struct clk_hw*[]){2358				&csi1_clk_src.clkr.hw,2359			},2360			.num_parents = 1,2361			.flags = CLK_SET_RATE_PARENT,2362			.ops = &clk_branch2_ops,2363		},2364	},2365};2366 2367static struct clk_branch gcc_camss_csi1pix_clk = {2368	.halt_reg = 0x4f058,2369	.clkr = {2370		.enable_reg = 0x4f058,2371		.enable_mask = BIT(0),2372		.hw.init = &(struct clk_init_data){2373			.name = "gcc_camss_csi1pix_clk",2374			.parent_hws = (const struct clk_hw*[]){2375				&csi1_clk_src.clkr.hw,2376			},2377			.num_parents = 1,2378			.flags = CLK_SET_RATE_PARENT,2379			.ops = &clk_branch2_ops,2380		},2381	},2382};2383 2384static struct clk_branch gcc_camss_csi1rdi_clk = {2385	.halt_reg = 0x4f050,2386	.clkr = {2387		.enable_reg = 0x4f050,2388		.enable_mask = BIT(0),2389		.hw.init = &(struct clk_init_data){2390			.name = "gcc_camss_csi1rdi_clk",2391			.parent_hws = (const struct clk_hw*[]){2392				&csi1_clk_src.clkr.hw,2393			},2394			.num_parents = 1,2395			.flags = CLK_SET_RATE_PARENT,2396			.ops = &clk_branch2_ops,2397		},2398	},2399};2400 2401static struct clk_branch gcc_camss_csi2_ahb_clk = {2402	.halt_reg = 0x3c040,2403	.clkr = {2404		.enable_reg = 0x3c040,2405		.enable_mask = BIT(0),2406		.hw.init = &(struct clk_init_data){2407			.name = "gcc_camss_csi2_ahb_clk",2408			.parent_hws = (const struct clk_hw*[]){2409				&camss_ahb_clk_src.clkr.hw,2410			},2411			.num_parents = 1,2412			.flags = CLK_SET_RATE_PARENT,2413			.ops = &clk_branch2_ops,2414		},2415	},2416};2417 2418static struct clk_branch gcc_camss_csi2_clk = {2419	.halt_reg = 0x3c03c,2420	.clkr = {2421		.enable_reg = 0x3c03c,2422		.enable_mask = BIT(0),2423		.hw.init = &(struct clk_init_data){2424			.name = "gcc_camss_csi2_clk",2425			.parent_hws = (const struct clk_hw*[]){2426				&csi2_clk_src.clkr.hw,2427			},2428			.num_parents = 1,2429			.flags = CLK_SET_RATE_PARENT,2430			.ops = &clk_branch2_ops,2431		},2432	},2433};2434 2435static struct clk_branch gcc_camss_csi2phy_clk = {2436	.halt_reg = 0x3c048,2437	.clkr = {2438		.enable_reg = 0x3c048,2439		.enable_mask = BIT(0),2440		.hw.init = &(struct clk_init_data){2441			.name = "gcc_camss_csi2phy_clk",2442			.parent_hws = (const struct clk_hw*[]){2443				&csi2_clk_src.clkr.hw,2444			},2445			.num_parents = 1,2446			.flags = CLK_SET_RATE_PARENT,2447			.ops = &clk_branch2_ops,2448		},2449	},2450};2451 2452static struct clk_branch gcc_camss_csi2pix_clk = {2453	.halt_reg = 0x3c058,2454	.clkr = {2455		.enable_reg = 0x3c058,2456		.enable_mask = BIT(0),2457		.hw.init = &(struct clk_init_data){2458			.name = "gcc_camss_csi2pix_clk",2459			.parent_hws = (const struct clk_hw*[]){2460				&csi2_clk_src.clkr.hw,2461			},2462			.num_parents = 1,2463			.flags = CLK_SET_RATE_PARENT,2464			.ops = &clk_branch2_ops,2465		},2466	},2467};2468 2469static struct clk_branch gcc_camss_csi2rdi_clk = {2470	.halt_reg = 0x3c050,2471	.clkr = {2472		.enable_reg = 0x3c050,2473		.enable_mask = BIT(0),2474		.hw.init = &(struct clk_init_data){2475			.name = "gcc_camss_csi2rdi_clk",2476			.parent_hws = (const struct clk_hw*[]){2477				&csi2_clk_src.clkr.hw,2478			},2479			.num_parents = 1,2480			.flags = CLK_SET_RATE_PARENT,2481			.ops = &clk_branch2_ops,2482		},2483	},2484};2485 2486static struct clk_branch gcc_camss_csi_vfe0_clk = {2487	.halt_reg = 0x58050,2488	.clkr = {2489		.enable_reg = 0x58050,2490		.enable_mask = BIT(0),2491		.hw.init = &(struct clk_init_data){2492			.name = "gcc_camss_csi_vfe0_clk",2493			.parent_hws = (const struct clk_hw*[]){2494				&vfe0_clk_src.clkr.hw,2495			},2496			.num_parents = 1,2497			.flags = CLK_SET_RATE_PARENT,2498			.ops = &clk_branch2_ops,2499		},2500	},2501};2502 2503static struct clk_branch gcc_camss_gp0_clk = {2504	.halt_reg = 0x54018,2505	.clkr = {2506		.enable_reg = 0x54018,2507		.enable_mask = BIT(0),2508		.hw.init = &(struct clk_init_data){2509			.name = "gcc_camss_gp0_clk",2510			.parent_hws = (const struct clk_hw*[]){2511				&camss_gp0_clk_src.clkr.hw,2512			},2513			.num_parents = 1,2514			.flags = CLK_SET_RATE_PARENT,2515			.ops = &clk_branch2_ops,2516		},2517	},2518};2519 2520static struct clk_branch gcc_camss_gp1_clk = {2521	.halt_reg = 0x55018,2522	.clkr = {2523		.enable_reg = 0x55018,2524		.enable_mask = BIT(0),2525		.hw.init = &(struct clk_init_data){2526			.name = "gcc_camss_gp1_clk",2527			.parent_hws = (const struct clk_hw*[]){2528				&camss_gp1_clk_src.clkr.hw,2529			},2530			.num_parents = 1,2531			.flags = CLK_SET_RATE_PARENT,2532			.ops = &clk_branch2_ops,2533		},2534	},2535};2536 2537static struct clk_branch gcc_camss_ispif_ahb_clk = {2538	.halt_reg = 0x50004,2539	.clkr = {2540		.enable_reg = 0x50004,2541		.enable_mask = BIT(0),2542		.hw.init = &(struct clk_init_data){2543			.name = "gcc_camss_ispif_ahb_clk",2544			.parent_hws = (const struct clk_hw*[]){2545				&camss_ahb_clk_src.clkr.hw,2546			},2547			.num_parents = 1,2548			.flags = CLK_SET_RATE_PARENT,2549			.ops = &clk_branch2_ops,2550		},2551	},2552};2553 2554static struct clk_branch gcc_camss_jpeg0_clk = {2555	.halt_reg = 0x57020,2556	.clkr = {2557		.enable_reg = 0x57020,2558		.enable_mask = BIT(0),2559		.hw.init = &(struct clk_init_data){2560			.name = "gcc_camss_jpeg0_clk",2561			.parent_hws = (const struct clk_hw*[]){2562				&jpeg0_clk_src.clkr.hw,2563			},2564			.num_parents = 1,2565			.flags = CLK_SET_RATE_PARENT,2566			.ops = &clk_branch2_ops,2567		},2568	},2569};2570 2571static struct clk_branch gcc_camss_jpeg_ahb_clk = {2572	.halt_reg = 0x57024,2573	.clkr = {2574		.enable_reg = 0x57024,2575		.enable_mask = BIT(0),2576		.hw.init = &(struct clk_init_data){2577			.name = "gcc_camss_jpeg_ahb_clk",2578			.parent_hws = (const struct clk_hw*[]){2579				&camss_ahb_clk_src.clkr.hw,2580			},2581			.num_parents = 1,2582			.flags = CLK_SET_RATE_PARENT,2583			.ops = &clk_branch2_ops,2584		},2585	},2586};2587 2588static struct clk_branch gcc_camss_jpeg_axi_clk = {2589	.halt_reg = 0x57028,2590	.clkr = {2591		.enable_reg = 0x57028,2592		.enable_mask = BIT(0),2593		.hw.init = &(struct clk_init_data){2594			.name = "gcc_camss_jpeg_axi_clk",2595			.parent_hws = (const struct clk_hw*[]){2596				&system_mm_noc_bfdcd_clk_src.clkr.hw,2597			},2598			.num_parents = 1,2599			.flags = CLK_SET_RATE_PARENT,2600			.ops = &clk_branch2_ops,2601		},2602	},2603};2604 2605static struct clk_branch gcc_camss_mclk0_clk = {2606	.halt_reg = 0x52018,2607	.clkr = {2608		.enable_reg = 0x52018,2609		.enable_mask = BIT(0),2610		.hw.init = &(struct clk_init_data){2611			.name = "gcc_camss_mclk0_clk",2612			.parent_hws = (const struct clk_hw*[]){2613				&mclk0_clk_src.clkr.hw,2614			},2615			.num_parents = 1,2616			.flags = CLK_SET_RATE_PARENT,2617			.ops = &clk_branch2_ops,2618		},2619	},2620};2621 2622static struct clk_branch gcc_camss_mclk1_clk = {2623	.halt_reg = 0x53018,2624	.clkr = {2625		.enable_reg = 0x53018,2626		.enable_mask = BIT(0),2627		.hw.init = &(struct clk_init_data){2628			.name = "gcc_camss_mclk1_clk",2629			.parent_hws = (const struct clk_hw*[]){2630				&mclk1_clk_src.clkr.hw,2631			},2632			.num_parents = 1,2633			.flags = CLK_SET_RATE_PARENT,2634			.ops = &clk_branch2_ops,2635		},2636	},2637};2638 2639static struct clk_branch gcc_camss_micro_ahb_clk = {2640	.halt_reg = 0x5600c,2641	.clkr = {2642		.enable_reg = 0x5600c,2643		.enable_mask = BIT(0),2644		.hw.init = &(struct clk_init_data){2645			.name = "gcc_camss_micro_ahb_clk",2646			.parent_hws = (const struct clk_hw*[]){2647				&camss_ahb_clk_src.clkr.hw,2648			},2649			.num_parents = 1,2650			.flags = CLK_SET_RATE_PARENT,2651			.ops = &clk_branch2_ops,2652		},2653	},2654};2655 2656static struct clk_branch gcc_camss_csi0phytimer_clk = {2657	.halt_reg = 0x4e01c,2658	.clkr = {2659		.enable_reg = 0x4e01c,2660		.enable_mask = BIT(0),2661		.hw.init = &(struct clk_init_data){2662			.name = "gcc_camss_csi0phytimer_clk",2663			.parent_hws = (const struct clk_hw*[]){2664				&csi0phytimer_clk_src.clkr.hw,2665			},2666			.num_parents = 1,2667			.flags = CLK_SET_RATE_PARENT,2668			.ops = &clk_branch2_ops,2669		},2670	},2671};2672 2673static struct clk_branch gcc_camss_csi1phytimer_clk = {2674	.halt_reg = 0x4f01c,2675	.clkr = {2676		.enable_reg = 0x4f01c,2677		.enable_mask = BIT(0),2678		.hw.init = &(struct clk_init_data){2679			.name = "gcc_camss_csi1phytimer_clk",2680			.parent_hws = (const struct clk_hw*[]){2681				&csi1phytimer_clk_src.clkr.hw,2682			},2683			.num_parents = 1,2684			.flags = CLK_SET_RATE_PARENT,2685			.ops = &clk_branch2_ops,2686		},2687	},2688};2689 2690static struct clk_branch gcc_camss_ahb_clk = {2691	.halt_reg = 0x5a014,2692	.clkr = {2693		.enable_reg = 0x5a014,2694		.enable_mask = BIT(0),2695		.hw.init = &(struct clk_init_data){2696			.name = "gcc_camss_ahb_clk",2697			.parent_hws = (const struct clk_hw*[]){2698				&camss_ahb_clk_src.clkr.hw,2699			},2700			.num_parents = 1,2701			.flags = CLK_SET_RATE_PARENT,2702			.ops = &clk_branch2_ops,2703		},2704	},2705};2706 2707static struct clk_branch gcc_camss_top_ahb_clk = {2708	.halt_reg = 0x56004,2709	.clkr = {2710		.enable_reg = 0x56004,2711		.enable_mask = BIT(0),2712		.hw.init = &(struct clk_init_data){2713			.name = "gcc_camss_top_ahb_clk",2714			.parent_hws = (const struct clk_hw*[]){2715				&pcnoc_bfdcd_clk_src.clkr.hw,2716			},2717			.num_parents = 1,2718			.flags = CLK_SET_RATE_PARENT,2719			.ops = &clk_branch2_ops,2720		},2721	},2722};2723 2724static struct clk_branch gcc_camss_cpp_ahb_clk = {2725	.halt_reg = 0x58040,2726	.clkr = {2727		.enable_reg = 0x58040,2728		.enable_mask = BIT(0),2729		.hw.init = &(struct clk_init_data){2730			.name = "gcc_camss_cpp_ahb_clk",2731			.parent_hws = (const struct clk_hw*[]){2732				&camss_ahb_clk_src.clkr.hw,2733			},2734			.num_parents = 1,2735			.flags = CLK_SET_RATE_PARENT,2736			.ops = &clk_branch2_ops,2737		},2738	},2739};2740 2741static struct clk_branch gcc_camss_cpp_clk = {2742	.halt_reg = 0x5803c,2743	.clkr = {2744		.enable_reg = 0x5803c,2745		.enable_mask = BIT(0),2746		.hw.init = &(struct clk_init_data){2747			.name = "gcc_camss_cpp_clk",2748			.parent_hws = (const struct clk_hw*[]){2749				&cpp_clk_src.clkr.hw,2750			},2751			.num_parents = 1,2752			.flags = CLK_SET_RATE_PARENT,2753			.ops = &clk_branch2_ops,2754		},2755	},2756};2757 2758static struct clk_branch gcc_camss_vfe0_clk = {2759	.halt_reg = 0x58038,2760	.clkr = {2761		.enable_reg = 0x58038,2762		.enable_mask = BIT(0),2763		.hw.init = &(struct clk_init_data){2764			.name = "gcc_camss_vfe0_clk",2765			.parent_hws = (const struct clk_hw*[]){2766				&vfe0_clk_src.clkr.hw,2767			},2768			.num_parents = 1,2769			.flags = CLK_SET_RATE_PARENT,2770			.ops = &clk_branch2_ops,2771		},2772	},2773};2774 2775static struct clk_branch gcc_camss_vfe_ahb_clk = {2776	.halt_reg = 0x58044,2777	.clkr = {2778		.enable_reg = 0x58044,2779		.enable_mask = BIT(0),2780		.hw.init = &(struct clk_init_data){2781			.name = "gcc_camss_vfe_ahb_clk",2782			.parent_hws = (const struct clk_hw*[]){2783				&camss_ahb_clk_src.clkr.hw,2784			},2785			.num_parents = 1,2786			.flags = CLK_SET_RATE_PARENT,2787			.ops = &clk_branch2_ops,2788		},2789	},2790};2791 2792static struct clk_branch gcc_camss_vfe_axi_clk = {2793	.halt_reg = 0x58048,2794	.clkr = {2795		.enable_reg = 0x58048,2796		.enable_mask = BIT(0),2797		.hw.init = &(struct clk_init_data){2798			.name = "gcc_camss_vfe_axi_clk",2799			.parent_hws = (const struct clk_hw*[]){2800				&system_mm_noc_bfdcd_clk_src.clkr.hw,2801			},2802			.num_parents = 1,2803			.flags = CLK_SET_RATE_PARENT,2804			.ops = &clk_branch2_ops,2805		},2806	},2807};2808 2809static struct clk_branch gcc_crypto_ahb_clk = {2810	.halt_reg = 0x16024,2811	.halt_check = BRANCH_HALT_VOTED,2812	.clkr = {2813		.enable_reg = 0x45004,2814		.enable_mask = BIT(0),2815		.hw.init = &(struct clk_init_data){2816			.name = "gcc_crypto_ahb_clk",2817			.parent_hws = (const struct clk_hw*[]){2818				&pcnoc_bfdcd_clk_src.clkr.hw,2819			},2820			.num_parents = 1,2821			.flags = CLK_SET_RATE_PARENT,2822			.ops = &clk_branch2_ops,2823		},2824	},2825};2826 2827static struct clk_branch gcc_crypto_axi_clk = {2828	.halt_reg = 0x16020,2829	.halt_check = BRANCH_HALT_VOTED,2830	.clkr = {2831		.enable_reg = 0x45004,2832		.enable_mask = BIT(1),2833		.hw.init = &(struct clk_init_data){2834			.name = "gcc_crypto_axi_clk",2835			.parent_hws = (const struct clk_hw*[]){2836				&pcnoc_bfdcd_clk_src.clkr.hw,2837			},2838			.num_parents = 1,2839			.flags = CLK_SET_RATE_PARENT,2840			.ops = &clk_branch2_ops,2841		},2842	},2843};2844 2845static struct clk_branch gcc_crypto_clk = {2846	.halt_reg = 0x1601c,2847	.halt_check = BRANCH_HALT_VOTED,2848	.clkr = {2849		.enable_reg = 0x45004,2850		.enable_mask = BIT(2),2851		.hw.init = &(struct clk_init_data){2852			.name = "gcc_crypto_clk",2853			.parent_hws = (const struct clk_hw*[]){2854				&crypto_clk_src.clkr.hw,2855			},2856			.num_parents = 1,2857			.flags = CLK_SET_RATE_PARENT,2858			.ops = &clk_branch2_ops,2859		},2860	},2861};2862 2863static struct clk_branch gcc_oxili_gmem_clk = {2864	.halt_reg = 0x59024,2865	.clkr = {2866		.enable_reg = 0x59024,2867		.enable_mask = BIT(0),2868		.hw.init = &(struct clk_init_data){2869			.name = "gcc_oxili_gmem_clk",2870			.parent_hws = (const struct clk_hw*[]){2871				&gfx3d_clk_src.clkr.hw,2872			},2873			.num_parents = 1,2874			.flags = CLK_SET_RATE_PARENT,2875			.ops = &clk_branch2_ops,2876		},2877	},2878};2879 2880static struct clk_branch gcc_gp1_clk = {2881	.halt_reg = 0x08000,2882	.clkr = {2883		.enable_reg = 0x08000,2884		.enable_mask = BIT(0),2885		.hw.init = &(struct clk_init_data){2886			.name = "gcc_gp1_clk",2887			.parent_hws = (const struct clk_hw*[]){2888				&gp1_clk_src.clkr.hw,2889			},2890			.num_parents = 1,2891			.flags = CLK_SET_RATE_PARENT,2892			.ops = &clk_branch2_ops,2893		},2894	},2895};2896 2897static struct clk_branch gcc_gp2_clk = {2898	.halt_reg = 0x09000,2899	.clkr = {2900		.enable_reg = 0x09000,2901		.enable_mask = BIT(0),2902		.hw.init = &(struct clk_init_data){2903			.name = "gcc_gp2_clk",2904			.parent_hws = (const struct clk_hw*[]){2905				&gp2_clk_src.clkr.hw,2906			},2907			.num_parents = 1,2908			.flags = CLK_SET_RATE_PARENT,2909			.ops = &clk_branch2_ops,2910		},2911	},2912};2913 2914static struct clk_branch gcc_gp3_clk = {2915	.halt_reg = 0x0a000,2916	.clkr = {2917		.enable_reg = 0x0a000,2918		.enable_mask = BIT(0),2919		.hw.init = &(struct clk_init_data){2920			.name = "gcc_gp3_clk",2921			.parent_hws = (const struct clk_hw*[]){2922				&gp3_clk_src.clkr.hw,2923			},2924			.num_parents = 1,2925			.flags = CLK_SET_RATE_PARENT,2926			.ops = &clk_branch2_ops,2927		},2928	},2929};2930 2931static struct clk_branch gcc_mdss_ahb_clk = {2932	.halt_reg = 0x4d07c,2933	.clkr = {2934		.enable_reg = 0x4d07c,2935		.enable_mask = BIT(0),2936		.hw.init = &(struct clk_init_data){2937			.name = "gcc_mdss_ahb_clk",2938			.parent_hws = (const struct clk_hw*[]){2939				&pcnoc_bfdcd_clk_src.clkr.hw,2940			},2941			.num_parents = 1,2942			.flags = CLK_SET_RATE_PARENT,2943			.ops = &clk_branch2_ops,2944		},2945	},2946};2947 2948static struct clk_branch gcc_mdss_axi_clk = {2949	.halt_reg = 0x4d080,2950	.clkr = {2951		.enable_reg = 0x4d080,2952		.enable_mask = BIT(0),2953		.hw.init = &(struct clk_init_data){2954			.name = "gcc_mdss_axi_clk",2955			.parent_hws = (const struct clk_hw*[]){2956				&system_mm_noc_bfdcd_clk_src.clkr.hw,2957			},2958			.num_parents = 1,2959			.flags = CLK_SET_RATE_PARENT,2960			.ops = &clk_branch2_ops,2961		},2962	},2963};2964 2965static struct clk_branch gcc_mdss_byte0_clk = {2966	.halt_reg = 0x4d094,2967	.clkr = {2968		.enable_reg = 0x4d094,2969		.enable_mask = BIT(0),2970		.hw.init = &(struct clk_init_data){2971			.name = "gcc_mdss_byte0_clk",2972			.parent_hws = (const struct clk_hw*[]){2973				&byte0_clk_src.clkr.hw,2974			},2975			.num_parents = 1,2976			.flags = CLK_SET_RATE_PARENT,2977			.ops = &clk_branch2_ops,2978		},2979	},2980};2981 2982static struct clk_branch gcc_mdss_byte1_clk = {2983	.halt_reg = 0x4d0a0,2984	.clkr = {2985		.enable_reg = 0x4d0a0,2986		.enable_mask = BIT(0),2987		.hw.init = &(struct clk_init_data){2988			.name = "gcc_mdss_byte1_clk",2989			.parent_hws = (const struct clk_hw*[]){2990				&byte1_clk_src.clkr.hw,2991			},2992			.num_parents = 1,2993			.flags = CLK_SET_RATE_PARENT,2994			.ops = &clk_branch2_ops,2995		},2996	},2997};2998 2999static struct clk_branch gcc_mdss_esc0_clk = {3000	.halt_reg = 0x4d098,3001	.clkr = {3002		.enable_reg = 0x4d098,3003		.enable_mask = BIT(0),3004		.hw.init = &(struct clk_init_data){3005			.name = "gcc_mdss_esc0_clk",3006			.parent_hws = (const struct clk_hw*[]){3007				&esc0_clk_src.clkr.hw,3008			},3009			.num_parents = 1,3010			.flags = CLK_SET_RATE_PARENT,3011			.ops = &clk_branch2_ops,3012		},3013	},3014};3015 3016static struct clk_branch gcc_mdss_esc1_clk = {3017	.halt_reg = 0x4d09c,3018	.clkr = {3019		.enable_reg = 0x4d09c,3020		.enable_mask = BIT(0),3021		.hw.init = &(struct clk_init_data){3022			.name = "gcc_mdss_esc1_clk",3023			.parent_hws = (const struct clk_hw*[]){3024				&esc1_clk_src.clkr.hw,3025			},3026			.num_parents = 1,3027			.flags = CLK_SET_RATE_PARENT,3028			.ops = &clk_branch2_ops,3029		},3030	},3031};3032 3033static struct clk_branch gcc_mdss_mdp_clk = {3034	.halt_reg = 0x4D088,3035	.clkr = {3036		.enable_reg = 0x4D088,3037		.enable_mask = BIT(0),3038		.hw.init = &(struct clk_init_data){3039			.name = "gcc_mdss_mdp_clk",3040			.parent_hws = (const struct clk_hw*[]){3041				&mdp_clk_src.clkr.hw,3042			},3043			.num_parents = 1,3044			.flags = CLK_SET_RATE_PARENT,3045			.ops = &clk_branch2_ops,3046		},3047	},3048};3049 3050static struct clk_branch gcc_mdss_pclk0_clk = {3051	.halt_reg = 0x4d084,3052	.clkr = {3053		.enable_reg = 0x4d084,3054		.enable_mask = BIT(0),3055		.hw.init = &(struct clk_init_data){3056			.name = "gcc_mdss_pclk0_clk",3057			.parent_hws = (const struct clk_hw*[]){3058				&pclk0_clk_src.clkr.hw,3059			},3060			.num_parents = 1,3061			.flags = CLK_SET_RATE_PARENT,3062			.ops = &clk_branch2_ops,3063		},3064	},3065};3066 3067static struct clk_branch gcc_mdss_pclk1_clk = {3068	.halt_reg = 0x4d0a4,3069	.clkr = {3070		.enable_reg = 0x4d0a4,3071		.enable_mask = BIT(0),3072		.hw.init = &(struct clk_init_data){3073			.name = "gcc_mdss_pclk1_clk",3074			.parent_hws = (const struct clk_hw*[]){3075				&pclk1_clk_src.clkr.hw,3076			},3077			.num_parents = 1,3078			.flags = CLK_SET_RATE_PARENT,3079			.ops = &clk_branch2_ops,3080		},3081	},3082};3083 3084static struct clk_branch gcc_mdss_vsync_clk = {3085	.halt_reg = 0x4d090,3086	.clkr = {3087		.enable_reg = 0x4d090,3088		.enable_mask = BIT(0),3089		.hw.init = &(struct clk_init_data){3090			.name = "gcc_mdss_vsync_clk",3091			.parent_hws = (const struct clk_hw*[]){3092				&vsync_clk_src.clkr.hw,3093			},3094			.num_parents = 1,3095			.flags = CLK_SET_RATE_PARENT,3096			.ops = &clk_branch2_ops,3097		},3098	},3099};3100 3101static struct clk_branch gcc_mss_cfg_ahb_clk = {3102	.halt_reg = 0x49000,3103	.clkr = {3104		.enable_reg = 0x49000,3105		.enable_mask = BIT(0),3106		.hw.init = &(struct clk_init_data){3107			.name = "gcc_mss_cfg_ahb_clk",3108			.parent_hws = (const struct clk_hw*[]){3109				&pcnoc_bfdcd_clk_src.clkr.hw,3110			},3111			.num_parents = 1,3112			.flags = CLK_SET_RATE_PARENT,3113			.ops = &clk_branch2_ops,3114		},3115	},3116};3117 3118static struct clk_branch gcc_mss_q6_bimc_axi_clk = {3119	.halt_reg = 0x49004,3120	.clkr = {3121		.enable_reg = 0x49004,3122		.enable_mask = BIT(0),3123		.hw.init = &(struct clk_init_data){3124			.name = "gcc_mss_q6_bimc_axi_clk",3125			.parent_hws = (const struct clk_hw*[]){3126				&bimc_ddr_clk_src.clkr.hw,3127			},3128			.num_parents = 1,3129			.flags = CLK_SET_RATE_PARENT,3130			.ops = &clk_branch2_ops,3131		},3132	},3133};3134 3135static struct clk_branch gcc_oxili_ahb_clk = {3136	.halt_reg = 0x59028,3137	.clkr = {3138		.enable_reg = 0x59028,3139		.enable_mask = BIT(0),3140		.hw.init = &(struct clk_init_data){3141			.name = "gcc_oxili_ahb_clk",3142			.parent_hws = (const struct clk_hw*[]){3143				&pcnoc_bfdcd_clk_src.clkr.hw,3144			},3145			.num_parents = 1,3146			.flags = CLK_SET_RATE_PARENT,3147			.ops = &clk_branch2_ops,3148		},3149	},3150};3151 3152static struct clk_branch gcc_oxili_gfx3d_clk = {3153	.halt_reg = 0x59020,3154	.clkr = {3155		.enable_reg = 0x59020,3156		.enable_mask = BIT(0),3157		.hw.init = &(struct clk_init_data){3158			.name = "gcc_oxili_gfx3d_clk",3159			.parent_hws = (const struct clk_hw*[]){3160				&gfx3d_clk_src.clkr.hw,3161			},3162			.num_parents = 1,3163			.flags = CLK_SET_RATE_PARENT,3164			.ops = &clk_branch2_ops,3165		},3166	},3167};3168 3169static struct clk_branch gcc_pdm2_clk = {3170	.halt_reg = 0x4400c,3171	.clkr = {3172		.enable_reg = 0x4400c,3173		.enable_mask = BIT(0),3174		.hw.init = &(struct clk_init_data){3175			.name = "gcc_pdm2_clk",3176			.parent_hws = (const struct clk_hw*[]){3177				&pdm2_clk_src.clkr.hw,3178			},3179			.num_parents = 1,3180			.flags = CLK_SET_RATE_PARENT,3181			.ops = &clk_branch2_ops,3182		},3183	},3184};3185 3186static struct clk_branch gcc_pdm_ahb_clk = {3187	.halt_reg = 0x44004,3188	.clkr = {3189		.enable_reg = 0x44004,3190		.enable_mask = BIT(0),3191		.hw.init = &(struct clk_init_data){3192			.name = "gcc_pdm_ahb_clk",3193			.parent_hws = (const struct clk_hw*[]){3194				&pcnoc_bfdcd_clk_src.clkr.hw,3195			},3196			.num_parents = 1,3197			.flags = CLK_SET_RATE_PARENT,3198			.ops = &clk_branch2_ops,3199		},3200	},3201};3202 3203static struct clk_branch gcc_prng_ahb_clk = {3204	.halt_reg = 0x13004,3205	.halt_check = BRANCH_HALT_VOTED,3206	.clkr = {3207		.enable_reg = 0x45004,3208		.enable_mask = BIT(8),3209		.hw.init = &(struct clk_init_data){3210			.name = "gcc_prng_ahb_clk",3211			.parent_hws = (const struct clk_hw*[]){3212				&pcnoc_bfdcd_clk_src.clkr.hw,3213			},3214			.num_parents = 1,3215			.ops = &clk_branch2_ops,3216		},3217	},3218};3219 3220static struct clk_branch gcc_sdcc1_ahb_clk = {3221	.halt_reg = 0x4201c,3222	.clkr = {3223		.enable_reg = 0x4201c,3224		.enable_mask = BIT(0),3225		.hw.init = &(struct clk_init_data){3226			.name = "gcc_sdcc1_ahb_clk",3227			.parent_hws = (const struct clk_hw*[]){3228				&pcnoc_bfdcd_clk_src.clkr.hw,3229			},3230			.num_parents = 1,3231			.flags = CLK_SET_RATE_PARENT,3232			.ops = &clk_branch2_ops,3233		},3234	},3235};3236 3237static struct clk_branch gcc_sdcc1_apps_clk = {3238	.halt_reg = 0x42018,3239	.clkr = {3240		.enable_reg = 0x42018,3241		.enable_mask = BIT(0),3242		.hw.init = &(struct clk_init_data){3243			.name = "gcc_sdcc1_apps_clk",3244			.parent_hws = (const struct clk_hw*[]){3245				&sdcc1_apps_clk_src.clkr.hw,3246			},3247			.num_parents = 1,3248			.flags = CLK_SET_RATE_PARENT,3249			.ops = &clk_branch2_ops,3250		},3251	},3252};3253 3254static struct clk_branch gcc_sdcc2_ahb_clk = {3255	.halt_reg = 0x4301c,3256	.clkr = {3257		.enable_reg = 0x4301c,3258		.enable_mask = BIT(0),3259		.hw.init = &(struct clk_init_data){3260			.name = "gcc_sdcc2_ahb_clk",3261			.parent_hws = (const struct clk_hw*[]){3262				&pcnoc_bfdcd_clk_src.clkr.hw,3263			},3264			.num_parents = 1,3265			.flags = CLK_SET_RATE_PARENT,3266			.ops = &clk_branch2_ops,3267		},3268	},3269};3270 3271static struct clk_branch gcc_sdcc2_apps_clk = {3272	.halt_reg = 0x43018,3273	.clkr = {3274		.enable_reg = 0x43018,3275		.enable_mask = BIT(0),3276		.hw.init = &(struct clk_init_data){3277			.name = "gcc_sdcc2_apps_clk",3278			.parent_hws = (const struct clk_hw*[]){3279				&sdcc2_apps_clk_src.clkr.hw,3280			},3281			.num_parents = 1,3282			.flags = CLK_SET_RATE_PARENT,3283			.ops = &clk_branch2_ops,3284		},3285	},3286};3287 3288static struct clk_branch gcc_apss_tcu_clk = {3289	.halt_reg = 0x12018,3290	.halt_check = BRANCH_HALT_VOTED,3291	.clkr = {3292		.enable_reg = 0x4500c,3293		.enable_mask = BIT(1),3294		.hw.init = &(struct clk_init_data){3295			.name = "gcc_apss_tcu_clk",3296			.parent_hws = (const struct clk_hw*[]){3297				&bimc_ddr_clk_src.clkr.hw,3298			},3299			.num_parents = 1,3300			.ops = &clk_branch2_ops,3301		},3302	},3303};3304 3305static struct clk_branch gcc_gfx_tcu_clk = {3306	.halt_reg = 0x12020,3307	.halt_check = BRANCH_HALT_VOTED,3308	.clkr = {3309		.enable_reg = 0x4500c,3310		.enable_mask = BIT(2),3311		.hw.init = &(struct clk_init_data){3312			.name = "gcc_gfx_tcu_clk",3313			.parent_hws = (const struct clk_hw*[]){3314				&bimc_ddr_clk_src.clkr.hw,3315			},3316			.num_parents = 1,3317			.ops = &clk_branch2_ops,3318		},3319	},3320};3321 3322static struct clk_branch gcc_gfx_tbu_clk = {3323	.halt_reg = 0x12010,3324	.halt_check = BRANCH_HALT_VOTED,3325	.clkr = {3326		.enable_reg = 0x4500c,3327		.enable_mask = BIT(3),3328		.hw.init = &(struct clk_init_data){3329			.name = "gcc_gfx_tbu_clk",3330			.parent_hws = (const struct clk_hw*[]){3331				&bimc_ddr_clk_src.clkr.hw,3332			},3333			.num_parents = 1,3334			.ops = &clk_branch2_ops,3335		},3336	},3337};3338 3339static struct clk_branch gcc_mdp_tbu_clk = {3340	.halt_reg = 0x1201c,3341	.halt_check = BRANCH_HALT_VOTED,3342	.clkr = {3343		.enable_reg = 0x4500c,3344		.enable_mask = BIT(4),3345		.hw.init = &(struct clk_init_data){3346			.name = "gcc_mdp_tbu_clk",3347			.parent_hws = (const struct clk_hw*[]){3348				&system_mm_noc_bfdcd_clk_src.clkr.hw,3349			},3350			.num_parents = 1,3351			.flags = CLK_SET_RATE_PARENT,3352			.ops = &clk_branch2_ops,3353		},3354	},3355};3356 3357static struct clk_branch gcc_venus_tbu_clk = {3358	.halt_reg = 0x12014,3359	.halt_check = BRANCH_HALT_VOTED,3360	.clkr = {3361		.enable_reg = 0x4500c,3362		.enable_mask = BIT(5),3363		.hw.init = &(struct clk_init_data){3364			.name = "gcc_venus_tbu_clk",3365			.parent_hws = (const struct clk_hw*[]){3366				&system_mm_noc_bfdcd_clk_src.clkr.hw,3367			},3368			.num_parents = 1,3369			.flags = CLK_SET_RATE_PARENT,3370			.ops = &clk_branch2_ops,3371		},3372	},3373};3374 3375static struct clk_branch gcc_vfe_tbu_clk = {3376	.halt_reg = 0x1203c,3377	.halt_check = BRANCH_HALT_VOTED,3378	.clkr = {3379		.enable_reg = 0x4500c,3380		.enable_mask = BIT(9),3381		.hw.init = &(struct clk_init_data){3382			.name = "gcc_vfe_tbu_clk",3383			.parent_hws = (const struct clk_hw*[]){3384				&system_mm_noc_bfdcd_clk_src.clkr.hw,3385			},3386			.num_parents = 1,3387			.flags = CLK_SET_RATE_PARENT,3388			.ops = &clk_branch2_ops,3389		},3390	},3391};3392 3393static struct clk_branch gcc_jpeg_tbu_clk = {3394	.halt_reg = 0x12034,3395	.halt_check = BRANCH_HALT_VOTED,3396	.clkr = {3397		.enable_reg = 0x4500c,3398		.enable_mask = BIT(10),3399		.hw.init = &(struct clk_init_data){3400			.name = "gcc_jpeg_tbu_clk",3401			.parent_hws = (const struct clk_hw*[]){3402				&system_mm_noc_bfdcd_clk_src.clkr.hw,3403			},3404			.num_parents = 1,3405			.flags = CLK_SET_RATE_PARENT,3406			.ops = &clk_branch2_ops,3407		},3408	},3409};3410 3411static struct clk_branch gcc_smmu_cfg_clk = {3412	.halt_reg = 0x12038,3413	.halt_check = BRANCH_HALT_VOTED,3414	.clkr = {3415		.enable_reg = 0x4500c,3416		.enable_mask = BIT(12),3417		.hw.init = &(struct clk_init_data){3418			.name = "gcc_smmu_cfg_clk",3419			.parent_hws = (const struct clk_hw*[]){3420				&pcnoc_bfdcd_clk_src.clkr.hw,3421			},3422			.num_parents = 1,3423			.flags = CLK_SET_RATE_PARENT,3424			.ops = &clk_branch2_ops,3425		},3426	},3427};3428 3429static struct clk_branch gcc_gtcu_ahb_clk = {3430	.halt_reg = 0x12044,3431	.halt_check = BRANCH_HALT_VOTED,3432	.clkr = {3433		.enable_reg = 0x4500c,3434		.enable_mask = BIT(13),3435		.hw.init = &(struct clk_init_data){3436			.name = "gcc_gtcu_ahb_clk",3437			.parent_hws = (const struct clk_hw*[]){3438				&pcnoc_bfdcd_clk_src.clkr.hw,3439			},3440			.num_parents = 1,3441			.flags = CLK_SET_RATE_PARENT,3442			.ops = &clk_branch2_ops,3443		},3444	},3445};3446 3447static struct clk_branch gcc_cpp_tbu_clk = {3448	.halt_reg = 0x12040,3449	.halt_check = BRANCH_HALT_VOTED,3450	.clkr = {3451		.enable_reg = 0x4500c,3452		.enable_mask = BIT(14),3453		.hw.init = &(struct clk_init_data){3454			.name = "gcc_cpp_tbu_clk",3455			.parent_hws = (const struct clk_hw*[]){3456				&pcnoc_bfdcd_clk_src.clkr.hw,3457			},3458			.num_parents = 1,3459			.flags = CLK_SET_RATE_PARENT,3460			.ops = &clk_branch2_ops,3461		},3462	},3463};3464 3465static struct clk_branch gcc_mdp_rt_tbu_clk = {3466	.halt_reg = 0x1201c,3467	.halt_check = BRANCH_HALT_VOTED,3468	.clkr = {3469		.enable_reg = 0x4500c,3470		.enable_mask = BIT(15),3471		.hw.init = &(struct clk_init_data){3472			.name = "gcc_mdp_rt_tbu_clk",3473			.parent_hws = (const struct clk_hw*[]){3474				&pcnoc_bfdcd_clk_src.clkr.hw,3475			},3476			.num_parents = 1,3477			.flags = CLK_SET_RATE_PARENT,3478			.ops = &clk_branch2_ops,3479		},3480	},3481};3482 3483static struct clk_branch gcc_bimc_gfx_clk = {3484	.halt_reg = 0x31024,3485	.clkr = {3486		.enable_reg = 0x31024,3487		.enable_mask = BIT(0),3488		.hw.init = &(struct clk_init_data){3489			.name = "gcc_bimc_gfx_clk",3490			.parent_hws = (const struct clk_hw*[]){3491				&bimc_gpu_clk_src.clkr.hw,3492			},3493			.num_parents = 1,3494			.flags = CLK_SET_RATE_PARENT,3495			.ops = &clk_branch2_ops,3496		},3497	},3498};3499 3500static struct clk_branch gcc_bimc_gpu_clk = {3501	.halt_reg = 0x31040,3502	.clkr = {3503		.enable_reg = 0x31040,3504		.enable_mask = BIT(0),3505		.hw.init = &(struct clk_init_data){3506			.name = "gcc_bimc_gpu_clk",3507			.parent_hws = (const struct clk_hw*[]){3508				&bimc_gpu_clk_src.clkr.hw,3509			},3510			.num_parents = 1,3511			.flags = CLK_SET_RATE_PARENT,3512			.ops = &clk_branch2_ops,3513		},3514	},3515};3516 3517static struct clk_branch gcc_usb2a_phy_sleep_clk = {3518	.halt_reg = 0x4102c,3519	.clkr = {3520		.enable_reg = 0x4102c,3521		.enable_mask = BIT(0),3522		.hw.init = &(struct clk_init_data){3523			.name = "gcc_usb2a_phy_sleep_clk",3524			.ops = &clk_branch2_ops,3525		},3526	},3527};3528 3529static struct clk_branch gcc_usb_fs_ahb_clk = {3530	.halt_reg = 0x3f008,3531	.clkr = {3532		.enable_reg = 0x3f008,3533		.enable_mask = BIT(0),3534		.hw.init = &(struct clk_init_data){3535			.name = "gcc_usb_fs_ahb_clk",3536			.parent_hws = (const struct clk_hw*[]){3537				&pcnoc_bfdcd_clk_src.clkr.hw,3538			},3539			.num_parents = 1,3540			.flags = CLK_SET_RATE_PARENT,3541			.ops = &clk_branch2_ops,3542		},3543	},3544};3545 3546static struct clk_branch gcc_usb_fs_ic_clk = {3547	.halt_reg = 0x3f030,3548	.clkr = {3549		.enable_reg = 0x3f030,3550		.enable_mask = BIT(0),3551		.hw.init = &(struct clk_init_data){3552			.name = "gcc_usb_fs_ic_clk",3553			.parent_hws = (const struct clk_hw*[]){3554				&usb_fs_ic_clk_src.clkr.hw,3555			},3556			.num_parents = 1,3557			.flags = CLK_SET_RATE_PARENT,3558			.ops = &clk_branch2_ops,3559		},3560	},3561};3562 3563static struct clk_branch gcc_usb_fs_system_clk = {3564	.halt_reg = 0x3f004,3565	.clkr = {3566		.enable_reg = 0x3f004,3567		.enable_mask = BIT(0),3568		.hw.init = &(struct clk_init_data){3569			.name = "gcc_usb_fs_system_clk",3570			.parent_hws = (const struct clk_hw*[]){3571				&usb_fs_system_clk_src.clkr.hw,3572			},3573			.num_parents = 1,3574			.flags = CLK_SET_RATE_PARENT,3575			.ops = &clk_branch2_ops,3576		},3577	},3578};3579 3580static struct clk_branch gcc_usb_hs_ahb_clk = {3581	.halt_reg = 0x41008,3582	.clkr = {3583		.enable_reg = 0x41008,3584		.enable_mask = BIT(0),3585		.hw.init = &(struct clk_init_data){3586			.name = "gcc_usb_hs_ahb_clk",3587			.parent_hws = (const struct clk_hw*[]){3588				&pcnoc_bfdcd_clk_src.clkr.hw,3589			},3590			.num_parents = 1,3591			.flags = CLK_SET_RATE_PARENT,3592			.ops = &clk_branch2_ops,3593		},3594	},3595};3596 3597static struct clk_branch gcc_usb_hs_system_clk = {3598	.halt_reg = 0x41004,3599	.clkr = {3600		.enable_reg = 0x41004,3601		.enable_mask = BIT(0),3602		.hw.init = &(struct clk_init_data){3603			.name = "gcc_usb_hs_system_clk",3604			.parent_hws = (const struct clk_hw*[]){3605				&usb_hs_system_clk_src.clkr.hw,3606			},3607			.num_parents = 1,3608			.flags = CLK_SET_RATE_PARENT,3609			.ops = &clk_branch2_ops,3610		},3611	},3612};3613 3614static struct clk_branch gcc_venus0_ahb_clk = {3615	.halt_reg = 0x4c020,3616	.clkr = {3617		.enable_reg = 0x4c020,3618		.enable_mask = BIT(0),3619		.hw.init = &(struct clk_init_data){3620			.name = "gcc_venus0_ahb_clk",3621			.parent_hws = (const struct clk_hw*[]){3622				&pcnoc_bfdcd_clk_src.clkr.hw,3623			},3624			.num_parents = 1,3625			.flags = CLK_SET_RATE_PARENT,3626			.ops = &clk_branch2_ops,3627		},3628	},3629};3630 3631static struct clk_branch gcc_venus0_axi_clk = {3632	.halt_reg = 0x4c024,3633	.clkr = {3634		.enable_reg = 0x4c024,3635		.enable_mask = BIT(0),3636		.hw.init = &(struct clk_init_data){3637			.name = "gcc_venus0_axi_clk",3638			.parent_hws = (const struct clk_hw*[]){3639				&system_mm_noc_bfdcd_clk_src.clkr.hw,3640			},3641			.num_parents = 1,3642			.flags = CLK_SET_RATE_PARENT,3643			.ops = &clk_branch2_ops,3644		},3645	},3646};3647 3648static struct clk_branch gcc_venus0_vcodec0_clk = {3649	.halt_reg = 0x4c01c,3650	.clkr = {3651		.enable_reg = 0x4c01c,3652		.enable_mask = BIT(0),3653		.hw.init = &(struct clk_init_data){3654			.name = "gcc_venus0_vcodec0_clk",3655			.parent_hws = (const struct clk_hw*[]){3656				&vcodec0_clk_src.clkr.hw,3657			},3658			.num_parents = 1,3659			.flags = CLK_SET_RATE_PARENT,3660			.ops = &clk_branch2_ops,3661		},3662	},3663};3664 3665static struct clk_branch gcc_venus0_core0_vcodec0_clk = {3666	.halt_reg = 0x4c02c,3667	.clkr = {3668		.enable_reg = 0x4c02c,3669		.enable_mask = BIT(0),3670		.hw.init = &(struct clk_init_data){3671			.name = "gcc_venus0_core0_vcodec0_clk",3672			.parent_hws = (const struct clk_hw*[]){3673				&vcodec0_clk_src.clkr.hw,3674			},3675			.num_parents = 1,3676			.flags = CLK_SET_RATE_PARENT,3677			.ops = &clk_branch2_ops,3678		},3679	},3680};3681 3682static struct clk_branch gcc_venus0_core1_vcodec0_clk = {3683	.halt_reg = 0x4c034,3684	.clkr = {3685		.enable_reg = 0x4c034,3686		.enable_mask = BIT(0),3687		.hw.init = &(struct clk_init_data){3688			.name = "gcc_venus0_core1_vcodec0_clk",3689			.parent_hws = (const struct clk_hw*[]){3690				&vcodec0_clk_src.clkr.hw,3691			},3692			.num_parents = 1,3693			.flags = CLK_SET_RATE_PARENT,3694			.ops = &clk_branch2_ops,3695		},3696	},3697};3698 3699static struct clk_branch gcc_oxili_timer_clk = {3700	.halt_reg = 0x59040,3701	.clkr = {3702		.enable_reg = 0x59040,3703		.enable_mask = BIT(0),3704		.hw.init = &(struct clk_init_data){3705			.name = "gcc_oxili_timer_clk",3706			.ops = &clk_branch2_ops,3707		},3708	},3709};3710 3711static struct gdsc venus_gdsc = {3712	.gdscr = 0x4c018,3713	.pd = {3714		.name = "venus",3715	},3716	.pwrsts = PWRSTS_OFF_ON,3717};3718 3719static struct gdsc mdss_gdsc = {3720	.gdscr = 0x4d078,3721	.pd = {3722		.name = "mdss",3723	},3724	.pwrsts = PWRSTS_OFF_ON,3725};3726 3727static struct gdsc jpeg_gdsc = {3728	.gdscr = 0x5701c,3729	.pd = {3730		.name = "jpeg",3731	},3732	.pwrsts = PWRSTS_OFF_ON,3733};3734 3735static struct gdsc vfe_gdsc = {3736	.gdscr = 0x58034,3737	.pd = {3738		.name = "vfe",3739	},3740	.pwrsts = PWRSTS_OFF_ON,3741};3742 3743static struct gdsc oxili_gdsc = {3744	.gdscr = 0x5901c,3745	.pd = {3746		.name = "oxili",3747	},3748	.pwrsts = PWRSTS_OFF_ON,3749};3750 3751static struct gdsc venus_core0_gdsc = {3752	.gdscr = 0x4c028,3753	.pd = {3754		.name = "venus_core0",3755	},3756	.pwrsts = PWRSTS_OFF_ON,3757};3758 3759static struct gdsc venus_core1_gdsc = {3760	.gdscr = 0x4c030,3761	.pd = {3762		.name = "venus_core1",3763	},3764	.pwrsts = PWRSTS_OFF_ON,3765};3766 3767static struct clk_regmap *gcc_msm8939_clocks[] = {3768	[GPLL0] = &gpll0.clkr,3769	[GPLL0_VOTE] = &gpll0_vote,3770	[BIMC_PLL] = &bimc_pll.clkr,3771	[BIMC_PLL_VOTE] = &bimc_pll_vote,3772	[GPLL1] = &gpll1.clkr,3773	[GPLL1_VOTE] = &gpll1_vote,3774	[GPLL2] = &gpll2.clkr,3775	[GPLL2_VOTE] = &gpll2_vote,3776	[PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,3777	[SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,3778	[SYSTEM_MM_NOC_BFDCD_CLK_SRC] = &system_mm_noc_bfdcd_clk_src.clkr,3779	[CAMSS_AHB_CLK_SRC] = &camss_ahb_clk_src.clkr,3780	[APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,3781	[CSI0_CLK_SRC] = &csi0_clk_src.clkr,3782	[CSI1_CLK_SRC] = &csi1_clk_src.clkr,3783	[CSI2_CLK_SRC] = &csi2_clk_src.clkr,3784	[GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,3785	[VFE0_CLK_SRC] = &vfe0_clk_src.clkr,3786	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,3787	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,3788	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,3789	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,3790	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,3791	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,3792	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,3793	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,3794	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,3795	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,3796	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,3797	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,3798	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,3799	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,3800	[CCI_CLK_SRC] = &cci_clk_src.clkr,3801	[CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,3802	[CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,3803	[JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,3804	[MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,3805	[MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,3806	[CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,3807	[CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,3808	[CPP_CLK_SRC] = &cpp_clk_src.clkr,3809	[CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,3810	[GP1_CLK_SRC] = &gp1_clk_src.clkr,3811	[GP2_CLK_SRC] = &gp2_clk_src.clkr,3812	[GP3_CLK_SRC] = &gp3_clk_src.clkr,3813	[BYTE0_CLK_SRC] = &byte0_clk_src.clkr,3814	[ESC0_CLK_SRC] = &esc0_clk_src.clkr,3815	[MDP_CLK_SRC] = &mdp_clk_src.clkr,3816	[PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,3817	[VSYNC_CLK_SRC] = &vsync_clk_src.clkr,3818	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,3819	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,3820	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,3821	[APSS_TCU_CLK_SRC] = &apss_tcu_clk_src.clkr,3822	[USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,3823	[VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,3824	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,3825	[GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,3826	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,3827	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,3828	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,3829	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,3830	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,3831	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,3832	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,3833	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,3834	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,3835	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,3836	[GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,3837	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,3838	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,3839	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,3840	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,3841	[GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,3842	[GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,3843	[GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,3844	[GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,3845	[GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,3846	[GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,3847	[GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,3848	[GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,3849	[GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,3850	[GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,3851	[GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,3852	[GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,3853	[GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,3854	[GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,3855	[GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr,3856	[GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,3857	[GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,3858	[GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,3859	[GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,3860	[GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,3861	[GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,3862	[GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,3863	[GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,3864	[GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,3865	[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,3866	[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,3867	[GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,3868	[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,3869	[GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,3870	[GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,3871	[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,3872	[GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,3873	[GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,3874	[GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,3875	[GCC_CAMSS_VFE_AHB_CLK] = &gcc_camss_vfe_ahb_clk.clkr,3876	[GCC_CAMSS_VFE_AXI_CLK] = &gcc_camss_vfe_axi_clk.clkr,3877	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,3878	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,3879	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,3880	[GCC_OXILI_GMEM_CLK] = &gcc_oxili_gmem_clk.clkr,3881	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,3882	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,3883	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,3884	[GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,3885	[GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,3886	[GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,3887	[GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,3888	[GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,3889	[GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,3890	[GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,3891	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,3892	[GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,3893	[GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,3894	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,3895	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,3896	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,3897	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,3898	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,3899	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,3900	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,3901	[GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,3902	[GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,3903	[GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,3904	[GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,3905	[GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,3906	[GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,3907	[GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,3908	[GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,3909	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,3910	[GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,3911	[GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,3912	[GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,3913	[BIMC_DDR_CLK_SRC] = &bimc_ddr_clk_src.clkr,3914	[GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,3915	[GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,3916	[BIMC_GPU_CLK_SRC] = &bimc_gpu_clk_src.clkr,3917	[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,3918	[GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,3919	[ULTAUDIO_AHBFABRIC_CLK_SRC] = &ultaudio_ahbfabric_clk_src.clkr,3920	[ULTAUDIO_LPAIF_PRI_I2S_CLK_SRC] = &ultaudio_lpaif_pri_i2s_clk_src.clkr,3921	[ULTAUDIO_LPAIF_SEC_I2S_CLK_SRC] = &ultaudio_lpaif_sec_i2s_clk_src.clkr,3922	[ULTAUDIO_LPAIF_AUX_I2S_CLK_SRC] = &ultaudio_lpaif_aux_i2s_clk_src.clkr,3923	[ULTAUDIO_XO_CLK_SRC] = &ultaudio_xo_clk_src.clkr,3924	[CODEC_DIGCODEC_CLK_SRC] = &codec_digcodec_clk_src.clkr,3925	[GCC_ULTAUDIO_PCNOC_MPORT_CLK] = &gcc_ultaudio_pcnoc_mport_clk.clkr,3926	[GCC_ULTAUDIO_PCNOC_SWAY_CLK] = &gcc_ultaudio_pcnoc_sway_clk.clkr,3927	[GCC_ULTAUDIO_AVSYNC_XO_CLK] = &gcc_ultaudio_avsync_xo_clk.clkr,3928	[GCC_ULTAUDIO_STC_XO_CLK] = &gcc_ultaudio_stc_xo_clk.clkr,3929	[GCC_ULTAUDIO_AHBFABRIC_IXFABRIC_CLK] = &gcc_ultaudio_ahbfabric_ixfabric_clk.clkr,3930	[GCC_ULTAUDIO_AHBFABRIC_IXFABRIC_LPM_CLK] = &gcc_ultaudio_ahbfabric_ixfabric_lpm_clk.clkr,3931	[GCC_ULTAUDIO_LPAIF_PRI_I2S_CLK] = &gcc_ultaudio_lpaif_pri_i2s_clk.clkr,3932	[GCC_ULTAUDIO_LPAIF_SEC_I2S_CLK] = &gcc_ultaudio_lpaif_sec_i2s_clk.clkr,3933	[GCC_ULTAUDIO_LPAIF_AUX_I2S_CLK] = &gcc_ultaudio_lpaif_aux_i2s_clk.clkr,3934	[GCC_CODEC_DIGCODEC_CLK] = &gcc_codec_digcodec_clk.clkr,3935	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,3936	[GPLL3] = &gpll3.clkr,3937	[GPLL3_VOTE] = &gpll3_vote,3938	[GPLL4] = &gpll4.clkr,3939	[GPLL4_VOTE] = &gpll4_vote,3940	[GPLL5] = &gpll5.clkr,3941	[GPLL5_VOTE] = &gpll5_vote,3942	[GPLL6] = &gpll6.clkr,3943	[GPLL6_VOTE] = &gpll6_vote,3944	[BYTE1_CLK_SRC] = &byte1_clk_src.clkr,3945	[GCC_MDSS_BYTE1_CLK] = &gcc_mdss_byte1_clk.clkr,3946	[ESC1_CLK_SRC] = &esc1_clk_src.clkr,3947	[GCC_MDSS_ESC1_CLK] = &gcc_mdss_esc1_clk.clkr,3948	[PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,3949	[GCC_MDSS_PCLK1_CLK] = &gcc_mdss_pclk1_clk.clkr,3950	[GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr,3951	[GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr,3952	[GCC_MDP_RT_TBU_CLK] = &gcc_mdp_rt_tbu_clk.clkr,3953	[USB_FS_SYSTEM_CLK_SRC] = &usb_fs_system_clk_src.clkr,3954	[USB_FS_IC_CLK_SRC] = &usb_fs_ic_clk_src.clkr,3955	[GCC_USB_FS_AHB_CLK] = &gcc_usb_fs_ahb_clk.clkr,3956	[GCC_USB_FS_IC_CLK] = &gcc_usb_fs_ic_clk.clkr,3957	[GCC_USB_FS_SYSTEM_CLK] = &gcc_usb_fs_system_clk.clkr,3958	[GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,3959	[GCC_VENUS0_CORE1_VCODEC0_CLK] = &gcc_venus0_core1_vcodec0_clk.clkr,3960	[GCC_OXILI_TIMER_CLK] = &gcc_oxili_timer_clk.clkr,3961};3962 3963static struct gdsc *gcc_msm8939_gdscs[] = {3964	[VENUS_GDSC] = &venus_gdsc,3965	[MDSS_GDSC] = &mdss_gdsc,3966	[JPEG_GDSC] = &jpeg_gdsc,3967	[VFE_GDSC] = &vfe_gdsc,3968	[OXILI_GDSC] = &oxili_gdsc,3969	[VENUS_CORE0_GDSC] = &venus_core0_gdsc,3970	[VENUS_CORE1_GDSC] = &venus_core1_gdsc,3971};3972 3973static const struct qcom_reset_map gcc_msm8939_resets[] = {3974	[GCC_BLSP1_BCR] = { 0x01000 },3975	[GCC_BLSP1_QUP1_BCR] = { 0x02000 },3976	[GCC_BLSP1_UART1_BCR] = { 0x02038 },3977	[GCC_BLSP1_QUP2_BCR] = { 0x03008 },3978	[GCC_BLSP1_UART2_BCR] = { 0x03028 },3979	[GCC_BLSP1_QUP3_BCR] = { 0x04018 },3980	[GCC_BLSP1_UART3_BCR] = { 0x04038 },3981	[GCC_BLSP1_QUP4_BCR] = { 0x05018 },3982	[GCC_BLSP1_QUP5_BCR] = { 0x06018 },3983	[GCC_BLSP1_QUP6_BCR] = { 0x07018 },3984	[GCC_IMEM_BCR] = { 0x0e000 },3985	[GCC_SMMU_BCR] = { 0x12000 },3986	[GCC_APSS_TCU_BCR] = { 0x12050 },3987	[GCC_SMMU_XPU_BCR] = { 0x12054 },3988	[GCC_PCNOC_TBU_BCR] = { 0x12058 },3989	[GCC_PRNG_BCR] = { 0x13000 },3990	[GCC_BOOT_ROM_BCR] = { 0x13008 },3991	[GCC_CRYPTO_BCR] = { 0x16000 },3992	[GCC_SEC_CTRL_BCR] = { 0x1a000 },3993	[GCC_AUDIO_CORE_BCR] = { 0x1c008 },3994	[GCC_ULT_AUDIO_BCR] = { 0x1c0b4 },3995	[GCC_DEHR_BCR] = { 0x1f000 },3996	[GCC_SYSTEM_NOC_BCR] = { 0x26000 },3997	[GCC_PCNOC_BCR] = { 0x27018 },3998	[GCC_TCSR_BCR] = { 0x28000 },3999	[GCC_QDSS_BCR] = { 0x29000 },4000	[GCC_DCD_BCR] = { 0x2a000 },4001	[GCC_MSG_RAM_BCR] = { 0x2b000 },4002	[GCC_MPM_BCR] = { 0x2c000 },4003	[GCC_SPMI_BCR] = { 0x2e000 },4004	[GCC_SPDM_BCR] = { 0x2f000 },4005	[GCC_MM_SPDM_BCR] = { 0x2f024 },4006	[GCC_BIMC_BCR] = { 0x31000 },4007	[GCC_RBCPR_BCR] = { 0x33000 },4008	[GCC_TLMM_BCR] = { 0x34000 },4009	[GCC_CAMSS_CSI2_BCR] = { 0x3c038 },4010	[GCC_CAMSS_CSI2PHY_BCR] = { 0x3c044 },4011	[GCC_CAMSS_CSI2RDI_BCR] = { 0x3c04c },4012	[GCC_CAMSS_CSI2PIX_BCR] = { 0x3c054 },4013	[GCC_USB_FS_BCR] = { 0x3f000 },4014	[GCC_USB_HS_BCR] = { 0x41000 },4015	[GCC_USB2A_PHY_BCR] = { 0x41028 },4016	[GCC_SDCC1_BCR] = { 0x42000 },4017	[GCC_SDCC2_BCR] = { 0x43000 },4018	[GCC_PDM_BCR] = { 0x44000 },4019	[GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x47000 },4020	[GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000 },4021	[GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008 },4022	[GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010 },4023	[GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018 },4024	[GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020 },4025	[GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028 },4026	[GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030 },4027	[GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038 },4028	[GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040 },4029	[GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048 },4030	[GCC_MMSS_BCR] = { 0x4b000 },4031	[GCC_VENUS0_BCR] = { 0x4c014 },4032	[GCC_MDSS_BCR] = { 0x4d074 },4033	[GCC_CAMSS_PHY0_BCR] = { 0x4e018 },4034	[GCC_CAMSS_CSI0_BCR] = { 0x4e038 },4035	[GCC_CAMSS_CSI0PHY_BCR] = { 0x4e044 },4036	[GCC_CAMSS_CSI0RDI_BCR] = { 0x4e04c },4037	[GCC_CAMSS_CSI0PIX_BCR] = { 0x4e054 },4038	[GCC_CAMSS_PHY1_BCR] = { 0x4f018 },4039	[GCC_CAMSS_CSI1_BCR] = { 0x4f038 },4040	[GCC_CAMSS_CSI1PHY_BCR] = { 0x4f044 },4041	[GCC_CAMSS_CSI1RDI_BCR] = { 0x4f04c },4042	[GCC_CAMSS_CSI1PIX_BCR] = { 0x4f054 },4043	[GCC_CAMSS_ISPIF_BCR] = { 0x50000 },4044	[GCC_BLSP1_QUP4_SPI_APPS_CBCR] = { 0x0501c },4045	[GCC_CAMSS_CCI_BCR] = { 0x51014 },4046	[GCC_CAMSS_MCLK0_BCR] = { 0x52014 },4047	[GCC_CAMSS_MCLK1_BCR] = { 0x53014 },4048	[GCC_CAMSS_GP0_BCR] = { 0x54014 },4049	[GCC_CAMSS_GP1_BCR] = { 0x55014 },4050	[GCC_CAMSS_TOP_BCR] = { 0x56000 },4051	[GCC_CAMSS_MICRO_BCR] = { 0x56008 },4052	[GCC_CAMSS_JPEG_BCR] = { 0x57018 },4053	[GCC_CAMSS_VFE_BCR] = { 0x58030 },4054	[GCC_CAMSS_CSI_VFE0_BCR] = { 0x5804c },4055	[GCC_OXILI_BCR] = { 0x59018 },4056	[GCC_GMEM_BCR] = { 0x5902c },4057	[GCC_CAMSS_AHB_BCR] = { 0x5a018 },4058	[GCC_CAMSS_MCLK2_BCR] = { 0x5c014 },4059	[GCC_MDP_TBU_BCR] = { 0x62000 },4060	[GCC_GFX_TBU_BCR] = { 0x63000 },4061	[GCC_GFX_TCU_BCR] = { 0x64000 },4062	[GCC_MSS_TBU_AXI_BCR] = { 0x65000 },4063	[GCC_MSS_TBU_GSS_AXI_BCR] = { 0x66000 },4064	[GCC_MSS_TBU_Q6_AXI_BCR] = { 0x67000 },4065	[GCC_GTCU_AHB_BCR] = { 0x68000 },4066	[GCC_SMMU_CFG_BCR] = { 0x69000 },4067	[GCC_VFE_TBU_BCR] = { 0x6a000 },4068	[GCC_VENUS_TBU_BCR] = { 0x6b000 },4069	[GCC_JPEG_TBU_BCR] = { 0x6c000 },4070	[GCC_PRONTO_TBU_BCR] = { 0x6d000 },4071	[GCC_CPP_TBU_BCR] = { 0x6e000 },4072	[GCC_MDP_RT_TBU_BCR] = { 0x6f000 },4073	[GCC_SMMU_CATS_BCR] = { 0x7c000 },4074};4075 4076static const struct regmap_config gcc_msm8939_regmap_config = {4077	.reg_bits	= 32,4078	.reg_stride	= 4,4079	.val_bits	= 32,4080	.max_register	= 0x80000,4081	.fast_io	= true,4082};4083 4084static const struct qcom_cc_desc gcc_msm8939_desc = {4085	.config = &gcc_msm8939_regmap_config,4086	.clks = gcc_msm8939_clocks,4087	.num_clks = ARRAY_SIZE(gcc_msm8939_clocks),4088	.resets = gcc_msm8939_resets,4089	.num_resets = ARRAY_SIZE(gcc_msm8939_resets),4090	.gdscs = gcc_msm8939_gdscs,4091	.num_gdscs = ARRAY_SIZE(gcc_msm8939_gdscs),4092};4093 4094static const struct of_device_id gcc_msm8939_match_table[] = {4095	{ .compatible = "qcom,gcc-msm8939" },4096	{ }4097};4098MODULE_DEVICE_TABLE(of, gcc_msm8939_match_table);4099 4100static int gcc_msm8939_probe(struct platform_device *pdev)4101{4102	struct regmap *regmap;4103 4104	regmap = qcom_cc_map(pdev, &gcc_msm8939_desc);4105	if (IS_ERR(regmap))4106		return PTR_ERR(regmap);4107 4108	clk_pll_configure_sr_hpm_lp(&gpll3, regmap, &gpll3_config, true);4109	clk_pll_configure_sr_hpm_lp(&gpll4, regmap, &gpll4_config, true);4110 4111	return qcom_cc_really_probe(&pdev->dev, &gcc_msm8939_desc, regmap);4112}4113 4114static struct platform_driver gcc_msm8939_driver = {4115	.probe		= gcc_msm8939_probe,4116	.driver		= {4117		.name	= "gcc-msm8939",4118		.of_match_table = gcc_msm8939_match_table,4119	},4120};4121 4122static int __init gcc_msm8939_init(void)4123{4124	return platform_driver_register(&gcc_msm8939_driver);4125}4126core_initcall(gcc_msm8939_init);4127 4128static void __exit gcc_msm8939_exit(void)4129{4130	platform_driver_unregister(&gcc_msm8939_driver);4131}4132module_exit(gcc_msm8939_exit);4133 4134MODULE_DESCRIPTION("Qualcomm GCC MSM8939 Driver");4135MODULE_LICENSE("GPL v2");4136