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