brintos

brintos / linux-shallow public Read only

0
0
Text · 104.1 KiB · 855a619 Raw
4254 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2// Copyright (c) 2021, The Linux Foundation. All rights reserved.3 4#include <linux/kernel.h>5#include <linux/bitops.h>6#include <linux/err.h>7#include <linux/module.h>8#include <linux/platform_device.h>9#include <linux/of.h>10#include <linux/clk-provider.h>11#include <linux/regmap.h>12#include <linux/reset-controller.h>13 14#include <dt-bindings/clock/qcom,gcc-msm8953.h>15 16#include "clk-alpha-pll.h"17#include "clk-branch.h"18#include "clk-rcg.h"19#include "common.h"20#include "gdsc.h"21#include "reset.h"22 23enum {24	P_XO,25	P_SLEEP_CLK,26	P_GPLL0,27	P_GPLL0_DIV2,28	P_GPLL2,29	P_GPLL3,30	P_GPLL4,31	P_GPLL6,32	P_GPLL6_DIV2,33	P_DSI0PLL,34	P_DSI0PLL_BYTE,35	P_DSI1PLL,36	P_DSI1PLL_BYTE,37};38 39static struct clk_alpha_pll gpll0_early = {40	.offset = 0x21000,41	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],42	.clkr = {43		.enable_reg = 0x45000,44		.enable_mask = BIT(0),45		.hw.init = &(struct clk_init_data) {46			.name = "gpll0_early",47			.parent_data = &(const struct clk_parent_data) {48				.fw_name = "xo",49			},50			.num_parents = 1,51			.ops = &clk_alpha_pll_fixed_ops,52		},53	},54};55 56static struct clk_fixed_factor gpll0_early_div = {57	.mult = 1,58	.div = 2,59	.hw.init = &(struct clk_init_data){60		.name = "gpll0_early_div",61		.parent_hws = (const struct clk_hw*[]){62			&gpll0_early.clkr.hw,63		},64		.num_parents = 1,65		.ops = &clk_fixed_factor_ops,66	},67};68 69static struct clk_alpha_pll_postdiv gpll0 = {70	.offset = 0x21000,71	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],72	.clkr.hw.init = &(struct clk_init_data){73		.name = "gpll0",74		.parent_hws = (const struct clk_hw*[]){75			&gpll0_early.clkr.hw,76		},77		.num_parents = 1,78		.ops = &clk_alpha_pll_postdiv_ro_ops,79	},80};81 82static struct clk_alpha_pll gpll2_early = {83	.offset = 0x4a000,84	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],85	.clkr = {86		.enable_reg = 0x45000,87		.enable_mask = BIT(2),88		.hw.init = &(struct clk_init_data){89			.name = "gpll2_early",90			.parent_data = &(const struct clk_parent_data) {91				.fw_name = "xo",92			},93			.num_parents = 1,94			.ops = &clk_alpha_pll_fixed_ops,95		},96	},97};98 99static struct clk_alpha_pll_postdiv gpll2 = {100	.offset = 0x4a000,101	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],102	.clkr.hw.init = &(struct clk_init_data){103		.name = "gpll2",104		.parent_hws = (const struct clk_hw*[]){105			&gpll2_early.clkr.hw,106		},107		.num_parents = 1,108		.ops = &clk_alpha_pll_postdiv_ro_ops,109	},110};111 112static const struct pll_vco gpll3_p_vco[] = {113	{ 1000000000, 2000000000, 0 },114};115 116static const struct alpha_pll_config gpll3_early_config = {117	.l = 63,118	.config_ctl_val = 0x4001055b,119	.early_output_mask = 0,120	.post_div_mask = GENMASK(11, 8),121	.post_div_val = BIT(8),122};123 124static struct clk_alpha_pll gpll3_early = {125	.offset = 0x22000,126	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],127	.vco_table = gpll3_p_vco,128	.num_vco = ARRAY_SIZE(gpll3_p_vco),129	.flags = SUPPORTS_DYNAMIC_UPDATE,130	.clkr = {131		.hw.init = &(struct clk_init_data){132			.name = "gpll3_early",133			.parent_data = &(const struct clk_parent_data) {134				.fw_name = "xo",135			},136			.num_parents = 1,137			.ops = &clk_alpha_pll_ops,138		},139	},140};141 142static struct clk_alpha_pll_postdiv gpll3 = {143	.offset = 0x22000,144	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],145	.clkr.hw.init = &(struct clk_init_data){146		.name = "gpll3",147		.parent_hws = (const struct clk_hw*[]){148			&gpll3_early.clkr.hw,149		},150		.num_parents = 1,151		.ops = &clk_alpha_pll_postdiv_ops,152		.flags = CLK_SET_RATE_PARENT,153	},154};155 156static struct clk_alpha_pll gpll4_early = {157	.offset = 0x24000,158	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],159	.clkr = {160		.enable_reg = 0x45000,161		.enable_mask = BIT(5),162		.hw.init = &(struct clk_init_data){163			.name = "gpll4_early",164			.parent_data = &(const struct clk_parent_data) {165				.fw_name = "xo",166			},167			.num_parents = 1,168			.ops = &clk_alpha_pll_fixed_ops,169		},170	},171};172 173static struct clk_alpha_pll_postdiv gpll4 = {174	.offset = 0x24000,175	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],176	.clkr.hw.init = &(struct clk_init_data){177		.name = "gpll4",178		.parent_hws = (const struct clk_hw*[]){179			&gpll4_early.clkr.hw,180		},181		.num_parents = 1,182		.ops = &clk_alpha_pll_postdiv_ro_ops,183	},184};185 186static struct clk_alpha_pll gpll6_early = {187	.offset = 0x37000,188	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],189	.clkr = {190		.enable_reg = 0x45000,191		.enable_mask = BIT(7),192		.hw.init = &(struct clk_init_data){193			.name = "gpll6_early",194			.parent_data = &(const struct clk_parent_data) {195				.fw_name = "xo",196			},197			.num_parents = 1,198			.ops = &clk_alpha_pll_fixed_ops,199		},200	},201};202 203static struct clk_fixed_factor gpll6_early_div = {204	.mult = 1,205	.div = 2,206	.hw.init = &(struct clk_init_data){207		.name = "gpll6_early_div",208		.parent_hws = (const struct clk_hw*[]){209			&gpll6_early.clkr.hw,210		},211		.num_parents = 1,212		.ops = &clk_fixed_factor_ops,213	},214};215 216static struct clk_alpha_pll_postdiv gpll6 = {217	.offset = 0x37000,218	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],219	.clkr.hw.init = &(struct clk_init_data){220		.name = "gpll6",221		.parent_hws = (const struct clk_hw*[]){222			&gpll6_early.clkr.hw,223		},224		.num_parents = 1,225		.ops = &clk_alpha_pll_postdiv_ro_ops,226	},227};228 229static const struct parent_map gcc_xo_gpll0_gpll0div2_2_map[] = {230	{ P_XO, 0 },231	{ P_GPLL0, 1 },232	{ P_GPLL0_DIV2, 2 },233};234 235static const struct parent_map gcc_xo_gpll0_gpll0div2_4_map[] = {236	{ P_XO, 0 },237	{ P_GPLL0, 1 },238	{ P_GPLL0_DIV2, 4 },239};240 241static const struct clk_parent_data gcc_xo_gpll0_gpll0div2_data[] = {242	{ .fw_name = "xo" },243	{ .hw = &gpll0.clkr.hw },244	{ .hw = &gpll0_early_div.hw },245};246 247static const struct parent_map gcc_apc_droop_detector_map[] = {248	{ P_XO, 0 },249	{ P_GPLL0, 1 },250	{ P_GPLL4, 2 },251};252 253static const struct clk_parent_data gcc_apc_droop_detector_data[] = {254	{ .fw_name = "xo" },255	{ .hw = &gpll0.clkr.hw },256	{ .hw = &gpll4.clkr.hw },257};258 259static const struct freq_tbl ftbl_apc_droop_detector_clk_src[] = {260	F(19200000, P_XO, 1, 0, 0),261	F(400000000, P_GPLL0, 2, 0, 0),262	F(576000000, P_GPLL4, 2, 0, 0),263	{ }264};265 266static struct clk_rcg2 apc0_droop_detector_clk_src = {267	.cmd_rcgr = 0x78008,268	.hid_width = 5,269	.freq_tbl = ftbl_apc_droop_detector_clk_src,270	.parent_map = gcc_apc_droop_detector_map,271	.clkr.hw.init = &(struct clk_init_data) {272		.name = "apc0_droop_detector_clk_src",273		.parent_data = gcc_apc_droop_detector_data,274		.num_parents = ARRAY_SIZE(gcc_apc_droop_detector_data),275		.ops = &clk_rcg2_ops,276	}277};278static struct clk_rcg2 apc1_droop_detector_clk_src = {279	.cmd_rcgr = 0x79008,280	.hid_width = 5,281	.freq_tbl = ftbl_apc_droop_detector_clk_src,282	.parent_map = gcc_apc_droop_detector_map,283	.clkr.hw.init = &(struct clk_init_data) {284		.name = "apc1_droop_detector_clk_src",285		.parent_data = gcc_apc_droop_detector_data,286		.num_parents = ARRAY_SIZE(gcc_apc_droop_detector_data),287		.ops = &clk_rcg2_ops,288	}289};290 291static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {292	F(19200000, P_XO, 1, 0, 0),293	F(25000000, P_GPLL0_DIV2, 16, 0, 0),294	F(50000000, P_GPLL0, 16, 0, 0),295	F(100000000, P_GPLL0, 8, 0, 0),296	F(133330000, P_GPLL0, 6, 0, 0),297	{ }298};299 300static struct clk_rcg2 apss_ahb_clk_src = {301	.cmd_rcgr = 0x46000,302	.hid_width = 5,303	.freq_tbl = ftbl_apss_ahb_clk_src,304	.parent_map = gcc_xo_gpll0_gpll0div2_4_map,305	.clkr.hw.init = &(struct clk_init_data) {306		.name = "apss_ahb_clk_src",307		.parent_data = gcc_xo_gpll0_gpll0div2_data,308		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),309		.ops = &clk_rcg2_ops,310	}311};312 313static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {314	F(19200000, P_XO, 1, 0, 0),315	F(25000000, P_GPLL0_DIV2, 16, 0, 0),316	F(50000000, P_GPLL0, 16, 0, 0),317	{ }318};319 320static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {321	.cmd_rcgr = 0x0200c,322	.hid_width = 5,323	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,324	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,325	.clkr.hw.init = &(struct clk_init_data) {326		.name = "blsp1_qup1_i2c_apps_clk_src",327		.parent_data = gcc_xo_gpll0_gpll0div2_data,328		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),329		.ops = &clk_rcg2_ops,330	}331};332 333static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {334	.cmd_rcgr = 0x03000,335	.hid_width = 5,336	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,337	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,338	.clkr.hw.init = &(struct clk_init_data) {339		.name = "blsp1_qup2_i2c_apps_clk_src",340		.parent_data = gcc_xo_gpll0_gpll0div2_data,341		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),342		.ops = &clk_rcg2_ops,343	}344};345 346static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {347	.cmd_rcgr = 0x04000,348	.hid_width = 5,349	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,350	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,351	.clkr.hw.init = &(struct clk_init_data) {352		.name = "blsp1_qup3_i2c_apps_clk_src",353		.parent_data = gcc_xo_gpll0_gpll0div2_data,354		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),355		.ops = &clk_rcg2_ops,356	}357};358 359static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {360	.cmd_rcgr = 0x05000,361	.hid_width = 5,362	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,363	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,364	.clkr.hw.init = &(struct clk_init_data) {365		.name = "blsp1_qup4_i2c_apps_clk_src",366		.parent_data = gcc_xo_gpll0_gpll0div2_data,367		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),368		.ops = &clk_rcg2_ops,369	}370};371 372static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {373	.cmd_rcgr = 0x0c00c,374	.hid_width = 5,375	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,376	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,377	.clkr.hw.init = &(struct clk_init_data) {378		.name = "blsp2_qup1_i2c_apps_clk_src",379		.parent_data = gcc_xo_gpll0_gpll0div2_data,380		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),381		.ops = &clk_rcg2_ops,382	}383};384 385static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {386	.cmd_rcgr = 0x0d000,387	.hid_width = 5,388	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,389	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,390	.clkr.hw.init = &(struct clk_init_data) {391		.name = "blsp2_qup2_i2c_apps_clk_src",392		.parent_data = gcc_xo_gpll0_gpll0div2_data,393		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),394		.ops = &clk_rcg2_ops,395	}396};397 398static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {399	.cmd_rcgr = 0x0f000,400	.hid_width = 5,401	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,402	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,403	.clkr.hw.init = &(struct clk_init_data) {404		.name = "blsp2_qup3_i2c_apps_clk_src",405		.parent_data = gcc_xo_gpll0_gpll0div2_data,406		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),407		.ops = &clk_rcg2_ops,408	}409};410 411static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {412	.cmd_rcgr = 0x18000,413	.hid_width = 5,414	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,415	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,416	.clkr.hw.init = &(struct clk_init_data) {417		.name = "blsp2_qup4_i2c_apps_clk_src",418		.parent_data = gcc_xo_gpll0_gpll0div2_data,419		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),420		.ops = &clk_rcg2_ops,421	}422};423 424static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = {425	F(960000, P_XO, 10, 1, 2),426	F(4800000, P_XO, 4, 0, 0),427	F(9600000, P_XO, 2, 0, 0),428	F(12500000, P_GPLL0_DIV2, 16, 1, 2),429	F(16000000, P_GPLL0, 10, 1, 5),430	F(19200000, P_XO, 1, 0, 0),431	F(25000000, P_GPLL0, 16, 1, 2),432	F(50000000, P_GPLL0, 16, 0, 0),433	{ }434};435 436static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {437	.cmd_rcgr = 0x02024,438	.hid_width = 5,439	.mnd_width = 8,440	.freq_tbl = ftbl_blsp_spi_apps_clk_src,441	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,442	.clkr.hw.init = &(struct clk_init_data) {443		.name = "blsp1_qup1_spi_apps_clk_src",444		.parent_data = gcc_xo_gpll0_gpll0div2_data,445		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),446		.ops = &clk_rcg2_ops,447	}448};449 450static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {451	.cmd_rcgr = 0x03014,452	.hid_width = 5,453	.mnd_width = 8,454	.freq_tbl = ftbl_blsp_spi_apps_clk_src,455	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,456	.clkr.hw.init = &(struct clk_init_data) {457		.name = "blsp1_qup2_spi_apps_clk_src",458		.parent_data = gcc_xo_gpll0_gpll0div2_data,459		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),460		.ops = &clk_rcg2_ops,461	}462};463 464static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {465	.cmd_rcgr = 0x04024,466	.hid_width = 5,467	.mnd_width = 8,468	.freq_tbl = ftbl_blsp_spi_apps_clk_src,469	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,470	.clkr.hw.init = &(struct clk_init_data) {471		.name = "blsp1_qup3_spi_apps_clk_src",472		.parent_data = gcc_xo_gpll0_gpll0div2_data,473		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),474		.ops = &clk_rcg2_ops,475	}476};477 478static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {479	.cmd_rcgr = 0x05024,480	.hid_width = 5,481	.mnd_width = 8,482	.freq_tbl = ftbl_blsp_spi_apps_clk_src,483	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,484	.clkr.hw.init = &(struct clk_init_data) {485		.name = "blsp1_qup4_spi_apps_clk_src",486		.parent_data = gcc_xo_gpll0_gpll0div2_data,487		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),488		.ops = &clk_rcg2_ops,489	}490};491 492static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {493	.cmd_rcgr = 0x0c024,494	.hid_width = 5,495	.mnd_width = 8,496	.freq_tbl = ftbl_blsp_spi_apps_clk_src,497	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,498	.clkr.hw.init = &(struct clk_init_data) {499		.name = "blsp2_qup1_spi_apps_clk_src",500		.parent_data = gcc_xo_gpll0_gpll0div2_data,501		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),502		.ops = &clk_rcg2_ops,503	}504};505 506static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {507	.cmd_rcgr = 0x0d014,508	.hid_width = 5,509	.mnd_width = 8,510	.freq_tbl = ftbl_blsp_spi_apps_clk_src,511	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,512	.clkr.hw.init = &(struct clk_init_data) {513		.name = "blsp2_qup2_spi_apps_clk_src",514		.parent_data = gcc_xo_gpll0_gpll0div2_data,515		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),516		.ops = &clk_rcg2_ops,517	}518};519 520static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {521	.cmd_rcgr = 0x0f024,522	.hid_width = 5,523	.mnd_width = 8,524	.freq_tbl = ftbl_blsp_spi_apps_clk_src,525	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,526	.clkr.hw.init = &(struct clk_init_data) {527		.name = "blsp2_qup3_spi_apps_clk_src",528		.parent_data = gcc_xo_gpll0_gpll0div2_data,529		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),530		.ops = &clk_rcg2_ops,531	}532};533 534static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {535	.cmd_rcgr = 0x18024,536	.hid_width = 5,537	.mnd_width = 8,538	.freq_tbl = ftbl_blsp_spi_apps_clk_src,539	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,540	.clkr.hw.init = &(struct clk_init_data) {541		.name = "blsp2_qup4_spi_apps_clk_src",542		.parent_data = gcc_xo_gpll0_gpll0div2_data,543		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),544		.ops = &clk_rcg2_ops,545	}546};547 548static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {549	F(3686400, P_GPLL0_DIV2, 1, 144, 15625),550	F(7372800, P_GPLL0_DIV2, 1, 288, 15625),551	F(14745600, P_GPLL0_DIV2, 1, 576, 15625),552	F(16000000, P_GPLL0_DIV2, 5, 1, 5),553	F(19200000, P_XO, 1, 0, 0),554	F(24000000, P_GPLL0, 1, 3, 100),555	F(25000000, P_GPLL0, 16, 1, 2),556	F(32000000, P_GPLL0, 1, 1, 25),557	F(40000000, P_GPLL0, 1, 1, 20),558	F(46400000, P_GPLL0, 1, 29, 500),559	F(48000000, P_GPLL0, 1, 3, 50),560	F(51200000, P_GPLL0, 1, 8, 125),561	F(56000000, P_GPLL0, 1, 7, 100),562	F(58982400, P_GPLL0, 1, 1152, 15625),563	F(60000000, P_GPLL0, 1, 3, 40),564	F(64000000, P_GPLL0, 1, 2, 25),565	{ }566};567 568static struct clk_rcg2 blsp1_uart1_apps_clk_src = {569	.cmd_rcgr = 0x02044,570	.hid_width = 5,571	.mnd_width = 16,572	.freq_tbl = ftbl_blsp_uart_apps_clk_src,573	.parent_map = gcc_xo_gpll0_gpll0div2_4_map,574	.clkr.hw.init = &(struct clk_init_data) {575		.name = "blsp1_uart1_apps_clk_src",576		.parent_data = gcc_xo_gpll0_gpll0div2_data,577		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),578		.ops = &clk_rcg2_ops,579	}580};581 582static struct clk_rcg2 blsp1_uart2_apps_clk_src = {583	.cmd_rcgr = 0x03034,584	.hid_width = 5,585	.mnd_width = 16,586	.freq_tbl = ftbl_blsp_uart_apps_clk_src,587	.parent_map = gcc_xo_gpll0_gpll0div2_4_map,588	.clkr.hw.init = &(struct clk_init_data) {589		.name = "blsp1_uart2_apps_clk_src",590		.parent_data = gcc_xo_gpll0_gpll0div2_data,591		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),592		.ops = &clk_rcg2_ops,593	}594};595 596static struct clk_rcg2 blsp2_uart1_apps_clk_src = {597	.cmd_rcgr = 0x0c044,598	.hid_width = 5,599	.mnd_width = 16,600	.freq_tbl = ftbl_blsp_uart_apps_clk_src,601	.parent_map = gcc_xo_gpll0_gpll0div2_4_map,602	.clkr.hw.init = &(struct clk_init_data) {603		.name = "blsp2_uart1_apps_clk_src",604		.parent_data = gcc_xo_gpll0_gpll0div2_data,605		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),606		.ops = &clk_rcg2_ops,607	}608};609 610static struct clk_rcg2 blsp2_uart2_apps_clk_src = {611	.cmd_rcgr = 0x0d034,612	.hid_width = 5,613	.mnd_width = 16,614	.freq_tbl = ftbl_blsp_uart_apps_clk_src,615	.parent_map = gcc_xo_gpll0_gpll0div2_4_map,616	.clkr.hw.init = &(struct clk_init_data) {617		.name = "blsp2_uart2_apps_clk_src",618		.parent_data = gcc_xo_gpll0_gpll0div2_data,619		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),620		.ops = &clk_rcg2_ops,621	}622};623 624static const struct parent_map gcc_byte0_map[] = {625	{ P_XO, 0 },626	{ P_DSI0PLL_BYTE, 1 },627	{ P_DSI1PLL_BYTE, 3 },628};629 630static const struct parent_map gcc_byte1_map[] = {631	{ P_XO, 0 },632	{ P_DSI0PLL_BYTE, 3 },633	{ P_DSI1PLL_BYTE, 1 },634};635 636static const struct clk_parent_data gcc_byte_data[] = {637	{ .fw_name = "xo" },638	{ .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" },639	{ .fw_name = "dsi1pllbyte", .name = "dsi1pllbyte" },640};641 642static struct clk_rcg2 byte0_clk_src = {643	.cmd_rcgr = 0x4d044,644	.hid_width = 5,645	.parent_map = gcc_byte0_map,646	.clkr.hw.init = &(struct clk_init_data) {647		.name = "byte0_clk_src",648		.parent_data = gcc_byte_data,649		.num_parents = ARRAY_SIZE(gcc_byte_data),650		.ops = &clk_byte2_ops,651		.flags = CLK_SET_RATE_PARENT,652	}653};654 655static struct clk_rcg2 byte1_clk_src = {656	.cmd_rcgr = 0x4d0b0,657	.hid_width = 5,658	.parent_map = gcc_byte1_map,659	.clkr.hw.init = &(struct clk_init_data) {660		.name = "byte1_clk_src",661		.parent_data = gcc_byte_data,662		.num_parents = ARRAY_SIZE(gcc_byte_data),663		.ops = &clk_byte2_ops,664		.flags = CLK_SET_RATE_PARENT,665	}666};667 668static const struct parent_map gcc_gp_map[] = {669	{ P_XO, 0 },670	{ P_GPLL0, 1 },671	{ P_GPLL6, 2 },672	{ P_GPLL0_DIV2, 4 },673	{ P_SLEEP_CLK, 6 },674};675 676static const struct clk_parent_data gcc_gp_data[] = {677	{ .fw_name = "xo" },678	{ .hw = &gpll0.clkr.hw },679	{ .hw = &gpll6.clkr.hw },680	{ .hw = &gpll0_early_div.hw },681	{ .fw_name = "sleep", .name = "sleep" },682};683 684static const struct freq_tbl ftbl_camss_gp_clk_src[] = {685	F(50000000, P_GPLL0_DIV2, 8, 0, 0),686	F(100000000, P_GPLL0, 8, 0, 0),687	F(200000000, P_GPLL0, 4, 0, 0),688	F(266670000, P_GPLL0, 3, 0, 0),689	{ }690};691 692static struct clk_rcg2 camss_gp0_clk_src = {693	.cmd_rcgr = 0x54000,694	.hid_width = 5,695	.mnd_width = 8,696	.freq_tbl = ftbl_camss_gp_clk_src,697	.parent_map = gcc_gp_map,698	.clkr.hw.init = &(struct clk_init_data) {699		.name = "camss_gp0_clk_src",700		.parent_data = gcc_gp_data,701		.num_parents = ARRAY_SIZE(gcc_gp_data),702		.ops = &clk_rcg2_ops,703	}704};705 706static struct clk_rcg2 camss_gp1_clk_src = {707	.cmd_rcgr = 0x55000,708	.hid_width = 5,709	.mnd_width = 8,710	.freq_tbl = ftbl_camss_gp_clk_src,711	.parent_map = gcc_gp_map,712	.clkr.hw.init = &(struct clk_init_data) {713		.name = "camss_gp1_clk_src",714		.parent_data = gcc_gp_data,715		.num_parents = ARRAY_SIZE(gcc_gp_data),716		.ops = &clk_rcg2_ops,717	}718};719 720static const struct freq_tbl ftbl_camss_top_ahb_clk_src[] = {721	F(40000000, P_GPLL0_DIV2, 10, 0, 0),722	F(80000000, P_GPLL0, 10, 0, 0),723	{ }724};725 726static struct clk_rcg2 camss_top_ahb_clk_src = {727	.cmd_rcgr = 0x5a000,728	.hid_width = 5,729	.freq_tbl = ftbl_camss_top_ahb_clk_src,730	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,731	.clkr.hw.init = &(struct clk_init_data) {732		.name = "camss_top_ahb_clk_src",733		.parent_data = gcc_xo_gpll0_gpll0div2_data,734		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),735		.ops = &clk_rcg2_ops,736	}737};738 739static const struct parent_map gcc_cci_map[] = {740	{ P_XO, 0 },741	{ P_GPLL0, 2 },742	{ P_GPLL0_DIV2, 3 },743	{ P_SLEEP_CLK, 6 },744};745 746static const struct clk_parent_data gcc_cci_data[] = {747	{ .fw_name = "xo" },748	{ .hw = &gpll0.clkr.hw },749	{ .hw = &gpll0_early_div.hw },750	{ .fw_name = "sleep", .name = "sleep" },751};752 753static const struct freq_tbl ftbl_cci_clk_src[] = {754	F(19200000, P_XO, 1, 0, 0),755	F(37500000, P_GPLL0_DIV2, 1, 3, 32),756	{ }757};758 759static struct clk_rcg2 cci_clk_src = {760	.cmd_rcgr = 0x51000,761	.hid_width = 5,762	.mnd_width = 8,763	.freq_tbl = ftbl_cci_clk_src,764	.parent_map = gcc_cci_map,765	.clkr.hw.init = &(struct clk_init_data) {766		.name = "cci_clk_src",767		.parent_data = gcc_cci_data,768		.num_parents = ARRAY_SIZE(gcc_cci_data),769		.ops = &clk_rcg2_ops,770	}771};772 773static const struct parent_map gcc_cpp_map[] = {774	{ P_XO, 0 },775	{ P_GPLL0, 1 },776	{ P_GPLL6, 3 },777	{ P_GPLL2, 4 },778	{ P_GPLL0_DIV2, 5 },779};780 781static const struct clk_parent_data gcc_cpp_data[] = {782	{ .fw_name = "xo" },783	{ .hw = &gpll0.clkr.hw },784	{ .hw = &gpll6.clkr.hw },785	{ .hw = &gpll2.clkr.hw },786	{ .hw = &gpll0_early_div.hw },787};788 789static const struct freq_tbl ftbl_cpp_clk_src[] = {790	F(100000000, P_GPLL0_DIV2, 4, 0, 0),791	F(200000000, P_GPLL0, 4, 0, 0),792	F(266670000, P_GPLL0, 3, 0, 0),793	F(320000000, P_GPLL0, 2.5, 0, 0),794	F(400000000, P_GPLL0, 2, 0, 0),795	F(465000000, P_GPLL2, 2, 0, 0),796	{ }797};798 799static struct clk_rcg2 cpp_clk_src = {800	.cmd_rcgr = 0x58018,801	.hid_width = 5,802	.freq_tbl = ftbl_cpp_clk_src,803	.parent_map = gcc_cpp_map,804	.clkr.hw.init = &(struct clk_init_data) {805		.name = "cpp_clk_src",806		.parent_data = gcc_cpp_data,807		.num_parents = ARRAY_SIZE(gcc_cpp_data),808		.ops = &clk_rcg2_ops,809	}810};811 812static const struct freq_tbl ftbl_crypto_clk_src[] = {813	F(40000000, P_GPLL0_DIV2, 10, 0, 0),814	F(80000000, P_GPLL0, 10, 0, 0),815	F(100000000, P_GPLL0, 8, 0, 0),816	F(160000000, P_GPLL0, 5, 0, 0),817	{ }818};819 820static struct clk_rcg2 crypto_clk_src = {821	.cmd_rcgr = 0x16004,822	.hid_width = 5,823	.freq_tbl = ftbl_crypto_clk_src,824	.parent_map = gcc_xo_gpll0_gpll0div2_4_map,825	.clkr.hw.init = &(struct clk_init_data) {826		.name = "crypto_clk_src",827		.parent_data = gcc_xo_gpll0_gpll0div2_data,828		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),829		.ops = &clk_rcg2_ops,830	}831};832 833static const struct parent_map gcc_csi0_map[] = {834	{ P_XO, 0 },835	{ P_GPLL0, 1 },836	{ P_GPLL2, 4 },837	{ P_GPLL0_DIV2, 5 },838};839 840static const struct parent_map gcc_csi12_map[] = {841	{ P_XO, 0 },842	{ P_GPLL0, 1 },843	{ P_GPLL2, 5 },844	{ P_GPLL0_DIV2, 4 },845};846 847static const struct clk_parent_data gcc_csi_data[] = {848	{ .fw_name = "xo" },849	{ .hw = &gpll0.clkr.hw },850	{ .hw = &gpll2.clkr.hw },851	{ .hw = &gpll0_early_div.hw },852};853 854static const struct freq_tbl ftbl_csi_clk_src[] = {855	F(100000000, P_GPLL0_DIV2, 4, 0, 0),856	F(200000000, P_GPLL0, 4, 0, 0),857	F(310000000, P_GPLL2, 3, 0, 0),858	F(400000000, P_GPLL0, 2, 0, 0),859	F(465000000, P_GPLL2, 2, 0, 0),860	{ }861};862 863static struct clk_rcg2 csi0_clk_src = {864	.cmd_rcgr = 0x4e020,865	.hid_width = 5,866	.freq_tbl = ftbl_csi_clk_src,867	.parent_map = gcc_csi0_map,868	.clkr.hw.init = &(struct clk_init_data) {869		.name = "csi0_clk_src",870		.parent_data = gcc_csi_data,871		.num_parents = ARRAY_SIZE(gcc_csi_data),872		.ops = &clk_rcg2_ops,873	}874};875 876static struct clk_rcg2 csi1_clk_src = {877	.cmd_rcgr = 0x4f020,878	.hid_width = 5,879	.freq_tbl = ftbl_csi_clk_src,880	.parent_map = gcc_csi12_map,881	.clkr.hw.init = &(struct clk_init_data) {882		.name = "csi1_clk_src",883		.parent_data = gcc_csi_data,884		.num_parents = ARRAY_SIZE(gcc_csi_data),885		.ops = &clk_rcg2_ops,886	}887};888 889static struct clk_rcg2 csi2_clk_src = {890	.cmd_rcgr = 0x3c020,891	.hid_width = 5,892	.freq_tbl = ftbl_csi_clk_src,893	.parent_map = gcc_csi12_map,894	.clkr.hw.init = &(struct clk_init_data) {895		.name = "csi2_clk_src",896		.parent_data = gcc_csi_data,897		.num_parents = ARRAY_SIZE(gcc_csi_data),898		.ops = &clk_rcg2_ops,899	}900};901 902static const struct parent_map gcc_csip_map[] = {903	{ P_XO, 0 },904	{ P_GPLL0, 1 },905	{ P_GPLL4, 3 },906	{ P_GPLL2, 4 },907	{ P_GPLL0_DIV2, 5 },908};909 910static const struct clk_parent_data gcc_csip_data[] = {911	{ .fw_name = "xo" },912	{ .hw = &gpll0.clkr.hw },913	{ .hw = &gpll4.clkr.hw },914	{ .hw = &gpll2.clkr.hw },915	{ .hw = &gpll0_early_div.hw },916};917 918static const struct freq_tbl ftbl_csi_p_clk_src[] = {919	F(66670000, P_GPLL0_DIV2, 6, 0, 0),920	F(133330000, P_GPLL0, 6, 0, 0),921	F(200000000, P_GPLL0, 4, 0, 0),922	F(266670000, P_GPLL0, 3, 0, 0),923	F(310000000, P_GPLL2, 3, 0, 0),924	{ }925};926 927static struct clk_rcg2 csi0p_clk_src = {928	.cmd_rcgr = 0x58084,929	.hid_width = 5,930	.freq_tbl = ftbl_csi_p_clk_src,931	.parent_map = gcc_csip_map,932	.clkr.hw.init = &(struct clk_init_data) {933		.name = "csi0p_clk_src",934		.parent_data = gcc_csip_data,935		.num_parents = ARRAY_SIZE(gcc_csip_data),936		.ops = &clk_rcg2_ops,937	}938};939 940static struct clk_rcg2 csi1p_clk_src = {941	.cmd_rcgr = 0x58094,942	.hid_width = 5,943	.freq_tbl = ftbl_csi_p_clk_src,944	.parent_map = gcc_csip_map,945	.clkr.hw.init = &(struct clk_init_data) {946		.name = "csi1p_clk_src",947		.parent_data = gcc_csip_data,948		.num_parents = ARRAY_SIZE(gcc_csip_data),949		.ops = &clk_rcg2_ops,950	}951};952 953static struct clk_rcg2 csi2p_clk_src = {954	.cmd_rcgr = 0x580a4,955	.hid_width = 5,956	.freq_tbl = ftbl_csi_p_clk_src,957	.parent_map = gcc_csip_map,958	.clkr.hw.init = &(struct clk_init_data) {959		.name = "csi2p_clk_src",960		.parent_data = gcc_csip_data,961		.num_parents = ARRAY_SIZE(gcc_csip_data),962		.ops = &clk_rcg2_ops,963	}964};965 966static const struct freq_tbl ftbl_csi_phytimer_clk_src[] = {967	F(100000000, P_GPLL0_DIV2, 4, 0, 0),968	F(200000000, P_GPLL0, 4, 0, 0),969	F(266670000, P_GPLL0, 3, 0, 0),970	{ }971};972 973static struct clk_rcg2 csi0phytimer_clk_src = {974	.cmd_rcgr = 0x4e000,975	.hid_width = 5,976	.freq_tbl = ftbl_csi_phytimer_clk_src,977	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,978	.clkr.hw.init = &(struct clk_init_data) {979		.name = "csi0phytimer_clk_src",980		.parent_data = gcc_xo_gpll0_gpll0div2_data,981		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),982		.ops = &clk_rcg2_ops,983	}984};985 986static struct clk_rcg2 csi1phytimer_clk_src = {987	.cmd_rcgr = 0x4f000,988	.hid_width = 5,989	.freq_tbl = ftbl_csi_phytimer_clk_src,990	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,991	.clkr.hw.init = &(struct clk_init_data) {992		.name = "csi1phytimer_clk_src",993		.parent_data = gcc_xo_gpll0_gpll0div2_data,994		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),995		.ops = &clk_rcg2_ops,996	}997};998 999static struct clk_rcg2 csi2phytimer_clk_src = {1000	.cmd_rcgr = 0x4f05c,1001	.hid_width = 5,1002	.freq_tbl = ftbl_csi_phytimer_clk_src,1003	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,1004	.clkr.hw.init = &(struct clk_init_data) {1005		.name = "csi2phytimer_clk_src",1006		.parent_data = gcc_xo_gpll0_gpll0div2_data,1007		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),1008		.ops = &clk_rcg2_ops,1009	}1010};1011 1012static const struct parent_map gcc_esc_map[] = {1013	{ P_XO, 0 },1014	{ P_GPLL0, 3 },1015};1016 1017static const struct clk_parent_data gcc_esc_vsync_data[] = {1018	{ .fw_name = "xo" },1019	{ .hw = &gpll0.clkr.hw },1020};1021 1022static const struct freq_tbl ftbl_esc0_1_clk_src[] = {1023	F(19200000, P_XO, 1, 0, 0),1024	{ }1025};1026 1027static struct clk_rcg2 esc0_clk_src = {1028	.cmd_rcgr = 0x4d05c,1029	.hid_width = 5,1030	.freq_tbl = ftbl_esc0_1_clk_src,1031	.parent_map = gcc_esc_map,1032	.clkr.hw.init = &(struct clk_init_data) {1033		.name = "esc0_clk_src",1034		.parent_data = gcc_esc_vsync_data,1035		.num_parents = ARRAY_SIZE(gcc_esc_vsync_data),1036		.ops = &clk_rcg2_ops,1037	}1038};1039 1040static struct clk_rcg2 esc1_clk_src = {1041	.cmd_rcgr = 0x4d0a8,1042	.hid_width = 5,1043	.freq_tbl = ftbl_esc0_1_clk_src,1044	.parent_map = gcc_esc_map,1045	.clkr.hw.init = &(struct clk_init_data) {1046		.name = "esc1_clk_src",1047		.parent_data = gcc_esc_vsync_data,1048		.num_parents = ARRAY_SIZE(gcc_esc_vsync_data),1049		.ops = &clk_rcg2_ops,1050	}1051};1052 1053static const struct parent_map gcc_gfx3d_map[] = {1054	{ P_XO, 0 },1055	{ P_GPLL0, 1 },1056	{ P_GPLL3, 2 },1057	{ P_GPLL6, 3 },1058	{ P_GPLL4, 4 },1059	{ P_GPLL0_DIV2, 5 },1060	{ P_GPLL6_DIV2, 6 },1061};1062 1063static const struct clk_parent_data gcc_gfx3d_data[] = {1064	{ .fw_name = "xo" },1065	{ .hw = &gpll0.clkr.hw },1066	{ .hw = &gpll3.clkr.hw },1067	{ .hw = &gpll6.clkr.hw },1068	{ .hw = &gpll4.clkr.hw },1069	{ .hw = &gpll0_early_div.hw },1070	{ .hw = &gpll6_early_div.hw },1071};1072 1073static const struct freq_tbl ftbl_gfx3d_clk_src[] = {1074	F(19200000, P_XO, 1, 0, 0),1075	F(50000000, P_GPLL0_DIV2, 8, 0, 0),1076	F(80000000, P_GPLL0_DIV2, 5, 0, 0),1077	F(100000000, P_GPLL0_DIV2, 4, 0, 0),1078	F(133330000, P_GPLL0_DIV2, 3, 0, 0),1079	F(160000000, P_GPLL0_DIV2, 2.5, 0, 0),1080	F(200000000, P_GPLL0_DIV2, 2, 0, 0),1081	F(266670000, P_GPLL0, 3.0, 0, 0),1082	F(320000000, P_GPLL0, 2.5, 0, 0),1083	F(400000000, P_GPLL0, 2, 0, 0),1084	F(460800000, P_GPLL4, 2.5, 0, 0),1085	F(510000000, P_GPLL3, 2, 0, 0),1086	F(560000000, P_GPLL3, 2, 0, 0),1087	F(600000000, P_GPLL3, 2, 0, 0),1088	F(650000000, P_GPLL3, 2, 0, 0),1089	F(685000000, P_GPLL3, 2, 0, 0),1090	F(725000000, P_GPLL3, 2, 0, 0),1091	{ }1092};1093 1094static struct clk_rcg2 gfx3d_clk_src = {1095	.cmd_rcgr = 0x59000,1096	.hid_width = 5,1097	.freq_tbl = ftbl_gfx3d_clk_src,1098	.parent_map = gcc_gfx3d_map,1099	.clkr.hw.init = &(struct clk_init_data) {1100		.name = "gfx3d_clk_src",1101		.parent_data = gcc_gfx3d_data,1102		.num_parents = ARRAY_SIZE(gcc_gfx3d_data),1103		.ops = &clk_rcg2_floor_ops,1104		.flags = CLK_SET_RATE_PARENT,1105	}1106};1107 1108static const struct freq_tbl ftbl_gp_clk_src[] = {1109	F(19200000, P_XO, 1, 0, 0),1110	{ }1111};1112 1113static struct clk_rcg2 gp1_clk_src = {1114	.cmd_rcgr = 0x08004,1115	.hid_width = 5,1116	.mnd_width = 8,1117	.freq_tbl = ftbl_gp_clk_src,1118	.parent_map = gcc_gp_map,1119	.clkr.hw.init = &(struct clk_init_data) {1120		.name = "gp1_clk_src",1121		.parent_data = gcc_gp_data,1122		.num_parents = ARRAY_SIZE(gcc_gp_data),1123		.ops = &clk_rcg2_ops,1124	}1125};1126 1127static struct clk_rcg2 gp2_clk_src = {1128	.cmd_rcgr = 0x09004,1129	.hid_width = 5,1130	.mnd_width = 8,1131	.freq_tbl = ftbl_gp_clk_src,1132	.parent_map = gcc_gp_map,1133	.clkr.hw.init = &(struct clk_init_data) {1134		.name = "gp2_clk_src",1135		.parent_data = gcc_gp_data,1136		.num_parents = ARRAY_SIZE(gcc_gp_data),1137		.ops = &clk_rcg2_ops,1138	}1139};1140 1141static struct clk_rcg2 gp3_clk_src = {1142	.cmd_rcgr = 0x0a004,1143	.hid_width = 5,1144	.mnd_width = 8,1145	.freq_tbl = ftbl_gp_clk_src,1146	.parent_map = gcc_gp_map,1147	.clkr.hw.init = &(struct clk_init_data) {1148		.name = "gp3_clk_src",1149		.parent_data = gcc_gp_data,1150		.num_parents = ARRAY_SIZE(gcc_gp_data),1151		.ops = &clk_rcg2_ops,1152	}1153};1154 1155static const struct parent_map gcc_jpeg0_map[] = {1156	{ P_XO, 0 },1157	{ P_GPLL0, 1 },1158	{ P_GPLL6, 2 },1159	{ P_GPLL0_DIV2, 4 },1160	{ P_GPLL2, 5 },1161};1162 1163static const struct clk_parent_data gcc_jpeg0_data[] = {1164	{ .fw_name = "xo" },1165	{ .hw = &gpll0.clkr.hw },1166	{ .hw = &gpll6.clkr.hw },1167	{ .hw = &gpll0_early_div.hw },1168	{ .hw = &gpll2.clkr.hw },1169};1170 1171static const struct freq_tbl ftbl_jpeg0_clk_src[] = {1172	F(66670000, P_GPLL0_DIV2, 6, 0, 0),1173	F(133330000, P_GPLL0, 6, 0, 0),1174	F(200000000, P_GPLL0, 4, 0, 0),1175	F(266670000, P_GPLL0, 3, 0, 0),1176	F(310000000, P_GPLL2, 3, 0, 0),1177	F(320000000, P_GPLL0, 2.5, 0, 0),1178	{ }1179};1180 1181static struct clk_rcg2 jpeg0_clk_src = {1182	.cmd_rcgr = 0x57000,1183	.hid_width = 5,1184	.freq_tbl = ftbl_jpeg0_clk_src,1185	.parent_map = gcc_jpeg0_map,1186	.clkr.hw.init = &(struct clk_init_data) {1187		.name = "jpeg0_clk_src",1188		.parent_data = gcc_jpeg0_data,1189		.num_parents = ARRAY_SIZE(gcc_jpeg0_data),1190		.ops = &clk_rcg2_ops,1191	}1192};1193 1194static const struct parent_map gcc_mclk_map[] = {1195	{ P_XO, 0 },1196	{ P_GPLL0, 1 },1197	{ P_GPLL6, 2 },1198	{ P_GPLL0_DIV2, 4 },1199	{ P_GPLL6_DIV2, 5 },1200	{ P_SLEEP_CLK, 6 },1201};1202 1203static const struct clk_parent_data gcc_mclk_data[] = {1204	{ .fw_name = "xo" },1205	{ .hw = &gpll0.clkr.hw },1206	{ .hw = &gpll6.clkr.hw },1207	{ .hw = &gpll0_early_div.hw },1208	{ .hw = &gpll6_early_div.hw },1209	{ .fw_name = "sleep", .name = "sleep" },1210};1211 1212static const struct freq_tbl ftbl_mclk_clk_src[] = {1213	F(19200000, P_GPLL6, 5, 4, 45),1214	F(24000000, P_GPLL6_DIV2, 1, 2, 45),1215	F(26000000, P_GPLL0, 1, 4, 123),1216	F(33330000, P_GPLL0_DIV2, 12, 0, 0),1217	F(36610000, P_GPLL6, 1, 2, 59),1218	F(66667000, P_GPLL0, 12, 0, 0),1219	{ }1220};1221 1222static struct clk_rcg2 mclk0_clk_src = {1223	.cmd_rcgr = 0x52000,1224	.hid_width = 5,1225	.mnd_width = 8,1226	.freq_tbl = ftbl_mclk_clk_src,1227	.parent_map = gcc_mclk_map,1228	.clkr.hw.init = &(struct clk_init_data) {1229		.name = "mclk0_clk_src",1230		.parent_data = gcc_mclk_data,1231		.num_parents = ARRAY_SIZE(gcc_mclk_data),1232		.ops = &clk_rcg2_ops,1233	}1234};1235 1236static struct clk_rcg2 mclk1_clk_src = {1237	.cmd_rcgr = 0x53000,1238	.hid_width = 5,1239	.mnd_width = 8,1240	.freq_tbl = ftbl_mclk_clk_src,1241	.parent_map = gcc_mclk_map,1242	.clkr.hw.init = &(struct clk_init_data) {1243		.name = "mclk1_clk_src",1244		.parent_data = gcc_mclk_data,1245		.num_parents = ARRAY_SIZE(gcc_mclk_data),1246		.ops = &clk_rcg2_ops,1247	}1248};1249 1250static struct clk_rcg2 mclk2_clk_src = {1251	.cmd_rcgr = 0x5c000,1252	.hid_width = 5,1253	.mnd_width = 8,1254	.freq_tbl = ftbl_mclk_clk_src,1255	.parent_map = gcc_mclk_map,1256	.clkr.hw.init = &(struct clk_init_data) {1257		.name = "mclk2_clk_src",1258		.parent_data = gcc_mclk_data,1259		.num_parents = ARRAY_SIZE(gcc_mclk_data),1260		.ops = &clk_rcg2_ops,1261	}1262};1263 1264static struct clk_rcg2 mclk3_clk_src = {1265	.cmd_rcgr = 0x5e000,1266	.hid_width = 5,1267	.mnd_width = 8,1268	.freq_tbl = ftbl_mclk_clk_src,1269	.parent_map = gcc_mclk_map,1270	.clkr.hw.init = &(struct clk_init_data) {1271		.name = "mclk3_clk_src",1272		.parent_data = gcc_mclk_data,1273		.num_parents = ARRAY_SIZE(gcc_mclk_data),1274		.ops = &clk_rcg2_ops,1275	}1276};1277 1278static const struct parent_map gcc_mdp_map[] = {1279	{ P_XO, 0 },1280	{ P_GPLL0, 1 },1281	{ P_GPLL6, 3 },1282	{ P_GPLL0_DIV2, 4 },1283};1284 1285static const struct clk_parent_data gcc_mdp_data[] = {1286	{ .fw_name = "xo" },1287	{ .hw = &gpll0.clkr.hw },1288	{ .hw = &gpll6.clkr.hw },1289	{ .hw = &gpll0_early_div.hw },1290};1291 1292static const struct freq_tbl ftbl_mdp_clk_src[] = {1293	F(50000000, P_GPLL0_DIV2, 8, 0, 0),1294	F(80000000, P_GPLL0_DIV2, 5, 0, 0),1295	F(160000000, P_GPLL0_DIV2, 2.5, 0, 0),1296	F(200000000, P_GPLL0, 4, 0, 0),1297	F(266670000, P_GPLL0, 3, 0, 0),1298	F(320000000, P_GPLL0, 2.5, 0, 0),1299	F(400000000, P_GPLL0, 2, 0, 0),1300	{ }1301};1302 1303static struct clk_rcg2 mdp_clk_src = {1304	.cmd_rcgr = 0x4d014,1305	.hid_width = 5,1306	.freq_tbl = ftbl_mdp_clk_src,1307	.parent_map = gcc_mdp_map,1308	.clkr.hw.init = &(struct clk_init_data) {1309		.name = "mdp_clk_src",1310		.parent_data = gcc_mdp_data,1311		.num_parents = ARRAY_SIZE(gcc_mdp_data),1312		.ops = &clk_rcg2_ops,1313	}1314};1315 1316static const struct parent_map gcc_pclk0_map[] = {1317	{ P_XO, 0 },1318	{ P_DSI0PLL, 1 },1319	{ P_DSI1PLL, 3 },1320};1321 1322static const struct parent_map gcc_pclk1_map[] = {1323	{ P_XO, 0 },1324	{ P_DSI0PLL, 3 },1325	{ P_DSI1PLL, 1 },1326};1327 1328static const struct clk_parent_data gcc_pclk_data[] = {1329	{ .fw_name = "xo" },1330	{ .fw_name = "dsi0pll", .name = "dsi0pll" },1331	{ .fw_name = "dsi1pll", .name = "dsi1pll" },1332};1333 1334static struct clk_rcg2 pclk0_clk_src = {1335	.cmd_rcgr = 0x4d000,1336	.hid_width = 5,1337	.mnd_width = 8,1338	.parent_map = gcc_pclk0_map,1339	.clkr.hw.init = &(struct clk_init_data) {1340		.name = "pclk0_clk_src",1341		.parent_data = gcc_pclk_data,1342		.num_parents = ARRAY_SIZE(gcc_pclk_data),1343		.ops = &clk_pixel_ops,1344		.flags = CLK_SET_RATE_PARENT,1345	}1346};1347 1348static struct clk_rcg2 pclk1_clk_src = {1349	.cmd_rcgr = 0x4d0b8,1350	.hid_width = 5,1351	.mnd_width = 8,1352	.parent_map = gcc_pclk1_map,1353	.clkr.hw.init = &(struct clk_init_data) {1354		.name = "pclk1_clk_src",1355		.parent_data = gcc_pclk_data,1356		.num_parents = ARRAY_SIZE(gcc_pclk_data),1357		.ops = &clk_pixel_ops,1358		.flags = CLK_SET_RATE_PARENT,1359	}1360};1361 1362static const struct freq_tbl ftbl_pdm2_clk_src[] = {1363	F(32000000, P_GPLL0_DIV2, 12.5, 0, 0),1364	F(64000000, P_GPLL0, 12.5, 0, 0),1365	{ }1366};1367 1368static struct clk_rcg2 pdm2_clk_src = {1369	.cmd_rcgr = 0x44010,1370	.hid_width = 5,1371	.freq_tbl = ftbl_pdm2_clk_src,1372	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,1373	.clkr.hw.init = &(struct clk_init_data) {1374		.name = "pdm2_clk_src",1375		.parent_data = gcc_xo_gpll0_gpll0div2_data,1376		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),1377		.ops = &clk_rcg2_ops,1378	}1379};1380 1381static const struct freq_tbl ftbl_rbcpr_gfx_clk_src[] = {1382	F(19200000, P_XO, 1, 0, 0),1383	F(50000000, P_GPLL0, 16, 0, 0),1384	{ }1385};1386 1387static struct clk_rcg2 rbcpr_gfx_clk_src = {1388	.cmd_rcgr = 0x3a00c,1389	.hid_width = 5,1390	.freq_tbl = ftbl_rbcpr_gfx_clk_src,1391	.parent_map = gcc_xo_gpll0_gpll0div2_4_map,1392	.clkr.hw.init = &(struct clk_init_data) {1393		.name = "rbcpr_gfx_clk_src",1394		.parent_data = gcc_xo_gpll0_gpll0div2_data,1395		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),1396		.ops = &clk_rcg2_ops,1397	}1398};1399 1400static const struct parent_map gcc_sdcc1_ice_core_map[] = {1401	{ P_XO, 0 },1402	{ P_GPLL0, 1 },1403	{ P_GPLL6, 2 },1404	{ P_GPLL0_DIV2, 4 },1405};1406 1407static const struct clk_parent_data gcc_sdcc1_ice_core_data[] = {1408	{ .fw_name = "xo" },1409	{ .hw = &gpll0.clkr.hw },1410	{ .hw = &gpll6.clkr.hw },1411	{ .hw = &gpll0_early_div.hw },1412};1413 1414static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {1415	F(80000000, P_GPLL0_DIV2, 5, 0, 0),1416	F(160000000, P_GPLL0, 5, 0, 0),1417	F(270000000, P_GPLL6, 4, 0, 0),1418	{ }1419};1420 1421static struct clk_rcg2 sdcc1_ice_core_clk_src = {1422	.cmd_rcgr = 0x5d000,1423	.hid_width = 5,1424	.freq_tbl = ftbl_sdcc1_ice_core_clk_src,1425	.parent_map = gcc_sdcc1_ice_core_map,1426	.clkr.hw.init = &(struct clk_init_data) {1427		.name = "sdcc1_ice_core_clk_src",1428		.parent_data = gcc_sdcc1_ice_core_data,1429		.num_parents = ARRAY_SIZE(gcc_sdcc1_ice_core_data),1430		.ops = &clk_rcg2_ops,1431	}1432};1433 1434static const struct parent_map gcc_sdcc_apps_map[] = {1435	{ P_XO, 0 },1436	{ P_GPLL0, 1 },1437	{ P_GPLL4, 2 },1438	{ P_GPLL0_DIV2, 4 },1439};1440 1441static const struct clk_parent_data gcc_sdcc_apss_data[] = {1442	{ .fw_name = "xo" },1443	{ .hw = &gpll0.clkr.hw },1444	{ .hw = &gpll4.clkr.hw },1445	{ .hw = &gpll0_early_div.hw },1446};1447 1448static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {1449	F(144000, P_XO, 16, 3, 25),1450	F(400000, P_XO, 12, 1, 4),1451	F(20000000, P_GPLL0_DIV2, 5, 1, 4),1452	F(25000000, P_GPLL0_DIV2, 16, 0, 0),1453	F(50000000, P_GPLL0, 16, 0, 0),1454	F(100000000, P_GPLL0, 8, 0, 0),1455	F(177770000, P_GPLL0, 4.5, 0, 0),1456	F(192000000, P_GPLL4, 6, 0, 0),1457	F(384000000, P_GPLL4, 3, 0, 0),1458	{ }1459};1460 1461static struct clk_rcg2 sdcc1_apps_clk_src = {1462	.cmd_rcgr = 0x42004,1463	.hid_width = 5,1464	.mnd_width = 8,1465	.freq_tbl = ftbl_sdcc1_apps_clk_src,1466	.parent_map = gcc_sdcc_apps_map,1467	.clkr.hw.init = &(struct clk_init_data) {1468		.name = "sdcc1_apps_clk_src",1469		.parent_data = gcc_sdcc_apss_data,1470		.num_parents = ARRAY_SIZE(gcc_sdcc_apss_data),1471		.ops = &clk_rcg2_floor_ops,1472	}1473};1474 1475static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {1476	F(144000, P_XO, 16, 3, 25),1477	F(400000, P_XO, 12, 1, 4),1478	F(20000000, P_GPLL0_DIV2, 5, 1, 4),1479	F(25000000, P_GPLL0_DIV2, 16, 0, 0),1480	F(50000000, P_GPLL0, 16, 0, 0),1481	F(100000000, P_GPLL0, 8, 0, 0),1482	F(177770000, P_GPLL0, 4.5, 0, 0),1483	F(192000000, P_GPLL4, 6, 0, 0),1484	F(200000000, P_GPLL0, 4, 0, 0),1485	{ }1486};1487 1488static struct clk_rcg2 sdcc2_apps_clk_src = {1489	.cmd_rcgr = 0x43004,1490	.hid_width = 5,1491	.mnd_width = 8,1492	.freq_tbl = ftbl_sdcc2_apps_clk_src,1493	.parent_map = gcc_sdcc_apps_map,1494	.clkr.hw.init = &(struct clk_init_data) {1495		.name = "sdcc2_apps_clk_src",1496		.parent_data = gcc_sdcc_apss_data,1497		.num_parents = ARRAY_SIZE(gcc_sdcc_apss_data),1498		.ops = &clk_rcg2_floor_ops,1499	}1500};1501 1502static const struct freq_tbl ftbl_usb30_master_clk_src[] = {1503	F(80000000, P_GPLL0_DIV2, 5, 0, 0),1504	F(100000000, P_GPLL0, 8, 0, 0),1505	F(133330000, P_GPLL0, 6, 0, 0),1506	{ }1507};1508 1509static struct clk_rcg2 usb30_master_clk_src = {1510	.cmd_rcgr = 0x3f00c,1511	.hid_width = 5,1512	.freq_tbl = ftbl_usb30_master_clk_src,1513	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,1514	.clkr.hw.init = &(struct clk_init_data) {1515		.name = "usb30_master_clk_src",1516		.parent_data = gcc_xo_gpll0_gpll0div2_data,1517		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),1518		.ops = &clk_rcg2_ops,1519	}1520};1521 1522static const struct parent_map gcc_usb30_mock_utmi_map[] = {1523	{ P_XO, 0 },1524	{ P_GPLL6, 1 },1525	{ P_GPLL6_DIV2, 2 },1526	{ P_GPLL0, 3 },1527	{ P_GPLL0_DIV2, 4 },1528};1529 1530static const struct clk_parent_data gcc_usb30_mock_utmi_data[] = {1531	{ .fw_name = "xo" },1532	{ .hw = &gpll6.clkr.hw },1533	{ .hw = &gpll6_early_div.hw },1534	{ .hw = &gpll0.clkr.hw },1535	{ .hw = &gpll0_early_div.hw },1536};1537 1538static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {1539	F(19200000, P_XO, 1, 0, 0),1540	F(60000000, P_GPLL6_DIV2, 9, 1, 1),1541	{ }1542};1543 1544static struct clk_rcg2 usb30_mock_utmi_clk_src = {1545	.cmd_rcgr = 0x3f020,1546	.hid_width = 5,1547	.mnd_width = 8,1548	.freq_tbl = ftbl_usb30_mock_utmi_clk_src,1549	.parent_map = gcc_usb30_mock_utmi_map,1550	.clkr.hw.init = &(struct clk_init_data) {1551		.name = "usb30_mock_utmi_clk_src",1552		.parent_data = gcc_usb30_mock_utmi_data,1553		.num_parents = ARRAY_SIZE(gcc_usb30_mock_utmi_data),1554		.ops = &clk_rcg2_ops,1555	}1556};1557 1558static const struct parent_map gcc_usb3_aux_map[] = {1559	{ P_XO, 0 },1560	{ P_SLEEP_CLK, 6 },1561};1562 1563static const struct clk_parent_data gcc_usb3_aux_data[] = {1564	{ .fw_name = "xo" },1565	{ .fw_name = "sleep", .name = "sleep" },1566};1567 1568static const struct freq_tbl ftbl_usb3_aux_clk_src[] = {1569	F(19200000, P_XO, 1, 0, 0),1570	{ }1571};1572 1573static struct clk_rcg2 usb3_aux_clk_src = {1574	.cmd_rcgr = 0x3f05c,1575	.hid_width = 5,1576	.mnd_width = 8,1577	.freq_tbl = ftbl_usb3_aux_clk_src,1578	.parent_map = gcc_usb3_aux_map,1579	.clkr.hw.init = &(struct clk_init_data) {1580		.name = "usb3_aux_clk_src",1581		.parent_data = gcc_usb3_aux_data,1582		.num_parents = ARRAY_SIZE(gcc_usb3_aux_data),1583		.ops = &clk_rcg2_ops,1584	}1585};1586 1587static const struct parent_map gcc_vcodec0_map[] = {1588	{ P_XO, 0 },1589	{ P_GPLL0, 1 },1590	{ P_GPLL6, 2 },1591	{ P_GPLL2, 3 },1592	{ P_GPLL0_DIV2, 4 },1593};1594 1595static const struct clk_parent_data gcc_vcodec0_data[] = {1596	{ .fw_name = "xo" },1597	{ .hw = &gpll0.clkr.hw },1598	{ .hw = &gpll6.clkr.hw },1599	{ .hw = &gpll2.clkr.hw },1600	{ .hw = &gpll0_early_div.hw },1601};1602 1603static const struct freq_tbl ftbl_vcodec0_clk_src[] = {1604	F(114290000, P_GPLL0_DIV2, 3.5, 0, 0),1605	F(228570000, P_GPLL0, 3.5, 0, 0),1606	F(310000000, P_GPLL2, 3, 0, 0),1607	F(360000000, P_GPLL6, 3, 0, 0),1608	F(400000000, P_GPLL0, 2, 0, 0),1609	F(465000000, P_GPLL2, 2, 0, 0),1610	F(540000000, P_GPLL6, 2, 0, 0),1611	{ }1612};1613 1614static struct clk_rcg2 vcodec0_clk_src = {1615	.cmd_rcgr = 0x4c000,1616	.hid_width = 5,1617	.freq_tbl = ftbl_vcodec0_clk_src,1618	.parent_map = gcc_vcodec0_map,1619	.clkr.hw.init = &(struct clk_init_data) {1620		.name = "vcodec0_clk_src",1621		.parent_data = gcc_vcodec0_data,1622		.num_parents = ARRAY_SIZE(gcc_vcodec0_data),1623		.ops = &clk_rcg2_ops,1624	}1625};1626 1627static const struct parent_map gcc_vfe_map[] = {1628	{ P_XO, 0 },1629	{ P_GPLL0, 1 },1630	{ P_GPLL6, 2 },1631	{ P_GPLL4, 3 },1632	{ P_GPLL2, 4 },1633	{ P_GPLL0_DIV2, 5 },1634};1635 1636static const struct clk_parent_data gcc_vfe_data[] = {1637	{ .fw_name = "xo" },1638	{ .hw = &gpll0.clkr.hw },1639	{ .hw = &gpll6.clkr.hw },1640	{ .hw = &gpll4.clkr.hw },1641	{ .hw = &gpll2.clkr.hw },1642	{ .hw = &gpll0_early_div.hw },1643};1644 1645static const struct freq_tbl ftbl_vfe_clk_src[] = {1646	F(50000000, P_GPLL0_DIV2, 8, 0, 0),1647	F(100000000, P_GPLL0_DIV2, 4, 0, 0),1648	F(133330000, P_GPLL0, 6, 0, 0),1649	F(160000000, P_GPLL0, 5, 0, 0),1650	F(200000000, P_GPLL0, 4, 0, 0),1651	F(266670000, P_GPLL0, 3, 0, 0),1652	F(310000000, P_GPLL2, 3, 0, 0),1653	F(400000000, P_GPLL0, 2, 0, 0),1654	F(465000000, P_GPLL2, 2, 0, 0),1655	{ }1656};1657 1658static struct clk_rcg2 vfe0_clk_src = {1659	.cmd_rcgr = 0x58000,1660	.hid_width = 5,1661	.freq_tbl = ftbl_vfe_clk_src,1662	.parent_map = gcc_vfe_map,1663	.clkr.hw.init = &(struct clk_init_data) {1664		.name = "vfe0_clk_src",1665		.parent_data = gcc_vfe_data,1666		.num_parents = ARRAY_SIZE(gcc_vfe_data),1667		.ops = &clk_rcg2_ops,1668	}1669};1670 1671static struct clk_rcg2 vfe1_clk_src = {1672	.cmd_rcgr = 0x58054,1673	.hid_width = 5,1674	.freq_tbl = ftbl_vfe_clk_src,1675	.parent_map = gcc_vfe_map,1676	.clkr.hw.init = &(struct clk_init_data) {1677		.name = "vfe1_clk_src",1678		.parent_data = gcc_vfe_data,1679		.num_parents = ARRAY_SIZE(gcc_vfe_data),1680		.ops = &clk_rcg2_ops,1681	}1682};1683 1684static const struct parent_map gcc_vsync_map[] = {1685	{ P_XO, 0 },1686	{ P_GPLL0, 2 },1687};1688 1689static const struct freq_tbl ftbl_vsync_clk_src[] = {1690	F(19200000, P_XO, 1, 0, 0),1691	{ }1692};1693 1694static struct clk_rcg2 vsync_clk_src = {1695	.cmd_rcgr = 0x4d02c,1696	.hid_width = 5,1697	.freq_tbl = ftbl_vsync_clk_src,1698	.parent_map = gcc_vsync_map,1699	.clkr.hw.init = &(struct clk_init_data) {1700		.name = "vsync_clk_src",1701		.parent_data = gcc_esc_vsync_data,1702		.num_parents = ARRAY_SIZE(gcc_esc_vsync_data),1703		.ops = &clk_rcg2_ops,1704	}1705};1706 1707static struct clk_branch gcc_apc0_droop_detector_gpll0_clk = {1708	.halt_reg = 0x78004,1709	.halt_check = BRANCH_HALT,1710	.clkr = {1711		.enable_reg = 0x78004,1712		.enable_mask = BIT(0),1713		.hw.init = &(struct clk_init_data) {1714			.name = "gcc_apc0_droop_detector_gpll0_clk",1715			.parent_hws = (const struct clk_hw*[]){1716				&apc0_droop_detector_clk_src.clkr.hw,1717			},1718			.num_parents = 1,1719			.ops = &clk_branch2_ops,1720			.flags = CLK_SET_RATE_PARENT,1721		}1722	}1723};1724 1725static struct clk_branch gcc_apc1_droop_detector_gpll0_clk = {1726	.halt_reg = 0x79004,1727	.halt_check = BRANCH_HALT,1728	.clkr = {1729		.enable_reg = 0x79004,1730		.enable_mask = BIT(0),1731		.hw.init = &(struct clk_init_data) {1732			.name = "gcc_apc1_droop_detector_gpll0_clk",1733			.parent_hws = (const struct clk_hw*[]){1734				&apc1_droop_detector_clk_src.clkr.hw,1735			},1736			.num_parents = 1,1737			.ops = &clk_branch2_ops,1738			.flags = CLK_SET_RATE_PARENT,1739		}1740	}1741};1742 1743static struct clk_branch gcc_apss_ahb_clk = {1744	.halt_reg = 0x4601c,1745	.halt_check = BRANCH_HALT_VOTED,1746	.clkr = {1747		.enable_reg = 0x45004,1748		.enable_mask = BIT(14),1749		.hw.init = &(struct clk_init_data) {1750			.name = "gcc_apss_ahb_clk",1751			.parent_hws = (const struct clk_hw*[]){1752				&apss_ahb_clk_src.clkr.hw,1753			},1754			.num_parents = 1,1755			.ops = &clk_branch2_ops,1756			.flags = CLK_SET_RATE_PARENT,1757		}1758	}1759};1760 1761static struct clk_branch gcc_apss_axi_clk = {1762	.halt_reg = 0x46020,1763	.halt_check = BRANCH_HALT_VOTED,1764	.clkr = {1765		.enable_reg = 0x45004,1766		.enable_mask = BIT(13),1767		.hw.init = &(struct clk_init_data) {1768			.name = "gcc_apss_axi_clk",1769			.ops = &clk_branch2_ops,1770		}1771	}1772};1773 1774static struct clk_branch gcc_apss_tcu_async_clk = {1775	.halt_reg = 0x12018,1776	.halt_check = BRANCH_HALT_VOTED,1777	.clkr = {1778		.enable_reg = 0x4500c,1779		.enable_mask = BIT(1),1780		.hw.init = &(struct clk_init_data) {1781			.name = "gcc_apss_tcu_async_clk",1782			.ops = &clk_branch2_ops,1783		}1784	}1785};1786 1787static struct clk_branch gcc_bimc_gfx_clk = {1788	.halt_reg = 0x59034,1789	.halt_check = BRANCH_HALT,1790	.clkr = {1791		.enable_reg = 0x59034,1792		.enable_mask = BIT(0),1793		.hw.init = &(struct clk_init_data) {1794			.name = "gcc_bimc_gfx_clk",1795			.ops = &clk_branch2_ops,1796		}1797	}1798};1799 1800static struct clk_branch gcc_bimc_gpu_clk = {1801	.halt_reg = 0x59030,1802	.halt_check = BRANCH_HALT,1803	.clkr = {1804		.enable_reg = 0x59030,1805		.enable_mask = BIT(0),1806		.hw.init = &(struct clk_init_data) {1807			.name = "gcc_bimc_gpu_clk",1808			.ops = &clk_branch2_ops,1809		}1810	}1811};1812 1813static struct clk_branch gcc_blsp1_ahb_clk = {1814	.halt_reg = 0x01008,1815	.halt_check = BRANCH_HALT_VOTED,1816	.clkr = {1817		.enable_reg = 0x45004,1818		.enable_mask = BIT(10),1819		.hw.init = &(struct clk_init_data) {1820			.name = "gcc_blsp1_ahb_clk",1821			.ops = &clk_branch2_ops,1822		}1823	}1824};1825 1826static struct clk_branch gcc_blsp2_ahb_clk = {1827	.halt_reg = 0x0b008,1828	.halt_check = BRANCH_HALT_VOTED,1829	.clkr = {1830		.enable_reg = 0x45004,1831		.enable_mask = BIT(20),1832		.hw.init = &(struct clk_init_data) {1833			.name = "gcc_blsp2_ahb_clk",1834			.ops = &clk_branch2_ops,1835		}1836	}1837};1838 1839static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {1840	.halt_reg = 0x02008,1841	.halt_check = BRANCH_HALT,1842	.clkr = {1843		.enable_reg = 0x02008,1844		.enable_mask = BIT(0),1845		.hw.init = &(struct clk_init_data) {1846			.name = "gcc_blsp1_qup1_i2c_apps_clk",1847			.parent_hws = (const struct clk_hw*[]){1848				&blsp1_qup1_i2c_apps_clk_src.clkr.hw,1849			},1850			.num_parents = 1,1851			.ops = &clk_branch2_ops,1852			.flags = CLK_SET_RATE_PARENT,1853		}1854	}1855};1856 1857static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {1858	.halt_reg = 0x03010,1859	.halt_check = BRANCH_HALT,1860	.clkr = {1861		.enable_reg = 0x03010,1862		.enable_mask = BIT(0),1863		.hw.init = &(struct clk_init_data) {1864			.name = "gcc_blsp1_qup2_i2c_apps_clk",1865			.parent_hws = (const struct clk_hw*[]){1866				&blsp1_qup2_i2c_apps_clk_src.clkr.hw,1867			},1868			.num_parents = 1,1869			.ops = &clk_branch2_ops,1870			.flags = CLK_SET_RATE_PARENT,1871		}1872	}1873};1874 1875static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {1876	.halt_reg = 0x04020,1877	.halt_check = BRANCH_HALT,1878	.clkr = {1879		.enable_reg = 0x04020,1880		.enable_mask = BIT(0),1881		.hw.init = &(struct clk_init_data) {1882			.name = "gcc_blsp1_qup3_i2c_apps_clk",1883			.parent_hws = (const struct clk_hw*[]){1884				&blsp1_qup3_i2c_apps_clk_src.clkr.hw,1885			},1886			.num_parents = 1,1887			.ops = &clk_branch2_ops,1888			.flags = CLK_SET_RATE_PARENT,1889		}1890	}1891};1892 1893static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {1894	.halt_reg = 0x05020,1895	.halt_check = BRANCH_HALT,1896	.clkr = {1897		.enable_reg = 0x05020,1898		.enable_mask = BIT(0),1899		.hw.init = &(struct clk_init_data) {1900			.name = "gcc_blsp1_qup4_i2c_apps_clk",1901			.parent_hws = (const struct clk_hw*[]){1902				&blsp1_qup4_i2c_apps_clk_src.clkr.hw,1903			},1904			.num_parents = 1,1905			.ops = &clk_branch2_ops,1906			.flags = CLK_SET_RATE_PARENT,1907		}1908	}1909};1910 1911static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {1912	.halt_reg = 0x0c008,1913	.halt_check = BRANCH_HALT,1914	.clkr = {1915		.enable_reg = 0x0c008,1916		.enable_mask = BIT(0),1917		.hw.init = &(struct clk_init_data) {1918			.name = "gcc_blsp2_qup1_i2c_apps_clk",1919			.parent_hws = (const struct clk_hw*[]){1920				&blsp2_qup1_i2c_apps_clk_src.clkr.hw,1921			},1922			.num_parents = 1,1923			.ops = &clk_branch2_ops,1924			.flags = CLK_SET_RATE_PARENT,1925		}1926	}1927};1928 1929static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {1930	.halt_reg = 0x0d010,1931	.halt_check = BRANCH_HALT,1932	.clkr = {1933		.enable_reg = 0x0d010,1934		.enable_mask = BIT(0),1935		.hw.init = &(struct clk_init_data) {1936			.name = "gcc_blsp2_qup2_i2c_apps_clk",1937			.parent_hws = (const struct clk_hw*[]){1938				&blsp2_qup2_i2c_apps_clk_src.clkr.hw,1939			},1940			.num_parents = 1,1941			.ops = &clk_branch2_ops,1942			.flags = CLK_SET_RATE_PARENT,1943		}1944	}1945};1946 1947static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {1948	.halt_reg = 0x0f020,1949	.halt_check = BRANCH_HALT,1950	.clkr = {1951		.enable_reg = 0x0f020,1952		.enable_mask = BIT(0),1953		.hw.init = &(struct clk_init_data) {1954			.name = "gcc_blsp2_qup3_i2c_apps_clk",1955			.parent_hws = (const struct clk_hw*[]){1956				&blsp2_qup3_i2c_apps_clk_src.clkr.hw,1957			},1958			.num_parents = 1,1959			.ops = &clk_branch2_ops,1960			.flags = CLK_SET_RATE_PARENT,1961		}1962	}1963};1964 1965static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {1966	.halt_reg = 0x18020,1967	.halt_check = BRANCH_HALT,1968	.clkr = {1969		.enable_reg = 0x18020,1970		.enable_mask = BIT(0),1971		.hw.init = &(struct clk_init_data) {1972			.name = "gcc_blsp2_qup4_i2c_apps_clk",1973			.parent_hws = (const struct clk_hw*[]){1974				&blsp2_qup4_i2c_apps_clk_src.clkr.hw,1975			},1976			.num_parents = 1,1977			.ops = &clk_branch2_ops,1978			.flags = CLK_SET_RATE_PARENT,1979		}1980	}1981};1982 1983static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {1984	.halt_reg = 0x02004,1985	.halt_check = BRANCH_HALT,1986	.clkr = {1987		.enable_reg = 0x02004,1988		.enable_mask = BIT(0),1989		.hw.init = &(struct clk_init_data) {1990			.name = "gcc_blsp1_qup1_spi_apps_clk",1991			.parent_hws = (const struct clk_hw*[]){1992				&blsp1_qup1_spi_apps_clk_src.clkr.hw,1993			},1994			.num_parents = 1,1995			.ops = &clk_branch2_ops,1996			.flags = CLK_SET_RATE_PARENT,1997		}1998	}1999};2000 2001static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {2002	.halt_reg = 0x0300c,2003	.halt_check = BRANCH_HALT,2004	.clkr = {2005		.enable_reg = 0x0300c,2006		.enable_mask = BIT(0),2007		.hw.init = &(struct clk_init_data) {2008			.name = "gcc_blsp1_qup2_spi_apps_clk",2009			.parent_hws = (const struct clk_hw*[]){2010				&blsp1_qup2_spi_apps_clk_src.clkr.hw,2011			},2012			.num_parents = 1,2013			.ops = &clk_branch2_ops,2014			.flags = CLK_SET_RATE_PARENT,2015		}2016	}2017};2018 2019static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {2020	.halt_reg = 0x0401c,2021	.halt_check = BRANCH_HALT,2022	.clkr = {2023		.enable_reg = 0x0401c,2024		.enable_mask = BIT(0),2025		.hw.init = &(struct clk_init_data) {2026			.name = "gcc_blsp1_qup3_spi_apps_clk",2027			.parent_hws = (const struct clk_hw*[]){2028				&blsp1_qup3_spi_apps_clk_src.clkr.hw,2029			},2030			.num_parents = 1,2031			.ops = &clk_branch2_ops,2032			.flags = CLK_SET_RATE_PARENT,2033		}2034	}2035};2036 2037static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {2038	.halt_reg = 0x0501c,2039	.halt_check = BRANCH_HALT,2040	.clkr = {2041		.enable_reg = 0x0501c,2042		.enable_mask = BIT(0),2043		.hw.init = &(struct clk_init_data) {2044			.name = "gcc_blsp1_qup4_spi_apps_clk",2045			.parent_hws = (const struct clk_hw*[]){2046				&blsp1_qup4_spi_apps_clk_src.clkr.hw,2047			},2048			.num_parents = 1,2049			.ops = &clk_branch2_ops,2050			.flags = CLK_SET_RATE_PARENT,2051		}2052	}2053};2054 2055static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {2056	.halt_reg = 0x0c004,2057	.halt_check = BRANCH_HALT,2058	.clkr = {2059		.enable_reg = 0x0c004,2060		.enable_mask = BIT(0),2061		.hw.init = &(struct clk_init_data) {2062			.name = "gcc_blsp2_qup1_spi_apps_clk",2063			.parent_hws = (const struct clk_hw*[]){2064				&blsp2_qup1_spi_apps_clk_src.clkr.hw,2065			},2066			.num_parents = 1,2067			.ops = &clk_branch2_ops,2068			.flags = CLK_SET_RATE_PARENT,2069		}2070	}2071};2072 2073static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {2074	.halt_reg = 0x0d00c,2075	.halt_check = BRANCH_HALT,2076	.clkr = {2077		.enable_reg = 0x0d00c,2078		.enable_mask = BIT(0),2079		.hw.init = &(struct clk_init_data) {2080			.name = "gcc_blsp2_qup2_spi_apps_clk",2081			.parent_hws = (const struct clk_hw*[]){2082				&blsp2_qup2_spi_apps_clk_src.clkr.hw,2083			},2084			.num_parents = 1,2085			.ops = &clk_branch2_ops,2086			.flags = CLK_SET_RATE_PARENT,2087		}2088	}2089};2090 2091static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {2092	.halt_reg = 0x0f01c,2093	.halt_check = BRANCH_HALT,2094	.clkr = {2095		.enable_reg = 0x0f01c,2096		.enable_mask = BIT(0),2097		.hw.init = &(struct clk_init_data) {2098			.name = "gcc_blsp2_qup3_spi_apps_clk",2099			.parent_hws = (const struct clk_hw*[]){2100				&blsp2_qup3_spi_apps_clk_src.clkr.hw,2101			},2102			.num_parents = 1,2103			.ops = &clk_branch2_ops,2104			.flags = CLK_SET_RATE_PARENT,2105		}2106	}2107};2108 2109static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {2110	.halt_reg = 0x1801c,2111	.halt_check = BRANCH_HALT,2112	.clkr = {2113		.enable_reg = 0x1801c,2114		.enable_mask = BIT(0),2115		.hw.init = &(struct clk_init_data) {2116			.name = "gcc_blsp2_qup4_spi_apps_clk",2117			.parent_hws = (const struct clk_hw*[]){2118				&blsp2_qup4_spi_apps_clk_src.clkr.hw,2119			},2120			.num_parents = 1,2121			.ops = &clk_branch2_ops,2122			.flags = CLK_SET_RATE_PARENT,2123		}2124	}2125};2126 2127static struct clk_branch gcc_blsp1_uart1_apps_clk = {2128	.halt_reg = 0x0203c,2129	.halt_check = BRANCH_HALT,2130	.clkr = {2131		.enable_reg = 0x0203c,2132		.enable_mask = BIT(0),2133		.hw.init = &(struct clk_init_data) {2134			.name = "gcc_blsp1_uart1_apps_clk",2135			.parent_hws = (const struct clk_hw*[]){2136				&blsp1_uart1_apps_clk_src.clkr.hw,2137			},2138			.num_parents = 1,2139			.ops = &clk_branch2_ops,2140			.flags = CLK_SET_RATE_PARENT,2141		}2142	}2143};2144 2145static struct clk_branch gcc_blsp1_uart2_apps_clk = {2146	.halt_reg = 0x0302c,2147	.halt_check = BRANCH_HALT,2148	.clkr = {2149		.enable_reg = 0x0302c,2150		.enable_mask = BIT(0),2151		.hw.init = &(struct clk_init_data) {2152			.name = "gcc_blsp1_uart2_apps_clk",2153			.parent_hws = (const struct clk_hw*[]){2154				&blsp1_uart2_apps_clk_src.clkr.hw,2155			},2156			.num_parents = 1,2157			.ops = &clk_branch2_ops,2158			.flags = CLK_SET_RATE_PARENT,2159		}2160	}2161};2162 2163static struct clk_branch gcc_blsp2_uart1_apps_clk = {2164	.halt_reg = 0x0c03c,2165	.halt_check = BRANCH_HALT,2166	.clkr = {2167		.enable_reg = 0x0c03c,2168		.enable_mask = BIT(0),2169		.hw.init = &(struct clk_init_data) {2170			.name = "gcc_blsp2_uart1_apps_clk",2171			.parent_hws = (const struct clk_hw*[]){2172				&blsp2_uart1_apps_clk_src.clkr.hw,2173			},2174			.num_parents = 1,2175			.ops = &clk_branch2_ops,2176			.flags = CLK_SET_RATE_PARENT,2177		}2178	}2179};2180 2181static struct clk_branch gcc_blsp2_uart2_apps_clk = {2182	.halt_reg = 0x0d02c,2183	.halt_check = BRANCH_HALT,2184	.clkr = {2185		.enable_reg = 0x0d02c,2186		.enable_mask = BIT(0),2187		.hw.init = &(struct clk_init_data) {2188			.name = "gcc_blsp2_uart2_apps_clk",2189			.parent_hws = (const struct clk_hw*[]){2190				&blsp2_uart2_apps_clk_src.clkr.hw,2191			},2192			.num_parents = 1,2193			.ops = &clk_branch2_ops,2194			.flags = CLK_SET_RATE_PARENT,2195		}2196	}2197};2198 2199static struct clk_branch gcc_boot_rom_ahb_clk = {2200	.halt_reg = 0x1300c,2201	.halt_check = BRANCH_HALT_VOTED,2202	.clkr = {2203		.enable_reg = 0x45004,2204		.enable_mask = BIT(7),2205		.hw.init = &(struct clk_init_data) {2206			.name = "gcc_boot_rom_ahb_clk",2207			.ops = &clk_branch2_ops,2208		}2209	}2210};2211 2212static struct clk_branch gcc_camss_ahb_clk = {2213	.halt_reg = 0x56004,2214	.halt_check = BRANCH_HALT,2215	.clkr = {2216		.enable_reg = 0x56004,2217		.enable_mask = BIT(0),2218		.hw.init = &(struct clk_init_data) {2219			.name = "gcc_camss_ahb_clk",2220			.ops = &clk_branch2_ops,2221		}2222	}2223};2224 2225static struct clk_branch gcc_camss_cci_ahb_clk = {2226	.halt_reg = 0x5101c,2227	.halt_check = BRANCH_HALT,2228	.clkr = {2229		.enable_reg = 0x5101c,2230		.enable_mask = BIT(0),2231		.hw.init = &(struct clk_init_data) {2232			.name = "gcc_camss_cci_ahb_clk",2233			.parent_hws = (const struct clk_hw*[]){2234				&camss_top_ahb_clk_src.clkr.hw,2235			},2236			.num_parents = 1,2237			.ops = &clk_branch2_ops,2238			.flags = CLK_SET_RATE_PARENT,2239		}2240	}2241};2242 2243static struct clk_branch gcc_camss_cci_clk = {2244	.halt_reg = 0x51018,2245	.halt_check = BRANCH_HALT,2246	.clkr = {2247		.enable_reg = 0x51018,2248		.enable_mask = BIT(0),2249		.hw.init = &(struct clk_init_data) {2250			.name = "gcc_camss_cci_clk",2251			.parent_hws = (const struct clk_hw*[]){2252				&cci_clk_src.clkr.hw,2253			},2254			.num_parents = 1,2255			.ops = &clk_branch2_ops,2256			.flags = CLK_SET_RATE_PARENT,2257		}2258	}2259};2260 2261static struct clk_branch gcc_camss_cpp_ahb_clk = {2262	.halt_reg = 0x58040,2263	.halt_check = BRANCH_HALT,2264	.clkr = {2265		.enable_reg = 0x58040,2266		.enable_mask = BIT(0),2267		.hw.init = &(struct clk_init_data) {2268			.name = "gcc_camss_cpp_ahb_clk",2269			.parent_hws = (const struct clk_hw*[]){2270				&camss_top_ahb_clk_src.clkr.hw,2271			},2272			.num_parents = 1,2273			.ops = &clk_branch2_ops,2274			.flags = CLK_SET_RATE_PARENT,2275		}2276	}2277};2278 2279static struct clk_branch gcc_camss_cpp_axi_clk = {2280	.halt_reg = 0x58064,2281	.halt_check = BRANCH_HALT,2282	.clkr = {2283		.enable_reg = 0x58064,2284		.enable_mask = BIT(0),2285		.hw.init = &(struct clk_init_data) {2286			.name = "gcc_camss_cpp_axi_clk",2287			.ops = &clk_branch2_ops,2288		}2289	}2290};2291 2292static struct clk_branch gcc_camss_cpp_clk = {2293	.halt_reg = 0x5803c,2294	.halt_check = BRANCH_HALT,2295	.clkr = {2296		.enable_reg = 0x5803c,2297		.enable_mask = BIT(0),2298		.hw.init = &(struct clk_init_data) {2299			.name = "gcc_camss_cpp_clk",2300			.parent_hws = (const struct clk_hw*[]){2301				&cpp_clk_src.clkr.hw,2302			},2303			.num_parents = 1,2304			.ops = &clk_branch2_ops,2305			.flags = CLK_SET_RATE_PARENT,2306		}2307	}2308};2309 2310static struct clk_branch gcc_camss_csi0_ahb_clk = {2311	.halt_reg = 0x4e040,2312	.halt_check = BRANCH_HALT,2313	.clkr = {2314		.enable_reg = 0x4e040,2315		.enable_mask = BIT(0),2316		.hw.init = &(struct clk_init_data) {2317			.name = "gcc_camss_csi0_ahb_clk",2318			.parent_hws = (const struct clk_hw*[]){2319				&camss_top_ahb_clk_src.clkr.hw,2320			},2321			.num_parents = 1,2322			.ops = &clk_branch2_ops,2323			.flags = CLK_SET_RATE_PARENT,2324		}2325	}2326};2327 2328static struct clk_branch gcc_camss_csi1_ahb_clk = {2329	.halt_reg = 0x4f040,2330	.halt_check = BRANCH_HALT,2331	.clkr = {2332		.enable_reg = 0x4f040,2333		.enable_mask = BIT(0),2334		.hw.init = &(struct clk_init_data) {2335			.name = "gcc_camss_csi1_ahb_clk",2336			.parent_hws = (const struct clk_hw*[]){2337				&camss_top_ahb_clk_src.clkr.hw,2338			},2339			.num_parents = 1,2340			.ops = &clk_branch2_ops,2341			.flags = CLK_SET_RATE_PARENT,2342		}2343	}2344};2345 2346static struct clk_branch gcc_camss_csi2_ahb_clk = {2347	.halt_reg = 0x3c040,2348	.halt_check = BRANCH_HALT,2349	.clkr = {2350		.enable_reg = 0x3c040,2351		.enable_mask = BIT(0),2352		.hw.init = &(struct clk_init_data) {2353			.name = "gcc_camss_csi2_ahb_clk",2354			.parent_hws = (const struct clk_hw*[]){2355				&camss_top_ahb_clk_src.clkr.hw,2356			},2357			.num_parents = 1,2358			.ops = &clk_branch2_ops,2359			.flags = CLK_SET_RATE_PARENT,2360		}2361	}2362};2363 2364static struct clk_branch gcc_camss_csi0_clk = {2365	.halt_reg = 0x4e03c,2366	.halt_check = BRANCH_HALT,2367	.clkr = {2368		.enable_reg = 0x4e03c,2369		.enable_mask = BIT(0),2370		.hw.init = &(struct clk_init_data) {2371			.name = "gcc_camss_csi0_clk",2372			.parent_hws = (const struct clk_hw*[]){2373				&csi0_clk_src.clkr.hw,2374			},2375			.num_parents = 1,2376			.ops = &clk_branch2_ops,2377			.flags = CLK_SET_RATE_PARENT,2378		}2379	}2380};2381 2382static struct clk_branch gcc_camss_csi1_clk = {2383	.halt_reg = 0x4f03c,2384	.halt_check = BRANCH_HALT,2385	.clkr = {2386		.enable_reg = 0x4f03c,2387		.enable_mask = BIT(0),2388		.hw.init = &(struct clk_init_data) {2389			.name = "gcc_camss_csi1_clk",2390			.parent_hws = (const struct clk_hw*[]){2391				&csi1_clk_src.clkr.hw,2392			},2393			.num_parents = 1,2394			.ops = &clk_branch2_ops,2395			.flags = CLK_SET_RATE_PARENT,2396		}2397	}2398};2399 2400static struct clk_branch gcc_camss_csi2_clk = {2401	.halt_reg = 0x3c03c,2402	.halt_check = BRANCH_HALT,2403	.clkr = {2404		.enable_reg = 0x3c03c,2405		.enable_mask = BIT(0),2406		.hw.init = &(struct clk_init_data) {2407			.name = "gcc_camss_csi2_clk",2408			.parent_hws = (const struct clk_hw*[]){2409				&csi2_clk_src.clkr.hw,2410			},2411			.num_parents = 1,2412			.ops = &clk_branch2_ops,2413			.flags = CLK_SET_RATE_PARENT,2414		}2415	}2416};2417 2418static struct clk_branch gcc_camss_csi0_csiphy_3p_clk = {2419	.halt_reg = 0x58090,2420	.halt_check = BRANCH_HALT,2421	.clkr = {2422		.enable_reg = 0x58090,2423		.enable_mask = BIT(0),2424		.hw.init = &(struct clk_init_data) {2425			.name = "gcc_camss_csi0_csiphy_3p_clk",2426			.parent_hws = (const struct clk_hw*[]){2427				&csi0p_clk_src.clkr.hw,2428			},2429			.num_parents = 1,2430			.ops = &clk_branch2_ops,2431			.flags = CLK_SET_RATE_PARENT,2432		}2433	}2434};2435 2436static struct clk_branch gcc_camss_csi1_csiphy_3p_clk = {2437	.halt_reg = 0x580a0,2438	.halt_check = BRANCH_HALT,2439	.clkr = {2440		.enable_reg = 0x580a0,2441		.enable_mask = BIT(0),2442		.hw.init = &(struct clk_init_data) {2443			.name = "gcc_camss_csi1_csiphy_3p_clk",2444			.parent_hws = (const struct clk_hw*[]){2445				&csi1p_clk_src.clkr.hw,2446			},2447			.num_parents = 1,2448			.ops = &clk_branch2_ops,2449			.flags = CLK_SET_RATE_PARENT,2450		}2451	}2452};2453 2454static struct clk_branch gcc_camss_csi2_csiphy_3p_clk = {2455	.halt_reg = 0x580b0,2456	.halt_check = BRANCH_HALT,2457	.clkr = {2458		.enable_reg = 0x580b0,2459		.enable_mask = BIT(0),2460		.hw.init = &(struct clk_init_data) {2461			.name = "gcc_camss_csi2_csiphy_3p_clk",2462			.parent_hws = (const struct clk_hw*[]){2463				&csi2p_clk_src.clkr.hw,2464			},2465			.num_parents = 1,2466			.ops = &clk_branch2_ops,2467			.flags = CLK_SET_RATE_PARENT,2468		}2469	}2470};2471 2472static struct clk_branch gcc_camss_csi0phy_clk = {2473	.halt_reg = 0x4e048,2474	.halt_check = BRANCH_HALT,2475	.clkr = {2476		.enable_reg = 0x4e048,2477		.enable_mask = BIT(0),2478		.hw.init = &(struct clk_init_data) {2479			.name = "gcc_camss_csi0phy_clk",2480			.parent_hws = (const struct clk_hw*[]){2481				&csi0_clk_src.clkr.hw,2482			},2483			.num_parents = 1,2484			.ops = &clk_branch2_ops,2485			.flags = CLK_SET_RATE_PARENT,2486		}2487	}2488};2489 2490static struct clk_branch gcc_camss_csi1phy_clk = {2491	.halt_reg = 0x4f048,2492	.halt_check = BRANCH_HALT,2493	.clkr = {2494		.enable_reg = 0x4f048,2495		.enable_mask = BIT(0),2496		.hw.init = &(struct clk_init_data) {2497			.name = "gcc_camss_csi1phy_clk",2498			.parent_hws = (const struct clk_hw*[]){2499				&csi1_clk_src.clkr.hw,2500			},2501			.num_parents = 1,2502			.ops = &clk_branch2_ops,2503			.flags = CLK_SET_RATE_PARENT,2504		}2505	}2506};2507 2508static struct clk_branch gcc_camss_csi2phy_clk = {2509	.halt_reg = 0x3c048,2510	.halt_check = BRANCH_HALT,2511	.clkr = {2512		.enable_reg = 0x3c048,2513		.enable_mask = BIT(0),2514		.hw.init = &(struct clk_init_data) {2515			.name = "gcc_camss_csi2phy_clk",2516			.parent_hws = (const struct clk_hw*[]){2517				&csi2_clk_src.clkr.hw,2518			},2519			.num_parents = 1,2520			.ops = &clk_branch2_ops,2521			.flags = CLK_SET_RATE_PARENT,2522		}2523	}2524};2525 2526static struct clk_branch gcc_camss_csi0phytimer_clk = {2527	.halt_reg = 0x4e01c,2528	.halt_check = BRANCH_HALT,2529	.clkr = {2530		.enable_reg = 0x4e01c,2531		.enable_mask = BIT(0),2532		.hw.init = &(struct clk_init_data) {2533			.name = "gcc_camss_csi0phytimer_clk",2534			.parent_hws = (const struct clk_hw*[]){2535				&csi0phytimer_clk_src.clkr.hw,2536			},2537			.num_parents = 1,2538			.ops = &clk_branch2_ops,2539			.flags = CLK_SET_RATE_PARENT,2540		}2541	}2542};2543 2544static struct clk_branch gcc_camss_csi1phytimer_clk = {2545	.halt_reg = 0x4f01c,2546	.halt_check = BRANCH_HALT,2547	.clkr = {2548		.enable_reg = 0x4f01c,2549		.enable_mask = BIT(0),2550		.hw.init = &(struct clk_init_data) {2551			.name = "gcc_camss_csi1phytimer_clk",2552			.parent_hws = (const struct clk_hw*[]){2553				&csi1phytimer_clk_src.clkr.hw,2554			},2555			.num_parents = 1,2556			.ops = &clk_branch2_ops,2557			.flags = CLK_SET_RATE_PARENT,2558		}2559	}2560};2561 2562static struct clk_branch gcc_camss_csi2phytimer_clk = {2563	.halt_reg = 0x4f068,2564	.halt_check = BRANCH_HALT,2565	.clkr = {2566		.enable_reg = 0x4f068,2567		.enable_mask = BIT(0),2568		.hw.init = &(struct clk_init_data) {2569			.name = "gcc_camss_csi2phytimer_clk",2570			.parent_hws = (const struct clk_hw*[]){2571				&csi2phytimer_clk_src.clkr.hw,2572			},2573			.num_parents = 1,2574			.ops = &clk_branch2_ops,2575			.flags = CLK_SET_RATE_PARENT,2576		}2577	}2578};2579 2580static struct clk_branch gcc_camss_csi0pix_clk = {2581	.halt_reg = 0x4e058,2582	.halt_check = BRANCH_HALT,2583	.clkr = {2584		.enable_reg = 0x4e058,2585		.enable_mask = BIT(0),2586		.hw.init = &(struct clk_init_data) {2587			.name = "gcc_camss_csi0pix_clk",2588			.parent_hws = (const struct clk_hw*[]){2589				&csi0_clk_src.clkr.hw,2590			},2591			.num_parents = 1,2592			.ops = &clk_branch2_ops,2593			.flags = CLK_SET_RATE_PARENT,2594		}2595	}2596};2597 2598static struct clk_branch gcc_camss_csi1pix_clk = {2599	.halt_reg = 0x4f058,2600	.halt_check = BRANCH_HALT,2601	.clkr = {2602		.enable_reg = 0x4f058,2603		.enable_mask = BIT(0),2604		.hw.init = &(struct clk_init_data) {2605			.name = "gcc_camss_csi1pix_clk",2606			.parent_hws = (const struct clk_hw*[]){2607				&csi1_clk_src.clkr.hw,2608			},2609			.num_parents = 1,2610			.ops = &clk_branch2_ops,2611			.flags = CLK_SET_RATE_PARENT,2612		}2613	}2614};2615 2616static struct clk_branch gcc_camss_csi2pix_clk = {2617	.halt_reg = 0x3c058,2618	.halt_check = BRANCH_HALT,2619	.clkr = {2620		.enable_reg = 0x3c058,2621		.enable_mask = BIT(0),2622		.hw.init = &(struct clk_init_data) {2623			.name = "gcc_camss_csi2pix_clk",2624			.parent_hws = (const struct clk_hw*[]){2625				&csi2_clk_src.clkr.hw,2626			},2627			.num_parents = 1,2628			.ops = &clk_branch2_ops,2629			.flags = CLK_SET_RATE_PARENT,2630		}2631	}2632};2633 2634static struct clk_branch gcc_camss_csi0rdi_clk = {2635	.halt_reg = 0x4e050,2636	.halt_check = BRANCH_HALT,2637	.clkr = {2638		.enable_reg = 0x4e050,2639		.enable_mask = BIT(0),2640		.hw.init = &(struct clk_init_data) {2641			.name = "gcc_camss_csi0rdi_clk",2642			.parent_hws = (const struct clk_hw*[]){2643				&csi0_clk_src.clkr.hw,2644			},2645			.num_parents = 1,2646			.ops = &clk_branch2_ops,2647			.flags = CLK_SET_RATE_PARENT,2648		}2649	}2650};2651 2652static struct clk_branch gcc_camss_csi1rdi_clk = {2653	.halt_reg = 0x4f050,2654	.halt_check = BRANCH_HALT,2655	.clkr = {2656		.enable_reg = 0x4f050,2657		.enable_mask = BIT(0),2658		.hw.init = &(struct clk_init_data) {2659			.name = "gcc_camss_csi1rdi_clk",2660			.parent_hws = (const struct clk_hw*[]){2661				&csi1_clk_src.clkr.hw,2662			},2663			.num_parents = 1,2664			.ops = &clk_branch2_ops,2665			.flags = CLK_SET_RATE_PARENT,2666		}2667	}2668};2669 2670static struct clk_branch gcc_camss_csi2rdi_clk = {2671	.halt_reg = 0x3c050,2672	.halt_check = BRANCH_HALT,2673	.clkr = {2674		.enable_reg = 0x3c050,2675		.enable_mask = BIT(0),2676		.hw.init = &(struct clk_init_data) {2677			.name = "gcc_camss_csi2rdi_clk",2678			.parent_hws = (const struct clk_hw*[]){2679				&csi2_clk_src.clkr.hw,2680			},2681			.num_parents = 1,2682			.ops = &clk_branch2_ops,2683			.flags = CLK_SET_RATE_PARENT,2684		}2685	}2686};2687 2688static struct clk_branch gcc_camss_csi_vfe0_clk = {2689	.halt_reg = 0x58050,2690	.halt_check = BRANCH_HALT,2691	.clkr = {2692		.enable_reg = 0x58050,2693		.enable_mask = BIT(0),2694		.hw.init = &(struct clk_init_data) {2695			.name = "gcc_camss_csi_vfe0_clk",2696			.parent_hws = (const struct clk_hw*[]){2697				&vfe0_clk_src.clkr.hw,2698			},2699			.num_parents = 1,2700			.ops = &clk_branch2_ops,2701			.flags = CLK_SET_RATE_PARENT,2702		}2703	}2704};2705 2706static struct clk_branch gcc_camss_csi_vfe1_clk = {2707	.halt_reg = 0x58074,2708	.halt_check = BRANCH_HALT,2709	.clkr = {2710		.enable_reg = 0x58074,2711		.enable_mask = BIT(0),2712		.hw.init = &(struct clk_init_data) {2713			.name = "gcc_camss_csi_vfe1_clk",2714			.parent_hws = (const struct clk_hw*[]){2715				&vfe1_clk_src.clkr.hw,2716			},2717			.num_parents = 1,2718			.ops = &clk_branch2_ops,2719			.flags = CLK_SET_RATE_PARENT,2720		}2721	}2722};2723 2724static struct clk_branch gcc_camss_gp0_clk = {2725	.halt_reg = 0x54018,2726	.halt_check = BRANCH_HALT,2727	.clkr = {2728		.enable_reg = 0x54018,2729		.enable_mask = BIT(0),2730		.hw.init = &(struct clk_init_data) {2731			.name = "gcc_camss_gp0_clk",2732			.parent_hws = (const struct clk_hw*[]){2733				&camss_gp0_clk_src.clkr.hw,2734			},2735			.num_parents = 1,2736			.ops = &clk_branch2_ops,2737			.flags = CLK_SET_RATE_PARENT,2738		}2739	}2740};2741 2742static struct clk_branch gcc_camss_gp1_clk = {2743	.halt_reg = 0x55018,2744	.halt_check = BRANCH_HALT,2745	.clkr = {2746		.enable_reg = 0x55018,2747		.enable_mask = BIT(0),2748		.hw.init = &(struct clk_init_data) {2749			.name = "gcc_camss_gp1_clk",2750			.parent_hws = (const struct clk_hw*[]){2751				&camss_gp1_clk_src.clkr.hw,2752			},2753			.num_parents = 1,2754			.ops = &clk_branch2_ops,2755			.flags = CLK_SET_RATE_PARENT,2756		}2757	}2758};2759 2760static struct clk_branch gcc_camss_ispif_ahb_clk = {2761	.halt_reg = 0x50004,2762	.halt_check = BRANCH_HALT,2763	.clkr = {2764		.enable_reg = 0x50004,2765		.enable_mask = BIT(0),2766		.hw.init = &(struct clk_init_data) {2767			.name = "gcc_camss_ispif_ahb_clk",2768			.parent_hws = (const struct clk_hw*[]){2769				&camss_top_ahb_clk_src.clkr.hw,2770			},2771			.num_parents = 1,2772			.ops = &clk_branch2_ops,2773			.flags = CLK_SET_RATE_PARENT,2774		}2775	}2776};2777 2778static struct clk_branch gcc_camss_jpeg0_clk = {2779	.halt_reg = 0x57020,2780	.halt_check = BRANCH_HALT,2781	.clkr = {2782		.enable_reg = 0x57020,2783		.enable_mask = BIT(0),2784		.hw.init = &(struct clk_init_data) {2785			.name = "gcc_camss_jpeg0_clk",2786			.parent_hws = (const struct clk_hw*[]){2787				&jpeg0_clk_src.clkr.hw,2788			},2789			.num_parents = 1,2790			.ops = &clk_branch2_ops,2791			.flags = CLK_SET_RATE_PARENT,2792		}2793	}2794};2795 2796static struct clk_branch gcc_camss_jpeg_ahb_clk = {2797	.halt_reg = 0x57024,2798	.halt_check = BRANCH_HALT,2799	.clkr = {2800		.enable_reg = 0x57024,2801		.enable_mask = BIT(0),2802		.hw.init = &(struct clk_init_data) {2803			.name = "gcc_camss_jpeg_ahb_clk",2804			.parent_hws = (const struct clk_hw*[]){2805				&camss_top_ahb_clk_src.clkr.hw,2806			},2807			.num_parents = 1,2808			.ops = &clk_branch2_ops,2809			.flags = CLK_SET_RATE_PARENT,2810		}2811	}2812};2813 2814static struct clk_branch gcc_camss_jpeg_axi_clk = {2815	.halt_reg = 0x57028,2816	.halt_check = BRANCH_HALT,2817	.clkr = {2818		.enable_reg = 0x57028,2819		.enable_mask = BIT(0),2820		.hw.init = &(struct clk_init_data) {2821			.name = "gcc_camss_jpeg_axi_clk",2822			.ops = &clk_branch2_ops,2823		}2824	}2825};2826 2827static struct clk_branch gcc_camss_mclk0_clk = {2828	.halt_reg = 0x52018,2829	.halt_check = BRANCH_HALT,2830	.clkr = {2831		.enable_reg = 0x52018,2832		.enable_mask = BIT(0),2833		.hw.init = &(struct clk_init_data) {2834			.name = "gcc_camss_mclk0_clk",2835			.parent_hws = (const struct clk_hw*[]){2836				&mclk0_clk_src.clkr.hw,2837			},2838			.num_parents = 1,2839			.ops = &clk_branch2_ops,2840			.flags = CLK_SET_RATE_PARENT,2841		}2842	}2843};2844 2845static struct clk_branch gcc_camss_mclk1_clk = {2846	.halt_reg = 0x53018,2847	.halt_check = BRANCH_HALT,2848	.clkr = {2849		.enable_reg = 0x53018,2850		.enable_mask = BIT(0),2851		.hw.init = &(struct clk_init_data) {2852			.name = "gcc_camss_mclk1_clk",2853			.parent_hws = (const struct clk_hw*[]){2854				&mclk1_clk_src.clkr.hw,2855			},2856			.num_parents = 1,2857			.ops = &clk_branch2_ops,2858			.flags = CLK_SET_RATE_PARENT,2859		}2860	}2861};2862 2863static struct clk_branch gcc_camss_mclk2_clk = {2864	.halt_reg = 0x5c018,2865	.halt_check = BRANCH_HALT,2866	.clkr = {2867		.enable_reg = 0x5c018,2868		.enable_mask = BIT(0),2869		.hw.init = &(struct clk_init_data) {2870			.name = "gcc_camss_mclk2_clk",2871			.parent_hws = (const struct clk_hw*[]){2872				&mclk2_clk_src.clkr.hw,2873			},2874			.num_parents = 1,2875			.ops = &clk_branch2_ops,2876			.flags = CLK_SET_RATE_PARENT,2877		}2878	}2879};2880 2881static struct clk_branch gcc_camss_mclk3_clk = {2882	.halt_reg = 0x5e018,2883	.halt_check = BRANCH_HALT,2884	.clkr = {2885		.enable_reg = 0x5e018,2886		.enable_mask = BIT(0),2887		.hw.init = &(struct clk_init_data) {2888			.name = "gcc_camss_mclk3_clk",2889			.parent_hws = (const struct clk_hw*[]){2890				&mclk3_clk_src.clkr.hw,2891			},2892			.num_parents = 1,2893			.ops = &clk_branch2_ops,2894			.flags = CLK_SET_RATE_PARENT,2895		}2896	}2897};2898 2899static struct clk_branch gcc_camss_micro_ahb_clk = {2900	.halt_reg = 0x5600c,2901	.halt_check = BRANCH_HALT,2902	.clkr = {2903		.enable_reg = 0x5600c,2904		.enable_mask = BIT(0),2905		.hw.init = &(struct clk_init_data) {2906			.name = "gcc_camss_micro_ahb_clk",2907			.parent_hws = (const struct clk_hw*[]){2908				&camss_top_ahb_clk_src.clkr.hw,2909			},2910			.num_parents = 1,2911			.ops = &clk_branch2_ops,2912			.flags = CLK_SET_RATE_PARENT,2913		}2914	}2915};2916 2917static struct clk_branch gcc_camss_top_ahb_clk = {2918	.halt_reg = 0x5a014,2919	.halt_check = BRANCH_HALT,2920	.clkr = {2921		.enable_reg = 0x5a014,2922		.enable_mask = BIT(0),2923		.hw.init = &(struct clk_init_data) {2924			.name = "gcc_camss_top_ahb_clk",2925			.parent_hws = (const struct clk_hw*[]){2926				&camss_top_ahb_clk_src.clkr.hw,2927			},2928			.num_parents = 1,2929			.ops = &clk_branch2_ops,2930			.flags = CLK_SET_RATE_PARENT,2931		}2932	}2933};2934 2935static struct clk_branch gcc_camss_vfe0_ahb_clk = {2936	.halt_reg = 0x58044,2937	.halt_check = BRANCH_HALT,2938	.clkr = {2939		.enable_reg = 0x58044,2940		.enable_mask = BIT(0),2941		.hw.init = &(struct clk_init_data) {2942			.name = "gcc_camss_vfe0_ahb_clk",2943			.parent_hws = (const struct clk_hw*[]){2944				&camss_top_ahb_clk_src.clkr.hw,2945			},2946			.num_parents = 1,2947			.ops = &clk_branch2_ops,2948			.flags = CLK_SET_RATE_PARENT,2949		}2950	}2951};2952 2953static struct clk_branch gcc_camss_vfe0_axi_clk = {2954	.halt_reg = 0x58048,2955	.halt_check = BRANCH_HALT,2956	.clkr = {2957		.enable_reg = 0x58048,2958		.enable_mask = BIT(0),2959		.hw.init = &(struct clk_init_data) {2960			.name = "gcc_camss_vfe0_axi_clk",2961			.ops = &clk_branch2_ops,2962		}2963	}2964};2965 2966static struct clk_branch gcc_camss_vfe0_clk = {2967	.halt_reg = 0x58038,2968	.halt_check = BRANCH_HALT,2969	.clkr = {2970		.enable_reg = 0x58038,2971		.enable_mask = BIT(0),2972		.hw.init = &(struct clk_init_data) {2973			.name = "gcc_camss_vfe0_clk",2974			.parent_hws = (const struct clk_hw*[]){2975				&vfe0_clk_src.clkr.hw,2976			},2977			.num_parents = 1,2978			.ops = &clk_branch2_ops,2979			.flags = CLK_SET_RATE_PARENT,2980		}2981	}2982};2983 2984static struct clk_branch gcc_camss_vfe1_ahb_clk = {2985	.halt_reg = 0x58060,2986	.halt_check = BRANCH_HALT,2987	.clkr = {2988		.enable_reg = 0x58060,2989		.enable_mask = BIT(0),2990		.hw.init = &(struct clk_init_data) {2991			.name = "gcc_camss_vfe1_ahb_clk",2992			.parent_hws = (const struct clk_hw*[]){2993				&camss_top_ahb_clk_src.clkr.hw,2994			},2995			.num_parents = 1,2996			.ops = &clk_branch2_ops,2997			.flags = CLK_SET_RATE_PARENT,2998		}2999	}3000};3001 3002static struct clk_branch gcc_camss_vfe1_axi_clk = {3003	.halt_reg = 0x58068,3004	.halt_check = BRANCH_HALT,3005	.clkr = {3006		.enable_reg = 0x58068,3007		.enable_mask = BIT(0),3008		.hw.init = &(struct clk_init_data) {3009			.name = "gcc_camss_vfe1_axi_clk",3010			.ops = &clk_branch2_ops,3011		}3012	}3013};3014 3015static struct clk_branch gcc_camss_vfe1_clk = {3016	.halt_reg = 0x5805c,3017	.halt_check = BRANCH_HALT,3018	.clkr = {3019		.enable_reg = 0x5805c,3020		.enable_mask = BIT(0),3021		.hw.init = &(struct clk_init_data) {3022			.name = "gcc_camss_vfe1_clk",3023			.parent_hws = (const struct clk_hw*[]){3024				&vfe1_clk_src.clkr.hw,3025			},3026			.num_parents = 1,3027			.ops = &clk_branch2_ops,3028			.flags = CLK_SET_RATE_PARENT,3029		}3030	}3031};3032 3033static struct clk_branch gcc_cpp_tbu_clk = {3034	.halt_reg = 0x12040,3035	.halt_check = BRANCH_HALT_VOTED,3036	.clkr = {3037		.enable_reg = 0x4500c,3038		.enable_mask = BIT(14),3039		.hw.init = &(struct clk_init_data) {3040			.name = "gcc_cpp_tbu_clk",3041			.ops = &clk_branch2_ops,3042		}3043	}3044};3045 3046static struct clk_branch gcc_crypto_ahb_clk = {3047	.halt_reg = 0x16024,3048	.halt_check = BRANCH_HALT_VOTED,3049	.clkr = {3050		.enable_reg = 0x45004,3051		.enable_mask = BIT(0),3052		.hw.init = &(struct clk_init_data) {3053			.name = "gcc_crypto_ahb_clk",3054			.ops = &clk_branch2_ops,3055		}3056	}3057};3058 3059static struct clk_branch gcc_crypto_axi_clk = {3060	.halt_reg = 0x16020,3061	.halt_check = BRANCH_HALT_VOTED,3062	.clkr = {3063		.enable_reg = 0x45004,3064		.enable_mask = BIT(1),3065		.hw.init = &(struct clk_init_data) {3066			.name = "gcc_crypto_axi_clk",3067			.ops = &clk_branch2_ops,3068		}3069	}3070};3071 3072static struct clk_branch gcc_crypto_clk = {3073	.halt_reg = 0x1601c,3074	.halt_check = BRANCH_HALT_VOTED,3075	.clkr = {3076		.enable_reg = 0x45004,3077		.enable_mask = BIT(2),3078		.hw.init = &(struct clk_init_data) {3079			.name = "gcc_crypto_clk",3080			.parent_hws = (const struct clk_hw*[]){3081				&crypto_clk_src.clkr.hw,3082			},3083			.num_parents = 1,3084			.ops = &clk_branch2_ops,3085			.flags = CLK_SET_RATE_PARENT,3086		}3087	}3088};3089 3090static struct clk_branch gcc_dcc_clk = {3091	.halt_reg = 0x77004,3092	.halt_check = BRANCH_HALT,3093	.clkr = {3094		.enable_reg = 0x77004,3095		.enable_mask = BIT(0),3096		.hw.init = &(struct clk_init_data) {3097			.name = "gcc_dcc_clk",3098			.ops = &clk_branch2_ops,3099		}3100	}3101};3102 3103static struct clk_branch gcc_gp1_clk = {3104	.halt_reg = 0x08000,3105	.halt_check = BRANCH_HALT,3106	.clkr = {3107		.enable_reg = 0x08000,3108		.enable_mask = BIT(0),3109		.hw.init = &(struct clk_init_data) {3110			.name = "gcc_gp1_clk",3111			.parent_hws = (const struct clk_hw*[]){3112				&gp1_clk_src.clkr.hw,3113			},3114			.num_parents = 1,3115			.ops = &clk_branch2_ops,3116			.flags = CLK_SET_RATE_PARENT,3117		}3118	}3119};3120 3121static struct clk_branch gcc_gp2_clk = {3122	.halt_reg = 0x09000,3123	.halt_check = BRANCH_HALT,3124	.clkr = {3125		.enable_reg = 0x09000,3126		.enable_mask = BIT(0),3127		.hw.init = &(struct clk_init_data) {3128			.name = "gcc_gp2_clk",3129			.parent_hws = (const struct clk_hw*[]){3130				&gp2_clk_src.clkr.hw,3131			},3132			.num_parents = 1,3133			.ops = &clk_branch2_ops,3134			.flags = CLK_SET_RATE_PARENT,3135		}3136	}3137};3138 3139static struct clk_branch gcc_gp3_clk = {3140	.halt_reg = 0x0a000,3141	.halt_check = BRANCH_HALT,3142	.clkr = {3143		.enable_reg = 0x0a000,3144		.enable_mask = BIT(0),3145		.hw.init = &(struct clk_init_data) {3146			.name = "gcc_gp3_clk",3147			.parent_hws = (const struct clk_hw*[]){3148				&gp3_clk_src.clkr.hw,3149			},3150			.num_parents = 1,3151			.ops = &clk_branch2_ops,3152			.flags = CLK_SET_RATE_PARENT,3153		}3154	}3155};3156 3157static struct clk_branch gcc_jpeg_tbu_clk = {3158	.halt_reg = 0x12034,3159	.halt_check = BRANCH_HALT_VOTED,3160	.clkr = {3161		.enable_reg = 0x4500c,3162		.enable_mask = BIT(10),3163		.hw.init = &(struct clk_init_data) {3164			.name = "gcc_jpeg_tbu_clk",3165			.ops = &clk_branch2_ops,3166		}3167	}3168};3169 3170static struct clk_branch gcc_mdp_tbu_clk = {3171	.halt_reg = 0x1201c,3172	.halt_check = BRANCH_HALT_VOTED,3173	.clkr = {3174		.enable_reg = 0x4500c,3175		.enable_mask = BIT(4),3176		.hw.init = &(struct clk_init_data) {3177			.name = "gcc_mdp_tbu_clk",3178			.ops = &clk_branch2_ops,3179		}3180	}3181};3182 3183static struct clk_branch gcc_mdss_ahb_clk = {3184	.halt_reg = 0x4d07c,3185	.halt_check = BRANCH_HALT,3186	.clkr = {3187		.enable_reg = 0x4d07c,3188		.enable_mask = BIT(0),3189		.hw.init = &(struct clk_init_data) {3190			.name = "gcc_mdss_ahb_clk",3191			.ops = &clk_branch2_ops,3192		}3193	}3194};3195 3196static struct clk_branch gcc_mdss_axi_clk = {3197	.halt_reg = 0x4d080,3198	.halt_check = BRANCH_HALT,3199	.clkr = {3200		.enable_reg = 0x4d080,3201		.enable_mask = BIT(0),3202		.hw.init = &(struct clk_init_data) {3203			.name = "gcc_mdss_axi_clk",3204			.ops = &clk_branch2_ops,3205		}3206	}3207};3208 3209static struct clk_branch gcc_mdss_byte0_clk = {3210	.halt_reg = 0x4d094,3211	.halt_check = BRANCH_HALT,3212	.clkr = {3213		.enable_reg = 0x4d094,3214		.enable_mask = BIT(0),3215		.hw.init = &(struct clk_init_data) {3216			.name = "gcc_mdss_byte0_clk",3217			.parent_hws = (const struct clk_hw*[]){3218				&byte0_clk_src.clkr.hw,3219			},3220			.num_parents = 1,3221			.ops = &clk_branch2_ops,3222			.flags = CLK_SET_RATE_PARENT,3223		}3224	}3225};3226 3227static struct clk_branch gcc_mdss_byte1_clk = {3228	.halt_reg = 0x4d0a0,3229	.halt_check = BRANCH_HALT,3230	.clkr = {3231		.enable_reg = 0x4d0a0,3232		.enable_mask = BIT(0),3233		.hw.init = &(struct clk_init_data) {3234			.name = "gcc_mdss_byte1_clk",3235			.parent_hws = (const struct clk_hw*[]){3236				&byte1_clk_src.clkr.hw,3237			},3238			.num_parents = 1,3239			.ops = &clk_branch2_ops,3240			.flags = CLK_SET_RATE_PARENT,3241		}3242	}3243};3244 3245static struct clk_branch gcc_mdss_esc0_clk = {3246	.halt_reg = 0x4d098,3247	.halt_check = BRANCH_HALT,3248	.clkr = {3249		.enable_reg = 0x4d098,3250		.enable_mask = BIT(0),3251		.hw.init = &(struct clk_init_data) {3252			.name = "gcc_mdss_esc0_clk",3253			.parent_hws = (const struct clk_hw*[]){3254				&esc0_clk_src.clkr.hw,3255			},3256			.num_parents = 1,3257			.ops = &clk_branch2_ops,3258			.flags = CLK_SET_RATE_PARENT,3259		}3260	}3261};3262 3263static struct clk_branch gcc_mdss_esc1_clk = {3264	.halt_reg = 0x4d09c,3265	.halt_check = BRANCH_HALT,3266	.clkr = {3267		.enable_reg = 0x4d09c,3268		.enable_mask = BIT(0),3269		.hw.init = &(struct clk_init_data) {3270			.name = "gcc_mdss_esc1_clk",3271			.parent_hws = (const struct clk_hw*[]){3272				&esc1_clk_src.clkr.hw,3273			},3274			.num_parents = 1,3275			.ops = &clk_branch2_ops,3276			.flags = CLK_SET_RATE_PARENT,3277		}3278	}3279};3280 3281static struct clk_branch gcc_mdss_mdp_clk = {3282	.halt_reg = 0x4d088,3283	.halt_check = BRANCH_HALT,3284	.clkr = {3285		.enable_reg = 0x4d088,3286		.enable_mask = BIT(0),3287		.hw.init = &(struct clk_init_data) {3288			.name = "gcc_mdss_mdp_clk",3289			.parent_hws = (const struct clk_hw*[]){3290				&mdp_clk_src.clkr.hw,3291			},3292			.num_parents = 1,3293			.ops = &clk_branch2_ops,3294			.flags = CLK_SET_RATE_PARENT,3295		}3296	}3297};3298 3299static struct clk_branch gcc_mdss_pclk0_clk = {3300	.halt_reg = 0x4d084,3301	.halt_check = BRANCH_HALT,3302	.clkr = {3303		.enable_reg = 0x4d084,3304		.enable_mask = BIT(0),3305		.hw.init = &(struct clk_init_data) {3306			.name = "gcc_mdss_pclk0_clk",3307			.parent_hws = (const struct clk_hw*[]){3308				&pclk0_clk_src.clkr.hw,3309			},3310			.num_parents = 1,3311			.ops = &clk_branch2_ops,3312			.flags = CLK_SET_RATE_PARENT,3313		}3314	}3315};3316 3317static struct clk_branch gcc_mdss_pclk1_clk = {3318	.halt_reg = 0x4d0a4,3319	.halt_check = BRANCH_HALT,3320	.clkr = {3321		.enable_reg = 0x4d0a4,3322		.enable_mask = BIT(0),3323		.hw.init = &(struct clk_init_data) {3324			.name = "gcc_mdss_pclk1_clk",3325			.parent_hws = (const struct clk_hw*[]){3326				&pclk1_clk_src.clkr.hw,3327			},3328			.num_parents = 1,3329			.ops = &clk_branch2_ops,3330			.flags = CLK_SET_RATE_PARENT,3331		}3332	}3333};3334 3335static struct clk_branch gcc_mdss_vsync_clk = {3336	.halt_reg = 0x4d090,3337	.halt_check = BRANCH_HALT,3338	.clkr = {3339		.enable_reg = 0x4d090,3340		.enable_mask = BIT(0),3341		.hw.init = &(struct clk_init_data) {3342			.name = "gcc_mdss_vsync_clk",3343			.parent_hws = (const struct clk_hw*[]){3344				&vsync_clk_src.clkr.hw,3345			},3346			.num_parents = 1,3347			.ops = &clk_branch2_ops,3348			.flags = CLK_SET_RATE_PARENT,3349		}3350	}3351};3352 3353static struct clk_branch gcc_mss_cfg_ahb_clk = {3354	.halt_reg = 0x49000,3355	.halt_check = BRANCH_HALT,3356	.clkr = {3357		.enable_reg = 0x49000,3358		.enable_mask = BIT(0),3359		.hw.init = &(struct clk_init_data) {3360			.name = "gcc_mss_cfg_ahb_clk",3361			.ops = &clk_branch2_ops,3362		}3363	}3364};3365 3366static struct clk_branch gcc_mss_q6_bimc_axi_clk = {3367	.halt_reg = 0x49004,3368	.halt_check = BRANCH_HALT,3369	.clkr = {3370		.enable_reg = 0x49004,3371		.enable_mask = BIT(0),3372		.hw.init = &(struct clk_init_data) {3373			.name = "gcc_mss_q6_bimc_axi_clk",3374			.ops = &clk_branch2_ops,3375		}3376	}3377};3378 3379static struct clk_branch gcc_oxili_ahb_clk = {3380	.halt_reg = 0x59028,3381	.halt_check = BRANCH_HALT,3382	.clkr = {3383		.enable_reg = 0x59028,3384		.enable_mask = BIT(0),3385		.hw.init = &(struct clk_init_data) {3386			.name = "gcc_oxili_ahb_clk",3387			.ops = &clk_branch2_ops,3388		}3389	}3390};3391 3392static struct clk_branch gcc_oxili_aon_clk = {3393	.halt_reg = 0x59044,3394	.halt_check = BRANCH_HALT,3395	.clkr = {3396		.enable_reg = 0x59044,3397		.enable_mask = BIT(0),3398		.hw.init = &(struct clk_init_data) {3399			.name = "gcc_oxili_aon_clk",3400			.parent_hws = (const struct clk_hw*[]){3401				&gfx3d_clk_src.clkr.hw,3402			},3403			.num_parents = 1,3404			.ops = &clk_branch2_ops,3405		}3406	}3407};3408 3409static struct clk_branch gcc_oxili_gfx3d_clk = {3410	.halt_reg = 0x59020,3411	.halt_check = BRANCH_HALT,3412	.clkr = {3413		.enable_reg = 0x59020,3414		.enable_mask = BIT(0),3415		.hw.init = &(struct clk_init_data) {3416			.name = "gcc_oxili_gfx3d_clk",3417			.parent_hws = (const struct clk_hw*[]){3418				&gfx3d_clk_src.clkr.hw,3419			},3420			.num_parents = 1,3421			.ops = &clk_branch2_ops,3422			.flags = CLK_SET_RATE_PARENT,3423		}3424	}3425};3426 3427static struct clk_branch gcc_oxili_timer_clk = {3428	.halt_reg = 0x59040,3429	.halt_check = BRANCH_HALT,3430	.clkr = {3431		.enable_reg = 0x59040,3432		.enable_mask = BIT(0),3433		.hw.init = &(struct clk_init_data) {3434			.name = "gcc_oxili_timer_clk",3435			.ops = &clk_branch2_ops,3436		}3437	}3438};3439 3440static struct clk_branch gcc_pcnoc_usb3_axi_clk = {3441	.halt_reg = 0x3f038,3442	.halt_check = BRANCH_HALT,3443	.clkr = {3444		.enable_reg = 0x3f038,3445		.enable_mask = BIT(0),3446		.hw.init = &(struct clk_init_data) {3447			.name = "gcc_pcnoc_usb3_axi_clk",3448			.parent_hws = (const struct clk_hw*[]){3449				&usb30_master_clk_src.clkr.hw,3450			},3451			.num_parents = 1,3452			.ops = &clk_branch2_ops,3453			.flags = CLK_SET_RATE_PARENT,3454		}3455	}3456};3457 3458static struct clk_branch gcc_pdm2_clk = {3459	.halt_reg = 0x4400c,3460	.halt_check = BRANCH_HALT,3461	.clkr = {3462		.enable_reg = 0x4400c,3463		.enable_mask = BIT(0),3464		.hw.init = &(struct clk_init_data) {3465			.name = "gcc_pdm2_clk",3466			.parent_hws = (const struct clk_hw*[]){3467				&pdm2_clk_src.clkr.hw,3468			},3469			.num_parents = 1,3470			.ops = &clk_branch2_ops,3471			.flags = CLK_SET_RATE_PARENT,3472		}3473	}3474};3475 3476static struct clk_branch gcc_pdm_ahb_clk = {3477	.halt_reg = 0x44004,3478	.halt_check = BRANCH_HALT,3479	.clkr = {3480		.enable_reg = 0x44004,3481		.enable_mask = BIT(0),3482		.hw.init = &(struct clk_init_data) {3483			.name = "gcc_pdm_ahb_clk",3484			.ops = &clk_branch2_ops,3485		}3486	}3487};3488 3489static struct clk_branch gcc_prng_ahb_clk = {3490	.halt_reg = 0x13004,3491	.halt_check = BRANCH_HALT_VOTED,3492	.clkr = {3493		.enable_reg = 0x45004,3494		.enable_mask = BIT(8),3495		.hw.init = &(struct clk_init_data) {3496			.name = "gcc_prng_ahb_clk",3497			.ops = &clk_branch2_ops,3498		}3499	}3500};3501 3502static struct clk_branch gcc_qdss_dap_clk = {3503	.halt_reg = 0x29084,3504	.halt_check = BRANCH_HALT_VOTED,3505	.clkr = {3506		.enable_reg = 0x45004,3507		.enable_mask = BIT(11),3508		.hw.init = &(struct clk_init_data) {3509			.name = "gcc_qdss_dap_clk",3510			.ops = &clk_branch2_ops,3511		}3512	}3513};3514 3515static struct clk_branch gcc_qusb_ref_clk = {3516	.halt_reg = 0,3517	.halt_check = BRANCH_HALT_SKIP,3518	.clkr = {3519		.enable_reg = 0x41030,3520		.enable_mask = BIT(0),3521		.hw.init = &(struct clk_init_data) {3522			.name = "gcc_qusb_ref_clk",3523			.ops = &clk_branch2_ops,3524		}3525	}3526};3527 3528static struct clk_branch gcc_rbcpr_gfx_clk = {3529	.halt_reg = 0x3a004,3530	.halt_check = BRANCH_HALT,3531	.clkr = {3532		.enable_reg = 0x3a004,3533		.enable_mask = BIT(0),3534		.hw.init = &(struct clk_init_data) {3535			.name = "gcc_rbcpr_gfx_clk",3536			.parent_hws = (const struct clk_hw*[]){3537				&rbcpr_gfx_clk_src.clkr.hw,3538			},3539			.num_parents = 1,3540			.ops = &clk_branch2_ops,3541			.flags = CLK_SET_RATE_PARENT,3542		}3543	}3544};3545 3546static struct clk_branch gcc_sdcc1_ice_core_clk = {3547	.halt_reg = 0x5d014,3548	.halt_check = BRANCH_HALT,3549	.clkr = {3550		.enable_reg = 0x5d014,3551		.enable_mask = BIT(0),3552		.hw.init = &(struct clk_init_data) {3553			.name = "gcc_sdcc1_ice_core_clk",3554			.parent_hws = (const struct clk_hw*[]){3555				&sdcc1_ice_core_clk_src.clkr.hw,3556			},3557			.num_parents = 1,3558			.ops = &clk_branch2_ops,3559			.flags = CLK_SET_RATE_PARENT,3560		}3561	}3562};3563 3564static struct clk_branch gcc_sdcc1_ahb_clk = {3565	.halt_reg = 0x4201c,3566	.halt_check = BRANCH_HALT,3567	.clkr = {3568		.enable_reg = 0x4201c,3569		.enable_mask = BIT(0),3570		.hw.init = &(struct clk_init_data) {3571			.name = "gcc_sdcc1_ahb_clk",3572			.ops = &clk_branch2_ops,3573		}3574	}3575};3576 3577static struct clk_branch gcc_sdcc2_ahb_clk = {3578	.halt_reg = 0x4301c,3579	.halt_check = BRANCH_HALT,3580	.clkr = {3581		.enable_reg = 0x4301c,3582		.enable_mask = BIT(0),3583		.hw.init = &(struct clk_init_data) {3584			.name = "gcc_sdcc2_ahb_clk",3585			.ops = &clk_branch2_ops,3586		}3587	}3588};3589 3590static struct clk_branch gcc_sdcc1_apps_clk = {3591	.halt_reg = 0x42018,3592	.halt_check = BRANCH_HALT,3593	.clkr = {3594		.enable_reg = 0x42018,3595		.enable_mask = BIT(0),3596		.hw.init = &(struct clk_init_data) {3597			.name = "gcc_sdcc1_apps_clk",3598			.parent_hws = (const struct clk_hw*[]){3599				&sdcc1_apps_clk_src.clkr.hw,3600			},3601			.num_parents = 1,3602			.ops = &clk_branch2_ops,3603			.flags = CLK_SET_RATE_PARENT,3604		}3605	}3606};3607 3608static struct clk_branch gcc_sdcc2_apps_clk = {3609	.halt_reg = 0x43018,3610	.halt_check = BRANCH_HALT,3611	.clkr = {3612		.enable_reg = 0x43018,3613		.enable_mask = BIT(0),3614		.hw.init = &(struct clk_init_data) {3615			.name = "gcc_sdcc2_apps_clk",3616			.parent_hws = (const struct clk_hw*[]){3617				&sdcc2_apps_clk_src.clkr.hw,3618			},3619			.num_parents = 1,3620			.ops = &clk_branch2_ops,3621			.flags = CLK_SET_RATE_PARENT,3622		}3623	}3624};3625 3626static struct clk_branch gcc_smmu_cfg_clk = {3627	.halt_reg = 0x12038,3628	.halt_check = BRANCH_HALT_VOTED,3629	.clkr = {3630		.enable_reg = 0x4500c,3631		.enable_mask = BIT(12),3632		.hw.init = &(struct clk_init_data) {3633			.name = "gcc_smmu_cfg_clk",3634			.ops = &clk_branch2_ops,3635		}3636	}3637};3638 3639static struct clk_branch gcc_usb30_master_clk = {3640	.halt_reg = 0x3f000,3641	.halt_check = BRANCH_HALT,3642	.clkr = {3643		.enable_reg = 0x3f000,3644		.enable_mask = BIT(0),3645		.hw.init = &(struct clk_init_data) {3646			.name = "gcc_usb30_master_clk",3647			.parent_hws = (const struct clk_hw*[]){3648				&usb30_master_clk_src.clkr.hw,3649			},3650			.num_parents = 1,3651			.ops = &clk_branch2_ops,3652			.flags = CLK_SET_RATE_PARENT,3653		}3654	}3655};3656 3657static struct clk_branch gcc_usb30_mock_utmi_clk = {3658	.halt_reg = 0x3f008,3659	.halt_check = BRANCH_HALT,3660	.clkr = {3661		.enable_reg = 0x3f008,3662		.enable_mask = BIT(0),3663		.hw.init = &(struct clk_init_data) {3664			.name = "gcc_usb30_mock_utmi_clk",3665			.parent_hws = (const struct clk_hw*[]){3666				&usb30_mock_utmi_clk_src.clkr.hw,3667			},3668			.num_parents = 1,3669			.ops = &clk_branch2_ops,3670			.flags = CLK_SET_RATE_PARENT,3671		}3672	}3673};3674 3675static struct clk_branch gcc_usb30_sleep_clk = {3676	.halt_reg = 0x3f004,3677	.halt_check = BRANCH_HALT,3678	.clkr = {3679		.enable_reg = 0x3f004,3680		.enable_mask = BIT(0),3681		.hw.init = &(struct clk_init_data) {3682			.name = "gcc_usb30_sleep_clk",3683			.ops = &clk_branch2_ops,3684		}3685	}3686};3687 3688static struct clk_branch gcc_usb3_aux_clk = {3689	.halt_reg = 0x3f044,3690	.halt_check = BRANCH_HALT,3691	.clkr = {3692		.enable_reg = 0x3f044,3693		.enable_mask = BIT(0),3694		.hw.init = &(struct clk_init_data) {3695			.name = "gcc_usb3_aux_clk",3696			.parent_hws = (const struct clk_hw*[]){3697				&usb3_aux_clk_src.clkr.hw,3698			},3699			.num_parents = 1,3700			.ops = &clk_branch2_ops,3701			.flags = CLK_SET_RATE_PARENT,3702		}3703	}3704};3705 3706static struct clk_branch gcc_usb3_pipe_clk = {3707	.halt_reg = 0,3708	.halt_check = BRANCH_HALT_DELAY,3709	.clkr = {3710		.enable_reg = 0x3f040,3711		.enable_mask = BIT(0),3712		.hw.init = &(struct clk_init_data) {3713			.name = "gcc_usb3_pipe_clk",3714			.ops = &clk_branch2_ops,3715		}3716	}3717};3718 3719static struct clk_branch gcc_usb_phy_cfg_ahb_clk = {3720	.halt_reg = 0x3f080,3721	.halt_check = BRANCH_VOTED,3722	.clkr = {3723		.enable_reg = 0x3f080,3724		.enable_mask = BIT(0),3725		.hw.init = &(struct clk_init_data) {3726			.name = "gcc_usb_phy_cfg_ahb_clk",3727			.ops = &clk_branch2_ops,3728		}3729	}3730};3731 3732static struct clk_branch gcc_usb_ss_ref_clk = {3733	.halt_reg = 0,3734	.halt_check = BRANCH_HALT_SKIP,3735	.clkr = {3736		.enable_reg = 0x3f07c,3737		.enable_mask = BIT(0),3738		.hw.init = &(struct clk_init_data) {3739			.name = "gcc_usb_ss_ref_clk",3740			.ops = &clk_branch2_ops,3741		}3742	}3743};3744 3745static struct clk_branch gcc_venus0_ahb_clk = {3746	.halt_reg = 0x4c020,3747	.halt_check = BRANCH_HALT,3748	.clkr = {3749		.enable_reg = 0x4c020,3750		.enable_mask = BIT(0),3751		.hw.init = &(struct clk_init_data) {3752			.name = "gcc_venus0_ahb_clk",3753			.ops = &clk_branch2_ops,3754		}3755	}3756};3757 3758static struct clk_branch gcc_venus0_axi_clk = {3759	.halt_reg = 0x4c024,3760	.halt_check = BRANCH_HALT,3761	.clkr = {3762		.enable_reg = 0x4c024,3763		.enable_mask = BIT(0),3764		.hw.init = &(struct clk_init_data) {3765			.name = "gcc_venus0_axi_clk",3766			.ops = &clk_branch2_ops,3767		}3768	}3769};3770 3771static struct clk_branch gcc_venus0_core0_vcodec0_clk = {3772	.halt_reg = 0x4c02c,3773	.halt_check = BRANCH_HALT,3774	.clkr = {3775		.enable_reg = 0x4c02c,3776		.enable_mask = BIT(0),3777		.hw.init = &(struct clk_init_data) {3778			.name = "gcc_venus0_core0_vcodec0_clk",3779			.parent_hws = (const struct clk_hw*[]){3780				&vcodec0_clk_src.clkr.hw,3781			},3782			.num_parents = 1,3783			.ops = &clk_branch2_ops,3784			.flags = CLK_SET_RATE_PARENT,3785		}3786	}3787};3788 3789static struct clk_branch gcc_venus0_vcodec0_clk = {3790	.halt_reg = 0x4c01c,3791	.halt_check = BRANCH_HALT,3792	.clkr = {3793		.enable_reg = 0x4c01c,3794		.enable_mask = BIT(0),3795		.hw.init = &(struct clk_init_data) {3796			.name = "gcc_venus0_vcodec0_clk",3797			.parent_hws = (const struct clk_hw*[]){3798				&vcodec0_clk_src.clkr.hw,3799			},3800			.num_parents = 1,3801			.ops = &clk_branch2_ops,3802			.flags = CLK_SET_RATE_PARENT,3803		}3804	}3805};3806 3807static struct clk_branch gcc_venus_tbu_clk = {3808	.halt_reg = 0x12014,3809	.halt_check = BRANCH_HALT_VOTED,3810	.clkr = {3811		.enable_reg = 0x4500c,3812		.enable_mask = BIT(5),3813		.hw.init = &(struct clk_init_data) {3814			.name = "gcc_venus_tbu_clk",3815			.ops = &clk_branch2_ops,3816		}3817	}3818};3819 3820static struct clk_branch gcc_vfe1_tbu_clk = {3821	.halt_reg = 0x12090,3822	.halt_check = BRANCH_HALT_VOTED,3823	.clkr = {3824		.enable_reg = 0x4500c,3825		.enable_mask = BIT(17),3826		.hw.init = &(struct clk_init_data) {3827			.name = "gcc_vfe1_tbu_clk",3828			.ops = &clk_branch2_ops,3829		}3830	}3831};3832 3833static struct clk_branch gcc_vfe_tbu_clk = {3834	.halt_reg = 0x1203c,3835	.halt_check = BRANCH_HALT_VOTED,3836	.clkr = {3837		.enable_reg = 0x4500c,3838		.enable_mask = BIT(9),3839		.hw.init = &(struct clk_init_data) {3840			.name = "gcc_vfe_tbu_clk",3841			.ops = &clk_branch2_ops,3842		}3843	}3844};3845 3846static struct gdsc usb30_gdsc = {3847	.gdscr = 0x3f078,3848	.pd = {3849		.name = "usb30_gdsc",3850	},3851	.pwrsts = PWRSTS_OFF_ON,3852	/*3853	 * FIXME: dwc3 usb gadget cannot resume after GDSC power off3854	 * dwc3 7000000.dwc3: failed to enable ep0out3855	 */3856	.flags = ALWAYS_ON,3857};3858 3859static struct gdsc venus_gdsc = {3860	.gdscr = 0x4c018,3861	.cxcs = (unsigned int []){ 0x4c024, 0x4c01c },3862	.cxc_count = 2,3863	.pd = {3864		.name = "venus_gdsc",3865	},3866	.pwrsts = PWRSTS_OFF_ON,3867};3868 3869static struct gdsc venus_core0_gdsc = {3870	.gdscr = 0x4c028,3871	.cxcs = (unsigned int []){ 0x4c02c },3872	.cxc_count = 1,3873	.pd = {3874		.name = "venus_core0",3875	},3876	.flags = HW_CTRL,3877	.pwrsts = PWRSTS_OFF_ON,3878};3879 3880static struct gdsc mdss_gdsc = {3881	.gdscr = 0x4d078,3882	.cxcs = (unsigned int []){ 0x4d080, 0x4d088 },3883	.cxc_count = 2,3884	.pd = {3885		.name = "mdss_gdsc",3886	},3887	.pwrsts = PWRSTS_OFF_ON,3888};3889 3890static struct gdsc jpeg_gdsc = {3891	.gdscr = 0x5701c,3892	.cxcs = (unsigned int []){ 0x57020, 0x57028 },3893	.cxc_count = 2,3894	.pd = {3895		.name = "jpeg_gdsc",3896	},3897	.pwrsts = PWRSTS_OFF_ON,3898};3899 3900static struct gdsc vfe0_gdsc = {3901	.gdscr = 0x58034,3902	.cxcs = (unsigned int []){ 0x58038, 0x58048, 0x5600c, 0x58050 },3903	.cxc_count = 4,3904	.pd = {3905		.name = "vfe0_gdsc",3906	},3907	.pwrsts = PWRSTS_OFF_ON,3908};3909 3910static struct gdsc vfe1_gdsc = {3911	.gdscr = 0x5806c,3912	.cxcs = (unsigned int []){ 0x5805c, 0x58068, 0x5600c, 0x58074 },3913	.cxc_count = 4,3914	.pd = {3915		.name = "vfe1_gdsc",3916	},3917	.pwrsts = PWRSTS_OFF_ON,3918};3919 3920static struct gdsc oxili_gx_gdsc = {3921	.gdscr = 0x5901c,3922	.clamp_io_ctrl = 0x5b00c,3923	.cxcs = (unsigned int []){ 0x59000, 0x59024 },3924	.cxc_count = 2,3925	.pd = {3926		.name = "oxili_gx_gdsc",3927	},3928	.pwrsts = PWRSTS_OFF_ON,3929	.flags = CLAMP_IO,3930};3931 3932static struct gdsc oxili_cx_gdsc = {3933	.gdscr = 0x5904c,3934	.cxcs = (unsigned int []){ 0x59020 },3935	.cxc_count = 1,3936	.pd = {3937		.name = "oxili_cx_gdsc",3938	},3939	.pwrsts = PWRSTS_OFF_ON,3940};3941 3942static struct gdsc cpp_gdsc = {3943	.gdscr = 0x58078,3944	.cxcs = (unsigned int []){ 0x5803c, 0x58064 },3945	.cxc_count = 2,3946	.pd = {3947		.name = "cpp_gdsc",3948	},3949	.flags = ALWAYS_ON,3950	.pwrsts = PWRSTS_OFF_ON,3951};3952 3953static struct clk_hw *gcc_msm8953_hws[] = {3954	&gpll0_early_div.hw,3955	&gpll6_early_div.hw,3956};3957 3958static struct clk_regmap *gcc_msm8953_clocks[] = {3959	[GPLL0] = &gpll0.clkr,3960	[GPLL0_EARLY] = &gpll0_early.clkr,3961	[GPLL2] = &gpll2.clkr,3962	[GPLL2_EARLY] = &gpll2_early.clkr,3963	[GPLL3] = &gpll3.clkr,3964	[GPLL3_EARLY] = &gpll3_early.clkr,3965	[GPLL4] = &gpll4.clkr,3966	[GPLL4_EARLY] = &gpll4_early.clkr,3967	[GPLL6] = &gpll6.clkr,3968	[GPLL6_EARLY] = &gpll6_early.clkr,3969	[GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,3970	[GCC_APSS_AXI_CLK] = &gcc_apss_axi_clk.clkr,3971	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,3972	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,3973	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,3974	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,3975	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,3976	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,3977	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,3978	[GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,3979	[GCC_APSS_TCU_ASYNC_CLK] = &gcc_apss_tcu_async_clk.clkr,3980	[GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr,3981	[GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,3982	[GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,3983	[GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,3984	[GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,3985	[GCC_VFE1_TBU_CLK] = &gcc_vfe1_tbu_clk.clkr,3986	[GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,3987	[CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,3988	[CSI0_CLK_SRC] = &csi0_clk_src.clkr,3989	[APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,3990	[CSI1_CLK_SRC] = &csi1_clk_src.clkr,3991	[CSI2_CLK_SRC] = &csi2_clk_src.clkr,3992	[VFE0_CLK_SRC] = &vfe0_clk_src.clkr,3993	[VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,3994	[CPP_CLK_SRC] = &cpp_clk_src.clkr,3995	[JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,3996	[USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,3997	[VFE1_CLK_SRC] = &vfe1_clk_src.clkr,3998	[APC0_DROOP_DETECTOR_CLK_SRC] = &apc0_droop_detector_clk_src.clkr,3999	[APC1_DROOP_DETECTOR_CLK_SRC] = &apc1_droop_detector_clk_src.clkr,4000	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,4001	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,4002	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,4003	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,4004	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,4005	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,4006	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,4007	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,4008	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,4009	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,4010	[BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,4011	[BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,4012	[BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,4013	[BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,4014	[BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,4015	[BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,4016	[BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,4017	[BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,4018	[BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,4019	[BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,4020	[CCI_CLK_SRC] = &cci_clk_src.clkr,4021	[CSI0P_CLK_SRC] = &csi0p_clk_src.clkr,4022	[CSI1P_CLK_SRC] = &csi1p_clk_src.clkr,4023	[CSI2P_CLK_SRC] = &csi2p_clk_src.clkr,4024	[CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,4025	[CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,4026	[MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,4027	[MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,4028	[MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,4029	[MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,4030	[CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,4031	[CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,4032	[CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,4033	[CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,4034	[GP1_CLK_SRC] = &gp1_clk_src.clkr,4035	[GP2_CLK_SRC] = &gp2_clk_src.clkr,4036	[GP3_CLK_SRC] = &gp3_clk_src.clkr,4037	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,4038	[RBCPR_GFX_CLK_SRC] = &rbcpr_gfx_clk_src.clkr,4039	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,4040	[SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,4041	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,4042	[USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,4043	[USB3_AUX_CLK_SRC] = &usb3_aux_clk_src.clkr,4044	[GCC_APC0_DROOP_DETECTOR_GPLL0_CLK] = &gcc_apc0_droop_detector_gpll0_clk.clkr,4045	[GCC_APC1_DROOP_DETECTOR_GPLL0_CLK] = &gcc_apc1_droop_detector_gpll0_clk.clkr,4046	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,4047	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,4048	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,4049	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,4050	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,4051	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,4052	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,4053	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,4054	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,4055	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,4056	[GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,4057	[GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,4058	[GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,4059	[GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,4060	[GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,4061	[GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,4062	[GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,4063	[GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,4064	[GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,4065	[GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,4066	[GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,4067	[GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,4068	[GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,4069	[GCC_CAMSS_CPP_AXI_CLK] = &gcc_camss_cpp_axi_clk.clkr,4070	[GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,4071	[GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,4072	[GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,4073	[GCC_CAMSS_CSI0_CSIPHY_3P_CLK] = &gcc_camss_csi0_csiphy_3p_clk.clkr,4074	[GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,4075	[GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,4076	[GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,4077	[GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,4078	[GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,4079	[GCC_CAMSS_CSI1_CSIPHY_3P_CLK] = &gcc_camss_csi1_csiphy_3p_clk.clkr,4080	[GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,4081	[GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,4082	[GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,4083	[GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,4084	[GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,4085	[GCC_CAMSS_CSI2_CSIPHY_3P_CLK] = &gcc_camss_csi2_csiphy_3p_clk.clkr,4086	[GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr,4087	[GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,4088	[GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,4089	[GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,4090	[GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr,4091	[GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,4092	[GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,4093	[GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,4094	[GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,4095	[GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,4096	[GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,4097	[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,4098	[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,4099	[GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,4100	[GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,4101	[GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,4102	[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,4103	[GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,4104	[GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr,4105	[GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,4106	[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,4107	[GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,4108	[GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr,4109	[GCC_CAMSS_VFE0_AXI_CLK] = &gcc_camss_vfe0_axi_clk.clkr,4110	[GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr,4111	[GCC_CAMSS_VFE1_AXI_CLK] = &gcc_camss_vfe1_axi_clk.clkr,4112	[GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr,4113	[GCC_DCC_CLK] = &gcc_dcc_clk.clkr,4114	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,4115	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,4116	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,4117	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,4118	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,4119	[GCC_PCNOC_USB3_AXI_CLK] = &gcc_pcnoc_usb3_axi_clk.clkr,4120	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,4121	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,4122	[GCC_RBCPR_GFX_CLK] = &gcc_rbcpr_gfx_clk.clkr,4123	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,4124	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,4125	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,4126	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,4127	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,4128	[GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,4129	[GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,4130	[GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,4131	[GCC_USB3_AUX_CLK] = &gcc_usb3_aux_clk.clkr,4132	[GCC_USB_PHY_CFG_AHB_CLK] = &gcc_usb_phy_cfg_ahb_clk.clkr,4133	[GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,4134	[GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,4135	[GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,4136	[GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,4137	[GCC_QUSB_REF_CLK] = &gcc_qusb_ref_clk.clkr,4138	[GCC_USB_SS_REF_CLK] = &gcc_usb_ss_ref_clk.clkr,4139	[GCC_USB3_PIPE_CLK] = &gcc_usb3_pipe_clk.clkr,4140	[MDP_CLK_SRC] = &mdp_clk_src.clkr,4141	[PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,4142	[BYTE0_CLK_SRC] = &byte0_clk_src.clkr,4143	[ESC0_CLK_SRC] = &esc0_clk_src.clkr,4144	[PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,4145	[BYTE1_CLK_SRC] = &byte1_clk_src.clkr,4146	[ESC1_CLK_SRC] = &esc1_clk_src.clkr,4147	[VSYNC_CLK_SRC] = &vsync_clk_src.clkr,4148	[GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,4149	[GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,4150	[GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,4151	[GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,4152	[GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,4153	[GCC_MDSS_PCLK1_CLK] = &gcc_mdss_pclk1_clk.clkr,4154	[GCC_MDSS_BYTE1_CLK] = &gcc_mdss_byte1_clk.clkr,4155	[GCC_MDSS_ESC1_CLK] = &gcc_mdss_esc1_clk.clkr,4156	[GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,4157	[GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,4158	[GCC_OXILI_TIMER_CLK] = &gcc_oxili_timer_clk.clkr,4159	[GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,4160	[GCC_OXILI_AON_CLK] = &gcc_oxili_aon_clk.clkr,4161	[GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,4162	[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,4163	[GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,4164	[GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,4165};4166 4167static const struct qcom_reset_map gcc_msm8953_resets[] = {4168	[GCC_CAMSS_MICRO_BCR]	= { 0x56008 },4169	[GCC_MSS_BCR]		= { 0x71000 },4170	[GCC_QUSB2_PHY_BCR]	= { 0x4103c },4171	[GCC_USB3PHY_PHY_BCR]	= { 0x3f03c },4172	[GCC_USB3_PHY_BCR]	= { 0x3f034 },4173	[GCC_USB_30_BCR]	= { 0x3f070 },4174	[GCC_MDSS_BCR]		= { 0x4d074 },4175	[GCC_CRYPTO_BCR]	= { 0x16000 },4176	[GCC_SDCC1_BCR]		= { 0x42000 },4177	[GCC_SDCC2_BCR]		= { 0x43000 },4178};4179 4180static const struct regmap_config gcc_msm8953_regmap_config = {4181	.reg_bits	= 32,4182	.reg_stride	= 4,4183	.val_bits	= 32,4184	.max_register	= 0x80000,4185	.fast_io	= true,4186};4187 4188static struct gdsc *gcc_msm8953_gdscs[] = {4189	[CPP_GDSC] = &cpp_gdsc,4190	[JPEG_GDSC] = &jpeg_gdsc,4191	[MDSS_GDSC] = &mdss_gdsc,4192	[OXILI_CX_GDSC] = &oxili_cx_gdsc,4193	[OXILI_GX_GDSC] = &oxili_gx_gdsc,4194	[USB30_GDSC] = &usb30_gdsc,4195	[VENUS_CORE0_GDSC] = &venus_core0_gdsc,4196	[VENUS_GDSC] = &venus_gdsc,4197	[VFE0_GDSC] = &vfe0_gdsc,4198	[VFE1_GDSC] = &vfe1_gdsc,4199};4200 4201static const struct qcom_cc_desc gcc_msm8953_desc = {4202	.config = &gcc_msm8953_regmap_config,4203	.clks = gcc_msm8953_clocks,4204	.num_clks = ARRAY_SIZE(gcc_msm8953_clocks),4205	.resets = gcc_msm8953_resets,4206	.num_resets = ARRAY_SIZE(gcc_msm8953_resets),4207	.gdscs = gcc_msm8953_gdscs,4208	.num_gdscs = ARRAY_SIZE(gcc_msm8953_gdscs),4209	.clk_hws = gcc_msm8953_hws,4210	.num_clk_hws = ARRAY_SIZE(gcc_msm8953_hws),4211};4212 4213static int gcc_msm8953_probe(struct platform_device *pdev)4214{4215	struct regmap *regmap;4216 4217	regmap  = qcom_cc_map(pdev, &gcc_msm8953_desc);4218	if (IS_ERR(regmap))4219		return PTR_ERR(regmap);4220 4221	clk_alpha_pll_configure(&gpll3_early, regmap, &gpll3_early_config);4222 4223	return qcom_cc_really_probe(&pdev->dev, &gcc_msm8953_desc, regmap);4224}4225 4226static const struct of_device_id gcc_msm8953_match_table[] = {4227	{ .compatible = "qcom,gcc-msm8953" },4228	{},4229};4230MODULE_DEVICE_TABLE(of, gcc_msm8953_match_table);4231 4232static struct platform_driver gcc_msm8953_driver = {4233	.probe = gcc_msm8953_probe,4234	.driver = {4235		.name = "gcc-msm8953",4236		.of_match_table = gcc_msm8953_match_table,4237	},4238};4239 4240static int __init gcc_msm8953_init(void)4241{4242	return platform_driver_register(&gcc_msm8953_driver);4243}4244core_initcall(gcc_msm8953_init);4245 4246static void __exit gcc_msm8953_exit(void)4247{4248	platform_driver_unregister(&gcc_msm8953_driver);4249}4250module_exit(gcc_msm8953_exit);4251 4252MODULE_DESCRIPTION("Qualcomm GCC MSM8953 Driver");4253MODULE_LICENSE("GPL v2");4254