162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (c) 2015 The Linux Foundation. All rights reserved.
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#include <linux/kernel.h>
762306a36Sopenharmony_ci#include <linux/err.h>
862306a36Sopenharmony_ci#include <linux/platform_device.h>
962306a36Sopenharmony_ci#include <linux/module.h>
1062306a36Sopenharmony_ci#include <linux/of.h>
1162306a36Sopenharmony_ci#include <linux/clk-provider.h>
1262306a36Sopenharmony_ci#include <linux/regmap.h>
1362306a36Sopenharmony_ci#include <linux/reset-controller.h>
1462306a36Sopenharmony_ci#include <linux/math64.h>
1562306a36Sopenharmony_ci#include <linux/delay.h>
1662306a36Sopenharmony_ci#include <linux/clk.h>
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci#include <dt-bindings/clock/qcom,gcc-ipq4019.h>
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci#include "common.h"
2162306a36Sopenharmony_ci#include "clk-regmap.h"
2262306a36Sopenharmony_ci#include "clk-rcg.h"
2362306a36Sopenharmony_ci#include "clk-branch.h"
2462306a36Sopenharmony_ci#include "reset.h"
2562306a36Sopenharmony_ci#include "clk-regmap-divider.h"
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci#define to_clk_regmap_div(_hw) container_of(to_clk_regmap(_hw),\
2862306a36Sopenharmony_ci					struct clk_regmap_div, clkr)
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci#define to_clk_fepll(_hw) container_of(to_clk_regmap_div(_hw),\
3162306a36Sopenharmony_ci						struct clk_fepll, cdiv)
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cienum {
3462306a36Sopenharmony_ci	P_XO,
3562306a36Sopenharmony_ci	P_FEPLL200,
3662306a36Sopenharmony_ci	P_FEPLL500,
3762306a36Sopenharmony_ci	P_DDRPLL,
3862306a36Sopenharmony_ci	P_FEPLLWCSS2G,
3962306a36Sopenharmony_ci	P_FEPLLWCSS5G,
4062306a36Sopenharmony_ci	P_FEPLL125DLY,
4162306a36Sopenharmony_ci	P_DDRPLLAPSS,
4262306a36Sopenharmony_ci};
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci/*
4562306a36Sopenharmony_ci * struct clk_fepll_vco - vco feedback divider corresponds for FEPLL clocks
4662306a36Sopenharmony_ci * @fdbkdiv_shift: lowest bit for FDBKDIV
4762306a36Sopenharmony_ci * @fdbkdiv_width: number of bits in FDBKDIV
4862306a36Sopenharmony_ci * @refclkdiv_shift: lowest bit for REFCLKDIV
4962306a36Sopenharmony_ci * @refclkdiv_width: number of bits in REFCLKDIV
5062306a36Sopenharmony_ci * @reg: PLL_DIV register address
5162306a36Sopenharmony_ci */
5262306a36Sopenharmony_cistruct clk_fepll_vco {
5362306a36Sopenharmony_ci	u32 fdbkdiv_shift;
5462306a36Sopenharmony_ci	u32 fdbkdiv_width;
5562306a36Sopenharmony_ci	u32 refclkdiv_shift;
5662306a36Sopenharmony_ci	u32 refclkdiv_width;
5762306a36Sopenharmony_ci	u32 reg;
5862306a36Sopenharmony_ci};
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci/*
6162306a36Sopenharmony_ci * struct clk_fepll - clk divider corresponds to FEPLL clocks
6262306a36Sopenharmony_ci * @fixed_div: fixed divider value if divider is fixed
6362306a36Sopenharmony_ci * @parent_map: map from software's parent index to hardware's src_sel field
6462306a36Sopenharmony_ci * @cdiv: divider values for PLL_DIV
6562306a36Sopenharmony_ci * @pll_vco: vco feedback divider
6662306a36Sopenharmony_ci * @div_table: mapping for actual divider value to register divider value
6762306a36Sopenharmony_ci *             in case of non fixed divider
6862306a36Sopenharmony_ci * @freq_tbl: frequency table
6962306a36Sopenharmony_ci */
7062306a36Sopenharmony_cistruct clk_fepll {
7162306a36Sopenharmony_ci	u32 fixed_div;
7262306a36Sopenharmony_ci	const u8 *parent_map;
7362306a36Sopenharmony_ci	struct clk_regmap_div cdiv;
7462306a36Sopenharmony_ci	const struct clk_fepll_vco *pll_vco;
7562306a36Sopenharmony_ci	const struct clk_div_table *div_table;
7662306a36Sopenharmony_ci	const struct freq_tbl *freq_tbl;
7762306a36Sopenharmony_ci};
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci/*
8062306a36Sopenharmony_ci * Contains index for safe clock during APSS freq change.
8162306a36Sopenharmony_ci * fepll500 is being used as safe clock so initialize it
8262306a36Sopenharmony_ci * with its index in parents list gcc_xo_ddr_500_200.
8362306a36Sopenharmony_ci */
8462306a36Sopenharmony_cistatic const int gcc_ipq4019_cpu_safe_parent = 2;
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ci/* Calculates the VCO rate for FEPLL. */
8762306a36Sopenharmony_cistatic u64 clk_fepll_vco_calc_rate(struct clk_fepll *pll_div,
8862306a36Sopenharmony_ci				   unsigned long parent_rate)
8962306a36Sopenharmony_ci{
9062306a36Sopenharmony_ci	const struct clk_fepll_vco *pll_vco = pll_div->pll_vco;
9162306a36Sopenharmony_ci	u32 fdbkdiv, refclkdiv, cdiv;
9262306a36Sopenharmony_ci	u64 vco;
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci	regmap_read(pll_div->cdiv.clkr.regmap, pll_vco->reg, &cdiv);
9562306a36Sopenharmony_ci	refclkdiv = (cdiv >> pll_vco->refclkdiv_shift) &
9662306a36Sopenharmony_ci		    (BIT(pll_vco->refclkdiv_width) - 1);
9762306a36Sopenharmony_ci	fdbkdiv = (cdiv >> pll_vco->fdbkdiv_shift) &
9862306a36Sopenharmony_ci		  (BIT(pll_vco->fdbkdiv_width) - 1);
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ci	vco = parent_rate / refclkdiv;
10162306a36Sopenharmony_ci	vco *= 2;
10262306a36Sopenharmony_ci	vco *= fdbkdiv;
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci	return vco;
10562306a36Sopenharmony_ci}
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_cistatic const struct clk_fepll_vco gcc_apss_ddrpll_vco = {
10862306a36Sopenharmony_ci	.fdbkdiv_shift = 16,
10962306a36Sopenharmony_ci	.fdbkdiv_width = 8,
11062306a36Sopenharmony_ci	.refclkdiv_shift = 24,
11162306a36Sopenharmony_ci	.refclkdiv_width = 5,
11262306a36Sopenharmony_ci	.reg = 0x2e020,
11362306a36Sopenharmony_ci};
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_cistatic const struct clk_fepll_vco gcc_fepll_vco = {
11662306a36Sopenharmony_ci	.fdbkdiv_shift = 16,
11762306a36Sopenharmony_ci	.fdbkdiv_width = 8,
11862306a36Sopenharmony_ci	.refclkdiv_shift = 24,
11962306a36Sopenharmony_ci	.refclkdiv_width = 5,
12062306a36Sopenharmony_ci	.reg = 0x2f020,
12162306a36Sopenharmony_ci};
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci/*
12462306a36Sopenharmony_ci * Round rate function for APSS CPU PLL Clock divider.
12562306a36Sopenharmony_ci * It looks up the frequency table and returns the next higher frequency
12662306a36Sopenharmony_ci * supported in hardware.
12762306a36Sopenharmony_ci */
12862306a36Sopenharmony_cistatic long clk_cpu_div_round_rate(struct clk_hw *hw, unsigned long rate,
12962306a36Sopenharmony_ci				   unsigned long *p_rate)
13062306a36Sopenharmony_ci{
13162306a36Sopenharmony_ci	struct clk_fepll *pll = to_clk_fepll(hw);
13262306a36Sopenharmony_ci	struct clk_hw *p_hw;
13362306a36Sopenharmony_ci	const struct freq_tbl *f;
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_ci	f = qcom_find_freq(pll->freq_tbl, rate);
13662306a36Sopenharmony_ci	if (!f)
13762306a36Sopenharmony_ci		return -EINVAL;
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ci	p_hw = clk_hw_get_parent_by_index(hw, f->src);
14062306a36Sopenharmony_ci	*p_rate = clk_hw_get_rate(p_hw);
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ci	return f->freq;
14362306a36Sopenharmony_ci};
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_ci/*
14662306a36Sopenharmony_ci * Clock set rate function for APSS CPU PLL Clock divider.
14762306a36Sopenharmony_ci * It looks up the frequency table and updates the PLL divider to corresponding
14862306a36Sopenharmony_ci * divider value.
14962306a36Sopenharmony_ci */
15062306a36Sopenharmony_cistatic int clk_cpu_div_set_rate(struct clk_hw *hw, unsigned long rate,
15162306a36Sopenharmony_ci				unsigned long parent_rate)
15262306a36Sopenharmony_ci{
15362306a36Sopenharmony_ci	struct clk_fepll *pll = to_clk_fepll(hw);
15462306a36Sopenharmony_ci	const struct freq_tbl *f;
15562306a36Sopenharmony_ci	u32 mask;
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ci	f = qcom_find_freq(pll->freq_tbl, rate);
15862306a36Sopenharmony_ci	if (!f)
15962306a36Sopenharmony_ci		return -EINVAL;
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ci	mask = (BIT(pll->cdiv.width) - 1) << pll->cdiv.shift;
16262306a36Sopenharmony_ci	regmap_update_bits(pll->cdiv.clkr.regmap,
16362306a36Sopenharmony_ci			   pll->cdiv.reg, mask,
16462306a36Sopenharmony_ci			   f->pre_div << pll->cdiv.shift);
16562306a36Sopenharmony_ci	/*
16662306a36Sopenharmony_ci	 * There is no status bit which can be checked for successful CPU
16762306a36Sopenharmony_ci	 * divider update operation so using delay for the same.
16862306a36Sopenharmony_ci	 */
16962306a36Sopenharmony_ci	udelay(1);
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci	return 0;
17262306a36Sopenharmony_ci};
17362306a36Sopenharmony_ci
17462306a36Sopenharmony_ci/*
17562306a36Sopenharmony_ci * Clock frequency calculation function for APSS CPU PLL Clock divider.
17662306a36Sopenharmony_ci * This clock divider is nonlinear so this function calculates the actual
17762306a36Sopenharmony_ci * divider and returns the output frequency by dividing VCO Frequency
17862306a36Sopenharmony_ci * with this actual divider value.
17962306a36Sopenharmony_ci */
18062306a36Sopenharmony_cistatic unsigned long
18162306a36Sopenharmony_ciclk_cpu_div_recalc_rate(struct clk_hw *hw,
18262306a36Sopenharmony_ci			unsigned long parent_rate)
18362306a36Sopenharmony_ci{
18462306a36Sopenharmony_ci	struct clk_fepll *pll = to_clk_fepll(hw);
18562306a36Sopenharmony_ci	u32 cdiv, pre_div;
18662306a36Sopenharmony_ci	u64 rate;
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_ci	regmap_read(pll->cdiv.clkr.regmap, pll->cdiv.reg, &cdiv);
18962306a36Sopenharmony_ci	cdiv = (cdiv >> pll->cdiv.shift) & (BIT(pll->cdiv.width) - 1);
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ci	/*
19262306a36Sopenharmony_ci	 * Some dividers have value in 0.5 fraction so multiply both VCO
19362306a36Sopenharmony_ci	 * frequency(parent_rate) and pre_div with 2 to make integer
19462306a36Sopenharmony_ci	 * calculation.
19562306a36Sopenharmony_ci	 */
19662306a36Sopenharmony_ci	if (cdiv > 10)
19762306a36Sopenharmony_ci		pre_div = (cdiv + 1) * 2;
19862306a36Sopenharmony_ci	else
19962306a36Sopenharmony_ci		pre_div = cdiv + 12;
20062306a36Sopenharmony_ci
20162306a36Sopenharmony_ci	rate = clk_fepll_vco_calc_rate(pll, parent_rate) * 2;
20262306a36Sopenharmony_ci	do_div(rate, pre_div);
20362306a36Sopenharmony_ci
20462306a36Sopenharmony_ci	return rate;
20562306a36Sopenharmony_ci};
20662306a36Sopenharmony_ci
20762306a36Sopenharmony_cistatic const struct clk_ops clk_regmap_cpu_div_ops = {
20862306a36Sopenharmony_ci	.round_rate = clk_cpu_div_round_rate,
20962306a36Sopenharmony_ci	.set_rate = clk_cpu_div_set_rate,
21062306a36Sopenharmony_ci	.recalc_rate = clk_cpu_div_recalc_rate,
21162306a36Sopenharmony_ci};
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_cistatic const struct freq_tbl ftbl_apss_ddr_pll[] = {
21462306a36Sopenharmony_ci	{ 384000000, P_XO, 0xd, 0, 0 },
21562306a36Sopenharmony_ci	{ 413000000, P_XO, 0xc, 0, 0 },
21662306a36Sopenharmony_ci	{ 448000000, P_XO, 0xb, 0, 0 },
21762306a36Sopenharmony_ci	{ 488000000, P_XO, 0xa, 0, 0 },
21862306a36Sopenharmony_ci	{ 512000000, P_XO, 0x9, 0, 0 },
21962306a36Sopenharmony_ci	{ 537000000, P_XO, 0x8, 0, 0 },
22062306a36Sopenharmony_ci	{ 565000000, P_XO, 0x7, 0, 0 },
22162306a36Sopenharmony_ci	{ 597000000, P_XO, 0x6, 0, 0 },
22262306a36Sopenharmony_ci	{ 632000000, P_XO, 0x5, 0, 0 },
22362306a36Sopenharmony_ci	{ 672000000, P_XO, 0x4, 0, 0 },
22462306a36Sopenharmony_ci	{ 716000000, P_XO, 0x3, 0, 0 },
22562306a36Sopenharmony_ci	{ 768000000, P_XO, 0x2, 0, 0 },
22662306a36Sopenharmony_ci	{ 823000000, P_XO, 0x1, 0, 0 },
22762306a36Sopenharmony_ci	{ 896000000, P_XO, 0x0, 0, 0 },
22862306a36Sopenharmony_ci	{ }
22962306a36Sopenharmony_ci};
23062306a36Sopenharmony_ci
23162306a36Sopenharmony_cistatic struct clk_fepll gcc_apss_cpu_plldiv_clk = {
23262306a36Sopenharmony_ci	.cdiv.reg = 0x2e020,
23362306a36Sopenharmony_ci	.cdiv.shift = 4,
23462306a36Sopenharmony_ci	.cdiv.width = 4,
23562306a36Sopenharmony_ci	.cdiv.clkr = {
23662306a36Sopenharmony_ci		.enable_reg = 0x2e000,
23762306a36Sopenharmony_ci		.enable_mask = BIT(0),
23862306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
23962306a36Sopenharmony_ci			.name = "ddrpllapss",
24062306a36Sopenharmony_ci			.parent_data = &(const struct clk_parent_data){
24162306a36Sopenharmony_ci				.fw_name = "xo",
24262306a36Sopenharmony_ci				.name = "xo",
24362306a36Sopenharmony_ci			},
24462306a36Sopenharmony_ci			.num_parents = 1,
24562306a36Sopenharmony_ci			.ops = &clk_regmap_cpu_div_ops,
24662306a36Sopenharmony_ci		},
24762306a36Sopenharmony_ci	},
24862306a36Sopenharmony_ci	.freq_tbl = ftbl_apss_ddr_pll,
24962306a36Sopenharmony_ci	.pll_vco = &gcc_apss_ddrpll_vco,
25062306a36Sopenharmony_ci};
25162306a36Sopenharmony_ci
25262306a36Sopenharmony_ci/* Calculates the rate for PLL divider.
25362306a36Sopenharmony_ci * If the divider value is not fixed then it gets the actual divider value
25462306a36Sopenharmony_ci * from divider table. Then, it calculate the clock rate by dividing the
25562306a36Sopenharmony_ci * parent rate with actual divider value.
25662306a36Sopenharmony_ci */
25762306a36Sopenharmony_cistatic unsigned long
25862306a36Sopenharmony_ciclk_regmap_clk_div_recalc_rate(struct clk_hw *hw,
25962306a36Sopenharmony_ci			       unsigned long parent_rate)
26062306a36Sopenharmony_ci{
26162306a36Sopenharmony_ci	struct clk_fepll *pll = to_clk_fepll(hw);
26262306a36Sopenharmony_ci	u32 cdiv, pre_div = 1;
26362306a36Sopenharmony_ci	u64 rate;
26462306a36Sopenharmony_ci	const struct clk_div_table *clkt;
26562306a36Sopenharmony_ci
26662306a36Sopenharmony_ci	if (pll->fixed_div) {
26762306a36Sopenharmony_ci		pre_div = pll->fixed_div;
26862306a36Sopenharmony_ci	} else {
26962306a36Sopenharmony_ci		regmap_read(pll->cdiv.clkr.regmap, pll->cdiv.reg, &cdiv);
27062306a36Sopenharmony_ci		cdiv = (cdiv >> pll->cdiv.shift) & (BIT(pll->cdiv.width) - 1);
27162306a36Sopenharmony_ci
27262306a36Sopenharmony_ci		for (clkt = pll->div_table; clkt->div; clkt++) {
27362306a36Sopenharmony_ci			if (clkt->val == cdiv)
27462306a36Sopenharmony_ci				pre_div = clkt->div;
27562306a36Sopenharmony_ci		}
27662306a36Sopenharmony_ci	}
27762306a36Sopenharmony_ci
27862306a36Sopenharmony_ci	rate = clk_fepll_vco_calc_rate(pll, parent_rate);
27962306a36Sopenharmony_ci	do_div(rate, pre_div);
28062306a36Sopenharmony_ci
28162306a36Sopenharmony_ci	return rate;
28262306a36Sopenharmony_ci};
28362306a36Sopenharmony_ci
28462306a36Sopenharmony_cistatic const struct clk_ops clk_fepll_div_ops = {
28562306a36Sopenharmony_ci	.recalc_rate = clk_regmap_clk_div_recalc_rate,
28662306a36Sopenharmony_ci};
28762306a36Sopenharmony_ci
28862306a36Sopenharmony_cistatic struct clk_fepll gcc_apss_sdcc_clk = {
28962306a36Sopenharmony_ci	.fixed_div = 28,
29062306a36Sopenharmony_ci	.cdiv.clkr = {
29162306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
29262306a36Sopenharmony_ci			.name = "ddrpllsdcc",
29362306a36Sopenharmony_ci			.parent_data = &(const struct clk_parent_data){
29462306a36Sopenharmony_ci				.fw_name = "xo",
29562306a36Sopenharmony_ci				.name = "xo",
29662306a36Sopenharmony_ci			},
29762306a36Sopenharmony_ci			.num_parents = 1,
29862306a36Sopenharmony_ci			.ops = &clk_fepll_div_ops,
29962306a36Sopenharmony_ci		},
30062306a36Sopenharmony_ci	},
30162306a36Sopenharmony_ci	.pll_vco = &gcc_apss_ddrpll_vco,
30262306a36Sopenharmony_ci};
30362306a36Sopenharmony_ci
30462306a36Sopenharmony_cistatic struct clk_fepll gcc_fepll125_clk = {
30562306a36Sopenharmony_ci	.fixed_div = 32,
30662306a36Sopenharmony_ci	.cdiv.clkr = {
30762306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
30862306a36Sopenharmony_ci			.name = "fepll125",
30962306a36Sopenharmony_ci			.parent_data = &(const struct clk_parent_data){
31062306a36Sopenharmony_ci				.fw_name = "xo",
31162306a36Sopenharmony_ci				.name = "xo",
31262306a36Sopenharmony_ci			},
31362306a36Sopenharmony_ci			.num_parents = 1,
31462306a36Sopenharmony_ci			.ops = &clk_fepll_div_ops,
31562306a36Sopenharmony_ci		},
31662306a36Sopenharmony_ci	},
31762306a36Sopenharmony_ci	.pll_vco = &gcc_fepll_vco,
31862306a36Sopenharmony_ci};
31962306a36Sopenharmony_ci
32062306a36Sopenharmony_cistatic struct clk_fepll gcc_fepll125dly_clk = {
32162306a36Sopenharmony_ci	.fixed_div = 32,
32262306a36Sopenharmony_ci	.cdiv.clkr = {
32362306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
32462306a36Sopenharmony_ci			.name = "fepll125dly",
32562306a36Sopenharmony_ci			.parent_data = &(const struct clk_parent_data){
32662306a36Sopenharmony_ci				.fw_name = "xo",
32762306a36Sopenharmony_ci				.name = "xo",
32862306a36Sopenharmony_ci			},
32962306a36Sopenharmony_ci			.num_parents = 1,
33062306a36Sopenharmony_ci			.ops = &clk_fepll_div_ops,
33162306a36Sopenharmony_ci		},
33262306a36Sopenharmony_ci	},
33362306a36Sopenharmony_ci	.pll_vco = &gcc_fepll_vco,
33462306a36Sopenharmony_ci};
33562306a36Sopenharmony_ci
33662306a36Sopenharmony_cistatic struct clk_fepll gcc_fepll200_clk = {
33762306a36Sopenharmony_ci	.fixed_div = 20,
33862306a36Sopenharmony_ci	.cdiv.clkr = {
33962306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
34062306a36Sopenharmony_ci			.name = "fepll200",
34162306a36Sopenharmony_ci			.parent_data = &(const struct clk_parent_data){
34262306a36Sopenharmony_ci				.fw_name = "xo",
34362306a36Sopenharmony_ci				.name = "xo",
34462306a36Sopenharmony_ci			},
34562306a36Sopenharmony_ci			.num_parents = 1,
34662306a36Sopenharmony_ci			.ops = &clk_fepll_div_ops,
34762306a36Sopenharmony_ci		},
34862306a36Sopenharmony_ci	},
34962306a36Sopenharmony_ci	.pll_vco = &gcc_fepll_vco,
35062306a36Sopenharmony_ci};
35162306a36Sopenharmony_ci
35262306a36Sopenharmony_cistatic struct clk_fepll gcc_fepll500_clk = {
35362306a36Sopenharmony_ci	.fixed_div = 8,
35462306a36Sopenharmony_ci	.cdiv.clkr = {
35562306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
35662306a36Sopenharmony_ci			.name = "fepll500",
35762306a36Sopenharmony_ci			.parent_data = &(const struct clk_parent_data){
35862306a36Sopenharmony_ci				.fw_name = "xo",
35962306a36Sopenharmony_ci				.name = "xo",
36062306a36Sopenharmony_ci			},
36162306a36Sopenharmony_ci			.num_parents = 1,
36262306a36Sopenharmony_ci			.ops = &clk_fepll_div_ops,
36362306a36Sopenharmony_ci		},
36462306a36Sopenharmony_ci	},
36562306a36Sopenharmony_ci	.pll_vco = &gcc_fepll_vco,
36662306a36Sopenharmony_ci};
36762306a36Sopenharmony_ci
36862306a36Sopenharmony_cistatic const struct clk_div_table fepllwcss_clk_div_table[] = {
36962306a36Sopenharmony_ci	{ 0, 15 },
37062306a36Sopenharmony_ci	{ 1, 16 },
37162306a36Sopenharmony_ci	{ 2, 18 },
37262306a36Sopenharmony_ci	{ 3, 20 },
37362306a36Sopenharmony_ci	{ },
37462306a36Sopenharmony_ci};
37562306a36Sopenharmony_ci
37662306a36Sopenharmony_cistatic struct clk_fepll gcc_fepllwcss2g_clk = {
37762306a36Sopenharmony_ci	.cdiv.reg = 0x2f020,
37862306a36Sopenharmony_ci	.cdiv.shift = 8,
37962306a36Sopenharmony_ci	.cdiv.width = 2,
38062306a36Sopenharmony_ci	.cdiv.clkr = {
38162306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
38262306a36Sopenharmony_ci			.name = "fepllwcss2g",
38362306a36Sopenharmony_ci			.parent_data = &(const struct clk_parent_data){
38462306a36Sopenharmony_ci				.fw_name = "xo",
38562306a36Sopenharmony_ci				.name = "xo",
38662306a36Sopenharmony_ci			},
38762306a36Sopenharmony_ci			.num_parents = 1,
38862306a36Sopenharmony_ci			.ops = &clk_fepll_div_ops,
38962306a36Sopenharmony_ci		},
39062306a36Sopenharmony_ci	},
39162306a36Sopenharmony_ci	.div_table = fepllwcss_clk_div_table,
39262306a36Sopenharmony_ci	.pll_vco = &gcc_fepll_vco,
39362306a36Sopenharmony_ci};
39462306a36Sopenharmony_ci
39562306a36Sopenharmony_cistatic struct clk_fepll gcc_fepllwcss5g_clk = {
39662306a36Sopenharmony_ci	.cdiv.reg = 0x2f020,
39762306a36Sopenharmony_ci	.cdiv.shift = 12,
39862306a36Sopenharmony_ci	.cdiv.width = 2,
39962306a36Sopenharmony_ci	.cdiv.clkr = {
40062306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
40162306a36Sopenharmony_ci			.name = "fepllwcss5g",
40262306a36Sopenharmony_ci			.parent_data = &(const struct clk_parent_data){
40362306a36Sopenharmony_ci				.fw_name = "xo",
40462306a36Sopenharmony_ci				.name = "xo",
40562306a36Sopenharmony_ci			},
40662306a36Sopenharmony_ci			.num_parents = 1,
40762306a36Sopenharmony_ci			.ops = &clk_fepll_div_ops,
40862306a36Sopenharmony_ci		},
40962306a36Sopenharmony_ci	},
41062306a36Sopenharmony_ci	.div_table = fepllwcss_clk_div_table,
41162306a36Sopenharmony_ci	.pll_vco = &gcc_fepll_vco,
41262306a36Sopenharmony_ci};
41362306a36Sopenharmony_ci
41462306a36Sopenharmony_cistatic struct parent_map gcc_xo_200_500_map[] = {
41562306a36Sopenharmony_ci	{ P_XO, 0 },
41662306a36Sopenharmony_ci	{ P_FEPLL200, 1 },
41762306a36Sopenharmony_ci	{ P_FEPLL500, 2 },
41862306a36Sopenharmony_ci};
41962306a36Sopenharmony_ci
42062306a36Sopenharmony_cistatic const struct clk_parent_data gcc_xo_200_500[] = {
42162306a36Sopenharmony_ci	{ .fw_name = "xo", .name = "xo" },
42262306a36Sopenharmony_ci	{ .hw = &gcc_fepll200_clk.cdiv.clkr.hw },
42362306a36Sopenharmony_ci	{ .hw = &gcc_fepll500_clk.cdiv.clkr.hw },
42462306a36Sopenharmony_ci};
42562306a36Sopenharmony_ci
42662306a36Sopenharmony_cistatic const struct freq_tbl ftbl_gcc_pcnoc_ahb_clk[] = {
42762306a36Sopenharmony_ci	F(48000000,  P_XO,	 1, 0, 0),
42862306a36Sopenharmony_ci	F(100000000, P_FEPLL200, 2, 0, 0),
42962306a36Sopenharmony_ci	{ }
43062306a36Sopenharmony_ci};
43162306a36Sopenharmony_ci
43262306a36Sopenharmony_cistatic struct clk_rcg2 gcc_pcnoc_ahb_clk_src = {
43362306a36Sopenharmony_ci	.cmd_rcgr = 0x21024,
43462306a36Sopenharmony_ci	.hid_width = 5,
43562306a36Sopenharmony_ci	.parent_map = gcc_xo_200_500_map,
43662306a36Sopenharmony_ci	.freq_tbl = ftbl_gcc_pcnoc_ahb_clk,
43762306a36Sopenharmony_ci	.clkr.hw.init = &(struct clk_init_data){
43862306a36Sopenharmony_ci		.name = "gcc_pcnoc_ahb_clk_src",
43962306a36Sopenharmony_ci		.parent_data = gcc_xo_200_500,
44062306a36Sopenharmony_ci		.num_parents = ARRAY_SIZE(gcc_xo_200_500),
44162306a36Sopenharmony_ci		.ops = &clk_rcg2_ops,
44262306a36Sopenharmony_ci	},
44362306a36Sopenharmony_ci};
44462306a36Sopenharmony_ci
44562306a36Sopenharmony_cistatic struct clk_branch pcnoc_clk_src = {
44662306a36Sopenharmony_ci	.halt_reg = 0x21030,
44762306a36Sopenharmony_ci	.clkr = {
44862306a36Sopenharmony_ci		.enable_reg = 0x21030,
44962306a36Sopenharmony_ci		.enable_mask = BIT(0),
45062306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
45162306a36Sopenharmony_ci			.name = "pcnoc_clk_src",
45262306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
45362306a36Sopenharmony_ci				&gcc_pcnoc_ahb_clk_src.clkr.hw },
45462306a36Sopenharmony_ci			.num_parents = 1,
45562306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
45662306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT |
45762306a36Sopenharmony_ci				CLK_IS_CRITICAL,
45862306a36Sopenharmony_ci		},
45962306a36Sopenharmony_ci	},
46062306a36Sopenharmony_ci};
46162306a36Sopenharmony_ci
46262306a36Sopenharmony_cistatic struct parent_map gcc_xo_200_map[] = {
46362306a36Sopenharmony_ci	{  P_XO, 0 },
46462306a36Sopenharmony_ci	{  P_FEPLL200, 1 },
46562306a36Sopenharmony_ci};
46662306a36Sopenharmony_ci
46762306a36Sopenharmony_cistatic const struct clk_parent_data gcc_xo_200[] = {
46862306a36Sopenharmony_ci	{ .fw_name = "xo", .name = "xo" },
46962306a36Sopenharmony_ci	{ .hw = &gcc_fepll200_clk.cdiv.clkr.hw },
47062306a36Sopenharmony_ci};
47162306a36Sopenharmony_ci
47262306a36Sopenharmony_cistatic const struct freq_tbl ftbl_gcc_audio_pwm_clk[] = {
47362306a36Sopenharmony_ci	F(48000000, P_XO, 1, 0, 0),
47462306a36Sopenharmony_ci	F(200000000, P_FEPLL200, 1, 0, 0),
47562306a36Sopenharmony_ci	{ }
47662306a36Sopenharmony_ci};
47762306a36Sopenharmony_ci
47862306a36Sopenharmony_cistatic struct clk_rcg2 audio_clk_src = {
47962306a36Sopenharmony_ci	.cmd_rcgr = 0x1b000,
48062306a36Sopenharmony_ci	.hid_width = 5,
48162306a36Sopenharmony_ci	.parent_map = gcc_xo_200_map,
48262306a36Sopenharmony_ci	.freq_tbl = ftbl_gcc_audio_pwm_clk,
48362306a36Sopenharmony_ci	.clkr.hw.init = &(struct clk_init_data){
48462306a36Sopenharmony_ci		.name = "audio_clk_src",
48562306a36Sopenharmony_ci		.parent_data = gcc_xo_200,
48662306a36Sopenharmony_ci		.num_parents = ARRAY_SIZE(gcc_xo_200),
48762306a36Sopenharmony_ci		.ops = &clk_rcg2_ops,
48862306a36Sopenharmony_ci
48962306a36Sopenharmony_ci	},
49062306a36Sopenharmony_ci};
49162306a36Sopenharmony_ci
49262306a36Sopenharmony_cistatic struct clk_branch gcc_audio_ahb_clk = {
49362306a36Sopenharmony_ci	.halt_reg = 0x1b010,
49462306a36Sopenharmony_ci	.clkr = {
49562306a36Sopenharmony_ci		.enable_reg = 0x1b010,
49662306a36Sopenharmony_ci		.enable_mask = BIT(0),
49762306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
49862306a36Sopenharmony_ci			.name = "gcc_audio_ahb_clk",
49962306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
50062306a36Sopenharmony_ci				&pcnoc_clk_src.clkr.hw },
50162306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
50262306a36Sopenharmony_ci			.num_parents = 1,
50362306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
50462306a36Sopenharmony_ci		},
50562306a36Sopenharmony_ci	},
50662306a36Sopenharmony_ci};
50762306a36Sopenharmony_ci
50862306a36Sopenharmony_cistatic struct clk_branch gcc_audio_pwm_clk = {
50962306a36Sopenharmony_ci	.halt_reg = 0x1b00C,
51062306a36Sopenharmony_ci	.clkr = {
51162306a36Sopenharmony_ci		.enable_reg = 0x1b00C,
51262306a36Sopenharmony_ci		.enable_mask = BIT(0),
51362306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
51462306a36Sopenharmony_ci			.name = "gcc_audio_pwm_clk",
51562306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
51662306a36Sopenharmony_ci				&audio_clk_src.clkr.hw },
51762306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
51862306a36Sopenharmony_ci			.num_parents = 1,
51962306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
52062306a36Sopenharmony_ci		},
52162306a36Sopenharmony_ci	},
52262306a36Sopenharmony_ci};
52362306a36Sopenharmony_ci
52462306a36Sopenharmony_cistatic const struct freq_tbl ftbl_gcc_blsp1_qup1_2_i2c_apps_clk[] = {
52562306a36Sopenharmony_ci	F(19050000, P_FEPLL200, 10.5, 1, 1),
52662306a36Sopenharmony_ci	{ }
52762306a36Sopenharmony_ci};
52862306a36Sopenharmony_ci
52962306a36Sopenharmony_cistatic struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
53062306a36Sopenharmony_ci	.cmd_rcgr = 0x200c,
53162306a36Sopenharmony_ci	.hid_width = 5,
53262306a36Sopenharmony_ci	.parent_map = gcc_xo_200_map,
53362306a36Sopenharmony_ci	.freq_tbl = ftbl_gcc_blsp1_qup1_2_i2c_apps_clk,
53462306a36Sopenharmony_ci	.clkr.hw.init = &(struct clk_init_data){
53562306a36Sopenharmony_ci		.name = "blsp1_qup1_i2c_apps_clk_src",
53662306a36Sopenharmony_ci		.parent_data = gcc_xo_200,
53762306a36Sopenharmony_ci		.num_parents = ARRAY_SIZE(gcc_xo_200),
53862306a36Sopenharmony_ci		.ops = &clk_rcg2_ops,
53962306a36Sopenharmony_ci	},
54062306a36Sopenharmony_ci};
54162306a36Sopenharmony_ci
54262306a36Sopenharmony_cistatic struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
54362306a36Sopenharmony_ci	.halt_reg = 0x2008,
54462306a36Sopenharmony_ci	.clkr = {
54562306a36Sopenharmony_ci		.enable_reg = 0x2008,
54662306a36Sopenharmony_ci		.enable_mask = BIT(0),
54762306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
54862306a36Sopenharmony_ci			.name = "gcc_blsp1_qup1_i2c_apps_clk",
54962306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
55062306a36Sopenharmony_ci				&blsp1_qup1_i2c_apps_clk_src.clkr.hw },
55162306a36Sopenharmony_ci			.num_parents = 1,
55262306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
55362306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
55462306a36Sopenharmony_ci		},
55562306a36Sopenharmony_ci	},
55662306a36Sopenharmony_ci};
55762306a36Sopenharmony_ci
55862306a36Sopenharmony_cistatic struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
55962306a36Sopenharmony_ci	.cmd_rcgr = 0x3000,
56062306a36Sopenharmony_ci	.hid_width = 5,
56162306a36Sopenharmony_ci	.parent_map = gcc_xo_200_map,
56262306a36Sopenharmony_ci	.freq_tbl = ftbl_gcc_blsp1_qup1_2_i2c_apps_clk,
56362306a36Sopenharmony_ci	.clkr.hw.init = &(struct clk_init_data){
56462306a36Sopenharmony_ci		.name = "blsp1_qup2_i2c_apps_clk_src",
56562306a36Sopenharmony_ci		.parent_data = gcc_xo_200,
56662306a36Sopenharmony_ci		.num_parents = ARRAY_SIZE(gcc_xo_200),
56762306a36Sopenharmony_ci		.ops = &clk_rcg2_ops,
56862306a36Sopenharmony_ci	},
56962306a36Sopenharmony_ci};
57062306a36Sopenharmony_ci
57162306a36Sopenharmony_cistatic struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
57262306a36Sopenharmony_ci	.halt_reg = 0x3010,
57362306a36Sopenharmony_ci	.clkr = {
57462306a36Sopenharmony_ci		.enable_reg = 0x3010,
57562306a36Sopenharmony_ci		.enable_mask = BIT(0),
57662306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
57762306a36Sopenharmony_ci			.name = "gcc_blsp1_qup2_i2c_apps_clk",
57862306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
57962306a36Sopenharmony_ci				&blsp1_qup2_i2c_apps_clk_src.clkr.hw },
58062306a36Sopenharmony_ci			.num_parents = 1,
58162306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
58262306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
58362306a36Sopenharmony_ci		},
58462306a36Sopenharmony_ci	},
58562306a36Sopenharmony_ci};
58662306a36Sopenharmony_ci
58762306a36Sopenharmony_cistatic struct parent_map gcc_xo_200_spi_map[] = {
58862306a36Sopenharmony_ci	{  P_XO, 0 },
58962306a36Sopenharmony_ci	{  P_FEPLL200, 2 },
59062306a36Sopenharmony_ci};
59162306a36Sopenharmony_ci
59262306a36Sopenharmony_cistatic const struct clk_parent_data gcc_xo_200_spi[] = {
59362306a36Sopenharmony_ci	{ .fw_name = "xo", .name = "xo" },
59462306a36Sopenharmony_ci	{ .hw = &gcc_fepll200_clk.cdiv.clkr.hw },
59562306a36Sopenharmony_ci};
59662306a36Sopenharmony_ci
59762306a36Sopenharmony_cistatic const struct freq_tbl ftbl_gcc_blsp1_qup1_2_spi_apps_clk[] = {
59862306a36Sopenharmony_ci	F(960000, P_XO, 12, 1, 4),
59962306a36Sopenharmony_ci	F(4800000, P_XO, 1, 1, 10),
60062306a36Sopenharmony_ci	F(9600000, P_XO, 1, 1, 5),
60162306a36Sopenharmony_ci	F(15000000, P_XO, 1, 1, 3),
60262306a36Sopenharmony_ci	F(19200000, P_XO, 1, 2, 5),
60362306a36Sopenharmony_ci	F(24000000, P_XO, 1, 1, 2),
60462306a36Sopenharmony_ci	F(48000000, P_XO, 1, 0, 0),
60562306a36Sopenharmony_ci	{ }
60662306a36Sopenharmony_ci};
60762306a36Sopenharmony_ci
60862306a36Sopenharmony_cistatic struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
60962306a36Sopenharmony_ci	.cmd_rcgr = 0x2024,
61062306a36Sopenharmony_ci	.mnd_width = 8,
61162306a36Sopenharmony_ci	.hid_width = 5,
61262306a36Sopenharmony_ci	.parent_map = gcc_xo_200_spi_map,
61362306a36Sopenharmony_ci	.freq_tbl = ftbl_gcc_blsp1_qup1_2_spi_apps_clk,
61462306a36Sopenharmony_ci	.clkr.hw.init = &(struct clk_init_data){
61562306a36Sopenharmony_ci		.name = "blsp1_qup1_spi_apps_clk_src",
61662306a36Sopenharmony_ci		.parent_data = gcc_xo_200_spi,
61762306a36Sopenharmony_ci		.num_parents = ARRAY_SIZE(gcc_xo_200_spi),
61862306a36Sopenharmony_ci		.ops = &clk_rcg2_ops,
61962306a36Sopenharmony_ci	},
62062306a36Sopenharmony_ci};
62162306a36Sopenharmony_ci
62262306a36Sopenharmony_cistatic struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
62362306a36Sopenharmony_ci	.halt_reg = 0x2004,
62462306a36Sopenharmony_ci	.clkr = {
62562306a36Sopenharmony_ci		.enable_reg = 0x2004,
62662306a36Sopenharmony_ci		.enable_mask = BIT(0),
62762306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
62862306a36Sopenharmony_ci			.name = "gcc_blsp1_qup1_spi_apps_clk",
62962306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
63062306a36Sopenharmony_ci				&blsp1_qup1_spi_apps_clk_src.clkr.hw },
63162306a36Sopenharmony_ci			.num_parents = 1,
63262306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
63362306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
63462306a36Sopenharmony_ci		},
63562306a36Sopenharmony_ci	},
63662306a36Sopenharmony_ci};
63762306a36Sopenharmony_ci
63862306a36Sopenharmony_cistatic struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
63962306a36Sopenharmony_ci	.cmd_rcgr = 0x3014,
64062306a36Sopenharmony_ci	.mnd_width = 8,
64162306a36Sopenharmony_ci	.hid_width = 5,
64262306a36Sopenharmony_ci	.freq_tbl = ftbl_gcc_blsp1_qup1_2_spi_apps_clk,
64362306a36Sopenharmony_ci	.parent_map = gcc_xo_200_spi_map,
64462306a36Sopenharmony_ci	.clkr.hw.init = &(struct clk_init_data){
64562306a36Sopenharmony_ci		.name = "blsp1_qup2_spi_apps_clk_src",
64662306a36Sopenharmony_ci		.parent_data = gcc_xo_200_spi,
64762306a36Sopenharmony_ci		.num_parents = ARRAY_SIZE(gcc_xo_200_spi),
64862306a36Sopenharmony_ci		.ops = &clk_rcg2_ops,
64962306a36Sopenharmony_ci	},
65062306a36Sopenharmony_ci};
65162306a36Sopenharmony_ci
65262306a36Sopenharmony_cistatic struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
65362306a36Sopenharmony_ci	.halt_reg = 0x300c,
65462306a36Sopenharmony_ci	.clkr = {
65562306a36Sopenharmony_ci		.enable_reg = 0x300c,
65662306a36Sopenharmony_ci		.enable_mask = BIT(0),
65762306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
65862306a36Sopenharmony_ci			.name = "gcc_blsp1_qup2_spi_apps_clk",
65962306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
66062306a36Sopenharmony_ci				&blsp1_qup2_spi_apps_clk_src.clkr.hw },
66162306a36Sopenharmony_ci			.num_parents = 1,
66262306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
66362306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
66462306a36Sopenharmony_ci		},
66562306a36Sopenharmony_ci	},
66662306a36Sopenharmony_ci};
66762306a36Sopenharmony_ci
66862306a36Sopenharmony_cistatic const struct freq_tbl ftbl_gcc_blsp1_uart1_2_apps_clk[] = {
66962306a36Sopenharmony_ci	F(1843200, P_FEPLL200, 1, 144, 15625),
67062306a36Sopenharmony_ci	F(3686400, P_FEPLL200, 1, 288, 15625),
67162306a36Sopenharmony_ci	F(7372800, P_FEPLL200, 1, 576, 15625),
67262306a36Sopenharmony_ci	F(14745600, P_FEPLL200, 1, 1152, 15625),
67362306a36Sopenharmony_ci	F(16000000, P_FEPLL200, 1, 2, 25),
67462306a36Sopenharmony_ci	F(24000000, P_XO, 1, 1, 2),
67562306a36Sopenharmony_ci	F(32000000, P_FEPLL200, 1, 4, 25),
67662306a36Sopenharmony_ci	F(40000000, P_FEPLL200, 1, 1, 5),
67762306a36Sopenharmony_ci	F(46400000, P_FEPLL200, 1, 29, 125),
67862306a36Sopenharmony_ci	F(48000000, P_XO, 1, 0, 0),
67962306a36Sopenharmony_ci	{ }
68062306a36Sopenharmony_ci};
68162306a36Sopenharmony_ci
68262306a36Sopenharmony_cistatic struct clk_rcg2 blsp1_uart1_apps_clk_src = {
68362306a36Sopenharmony_ci	.cmd_rcgr = 0x2044,
68462306a36Sopenharmony_ci	.mnd_width = 16,
68562306a36Sopenharmony_ci	.hid_width = 5,
68662306a36Sopenharmony_ci	.freq_tbl = ftbl_gcc_blsp1_uart1_2_apps_clk,
68762306a36Sopenharmony_ci	.parent_map = gcc_xo_200_spi_map,
68862306a36Sopenharmony_ci	.clkr.hw.init = &(struct clk_init_data){
68962306a36Sopenharmony_ci		.name = "blsp1_uart1_apps_clk_src",
69062306a36Sopenharmony_ci		.parent_data = gcc_xo_200_spi,
69162306a36Sopenharmony_ci		.num_parents = ARRAY_SIZE(gcc_xo_200_spi),
69262306a36Sopenharmony_ci		.ops = &clk_rcg2_ops,
69362306a36Sopenharmony_ci	},
69462306a36Sopenharmony_ci};
69562306a36Sopenharmony_ci
69662306a36Sopenharmony_cistatic struct clk_branch gcc_blsp1_uart1_apps_clk = {
69762306a36Sopenharmony_ci	.halt_reg = 0x203c,
69862306a36Sopenharmony_ci	.clkr = {
69962306a36Sopenharmony_ci		.enable_reg = 0x203c,
70062306a36Sopenharmony_ci		.enable_mask = BIT(0),
70162306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
70262306a36Sopenharmony_ci			.name = "gcc_blsp1_uart1_apps_clk",
70362306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
70462306a36Sopenharmony_ci				&blsp1_uart1_apps_clk_src.clkr.hw },
70562306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
70662306a36Sopenharmony_ci			.num_parents = 1,
70762306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
70862306a36Sopenharmony_ci		},
70962306a36Sopenharmony_ci	},
71062306a36Sopenharmony_ci};
71162306a36Sopenharmony_ci
71262306a36Sopenharmony_cistatic struct clk_rcg2 blsp1_uart2_apps_clk_src = {
71362306a36Sopenharmony_ci	.cmd_rcgr = 0x3034,
71462306a36Sopenharmony_ci	.mnd_width = 16,
71562306a36Sopenharmony_ci	.hid_width = 5,
71662306a36Sopenharmony_ci	.freq_tbl = ftbl_gcc_blsp1_uart1_2_apps_clk,
71762306a36Sopenharmony_ci	.parent_map = gcc_xo_200_spi_map,
71862306a36Sopenharmony_ci	.clkr.hw.init = &(struct clk_init_data){
71962306a36Sopenharmony_ci		.name = "blsp1_uart2_apps_clk_src",
72062306a36Sopenharmony_ci		.parent_data = gcc_xo_200_spi,
72162306a36Sopenharmony_ci		.num_parents = ARRAY_SIZE(gcc_xo_200_spi),
72262306a36Sopenharmony_ci		.ops = &clk_rcg2_ops,
72362306a36Sopenharmony_ci	},
72462306a36Sopenharmony_ci};
72562306a36Sopenharmony_ci
72662306a36Sopenharmony_cistatic struct clk_branch gcc_blsp1_uart2_apps_clk = {
72762306a36Sopenharmony_ci	.halt_reg = 0x302c,
72862306a36Sopenharmony_ci	.clkr = {
72962306a36Sopenharmony_ci		.enable_reg = 0x302c,
73062306a36Sopenharmony_ci		.enable_mask = BIT(0),
73162306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
73262306a36Sopenharmony_ci			.name = "gcc_blsp1_uart2_apps_clk",
73362306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
73462306a36Sopenharmony_ci				&blsp1_uart2_apps_clk_src.clkr.hw },
73562306a36Sopenharmony_ci			.num_parents = 1,
73662306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
73762306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
73862306a36Sopenharmony_ci		},
73962306a36Sopenharmony_ci	},
74062306a36Sopenharmony_ci};
74162306a36Sopenharmony_ci
74262306a36Sopenharmony_cistatic const struct freq_tbl ftbl_gcc_gp_clk[] = {
74362306a36Sopenharmony_ci	F(1250000,  P_FEPLL200, 1, 16, 0),
74462306a36Sopenharmony_ci	F(2500000,  P_FEPLL200, 1,  8, 0),
74562306a36Sopenharmony_ci	F(5000000,  P_FEPLL200, 1,  4, 0),
74662306a36Sopenharmony_ci	{ }
74762306a36Sopenharmony_ci};
74862306a36Sopenharmony_ci
74962306a36Sopenharmony_cistatic struct clk_rcg2 gp1_clk_src = {
75062306a36Sopenharmony_ci	.cmd_rcgr = 0x8004,
75162306a36Sopenharmony_ci	.mnd_width = 8,
75262306a36Sopenharmony_ci	.hid_width = 5,
75362306a36Sopenharmony_ci	.freq_tbl = ftbl_gcc_gp_clk,
75462306a36Sopenharmony_ci	.parent_map = gcc_xo_200_map,
75562306a36Sopenharmony_ci	.clkr.hw.init = &(struct clk_init_data){
75662306a36Sopenharmony_ci		.name = "gp1_clk_src",
75762306a36Sopenharmony_ci		.parent_data = gcc_xo_200,
75862306a36Sopenharmony_ci		.num_parents = ARRAY_SIZE(gcc_xo_200),
75962306a36Sopenharmony_ci		.ops = &clk_rcg2_ops,
76062306a36Sopenharmony_ci	},
76162306a36Sopenharmony_ci};
76262306a36Sopenharmony_ci
76362306a36Sopenharmony_cistatic struct clk_branch gcc_gp1_clk = {
76462306a36Sopenharmony_ci	.halt_reg = 0x8000,
76562306a36Sopenharmony_ci	.clkr = {
76662306a36Sopenharmony_ci		.enable_reg = 0x8000,
76762306a36Sopenharmony_ci		.enable_mask = BIT(0),
76862306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
76962306a36Sopenharmony_ci			.name = "gcc_gp1_clk",
77062306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
77162306a36Sopenharmony_ci				&gp1_clk_src.clkr.hw },
77262306a36Sopenharmony_ci			.num_parents = 1,
77362306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
77462306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
77562306a36Sopenharmony_ci		},
77662306a36Sopenharmony_ci	},
77762306a36Sopenharmony_ci};
77862306a36Sopenharmony_ci
77962306a36Sopenharmony_cistatic struct clk_rcg2 gp2_clk_src = {
78062306a36Sopenharmony_ci	.cmd_rcgr = 0x9004,
78162306a36Sopenharmony_ci	.mnd_width = 8,
78262306a36Sopenharmony_ci	.hid_width = 5,
78362306a36Sopenharmony_ci	.freq_tbl = ftbl_gcc_gp_clk,
78462306a36Sopenharmony_ci	.parent_map = gcc_xo_200_map,
78562306a36Sopenharmony_ci	.clkr.hw.init = &(struct clk_init_data){
78662306a36Sopenharmony_ci		.name = "gp2_clk_src",
78762306a36Sopenharmony_ci		.parent_data = gcc_xo_200,
78862306a36Sopenharmony_ci		.num_parents = ARRAY_SIZE(gcc_xo_200),
78962306a36Sopenharmony_ci		.ops = &clk_rcg2_ops,
79062306a36Sopenharmony_ci	},
79162306a36Sopenharmony_ci};
79262306a36Sopenharmony_ci
79362306a36Sopenharmony_cistatic struct clk_branch gcc_gp2_clk = {
79462306a36Sopenharmony_ci	.halt_reg = 0x9000,
79562306a36Sopenharmony_ci	.clkr = {
79662306a36Sopenharmony_ci		.enable_reg = 0x9000,
79762306a36Sopenharmony_ci		.enable_mask = BIT(0),
79862306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
79962306a36Sopenharmony_ci			.name = "gcc_gp2_clk",
80062306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
80162306a36Sopenharmony_ci				&gp2_clk_src.clkr.hw },
80262306a36Sopenharmony_ci			.num_parents = 1,
80362306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
80462306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
80562306a36Sopenharmony_ci		},
80662306a36Sopenharmony_ci	},
80762306a36Sopenharmony_ci};
80862306a36Sopenharmony_ci
80962306a36Sopenharmony_cistatic struct clk_rcg2 gp3_clk_src = {
81062306a36Sopenharmony_ci	.cmd_rcgr = 0xa004,
81162306a36Sopenharmony_ci	.mnd_width = 8,
81262306a36Sopenharmony_ci	.hid_width = 5,
81362306a36Sopenharmony_ci	.freq_tbl = ftbl_gcc_gp_clk,
81462306a36Sopenharmony_ci	.parent_map = gcc_xo_200_map,
81562306a36Sopenharmony_ci	.clkr.hw.init = &(struct clk_init_data){
81662306a36Sopenharmony_ci		.name = "gp3_clk_src",
81762306a36Sopenharmony_ci		.parent_data = gcc_xo_200,
81862306a36Sopenharmony_ci		.num_parents = ARRAY_SIZE(gcc_xo_200),
81962306a36Sopenharmony_ci		.ops = &clk_rcg2_ops,
82062306a36Sopenharmony_ci	},
82162306a36Sopenharmony_ci};
82262306a36Sopenharmony_ci
82362306a36Sopenharmony_cistatic struct clk_branch gcc_gp3_clk = {
82462306a36Sopenharmony_ci	.halt_reg = 0xa000,
82562306a36Sopenharmony_ci	.clkr = {
82662306a36Sopenharmony_ci		.enable_reg = 0xa000,
82762306a36Sopenharmony_ci		.enable_mask = BIT(0),
82862306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
82962306a36Sopenharmony_ci			.name = "gcc_gp3_clk",
83062306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
83162306a36Sopenharmony_ci				&gp3_clk_src.clkr.hw },
83262306a36Sopenharmony_ci			.num_parents = 1,
83362306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
83462306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
83562306a36Sopenharmony_ci		},
83662306a36Sopenharmony_ci	},
83762306a36Sopenharmony_ci};
83862306a36Sopenharmony_ci
83962306a36Sopenharmony_cistatic struct parent_map gcc_xo_sdcc1_500_map[] = {
84062306a36Sopenharmony_ci	{  P_XO, 0 },
84162306a36Sopenharmony_ci	{  P_DDRPLL, 1 },
84262306a36Sopenharmony_ci	{  P_FEPLL500, 2 },
84362306a36Sopenharmony_ci};
84462306a36Sopenharmony_ci
84562306a36Sopenharmony_cistatic const struct clk_parent_data gcc_xo_sdcc1_500[] = {
84662306a36Sopenharmony_ci	{ .fw_name = "xo", .name = "xo" },
84762306a36Sopenharmony_ci	{ .hw = &gcc_apss_sdcc_clk.cdiv.clkr.hw },
84862306a36Sopenharmony_ci	{ .hw = &gcc_fepll500_clk.cdiv.clkr.hw },
84962306a36Sopenharmony_ci};
85062306a36Sopenharmony_ci
85162306a36Sopenharmony_cistatic const struct freq_tbl ftbl_gcc_sdcc1_apps_clk[] = {
85262306a36Sopenharmony_ci	F(144000,    P_XO,			1,  3, 240),
85362306a36Sopenharmony_ci	F(400000,    P_XO,			1,  1, 0),
85462306a36Sopenharmony_ci	F(20000000,  P_FEPLL500,		1,  1, 25),
85562306a36Sopenharmony_ci	F(25000000,  P_FEPLL500,		1,  1, 20),
85662306a36Sopenharmony_ci	F(50000000,  P_FEPLL500,		1,  1, 10),
85762306a36Sopenharmony_ci	F(100000000, P_FEPLL500,		1,  1, 5),
85862306a36Sopenharmony_ci	F(192000000, P_DDRPLL,			1,  0, 0),
85962306a36Sopenharmony_ci	{ }
86062306a36Sopenharmony_ci};
86162306a36Sopenharmony_ci
86262306a36Sopenharmony_cistatic struct clk_rcg2  sdcc1_apps_clk_src = {
86362306a36Sopenharmony_ci	.cmd_rcgr = 0x18004,
86462306a36Sopenharmony_ci	.hid_width = 5,
86562306a36Sopenharmony_ci	.freq_tbl = ftbl_gcc_sdcc1_apps_clk,
86662306a36Sopenharmony_ci	.parent_map = gcc_xo_sdcc1_500_map,
86762306a36Sopenharmony_ci	.clkr.hw.init = &(struct clk_init_data){
86862306a36Sopenharmony_ci		.name = "sdcc1_apps_clk_src",
86962306a36Sopenharmony_ci		.parent_data = gcc_xo_sdcc1_500,
87062306a36Sopenharmony_ci		.num_parents = ARRAY_SIZE(gcc_xo_sdcc1_500),
87162306a36Sopenharmony_ci		.ops = &clk_rcg2_ops,
87262306a36Sopenharmony_ci		.flags = CLK_SET_RATE_PARENT,
87362306a36Sopenharmony_ci	},
87462306a36Sopenharmony_ci};
87562306a36Sopenharmony_ci
87662306a36Sopenharmony_cistatic const struct freq_tbl ftbl_gcc_apps_clk[] = {
87762306a36Sopenharmony_ci	F(48000000,  P_XO,         1, 0, 0),
87862306a36Sopenharmony_ci	F(200000000, P_FEPLL200,   1, 0, 0),
87962306a36Sopenharmony_ci	F(384000000, P_DDRPLLAPSS, 1, 0, 0),
88062306a36Sopenharmony_ci	F(413000000, P_DDRPLLAPSS, 1, 0, 0),
88162306a36Sopenharmony_ci	F(448000000, P_DDRPLLAPSS, 1, 0, 0),
88262306a36Sopenharmony_ci	F(488000000, P_DDRPLLAPSS, 1, 0, 0),
88362306a36Sopenharmony_ci	F(500000000, P_FEPLL500,   1, 0, 0),
88462306a36Sopenharmony_ci	F(512000000, P_DDRPLLAPSS, 1, 0, 0),
88562306a36Sopenharmony_ci	F(537000000, P_DDRPLLAPSS, 1, 0, 0),
88662306a36Sopenharmony_ci	F(565000000, P_DDRPLLAPSS, 1, 0, 0),
88762306a36Sopenharmony_ci	F(597000000, P_DDRPLLAPSS, 1, 0, 0),
88862306a36Sopenharmony_ci	F(632000000, P_DDRPLLAPSS, 1, 0, 0),
88962306a36Sopenharmony_ci	F(672000000, P_DDRPLLAPSS, 1, 0, 0),
89062306a36Sopenharmony_ci	F(716000000, P_DDRPLLAPSS, 1, 0, 0),
89162306a36Sopenharmony_ci	{ }
89262306a36Sopenharmony_ci};
89362306a36Sopenharmony_ci
89462306a36Sopenharmony_cistatic struct parent_map gcc_xo_ddr_500_200_map[] = {
89562306a36Sopenharmony_ci	{  P_XO, 0 },
89662306a36Sopenharmony_ci	{  P_FEPLL200, 3 },
89762306a36Sopenharmony_ci	{  P_FEPLL500, 2 },
89862306a36Sopenharmony_ci	{  P_DDRPLLAPSS, 1 },
89962306a36Sopenharmony_ci};
90062306a36Sopenharmony_ci
90162306a36Sopenharmony_cistatic const struct clk_parent_data gcc_xo_ddr_500_200[] = {
90262306a36Sopenharmony_ci	{ .fw_name = "xo", .name = "xo" },
90362306a36Sopenharmony_ci	{ .hw = &gcc_fepll200_clk.cdiv.clkr.hw },
90462306a36Sopenharmony_ci	{ .hw = &gcc_fepll500_clk.cdiv.clkr.hw },
90562306a36Sopenharmony_ci	{ .hw = &gcc_apss_cpu_plldiv_clk.cdiv.clkr.hw },
90662306a36Sopenharmony_ci};
90762306a36Sopenharmony_ci
90862306a36Sopenharmony_cistatic struct clk_rcg2 apps_clk_src = {
90962306a36Sopenharmony_ci	.cmd_rcgr = 0x1900c,
91062306a36Sopenharmony_ci	.hid_width = 5,
91162306a36Sopenharmony_ci	.freq_tbl = ftbl_gcc_apps_clk,
91262306a36Sopenharmony_ci	.parent_map = gcc_xo_ddr_500_200_map,
91362306a36Sopenharmony_ci	.clkr.hw.init = &(struct clk_init_data){
91462306a36Sopenharmony_ci		.name = "apps_clk_src",
91562306a36Sopenharmony_ci		.parent_data = gcc_xo_ddr_500_200,
91662306a36Sopenharmony_ci		.num_parents = ARRAY_SIZE(gcc_xo_ddr_500_200),
91762306a36Sopenharmony_ci		.ops = &clk_rcg2_ops,
91862306a36Sopenharmony_ci		.flags = CLK_SET_RATE_PARENT,
91962306a36Sopenharmony_ci	},
92062306a36Sopenharmony_ci};
92162306a36Sopenharmony_ci
92262306a36Sopenharmony_cistatic const struct freq_tbl ftbl_gcc_apps_ahb_clk[] = {
92362306a36Sopenharmony_ci	F(48000000, P_XO,	   1, 0, 0),
92462306a36Sopenharmony_ci	F(100000000, P_FEPLL200,   2, 0, 0),
92562306a36Sopenharmony_ci	{ }
92662306a36Sopenharmony_ci};
92762306a36Sopenharmony_ci
92862306a36Sopenharmony_cistatic struct clk_rcg2 apps_ahb_clk_src = {
92962306a36Sopenharmony_ci	.cmd_rcgr = 0x19014,
93062306a36Sopenharmony_ci	.hid_width = 5,
93162306a36Sopenharmony_ci	.parent_map = gcc_xo_200_500_map,
93262306a36Sopenharmony_ci	.freq_tbl = ftbl_gcc_apps_ahb_clk,
93362306a36Sopenharmony_ci	.clkr.hw.init = &(struct clk_init_data){
93462306a36Sopenharmony_ci		.name = "apps_ahb_clk_src",
93562306a36Sopenharmony_ci		.parent_data = gcc_xo_200_500,
93662306a36Sopenharmony_ci		.num_parents = ARRAY_SIZE(gcc_xo_200_500),
93762306a36Sopenharmony_ci		.ops = &clk_rcg2_ops,
93862306a36Sopenharmony_ci	},
93962306a36Sopenharmony_ci};
94062306a36Sopenharmony_ci
94162306a36Sopenharmony_cistatic struct clk_branch gcc_apss_ahb_clk = {
94262306a36Sopenharmony_ci	.halt_reg = 0x19004,
94362306a36Sopenharmony_ci	.halt_check = BRANCH_HALT_VOTED,
94462306a36Sopenharmony_ci	.clkr = {
94562306a36Sopenharmony_ci		.enable_reg = 0x6000,
94662306a36Sopenharmony_ci		.enable_mask = BIT(14),
94762306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
94862306a36Sopenharmony_ci			.name = "gcc_apss_ahb_clk",
94962306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
95062306a36Sopenharmony_ci				&apps_ahb_clk_src.clkr.hw },
95162306a36Sopenharmony_ci			.num_parents = 1,
95262306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
95362306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
95462306a36Sopenharmony_ci		},
95562306a36Sopenharmony_ci	},
95662306a36Sopenharmony_ci};
95762306a36Sopenharmony_ci
95862306a36Sopenharmony_cistatic struct clk_branch gcc_blsp1_ahb_clk = {
95962306a36Sopenharmony_ci	.halt_reg = 0x1008,
96062306a36Sopenharmony_ci	.halt_check = BRANCH_HALT_VOTED,
96162306a36Sopenharmony_ci	.clkr = {
96262306a36Sopenharmony_ci		.enable_reg = 0x6000,
96362306a36Sopenharmony_ci		.enable_mask = BIT(10),
96462306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
96562306a36Sopenharmony_ci			.name = "gcc_blsp1_ahb_clk",
96662306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
96762306a36Sopenharmony_ci				&pcnoc_clk_src.clkr.hw },
96862306a36Sopenharmony_ci			.num_parents = 1,
96962306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
97062306a36Sopenharmony_ci		},
97162306a36Sopenharmony_ci	},
97262306a36Sopenharmony_ci};
97362306a36Sopenharmony_ci
97462306a36Sopenharmony_cistatic struct clk_branch gcc_dcd_xo_clk = {
97562306a36Sopenharmony_ci	.halt_reg = 0x2103c,
97662306a36Sopenharmony_ci	.clkr = {
97762306a36Sopenharmony_ci		.enable_reg = 0x2103c,
97862306a36Sopenharmony_ci		.enable_mask = BIT(0),
97962306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
98062306a36Sopenharmony_ci			.name = "gcc_dcd_xo_clk",
98162306a36Sopenharmony_ci			.parent_data = &(const struct clk_parent_data){
98262306a36Sopenharmony_ci				.fw_name = "xo",
98362306a36Sopenharmony_ci				.name = "xo",
98462306a36Sopenharmony_ci			},
98562306a36Sopenharmony_ci			.num_parents = 1,
98662306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
98762306a36Sopenharmony_ci		},
98862306a36Sopenharmony_ci	},
98962306a36Sopenharmony_ci};
99062306a36Sopenharmony_ci
99162306a36Sopenharmony_cistatic struct clk_branch gcc_boot_rom_ahb_clk = {
99262306a36Sopenharmony_ci	.halt_reg = 0x1300c,
99362306a36Sopenharmony_ci	.clkr = {
99462306a36Sopenharmony_ci		.enable_reg = 0x1300c,
99562306a36Sopenharmony_ci		.enable_mask = BIT(0),
99662306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
99762306a36Sopenharmony_ci			.name = "gcc_boot_rom_ahb_clk",
99862306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
99962306a36Sopenharmony_ci				&pcnoc_clk_src.clkr.hw },
100062306a36Sopenharmony_ci			.num_parents = 1,
100162306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
100262306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
100362306a36Sopenharmony_ci		},
100462306a36Sopenharmony_ci	},
100562306a36Sopenharmony_ci};
100662306a36Sopenharmony_ci
100762306a36Sopenharmony_cistatic struct clk_branch gcc_crypto_ahb_clk = {
100862306a36Sopenharmony_ci	.halt_reg = 0x16024,
100962306a36Sopenharmony_ci	.halt_check = BRANCH_HALT_VOTED,
101062306a36Sopenharmony_ci	.clkr = {
101162306a36Sopenharmony_ci		.enable_reg = 0x6000,
101262306a36Sopenharmony_ci		.enable_mask = BIT(0),
101362306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
101462306a36Sopenharmony_ci			.name = "gcc_crypto_ahb_clk",
101562306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
101662306a36Sopenharmony_ci				&pcnoc_clk_src.clkr.hw },
101762306a36Sopenharmony_ci			.num_parents = 1,
101862306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
101962306a36Sopenharmony_ci		},
102062306a36Sopenharmony_ci	},
102162306a36Sopenharmony_ci};
102262306a36Sopenharmony_ci
102362306a36Sopenharmony_cistatic struct clk_branch gcc_crypto_axi_clk = {
102462306a36Sopenharmony_ci	.halt_reg = 0x16020,
102562306a36Sopenharmony_ci	.halt_check = BRANCH_HALT_VOTED,
102662306a36Sopenharmony_ci	.clkr = {
102762306a36Sopenharmony_ci		.enable_reg = 0x6000,
102862306a36Sopenharmony_ci		.enable_mask = BIT(1),
102962306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
103062306a36Sopenharmony_ci			.name = "gcc_crypto_axi_clk",
103162306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
103262306a36Sopenharmony_ci				&gcc_fepll125_clk.cdiv.clkr.hw },
103362306a36Sopenharmony_ci			.num_parents = 1,
103462306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
103562306a36Sopenharmony_ci		},
103662306a36Sopenharmony_ci	},
103762306a36Sopenharmony_ci};
103862306a36Sopenharmony_ci
103962306a36Sopenharmony_cistatic struct clk_branch gcc_crypto_clk = {
104062306a36Sopenharmony_ci	.halt_reg = 0x1601c,
104162306a36Sopenharmony_ci	.halt_check = BRANCH_HALT_VOTED,
104262306a36Sopenharmony_ci	.clkr = {
104362306a36Sopenharmony_ci		.enable_reg = 0x6000,
104462306a36Sopenharmony_ci		.enable_mask = BIT(2),
104562306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
104662306a36Sopenharmony_ci			.name = "gcc_crypto_clk",
104762306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
104862306a36Sopenharmony_ci				&gcc_fepll125_clk.cdiv.clkr.hw },
104962306a36Sopenharmony_ci			.num_parents = 1,
105062306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
105162306a36Sopenharmony_ci		},
105262306a36Sopenharmony_ci	},
105362306a36Sopenharmony_ci};
105462306a36Sopenharmony_ci
105562306a36Sopenharmony_cistatic struct parent_map gcc_xo_125_dly_map[] = {
105662306a36Sopenharmony_ci	{  P_XO, 0 },
105762306a36Sopenharmony_ci	{  P_FEPLL125DLY, 1 },
105862306a36Sopenharmony_ci};
105962306a36Sopenharmony_ci
106062306a36Sopenharmony_cistatic const struct clk_parent_data gcc_xo_125_dly[] = {
106162306a36Sopenharmony_ci	{ .fw_name = "xo", .name = "xo" },
106262306a36Sopenharmony_ci	{ .hw = &gcc_fepll125dly_clk.cdiv.clkr.hw },
106362306a36Sopenharmony_ci};
106462306a36Sopenharmony_ci
106562306a36Sopenharmony_cistatic const struct freq_tbl ftbl_gcc_fephy_dly_clk[] = {
106662306a36Sopenharmony_ci	F(125000000, P_FEPLL125DLY, 1, 0, 0),
106762306a36Sopenharmony_ci	{ }
106862306a36Sopenharmony_ci};
106962306a36Sopenharmony_ci
107062306a36Sopenharmony_cistatic struct clk_rcg2 fephy_125m_dly_clk_src = {
107162306a36Sopenharmony_ci	.cmd_rcgr = 0x12000,
107262306a36Sopenharmony_ci	.hid_width = 5,
107362306a36Sopenharmony_ci	.parent_map = gcc_xo_125_dly_map,
107462306a36Sopenharmony_ci	.freq_tbl = ftbl_gcc_fephy_dly_clk,
107562306a36Sopenharmony_ci	.clkr.hw.init = &(struct clk_init_data){
107662306a36Sopenharmony_ci		.name = "fephy_125m_dly_clk_src",
107762306a36Sopenharmony_ci		.parent_data = gcc_xo_125_dly,
107862306a36Sopenharmony_ci		.num_parents = ARRAY_SIZE(gcc_xo_125_dly),
107962306a36Sopenharmony_ci		.ops = &clk_rcg2_ops,
108062306a36Sopenharmony_ci	},
108162306a36Sopenharmony_ci};
108262306a36Sopenharmony_ci
108362306a36Sopenharmony_cistatic struct clk_branch gcc_ess_clk = {
108462306a36Sopenharmony_ci	.halt_reg = 0x12010,
108562306a36Sopenharmony_ci	.clkr = {
108662306a36Sopenharmony_ci		.enable_reg = 0x12010,
108762306a36Sopenharmony_ci		.enable_mask = BIT(0),
108862306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
108962306a36Sopenharmony_ci			.name = "gcc_ess_clk",
109062306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
109162306a36Sopenharmony_ci				&fephy_125m_dly_clk_src.clkr.hw },
109262306a36Sopenharmony_ci			.num_parents = 1,
109362306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
109462306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
109562306a36Sopenharmony_ci		},
109662306a36Sopenharmony_ci	},
109762306a36Sopenharmony_ci};
109862306a36Sopenharmony_ci
109962306a36Sopenharmony_cistatic struct clk_branch gcc_imem_axi_clk = {
110062306a36Sopenharmony_ci	.halt_reg = 0xe004,
110162306a36Sopenharmony_ci	.halt_check = BRANCH_HALT_VOTED,
110262306a36Sopenharmony_ci	.clkr = {
110362306a36Sopenharmony_ci		.enable_reg = 0x6000,
110462306a36Sopenharmony_ci		.enable_mask = BIT(17),
110562306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
110662306a36Sopenharmony_ci			.name = "gcc_imem_axi_clk",
110762306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
110862306a36Sopenharmony_ci				&gcc_fepll200_clk.cdiv.clkr.hw },
110962306a36Sopenharmony_ci			.num_parents = 1,
111062306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
111162306a36Sopenharmony_ci		},
111262306a36Sopenharmony_ci	},
111362306a36Sopenharmony_ci};
111462306a36Sopenharmony_ci
111562306a36Sopenharmony_cistatic struct clk_branch gcc_imem_cfg_ahb_clk = {
111662306a36Sopenharmony_ci	.halt_reg = 0xe008,
111762306a36Sopenharmony_ci	.clkr = {
111862306a36Sopenharmony_ci		.enable_reg = 0xe008,
111962306a36Sopenharmony_ci		.enable_mask = BIT(0),
112062306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
112162306a36Sopenharmony_ci			.name = "gcc_imem_cfg_ahb_clk",
112262306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
112362306a36Sopenharmony_ci				&pcnoc_clk_src.clkr.hw },
112462306a36Sopenharmony_ci			.num_parents = 1,
112562306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
112662306a36Sopenharmony_ci		},
112762306a36Sopenharmony_ci	},
112862306a36Sopenharmony_ci};
112962306a36Sopenharmony_ci
113062306a36Sopenharmony_cistatic struct clk_branch gcc_pcie_ahb_clk = {
113162306a36Sopenharmony_ci	.halt_reg = 0x1d00c,
113262306a36Sopenharmony_ci	.clkr = {
113362306a36Sopenharmony_ci		.enable_reg = 0x1d00c,
113462306a36Sopenharmony_ci		.enable_mask = BIT(0),
113562306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
113662306a36Sopenharmony_ci			.name = "gcc_pcie_ahb_clk",
113762306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
113862306a36Sopenharmony_ci				&pcnoc_clk_src.clkr.hw },
113962306a36Sopenharmony_ci			.num_parents = 1,
114062306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
114162306a36Sopenharmony_ci		},
114262306a36Sopenharmony_ci	},
114362306a36Sopenharmony_ci};
114462306a36Sopenharmony_ci
114562306a36Sopenharmony_cistatic struct clk_branch gcc_pcie_axi_m_clk = {
114662306a36Sopenharmony_ci	.halt_reg = 0x1d004,
114762306a36Sopenharmony_ci	.clkr = {
114862306a36Sopenharmony_ci		.enable_reg = 0x1d004,
114962306a36Sopenharmony_ci		.enable_mask = BIT(0),
115062306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
115162306a36Sopenharmony_ci			.name = "gcc_pcie_axi_m_clk",
115262306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
115362306a36Sopenharmony_ci				&gcc_fepll200_clk.cdiv.clkr.hw },
115462306a36Sopenharmony_ci			.num_parents = 1,
115562306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
115662306a36Sopenharmony_ci		},
115762306a36Sopenharmony_ci	},
115862306a36Sopenharmony_ci};
115962306a36Sopenharmony_ci
116062306a36Sopenharmony_cistatic struct clk_branch gcc_pcie_axi_s_clk = {
116162306a36Sopenharmony_ci	.halt_reg = 0x1d008,
116262306a36Sopenharmony_ci	.clkr = {
116362306a36Sopenharmony_ci		.enable_reg = 0x1d008,
116462306a36Sopenharmony_ci		.enable_mask = BIT(0),
116562306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
116662306a36Sopenharmony_ci			.name = "gcc_pcie_axi_s_clk",
116762306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
116862306a36Sopenharmony_ci				&gcc_fepll200_clk.cdiv.clkr.hw },
116962306a36Sopenharmony_ci			.num_parents = 1,
117062306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
117162306a36Sopenharmony_ci		},
117262306a36Sopenharmony_ci	},
117362306a36Sopenharmony_ci};
117462306a36Sopenharmony_ci
117562306a36Sopenharmony_cistatic struct clk_branch gcc_prng_ahb_clk = {
117662306a36Sopenharmony_ci	.halt_reg = 0x13004,
117762306a36Sopenharmony_ci	.halt_check = BRANCH_HALT_VOTED,
117862306a36Sopenharmony_ci	.clkr = {
117962306a36Sopenharmony_ci		.enable_reg = 0x6000,
118062306a36Sopenharmony_ci		.enable_mask = BIT(8),
118162306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
118262306a36Sopenharmony_ci			.name = "gcc_prng_ahb_clk",
118362306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
118462306a36Sopenharmony_ci				&pcnoc_clk_src.clkr.hw },
118562306a36Sopenharmony_ci			.num_parents = 1,
118662306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
118762306a36Sopenharmony_ci		},
118862306a36Sopenharmony_ci	},
118962306a36Sopenharmony_ci};
119062306a36Sopenharmony_ci
119162306a36Sopenharmony_cistatic struct clk_branch gcc_qpic_ahb_clk = {
119262306a36Sopenharmony_ci	.halt_reg = 0x1c008,
119362306a36Sopenharmony_ci	.clkr = {
119462306a36Sopenharmony_ci		.enable_reg = 0x1c008,
119562306a36Sopenharmony_ci		.enable_mask = BIT(0),
119662306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
119762306a36Sopenharmony_ci			.name = "gcc_qpic_ahb_clk",
119862306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
119962306a36Sopenharmony_ci				&pcnoc_clk_src.clkr.hw },
120062306a36Sopenharmony_ci			.num_parents = 1,
120162306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
120262306a36Sopenharmony_ci		},
120362306a36Sopenharmony_ci	},
120462306a36Sopenharmony_ci};
120562306a36Sopenharmony_ci
120662306a36Sopenharmony_cistatic struct clk_branch gcc_qpic_clk = {
120762306a36Sopenharmony_ci	.halt_reg = 0x1c004,
120862306a36Sopenharmony_ci	.clkr = {
120962306a36Sopenharmony_ci		.enable_reg = 0x1c004,
121062306a36Sopenharmony_ci		.enable_mask = BIT(0),
121162306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
121262306a36Sopenharmony_ci			.name = "gcc_qpic_clk",
121362306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
121462306a36Sopenharmony_ci				&pcnoc_clk_src.clkr.hw },
121562306a36Sopenharmony_ci			.num_parents = 1,
121662306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
121762306a36Sopenharmony_ci		},
121862306a36Sopenharmony_ci	},
121962306a36Sopenharmony_ci};
122062306a36Sopenharmony_ci
122162306a36Sopenharmony_cistatic struct clk_branch gcc_sdcc1_ahb_clk = {
122262306a36Sopenharmony_ci	.halt_reg = 0x18010,
122362306a36Sopenharmony_ci	.clkr = {
122462306a36Sopenharmony_ci		.enable_reg = 0x18010,
122562306a36Sopenharmony_ci		.enable_mask = BIT(0),
122662306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
122762306a36Sopenharmony_ci			.name = "gcc_sdcc1_ahb_clk",
122862306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
122962306a36Sopenharmony_ci				&pcnoc_clk_src.clkr.hw },
123062306a36Sopenharmony_ci			.num_parents = 1,
123162306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
123262306a36Sopenharmony_ci		},
123362306a36Sopenharmony_ci	},
123462306a36Sopenharmony_ci};
123562306a36Sopenharmony_ci
123662306a36Sopenharmony_cistatic struct clk_branch gcc_sdcc1_apps_clk = {
123762306a36Sopenharmony_ci	.halt_reg = 0x1800c,
123862306a36Sopenharmony_ci	.clkr = {
123962306a36Sopenharmony_ci		.enable_reg = 0x1800c,
124062306a36Sopenharmony_ci		.enable_mask = BIT(0),
124162306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
124262306a36Sopenharmony_ci			.name = "gcc_sdcc1_apps_clk",
124362306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
124462306a36Sopenharmony_ci				&sdcc1_apps_clk_src.clkr.hw },
124562306a36Sopenharmony_ci			.num_parents = 1,
124662306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
124762306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
124862306a36Sopenharmony_ci		},
124962306a36Sopenharmony_ci	},
125062306a36Sopenharmony_ci};
125162306a36Sopenharmony_ci
125262306a36Sopenharmony_cistatic struct clk_branch gcc_tlmm_ahb_clk = {
125362306a36Sopenharmony_ci	.halt_reg = 0x5004,
125462306a36Sopenharmony_ci	.halt_check = BRANCH_HALT_VOTED,
125562306a36Sopenharmony_ci	.clkr = {
125662306a36Sopenharmony_ci		.enable_reg = 0x6000,
125762306a36Sopenharmony_ci		.enable_mask = BIT(5),
125862306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
125962306a36Sopenharmony_ci			.name = "gcc_tlmm_ahb_clk",
126062306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
126162306a36Sopenharmony_ci				&pcnoc_clk_src.clkr.hw },
126262306a36Sopenharmony_ci			.num_parents = 1,
126362306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
126462306a36Sopenharmony_ci		},
126562306a36Sopenharmony_ci	},
126662306a36Sopenharmony_ci};
126762306a36Sopenharmony_ci
126862306a36Sopenharmony_cistatic struct clk_branch gcc_usb2_master_clk = {
126962306a36Sopenharmony_ci	.halt_reg = 0x1e00c,
127062306a36Sopenharmony_ci	.clkr = {
127162306a36Sopenharmony_ci		.enable_reg = 0x1e00c,
127262306a36Sopenharmony_ci		.enable_mask = BIT(0),
127362306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
127462306a36Sopenharmony_ci			.name = "gcc_usb2_master_clk",
127562306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
127662306a36Sopenharmony_ci				&pcnoc_clk_src.clkr.hw },
127762306a36Sopenharmony_ci			.num_parents = 1,
127862306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
127962306a36Sopenharmony_ci		},
128062306a36Sopenharmony_ci	},
128162306a36Sopenharmony_ci};
128262306a36Sopenharmony_ci
128362306a36Sopenharmony_cistatic struct clk_branch gcc_usb2_sleep_clk = {
128462306a36Sopenharmony_ci	.halt_reg = 0x1e010,
128562306a36Sopenharmony_ci	.clkr = {
128662306a36Sopenharmony_ci		.enable_reg = 0x1e010,
128762306a36Sopenharmony_ci		.enable_mask = BIT(0),
128862306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
128962306a36Sopenharmony_ci			.name = "gcc_usb2_sleep_clk",
129062306a36Sopenharmony_ci			.parent_data = &(const struct clk_parent_data){
129162306a36Sopenharmony_ci				.fw_name = "sleep_clk",
129262306a36Sopenharmony_ci				.name = "gcc_sleep_clk_src",
129362306a36Sopenharmony_ci			},
129462306a36Sopenharmony_ci			.num_parents = 1,
129562306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
129662306a36Sopenharmony_ci		},
129762306a36Sopenharmony_ci	},
129862306a36Sopenharmony_ci};
129962306a36Sopenharmony_ci
130062306a36Sopenharmony_cistatic const struct freq_tbl ftbl_gcc_usb30_mock_utmi_clk[] = {
130162306a36Sopenharmony_ci	F(2000000, P_FEPLL200, 10, 0, 0),
130262306a36Sopenharmony_ci	{ }
130362306a36Sopenharmony_ci};
130462306a36Sopenharmony_ci
130562306a36Sopenharmony_cistatic struct clk_rcg2 usb30_mock_utmi_clk_src = {
130662306a36Sopenharmony_ci	.cmd_rcgr = 0x1e000,
130762306a36Sopenharmony_ci	.hid_width = 5,
130862306a36Sopenharmony_ci	.parent_map = gcc_xo_200_map,
130962306a36Sopenharmony_ci	.freq_tbl = ftbl_gcc_usb30_mock_utmi_clk,
131062306a36Sopenharmony_ci	.clkr.hw.init = &(struct clk_init_data){
131162306a36Sopenharmony_ci		.name = "usb30_mock_utmi_clk_src",
131262306a36Sopenharmony_ci		.parent_data = gcc_xo_200,
131362306a36Sopenharmony_ci		.num_parents = ARRAY_SIZE(gcc_xo_200),
131462306a36Sopenharmony_ci		.ops = &clk_rcg2_ops,
131562306a36Sopenharmony_ci	},
131662306a36Sopenharmony_ci};
131762306a36Sopenharmony_ci
131862306a36Sopenharmony_cistatic struct clk_branch gcc_usb2_mock_utmi_clk = {
131962306a36Sopenharmony_ci	.halt_reg = 0x1e014,
132062306a36Sopenharmony_ci	.clkr = {
132162306a36Sopenharmony_ci		.enable_reg = 0x1e014,
132262306a36Sopenharmony_ci		.enable_mask = BIT(0),
132362306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
132462306a36Sopenharmony_ci			.name = "gcc_usb2_mock_utmi_clk",
132562306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
132662306a36Sopenharmony_ci				&usb30_mock_utmi_clk_src.clkr.hw },
132762306a36Sopenharmony_ci			.num_parents = 1,
132862306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
132962306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
133062306a36Sopenharmony_ci		},
133162306a36Sopenharmony_ci	},
133262306a36Sopenharmony_ci};
133362306a36Sopenharmony_ci
133462306a36Sopenharmony_cistatic struct clk_branch gcc_usb3_master_clk = {
133562306a36Sopenharmony_ci	.halt_reg = 0x1e028,
133662306a36Sopenharmony_ci	.clkr = {
133762306a36Sopenharmony_ci		.enable_reg = 0x1e028,
133862306a36Sopenharmony_ci		.enable_mask = BIT(0),
133962306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
134062306a36Sopenharmony_ci			.name = "gcc_usb3_master_clk",
134162306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
134262306a36Sopenharmony_ci				&gcc_fepll125_clk.cdiv.clkr.hw },
134362306a36Sopenharmony_ci			.num_parents = 1,
134462306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
134562306a36Sopenharmony_ci		},
134662306a36Sopenharmony_ci	},
134762306a36Sopenharmony_ci};
134862306a36Sopenharmony_ci
134962306a36Sopenharmony_cistatic struct clk_branch gcc_usb3_sleep_clk = {
135062306a36Sopenharmony_ci	.halt_reg = 0x1e02C,
135162306a36Sopenharmony_ci	.clkr = {
135262306a36Sopenharmony_ci		.enable_reg = 0x1e02C,
135362306a36Sopenharmony_ci		.enable_mask = BIT(0),
135462306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
135562306a36Sopenharmony_ci			.name = "gcc_usb3_sleep_clk",
135662306a36Sopenharmony_ci			.parent_data = &(const struct clk_parent_data){
135762306a36Sopenharmony_ci				.fw_name = "sleep_clk",
135862306a36Sopenharmony_ci				.name = "gcc_sleep_clk_src",
135962306a36Sopenharmony_ci			},
136062306a36Sopenharmony_ci			.num_parents = 1,
136162306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
136262306a36Sopenharmony_ci		},
136362306a36Sopenharmony_ci	},
136462306a36Sopenharmony_ci};
136562306a36Sopenharmony_ci
136662306a36Sopenharmony_cistatic struct clk_branch gcc_usb3_mock_utmi_clk = {
136762306a36Sopenharmony_ci	.halt_reg = 0x1e030,
136862306a36Sopenharmony_ci	.clkr = {
136962306a36Sopenharmony_ci		.enable_reg = 0x1e030,
137062306a36Sopenharmony_ci		.enable_mask = BIT(0),
137162306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
137262306a36Sopenharmony_ci			.name = "gcc_usb3_mock_utmi_clk",
137362306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
137462306a36Sopenharmony_ci				&usb30_mock_utmi_clk_src.clkr.hw },
137562306a36Sopenharmony_ci			.num_parents = 1,
137662306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
137762306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
137862306a36Sopenharmony_ci		},
137962306a36Sopenharmony_ci	},
138062306a36Sopenharmony_ci};
138162306a36Sopenharmony_ci
138262306a36Sopenharmony_cistatic struct parent_map gcc_xo_wcss2g_map[] = {
138362306a36Sopenharmony_ci	{  P_XO, 0 },
138462306a36Sopenharmony_ci	{  P_FEPLLWCSS2G, 1 },
138562306a36Sopenharmony_ci};
138662306a36Sopenharmony_ci
138762306a36Sopenharmony_cistatic const struct clk_parent_data gcc_xo_wcss2g[] = {
138862306a36Sopenharmony_ci	{ .fw_name = "xo", .name = "xo" },
138962306a36Sopenharmony_ci	{ .hw = &gcc_fepllwcss2g_clk.cdiv.clkr.hw },
139062306a36Sopenharmony_ci};
139162306a36Sopenharmony_ci
139262306a36Sopenharmony_cistatic const struct freq_tbl ftbl_gcc_wcss2g_clk[] = {
139362306a36Sopenharmony_ci	F(48000000, P_XO, 1, 0, 0),
139462306a36Sopenharmony_ci	F(250000000, P_FEPLLWCSS2G, 1, 0, 0),
139562306a36Sopenharmony_ci	{ }
139662306a36Sopenharmony_ci};
139762306a36Sopenharmony_ci
139862306a36Sopenharmony_cistatic struct clk_rcg2 wcss2g_clk_src = {
139962306a36Sopenharmony_ci	.cmd_rcgr = 0x1f000,
140062306a36Sopenharmony_ci	.hid_width = 5,
140162306a36Sopenharmony_ci	.freq_tbl = ftbl_gcc_wcss2g_clk,
140262306a36Sopenharmony_ci	.parent_map = gcc_xo_wcss2g_map,
140362306a36Sopenharmony_ci	.clkr.hw.init = &(struct clk_init_data){
140462306a36Sopenharmony_ci		.name = "wcss2g_clk_src",
140562306a36Sopenharmony_ci		.parent_data = gcc_xo_wcss2g,
140662306a36Sopenharmony_ci		.num_parents = ARRAY_SIZE(gcc_xo_wcss2g),
140762306a36Sopenharmony_ci		.ops = &clk_rcg2_ops,
140862306a36Sopenharmony_ci		.flags = CLK_SET_RATE_PARENT,
140962306a36Sopenharmony_ci	},
141062306a36Sopenharmony_ci};
141162306a36Sopenharmony_ci
141262306a36Sopenharmony_cistatic struct clk_branch gcc_wcss2g_clk = {
141362306a36Sopenharmony_ci	.halt_reg = 0x1f00C,
141462306a36Sopenharmony_ci	.clkr = {
141562306a36Sopenharmony_ci		.enable_reg = 0x1f00C,
141662306a36Sopenharmony_ci		.enable_mask = BIT(0),
141762306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
141862306a36Sopenharmony_ci			.name = "gcc_wcss2g_clk",
141962306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
142062306a36Sopenharmony_ci				&wcss2g_clk_src.clkr.hw },
142162306a36Sopenharmony_ci			.num_parents = 1,
142262306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
142362306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
142462306a36Sopenharmony_ci		},
142562306a36Sopenharmony_ci	},
142662306a36Sopenharmony_ci};
142762306a36Sopenharmony_ci
142862306a36Sopenharmony_cistatic struct clk_branch gcc_wcss2g_ref_clk = {
142962306a36Sopenharmony_ci	.halt_reg = 0x1f00C,
143062306a36Sopenharmony_ci	.clkr = {
143162306a36Sopenharmony_ci		.enable_reg = 0x1f00C,
143262306a36Sopenharmony_ci		.enable_mask = BIT(0),
143362306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
143462306a36Sopenharmony_ci			.name = "gcc_wcss2g_ref_clk",
143562306a36Sopenharmony_ci			.parent_data = &(const struct clk_parent_data){
143662306a36Sopenharmony_ci				.fw_name = "xo",
143762306a36Sopenharmony_ci				.name = "xo",
143862306a36Sopenharmony_ci			},
143962306a36Sopenharmony_ci			.num_parents = 1,
144062306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
144162306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
144262306a36Sopenharmony_ci		},
144362306a36Sopenharmony_ci	},
144462306a36Sopenharmony_ci};
144562306a36Sopenharmony_ci
144662306a36Sopenharmony_cistatic struct clk_branch gcc_wcss2g_rtc_clk = {
144762306a36Sopenharmony_ci	.halt_reg = 0x1f010,
144862306a36Sopenharmony_ci	.clkr = {
144962306a36Sopenharmony_ci		.enable_reg = 0x1f010,
145062306a36Sopenharmony_ci		.enable_mask = BIT(0),
145162306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
145262306a36Sopenharmony_ci			.name = "gcc_wcss2g_rtc_clk",
145362306a36Sopenharmony_ci			.parent_data = &(const struct clk_parent_data){
145462306a36Sopenharmony_ci				.fw_name = "sleep_clk",
145562306a36Sopenharmony_ci				.name = "gcc_sleep_clk_src",
145662306a36Sopenharmony_ci			},
145762306a36Sopenharmony_ci			.num_parents = 1,
145862306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
145962306a36Sopenharmony_ci		},
146062306a36Sopenharmony_ci	},
146162306a36Sopenharmony_ci};
146262306a36Sopenharmony_ci
146362306a36Sopenharmony_cistatic struct parent_map gcc_xo_wcss5g_map[] = {
146462306a36Sopenharmony_ci	{  P_XO, 0 },
146562306a36Sopenharmony_ci	{  P_FEPLLWCSS5G, 1 },
146662306a36Sopenharmony_ci};
146762306a36Sopenharmony_ci
146862306a36Sopenharmony_cistatic const struct clk_parent_data gcc_xo_wcss5g[] = {
146962306a36Sopenharmony_ci	{ .fw_name = "xo", .name = "xo" },
147062306a36Sopenharmony_ci	{ .hw = &gcc_fepllwcss5g_clk.cdiv.clkr.hw },
147162306a36Sopenharmony_ci};
147262306a36Sopenharmony_ci
147362306a36Sopenharmony_cistatic const struct freq_tbl ftbl_gcc_wcss5g_clk[] = {
147462306a36Sopenharmony_ci	F(48000000, P_XO, 1, 0, 0),
147562306a36Sopenharmony_ci	F(250000000, P_FEPLLWCSS5G, 1, 0, 0),
147662306a36Sopenharmony_ci	{ }
147762306a36Sopenharmony_ci};
147862306a36Sopenharmony_ci
147962306a36Sopenharmony_cistatic struct clk_rcg2 wcss5g_clk_src = {
148062306a36Sopenharmony_ci	.cmd_rcgr = 0x20000,
148162306a36Sopenharmony_ci	.hid_width = 5,
148262306a36Sopenharmony_ci	.parent_map = gcc_xo_wcss5g_map,
148362306a36Sopenharmony_ci	.freq_tbl = ftbl_gcc_wcss5g_clk,
148462306a36Sopenharmony_ci	.clkr.hw.init = &(struct clk_init_data){
148562306a36Sopenharmony_ci		.name = "wcss5g_clk_src",
148662306a36Sopenharmony_ci		.parent_data = gcc_xo_wcss5g,
148762306a36Sopenharmony_ci		.num_parents = ARRAY_SIZE(gcc_xo_wcss5g),
148862306a36Sopenharmony_ci		.ops = &clk_rcg2_ops,
148962306a36Sopenharmony_ci	},
149062306a36Sopenharmony_ci};
149162306a36Sopenharmony_ci
149262306a36Sopenharmony_cistatic struct clk_branch gcc_wcss5g_clk = {
149362306a36Sopenharmony_ci	.halt_reg = 0x2000c,
149462306a36Sopenharmony_ci	.clkr = {
149562306a36Sopenharmony_ci		.enable_reg = 0x2000c,
149662306a36Sopenharmony_ci		.enable_mask = BIT(0),
149762306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
149862306a36Sopenharmony_ci			.name = "gcc_wcss5g_clk",
149962306a36Sopenharmony_ci			.parent_hws = (const struct clk_hw *[]){
150062306a36Sopenharmony_ci				&wcss5g_clk_src.clkr.hw },
150162306a36Sopenharmony_ci			.num_parents = 1,
150262306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
150362306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
150462306a36Sopenharmony_ci		},
150562306a36Sopenharmony_ci	},
150662306a36Sopenharmony_ci};
150762306a36Sopenharmony_ci
150862306a36Sopenharmony_cistatic struct clk_branch gcc_wcss5g_ref_clk = {
150962306a36Sopenharmony_ci	.halt_reg = 0x2000c,
151062306a36Sopenharmony_ci	.clkr = {
151162306a36Sopenharmony_ci		.enable_reg = 0x2000c,
151262306a36Sopenharmony_ci		.enable_mask = BIT(0),
151362306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
151462306a36Sopenharmony_ci			.name = "gcc_wcss5g_ref_clk",
151562306a36Sopenharmony_ci			.parent_data = &(const struct clk_parent_data){
151662306a36Sopenharmony_ci				.fw_name = "xo",
151762306a36Sopenharmony_ci				.name = "xo",
151862306a36Sopenharmony_ci			},
151962306a36Sopenharmony_ci			.num_parents = 1,
152062306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
152162306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
152262306a36Sopenharmony_ci		},
152362306a36Sopenharmony_ci	},
152462306a36Sopenharmony_ci};
152562306a36Sopenharmony_ci
152662306a36Sopenharmony_cistatic struct clk_branch gcc_wcss5g_rtc_clk = {
152762306a36Sopenharmony_ci	.halt_reg = 0x20010,
152862306a36Sopenharmony_ci	.clkr = {
152962306a36Sopenharmony_ci		.enable_reg = 0x20010,
153062306a36Sopenharmony_ci		.enable_mask = BIT(0),
153162306a36Sopenharmony_ci		.hw.init = &(struct clk_init_data){
153262306a36Sopenharmony_ci			.name = "gcc_wcss5g_rtc_clk",
153362306a36Sopenharmony_ci			.parent_data = &(const struct clk_parent_data){
153462306a36Sopenharmony_ci				.fw_name = "sleep_clk",
153562306a36Sopenharmony_ci				.name = "gcc_sleep_clk_src",
153662306a36Sopenharmony_ci			},
153762306a36Sopenharmony_ci			.num_parents = 1,
153862306a36Sopenharmony_ci			.ops = &clk_branch2_ops,
153962306a36Sopenharmony_ci			.flags = CLK_SET_RATE_PARENT,
154062306a36Sopenharmony_ci		},
154162306a36Sopenharmony_ci	},
154262306a36Sopenharmony_ci};
154362306a36Sopenharmony_ci
154462306a36Sopenharmony_cistatic struct clk_regmap *gcc_ipq4019_clocks[] = {
154562306a36Sopenharmony_ci	[AUDIO_CLK_SRC] = &audio_clk_src.clkr,
154662306a36Sopenharmony_ci	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
154762306a36Sopenharmony_ci	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
154862306a36Sopenharmony_ci	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
154962306a36Sopenharmony_ci	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
155062306a36Sopenharmony_ci	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
155162306a36Sopenharmony_ci	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
155262306a36Sopenharmony_ci	[GCC_USB3_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
155362306a36Sopenharmony_ci	[GCC_APPS_CLK_SRC] = &apps_clk_src.clkr,
155462306a36Sopenharmony_ci	[GCC_APPS_AHB_CLK_SRC] = &apps_ahb_clk_src.clkr,
155562306a36Sopenharmony_ci	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
155662306a36Sopenharmony_ci	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
155762306a36Sopenharmony_ci	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
155862306a36Sopenharmony_ci	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
155962306a36Sopenharmony_ci	[FEPHY_125M_DLY_CLK_SRC] = &fephy_125m_dly_clk_src.clkr,
156062306a36Sopenharmony_ci	[WCSS2G_CLK_SRC] = &wcss2g_clk_src.clkr,
156162306a36Sopenharmony_ci	[WCSS5G_CLK_SRC] = &wcss5g_clk_src.clkr,
156262306a36Sopenharmony_ci	[GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,
156362306a36Sopenharmony_ci	[GCC_AUDIO_AHB_CLK] = &gcc_audio_ahb_clk.clkr,
156462306a36Sopenharmony_ci	[GCC_AUDIO_PWM_CLK] = &gcc_audio_pwm_clk.clkr,
156562306a36Sopenharmony_ci	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
156662306a36Sopenharmony_ci	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
156762306a36Sopenharmony_ci	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
156862306a36Sopenharmony_ci	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
156962306a36Sopenharmony_ci	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
157062306a36Sopenharmony_ci	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
157162306a36Sopenharmony_ci	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
157262306a36Sopenharmony_ci	[GCC_DCD_XO_CLK] = &gcc_dcd_xo_clk.clkr,
157362306a36Sopenharmony_ci	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
157462306a36Sopenharmony_ci	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
157562306a36Sopenharmony_ci	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
157662306a36Sopenharmony_ci	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
157762306a36Sopenharmony_ci	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
157862306a36Sopenharmony_ci	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
157962306a36Sopenharmony_ci	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
158062306a36Sopenharmony_ci	[GCC_ESS_CLK] = &gcc_ess_clk.clkr,
158162306a36Sopenharmony_ci	[GCC_IMEM_AXI_CLK] = &gcc_imem_axi_clk.clkr,
158262306a36Sopenharmony_ci	[GCC_IMEM_CFG_AHB_CLK] = &gcc_imem_cfg_ahb_clk.clkr,
158362306a36Sopenharmony_ci	[GCC_PCIE_AHB_CLK] = &gcc_pcie_ahb_clk.clkr,
158462306a36Sopenharmony_ci	[GCC_PCIE_AXI_M_CLK] = &gcc_pcie_axi_m_clk.clkr,
158562306a36Sopenharmony_ci	[GCC_PCIE_AXI_S_CLK] = &gcc_pcie_axi_s_clk.clkr,
158662306a36Sopenharmony_ci	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
158762306a36Sopenharmony_ci	[GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr,
158862306a36Sopenharmony_ci	[GCC_QPIC_CLK] = &gcc_qpic_clk.clkr,
158962306a36Sopenharmony_ci	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
159062306a36Sopenharmony_ci	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
159162306a36Sopenharmony_ci	[GCC_TLMM_AHB_CLK] = &gcc_tlmm_ahb_clk.clkr,
159262306a36Sopenharmony_ci	[GCC_USB2_MASTER_CLK] = &gcc_usb2_master_clk.clkr,
159362306a36Sopenharmony_ci	[GCC_USB2_SLEEP_CLK] = &gcc_usb2_sleep_clk.clkr,
159462306a36Sopenharmony_ci	[GCC_USB2_MOCK_UTMI_CLK] = &gcc_usb2_mock_utmi_clk.clkr,
159562306a36Sopenharmony_ci	[GCC_USB3_MASTER_CLK] = &gcc_usb3_master_clk.clkr,
159662306a36Sopenharmony_ci	[GCC_USB3_SLEEP_CLK] = &gcc_usb3_sleep_clk.clkr,
159762306a36Sopenharmony_ci	[GCC_USB3_MOCK_UTMI_CLK] = &gcc_usb3_mock_utmi_clk.clkr,
159862306a36Sopenharmony_ci	[GCC_WCSS2G_CLK] = &gcc_wcss2g_clk.clkr,
159962306a36Sopenharmony_ci	[GCC_WCSS2G_REF_CLK] = &gcc_wcss2g_ref_clk.clkr,
160062306a36Sopenharmony_ci	[GCC_WCSS2G_RTC_CLK] = &gcc_wcss2g_rtc_clk.clkr,
160162306a36Sopenharmony_ci	[GCC_WCSS5G_CLK] = &gcc_wcss5g_clk.clkr,
160262306a36Sopenharmony_ci	[GCC_WCSS5G_REF_CLK] = &gcc_wcss5g_ref_clk.clkr,
160362306a36Sopenharmony_ci	[GCC_WCSS5G_RTC_CLK] = &gcc_wcss5g_rtc_clk.clkr,
160462306a36Sopenharmony_ci	[GCC_SDCC_PLLDIV_CLK] = &gcc_apss_sdcc_clk.cdiv.clkr,
160562306a36Sopenharmony_ci	[GCC_FEPLL125_CLK] = &gcc_fepll125_clk.cdiv.clkr,
160662306a36Sopenharmony_ci	[GCC_FEPLL125DLY_CLK] = &gcc_fepll125dly_clk.cdiv.clkr,
160762306a36Sopenharmony_ci	[GCC_FEPLL200_CLK] = &gcc_fepll200_clk.cdiv.clkr,
160862306a36Sopenharmony_ci	[GCC_FEPLL500_CLK] = &gcc_fepll500_clk.cdiv.clkr,
160962306a36Sopenharmony_ci	[GCC_FEPLL_WCSS2G_CLK] = &gcc_fepllwcss2g_clk.cdiv.clkr,
161062306a36Sopenharmony_ci	[GCC_FEPLL_WCSS5G_CLK] = &gcc_fepllwcss5g_clk.cdiv.clkr,
161162306a36Sopenharmony_ci	[GCC_APSS_CPU_PLLDIV_CLK] = &gcc_apss_cpu_plldiv_clk.cdiv.clkr,
161262306a36Sopenharmony_ci	[GCC_PCNOC_AHB_CLK_SRC] = &gcc_pcnoc_ahb_clk_src.clkr,
161362306a36Sopenharmony_ci	[GCC_PCNOC_AHB_CLK] = &pcnoc_clk_src.clkr,
161462306a36Sopenharmony_ci};
161562306a36Sopenharmony_ci
161662306a36Sopenharmony_cistatic const struct qcom_reset_map gcc_ipq4019_resets[] = {
161762306a36Sopenharmony_ci	[WIFI0_CPU_INIT_RESET] = { 0x1f008, 5 },
161862306a36Sopenharmony_ci	[WIFI0_RADIO_SRIF_RESET] = { 0x1f008, 4 },
161962306a36Sopenharmony_ci	[WIFI0_RADIO_WARM_RESET] = { 0x1f008, 3 },
162062306a36Sopenharmony_ci	[WIFI0_RADIO_COLD_RESET] = { 0x1f008, 2 },
162162306a36Sopenharmony_ci	[WIFI0_CORE_WARM_RESET] = { 0x1f008, 1 },
162262306a36Sopenharmony_ci	[WIFI0_CORE_COLD_RESET] = { 0x1f008, 0 },
162362306a36Sopenharmony_ci	[WIFI1_CPU_INIT_RESET] = { 0x20008, 5 },
162462306a36Sopenharmony_ci	[WIFI1_RADIO_SRIF_RESET] = { 0x20008, 4 },
162562306a36Sopenharmony_ci	[WIFI1_RADIO_WARM_RESET] = { 0x20008, 3 },
162662306a36Sopenharmony_ci	[WIFI1_RADIO_COLD_RESET] = { 0x20008, 2 },
162762306a36Sopenharmony_ci	[WIFI1_CORE_WARM_RESET] = { 0x20008, 1 },
162862306a36Sopenharmony_ci	[WIFI1_CORE_COLD_RESET] = { 0x20008, 0 },
162962306a36Sopenharmony_ci	[USB3_UNIPHY_PHY_ARES] = { 0x1e038, 5 },
163062306a36Sopenharmony_ci	[USB3_HSPHY_POR_ARES] = { 0x1e038, 4 },
163162306a36Sopenharmony_ci	[USB3_HSPHY_S_ARES] = { 0x1e038, 2 },
163262306a36Sopenharmony_ci	[USB2_HSPHY_POR_ARES] = { 0x1e01c, 4 },
163362306a36Sopenharmony_ci	[USB2_HSPHY_S_ARES] = { 0x1e01c, 2 },
163462306a36Sopenharmony_ci	[PCIE_PHY_AHB_ARES] = { 0x1d010, 11 },
163562306a36Sopenharmony_ci	[PCIE_AHB_ARES] = { 0x1d010, 10 },
163662306a36Sopenharmony_ci	[PCIE_PWR_ARES] = { 0x1d010, 9 },
163762306a36Sopenharmony_ci	[PCIE_PIPE_STICKY_ARES] = { 0x1d010, 8 },
163862306a36Sopenharmony_ci	[PCIE_AXI_M_STICKY_ARES] = { 0x1d010, 7 },
163962306a36Sopenharmony_ci	[PCIE_PHY_ARES] = { 0x1d010, 6 },
164062306a36Sopenharmony_ci	[PCIE_PARF_XPU_ARES] = { 0x1d010, 5 },
164162306a36Sopenharmony_ci	[PCIE_AXI_S_XPU_ARES] = { 0x1d010, 4 },
164262306a36Sopenharmony_ci	[PCIE_AXI_M_VMIDMT_ARES] = { 0x1d010, 3 },
164362306a36Sopenharmony_ci	[PCIE_PIPE_ARES] = { 0x1d010, 2 },
164462306a36Sopenharmony_ci	[PCIE_AXI_S_ARES] = { 0x1d010, 1 },
164562306a36Sopenharmony_ci	[PCIE_AXI_M_ARES] = { 0x1d010, 0 },
164662306a36Sopenharmony_ci	[ESS_RESET] = { 0x12008, 0},
164762306a36Sopenharmony_ci	[GCC_BLSP1_BCR] = {0x01000, 0},
164862306a36Sopenharmony_ci	[GCC_BLSP1_QUP1_BCR] = {0x02000, 0},
164962306a36Sopenharmony_ci	[GCC_BLSP1_UART1_BCR] = {0x02038, 0},
165062306a36Sopenharmony_ci	[GCC_BLSP1_QUP2_BCR] = {0x03008, 0},
165162306a36Sopenharmony_ci	[GCC_BLSP1_UART2_BCR] = {0x03028, 0},
165262306a36Sopenharmony_ci	[GCC_BIMC_BCR] = {0x04000, 0},
165362306a36Sopenharmony_ci	[GCC_TLMM_BCR] = {0x05000, 0},
165462306a36Sopenharmony_ci	[GCC_IMEM_BCR] = {0x0E000, 0},
165562306a36Sopenharmony_ci	[GCC_ESS_BCR] = {0x12008, 0},
165662306a36Sopenharmony_ci	[GCC_PRNG_BCR] = {0x13000, 0},
165762306a36Sopenharmony_ci	[GCC_BOOT_ROM_BCR] = {0x13008, 0},
165862306a36Sopenharmony_ci	[GCC_CRYPTO_BCR] = {0x16000, 0},
165962306a36Sopenharmony_ci	[GCC_SDCC1_BCR] = {0x18000, 0},
166062306a36Sopenharmony_ci	[GCC_SEC_CTRL_BCR] = {0x1A000, 0},
166162306a36Sopenharmony_ci	[GCC_AUDIO_BCR] = {0x1B008, 0},
166262306a36Sopenharmony_ci	[GCC_QPIC_BCR] = {0x1C000, 0},
166362306a36Sopenharmony_ci	[GCC_PCIE_BCR] = {0x1D000, 0},
166462306a36Sopenharmony_ci	[GCC_USB2_BCR] = {0x1E008, 0},
166562306a36Sopenharmony_ci	[GCC_USB2_PHY_BCR] = {0x1E018, 0},
166662306a36Sopenharmony_ci	[GCC_USB3_BCR] = {0x1E024, 0},
166762306a36Sopenharmony_ci	[GCC_USB3_PHY_BCR] = {0x1E034, 0},
166862306a36Sopenharmony_ci	[GCC_SYSTEM_NOC_BCR] = {0x21000, 0},
166962306a36Sopenharmony_ci	[GCC_PCNOC_BCR] = {0x2102C, 0},
167062306a36Sopenharmony_ci	[GCC_DCD_BCR] = {0x21038, 0},
167162306a36Sopenharmony_ci	[GCC_SNOC_BUS_TIMEOUT0_BCR] = {0x21064, 0},
167262306a36Sopenharmony_ci	[GCC_SNOC_BUS_TIMEOUT1_BCR] = {0x2106C, 0},
167362306a36Sopenharmony_ci	[GCC_SNOC_BUS_TIMEOUT2_BCR] = {0x21074, 0},
167462306a36Sopenharmony_ci	[GCC_SNOC_BUS_TIMEOUT3_BCR] = {0x2107C, 0},
167562306a36Sopenharmony_ci	[GCC_PCNOC_BUS_TIMEOUT0_BCR] = {0x21084, 0},
167662306a36Sopenharmony_ci	[GCC_PCNOC_BUS_TIMEOUT1_BCR] = {0x2108C, 0},
167762306a36Sopenharmony_ci	[GCC_PCNOC_BUS_TIMEOUT2_BCR] = {0x21094, 0},
167862306a36Sopenharmony_ci	[GCC_PCNOC_BUS_TIMEOUT3_BCR] = {0x2109C, 0},
167962306a36Sopenharmony_ci	[GCC_PCNOC_BUS_TIMEOUT4_BCR] = {0x210A4, 0},
168062306a36Sopenharmony_ci	[GCC_PCNOC_BUS_TIMEOUT5_BCR] = {0x210AC, 0},
168162306a36Sopenharmony_ci	[GCC_PCNOC_BUS_TIMEOUT6_BCR] = {0x210B4, 0},
168262306a36Sopenharmony_ci	[GCC_PCNOC_BUS_TIMEOUT7_BCR] = {0x210BC, 0},
168362306a36Sopenharmony_ci	[GCC_PCNOC_BUS_TIMEOUT8_BCR] = {0x210C4, 0},
168462306a36Sopenharmony_ci	[GCC_PCNOC_BUS_TIMEOUT9_BCR] = {0x210CC, 0},
168562306a36Sopenharmony_ci	[GCC_TCSR_BCR] = {0x22000, 0},
168662306a36Sopenharmony_ci	[GCC_MPM_BCR] = {0x24000, 0},
168762306a36Sopenharmony_ci	[GCC_SPDM_BCR] = {0x25000, 0},
168862306a36Sopenharmony_ci	[ESS_MAC1_ARES] = {0x1200C, 0},
168962306a36Sopenharmony_ci	[ESS_MAC2_ARES] = {0x1200C, 1},
169062306a36Sopenharmony_ci	[ESS_MAC3_ARES] = {0x1200C, 2},
169162306a36Sopenharmony_ci	[ESS_MAC4_ARES] = {0x1200C, 3},
169262306a36Sopenharmony_ci	[ESS_MAC5_ARES] = {0x1200C, 4},
169362306a36Sopenharmony_ci	[ESS_PSGMII_ARES] = {0x1200C, 5},
169462306a36Sopenharmony_ci};
169562306a36Sopenharmony_ci
169662306a36Sopenharmony_cistatic const struct regmap_config gcc_ipq4019_regmap_config = {
169762306a36Sopenharmony_ci	.reg_bits	= 32,
169862306a36Sopenharmony_ci	.reg_stride	= 4,
169962306a36Sopenharmony_ci	.val_bits	= 32,
170062306a36Sopenharmony_ci	.max_register	= 0x2ffff,
170162306a36Sopenharmony_ci	.fast_io	= true,
170262306a36Sopenharmony_ci};
170362306a36Sopenharmony_ci
170462306a36Sopenharmony_cistatic const struct qcom_cc_desc gcc_ipq4019_desc = {
170562306a36Sopenharmony_ci	.config = &gcc_ipq4019_regmap_config,
170662306a36Sopenharmony_ci	.clks = gcc_ipq4019_clocks,
170762306a36Sopenharmony_ci	.num_clks = ARRAY_SIZE(gcc_ipq4019_clocks),
170862306a36Sopenharmony_ci	.resets = gcc_ipq4019_resets,
170962306a36Sopenharmony_ci	.num_resets = ARRAY_SIZE(gcc_ipq4019_resets),
171062306a36Sopenharmony_ci};
171162306a36Sopenharmony_ci
171262306a36Sopenharmony_cistatic const struct of_device_id gcc_ipq4019_match_table[] = {
171362306a36Sopenharmony_ci	{ .compatible = "qcom,gcc-ipq4019" },
171462306a36Sopenharmony_ci	{ }
171562306a36Sopenharmony_ci};
171662306a36Sopenharmony_ciMODULE_DEVICE_TABLE(of, gcc_ipq4019_match_table);
171762306a36Sopenharmony_ci
171862306a36Sopenharmony_cistatic int
171962306a36Sopenharmony_cigcc_ipq4019_cpu_clk_notifier_fn(struct notifier_block *nb,
172062306a36Sopenharmony_ci				unsigned long action, void *data)
172162306a36Sopenharmony_ci{
172262306a36Sopenharmony_ci	int err = 0;
172362306a36Sopenharmony_ci
172462306a36Sopenharmony_ci	if (action == PRE_RATE_CHANGE)
172562306a36Sopenharmony_ci		err = clk_rcg2_ops.set_parent(&apps_clk_src.clkr.hw,
172662306a36Sopenharmony_ci					      gcc_ipq4019_cpu_safe_parent);
172762306a36Sopenharmony_ci
172862306a36Sopenharmony_ci	return notifier_from_errno(err);
172962306a36Sopenharmony_ci}
173062306a36Sopenharmony_ci
173162306a36Sopenharmony_cistatic struct notifier_block gcc_ipq4019_cpu_clk_notifier = {
173262306a36Sopenharmony_ci	.notifier_call = gcc_ipq4019_cpu_clk_notifier_fn,
173362306a36Sopenharmony_ci};
173462306a36Sopenharmony_ci
173562306a36Sopenharmony_cistatic int gcc_ipq4019_probe(struct platform_device *pdev)
173662306a36Sopenharmony_ci{
173762306a36Sopenharmony_ci	int err;
173862306a36Sopenharmony_ci
173962306a36Sopenharmony_ci	err = qcom_cc_probe(pdev, &gcc_ipq4019_desc);
174062306a36Sopenharmony_ci	if (err)
174162306a36Sopenharmony_ci		return err;
174262306a36Sopenharmony_ci
174362306a36Sopenharmony_ci	return devm_clk_notifier_register(&pdev->dev, apps_clk_src.clkr.hw.clk,
174462306a36Sopenharmony_ci					  &gcc_ipq4019_cpu_clk_notifier);
174562306a36Sopenharmony_ci}
174662306a36Sopenharmony_ci
174762306a36Sopenharmony_cistatic struct platform_driver gcc_ipq4019_driver = {
174862306a36Sopenharmony_ci	.probe		= gcc_ipq4019_probe,
174962306a36Sopenharmony_ci	.driver		= {
175062306a36Sopenharmony_ci		.name	= "qcom,gcc-ipq4019",
175162306a36Sopenharmony_ci		.of_match_table = gcc_ipq4019_match_table,
175262306a36Sopenharmony_ci	},
175362306a36Sopenharmony_ci};
175462306a36Sopenharmony_ci
175562306a36Sopenharmony_cistatic int __init gcc_ipq4019_init(void)
175662306a36Sopenharmony_ci{
175762306a36Sopenharmony_ci	return platform_driver_register(&gcc_ipq4019_driver);
175862306a36Sopenharmony_ci}
175962306a36Sopenharmony_cicore_initcall(gcc_ipq4019_init);
176062306a36Sopenharmony_ci
176162306a36Sopenharmony_cistatic void __exit gcc_ipq4019_exit(void)
176262306a36Sopenharmony_ci{
176362306a36Sopenharmony_ci	platform_driver_unregister(&gcc_ipq4019_driver);
176462306a36Sopenharmony_ci}
176562306a36Sopenharmony_cimodule_exit(gcc_ipq4019_exit);
176662306a36Sopenharmony_ci
176762306a36Sopenharmony_ciMODULE_ALIAS("platform:gcc-ipq4019");
176862306a36Sopenharmony_ciMODULE_LICENSE("GPL v2");
176962306a36Sopenharmony_ciMODULE_DESCRIPTION("QCOM GCC IPQ4019 driver");
1770