brintos

brintos / linux-shallow public Read only

0
0
Text · 100.5 KiB · f47dc28 Raw
3920 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Copyright (c) 2021, The Linux Foundation. All rights reserved.4 * Copyright (c) 2022, Konrad Dybcio <konrad.dybcio@somainline.org>5 */6 7#include <linux/clk-provider.h>8#include <linux/module.h>9#include <linux/of.h>10#include <linux/platform_device.h>11#include <linux/regmap.h>12 13#include <dt-bindings/clock/qcom,sm6375-gcc.h>14 15#include "clk-alpha-pll.h"16#include "clk-branch.h"17#include "clk-rcg.h"18#include "clk-regmap.h"19#include "clk-regmap-divider.h"20#include "clk-regmap-mux.h"21#include "clk-regmap-phy-mux.h"22#include "gdsc.h"23#include "reset.h"24 25enum {26	DT_BI_TCXO,27	DT_BI_TCXO_AO,28	DT_SLEEP_CLK29};30 31enum {32	P_BI_TCXO,33	P_GPLL0_OUT_EVEN,34	P_GPLL0_OUT_MAIN,35	P_GPLL0_OUT_ODD,36	P_GPLL10_OUT_EVEN,37	P_GPLL11_OUT_EVEN,38	P_GPLL11_OUT_ODD,39	P_GPLL3_OUT_EVEN,40	P_GPLL3_OUT_MAIN,41	P_GPLL4_OUT_EVEN,42	P_GPLL5_OUT_EVEN,43	P_GPLL6_OUT_EVEN,44	P_GPLL6_OUT_MAIN,45	P_GPLL7_OUT_EVEN,46	P_GPLL8_OUT_EVEN,47	P_GPLL8_OUT_MAIN,48	P_GPLL9_OUT_EARLY,49	P_GPLL9_OUT_MAIN,50	P_SLEEP_CLK,51};52 53static const struct pll_vco lucid_vco[] = {54	{ 249600000, 2000000000, 0 },55};56 57static const struct pll_vco zonda_vco[] = {58	{ 595200000, 3600000000UL, 0 },59};60 61static struct clk_alpha_pll gpll0 = {62	.offset = 0x0,63	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],64	.clkr = {65		.enable_reg = 0x79000,66		.enable_mask = BIT(0),67		.hw.init = &(struct clk_init_data){68			.name = "gpll0",69			.parent_data = &(const struct clk_parent_data){70				.index = DT_BI_TCXO,71			},72			.num_parents = 1,73			.ops = &clk_alpha_pll_fixed_lucid_ops,74		},75	},76};77 78static const struct clk_div_table post_div_table_gpll0_out_even[] = {79	{ 0x1, 2 },80	{ }81};82 83static struct clk_alpha_pll_postdiv gpll0_out_even = {84	.offset = 0x0,85	.post_div_shift = 8,86	.post_div_table = post_div_table_gpll0_out_even,87	.num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_even),88	.width = 4,89	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],90	.clkr.hw.init = &(struct clk_init_data){91		.name = "gpll0_out_even",92		.parent_hws = (const struct clk_hw*[]){93			&gpll0.clkr.hw,94		},95		.num_parents = 1,96		.ops = &clk_alpha_pll_postdiv_lucid_ops,97	},98};99 100static const struct clk_div_table post_div_table_gpll0_out_odd[] = {101	{ 0x3, 3 },102	{ }103};104 105static struct clk_alpha_pll_postdiv gpll0_out_odd = {106	.offset = 0x0,107	.post_div_shift = 12,108	.post_div_table = post_div_table_gpll0_out_odd,109	.num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_odd),110	.width = 4,111	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],112	.clkr.hw.init = &(struct clk_init_data){113		.name = "gpll0_out_odd",114		.parent_hws = (const struct clk_hw*[]){115			&gpll0.clkr.hw,116		},117		.num_parents = 1,118		.ops = &clk_alpha_pll_postdiv_lucid_ops,119	},120};121 122static struct clk_alpha_pll gpll1 = {123	.offset = 0x1000,124	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],125	.clkr = {126		.enable_reg = 0x79000,127		.enable_mask = BIT(1),128		.hw.init = &(struct clk_init_data){129			.name = "gpll1",130			.parent_data = &(const struct clk_parent_data){131				.index = DT_BI_TCXO,132			},133			.num_parents = 1,134			.ops = &clk_alpha_pll_lucid_ops,135		},136	},137};138 139/* 1152MHz Configuration */140static const struct alpha_pll_config gpll10_config = {141	.l = 0x3c,142	.alpha = 0x0,143	.config_ctl_val = 0x20485699,144	.config_ctl_hi_val = 0x00002261,145	.config_ctl_hi1_val = 0x329a299c,146	.user_ctl_val = 0x00000001,147	.user_ctl_hi_val = 0x00000805,148	.user_ctl_hi1_val = 0x00000000,149};150 151static struct clk_alpha_pll gpll10 = {152	.offset = 0xa000,153	.vco_table = lucid_vco,154	.num_vco = ARRAY_SIZE(lucid_vco),155	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],156	.flags = SUPPORTS_FSM_LEGACY_MODE,157	.clkr = {158		.enable_reg = 0x79000,159		.enable_mask = BIT(10),160		.hw.init = &(struct clk_init_data){161			.name = "gpll10",162			.parent_data = &(const struct clk_parent_data){163				.index = DT_BI_TCXO,164			},165			.num_parents = 1,166			.ops = &clk_alpha_pll_fixed_lucid_ops,167		},168	},169};170 171/* 532MHz Configuration */172static const struct alpha_pll_config gpll11_config = {173	.l = 0x1b,174	.alpha = 0xb555,175	.config_ctl_val = 0x20485699,176	.config_ctl_hi_val = 0x00002261,177	.config_ctl_hi1_val = 0x329a299c,178	.user_ctl_val = 0x00000001,179	.user_ctl_hi_val = 0x00000805,180	.user_ctl_hi1_val = 0x00000000,181};182 183static struct clk_alpha_pll gpll11 = {184	.offset = 0xb000,185	.vco_table = lucid_vco,186	.num_vco = ARRAY_SIZE(lucid_vco),187	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],188	.flags = SUPPORTS_FSM_LEGACY_MODE,189	.clkr = {190		.enable_reg = 0x79000,191		.enable_mask = BIT(11),192		.hw.init = &(struct clk_init_data){193			.name = "gpll11",194			.parent_data = &(const struct clk_parent_data){195				.index = DT_BI_TCXO,196			},197			.num_parents = 1,198			.ops = &clk_alpha_pll_lucid_ops,199		},200	},201};202 203static struct clk_alpha_pll gpll3 = {204	.offset = 0x3000,205	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],206	.clkr = {207		.enable_reg = 0x79000,208		.enable_mask = BIT(3),209		.hw.init = &(struct clk_init_data){210			.name = "gpll3",211			.parent_data = &(const struct clk_parent_data){212				.index = DT_BI_TCXO,213			},214			.num_parents = 1,215			.ops = &clk_alpha_pll_fixed_lucid_ops,216		},217	},218};219 220static const struct clk_div_table post_div_table_gpll3_out_even[] = {221	{ 0x1, 2 },222	{ }223};224 225static struct clk_alpha_pll_postdiv gpll3_out_even = {226	.offset = 0x3000,227	.post_div_shift = 8,228	.post_div_table = post_div_table_gpll3_out_even,229	.num_post_div = ARRAY_SIZE(post_div_table_gpll3_out_even),230	.width = 4,231	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],232	.clkr.hw.init = &(struct clk_init_data){233		.name = "gpll3_out_even",234		.parent_hws = (const struct clk_hw*[]){235			&gpll3.clkr.hw,236		},237		.num_parents = 1,238		.ops = &clk_alpha_pll_postdiv_lucid_ops,239	},240};241 242static struct clk_alpha_pll gpll4 = {243	.offset = 0x4000,244	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],245	.clkr = {246		.enable_reg = 0x79000,247		.enable_mask = BIT(4),248		.hw.init = &(struct clk_init_data){249			.name = "gpll4",250			.parent_data = &(const struct clk_parent_data){251				.index = DT_BI_TCXO,252			},253			.num_parents = 1,254			.ops = &clk_alpha_pll_fixed_lucid_ops,255		},256	},257};258 259static struct clk_alpha_pll gpll5 = {260	.offset = 0x5000,261	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],262	.clkr = {263		.enable_reg = 0x79000,264		.enable_mask = BIT(5),265		.hw.init = &(struct clk_init_data){266			.name = "gpll5",267			.parent_data = &(const struct clk_parent_data){268				.index = DT_BI_TCXO,269			},270			.num_parents = 1,271			.ops = &clk_alpha_pll_fixed_lucid_ops,272		},273	},274};275 276static struct clk_alpha_pll gpll6 = {277	.offset = 0x6000,278	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],279	.clkr = {280		.enable_reg = 0x79000,281		.enable_mask = BIT(6),282		.hw.init = &(struct clk_init_data){283			.name = "gpll6",284			.parent_data = &(const struct clk_parent_data){285				.index = DT_BI_TCXO,286			},287			.num_parents = 1,288			.ops = &clk_alpha_pll_fixed_lucid_ops,289		},290	},291};292 293static const struct clk_div_table post_div_table_gpll6_out_even[] = {294	{ 0x1, 2 },295	{ }296};297 298static struct clk_alpha_pll_postdiv gpll6_out_even = {299	.offset = 0x6000,300	.post_div_shift = 8,301	.post_div_table = post_div_table_gpll6_out_even,302	.num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_even),303	.width = 4,304	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],305	.clkr.hw.init = &(struct clk_init_data){306		.name = "gpll6_out_even",307		.parent_hws = (const struct clk_hw*[]){308			&gpll6.clkr.hw,309		},310		.num_parents = 1,311		.ops = &clk_alpha_pll_postdiv_lucid_ops,312	},313};314 315static struct clk_alpha_pll gpll7 = {316	.offset = 0x7000,317	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],318	.clkr = {319		.enable_reg = 0x79000,320		.enable_mask = BIT(7),321		.hw.init = &(struct clk_init_data){322			.name = "gpll7",323			.parent_data = &(const struct clk_parent_data){324				.index = DT_BI_TCXO,325			},326			.num_parents = 1,327			.ops = &clk_alpha_pll_fixed_lucid_ops,328		},329	},330};331 332/* 400MHz Configuration */333static const struct alpha_pll_config gpll8_config = {334	.l = 0x14,335	.alpha = 0xd555,336	.config_ctl_val = 0x20485699,337	.config_ctl_hi_val = 0x00002261,338	.config_ctl_hi1_val = 0x329a299c,339	.user_ctl_val = 0x00000101,340	.user_ctl_hi_val = 0x00000805,341	.user_ctl_hi1_val = 0x00000000,342};343 344static struct clk_alpha_pll gpll8 = {345	.offset = 0x8000,346	.vco_table = lucid_vco,347	.num_vco = ARRAY_SIZE(lucid_vco),348	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],349	.flags = SUPPORTS_FSM_LEGACY_MODE,350	.clkr = {351		.enable_reg = 0x79000,352		.enable_mask = BIT(8),353		.hw.init = &(struct clk_init_data){354			.name = "gpll8",355			.parent_data = &(const struct clk_parent_data){356				.index = DT_BI_TCXO,357			},358			.num_parents = 1,359			.ops = &clk_alpha_pll_lucid_ops,360		},361	},362};363 364static const struct clk_div_table post_div_table_gpll8_out_even[] = {365	{ 0x1, 2 },366	{ }367};368 369static struct clk_alpha_pll_postdiv gpll8_out_even = {370	.offset = 0x8000,371	.post_div_shift = 8,372	.post_div_table = post_div_table_gpll8_out_even,373	.num_post_div = ARRAY_SIZE(post_div_table_gpll8_out_even),374	.width = 4,375	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],376	.clkr.hw.init = &(struct clk_init_data){377		.name = "gpll8_out_even",378		.parent_hws = (const struct clk_hw*[]){379			&gpll8.clkr.hw,380		},381		.num_parents = 1,382		.flags = CLK_SET_RATE_PARENT,383		.ops = &clk_alpha_pll_postdiv_lucid_ops,384	},385};386 387/* 1440MHz Configuration */388static const struct alpha_pll_config gpll9_config = {389	.l = 0x4b,390	.alpha = 0x0,391	.config_ctl_val = 0x08200800,392	.config_ctl_hi_val = 0x05022011,393	.config_ctl_hi1_val = 0x08000000,394	.user_ctl_val = 0x00000301,395};396 397static struct clk_alpha_pll gpll9 = {398	.offset = 0x9000,399	.vco_table = zonda_vco,400	.num_vco = ARRAY_SIZE(zonda_vco),401	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA],402	.clkr = {403		.enable_reg = 0x79000,404		.enable_mask = BIT(9),405		.hw.init = &(struct clk_init_data){406			.name = "gpll9",407			.parent_data = &(const struct clk_parent_data){408				.index = DT_BI_TCXO,409			},410			.num_parents = 1,411			.ops = &clk_alpha_pll_zonda_ops,412		},413	},414};415 416static const struct clk_div_table post_div_table_gpll9_out_main[] = {417	{ 0x3, 4 },418	{ }419};420 421static struct clk_alpha_pll_postdiv gpll9_out_main = {422	.offset = 0x9000,423	.post_div_shift = 8,424	.post_div_table = post_div_table_gpll9_out_main,425	.num_post_div = ARRAY_SIZE(post_div_table_gpll9_out_main),426	.width = 2,427	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA],428	.clkr.hw.init = &(struct clk_init_data){429		.name = "gpll9_out_main",430		.parent_hws = (const struct clk_hw*[]){431			&gpll9.clkr.hw,432		},433		.num_parents = 1,434		.flags = CLK_SET_RATE_PARENT,435		.ops = &clk_alpha_pll_postdiv_zonda_ops,436	},437};438 439static const struct parent_map gcc_parent_map_0[] = {440	{ P_BI_TCXO, 0 },441	{ P_GPLL0_OUT_MAIN, 1 },442	{ P_GPLL0_OUT_EVEN, 2 },443};444 445static const struct clk_parent_data gcc_parent_data_0[] = {446	{ .index = DT_BI_TCXO },447	{ .hw = &gpll0.clkr.hw },448	{ .hw = &gpll0_out_even.clkr.hw },449};450 451static const struct parent_map gcc_parent_map_1[] = {452	{ P_BI_TCXO, 0 },453	{ P_GPLL0_OUT_MAIN, 1 },454	{ P_GPLL0_OUT_EVEN, 2 },455	{ P_GPLL6_OUT_EVEN, 4 },456};457 458static const struct clk_parent_data gcc_parent_data_1[] = {459	{ .index = DT_BI_TCXO },460	{ .hw = &gpll0.clkr.hw },461	{ .hw = &gpll0_out_even.clkr.hw },462	{ .hw = &gpll6_out_even.clkr.hw },463};464 465static const struct parent_map gcc_parent_map_2[] = {466	{ P_BI_TCXO, 0 },467	{ P_GPLL0_OUT_MAIN, 1 },468	{ P_GPLL0_OUT_EVEN, 2 },469	{ P_GPLL0_OUT_ODD, 4 },470};471 472static const struct clk_parent_data gcc_parent_data_2[] = {473	{ .index = DT_BI_TCXO },474	{ .hw = &gpll0.clkr.hw },475	{ .hw = &gpll0_out_even.clkr.hw },476	{ .hw = &gpll0_out_odd.clkr.hw },477};478 479static const struct clk_parent_data gcc_parent_data_2_ao[] = {480	{ .index = DT_BI_TCXO_AO },481	{ .hw = &gpll0.clkr.hw },482	{ .hw = &gpll0_out_even.clkr.hw },483	{ .hw = &gpll0_out_odd.clkr.hw },484};485 486static const struct parent_map gcc_parent_map_3[] = {487	{ P_BI_TCXO, 0 },488	{ P_GPLL0_OUT_MAIN, 1 },489	{ P_GPLL9_OUT_EARLY, 2 },490	{ P_GPLL10_OUT_EVEN, 3 },491	{ P_GPLL9_OUT_MAIN, 4 },492	{ P_GPLL3_OUT_EVEN, 6 },493};494 495static const struct clk_parent_data gcc_parent_data_3[] = {496	{ .index = DT_BI_TCXO },497	{ .hw = &gpll0.clkr.hw },498	{ .hw = &gpll9.clkr.hw },499	{ .hw = &gpll10.clkr.hw },500	{ .hw = &gpll9_out_main.clkr.hw },501	{ .hw = &gpll3_out_even.clkr.hw },502};503 504static const struct parent_map gcc_parent_map_4[] = {505	{ P_BI_TCXO, 0 },506	{ P_GPLL0_OUT_MAIN, 1 },507	{ P_GPLL0_OUT_EVEN, 2 },508	{ P_GPLL0_OUT_ODD, 4 },509	{ P_GPLL4_OUT_EVEN, 5 },510	{ P_GPLL3_OUT_EVEN, 6 },511};512 513static const struct clk_parent_data gcc_parent_data_4[] = {514	{ .index = DT_BI_TCXO },515	{ .hw = &gpll0.clkr.hw },516	{ .hw = &gpll0_out_even.clkr.hw },517	{ .hw = &gpll0_out_odd.clkr.hw },518	{ .hw = &gpll4.clkr.hw },519	{ .hw = &gpll3_out_even.clkr.hw },520};521 522static const struct parent_map gcc_parent_map_5[] = {523	{ P_BI_TCXO, 0 },524	{ P_GPLL0_OUT_MAIN, 1 },525	{ P_GPLL8_OUT_MAIN, 2 },526	{ P_GPLL10_OUT_EVEN, 3 },527	{ P_GPLL9_OUT_MAIN, 4 },528	{ P_GPLL8_OUT_EVEN, 5 },529	{ P_GPLL3_OUT_EVEN, 6 },530};531 532static const struct clk_parent_data gcc_parent_data_5[] = {533	{ .index = DT_BI_TCXO },534	{ .hw = &gpll0.clkr.hw },535	{ .hw = &gpll8.clkr.hw },536	{ .hw = &gpll10.clkr.hw },537	{ .hw = &gpll9_out_main.clkr.hw },538	{ .hw = &gpll8_out_even.clkr.hw },539	{ .hw = &gpll3_out_even.clkr.hw },540};541 542static const struct parent_map gcc_parent_map_6[] = {543	{ P_BI_TCXO, 0 },544	{ P_GPLL0_OUT_MAIN, 1 },545	{ P_GPLL8_OUT_MAIN, 2 },546	{ P_GPLL5_OUT_EVEN, 3 },547	{ P_GPLL9_OUT_MAIN, 4 },548	{ P_GPLL8_OUT_EVEN, 5 },549	{ P_GPLL3_OUT_MAIN, 6 },550};551 552static const struct clk_parent_data gcc_parent_data_6[] = {553	{ .index = DT_BI_TCXO },554	{ .hw = &gpll0.clkr.hw },555	{ .hw = &gpll8.clkr.hw },556	{ .hw = &gpll5.clkr.hw },557	{ .hw = &gpll9_out_main.clkr.hw },558	{ .hw = &gpll8_out_even.clkr.hw },559	{ .hw = &gpll3.clkr.hw },560};561 562static const struct parent_map gcc_parent_map_7[] = {563	{ P_BI_TCXO, 0 },564	{ P_GPLL0_OUT_MAIN, 1 },565	{ P_GPLL0_OUT_EVEN, 2 },566	{ P_GPLL0_OUT_ODD, 4 },567	{ P_SLEEP_CLK, 5 },568};569 570static const struct clk_parent_data gcc_parent_data_7[] = {571	{ .index = DT_BI_TCXO },572	{ .hw = &gpll0.clkr.hw },573	{ .hw = &gpll0_out_even.clkr.hw },574	{ .hw = &gpll0_out_odd.clkr.hw },575	{ .index = DT_SLEEP_CLK },576};577 578static const struct parent_map gcc_parent_map_8[] = {579	{ P_BI_TCXO, 0 },580	{ P_GPLL0_OUT_MAIN, 1 },581	{ P_GPLL0_OUT_EVEN, 2 },582	{ P_GPLL10_OUT_EVEN, 3 },583	{ P_GPLL4_OUT_EVEN, 5 },584	{ P_GPLL3_OUT_MAIN, 6 },585};586 587static const struct clk_parent_data gcc_parent_data_8[] = {588	{ .index = DT_BI_TCXO },589	{ .hw = &gpll0.clkr.hw },590	{ .hw = &gpll0_out_even.clkr.hw },591	{ .hw = &gpll10.clkr.hw },592	{ .hw = &gpll4.clkr.hw },593	{ .hw = &gpll3.clkr.hw },594};595 596static const struct parent_map gcc_parent_map_9[] = {597	{ P_BI_TCXO, 0 },598	{ P_GPLL0_OUT_MAIN, 1 },599	{ P_GPLL0_OUT_EVEN, 2 },600	{ P_GPLL10_OUT_EVEN, 3 },601	{ P_GPLL9_OUT_MAIN, 4 },602	{ P_GPLL8_OUT_EVEN, 5 },603	{ P_GPLL3_OUT_MAIN, 6 },604};605 606static const struct clk_parent_data gcc_parent_data_9[] = {607	{ .index = DT_BI_TCXO },608	{ .hw = &gpll0.clkr.hw },609	{ .hw = &gpll0_out_even.clkr.hw },610	{ .hw = &gpll10.clkr.hw },611	{ .hw = &gpll9_out_main.clkr.hw },612	{ .hw = &gpll8_out_even.clkr.hw },613	{ .hw = &gpll3.clkr.hw },614};615 616static const struct parent_map gcc_parent_map_10[] = {617	{ P_BI_TCXO, 0 },618	{ P_GPLL0_OUT_MAIN, 1 },619	{ P_GPLL8_OUT_MAIN, 2 },620	{ P_GPLL10_OUT_EVEN, 3 },621	{ P_GPLL9_OUT_MAIN, 4 },622	{ P_GPLL8_OUT_EVEN, 5 },623	{ P_GPLL3_OUT_MAIN, 6 },624};625 626static const struct clk_parent_data gcc_parent_data_10[] = {627	{ .index = DT_BI_TCXO },628	{ .hw = &gpll0.clkr.hw },629	{ .hw = &gpll8.clkr.hw },630	{ .hw = &gpll10.clkr.hw },631	{ .hw = &gpll9_out_main.clkr.hw },632	{ .hw = &gpll8_out_even.clkr.hw },633	{ .hw = &gpll3.clkr.hw },634};635 636static const struct parent_map gcc_parent_map_11[] = {637	{ P_BI_TCXO, 0 },638	{ P_GPLL0_OUT_MAIN, 1 },639	{ P_GPLL8_OUT_MAIN, 2 },640	{ P_GPLL10_OUT_EVEN, 3 },641	{ P_GPLL6_OUT_MAIN, 4 },642	{ P_GPLL3_OUT_EVEN, 6 },643};644 645static const struct clk_parent_data gcc_parent_data_11[] = {646	{ .index = DT_BI_TCXO },647	{ .hw = &gpll0.clkr.hw },648	{ .hw = &gpll8.clkr.hw },649	{ .hw = &gpll10.clkr.hw },650	{ .hw = &gpll6.clkr.hw },651	{ .hw = &gpll3_out_even.clkr.hw },652};653 654static const struct parent_map gcc_parent_map_12[] = {655	{ P_BI_TCXO, 0 },656	{ P_GPLL0_OUT_MAIN, 1 },657	{ P_GPLL0_OUT_EVEN, 2 },658	{ P_GPLL7_OUT_EVEN, 3 },659	{ P_GPLL4_OUT_EVEN, 5 },660};661 662static const struct clk_parent_data gcc_parent_data_12[] = {663	{ .index = DT_BI_TCXO },664	{ .hw = &gpll0.clkr.hw },665	{ .hw = &gpll0_out_even.clkr.hw },666	{ .hw = &gpll7.clkr.hw },667	{ .hw = &gpll4.clkr.hw },668};669 670static const struct parent_map gcc_parent_map_13[] = {671	{ P_BI_TCXO, 0 },672	{ P_SLEEP_CLK, 5 },673};674 675static const struct clk_parent_data gcc_parent_data_13[] = {676	{ .index = DT_BI_TCXO },677	{ .index = DT_SLEEP_CLK },678};679 680static const struct parent_map gcc_parent_map_14[] = {681	{ P_BI_TCXO, 0 },682	{ P_GPLL11_OUT_ODD, 2 },683	{ P_GPLL11_OUT_EVEN, 3 },684};685 686static const struct clk_parent_data gcc_parent_data_14[] = {687	{ .index = DT_BI_TCXO },688	{ .hw = &gpll11.clkr.hw },689	{ .hw = &gpll11.clkr.hw },690};691 692static const struct freq_tbl ftbl_gcc_camss_axi_clk_src[] = {693	F(19200000, P_BI_TCXO, 1, 0, 0),694	F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),695	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),696	F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0),697	{ }698};699 700static struct clk_rcg2 gcc_camss_axi_clk_src = {701	.cmd_rcgr = 0x5802c,702	.mnd_width = 0,703	.hid_width = 5,704	.parent_map = gcc_parent_map_8,705	.freq_tbl = ftbl_gcc_camss_axi_clk_src,706	.clkr.hw.init = &(struct clk_init_data){707		.name = "gcc_camss_axi_clk_src",708		.parent_data = gcc_parent_data_8,709		.num_parents = ARRAY_SIZE(gcc_parent_data_8),710		.ops = &clk_rcg2_shared_ops,711	},712};713 714static const struct freq_tbl ftbl_gcc_camss_cci_0_clk_src[] = {715	F(19200000, P_BI_TCXO, 1, 0, 0),716	F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),717	{ }718};719 720static struct clk_rcg2 gcc_camss_cci_0_clk_src = {721	.cmd_rcgr = 0x56000,722	.mnd_width = 0,723	.hid_width = 5,724	.parent_map = gcc_parent_map_9,725	.freq_tbl = ftbl_gcc_camss_cci_0_clk_src,726	.clkr.hw.init = &(struct clk_init_data){727		.name = "gcc_camss_cci_0_clk_src",728		.parent_data = gcc_parent_data_9,729		.num_parents = ARRAY_SIZE(gcc_parent_data_9),730		.ops = &clk_rcg2_shared_ops,731	},732};733 734static struct clk_rcg2 gcc_camss_cci_1_clk_src = {735	.cmd_rcgr = 0x5c000,736	.mnd_width = 0,737	.hid_width = 5,738	.parent_map = gcc_parent_map_9,739	.freq_tbl = ftbl_gcc_camss_cci_0_clk_src,740	.clkr.hw.init = &(struct clk_init_data){741		.name = "gcc_camss_cci_1_clk_src",742		.parent_data = gcc_parent_data_9,743		.num_parents = ARRAY_SIZE(gcc_parent_data_9),744		.ops = &clk_rcg2_shared_ops,745	},746};747 748static const struct freq_tbl ftbl_gcc_camss_csi0phytimer_clk_src[] = {749	F(19200000, P_BI_TCXO, 1, 0, 0),750	F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),751	F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0),752	{ }753};754 755static struct clk_rcg2 gcc_camss_csi0phytimer_clk_src = {756	.cmd_rcgr = 0x59000,757	.mnd_width = 0,758	.hid_width = 5,759	.parent_map = gcc_parent_map_4,760	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,761	.clkr.hw.init = &(struct clk_init_data){762		.name = "gcc_camss_csi0phytimer_clk_src",763		.parent_data = gcc_parent_data_4,764		.num_parents = ARRAY_SIZE(gcc_parent_data_4),765		.ops = &clk_rcg2_shared_ops,766	},767};768 769static struct clk_rcg2 gcc_camss_csi1phytimer_clk_src = {770	.cmd_rcgr = 0x5901c,771	.mnd_width = 0,772	.hid_width = 5,773	.parent_map = gcc_parent_map_4,774	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,775	.clkr.hw.init = &(struct clk_init_data){776		.name = "gcc_camss_csi1phytimer_clk_src",777		.parent_data = gcc_parent_data_4,778		.num_parents = ARRAY_SIZE(gcc_parent_data_4),779		.ops = &clk_rcg2_shared_ops,780	},781};782 783static struct clk_rcg2 gcc_camss_csi2phytimer_clk_src = {784	.cmd_rcgr = 0x59038,785	.mnd_width = 0,786	.hid_width = 5,787	.parent_map = gcc_parent_map_4,788	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,789	.clkr.hw.init = &(struct clk_init_data){790		.name = "gcc_camss_csi2phytimer_clk_src",791		.parent_data = gcc_parent_data_4,792		.num_parents = ARRAY_SIZE(gcc_parent_data_4),793		.ops = &clk_rcg2_shared_ops,794	},795};796 797static struct clk_rcg2 gcc_camss_csi3phytimer_clk_src = {798	.cmd_rcgr = 0x59054,799	.mnd_width = 0,800	.hid_width = 5,801	.parent_map = gcc_parent_map_4,802	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,803	.clkr.hw.init = &(struct clk_init_data){804		.name = "gcc_camss_csi3phytimer_clk_src",805		.parent_data = gcc_parent_data_4,806		.num_parents = ARRAY_SIZE(gcc_parent_data_4),807		.ops = &clk_rcg2_shared_ops,808	},809};810 811static const struct freq_tbl ftbl_gcc_camss_mclk0_clk_src[] = {812	F(19200000, P_BI_TCXO, 1, 0, 0),813	F(24000000, P_GPLL9_OUT_MAIN, 1, 1, 15),814	F(65454545, P_GPLL9_OUT_EARLY, 11, 1, 2),815	{ }816};817 818static struct clk_rcg2 gcc_camss_mclk0_clk_src = {819	.cmd_rcgr = 0x51000,820	.mnd_width = 8,821	.hid_width = 5,822	.parent_map = gcc_parent_map_3,823	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,824	.clkr.hw.init = &(struct clk_init_data){825		.name = "gcc_camss_mclk0_clk_src",826		.parent_data = gcc_parent_data_3,827		.num_parents = ARRAY_SIZE(gcc_parent_data_3),828		.ops = &clk_rcg2_shared_ops,829	},830};831 832static struct clk_rcg2 gcc_camss_mclk1_clk_src = {833	.cmd_rcgr = 0x5101c,834	.mnd_width = 8,835	.hid_width = 5,836	.parent_map = gcc_parent_map_3,837	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,838	.clkr.hw.init = &(struct clk_init_data){839		.name = "gcc_camss_mclk1_clk_src",840		.parent_data = gcc_parent_data_3,841		.num_parents = ARRAY_SIZE(gcc_parent_data_3),842		.ops = &clk_rcg2_shared_ops,843	},844};845 846static struct clk_rcg2 gcc_camss_mclk2_clk_src = {847	.cmd_rcgr = 0x51038,848	.mnd_width = 8,849	.hid_width = 5,850	.parent_map = gcc_parent_map_3,851	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,852	.clkr.hw.init = &(struct clk_init_data){853		.name = "gcc_camss_mclk2_clk_src",854		.parent_data = gcc_parent_data_3,855		.num_parents = ARRAY_SIZE(gcc_parent_data_3),856		.ops = &clk_rcg2_shared_ops,857	},858};859 860static struct clk_rcg2 gcc_camss_mclk3_clk_src = {861	.cmd_rcgr = 0x51054,862	.mnd_width = 8,863	.hid_width = 5,864	.parent_map = gcc_parent_map_3,865	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,866	.clkr.hw.init = &(struct clk_init_data){867		.name = "gcc_camss_mclk3_clk_src",868		.parent_data = gcc_parent_data_3,869		.num_parents = ARRAY_SIZE(gcc_parent_data_3),870		.ops = &clk_rcg2_shared_ops,871	},872};873 874static struct clk_rcg2 gcc_camss_mclk4_clk_src = {875	.cmd_rcgr = 0x51070,876	.mnd_width = 8,877	.hid_width = 5,878	.parent_map = gcc_parent_map_3,879	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,880	.clkr.hw.init = &(struct clk_init_data){881		.name = "gcc_camss_mclk4_clk_src",882		.parent_data = gcc_parent_data_3,883		.num_parents = ARRAY_SIZE(gcc_parent_data_3),884		.ops = &clk_rcg2_shared_ops,885	},886};887 888static const struct freq_tbl ftbl_gcc_camss_ope_ahb_clk_src[] = {889	F(19200000, P_BI_TCXO, 1, 0, 0),890	F(171428571, P_GPLL0_OUT_MAIN, 3.5, 0, 0),891	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),892	{ }893};894 895static struct clk_rcg2 gcc_camss_ope_ahb_clk_src = {896	.cmd_rcgr = 0x55024,897	.mnd_width = 0,898	.hid_width = 5,899	.parent_map = gcc_parent_map_10,900	.freq_tbl = ftbl_gcc_camss_ope_ahb_clk_src,901	.clkr.hw.init = &(struct clk_init_data){902		.name = "gcc_camss_ope_ahb_clk_src",903		.parent_data = gcc_parent_data_10,904		.num_parents = ARRAY_SIZE(gcc_parent_data_10),905		.ops = &clk_rcg2_shared_ops,906	},907};908 909static const struct freq_tbl ftbl_gcc_camss_ope_clk_src[] = {910	F(19200000, P_BI_TCXO, 1, 0, 0),911	F(200000000, P_GPLL8_OUT_EVEN, 1, 0, 0),912	F(266600000, P_GPLL8_OUT_EVEN, 1, 0, 0),913	F(480000000, P_GPLL8_OUT_EVEN, 1, 0, 0),914	F(580000000, P_GPLL8_OUT_EVEN, 1, 0, 0),915	{ }916};917 918static struct clk_rcg2 gcc_camss_ope_clk_src = {919	.cmd_rcgr = 0x55004,920	.mnd_width = 0,921	.hid_width = 5,922	.parent_map = gcc_parent_map_10,923	.freq_tbl = ftbl_gcc_camss_ope_clk_src,924	.clkr.hw.init = &(struct clk_init_data){925		.name = "gcc_camss_ope_clk_src",926		.parent_data = gcc_parent_data_10,927		.num_parents = ARRAY_SIZE(gcc_parent_data_10),928		.flags = CLK_SET_RATE_PARENT,929		.ops = &clk_rcg2_shared_ops,930	},931};932 933static const struct freq_tbl ftbl_gcc_camss_tfe_0_clk_src[] = {934	F(19200000, P_BI_TCXO, 1, 0, 0),935	F(120000000, P_GPLL0_OUT_MAIN, 5, 0, 0),936	F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),937	F(144000000, P_GPLL9_OUT_MAIN, 2.5, 0, 0),938	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),939	F(171428571, P_GPLL0_OUT_MAIN, 3.5, 0, 0),940	F(180000000, P_GPLL9_OUT_MAIN, 2, 0, 0),941	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),942	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),943	F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),944	F(329142857, P_GPLL10_OUT_EVEN, 3.5, 0, 0),945	F(384000000, P_GPLL10_OUT_EVEN, 3, 0, 0),946	F(460800000, P_GPLL10_OUT_EVEN, 2.5, 0, 0),947	F(576000000, P_GPLL10_OUT_EVEN, 2, 0, 0),948	{ }949};950 951static struct clk_rcg2 gcc_camss_tfe_0_clk_src = {952	.cmd_rcgr = 0x52004,953	.mnd_width = 8,954	.hid_width = 5,955	.parent_map = gcc_parent_map_5,956	.freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,957	.clkr.hw.init = &(struct clk_init_data){958		.name = "gcc_camss_tfe_0_clk_src",959		.parent_data = gcc_parent_data_5,960		.num_parents = ARRAY_SIZE(gcc_parent_data_5),961		.ops = &clk_rcg2_shared_ops,962	},963};964 965static const struct freq_tbl ftbl_gcc_camss_tfe_0_csid_clk_src[] = {966	F(19200000, P_BI_TCXO, 1, 0, 0),967	F(120000000, P_GPLL0_OUT_MAIN, 5, 0, 0),968	F(266571429, P_GPLL5_OUT_EVEN, 3.5, 0, 0),969	F(426400000, P_GPLL3_OUT_MAIN, 2.5, 0, 0),970	F(466500000, P_GPLL5_OUT_EVEN, 2, 0, 0),971	{ }972};973 974static struct clk_rcg2 gcc_camss_tfe_0_csid_clk_src = {975	.cmd_rcgr = 0x52094,976	.mnd_width = 0,977	.hid_width = 5,978	.parent_map = gcc_parent_map_6,979	.freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,980	.clkr.hw.init = &(struct clk_init_data){981		.name = "gcc_camss_tfe_0_csid_clk_src",982		.parent_data = gcc_parent_data_6,983		.num_parents = ARRAY_SIZE(gcc_parent_data_6),984		.ops = &clk_rcg2_shared_ops,985	},986};987 988static struct clk_rcg2 gcc_camss_tfe_1_clk_src = {989	.cmd_rcgr = 0x52024,990	.mnd_width = 8,991	.hid_width = 5,992	.parent_map = gcc_parent_map_5,993	.freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,994	.clkr.hw.init = &(struct clk_init_data){995		.name = "gcc_camss_tfe_1_clk_src",996		.parent_data = gcc_parent_data_5,997		.num_parents = ARRAY_SIZE(gcc_parent_data_5),998		.ops = &clk_rcg2_shared_ops,999	},1000};1001 1002static struct clk_rcg2 gcc_camss_tfe_1_csid_clk_src = {1003	.cmd_rcgr = 0x520b4,1004	.mnd_width = 0,1005	.hid_width = 5,1006	.parent_map = gcc_parent_map_6,1007	.freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,1008	.clkr.hw.init = &(struct clk_init_data){1009		.name = "gcc_camss_tfe_1_csid_clk_src",1010		.parent_data = gcc_parent_data_6,1011		.num_parents = ARRAY_SIZE(gcc_parent_data_6),1012		.ops = &clk_rcg2_shared_ops,1013	},1014};1015 1016static struct clk_rcg2 gcc_camss_tfe_2_clk_src = {1017	.cmd_rcgr = 0x52044,1018	.mnd_width = 8,1019	.hid_width = 5,1020	.parent_map = gcc_parent_map_5,1021	.freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,1022	.clkr.hw.init = &(struct clk_init_data){1023		.name = "gcc_camss_tfe_2_clk_src",1024		.parent_data = gcc_parent_data_5,1025		.num_parents = ARRAY_SIZE(gcc_parent_data_5),1026		.ops = &clk_rcg2_shared_ops,1027	},1028};1029 1030static struct clk_rcg2 gcc_camss_tfe_2_csid_clk_src = {1031	.cmd_rcgr = 0x520d4,1032	.mnd_width = 0,1033	.hid_width = 5,1034	.parent_map = gcc_parent_map_6,1035	.freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,1036	.clkr.hw.init = &(struct clk_init_data){1037		.name = "gcc_camss_tfe_2_csid_clk_src",1038		.parent_data = gcc_parent_data_6,1039		.num_parents = ARRAY_SIZE(gcc_parent_data_6),1040		.ops = &clk_rcg2_shared_ops,1041	},1042};1043 1044static const struct freq_tbl ftbl_gcc_camss_tfe_cphy_rx_clk_src[] = {1045	F(19200000, P_BI_TCXO, 1, 0, 0),1046	F(256000000, P_GPLL6_OUT_MAIN, 3, 0, 0),1047	F(384000000, P_GPLL6_OUT_MAIN, 2, 0, 0),1048	{ }1049};1050 1051static struct clk_rcg2 gcc_camss_tfe_cphy_rx_clk_src = {1052	.cmd_rcgr = 0x52064,1053	.mnd_width = 0,1054	.hid_width = 5,1055	.parent_map = gcc_parent_map_11,1056	.freq_tbl = ftbl_gcc_camss_tfe_cphy_rx_clk_src,1057	.clkr.hw.init = &(struct clk_init_data){1058		.name = "gcc_camss_tfe_cphy_rx_clk_src",1059		.parent_data = gcc_parent_data_11,1060		.num_parents = ARRAY_SIZE(gcc_parent_data_11),1061		.ops = &clk_rcg2_shared_ops,1062	},1063};1064 1065static const struct freq_tbl ftbl_gcc_camss_top_ahb_clk_src[] = {1066	F(19200000, P_BI_TCXO, 1, 0, 0),1067	F(40000000, P_GPLL0_OUT_EVEN, 7.5, 0, 0),1068	F(80000000, P_GPLL0_OUT_MAIN, 7.5, 0, 0),1069	{ }1070};1071 1072static struct clk_rcg2 gcc_camss_top_ahb_clk_src = {1073	.cmd_rcgr = 0x58010,1074	.mnd_width = 0,1075	.hid_width = 5,1076	.parent_map = gcc_parent_map_8,1077	.freq_tbl = ftbl_gcc_camss_top_ahb_clk_src,1078	.clkr.hw.init = &(struct clk_init_data){1079		.name = "gcc_camss_top_ahb_clk_src",1080		.parent_data = gcc_parent_data_8,1081		.num_parents = ARRAY_SIZE(gcc_parent_data_8),1082		.ops = &clk_rcg2_shared_ops,1083	},1084};1085 1086static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {1087	F(19200000, P_BI_TCXO, 1, 0, 0),1088	F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),1089	F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),1090	{ }1091};1092 1093static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {1094	.cmd_rcgr = 0x2b13c,1095	.mnd_width = 0,1096	.hid_width = 5,1097	.parent_map = gcc_parent_map_2,1098	.freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,1099	.clkr.hw.init = &(struct clk_init_data){1100		.name = "gcc_cpuss_ahb_clk_src",1101		.parent_data = gcc_parent_data_2_ao,1102		.num_parents = ARRAY_SIZE(gcc_parent_data_2_ao),1103		.ops = &clk_rcg2_shared_ops,1104	},1105};1106 1107static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {1108	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),1109	F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),1110	F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),1111	F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0),1112	{ }1113};1114 1115static struct clk_rcg2 gcc_gp1_clk_src = {1116	.cmd_rcgr = 0x4d004,1117	.mnd_width = 16,1118	.hid_width = 5,1119	.parent_map = gcc_parent_map_7,1120	.freq_tbl = ftbl_gcc_gp1_clk_src,1121	.clkr.hw.init = &(struct clk_init_data){1122		.name = "gcc_gp1_clk_src",1123		.parent_data = gcc_parent_data_7,1124		.num_parents = ARRAY_SIZE(gcc_parent_data_7),1125		.ops = &clk_rcg2_shared_ops,1126	},1127};1128 1129static struct clk_rcg2 gcc_gp2_clk_src = {1130	.cmd_rcgr = 0x4e004,1131	.mnd_width = 16,1132	.hid_width = 5,1133	.parent_map = gcc_parent_map_7,1134	.freq_tbl = ftbl_gcc_gp1_clk_src,1135	.clkr.hw.init = &(struct clk_init_data){1136		.name = "gcc_gp2_clk_src",1137		.parent_data = gcc_parent_data_7,1138		.num_parents = ARRAY_SIZE(gcc_parent_data_7),1139		.ops = &clk_rcg2_shared_ops,1140	},1141};1142 1143static struct clk_rcg2 gcc_gp3_clk_src = {1144	.cmd_rcgr = 0x4f004,1145	.mnd_width = 16,1146	.hid_width = 5,1147	.parent_map = gcc_parent_map_7,1148	.freq_tbl = ftbl_gcc_gp1_clk_src,1149	.clkr.hw.init = &(struct clk_init_data){1150		.name = "gcc_gp3_clk_src",1151		.parent_data = gcc_parent_data_7,1152		.num_parents = ARRAY_SIZE(gcc_parent_data_7),1153		.ops = &clk_rcg2_shared_ops,1154	},1155};1156 1157static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {1158	F(19200000, P_BI_TCXO, 1, 0, 0),1159	F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0),1160	{ }1161};1162 1163static struct clk_rcg2 gcc_pdm2_clk_src = {1164	.cmd_rcgr = 0x20010,1165	.mnd_width = 0,1166	.hid_width = 5,1167	.parent_map = gcc_parent_map_0,1168	.freq_tbl = ftbl_gcc_pdm2_clk_src,1169	.clkr.hw.init = &(struct clk_init_data){1170		.name = "gcc_pdm2_clk_src",1171		.parent_data = gcc_parent_data_0,1172		.num_parents = ARRAY_SIZE(gcc_parent_data_0),1173		.ops = &clk_rcg2_shared_ops,1174	},1175};1176 1177static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {1178	F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),1179	F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),1180	F(19200000, P_BI_TCXO, 1, 0, 0),1181	F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),1182	F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),1183	F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),1184	F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),1185	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),1186	F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),1187	F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),1188	F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),1189	F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),1190	F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),1191	F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),1192	F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),1193	F(128000000, P_GPLL6_OUT_EVEN, 3, 0, 0),1194	{ }1195};1196 1197static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {1198	.name = "gcc_qupv3_wrap0_s0_clk_src",1199	.parent_data = gcc_parent_data_1,1200	.num_parents = ARRAY_SIZE(gcc_parent_data_1),1201	.ops = &clk_rcg2_shared_ops,1202};1203 1204static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {1205	.cmd_rcgr = 0x1f148,1206	.mnd_width = 16,1207	.hid_width = 5,1208	.parent_map = gcc_parent_map_1,1209	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,1210	.clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,1211};1212 1213static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {1214	.name = "gcc_qupv3_wrap0_s1_clk_src",1215	.parent_data = gcc_parent_data_1,1216	.num_parents = ARRAY_SIZE(gcc_parent_data_1),1217	.ops = &clk_rcg2_shared_ops,1218};1219 1220static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {1221	.cmd_rcgr = 0x1f278,1222	.mnd_width = 16,1223	.hid_width = 5,1224	.parent_map = gcc_parent_map_1,1225	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,1226	.clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,1227};1228 1229static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {1230	.name = "gcc_qupv3_wrap0_s2_clk_src",1231	.parent_data = gcc_parent_data_1,1232	.num_parents = ARRAY_SIZE(gcc_parent_data_1),1233	.ops = &clk_rcg2_shared_ops,1234};1235 1236static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {1237	.cmd_rcgr = 0x1f3a8,1238	.mnd_width = 16,1239	.hid_width = 5,1240	.parent_map = gcc_parent_map_1,1241	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,1242	.clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,1243};1244 1245static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {1246	.name = "gcc_qupv3_wrap0_s3_clk_src",1247	.parent_data = gcc_parent_data_1,1248	.num_parents = ARRAY_SIZE(gcc_parent_data_1),1249	.ops = &clk_rcg2_shared_ops,1250};1251 1252static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {1253	.cmd_rcgr = 0x1f4d8,1254	.mnd_width = 16,1255	.hid_width = 5,1256	.parent_map = gcc_parent_map_1,1257	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,1258	.clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,1259};1260 1261static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {1262	.name = "gcc_qupv3_wrap0_s4_clk_src",1263	.parent_data = gcc_parent_data_1,1264	.num_parents = ARRAY_SIZE(gcc_parent_data_1),1265	.ops = &clk_rcg2_shared_ops,1266};1267 1268static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {1269	.cmd_rcgr = 0x1f608,1270	.mnd_width = 16,1271	.hid_width = 5,1272	.parent_map = gcc_parent_map_1,1273	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,1274	.clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,1275};1276 1277static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {1278	.name = "gcc_qupv3_wrap0_s5_clk_src",1279	.parent_data = gcc_parent_data_1,1280	.num_parents = ARRAY_SIZE(gcc_parent_data_1),1281	.ops = &clk_rcg2_shared_ops,1282};1283 1284static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {1285	.cmd_rcgr = 0x1f738,1286	.mnd_width = 16,1287	.hid_width = 5,1288	.parent_map = gcc_parent_map_1,1289	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,1290	.clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,1291};1292 1293static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {1294	.name = "gcc_qupv3_wrap1_s0_clk_src",1295	.parent_data = gcc_parent_data_1,1296	.num_parents = ARRAY_SIZE(gcc_parent_data_1),1297	.ops = &clk_rcg2_shared_ops,1298};1299 1300static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {1301	.cmd_rcgr = 0x5301c,1302	.mnd_width = 16,1303	.hid_width = 5,1304	.parent_map = gcc_parent_map_1,1305	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,1306	.clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,1307};1308 1309static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {1310	.name = "gcc_qupv3_wrap1_s1_clk_src",1311	.parent_data = gcc_parent_data_1,1312	.num_parents = ARRAY_SIZE(gcc_parent_data_1),1313	.ops = &clk_rcg2_shared_ops,1314};1315 1316static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {1317	.cmd_rcgr = 0x5314c,1318	.mnd_width = 16,1319	.hid_width = 5,1320	.parent_map = gcc_parent_map_1,1321	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,1322	.clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,1323};1324 1325static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {1326	.name = "gcc_qupv3_wrap1_s2_clk_src",1327	.parent_data = gcc_parent_data_1,1328	.num_parents = ARRAY_SIZE(gcc_parent_data_1),1329	.ops = &clk_rcg2_shared_ops,1330};1331 1332static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {1333	.cmd_rcgr = 0x5327c,1334	.mnd_width = 16,1335	.hid_width = 5,1336	.parent_map = gcc_parent_map_1,1337	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,1338	.clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,1339};1340 1341static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {1342	.name = "gcc_qupv3_wrap1_s3_clk_src",1343	.parent_data = gcc_parent_data_1,1344	.num_parents = ARRAY_SIZE(gcc_parent_data_1),1345	.ops = &clk_rcg2_shared_ops,1346};1347 1348static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {1349	.cmd_rcgr = 0x533ac,1350	.mnd_width = 16,1351	.hid_width = 5,1352	.parent_map = gcc_parent_map_1,1353	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,1354	.clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,1355};1356 1357static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {1358	.name = "gcc_qupv3_wrap1_s4_clk_src",1359	.parent_data = gcc_parent_data_1,1360	.num_parents = ARRAY_SIZE(gcc_parent_data_1),1361	.ops = &clk_rcg2_shared_ops,1362};1363 1364static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {1365	.cmd_rcgr = 0x534dc,1366	.mnd_width = 16,1367	.hid_width = 5,1368	.parent_map = gcc_parent_map_1,1369	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,1370	.clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,1371};1372 1373static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {1374	.name = "gcc_qupv3_wrap1_s5_clk_src",1375	.parent_data = gcc_parent_data_1,1376	.num_parents = ARRAY_SIZE(gcc_parent_data_1),1377	.ops = &clk_rcg2_shared_ops,1378};1379 1380static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {1381	.cmd_rcgr = 0x5360c,1382	.mnd_width = 16,1383	.hid_width = 5,1384	.parent_map = gcc_parent_map_1,1385	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,1386	.clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,1387};1388 1389static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {1390	F(144000, P_BI_TCXO, 16, 3, 25),1391	F(400000, P_BI_TCXO, 12, 1, 4),1392	F(20000000, P_GPLL0_OUT_EVEN, 5, 1, 3),1393	F(25000000, P_GPLL0_OUT_EVEN, 6, 1, 2),1394	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),1395	F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),1396	F(192000000, P_GPLL6_OUT_EVEN, 2, 0, 0),1397	F(384000000, P_GPLL6_OUT_EVEN, 1, 0, 0),1398	{ }1399};1400 1401static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {1402	.cmd_rcgr = 0x38028,1403	.mnd_width = 8,1404	.hid_width = 5,1405	.parent_map = gcc_parent_map_1,1406	.freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,1407	.clkr.hw.init = &(struct clk_init_data){1408		.name = "gcc_sdcc1_apps_clk_src",1409		.parent_data = gcc_parent_data_1,1410		.num_parents = ARRAY_SIZE(gcc_parent_data_1),1411		.ops = &clk_rcg2_shared_ops,1412	},1413};1414 1415static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {1416	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),1417	F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),1418	F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),1419	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),1420	F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0),1421	{ }1422};1423 1424static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {1425	.cmd_rcgr = 0x38010,1426	.mnd_width = 0,1427	.hid_width = 5,1428	.parent_map = gcc_parent_map_0,1429	.freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,1430	.clkr.hw.init = &(struct clk_init_data){1431		.name = "gcc_sdcc1_ice_core_clk_src",1432		.parent_data = gcc_parent_data_0,1433		.num_parents = ARRAY_SIZE(gcc_parent_data_0),1434		.ops = &clk_rcg2_shared_ops,1435	},1436};1437 1438static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {1439	F(400000, P_BI_TCXO, 12, 1, 4),1440	F(19200000, P_BI_TCXO, 1, 0, 0),1441	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),1442	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),1443	F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),1444	F(202000000, P_GPLL7_OUT_EVEN, 4, 0, 0),1445	{ }1446};1447 1448static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {1449	.cmd_rcgr = 0x1e00c,1450	.mnd_width = 8,1451	.hid_width = 5,1452	.parent_map = gcc_parent_map_12,1453	.freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,1454	.clkr.hw.init = &(struct clk_init_data){1455		.name = "gcc_sdcc2_apps_clk_src",1456		.parent_data = gcc_parent_data_12,1457		.num_parents = ARRAY_SIZE(gcc_parent_data_12),1458		.ops = &clk_rcg2_shared_ops,1459	},1460};1461 1462static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {1463	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),1464	F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),1465	F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),1466	F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0),1467	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),1468	{ }1469};1470 1471static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {1472	.cmd_rcgr = 0x45020,1473	.mnd_width = 8,1474	.hid_width = 5,1475	.parent_map = gcc_parent_map_2,1476	.freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,1477	.clkr.hw.init = &(struct clk_init_data){1478		.name = "gcc_ufs_phy_axi_clk_src",1479		.parent_data = gcc_parent_data_2,1480		.num_parents = ARRAY_SIZE(gcc_parent_data_2),1481		.ops = &clk_rcg2_shared_ops,1482	},1483};1484 1485static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {1486	F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),1487	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),1488	F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),1489	F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0),1490	{ }1491};1492 1493static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {1494	.cmd_rcgr = 0x45048,1495	.mnd_width = 0,1496	.hid_width = 5,1497	.parent_map = gcc_parent_map_0,1498	.freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,1499	.clkr.hw.init = &(struct clk_init_data){1500		.name = "gcc_ufs_phy_ice_core_clk_src",1501		.parent_data = gcc_parent_data_0,1502		.num_parents = ARRAY_SIZE(gcc_parent_data_0),1503		.ops = &clk_rcg2_shared_ops,1504	},1505};1506 1507static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {1508	F(9600000, P_BI_TCXO, 2, 0, 0),1509	F(19200000, P_BI_TCXO, 1, 0, 0),1510	{ }1511};1512 1513static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {1514	.cmd_rcgr = 0x4507c,1515	.mnd_width = 0,1516	.hid_width = 5,1517	.parent_map = gcc_parent_map_0,1518	.freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,1519	.clkr.hw.init = &(struct clk_init_data){1520		.name = "gcc_ufs_phy_phy_aux_clk_src",1521		.parent_data = gcc_parent_data_0,1522		.num_parents = ARRAY_SIZE(gcc_parent_data_0),1523		.ops = &clk_rcg2_shared_ops,1524	},1525};1526 1527static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {1528	F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),1529	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),1530	F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),1531	{ }1532};1533 1534static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {1535	.cmd_rcgr = 0x45060,1536	.mnd_width = 0,1537	.hid_width = 5,1538	.parent_map = gcc_parent_map_0,1539	.freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,1540	.clkr.hw.init = &(struct clk_init_data){1541		.name = "gcc_ufs_phy_unipro_core_clk_src",1542		.parent_data = gcc_parent_data_0,1543		.num_parents = ARRAY_SIZE(gcc_parent_data_0),1544		.ops = &clk_rcg2_shared_ops,1545	},1546};1547 1548static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {1549	F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0),1550	F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),1551	F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0),1552	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),1553	{ }1554};1555 1556static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {1557	.cmd_rcgr = 0x1a01c,1558	.mnd_width = 8,1559	.hid_width = 5,1560	.parent_map = gcc_parent_map_2,1561	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,1562	.clkr.hw.init = &(struct clk_init_data){1563		.name = "gcc_usb30_prim_master_clk_src",1564		.parent_data = gcc_parent_data_2,1565		.num_parents = ARRAY_SIZE(gcc_parent_data_2),1566		.ops = &clk_rcg2_shared_ops,1567	},1568};1569 1570static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {1571	F(19200000, P_BI_TCXO, 1, 0, 0),1572	{ }1573};1574 1575static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {1576	.cmd_rcgr = 0x1a034,1577	.mnd_width = 0,1578	.hid_width = 5,1579	.parent_map = gcc_parent_map_0,1580	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,1581	.clkr.hw.init = &(struct clk_init_data){1582		.name = "gcc_usb30_prim_mock_utmi_clk_src",1583		.parent_data = gcc_parent_data_0,1584		.num_parents = ARRAY_SIZE(gcc_parent_data_0),1585		.ops = &clk_rcg2_shared_ops,1586	},1587};1588 1589static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {1590	.cmd_rcgr = 0x1a060,1591	.mnd_width = 0,1592	.hid_width = 5,1593	.parent_map = gcc_parent_map_13,1594	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,1595	.clkr.hw.init = &(struct clk_init_data){1596		.name = "gcc_usb3_prim_phy_aux_clk_src",1597		.parent_data = gcc_parent_data_13,1598		.num_parents = ARRAY_SIZE(gcc_parent_data_13),1599		.ops = &clk_rcg2_shared_ops,1600	},1601};1602 1603static const struct freq_tbl ftbl_gcc_video_venus_clk_src[] = {1604	F(133000000, P_GPLL11_OUT_EVEN, 4, 0, 0),1605	F(240000000, P_GPLL11_OUT_EVEN, 2.5, 0, 0),1606	F(300000000, P_GPLL11_OUT_EVEN, 2, 0, 0),1607	F(384000000, P_GPLL11_OUT_EVEN, 2, 0, 0),1608	{ }1609};1610 1611static struct clk_rcg2 gcc_video_venus_clk_src = {1612	.cmd_rcgr = 0x58060,1613	.mnd_width = 0,1614	.hid_width = 5,1615	.parent_map = gcc_parent_map_14,1616	.freq_tbl = ftbl_gcc_video_venus_clk_src,1617	.clkr.hw.init = &(struct clk_init_data){1618		.name = "gcc_video_venus_clk_src",1619		.parent_data = gcc_parent_data_14,1620		.num_parents = ARRAY_SIZE(gcc_parent_data_14),1621		.flags = CLK_SET_RATE_PARENT,1622		.ops = &clk_rcg2_shared_ops,1623	},1624};1625 1626static struct clk_regmap_div gcc_cpuss_ahb_postdiv_clk_src = {1627	.reg = 0x2b154,1628	.shift = 0,1629	.width = 4,1630	.clkr.hw.init = &(struct clk_init_data) {1631		.name = "gcc_cpuss_ahb_postdiv_clk_src",1632		.parent_hws = (const struct clk_hw*[]){1633			&gcc_cpuss_ahb_clk_src.clkr.hw,1634		},1635		.num_parents = 1,1636		.flags = CLK_SET_RATE_PARENT,1637		.ops = &clk_regmap_div_ro_ops,1638	},1639};1640 1641static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {1642	.reg = 0x1a04c,1643	.shift = 0,1644	.width = 4,1645	.clkr.hw.init = &(struct clk_init_data) {1646		.name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",1647		.parent_hws = (const struct clk_hw*[]){1648			&gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,1649		},1650		.num_parents = 1,1651		.flags = CLK_SET_RATE_PARENT,1652		.ops = &clk_regmap_div_ro_ops,1653	},1654};1655 1656static struct clk_branch gcc_ahb2phy_csi_clk = {1657	.halt_reg = 0x1d004,1658	.halt_check = BRANCH_HALT_VOTED,1659	.hwcg_reg = 0x1d004,1660	.hwcg_bit = 1,1661	.clkr = {1662		.enable_reg = 0x1d004,1663		.enable_mask = BIT(0),1664		.hw.init = &(struct clk_init_data){1665			.name = "gcc_ahb2phy_csi_clk",1666			.ops = &clk_branch2_ops,1667		},1668	},1669};1670 1671static struct clk_branch gcc_ahb2phy_usb_clk = {1672	.halt_reg = 0x1d008,1673	.halt_check = BRANCH_HALT_VOTED,1674	.hwcg_reg = 0x1d008,1675	.hwcg_bit = 1,1676	.clkr = {1677		.enable_reg = 0x1d008,1678		.enable_mask = BIT(0),1679		.hw.init = &(struct clk_init_data){1680			.name = "gcc_ahb2phy_usb_clk",1681			.ops = &clk_branch2_ops,1682		},1683	},1684};1685 1686static struct clk_branch gcc_bimc_gpu_axi_clk = {1687	.halt_reg = 0x71154,1688	.halt_check = BRANCH_HALT_VOTED,1689	.hwcg_reg = 0x71154,1690	.hwcg_bit = 1,1691	.clkr = {1692		.enable_reg = 0x71154,1693		.enable_mask = BIT(0),1694		.hw.init = &(struct clk_init_data){1695			.name = "gcc_bimc_gpu_axi_clk",1696			.ops = &clk_branch2_ops,1697		},1698	},1699};1700 1701static struct clk_branch gcc_boot_rom_ahb_clk = {1702	.halt_reg = 0x23004,1703	.halt_check = BRANCH_HALT_VOTED,1704	.hwcg_reg = 0x23004,1705	.hwcg_bit = 1,1706	.clkr = {1707		.enable_reg = 0x79004,1708		.enable_mask = BIT(10),1709		.hw.init = &(struct clk_init_data){1710			.name = "gcc_boot_rom_ahb_clk",1711			.ops = &clk_branch2_ops,1712		},1713	},1714};1715 1716static struct clk_branch gcc_cam_throttle_nrt_clk = {1717	.halt_reg = 0x17070,1718	.halt_check = BRANCH_HALT_VOTED,1719	.hwcg_reg = 0x17070,1720	.hwcg_bit = 1,1721	.clkr = {1722		.enable_reg = 0x79004,1723		.enable_mask = BIT(27),1724		.hw.init = &(struct clk_init_data){1725			.name = "gcc_cam_throttle_nrt_clk",1726			.ops = &clk_branch2_ops,1727		},1728	},1729};1730 1731static struct clk_branch gcc_cam_throttle_rt_clk = {1732	.halt_reg = 0x1706c,1733	.halt_check = BRANCH_HALT_VOTED,1734	.hwcg_reg = 0x1706c,1735	.hwcg_bit = 1,1736	.clkr = {1737		.enable_reg = 0x79004,1738		.enable_mask = BIT(26),1739		.hw.init = &(struct clk_init_data){1740			.name = "gcc_cam_throttle_rt_clk",1741			.ops = &clk_branch2_ops,1742		},1743	},1744};1745 1746static struct clk_branch gcc_camera_ahb_clk = {1747	.halt_reg = 0x17008,1748	.halt_check = BRANCH_HALT_DELAY,1749	.hwcg_reg = 0x17008,1750	.hwcg_bit = 1,1751	.clkr = {1752		.enable_reg = 0x17008,1753		.enable_mask = BIT(0),1754		.hw.init = &(struct clk_init_data){1755			.name = "gcc_camera_ahb_clk",1756			.flags = CLK_IS_CRITICAL,1757			.ops = &clk_branch2_ops,1758		},1759	},1760};1761 1762static struct clk_branch gcc_camss_axi_clk = {1763	.halt_reg = 0x58044,1764	.halt_check = BRANCH_HALT,1765	.clkr = {1766		.enable_reg = 0x58044,1767		.enable_mask = BIT(0),1768		.hw.init = &(struct clk_init_data){1769			.name = "gcc_camss_axi_clk",1770			.parent_hws = (const struct clk_hw*[]) {1771				&gcc_camss_axi_clk_src.clkr.hw,1772			},1773			.num_parents = 1,1774			.flags = CLK_SET_RATE_PARENT,1775			.ops = &clk_branch2_ops,1776		},1777	},1778};1779 1780static struct clk_branch gcc_camss_cci_0_clk = {1781	.halt_reg = 0x56018,1782	.halt_check = BRANCH_HALT,1783	.clkr = {1784		.enable_reg = 0x56018,1785		.enable_mask = BIT(0),1786		.hw.init = &(struct clk_init_data){1787			.name = "gcc_camss_cci_0_clk",1788			.parent_hws = (const struct clk_hw*[]) {1789				&gcc_camss_cci_0_clk_src.clkr.hw,1790			},1791			.num_parents = 1,1792			.flags = CLK_SET_RATE_PARENT,1793			.ops = &clk_branch2_ops,1794		},1795	},1796};1797 1798static struct clk_branch gcc_camss_cci_1_clk = {1799	.halt_reg = 0x5c018,1800	.halt_check = BRANCH_HALT,1801	.clkr = {1802		.enable_reg = 0x5c018,1803		.enable_mask = BIT(0),1804		.hw.init = &(struct clk_init_data){1805			.name = "gcc_camss_cci_1_clk",1806			.parent_hws = (const struct clk_hw*[]) {1807				&gcc_camss_cci_1_clk_src.clkr.hw,1808			},1809			.num_parents = 1,1810			.flags = CLK_SET_RATE_PARENT,1811			.ops = &clk_branch2_ops,1812		},1813	},1814};1815 1816static struct clk_branch gcc_camss_cphy_0_clk = {1817	.halt_reg = 0x52088,1818	.halt_check = BRANCH_HALT,1819	.clkr = {1820		.enable_reg = 0x52088,1821		.enable_mask = BIT(0),1822		.hw.init = &(struct clk_init_data){1823			.name = "gcc_camss_cphy_0_clk",1824			.parent_hws = (const struct clk_hw*[]) {1825				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,1826			},1827			.num_parents = 1,1828			.flags = CLK_SET_RATE_PARENT,1829			.ops = &clk_branch2_ops,1830		},1831	},1832};1833 1834static struct clk_branch gcc_camss_cphy_1_clk = {1835	.halt_reg = 0x5208c,1836	.halt_check = BRANCH_HALT,1837	.clkr = {1838		.enable_reg = 0x5208c,1839		.enable_mask = BIT(0),1840		.hw.init = &(struct clk_init_data){1841			.name = "gcc_camss_cphy_1_clk",1842			.parent_hws = (const struct clk_hw*[]) {1843				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,1844			},1845			.num_parents = 1,1846			.flags = CLK_SET_RATE_PARENT,1847			.ops = &clk_branch2_ops,1848		},1849	},1850};1851 1852static struct clk_branch gcc_camss_cphy_2_clk = {1853	.halt_reg = 0x52090,1854	.halt_check = BRANCH_HALT,1855	.clkr = {1856		.enable_reg = 0x52090,1857		.enable_mask = BIT(0),1858		.hw.init = &(struct clk_init_data){1859			.name = "gcc_camss_cphy_2_clk",1860			.parent_hws = (const struct clk_hw*[]) {1861				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,1862			},1863			.num_parents = 1,1864			.flags = CLK_SET_RATE_PARENT,1865			.ops = &clk_branch2_ops,1866		},1867	},1868};1869 1870static struct clk_branch gcc_camss_cphy_3_clk = {1871	.halt_reg = 0x520f8,1872	.halt_check = BRANCH_HALT,1873	.clkr = {1874		.enable_reg = 0x520f8,1875		.enable_mask = BIT(0),1876		.hw.init = &(struct clk_init_data){1877			.name = "gcc_camss_cphy_3_clk",1878			.parent_hws = (const struct clk_hw*[]) {1879				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,1880			},1881			.num_parents = 1,1882			.flags = CLK_SET_RATE_PARENT,1883			.ops = &clk_branch2_ops,1884		},1885	},1886};1887 1888static struct clk_branch gcc_camss_csi0phytimer_clk = {1889	.halt_reg = 0x59018,1890	.halt_check = BRANCH_HALT,1891	.clkr = {1892		.enable_reg = 0x59018,1893		.enable_mask = BIT(0),1894		.hw.init = &(struct clk_init_data){1895			.name = "gcc_camss_csi0phytimer_clk",1896			.parent_hws = (const struct clk_hw*[]) {1897				&gcc_camss_csi0phytimer_clk_src.clkr.hw,1898			},1899			.num_parents = 1,1900			.flags = CLK_SET_RATE_PARENT,1901			.ops = &clk_branch2_ops,1902		},1903	},1904};1905 1906static struct clk_branch gcc_camss_csi1phytimer_clk = {1907	.halt_reg = 0x59034,1908	.halt_check = BRANCH_HALT,1909	.clkr = {1910		.enable_reg = 0x59034,1911		.enable_mask = BIT(0),1912		.hw.init = &(struct clk_init_data){1913			.name = "gcc_camss_csi1phytimer_clk",1914			.parent_hws = (const struct clk_hw*[]) {1915				&gcc_camss_csi1phytimer_clk_src.clkr.hw,1916			},1917			.num_parents = 1,1918			.flags = CLK_SET_RATE_PARENT,1919			.ops = &clk_branch2_ops,1920		},1921	},1922};1923 1924static struct clk_branch gcc_camss_csi2phytimer_clk = {1925	.halt_reg = 0x59050,1926	.halt_check = BRANCH_HALT,1927	.clkr = {1928		.enable_reg = 0x59050,1929		.enable_mask = BIT(0),1930		.hw.init = &(struct clk_init_data){1931			.name = "gcc_camss_csi2phytimer_clk",1932			.parent_hws = (const struct clk_hw*[]) {1933				&gcc_camss_csi2phytimer_clk_src.clkr.hw,1934			},1935			.num_parents = 1,1936			.flags = CLK_SET_RATE_PARENT,1937			.ops = &clk_branch2_ops,1938		},1939	},1940};1941 1942static struct clk_branch gcc_camss_csi3phytimer_clk = {1943	.halt_reg = 0x5906c,1944	.halt_check = BRANCH_HALT,1945	.clkr = {1946		.enable_reg = 0x5906c,1947		.enable_mask = BIT(0),1948		.hw.init = &(struct clk_init_data){1949			.name = "gcc_camss_csi3phytimer_clk",1950			.parent_hws = (const struct clk_hw*[]) {1951				&gcc_camss_csi3phytimer_clk_src.clkr.hw,1952			},1953			.num_parents = 1,1954			.flags = CLK_SET_RATE_PARENT,1955			.ops = &clk_branch2_ops,1956		},1957	},1958};1959 1960static struct clk_branch gcc_camss_mclk0_clk = {1961	.halt_reg = 0x51018,1962	.halt_check = BRANCH_HALT,1963	.clkr = {1964		.enable_reg = 0x51018,1965		.enable_mask = BIT(0),1966		.hw.init = &(struct clk_init_data){1967			.name = "gcc_camss_mclk0_clk",1968			.parent_hws = (const struct clk_hw*[]) {1969				&gcc_camss_mclk0_clk_src.clkr.hw,1970			},1971			.num_parents = 1,1972			.flags = CLK_SET_RATE_PARENT,1973			.ops = &clk_branch2_ops,1974		},1975	},1976};1977 1978static struct clk_branch gcc_camss_mclk1_clk = {1979	.halt_reg = 0x51034,1980	.halt_check = BRANCH_HALT,1981	.clkr = {1982		.enable_reg = 0x51034,1983		.enable_mask = BIT(0),1984		.hw.init = &(struct clk_init_data){1985			.name = "gcc_camss_mclk1_clk",1986			.parent_hws = (const struct clk_hw*[]) {1987				&gcc_camss_mclk1_clk_src.clkr.hw,1988			},1989			.num_parents = 1,1990			.flags = CLK_SET_RATE_PARENT,1991			.ops = &clk_branch2_ops,1992		},1993	},1994};1995 1996static struct clk_branch gcc_camss_mclk2_clk = {1997	.halt_reg = 0x51050,1998	.halt_check = BRANCH_HALT,1999	.clkr = {2000		.enable_reg = 0x51050,2001		.enable_mask = BIT(0),2002		.hw.init = &(struct clk_init_data){2003			.name = "gcc_camss_mclk2_clk",2004			.parent_hws = (const struct clk_hw*[]) {2005				&gcc_camss_mclk2_clk_src.clkr.hw,2006			},2007			.num_parents = 1,2008			.flags = CLK_SET_RATE_PARENT,2009			.ops = &clk_branch2_ops,2010		},2011	},2012};2013 2014static struct clk_branch gcc_camss_mclk3_clk = {2015	.halt_reg = 0x5106c,2016	.halt_check = BRANCH_HALT,2017	.clkr = {2018		.enable_reg = 0x5106c,2019		.enable_mask = BIT(0),2020		.hw.init = &(struct clk_init_data){2021			.name = "gcc_camss_mclk3_clk",2022			.parent_hws = (const struct clk_hw*[]) {2023				&gcc_camss_mclk3_clk_src.clkr.hw,2024			},2025			.num_parents = 1,2026			.flags = CLK_SET_RATE_PARENT,2027			.ops = &clk_branch2_ops,2028		},2029	},2030};2031 2032static struct clk_branch gcc_camss_mclk4_clk = {2033	.halt_reg = 0x51088,2034	.halt_check = BRANCH_HALT,2035	.clkr = {2036		.enable_reg = 0x51088,2037		.enable_mask = BIT(0),2038		.hw.init = &(struct clk_init_data){2039			.name = "gcc_camss_mclk4_clk",2040			.parent_hws = (const struct clk_hw*[]) {2041				&gcc_camss_mclk4_clk_src.clkr.hw,2042			},2043			.num_parents = 1,2044			.flags = CLK_SET_RATE_PARENT,2045			.ops = &clk_branch2_ops,2046		},2047	},2048};2049 2050static struct clk_branch gcc_camss_nrt_axi_clk = {2051	.halt_reg = 0x58054,2052	.halt_check = BRANCH_HALT,2053	.clkr = {2054		.enable_reg = 0x58054,2055		.enable_mask = BIT(0),2056		.hw.init = &(struct clk_init_data){2057			.name = "gcc_camss_nrt_axi_clk",2058			.ops = &clk_branch2_ops,2059		},2060	},2061};2062 2063static struct clk_branch gcc_camss_ope_ahb_clk = {2064	.halt_reg = 0x5503c,2065	.halt_check = BRANCH_HALT,2066	.clkr = {2067		.enable_reg = 0x5503c,2068		.enable_mask = BIT(0),2069		.hw.init = &(struct clk_init_data){2070			.name = "gcc_camss_ope_ahb_clk",2071			.parent_hws = (const struct clk_hw*[]) {2072				&gcc_camss_ope_ahb_clk_src.clkr.hw,2073			},2074			.num_parents = 1,2075			.flags = CLK_SET_RATE_PARENT,2076			.ops = &clk_branch2_ops,2077		},2078	},2079};2080 2081static struct clk_branch gcc_camss_ope_clk = {2082	.halt_reg = 0x5501c,2083	.halt_check = BRANCH_HALT,2084	.clkr = {2085		.enable_reg = 0x5501c,2086		.enable_mask = BIT(0),2087		.hw.init = &(struct clk_init_data){2088			.name = "gcc_camss_ope_clk",2089			.parent_hws = (const struct clk_hw*[]) {2090				&gcc_camss_ope_clk_src.clkr.hw,2091			},2092			.num_parents = 1,2093			.flags = CLK_SET_RATE_PARENT,2094			.ops = &clk_branch2_ops,2095		},2096	},2097};2098 2099static struct clk_branch gcc_camss_rt_axi_clk = {2100	.halt_reg = 0x5805c,2101	.halt_check = BRANCH_HALT,2102	.clkr = {2103		.enable_reg = 0x5805c,2104		.enable_mask = BIT(0),2105		.hw.init = &(struct clk_init_data){2106			.name = "gcc_camss_rt_axi_clk",2107			.ops = &clk_branch2_ops,2108		},2109	},2110};2111 2112static struct clk_branch gcc_camss_tfe_0_clk = {2113	.halt_reg = 0x5201c,2114	.halt_check = BRANCH_HALT,2115	.clkr = {2116		.enable_reg = 0x5201c,2117		.enable_mask = BIT(0),2118		.hw.init = &(struct clk_init_data){2119			.name = "gcc_camss_tfe_0_clk",2120			.parent_hws = (const struct clk_hw*[]) {2121				&gcc_camss_tfe_0_clk_src.clkr.hw,2122			},2123			.num_parents = 1,2124			.flags = CLK_SET_RATE_PARENT,2125			.ops = &clk_branch2_ops,2126		},2127	},2128};2129 2130static struct clk_branch gcc_camss_tfe_0_cphy_rx_clk = {2131	.halt_reg = 0x5207c,2132	.halt_check = BRANCH_HALT,2133	.clkr = {2134		.enable_reg = 0x5207c,2135		.enable_mask = BIT(0),2136		.hw.init = &(struct clk_init_data){2137			.name = "gcc_camss_tfe_0_cphy_rx_clk",2138			.parent_hws = (const struct clk_hw*[]) {2139				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,2140			},2141			.num_parents = 1,2142			.flags = CLK_SET_RATE_PARENT,2143			.ops = &clk_branch2_ops,2144		},2145	},2146};2147 2148static struct clk_branch gcc_camss_tfe_0_csid_clk = {2149	.halt_reg = 0x520ac,2150	.halt_check = BRANCH_HALT,2151	.clkr = {2152		.enable_reg = 0x520ac,2153		.enable_mask = BIT(0),2154		.hw.init = &(struct clk_init_data){2155			.name = "gcc_camss_tfe_0_csid_clk",2156			.parent_hws = (const struct clk_hw*[]) {2157				&gcc_camss_tfe_0_csid_clk_src.clkr.hw,2158			},2159			.num_parents = 1,2160			.flags = CLK_SET_RATE_PARENT,2161			.ops = &clk_branch2_ops,2162		},2163	},2164};2165 2166static struct clk_branch gcc_camss_tfe_1_clk = {2167	.halt_reg = 0x5203c,2168	.halt_check = BRANCH_HALT,2169	.clkr = {2170		.enable_reg = 0x5203c,2171		.enable_mask = BIT(0),2172		.hw.init = &(struct clk_init_data){2173			.name = "gcc_camss_tfe_1_clk",2174			.parent_hws = (const struct clk_hw*[]) {2175				&gcc_camss_tfe_1_clk_src.clkr.hw,2176			},2177			.num_parents = 1,2178			.flags = CLK_SET_RATE_PARENT,2179			.ops = &clk_branch2_ops,2180		},2181	},2182};2183 2184static struct clk_branch gcc_camss_tfe_1_cphy_rx_clk = {2185	.halt_reg = 0x52080,2186	.halt_check = BRANCH_HALT,2187	.clkr = {2188		.enable_reg = 0x52080,2189		.enable_mask = BIT(0),2190		.hw.init = &(struct clk_init_data){2191			.name = "gcc_camss_tfe_1_cphy_rx_clk",2192			.parent_hws = (const struct clk_hw*[]) {2193				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,2194			},2195			.num_parents = 1,2196			.flags = CLK_SET_RATE_PARENT,2197			.ops = &clk_branch2_ops,2198		},2199	},2200};2201 2202static struct clk_branch gcc_camss_tfe_1_csid_clk = {2203	.halt_reg = 0x520cc,2204	.halt_check = BRANCH_HALT,2205	.clkr = {2206		.enable_reg = 0x520cc,2207		.enable_mask = BIT(0),2208		.hw.init = &(struct clk_init_data){2209			.name = "gcc_camss_tfe_1_csid_clk",2210			.parent_hws = (const struct clk_hw*[]) {2211				&gcc_camss_tfe_1_csid_clk_src.clkr.hw,2212			},2213			.num_parents = 1,2214			.flags = CLK_SET_RATE_PARENT,2215			.ops = &clk_branch2_ops,2216		},2217	},2218};2219 2220static struct clk_branch gcc_camss_tfe_2_clk = {2221	.halt_reg = 0x5205c,2222	.halt_check = BRANCH_HALT,2223	.clkr = {2224		.enable_reg = 0x5205c,2225		.enable_mask = BIT(0),2226		.hw.init = &(struct clk_init_data){2227			.name = "gcc_camss_tfe_2_clk",2228			.parent_hws = (const struct clk_hw*[]) {2229				&gcc_camss_tfe_2_clk_src.clkr.hw,2230			},2231			.num_parents = 1,2232			.flags = CLK_SET_RATE_PARENT,2233			.ops = &clk_branch2_ops,2234		},2235	},2236};2237 2238static struct clk_branch gcc_camss_tfe_2_cphy_rx_clk = {2239	.halt_reg = 0x52084,2240	.halt_check = BRANCH_HALT,2241	.clkr = {2242		.enable_reg = 0x52084,2243		.enable_mask = BIT(0),2244		.hw.init = &(struct clk_init_data){2245			.name = "gcc_camss_tfe_2_cphy_rx_clk",2246			.parent_hws = (const struct clk_hw*[]) {2247				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,2248			},2249			.num_parents = 1,2250			.flags = CLK_SET_RATE_PARENT,2251			.ops = &clk_branch2_ops,2252		},2253	},2254};2255 2256static struct clk_branch gcc_camss_tfe_2_csid_clk = {2257	.halt_reg = 0x520ec,2258	.halt_check = BRANCH_HALT,2259	.clkr = {2260		.enable_reg = 0x520ec,2261		.enable_mask = BIT(0),2262		.hw.init = &(struct clk_init_data){2263			.name = "gcc_camss_tfe_2_csid_clk",2264			.parent_hws = (const struct clk_hw*[]) {2265				&gcc_camss_tfe_2_csid_clk_src.clkr.hw,2266			},2267			.num_parents = 1,2268			.flags = CLK_SET_RATE_PARENT,2269			.ops = &clk_branch2_ops,2270		},2271	},2272};2273 2274static struct clk_branch gcc_camss_top_ahb_clk = {2275	.halt_reg = 0x58028,2276	.halt_check = BRANCH_HALT,2277	.clkr = {2278		.enable_reg = 0x58028,2279		.enable_mask = BIT(0),2280		.hw.init = &(struct clk_init_data){2281			.name = "gcc_camss_top_ahb_clk",2282			.parent_hws = (const struct clk_hw*[]) {2283				&gcc_camss_top_ahb_clk_src.clkr.hw,2284			},2285			.num_parents = 1,2286			.flags = CLK_SET_RATE_PARENT,2287			.ops = &clk_branch2_ops,2288		},2289	},2290};2291 2292static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {2293	.halt_reg = 0x1a084,2294	.halt_check = BRANCH_HALT_VOTED,2295	.hwcg_reg = 0x1a084,2296	.hwcg_bit = 1,2297	.clkr = {2298		.enable_reg = 0x1a084,2299		.enable_mask = BIT(0),2300		.hw.init = &(struct clk_init_data){2301			.name = "gcc_cfg_noc_usb3_prim_axi_clk",2302			.parent_hws = (const struct clk_hw*[]) {2303				&gcc_usb30_prim_master_clk_src.clkr.hw,2304			},2305			.num_parents = 1,2306			.flags = CLK_SET_RATE_PARENT,2307			.ops = &clk_branch2_ops,2308		},2309	},2310};2311 2312static struct clk_branch gcc_disp_ahb_clk = {2313	.halt_reg = 0x1700c,2314	.halt_check = BRANCH_HALT_VOTED,2315	.hwcg_reg = 0x1700c,2316	.hwcg_bit = 1,2317	.clkr = {2318		.enable_reg = 0x1700c,2319		.enable_mask = BIT(0),2320		.hw.init = &(struct clk_init_data){2321			.name = "gcc_disp_ahb_clk",2322			.flags = CLK_IS_CRITICAL,2323			.ops = &clk_branch2_ops,2324		},2325	},2326};2327 2328static struct clk_regmap_div gcc_disp_gpll0_clk_src = {2329	.reg = 0x17058,2330	.shift = 0,2331	.width = 2,2332	.clkr.hw.init = &(struct clk_init_data) {2333		.name = "gcc_disp_gpll0_clk_src",2334		.parent_hws = (const struct clk_hw*[]){2335			&gpll0.clkr.hw,2336		},2337		.num_parents = 1,2338		.ops = &clk_regmap_div_ops,2339	},2340};2341 2342static struct clk_branch gcc_disp_gpll0_div_clk_src = {2343	.halt_check = BRANCH_HALT_DELAY,2344	.clkr = {2345		.enable_reg = 0x79004,2346		.enable_mask = BIT(20),2347		.hw.init = &(struct clk_init_data){2348			.name = "gcc_disp_gpll0_div_clk_src",2349			.parent_hws = (const struct clk_hw*[]) {2350				&gcc_disp_gpll0_clk_src.clkr.hw,2351			},2352			.num_parents = 1,2353			.flags = CLK_SET_RATE_PARENT,2354			.ops = &clk_branch2_ops,2355		},2356	},2357};2358 2359static struct clk_branch gcc_disp_hf_axi_clk = {2360	.halt_reg = 0x17020,2361	.halt_check = BRANCH_VOTED,2362	.hwcg_reg = 0x17020,2363	.hwcg_bit = 1,2364	.clkr = {2365		.enable_reg = 0x17020,2366		.enable_mask = BIT(0),2367		.hw.init = &(struct clk_init_data){2368			.name = "gcc_disp_hf_axi_clk",2369			.ops = &clk_branch2_ops,2370		},2371	},2372};2373 2374static struct clk_branch gcc_disp_sleep_clk = {2375	.halt_reg = 0x17074,2376	.halt_check = BRANCH_HALT_VOTED,2377	.hwcg_reg = 0x17074,2378	.hwcg_bit = 1,2379	.clkr = {2380		.enable_reg = 0x17074,2381		.enable_mask = BIT(0),2382		.hw.init = &(struct clk_init_data){2383			.name = "gcc_disp_sleep_clk",2384			.ops = &clk_branch2_ops,2385		},2386	},2387};2388 2389static struct clk_branch gcc_disp_throttle_core_clk = {2390	.halt_reg = 0x17064,2391	.halt_check = BRANCH_HALT_VOTED,2392	.hwcg_reg = 0x17064,2393	.hwcg_bit = 1,2394	.clkr = {2395		.enable_reg = 0x7900c,2396		.enable_mask = BIT(5),2397		.hw.init = &(struct clk_init_data){2398			.name = "gcc_disp_throttle_core_clk",2399			.ops = &clk_branch2_ops,2400		},2401	},2402};2403 2404static struct clk_branch gcc_gp1_clk = {2405	.halt_reg = 0x4d000,2406	.halt_check = BRANCH_HALT,2407	.clkr = {2408		.enable_reg = 0x4d000,2409		.enable_mask = BIT(0),2410		.hw.init = &(struct clk_init_data){2411			.name = "gcc_gp1_clk",2412			.parent_hws = (const struct clk_hw*[]) {2413				&gcc_gp1_clk_src.clkr.hw,2414			},2415			.num_parents = 1,2416			.flags = CLK_SET_RATE_PARENT,2417			.ops = &clk_branch2_ops,2418		},2419	},2420};2421 2422static struct clk_branch gcc_gp2_clk = {2423	.halt_reg = 0x4e000,2424	.halt_check = BRANCH_HALT,2425	.clkr = {2426		.enable_reg = 0x4e000,2427		.enable_mask = BIT(0),2428		.hw.init = &(struct clk_init_data){2429			.name = "gcc_gp2_clk",2430			.parent_hws = (const struct clk_hw*[]) {2431				&gcc_gp2_clk_src.clkr.hw,2432			},2433			.num_parents = 1,2434			.flags = CLK_SET_RATE_PARENT,2435			.ops = &clk_branch2_ops,2436		},2437	},2438};2439 2440static struct clk_branch gcc_gp3_clk = {2441	.halt_reg = 0x4f000,2442	.halt_check = BRANCH_HALT,2443	.clkr = {2444		.enable_reg = 0x4f000,2445		.enable_mask = BIT(0),2446		.hw.init = &(struct clk_init_data){2447			.name = "gcc_gp3_clk",2448			.parent_hws = (const struct clk_hw*[]) {2449				&gcc_gp3_clk_src.clkr.hw,2450			},2451			.num_parents = 1,2452			.flags = CLK_SET_RATE_PARENT,2453			.ops = &clk_branch2_ops,2454		},2455	},2456};2457 2458static struct clk_branch gcc_gpu_cfg_ahb_clk = {2459	.halt_reg = 0x36004,2460	.halt_check = BRANCH_HALT_VOTED,2461	.hwcg_reg = 0x36004,2462	.hwcg_bit = 1,2463	.clkr = {2464		.enable_reg = 0x36004,2465		.enable_mask = BIT(0),2466		.hw.init = &(struct clk_init_data){2467			.name = "gcc_gpu_cfg_ahb_clk",2468			.flags = CLK_IS_CRITICAL,2469			.ops = &clk_branch2_ops,2470		},2471	},2472};2473 2474static struct clk_branch gcc_gpu_gpll0_clk_src = {2475	.halt_check = BRANCH_HALT_DELAY,2476	.clkr = {2477		.enable_reg = 0x79004,2478		.enable_mask = BIT(15),2479		.hw.init = &(struct clk_init_data){2480			.name = "gcc_gpu_gpll0_clk_src",2481			.parent_hws = (const struct clk_hw*[]) {2482				&gpll0.clkr.hw,2483			},2484			.num_parents = 1,2485			.flags = CLK_SET_RATE_PARENT,2486			.ops = &clk_branch2_ops,2487		},2488	},2489};2490 2491static struct clk_branch gcc_gpu_gpll0_div_clk_src = {2492	.halt_check = BRANCH_HALT_DELAY,2493	.clkr = {2494		.enable_reg = 0x79004,2495		.enable_mask = BIT(16),2496		.hw.init = &(struct clk_init_data){2497			.name = "gcc_gpu_gpll0_div_clk_src",2498			.parent_hws = (const struct clk_hw*[]) {2499				&gpll0_out_even.clkr.hw,2500			},2501			.num_parents = 1,2502			.flags = CLK_SET_RATE_PARENT,2503			.ops = &clk_branch2_ops,2504		},2505	},2506};2507 2508static struct clk_branch gcc_gpu_memnoc_gfx_clk = {2509	.halt_reg = 0x3600c,2510	.halt_check = BRANCH_VOTED,2511	.hwcg_reg = 0x3600c,2512	.hwcg_bit = 1,2513	.clkr = {2514		.enable_reg = 0x3600c,2515		.enable_mask = BIT(0),2516		.hw.init = &(struct clk_init_data){2517			.name = "gcc_gpu_memnoc_gfx_clk",2518			.ops = &clk_branch2_ops,2519		},2520	},2521};2522 2523static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {2524	.halt_reg = 0x36018,2525	.halt_check = BRANCH_HALT,2526	.clkr = {2527		.enable_reg = 0x36018,2528		.enable_mask = BIT(0),2529		.hw.init = &(struct clk_init_data){2530			.name = "gcc_gpu_snoc_dvm_gfx_clk",2531			.ops = &clk_branch2_ops,2532		},2533	},2534};2535 2536static struct clk_branch gcc_gpu_throttle_core_clk = {2537	.halt_reg = 0x36048,2538	.halt_check = BRANCH_HALT_VOTED,2539	.hwcg_reg = 0x36048,2540	.hwcg_bit = 1,2541	.clkr = {2542		.enable_reg = 0x79004,2543		.enable_mask = BIT(31),2544		.hw.init = &(struct clk_init_data){2545			.name = "gcc_gpu_throttle_core_clk",2546			.ops = &clk_branch2_ops,2547		},2548	},2549};2550 2551static struct clk_branch gcc_pdm2_clk = {2552	.halt_reg = 0x2000c,2553	.halt_check = BRANCH_HALT,2554	.clkr = {2555		.enable_reg = 0x2000c,2556		.enable_mask = BIT(0),2557		.hw.init = &(struct clk_init_data){2558			.name = "gcc_pdm2_clk",2559			.parent_hws = (const struct clk_hw*[]) {2560				&gcc_pdm2_clk_src.clkr.hw,2561			},2562			.num_parents = 1,2563			.flags = CLK_SET_RATE_PARENT,2564			.ops = &clk_branch2_ops,2565		},2566	},2567};2568 2569static struct clk_branch gcc_pdm_ahb_clk = {2570	.halt_reg = 0x20004,2571	.halt_check = BRANCH_HALT_VOTED,2572	.hwcg_reg = 0x20004,2573	.hwcg_bit = 1,2574	.clkr = {2575		.enable_reg = 0x20004,2576		.enable_mask = BIT(0),2577		.hw.init = &(struct clk_init_data){2578			.name = "gcc_pdm_ahb_clk",2579			.ops = &clk_branch2_ops,2580		},2581	},2582};2583 2584static struct clk_branch gcc_pdm_xo4_clk = {2585	.halt_reg = 0x20008,2586	.halt_check = BRANCH_HALT,2587	.clkr = {2588		.enable_reg = 0x20008,2589		.enable_mask = BIT(0),2590		.hw.init = &(struct clk_init_data){2591			.name = "gcc_pdm_xo4_clk",2592			.ops = &clk_branch2_ops,2593		},2594	},2595};2596 2597static struct clk_branch gcc_prng_ahb_clk = {2598	.halt_reg = 0x21004,2599	.halt_check = BRANCH_HALT_VOTED,2600	.hwcg_reg = 0x21004,2601	.hwcg_bit = 1,2602	.clkr = {2603		.enable_reg = 0x79004,2604		.enable_mask = BIT(13),2605		.hw.init = &(struct clk_init_data){2606			.name = "gcc_prng_ahb_clk",2607			.ops = &clk_branch2_ops,2608		},2609	},2610};2611 2612static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {2613	.halt_reg = 0x17014,2614	.halt_check = BRANCH_HALT_VOTED,2615	.hwcg_reg = 0x17014,2616	.hwcg_bit = 1,2617	.clkr = {2618		.enable_reg = 0x7900c,2619		.enable_mask = BIT(0),2620		.hw.init = &(struct clk_init_data){2621			.name = "gcc_qmip_camera_nrt_ahb_clk",2622			.ops = &clk_branch2_ops,2623		},2624	},2625};2626 2627static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {2628	.halt_reg = 0x17060,2629	.halt_check = BRANCH_HALT_VOTED,2630	.hwcg_reg = 0x17060,2631	.hwcg_bit = 1,2632	.clkr = {2633		.enable_reg = 0x7900c,2634		.enable_mask = BIT(2),2635		.hw.init = &(struct clk_init_data){2636			.name = "gcc_qmip_camera_rt_ahb_clk",2637			.ops = &clk_branch2_ops,2638		},2639	},2640};2641 2642static struct clk_branch gcc_qmip_disp_ahb_clk = {2643	.halt_reg = 0x17018,2644	.halt_check = BRANCH_HALT_VOTED,2645	.hwcg_reg = 0x17018,2646	.hwcg_bit = 1,2647	.clkr = {2648		.enable_reg = 0x7900c,2649		.enable_mask = BIT(1),2650		.hw.init = &(struct clk_init_data){2651			.name = "gcc_qmip_disp_ahb_clk",2652			.ops = &clk_branch2_ops,2653		},2654	},2655};2656 2657static struct clk_branch gcc_qmip_gpu_cfg_ahb_clk = {2658	.halt_reg = 0x36040,2659	.halt_check = BRANCH_HALT_VOTED,2660	.hwcg_reg = 0x36040,2661	.hwcg_bit = 1,2662	.clkr = {2663		.enable_reg = 0x7900c,2664		.enable_mask = BIT(4),2665		.hw.init = &(struct clk_init_data){2666			.name = "gcc_qmip_gpu_cfg_ahb_clk",2667			.ops = &clk_branch2_ops,2668		},2669	},2670};2671 2672static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {2673	.halt_reg = 0x17010,2674	.halt_check = BRANCH_HALT_VOTED,2675	.hwcg_reg = 0x17010,2676	.hwcg_bit = 1,2677	.clkr = {2678		.enable_reg = 0x79004,2679		.enable_mask = BIT(25),2680		.hw.init = &(struct clk_init_data){2681			.name = "gcc_qmip_video_vcodec_ahb_clk",2682			.ops = &clk_branch2_ops,2683		},2684	},2685};2686 2687static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {2688	.halt_reg = 0x1f014,2689	.halt_check = BRANCH_HALT_VOTED,2690	.clkr = {2691		.enable_reg = 0x7900c,2692		.enable_mask = BIT(9),2693		.hw.init = &(struct clk_init_data){2694			.name = "gcc_qupv3_wrap0_core_2x_clk",2695			.ops = &clk_branch2_ops,2696		},2697	},2698};2699 2700static struct clk_branch gcc_qupv3_wrap0_core_clk = {2701	.halt_reg = 0x1f00c,2702	.halt_check = BRANCH_HALT_VOTED,2703	.clkr = {2704		.enable_reg = 0x7900c,2705		.enable_mask = BIT(8),2706		.hw.init = &(struct clk_init_data){2707			.name = "gcc_qupv3_wrap0_core_clk",2708			.ops = &clk_branch2_ops,2709		},2710	},2711};2712 2713static struct clk_branch gcc_qupv3_wrap0_s0_clk = {2714	.halt_reg = 0x1f144,2715	.halt_check = BRANCH_HALT_VOTED,2716	.clkr = {2717		.enable_reg = 0x7900c,2718		.enable_mask = BIT(10),2719		.hw.init = &(struct clk_init_data){2720			.name = "gcc_qupv3_wrap0_s0_clk",2721			.parent_hws = (const struct clk_hw*[]) {2722				&gcc_qupv3_wrap0_s0_clk_src.clkr.hw,2723			},2724			.num_parents = 1,2725			.flags = CLK_SET_RATE_PARENT,2726			.ops = &clk_branch2_ops,2727		},2728	},2729};2730 2731static struct clk_branch gcc_qupv3_wrap0_s1_clk = {2732	.halt_reg = 0x1f274,2733	.halt_check = BRANCH_HALT_VOTED,2734	.clkr = {2735		.enable_reg = 0x7900c,2736		.enable_mask = BIT(11),2737		.hw.init = &(struct clk_init_data){2738			.name = "gcc_qupv3_wrap0_s1_clk",2739			.parent_hws = (const struct clk_hw*[]) {2740				&gcc_qupv3_wrap0_s1_clk_src.clkr.hw,2741			},2742			.num_parents = 1,2743			.flags = CLK_SET_RATE_PARENT,2744			.ops = &clk_branch2_ops,2745		},2746	},2747};2748 2749static struct clk_branch gcc_qupv3_wrap0_s2_clk = {2750	.halt_reg = 0x1f3a4,2751	.halt_check = BRANCH_HALT_VOTED,2752	.clkr = {2753		.enable_reg = 0x7900c,2754		.enable_mask = BIT(12),2755		.hw.init = &(struct clk_init_data){2756			.name = "gcc_qupv3_wrap0_s2_clk",2757			.parent_hws = (const struct clk_hw*[]) {2758				&gcc_qupv3_wrap0_s2_clk_src.clkr.hw,2759			},2760			.num_parents = 1,2761			.flags = CLK_SET_RATE_PARENT,2762			.ops = &clk_branch2_ops,2763		},2764	},2765};2766 2767static struct clk_branch gcc_qupv3_wrap0_s3_clk = {2768	.halt_reg = 0x1f4d4,2769	.halt_check = BRANCH_HALT_VOTED,2770	.clkr = {2771		.enable_reg = 0x7900c,2772		.enable_mask = BIT(13),2773		.hw.init = &(struct clk_init_data){2774			.name = "gcc_qupv3_wrap0_s3_clk",2775			.parent_hws = (const struct clk_hw*[]) {2776				&gcc_qupv3_wrap0_s3_clk_src.clkr.hw,2777			},2778			.num_parents = 1,2779			.flags = CLK_SET_RATE_PARENT,2780			.ops = &clk_branch2_ops,2781		},2782	},2783};2784 2785static struct clk_branch gcc_qupv3_wrap0_s4_clk = {2786	.halt_reg = 0x1f604,2787	.halt_check = BRANCH_HALT_VOTED,2788	.clkr = {2789		.enable_reg = 0x7900c,2790		.enable_mask = BIT(14),2791		.hw.init = &(struct clk_init_data){2792			.name = "gcc_qupv3_wrap0_s4_clk",2793			.parent_hws = (const struct clk_hw*[]) {2794				&gcc_qupv3_wrap0_s4_clk_src.clkr.hw,2795			},2796			.num_parents = 1,2797			.flags = CLK_SET_RATE_PARENT,2798			.ops = &clk_branch2_ops,2799		},2800	},2801};2802 2803static struct clk_branch gcc_qupv3_wrap0_s5_clk = {2804	.halt_reg = 0x1f734,2805	.halt_check = BRANCH_HALT_VOTED,2806	.clkr = {2807		.enable_reg = 0x7900c,2808		.enable_mask = BIT(15),2809		.hw.init = &(struct clk_init_data){2810			.name = "gcc_qupv3_wrap0_s5_clk",2811			.parent_hws = (const struct clk_hw*[]) {2812				&gcc_qupv3_wrap0_s5_clk_src.clkr.hw,2813			},2814			.num_parents = 1,2815			.flags = CLK_SET_RATE_PARENT,2816			.ops = &clk_branch2_ops,2817		},2818	},2819};2820 2821static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {2822	.halt_reg = 0x53014,2823	.halt_check = BRANCH_HALT_VOTED,2824	.clkr = {2825		.enable_reg = 0x7900c,2826		.enable_mask = BIT(20),2827		.hw.init = &(struct clk_init_data){2828			.name = "gcc_qupv3_wrap1_core_2x_clk",2829			.ops = &clk_branch2_ops,2830		},2831	},2832};2833 2834static struct clk_branch gcc_qupv3_wrap1_core_clk = {2835	.halt_reg = 0x5300c,2836	.halt_check = BRANCH_HALT_VOTED,2837	.clkr = {2838		.enable_reg = 0x7900c,2839		.enable_mask = BIT(19),2840		.hw.init = &(struct clk_init_data){2841			.name = "gcc_qupv3_wrap1_core_clk",2842			.ops = &clk_branch2_ops,2843		},2844	},2845};2846 2847static struct clk_branch gcc_qupv3_wrap1_s0_clk = {2848	.halt_reg = 0x53018,2849	.halt_check = BRANCH_HALT_VOTED,2850	.clkr = {2851		.enable_reg = 0x7900c,2852		.enable_mask = BIT(21),2853		.hw.init = &(struct clk_init_data){2854			.name = "gcc_qupv3_wrap1_s0_clk",2855			.parent_hws = (const struct clk_hw*[]) {2856				&gcc_qupv3_wrap1_s0_clk_src.clkr.hw,2857			},2858			.num_parents = 1,2859			.flags = CLK_SET_RATE_PARENT,2860			.ops = &clk_branch2_ops,2861		},2862	},2863};2864 2865static struct clk_branch gcc_qupv3_wrap1_s1_clk = {2866	.halt_reg = 0x53148,2867	.halt_check = BRANCH_HALT_VOTED,2868	.clkr = {2869		.enable_reg = 0x7900c,2870		.enable_mask = BIT(22),2871		.hw.init = &(struct clk_init_data){2872			.name = "gcc_qupv3_wrap1_s1_clk",2873			.parent_hws = (const struct clk_hw*[]) {2874				&gcc_qupv3_wrap1_s1_clk_src.clkr.hw,2875			},2876			.num_parents = 1,2877			.flags = CLK_SET_RATE_PARENT,2878			.ops = &clk_branch2_ops,2879		},2880	},2881};2882 2883static struct clk_branch gcc_qupv3_wrap1_s2_clk = {2884	.halt_reg = 0x53278,2885	.halt_check = BRANCH_HALT_VOTED,2886	.clkr = {2887		.enable_reg = 0x7900c,2888		.enable_mask = BIT(23),2889		.hw.init = &(struct clk_init_data){2890			.name = "gcc_qupv3_wrap1_s2_clk",2891			.parent_hws = (const struct clk_hw*[]) {2892				&gcc_qupv3_wrap1_s2_clk_src.clkr.hw,2893			},2894			.num_parents = 1,2895			.flags = CLK_SET_RATE_PARENT,2896			.ops = &clk_branch2_ops,2897		},2898	},2899};2900 2901static struct clk_branch gcc_qupv3_wrap1_s3_clk = {2902	.halt_reg = 0x533a8,2903	.halt_check = BRANCH_HALT_VOTED,2904	.clkr = {2905		.enable_reg = 0x7900c,2906		.enable_mask = BIT(24),2907		.hw.init = &(struct clk_init_data){2908			.name = "gcc_qupv3_wrap1_s3_clk",2909			.parent_hws = (const struct clk_hw*[]) {2910				&gcc_qupv3_wrap1_s3_clk_src.clkr.hw,2911			},2912			.num_parents = 1,2913			.flags = CLK_SET_RATE_PARENT,2914			.ops = &clk_branch2_ops,2915		},2916	},2917};2918 2919static struct clk_branch gcc_qupv3_wrap1_s4_clk = {2920	.halt_reg = 0x534d8,2921	.halt_check = BRANCH_HALT_VOTED,2922	.clkr = {2923		.enable_reg = 0x7900c,2924		.enable_mask = BIT(25),2925		.hw.init = &(struct clk_init_data){2926			.name = "gcc_qupv3_wrap1_s4_clk",2927			.parent_hws = (const struct clk_hw*[]) {2928				&gcc_qupv3_wrap1_s4_clk_src.clkr.hw,2929			},2930			.num_parents = 1,2931			.flags = CLK_SET_RATE_PARENT,2932			.ops = &clk_branch2_ops,2933		},2934	},2935};2936 2937static struct clk_branch gcc_qupv3_wrap1_s5_clk = {2938	.halt_reg = 0x53608,2939	.halt_check = BRANCH_HALT_VOTED,2940	.clkr = {2941		.enable_reg = 0x7900c,2942		.enable_mask = BIT(26),2943		.hw.init = &(struct clk_init_data){2944			.name = "gcc_qupv3_wrap1_s5_clk",2945			.parent_hws = (const struct clk_hw*[]) {2946				&gcc_qupv3_wrap1_s5_clk_src.clkr.hw,2947			},2948			.num_parents = 1,2949			.flags = CLK_SET_RATE_PARENT,2950			.ops = &clk_branch2_ops,2951		},2952	},2953};2954 2955static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {2956	.halt_reg = 0x1f004,2957	.halt_check = BRANCH_HALT_VOTED,2958	.hwcg_reg = 0x1f004,2959	.hwcg_bit = 1,2960	.clkr = {2961		.enable_reg = 0x7900c,2962		.enable_mask = BIT(6),2963		.hw.init = &(struct clk_init_data){2964			.name = "gcc_qupv3_wrap_0_m_ahb_clk",2965			.ops = &clk_branch2_ops,2966		},2967	},2968};2969 2970static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {2971	.halt_reg = 0x1f008,2972	.halt_check = BRANCH_HALT_VOTED,2973	.hwcg_reg = 0x1f008,2974	.hwcg_bit = 1,2975	.clkr = {2976		.enable_reg = 0x7900c,2977		.enable_mask = BIT(7),2978		.hw.init = &(struct clk_init_data){2979			.name = "gcc_qupv3_wrap_0_s_ahb_clk",2980			.ops = &clk_branch2_ops,2981		},2982	},2983};2984 2985static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {2986	.halt_reg = 0x53004,2987	.halt_check = BRANCH_HALT_VOTED,2988	.hwcg_reg = 0x53004,2989	.hwcg_bit = 1,2990	.clkr = {2991		.enable_reg = 0x7900c,2992		.enable_mask = BIT(17),2993		.hw.init = &(struct clk_init_data){2994			.name = "gcc_qupv3_wrap_1_m_ahb_clk",2995			.ops = &clk_branch2_ops,2996		},2997	},2998};2999 3000static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {3001	.halt_reg = 0x53008,3002	.halt_check = BRANCH_HALT_VOTED,3003	.hwcg_reg = 0x53008,3004	.hwcg_bit = 1,3005	.clkr = {3006		.enable_reg = 0x7900c,3007		.enable_mask = BIT(18),3008		.hw.init = &(struct clk_init_data){3009			.name = "gcc_qupv3_wrap_1_s_ahb_clk",3010			.ops = &clk_branch2_ops,3011		},3012	},3013};3014 3015static struct clk_branch gcc_sdcc1_ahb_clk = {3016	.halt_reg = 0x38008,3017	.halt_check = BRANCH_HALT,3018	.clkr = {3019		.enable_reg = 0x38008,3020		.enable_mask = BIT(0),3021		.hw.init = &(struct clk_init_data){3022			.name = "gcc_sdcc1_ahb_clk",3023			.ops = &clk_branch2_ops,3024		},3025	},3026};3027 3028static struct clk_branch gcc_sdcc1_apps_clk = {3029	.halt_reg = 0x38004,3030	.halt_check = BRANCH_HALT,3031	.clkr = {3032		.enable_reg = 0x38004,3033		.enable_mask = BIT(0),3034		.hw.init = &(struct clk_init_data){3035			.name = "gcc_sdcc1_apps_clk",3036			.parent_hws = (const struct clk_hw*[]) {3037				&gcc_sdcc1_apps_clk_src.clkr.hw,3038			},3039			.num_parents = 1,3040			.flags = CLK_SET_RATE_PARENT,3041			.ops = &clk_branch2_ops,3042		},3043	},3044};3045 3046static struct clk_branch gcc_sdcc1_ice_core_clk = {3047	.halt_reg = 0x3800c,3048	.halt_check = BRANCH_HALT_VOTED,3049	.hwcg_reg = 0x3800c,3050	.hwcg_bit = 1,3051	.clkr = {3052		.enable_reg = 0x3800c,3053		.enable_mask = BIT(0),3054		.hw.init = &(struct clk_init_data){3055			.name = "gcc_sdcc1_ice_core_clk",3056			.parent_hws = (const struct clk_hw*[]) {3057				&gcc_sdcc1_ice_core_clk_src.clkr.hw,3058			},3059			.num_parents = 1,3060			.flags = CLK_SET_RATE_PARENT,3061			.ops = &clk_branch2_ops,3062		},3063	},3064};3065 3066static struct clk_branch gcc_sdcc2_ahb_clk = {3067	.halt_reg = 0x1e008,3068	.halt_check = BRANCH_HALT,3069	.clkr = {3070		.enable_reg = 0x1e008,3071		.enable_mask = BIT(0),3072		.hw.init = &(struct clk_init_data){3073			.name = "gcc_sdcc2_ahb_clk",3074			.ops = &clk_branch2_ops,3075		},3076	},3077};3078 3079static struct clk_branch gcc_sdcc2_apps_clk = {3080	.halt_reg = 0x1e004,3081	.halt_check = BRANCH_HALT,3082	.clkr = {3083		.enable_reg = 0x1e004,3084		.enable_mask = BIT(0),3085		.hw.init = &(struct clk_init_data){3086			.name = "gcc_sdcc2_apps_clk",3087			.parent_hws = (const struct clk_hw*[]) {3088				&gcc_sdcc2_apps_clk_src.clkr.hw,3089			},3090			.num_parents = 1,3091			.flags = CLK_SET_RATE_PARENT,3092			.ops = &clk_branch2_ops,3093		},3094	},3095};3096 3097static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {3098	.halt_reg = 0x2b06c,3099	.halt_check = BRANCH_HALT_VOTED,3100	.hwcg_reg = 0x2b06c,3101	.hwcg_bit = 1,3102	.clkr = {3103		.enable_reg = 0x79004,3104		.enable_mask = BIT(0),3105		.hw.init = &(struct clk_init_data){3106			.name = "gcc_sys_noc_cpuss_ahb_clk",3107			.parent_hws = (const struct clk_hw*[]) {3108				&gcc_cpuss_ahb_postdiv_clk_src.clkr.hw,3109			},3110			.num_parents = 1,3111			.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,3112			.ops = &clk_branch2_ops,3113		},3114	},3115};3116 3117static struct clk_branch gcc_sys_noc_ufs_phy_axi_clk = {3118	.halt_reg = 0x45098,3119	.halt_check = BRANCH_HALT,3120	.clkr = {3121		.enable_reg = 0x45098,3122		.enable_mask = BIT(0),3123		.hw.init = &(struct clk_init_data){3124			.name = "gcc_sys_noc_ufs_phy_axi_clk",3125			.parent_hws = (const struct clk_hw*[]) {3126				&gcc_ufs_phy_axi_clk_src.clkr.hw,3127			},3128			.num_parents = 1,3129			.flags = CLK_SET_RATE_PARENT,3130			.ops = &clk_branch2_ops,3131		},3132	},3133};3134 3135static struct clk_branch gcc_sys_noc_usb3_prim_axi_clk = {3136	.halt_reg = 0x1a080,3137	.halt_check = BRANCH_HALT_VOTED,3138	.hwcg_reg = 0x1a080,3139	.hwcg_bit = 1,3140	.clkr = {3141		.enable_reg = 0x1a080,3142		.enable_mask = BIT(0),3143		.hw.init = &(struct clk_init_data){3144			.name = "gcc_sys_noc_usb3_prim_axi_clk",3145			.parent_hws = (const struct clk_hw*[]) {3146				&gcc_usb30_prim_master_clk_src.clkr.hw,3147			},3148			.num_parents = 1,3149			.flags = CLK_SET_RATE_PARENT,3150			.ops = &clk_branch2_ops,3151		},3152	},3153};3154 3155static struct clk_branch gcc_ufs_phy_ahb_clk = {3156	.halt_reg = 0x45014,3157	.halt_check = BRANCH_HALT_VOTED,3158	.hwcg_reg = 0x45014,3159	.hwcg_bit = 1,3160	.clkr = {3161		.enable_reg = 0x45014,3162		.enable_mask = BIT(0),3163		.hw.init = &(struct clk_init_data){3164			.name = "gcc_ufs_phy_ahb_clk",3165			.ops = &clk_branch2_ops,3166		},3167	},3168};3169 3170static struct clk_branch gcc_ufs_phy_axi_clk = {3171	.halt_reg = 0x45010,3172	.halt_check = BRANCH_HALT_VOTED,3173	.hwcg_reg = 0x45010,3174	.hwcg_bit = 1,3175	.clkr = {3176		.enable_reg = 0x45010,3177		.enable_mask = BIT(0),3178		.hw.init = &(struct clk_init_data){3179			.name = "gcc_ufs_phy_axi_clk",3180			.parent_hws = (const struct clk_hw*[]) {3181				&gcc_ufs_phy_axi_clk_src.clkr.hw,3182			},3183			.num_parents = 1,3184			.flags = CLK_SET_RATE_PARENT,3185			.ops = &clk_branch2_ops,3186		},3187	},3188};3189 3190static struct clk_branch gcc_ufs_phy_ice_core_clk = {3191	.halt_reg = 0x45044,3192	.halt_check = BRANCH_HALT_VOTED,3193	.hwcg_reg = 0x45044,3194	.hwcg_bit = 1,3195	.clkr = {3196		.enable_reg = 0x45044,3197		.enable_mask = BIT(0),3198		.hw.init = &(struct clk_init_data){3199			.name = "gcc_ufs_phy_ice_core_clk",3200			.parent_hws = (const struct clk_hw*[]) {3201				&gcc_ufs_phy_ice_core_clk_src.clkr.hw,3202			},3203			.num_parents = 1,3204			.flags = CLK_SET_RATE_PARENT,3205			.ops = &clk_branch2_ops,3206		},3207	},3208};3209 3210static struct clk_branch gcc_ufs_phy_phy_aux_clk = {3211	.halt_reg = 0x45078,3212	.halt_check = BRANCH_HALT_VOTED,3213	.hwcg_reg = 0x45078,3214	.hwcg_bit = 1,3215	.clkr = {3216		.enable_reg = 0x45078,3217		.enable_mask = BIT(0),3218		.hw.init = &(struct clk_init_data){3219			.name = "gcc_ufs_phy_phy_aux_clk",3220			.parent_hws = (const struct clk_hw*[]) {3221				&gcc_ufs_phy_phy_aux_clk_src.clkr.hw,3222			},3223			.num_parents = 1,3224			.flags = CLK_SET_RATE_PARENT,3225			.ops = &clk_branch2_ops,3226		},3227	},3228};3229 3230static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {3231	.halt_reg = 0x4501c,3232	.halt_check = BRANCH_HALT_SKIP,3233	.clkr = {3234		.enable_reg = 0x4501c,3235		.enable_mask = BIT(0),3236		.hw.init = &(struct clk_init_data){3237			.name = "gcc_ufs_phy_rx_symbol_0_clk",3238			.ops = &clk_branch2_ops,3239		},3240	},3241};3242 3243static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {3244	.halt_reg = 0x45018,3245	.halt_check = BRANCH_HALT_SKIP,3246	.clkr = {3247		.enable_reg = 0x45018,3248		.enable_mask = BIT(0),3249		.hw.init = &(struct clk_init_data){3250			.name = "gcc_ufs_phy_tx_symbol_0_clk",3251			.ops = &clk_branch2_ops,3252		},3253	},3254};3255 3256static struct clk_branch gcc_ufs_phy_unipro_core_clk = {3257	.halt_reg = 0x45040,3258	.halt_check = BRANCH_HALT_VOTED,3259	.hwcg_reg = 0x45040,3260	.hwcg_bit = 1,3261	.clkr = {3262		.enable_reg = 0x45040,3263		.enable_mask = BIT(0),3264		.hw.init = &(struct clk_init_data){3265			.name = "gcc_ufs_phy_unipro_core_clk",3266			.parent_hws = (const struct clk_hw*[]) {3267				&gcc_ufs_phy_unipro_core_clk_src.clkr.hw,3268			},3269			.num_parents = 1,3270			.flags = CLK_SET_RATE_PARENT,3271			.ops = &clk_branch2_ops,3272		},3273	},3274};3275 3276static struct clk_branch gcc_usb30_prim_master_clk = {3277	.halt_reg = 0x1a010,3278	.halt_check = BRANCH_HALT,3279	.clkr = {3280		.enable_reg = 0x1a010,3281		.enable_mask = BIT(0),3282		.hw.init = &(struct clk_init_data){3283			.name = "gcc_usb30_prim_master_clk",3284			.parent_hws = (const struct clk_hw*[]) {3285				&gcc_usb30_prim_master_clk_src.clkr.hw,3286			},3287			.num_parents = 1,3288			.flags = CLK_SET_RATE_PARENT,3289			.ops = &clk_branch2_ops,3290		},3291	},3292};3293 3294static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {3295	.halt_reg = 0x1a018,3296	.halt_check = BRANCH_HALT,3297	.clkr = {3298		.enable_reg = 0x1a018,3299		.enable_mask = BIT(0),3300		.hw.init = &(struct clk_init_data){3301			.name = "gcc_usb30_prim_mock_utmi_clk",3302			.parent_hws = (const struct clk_hw*[]) {3303				&gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,3304			},3305			.num_parents = 1,3306			.flags = CLK_SET_RATE_PARENT,3307			.ops = &clk_branch2_ops,3308		},3309	},3310};3311 3312static struct clk_branch gcc_usb30_prim_sleep_clk = {3313	.halt_reg = 0x1a014,3314	.halt_check = BRANCH_HALT,3315	.clkr = {3316		.enable_reg = 0x1a014,3317		.enable_mask = BIT(0),3318		.hw.init = &(struct clk_init_data){3319			.name = "gcc_usb30_prim_sleep_clk",3320			.ops = &clk_branch2_ops,3321		},3322	},3323};3324 3325static struct clk_branch gcc_ufs_mem_clkref_clk = {3326	.halt_reg = 0x8c000,3327	.halt_check = BRANCH_HALT,3328	.clkr = {3329		.enable_reg = 0x8c000,3330		.enable_mask = BIT(0),3331		.hw.init = &(struct clk_init_data){3332			.name = "gcc_ufs_mem_clkref_clk",3333			.ops = &clk_branch2_ops,3334		},3335	},3336};3337 3338static struct clk_branch gcc_rx5_pcie_clkref_en_clk = {3339	.halt_reg = 0x8c00c,3340	.halt_check = BRANCH_HALT,3341	.clkr = {3342		.enable_reg = 0x8c00c,3343		.enable_mask = BIT(0),3344		.hw.init = &(struct clk_init_data){3345			.name = "gcc_rx5_pcie_clkref_en_clk",3346			.ops = &clk_branch2_ops,3347		},3348	},3349};3350 3351static struct clk_branch gcc_usb3_prim_clkref_clk = {3352	.halt_reg = 0x8c010,3353	.halt_check = BRANCH_HALT,3354	.clkr = {3355		.enable_reg = 0x8c010,3356		.enable_mask = BIT(0),3357		.hw.init = &(struct clk_init_data){3358			.name = "gcc_usb3_prim_clkref_clk",3359			.ops = &clk_branch2_ops,3360		},3361	},3362};3363 3364static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {3365	.halt_reg = 0x1a054,3366	.halt_check = BRANCH_HALT,3367	.clkr = {3368		.enable_reg = 0x1a054,3369		.enable_mask = BIT(0),3370		.hw.init = &(struct clk_init_data){3371			.name = "gcc_usb3_prim_phy_com_aux_clk",3372			.parent_hws = (const struct clk_hw*[]) {3373				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,3374			},3375			.num_parents = 1,3376			.flags = CLK_SET_RATE_PARENT,3377			.ops = &clk_branch2_ops,3378		},3379	},3380};3381 3382static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {3383	.halt_reg = 0x1a058,3384	.halt_check = BRANCH_HALT_SKIP,3385	.hwcg_reg = 0x1a058,3386	.hwcg_bit = 1,3387	.clkr = {3388		.enable_reg = 0x1a058,3389		.enable_mask = BIT(0),3390		.hw.init = &(struct clk_init_data){3391			.name = "gcc_usb3_prim_phy_pipe_clk",3392			.ops = &clk_branch2_ops,3393		},3394	},3395};3396 3397static struct clk_branch gcc_vcodec0_axi_clk = {3398	.halt_reg = 0x6e008,3399	.halt_check = BRANCH_HALT,3400	.clkr = {3401		.enable_reg = 0x6e008,3402		.enable_mask = BIT(0),3403		.hw.init = &(struct clk_init_data){3404			.name = "gcc_vcodec0_axi_clk",3405			.ops = &clk_branch2_ops,3406		},3407	},3408};3409 3410static struct clk_branch gcc_venus_ahb_clk = {3411	.halt_reg = 0x6e010,3412	.halt_check = BRANCH_HALT,3413	.clkr = {3414		.enable_reg = 0x6e010,3415		.enable_mask = BIT(0),3416		.hw.init = &(struct clk_init_data){3417			.name = "gcc_venus_ahb_clk",3418			.ops = &clk_branch2_ops,3419		},3420	},3421};3422 3423static struct clk_branch gcc_venus_ctl_axi_clk = {3424	.halt_reg = 0x6e004,3425	.halt_check = BRANCH_HALT,3426	.clkr = {3427		.enable_reg = 0x6e004,3428		.enable_mask = BIT(0),3429		.hw.init = &(struct clk_init_data){3430			.name = "gcc_venus_ctl_axi_clk",3431			.ops = &clk_branch2_ops,3432		},3433	},3434};3435 3436static struct clk_branch gcc_video_ahb_clk = {3437	.halt_reg = 0x17004,3438	.halt_check = BRANCH_HALT_DELAY,3439	.hwcg_reg = 0x17004,3440	.hwcg_bit = 1,3441	.clkr = {3442		.enable_reg = 0x17004,3443		.enable_mask = BIT(0),3444		.hw.init = &(struct clk_init_data){3445			.name = "gcc_video_ahb_clk",3446			.flags = CLK_IS_CRITICAL,3447			.ops = &clk_branch2_ops,3448		},3449	},3450};3451 3452static struct clk_branch gcc_video_axi0_clk = {3453	.halt_reg = 0x1701c,3454	.halt_check = BRANCH_HALT_VOTED,3455	.hwcg_reg = 0x1701c,3456	.hwcg_bit = 1,3457	.clkr = {3458		.enable_reg = 0x1701c,3459		.enable_mask = BIT(0),3460		.hw.init = &(struct clk_init_data){3461			.name = "gcc_video_axi0_clk",3462			.ops = &clk_branch2_ops,3463		},3464	},3465};3466 3467static struct clk_branch gcc_video_throttle_core_clk = {3468	.halt_reg = 0x17068,3469	.halt_check = BRANCH_HALT_VOTED,3470	.hwcg_reg = 0x17068,3471	.hwcg_bit = 1,3472	.clkr = {3473		.enable_reg = 0x79004,3474		.enable_mask = BIT(28),3475		.hw.init = &(struct clk_init_data){3476			.name = "gcc_video_throttle_core_clk",3477			.ops = &clk_branch2_ops,3478		},3479	},3480};3481 3482static struct clk_branch gcc_video_vcodec0_sys_clk = {3483	.halt_reg = 0x580a4,3484	.halt_check = BRANCH_HALT_VOTED,3485	.hwcg_reg = 0x580a4,3486	.hwcg_bit = 1,3487	.clkr = {3488		.enable_reg = 0x580a4,3489		.enable_mask = BIT(0),3490		.hw.init = &(struct clk_init_data){3491			.name = "gcc_video_vcodec0_sys_clk",3492			.parent_hws = (const struct clk_hw*[]) {3493				&gcc_video_venus_clk_src.clkr.hw,3494			},3495			.num_parents = 1,3496			.flags = CLK_SET_RATE_PARENT,3497			.ops = &clk_branch2_ops,3498		},3499	},3500};3501 3502static struct clk_branch gcc_video_venus_ctl_clk = {3503	.halt_reg = 0x5808c,3504	.halt_check = BRANCH_HALT,3505	.clkr = {3506		.enable_reg = 0x5808c,3507		.enable_mask = BIT(0),3508		.hw.init = &(struct clk_init_data){3509			.name = "gcc_video_venus_ctl_clk",3510			.parent_hws = (const struct clk_hw*[]) {3511				&gcc_video_venus_clk_src.clkr.hw,3512			},3513			.num_parents = 1,3514			.flags = CLK_SET_RATE_PARENT,3515			.ops = &clk_branch2_ops,3516		},3517	},3518};3519 3520static struct clk_branch gcc_video_xo_clk = {3521	.halt_reg = 0x17024,3522	.halt_check = BRANCH_HALT,3523	.clkr = {3524		.enable_reg = 0x17024,3525		.enable_mask = BIT(0),3526		.hw.init = &(struct clk_init_data){3527			.name = "gcc_video_xo_clk",3528			.ops = &clk_branch2_ops,3529		},3530	},3531};3532 3533static struct gdsc usb30_prim_gdsc = {3534	.gdscr = 0x1a004,3535	.pd = {3536		.name = "usb30_prim_gdsc",3537	},3538	/* TODO: Change to OFF_ON when USB drivers get proper suspend support */3539	.pwrsts = PWRSTS_RET_ON,3540};3541 3542static struct gdsc ufs_phy_gdsc = {3543	.gdscr = 0x45004,3544	.pd = {3545		.name = "ufs_phy_gdsc",3546	},3547	.pwrsts = PWRSTS_OFF_ON,3548};3549 3550static struct gdsc camss_top_gdsc = {3551	.gdscr = 0x58004,3552	.pd = {3553		.name = "camss_top_gdsc",3554	},3555	.pwrsts = PWRSTS_OFF_ON,3556};3557 3558static struct gdsc venus_gdsc = {3559	.gdscr = 0x5807c,3560	.pd = {3561		.name = "venus_gdsc",3562	},3563	.pwrsts = PWRSTS_OFF_ON,3564};3565 3566static struct gdsc vcodec0_gdsc = {3567	.gdscr = 0x58098,3568	.pd = {3569		.name = "vcodec0_gdsc",3570	},3571	.pwrsts = PWRSTS_OFF_ON,3572	.flags = HW_CTRL,3573};3574 3575static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc = {3576	.gdscr = 0x7d074,3577	.pd = {3578		.name = "hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc",3579	},3580	.pwrsts = PWRSTS_OFF_ON,3581	.flags = VOTABLE,3582};3583 3584static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc = {3585	.gdscr = 0x7d078,3586	.pd = {3587		.name = "hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc",3588	},3589	.pwrsts = PWRSTS_OFF_ON,3590	.flags = VOTABLE,3591};3592 3593static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = {3594	.gdscr = 0x7d060,3595	.pd = {3596		.name = "hlos1_vote_turing_mmu_tbu1_gdsc",3597	},3598	.pwrsts = PWRSTS_OFF_ON,3599	.flags = VOTABLE,3600};3601 3602static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = {3603	.gdscr = 0x7d07c,3604	.pd = {3605		.name = "hlos1_vote_turing_mmu_tbu0_gdsc",3606	},3607	.pwrsts = PWRSTS_OFF_ON,3608	.flags = VOTABLE,3609};3610 3611static struct clk_regmap *gcc_sm6375_clocks[] = {3612	[GCC_AHB2PHY_CSI_CLK] = &gcc_ahb2phy_csi_clk.clkr,3613	[GCC_AHB2PHY_USB_CLK] = &gcc_ahb2phy_usb_clk.clkr,3614	[GCC_BIMC_GPU_AXI_CLK] = &gcc_bimc_gpu_axi_clk.clkr,3615	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,3616	[GCC_CAM_THROTTLE_NRT_CLK] = &gcc_cam_throttle_nrt_clk.clkr,3617	[GCC_CAM_THROTTLE_RT_CLK] = &gcc_cam_throttle_rt_clk.clkr,3618	[GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,3619	[GCC_CAMSS_AXI_CLK] = &gcc_camss_axi_clk.clkr,3620	[GCC_CAMSS_AXI_CLK_SRC] = &gcc_camss_axi_clk_src.clkr,3621	[GCC_CAMSS_CCI_0_CLK] = &gcc_camss_cci_0_clk.clkr,3622	[GCC_CAMSS_CCI_0_CLK_SRC] = &gcc_camss_cci_0_clk_src.clkr,3623	[GCC_CAMSS_CCI_1_CLK] = &gcc_camss_cci_1_clk.clkr,3624	[GCC_CAMSS_CCI_1_CLK_SRC] = &gcc_camss_cci_1_clk_src.clkr,3625	[GCC_CAMSS_CPHY_0_CLK] = &gcc_camss_cphy_0_clk.clkr,3626	[GCC_CAMSS_CPHY_1_CLK] = &gcc_camss_cphy_1_clk.clkr,3627	[GCC_CAMSS_CPHY_2_CLK] = &gcc_camss_cphy_2_clk.clkr,3628	[GCC_CAMSS_CPHY_3_CLK] = &gcc_camss_cphy_3_clk.clkr,3629	[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,3630	[GCC_CAMSS_CSI0PHYTIMER_CLK_SRC] = &gcc_camss_csi0phytimer_clk_src.clkr,3631	[GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,3632	[GCC_CAMSS_CSI1PHYTIMER_CLK_SRC] = &gcc_camss_csi1phytimer_clk_src.clkr,3633	[GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr,3634	[GCC_CAMSS_CSI2PHYTIMER_CLK_SRC] = &gcc_camss_csi2phytimer_clk_src.clkr,3635	[GCC_CAMSS_CSI3PHYTIMER_CLK] = &gcc_camss_csi3phytimer_clk.clkr,3636	[GCC_CAMSS_CSI3PHYTIMER_CLK_SRC] = &gcc_camss_csi3phytimer_clk_src.clkr,3637	[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,3638	[GCC_CAMSS_MCLK0_CLK_SRC] = &gcc_camss_mclk0_clk_src.clkr,3639	[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,3640	[GCC_CAMSS_MCLK1_CLK_SRC] = &gcc_camss_mclk1_clk_src.clkr,3641	[GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,3642	[GCC_CAMSS_MCLK2_CLK_SRC] = &gcc_camss_mclk2_clk_src.clkr,3643	[GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,3644	[GCC_CAMSS_MCLK3_CLK_SRC] = &gcc_camss_mclk3_clk_src.clkr,3645	[GCC_CAMSS_MCLK4_CLK] = &gcc_camss_mclk4_clk.clkr,3646	[GCC_CAMSS_MCLK4_CLK_SRC] = &gcc_camss_mclk4_clk_src.clkr,3647	[GCC_CAMSS_NRT_AXI_CLK] = &gcc_camss_nrt_axi_clk.clkr,3648	[GCC_CAMSS_OPE_AHB_CLK] = &gcc_camss_ope_ahb_clk.clkr,3649	[GCC_CAMSS_OPE_AHB_CLK_SRC] = &gcc_camss_ope_ahb_clk_src.clkr,3650	[GCC_CAMSS_OPE_CLK] = &gcc_camss_ope_clk.clkr,3651	[GCC_CAMSS_OPE_CLK_SRC] = &gcc_camss_ope_clk_src.clkr,3652	[GCC_CAMSS_RT_AXI_CLK] = &gcc_camss_rt_axi_clk.clkr,3653	[GCC_CAMSS_TFE_0_CLK] = &gcc_camss_tfe_0_clk.clkr,3654	[GCC_CAMSS_TFE_0_CLK_SRC] = &gcc_camss_tfe_0_clk_src.clkr,3655	[GCC_CAMSS_TFE_0_CPHY_RX_CLK] = &gcc_camss_tfe_0_cphy_rx_clk.clkr,3656	[GCC_CAMSS_TFE_0_CSID_CLK] = &gcc_camss_tfe_0_csid_clk.clkr,3657	[GCC_CAMSS_TFE_0_CSID_CLK_SRC] = &gcc_camss_tfe_0_csid_clk_src.clkr,3658	[GCC_CAMSS_TFE_1_CLK] = &gcc_camss_tfe_1_clk.clkr,3659	[GCC_CAMSS_TFE_1_CLK_SRC] = &gcc_camss_tfe_1_clk_src.clkr,3660	[GCC_CAMSS_TFE_1_CPHY_RX_CLK] = &gcc_camss_tfe_1_cphy_rx_clk.clkr,3661	[GCC_CAMSS_TFE_1_CSID_CLK] = &gcc_camss_tfe_1_csid_clk.clkr,3662	[GCC_CAMSS_TFE_1_CSID_CLK_SRC] = &gcc_camss_tfe_1_csid_clk_src.clkr,3663	[GCC_CAMSS_TFE_2_CLK] = &gcc_camss_tfe_2_clk.clkr,3664	[GCC_CAMSS_TFE_2_CLK_SRC] = &gcc_camss_tfe_2_clk_src.clkr,3665	[GCC_CAMSS_TFE_2_CPHY_RX_CLK] = &gcc_camss_tfe_2_cphy_rx_clk.clkr,3666	[GCC_CAMSS_TFE_2_CSID_CLK] = &gcc_camss_tfe_2_csid_clk.clkr,3667	[GCC_CAMSS_TFE_2_CSID_CLK_SRC] = &gcc_camss_tfe_2_csid_clk_src.clkr,3668	[GCC_CAMSS_TFE_CPHY_RX_CLK_SRC] = &gcc_camss_tfe_cphy_rx_clk_src.clkr,3669	[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,3670	[GCC_CAMSS_TOP_AHB_CLK_SRC] = &gcc_camss_top_ahb_clk_src.clkr,3671	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,3672	[GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,3673	[GCC_CPUSS_AHB_POSTDIV_CLK_SRC] = &gcc_cpuss_ahb_postdiv_clk_src.clkr,3674	[GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,3675	[GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,3676	[GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,3677	[GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,3678	[GCC_DISP_SLEEP_CLK] = &gcc_disp_sleep_clk.clkr,3679	[GCC_DISP_THROTTLE_CORE_CLK] = &gcc_disp_throttle_core_clk.clkr,3680	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,3681	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,3682	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,3683	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,3684	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,3685	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,3686	[GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,3687	[GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,3688	[GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,3689	[GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,3690	[GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,3691	[GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr,3692	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,3693	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,3694	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,3695	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,3696	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,3697	[GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,3698	[GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,3699	[GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,3700	[GCC_QMIP_GPU_CFG_AHB_CLK] = &gcc_qmip_gpu_cfg_ahb_clk.clkr,3701	[GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,3702	[GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,3703	[GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,3704	[GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,3705	[GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,3706	[GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,3707	[GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,3708	[GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,3709	[GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,3710	[GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,3711	[GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,3712	[GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,3713	[GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,3714	[GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,3715	[GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,3716	[GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,3717	[GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,3718	[GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,3719	[GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,3720	[GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,3721	[GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,3722	[GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,3723	[GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,3724	[GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,3725	[GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,3726	[GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,3727	[GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,3728	[GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,3729	[GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,3730	[GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,3731	[GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,3732	[GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,3733	[GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,3734	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,3735	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,3736	[GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,3737	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,3738	[GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,3739	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,3740	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,3741	[GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,3742	[GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,3743	[GCC_SYS_NOC_UFS_PHY_AXI_CLK] = &gcc_sys_noc_ufs_phy_axi_clk.clkr,3744	[GCC_SYS_NOC_USB3_PRIM_AXI_CLK] = &gcc_sys_noc_usb3_prim_axi_clk.clkr,3745	[GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,3746	[GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,3747	[GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,3748	[GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,3749	[GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,3750	[GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,3751	[GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,3752	[GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,3753	[GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,3754	[GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,3755	[GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,3756	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,3757	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,3758	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,3759	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,3760	[GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,3761	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,3762	[GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,3763	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,3764	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,3765	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,3766	[GCC_VCODEC0_AXI_CLK] = &gcc_vcodec0_axi_clk.clkr,3767	[GCC_VENUS_AHB_CLK] = &gcc_venus_ahb_clk.clkr,3768	[GCC_VENUS_CTL_AXI_CLK] = &gcc_venus_ctl_axi_clk.clkr,3769	[GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,3770	[GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,3771	[GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr,3772	[GCC_VIDEO_VCODEC0_SYS_CLK] = &gcc_video_vcodec0_sys_clk.clkr,3773	[GCC_VIDEO_VENUS_CLK_SRC] = &gcc_video_venus_clk_src.clkr,3774	[GCC_VIDEO_VENUS_CTL_CLK] = &gcc_video_venus_ctl_clk.clkr,3775	[GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,3776	[GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,3777	[GCC_RX5_PCIE_CLKREF_EN_CLK] = &gcc_rx5_pcie_clkref_en_clk.clkr,3778	[GPLL0] = &gpll0.clkr,3779	[GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,3780	[GPLL0_OUT_ODD] = &gpll0_out_odd.clkr,3781	[GPLL1] = &gpll1.clkr,3782	[GPLL10] = &gpll10.clkr,3783	[GPLL11] = &gpll11.clkr,3784	[GPLL3] = &gpll3.clkr,3785	[GPLL3_OUT_EVEN] = &gpll3_out_even.clkr,3786	[GPLL4] = &gpll4.clkr,3787	[GPLL5] = &gpll5.clkr,3788	[GPLL6] = &gpll6.clkr,3789	[GPLL6_OUT_EVEN] = &gpll6_out_even.clkr,3790	[GPLL7] = &gpll7.clkr,3791	[GPLL8] = &gpll8.clkr,3792	[GPLL8_OUT_EVEN] = &gpll8_out_even.clkr,3793	[GPLL9] = &gpll9.clkr,3794	[GPLL9_OUT_MAIN] = &gpll9_out_main.clkr,3795};3796 3797static const struct qcom_reset_map gcc_sm6375_resets[] = {3798	[GCC_MMSS_BCR] = { 0x17000 },3799	[GCC_USB30_PRIM_BCR] = { 0x1a000 },3800	[GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x1b000 },3801	[GCC_USB3_DP_PHY_PRIM_BCR] = { 0x1b020 },3802	[GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 },3803	[GCC_QUSB2PHY_SEC_BCR] = { 0x1c004 },3804	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 },3805	[GCC_SDCC2_BCR] = { 0x1e000 },3806	[GCC_QUPV3_WRAPPER_0_BCR] = { 0x1f000 },3807	[GCC_PDM_BCR] = { 0x20000 },3808	[GCC_GPU_BCR] = { 0x36000 },3809	[GCC_SDCC1_BCR] = { 0x38000 },3810	[GCC_UFS_PHY_BCR] = { 0x45000 },3811	[GCC_CAMSS_TFE_BCR] = { 0x52000 },3812	[GCC_QUPV3_WRAPPER_1_BCR] = { 0x53000 },3813	[GCC_CAMSS_OPE_BCR] = { 0x55000 },3814	[GCC_CAMSS_TOP_BCR] = { 0x58000 },3815	[GCC_VENUS_BCR] = { 0x58078 },3816	[GCC_VCODEC0_BCR] = { 0x58094 },3817	[GCC_VIDEO_INTERFACE_BCR] = { 0x6e000 },3818};3819 3820 3821static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {3822	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),3823	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),3824	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),3825	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),3826	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),3827	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),3828	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),3829	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),3830	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),3831	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),3832	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),3833	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),3834};3835 3836static struct gdsc *gcc_sm6375_gdscs[] = {3837	[USB30_PRIM_GDSC] = &usb30_prim_gdsc,3838	[UFS_PHY_GDSC] = &ufs_phy_gdsc,3839	[CAMSS_TOP_GDSC] = &camss_top_gdsc,3840	[VENUS_GDSC] = &venus_gdsc,3841	[VCODEC0_GDSC] = &vcodec0_gdsc,3842	[HLOS1_VOTE_MM_SNOC_MMU_TBU_NRT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc,3843	[HLOS1_VOTE_MM_SNOC_MMU_TBU_RT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc,3844	[HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc,3845	[HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc,3846};3847 3848static const struct regmap_config gcc_sm6375_regmap_config = {3849	.reg_bits = 32,3850	.reg_stride = 4,3851	.val_bits = 32,3852	.max_register = 0xc7000,3853	.fast_io = true,3854};3855 3856static const struct qcom_cc_desc gcc_sm6375_desc = {3857	.config = &gcc_sm6375_regmap_config,3858	.clks = gcc_sm6375_clocks,3859	.num_clks = ARRAY_SIZE(gcc_sm6375_clocks),3860	.resets = gcc_sm6375_resets,3861	.num_resets = ARRAY_SIZE(gcc_sm6375_resets),3862	.gdscs = gcc_sm6375_gdscs,3863	.num_gdscs = ARRAY_SIZE(gcc_sm6375_gdscs),3864};3865 3866static const struct of_device_id gcc_sm6375_match_table[] = {3867	{ .compatible = "qcom,sm6375-gcc" },3868	{ }3869};3870MODULE_DEVICE_TABLE(of, gcc_sm6375_match_table);3871 3872static int gcc_sm6375_probe(struct platform_device *pdev)3873{3874	struct regmap *regmap;3875	int ret;3876 3877	regmap = qcom_cc_map(pdev, &gcc_sm6375_desc);3878	if (IS_ERR(regmap))3879		return PTR_ERR(regmap);3880 3881	ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, ARRAY_SIZE(gcc_dfs_clocks));3882	if (ret)3883		return ret;3884 3885	/* Keep some clocks always-on */3886	qcom_branch_set_clk_en(regmap, 0x17028); /* GCC_CAMERA_XO_CLK */3887	qcom_branch_set_clk_en(regmap, 0x2b004); /* GCC_CPUSS_GNOC_CLK */3888	qcom_branch_set_clk_en(regmap, 0x1702c); /* GCC_DISP_XO_CLK */3889 3890	clk_lucid_pll_configure(&gpll10, regmap, &gpll10_config);3891	clk_lucid_pll_configure(&gpll11, regmap, &gpll11_config);3892	clk_lucid_pll_configure(&gpll8, regmap, &gpll8_config);3893	clk_zonda_pll_configure(&gpll9, regmap, &gpll9_config);3894 3895	return qcom_cc_really_probe(&pdev->dev, &gcc_sm6375_desc, regmap);3896}3897 3898static struct platform_driver gcc_sm6375_driver = {3899	.probe = gcc_sm6375_probe,3900	.driver = {3901		.name = "gcc-sm6375",3902		.of_match_table = gcc_sm6375_match_table,3903	},3904};3905 3906static int __init gcc_sm6375_init(void)3907{3908	return platform_driver_register(&gcc_sm6375_driver);3909}3910subsys_initcall(gcc_sm6375_init);3911 3912static void __exit gcc_sm6375_exit(void)3913{3914	platform_driver_unregister(&gcc_sm6375_driver);3915}3916module_exit(gcc_sm6375_exit);3917 3918MODULE_DESCRIPTION("QTI GCC SM6375 Driver");3919MODULE_LICENSE("GPL");3920