Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'clk-msm8996' into clk-next

* clk-msm8996:
clk: qcom: Add MSM8996 Multimedia Clock Controller (MMCC) driver
clk: qcom: Add gfx3d ping-pong PLL frequency switching
clk: qcom: Add MSM8996 Global Clock Control (GCC) driver
clk: qcom: Add Alpha PLL support
clk: divider: Cap table divider values to 'width' member

+7790 -4
+1
Documentation/devicetree/bindings/clock/qcom,gcc.txt
··· 13 13 "qcom,gcc-msm8974" 14 14 "qcom,gcc-msm8974pro" 15 15 "qcom,gcc-msm8974pro-ac" 16 + "qcom,gcc-msm8996" 16 17 17 18 - reg : shall contain base register location and length 18 19 - #clock-cells : shall contain 1
+1
Documentation/devicetree/bindings/clock/qcom,mmcc.txt
··· 9 9 "qcom,mmcc-msm8660" 10 10 "qcom,mmcc-msm8960" 11 11 "qcom,mmcc-msm8974" 12 + "qcom,mmcc-msm8996" 12 13 13 14 - reg : shall contain base register location and length 14 15 - #clock-cells : shall contain 1
+5 -4
drivers/clk/clk-divider.c
··· 32 32 33 33 #define div_mask(width) ((1 << (width)) - 1) 34 34 35 - static unsigned int _get_table_maxdiv(const struct clk_div_table *table) 35 + static unsigned int _get_table_maxdiv(const struct clk_div_table *table, 36 + u8 width) 36 37 { 37 - unsigned int maxdiv = 0; 38 + unsigned int maxdiv = 0, mask = div_mask(width); 38 39 const struct clk_div_table *clkt; 39 40 40 41 for (clkt = table; clkt->div; clkt++) 41 - if (clkt->div > maxdiv) 42 + if (clkt->div > maxdiv && clkt->val <= mask) 42 43 maxdiv = clkt->div; 43 44 return maxdiv; 44 45 } ··· 63 62 if (flags & CLK_DIVIDER_POWER_OF_TWO) 64 63 return 1 << div_mask(width); 65 64 if (table) 66 - return _get_table_maxdiv(table); 65 + return _get_table_maxdiv(table, width); 67 66 return div_mask(width) + 1; 68 67 } 69 68
+17
drivers/clk/qcom/Kconfig
··· 106 106 Support for the multimedia clock controller on msm8974 devices. 107 107 Say Y if you want to support multimedia devices such as display, 108 108 graphics, video encode/decode, camera, etc. 109 + 110 + config MSM_GCC_8996 111 + tristate "MSM8996 Global Clock Controller" 112 + depends on COMMON_CLK_QCOM 113 + help 114 + Support for the global clock controller on msm8996 devices. 115 + Say Y if you want to use peripheral devices such as UART, SPI, 116 + i2c, USB, UFS, SD/eMMC, PCIe, etc. 117 + 118 + config MSM_MMCC_8996 119 + tristate "MSM8996 Multimedia Clock Controller" 120 + select MSM_GCC_8996 121 + depends on COMMON_CLK_QCOM 122 + help 123 + Support for the multimedia clock controller on msm8996 devices. 124 + Say Y if you want to support multimedia devices such as display, 125 + graphics, video encode/decode, camera, etc.
+3
drivers/clk/qcom/Makefile
··· 2 2 3 3 clk-qcom-y += common.o 4 4 clk-qcom-y += clk-regmap.o 5 + clk-qcom-y += clk-alpha-pll.o 5 6 clk-qcom-y += clk-pll.o 6 7 clk-qcom-y += clk-rcg.o 7 8 clk-qcom-y += clk-rcg2.o ··· 21 20 obj-$(CONFIG_MSM_GCC_8960) += gcc-msm8960.o 22 21 obj-$(CONFIG_MSM_LCC_8960) += lcc-msm8960.o 23 22 obj-$(CONFIG_MSM_GCC_8974) += gcc-msm8974.o 23 + obj-$(CONFIG_MSM_GCC_8996) += gcc-msm8996.o 24 24 obj-$(CONFIG_MSM_MMCC_8960) += mmcc-msm8960.o 25 25 obj-$(CONFIG_MSM_MMCC_8974) += mmcc-msm8974.o 26 + obj-$(CONFIG_MSM_MMCC_8996) += mmcc-msm8996.o
+355
drivers/clk/qcom/clk-alpha-pll.c
··· 1 + /* 2 + * Copyright (c) 2015, The Linux Foundation. All rights reserved. 3 + * 4 + * This software is licensed under the terms of the GNU General Public 5 + * License version 2, as published by the Free Software Foundation, and 6 + * may be copied, distributed, and modified under those terms. 7 + * 8 + * This program is distributed in the hope that it will be useful, 9 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 + * GNU General Public License for more details. 12 + */ 13 + 14 + #include <linux/kernel.h> 15 + #include <linux/export.h> 16 + #include <linux/clk-provider.h> 17 + #include <linux/regmap.h> 18 + #include <linux/delay.h> 19 + 20 + #include "clk-alpha-pll.h" 21 + 22 + #define PLL_MODE 0x00 23 + # define PLL_OUTCTRL BIT(0) 24 + # define PLL_BYPASSNL BIT(1) 25 + # define PLL_RESET_N BIT(2) 26 + # define PLL_LOCK_COUNT_SHIFT 8 27 + # define PLL_LOCK_COUNT_MASK 0x3f 28 + # define PLL_BIAS_COUNT_SHIFT 14 29 + # define PLL_BIAS_COUNT_MASK 0x3f 30 + # define PLL_VOTE_FSM_ENA BIT(20) 31 + # define PLL_VOTE_FSM_RESET BIT(21) 32 + # define PLL_ACTIVE_FLAG BIT(30) 33 + # define PLL_LOCK_DET BIT(31) 34 + 35 + #define PLL_L_VAL 0x04 36 + #define PLL_ALPHA_VAL 0x08 37 + #define PLL_ALPHA_VAL_U 0x0c 38 + 39 + #define PLL_USER_CTL 0x10 40 + # define PLL_POST_DIV_SHIFT 8 41 + # define PLL_POST_DIV_MASK 0xf 42 + # define PLL_ALPHA_EN BIT(24) 43 + # define PLL_VCO_SHIFT 20 44 + # define PLL_VCO_MASK 0x3 45 + 46 + #define PLL_USER_CTL_U 0x14 47 + 48 + #define PLL_CONFIG_CTL 0x18 49 + #define PLL_TEST_CTL 0x1c 50 + #define PLL_TEST_CTL_U 0x20 51 + #define PLL_STATUS 0x24 52 + 53 + /* 54 + * Even though 40 bits are present, use only 32 for ease of calculation. 55 + */ 56 + #define ALPHA_REG_BITWIDTH 40 57 + #define ALPHA_BITWIDTH 32 58 + 59 + #define to_clk_alpha_pll(_hw) container_of(to_clk_regmap(_hw), \ 60 + struct clk_alpha_pll, clkr) 61 + 62 + #define to_clk_alpha_pll_postdiv(_hw) container_of(to_clk_regmap(_hw), \ 63 + struct clk_alpha_pll_postdiv, clkr) 64 + 65 + static int wait_for_pll(struct clk_alpha_pll *pll) 66 + { 67 + u32 val, mask, off; 68 + int count; 69 + int ret; 70 + const char *name = clk_hw_get_name(&pll->clkr.hw); 71 + 72 + off = pll->offset; 73 + ret = regmap_read(pll->clkr.regmap, off + PLL_MODE, &val); 74 + if (ret) 75 + return ret; 76 + 77 + if (val & PLL_VOTE_FSM_ENA) 78 + mask = PLL_ACTIVE_FLAG; 79 + else 80 + mask = PLL_LOCK_DET; 81 + 82 + /* Wait for pll to enable. */ 83 + for (count = 100; count > 0; count--) { 84 + ret = regmap_read(pll->clkr.regmap, off + PLL_MODE, &val); 85 + if (ret) 86 + return ret; 87 + if ((val & mask) == mask) 88 + return 0; 89 + 90 + udelay(1); 91 + } 92 + 93 + WARN(1, "%s didn't enable after voting for it!\n", name); 94 + return -ETIMEDOUT; 95 + } 96 + 97 + static int clk_alpha_pll_enable(struct clk_hw *hw) 98 + { 99 + int ret; 100 + struct clk_alpha_pll *pll = to_clk_alpha_pll(hw); 101 + u32 val, mask, off; 102 + 103 + off = pll->offset; 104 + 105 + mask = PLL_OUTCTRL | PLL_RESET_N | PLL_BYPASSNL; 106 + ret = regmap_read(pll->clkr.regmap, off + PLL_MODE, &val); 107 + if (ret) 108 + return ret; 109 + 110 + /* If in FSM mode, just vote for it */ 111 + if (val & PLL_VOTE_FSM_ENA) { 112 + ret = clk_enable_regmap(hw); 113 + if (ret) 114 + return ret; 115 + return wait_for_pll(pll); 116 + } 117 + 118 + /* Skip if already enabled */ 119 + if ((val & mask) == mask) 120 + return 0; 121 + 122 + ret = regmap_update_bits(pll->clkr.regmap, off + PLL_MODE, 123 + PLL_BYPASSNL, PLL_BYPASSNL); 124 + if (ret) 125 + return ret; 126 + 127 + /* 128 + * H/W requires a 5us delay between disabling the bypass and 129 + * de-asserting the reset. 130 + */ 131 + mb(); 132 + udelay(5); 133 + 134 + ret = regmap_update_bits(pll->clkr.regmap, off + PLL_MODE, 135 + PLL_RESET_N, PLL_RESET_N); 136 + if (ret) 137 + return ret; 138 + 139 + ret = wait_for_pll(pll); 140 + if (ret) 141 + return ret; 142 + 143 + ret = regmap_update_bits(pll->clkr.regmap, off + PLL_MODE, 144 + PLL_OUTCTRL, PLL_OUTCTRL); 145 + 146 + /* Ensure that the write above goes through before returning. */ 147 + mb(); 148 + return ret; 149 + } 150 + 151 + static void clk_alpha_pll_disable(struct clk_hw *hw) 152 + { 153 + int ret; 154 + struct clk_alpha_pll *pll = to_clk_alpha_pll(hw); 155 + u32 val, mask, off; 156 + 157 + off = pll->offset; 158 + 159 + ret = regmap_read(pll->clkr.regmap, off + PLL_MODE, &val); 160 + if (ret) 161 + return; 162 + 163 + /* If in FSM mode, just unvote it */ 164 + if (val & PLL_VOTE_FSM_ENA) { 165 + clk_disable_regmap(hw); 166 + return; 167 + } 168 + 169 + mask = PLL_OUTCTRL; 170 + regmap_update_bits(pll->clkr.regmap, off + PLL_MODE, mask, 0); 171 + 172 + /* Delay of 2 output clock ticks required until output is disabled */ 173 + mb(); 174 + udelay(1); 175 + 176 + mask = PLL_RESET_N | PLL_BYPASSNL; 177 + regmap_update_bits(pll->clkr.regmap, off + PLL_MODE, mask, 0); 178 + } 179 + 180 + static unsigned long alpha_pll_calc_rate(u64 prate, u32 l, u32 a) 181 + { 182 + return (prate * l) + ((prate * a) >> ALPHA_BITWIDTH); 183 + } 184 + 185 + static unsigned long 186 + alpha_pll_round_rate(unsigned long rate, unsigned long prate, u32 *l, u64 *a) 187 + { 188 + u64 remainder; 189 + u64 quotient; 190 + 191 + quotient = rate; 192 + remainder = do_div(quotient, prate); 193 + *l = quotient; 194 + 195 + if (!remainder) { 196 + *a = 0; 197 + return rate; 198 + } 199 + 200 + /* Upper ALPHA_BITWIDTH bits of Alpha */ 201 + quotient = remainder << ALPHA_BITWIDTH; 202 + remainder = do_div(quotient, prate); 203 + 204 + if (remainder) 205 + quotient++; 206 + 207 + *a = quotient; 208 + return alpha_pll_calc_rate(prate, *l, *a); 209 + } 210 + 211 + static const struct pll_vco * 212 + alpha_pll_find_vco(const struct clk_alpha_pll *pll, unsigned long rate) 213 + { 214 + const struct pll_vco *v = pll->vco_table; 215 + const struct pll_vco *end = v + pll->num_vco; 216 + 217 + for (; v < end; v++) 218 + if (rate >= v->min_freq && rate <= v->max_freq) 219 + return v; 220 + 221 + return NULL; 222 + } 223 + 224 + static unsigned long 225 + clk_alpha_pll_recalc_rate(struct clk_hw *hw, unsigned long parent_rate) 226 + { 227 + u32 l, low, high, ctl; 228 + u64 a = 0, prate = parent_rate; 229 + struct clk_alpha_pll *pll = to_clk_alpha_pll(hw); 230 + u32 off = pll->offset; 231 + 232 + regmap_read(pll->clkr.regmap, off + PLL_L_VAL, &l); 233 + 234 + regmap_read(pll->clkr.regmap, off + PLL_USER_CTL, &ctl); 235 + if (ctl & PLL_ALPHA_EN) { 236 + regmap_read(pll->clkr.regmap, off + PLL_ALPHA_VAL, &low); 237 + regmap_read(pll->clkr.regmap, off + PLL_ALPHA_VAL_U, &high); 238 + a = (u64)high << 32 | low; 239 + a >>= ALPHA_REG_BITWIDTH - ALPHA_BITWIDTH; 240 + } 241 + 242 + return alpha_pll_calc_rate(prate, l, a); 243 + } 244 + 245 + static int clk_alpha_pll_set_rate(struct clk_hw *hw, unsigned long rate, 246 + unsigned long prate) 247 + { 248 + struct clk_alpha_pll *pll = to_clk_alpha_pll(hw); 249 + const struct pll_vco *vco; 250 + u32 l, off = pll->offset; 251 + u64 a; 252 + 253 + rate = alpha_pll_round_rate(rate, prate, &l, &a); 254 + vco = alpha_pll_find_vco(pll, rate); 255 + if (!vco) { 256 + pr_err("alpha pll not in a valid vco range\n"); 257 + return -EINVAL; 258 + } 259 + 260 + a <<= (ALPHA_REG_BITWIDTH - ALPHA_BITWIDTH); 261 + 262 + regmap_write(pll->clkr.regmap, off + PLL_L_VAL, l); 263 + regmap_write(pll->clkr.regmap, off + PLL_ALPHA_VAL, a); 264 + regmap_write(pll->clkr.regmap, off + PLL_ALPHA_VAL_U, a >> 32); 265 + 266 + regmap_update_bits(pll->clkr.regmap, off + PLL_USER_CTL, 267 + PLL_VCO_MASK << PLL_VCO_SHIFT, 268 + vco->val << PLL_VCO_SHIFT); 269 + 270 + regmap_update_bits(pll->clkr.regmap, off + PLL_USER_CTL, PLL_ALPHA_EN, 271 + PLL_ALPHA_EN); 272 + 273 + return 0; 274 + } 275 + 276 + static long clk_alpha_pll_round_rate(struct clk_hw *hw, unsigned long rate, 277 + unsigned long *prate) 278 + { 279 + struct clk_alpha_pll *pll = to_clk_alpha_pll(hw); 280 + u32 l; 281 + u64 a; 282 + unsigned long min_freq, max_freq; 283 + 284 + rate = alpha_pll_round_rate(rate, *prate, &l, &a); 285 + if (alpha_pll_find_vco(pll, rate)) 286 + return rate; 287 + 288 + min_freq = pll->vco_table[0].min_freq; 289 + max_freq = pll->vco_table[pll->num_vco - 1].max_freq; 290 + 291 + return clamp(rate, min_freq, max_freq); 292 + } 293 + 294 + const struct clk_ops clk_alpha_pll_ops = { 295 + .enable = clk_alpha_pll_enable, 296 + .disable = clk_alpha_pll_disable, 297 + .recalc_rate = clk_alpha_pll_recalc_rate, 298 + .round_rate = clk_alpha_pll_round_rate, 299 + .set_rate = clk_alpha_pll_set_rate, 300 + }; 301 + EXPORT_SYMBOL_GPL(clk_alpha_pll_ops); 302 + 303 + static unsigned long 304 + clk_alpha_pll_postdiv_recalc_rate(struct clk_hw *hw, unsigned long parent_rate) 305 + { 306 + struct clk_alpha_pll_postdiv *pll = to_clk_alpha_pll_postdiv(hw); 307 + u32 ctl; 308 + 309 + regmap_read(pll->clkr.regmap, pll->offset + PLL_USER_CTL, &ctl); 310 + 311 + ctl >>= PLL_POST_DIV_SHIFT; 312 + ctl &= PLL_POST_DIV_MASK; 313 + 314 + return parent_rate >> fls(ctl); 315 + } 316 + 317 + static const struct clk_div_table clk_alpha_div_table[] = { 318 + { 0x0, 1 }, 319 + { 0x1, 2 }, 320 + { 0x3, 4 }, 321 + { 0x7, 8 }, 322 + { 0xf, 16 }, 323 + { } 324 + }; 325 + 326 + static long 327 + clk_alpha_pll_postdiv_round_rate(struct clk_hw *hw, unsigned long rate, 328 + unsigned long *prate) 329 + { 330 + struct clk_alpha_pll_postdiv *pll = to_clk_alpha_pll_postdiv(hw); 331 + 332 + return divider_round_rate(hw, rate, prate, clk_alpha_div_table, 333 + pll->width, CLK_DIVIDER_POWER_OF_TWO); 334 + } 335 + 336 + static int clk_alpha_pll_postdiv_set_rate(struct clk_hw *hw, unsigned long rate, 337 + unsigned long parent_rate) 338 + { 339 + struct clk_alpha_pll_postdiv *pll = to_clk_alpha_pll_postdiv(hw); 340 + int div; 341 + 342 + /* 16 -> 0xf, 8 -> 0x7, 4 -> 0x3, 2 -> 0x1, 1 -> 0x0 */ 343 + div = DIV_ROUND_UP_ULL((u64)parent_rate, rate) - 1; 344 + 345 + return regmap_update_bits(pll->clkr.regmap, pll->offset + PLL_USER_CTL, 346 + PLL_POST_DIV_MASK << PLL_POST_DIV_SHIFT, 347 + div << PLL_POST_DIV_SHIFT); 348 + } 349 + 350 + const struct clk_ops clk_alpha_pll_postdiv_ops = { 351 + .recalc_rate = clk_alpha_pll_postdiv_recalc_rate, 352 + .round_rate = clk_alpha_pll_postdiv_round_rate, 353 + .set_rate = clk_alpha_pll_postdiv_set_rate, 354 + }; 355 + EXPORT_SYMBOL_GPL(clk_alpha_pll_postdiv_ops);
+57
drivers/clk/qcom/clk-alpha-pll.h
··· 1 + /* 2 + * Copyright (c) 2015, The Linux Foundation. All rights reserved. 3 + * 4 + * This software is licensed under the terms of the GNU General Public 5 + * License version 2, as published by the Free Software Foundation, and 6 + * may be copied, distributed, and modified under those terms. 7 + * 8 + * This program is distributed in the hope that it will be useful, 9 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 + * GNU General Public License for more details. 12 + */ 13 + 14 + #ifndef __QCOM_CLK_ALPHA_PLL_H__ 15 + #define __QCOM_CLK_ALPHA_PLL_H__ 16 + 17 + #include <linux/clk-provider.h> 18 + #include "clk-regmap.h" 19 + 20 + struct pll_vco { 21 + unsigned long min_freq; 22 + unsigned long max_freq; 23 + u32 val; 24 + }; 25 + 26 + /** 27 + * struct clk_alpha_pll - phase locked loop (PLL) 28 + * @offset: base address of registers 29 + * @vco_table: array of VCO settings 30 + * @clkr: regmap clock handle 31 + */ 32 + struct clk_alpha_pll { 33 + u32 offset; 34 + 35 + const struct pll_vco *vco_table; 36 + size_t num_vco; 37 + 38 + struct clk_regmap clkr; 39 + }; 40 + 41 + /** 42 + * struct clk_alpha_pll_postdiv - phase locked loop (PLL) post-divider 43 + * @offset: base address of registers 44 + * @width: width of post-divider 45 + * @clkr: regmap clock handle 46 + */ 47 + struct clk_alpha_pll_postdiv { 48 + u32 offset; 49 + u8 width; 50 + 51 + struct clk_regmap clkr; 52 + }; 53 + 54 + extern const struct clk_ops clk_alpha_pll_ops; 55 + extern const struct clk_ops clk_alpha_pll_postdiv_ops; 56 + 57 + #endif
+1
drivers/clk/qcom/clk-rcg.h
··· 178 178 extern const struct clk_ops clk_byte_ops; 179 179 extern const struct clk_ops clk_byte2_ops; 180 180 extern const struct clk_ops clk_pixel_ops; 181 + extern const struct clk_ops clk_gfx3d_ops; 181 182 182 183 #endif
+87
drivers/clk/qcom/clk-rcg2.c
··· 723 723 .determine_rate = clk_pixel_determine_rate, 724 724 }; 725 725 EXPORT_SYMBOL_GPL(clk_pixel_ops); 726 + 727 + static int clk_gfx3d_determine_rate(struct clk_hw *hw, 728 + struct clk_rate_request *req) 729 + { 730 + struct clk_rate_request parent_req = { }; 731 + struct clk_hw *p2, *p8, *p9, *xo; 732 + unsigned long p9_rate; 733 + int ret; 734 + 735 + xo = clk_hw_get_parent_by_index(hw, 0); 736 + if (req->rate == clk_hw_get_rate(xo)) { 737 + req->best_parent_hw = xo; 738 + return 0; 739 + } 740 + 741 + p9 = clk_hw_get_parent_by_index(hw, 2); 742 + p2 = clk_hw_get_parent_by_index(hw, 3); 743 + p8 = clk_hw_get_parent_by_index(hw, 4); 744 + 745 + /* PLL9 is a fixed rate PLL */ 746 + p9_rate = clk_hw_get_rate(p9); 747 + 748 + parent_req.rate = req->rate = min(req->rate, p9_rate); 749 + if (req->rate == p9_rate) { 750 + req->rate = req->best_parent_rate = p9_rate; 751 + req->best_parent_hw = p9; 752 + return 0; 753 + } 754 + 755 + if (req->best_parent_hw == p9) { 756 + /* Are we going back to a previously used rate? */ 757 + if (clk_hw_get_rate(p8) == req->rate) 758 + req->best_parent_hw = p8; 759 + else 760 + req->best_parent_hw = p2; 761 + } else if (req->best_parent_hw == p8) { 762 + req->best_parent_hw = p2; 763 + } else { 764 + req->best_parent_hw = p8; 765 + } 766 + 767 + ret = __clk_determine_rate(req->best_parent_hw, &parent_req); 768 + if (ret) 769 + return ret; 770 + 771 + req->rate = req->best_parent_rate = parent_req.rate; 772 + 773 + return 0; 774 + } 775 + 776 + static int clk_gfx3d_set_rate_and_parent(struct clk_hw *hw, unsigned long rate, 777 + unsigned long parent_rate, u8 index) 778 + { 779 + struct clk_rcg2 *rcg = to_clk_rcg2(hw); 780 + u32 cfg; 781 + int ret; 782 + 783 + /* Just mux it, we don't use the division or m/n hardware */ 784 + cfg = rcg->parent_map[index].cfg << CFG_SRC_SEL_SHIFT; 785 + ret = regmap_write(rcg->clkr.regmap, rcg->cmd_rcgr + CFG_REG, cfg); 786 + if (ret) 787 + return ret; 788 + 789 + return update_config(rcg); 790 + } 791 + 792 + static int clk_gfx3d_set_rate(struct clk_hw *hw, unsigned long rate, 793 + unsigned long parent_rate) 794 + { 795 + /* 796 + * We should never get here; clk_gfx3d_determine_rate() should always 797 + * make us use a different parent than what we're currently using, so 798 + * clk_gfx3d_set_rate_and_parent() should always be called. 799 + */ 800 + return 0; 801 + } 802 + 803 + const struct clk_ops clk_gfx3d_ops = { 804 + .is_enabled = clk_rcg2_is_enabled, 805 + .get_parent = clk_rcg2_get_parent, 806 + .set_parent = clk_rcg2_set_parent, 807 + .recalc_rate = clk_rcg2_recalc_rate, 808 + .set_rate = clk_gfx3d_set_rate, 809 + .set_rate_and_parent = clk_gfx3d_set_rate_and_parent, 810 + .determine_rate = clk_gfx3d_determine_rate, 811 + }; 812 + EXPORT_SYMBOL_GPL(clk_gfx3d_ops);
+3422
drivers/clk/qcom/gcc-msm8996.c
··· 1 + /* 2 + * Copyright (c) 2015, The Linux Foundation. All rights reserved. 3 + * 4 + * This software is licensed under the terms of the GNU General Public 5 + * License version 2, as published by the Free Software Foundation, and 6 + * may be copied, distributed, and modified under those terms. 7 + * 8 + * This program is distributed in the hope that it will be useful, 9 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 + * GNU General Public License for more details. 12 + */ 13 + 14 + #include <linux/kernel.h> 15 + #include <linux/bitops.h> 16 + #include <linux/err.h> 17 + #include <linux/platform_device.h> 18 + #include <linux/module.h> 19 + #include <linux/of.h> 20 + #include <linux/of_device.h> 21 + #include <linux/clk-provider.h> 22 + #include <linux/regmap.h> 23 + #include <linux/reset-controller.h> 24 + 25 + #include <dt-bindings/clock/qcom,gcc-msm8996.h> 26 + 27 + #include "common.h" 28 + #include "clk-regmap.h" 29 + #include "clk-alpha-pll.h" 30 + #include "clk-rcg.h" 31 + #include "clk-branch.h" 32 + #include "reset.h" 33 + 34 + #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) } 35 + 36 + enum { 37 + P_XO, 38 + P_GPLL0, 39 + P_GPLL2, 40 + P_GPLL3, 41 + P_GPLL1, 42 + P_GPLL2_EARLY, 43 + P_GPLL0_EARLY_DIV, 44 + P_SLEEP_CLK, 45 + P_GPLL4, 46 + P_AUD_REF_CLK, 47 + P_GPLL1_EARLY_DIV 48 + }; 49 + 50 + static const struct parent_map gcc_sleep_clk_map[] = { 51 + { P_SLEEP_CLK, 5 } 52 + }; 53 + 54 + static const char * const gcc_sleep_clk[] = { 55 + "sleep_clk" 56 + }; 57 + 58 + static const struct parent_map gcc_xo_gpll0_map[] = { 59 + { P_XO, 0 }, 60 + { P_GPLL0, 1 } 61 + }; 62 + 63 + static const char * const gcc_xo_gpll0[] = { 64 + "xo", 65 + "gpll0" 66 + }; 67 + 68 + static const struct parent_map gcc_xo_sleep_clk_map[] = { 69 + { P_XO, 0 }, 70 + { P_SLEEP_CLK, 5 } 71 + }; 72 + 73 + static const char * const gcc_xo_sleep_clk[] = { 74 + "xo", 75 + "sleep_clk" 76 + }; 77 + 78 + static const struct parent_map gcc_xo_gpll0_gpll0_early_div_map[] = { 79 + { P_XO, 0 }, 80 + { P_GPLL0, 1 }, 81 + { P_GPLL0_EARLY_DIV, 6 } 82 + }; 83 + 84 + static const char * const gcc_xo_gpll0_gpll0_early_div[] = { 85 + "xo", 86 + "gpll0", 87 + "gpll0_early_div" 88 + }; 89 + 90 + static const struct parent_map gcc_xo_gpll0_gpll4_map[] = { 91 + { P_XO, 0 }, 92 + { P_GPLL0, 1 }, 93 + { P_GPLL4, 5 } 94 + }; 95 + 96 + static const char * const gcc_xo_gpll0_gpll4[] = { 97 + "xo", 98 + "gpll0", 99 + "gpll4" 100 + }; 101 + 102 + static const struct parent_map gcc_xo_gpll0_aud_ref_clk_map[] = { 103 + { P_XO, 0 }, 104 + { P_GPLL0, 1 }, 105 + { P_AUD_REF_CLK, 2 } 106 + }; 107 + 108 + static const char * const gcc_xo_gpll0_aud_ref_clk[] = { 109 + "xo", 110 + "gpll0", 111 + "aud_ref_clk" 112 + }; 113 + 114 + static const struct parent_map gcc_xo_gpll0_sleep_clk_gpll0_early_div_map[] = { 115 + { P_XO, 0 }, 116 + { P_GPLL0, 1 }, 117 + { P_SLEEP_CLK, 5 }, 118 + { P_GPLL0_EARLY_DIV, 6 } 119 + }; 120 + 121 + static const char * const gcc_xo_gpll0_sleep_clk_gpll0_early_div[] = { 122 + "xo", 123 + "gpll0", 124 + "sleep_clk", 125 + "gpll0_early_div" 126 + }; 127 + 128 + static const struct parent_map gcc_xo_gpll0_gpll4_gpll0_early_div_map[] = { 129 + { P_XO, 0 }, 130 + { P_GPLL0, 1 }, 131 + { P_GPLL4, 5 }, 132 + { P_GPLL0_EARLY_DIV, 6 } 133 + }; 134 + 135 + static const char * const gcc_xo_gpll0_gpll4_gpll0_early_div[] = { 136 + "xo", 137 + "gpll0", 138 + "gpll4", 139 + "gpll0_early_div" 140 + }; 141 + 142 + static const struct parent_map gcc_xo_gpll0_gpll2_gpll3_gpll0_early_div_map[] = { 143 + { P_XO, 0 }, 144 + { P_GPLL0, 1 }, 145 + { P_GPLL2, 2 }, 146 + { P_GPLL3, 3 }, 147 + { P_GPLL0_EARLY_DIV, 6 } 148 + }; 149 + 150 + static const char * const gcc_xo_gpll0_gpll2_gpll3_gpll0_early_div[] = { 151 + "xo", 152 + "gpll0", 153 + "gpll2", 154 + "gpll3", 155 + "gpll0_early_div" 156 + }; 157 + 158 + static const struct parent_map gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div_map[] = { 159 + { P_XO, 0 }, 160 + { P_GPLL0, 1 }, 161 + { P_GPLL1_EARLY_DIV, 3 }, 162 + { P_GPLL1, 4 }, 163 + { P_GPLL4, 5 }, 164 + { P_GPLL0_EARLY_DIV, 6 } 165 + }; 166 + 167 + static const char * const gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div[] = { 168 + "xo", 169 + "gpll0", 170 + "gpll1_early_div", 171 + "gpll1", 172 + "gpll4", 173 + "gpll0_early_div" 174 + }; 175 + 176 + static const struct parent_map gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div_map[] = { 177 + { P_XO, 0 }, 178 + { P_GPLL0, 1 }, 179 + { P_GPLL2, 2 }, 180 + { P_GPLL3, 3 }, 181 + { P_GPLL1, 4 }, 182 + { P_GPLL2_EARLY, 5 }, 183 + { P_GPLL0_EARLY_DIV, 6 } 184 + }; 185 + 186 + static const char * const gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div[] = { 187 + "xo", 188 + "gpll0", 189 + "gpll2", 190 + "gpll3", 191 + "gpll1", 192 + "gpll2_early", 193 + "gpll0_early_div" 194 + }; 195 + 196 + static const struct parent_map gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll4_gpll0_early_div_map[] = { 197 + { P_XO, 0 }, 198 + { P_GPLL0, 1 }, 199 + { P_GPLL2, 2 }, 200 + { P_GPLL3, 3 }, 201 + { P_GPLL1, 4 }, 202 + { P_GPLL4, 5 }, 203 + { P_GPLL0_EARLY_DIV, 6 } 204 + }; 205 + 206 + static const char * const gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll4_gpll0_early_div[] = { 207 + "xo", 208 + "gpll0", 209 + "gpll2", 210 + "gpll3", 211 + "gpll1", 212 + "gpll4", 213 + "gpll0_early_div" 214 + }; 215 + 216 + static struct clk_fixed_factor xo = { 217 + .mult = 1, 218 + .div = 1, 219 + .hw.init = &(struct clk_init_data){ 220 + .name = "xo", 221 + .parent_names = (const char *[]){ "xo_board" }, 222 + .num_parents = 1, 223 + .ops = &clk_fixed_factor_ops, 224 + }, 225 + }; 226 + 227 + static struct clk_alpha_pll gpll0_early = { 228 + .offset = 0x00000, 229 + .clkr = { 230 + .enable_reg = 0x52000, 231 + .enable_mask = BIT(0), 232 + .hw.init = &(struct clk_init_data){ 233 + .name = "gpll0_early", 234 + .parent_names = (const char *[]){ "xo" }, 235 + .num_parents = 1, 236 + .ops = &clk_alpha_pll_ops, 237 + }, 238 + }, 239 + }; 240 + 241 + static struct clk_fixed_factor gpll0_early_div = { 242 + .mult = 1, 243 + .div = 2, 244 + .hw.init = &(struct clk_init_data){ 245 + .name = "gpll0_early_div", 246 + .parent_names = (const char *[]){ "gpll0_early" }, 247 + .num_parents = 1, 248 + .ops = &clk_fixed_factor_ops, 249 + }, 250 + }; 251 + 252 + static struct clk_alpha_pll_postdiv gpll0 = { 253 + .offset = 0x00000, 254 + .clkr.hw.init = &(struct clk_init_data){ 255 + .name = "gpll0", 256 + .parent_names = (const char *[]){ "gpll0_early" }, 257 + .num_parents = 1, 258 + .ops = &clk_alpha_pll_postdiv_ops, 259 + }, 260 + }; 261 + 262 + static struct clk_alpha_pll gpll4_early = { 263 + .offset = 0x77000, 264 + .clkr = { 265 + .enable_reg = 0x52000, 266 + .enable_mask = BIT(4), 267 + .hw.init = &(struct clk_init_data){ 268 + .name = "gpll4_early", 269 + .parent_names = (const char *[]){ "xo" }, 270 + .num_parents = 1, 271 + .ops = &clk_alpha_pll_ops, 272 + }, 273 + }, 274 + }; 275 + 276 + static struct clk_alpha_pll_postdiv gpll4 = { 277 + .offset = 0x77000, 278 + .clkr.hw.init = &(struct clk_init_data){ 279 + .name = "gpll4", 280 + .parent_names = (const char *[]){ "gpll4_early" }, 281 + .num_parents = 1, 282 + .ops = &clk_alpha_pll_postdiv_ops, 283 + }, 284 + }; 285 + 286 + static const struct freq_tbl ftbl_system_noc_clk_src[] = { 287 + F(19200000, P_XO, 1, 0, 0), 288 + F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0), 289 + F(100000000, P_GPLL0, 6, 0, 0), 290 + F(150000000, P_GPLL0, 4, 0, 0), 291 + F(200000000, P_GPLL0, 3, 0, 0), 292 + F(240000000, P_GPLL0, 2.5, 0, 0), 293 + { } 294 + }; 295 + 296 + static struct clk_rcg2 system_noc_clk_src = { 297 + .cmd_rcgr = 0x0401c, 298 + .hid_width = 5, 299 + .parent_map = gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div_map, 300 + .freq_tbl = ftbl_system_noc_clk_src, 301 + .clkr.hw.init = &(struct clk_init_data){ 302 + .name = "system_noc_clk_src", 303 + .parent_names = gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div, 304 + .num_parents = 7, 305 + .ops = &clk_rcg2_ops, 306 + }, 307 + }; 308 + 309 + static const struct freq_tbl ftbl_config_noc_clk_src[] = { 310 + F(19200000, P_XO, 1, 0, 0), 311 + F(37500000, P_GPLL0, 16, 0, 0), 312 + F(75000000, P_GPLL0, 8, 0, 0), 313 + { } 314 + }; 315 + 316 + static struct clk_rcg2 config_noc_clk_src = { 317 + .cmd_rcgr = 0x0500c, 318 + .hid_width = 5, 319 + .parent_map = gcc_xo_gpll0_map, 320 + .freq_tbl = ftbl_config_noc_clk_src, 321 + .clkr.hw.init = &(struct clk_init_data){ 322 + .name = "config_noc_clk_src", 323 + .parent_names = gcc_xo_gpll0, 324 + .num_parents = 2, 325 + .ops = &clk_rcg2_ops, 326 + }, 327 + }; 328 + 329 + static const struct freq_tbl ftbl_periph_noc_clk_src[] = { 330 + F(19200000, P_XO, 1, 0, 0), 331 + F(37500000, P_GPLL0, 16, 0, 0), 332 + F(50000000, P_GPLL0, 12, 0, 0), 333 + F(75000000, P_GPLL0, 8, 0, 0), 334 + F(100000000, P_GPLL0, 6, 0, 0), 335 + { } 336 + }; 337 + 338 + static struct clk_rcg2 periph_noc_clk_src = { 339 + .cmd_rcgr = 0x06014, 340 + .hid_width = 5, 341 + .parent_map = gcc_xo_gpll0_map, 342 + .freq_tbl = ftbl_periph_noc_clk_src, 343 + .clkr.hw.init = &(struct clk_init_data){ 344 + .name = "periph_noc_clk_src", 345 + .parent_names = gcc_xo_gpll0, 346 + .num_parents = 2, 347 + .ops = &clk_rcg2_ops, 348 + }, 349 + }; 350 + 351 + static const struct freq_tbl ftbl_usb30_master_clk_src[] = { 352 + F(19200000, P_XO, 1, 0, 0), 353 + F(120000000, P_GPLL0, 5, 0, 0), 354 + F(150000000, P_GPLL0, 4, 0, 0), 355 + { } 356 + }; 357 + 358 + static struct clk_rcg2 usb30_master_clk_src = { 359 + .cmd_rcgr = 0x0f014, 360 + .mnd_width = 8, 361 + .hid_width = 5, 362 + .parent_map = gcc_xo_gpll0_gpll0_early_div_map, 363 + .freq_tbl = ftbl_usb30_master_clk_src, 364 + .clkr.hw.init = &(struct clk_init_data){ 365 + .name = "usb30_master_clk_src", 366 + .parent_names = gcc_xo_gpll0_gpll0_early_div, 367 + .num_parents = 3, 368 + .ops = &clk_rcg2_ops, 369 + }, 370 + }; 371 + 372 + static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = { 373 + F(19200000, P_XO, 1, 0, 0), 374 + { } 375 + }; 376 + 377 + static struct clk_rcg2 usb30_mock_utmi_clk_src = { 378 + .cmd_rcgr = 0x0f028, 379 + .hid_width = 5, 380 + .parent_map = gcc_xo_gpll0_gpll0_early_div_map, 381 + .freq_tbl = ftbl_usb30_mock_utmi_clk_src, 382 + .clkr.hw.init = &(struct clk_init_data){ 383 + .name = "usb30_mock_utmi_clk_src", 384 + .parent_names = gcc_xo_gpll0_gpll0_early_div, 385 + .num_parents = 3, 386 + .ops = &clk_rcg2_ops, 387 + }, 388 + }; 389 + 390 + static const struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = { 391 + F(1200000, P_XO, 16, 0, 0), 392 + { } 393 + }; 394 + 395 + static struct clk_rcg2 usb3_phy_aux_clk_src = { 396 + .cmd_rcgr = 0x5000c, 397 + .hid_width = 5, 398 + .parent_map = gcc_xo_sleep_clk_map, 399 + .freq_tbl = ftbl_usb3_phy_aux_clk_src, 400 + .clkr.hw.init = &(struct clk_init_data){ 401 + .name = "usb3_phy_aux_clk_src", 402 + .parent_names = gcc_xo_sleep_clk, 403 + .num_parents = 2, 404 + .ops = &clk_rcg2_ops, 405 + }, 406 + }; 407 + 408 + static const struct freq_tbl ftbl_usb20_master_clk_src[] = { 409 + F(120000000, P_GPLL0, 5, 0, 0), 410 + { } 411 + }; 412 + 413 + static struct clk_rcg2 usb20_master_clk_src = { 414 + .cmd_rcgr = 0x12010, 415 + .mnd_width = 8, 416 + .hid_width = 5, 417 + .parent_map = gcc_xo_gpll0_gpll0_early_div_map, 418 + .freq_tbl = ftbl_usb20_master_clk_src, 419 + .clkr.hw.init = &(struct clk_init_data){ 420 + .name = "usb20_master_clk_src", 421 + .parent_names = gcc_xo_gpll0_gpll0_early_div, 422 + .num_parents = 3, 423 + .ops = &clk_rcg2_ops, 424 + }, 425 + }; 426 + 427 + static struct clk_rcg2 usb20_mock_utmi_clk_src = { 428 + .cmd_rcgr = 0x12024, 429 + .hid_width = 5, 430 + .parent_map = gcc_xo_gpll0_gpll0_early_div_map, 431 + .freq_tbl = ftbl_usb30_mock_utmi_clk_src, 432 + .clkr.hw.init = &(struct clk_init_data){ 433 + .name = "usb20_mock_utmi_clk_src", 434 + .parent_names = gcc_xo_gpll0_gpll0_early_div, 435 + .num_parents = 3, 436 + .ops = &clk_rcg2_ops, 437 + }, 438 + }; 439 + 440 + static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = { 441 + F(144000, P_XO, 16, 3, 25), 442 + F(400000, P_XO, 12, 1, 4), 443 + F(20000000, P_GPLL0, 15, 1, 2), 444 + F(25000000, P_GPLL0, 12, 1, 2), 445 + F(50000000, P_GPLL0, 12, 0, 0), 446 + F(96000000, P_GPLL4, 4, 0, 0), 447 + F(192000000, P_GPLL4, 2, 0, 0), 448 + F(384000000, P_GPLL4, 1, 0, 0), 449 + { } 450 + }; 451 + 452 + static struct clk_rcg2 sdcc1_apps_clk_src = { 453 + .cmd_rcgr = 0x13010, 454 + .mnd_width = 8, 455 + .hid_width = 5, 456 + .parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map, 457 + .freq_tbl = ftbl_sdcc1_apps_clk_src, 458 + .clkr.hw.init = &(struct clk_init_data){ 459 + .name = "sdcc1_apps_clk_src", 460 + .parent_names = gcc_xo_gpll0_gpll4_gpll0_early_div, 461 + .num_parents = 4, 462 + .ops = &clk_rcg2_ops, 463 + }, 464 + }; 465 + 466 + static struct clk_rcg2 sdcc1_ice_core_clk_src = { 467 + .cmd_rcgr = 0x13024, 468 + .hid_width = 5, 469 + .parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map, 470 + .clkr.hw.init = &(struct clk_init_data){ 471 + .name = "sdcc1_ice_core_clk_src", 472 + .parent_names = gcc_xo_gpll0_gpll4_gpll0_early_div, 473 + .num_parents = 4, 474 + .ops = &clk_rcg2_ops, 475 + }, 476 + }; 477 + 478 + static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = { 479 + F(144000, P_XO, 16, 3, 25), 480 + F(400000, P_XO, 12, 1, 4), 481 + F(20000000, P_GPLL0, 15, 1, 2), 482 + F(25000000, P_GPLL0, 12, 1, 2), 483 + F(50000000, P_GPLL0, 12, 0, 0), 484 + F(100000000, P_GPLL0, 6, 0, 0), 485 + F(200000000, P_GPLL0, 3, 0, 0), 486 + { } 487 + }; 488 + 489 + static struct clk_rcg2 sdcc2_apps_clk_src = { 490 + .cmd_rcgr = 0x14010, 491 + .mnd_width = 8, 492 + .hid_width = 5, 493 + .parent_map = gcc_xo_gpll0_gpll4_map, 494 + .freq_tbl = ftbl_sdcc2_apps_clk_src, 495 + .clkr.hw.init = &(struct clk_init_data){ 496 + .name = "sdcc2_apps_clk_src", 497 + .parent_names = gcc_xo_gpll0_gpll4, 498 + .num_parents = 3, 499 + .ops = &clk_rcg2_ops, 500 + }, 501 + }; 502 + 503 + static struct clk_rcg2 sdcc3_apps_clk_src = { 504 + .cmd_rcgr = 0x15010, 505 + .mnd_width = 8, 506 + .hid_width = 5, 507 + .parent_map = gcc_xo_gpll0_gpll4_map, 508 + .freq_tbl = ftbl_sdcc2_apps_clk_src, 509 + .clkr.hw.init = &(struct clk_init_data){ 510 + .name = "sdcc3_apps_clk_src", 511 + .parent_names = gcc_xo_gpll0_gpll4, 512 + .num_parents = 3, 513 + .ops = &clk_rcg2_ops, 514 + }, 515 + }; 516 + 517 + static const struct freq_tbl ftbl_sdcc4_apps_clk_src[] = { 518 + F(144000, P_XO, 16, 3, 25), 519 + F(400000, P_XO, 12, 1, 4), 520 + F(20000000, P_GPLL0, 15, 1, 2), 521 + F(25000000, P_GPLL0, 12, 1, 2), 522 + F(50000000, P_GPLL0, 12, 0, 0), 523 + F(100000000, P_GPLL0, 6, 0, 0), 524 + { } 525 + }; 526 + 527 + static struct clk_rcg2 sdcc4_apps_clk_src = { 528 + .cmd_rcgr = 0x16010, 529 + .mnd_width = 8, 530 + .hid_width = 5, 531 + .parent_map = gcc_xo_gpll0_map, 532 + .freq_tbl = ftbl_sdcc4_apps_clk_src, 533 + .clkr.hw.init = &(struct clk_init_data){ 534 + .name = "sdcc4_apps_clk_src", 535 + .parent_names = gcc_xo_gpll0, 536 + .num_parents = 2, 537 + .ops = &clk_rcg2_ops, 538 + }, 539 + }; 540 + 541 + static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = { 542 + F(960000, P_XO, 10, 1, 2), 543 + F(4800000, P_XO, 4, 0, 0), 544 + F(9600000, P_XO, 2, 0, 0), 545 + F(15000000, P_GPLL0, 10, 1, 4), 546 + F(19200000, P_XO, 1, 0, 0), 547 + F(25000000, P_GPLL0, 12, 1, 2), 548 + F(50000000, P_GPLL0, 12, 0, 0), 549 + { } 550 + }; 551 + 552 + static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = { 553 + .cmd_rcgr = 0x1900c, 554 + .mnd_width = 8, 555 + .hid_width = 5, 556 + .parent_map = gcc_xo_gpll0_map, 557 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 558 + .clkr.hw.init = &(struct clk_init_data){ 559 + .name = "blsp1_qup1_spi_apps_clk_src", 560 + .parent_names = gcc_xo_gpll0, 561 + .num_parents = 2, 562 + .ops = &clk_rcg2_ops, 563 + }, 564 + }; 565 + 566 + static const struct freq_tbl ftbl_blsp1_qup1_i2c_apps_clk_src[] = { 567 + F(19200000, P_XO, 1, 0, 0), 568 + F(50000000, P_GPLL0, 12, 0, 0), 569 + { } 570 + }; 571 + 572 + static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = { 573 + .cmd_rcgr = 0x19020, 574 + .hid_width = 5, 575 + .parent_map = gcc_xo_gpll0_map, 576 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 577 + .clkr.hw.init = &(struct clk_init_data){ 578 + .name = "blsp1_qup1_i2c_apps_clk_src", 579 + .parent_names = gcc_xo_gpll0, 580 + .num_parents = 2, 581 + .ops = &clk_rcg2_ops, 582 + }, 583 + }; 584 + 585 + static const struct freq_tbl ftbl_blsp1_uart1_apps_clk_src[] = { 586 + F(3686400, P_GPLL0, 1, 96, 15625), 587 + F(7372800, P_GPLL0, 1, 192, 15625), 588 + F(14745600, P_GPLL0, 1, 384, 15625), 589 + F(16000000, P_GPLL0, 5, 2, 15), 590 + F(19200000, P_XO, 1, 0, 0), 591 + F(24000000, P_GPLL0, 5, 1, 5), 592 + F(32000000, P_GPLL0, 1, 4, 75), 593 + F(40000000, P_GPLL0, 15, 0, 0), 594 + F(46400000, P_GPLL0, 1, 29, 375), 595 + F(48000000, P_GPLL0, 12.5, 0, 0), 596 + F(51200000, P_GPLL0, 1, 32, 375), 597 + F(56000000, P_GPLL0, 1, 7, 75), 598 + F(58982400, P_GPLL0, 1, 1536, 15625), 599 + F(60000000, P_GPLL0, 10, 0, 0), 600 + F(63157895, P_GPLL0, 9.5, 0, 0), 601 + { } 602 + }; 603 + 604 + static struct clk_rcg2 blsp1_uart1_apps_clk_src = { 605 + .cmd_rcgr = 0x1a00c, 606 + .mnd_width = 16, 607 + .hid_width = 5, 608 + .parent_map = gcc_xo_gpll0_map, 609 + .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 610 + .clkr.hw.init = &(struct clk_init_data){ 611 + .name = "blsp1_uart1_apps_clk_src", 612 + .parent_names = gcc_xo_gpll0, 613 + .num_parents = 2, 614 + .ops = &clk_rcg2_ops, 615 + }, 616 + }; 617 + 618 + static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = { 619 + .cmd_rcgr = 0x1b00c, 620 + .mnd_width = 8, 621 + .hid_width = 5, 622 + .parent_map = gcc_xo_gpll0_map, 623 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 624 + .clkr.hw.init = &(struct clk_init_data){ 625 + .name = "blsp1_qup2_spi_apps_clk_src", 626 + .parent_names = gcc_xo_gpll0, 627 + .num_parents = 2, 628 + .ops = &clk_rcg2_ops, 629 + }, 630 + }; 631 + 632 + static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = { 633 + .cmd_rcgr = 0x1b020, 634 + .hid_width = 5, 635 + .parent_map = gcc_xo_gpll0_map, 636 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 637 + .clkr.hw.init = &(struct clk_init_data){ 638 + .name = "blsp1_qup2_i2c_apps_clk_src", 639 + .parent_names = gcc_xo_gpll0, 640 + .num_parents = 2, 641 + .ops = &clk_rcg2_ops, 642 + }, 643 + }; 644 + 645 + static struct clk_rcg2 blsp1_uart2_apps_clk_src = { 646 + .cmd_rcgr = 0x1c00c, 647 + .mnd_width = 16, 648 + .hid_width = 5, 649 + .parent_map = gcc_xo_gpll0_map, 650 + .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 651 + .clkr.hw.init = &(struct clk_init_data){ 652 + .name = "blsp1_uart2_apps_clk_src", 653 + .parent_names = gcc_xo_gpll0, 654 + .num_parents = 2, 655 + .ops = &clk_rcg2_ops, 656 + }, 657 + }; 658 + 659 + static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = { 660 + .cmd_rcgr = 0x1d00c, 661 + .mnd_width = 8, 662 + .hid_width = 5, 663 + .parent_map = gcc_xo_gpll0_map, 664 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 665 + .clkr.hw.init = &(struct clk_init_data){ 666 + .name = "blsp1_qup3_spi_apps_clk_src", 667 + .parent_names = gcc_xo_gpll0, 668 + .num_parents = 2, 669 + .ops = &clk_rcg2_ops, 670 + }, 671 + }; 672 + 673 + static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = { 674 + .cmd_rcgr = 0x1d020, 675 + .hid_width = 5, 676 + .parent_map = gcc_xo_gpll0_map, 677 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 678 + .clkr.hw.init = &(struct clk_init_data){ 679 + .name = "blsp1_qup3_i2c_apps_clk_src", 680 + .parent_names = gcc_xo_gpll0, 681 + .num_parents = 2, 682 + .ops = &clk_rcg2_ops, 683 + }, 684 + }; 685 + 686 + static struct clk_rcg2 blsp1_uart3_apps_clk_src = { 687 + .cmd_rcgr = 0x1e00c, 688 + .mnd_width = 16, 689 + .hid_width = 5, 690 + .parent_map = gcc_xo_gpll0_map, 691 + .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 692 + .clkr.hw.init = &(struct clk_init_data){ 693 + .name = "blsp1_uart3_apps_clk_src", 694 + .parent_names = gcc_xo_gpll0, 695 + .num_parents = 2, 696 + .ops = &clk_rcg2_ops, 697 + }, 698 + }; 699 + 700 + static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = { 701 + .cmd_rcgr = 0x1f00c, 702 + .mnd_width = 8, 703 + .hid_width = 5, 704 + .parent_map = gcc_xo_gpll0_map, 705 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 706 + .clkr.hw.init = &(struct clk_init_data){ 707 + .name = "blsp1_qup4_spi_apps_clk_src", 708 + .parent_names = gcc_xo_gpll0, 709 + .num_parents = 2, 710 + .ops = &clk_rcg2_ops, 711 + }, 712 + }; 713 + 714 + static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = { 715 + .cmd_rcgr = 0x1f020, 716 + .hid_width = 5, 717 + .parent_map = gcc_xo_gpll0_map, 718 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 719 + .clkr.hw.init = &(struct clk_init_data){ 720 + .name = "blsp1_qup4_i2c_apps_clk_src", 721 + .parent_names = gcc_xo_gpll0, 722 + .num_parents = 2, 723 + .ops = &clk_rcg2_ops, 724 + }, 725 + }; 726 + 727 + static struct clk_rcg2 blsp1_uart4_apps_clk_src = { 728 + .cmd_rcgr = 0x2000c, 729 + .mnd_width = 16, 730 + .hid_width = 5, 731 + .parent_map = gcc_xo_gpll0_map, 732 + .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 733 + .clkr.hw.init = &(struct clk_init_data){ 734 + .name = "blsp1_uart4_apps_clk_src", 735 + .parent_names = gcc_xo_gpll0, 736 + .num_parents = 2, 737 + .ops = &clk_rcg2_ops, 738 + }, 739 + }; 740 + 741 + static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = { 742 + .cmd_rcgr = 0x2100c, 743 + .mnd_width = 8, 744 + .hid_width = 5, 745 + .parent_map = gcc_xo_gpll0_map, 746 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 747 + .clkr.hw.init = &(struct clk_init_data){ 748 + .name = "blsp1_qup5_spi_apps_clk_src", 749 + .parent_names = gcc_xo_gpll0, 750 + .num_parents = 2, 751 + .ops = &clk_rcg2_ops, 752 + }, 753 + }; 754 + 755 + static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = { 756 + .cmd_rcgr = 0x21020, 757 + .hid_width = 5, 758 + .parent_map = gcc_xo_gpll0_map, 759 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 760 + .clkr.hw.init = &(struct clk_init_data){ 761 + .name = "blsp1_qup5_i2c_apps_clk_src", 762 + .parent_names = gcc_xo_gpll0, 763 + .num_parents = 2, 764 + .ops = &clk_rcg2_ops, 765 + }, 766 + }; 767 + 768 + static struct clk_rcg2 blsp1_uart5_apps_clk_src = { 769 + .cmd_rcgr = 0x2200c, 770 + .mnd_width = 16, 771 + .hid_width = 5, 772 + .parent_map = gcc_xo_gpll0_map, 773 + .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 774 + .clkr.hw.init = &(struct clk_init_data){ 775 + .name = "blsp1_uart5_apps_clk_src", 776 + .parent_names = gcc_xo_gpll0, 777 + .num_parents = 2, 778 + .ops = &clk_rcg2_ops, 779 + }, 780 + }; 781 + 782 + static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = { 783 + .cmd_rcgr = 0x2300c, 784 + .mnd_width = 8, 785 + .hid_width = 5, 786 + .parent_map = gcc_xo_gpll0_map, 787 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 788 + .clkr.hw.init = &(struct clk_init_data){ 789 + .name = "blsp1_qup6_spi_apps_clk_src", 790 + .parent_names = gcc_xo_gpll0, 791 + .num_parents = 2, 792 + .ops = &clk_rcg2_ops, 793 + }, 794 + }; 795 + 796 + static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = { 797 + .cmd_rcgr = 0x23020, 798 + .hid_width = 5, 799 + .parent_map = gcc_xo_gpll0_map, 800 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 801 + .clkr.hw.init = &(struct clk_init_data){ 802 + .name = "blsp1_qup6_i2c_apps_clk_src", 803 + .parent_names = gcc_xo_gpll0, 804 + .num_parents = 2, 805 + .ops = &clk_rcg2_ops, 806 + }, 807 + }; 808 + 809 + static struct clk_rcg2 blsp1_uart6_apps_clk_src = { 810 + .cmd_rcgr = 0x2400c, 811 + .mnd_width = 16, 812 + .hid_width = 5, 813 + .parent_map = gcc_xo_gpll0_map, 814 + .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 815 + .clkr.hw.init = &(struct clk_init_data){ 816 + .name = "blsp1_uart6_apps_clk_src", 817 + .parent_names = gcc_xo_gpll0, 818 + .num_parents = 2, 819 + .ops = &clk_rcg2_ops, 820 + }, 821 + }; 822 + 823 + static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = { 824 + .cmd_rcgr = 0x2600c, 825 + .mnd_width = 8, 826 + .hid_width = 5, 827 + .parent_map = gcc_xo_gpll0_map, 828 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 829 + .clkr.hw.init = &(struct clk_init_data){ 830 + .name = "blsp2_qup1_spi_apps_clk_src", 831 + .parent_names = gcc_xo_gpll0, 832 + .num_parents = 2, 833 + .ops = &clk_rcg2_ops, 834 + }, 835 + }; 836 + 837 + static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = { 838 + .cmd_rcgr = 0x26020, 839 + .hid_width = 5, 840 + .parent_map = gcc_xo_gpll0_map, 841 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 842 + .clkr.hw.init = &(struct clk_init_data){ 843 + .name = "blsp2_qup1_i2c_apps_clk_src", 844 + .parent_names = gcc_xo_gpll0, 845 + .num_parents = 2, 846 + .ops = &clk_rcg2_ops, 847 + }, 848 + }; 849 + 850 + static struct clk_rcg2 blsp2_uart1_apps_clk_src = { 851 + .cmd_rcgr = 0x2700c, 852 + .mnd_width = 16, 853 + .hid_width = 5, 854 + .parent_map = gcc_xo_gpll0_map, 855 + .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 856 + .clkr.hw.init = &(struct clk_init_data){ 857 + .name = "blsp2_uart1_apps_clk_src", 858 + .parent_names = gcc_xo_gpll0, 859 + .num_parents = 2, 860 + .ops = &clk_rcg2_ops, 861 + }, 862 + }; 863 + 864 + static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = { 865 + .cmd_rcgr = 0x2800c, 866 + .mnd_width = 8, 867 + .hid_width = 5, 868 + .parent_map = gcc_xo_gpll0_map, 869 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 870 + .clkr.hw.init = &(struct clk_init_data){ 871 + .name = "blsp2_qup2_spi_apps_clk_src", 872 + .parent_names = gcc_xo_gpll0, 873 + .num_parents = 2, 874 + .ops = &clk_rcg2_ops, 875 + }, 876 + }; 877 + 878 + static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = { 879 + .cmd_rcgr = 0x28020, 880 + .hid_width = 5, 881 + .parent_map = gcc_xo_gpll0_map, 882 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 883 + .clkr.hw.init = &(struct clk_init_data){ 884 + .name = "blsp2_qup2_i2c_apps_clk_src", 885 + .parent_names = gcc_xo_gpll0, 886 + .num_parents = 2, 887 + .ops = &clk_rcg2_ops, 888 + }, 889 + }; 890 + 891 + static struct clk_rcg2 blsp2_uart2_apps_clk_src = { 892 + .cmd_rcgr = 0x2900c, 893 + .mnd_width = 16, 894 + .hid_width = 5, 895 + .parent_map = gcc_xo_gpll0_map, 896 + .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 897 + .clkr.hw.init = &(struct clk_init_data){ 898 + .name = "blsp2_uart2_apps_clk_src", 899 + .parent_names = gcc_xo_gpll0, 900 + .num_parents = 2, 901 + .ops = &clk_rcg2_ops, 902 + }, 903 + }; 904 + 905 + static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = { 906 + .cmd_rcgr = 0x2a00c, 907 + .mnd_width = 8, 908 + .hid_width = 5, 909 + .parent_map = gcc_xo_gpll0_map, 910 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 911 + .clkr.hw.init = &(struct clk_init_data){ 912 + .name = "blsp2_qup3_spi_apps_clk_src", 913 + .parent_names = gcc_xo_gpll0, 914 + .num_parents = 2, 915 + .ops = &clk_rcg2_ops, 916 + }, 917 + }; 918 + 919 + static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = { 920 + .cmd_rcgr = 0x2a020, 921 + .hid_width = 5, 922 + .parent_map = gcc_xo_gpll0_map, 923 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 924 + .clkr.hw.init = &(struct clk_init_data){ 925 + .name = "blsp2_qup3_i2c_apps_clk_src", 926 + .parent_names = gcc_xo_gpll0, 927 + .num_parents = 2, 928 + .ops = &clk_rcg2_ops, 929 + }, 930 + }; 931 + 932 + static struct clk_rcg2 blsp2_uart3_apps_clk_src = { 933 + .cmd_rcgr = 0x2b00c, 934 + .mnd_width = 16, 935 + .hid_width = 5, 936 + .parent_map = gcc_xo_gpll0_map, 937 + .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 938 + .clkr.hw.init = &(struct clk_init_data){ 939 + .name = "blsp2_uart3_apps_clk_src", 940 + .parent_names = gcc_xo_gpll0, 941 + .num_parents = 2, 942 + .ops = &clk_rcg2_ops, 943 + }, 944 + }; 945 + 946 + static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = { 947 + .cmd_rcgr = 0x2c00c, 948 + .mnd_width = 8, 949 + .hid_width = 5, 950 + .parent_map = gcc_xo_gpll0_map, 951 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 952 + .clkr.hw.init = &(struct clk_init_data){ 953 + .name = "blsp2_qup4_spi_apps_clk_src", 954 + .parent_names = gcc_xo_gpll0, 955 + .num_parents = 2, 956 + .ops = &clk_rcg2_ops, 957 + }, 958 + }; 959 + 960 + static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = { 961 + .cmd_rcgr = 0x2c020, 962 + .hid_width = 5, 963 + .parent_map = gcc_xo_gpll0_map, 964 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 965 + .clkr.hw.init = &(struct clk_init_data){ 966 + .name = "blsp2_qup4_i2c_apps_clk_src", 967 + .parent_names = gcc_xo_gpll0, 968 + .num_parents = 2, 969 + .ops = &clk_rcg2_ops, 970 + }, 971 + }; 972 + 973 + static struct clk_rcg2 blsp2_uart4_apps_clk_src = { 974 + .cmd_rcgr = 0x2d00c, 975 + .mnd_width = 16, 976 + .hid_width = 5, 977 + .parent_map = gcc_xo_gpll0_map, 978 + .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 979 + .clkr.hw.init = &(struct clk_init_data){ 980 + .name = "blsp2_uart4_apps_clk_src", 981 + .parent_names = gcc_xo_gpll0, 982 + .num_parents = 2, 983 + .ops = &clk_rcg2_ops, 984 + }, 985 + }; 986 + 987 + static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = { 988 + .cmd_rcgr = 0x2e00c, 989 + .mnd_width = 8, 990 + .hid_width = 5, 991 + .parent_map = gcc_xo_gpll0_map, 992 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 993 + .clkr.hw.init = &(struct clk_init_data){ 994 + .name = "blsp2_qup5_spi_apps_clk_src", 995 + .parent_names = gcc_xo_gpll0, 996 + .num_parents = 2, 997 + .ops = &clk_rcg2_ops, 998 + }, 999 + }; 1000 + 1001 + static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = { 1002 + .cmd_rcgr = 0x2e020, 1003 + .hid_width = 5, 1004 + .parent_map = gcc_xo_gpll0_map, 1005 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 1006 + .clkr.hw.init = &(struct clk_init_data){ 1007 + .name = "blsp2_qup5_i2c_apps_clk_src", 1008 + .parent_names = gcc_xo_gpll0, 1009 + .num_parents = 2, 1010 + .ops = &clk_rcg2_ops, 1011 + }, 1012 + }; 1013 + 1014 + static struct clk_rcg2 blsp2_uart5_apps_clk_src = { 1015 + .cmd_rcgr = 0x2f00c, 1016 + .mnd_width = 16, 1017 + .hid_width = 5, 1018 + .parent_map = gcc_xo_gpll0_map, 1019 + .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 1020 + .clkr.hw.init = &(struct clk_init_data){ 1021 + .name = "blsp2_uart5_apps_clk_src", 1022 + .parent_names = gcc_xo_gpll0, 1023 + .num_parents = 2, 1024 + .ops = &clk_rcg2_ops, 1025 + }, 1026 + }; 1027 + 1028 + static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = { 1029 + .cmd_rcgr = 0x3000c, 1030 + .mnd_width = 8, 1031 + .hid_width = 5, 1032 + .parent_map = gcc_xo_gpll0_map, 1033 + .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 1034 + .clkr.hw.init = &(struct clk_init_data){ 1035 + .name = "blsp2_qup6_spi_apps_clk_src", 1036 + .parent_names = gcc_xo_gpll0, 1037 + .num_parents = 2, 1038 + .ops = &clk_rcg2_ops, 1039 + }, 1040 + }; 1041 + 1042 + static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = { 1043 + .cmd_rcgr = 0x30020, 1044 + .hid_width = 5, 1045 + .parent_map = gcc_xo_gpll0_map, 1046 + .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 1047 + .clkr.hw.init = &(struct clk_init_data){ 1048 + .name = "blsp2_qup6_i2c_apps_clk_src", 1049 + .parent_names = gcc_xo_gpll0, 1050 + .num_parents = 2, 1051 + .ops = &clk_rcg2_ops, 1052 + }, 1053 + }; 1054 + 1055 + static struct clk_rcg2 blsp2_uart6_apps_clk_src = { 1056 + .cmd_rcgr = 0x3100c, 1057 + .mnd_width = 16, 1058 + .hid_width = 5, 1059 + .parent_map = gcc_xo_gpll0_map, 1060 + .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 1061 + .clkr.hw.init = &(struct clk_init_data){ 1062 + .name = "blsp2_uart6_apps_clk_src", 1063 + .parent_names = gcc_xo_gpll0, 1064 + .num_parents = 2, 1065 + .ops = &clk_rcg2_ops, 1066 + }, 1067 + }; 1068 + 1069 + static const struct freq_tbl ftbl_pdm2_clk_src[] = { 1070 + F(60000000, P_GPLL0, 10, 0, 0), 1071 + { } 1072 + }; 1073 + 1074 + static struct clk_rcg2 pdm2_clk_src = { 1075 + .cmd_rcgr = 0x33010, 1076 + .hid_width = 5, 1077 + .parent_map = gcc_xo_gpll0_map, 1078 + .freq_tbl = ftbl_pdm2_clk_src, 1079 + .clkr.hw.init = &(struct clk_init_data){ 1080 + .name = "pdm2_clk_src", 1081 + .parent_names = gcc_xo_gpll0, 1082 + .num_parents = 2, 1083 + .ops = &clk_rcg2_ops, 1084 + }, 1085 + }; 1086 + 1087 + static const struct freq_tbl ftbl_tsif_ref_clk_src[] = { 1088 + F(105495, P_XO, 1, 1, 182), 1089 + { } 1090 + }; 1091 + 1092 + static struct clk_rcg2 tsif_ref_clk_src = { 1093 + .cmd_rcgr = 0x36010, 1094 + .mnd_width = 8, 1095 + .hid_width = 5, 1096 + .parent_map = gcc_xo_gpll0_aud_ref_clk_map, 1097 + .freq_tbl = ftbl_tsif_ref_clk_src, 1098 + .clkr.hw.init = &(struct clk_init_data){ 1099 + .name = "tsif_ref_clk_src", 1100 + .parent_names = gcc_xo_gpll0_aud_ref_clk, 1101 + .num_parents = 3, 1102 + .ops = &clk_rcg2_ops, 1103 + }, 1104 + }; 1105 + 1106 + static struct clk_rcg2 gcc_sleep_clk_src = { 1107 + .cmd_rcgr = 0x43014, 1108 + .hid_width = 5, 1109 + .parent_map = gcc_sleep_clk_map, 1110 + .clkr.hw.init = &(struct clk_init_data){ 1111 + .name = "gcc_sleep_clk_src", 1112 + .parent_names = gcc_sleep_clk, 1113 + .num_parents = 1, 1114 + .ops = &clk_rcg2_ops, 1115 + }, 1116 + }; 1117 + 1118 + static struct clk_rcg2 hmss_rbcpr_clk_src = { 1119 + .cmd_rcgr = 0x48040, 1120 + .hid_width = 5, 1121 + .parent_map = gcc_xo_gpll0_map, 1122 + .freq_tbl = ftbl_usb30_mock_utmi_clk_src, 1123 + .clkr.hw.init = &(struct clk_init_data){ 1124 + .name = "hmss_rbcpr_clk_src", 1125 + .parent_names = gcc_xo_gpll0, 1126 + .num_parents = 2, 1127 + .ops = &clk_rcg2_ops, 1128 + }, 1129 + }; 1130 + 1131 + static struct clk_rcg2 hmss_gpll0_clk_src = { 1132 + .cmd_rcgr = 0x48058, 1133 + .hid_width = 5, 1134 + .parent_map = gcc_xo_gpll0_map, 1135 + .clkr.hw.init = &(struct clk_init_data){ 1136 + .name = "hmss_gpll0_clk_src", 1137 + .parent_names = gcc_xo_gpll0, 1138 + .num_parents = 2, 1139 + .ops = &clk_rcg2_ops, 1140 + }, 1141 + }; 1142 + 1143 + static const struct freq_tbl ftbl_gp1_clk_src[] = { 1144 + F(19200000, P_XO, 1, 0, 0), 1145 + F(100000000, P_GPLL0, 6, 0, 0), 1146 + F(200000000, P_GPLL0, 3, 0, 0), 1147 + { } 1148 + }; 1149 + 1150 + static struct clk_rcg2 gp1_clk_src = { 1151 + .cmd_rcgr = 0x64004, 1152 + .mnd_width = 8, 1153 + .hid_width = 5, 1154 + .parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map, 1155 + .freq_tbl = ftbl_gp1_clk_src, 1156 + .clkr.hw.init = &(struct clk_init_data){ 1157 + .name = "gp1_clk_src", 1158 + .parent_names = gcc_xo_gpll0_sleep_clk_gpll0_early_div, 1159 + .num_parents = 4, 1160 + .ops = &clk_rcg2_ops, 1161 + }, 1162 + }; 1163 + 1164 + static struct clk_rcg2 gp2_clk_src = { 1165 + .cmd_rcgr = 0x65004, 1166 + .mnd_width = 8, 1167 + .hid_width = 5, 1168 + .parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map, 1169 + .freq_tbl = ftbl_gp1_clk_src, 1170 + .clkr.hw.init = &(struct clk_init_data){ 1171 + .name = "gp2_clk_src", 1172 + .parent_names = gcc_xo_gpll0_sleep_clk_gpll0_early_div, 1173 + .num_parents = 4, 1174 + .ops = &clk_rcg2_ops, 1175 + }, 1176 + }; 1177 + 1178 + static struct clk_rcg2 gp3_clk_src = { 1179 + .cmd_rcgr = 0x66004, 1180 + .mnd_width = 8, 1181 + .hid_width = 5, 1182 + .parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map, 1183 + .freq_tbl = ftbl_gp1_clk_src, 1184 + .clkr.hw.init = &(struct clk_init_data){ 1185 + .name = "gp3_clk_src", 1186 + .parent_names = gcc_xo_gpll0_sleep_clk_gpll0_early_div, 1187 + .num_parents = 4, 1188 + .ops = &clk_rcg2_ops, 1189 + }, 1190 + }; 1191 + 1192 + static const struct freq_tbl ftbl_pcie_aux_clk_src[] = { 1193 + F(1010526, P_XO, 1, 1, 19), 1194 + { } 1195 + }; 1196 + 1197 + static struct clk_rcg2 pcie_aux_clk_src = { 1198 + .cmd_rcgr = 0x6c000, 1199 + .mnd_width = 16, 1200 + .hid_width = 5, 1201 + .parent_map = gcc_xo_sleep_clk_map, 1202 + .freq_tbl = ftbl_pcie_aux_clk_src, 1203 + .clkr.hw.init = &(struct clk_init_data){ 1204 + .name = "pcie_aux_clk_src", 1205 + .parent_names = gcc_xo_sleep_clk, 1206 + .num_parents = 2, 1207 + .ops = &clk_rcg2_ops, 1208 + }, 1209 + }; 1210 + 1211 + static const struct freq_tbl ftbl_ufs_axi_clk_src[] = { 1212 + F(100000000, P_GPLL0, 6, 0, 0), 1213 + F(200000000, P_GPLL0, 3, 0, 0), 1214 + F(240000000, P_GPLL0, 2.5, 0, 0), 1215 + { } 1216 + }; 1217 + 1218 + static struct clk_rcg2 ufs_axi_clk_src = { 1219 + .cmd_rcgr = 0x75024, 1220 + .mnd_width = 8, 1221 + .hid_width = 5, 1222 + .parent_map = gcc_xo_gpll0_map, 1223 + .freq_tbl = ftbl_ufs_axi_clk_src, 1224 + .clkr.hw.init = &(struct clk_init_data){ 1225 + .name = "ufs_axi_clk_src", 1226 + .parent_names = gcc_xo_gpll0, 1227 + .num_parents = 2, 1228 + .ops = &clk_rcg2_ops, 1229 + }, 1230 + }; 1231 + 1232 + static struct clk_rcg2 ufs_ice_core_clk_src = { 1233 + .cmd_rcgr = 0x76014, 1234 + .hid_width = 5, 1235 + .parent_map = gcc_xo_gpll0_map, 1236 + .clkr.hw.init = &(struct clk_init_data){ 1237 + .name = "ufs_ice_core_clk_src", 1238 + .parent_names = gcc_xo_gpll0, 1239 + .num_parents = 2, 1240 + .ops = &clk_rcg2_ops, 1241 + }, 1242 + }; 1243 + 1244 + static struct clk_rcg2 qspi_ser_clk_src = { 1245 + .cmd_rcgr = 0x8b00c, 1246 + .hid_width = 5, 1247 + .parent_map = gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div_map, 1248 + .clkr.hw.init = &(struct clk_init_data){ 1249 + .name = "qspi_ser_clk_src", 1250 + .parent_names = gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div, 1251 + .num_parents = 6, 1252 + .ops = &clk_rcg2_ops, 1253 + }, 1254 + }; 1255 + 1256 + static struct clk_branch gcc_sys_noc_usb3_axi_clk = { 1257 + .halt_reg = 0x0f03c, 1258 + .clkr = { 1259 + .enable_reg = 0x0f03c, 1260 + .enable_mask = BIT(0), 1261 + .hw.init = &(struct clk_init_data){ 1262 + .name = "gcc_sys_noc_usb3_axi_clk", 1263 + .parent_names = (const char *[]){ "usb30_master_clk_src" }, 1264 + .num_parents = 1, 1265 + .flags = CLK_SET_RATE_PARENT, 1266 + .ops = &clk_branch2_ops, 1267 + }, 1268 + }, 1269 + }; 1270 + 1271 + static struct clk_branch gcc_sys_noc_ufs_axi_clk = { 1272 + .halt_reg = 0x75038, 1273 + .clkr = { 1274 + .enable_reg = 0x75038, 1275 + .enable_mask = BIT(0), 1276 + .hw.init = &(struct clk_init_data){ 1277 + .name = "gcc_sys_noc_ufs_axi_clk", 1278 + .parent_names = (const char *[]){ "ufs_axi_clk_src" }, 1279 + .num_parents = 1, 1280 + .flags = CLK_SET_RATE_PARENT, 1281 + .ops = &clk_branch2_ops, 1282 + }, 1283 + }, 1284 + }; 1285 + 1286 + static struct clk_branch gcc_periph_noc_usb20_ahb_clk = { 1287 + .halt_reg = 0x6010, 1288 + .clkr = { 1289 + .enable_reg = 0x6010, 1290 + .enable_mask = BIT(0), 1291 + .hw.init = &(struct clk_init_data){ 1292 + .name = "gcc_periph_noc_usb20_ahb_clk", 1293 + .parent_names = (const char *[]){ "usb20_master_clk_src" }, 1294 + .num_parents = 1, 1295 + .flags = CLK_SET_RATE_PARENT, 1296 + .ops = &clk_branch2_ops, 1297 + }, 1298 + }, 1299 + }; 1300 + 1301 + static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = { 1302 + .halt_reg = 0x9008, 1303 + .clkr = { 1304 + .enable_reg = 0x9008, 1305 + .enable_mask = BIT(0), 1306 + .hw.init = &(struct clk_init_data){ 1307 + .name = "gcc_mmss_noc_cfg_ahb_clk", 1308 + .parent_names = (const char *[]){ "config_noc_clk_src" }, 1309 + .num_parents = 1, 1310 + .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 1311 + .ops = &clk_branch2_ops, 1312 + }, 1313 + }, 1314 + }; 1315 + 1316 + static struct clk_branch gcc_mmss_bimc_gfx_clk = { 1317 + .halt_reg = 0x9010, 1318 + .clkr = { 1319 + .enable_reg = 0x9010, 1320 + .enable_mask = BIT(0), 1321 + .hw.init = &(struct clk_init_data){ 1322 + .name = "gcc_mmss_bimc_gfx_clk", 1323 + .flags = CLK_SET_RATE_PARENT | CLK_IS_ROOT, 1324 + .ops = &clk_branch2_ops, 1325 + }, 1326 + }, 1327 + }; 1328 + 1329 + static struct clk_branch gcc_usb30_master_clk = { 1330 + .halt_reg = 0x0f008, 1331 + .clkr = { 1332 + .enable_reg = 0x0f008, 1333 + .enable_mask = BIT(0), 1334 + .hw.init = &(struct clk_init_data){ 1335 + .name = "gcc_usb30_master_clk", 1336 + .parent_names = (const char *[]){ "usb30_master_clk_src" }, 1337 + .num_parents = 1, 1338 + .flags = CLK_SET_RATE_PARENT, 1339 + .ops = &clk_branch2_ops, 1340 + }, 1341 + }, 1342 + }; 1343 + 1344 + static struct clk_branch gcc_usb30_sleep_clk = { 1345 + .halt_reg = 0x0f00c, 1346 + .clkr = { 1347 + .enable_reg = 0x0f00c, 1348 + .enable_mask = BIT(0), 1349 + .hw.init = &(struct clk_init_data){ 1350 + .name = "gcc_usb30_sleep_clk", 1351 + .parent_names = (const char *[]){ "gcc_sleep_clk_src" }, 1352 + .num_parents = 1, 1353 + .flags = CLK_SET_RATE_PARENT, 1354 + .ops = &clk_branch2_ops, 1355 + }, 1356 + }, 1357 + }; 1358 + 1359 + static struct clk_branch gcc_usb30_mock_utmi_clk = { 1360 + .halt_reg = 0x0f010, 1361 + .clkr = { 1362 + .enable_reg = 0x0f010, 1363 + .enable_mask = BIT(0), 1364 + .hw.init = &(struct clk_init_data){ 1365 + .name = "gcc_usb30_mock_utmi_clk", 1366 + .parent_names = (const char *[]){ "usb30_mock_utmi_clk_src" }, 1367 + .num_parents = 1, 1368 + .flags = CLK_SET_RATE_PARENT, 1369 + .ops = &clk_branch2_ops, 1370 + }, 1371 + }, 1372 + }; 1373 + 1374 + static struct clk_branch gcc_usb3_phy_aux_clk = { 1375 + .halt_reg = 0x50000, 1376 + .clkr = { 1377 + .enable_reg = 0x50000, 1378 + .enable_mask = BIT(0), 1379 + .hw.init = &(struct clk_init_data){ 1380 + .name = "gcc_usb3_phy_aux_clk", 1381 + .parent_names = (const char *[]){ "usb3_phy_aux_clk_src" }, 1382 + .num_parents = 1, 1383 + .flags = CLK_SET_RATE_PARENT, 1384 + .ops = &clk_branch2_ops, 1385 + }, 1386 + }, 1387 + }; 1388 + 1389 + static struct clk_branch gcc_usb3_phy_pipe_clk = { 1390 + .halt_reg = 0x50004, 1391 + .clkr = { 1392 + .enable_reg = 0x50004, 1393 + .enable_mask = BIT(0), 1394 + .hw.init = &(struct clk_init_data){ 1395 + .name = "gcc_usb3_phy_pipe_clk", 1396 + .parent_names = (const char *[]){ "usb3_phy_pipe_clk_src" }, 1397 + .num_parents = 1, 1398 + .flags = CLK_SET_RATE_PARENT, 1399 + .ops = &clk_branch2_ops, 1400 + }, 1401 + }, 1402 + }; 1403 + 1404 + static struct clk_branch gcc_usb20_master_clk = { 1405 + .halt_reg = 0x12004, 1406 + .clkr = { 1407 + .enable_reg = 0x12004, 1408 + .enable_mask = BIT(0), 1409 + .hw.init = &(struct clk_init_data){ 1410 + .name = "gcc_usb20_master_clk", 1411 + .parent_names = (const char *[]){ "usb20_master_clk_src" }, 1412 + .num_parents = 1, 1413 + .flags = CLK_SET_RATE_PARENT, 1414 + .ops = &clk_branch2_ops, 1415 + }, 1416 + }, 1417 + }; 1418 + 1419 + static struct clk_branch gcc_usb20_sleep_clk = { 1420 + .halt_reg = 0x12008, 1421 + .clkr = { 1422 + .enable_reg = 0x12008, 1423 + .enable_mask = BIT(0), 1424 + .hw.init = &(struct clk_init_data){ 1425 + .name = "gcc_usb20_sleep_clk", 1426 + .parent_names = (const char *[]){ "gcc_sleep_clk_src" }, 1427 + .num_parents = 1, 1428 + .flags = CLK_SET_RATE_PARENT, 1429 + .ops = &clk_branch2_ops, 1430 + }, 1431 + }, 1432 + }; 1433 + 1434 + static struct clk_branch gcc_usb20_mock_utmi_clk = { 1435 + .halt_reg = 0x1200c, 1436 + .clkr = { 1437 + .enable_reg = 0x1200c, 1438 + .enable_mask = BIT(0), 1439 + .hw.init = &(struct clk_init_data){ 1440 + .name = "gcc_usb20_mock_utmi_clk", 1441 + .parent_names = (const char *[]){ "usb20_mock_utmi_clk_src" }, 1442 + .num_parents = 1, 1443 + .flags = CLK_SET_RATE_PARENT, 1444 + .ops = &clk_branch2_ops, 1445 + }, 1446 + }, 1447 + }; 1448 + 1449 + static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = { 1450 + .halt_reg = 0x6a004, 1451 + .clkr = { 1452 + .enable_reg = 0x6a004, 1453 + .enable_mask = BIT(0), 1454 + .hw.init = &(struct clk_init_data){ 1455 + .name = "gcc_usb_phy_cfg_ahb2phy_clk", 1456 + .parent_names = (const char *[]){ "periph_noc_clk_src" }, 1457 + .num_parents = 1, 1458 + .flags = CLK_SET_RATE_PARENT, 1459 + .ops = &clk_branch2_ops, 1460 + }, 1461 + }, 1462 + }; 1463 + 1464 + static struct clk_branch gcc_sdcc1_apps_clk = { 1465 + .halt_reg = 0x13004, 1466 + .clkr = { 1467 + .enable_reg = 0x13004, 1468 + .enable_mask = BIT(0), 1469 + .hw.init = &(struct clk_init_data){ 1470 + .name = "gcc_sdcc1_apps_clk", 1471 + .parent_names = (const char *[]){ "sdcc1_apps_clk_src" }, 1472 + .num_parents = 1, 1473 + .flags = CLK_SET_RATE_PARENT, 1474 + .ops = &clk_branch2_ops, 1475 + }, 1476 + }, 1477 + }; 1478 + 1479 + static struct clk_branch gcc_sdcc1_ahb_clk = { 1480 + .halt_reg = 0x13008, 1481 + .clkr = { 1482 + .enable_reg = 0x13008, 1483 + .enable_mask = BIT(0), 1484 + .hw.init = &(struct clk_init_data){ 1485 + .name = "gcc_sdcc1_ahb_clk", 1486 + .parent_names = (const char *[]){ "periph_noc_clk_src" }, 1487 + .num_parents = 1, 1488 + .flags = CLK_SET_RATE_PARENT, 1489 + .ops = &clk_branch2_ops, 1490 + }, 1491 + }, 1492 + }; 1493 + 1494 + static struct clk_branch gcc_sdcc1_ice_core_clk = { 1495 + .halt_reg = 0x13038, 1496 + .clkr = { 1497 + .enable_reg = 0x13038, 1498 + .enable_mask = BIT(0), 1499 + .hw.init = &(struct clk_init_data){ 1500 + .name = "gcc_sdcc1_ice_core_clk", 1501 + .parent_names = (const char *[]){ "sdcc1_ice_core_clk_src" }, 1502 + .num_parents = 1, 1503 + .flags = CLK_SET_RATE_PARENT, 1504 + .ops = &clk_branch2_ops, 1505 + }, 1506 + }, 1507 + }; 1508 + 1509 + static struct clk_branch gcc_sdcc2_apps_clk = { 1510 + .halt_reg = 0x14004, 1511 + .clkr = { 1512 + .enable_reg = 0x14004, 1513 + .enable_mask = BIT(0), 1514 + .hw.init = &(struct clk_init_data){ 1515 + .name = "gcc_sdcc2_apps_clk", 1516 + .parent_names = (const char *[]){ "sdcc2_apps_clk_src" }, 1517 + .num_parents = 1, 1518 + .flags = CLK_SET_RATE_PARENT, 1519 + .ops = &clk_branch2_ops, 1520 + }, 1521 + }, 1522 + }; 1523 + 1524 + static struct clk_branch gcc_sdcc2_ahb_clk = { 1525 + .halt_reg = 0x14008, 1526 + .clkr = { 1527 + .enable_reg = 0x14008, 1528 + .enable_mask = BIT(0), 1529 + .hw.init = &(struct clk_init_data){ 1530 + .name = "gcc_sdcc2_ahb_clk", 1531 + .parent_names = (const char *[]){ "periph_noc_clk_src" }, 1532 + .num_parents = 1, 1533 + .flags = CLK_SET_RATE_PARENT, 1534 + .ops = &clk_branch2_ops, 1535 + }, 1536 + }, 1537 + }; 1538 + 1539 + static struct clk_branch gcc_sdcc3_apps_clk = { 1540 + .halt_reg = 0x15004, 1541 + .clkr = { 1542 + .enable_reg = 0x15004, 1543 + .enable_mask = BIT(0), 1544 + .hw.init = &(struct clk_init_data){ 1545 + .name = "gcc_sdcc3_apps_clk", 1546 + .parent_names = (const char *[]){ "sdcc3_apps_clk_src" }, 1547 + .num_parents = 1, 1548 + .flags = CLK_SET_RATE_PARENT, 1549 + .ops = &clk_branch2_ops, 1550 + }, 1551 + }, 1552 + }; 1553 + 1554 + static struct clk_branch gcc_sdcc3_ahb_clk = { 1555 + .halt_reg = 0x15008, 1556 + .clkr = { 1557 + .enable_reg = 0x15008, 1558 + .enable_mask = BIT(0), 1559 + .hw.init = &(struct clk_init_data){ 1560 + .name = "gcc_sdcc3_ahb_clk", 1561 + .parent_names = (const char *[]){ "periph_noc_clk_src" }, 1562 + .num_parents = 1, 1563 + .flags = CLK_SET_RATE_PARENT, 1564 + .ops = &clk_branch2_ops, 1565 + }, 1566 + }, 1567 + }; 1568 + 1569 + static struct clk_branch gcc_sdcc4_apps_clk = { 1570 + .halt_reg = 0x16004, 1571 + .clkr = { 1572 + .enable_reg = 0x16004, 1573 + .enable_mask = BIT(0), 1574 + .hw.init = &(struct clk_init_data){ 1575 + .name = "gcc_sdcc4_apps_clk", 1576 + .parent_names = (const char *[]){ "sdcc4_apps_clk_src" }, 1577 + .num_parents = 1, 1578 + .flags = CLK_SET_RATE_PARENT, 1579 + .ops = &clk_branch2_ops, 1580 + }, 1581 + }, 1582 + }; 1583 + 1584 + static struct clk_branch gcc_sdcc4_ahb_clk = { 1585 + .halt_reg = 0x16008, 1586 + .clkr = { 1587 + .enable_reg = 0x16008, 1588 + .enable_mask = BIT(0), 1589 + .hw.init = &(struct clk_init_data){ 1590 + .name = "gcc_sdcc4_ahb_clk", 1591 + .parent_names = (const char *[]){ "periph_noc_clk_src" }, 1592 + .num_parents = 1, 1593 + .flags = CLK_SET_RATE_PARENT, 1594 + .ops = &clk_branch2_ops, 1595 + }, 1596 + }, 1597 + }; 1598 + 1599 + static struct clk_branch gcc_blsp1_ahb_clk = { 1600 + .halt_reg = 0x17004, 1601 + .halt_check = BRANCH_HALT_VOTED, 1602 + .clkr = { 1603 + .enable_reg = 0x52004, 1604 + .enable_mask = BIT(17), 1605 + .hw.init = &(struct clk_init_data){ 1606 + .name = "gcc_blsp1_ahb_clk", 1607 + .parent_names = (const char *[]){ "periph_noc_clk_src" }, 1608 + .num_parents = 1, 1609 + .flags = CLK_SET_RATE_PARENT, 1610 + .ops = &clk_branch2_ops, 1611 + }, 1612 + }, 1613 + }; 1614 + 1615 + static struct clk_branch gcc_blsp1_sleep_clk = { 1616 + .halt_reg = 0x17008, 1617 + .halt_check = BRANCH_HALT_VOTED, 1618 + .clkr = { 1619 + .enable_reg = 0x52004, 1620 + .enable_mask = BIT(16), 1621 + .hw.init = &(struct clk_init_data){ 1622 + .name = "gcc_blsp1_sleep_clk", 1623 + .parent_names = (const char *[]){ "gcc_sleep_clk_src" }, 1624 + .num_parents = 1, 1625 + .flags = CLK_SET_RATE_PARENT, 1626 + .ops = &clk_branch2_ops, 1627 + }, 1628 + }, 1629 + }; 1630 + 1631 + static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = { 1632 + .halt_reg = 0x19004, 1633 + .clkr = { 1634 + .enable_reg = 0x19004, 1635 + .enable_mask = BIT(0), 1636 + .hw.init = &(struct clk_init_data){ 1637 + .name = "gcc_blsp1_qup1_spi_apps_clk", 1638 + .parent_names = (const char *[]){ "blsp1_qup1_spi_apps_clk_src" }, 1639 + .num_parents = 1, 1640 + .flags = CLK_SET_RATE_PARENT, 1641 + .ops = &clk_branch2_ops, 1642 + }, 1643 + }, 1644 + }; 1645 + 1646 + static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = { 1647 + .halt_reg = 0x19008, 1648 + .clkr = { 1649 + .enable_reg = 0x19008, 1650 + .enable_mask = BIT(0), 1651 + .hw.init = &(struct clk_init_data){ 1652 + .name = "gcc_blsp1_qup1_i2c_apps_clk", 1653 + .parent_names = (const char *[]){ "blsp1_qup1_i2c_apps_clk_src" }, 1654 + .num_parents = 1, 1655 + .flags = CLK_SET_RATE_PARENT, 1656 + .ops = &clk_branch2_ops, 1657 + }, 1658 + }, 1659 + }; 1660 + 1661 + static struct clk_branch gcc_blsp1_uart1_apps_clk = { 1662 + .halt_reg = 0x1a004, 1663 + .clkr = { 1664 + .enable_reg = 0x1a004, 1665 + .enable_mask = BIT(0), 1666 + .hw.init = &(struct clk_init_data){ 1667 + .name = "gcc_blsp1_uart1_apps_clk", 1668 + .parent_names = (const char *[]){ "blsp1_uart1_apps_clk_src" }, 1669 + .num_parents = 1, 1670 + .flags = CLK_SET_RATE_PARENT, 1671 + .ops = &clk_branch2_ops, 1672 + }, 1673 + }, 1674 + }; 1675 + 1676 + static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = { 1677 + .halt_reg = 0x1b004, 1678 + .clkr = { 1679 + .enable_reg = 0x1b004, 1680 + .enable_mask = BIT(0), 1681 + .hw.init = &(struct clk_init_data){ 1682 + .name = "gcc_blsp1_qup2_spi_apps_clk", 1683 + .parent_names = (const char *[]){ "blsp1_qup2_spi_apps_clk_src" }, 1684 + .num_parents = 1, 1685 + .flags = CLK_SET_RATE_PARENT, 1686 + .ops = &clk_branch2_ops, 1687 + }, 1688 + }, 1689 + }; 1690 + 1691 + static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = { 1692 + .halt_reg = 0x1b008, 1693 + .clkr = { 1694 + .enable_reg = 0x1b008, 1695 + .enable_mask = BIT(0), 1696 + .hw.init = &(struct clk_init_data){ 1697 + .name = "gcc_blsp1_qup2_i2c_apps_clk", 1698 + .parent_names = (const char *[]){ "blsp1_qup2_i2c_apps_clk_src" }, 1699 + .num_parents = 1, 1700 + .flags = CLK_SET_RATE_PARENT, 1701 + .ops = &clk_branch2_ops, 1702 + }, 1703 + }, 1704 + }; 1705 + 1706 + static struct clk_branch gcc_blsp1_uart2_apps_clk = { 1707 + .halt_reg = 0x1c004, 1708 + .clkr = { 1709 + .enable_reg = 0x1c004, 1710 + .enable_mask = BIT(0), 1711 + .hw.init = &(struct clk_init_data){ 1712 + .name = "gcc_blsp1_uart2_apps_clk", 1713 + .parent_names = (const char *[]){ "blsp1_uart2_apps_clk_src" }, 1714 + .num_parents = 1, 1715 + .flags = CLK_SET_RATE_PARENT, 1716 + .ops = &clk_branch2_ops, 1717 + }, 1718 + }, 1719 + }; 1720 + 1721 + static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = { 1722 + .halt_reg = 0x1d004, 1723 + .clkr = { 1724 + .enable_reg = 0x1d004, 1725 + .enable_mask = BIT(0), 1726 + .hw.init = &(struct clk_init_data){ 1727 + .name = "gcc_blsp1_qup3_spi_apps_clk", 1728 + .parent_names = (const char *[]){ "blsp1_qup3_spi_apps_clk_src" }, 1729 + .num_parents = 1, 1730 + .flags = CLK_SET_RATE_PARENT, 1731 + .ops = &clk_branch2_ops, 1732 + }, 1733 + }, 1734 + }; 1735 + 1736 + static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = { 1737 + .halt_reg = 0x1d008, 1738 + .clkr = { 1739 + .enable_reg = 0x1d008, 1740 + .enable_mask = BIT(0), 1741 + .hw.init = &(struct clk_init_data){ 1742 + .name = "gcc_blsp1_qup3_i2c_apps_clk", 1743 + .parent_names = (const char *[]){ "blsp1_qup3_i2c_apps_clk_src" }, 1744 + .num_parents = 1, 1745 + .flags = CLK_SET_RATE_PARENT, 1746 + .ops = &clk_branch2_ops, 1747 + }, 1748 + }, 1749 + }; 1750 + 1751 + static struct clk_branch gcc_blsp1_uart3_apps_clk = { 1752 + .halt_reg = 0x1e004, 1753 + .clkr = { 1754 + .enable_reg = 0x1e004, 1755 + .enable_mask = BIT(0), 1756 + .hw.init = &(struct clk_init_data){ 1757 + .name = "gcc_blsp1_uart3_apps_clk", 1758 + .parent_names = (const char *[]){ "blsp1_uart3_apps_clk_src" }, 1759 + .num_parents = 1, 1760 + .flags = CLK_SET_RATE_PARENT, 1761 + .ops = &clk_branch2_ops, 1762 + }, 1763 + }, 1764 + }; 1765 + 1766 + static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = { 1767 + .halt_reg = 0x1f004, 1768 + .clkr = { 1769 + .enable_reg = 0x1f004, 1770 + .enable_mask = BIT(0), 1771 + .hw.init = &(struct clk_init_data){ 1772 + .name = "gcc_blsp1_qup4_spi_apps_clk", 1773 + .parent_names = (const char *[]){ "blsp1_qup4_spi_apps_clk_src" }, 1774 + .num_parents = 1, 1775 + .flags = CLK_SET_RATE_PARENT, 1776 + .ops = &clk_branch2_ops, 1777 + }, 1778 + }, 1779 + }; 1780 + 1781 + static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = { 1782 + .halt_reg = 0x1f008, 1783 + .clkr = { 1784 + .enable_reg = 0x1f008, 1785 + .enable_mask = BIT(0), 1786 + .hw.init = &(struct clk_init_data){ 1787 + .name = "gcc_blsp1_qup4_i2c_apps_clk", 1788 + .parent_names = (const char *[]){ "blsp1_qup4_i2c_apps_clk_src" }, 1789 + .num_parents = 1, 1790 + .flags = CLK_SET_RATE_PARENT, 1791 + .ops = &clk_branch2_ops, 1792 + }, 1793 + }, 1794 + }; 1795 + 1796 + static struct clk_branch gcc_blsp1_uart4_apps_clk = { 1797 + .halt_reg = 0x20004, 1798 + .clkr = { 1799 + .enable_reg = 0x20004, 1800 + .enable_mask = BIT(0), 1801 + .hw.init = &(struct clk_init_data){ 1802 + .name = "gcc_blsp1_uart4_apps_clk", 1803 + .parent_names = (const char *[]){ "blsp1_uart4_apps_clk_src" }, 1804 + .num_parents = 1, 1805 + .flags = CLK_SET_RATE_PARENT, 1806 + .ops = &clk_branch2_ops, 1807 + }, 1808 + }, 1809 + }; 1810 + 1811 + static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = { 1812 + .halt_reg = 0x21004, 1813 + .clkr = { 1814 + .enable_reg = 0x21004, 1815 + .enable_mask = BIT(0), 1816 + .hw.init = &(struct clk_init_data){ 1817 + .name = "gcc_blsp1_qup5_spi_apps_clk", 1818 + .parent_names = (const char *[]){ "blsp1_qup5_spi_apps_clk_src" }, 1819 + .num_parents = 1, 1820 + .flags = CLK_SET_RATE_PARENT, 1821 + .ops = &clk_branch2_ops, 1822 + }, 1823 + }, 1824 + }; 1825 + 1826 + static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = { 1827 + .halt_reg = 0x21008, 1828 + .clkr = { 1829 + .enable_reg = 0x21008, 1830 + .enable_mask = BIT(0), 1831 + .hw.init = &(struct clk_init_data){ 1832 + .name = "gcc_blsp1_qup5_i2c_apps_clk", 1833 + .parent_names = (const char *[]){ "blsp1_qup5_i2c_apps_clk_src" }, 1834 + .num_parents = 1, 1835 + .flags = CLK_SET_RATE_PARENT, 1836 + .ops = &clk_branch2_ops, 1837 + }, 1838 + }, 1839 + }; 1840 + 1841 + static struct clk_branch gcc_blsp1_uart5_apps_clk = { 1842 + .halt_reg = 0x22004, 1843 + .clkr = { 1844 + .enable_reg = 0x22004, 1845 + .enable_mask = BIT(0), 1846 + .hw.init = &(struct clk_init_data){ 1847 + .name = "gcc_blsp1_uart5_apps_clk", 1848 + .parent_names = (const char *[]){ "blsp1_uart5_apps_clk_src" }, 1849 + .num_parents = 1, 1850 + .flags = CLK_SET_RATE_PARENT, 1851 + .ops = &clk_branch2_ops, 1852 + }, 1853 + }, 1854 + }; 1855 + 1856 + static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = { 1857 + .halt_reg = 0x23004, 1858 + .clkr = { 1859 + .enable_reg = 0x23004, 1860 + .enable_mask = BIT(0), 1861 + .hw.init = &(struct clk_init_data){ 1862 + .name = "gcc_blsp1_qup6_spi_apps_clk", 1863 + .parent_names = (const char *[]){ "blsp1_qup6_spi_apps_clk_src" }, 1864 + .num_parents = 1, 1865 + .flags = CLK_SET_RATE_PARENT, 1866 + .ops = &clk_branch2_ops, 1867 + }, 1868 + }, 1869 + }; 1870 + 1871 + static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = { 1872 + .halt_reg = 0x23008, 1873 + .clkr = { 1874 + .enable_reg = 0x23008, 1875 + .enable_mask = BIT(0), 1876 + .hw.init = &(struct clk_init_data){ 1877 + .name = "gcc_blsp1_qup6_i2c_apps_clk", 1878 + .parent_names = (const char *[]){ "blsp1_qup6_i2c_apps_clk_src" }, 1879 + .num_parents = 1, 1880 + .flags = CLK_SET_RATE_PARENT, 1881 + .ops = &clk_branch2_ops, 1882 + }, 1883 + }, 1884 + }; 1885 + 1886 + static struct clk_branch gcc_blsp1_uart6_apps_clk = { 1887 + .halt_reg = 0x24004, 1888 + .clkr = { 1889 + .enable_reg = 0x24004, 1890 + .enable_mask = BIT(0), 1891 + .hw.init = &(struct clk_init_data){ 1892 + .name = "gcc_blsp1_uart6_apps_clk", 1893 + .parent_names = (const char *[]){ "blsp1_uart6_apps_clk_src" }, 1894 + .num_parents = 1, 1895 + .flags = CLK_SET_RATE_PARENT, 1896 + .ops = &clk_branch2_ops, 1897 + }, 1898 + }, 1899 + }; 1900 + 1901 + static struct clk_branch gcc_blsp2_ahb_clk = { 1902 + .halt_reg = 0x25004, 1903 + .halt_check = BRANCH_HALT_VOTED, 1904 + .clkr = { 1905 + .enable_reg = 0x52004, 1906 + .enable_mask = BIT(15), 1907 + .hw.init = &(struct clk_init_data){ 1908 + .name = "gcc_blsp2_ahb_clk", 1909 + .parent_names = (const char *[]){ "periph_noc_clk_src" }, 1910 + .num_parents = 1, 1911 + .flags = CLK_SET_RATE_PARENT, 1912 + .ops = &clk_branch2_ops, 1913 + }, 1914 + }, 1915 + }; 1916 + 1917 + static struct clk_branch gcc_blsp2_sleep_clk = { 1918 + .halt_reg = 0x25008, 1919 + .halt_check = BRANCH_HALT_VOTED, 1920 + .clkr = { 1921 + .enable_reg = 0x52004, 1922 + .enable_mask = BIT(14), 1923 + .hw.init = &(struct clk_init_data){ 1924 + .name = "gcc_blsp2_sleep_clk", 1925 + .parent_names = (const char *[]){ "gcc_sleep_clk_src" }, 1926 + .num_parents = 1, 1927 + .flags = CLK_SET_RATE_PARENT, 1928 + .ops = &clk_branch2_ops, 1929 + }, 1930 + }, 1931 + }; 1932 + 1933 + static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = { 1934 + .halt_reg = 0x26004, 1935 + .clkr = { 1936 + .enable_reg = 0x26004, 1937 + .enable_mask = BIT(0), 1938 + .hw.init = &(struct clk_init_data){ 1939 + .name = "gcc_blsp2_qup1_spi_apps_clk", 1940 + .parent_names = (const char *[]){ "blsp2_qup1_spi_apps_clk_src" }, 1941 + .num_parents = 1, 1942 + .flags = CLK_SET_RATE_PARENT, 1943 + .ops = &clk_branch2_ops, 1944 + }, 1945 + }, 1946 + }; 1947 + 1948 + static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = { 1949 + .halt_reg = 0x26008, 1950 + .clkr = { 1951 + .enable_reg = 0x26008, 1952 + .enable_mask = BIT(0), 1953 + .hw.init = &(struct clk_init_data){ 1954 + .name = "gcc_blsp2_qup1_i2c_apps_clk", 1955 + .parent_names = (const char *[]){ "blsp2_qup1_i2c_apps_clk_src" }, 1956 + .num_parents = 1, 1957 + .flags = CLK_SET_RATE_PARENT, 1958 + .ops = &clk_branch2_ops, 1959 + }, 1960 + }, 1961 + }; 1962 + 1963 + static struct clk_branch gcc_blsp2_uart1_apps_clk = { 1964 + .halt_reg = 0x27004, 1965 + .clkr = { 1966 + .enable_reg = 0x27004, 1967 + .enable_mask = BIT(0), 1968 + .hw.init = &(struct clk_init_data){ 1969 + .name = "gcc_blsp2_uart1_apps_clk", 1970 + .parent_names = (const char *[]){ "blsp2_uart1_apps_clk_src" }, 1971 + .num_parents = 1, 1972 + .flags = CLK_SET_RATE_PARENT, 1973 + .ops = &clk_branch2_ops, 1974 + }, 1975 + }, 1976 + }; 1977 + 1978 + static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = { 1979 + .halt_reg = 0x28004, 1980 + .clkr = { 1981 + .enable_reg = 0x28004, 1982 + .enable_mask = BIT(0), 1983 + .hw.init = &(struct clk_init_data){ 1984 + .name = "gcc_blsp2_qup2_spi_apps_clk", 1985 + .parent_names = (const char *[]){ "blsp2_qup2_spi_apps_clk_src" }, 1986 + .num_parents = 1, 1987 + .flags = CLK_SET_RATE_PARENT, 1988 + .ops = &clk_branch2_ops, 1989 + }, 1990 + }, 1991 + }; 1992 + 1993 + static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = { 1994 + .halt_reg = 0x28008, 1995 + .clkr = { 1996 + .enable_reg = 0x28008, 1997 + .enable_mask = BIT(0), 1998 + .hw.init = &(struct clk_init_data){ 1999 + .name = "gcc_blsp2_qup2_i2c_apps_clk", 2000 + .parent_names = (const char *[]){ "blsp2_qup2_i2c_apps_clk_src" }, 2001 + .num_parents = 1, 2002 + .flags = CLK_SET_RATE_PARENT, 2003 + .ops = &clk_branch2_ops, 2004 + }, 2005 + }, 2006 + }; 2007 + 2008 + static struct clk_branch gcc_blsp2_uart2_apps_clk = { 2009 + .halt_reg = 0x29004, 2010 + .clkr = { 2011 + .enable_reg = 0x29004, 2012 + .enable_mask = BIT(0), 2013 + .hw.init = &(struct clk_init_data){ 2014 + .name = "gcc_blsp2_uart2_apps_clk", 2015 + .parent_names = (const char *[]){ "blsp2_uart2_apps_clk_src" }, 2016 + .num_parents = 1, 2017 + .flags = CLK_SET_RATE_PARENT, 2018 + .ops = &clk_branch2_ops, 2019 + }, 2020 + }, 2021 + }; 2022 + 2023 + static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = { 2024 + .halt_reg = 0x2a004, 2025 + .clkr = { 2026 + .enable_reg = 0x2a004, 2027 + .enable_mask = BIT(0), 2028 + .hw.init = &(struct clk_init_data){ 2029 + .name = "gcc_blsp2_qup3_spi_apps_clk", 2030 + .parent_names = (const char *[]){ "blsp2_qup3_spi_apps_clk_src" }, 2031 + .num_parents = 1, 2032 + .flags = CLK_SET_RATE_PARENT, 2033 + .ops = &clk_branch2_ops, 2034 + }, 2035 + }, 2036 + }; 2037 + 2038 + static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = { 2039 + .halt_reg = 0x2a008, 2040 + .clkr = { 2041 + .enable_reg = 0x2a008, 2042 + .enable_mask = BIT(0), 2043 + .hw.init = &(struct clk_init_data){ 2044 + .name = "gcc_blsp2_qup3_i2c_apps_clk", 2045 + .parent_names = (const char *[]){ "blsp2_qup3_i2c_apps_clk_src" }, 2046 + .num_parents = 1, 2047 + .flags = CLK_SET_RATE_PARENT, 2048 + .ops = &clk_branch2_ops, 2049 + }, 2050 + }, 2051 + }; 2052 + 2053 + static struct clk_branch gcc_blsp2_uart3_apps_clk = { 2054 + .halt_reg = 0x2b004, 2055 + .clkr = { 2056 + .enable_reg = 0x2b004, 2057 + .enable_mask = BIT(0), 2058 + .hw.init = &(struct clk_init_data){ 2059 + .name = "gcc_blsp2_uart3_apps_clk", 2060 + .parent_names = (const char *[]){ "blsp2_uart3_apps_clk_src" }, 2061 + .num_parents = 1, 2062 + .flags = CLK_SET_RATE_PARENT, 2063 + .ops = &clk_branch2_ops, 2064 + }, 2065 + }, 2066 + }; 2067 + 2068 + static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = { 2069 + .halt_reg = 0x2c004, 2070 + .clkr = { 2071 + .enable_reg = 0x2c004, 2072 + .enable_mask = BIT(0), 2073 + .hw.init = &(struct clk_init_data){ 2074 + .name = "gcc_blsp2_qup4_spi_apps_clk", 2075 + .parent_names = (const char *[]){ "blsp2_qup4_spi_apps_clk_src" }, 2076 + .num_parents = 1, 2077 + .flags = CLK_SET_RATE_PARENT, 2078 + .ops = &clk_branch2_ops, 2079 + }, 2080 + }, 2081 + }; 2082 + 2083 + static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = { 2084 + .halt_reg = 0x2c008, 2085 + .clkr = { 2086 + .enable_reg = 0x2c008, 2087 + .enable_mask = BIT(0), 2088 + .hw.init = &(struct clk_init_data){ 2089 + .name = "gcc_blsp2_qup4_i2c_apps_clk", 2090 + .parent_names = (const char *[]){ "blsp2_qup4_i2c_apps_clk_src" }, 2091 + .num_parents = 1, 2092 + .flags = CLK_SET_RATE_PARENT, 2093 + .ops = &clk_branch2_ops, 2094 + }, 2095 + }, 2096 + }; 2097 + 2098 + static struct clk_branch gcc_blsp2_uart4_apps_clk = { 2099 + .halt_reg = 0x2d004, 2100 + .clkr = { 2101 + .enable_reg = 0x2d004, 2102 + .enable_mask = BIT(0), 2103 + .hw.init = &(struct clk_init_data){ 2104 + .name = "gcc_blsp2_uart4_apps_clk", 2105 + .parent_names = (const char *[]){ "blsp2_uart4_apps_clk_src" }, 2106 + .num_parents = 1, 2107 + .flags = CLK_SET_RATE_PARENT, 2108 + .ops = &clk_branch2_ops, 2109 + }, 2110 + }, 2111 + }; 2112 + 2113 + static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = { 2114 + .halt_reg = 0x2e004, 2115 + .clkr = { 2116 + .enable_reg = 0x2e004, 2117 + .enable_mask = BIT(0), 2118 + .hw.init = &(struct clk_init_data){ 2119 + .name = "gcc_blsp2_qup5_spi_apps_clk", 2120 + .parent_names = (const char *[]){ "blsp2_qup5_spi_apps_clk_src" }, 2121 + .num_parents = 1, 2122 + .flags = CLK_SET_RATE_PARENT, 2123 + .ops = &clk_branch2_ops, 2124 + }, 2125 + }, 2126 + }; 2127 + 2128 + static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = { 2129 + .halt_reg = 0x2e008, 2130 + .clkr = { 2131 + .enable_reg = 0x2e008, 2132 + .enable_mask = BIT(0), 2133 + .hw.init = &(struct clk_init_data){ 2134 + .name = "gcc_blsp2_qup5_i2c_apps_clk", 2135 + .parent_names = (const char *[]){ "blsp2_qup5_i2c_apps_clk_src" }, 2136 + .num_parents = 1, 2137 + .flags = CLK_SET_RATE_PARENT, 2138 + .ops = &clk_branch2_ops, 2139 + }, 2140 + }, 2141 + }; 2142 + 2143 + static struct clk_branch gcc_blsp2_uart5_apps_clk = { 2144 + .halt_reg = 0x2f004, 2145 + .clkr = { 2146 + .enable_reg = 0x2f004, 2147 + .enable_mask = BIT(0), 2148 + .hw.init = &(struct clk_init_data){ 2149 + .name = "gcc_blsp2_uart5_apps_clk", 2150 + .parent_names = (const char *[]){ "blsp2_uart5_apps_clk_src" }, 2151 + .num_parents = 1, 2152 + .flags = CLK_SET_RATE_PARENT, 2153 + .ops = &clk_branch2_ops, 2154 + }, 2155 + }, 2156 + }; 2157 + 2158 + static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = { 2159 + .halt_reg = 0x30004, 2160 + .clkr = { 2161 + .enable_reg = 0x30004, 2162 + .enable_mask = BIT(0), 2163 + .hw.init = &(struct clk_init_data){ 2164 + .name = "gcc_blsp2_qup6_spi_apps_clk", 2165 + .parent_names = (const char *[]){ "blsp2_qup6_spi_apps_clk_src" }, 2166 + .num_parents = 1, 2167 + .flags = CLK_SET_RATE_PARENT, 2168 + .ops = &clk_branch2_ops, 2169 + }, 2170 + }, 2171 + }; 2172 + 2173 + static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = { 2174 + .halt_reg = 0x30008, 2175 + .clkr = { 2176 + .enable_reg = 0x30008, 2177 + .enable_mask = BIT(0), 2178 + .hw.init = &(struct clk_init_data){ 2179 + .name = "gcc_blsp2_qup6_i2c_apps_clk", 2180 + .parent_names = (const char *[]){ "blsp2_qup6_i2c_apps_clk_src" }, 2181 + .num_parents = 1, 2182 + .flags = CLK_SET_RATE_PARENT, 2183 + .ops = &clk_branch2_ops, 2184 + }, 2185 + }, 2186 + }; 2187 + 2188 + static struct clk_branch gcc_blsp2_uart6_apps_clk = { 2189 + .halt_reg = 0x31004, 2190 + .clkr = { 2191 + .enable_reg = 0x31004, 2192 + .enable_mask = BIT(0), 2193 + .hw.init = &(struct clk_init_data){ 2194 + .name = "gcc_blsp2_uart6_apps_clk", 2195 + .parent_names = (const char *[]){ "blsp2_uart6_apps_clk_src" }, 2196 + .num_parents = 1, 2197 + .flags = CLK_SET_RATE_PARENT, 2198 + .ops = &clk_branch2_ops, 2199 + }, 2200 + }, 2201 + }; 2202 + 2203 + static struct clk_branch gcc_pdm_ahb_clk = { 2204 + .halt_reg = 0x33004, 2205 + .clkr = { 2206 + .enable_reg = 0x33004, 2207 + .enable_mask = BIT(0), 2208 + .hw.init = &(struct clk_init_data){ 2209 + .name = "gcc_pdm_ahb_clk", 2210 + .parent_names = (const char *[]){ "periph_noc_clk_src" }, 2211 + .num_parents = 1, 2212 + .flags = CLK_SET_RATE_PARENT, 2213 + .ops = &clk_branch2_ops, 2214 + }, 2215 + }, 2216 + }; 2217 + 2218 + static struct clk_branch gcc_pdm2_clk = { 2219 + .halt_reg = 0x3300c, 2220 + .clkr = { 2221 + .enable_reg = 0x3300c, 2222 + .enable_mask = BIT(0), 2223 + .hw.init = &(struct clk_init_data){ 2224 + .name = "gcc_pdm2_clk", 2225 + .parent_names = (const char *[]){ "pdm2_clk_src" }, 2226 + .num_parents = 1, 2227 + .flags = CLK_SET_RATE_PARENT, 2228 + .ops = &clk_branch2_ops, 2229 + }, 2230 + }, 2231 + }; 2232 + 2233 + static struct clk_branch gcc_prng_ahb_clk = { 2234 + .halt_reg = 0x34004, 2235 + .halt_check = BRANCH_HALT_VOTED, 2236 + .clkr = { 2237 + .enable_reg = 0x52004, 2238 + .enable_mask = BIT(13), 2239 + .hw.init = &(struct clk_init_data){ 2240 + .name = "gcc_prng_ahb_clk", 2241 + .parent_names = (const char *[]){ "config_noc_clk_src" }, 2242 + .num_parents = 1, 2243 + .flags = CLK_SET_RATE_PARENT, 2244 + .ops = &clk_branch2_ops, 2245 + }, 2246 + }, 2247 + }; 2248 + 2249 + static struct clk_branch gcc_tsif_ahb_clk = { 2250 + .halt_reg = 0x36004, 2251 + .clkr = { 2252 + .enable_reg = 0x36004, 2253 + .enable_mask = BIT(0), 2254 + .hw.init = &(struct clk_init_data){ 2255 + .name = "gcc_tsif_ahb_clk", 2256 + .parent_names = (const char *[]){ "periph_noc_clk_src" }, 2257 + .num_parents = 1, 2258 + .flags = CLK_SET_RATE_PARENT, 2259 + .ops = &clk_branch2_ops, 2260 + }, 2261 + }, 2262 + }; 2263 + 2264 + static struct clk_branch gcc_tsif_ref_clk = { 2265 + .halt_reg = 0x36008, 2266 + .clkr = { 2267 + .enable_reg = 0x36008, 2268 + .enable_mask = BIT(0), 2269 + .hw.init = &(struct clk_init_data){ 2270 + .name = "gcc_tsif_ref_clk", 2271 + .parent_names = (const char *[]){ "tsif_ref_clk_src" }, 2272 + .num_parents = 1, 2273 + .flags = CLK_SET_RATE_PARENT, 2274 + .ops = &clk_branch2_ops, 2275 + }, 2276 + }, 2277 + }; 2278 + 2279 + static struct clk_branch gcc_tsif_inactivity_timers_clk = { 2280 + .halt_reg = 0x3600c, 2281 + .clkr = { 2282 + .enable_reg = 0x3600c, 2283 + .enable_mask = BIT(0), 2284 + .hw.init = &(struct clk_init_data){ 2285 + .name = "gcc_tsif_inactivity_timers_clk", 2286 + .parent_names = (const char *[]){ "gcc_sleep_clk_src" }, 2287 + .num_parents = 1, 2288 + .flags = CLK_SET_RATE_PARENT, 2289 + .ops = &clk_branch2_ops, 2290 + }, 2291 + }, 2292 + }; 2293 + 2294 + static struct clk_branch gcc_boot_rom_ahb_clk = { 2295 + .halt_reg = 0x38004, 2296 + .halt_check = BRANCH_HALT_VOTED, 2297 + .clkr = { 2298 + .enable_reg = 0x52004, 2299 + .enable_mask = BIT(10), 2300 + .hw.init = &(struct clk_init_data){ 2301 + .name = "gcc_boot_rom_ahb_clk", 2302 + .parent_names = (const char *[]){ "config_noc_clk_src" }, 2303 + .num_parents = 1, 2304 + .flags = CLK_SET_RATE_PARENT, 2305 + .ops = &clk_branch2_ops, 2306 + }, 2307 + }, 2308 + }; 2309 + 2310 + static struct clk_branch gcc_bimc_gfx_clk = { 2311 + .halt_reg = 0x46018, 2312 + .clkr = { 2313 + .enable_reg = 0x46018, 2314 + .enable_mask = BIT(0), 2315 + .hw.init = &(struct clk_init_data){ 2316 + .name = "gcc_bimc_gfx_clk", 2317 + .flags = CLK_SET_RATE_PARENT | CLK_IS_ROOT, 2318 + .ops = &clk_branch2_ops, 2319 + }, 2320 + }, 2321 + }; 2322 + 2323 + static struct clk_branch gcc_hmss_rbcpr_clk = { 2324 + .halt_reg = 0x4800c, 2325 + .clkr = { 2326 + .enable_reg = 0x4800c, 2327 + .enable_mask = BIT(0), 2328 + .hw.init = &(struct clk_init_data){ 2329 + .name = "gcc_hmss_rbcpr_clk", 2330 + .parent_names = (const char *[]){ "hmss_rbcpr_clk_src" }, 2331 + .num_parents = 1, 2332 + .flags = CLK_SET_RATE_PARENT, 2333 + .ops = &clk_branch2_ops, 2334 + }, 2335 + }, 2336 + }; 2337 + 2338 + static struct clk_branch gcc_gp1_clk = { 2339 + .halt_reg = 0x64000, 2340 + .clkr = { 2341 + .enable_reg = 0x64000, 2342 + .enable_mask = BIT(0), 2343 + .hw.init = &(struct clk_init_data){ 2344 + .name = "gcc_gp1_clk", 2345 + .parent_names = (const char *[]){ "gp1_clk_src" }, 2346 + .num_parents = 1, 2347 + .flags = CLK_SET_RATE_PARENT, 2348 + .ops = &clk_branch2_ops, 2349 + }, 2350 + }, 2351 + }; 2352 + 2353 + static struct clk_branch gcc_gp2_clk = { 2354 + .halt_reg = 0x65000, 2355 + .clkr = { 2356 + .enable_reg = 0x65000, 2357 + .enable_mask = BIT(0), 2358 + .hw.init = &(struct clk_init_data){ 2359 + .name = "gcc_gp2_clk", 2360 + .parent_names = (const char *[]){ "gp2_clk_src" }, 2361 + .num_parents = 1, 2362 + .flags = CLK_SET_RATE_PARENT, 2363 + .ops = &clk_branch2_ops, 2364 + }, 2365 + }, 2366 + }; 2367 + 2368 + static struct clk_branch gcc_gp3_clk = { 2369 + .halt_reg = 0x66000, 2370 + .clkr = { 2371 + .enable_reg = 0x66000, 2372 + .enable_mask = BIT(0), 2373 + .hw.init = &(struct clk_init_data){ 2374 + .name = "gcc_gp3_clk", 2375 + .parent_names = (const char *[]){ "gp3_clk_src" }, 2376 + .num_parents = 1, 2377 + .flags = CLK_SET_RATE_PARENT, 2378 + .ops = &clk_branch2_ops, 2379 + }, 2380 + }, 2381 + }; 2382 + 2383 + static struct clk_branch gcc_pcie_0_slv_axi_clk = { 2384 + .halt_reg = 0x6b008, 2385 + .clkr = { 2386 + .enable_reg = 0x6b008, 2387 + .enable_mask = BIT(0), 2388 + .hw.init = &(struct clk_init_data){ 2389 + .name = "gcc_pcie_0_slv_axi_clk", 2390 + .parent_names = (const char *[]){ "system_noc_clk_src" }, 2391 + .num_parents = 1, 2392 + .flags = CLK_SET_RATE_PARENT, 2393 + .ops = &clk_branch2_ops, 2394 + }, 2395 + }, 2396 + }; 2397 + 2398 + static struct clk_branch gcc_pcie_0_mstr_axi_clk = { 2399 + .halt_reg = 0x6b00c, 2400 + .clkr = { 2401 + .enable_reg = 0x6b00c, 2402 + .enable_mask = BIT(0), 2403 + .hw.init = &(struct clk_init_data){ 2404 + .name = "gcc_pcie_0_mstr_axi_clk", 2405 + .parent_names = (const char *[]){ "system_noc_clk_src" }, 2406 + .num_parents = 1, 2407 + .flags = CLK_SET_RATE_PARENT, 2408 + .ops = &clk_branch2_ops, 2409 + }, 2410 + }, 2411 + }; 2412 + 2413 + static struct clk_branch gcc_pcie_0_cfg_ahb_clk = { 2414 + .halt_reg = 0x6b010, 2415 + .clkr = { 2416 + .enable_reg = 0x6b010, 2417 + .enable_mask = BIT(0), 2418 + .hw.init = &(struct clk_init_data){ 2419 + .name = "gcc_pcie_0_cfg_ahb_clk", 2420 + .parent_names = (const char *[]){ "config_noc_clk_src" }, 2421 + .num_parents = 1, 2422 + .flags = CLK_SET_RATE_PARENT, 2423 + .ops = &clk_branch2_ops, 2424 + }, 2425 + }, 2426 + }; 2427 + 2428 + static struct clk_branch gcc_pcie_0_aux_clk = { 2429 + .halt_reg = 0x6b014, 2430 + .clkr = { 2431 + .enable_reg = 0x6b014, 2432 + .enable_mask = BIT(0), 2433 + .hw.init = &(struct clk_init_data){ 2434 + .name = "gcc_pcie_0_aux_clk", 2435 + .parent_names = (const char *[]){ "pcie_aux_clk_src" }, 2436 + .num_parents = 1, 2437 + .flags = CLK_SET_RATE_PARENT, 2438 + .ops = &clk_branch2_ops, 2439 + }, 2440 + }, 2441 + }; 2442 + 2443 + static struct clk_branch gcc_pcie_0_pipe_clk = { 2444 + .halt_reg = 0x6b018, 2445 + .clkr = { 2446 + .enable_reg = 0x6b018, 2447 + .enable_mask = BIT(0), 2448 + .hw.init = &(struct clk_init_data){ 2449 + .name = "gcc_pcie_0_pipe_clk", 2450 + .parent_names = (const char *[]){ "pcie_0_pipe_clk_src" }, 2451 + .num_parents = 1, 2452 + .flags = CLK_SET_RATE_PARENT, 2453 + .ops = &clk_branch2_ops, 2454 + }, 2455 + }, 2456 + }; 2457 + 2458 + static struct clk_branch gcc_pcie_1_slv_axi_clk = { 2459 + .halt_reg = 0x6d008, 2460 + .clkr = { 2461 + .enable_reg = 0x6d008, 2462 + .enable_mask = BIT(0), 2463 + .hw.init = &(struct clk_init_data){ 2464 + .name = "gcc_pcie_1_slv_axi_clk", 2465 + .parent_names = (const char *[]){ "system_noc_clk_src" }, 2466 + .num_parents = 1, 2467 + .flags = CLK_SET_RATE_PARENT, 2468 + .ops = &clk_branch2_ops, 2469 + }, 2470 + }, 2471 + }; 2472 + 2473 + static struct clk_branch gcc_pcie_1_mstr_axi_clk = { 2474 + .halt_reg = 0x6d00c, 2475 + .clkr = { 2476 + .enable_reg = 0x6d00c, 2477 + .enable_mask = BIT(0), 2478 + .hw.init = &(struct clk_init_data){ 2479 + .name = "gcc_pcie_1_mstr_axi_clk", 2480 + .parent_names = (const char *[]){ "system_noc_clk_src" }, 2481 + .num_parents = 1, 2482 + .flags = CLK_SET_RATE_PARENT, 2483 + .ops = &clk_branch2_ops, 2484 + }, 2485 + }, 2486 + }; 2487 + 2488 + static struct clk_branch gcc_pcie_1_cfg_ahb_clk = { 2489 + .halt_reg = 0x6d010, 2490 + .clkr = { 2491 + .enable_reg = 0x6d010, 2492 + .enable_mask = BIT(0), 2493 + .hw.init = &(struct clk_init_data){ 2494 + .name = "gcc_pcie_1_cfg_ahb_clk", 2495 + .parent_names = (const char *[]){ "config_noc_clk_src" }, 2496 + .num_parents = 1, 2497 + .flags = CLK_SET_RATE_PARENT, 2498 + .ops = &clk_branch2_ops, 2499 + }, 2500 + }, 2501 + }; 2502 + 2503 + static struct clk_branch gcc_pcie_1_aux_clk = { 2504 + .halt_reg = 0x6d014, 2505 + .clkr = { 2506 + .enable_reg = 0x6d014, 2507 + .enable_mask = BIT(0), 2508 + .hw.init = &(struct clk_init_data){ 2509 + .name = "gcc_pcie_1_aux_clk", 2510 + .parent_names = (const char *[]){ "pcie_aux_clk_src" }, 2511 + .num_parents = 1, 2512 + .flags = CLK_SET_RATE_PARENT, 2513 + .ops = &clk_branch2_ops, 2514 + }, 2515 + }, 2516 + }; 2517 + 2518 + static struct clk_branch gcc_pcie_1_pipe_clk = { 2519 + .halt_reg = 0x6d018, 2520 + .clkr = { 2521 + .enable_reg = 0x6d018, 2522 + .enable_mask = BIT(0), 2523 + .hw.init = &(struct clk_init_data){ 2524 + .name = "gcc_pcie_1_pipe_clk", 2525 + .parent_names = (const char *[]){ "pcie_1_pipe_clk_src" }, 2526 + .num_parents = 1, 2527 + .flags = CLK_SET_RATE_PARENT, 2528 + .ops = &clk_branch2_ops, 2529 + }, 2530 + }, 2531 + }; 2532 + 2533 + static struct clk_branch gcc_pcie_2_slv_axi_clk = { 2534 + .halt_reg = 0x6e008, 2535 + .clkr = { 2536 + .enable_reg = 0x6e008, 2537 + .enable_mask = BIT(0), 2538 + .hw.init = &(struct clk_init_data){ 2539 + .name = "gcc_pcie_2_slv_axi_clk", 2540 + .parent_names = (const char *[]){ "system_noc_clk_src" }, 2541 + .num_parents = 1, 2542 + .flags = CLK_SET_RATE_PARENT, 2543 + .ops = &clk_branch2_ops, 2544 + }, 2545 + }, 2546 + }; 2547 + 2548 + static struct clk_branch gcc_pcie_2_mstr_axi_clk = { 2549 + .halt_reg = 0x6e00c, 2550 + .clkr = { 2551 + .enable_reg = 0x6e00c, 2552 + .enable_mask = BIT(0), 2553 + .hw.init = &(struct clk_init_data){ 2554 + .name = "gcc_pcie_2_mstr_axi_clk", 2555 + .parent_names = (const char *[]){ "system_noc_clk_src" }, 2556 + .num_parents = 1, 2557 + .flags = CLK_SET_RATE_PARENT, 2558 + .ops = &clk_branch2_ops, 2559 + }, 2560 + }, 2561 + }; 2562 + 2563 + static struct clk_branch gcc_pcie_2_cfg_ahb_clk = { 2564 + .halt_reg = 0x6e010, 2565 + .clkr = { 2566 + .enable_reg = 0x6e010, 2567 + .enable_mask = BIT(0), 2568 + .hw.init = &(struct clk_init_data){ 2569 + .name = "gcc_pcie_2_cfg_ahb_clk", 2570 + .parent_names = (const char *[]){ "config_noc_clk_src" }, 2571 + .num_parents = 1, 2572 + .flags = CLK_SET_RATE_PARENT, 2573 + .ops = &clk_branch2_ops, 2574 + }, 2575 + }, 2576 + }; 2577 + 2578 + static struct clk_branch gcc_pcie_2_aux_clk = { 2579 + .halt_reg = 0x6e014, 2580 + .clkr = { 2581 + .enable_reg = 0x6e014, 2582 + .enable_mask = BIT(0), 2583 + .hw.init = &(struct clk_init_data){ 2584 + .name = "gcc_pcie_2_aux_clk", 2585 + .parent_names = (const char *[]){ "pcie_aux_clk_src" }, 2586 + .num_parents = 1, 2587 + .flags = CLK_SET_RATE_PARENT, 2588 + .ops = &clk_branch2_ops, 2589 + }, 2590 + }, 2591 + }; 2592 + 2593 + static struct clk_branch gcc_pcie_2_pipe_clk = { 2594 + .halt_reg = 0x6e108, 2595 + .clkr = { 2596 + .enable_reg = 0x6e108, 2597 + .enable_mask = BIT(0), 2598 + .hw.init = &(struct clk_init_data){ 2599 + .name = "gcc_pcie_2_pipe_clk", 2600 + .parent_names = (const char *[]){ "pcie_2_pipe_clk_src" }, 2601 + .num_parents = 1, 2602 + .flags = CLK_SET_RATE_PARENT, 2603 + .ops = &clk_branch2_ops, 2604 + }, 2605 + }, 2606 + }; 2607 + 2608 + static struct clk_branch gcc_pcie_phy_cfg_ahb_clk = { 2609 + .halt_reg = 0x6f004, 2610 + .clkr = { 2611 + .enable_reg = 0x6f004, 2612 + .enable_mask = BIT(0), 2613 + .hw.init = &(struct clk_init_data){ 2614 + .name = "gcc_pcie_phy_cfg_ahb_clk", 2615 + .parent_names = (const char *[]){ "config_noc_clk_src" }, 2616 + .num_parents = 1, 2617 + .flags = CLK_SET_RATE_PARENT, 2618 + .ops = &clk_branch2_ops, 2619 + }, 2620 + }, 2621 + }; 2622 + 2623 + static struct clk_branch gcc_pcie_phy_aux_clk = { 2624 + .halt_reg = 0x6f008, 2625 + .clkr = { 2626 + .enable_reg = 0x6f008, 2627 + .enable_mask = BIT(0), 2628 + .hw.init = &(struct clk_init_data){ 2629 + .name = "gcc_pcie_phy_aux_clk", 2630 + .parent_names = (const char *[]){ "pcie_aux_clk_src" }, 2631 + .num_parents = 1, 2632 + .flags = CLK_SET_RATE_PARENT, 2633 + .ops = &clk_branch2_ops, 2634 + }, 2635 + }, 2636 + }; 2637 + 2638 + static struct clk_branch gcc_ufs_axi_clk = { 2639 + .halt_reg = 0x75008, 2640 + .clkr = { 2641 + .enable_reg = 0x75008, 2642 + .enable_mask = BIT(0), 2643 + .hw.init = &(struct clk_init_data){ 2644 + .name = "gcc_ufs_axi_clk", 2645 + .parent_names = (const char *[]){ "ufs_axi_clk_src" }, 2646 + .num_parents = 1, 2647 + .flags = CLK_SET_RATE_PARENT, 2648 + .ops = &clk_branch2_ops, 2649 + }, 2650 + }, 2651 + }; 2652 + 2653 + static struct clk_branch gcc_ufs_ahb_clk = { 2654 + .halt_reg = 0x7500c, 2655 + .clkr = { 2656 + .enable_reg = 0x7500c, 2657 + .enable_mask = BIT(0), 2658 + .hw.init = &(struct clk_init_data){ 2659 + .name = "gcc_ufs_ahb_clk", 2660 + .parent_names = (const char *[]){ "config_noc_clk_src" }, 2661 + .num_parents = 1, 2662 + .flags = CLK_SET_RATE_PARENT, 2663 + .ops = &clk_branch2_ops, 2664 + }, 2665 + }, 2666 + }; 2667 + 2668 + static struct clk_fixed_factor ufs_tx_cfg_clk_src = { 2669 + .mult = 1, 2670 + .div = 16, 2671 + .hw.init = &(struct clk_init_data){ 2672 + .name = "ufs_tx_cfg_clk_src", 2673 + .parent_names = (const char *[]){ "ufs_axi_clk_src" }, 2674 + .num_parents = 1, 2675 + .flags = CLK_SET_RATE_PARENT, 2676 + .ops = &clk_fixed_factor_ops, 2677 + }, 2678 + }; 2679 + 2680 + static struct clk_branch gcc_ufs_tx_cfg_clk = { 2681 + .halt_reg = 0x75010, 2682 + .clkr = { 2683 + .enable_reg = 0x75010, 2684 + .enable_mask = BIT(0), 2685 + .hw.init = &(struct clk_init_data){ 2686 + .name = "gcc_ufs_tx_cfg_clk", 2687 + .parent_names = (const char *[]){ "ufs_tx_cfg_clk_src" }, 2688 + .num_parents = 1, 2689 + .flags = CLK_SET_RATE_PARENT, 2690 + .ops = &clk_branch2_ops, 2691 + }, 2692 + }, 2693 + }; 2694 + 2695 + static struct clk_fixed_factor ufs_rx_cfg_clk_src = { 2696 + .mult = 1, 2697 + .div = 16, 2698 + .hw.init = &(struct clk_init_data){ 2699 + .name = "ufs_rx_cfg_clk_src", 2700 + .parent_names = (const char *[]){ "ufs_axi_clk_src" }, 2701 + .num_parents = 1, 2702 + .flags = CLK_SET_RATE_PARENT, 2703 + .ops = &clk_fixed_factor_ops, 2704 + }, 2705 + }; 2706 + 2707 + static struct clk_branch gcc_ufs_rx_cfg_clk = { 2708 + .halt_reg = 0x75014, 2709 + .clkr = { 2710 + .enable_reg = 0x75014, 2711 + .enable_mask = BIT(0), 2712 + .hw.init = &(struct clk_init_data){ 2713 + .name = "gcc_ufs_rx_cfg_clk", 2714 + .parent_names = (const char *[]){ "ufs_rx_cfg_clk_src" }, 2715 + .num_parents = 1, 2716 + .flags = CLK_SET_RATE_PARENT, 2717 + .ops = &clk_branch2_ops, 2718 + }, 2719 + }, 2720 + }; 2721 + 2722 + static struct clk_branch gcc_ufs_tx_symbol_0_clk = { 2723 + .halt_reg = 0x75018, 2724 + .clkr = { 2725 + .enable_reg = 0x75018, 2726 + .enable_mask = BIT(0), 2727 + .hw.init = &(struct clk_init_data){ 2728 + .name = "gcc_ufs_tx_symbol_0_clk", 2729 + .parent_names = (const char *[]){ "ufs_tx_symbol_0_clk_src" }, 2730 + .num_parents = 1, 2731 + .flags = CLK_SET_RATE_PARENT, 2732 + .ops = &clk_branch2_ops, 2733 + }, 2734 + }, 2735 + }; 2736 + 2737 + static struct clk_branch gcc_ufs_rx_symbol_0_clk = { 2738 + .halt_reg = 0x7501c, 2739 + .clkr = { 2740 + .enable_reg = 0x7501c, 2741 + .enable_mask = BIT(0), 2742 + .hw.init = &(struct clk_init_data){ 2743 + .name = "gcc_ufs_rx_symbol_0_clk", 2744 + .parent_names = (const char *[]){ "ufs_rx_symbol_0_clk_src" }, 2745 + .num_parents = 1, 2746 + .flags = CLK_SET_RATE_PARENT, 2747 + .ops = &clk_branch2_ops, 2748 + }, 2749 + }, 2750 + }; 2751 + 2752 + static struct clk_branch gcc_ufs_rx_symbol_1_clk = { 2753 + .halt_reg = 0x75020, 2754 + .clkr = { 2755 + .enable_reg = 0x75020, 2756 + .enable_mask = BIT(0), 2757 + .hw.init = &(struct clk_init_data){ 2758 + .name = "gcc_ufs_rx_symbol_1_clk", 2759 + .parent_names = (const char *[]){ "ufs_rx_symbol_1_clk_src" }, 2760 + .num_parents = 1, 2761 + .flags = CLK_SET_RATE_PARENT, 2762 + .ops = &clk_branch2_ops, 2763 + }, 2764 + }, 2765 + }; 2766 + 2767 + static struct clk_fixed_factor ufs_ice_core_postdiv_clk_src = { 2768 + .mult = 1, 2769 + .div = 2, 2770 + .hw.init = &(struct clk_init_data){ 2771 + .name = "ufs_ice_core_postdiv_clk_src", 2772 + .parent_names = (const char *[]){ "ufs_ice_core_clk_src" }, 2773 + .num_parents = 1, 2774 + .flags = CLK_SET_RATE_PARENT, 2775 + .ops = &clk_fixed_factor_ops, 2776 + }, 2777 + }; 2778 + 2779 + static struct clk_branch gcc_ufs_unipro_core_clk = { 2780 + .halt_reg = 0x7600c, 2781 + .clkr = { 2782 + .enable_reg = 0x7600c, 2783 + .enable_mask = BIT(0), 2784 + .hw.init = &(struct clk_init_data){ 2785 + .name = "gcc_ufs_unipro_core_clk", 2786 + .parent_names = (const char *[]){ "ufs_ice_core_postdiv_clk_src" }, 2787 + .num_parents = 1, 2788 + .flags = CLK_SET_RATE_PARENT, 2789 + .ops = &clk_branch2_ops, 2790 + }, 2791 + }, 2792 + }; 2793 + 2794 + static struct clk_branch gcc_ufs_ice_core_clk = { 2795 + .halt_reg = 0x76010, 2796 + .clkr = { 2797 + .enable_reg = 0x76010, 2798 + .enable_mask = BIT(0), 2799 + .hw.init = &(struct clk_init_data){ 2800 + .name = "gcc_ufs_ice_core_clk", 2801 + .parent_names = (const char *[]){ "ufs_ice_core_clk_src" }, 2802 + .num_parents = 1, 2803 + .flags = CLK_SET_RATE_PARENT, 2804 + .ops = &clk_branch2_ops, 2805 + }, 2806 + }, 2807 + }; 2808 + 2809 + static struct clk_branch gcc_ufs_sys_clk_core_clk = { 2810 + .halt_check = BRANCH_HALT_DELAY, 2811 + .clkr = { 2812 + .enable_reg = 0x76030, 2813 + .enable_mask = BIT(0), 2814 + .hw.init = &(struct clk_init_data){ 2815 + .name = "gcc_ufs_sys_clk_core_clk", 2816 + .ops = &clk_branch2_ops, 2817 + .flags = CLK_IS_ROOT, 2818 + }, 2819 + }, 2820 + }; 2821 + 2822 + static struct clk_branch gcc_ufs_tx_symbol_clk_core_clk = { 2823 + .halt_check = BRANCH_HALT_DELAY, 2824 + .clkr = { 2825 + .enable_reg = 0x76034, 2826 + .enable_mask = BIT(0), 2827 + .hw.init = &(struct clk_init_data){ 2828 + .name = "gcc_ufs_tx_symbol_clk_core_clk", 2829 + .ops = &clk_branch2_ops, 2830 + .flags = CLK_IS_ROOT, 2831 + }, 2832 + }, 2833 + }; 2834 + 2835 + static struct clk_branch gcc_aggre0_snoc_axi_clk = { 2836 + .halt_reg = 0x81008, 2837 + .clkr = { 2838 + .enable_reg = 0x81008, 2839 + .enable_mask = BIT(0), 2840 + .hw.init = &(struct clk_init_data){ 2841 + .name = "gcc_aggre0_snoc_axi_clk", 2842 + .parent_names = (const char *[]){ "system_noc_clk_src" }, 2843 + .num_parents = 1, 2844 + .flags = CLK_SET_RATE_PARENT, 2845 + .ops = &clk_branch2_ops, 2846 + }, 2847 + }, 2848 + }; 2849 + 2850 + static struct clk_branch gcc_aggre0_cnoc_ahb_clk = { 2851 + .halt_reg = 0x8100c, 2852 + .clkr = { 2853 + .enable_reg = 0x8100c, 2854 + .enable_mask = BIT(0), 2855 + .hw.init = &(struct clk_init_data){ 2856 + .name = "gcc_aggre0_cnoc_ahb_clk", 2857 + .parent_names = (const char *[]){ "config_noc_clk_src" }, 2858 + .num_parents = 1, 2859 + .flags = CLK_SET_RATE_PARENT, 2860 + .ops = &clk_branch2_ops, 2861 + }, 2862 + }, 2863 + }; 2864 + 2865 + static struct clk_branch gcc_smmu_aggre0_axi_clk = { 2866 + .halt_reg = 0x81014, 2867 + .clkr = { 2868 + .enable_reg = 0x81014, 2869 + .enable_mask = BIT(0), 2870 + .hw.init = &(struct clk_init_data){ 2871 + .name = "gcc_smmu_aggre0_axi_clk", 2872 + .parent_names = (const char *[]){ "system_noc_clk_src" }, 2873 + .num_parents = 1, 2874 + .flags = CLK_SET_RATE_PARENT, 2875 + .ops = &clk_branch2_ops, 2876 + }, 2877 + }, 2878 + }; 2879 + 2880 + static struct clk_branch gcc_smmu_aggre0_ahb_clk = { 2881 + .halt_reg = 0x81018, 2882 + .clkr = { 2883 + .enable_reg = 0x81018, 2884 + .enable_mask = BIT(0), 2885 + .hw.init = &(struct clk_init_data){ 2886 + .name = "gcc_smmu_aggre0_ahb_clk", 2887 + .parent_names = (const char *[]){ "config_noc_clk_src" }, 2888 + .num_parents = 1, 2889 + .flags = CLK_SET_RATE_PARENT, 2890 + .ops = &clk_branch2_ops, 2891 + }, 2892 + }, 2893 + }; 2894 + 2895 + static struct clk_branch gcc_aggre1_pnoc_ahb_clk = { 2896 + .halt_reg = 0x82014, 2897 + .clkr = { 2898 + .enable_reg = 0x82014, 2899 + .enable_mask = BIT(0), 2900 + .hw.init = &(struct clk_init_data){ 2901 + .name = "gcc_aggre1_pnoc_ahb_clk", 2902 + .parent_names = (const char *[]){ "periph_noc_clk_src" }, 2903 + .num_parents = 1, 2904 + .flags = CLK_SET_RATE_PARENT, 2905 + .ops = &clk_branch2_ops, 2906 + }, 2907 + }, 2908 + }; 2909 + 2910 + static struct clk_branch gcc_aggre2_ufs_axi_clk = { 2911 + .halt_reg = 0x83014, 2912 + .clkr = { 2913 + .enable_reg = 0x83014, 2914 + .enable_mask = BIT(0), 2915 + .hw.init = &(struct clk_init_data){ 2916 + .name = "gcc_aggre2_ufs_axi_clk", 2917 + .parent_names = (const char *[]){ "ufs_axi_clk_src" }, 2918 + .num_parents = 1, 2919 + .flags = CLK_SET_RATE_PARENT, 2920 + .ops = &clk_branch2_ops, 2921 + }, 2922 + }, 2923 + }; 2924 + 2925 + static struct clk_branch gcc_aggre2_usb3_axi_clk = { 2926 + .halt_reg = 0x83018, 2927 + .clkr = { 2928 + .enable_reg = 0x83018, 2929 + .enable_mask = BIT(0), 2930 + .hw.init = &(struct clk_init_data){ 2931 + .name = "gcc_aggre2_usb3_axi_clk", 2932 + .parent_names = (const char *[]){ "usb30_master_clk_src" }, 2933 + .num_parents = 1, 2934 + .flags = CLK_SET_RATE_PARENT, 2935 + .ops = &clk_branch2_ops, 2936 + }, 2937 + }, 2938 + }; 2939 + 2940 + static struct clk_branch gcc_qspi_ahb_clk = { 2941 + .halt_reg = 0x8b004, 2942 + .clkr = { 2943 + .enable_reg = 0x8b004, 2944 + .enable_mask = BIT(0), 2945 + .hw.init = &(struct clk_init_data){ 2946 + .name = "gcc_qspi_ahb_clk", 2947 + .parent_names = (const char *[]){ "periph_noc_clk_src" }, 2948 + .num_parents = 1, 2949 + .flags = CLK_SET_RATE_PARENT, 2950 + .ops = &clk_branch2_ops, 2951 + }, 2952 + }, 2953 + }; 2954 + 2955 + static struct clk_branch gcc_qspi_ser_clk = { 2956 + .halt_reg = 0x8b008, 2957 + .clkr = { 2958 + .enable_reg = 0x8b008, 2959 + .enable_mask = BIT(0), 2960 + .hw.init = &(struct clk_init_data){ 2961 + .name = "gcc_qspi_ser_clk", 2962 + .parent_names = (const char *[]){ "qspi_ser_clk_src" }, 2963 + .num_parents = 1, 2964 + .flags = CLK_SET_RATE_PARENT, 2965 + .ops = &clk_branch2_ops, 2966 + }, 2967 + }, 2968 + }; 2969 + 2970 + static struct clk_branch gcc_usb3_clkref_clk = { 2971 + .halt_reg = 0x8800C, 2972 + .clkr = { 2973 + .enable_reg = 0x8800C, 2974 + .enable_mask = BIT(0), 2975 + .hw.init = &(struct clk_init_data){ 2976 + .name = "gcc_usb3_clkref_clk", 2977 + .parent_names = (const char *[]){ "xo" }, 2978 + .num_parents = 1, 2979 + .ops = &clk_branch2_ops, 2980 + }, 2981 + }, 2982 + }; 2983 + 2984 + static struct clk_branch gcc_hdmi_clkref_clk = { 2985 + .halt_reg = 0x88000, 2986 + .clkr = { 2987 + .enable_reg = 0x88000, 2988 + .enable_mask = BIT(0), 2989 + .hw.init = &(struct clk_init_data){ 2990 + .name = "gcc_hdmi_clkref_clk", 2991 + .parent_names = (const char *[]){ "xo" }, 2992 + .num_parents = 1, 2993 + .ops = &clk_branch2_ops, 2994 + }, 2995 + }, 2996 + }; 2997 + 2998 + static struct clk_branch gcc_ufs_clkref_clk = { 2999 + .halt_reg = 0x88008, 3000 + .clkr = { 3001 + .enable_reg = 0x88008, 3002 + .enable_mask = BIT(0), 3003 + .hw.init = &(struct clk_init_data){ 3004 + .name = "gcc_ufs_clkref_clk", 3005 + .parent_names = (const char *[]){ "xo" }, 3006 + .num_parents = 1, 3007 + .ops = &clk_branch2_ops, 3008 + }, 3009 + }, 3010 + }; 3011 + 3012 + static struct clk_branch gcc_pcie_clkref_clk = { 3013 + .halt_reg = 0x88010, 3014 + .clkr = { 3015 + .enable_reg = 0x88010, 3016 + .enable_mask = BIT(0), 3017 + .hw.init = &(struct clk_init_data){ 3018 + .name = "gcc_pcie_clkref_clk", 3019 + .parent_names = (const char *[]){ "xo" }, 3020 + .num_parents = 1, 3021 + .ops = &clk_branch2_ops, 3022 + }, 3023 + }, 3024 + }; 3025 + 3026 + static struct clk_branch gcc_rx2_usb2_clkref_clk = { 3027 + .halt_reg = 0x88014, 3028 + .clkr = { 3029 + .enable_reg = 0x88014, 3030 + .enable_mask = BIT(0), 3031 + .hw.init = &(struct clk_init_data){ 3032 + .name = "gcc_rx2_usb2_clkref_clk", 3033 + .parent_names = (const char *[]){ "xo" }, 3034 + .num_parents = 1, 3035 + .ops = &clk_branch2_ops, 3036 + }, 3037 + }, 3038 + }; 3039 + 3040 + static struct clk_branch gcc_rx1_usb2_clkref_clk = { 3041 + .halt_reg = 0x88018, 3042 + .clkr = { 3043 + .enable_reg = 0x88018, 3044 + .enable_mask = BIT(0), 3045 + .hw.init = &(struct clk_init_data){ 3046 + .name = "gcc_rx1_usb2_clkref_clk", 3047 + .parent_names = (const char *[]){ "xo" }, 3048 + .num_parents = 1, 3049 + .ops = &clk_branch2_ops, 3050 + }, 3051 + }, 3052 + }; 3053 + 3054 + static struct clk_hw *gcc_msm8996_hws[] = { 3055 + &xo.hw, 3056 + &gpll0_early_div.hw, 3057 + &ufs_tx_cfg_clk_src.hw, 3058 + &ufs_rx_cfg_clk_src.hw, 3059 + &ufs_ice_core_postdiv_clk_src.hw, 3060 + }; 3061 + 3062 + static struct clk_regmap *gcc_msm8996_clocks[] = { 3063 + [GPLL0_EARLY] = &gpll0_early.clkr, 3064 + [GPLL0] = &gpll0.clkr, 3065 + [GPLL4_EARLY] = &gpll4_early.clkr, 3066 + [GPLL4] = &gpll4.clkr, 3067 + [SYSTEM_NOC_CLK_SRC] = &system_noc_clk_src.clkr, 3068 + [CONFIG_NOC_CLK_SRC] = &config_noc_clk_src.clkr, 3069 + [PERIPH_NOC_CLK_SRC] = &periph_noc_clk_src.clkr, 3070 + [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr, 3071 + [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr, 3072 + [USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr, 3073 + [USB20_MASTER_CLK_SRC] = &usb20_master_clk_src.clkr, 3074 + [USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr, 3075 + [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr, 3076 + [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr, 3077 + [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr, 3078 + [SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr, 3079 + [SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr, 3080 + [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr, 3081 + [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr, 3082 + [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr, 3083 + [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr, 3084 + [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr, 3085 + [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr, 3086 + [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr, 3087 + [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr, 3088 + [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr, 3089 + [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr, 3090 + [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr, 3091 + [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr, 3092 + [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr, 3093 + [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr, 3094 + [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr, 3095 + [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr, 3096 + [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr, 3097 + [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr, 3098 + [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr, 3099 + [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr, 3100 + [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr, 3101 + [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr, 3102 + [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr, 3103 + [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr, 3104 + [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr, 3105 + [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr, 3106 + [BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr, 3107 + [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr, 3108 + [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr, 3109 + [BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr, 3110 + [BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr, 3111 + [BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr, 3112 + [BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr, 3113 + [BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr, 3114 + [BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr, 3115 + [BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr, 3116 + [PDM2_CLK_SRC] = &pdm2_clk_src.clkr, 3117 + [TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr, 3118 + [GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr, 3119 + [HMSS_RBCPR_CLK_SRC] = &hmss_rbcpr_clk_src.clkr, 3120 + [HMSS_GPLL0_CLK_SRC] = &hmss_gpll0_clk_src.clkr, 3121 + [GP1_CLK_SRC] = &gp1_clk_src.clkr, 3122 + [GP2_CLK_SRC] = &gp2_clk_src.clkr, 3123 + [GP3_CLK_SRC] = &gp3_clk_src.clkr, 3124 + [PCIE_AUX_CLK_SRC] = &pcie_aux_clk_src.clkr, 3125 + [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr, 3126 + [UFS_ICE_CORE_CLK_SRC] = &ufs_ice_core_clk_src.clkr, 3127 + [QSPI_SER_CLK_SRC] = &qspi_ser_clk_src.clkr, 3128 + [GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr, 3129 + [GCC_SYS_NOC_UFS_AXI_CLK] = &gcc_sys_noc_ufs_axi_clk.clkr, 3130 + [GCC_PERIPH_NOC_USB20_AHB_CLK] = &gcc_periph_noc_usb20_ahb_clk.clkr, 3131 + [GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr, 3132 + [GCC_MMSS_BIMC_GFX_CLK] = &gcc_mmss_bimc_gfx_clk.clkr, 3133 + [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr, 3134 + [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr, 3135 + [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr, 3136 + [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr, 3137 + [GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr, 3138 + [GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr, 3139 + [GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr, 3140 + [GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr, 3141 + [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr, 3142 + [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 3143 + [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 3144 + [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr, 3145 + [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 3146 + [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 3147 + [GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr, 3148 + [GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr, 3149 + [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr, 3150 + [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr, 3151 + [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr, 3152 + [GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr, 3153 + [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr, 3154 + [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr, 3155 + [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr, 3156 + [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr, 3157 + [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr, 3158 + [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr, 3159 + [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr, 3160 + [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr, 3161 + [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr, 3162 + [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr, 3163 + [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr, 3164 + [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr, 3165 + [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr, 3166 + [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr, 3167 + [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr, 3168 + [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr, 3169 + [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr, 3170 + [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr, 3171 + [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr, 3172 + [GCC_BLSP2_SLEEP_CLK] = &gcc_blsp2_sleep_clk.clkr, 3173 + [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr, 3174 + [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr, 3175 + [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr, 3176 + [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr, 3177 + [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr, 3178 + [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr, 3179 + [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr, 3180 + [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr, 3181 + [GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr, 3182 + [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr, 3183 + [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr, 3184 + [GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr, 3185 + [GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr, 3186 + [GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr, 3187 + [GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr, 3188 + [GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr, 3189 + [GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr, 3190 + [GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr, 3191 + [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 3192 + [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 3193 + [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 3194 + [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr, 3195 + [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr, 3196 + [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr, 3197 + [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 3198 + [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr, 3199 + [GCC_HMSS_RBCPR_CLK] = &gcc_hmss_rbcpr_clk.clkr, 3200 + [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 3201 + [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 3202 + [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 3203 + [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr, 3204 + [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr, 3205 + [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr, 3206 + [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr, 3207 + [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr, 3208 + [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr, 3209 + [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr, 3210 + [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr, 3211 + [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr, 3212 + [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr, 3213 + [GCC_PCIE_2_SLV_AXI_CLK] = &gcc_pcie_2_slv_axi_clk.clkr, 3214 + [GCC_PCIE_2_MSTR_AXI_CLK] = &gcc_pcie_2_mstr_axi_clk.clkr, 3215 + [GCC_PCIE_2_CFG_AHB_CLK] = &gcc_pcie_2_cfg_ahb_clk.clkr, 3216 + [GCC_PCIE_2_AUX_CLK] = &gcc_pcie_2_aux_clk.clkr, 3217 + [GCC_PCIE_2_PIPE_CLK] = &gcc_pcie_2_pipe_clk.clkr, 3218 + [GCC_PCIE_PHY_CFG_AHB_CLK] = &gcc_pcie_phy_cfg_ahb_clk.clkr, 3219 + [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr, 3220 + [GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr, 3221 + [GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr, 3222 + [GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr, 3223 + [GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr, 3224 + [GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr, 3225 + [GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr, 3226 + [GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr, 3227 + [GCC_UFS_UNIPRO_CORE_CLK] = &gcc_ufs_unipro_core_clk.clkr, 3228 + [GCC_UFS_ICE_CORE_CLK] = &gcc_ufs_ice_core_clk.clkr, 3229 + [GCC_UFS_SYS_CLK_CORE_CLK] = &gcc_ufs_sys_clk_core_clk.clkr, 3230 + [GCC_UFS_TX_SYMBOL_CLK_CORE_CLK] = &gcc_ufs_tx_symbol_clk_core_clk.clkr, 3231 + [GCC_AGGRE0_SNOC_AXI_CLK] = &gcc_aggre0_snoc_axi_clk.clkr, 3232 + [GCC_AGGRE0_CNOC_AHB_CLK] = &gcc_aggre0_cnoc_ahb_clk.clkr, 3233 + [GCC_SMMU_AGGRE0_AXI_CLK] = &gcc_smmu_aggre0_axi_clk.clkr, 3234 + [GCC_SMMU_AGGRE0_AHB_CLK] = &gcc_smmu_aggre0_ahb_clk.clkr, 3235 + [GCC_AGGRE1_PNOC_AHB_CLK] = &gcc_aggre1_pnoc_ahb_clk.clkr, 3236 + [GCC_AGGRE2_UFS_AXI_CLK] = &gcc_aggre2_ufs_axi_clk.clkr, 3237 + [GCC_AGGRE2_USB3_AXI_CLK] = &gcc_aggre2_usb3_axi_clk.clkr, 3238 + [GCC_QSPI_AHB_CLK] = &gcc_qspi_ahb_clk.clkr, 3239 + [GCC_QSPI_SER_CLK] = &gcc_qspi_ser_clk.clkr, 3240 + [GCC_USB3_CLKREF_CLK] = &gcc_usb3_clkref_clk.clkr, 3241 + [GCC_HDMI_CLKREF_CLK] = &gcc_hdmi_clkref_clk.clkr, 3242 + [GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr, 3243 + [GCC_PCIE_CLKREF_CLK] = &gcc_pcie_clkref_clk.clkr, 3244 + [GCC_RX2_USB2_CLKREF_CLK] = &gcc_rx2_usb2_clkref_clk.clkr, 3245 + [GCC_RX1_USB2_CLKREF_CLK] = &gcc_rx1_usb2_clkref_clk.clkr, 3246 + }; 3247 + 3248 + static const struct qcom_reset_map gcc_msm8996_resets[] = { 3249 + [GCC_SYSTEM_NOC_BCR] = { 0x4000 }, 3250 + [GCC_CONFIG_NOC_BCR] = { 0x5000 }, 3251 + [GCC_PERIPH_NOC_BCR] = { 0x6000 }, 3252 + [GCC_IMEM_BCR] = { 0x8000 }, 3253 + [GCC_MMSS_BCR] = { 0x9000 }, 3254 + [GCC_PIMEM_BCR] = { 0x0a000 }, 3255 + [GCC_QDSS_BCR] = { 0x0c000 }, 3256 + [GCC_USB_30_BCR] = { 0x0f000 }, 3257 + [GCC_USB_20_BCR] = { 0x12000 }, 3258 + [GCC_QUSB2PHY_PRIM_BCR] = { 0x12038 }, 3259 + [GCC_QUSB2PHY_SEC_BCR] = { 0x1203c }, 3260 + [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 }, 3261 + [GCC_SDCC1_BCR] = { 0x13000 }, 3262 + [GCC_SDCC2_BCR] = { 0x14000 }, 3263 + [GCC_SDCC3_BCR] = { 0x15000 }, 3264 + [GCC_SDCC4_BCR] = { 0x16000 }, 3265 + [GCC_BLSP1_BCR] = { 0x17000 }, 3266 + [GCC_BLSP1_QUP1_BCR] = { 0x19000 }, 3267 + [GCC_BLSP1_UART1_BCR] = { 0x1a000 }, 3268 + [GCC_BLSP1_QUP2_BCR] = { 0x1b000 }, 3269 + [GCC_BLSP1_UART2_BCR] = { 0x1c000 }, 3270 + [GCC_BLSP1_QUP3_BCR] = { 0x1d000 }, 3271 + [GCC_BLSP1_UART3_BCR] = { 0x1e000 }, 3272 + [GCC_BLSP1_QUP4_BCR] = { 0x1f000 }, 3273 + [GCC_BLSP1_UART4_BCR] = { 0x20000 }, 3274 + [GCC_BLSP1_QUP5_BCR] = { 0x21000 }, 3275 + [GCC_BLSP1_UART5_BCR] = { 0x22000 }, 3276 + [GCC_BLSP1_QUP6_BCR] = { 0x23000 }, 3277 + [GCC_BLSP1_UART6_BCR] = { 0x24000 }, 3278 + [GCC_BLSP2_BCR] = { 0x25000 }, 3279 + [GCC_BLSP2_QUP1_BCR] = { 0x26000 }, 3280 + [GCC_BLSP2_UART1_BCR] = { 0x27000 }, 3281 + [GCC_BLSP2_QUP2_BCR] = { 0x28000 }, 3282 + [GCC_BLSP2_UART2_BCR] = { 0x29000 }, 3283 + [GCC_BLSP2_QUP3_BCR] = { 0x2a000 }, 3284 + [GCC_BLSP2_UART3_BCR] = { 0x2b000 }, 3285 + [GCC_BLSP2_QUP4_BCR] = { 0x2c000 }, 3286 + [GCC_BLSP2_UART4_BCR] = { 0x2d000 }, 3287 + [GCC_BLSP2_QUP5_BCR] = { 0x2e000 }, 3288 + [GCC_BLSP2_UART5_BCR] = { 0x2f000 }, 3289 + [GCC_BLSP2_QUP6_BCR] = { 0x30000 }, 3290 + [GCC_BLSP2_UART6_BCR] = { 0x31000 }, 3291 + [GCC_PDM_BCR] = { 0x33000 }, 3292 + [GCC_PRNG_BCR] = { 0x34000 }, 3293 + [GCC_TSIF_BCR] = { 0x36000 }, 3294 + [GCC_TCSR_BCR] = { 0x37000 }, 3295 + [GCC_BOOT_ROM_BCR] = { 0x38000 }, 3296 + [GCC_MSG_RAM_BCR] = { 0x39000 }, 3297 + [GCC_TLMM_BCR] = { 0x3a000 }, 3298 + [GCC_MPM_BCR] = { 0x3b000 }, 3299 + [GCC_SEC_CTRL_BCR] = { 0x3d000 }, 3300 + [GCC_SPMI_BCR] = { 0x3f000 }, 3301 + [GCC_SPDM_BCR] = { 0x40000 }, 3302 + [GCC_CE1_BCR] = { 0x41000 }, 3303 + [GCC_BIMC_BCR] = { 0x44000 }, 3304 + [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x49000 }, 3305 + [GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x49008 }, 3306 + [GCC_SNOC_BUS_TIMEOUT1_BCR] = { 0x49010 }, 3307 + [GCC_SNOC_BUS_TIMEOUT3_BCR] = { 0x49018 }, 3308 + [GCC_SNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x49020 }, 3309 + [GCC_PNOC_BUS_TIMEOUT0_BCR] = { 0x4a000 }, 3310 + [GCC_PNOC_BUS_TIMEOUT1_BCR] = { 0x4a008 }, 3311 + [GCC_PNOC_BUS_TIMEOUT2_BCR] = { 0x4a010 }, 3312 + [GCC_PNOC_BUS_TIMEOUT3_BCR] = { 0x4a018 }, 3313 + [GCC_PNOC_BUS_TIMEOUT4_BCR] = { 0x4a020 }, 3314 + [GCC_CNOC_BUS_TIMEOUT0_BCR] = { 0x4b000 }, 3315 + [GCC_CNOC_BUS_TIMEOUT1_BCR] = { 0x4b008 }, 3316 + [GCC_CNOC_BUS_TIMEOUT2_BCR] = { 0x4b010 }, 3317 + [GCC_CNOC_BUS_TIMEOUT3_BCR] = { 0x4b018 }, 3318 + [GCC_CNOC_BUS_TIMEOUT4_BCR] = { 0x4b020 }, 3319 + [GCC_CNOC_BUS_TIMEOUT5_BCR] = { 0x4b028 }, 3320 + [GCC_CNOC_BUS_TIMEOUT6_BCR] = { 0x4b030 }, 3321 + [GCC_CNOC_BUS_TIMEOUT7_BCR] = { 0x4b038 }, 3322 + [GCC_CNOC_BUS_TIMEOUT8_BCR] = { 0x80000 }, 3323 + [GCC_CNOC_BUS_TIMEOUT9_BCR] = { 0x80008 }, 3324 + [GCC_CNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x80010 }, 3325 + [GCC_APB2JTAG_BCR] = { 0x4c000 }, 3326 + [GCC_RBCPR_CX_BCR] = { 0x4e000 }, 3327 + [GCC_RBCPR_MX_BCR] = { 0x4f000 }, 3328 + [GCC_PCIE_0_BCR] = { 0x6b000 }, 3329 + [GCC_PCIE_0_PHY_BCR] = { 0x6c01c }, 3330 + [GCC_PCIE_1_BCR] = { 0x6d000 }, 3331 + [GCC_PCIE_1_PHY_BCR] = { 0x6d038 }, 3332 + [GCC_PCIE_2_BCR] = { 0x6e000 }, 3333 + [GCC_PCIE_2_PHY_BCR] = { 0x6e038 }, 3334 + [GCC_PCIE_PHY_BCR] = { 0x6f000 }, 3335 + [GCC_DCD_BCR] = { 0x70000 }, 3336 + [GCC_OBT_ODT_BCR] = { 0x73000 }, 3337 + [GCC_UFS_BCR] = { 0x75000 }, 3338 + [GCC_SSC_BCR] = { 0x63000 }, 3339 + [GCC_VS_BCR] = { 0x7a000 }, 3340 + [GCC_AGGRE0_NOC_BCR] = { 0x81000 }, 3341 + [GCC_AGGRE1_NOC_BCR] = { 0x82000 }, 3342 + [GCC_AGGRE2_NOC_BCR] = { 0x83000 }, 3343 + [GCC_DCC_BCR] = { 0x84000 }, 3344 + [GCC_IPA_BCR] = { 0x89000 }, 3345 + [GCC_QSPI_BCR] = { 0x8b000 }, 3346 + [GCC_SKL_BCR] = { 0x8c000 }, 3347 + [GCC_MSMPU_BCR] = { 0x8d000 }, 3348 + [GCC_MSS_Q6_BCR] = { 0x8e000 }, 3349 + [GCC_QREFS_VBG_CAL_BCR] = { 0x88020 }, 3350 + }; 3351 + 3352 + static const struct regmap_config gcc_msm8996_regmap_config = { 3353 + .reg_bits = 32, 3354 + .reg_stride = 4, 3355 + .val_bits = 32, 3356 + .max_register = 0x8f010, 3357 + .fast_io = true, 3358 + }; 3359 + 3360 + static const struct qcom_cc_desc gcc_msm8996_desc = { 3361 + .config = &gcc_msm8996_regmap_config, 3362 + .clks = gcc_msm8996_clocks, 3363 + .num_clks = ARRAY_SIZE(gcc_msm8996_clocks), 3364 + .resets = gcc_msm8996_resets, 3365 + .num_resets = ARRAY_SIZE(gcc_msm8996_resets), 3366 + }; 3367 + 3368 + static const struct of_device_id gcc_msm8996_match_table[] = { 3369 + { .compatible = "qcom,gcc-msm8996" }, 3370 + { } 3371 + }; 3372 + MODULE_DEVICE_TABLE(of, gcc_msm8996_match_table); 3373 + 3374 + static int gcc_msm8996_probe(struct platform_device *pdev) 3375 + { 3376 + struct clk *clk; 3377 + struct device *dev = &pdev->dev; 3378 + int i; 3379 + struct regmap *regmap; 3380 + 3381 + regmap = qcom_cc_map(pdev, &gcc_msm8996_desc); 3382 + if (IS_ERR(regmap)) 3383 + return PTR_ERR(regmap); 3384 + 3385 + /* 3386 + * Set the HMSS_AHB_CLK_SLEEP_ENA bit to allow the hmss_ahb_clk to be 3387 + * turned off by hardware during certain apps low power modes. 3388 + */ 3389 + regmap_update_bits(regmap, 0x52008, BIT(21), BIT(21)); 3390 + 3391 + for (i = 0; i < ARRAY_SIZE(gcc_msm8996_hws); i++) { 3392 + clk = devm_clk_register(dev, gcc_msm8996_hws[i]); 3393 + if (IS_ERR(clk)) 3394 + return PTR_ERR(clk); 3395 + } 3396 + 3397 + return qcom_cc_really_probe(pdev, &gcc_msm8996_desc, regmap); 3398 + } 3399 + 3400 + static struct platform_driver gcc_msm8996_driver = { 3401 + .probe = gcc_msm8996_probe, 3402 + .driver = { 3403 + .name = "gcc-msm8996", 3404 + .of_match_table = gcc_msm8996_match_table, 3405 + }, 3406 + }; 3407 + 3408 + static int __init gcc_msm8996_init(void) 3409 + { 3410 + return platform_driver_register(&gcc_msm8996_driver); 3411 + } 3412 + core_initcall(gcc_msm8996_init); 3413 + 3414 + static void __exit gcc_msm8996_exit(void) 3415 + { 3416 + platform_driver_unregister(&gcc_msm8996_driver); 3417 + } 3418 + module_exit(gcc_msm8996_exit); 3419 + 3420 + MODULE_DESCRIPTION("QCOM GCC MSM8996 Driver"); 3421 + MODULE_LICENSE("GPL v2"); 3422 + MODULE_ALIAS("platform:gcc-msm8996");
+3217
drivers/clk/qcom/mmcc-msm8996.c
··· 1 + /*x 2 + * Copyright (c) 2015, The Linux Foundation. All rights reserved. 3 + * 4 + * This software is licensed under the terms of the GNU General Public 5 + * License version 2, as published by the Free Software Foundation, and 6 + * may be copied, distributed, and modified under those terms. 7 + * 8 + * This program is distributed in the hope that it will be useful, 9 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 + * GNU General Public License for more details. 12 + */ 13 + 14 + #include <linux/kernel.h> 15 + #include <linux/bitops.h> 16 + #include <linux/err.h> 17 + #include <linux/platform_device.h> 18 + #include <linux/module.h> 19 + #include <linux/of.h> 20 + #include <linux/of_device.h> 21 + #include <linux/clk-provider.h> 22 + #include <linux/regmap.h> 23 + #include <linux/reset-controller.h> 24 + #include <linux/clk.h> 25 + 26 + #include <dt-bindings/clock/qcom,mmcc-msm8996.h> 27 + 28 + #include "common.h" 29 + #include "clk-regmap.h" 30 + #include "clk-regmap-divider.h" 31 + #include "clk-alpha-pll.h" 32 + #include "clk-rcg.h" 33 + #include "clk-branch.h" 34 + #include "reset.h" 35 + 36 + #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) } 37 + 38 + enum { 39 + P_XO, 40 + P_MMPLL0, 41 + P_GPLL0, 42 + P_GPLL0_DIV, 43 + P_MMPLL1, 44 + P_MMPLL9, 45 + P_MMPLL2, 46 + P_MMPLL8, 47 + P_MMPLL3, 48 + P_DSI0PLL, 49 + P_DSI1PLL, 50 + P_MMPLL5, 51 + P_HDMIPLL, 52 + P_DSI0PLL_BYTE, 53 + P_DSI1PLL_BYTE, 54 + P_MMPLL4, 55 + }; 56 + 57 + static const struct parent_map mmss_xo_hdmi_map[] = { 58 + { P_XO, 0 }, 59 + { P_HDMIPLL, 1 } 60 + }; 61 + 62 + static const char * const mmss_xo_hdmi[] = { 63 + "xo", 64 + "hdmipll" 65 + }; 66 + 67 + static const struct parent_map mmss_xo_dsi0pll_dsi1pll_map[] = { 68 + { P_XO, 0 }, 69 + { P_DSI0PLL, 1 }, 70 + { P_DSI1PLL, 2 } 71 + }; 72 + 73 + static const char * const mmss_xo_dsi0pll_dsi1pll[] = { 74 + "xo", 75 + "dsi0pll", 76 + "dsi1pll" 77 + }; 78 + 79 + static const struct parent_map mmss_xo_gpll0_gpll0_div_map[] = { 80 + { P_XO, 0 }, 81 + { P_GPLL0, 5 }, 82 + { P_GPLL0_DIV, 6 } 83 + }; 84 + 85 + static const char * const mmss_xo_gpll0_gpll0_div[] = { 86 + "xo", 87 + "gpll0", 88 + "gpll0_div" 89 + }; 90 + 91 + static const struct parent_map mmss_xo_dsibyte_map[] = { 92 + { P_XO, 0 }, 93 + { P_DSI0PLL_BYTE, 1 }, 94 + { P_DSI1PLL_BYTE, 2 } 95 + }; 96 + 97 + static const char * const mmss_xo_dsibyte[] = { 98 + "xo", 99 + "dsi0pllbyte", 100 + "dsi1pllbyte" 101 + }; 102 + 103 + static const struct parent_map mmss_xo_mmpll0_gpll0_gpll0_div_map[] = { 104 + { P_XO, 0 }, 105 + { P_MMPLL0, 1 }, 106 + { P_GPLL0, 5 }, 107 + { P_GPLL0_DIV, 6 } 108 + }; 109 + 110 + static const char * const mmss_xo_mmpll0_gpll0_gpll0_div[] = { 111 + "xo", 112 + "mmpll0", 113 + "gpll0", 114 + "gpll0_div" 115 + }; 116 + 117 + static const struct parent_map mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map[] = { 118 + { P_XO, 0 }, 119 + { P_MMPLL0, 1 }, 120 + { P_MMPLL1, 2 }, 121 + { P_GPLL0, 5 }, 122 + { P_GPLL0_DIV, 6 } 123 + }; 124 + 125 + static const char * const mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div[] = { 126 + "xo", 127 + "mmpll0", 128 + "mmpll1", 129 + "gpll0", 130 + "gpll0_div" 131 + }; 132 + 133 + static const struct parent_map mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map[] = { 134 + { P_XO, 0 }, 135 + { P_MMPLL0, 1 }, 136 + { P_MMPLL3, 3 }, 137 + { P_GPLL0, 5 }, 138 + { P_GPLL0_DIV, 6 } 139 + }; 140 + 141 + static const char * const mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div[] = { 142 + "xo", 143 + "mmpll0", 144 + "mmpll3", 145 + "gpll0", 146 + "gpll0_div" 147 + }; 148 + 149 + static const struct parent_map mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map[] = { 150 + { P_XO, 0 }, 151 + { P_MMPLL0, 1 }, 152 + { P_MMPLL5, 2 }, 153 + { P_GPLL0, 5 }, 154 + { P_GPLL0_DIV, 6 } 155 + }; 156 + 157 + static const char * const mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div[] = { 158 + "xo", 159 + "mmpll0", 160 + "mmpll5", 161 + "gpll0", 162 + "gpll0_div" 163 + }; 164 + 165 + static const struct parent_map mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map[] = { 166 + { P_XO, 0 }, 167 + { P_MMPLL0, 1 }, 168 + { P_MMPLL4, 3 }, 169 + { P_GPLL0, 5 }, 170 + { P_GPLL0_DIV, 6 } 171 + }; 172 + 173 + static const char * const mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div[] = { 174 + "xo", 175 + "mmpll0", 176 + "mmpll4", 177 + "gpll0", 178 + "gpll0_div" 179 + }; 180 + 181 + static const struct parent_map mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_map[] = { 182 + { P_XO, 0 }, 183 + { P_MMPLL0, 1 }, 184 + { P_MMPLL9, 2 }, 185 + { P_MMPLL2, 3 }, 186 + { P_MMPLL8, 4 }, 187 + { P_GPLL0, 5 } 188 + }; 189 + 190 + static const char * const mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0[] = { 191 + "xo", 192 + "mmpll0", 193 + "mmpll9", 194 + "mmpll2", 195 + "mmpll8", 196 + "gpll0" 197 + }; 198 + 199 + static const struct parent_map mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div_map[] = { 200 + { P_XO, 0 }, 201 + { P_MMPLL0, 1 }, 202 + { P_MMPLL9, 2 }, 203 + { P_MMPLL2, 3 }, 204 + { P_MMPLL8, 4 }, 205 + { P_GPLL0, 5 }, 206 + { P_GPLL0_DIV, 6 } 207 + }; 208 + 209 + static const char * const mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div[] = { 210 + "xo", 211 + "mmpll0", 212 + "mmpll9", 213 + "mmpll2", 214 + "mmpll8", 215 + "gpll0", 216 + "gpll0_div" 217 + }; 218 + 219 + static const struct parent_map mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map[] = { 220 + { P_XO, 0 }, 221 + { P_MMPLL0, 1 }, 222 + { P_MMPLL1, 2 }, 223 + { P_MMPLL4, 3 }, 224 + { P_MMPLL3, 4 }, 225 + { P_GPLL0, 5 }, 226 + { P_GPLL0_DIV, 6 } 227 + }; 228 + 229 + static const char * const mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div[] = { 230 + "xo", 231 + "mmpll0", 232 + "mmpll1", 233 + "mmpll4", 234 + "mmpll3", 235 + "gpll0", 236 + "gpll0_div" 237 + }; 238 + 239 + static struct clk_fixed_factor gpll0_div = { 240 + .mult = 1, 241 + .div = 2, 242 + .hw.init = &(struct clk_init_data){ 243 + .name = "gpll0_div", 244 + .parent_names = (const char *[]){ "gpll0" }, 245 + .num_parents = 1, 246 + .ops = &clk_fixed_factor_ops, 247 + }, 248 + }; 249 + 250 + static struct pll_vco mmpll_p_vco[] = { 251 + { 250000000, 500000000, 3 }, 252 + { 500000000, 1000000000, 2 }, 253 + { 1000000000, 1500000000, 1 }, 254 + { 1500000000, 2000000000, 0 }, 255 + }; 256 + 257 + static struct pll_vco mmpll_gfx_vco[] = { 258 + { 400000000, 1000000000, 2 }, 259 + { 1000000000, 1500000000, 1 }, 260 + { 1500000000, 2000000000, 0 }, 261 + }; 262 + 263 + static struct pll_vco mmpll_t_vco[] = { 264 + { 500000000, 1500000000, 0 }, 265 + }; 266 + 267 + static struct clk_alpha_pll mmpll0_early = { 268 + .offset = 0x0, 269 + .vco_table = mmpll_p_vco, 270 + .num_vco = ARRAY_SIZE(mmpll_p_vco), 271 + .clkr = { 272 + .enable_reg = 0x100, 273 + .enable_mask = BIT(0), 274 + .hw.init = &(struct clk_init_data){ 275 + .name = "mmpll0_early", 276 + .parent_names = (const char *[]){ "xo" }, 277 + .num_parents = 1, 278 + .ops = &clk_alpha_pll_ops, 279 + }, 280 + }, 281 + }; 282 + 283 + static struct clk_alpha_pll_postdiv mmpll0 = { 284 + .offset = 0x0, 285 + .width = 4, 286 + .clkr.hw.init = &(struct clk_init_data){ 287 + .name = "mmpll0", 288 + .parent_names = (const char *[]){ "mmpll0_early" }, 289 + .num_parents = 1, 290 + .ops = &clk_alpha_pll_postdiv_ops, 291 + .flags = CLK_SET_RATE_PARENT, 292 + }, 293 + }; 294 + 295 + static struct clk_alpha_pll mmpll1_early = { 296 + .offset = 0x30, 297 + .vco_table = mmpll_p_vco, 298 + .num_vco = ARRAY_SIZE(mmpll_p_vco), 299 + .clkr = { 300 + .enable_reg = 0x100, 301 + .enable_mask = BIT(1), 302 + .hw.init = &(struct clk_init_data){ 303 + .name = "mmpll1_early", 304 + .parent_names = (const char *[]){ "xo" }, 305 + .num_parents = 1, 306 + .ops = &clk_alpha_pll_ops, 307 + } 308 + }, 309 + }; 310 + 311 + static struct clk_alpha_pll_postdiv mmpll1 = { 312 + .offset = 0x30, 313 + .width = 4, 314 + .clkr.hw.init = &(struct clk_init_data){ 315 + .name = "mmpll1", 316 + .parent_names = (const char *[]){ "mmpll1_early" }, 317 + .num_parents = 1, 318 + .ops = &clk_alpha_pll_postdiv_ops, 319 + .flags = CLK_SET_RATE_PARENT, 320 + }, 321 + }; 322 + 323 + static struct clk_alpha_pll mmpll2_early = { 324 + .offset = 0x4100, 325 + .vco_table = mmpll_gfx_vco, 326 + .num_vco = ARRAY_SIZE(mmpll_gfx_vco), 327 + .clkr.hw.init = &(struct clk_init_data){ 328 + .name = "mmpll2_early", 329 + .parent_names = (const char *[]){ "xo" }, 330 + .num_parents = 1, 331 + .ops = &clk_alpha_pll_ops, 332 + }, 333 + }; 334 + 335 + static struct clk_alpha_pll_postdiv mmpll2 = { 336 + .offset = 0x4100, 337 + .width = 4, 338 + .clkr.hw.init = &(struct clk_init_data){ 339 + .name = "mmpll2", 340 + .parent_names = (const char *[]){ "mmpll2_early" }, 341 + .num_parents = 1, 342 + .ops = &clk_alpha_pll_postdiv_ops, 343 + .flags = CLK_SET_RATE_PARENT, 344 + }, 345 + }; 346 + 347 + static struct clk_alpha_pll mmpll3_early = { 348 + .offset = 0x60, 349 + .vco_table = mmpll_p_vco, 350 + .num_vco = ARRAY_SIZE(mmpll_p_vco), 351 + .clkr.hw.init = &(struct clk_init_data){ 352 + .name = "mmpll3_early", 353 + .parent_names = (const char *[]){ "xo" }, 354 + .num_parents = 1, 355 + .ops = &clk_alpha_pll_ops, 356 + }, 357 + }; 358 + 359 + static struct clk_alpha_pll_postdiv mmpll3 = { 360 + .offset = 0x60, 361 + .width = 4, 362 + .clkr.hw.init = &(struct clk_init_data){ 363 + .name = "mmpll3", 364 + .parent_names = (const char *[]){ "mmpll3_early" }, 365 + .num_parents = 1, 366 + .ops = &clk_alpha_pll_postdiv_ops, 367 + .flags = CLK_SET_RATE_PARENT, 368 + }, 369 + }; 370 + 371 + static struct clk_alpha_pll mmpll4_early = { 372 + .offset = 0x90, 373 + .vco_table = mmpll_t_vco, 374 + .num_vco = ARRAY_SIZE(mmpll_t_vco), 375 + .clkr.hw.init = &(struct clk_init_data){ 376 + .name = "mmpll4_early", 377 + .parent_names = (const char *[]){ "xo" }, 378 + .num_parents = 1, 379 + .ops = &clk_alpha_pll_ops, 380 + }, 381 + }; 382 + 383 + static struct clk_alpha_pll_postdiv mmpll4 = { 384 + .offset = 0x90, 385 + .width = 2, 386 + .clkr.hw.init = &(struct clk_init_data){ 387 + .name = "mmpll4", 388 + .parent_names = (const char *[]){ "mmpll4_early" }, 389 + .num_parents = 1, 390 + .ops = &clk_alpha_pll_postdiv_ops, 391 + .flags = CLK_SET_RATE_PARENT, 392 + }, 393 + }; 394 + 395 + static struct clk_alpha_pll mmpll5_early = { 396 + .offset = 0xc0, 397 + .vco_table = mmpll_p_vco, 398 + .num_vco = ARRAY_SIZE(mmpll_p_vco), 399 + .clkr.hw.init = &(struct clk_init_data){ 400 + .name = "mmpll5_early", 401 + .parent_names = (const char *[]){ "xo" }, 402 + .num_parents = 1, 403 + .ops = &clk_alpha_pll_ops, 404 + }, 405 + }; 406 + 407 + static struct clk_alpha_pll_postdiv mmpll5 = { 408 + .offset = 0xc0, 409 + .width = 4, 410 + .clkr.hw.init = &(struct clk_init_data){ 411 + .name = "mmpll5", 412 + .parent_names = (const char *[]){ "mmpll5_early" }, 413 + .num_parents = 1, 414 + .ops = &clk_alpha_pll_postdiv_ops, 415 + .flags = CLK_SET_RATE_PARENT, 416 + }, 417 + }; 418 + 419 + static struct clk_alpha_pll mmpll8_early = { 420 + .offset = 0x4130, 421 + .vco_table = mmpll_gfx_vco, 422 + .num_vco = ARRAY_SIZE(mmpll_gfx_vco), 423 + .clkr.hw.init = &(struct clk_init_data){ 424 + .name = "mmpll8_early", 425 + .parent_names = (const char *[]){ "xo" }, 426 + .num_parents = 1, 427 + .ops = &clk_alpha_pll_ops, 428 + }, 429 + }; 430 + 431 + static struct clk_alpha_pll_postdiv mmpll8 = { 432 + .offset = 0x4130, 433 + .width = 4, 434 + .clkr.hw.init = &(struct clk_init_data){ 435 + .name = "mmpll8", 436 + .parent_names = (const char *[]){ "mmpll8_early" }, 437 + .num_parents = 1, 438 + .ops = &clk_alpha_pll_postdiv_ops, 439 + .flags = CLK_SET_RATE_PARENT, 440 + }, 441 + }; 442 + 443 + static struct clk_alpha_pll mmpll9_early = { 444 + .offset = 0x4200, 445 + .vco_table = mmpll_t_vco, 446 + .num_vco = ARRAY_SIZE(mmpll_t_vco), 447 + .clkr.hw.init = &(struct clk_init_data){ 448 + .name = "mmpll9_early", 449 + .parent_names = (const char *[]){ "xo" }, 450 + .num_parents = 1, 451 + .ops = &clk_alpha_pll_ops, 452 + }, 453 + }; 454 + 455 + static struct clk_alpha_pll_postdiv mmpll9 = { 456 + .offset = 0x4200, 457 + .width = 2, 458 + .clkr.hw.init = &(struct clk_init_data){ 459 + .name = "mmpll9", 460 + .parent_names = (const char *[]){ "mmpll9_early" }, 461 + .num_parents = 1, 462 + .ops = &clk_alpha_pll_postdiv_ops, 463 + .flags = CLK_SET_RATE_PARENT, 464 + }, 465 + }; 466 + 467 + static const struct freq_tbl ftbl_ahb_clk_src[] = { 468 + F(19200000, P_XO, 1, 0, 0), 469 + F(40000000, P_GPLL0_DIV, 7.5, 0, 0), 470 + F(80000000, P_MMPLL0, 10, 0, 0), 471 + { } 472 + }; 473 + 474 + static struct clk_rcg2 ahb_clk_src = { 475 + .cmd_rcgr = 0x5000, 476 + .hid_width = 5, 477 + .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map, 478 + .freq_tbl = ftbl_ahb_clk_src, 479 + .clkr.hw.init = &(struct clk_init_data){ 480 + .name = "ahb_clk_src", 481 + .parent_names = mmss_xo_mmpll0_gpll0_gpll0_div, 482 + .num_parents = 4, 483 + .ops = &clk_rcg2_ops, 484 + }, 485 + }; 486 + 487 + static const struct freq_tbl ftbl_axi_clk_src[] = { 488 + F(19200000, P_XO, 1, 0, 0), 489 + F(75000000, P_GPLL0_DIV, 4, 0, 0), 490 + F(100000000, P_GPLL0, 6, 0, 0), 491 + F(171430000, P_GPLL0, 3.5, 0, 0), 492 + F(200000000, P_GPLL0, 3, 0, 0), 493 + F(320000000, P_MMPLL0, 2.5, 0, 0), 494 + F(400000000, P_MMPLL0, 2, 0, 0), 495 + { } 496 + }; 497 + 498 + static struct clk_rcg2 axi_clk_src = { 499 + .cmd_rcgr = 0x5040, 500 + .hid_width = 5, 501 + .parent_map = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map, 502 + .freq_tbl = ftbl_axi_clk_src, 503 + .clkr.hw.init = &(struct clk_init_data){ 504 + .name = "axi_clk_src", 505 + .parent_names = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div, 506 + .num_parents = 5, 507 + .ops = &clk_rcg2_ops, 508 + }, 509 + }; 510 + 511 + static struct clk_rcg2 maxi_clk_src = { 512 + .cmd_rcgr = 0x5090, 513 + .hid_width = 5, 514 + .parent_map = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map, 515 + .freq_tbl = ftbl_axi_clk_src, 516 + .clkr.hw.init = &(struct clk_init_data){ 517 + .name = "maxi_clk_src", 518 + .parent_names = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div, 519 + .num_parents = 5, 520 + .ops = &clk_rcg2_ops, 521 + }, 522 + }; 523 + 524 + static struct clk_rcg2 gfx3d_clk_src = { 525 + .cmd_rcgr = 0x4000, 526 + .hid_width = 5, 527 + .parent_map = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_map, 528 + .clkr.hw.init = &(struct clk_init_data){ 529 + .name = "gfx3d_clk_src", 530 + .parent_names = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0, 531 + .num_parents = 6, 532 + .ops = &clk_gfx3d_ops, 533 + .flags = CLK_SET_RATE_PARENT, 534 + }, 535 + }; 536 + 537 + static const struct freq_tbl ftbl_rbbmtimer_clk_src[] = { 538 + F(19200000, P_XO, 1, 0, 0), 539 + { } 540 + }; 541 + 542 + static struct clk_rcg2 rbbmtimer_clk_src = { 543 + .cmd_rcgr = 0x4090, 544 + .hid_width = 5, 545 + .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map, 546 + .freq_tbl = ftbl_rbbmtimer_clk_src, 547 + .clkr.hw.init = &(struct clk_init_data){ 548 + .name = "rbbmtimer_clk_src", 549 + .parent_names = mmss_xo_mmpll0_gpll0_gpll0_div, 550 + .num_parents = 4, 551 + .ops = &clk_rcg2_ops, 552 + }, 553 + }; 554 + 555 + static struct clk_rcg2 isense_clk_src = { 556 + .cmd_rcgr = 0x4010, 557 + .hid_width = 5, 558 + .parent_map = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div_map, 559 + .clkr.hw.init = &(struct clk_init_data){ 560 + .name = "isense_clk_src", 561 + .parent_names = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div, 562 + .num_parents = 7, 563 + .ops = &clk_rcg2_ops, 564 + }, 565 + }; 566 + 567 + static const struct freq_tbl ftbl_rbcpr_clk_src[] = { 568 + F(19200000, P_XO, 1, 0, 0), 569 + F(50000000, P_GPLL0, 12, 0, 0), 570 + { } 571 + }; 572 + 573 + static struct clk_rcg2 rbcpr_clk_src = { 574 + .cmd_rcgr = 0x4060, 575 + .hid_width = 5, 576 + .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map, 577 + .freq_tbl = ftbl_rbcpr_clk_src, 578 + .clkr.hw.init = &(struct clk_init_data){ 579 + .name = "rbcpr_clk_src", 580 + .parent_names = mmss_xo_mmpll0_gpll0_gpll0_div, 581 + .num_parents = 4, 582 + .ops = &clk_rcg2_ops, 583 + }, 584 + }; 585 + 586 + static const struct freq_tbl ftbl_video_core_clk_src[] = { 587 + F(75000000, P_GPLL0_DIV, 4, 0, 0), 588 + F(150000000, P_GPLL0, 4, 0, 0), 589 + F(346666667, P_MMPLL3, 3, 0, 0), 590 + F(520000000, P_MMPLL3, 2, 0, 0), 591 + { } 592 + }; 593 + 594 + static struct clk_rcg2 video_core_clk_src = { 595 + .cmd_rcgr = 0x1000, 596 + .mnd_width = 8, 597 + .hid_width = 5, 598 + .parent_map = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map, 599 + .freq_tbl = ftbl_video_core_clk_src, 600 + .clkr.hw.init = &(struct clk_init_data){ 601 + .name = "video_core_clk_src", 602 + .parent_names = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div, 603 + .num_parents = 5, 604 + .ops = &clk_rcg2_ops, 605 + }, 606 + }; 607 + 608 + static struct clk_rcg2 video_subcore0_clk_src = { 609 + .cmd_rcgr = 0x1060, 610 + .mnd_width = 8, 611 + .hid_width = 5, 612 + .parent_map = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map, 613 + .freq_tbl = ftbl_video_core_clk_src, 614 + .clkr.hw.init = &(struct clk_init_data){ 615 + .name = "video_subcore0_clk_src", 616 + .parent_names = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div, 617 + .num_parents = 5, 618 + .ops = &clk_rcg2_ops, 619 + }, 620 + }; 621 + 622 + static struct clk_rcg2 video_subcore1_clk_src = { 623 + .cmd_rcgr = 0x1080, 624 + .mnd_width = 8, 625 + .hid_width = 5, 626 + .parent_map = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map, 627 + .freq_tbl = ftbl_video_core_clk_src, 628 + .clkr.hw.init = &(struct clk_init_data){ 629 + .name = "video_subcore1_clk_src", 630 + .parent_names = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div, 631 + .num_parents = 5, 632 + .ops = &clk_rcg2_ops, 633 + }, 634 + }; 635 + 636 + static struct clk_rcg2 pclk0_clk_src = { 637 + .cmd_rcgr = 0x2000, 638 + .mnd_width = 8, 639 + .hid_width = 5, 640 + .parent_map = mmss_xo_dsi0pll_dsi1pll_map, 641 + .clkr.hw.init = &(struct clk_init_data){ 642 + .name = "pclk0_clk_src", 643 + .parent_names = mmss_xo_dsi0pll_dsi1pll, 644 + .num_parents = 3, 645 + .ops = &clk_pixel_ops, 646 + .flags = CLK_SET_RATE_PARENT, 647 + }, 648 + }; 649 + 650 + static struct clk_rcg2 pclk1_clk_src = { 651 + .cmd_rcgr = 0x2020, 652 + .mnd_width = 8, 653 + .hid_width = 5, 654 + .parent_map = mmss_xo_dsi0pll_dsi1pll_map, 655 + .clkr.hw.init = &(struct clk_init_data){ 656 + .name = "pclk1_clk_src", 657 + .parent_names = mmss_xo_dsi0pll_dsi1pll, 658 + .num_parents = 3, 659 + .ops = &clk_pixel_ops, 660 + .flags = CLK_SET_RATE_PARENT, 661 + }, 662 + }; 663 + 664 + static const struct freq_tbl ftbl_mdp_clk_src[] = { 665 + F(85714286, P_GPLL0, 7, 0, 0), 666 + F(100000000, P_GPLL0, 6, 0, 0), 667 + F(150000000, P_GPLL0, 4, 0, 0), 668 + F(171428571, P_GPLL0, 3.5, 0, 0), 669 + F(200000000, P_GPLL0, 3, 0, 0), 670 + F(275000000, P_MMPLL5, 3, 0, 0), 671 + F(300000000, P_GPLL0, 2, 0, 0), 672 + F(330000000, P_MMPLL5, 2.5, 0, 0), 673 + F(412500000, P_MMPLL5, 2, 0, 0), 674 + { } 675 + }; 676 + 677 + static struct clk_rcg2 mdp_clk_src = { 678 + .cmd_rcgr = 0x2040, 679 + .hid_width = 5, 680 + .parent_map = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map, 681 + .freq_tbl = ftbl_mdp_clk_src, 682 + .clkr.hw.init = &(struct clk_init_data){ 683 + .name = "mdp_clk_src", 684 + .parent_names = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div, 685 + .num_parents = 5, 686 + .ops = &clk_rcg2_ops, 687 + }, 688 + }; 689 + 690 + static struct freq_tbl extpclk_freq_tbl[] = { 691 + { .src = P_HDMIPLL }, 692 + { } 693 + }; 694 + 695 + static struct clk_rcg2 extpclk_clk_src = { 696 + .cmd_rcgr = 0x2060, 697 + .hid_width = 5, 698 + .parent_map = mmss_xo_hdmi_map, 699 + .freq_tbl = extpclk_freq_tbl, 700 + .clkr.hw.init = &(struct clk_init_data){ 701 + .name = "extpclk_clk_src", 702 + .parent_names = mmss_xo_hdmi, 703 + .num_parents = 2, 704 + .ops = &clk_byte_ops, 705 + .flags = CLK_SET_RATE_PARENT, 706 + }, 707 + }; 708 + 709 + static struct freq_tbl ftbl_mdss_vsync_clk[] = { 710 + F(19200000, P_XO, 1, 0, 0), 711 + { } 712 + }; 713 + 714 + static struct clk_rcg2 vsync_clk_src = { 715 + .cmd_rcgr = 0x2080, 716 + .hid_width = 5, 717 + .parent_map = mmss_xo_gpll0_gpll0_div_map, 718 + .freq_tbl = ftbl_mdss_vsync_clk, 719 + .clkr.hw.init = &(struct clk_init_data){ 720 + .name = "vsync_clk_src", 721 + .parent_names = mmss_xo_gpll0_gpll0_div, 722 + .num_parents = 3, 723 + .ops = &clk_rcg2_ops, 724 + }, 725 + }; 726 + 727 + static struct freq_tbl ftbl_mdss_hdmi_clk[] = { 728 + F(19200000, P_XO, 1, 0, 0), 729 + { } 730 + }; 731 + 732 + static struct clk_rcg2 hdmi_clk_src = { 733 + .cmd_rcgr = 0x2100, 734 + .hid_width = 5, 735 + .parent_map = mmss_xo_gpll0_gpll0_div_map, 736 + .freq_tbl = ftbl_mdss_hdmi_clk, 737 + .clkr.hw.init = &(struct clk_init_data){ 738 + .name = "hdmi_clk_src", 739 + .parent_names = mmss_xo_gpll0_gpll0_div, 740 + .num_parents = 3, 741 + .ops = &clk_rcg2_ops, 742 + }, 743 + }; 744 + 745 + static struct clk_rcg2 byte0_clk_src = { 746 + .cmd_rcgr = 0x2120, 747 + .hid_width = 5, 748 + .parent_map = mmss_xo_dsibyte_map, 749 + .clkr.hw.init = &(struct clk_init_data){ 750 + .name = "byte0_clk_src", 751 + .parent_names = mmss_xo_dsibyte, 752 + .num_parents = 3, 753 + .ops = &clk_byte2_ops, 754 + .flags = CLK_SET_RATE_PARENT, 755 + }, 756 + }; 757 + 758 + static struct clk_rcg2 byte1_clk_src = { 759 + .cmd_rcgr = 0x2140, 760 + .hid_width = 5, 761 + .parent_map = mmss_xo_dsibyte_map, 762 + .clkr.hw.init = &(struct clk_init_data){ 763 + .name = "byte1_clk_src", 764 + .parent_names = mmss_xo_dsibyte, 765 + .num_parents = 3, 766 + .ops = &clk_byte2_ops, 767 + .flags = CLK_SET_RATE_PARENT, 768 + }, 769 + }; 770 + 771 + static struct freq_tbl ftbl_mdss_esc0_1_clk[] = { 772 + F(19200000, P_XO, 1, 0, 0), 773 + { } 774 + }; 775 + 776 + static struct clk_rcg2 esc0_clk_src = { 777 + .cmd_rcgr = 0x2160, 778 + .hid_width = 5, 779 + .parent_map = mmss_xo_dsibyte_map, 780 + .freq_tbl = ftbl_mdss_esc0_1_clk, 781 + .clkr.hw.init = &(struct clk_init_data){ 782 + .name = "esc0_clk_src", 783 + .parent_names = mmss_xo_dsibyte, 784 + .num_parents = 3, 785 + .ops = &clk_rcg2_ops, 786 + }, 787 + }; 788 + 789 + static struct clk_rcg2 esc1_clk_src = { 790 + .cmd_rcgr = 0x2180, 791 + .hid_width = 5, 792 + .parent_map = mmss_xo_dsibyte_map, 793 + .freq_tbl = ftbl_mdss_esc0_1_clk, 794 + .clkr.hw.init = &(struct clk_init_data){ 795 + .name = "esc1_clk_src", 796 + .parent_names = mmss_xo_dsibyte, 797 + .num_parents = 3, 798 + .ops = &clk_rcg2_ops, 799 + }, 800 + }; 801 + 802 + static const struct freq_tbl ftbl_camss_gp0_clk_src[] = { 803 + F(10000, P_XO, 16, 1, 120), 804 + F(24000, P_XO, 16, 1, 50), 805 + F(6000000, P_GPLL0_DIV, 10, 1, 5), 806 + F(12000000, P_GPLL0_DIV, 1, 1, 25), 807 + F(13000000, P_GPLL0_DIV, 2, 13, 150), 808 + F(24000000, P_GPLL0_DIV, 1, 2, 25), 809 + { } 810 + }; 811 + 812 + static struct clk_rcg2 camss_gp0_clk_src = { 813 + .cmd_rcgr = 0x3420, 814 + .mnd_width = 8, 815 + .hid_width = 5, 816 + .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map, 817 + .freq_tbl = ftbl_camss_gp0_clk_src, 818 + .clkr.hw.init = &(struct clk_init_data){ 819 + .name = "camss_gp0_clk_src", 820 + .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div, 821 + .num_parents = 5, 822 + .ops = &clk_rcg2_ops, 823 + }, 824 + }; 825 + 826 + static struct clk_rcg2 camss_gp1_clk_src = { 827 + .cmd_rcgr = 0x3450, 828 + .mnd_width = 8, 829 + .hid_width = 5, 830 + .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map, 831 + .freq_tbl = ftbl_camss_gp0_clk_src, 832 + .clkr.hw.init = &(struct clk_init_data){ 833 + .name = "camss_gp1_clk_src", 834 + .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div, 835 + .num_parents = 5, 836 + .ops = &clk_rcg2_ops, 837 + }, 838 + }; 839 + 840 + static const struct freq_tbl ftbl_mclk0_clk_src[] = { 841 + F(4800000, P_XO, 4, 0, 0), 842 + F(6000000, P_GPLL0_DIV, 10, 1, 5), 843 + F(8000000, P_GPLL0_DIV, 1, 2, 75), 844 + F(9600000, P_XO, 2, 0, 0), 845 + F(16666667, P_GPLL0_DIV, 2, 1, 9), 846 + F(19200000, P_XO, 1, 0, 0), 847 + F(24000000, P_GPLL0_DIV, 1, 2, 25), 848 + F(33333333, P_GPLL0_DIV, 1, 1, 9), 849 + F(48000000, P_GPLL0, 1, 2, 25), 850 + F(66666667, P_GPLL0, 1, 1, 9), 851 + { } 852 + }; 853 + 854 + static struct clk_rcg2 mclk0_clk_src = { 855 + .cmd_rcgr = 0x3360, 856 + .mnd_width = 8, 857 + .hid_width = 5, 858 + .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map, 859 + .freq_tbl = ftbl_mclk0_clk_src, 860 + .clkr.hw.init = &(struct clk_init_data){ 861 + .name = "mclk0_clk_src", 862 + .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div, 863 + .num_parents = 5, 864 + .ops = &clk_rcg2_ops, 865 + }, 866 + }; 867 + 868 + static struct clk_rcg2 mclk1_clk_src = { 869 + .cmd_rcgr = 0x3390, 870 + .mnd_width = 8, 871 + .hid_width = 5, 872 + .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map, 873 + .freq_tbl = ftbl_mclk0_clk_src, 874 + .clkr.hw.init = &(struct clk_init_data){ 875 + .name = "mclk1_clk_src", 876 + .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div, 877 + .num_parents = 5, 878 + .ops = &clk_rcg2_ops, 879 + }, 880 + }; 881 + 882 + static struct clk_rcg2 mclk2_clk_src = { 883 + .cmd_rcgr = 0x33c0, 884 + .mnd_width = 8, 885 + .hid_width = 5, 886 + .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map, 887 + .freq_tbl = ftbl_mclk0_clk_src, 888 + .clkr.hw.init = &(struct clk_init_data){ 889 + .name = "mclk2_clk_src", 890 + .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div, 891 + .num_parents = 5, 892 + .ops = &clk_rcg2_ops, 893 + }, 894 + }; 895 + 896 + static struct clk_rcg2 mclk3_clk_src = { 897 + .cmd_rcgr = 0x33f0, 898 + .mnd_width = 8, 899 + .hid_width = 5, 900 + .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map, 901 + .freq_tbl = ftbl_mclk0_clk_src, 902 + .clkr.hw.init = &(struct clk_init_data){ 903 + .name = "mclk3_clk_src", 904 + .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div, 905 + .num_parents = 5, 906 + .ops = &clk_rcg2_ops, 907 + }, 908 + }; 909 + 910 + static const struct freq_tbl ftbl_cci_clk_src[] = { 911 + F(19200000, P_XO, 1, 0, 0), 912 + F(37500000, P_GPLL0, 16, 0, 0), 913 + F(50000000, P_GPLL0, 12, 0, 0), 914 + F(100000000, P_GPLL0, 6, 0, 0), 915 + { } 916 + }; 917 + 918 + static struct clk_rcg2 cci_clk_src = { 919 + .cmd_rcgr = 0x3300, 920 + .mnd_width = 8, 921 + .hid_width = 5, 922 + .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map, 923 + .freq_tbl = ftbl_cci_clk_src, 924 + .clkr.hw.init = &(struct clk_init_data){ 925 + .name = "cci_clk_src", 926 + .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div, 927 + .num_parents = 5, 928 + .ops = &clk_rcg2_ops, 929 + }, 930 + }; 931 + 932 + static const struct freq_tbl ftbl_csi0phytimer_clk_src[] = { 933 + F(100000000, P_GPLL0_DIV, 3, 0, 0), 934 + F(200000000, P_GPLL0, 3, 0, 0), 935 + F(266666667, P_MMPLL0, 3, 0, 0), 936 + { } 937 + }; 938 + 939 + static struct clk_rcg2 csi0phytimer_clk_src = { 940 + .cmd_rcgr = 0x3000, 941 + .hid_width = 5, 942 + .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 943 + .freq_tbl = ftbl_csi0phytimer_clk_src, 944 + .clkr.hw.init = &(struct clk_init_data){ 945 + .name = "csi0phytimer_clk_src", 946 + .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 947 + .num_parents = 7, 948 + .ops = &clk_rcg2_ops, 949 + }, 950 + }; 951 + 952 + static struct clk_rcg2 csi1phytimer_clk_src = { 953 + .cmd_rcgr = 0x3030, 954 + .hid_width = 5, 955 + .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 956 + .freq_tbl = ftbl_csi0phytimer_clk_src, 957 + .clkr.hw.init = &(struct clk_init_data){ 958 + .name = "csi1phytimer_clk_src", 959 + .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 960 + .num_parents = 7, 961 + .ops = &clk_rcg2_ops, 962 + }, 963 + }; 964 + 965 + static struct clk_rcg2 csi2phytimer_clk_src = { 966 + .cmd_rcgr = 0x3060, 967 + .hid_width = 5, 968 + .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 969 + .freq_tbl = ftbl_csi0phytimer_clk_src, 970 + .clkr.hw.init = &(struct clk_init_data){ 971 + .name = "csi2phytimer_clk_src", 972 + .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 973 + .num_parents = 7, 974 + .ops = &clk_rcg2_ops, 975 + }, 976 + }; 977 + 978 + static const struct freq_tbl ftbl_csiphy0_3p_clk_src[] = { 979 + F(100000000, P_GPLL0_DIV, 3, 0, 0), 980 + F(200000000, P_GPLL0, 3, 0, 0), 981 + F(320000000, P_MMPLL4, 3, 0, 0), 982 + F(384000000, P_MMPLL4, 2.5, 0, 0), 983 + { } 984 + }; 985 + 986 + static struct clk_rcg2 csiphy0_3p_clk_src = { 987 + .cmd_rcgr = 0x3240, 988 + .hid_width = 5, 989 + .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 990 + .freq_tbl = ftbl_csiphy0_3p_clk_src, 991 + .clkr.hw.init = &(struct clk_init_data){ 992 + .name = "csiphy0_3p_clk_src", 993 + .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 994 + .num_parents = 7, 995 + .ops = &clk_rcg2_ops, 996 + }, 997 + }; 998 + 999 + static struct clk_rcg2 csiphy1_3p_clk_src = { 1000 + .cmd_rcgr = 0x3260, 1001 + .hid_width = 5, 1002 + .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1003 + .freq_tbl = ftbl_csiphy0_3p_clk_src, 1004 + .clkr.hw.init = &(struct clk_init_data){ 1005 + .name = "csiphy1_3p_clk_src", 1006 + .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1007 + .num_parents = 7, 1008 + .ops = &clk_rcg2_ops, 1009 + }, 1010 + }; 1011 + 1012 + static struct clk_rcg2 csiphy2_3p_clk_src = { 1013 + .cmd_rcgr = 0x3280, 1014 + .hid_width = 5, 1015 + .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1016 + .freq_tbl = ftbl_csiphy0_3p_clk_src, 1017 + .clkr.hw.init = &(struct clk_init_data){ 1018 + .name = "csiphy2_3p_clk_src", 1019 + .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1020 + .num_parents = 7, 1021 + .ops = &clk_rcg2_ops, 1022 + }, 1023 + }; 1024 + 1025 + static const struct freq_tbl ftbl_jpeg0_clk_src[] = { 1026 + F(75000000, P_GPLL0_DIV, 4, 0, 0), 1027 + F(150000000, P_GPLL0, 4, 0, 0), 1028 + F(228571429, P_MMPLL0, 3.5, 0, 0), 1029 + F(266666667, P_MMPLL0, 3, 0, 0), 1030 + F(320000000, P_MMPLL0, 2.5, 0, 0), 1031 + F(480000000, P_MMPLL4, 2, 0, 0), 1032 + { } 1033 + }; 1034 + 1035 + static struct clk_rcg2 jpeg0_clk_src = { 1036 + .cmd_rcgr = 0x3500, 1037 + .hid_width = 5, 1038 + .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1039 + .freq_tbl = ftbl_jpeg0_clk_src, 1040 + .clkr.hw.init = &(struct clk_init_data){ 1041 + .name = "jpeg0_clk_src", 1042 + .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1043 + .num_parents = 7, 1044 + .ops = &clk_rcg2_ops, 1045 + }, 1046 + }; 1047 + 1048 + static const struct freq_tbl ftbl_jpeg2_clk_src[] = { 1049 + F(75000000, P_GPLL0_DIV, 4, 0, 0), 1050 + F(150000000, P_GPLL0, 4, 0, 0), 1051 + F(228571429, P_MMPLL0, 3.5, 0, 0), 1052 + F(266666667, P_MMPLL0, 3, 0, 0), 1053 + F(320000000, P_MMPLL0, 2.5, 0, 0), 1054 + { } 1055 + }; 1056 + 1057 + static struct clk_rcg2 jpeg2_clk_src = { 1058 + .cmd_rcgr = 0x3540, 1059 + .hid_width = 5, 1060 + .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1061 + .freq_tbl = ftbl_jpeg2_clk_src, 1062 + .clkr.hw.init = &(struct clk_init_data){ 1063 + .name = "jpeg2_clk_src", 1064 + .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1065 + .num_parents = 7, 1066 + .ops = &clk_rcg2_ops, 1067 + }, 1068 + }; 1069 + 1070 + static struct clk_rcg2 jpeg_dma_clk_src = { 1071 + .cmd_rcgr = 0x3560, 1072 + .hid_width = 5, 1073 + .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1074 + .freq_tbl = ftbl_jpeg0_clk_src, 1075 + .clkr.hw.init = &(struct clk_init_data){ 1076 + .name = "jpeg_dma_clk_src", 1077 + .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1078 + .num_parents = 7, 1079 + .ops = &clk_rcg2_ops, 1080 + }, 1081 + }; 1082 + 1083 + static const struct freq_tbl ftbl_vfe0_clk_src[] = { 1084 + F(75000000, P_GPLL0_DIV, 4, 0, 0), 1085 + F(100000000, P_GPLL0_DIV, 3, 0, 0), 1086 + F(300000000, P_GPLL0, 2, 0, 0), 1087 + F(320000000, P_MMPLL0, 2.5, 0, 0), 1088 + F(480000000, P_MMPLL4, 2, 0, 0), 1089 + F(600000000, P_GPLL0, 1, 0, 0), 1090 + { } 1091 + }; 1092 + 1093 + static struct clk_rcg2 vfe0_clk_src = { 1094 + .cmd_rcgr = 0x3600, 1095 + .hid_width = 5, 1096 + .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1097 + .freq_tbl = ftbl_vfe0_clk_src, 1098 + .clkr.hw.init = &(struct clk_init_data){ 1099 + .name = "vfe0_clk_src", 1100 + .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1101 + .num_parents = 7, 1102 + .ops = &clk_rcg2_ops, 1103 + }, 1104 + }; 1105 + 1106 + static struct clk_rcg2 vfe1_clk_src = { 1107 + .cmd_rcgr = 0x3620, 1108 + .hid_width = 5, 1109 + .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1110 + .freq_tbl = ftbl_vfe0_clk_src, 1111 + .clkr.hw.init = &(struct clk_init_data){ 1112 + .name = "vfe1_clk_src", 1113 + .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1114 + .num_parents = 7, 1115 + .ops = &clk_rcg2_ops, 1116 + }, 1117 + }; 1118 + 1119 + static const struct freq_tbl ftbl_cpp_clk_src[] = { 1120 + F(100000000, P_GPLL0_DIV, 3, 0, 0), 1121 + F(200000000, P_GPLL0, 3, 0, 0), 1122 + F(320000000, P_MMPLL0, 2.5, 0, 0), 1123 + F(480000000, P_MMPLL4, 2, 0, 0), 1124 + F(640000000, P_MMPLL4, 1.5, 0, 0), 1125 + { } 1126 + }; 1127 + 1128 + static struct clk_rcg2 cpp_clk_src = { 1129 + .cmd_rcgr = 0x3640, 1130 + .hid_width = 5, 1131 + .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1132 + .freq_tbl = ftbl_cpp_clk_src, 1133 + .clkr.hw.init = &(struct clk_init_data){ 1134 + .name = "cpp_clk_src", 1135 + .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1136 + .num_parents = 7, 1137 + .ops = &clk_rcg2_ops, 1138 + }, 1139 + }; 1140 + 1141 + static const struct freq_tbl ftbl_csi0_clk_src[] = { 1142 + F(100000000, P_GPLL0_DIV, 3, 0, 0), 1143 + F(200000000, P_GPLL0, 3, 0, 0), 1144 + F(266666667, P_MMPLL0, 3, 0, 0), 1145 + F(480000000, P_MMPLL4, 2, 0, 0), 1146 + F(600000000, P_GPLL0, 1, 0, 0), 1147 + { } 1148 + }; 1149 + 1150 + static struct clk_rcg2 csi0_clk_src = { 1151 + .cmd_rcgr = 0x3090, 1152 + .hid_width = 5, 1153 + .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1154 + .freq_tbl = ftbl_csi0_clk_src, 1155 + .clkr.hw.init = &(struct clk_init_data){ 1156 + .name = "csi0_clk_src", 1157 + .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1158 + .num_parents = 7, 1159 + .ops = &clk_rcg2_ops, 1160 + }, 1161 + }; 1162 + 1163 + static struct clk_rcg2 csi1_clk_src = { 1164 + .cmd_rcgr = 0x3100, 1165 + .hid_width = 5, 1166 + .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1167 + .freq_tbl = ftbl_csi0_clk_src, 1168 + .clkr.hw.init = &(struct clk_init_data){ 1169 + .name = "csi1_clk_src", 1170 + .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1171 + .num_parents = 7, 1172 + .ops = &clk_rcg2_ops, 1173 + }, 1174 + }; 1175 + 1176 + static struct clk_rcg2 csi2_clk_src = { 1177 + .cmd_rcgr = 0x3160, 1178 + .hid_width = 5, 1179 + .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1180 + .freq_tbl = ftbl_csi0_clk_src, 1181 + .clkr.hw.init = &(struct clk_init_data){ 1182 + .name = "csi2_clk_src", 1183 + .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1184 + .num_parents = 7, 1185 + .ops = &clk_rcg2_ops, 1186 + }, 1187 + }; 1188 + 1189 + static struct clk_rcg2 csi3_clk_src = { 1190 + .cmd_rcgr = 0x31c0, 1191 + .hid_width = 5, 1192 + .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1193 + .freq_tbl = ftbl_csi0_clk_src, 1194 + .clkr.hw.init = &(struct clk_init_data){ 1195 + .name = "csi3_clk_src", 1196 + .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1197 + .num_parents = 7, 1198 + .ops = &clk_rcg2_ops, 1199 + }, 1200 + }; 1201 + 1202 + static const struct freq_tbl ftbl_fd_core_clk_src[] = { 1203 + F(100000000, P_GPLL0_DIV, 3, 0, 0), 1204 + F(200000000, P_GPLL0, 3, 0, 0), 1205 + F(400000000, P_MMPLL0, 2, 0, 0), 1206 + { } 1207 + }; 1208 + 1209 + static struct clk_rcg2 fd_core_clk_src = { 1210 + .cmd_rcgr = 0x3b00, 1211 + .hid_width = 5, 1212 + .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map, 1213 + .freq_tbl = ftbl_fd_core_clk_src, 1214 + .clkr.hw.init = &(struct clk_init_data){ 1215 + .name = "fd_core_clk_src", 1216 + .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div, 1217 + .num_parents = 5, 1218 + .ops = &clk_rcg2_ops, 1219 + }, 1220 + }; 1221 + 1222 + static struct clk_branch mmss_mmagic_ahb_clk = { 1223 + .halt_reg = 0x5024, 1224 + .clkr = { 1225 + .enable_reg = 0x5024, 1226 + .enable_mask = BIT(0), 1227 + .hw.init = &(struct clk_init_data){ 1228 + .name = "mmss_mmagic_ahb_clk", 1229 + .parent_names = (const char *[]){ "ahb_clk_src" }, 1230 + .num_parents = 1, 1231 + .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 1232 + .ops = &clk_branch2_ops, 1233 + }, 1234 + }, 1235 + }; 1236 + 1237 + static struct clk_branch mmss_mmagic_cfg_ahb_clk = { 1238 + .halt_reg = 0x5054, 1239 + .clkr = { 1240 + .enable_reg = 0x5054, 1241 + .enable_mask = BIT(0), 1242 + .hw.init = &(struct clk_init_data){ 1243 + .name = "mmss_mmagic_cfg_ahb_clk", 1244 + .parent_names = (const char *[]){ "ahb_clk_src" }, 1245 + .num_parents = 1, 1246 + .flags = CLK_SET_RATE_PARENT, 1247 + .ops = &clk_branch2_ops, 1248 + }, 1249 + }, 1250 + }; 1251 + 1252 + static struct clk_branch mmss_misc_ahb_clk = { 1253 + .halt_reg = 0x5018, 1254 + .clkr = { 1255 + .enable_reg = 0x5018, 1256 + .enable_mask = BIT(0), 1257 + .hw.init = &(struct clk_init_data){ 1258 + .name = "mmss_misc_ahb_clk", 1259 + .parent_names = (const char *[]){ "ahb_clk_src" }, 1260 + .num_parents = 1, 1261 + .flags = CLK_SET_RATE_PARENT, 1262 + .ops = &clk_branch2_ops, 1263 + }, 1264 + }, 1265 + }; 1266 + 1267 + static struct clk_branch mmss_misc_cxo_clk = { 1268 + .halt_reg = 0x5014, 1269 + .clkr = { 1270 + .enable_reg = 0x5014, 1271 + .enable_mask = BIT(0), 1272 + .hw.init = &(struct clk_init_data){ 1273 + .name = "mmss_misc_cxo_clk", 1274 + .parent_names = (const char *[]){ "xo" }, 1275 + .num_parents = 1, 1276 + .ops = &clk_branch2_ops, 1277 + }, 1278 + }, 1279 + }; 1280 + 1281 + static struct clk_branch mmss_mmagic_axi_clk = { 1282 + .halt_reg = 0x506c, 1283 + .clkr = { 1284 + .enable_reg = 0x506c, 1285 + .enable_mask = BIT(0), 1286 + .hw.init = &(struct clk_init_data){ 1287 + .name = "mmss_mmagic_axi_clk", 1288 + .parent_names = (const char *[]){ "axi_clk_src" }, 1289 + .num_parents = 1, 1290 + .flags = CLK_SET_RATE_PARENT, 1291 + .ops = &clk_branch2_ops, 1292 + }, 1293 + }, 1294 + }; 1295 + 1296 + static struct clk_branch mmss_mmagic_maxi_clk = { 1297 + .halt_reg = 0x5074, 1298 + .clkr = { 1299 + .enable_reg = 0x5074, 1300 + .enable_mask = BIT(0), 1301 + .hw.init = &(struct clk_init_data){ 1302 + .name = "mmss_mmagic_maxi_clk", 1303 + .parent_names = (const char *[]){ "maxi_clk_src" }, 1304 + .num_parents = 1, 1305 + .flags = CLK_SET_RATE_PARENT, 1306 + .ops = &clk_branch2_ops, 1307 + }, 1308 + }, 1309 + }; 1310 + 1311 + static struct clk_branch mmagic_camss_axi_clk = { 1312 + .halt_reg = 0x3c44, 1313 + .clkr = { 1314 + .enable_reg = 0x3c44, 1315 + .enable_mask = BIT(0), 1316 + .hw.init = &(struct clk_init_data){ 1317 + .name = "mmagic_camss_axi_clk", 1318 + .parent_names = (const char *[]){ "axi_clk_src" }, 1319 + .num_parents = 1, 1320 + .flags = CLK_SET_RATE_PARENT, 1321 + .ops = &clk_branch2_ops, 1322 + }, 1323 + }, 1324 + }; 1325 + 1326 + static struct clk_branch mmagic_camss_noc_cfg_ahb_clk = { 1327 + .halt_reg = 0x3c48, 1328 + .clkr = { 1329 + .enable_reg = 0x3c48, 1330 + .enable_mask = BIT(0), 1331 + .hw.init = &(struct clk_init_data){ 1332 + .name = "mmagic_camss_noc_cfg_ahb_clk", 1333 + .parent_names = (const char *[]){ "gcc_mmss_noc_cfg_ahb_clk" }, 1334 + .num_parents = 1, 1335 + .flags = CLK_SET_RATE_PARENT, 1336 + .ops = &clk_branch2_ops, 1337 + }, 1338 + }, 1339 + }; 1340 + 1341 + static struct clk_branch smmu_vfe_ahb_clk = { 1342 + .halt_reg = 0x3c04, 1343 + .clkr = { 1344 + .enable_reg = 0x3c04, 1345 + .enable_mask = BIT(0), 1346 + .hw.init = &(struct clk_init_data){ 1347 + .name = "smmu_vfe_ahb_clk", 1348 + .parent_names = (const char *[]){ "ahb_clk_src" }, 1349 + .num_parents = 1, 1350 + .flags = CLK_SET_RATE_PARENT, 1351 + .ops = &clk_branch2_ops, 1352 + }, 1353 + }, 1354 + }; 1355 + 1356 + static struct clk_branch smmu_vfe_axi_clk = { 1357 + .halt_reg = 0x3c08, 1358 + .clkr = { 1359 + .enable_reg = 0x3c08, 1360 + .enable_mask = BIT(0), 1361 + .hw.init = &(struct clk_init_data){ 1362 + .name = "smmu_vfe_axi_clk", 1363 + .parent_names = (const char *[]){ "axi_clk_src" }, 1364 + .num_parents = 1, 1365 + .flags = CLK_SET_RATE_PARENT, 1366 + .ops = &clk_branch2_ops, 1367 + }, 1368 + }, 1369 + }; 1370 + 1371 + static struct clk_branch smmu_cpp_ahb_clk = { 1372 + .halt_reg = 0x3c14, 1373 + .clkr = { 1374 + .enable_reg = 0x3c14, 1375 + .enable_mask = BIT(0), 1376 + .hw.init = &(struct clk_init_data){ 1377 + .name = "smmu_cpp_ahb_clk", 1378 + .parent_names = (const char *[]){ "ahb_clk_src" }, 1379 + .num_parents = 1, 1380 + .flags = CLK_SET_RATE_PARENT, 1381 + .ops = &clk_branch2_ops, 1382 + }, 1383 + }, 1384 + }; 1385 + 1386 + static struct clk_branch smmu_cpp_axi_clk = { 1387 + .halt_reg = 0x3c18, 1388 + .clkr = { 1389 + .enable_reg = 0x3c18, 1390 + .enable_mask = BIT(0), 1391 + .hw.init = &(struct clk_init_data){ 1392 + .name = "smmu_cpp_axi_clk", 1393 + .parent_names = (const char *[]){ "axi_clk_src" }, 1394 + .num_parents = 1, 1395 + .flags = CLK_SET_RATE_PARENT, 1396 + .ops = &clk_branch2_ops, 1397 + }, 1398 + }, 1399 + }; 1400 + 1401 + static struct clk_branch smmu_jpeg_ahb_clk = { 1402 + .halt_reg = 0x3c24, 1403 + .clkr = { 1404 + .enable_reg = 0x3c24, 1405 + .enable_mask = BIT(0), 1406 + .hw.init = &(struct clk_init_data){ 1407 + .name = "smmu_jpeg_ahb_clk", 1408 + .parent_names = (const char *[]){ "ahb_clk_src" }, 1409 + .num_parents = 1, 1410 + .flags = CLK_SET_RATE_PARENT, 1411 + .ops = &clk_branch2_ops, 1412 + }, 1413 + }, 1414 + }; 1415 + 1416 + static struct clk_branch smmu_jpeg_axi_clk = { 1417 + .halt_reg = 0x3c28, 1418 + .clkr = { 1419 + .enable_reg = 0x3c28, 1420 + .enable_mask = BIT(0), 1421 + .hw.init = &(struct clk_init_data){ 1422 + .name = "smmu_jpeg_axi_clk", 1423 + .parent_names = (const char *[]){ "axi_clk_src" }, 1424 + .num_parents = 1, 1425 + .flags = CLK_SET_RATE_PARENT, 1426 + .ops = &clk_branch2_ops, 1427 + }, 1428 + }, 1429 + }; 1430 + 1431 + static struct clk_branch mmagic_mdss_axi_clk = { 1432 + .halt_reg = 0x2474, 1433 + .clkr = { 1434 + .enable_reg = 0x2474, 1435 + .enable_mask = BIT(0), 1436 + .hw.init = &(struct clk_init_data){ 1437 + .name = "mmagic_mdss_axi_clk", 1438 + .parent_names = (const char *[]){ "axi_clk_src" }, 1439 + .num_parents = 1, 1440 + .flags = CLK_SET_RATE_PARENT, 1441 + .ops = &clk_branch2_ops, 1442 + }, 1443 + }, 1444 + }; 1445 + 1446 + static struct clk_branch mmagic_mdss_noc_cfg_ahb_clk = { 1447 + .halt_reg = 0x2478, 1448 + .clkr = { 1449 + .enable_reg = 0x2478, 1450 + .enable_mask = BIT(0), 1451 + .hw.init = &(struct clk_init_data){ 1452 + .name = "mmagic_mdss_noc_cfg_ahb_clk", 1453 + .parent_names = (const char *[]){ "gcc_mmss_noc_cfg_ahb_clk" }, 1454 + .num_parents = 1, 1455 + .flags = CLK_SET_RATE_PARENT, 1456 + .ops = &clk_branch2_ops, 1457 + }, 1458 + }, 1459 + }; 1460 + 1461 + static struct clk_branch smmu_rot_ahb_clk = { 1462 + .halt_reg = 0x2444, 1463 + .clkr = { 1464 + .enable_reg = 0x2444, 1465 + .enable_mask = BIT(0), 1466 + .hw.init = &(struct clk_init_data){ 1467 + .name = "smmu_rot_ahb_clk", 1468 + .parent_names = (const char *[]){ "ahb_clk_src" }, 1469 + .num_parents = 1, 1470 + .flags = CLK_SET_RATE_PARENT, 1471 + .ops = &clk_branch2_ops, 1472 + }, 1473 + }, 1474 + }; 1475 + 1476 + static struct clk_branch smmu_rot_axi_clk = { 1477 + .halt_reg = 0x2448, 1478 + .clkr = { 1479 + .enable_reg = 0x2448, 1480 + .enable_mask = BIT(0), 1481 + .hw.init = &(struct clk_init_data){ 1482 + .name = "smmu_rot_axi_clk", 1483 + .parent_names = (const char *[]){ "axi_clk_src" }, 1484 + .num_parents = 1, 1485 + .flags = CLK_SET_RATE_PARENT, 1486 + .ops = &clk_branch2_ops, 1487 + }, 1488 + }, 1489 + }; 1490 + 1491 + static struct clk_branch smmu_mdp_ahb_clk = { 1492 + .halt_reg = 0x2454, 1493 + .clkr = { 1494 + .enable_reg = 0x2454, 1495 + .enable_mask = BIT(0), 1496 + .hw.init = &(struct clk_init_data){ 1497 + .name = "smmu_mdp_ahb_clk", 1498 + .parent_names = (const char *[]){ "ahb_clk_src" }, 1499 + .num_parents = 1, 1500 + .flags = CLK_SET_RATE_PARENT, 1501 + .ops = &clk_branch2_ops, 1502 + }, 1503 + }, 1504 + }; 1505 + 1506 + static struct clk_branch smmu_mdp_axi_clk = { 1507 + .halt_reg = 0x2458, 1508 + .clkr = { 1509 + .enable_reg = 0x2458, 1510 + .enable_mask = BIT(0), 1511 + .hw.init = &(struct clk_init_data){ 1512 + .name = "smmu_mdp_axi_clk", 1513 + .parent_names = (const char *[]){ "axi_clk_src" }, 1514 + .num_parents = 1, 1515 + .flags = CLK_SET_RATE_PARENT, 1516 + .ops = &clk_branch2_ops, 1517 + }, 1518 + }, 1519 + }; 1520 + 1521 + static struct clk_branch mmagic_video_axi_clk = { 1522 + .halt_reg = 0x1194, 1523 + .clkr = { 1524 + .enable_reg = 0x1194, 1525 + .enable_mask = BIT(0), 1526 + .hw.init = &(struct clk_init_data){ 1527 + .name = "mmagic_video_axi_clk", 1528 + .parent_names = (const char *[]){ "axi_clk_src" }, 1529 + .num_parents = 1, 1530 + .flags = CLK_SET_RATE_PARENT, 1531 + .ops = &clk_branch2_ops, 1532 + }, 1533 + }, 1534 + }; 1535 + 1536 + static struct clk_branch mmagic_video_noc_cfg_ahb_clk = { 1537 + .halt_reg = 0x1198, 1538 + .clkr = { 1539 + .enable_reg = 0x1198, 1540 + .enable_mask = BIT(0), 1541 + .hw.init = &(struct clk_init_data){ 1542 + .name = "mmagic_video_noc_cfg_ahb_clk", 1543 + .parent_names = (const char *[]){ "gcc_mmss_noc_cfg_ahb_clk" }, 1544 + .num_parents = 1, 1545 + .flags = CLK_SET_RATE_PARENT, 1546 + .ops = &clk_branch2_ops, 1547 + }, 1548 + }, 1549 + }; 1550 + 1551 + static struct clk_branch smmu_video_ahb_clk = { 1552 + .halt_reg = 0x1174, 1553 + .clkr = { 1554 + .enable_reg = 0x1174, 1555 + .enable_mask = BIT(0), 1556 + .hw.init = &(struct clk_init_data){ 1557 + .name = "smmu_video_ahb_clk", 1558 + .parent_names = (const char *[]){ "ahb_clk_src" }, 1559 + .num_parents = 1, 1560 + .flags = CLK_SET_RATE_PARENT, 1561 + .ops = &clk_branch2_ops, 1562 + }, 1563 + }, 1564 + }; 1565 + 1566 + static struct clk_branch smmu_video_axi_clk = { 1567 + .halt_reg = 0x1178, 1568 + .clkr = { 1569 + .enable_reg = 0x1178, 1570 + .enable_mask = BIT(0), 1571 + .hw.init = &(struct clk_init_data){ 1572 + .name = "smmu_video_axi_clk", 1573 + .parent_names = (const char *[]){ "axi_clk_src" }, 1574 + .num_parents = 1, 1575 + .flags = CLK_SET_RATE_PARENT, 1576 + .ops = &clk_branch2_ops, 1577 + }, 1578 + }, 1579 + }; 1580 + 1581 + static struct clk_branch mmagic_bimc_axi_clk = { 1582 + .halt_reg = 0x5294, 1583 + .clkr = { 1584 + .enable_reg = 0x5294, 1585 + .enable_mask = BIT(0), 1586 + .hw.init = &(struct clk_init_data){ 1587 + .name = "mmagic_bimc_axi_clk", 1588 + .parent_names = (const char *[]){ "axi_clk_src" }, 1589 + .num_parents = 1, 1590 + .flags = CLK_SET_RATE_PARENT, 1591 + .ops = &clk_branch2_ops, 1592 + }, 1593 + }, 1594 + }; 1595 + 1596 + static struct clk_branch mmagic_bimc_noc_cfg_ahb_clk = { 1597 + .halt_reg = 0x5298, 1598 + .clkr = { 1599 + .enable_reg = 0x5298, 1600 + .enable_mask = BIT(0), 1601 + .hw.init = &(struct clk_init_data){ 1602 + .name = "mmagic_bimc_noc_cfg_ahb_clk", 1603 + .parent_names = (const char *[]){ "gcc_mmss_noc_cfg_ahb_clk" }, 1604 + .num_parents = 1, 1605 + .flags = CLK_SET_RATE_PARENT, 1606 + .ops = &clk_branch2_ops, 1607 + }, 1608 + }, 1609 + }; 1610 + 1611 + static struct clk_branch gpu_gx_gfx3d_clk = { 1612 + .halt_reg = 0x4028, 1613 + .clkr = { 1614 + .enable_reg = 0x4028, 1615 + .enable_mask = BIT(0), 1616 + .hw.init = &(struct clk_init_data){ 1617 + .name = "gpu_gx_gfx3d_clk", 1618 + .parent_names = (const char *[]){ "gfx3d_clk_src" }, 1619 + .num_parents = 1, 1620 + .flags = CLK_SET_RATE_PARENT, 1621 + .ops = &clk_branch2_ops, 1622 + }, 1623 + }, 1624 + }; 1625 + 1626 + static struct clk_branch gpu_gx_rbbmtimer_clk = { 1627 + .halt_reg = 0x40b0, 1628 + .clkr = { 1629 + .enable_reg = 0x40b0, 1630 + .enable_mask = BIT(0), 1631 + .hw.init = &(struct clk_init_data){ 1632 + .name = "gpu_gx_rbbmtimer_clk", 1633 + .parent_names = (const char *[]){ "rbbmtimer_clk_src" }, 1634 + .num_parents = 1, 1635 + .flags = CLK_SET_RATE_PARENT, 1636 + .ops = &clk_branch2_ops, 1637 + }, 1638 + }, 1639 + }; 1640 + 1641 + static struct clk_branch gpu_ahb_clk = { 1642 + .halt_reg = 0x403c, 1643 + .clkr = { 1644 + .enable_reg = 0x403c, 1645 + .enable_mask = BIT(0), 1646 + .hw.init = &(struct clk_init_data){ 1647 + .name = "gpu_ahb_clk", 1648 + .parent_names = (const char *[]){ "ahb_clk_src" }, 1649 + .num_parents = 1, 1650 + .flags = CLK_SET_RATE_PARENT, 1651 + .ops = &clk_branch2_ops, 1652 + }, 1653 + }, 1654 + }; 1655 + 1656 + static struct clk_branch gpu_aon_isense_clk = { 1657 + .halt_reg = 0x4044, 1658 + .clkr = { 1659 + .enable_reg = 0x4044, 1660 + .enable_mask = BIT(0), 1661 + .hw.init = &(struct clk_init_data){ 1662 + .name = "gpu_aon_isense_clk", 1663 + .parent_names = (const char *[]){ "isense_clk_src" }, 1664 + .num_parents = 1, 1665 + .flags = CLK_SET_RATE_PARENT, 1666 + .ops = &clk_branch2_ops, 1667 + }, 1668 + }, 1669 + }; 1670 + 1671 + static struct clk_branch vmem_maxi_clk = { 1672 + .halt_reg = 0x1204, 1673 + .clkr = { 1674 + .enable_reg = 0x1204, 1675 + .enable_mask = BIT(0), 1676 + .hw.init = &(struct clk_init_data){ 1677 + .name = "vmem_maxi_clk", 1678 + .parent_names = (const char *[]){ "maxi_clk_src" }, 1679 + .num_parents = 1, 1680 + .flags = CLK_SET_RATE_PARENT, 1681 + .ops = &clk_branch2_ops, 1682 + }, 1683 + }, 1684 + }; 1685 + 1686 + static struct clk_branch vmem_ahb_clk = { 1687 + .halt_reg = 0x1208, 1688 + .clkr = { 1689 + .enable_reg = 0x1208, 1690 + .enable_mask = BIT(0), 1691 + .hw.init = &(struct clk_init_data){ 1692 + .name = "vmem_ahb_clk", 1693 + .parent_names = (const char *[]){ "ahb_clk_src" }, 1694 + .num_parents = 1, 1695 + .flags = CLK_SET_RATE_PARENT, 1696 + .ops = &clk_branch2_ops, 1697 + }, 1698 + }, 1699 + }; 1700 + 1701 + static struct clk_branch mmss_rbcpr_clk = { 1702 + .halt_reg = 0x4084, 1703 + .clkr = { 1704 + .enable_reg = 0x4084, 1705 + .enable_mask = BIT(0), 1706 + .hw.init = &(struct clk_init_data){ 1707 + .name = "mmss_rbcpr_clk", 1708 + .parent_names = (const char *[]){ "rbcpr_clk_src" }, 1709 + .num_parents = 1, 1710 + .flags = CLK_SET_RATE_PARENT, 1711 + .ops = &clk_branch2_ops, 1712 + }, 1713 + }, 1714 + }; 1715 + 1716 + static struct clk_branch mmss_rbcpr_ahb_clk = { 1717 + .halt_reg = 0x4088, 1718 + .clkr = { 1719 + .enable_reg = 0x4088, 1720 + .enable_mask = BIT(0), 1721 + .hw.init = &(struct clk_init_data){ 1722 + .name = "mmss_rbcpr_ahb_clk", 1723 + .parent_names = (const char *[]){ "ahb_clk_src" }, 1724 + .num_parents = 1, 1725 + .flags = CLK_SET_RATE_PARENT, 1726 + .ops = &clk_branch2_ops, 1727 + }, 1728 + }, 1729 + }; 1730 + 1731 + static struct clk_branch video_core_clk = { 1732 + .halt_reg = 0x1028, 1733 + .clkr = { 1734 + .enable_reg = 0x1028, 1735 + .enable_mask = BIT(0), 1736 + .hw.init = &(struct clk_init_data){ 1737 + .name = "video_core_clk", 1738 + .parent_names = (const char *[]){ "video_core_clk_src" }, 1739 + .num_parents = 1, 1740 + .flags = CLK_SET_RATE_PARENT, 1741 + .ops = &clk_branch2_ops, 1742 + }, 1743 + }, 1744 + }; 1745 + 1746 + static struct clk_branch video_axi_clk = { 1747 + .halt_reg = 0x1034, 1748 + .clkr = { 1749 + .enable_reg = 0x1034, 1750 + .enable_mask = BIT(0), 1751 + .hw.init = &(struct clk_init_data){ 1752 + .name = "video_axi_clk", 1753 + .parent_names = (const char *[]){ "axi_clk_src" }, 1754 + .num_parents = 1, 1755 + .flags = CLK_SET_RATE_PARENT, 1756 + .ops = &clk_branch2_ops, 1757 + }, 1758 + }, 1759 + }; 1760 + 1761 + static struct clk_branch video_maxi_clk = { 1762 + .halt_reg = 0x1038, 1763 + .clkr = { 1764 + .enable_reg = 0x1038, 1765 + .enable_mask = BIT(0), 1766 + .hw.init = &(struct clk_init_data){ 1767 + .name = "video_maxi_clk", 1768 + .parent_names = (const char *[]){ "maxi_clk_src" }, 1769 + .num_parents = 1, 1770 + .flags = CLK_SET_RATE_PARENT, 1771 + .ops = &clk_branch2_ops, 1772 + }, 1773 + }, 1774 + }; 1775 + 1776 + static struct clk_branch video_ahb_clk = { 1777 + .halt_reg = 0x1030, 1778 + .clkr = { 1779 + .enable_reg = 0x1030, 1780 + .enable_mask = BIT(0), 1781 + .hw.init = &(struct clk_init_data){ 1782 + .name = "video_ahb_clk", 1783 + .parent_names = (const char *[]){ "ahb_clk_src" }, 1784 + .num_parents = 1, 1785 + .flags = CLK_SET_RATE_PARENT, 1786 + .ops = &clk_branch2_ops, 1787 + }, 1788 + }, 1789 + }; 1790 + 1791 + static struct clk_branch video_subcore0_clk = { 1792 + .halt_reg = 0x1048, 1793 + .clkr = { 1794 + .enable_reg = 0x1048, 1795 + .enable_mask = BIT(0), 1796 + .hw.init = &(struct clk_init_data){ 1797 + .name = "video_subcore0_clk", 1798 + .parent_names = (const char *[]){ "video_subcore0_clk_src" }, 1799 + .num_parents = 1, 1800 + .flags = CLK_SET_RATE_PARENT, 1801 + .ops = &clk_branch2_ops, 1802 + }, 1803 + }, 1804 + }; 1805 + 1806 + static struct clk_branch video_subcore1_clk = { 1807 + .halt_reg = 0x104c, 1808 + .clkr = { 1809 + .enable_reg = 0x104c, 1810 + .enable_mask = BIT(0), 1811 + .hw.init = &(struct clk_init_data){ 1812 + .name = "video_subcore1_clk", 1813 + .parent_names = (const char *[]){ "video_subcore1_clk_src" }, 1814 + .num_parents = 1, 1815 + .flags = CLK_SET_RATE_PARENT, 1816 + .ops = &clk_branch2_ops, 1817 + }, 1818 + }, 1819 + }; 1820 + 1821 + static struct clk_branch mdss_ahb_clk = { 1822 + .halt_reg = 0x2308, 1823 + .clkr = { 1824 + .enable_reg = 0x2308, 1825 + .enable_mask = BIT(0), 1826 + .hw.init = &(struct clk_init_data){ 1827 + .name = "mdss_ahb_clk", 1828 + .parent_names = (const char *[]){ "ahb_clk_src" }, 1829 + .num_parents = 1, 1830 + .flags = CLK_SET_RATE_PARENT, 1831 + .ops = &clk_branch2_ops, 1832 + }, 1833 + }, 1834 + }; 1835 + 1836 + static struct clk_branch mdss_hdmi_ahb_clk = { 1837 + .halt_reg = 0x230c, 1838 + .clkr = { 1839 + .enable_reg = 0x230c, 1840 + .enable_mask = BIT(0), 1841 + .hw.init = &(struct clk_init_data){ 1842 + .name = "mdss_hdmi_ahb_clk", 1843 + .parent_names = (const char *[]){ "ahb_clk_src" }, 1844 + .num_parents = 1, 1845 + .flags = CLK_SET_RATE_PARENT, 1846 + .ops = &clk_branch2_ops, 1847 + }, 1848 + }, 1849 + }; 1850 + 1851 + static struct clk_branch mdss_axi_clk = { 1852 + .halt_reg = 0x2310, 1853 + .clkr = { 1854 + .enable_reg = 0x2310, 1855 + .enable_mask = BIT(0), 1856 + .hw.init = &(struct clk_init_data){ 1857 + .name = "mdss_axi_clk", 1858 + .parent_names = (const char *[]){ "axi_clk_src" }, 1859 + .num_parents = 1, 1860 + .flags = CLK_SET_RATE_PARENT, 1861 + .ops = &clk_branch2_ops, 1862 + }, 1863 + }, 1864 + }; 1865 + 1866 + static struct clk_branch mdss_pclk0_clk = { 1867 + .halt_reg = 0x2314, 1868 + .clkr = { 1869 + .enable_reg = 0x2314, 1870 + .enable_mask = BIT(0), 1871 + .hw.init = &(struct clk_init_data){ 1872 + .name = "mdss_pclk0_clk", 1873 + .parent_names = (const char *[]){ "pclk0_clk_src" }, 1874 + .num_parents = 1, 1875 + .flags = CLK_SET_RATE_PARENT, 1876 + .ops = &clk_branch2_ops, 1877 + }, 1878 + }, 1879 + }; 1880 + 1881 + static struct clk_branch mdss_pclk1_clk = { 1882 + .halt_reg = 0x2318, 1883 + .clkr = { 1884 + .enable_reg = 0x2318, 1885 + .enable_mask = BIT(0), 1886 + .hw.init = &(struct clk_init_data){ 1887 + .name = "mdss_pclk1_clk", 1888 + .parent_names = (const char *[]){ "pclk1_clk_src" }, 1889 + .num_parents = 1, 1890 + .flags = CLK_SET_RATE_PARENT, 1891 + .ops = &clk_branch2_ops, 1892 + }, 1893 + }, 1894 + }; 1895 + 1896 + static struct clk_branch mdss_mdp_clk = { 1897 + .halt_reg = 0x231c, 1898 + .clkr = { 1899 + .enable_reg = 0x231c, 1900 + .enable_mask = BIT(0), 1901 + .hw.init = &(struct clk_init_data){ 1902 + .name = "mdss_mdp_clk", 1903 + .parent_names = (const char *[]){ "mdp_clk_src" }, 1904 + .num_parents = 1, 1905 + .flags = CLK_SET_RATE_PARENT, 1906 + .ops = &clk_branch2_ops, 1907 + }, 1908 + }, 1909 + }; 1910 + 1911 + static struct clk_branch mdss_extpclk_clk = { 1912 + .halt_reg = 0x2324, 1913 + .clkr = { 1914 + .enable_reg = 0x2324, 1915 + .enable_mask = BIT(0), 1916 + .hw.init = &(struct clk_init_data){ 1917 + .name = "mdss_extpclk_clk", 1918 + .parent_names = (const char *[]){ "extpclk_clk_src" }, 1919 + .num_parents = 1, 1920 + .flags = CLK_SET_RATE_PARENT, 1921 + .ops = &clk_branch2_ops, 1922 + }, 1923 + }, 1924 + }; 1925 + 1926 + static struct clk_branch mdss_vsync_clk = { 1927 + .halt_reg = 0x2328, 1928 + .clkr = { 1929 + .enable_reg = 0x2328, 1930 + .enable_mask = BIT(0), 1931 + .hw.init = &(struct clk_init_data){ 1932 + .name = "mdss_vsync_clk", 1933 + .parent_names = (const char *[]){ "vsync_clk_src" }, 1934 + .num_parents = 1, 1935 + .flags = CLK_SET_RATE_PARENT, 1936 + .ops = &clk_branch2_ops, 1937 + }, 1938 + }, 1939 + }; 1940 + 1941 + static struct clk_branch mdss_hdmi_clk = { 1942 + .halt_reg = 0x2338, 1943 + .clkr = { 1944 + .enable_reg = 0x2338, 1945 + .enable_mask = BIT(0), 1946 + .hw.init = &(struct clk_init_data){ 1947 + .name = "mdss_hdmi_clk", 1948 + .parent_names = (const char *[]){ "hdmi_clk_src" }, 1949 + .num_parents = 1, 1950 + .flags = CLK_SET_RATE_PARENT, 1951 + .ops = &clk_branch2_ops, 1952 + }, 1953 + }, 1954 + }; 1955 + 1956 + static struct clk_branch mdss_byte0_clk = { 1957 + .halt_reg = 0x233c, 1958 + .clkr = { 1959 + .enable_reg = 0x233c, 1960 + .enable_mask = BIT(0), 1961 + .hw.init = &(struct clk_init_data){ 1962 + .name = "mdss_byte0_clk", 1963 + .parent_names = (const char *[]){ "byte0_clk_src" }, 1964 + .num_parents = 1, 1965 + .flags = CLK_SET_RATE_PARENT, 1966 + .ops = &clk_branch2_ops, 1967 + }, 1968 + }, 1969 + }; 1970 + 1971 + static struct clk_branch mdss_byte1_clk = { 1972 + .halt_reg = 0x2340, 1973 + .clkr = { 1974 + .enable_reg = 0x2340, 1975 + .enable_mask = BIT(0), 1976 + .hw.init = &(struct clk_init_data){ 1977 + .name = "mdss_byte1_clk", 1978 + .parent_names = (const char *[]){ "byte1_clk_src" }, 1979 + .num_parents = 1, 1980 + .flags = CLK_SET_RATE_PARENT, 1981 + .ops = &clk_branch2_ops, 1982 + }, 1983 + }, 1984 + }; 1985 + 1986 + static struct clk_branch mdss_esc0_clk = { 1987 + .halt_reg = 0x2344, 1988 + .clkr = { 1989 + .enable_reg = 0x2344, 1990 + .enable_mask = BIT(0), 1991 + .hw.init = &(struct clk_init_data){ 1992 + .name = "mdss_esc0_clk", 1993 + .parent_names = (const char *[]){ "esc0_clk_src" }, 1994 + .num_parents = 1, 1995 + .flags = CLK_SET_RATE_PARENT, 1996 + .ops = &clk_branch2_ops, 1997 + }, 1998 + }, 1999 + }; 2000 + 2001 + static struct clk_branch mdss_esc1_clk = { 2002 + .halt_reg = 0x2348, 2003 + .clkr = { 2004 + .enable_reg = 0x2348, 2005 + .enable_mask = BIT(0), 2006 + .hw.init = &(struct clk_init_data){ 2007 + .name = "mdss_esc1_clk", 2008 + .parent_names = (const char *[]){ "esc1_clk_src" }, 2009 + .num_parents = 1, 2010 + .flags = CLK_SET_RATE_PARENT, 2011 + .ops = &clk_branch2_ops, 2012 + }, 2013 + }, 2014 + }; 2015 + 2016 + static struct clk_branch camss_top_ahb_clk = { 2017 + .halt_reg = 0x3484, 2018 + .clkr = { 2019 + .enable_reg = 0x3484, 2020 + .enable_mask = BIT(0), 2021 + .hw.init = &(struct clk_init_data){ 2022 + .name = "camss_top_ahb_clk", 2023 + .parent_names = (const char *[]){ "ahb_clk_src" }, 2024 + .num_parents = 1, 2025 + .flags = CLK_SET_RATE_PARENT, 2026 + .ops = &clk_branch2_ops, 2027 + }, 2028 + }, 2029 + }; 2030 + 2031 + static struct clk_branch camss_ahb_clk = { 2032 + .halt_reg = 0x348c, 2033 + .clkr = { 2034 + .enable_reg = 0x348c, 2035 + .enable_mask = BIT(0), 2036 + .hw.init = &(struct clk_init_data){ 2037 + .name = "camss_ahb_clk", 2038 + .parent_names = (const char *[]){ "ahb_clk_src" }, 2039 + .num_parents = 1, 2040 + .flags = CLK_SET_RATE_PARENT, 2041 + .ops = &clk_branch2_ops, 2042 + }, 2043 + }, 2044 + }; 2045 + 2046 + static struct clk_branch camss_micro_ahb_clk = { 2047 + .halt_reg = 0x3494, 2048 + .clkr = { 2049 + .enable_reg = 0x3494, 2050 + .enable_mask = BIT(0), 2051 + .hw.init = &(struct clk_init_data){ 2052 + .name = "camss_micro_ahb_clk", 2053 + .parent_names = (const char *[]){ "ahb_clk_src" }, 2054 + .num_parents = 1, 2055 + .flags = CLK_SET_RATE_PARENT, 2056 + .ops = &clk_branch2_ops, 2057 + }, 2058 + }, 2059 + }; 2060 + 2061 + static struct clk_branch camss_gp0_clk = { 2062 + .halt_reg = 0x3444, 2063 + .clkr = { 2064 + .enable_reg = 0x3444, 2065 + .enable_mask = BIT(0), 2066 + .hw.init = &(struct clk_init_data){ 2067 + .name = "camss_gp0_clk", 2068 + .parent_names = (const char *[]){ "camss_gp0_clk_src" }, 2069 + .num_parents = 1, 2070 + .flags = CLK_SET_RATE_PARENT, 2071 + .ops = &clk_branch2_ops, 2072 + }, 2073 + }, 2074 + }; 2075 + 2076 + static struct clk_branch camss_gp1_clk = { 2077 + .halt_reg = 0x3474, 2078 + .clkr = { 2079 + .enable_reg = 0x3474, 2080 + .enable_mask = BIT(0), 2081 + .hw.init = &(struct clk_init_data){ 2082 + .name = "camss_gp1_clk", 2083 + .parent_names = (const char *[]){ "camss_gp1_clk_src" }, 2084 + .num_parents = 1, 2085 + .flags = CLK_SET_RATE_PARENT, 2086 + .ops = &clk_branch2_ops, 2087 + }, 2088 + }, 2089 + }; 2090 + 2091 + static struct clk_branch camss_mclk0_clk = { 2092 + .halt_reg = 0x3384, 2093 + .clkr = { 2094 + .enable_reg = 0x3384, 2095 + .enable_mask = BIT(0), 2096 + .hw.init = &(struct clk_init_data){ 2097 + .name = "camss_mclk0_clk", 2098 + .parent_names = (const char *[]){ "mclk0_clk_src" }, 2099 + .num_parents = 1, 2100 + .flags = CLK_SET_RATE_PARENT, 2101 + .ops = &clk_branch2_ops, 2102 + }, 2103 + }, 2104 + }; 2105 + 2106 + static struct clk_branch camss_mclk1_clk = { 2107 + .halt_reg = 0x33b4, 2108 + .clkr = { 2109 + .enable_reg = 0x33b4, 2110 + .enable_mask = BIT(0), 2111 + .hw.init = &(struct clk_init_data){ 2112 + .name = "camss_mclk1_clk", 2113 + .parent_names = (const char *[]){ "mclk1_clk_src" }, 2114 + .num_parents = 1, 2115 + .flags = CLK_SET_RATE_PARENT, 2116 + .ops = &clk_branch2_ops, 2117 + }, 2118 + }, 2119 + }; 2120 + 2121 + static struct clk_branch camss_mclk2_clk = { 2122 + .halt_reg = 0x33e4, 2123 + .clkr = { 2124 + .enable_reg = 0x33e4, 2125 + .enable_mask = BIT(0), 2126 + .hw.init = &(struct clk_init_data){ 2127 + .name = "camss_mclk2_clk", 2128 + .parent_names = (const char *[]){ "mclk2_clk_src" }, 2129 + .num_parents = 1, 2130 + .flags = CLK_SET_RATE_PARENT, 2131 + .ops = &clk_branch2_ops, 2132 + }, 2133 + }, 2134 + }; 2135 + 2136 + static struct clk_branch camss_mclk3_clk = { 2137 + .halt_reg = 0x3414, 2138 + .clkr = { 2139 + .enable_reg = 0x3414, 2140 + .enable_mask = BIT(0), 2141 + .hw.init = &(struct clk_init_data){ 2142 + .name = "camss_mclk3_clk", 2143 + .parent_names = (const char *[]){ "mclk3_clk_src" }, 2144 + .num_parents = 1, 2145 + .flags = CLK_SET_RATE_PARENT, 2146 + .ops = &clk_branch2_ops, 2147 + }, 2148 + }, 2149 + }; 2150 + 2151 + static struct clk_branch camss_cci_clk = { 2152 + .halt_reg = 0x3344, 2153 + .clkr = { 2154 + .enable_reg = 0x3344, 2155 + .enable_mask = BIT(0), 2156 + .hw.init = &(struct clk_init_data){ 2157 + .name = "camss_cci_clk", 2158 + .parent_names = (const char *[]){ "cci_clk_src" }, 2159 + .num_parents = 1, 2160 + .flags = CLK_SET_RATE_PARENT, 2161 + .ops = &clk_branch2_ops, 2162 + }, 2163 + }, 2164 + }; 2165 + 2166 + static struct clk_branch camss_cci_ahb_clk = { 2167 + .halt_reg = 0x3348, 2168 + .clkr = { 2169 + .enable_reg = 0x3348, 2170 + .enable_mask = BIT(0), 2171 + .hw.init = &(struct clk_init_data){ 2172 + .name = "camss_cci_ahb_clk", 2173 + .parent_names = (const char *[]){ "ahb_clk_src" }, 2174 + .num_parents = 1, 2175 + .flags = CLK_SET_RATE_PARENT, 2176 + .ops = &clk_branch2_ops, 2177 + }, 2178 + }, 2179 + }; 2180 + 2181 + static struct clk_branch camss_csi0phytimer_clk = { 2182 + .halt_reg = 0x3024, 2183 + .clkr = { 2184 + .enable_reg = 0x3024, 2185 + .enable_mask = BIT(0), 2186 + .hw.init = &(struct clk_init_data){ 2187 + .name = "camss_csi0phytimer_clk", 2188 + .parent_names = (const char *[]){ "csi0phytimer_clk_src" }, 2189 + .num_parents = 1, 2190 + .flags = CLK_SET_RATE_PARENT, 2191 + .ops = &clk_branch2_ops, 2192 + }, 2193 + }, 2194 + }; 2195 + 2196 + static struct clk_branch camss_csi1phytimer_clk = { 2197 + .halt_reg = 0x3054, 2198 + .clkr = { 2199 + .enable_reg = 0x3054, 2200 + .enable_mask = BIT(0), 2201 + .hw.init = &(struct clk_init_data){ 2202 + .name = "camss_csi1phytimer_clk", 2203 + .parent_names = (const char *[]){ "csi1phytimer_clk_src" }, 2204 + .num_parents = 1, 2205 + .flags = CLK_SET_RATE_PARENT, 2206 + .ops = &clk_branch2_ops, 2207 + }, 2208 + }, 2209 + }; 2210 + 2211 + static struct clk_branch camss_csi2phytimer_clk = { 2212 + .halt_reg = 0x3084, 2213 + .clkr = { 2214 + .enable_reg = 0x3084, 2215 + .enable_mask = BIT(0), 2216 + .hw.init = &(struct clk_init_data){ 2217 + .name = "camss_csi2phytimer_clk", 2218 + .parent_names = (const char *[]){ "csi2phytimer_clk_src" }, 2219 + .num_parents = 1, 2220 + .flags = CLK_SET_RATE_PARENT, 2221 + .ops = &clk_branch2_ops, 2222 + }, 2223 + }, 2224 + }; 2225 + 2226 + static struct clk_branch camss_csiphy0_3p_clk = { 2227 + .halt_reg = 0x3234, 2228 + .clkr = { 2229 + .enable_reg = 0x3234, 2230 + .enable_mask = BIT(0), 2231 + .hw.init = &(struct clk_init_data){ 2232 + .name = "camss_csiphy0_3p_clk", 2233 + .parent_names = (const char *[]){ "csiphy0_3p_clk_src" }, 2234 + .num_parents = 1, 2235 + .flags = CLK_SET_RATE_PARENT, 2236 + .ops = &clk_branch2_ops, 2237 + }, 2238 + }, 2239 + }; 2240 + 2241 + static struct clk_branch camss_csiphy1_3p_clk = { 2242 + .halt_reg = 0x3254, 2243 + .clkr = { 2244 + .enable_reg = 0x3254, 2245 + .enable_mask = BIT(0), 2246 + .hw.init = &(struct clk_init_data){ 2247 + .name = "camss_csiphy1_3p_clk", 2248 + .parent_names = (const char *[]){ "csiphy1_3p_clk_src" }, 2249 + .num_parents = 1, 2250 + .flags = CLK_SET_RATE_PARENT, 2251 + .ops = &clk_branch2_ops, 2252 + }, 2253 + }, 2254 + }; 2255 + 2256 + static struct clk_branch camss_csiphy2_3p_clk = { 2257 + .halt_reg = 0x3274, 2258 + .clkr = { 2259 + .enable_reg = 0x3274, 2260 + .enable_mask = BIT(0), 2261 + .hw.init = &(struct clk_init_data){ 2262 + .name = "camss_csiphy2_3p_clk", 2263 + .parent_names = (const char *[]){ "csiphy2_3p_clk_src" }, 2264 + .num_parents = 1, 2265 + .flags = CLK_SET_RATE_PARENT, 2266 + .ops = &clk_branch2_ops, 2267 + }, 2268 + }, 2269 + }; 2270 + 2271 + static struct clk_branch camss_jpeg0_clk = { 2272 + .halt_reg = 0x35a8, 2273 + .clkr = { 2274 + .enable_reg = 0x35a8, 2275 + .enable_mask = BIT(0), 2276 + .hw.init = &(struct clk_init_data){ 2277 + .name = "camss_jpeg0_clk", 2278 + .parent_names = (const char *[]){ "jpeg0_clk_src" }, 2279 + .num_parents = 1, 2280 + .flags = CLK_SET_RATE_PARENT, 2281 + .ops = &clk_branch2_ops, 2282 + }, 2283 + }, 2284 + }; 2285 + 2286 + static struct clk_branch camss_jpeg2_clk = { 2287 + .halt_reg = 0x35b0, 2288 + .clkr = { 2289 + .enable_reg = 0x35b0, 2290 + .enable_mask = BIT(0), 2291 + .hw.init = &(struct clk_init_data){ 2292 + .name = "camss_jpeg2_clk", 2293 + .parent_names = (const char *[]){ "jpeg2_clk_src" }, 2294 + .num_parents = 1, 2295 + .flags = CLK_SET_RATE_PARENT, 2296 + .ops = &clk_branch2_ops, 2297 + }, 2298 + }, 2299 + }; 2300 + 2301 + static struct clk_branch camss_jpeg_dma_clk = { 2302 + .halt_reg = 0x35c0, 2303 + .clkr = { 2304 + .enable_reg = 0x35c0, 2305 + .enable_mask = BIT(0), 2306 + .hw.init = &(struct clk_init_data){ 2307 + .name = "camss_jpeg_dma_clk", 2308 + .parent_names = (const char *[]){ "jpeg_dma_clk_src" }, 2309 + .num_parents = 1, 2310 + .flags = CLK_SET_RATE_PARENT, 2311 + .ops = &clk_branch2_ops, 2312 + }, 2313 + }, 2314 + }; 2315 + 2316 + static struct clk_branch camss_jpeg_ahb_clk = { 2317 + .halt_reg = 0x35b4, 2318 + .clkr = { 2319 + .enable_reg = 0x35b4, 2320 + .enable_mask = BIT(0), 2321 + .hw.init = &(struct clk_init_data){ 2322 + .name = "camss_jpeg_ahb_clk", 2323 + .parent_names = (const char *[]){ "ahb_clk_src" }, 2324 + .num_parents = 1, 2325 + .flags = CLK_SET_RATE_PARENT, 2326 + .ops = &clk_branch2_ops, 2327 + }, 2328 + }, 2329 + }; 2330 + 2331 + static struct clk_branch camss_jpeg_axi_clk = { 2332 + .halt_reg = 0x35b8, 2333 + .clkr = { 2334 + .enable_reg = 0x35b8, 2335 + .enable_mask = BIT(0), 2336 + .hw.init = &(struct clk_init_data){ 2337 + .name = "camss_jpeg_axi_clk", 2338 + .parent_names = (const char *[]){ "axi_clk_src" }, 2339 + .num_parents = 1, 2340 + .flags = CLK_SET_RATE_PARENT, 2341 + .ops = &clk_branch2_ops, 2342 + }, 2343 + }, 2344 + }; 2345 + 2346 + static struct clk_branch camss_vfe_ahb_clk = { 2347 + .halt_reg = 0x36b8, 2348 + .clkr = { 2349 + .enable_reg = 0x36b8, 2350 + .enable_mask = BIT(0), 2351 + .hw.init = &(struct clk_init_data){ 2352 + .name = "camss_vfe_ahb_clk", 2353 + .parent_names = (const char *[]){ "ahb_clk_src" }, 2354 + .num_parents = 1, 2355 + .flags = CLK_SET_RATE_PARENT, 2356 + .ops = &clk_branch2_ops, 2357 + }, 2358 + }, 2359 + }; 2360 + 2361 + static struct clk_branch camss_vfe_axi_clk = { 2362 + .halt_reg = 0x36bc, 2363 + .clkr = { 2364 + .enable_reg = 0x36bc, 2365 + .enable_mask = BIT(0), 2366 + .hw.init = &(struct clk_init_data){ 2367 + .name = "camss_vfe_axi_clk", 2368 + .parent_names = (const char *[]){ "axi_clk_src" }, 2369 + .num_parents = 1, 2370 + .flags = CLK_SET_RATE_PARENT, 2371 + .ops = &clk_branch2_ops, 2372 + }, 2373 + }, 2374 + }; 2375 + 2376 + static struct clk_branch camss_vfe0_clk = { 2377 + .halt_reg = 0x36a8, 2378 + .clkr = { 2379 + .enable_reg = 0x36a8, 2380 + .enable_mask = BIT(0), 2381 + .hw.init = &(struct clk_init_data){ 2382 + .name = "camss_vfe0_clk", 2383 + .parent_names = (const char *[]){ "vfe0_clk_src" }, 2384 + .num_parents = 1, 2385 + .flags = CLK_SET_RATE_PARENT, 2386 + .ops = &clk_branch2_ops, 2387 + }, 2388 + }, 2389 + }; 2390 + 2391 + static struct clk_branch camss_vfe0_stream_clk = { 2392 + .halt_reg = 0x3720, 2393 + .clkr = { 2394 + .enable_reg = 0x3720, 2395 + .enable_mask = BIT(0), 2396 + .hw.init = &(struct clk_init_data){ 2397 + .name = "camss_vfe0_stream_clk", 2398 + .parent_names = (const char *[]){ "vfe0_clk_src" }, 2399 + .num_parents = 1, 2400 + .flags = CLK_SET_RATE_PARENT, 2401 + .ops = &clk_branch2_ops, 2402 + }, 2403 + }, 2404 + }; 2405 + 2406 + static struct clk_branch camss_vfe0_ahb_clk = { 2407 + .halt_reg = 0x3668, 2408 + .clkr = { 2409 + .enable_reg = 0x3668, 2410 + .enable_mask = BIT(0), 2411 + .hw.init = &(struct clk_init_data){ 2412 + .name = "camss_vfe0_ahb_clk", 2413 + .parent_names = (const char *[]){ "ahb_clk_src" }, 2414 + .num_parents = 1, 2415 + .flags = CLK_SET_RATE_PARENT, 2416 + .ops = &clk_branch2_ops, 2417 + }, 2418 + }, 2419 + }; 2420 + 2421 + static struct clk_branch camss_vfe1_clk = { 2422 + .halt_reg = 0x36ac, 2423 + .clkr = { 2424 + .enable_reg = 0x36ac, 2425 + .enable_mask = BIT(0), 2426 + .hw.init = &(struct clk_init_data){ 2427 + .name = "camss_vfe1_clk", 2428 + .parent_names = (const char *[]){ "vfe1_clk_src" }, 2429 + .num_parents = 1, 2430 + .flags = CLK_SET_RATE_PARENT, 2431 + .ops = &clk_branch2_ops, 2432 + }, 2433 + }, 2434 + }; 2435 + 2436 + static struct clk_branch camss_vfe1_stream_clk = { 2437 + .halt_reg = 0x3724, 2438 + .clkr = { 2439 + .enable_reg = 0x3724, 2440 + .enable_mask = BIT(0), 2441 + .hw.init = &(struct clk_init_data){ 2442 + .name = "camss_vfe1_stream_clk", 2443 + .parent_names = (const char *[]){ "vfe1_clk_src" }, 2444 + .num_parents = 1, 2445 + .flags = CLK_SET_RATE_PARENT, 2446 + .ops = &clk_branch2_ops, 2447 + }, 2448 + }, 2449 + }; 2450 + 2451 + static struct clk_branch camss_vfe1_ahb_clk = { 2452 + .halt_reg = 0x3678, 2453 + .clkr = { 2454 + .enable_reg = 0x3678, 2455 + .enable_mask = BIT(0), 2456 + .hw.init = &(struct clk_init_data){ 2457 + .name = "camss_vfe1_ahb_clk", 2458 + .parent_names = (const char *[]){ "ahb_clk_src" }, 2459 + .num_parents = 1, 2460 + .flags = CLK_SET_RATE_PARENT, 2461 + .ops = &clk_branch2_ops, 2462 + }, 2463 + }, 2464 + }; 2465 + 2466 + static struct clk_branch camss_csi_vfe0_clk = { 2467 + .halt_reg = 0x3704, 2468 + .clkr = { 2469 + .enable_reg = 0x3704, 2470 + .enable_mask = BIT(0), 2471 + .hw.init = &(struct clk_init_data){ 2472 + .name = "camss_csi_vfe0_clk", 2473 + .parent_names = (const char *[]){ "vfe0_clk_src" }, 2474 + .num_parents = 1, 2475 + .flags = CLK_SET_RATE_PARENT, 2476 + .ops = &clk_branch2_ops, 2477 + }, 2478 + }, 2479 + }; 2480 + 2481 + static struct clk_branch camss_csi_vfe1_clk = { 2482 + .halt_reg = 0x3714, 2483 + .clkr = { 2484 + .enable_reg = 0x3714, 2485 + .enable_mask = BIT(0), 2486 + .hw.init = &(struct clk_init_data){ 2487 + .name = "camss_csi_vfe1_clk", 2488 + .parent_names = (const char *[]){ "vfe1_clk_src" }, 2489 + .num_parents = 1, 2490 + .flags = CLK_SET_RATE_PARENT, 2491 + .ops = &clk_branch2_ops, 2492 + }, 2493 + }, 2494 + }; 2495 + 2496 + static struct clk_branch camss_cpp_vbif_ahb_clk = { 2497 + .halt_reg = 0x36c8, 2498 + .clkr = { 2499 + .enable_reg = 0x36c8, 2500 + .enable_mask = BIT(0), 2501 + .hw.init = &(struct clk_init_data){ 2502 + .name = "camss_cpp_vbif_ahb_clk", 2503 + .parent_names = (const char *[]){ "ahb_clk_src" }, 2504 + .num_parents = 1, 2505 + .flags = CLK_SET_RATE_PARENT, 2506 + .ops = &clk_branch2_ops, 2507 + }, 2508 + }, 2509 + }; 2510 + 2511 + static struct clk_branch camss_cpp_axi_clk = { 2512 + .halt_reg = 0x36c4, 2513 + .clkr = { 2514 + .enable_reg = 0x36c4, 2515 + .enable_mask = BIT(0), 2516 + .hw.init = &(struct clk_init_data){ 2517 + .name = "camss_cpp_axi_clk", 2518 + .parent_names = (const char *[]){ "axi_clk_src" }, 2519 + .num_parents = 1, 2520 + .flags = CLK_SET_RATE_PARENT, 2521 + .ops = &clk_branch2_ops, 2522 + }, 2523 + }, 2524 + }; 2525 + 2526 + static struct clk_branch camss_cpp_clk = { 2527 + .halt_reg = 0x36b0, 2528 + .clkr = { 2529 + .enable_reg = 0x36b0, 2530 + .enable_mask = BIT(0), 2531 + .hw.init = &(struct clk_init_data){ 2532 + .name = "camss_cpp_clk", 2533 + .parent_names = (const char *[]){ "cpp_clk_src" }, 2534 + .num_parents = 1, 2535 + .flags = CLK_SET_RATE_PARENT, 2536 + .ops = &clk_branch2_ops, 2537 + }, 2538 + }, 2539 + }; 2540 + 2541 + static struct clk_branch camss_cpp_ahb_clk = { 2542 + .halt_reg = 0x36b4, 2543 + .clkr = { 2544 + .enable_reg = 0x36b4, 2545 + .enable_mask = BIT(0), 2546 + .hw.init = &(struct clk_init_data){ 2547 + .name = "camss_cpp_ahb_clk", 2548 + .parent_names = (const char *[]){ "ahb_clk_src" }, 2549 + .num_parents = 1, 2550 + .flags = CLK_SET_RATE_PARENT, 2551 + .ops = &clk_branch2_ops, 2552 + }, 2553 + }, 2554 + }; 2555 + 2556 + static struct clk_branch camss_csi0_clk = { 2557 + .halt_reg = 0x30b4, 2558 + .clkr = { 2559 + .enable_reg = 0x30b4, 2560 + .enable_mask = BIT(0), 2561 + .hw.init = &(struct clk_init_data){ 2562 + .name = "camss_csi0_clk", 2563 + .parent_names = (const char *[]){ "csi0_clk_src" }, 2564 + .num_parents = 1, 2565 + .flags = CLK_SET_RATE_PARENT, 2566 + .ops = &clk_branch2_ops, 2567 + }, 2568 + }, 2569 + }; 2570 + 2571 + static struct clk_branch camss_csi0_ahb_clk = { 2572 + .halt_reg = 0x30bc, 2573 + .clkr = { 2574 + .enable_reg = 0x30bc, 2575 + .enable_mask = BIT(0), 2576 + .hw.init = &(struct clk_init_data){ 2577 + .name = "camss_csi0_ahb_clk", 2578 + .parent_names = (const char *[]){ "ahb_clk_src" }, 2579 + .num_parents = 1, 2580 + .flags = CLK_SET_RATE_PARENT, 2581 + .ops = &clk_branch2_ops, 2582 + }, 2583 + }, 2584 + }; 2585 + 2586 + static struct clk_branch camss_csi0phy_clk = { 2587 + .halt_reg = 0x30c4, 2588 + .clkr = { 2589 + .enable_reg = 0x30c4, 2590 + .enable_mask = BIT(0), 2591 + .hw.init = &(struct clk_init_data){ 2592 + .name = "camss_csi0phy_clk", 2593 + .parent_names = (const char *[]){ "csi0_clk_src" }, 2594 + .num_parents = 1, 2595 + .flags = CLK_SET_RATE_PARENT, 2596 + .ops = &clk_branch2_ops, 2597 + }, 2598 + }, 2599 + }; 2600 + 2601 + static struct clk_branch camss_csi0rdi_clk = { 2602 + .halt_reg = 0x30d4, 2603 + .clkr = { 2604 + .enable_reg = 0x30d4, 2605 + .enable_mask = BIT(0), 2606 + .hw.init = &(struct clk_init_data){ 2607 + .name = "camss_csi0rdi_clk", 2608 + .parent_names = (const char *[]){ "csi0_clk_src" }, 2609 + .num_parents = 1, 2610 + .flags = CLK_SET_RATE_PARENT, 2611 + .ops = &clk_branch2_ops, 2612 + }, 2613 + }, 2614 + }; 2615 + 2616 + static struct clk_branch camss_csi0pix_clk = { 2617 + .halt_reg = 0x30e4, 2618 + .clkr = { 2619 + .enable_reg = 0x30e4, 2620 + .enable_mask = BIT(0), 2621 + .hw.init = &(struct clk_init_data){ 2622 + .name = "camss_csi0pix_clk", 2623 + .parent_names = (const char *[]){ "csi0_clk_src" }, 2624 + .num_parents = 1, 2625 + .flags = CLK_SET_RATE_PARENT, 2626 + .ops = &clk_branch2_ops, 2627 + }, 2628 + }, 2629 + }; 2630 + 2631 + static struct clk_branch camss_csi1_clk = { 2632 + .halt_reg = 0x3124, 2633 + .clkr = { 2634 + .enable_reg = 0x3124, 2635 + .enable_mask = BIT(0), 2636 + .hw.init = &(struct clk_init_data){ 2637 + .name = "camss_csi1_clk", 2638 + .parent_names = (const char *[]){ "csi1_clk_src" }, 2639 + .num_parents = 1, 2640 + .flags = CLK_SET_RATE_PARENT, 2641 + .ops = &clk_branch2_ops, 2642 + }, 2643 + }, 2644 + }; 2645 + 2646 + static struct clk_branch camss_csi1_ahb_clk = { 2647 + .halt_reg = 0x3128, 2648 + .clkr = { 2649 + .enable_reg = 0x3128, 2650 + .enable_mask = BIT(0), 2651 + .hw.init = &(struct clk_init_data){ 2652 + .name = "camss_csi1_ahb_clk", 2653 + .parent_names = (const char *[]){ "ahb_clk_src" }, 2654 + .num_parents = 1, 2655 + .flags = CLK_SET_RATE_PARENT, 2656 + .ops = &clk_branch2_ops, 2657 + }, 2658 + }, 2659 + }; 2660 + 2661 + static struct clk_branch camss_csi1phy_clk = { 2662 + .halt_reg = 0x3134, 2663 + .clkr = { 2664 + .enable_reg = 0x3134, 2665 + .enable_mask = BIT(0), 2666 + .hw.init = &(struct clk_init_data){ 2667 + .name = "camss_csi1phy_clk", 2668 + .parent_names = (const char *[]){ "csi1_clk_src" }, 2669 + .num_parents = 1, 2670 + .flags = CLK_SET_RATE_PARENT, 2671 + .ops = &clk_branch2_ops, 2672 + }, 2673 + }, 2674 + }; 2675 + 2676 + static struct clk_branch camss_csi1rdi_clk = { 2677 + .halt_reg = 0x3144, 2678 + .clkr = { 2679 + .enable_reg = 0x3144, 2680 + .enable_mask = BIT(0), 2681 + .hw.init = &(struct clk_init_data){ 2682 + .name = "camss_csi1rdi_clk", 2683 + .parent_names = (const char *[]){ "csi1_clk_src" }, 2684 + .num_parents = 1, 2685 + .flags = CLK_SET_RATE_PARENT, 2686 + .ops = &clk_branch2_ops, 2687 + }, 2688 + }, 2689 + }; 2690 + 2691 + static struct clk_branch camss_csi1pix_clk = { 2692 + .halt_reg = 0x3154, 2693 + .clkr = { 2694 + .enable_reg = 0x3154, 2695 + .enable_mask = BIT(0), 2696 + .hw.init = &(struct clk_init_data){ 2697 + .name = "camss_csi1pix_clk", 2698 + .parent_names = (const char *[]){ "csi1_clk_src" }, 2699 + .num_parents = 1, 2700 + .flags = CLK_SET_RATE_PARENT, 2701 + .ops = &clk_branch2_ops, 2702 + }, 2703 + }, 2704 + }; 2705 + 2706 + static struct clk_branch camss_csi2_clk = { 2707 + .halt_reg = 0x3184, 2708 + .clkr = { 2709 + .enable_reg = 0x3184, 2710 + .enable_mask = BIT(0), 2711 + .hw.init = &(struct clk_init_data){ 2712 + .name = "camss_csi2_clk", 2713 + .parent_names = (const char *[]){ "csi2_clk_src" }, 2714 + .num_parents = 1, 2715 + .flags = CLK_SET_RATE_PARENT, 2716 + .ops = &clk_branch2_ops, 2717 + }, 2718 + }, 2719 + }; 2720 + 2721 + static struct clk_branch camss_csi2_ahb_clk = { 2722 + .halt_reg = 0x3188, 2723 + .clkr = { 2724 + .enable_reg = 0x3188, 2725 + .enable_mask = BIT(0), 2726 + .hw.init = &(struct clk_init_data){ 2727 + .name = "camss_csi2_ahb_clk", 2728 + .parent_names = (const char *[]){ "ahb_clk_src" }, 2729 + .num_parents = 1, 2730 + .flags = CLK_SET_RATE_PARENT, 2731 + .ops = &clk_branch2_ops, 2732 + }, 2733 + }, 2734 + }; 2735 + 2736 + static struct clk_branch camss_csi2phy_clk = { 2737 + .halt_reg = 0x3194, 2738 + .clkr = { 2739 + .enable_reg = 0x3194, 2740 + .enable_mask = BIT(0), 2741 + .hw.init = &(struct clk_init_data){ 2742 + .name = "camss_csi2phy_clk", 2743 + .parent_names = (const char *[]){ "csi2_clk_src" }, 2744 + .num_parents = 1, 2745 + .flags = CLK_SET_RATE_PARENT, 2746 + .ops = &clk_branch2_ops, 2747 + }, 2748 + }, 2749 + }; 2750 + 2751 + static struct clk_branch camss_csi2rdi_clk = { 2752 + .halt_reg = 0x31a4, 2753 + .clkr = { 2754 + .enable_reg = 0x31a4, 2755 + .enable_mask = BIT(0), 2756 + .hw.init = &(struct clk_init_data){ 2757 + .name = "camss_csi2rdi_clk", 2758 + .parent_names = (const char *[]){ "csi2_clk_src" }, 2759 + .num_parents = 1, 2760 + .flags = CLK_SET_RATE_PARENT, 2761 + .ops = &clk_branch2_ops, 2762 + }, 2763 + }, 2764 + }; 2765 + 2766 + static struct clk_branch camss_csi2pix_clk = { 2767 + .halt_reg = 0x31b4, 2768 + .clkr = { 2769 + .enable_reg = 0x31b4, 2770 + .enable_mask = BIT(0), 2771 + .hw.init = &(struct clk_init_data){ 2772 + .name = "camss_csi2pix_clk", 2773 + .parent_names = (const char *[]){ "csi2_clk_src" }, 2774 + .num_parents = 1, 2775 + .flags = CLK_SET_RATE_PARENT, 2776 + .ops = &clk_branch2_ops, 2777 + }, 2778 + }, 2779 + }; 2780 + 2781 + static struct clk_branch camss_csi3_clk = { 2782 + .halt_reg = 0x31e4, 2783 + .clkr = { 2784 + .enable_reg = 0x31e4, 2785 + .enable_mask = BIT(0), 2786 + .hw.init = &(struct clk_init_data){ 2787 + .name = "camss_csi3_clk", 2788 + .parent_names = (const char *[]){ "csi3_clk_src" }, 2789 + .num_parents = 1, 2790 + .flags = CLK_SET_RATE_PARENT, 2791 + .ops = &clk_branch2_ops, 2792 + }, 2793 + }, 2794 + }; 2795 + 2796 + static struct clk_branch camss_csi3_ahb_clk = { 2797 + .halt_reg = 0x31e8, 2798 + .clkr = { 2799 + .enable_reg = 0x31e8, 2800 + .enable_mask = BIT(0), 2801 + .hw.init = &(struct clk_init_data){ 2802 + .name = "camss_csi3_ahb_clk", 2803 + .parent_names = (const char *[]){ "ahb_clk_src" }, 2804 + .num_parents = 1, 2805 + .flags = CLK_SET_RATE_PARENT, 2806 + .ops = &clk_branch2_ops, 2807 + }, 2808 + }, 2809 + }; 2810 + 2811 + static struct clk_branch camss_csi3phy_clk = { 2812 + .halt_reg = 0x31f4, 2813 + .clkr = { 2814 + .enable_reg = 0x31f4, 2815 + .enable_mask = BIT(0), 2816 + .hw.init = &(struct clk_init_data){ 2817 + .name = "camss_csi3phy_clk", 2818 + .parent_names = (const char *[]){ "csi3_clk_src" }, 2819 + .num_parents = 1, 2820 + .flags = CLK_SET_RATE_PARENT, 2821 + .ops = &clk_branch2_ops, 2822 + }, 2823 + }, 2824 + }; 2825 + 2826 + static struct clk_branch camss_csi3rdi_clk = { 2827 + .halt_reg = 0x3204, 2828 + .clkr = { 2829 + .enable_reg = 0x3204, 2830 + .enable_mask = BIT(0), 2831 + .hw.init = &(struct clk_init_data){ 2832 + .name = "camss_csi3rdi_clk", 2833 + .parent_names = (const char *[]){ "csi3_clk_src" }, 2834 + .num_parents = 1, 2835 + .flags = CLK_SET_RATE_PARENT, 2836 + .ops = &clk_branch2_ops, 2837 + }, 2838 + }, 2839 + }; 2840 + 2841 + static struct clk_branch camss_csi3pix_clk = { 2842 + .halt_reg = 0x3214, 2843 + .clkr = { 2844 + .enable_reg = 0x3214, 2845 + .enable_mask = BIT(0), 2846 + .hw.init = &(struct clk_init_data){ 2847 + .name = "camss_csi3pix_clk", 2848 + .parent_names = (const char *[]){ "csi3_clk_src" }, 2849 + .num_parents = 1, 2850 + .flags = CLK_SET_RATE_PARENT, 2851 + .ops = &clk_branch2_ops, 2852 + }, 2853 + }, 2854 + }; 2855 + 2856 + static struct clk_branch camss_ispif_ahb_clk = { 2857 + .halt_reg = 0x3224, 2858 + .clkr = { 2859 + .enable_reg = 0x3224, 2860 + .enable_mask = BIT(0), 2861 + .hw.init = &(struct clk_init_data){ 2862 + .name = "camss_ispif_ahb_clk", 2863 + .parent_names = (const char *[]){ "ahb_clk_src" }, 2864 + .num_parents = 1, 2865 + .flags = CLK_SET_RATE_PARENT, 2866 + .ops = &clk_branch2_ops, 2867 + }, 2868 + }, 2869 + }; 2870 + 2871 + static struct clk_branch fd_core_clk = { 2872 + .halt_reg = 0x3b68, 2873 + .clkr = { 2874 + .enable_reg = 0x3b68, 2875 + .enable_mask = BIT(0), 2876 + .hw.init = &(struct clk_init_data){ 2877 + .name = "fd_core_clk", 2878 + .parent_names = (const char *[]){ "fd_core_clk_src" }, 2879 + .num_parents = 1, 2880 + .flags = CLK_SET_RATE_PARENT, 2881 + .ops = &clk_branch2_ops, 2882 + }, 2883 + }, 2884 + }; 2885 + 2886 + static struct clk_branch fd_core_uar_clk = { 2887 + .halt_reg = 0x3b6c, 2888 + .clkr = { 2889 + .enable_reg = 0x3b6c, 2890 + .enable_mask = BIT(0), 2891 + .hw.init = &(struct clk_init_data){ 2892 + .name = "fd_core_uar_clk", 2893 + .parent_names = (const char *[]){ "fd_core_clk_src" }, 2894 + .num_parents = 1, 2895 + .flags = CLK_SET_RATE_PARENT, 2896 + .ops = &clk_branch2_ops, 2897 + }, 2898 + }, 2899 + }; 2900 + 2901 + static struct clk_branch fd_ahb_clk = { 2902 + .halt_reg = 0x3ba74, 2903 + .clkr = { 2904 + .enable_reg = 0x3ba74, 2905 + .enable_mask = BIT(0), 2906 + .hw.init = &(struct clk_init_data){ 2907 + .name = "fd_ahb_clk", 2908 + .parent_names = (const char *[]){ "ahb_clk_src" }, 2909 + .num_parents = 1, 2910 + .flags = CLK_SET_RATE_PARENT, 2911 + .ops = &clk_branch2_ops, 2912 + }, 2913 + }, 2914 + }; 2915 + 2916 + static struct clk_hw *mmcc_msm8996_hws[] = { 2917 + &gpll0_div.hw, 2918 + }; 2919 + 2920 + static struct clk_regmap *mmcc_msm8996_clocks[] = { 2921 + [MMPLL0_EARLY] = &mmpll0_early.clkr, 2922 + [MMPLL0_PLL] = &mmpll0.clkr, 2923 + [MMPLL1_EARLY] = &mmpll1_early.clkr, 2924 + [MMPLL1_PLL] = &mmpll1.clkr, 2925 + [MMPLL2_EARLY] = &mmpll2_early.clkr, 2926 + [MMPLL2_PLL] = &mmpll2.clkr, 2927 + [MMPLL3_EARLY] = &mmpll3_early.clkr, 2928 + [MMPLL3_PLL] = &mmpll3.clkr, 2929 + [MMPLL4_EARLY] = &mmpll4_early.clkr, 2930 + [MMPLL4_PLL] = &mmpll4.clkr, 2931 + [MMPLL5_EARLY] = &mmpll5_early.clkr, 2932 + [MMPLL5_PLL] = &mmpll5.clkr, 2933 + [MMPLL8_EARLY] = &mmpll8_early.clkr, 2934 + [MMPLL8_PLL] = &mmpll8.clkr, 2935 + [MMPLL9_EARLY] = &mmpll9_early.clkr, 2936 + [MMPLL9_PLL] = &mmpll9.clkr, 2937 + [AHB_CLK_SRC] = &ahb_clk_src.clkr, 2938 + [AXI_CLK_SRC] = &axi_clk_src.clkr, 2939 + [MAXI_CLK_SRC] = &maxi_clk_src.clkr, 2940 + [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr, 2941 + [RBBMTIMER_CLK_SRC] = &rbbmtimer_clk_src.clkr, 2942 + [ISENSE_CLK_SRC] = &isense_clk_src.clkr, 2943 + [RBCPR_CLK_SRC] = &rbcpr_clk_src.clkr, 2944 + [VIDEO_CORE_CLK_SRC] = &video_core_clk_src.clkr, 2945 + [VIDEO_SUBCORE0_CLK_SRC] = &video_subcore0_clk_src.clkr, 2946 + [VIDEO_SUBCORE1_CLK_SRC] = &video_subcore1_clk_src.clkr, 2947 + [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr, 2948 + [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr, 2949 + [MDP_CLK_SRC] = &mdp_clk_src.clkr, 2950 + [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr, 2951 + [VSYNC_CLK_SRC] = &vsync_clk_src.clkr, 2952 + [HDMI_CLK_SRC] = &hdmi_clk_src.clkr, 2953 + [BYTE0_CLK_SRC] = &byte0_clk_src.clkr, 2954 + [BYTE1_CLK_SRC] = &byte1_clk_src.clkr, 2955 + [ESC0_CLK_SRC] = &esc0_clk_src.clkr, 2956 + [ESC1_CLK_SRC] = &esc1_clk_src.clkr, 2957 + [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr, 2958 + [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr, 2959 + [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr, 2960 + [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr, 2961 + [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr, 2962 + [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr, 2963 + [CCI_CLK_SRC] = &cci_clk_src.clkr, 2964 + [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr, 2965 + [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr, 2966 + [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr, 2967 + [CSIPHY0_3P_CLK_SRC] = &csiphy0_3p_clk_src.clkr, 2968 + [CSIPHY1_3P_CLK_SRC] = &csiphy1_3p_clk_src.clkr, 2969 + [CSIPHY2_3P_CLK_SRC] = &csiphy2_3p_clk_src.clkr, 2970 + [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr, 2971 + [JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr, 2972 + [JPEG_DMA_CLK_SRC] = &jpeg_dma_clk_src.clkr, 2973 + [VFE0_CLK_SRC] = &vfe0_clk_src.clkr, 2974 + [VFE1_CLK_SRC] = &vfe1_clk_src.clkr, 2975 + [CPP_CLK_SRC] = &cpp_clk_src.clkr, 2976 + [CSI0_CLK_SRC] = &csi0_clk_src.clkr, 2977 + [CSI1_CLK_SRC] = &csi1_clk_src.clkr, 2978 + [CSI2_CLK_SRC] = &csi2_clk_src.clkr, 2979 + [CSI3_CLK_SRC] = &csi3_clk_src.clkr, 2980 + [FD_CORE_CLK_SRC] = &fd_core_clk_src.clkr, 2981 + [MMSS_MMAGIC_AHB_CLK] = &mmss_mmagic_ahb_clk.clkr, 2982 + [MMSS_MMAGIC_CFG_AHB_CLK] = &mmss_mmagic_cfg_ahb_clk.clkr, 2983 + [MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr, 2984 + [MMSS_MISC_CXO_CLK] = &mmss_misc_cxo_clk.clkr, 2985 + [MMSS_MMAGIC_AXI_CLK] = &mmss_mmagic_axi_clk.clkr, 2986 + [MMSS_MMAGIC_MAXI_CLK] = &mmss_mmagic_maxi_clk.clkr, 2987 + [MMAGIC_CAMSS_AXI_CLK] = &mmagic_camss_axi_clk.clkr, 2988 + [MMAGIC_CAMSS_NOC_CFG_AHB_CLK] = &mmagic_camss_noc_cfg_ahb_clk.clkr, 2989 + [SMMU_VFE_AHB_CLK] = &smmu_vfe_ahb_clk.clkr, 2990 + [SMMU_VFE_AXI_CLK] = &smmu_vfe_axi_clk.clkr, 2991 + [SMMU_CPP_AHB_CLK] = &smmu_cpp_ahb_clk.clkr, 2992 + [SMMU_CPP_AXI_CLK] = &smmu_cpp_axi_clk.clkr, 2993 + [SMMU_JPEG_AHB_CLK] = &smmu_jpeg_ahb_clk.clkr, 2994 + [SMMU_JPEG_AXI_CLK] = &smmu_jpeg_axi_clk.clkr, 2995 + [MMAGIC_MDSS_AXI_CLK] = &mmagic_mdss_axi_clk.clkr, 2996 + [MMAGIC_MDSS_NOC_CFG_AHB_CLK] = &mmagic_mdss_noc_cfg_ahb_clk.clkr, 2997 + [SMMU_ROT_AHB_CLK] = &smmu_rot_ahb_clk.clkr, 2998 + [SMMU_ROT_AXI_CLK] = &smmu_rot_axi_clk.clkr, 2999 + [SMMU_MDP_AHB_CLK] = &smmu_mdp_ahb_clk.clkr, 3000 + [SMMU_MDP_AXI_CLK] = &smmu_mdp_axi_clk.clkr, 3001 + [MMAGIC_VIDEO_AXI_CLK] = &mmagic_video_axi_clk.clkr, 3002 + [MMAGIC_VIDEO_NOC_CFG_AHB_CLK] = &mmagic_video_noc_cfg_ahb_clk.clkr, 3003 + [SMMU_VIDEO_AHB_CLK] = &smmu_video_ahb_clk.clkr, 3004 + [SMMU_VIDEO_AXI_CLK] = &smmu_video_axi_clk.clkr, 3005 + [MMAGIC_BIMC_AXI_CLK] = &mmagic_bimc_axi_clk.clkr, 3006 + [MMAGIC_BIMC_NOC_CFG_AHB_CLK] = &mmagic_bimc_noc_cfg_ahb_clk.clkr, 3007 + [GPU_GX_GFX3D_CLK] = &gpu_gx_gfx3d_clk.clkr, 3008 + [GPU_GX_RBBMTIMER_CLK] = &gpu_gx_rbbmtimer_clk.clkr, 3009 + [GPU_AHB_CLK] = &gpu_ahb_clk.clkr, 3010 + [GPU_AON_ISENSE_CLK] = &gpu_aon_isense_clk.clkr, 3011 + [VMEM_MAXI_CLK] = &vmem_maxi_clk.clkr, 3012 + [VMEM_AHB_CLK] = &vmem_ahb_clk.clkr, 3013 + [MMSS_RBCPR_CLK] = &mmss_rbcpr_clk.clkr, 3014 + [MMSS_RBCPR_AHB_CLK] = &mmss_rbcpr_ahb_clk.clkr, 3015 + [VIDEO_CORE_CLK] = &video_core_clk.clkr, 3016 + [VIDEO_AXI_CLK] = &video_axi_clk.clkr, 3017 + [VIDEO_MAXI_CLK] = &video_maxi_clk.clkr, 3018 + [VIDEO_AHB_CLK] = &video_ahb_clk.clkr, 3019 + [VIDEO_SUBCORE0_CLK] = &video_subcore0_clk.clkr, 3020 + [VIDEO_SUBCORE1_CLK] = &video_subcore1_clk.clkr, 3021 + [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr, 3022 + [MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr, 3023 + [MDSS_AXI_CLK] = &mdss_axi_clk.clkr, 3024 + [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr, 3025 + [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr, 3026 + [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr, 3027 + [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr, 3028 + [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr, 3029 + [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr, 3030 + [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr, 3031 + [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr, 3032 + [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr, 3033 + [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr, 3034 + [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr, 3035 + [CAMSS_AHB_CLK] = &camss_ahb_clk.clkr, 3036 + [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr, 3037 + [CAMSS_GP0_CLK] = &camss_gp0_clk.clkr, 3038 + [CAMSS_GP1_CLK] = &camss_gp1_clk.clkr, 3039 + [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr, 3040 + [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr, 3041 + [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr, 3042 + [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr, 3043 + [CAMSS_CCI_CLK] = &camss_cci_clk.clkr, 3044 + [CAMSS_CCI_AHB_CLK] = &camss_cci_ahb_clk.clkr, 3045 + [CAMSS_CSI0PHYTIMER_CLK] = &camss_csi0phytimer_clk.clkr, 3046 + [CAMSS_CSI1PHYTIMER_CLK] = &camss_csi1phytimer_clk.clkr, 3047 + [CAMSS_CSI2PHYTIMER_CLK] = &camss_csi2phytimer_clk.clkr, 3048 + [CAMSS_CSIPHY0_3P_CLK] = &camss_csiphy0_3p_clk.clkr, 3049 + [CAMSS_CSIPHY1_3P_CLK] = &camss_csiphy1_3p_clk.clkr, 3050 + [CAMSS_CSIPHY2_3P_CLK] = &camss_csiphy2_3p_clk.clkr, 3051 + [CAMSS_JPEG0_CLK] = &camss_jpeg0_clk.clkr, 3052 + [CAMSS_JPEG2_CLK] = &camss_jpeg2_clk.clkr, 3053 + [CAMSS_JPEG_DMA_CLK] = &camss_jpeg_dma_clk.clkr, 3054 + [CAMSS_JPEG_AHB_CLK] = &camss_jpeg_ahb_clk.clkr, 3055 + [CAMSS_JPEG_AXI_CLK] = &camss_jpeg_axi_clk.clkr, 3056 + [CAMSS_VFE_AHB_CLK] = &camss_vfe_ahb_clk.clkr, 3057 + [CAMSS_VFE_AXI_CLK] = &camss_vfe_axi_clk.clkr, 3058 + [CAMSS_VFE0_CLK] = &camss_vfe0_clk.clkr, 3059 + [CAMSS_VFE0_STREAM_CLK] = &camss_vfe0_stream_clk.clkr, 3060 + [CAMSS_VFE0_AHB_CLK] = &camss_vfe0_ahb_clk.clkr, 3061 + [CAMSS_VFE1_CLK] = &camss_vfe1_clk.clkr, 3062 + [CAMSS_VFE1_STREAM_CLK] = &camss_vfe1_stream_clk.clkr, 3063 + [CAMSS_VFE1_AHB_CLK] = &camss_vfe1_ahb_clk.clkr, 3064 + [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr, 3065 + [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr, 3066 + [CAMSS_CPP_VBIF_AHB_CLK] = &camss_cpp_vbif_ahb_clk.clkr, 3067 + [CAMSS_CPP_AXI_CLK] = &camss_cpp_axi_clk.clkr, 3068 + [CAMSS_CPP_CLK] = &camss_cpp_clk.clkr, 3069 + [CAMSS_CPP_AHB_CLK] = &camss_cpp_ahb_clk.clkr, 3070 + [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr, 3071 + [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr, 3072 + [CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr, 3073 + [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr, 3074 + [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr, 3075 + [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr, 3076 + [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr, 3077 + [CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr, 3078 + [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr, 3079 + [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr, 3080 + [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr, 3081 + [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr, 3082 + [CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr, 3083 + [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr, 3084 + [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr, 3085 + [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr, 3086 + [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr, 3087 + [CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr, 3088 + [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr, 3089 + [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr, 3090 + [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr, 3091 + [FD_CORE_CLK] = &fd_core_clk.clkr, 3092 + [FD_CORE_UAR_CLK] = &fd_core_uar_clk.clkr, 3093 + [FD_AHB_CLK] = &fd_ahb_clk.clkr, 3094 + }; 3095 + 3096 + static const struct qcom_reset_map mmcc_msm8996_resets[] = { 3097 + [MMAGICAHB_BCR] = { 0x5020 }, 3098 + [MMAGIC_CFG_BCR] = { 0x5050 }, 3099 + [MISC_BCR] = { 0x5010 }, 3100 + [BTO_BCR] = { 0x5030 }, 3101 + [MMAGICAXI_BCR] = { 0x5060 }, 3102 + [MMAGICMAXI_BCR] = { 0x5070 }, 3103 + [DSA_BCR] = { 0x50a0 }, 3104 + [MMAGIC_CAMSS_BCR] = { 0x3c40 }, 3105 + [THROTTLE_CAMSS_BCR] = { 0x3c30 }, 3106 + [SMMU_VFE_BCR] = { 0x3c00 }, 3107 + [SMMU_CPP_BCR] = { 0x3c10 }, 3108 + [SMMU_JPEG_BCR] = { 0x3c20 }, 3109 + [MMAGIC_MDSS_BCR] = { 0x2470 }, 3110 + [THROTTLE_MDSS_BCR] = { 0x2460 }, 3111 + [SMMU_ROT_BCR] = { 0x2440 }, 3112 + [SMMU_MDP_BCR] = { 0x2450 }, 3113 + [MMAGIC_VIDEO_BCR] = { 0x1190 }, 3114 + [THROTTLE_VIDEO_BCR] = { 0x1180 }, 3115 + [SMMU_VIDEO_BCR] = { 0x1170 }, 3116 + [MMAGIC_BIMC_BCR] = { 0x5290 }, 3117 + [GPU_GX_BCR] = { 0x4020 }, 3118 + [GPU_BCR] = { 0x4030 }, 3119 + [GPU_AON_BCR] = { 0x4040 }, 3120 + [VMEM_BCR] = { 0x1200 }, 3121 + [MMSS_RBCPR_BCR] = { 0x4080 }, 3122 + [VIDEO_BCR] = { 0x1020 }, 3123 + [MDSS_BCR] = { 0x2300 }, 3124 + [CAMSS_TOP_BCR] = { 0x3480 }, 3125 + [CAMSS_AHB_BCR] = { 0x3488 }, 3126 + [CAMSS_MICRO_BCR] = { 0x3490 }, 3127 + [CAMSS_CCI_BCR] = { 0x3340 }, 3128 + [CAMSS_PHY0_BCR] = { 0x3020 }, 3129 + [CAMSS_PHY1_BCR] = { 0x3050 }, 3130 + [CAMSS_PHY2_BCR] = { 0x3080 }, 3131 + [CAMSS_CSIPHY0_3P_BCR] = { 0x3230 }, 3132 + [CAMSS_CSIPHY1_3P_BCR] = { 0x3250 }, 3133 + [CAMSS_CSIPHY2_3P_BCR] = { 0x3270 }, 3134 + [CAMSS_JPEG_BCR] = { 0x35a0 }, 3135 + [CAMSS_VFE_BCR] = { 0x36a0 }, 3136 + [CAMSS_VFE0_BCR] = { 0x3660 }, 3137 + [CAMSS_VFE1_BCR] = { 0x3670 }, 3138 + [CAMSS_CSI_VFE0_BCR] = { 0x3700 }, 3139 + [CAMSS_CSI_VFE1_BCR] = { 0x3710 }, 3140 + [CAMSS_CPP_TOP_BCR] = { 0x36c0 }, 3141 + [CAMSS_CPP_BCR] = { 0x36d0 }, 3142 + [CAMSS_CSI0_BCR] = { 0x30b0 }, 3143 + [CAMSS_CSI0RDI_BCR] = { 0x30d0 }, 3144 + [CAMSS_CSI0PIX_BCR] = { 0x30e0 }, 3145 + [CAMSS_CSI1_BCR] = { 0x3120 }, 3146 + [CAMSS_CSI1RDI_BCR] = { 0x3140 }, 3147 + [CAMSS_CSI1PIX_BCR] = { 0x3150 }, 3148 + [CAMSS_CSI2_BCR] = { 0x3180 }, 3149 + [CAMSS_CSI2RDI_BCR] = { 0x31a0 }, 3150 + [CAMSS_CSI2PIX_BCR] = { 0x31b0 }, 3151 + [CAMSS_CSI3_BCR] = { 0x31e0 }, 3152 + [CAMSS_CSI3RDI_BCR] = { 0x3200 }, 3153 + [CAMSS_CSI3PIX_BCR] = { 0x3210 }, 3154 + [CAMSS_ISPIF_BCR] = { 0x3220 }, 3155 + [FD_BCR] = { 0x3b60 }, 3156 + [MMSS_SPDM_RM_BCR] = { 0x300 }, 3157 + }; 3158 + 3159 + static const struct regmap_config mmcc_msm8996_regmap_config = { 3160 + .reg_bits = 32, 3161 + .reg_stride = 4, 3162 + .val_bits = 32, 3163 + .max_register = 0xb008, 3164 + .fast_io = true, 3165 + }; 3166 + 3167 + static const struct qcom_cc_desc mmcc_msm8996_desc = { 3168 + .config = &mmcc_msm8996_regmap_config, 3169 + .clks = mmcc_msm8996_clocks, 3170 + .num_clks = ARRAY_SIZE(mmcc_msm8996_clocks), 3171 + .resets = mmcc_msm8996_resets, 3172 + .num_resets = ARRAY_SIZE(mmcc_msm8996_resets), 3173 + }; 3174 + 3175 + static const struct of_device_id mmcc_msm8996_match_table[] = { 3176 + { .compatible = "qcom,mmcc-msm8996" }, 3177 + { } 3178 + }; 3179 + MODULE_DEVICE_TABLE(of, mmcc_msm8996_match_table); 3180 + 3181 + static int mmcc_msm8996_probe(struct platform_device *pdev) 3182 + { 3183 + struct clk *clk; 3184 + struct device *dev = &pdev->dev; 3185 + int i; 3186 + struct regmap *regmap; 3187 + 3188 + regmap = qcom_cc_map(pdev, &mmcc_msm8996_desc); 3189 + if (IS_ERR(regmap)) 3190 + return PTR_ERR(regmap); 3191 + 3192 + /* Disable the AHB DCD */ 3193 + regmap_update_bits(regmap, 0x50d8, BIT(31), 0); 3194 + /* Disable the NoC FSM for mmss_mmagic_cfg_ahb_clk */ 3195 + regmap_update_bits(regmap, 0x5054, BIT(15), 0); 3196 + 3197 + for (i = 0; i < ARRAY_SIZE(mmcc_msm8996_hws); i++) { 3198 + clk = devm_clk_register(dev, mmcc_msm8996_hws[i]); 3199 + if (IS_ERR(clk)) 3200 + return PTR_ERR(clk); 3201 + } 3202 + 3203 + return qcom_cc_really_probe(pdev, &mmcc_msm8996_desc, regmap); 3204 + } 3205 + 3206 + static struct platform_driver mmcc_msm8996_driver = { 3207 + .probe = mmcc_msm8996_probe, 3208 + .driver = { 3209 + .name = "mmcc-msm8996", 3210 + .of_match_table = mmcc_msm8996_match_table, 3211 + }, 3212 + }; 3213 + module_platform_driver(mmcc_msm8996_driver); 3214 + 3215 + MODULE_DESCRIPTION("QCOM MMCC MSM8996 Driver"); 3216 + MODULE_LICENSE("GPL v2"); 3217 + MODULE_ALIAS("platform:mmcc-msm8996");
+339
include/dt-bindings/clock/qcom,gcc-msm8996.h
··· 1 + /* 2 + * Copyright (c) 2015, The Linux Foundation. All rights reserved. 3 + * 4 + * This software is licensed under the terms of the GNU General Public 5 + * License version 2, as published by the Free Software Foundation, and 6 + * may be copied, distributed, and modified under those terms. 7 + * 8 + * This program is distributed in the hope that it will be useful, 9 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 + * GNU General Public License for more details. 12 + */ 13 + 14 + #ifndef _DT_BINDINGS_CLK_MSM_GCC_8996_H 15 + #define _DT_BINDINGS_CLK_MSM_GCC_8996_H 16 + 17 + #define GPLL0_EARLY 0 18 + #define GPLL0 1 19 + #define GPLL1_EARLY 2 20 + #define GPLL1 3 21 + #define GPLL2_EARLY 4 22 + #define GPLL2 5 23 + #define GPLL3_EARLY 6 24 + #define GPLL3 7 25 + #define GPLL4_EARLY 8 26 + #define GPLL4 9 27 + #define SYSTEM_NOC_CLK_SRC 10 28 + #define CONFIG_NOC_CLK_SRC 11 29 + #define PERIPH_NOC_CLK_SRC 12 30 + #define MMSS_BIMC_GFX_CLK_SRC 13 31 + #define USB30_MASTER_CLK_SRC 14 32 + #define USB30_MOCK_UTMI_CLK_SRC 15 33 + #define USB3_PHY_AUX_CLK_SRC 16 34 + #define USB20_MASTER_CLK_SRC 17 35 + #define USB20_MOCK_UTMI_CLK_SRC 18 36 + #define SDCC1_APPS_CLK_SRC 19 37 + #define SDCC1_ICE_CORE_CLK_SRC 20 38 + #define SDCC2_APPS_CLK_SRC 21 39 + #define SDCC3_APPS_CLK_SRC 22 40 + #define SDCC4_APPS_CLK_SRC 23 41 + #define BLSP1_QUP1_SPI_APPS_CLK_SRC 24 42 + #define BLSP1_QUP1_I2C_APPS_CLK_SRC 25 43 + #define BLSP1_UART1_APPS_CLK_SRC 26 44 + #define BLSP1_QUP2_SPI_APPS_CLK_SRC 27 45 + #define BLSP1_QUP2_I2C_APPS_CLK_SRC 28 46 + #define BLSP1_UART2_APPS_CLK_SRC 29 47 + #define BLSP1_QUP3_SPI_APPS_CLK_SRC 30 48 + #define BLSP1_QUP3_I2C_APPS_CLK_SRC 31 49 + #define BLSP1_UART3_APPS_CLK_SRC 32 50 + #define BLSP1_QUP4_SPI_APPS_CLK_SRC 33 51 + #define BLSP1_QUP4_I2C_APPS_CLK_SRC 34 52 + #define BLSP1_UART4_APPS_CLK_SRC 35 53 + #define BLSP1_QUP5_SPI_APPS_CLK_SRC 36 54 + #define BLSP1_QUP5_I2C_APPS_CLK_SRC 37 55 + #define BLSP1_UART5_APPS_CLK_SRC 38 56 + #define BLSP1_QUP6_SPI_APPS_CLK_SRC 39 57 + #define BLSP1_QUP6_I2C_APPS_CLK_SRC 40 58 + #define BLSP1_UART6_APPS_CLK_SRC 41 59 + #define BLSP2_QUP1_SPI_APPS_CLK_SRC 42 60 + #define BLSP2_QUP1_I2C_APPS_CLK_SRC 43 61 + #define BLSP2_UART1_APPS_CLK_SRC 44 62 + #define BLSP2_QUP2_SPI_APPS_CLK_SRC 45 63 + #define BLSP2_QUP2_I2C_APPS_CLK_SRC 46 64 + #define BLSP2_UART2_APPS_CLK_SRC 47 65 + #define BLSP2_QUP3_SPI_APPS_CLK_SRC 48 66 + #define BLSP2_QUP3_I2C_APPS_CLK_SRC 49 67 + #define BLSP2_UART3_APPS_CLK_SRC 50 68 + #define BLSP2_QUP4_SPI_APPS_CLK_SRC 51 69 + #define BLSP2_QUP4_I2C_APPS_CLK_SRC 52 70 + #define BLSP2_UART4_APPS_CLK_SRC 53 71 + #define BLSP2_QUP5_SPI_APPS_CLK_SRC 54 72 + #define BLSP2_QUP5_I2C_APPS_CLK_SRC 55 73 + #define BLSP2_UART5_APPS_CLK_SRC 56 74 + #define BLSP2_QUP6_SPI_APPS_CLK_SRC 57 75 + #define BLSP2_QUP6_I2C_APPS_CLK_SRC 58 76 + #define BLSP2_UART6_APPS_CLK_SRC 59 77 + #define PDM2_CLK_SRC 60 78 + #define TSIF_REF_CLK_SRC 61 79 + #define CE1_CLK_SRC 62 80 + #define GCC_SLEEP_CLK_SRC 63 81 + #define BIMC_CLK_SRC 64 82 + #define HMSS_AHB_CLK_SRC 65 83 + #define BIMC_HMSS_AXI_CLK_SRC 66 84 + #define HMSS_RBCPR_CLK_SRC 67 85 + #define HMSS_GPLL0_CLK_SRC 68 86 + #define GP1_CLK_SRC 69 87 + #define GP2_CLK_SRC 70 88 + #define GP3_CLK_SRC 71 89 + #define PCIE_AUX_CLK_SRC 72 90 + #define UFS_AXI_CLK_SRC 73 91 + #define UFS_ICE_CORE_CLK_SRC 74 92 + #define QSPI_SER_CLK_SRC 75 93 + #define GCC_SYS_NOC_AXI_CLK 76 94 + #define GCC_SYS_NOC_HMSS_AHB_CLK 77 95 + #define GCC_SNOC_CNOC_AHB_CLK 78 96 + #define GCC_SNOC_PNOC_AHB_CLK 79 97 + #define GCC_SYS_NOC_AT_CLK 80 98 + #define GCC_SYS_NOC_USB3_AXI_CLK 81 99 + #define GCC_SYS_NOC_UFS_AXI_CLK 82 100 + #define GCC_CFG_NOC_AHB_CLK 83 101 + #define GCC_PERIPH_NOC_AHB_CLK 84 102 + #define GCC_PERIPH_NOC_USB20_AHB_CLK 85 103 + #define GCC_TIC_CLK 86 104 + #define GCC_IMEM_AXI_CLK 87 105 + #define GCC_MMSS_SYS_NOC_AXI_CLK 88 106 + #define GCC_MMSS_NOC_CFG_AHB_CLK 89 107 + #define GCC_MMSS_BIMC_GFX_CLK 90 108 + #define GCC_USB30_MASTER_CLK 91 109 + #define GCC_USB30_SLEEP_CLK 92 110 + #define GCC_USB30_MOCK_UTMI_CLK 93 111 + #define GCC_USB3_PHY_AUX_CLK 94 112 + #define GCC_USB3_PHY_PIPE_CLK 95 113 + #define GCC_USB20_MASTER_CLK 96 114 + #define GCC_USB20_SLEEP_CLK 97 115 + #define GCC_USB20_MOCK_UTMI_CLK 98 116 + #define GCC_USB_PHY_CFG_AHB2PHY_CLK 99 117 + #define GCC_SDCC1_APPS_CLK 100 118 + #define GCC_SDCC1_AHB_CLK 101 119 + #define GCC_SDCC1_ICE_CORE_CLK 102 120 + #define GCC_SDCC2_APPS_CLK 103 121 + #define GCC_SDCC2_AHB_CLK 104 122 + #define GCC_SDCC3_APPS_CLK 105 123 + #define GCC_SDCC3_AHB_CLK 106 124 + #define GCC_SDCC4_APPS_CLK 107 125 + #define GCC_SDCC4_AHB_CLK 108 126 + #define GCC_BLSP1_AHB_CLK 109 127 + #define GCC_BLSP1_SLEEP_CLK 110 128 + #define GCC_BLSP1_QUP1_SPI_APPS_CLK 111 129 + #define GCC_BLSP1_QUP1_I2C_APPS_CLK 112 130 + #define GCC_BLSP1_UART1_APPS_CLK 113 131 + #define GCC_BLSP1_QUP2_SPI_APPS_CLK 114 132 + #define GCC_BLSP1_QUP2_I2C_APPS_CLK 115 133 + #define GCC_BLSP1_UART2_APPS_CLK 116 134 + #define GCC_BLSP1_QUP3_SPI_APPS_CLK 117 135 + #define GCC_BLSP1_QUP3_I2C_APPS_CLK 118 136 + #define GCC_BLSP1_UART3_APPS_CLK 119 137 + #define GCC_BLSP1_QUP4_SPI_APPS_CLK 120 138 + #define GCC_BLSP1_QUP4_I2C_APPS_CLK 121 139 + #define GCC_BLSP1_UART4_APPS_CLK 122 140 + #define GCC_BLSP1_QUP5_SPI_APPS_CLK 123 141 + #define GCC_BLSP1_QUP5_I2C_APPS_CLK 124 142 + #define GCC_BLSP1_UART5_APPS_CLK 125 143 + #define GCC_BLSP1_QUP6_SPI_APPS_CLK 126 144 + #define GCC_BLSP1_QUP6_I2C_APPS_CLK 127 145 + #define GCC_BLSP1_UART6_APPS_CLK 128 146 + #define GCC_BLSP2_AHB_CLK 129 147 + #define GCC_BLSP2_SLEEP_CLK 130 148 + #define GCC_BLSP2_QUP1_SPI_APPS_CLK 131 149 + #define GCC_BLSP2_QUP1_I2C_APPS_CLK 132 150 + #define GCC_BLSP2_UART1_APPS_CLK 133 151 + #define GCC_BLSP2_QUP2_SPI_APPS_CLK 134 152 + #define GCC_BLSP2_QUP2_I2C_APPS_CLK 135 153 + #define GCC_BLSP2_UART2_APPS_CLK 136 154 + #define GCC_BLSP2_QUP3_SPI_APPS_CLK 137 155 + #define GCC_BLSP2_QUP3_I2C_APPS_CLK 138 156 + #define GCC_BLSP2_UART3_APPS_CLK 139 157 + #define GCC_BLSP2_QUP4_SPI_APPS_CLK 140 158 + #define GCC_BLSP2_QUP4_I2C_APPS_CLK 141 159 + #define GCC_BLSP2_UART4_APPS_CLK 142 160 + #define GCC_BLSP2_QUP5_SPI_APPS_CLK 143 161 + #define GCC_BLSP2_QUP5_I2C_APPS_CLK 144 162 + #define GCC_BLSP2_UART5_APPS_CLK 145 163 + #define GCC_BLSP2_QUP6_SPI_APPS_CLK 146 164 + #define GCC_BLSP2_QUP6_I2C_APPS_CLK 147 165 + #define GCC_BLSP2_UART6_APPS_CLK 148 166 + #define GCC_PDM_AHB_CLK 149 167 + #define GCC_PDM_XO4_CLK 150 168 + #define GCC_PDM2_CLK 151 169 + #define GCC_PRNG_AHB_CLK 152 170 + #define GCC_TSIF_AHB_CLK 153 171 + #define GCC_TSIF_REF_CLK 154 172 + #define GCC_TSIF_INACTIVITY_TIMERS_CLK 155 173 + #define GCC_TCSR_AHB_CLK 156 174 + #define GCC_BOOT_ROM_AHB_CLK 157 175 + #define GCC_MSG_RAM_AHB_CLK 158 176 + #define GCC_TLMM_AHB_CLK 159 177 + #define GCC_TLMM_CLK 160 178 + #define GCC_MPM_AHB_CLK 161 179 + #define GCC_SPMI_SER_CLK 162 180 + #define GCC_SPMI_CNOC_AHB_CLK 163 181 + #define GCC_CE1_CLK 164 182 + #define GCC_CE1_AXI_CLK 165 183 + #define GCC_CE1_AHB_CLK 166 184 + #define GCC_BIMC_HMSS_AXI_CLK 167 185 + #define GCC_BIMC_GFX_CLK 168 186 + #define GCC_HMSS_AHB_CLK 169 187 + #define GCC_HMSS_SLV_AXI_CLK 170 188 + #define GCC_HMSS_MSTR_AXI_CLK 171 189 + #define GCC_HMSS_RBCPR_CLK 172 190 + #define GCC_GP1_CLK 173 191 + #define GCC_GP2_CLK 174 192 + #define GCC_GP3_CLK 175 193 + #define GCC_PCIE_0_SLV_AXI_CLK 176 194 + #define GCC_PCIE_0_MSTR_AXI_CLK 177 195 + #define GCC_PCIE_0_CFG_AHB_CLK 178 196 + #define GCC_PCIE_0_AUX_CLK 179 197 + #define GCC_PCIE_0_PIPE_CLK 180 198 + #define GCC_PCIE_1_SLV_AXI_CLK 181 199 + #define GCC_PCIE_1_MSTR_AXI_CLK 182 200 + #define GCC_PCIE_1_CFG_AHB_CLK 183 201 + #define GCC_PCIE_1_AUX_CLK 184 202 + #define GCC_PCIE_1_PIPE_CLK 185 203 + #define GCC_PCIE_2_SLV_AXI_CLK 186 204 + #define GCC_PCIE_2_MSTR_AXI_CLK 187 205 + #define GCC_PCIE_2_CFG_AHB_CLK 188 206 + #define GCC_PCIE_2_AUX_CLK 189 207 + #define GCC_PCIE_2_PIPE_CLK 190 208 + #define GCC_PCIE_PHY_CFG_AHB_CLK 191 209 + #define GCC_PCIE_PHY_AUX_CLK 192 210 + #define GCC_UFS_AXI_CLK 193 211 + #define GCC_UFS_AHB_CLK 194 212 + #define GCC_UFS_TX_CFG_CLK 195 213 + #define GCC_UFS_RX_CFG_CLK 196 214 + #define GCC_UFS_TX_SYMBOL_0_CLK 197 215 + #define GCC_UFS_RX_SYMBOL_0_CLK 198 216 + #define GCC_UFS_RX_SYMBOL_1_CLK 199 217 + #define GCC_UFS_UNIPRO_CORE_CLK 200 218 + #define GCC_UFS_ICE_CORE_CLK 201 219 + #define GCC_UFS_SYS_CLK_CORE_CLK 202 220 + #define GCC_UFS_TX_SYMBOL_CLK_CORE_CLK 203 221 + #define GCC_AGGRE0_SNOC_AXI_CLK 204 222 + #define GCC_AGGRE0_CNOC_AHB_CLK 205 223 + #define GCC_SMMU_AGGRE0_AXI_CLK 206 224 + #define GCC_SMMU_AGGRE0_AHB_CLK 207 225 + #define GCC_AGGRE1_PNOC_AHB_CLK 208 226 + #define GCC_AGGRE2_UFS_AXI_CLK 209 227 + #define GCC_AGGRE2_USB3_AXI_CLK 210 228 + #define GCC_QSPI_AHB_CLK 211 229 + #define GCC_QSPI_SER_CLK 212 230 + #define GCC_USB3_CLKREF_CLK 213 231 + #define GCC_HDMI_CLKREF_CLK 214 232 + #define GCC_UFS_CLKREF_CLK 215 233 + #define GCC_PCIE_CLKREF_CLK 216 234 + #define GCC_RX2_USB2_CLKREF_CLK 217 235 + #define GCC_RX1_USB2_CLKREF_CLK 218 236 + 237 + #define GCC_SYSTEM_NOC_BCR 0 238 + #define GCC_CONFIG_NOC_BCR 1 239 + #define GCC_PERIPH_NOC_BCR 2 240 + #define GCC_IMEM_BCR 3 241 + #define GCC_MMSS_BCR 4 242 + #define GCC_PIMEM_BCR 5 243 + #define GCC_QDSS_BCR 6 244 + #define GCC_USB_30_BCR 7 245 + #define GCC_USB_20_BCR 8 246 + #define GCC_QUSB2PHY_PRIM_BCR 9 247 + #define GCC_QUSB2PHY_SEC_BCR 10 248 + #define GCC_USB_PHY_CFG_AHB2PHY_BCR 11 249 + #define GCC_SDCC1_BCR 12 250 + #define GCC_SDCC2_BCR 13 251 + #define GCC_SDCC3_BCR 14 252 + #define GCC_SDCC4_BCR 15 253 + #define GCC_BLSP1_BCR 16 254 + #define GCC_BLSP1_QUP1_BCR 17 255 + #define GCC_BLSP1_UART1_BCR 18 256 + #define GCC_BLSP1_QUP2_BCR 19 257 + #define GCC_BLSP1_UART2_BCR 20 258 + #define GCC_BLSP1_QUP3_BCR 21 259 + #define GCC_BLSP1_UART3_BCR 22 260 + #define GCC_BLSP1_QUP4_BCR 23 261 + #define GCC_BLSP1_UART4_BCR 24 262 + #define GCC_BLSP1_QUP5_BCR 25 263 + #define GCC_BLSP1_UART5_BCR 26 264 + #define GCC_BLSP1_QUP6_BCR 27 265 + #define GCC_BLSP1_UART6_BCR 28 266 + #define GCC_BLSP2_BCR 29 267 + #define GCC_BLSP2_QUP1_BCR 30 268 + #define GCC_BLSP2_UART1_BCR 31 269 + #define GCC_BLSP2_QUP2_BCR 32 270 + #define GCC_BLSP2_UART2_BCR 33 271 + #define GCC_BLSP2_QUP3_BCR 34 272 + #define GCC_BLSP2_UART3_BCR 35 273 + #define GCC_BLSP2_QUP4_BCR 36 274 + #define GCC_BLSP2_UART4_BCR 37 275 + #define GCC_BLSP2_QUP5_BCR 38 276 + #define GCC_BLSP2_UART5_BCR 39 277 + #define GCC_BLSP2_QUP6_BCR 40 278 + #define GCC_BLSP2_UART6_BCR 41 279 + #define GCC_PDM_BCR 42 280 + #define GCC_PRNG_BCR 43 281 + #define GCC_TSIF_BCR 44 282 + #define GCC_TCSR_BCR 45 283 + #define GCC_BOOT_ROM_BCR 46 284 + #define GCC_MSG_RAM_BCR 47 285 + #define GCC_TLMM_BCR 48 286 + #define GCC_MPM_BCR 49 287 + #define GCC_SEC_CTRL_BCR 50 288 + #define GCC_SPMI_BCR 51 289 + #define GCC_SPDM_BCR 52 290 + #define GCC_CE1_BCR 53 291 + #define GCC_BIMC_BCR 54 292 + #define GCC_SNOC_BUS_TIMEOUT0_BCR 55 293 + #define GCC_SNOC_BUS_TIMEOUT2_BCR 56 294 + #define GCC_SNOC_BUS_TIMEOUT1_BCR 57 295 + #define GCC_SNOC_BUS_TIMEOUT3_BCR 58 296 + #define GCC_SNOC_BUS_TIMEOUT_EXTREF_BCR 59 297 + #define GCC_PNOC_BUS_TIMEOUT0_BCR 60 298 + #define GCC_PNOC_BUS_TIMEOUT1_BCR 61 299 + #define GCC_PNOC_BUS_TIMEOUT2_BCR 62 300 + #define GCC_PNOC_BUS_TIMEOUT3_BCR 63 301 + #define GCC_PNOC_BUS_TIMEOUT4_BCR 64 302 + #define GCC_CNOC_BUS_TIMEOUT0_BCR 65 303 + #define GCC_CNOC_BUS_TIMEOUT1_BCR 66 304 + #define GCC_CNOC_BUS_TIMEOUT2_BCR 67 305 + #define GCC_CNOC_BUS_TIMEOUT3_BCR 68 306 + #define GCC_CNOC_BUS_TIMEOUT4_BCR 69 307 + #define GCC_CNOC_BUS_TIMEOUT5_BCR 70 308 + #define GCC_CNOC_BUS_TIMEOUT6_BCR 71 309 + #define GCC_CNOC_BUS_TIMEOUT7_BCR 72 310 + #define GCC_CNOC_BUS_TIMEOUT8_BCR 73 311 + #define GCC_CNOC_BUS_TIMEOUT9_BCR 74 312 + #define GCC_CNOC_BUS_TIMEOUT_EXTREF_BCR 75 313 + #define GCC_APB2JTAG_BCR 76 314 + #define GCC_RBCPR_CX_BCR 77 315 + #define GCC_RBCPR_MX_BCR 78 316 + #define GCC_PCIE_0_BCR 79 317 + #define GCC_PCIE_0_PHY_BCR 80 318 + #define GCC_PCIE_1_BCR 81 319 + #define GCC_PCIE_1_PHY_BCR 82 320 + #define GCC_PCIE_2_BCR 83 321 + #define GCC_PCIE_2_PHY_BCR 84 322 + #define GCC_PCIE_PHY_BCR 85 323 + #define GCC_DCD_BCR 86 324 + #define GCC_OBT_ODT_BCR 87 325 + #define GCC_UFS_BCR 88 326 + #define GCC_SSC_BCR 89 327 + #define GCC_VS_BCR 90 328 + #define GCC_AGGRE0_NOC_BCR 91 329 + #define GCC_AGGRE1_NOC_BCR 92 330 + #define GCC_AGGRE2_NOC_BCR 93 331 + #define GCC_DCC_BCR 94 332 + #define GCC_IPA_BCR 95 333 + #define GCC_QSPI_BCR 96 334 + #define GCC_SKL_BCR 97 335 + #define GCC_MSMPU_BCR 98 336 + #define GCC_MSS_Q6_BCR 99 337 + #define GCC_QREFS_VBG_CAL_BCR 100 338 + 339 + #endif
+285
include/dt-bindings/clock/qcom,mmcc-msm8996.h
··· 1 + /* 2 + * Copyright (c) 2015, The Linux Foundation. All rights reserved. 3 + * 4 + * This software is licensed under the terms of the GNU General Public 5 + * License version 2, as published by the Free Software Foundation, and 6 + * may be copied, distributed, and modified under those terms. 7 + * 8 + * This program is distributed in the hope that it will be useful, 9 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 + * GNU General Public License for more details. 12 + */ 13 + 14 + #ifndef _DT_BINDINGS_CLK_MSM_MMCC_8996_H 15 + #define _DT_BINDINGS_CLK_MSM_MMCC_8996_H 16 + 17 + #define MMPLL0_EARLY 0 18 + #define MMPLL0_PLL 1 19 + #define MMPLL1_EARLY 2 20 + #define MMPLL1_PLL 3 21 + #define MMPLL2_EARLY 4 22 + #define MMPLL2_PLL 5 23 + #define MMPLL3_EARLY 6 24 + #define MMPLL3_PLL 7 25 + #define MMPLL4_EARLY 8 26 + #define MMPLL4_PLL 9 27 + #define MMPLL5_EARLY 10 28 + #define MMPLL5_PLL 11 29 + #define MMPLL8_EARLY 12 30 + #define MMPLL8_PLL 13 31 + #define MMPLL9_EARLY 14 32 + #define MMPLL9_PLL 15 33 + #define AHB_CLK_SRC 16 34 + #define AXI_CLK_SRC 17 35 + #define MAXI_CLK_SRC 18 36 + #define DSA_CORE_CLK_SRC 19 37 + #define GFX3D_CLK_SRC 20 38 + #define RBBMTIMER_CLK_SRC 21 39 + #define ISENSE_CLK_SRC 22 40 + #define RBCPR_CLK_SRC 23 41 + #define VIDEO_CORE_CLK_SRC 24 42 + #define VIDEO_SUBCORE0_CLK_SRC 25 43 + #define VIDEO_SUBCORE1_CLK_SRC 26 44 + #define PCLK0_CLK_SRC 27 45 + #define PCLK1_CLK_SRC 28 46 + #define MDP_CLK_SRC 29 47 + #define EXTPCLK_CLK_SRC 30 48 + #define VSYNC_CLK_SRC 31 49 + #define HDMI_CLK_SRC 32 50 + #define BYTE0_CLK_SRC 33 51 + #define BYTE1_CLK_SRC 34 52 + #define ESC0_CLK_SRC 35 53 + #define ESC1_CLK_SRC 36 54 + #define CAMSS_GP0_CLK_SRC 37 55 + #define CAMSS_GP1_CLK_SRC 38 56 + #define MCLK0_CLK_SRC 39 57 + #define MCLK1_CLK_SRC 40 58 + #define MCLK2_CLK_SRC 41 59 + #define MCLK3_CLK_SRC 42 60 + #define CCI_CLK_SRC 43 61 + #define CSI0PHYTIMER_CLK_SRC 44 62 + #define CSI1PHYTIMER_CLK_SRC 45 63 + #define CSI2PHYTIMER_CLK_SRC 46 64 + #define CSIPHY0_3P_CLK_SRC 47 65 + #define CSIPHY1_3P_CLK_SRC 48 66 + #define CSIPHY2_3P_CLK_SRC 49 67 + #define JPEG0_CLK_SRC 50 68 + #define JPEG2_CLK_SRC 51 69 + #define JPEG_DMA_CLK_SRC 52 70 + #define VFE0_CLK_SRC 53 71 + #define VFE1_CLK_SRC 54 72 + #define CPP_CLK_SRC 55 73 + #define CSI0_CLK_SRC 56 74 + #define CSI1_CLK_SRC 57 75 + #define CSI2_CLK_SRC 58 76 + #define CSI3_CLK_SRC 59 77 + #define FD_CORE_CLK_SRC 60 78 + #define MMSS_CXO_CLK 61 79 + #define MMSS_SLEEPCLK_CLK 62 80 + #define MMSS_MMAGIC_AHB_CLK 63 81 + #define MMSS_MMAGIC_CFG_AHB_CLK 64 82 + #define MMSS_MISC_AHB_CLK 65 83 + #define MMSS_MISC_CXO_CLK 66 84 + #define MMSS_BTO_AHB_CLK 67 85 + #define MMSS_MMAGIC_AXI_CLK 68 86 + #define MMSS_S0_AXI_CLK 69 87 + #define MMSS_MMAGIC_MAXI_CLK 70 88 + #define DSA_CORE_CLK 71 89 + #define DSA_NOC_CFG_AHB_CLK 72 90 + #define MMAGIC_CAMSS_AXI_CLK 73 91 + #define MMAGIC_CAMSS_NOC_CFG_AHB_CLK 74 92 + #define THROTTLE_CAMSS_CXO_CLK 75 93 + #define THROTTLE_CAMSS_AHB_CLK 76 94 + #define THROTTLE_CAMSS_AXI_CLK 77 95 + #define SMMU_VFE_AHB_CLK 78 96 + #define SMMU_VFE_AXI_CLK 79 97 + #define SMMU_CPP_AHB_CLK 80 98 + #define SMMU_CPP_AXI_CLK 81 99 + #define SMMU_JPEG_AHB_CLK 82 100 + #define SMMU_JPEG_AXI_CLK 83 101 + #define MMAGIC_MDSS_AXI_CLK 84 102 + #define MMAGIC_MDSS_NOC_CFG_AHB_CLK 85 103 + #define THROTTLE_MDSS_CXO_CLK 86 104 + #define THROTTLE_MDSS_AHB_CLK 87 105 + #define THROTTLE_MDSS_AXI_CLK 88 106 + #define SMMU_ROT_AHB_CLK 89 107 + #define SMMU_ROT_AXI_CLK 90 108 + #define SMMU_MDP_AHB_CLK 91 109 + #define SMMU_MDP_AXI_CLK 92 110 + #define MMAGIC_VIDEO_AXI_CLK 93 111 + #define MMAGIC_VIDEO_NOC_CFG_AHB_CLK 94 112 + #define THROTTLE_VIDEO_CXO_CLK 95 113 + #define THROTTLE_VIDEO_AHB_CLK 96 114 + #define THROTTLE_VIDEO_AXI_CLK 97 115 + #define SMMU_VIDEO_AHB_CLK 98 116 + #define SMMU_VIDEO_AXI_CLK 99 117 + #define MMAGIC_BIMC_AXI_CLK 100 118 + #define MMAGIC_BIMC_NOC_CFG_AHB_CLK 101 119 + #define GPU_GX_GFX3D_CLK 102 120 + #define GPU_GX_RBBMTIMER_CLK 103 121 + #define GPU_AHB_CLK 104 122 + #define GPU_AON_ISENSE_CLK 105 123 + #define VMEM_MAXI_CLK 106 124 + #define VMEM_AHB_CLK 107 125 + #define MMSS_RBCPR_CLK 108 126 + #define MMSS_RBCPR_AHB_CLK 109 127 + #define VIDEO_CORE_CLK 110 128 + #define VIDEO_AXI_CLK 111 129 + #define VIDEO_MAXI_CLK 112 130 + #define VIDEO_AHB_CLK 113 131 + #define VIDEO_SUBCORE0_CLK 114 132 + #define VIDEO_SUBCORE1_CLK 115 133 + #define MDSS_AHB_CLK 116 134 + #define MDSS_HDMI_AHB_CLK 117 135 + #define MDSS_AXI_CLK 118 136 + #define MDSS_PCLK0_CLK 119 137 + #define MDSS_PCLK1_CLK 120 138 + #define MDSS_MDP_CLK 121 139 + #define MDSS_EXTPCLK_CLK 122 140 + #define MDSS_VSYNC_CLK 123 141 + #define MDSS_HDMI_CLK 124 142 + #define MDSS_BYTE0_CLK 125 143 + #define MDSS_BYTE1_CLK 126 144 + #define MDSS_ESC0_CLK 127 145 + #define MDSS_ESC1_CLK 128 146 + #define CAMSS_TOP_AHB_CLK 129 147 + #define CAMSS_AHB_CLK 130 148 + #define CAMSS_MICRO_AHB_CLK 131 149 + #define CAMSS_GP0_CLK 132 150 + #define CAMSS_GP1_CLK 133 151 + #define CAMSS_MCLK0_CLK 134 152 + #define CAMSS_MCLK1_CLK 135 153 + #define CAMSS_MCLK2_CLK 136 154 + #define CAMSS_MCLK3_CLK 137 155 + #define CAMSS_CCI_CLK 138 156 + #define CAMSS_CCI_AHB_CLK 139 157 + #define CAMSS_CSI0PHYTIMER_CLK 140 158 + #define CAMSS_CSI1PHYTIMER_CLK 141 159 + #define CAMSS_CSI2PHYTIMER_CLK 142 160 + #define CAMSS_CSIPHY0_3P_CLK 143 161 + #define CAMSS_CSIPHY1_3P_CLK 144 162 + #define CAMSS_CSIPHY2_3P_CLK 145 163 + #define CAMSS_JPEG0_CLK 146 164 + #define CAMSS_JPEG2_CLK 147 165 + #define CAMSS_JPEG_DMA_CLK 148 166 + #define CAMSS_JPEG_AHB_CLK 149 167 + #define CAMSS_JPEG_AXI_CLK 150 168 + #define CAMSS_VFE_AHB_CLK 151 169 + #define CAMSS_VFE_AXI_CLK 152 170 + #define CAMSS_VFE0_CLK 153 171 + #define CAMSS_VFE0_STREAM_CLK 154 172 + #define CAMSS_VFE0_AHB_CLK 155 173 + #define CAMSS_VFE1_CLK 156 174 + #define CAMSS_VFE1_STREAM_CLK 157 175 + #define CAMSS_VFE1_AHB_CLK 158 176 + #define CAMSS_CSI_VFE0_CLK 159 177 + #define CAMSS_CSI_VFE1_CLK 160 178 + #define CAMSS_CPP_VBIF_AHB_CLK 161 179 + #define CAMSS_CPP_AXI_CLK 162 180 + #define CAMSS_CPP_CLK 163 181 + #define CAMSS_CPP_AHB_CLK 164 182 + #define CAMSS_CSI0_CLK 165 183 + #define CAMSS_CSI0_AHB_CLK 166 184 + #define CAMSS_CSI0PHY_CLK 167 185 + #define CAMSS_CSI0RDI_CLK 168 186 + #define CAMSS_CSI0PIX_CLK 169 187 + #define CAMSS_CSI1_CLK 170 188 + #define CAMSS_CSI1_AHB_CLK 171 189 + #define CAMSS_CSI1PHY_CLK 172 190 + #define CAMSS_CSI1RDI_CLK 173 191 + #define CAMSS_CSI1PIX_CLK 174 192 + #define CAMSS_CSI2_CLK 175 193 + #define CAMSS_CSI2_AHB_CLK 176 194 + #define CAMSS_CSI2PHY_CLK 177 195 + #define CAMSS_CSI2RDI_CLK 178 196 + #define CAMSS_CSI2PIX_CLK 179 197 + #define CAMSS_CSI3_CLK 180 198 + #define CAMSS_CSI3_AHB_CLK 181 199 + #define CAMSS_CSI3PHY_CLK 182 200 + #define CAMSS_CSI3RDI_CLK 183 201 + #define CAMSS_CSI3PIX_CLK 184 202 + #define CAMSS_ISPIF_AHB_CLK 185 203 + #define FD_CORE_CLK 186 204 + #define FD_CORE_UAR_CLK 187 205 + #define FD_AHB_CLK 188 206 + #define MMSS_SPDM_CSI0_CLK 189 207 + #define MMSS_SPDM_JPEG_DMA_CLK 190 208 + #define MMSS_SPDM_CPP_CLK 191 209 + #define MMSS_SPDM_PCLK0_CLK 192 210 + #define MMSS_SPDM_AHB_CLK 193 211 + #define MMSS_SPDM_GFX3D_CLK 194 212 + #define MMSS_SPDM_PCLK1_CLK 195 213 + #define MMSS_SPDM_JPEG2_CLK 196 214 + #define MMSS_SPDM_DEBUG_CLK 197 215 + #define MMSS_SPDM_VFE1_CLK 198 216 + #define MMSS_SPDM_VFE0_CLK 199 217 + #define MMSS_SPDM_VIDEO_CORE_CLK 200 218 + #define MMSS_SPDM_AXI_CLK 201 219 + #define MMSS_SPDM_MDP_CLK 202 220 + #define MMSS_SPDM_JPEG0_CLK 203 221 + #define MMSS_SPDM_RM_AXI_CLK 204 222 + #define MMSS_SPDM_RM_MAXI_CLK 205 223 + 224 + #define MMAGICAHB_BCR 0 225 + #define MMAGIC_CFG_BCR 1 226 + #define MISC_BCR 2 227 + #define BTO_BCR 3 228 + #define MMAGICAXI_BCR 4 229 + #define MMAGICMAXI_BCR 5 230 + #define DSA_BCR 6 231 + #define MMAGIC_CAMSS_BCR 7 232 + #define THROTTLE_CAMSS_BCR 8 233 + #define SMMU_VFE_BCR 9 234 + #define SMMU_CPP_BCR 10 235 + #define SMMU_JPEG_BCR 11 236 + #define MMAGIC_MDSS_BCR 12 237 + #define THROTTLE_MDSS_BCR 13 238 + #define SMMU_ROT_BCR 14 239 + #define SMMU_MDP_BCR 15 240 + #define MMAGIC_VIDEO_BCR 16 241 + #define THROTTLE_VIDEO_BCR 17 242 + #define SMMU_VIDEO_BCR 18 243 + #define MMAGIC_BIMC_BCR 19 244 + #define GPU_GX_BCR 20 245 + #define GPU_BCR 21 246 + #define GPU_AON_BCR 22 247 + #define VMEM_BCR 23 248 + #define MMSS_RBCPR_BCR 24 249 + #define VIDEO_BCR 25 250 + #define MDSS_BCR 26 251 + #define CAMSS_TOP_BCR 27 252 + #define CAMSS_AHB_BCR 28 253 + #define CAMSS_MICRO_BCR 29 254 + #define CAMSS_CCI_BCR 30 255 + #define CAMSS_PHY0_BCR 31 256 + #define CAMSS_PHY1_BCR 32 257 + #define CAMSS_PHY2_BCR 33 258 + #define CAMSS_CSIPHY0_3P_BCR 34 259 + #define CAMSS_CSIPHY1_3P_BCR 35 260 + #define CAMSS_CSIPHY2_3P_BCR 36 261 + #define CAMSS_JPEG_BCR 37 262 + #define CAMSS_VFE_BCR 38 263 + #define CAMSS_VFE0_BCR 39 264 + #define CAMSS_VFE1_BCR 40 265 + #define CAMSS_CSI_VFE0_BCR 41 266 + #define CAMSS_CSI_VFE1_BCR 42 267 + #define CAMSS_CPP_TOP_BCR 43 268 + #define CAMSS_CPP_BCR 44 269 + #define CAMSS_CSI0_BCR 45 270 + #define CAMSS_CSI0RDI_BCR 46 271 + #define CAMSS_CSI0PIX_BCR 47 272 + #define CAMSS_CSI1_BCR 48 273 + #define CAMSS_CSI1RDI_BCR 49 274 + #define CAMSS_CSI1PIX_BCR 50 275 + #define CAMSS_CSI2_BCR 51 276 + #define CAMSS_CSI2RDI_BCR 52 277 + #define CAMSS_CSI2PIX_BCR 53 278 + #define CAMSS_CSI3_BCR 54 279 + #define CAMSS_CSI3RDI_BCR 55 280 + #define CAMSS_CSI3PIX_BCR 56 281 + #define CAMSS_ISPIF_BCR 57 282 + #define FD_BCR 58 283 + #define MMSS_SPDM_RM_BCR 59 284 + 285 + #endif