brintos

brintos / linux-shallow public Read only

0
0
Text · 71.4 KiB · c3cfd57 Raw
2852 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (c) 2018, The Linux Foundation. All rights reserved.4 */5 6#include <linux/kernel.h>7#include <linux/platform_device.h>8#include <linux/module.h>9#include <linux/of.h>10#include <linux/clk-provider.h>11#include <linux/regmap.h>12#include <linux/reset-controller.h>13 14#include <dt-bindings/clock/qcom,gcc-qcs404.h>15 16#include "clk-alpha-pll.h"17#include "clk-branch.h"18#include "clk-pll.h"19#include "clk-rcg.h"20#include "clk-regmap.h"21#include "common.h"22#include "gdsc.h"23#include "reset.h"24 25enum {26	DT_XO,27	DT_SLEEP_CLK,28	DT_PCIE_0_PIPE_CLK,29	DT_DSI0_PHY_PLL_OUT_DSICLK,30	DT_DSI0_PHY_PLL_OUT_BYTECLK,31	DT_HDMI_PHY_PLL_CLK,32};33 34enum {35	P_DSI0_PHY_PLL_OUT_BYTECLK,36	P_DSI0_PHY_PLL_OUT_DSICLK,37	P_GPLL0_OUT_MAIN,38	P_GPLL1_OUT_MAIN,39	P_GPLL3_OUT_MAIN,40	P_GPLL4_OUT_MAIN,41	P_GPLL6_OUT_AUX,42	P_HDMI_PHY_PLL_CLK,43	P_PCIE_0_PIPE_CLK,44	P_SLEEP_CLK,45	P_XO,46};47 48static const struct parent_map gcc_parent_map_1[] = {49	{ P_XO, 0 },50};51 52static const struct clk_parent_data gcc_parent_data_1[] = {53	{ .index = DT_XO, .name = "xo-board" },54};55 56static struct clk_fixed_factor cxo = {57	.mult = 1,58	.div = 1,59	.hw.init = &(struct clk_init_data){60		.name = "cxo",61		.parent_data = gcc_parent_data_1,62		.num_parents = ARRAY_SIZE(gcc_parent_data_1),63		.ops = &clk_fixed_factor_ops,64	},65};66 67static struct clk_alpha_pll gpll0_sleep_clk_src = {68	.offset = 0x21000,69	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],70	.clkr = {71		.enable_reg = 0x45008,72		.enable_mask = BIT(23),73		.enable_is_inverted = true,74		.hw.init = &(struct clk_init_data){75			.name = "gpll0_sleep_clk_src",76			.parent_data = gcc_parent_data_1,77			.num_parents = ARRAY_SIZE(gcc_parent_data_1),78			.ops = &clk_alpha_pll_ops,79		},80	},81};82 83static struct clk_alpha_pll gpll0_out_main = {84	.offset = 0x21000,85	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],86	.flags = SUPPORTS_FSM_MODE,87	.clkr = {88		.enable_reg = 0x45000,89		.enable_mask = BIT(0),90		.hw.init = &(struct clk_init_data){91			.name = "gpll0_out_main",92			.parent_data = gcc_parent_data_1,93			.num_parents = ARRAY_SIZE(gcc_parent_data_1),94			.ops = &clk_alpha_pll_ops,95		},96	},97};98 99static struct clk_alpha_pll gpll0_ao_out_main = {100	.offset = 0x21000,101	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],102	.flags = SUPPORTS_FSM_MODE,103	.clkr = {104		.enable_reg = 0x45000,105		.enable_mask = BIT(0),106		.hw.init = &(struct clk_init_data){107			.name = "gpll0_ao_out_main",108			.parent_data = gcc_parent_data_1,109			.num_parents = ARRAY_SIZE(gcc_parent_data_1),110			.flags = CLK_IS_CRITICAL,111			.ops = &clk_alpha_pll_fixed_ops,112		},113	},114};115 116static struct clk_alpha_pll gpll1_out_main = {117	.offset = 0x20000,118	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],119	.clkr = {120		.enable_reg = 0x45000,121		.enable_mask = BIT(1),122		.hw.init = &(struct clk_init_data){123			.name = "gpll1_out_main",124			.parent_data = gcc_parent_data_1,125			.num_parents = ARRAY_SIZE(gcc_parent_data_1),126			.ops = &clk_alpha_pll_ops,127		},128	},129};130 131/* 930MHz configuration */132static const struct alpha_pll_config gpll3_config = {133	.l = 48,134	.alpha = 0x0,135	.alpha_en_mask = BIT(24),136	.post_div_mask = 0xf << 8,137	.post_div_val = 0x1 << 8,138	.vco_mask = 0x3 << 20,139	.main_output_mask = 0x1,140	.config_ctl_val = 0x4001055b,141};142 143static const struct pll_vco gpll3_vco[] = {144	{ 700000000, 1400000000, 0 },145};146 147static struct clk_alpha_pll gpll3_out_main = {148	.offset = 0x22000,149	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],150	.vco_table = gpll3_vco,151	.num_vco = ARRAY_SIZE(gpll3_vco),152	.clkr = {153		.hw.init = &(struct clk_init_data){154			.name = "gpll3_out_main",155			.parent_data = gcc_parent_data_1,156			.num_parents = ARRAY_SIZE(gcc_parent_data_1),157			.ops = &clk_alpha_pll_ops,158		},159	},160};161 162static struct clk_alpha_pll gpll4_out_main = {163	.offset = 0x24000,164	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],165	.clkr = {166		.enable_reg = 0x45000,167		.enable_mask = BIT(5),168		.hw.init = &(struct clk_init_data){169			.name = "gpll4_out_main",170			.parent_data = gcc_parent_data_1,171			.num_parents = ARRAY_SIZE(gcc_parent_data_1),172			.ops = &clk_alpha_pll_ops,173		},174	},175};176 177static struct clk_pll gpll6 = {178	.l_reg = 0x37004,179	.m_reg = 0x37008,180	.n_reg = 0x3700C,181	.config_reg = 0x37014,182	.mode_reg = 0x37000,183	.status_reg = 0x3701C,184	.status_bit = 17,185	.clkr.hw.init = &(struct clk_init_data){186		.name = "gpll6",187		.parent_data = gcc_parent_data_1,188		.num_parents = ARRAY_SIZE(gcc_parent_data_1),189		.ops = &clk_pll_ops,190	},191};192 193static struct clk_regmap gpll6_out_aux = {194	.enable_reg = 0x45000,195	.enable_mask = BIT(7),196	.hw.init = &(struct clk_init_data){197		.name = "gpll6_out_aux",198		.parent_hws = (const struct clk_hw*[]) {199			&gpll6.clkr.hw,200		},201		.num_parents = 1,202		.ops = &clk_pll_vote_ops,203	},204};205 206static const struct parent_map gcc_parent_map_0[] = {207	{ P_XO, 0 },208	{ P_GPLL0_OUT_MAIN, 1 },209};210 211static const struct clk_parent_data gcc_parent_data_0[] = {212	{ .index = DT_XO, .name = "xo-board" },213	{ .hw = &gpll0_out_main.clkr.hw },214};215 216static const struct clk_parent_data gcc_parent_data_ao_0[] = {217	{ .index = DT_XO, .name = "xo-board" },218	{ .hw = &gpll0_ao_out_main.clkr.hw },219};220 221static const struct parent_map gcc_parent_map_2[] = {222	{ P_XO, 0 },223	{ P_GPLL0_OUT_MAIN, 1 },224	{ P_GPLL6_OUT_AUX, 2 },225	{ P_SLEEP_CLK, 6 },226};227 228static const struct clk_parent_data gcc_parent_data_2[] = {229	{ .index = DT_XO, .name = "xo-board" },230	{ .hw = &gpll0_out_main.clkr.hw },231	{ .hw = &gpll6_out_aux.hw },232	{ .index = DT_SLEEP_CLK, .name = "sleep_clk" },233};234 235static const struct parent_map gcc_parent_map_3[] = {236	{ P_XO, 0 },237	{ P_GPLL0_OUT_MAIN, 1 },238	{ P_GPLL6_OUT_AUX, 2 },239};240 241static const struct clk_parent_data gcc_parent_data_3[] = {242	{ .index = DT_XO, .name = "xo-board" },243	{ .hw = &gpll0_out_main.clkr.hw },244	{ .hw = &gpll6_out_aux.hw },245};246 247static const struct parent_map gcc_parent_map_4[] = {248	{ P_XO, 0 },249	{ P_GPLL1_OUT_MAIN, 1 },250};251 252static const struct clk_parent_data gcc_parent_data_4[] = {253	{ .index = DT_XO, .name = "xo-board" },254	{ .hw = &gpll1_out_main.clkr.hw },255};256 257static const struct parent_map gcc_parent_map_5[] = {258	{ P_XO, 0 },259	{ P_DSI0_PHY_PLL_OUT_BYTECLK, 1 },260};261 262static const struct clk_parent_data gcc_parent_data_5[] = {263	{ .index = DT_XO, .name = "xo-board" },264	{ .index = DT_DSI0_PHY_PLL_OUT_BYTECLK, .name = "dsi0pllbyte" },265};266 267static const struct parent_map gcc_parent_map_6[] = {268	{ P_XO, 0 },269	{ P_DSI0_PHY_PLL_OUT_BYTECLK, 2 },270};271 272static const struct clk_parent_data gcc_parent_data_6[] = {273	{ .index = DT_XO, .name = "xo-board" },274	{ .index = DT_DSI0_PHY_PLL_OUT_BYTECLK, .name = "dsi0pllbyte" },275};276 277static const struct parent_map gcc_parent_map_7[] = {278	{ P_XO, 0 },279	{ P_GPLL0_OUT_MAIN, 1 },280	{ P_GPLL3_OUT_MAIN, 2 },281	{ P_GPLL6_OUT_AUX, 3 },282};283 284static const struct clk_parent_data gcc_parent_data_7[] = {285	{ .index = DT_XO, .name = "xo-board" },286	{ .hw = &gpll0_out_main.clkr.hw },287	{ .hw = &gpll3_out_main.clkr.hw },288	{ .hw = &gpll6_out_aux.hw },289};290 291static const struct parent_map gcc_parent_map_8[] = {292	{ P_XO, 0 },293	{ P_HDMI_PHY_PLL_CLK, 1 },294};295 296static const struct clk_parent_data gcc_parent_data_8[] = {297	{ .index = DT_XO, .name = "xo-board" },298	{ .index = DT_HDMI_PHY_PLL_CLK, .name = "hdmi_pll" },299};300 301static const struct parent_map gcc_parent_map_9[] = {302	{ P_XO, 0 },303	{ P_GPLL0_OUT_MAIN, 1 },304	{ P_DSI0_PHY_PLL_OUT_DSICLK, 2 },305	{ P_GPLL6_OUT_AUX, 3 },306};307 308static const struct clk_parent_data gcc_parent_data_9[] = {309	{ .index = DT_XO, .name = "xo-board" },310	{ .hw = &gpll0_out_main.clkr.hw },311	{ .index = DT_DSI0_PHY_PLL_OUT_DSICLK, .name = "dsi0pll" },312	{ .hw = &gpll6_out_aux.hw },313};314 315static const struct parent_map gcc_parent_map_10[] = {316	{ P_XO, 0 },317	{ P_SLEEP_CLK, 1 },318};319 320static const struct clk_parent_data gcc_parent_data_10[] = {321	{ .index = DT_XO, .name = "xo-board" },322	{ .index = DT_SLEEP_CLK, .name = "sleep_clk" },323};324 325static const struct parent_map gcc_parent_map_11[] = {326	{ P_XO, 0 },327	{ P_PCIE_0_PIPE_CLK, 1 },328};329 330static const struct clk_parent_data gcc_parent_data_11[] = {331	{ .index = DT_XO, .name = "xo-board" },332	{ .fw_name = "pcie_0_pipe_clk", .name = "pcie_0_pipe_clk" },333};334 335static const struct parent_map gcc_parent_map_12[] = {336	{ P_XO, 0 },337	{ P_DSI0_PHY_PLL_OUT_DSICLK, 1 },338};339 340static const struct clk_parent_data gcc_parent_data_12[] = {341	{ .index = DT_XO, .name = "xo-board" },342	{ .index = DT_DSI0_PHY_PLL_OUT_DSICLK, .name = "dsi0pll" },343};344 345static const struct parent_map gcc_parent_map_13[] = {346	{ P_XO, 0 },347	{ P_GPLL0_OUT_MAIN, 1 },348	{ P_GPLL4_OUT_MAIN, 2 },349	{ P_GPLL6_OUT_AUX, 3 },350};351 352static const struct clk_parent_data gcc_parent_data_13[] = {353	{ .index = DT_XO, .name = "xo-board" },354	{ .hw = &gpll0_out_main.clkr.hw },355	{ .hw = &gpll4_out_main.clkr.hw },356	{ .hw = &gpll6_out_aux.hw },357};358 359static const struct parent_map gcc_parent_map_14[] = {360	{ P_XO, 0 },361	{ P_GPLL0_OUT_MAIN, 1 },362};363 364static const struct clk_parent_data gcc_parent_data_14[] = {365	{ .index = DT_XO, .name = "xo-board" },366	{ .hw = &gpll0_out_main.clkr.hw },367};368 369static const struct parent_map gcc_parent_map_15[] = {370	{ P_XO, 0 },371};372 373static const struct clk_parent_data gcc_parent_data_15[] = {374	{ .index = DT_XO, .name = "xo-board" },375};376 377static const struct parent_map gcc_parent_map_16[] = {378	{ P_XO, 0 },379	{ P_GPLL0_OUT_MAIN, 1 },380};381 382static const struct clk_parent_data gcc_parent_data_16[] = {383	{ .index = DT_XO, .name = "xo-board" },384	{ .hw = &gpll0_out_main.clkr.hw },385};386 387static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {388	F(19200000, P_XO, 1, 0, 0),389	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),390	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),391	F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),392	{ }393};394 395static struct clk_rcg2 apss_ahb_clk_src = {396	.cmd_rcgr = 0x46000,397	.mnd_width = 0,398	.hid_width = 5,399	.parent_map = gcc_parent_map_0,400	.freq_tbl = ftbl_apss_ahb_clk_src,401	.clkr.hw.init = &(struct clk_init_data){402		.name = "apss_ahb_clk_src",403		.parent_data = gcc_parent_data_ao_0,404		.num_parents = ARRAY_SIZE(gcc_parent_data_ao_0),405		.flags = CLK_IS_CRITICAL,406		.ops = &clk_rcg2_ops,407	},408};409 410static const struct freq_tbl ftbl_blsp1_qup0_i2c_apps_clk_src[] = {411	F(19200000, P_XO, 1, 0, 0),412	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),413	{ }414};415 416static struct clk_rcg2 blsp1_qup0_i2c_apps_clk_src = {417	.cmd_rcgr = 0x602c,418	.mnd_width = 0,419	.hid_width = 5,420	.parent_map = gcc_parent_map_0,421	.freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,422	.clkr.hw.init = &(struct clk_init_data){423		.name = "blsp1_qup0_i2c_apps_clk_src",424		.parent_data = gcc_parent_data_0,425		.num_parents = ARRAY_SIZE(gcc_parent_data_0),426		.ops = &clk_rcg2_ops,427	},428};429 430static const struct freq_tbl ftbl_blsp1_qup0_spi_apps_clk_src[] = {431	F(960000, P_XO, 10, 1, 2),432	F(4800000, P_XO, 4, 0, 0),433	F(9600000, P_XO, 2, 0, 0),434	F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),435	F(19200000, P_XO, 1, 0, 0),436	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),437	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),438	{ }439};440 441static struct clk_rcg2 blsp1_qup0_spi_apps_clk_src = {442	.cmd_rcgr = 0x6034,443	.mnd_width = 8,444	.hid_width = 5,445	.parent_map = gcc_parent_map_0,446	.freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src,447	.clkr.hw.init = &(struct clk_init_data){448		.name = "blsp1_qup0_spi_apps_clk_src",449		.parent_data = gcc_parent_data_0,450		.num_parents = ARRAY_SIZE(gcc_parent_data_0),451		.ops = &clk_rcg2_ops,452	},453};454 455static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {456	.cmd_rcgr = 0x200c,457	.mnd_width = 0,458	.hid_width = 5,459	.parent_map = gcc_parent_map_0,460	.freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,461	.clkr.hw.init = &(struct clk_init_data){462		.name = "blsp1_qup1_i2c_apps_clk_src",463		.parent_data = gcc_parent_data_0,464		.num_parents = ARRAY_SIZE(gcc_parent_data_0),465		.ops = &clk_rcg2_ops,466	},467};468 469static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {470	F(960000,   P_XO, 10, 1, 2),471	F(4800000,  P_XO, 4, 0, 0),472	F(9600000,  P_XO, 2, 0, 0),473	F(10480000, P_GPLL0_OUT_MAIN, 1, 3, 229),474	F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),475	F(19200000, P_XO, 1, 0, 0),476	F(20961000, P_GPLL0_OUT_MAIN, 1, 6, 229),477	{ }478};479 480static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {481	.cmd_rcgr = 0x2024,482	.mnd_width = 8,483	.hid_width = 5,484	.parent_map = gcc_parent_map_0,485	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,486	.clkr.hw.init = &(struct clk_init_data){487		.name = "blsp1_qup1_spi_apps_clk_src",488		.parent_data = gcc_parent_data_0,489		.num_parents = ARRAY_SIZE(gcc_parent_data_0),490		.ops = &clk_rcg2_ops,491	},492};493 494static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {495	.cmd_rcgr = 0x3000,496	.mnd_width = 0,497	.hid_width = 5,498	.parent_map = gcc_parent_map_0,499	.freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,500	.clkr.hw.init = &(struct clk_init_data){501		.name = "blsp1_qup2_i2c_apps_clk_src",502		.parent_data = gcc_parent_data_0,503		.num_parents = ARRAY_SIZE(gcc_parent_data_0),504		.ops = &clk_rcg2_ops,505	},506};507 508static const struct freq_tbl ftbl_blsp1_qup2_spi_apps_clk_src[] = {509	F(960000,   P_XO, 10, 1, 2),510	F(4800000,  P_XO, 4, 0, 0),511	F(9600000,  P_XO, 2, 0, 0),512	F(15000000, P_GPLL0_OUT_MAIN, 1,  3, 160),513	F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),514	F(19200000, P_XO, 1, 0, 0),515	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),516	F(30000000, P_GPLL0_OUT_MAIN, 1,  3, 80),517	{ }518};519 520static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {521	.cmd_rcgr = 0x3014,522	.mnd_width = 8,523	.hid_width = 5,524	.parent_map = gcc_parent_map_0,525	.freq_tbl = ftbl_blsp1_qup2_spi_apps_clk_src,526	.clkr.hw.init = &(struct clk_init_data){527		.name = "blsp1_qup2_spi_apps_clk_src",528		.parent_data = gcc_parent_data_0,529		.num_parents = ARRAY_SIZE(gcc_parent_data_0),530		.ops = &clk_rcg2_ops,531	},532};533 534static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {535	.cmd_rcgr = 0x4000,536	.mnd_width = 0,537	.hid_width = 5,538	.parent_map = gcc_parent_map_0,539	.freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,540	.clkr.hw.init = &(struct clk_init_data){541		.name = "blsp1_qup3_i2c_apps_clk_src",542		.parent_data = gcc_parent_data_0,543		.num_parents = ARRAY_SIZE(gcc_parent_data_0),544		.ops = &clk_rcg2_ops,545	},546};547 548static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {549	.cmd_rcgr = 0x4024,550	.mnd_width = 8,551	.hid_width = 5,552	.parent_map = gcc_parent_map_0,553	.freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src,554	.clkr.hw.init = &(struct clk_init_data){555		.name = "blsp1_qup3_spi_apps_clk_src",556		.parent_data = gcc_parent_data_0,557		.num_parents = ARRAY_SIZE(gcc_parent_data_0),558		.ops = &clk_rcg2_ops,559	},560};561 562static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {563	.cmd_rcgr = 0x5000,564	.mnd_width = 0,565	.hid_width = 5,566	.parent_map = gcc_parent_map_0,567	.freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,568	.clkr.hw.init = &(struct clk_init_data){569		.name = "blsp1_qup4_i2c_apps_clk_src",570		.parent_data = gcc_parent_data_0,571		.num_parents = ARRAY_SIZE(gcc_parent_data_0),572		.ops = &clk_rcg2_ops,573	},574};575 576static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {577	.cmd_rcgr = 0x5024,578	.mnd_width = 8,579	.hid_width = 5,580	.parent_map = gcc_parent_map_0,581	.freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src,582	.clkr.hw.init = &(struct clk_init_data){583		.name = "blsp1_qup4_spi_apps_clk_src",584		.parent_data = gcc_parent_data_0,585		.num_parents = ARRAY_SIZE(gcc_parent_data_0),586		.ops = &clk_rcg2_ops,587	},588};589 590static const struct freq_tbl ftbl_blsp1_uart0_apps_clk_src[] = {591	F(3686400, P_GPLL0_OUT_MAIN, 1, 72, 15625),592	F(7372800, P_GPLL0_OUT_MAIN, 1, 144, 15625),593	F(14745600, P_GPLL0_OUT_MAIN, 1, 288, 15625),594	F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),595	F(19200000, P_XO, 1, 0, 0),596	F(24000000, P_GPLL0_OUT_MAIN, 1, 3, 100),597	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),598	F(32000000, P_GPLL0_OUT_MAIN, 1, 1, 25),599	F(40000000, P_GPLL0_OUT_MAIN, 1, 1, 20),600	F(46400000, P_GPLL0_OUT_MAIN, 1, 29, 500),601	F(48000000, P_GPLL0_OUT_MAIN, 1, 3, 50),602	F(51200000, P_GPLL0_OUT_MAIN, 1, 8, 125),603	F(56000000, P_GPLL0_OUT_MAIN, 1, 7, 100),604	F(58982400, P_GPLL0_OUT_MAIN, 1, 1152, 15625),605	F(60000000, P_GPLL0_OUT_MAIN, 1, 3, 40),606	F(64000000, P_GPLL0_OUT_MAIN, 1, 2, 25),607	{ }608};609 610static struct clk_rcg2 blsp1_uart0_apps_clk_src = {611	.cmd_rcgr = 0x600c,612	.mnd_width = 16,613	.hid_width = 5,614	.parent_map = gcc_parent_map_0,615	.freq_tbl = ftbl_blsp1_uart0_apps_clk_src,616	.clkr.hw.init = &(struct clk_init_data){617		.name = "blsp1_uart0_apps_clk_src",618		.parent_data = gcc_parent_data_0,619		.num_parents = ARRAY_SIZE(gcc_parent_data_0),620		.ops = &clk_rcg2_ops,621	},622};623 624static struct clk_rcg2 blsp1_uart1_apps_clk_src = {625	.cmd_rcgr = 0x2044,626	.mnd_width = 16,627	.hid_width = 5,628	.parent_map = gcc_parent_map_0,629	.freq_tbl = ftbl_blsp1_uart0_apps_clk_src,630	.clkr.hw.init = &(struct clk_init_data){631		.name = "blsp1_uart1_apps_clk_src",632		.parent_data = gcc_parent_data_0,633		.num_parents = ARRAY_SIZE(gcc_parent_data_0),634		.ops = &clk_rcg2_ops,635	},636};637 638static struct clk_rcg2 blsp1_uart2_apps_clk_src = {639	.cmd_rcgr = 0x3034,640	.mnd_width = 16,641	.hid_width = 5,642	.parent_map = gcc_parent_map_0,643	.freq_tbl = ftbl_blsp1_uart0_apps_clk_src,644	.clkr.hw.init = &(struct clk_init_data){645		.name = "blsp1_uart2_apps_clk_src",646		.parent_data = gcc_parent_data_0,647		.num_parents = ARRAY_SIZE(gcc_parent_data_0),648		.ops = &clk_rcg2_ops,649	},650};651 652static struct clk_rcg2 blsp1_uart3_apps_clk_src = {653	.cmd_rcgr = 0x4014,654	.mnd_width = 16,655	.hid_width = 5,656	.cfg_off = 0x20,657	.parent_map = gcc_parent_map_0,658	.freq_tbl = ftbl_blsp1_uart0_apps_clk_src,659	.clkr.hw.init = &(struct clk_init_data){660		.name = "blsp1_uart3_apps_clk_src",661		.parent_data = gcc_parent_data_0,662		.num_parents = ARRAY_SIZE(gcc_parent_data_0),663		.ops = &clk_rcg2_ops,664	},665};666 667static struct clk_rcg2 blsp2_qup0_i2c_apps_clk_src = {668	.cmd_rcgr = 0xc00c,669	.mnd_width = 0,670	.hid_width = 5,671	.parent_map = gcc_parent_map_0,672	.freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,673	.clkr.hw.init = &(struct clk_init_data){674		.name = "blsp2_qup0_i2c_apps_clk_src",675		.parent_data = gcc_parent_data_0,676		.num_parents = ARRAY_SIZE(gcc_parent_data_0),677		.ops = &clk_rcg2_ops,678	},679};680 681static struct clk_rcg2 blsp2_qup0_spi_apps_clk_src = {682	.cmd_rcgr = 0xc024,683	.mnd_width = 8,684	.hid_width = 5,685	.parent_map = gcc_parent_map_0,686	.freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src,687	.clkr.hw.init = &(struct clk_init_data){688		.name = "blsp2_qup0_spi_apps_clk_src",689		.parent_data = gcc_parent_data_0,690		.num_parents = ARRAY_SIZE(gcc_parent_data_0),691		.ops = &clk_rcg2_ops,692	},693};694 695static struct clk_rcg2 blsp2_uart0_apps_clk_src = {696	.cmd_rcgr = 0xc044,697	.mnd_width = 16,698	.hid_width = 5,699	.parent_map = gcc_parent_map_0,700	.freq_tbl = ftbl_blsp1_uart0_apps_clk_src,701	.clkr.hw.init = &(struct clk_init_data){702		.name = "blsp2_uart0_apps_clk_src",703		.parent_data = gcc_parent_data_0,704		.num_parents = ARRAY_SIZE(gcc_parent_data_0),705		.ops = &clk_rcg2_ops,706	},707};708 709static struct clk_rcg2 byte0_clk_src = {710	.cmd_rcgr = 0x4d044,711	.mnd_width = 0,712	.hid_width = 5,713	.parent_map = gcc_parent_map_5,714	.clkr.hw.init = &(struct clk_init_data){715		.name = "byte0_clk_src",716		.parent_data = gcc_parent_data_5,717		.num_parents = ARRAY_SIZE(gcc_parent_data_5),718		.flags = CLK_SET_RATE_PARENT,719		.ops = &clk_byte2_ops,720	},721};722 723static const struct freq_tbl ftbl_emac_clk_src[] = {724	F(5000000,   P_GPLL1_OUT_MAIN, 2, 1, 50),725	F(50000000,  P_GPLL1_OUT_MAIN, 10, 0, 0),726	F(125000000, P_GPLL1_OUT_MAIN, 4, 0, 0),727	F(250000000, P_GPLL1_OUT_MAIN, 2, 0, 0),728	{ }729};730 731static struct clk_rcg2 emac_clk_src = {732	.cmd_rcgr = 0x4e01c,733	.mnd_width = 8,734	.hid_width = 5,735	.parent_map = gcc_parent_map_4,736	.freq_tbl = ftbl_emac_clk_src,737	.clkr.hw.init = &(struct clk_init_data){738		.name = "emac_clk_src",739		.parent_data = gcc_parent_data_4,740		.num_parents = ARRAY_SIZE(gcc_parent_data_4),741		.ops = &clk_rcg2_ops,742	},743};744 745static const struct freq_tbl ftbl_emac_ptp_clk_src[] = {746	F(50000000,  P_GPLL1_OUT_MAIN, 10, 0, 0),747	F(125000000, P_GPLL1_OUT_MAIN, 4, 0, 0),748	F(250000000, P_GPLL1_OUT_MAIN, 2, 0, 0),749	{ }750};751 752static struct clk_rcg2 emac_ptp_clk_src = {753	.cmd_rcgr = 0x4e014,754	.mnd_width = 0,755	.hid_width = 5,756	.parent_map = gcc_parent_map_4,757	.freq_tbl = ftbl_emac_ptp_clk_src,758	.clkr.hw.init = &(struct clk_init_data){759		.name = "emac_ptp_clk_src",760		.parent_data = gcc_parent_data_4,761		.num_parents = ARRAY_SIZE(gcc_parent_data_4),762		.ops = &clk_rcg2_ops,763	},764};765 766static const struct freq_tbl ftbl_esc0_clk_src[] = {767	F(19200000, P_XO, 1, 0, 0),768	{ }769};770 771static struct clk_rcg2 esc0_clk_src = {772	.cmd_rcgr = 0x4d05c,773	.mnd_width = 0,774	.hid_width = 5,775	.parent_map = gcc_parent_map_6,776	.freq_tbl = ftbl_esc0_clk_src,777	.clkr.hw.init = &(struct clk_init_data){778		.name = "esc0_clk_src",779		.parent_data = gcc_parent_data_6,780		.num_parents = ARRAY_SIZE(gcc_parent_data_6),781		.ops = &clk_rcg2_ops,782	},783};784 785static const struct freq_tbl ftbl_gfx3d_clk_src[] = {786	F(19200000,  P_XO, 1, 0, 0),787	F(50000000,  P_GPLL0_OUT_MAIN, 16, 0, 0),788	F(80000000,  P_GPLL0_OUT_MAIN, 10, 0, 0),789	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),790	F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),791	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),792	F(228571429, P_GPLL0_OUT_MAIN, 3.5, 0, 0),793	F(240000000, P_GPLL6_OUT_AUX,  4.5, 0, 0),794	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),795	F(270000000, P_GPLL6_OUT_AUX,  4, 0, 0),796	F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),797	F(400000000, P_GPLL0_OUT_MAIN, 2, 0, 0),798	F(484800000, P_GPLL3_OUT_MAIN, 1, 0, 0),799	F(523200000, P_GPLL3_OUT_MAIN, 1, 0, 0),800	F(550000000, P_GPLL3_OUT_MAIN, 1, 0, 0),801	F(598000000, P_GPLL3_OUT_MAIN, 1, 0, 0),802	{ }803};804 805static struct clk_rcg2 gfx3d_clk_src = {806	.cmd_rcgr = 0x59000,807	.mnd_width = 0,808	.hid_width = 5,809	.parent_map = gcc_parent_map_7,810	.freq_tbl = ftbl_gfx3d_clk_src,811	.clkr.hw.init = &(struct clk_init_data){812		.name = "gfx3d_clk_src",813		.parent_data = gcc_parent_data_7,814		.num_parents = ARRAY_SIZE(gcc_parent_data_7),815		.ops = &clk_rcg2_ops,816	},817};818 819static const struct freq_tbl ftbl_gp1_clk_src[] = {820	F(19200000, P_XO, 1, 0, 0),821	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),822	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),823	{ }824};825 826static struct clk_rcg2 gp1_clk_src = {827	.cmd_rcgr = 0x8004,828	.mnd_width = 8,829	.hid_width = 5,830	.parent_map = gcc_parent_map_2,831	.freq_tbl = ftbl_gp1_clk_src,832	.clkr.hw.init = &(struct clk_init_data){833		.name = "gp1_clk_src",834		.parent_data = gcc_parent_data_2,835		.num_parents = ARRAY_SIZE(gcc_parent_data_2),836		.ops = &clk_rcg2_ops,837	},838};839 840static struct clk_rcg2 gp2_clk_src = {841	.cmd_rcgr = 0x9004,842	.mnd_width = 8,843	.hid_width = 5,844	.parent_map = gcc_parent_map_2,845	.freq_tbl = ftbl_gp1_clk_src,846	.clkr.hw.init = &(struct clk_init_data){847		.name = "gp2_clk_src",848		.parent_data = gcc_parent_data_2,849		.num_parents = ARRAY_SIZE(gcc_parent_data_2),850		.ops = &clk_rcg2_ops,851	},852};853 854static struct clk_rcg2 gp3_clk_src = {855	.cmd_rcgr = 0xa004,856	.mnd_width = 8,857	.hid_width = 5,858	.parent_map = gcc_parent_map_2,859	.freq_tbl = ftbl_gp1_clk_src,860	.clkr.hw.init = &(struct clk_init_data){861		.name = "gp3_clk_src",862		.parent_data = gcc_parent_data_2,863		.num_parents = ARRAY_SIZE(gcc_parent_data_2),864		.ops = &clk_rcg2_ops,865	},866};867 868static struct clk_rcg2 hdmi_app_clk_src = {869	.cmd_rcgr = 0x4d0e4,870	.mnd_width = 0,871	.hid_width = 5,872	.parent_map = gcc_parent_map_1,873	.freq_tbl = ftbl_esc0_clk_src,874	.clkr.hw.init = &(struct clk_init_data){875		.name = "hdmi_app_clk_src",876		.parent_data = gcc_parent_data_1,877		.num_parents = ARRAY_SIZE(gcc_parent_data_1),878		.ops = &clk_rcg2_ops,879	},880};881 882static struct clk_rcg2 hdmi_pclk_clk_src = {883	.cmd_rcgr = 0x4d0dc,884	.mnd_width = 0,885	.hid_width = 5,886	.parent_map = gcc_parent_map_8,887	.freq_tbl = ftbl_esc0_clk_src,888	.clkr.hw.init = &(struct clk_init_data){889		.name = "hdmi_pclk_clk_src",890		.parent_data = gcc_parent_data_8,891		.num_parents = ARRAY_SIZE(gcc_parent_data_8),892		.ops = &clk_rcg2_ops,893	},894};895 896static const struct freq_tbl ftbl_mdp_clk_src[] = {897	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),898	F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),899	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),900	F(145454545, P_GPLL0_OUT_MAIN, 5.5, 0, 0),901	F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),902	F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),903	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),904	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),905	F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),906	{ }907};908 909static struct clk_rcg2 mdp_clk_src = {910	.cmd_rcgr = 0x4d014,911	.mnd_width = 0,912	.hid_width = 5,913	.parent_map = gcc_parent_map_9,914	.freq_tbl = ftbl_mdp_clk_src,915	.clkr.hw.init = &(struct clk_init_data){916		.name = "mdp_clk_src",917		.parent_data = gcc_parent_data_9,918		.num_parents = ARRAY_SIZE(gcc_parent_data_9),919		.ops = &clk_rcg2_ops,920	},921};922 923static const struct freq_tbl ftbl_pcie_0_aux_clk_src[] = {924	F(1200000, P_XO, 16, 0, 0),925	{ }926};927 928static struct clk_rcg2 pcie_0_aux_clk_src = {929	.cmd_rcgr = 0x3e024,930	.mnd_width = 16,931	.hid_width = 5,932	.parent_map = gcc_parent_map_10,933	.freq_tbl = ftbl_pcie_0_aux_clk_src,934	.clkr.hw.init = &(struct clk_init_data){935		.name = "pcie_0_aux_clk_src",936		.parent_data = gcc_parent_data_10,937		.num_parents = ARRAY_SIZE(gcc_parent_data_10),938		.ops = &clk_rcg2_ops,939	},940};941 942static const struct freq_tbl ftbl_pcie_0_pipe_clk_src[] = {943	F(19200000, P_XO, 1, 0, 0),944	F(125000000, P_PCIE_0_PIPE_CLK, 2, 0, 0),945	F(250000000, P_PCIE_0_PIPE_CLK, 1, 0, 0),946	{ }947};948 949static struct clk_rcg2 pcie_0_pipe_clk_src = {950	.cmd_rcgr = 0x3e01c,951	.mnd_width = 0,952	.hid_width = 5,953	.parent_map = gcc_parent_map_11,954	.freq_tbl = ftbl_pcie_0_pipe_clk_src,955	.clkr.hw.init = &(struct clk_init_data){956		.name = "pcie_0_pipe_clk_src",957		.parent_data = gcc_parent_data_11,958		.num_parents = ARRAY_SIZE(gcc_parent_data_11),959		.ops = &clk_rcg2_ops,960	},961};962 963static struct clk_rcg2 pclk0_clk_src = {964	.cmd_rcgr = 0x4d000,965	.mnd_width = 8,966	.hid_width = 5,967	.parent_map = gcc_parent_map_12,968	.clkr.hw.init = &(struct clk_init_data){969		.name = "pclk0_clk_src",970		.parent_data = gcc_parent_data_12,971		.num_parents = ARRAY_SIZE(gcc_parent_data_12),972		.flags = CLK_SET_RATE_PARENT,973		.ops = &clk_pixel_ops,974	},975};976 977static const struct freq_tbl ftbl_pdm2_clk_src[] = {978	F(19200000, P_XO, 1, 0, 0),979	F(64000000, P_GPLL0_OUT_MAIN, 12.5, 0, 0),980	{ }981};982 983static struct clk_rcg2 pdm2_clk_src = {984	.cmd_rcgr = 0x44010,985	.mnd_width = 0,986	.hid_width = 5,987	.parent_map = gcc_parent_map_0,988	.freq_tbl = ftbl_pdm2_clk_src,989	.clkr.hw.init = &(struct clk_init_data){990		.name = "pdm2_clk_src",991		.parent_data = gcc_parent_data_0,992		.num_parents = ARRAY_SIZE(gcc_parent_data_0),993		.ops = &clk_rcg2_ops,994	},995};996 997static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {998	F(144000, P_XO, 16, 3, 25),999	F(400000, P_XO, 12, 1, 4),1000	F(20000000, P_GPLL0_OUT_MAIN, 10, 1, 4),1001	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),1002	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),1003	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),1004	F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),1005	F(192000000, P_GPLL4_OUT_MAIN, 6, 0, 0),1006	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),1007	F(384000000, P_GPLL4_OUT_MAIN, 3, 0, 0),1008	{ }1009};1010 1011static struct clk_rcg2 sdcc1_apps_clk_src = {1012	.cmd_rcgr = 0x42004,1013	.mnd_width = 8,1014	.hid_width = 5,1015	.parent_map = gcc_parent_map_13,1016	.freq_tbl = ftbl_sdcc1_apps_clk_src,1017	.clkr.hw.init = &(struct clk_init_data){1018		.name = "sdcc1_apps_clk_src",1019		.parent_data = gcc_parent_data_13,1020		.num_parents = ARRAY_SIZE(gcc_parent_data_13),1021		.ops = &clk_rcg2_floor_ops,1022	},1023};1024 1025static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {1026	F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),1027	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),1028	{ }1029};1030 1031static struct clk_rcg2 sdcc1_ice_core_clk_src = {1032	.cmd_rcgr = 0x5d000,1033	.mnd_width = 8,1034	.hid_width = 5,1035	.parent_map = gcc_parent_map_3,1036	.freq_tbl = ftbl_sdcc1_ice_core_clk_src,1037	.clkr.hw.init = &(struct clk_init_data){1038		.name = "sdcc1_ice_core_clk_src",1039		.parent_data = gcc_parent_data_3,1040		.num_parents = ARRAY_SIZE(gcc_parent_data_3),1041		.ops = &clk_rcg2_ops,1042	},1043};1044 1045static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {1046	F(144000, P_XO, 16, 3, 25),1047	F(400000, P_XO, 12, 1, 4),1048	F(20000000, P_GPLL0_OUT_MAIN, 10, 1, 4),1049	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),1050	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),1051	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),1052	F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),1053	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),1054	{ }1055};1056 1057static struct clk_rcg2 sdcc2_apps_clk_src = {1058	.cmd_rcgr = 0x43004,1059	.mnd_width = 8,1060	.hid_width = 5,1061	.parent_map = gcc_parent_map_14,1062	.freq_tbl = ftbl_sdcc2_apps_clk_src,1063	.clkr.hw.init = &(struct clk_init_data){1064		.name = "sdcc2_apps_clk_src",1065		.parent_data = gcc_parent_data_14,1066		.num_parents = ARRAY_SIZE(gcc_parent_data_14),1067		.ops = &clk_rcg2_floor_ops,1068	},1069};1070 1071static struct clk_rcg2 usb20_mock_utmi_clk_src = {1072	.cmd_rcgr = 0x41048,1073	.mnd_width = 0,1074	.hid_width = 5,1075	.parent_map = gcc_parent_map_1,1076	.freq_tbl = ftbl_esc0_clk_src,1077	.clkr.hw.init = &(struct clk_init_data){1078		.name = "usb20_mock_utmi_clk_src",1079		.parent_data = gcc_parent_data_1,1080		.num_parents = ARRAY_SIZE(gcc_parent_data_1),1081		.ops = &clk_rcg2_ops,1082	},1083};1084 1085static const struct freq_tbl ftbl_usb30_master_clk_src[] = {1086	F(19200000, P_XO, 1, 0, 0),1087	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),1088	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),1089	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),1090	{ }1091};1092 1093static struct clk_rcg2 usb30_master_clk_src = {1094	.cmd_rcgr = 0x39028,1095	.mnd_width = 8,1096	.hid_width = 5,1097	.parent_map = gcc_parent_map_0,1098	.freq_tbl = ftbl_usb30_master_clk_src,1099	.clkr.hw.init = &(struct clk_init_data){1100		.name = "usb30_master_clk_src",1101		.parent_data = gcc_parent_data_0,1102		.num_parents = ARRAY_SIZE(gcc_parent_data_0),1103		.ops = &clk_rcg2_ops,1104	},1105};1106 1107static struct clk_rcg2 usb30_mock_utmi_clk_src = {1108	.cmd_rcgr = 0x3901c,1109	.mnd_width = 0,1110	.hid_width = 5,1111	.parent_map = gcc_parent_map_1,1112	.freq_tbl = ftbl_esc0_clk_src,1113	.clkr.hw.init = &(struct clk_init_data){1114		.name = "usb30_mock_utmi_clk_src",1115		.parent_data = gcc_parent_data_1,1116		.num_parents = ARRAY_SIZE(gcc_parent_data_1),1117		.ops = &clk_rcg2_ops,1118	},1119};1120 1121static struct clk_rcg2 usb3_phy_aux_clk_src = {1122	.cmd_rcgr = 0x3903c,1123	.mnd_width = 0,1124	.hid_width = 5,1125	.parent_map = gcc_parent_map_1,1126	.freq_tbl = ftbl_pcie_0_aux_clk_src,1127	.clkr.hw.init = &(struct clk_init_data){1128		.name = "usb3_phy_aux_clk_src",1129		.parent_data = gcc_parent_data_1,1130		.num_parents = ARRAY_SIZE(gcc_parent_data_1),1131		.ops = &clk_rcg2_ops,1132	},1133};1134 1135static const struct freq_tbl ftbl_usb_hs_system_clk_src[] = {1136	F(19200000, P_XO, 1, 0, 0),1137	F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),1138	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),1139	F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),1140	F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),1141	{ }1142};1143 1144static struct clk_rcg2 usb_hs_system_clk_src = {1145	.cmd_rcgr = 0x41010,1146	.mnd_width = 0,1147	.hid_width = 5,1148	.parent_map = gcc_parent_map_3,1149	.freq_tbl = ftbl_usb_hs_system_clk_src,1150	.clkr.hw.init = &(struct clk_init_data){1151		.name = "usb_hs_system_clk_src",1152		.parent_data = gcc_parent_data_3,1153		.num_parents = ARRAY_SIZE(gcc_parent_data_3),1154		.ops = &clk_rcg2_ops,1155	},1156};1157 1158static struct clk_rcg2 vsync_clk_src = {1159	.cmd_rcgr = 0x4d02c,1160	.mnd_width = 0,1161	.hid_width = 5,1162	.parent_map = gcc_parent_map_15,1163	.freq_tbl = ftbl_esc0_clk_src,1164	.clkr.hw.init = &(struct clk_init_data){1165		.name = "vsync_clk_src",1166		.parent_data = gcc_parent_data_15,1167		.num_parents = ARRAY_SIZE(gcc_parent_data_15),1168		.ops = &clk_rcg2_ops,1169	},1170};1171 1172static const struct freq_tbl ftbl_cdsp_bimc_clk_src[] = {1173	F(19200000, P_XO, 1, 0, 0),1174	F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),1175	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),1176	F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),1177	{ }1178};1179 1180static struct clk_rcg2 cdsp_bimc_clk_src = {1181	.cmd_rcgr = 0x5e010,1182	.mnd_width = 0,1183	.hid_width = 5,1184	.parent_map = gcc_parent_map_16,1185	.freq_tbl = ftbl_cdsp_bimc_clk_src,1186	.clkr.hw.init = &(struct clk_init_data) {1187		.name = "cdsp_bimc_clk_src",1188		.parent_data = gcc_parent_data_16,1189		.num_parents = ARRAY_SIZE(gcc_parent_data_16),1190		.ops = &clk_rcg2_ops,1191	},1192};1193 1194static struct clk_branch gcc_apss_ahb_clk = {1195	.halt_reg = 0x4601c,1196	.halt_check = BRANCH_HALT_VOTED,1197	.clkr = {1198		.enable_reg = 0x45004,1199		.enable_mask = BIT(14),1200		.hw.init = &(struct clk_init_data){1201			.name = "gcc_apss_ahb_clk",1202			.parent_hws = (const struct clk_hw*[]) {1203				&apss_ahb_clk_src.clkr.hw,1204			},1205			.num_parents = 1,1206			.flags = CLK_SET_RATE_PARENT,1207			.ops = &clk_branch2_ops,1208		},1209	},1210};1211 1212static struct clk_branch gcc_apss_tcu_clk = {1213	.halt_reg = 0x5b004,1214	.halt_check = BRANCH_VOTED,1215	.clkr = {1216		.enable_reg = 0x4500c,1217		.enable_mask = BIT(1),1218		.hw.init = &(struct clk_init_data){1219			.name = "gcc_apss_tcu_clk",1220			.ops = &clk_branch2_ops,1221		},1222	},1223};1224 1225static struct clk_branch gcc_bimc_gfx_clk = {1226	.halt_reg = 0x59034,1227	.halt_check = BRANCH_HALT,1228	.clkr = {1229		.enable_reg = 0x59034,1230		.enable_mask = BIT(0),1231		.hw.init = &(struct clk_init_data){1232			.name = "gcc_bimc_gfx_clk",1233			.ops = &clk_branch2_ops,1234			.parent_hws = (const struct clk_hw*[]) {1235				&gcc_apss_tcu_clk.clkr.hw,1236			},1237 1238		},1239	},1240};1241 1242static struct clk_branch gcc_bimc_gpu_clk = {1243	.halt_reg = 0x59030,1244	.halt_check = BRANCH_HALT,1245	.clkr = {1246		.enable_reg = 0x59030,1247		.enable_mask = BIT(0),1248		.hw.init = &(struct clk_init_data){1249			.name = "gcc_bimc_gpu_clk",1250			.ops = &clk_branch2_ops,1251		},1252	},1253};1254 1255static struct clk_branch gcc_bimc_cdsp_clk = {1256	.halt_reg = 0x31030,1257	.halt_check = BRANCH_HALT,1258	.clkr = {1259		.enable_reg = 0x31030,1260		.enable_mask = BIT(0),1261		.hw.init = &(struct clk_init_data) {1262			.name = "gcc_bimc_cdsp_clk",1263			.parent_hws = (const struct clk_hw*[]) {1264				&cdsp_bimc_clk_src.clkr.hw1265			},1266			.num_parents = 1,1267			.flags = CLK_SET_RATE_PARENT,1268			.ops = &clk_branch2_ops,1269		},1270	},1271};1272 1273static struct clk_branch gcc_bimc_mdss_clk = {1274	.halt_reg = 0x31038,1275	.halt_check = BRANCH_HALT,1276	.clkr = {1277		.enable_reg = 0x31038,1278		.enable_mask = BIT(0),1279		.hw.init = &(struct clk_init_data){1280			.name = "gcc_bimc_mdss_clk",1281			.ops = &clk_branch2_ops,1282		},1283	},1284};1285 1286static struct clk_branch gcc_blsp1_ahb_clk = {1287	.halt_reg = 0x1008,1288	.halt_check = BRANCH_HALT_VOTED,1289	.clkr = {1290		.enable_reg = 0x45004,1291		.enable_mask = BIT(10),1292		.hw.init = &(struct clk_init_data){1293			.name = "gcc_blsp1_ahb_clk",1294			.ops = &clk_branch2_ops,1295		},1296	},1297};1298 1299static struct clk_branch gcc_dcc_clk = {1300	.halt_reg = 0x77004,1301	.halt_check = BRANCH_HALT,1302	.clkr = {1303		.enable_reg = 0x77004,1304		.enable_mask = BIT(0),1305		.hw.init = &(struct clk_init_data){1306			.name = "gcc_dcc_clk",1307			.ops = &clk_branch2_ops,1308		},1309	},1310};1311 1312static struct clk_branch gcc_dcc_xo_clk = {1313	.halt_reg = 0x77008,1314	.halt_check = BRANCH_HALT,1315	.clkr = {1316		.enable_reg = 0x77008,1317		.enable_mask = BIT(0),1318		.hw.init = &(struct clk_init_data){1319			.name = "gcc_dcc_xo_clk",1320			.ops = &clk_branch2_ops,1321		},1322	},1323};1324 1325static struct clk_branch gcc_blsp1_qup0_i2c_apps_clk = {1326	.halt_reg = 0x6028,1327	.halt_check = BRANCH_HALT,1328	.clkr = {1329		.enable_reg = 0x6028,1330		.enable_mask = BIT(0),1331		.hw.init = &(struct clk_init_data){1332			.name = "gcc_blsp1_qup0_i2c_apps_clk",1333			.parent_hws = (const struct clk_hw*[]) {1334				&blsp1_qup0_i2c_apps_clk_src.clkr.hw,1335			},1336			.num_parents = 1,1337			.flags = CLK_SET_RATE_PARENT,1338			.ops = &clk_branch2_ops,1339		},1340	},1341};1342 1343static struct clk_branch gcc_blsp1_qup0_spi_apps_clk = {1344	.halt_reg = 0x6024,1345	.halt_check = BRANCH_HALT,1346	.clkr = {1347		.enable_reg = 0x6024,1348		.enable_mask = BIT(0),1349		.hw.init = &(struct clk_init_data){1350			.name = "gcc_blsp1_qup0_spi_apps_clk",1351			.parent_hws = (const struct clk_hw*[]) {1352				&blsp1_qup0_spi_apps_clk_src.clkr.hw,1353			},1354			.num_parents = 1,1355			.flags = CLK_SET_RATE_PARENT,1356			.ops = &clk_branch2_ops,1357		},1358	},1359};1360 1361static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {1362	.halt_reg = 0x2008,1363	.halt_check = BRANCH_HALT,1364	.clkr = {1365		.enable_reg = 0x2008,1366		.enable_mask = BIT(0),1367		.hw.init = &(struct clk_init_data){1368			.name = "gcc_blsp1_qup1_i2c_apps_clk",1369			.parent_hws = (const struct clk_hw*[]) {1370				&blsp1_qup1_i2c_apps_clk_src.clkr.hw,1371			},1372			.num_parents = 1,1373			.flags = CLK_SET_RATE_PARENT,1374			.ops = &clk_branch2_ops,1375		},1376	},1377};1378 1379static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {1380	.halt_reg = 0x2004,1381	.halt_check = BRANCH_HALT,1382	.clkr = {1383		.enable_reg = 0x2004,1384		.enable_mask = BIT(0),1385		.hw.init = &(struct clk_init_data){1386			.name = "gcc_blsp1_qup1_spi_apps_clk",1387			.parent_hws = (const struct clk_hw*[]) {1388				&blsp1_qup1_spi_apps_clk_src.clkr.hw,1389			},1390			.num_parents = 1,1391			.flags = CLK_SET_RATE_PARENT,1392			.ops = &clk_branch2_ops,1393		},1394	},1395};1396 1397static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {1398	.halt_reg = 0x3010,1399	.halt_check = BRANCH_HALT,1400	.clkr = {1401		.enable_reg = 0x3010,1402		.enable_mask = BIT(0),1403		.hw.init = &(struct clk_init_data){1404			.name = "gcc_blsp1_qup2_i2c_apps_clk",1405			.parent_hws = (const struct clk_hw*[]) {1406				&blsp1_qup2_i2c_apps_clk_src.clkr.hw,1407			},1408			.num_parents = 1,1409			.flags = CLK_SET_RATE_PARENT,1410			.ops = &clk_branch2_ops,1411		},1412	},1413};1414 1415static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {1416	.halt_reg = 0x300c,1417	.halt_check = BRANCH_HALT,1418	.clkr = {1419		.enable_reg = 0x300c,1420		.enable_mask = BIT(0),1421		.hw.init = &(struct clk_init_data){1422			.name = "gcc_blsp1_qup2_spi_apps_clk",1423			.parent_hws = (const struct clk_hw*[]) {1424				&blsp1_qup2_spi_apps_clk_src.clkr.hw,1425			},1426			.num_parents = 1,1427			.flags = CLK_SET_RATE_PARENT,1428			.ops = &clk_branch2_ops,1429		},1430	},1431};1432 1433static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {1434	.halt_reg = 0x4020,1435	.halt_check = BRANCH_HALT,1436	.clkr = {1437		.enable_reg = 0x4020,1438		.enable_mask = BIT(0),1439		.hw.init = &(struct clk_init_data){1440			.name = "gcc_blsp1_qup3_i2c_apps_clk",1441			.parent_hws = (const struct clk_hw*[]) {1442				&blsp1_qup3_i2c_apps_clk_src.clkr.hw,1443			},1444			.num_parents = 1,1445			.flags = CLK_SET_RATE_PARENT,1446			.ops = &clk_branch2_ops,1447		},1448	},1449};1450 1451static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {1452	.halt_reg = 0x401c,1453	.halt_check = BRANCH_HALT,1454	.clkr = {1455		.enable_reg = 0x401c,1456		.enable_mask = BIT(0),1457		.hw.init = &(struct clk_init_data){1458			.name = "gcc_blsp1_qup3_spi_apps_clk",1459			.parent_hws = (const struct clk_hw*[]) {1460				&blsp1_qup3_spi_apps_clk_src.clkr.hw,1461			},1462			.num_parents = 1,1463			.flags = CLK_SET_RATE_PARENT,1464			.ops = &clk_branch2_ops,1465		},1466	},1467};1468 1469static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {1470	.halt_reg = 0x5020,1471	.halt_check = BRANCH_HALT,1472	.clkr = {1473		.enable_reg = 0x5020,1474		.enable_mask = BIT(0),1475		.hw.init = &(struct clk_init_data){1476			.name = "gcc_blsp1_qup4_i2c_apps_clk",1477			.parent_hws = (const struct clk_hw*[]) {1478				&blsp1_qup4_i2c_apps_clk_src.clkr.hw,1479			},1480			.num_parents = 1,1481			.flags = CLK_SET_RATE_PARENT,1482			.ops = &clk_branch2_ops,1483		},1484	},1485};1486 1487static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {1488	.halt_reg = 0x501c,1489	.halt_check = BRANCH_HALT,1490	.clkr = {1491		.enable_reg = 0x501c,1492		.enable_mask = BIT(0),1493		.hw.init = &(struct clk_init_data){1494			.name = "gcc_blsp1_qup4_spi_apps_clk",1495			.parent_hws = (const struct clk_hw*[]) {1496				&blsp1_qup4_spi_apps_clk_src.clkr.hw,1497			},1498			.num_parents = 1,1499			.flags = CLK_SET_RATE_PARENT,1500			.ops = &clk_branch2_ops,1501		},1502	},1503};1504 1505static struct clk_branch gcc_blsp1_uart0_apps_clk = {1506	.halt_reg = 0x6004,1507	.halt_check = BRANCH_HALT,1508	.clkr = {1509		.enable_reg = 0x6004,1510		.enable_mask = BIT(0),1511		.hw.init = &(struct clk_init_data){1512			.name = "gcc_blsp1_uart0_apps_clk",1513			.parent_hws = (const struct clk_hw*[]) {1514				&blsp1_uart0_apps_clk_src.clkr.hw,1515			},1516			.num_parents = 1,1517			.flags = CLK_SET_RATE_PARENT,1518			.ops = &clk_branch2_ops,1519		},1520	},1521};1522 1523static struct clk_branch gcc_blsp1_uart1_apps_clk = {1524	.halt_reg = 0x203c,1525	.halt_check = BRANCH_HALT,1526	.clkr = {1527		.enable_reg = 0x203c,1528		.enable_mask = BIT(0),1529		.hw.init = &(struct clk_init_data){1530			.name = "gcc_blsp1_uart1_apps_clk",1531			.parent_hws = (const struct clk_hw*[]) {1532				&blsp1_uart1_apps_clk_src.clkr.hw,1533			},1534			.num_parents = 1,1535			.flags = CLK_SET_RATE_PARENT,1536			.ops = &clk_branch2_ops,1537		},1538	},1539};1540 1541static struct clk_branch gcc_blsp1_uart2_apps_clk = {1542	.halt_reg = 0x302c,1543	.halt_check = BRANCH_HALT,1544	.clkr = {1545		.enable_reg = 0x302c,1546		.enable_mask = BIT(0),1547		.hw.init = &(struct clk_init_data){1548			.name = "gcc_blsp1_uart2_apps_clk",1549			.parent_hws = (const struct clk_hw*[]) {1550				&blsp1_uart2_apps_clk_src.clkr.hw,1551			},1552			.num_parents = 1,1553			.flags = CLK_SET_RATE_PARENT,1554			.ops = &clk_branch2_ops,1555		},1556	},1557};1558 1559static struct clk_branch gcc_blsp1_uart3_apps_clk = {1560	.halt_reg = 0x400c,1561	.halt_check = BRANCH_HALT,1562	.clkr = {1563		.enable_reg = 0x400c,1564		.enable_mask = BIT(0),1565		.hw.init = &(struct clk_init_data){1566			.name = "gcc_blsp1_uart3_apps_clk",1567			.parent_hws = (const struct clk_hw*[]) {1568				&blsp1_uart3_apps_clk_src.clkr.hw,1569			},1570			.num_parents = 1,1571			.flags = CLK_SET_RATE_PARENT,1572			.ops = &clk_branch2_ops,1573		},1574	},1575};1576 1577static struct clk_branch gcc_blsp2_ahb_clk = {1578	.halt_reg = 0xb008,1579	.halt_check = BRANCH_HALT_VOTED,1580	.clkr = {1581		.enable_reg = 0x45004,1582		.enable_mask = BIT(20),1583		.hw.init = &(struct clk_init_data){1584			.name = "gcc_blsp2_ahb_clk",1585			.ops = &clk_branch2_ops,1586		},1587	},1588};1589 1590static struct clk_branch gcc_blsp2_qup0_i2c_apps_clk = {1591	.halt_reg = 0xc008,1592	.halt_check = BRANCH_HALT,1593	.clkr = {1594		.enable_reg = 0xc008,1595		.enable_mask = BIT(0),1596		.hw.init = &(struct clk_init_data){1597			.name = "gcc_blsp2_qup0_i2c_apps_clk",1598			.parent_hws = (const struct clk_hw*[]) {1599				&blsp2_qup0_i2c_apps_clk_src.clkr.hw,1600			},1601			.num_parents = 1,1602			.flags = CLK_SET_RATE_PARENT,1603			.ops = &clk_branch2_ops,1604		},1605	},1606};1607 1608static struct clk_branch gcc_blsp2_qup0_spi_apps_clk = {1609	.halt_reg = 0xc004,1610	.halt_check = BRANCH_HALT,1611	.clkr = {1612		.enable_reg = 0xc004,1613		.enable_mask = BIT(0),1614		.hw.init = &(struct clk_init_data){1615			.name = "gcc_blsp2_qup0_spi_apps_clk",1616			.parent_hws = (const struct clk_hw*[]) {1617				&blsp2_qup0_spi_apps_clk_src.clkr.hw,1618			},1619			.num_parents = 1,1620			.flags = CLK_SET_RATE_PARENT,1621			.ops = &clk_branch2_ops,1622		},1623	},1624};1625 1626static struct clk_branch gcc_blsp2_uart0_apps_clk = {1627	.halt_reg = 0xc03c,1628	.halt_check = BRANCH_HALT,1629	.clkr = {1630		.enable_reg = 0xc03c,1631		.enable_mask = BIT(0),1632		.hw.init = &(struct clk_init_data){1633			.name = "gcc_blsp2_uart0_apps_clk",1634			.parent_hws = (const struct clk_hw*[]) {1635				&blsp2_uart0_apps_clk_src.clkr.hw,1636			},1637			.num_parents = 1,1638			.flags = CLK_SET_RATE_PARENT,1639			.ops = &clk_branch2_ops,1640		},1641	},1642};1643 1644static struct clk_branch gcc_boot_rom_ahb_clk = {1645	.halt_reg = 0x1300c,1646	.halt_check = BRANCH_HALT_VOTED,1647	.clkr = {1648		.enable_reg = 0x45004,1649		.enable_mask = BIT(7),1650		.hw.init = &(struct clk_init_data){1651			.name = "gcc_boot_rom_ahb_clk",1652			.ops = &clk_branch2_ops,1653		},1654	},1655};1656 1657static struct clk_branch gcc_crypto_ahb_clk = {1658	.halt_reg = 0x16024,1659	.halt_check = BRANCH_VOTED,1660	.clkr = {1661		.enable_reg = 0x45004,1662		.enable_mask = BIT(0),1663		.hw.init = &(struct clk_init_data){1664			.name = "gcc_crypto_ahb_clk",1665			.ops = &clk_branch2_ops,1666		},1667	},1668};1669 1670static struct clk_branch gcc_crypto_axi_clk = {1671	.halt_reg = 0x16020,1672	.halt_check = BRANCH_VOTED,1673	.clkr = {1674		.enable_reg = 0x45004,1675		.enable_mask = BIT(1),1676		.hw.init = &(struct clk_init_data){1677			.name = "gcc_crypto_axi_clk",1678			.ops = &clk_branch2_ops,1679		},1680	},1681};1682 1683static struct clk_branch gcc_crypto_clk = {1684	.halt_reg = 0x1601c,1685	.halt_check = BRANCH_VOTED,1686	.clkr = {1687		.enable_reg = 0x45004,1688		.enable_mask = BIT(2),1689		.hw.init = &(struct clk_init_data){1690			.name = "gcc_crypto_clk",1691			.ops = &clk_branch2_ops,1692		},1693	},1694};1695 1696static struct clk_branch gcc_eth_axi_clk = {1697	.halt_reg = 0x4e010,1698	.halt_check = BRANCH_HALT,1699	.clkr = {1700		.enable_reg = 0x4e010,1701		.enable_mask = BIT(0),1702		.hw.init = &(struct clk_init_data){1703			.name = "gcc_eth_axi_clk",1704			.ops = &clk_branch2_ops,1705		},1706	},1707};1708 1709static struct clk_branch gcc_eth_ptp_clk = {1710	.halt_reg = 0x4e004,1711	.halt_check = BRANCH_HALT,1712	.clkr = {1713		.enable_reg = 0x4e004,1714		.enable_mask = BIT(0),1715		.hw.init = &(struct clk_init_data){1716			.name = "gcc_eth_ptp_clk",1717			.parent_hws = (const struct clk_hw*[]) {1718				&emac_ptp_clk_src.clkr.hw,1719			},1720			.num_parents = 1,1721			.flags = CLK_SET_RATE_PARENT,1722			.ops = &clk_branch2_ops,1723		},1724	},1725};1726 1727static struct clk_branch gcc_eth_rgmii_clk = {1728	.halt_reg = 0x4e008,1729	.halt_check = BRANCH_HALT,1730	.clkr = {1731		.enable_reg = 0x4e008,1732		.enable_mask = BIT(0),1733		.hw.init = &(struct clk_init_data){1734			.name = "gcc_eth_rgmii_clk",1735			.parent_hws = (const struct clk_hw*[]) {1736				&emac_clk_src.clkr.hw,1737			},1738			.num_parents = 1,1739			.flags = CLK_SET_RATE_PARENT,1740			.ops = &clk_branch2_ops,1741		},1742	},1743};1744 1745static struct clk_branch gcc_eth_slave_ahb_clk = {1746	.halt_reg = 0x4e00c,1747	.halt_check = BRANCH_HALT,1748	.clkr = {1749		.enable_reg = 0x4e00c,1750		.enable_mask = BIT(0),1751		.hw.init = &(struct clk_init_data){1752			.name = "gcc_eth_slave_ahb_clk",1753			.ops = &clk_branch2_ops,1754		},1755	},1756};1757 1758static struct clk_branch gcc_geni_ir_s_clk = {1759	.halt_reg = 0xf008,1760	.halt_check = BRANCH_HALT,1761	.clkr = {1762		.enable_reg = 0xf008,1763		.enable_mask = BIT(0),1764		.hw.init = &(struct clk_init_data){1765			.name = "gcc_geni_ir_s_clk",1766			.ops = &clk_branch2_ops,1767		},1768	},1769};1770 1771static struct clk_branch gcc_geni_ir_h_clk = {1772	.halt_reg = 0xf004,1773	.halt_check = BRANCH_HALT,1774	.clkr = {1775		.enable_reg = 0xf004,1776		.enable_mask = BIT(0),1777		.hw.init = &(struct clk_init_data){1778			.name = "gcc_geni_ir_h_clk",1779			.ops = &clk_branch2_ops,1780		},1781	},1782};1783 1784static struct clk_branch gcc_gfx_tcu_clk = {1785	.halt_reg = 0x12020,1786	.halt_check = BRANCH_VOTED,1787	.clkr = {1788		.enable_reg = 0x4500C,1789		.enable_mask = BIT(2),1790		.hw.init = &(struct clk_init_data){1791			.name = "gcc_gfx_tcu_clk",1792			.ops = &clk_branch2_ops,1793		},1794	},1795};1796 1797static struct clk_branch gcc_gfx_tbu_clk = {1798	.halt_reg = 0x12010,1799	.halt_check = BRANCH_VOTED,1800	.clkr = {1801		.enable_reg = 0x4500C,1802		.enable_mask = BIT(3),1803		.hw.init = &(struct clk_init_data){1804			.name = "gcc_gfx_tbu_clk",1805			.ops = &clk_branch2_ops,1806		},1807	},1808};1809 1810static struct clk_branch gcc_cdsp_tbu_clk = {1811	.halt_reg = 0x1203c,1812	.halt_check = BRANCH_VOTED,1813	.clkr = {1814		.enable_reg = 0x13020,1815		.enable_mask = BIT(9),1816		.hw.init = &(struct clk_init_data) {1817			.name = "gcc_cdsp_tbu_clk",1818			.parent_hws = (const struct clk_hw*[]) {1819				&cdsp_bimc_clk_src.clkr.hw1820			},1821			.num_parents = 1,1822			.flags = CLK_SET_RATE_PARENT,1823			.ops = &clk_branch2_ops,1824		},1825	},1826};1827 1828static struct clk_branch gcc_gp1_clk = {1829	.halt_reg = 0x8000,1830	.halt_check = BRANCH_HALT,1831	.clkr = {1832		.enable_reg = 0x8000,1833		.enable_mask = BIT(0),1834		.hw.init = &(struct clk_init_data){1835			.name = "gcc_gp1_clk",1836			.parent_hws = (const struct clk_hw*[]) {1837				&gp1_clk_src.clkr.hw,1838			},1839			.num_parents = 1,1840			.flags = CLK_SET_RATE_PARENT,1841			.ops = &clk_branch2_ops,1842		},1843	},1844};1845 1846static struct clk_branch gcc_gp2_clk = {1847	.halt_reg = 0x9000,1848	.halt_check = BRANCH_HALT,1849	.clkr = {1850		.enable_reg = 0x9000,1851		.enable_mask = BIT(0),1852		.hw.init = &(struct clk_init_data){1853			.name = "gcc_gp2_clk",1854			.parent_hws = (const struct clk_hw*[]) {1855				&gp2_clk_src.clkr.hw,1856			},1857			.num_parents = 1,1858			.flags = CLK_SET_RATE_PARENT,1859			.ops = &clk_branch2_ops,1860		},1861	},1862};1863 1864static struct clk_branch gcc_gp3_clk = {1865	.halt_reg = 0xa000,1866	.halt_check = BRANCH_HALT,1867	.clkr = {1868		.enable_reg = 0xa000,1869		.enable_mask = BIT(0),1870		.hw.init = &(struct clk_init_data){1871			.name = "gcc_gp3_clk",1872			.parent_hws = (const struct clk_hw*[]) {1873				&gp3_clk_src.clkr.hw,1874			},1875			.num_parents = 1,1876			.flags = CLK_SET_RATE_PARENT,1877			.ops = &clk_branch2_ops,1878		},1879	},1880};1881 1882static struct clk_branch gcc_gtcu_ahb_clk = {1883	.halt_reg = 0x12044,1884	.halt_check = BRANCH_VOTED,1885	.clkr = {1886		.enable_reg = 0x4500c,1887		.enable_mask = BIT(13),1888		.hw.init = &(struct clk_init_data){1889			.name = "gcc_gtcu_ahb_clk",1890			.ops = &clk_branch2_ops,1891		},1892	},1893};1894 1895static struct clk_branch gcc_mdp_tbu_clk = {1896	.halt_reg = 0x1201c,1897	.halt_check = BRANCH_VOTED,1898	.clkr = {1899		.enable_reg = 0x4500c,1900		.enable_mask = BIT(4),1901		.hw.init = &(struct clk_init_data){1902			.name = "gcc_mdp_tbu_clk",1903			.ops = &clk_branch2_ops,1904		},1905	},1906};1907 1908static struct clk_branch gcc_mdss_ahb_clk = {1909	.halt_reg = 0x4d07c,1910	.halt_check = BRANCH_HALT,1911	.clkr = {1912		.enable_reg = 0x4d07c,1913		.enable_mask = BIT(0),1914		.hw.init = &(struct clk_init_data){1915			.name = "gcc_mdss_ahb_clk",1916			.ops = &clk_branch2_ops,1917		},1918	},1919};1920 1921static struct clk_branch gcc_mdss_axi_clk = {1922	.halt_reg = 0x4d080,1923	.halt_check = BRANCH_HALT,1924	.clkr = {1925		.enable_reg = 0x4d080,1926		.enable_mask = BIT(0),1927		.hw.init = &(struct clk_init_data){1928			.name = "gcc_mdss_axi_clk",1929			.ops = &clk_branch2_ops,1930		},1931	},1932};1933 1934static struct clk_branch gcc_mdss_byte0_clk = {1935	.halt_reg = 0x4d094,1936	.halt_check = BRANCH_HALT,1937	.clkr = {1938		.enable_reg = 0x4d094,1939		.enable_mask = BIT(0),1940		.hw.init = &(struct clk_init_data){1941			.name = "gcc_mdss_byte0_clk",1942			.parent_hws = (const struct clk_hw*[]) {1943				&byte0_clk_src.clkr.hw,1944			},1945			.num_parents = 1,1946			.flags = CLK_SET_RATE_PARENT,1947			.ops = &clk_branch2_ops,1948		},1949	},1950};1951 1952static struct clk_branch gcc_mdss_esc0_clk = {1953	.halt_reg = 0x4d098,1954	.halt_check = BRANCH_HALT,1955	.clkr = {1956		.enable_reg = 0x4d098,1957		.enable_mask = BIT(0),1958		.hw.init = &(struct clk_init_data){1959			.name = "gcc_mdss_esc0_clk",1960			.parent_hws = (const struct clk_hw*[]) {1961				&esc0_clk_src.clkr.hw,1962			},1963			.num_parents = 1,1964			.flags = CLK_SET_RATE_PARENT,1965			.ops = &clk_branch2_ops,1966		},1967	},1968};1969 1970static struct clk_branch gcc_mdss_hdmi_app_clk = {1971	.halt_reg = 0x4d0d8,1972	.halt_check = BRANCH_HALT,1973	.clkr = {1974		.enable_reg = 0x4d0d8,1975		.enable_mask = BIT(0),1976		.hw.init = &(struct clk_init_data){1977			.name = "gcc_mdss_hdmi_app_clk",1978			.parent_hws = (const struct clk_hw*[]) {1979				&hdmi_app_clk_src.clkr.hw,1980			},1981			.num_parents = 1,1982			.flags = CLK_SET_RATE_PARENT,1983			.ops = &clk_branch2_ops,1984		},1985	},1986};1987 1988static struct clk_branch gcc_mdss_hdmi_pclk_clk = {1989	.halt_reg = 0x4d0d4,1990	.halt_check = BRANCH_HALT,1991	.clkr = {1992		.enable_reg = 0x4d0d4,1993		.enable_mask = BIT(0),1994		.hw.init = &(struct clk_init_data){1995			.name = "gcc_mdss_hdmi_pclk_clk",1996			.parent_hws = (const struct clk_hw*[]) {1997				&hdmi_pclk_clk_src.clkr.hw,1998			},1999			.num_parents = 1,2000			.flags = CLK_SET_RATE_PARENT,2001			.ops = &clk_branch2_ops,2002		},2003	},2004};2005 2006static struct clk_branch gcc_mdss_mdp_clk = {2007	.halt_reg = 0x4d088,2008	.halt_check = BRANCH_HALT,2009	.clkr = {2010		.enable_reg = 0x4d088,2011		.enable_mask = BIT(0),2012		.hw.init = &(struct clk_init_data){2013			.name = "gcc_mdss_mdp_clk",2014			.parent_hws = (const struct clk_hw*[]) {2015				&mdp_clk_src.clkr.hw,2016			},2017			.num_parents = 1,2018			.flags = CLK_SET_RATE_PARENT,2019			.ops = &clk_branch2_ops,2020		},2021	},2022};2023 2024static struct clk_branch gcc_mdss_pclk0_clk = {2025	.halt_reg = 0x4d084,2026	.halt_check = BRANCH_HALT,2027	.clkr = {2028		.enable_reg = 0x4d084,2029		.enable_mask = BIT(0),2030		.hw.init = &(struct clk_init_data){2031			.name = "gcc_mdss_pclk0_clk",2032			.parent_hws = (const struct clk_hw*[]) {2033				&pclk0_clk_src.clkr.hw,2034			},2035			.num_parents = 1,2036			.flags = CLK_SET_RATE_PARENT,2037			.ops = &clk_branch2_ops,2038		},2039	},2040};2041 2042static struct clk_branch gcc_mdss_vsync_clk = {2043	.halt_reg = 0x4d090,2044	.halt_check = BRANCH_HALT,2045	.clkr = {2046		.enable_reg = 0x4d090,2047		.enable_mask = BIT(0),2048		.hw.init = &(struct clk_init_data){2049			.name = "gcc_mdss_vsync_clk",2050			.parent_hws = (const struct clk_hw*[]) {2051				&vsync_clk_src.clkr.hw,2052			},2053			.num_parents = 1,2054			.flags = CLK_SET_RATE_PARENT,2055			.ops = &clk_branch2_ops,2056		},2057	},2058};2059 2060static struct clk_branch gcc_oxili_ahb_clk = {2061	.halt_reg = 0x59028,2062	.halt_check = BRANCH_HALT,2063	.clkr = {2064		.enable_reg = 0x59028,2065		.enable_mask = BIT(0),2066		.hw.init = &(struct clk_init_data){2067			.name = "gcc_oxili_ahb_clk",2068			.ops = &clk_branch2_ops,2069		},2070	},2071};2072 2073static struct clk_branch gcc_oxili_gfx3d_clk = {2074	.halt_reg = 0x59020,2075	.halt_check = BRANCH_HALT,2076	.clkr = {2077		.enable_reg = 0x59020,2078		.enable_mask = BIT(0),2079		.hw.init = &(struct clk_init_data){2080			.name = "gcc_oxili_gfx3d_clk",2081			.parent_hws = (const struct clk_hw*[]) {2082				&gfx3d_clk_src.clkr.hw,2083			},2084			.num_parents = 1,2085			.flags = CLK_SET_RATE_PARENT,2086			.ops = &clk_branch2_ops,2087		},2088	},2089};2090 2091static struct clk_branch gcc_pcie_0_aux_clk = {2092	.halt_reg = 0x3e014,2093	.halt_check = BRANCH_HALT_VOTED,2094	.clkr = {2095		.enable_reg = 0x45004,2096		.enable_mask = BIT(27),2097		.hw.init = &(struct clk_init_data){2098			.name = "gcc_pcie_0_aux_clk",2099			.parent_hws = (const struct clk_hw*[]) {2100				&pcie_0_aux_clk_src.clkr.hw,2101			},2102			.num_parents = 1,2103			.flags = CLK_SET_RATE_PARENT,2104			.ops = &clk_branch2_ops,2105		},2106	},2107};2108 2109static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {2110	.halt_reg = 0x3e008,2111	.halt_check = BRANCH_HALT_VOTED,2112	.clkr = {2113		.enable_reg = 0x45004,2114		.enable_mask = BIT(11),2115		.hw.init = &(struct clk_init_data){2116			.name = "gcc_pcie_0_cfg_ahb_clk",2117			.ops = &clk_branch2_ops,2118		},2119	},2120};2121 2122static struct clk_branch gcc_pcie_0_mstr_axi_clk = {2123	.halt_reg = 0x3e018,2124	.halt_check = BRANCH_HALT_VOTED,2125	.clkr = {2126		.enable_reg = 0x45004,2127		.enable_mask = BIT(18),2128		.hw.init = &(struct clk_init_data){2129			.name = "gcc_pcie_0_mstr_axi_clk",2130			.ops = &clk_branch2_ops,2131		},2132	},2133};2134 2135static struct clk_branch gcc_pcie_0_pipe_clk = {2136	.halt_reg = 0x3e00c,2137	.halt_check = BRANCH_HALT_VOTED,2138	.clkr = {2139		.enable_reg = 0x45004,2140		.enable_mask = BIT(28),2141		.hw.init = &(struct clk_init_data){2142			.name = "gcc_pcie_0_pipe_clk",2143			.parent_hws = (const struct clk_hw*[]) {2144				&pcie_0_pipe_clk_src.clkr.hw,2145			},2146			.num_parents = 1,2147			.flags = CLK_SET_RATE_PARENT,2148			.ops = &clk_branch2_ops,2149		},2150	},2151};2152 2153static struct clk_branch gcc_pcie_0_slv_axi_clk = {2154	.halt_reg = 0x3e010,2155	.halt_check = BRANCH_HALT_VOTED,2156	.clkr = {2157		.enable_reg = 0x45004,2158		.enable_mask = BIT(22),2159		.hw.init = &(struct clk_init_data){2160			.name = "gcc_pcie_0_slv_axi_clk",2161			.ops = &clk_branch2_ops,2162		},2163	},2164};2165 2166static struct clk_branch gcc_pcnoc_usb2_clk = {2167	.halt_reg = 0x27008,2168	.halt_check = BRANCH_HALT,2169	.clkr = {2170		.enable_reg = 0x27008,2171		.enable_mask = BIT(0),2172		.hw.init = &(struct clk_init_data){2173			.name = "gcc_pcnoc_usb2_clk",2174			.flags = CLK_IS_CRITICAL,2175			.ops = &clk_branch2_ops,2176		},2177	},2178};2179 2180static struct clk_branch gcc_pcnoc_usb3_clk = {2181	.halt_reg = 0x2700c,2182	.halt_check = BRANCH_HALT,2183	.clkr = {2184		.enable_reg = 0x2700c,2185		.enable_mask = BIT(0),2186		.hw.init = &(struct clk_init_data){2187			.name = "gcc_pcnoc_usb3_clk",2188			.flags = CLK_IS_CRITICAL,2189			.ops = &clk_branch2_ops,2190		},2191	},2192};2193 2194static struct clk_branch gcc_pdm2_clk = {2195	.halt_reg = 0x4400c,2196	.halt_check = BRANCH_HALT,2197	.clkr = {2198		.enable_reg = 0x4400c,2199		.enable_mask = BIT(0),2200		.hw.init = &(struct clk_init_data){2201			.name = "gcc_pdm2_clk",2202			.parent_hws = (const struct clk_hw*[]) {2203				&pdm2_clk_src.clkr.hw,2204			},2205			.num_parents = 1,2206			.flags = CLK_SET_RATE_PARENT,2207			.ops = &clk_branch2_ops,2208		},2209	},2210};2211 2212static struct clk_branch gcc_pdm_ahb_clk = {2213	.halt_reg = 0x44004,2214	.halt_check = BRANCH_HALT,2215	.clkr = {2216		.enable_reg = 0x44004,2217		.enable_mask = BIT(0),2218		.hw.init = &(struct clk_init_data){2219			.name = "gcc_pdm_ahb_clk",2220			.ops = &clk_branch2_ops,2221		},2222	},2223};2224 2225static struct clk_branch gcc_prng_ahb_clk = {2226	.halt_reg = 0x13004,2227	.halt_check = BRANCH_HALT_VOTED,2228	.clkr = {2229		.enable_reg = 0x45004,2230		.enable_mask = BIT(8),2231		.hw.init = &(struct clk_init_data){2232			.name = "gcc_prng_ahb_clk",2233			.ops = &clk_branch2_ops,2234		},2235	},2236};2237 2238/* PWM clks do not have XO as parent as src clk is a balance root */2239static struct clk_branch gcc_pwm0_xo512_clk = {2240	.halt_reg = 0x44018,2241	.halt_check = BRANCH_HALT,2242	.clkr = {2243		.enable_reg = 0x44018,2244		.enable_mask = BIT(0),2245		.hw.init = &(struct clk_init_data){2246			.name = "gcc_pwm0_xo512_clk",2247			.ops = &clk_branch2_ops,2248		},2249	},2250};2251 2252static struct clk_branch gcc_pwm1_xo512_clk = {2253	.halt_reg = 0x49004,2254	.halt_check = BRANCH_HALT,2255	.clkr = {2256		.enable_reg = 0x49004,2257		.enable_mask = BIT(0),2258		.hw.init = &(struct clk_init_data){2259			.name = "gcc_pwm1_xo512_clk",2260			.ops = &clk_branch2_ops,2261		},2262	},2263};2264 2265static struct clk_branch gcc_pwm2_xo512_clk = {2266	.halt_reg = 0x4a004,2267	.halt_check = BRANCH_HALT,2268	.clkr = {2269		.enable_reg = 0x4a004,2270		.enable_mask = BIT(0),2271		.hw.init = &(struct clk_init_data){2272			.name = "gcc_pwm2_xo512_clk",2273			.ops = &clk_branch2_ops,2274		},2275	},2276};2277 2278static struct clk_branch gcc_qdss_dap_clk = {2279	.halt_reg = 0x29084,2280	.halt_check = BRANCH_VOTED,2281	.clkr = {2282		.enable_reg = 0x45004,2283		.enable_mask = BIT(21),2284		.hw.init = &(struct clk_init_data){2285			.name = "gcc_qdss_dap_clk",2286			.ops = &clk_branch2_ops,2287		},2288	},2289};2290 2291static struct clk_branch gcc_sdcc1_ahb_clk = {2292	.halt_reg = 0x4201c,2293	.halt_check = BRANCH_HALT,2294	.clkr = {2295		.enable_reg = 0x4201c,2296		.enable_mask = BIT(0),2297		.hw.init = &(struct clk_init_data){2298			.name = "gcc_sdcc1_ahb_clk",2299			.ops = &clk_branch2_ops,2300		},2301	},2302};2303 2304static struct clk_branch gcc_sdcc1_apps_clk = {2305	.halt_reg = 0x42018,2306	.halt_check = BRANCH_HALT,2307	.clkr = {2308		.enable_reg = 0x42018,2309		.enable_mask = BIT(0),2310		.hw.init = &(struct clk_init_data){2311			.name = "gcc_sdcc1_apps_clk",2312			.parent_hws = (const struct clk_hw*[]) {2313				&sdcc1_apps_clk_src.clkr.hw,2314			},2315			.num_parents = 1,2316			.flags = CLK_SET_RATE_PARENT,2317			.ops = &clk_branch2_ops,2318		},2319	},2320};2321 2322static struct clk_branch gcc_sdcc1_ice_core_clk = {2323	.halt_reg = 0x5d014,2324	.halt_check = BRANCH_HALT,2325	.clkr = {2326		.enable_reg = 0x5d014,2327		.enable_mask = BIT(0),2328		.hw.init = &(struct clk_init_data){2329			.name = "gcc_sdcc1_ice_core_clk",2330			.parent_hws = (const struct clk_hw*[]) {2331				&sdcc1_ice_core_clk_src.clkr.hw,2332			},2333			.num_parents = 1,2334			.flags = CLK_SET_RATE_PARENT,2335			.ops = &clk_branch2_ops,2336		},2337	},2338};2339 2340static struct clk_branch gcc_cdsp_cfg_ahb_clk = {2341	.halt_reg = 0x5e004,2342	.halt_check = BRANCH_HALT,2343	.clkr = {2344		.enable_reg = 0x5e004,2345		.enable_mask = BIT(0),2346		.hw.init = &(struct clk_init_data) {2347			.name = "gcc_cdsp_cfg_ahb_cbcr",2348			.ops = &clk_branch2_ops,2349		},2350	},2351};2352 2353static struct clk_branch gcc_sdcc2_ahb_clk = {2354	.halt_reg = 0x4301c,2355	.halt_check = BRANCH_HALT,2356	.clkr = {2357		.enable_reg = 0x4301c,2358		.enable_mask = BIT(0),2359		.hw.init = &(struct clk_init_data){2360			.name = "gcc_sdcc2_ahb_clk",2361			.ops = &clk_branch2_ops,2362		},2363	},2364};2365 2366static struct clk_branch gcc_sdcc2_apps_clk = {2367	.halt_reg = 0x43018,2368	.halt_check = BRANCH_HALT,2369	.clkr = {2370		.enable_reg = 0x43018,2371		.enable_mask = BIT(0),2372		.hw.init = &(struct clk_init_data){2373			.name = "gcc_sdcc2_apps_clk",2374			.parent_hws = (const struct clk_hw*[]) {2375				&sdcc2_apps_clk_src.clkr.hw,2376			},2377			.num_parents = 1,2378			.flags = CLK_SET_RATE_PARENT,2379			.ops = &clk_branch2_ops,2380		},2381	},2382};2383 2384static struct clk_branch gcc_smmu_cfg_clk = {2385	.halt_reg = 0x12038,2386	.halt_check = BRANCH_VOTED,2387	.clkr = {2388		.enable_reg = 0x3600C,2389		.enable_mask = BIT(12),2390		.hw.init = &(struct clk_init_data){2391			.name = "gcc_smmu_cfg_clk",2392			.ops = &clk_branch2_ops,2393		},2394	},2395};2396 2397static struct clk_branch gcc_sys_noc_usb3_clk = {2398	.halt_reg = 0x26014,2399	.halt_check = BRANCH_HALT,2400	.clkr = {2401		.enable_reg = 0x26014,2402		.enable_mask = BIT(0),2403		.hw.init = &(struct clk_init_data){2404			.name = "gcc_sys_noc_usb3_clk",2405			.parent_hws = (const struct clk_hw*[]) {2406				&usb30_master_clk_src.clkr.hw,2407			},2408			.num_parents = 1,2409			.ops = &clk_branch2_ops,2410		},2411	},2412};2413 2414static struct clk_branch gcc_usb_hs_inactivity_timers_clk = {2415	.halt_reg = 0x4100C,2416	.halt_check = BRANCH_HALT,2417	.clkr = {2418		.enable_reg = 0x4100C,2419		.enable_mask = BIT(0),2420		.hw.init = &(struct clk_init_data){2421			.name = "gcc_usb_hs_inactivity_timers_clk",2422			.ops = &clk_branch2_ops,2423		},2424	},2425};2426 2427static struct clk_branch gcc_usb20_mock_utmi_clk = {2428	.halt_reg = 0x41044,2429	.halt_check = BRANCH_HALT,2430	.clkr = {2431		.enable_reg = 0x41044,2432		.enable_mask = BIT(0),2433		.hw.init = &(struct clk_init_data){2434			.name = "gcc_usb20_mock_utmi_clk",2435			.parent_hws = (const struct clk_hw*[]) {2436				&usb20_mock_utmi_clk_src.clkr.hw,2437			},2438			.num_parents = 1,2439			.flags = CLK_SET_RATE_PARENT,2440			.ops = &clk_branch2_ops,2441		},2442	},2443};2444 2445static struct clk_branch gcc_usb2a_phy_sleep_clk = {2446	.halt_reg = 0x4102c,2447	.halt_check = BRANCH_HALT,2448	.clkr = {2449		.enable_reg = 0x4102c,2450		.enable_mask = BIT(0),2451		.hw.init = &(struct clk_init_data){2452			.name = "gcc_usb2a_phy_sleep_clk",2453			.ops = &clk_branch2_ops,2454		},2455	},2456};2457 2458static struct clk_branch gcc_usb30_master_clk = {2459	.halt_reg = 0x3900c,2460	.halt_check = BRANCH_HALT,2461	.clkr = {2462		.enable_reg = 0x3900c,2463		.enable_mask = BIT(0),2464		.hw.init = &(struct clk_init_data){2465			.name = "gcc_usb30_master_clk",2466			.parent_hws = (const struct clk_hw*[]) {2467				&usb30_master_clk_src.clkr.hw,2468			},2469			.num_parents = 1,2470			.flags = CLK_SET_RATE_PARENT,2471			.ops = &clk_branch2_ops,2472		},2473	},2474};2475 2476static struct clk_branch gcc_usb30_mock_utmi_clk = {2477	.halt_reg = 0x39014,2478	.halt_check = BRANCH_HALT,2479	.clkr = {2480		.enable_reg = 0x39014,2481		.enable_mask = BIT(0),2482		.hw.init = &(struct clk_init_data){2483			.name = "gcc_usb30_mock_utmi_clk",2484			.parent_hws = (const struct clk_hw*[]) {2485				&usb30_mock_utmi_clk_src.clkr.hw,2486			},2487			.num_parents = 1,2488			.flags = CLK_SET_RATE_PARENT,2489			.ops = &clk_branch2_ops,2490		},2491	},2492};2493 2494static struct clk_branch gcc_usb30_sleep_clk = {2495	.halt_reg = 0x39010,2496	.halt_check = BRANCH_HALT,2497	.clkr = {2498		.enable_reg = 0x39010,2499		.enable_mask = BIT(0),2500		.hw.init = &(struct clk_init_data){2501			.name = "gcc_usb30_sleep_clk",2502			.ops = &clk_branch2_ops,2503		},2504	},2505};2506 2507static struct clk_branch gcc_usb3_phy_aux_clk = {2508	.halt_reg = 0x39044,2509	.halt_check = BRANCH_HALT,2510	.clkr = {2511		.enable_reg = 0x39044,2512		.enable_mask = BIT(0),2513		.hw.init = &(struct clk_init_data){2514			.name = "gcc_usb3_phy_aux_clk",2515			.parent_hws = (const struct clk_hw*[]) {2516				&usb3_phy_aux_clk_src.clkr.hw,2517			},2518			.num_parents = 1,2519			.flags = CLK_SET_RATE_PARENT,2520			.ops = &clk_branch2_ops,2521		},2522	},2523};2524 2525static struct clk_branch gcc_usb3_phy_pipe_clk = {2526	.halt_check = BRANCH_HALT_SKIP,2527	.clkr = {2528		.enable_reg = 0x39018,2529		.enable_mask = BIT(0),2530		.hw.init = &(struct clk_init_data){2531			.name = "gcc_usb3_phy_pipe_clk",2532			.ops = &clk_branch2_ops,2533		},2534	},2535};2536 2537static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = {2538	.halt_reg = 0x41030,2539	.halt_check = BRANCH_HALT,2540	.clkr = {2541		.enable_reg = 0x41030,2542		.enable_mask = BIT(0),2543		.hw.init = &(struct clk_init_data){2544			.name = "gcc_usb_hs_phy_cfg_ahb_clk",2545			.ops = &clk_branch2_ops,2546		},2547	},2548};2549 2550static struct clk_branch gcc_usb_hs_system_clk = {2551	.halt_reg = 0x41004,2552	.halt_check = BRANCH_HALT,2553	.clkr = {2554		.enable_reg = 0x41004,2555		.enable_mask = BIT(0),2556		.hw.init = &(struct clk_init_data){2557			.name = "gcc_usb_hs_system_clk",2558			.parent_hws = (const struct clk_hw*[]) {2559				&usb_hs_system_clk_src.clkr.hw,2560			},2561			.num_parents = 1,2562			.flags = CLK_SET_RATE_PARENT,2563			.ops = &clk_branch2_ops,2564		},2565	},2566};2567 2568static struct clk_branch gcc_wdsp_q6ss_ahbs_clk = {2569	.halt_reg = 0x1e004,2570	.halt_check = BRANCH_HALT,2571	.clkr = {2572		.enable_reg = 0x1e004,2573		.enable_mask = BIT(0),2574		.hw.init = &(struct clk_init_data){2575			.name = "gcc_wdsp_q6ss_ahbs_clk",2576			.ops = &clk_branch2_ops,2577		},2578	},2579};2580 2581static struct clk_branch gcc_wdsp_q6ss_axim_clk = {2582	.halt_reg = 0x1e008,2583	.halt_check = BRANCH_HALT,2584	.clkr = {2585		.enable_reg = 0x1e008,2586		.enable_mask = BIT(0),2587		.hw.init = &(struct clk_init_data){2588			.name = "gcc_wdsp_q6ss_axim_clk",2589			.ops = &clk_branch2_ops,2590		},2591	},2592};2593 2594static struct gdsc mdss_gdsc = {2595	.gdscr = 0x4d078,2596	.pd = {2597		.name = "mdss",2598	},2599	.pwrsts = PWRSTS_OFF_ON,2600};2601 2602static struct gdsc oxili_gdsc = {2603	.gdscr = 0x5901c,2604	.pd = {2605		.name = "oxili",2606	},2607	.pwrsts = PWRSTS_OFF_ON,2608};2609 2610static struct clk_hw *gcc_qcs404_hws[] = {2611	&cxo.hw,2612};2613 2614static struct clk_regmap *gcc_qcs404_clocks[] = {2615	[GCC_APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,2616	[GCC_BLSP1_QUP0_I2C_APPS_CLK_SRC] = &blsp1_qup0_i2c_apps_clk_src.clkr,2617	[GCC_BLSP1_QUP0_SPI_APPS_CLK_SRC] = &blsp1_qup0_spi_apps_clk_src.clkr,2618	[GCC_BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,2619	[GCC_BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,2620	[GCC_BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,2621	[GCC_BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,2622	[GCC_BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,2623	[GCC_BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,2624	[GCC_BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,2625	[GCC_BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,2626	[GCC_BLSP1_UART0_APPS_CLK_SRC] = &blsp1_uart0_apps_clk_src.clkr,2627	[GCC_BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,2628	[GCC_BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,2629	[GCC_BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,2630	[GCC_BLSP2_QUP0_I2C_APPS_CLK_SRC] = &blsp2_qup0_i2c_apps_clk_src.clkr,2631	[GCC_BLSP2_QUP0_SPI_APPS_CLK_SRC] = &blsp2_qup0_spi_apps_clk_src.clkr,2632	[GCC_BLSP2_UART0_APPS_CLK_SRC] = &blsp2_uart0_apps_clk_src.clkr,2633	[GCC_BYTE0_CLK_SRC] = &byte0_clk_src.clkr,2634	[GCC_EMAC_CLK_SRC] = &emac_clk_src.clkr,2635	[GCC_EMAC_PTP_CLK_SRC] = &emac_ptp_clk_src.clkr,2636	[GCC_ESC0_CLK_SRC] = &esc0_clk_src.clkr,2637	[GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,2638	[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,2639	[GCC_BIMC_CDSP_CLK] = &gcc_bimc_cdsp_clk.clkr,2640	[GCC_BIMC_MDSS_CLK] = &gcc_bimc_mdss_clk.clkr,2641	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,2642	[GCC_BLSP1_QUP0_I2C_APPS_CLK] = &gcc_blsp1_qup0_i2c_apps_clk.clkr,2643	[GCC_BLSP1_QUP0_SPI_APPS_CLK] = &gcc_blsp1_qup0_spi_apps_clk.clkr,2644	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,2645	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,2646	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,2647	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,2648	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,2649	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,2650	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,2651	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,2652	[GCC_BLSP1_UART0_APPS_CLK] = &gcc_blsp1_uart0_apps_clk.clkr,2653	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,2654	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,2655	[GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,2656	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,2657	[GCC_BLSP2_QUP0_I2C_APPS_CLK] = &gcc_blsp2_qup0_i2c_apps_clk.clkr,2658	[GCC_BLSP2_QUP0_SPI_APPS_CLK] = &gcc_blsp2_qup0_spi_apps_clk.clkr,2659	[GCC_BLSP2_UART0_APPS_CLK] = &gcc_blsp2_uart0_apps_clk.clkr,2660	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,2661	[GCC_ETH_AXI_CLK] = &gcc_eth_axi_clk.clkr,2662	[GCC_ETH_PTP_CLK] = &gcc_eth_ptp_clk.clkr,2663	[GCC_ETH_RGMII_CLK] = &gcc_eth_rgmii_clk.clkr,2664	[GCC_ETH_SLAVE_AHB_CLK] = &gcc_eth_slave_ahb_clk.clkr,2665	[GCC_GENI_IR_S_CLK] = &gcc_geni_ir_s_clk.clkr,2666	[GCC_GENI_IR_H_CLK] = &gcc_geni_ir_h_clk.clkr,2667	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,2668	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,2669	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,2670	[GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,2671	[GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,2672	[GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,2673	[GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,2674	[GCC_MDSS_HDMI_APP_CLK] = &gcc_mdss_hdmi_app_clk.clkr,2675	[GCC_MDSS_HDMI_PCLK_CLK] = &gcc_mdss_hdmi_pclk_clk.clkr,2676	[GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,2677	[GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,2678	[GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,2679	[GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,2680	[GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,2681	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,2682	[GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,2683	[GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,2684	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,2685	[GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,2686	[GCC_PCNOC_USB2_CLK] = &gcc_pcnoc_usb2_clk.clkr,2687	[GCC_PCNOC_USB3_CLK] = &gcc_pcnoc_usb3_clk.clkr,2688	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,2689	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,2690	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,2691	[GCC_PWM0_XO512_CLK] = &gcc_pwm0_xo512_clk.clkr,2692	[GCC_PWM1_XO512_CLK] = &gcc_pwm1_xo512_clk.clkr,2693	[GCC_PWM2_XO512_CLK] = &gcc_pwm2_xo512_clk.clkr,2694	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,2695	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,2696	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,2697	[GCC_CDSP_CFG_AHB_CLK] = &gcc_cdsp_cfg_ahb_clk.clkr,2698	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,2699	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,2700	[GCC_SYS_NOC_USB3_CLK] = &gcc_sys_noc_usb3_clk.clkr,2701	[GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,2702	[GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,2703	[GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,2704	[GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,2705	[GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,2706	[GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,2707	[GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,2708	[GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,2709	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,2710	[GCC_GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,2711	[GCC_GP1_CLK_SRC] = &gp1_clk_src.clkr,2712	[GCC_GP2_CLK_SRC] = &gp2_clk_src.clkr,2713	[GCC_GP3_CLK_SRC] = &gp3_clk_src.clkr,2714	[GCC_GPLL0_OUT_MAIN] = &gpll0_out_main.clkr,2715	[GCC_GPLL0_AO_OUT_MAIN] = &gpll0_ao_out_main.clkr,2716	[GCC_GPLL0_SLEEP_CLK_SRC] = &gpll0_sleep_clk_src.clkr,2717	[GCC_GPLL1_OUT_MAIN] = &gpll1_out_main.clkr,2718	[GCC_GPLL3_OUT_MAIN] = &gpll3_out_main.clkr,2719	[GCC_GPLL4_OUT_MAIN] = &gpll4_out_main.clkr,2720	[GCC_GPLL6] = &gpll6.clkr,2721	[GCC_GPLL6_OUT_AUX] = &gpll6_out_aux,2722	[GCC_HDMI_APP_CLK_SRC] = &hdmi_app_clk_src.clkr,2723	[GCC_HDMI_PCLK_CLK_SRC] = &hdmi_pclk_clk_src.clkr,2724	[GCC_MDP_CLK_SRC] = &mdp_clk_src.clkr,2725	[GCC_PCIE_0_AUX_CLK_SRC] = &pcie_0_aux_clk_src.clkr,2726	[GCC_PCIE_0_PIPE_CLK_SRC] = &pcie_0_pipe_clk_src.clkr,2727	[GCC_PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,2728	[GCC_PDM2_CLK_SRC] = &pdm2_clk_src.clkr,2729	[GCC_SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,2730	[GCC_SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,2731	[GCC_SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,2732	[GCC_USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr,2733	[GCC_USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,2734	[GCC_USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,2735	[GCC_USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,2736	[GCC_USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,2737	[GCC_VSYNC_CLK_SRC] = &vsync_clk_src.clkr,2738	[GCC_CDSP_BIMC_CLK_SRC] = &cdsp_bimc_clk_src.clkr,2739	[GCC_USB_HS_INACTIVITY_TIMERS_CLK] =2740			&gcc_usb_hs_inactivity_timers_clk.clkr,2741	[GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,2742	[GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,2743	[GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,2744	[GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr,2745	[GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,2746	[GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,2747	[GCC_CDSP_TBU_CLK] = &gcc_cdsp_tbu_clk.clkr,2748	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,2749	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,2750	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,2751	[GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,2752	[GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,2753	[GCC_DCC_CLK] = &gcc_dcc_clk.clkr,2754	[GCC_DCC_XO_CLK] = &gcc_dcc_xo_clk.clkr,2755	[GCC_WCSS_Q6_AHB_CLK] = &gcc_wdsp_q6ss_ahbs_clk.clkr,2756	[GCC_WCSS_Q6_AXIM_CLK] =  &gcc_wdsp_q6ss_axim_clk.clkr,2757 2758};2759 2760static struct gdsc *gcc_qcs404_gdscs[] = {2761	[MDSS_GDSC] = &mdss_gdsc,2762	[OXILI_GDSC] = &oxili_gdsc,2763};2764 2765static const struct qcom_reset_map gcc_qcs404_resets[] = {2766	[GCC_GENI_IR_BCR] = { 0x0F000 },2767	[GCC_CDSP_RESTART] = { 0x18000 },2768	[GCC_USB_HS_BCR] = { 0x41000 },2769	[GCC_USB2_HS_PHY_ONLY_BCR] = { 0x41034 },2770	[GCC_QUSB2_PHY_BCR] = { 0x4103c },2771	[GCC_USB_HS_PHY_CFG_AHB_BCR] = { 0x0000c, 1 },2772	[GCC_USB2A_PHY_BCR] = { 0x0000c, 0 },2773	[GCC_USB3_PHY_BCR] = { 0x39004 },2774	[GCC_USB_30_BCR] = { 0x39000 },2775	[GCC_USB3PHY_PHY_BCR] = { 0x39008 },2776	[GCC_PCIE_0_BCR] = { 0x3e000 },2777	[GCC_PCIE_0_PHY_BCR] = { 0x3e004 },2778	[GCC_PCIE_0_LINK_DOWN_BCR] = { 0x3e038 },2779	[GCC_PCIEPHY_0_PHY_BCR] = { 0x3e03c },2780	[GCC_PCIE_0_AXI_MASTER_STICKY_ARES] = { 0x3e040, 6},2781	[GCC_PCIE_0_AHB_ARES] = { 0x3e040, 5 },2782	[GCC_PCIE_0_AXI_SLAVE_ARES] = { 0x3e040, 4 },2783	[GCC_PCIE_0_AXI_MASTER_ARES] = { 0x3e040, 3 },2784	[GCC_PCIE_0_CORE_STICKY_ARES] = { 0x3e040, 2 },2785	[GCC_PCIE_0_SLEEP_ARES] = { 0x3e040, 1 },2786	[GCC_PCIE_0_PIPE_ARES] = { 0x3e040, 0 },2787	[GCC_EMAC_BCR] = { 0x4e000 },2788	[GCC_WDSP_RESTART] = {0x19000},2789};2790 2791static const struct regmap_config gcc_qcs404_regmap_config = {2792	.reg_bits	= 32,2793	.reg_stride	= 4,2794	.val_bits	= 32,2795	.max_register	= 0x7f000,2796	.fast_io	= true,2797};2798 2799static const struct qcom_cc_desc gcc_qcs404_desc = {2800	.config = &gcc_qcs404_regmap_config,2801	.clks = gcc_qcs404_clocks,2802	.num_clks = ARRAY_SIZE(gcc_qcs404_clocks),2803	.resets = gcc_qcs404_resets,2804	.num_resets = ARRAY_SIZE(gcc_qcs404_resets),2805	.clk_hws = gcc_qcs404_hws,2806	.num_clk_hws = ARRAY_SIZE(gcc_qcs404_hws),2807	.gdscs = gcc_qcs404_gdscs,2808	.num_gdscs = ARRAY_SIZE(gcc_qcs404_gdscs),2809};2810 2811static const struct of_device_id gcc_qcs404_match_table[] = {2812	{ .compatible = "qcom,gcc-qcs404" },2813	{ }2814};2815MODULE_DEVICE_TABLE(of, gcc_qcs404_match_table);2816 2817static int gcc_qcs404_probe(struct platform_device *pdev)2818{2819	struct regmap *regmap;2820 2821	regmap = qcom_cc_map(pdev, &gcc_qcs404_desc);2822	if (IS_ERR(regmap))2823		return PTR_ERR(regmap);2824 2825	clk_alpha_pll_configure(&gpll3_out_main, regmap, &gpll3_config);2826 2827	return qcom_cc_really_probe(&pdev->dev, &gcc_qcs404_desc, regmap);2828}2829 2830static struct platform_driver gcc_qcs404_driver = {2831	.probe = gcc_qcs404_probe,2832	.driver = {2833		.name = "gcc-qcs404",2834		.of_match_table = gcc_qcs404_match_table,2835	},2836};2837 2838static int __init gcc_qcs404_init(void)2839{2840	return platform_driver_register(&gcc_qcs404_driver);2841}2842core_initcall(gcc_qcs404_init);2843 2844static void __exit gcc_qcs404_exit(void)2845{2846	platform_driver_unregister(&gcc_qcs404_driver);2847}2848module_exit(gcc_qcs404_exit);2849 2850MODULE_DESCRIPTION("Qualcomm GCC QCS404 Driver");2851MODULE_LICENSE("GPL v2");2852