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

Merge tag 'qcom-clocks-for-3.17' of git://git.kernel.org/pub/scm/linux/kernel/git/galak/linux-qcom into clk-next-msm

qcom clock changes for 3.17

These patches add support for a handful of Qualcomm's SoC clock
controllers: APQ8084 gcc and mmcc, IPQ8064 gcc, and APQ8064.
There's also a small collection of bug fixes that aren't critical
-rc worthy regressions because the consumer drivers aren't present
or using the buggy clocks and one optimization for HDMI.

+11747 -80
+2
Documentation/devicetree/bindings/clock/qcom,gcc.txt
··· 5 5 - compatible : shall contain only one of the following: 6 6 7 7 "qcom,gcc-apq8064" 8 + "qcom,gcc-apq8084" 9 + "qcom,gcc-ipq8064" 8 10 "qcom,gcc-msm8660" 9 11 "qcom,gcc-msm8960" 10 12 "qcom,gcc-msm8974"
+2
Documentation/devicetree/bindings/clock/qcom,mmcc.txt
··· 4 4 Required properties : 5 5 - compatible : shall contain only one of the following: 6 6 7 + "qcom,mmcc-apq8064" 8 + "qcom,mmcc-apq8084" 7 9 "qcom,mmcc-msm8660" 8 10 "qcom,mmcc-msm8960" 9 11 "qcom,mmcc-msm8974"
+25
drivers/clk/qcom/Kconfig
··· 4 4 select REGMAP_MMIO 5 5 select RESET_CONTROLLER 6 6 7 + config APQ_GCC_8084 8 + tristate "APQ8084 Global Clock Controller" 9 + depends on COMMON_CLK_QCOM 10 + help 11 + Support for the global clock controller on apq8084 devices. 12 + Say Y if you want to use peripheral devices such as UART, SPI, 13 + i2c, USB, SD/eMMC, SATA, PCIe, etc. 14 + 15 + config APQ_MMCC_8084 16 + tristate "APQ8084 Multimedia Clock Controller" 17 + select APQ_GCC_8084 18 + depends on COMMON_CLK_QCOM 19 + help 20 + Support for the multimedia clock controller on apq8084 devices. 21 + Say Y if you want to support multimedia devices such as display, 22 + graphics, video encode/decode, camera, etc. 23 + 24 + config IPQ_GCC_806X 25 + tristate "IPQ806x Global Clock Controller" 26 + depends on COMMON_CLK_QCOM 27 + help 28 + Support for the global clock controller on ipq806x devices. 29 + Say Y if you want to use peripheral devices such as UART, SPI, 30 + i2c, USB, SD/eMMC, etc. 31 + 7 32 config MSM_GCC_8660 8 33 tristate "MSM8660 Global Clock Controller" 9 34 depends on COMMON_CLK_QCOM
+3
drivers/clk/qcom/Makefile
··· 8 8 clk-qcom-y += clk-branch.o 9 9 clk-qcom-y += reset.o 10 10 11 + obj-$(CONFIG_APQ_GCC_8084) += gcc-apq8084.o 12 + obj-$(CONFIG_APQ_MMCC_8084) += mmcc-apq8084.o 13 + obj-$(CONFIG_IPQ_GCC_806X) += gcc-ipq806x.o 11 14 obj-$(CONFIG_MSM_GCC_8660) += gcc-msm8660.o 12 15 obj-$(CONFIG_MSM_GCC_8960) += gcc-msm8960.o 13 16 obj-$(CONFIG_MSM_GCC_8974) += gcc-msm8974.o
+12 -3
drivers/clk/qcom/clk-pll.c
··· 166 166 EXPORT_SYMBOL_GPL(clk_pll_vote_ops); 167 167 168 168 static void 169 - clk_pll_set_fsm_mode(struct clk_pll *pll, struct regmap *regmap) 169 + clk_pll_set_fsm_mode(struct clk_pll *pll, struct regmap *regmap, u8 lock_count) 170 170 { 171 171 u32 val; 172 172 u32 mask; ··· 175 175 regmap_update_bits(regmap, pll->mode_reg, PLL_VOTE_FSM_RESET, 0); 176 176 177 177 /* Program bias count and lock count */ 178 - val = 1 << PLL_BIAS_COUNT_SHIFT; 178 + val = 1 << PLL_BIAS_COUNT_SHIFT | lock_count << PLL_LOCK_COUNT_SHIFT; 179 179 mask = PLL_BIAS_COUNT_MASK << PLL_BIAS_COUNT_SHIFT; 180 180 mask |= PLL_LOCK_COUNT_MASK << PLL_LOCK_COUNT_SHIFT; 181 181 regmap_update_bits(regmap, pll->mode_reg, mask, val); ··· 212 212 regmap_update_bits(regmap, pll->config_reg, mask, val); 213 213 } 214 214 215 + void clk_pll_configure_sr(struct clk_pll *pll, struct regmap *regmap, 216 + const struct pll_config *config, bool fsm_mode) 217 + { 218 + clk_pll_configure(pll, regmap, config); 219 + if (fsm_mode) 220 + clk_pll_set_fsm_mode(pll, regmap, 8); 221 + } 222 + EXPORT_SYMBOL_GPL(clk_pll_configure_sr); 223 + 215 224 void clk_pll_configure_sr_hpm_lp(struct clk_pll *pll, struct regmap *regmap, 216 225 const struct pll_config *config, bool fsm_mode) 217 226 { 218 227 clk_pll_configure(pll, regmap, config); 219 228 if (fsm_mode) 220 - clk_pll_set_fsm_mode(pll, regmap); 229 + clk_pll_set_fsm_mode(pll, regmap, 0); 221 230 } 222 231 EXPORT_SYMBOL_GPL(clk_pll_configure_sr_hpm_lp);
+2
drivers/clk/qcom/clk-pll.h
··· 60 60 u32 aux_output_mask; 61 61 }; 62 62 63 + void clk_pll_configure_sr(struct clk_pll *pll, struct regmap *regmap, 64 + const struct pll_config *config, bool fsm_mode); 63 65 void clk_pll_configure_sr_hpm_lp(struct clk_pll *pll, struct regmap *regmap, 64 66 const struct pll_config *config, bool fsm_mode); 65 67
+44 -7
drivers/clk/qcom/clk-rcg.c
··· 417 417 return _freq_tbl_determine_rate(hw, rcg->freq_tbl, rate, p_rate, p); 418 418 } 419 419 420 - static int clk_rcg_set_rate(struct clk_hw *hw, unsigned long rate, 421 - unsigned long parent_rate) 420 + static long clk_rcg_bypass_determine_rate(struct clk_hw *hw, unsigned long rate, 421 + unsigned long *p_rate, struct clk **p) 422 422 { 423 423 struct clk_rcg *rcg = to_clk_rcg(hw); 424 - const struct freq_tbl *f; 424 + const struct freq_tbl *f = rcg->freq_tbl; 425 + 426 + *p = clk_get_parent_by_index(hw->clk, f->src); 427 + *p_rate = __clk_round_rate(*p, rate); 428 + 429 + return *p_rate; 430 + } 431 + 432 + static int __clk_rcg_set_rate(struct clk_rcg *rcg, const struct freq_tbl *f) 433 + { 425 434 u32 ns, md, ctl; 426 435 struct mn *mn = &rcg->mn; 427 436 u32 mask = 0; 428 437 unsigned int reset_reg; 429 - 430 - f = find_freq(rcg->freq_tbl, rate); 431 - if (!f) 432 - return -EINVAL; 433 438 434 439 if (rcg->mn.reset_in_cc) 435 440 reset_reg = rcg->clkr.enable_reg; ··· 469 464 regmap_update_bits(rcg->clkr.regmap, reset_reg, mask, 0); 470 465 471 466 return 0; 467 + } 468 + 469 + static int clk_rcg_set_rate(struct clk_hw *hw, unsigned long rate, 470 + unsigned long parent_rate) 471 + { 472 + struct clk_rcg *rcg = to_clk_rcg(hw); 473 + const struct freq_tbl *f; 474 + 475 + f = find_freq(rcg->freq_tbl, rate); 476 + if (!f) 477 + return -EINVAL; 478 + 479 + return __clk_rcg_set_rate(rcg, f); 480 + } 481 + 482 + static int clk_rcg_bypass_set_rate(struct clk_hw *hw, unsigned long rate, 483 + unsigned long parent_rate) 484 + { 485 + struct clk_rcg *rcg = to_clk_rcg(hw); 486 + 487 + return __clk_rcg_set_rate(rcg, rcg->freq_tbl); 472 488 } 473 489 474 490 static int __clk_dyn_rcg_set_rate(struct clk_hw *hw, unsigned long rate) ··· 528 502 .set_rate = clk_rcg_set_rate, 529 503 }; 530 504 EXPORT_SYMBOL_GPL(clk_rcg_ops); 505 + 506 + const struct clk_ops clk_rcg_bypass_ops = { 507 + .enable = clk_enable_regmap, 508 + .disable = clk_disable_regmap, 509 + .get_parent = clk_rcg_get_parent, 510 + .set_parent = clk_rcg_set_parent, 511 + .recalc_rate = clk_rcg_recalc_rate, 512 + .determine_rate = clk_rcg_bypass_determine_rate, 513 + .set_rate = clk_rcg_bypass_set_rate, 514 + }; 515 + EXPORT_SYMBOL_GPL(clk_rcg_bypass_ops); 531 516 532 517 const struct clk_ops clk_dyn_rcg_ops = { 533 518 .enable = clk_enable_regmap,
+1
drivers/clk/qcom/clk-rcg.h
··· 95 95 }; 96 96 97 97 extern const struct clk_ops clk_rcg_ops; 98 + extern const struct clk_ops clk_rcg_bypass_ops; 98 99 99 100 #define to_clk_rcg(_hw) container_of(to_clk_regmap(_hw), struct clk_rcg, clkr) 100 101
+28 -11
drivers/clk/qcom/common.c
··· 27 27 struct clk *clks[]; 28 28 }; 29 29 30 - int qcom_cc_probe(struct platform_device *pdev, const struct qcom_cc_desc *desc) 30 + struct regmap * 31 + qcom_cc_map(struct platform_device *pdev, const struct qcom_cc_desc *desc) 31 32 { 32 33 void __iomem *base; 33 34 struct resource *res; 35 + struct device *dev = &pdev->dev; 36 + 37 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 38 + base = devm_ioremap_resource(dev, res); 39 + if (IS_ERR(base)) 40 + return ERR_CAST(base); 41 + 42 + return devm_regmap_init_mmio(dev, base, desc->config); 43 + } 44 + EXPORT_SYMBOL_GPL(qcom_cc_map); 45 + 46 + int qcom_cc_really_probe(struct platform_device *pdev, 47 + const struct qcom_cc_desc *desc, struct regmap *regmap) 48 + { 34 49 int i, ret; 35 50 struct device *dev = &pdev->dev; 36 51 struct clk *clk; 37 52 struct clk_onecell_data *data; 38 53 struct clk **clks; 39 - struct regmap *regmap; 40 54 struct qcom_reset_controller *reset; 41 55 struct qcom_cc *cc; 42 56 size_t num_clks = desc->num_clks; 43 57 struct clk_regmap **rclks = desc->clks; 44 - 45 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 46 - base = devm_ioremap_resource(dev, res); 47 - if (IS_ERR(base)) 48 - return PTR_ERR(base); 49 - 50 - regmap = devm_regmap_init_mmio(dev, base, desc->config); 51 - if (IS_ERR(regmap)) 52 - return PTR_ERR(regmap); 53 58 54 59 cc = devm_kzalloc(dev, sizeof(*cc) + sizeof(*clks) * num_clks, 55 60 GFP_KERNEL); ··· 95 90 of_clk_del_provider(dev->of_node); 96 91 97 92 return ret; 93 + } 94 + EXPORT_SYMBOL_GPL(qcom_cc_really_probe); 95 + 96 + int qcom_cc_probe(struct platform_device *pdev, const struct qcom_cc_desc *desc) 97 + { 98 + struct regmap *regmap; 99 + 100 + regmap = qcom_cc_map(pdev, desc); 101 + if (IS_ERR(regmap)) 102 + return PTR_ERR(regmap); 103 + 104 + return qcom_cc_really_probe(pdev, desc, regmap); 98 105 } 99 106 EXPORT_SYMBOL_GPL(qcom_cc_probe); 100 107
+6
drivers/clk/qcom/common.h
··· 17 17 struct regmap_config; 18 18 struct clk_regmap; 19 19 struct qcom_reset_map; 20 + struct regmap; 20 21 21 22 struct qcom_cc_desc { 22 23 const struct regmap_config *config; ··· 27 26 size_t num_resets; 28 27 }; 29 28 29 + extern struct regmap *qcom_cc_map(struct platform_device *pdev, 30 + const struct qcom_cc_desc *desc); 31 + extern int qcom_cc_really_probe(struct platform_device *pdev, 32 + const struct qcom_cc_desc *desc, 33 + struct regmap *regmap); 30 34 extern int qcom_cc_probe(struct platform_device *pdev, 31 35 const struct qcom_cc_desc *desc); 32 36
+3611
drivers/clk/qcom/gcc-apq8084.c
··· 1 + /* 2 + * Copyright (c) 2014, 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-apq8084.h> 26 + #include <dt-bindings/reset/qcom,gcc-apq8084.h> 27 + 28 + #include "common.h" 29 + #include "clk-regmap.h" 30 + #include "clk-pll.h" 31 + #include "clk-rcg.h" 32 + #include "clk-branch.h" 33 + #include "reset.h" 34 + 35 + #define P_XO 0 36 + #define P_GPLL0 1 37 + #define P_GPLL1 1 38 + #define P_GPLL4 2 39 + #define P_PCIE_0_1_PIPE_CLK 1 40 + #define P_SATA_ASIC0_CLK 1 41 + #define P_SATA_RX_CLK 1 42 + #define P_SLEEP_CLK 1 43 + 44 + static const u8 gcc_xo_gpll0_map[] = { 45 + [P_XO] = 0, 46 + [P_GPLL0] = 1, 47 + }; 48 + 49 + static const char *gcc_xo_gpll0[] = { 50 + "xo", 51 + "gpll0_vote", 52 + }; 53 + 54 + static const u8 gcc_xo_gpll0_gpll4_map[] = { 55 + [P_XO] = 0, 56 + [P_GPLL0] = 1, 57 + [P_GPLL4] = 5, 58 + }; 59 + 60 + static const char *gcc_xo_gpll0_gpll4[] = { 61 + "xo", 62 + "gpll0_vote", 63 + "gpll4_vote", 64 + }; 65 + 66 + static const u8 gcc_xo_sata_asic0_map[] = { 67 + [P_XO] = 0, 68 + [P_SATA_ASIC0_CLK] = 2, 69 + }; 70 + 71 + static const char *gcc_xo_sata_asic0[] = { 72 + "xo", 73 + "sata_asic0_clk", 74 + }; 75 + 76 + static const u8 gcc_xo_sata_rx_map[] = { 77 + [P_XO] = 0, 78 + [P_SATA_RX_CLK] = 2, 79 + }; 80 + 81 + static const char *gcc_xo_sata_rx[] = { 82 + "xo", 83 + "sata_rx_clk", 84 + }; 85 + 86 + static const u8 gcc_xo_pcie_map[] = { 87 + [P_XO] = 0, 88 + [P_PCIE_0_1_PIPE_CLK] = 2, 89 + }; 90 + 91 + static const char *gcc_xo_pcie[] = { 92 + "xo", 93 + "pcie_pipe", 94 + }; 95 + 96 + static const u8 gcc_xo_pcie_sleep_map[] = { 97 + [P_XO] = 0, 98 + [P_SLEEP_CLK] = 6, 99 + }; 100 + 101 + static const char *gcc_xo_pcie_sleep[] = { 102 + "xo", 103 + "sleep_clk_src", 104 + }; 105 + 106 + #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) } 107 + 108 + static struct clk_pll gpll0 = { 109 + .l_reg = 0x0004, 110 + .m_reg = 0x0008, 111 + .n_reg = 0x000c, 112 + .config_reg = 0x0014, 113 + .mode_reg = 0x0000, 114 + .status_reg = 0x001c, 115 + .status_bit = 17, 116 + .clkr.hw.init = &(struct clk_init_data){ 117 + .name = "gpll0", 118 + .parent_names = (const char *[]){ "xo" }, 119 + .num_parents = 1, 120 + .ops = &clk_pll_ops, 121 + }, 122 + }; 123 + 124 + static struct clk_regmap gpll0_vote = { 125 + .enable_reg = 0x1480, 126 + .enable_mask = BIT(0), 127 + .hw.init = &(struct clk_init_data){ 128 + .name = "gpll0_vote", 129 + .parent_names = (const char *[]){ "gpll0" }, 130 + .num_parents = 1, 131 + .ops = &clk_pll_vote_ops, 132 + }, 133 + }; 134 + 135 + static struct clk_rcg2 config_noc_clk_src = { 136 + .cmd_rcgr = 0x0150, 137 + .hid_width = 5, 138 + .parent_map = gcc_xo_gpll0_map, 139 + .clkr.hw.init = &(struct clk_init_data){ 140 + .name = "config_noc_clk_src", 141 + .parent_names = gcc_xo_gpll0, 142 + .num_parents = 2, 143 + .ops = &clk_rcg2_ops, 144 + }, 145 + }; 146 + 147 + static struct clk_rcg2 periph_noc_clk_src = { 148 + .cmd_rcgr = 0x0190, 149 + .hid_width = 5, 150 + .parent_map = gcc_xo_gpll0_map, 151 + .clkr.hw.init = &(struct clk_init_data){ 152 + .name = "periph_noc_clk_src", 153 + .parent_names = gcc_xo_gpll0, 154 + .num_parents = 2, 155 + .ops = &clk_rcg2_ops, 156 + }, 157 + }; 158 + 159 + static struct clk_rcg2 system_noc_clk_src = { 160 + .cmd_rcgr = 0x0120, 161 + .hid_width = 5, 162 + .parent_map = gcc_xo_gpll0_map, 163 + .clkr.hw.init = &(struct clk_init_data){ 164 + .name = "system_noc_clk_src", 165 + .parent_names = gcc_xo_gpll0, 166 + .num_parents = 2, 167 + .ops = &clk_rcg2_ops, 168 + }, 169 + }; 170 + 171 + static struct clk_pll gpll1 = { 172 + .l_reg = 0x0044, 173 + .m_reg = 0x0048, 174 + .n_reg = 0x004c, 175 + .config_reg = 0x0054, 176 + .mode_reg = 0x0040, 177 + .status_reg = 0x005c, 178 + .status_bit = 17, 179 + .clkr.hw.init = &(struct clk_init_data){ 180 + .name = "gpll1", 181 + .parent_names = (const char *[]){ "xo" }, 182 + .num_parents = 1, 183 + .ops = &clk_pll_ops, 184 + }, 185 + }; 186 + 187 + static struct clk_regmap gpll1_vote = { 188 + .enable_reg = 0x1480, 189 + .enable_mask = BIT(1), 190 + .hw.init = &(struct clk_init_data){ 191 + .name = "gpll1_vote", 192 + .parent_names = (const char *[]){ "gpll1" }, 193 + .num_parents = 1, 194 + .ops = &clk_pll_vote_ops, 195 + }, 196 + }; 197 + 198 + static struct clk_pll gpll4 = { 199 + .l_reg = 0x1dc4, 200 + .m_reg = 0x1dc8, 201 + .n_reg = 0x1dcc, 202 + .config_reg = 0x1dd4, 203 + .mode_reg = 0x1dc0, 204 + .status_reg = 0x1ddc, 205 + .status_bit = 17, 206 + .clkr.hw.init = &(struct clk_init_data){ 207 + .name = "gpll4", 208 + .parent_names = (const char *[]){ "xo" }, 209 + .num_parents = 1, 210 + .ops = &clk_pll_ops, 211 + }, 212 + }; 213 + 214 + static struct clk_regmap gpll4_vote = { 215 + .enable_reg = 0x1480, 216 + .enable_mask = BIT(4), 217 + .hw.init = &(struct clk_init_data){ 218 + .name = "gpll4_vote", 219 + .parent_names = (const char *[]){ "gpll4" }, 220 + .num_parents = 1, 221 + .ops = &clk_pll_vote_ops, 222 + }, 223 + }; 224 + 225 + static const struct freq_tbl ftbl_gcc_ufs_axi_clk[] = { 226 + F(100000000, P_GPLL0, 6, 0, 0), 227 + F(200000000, P_GPLL0, 3, 0, 0), 228 + F(240000000, P_GPLL0, 2.5, 0, 0), 229 + { } 230 + }; 231 + 232 + static struct clk_rcg2 ufs_axi_clk_src = { 233 + .cmd_rcgr = 0x1d64, 234 + .mnd_width = 8, 235 + .hid_width = 5, 236 + .parent_map = gcc_xo_gpll0_map, 237 + .freq_tbl = ftbl_gcc_ufs_axi_clk, 238 + .clkr.hw.init = &(struct clk_init_data){ 239 + .name = "ufs_axi_clk_src", 240 + .parent_names = gcc_xo_gpll0, 241 + .num_parents = 2, 242 + .ops = &clk_rcg2_ops, 243 + }, 244 + }; 245 + 246 + static const struct freq_tbl ftbl_gcc_usb30_master_clk[] = { 247 + F(125000000, P_GPLL0, 1, 5, 24), 248 + { } 249 + }; 250 + 251 + static struct clk_rcg2 usb30_master_clk_src = { 252 + .cmd_rcgr = 0x03d4, 253 + .mnd_width = 8, 254 + .hid_width = 5, 255 + .parent_map = gcc_xo_gpll0_map, 256 + .freq_tbl = ftbl_gcc_usb30_master_clk, 257 + .clkr.hw.init = &(struct clk_init_data){ 258 + .name = "usb30_master_clk_src", 259 + .parent_names = gcc_xo_gpll0, 260 + .num_parents = 2, 261 + .ops = &clk_rcg2_ops, 262 + }, 263 + }; 264 + 265 + static const struct freq_tbl ftbl_gcc_usb30_sec_master_clk[] = { 266 + F(125000000, P_GPLL0, 1, 5, 24), 267 + { } 268 + }; 269 + 270 + static struct clk_rcg2 usb30_sec_master_clk_src = { 271 + .cmd_rcgr = 0x1bd4, 272 + .mnd_width = 8, 273 + .hid_width = 5, 274 + .parent_map = gcc_xo_gpll0_map, 275 + .freq_tbl = ftbl_gcc_usb30_sec_master_clk, 276 + .clkr.hw.init = &(struct clk_init_data){ 277 + .name = "usb30_sec_master_clk_src", 278 + .parent_names = gcc_xo_gpll0, 279 + .num_parents = 2, 280 + .ops = &clk_rcg2_ops, 281 + }, 282 + }; 283 + 284 + static struct clk_branch gcc_usb30_sec_mock_utmi_clk = { 285 + .halt_reg = 0x1bd0, 286 + .clkr = { 287 + .enable_reg = 0x1bd0, 288 + .enable_mask = BIT(0), 289 + .hw.init = &(struct clk_init_data){ 290 + .name = "gcc_usb30_sec_mock_utmi_clk", 291 + .parent_names = (const char *[]){ 292 + "usb30_sec_mock_utmi_clk_src", 293 + }, 294 + .num_parents = 1, 295 + .flags = CLK_SET_RATE_PARENT, 296 + .ops = &clk_branch2_ops, 297 + }, 298 + }, 299 + }; 300 + 301 + static struct clk_branch gcc_usb30_sec_sleep_clk = { 302 + .halt_reg = 0x1bcc, 303 + .clkr = { 304 + .enable_reg = 0x1bcc, 305 + .enable_mask = BIT(0), 306 + .hw.init = &(struct clk_init_data){ 307 + .name = "gcc_usb30_sec_sleep_clk", 308 + .parent_names = (const char *[]){ 309 + "sleep_clk_src", 310 + }, 311 + .num_parents = 1, 312 + .flags = CLK_SET_RATE_PARENT, 313 + .ops = &clk_branch2_ops, 314 + }, 315 + }, 316 + }; 317 + 318 + static const struct freq_tbl ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk[] = { 319 + F(19200000, P_XO, 1, 0, 0), 320 + F(50000000, P_GPLL0, 12, 0, 0), 321 + { } 322 + }; 323 + 324 + static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = { 325 + .cmd_rcgr = 0x0660, 326 + .hid_width = 5, 327 + .parent_map = gcc_xo_gpll0_map, 328 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk, 329 + .clkr.hw.init = &(struct clk_init_data){ 330 + .name = "blsp1_qup1_i2c_apps_clk_src", 331 + .parent_names = gcc_xo_gpll0, 332 + .num_parents = 2, 333 + .ops = &clk_rcg2_ops, 334 + }, 335 + }; 336 + 337 + static const struct freq_tbl ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk[] = { 338 + F(960000, P_XO, 10, 1, 2), 339 + F(4800000, P_XO, 4, 0, 0), 340 + F(9600000, P_XO, 2, 0, 0), 341 + F(15000000, P_GPLL0, 10, 1, 4), 342 + F(19200000, P_XO, 1, 0, 0), 343 + F(25000000, P_GPLL0, 12, 1, 2), 344 + F(50000000, P_GPLL0, 12, 0, 0), 345 + { } 346 + }; 347 + 348 + static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = { 349 + .cmd_rcgr = 0x064c, 350 + .mnd_width = 8, 351 + .hid_width = 5, 352 + .parent_map = gcc_xo_gpll0_map, 353 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk, 354 + .clkr.hw.init = &(struct clk_init_data){ 355 + .name = "blsp1_qup1_spi_apps_clk_src", 356 + .parent_names = gcc_xo_gpll0, 357 + .num_parents = 2, 358 + .ops = &clk_rcg2_ops, 359 + }, 360 + }; 361 + 362 + static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = { 363 + .cmd_rcgr = 0x06e0, 364 + .hid_width = 5, 365 + .parent_map = gcc_xo_gpll0_map, 366 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk, 367 + .clkr.hw.init = &(struct clk_init_data){ 368 + .name = "blsp1_qup2_i2c_apps_clk_src", 369 + .parent_names = gcc_xo_gpll0, 370 + .num_parents = 2, 371 + .ops = &clk_rcg2_ops, 372 + }, 373 + }; 374 + 375 + static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = { 376 + .cmd_rcgr = 0x06cc, 377 + .mnd_width = 8, 378 + .hid_width = 5, 379 + .parent_map = gcc_xo_gpll0_map, 380 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk, 381 + .clkr.hw.init = &(struct clk_init_data){ 382 + .name = "blsp1_qup2_spi_apps_clk_src", 383 + .parent_names = gcc_xo_gpll0, 384 + .num_parents = 2, 385 + .ops = &clk_rcg2_ops, 386 + }, 387 + }; 388 + 389 + static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = { 390 + .cmd_rcgr = 0x0760, 391 + .hid_width = 5, 392 + .parent_map = gcc_xo_gpll0_map, 393 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk, 394 + .clkr.hw.init = &(struct clk_init_data){ 395 + .name = "blsp1_qup3_i2c_apps_clk_src", 396 + .parent_names = gcc_xo_gpll0, 397 + .num_parents = 2, 398 + .ops = &clk_rcg2_ops, 399 + }, 400 + }; 401 + 402 + static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = { 403 + .cmd_rcgr = 0x074c, 404 + .mnd_width = 8, 405 + .hid_width = 5, 406 + .parent_map = gcc_xo_gpll0_map, 407 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk, 408 + .clkr.hw.init = &(struct clk_init_data){ 409 + .name = "blsp1_qup3_spi_apps_clk_src", 410 + .parent_names = gcc_xo_gpll0, 411 + .num_parents = 2, 412 + .ops = &clk_rcg2_ops, 413 + }, 414 + }; 415 + 416 + static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = { 417 + .cmd_rcgr = 0x07e0, 418 + .hid_width = 5, 419 + .parent_map = gcc_xo_gpll0_map, 420 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk, 421 + .clkr.hw.init = &(struct clk_init_data){ 422 + .name = "blsp1_qup4_i2c_apps_clk_src", 423 + .parent_names = gcc_xo_gpll0, 424 + .num_parents = 2, 425 + .ops = &clk_rcg2_ops, 426 + }, 427 + }; 428 + 429 + static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = { 430 + .cmd_rcgr = 0x07cc, 431 + .mnd_width = 8, 432 + .hid_width = 5, 433 + .parent_map = gcc_xo_gpll0_map, 434 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk, 435 + .clkr.hw.init = &(struct clk_init_data){ 436 + .name = "blsp1_qup4_spi_apps_clk_src", 437 + .parent_names = gcc_xo_gpll0, 438 + .num_parents = 2, 439 + .ops = &clk_rcg2_ops, 440 + }, 441 + }; 442 + 443 + static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = { 444 + .cmd_rcgr = 0x0860, 445 + .hid_width = 5, 446 + .parent_map = gcc_xo_gpll0_map, 447 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk, 448 + .clkr.hw.init = &(struct clk_init_data){ 449 + .name = "blsp1_qup5_i2c_apps_clk_src", 450 + .parent_names = gcc_xo_gpll0, 451 + .num_parents = 2, 452 + .ops = &clk_rcg2_ops, 453 + }, 454 + }; 455 + 456 + static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = { 457 + .cmd_rcgr = 0x084c, 458 + .mnd_width = 8, 459 + .hid_width = 5, 460 + .parent_map = gcc_xo_gpll0_map, 461 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk, 462 + .clkr.hw.init = &(struct clk_init_data){ 463 + .name = "blsp1_qup5_spi_apps_clk_src", 464 + .parent_names = gcc_xo_gpll0, 465 + .num_parents = 2, 466 + .ops = &clk_rcg2_ops, 467 + }, 468 + }; 469 + 470 + static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = { 471 + .cmd_rcgr = 0x08e0, 472 + .hid_width = 5, 473 + .parent_map = gcc_xo_gpll0_map, 474 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk, 475 + .clkr.hw.init = &(struct clk_init_data){ 476 + .name = "blsp1_qup6_i2c_apps_clk_src", 477 + .parent_names = gcc_xo_gpll0, 478 + .num_parents = 2, 479 + .ops = &clk_rcg2_ops, 480 + }, 481 + }; 482 + 483 + static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = { 484 + .cmd_rcgr = 0x08cc, 485 + .mnd_width = 8, 486 + .hid_width = 5, 487 + .parent_map = gcc_xo_gpll0_map, 488 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk, 489 + .clkr.hw.init = &(struct clk_init_data){ 490 + .name = "blsp1_qup6_spi_apps_clk_src", 491 + .parent_names = gcc_xo_gpll0, 492 + .num_parents = 2, 493 + .ops = &clk_rcg2_ops, 494 + }, 495 + }; 496 + 497 + static const struct freq_tbl ftbl_gcc_blsp1_2_uart1_6_apps_clk[] = { 498 + F(3686400, P_GPLL0, 1, 96, 15625), 499 + F(7372800, P_GPLL0, 1, 192, 15625), 500 + F(14745600, P_GPLL0, 1, 384, 15625), 501 + F(16000000, P_GPLL0, 5, 2, 15), 502 + F(19200000, P_XO, 1, 0, 0), 503 + F(24000000, P_GPLL0, 5, 1, 5), 504 + F(32000000, P_GPLL0, 1, 4, 75), 505 + F(40000000, P_GPLL0, 15, 0, 0), 506 + F(46400000, P_GPLL0, 1, 29, 375), 507 + F(48000000, P_GPLL0, 12.5, 0, 0), 508 + F(51200000, P_GPLL0, 1, 32, 375), 509 + F(56000000, P_GPLL0, 1, 7, 75), 510 + F(58982400, P_GPLL0, 1, 1536, 15625), 511 + F(60000000, P_GPLL0, 10, 0, 0), 512 + F(63160000, P_GPLL0, 9.5, 0, 0), 513 + { } 514 + }; 515 + 516 + static struct clk_rcg2 blsp1_uart1_apps_clk_src = { 517 + .cmd_rcgr = 0x068c, 518 + .mnd_width = 16, 519 + .hid_width = 5, 520 + .parent_map = gcc_xo_gpll0_map, 521 + .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk, 522 + .clkr.hw.init = &(struct clk_init_data){ 523 + .name = "blsp1_uart1_apps_clk_src", 524 + .parent_names = gcc_xo_gpll0, 525 + .num_parents = 2, 526 + .ops = &clk_rcg2_ops, 527 + }, 528 + }; 529 + 530 + static struct clk_rcg2 blsp1_uart2_apps_clk_src = { 531 + .cmd_rcgr = 0x070c, 532 + .mnd_width = 16, 533 + .hid_width = 5, 534 + .parent_map = gcc_xo_gpll0_map, 535 + .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk, 536 + .clkr.hw.init = &(struct clk_init_data){ 537 + .name = "blsp1_uart2_apps_clk_src", 538 + .parent_names = gcc_xo_gpll0, 539 + .num_parents = 2, 540 + .ops = &clk_rcg2_ops, 541 + }, 542 + }; 543 + 544 + static struct clk_rcg2 blsp1_uart3_apps_clk_src = { 545 + .cmd_rcgr = 0x078c, 546 + .mnd_width = 16, 547 + .hid_width = 5, 548 + .parent_map = gcc_xo_gpll0_map, 549 + .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk, 550 + .clkr.hw.init = &(struct clk_init_data){ 551 + .name = "blsp1_uart3_apps_clk_src", 552 + .parent_names = gcc_xo_gpll0, 553 + .num_parents = 2, 554 + .ops = &clk_rcg2_ops, 555 + }, 556 + }; 557 + 558 + static struct clk_rcg2 blsp1_uart4_apps_clk_src = { 559 + .cmd_rcgr = 0x080c, 560 + .mnd_width = 16, 561 + .hid_width = 5, 562 + .parent_map = gcc_xo_gpll0_map, 563 + .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk, 564 + .clkr.hw.init = &(struct clk_init_data){ 565 + .name = "blsp1_uart4_apps_clk_src", 566 + .parent_names = gcc_xo_gpll0, 567 + .num_parents = 2, 568 + .ops = &clk_rcg2_ops, 569 + }, 570 + }; 571 + 572 + static struct clk_rcg2 blsp1_uart5_apps_clk_src = { 573 + .cmd_rcgr = 0x088c, 574 + .mnd_width = 16, 575 + .hid_width = 5, 576 + .parent_map = gcc_xo_gpll0_map, 577 + .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk, 578 + .clkr.hw.init = &(struct clk_init_data){ 579 + .name = "blsp1_uart5_apps_clk_src", 580 + .parent_names = gcc_xo_gpll0, 581 + .num_parents = 2, 582 + .ops = &clk_rcg2_ops, 583 + }, 584 + }; 585 + 586 + static struct clk_rcg2 blsp1_uart6_apps_clk_src = { 587 + .cmd_rcgr = 0x090c, 588 + .mnd_width = 16, 589 + .hid_width = 5, 590 + .parent_map = gcc_xo_gpll0_map, 591 + .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk, 592 + .clkr.hw.init = &(struct clk_init_data){ 593 + .name = "blsp1_uart6_apps_clk_src", 594 + .parent_names = gcc_xo_gpll0, 595 + .num_parents = 2, 596 + .ops = &clk_rcg2_ops, 597 + }, 598 + }; 599 + 600 + static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = { 601 + .cmd_rcgr = 0x09a0, 602 + .hid_width = 5, 603 + .parent_map = gcc_xo_gpll0_map, 604 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk, 605 + .clkr.hw.init = &(struct clk_init_data){ 606 + .name = "blsp2_qup1_i2c_apps_clk_src", 607 + .parent_names = gcc_xo_gpll0, 608 + .num_parents = 2, 609 + .ops = &clk_rcg2_ops, 610 + }, 611 + }; 612 + 613 + static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = { 614 + .cmd_rcgr = 0x098c, 615 + .mnd_width = 8, 616 + .hid_width = 5, 617 + .parent_map = gcc_xo_gpll0_map, 618 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk, 619 + .clkr.hw.init = &(struct clk_init_data){ 620 + .name = "blsp2_qup1_spi_apps_clk_src", 621 + .parent_names = gcc_xo_gpll0, 622 + .num_parents = 2, 623 + .ops = &clk_rcg2_ops, 624 + }, 625 + }; 626 + 627 + static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = { 628 + .cmd_rcgr = 0x0a20, 629 + .hid_width = 5, 630 + .parent_map = gcc_xo_gpll0_map, 631 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk, 632 + .clkr.hw.init = &(struct clk_init_data){ 633 + .name = "blsp2_qup2_i2c_apps_clk_src", 634 + .parent_names = gcc_xo_gpll0, 635 + .num_parents = 2, 636 + .ops = &clk_rcg2_ops, 637 + }, 638 + }; 639 + 640 + static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = { 641 + .cmd_rcgr = 0x0a0c, 642 + .mnd_width = 8, 643 + .hid_width = 5, 644 + .parent_map = gcc_xo_gpll0_map, 645 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk, 646 + .clkr.hw.init = &(struct clk_init_data){ 647 + .name = "blsp2_qup2_spi_apps_clk_src", 648 + .parent_names = gcc_xo_gpll0, 649 + .num_parents = 2, 650 + .ops = &clk_rcg2_ops, 651 + }, 652 + }; 653 + 654 + static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = { 655 + .cmd_rcgr = 0x0aa0, 656 + .hid_width = 5, 657 + .parent_map = gcc_xo_gpll0_map, 658 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk, 659 + .clkr.hw.init = &(struct clk_init_data){ 660 + .name = "blsp2_qup3_i2c_apps_clk_src", 661 + .parent_names = gcc_xo_gpll0, 662 + .num_parents = 2, 663 + .ops = &clk_rcg2_ops, 664 + }, 665 + }; 666 + 667 + static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = { 668 + .cmd_rcgr = 0x0a8c, 669 + .mnd_width = 8, 670 + .hid_width = 5, 671 + .parent_map = gcc_xo_gpll0_map, 672 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk, 673 + .clkr.hw.init = &(struct clk_init_data){ 674 + .name = "blsp2_qup3_spi_apps_clk_src", 675 + .parent_names = gcc_xo_gpll0, 676 + .num_parents = 2, 677 + .ops = &clk_rcg2_ops, 678 + }, 679 + }; 680 + 681 + static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = { 682 + .cmd_rcgr = 0x0b20, 683 + .hid_width = 5, 684 + .parent_map = gcc_xo_gpll0_map, 685 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk, 686 + .clkr.hw.init = &(struct clk_init_data){ 687 + .name = "blsp2_qup4_i2c_apps_clk_src", 688 + .parent_names = gcc_xo_gpll0, 689 + .num_parents = 2, 690 + .ops = &clk_rcg2_ops, 691 + }, 692 + }; 693 + 694 + static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = { 695 + .cmd_rcgr = 0x0b0c, 696 + .mnd_width = 8, 697 + .hid_width = 5, 698 + .parent_map = gcc_xo_gpll0_map, 699 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk, 700 + .clkr.hw.init = &(struct clk_init_data){ 701 + .name = "blsp2_qup4_spi_apps_clk_src", 702 + .parent_names = gcc_xo_gpll0, 703 + .num_parents = 2, 704 + .ops = &clk_rcg2_ops, 705 + }, 706 + }; 707 + 708 + static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = { 709 + .cmd_rcgr = 0x0ba0, 710 + .hid_width = 5, 711 + .parent_map = gcc_xo_gpll0_map, 712 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk, 713 + .clkr.hw.init = &(struct clk_init_data){ 714 + .name = "blsp2_qup5_i2c_apps_clk_src", 715 + .parent_names = gcc_xo_gpll0, 716 + .num_parents = 2, 717 + .ops = &clk_rcg2_ops, 718 + }, 719 + }; 720 + 721 + static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = { 722 + .cmd_rcgr = 0x0b8c, 723 + .mnd_width = 8, 724 + .hid_width = 5, 725 + .parent_map = gcc_xo_gpll0_map, 726 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk, 727 + .clkr.hw.init = &(struct clk_init_data){ 728 + .name = "blsp2_qup5_spi_apps_clk_src", 729 + .parent_names = gcc_xo_gpll0, 730 + .num_parents = 2, 731 + .ops = &clk_rcg2_ops, 732 + }, 733 + }; 734 + 735 + static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = { 736 + .cmd_rcgr = 0x0c20, 737 + .hid_width = 5, 738 + .parent_map = gcc_xo_gpll0_map, 739 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk, 740 + .clkr.hw.init = &(struct clk_init_data){ 741 + .name = "blsp2_qup6_i2c_apps_clk_src", 742 + .parent_names = gcc_xo_gpll0, 743 + .num_parents = 2, 744 + .ops = &clk_rcg2_ops, 745 + }, 746 + }; 747 + 748 + static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = { 749 + .cmd_rcgr = 0x0c0c, 750 + .mnd_width = 8, 751 + .hid_width = 5, 752 + .parent_map = gcc_xo_gpll0_map, 753 + .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk, 754 + .clkr.hw.init = &(struct clk_init_data){ 755 + .name = "blsp2_qup6_spi_apps_clk_src", 756 + .parent_names = gcc_xo_gpll0, 757 + .num_parents = 2, 758 + .ops = &clk_rcg2_ops, 759 + }, 760 + }; 761 + 762 + static struct clk_rcg2 blsp2_uart1_apps_clk_src = { 763 + .cmd_rcgr = 0x09cc, 764 + .mnd_width = 16, 765 + .hid_width = 5, 766 + .parent_map = gcc_xo_gpll0_map, 767 + .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk, 768 + .clkr.hw.init = &(struct clk_init_data){ 769 + .name = "blsp2_uart1_apps_clk_src", 770 + .parent_names = gcc_xo_gpll0, 771 + .num_parents = 2, 772 + .ops = &clk_rcg2_ops, 773 + }, 774 + }; 775 + 776 + static struct clk_rcg2 blsp2_uart2_apps_clk_src = { 777 + .cmd_rcgr = 0x0a4c, 778 + .mnd_width = 16, 779 + .hid_width = 5, 780 + .parent_map = gcc_xo_gpll0_map, 781 + .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk, 782 + .clkr.hw.init = &(struct clk_init_data){ 783 + .name = "blsp2_uart2_apps_clk_src", 784 + .parent_names = gcc_xo_gpll0, 785 + .num_parents = 2, 786 + .ops = &clk_rcg2_ops, 787 + }, 788 + }; 789 + 790 + static struct clk_rcg2 blsp2_uart3_apps_clk_src = { 791 + .cmd_rcgr = 0x0acc, 792 + .mnd_width = 16, 793 + .hid_width = 5, 794 + .parent_map = gcc_xo_gpll0_map, 795 + .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk, 796 + .clkr.hw.init = &(struct clk_init_data){ 797 + .name = "blsp2_uart3_apps_clk_src", 798 + .parent_names = gcc_xo_gpll0, 799 + .num_parents = 2, 800 + .ops = &clk_rcg2_ops, 801 + }, 802 + }; 803 + 804 + static struct clk_rcg2 blsp2_uart4_apps_clk_src = { 805 + .cmd_rcgr = 0x0b4c, 806 + .mnd_width = 16, 807 + .hid_width = 5, 808 + .parent_map = gcc_xo_gpll0_map, 809 + .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk, 810 + .clkr.hw.init = &(struct clk_init_data){ 811 + .name = "blsp2_uart4_apps_clk_src", 812 + .parent_names = gcc_xo_gpll0, 813 + .num_parents = 2, 814 + .ops = &clk_rcg2_ops, 815 + }, 816 + }; 817 + 818 + static struct clk_rcg2 blsp2_uart5_apps_clk_src = { 819 + .cmd_rcgr = 0x0bcc, 820 + .mnd_width = 16, 821 + .hid_width = 5, 822 + .parent_map = gcc_xo_gpll0_map, 823 + .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk, 824 + .clkr.hw.init = &(struct clk_init_data){ 825 + .name = "blsp2_uart5_apps_clk_src", 826 + .parent_names = gcc_xo_gpll0, 827 + .num_parents = 2, 828 + .ops = &clk_rcg2_ops, 829 + }, 830 + }; 831 + 832 + static struct clk_rcg2 blsp2_uart6_apps_clk_src = { 833 + .cmd_rcgr = 0x0c4c, 834 + .mnd_width = 16, 835 + .hid_width = 5, 836 + .parent_map = gcc_xo_gpll0_map, 837 + .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk, 838 + .clkr.hw.init = &(struct clk_init_data){ 839 + .name = "blsp2_uart6_apps_clk_src", 840 + .parent_names = gcc_xo_gpll0, 841 + .num_parents = 2, 842 + .ops = &clk_rcg2_ops, 843 + }, 844 + }; 845 + 846 + static const struct freq_tbl ftbl_gcc_ce1_clk[] = { 847 + F(50000000, P_GPLL0, 12, 0, 0), 848 + F(85710000, P_GPLL0, 7, 0, 0), 849 + F(100000000, P_GPLL0, 6, 0, 0), 850 + F(171430000, P_GPLL0, 3.5, 0, 0), 851 + { } 852 + }; 853 + 854 + static struct clk_rcg2 ce1_clk_src = { 855 + .cmd_rcgr = 0x1050, 856 + .hid_width = 5, 857 + .parent_map = gcc_xo_gpll0_map, 858 + .freq_tbl = ftbl_gcc_ce1_clk, 859 + .clkr.hw.init = &(struct clk_init_data){ 860 + .name = "ce1_clk_src", 861 + .parent_names = gcc_xo_gpll0, 862 + .num_parents = 2, 863 + .ops = &clk_rcg2_ops, 864 + }, 865 + }; 866 + 867 + static const struct freq_tbl ftbl_gcc_ce2_clk[] = { 868 + F(50000000, P_GPLL0, 12, 0, 0), 869 + F(85710000, P_GPLL0, 7, 0, 0), 870 + F(100000000, P_GPLL0, 6, 0, 0), 871 + F(171430000, P_GPLL0, 3.5, 0, 0), 872 + { } 873 + }; 874 + 875 + static struct clk_rcg2 ce2_clk_src = { 876 + .cmd_rcgr = 0x1090, 877 + .hid_width = 5, 878 + .parent_map = gcc_xo_gpll0_map, 879 + .freq_tbl = ftbl_gcc_ce2_clk, 880 + .clkr.hw.init = &(struct clk_init_data){ 881 + .name = "ce2_clk_src", 882 + .parent_names = gcc_xo_gpll0, 883 + .num_parents = 2, 884 + .ops = &clk_rcg2_ops, 885 + }, 886 + }; 887 + 888 + static const struct freq_tbl ftbl_gcc_ce3_clk[] = { 889 + F(50000000, P_GPLL0, 12, 0, 0), 890 + F(85710000, P_GPLL0, 7, 0, 0), 891 + F(100000000, P_GPLL0, 6, 0, 0), 892 + F(171430000, P_GPLL0, 3.5, 0, 0), 893 + { } 894 + }; 895 + 896 + static struct clk_rcg2 ce3_clk_src = { 897 + .cmd_rcgr = 0x1d10, 898 + .hid_width = 5, 899 + .parent_map = gcc_xo_gpll0_map, 900 + .freq_tbl = ftbl_gcc_ce3_clk, 901 + .clkr.hw.init = &(struct clk_init_data){ 902 + .name = "ce3_clk_src", 903 + .parent_names = gcc_xo_gpll0, 904 + .num_parents = 2, 905 + .ops = &clk_rcg2_ops, 906 + }, 907 + }; 908 + 909 + static const struct freq_tbl ftbl_gcc_gp_clk[] = { 910 + F(19200000, P_XO, 1, 0, 0), 911 + F(100000000, P_GPLL0, 6, 0, 0), 912 + F(200000000, P_GPLL0, 3, 0, 0), 913 + { } 914 + }; 915 + 916 + static struct clk_rcg2 gp1_clk_src = { 917 + .cmd_rcgr = 0x1904, 918 + .mnd_width = 8, 919 + .hid_width = 5, 920 + .parent_map = gcc_xo_gpll0_map, 921 + .freq_tbl = ftbl_gcc_gp_clk, 922 + .clkr.hw.init = &(struct clk_init_data){ 923 + .name = "gp1_clk_src", 924 + .parent_names = gcc_xo_gpll0, 925 + .num_parents = 2, 926 + .ops = &clk_rcg2_ops, 927 + }, 928 + }; 929 + 930 + static struct clk_rcg2 gp2_clk_src = { 931 + .cmd_rcgr = 0x1944, 932 + .mnd_width = 8, 933 + .hid_width = 5, 934 + .parent_map = gcc_xo_gpll0_map, 935 + .freq_tbl = ftbl_gcc_gp_clk, 936 + .clkr.hw.init = &(struct clk_init_data){ 937 + .name = "gp2_clk_src", 938 + .parent_names = gcc_xo_gpll0, 939 + .num_parents = 2, 940 + .ops = &clk_rcg2_ops, 941 + }, 942 + }; 943 + 944 + static struct clk_rcg2 gp3_clk_src = { 945 + .cmd_rcgr = 0x1984, 946 + .mnd_width = 8, 947 + .hid_width = 5, 948 + .parent_map = gcc_xo_gpll0_map, 949 + .freq_tbl = ftbl_gcc_gp_clk, 950 + .clkr.hw.init = &(struct clk_init_data){ 951 + .name = "gp3_clk_src", 952 + .parent_names = gcc_xo_gpll0, 953 + .num_parents = 2, 954 + .ops = &clk_rcg2_ops, 955 + }, 956 + }; 957 + 958 + static const struct freq_tbl ftbl_gcc_pcie_0_1_aux_clk[] = { 959 + F(1010000, P_XO, 1, 1, 19), 960 + { } 961 + }; 962 + 963 + static struct clk_rcg2 pcie_0_aux_clk_src = { 964 + .cmd_rcgr = 0x1b2c, 965 + .mnd_width = 16, 966 + .hid_width = 5, 967 + .parent_map = gcc_xo_pcie_sleep_map, 968 + .freq_tbl = ftbl_gcc_pcie_0_1_aux_clk, 969 + .clkr.hw.init = &(struct clk_init_data){ 970 + .name = "pcie_0_aux_clk_src", 971 + .parent_names = gcc_xo_pcie_sleep, 972 + .num_parents = 2, 973 + .ops = &clk_rcg2_ops, 974 + }, 975 + }; 976 + 977 + static struct clk_rcg2 pcie_1_aux_clk_src = { 978 + .cmd_rcgr = 0x1bac, 979 + .mnd_width = 16, 980 + .hid_width = 5, 981 + .parent_map = gcc_xo_pcie_sleep_map, 982 + .freq_tbl = ftbl_gcc_pcie_0_1_aux_clk, 983 + .clkr.hw.init = &(struct clk_init_data){ 984 + .name = "pcie_1_aux_clk_src", 985 + .parent_names = gcc_xo_pcie_sleep, 986 + .num_parents = 2, 987 + .ops = &clk_rcg2_ops, 988 + }, 989 + }; 990 + 991 + static const struct freq_tbl ftbl_gcc_pcie_0_1_pipe_clk[] = { 992 + F(125000000, P_PCIE_0_1_PIPE_CLK, 1, 0, 0), 993 + F(250000000, P_PCIE_0_1_PIPE_CLK, 1, 0, 0), 994 + { } 995 + }; 996 + 997 + static struct clk_rcg2 pcie_0_pipe_clk_src = { 998 + .cmd_rcgr = 0x1b18, 999 + .hid_width = 5, 1000 + .parent_map = gcc_xo_pcie_map, 1001 + .freq_tbl = ftbl_gcc_pcie_0_1_pipe_clk, 1002 + .clkr.hw.init = &(struct clk_init_data){ 1003 + .name = "pcie_0_pipe_clk_src", 1004 + .parent_names = gcc_xo_pcie, 1005 + .num_parents = 2, 1006 + .ops = &clk_rcg2_ops, 1007 + }, 1008 + }; 1009 + 1010 + static struct clk_rcg2 pcie_1_pipe_clk_src = { 1011 + .cmd_rcgr = 0x1b98, 1012 + .hid_width = 5, 1013 + .parent_map = gcc_xo_pcie_map, 1014 + .freq_tbl = ftbl_gcc_pcie_0_1_pipe_clk, 1015 + .clkr.hw.init = &(struct clk_init_data){ 1016 + .name = "pcie_1_pipe_clk_src", 1017 + .parent_names = gcc_xo_pcie, 1018 + .num_parents = 2, 1019 + .ops = &clk_rcg2_ops, 1020 + }, 1021 + }; 1022 + 1023 + static const struct freq_tbl ftbl_gcc_pdm2_clk[] = { 1024 + F(60000000, P_GPLL0, 10, 0, 0), 1025 + { } 1026 + }; 1027 + 1028 + static struct clk_rcg2 pdm2_clk_src = { 1029 + .cmd_rcgr = 0x0cd0, 1030 + .hid_width = 5, 1031 + .parent_map = gcc_xo_gpll0_map, 1032 + .freq_tbl = ftbl_gcc_pdm2_clk, 1033 + .clkr.hw.init = &(struct clk_init_data){ 1034 + .name = "pdm2_clk_src", 1035 + .parent_names = gcc_xo_gpll0, 1036 + .num_parents = 2, 1037 + .ops = &clk_rcg2_ops, 1038 + }, 1039 + }; 1040 + 1041 + static const struct freq_tbl ftbl_gcc_sata_asic0_clk[] = { 1042 + F(75000000, P_SATA_ASIC0_CLK, 1, 0, 0), 1043 + F(150000000, P_SATA_ASIC0_CLK, 1, 0, 0), 1044 + F(300000000, P_SATA_ASIC0_CLK, 1, 0, 0), 1045 + { } 1046 + }; 1047 + 1048 + static struct clk_rcg2 sata_asic0_clk_src = { 1049 + .cmd_rcgr = 0x1c94, 1050 + .hid_width = 5, 1051 + .parent_map = gcc_xo_sata_asic0_map, 1052 + .freq_tbl = ftbl_gcc_sata_asic0_clk, 1053 + .clkr.hw.init = &(struct clk_init_data){ 1054 + .name = "sata_asic0_clk_src", 1055 + .parent_names = gcc_xo_sata_asic0, 1056 + .num_parents = 2, 1057 + .ops = &clk_rcg2_ops, 1058 + }, 1059 + }; 1060 + 1061 + static const struct freq_tbl ftbl_gcc_sata_pmalive_clk[] = { 1062 + F(19200000, P_XO, 1, 0, 0), 1063 + F(50000000, P_GPLL0, 12, 0, 0), 1064 + F(100000000, P_GPLL0, 6, 0, 0), 1065 + { } 1066 + }; 1067 + 1068 + static struct clk_rcg2 sata_pmalive_clk_src = { 1069 + .cmd_rcgr = 0x1c80, 1070 + .hid_width = 5, 1071 + .parent_map = gcc_xo_gpll0_map, 1072 + .freq_tbl = ftbl_gcc_sata_pmalive_clk, 1073 + .clkr.hw.init = &(struct clk_init_data){ 1074 + .name = "sata_pmalive_clk_src", 1075 + .parent_names = gcc_xo_gpll0, 1076 + .num_parents = 2, 1077 + .ops = &clk_rcg2_ops, 1078 + }, 1079 + }; 1080 + 1081 + static const struct freq_tbl ftbl_gcc_sata_rx_clk[] = { 1082 + F(75000000, P_SATA_RX_CLK, 1, 0, 0), 1083 + F(150000000, P_SATA_RX_CLK, 1, 0, 0), 1084 + F(300000000, P_SATA_RX_CLK, 1, 0, 0), 1085 + { } 1086 + }; 1087 + 1088 + static struct clk_rcg2 sata_rx_clk_src = { 1089 + .cmd_rcgr = 0x1ca8, 1090 + .hid_width = 5, 1091 + .parent_map = gcc_xo_sata_rx_map, 1092 + .freq_tbl = ftbl_gcc_sata_rx_clk, 1093 + .clkr.hw.init = &(struct clk_init_data){ 1094 + .name = "sata_rx_clk_src", 1095 + .parent_names = gcc_xo_sata_rx, 1096 + .num_parents = 2, 1097 + .ops = &clk_rcg2_ops, 1098 + }, 1099 + }; 1100 + 1101 + static const struct freq_tbl ftbl_gcc_sata_rx_oob_clk[] = { 1102 + F(100000000, P_GPLL0, 6, 0, 0), 1103 + { } 1104 + }; 1105 + 1106 + static struct clk_rcg2 sata_rx_oob_clk_src = { 1107 + .cmd_rcgr = 0x1c5c, 1108 + .hid_width = 5, 1109 + .parent_map = gcc_xo_gpll0_map, 1110 + .freq_tbl = ftbl_gcc_sata_rx_oob_clk, 1111 + .clkr.hw.init = &(struct clk_init_data){ 1112 + .name = "sata_rx_oob_clk_src", 1113 + .parent_names = gcc_xo_gpll0, 1114 + .num_parents = 2, 1115 + .ops = &clk_rcg2_ops, 1116 + }, 1117 + }; 1118 + 1119 + static const struct freq_tbl ftbl_gcc_sdcc1_4_apps_clk[] = { 1120 + F(144000, P_XO, 16, 3, 25), 1121 + F(400000, P_XO, 12, 1, 4), 1122 + F(20000000, P_GPLL0, 15, 1, 2), 1123 + F(25000000, P_GPLL0, 12, 1, 2), 1124 + F(50000000, P_GPLL0, 12, 0, 0), 1125 + F(100000000, P_GPLL0, 6, 0, 0), 1126 + F(192000000, P_GPLL4, 4, 0, 0), 1127 + F(200000000, P_GPLL0, 3, 0, 0), 1128 + F(384000000, P_GPLL4, 2, 0, 0), 1129 + { } 1130 + }; 1131 + 1132 + static struct clk_rcg2 sdcc1_apps_clk_src = { 1133 + .cmd_rcgr = 0x04d0, 1134 + .mnd_width = 8, 1135 + .hid_width = 5, 1136 + .parent_map = gcc_xo_gpll0_gpll4_map, 1137 + .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk, 1138 + .clkr.hw.init = &(struct clk_init_data){ 1139 + .name = "sdcc1_apps_clk_src", 1140 + .parent_names = gcc_xo_gpll0_gpll4, 1141 + .num_parents = 3, 1142 + .ops = &clk_rcg2_ops, 1143 + }, 1144 + }; 1145 + 1146 + static struct clk_rcg2 sdcc2_apps_clk_src = { 1147 + .cmd_rcgr = 0x0510, 1148 + .mnd_width = 8, 1149 + .hid_width = 5, 1150 + .parent_map = gcc_xo_gpll0_map, 1151 + .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk, 1152 + .clkr.hw.init = &(struct clk_init_data){ 1153 + .name = "sdcc2_apps_clk_src", 1154 + .parent_names = gcc_xo_gpll0, 1155 + .num_parents = 2, 1156 + .ops = &clk_rcg2_ops, 1157 + }, 1158 + }; 1159 + 1160 + static struct clk_rcg2 sdcc3_apps_clk_src = { 1161 + .cmd_rcgr = 0x0550, 1162 + .mnd_width = 8, 1163 + .hid_width = 5, 1164 + .parent_map = gcc_xo_gpll0_map, 1165 + .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk, 1166 + .clkr.hw.init = &(struct clk_init_data){ 1167 + .name = "sdcc3_apps_clk_src", 1168 + .parent_names = gcc_xo_gpll0, 1169 + .num_parents = 2, 1170 + .ops = &clk_rcg2_ops, 1171 + }, 1172 + }; 1173 + 1174 + static struct clk_rcg2 sdcc4_apps_clk_src = { 1175 + .cmd_rcgr = 0x0590, 1176 + .mnd_width = 8, 1177 + .hid_width = 5, 1178 + .parent_map = gcc_xo_gpll0_map, 1179 + .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk, 1180 + .clkr.hw.init = &(struct clk_init_data){ 1181 + .name = "sdcc4_apps_clk_src", 1182 + .parent_names = gcc_xo_gpll0, 1183 + .num_parents = 2, 1184 + .ops = &clk_rcg2_ops, 1185 + }, 1186 + }; 1187 + 1188 + static const struct freq_tbl ftbl_gcc_tsif_ref_clk[] = { 1189 + F(105000, P_XO, 2, 1, 91), 1190 + { } 1191 + }; 1192 + 1193 + static struct clk_rcg2 tsif_ref_clk_src = { 1194 + .cmd_rcgr = 0x0d90, 1195 + .mnd_width = 8, 1196 + .hid_width = 5, 1197 + .parent_map = gcc_xo_gpll0_map, 1198 + .freq_tbl = ftbl_gcc_tsif_ref_clk, 1199 + .clkr.hw.init = &(struct clk_init_data){ 1200 + .name = "tsif_ref_clk_src", 1201 + .parent_names = gcc_xo_gpll0, 1202 + .num_parents = 2, 1203 + .ops = &clk_rcg2_ops, 1204 + }, 1205 + }; 1206 + 1207 + static const struct freq_tbl ftbl_gcc_usb30_mock_utmi_clk[] = { 1208 + F(60000000, P_GPLL0, 10, 0, 0), 1209 + { } 1210 + }; 1211 + 1212 + static struct clk_rcg2 usb30_mock_utmi_clk_src = { 1213 + .cmd_rcgr = 0x03e8, 1214 + .hid_width = 5, 1215 + .parent_map = gcc_xo_gpll0_map, 1216 + .freq_tbl = ftbl_gcc_usb30_mock_utmi_clk, 1217 + .clkr.hw.init = &(struct clk_init_data){ 1218 + .name = "usb30_mock_utmi_clk_src", 1219 + .parent_names = gcc_xo_gpll0, 1220 + .num_parents = 2, 1221 + .ops = &clk_rcg2_ops, 1222 + }, 1223 + }; 1224 + 1225 + static const struct freq_tbl ftbl_gcc_usb30_sec_mock_utmi_clk[] = { 1226 + F(125000000, P_GPLL0, 1, 5, 24), 1227 + { } 1228 + }; 1229 + 1230 + static struct clk_rcg2 usb30_sec_mock_utmi_clk_src = { 1231 + .cmd_rcgr = 0x1be8, 1232 + .hid_width = 5, 1233 + .parent_map = gcc_xo_gpll0_map, 1234 + .freq_tbl = ftbl_gcc_usb30_sec_mock_utmi_clk, 1235 + .clkr.hw.init = &(struct clk_init_data){ 1236 + .name = "usb30_sec_mock_utmi_clk_src", 1237 + .parent_names = gcc_xo_gpll0, 1238 + .num_parents = 2, 1239 + .ops = &clk_rcg2_ops, 1240 + }, 1241 + }; 1242 + 1243 + static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = { 1244 + F(75000000, P_GPLL0, 8, 0, 0), 1245 + { } 1246 + }; 1247 + 1248 + static struct clk_rcg2 usb_hs_system_clk_src = { 1249 + .cmd_rcgr = 0x0490, 1250 + .hid_width = 5, 1251 + .parent_map = gcc_xo_gpll0_map, 1252 + .freq_tbl = ftbl_gcc_usb_hs_system_clk, 1253 + .clkr.hw.init = &(struct clk_init_data){ 1254 + .name = "usb_hs_system_clk_src", 1255 + .parent_names = gcc_xo_gpll0, 1256 + .num_parents = 2, 1257 + .ops = &clk_rcg2_ops, 1258 + }, 1259 + }; 1260 + 1261 + static const struct freq_tbl ftbl_gcc_usb_hsic_clk[] = { 1262 + F(480000000, P_GPLL1, 1, 0, 0), 1263 + { } 1264 + }; 1265 + 1266 + static u8 usb_hsic_clk_src_map[] = { 1267 + [P_XO] = 0, 1268 + [P_GPLL1] = 4, 1269 + }; 1270 + 1271 + static struct clk_rcg2 usb_hsic_clk_src = { 1272 + .cmd_rcgr = 0x0440, 1273 + .hid_width = 5, 1274 + .parent_map = usb_hsic_clk_src_map, 1275 + .freq_tbl = ftbl_gcc_usb_hsic_clk, 1276 + .clkr.hw.init = &(struct clk_init_data){ 1277 + .name = "usb_hsic_clk_src", 1278 + .parent_names = (const char *[]){ 1279 + "xo", 1280 + "gpll1_vote", 1281 + }, 1282 + .num_parents = 2, 1283 + .ops = &clk_rcg2_ops, 1284 + }, 1285 + }; 1286 + 1287 + static const struct freq_tbl ftbl_gcc_usb_hsic_ahb_clk_src[] = { 1288 + F(60000000, P_GPLL1, 8, 0, 0), 1289 + { } 1290 + }; 1291 + 1292 + static struct clk_rcg2 usb_hsic_ahb_clk_src = { 1293 + .cmd_rcgr = 0x046c, 1294 + .mnd_width = 8, 1295 + .hid_width = 5, 1296 + .parent_map = usb_hsic_clk_src_map, 1297 + .freq_tbl = ftbl_gcc_usb_hsic_ahb_clk_src, 1298 + .clkr.hw.init = &(struct clk_init_data){ 1299 + .name = "usb_hsic_ahb_clk_src", 1300 + .parent_names = (const char *[]){ 1301 + "xo", 1302 + "gpll1_vote", 1303 + }, 1304 + .num_parents = 2, 1305 + .ops = &clk_rcg2_ops, 1306 + }, 1307 + }; 1308 + 1309 + static const struct freq_tbl ftbl_gcc_usb_hsic_io_cal_clk[] = { 1310 + F(9600000, P_XO, 2, 0, 0), 1311 + { } 1312 + }; 1313 + 1314 + static struct clk_rcg2 usb_hsic_io_cal_clk_src = { 1315 + .cmd_rcgr = 0x0458, 1316 + .hid_width = 5, 1317 + .parent_map = gcc_xo_gpll0_map, 1318 + .freq_tbl = ftbl_gcc_usb_hsic_io_cal_clk, 1319 + .clkr.hw.init = &(struct clk_init_data){ 1320 + .name = "usb_hsic_io_cal_clk_src", 1321 + .parent_names = gcc_xo_gpll0, 1322 + .num_parents = 1, 1323 + .ops = &clk_rcg2_ops, 1324 + }, 1325 + }; 1326 + 1327 + static struct clk_branch gcc_usb_hsic_mock_utmi_clk = { 1328 + .halt_reg = 0x1f14, 1329 + .clkr = { 1330 + .enable_reg = 0x1f14, 1331 + .enable_mask = BIT(0), 1332 + .hw.init = &(struct clk_init_data){ 1333 + .name = "gcc_usb_hsic_mock_utmi_clk", 1334 + .parent_names = (const char *[]){ 1335 + "usb_hsic_mock_utmi_clk_src", 1336 + }, 1337 + .num_parents = 1, 1338 + .flags = CLK_SET_RATE_PARENT, 1339 + .ops = &clk_branch2_ops, 1340 + }, 1341 + }, 1342 + }; 1343 + 1344 + static const struct freq_tbl ftbl_gcc_usb_hsic_mock_utmi_clk[] = { 1345 + F(60000000, P_GPLL0, 10, 0, 0), 1346 + { } 1347 + }; 1348 + 1349 + static struct clk_rcg2 usb_hsic_mock_utmi_clk_src = { 1350 + .cmd_rcgr = 0x1f00, 1351 + .hid_width = 5, 1352 + .parent_map = gcc_xo_gpll0_map, 1353 + .freq_tbl = ftbl_gcc_usb_hsic_mock_utmi_clk, 1354 + .clkr.hw.init = &(struct clk_init_data){ 1355 + .name = "usb_hsic_mock_utmi_clk_src", 1356 + .parent_names = gcc_xo_gpll0, 1357 + .num_parents = 1, 1358 + .ops = &clk_rcg2_ops, 1359 + }, 1360 + }; 1361 + 1362 + static const struct freq_tbl ftbl_gcc_usb_hsic_system_clk[] = { 1363 + F(75000000, P_GPLL0, 8, 0, 0), 1364 + { } 1365 + }; 1366 + 1367 + static struct clk_rcg2 usb_hsic_system_clk_src = { 1368 + .cmd_rcgr = 0x041c, 1369 + .hid_width = 5, 1370 + .parent_map = gcc_xo_gpll0_map, 1371 + .freq_tbl = ftbl_gcc_usb_hsic_system_clk, 1372 + .clkr.hw.init = &(struct clk_init_data){ 1373 + .name = "usb_hsic_system_clk_src", 1374 + .parent_names = gcc_xo_gpll0, 1375 + .num_parents = 2, 1376 + .ops = &clk_rcg2_ops, 1377 + }, 1378 + }; 1379 + 1380 + static struct clk_branch gcc_bam_dma_ahb_clk = { 1381 + .halt_reg = 0x0d44, 1382 + .halt_check = BRANCH_HALT_VOTED, 1383 + .clkr = { 1384 + .enable_reg = 0x1484, 1385 + .enable_mask = BIT(12), 1386 + .hw.init = &(struct clk_init_data){ 1387 + .name = "gcc_bam_dma_ahb_clk", 1388 + .parent_names = (const char *[]){ 1389 + "periph_noc_clk_src", 1390 + }, 1391 + .num_parents = 1, 1392 + .ops = &clk_branch2_ops, 1393 + }, 1394 + }, 1395 + }; 1396 + 1397 + static struct clk_branch gcc_blsp1_ahb_clk = { 1398 + .halt_reg = 0x05c4, 1399 + .halt_check = BRANCH_HALT_VOTED, 1400 + .clkr = { 1401 + .enable_reg = 0x1484, 1402 + .enable_mask = BIT(17), 1403 + .hw.init = &(struct clk_init_data){ 1404 + .name = "gcc_blsp1_ahb_clk", 1405 + .parent_names = (const char *[]){ 1406 + "periph_noc_clk_src", 1407 + }, 1408 + .num_parents = 1, 1409 + .ops = &clk_branch2_ops, 1410 + }, 1411 + }, 1412 + }; 1413 + 1414 + static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = { 1415 + .halt_reg = 0x0648, 1416 + .clkr = { 1417 + .enable_reg = 0x0648, 1418 + .enable_mask = BIT(0), 1419 + .hw.init = &(struct clk_init_data){ 1420 + .name = "gcc_blsp1_qup1_i2c_apps_clk", 1421 + .parent_names = (const char *[]){ 1422 + "blsp1_qup1_i2c_apps_clk_src", 1423 + }, 1424 + .num_parents = 1, 1425 + .flags = CLK_SET_RATE_PARENT, 1426 + .ops = &clk_branch2_ops, 1427 + }, 1428 + }, 1429 + }; 1430 + 1431 + static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = { 1432 + .halt_reg = 0x0644, 1433 + .clkr = { 1434 + .enable_reg = 0x0644, 1435 + .enable_mask = BIT(0), 1436 + .hw.init = &(struct clk_init_data){ 1437 + .name = "gcc_blsp1_qup1_spi_apps_clk", 1438 + .parent_names = (const char *[]){ 1439 + "blsp1_qup1_spi_apps_clk_src", 1440 + }, 1441 + .num_parents = 1, 1442 + .flags = CLK_SET_RATE_PARENT, 1443 + .ops = &clk_branch2_ops, 1444 + }, 1445 + }, 1446 + }; 1447 + 1448 + static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = { 1449 + .halt_reg = 0x06c8, 1450 + .clkr = { 1451 + .enable_reg = 0x06c8, 1452 + .enable_mask = BIT(0), 1453 + .hw.init = &(struct clk_init_data){ 1454 + .name = "gcc_blsp1_qup2_i2c_apps_clk", 1455 + .parent_names = (const char *[]){ 1456 + "blsp1_qup2_i2c_apps_clk_src", 1457 + }, 1458 + .num_parents = 1, 1459 + .flags = CLK_SET_RATE_PARENT, 1460 + .ops = &clk_branch2_ops, 1461 + }, 1462 + }, 1463 + }; 1464 + 1465 + static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = { 1466 + .halt_reg = 0x06c4, 1467 + .clkr = { 1468 + .enable_reg = 0x06c4, 1469 + .enable_mask = BIT(0), 1470 + .hw.init = &(struct clk_init_data){ 1471 + .name = "gcc_blsp1_qup2_spi_apps_clk", 1472 + .parent_names = (const char *[]){ 1473 + "blsp1_qup2_spi_apps_clk_src", 1474 + }, 1475 + .num_parents = 1, 1476 + .flags = CLK_SET_RATE_PARENT, 1477 + .ops = &clk_branch2_ops, 1478 + }, 1479 + }, 1480 + }; 1481 + 1482 + static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = { 1483 + .halt_reg = 0x0748, 1484 + .clkr = { 1485 + .enable_reg = 0x0748, 1486 + .enable_mask = BIT(0), 1487 + .hw.init = &(struct clk_init_data){ 1488 + .name = "gcc_blsp1_qup3_i2c_apps_clk", 1489 + .parent_names = (const char *[]){ 1490 + "blsp1_qup3_i2c_apps_clk_src", 1491 + }, 1492 + .num_parents = 1, 1493 + .flags = CLK_SET_RATE_PARENT, 1494 + .ops = &clk_branch2_ops, 1495 + }, 1496 + }, 1497 + }; 1498 + 1499 + static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = { 1500 + .halt_reg = 0x0744, 1501 + .clkr = { 1502 + .enable_reg = 0x0744, 1503 + .enable_mask = BIT(0), 1504 + .hw.init = &(struct clk_init_data){ 1505 + .name = "gcc_blsp1_qup3_spi_apps_clk", 1506 + .parent_names = (const char *[]){ 1507 + "blsp1_qup3_spi_apps_clk_src", 1508 + }, 1509 + .num_parents = 1, 1510 + .flags = CLK_SET_RATE_PARENT, 1511 + .ops = &clk_branch2_ops, 1512 + }, 1513 + }, 1514 + }; 1515 + 1516 + static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = { 1517 + .halt_reg = 0x07c8, 1518 + .clkr = { 1519 + .enable_reg = 0x07c8, 1520 + .enable_mask = BIT(0), 1521 + .hw.init = &(struct clk_init_data){ 1522 + .name = "gcc_blsp1_qup4_i2c_apps_clk", 1523 + .parent_names = (const char *[]){ 1524 + "blsp1_qup4_i2c_apps_clk_src", 1525 + }, 1526 + .num_parents = 1, 1527 + .flags = CLK_SET_RATE_PARENT, 1528 + .ops = &clk_branch2_ops, 1529 + }, 1530 + }, 1531 + }; 1532 + 1533 + static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = { 1534 + .halt_reg = 0x07c4, 1535 + .clkr = { 1536 + .enable_reg = 0x07c4, 1537 + .enable_mask = BIT(0), 1538 + .hw.init = &(struct clk_init_data){ 1539 + .name = "gcc_blsp1_qup4_spi_apps_clk", 1540 + .parent_names = (const char *[]){ 1541 + "blsp1_qup4_spi_apps_clk_src", 1542 + }, 1543 + .num_parents = 1, 1544 + .flags = CLK_SET_RATE_PARENT, 1545 + .ops = &clk_branch2_ops, 1546 + }, 1547 + }, 1548 + }; 1549 + 1550 + static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = { 1551 + .halt_reg = 0x0848, 1552 + .clkr = { 1553 + .enable_reg = 0x0848, 1554 + .enable_mask = BIT(0), 1555 + .hw.init = &(struct clk_init_data){ 1556 + .name = "gcc_blsp1_qup5_i2c_apps_clk", 1557 + .parent_names = (const char *[]){ 1558 + "blsp1_qup5_i2c_apps_clk_src", 1559 + }, 1560 + .num_parents = 1, 1561 + .flags = CLK_SET_RATE_PARENT, 1562 + .ops = &clk_branch2_ops, 1563 + }, 1564 + }, 1565 + }; 1566 + 1567 + static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = { 1568 + .halt_reg = 0x0844, 1569 + .clkr = { 1570 + .enable_reg = 0x0844, 1571 + .enable_mask = BIT(0), 1572 + .hw.init = &(struct clk_init_data){ 1573 + .name = "gcc_blsp1_qup5_spi_apps_clk", 1574 + .parent_names = (const char *[]){ 1575 + "blsp1_qup5_spi_apps_clk_src", 1576 + }, 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_blsp1_qup6_i2c_apps_clk = { 1585 + .halt_reg = 0x08c8, 1586 + .clkr = { 1587 + .enable_reg = 0x08c8, 1588 + .enable_mask = BIT(0), 1589 + .hw.init = &(struct clk_init_data){ 1590 + .name = "gcc_blsp1_qup6_i2c_apps_clk", 1591 + .parent_names = (const char *[]){ 1592 + "blsp1_qup6_i2c_apps_clk_src", 1593 + }, 1594 + .num_parents = 1, 1595 + .flags = CLK_SET_RATE_PARENT, 1596 + .ops = &clk_branch2_ops, 1597 + }, 1598 + }, 1599 + }; 1600 + 1601 + static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = { 1602 + .halt_reg = 0x08c4, 1603 + .clkr = { 1604 + .enable_reg = 0x08c4, 1605 + .enable_mask = BIT(0), 1606 + .hw.init = &(struct clk_init_data){ 1607 + .name = "gcc_blsp1_qup6_spi_apps_clk", 1608 + .parent_names = (const char *[]){ 1609 + "blsp1_qup6_spi_apps_clk_src", 1610 + }, 1611 + .num_parents = 1, 1612 + .flags = CLK_SET_RATE_PARENT, 1613 + .ops = &clk_branch2_ops, 1614 + }, 1615 + }, 1616 + }; 1617 + 1618 + static struct clk_branch gcc_blsp1_uart1_apps_clk = { 1619 + .halt_reg = 0x0684, 1620 + .clkr = { 1621 + .enable_reg = 0x0684, 1622 + .enable_mask = BIT(0), 1623 + .hw.init = &(struct clk_init_data){ 1624 + .name = "gcc_blsp1_uart1_apps_clk", 1625 + .parent_names = (const char *[]){ 1626 + "blsp1_uart1_apps_clk_src", 1627 + }, 1628 + .num_parents = 1, 1629 + .flags = CLK_SET_RATE_PARENT, 1630 + .ops = &clk_branch2_ops, 1631 + }, 1632 + }, 1633 + }; 1634 + 1635 + static struct clk_branch gcc_blsp1_uart2_apps_clk = { 1636 + .halt_reg = 0x0704, 1637 + .clkr = { 1638 + .enable_reg = 0x0704, 1639 + .enable_mask = BIT(0), 1640 + .hw.init = &(struct clk_init_data){ 1641 + .name = "gcc_blsp1_uart2_apps_clk", 1642 + .parent_names = (const char *[]){ 1643 + "blsp1_uart2_apps_clk_src", 1644 + }, 1645 + .num_parents = 1, 1646 + .flags = CLK_SET_RATE_PARENT, 1647 + .ops = &clk_branch2_ops, 1648 + }, 1649 + }, 1650 + }; 1651 + 1652 + static struct clk_branch gcc_blsp1_uart3_apps_clk = { 1653 + .halt_reg = 0x0784, 1654 + .clkr = { 1655 + .enable_reg = 0x0784, 1656 + .enable_mask = BIT(0), 1657 + .hw.init = &(struct clk_init_data){ 1658 + .name = "gcc_blsp1_uart3_apps_clk", 1659 + .parent_names = (const char *[]){ 1660 + "blsp1_uart3_apps_clk_src", 1661 + }, 1662 + .num_parents = 1, 1663 + .flags = CLK_SET_RATE_PARENT, 1664 + .ops = &clk_branch2_ops, 1665 + }, 1666 + }, 1667 + }; 1668 + 1669 + static struct clk_branch gcc_blsp1_uart4_apps_clk = { 1670 + .halt_reg = 0x0804, 1671 + .clkr = { 1672 + .enable_reg = 0x0804, 1673 + .enable_mask = BIT(0), 1674 + .hw.init = &(struct clk_init_data){ 1675 + .name = "gcc_blsp1_uart4_apps_clk", 1676 + .parent_names = (const char *[]){ 1677 + "blsp1_uart4_apps_clk_src", 1678 + }, 1679 + .num_parents = 1, 1680 + .flags = CLK_SET_RATE_PARENT, 1681 + .ops = &clk_branch2_ops, 1682 + }, 1683 + }, 1684 + }; 1685 + 1686 + static struct clk_branch gcc_blsp1_uart5_apps_clk = { 1687 + .halt_reg = 0x0884, 1688 + .clkr = { 1689 + .enable_reg = 0x0884, 1690 + .enable_mask = BIT(0), 1691 + .hw.init = &(struct clk_init_data){ 1692 + .name = "gcc_blsp1_uart5_apps_clk", 1693 + .parent_names = (const char *[]){ 1694 + "blsp1_uart5_apps_clk_src", 1695 + }, 1696 + .num_parents = 1, 1697 + .flags = CLK_SET_RATE_PARENT, 1698 + .ops = &clk_branch2_ops, 1699 + }, 1700 + }, 1701 + }; 1702 + 1703 + static struct clk_branch gcc_blsp1_uart6_apps_clk = { 1704 + .halt_reg = 0x0904, 1705 + .clkr = { 1706 + .enable_reg = 0x0904, 1707 + .enable_mask = BIT(0), 1708 + .hw.init = &(struct clk_init_data){ 1709 + .name = "gcc_blsp1_uart6_apps_clk", 1710 + .parent_names = (const char *[]){ 1711 + "blsp1_uart6_apps_clk_src", 1712 + }, 1713 + .num_parents = 1, 1714 + .flags = CLK_SET_RATE_PARENT, 1715 + .ops = &clk_branch2_ops, 1716 + }, 1717 + }, 1718 + }; 1719 + 1720 + static struct clk_branch gcc_blsp2_ahb_clk = { 1721 + .halt_reg = 0x0944, 1722 + .halt_check = BRANCH_HALT_VOTED, 1723 + .clkr = { 1724 + .enable_reg = 0x1484, 1725 + .enable_mask = BIT(15), 1726 + .hw.init = &(struct clk_init_data){ 1727 + .name = "gcc_blsp2_ahb_clk", 1728 + .parent_names = (const char *[]){ 1729 + "periph_noc_clk_src", 1730 + }, 1731 + .num_parents = 1, 1732 + .ops = &clk_branch2_ops, 1733 + }, 1734 + }, 1735 + }; 1736 + 1737 + static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = { 1738 + .halt_reg = 0x0988, 1739 + .clkr = { 1740 + .enable_reg = 0x0988, 1741 + .enable_mask = BIT(0), 1742 + .hw.init = &(struct clk_init_data){ 1743 + .name = "gcc_blsp2_qup1_i2c_apps_clk", 1744 + .parent_names = (const char *[]){ 1745 + "blsp2_qup1_i2c_apps_clk_src", 1746 + }, 1747 + .num_parents = 1, 1748 + .flags = CLK_SET_RATE_PARENT, 1749 + .ops = &clk_branch2_ops, 1750 + }, 1751 + }, 1752 + }; 1753 + 1754 + static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = { 1755 + .halt_reg = 0x0984, 1756 + .clkr = { 1757 + .enable_reg = 0x0984, 1758 + .enable_mask = BIT(0), 1759 + .hw.init = &(struct clk_init_data){ 1760 + .name = "gcc_blsp2_qup1_spi_apps_clk", 1761 + .parent_names = (const char *[]){ 1762 + "blsp2_qup1_spi_apps_clk_src", 1763 + }, 1764 + .num_parents = 1, 1765 + .flags = CLK_SET_RATE_PARENT, 1766 + .ops = &clk_branch2_ops, 1767 + }, 1768 + }, 1769 + }; 1770 + 1771 + static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = { 1772 + .halt_reg = 0x0a08, 1773 + .clkr = { 1774 + .enable_reg = 0x0a08, 1775 + .enable_mask = BIT(0), 1776 + .hw.init = &(struct clk_init_data){ 1777 + .name = "gcc_blsp2_qup2_i2c_apps_clk", 1778 + .parent_names = (const char *[]){ 1779 + "blsp2_qup2_i2c_apps_clk_src", 1780 + }, 1781 + .num_parents = 1, 1782 + .flags = CLK_SET_RATE_PARENT, 1783 + .ops = &clk_branch2_ops, 1784 + }, 1785 + }, 1786 + }; 1787 + 1788 + static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = { 1789 + .halt_reg = 0x0a04, 1790 + .clkr = { 1791 + .enable_reg = 0x0a04, 1792 + .enable_mask = BIT(0), 1793 + .hw.init = &(struct clk_init_data){ 1794 + .name = "gcc_blsp2_qup2_spi_apps_clk", 1795 + .parent_names = (const char *[]){ 1796 + "blsp2_qup2_spi_apps_clk_src", 1797 + }, 1798 + .num_parents = 1, 1799 + .flags = CLK_SET_RATE_PARENT, 1800 + .ops = &clk_branch2_ops, 1801 + }, 1802 + }, 1803 + }; 1804 + 1805 + static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = { 1806 + .halt_reg = 0x0a88, 1807 + .clkr = { 1808 + .enable_reg = 0x0a88, 1809 + .enable_mask = BIT(0), 1810 + .hw.init = &(struct clk_init_data){ 1811 + .name = "gcc_blsp2_qup3_i2c_apps_clk", 1812 + .parent_names = (const char *[]){ 1813 + "blsp2_qup3_i2c_apps_clk_src", 1814 + }, 1815 + .num_parents = 1, 1816 + .flags = CLK_SET_RATE_PARENT, 1817 + .ops = &clk_branch2_ops, 1818 + }, 1819 + }, 1820 + }; 1821 + 1822 + static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = { 1823 + .halt_reg = 0x0a84, 1824 + .clkr = { 1825 + .enable_reg = 0x0a84, 1826 + .enable_mask = BIT(0), 1827 + .hw.init = &(struct clk_init_data){ 1828 + .name = "gcc_blsp2_qup3_spi_apps_clk", 1829 + .parent_names = (const char *[]){ 1830 + "blsp2_qup3_spi_apps_clk_src", 1831 + }, 1832 + .num_parents = 1, 1833 + .flags = CLK_SET_RATE_PARENT, 1834 + .ops = &clk_branch2_ops, 1835 + }, 1836 + }, 1837 + }; 1838 + 1839 + static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = { 1840 + .halt_reg = 0x0b08, 1841 + .clkr = { 1842 + .enable_reg = 0x0b08, 1843 + .enable_mask = BIT(0), 1844 + .hw.init = &(struct clk_init_data){ 1845 + .name = "gcc_blsp2_qup4_i2c_apps_clk", 1846 + .parent_names = (const char *[]){ 1847 + "blsp2_qup4_i2c_apps_clk_src", 1848 + }, 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_blsp2_qup4_spi_apps_clk = { 1857 + .halt_reg = 0x0b04, 1858 + .clkr = { 1859 + .enable_reg = 0x0b04, 1860 + .enable_mask = BIT(0), 1861 + .hw.init = &(struct clk_init_data){ 1862 + .name = "gcc_blsp2_qup4_spi_apps_clk", 1863 + .parent_names = (const char *[]){ 1864 + "blsp2_qup4_spi_apps_clk_src", 1865 + }, 1866 + .num_parents = 1, 1867 + .flags = CLK_SET_RATE_PARENT, 1868 + .ops = &clk_branch2_ops, 1869 + }, 1870 + }, 1871 + }; 1872 + 1873 + static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = { 1874 + .halt_reg = 0x0b88, 1875 + .clkr = { 1876 + .enable_reg = 0x0b88, 1877 + .enable_mask = BIT(0), 1878 + .hw.init = &(struct clk_init_data){ 1879 + .name = "gcc_blsp2_qup5_i2c_apps_clk", 1880 + .parent_names = (const char *[]){ 1881 + "blsp2_qup5_i2c_apps_clk_src", 1882 + }, 1883 + .num_parents = 1, 1884 + .flags = CLK_SET_RATE_PARENT, 1885 + .ops = &clk_branch2_ops, 1886 + }, 1887 + }, 1888 + }; 1889 + 1890 + static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = { 1891 + .halt_reg = 0x0b84, 1892 + .clkr = { 1893 + .enable_reg = 0x0b84, 1894 + .enable_mask = BIT(0), 1895 + .hw.init = &(struct clk_init_data){ 1896 + .name = "gcc_blsp2_qup5_spi_apps_clk", 1897 + .parent_names = (const char *[]){ 1898 + "blsp2_qup5_spi_apps_clk_src", 1899 + }, 1900 + .num_parents = 1, 1901 + .flags = CLK_SET_RATE_PARENT, 1902 + .ops = &clk_branch2_ops, 1903 + }, 1904 + }, 1905 + }; 1906 + 1907 + static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = { 1908 + .halt_reg = 0x0c08, 1909 + .clkr = { 1910 + .enable_reg = 0x0c08, 1911 + .enable_mask = BIT(0), 1912 + .hw.init = &(struct clk_init_data){ 1913 + .name = "gcc_blsp2_qup6_i2c_apps_clk", 1914 + .parent_names = (const char *[]){ 1915 + "blsp2_qup6_i2c_apps_clk_src", 1916 + }, 1917 + .num_parents = 1, 1918 + .flags = CLK_SET_RATE_PARENT, 1919 + .ops = &clk_branch2_ops, 1920 + }, 1921 + }, 1922 + }; 1923 + 1924 + static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = { 1925 + .halt_reg = 0x0c04, 1926 + .clkr = { 1927 + .enable_reg = 0x0c04, 1928 + .enable_mask = BIT(0), 1929 + .hw.init = &(struct clk_init_data){ 1930 + .name = "gcc_blsp2_qup6_spi_apps_clk", 1931 + .parent_names = (const char *[]){ 1932 + "blsp2_qup6_spi_apps_clk_src", 1933 + }, 1934 + .num_parents = 1, 1935 + .flags = CLK_SET_RATE_PARENT, 1936 + .ops = &clk_branch2_ops, 1937 + }, 1938 + }, 1939 + }; 1940 + 1941 + static struct clk_branch gcc_blsp2_uart1_apps_clk = { 1942 + .halt_reg = 0x09c4, 1943 + .clkr = { 1944 + .enable_reg = 0x09c4, 1945 + .enable_mask = BIT(0), 1946 + .hw.init = &(struct clk_init_data){ 1947 + .name = "gcc_blsp2_uart1_apps_clk", 1948 + .parent_names = (const char *[]){ 1949 + "blsp2_uart1_apps_clk_src", 1950 + }, 1951 + .num_parents = 1, 1952 + .flags = CLK_SET_RATE_PARENT, 1953 + .ops = &clk_branch2_ops, 1954 + }, 1955 + }, 1956 + }; 1957 + 1958 + static struct clk_branch gcc_blsp2_uart2_apps_clk = { 1959 + .halt_reg = 0x0a44, 1960 + .clkr = { 1961 + .enable_reg = 0x0a44, 1962 + .enable_mask = BIT(0), 1963 + .hw.init = &(struct clk_init_data){ 1964 + .name = "gcc_blsp2_uart2_apps_clk", 1965 + .parent_names = (const char *[]){ 1966 + "blsp2_uart2_apps_clk_src", 1967 + }, 1968 + .num_parents = 1, 1969 + .flags = CLK_SET_RATE_PARENT, 1970 + .ops = &clk_branch2_ops, 1971 + }, 1972 + }, 1973 + }; 1974 + 1975 + static struct clk_branch gcc_blsp2_uart3_apps_clk = { 1976 + .halt_reg = 0x0ac4, 1977 + .clkr = { 1978 + .enable_reg = 0x0ac4, 1979 + .enable_mask = BIT(0), 1980 + .hw.init = &(struct clk_init_data){ 1981 + .name = "gcc_blsp2_uart3_apps_clk", 1982 + .parent_names = (const char *[]){ 1983 + "blsp2_uart3_apps_clk_src", 1984 + }, 1985 + .num_parents = 1, 1986 + .flags = CLK_SET_RATE_PARENT, 1987 + .ops = &clk_branch2_ops, 1988 + }, 1989 + }, 1990 + }; 1991 + 1992 + static struct clk_branch gcc_blsp2_uart4_apps_clk = { 1993 + .halt_reg = 0x0b44, 1994 + .clkr = { 1995 + .enable_reg = 0x0b44, 1996 + .enable_mask = BIT(0), 1997 + .hw.init = &(struct clk_init_data){ 1998 + .name = "gcc_blsp2_uart4_apps_clk", 1999 + .parent_names = (const char *[]){ 2000 + "blsp2_uart4_apps_clk_src", 2001 + }, 2002 + .num_parents = 1, 2003 + .flags = CLK_SET_RATE_PARENT, 2004 + .ops = &clk_branch2_ops, 2005 + }, 2006 + }, 2007 + }; 2008 + 2009 + static struct clk_branch gcc_blsp2_uart5_apps_clk = { 2010 + .halt_reg = 0x0bc4, 2011 + .clkr = { 2012 + .enable_reg = 0x0bc4, 2013 + .enable_mask = BIT(0), 2014 + .hw.init = &(struct clk_init_data){ 2015 + .name = "gcc_blsp2_uart5_apps_clk", 2016 + .parent_names = (const char *[]){ 2017 + "blsp2_uart5_apps_clk_src", 2018 + }, 2019 + .num_parents = 1, 2020 + .flags = CLK_SET_RATE_PARENT, 2021 + .ops = &clk_branch2_ops, 2022 + }, 2023 + }, 2024 + }; 2025 + 2026 + static struct clk_branch gcc_blsp2_uart6_apps_clk = { 2027 + .halt_reg = 0x0c44, 2028 + .clkr = { 2029 + .enable_reg = 0x0c44, 2030 + .enable_mask = BIT(0), 2031 + .hw.init = &(struct clk_init_data){ 2032 + .name = "gcc_blsp2_uart6_apps_clk", 2033 + .parent_names = (const char *[]){ 2034 + "blsp2_uart6_apps_clk_src", 2035 + }, 2036 + .num_parents = 1, 2037 + .flags = CLK_SET_RATE_PARENT, 2038 + .ops = &clk_branch2_ops, 2039 + }, 2040 + }, 2041 + }; 2042 + 2043 + static struct clk_branch gcc_boot_rom_ahb_clk = { 2044 + .halt_reg = 0x0e04, 2045 + .halt_check = BRANCH_HALT_VOTED, 2046 + .clkr = { 2047 + .enable_reg = 0x1484, 2048 + .enable_mask = BIT(10), 2049 + .hw.init = &(struct clk_init_data){ 2050 + .name = "gcc_boot_rom_ahb_clk", 2051 + .parent_names = (const char *[]){ 2052 + "config_noc_clk_src", 2053 + }, 2054 + .num_parents = 1, 2055 + .ops = &clk_branch2_ops, 2056 + }, 2057 + }, 2058 + }; 2059 + 2060 + static struct clk_branch gcc_ce1_ahb_clk = { 2061 + .halt_reg = 0x104c, 2062 + .halt_check = BRANCH_HALT_VOTED, 2063 + .clkr = { 2064 + .enable_reg = 0x1484, 2065 + .enable_mask = BIT(3), 2066 + .hw.init = &(struct clk_init_data){ 2067 + .name = "gcc_ce1_ahb_clk", 2068 + .parent_names = (const char *[]){ 2069 + "config_noc_clk_src", 2070 + }, 2071 + .num_parents = 1, 2072 + .ops = &clk_branch2_ops, 2073 + }, 2074 + }, 2075 + }; 2076 + 2077 + static struct clk_branch gcc_ce1_axi_clk = { 2078 + .halt_reg = 0x1048, 2079 + .halt_check = BRANCH_HALT_VOTED, 2080 + .clkr = { 2081 + .enable_reg = 0x1484, 2082 + .enable_mask = BIT(4), 2083 + .hw.init = &(struct clk_init_data){ 2084 + .name = "gcc_ce1_axi_clk", 2085 + .parent_names = (const char *[]){ 2086 + "system_noc_clk_src", 2087 + }, 2088 + .num_parents = 1, 2089 + .ops = &clk_branch2_ops, 2090 + }, 2091 + }, 2092 + }; 2093 + 2094 + static struct clk_branch gcc_ce1_clk = { 2095 + .halt_reg = 0x1050, 2096 + .halt_check = BRANCH_HALT_VOTED, 2097 + .clkr = { 2098 + .enable_reg = 0x1484, 2099 + .enable_mask = BIT(5), 2100 + .hw.init = &(struct clk_init_data){ 2101 + .name = "gcc_ce1_clk", 2102 + .parent_names = (const char *[]){ 2103 + "ce1_clk_src", 2104 + }, 2105 + .num_parents = 1, 2106 + .ops = &clk_branch2_ops, 2107 + }, 2108 + }, 2109 + }; 2110 + 2111 + static struct clk_branch gcc_ce2_ahb_clk = { 2112 + .halt_reg = 0x108c, 2113 + .halt_check = BRANCH_HALT_VOTED, 2114 + .clkr = { 2115 + .enable_reg = 0x1484, 2116 + .enable_mask = BIT(0), 2117 + .hw.init = &(struct clk_init_data){ 2118 + .name = "gcc_ce2_ahb_clk", 2119 + .parent_names = (const char *[]){ 2120 + "config_noc_clk_src", 2121 + }, 2122 + .num_parents = 1, 2123 + .ops = &clk_branch2_ops, 2124 + }, 2125 + }, 2126 + }; 2127 + 2128 + static struct clk_branch gcc_ce2_axi_clk = { 2129 + .halt_reg = 0x1088, 2130 + .halt_check = BRANCH_HALT_VOTED, 2131 + .clkr = { 2132 + .enable_reg = 0x1484, 2133 + .enable_mask = BIT(1), 2134 + .hw.init = &(struct clk_init_data){ 2135 + .name = "gcc_ce2_axi_clk", 2136 + .parent_names = (const char *[]){ 2137 + "system_noc_clk_src", 2138 + }, 2139 + .num_parents = 1, 2140 + .ops = &clk_branch2_ops, 2141 + }, 2142 + }, 2143 + }; 2144 + 2145 + static struct clk_branch gcc_ce2_clk = { 2146 + .halt_reg = 0x1090, 2147 + .halt_check = BRANCH_HALT_VOTED, 2148 + .clkr = { 2149 + .enable_reg = 0x1484, 2150 + .enable_mask = BIT(2), 2151 + .hw.init = &(struct clk_init_data){ 2152 + .name = "gcc_ce2_clk", 2153 + .parent_names = (const char *[]){ 2154 + "ce2_clk_src", 2155 + }, 2156 + .num_parents = 1, 2157 + .flags = CLK_SET_RATE_PARENT, 2158 + .ops = &clk_branch2_ops, 2159 + }, 2160 + }, 2161 + }; 2162 + 2163 + static struct clk_branch gcc_ce3_ahb_clk = { 2164 + .halt_reg = 0x1d0c, 2165 + .halt_check = BRANCH_HALT_VOTED, 2166 + .clkr = { 2167 + .enable_reg = 0x1d0c, 2168 + .enable_mask = BIT(0), 2169 + .hw.init = &(struct clk_init_data){ 2170 + .name = "gcc_ce3_ahb_clk", 2171 + .parent_names = (const char *[]){ 2172 + "config_noc_clk_src", 2173 + }, 2174 + .num_parents = 1, 2175 + .ops = &clk_branch2_ops, 2176 + }, 2177 + }, 2178 + }; 2179 + 2180 + static struct clk_branch gcc_ce3_axi_clk = { 2181 + .halt_reg = 0x1088, 2182 + .halt_check = BRANCH_HALT_VOTED, 2183 + .clkr = { 2184 + .enable_reg = 0x1d08, 2185 + .enable_mask = BIT(0), 2186 + .hw.init = &(struct clk_init_data){ 2187 + .name = "gcc_ce3_axi_clk", 2188 + .parent_names = (const char *[]){ 2189 + "system_noc_clk_src", 2190 + }, 2191 + .num_parents = 1, 2192 + .ops = &clk_branch2_ops, 2193 + }, 2194 + }, 2195 + }; 2196 + 2197 + static struct clk_branch gcc_ce3_clk = { 2198 + .halt_reg = 0x1090, 2199 + .halt_check = BRANCH_HALT_VOTED, 2200 + .clkr = { 2201 + .enable_reg = 0x1d04, 2202 + .enable_mask = BIT(0), 2203 + .hw.init = &(struct clk_init_data){ 2204 + .name = "gcc_ce3_clk", 2205 + .parent_names = (const char *[]){ 2206 + "ce3_clk_src", 2207 + }, 2208 + .num_parents = 1, 2209 + .flags = CLK_SET_RATE_PARENT, 2210 + .ops = &clk_branch2_ops, 2211 + }, 2212 + }, 2213 + }; 2214 + 2215 + static struct clk_branch gcc_gp1_clk = { 2216 + .halt_reg = 0x1900, 2217 + .clkr = { 2218 + .enable_reg = 0x1900, 2219 + .enable_mask = BIT(0), 2220 + .hw.init = &(struct clk_init_data){ 2221 + .name = "gcc_gp1_clk", 2222 + .parent_names = (const char *[]){ 2223 + "gp1_clk_src", 2224 + }, 2225 + .num_parents = 1, 2226 + .flags = CLK_SET_RATE_PARENT, 2227 + .ops = &clk_branch2_ops, 2228 + }, 2229 + }, 2230 + }; 2231 + 2232 + static struct clk_branch gcc_gp2_clk = { 2233 + .halt_reg = 0x1940, 2234 + .clkr = { 2235 + .enable_reg = 0x1940, 2236 + .enable_mask = BIT(0), 2237 + .hw.init = &(struct clk_init_data){ 2238 + .name = "gcc_gp2_clk", 2239 + .parent_names = (const char *[]){ 2240 + "gp2_clk_src", 2241 + }, 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_gp3_clk = { 2250 + .halt_reg = 0x1980, 2251 + .clkr = { 2252 + .enable_reg = 0x1980, 2253 + .enable_mask = BIT(0), 2254 + .hw.init = &(struct clk_init_data){ 2255 + .name = "gcc_gp3_clk", 2256 + .parent_names = (const char *[]){ 2257 + "gp3_clk_src", 2258 + }, 2259 + .num_parents = 1, 2260 + .flags = CLK_SET_RATE_PARENT, 2261 + .ops = &clk_branch2_ops, 2262 + }, 2263 + }, 2264 + }; 2265 + 2266 + static struct clk_branch gcc_ocmem_noc_cfg_ahb_clk = { 2267 + .halt_reg = 0x0248, 2268 + .clkr = { 2269 + .enable_reg = 0x0248, 2270 + .enable_mask = BIT(0), 2271 + .hw.init = &(struct clk_init_data){ 2272 + .name = "gcc_ocmem_noc_cfg_ahb_clk", 2273 + .parent_names = (const char *[]){ 2274 + "config_noc_clk_src", 2275 + }, 2276 + .num_parents = 1, 2277 + .ops = &clk_branch2_ops, 2278 + }, 2279 + }, 2280 + }; 2281 + 2282 + static struct clk_branch gcc_pcie_0_aux_clk = { 2283 + .halt_reg = 0x1b10, 2284 + .clkr = { 2285 + .enable_reg = 0x1b10, 2286 + .enable_mask = BIT(0), 2287 + .hw.init = &(struct clk_init_data){ 2288 + .name = "gcc_pcie_0_aux_clk", 2289 + .parent_names = (const char *[]){ 2290 + "pcie_0_aux_clk_src", 2291 + }, 2292 + .num_parents = 1, 2293 + .flags = CLK_SET_RATE_PARENT, 2294 + .ops = &clk_branch2_ops, 2295 + }, 2296 + }, 2297 + }; 2298 + 2299 + static struct clk_branch gcc_pcie_0_cfg_ahb_clk = { 2300 + .halt_reg = 0x1b0c, 2301 + .clkr = { 2302 + .enable_reg = 0x1b0c, 2303 + .enable_mask = BIT(0), 2304 + .hw.init = &(struct clk_init_data){ 2305 + .name = "gcc_pcie_0_cfg_ahb_clk", 2306 + .parent_names = (const char *[]){ 2307 + "config_noc_clk_src", 2308 + }, 2309 + .num_parents = 1, 2310 + .flags = CLK_SET_RATE_PARENT, 2311 + .ops = &clk_branch2_ops, 2312 + }, 2313 + }, 2314 + }; 2315 + 2316 + static struct clk_branch gcc_pcie_0_mstr_axi_clk = { 2317 + .halt_reg = 0x1b08, 2318 + .clkr = { 2319 + .enable_reg = 0x1b08, 2320 + .enable_mask = BIT(0), 2321 + .hw.init = &(struct clk_init_data){ 2322 + .name = "gcc_pcie_0_mstr_axi_clk", 2323 + .parent_names = (const char *[]){ 2324 + "config_noc_clk_src", 2325 + }, 2326 + .num_parents = 1, 2327 + .flags = CLK_SET_RATE_PARENT, 2328 + .ops = &clk_branch2_ops, 2329 + }, 2330 + }, 2331 + }; 2332 + 2333 + static struct clk_branch gcc_pcie_0_pipe_clk = { 2334 + .halt_reg = 0x1b14, 2335 + .clkr = { 2336 + .enable_reg = 0x1b14, 2337 + .enable_mask = BIT(0), 2338 + .hw.init = &(struct clk_init_data){ 2339 + .name = "gcc_pcie_0_pipe_clk", 2340 + .parent_names = (const char *[]){ 2341 + "pcie_0_pipe_clk_src", 2342 + }, 2343 + .num_parents = 1, 2344 + .flags = CLK_SET_RATE_PARENT, 2345 + .ops = &clk_branch2_ops, 2346 + }, 2347 + }, 2348 + }; 2349 + 2350 + static struct clk_branch gcc_pcie_0_slv_axi_clk = { 2351 + .halt_reg = 0x1b04, 2352 + .clkr = { 2353 + .enable_reg = 0x1b04, 2354 + .enable_mask = BIT(0), 2355 + .hw.init = &(struct clk_init_data){ 2356 + .name = "gcc_pcie_0_slv_axi_clk", 2357 + .parent_names = (const char *[]){ 2358 + "config_noc_clk_src", 2359 + }, 2360 + .num_parents = 1, 2361 + .flags = CLK_SET_RATE_PARENT, 2362 + .ops = &clk_branch2_ops, 2363 + }, 2364 + }, 2365 + }; 2366 + 2367 + static struct clk_branch gcc_pcie_1_aux_clk = { 2368 + .halt_reg = 0x1b90, 2369 + .clkr = { 2370 + .enable_reg = 0x1b90, 2371 + .enable_mask = BIT(0), 2372 + .hw.init = &(struct clk_init_data){ 2373 + .name = "gcc_pcie_1_aux_clk", 2374 + .parent_names = (const char *[]){ 2375 + "pcie_1_aux_clk_src", 2376 + }, 2377 + .num_parents = 1, 2378 + .flags = CLK_SET_RATE_PARENT, 2379 + .ops = &clk_branch2_ops, 2380 + }, 2381 + }, 2382 + }; 2383 + 2384 + static struct clk_branch gcc_pcie_1_cfg_ahb_clk = { 2385 + .halt_reg = 0x1b8c, 2386 + .clkr = { 2387 + .enable_reg = 0x1b8c, 2388 + .enable_mask = BIT(0), 2389 + .hw.init = &(struct clk_init_data){ 2390 + .name = "gcc_pcie_1_cfg_ahb_clk", 2391 + .parent_names = (const char *[]){ 2392 + "config_noc_clk_src", 2393 + }, 2394 + .num_parents = 1, 2395 + .flags = CLK_SET_RATE_PARENT, 2396 + .ops = &clk_branch2_ops, 2397 + }, 2398 + }, 2399 + }; 2400 + 2401 + static struct clk_branch gcc_pcie_1_mstr_axi_clk = { 2402 + .halt_reg = 0x1b88, 2403 + .clkr = { 2404 + .enable_reg = 0x1b88, 2405 + .enable_mask = BIT(0), 2406 + .hw.init = &(struct clk_init_data){ 2407 + .name = "gcc_pcie_1_mstr_axi_clk", 2408 + .parent_names = (const char *[]){ 2409 + "config_noc_clk_src", 2410 + }, 2411 + .num_parents = 1, 2412 + .flags = CLK_SET_RATE_PARENT, 2413 + .ops = &clk_branch2_ops, 2414 + }, 2415 + }, 2416 + }; 2417 + 2418 + static struct clk_branch gcc_pcie_1_pipe_clk = { 2419 + .halt_reg = 0x1b94, 2420 + .clkr = { 2421 + .enable_reg = 0x1b94, 2422 + .enable_mask = BIT(0), 2423 + .hw.init = &(struct clk_init_data){ 2424 + .name = "gcc_pcie_1_pipe_clk", 2425 + .parent_names = (const char *[]){ 2426 + "pcie_1_pipe_clk_src", 2427 + }, 2428 + .num_parents = 1, 2429 + .flags = CLK_SET_RATE_PARENT, 2430 + .ops = &clk_branch2_ops, 2431 + }, 2432 + }, 2433 + }; 2434 + 2435 + static struct clk_branch gcc_pcie_1_slv_axi_clk = { 2436 + .halt_reg = 0x1b84, 2437 + .clkr = { 2438 + .enable_reg = 0x1b84, 2439 + .enable_mask = BIT(0), 2440 + .hw.init = &(struct clk_init_data){ 2441 + .name = "gcc_pcie_1_slv_axi_clk", 2442 + .parent_names = (const char *[]){ 2443 + "config_noc_clk_src", 2444 + }, 2445 + .num_parents = 1, 2446 + .flags = CLK_SET_RATE_PARENT, 2447 + .ops = &clk_branch2_ops, 2448 + }, 2449 + }, 2450 + }; 2451 + 2452 + static struct clk_branch gcc_pdm2_clk = { 2453 + .halt_reg = 0x0ccc, 2454 + .clkr = { 2455 + .enable_reg = 0x0ccc, 2456 + .enable_mask = BIT(0), 2457 + .hw.init = &(struct clk_init_data){ 2458 + .name = "gcc_pdm2_clk", 2459 + .parent_names = (const char *[]){ 2460 + "pdm2_clk_src", 2461 + }, 2462 + .num_parents = 1, 2463 + .flags = CLK_SET_RATE_PARENT, 2464 + .ops = &clk_branch2_ops, 2465 + }, 2466 + }, 2467 + }; 2468 + 2469 + static struct clk_branch gcc_pdm_ahb_clk = { 2470 + .halt_reg = 0x0cc4, 2471 + .clkr = { 2472 + .enable_reg = 0x0cc4, 2473 + .enable_mask = BIT(0), 2474 + .hw.init = &(struct clk_init_data){ 2475 + .name = "gcc_pdm_ahb_clk", 2476 + .parent_names = (const char *[]){ 2477 + "periph_noc_clk_src", 2478 + }, 2479 + .num_parents = 1, 2480 + .ops = &clk_branch2_ops, 2481 + }, 2482 + }, 2483 + }; 2484 + 2485 + static struct clk_branch gcc_periph_noc_usb_hsic_ahb_clk = { 2486 + .halt_reg = 0x01a4, 2487 + .clkr = { 2488 + .enable_reg = 0x01a4, 2489 + .enable_mask = BIT(0), 2490 + .hw.init = &(struct clk_init_data){ 2491 + .name = "gcc_periph_noc_usb_hsic_ahb_clk", 2492 + .parent_names = (const char *[]){ 2493 + "usb_hsic_ahb_clk_src", 2494 + }, 2495 + .num_parents = 1, 2496 + .flags = CLK_SET_RATE_PARENT, 2497 + .ops = &clk_branch2_ops, 2498 + }, 2499 + }, 2500 + }; 2501 + 2502 + static struct clk_branch gcc_prng_ahb_clk = { 2503 + .halt_reg = 0x0d04, 2504 + .halt_check = BRANCH_HALT_VOTED, 2505 + .clkr = { 2506 + .enable_reg = 0x1484, 2507 + .enable_mask = BIT(13), 2508 + .hw.init = &(struct clk_init_data){ 2509 + .name = "gcc_prng_ahb_clk", 2510 + .parent_names = (const char *[]){ 2511 + "periph_noc_clk_src", 2512 + }, 2513 + .num_parents = 1, 2514 + .ops = &clk_branch2_ops, 2515 + }, 2516 + }, 2517 + }; 2518 + 2519 + static struct clk_branch gcc_sata_asic0_clk = { 2520 + .halt_reg = 0x1c54, 2521 + .clkr = { 2522 + .enable_reg = 0x1c54, 2523 + .enable_mask = BIT(0), 2524 + .hw.init = &(struct clk_init_data){ 2525 + .name = "gcc_sata_asic0_clk", 2526 + .parent_names = (const char *[]){ 2527 + "sata_asic0_clk_src", 2528 + }, 2529 + .num_parents = 1, 2530 + .flags = CLK_SET_RATE_PARENT, 2531 + .ops = &clk_branch2_ops, 2532 + }, 2533 + }, 2534 + }; 2535 + 2536 + static struct clk_branch gcc_sata_axi_clk = { 2537 + .halt_reg = 0x1c44, 2538 + .clkr = { 2539 + .enable_reg = 0x1c44, 2540 + .enable_mask = BIT(0), 2541 + .hw.init = &(struct clk_init_data){ 2542 + .name = "gcc_sata_axi_clk", 2543 + .parent_names = (const char *[]){ 2544 + "config_noc_clk_src", 2545 + }, 2546 + .num_parents = 1, 2547 + .flags = CLK_SET_RATE_PARENT, 2548 + .ops = &clk_branch2_ops, 2549 + }, 2550 + }, 2551 + }; 2552 + 2553 + static struct clk_branch gcc_sata_cfg_ahb_clk = { 2554 + .halt_reg = 0x1c48, 2555 + .clkr = { 2556 + .enable_reg = 0x1c48, 2557 + .enable_mask = BIT(0), 2558 + .hw.init = &(struct clk_init_data){ 2559 + .name = "gcc_sata_cfg_ahb_clk", 2560 + .parent_names = (const char *[]){ 2561 + "config_noc_clk_src", 2562 + }, 2563 + .num_parents = 1, 2564 + .flags = CLK_SET_RATE_PARENT, 2565 + .ops = &clk_branch2_ops, 2566 + }, 2567 + }, 2568 + }; 2569 + 2570 + static struct clk_branch gcc_sata_pmalive_clk = { 2571 + .halt_reg = 0x1c50, 2572 + .clkr = { 2573 + .enable_reg = 0x1c50, 2574 + .enable_mask = BIT(0), 2575 + .hw.init = &(struct clk_init_data){ 2576 + .name = "gcc_sata_pmalive_clk", 2577 + .parent_names = (const char *[]){ 2578 + "sata_pmalive_clk_src", 2579 + }, 2580 + .num_parents = 1, 2581 + .flags = CLK_SET_RATE_PARENT, 2582 + .ops = &clk_branch2_ops, 2583 + }, 2584 + }, 2585 + }; 2586 + 2587 + static struct clk_branch gcc_sata_rx_clk = { 2588 + .halt_reg = 0x1c58, 2589 + .clkr = { 2590 + .enable_reg = 0x1c58, 2591 + .enable_mask = BIT(0), 2592 + .hw.init = &(struct clk_init_data){ 2593 + .name = "gcc_sata_rx_clk", 2594 + .parent_names = (const char *[]){ 2595 + "sata_rx_clk_src", 2596 + }, 2597 + .num_parents = 1, 2598 + .flags = CLK_SET_RATE_PARENT, 2599 + .ops = &clk_branch2_ops, 2600 + }, 2601 + }, 2602 + }; 2603 + 2604 + static struct clk_branch gcc_sata_rx_oob_clk = { 2605 + .halt_reg = 0x1c4c, 2606 + .clkr = { 2607 + .enable_reg = 0x1c4c, 2608 + .enable_mask = BIT(0), 2609 + .hw.init = &(struct clk_init_data){ 2610 + .name = "gcc_sata_rx_oob_clk", 2611 + .parent_names = (const char *[]){ 2612 + "sata_rx_oob_clk_src", 2613 + }, 2614 + .num_parents = 1, 2615 + .flags = CLK_SET_RATE_PARENT, 2616 + .ops = &clk_branch2_ops, 2617 + }, 2618 + }, 2619 + }; 2620 + 2621 + static struct clk_branch gcc_sdcc1_ahb_clk = { 2622 + .halt_reg = 0x04c8, 2623 + .clkr = { 2624 + .enable_reg = 0x04c8, 2625 + .enable_mask = BIT(0), 2626 + .hw.init = &(struct clk_init_data){ 2627 + .name = "gcc_sdcc1_ahb_clk", 2628 + .parent_names = (const char *[]){ 2629 + "periph_noc_clk_src", 2630 + }, 2631 + .num_parents = 1, 2632 + .ops = &clk_branch2_ops, 2633 + }, 2634 + }, 2635 + }; 2636 + 2637 + static struct clk_branch gcc_sdcc1_apps_clk = { 2638 + .halt_reg = 0x04c4, 2639 + .clkr = { 2640 + .enable_reg = 0x04c4, 2641 + .enable_mask = BIT(0), 2642 + .hw.init = &(struct clk_init_data){ 2643 + .name = "gcc_sdcc1_apps_clk", 2644 + .parent_names = (const char *[]){ 2645 + "sdcc1_apps_clk_src", 2646 + }, 2647 + .num_parents = 1, 2648 + .flags = CLK_SET_RATE_PARENT, 2649 + .ops = &clk_branch2_ops, 2650 + }, 2651 + }, 2652 + }; 2653 + 2654 + static struct clk_branch gcc_sdcc1_cdccal_ff_clk = { 2655 + .halt_reg = 0x04e8, 2656 + .clkr = { 2657 + .enable_reg = 0x04e8, 2658 + .enable_mask = BIT(0), 2659 + .hw.init = &(struct clk_init_data){ 2660 + .name = "gcc_sdcc1_cdccal_ff_clk", 2661 + .parent_names = (const char *[]){ 2662 + "xo" 2663 + }, 2664 + .num_parents = 1, 2665 + .ops = &clk_branch2_ops, 2666 + }, 2667 + }, 2668 + }; 2669 + 2670 + static struct clk_branch gcc_sdcc1_cdccal_sleep_clk = { 2671 + .halt_reg = 0x04e4, 2672 + .clkr = { 2673 + .enable_reg = 0x04e4, 2674 + .enable_mask = BIT(0), 2675 + .hw.init = &(struct clk_init_data){ 2676 + .name = "gcc_sdcc1_cdccal_sleep_clk", 2677 + .parent_names = (const char *[]){ 2678 + "sleep_clk_src" 2679 + }, 2680 + .num_parents = 1, 2681 + .ops = &clk_branch2_ops, 2682 + }, 2683 + }, 2684 + }; 2685 + 2686 + static struct clk_branch gcc_sdcc2_ahb_clk = { 2687 + .halt_reg = 0x0508, 2688 + .clkr = { 2689 + .enable_reg = 0x0508, 2690 + .enable_mask = BIT(0), 2691 + .hw.init = &(struct clk_init_data){ 2692 + .name = "gcc_sdcc2_ahb_clk", 2693 + .parent_names = (const char *[]){ 2694 + "periph_noc_clk_src", 2695 + }, 2696 + .num_parents = 1, 2697 + .ops = &clk_branch2_ops, 2698 + }, 2699 + }, 2700 + }; 2701 + 2702 + static struct clk_branch gcc_sdcc2_apps_clk = { 2703 + .halt_reg = 0x0504, 2704 + .clkr = { 2705 + .enable_reg = 0x0504, 2706 + .enable_mask = BIT(0), 2707 + .hw.init = &(struct clk_init_data){ 2708 + .name = "gcc_sdcc2_apps_clk", 2709 + .parent_names = (const char *[]){ 2710 + "sdcc2_apps_clk_src", 2711 + }, 2712 + .num_parents = 1, 2713 + .flags = CLK_SET_RATE_PARENT, 2714 + .ops = &clk_branch2_ops, 2715 + }, 2716 + }, 2717 + }; 2718 + 2719 + static struct clk_branch gcc_sdcc3_ahb_clk = { 2720 + .halt_reg = 0x0548, 2721 + .clkr = { 2722 + .enable_reg = 0x0548, 2723 + .enable_mask = BIT(0), 2724 + .hw.init = &(struct clk_init_data){ 2725 + .name = "gcc_sdcc3_ahb_clk", 2726 + .parent_names = (const char *[]){ 2727 + "periph_noc_clk_src", 2728 + }, 2729 + .num_parents = 1, 2730 + .ops = &clk_branch2_ops, 2731 + }, 2732 + }, 2733 + }; 2734 + 2735 + static struct clk_branch gcc_sdcc3_apps_clk = { 2736 + .halt_reg = 0x0544, 2737 + .clkr = { 2738 + .enable_reg = 0x0544, 2739 + .enable_mask = BIT(0), 2740 + .hw.init = &(struct clk_init_data){ 2741 + .name = "gcc_sdcc3_apps_clk", 2742 + .parent_names = (const char *[]){ 2743 + "sdcc3_apps_clk_src", 2744 + }, 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_sdcc4_ahb_clk = { 2753 + .halt_reg = 0x0588, 2754 + .clkr = { 2755 + .enable_reg = 0x0588, 2756 + .enable_mask = BIT(0), 2757 + .hw.init = &(struct clk_init_data){ 2758 + .name = "gcc_sdcc4_ahb_clk", 2759 + .parent_names = (const char *[]){ 2760 + "periph_noc_clk_src", 2761 + }, 2762 + .num_parents = 1, 2763 + .ops = &clk_branch2_ops, 2764 + }, 2765 + }, 2766 + }; 2767 + 2768 + static struct clk_branch gcc_sdcc4_apps_clk = { 2769 + .halt_reg = 0x0584, 2770 + .clkr = { 2771 + .enable_reg = 0x0584, 2772 + .enable_mask = BIT(0), 2773 + .hw.init = &(struct clk_init_data){ 2774 + .name = "gcc_sdcc4_apps_clk", 2775 + .parent_names = (const char *[]){ 2776 + "sdcc4_apps_clk_src", 2777 + }, 2778 + .num_parents = 1, 2779 + .flags = CLK_SET_RATE_PARENT, 2780 + .ops = &clk_branch2_ops, 2781 + }, 2782 + }, 2783 + }; 2784 + 2785 + static struct clk_branch gcc_sys_noc_ufs_axi_clk = { 2786 + .halt_reg = 0x013c, 2787 + .clkr = { 2788 + .enable_reg = 0x013c, 2789 + .enable_mask = BIT(0), 2790 + .hw.init = &(struct clk_init_data){ 2791 + .name = "gcc_sys_noc_ufs_axi_clk", 2792 + .parent_names = (const char *[]){ 2793 + "ufs_axi_clk_src", 2794 + }, 2795 + .num_parents = 1, 2796 + .flags = CLK_SET_RATE_PARENT, 2797 + .ops = &clk_branch2_ops, 2798 + }, 2799 + }, 2800 + }; 2801 + 2802 + static struct clk_branch gcc_sys_noc_usb3_axi_clk = { 2803 + .halt_reg = 0x0108, 2804 + .clkr = { 2805 + .enable_reg = 0x0108, 2806 + .enable_mask = BIT(0), 2807 + .hw.init = &(struct clk_init_data){ 2808 + .name = "gcc_sys_noc_usb3_axi_clk", 2809 + .parent_names = (const char *[]){ 2810 + "usb30_master_clk_src", 2811 + }, 2812 + .num_parents = 1, 2813 + .flags = CLK_SET_RATE_PARENT, 2814 + .ops = &clk_branch2_ops, 2815 + }, 2816 + }, 2817 + }; 2818 + 2819 + static struct clk_branch gcc_sys_noc_usb3_sec_axi_clk = { 2820 + .halt_reg = 0x0138, 2821 + .clkr = { 2822 + .enable_reg = 0x0138, 2823 + .enable_mask = BIT(0), 2824 + .hw.init = &(struct clk_init_data){ 2825 + .name = "gcc_sys_noc_usb3_sec_axi_clk", 2826 + .parent_names = (const char *[]){ 2827 + "usb30_sec_master_clk_src", 2828 + }, 2829 + .num_parents = 1, 2830 + .flags = CLK_SET_RATE_PARENT, 2831 + .ops = &clk_branch2_ops, 2832 + }, 2833 + }, 2834 + }; 2835 + 2836 + static struct clk_branch gcc_tsif_ahb_clk = { 2837 + .halt_reg = 0x0d84, 2838 + .clkr = { 2839 + .enable_reg = 0x0d84, 2840 + .enable_mask = BIT(0), 2841 + .hw.init = &(struct clk_init_data){ 2842 + .name = "gcc_tsif_ahb_clk", 2843 + .parent_names = (const char *[]){ 2844 + "periph_noc_clk_src", 2845 + }, 2846 + .num_parents = 1, 2847 + .ops = &clk_branch2_ops, 2848 + }, 2849 + }, 2850 + }; 2851 + 2852 + static struct clk_branch gcc_tsif_inactivity_timers_clk = { 2853 + .halt_reg = 0x0d8c, 2854 + .clkr = { 2855 + .enable_reg = 0x0d8c, 2856 + .enable_mask = BIT(0), 2857 + .hw.init = &(struct clk_init_data){ 2858 + .name = "gcc_tsif_inactivity_timers_clk", 2859 + .parent_names = (const char *[]){ 2860 + "sleep_clk_src", 2861 + }, 2862 + .num_parents = 1, 2863 + .flags = CLK_SET_RATE_PARENT, 2864 + .ops = &clk_branch2_ops, 2865 + }, 2866 + }, 2867 + }; 2868 + 2869 + static struct clk_branch gcc_tsif_ref_clk = { 2870 + .halt_reg = 0x0d88, 2871 + .clkr = { 2872 + .enable_reg = 0x0d88, 2873 + .enable_mask = BIT(0), 2874 + .hw.init = &(struct clk_init_data){ 2875 + .name = "gcc_tsif_ref_clk", 2876 + .parent_names = (const char *[]){ 2877 + "tsif_ref_clk_src", 2878 + }, 2879 + .num_parents = 1, 2880 + .flags = CLK_SET_RATE_PARENT, 2881 + .ops = &clk_branch2_ops, 2882 + }, 2883 + }, 2884 + }; 2885 + 2886 + static struct clk_branch gcc_ufs_ahb_clk = { 2887 + .halt_reg = 0x1d48, 2888 + .clkr = { 2889 + .enable_reg = 0x1d48, 2890 + .enable_mask = BIT(0), 2891 + .hw.init = &(struct clk_init_data){ 2892 + .name = "gcc_ufs_ahb_clk", 2893 + .parent_names = (const char *[]){ 2894 + "config_noc_clk_src", 2895 + }, 2896 + .num_parents = 1, 2897 + .flags = CLK_SET_RATE_PARENT, 2898 + .ops = &clk_branch2_ops, 2899 + }, 2900 + }, 2901 + }; 2902 + 2903 + static struct clk_branch gcc_ufs_axi_clk = { 2904 + .halt_reg = 0x1d44, 2905 + .clkr = { 2906 + .enable_reg = 0x1d44, 2907 + .enable_mask = BIT(0), 2908 + .hw.init = &(struct clk_init_data){ 2909 + .name = "gcc_ufs_axi_clk", 2910 + .parent_names = (const char *[]){ 2911 + "ufs_axi_clk_src", 2912 + }, 2913 + .num_parents = 1, 2914 + .flags = CLK_SET_RATE_PARENT, 2915 + .ops = &clk_branch2_ops, 2916 + }, 2917 + }, 2918 + }; 2919 + 2920 + static struct clk_branch gcc_ufs_rx_cfg_clk = { 2921 + .halt_reg = 0x1d50, 2922 + .clkr = { 2923 + .enable_reg = 0x1d50, 2924 + .enable_mask = BIT(0), 2925 + .hw.init = &(struct clk_init_data){ 2926 + .name = "gcc_ufs_rx_cfg_clk", 2927 + .parent_names = (const char *[]){ 2928 + "ufs_axi_clk_src", 2929 + }, 2930 + .num_parents = 1, 2931 + .flags = CLK_SET_RATE_PARENT, 2932 + .ops = &clk_branch2_ops, 2933 + }, 2934 + }, 2935 + }; 2936 + 2937 + static struct clk_branch gcc_ufs_rx_symbol_0_clk = { 2938 + .halt_reg = 0x1d5c, 2939 + .clkr = { 2940 + .enable_reg = 0x1d5c, 2941 + .enable_mask = BIT(0), 2942 + .hw.init = &(struct clk_init_data){ 2943 + .name = "gcc_ufs_rx_symbol_0_clk", 2944 + .parent_names = (const char *[]){ 2945 + "ufs_rx_symbol_0_clk_src", 2946 + }, 2947 + .num_parents = 1, 2948 + .flags = CLK_SET_RATE_PARENT, 2949 + .ops = &clk_branch2_ops, 2950 + }, 2951 + }, 2952 + }; 2953 + 2954 + static struct clk_branch gcc_ufs_rx_symbol_1_clk = { 2955 + .halt_reg = 0x1d60, 2956 + .clkr = { 2957 + .enable_reg = 0x1d60, 2958 + .enable_mask = BIT(0), 2959 + .hw.init = &(struct clk_init_data){ 2960 + .name = "gcc_ufs_rx_symbol_1_clk", 2961 + .parent_names = (const char *[]){ 2962 + "ufs_rx_symbol_1_clk_src", 2963 + }, 2964 + .num_parents = 1, 2965 + .flags = CLK_SET_RATE_PARENT, 2966 + .ops = &clk_branch2_ops, 2967 + }, 2968 + }, 2969 + }; 2970 + 2971 + static struct clk_branch gcc_ufs_tx_cfg_clk = { 2972 + .halt_reg = 0x1d4c, 2973 + .clkr = { 2974 + .enable_reg = 0x1d4c, 2975 + .enable_mask = BIT(0), 2976 + .hw.init = &(struct clk_init_data){ 2977 + .name = "gcc_ufs_tx_cfg_clk", 2978 + .parent_names = (const char *[]){ 2979 + "ufs_axi_clk_src", 2980 + }, 2981 + .num_parents = 1, 2982 + .flags = CLK_SET_RATE_PARENT, 2983 + .ops = &clk_branch2_ops, 2984 + }, 2985 + }, 2986 + }; 2987 + 2988 + static struct clk_branch gcc_ufs_tx_symbol_0_clk = { 2989 + .halt_reg = 0x1d54, 2990 + .clkr = { 2991 + .enable_reg = 0x1d54, 2992 + .enable_mask = BIT(0), 2993 + .hw.init = &(struct clk_init_data){ 2994 + .name = "gcc_ufs_tx_symbol_0_clk", 2995 + .parent_names = (const char *[]){ 2996 + "ufs_tx_symbol_0_clk_src", 2997 + }, 2998 + .num_parents = 1, 2999 + .flags = CLK_SET_RATE_PARENT, 3000 + .ops = &clk_branch2_ops, 3001 + }, 3002 + }, 3003 + }; 3004 + 3005 + static struct clk_branch gcc_ufs_tx_symbol_1_clk = { 3006 + .halt_reg = 0x1d58, 3007 + .clkr = { 3008 + .enable_reg = 0x1d58, 3009 + .enable_mask = BIT(0), 3010 + .hw.init = &(struct clk_init_data){ 3011 + .name = "gcc_ufs_tx_symbol_1_clk", 3012 + .parent_names = (const char *[]){ 3013 + "ufs_tx_symbol_1_clk_src", 3014 + }, 3015 + .num_parents = 1, 3016 + .flags = CLK_SET_RATE_PARENT, 3017 + .ops = &clk_branch2_ops, 3018 + }, 3019 + }, 3020 + }; 3021 + 3022 + static struct clk_branch gcc_usb2a_phy_sleep_clk = { 3023 + .halt_reg = 0x04ac, 3024 + .clkr = { 3025 + .enable_reg = 0x04ac, 3026 + .enable_mask = BIT(0), 3027 + .hw.init = &(struct clk_init_data){ 3028 + .name = "gcc_usb2a_phy_sleep_clk", 3029 + .parent_names = (const char *[]){ 3030 + "sleep_clk_src", 3031 + }, 3032 + .num_parents = 1, 3033 + .ops = &clk_branch2_ops, 3034 + }, 3035 + }, 3036 + }; 3037 + 3038 + static struct clk_branch gcc_usb2b_phy_sleep_clk = { 3039 + .halt_reg = 0x04b4, 3040 + .clkr = { 3041 + .enable_reg = 0x04b4, 3042 + .enable_mask = BIT(0), 3043 + .hw.init = &(struct clk_init_data){ 3044 + .name = "gcc_usb2b_phy_sleep_clk", 3045 + .parent_names = (const char *[]){ 3046 + "sleep_clk_src", 3047 + }, 3048 + .num_parents = 1, 3049 + .ops = &clk_branch2_ops, 3050 + }, 3051 + }, 3052 + }; 3053 + 3054 + static struct clk_branch gcc_usb30_master_clk = { 3055 + .halt_reg = 0x03c8, 3056 + .clkr = { 3057 + .enable_reg = 0x03c8, 3058 + .enable_mask = BIT(0), 3059 + .hw.init = &(struct clk_init_data){ 3060 + .name = "gcc_usb30_master_clk", 3061 + .parent_names = (const char *[]){ 3062 + "usb30_master_clk_src", 3063 + }, 3064 + .num_parents = 1, 3065 + .flags = CLK_SET_RATE_PARENT, 3066 + .ops = &clk_branch2_ops, 3067 + }, 3068 + }, 3069 + }; 3070 + 3071 + static struct clk_branch gcc_usb30_sec_master_clk = { 3072 + .halt_reg = 0x1bc8, 3073 + .clkr = { 3074 + .enable_reg = 0x1bc8, 3075 + .enable_mask = BIT(0), 3076 + .hw.init = &(struct clk_init_data){ 3077 + .name = "gcc_usb30_sec_master_clk", 3078 + .parent_names = (const char *[]){ 3079 + "usb30_sec_master_clk_src", 3080 + }, 3081 + .num_parents = 1, 3082 + .flags = CLK_SET_RATE_PARENT, 3083 + .ops = &clk_branch2_ops, 3084 + }, 3085 + }, 3086 + }; 3087 + 3088 + static struct clk_branch gcc_usb30_mock_utmi_clk = { 3089 + .halt_reg = 0x03d0, 3090 + .clkr = { 3091 + .enable_reg = 0x03d0, 3092 + .enable_mask = BIT(0), 3093 + .hw.init = &(struct clk_init_data){ 3094 + .name = "gcc_usb30_mock_utmi_clk", 3095 + .parent_names = (const char *[]){ 3096 + "usb30_mock_utmi_clk_src", 3097 + }, 3098 + .num_parents = 1, 3099 + .flags = CLK_SET_RATE_PARENT, 3100 + .ops = &clk_branch2_ops, 3101 + }, 3102 + }, 3103 + }; 3104 + 3105 + static struct clk_branch gcc_usb30_sleep_clk = { 3106 + .halt_reg = 0x03cc, 3107 + .clkr = { 3108 + .enable_reg = 0x03cc, 3109 + .enable_mask = BIT(0), 3110 + .hw.init = &(struct clk_init_data){ 3111 + .name = "gcc_usb30_sleep_clk", 3112 + .parent_names = (const char *[]){ 3113 + "sleep_clk_src", 3114 + }, 3115 + .num_parents = 1, 3116 + .ops = &clk_branch2_ops, 3117 + }, 3118 + }, 3119 + }; 3120 + 3121 + static struct clk_branch gcc_usb_hs_ahb_clk = { 3122 + .halt_reg = 0x0488, 3123 + .clkr = { 3124 + .enable_reg = 0x0488, 3125 + .enable_mask = BIT(0), 3126 + .hw.init = &(struct clk_init_data){ 3127 + .name = "gcc_usb_hs_ahb_clk", 3128 + .parent_names = (const char *[]){ 3129 + "periph_noc_clk_src", 3130 + }, 3131 + .num_parents = 1, 3132 + .ops = &clk_branch2_ops, 3133 + }, 3134 + }, 3135 + }; 3136 + 3137 + static struct clk_branch gcc_usb_hs_inactivity_timers_clk = { 3138 + .halt_reg = 0x048c, 3139 + .clkr = { 3140 + .enable_reg = 0x048c, 3141 + .enable_mask = BIT(0), 3142 + .hw.init = &(struct clk_init_data){ 3143 + .name = "gcc_usb_hs_inactivity_timers_clk", 3144 + .parent_names = (const char *[]){ 3145 + "sleep_clk_src", 3146 + }, 3147 + .num_parents = 1, 3148 + .flags = CLK_SET_RATE_PARENT, 3149 + .ops = &clk_branch2_ops, 3150 + }, 3151 + }, 3152 + }; 3153 + 3154 + static struct clk_branch gcc_usb_hs_system_clk = { 3155 + .halt_reg = 0x0484, 3156 + .clkr = { 3157 + .enable_reg = 0x0484, 3158 + .enable_mask = BIT(0), 3159 + .hw.init = &(struct clk_init_data){ 3160 + .name = "gcc_usb_hs_system_clk", 3161 + .parent_names = (const char *[]){ 3162 + "usb_hs_system_clk_src", 3163 + }, 3164 + .num_parents = 1, 3165 + .flags = CLK_SET_RATE_PARENT, 3166 + .ops = &clk_branch2_ops, 3167 + }, 3168 + }, 3169 + }; 3170 + 3171 + static struct clk_branch gcc_usb_hsic_ahb_clk = { 3172 + .halt_reg = 0x0408, 3173 + .clkr = { 3174 + .enable_reg = 0x0408, 3175 + .enable_mask = BIT(0), 3176 + .hw.init = &(struct clk_init_data){ 3177 + .name = "gcc_usb_hsic_ahb_clk", 3178 + .parent_names = (const char *[]){ 3179 + "periph_noc_clk_src", 3180 + }, 3181 + .num_parents = 1, 3182 + .ops = &clk_branch2_ops, 3183 + }, 3184 + }, 3185 + }; 3186 + 3187 + static struct clk_branch gcc_usb_hsic_clk = { 3188 + .halt_reg = 0x0410, 3189 + .clkr = { 3190 + .enable_reg = 0x0410, 3191 + .enable_mask = BIT(0), 3192 + .hw.init = &(struct clk_init_data){ 3193 + .name = "gcc_usb_hsic_clk", 3194 + .parent_names = (const char *[]){ 3195 + "usb_hsic_clk_src", 3196 + }, 3197 + .num_parents = 1, 3198 + .flags = CLK_SET_RATE_PARENT, 3199 + .ops = &clk_branch2_ops, 3200 + }, 3201 + }, 3202 + }; 3203 + 3204 + static struct clk_branch gcc_usb_hsic_io_cal_clk = { 3205 + .halt_reg = 0x0414, 3206 + .clkr = { 3207 + .enable_reg = 0x0414, 3208 + .enable_mask = BIT(0), 3209 + .hw.init = &(struct clk_init_data){ 3210 + .name = "gcc_usb_hsic_io_cal_clk", 3211 + .parent_names = (const char *[]){ 3212 + "usb_hsic_io_cal_clk_src", 3213 + }, 3214 + .num_parents = 1, 3215 + .flags = CLK_SET_RATE_PARENT, 3216 + .ops = &clk_branch2_ops, 3217 + }, 3218 + }, 3219 + }; 3220 + 3221 + static struct clk_branch gcc_usb_hsic_io_cal_sleep_clk = { 3222 + .halt_reg = 0x0418, 3223 + .clkr = { 3224 + .enable_reg = 0x0418, 3225 + .enable_mask = BIT(0), 3226 + .hw.init = &(struct clk_init_data){ 3227 + .name = "gcc_usb_hsic_io_cal_sleep_clk", 3228 + .parent_names = (const char *[]){ 3229 + "sleep_clk_src", 3230 + }, 3231 + .num_parents = 1, 3232 + .ops = &clk_branch2_ops, 3233 + }, 3234 + }, 3235 + }; 3236 + 3237 + static struct clk_branch gcc_usb_hsic_system_clk = { 3238 + .halt_reg = 0x040c, 3239 + .clkr = { 3240 + .enable_reg = 0x040c, 3241 + .enable_mask = BIT(0), 3242 + .hw.init = &(struct clk_init_data){ 3243 + .name = "gcc_usb_hsic_system_clk", 3244 + .parent_names = (const char *[]){ 3245 + "usb_hsic_system_clk_src", 3246 + }, 3247 + .num_parents = 1, 3248 + .flags = CLK_SET_RATE_PARENT, 3249 + .ops = &clk_branch2_ops, 3250 + }, 3251 + }, 3252 + }; 3253 + 3254 + static struct clk_regmap *gcc_apq8084_clocks[] = { 3255 + [GPLL0] = &gpll0.clkr, 3256 + [GPLL0_VOTE] = &gpll0_vote, 3257 + [GPLL1] = &gpll1.clkr, 3258 + [GPLL1_VOTE] = &gpll1_vote, 3259 + [GPLL4] = &gpll4.clkr, 3260 + [GPLL4_VOTE] = &gpll4_vote, 3261 + [CONFIG_NOC_CLK_SRC] = &config_noc_clk_src.clkr, 3262 + [PERIPH_NOC_CLK_SRC] = &periph_noc_clk_src.clkr, 3263 + [SYSTEM_NOC_CLK_SRC] = &system_noc_clk_src.clkr, 3264 + [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr, 3265 + [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr, 3266 + [USB30_SEC_MASTER_CLK_SRC] = &usb30_sec_master_clk_src.clkr, 3267 + [USB_HSIC_AHB_CLK_SRC] = &usb_hsic_ahb_clk_src.clkr, 3268 + [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr, 3269 + [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr, 3270 + [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr, 3271 + [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr, 3272 + [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr, 3273 + [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr, 3274 + [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr, 3275 + [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr, 3276 + [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr, 3277 + [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr, 3278 + [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr, 3279 + [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr, 3280 + [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr, 3281 + [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr, 3282 + [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr, 3283 + [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr, 3284 + [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr, 3285 + [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr, 3286 + [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr, 3287 + [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr, 3288 + [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr, 3289 + [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr, 3290 + [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr, 3291 + [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr, 3292 + [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr, 3293 + [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr, 3294 + [BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr, 3295 + [BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr, 3296 + [BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr, 3297 + [BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr, 3298 + [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr, 3299 + [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr, 3300 + [BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr, 3301 + [BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr, 3302 + [BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr, 3303 + [BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr, 3304 + [CE1_CLK_SRC] = &ce1_clk_src.clkr, 3305 + [CE2_CLK_SRC] = &ce2_clk_src.clkr, 3306 + [CE3_CLK_SRC] = &ce3_clk_src.clkr, 3307 + [GP1_CLK_SRC] = &gp1_clk_src.clkr, 3308 + [GP2_CLK_SRC] = &gp2_clk_src.clkr, 3309 + [GP3_CLK_SRC] = &gp3_clk_src.clkr, 3310 + [PCIE_0_AUX_CLK_SRC] = &pcie_0_aux_clk_src.clkr, 3311 + [PCIE_0_PIPE_CLK_SRC] = &pcie_0_pipe_clk_src.clkr, 3312 + [PCIE_1_AUX_CLK_SRC] = &pcie_1_aux_clk_src.clkr, 3313 + [PCIE_1_PIPE_CLK_SRC] = &pcie_1_pipe_clk_src.clkr, 3314 + [PDM2_CLK_SRC] = &pdm2_clk_src.clkr, 3315 + [SATA_ASIC0_CLK_SRC] = &sata_asic0_clk_src.clkr, 3316 + [SATA_PMALIVE_CLK_SRC] = &sata_pmalive_clk_src.clkr, 3317 + [SATA_RX_CLK_SRC] = &sata_rx_clk_src.clkr, 3318 + [SATA_RX_OOB_CLK_SRC] = &sata_rx_oob_clk_src.clkr, 3319 + [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr, 3320 + [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr, 3321 + [SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr, 3322 + [SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr, 3323 + [TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr, 3324 + [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr, 3325 + [USB30_SEC_MOCK_UTMI_CLK_SRC] = &usb30_sec_mock_utmi_clk_src.clkr, 3326 + [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr, 3327 + [USB_HSIC_CLK_SRC] = &usb_hsic_clk_src.clkr, 3328 + [USB_HSIC_IO_CAL_CLK_SRC] = &usb_hsic_io_cal_clk_src.clkr, 3329 + [USB_HSIC_MOCK_UTMI_CLK_SRC] = &usb_hsic_mock_utmi_clk_src.clkr, 3330 + [USB_HSIC_SYSTEM_CLK_SRC] = &usb_hsic_system_clk_src.clkr, 3331 + [GCC_BAM_DMA_AHB_CLK] = &gcc_bam_dma_ahb_clk.clkr, 3332 + [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr, 3333 + [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr, 3334 + [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr, 3335 + [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr, 3336 + [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr, 3337 + [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr, 3338 + [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr, 3339 + [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr, 3340 + [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr, 3341 + [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr, 3342 + [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr, 3343 + [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr, 3344 + [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr, 3345 + [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr, 3346 + [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr, 3347 + [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr, 3348 + [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr, 3349 + [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr, 3350 + [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr, 3351 + [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr, 3352 + [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr, 3353 + [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr, 3354 + [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr, 3355 + [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr, 3356 + [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr, 3357 + [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr, 3358 + [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr, 3359 + [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr, 3360 + [GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr, 3361 + [GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr, 3362 + [GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr, 3363 + [GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr, 3364 + [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr, 3365 + [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr, 3366 + [GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr, 3367 + [GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr, 3368 + [GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr, 3369 + [GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr, 3370 + [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 3371 + [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr, 3372 + [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr, 3373 + [GCC_CE1_CLK] = &gcc_ce1_clk.clkr, 3374 + [GCC_CE2_AHB_CLK] = &gcc_ce2_ahb_clk.clkr, 3375 + [GCC_CE2_AXI_CLK] = &gcc_ce2_axi_clk.clkr, 3376 + [GCC_CE2_CLK] = &gcc_ce2_clk.clkr, 3377 + [GCC_CE3_AHB_CLK] = &gcc_ce3_ahb_clk.clkr, 3378 + [GCC_CE3_AXI_CLK] = &gcc_ce3_axi_clk.clkr, 3379 + [GCC_CE3_CLK] = &gcc_ce3_clk.clkr, 3380 + [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 3381 + [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 3382 + [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 3383 + [GCC_OCMEM_NOC_CFG_AHB_CLK] = &gcc_ocmem_noc_cfg_ahb_clk.clkr, 3384 + [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr, 3385 + [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr, 3386 + [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr, 3387 + [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr, 3388 + [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr, 3389 + [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr, 3390 + [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr, 3391 + [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr, 3392 + [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr, 3393 + [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr, 3394 + [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 3395 + [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 3396 + [GCC_PERIPH_NOC_USB_HSIC_AHB_CLK] = &gcc_periph_noc_usb_hsic_ahb_clk.clkr, 3397 + [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 3398 + [GCC_SATA_ASIC0_CLK] = &gcc_sata_asic0_clk.clkr, 3399 + [GCC_SATA_AXI_CLK] = &gcc_sata_axi_clk.clkr, 3400 + [GCC_SATA_CFG_AHB_CLK] = &gcc_sata_cfg_ahb_clk.clkr, 3401 + [GCC_SATA_PMALIVE_CLK] = &gcc_sata_pmalive_clk.clkr, 3402 + [GCC_SATA_RX_CLK] = &gcc_sata_rx_clk.clkr, 3403 + [GCC_SATA_RX_OOB_CLK] = &gcc_sata_rx_oob_clk.clkr, 3404 + [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 3405 + [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 3406 + [GCC_SDCC1_CDCCAL_FF_CLK] = &gcc_sdcc1_cdccal_ff_clk.clkr, 3407 + [GCC_SDCC1_CDCCAL_SLEEP_CLK] = &gcc_sdcc1_cdccal_sleep_clk.clkr, 3408 + [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 3409 + [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 3410 + [GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr, 3411 + [GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr, 3412 + [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr, 3413 + [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr, 3414 + [GCC_SYS_NOC_UFS_AXI_CLK] = &gcc_sys_noc_ufs_axi_clk.clkr, 3415 + [GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr, 3416 + [GCC_SYS_NOC_USB3_SEC_AXI_CLK] = &gcc_sys_noc_usb3_sec_axi_clk.clkr, 3417 + [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr, 3418 + [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr, 3419 + [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr, 3420 + [GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr, 3421 + [GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr, 3422 + [GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr, 3423 + [GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr, 3424 + [GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr, 3425 + [GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr, 3426 + [GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr, 3427 + [GCC_UFS_TX_SYMBOL_1_CLK] = &gcc_ufs_tx_symbol_1_clk.clkr, 3428 + [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr, 3429 + [GCC_USB2B_PHY_SLEEP_CLK] = &gcc_usb2b_phy_sleep_clk.clkr, 3430 + [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr, 3431 + [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr, 3432 + [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr, 3433 + [GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr, 3434 + [GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr, 3435 + [GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr, 3436 + [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr, 3437 + [GCC_USB_HS_INACTIVITY_TIMERS_CLK] = &gcc_usb_hs_inactivity_timers_clk.clkr, 3438 + [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr, 3439 + [GCC_USB_HSIC_AHB_CLK] = &gcc_usb_hsic_ahb_clk.clkr, 3440 + [GCC_USB_HSIC_CLK] = &gcc_usb_hsic_clk.clkr, 3441 + [GCC_USB_HSIC_IO_CAL_CLK] = &gcc_usb_hsic_io_cal_clk.clkr, 3442 + [GCC_USB_HSIC_IO_CAL_SLEEP_CLK] = &gcc_usb_hsic_io_cal_sleep_clk.clkr, 3443 + [GCC_USB_HSIC_MOCK_UTMI_CLK] = &gcc_usb_hsic_mock_utmi_clk.clkr, 3444 + [GCC_USB_HSIC_SYSTEM_CLK] = &gcc_usb_hsic_system_clk.clkr, 3445 + }; 3446 + 3447 + static const struct qcom_reset_map gcc_apq8084_resets[] = { 3448 + [GCC_SYSTEM_NOC_BCR] = { 0x0100 }, 3449 + [GCC_CONFIG_NOC_BCR] = { 0x0140 }, 3450 + [GCC_PERIPH_NOC_BCR] = { 0x0180 }, 3451 + [GCC_IMEM_BCR] = { 0x0200 }, 3452 + [GCC_MMSS_BCR] = { 0x0240 }, 3453 + [GCC_QDSS_BCR] = { 0x0300 }, 3454 + [GCC_USB_30_BCR] = { 0x03c0 }, 3455 + [GCC_USB3_PHY_BCR] = { 0x03fc }, 3456 + [GCC_USB_HS_HSIC_BCR] = { 0x0400 }, 3457 + [GCC_USB_HS_BCR] = { 0x0480 }, 3458 + [GCC_USB2A_PHY_BCR] = { 0x04a8 }, 3459 + [GCC_USB2B_PHY_BCR] = { 0x04b0 }, 3460 + [GCC_SDCC1_BCR] = { 0x04c0 }, 3461 + [GCC_SDCC2_BCR] = { 0x0500 }, 3462 + [GCC_SDCC3_BCR] = { 0x0540 }, 3463 + [GCC_SDCC4_BCR] = { 0x0580 }, 3464 + [GCC_BLSP1_BCR] = { 0x05c0 }, 3465 + [GCC_BLSP1_QUP1_BCR] = { 0x0640 }, 3466 + [GCC_BLSP1_UART1_BCR] = { 0x0680 }, 3467 + [GCC_BLSP1_QUP2_BCR] = { 0x06c0 }, 3468 + [GCC_BLSP1_UART2_BCR] = { 0x0700 }, 3469 + [GCC_BLSP1_QUP3_BCR] = { 0x0740 }, 3470 + [GCC_BLSP1_UART3_BCR] = { 0x0780 }, 3471 + [GCC_BLSP1_QUP4_BCR] = { 0x07c0 }, 3472 + [GCC_BLSP1_UART4_BCR] = { 0x0800 }, 3473 + [GCC_BLSP1_QUP5_BCR] = { 0x0840 }, 3474 + [GCC_BLSP1_UART5_BCR] = { 0x0880 }, 3475 + [GCC_BLSP1_QUP6_BCR] = { 0x08c0 }, 3476 + [GCC_BLSP1_UART6_BCR] = { 0x0900 }, 3477 + [GCC_BLSP2_BCR] = { 0x0940 }, 3478 + [GCC_BLSP2_QUP1_BCR] = { 0x0980 }, 3479 + [GCC_BLSP2_UART1_BCR] = { 0x09c0 }, 3480 + [GCC_BLSP2_QUP2_BCR] = { 0x0a00 }, 3481 + [GCC_BLSP2_UART2_BCR] = { 0x0a40 }, 3482 + [GCC_BLSP2_QUP3_BCR] = { 0x0a80 }, 3483 + [GCC_BLSP2_UART3_BCR] = { 0x0ac0 }, 3484 + [GCC_BLSP2_QUP4_BCR] = { 0x0b00 }, 3485 + [GCC_BLSP2_UART4_BCR] = { 0x0b40 }, 3486 + [GCC_BLSP2_QUP5_BCR] = { 0x0b80 }, 3487 + [GCC_BLSP2_UART5_BCR] = { 0x0bc0 }, 3488 + [GCC_BLSP2_QUP6_BCR] = { 0x0c00 }, 3489 + [GCC_BLSP2_UART6_BCR] = { 0x0c40 }, 3490 + [GCC_PDM_BCR] = { 0x0cc0 }, 3491 + [GCC_PRNG_BCR] = { 0x0d00 }, 3492 + [GCC_BAM_DMA_BCR] = { 0x0d40 }, 3493 + [GCC_TSIF_BCR] = { 0x0d80 }, 3494 + [GCC_TCSR_BCR] = { 0x0dc0 }, 3495 + [GCC_BOOT_ROM_BCR] = { 0x0e00 }, 3496 + [GCC_MSG_RAM_BCR] = { 0x0e40 }, 3497 + [GCC_TLMM_BCR] = { 0x0e80 }, 3498 + [GCC_MPM_BCR] = { 0x0ec0 }, 3499 + [GCC_MPM_AHB_RESET] = { 0x0ec4, 1 }, 3500 + [GCC_MPM_NON_AHB_RESET] = { 0x0ec4, 2 }, 3501 + [GCC_SEC_CTRL_BCR] = { 0x0f40 }, 3502 + [GCC_SPMI_BCR] = { 0x0fc0 }, 3503 + [GCC_SPDM_BCR] = { 0x1000 }, 3504 + [GCC_CE1_BCR] = { 0x1040 }, 3505 + [GCC_CE2_BCR] = { 0x1080 }, 3506 + [GCC_BIMC_BCR] = { 0x1100 }, 3507 + [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x1240 }, 3508 + [GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x1248 }, 3509 + [GCC_PNOC_BUS_TIMEOUT0_BCR] = { 0x1280 }, 3510 + [GCC_PNOC_BUS_TIMEOUT1_BCR] = { 0x1288 }, 3511 + [GCC_PNOC_BUS_TIMEOUT2_BCR] = { 0x1290 }, 3512 + [GCC_PNOC_BUS_TIMEOUT3_BCR] = { 0x1298 }, 3513 + [GCC_PNOC_BUS_TIMEOUT4_BCR] = { 0x12a0 }, 3514 + [GCC_CNOC_BUS_TIMEOUT0_BCR] = { 0x12c0 }, 3515 + [GCC_CNOC_BUS_TIMEOUT1_BCR] = { 0x12c8 }, 3516 + [GCC_CNOC_BUS_TIMEOUT2_BCR] = { 0x12d0 }, 3517 + [GCC_CNOC_BUS_TIMEOUT3_BCR] = { 0x12d8 }, 3518 + [GCC_CNOC_BUS_TIMEOUT4_BCR] = { 0x12e0 }, 3519 + [GCC_CNOC_BUS_TIMEOUT5_BCR] = { 0x12e8 }, 3520 + [GCC_CNOC_BUS_TIMEOUT6_BCR] = { 0x12f0 }, 3521 + [GCC_DEHR_BCR] = { 0x1300 }, 3522 + [GCC_RBCPR_BCR] = { 0x1380 }, 3523 + [GCC_MSS_RESTART] = { 0x1680 }, 3524 + [GCC_LPASS_RESTART] = { 0x16c0 }, 3525 + [GCC_WCSS_RESTART] = { 0x1700 }, 3526 + [GCC_VENUS_RESTART] = { 0x1740 }, 3527 + [GCC_COPSS_SMMU_BCR] = { 0x1a40 }, 3528 + [GCC_SPSS_BCR] = { 0x1a80 }, 3529 + [GCC_PCIE_0_BCR] = { 0x1ac0 }, 3530 + [GCC_PCIE_0_PHY_BCR] = { 0x1b00 }, 3531 + [GCC_PCIE_1_BCR] = { 0x1b40 }, 3532 + [GCC_PCIE_1_PHY_BCR] = { 0x1b80 }, 3533 + [GCC_USB_30_SEC_BCR] = { 0x1bc0 }, 3534 + [GCC_USB3_SEC_PHY_BCR] = { 0x1bfc }, 3535 + [GCC_SATA_BCR] = { 0x1c40 }, 3536 + [GCC_CE3_BCR] = { 0x1d00 }, 3537 + [GCC_UFS_BCR] = { 0x1d40 }, 3538 + [GCC_USB30_PHY_COM_BCR] = { 0x1e80 }, 3539 + }; 3540 + 3541 + static const struct regmap_config gcc_apq8084_regmap_config = { 3542 + .reg_bits = 32, 3543 + .reg_stride = 4, 3544 + .val_bits = 32, 3545 + .max_register = 0x1fc0, 3546 + .fast_io = true, 3547 + }; 3548 + 3549 + static const struct qcom_cc_desc gcc_apq8084_desc = { 3550 + .config = &gcc_apq8084_regmap_config, 3551 + .clks = gcc_apq8084_clocks, 3552 + .num_clks = ARRAY_SIZE(gcc_apq8084_clocks), 3553 + .resets = gcc_apq8084_resets, 3554 + .num_resets = ARRAY_SIZE(gcc_apq8084_resets), 3555 + }; 3556 + 3557 + static const struct of_device_id gcc_apq8084_match_table[] = { 3558 + { .compatible = "qcom,gcc-apq8084" }, 3559 + { } 3560 + }; 3561 + MODULE_DEVICE_TABLE(of, gcc_apq8084_match_table); 3562 + 3563 + static int gcc_apq8084_probe(struct platform_device *pdev) 3564 + { 3565 + struct clk *clk; 3566 + struct device *dev = &pdev->dev; 3567 + 3568 + /* Temporary until RPM clocks supported */ 3569 + clk = clk_register_fixed_rate(dev, "xo", NULL, CLK_IS_ROOT, 19200000); 3570 + if (IS_ERR(clk)) 3571 + return PTR_ERR(clk); 3572 + 3573 + clk = clk_register_fixed_rate(dev, "sleep_clk_src", NULL, 3574 + CLK_IS_ROOT, 32768); 3575 + if (IS_ERR(clk)) 3576 + return PTR_ERR(clk); 3577 + 3578 + return qcom_cc_probe(pdev, &gcc_apq8084_desc); 3579 + } 3580 + 3581 + static int gcc_apq8084_remove(struct platform_device *pdev) 3582 + { 3583 + qcom_cc_remove(pdev); 3584 + return 0; 3585 + } 3586 + 3587 + static struct platform_driver gcc_apq8084_driver = { 3588 + .probe = gcc_apq8084_probe, 3589 + .remove = gcc_apq8084_remove, 3590 + .driver = { 3591 + .name = "gcc-apq8084", 3592 + .owner = THIS_MODULE, 3593 + .of_match_table = gcc_apq8084_match_table, 3594 + }, 3595 + }; 3596 + 3597 + static int __init gcc_apq8084_init(void) 3598 + { 3599 + return platform_driver_register(&gcc_apq8084_driver); 3600 + } 3601 + core_initcall(gcc_apq8084_init); 3602 + 3603 + static void __exit gcc_apq8084_exit(void) 3604 + { 3605 + platform_driver_unregister(&gcc_apq8084_driver); 3606 + } 3607 + module_exit(gcc_apq8084_exit); 3608 + 3609 + MODULE_DESCRIPTION("QCOM GCC APQ8084 Driver"); 3610 + MODULE_LICENSE("GPL v2"); 3611 + MODULE_ALIAS("platform:gcc-apq8084");
+2424
drivers/clk/qcom/gcc-ipq806x.c
··· 1 + /* 2 + * Copyright (c) 2014, 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-ipq806x.h> 26 + #include <dt-bindings/reset/qcom,gcc-ipq806x.h> 27 + 28 + #include "common.h" 29 + #include "clk-regmap.h" 30 + #include "clk-pll.h" 31 + #include "clk-rcg.h" 32 + #include "clk-branch.h" 33 + #include "reset.h" 34 + 35 + static struct clk_pll pll3 = { 36 + .l_reg = 0x3164, 37 + .m_reg = 0x3168, 38 + .n_reg = 0x316c, 39 + .config_reg = 0x3174, 40 + .mode_reg = 0x3160, 41 + .status_reg = 0x3178, 42 + .status_bit = 16, 43 + .clkr.hw.init = &(struct clk_init_data){ 44 + .name = "pll3", 45 + .parent_names = (const char *[]){ "pxo" }, 46 + .num_parents = 1, 47 + .ops = &clk_pll_ops, 48 + }, 49 + }; 50 + 51 + static struct clk_pll pll8 = { 52 + .l_reg = 0x3144, 53 + .m_reg = 0x3148, 54 + .n_reg = 0x314c, 55 + .config_reg = 0x3154, 56 + .mode_reg = 0x3140, 57 + .status_reg = 0x3158, 58 + .status_bit = 16, 59 + .clkr.hw.init = &(struct clk_init_data){ 60 + .name = "pll8", 61 + .parent_names = (const char *[]){ "pxo" }, 62 + .num_parents = 1, 63 + .ops = &clk_pll_ops, 64 + }, 65 + }; 66 + 67 + static struct clk_regmap pll8_vote = { 68 + .enable_reg = 0x34c0, 69 + .enable_mask = BIT(8), 70 + .hw.init = &(struct clk_init_data){ 71 + .name = "pll8_vote", 72 + .parent_names = (const char *[]){ "pll8" }, 73 + .num_parents = 1, 74 + .ops = &clk_pll_vote_ops, 75 + }, 76 + }; 77 + 78 + static struct clk_pll pll14 = { 79 + .l_reg = 0x31c4, 80 + .m_reg = 0x31c8, 81 + .n_reg = 0x31cc, 82 + .config_reg = 0x31d4, 83 + .mode_reg = 0x31c0, 84 + .status_reg = 0x31d8, 85 + .status_bit = 16, 86 + .clkr.hw.init = &(struct clk_init_data){ 87 + .name = "pll14", 88 + .parent_names = (const char *[]){ "pxo" }, 89 + .num_parents = 1, 90 + .ops = &clk_pll_ops, 91 + }, 92 + }; 93 + 94 + static struct clk_regmap pll14_vote = { 95 + .enable_reg = 0x34c0, 96 + .enable_mask = BIT(14), 97 + .hw.init = &(struct clk_init_data){ 98 + .name = "pll14_vote", 99 + .parent_names = (const char *[]){ "pll14" }, 100 + .num_parents = 1, 101 + .ops = &clk_pll_vote_ops, 102 + }, 103 + }; 104 + 105 + #define P_PXO 0 106 + #define P_PLL8 1 107 + #define P_PLL3 1 108 + #define P_PLL0 2 109 + #define P_CXO 2 110 + 111 + static const u8 gcc_pxo_pll8_map[] = { 112 + [P_PXO] = 0, 113 + [P_PLL8] = 3, 114 + }; 115 + 116 + static const char *gcc_pxo_pll8[] = { 117 + "pxo", 118 + "pll8_vote", 119 + }; 120 + 121 + static const u8 gcc_pxo_pll8_cxo_map[] = { 122 + [P_PXO] = 0, 123 + [P_PLL8] = 3, 124 + [P_CXO] = 5, 125 + }; 126 + 127 + static const char *gcc_pxo_pll8_cxo[] = { 128 + "pxo", 129 + "pll8_vote", 130 + "cxo", 131 + }; 132 + 133 + static const u8 gcc_pxo_pll3_map[] = { 134 + [P_PXO] = 0, 135 + [P_PLL3] = 1, 136 + }; 137 + 138 + static const u8 gcc_pxo_pll3_sata_map[] = { 139 + [P_PXO] = 0, 140 + [P_PLL3] = 6, 141 + }; 142 + 143 + static const char *gcc_pxo_pll3[] = { 144 + "pxo", 145 + "pll3", 146 + }; 147 + 148 + static const u8 gcc_pxo_pll8_pll0[] = { 149 + [P_PXO] = 0, 150 + [P_PLL8] = 3, 151 + [P_PLL0] = 2, 152 + }; 153 + 154 + static const char *gcc_pxo_pll8_pll0_map[] = { 155 + "pxo", 156 + "pll8_vote", 157 + "pll0", 158 + }; 159 + 160 + static struct freq_tbl clk_tbl_gsbi_uart[] = { 161 + { 1843200, P_PLL8, 2, 6, 625 }, 162 + { 3686400, P_PLL8, 2, 12, 625 }, 163 + { 7372800, P_PLL8, 2, 24, 625 }, 164 + { 14745600, P_PLL8, 2, 48, 625 }, 165 + { 16000000, P_PLL8, 4, 1, 6 }, 166 + { 24000000, P_PLL8, 4, 1, 4 }, 167 + { 32000000, P_PLL8, 4, 1, 3 }, 168 + { 40000000, P_PLL8, 1, 5, 48 }, 169 + { 46400000, P_PLL8, 1, 29, 240 }, 170 + { 48000000, P_PLL8, 4, 1, 2 }, 171 + { 51200000, P_PLL8, 1, 2, 15 }, 172 + { 56000000, P_PLL8, 1, 7, 48 }, 173 + { 58982400, P_PLL8, 1, 96, 625 }, 174 + { 64000000, P_PLL8, 2, 1, 3 }, 175 + { } 176 + }; 177 + 178 + static struct clk_rcg gsbi1_uart_src = { 179 + .ns_reg = 0x29d4, 180 + .md_reg = 0x29d0, 181 + .mn = { 182 + .mnctr_en_bit = 8, 183 + .mnctr_reset_bit = 7, 184 + .mnctr_mode_shift = 5, 185 + .n_val_shift = 16, 186 + .m_val_shift = 16, 187 + .width = 16, 188 + }, 189 + .p = { 190 + .pre_div_shift = 3, 191 + .pre_div_width = 2, 192 + }, 193 + .s = { 194 + .src_sel_shift = 0, 195 + .parent_map = gcc_pxo_pll8_map, 196 + }, 197 + .freq_tbl = clk_tbl_gsbi_uart, 198 + .clkr = { 199 + .enable_reg = 0x29d4, 200 + .enable_mask = BIT(11), 201 + .hw.init = &(struct clk_init_data){ 202 + .name = "gsbi1_uart_src", 203 + .parent_names = gcc_pxo_pll8, 204 + .num_parents = 2, 205 + .ops = &clk_rcg_ops, 206 + .flags = CLK_SET_PARENT_GATE, 207 + }, 208 + }, 209 + }; 210 + 211 + static struct clk_branch gsbi1_uart_clk = { 212 + .halt_reg = 0x2fcc, 213 + .halt_bit = 12, 214 + .clkr = { 215 + .enable_reg = 0x29d4, 216 + .enable_mask = BIT(9), 217 + .hw.init = &(struct clk_init_data){ 218 + .name = "gsbi1_uart_clk", 219 + .parent_names = (const char *[]){ 220 + "gsbi1_uart_src", 221 + }, 222 + .num_parents = 1, 223 + .ops = &clk_branch_ops, 224 + .flags = CLK_SET_RATE_PARENT, 225 + }, 226 + }, 227 + }; 228 + 229 + static struct clk_rcg gsbi2_uart_src = { 230 + .ns_reg = 0x29f4, 231 + .md_reg = 0x29f0, 232 + .mn = { 233 + .mnctr_en_bit = 8, 234 + .mnctr_reset_bit = 7, 235 + .mnctr_mode_shift = 5, 236 + .n_val_shift = 16, 237 + .m_val_shift = 16, 238 + .width = 16, 239 + }, 240 + .p = { 241 + .pre_div_shift = 3, 242 + .pre_div_width = 2, 243 + }, 244 + .s = { 245 + .src_sel_shift = 0, 246 + .parent_map = gcc_pxo_pll8_map, 247 + }, 248 + .freq_tbl = clk_tbl_gsbi_uart, 249 + .clkr = { 250 + .enable_reg = 0x29f4, 251 + .enable_mask = BIT(11), 252 + .hw.init = &(struct clk_init_data){ 253 + .name = "gsbi2_uart_src", 254 + .parent_names = gcc_pxo_pll8, 255 + .num_parents = 2, 256 + .ops = &clk_rcg_ops, 257 + .flags = CLK_SET_PARENT_GATE, 258 + }, 259 + }, 260 + }; 261 + 262 + static struct clk_branch gsbi2_uart_clk = { 263 + .halt_reg = 0x2fcc, 264 + .halt_bit = 8, 265 + .clkr = { 266 + .enable_reg = 0x29f4, 267 + .enable_mask = BIT(9), 268 + .hw.init = &(struct clk_init_data){ 269 + .name = "gsbi2_uart_clk", 270 + .parent_names = (const char *[]){ 271 + "gsbi2_uart_src", 272 + }, 273 + .num_parents = 1, 274 + .ops = &clk_branch_ops, 275 + .flags = CLK_SET_RATE_PARENT, 276 + }, 277 + }, 278 + }; 279 + 280 + static struct clk_rcg gsbi4_uart_src = { 281 + .ns_reg = 0x2a34, 282 + .md_reg = 0x2a30, 283 + .mn = { 284 + .mnctr_en_bit = 8, 285 + .mnctr_reset_bit = 7, 286 + .mnctr_mode_shift = 5, 287 + .n_val_shift = 16, 288 + .m_val_shift = 16, 289 + .width = 16, 290 + }, 291 + .p = { 292 + .pre_div_shift = 3, 293 + .pre_div_width = 2, 294 + }, 295 + .s = { 296 + .src_sel_shift = 0, 297 + .parent_map = gcc_pxo_pll8_map, 298 + }, 299 + .freq_tbl = clk_tbl_gsbi_uart, 300 + .clkr = { 301 + .enable_reg = 0x2a34, 302 + .enable_mask = BIT(11), 303 + .hw.init = &(struct clk_init_data){ 304 + .name = "gsbi4_uart_src", 305 + .parent_names = gcc_pxo_pll8, 306 + .num_parents = 2, 307 + .ops = &clk_rcg_ops, 308 + .flags = CLK_SET_PARENT_GATE, 309 + }, 310 + }, 311 + }; 312 + 313 + static struct clk_branch gsbi4_uart_clk = { 314 + .halt_reg = 0x2fd0, 315 + .halt_bit = 26, 316 + .clkr = { 317 + .enable_reg = 0x2a34, 318 + .enable_mask = BIT(9), 319 + .hw.init = &(struct clk_init_data){ 320 + .name = "gsbi4_uart_clk", 321 + .parent_names = (const char *[]){ 322 + "gsbi4_uart_src", 323 + }, 324 + .num_parents = 1, 325 + .ops = &clk_branch_ops, 326 + .flags = CLK_SET_RATE_PARENT, 327 + }, 328 + }, 329 + }; 330 + 331 + static struct clk_rcg gsbi5_uart_src = { 332 + .ns_reg = 0x2a54, 333 + .md_reg = 0x2a50, 334 + .mn = { 335 + .mnctr_en_bit = 8, 336 + .mnctr_reset_bit = 7, 337 + .mnctr_mode_shift = 5, 338 + .n_val_shift = 16, 339 + .m_val_shift = 16, 340 + .width = 16, 341 + }, 342 + .p = { 343 + .pre_div_shift = 3, 344 + .pre_div_width = 2, 345 + }, 346 + .s = { 347 + .src_sel_shift = 0, 348 + .parent_map = gcc_pxo_pll8_map, 349 + }, 350 + .freq_tbl = clk_tbl_gsbi_uart, 351 + .clkr = { 352 + .enable_reg = 0x2a54, 353 + .enable_mask = BIT(11), 354 + .hw.init = &(struct clk_init_data){ 355 + .name = "gsbi5_uart_src", 356 + .parent_names = gcc_pxo_pll8, 357 + .num_parents = 2, 358 + .ops = &clk_rcg_ops, 359 + .flags = CLK_SET_PARENT_GATE, 360 + }, 361 + }, 362 + }; 363 + 364 + static struct clk_branch gsbi5_uart_clk = { 365 + .halt_reg = 0x2fd0, 366 + .halt_bit = 22, 367 + .clkr = { 368 + .enable_reg = 0x2a54, 369 + .enable_mask = BIT(9), 370 + .hw.init = &(struct clk_init_data){ 371 + .name = "gsbi5_uart_clk", 372 + .parent_names = (const char *[]){ 373 + "gsbi5_uart_src", 374 + }, 375 + .num_parents = 1, 376 + .ops = &clk_branch_ops, 377 + .flags = CLK_SET_RATE_PARENT, 378 + }, 379 + }, 380 + }; 381 + 382 + static struct clk_rcg gsbi6_uart_src = { 383 + .ns_reg = 0x2a74, 384 + .md_reg = 0x2a70, 385 + .mn = { 386 + .mnctr_en_bit = 8, 387 + .mnctr_reset_bit = 7, 388 + .mnctr_mode_shift = 5, 389 + .n_val_shift = 16, 390 + .m_val_shift = 16, 391 + .width = 16, 392 + }, 393 + .p = { 394 + .pre_div_shift = 3, 395 + .pre_div_width = 2, 396 + }, 397 + .s = { 398 + .src_sel_shift = 0, 399 + .parent_map = gcc_pxo_pll8_map, 400 + }, 401 + .freq_tbl = clk_tbl_gsbi_uart, 402 + .clkr = { 403 + .enable_reg = 0x2a74, 404 + .enable_mask = BIT(11), 405 + .hw.init = &(struct clk_init_data){ 406 + .name = "gsbi6_uart_src", 407 + .parent_names = gcc_pxo_pll8, 408 + .num_parents = 2, 409 + .ops = &clk_rcg_ops, 410 + .flags = CLK_SET_PARENT_GATE, 411 + }, 412 + }, 413 + }; 414 + 415 + static struct clk_branch gsbi6_uart_clk = { 416 + .halt_reg = 0x2fd0, 417 + .halt_bit = 18, 418 + .clkr = { 419 + .enable_reg = 0x2a74, 420 + .enable_mask = BIT(9), 421 + .hw.init = &(struct clk_init_data){ 422 + .name = "gsbi6_uart_clk", 423 + .parent_names = (const char *[]){ 424 + "gsbi6_uart_src", 425 + }, 426 + .num_parents = 1, 427 + .ops = &clk_branch_ops, 428 + .flags = CLK_SET_RATE_PARENT, 429 + }, 430 + }, 431 + }; 432 + 433 + static struct clk_rcg gsbi7_uart_src = { 434 + .ns_reg = 0x2a94, 435 + .md_reg = 0x2a90, 436 + .mn = { 437 + .mnctr_en_bit = 8, 438 + .mnctr_reset_bit = 7, 439 + .mnctr_mode_shift = 5, 440 + .n_val_shift = 16, 441 + .m_val_shift = 16, 442 + .width = 16, 443 + }, 444 + .p = { 445 + .pre_div_shift = 3, 446 + .pre_div_width = 2, 447 + }, 448 + .s = { 449 + .src_sel_shift = 0, 450 + .parent_map = gcc_pxo_pll8_map, 451 + }, 452 + .freq_tbl = clk_tbl_gsbi_uart, 453 + .clkr = { 454 + .enable_reg = 0x2a94, 455 + .enable_mask = BIT(11), 456 + .hw.init = &(struct clk_init_data){ 457 + .name = "gsbi7_uart_src", 458 + .parent_names = gcc_pxo_pll8, 459 + .num_parents = 2, 460 + .ops = &clk_rcg_ops, 461 + .flags = CLK_SET_PARENT_GATE, 462 + }, 463 + }, 464 + }; 465 + 466 + static struct clk_branch gsbi7_uart_clk = { 467 + .halt_reg = 0x2fd0, 468 + .halt_bit = 14, 469 + .clkr = { 470 + .enable_reg = 0x2a94, 471 + .enable_mask = BIT(9), 472 + .hw.init = &(struct clk_init_data){ 473 + .name = "gsbi7_uart_clk", 474 + .parent_names = (const char *[]){ 475 + "gsbi7_uart_src", 476 + }, 477 + .num_parents = 1, 478 + .ops = &clk_branch_ops, 479 + .flags = CLK_SET_RATE_PARENT, 480 + }, 481 + }, 482 + }; 483 + 484 + static struct freq_tbl clk_tbl_gsbi_qup[] = { 485 + { 1100000, P_PXO, 1, 2, 49 }, 486 + { 5400000, P_PXO, 1, 1, 5 }, 487 + { 10800000, P_PXO, 1, 2, 5 }, 488 + { 15060000, P_PLL8, 1, 2, 51 }, 489 + { 24000000, P_PLL8, 4, 1, 4 }, 490 + { 25600000, P_PLL8, 1, 1, 15 }, 491 + { 27000000, P_PXO, 1, 0, 0 }, 492 + { 48000000, P_PLL8, 4, 1, 2 }, 493 + { 51200000, P_PLL8, 1, 2, 15 }, 494 + { } 495 + }; 496 + 497 + static struct clk_rcg gsbi1_qup_src = { 498 + .ns_reg = 0x29cc, 499 + .md_reg = 0x29c8, 500 + .mn = { 501 + .mnctr_en_bit = 8, 502 + .mnctr_reset_bit = 7, 503 + .mnctr_mode_shift = 5, 504 + .n_val_shift = 16, 505 + .m_val_shift = 16, 506 + .width = 8, 507 + }, 508 + .p = { 509 + .pre_div_shift = 3, 510 + .pre_div_width = 2, 511 + }, 512 + .s = { 513 + .src_sel_shift = 0, 514 + .parent_map = gcc_pxo_pll8_map, 515 + }, 516 + .freq_tbl = clk_tbl_gsbi_qup, 517 + .clkr = { 518 + .enable_reg = 0x29cc, 519 + .enable_mask = BIT(11), 520 + .hw.init = &(struct clk_init_data){ 521 + .name = "gsbi1_qup_src", 522 + .parent_names = gcc_pxo_pll8, 523 + .num_parents = 2, 524 + .ops = &clk_rcg_ops, 525 + .flags = CLK_SET_PARENT_GATE, 526 + }, 527 + }, 528 + }; 529 + 530 + static struct clk_branch gsbi1_qup_clk = { 531 + .halt_reg = 0x2fcc, 532 + .halt_bit = 11, 533 + .clkr = { 534 + .enable_reg = 0x29cc, 535 + .enable_mask = BIT(9), 536 + .hw.init = &(struct clk_init_data){ 537 + .name = "gsbi1_qup_clk", 538 + .parent_names = (const char *[]){ "gsbi1_qup_src" }, 539 + .num_parents = 1, 540 + .ops = &clk_branch_ops, 541 + .flags = CLK_SET_RATE_PARENT, 542 + }, 543 + }, 544 + }; 545 + 546 + static struct clk_rcg gsbi2_qup_src = { 547 + .ns_reg = 0x29ec, 548 + .md_reg = 0x29e8, 549 + .mn = { 550 + .mnctr_en_bit = 8, 551 + .mnctr_reset_bit = 7, 552 + .mnctr_mode_shift = 5, 553 + .n_val_shift = 16, 554 + .m_val_shift = 16, 555 + .width = 8, 556 + }, 557 + .p = { 558 + .pre_div_shift = 3, 559 + .pre_div_width = 2, 560 + }, 561 + .s = { 562 + .src_sel_shift = 0, 563 + .parent_map = gcc_pxo_pll8_map, 564 + }, 565 + .freq_tbl = clk_tbl_gsbi_qup, 566 + .clkr = { 567 + .enable_reg = 0x29ec, 568 + .enable_mask = BIT(11), 569 + .hw.init = &(struct clk_init_data){ 570 + .name = "gsbi2_qup_src", 571 + .parent_names = gcc_pxo_pll8, 572 + .num_parents = 2, 573 + .ops = &clk_rcg_ops, 574 + .flags = CLK_SET_PARENT_GATE, 575 + }, 576 + }, 577 + }; 578 + 579 + static struct clk_branch gsbi2_qup_clk = { 580 + .halt_reg = 0x2fcc, 581 + .halt_bit = 6, 582 + .clkr = { 583 + .enable_reg = 0x29ec, 584 + .enable_mask = BIT(9), 585 + .hw.init = &(struct clk_init_data){ 586 + .name = "gsbi2_qup_clk", 587 + .parent_names = (const char *[]){ "gsbi2_qup_src" }, 588 + .num_parents = 1, 589 + .ops = &clk_branch_ops, 590 + .flags = CLK_SET_RATE_PARENT, 591 + }, 592 + }, 593 + }; 594 + 595 + static struct clk_rcg gsbi4_qup_src = { 596 + .ns_reg = 0x2a2c, 597 + .md_reg = 0x2a28, 598 + .mn = { 599 + .mnctr_en_bit = 8, 600 + .mnctr_reset_bit = 7, 601 + .mnctr_mode_shift = 5, 602 + .n_val_shift = 16, 603 + .m_val_shift = 16, 604 + .width = 8, 605 + }, 606 + .p = { 607 + .pre_div_shift = 3, 608 + .pre_div_width = 2, 609 + }, 610 + .s = { 611 + .src_sel_shift = 0, 612 + .parent_map = gcc_pxo_pll8_map, 613 + }, 614 + .freq_tbl = clk_tbl_gsbi_qup, 615 + .clkr = { 616 + .enable_reg = 0x2a2c, 617 + .enable_mask = BIT(11), 618 + .hw.init = &(struct clk_init_data){ 619 + .name = "gsbi4_qup_src", 620 + .parent_names = gcc_pxo_pll8, 621 + .num_parents = 2, 622 + .ops = &clk_rcg_ops, 623 + .flags = CLK_SET_PARENT_GATE, 624 + }, 625 + }, 626 + }; 627 + 628 + static struct clk_branch gsbi4_qup_clk = { 629 + .halt_reg = 0x2fd0, 630 + .halt_bit = 24, 631 + .clkr = { 632 + .enable_reg = 0x2a2c, 633 + .enable_mask = BIT(9), 634 + .hw.init = &(struct clk_init_data){ 635 + .name = "gsbi4_qup_clk", 636 + .parent_names = (const char *[]){ "gsbi4_qup_src" }, 637 + .num_parents = 1, 638 + .ops = &clk_branch_ops, 639 + .flags = CLK_SET_RATE_PARENT, 640 + }, 641 + }, 642 + }; 643 + 644 + static struct clk_rcg gsbi5_qup_src = { 645 + .ns_reg = 0x2a4c, 646 + .md_reg = 0x2a48, 647 + .mn = { 648 + .mnctr_en_bit = 8, 649 + .mnctr_reset_bit = 7, 650 + .mnctr_mode_shift = 5, 651 + .n_val_shift = 16, 652 + .m_val_shift = 16, 653 + .width = 8, 654 + }, 655 + .p = { 656 + .pre_div_shift = 3, 657 + .pre_div_width = 2, 658 + }, 659 + .s = { 660 + .src_sel_shift = 0, 661 + .parent_map = gcc_pxo_pll8_map, 662 + }, 663 + .freq_tbl = clk_tbl_gsbi_qup, 664 + .clkr = { 665 + .enable_reg = 0x2a4c, 666 + .enable_mask = BIT(11), 667 + .hw.init = &(struct clk_init_data){ 668 + .name = "gsbi5_qup_src", 669 + .parent_names = gcc_pxo_pll8, 670 + .num_parents = 2, 671 + .ops = &clk_rcg_ops, 672 + .flags = CLK_SET_PARENT_GATE, 673 + }, 674 + }, 675 + }; 676 + 677 + static struct clk_branch gsbi5_qup_clk = { 678 + .halt_reg = 0x2fd0, 679 + .halt_bit = 20, 680 + .clkr = { 681 + .enable_reg = 0x2a4c, 682 + .enable_mask = BIT(9), 683 + .hw.init = &(struct clk_init_data){ 684 + .name = "gsbi5_qup_clk", 685 + .parent_names = (const char *[]){ "gsbi5_qup_src" }, 686 + .num_parents = 1, 687 + .ops = &clk_branch_ops, 688 + .flags = CLK_SET_RATE_PARENT, 689 + }, 690 + }, 691 + }; 692 + 693 + static struct clk_rcg gsbi6_qup_src = { 694 + .ns_reg = 0x2a6c, 695 + .md_reg = 0x2a68, 696 + .mn = { 697 + .mnctr_en_bit = 8, 698 + .mnctr_reset_bit = 7, 699 + .mnctr_mode_shift = 5, 700 + .n_val_shift = 16, 701 + .m_val_shift = 16, 702 + .width = 8, 703 + }, 704 + .p = { 705 + .pre_div_shift = 3, 706 + .pre_div_width = 2, 707 + }, 708 + .s = { 709 + .src_sel_shift = 0, 710 + .parent_map = gcc_pxo_pll8_map, 711 + }, 712 + .freq_tbl = clk_tbl_gsbi_qup, 713 + .clkr = { 714 + .enable_reg = 0x2a6c, 715 + .enable_mask = BIT(11), 716 + .hw.init = &(struct clk_init_data){ 717 + .name = "gsbi6_qup_src", 718 + .parent_names = gcc_pxo_pll8, 719 + .num_parents = 2, 720 + .ops = &clk_rcg_ops, 721 + .flags = CLK_SET_PARENT_GATE, 722 + }, 723 + }, 724 + }; 725 + 726 + static struct clk_branch gsbi6_qup_clk = { 727 + .halt_reg = 0x2fd0, 728 + .halt_bit = 16, 729 + .clkr = { 730 + .enable_reg = 0x2a6c, 731 + .enable_mask = BIT(9), 732 + .hw.init = &(struct clk_init_data){ 733 + .name = "gsbi6_qup_clk", 734 + .parent_names = (const char *[]){ "gsbi6_qup_src" }, 735 + .num_parents = 1, 736 + .ops = &clk_branch_ops, 737 + .flags = CLK_SET_RATE_PARENT, 738 + }, 739 + }, 740 + }; 741 + 742 + static struct clk_rcg gsbi7_qup_src = { 743 + .ns_reg = 0x2a8c, 744 + .md_reg = 0x2a88, 745 + .mn = { 746 + .mnctr_en_bit = 8, 747 + .mnctr_reset_bit = 7, 748 + .mnctr_mode_shift = 5, 749 + .n_val_shift = 16, 750 + .m_val_shift = 16, 751 + .width = 8, 752 + }, 753 + .p = { 754 + .pre_div_shift = 3, 755 + .pre_div_width = 2, 756 + }, 757 + .s = { 758 + .src_sel_shift = 0, 759 + .parent_map = gcc_pxo_pll8_map, 760 + }, 761 + .freq_tbl = clk_tbl_gsbi_qup, 762 + .clkr = { 763 + .enable_reg = 0x2a8c, 764 + .enable_mask = BIT(11), 765 + .hw.init = &(struct clk_init_data){ 766 + .name = "gsbi7_qup_src", 767 + .parent_names = gcc_pxo_pll8, 768 + .num_parents = 2, 769 + .ops = &clk_rcg_ops, 770 + .flags = CLK_SET_PARENT_GATE, 771 + }, 772 + }, 773 + }; 774 + 775 + static struct clk_branch gsbi7_qup_clk = { 776 + .halt_reg = 0x2fd0, 777 + .halt_bit = 12, 778 + .clkr = { 779 + .enable_reg = 0x2a8c, 780 + .enable_mask = BIT(9), 781 + .hw.init = &(struct clk_init_data){ 782 + .name = "gsbi7_qup_clk", 783 + .parent_names = (const char *[]){ "gsbi7_qup_src" }, 784 + .num_parents = 1, 785 + .ops = &clk_branch_ops, 786 + .flags = CLK_SET_RATE_PARENT, 787 + }, 788 + }, 789 + }; 790 + 791 + static struct clk_branch gsbi1_h_clk = { 792 + .hwcg_reg = 0x29c0, 793 + .hwcg_bit = 6, 794 + .halt_reg = 0x2fcc, 795 + .halt_bit = 13, 796 + .clkr = { 797 + .enable_reg = 0x29c0, 798 + .enable_mask = BIT(4), 799 + .hw.init = &(struct clk_init_data){ 800 + .name = "gsbi1_h_clk", 801 + .ops = &clk_branch_ops, 802 + .flags = CLK_IS_ROOT, 803 + }, 804 + }, 805 + }; 806 + 807 + static struct clk_branch gsbi2_h_clk = { 808 + .hwcg_reg = 0x29e0, 809 + .hwcg_bit = 6, 810 + .halt_reg = 0x2fcc, 811 + .halt_bit = 9, 812 + .clkr = { 813 + .enable_reg = 0x29e0, 814 + .enable_mask = BIT(4), 815 + .hw.init = &(struct clk_init_data){ 816 + .name = "gsbi2_h_clk", 817 + .ops = &clk_branch_ops, 818 + .flags = CLK_IS_ROOT, 819 + }, 820 + }, 821 + }; 822 + 823 + static struct clk_branch gsbi4_h_clk = { 824 + .hwcg_reg = 0x2a20, 825 + .hwcg_bit = 6, 826 + .halt_reg = 0x2fd0, 827 + .halt_bit = 27, 828 + .clkr = { 829 + .enable_reg = 0x2a20, 830 + .enable_mask = BIT(4), 831 + .hw.init = &(struct clk_init_data){ 832 + .name = "gsbi4_h_clk", 833 + .ops = &clk_branch_ops, 834 + .flags = CLK_IS_ROOT, 835 + }, 836 + }, 837 + }; 838 + 839 + static struct clk_branch gsbi5_h_clk = { 840 + .hwcg_reg = 0x2a40, 841 + .hwcg_bit = 6, 842 + .halt_reg = 0x2fd0, 843 + .halt_bit = 23, 844 + .clkr = { 845 + .enable_reg = 0x2a40, 846 + .enable_mask = BIT(4), 847 + .hw.init = &(struct clk_init_data){ 848 + .name = "gsbi5_h_clk", 849 + .ops = &clk_branch_ops, 850 + .flags = CLK_IS_ROOT, 851 + }, 852 + }, 853 + }; 854 + 855 + static struct clk_branch gsbi6_h_clk = { 856 + .hwcg_reg = 0x2a60, 857 + .hwcg_bit = 6, 858 + .halt_reg = 0x2fd0, 859 + .halt_bit = 19, 860 + .clkr = { 861 + .enable_reg = 0x2a60, 862 + .enable_mask = BIT(4), 863 + .hw.init = &(struct clk_init_data){ 864 + .name = "gsbi6_h_clk", 865 + .ops = &clk_branch_ops, 866 + .flags = CLK_IS_ROOT, 867 + }, 868 + }, 869 + }; 870 + 871 + static struct clk_branch gsbi7_h_clk = { 872 + .hwcg_reg = 0x2a80, 873 + .hwcg_bit = 6, 874 + .halt_reg = 0x2fd0, 875 + .halt_bit = 15, 876 + .clkr = { 877 + .enable_reg = 0x2a80, 878 + .enable_mask = BIT(4), 879 + .hw.init = &(struct clk_init_data){ 880 + .name = "gsbi7_h_clk", 881 + .ops = &clk_branch_ops, 882 + .flags = CLK_IS_ROOT, 883 + }, 884 + }, 885 + }; 886 + 887 + static const struct freq_tbl clk_tbl_gp[] = { 888 + { 12500000, P_PXO, 2, 0, 0 }, 889 + { 25000000, P_PXO, 1, 0, 0 }, 890 + { 64000000, P_PLL8, 2, 1, 3 }, 891 + { 76800000, P_PLL8, 1, 1, 5 }, 892 + { 96000000, P_PLL8, 4, 0, 0 }, 893 + { 128000000, P_PLL8, 3, 0, 0 }, 894 + { 192000000, P_PLL8, 2, 0, 0 }, 895 + { } 896 + }; 897 + 898 + static struct clk_rcg gp0_src = { 899 + .ns_reg = 0x2d24, 900 + .md_reg = 0x2d00, 901 + .mn = { 902 + .mnctr_en_bit = 8, 903 + .mnctr_reset_bit = 7, 904 + .mnctr_mode_shift = 5, 905 + .n_val_shift = 16, 906 + .m_val_shift = 16, 907 + .width = 8, 908 + }, 909 + .p = { 910 + .pre_div_shift = 3, 911 + .pre_div_width = 2, 912 + }, 913 + .s = { 914 + .src_sel_shift = 0, 915 + .parent_map = gcc_pxo_pll8_cxo_map, 916 + }, 917 + .freq_tbl = clk_tbl_gp, 918 + .clkr = { 919 + .enable_reg = 0x2d24, 920 + .enable_mask = BIT(11), 921 + .hw.init = &(struct clk_init_data){ 922 + .name = "gp0_src", 923 + .parent_names = gcc_pxo_pll8_cxo, 924 + .num_parents = 3, 925 + .ops = &clk_rcg_ops, 926 + .flags = CLK_SET_PARENT_GATE, 927 + }, 928 + } 929 + }; 930 + 931 + static struct clk_branch gp0_clk = { 932 + .halt_reg = 0x2fd8, 933 + .halt_bit = 7, 934 + .clkr = { 935 + .enable_reg = 0x2d24, 936 + .enable_mask = BIT(9), 937 + .hw.init = &(struct clk_init_data){ 938 + .name = "gp0_clk", 939 + .parent_names = (const char *[]){ "gp0_src" }, 940 + .num_parents = 1, 941 + .ops = &clk_branch_ops, 942 + .flags = CLK_SET_RATE_PARENT, 943 + }, 944 + }, 945 + }; 946 + 947 + static struct clk_rcg gp1_src = { 948 + .ns_reg = 0x2d44, 949 + .md_reg = 0x2d40, 950 + .mn = { 951 + .mnctr_en_bit = 8, 952 + .mnctr_reset_bit = 7, 953 + .mnctr_mode_shift = 5, 954 + .n_val_shift = 16, 955 + .m_val_shift = 16, 956 + .width = 8, 957 + }, 958 + .p = { 959 + .pre_div_shift = 3, 960 + .pre_div_width = 2, 961 + }, 962 + .s = { 963 + .src_sel_shift = 0, 964 + .parent_map = gcc_pxo_pll8_cxo_map, 965 + }, 966 + .freq_tbl = clk_tbl_gp, 967 + .clkr = { 968 + .enable_reg = 0x2d44, 969 + .enable_mask = BIT(11), 970 + .hw.init = &(struct clk_init_data){ 971 + .name = "gp1_src", 972 + .parent_names = gcc_pxo_pll8_cxo, 973 + .num_parents = 3, 974 + .ops = &clk_rcg_ops, 975 + .flags = CLK_SET_RATE_GATE, 976 + }, 977 + } 978 + }; 979 + 980 + static struct clk_branch gp1_clk = { 981 + .halt_reg = 0x2fd8, 982 + .halt_bit = 6, 983 + .clkr = { 984 + .enable_reg = 0x2d44, 985 + .enable_mask = BIT(9), 986 + .hw.init = &(struct clk_init_data){ 987 + .name = "gp1_clk", 988 + .parent_names = (const char *[]){ "gp1_src" }, 989 + .num_parents = 1, 990 + .ops = &clk_branch_ops, 991 + .flags = CLK_SET_RATE_PARENT, 992 + }, 993 + }, 994 + }; 995 + 996 + static struct clk_rcg gp2_src = { 997 + .ns_reg = 0x2d64, 998 + .md_reg = 0x2d60, 999 + .mn = { 1000 + .mnctr_en_bit = 8, 1001 + .mnctr_reset_bit = 7, 1002 + .mnctr_mode_shift = 5, 1003 + .n_val_shift = 16, 1004 + .m_val_shift = 16, 1005 + .width = 8, 1006 + }, 1007 + .p = { 1008 + .pre_div_shift = 3, 1009 + .pre_div_width = 2, 1010 + }, 1011 + .s = { 1012 + .src_sel_shift = 0, 1013 + .parent_map = gcc_pxo_pll8_cxo_map, 1014 + }, 1015 + .freq_tbl = clk_tbl_gp, 1016 + .clkr = { 1017 + .enable_reg = 0x2d64, 1018 + .enable_mask = BIT(11), 1019 + .hw.init = &(struct clk_init_data){ 1020 + .name = "gp2_src", 1021 + .parent_names = gcc_pxo_pll8_cxo, 1022 + .num_parents = 3, 1023 + .ops = &clk_rcg_ops, 1024 + .flags = CLK_SET_RATE_GATE, 1025 + }, 1026 + } 1027 + }; 1028 + 1029 + static struct clk_branch gp2_clk = { 1030 + .halt_reg = 0x2fd8, 1031 + .halt_bit = 5, 1032 + .clkr = { 1033 + .enable_reg = 0x2d64, 1034 + .enable_mask = BIT(9), 1035 + .hw.init = &(struct clk_init_data){ 1036 + .name = "gp2_clk", 1037 + .parent_names = (const char *[]){ "gp2_src" }, 1038 + .num_parents = 1, 1039 + .ops = &clk_branch_ops, 1040 + .flags = CLK_SET_RATE_PARENT, 1041 + }, 1042 + }, 1043 + }; 1044 + 1045 + static struct clk_branch pmem_clk = { 1046 + .hwcg_reg = 0x25a0, 1047 + .hwcg_bit = 6, 1048 + .halt_reg = 0x2fc8, 1049 + .halt_bit = 20, 1050 + .clkr = { 1051 + .enable_reg = 0x25a0, 1052 + .enable_mask = BIT(4), 1053 + .hw.init = &(struct clk_init_data){ 1054 + .name = "pmem_clk", 1055 + .ops = &clk_branch_ops, 1056 + .flags = CLK_IS_ROOT, 1057 + }, 1058 + }, 1059 + }; 1060 + 1061 + static struct clk_rcg prng_src = { 1062 + .ns_reg = 0x2e80, 1063 + .p = { 1064 + .pre_div_shift = 3, 1065 + .pre_div_width = 4, 1066 + }, 1067 + .s = { 1068 + .src_sel_shift = 0, 1069 + .parent_map = gcc_pxo_pll8_map, 1070 + }, 1071 + .clkr = { 1072 + .hw.init = &(struct clk_init_data){ 1073 + .name = "prng_src", 1074 + .parent_names = gcc_pxo_pll8, 1075 + .num_parents = 2, 1076 + .ops = &clk_rcg_ops, 1077 + }, 1078 + }, 1079 + }; 1080 + 1081 + static struct clk_branch prng_clk = { 1082 + .halt_reg = 0x2fd8, 1083 + .halt_check = BRANCH_HALT_VOTED, 1084 + .halt_bit = 10, 1085 + .clkr = { 1086 + .enable_reg = 0x3080, 1087 + .enable_mask = BIT(10), 1088 + .hw.init = &(struct clk_init_data){ 1089 + .name = "prng_clk", 1090 + .parent_names = (const char *[]){ "prng_src" }, 1091 + .num_parents = 1, 1092 + .ops = &clk_branch_ops, 1093 + }, 1094 + }, 1095 + }; 1096 + 1097 + static const struct freq_tbl clk_tbl_sdc[] = { 1098 + { 144000, P_PXO, 5, 18,625 }, 1099 + { 400000, P_PLL8, 4, 1, 240 }, 1100 + { 16000000, P_PLL8, 4, 1, 6 }, 1101 + { 17070000, P_PLL8, 1, 2, 45 }, 1102 + { 20210000, P_PLL8, 1, 1, 19 }, 1103 + { 24000000, P_PLL8, 4, 1, 4 }, 1104 + { 48000000, P_PLL8, 4, 1, 2 }, 1105 + { 64000000, P_PLL8, 3, 1, 2 }, 1106 + { 96000000, P_PLL8, 4, 0, 0 }, 1107 + { 192000000, P_PLL8, 2, 0, 0 }, 1108 + { } 1109 + }; 1110 + 1111 + static struct clk_rcg sdc1_src = { 1112 + .ns_reg = 0x282c, 1113 + .md_reg = 0x2828, 1114 + .mn = { 1115 + .mnctr_en_bit = 8, 1116 + .mnctr_reset_bit = 7, 1117 + .mnctr_mode_shift = 5, 1118 + .n_val_shift = 16, 1119 + .m_val_shift = 16, 1120 + .width = 8, 1121 + }, 1122 + .p = { 1123 + .pre_div_shift = 3, 1124 + .pre_div_width = 2, 1125 + }, 1126 + .s = { 1127 + .src_sel_shift = 0, 1128 + .parent_map = gcc_pxo_pll8_map, 1129 + }, 1130 + .freq_tbl = clk_tbl_sdc, 1131 + .clkr = { 1132 + .enable_reg = 0x282c, 1133 + .enable_mask = BIT(11), 1134 + .hw.init = &(struct clk_init_data){ 1135 + .name = "sdc1_src", 1136 + .parent_names = gcc_pxo_pll8, 1137 + .num_parents = 2, 1138 + .ops = &clk_rcg_ops, 1139 + .flags = CLK_SET_RATE_GATE, 1140 + }, 1141 + } 1142 + }; 1143 + 1144 + static struct clk_branch sdc1_clk = { 1145 + .halt_reg = 0x2fc8, 1146 + .halt_bit = 6, 1147 + .clkr = { 1148 + .enable_reg = 0x282c, 1149 + .enable_mask = BIT(9), 1150 + .hw.init = &(struct clk_init_data){ 1151 + .name = "sdc1_clk", 1152 + .parent_names = (const char *[]){ "sdc1_src" }, 1153 + .num_parents = 1, 1154 + .ops = &clk_branch_ops, 1155 + .flags = CLK_SET_RATE_PARENT, 1156 + }, 1157 + }, 1158 + }; 1159 + 1160 + static struct clk_rcg sdc3_src = { 1161 + .ns_reg = 0x286c, 1162 + .md_reg = 0x2868, 1163 + .mn = { 1164 + .mnctr_en_bit = 8, 1165 + .mnctr_reset_bit = 7, 1166 + .mnctr_mode_shift = 5, 1167 + .n_val_shift = 16, 1168 + .m_val_shift = 16, 1169 + .width = 8, 1170 + }, 1171 + .p = { 1172 + .pre_div_shift = 3, 1173 + .pre_div_width = 2, 1174 + }, 1175 + .s = { 1176 + .src_sel_shift = 0, 1177 + .parent_map = gcc_pxo_pll8_map, 1178 + }, 1179 + .freq_tbl = clk_tbl_sdc, 1180 + .clkr = { 1181 + .enable_reg = 0x286c, 1182 + .enable_mask = BIT(11), 1183 + .hw.init = &(struct clk_init_data){ 1184 + .name = "sdc3_src", 1185 + .parent_names = gcc_pxo_pll8, 1186 + .num_parents = 2, 1187 + .ops = &clk_rcg_ops, 1188 + .flags = CLK_SET_RATE_GATE, 1189 + }, 1190 + } 1191 + }; 1192 + 1193 + static struct clk_branch sdc3_clk = { 1194 + .halt_reg = 0x2fc8, 1195 + .halt_bit = 4, 1196 + .clkr = { 1197 + .enable_reg = 0x286c, 1198 + .enable_mask = BIT(9), 1199 + .hw.init = &(struct clk_init_data){ 1200 + .name = "sdc3_clk", 1201 + .parent_names = (const char *[]){ "sdc3_src" }, 1202 + .num_parents = 1, 1203 + .ops = &clk_branch_ops, 1204 + .flags = CLK_SET_RATE_PARENT, 1205 + }, 1206 + }, 1207 + }; 1208 + 1209 + static struct clk_branch sdc1_h_clk = { 1210 + .hwcg_reg = 0x2820, 1211 + .hwcg_bit = 6, 1212 + .halt_reg = 0x2fc8, 1213 + .halt_bit = 11, 1214 + .clkr = { 1215 + .enable_reg = 0x2820, 1216 + .enable_mask = BIT(4), 1217 + .hw.init = &(struct clk_init_data){ 1218 + .name = "sdc1_h_clk", 1219 + .ops = &clk_branch_ops, 1220 + .flags = CLK_IS_ROOT, 1221 + }, 1222 + }, 1223 + }; 1224 + 1225 + static struct clk_branch sdc3_h_clk = { 1226 + .hwcg_reg = 0x2860, 1227 + .hwcg_bit = 6, 1228 + .halt_reg = 0x2fc8, 1229 + .halt_bit = 9, 1230 + .clkr = { 1231 + .enable_reg = 0x2860, 1232 + .enable_mask = BIT(4), 1233 + .hw.init = &(struct clk_init_data){ 1234 + .name = "sdc3_h_clk", 1235 + .ops = &clk_branch_ops, 1236 + .flags = CLK_IS_ROOT, 1237 + }, 1238 + }, 1239 + }; 1240 + 1241 + static const struct freq_tbl clk_tbl_tsif_ref[] = { 1242 + { 105000, P_PXO, 1, 1, 256 }, 1243 + { } 1244 + }; 1245 + 1246 + static struct clk_rcg tsif_ref_src = { 1247 + .ns_reg = 0x2710, 1248 + .md_reg = 0x270c, 1249 + .mn = { 1250 + .mnctr_en_bit = 8, 1251 + .mnctr_reset_bit = 7, 1252 + .mnctr_mode_shift = 5, 1253 + .n_val_shift = 16, 1254 + .m_val_shift = 16, 1255 + .width = 16, 1256 + }, 1257 + .p = { 1258 + .pre_div_shift = 3, 1259 + .pre_div_width = 2, 1260 + }, 1261 + .s = { 1262 + .src_sel_shift = 0, 1263 + .parent_map = gcc_pxo_pll8_map, 1264 + }, 1265 + .freq_tbl = clk_tbl_tsif_ref, 1266 + .clkr = { 1267 + .enable_reg = 0x2710, 1268 + .enable_mask = BIT(11), 1269 + .hw.init = &(struct clk_init_data){ 1270 + .name = "tsif_ref_src", 1271 + .parent_names = gcc_pxo_pll8, 1272 + .num_parents = 2, 1273 + .ops = &clk_rcg_ops, 1274 + .flags = CLK_SET_RATE_GATE, 1275 + }, 1276 + } 1277 + }; 1278 + 1279 + static struct clk_branch tsif_ref_clk = { 1280 + .halt_reg = 0x2fd4, 1281 + .halt_bit = 5, 1282 + .clkr = { 1283 + .enable_reg = 0x2710, 1284 + .enable_mask = BIT(9), 1285 + .hw.init = &(struct clk_init_data){ 1286 + .name = "tsif_ref_clk", 1287 + .parent_names = (const char *[]){ "tsif_ref_src" }, 1288 + .num_parents = 1, 1289 + .ops = &clk_branch_ops, 1290 + .flags = CLK_SET_RATE_PARENT, 1291 + }, 1292 + }, 1293 + }; 1294 + 1295 + static struct clk_branch tsif_h_clk = { 1296 + .hwcg_reg = 0x2700, 1297 + .hwcg_bit = 6, 1298 + .halt_reg = 0x2fd4, 1299 + .halt_bit = 7, 1300 + .clkr = { 1301 + .enable_reg = 0x2700, 1302 + .enable_mask = BIT(4), 1303 + .hw.init = &(struct clk_init_data){ 1304 + .name = "tsif_h_clk", 1305 + .ops = &clk_branch_ops, 1306 + .flags = CLK_IS_ROOT, 1307 + }, 1308 + }, 1309 + }; 1310 + 1311 + static struct clk_branch dma_bam_h_clk = { 1312 + .hwcg_reg = 0x25c0, 1313 + .hwcg_bit = 6, 1314 + .halt_reg = 0x2fc8, 1315 + .halt_bit = 12, 1316 + .clkr = { 1317 + .enable_reg = 0x25c0, 1318 + .enable_mask = BIT(4), 1319 + .hw.init = &(struct clk_init_data){ 1320 + .name = "dma_bam_h_clk", 1321 + .ops = &clk_branch_ops, 1322 + .flags = CLK_IS_ROOT, 1323 + }, 1324 + }, 1325 + }; 1326 + 1327 + static struct clk_branch adm0_clk = { 1328 + .halt_reg = 0x2fdc, 1329 + .halt_check = BRANCH_HALT_VOTED, 1330 + .halt_bit = 12, 1331 + .clkr = { 1332 + .enable_reg = 0x3080, 1333 + .enable_mask = BIT(2), 1334 + .hw.init = &(struct clk_init_data){ 1335 + .name = "adm0_clk", 1336 + .ops = &clk_branch_ops, 1337 + .flags = CLK_IS_ROOT, 1338 + }, 1339 + }, 1340 + }; 1341 + 1342 + static struct clk_branch adm0_pbus_clk = { 1343 + .hwcg_reg = 0x2208, 1344 + .hwcg_bit = 6, 1345 + .halt_reg = 0x2fdc, 1346 + .halt_check = BRANCH_HALT_VOTED, 1347 + .halt_bit = 11, 1348 + .clkr = { 1349 + .enable_reg = 0x3080, 1350 + .enable_mask = BIT(3), 1351 + .hw.init = &(struct clk_init_data){ 1352 + .name = "adm0_pbus_clk", 1353 + .ops = &clk_branch_ops, 1354 + .flags = CLK_IS_ROOT, 1355 + }, 1356 + }, 1357 + }; 1358 + 1359 + static struct clk_branch pmic_arb0_h_clk = { 1360 + .halt_reg = 0x2fd8, 1361 + .halt_check = BRANCH_HALT_VOTED, 1362 + .halt_bit = 22, 1363 + .clkr = { 1364 + .enable_reg = 0x3080, 1365 + .enable_mask = BIT(8), 1366 + .hw.init = &(struct clk_init_data){ 1367 + .name = "pmic_arb0_h_clk", 1368 + .ops = &clk_branch_ops, 1369 + .flags = CLK_IS_ROOT, 1370 + }, 1371 + }, 1372 + }; 1373 + 1374 + static struct clk_branch pmic_arb1_h_clk = { 1375 + .halt_reg = 0x2fd8, 1376 + .halt_check = BRANCH_HALT_VOTED, 1377 + .halt_bit = 21, 1378 + .clkr = { 1379 + .enable_reg = 0x3080, 1380 + .enable_mask = BIT(9), 1381 + .hw.init = &(struct clk_init_data){ 1382 + .name = "pmic_arb1_h_clk", 1383 + .ops = &clk_branch_ops, 1384 + .flags = CLK_IS_ROOT, 1385 + }, 1386 + }, 1387 + }; 1388 + 1389 + static struct clk_branch pmic_ssbi2_clk = { 1390 + .halt_reg = 0x2fd8, 1391 + .halt_check = BRANCH_HALT_VOTED, 1392 + .halt_bit = 23, 1393 + .clkr = { 1394 + .enable_reg = 0x3080, 1395 + .enable_mask = BIT(7), 1396 + .hw.init = &(struct clk_init_data){ 1397 + .name = "pmic_ssbi2_clk", 1398 + .ops = &clk_branch_ops, 1399 + .flags = CLK_IS_ROOT, 1400 + }, 1401 + }, 1402 + }; 1403 + 1404 + static struct clk_branch rpm_msg_ram_h_clk = { 1405 + .hwcg_reg = 0x27e0, 1406 + .hwcg_bit = 6, 1407 + .halt_reg = 0x2fd8, 1408 + .halt_check = BRANCH_HALT_VOTED, 1409 + .halt_bit = 12, 1410 + .clkr = { 1411 + .enable_reg = 0x3080, 1412 + .enable_mask = BIT(6), 1413 + .hw.init = &(struct clk_init_data){ 1414 + .name = "rpm_msg_ram_h_clk", 1415 + .ops = &clk_branch_ops, 1416 + .flags = CLK_IS_ROOT, 1417 + }, 1418 + }, 1419 + }; 1420 + 1421 + static const struct freq_tbl clk_tbl_pcie_ref[] = { 1422 + { 100000000, P_PLL3, 12, 0, 0 }, 1423 + { } 1424 + }; 1425 + 1426 + static struct clk_rcg pcie_ref_src = { 1427 + .ns_reg = 0x3860, 1428 + .p = { 1429 + .pre_div_shift = 3, 1430 + .pre_div_width = 4, 1431 + }, 1432 + .s = { 1433 + .src_sel_shift = 0, 1434 + .parent_map = gcc_pxo_pll3_map, 1435 + }, 1436 + .freq_tbl = clk_tbl_pcie_ref, 1437 + .clkr = { 1438 + .enable_reg = 0x3860, 1439 + .enable_mask = BIT(11), 1440 + .hw.init = &(struct clk_init_data){ 1441 + .name = "pcie_ref_src", 1442 + .parent_names = gcc_pxo_pll3, 1443 + .num_parents = 2, 1444 + .ops = &clk_rcg_ops, 1445 + .flags = CLK_SET_RATE_GATE, 1446 + }, 1447 + }, 1448 + }; 1449 + 1450 + static struct clk_branch pcie_ref_src_clk = { 1451 + .halt_reg = 0x2fdc, 1452 + .halt_bit = 30, 1453 + .clkr = { 1454 + .enable_reg = 0x3860, 1455 + .enable_mask = BIT(9), 1456 + .hw.init = &(struct clk_init_data){ 1457 + .name = "pcie_ref_src_clk", 1458 + .parent_names = (const char *[]){ "pcie_ref_src" }, 1459 + .num_parents = 1, 1460 + .ops = &clk_branch_ops, 1461 + .flags = CLK_SET_RATE_PARENT, 1462 + }, 1463 + }, 1464 + }; 1465 + 1466 + static struct clk_branch pcie_a_clk = { 1467 + .halt_reg = 0x2fc0, 1468 + .halt_bit = 13, 1469 + .clkr = { 1470 + .enable_reg = 0x22c0, 1471 + .enable_mask = BIT(4), 1472 + .hw.init = &(struct clk_init_data){ 1473 + .name = "pcie_a_clk", 1474 + .ops = &clk_branch_ops, 1475 + .flags = CLK_IS_ROOT, 1476 + }, 1477 + }, 1478 + }; 1479 + 1480 + static struct clk_branch pcie_aux_clk = { 1481 + .halt_reg = 0x2fdc, 1482 + .halt_bit = 31, 1483 + .clkr = { 1484 + .enable_reg = 0x22c8, 1485 + .enable_mask = BIT(4), 1486 + .hw.init = &(struct clk_init_data){ 1487 + .name = "pcie_aux_clk", 1488 + .ops = &clk_branch_ops, 1489 + .flags = CLK_IS_ROOT, 1490 + }, 1491 + }, 1492 + }; 1493 + 1494 + static struct clk_branch pcie_h_clk = { 1495 + .halt_reg = 0x2fd4, 1496 + .halt_bit = 8, 1497 + .clkr = { 1498 + .enable_reg = 0x22cc, 1499 + .enable_mask = BIT(4), 1500 + .hw.init = &(struct clk_init_data){ 1501 + .name = "pcie_h_clk", 1502 + .ops = &clk_branch_ops, 1503 + .flags = CLK_IS_ROOT, 1504 + }, 1505 + }, 1506 + }; 1507 + 1508 + static struct clk_branch pcie_phy_clk = { 1509 + .halt_reg = 0x2fdc, 1510 + .halt_bit = 29, 1511 + .clkr = { 1512 + .enable_reg = 0x22d0, 1513 + .enable_mask = BIT(4), 1514 + .hw.init = &(struct clk_init_data){ 1515 + .name = "pcie_phy_clk", 1516 + .ops = &clk_branch_ops, 1517 + .flags = CLK_IS_ROOT, 1518 + }, 1519 + }, 1520 + }; 1521 + 1522 + static struct clk_rcg pcie1_ref_src = { 1523 + .ns_reg = 0x3aa0, 1524 + .p = { 1525 + .pre_div_shift = 3, 1526 + .pre_div_width = 4, 1527 + }, 1528 + .s = { 1529 + .src_sel_shift = 0, 1530 + .parent_map = gcc_pxo_pll3_map, 1531 + }, 1532 + .freq_tbl = clk_tbl_pcie_ref, 1533 + .clkr = { 1534 + .enable_reg = 0x3aa0, 1535 + .enable_mask = BIT(11), 1536 + .hw.init = &(struct clk_init_data){ 1537 + .name = "pcie1_ref_src", 1538 + .parent_names = gcc_pxo_pll3, 1539 + .num_parents = 2, 1540 + .ops = &clk_rcg_ops, 1541 + .flags = CLK_SET_RATE_GATE, 1542 + }, 1543 + }, 1544 + }; 1545 + 1546 + static struct clk_branch pcie1_ref_src_clk = { 1547 + .halt_reg = 0x2fdc, 1548 + .halt_bit = 27, 1549 + .clkr = { 1550 + .enable_reg = 0x3aa0, 1551 + .enable_mask = BIT(9), 1552 + .hw.init = &(struct clk_init_data){ 1553 + .name = "pcie1_ref_src_clk", 1554 + .parent_names = (const char *[]){ "pcie1_ref_src" }, 1555 + .num_parents = 1, 1556 + .ops = &clk_branch_ops, 1557 + .flags = CLK_SET_RATE_PARENT, 1558 + }, 1559 + }, 1560 + }; 1561 + 1562 + static struct clk_branch pcie1_a_clk = { 1563 + .halt_reg = 0x2fc0, 1564 + .halt_bit = 10, 1565 + .clkr = { 1566 + .enable_reg = 0x3a80, 1567 + .enable_mask = BIT(4), 1568 + .hw.init = &(struct clk_init_data){ 1569 + .name = "pcie1_a_clk", 1570 + .ops = &clk_branch_ops, 1571 + .flags = CLK_IS_ROOT, 1572 + }, 1573 + }, 1574 + }; 1575 + 1576 + static struct clk_branch pcie1_aux_clk = { 1577 + .halt_reg = 0x2fdc, 1578 + .halt_bit = 28, 1579 + .clkr = { 1580 + .enable_reg = 0x3a88, 1581 + .enable_mask = BIT(4), 1582 + .hw.init = &(struct clk_init_data){ 1583 + .name = "pcie1_aux_clk", 1584 + .ops = &clk_branch_ops, 1585 + .flags = CLK_IS_ROOT, 1586 + }, 1587 + }, 1588 + }; 1589 + 1590 + static struct clk_branch pcie1_h_clk = { 1591 + .halt_reg = 0x2fd4, 1592 + .halt_bit = 9, 1593 + .clkr = { 1594 + .enable_reg = 0x3a8c, 1595 + .enable_mask = BIT(4), 1596 + .hw.init = &(struct clk_init_data){ 1597 + .name = "pcie1_h_clk", 1598 + .ops = &clk_branch_ops, 1599 + .flags = CLK_IS_ROOT, 1600 + }, 1601 + }, 1602 + }; 1603 + 1604 + static struct clk_branch pcie1_phy_clk = { 1605 + .halt_reg = 0x2fdc, 1606 + .halt_bit = 26, 1607 + .clkr = { 1608 + .enable_reg = 0x3a90, 1609 + .enable_mask = BIT(4), 1610 + .hw.init = &(struct clk_init_data){ 1611 + .name = "pcie1_phy_clk", 1612 + .ops = &clk_branch_ops, 1613 + .flags = CLK_IS_ROOT, 1614 + }, 1615 + }, 1616 + }; 1617 + 1618 + static struct clk_rcg pcie2_ref_src = { 1619 + .ns_reg = 0x3ae0, 1620 + .p = { 1621 + .pre_div_shift = 3, 1622 + .pre_div_width = 4, 1623 + }, 1624 + .s = { 1625 + .src_sel_shift = 0, 1626 + .parent_map = gcc_pxo_pll3_map, 1627 + }, 1628 + .freq_tbl = clk_tbl_pcie_ref, 1629 + .clkr = { 1630 + .enable_reg = 0x3ae0, 1631 + .enable_mask = BIT(11), 1632 + .hw.init = &(struct clk_init_data){ 1633 + .name = "pcie2_ref_src", 1634 + .parent_names = gcc_pxo_pll3, 1635 + .num_parents = 2, 1636 + .ops = &clk_rcg_ops, 1637 + .flags = CLK_SET_RATE_GATE, 1638 + }, 1639 + }, 1640 + }; 1641 + 1642 + static struct clk_branch pcie2_ref_src_clk = { 1643 + .halt_reg = 0x2fdc, 1644 + .halt_bit = 24, 1645 + .clkr = { 1646 + .enable_reg = 0x3ae0, 1647 + .enable_mask = BIT(9), 1648 + .hw.init = &(struct clk_init_data){ 1649 + .name = "pcie2_ref_src_clk", 1650 + .parent_names = (const char *[]){ "pcie2_ref_src" }, 1651 + .num_parents = 1, 1652 + .ops = &clk_branch_ops, 1653 + .flags = CLK_SET_RATE_PARENT, 1654 + }, 1655 + }, 1656 + }; 1657 + 1658 + static struct clk_branch pcie2_a_clk = { 1659 + .halt_reg = 0x2fc0, 1660 + .halt_bit = 9, 1661 + .clkr = { 1662 + .enable_reg = 0x3ac0, 1663 + .enable_mask = BIT(4), 1664 + .hw.init = &(struct clk_init_data){ 1665 + .name = "pcie2_a_clk", 1666 + .ops = &clk_branch_ops, 1667 + .flags = CLK_IS_ROOT, 1668 + }, 1669 + }, 1670 + }; 1671 + 1672 + static struct clk_branch pcie2_aux_clk = { 1673 + .halt_reg = 0x2fdc, 1674 + .halt_bit = 25, 1675 + .clkr = { 1676 + .enable_reg = 0x3ac8, 1677 + .enable_mask = BIT(4), 1678 + .hw.init = &(struct clk_init_data){ 1679 + .name = "pcie2_aux_clk", 1680 + .ops = &clk_branch_ops, 1681 + .flags = CLK_IS_ROOT, 1682 + }, 1683 + }, 1684 + }; 1685 + 1686 + static struct clk_branch pcie2_h_clk = { 1687 + .halt_reg = 0x2fd4, 1688 + .halt_bit = 10, 1689 + .clkr = { 1690 + .enable_reg = 0x3acc, 1691 + .enable_mask = BIT(4), 1692 + .hw.init = &(struct clk_init_data){ 1693 + .name = "pcie2_h_clk", 1694 + .ops = &clk_branch_ops, 1695 + .flags = CLK_IS_ROOT, 1696 + }, 1697 + }, 1698 + }; 1699 + 1700 + static struct clk_branch pcie2_phy_clk = { 1701 + .halt_reg = 0x2fdc, 1702 + .halt_bit = 23, 1703 + .clkr = { 1704 + .enable_reg = 0x3ad0, 1705 + .enable_mask = BIT(4), 1706 + .hw.init = &(struct clk_init_data){ 1707 + .name = "pcie2_phy_clk", 1708 + .ops = &clk_branch_ops, 1709 + .flags = CLK_IS_ROOT, 1710 + }, 1711 + }, 1712 + }; 1713 + 1714 + static const struct freq_tbl clk_tbl_sata_ref[] = { 1715 + { 100000000, P_PLL3, 12, 0, 0 }, 1716 + { } 1717 + }; 1718 + 1719 + static struct clk_rcg sata_ref_src = { 1720 + .ns_reg = 0x2c08, 1721 + .p = { 1722 + .pre_div_shift = 3, 1723 + .pre_div_width = 4, 1724 + }, 1725 + .s = { 1726 + .src_sel_shift = 0, 1727 + .parent_map = gcc_pxo_pll3_sata_map, 1728 + }, 1729 + .freq_tbl = clk_tbl_sata_ref, 1730 + .clkr = { 1731 + .enable_reg = 0x2c08, 1732 + .enable_mask = BIT(7), 1733 + .hw.init = &(struct clk_init_data){ 1734 + .name = "sata_ref_src", 1735 + .parent_names = gcc_pxo_pll3, 1736 + .num_parents = 2, 1737 + .ops = &clk_rcg_ops, 1738 + .flags = CLK_SET_RATE_GATE, 1739 + }, 1740 + }, 1741 + }; 1742 + 1743 + static struct clk_branch sata_rxoob_clk = { 1744 + .halt_reg = 0x2fdc, 1745 + .halt_bit = 20, 1746 + .clkr = { 1747 + .enable_reg = 0x2c0c, 1748 + .enable_mask = BIT(4), 1749 + .hw.init = &(struct clk_init_data){ 1750 + .name = "sata_rxoob_clk", 1751 + .parent_names = (const char *[]){ "sata_ref_src" }, 1752 + .num_parents = 1, 1753 + .ops = &clk_branch_ops, 1754 + .flags = CLK_SET_RATE_PARENT, 1755 + }, 1756 + }, 1757 + }; 1758 + 1759 + static struct clk_branch sata_pmalive_clk = { 1760 + .halt_reg = 0x2fdc, 1761 + .halt_bit = 19, 1762 + .clkr = { 1763 + .enable_reg = 0x2c10, 1764 + .enable_mask = BIT(4), 1765 + .hw.init = &(struct clk_init_data){ 1766 + .name = "sata_pmalive_clk", 1767 + .parent_names = (const char *[]){ "sata_ref_src" }, 1768 + .num_parents = 1, 1769 + .ops = &clk_branch_ops, 1770 + .flags = CLK_SET_RATE_PARENT, 1771 + }, 1772 + }, 1773 + }; 1774 + 1775 + static struct clk_branch sata_phy_ref_clk = { 1776 + .halt_reg = 0x2fdc, 1777 + .halt_bit = 18, 1778 + .clkr = { 1779 + .enable_reg = 0x2c14, 1780 + .enable_mask = BIT(4), 1781 + .hw.init = &(struct clk_init_data){ 1782 + .name = "sata_phy_ref_clk", 1783 + .parent_names = (const char *[]){ "pxo" }, 1784 + .num_parents = 1, 1785 + .ops = &clk_branch_ops, 1786 + }, 1787 + }, 1788 + }; 1789 + 1790 + static struct clk_branch sata_a_clk = { 1791 + .halt_reg = 0x2fc0, 1792 + .halt_bit = 12, 1793 + .clkr = { 1794 + .enable_reg = 0x2c20, 1795 + .enable_mask = BIT(4), 1796 + .hw.init = &(struct clk_init_data){ 1797 + .name = "sata_a_clk", 1798 + .ops = &clk_branch_ops, 1799 + .flags = CLK_IS_ROOT, 1800 + }, 1801 + }, 1802 + }; 1803 + 1804 + static struct clk_branch sata_h_clk = { 1805 + .halt_reg = 0x2fdc, 1806 + .halt_bit = 21, 1807 + .clkr = { 1808 + .enable_reg = 0x2c00, 1809 + .enable_mask = BIT(4), 1810 + .hw.init = &(struct clk_init_data){ 1811 + .name = "sata_h_clk", 1812 + .ops = &clk_branch_ops, 1813 + .flags = CLK_IS_ROOT, 1814 + }, 1815 + }, 1816 + }; 1817 + 1818 + static struct clk_branch sfab_sata_s_h_clk = { 1819 + .halt_reg = 0x2fc4, 1820 + .halt_bit = 14, 1821 + .clkr = { 1822 + .enable_reg = 0x2480, 1823 + .enable_mask = BIT(4), 1824 + .hw.init = &(struct clk_init_data){ 1825 + .name = "sfab_sata_s_h_clk", 1826 + .ops = &clk_branch_ops, 1827 + .flags = CLK_IS_ROOT, 1828 + }, 1829 + }, 1830 + }; 1831 + 1832 + static struct clk_branch sata_phy_cfg_clk = { 1833 + .halt_reg = 0x2fcc, 1834 + .halt_bit = 14, 1835 + .clkr = { 1836 + .enable_reg = 0x2c40, 1837 + .enable_mask = BIT(4), 1838 + .hw.init = &(struct clk_init_data){ 1839 + .name = "sata_phy_cfg_clk", 1840 + .ops = &clk_branch_ops, 1841 + .flags = CLK_IS_ROOT, 1842 + }, 1843 + }, 1844 + }; 1845 + 1846 + static const struct freq_tbl clk_tbl_usb30_master[] = { 1847 + { 125000000, P_PLL0, 1, 5, 32 }, 1848 + { } 1849 + }; 1850 + 1851 + static struct clk_rcg usb30_master_clk_src = { 1852 + .ns_reg = 0x3b2c, 1853 + .md_reg = 0x3b28, 1854 + .mn = { 1855 + .mnctr_en_bit = 8, 1856 + .mnctr_reset_bit = 7, 1857 + .mnctr_mode_shift = 5, 1858 + .n_val_shift = 16, 1859 + .m_val_shift = 16, 1860 + .width = 8, 1861 + }, 1862 + .p = { 1863 + .pre_div_shift = 3, 1864 + .pre_div_width = 2, 1865 + }, 1866 + .s = { 1867 + .src_sel_shift = 0, 1868 + .parent_map = gcc_pxo_pll8_pll0, 1869 + }, 1870 + .freq_tbl = clk_tbl_usb30_master, 1871 + .clkr = { 1872 + .enable_reg = 0x3b2c, 1873 + .enable_mask = BIT(11), 1874 + .hw.init = &(struct clk_init_data){ 1875 + .name = "usb30_master_ref_src", 1876 + .parent_names = gcc_pxo_pll8_pll0_map, 1877 + .num_parents = 3, 1878 + .ops = &clk_rcg_ops, 1879 + .flags = CLK_SET_RATE_GATE, 1880 + }, 1881 + }, 1882 + }; 1883 + 1884 + static struct clk_branch usb30_0_branch_clk = { 1885 + .halt_reg = 0x2fc4, 1886 + .halt_bit = 22, 1887 + .clkr = { 1888 + .enable_reg = 0x3b24, 1889 + .enable_mask = BIT(4), 1890 + .hw.init = &(struct clk_init_data){ 1891 + .name = "usb30_0_branch_clk", 1892 + .parent_names = (const char *[]){ "usb30_master_ref_src", }, 1893 + .num_parents = 1, 1894 + .ops = &clk_branch_ops, 1895 + .flags = CLK_SET_RATE_PARENT, 1896 + }, 1897 + }, 1898 + }; 1899 + 1900 + static struct clk_branch usb30_1_branch_clk = { 1901 + .halt_reg = 0x2fc4, 1902 + .halt_bit = 17, 1903 + .clkr = { 1904 + .enable_reg = 0x3b34, 1905 + .enable_mask = BIT(4), 1906 + .hw.init = &(struct clk_init_data){ 1907 + .name = "usb30_1_branch_clk", 1908 + .parent_names = (const char *[]){ "usb30_master_ref_src", }, 1909 + .num_parents = 1, 1910 + .ops = &clk_branch_ops, 1911 + .flags = CLK_SET_RATE_PARENT, 1912 + }, 1913 + }, 1914 + }; 1915 + 1916 + static const struct freq_tbl clk_tbl_usb30_utmi[] = { 1917 + { 60000000, P_PLL8, 1, 5, 32 }, 1918 + { } 1919 + }; 1920 + 1921 + static struct clk_rcg usb30_utmi_clk = { 1922 + .ns_reg = 0x3b44, 1923 + .md_reg = 0x3b40, 1924 + .mn = { 1925 + .mnctr_en_bit = 8, 1926 + .mnctr_reset_bit = 7, 1927 + .mnctr_mode_shift = 5, 1928 + .n_val_shift = 16, 1929 + .m_val_shift = 16, 1930 + .width = 8, 1931 + }, 1932 + .p = { 1933 + .pre_div_shift = 3, 1934 + .pre_div_width = 2, 1935 + }, 1936 + .s = { 1937 + .src_sel_shift = 0, 1938 + .parent_map = gcc_pxo_pll8_pll0, 1939 + }, 1940 + .freq_tbl = clk_tbl_usb30_utmi, 1941 + .clkr = { 1942 + .enable_reg = 0x3b44, 1943 + .enable_mask = BIT(11), 1944 + .hw.init = &(struct clk_init_data){ 1945 + .name = "usb30_utmi_clk", 1946 + .parent_names = gcc_pxo_pll8_pll0_map, 1947 + .num_parents = 3, 1948 + .ops = &clk_rcg_ops, 1949 + .flags = CLK_SET_RATE_GATE, 1950 + }, 1951 + }, 1952 + }; 1953 + 1954 + static struct clk_branch usb30_0_utmi_clk_ctl = { 1955 + .halt_reg = 0x2fc4, 1956 + .halt_bit = 21, 1957 + .clkr = { 1958 + .enable_reg = 0x3b48, 1959 + .enable_mask = BIT(4), 1960 + .hw.init = &(struct clk_init_data){ 1961 + .name = "usb30_0_utmi_clk_ctl", 1962 + .parent_names = (const char *[]){ "usb30_utmi_clk", }, 1963 + .num_parents = 1, 1964 + .ops = &clk_branch_ops, 1965 + .flags = CLK_SET_RATE_PARENT, 1966 + }, 1967 + }, 1968 + }; 1969 + 1970 + static struct clk_branch usb30_1_utmi_clk_ctl = { 1971 + .halt_reg = 0x2fc4, 1972 + .halt_bit = 15, 1973 + .clkr = { 1974 + .enable_reg = 0x3b4c, 1975 + .enable_mask = BIT(4), 1976 + .hw.init = &(struct clk_init_data){ 1977 + .name = "usb30_1_utmi_clk_ctl", 1978 + .parent_names = (const char *[]){ "usb30_utmi_clk", }, 1979 + .num_parents = 1, 1980 + .ops = &clk_branch_ops, 1981 + .flags = CLK_SET_RATE_PARENT, 1982 + }, 1983 + }, 1984 + }; 1985 + 1986 + static const struct freq_tbl clk_tbl_usb[] = { 1987 + { 60000000, P_PLL8, 1, 5, 32 }, 1988 + { } 1989 + }; 1990 + 1991 + static struct clk_rcg usb_hs1_xcvr_clk_src = { 1992 + .ns_reg = 0x290C, 1993 + .md_reg = 0x2908, 1994 + .mn = { 1995 + .mnctr_en_bit = 8, 1996 + .mnctr_reset_bit = 7, 1997 + .mnctr_mode_shift = 5, 1998 + .n_val_shift = 16, 1999 + .m_val_shift = 16, 2000 + .width = 8, 2001 + }, 2002 + .p = { 2003 + .pre_div_shift = 3, 2004 + .pre_div_width = 2, 2005 + }, 2006 + .s = { 2007 + .src_sel_shift = 0, 2008 + .parent_map = gcc_pxo_pll8_pll0, 2009 + }, 2010 + .freq_tbl = clk_tbl_usb, 2011 + .clkr = { 2012 + .enable_reg = 0x2968, 2013 + .enable_mask = BIT(11), 2014 + .hw.init = &(struct clk_init_data){ 2015 + .name = "usb_hs1_xcvr_src", 2016 + .parent_names = gcc_pxo_pll8_pll0_map, 2017 + .num_parents = 3, 2018 + .ops = &clk_rcg_ops, 2019 + .flags = CLK_SET_RATE_GATE, 2020 + }, 2021 + }, 2022 + }; 2023 + 2024 + static struct clk_branch usb_hs1_xcvr_clk = { 2025 + .halt_reg = 0x2fcc, 2026 + .halt_bit = 17, 2027 + .clkr = { 2028 + .enable_reg = 0x290c, 2029 + .enable_mask = BIT(9), 2030 + .hw.init = &(struct clk_init_data){ 2031 + .name = "usb_hs1_xcvr_clk", 2032 + .parent_names = (const char *[]){ "usb_hs1_xcvr_src" }, 2033 + .num_parents = 1, 2034 + .ops = &clk_branch_ops, 2035 + .flags = CLK_SET_RATE_PARENT, 2036 + }, 2037 + }, 2038 + }; 2039 + 2040 + static struct clk_branch usb_hs1_h_clk = { 2041 + .hwcg_reg = 0x2900, 2042 + .hwcg_bit = 6, 2043 + .halt_reg = 0x2fc8, 2044 + .halt_bit = 1, 2045 + .clkr = { 2046 + .enable_reg = 0x2900, 2047 + .enable_mask = BIT(4), 2048 + .hw.init = &(struct clk_init_data){ 2049 + .name = "usb_hs1_h_clk", 2050 + .ops = &clk_branch_ops, 2051 + .flags = CLK_IS_ROOT, 2052 + }, 2053 + }, 2054 + }; 2055 + 2056 + static struct clk_rcg usb_fs1_xcvr_clk_src = { 2057 + .ns_reg = 0x2968, 2058 + .md_reg = 0x2964, 2059 + .mn = { 2060 + .mnctr_en_bit = 8, 2061 + .mnctr_reset_bit = 7, 2062 + .mnctr_mode_shift = 5, 2063 + .n_val_shift = 16, 2064 + .m_val_shift = 16, 2065 + .width = 8, 2066 + }, 2067 + .p = { 2068 + .pre_div_shift = 3, 2069 + .pre_div_width = 2, 2070 + }, 2071 + .s = { 2072 + .src_sel_shift = 0, 2073 + .parent_map = gcc_pxo_pll8_pll0, 2074 + }, 2075 + .freq_tbl = clk_tbl_usb, 2076 + .clkr = { 2077 + .enable_reg = 0x2968, 2078 + .enable_mask = BIT(11), 2079 + .hw.init = &(struct clk_init_data){ 2080 + .name = "usb_fs1_xcvr_src", 2081 + .parent_names = gcc_pxo_pll8_pll0_map, 2082 + .num_parents = 3, 2083 + .ops = &clk_rcg_ops, 2084 + .flags = CLK_SET_RATE_GATE, 2085 + }, 2086 + }, 2087 + }; 2088 + 2089 + static struct clk_branch usb_fs1_xcvr_clk = { 2090 + .halt_reg = 0x2fcc, 2091 + .halt_bit = 17, 2092 + .clkr = { 2093 + .enable_reg = 0x2968, 2094 + .enable_mask = BIT(9), 2095 + .hw.init = &(struct clk_init_data){ 2096 + .name = "usb_fs1_xcvr_clk", 2097 + .parent_names = (const char *[]){ "usb_fs1_xcvr_src", }, 2098 + .num_parents = 1, 2099 + .ops = &clk_branch_ops, 2100 + .flags = CLK_SET_RATE_PARENT, 2101 + }, 2102 + }, 2103 + }; 2104 + 2105 + static struct clk_branch usb_fs1_sys_clk = { 2106 + .halt_reg = 0x2fcc, 2107 + .halt_bit = 18, 2108 + .clkr = { 2109 + .enable_reg = 0x296c, 2110 + .enable_mask = BIT(4), 2111 + .hw.init = &(struct clk_init_data){ 2112 + .name = "usb_fs1_sys_clk", 2113 + .parent_names = (const char *[]){ "usb_fs1_xcvr_src", }, 2114 + .num_parents = 1, 2115 + .ops = &clk_branch_ops, 2116 + .flags = CLK_SET_RATE_PARENT, 2117 + }, 2118 + }, 2119 + }; 2120 + 2121 + static struct clk_branch usb_fs1_h_clk = { 2122 + .halt_reg = 0x2fcc, 2123 + .halt_bit = 19, 2124 + .clkr = { 2125 + .enable_reg = 0x2960, 2126 + .enable_mask = BIT(4), 2127 + .hw.init = &(struct clk_init_data){ 2128 + .name = "usb_fs1_h_clk", 2129 + .ops = &clk_branch_ops, 2130 + .flags = CLK_IS_ROOT, 2131 + }, 2132 + }, 2133 + }; 2134 + 2135 + static struct clk_regmap *gcc_ipq806x_clks[] = { 2136 + [PLL3] = &pll3.clkr, 2137 + [PLL8] = &pll8.clkr, 2138 + [PLL8_VOTE] = &pll8_vote, 2139 + [PLL14] = &pll14.clkr, 2140 + [PLL14_VOTE] = &pll14_vote, 2141 + [GSBI1_UART_SRC] = &gsbi1_uart_src.clkr, 2142 + [GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr, 2143 + [GSBI2_UART_SRC] = &gsbi2_uart_src.clkr, 2144 + [GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr, 2145 + [GSBI4_UART_SRC] = &gsbi4_uart_src.clkr, 2146 + [GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr, 2147 + [GSBI5_UART_SRC] = &gsbi5_uart_src.clkr, 2148 + [GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr, 2149 + [GSBI6_UART_SRC] = &gsbi6_uart_src.clkr, 2150 + [GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr, 2151 + [GSBI7_UART_SRC] = &gsbi7_uart_src.clkr, 2152 + [GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr, 2153 + [GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr, 2154 + [GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr, 2155 + [GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr, 2156 + [GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr, 2157 + [GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr, 2158 + [GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr, 2159 + [GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr, 2160 + [GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr, 2161 + [GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr, 2162 + [GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr, 2163 + [GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr, 2164 + [GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr, 2165 + [GP0_SRC] = &gp0_src.clkr, 2166 + [GP0_CLK] = &gp0_clk.clkr, 2167 + [GP1_SRC] = &gp1_src.clkr, 2168 + [GP1_CLK] = &gp1_clk.clkr, 2169 + [GP2_SRC] = &gp2_src.clkr, 2170 + [GP2_CLK] = &gp2_clk.clkr, 2171 + [PMEM_A_CLK] = &pmem_clk.clkr, 2172 + [PRNG_SRC] = &prng_src.clkr, 2173 + [PRNG_CLK] = &prng_clk.clkr, 2174 + [SDC1_SRC] = &sdc1_src.clkr, 2175 + [SDC1_CLK] = &sdc1_clk.clkr, 2176 + [SDC3_SRC] = &sdc3_src.clkr, 2177 + [SDC3_CLK] = &sdc3_clk.clkr, 2178 + [TSIF_REF_SRC] = &tsif_ref_src.clkr, 2179 + [TSIF_REF_CLK] = &tsif_ref_clk.clkr, 2180 + [DMA_BAM_H_CLK] = &dma_bam_h_clk.clkr, 2181 + [GSBI1_H_CLK] = &gsbi1_h_clk.clkr, 2182 + [GSBI2_H_CLK] = &gsbi2_h_clk.clkr, 2183 + [GSBI4_H_CLK] = &gsbi4_h_clk.clkr, 2184 + [GSBI5_H_CLK] = &gsbi5_h_clk.clkr, 2185 + [GSBI6_H_CLK] = &gsbi6_h_clk.clkr, 2186 + [GSBI7_H_CLK] = &gsbi7_h_clk.clkr, 2187 + [TSIF_H_CLK] = &tsif_h_clk.clkr, 2188 + [SDC1_H_CLK] = &sdc1_h_clk.clkr, 2189 + [SDC3_H_CLK] = &sdc3_h_clk.clkr, 2190 + [ADM0_CLK] = &adm0_clk.clkr, 2191 + [ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr, 2192 + [PCIE_A_CLK] = &pcie_a_clk.clkr, 2193 + [PCIE_AUX_CLK] = &pcie_aux_clk.clkr, 2194 + [PCIE_H_CLK] = &pcie_h_clk.clkr, 2195 + [PCIE_PHY_CLK] = &pcie_phy_clk.clkr, 2196 + [SFAB_SATA_S_H_CLK] = &sfab_sata_s_h_clk.clkr, 2197 + [PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr, 2198 + [PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr, 2199 + [PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr, 2200 + [RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr, 2201 + [SATA_H_CLK] = &sata_h_clk.clkr, 2202 + [SATA_CLK_SRC] = &sata_ref_src.clkr, 2203 + [SATA_RXOOB_CLK] = &sata_rxoob_clk.clkr, 2204 + [SATA_PMALIVE_CLK] = &sata_pmalive_clk.clkr, 2205 + [SATA_PHY_REF_CLK] = &sata_phy_ref_clk.clkr, 2206 + [SATA_A_CLK] = &sata_a_clk.clkr, 2207 + [SATA_PHY_CFG_CLK] = &sata_phy_cfg_clk.clkr, 2208 + [PCIE_ALT_REF_SRC] = &pcie_ref_src.clkr, 2209 + [PCIE_ALT_REF_CLK] = &pcie_ref_src_clk.clkr, 2210 + [PCIE_1_A_CLK] = &pcie1_a_clk.clkr, 2211 + [PCIE_1_AUX_CLK] = &pcie1_aux_clk.clkr, 2212 + [PCIE_1_H_CLK] = &pcie1_h_clk.clkr, 2213 + [PCIE_1_PHY_CLK] = &pcie1_phy_clk.clkr, 2214 + [PCIE_1_ALT_REF_SRC] = &pcie1_ref_src.clkr, 2215 + [PCIE_1_ALT_REF_CLK] = &pcie1_ref_src_clk.clkr, 2216 + [PCIE_2_A_CLK] = &pcie2_a_clk.clkr, 2217 + [PCIE_2_AUX_CLK] = &pcie2_aux_clk.clkr, 2218 + [PCIE_2_H_CLK] = &pcie2_h_clk.clkr, 2219 + [PCIE_2_PHY_CLK] = &pcie2_phy_clk.clkr, 2220 + [PCIE_2_ALT_REF_SRC] = &pcie2_ref_src.clkr, 2221 + [PCIE_2_ALT_REF_CLK] = &pcie2_ref_src_clk.clkr, 2222 + [USB30_MASTER_SRC] = &usb30_master_clk_src.clkr, 2223 + [USB30_0_MASTER_CLK] = &usb30_0_branch_clk.clkr, 2224 + [USB30_1_MASTER_CLK] = &usb30_1_branch_clk.clkr, 2225 + [USB30_UTMI_SRC] = &usb30_utmi_clk.clkr, 2226 + [USB30_0_UTMI_CLK] = &usb30_0_utmi_clk_ctl.clkr, 2227 + [USB30_1_UTMI_CLK] = &usb30_1_utmi_clk_ctl.clkr, 2228 + [USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr, 2229 + [USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_clk_src.clkr, 2230 + [USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr, 2231 + [USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr, 2232 + [USB_FS1_XCVR_SRC] = &usb_fs1_xcvr_clk_src.clkr, 2233 + [USB_FS1_XCVR_CLK] = &usb_fs1_xcvr_clk.clkr, 2234 + [USB_FS1_SYSTEM_CLK] = &usb_fs1_sys_clk.clkr, 2235 + }; 2236 + 2237 + static const struct qcom_reset_map gcc_ipq806x_resets[] = { 2238 + [QDSS_STM_RESET] = { 0x2060, 6 }, 2239 + [AFAB_SMPSS_S_RESET] = { 0x20b8, 2 }, 2240 + [AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 }, 2241 + [AFAB_SMPSS_M0_RESET] = { 0x20b8, 0 }, 2242 + [AFAB_EBI1_CH0_RESET] = { 0x20c0, 7 }, 2243 + [AFAB_EBI1_CH1_RESET] = { 0x20c4, 7 }, 2244 + [SFAB_ADM0_M0_RESET] = { 0x21e0, 7 }, 2245 + [SFAB_ADM0_M1_RESET] = { 0x21e4, 7 }, 2246 + [SFAB_ADM0_M2_RESET] = { 0x21e8, 7 }, 2247 + [ADM0_C2_RESET] = { 0x220c, 4 }, 2248 + [ADM0_C1_RESET] = { 0x220c, 3 }, 2249 + [ADM0_C0_RESET] = { 0x220c, 2 }, 2250 + [ADM0_PBUS_RESET] = { 0x220c, 1 }, 2251 + [ADM0_RESET] = { 0x220c, 0 }, 2252 + [QDSS_CLKS_SW_RESET] = { 0x2260, 5 }, 2253 + [QDSS_POR_RESET] = { 0x2260, 4 }, 2254 + [QDSS_TSCTR_RESET] = { 0x2260, 3 }, 2255 + [QDSS_HRESET_RESET] = { 0x2260, 2 }, 2256 + [QDSS_AXI_RESET] = { 0x2260, 1 }, 2257 + [QDSS_DBG_RESET] = { 0x2260, 0 }, 2258 + [SFAB_PCIE_M_RESET] = { 0x22d8, 1 }, 2259 + [SFAB_PCIE_S_RESET] = { 0x22d8, 0 }, 2260 + [PCIE_EXT_RESET] = { 0x22dc, 6 }, 2261 + [PCIE_PHY_RESET] = { 0x22dc, 5 }, 2262 + [PCIE_PCI_RESET] = { 0x22dc, 4 }, 2263 + [PCIE_POR_RESET] = { 0x22dc, 3 }, 2264 + [PCIE_HCLK_RESET] = { 0x22dc, 2 }, 2265 + [PCIE_ACLK_RESET] = { 0x22dc, 0 }, 2266 + [SFAB_LPASS_RESET] = { 0x23a0, 7 }, 2267 + [SFAB_AFAB_M_RESET] = { 0x23e0, 7 }, 2268 + [AFAB_SFAB_M0_RESET] = { 0x2420, 7 }, 2269 + [AFAB_SFAB_M1_RESET] = { 0x2424, 7 }, 2270 + [SFAB_SATA_S_RESET] = { 0x2480, 7 }, 2271 + [SFAB_DFAB_M_RESET] = { 0x2500, 7 }, 2272 + [DFAB_SFAB_M_RESET] = { 0x2520, 7 }, 2273 + [DFAB_SWAY0_RESET] = { 0x2540, 7 }, 2274 + [DFAB_SWAY1_RESET] = { 0x2544, 7 }, 2275 + [DFAB_ARB0_RESET] = { 0x2560, 7 }, 2276 + [DFAB_ARB1_RESET] = { 0x2564, 7 }, 2277 + [PPSS_PROC_RESET] = { 0x2594, 1 }, 2278 + [PPSS_RESET] = { 0x2594, 0 }, 2279 + [DMA_BAM_RESET] = { 0x25c0, 7 }, 2280 + [SPS_TIC_H_RESET] = { 0x2600, 7 }, 2281 + [SFAB_CFPB_M_RESET] = { 0x2680, 7 }, 2282 + [SFAB_CFPB_S_RESET] = { 0x26c0, 7 }, 2283 + [TSIF_H_RESET] = { 0x2700, 7 }, 2284 + [CE1_H_RESET] = { 0x2720, 7 }, 2285 + [CE1_CORE_RESET] = { 0x2724, 7 }, 2286 + [CE1_SLEEP_RESET] = { 0x2728, 7 }, 2287 + [CE2_H_RESET] = { 0x2740, 7 }, 2288 + [CE2_CORE_RESET] = { 0x2744, 7 }, 2289 + [SFAB_SFPB_M_RESET] = { 0x2780, 7 }, 2290 + [SFAB_SFPB_S_RESET] = { 0x27a0, 7 }, 2291 + [RPM_PROC_RESET] = { 0x27c0, 7 }, 2292 + [PMIC_SSBI2_RESET] = { 0x280c, 12 }, 2293 + [SDC1_RESET] = { 0x2830, 0 }, 2294 + [SDC2_RESET] = { 0x2850, 0 }, 2295 + [SDC3_RESET] = { 0x2870, 0 }, 2296 + [SDC4_RESET] = { 0x2890, 0 }, 2297 + [USB_HS1_RESET] = { 0x2910, 0 }, 2298 + [USB_HSIC_RESET] = { 0x2934, 0 }, 2299 + [USB_FS1_XCVR_RESET] = { 0x2974, 1 }, 2300 + [USB_FS1_RESET] = { 0x2974, 0 }, 2301 + [GSBI1_RESET] = { 0x29dc, 0 }, 2302 + [GSBI2_RESET] = { 0x29fc, 0 }, 2303 + [GSBI3_RESET] = { 0x2a1c, 0 }, 2304 + [GSBI4_RESET] = { 0x2a3c, 0 }, 2305 + [GSBI5_RESET] = { 0x2a5c, 0 }, 2306 + [GSBI6_RESET] = { 0x2a7c, 0 }, 2307 + [GSBI7_RESET] = { 0x2a9c, 0 }, 2308 + [SPDM_RESET] = { 0x2b6c, 0 }, 2309 + [SEC_CTRL_RESET] = { 0x2b80, 7 }, 2310 + [TLMM_H_RESET] = { 0x2ba0, 7 }, 2311 + [SFAB_SATA_M_RESET] = { 0x2c18, 0 }, 2312 + [SATA_RESET] = { 0x2c1c, 0 }, 2313 + [TSSC_RESET] = { 0x2ca0, 7 }, 2314 + [PDM_RESET] = { 0x2cc0, 12 }, 2315 + [MPM_H_RESET] = { 0x2da0, 7 }, 2316 + [MPM_RESET] = { 0x2da4, 0 }, 2317 + [SFAB_SMPSS_S_RESET] = { 0x2e00, 7 }, 2318 + [PRNG_RESET] = { 0x2e80, 12 }, 2319 + [SFAB_CE3_M_RESET] = { 0x36c8, 1 }, 2320 + [SFAB_CE3_S_RESET] = { 0x36c8, 0 }, 2321 + [CE3_SLEEP_RESET] = { 0x36d0, 7 }, 2322 + [PCIE_1_M_RESET] = { 0x3a98, 1 }, 2323 + [PCIE_1_S_RESET] = { 0x3a98, 0 }, 2324 + [PCIE_1_EXT_RESET] = { 0x3a9c, 6 }, 2325 + [PCIE_1_PHY_RESET] = { 0x3a9c, 5 }, 2326 + [PCIE_1_PCI_RESET] = { 0x3a9c, 4 }, 2327 + [PCIE_1_POR_RESET] = { 0x3a9c, 3 }, 2328 + [PCIE_1_HCLK_RESET] = { 0x3a9c, 2 }, 2329 + [PCIE_1_ACLK_RESET] = { 0x3a9c, 0 }, 2330 + [PCIE_2_M_RESET] = { 0x3ad8, 1 }, 2331 + [PCIE_2_S_RESET] = { 0x3ad8, 0 }, 2332 + [PCIE_2_EXT_RESET] = { 0x3adc, 6 }, 2333 + [PCIE_2_PHY_RESET] = { 0x3adc, 5 }, 2334 + [PCIE_2_PCI_RESET] = { 0x3adc, 4 }, 2335 + [PCIE_2_POR_RESET] = { 0x3adc, 3 }, 2336 + [PCIE_2_HCLK_RESET] = { 0x3adc, 2 }, 2337 + [PCIE_2_ACLK_RESET] = { 0x3adc, 0 }, 2338 + [SFAB_USB30_S_RESET] = { 0x3b54, 1 }, 2339 + [SFAB_USB30_M_RESET] = { 0x3b54, 0 }, 2340 + [USB30_0_PORT2_HS_PHY_RESET] = { 0x3b50, 5 }, 2341 + [USB30_0_MASTER_RESET] = { 0x3b50, 4 }, 2342 + [USB30_0_SLEEP_RESET] = { 0x3b50, 3 }, 2343 + [USB30_0_UTMI_PHY_RESET] = { 0x3b50, 2 }, 2344 + [USB30_0_POWERON_RESET] = { 0x3b50, 1 }, 2345 + [USB30_0_PHY_RESET] = { 0x3b50, 0 }, 2346 + [USB30_1_MASTER_RESET] = { 0x3b58, 4 }, 2347 + [USB30_1_SLEEP_RESET] = { 0x3b58, 3 }, 2348 + [USB30_1_UTMI_PHY_RESET] = { 0x3b58, 2 }, 2349 + [USB30_1_POWERON_RESET] = { 0x3b58, 1 }, 2350 + [USB30_1_PHY_RESET] = { 0x3b58, 0 }, 2351 + [NSSFB0_RESET] = { 0x3b60, 6 }, 2352 + [NSSFB1_RESET] = { 0x3b60, 7 }, 2353 + }; 2354 + 2355 + static const struct regmap_config gcc_ipq806x_regmap_config = { 2356 + .reg_bits = 32, 2357 + .reg_stride = 4, 2358 + .val_bits = 32, 2359 + .max_register = 0x3e40, 2360 + .fast_io = true, 2361 + }; 2362 + 2363 + static const struct qcom_cc_desc gcc_ipq806x_desc = { 2364 + .config = &gcc_ipq806x_regmap_config, 2365 + .clks = gcc_ipq806x_clks, 2366 + .num_clks = ARRAY_SIZE(gcc_ipq806x_clks), 2367 + .resets = gcc_ipq806x_resets, 2368 + .num_resets = ARRAY_SIZE(gcc_ipq806x_resets), 2369 + }; 2370 + 2371 + static const struct of_device_id gcc_ipq806x_match_table[] = { 2372 + { .compatible = "qcom,gcc-ipq8064" }, 2373 + { } 2374 + }; 2375 + MODULE_DEVICE_TABLE(of, gcc_ipq806x_match_table); 2376 + 2377 + static int gcc_ipq806x_probe(struct platform_device *pdev) 2378 + { 2379 + struct clk *clk; 2380 + struct device *dev = &pdev->dev; 2381 + 2382 + /* Temporary until RPM clocks supported */ 2383 + clk = clk_register_fixed_rate(dev, "cxo", NULL, CLK_IS_ROOT, 25000000); 2384 + if (IS_ERR(clk)) 2385 + return PTR_ERR(clk); 2386 + 2387 + clk = clk_register_fixed_rate(dev, "pxo", NULL, CLK_IS_ROOT, 25000000); 2388 + if (IS_ERR(clk)) 2389 + return PTR_ERR(clk); 2390 + 2391 + return qcom_cc_probe(pdev, &gcc_ipq806x_desc); 2392 + } 2393 + 2394 + static int gcc_ipq806x_remove(struct platform_device *pdev) 2395 + { 2396 + qcom_cc_remove(pdev); 2397 + return 0; 2398 + } 2399 + 2400 + static struct platform_driver gcc_ipq806x_driver = { 2401 + .probe = gcc_ipq806x_probe, 2402 + .remove = gcc_ipq806x_remove, 2403 + .driver = { 2404 + .name = "gcc-ipq806x", 2405 + .owner = THIS_MODULE, 2406 + .of_match_table = gcc_ipq806x_match_table, 2407 + }, 2408 + }; 2409 + 2410 + static int __init gcc_ipq806x_init(void) 2411 + { 2412 + return platform_driver_register(&gcc_ipq806x_driver); 2413 + } 2414 + core_initcall(gcc_ipq806x_init); 2415 + 2416 + static void __exit gcc_ipq806x_exit(void) 2417 + { 2418 + platform_driver_unregister(&gcc_ipq806x_driver); 2419 + } 2420 + module_exit(gcc_ipq806x_exit); 2421 + 2422 + MODULE_DESCRIPTION("QCOM GCC IPQ806x Driver"); 2423 + MODULE_LICENSE("GPL v2"); 2424 + MODULE_ALIAS("platform:gcc-ipq806x");
+580 -3
drivers/clk/qcom/gcc-msm8960.c
··· 104 104 105 105 #define P_PXO 0 106 106 #define P_PLL8 1 107 + #define P_PLL3 2 107 108 #define P_CXO 2 108 109 109 110 static const u8 gcc_pxo_pll8_map[] = { ··· 127 126 "pxo", 128 127 "pll8_vote", 129 128 "cxo", 129 + }; 130 + 131 + static const u8 gcc_pxo_pll8_pll3_map[] = { 132 + [P_PXO] = 0, 133 + [P_PLL8] = 3, 134 + [P_PLL3] = 6, 135 + }; 136 + 137 + static const char *gcc_pxo_pll8_pll3[] = { 138 + "pxo", 139 + "pll8_vote", 140 + "pll3", 130 141 }; 131 142 132 143 static struct freq_tbl clk_tbl_gsbi_uart[] = { ··· 1941 1928 }, 1942 1929 }; 1943 1930 1931 + static struct clk_rcg usb_hs3_xcvr_src = { 1932 + .ns_reg = 0x370c, 1933 + .md_reg = 0x3708, 1934 + .mn = { 1935 + .mnctr_en_bit = 8, 1936 + .mnctr_reset_bit = 7, 1937 + .mnctr_mode_shift = 5, 1938 + .n_val_shift = 16, 1939 + .m_val_shift = 16, 1940 + .width = 8, 1941 + }, 1942 + .p = { 1943 + .pre_div_shift = 3, 1944 + .pre_div_width = 2, 1945 + }, 1946 + .s = { 1947 + .src_sel_shift = 0, 1948 + .parent_map = gcc_pxo_pll8_map, 1949 + }, 1950 + .freq_tbl = clk_tbl_usb, 1951 + .clkr = { 1952 + .enable_reg = 0x370c, 1953 + .enable_mask = BIT(11), 1954 + .hw.init = &(struct clk_init_data){ 1955 + .name = "usb_hs3_xcvr_src", 1956 + .parent_names = gcc_pxo_pll8, 1957 + .num_parents = 2, 1958 + .ops = &clk_rcg_ops, 1959 + .flags = CLK_SET_RATE_GATE, 1960 + }, 1961 + } 1962 + }; 1963 + 1964 + static struct clk_branch usb_hs3_xcvr_clk = { 1965 + .halt_reg = 0x2fc8, 1966 + .halt_bit = 30, 1967 + .clkr = { 1968 + .enable_reg = 0x370c, 1969 + .enable_mask = BIT(9), 1970 + .hw.init = &(struct clk_init_data){ 1971 + .name = "usb_hs3_xcvr_clk", 1972 + .parent_names = (const char *[]){ "usb_hs3_xcvr_src" }, 1973 + .num_parents = 1, 1974 + .ops = &clk_branch_ops, 1975 + .flags = CLK_SET_RATE_PARENT, 1976 + }, 1977 + }, 1978 + }; 1979 + 1980 + static struct clk_rcg usb_hs4_xcvr_src = { 1981 + .ns_reg = 0x372c, 1982 + .md_reg = 0x3728, 1983 + .mn = { 1984 + .mnctr_en_bit = 8, 1985 + .mnctr_reset_bit = 7, 1986 + .mnctr_mode_shift = 5, 1987 + .n_val_shift = 16, 1988 + .m_val_shift = 16, 1989 + .width = 8, 1990 + }, 1991 + .p = { 1992 + .pre_div_shift = 3, 1993 + .pre_div_width = 2, 1994 + }, 1995 + .s = { 1996 + .src_sel_shift = 0, 1997 + .parent_map = gcc_pxo_pll8_map, 1998 + }, 1999 + .freq_tbl = clk_tbl_usb, 2000 + .clkr = { 2001 + .enable_reg = 0x372c, 2002 + .enable_mask = BIT(11), 2003 + .hw.init = &(struct clk_init_data){ 2004 + .name = "usb_hs4_xcvr_src", 2005 + .parent_names = gcc_pxo_pll8, 2006 + .num_parents = 2, 2007 + .ops = &clk_rcg_ops, 2008 + .flags = CLK_SET_RATE_GATE, 2009 + }, 2010 + } 2011 + }; 2012 + 2013 + static struct clk_branch usb_hs4_xcvr_clk = { 2014 + .halt_reg = 0x2fc8, 2015 + .halt_bit = 2, 2016 + .clkr = { 2017 + .enable_reg = 0x372c, 2018 + .enable_mask = BIT(9), 2019 + .hw.init = &(struct clk_init_data){ 2020 + .name = "usb_hs4_xcvr_clk", 2021 + .parent_names = (const char *[]){ "usb_hs4_xcvr_src" }, 2022 + .num_parents = 1, 2023 + .ops = &clk_branch_ops, 2024 + .flags = CLK_SET_RATE_PARENT, 2025 + }, 2026 + }, 2027 + }; 2028 + 1944 2029 static struct clk_rcg usb_hsic_xcvr_fs_src = { 1945 2030 .ns_reg = 0x2928, 1946 2031 .md_reg = 0x2924, ··· 2567 2456 }, 2568 2457 }; 2569 2458 2459 + static struct clk_branch usb_hs3_h_clk = { 2460 + .halt_reg = 0x2fc8, 2461 + .halt_bit = 31, 2462 + .clkr = { 2463 + .enable_reg = 0x3700, 2464 + .enable_mask = BIT(4), 2465 + .hw.init = &(struct clk_init_data){ 2466 + .name = "usb_hs3_h_clk", 2467 + .ops = &clk_branch_ops, 2468 + .flags = CLK_IS_ROOT, 2469 + }, 2470 + }, 2471 + }; 2472 + 2473 + static struct clk_branch usb_hs4_h_clk = { 2474 + .halt_reg = 0x2fc8, 2475 + .halt_bit = 7, 2476 + .clkr = { 2477 + .enable_reg = 0x3720, 2478 + .enable_mask = BIT(4), 2479 + .hw.init = &(struct clk_init_data){ 2480 + .name = "usb_hs4_h_clk", 2481 + .ops = &clk_branch_ops, 2482 + .flags = CLK_IS_ROOT, 2483 + }, 2484 + }, 2485 + }; 2486 + 2570 2487 static struct clk_branch usb_hsic_h_clk = { 2571 2488 .halt_reg = 0x2fcc, 2572 2489 .halt_bit = 28, ··· 2715 2576 .enable_mask = BIT(3), 2716 2577 .hw.init = &(struct clk_init_data){ 2717 2578 .name = "adm0_pbus_clk", 2579 + .ops = &clk_branch_ops, 2580 + .flags = CLK_IS_ROOT, 2581 + }, 2582 + }, 2583 + }; 2584 + 2585 + static struct freq_tbl clk_tbl_ce3[] = { 2586 + { 48000000, P_PLL8, 8 }, 2587 + { 100000000, P_PLL3, 12 }, 2588 + { 120000000, P_PLL3, 10 }, 2589 + { } 2590 + }; 2591 + 2592 + static struct clk_rcg ce3_src = { 2593 + .ns_reg = 0x36c0, 2594 + .p = { 2595 + .pre_div_shift = 3, 2596 + .pre_div_width = 4, 2597 + }, 2598 + .s = { 2599 + .src_sel_shift = 0, 2600 + .parent_map = gcc_pxo_pll8_pll3_map, 2601 + }, 2602 + .freq_tbl = clk_tbl_ce3, 2603 + .clkr = { 2604 + .enable_reg = 0x2c08, 2605 + .enable_mask = BIT(7), 2606 + .hw.init = &(struct clk_init_data){ 2607 + .name = "ce3_src", 2608 + .parent_names = gcc_pxo_pll8_pll3, 2609 + .num_parents = 3, 2610 + .ops = &clk_rcg_ops, 2611 + .flags = CLK_SET_RATE_GATE, 2612 + }, 2613 + }, 2614 + }; 2615 + 2616 + static struct clk_branch ce3_core_clk = { 2617 + .halt_reg = 0x2fdc, 2618 + .halt_bit = 5, 2619 + .clkr = { 2620 + .enable_reg = 0x36c4, 2621 + .enable_mask = BIT(4), 2622 + .hw.init = &(struct clk_init_data){ 2623 + .name = "ce3_core_clk", 2624 + .parent_names = (const char *[]){ "ce3_src" }, 2625 + .num_parents = 1, 2626 + .ops = &clk_branch_ops, 2627 + .flags = CLK_SET_RATE_PARENT, 2628 + }, 2629 + }, 2630 + }; 2631 + 2632 + static struct clk_branch ce3_h_clk = { 2633 + .halt_reg = 0x2fc4, 2634 + .halt_bit = 16, 2635 + .clkr = { 2636 + .enable_reg = 0x36c4, 2637 + .enable_mask = BIT(4), 2638 + .hw.init = &(struct clk_init_data){ 2639 + .name = "ce3_h_clk", 2640 + .parent_names = (const char *[]){ "ce3_src" }, 2641 + .num_parents = 1, 2642 + .ops = &clk_branch_ops, 2643 + .flags = CLK_SET_RATE_PARENT, 2644 + }, 2645 + }, 2646 + }; 2647 + 2648 + static const struct freq_tbl clk_tbl_sata_ref[] = { 2649 + { 48000000, P_PLL8, 8, 0, 0 }, 2650 + { 100000000, P_PLL3, 12, 0, 0 }, 2651 + { } 2652 + }; 2653 + 2654 + static struct clk_rcg sata_clk_src = { 2655 + .ns_reg = 0x2c08, 2656 + .p = { 2657 + .pre_div_shift = 3, 2658 + .pre_div_width = 4, 2659 + }, 2660 + .s = { 2661 + .src_sel_shift = 0, 2662 + .parent_map = gcc_pxo_pll8_pll3_map, 2663 + }, 2664 + .freq_tbl = clk_tbl_sata_ref, 2665 + .clkr = { 2666 + .enable_reg = 0x2c08, 2667 + .enable_mask = BIT(7), 2668 + .hw.init = &(struct clk_init_data){ 2669 + .name = "sata_clk_src", 2670 + .parent_names = gcc_pxo_pll8_pll3, 2671 + .num_parents = 3, 2672 + .ops = &clk_rcg_ops, 2673 + .flags = CLK_SET_RATE_GATE, 2674 + }, 2675 + }, 2676 + }; 2677 + 2678 + static struct clk_branch sata_rxoob_clk = { 2679 + .halt_reg = 0x2fdc, 2680 + .halt_bit = 26, 2681 + .clkr = { 2682 + .enable_reg = 0x2c0c, 2683 + .enable_mask = BIT(4), 2684 + .hw.init = &(struct clk_init_data){ 2685 + .name = "sata_rxoob_clk", 2686 + .parent_names = (const char *[]){ "sata_clk_src" }, 2687 + .num_parents = 1, 2688 + .ops = &clk_branch_ops, 2689 + .flags = CLK_SET_RATE_PARENT, 2690 + }, 2691 + }, 2692 + }; 2693 + 2694 + static struct clk_branch sata_pmalive_clk = { 2695 + .halt_reg = 0x2fdc, 2696 + .halt_bit = 25, 2697 + .clkr = { 2698 + .enable_reg = 0x2c10, 2699 + .enable_mask = BIT(4), 2700 + .hw.init = &(struct clk_init_data){ 2701 + .name = "sata_pmalive_clk", 2702 + .parent_names = (const char *[]){ "sata_clk_src" }, 2703 + .num_parents = 1, 2704 + .ops = &clk_branch_ops, 2705 + .flags = CLK_SET_RATE_PARENT, 2706 + }, 2707 + }, 2708 + }; 2709 + 2710 + static struct clk_branch sata_phy_ref_clk = { 2711 + .halt_reg = 0x2fdc, 2712 + .halt_bit = 24, 2713 + .clkr = { 2714 + .enable_reg = 0x2c14, 2715 + .enable_mask = BIT(4), 2716 + .hw.init = &(struct clk_init_data){ 2717 + .name = "sata_phy_ref_clk", 2718 + .parent_names = (const char *[]){ "pxo" }, 2719 + .num_parents = 1, 2720 + .ops = &clk_branch_ops, 2721 + }, 2722 + }, 2723 + }; 2724 + 2725 + static struct clk_branch sata_a_clk = { 2726 + .halt_reg = 0x2fc0, 2727 + .halt_bit = 12, 2728 + .clkr = { 2729 + .enable_reg = 0x2c20, 2730 + .enable_mask = BIT(4), 2731 + .hw.init = &(struct clk_init_data){ 2732 + .name = "sata_a_clk", 2733 + .ops = &clk_branch_ops, 2734 + .flags = CLK_IS_ROOT, 2735 + }, 2736 + }, 2737 + }; 2738 + 2739 + static struct clk_branch sata_h_clk = { 2740 + .halt_reg = 0x2fdc, 2741 + .halt_bit = 27, 2742 + .clkr = { 2743 + .enable_reg = 0x2c00, 2744 + .enable_mask = BIT(4), 2745 + .hw.init = &(struct clk_init_data){ 2746 + .name = "sata_h_clk", 2747 + .ops = &clk_branch_ops, 2748 + .flags = CLK_IS_ROOT, 2749 + }, 2750 + }, 2751 + }; 2752 + 2753 + static struct clk_branch sfab_sata_s_h_clk = { 2754 + .halt_reg = 0x2fc4, 2755 + .halt_bit = 14, 2756 + .clkr = { 2757 + .enable_reg = 0x2480, 2758 + .enable_mask = BIT(4), 2759 + .hw.init = &(struct clk_init_data){ 2760 + .name = "sfab_sata_s_h_clk", 2761 + .ops = &clk_branch_ops, 2762 + .flags = CLK_IS_ROOT, 2763 + }, 2764 + }, 2765 + }; 2766 + 2767 + static struct clk_branch sata_phy_cfg_clk = { 2768 + .halt_reg = 0x2fcc, 2769 + .halt_bit = 12, 2770 + .clkr = { 2771 + .enable_reg = 0x2c40, 2772 + .enable_mask = BIT(4), 2773 + .hw.init = &(struct clk_init_data){ 2774 + .name = "sata_phy_cfg_clk", 2775 + .ops = &clk_branch_ops, 2776 + .flags = CLK_IS_ROOT, 2777 + }, 2778 + }, 2779 + }; 2780 + 2781 + static struct clk_branch pcie_phy_ref_clk = { 2782 + .halt_reg = 0x2fdc, 2783 + .halt_bit = 29, 2784 + .clkr = { 2785 + .enable_reg = 0x22d0, 2786 + .enable_mask = BIT(4), 2787 + .hw.init = &(struct clk_init_data){ 2788 + .name = "pcie_phy_ref_clk", 2789 + .ops = &clk_branch_ops, 2790 + .flags = CLK_IS_ROOT, 2791 + }, 2792 + }, 2793 + }; 2794 + 2795 + static struct clk_branch pcie_h_clk = { 2796 + .halt_reg = 0x2fd4, 2797 + .halt_bit = 8, 2798 + .clkr = { 2799 + .enable_reg = 0x22cc, 2800 + .enable_mask = BIT(4), 2801 + .hw.init = &(struct clk_init_data){ 2802 + .name = "pcie_h_clk", 2803 + .ops = &clk_branch_ops, 2804 + .flags = CLK_IS_ROOT, 2805 + }, 2806 + }, 2807 + }; 2808 + 2809 + static struct clk_branch pcie_a_clk = { 2810 + .halt_reg = 0x2fc0, 2811 + .halt_bit = 13, 2812 + .clkr = { 2813 + .enable_reg = 0x22c0, 2814 + .enable_mask = BIT(4), 2815 + .hw.init = &(struct clk_init_data){ 2816 + .name = "pcie_a_clk", 2718 2817 .ops = &clk_branch_ops, 2719 2818 .flags = CLK_IS_ROOT, 2720 2819 }, ··· 3246 2869 }; 3247 2870 3248 2871 static struct clk_regmap *gcc_apq8064_clks[] = { 2872 + [PLL3] = &pll3.clkr, 3249 2873 [PLL8] = &pll8.clkr, 3250 2874 [PLL8_VOTE] = &pll8_vote, 2875 + [PLL14] = &pll14.clkr, 2876 + [PLL14_VOTE] = &pll14_vote, 2877 + [GSBI1_UART_SRC] = &gsbi1_uart_src.clkr, 2878 + [GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr, 2879 + [GSBI2_UART_SRC] = &gsbi2_uart_src.clkr, 2880 + [GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr, 2881 + [GSBI3_UART_SRC] = &gsbi3_uart_src.clkr, 2882 + [GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr, 2883 + [GSBI4_UART_SRC] = &gsbi4_uart_src.clkr, 2884 + [GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr, 2885 + [GSBI5_UART_SRC] = &gsbi5_uart_src.clkr, 2886 + [GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr, 2887 + [GSBI6_UART_SRC] = &gsbi6_uart_src.clkr, 2888 + [GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr, 3251 2889 [GSBI7_UART_SRC] = &gsbi7_uart_src.clkr, 3252 2890 [GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr, 2891 + [GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr, 2892 + [GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr, 2893 + [GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr, 2894 + [GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr, 2895 + [GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr, 2896 + [GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr, 2897 + [GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr, 2898 + [GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr, 2899 + [GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr, 2900 + [GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr, 2901 + [GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr, 2902 + [GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr, 3253 2903 [GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr, 3254 2904 [GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr, 2905 + [GP0_SRC] = &gp0_src.clkr, 2906 + [GP0_CLK] = &gp0_clk.clkr, 2907 + [GP1_SRC] = &gp1_src.clkr, 2908 + [GP1_CLK] = &gp1_clk.clkr, 2909 + [GP2_SRC] = &gp2_src.clkr, 2910 + [GP2_CLK] = &gp2_clk.clkr, 2911 + [PMEM_A_CLK] = &pmem_clk.clkr, 2912 + [PRNG_SRC] = &prng_src.clkr, 2913 + [PRNG_CLK] = &prng_clk.clkr, 2914 + [SDC1_SRC] = &sdc1_src.clkr, 2915 + [SDC1_CLK] = &sdc1_clk.clkr, 2916 + [SDC2_SRC] = &sdc2_src.clkr, 2917 + [SDC2_CLK] = &sdc2_clk.clkr, 2918 + [SDC3_SRC] = &sdc3_src.clkr, 2919 + [SDC3_CLK] = &sdc3_clk.clkr, 2920 + [SDC4_SRC] = &sdc4_src.clkr, 2921 + [SDC4_CLK] = &sdc4_clk.clkr, 2922 + [TSIF_REF_SRC] = &tsif_ref_src.clkr, 2923 + [TSIF_REF_CLK] = &tsif_ref_clk.clkr, 2924 + [USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr, 2925 + [USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr, 2926 + [USB_HS3_XCVR_SRC] = &usb_hs3_xcvr_src.clkr, 2927 + [USB_HS3_XCVR_CLK] = &usb_hs3_xcvr_clk.clkr, 2928 + [USB_HS4_XCVR_SRC] = &usb_hs4_xcvr_src.clkr, 2929 + [USB_HS4_XCVR_CLK] = &usb_hs4_xcvr_clk.clkr, 2930 + [USB_HSIC_XCVR_FS_SRC] = &usb_hsic_xcvr_fs_src.clkr, 2931 + [USB_HSIC_XCVR_FS_CLK] = &usb_hsic_xcvr_fs_clk.clkr, 2932 + [USB_HSIC_SYSTEM_CLK] = &usb_hsic_system_clk.clkr, 2933 + [USB_HSIC_HSIC_CLK] = &usb_hsic_hsic_clk.clkr, 2934 + [USB_HSIC_HSIO_CAL_CLK] = &usb_hsic_hsio_cal_clk.clkr, 2935 + [USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr, 2936 + [USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr, 2937 + [USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr, 2938 + [SATA_H_CLK] = &sata_h_clk.clkr, 2939 + [SATA_CLK_SRC] = &sata_clk_src.clkr, 2940 + [SATA_RXOOB_CLK] = &sata_rxoob_clk.clkr, 2941 + [SATA_PMALIVE_CLK] = &sata_pmalive_clk.clkr, 2942 + [SATA_PHY_REF_CLK] = &sata_phy_ref_clk.clkr, 2943 + [SATA_PHY_CFG_CLK] = &sata_phy_cfg_clk.clkr, 2944 + [SATA_A_CLK] = &sata_a_clk.clkr, 2945 + [SFAB_SATA_S_H_CLK] = &sfab_sata_s_h_clk.clkr, 2946 + [CE3_SRC] = &ce3_src.clkr, 2947 + [CE3_CORE_CLK] = &ce3_core_clk.clkr, 2948 + [CE3_H_CLK] = &ce3_h_clk.clkr, 2949 + [DMA_BAM_H_CLK] = &dma_bam_h_clk.clkr, 2950 + [GSBI1_H_CLK] = &gsbi1_h_clk.clkr, 2951 + [GSBI2_H_CLK] = &gsbi2_h_clk.clkr, 2952 + [GSBI3_H_CLK] = &gsbi3_h_clk.clkr, 2953 + [GSBI4_H_CLK] = &gsbi4_h_clk.clkr, 2954 + [GSBI5_H_CLK] = &gsbi5_h_clk.clkr, 2955 + [GSBI6_H_CLK] = &gsbi6_h_clk.clkr, 3255 2956 [GSBI7_H_CLK] = &gsbi7_h_clk.clkr, 2957 + [TSIF_H_CLK] = &tsif_h_clk.clkr, 2958 + [USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr, 2959 + [USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr, 2960 + [USB_HSIC_H_CLK] = &usb_hsic_h_clk.clkr, 2961 + [USB_HS3_H_CLK] = &usb_hs3_h_clk.clkr, 2962 + [USB_HS4_H_CLK] = &usb_hs4_h_clk.clkr, 2963 + [SDC1_H_CLK] = &sdc1_h_clk.clkr, 2964 + [SDC2_H_CLK] = &sdc2_h_clk.clkr, 2965 + [SDC3_H_CLK] = &sdc3_h_clk.clkr, 2966 + [SDC4_H_CLK] = &sdc4_h_clk.clkr, 2967 + [ADM0_CLK] = &adm0_clk.clkr, 2968 + [ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr, 2969 + [PCIE_A_CLK] = &pcie_a_clk.clkr, 2970 + [PCIE_PHY_REF_CLK] = &pcie_phy_ref_clk.clkr, 2971 + [PCIE_H_CLK] = &pcie_h_clk.clkr, 2972 + [PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr, 2973 + [PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr, 2974 + [PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr, 2975 + [RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr, 2976 + }; 2977 + 2978 + static const struct qcom_reset_map gcc_apq8064_resets[] = { 2979 + [QDSS_STM_RESET] = { 0x2060, 6 }, 2980 + [AFAB_SMPSS_S_RESET] = { 0x20b8, 2 }, 2981 + [AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 }, 2982 + [AFAB_SMPSS_M0_RESET] = { 0x20b8 }, 2983 + [AFAB_EBI1_CH0_RESET] = { 0x20c0, 7 }, 2984 + [AFAB_EBI1_CH1_RESET] = { 0x20c4, 7}, 2985 + [SFAB_ADM0_M0_RESET] = { 0x21e0, 7 }, 2986 + [SFAB_ADM0_M1_RESET] = { 0x21e4, 7 }, 2987 + [SFAB_ADM0_M2_RESET] = { 0x21e8, 7 }, 2988 + [ADM0_C2_RESET] = { 0x220c, 4}, 2989 + [ADM0_C1_RESET] = { 0x220c, 3}, 2990 + [ADM0_C0_RESET] = { 0x220c, 2}, 2991 + [ADM0_PBUS_RESET] = { 0x220c, 1 }, 2992 + [ADM0_RESET] = { 0x220c }, 2993 + [QDSS_CLKS_SW_RESET] = { 0x2260, 5 }, 2994 + [QDSS_POR_RESET] = { 0x2260, 4 }, 2995 + [QDSS_TSCTR_RESET] = { 0x2260, 3 }, 2996 + [QDSS_HRESET_RESET] = { 0x2260, 2 }, 2997 + [QDSS_AXI_RESET] = { 0x2260, 1 }, 2998 + [QDSS_DBG_RESET] = { 0x2260 }, 2999 + [SFAB_PCIE_M_RESET] = { 0x22d8, 1 }, 3000 + [SFAB_PCIE_S_RESET] = { 0x22d8 }, 3001 + [PCIE_EXT_PCI_RESET] = { 0x22dc, 6 }, 3002 + [PCIE_PHY_RESET] = { 0x22dc, 5 }, 3003 + [PCIE_PCI_RESET] = { 0x22dc, 4 }, 3004 + [PCIE_POR_RESET] = { 0x22dc, 3 }, 3005 + [PCIE_HCLK_RESET] = { 0x22dc, 2 }, 3006 + [PCIE_ACLK_RESET] = { 0x22dc }, 3007 + [SFAB_USB3_M_RESET] = { 0x2360, 7 }, 3008 + [SFAB_RIVA_M_RESET] = { 0x2380, 7 }, 3009 + [SFAB_LPASS_RESET] = { 0x23a0, 7 }, 3010 + [SFAB_AFAB_M_RESET] = { 0x23e0, 7 }, 3011 + [AFAB_SFAB_M0_RESET] = { 0x2420, 7 }, 3012 + [AFAB_SFAB_M1_RESET] = { 0x2424, 7 }, 3013 + [SFAB_SATA_S_RESET] = { 0x2480, 7 }, 3014 + [SFAB_DFAB_M_RESET] = { 0x2500, 7 }, 3015 + [DFAB_SFAB_M_RESET] = { 0x2520, 7 }, 3016 + [DFAB_SWAY0_RESET] = { 0x2540, 7 }, 3017 + [DFAB_SWAY1_RESET] = { 0x2544, 7 }, 3018 + [DFAB_ARB0_RESET] = { 0x2560, 7 }, 3019 + [DFAB_ARB1_RESET] = { 0x2564, 7 }, 3020 + [PPSS_PROC_RESET] = { 0x2594, 1 }, 3021 + [PPSS_RESET] = { 0x2594}, 3022 + [DMA_BAM_RESET] = { 0x25c0, 7 }, 3023 + [SPS_TIC_H_RESET] = { 0x2600, 7 }, 3024 + [SFAB_CFPB_M_RESET] = { 0x2680, 7 }, 3025 + [SFAB_CFPB_S_RESET] = { 0x26c0, 7 }, 3026 + [TSIF_H_RESET] = { 0x2700, 7 }, 3027 + [CE1_H_RESET] = { 0x2720, 7 }, 3028 + [CE1_CORE_RESET] = { 0x2724, 7 }, 3029 + [CE1_SLEEP_RESET] = { 0x2728, 7 }, 3030 + [CE2_H_RESET] = { 0x2740, 7 }, 3031 + [CE2_CORE_RESET] = { 0x2744, 7 }, 3032 + [SFAB_SFPB_M_RESET] = { 0x2780, 7 }, 3033 + [SFAB_SFPB_S_RESET] = { 0x27a0, 7 }, 3034 + [RPM_PROC_RESET] = { 0x27c0, 7 }, 3035 + [PMIC_SSBI2_RESET] = { 0x280c, 12 }, 3036 + [SDC1_RESET] = { 0x2830 }, 3037 + [SDC2_RESET] = { 0x2850 }, 3038 + [SDC3_RESET] = { 0x2870 }, 3039 + [SDC4_RESET] = { 0x2890 }, 3040 + [USB_HS1_RESET] = { 0x2910 }, 3041 + [USB_HSIC_RESET] = { 0x2934 }, 3042 + [USB_FS1_XCVR_RESET] = { 0x2974, 1 }, 3043 + [USB_FS1_RESET] = { 0x2974 }, 3044 + [GSBI1_RESET] = { 0x29dc }, 3045 + [GSBI2_RESET] = { 0x29fc }, 3046 + [GSBI3_RESET] = { 0x2a1c }, 3047 + [GSBI4_RESET] = { 0x2a3c }, 3048 + [GSBI5_RESET] = { 0x2a5c }, 3049 + [GSBI6_RESET] = { 0x2a7c }, 3050 + [GSBI7_RESET] = { 0x2a9c }, 3051 + [SPDM_RESET] = { 0x2b6c }, 3052 + [TLMM_H_RESET] = { 0x2ba0, 7 }, 3053 + [SATA_SFAB_M_RESET] = { 0x2c18 }, 3054 + [SATA_RESET] = { 0x2c1c }, 3055 + [GSS_SLP_RESET] = { 0x2c60, 7 }, 3056 + [GSS_RESET] = { 0x2c64 }, 3057 + [TSSC_RESET] = { 0x2ca0, 7 }, 3058 + [PDM_RESET] = { 0x2cc0, 12 }, 3059 + [MPM_H_RESET] = { 0x2da0, 7 }, 3060 + [MPM_RESET] = { 0x2da4 }, 3061 + [SFAB_SMPSS_S_RESET] = { 0x2e00, 7 }, 3062 + [PRNG_RESET] = { 0x2e80, 12 }, 3063 + [RIVA_RESET] = { 0x35e0 }, 3064 + [CE3_H_RESET] = { 0x36c4, 7 }, 3065 + [SFAB_CE3_M_RESET] = { 0x36c8, 1 }, 3066 + [SFAB_CE3_S_RESET] = { 0x36c8 }, 3067 + [CE3_RESET] = { 0x36cc, 7 }, 3068 + [CE3_SLEEP_RESET] = { 0x36d0, 7 }, 3069 + [USB_HS3_RESET] = { 0x3710 }, 3070 + [USB_HS4_RESET] = { 0x3730 }, 3256 3071 }; 3257 3072 3258 3073 static const struct regmap_config gcc_msm8960_regmap_config = { ··· 3452 2883 .reg_stride = 4, 3453 2884 .val_bits = 32, 3454 2885 .max_register = 0x3660, 2886 + .fast_io = true, 2887 + }; 2888 + 2889 + static const struct regmap_config gcc_apq8064_regmap_config = { 2890 + .reg_bits = 32, 2891 + .reg_stride = 4, 2892 + .val_bits = 32, 2893 + .max_register = 0x3880, 3455 2894 .fast_io = true, 3456 2895 }; 3457 2896 ··· 3472 2895 }; 3473 2896 3474 2897 static const struct qcom_cc_desc gcc_apq8064_desc = { 3475 - .config = &gcc_msm8960_regmap_config, 2898 + .config = &gcc_apq8064_regmap_config, 3476 2899 .clks = gcc_apq8064_clks, 3477 2900 .num_clks = ARRAY_SIZE(gcc_apq8064_clks), 3478 - .resets = gcc_msm8960_resets, 3479 - .num_resets = ARRAY_SIZE(gcc_msm8960_resets), 2901 + .resets = gcc_apq8064_resets, 2902 + .num_resets = ARRAY_SIZE(gcc_apq8064_resets), 3480 2903 }; 3481 2904 3482 2905 static const struct of_device_id gcc_msm8960_match_table[] = {
+3352
drivers/clk/qcom/mmcc-apq8084.c
··· 1 + /* 2 + * Copyright (c) 2014, 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/platform_device.h> 16 + #include <linux/module.h> 17 + #include <linux/regmap.h> 18 + #include <linux/reset-controller.h> 19 + 20 + #include <dt-bindings/clock/qcom,mmcc-apq8084.h> 21 + #include <dt-bindings/reset/qcom,mmcc-apq8084.h> 22 + 23 + #include "common.h" 24 + #include "clk-regmap.h" 25 + #include "clk-pll.h" 26 + #include "clk-rcg.h" 27 + #include "clk-branch.h" 28 + #include "reset.h" 29 + 30 + #define P_XO 0 31 + #define P_MMPLL0 1 32 + #define P_EDPLINK 1 33 + #define P_MMPLL1 2 34 + #define P_HDMIPLL 2 35 + #define P_GPLL0 3 36 + #define P_EDPVCO 3 37 + #define P_MMPLL4 4 38 + #define P_DSI0PLL 4 39 + #define P_DSI0PLL_BYTE 4 40 + #define P_MMPLL2 4 41 + #define P_MMPLL3 4 42 + #define P_GPLL1 5 43 + #define P_DSI1PLL 5 44 + #define P_DSI1PLL_BYTE 5 45 + #define P_MMSLEEP 6 46 + 47 + static const u8 mmcc_xo_mmpll0_mmpll1_gpll0_map[] = { 48 + [P_XO] = 0, 49 + [P_MMPLL0] = 1, 50 + [P_MMPLL1] = 2, 51 + [P_GPLL0] = 5, 52 + }; 53 + 54 + static const char *mmcc_xo_mmpll0_mmpll1_gpll0[] = { 55 + "xo", 56 + "mmpll0_vote", 57 + "mmpll1_vote", 58 + "mmss_gpll0_vote", 59 + }; 60 + 61 + static const u8 mmcc_xo_mmpll0_dsi_hdmi_gpll0_map[] = { 62 + [P_XO] = 0, 63 + [P_MMPLL0] = 1, 64 + [P_HDMIPLL] = 4, 65 + [P_GPLL0] = 5, 66 + [P_DSI0PLL] = 2, 67 + [P_DSI1PLL] = 3, 68 + }; 69 + 70 + static const char *mmcc_xo_mmpll0_dsi_hdmi_gpll0[] = { 71 + "xo", 72 + "mmpll0_vote", 73 + "hdmipll", 74 + "mmss_gpll0_vote", 75 + "dsi0pll", 76 + "dsi1pll", 77 + }; 78 + 79 + static const u8 mmcc_xo_mmpll0_1_2_gpll0_map[] = { 80 + [P_XO] = 0, 81 + [P_MMPLL0] = 1, 82 + [P_MMPLL1] = 2, 83 + [P_GPLL0] = 5, 84 + [P_MMPLL2] = 3, 85 + }; 86 + 87 + static const char *mmcc_xo_mmpll0_1_2_gpll0[] = { 88 + "xo", 89 + "mmpll0_vote", 90 + "mmpll1_vote", 91 + "mmss_gpll0_vote", 92 + "mmpll2", 93 + }; 94 + 95 + static const u8 mmcc_xo_mmpll0_1_3_gpll0_map[] = { 96 + [P_XO] = 0, 97 + [P_MMPLL0] = 1, 98 + [P_MMPLL1] = 2, 99 + [P_GPLL0] = 5, 100 + [P_MMPLL3] = 3, 101 + }; 102 + 103 + static const char *mmcc_xo_mmpll0_1_3_gpll0[] = { 104 + "xo", 105 + "mmpll0_vote", 106 + "mmpll1_vote", 107 + "mmss_gpll0_vote", 108 + "mmpll3", 109 + }; 110 + 111 + static const u8 mmcc_xo_dsi_hdmi_edp_map[] = { 112 + [P_XO] = 0, 113 + [P_EDPLINK] = 4, 114 + [P_HDMIPLL] = 3, 115 + [P_EDPVCO] = 5, 116 + [P_DSI0PLL] = 1, 117 + [P_DSI1PLL] = 2, 118 + }; 119 + 120 + static const char *mmcc_xo_dsi_hdmi_edp[] = { 121 + "xo", 122 + "edp_link_clk", 123 + "hdmipll", 124 + "edp_vco_div", 125 + "dsi0pll", 126 + "dsi1pll", 127 + }; 128 + 129 + static const u8 mmcc_xo_dsi_hdmi_edp_gpll0_map[] = { 130 + [P_XO] = 0, 131 + [P_EDPLINK] = 4, 132 + [P_HDMIPLL] = 3, 133 + [P_GPLL0] = 5, 134 + [P_DSI0PLL] = 1, 135 + [P_DSI1PLL] = 2, 136 + }; 137 + 138 + static const char *mmcc_xo_dsi_hdmi_edp_gpll0[] = { 139 + "xo", 140 + "edp_link_clk", 141 + "hdmipll", 142 + "gpll0_vote", 143 + "dsi0pll", 144 + "dsi1pll", 145 + }; 146 + 147 + static const u8 mmcc_xo_dsibyte_hdmi_edp_gpll0_map[] = { 148 + [P_XO] = 0, 149 + [P_EDPLINK] = 4, 150 + [P_HDMIPLL] = 3, 151 + [P_GPLL0] = 5, 152 + [P_DSI0PLL_BYTE] = 1, 153 + [P_DSI1PLL_BYTE] = 2, 154 + }; 155 + 156 + static const char *mmcc_xo_dsibyte_hdmi_edp_gpll0[] = { 157 + "xo", 158 + "edp_link_clk", 159 + "hdmipll", 160 + "gpll0_vote", 161 + "dsi0pllbyte", 162 + "dsi1pllbyte", 163 + }; 164 + 165 + static const u8 mmcc_xo_mmpll0_1_4_gpll0_map[] = { 166 + [P_XO] = 0, 167 + [P_MMPLL0] = 1, 168 + [P_MMPLL1] = 2, 169 + [P_GPLL0] = 5, 170 + [P_MMPLL4] = 3, 171 + }; 172 + 173 + static const char *mmcc_xo_mmpll0_1_4_gpll0[] = { 174 + "xo", 175 + "mmpll0", 176 + "mmpll1", 177 + "mmpll4", 178 + "gpll0", 179 + }; 180 + 181 + static const u8 mmcc_xo_mmpll0_1_4_gpll1_0_map[] = { 182 + [P_XO] = 0, 183 + [P_MMPLL0] = 1, 184 + [P_MMPLL1] = 2, 185 + [P_MMPLL4] = 3, 186 + [P_GPLL0] = 5, 187 + [P_GPLL1] = 4, 188 + }; 189 + 190 + static const char *mmcc_xo_mmpll0_1_4_gpll1_0[] = { 191 + "xo", 192 + "mmpll0", 193 + "mmpll1", 194 + "mmpll4", 195 + "gpll1", 196 + "gpll0", 197 + }; 198 + 199 + static const u8 mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map[] = { 200 + [P_XO] = 0, 201 + [P_MMPLL0] = 1, 202 + [P_MMPLL1] = 2, 203 + [P_MMPLL4] = 3, 204 + [P_GPLL0] = 5, 205 + [P_GPLL1] = 4, 206 + [P_MMSLEEP] = 6, 207 + }; 208 + 209 + static const char *mmcc_xo_mmpll0_1_4_gpll1_0_sleep[] = { 210 + "xo", 211 + "mmpll0", 212 + "mmpll1", 213 + "mmpll4", 214 + "gpll1", 215 + "gpll0", 216 + "sleep_clk_src", 217 + }; 218 + 219 + #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) } 220 + 221 + static struct clk_pll mmpll0 = { 222 + .l_reg = 0x0004, 223 + .m_reg = 0x0008, 224 + .n_reg = 0x000c, 225 + .config_reg = 0x0014, 226 + .mode_reg = 0x0000, 227 + .status_reg = 0x001c, 228 + .status_bit = 17, 229 + .clkr.hw.init = &(struct clk_init_data){ 230 + .name = "mmpll0", 231 + .parent_names = (const char *[]){ "xo" }, 232 + .num_parents = 1, 233 + .ops = &clk_pll_ops, 234 + }, 235 + }; 236 + 237 + static struct clk_regmap mmpll0_vote = { 238 + .enable_reg = 0x0100, 239 + .enable_mask = BIT(0), 240 + .hw.init = &(struct clk_init_data){ 241 + .name = "mmpll0_vote", 242 + .parent_names = (const char *[]){ "mmpll0" }, 243 + .num_parents = 1, 244 + .ops = &clk_pll_vote_ops, 245 + }, 246 + }; 247 + 248 + static struct clk_pll mmpll1 = { 249 + .l_reg = 0x0044, 250 + .m_reg = 0x0048, 251 + .n_reg = 0x004c, 252 + .config_reg = 0x0050, 253 + .mode_reg = 0x0040, 254 + .status_reg = 0x005c, 255 + .status_bit = 17, 256 + .clkr.hw.init = &(struct clk_init_data){ 257 + .name = "mmpll1", 258 + .parent_names = (const char *[]){ "xo" }, 259 + .num_parents = 1, 260 + .ops = &clk_pll_ops, 261 + }, 262 + }; 263 + 264 + static struct clk_regmap mmpll1_vote = { 265 + .enable_reg = 0x0100, 266 + .enable_mask = BIT(1), 267 + .hw.init = &(struct clk_init_data){ 268 + .name = "mmpll1_vote", 269 + .parent_names = (const char *[]){ "mmpll1" }, 270 + .num_parents = 1, 271 + .ops = &clk_pll_vote_ops, 272 + }, 273 + }; 274 + 275 + static struct clk_pll mmpll2 = { 276 + .l_reg = 0x4104, 277 + .m_reg = 0x4108, 278 + .n_reg = 0x410c, 279 + .config_reg = 0x4110, 280 + .mode_reg = 0x4100, 281 + .status_reg = 0x411c, 282 + .clkr.hw.init = &(struct clk_init_data){ 283 + .name = "mmpll2", 284 + .parent_names = (const char *[]){ "xo" }, 285 + .num_parents = 1, 286 + .ops = &clk_pll_ops, 287 + }, 288 + }; 289 + 290 + static struct clk_pll mmpll3 = { 291 + .l_reg = 0x0084, 292 + .m_reg = 0x0088, 293 + .n_reg = 0x008c, 294 + .config_reg = 0x0090, 295 + .mode_reg = 0x0080, 296 + .status_reg = 0x009c, 297 + .status_bit = 17, 298 + .clkr.hw.init = &(struct clk_init_data){ 299 + .name = "mmpll3", 300 + .parent_names = (const char *[]){ "xo" }, 301 + .num_parents = 1, 302 + .ops = &clk_pll_ops, 303 + }, 304 + }; 305 + 306 + static struct clk_pll mmpll4 = { 307 + .l_reg = 0x00a4, 308 + .m_reg = 0x00a8, 309 + .n_reg = 0x00ac, 310 + .config_reg = 0x00b0, 311 + .mode_reg = 0x0080, 312 + .status_reg = 0x00bc, 313 + .clkr.hw.init = &(struct clk_init_data){ 314 + .name = "mmpll4", 315 + .parent_names = (const char *[]){ "xo" }, 316 + .num_parents = 1, 317 + .ops = &clk_pll_ops, 318 + }, 319 + }; 320 + 321 + static struct clk_rcg2 mmss_ahb_clk_src = { 322 + .cmd_rcgr = 0x5000, 323 + .hid_width = 5, 324 + .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 325 + .clkr.hw.init = &(struct clk_init_data){ 326 + .name = "mmss_ahb_clk_src", 327 + .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 328 + .num_parents = 4, 329 + .ops = &clk_rcg2_ops, 330 + }, 331 + }; 332 + 333 + static struct freq_tbl ftbl_mmss_axi_clk[] = { 334 + F(19200000, P_XO, 1, 0, 0), 335 + F(37500000, P_GPLL0, 16, 0, 0), 336 + F(50000000, P_GPLL0, 12, 0, 0), 337 + F(75000000, P_GPLL0, 8, 0, 0), 338 + F(100000000, P_GPLL0, 6, 0, 0), 339 + F(150000000, P_GPLL0, 4, 0, 0), 340 + F(333430000, P_MMPLL1, 3.5, 0, 0), 341 + F(400000000, P_MMPLL0, 2, 0, 0), 342 + F(466800000, P_MMPLL1, 2.5, 0, 0), 343 + }; 344 + 345 + static struct clk_rcg2 mmss_axi_clk_src = { 346 + .cmd_rcgr = 0x5040, 347 + .hid_width = 5, 348 + .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 349 + .freq_tbl = ftbl_mmss_axi_clk, 350 + .clkr.hw.init = &(struct clk_init_data){ 351 + .name = "mmss_axi_clk_src", 352 + .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 353 + .num_parents = 4, 354 + .ops = &clk_rcg2_ops, 355 + }, 356 + }; 357 + 358 + static struct freq_tbl ftbl_ocmemnoc_clk[] = { 359 + F(19200000, P_XO, 1, 0, 0), 360 + F(37500000, P_GPLL0, 16, 0, 0), 361 + F(50000000, P_GPLL0, 12, 0, 0), 362 + F(75000000, P_GPLL0, 8, 0, 0), 363 + F(109090000, P_GPLL0, 5.5, 0, 0), 364 + F(150000000, P_GPLL0, 4, 0, 0), 365 + F(228570000, P_MMPLL0, 3.5, 0, 0), 366 + F(320000000, P_MMPLL0, 2.5, 0, 0), 367 + }; 368 + 369 + static struct clk_rcg2 ocmemnoc_clk_src = { 370 + .cmd_rcgr = 0x5090, 371 + .hid_width = 5, 372 + .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 373 + .freq_tbl = ftbl_ocmemnoc_clk, 374 + .clkr.hw.init = &(struct clk_init_data){ 375 + .name = "ocmemnoc_clk_src", 376 + .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 377 + .num_parents = 4, 378 + .ops = &clk_rcg2_ops, 379 + }, 380 + }; 381 + 382 + static struct freq_tbl ftbl_camss_csi0_3_clk[] = { 383 + F(100000000, P_GPLL0, 6, 0, 0), 384 + F(200000000, P_MMPLL0, 4, 0, 0), 385 + { } 386 + }; 387 + 388 + static struct clk_rcg2 csi0_clk_src = { 389 + .cmd_rcgr = 0x3090, 390 + .hid_width = 5, 391 + .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 392 + .freq_tbl = ftbl_camss_csi0_3_clk, 393 + .clkr.hw.init = &(struct clk_init_data){ 394 + .name = "csi0_clk_src", 395 + .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 396 + .num_parents = 5, 397 + .ops = &clk_rcg2_ops, 398 + }, 399 + }; 400 + 401 + static struct clk_rcg2 csi1_clk_src = { 402 + .cmd_rcgr = 0x3100, 403 + .hid_width = 5, 404 + .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 405 + .freq_tbl = ftbl_camss_csi0_3_clk, 406 + .clkr.hw.init = &(struct clk_init_data){ 407 + .name = "csi1_clk_src", 408 + .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 409 + .num_parents = 5, 410 + .ops = &clk_rcg2_ops, 411 + }, 412 + }; 413 + 414 + static struct clk_rcg2 csi2_clk_src = { 415 + .cmd_rcgr = 0x3160, 416 + .hid_width = 5, 417 + .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 418 + .freq_tbl = ftbl_camss_csi0_3_clk, 419 + .clkr.hw.init = &(struct clk_init_data){ 420 + .name = "csi2_clk_src", 421 + .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 422 + .num_parents = 5, 423 + .ops = &clk_rcg2_ops, 424 + }, 425 + }; 426 + 427 + static struct clk_rcg2 csi3_clk_src = { 428 + .cmd_rcgr = 0x31c0, 429 + .hid_width = 5, 430 + .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 431 + .freq_tbl = ftbl_camss_csi0_3_clk, 432 + .clkr.hw.init = &(struct clk_init_data){ 433 + .name = "csi3_clk_src", 434 + .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 435 + .num_parents = 5, 436 + .ops = &clk_rcg2_ops, 437 + }, 438 + }; 439 + 440 + static struct freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = { 441 + F(37500000, P_GPLL0, 16, 0, 0), 442 + F(50000000, P_GPLL0, 12, 0, 0), 443 + F(60000000, P_GPLL0, 10, 0, 0), 444 + F(80000000, P_GPLL0, 7.5, 0, 0), 445 + F(100000000, P_GPLL0, 6, 0, 0), 446 + F(109090000, P_GPLL0, 5.5, 0, 0), 447 + F(133330000, P_GPLL0, 4.5, 0, 0), 448 + F(200000000, P_GPLL0, 3, 0, 0), 449 + F(228570000, P_MMPLL0, 3.5, 0, 0), 450 + F(266670000, P_MMPLL0, 3, 0, 0), 451 + F(320000000, P_MMPLL0, 2.5, 0, 0), 452 + F(465000000, P_MMPLL4, 2, 0, 0), 453 + F(600000000, P_GPLL0, 1, 0, 0), 454 + { } 455 + }; 456 + 457 + static struct clk_rcg2 vfe0_clk_src = { 458 + .cmd_rcgr = 0x3600, 459 + .hid_width = 5, 460 + .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 461 + .freq_tbl = ftbl_camss_vfe_vfe0_1_clk, 462 + .clkr.hw.init = &(struct clk_init_data){ 463 + .name = "vfe0_clk_src", 464 + .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 465 + .num_parents = 5, 466 + .ops = &clk_rcg2_ops, 467 + }, 468 + }; 469 + 470 + static struct clk_rcg2 vfe1_clk_src = { 471 + .cmd_rcgr = 0x3620, 472 + .hid_width = 5, 473 + .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 474 + .freq_tbl = ftbl_camss_vfe_vfe0_1_clk, 475 + .clkr.hw.init = &(struct clk_init_data){ 476 + .name = "vfe1_clk_src", 477 + .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 478 + .num_parents = 5, 479 + .ops = &clk_rcg2_ops, 480 + }, 481 + }; 482 + 483 + static struct freq_tbl ftbl_mdss_mdp_clk[] = { 484 + F(37500000, P_GPLL0, 16, 0, 0), 485 + F(60000000, P_GPLL0, 10, 0, 0), 486 + F(75000000, P_GPLL0, 8, 0, 0), 487 + F(85710000, P_GPLL0, 7, 0, 0), 488 + F(100000000, P_GPLL0, 6, 0, 0), 489 + F(150000000, P_GPLL0, 4, 0, 0), 490 + F(160000000, P_MMPLL0, 5, 0, 0), 491 + F(200000000, P_MMPLL0, 4, 0, 0), 492 + F(228570000, P_MMPLL0, 3.5, 0, 0), 493 + F(300000000, P_GPLL0, 2, 0, 0), 494 + F(320000000, P_MMPLL0, 2.5, 0, 0), 495 + { } 496 + }; 497 + 498 + static struct clk_rcg2 mdp_clk_src = { 499 + .cmd_rcgr = 0x2040, 500 + .hid_width = 5, 501 + .parent_map = mmcc_xo_mmpll0_dsi_hdmi_gpll0_map, 502 + .freq_tbl = ftbl_mdss_mdp_clk, 503 + .clkr.hw.init = &(struct clk_init_data){ 504 + .name = "mdp_clk_src", 505 + .parent_names = mmcc_xo_mmpll0_dsi_hdmi_gpll0, 506 + .num_parents = 6, 507 + .ops = &clk_rcg2_ops, 508 + }, 509 + }; 510 + 511 + static struct clk_rcg2 gfx3d_clk_src = { 512 + .cmd_rcgr = 0x4000, 513 + .hid_width = 5, 514 + .parent_map = mmcc_xo_mmpll0_1_2_gpll0_map, 515 + .clkr.hw.init = &(struct clk_init_data){ 516 + .name = "gfx3d_clk_src", 517 + .parent_names = mmcc_xo_mmpll0_1_2_gpll0, 518 + .num_parents = 5, 519 + .ops = &clk_rcg2_ops, 520 + }, 521 + }; 522 + 523 + static struct freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = { 524 + F(75000000, P_GPLL0, 8, 0, 0), 525 + F(133330000, P_GPLL0, 4.5, 0, 0), 526 + F(200000000, P_GPLL0, 3, 0, 0), 527 + F(228570000, P_MMPLL0, 3.5, 0, 0), 528 + F(266670000, P_MMPLL0, 3, 0, 0), 529 + F(320000000, P_MMPLL0, 2.5, 0, 0), 530 + { } 531 + }; 532 + 533 + static struct clk_rcg2 jpeg0_clk_src = { 534 + .cmd_rcgr = 0x3500, 535 + .hid_width = 5, 536 + .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 537 + .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk, 538 + .clkr.hw.init = &(struct clk_init_data){ 539 + .name = "jpeg0_clk_src", 540 + .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 541 + .num_parents = 5, 542 + .ops = &clk_rcg2_ops, 543 + }, 544 + }; 545 + 546 + static struct clk_rcg2 jpeg1_clk_src = { 547 + .cmd_rcgr = 0x3520, 548 + .hid_width = 5, 549 + .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 550 + .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk, 551 + .clkr.hw.init = &(struct clk_init_data){ 552 + .name = "jpeg1_clk_src", 553 + .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 554 + .num_parents = 5, 555 + .ops = &clk_rcg2_ops, 556 + }, 557 + }; 558 + 559 + static struct clk_rcg2 jpeg2_clk_src = { 560 + .cmd_rcgr = 0x3540, 561 + .hid_width = 5, 562 + .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 563 + .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk, 564 + .clkr.hw.init = &(struct clk_init_data){ 565 + .name = "jpeg2_clk_src", 566 + .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 567 + .num_parents = 5, 568 + .ops = &clk_rcg2_ops, 569 + }, 570 + }; 571 + 572 + static struct freq_tbl pixel_freq_tbl[] = { 573 + { .src = P_DSI0PLL }, 574 + { } 575 + }; 576 + 577 + static struct clk_rcg2 pclk0_clk_src = { 578 + .cmd_rcgr = 0x2000, 579 + .mnd_width = 8, 580 + .hid_width = 5, 581 + .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map, 582 + .freq_tbl = pixel_freq_tbl, 583 + .clkr.hw.init = &(struct clk_init_data){ 584 + .name = "pclk0_clk_src", 585 + .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, 586 + .num_parents = 6, 587 + .ops = &clk_pixel_ops, 588 + .flags = CLK_SET_RATE_PARENT, 589 + }, 590 + }; 591 + 592 + static struct clk_rcg2 pclk1_clk_src = { 593 + .cmd_rcgr = 0x2020, 594 + .mnd_width = 8, 595 + .hid_width = 5, 596 + .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map, 597 + .freq_tbl = pixel_freq_tbl, 598 + .clkr.hw.init = &(struct clk_init_data){ 599 + .name = "pclk1_clk_src", 600 + .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, 601 + .num_parents = 6, 602 + .ops = &clk_pixel_ops, 603 + .flags = CLK_SET_RATE_PARENT, 604 + }, 605 + }; 606 + 607 + static struct freq_tbl ftbl_venus0_vcodec0_clk[] = { 608 + F(50000000, P_GPLL0, 12, 0, 0), 609 + F(100000000, P_GPLL0, 6, 0, 0), 610 + F(133330000, P_GPLL0, 4.5, 0, 0), 611 + F(200000000, P_MMPLL0, 4, 0, 0), 612 + F(266670000, P_MMPLL0, 3, 0, 0), 613 + F(465000000, P_MMPLL3, 2, 0, 0), 614 + { } 615 + }; 616 + 617 + static struct clk_rcg2 vcodec0_clk_src = { 618 + .cmd_rcgr = 0x1000, 619 + .mnd_width = 8, 620 + .hid_width = 5, 621 + .parent_map = mmcc_xo_mmpll0_1_3_gpll0_map, 622 + .freq_tbl = ftbl_venus0_vcodec0_clk, 623 + .clkr.hw.init = &(struct clk_init_data){ 624 + .name = "vcodec0_clk_src", 625 + .parent_names = mmcc_xo_mmpll0_1_3_gpll0, 626 + .num_parents = 5, 627 + .ops = &clk_rcg2_ops, 628 + }, 629 + }; 630 + 631 + static struct freq_tbl ftbl_avsync_vp_clk[] = { 632 + F(150000000, P_GPLL0, 4, 0, 0), 633 + F(320000000, P_MMPLL0, 2.5, 0, 0), 634 + { } 635 + }; 636 + 637 + static struct clk_rcg2 vp_clk_src = { 638 + .cmd_rcgr = 0x2430, 639 + .hid_width = 5, 640 + .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 641 + .freq_tbl = ftbl_avsync_vp_clk, 642 + .clkr.hw.init = &(struct clk_init_data){ 643 + .name = "vp_clk_src", 644 + .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 645 + .num_parents = 4, 646 + .ops = &clk_rcg2_ops, 647 + }, 648 + }; 649 + 650 + static struct freq_tbl ftbl_camss_cci_cci_clk[] = { 651 + F(19200000, P_XO, 1, 0, 0), 652 + { } 653 + }; 654 + 655 + static struct clk_rcg2 cci_clk_src = { 656 + .cmd_rcgr = 0x3300, 657 + .mnd_width = 8, 658 + .hid_width = 5, 659 + .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map, 660 + .freq_tbl = ftbl_camss_cci_cci_clk, 661 + .clkr.hw.init = &(struct clk_init_data){ 662 + .name = "cci_clk_src", 663 + .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0, 664 + .num_parents = 6, 665 + .ops = &clk_rcg2_ops, 666 + }, 667 + }; 668 + 669 + static struct freq_tbl ftbl_camss_gp0_1_clk[] = { 670 + F(10000, P_XO, 16, 1, 120), 671 + F(24000, P_XO, 16, 1, 50), 672 + F(6000000, P_GPLL0, 10, 1, 10), 673 + F(12000000, P_GPLL0, 10, 1, 5), 674 + F(13000000, P_GPLL0, 4, 13, 150), 675 + F(24000000, P_GPLL0, 5, 1, 5), 676 + { } 677 + }; 678 + 679 + static struct clk_rcg2 camss_gp0_clk_src = { 680 + .cmd_rcgr = 0x3420, 681 + .mnd_width = 8, 682 + .hid_width = 5, 683 + .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map, 684 + .freq_tbl = ftbl_camss_gp0_1_clk, 685 + .clkr.hw.init = &(struct clk_init_data){ 686 + .name = "camss_gp0_clk_src", 687 + .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0_sleep, 688 + .num_parents = 7, 689 + .ops = &clk_rcg2_ops, 690 + }, 691 + }; 692 + 693 + static struct clk_rcg2 camss_gp1_clk_src = { 694 + .cmd_rcgr = 0x3450, 695 + .mnd_width = 8, 696 + .hid_width = 5, 697 + .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map, 698 + .freq_tbl = ftbl_camss_gp0_1_clk, 699 + .clkr.hw.init = &(struct clk_init_data){ 700 + .name = "camss_gp1_clk_src", 701 + .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0_sleep, 702 + .num_parents = 7, 703 + .ops = &clk_rcg2_ops, 704 + }, 705 + }; 706 + 707 + static struct freq_tbl ftbl_camss_mclk0_3_clk[] = { 708 + F(4800000, P_XO, 4, 0, 0), 709 + F(6000000, P_GPLL0, 10, 1, 10), 710 + F(8000000, P_GPLL0, 15, 1, 5), 711 + F(9600000, P_XO, 2, 0, 0), 712 + F(16000000, P_MMPLL0, 10, 1, 5), 713 + F(19200000, P_XO, 1, 0, 0), 714 + F(24000000, P_GPLL0, 5, 1, 5), 715 + F(32000000, P_MMPLL0, 5, 1, 5), 716 + F(48000000, P_GPLL0, 12.5, 0, 0), 717 + F(64000000, P_MMPLL0, 12.5, 0, 0), 718 + { } 719 + }; 720 + 721 + static struct clk_rcg2 mclk0_clk_src = { 722 + .cmd_rcgr = 0x3360, 723 + .mnd_width = 8, 724 + .hid_width = 5, 725 + .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map, 726 + .freq_tbl = ftbl_camss_mclk0_3_clk, 727 + .clkr.hw.init = &(struct clk_init_data){ 728 + .name = "mclk0_clk_src", 729 + .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0, 730 + .num_parents = 6, 731 + .ops = &clk_rcg2_ops, 732 + }, 733 + }; 734 + 735 + static struct clk_rcg2 mclk1_clk_src = { 736 + .cmd_rcgr = 0x3390, 737 + .mnd_width = 8, 738 + .hid_width = 5, 739 + .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map, 740 + .freq_tbl = ftbl_camss_mclk0_3_clk, 741 + .clkr.hw.init = &(struct clk_init_data){ 742 + .name = "mclk1_clk_src", 743 + .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0, 744 + .num_parents = 6, 745 + .ops = &clk_rcg2_ops, 746 + }, 747 + }; 748 + 749 + static struct clk_rcg2 mclk2_clk_src = { 750 + .cmd_rcgr = 0x33c0, 751 + .mnd_width = 8, 752 + .hid_width = 5, 753 + .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map, 754 + .freq_tbl = ftbl_camss_mclk0_3_clk, 755 + .clkr.hw.init = &(struct clk_init_data){ 756 + .name = "mclk2_clk_src", 757 + .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0, 758 + .num_parents = 6, 759 + .ops = &clk_rcg2_ops, 760 + }, 761 + }; 762 + 763 + static struct clk_rcg2 mclk3_clk_src = { 764 + .cmd_rcgr = 0x33f0, 765 + .mnd_width = 8, 766 + .hid_width = 5, 767 + .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map, 768 + .freq_tbl = ftbl_camss_mclk0_3_clk, 769 + .clkr.hw.init = &(struct clk_init_data){ 770 + .name = "mclk3_clk_src", 771 + .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0, 772 + .num_parents = 6, 773 + .ops = &clk_rcg2_ops, 774 + }, 775 + }; 776 + 777 + static struct freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = { 778 + F(100000000, P_GPLL0, 6, 0, 0), 779 + F(200000000, P_MMPLL0, 4, 0, 0), 780 + { } 781 + }; 782 + 783 + static struct clk_rcg2 csi0phytimer_clk_src = { 784 + .cmd_rcgr = 0x3000, 785 + .hid_width = 5, 786 + .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 787 + .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk, 788 + .clkr.hw.init = &(struct clk_init_data){ 789 + .name = "csi0phytimer_clk_src", 790 + .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 791 + .num_parents = 5, 792 + .ops = &clk_rcg2_ops, 793 + }, 794 + }; 795 + 796 + static struct clk_rcg2 csi1phytimer_clk_src = { 797 + .cmd_rcgr = 0x3030, 798 + .hid_width = 5, 799 + .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 800 + .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk, 801 + .clkr.hw.init = &(struct clk_init_data){ 802 + .name = "csi1phytimer_clk_src", 803 + .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 804 + .num_parents = 5, 805 + .ops = &clk_rcg2_ops, 806 + }, 807 + }; 808 + 809 + static struct clk_rcg2 csi2phytimer_clk_src = { 810 + .cmd_rcgr = 0x3060, 811 + .hid_width = 5, 812 + .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 813 + .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk, 814 + .clkr.hw.init = &(struct clk_init_data){ 815 + .name = "csi2phytimer_clk_src", 816 + .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 817 + .num_parents = 5, 818 + .ops = &clk_rcg2_ops, 819 + }, 820 + }; 821 + 822 + static struct freq_tbl ftbl_camss_vfe_cpp_clk[] = { 823 + F(133330000, P_GPLL0, 4.5, 0, 0), 824 + F(266670000, P_MMPLL0, 3, 0, 0), 825 + F(320000000, P_MMPLL0, 2.5, 0, 0), 826 + F(372000000, P_MMPLL4, 2.5, 0, 0), 827 + F(465000000, P_MMPLL4, 2, 0, 0), 828 + F(600000000, P_GPLL0, 1, 0, 0), 829 + { } 830 + }; 831 + 832 + static struct clk_rcg2 cpp_clk_src = { 833 + .cmd_rcgr = 0x3640, 834 + .hid_width = 5, 835 + .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map, 836 + .freq_tbl = ftbl_camss_vfe_cpp_clk, 837 + .clkr.hw.init = &(struct clk_init_data){ 838 + .name = "cpp_clk_src", 839 + .parent_names = mmcc_xo_mmpll0_1_4_gpll0, 840 + .num_parents = 5, 841 + .ops = &clk_rcg2_ops, 842 + }, 843 + }; 844 + 845 + static struct freq_tbl byte_freq_tbl[] = { 846 + { .src = P_DSI0PLL_BYTE }, 847 + { } 848 + }; 849 + 850 + static struct clk_rcg2 byte0_clk_src = { 851 + .cmd_rcgr = 0x2120, 852 + .hid_width = 5, 853 + .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map, 854 + .freq_tbl = byte_freq_tbl, 855 + .clkr.hw.init = &(struct clk_init_data){ 856 + .name = "byte0_clk_src", 857 + .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0, 858 + .num_parents = 6, 859 + .ops = &clk_byte_ops, 860 + .flags = CLK_SET_RATE_PARENT, 861 + }, 862 + }; 863 + 864 + static struct clk_rcg2 byte1_clk_src = { 865 + .cmd_rcgr = 0x2140, 866 + .hid_width = 5, 867 + .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map, 868 + .freq_tbl = byte_freq_tbl, 869 + .clkr.hw.init = &(struct clk_init_data){ 870 + .name = "byte1_clk_src", 871 + .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0, 872 + .num_parents = 6, 873 + .ops = &clk_byte_ops, 874 + .flags = CLK_SET_RATE_PARENT, 875 + }, 876 + }; 877 + 878 + static struct freq_tbl ftbl_mdss_edpaux_clk[] = { 879 + F(19200000, P_XO, 1, 0, 0), 880 + { } 881 + }; 882 + 883 + static struct clk_rcg2 edpaux_clk_src = { 884 + .cmd_rcgr = 0x20e0, 885 + .hid_width = 5, 886 + .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 887 + .freq_tbl = ftbl_mdss_edpaux_clk, 888 + .clkr.hw.init = &(struct clk_init_data){ 889 + .name = "edpaux_clk_src", 890 + .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 891 + .num_parents = 4, 892 + .ops = &clk_rcg2_ops, 893 + }, 894 + }; 895 + 896 + static struct freq_tbl ftbl_mdss_edplink_clk[] = { 897 + F(135000000, P_EDPLINK, 2, 0, 0), 898 + F(270000000, P_EDPLINK, 11, 0, 0), 899 + { } 900 + }; 901 + 902 + static struct clk_rcg2 edplink_clk_src = { 903 + .cmd_rcgr = 0x20c0, 904 + .hid_width = 5, 905 + .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map, 906 + .freq_tbl = ftbl_mdss_edplink_clk, 907 + .clkr.hw.init = &(struct clk_init_data){ 908 + .name = "edplink_clk_src", 909 + .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, 910 + .num_parents = 6, 911 + .ops = &clk_rcg2_ops, 912 + .flags = CLK_SET_RATE_PARENT, 913 + }, 914 + }; 915 + 916 + static struct freq_tbl edp_pixel_freq_tbl[] = { 917 + { .src = P_EDPVCO }, 918 + { } 919 + }; 920 + 921 + static struct clk_rcg2 edppixel_clk_src = { 922 + .cmd_rcgr = 0x20a0, 923 + .mnd_width = 8, 924 + .hid_width = 5, 925 + .parent_map = mmcc_xo_dsi_hdmi_edp_map, 926 + .freq_tbl = edp_pixel_freq_tbl, 927 + .clkr.hw.init = &(struct clk_init_data){ 928 + .name = "edppixel_clk_src", 929 + .parent_names = mmcc_xo_dsi_hdmi_edp, 930 + .num_parents = 6, 931 + .ops = &clk_edp_pixel_ops, 932 + }, 933 + }; 934 + 935 + static struct freq_tbl ftbl_mdss_esc0_1_clk[] = { 936 + F(19200000, P_XO, 1, 0, 0), 937 + { } 938 + }; 939 + 940 + static struct clk_rcg2 esc0_clk_src = { 941 + .cmd_rcgr = 0x2160, 942 + .hid_width = 5, 943 + .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map, 944 + .freq_tbl = ftbl_mdss_esc0_1_clk, 945 + .clkr.hw.init = &(struct clk_init_data){ 946 + .name = "esc0_clk_src", 947 + .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0, 948 + .num_parents = 6, 949 + .ops = &clk_rcg2_ops, 950 + }, 951 + }; 952 + 953 + static struct clk_rcg2 esc1_clk_src = { 954 + .cmd_rcgr = 0x2180, 955 + .hid_width = 5, 956 + .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map, 957 + .freq_tbl = ftbl_mdss_esc0_1_clk, 958 + .clkr.hw.init = &(struct clk_init_data){ 959 + .name = "esc1_clk_src", 960 + .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0, 961 + .num_parents = 6, 962 + .ops = &clk_rcg2_ops, 963 + }, 964 + }; 965 + 966 + static struct freq_tbl extpclk_freq_tbl[] = { 967 + { .src = P_HDMIPLL }, 968 + { } 969 + }; 970 + 971 + static struct clk_rcg2 extpclk_clk_src = { 972 + .cmd_rcgr = 0x2060, 973 + .hid_width = 5, 974 + .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map, 975 + .freq_tbl = extpclk_freq_tbl, 976 + .clkr.hw.init = &(struct clk_init_data){ 977 + .name = "extpclk_clk_src", 978 + .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, 979 + .num_parents = 6, 980 + .ops = &clk_byte_ops, 981 + .flags = CLK_SET_RATE_PARENT, 982 + }, 983 + }; 984 + 985 + static struct freq_tbl ftbl_mdss_hdmi_clk[] = { 986 + F(19200000, P_XO, 1, 0, 0), 987 + { } 988 + }; 989 + 990 + static struct clk_rcg2 hdmi_clk_src = { 991 + .cmd_rcgr = 0x2100, 992 + .hid_width = 5, 993 + .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 994 + .freq_tbl = ftbl_mdss_hdmi_clk, 995 + .clkr.hw.init = &(struct clk_init_data){ 996 + .name = "hdmi_clk_src", 997 + .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 998 + .num_parents = 4, 999 + .ops = &clk_rcg2_ops, 1000 + }, 1001 + }; 1002 + 1003 + static struct freq_tbl ftbl_mdss_vsync_clk[] = { 1004 + F(19200000, P_XO, 1, 0, 0), 1005 + { } 1006 + }; 1007 + 1008 + static struct clk_rcg2 vsync_clk_src = { 1009 + .cmd_rcgr = 0x2080, 1010 + .hid_width = 5, 1011 + .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 1012 + .freq_tbl = ftbl_mdss_vsync_clk, 1013 + .clkr.hw.init = &(struct clk_init_data){ 1014 + .name = "vsync_clk_src", 1015 + .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 1016 + .num_parents = 4, 1017 + .ops = &clk_rcg2_ops, 1018 + }, 1019 + }; 1020 + 1021 + static struct freq_tbl ftbl_mmss_rbcpr_clk[] = { 1022 + F(50000000, P_GPLL0, 12, 0, 0), 1023 + { } 1024 + }; 1025 + 1026 + static struct clk_rcg2 rbcpr_clk_src = { 1027 + .cmd_rcgr = 0x4060, 1028 + .hid_width = 5, 1029 + .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 1030 + .freq_tbl = ftbl_mmss_rbcpr_clk, 1031 + .clkr.hw.init = &(struct clk_init_data){ 1032 + .name = "rbcpr_clk_src", 1033 + .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 1034 + .num_parents = 4, 1035 + .ops = &clk_rcg2_ops, 1036 + }, 1037 + }; 1038 + 1039 + static struct freq_tbl ftbl_oxili_rbbmtimer_clk[] = { 1040 + F(19200000, P_XO, 1, 0, 0), 1041 + { } 1042 + }; 1043 + 1044 + static struct clk_rcg2 rbbmtimer_clk_src = { 1045 + .cmd_rcgr = 0x4090, 1046 + .hid_width = 5, 1047 + .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 1048 + .freq_tbl = ftbl_oxili_rbbmtimer_clk, 1049 + .clkr.hw.init = &(struct clk_init_data){ 1050 + .name = "rbbmtimer_clk_src", 1051 + .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 1052 + .num_parents = 4, 1053 + .ops = &clk_rcg2_ops, 1054 + }, 1055 + }; 1056 + 1057 + static struct freq_tbl ftbl_vpu_maple_clk[] = { 1058 + F(50000000, P_GPLL0, 12, 0, 0), 1059 + F(100000000, P_GPLL0, 6, 0, 0), 1060 + F(133330000, P_GPLL0, 4.5, 0, 0), 1061 + F(200000000, P_MMPLL0, 4, 0, 0), 1062 + F(266670000, P_MMPLL0, 3, 0, 0), 1063 + F(465000000, P_MMPLL3, 2, 0, 0), 1064 + { } 1065 + }; 1066 + 1067 + static struct clk_rcg2 maple_clk_src = { 1068 + .cmd_rcgr = 0x1320, 1069 + .hid_width = 5, 1070 + .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 1071 + .freq_tbl = ftbl_vpu_maple_clk, 1072 + .clkr.hw.init = &(struct clk_init_data){ 1073 + .name = "maple_clk_src", 1074 + .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 1075 + .num_parents = 4, 1076 + .ops = &clk_rcg2_ops, 1077 + }, 1078 + }; 1079 + 1080 + static struct freq_tbl ftbl_vpu_vdp_clk[] = { 1081 + F(50000000, P_GPLL0, 12, 0, 0), 1082 + F(100000000, P_GPLL0, 6, 0, 0), 1083 + F(200000000, P_MMPLL0, 4, 0, 0), 1084 + F(320000000, P_MMPLL0, 2.5, 0, 0), 1085 + F(400000000, P_MMPLL0, 2, 0, 0), 1086 + { } 1087 + }; 1088 + 1089 + static struct clk_rcg2 vdp_clk_src = { 1090 + .cmd_rcgr = 0x1300, 1091 + .hid_width = 5, 1092 + .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 1093 + .freq_tbl = ftbl_vpu_vdp_clk, 1094 + .clkr.hw.init = &(struct clk_init_data){ 1095 + .name = "vdp_clk_src", 1096 + .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 1097 + .num_parents = 4, 1098 + .ops = &clk_rcg2_ops, 1099 + }, 1100 + }; 1101 + 1102 + static struct freq_tbl ftbl_vpu_bus_clk[] = { 1103 + F(40000000, P_GPLL0, 15, 0, 0), 1104 + F(80000000, P_MMPLL0, 10, 0, 0), 1105 + { } 1106 + }; 1107 + 1108 + static struct clk_rcg2 vpu_bus_clk_src = { 1109 + .cmd_rcgr = 0x1340, 1110 + .hid_width = 5, 1111 + .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map, 1112 + .freq_tbl = ftbl_vpu_bus_clk, 1113 + .clkr.hw.init = &(struct clk_init_data){ 1114 + .name = "vpu_bus_clk_src", 1115 + .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0, 1116 + .num_parents = 4, 1117 + .ops = &clk_rcg2_ops, 1118 + }, 1119 + }; 1120 + 1121 + static struct clk_branch mmss_cxo_clk = { 1122 + .halt_reg = 0x5104, 1123 + .clkr = { 1124 + .enable_reg = 0x5104, 1125 + .enable_mask = BIT(0), 1126 + .hw.init = &(struct clk_init_data){ 1127 + .name = "mmss_cxo_clk", 1128 + .parent_names = (const char *[]){ "xo" }, 1129 + .num_parents = 1, 1130 + .flags = CLK_SET_RATE_PARENT, 1131 + .ops = &clk_branch2_ops, 1132 + }, 1133 + }, 1134 + }; 1135 + 1136 + static struct clk_branch mmss_sleepclk_clk = { 1137 + .halt_reg = 0x5100, 1138 + .clkr = { 1139 + .enable_reg = 0x5100, 1140 + .enable_mask = BIT(0), 1141 + .hw.init = &(struct clk_init_data){ 1142 + .name = "mmss_sleepclk_clk", 1143 + .parent_names = (const char *[]){ 1144 + "sleep_clk_src", 1145 + }, 1146 + .num_parents = 1, 1147 + .flags = CLK_SET_RATE_PARENT, 1148 + .ops = &clk_branch2_ops, 1149 + }, 1150 + }, 1151 + }; 1152 + 1153 + static struct clk_branch avsync_ahb_clk = { 1154 + .halt_reg = 0x2414, 1155 + .clkr = { 1156 + .enable_reg = 0x2414, 1157 + .enable_mask = BIT(0), 1158 + .hw.init = &(struct clk_init_data){ 1159 + .name = "avsync_ahb_clk", 1160 + .parent_names = (const char *[]){ 1161 + "mmss_ahb_clk_src", 1162 + }, 1163 + .num_parents = 1, 1164 + .flags = CLK_SET_RATE_PARENT, 1165 + .ops = &clk_branch2_ops, 1166 + }, 1167 + }, 1168 + }; 1169 + 1170 + static struct clk_branch avsync_edppixel_clk = { 1171 + .halt_reg = 0x2418, 1172 + .clkr = { 1173 + .enable_reg = 0x2418, 1174 + .enable_mask = BIT(0), 1175 + .hw.init = &(struct clk_init_data){ 1176 + .name = "avsync_edppixel_clk", 1177 + .parent_names = (const char *[]){ 1178 + "edppixel_clk_src", 1179 + }, 1180 + .num_parents = 1, 1181 + .flags = CLK_SET_RATE_PARENT, 1182 + .ops = &clk_branch2_ops, 1183 + }, 1184 + }, 1185 + }; 1186 + 1187 + static struct clk_branch avsync_extpclk_clk = { 1188 + .halt_reg = 0x2410, 1189 + .clkr = { 1190 + .enable_reg = 0x2410, 1191 + .enable_mask = BIT(0), 1192 + .hw.init = &(struct clk_init_data){ 1193 + .name = "avsync_extpclk_clk", 1194 + .parent_names = (const char *[]){ 1195 + "extpclk_clk_src", 1196 + }, 1197 + .num_parents = 1, 1198 + .flags = CLK_SET_RATE_PARENT, 1199 + .ops = &clk_branch2_ops, 1200 + }, 1201 + }, 1202 + }; 1203 + 1204 + static struct clk_branch avsync_pclk0_clk = { 1205 + .halt_reg = 0x241c, 1206 + .clkr = { 1207 + .enable_reg = 0x241c, 1208 + .enable_mask = BIT(0), 1209 + .hw.init = &(struct clk_init_data){ 1210 + .name = "avsync_pclk0_clk", 1211 + .parent_names = (const char *[]){ 1212 + "pclk0_clk_src", 1213 + }, 1214 + .num_parents = 1, 1215 + .flags = CLK_SET_RATE_PARENT, 1216 + .ops = &clk_branch2_ops, 1217 + }, 1218 + }, 1219 + }; 1220 + 1221 + static struct clk_branch avsync_pclk1_clk = { 1222 + .halt_reg = 0x2420, 1223 + .clkr = { 1224 + .enable_reg = 0x2420, 1225 + .enable_mask = BIT(0), 1226 + .hw.init = &(struct clk_init_data){ 1227 + .name = "avsync_pclk1_clk", 1228 + .parent_names = (const char *[]){ 1229 + "pclk1_clk_src", 1230 + }, 1231 + .num_parents = 1, 1232 + .flags = CLK_SET_RATE_PARENT, 1233 + .ops = &clk_branch2_ops, 1234 + }, 1235 + }, 1236 + }; 1237 + 1238 + static struct clk_branch avsync_vp_clk = { 1239 + .halt_reg = 0x2404, 1240 + .clkr = { 1241 + .enable_reg = 0x2404, 1242 + .enable_mask = BIT(0), 1243 + .hw.init = &(struct clk_init_data){ 1244 + .name = "avsync_vp_clk", 1245 + .parent_names = (const char *[]){ 1246 + "vp_clk_src", 1247 + }, 1248 + .num_parents = 1, 1249 + .flags = CLK_SET_RATE_PARENT, 1250 + .ops = &clk_branch2_ops, 1251 + }, 1252 + }, 1253 + }; 1254 + 1255 + static struct clk_branch camss_ahb_clk = { 1256 + .halt_reg = 0x348c, 1257 + .clkr = { 1258 + .enable_reg = 0x348c, 1259 + .enable_mask = BIT(0), 1260 + .hw.init = &(struct clk_init_data){ 1261 + .name = "camss_ahb_clk", 1262 + .parent_names = (const char *[]){ 1263 + "mmss_ahb_clk_src", 1264 + }, 1265 + .num_parents = 1, 1266 + .flags = CLK_SET_RATE_PARENT, 1267 + .ops = &clk_branch2_ops, 1268 + }, 1269 + }, 1270 + }; 1271 + 1272 + static struct clk_branch camss_cci_cci_ahb_clk = { 1273 + .halt_reg = 0x3348, 1274 + .clkr = { 1275 + .enable_reg = 0x3348, 1276 + .enable_mask = BIT(0), 1277 + .hw.init = &(struct clk_init_data){ 1278 + .name = "camss_cci_cci_ahb_clk", 1279 + .parent_names = (const char *[]){ 1280 + "mmss_ahb_clk_src", 1281 + }, 1282 + .num_parents = 1, 1283 + .ops = &clk_branch2_ops, 1284 + }, 1285 + }, 1286 + }; 1287 + 1288 + static struct clk_branch camss_cci_cci_clk = { 1289 + .halt_reg = 0x3344, 1290 + .clkr = { 1291 + .enable_reg = 0x3344, 1292 + .enable_mask = BIT(0), 1293 + .hw.init = &(struct clk_init_data){ 1294 + .name = "camss_cci_cci_clk", 1295 + .parent_names = (const char *[]){ 1296 + "cci_clk_src", 1297 + }, 1298 + .num_parents = 1, 1299 + .flags = CLK_SET_RATE_PARENT, 1300 + .ops = &clk_branch2_ops, 1301 + }, 1302 + }, 1303 + }; 1304 + 1305 + static struct clk_branch camss_csi0_ahb_clk = { 1306 + .halt_reg = 0x30bc, 1307 + .clkr = { 1308 + .enable_reg = 0x30bc, 1309 + .enable_mask = BIT(0), 1310 + .hw.init = &(struct clk_init_data){ 1311 + .name = "camss_csi0_ahb_clk", 1312 + .parent_names = (const char *[]){ 1313 + "mmss_ahb_clk_src", 1314 + }, 1315 + .num_parents = 1, 1316 + .ops = &clk_branch2_ops, 1317 + }, 1318 + }, 1319 + }; 1320 + 1321 + static struct clk_branch camss_csi0_clk = { 1322 + .halt_reg = 0x30b4, 1323 + .clkr = { 1324 + .enable_reg = 0x30b4, 1325 + .enable_mask = BIT(0), 1326 + .hw.init = &(struct clk_init_data){ 1327 + .name = "camss_csi0_clk", 1328 + .parent_names = (const char *[]){ 1329 + "csi0_clk_src", 1330 + }, 1331 + .num_parents = 1, 1332 + .flags = CLK_SET_RATE_PARENT, 1333 + .ops = &clk_branch2_ops, 1334 + }, 1335 + }, 1336 + }; 1337 + 1338 + static struct clk_branch camss_csi0phy_clk = { 1339 + .halt_reg = 0x30c4, 1340 + .clkr = { 1341 + .enable_reg = 0x30c4, 1342 + .enable_mask = BIT(0), 1343 + .hw.init = &(struct clk_init_data){ 1344 + .name = "camss_csi0phy_clk", 1345 + .parent_names = (const char *[]){ 1346 + "csi0_clk_src", 1347 + }, 1348 + .num_parents = 1, 1349 + .flags = CLK_SET_RATE_PARENT, 1350 + .ops = &clk_branch2_ops, 1351 + }, 1352 + }, 1353 + }; 1354 + 1355 + static struct clk_branch camss_csi0pix_clk = { 1356 + .halt_reg = 0x30e4, 1357 + .clkr = { 1358 + .enable_reg = 0x30e4, 1359 + .enable_mask = BIT(0), 1360 + .hw.init = &(struct clk_init_data){ 1361 + .name = "camss_csi0pix_clk", 1362 + .parent_names = (const char *[]){ 1363 + "csi0_clk_src", 1364 + }, 1365 + .num_parents = 1, 1366 + .flags = CLK_SET_RATE_PARENT, 1367 + .ops = &clk_branch2_ops, 1368 + }, 1369 + }, 1370 + }; 1371 + 1372 + static struct clk_branch camss_csi0rdi_clk = { 1373 + .halt_reg = 0x30d4, 1374 + .clkr = { 1375 + .enable_reg = 0x30d4, 1376 + .enable_mask = BIT(0), 1377 + .hw.init = &(struct clk_init_data){ 1378 + .name = "camss_csi0rdi_clk", 1379 + .parent_names = (const char *[]){ 1380 + "csi0_clk_src", 1381 + }, 1382 + .num_parents = 1, 1383 + .flags = CLK_SET_RATE_PARENT, 1384 + .ops = &clk_branch2_ops, 1385 + }, 1386 + }, 1387 + }; 1388 + 1389 + static struct clk_branch camss_csi1_ahb_clk = { 1390 + .halt_reg = 0x3128, 1391 + .clkr = { 1392 + .enable_reg = 0x3128, 1393 + .enable_mask = BIT(0), 1394 + .hw.init = &(struct clk_init_data){ 1395 + .name = "camss_csi1_ahb_clk", 1396 + .parent_names = (const char *[]){ 1397 + "mmss_ahb_clk_src", 1398 + }, 1399 + .num_parents = 1, 1400 + .flags = CLK_SET_RATE_PARENT, 1401 + .ops = &clk_branch2_ops, 1402 + }, 1403 + }, 1404 + }; 1405 + 1406 + static struct clk_branch camss_csi1_clk = { 1407 + .halt_reg = 0x3124, 1408 + .clkr = { 1409 + .enable_reg = 0x3124, 1410 + .enable_mask = BIT(0), 1411 + .hw.init = &(struct clk_init_data){ 1412 + .name = "camss_csi1_clk", 1413 + .parent_names = (const char *[]){ 1414 + "csi1_clk_src", 1415 + }, 1416 + .num_parents = 1, 1417 + .flags = CLK_SET_RATE_PARENT, 1418 + .ops = &clk_branch2_ops, 1419 + }, 1420 + }, 1421 + }; 1422 + 1423 + static struct clk_branch camss_csi1phy_clk = { 1424 + .halt_reg = 0x3134, 1425 + .clkr = { 1426 + .enable_reg = 0x3134, 1427 + .enable_mask = BIT(0), 1428 + .hw.init = &(struct clk_init_data){ 1429 + .name = "camss_csi1phy_clk", 1430 + .parent_names = (const char *[]){ 1431 + "csi1_clk_src", 1432 + }, 1433 + .num_parents = 1, 1434 + .flags = CLK_SET_RATE_PARENT, 1435 + .ops = &clk_branch2_ops, 1436 + }, 1437 + }, 1438 + }; 1439 + 1440 + static struct clk_branch camss_csi1pix_clk = { 1441 + .halt_reg = 0x3154, 1442 + .clkr = { 1443 + .enable_reg = 0x3154, 1444 + .enable_mask = BIT(0), 1445 + .hw.init = &(struct clk_init_data){ 1446 + .name = "camss_csi1pix_clk", 1447 + .parent_names = (const char *[]){ 1448 + "csi1_clk_src", 1449 + }, 1450 + .num_parents = 1, 1451 + .flags = CLK_SET_RATE_PARENT, 1452 + .ops = &clk_branch2_ops, 1453 + }, 1454 + }, 1455 + }; 1456 + 1457 + static struct clk_branch camss_csi1rdi_clk = { 1458 + .halt_reg = 0x3144, 1459 + .clkr = { 1460 + .enable_reg = 0x3144, 1461 + .enable_mask = BIT(0), 1462 + .hw.init = &(struct clk_init_data){ 1463 + .name = "camss_csi1rdi_clk", 1464 + .parent_names = (const char *[]){ 1465 + "csi1_clk_src", 1466 + }, 1467 + .num_parents = 1, 1468 + .flags = CLK_SET_RATE_PARENT, 1469 + .ops = &clk_branch2_ops, 1470 + }, 1471 + }, 1472 + }; 1473 + 1474 + static struct clk_branch camss_csi2_ahb_clk = { 1475 + .halt_reg = 0x3188, 1476 + .clkr = { 1477 + .enable_reg = 0x3188, 1478 + .enable_mask = BIT(0), 1479 + .hw.init = &(struct clk_init_data){ 1480 + .name = "camss_csi2_ahb_clk", 1481 + .parent_names = (const char *[]){ 1482 + "mmss_ahb_clk_src", 1483 + }, 1484 + .num_parents = 1, 1485 + .ops = &clk_branch2_ops, 1486 + }, 1487 + }, 1488 + }; 1489 + 1490 + static struct clk_branch camss_csi2_clk = { 1491 + .halt_reg = 0x3184, 1492 + .clkr = { 1493 + .enable_reg = 0x3184, 1494 + .enable_mask = BIT(0), 1495 + .hw.init = &(struct clk_init_data){ 1496 + .name = "camss_csi2_clk", 1497 + .parent_names = (const char *[]){ 1498 + "csi2_clk_src", 1499 + }, 1500 + .num_parents = 1, 1501 + .flags = CLK_SET_RATE_PARENT, 1502 + .ops = &clk_branch2_ops, 1503 + }, 1504 + }, 1505 + }; 1506 + 1507 + static struct clk_branch camss_csi2phy_clk = { 1508 + .halt_reg = 0x3194, 1509 + .clkr = { 1510 + .enable_reg = 0x3194, 1511 + .enable_mask = BIT(0), 1512 + .hw.init = &(struct clk_init_data){ 1513 + .name = "camss_csi2phy_clk", 1514 + .parent_names = (const char *[]){ 1515 + "csi2_clk_src", 1516 + }, 1517 + .num_parents = 1, 1518 + .flags = CLK_SET_RATE_PARENT, 1519 + .ops = &clk_branch2_ops, 1520 + }, 1521 + }, 1522 + }; 1523 + 1524 + static struct clk_branch camss_csi2pix_clk = { 1525 + .halt_reg = 0x31b4, 1526 + .clkr = { 1527 + .enable_reg = 0x31b4, 1528 + .enable_mask = BIT(0), 1529 + .hw.init = &(struct clk_init_data){ 1530 + .name = "camss_csi2pix_clk", 1531 + .parent_names = (const char *[]){ 1532 + "csi2_clk_src", 1533 + }, 1534 + .num_parents = 1, 1535 + .flags = CLK_SET_RATE_PARENT, 1536 + .ops = &clk_branch2_ops, 1537 + }, 1538 + }, 1539 + }; 1540 + 1541 + static struct clk_branch camss_csi2rdi_clk = { 1542 + .halt_reg = 0x31a4, 1543 + .clkr = { 1544 + .enable_reg = 0x31a4, 1545 + .enable_mask = BIT(0), 1546 + .hw.init = &(struct clk_init_data){ 1547 + .name = "camss_csi2rdi_clk", 1548 + .parent_names = (const char *[]){ 1549 + "csi2_clk_src", 1550 + }, 1551 + .num_parents = 1, 1552 + .flags = CLK_SET_RATE_PARENT, 1553 + .ops = &clk_branch2_ops, 1554 + }, 1555 + }, 1556 + }; 1557 + 1558 + static struct clk_branch camss_csi3_ahb_clk = { 1559 + .halt_reg = 0x31e8, 1560 + .clkr = { 1561 + .enable_reg = 0x31e8, 1562 + .enable_mask = BIT(0), 1563 + .hw.init = &(struct clk_init_data){ 1564 + .name = "camss_csi3_ahb_clk", 1565 + .parent_names = (const char *[]){ 1566 + "mmss_ahb_clk_src", 1567 + }, 1568 + .num_parents = 1, 1569 + .ops = &clk_branch2_ops, 1570 + }, 1571 + }, 1572 + }; 1573 + 1574 + static struct clk_branch camss_csi3_clk = { 1575 + .halt_reg = 0x31e4, 1576 + .clkr = { 1577 + .enable_reg = 0x31e4, 1578 + .enable_mask = BIT(0), 1579 + .hw.init = &(struct clk_init_data){ 1580 + .name = "camss_csi3_clk", 1581 + .parent_names = (const char *[]){ 1582 + "csi3_clk_src", 1583 + }, 1584 + .num_parents = 1, 1585 + .flags = CLK_SET_RATE_PARENT, 1586 + .ops = &clk_branch2_ops, 1587 + }, 1588 + }, 1589 + }; 1590 + 1591 + static struct clk_branch camss_csi3phy_clk = { 1592 + .halt_reg = 0x31f4, 1593 + .clkr = { 1594 + .enable_reg = 0x31f4, 1595 + .enable_mask = BIT(0), 1596 + .hw.init = &(struct clk_init_data){ 1597 + .name = "camss_csi3phy_clk", 1598 + .parent_names = (const char *[]){ 1599 + "csi3_clk_src", 1600 + }, 1601 + .num_parents = 1, 1602 + .flags = CLK_SET_RATE_PARENT, 1603 + .ops = &clk_branch2_ops, 1604 + }, 1605 + }, 1606 + }; 1607 + 1608 + static struct clk_branch camss_csi3pix_clk = { 1609 + .halt_reg = 0x3214, 1610 + .clkr = { 1611 + .enable_reg = 0x3214, 1612 + .enable_mask = BIT(0), 1613 + .hw.init = &(struct clk_init_data){ 1614 + .name = "camss_csi3pix_clk", 1615 + .parent_names = (const char *[]){ 1616 + "csi3_clk_src", 1617 + }, 1618 + .num_parents = 1, 1619 + .flags = CLK_SET_RATE_PARENT, 1620 + .ops = &clk_branch2_ops, 1621 + }, 1622 + }, 1623 + }; 1624 + 1625 + static struct clk_branch camss_csi3rdi_clk = { 1626 + .halt_reg = 0x3204, 1627 + .clkr = { 1628 + .enable_reg = 0x3204, 1629 + .enable_mask = BIT(0), 1630 + .hw.init = &(struct clk_init_data){ 1631 + .name = "camss_csi3rdi_clk", 1632 + .parent_names = (const char *[]){ 1633 + "csi3_clk_src", 1634 + }, 1635 + .num_parents = 1, 1636 + .flags = CLK_SET_RATE_PARENT, 1637 + .ops = &clk_branch2_ops, 1638 + }, 1639 + }, 1640 + }; 1641 + 1642 + static struct clk_branch camss_csi_vfe0_clk = { 1643 + .halt_reg = 0x3704, 1644 + .clkr = { 1645 + .enable_reg = 0x3704, 1646 + .enable_mask = BIT(0), 1647 + .hw.init = &(struct clk_init_data){ 1648 + .name = "camss_csi_vfe0_clk", 1649 + .parent_names = (const char *[]){ 1650 + "vfe0_clk_src", 1651 + }, 1652 + .num_parents = 1, 1653 + .flags = CLK_SET_RATE_PARENT, 1654 + .ops = &clk_branch2_ops, 1655 + }, 1656 + }, 1657 + }; 1658 + 1659 + static struct clk_branch camss_csi_vfe1_clk = { 1660 + .halt_reg = 0x3714, 1661 + .clkr = { 1662 + .enable_reg = 0x3714, 1663 + .enable_mask = BIT(0), 1664 + .hw.init = &(struct clk_init_data){ 1665 + .name = "camss_csi_vfe1_clk", 1666 + .parent_names = (const char *[]){ 1667 + "vfe1_clk_src", 1668 + }, 1669 + .num_parents = 1, 1670 + .flags = CLK_SET_RATE_PARENT, 1671 + .ops = &clk_branch2_ops, 1672 + }, 1673 + }, 1674 + }; 1675 + 1676 + static struct clk_branch camss_gp0_clk = { 1677 + .halt_reg = 0x3444, 1678 + .clkr = { 1679 + .enable_reg = 0x3444, 1680 + .enable_mask = BIT(0), 1681 + .hw.init = &(struct clk_init_data){ 1682 + .name = "camss_gp0_clk", 1683 + .parent_names = (const char *[]){ 1684 + "camss_gp0_clk_src", 1685 + }, 1686 + .num_parents = 1, 1687 + .flags = CLK_SET_RATE_PARENT, 1688 + .ops = &clk_branch2_ops, 1689 + }, 1690 + }, 1691 + }; 1692 + 1693 + static struct clk_branch camss_gp1_clk = { 1694 + .halt_reg = 0x3474, 1695 + .clkr = { 1696 + .enable_reg = 0x3474, 1697 + .enable_mask = BIT(0), 1698 + .hw.init = &(struct clk_init_data){ 1699 + .name = "camss_gp1_clk", 1700 + .parent_names = (const char *[]){ 1701 + "camss_gp1_clk_src", 1702 + }, 1703 + .num_parents = 1, 1704 + .flags = CLK_SET_RATE_PARENT, 1705 + .ops = &clk_branch2_ops, 1706 + }, 1707 + }, 1708 + }; 1709 + 1710 + static struct clk_branch camss_ispif_ahb_clk = { 1711 + .halt_reg = 0x3224, 1712 + .clkr = { 1713 + .enable_reg = 0x3224, 1714 + .enable_mask = BIT(0), 1715 + .hw.init = &(struct clk_init_data){ 1716 + .name = "camss_ispif_ahb_clk", 1717 + .parent_names = (const char *[]){ 1718 + "mmss_ahb_clk_src", 1719 + }, 1720 + .num_parents = 1, 1721 + .flags = CLK_SET_RATE_PARENT, 1722 + .ops = &clk_branch2_ops, 1723 + }, 1724 + }, 1725 + }; 1726 + 1727 + static struct clk_branch camss_jpeg_jpeg0_clk = { 1728 + .halt_reg = 0x35a8, 1729 + .clkr = { 1730 + .enable_reg = 0x35a8, 1731 + .enable_mask = BIT(0), 1732 + .hw.init = &(struct clk_init_data){ 1733 + .name = "camss_jpeg_jpeg0_clk", 1734 + .parent_names = (const char *[]){ 1735 + "jpeg0_clk_src", 1736 + }, 1737 + .num_parents = 1, 1738 + .flags = CLK_SET_RATE_PARENT, 1739 + .ops = &clk_branch2_ops, 1740 + }, 1741 + }, 1742 + }; 1743 + 1744 + static struct clk_branch camss_jpeg_jpeg1_clk = { 1745 + .halt_reg = 0x35ac, 1746 + .clkr = { 1747 + .enable_reg = 0x35ac, 1748 + .enable_mask = BIT(0), 1749 + .hw.init = &(struct clk_init_data){ 1750 + .name = "camss_jpeg_jpeg1_clk", 1751 + .parent_names = (const char *[]){ 1752 + "jpeg1_clk_src", 1753 + }, 1754 + .num_parents = 1, 1755 + .flags = CLK_SET_RATE_PARENT, 1756 + .ops = &clk_branch2_ops, 1757 + }, 1758 + }, 1759 + }; 1760 + 1761 + static struct clk_branch camss_jpeg_jpeg2_clk = { 1762 + .halt_reg = 0x35b0, 1763 + .clkr = { 1764 + .enable_reg = 0x35b0, 1765 + .enable_mask = BIT(0), 1766 + .hw.init = &(struct clk_init_data){ 1767 + .name = "camss_jpeg_jpeg2_clk", 1768 + .parent_names = (const char *[]){ 1769 + "jpeg2_clk_src", 1770 + }, 1771 + .num_parents = 1, 1772 + .flags = CLK_SET_RATE_PARENT, 1773 + .ops = &clk_branch2_ops, 1774 + }, 1775 + }, 1776 + }; 1777 + 1778 + static struct clk_branch camss_jpeg_jpeg_ahb_clk = { 1779 + .halt_reg = 0x35b4, 1780 + .clkr = { 1781 + .enable_reg = 0x35b4, 1782 + .enable_mask = BIT(0), 1783 + .hw.init = &(struct clk_init_data){ 1784 + .name = "camss_jpeg_jpeg_ahb_clk", 1785 + .parent_names = (const char *[]){ 1786 + "mmss_ahb_clk_src", 1787 + }, 1788 + .num_parents = 1, 1789 + .ops = &clk_branch2_ops, 1790 + }, 1791 + }, 1792 + }; 1793 + 1794 + static struct clk_branch camss_jpeg_jpeg_axi_clk = { 1795 + .halt_reg = 0x35b8, 1796 + .clkr = { 1797 + .enable_reg = 0x35b8, 1798 + .enable_mask = BIT(0), 1799 + .hw.init = &(struct clk_init_data){ 1800 + .name = "camss_jpeg_jpeg_axi_clk", 1801 + .parent_names = (const char *[]){ 1802 + "mmss_axi_clk_src", 1803 + }, 1804 + .num_parents = 1, 1805 + .ops = &clk_branch2_ops, 1806 + }, 1807 + }, 1808 + }; 1809 + 1810 + static struct clk_branch camss_mclk0_clk = { 1811 + .halt_reg = 0x3384, 1812 + .clkr = { 1813 + .enable_reg = 0x3384, 1814 + .enable_mask = BIT(0), 1815 + .hw.init = &(struct clk_init_data){ 1816 + .name = "camss_mclk0_clk", 1817 + .parent_names = (const char *[]){ 1818 + "mclk0_clk_src", 1819 + }, 1820 + .num_parents = 1, 1821 + .flags = CLK_SET_RATE_PARENT, 1822 + .ops = &clk_branch2_ops, 1823 + }, 1824 + }, 1825 + }; 1826 + 1827 + static struct clk_branch camss_mclk1_clk = { 1828 + .halt_reg = 0x33b4, 1829 + .clkr = { 1830 + .enable_reg = 0x33b4, 1831 + .enable_mask = BIT(0), 1832 + .hw.init = &(struct clk_init_data){ 1833 + .name = "camss_mclk1_clk", 1834 + .parent_names = (const char *[]){ 1835 + "mclk1_clk_src", 1836 + }, 1837 + .num_parents = 1, 1838 + .flags = CLK_SET_RATE_PARENT, 1839 + .ops = &clk_branch2_ops, 1840 + }, 1841 + }, 1842 + }; 1843 + 1844 + static struct clk_branch camss_mclk2_clk = { 1845 + .halt_reg = 0x33e4, 1846 + .clkr = { 1847 + .enable_reg = 0x33e4, 1848 + .enable_mask = BIT(0), 1849 + .hw.init = &(struct clk_init_data){ 1850 + .name = "camss_mclk2_clk", 1851 + .parent_names = (const char *[]){ 1852 + "mclk2_clk_src", 1853 + }, 1854 + .num_parents = 1, 1855 + .flags = CLK_SET_RATE_PARENT, 1856 + .ops = &clk_branch2_ops, 1857 + }, 1858 + }, 1859 + }; 1860 + 1861 + static struct clk_branch camss_mclk3_clk = { 1862 + .halt_reg = 0x3414, 1863 + .clkr = { 1864 + .enable_reg = 0x3414, 1865 + .enable_mask = BIT(0), 1866 + .hw.init = &(struct clk_init_data){ 1867 + .name = "camss_mclk3_clk", 1868 + .parent_names = (const char *[]){ 1869 + "mclk3_clk_src", 1870 + }, 1871 + .num_parents = 1, 1872 + .flags = CLK_SET_RATE_PARENT, 1873 + .ops = &clk_branch2_ops, 1874 + }, 1875 + }, 1876 + }; 1877 + 1878 + static struct clk_branch camss_micro_ahb_clk = { 1879 + .halt_reg = 0x3494, 1880 + .clkr = { 1881 + .enable_reg = 0x3494, 1882 + .enable_mask = BIT(0), 1883 + .hw.init = &(struct clk_init_data){ 1884 + .name = "camss_micro_ahb_clk", 1885 + .parent_names = (const char *[]){ 1886 + "mmss_ahb_clk_src", 1887 + }, 1888 + .num_parents = 1, 1889 + .ops = &clk_branch2_ops, 1890 + }, 1891 + }, 1892 + }; 1893 + 1894 + static struct clk_branch camss_phy0_csi0phytimer_clk = { 1895 + .halt_reg = 0x3024, 1896 + .clkr = { 1897 + .enable_reg = 0x3024, 1898 + .enable_mask = BIT(0), 1899 + .hw.init = &(struct clk_init_data){ 1900 + .name = "camss_phy0_csi0phytimer_clk", 1901 + .parent_names = (const char *[]){ 1902 + "csi0phytimer_clk_src", 1903 + }, 1904 + .num_parents = 1, 1905 + .flags = CLK_SET_RATE_PARENT, 1906 + .ops = &clk_branch2_ops, 1907 + }, 1908 + }, 1909 + }; 1910 + 1911 + static struct clk_branch camss_phy1_csi1phytimer_clk = { 1912 + .halt_reg = 0x3054, 1913 + .clkr = { 1914 + .enable_reg = 0x3054, 1915 + .enable_mask = BIT(0), 1916 + .hw.init = &(struct clk_init_data){ 1917 + .name = "camss_phy1_csi1phytimer_clk", 1918 + .parent_names = (const char *[]){ 1919 + "csi1phytimer_clk_src", 1920 + }, 1921 + .num_parents = 1, 1922 + .flags = CLK_SET_RATE_PARENT, 1923 + .ops = &clk_branch2_ops, 1924 + }, 1925 + }, 1926 + }; 1927 + 1928 + static struct clk_branch camss_phy2_csi2phytimer_clk = { 1929 + .halt_reg = 0x3084, 1930 + .clkr = { 1931 + .enable_reg = 0x3084, 1932 + .enable_mask = BIT(0), 1933 + .hw.init = &(struct clk_init_data){ 1934 + .name = "camss_phy2_csi2phytimer_clk", 1935 + .parent_names = (const char *[]){ 1936 + "csi2phytimer_clk_src", 1937 + }, 1938 + .num_parents = 1, 1939 + .flags = CLK_SET_RATE_PARENT, 1940 + .ops = &clk_branch2_ops, 1941 + }, 1942 + }, 1943 + }; 1944 + 1945 + static struct clk_branch camss_top_ahb_clk = { 1946 + .halt_reg = 0x3484, 1947 + .clkr = { 1948 + .enable_reg = 0x3484, 1949 + .enable_mask = BIT(0), 1950 + .hw.init = &(struct clk_init_data){ 1951 + .name = "camss_top_ahb_clk", 1952 + .parent_names = (const char *[]){ 1953 + "mmss_ahb_clk_src", 1954 + }, 1955 + .num_parents = 1, 1956 + .flags = CLK_SET_RATE_PARENT, 1957 + .ops = &clk_branch2_ops, 1958 + }, 1959 + }, 1960 + }; 1961 + 1962 + static struct clk_branch camss_vfe_cpp_ahb_clk = { 1963 + .halt_reg = 0x36b4, 1964 + .clkr = { 1965 + .enable_reg = 0x36b4, 1966 + .enable_mask = BIT(0), 1967 + .hw.init = &(struct clk_init_data){ 1968 + .name = "camss_vfe_cpp_ahb_clk", 1969 + .parent_names = (const char *[]){ 1970 + "mmss_ahb_clk_src", 1971 + }, 1972 + .num_parents = 1, 1973 + .flags = CLK_SET_RATE_PARENT, 1974 + .ops = &clk_branch2_ops, 1975 + }, 1976 + }, 1977 + }; 1978 + 1979 + static struct clk_branch camss_vfe_cpp_clk = { 1980 + .halt_reg = 0x36b0, 1981 + .clkr = { 1982 + .enable_reg = 0x36b0, 1983 + .enable_mask = BIT(0), 1984 + .hw.init = &(struct clk_init_data){ 1985 + .name = "camss_vfe_cpp_clk", 1986 + .parent_names = (const char *[]){ 1987 + "cpp_clk_src", 1988 + }, 1989 + .num_parents = 1, 1990 + .flags = CLK_SET_RATE_PARENT, 1991 + .ops = &clk_branch2_ops, 1992 + }, 1993 + }, 1994 + }; 1995 + 1996 + static struct clk_branch camss_vfe_vfe0_clk = { 1997 + .halt_reg = 0x36a8, 1998 + .clkr = { 1999 + .enable_reg = 0x36a8, 2000 + .enable_mask = BIT(0), 2001 + .hw.init = &(struct clk_init_data){ 2002 + .name = "camss_vfe_vfe0_clk", 2003 + .parent_names = (const char *[]){ 2004 + "vfe0_clk_src", 2005 + }, 2006 + .num_parents = 1, 2007 + .flags = CLK_SET_RATE_PARENT, 2008 + .ops = &clk_branch2_ops, 2009 + }, 2010 + }, 2011 + }; 2012 + 2013 + static struct clk_branch camss_vfe_vfe1_clk = { 2014 + .halt_reg = 0x36ac, 2015 + .clkr = { 2016 + .enable_reg = 0x36ac, 2017 + .enable_mask = BIT(0), 2018 + .hw.init = &(struct clk_init_data){ 2019 + .name = "camss_vfe_vfe1_clk", 2020 + .parent_names = (const char *[]){ 2021 + "vfe1_clk_src", 2022 + }, 2023 + .num_parents = 1, 2024 + .flags = CLK_SET_RATE_PARENT, 2025 + .ops = &clk_branch2_ops, 2026 + }, 2027 + }, 2028 + }; 2029 + 2030 + static struct clk_branch camss_vfe_vfe_ahb_clk = { 2031 + .halt_reg = 0x36b8, 2032 + .clkr = { 2033 + .enable_reg = 0x36b8, 2034 + .enable_mask = BIT(0), 2035 + .hw.init = &(struct clk_init_data){ 2036 + .name = "camss_vfe_vfe_ahb_clk", 2037 + .parent_names = (const char *[]){ 2038 + "mmss_ahb_clk_src", 2039 + }, 2040 + .num_parents = 1, 2041 + .flags = CLK_SET_RATE_PARENT, 2042 + .ops = &clk_branch2_ops, 2043 + }, 2044 + }, 2045 + }; 2046 + 2047 + static struct clk_branch camss_vfe_vfe_axi_clk = { 2048 + .halt_reg = 0x36bc, 2049 + .clkr = { 2050 + .enable_reg = 0x36bc, 2051 + .enable_mask = BIT(0), 2052 + .hw.init = &(struct clk_init_data){ 2053 + .name = "camss_vfe_vfe_axi_clk", 2054 + .parent_names = (const char *[]){ 2055 + "mmss_axi_clk_src", 2056 + }, 2057 + .num_parents = 1, 2058 + .flags = CLK_SET_RATE_PARENT, 2059 + .ops = &clk_branch2_ops, 2060 + }, 2061 + }, 2062 + }; 2063 + 2064 + static struct clk_branch mdss_ahb_clk = { 2065 + .halt_reg = 0x2308, 2066 + .clkr = { 2067 + .enable_reg = 0x2308, 2068 + .enable_mask = BIT(0), 2069 + .hw.init = &(struct clk_init_data){ 2070 + .name = "mdss_ahb_clk", 2071 + .parent_names = (const char *[]){ 2072 + "mmss_ahb_clk_src", 2073 + }, 2074 + .num_parents = 1, 2075 + .flags = CLK_SET_RATE_PARENT, 2076 + .ops = &clk_branch2_ops, 2077 + }, 2078 + }, 2079 + }; 2080 + 2081 + static struct clk_branch mdss_axi_clk = { 2082 + .halt_reg = 0x2310, 2083 + .clkr = { 2084 + .enable_reg = 0x2310, 2085 + .enable_mask = BIT(0), 2086 + .hw.init = &(struct clk_init_data){ 2087 + .name = "mdss_axi_clk", 2088 + .parent_names = (const char *[]){ 2089 + "mmss_axi_clk_src", 2090 + }, 2091 + .num_parents = 1, 2092 + .flags = CLK_SET_RATE_PARENT, 2093 + .ops = &clk_branch2_ops, 2094 + }, 2095 + }, 2096 + }; 2097 + 2098 + static struct clk_branch mdss_byte0_clk = { 2099 + .halt_reg = 0x233c, 2100 + .clkr = { 2101 + .enable_reg = 0x233c, 2102 + .enable_mask = BIT(0), 2103 + .hw.init = &(struct clk_init_data){ 2104 + .name = "mdss_byte0_clk", 2105 + .parent_names = (const char *[]){ 2106 + "byte0_clk_src", 2107 + }, 2108 + .num_parents = 1, 2109 + .flags = CLK_SET_RATE_PARENT, 2110 + .ops = &clk_branch2_ops, 2111 + }, 2112 + }, 2113 + }; 2114 + 2115 + static struct clk_branch mdss_byte1_clk = { 2116 + .halt_reg = 0x2340, 2117 + .clkr = { 2118 + .enable_reg = 0x2340, 2119 + .enable_mask = BIT(0), 2120 + .hw.init = &(struct clk_init_data){ 2121 + .name = "mdss_byte1_clk", 2122 + .parent_names = (const char *[]){ 2123 + "byte1_clk_src", 2124 + }, 2125 + .num_parents = 1, 2126 + .flags = CLK_SET_RATE_PARENT, 2127 + .ops = &clk_branch2_ops, 2128 + }, 2129 + }, 2130 + }; 2131 + 2132 + static struct clk_branch mdss_edpaux_clk = { 2133 + .halt_reg = 0x2334, 2134 + .clkr = { 2135 + .enable_reg = 0x2334, 2136 + .enable_mask = BIT(0), 2137 + .hw.init = &(struct clk_init_data){ 2138 + .name = "mdss_edpaux_clk", 2139 + .parent_names = (const char *[]){ 2140 + "edpaux_clk_src", 2141 + }, 2142 + .num_parents = 1, 2143 + .flags = CLK_SET_RATE_PARENT, 2144 + .ops = &clk_branch2_ops, 2145 + }, 2146 + }, 2147 + }; 2148 + 2149 + static struct clk_branch mdss_edplink_clk = { 2150 + .halt_reg = 0x2330, 2151 + .clkr = { 2152 + .enable_reg = 0x2330, 2153 + .enable_mask = BIT(0), 2154 + .hw.init = &(struct clk_init_data){ 2155 + .name = "mdss_edplink_clk", 2156 + .parent_names = (const char *[]){ 2157 + "edplink_clk_src", 2158 + }, 2159 + .num_parents = 1, 2160 + .flags = CLK_SET_RATE_PARENT, 2161 + .ops = &clk_branch2_ops, 2162 + }, 2163 + }, 2164 + }; 2165 + 2166 + static struct clk_branch mdss_edppixel_clk = { 2167 + .halt_reg = 0x232c, 2168 + .clkr = { 2169 + .enable_reg = 0x232c, 2170 + .enable_mask = BIT(0), 2171 + .hw.init = &(struct clk_init_data){ 2172 + .name = "mdss_edppixel_clk", 2173 + .parent_names = (const char *[]){ 2174 + "edppixel_clk_src", 2175 + }, 2176 + .num_parents = 1, 2177 + .flags = CLK_SET_RATE_PARENT, 2178 + .ops = &clk_branch2_ops, 2179 + }, 2180 + }, 2181 + }; 2182 + 2183 + static struct clk_branch mdss_esc0_clk = { 2184 + .halt_reg = 0x2344, 2185 + .clkr = { 2186 + .enable_reg = 0x2344, 2187 + .enable_mask = BIT(0), 2188 + .hw.init = &(struct clk_init_data){ 2189 + .name = "mdss_esc0_clk", 2190 + .parent_names = (const char *[]){ 2191 + "esc0_clk_src", 2192 + }, 2193 + .num_parents = 1, 2194 + .flags = CLK_SET_RATE_PARENT, 2195 + .ops = &clk_branch2_ops, 2196 + }, 2197 + }, 2198 + }; 2199 + 2200 + static struct clk_branch mdss_esc1_clk = { 2201 + .halt_reg = 0x2348, 2202 + .clkr = { 2203 + .enable_reg = 0x2348, 2204 + .enable_mask = BIT(0), 2205 + .hw.init = &(struct clk_init_data){ 2206 + .name = "mdss_esc1_clk", 2207 + .parent_names = (const char *[]){ 2208 + "esc1_clk_src", 2209 + }, 2210 + .num_parents = 1, 2211 + .flags = CLK_SET_RATE_PARENT, 2212 + .ops = &clk_branch2_ops, 2213 + }, 2214 + }, 2215 + }; 2216 + 2217 + static struct clk_branch mdss_extpclk_clk = { 2218 + .halt_reg = 0x2324, 2219 + .clkr = { 2220 + .enable_reg = 0x2324, 2221 + .enable_mask = BIT(0), 2222 + .hw.init = &(struct clk_init_data){ 2223 + .name = "mdss_extpclk_clk", 2224 + .parent_names = (const char *[]){ 2225 + "extpclk_clk_src", 2226 + }, 2227 + .num_parents = 1, 2228 + .flags = CLK_SET_RATE_PARENT, 2229 + .ops = &clk_branch2_ops, 2230 + }, 2231 + }, 2232 + }; 2233 + 2234 + static struct clk_branch mdss_hdmi_ahb_clk = { 2235 + .halt_reg = 0x230c, 2236 + .clkr = { 2237 + .enable_reg = 0x230c, 2238 + .enable_mask = BIT(0), 2239 + .hw.init = &(struct clk_init_data){ 2240 + .name = "mdss_hdmi_ahb_clk", 2241 + .parent_names = (const char *[]){ 2242 + "mmss_ahb_clk_src", 2243 + }, 2244 + .num_parents = 1, 2245 + .flags = CLK_SET_RATE_PARENT, 2246 + .ops = &clk_branch2_ops, 2247 + }, 2248 + }, 2249 + }; 2250 + 2251 + static struct clk_branch mdss_hdmi_clk = { 2252 + .halt_reg = 0x2338, 2253 + .clkr = { 2254 + .enable_reg = 0x2338, 2255 + .enable_mask = BIT(0), 2256 + .hw.init = &(struct clk_init_data){ 2257 + .name = "mdss_hdmi_clk", 2258 + .parent_names = (const char *[]){ 2259 + "hdmi_clk_src", 2260 + }, 2261 + .num_parents = 1, 2262 + .flags = CLK_SET_RATE_PARENT, 2263 + .ops = &clk_branch2_ops, 2264 + }, 2265 + }, 2266 + }; 2267 + 2268 + static struct clk_branch mdss_mdp_clk = { 2269 + .halt_reg = 0x231c, 2270 + .clkr = { 2271 + .enable_reg = 0x231c, 2272 + .enable_mask = BIT(0), 2273 + .hw.init = &(struct clk_init_data){ 2274 + .name = "mdss_mdp_clk", 2275 + .parent_names = (const char *[]){ 2276 + "mdp_clk_src", 2277 + }, 2278 + .num_parents = 1, 2279 + .flags = CLK_SET_RATE_PARENT, 2280 + .ops = &clk_branch2_ops, 2281 + }, 2282 + }, 2283 + }; 2284 + 2285 + static struct clk_branch mdss_mdp_lut_clk = { 2286 + .halt_reg = 0x2320, 2287 + .clkr = { 2288 + .enable_reg = 0x2320, 2289 + .enable_mask = BIT(0), 2290 + .hw.init = &(struct clk_init_data){ 2291 + .name = "mdss_mdp_lut_clk", 2292 + .parent_names = (const char *[]){ 2293 + "mdp_clk_src", 2294 + }, 2295 + .num_parents = 1, 2296 + .flags = CLK_SET_RATE_PARENT, 2297 + .ops = &clk_branch2_ops, 2298 + }, 2299 + }, 2300 + }; 2301 + 2302 + static struct clk_branch mdss_pclk0_clk = { 2303 + .halt_reg = 0x2314, 2304 + .clkr = { 2305 + .enable_reg = 0x2314, 2306 + .enable_mask = BIT(0), 2307 + .hw.init = &(struct clk_init_data){ 2308 + .name = "mdss_pclk0_clk", 2309 + .parent_names = (const char *[]){ 2310 + "pclk0_clk_src", 2311 + }, 2312 + .num_parents = 1, 2313 + .flags = CLK_SET_RATE_PARENT, 2314 + .ops = &clk_branch2_ops, 2315 + }, 2316 + }, 2317 + }; 2318 + 2319 + static struct clk_branch mdss_pclk1_clk = { 2320 + .halt_reg = 0x2318, 2321 + .clkr = { 2322 + .enable_reg = 0x2318, 2323 + .enable_mask = BIT(0), 2324 + .hw.init = &(struct clk_init_data){ 2325 + .name = "mdss_pclk1_clk", 2326 + .parent_names = (const char *[]){ 2327 + "pclk1_clk_src", 2328 + }, 2329 + .num_parents = 1, 2330 + .flags = CLK_SET_RATE_PARENT, 2331 + .ops = &clk_branch2_ops, 2332 + }, 2333 + }, 2334 + }; 2335 + 2336 + static struct clk_branch mdss_vsync_clk = { 2337 + .halt_reg = 0x2328, 2338 + .clkr = { 2339 + .enable_reg = 0x2328, 2340 + .enable_mask = BIT(0), 2341 + .hw.init = &(struct clk_init_data){ 2342 + .name = "mdss_vsync_clk", 2343 + .parent_names = (const char *[]){ 2344 + "vsync_clk_src", 2345 + }, 2346 + .num_parents = 1, 2347 + .flags = CLK_SET_RATE_PARENT, 2348 + .ops = &clk_branch2_ops, 2349 + }, 2350 + }, 2351 + }; 2352 + 2353 + static struct clk_branch mmss_rbcpr_ahb_clk = { 2354 + .halt_reg = 0x4088, 2355 + .clkr = { 2356 + .enable_reg = 0x4088, 2357 + .enable_mask = BIT(0), 2358 + .hw.init = &(struct clk_init_data){ 2359 + .name = "mmss_rbcpr_ahb_clk", 2360 + .parent_names = (const char *[]){ 2361 + "mmss_ahb_clk_src", 2362 + }, 2363 + .num_parents = 1, 2364 + .flags = CLK_SET_RATE_PARENT, 2365 + .ops = &clk_branch2_ops, 2366 + }, 2367 + }, 2368 + }; 2369 + 2370 + static struct clk_branch mmss_rbcpr_clk = { 2371 + .halt_reg = 0x4084, 2372 + .clkr = { 2373 + .enable_reg = 0x4084, 2374 + .enable_mask = BIT(0), 2375 + .hw.init = &(struct clk_init_data){ 2376 + .name = "mmss_rbcpr_clk", 2377 + .parent_names = (const char *[]){ 2378 + "rbcpr_clk_src", 2379 + }, 2380 + .num_parents = 1, 2381 + .flags = CLK_SET_RATE_PARENT, 2382 + .ops = &clk_branch2_ops, 2383 + }, 2384 + }, 2385 + }; 2386 + 2387 + static struct clk_branch mmss_spdm_ahb_clk = { 2388 + .halt_reg = 0x0230, 2389 + .clkr = { 2390 + .enable_reg = 0x0230, 2391 + .enable_mask = BIT(0), 2392 + .hw.init = &(struct clk_init_data){ 2393 + .name = "mmss_spdm_ahb_clk", 2394 + .parent_names = (const char *[]){ 2395 + "mmss_spdm_ahb_div_clk", 2396 + }, 2397 + .num_parents = 1, 2398 + .flags = CLK_SET_RATE_PARENT, 2399 + .ops = &clk_branch2_ops, 2400 + }, 2401 + }, 2402 + }; 2403 + 2404 + static struct clk_branch mmss_spdm_axi_clk = { 2405 + .halt_reg = 0x0210, 2406 + .clkr = { 2407 + .enable_reg = 0x0210, 2408 + .enable_mask = BIT(0), 2409 + .hw.init = &(struct clk_init_data){ 2410 + .name = "mmss_spdm_axi_clk", 2411 + .parent_names = (const char *[]){ 2412 + "mmss_spdm_axi_div_clk", 2413 + }, 2414 + .num_parents = 1, 2415 + .flags = CLK_SET_RATE_PARENT, 2416 + .ops = &clk_branch2_ops, 2417 + }, 2418 + }, 2419 + }; 2420 + 2421 + static struct clk_branch mmss_spdm_csi0_clk = { 2422 + .halt_reg = 0x023c, 2423 + .clkr = { 2424 + .enable_reg = 0x023c, 2425 + .enable_mask = BIT(0), 2426 + .hw.init = &(struct clk_init_data){ 2427 + .name = "mmss_spdm_csi0_clk", 2428 + .parent_names = (const char *[]){ 2429 + "mmss_spdm_csi0_div_clk", 2430 + }, 2431 + .num_parents = 1, 2432 + .flags = CLK_SET_RATE_PARENT, 2433 + .ops = &clk_branch2_ops, 2434 + }, 2435 + }, 2436 + }; 2437 + 2438 + static struct clk_branch mmss_spdm_gfx3d_clk = { 2439 + .halt_reg = 0x022c, 2440 + .clkr = { 2441 + .enable_reg = 0x022c, 2442 + .enable_mask = BIT(0), 2443 + .hw.init = &(struct clk_init_data){ 2444 + .name = "mmss_spdm_gfx3d_clk", 2445 + .parent_names = (const char *[]){ 2446 + "mmss_spdm_gfx3d_div_clk", 2447 + }, 2448 + .num_parents = 1, 2449 + .flags = CLK_SET_RATE_PARENT, 2450 + .ops = &clk_branch2_ops, 2451 + }, 2452 + }, 2453 + }; 2454 + 2455 + static struct clk_branch mmss_spdm_jpeg0_clk = { 2456 + .halt_reg = 0x0204, 2457 + .clkr = { 2458 + .enable_reg = 0x0204, 2459 + .enable_mask = BIT(0), 2460 + .hw.init = &(struct clk_init_data){ 2461 + .name = "mmss_spdm_jpeg0_clk", 2462 + .parent_names = (const char *[]){ 2463 + "mmss_spdm_jpeg0_div_clk", 2464 + }, 2465 + .num_parents = 1, 2466 + .flags = CLK_SET_RATE_PARENT, 2467 + .ops = &clk_branch2_ops, 2468 + }, 2469 + }, 2470 + }; 2471 + 2472 + static struct clk_branch mmss_spdm_jpeg1_clk = { 2473 + .halt_reg = 0x0208, 2474 + .clkr = { 2475 + .enable_reg = 0x0208, 2476 + .enable_mask = BIT(0), 2477 + .hw.init = &(struct clk_init_data){ 2478 + .name = "mmss_spdm_jpeg1_clk", 2479 + .parent_names = (const char *[]){ 2480 + "mmss_spdm_jpeg1_div_clk", 2481 + }, 2482 + .num_parents = 1, 2483 + .flags = CLK_SET_RATE_PARENT, 2484 + .ops = &clk_branch2_ops, 2485 + }, 2486 + }, 2487 + }; 2488 + 2489 + static struct clk_branch mmss_spdm_jpeg2_clk = { 2490 + .halt_reg = 0x0224, 2491 + .clkr = { 2492 + .enable_reg = 0x0224, 2493 + .enable_mask = BIT(0), 2494 + .hw.init = &(struct clk_init_data){ 2495 + .name = "mmss_spdm_jpeg2_clk", 2496 + .parent_names = (const char *[]){ 2497 + "mmss_spdm_jpeg2_div_clk", 2498 + }, 2499 + .num_parents = 1, 2500 + .flags = CLK_SET_RATE_PARENT, 2501 + .ops = &clk_branch2_ops, 2502 + }, 2503 + }, 2504 + }; 2505 + 2506 + static struct clk_branch mmss_spdm_mdp_clk = { 2507 + .halt_reg = 0x020c, 2508 + .clkr = { 2509 + .enable_reg = 0x020c, 2510 + .enable_mask = BIT(0), 2511 + .hw.init = &(struct clk_init_data){ 2512 + .name = "mmss_spdm_mdp_clk", 2513 + .parent_names = (const char *[]){ 2514 + "mmss_spdm_mdp_div_clk", 2515 + }, 2516 + .num_parents = 1, 2517 + .flags = CLK_SET_RATE_PARENT, 2518 + .ops = &clk_branch2_ops, 2519 + }, 2520 + }, 2521 + }; 2522 + 2523 + static struct clk_branch mmss_spdm_pclk0_clk = { 2524 + .halt_reg = 0x0234, 2525 + .clkr = { 2526 + .enable_reg = 0x0234, 2527 + .enable_mask = BIT(0), 2528 + .hw.init = &(struct clk_init_data){ 2529 + .name = "mmss_spdm_pclk0_clk", 2530 + .parent_names = (const char *[]){ 2531 + "mmss_spdm_pclk0_div_clk", 2532 + }, 2533 + .num_parents = 1, 2534 + .flags = CLK_SET_RATE_PARENT, 2535 + .ops = &clk_branch2_ops, 2536 + }, 2537 + }, 2538 + }; 2539 + 2540 + static struct clk_branch mmss_spdm_pclk1_clk = { 2541 + .halt_reg = 0x0228, 2542 + .clkr = { 2543 + .enable_reg = 0x0228, 2544 + .enable_mask = BIT(0), 2545 + .hw.init = &(struct clk_init_data){ 2546 + .name = "mmss_spdm_pclk1_clk", 2547 + .parent_names = (const char *[]){ 2548 + "mmss_spdm_pclk1_div_clk", 2549 + }, 2550 + .num_parents = 1, 2551 + .flags = CLK_SET_RATE_PARENT, 2552 + .ops = &clk_branch2_ops, 2553 + }, 2554 + }, 2555 + }; 2556 + 2557 + static struct clk_branch mmss_spdm_vcodec0_clk = { 2558 + .halt_reg = 0x0214, 2559 + .clkr = { 2560 + .enable_reg = 0x0214, 2561 + .enable_mask = BIT(0), 2562 + .hw.init = &(struct clk_init_data){ 2563 + .name = "mmss_spdm_vcodec0_clk", 2564 + .parent_names = (const char *[]){ 2565 + "mmss_spdm_vcodec0_div_clk", 2566 + }, 2567 + .num_parents = 1, 2568 + .flags = CLK_SET_RATE_PARENT, 2569 + .ops = &clk_branch2_ops, 2570 + }, 2571 + }, 2572 + }; 2573 + 2574 + static struct clk_branch mmss_spdm_vfe0_clk = { 2575 + .halt_reg = 0x0218, 2576 + .clkr = { 2577 + .enable_reg = 0x0218, 2578 + .enable_mask = BIT(0), 2579 + .hw.init = &(struct clk_init_data){ 2580 + .name = "mmss_spdm_vfe0_clk", 2581 + .parent_names = (const char *[]){ 2582 + "mmss_spdm_vfe0_div_clk", 2583 + }, 2584 + .num_parents = 1, 2585 + .flags = CLK_SET_RATE_PARENT, 2586 + .ops = &clk_branch2_ops, 2587 + }, 2588 + }, 2589 + }; 2590 + 2591 + static struct clk_branch mmss_spdm_vfe1_clk = { 2592 + .halt_reg = 0x021c, 2593 + .clkr = { 2594 + .enable_reg = 0x021c, 2595 + .enable_mask = BIT(0), 2596 + .hw.init = &(struct clk_init_data){ 2597 + .name = "mmss_spdm_vfe1_clk", 2598 + .parent_names = (const char *[]){ 2599 + "mmss_spdm_vfe1_div_clk", 2600 + }, 2601 + .num_parents = 1, 2602 + .flags = CLK_SET_RATE_PARENT, 2603 + .ops = &clk_branch2_ops, 2604 + }, 2605 + }, 2606 + }; 2607 + 2608 + static struct clk_branch mmss_spdm_rm_axi_clk = { 2609 + .halt_reg = 0x0304, 2610 + .clkr = { 2611 + .enable_reg = 0x0304, 2612 + .enable_mask = BIT(0), 2613 + .hw.init = &(struct clk_init_data){ 2614 + .name = "mmss_spdm_rm_axi_clk", 2615 + .parent_names = (const char *[]){ 2616 + "mmss_axi_clk_src", 2617 + }, 2618 + .num_parents = 1, 2619 + .flags = CLK_SET_RATE_PARENT, 2620 + .ops = &clk_branch2_ops, 2621 + }, 2622 + }, 2623 + }; 2624 + 2625 + static struct clk_branch mmss_spdm_rm_ocmemnoc_clk = { 2626 + .halt_reg = 0x0308, 2627 + .clkr = { 2628 + .enable_reg = 0x0308, 2629 + .enable_mask = BIT(0), 2630 + .hw.init = &(struct clk_init_data){ 2631 + .name = "mmss_spdm_rm_ocmemnoc_clk", 2632 + .parent_names = (const char *[]){ 2633 + "ocmemnoc_clk_src", 2634 + }, 2635 + .num_parents = 1, 2636 + .flags = CLK_SET_RATE_PARENT, 2637 + .ops = &clk_branch2_ops, 2638 + }, 2639 + }, 2640 + }; 2641 + 2642 + 2643 + static struct clk_branch mmss_misc_ahb_clk = { 2644 + .halt_reg = 0x502c, 2645 + .clkr = { 2646 + .enable_reg = 0x502c, 2647 + .enable_mask = BIT(0), 2648 + .hw.init = &(struct clk_init_data){ 2649 + .name = "mmss_misc_ahb_clk", 2650 + .parent_names = (const char *[]){ 2651 + "mmss_ahb_clk_src", 2652 + }, 2653 + .num_parents = 1, 2654 + .flags = CLK_SET_RATE_PARENT, 2655 + .ops = &clk_branch2_ops, 2656 + }, 2657 + }, 2658 + }; 2659 + 2660 + static struct clk_branch mmss_mmssnoc_ahb_clk = { 2661 + .halt_reg = 0x5024, 2662 + .clkr = { 2663 + .enable_reg = 0x5024, 2664 + .enable_mask = BIT(0), 2665 + .hw.init = &(struct clk_init_data){ 2666 + .name = "mmss_mmssnoc_ahb_clk", 2667 + .parent_names = (const char *[]){ 2668 + "mmss_ahb_clk_src", 2669 + }, 2670 + .num_parents = 1, 2671 + .ops = &clk_branch2_ops, 2672 + .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 2673 + }, 2674 + }, 2675 + }; 2676 + 2677 + static struct clk_branch mmss_mmssnoc_bto_ahb_clk = { 2678 + .halt_reg = 0x5028, 2679 + .clkr = { 2680 + .enable_reg = 0x5028, 2681 + .enable_mask = BIT(0), 2682 + .hw.init = &(struct clk_init_data){ 2683 + .name = "mmss_mmssnoc_bto_ahb_clk", 2684 + .parent_names = (const char *[]){ 2685 + "mmss_ahb_clk_src", 2686 + }, 2687 + .num_parents = 1, 2688 + .ops = &clk_branch2_ops, 2689 + .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 2690 + }, 2691 + }, 2692 + }; 2693 + 2694 + static struct clk_branch mmss_mmssnoc_axi_clk = { 2695 + .halt_reg = 0x506c, 2696 + .clkr = { 2697 + .enable_reg = 0x506c, 2698 + .enable_mask = BIT(0), 2699 + .hw.init = &(struct clk_init_data){ 2700 + .name = "mmss_mmssnoc_axi_clk", 2701 + .parent_names = (const char *[]){ 2702 + "mmss_axi_clk_src", 2703 + }, 2704 + .num_parents = 1, 2705 + .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 2706 + .ops = &clk_branch2_ops, 2707 + }, 2708 + }, 2709 + }; 2710 + 2711 + static struct clk_branch mmss_s0_axi_clk = { 2712 + .halt_reg = 0x5064, 2713 + .clkr = { 2714 + .enable_reg = 0x5064, 2715 + .enable_mask = BIT(0), 2716 + .hw.init = &(struct clk_init_data){ 2717 + .name = "mmss_s0_axi_clk", 2718 + .parent_names = (const char *[]){ 2719 + "mmss_axi_clk_src", 2720 + }, 2721 + .num_parents = 1, 2722 + .ops = &clk_branch2_ops, 2723 + .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 2724 + }, 2725 + }, 2726 + }; 2727 + 2728 + static struct clk_branch ocmemcx_ahb_clk = { 2729 + .halt_reg = 0x405c, 2730 + .clkr = { 2731 + .enable_reg = 0x405c, 2732 + .enable_mask = BIT(0), 2733 + .hw.init = &(struct clk_init_data){ 2734 + .name = "ocmemcx_ahb_clk", 2735 + .parent_names = (const char *[]){ 2736 + "mmss_ahb_clk_src", 2737 + }, 2738 + .num_parents = 1, 2739 + .flags = CLK_SET_RATE_PARENT, 2740 + .ops = &clk_branch2_ops, 2741 + }, 2742 + }, 2743 + }; 2744 + 2745 + static struct clk_branch ocmemcx_ocmemnoc_clk = { 2746 + .halt_reg = 0x4058, 2747 + .clkr = { 2748 + .enable_reg = 0x4058, 2749 + .enable_mask = BIT(0), 2750 + .hw.init = &(struct clk_init_data){ 2751 + .name = "ocmemcx_ocmemnoc_clk", 2752 + .parent_names = (const char *[]){ 2753 + "ocmemnoc_clk_src", 2754 + }, 2755 + .num_parents = 1, 2756 + .flags = CLK_SET_RATE_PARENT, 2757 + .ops = &clk_branch2_ops, 2758 + }, 2759 + }, 2760 + }; 2761 + 2762 + static struct clk_branch oxili_ocmemgx_clk = { 2763 + .halt_reg = 0x402c, 2764 + .clkr = { 2765 + .enable_reg = 0x402c, 2766 + .enable_mask = BIT(0), 2767 + .hw.init = &(struct clk_init_data){ 2768 + .name = "oxili_ocmemgx_clk", 2769 + .parent_names = (const char *[]){ 2770 + "gfx3d_clk_src", 2771 + }, 2772 + .num_parents = 1, 2773 + .flags = CLK_SET_RATE_PARENT, 2774 + .ops = &clk_branch2_ops, 2775 + }, 2776 + }, 2777 + }; 2778 + 2779 + static struct clk_branch oxili_gfx3d_clk = { 2780 + .halt_reg = 0x4028, 2781 + .clkr = { 2782 + .enable_reg = 0x4028, 2783 + .enable_mask = BIT(0), 2784 + .hw.init = &(struct clk_init_data){ 2785 + .name = "oxili_gfx3d_clk", 2786 + .parent_names = (const char *[]){ 2787 + "gfx3d_clk_src", 2788 + }, 2789 + .num_parents = 1, 2790 + .flags = CLK_SET_RATE_PARENT, 2791 + .ops = &clk_branch2_ops, 2792 + }, 2793 + }, 2794 + }; 2795 + 2796 + static struct clk_branch oxili_rbbmtimer_clk = { 2797 + .halt_reg = 0x40b0, 2798 + .clkr = { 2799 + .enable_reg = 0x40b0, 2800 + .enable_mask = BIT(0), 2801 + .hw.init = &(struct clk_init_data){ 2802 + .name = "oxili_rbbmtimer_clk", 2803 + .parent_names = (const char *[]){ 2804 + "rbbmtimer_clk_src", 2805 + }, 2806 + .num_parents = 1, 2807 + .flags = CLK_SET_RATE_PARENT, 2808 + .ops = &clk_branch2_ops, 2809 + }, 2810 + }, 2811 + }; 2812 + 2813 + static struct clk_branch oxilicx_ahb_clk = { 2814 + .halt_reg = 0x403c, 2815 + .clkr = { 2816 + .enable_reg = 0x403c, 2817 + .enable_mask = BIT(0), 2818 + .hw.init = &(struct clk_init_data){ 2819 + .name = "oxilicx_ahb_clk", 2820 + .parent_names = (const char *[]){ 2821 + "mmss_ahb_clk_src", 2822 + }, 2823 + .num_parents = 1, 2824 + .flags = CLK_SET_RATE_PARENT, 2825 + .ops = &clk_branch2_ops, 2826 + }, 2827 + }, 2828 + }; 2829 + 2830 + static struct clk_branch venus0_ahb_clk = { 2831 + .halt_reg = 0x1030, 2832 + .clkr = { 2833 + .enable_reg = 0x1030, 2834 + .enable_mask = BIT(0), 2835 + .hw.init = &(struct clk_init_data){ 2836 + .name = "venus0_ahb_clk", 2837 + .parent_names = (const char *[]){ 2838 + "mmss_ahb_clk_src", 2839 + }, 2840 + .num_parents = 1, 2841 + .flags = CLK_SET_RATE_PARENT, 2842 + .ops = &clk_branch2_ops, 2843 + }, 2844 + }, 2845 + }; 2846 + 2847 + static struct clk_branch venus0_axi_clk = { 2848 + .halt_reg = 0x1034, 2849 + .clkr = { 2850 + .enable_reg = 0x1034, 2851 + .enable_mask = BIT(0), 2852 + .hw.init = &(struct clk_init_data){ 2853 + .name = "venus0_axi_clk", 2854 + .parent_names = (const char *[]){ 2855 + "mmss_axi_clk_src", 2856 + }, 2857 + .num_parents = 1, 2858 + .flags = CLK_SET_RATE_PARENT, 2859 + .ops = &clk_branch2_ops, 2860 + }, 2861 + }, 2862 + }; 2863 + 2864 + static struct clk_branch venus0_core0_vcodec_clk = { 2865 + .halt_reg = 0x1048, 2866 + .clkr = { 2867 + .enable_reg = 0x1048, 2868 + .enable_mask = BIT(0), 2869 + .hw.init = &(struct clk_init_data){ 2870 + .name = "venus0_core0_vcodec_clk", 2871 + .parent_names = (const char *[]){ 2872 + "vcodec0_clk_src", 2873 + }, 2874 + .num_parents = 1, 2875 + .flags = CLK_SET_RATE_PARENT, 2876 + .ops = &clk_branch2_ops, 2877 + }, 2878 + }, 2879 + }; 2880 + 2881 + static struct clk_branch venus0_core1_vcodec_clk = { 2882 + .halt_reg = 0x104c, 2883 + .clkr = { 2884 + .enable_reg = 0x104c, 2885 + .enable_mask = BIT(0), 2886 + .hw.init = &(struct clk_init_data){ 2887 + .name = "venus0_core1_vcodec_clk", 2888 + .parent_names = (const char *[]){ 2889 + "vcodec0_clk_src", 2890 + }, 2891 + .num_parents = 1, 2892 + .flags = CLK_SET_RATE_PARENT, 2893 + .ops = &clk_branch2_ops, 2894 + }, 2895 + }, 2896 + }; 2897 + 2898 + static struct clk_branch venus0_ocmemnoc_clk = { 2899 + .halt_reg = 0x1038, 2900 + .clkr = { 2901 + .enable_reg = 0x1038, 2902 + .enable_mask = BIT(0), 2903 + .hw.init = &(struct clk_init_data){ 2904 + .name = "venus0_ocmemnoc_clk", 2905 + .parent_names = (const char *[]){ 2906 + "ocmemnoc_clk_src", 2907 + }, 2908 + .num_parents = 1, 2909 + .flags = CLK_SET_RATE_PARENT, 2910 + .ops = &clk_branch2_ops, 2911 + }, 2912 + }, 2913 + }; 2914 + 2915 + static struct clk_branch venus0_vcodec0_clk = { 2916 + .halt_reg = 0x1028, 2917 + .clkr = { 2918 + .enable_reg = 0x1028, 2919 + .enable_mask = BIT(0), 2920 + .hw.init = &(struct clk_init_data){ 2921 + .name = "venus0_vcodec0_clk", 2922 + .parent_names = (const char *[]){ 2923 + "vcodec0_clk_src", 2924 + }, 2925 + .num_parents = 1, 2926 + .flags = CLK_SET_RATE_PARENT, 2927 + .ops = &clk_branch2_ops, 2928 + }, 2929 + }, 2930 + }; 2931 + 2932 + static struct clk_branch vpu_ahb_clk = { 2933 + .halt_reg = 0x1430, 2934 + .clkr = { 2935 + .enable_reg = 0x1430, 2936 + .enable_mask = BIT(0), 2937 + .hw.init = &(struct clk_init_data){ 2938 + .name = "vpu_ahb_clk", 2939 + .parent_names = (const char *[]){ 2940 + "mmss_ahb_clk_src", 2941 + }, 2942 + .num_parents = 1, 2943 + .flags = CLK_SET_RATE_PARENT, 2944 + .ops = &clk_branch2_ops, 2945 + }, 2946 + }, 2947 + }; 2948 + 2949 + static struct clk_branch vpu_axi_clk = { 2950 + .halt_reg = 0x143c, 2951 + .clkr = { 2952 + .enable_reg = 0x143c, 2953 + .enable_mask = BIT(0), 2954 + .hw.init = &(struct clk_init_data){ 2955 + .name = "vpu_axi_clk", 2956 + .parent_names = (const char *[]){ 2957 + "mmss_axi_clk_src", 2958 + }, 2959 + .num_parents = 1, 2960 + .flags = CLK_SET_RATE_PARENT, 2961 + .ops = &clk_branch2_ops, 2962 + }, 2963 + }, 2964 + }; 2965 + 2966 + static struct clk_branch vpu_bus_clk = { 2967 + .halt_reg = 0x1440, 2968 + .clkr = { 2969 + .enable_reg = 0x1440, 2970 + .enable_mask = BIT(0), 2971 + .hw.init = &(struct clk_init_data){ 2972 + .name = "vpu_bus_clk", 2973 + .parent_names = (const char *[]){ 2974 + "vpu_bus_clk_src", 2975 + }, 2976 + .num_parents = 1, 2977 + .flags = CLK_SET_RATE_PARENT, 2978 + .ops = &clk_branch2_ops, 2979 + }, 2980 + }, 2981 + }; 2982 + 2983 + static struct clk_branch vpu_cxo_clk = { 2984 + .halt_reg = 0x1434, 2985 + .clkr = { 2986 + .enable_reg = 0x1434, 2987 + .enable_mask = BIT(0), 2988 + .hw.init = &(struct clk_init_data){ 2989 + .name = "vpu_cxo_clk", 2990 + .parent_names = (const char *[]){ "xo" }, 2991 + .num_parents = 1, 2992 + .flags = CLK_SET_RATE_PARENT, 2993 + .ops = &clk_branch2_ops, 2994 + }, 2995 + }, 2996 + }; 2997 + 2998 + static struct clk_branch vpu_maple_clk = { 2999 + .halt_reg = 0x142c, 3000 + .clkr = { 3001 + .enable_reg = 0x142c, 3002 + .enable_mask = BIT(0), 3003 + .hw.init = &(struct clk_init_data){ 3004 + .name = "vpu_maple_clk", 3005 + .parent_names = (const char *[]){ 3006 + "maple_clk_src", 3007 + }, 3008 + .num_parents = 1, 3009 + .flags = CLK_SET_RATE_PARENT, 3010 + .ops = &clk_branch2_ops, 3011 + }, 3012 + }, 3013 + }; 3014 + 3015 + static struct clk_branch vpu_sleep_clk = { 3016 + .halt_reg = 0x1438, 3017 + .clkr = { 3018 + .enable_reg = 0x1438, 3019 + .enable_mask = BIT(0), 3020 + .hw.init = &(struct clk_init_data){ 3021 + .name = "vpu_sleep_clk", 3022 + .parent_names = (const char *[]){ 3023 + "sleep_clk_src", 3024 + }, 3025 + .num_parents = 1, 3026 + .flags = CLK_SET_RATE_PARENT, 3027 + .ops = &clk_branch2_ops, 3028 + }, 3029 + }, 3030 + }; 3031 + 3032 + static struct clk_branch vpu_vdp_clk = { 3033 + .halt_reg = 0x1428, 3034 + .clkr = { 3035 + .enable_reg = 0x1428, 3036 + .enable_mask = BIT(0), 3037 + .hw.init = &(struct clk_init_data){ 3038 + .name = "vpu_vdp_clk", 3039 + .parent_names = (const char *[]){ 3040 + "vdp_clk_src", 3041 + }, 3042 + .num_parents = 1, 3043 + .flags = CLK_SET_RATE_PARENT, 3044 + .ops = &clk_branch2_ops, 3045 + }, 3046 + }, 3047 + }; 3048 + 3049 + static const struct pll_config mmpll1_config = { 3050 + .l = 60, 3051 + .m = 25, 3052 + .n = 32, 3053 + .vco_val = 0x0, 3054 + .vco_mask = 0x3 << 20, 3055 + .pre_div_val = 0x0, 3056 + .pre_div_mask = 0x7 << 12, 3057 + .post_div_val = 0x0, 3058 + .post_div_mask = 0x3 << 8, 3059 + .mn_ena_mask = BIT(24), 3060 + .main_output_mask = BIT(0), 3061 + }; 3062 + 3063 + static const struct pll_config mmpll3_config = { 3064 + .l = 48, 3065 + .m = 7, 3066 + .n = 16, 3067 + .vco_val = 0x0, 3068 + .vco_mask = 0x3 << 20, 3069 + .pre_div_val = 0x0, 3070 + .pre_div_mask = 0x7 << 12, 3071 + .post_div_val = 0x0, 3072 + .post_div_mask = 0x3 << 8, 3073 + .mn_ena_mask = BIT(24), 3074 + .main_output_mask = BIT(0), 3075 + .aux_output_mask = BIT(1), 3076 + }; 3077 + 3078 + static struct clk_regmap *mmcc_apq8084_clocks[] = { 3079 + [MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr, 3080 + [MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr, 3081 + [MMPLL0] = &mmpll0.clkr, 3082 + [MMPLL0_VOTE] = &mmpll0_vote, 3083 + [MMPLL1] = &mmpll1.clkr, 3084 + [MMPLL1_VOTE] = &mmpll1_vote, 3085 + [MMPLL2] = &mmpll2.clkr, 3086 + [MMPLL3] = &mmpll3.clkr, 3087 + [MMPLL4] = &mmpll4.clkr, 3088 + [CSI0_CLK_SRC] = &csi0_clk_src.clkr, 3089 + [CSI1_CLK_SRC] = &csi1_clk_src.clkr, 3090 + [CSI2_CLK_SRC] = &csi2_clk_src.clkr, 3091 + [CSI3_CLK_SRC] = &csi3_clk_src.clkr, 3092 + [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr, 3093 + [VFE0_CLK_SRC] = &vfe0_clk_src.clkr, 3094 + [VFE1_CLK_SRC] = &vfe1_clk_src.clkr, 3095 + [MDP_CLK_SRC] = &mdp_clk_src.clkr, 3096 + [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr, 3097 + [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr, 3098 + [OCMEMNOC_CLK_SRC] = &ocmemnoc_clk_src.clkr, 3099 + [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr, 3100 + [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr, 3101 + [JPEG1_CLK_SRC] = &jpeg1_clk_src.clkr, 3102 + [JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr, 3103 + [EDPPIXEL_CLK_SRC] = &edppixel_clk_src.clkr, 3104 + [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr, 3105 + [VP_CLK_SRC] = &vp_clk_src.clkr, 3106 + [CCI_CLK_SRC] = &cci_clk_src.clkr, 3107 + [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr, 3108 + [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr, 3109 + [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr, 3110 + [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr, 3111 + [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr, 3112 + [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr, 3113 + [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr, 3114 + [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr, 3115 + [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr, 3116 + [CPP_CLK_SRC] = &cpp_clk_src.clkr, 3117 + [BYTE0_CLK_SRC] = &byte0_clk_src.clkr, 3118 + [BYTE1_CLK_SRC] = &byte1_clk_src.clkr, 3119 + [EDPAUX_CLK_SRC] = &edpaux_clk_src.clkr, 3120 + [EDPLINK_CLK_SRC] = &edplink_clk_src.clkr, 3121 + [ESC0_CLK_SRC] = &esc0_clk_src.clkr, 3122 + [ESC1_CLK_SRC] = &esc1_clk_src.clkr, 3123 + [HDMI_CLK_SRC] = &hdmi_clk_src.clkr, 3124 + [VSYNC_CLK_SRC] = &vsync_clk_src.clkr, 3125 + [RBCPR_CLK_SRC] = &rbcpr_clk_src.clkr, 3126 + [RBBMTIMER_CLK_SRC] = &rbbmtimer_clk_src.clkr, 3127 + [MAPLE_CLK_SRC] = &maple_clk_src.clkr, 3128 + [VDP_CLK_SRC] = &vdp_clk_src.clkr, 3129 + [VPU_BUS_CLK_SRC] = &vpu_bus_clk_src.clkr, 3130 + [MMSS_CXO_CLK] = &mmss_cxo_clk.clkr, 3131 + [MMSS_SLEEPCLK_CLK] = &mmss_sleepclk_clk.clkr, 3132 + [AVSYNC_AHB_CLK] = &avsync_ahb_clk.clkr, 3133 + [AVSYNC_EDPPIXEL_CLK] = &avsync_edppixel_clk.clkr, 3134 + [AVSYNC_EXTPCLK_CLK] = &avsync_extpclk_clk.clkr, 3135 + [AVSYNC_PCLK0_CLK] = &avsync_pclk0_clk.clkr, 3136 + [AVSYNC_PCLK1_CLK] = &avsync_pclk1_clk.clkr, 3137 + [AVSYNC_VP_CLK] = &avsync_vp_clk.clkr, 3138 + [CAMSS_AHB_CLK] = &camss_ahb_clk.clkr, 3139 + [CAMSS_CCI_CCI_AHB_CLK] = &camss_cci_cci_ahb_clk.clkr, 3140 + [CAMSS_CCI_CCI_CLK] = &camss_cci_cci_clk.clkr, 3141 + [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr, 3142 + [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr, 3143 + [CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr, 3144 + [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr, 3145 + [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr, 3146 + [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr, 3147 + [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr, 3148 + [CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr, 3149 + [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr, 3150 + [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr, 3151 + [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr, 3152 + [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr, 3153 + [CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr, 3154 + [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr, 3155 + [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr, 3156 + [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr, 3157 + [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr, 3158 + [CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr, 3159 + [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr, 3160 + [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr, 3161 + [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr, 3162 + [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr, 3163 + [CAMSS_GP0_CLK] = &camss_gp0_clk.clkr, 3164 + [CAMSS_GP1_CLK] = &camss_gp1_clk.clkr, 3165 + [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr, 3166 + [CAMSS_JPEG_JPEG0_CLK] = &camss_jpeg_jpeg0_clk.clkr, 3167 + [CAMSS_JPEG_JPEG1_CLK] = &camss_jpeg_jpeg1_clk.clkr, 3168 + [CAMSS_JPEG_JPEG2_CLK] = &camss_jpeg_jpeg2_clk.clkr, 3169 + [CAMSS_JPEG_JPEG_AHB_CLK] = &camss_jpeg_jpeg_ahb_clk.clkr, 3170 + [CAMSS_JPEG_JPEG_AXI_CLK] = &camss_jpeg_jpeg_axi_clk.clkr, 3171 + [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr, 3172 + [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr, 3173 + [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr, 3174 + [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr, 3175 + [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr, 3176 + [CAMSS_PHY0_CSI0PHYTIMER_CLK] = &camss_phy0_csi0phytimer_clk.clkr, 3177 + [CAMSS_PHY1_CSI1PHYTIMER_CLK] = &camss_phy1_csi1phytimer_clk.clkr, 3178 + [CAMSS_PHY2_CSI2PHYTIMER_CLK] = &camss_phy2_csi2phytimer_clk.clkr, 3179 + [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr, 3180 + [CAMSS_VFE_CPP_AHB_CLK] = &camss_vfe_cpp_ahb_clk.clkr, 3181 + [CAMSS_VFE_CPP_CLK] = &camss_vfe_cpp_clk.clkr, 3182 + [CAMSS_VFE_VFE0_CLK] = &camss_vfe_vfe0_clk.clkr, 3183 + [CAMSS_VFE_VFE1_CLK] = &camss_vfe_vfe1_clk.clkr, 3184 + [CAMSS_VFE_VFE_AHB_CLK] = &camss_vfe_vfe_ahb_clk.clkr, 3185 + [CAMSS_VFE_VFE_AXI_CLK] = &camss_vfe_vfe_axi_clk.clkr, 3186 + [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr, 3187 + [MDSS_AXI_CLK] = &mdss_axi_clk.clkr, 3188 + [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr, 3189 + [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr, 3190 + [MDSS_EDPAUX_CLK] = &mdss_edpaux_clk.clkr, 3191 + [MDSS_EDPLINK_CLK] = &mdss_edplink_clk.clkr, 3192 + [MDSS_EDPPIXEL_CLK] = &mdss_edppixel_clk.clkr, 3193 + [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr, 3194 + [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr, 3195 + [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr, 3196 + [MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr, 3197 + [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr, 3198 + [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr, 3199 + [MDSS_MDP_LUT_CLK] = &mdss_mdp_lut_clk.clkr, 3200 + [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr, 3201 + [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr, 3202 + [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr, 3203 + [MMSS_RBCPR_AHB_CLK] = &mmss_rbcpr_ahb_clk.clkr, 3204 + [MMSS_RBCPR_CLK] = &mmss_rbcpr_clk.clkr, 3205 + [MMSS_SPDM_AHB_CLK] = &mmss_spdm_ahb_clk.clkr, 3206 + [MMSS_SPDM_AXI_CLK] = &mmss_spdm_axi_clk.clkr, 3207 + [MMSS_SPDM_CSI0_CLK] = &mmss_spdm_csi0_clk.clkr, 3208 + [MMSS_SPDM_GFX3D_CLK] = &mmss_spdm_gfx3d_clk.clkr, 3209 + [MMSS_SPDM_JPEG0_CLK] = &mmss_spdm_jpeg0_clk.clkr, 3210 + [MMSS_SPDM_JPEG1_CLK] = &mmss_spdm_jpeg1_clk.clkr, 3211 + [MMSS_SPDM_JPEG2_CLK] = &mmss_spdm_jpeg2_clk.clkr, 3212 + [MMSS_SPDM_MDP_CLK] = &mmss_spdm_mdp_clk.clkr, 3213 + [MMSS_SPDM_PCLK0_CLK] = &mmss_spdm_pclk0_clk.clkr, 3214 + [MMSS_SPDM_PCLK1_CLK] = &mmss_spdm_pclk1_clk.clkr, 3215 + [MMSS_SPDM_VCODEC0_CLK] = &mmss_spdm_vcodec0_clk.clkr, 3216 + [MMSS_SPDM_VFE0_CLK] = &mmss_spdm_vfe0_clk.clkr, 3217 + [MMSS_SPDM_VFE1_CLK] = &mmss_spdm_vfe1_clk.clkr, 3218 + [MMSS_SPDM_RM_AXI_CLK] = &mmss_spdm_rm_axi_clk.clkr, 3219 + [MMSS_SPDM_RM_OCMEMNOC_CLK] = &mmss_spdm_rm_ocmemnoc_clk.clkr, 3220 + [MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr, 3221 + [MMSS_MMSSNOC_AHB_CLK] = &mmss_mmssnoc_ahb_clk.clkr, 3222 + [MMSS_MMSSNOC_BTO_AHB_CLK] = &mmss_mmssnoc_bto_ahb_clk.clkr, 3223 + [MMSS_MMSSNOC_AXI_CLK] = &mmss_mmssnoc_axi_clk.clkr, 3224 + [MMSS_S0_AXI_CLK] = &mmss_s0_axi_clk.clkr, 3225 + [OCMEMCX_AHB_CLK] = &ocmemcx_ahb_clk.clkr, 3226 + [OCMEMCX_OCMEMNOC_CLK] = &ocmemcx_ocmemnoc_clk.clkr, 3227 + [OXILI_OCMEMGX_CLK] = &oxili_ocmemgx_clk.clkr, 3228 + [OXILI_GFX3D_CLK] = &oxili_gfx3d_clk.clkr, 3229 + [OXILI_RBBMTIMER_CLK] = &oxili_rbbmtimer_clk.clkr, 3230 + [OXILICX_AHB_CLK] = &oxilicx_ahb_clk.clkr, 3231 + [VENUS0_AHB_CLK] = &venus0_ahb_clk.clkr, 3232 + [VENUS0_AXI_CLK] = &venus0_axi_clk.clkr, 3233 + [VENUS0_CORE0_VCODEC_CLK] = &venus0_core0_vcodec_clk.clkr, 3234 + [VENUS0_CORE1_VCODEC_CLK] = &venus0_core1_vcodec_clk.clkr, 3235 + [VENUS0_OCMEMNOC_CLK] = &venus0_ocmemnoc_clk.clkr, 3236 + [VENUS0_VCODEC0_CLK] = &venus0_vcodec0_clk.clkr, 3237 + [VPU_AHB_CLK] = &vpu_ahb_clk.clkr, 3238 + [VPU_AXI_CLK] = &vpu_axi_clk.clkr, 3239 + [VPU_BUS_CLK] = &vpu_bus_clk.clkr, 3240 + [VPU_CXO_CLK] = &vpu_cxo_clk.clkr, 3241 + [VPU_MAPLE_CLK] = &vpu_maple_clk.clkr, 3242 + [VPU_SLEEP_CLK] = &vpu_sleep_clk.clkr, 3243 + [VPU_VDP_CLK] = &vpu_vdp_clk.clkr, 3244 + }; 3245 + 3246 + static const struct qcom_reset_map mmcc_apq8084_resets[] = { 3247 + [MMSS_SPDM_RESET] = { 0x0200 }, 3248 + [MMSS_SPDM_RM_RESET] = { 0x0300 }, 3249 + [VENUS0_RESET] = { 0x1020 }, 3250 + [VPU_RESET] = { 0x1400 }, 3251 + [MDSS_RESET] = { 0x2300 }, 3252 + [AVSYNC_RESET] = { 0x2400 }, 3253 + [CAMSS_PHY0_RESET] = { 0x3020 }, 3254 + [CAMSS_PHY1_RESET] = { 0x3050 }, 3255 + [CAMSS_PHY2_RESET] = { 0x3080 }, 3256 + [CAMSS_CSI0_RESET] = { 0x30b0 }, 3257 + [CAMSS_CSI0PHY_RESET] = { 0x30c0 }, 3258 + [CAMSS_CSI0RDI_RESET] = { 0x30d0 }, 3259 + [CAMSS_CSI0PIX_RESET] = { 0x30e0 }, 3260 + [CAMSS_CSI1_RESET] = { 0x3120 }, 3261 + [CAMSS_CSI1PHY_RESET] = { 0x3130 }, 3262 + [CAMSS_CSI1RDI_RESET] = { 0x3140 }, 3263 + [CAMSS_CSI1PIX_RESET] = { 0x3150 }, 3264 + [CAMSS_CSI2_RESET] = { 0x3180 }, 3265 + [CAMSS_CSI2PHY_RESET] = { 0x3190 }, 3266 + [CAMSS_CSI2RDI_RESET] = { 0x31a0 }, 3267 + [CAMSS_CSI2PIX_RESET] = { 0x31b0 }, 3268 + [CAMSS_CSI3_RESET] = { 0x31e0 }, 3269 + [CAMSS_CSI3PHY_RESET] = { 0x31f0 }, 3270 + [CAMSS_CSI3RDI_RESET] = { 0x3200 }, 3271 + [CAMSS_CSI3PIX_RESET] = { 0x3210 }, 3272 + [CAMSS_ISPIF_RESET] = { 0x3220 }, 3273 + [CAMSS_CCI_RESET] = { 0x3340 }, 3274 + [CAMSS_MCLK0_RESET] = { 0x3380 }, 3275 + [CAMSS_MCLK1_RESET] = { 0x33b0 }, 3276 + [CAMSS_MCLK2_RESET] = { 0x33e0 }, 3277 + [CAMSS_MCLK3_RESET] = { 0x3410 }, 3278 + [CAMSS_GP0_RESET] = { 0x3440 }, 3279 + [CAMSS_GP1_RESET] = { 0x3470 }, 3280 + [CAMSS_TOP_RESET] = { 0x3480 }, 3281 + [CAMSS_AHB_RESET] = { 0x3488 }, 3282 + [CAMSS_MICRO_RESET] = { 0x3490 }, 3283 + [CAMSS_JPEG_RESET] = { 0x35a0 }, 3284 + [CAMSS_VFE_RESET] = { 0x36a0 }, 3285 + [CAMSS_CSI_VFE0_RESET] = { 0x3700 }, 3286 + [CAMSS_CSI_VFE1_RESET] = { 0x3710 }, 3287 + [OXILI_RESET] = { 0x4020 }, 3288 + [OXILICX_RESET] = { 0x4030 }, 3289 + [OCMEMCX_RESET] = { 0x4050 }, 3290 + [MMSS_RBCRP_RESET] = { 0x4080 }, 3291 + [MMSSNOCAHB_RESET] = { 0x5020 }, 3292 + [MMSSNOCAXI_RESET] = { 0x5060 }, 3293 + }; 3294 + 3295 + static const struct regmap_config mmcc_apq8084_regmap_config = { 3296 + .reg_bits = 32, 3297 + .reg_stride = 4, 3298 + .val_bits = 32, 3299 + .max_register = 0x5104, 3300 + .fast_io = true, 3301 + }; 3302 + 3303 + static const struct qcom_cc_desc mmcc_apq8084_desc = { 3304 + .config = &mmcc_apq8084_regmap_config, 3305 + .clks = mmcc_apq8084_clocks, 3306 + .num_clks = ARRAY_SIZE(mmcc_apq8084_clocks), 3307 + .resets = mmcc_apq8084_resets, 3308 + .num_resets = ARRAY_SIZE(mmcc_apq8084_resets), 3309 + }; 3310 + 3311 + static const struct of_device_id mmcc_apq8084_match_table[] = { 3312 + { .compatible = "qcom,mmcc-apq8084" }, 3313 + { } 3314 + }; 3315 + MODULE_DEVICE_TABLE(of, mmcc_apq8084_match_table); 3316 + 3317 + static int mmcc_apq8084_probe(struct platform_device *pdev) 3318 + { 3319 + int ret; 3320 + struct regmap *regmap; 3321 + 3322 + ret = qcom_cc_probe(pdev, &mmcc_apq8084_desc); 3323 + if (ret) 3324 + return ret; 3325 + 3326 + regmap = dev_get_regmap(&pdev->dev, NULL); 3327 + clk_pll_configure_sr_hpm_lp(&mmpll1, regmap, &mmpll1_config, true); 3328 + clk_pll_configure_sr_hpm_lp(&mmpll3, regmap, &mmpll3_config, false); 3329 + 3330 + return 0; 3331 + } 3332 + 3333 + static int mmcc_apq8084_remove(struct platform_device *pdev) 3334 + { 3335 + qcom_cc_remove(pdev); 3336 + return 0; 3337 + } 3338 + 3339 + static struct platform_driver mmcc_apq8084_driver = { 3340 + .probe = mmcc_apq8084_probe, 3341 + .remove = mmcc_apq8084_remove, 3342 + .driver = { 3343 + .name = "mmcc-apq8084", 3344 + .owner = THIS_MODULE, 3345 + .of_match_table = mmcc_apq8084_match_table, 3346 + }, 3347 + }; 3348 + module_platform_driver(mmcc_apq8084_driver); 3349 + 3350 + MODULE_DESCRIPTION("QCOM MMCC APQ8084 Driver"); 3351 + MODULE_LICENSE("GPL v2"); 3352 + MODULE_ALIAS("platform:mmcc-apq8084");
+476 -50
drivers/clk/qcom/mmcc-msm8960.c
··· 37 37 #define P_PLL8 1 38 38 #define P_PLL2 2 39 39 #define P_PLL3 3 40 + #define P_PLL15 3 41 + 42 + #define F_MN(f, s, _m, _n) { .freq = f, .src = s, .m = _m, .n = _n } 40 43 41 44 static u8 mmcc_pxo_pll8_pll2_map[] = { 42 45 [P_PXO] = 0, ··· 60 57 [P_PLL3] = 3, 61 58 }; 62 59 60 + static const char *mmcc_pxo_pll8_pll2_pll15[] = { 61 + "pxo", 62 + "pll8_vote", 63 + "pll2", 64 + "pll15", 65 + }; 66 + 67 + static u8 mmcc_pxo_pll8_pll2_pll15_map[] = { 68 + [P_PXO] = 0, 69 + [P_PLL8] = 2, 70 + [P_PLL2] = 1, 71 + [P_PLL15] = 3, 72 + }; 73 + 63 74 static const char *mmcc_pxo_pll8_pll2_pll3[] = { 64 75 "pxo", 65 - "pll2", 66 76 "pll8_vote", 77 + "pll2", 67 78 "pll3", 68 79 }; 69 80 ··· 95 78 .num_parents = 1, 96 79 .ops = &clk_pll_ops, 97 80 }, 81 + }; 82 + 83 + static struct clk_pll pll15 = { 84 + .l_reg = 0x33c, 85 + .m_reg = 0x340, 86 + .n_reg = 0x344, 87 + .config_reg = 0x348, 88 + .mode_reg = 0x338, 89 + .status_reg = 0x350, 90 + .status_bit = 16, 91 + .clkr.hw.init = &(struct clk_init_data){ 92 + .name = "pll15", 93 + .parent_names = (const char *[]){ "pxo" }, 94 + .num_parents = 1, 95 + .ops = &clk_pll_ops, 96 + }, 97 + }; 98 + 99 + static const struct pll_config pll15_config = { 100 + .l = 33, 101 + .m = 1, 102 + .n = 3, 103 + .vco_val = 0x2 << 16, 104 + .vco_mask = 0x3 << 16, 105 + .pre_div_val = 0x0, 106 + .pre_div_mask = BIT(19), 107 + .post_div_val = 0x0, 108 + .post_div_mask = 0x3 << 20, 109 + .mn_ena_mask = BIT(22), 110 + .main_output_mask = BIT(23), 98 111 }; 99 112 100 113 static struct freq_tbl clk_tbl_cam[] = { ··· 757 710 }; 758 711 759 712 static struct freq_tbl clk_tbl_gfx2d[] = { 760 - { 27000000, P_PXO, 1, 0 }, 761 - { 48000000, P_PLL8, 1, 8 }, 762 - { 54857000, P_PLL8, 1, 7 }, 763 - { 64000000, P_PLL8, 1, 6 }, 764 - { 76800000, P_PLL8, 1, 5 }, 765 - { 96000000, P_PLL8, 1, 4 }, 766 - { 128000000, P_PLL8, 1, 3 }, 767 - { 145455000, P_PLL2, 2, 11 }, 768 - { 160000000, P_PLL2, 1, 5 }, 769 - { 177778000, P_PLL2, 2, 9 }, 770 - { 200000000, P_PLL2, 1, 4 }, 771 - { 228571000, P_PLL2, 2, 7 }, 713 + F_MN( 27000000, P_PXO, 1, 0), 714 + F_MN( 48000000, P_PLL8, 1, 8), 715 + F_MN( 54857000, P_PLL8, 1, 7), 716 + F_MN( 64000000, P_PLL8, 1, 6), 717 + F_MN( 76800000, P_PLL8, 1, 5), 718 + F_MN( 96000000, P_PLL8, 1, 4), 719 + F_MN(128000000, P_PLL8, 1, 3), 720 + F_MN(145455000, P_PLL2, 2, 11), 721 + F_MN(160000000, P_PLL2, 1, 5), 722 + F_MN(177778000, P_PLL2, 2, 9), 723 + F_MN(200000000, P_PLL2, 1, 4), 724 + F_MN(228571000, P_PLL2, 2, 7), 772 725 { } 773 726 }; 774 727 ··· 889 842 }; 890 843 891 844 static struct freq_tbl clk_tbl_gfx3d[] = { 892 - { 27000000, P_PXO, 1, 0 }, 893 - { 48000000, P_PLL8, 1, 8 }, 894 - { 54857000, P_PLL8, 1, 7 }, 895 - { 64000000, P_PLL8, 1, 6 }, 896 - { 76800000, P_PLL8, 1, 5 }, 897 - { 96000000, P_PLL8, 1, 4 }, 898 - { 128000000, P_PLL8, 1, 3 }, 899 - { 145455000, P_PLL2, 2, 11 }, 900 - { 160000000, P_PLL2, 1, 5 }, 901 - { 177778000, P_PLL2, 2, 9 }, 902 - { 200000000, P_PLL2, 1, 4 }, 903 - { 228571000, P_PLL2, 2, 7 }, 904 - { 266667000, P_PLL2, 1, 3 }, 905 - { 300000000, P_PLL3, 1, 4 }, 906 - { 320000000, P_PLL2, 2, 5 }, 907 - { 400000000, P_PLL2, 1, 2 }, 845 + F_MN( 27000000, P_PXO, 1, 0), 846 + F_MN( 48000000, P_PLL8, 1, 8), 847 + F_MN( 54857000, P_PLL8, 1, 7), 848 + F_MN( 64000000, P_PLL8, 1, 6), 849 + F_MN( 76800000, P_PLL8, 1, 5), 850 + F_MN( 96000000, P_PLL8, 1, 4), 851 + F_MN(128000000, P_PLL8, 1, 3), 852 + F_MN(145455000, P_PLL2, 2, 11), 853 + F_MN(160000000, P_PLL2, 1, 5), 854 + F_MN(177778000, P_PLL2, 2, 9), 855 + F_MN(200000000, P_PLL2, 1, 4), 856 + F_MN(228571000, P_PLL2, 2, 7), 857 + F_MN(266667000, P_PLL2, 1, 3), 858 + F_MN(300000000, P_PLL3, 1, 4), 859 + F_MN(320000000, P_PLL2, 2, 5), 860 + F_MN(400000000, P_PLL2, 1, 2), 861 + { } 862 + }; 863 + 864 + static struct freq_tbl clk_tbl_gfx3d_8064[] = { 865 + F_MN( 27000000, P_PXO, 0, 0), 866 + F_MN( 48000000, P_PLL8, 1, 8), 867 + F_MN( 54857000, P_PLL8, 1, 7), 868 + F_MN( 64000000, P_PLL8, 1, 6), 869 + F_MN( 76800000, P_PLL8, 1, 5), 870 + F_MN( 96000000, P_PLL8, 1, 4), 871 + F_MN(128000000, P_PLL8, 1, 3), 872 + F_MN(145455000, P_PLL2, 2, 11), 873 + F_MN(160000000, P_PLL2, 1, 5), 874 + F_MN(177778000, P_PLL2, 2, 9), 875 + F_MN(192000000, P_PLL8, 1, 2), 876 + F_MN(200000000, P_PLL2, 1, 4), 877 + F_MN(228571000, P_PLL2, 2, 7), 878 + F_MN(266667000, P_PLL2, 1, 3), 879 + F_MN(320000000, P_PLL2, 2, 5), 880 + F_MN(400000000, P_PLL2, 1, 2), 881 + F_MN(450000000, P_PLL15, 1, 2), 908 882 { } 909 883 }; 910 884 ··· 965 897 .hw.init = &(struct clk_init_data){ 966 898 .name = "gfx3d_src", 967 899 .parent_names = mmcc_pxo_pll8_pll2_pll3, 968 - .num_parents = 3, 900 + .num_parents = 4, 969 901 .ops = &clk_dyn_rcg_ops, 970 902 }, 971 903 }, 904 + }; 905 + 906 + static const struct clk_init_data gfx3d_8064_init = { 907 + .name = "gfx3d_src", 908 + .parent_names = mmcc_pxo_pll8_pll2_pll15, 909 + .num_parents = 4, 910 + .ops = &clk_dyn_rcg_ops, 972 911 }; 973 912 974 913 static struct clk_branch gfx3d_clk = { ··· 987 912 .hw.init = &(struct clk_init_data){ 988 913 .name = "gfx3d_clk", 989 914 .parent_names = (const char *[]){ "gfx3d_src" }, 915 + .num_parents = 1, 916 + .ops = &clk_branch_ops, 917 + .flags = CLK_SET_RATE_PARENT, 918 + }, 919 + }, 920 + }; 921 + 922 + static struct freq_tbl clk_tbl_vcap[] = { 923 + F_MN( 27000000, P_PXO, 0, 0), 924 + F_MN( 54860000, P_PLL8, 1, 7), 925 + F_MN( 64000000, P_PLL8, 1, 6), 926 + F_MN( 76800000, P_PLL8, 1, 5), 927 + F_MN(128000000, P_PLL8, 1, 3), 928 + F_MN(160000000, P_PLL2, 1, 5), 929 + F_MN(200000000, P_PLL2, 1, 4), 930 + { } 931 + }; 932 + 933 + static struct clk_dyn_rcg vcap_src = { 934 + .ns_reg = 0x021c, 935 + .md_reg[0] = 0x01ec, 936 + .md_reg[1] = 0x0218, 937 + .mn[0] = { 938 + .mnctr_en_bit = 8, 939 + .mnctr_reset_bit = 23, 940 + .mnctr_mode_shift = 9, 941 + .n_val_shift = 18, 942 + .m_val_shift = 4, 943 + .width = 4, 944 + }, 945 + .mn[1] = { 946 + .mnctr_en_bit = 5, 947 + .mnctr_reset_bit = 22, 948 + .mnctr_mode_shift = 6, 949 + .n_val_shift = 14, 950 + .m_val_shift = 4, 951 + .width = 4, 952 + }, 953 + .s[0] = { 954 + .src_sel_shift = 3, 955 + .parent_map = mmcc_pxo_pll8_pll2_map, 956 + }, 957 + .s[1] = { 958 + .src_sel_shift = 0, 959 + .parent_map = mmcc_pxo_pll8_pll2_map, 960 + }, 961 + .mux_sel_bit = 11, 962 + .freq_tbl = clk_tbl_vcap, 963 + .clkr = { 964 + .enable_reg = 0x0178, 965 + .enable_mask = BIT(2), 966 + .hw.init = &(struct clk_init_data){ 967 + .name = "vcap_src", 968 + .parent_names = mmcc_pxo_pll8_pll2, 969 + .num_parents = 3, 970 + .ops = &clk_dyn_rcg_ops, 971 + }, 972 + }, 973 + }; 974 + 975 + static struct clk_branch vcap_clk = { 976 + .halt_reg = 0x0240, 977 + .halt_bit = 15, 978 + .clkr = { 979 + .enable_reg = 0x0178, 980 + .enable_mask = BIT(0), 981 + .hw.init = &(struct clk_init_data){ 982 + .name = "vcap_clk", 983 + .parent_names = (const char *[]){ "vcap_src" }, 984 + .num_parents = 1, 985 + .ops = &clk_branch_ops, 986 + .flags = CLK_SET_RATE_PARENT, 987 + }, 988 + }, 989 + }; 990 + 991 + static struct clk_branch vcap_npl_clk = { 992 + .halt_reg = 0x0240, 993 + .halt_bit = 25, 994 + .clkr = { 995 + .enable_reg = 0x0178, 996 + .enable_mask = BIT(13), 997 + .hw.init = &(struct clk_init_data){ 998 + .name = "vcap_npl_clk", 999 + .parent_names = (const char *[]){ "vcap_src" }, 990 1000 .num_parents = 1, 991 1001 .ops = &clk_branch_ops, 992 1002 .flags = CLK_SET_RATE_PARENT, ··· 1155 995 .ns_reg = 0x00ac, 1156 996 .p = { 1157 997 .pre_div_shift = 12, 1158 - .pre_div_width = 2, 998 + .pre_div_width = 4, 1159 999 }, 1160 1000 .s = { 1161 1001 .src_sel_shift = 0, ··· 1275 1115 .enable_reg = 0x016c, 1276 1116 .enable_mask = BIT(0), 1277 1117 .hw.init = &(struct clk_init_data){ 1278 - .parent_names = (const char *[]){ "mdp_clk" }, 1118 + .parent_names = (const char *[]){ "mdp_src" }, 1279 1119 .num_parents = 1, 1280 1120 .name = "mdp_lut_clk", 1281 1121 .ops = &clk_branch_ops, ··· 1378 1218 }; 1379 1219 1380 1220 static struct freq_tbl clk_tbl_tv[] = { 1381 - { 25200000, P_HDMI_PLL, 1, 0, 0 }, 1382 - { 27000000, P_HDMI_PLL, 1, 0, 0 }, 1383 - { 27030000, P_HDMI_PLL, 1, 0, 0 }, 1384 - { 74250000, P_HDMI_PLL, 1, 0, 0 }, 1385 - { 108000000, P_HDMI_PLL, 1, 0, 0 }, 1386 - { 148500000, P_HDMI_PLL, 1, 0, 0 }, 1221 + { .src = P_HDMI_PLL, .pre_div = 1 }, 1387 1222 { } 1388 1223 }; 1389 1224 ··· 1409 1254 .name = "tv_src", 1410 1255 .parent_names = mmcc_pxo_hdmi, 1411 1256 .num_parents = 2, 1412 - .ops = &clk_rcg_ops, 1257 + .ops = &clk_rcg_bypass_ops, 1413 1258 .flags = CLK_SET_RATE_PARENT, 1414 1259 }, 1415 1260 }, ··· 1481 1326 }, 1482 1327 }; 1483 1328 1329 + static struct clk_branch rgb_tv_clk = { 1330 + .halt_reg = 0x0240, 1331 + .halt_bit = 27, 1332 + .clkr = { 1333 + .enable_reg = 0x0124, 1334 + .enable_mask = BIT(14), 1335 + .hw.init = &(struct clk_init_data){ 1336 + .parent_names = tv_src_name, 1337 + .num_parents = 1, 1338 + .name = "rgb_tv_clk", 1339 + .ops = &clk_branch_ops, 1340 + .flags = CLK_SET_RATE_PARENT, 1341 + }, 1342 + }, 1343 + }; 1344 + 1345 + static struct clk_branch npl_tv_clk = { 1346 + .halt_reg = 0x0240, 1347 + .halt_bit = 26, 1348 + .clkr = { 1349 + .enable_reg = 0x0124, 1350 + .enable_mask = BIT(16), 1351 + .hw.init = &(struct clk_init_data){ 1352 + .parent_names = tv_src_name, 1353 + .num_parents = 1, 1354 + .name = "npl_tv_clk", 1355 + .ops = &clk_branch_ops, 1356 + .flags = CLK_SET_RATE_PARENT, 1357 + }, 1358 + }, 1359 + }; 1360 + 1484 1361 static struct clk_branch hdmi_app_clk = { 1485 1362 .halt_reg = 0x01cc, 1486 1363 .halt_bit = 25, ··· 1529 1342 }; 1530 1343 1531 1344 static struct freq_tbl clk_tbl_vcodec[] = { 1532 - { 27000000, P_PXO, 1, 0 }, 1533 - { 32000000, P_PLL8, 1, 12 }, 1534 - { 48000000, P_PLL8, 1, 8 }, 1535 - { 54860000, P_PLL8, 1, 7 }, 1536 - { 96000000, P_PLL8, 1, 4 }, 1537 - { 133330000, P_PLL2, 1, 6 }, 1538 - { 200000000, P_PLL2, 1, 4 }, 1539 - { 228570000, P_PLL2, 2, 7 }, 1540 - { 266670000, P_PLL2, 1, 3 }, 1345 + F_MN( 27000000, P_PXO, 1, 0), 1346 + F_MN( 32000000, P_PLL8, 1, 12), 1347 + F_MN( 48000000, P_PLL8, 1, 8), 1348 + F_MN( 54860000, P_PLL8, 1, 7), 1349 + F_MN( 96000000, P_PLL8, 1, 4), 1350 + F_MN(133330000, P_PLL2, 1, 6), 1351 + F_MN(200000000, P_PLL2, 1, 4), 1352 + F_MN(228570000, P_PLL2, 2, 7), 1353 + F_MN(266670000, P_PLL2, 1, 3), 1541 1354 { } 1542 1355 }; 1543 1356 ··· 1888 1701 }, 1889 1702 }; 1890 1703 1704 + static struct clk_branch vcap_axi_clk = { 1705 + .halt_reg = 0x0240, 1706 + .halt_bit = 20, 1707 + .hwcg_reg = 0x0244, 1708 + .hwcg_bit = 11, 1709 + .clkr = { 1710 + .enable_reg = 0x0244, 1711 + .enable_mask = BIT(12), 1712 + .hw.init = &(struct clk_init_data){ 1713 + .name = "vcap_axi_clk", 1714 + .ops = &clk_branch_ops, 1715 + .flags = CLK_IS_ROOT, 1716 + }, 1717 + }, 1718 + }; 1719 + 1891 1720 static struct clk_branch vpe_axi_clk = { 1892 1721 .hwcg_reg = 0x0020, 1893 1722 .hwcg_bit = 27, ··· 2206 2003 }, 2207 2004 }; 2208 2005 2006 + static struct clk_branch vcap_ahb_clk = { 2007 + .halt_reg = 0x0240, 2008 + .halt_bit = 23, 2009 + .clkr = { 2010 + .enable_reg = 0x0248, 2011 + .enable_mask = BIT(1), 2012 + .hw.init = &(struct clk_init_data){ 2013 + .name = "vcap_ahb_clk", 2014 + .ops = &clk_branch_ops, 2015 + .flags = CLK_IS_ROOT, 2016 + }, 2017 + }, 2018 + }; 2019 + 2209 2020 static struct clk_branch vcodec_ahb_clk = { 2210 2021 .hwcg_reg = 0x0038, 2211 2022 .hwcg_bit = 26, ··· 2432 2215 [CSI_RDI2_RESET] = { 0x0214 }, 2433 2216 }; 2434 2217 2218 + static struct clk_regmap *mmcc_apq8064_clks[] = { 2219 + [AMP_AHB_CLK] = &amp_ahb_clk.clkr, 2220 + [DSI2_S_AHB_CLK] = &dsi2_s_ahb_clk.clkr, 2221 + [JPEGD_AHB_CLK] = &jpegd_ahb_clk.clkr, 2222 + [DSI_S_AHB_CLK] = &dsi_s_ahb_clk.clkr, 2223 + [DSI2_M_AHB_CLK] = &dsi2_m_ahb_clk.clkr, 2224 + [VPE_AHB_CLK] = &vpe_ahb_clk.clkr, 2225 + [SMMU_AHB_CLK] = &smmu_ahb_clk.clkr, 2226 + [HDMI_M_AHB_CLK] = &hdmi_m_ahb_clk.clkr, 2227 + [VFE_AHB_CLK] = &vfe_ahb_clk.clkr, 2228 + [ROT_AHB_CLK] = &rot_ahb_clk.clkr, 2229 + [VCODEC_AHB_CLK] = &vcodec_ahb_clk.clkr, 2230 + [MDP_AHB_CLK] = &mdp_ahb_clk.clkr, 2231 + [DSI_M_AHB_CLK] = &dsi_m_ahb_clk.clkr, 2232 + [CSI_AHB_CLK] = &csi_ahb_clk.clkr, 2233 + [MMSS_IMEM_AHB_CLK] = &mmss_imem_ahb_clk.clkr, 2234 + [IJPEG_AHB_CLK] = &ijpeg_ahb_clk.clkr, 2235 + [HDMI_S_AHB_CLK] = &hdmi_s_ahb_clk.clkr, 2236 + [GFX3D_AHB_CLK] = &gfx3d_ahb_clk.clkr, 2237 + [JPEGD_AXI_CLK] = &jpegd_axi_clk.clkr, 2238 + [GMEM_AXI_CLK] = &gmem_axi_clk.clkr, 2239 + [MDP_AXI_CLK] = &mdp_axi_clk.clkr, 2240 + [MMSS_IMEM_AXI_CLK] = &mmss_imem_axi_clk.clkr, 2241 + [IJPEG_AXI_CLK] = &ijpeg_axi_clk.clkr, 2242 + [GFX3D_AXI_CLK] = &gfx3d_axi_clk.clkr, 2243 + [VCODEC_AXI_CLK] = &vcodec_axi_clk.clkr, 2244 + [VFE_AXI_CLK] = &vfe_axi_clk.clkr, 2245 + [VPE_AXI_CLK] = &vpe_axi_clk.clkr, 2246 + [ROT_AXI_CLK] = &rot_axi_clk.clkr, 2247 + [VCODEC_AXI_A_CLK] = &vcodec_axi_a_clk.clkr, 2248 + [VCODEC_AXI_B_CLK] = &vcodec_axi_b_clk.clkr, 2249 + [CSI0_SRC] = &csi0_src.clkr, 2250 + [CSI0_CLK] = &csi0_clk.clkr, 2251 + [CSI0_PHY_CLK] = &csi0_phy_clk.clkr, 2252 + [CSI1_SRC] = &csi1_src.clkr, 2253 + [CSI1_CLK] = &csi1_clk.clkr, 2254 + [CSI1_PHY_CLK] = &csi1_phy_clk.clkr, 2255 + [CSI2_SRC] = &csi2_src.clkr, 2256 + [CSI2_CLK] = &csi2_clk.clkr, 2257 + [CSI2_PHY_CLK] = &csi2_phy_clk.clkr, 2258 + [CSI_PIX_CLK] = &csi_pix_clk.clkr, 2259 + [CSI_RDI_CLK] = &csi_rdi_clk.clkr, 2260 + [MDP_VSYNC_CLK] = &mdp_vsync_clk.clkr, 2261 + [HDMI_APP_CLK] = &hdmi_app_clk.clkr, 2262 + [CSI_PIX1_CLK] = &csi_pix1_clk.clkr, 2263 + [CSI_RDI2_CLK] = &csi_rdi2_clk.clkr, 2264 + [CSI_RDI1_CLK] = &csi_rdi1_clk.clkr, 2265 + [GFX3D_SRC] = &gfx3d_src.clkr, 2266 + [GFX3D_CLK] = &gfx3d_clk.clkr, 2267 + [IJPEG_SRC] = &ijpeg_src.clkr, 2268 + [IJPEG_CLK] = &ijpeg_clk.clkr, 2269 + [JPEGD_SRC] = &jpegd_src.clkr, 2270 + [JPEGD_CLK] = &jpegd_clk.clkr, 2271 + [MDP_SRC] = &mdp_src.clkr, 2272 + [MDP_CLK] = &mdp_clk.clkr, 2273 + [MDP_LUT_CLK] = &mdp_lut_clk.clkr, 2274 + [ROT_SRC] = &rot_src.clkr, 2275 + [ROT_CLK] = &rot_clk.clkr, 2276 + [TV_DAC_CLK] = &tv_dac_clk.clkr, 2277 + [HDMI_TV_CLK] = &hdmi_tv_clk.clkr, 2278 + [MDP_TV_CLK] = &mdp_tv_clk.clkr, 2279 + [TV_SRC] = &tv_src.clkr, 2280 + [VCODEC_SRC] = &vcodec_src.clkr, 2281 + [VCODEC_CLK] = &vcodec_clk.clkr, 2282 + [VFE_SRC] = &vfe_src.clkr, 2283 + [VFE_CLK] = &vfe_clk.clkr, 2284 + [VFE_CSI_CLK] = &vfe_csi_clk.clkr, 2285 + [VPE_SRC] = &vpe_src.clkr, 2286 + [VPE_CLK] = &vpe_clk.clkr, 2287 + [CAMCLK0_SRC] = &camclk0_src.clkr, 2288 + [CAMCLK0_CLK] = &camclk0_clk.clkr, 2289 + [CAMCLK1_SRC] = &camclk1_src.clkr, 2290 + [CAMCLK1_CLK] = &camclk1_clk.clkr, 2291 + [CAMCLK2_SRC] = &camclk2_src.clkr, 2292 + [CAMCLK2_CLK] = &camclk2_clk.clkr, 2293 + [CSIPHYTIMER_SRC] = &csiphytimer_src.clkr, 2294 + [CSIPHY2_TIMER_CLK] = &csiphy2_timer_clk.clkr, 2295 + [CSIPHY1_TIMER_CLK] = &csiphy1_timer_clk.clkr, 2296 + [CSIPHY0_TIMER_CLK] = &csiphy0_timer_clk.clkr, 2297 + [PLL2] = &pll2.clkr, 2298 + [RGB_TV_CLK] = &rgb_tv_clk.clkr, 2299 + [NPL_TV_CLK] = &npl_tv_clk.clkr, 2300 + [VCAP_AHB_CLK] = &vcap_ahb_clk.clkr, 2301 + [VCAP_AXI_CLK] = &vcap_axi_clk.clkr, 2302 + [VCAP_SRC] = &vcap_src.clkr, 2303 + [VCAP_CLK] = &vcap_clk.clkr, 2304 + [VCAP_NPL_CLK] = &vcap_npl_clk.clkr, 2305 + [PLL15] = &pll15.clkr, 2306 + }; 2307 + 2308 + static const struct qcom_reset_map mmcc_apq8064_resets[] = { 2309 + [GFX3D_AXI_RESET] = { 0x0208, 17 }, 2310 + [VCAP_AXI_RESET] = { 0x0208, 16 }, 2311 + [VPE_AXI_RESET] = { 0x0208, 15 }, 2312 + [IJPEG_AXI_RESET] = { 0x0208, 14 }, 2313 + [MPD_AXI_RESET] = { 0x0208, 13 }, 2314 + [VFE_AXI_RESET] = { 0x0208, 9 }, 2315 + [SP_AXI_RESET] = { 0x0208, 8 }, 2316 + [VCODEC_AXI_RESET] = { 0x0208, 7 }, 2317 + [ROT_AXI_RESET] = { 0x0208, 6 }, 2318 + [VCODEC_AXI_A_RESET] = { 0x0208, 5 }, 2319 + [VCODEC_AXI_B_RESET] = { 0x0208, 4 }, 2320 + [FAB_S3_AXI_RESET] = { 0x0208, 3 }, 2321 + [FAB_S2_AXI_RESET] = { 0x0208, 2 }, 2322 + [FAB_S1_AXI_RESET] = { 0x0208, 1 }, 2323 + [FAB_S0_AXI_RESET] = { 0x0208 }, 2324 + [SMMU_GFX3D_ABH_RESET] = { 0x020c, 31 }, 2325 + [SMMU_VPE_AHB_RESET] = { 0x020c, 30 }, 2326 + [SMMU_VFE_AHB_RESET] = { 0x020c, 29 }, 2327 + [SMMU_ROT_AHB_RESET] = { 0x020c, 28 }, 2328 + [SMMU_VCODEC_B_AHB_RESET] = { 0x020c, 27 }, 2329 + [SMMU_VCODEC_A_AHB_RESET] = { 0x020c, 26 }, 2330 + [SMMU_MDP1_AHB_RESET] = { 0x020c, 25 }, 2331 + [SMMU_MDP0_AHB_RESET] = { 0x020c, 24 }, 2332 + [SMMU_JPEGD_AHB_RESET] = { 0x020c, 23 }, 2333 + [SMMU_IJPEG_AHB_RESET] = { 0x020c, 22 }, 2334 + [APU_AHB_RESET] = { 0x020c, 18 }, 2335 + [CSI_AHB_RESET] = { 0x020c, 17 }, 2336 + [TV_ENC_AHB_RESET] = { 0x020c, 15 }, 2337 + [VPE_AHB_RESET] = { 0x020c, 14 }, 2338 + [FABRIC_AHB_RESET] = { 0x020c, 13 }, 2339 + [GFX3D_AHB_RESET] = { 0x020c, 10 }, 2340 + [HDMI_AHB_RESET] = { 0x020c, 9 }, 2341 + [MSSS_IMEM_AHB_RESET] = { 0x020c, 8 }, 2342 + [IJPEG_AHB_RESET] = { 0x020c, 7 }, 2343 + [DSI_M_AHB_RESET] = { 0x020c, 6 }, 2344 + [DSI_S_AHB_RESET] = { 0x020c, 5 }, 2345 + [JPEGD_AHB_RESET] = { 0x020c, 4 }, 2346 + [MDP_AHB_RESET] = { 0x020c, 3 }, 2347 + [ROT_AHB_RESET] = { 0x020c, 2 }, 2348 + [VCODEC_AHB_RESET] = { 0x020c, 1 }, 2349 + [VFE_AHB_RESET] = { 0x020c, 0 }, 2350 + [SMMU_VCAP_AHB_RESET] = { 0x0200, 3 }, 2351 + [VCAP_AHB_RESET] = { 0x0200, 2 }, 2352 + [DSI2_M_AHB_RESET] = { 0x0200, 1 }, 2353 + [DSI2_S_AHB_RESET] = { 0x0200, 0 }, 2354 + [CSIPHY2_RESET] = { 0x0210, 31 }, 2355 + [CSI_PIX1_RESET] = { 0x0210, 30 }, 2356 + [CSIPHY0_RESET] = { 0x0210, 29 }, 2357 + [CSIPHY1_RESET] = { 0x0210, 28 }, 2358 + [CSI_RDI_RESET] = { 0x0210, 27 }, 2359 + [CSI_PIX_RESET] = { 0x0210, 26 }, 2360 + [DSI2_RESET] = { 0x0210, 25 }, 2361 + [VFE_CSI_RESET] = { 0x0210, 24 }, 2362 + [MDP_RESET] = { 0x0210, 21 }, 2363 + [AMP_RESET] = { 0x0210, 20 }, 2364 + [JPEGD_RESET] = { 0x0210, 19 }, 2365 + [CSI1_RESET] = { 0x0210, 18 }, 2366 + [VPE_RESET] = { 0x0210, 17 }, 2367 + [MMSS_FABRIC_RESET] = { 0x0210, 16 }, 2368 + [VFE_RESET] = { 0x0210, 15 }, 2369 + [GFX3D_RESET] = { 0x0210, 12 }, 2370 + [HDMI_RESET] = { 0x0210, 11 }, 2371 + [MMSS_IMEM_RESET] = { 0x0210, 10 }, 2372 + [IJPEG_RESET] = { 0x0210, 9 }, 2373 + [CSI0_RESET] = { 0x0210, 8 }, 2374 + [DSI_RESET] = { 0x0210, 7 }, 2375 + [VCODEC_RESET] = { 0x0210, 6 }, 2376 + [MDP_TV_RESET] = { 0x0210, 4 }, 2377 + [MDP_VSYNC_RESET] = { 0x0210, 3 }, 2378 + [ROT_RESET] = { 0x0210, 2 }, 2379 + [TV_HDMI_RESET] = { 0x0210, 1 }, 2380 + [VCAP_NPL_RESET] = { 0x0214, 4 }, 2381 + [VCAP_RESET] = { 0x0214, 3 }, 2382 + [CSI2_RESET] = { 0x0214, 2 }, 2383 + [CSI_RDI1_RESET] = { 0x0214, 1 }, 2384 + [CSI_RDI2_RESET] = { 0x0214 }, 2385 + }; 2386 + 2435 2387 static const struct regmap_config mmcc_msm8960_regmap_config = { 2436 2388 .reg_bits = 32, 2437 2389 .reg_stride = 4, 2438 2390 .val_bits = 32, 2439 2391 .max_register = 0x334, 2392 + .fast_io = true, 2393 + }; 2394 + 2395 + static const struct regmap_config mmcc_apq8064_regmap_config = { 2396 + .reg_bits = 32, 2397 + .reg_stride = 4, 2398 + .val_bits = 32, 2399 + .max_register = 0x350, 2440 2400 .fast_io = true, 2441 2401 }; 2442 2402 ··· 2625 2231 .num_resets = ARRAY_SIZE(mmcc_msm8960_resets), 2626 2232 }; 2627 2233 2234 + static const struct qcom_cc_desc mmcc_apq8064_desc = { 2235 + .config = &mmcc_apq8064_regmap_config, 2236 + .clks = mmcc_apq8064_clks, 2237 + .num_clks = ARRAY_SIZE(mmcc_apq8064_clks), 2238 + .resets = mmcc_apq8064_resets, 2239 + .num_resets = ARRAY_SIZE(mmcc_apq8064_resets), 2240 + }; 2241 + 2628 2242 static const struct of_device_id mmcc_msm8960_match_table[] = { 2629 - { .compatible = "qcom,mmcc-msm8960" }, 2243 + { .compatible = "qcom,mmcc-msm8960", .data = &mmcc_msm8960_desc }, 2244 + { .compatible = "qcom,mmcc-apq8064", .data = &mmcc_apq8064_desc }, 2630 2245 { } 2631 2246 }; 2632 2247 MODULE_DEVICE_TABLE(of, mmcc_msm8960_match_table); 2633 2248 2634 2249 static int mmcc_msm8960_probe(struct platform_device *pdev) 2635 2250 { 2636 - return qcom_cc_probe(pdev, &mmcc_msm8960_desc); 2251 + const struct of_device_id *match; 2252 + struct regmap *regmap; 2253 + bool is_8064; 2254 + struct device *dev = &pdev->dev; 2255 + 2256 + match = of_match_device(mmcc_msm8960_match_table, dev); 2257 + if (!match) 2258 + return -EINVAL; 2259 + 2260 + is_8064 = of_device_is_compatible(dev->of_node, "qcom,mmcc-apq8064"); 2261 + if (is_8064) { 2262 + gfx3d_src.freq_tbl = clk_tbl_gfx3d_8064; 2263 + gfx3d_src.clkr.hw.init = &gfx3d_8064_init; 2264 + gfx3d_src.s[0].parent_map = mmcc_pxo_pll8_pll2_pll15_map; 2265 + gfx3d_src.s[1].parent_map = mmcc_pxo_pll8_pll2_pll15_map; 2266 + } 2267 + 2268 + regmap = qcom_cc_map(pdev, match->data); 2269 + if (IS_ERR(regmap)) 2270 + return PTR_ERR(regmap); 2271 + 2272 + clk_pll_configure_sr(&pll15, regmap, &pll15_config, false); 2273 + 2274 + return qcom_cc_really_probe(pdev, match->data, regmap); 2637 2275 } 2638 2276 2639 2277 static int mmcc_msm8960_remove(struct platform_device *pdev)
+4 -6
drivers/clk/qcom/mmcc-msm8974.c
··· 2547 2547 2548 2548 static int mmcc_msm8974_probe(struct platform_device *pdev) 2549 2549 { 2550 - int ret; 2551 2550 struct regmap *regmap; 2552 2551 2553 - ret = qcom_cc_probe(pdev, &mmcc_msm8974_desc); 2554 - if (ret) 2555 - return ret; 2552 + regmap = qcom_cc_map(pdev, &mmcc_msm8974_desc); 2553 + if (IS_ERR(regmap)) 2554 + return PTR_ERR(regmap); 2556 2555 2557 - regmap = dev_get_regmap(&pdev->dev, NULL); 2558 2556 clk_pll_configure_sr_hpm_lp(&mmpll1, regmap, &mmpll1_config, true); 2559 2557 clk_pll_configure_sr_hpm_lp(&mmpll3, regmap, &mmpll3_config, false); 2560 2558 2561 - return 0; 2559 + return qcom_cc_really_probe(pdev, &mmcc_msm8974_desc, regmap); 2562 2560 } 2563 2561 2564 2562 static int mmcc_msm8974_remove(struct platform_device *pdev)
+351
include/dt-bindings/clock/qcom,gcc-apq8084.h
··· 1 + /* 2 + * Copyright (c) 2014, 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_APQ_GCC_8084_H 15 + #define _DT_BINDINGS_CLK_APQ_GCC_8084_H 16 + 17 + #define GPLL0 0 18 + #define GPLL0_VOTE 1 19 + #define GPLL1 2 20 + #define GPLL1_VOTE 3 21 + #define GPLL2 4 22 + #define GPLL2_VOTE 5 23 + #define GPLL3 6 24 + #define GPLL3_VOTE 7 25 + #define GPLL4 8 26 + #define GPLL4_VOTE 9 27 + #define CONFIG_NOC_CLK_SRC 10 28 + #define PERIPH_NOC_CLK_SRC 11 29 + #define SYSTEM_NOC_CLK_SRC 12 30 + #define BLSP_UART_SIM_CLK_SRC 13 31 + #define QDSS_TSCTR_CLK_SRC 14 32 + #define UFS_AXI_CLK_SRC 15 33 + #define RPM_CLK_SRC 16 34 + #define KPSS_AHB_CLK_SRC 17 35 + #define QDSS_AT_CLK_SRC 18 36 + #define BIMC_DDR_CLK_SRC 19 37 + #define USB30_MASTER_CLK_SRC 20 38 + #define USB30_SEC_MASTER_CLK_SRC 21 39 + #define USB_HSIC_AHB_CLK_SRC 22 40 + #define MMSS_BIMC_GFX_CLK_SRC 23 41 + #define QDSS_STM_CLK_SRC 24 42 + #define ACC_CLK_SRC 25 43 + #define SEC_CTRL_CLK_SRC 26 44 + #define BLSP1_QUP1_I2C_APPS_CLK_SRC 27 45 + #define BLSP1_QUP1_SPI_APPS_CLK_SRC 28 46 + #define BLSP1_QUP2_I2C_APPS_CLK_SRC 29 47 + #define BLSP1_QUP2_SPI_APPS_CLK_SRC 30 48 + #define BLSP1_QUP3_I2C_APPS_CLK_SRC 31 49 + #define BLSP1_QUP3_SPI_APPS_CLK_SRC 32 50 + #define BLSP1_QUP4_I2C_APPS_CLK_SRC 33 51 + #define BLSP1_QUP4_SPI_APPS_CLK_SRC 34 52 + #define BLSP1_QUP5_I2C_APPS_CLK_SRC 35 53 + #define BLSP1_QUP5_SPI_APPS_CLK_SRC 36 54 + #define BLSP1_QUP6_I2C_APPS_CLK_SRC 37 55 + #define BLSP1_QUP6_SPI_APPS_CLK_SRC 38 56 + #define BLSP1_UART1_APPS_CLK_SRC 39 57 + #define BLSP1_UART2_APPS_CLK_SRC 40 58 + #define BLSP1_UART3_APPS_CLK_SRC 41 59 + #define BLSP1_UART4_APPS_CLK_SRC 42 60 + #define BLSP1_UART5_APPS_CLK_SRC 43 61 + #define BLSP1_UART6_APPS_CLK_SRC 44 62 + #define BLSP2_QUP1_I2C_APPS_CLK_SRC 45 63 + #define BLSP2_QUP1_SPI_APPS_CLK_SRC 46 64 + #define BLSP2_QUP2_I2C_APPS_CLK_SRC 47 65 + #define BLSP2_QUP2_SPI_APPS_CLK_SRC 48 66 + #define BLSP2_QUP3_I2C_APPS_CLK_SRC 49 67 + #define BLSP2_QUP3_SPI_APPS_CLK_SRC 50 68 + #define BLSP2_QUP4_I2C_APPS_CLK_SRC 51 69 + #define BLSP2_QUP4_SPI_APPS_CLK_SRC 52 70 + #define BLSP2_QUP5_I2C_APPS_CLK_SRC 53 71 + #define BLSP2_QUP5_SPI_APPS_CLK_SRC 54 72 + #define BLSP2_QUP6_I2C_APPS_CLK_SRC 55 73 + #define BLSP2_QUP6_SPI_APPS_CLK_SRC 56 74 + #define BLSP2_UART1_APPS_CLK_SRC 57 75 + #define BLSP2_UART2_APPS_CLK_SRC 58 76 + #define BLSP2_UART3_APPS_CLK_SRC 59 77 + #define BLSP2_UART4_APPS_CLK_SRC 60 78 + #define BLSP2_UART5_APPS_CLK_SRC 61 79 + #define BLSP2_UART6_APPS_CLK_SRC 62 80 + #define CE1_CLK_SRC 63 81 + #define CE2_CLK_SRC 64 82 + #define CE3_CLK_SRC 65 83 + #define GP1_CLK_SRC 66 84 + #define GP2_CLK_SRC 67 85 + #define GP3_CLK_SRC 68 86 + #define PDM2_CLK_SRC 69 87 + #define QDSS_TRACECLKIN_CLK_SRC 70 88 + #define RBCPR_CLK_SRC 71 89 + #define SATA_ASIC0_CLK_SRC 72 90 + #define SATA_PMALIVE_CLK_SRC 73 91 + #define SATA_RX_CLK_SRC 74 92 + #define SATA_RX_OOB_CLK_SRC 75 93 + #define SDCC1_APPS_CLK_SRC 76 94 + #define SDCC2_APPS_CLK_SRC 77 95 + #define SDCC3_APPS_CLK_SRC 78 96 + #define SDCC4_APPS_CLK_SRC 79 97 + #define GCC_SNOC_BUS_TIMEOUT0_AHB_CLK 80 98 + #define SPMI_AHB_CLK_SRC 81 99 + #define SPMI_SER_CLK_SRC 82 100 + #define TSIF_REF_CLK_SRC 83 101 + #define USB30_MOCK_UTMI_CLK_SRC 84 102 + #define USB30_SEC_MOCK_UTMI_CLK_SRC 85 103 + #define USB_HS_SYSTEM_CLK_SRC 86 104 + #define USB_HSIC_CLK_SRC 87 105 + #define USB_HSIC_IO_CAL_CLK_SRC 88 106 + #define USB_HSIC_MOCK_UTMI_CLK_SRC 89 107 + #define USB_HSIC_SYSTEM_CLK_SRC 90 108 + #define GCC_BAM_DMA_AHB_CLK 91 109 + #define GCC_BAM_DMA_INACTIVITY_TIMERS_CLK 92 110 + #define DDR_CLK_SRC 93 111 + #define GCC_BIMC_CFG_AHB_CLK 94 112 + #define GCC_BIMC_CLK 95 113 + #define GCC_BIMC_KPSS_AXI_CLK 96 114 + #define GCC_BIMC_SLEEP_CLK 97 115 + #define GCC_BIMC_SYSNOC_AXI_CLK 98 116 + #define GCC_BIMC_XO_CLK 99 117 + #define GCC_BLSP1_AHB_CLK 100 118 + #define GCC_BLSP1_SLEEP_CLK 101 119 + #define GCC_BLSP1_QUP1_I2C_APPS_CLK 102 120 + #define GCC_BLSP1_QUP1_SPI_APPS_CLK 103 121 + #define GCC_BLSP1_QUP2_I2C_APPS_CLK 104 122 + #define GCC_BLSP1_QUP2_SPI_APPS_CLK 105 123 + #define GCC_BLSP1_QUP3_I2C_APPS_CLK 106 124 + #define GCC_BLSP1_QUP3_SPI_APPS_CLK 107 125 + #define GCC_BLSP1_QUP4_I2C_APPS_CLK 108 126 + #define GCC_BLSP1_QUP4_SPI_APPS_CLK 109 127 + #define GCC_BLSP1_QUP5_I2C_APPS_CLK 110 128 + #define GCC_BLSP1_QUP5_SPI_APPS_CLK 111 129 + #define GCC_BLSP1_QUP6_I2C_APPS_CLK 112 130 + #define GCC_BLSP1_QUP6_SPI_APPS_CLK 113 131 + #define GCC_BLSP1_UART1_APPS_CLK 114 132 + #define GCC_BLSP1_UART1_SIM_CLK 115 133 + #define GCC_BLSP1_UART2_APPS_CLK 116 134 + #define GCC_BLSP1_UART2_SIM_CLK 117 135 + #define GCC_BLSP1_UART3_APPS_CLK 118 136 + #define GCC_BLSP1_UART3_SIM_CLK 119 137 + #define GCC_BLSP1_UART4_APPS_CLK 120 138 + #define GCC_BLSP1_UART4_SIM_CLK 121 139 + #define GCC_BLSP1_UART5_APPS_CLK 122 140 + #define GCC_BLSP1_UART5_SIM_CLK 123 141 + #define GCC_BLSP1_UART6_APPS_CLK 124 142 + #define GCC_BLSP1_UART6_SIM_CLK 125 143 + #define GCC_BLSP2_AHB_CLK 126 144 + #define GCC_BLSP2_SLEEP_CLK 127 145 + #define GCC_BLSP2_QUP1_I2C_APPS_CLK 128 146 + #define GCC_BLSP2_QUP1_SPI_APPS_CLK 129 147 + #define GCC_BLSP2_QUP2_I2C_APPS_CLK 130 148 + #define GCC_BLSP2_QUP2_SPI_APPS_CLK 131 149 + #define GCC_BLSP2_QUP3_I2C_APPS_CLK 132 150 + #define GCC_BLSP2_QUP3_SPI_APPS_CLK 133 151 + #define GCC_BLSP2_QUP4_I2C_APPS_CLK 134 152 + #define GCC_BLSP2_QUP4_SPI_APPS_CLK 135 153 + #define GCC_BLSP2_QUP5_I2C_APPS_CLK 136 154 + #define GCC_BLSP2_QUP5_SPI_APPS_CLK 137 155 + #define GCC_BLSP2_QUP6_I2C_APPS_CLK 138 156 + #define GCC_BLSP2_QUP6_SPI_APPS_CLK 139 157 + #define GCC_BLSP2_UART1_APPS_CLK 140 158 + #define GCC_BLSP2_UART1_SIM_CLK 141 159 + #define GCC_BLSP2_UART2_APPS_CLK 142 160 + #define GCC_BLSP2_UART2_SIM_CLK 143 161 + #define GCC_BLSP2_UART3_APPS_CLK 144 162 + #define GCC_BLSP2_UART3_SIM_CLK 145 163 + #define GCC_BLSP2_UART4_APPS_CLK 146 164 + #define GCC_BLSP2_UART4_SIM_CLK 147 165 + #define GCC_BLSP2_UART5_APPS_CLK 148 166 + #define GCC_BLSP2_UART5_SIM_CLK 149 167 + #define GCC_BLSP2_UART6_APPS_CLK 150 168 + #define GCC_BLSP2_UART6_SIM_CLK 151 169 + #define GCC_BOOT_ROM_AHB_CLK 152 170 + #define GCC_CE1_AHB_CLK 153 171 + #define GCC_CE1_AXI_CLK 154 172 + #define GCC_CE1_CLK 155 173 + #define GCC_CE2_AHB_CLK 156 174 + #define GCC_CE2_AXI_CLK 157 175 + #define GCC_CE2_CLK 158 176 + #define GCC_CE3_AHB_CLK 159 177 + #define GCC_CE3_AXI_CLK 160 178 + #define GCC_CE3_CLK 161 179 + #define GCC_CNOC_BUS_TIMEOUT0_AHB_CLK 162 180 + #define GCC_CNOC_BUS_TIMEOUT1_AHB_CLK 163 181 + #define GCC_CNOC_BUS_TIMEOUT2_AHB_CLK 164 182 + #define GCC_CNOC_BUS_TIMEOUT3_AHB_CLK 165 183 + #define GCC_CNOC_BUS_TIMEOUT4_AHB_CLK 166 184 + #define GCC_CNOC_BUS_TIMEOUT5_AHB_CLK 167 185 + #define GCC_CNOC_BUS_TIMEOUT6_AHB_CLK 168 186 + #define GCC_CNOC_BUS_TIMEOUT7_AHB_CLK 169 187 + #define GCC_CFG_NOC_AHB_CLK 170 188 + #define GCC_CFG_NOC_DDR_CFG_CLK 171 189 + #define GCC_CFG_NOC_RPM_AHB_CLK 172 190 + #define GCC_COPSS_SMMU_AHB_CLK 173 191 + #define GCC_COPSS_SMMU_AXI_CLK 174 192 + #define GCC_DCD_XO_CLK 175 193 + #define GCC_BIMC_DDR_CH0_CLK 176 194 + #define GCC_BIMC_DDR_CH1_CLK 177 195 + #define GCC_BIMC_DDR_CPLL0_CLK 178 196 + #define GCC_BIMC_DDR_CPLL1_CLK 179 197 + #define GCC_BIMC_GFX_CLK 180 198 + #define GCC_DDR_DIM_CFG_CLK 181 199 + #define GCC_DDR_DIM_SLEEP_CLK 182 200 + #define GCC_DEHR_CLK 183 201 + #define GCC_AHB_CLK 184 202 + #define GCC_IM_SLEEP_CLK 185 203 + #define GCC_XO_CLK 186 204 + #define GCC_XO_DIV4_CLK 187 205 + #define GCC_GP1_CLK 188 206 + #define GCC_GP2_CLK 189 207 + #define GCC_GP3_CLK 190 208 + #define GCC_IMEM_AXI_CLK 191 209 + #define GCC_IMEM_CFG_AHB_CLK 192 210 + #define GCC_KPSS_AHB_CLK 193 211 + #define GCC_KPSS_AXI_CLK 194 212 + #define GCC_LPASS_MPORT_AXI_CLK 195 213 + #define GCC_LPASS_Q6_AXI_CLK 196 214 + #define GCC_LPASS_SWAY_CLK 197 215 + #define GCC_MMSS_BIMC_GFX_CLK 198 216 + #define GCC_MMSS_NOC_AT_CLK 199 217 + #define GCC_MMSS_NOC_CFG_AHB_CLK 200 218 + #define GCC_MMSS_VPU_MAPLE_SYS_NOC_AXI_CLK 201 219 + #define GCC_OCMEM_NOC_CFG_AHB_CLK 202 220 + #define GCC_OCMEM_SYS_NOC_AXI_CLK 203 221 + #define GCC_MPM_AHB_CLK 204 222 + #define GCC_MSG_RAM_AHB_CLK 205 223 + #define GCC_NOC_CONF_XPU_AHB_CLK 206 224 + #define GCC_PDM2_CLK 207 225 + #define GCC_PDM_AHB_CLK 208 226 + #define GCC_PDM_XO4_CLK 209 227 + #define GCC_PERIPH_NOC_AHB_CLK 210 228 + #define GCC_PERIPH_NOC_AT_CLK 211 229 + #define GCC_PERIPH_NOC_CFG_AHB_CLK 212 230 + #define GCC_PERIPH_NOC_USB_HSIC_AHB_CLK 213 231 + #define GCC_PERIPH_NOC_MPU_CFG_AHB_CLK 214 232 + #define GCC_PERIPH_XPU_AHB_CLK 215 233 + #define GCC_PNOC_BUS_TIMEOUT0_AHB_CLK 216 234 + #define GCC_PNOC_BUS_TIMEOUT1_AHB_CLK 217 235 + #define GCC_PNOC_BUS_TIMEOUT2_AHB_CLK 218 236 + #define GCC_PNOC_BUS_TIMEOUT3_AHB_CLK 219 237 + #define GCC_PNOC_BUS_TIMEOUT4_AHB_CLK 220 238 + #define GCC_PRNG_AHB_CLK 221 239 + #define GCC_QDSS_AT_CLK 222 240 + #define GCC_QDSS_CFG_AHB_CLK 223 241 + #define GCC_QDSS_DAP_AHB_CLK 224 242 + #define GCC_QDSS_DAP_CLK 225 243 + #define GCC_QDSS_ETR_USB_CLK 226 244 + #define GCC_QDSS_STM_CLK 227 245 + #define GCC_QDSS_TRACECLKIN_CLK 228 246 + #define GCC_QDSS_TSCTR_DIV16_CLK 229 247 + #define GCC_QDSS_TSCTR_DIV2_CLK 230 248 + #define GCC_QDSS_TSCTR_DIV3_CLK 231 249 + #define GCC_QDSS_TSCTR_DIV4_CLK 232 250 + #define GCC_QDSS_TSCTR_DIV8_CLK 233 251 + #define GCC_QDSS_RBCPR_XPU_AHB_CLK 234 252 + #define GCC_RBCPR_AHB_CLK 235 253 + #define GCC_RBCPR_CLK 236 254 + #define GCC_RPM_BUS_AHB_CLK 237 255 + #define GCC_RPM_PROC_HCLK 238 256 + #define GCC_RPM_SLEEP_CLK 239 257 + #define GCC_RPM_TIMER_CLK 240 258 + #define GCC_SATA_ASIC0_CLK 241 259 + #define GCC_SATA_AXI_CLK 242 260 + #define GCC_SATA_CFG_AHB_CLK 243 261 + #define GCC_SATA_PMALIVE_CLK 244 262 + #define GCC_SATA_RX_CLK 245 263 + #define GCC_SATA_RX_OOB_CLK 246 264 + #define GCC_SDCC1_AHB_CLK 247 265 + #define GCC_SDCC1_APPS_CLK 248 266 + #define GCC_SDCC1_CDCCAL_FF_CLK 249 267 + #define GCC_SDCC1_CDCCAL_SLEEP_CLK 250 268 + #define GCC_SDCC2_AHB_CLK 251 269 + #define GCC_SDCC2_APPS_CLK 252 270 + #define GCC_SDCC2_INACTIVITY_TIMERS_CLK 253 271 + #define GCC_SDCC3_AHB_CLK 254 272 + #define GCC_SDCC3_APPS_CLK 255 273 + #define GCC_SDCC3_INACTIVITY_TIMERS_CLK 256 274 + #define GCC_SDCC4_AHB_CLK 257 275 + #define GCC_SDCC4_APPS_CLK 258 276 + #define GCC_SDCC4_INACTIVITY_TIMERS_CLK 259 277 + #define GCC_SEC_CTRL_ACC_CLK 260 278 + #define GCC_SEC_CTRL_AHB_CLK 261 279 + #define GCC_SEC_CTRL_BOOT_ROM_PATCH_CLK 262 280 + #define GCC_SEC_CTRL_CLK 263 281 + #define GCC_SEC_CTRL_SENSE_CLK 264 282 + #define GCC_SNOC_BUS_TIMEOUT2_AHB_CLK 265 283 + #define GCC_SNOC_BUS_TIMEOUT3_AHB_CLK 266 284 + #define GCC_SPDM_BIMC_CY_CLK 267 285 + #define GCC_SPDM_CFG_AHB_CLK 268 286 + #define GCC_SPDM_DEBUG_CY_CLK 269 287 + #define GCC_SPDM_FF_CLK 270 288 + #define GCC_SPDM_MSTR_AHB_CLK 271 289 + #define GCC_SPDM_PNOC_CY_CLK 272 290 + #define GCC_SPDM_RPM_CY_CLK 273 291 + #define GCC_SPDM_SNOC_CY_CLK 274 292 + #define GCC_SPMI_AHB_CLK 275 293 + #define GCC_SPMI_CNOC_AHB_CLK 276 294 + #define GCC_SPMI_SER_CLK 277 295 + #define GCC_SPSS_AHB_CLK 278 296 + #define GCC_SNOC_CNOC_AHB_CLK 279 297 + #define GCC_SNOC_PNOC_AHB_CLK 280 298 + #define GCC_SYS_NOC_AT_CLK 281 299 + #define GCC_SYS_NOC_AXI_CLK 282 300 + #define GCC_SYS_NOC_KPSS_AHB_CLK 283 301 + #define GCC_SYS_NOC_QDSS_STM_AXI_CLK 284 302 + #define GCC_SYS_NOC_UFS_AXI_CLK 285 303 + #define GCC_SYS_NOC_USB3_AXI_CLK 286 304 + #define GCC_SYS_NOC_USB3_SEC_AXI_CLK 287 305 + #define GCC_TCSR_AHB_CLK 288 306 + #define GCC_TLMM_AHB_CLK 289 307 + #define GCC_TLMM_CLK 290 308 + #define GCC_TSIF_AHB_CLK 291 309 + #define GCC_TSIF_INACTIVITY_TIMERS_CLK 292 310 + #define GCC_TSIF_REF_CLK 293 311 + #define GCC_UFS_AHB_CLK 294 312 + #define GCC_UFS_AXI_CLK 295 313 + #define GCC_UFS_RX_CFG_CLK 296 314 + #define GCC_UFS_RX_SYMBOL_0_CLK 297 315 + #define GCC_UFS_RX_SYMBOL_1_CLK 298 316 + #define GCC_UFS_TX_CFG_CLK 299 317 + #define GCC_UFS_TX_SYMBOL_0_CLK 300 318 + #define GCC_UFS_TX_SYMBOL_1_CLK 301 319 + #define GCC_USB2A_PHY_SLEEP_CLK 302 320 + #define GCC_USB2B_PHY_SLEEP_CLK 303 321 + #define GCC_USB30_MASTER_CLK 304 322 + #define GCC_USB30_MOCK_UTMI_CLK 305 323 + #define GCC_USB30_SLEEP_CLK 306 324 + #define GCC_USB30_SEC_MASTER_CLK 307 325 + #define GCC_USB30_SEC_MOCK_UTMI_CLK 308 326 + #define GCC_USB30_SEC_SLEEP_CLK 309 327 + #define GCC_USB_HS_AHB_CLK 310 328 + #define GCC_USB_HS_INACTIVITY_TIMERS_CLK 311 329 + #define GCC_USB_HS_SYSTEM_CLK 312 330 + #define GCC_USB_HSIC_AHB_CLK 313 331 + #define GCC_USB_HSIC_CLK 314 332 + #define GCC_USB_HSIC_IO_CAL_CLK 315 333 + #define GCC_USB_HSIC_IO_CAL_SLEEP_CLK 316 334 + #define GCC_USB_HSIC_MOCK_UTMI_CLK 317 335 + #define GCC_USB_HSIC_SYSTEM_CLK 318 336 + #define PCIE_0_AUX_CLK_SRC 319 337 + #define PCIE_0_PIPE_CLK_SRC 320 338 + #define PCIE_1_AUX_CLK_SRC 321 339 + #define PCIE_1_PIPE_CLK_SRC 322 340 + #define GCC_PCIE_0_AUX_CLK 323 341 + #define GCC_PCIE_0_CFG_AHB_CLK 324 342 + #define GCC_PCIE_0_MSTR_AXI_CLK 325 343 + #define GCC_PCIE_0_PIPE_CLK 326 344 + #define GCC_PCIE_0_SLV_AXI_CLK 327 345 + #define GCC_PCIE_1_AUX_CLK 328 346 + #define GCC_PCIE_1_CFG_AHB_CLK 329 347 + #define GCC_PCIE_1_MSTR_AXI_CLK 330 348 + #define GCC_PCIE_1_PIPE_CLK 331 349 + #define GCC_PCIE_1_SLV_AXI_CLK 332 350 + 351 + #endif
+293
include/dt-bindings/clock/qcom,gcc-ipq806x.h
··· 1 + /* 2 + * Copyright (c) 2014, 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_GCC_IPQ806X_H 15 + #define _DT_BINDINGS_CLK_GCC_IPQ806X_H 16 + 17 + #define AFAB_CLK_SRC 0 18 + #define QDSS_STM_CLK 1 19 + #define SCSS_A_CLK 2 20 + #define SCSS_H_CLK 3 21 + #define AFAB_CORE_CLK 4 22 + #define SCSS_XO_SRC_CLK 5 23 + #define AFAB_EBI1_CH0_A_CLK 6 24 + #define AFAB_EBI1_CH1_A_CLK 7 25 + #define AFAB_AXI_S0_FCLK 8 26 + #define AFAB_AXI_S1_FCLK 9 27 + #define AFAB_AXI_S2_FCLK 10 28 + #define AFAB_AXI_S3_FCLK 11 29 + #define AFAB_AXI_S4_FCLK 12 30 + #define SFAB_CORE_CLK 13 31 + #define SFAB_AXI_S0_FCLK 14 32 + #define SFAB_AXI_S1_FCLK 15 33 + #define SFAB_AXI_S2_FCLK 16 34 + #define SFAB_AXI_S3_FCLK 17 35 + #define SFAB_AXI_S4_FCLK 18 36 + #define SFAB_AXI_S5_FCLK 19 37 + #define SFAB_AHB_S0_FCLK 20 38 + #define SFAB_AHB_S1_FCLK 21 39 + #define SFAB_AHB_S2_FCLK 22 40 + #define SFAB_AHB_S3_FCLK 23 41 + #define SFAB_AHB_S4_FCLK 24 42 + #define SFAB_AHB_S5_FCLK 25 43 + #define SFAB_AHB_S6_FCLK 26 44 + #define SFAB_AHB_S7_FCLK 27 45 + #define QDSS_AT_CLK_SRC 28 46 + #define QDSS_AT_CLK 29 47 + #define QDSS_TRACECLKIN_CLK_SRC 30 48 + #define QDSS_TRACECLKIN_CLK 31 49 + #define QDSS_TSCTR_CLK_SRC 32 50 + #define QDSS_TSCTR_CLK 33 51 + #define SFAB_ADM0_M0_A_CLK 34 52 + #define SFAB_ADM0_M1_A_CLK 35 53 + #define SFAB_ADM0_M2_H_CLK 36 54 + #define ADM0_CLK 37 55 + #define ADM0_PBUS_CLK 38 56 + #define IMEM0_A_CLK 39 57 + #define QDSS_H_CLK 40 58 + #define PCIE_A_CLK 41 59 + #define PCIE_AUX_CLK 42 60 + #define PCIE_H_CLK 43 61 + #define PCIE_PHY_CLK 44 62 + #define SFAB_CLK_SRC 45 63 + #define SFAB_LPASS_Q6_A_CLK 46 64 + #define SFAB_AFAB_M_A_CLK 47 65 + #define AFAB_SFAB_M0_A_CLK 48 66 + #define AFAB_SFAB_M1_A_CLK 49 67 + #define SFAB_SATA_S_H_CLK 50 68 + #define DFAB_CLK_SRC 51 69 + #define DFAB_CLK 52 70 + #define SFAB_DFAB_M_A_CLK 53 71 + #define DFAB_SFAB_M_A_CLK 54 72 + #define DFAB_SWAY0_H_CLK 55 73 + #define DFAB_SWAY1_H_CLK 56 74 + #define DFAB_ARB0_H_CLK 57 75 + #define DFAB_ARB1_H_CLK 58 76 + #define PPSS_H_CLK 59 77 + #define PPSS_PROC_CLK 60 78 + #define PPSS_TIMER0_CLK 61 79 + #define PPSS_TIMER1_CLK 62 80 + #define PMEM_A_CLK 63 81 + #define DMA_BAM_H_CLK 64 82 + #define SIC_H_CLK 65 83 + #define SPS_TIC_H_CLK 66 84 + #define CFPB_2X_CLK_SRC 67 85 + #define CFPB_CLK 68 86 + #define CFPB0_H_CLK 69 87 + #define CFPB1_H_CLK 70 88 + #define CFPB2_H_CLK 71 89 + #define SFAB_CFPB_M_H_CLK 72 90 + #define CFPB_MASTER_H_CLK 73 91 + #define SFAB_CFPB_S_H_CLK 74 92 + #define CFPB_SPLITTER_H_CLK 75 93 + #define TSIF_H_CLK 76 94 + #define TSIF_INACTIVITY_TIMERS_CLK 77 95 + #define TSIF_REF_SRC 78 96 + #define TSIF_REF_CLK 79 97 + #define CE1_H_CLK 80 98 + #define CE1_CORE_CLK 81 99 + #define CE1_SLEEP_CLK 82 100 + #define CE2_H_CLK 83 101 + #define CE2_CORE_CLK 84 102 + #define SFPB_H_CLK_SRC 85 103 + #define SFPB_H_CLK 86 104 + #define SFAB_SFPB_M_H_CLK 87 105 + #define SFAB_SFPB_S_H_CLK 88 106 + #define RPM_PROC_CLK 89 107 + #define RPM_BUS_H_CLK 90 108 + #define RPM_SLEEP_CLK 91 109 + #define RPM_TIMER_CLK 92 110 + #define RPM_MSG_RAM_H_CLK 93 111 + #define PMIC_ARB0_H_CLK 94 112 + #define PMIC_ARB1_H_CLK 95 113 + #define PMIC_SSBI2_SRC 96 114 + #define PMIC_SSBI2_CLK 97 115 + #define SDC1_H_CLK 98 116 + #define SDC2_H_CLK 99 117 + #define SDC3_H_CLK 100 118 + #define SDC4_H_CLK 101 119 + #define SDC1_SRC 102 120 + #define SDC1_CLK 103 121 + #define SDC2_SRC 104 122 + #define SDC2_CLK 105 123 + #define SDC3_SRC 106 124 + #define SDC3_CLK 107 125 + #define SDC4_SRC 108 126 + #define SDC4_CLK 109 127 + #define USB_HS1_H_CLK 110 128 + #define USB_HS1_XCVR_SRC 111 129 + #define USB_HS1_XCVR_CLK 112 130 + #define USB_HSIC_H_CLK 113 131 + #define USB_HSIC_XCVR_SRC 114 132 + #define USB_HSIC_XCVR_CLK 115 133 + #define USB_HSIC_SYSTEM_CLK_SRC 116 134 + #define USB_HSIC_SYSTEM_CLK 117 135 + #define CFPB0_C0_H_CLK 118 136 + #define CFPB0_D0_H_CLK 119 137 + #define CFPB0_C1_H_CLK 120 138 + #define CFPB0_D1_H_CLK 121 139 + #define USB_FS1_H_CLK 122 140 + #define USB_FS1_XCVR_SRC 123 141 + #define USB_FS1_XCVR_CLK 124 142 + #define USB_FS1_SYSTEM_CLK 125 143 + #define GSBI_COMMON_SIM_SRC 126 144 + #define GSBI1_H_CLK 127 145 + #define GSBI2_H_CLK 128 146 + #define GSBI3_H_CLK 129 147 + #define GSBI4_H_CLK 130 148 + #define GSBI5_H_CLK 131 149 + #define GSBI6_H_CLK 132 150 + #define GSBI7_H_CLK 133 151 + #define GSBI1_QUP_SRC 134 152 + #define GSBI1_QUP_CLK 135 153 + #define GSBI2_QUP_SRC 136 154 + #define GSBI2_QUP_CLK 137 155 + #define GSBI3_QUP_SRC 138 156 + #define GSBI3_QUP_CLK 139 157 + #define GSBI4_QUP_SRC 140 158 + #define GSBI4_QUP_CLK 141 159 + #define GSBI5_QUP_SRC 142 160 + #define GSBI5_QUP_CLK 143 161 + #define GSBI6_QUP_SRC 144 162 + #define GSBI6_QUP_CLK 145 163 + #define GSBI7_QUP_SRC 146 164 + #define GSBI7_QUP_CLK 147 165 + #define GSBI1_UART_SRC 148 166 + #define GSBI1_UART_CLK 149 167 + #define GSBI2_UART_SRC 150 168 + #define GSBI2_UART_CLK 151 169 + #define GSBI3_UART_SRC 152 170 + #define GSBI3_UART_CLK 153 171 + #define GSBI4_UART_SRC 154 172 + #define GSBI4_UART_CLK 155 173 + #define GSBI5_UART_SRC 156 174 + #define GSBI5_UART_CLK 157 175 + #define GSBI6_UART_SRC 158 176 + #define GSBI6_UART_CLK 159 177 + #define GSBI7_UART_SRC 160 178 + #define GSBI7_UART_CLK 161 179 + #define GSBI1_SIM_CLK 162 180 + #define GSBI2_SIM_CLK 163 181 + #define GSBI3_SIM_CLK 164 182 + #define GSBI4_SIM_CLK 165 183 + #define GSBI5_SIM_CLK 166 184 + #define GSBI6_SIM_CLK 167 185 + #define GSBI7_SIM_CLK 168 186 + #define USB_HSIC_HSIC_CLK_SRC 169 187 + #define USB_HSIC_HSIC_CLK 170 188 + #define USB_HSIC_HSIO_CAL_CLK 171 189 + #define SPDM_CFG_H_CLK 172 190 + #define SPDM_MSTR_H_CLK 173 191 + #define SPDM_FF_CLK_SRC 174 192 + #define SPDM_FF_CLK 175 193 + #define SEC_CTRL_CLK 176 194 + #define SEC_CTRL_ACC_CLK_SRC 177 195 + #define SEC_CTRL_ACC_CLK 178 196 + #define TLMM_H_CLK 179 197 + #define TLMM_CLK 180 198 + #define SATA_H_CLK 181 199 + #define SATA_CLK_SRC 182 200 + #define SATA_RXOOB_CLK 183 201 + #define SATA_PMALIVE_CLK 184 202 + #define SATA_PHY_REF_CLK 185 203 + #define SATA_A_CLK 186 204 + #define SATA_PHY_CFG_CLK 187 205 + #define TSSC_CLK_SRC 188 206 + #define TSSC_CLK 189 207 + #define PDM_SRC 190 208 + #define PDM_CLK 191 209 + #define GP0_SRC 192 210 + #define GP0_CLK 193 211 + #define GP1_SRC 194 212 + #define GP1_CLK 195 213 + #define GP2_SRC 196 214 + #define GP2_CLK 197 215 + #define MPM_CLK 198 216 + #define EBI1_CLK_SRC 199 217 + #define EBI1_CH0_CLK 200 218 + #define EBI1_CH1_CLK 201 219 + #define EBI1_2X_CLK 202 220 + #define EBI1_CH0_DQ_CLK 203 221 + #define EBI1_CH1_DQ_CLK 204 222 + #define EBI1_CH0_CA_CLK 205 223 + #define EBI1_CH1_CA_CLK 206 224 + #define EBI1_XO_CLK 207 225 + #define SFAB_SMPSS_S_H_CLK 208 226 + #define PRNG_SRC 209 227 + #define PRNG_CLK 210 228 + #define PXO_SRC 211 229 + #define SPDM_CY_PORT0_CLK 212 230 + #define SPDM_CY_PORT1_CLK 213 231 + #define SPDM_CY_PORT2_CLK 214 232 + #define SPDM_CY_PORT3_CLK 215 233 + #define SPDM_CY_PORT4_CLK 216 234 + #define SPDM_CY_PORT5_CLK 217 235 + #define SPDM_CY_PORT6_CLK 218 236 + #define SPDM_CY_PORT7_CLK 219 237 + #define PLL0 220 238 + #define PLL0_VOTE 221 239 + #define PLL3 222 240 + #define PLL3_VOTE 223 241 + #define PLL4 224 242 + #define PLL4_VOTE 225 243 + #define PLL8 226 244 + #define PLL8_VOTE 227 245 + #define PLL9 228 246 + #define PLL10 229 247 + #define PLL11 230 248 + #define PLL12 231 249 + #define PLL14 232 250 + #define PLL14_VOTE 233 251 + #define PLL18 234 252 + #define CE5_SRC 235 253 + #define CE5_H_CLK 236 254 + #define CE5_CORE_CLK 237 255 + #define CE3_SLEEP_CLK 238 256 + #define SFAB_AHB_S8_FCLK 239 257 + #define SPDM_CY_PORT8_CLK 246 258 + #define PCIE_ALT_REF_SRC 247 259 + #define PCIE_ALT_REF_CLK 248 260 + #define PCIE_1_A_CLK 249 261 + #define PCIE_1_AUX_CLK 250 262 + #define PCIE_1_H_CLK 251 263 + #define PCIE_1_PHY_CLK 252 264 + #define PCIE_1_ALT_REF_SRC 253 265 + #define PCIE_1_ALT_REF_CLK 254 266 + #define PCIE_2_A_CLK 255 267 + #define PCIE_2_AUX_CLK 256 268 + #define PCIE_2_H_CLK 257 269 + #define PCIE_2_PHY_CLK 258 270 + #define PCIE_2_ALT_REF_SRC 259 271 + #define PCIE_2_ALT_REF_CLK 260 272 + #define EBI2_CLK 261 273 + #define USB30_SLEEP_CLK 262 274 + #define USB30_UTMI_SRC 263 275 + #define USB30_0_UTMI_CLK 264 276 + #define USB30_1_UTMI_CLK 265 277 + #define USB30_MASTER_SRC 266 278 + #define USB30_0_MASTER_CLK 267 279 + #define USB30_1_MASTER_CLK 268 280 + #define GMAC_CORE1_CLK_SRC 269 281 + #define GMAC_CORE2_CLK_SRC 270 282 + #define GMAC_CORE3_CLK_SRC 271 283 + #define GMAC_CORE4_CLK_SRC 272 284 + #define GMAC_CORE1_CLK 273 285 + #define GMAC_CORE2_CLK 274 286 + #define GMAC_CORE3_CLK 275 287 + #define GMAC_CORE4_CLK 276 288 + #define UBI32_CORE1_CLK_SRC 277 289 + #define UBI32_CORE2_CLK_SRC 278 290 + #define UBI32_CORE1_CLK 279 291 + #define UBI32_CORE2_CLK 280 292 + 293 + #endif
+11
include/dt-bindings/clock/qcom,gcc-msm8960.h
··· 308 308 #define PLL13 292 309 309 #define PLL14 293 310 310 #define PLL14_VOTE 294 311 + #define USB_HS3_H_CLK 295 312 + #define USB_HS3_XCVR_SRC 296 313 + #define USB_HS3_XCVR_CLK 297 314 + #define USB_HS4_H_CLK 298 315 + #define USB_HS4_XCVR_SRC 299 316 + #define USB_HS4_XCVR_CLK 300 317 + #define SATA_PHY_CFG_CLK 301 318 + #define SATA_A_CLK 302 319 + #define CE3_SRC 303 320 + #define CE3_CORE_CLK 304 321 + #define CE3_H_CLK 305 311 322 312 323 #endif
+183
include/dt-bindings/clock/qcom,mmcc-apq8084.h
··· 1 + /* 2 + * Copyright (c) 2014, 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_APQ_MMCC_8084_H 15 + #define _DT_BINDINGS_CLK_APQ_MMCC_8084_H 16 + 17 + #define MMSS_AHB_CLK_SRC 0 18 + #define MMSS_AXI_CLK_SRC 1 19 + #define MMPLL0 2 20 + #define MMPLL0_VOTE 3 21 + #define MMPLL1 4 22 + #define MMPLL1_VOTE 5 23 + #define MMPLL2 6 24 + #define MMPLL3 7 25 + #define MMPLL4 8 26 + #define CSI0_CLK_SRC 9 27 + #define CSI1_CLK_SRC 10 28 + #define CSI2_CLK_SRC 11 29 + #define CSI3_CLK_SRC 12 30 + #define VCODEC0_CLK_SRC 13 31 + #define VFE0_CLK_SRC 14 32 + #define VFE1_CLK_SRC 15 33 + #define MDP_CLK_SRC 16 34 + #define PCLK0_CLK_SRC 17 35 + #define PCLK1_CLK_SRC 18 36 + #define OCMEMNOC_CLK_SRC 19 37 + #define GFX3D_CLK_SRC 20 38 + #define JPEG0_CLK_SRC 21 39 + #define JPEG1_CLK_SRC 22 40 + #define JPEG2_CLK_SRC 23 41 + #define EDPPIXEL_CLK_SRC 24 42 + #define EXTPCLK_CLK_SRC 25 43 + #define VP_CLK_SRC 26 44 + #define CCI_CLK_SRC 27 45 + #define CAMSS_GP0_CLK_SRC 28 46 + #define CAMSS_GP1_CLK_SRC 29 47 + #define MCLK0_CLK_SRC 30 48 + #define MCLK1_CLK_SRC 31 49 + #define MCLK2_CLK_SRC 32 50 + #define MCLK3_CLK_SRC 33 51 + #define CSI0PHYTIMER_CLK_SRC 34 52 + #define CSI1PHYTIMER_CLK_SRC 35 53 + #define CSI2PHYTIMER_CLK_SRC 36 54 + #define CPP_CLK_SRC 37 55 + #define BYTE0_CLK_SRC 38 56 + #define BYTE1_CLK_SRC 39 57 + #define EDPAUX_CLK_SRC 40 58 + #define EDPLINK_CLK_SRC 41 59 + #define ESC0_CLK_SRC 42 60 + #define ESC1_CLK_SRC 43 61 + #define HDMI_CLK_SRC 44 62 + #define VSYNC_CLK_SRC 45 63 + #define RBCPR_CLK_SRC 46 64 + #define RBBMTIMER_CLK_SRC 47 65 + #define MAPLE_CLK_SRC 48 66 + #define VDP_CLK_SRC 49 67 + #define VPU_BUS_CLK_SRC 50 68 + #define MMSS_CXO_CLK 51 69 + #define MMSS_SLEEPCLK_CLK 52 70 + #define AVSYNC_AHB_CLK 53 71 + #define AVSYNC_EDPPIXEL_CLK 54 72 + #define AVSYNC_EXTPCLK_CLK 55 73 + #define AVSYNC_PCLK0_CLK 56 74 + #define AVSYNC_PCLK1_CLK 57 75 + #define AVSYNC_VP_CLK 58 76 + #define CAMSS_AHB_CLK 59 77 + #define CAMSS_CCI_CCI_AHB_CLK 60 78 + #define CAMSS_CCI_CCI_CLK 61 79 + #define CAMSS_CSI0_AHB_CLK 62 80 + #define CAMSS_CSI0_CLK 63 81 + #define CAMSS_CSI0PHY_CLK 64 82 + #define CAMSS_CSI0PIX_CLK 65 83 + #define CAMSS_CSI0RDI_CLK 66 84 + #define CAMSS_CSI1_AHB_CLK 67 85 + #define CAMSS_CSI1_CLK 68 86 + #define CAMSS_CSI1PHY_CLK 69 87 + #define CAMSS_CSI1PIX_CLK 70 88 + #define CAMSS_CSI1RDI_CLK 71 89 + #define CAMSS_CSI2_AHB_CLK 72 90 + #define CAMSS_CSI2_CLK 73 91 + #define CAMSS_CSI2PHY_CLK 74 92 + #define CAMSS_CSI2PIX_CLK 75 93 + #define CAMSS_CSI2RDI_CLK 76 94 + #define CAMSS_CSI3_AHB_CLK 77 95 + #define CAMSS_CSI3_CLK 78 96 + #define CAMSS_CSI3PHY_CLK 79 97 + #define CAMSS_CSI3PIX_CLK 80 98 + #define CAMSS_CSI3RDI_CLK 81 99 + #define CAMSS_CSI_VFE0_CLK 82 100 + #define CAMSS_CSI_VFE1_CLK 83 101 + #define CAMSS_GP0_CLK 84 102 + #define CAMSS_GP1_CLK 85 103 + #define CAMSS_ISPIF_AHB_CLK 86 104 + #define CAMSS_JPEG_JPEG0_CLK 87 105 + #define CAMSS_JPEG_JPEG1_CLK 88 106 + #define CAMSS_JPEG_JPEG2_CLK 89 107 + #define CAMSS_JPEG_JPEG_AHB_CLK 90 108 + #define CAMSS_JPEG_JPEG_AXI_CLK 91 109 + #define CAMSS_MCLK0_CLK 92 110 + #define CAMSS_MCLK1_CLK 93 111 + #define CAMSS_MCLK2_CLK 94 112 + #define CAMSS_MCLK3_CLK 95 113 + #define CAMSS_MICRO_AHB_CLK 96 114 + #define CAMSS_PHY0_CSI0PHYTIMER_CLK 97 115 + #define CAMSS_PHY1_CSI1PHYTIMER_CLK 98 116 + #define CAMSS_PHY2_CSI2PHYTIMER_CLK 99 117 + #define CAMSS_TOP_AHB_CLK 100 118 + #define CAMSS_VFE_CPP_AHB_CLK 101 119 + #define CAMSS_VFE_CPP_CLK 102 120 + #define CAMSS_VFE_VFE0_CLK 103 121 + #define CAMSS_VFE_VFE1_CLK 104 122 + #define CAMSS_VFE_VFE_AHB_CLK 105 123 + #define CAMSS_VFE_VFE_AXI_CLK 106 124 + #define MDSS_AHB_CLK 107 125 + #define MDSS_AXI_CLK 108 126 + #define MDSS_BYTE0_CLK 109 127 + #define MDSS_BYTE1_CLK 110 128 + #define MDSS_EDPAUX_CLK 111 129 + #define MDSS_EDPLINK_CLK 112 130 + #define MDSS_EDPPIXEL_CLK 113 131 + #define MDSS_ESC0_CLK 114 132 + #define MDSS_ESC1_CLK 115 133 + #define MDSS_EXTPCLK_CLK 116 134 + #define MDSS_HDMI_AHB_CLK 117 135 + #define MDSS_HDMI_CLK 118 136 + #define MDSS_MDP_CLK 119 137 + #define MDSS_MDP_LUT_CLK 120 138 + #define MDSS_PCLK0_CLK 121 139 + #define MDSS_PCLK1_CLK 122 140 + #define MDSS_VSYNC_CLK 123 141 + #define MMSS_RBCPR_AHB_CLK 124 142 + #define MMSS_RBCPR_CLK 125 143 + #define MMSS_SPDM_AHB_CLK 126 144 + #define MMSS_SPDM_AXI_CLK 127 145 + #define MMSS_SPDM_CSI0_CLK 128 146 + #define MMSS_SPDM_GFX3D_CLK 129 147 + #define MMSS_SPDM_JPEG0_CLK 130 148 + #define MMSS_SPDM_JPEG1_CLK 131 149 + #define MMSS_SPDM_JPEG2_CLK 132 150 + #define MMSS_SPDM_MDP_CLK 133 151 + #define MMSS_SPDM_PCLK0_CLK 134 152 + #define MMSS_SPDM_PCLK1_CLK 135 153 + #define MMSS_SPDM_VCODEC0_CLK 136 154 + #define MMSS_SPDM_VFE0_CLK 137 155 + #define MMSS_SPDM_VFE1_CLK 138 156 + #define MMSS_SPDM_RM_AXI_CLK 139 157 + #define MMSS_SPDM_RM_OCMEMNOC_CLK 140 158 + #define MMSS_MISC_AHB_CLK 141 159 + #define MMSS_MMSSNOC_AHB_CLK 142 160 + #define MMSS_MMSSNOC_BTO_AHB_CLK 143 161 + #define MMSS_MMSSNOC_AXI_CLK 144 162 + #define MMSS_S0_AXI_CLK 145 163 + #define OCMEMCX_AHB_CLK 146 164 + #define OCMEMCX_OCMEMNOC_CLK 147 165 + #define OXILI_OCMEMGX_CLK 148 166 + #define OXILI_GFX3D_CLK 149 167 + #define OXILI_RBBMTIMER_CLK 150 168 + #define OXILICX_AHB_CLK 151 169 + #define VENUS0_AHB_CLK 152 170 + #define VENUS0_AXI_CLK 153 171 + #define VENUS0_CORE0_VCODEC_CLK 154 172 + #define VENUS0_CORE1_VCODEC_CLK 155 173 + #define VENUS0_OCMEMNOC_CLK 156 174 + #define VENUS0_VCODEC0_CLK 157 175 + #define VPU_AHB_CLK 158 176 + #define VPU_AXI_CLK 159 177 + #define VPU_BUS_CLK 160 178 + #define VPU_CXO_CLK 161 179 + #define VPU_MAPLE_CLK 162 180 + #define VPU_SLEEP_CLK 163 181 + #define VPU_VDP_CLK 164 182 + 183 + #endif
+8
include/dt-bindings/clock/qcom,mmcc-msm8960.h
··· 133 133 #define CSIPHY0_TIMER_CLK 116 134 134 #define PLL1 117 135 135 #define PLL2 118 136 + #define RGB_TV_CLK 119 137 + #define NPL_TV_CLK 120 138 + #define VCAP_AHB_CLK 121 139 + #define VCAP_AXI_CLK 122 140 + #define VCAP_SRC 123 141 + #define VCAP_CLK 124 142 + #define VCAP_NPL_CLK 125 143 + #define PLL15 126 136 144 137 145 #endif
+109
include/dt-bindings/reset/qcom,gcc-apq8084.h
··· 1 + /* 2 + * Copyright (c) 2014, 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_RESET_APQ_GCC_8084_H 15 + #define _DT_BINDINGS_RESET_APQ_GCC_8084_H 16 + 17 + #define GCC_SYSTEM_NOC_BCR 0 18 + #define GCC_CONFIG_NOC_BCR 1 19 + #define GCC_PERIPH_NOC_BCR 2 20 + #define GCC_IMEM_BCR 3 21 + #define GCC_MMSS_BCR 4 22 + #define GCC_QDSS_BCR 5 23 + #define GCC_USB_30_BCR 6 24 + #define GCC_USB3_PHY_BCR 7 25 + #define GCC_USB_HS_HSIC_BCR 8 26 + #define GCC_USB_HS_BCR 9 27 + #define GCC_USB2A_PHY_BCR 10 28 + #define GCC_USB2B_PHY_BCR 11 29 + #define GCC_SDCC1_BCR 12 30 + #define GCC_SDCC2_BCR 13 31 + #define GCC_SDCC3_BCR 14 32 + #define GCC_SDCC4_BCR 15 33 + #define GCC_BLSP1_BCR 16 34 + #define GCC_BLSP1_QUP1_BCR 17 35 + #define GCC_BLSP1_UART1_BCR 18 36 + #define GCC_BLSP1_QUP2_BCR 19 37 + #define GCC_BLSP1_UART2_BCR 20 38 + #define GCC_BLSP1_QUP3_BCR 21 39 + #define GCC_BLSP1_UART3_BCR 22 40 + #define GCC_BLSP1_QUP4_BCR 23 41 + #define GCC_BLSP1_UART4_BCR 24 42 + #define GCC_BLSP1_QUP5_BCR 25 43 + #define GCC_BLSP1_UART5_BCR 26 44 + #define GCC_BLSP1_QUP6_BCR 27 45 + #define GCC_BLSP1_UART6_BCR 28 46 + #define GCC_BLSP2_BCR 29 47 + #define GCC_BLSP2_QUP1_BCR 30 48 + #define GCC_BLSP2_UART1_BCR 31 49 + #define GCC_BLSP2_QUP2_BCR 32 50 + #define GCC_BLSP2_UART2_BCR 33 51 + #define GCC_BLSP2_QUP3_BCR 34 52 + #define GCC_BLSP2_UART3_BCR 35 53 + #define GCC_BLSP2_QUP4_BCR 36 54 + #define GCC_BLSP2_UART4_BCR 37 55 + #define GCC_BLSP2_QUP5_BCR 38 56 + #define GCC_BLSP2_UART5_BCR 39 57 + #define GCC_BLSP2_QUP6_BCR 40 58 + #define GCC_BLSP2_UART6_BCR 41 59 + #define GCC_PDM_BCR 42 60 + #define GCC_PRNG_BCR 43 61 + #define GCC_BAM_DMA_BCR 44 62 + #define GCC_TSIF_BCR 45 63 + #define GCC_TCSR_BCR 46 64 + #define GCC_BOOT_ROM_BCR 47 65 + #define GCC_MSG_RAM_BCR 48 66 + #define GCC_TLMM_BCR 49 67 + #define GCC_MPM_BCR 50 68 + #define GCC_MPM_AHB_RESET 51 69 + #define GCC_MPM_NON_AHB_RESET 52 70 + #define GCC_SEC_CTRL_BCR 53 71 + #define GCC_SPMI_BCR 54 72 + #define GCC_SPDM_BCR 55 73 + #define GCC_CE1_BCR 56 74 + #define GCC_CE2_BCR 57 75 + #define GCC_BIMC_BCR 58 76 + #define GCC_SNOC_BUS_TIMEOUT0_BCR 59 77 + #define GCC_SNOC_BUS_TIMEOUT2_BCR 60 78 + #define GCC_PNOC_BUS_TIMEOUT0_BCR 61 79 + #define GCC_PNOC_BUS_TIMEOUT1_BCR 62 80 + #define GCC_PNOC_BUS_TIMEOUT2_BCR 63 81 + #define GCC_PNOC_BUS_TIMEOUT3_BCR 64 82 + #define GCC_PNOC_BUS_TIMEOUT4_BCR 65 83 + #define GCC_CNOC_BUS_TIMEOUT0_BCR 66 84 + #define GCC_CNOC_BUS_TIMEOUT1_BCR 67 85 + #define GCC_CNOC_BUS_TIMEOUT2_BCR 68 86 + #define GCC_CNOC_BUS_TIMEOUT3_BCR 69 87 + #define GCC_CNOC_BUS_TIMEOUT4_BCR 70 88 + #define GCC_CNOC_BUS_TIMEOUT5_BCR 71 89 + #define GCC_CNOC_BUS_TIMEOUT6_BCR 72 90 + #define GCC_DEHR_BCR 73 91 + #define GCC_RBCPR_BCR 74 92 + #define GCC_MSS_RESTART 75 93 + #define GCC_LPASS_RESTART 76 94 + #define GCC_WCSS_RESTART 77 95 + #define GCC_VENUS_RESTART 78 96 + #define GCC_COPSS_SMMU_BCR 79 97 + #define GCC_SPSS_BCR 80 98 + #define GCC_PCIE_0_BCR 81 99 + #define GCC_PCIE_0_PHY_BCR 82 100 + #define GCC_PCIE_1_BCR 83 101 + #define GCC_PCIE_1_PHY_BCR 84 102 + #define GCC_USB_30_SEC_BCR 85 103 + #define GCC_USB3_SEC_PHY_BCR 86 104 + #define GCC_SATA_BCR 87 105 + #define GCC_CE3_BCR 88 106 + #define GCC_UFS_BCR 89 107 + #define GCC_USB30_PHY_COM_BCR 90 108 + 109 + #endif
+132
include/dt-bindings/reset/qcom,gcc-ipq806x.h
··· 1 + /* 2 + * Copyright (c) 2014, 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_RESET_IPQ_806X_H 15 + #define _DT_BINDINGS_RESET_IPQ_806X_H 16 + 17 + #define QDSS_STM_RESET 0 18 + #define AFAB_SMPSS_S_RESET 1 19 + #define AFAB_SMPSS_M1_RESET 2 20 + #define AFAB_SMPSS_M0_RESET 3 21 + #define AFAB_EBI1_CH0_RESET 4 22 + #define AFAB_EBI1_CH1_RESET 5 23 + #define SFAB_ADM0_M0_RESET 6 24 + #define SFAB_ADM0_M1_RESET 7 25 + #define SFAB_ADM0_M2_RESET 8 26 + #define ADM0_C2_RESET 9 27 + #define ADM0_C1_RESET 10 28 + #define ADM0_C0_RESET 11 29 + #define ADM0_PBUS_RESET 12 30 + #define ADM0_RESET 13 31 + #define QDSS_CLKS_SW_RESET 14 32 + #define QDSS_POR_RESET 15 33 + #define QDSS_TSCTR_RESET 16 34 + #define QDSS_HRESET_RESET 17 35 + #define QDSS_AXI_RESET 18 36 + #define QDSS_DBG_RESET 19 37 + #define SFAB_PCIE_M_RESET 20 38 + #define SFAB_PCIE_S_RESET 21 39 + #define PCIE_EXT_RESET 22 40 + #define PCIE_PHY_RESET 23 41 + #define PCIE_PCI_RESET 24 42 + #define PCIE_POR_RESET 25 43 + #define PCIE_HCLK_RESET 26 44 + #define PCIE_ACLK_RESET 27 45 + #define SFAB_LPASS_RESET 28 46 + #define SFAB_AFAB_M_RESET 29 47 + #define AFAB_SFAB_M0_RESET 30 48 + #define AFAB_SFAB_M1_RESET 31 49 + #define SFAB_SATA_S_RESET 32 50 + #define SFAB_DFAB_M_RESET 33 51 + #define DFAB_SFAB_M_RESET 34 52 + #define DFAB_SWAY0_RESET 35 53 + #define DFAB_SWAY1_RESET 36 54 + #define DFAB_ARB0_RESET 37 55 + #define DFAB_ARB1_RESET 38 56 + #define PPSS_PROC_RESET 39 57 + #define PPSS_RESET 40 58 + #define DMA_BAM_RESET 41 59 + #define SPS_TIC_H_RESET 42 60 + #define SFAB_CFPB_M_RESET 43 61 + #define SFAB_CFPB_S_RESET 44 62 + #define TSIF_H_RESET 45 63 + #define CE1_H_RESET 46 64 + #define CE1_CORE_RESET 47 65 + #define CE1_SLEEP_RESET 48 66 + #define CE2_H_RESET 49 67 + #define CE2_CORE_RESET 50 68 + #define SFAB_SFPB_M_RESET 51 69 + #define SFAB_SFPB_S_RESET 52 70 + #define RPM_PROC_RESET 53 71 + #define PMIC_SSBI2_RESET 54 72 + #define SDC1_RESET 55 73 + #define SDC2_RESET 56 74 + #define SDC3_RESET 57 75 + #define SDC4_RESET 58 76 + #define USB_HS1_RESET 59 77 + #define USB_HSIC_RESET 60 78 + #define USB_FS1_XCVR_RESET 61 79 + #define USB_FS1_RESET 62 80 + #define GSBI1_RESET 63 81 + #define GSBI2_RESET 64 82 + #define GSBI3_RESET 65 83 + #define GSBI4_RESET 66 84 + #define GSBI5_RESET 67 85 + #define GSBI6_RESET 68 86 + #define GSBI7_RESET 69 87 + #define SPDM_RESET 70 88 + #define SEC_CTRL_RESET 71 89 + #define TLMM_H_RESET 72 90 + #define SFAB_SATA_M_RESET 73 91 + #define SATA_RESET 74 92 + #define TSSC_RESET 75 93 + #define PDM_RESET 76 94 + #define MPM_H_RESET 77 95 + #define MPM_RESET 78 96 + #define SFAB_SMPSS_S_RESET 79 97 + #define PRNG_RESET 80 98 + #define SFAB_CE3_M_RESET 81 99 + #define SFAB_CE3_S_RESET 82 100 + #define CE3_SLEEP_RESET 83 101 + #define PCIE_1_M_RESET 84 102 + #define PCIE_1_S_RESET 85 103 + #define PCIE_1_EXT_RESET 86 104 + #define PCIE_1_PHY_RESET 87 105 + #define PCIE_1_PCI_RESET 88 106 + #define PCIE_1_POR_RESET 89 107 + #define PCIE_1_HCLK_RESET 90 108 + #define PCIE_1_ACLK_RESET 91 109 + #define PCIE_2_M_RESET 92 110 + #define PCIE_2_S_RESET 93 111 + #define PCIE_2_EXT_RESET 94 112 + #define PCIE_2_PHY_RESET 95 113 + #define PCIE_2_PCI_RESET 96 114 + #define PCIE_2_POR_RESET 97 115 + #define PCIE_2_HCLK_RESET 98 116 + #define PCIE_2_ACLK_RESET 99 117 + #define SFAB_USB30_S_RESET 100 118 + #define SFAB_USB30_M_RESET 101 119 + #define USB30_0_PORT2_HS_PHY_RESET 102 120 + #define USB30_0_MASTER_RESET 103 121 + #define USB30_0_SLEEP_RESET 104 122 + #define USB30_0_UTMI_PHY_RESET 105 123 + #define USB30_0_POWERON_RESET 106 124 + #define USB30_0_PHY_RESET 107 125 + #define USB30_1_MASTER_RESET 108 126 + #define USB30_1_SLEEP_RESET 109 127 + #define USB30_1_UTMI_PHY_RESET 110 128 + #define USB30_1_POWERON_RESET 111 129 + #define USB30_1_PHY_RESET 112 130 + #define NSSFB0_RESET 113 131 + #define NSSFB1_RESET 114 132 + #endif
+16
include/dt-bindings/reset/qcom,gcc-msm8960.h
··· 114 114 #define SFAB_SMPSS_S_RESET 97 115 115 #define PRNG_RESET 98 116 116 #define RIVA_RESET 99 117 + #define USB_HS3_RESET 100 118 + #define USB_HS4_RESET 101 119 + #define CE3_RESET 102 120 + #define PCIE_EXT_PCI_RESET 103 121 + #define PCIE_PHY_RESET 104 122 + #define PCIE_PCI_RESET 105 123 + #define PCIE_POR_RESET 106 124 + #define PCIE_HCLK_RESET 107 125 + #define PCIE_ACLK_RESET 108 126 + #define CE3_H_RESET 109 127 + #define SFAB_CE3_M_RESET 110 128 + #define SFAB_CE3_S_RESET 111 129 + #define SATA_RESET 112 130 + #define CE3_SLEEP_RESET 113 131 + #define GSS_SLP_RESET 114 132 + #define GSS_RESET 115 117 133 118 134 #endif
+64
include/dt-bindings/reset/qcom,mmcc-apq8084.h
··· 1 + /* 2 + * Copyright (c) 2014, 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_RESET_APQ_MMCC_8084_H 15 + #define _DT_BINDINGS_RESET_APQ_MMCC_8084_H 16 + 17 + #define MMSS_SPDM_RESET 0 18 + #define MMSS_SPDM_RM_RESET 1 19 + #define VENUS0_RESET 2 20 + #define VPU_RESET 3 21 + #define MDSS_RESET 4 22 + #define AVSYNC_RESET 5 23 + #define CAMSS_PHY0_RESET 6 24 + #define CAMSS_PHY1_RESET 7 25 + #define CAMSS_PHY2_RESET 8 26 + #define CAMSS_CSI0_RESET 9 27 + #define CAMSS_CSI0PHY_RESET 10 28 + #define CAMSS_CSI0RDI_RESET 11 29 + #define CAMSS_CSI0PIX_RESET 12 30 + #define CAMSS_CSI1_RESET 13 31 + #define CAMSS_CSI1PHY_RESET 14 32 + #define CAMSS_CSI1RDI_RESET 15 33 + #define CAMSS_CSI1PIX_RESET 16 34 + #define CAMSS_CSI2_RESET 17 35 + #define CAMSS_CSI2PHY_RESET 18 36 + #define CAMSS_CSI2RDI_RESET 19 37 + #define CAMSS_CSI2PIX_RESET 20 38 + #define CAMSS_CSI3_RESET 21 39 + #define CAMSS_CSI3PHY_RESET 22 40 + #define CAMSS_CSI3RDI_RESET 23 41 + #define CAMSS_CSI3PIX_RESET 24 42 + #define CAMSS_ISPIF_RESET 25 43 + #define CAMSS_CCI_RESET 26 44 + #define CAMSS_MCLK0_RESET 27 45 + #define CAMSS_MCLK1_RESET 28 46 + #define CAMSS_MCLK2_RESET 29 47 + #define CAMSS_MCLK3_RESET 30 48 + #define CAMSS_GP0_RESET 31 49 + #define CAMSS_GP1_RESET 32 50 + #define CAMSS_TOP_RESET 33 51 + #define CAMSS_AHB_RESET 34 52 + #define CAMSS_MICRO_RESET 35 53 + #define CAMSS_JPEG_RESET 36 54 + #define CAMSS_VFE_RESET 37 55 + #define CAMSS_CSI_VFE0_RESET 38 56 + #define CAMSS_CSI_VFE1_RESET 39 57 + #define OXILI_RESET 40 58 + #define OXILICX_RESET 41 59 + #define OCMEMCX_RESET 42 60 + #define MMSS_RBCRP_RESET 43 61 + #define MMSSNOCAHB_RESET 44 62 + #define MMSSNOCAXI_RESET 45 63 + 64 + #endif
+8
include/dt-bindings/reset/qcom,mmcc-msm8960.h
··· 89 89 #define CSI2_RESET 72 90 90 #define CSI_RDI1_RESET 73 91 91 #define CSI_RDI2_RESET 74 92 + #define GFX3D_AXI_RESET 75 93 + #define VCAP_AXI_RESET 76 94 + #define SMMU_VCAP_AHB_RESET 77 95 + #define VCAP_AHB_RESET 78 96 + #define CSI_RDI_RESET 79 97 + #define CSI_PIX_RESET 80 98 + #define VCAP_NPL_RESET 81 99 + #define VCAP_RESET 82 92 100 93 101 #endif