0001
0002
0003
0004 #include <linux/kernel.h>
0005 #include <linux/bitops.h>
0006 #include <linux/err.h>
0007 #include <linux/module.h>
0008 #include <linux/platform_device.h>
0009 #include <linux/of.h>
0010 #include <linux/of_device.h>
0011 #include <linux/clk-provider.h>
0012 #include <linux/regmap.h>
0013 #include <linux/reset-controller.h>
0014
0015 #include <dt-bindings/clock/qcom,gcc-msm8953.h>
0016
0017 #include "clk-alpha-pll.h"
0018 #include "clk-branch.h"
0019 #include "clk-rcg.h"
0020 #include "common.h"
0021 #include "gdsc.h"
0022 #include "reset.h"
0023
0024 enum {
0025 P_XO,
0026 P_SLEEP_CLK,
0027 P_GPLL0,
0028 P_GPLL0_DIV2,
0029 P_GPLL2,
0030 P_GPLL3,
0031 P_GPLL4,
0032 P_GPLL6,
0033 P_GPLL6_DIV2,
0034 P_DSI0PLL,
0035 P_DSI0PLL_BYTE,
0036 P_DSI1PLL,
0037 P_DSI1PLL_BYTE,
0038 };
0039
0040 static struct clk_alpha_pll gpll0_early = {
0041 .offset = 0x21000,
0042 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0043 .clkr = {
0044 .enable_reg = 0x45000,
0045 .enable_mask = BIT(0),
0046 .hw.init = &(struct clk_init_data) {
0047 .name = "gpll0_early",
0048 .parent_data = &(const struct clk_parent_data) {
0049 .fw_name = "xo",
0050 },
0051 .num_parents = 1,
0052 .ops = &clk_alpha_pll_fixed_ops,
0053 },
0054 },
0055 };
0056
0057 static struct clk_fixed_factor gpll0_early_div = {
0058 .mult = 1,
0059 .div = 2,
0060 .hw.init = &(struct clk_init_data){
0061 .name = "gpll0_early_div",
0062 .parent_hws = (const struct clk_hw*[]){
0063 &gpll0_early.clkr.hw,
0064 },
0065 .num_parents = 1,
0066 .ops = &clk_fixed_factor_ops,
0067 },
0068 };
0069
0070 static struct clk_alpha_pll_postdiv gpll0 = {
0071 .offset = 0x21000,
0072 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0073 .clkr.hw.init = &(struct clk_init_data){
0074 .name = "gpll0",
0075 .parent_hws = (const struct clk_hw*[]){
0076 &gpll0_early.clkr.hw,
0077 },
0078 .num_parents = 1,
0079 .ops = &clk_alpha_pll_postdiv_ro_ops,
0080 },
0081 };
0082
0083 static struct clk_alpha_pll gpll2_early = {
0084 .offset = 0x4a000,
0085 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0086 .clkr = {
0087 .enable_reg = 0x45000,
0088 .enable_mask = BIT(2),
0089 .hw.init = &(struct clk_init_data){
0090 .name = "gpll2_early",
0091 .parent_data = &(const struct clk_parent_data) {
0092 .fw_name = "xo",
0093 },
0094 .num_parents = 1,
0095 .ops = &clk_alpha_pll_fixed_ops,
0096 },
0097 },
0098 };
0099
0100 static struct clk_alpha_pll_postdiv gpll2 = {
0101 .offset = 0x4a000,
0102 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0103 .clkr.hw.init = &(struct clk_init_data){
0104 .name = "gpll2",
0105 .parent_hws = (const struct clk_hw*[]){
0106 &gpll2_early.clkr.hw,
0107 },
0108 .num_parents = 1,
0109 .ops = &clk_alpha_pll_postdiv_ro_ops,
0110 },
0111 };
0112
0113 static const struct pll_vco gpll3_p_vco[] = {
0114 { 1000000000, 2000000000, 0 },
0115 };
0116
0117 static const struct alpha_pll_config gpll3_early_config = {
0118 .l = 63,
0119 .config_ctl_val = 0x4001055b,
0120 .early_output_mask = 0,
0121 .post_div_mask = GENMASK(11, 8),
0122 .post_div_val = BIT(8),
0123 };
0124
0125 static struct clk_alpha_pll gpll3_early = {
0126 .offset = 0x22000,
0127 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0128 .vco_table = gpll3_p_vco,
0129 .num_vco = ARRAY_SIZE(gpll3_p_vco),
0130 .flags = SUPPORTS_DYNAMIC_UPDATE,
0131 .clkr = {
0132 .hw.init = &(struct clk_init_data){
0133 .name = "gpll3_early",
0134 .parent_data = &(const struct clk_parent_data) {
0135 .fw_name = "xo",
0136 },
0137 .num_parents = 1,
0138 .ops = &clk_alpha_pll_ops,
0139 },
0140 },
0141 };
0142
0143 static struct clk_alpha_pll_postdiv gpll3 = {
0144 .offset = 0x22000,
0145 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0146 .clkr.hw.init = &(struct clk_init_data){
0147 .name = "gpll3",
0148 .parent_hws = (const struct clk_hw*[]){
0149 &gpll3_early.clkr.hw,
0150 },
0151 .num_parents = 1,
0152 .ops = &clk_alpha_pll_postdiv_ops,
0153 .flags = CLK_SET_RATE_PARENT,
0154 },
0155 };
0156
0157 static struct clk_alpha_pll gpll4_early = {
0158 .offset = 0x24000,
0159 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0160 .clkr = {
0161 .enable_reg = 0x45000,
0162 .enable_mask = BIT(5),
0163 .hw.init = &(struct clk_init_data){
0164 .name = "gpll4_early",
0165 .parent_data = &(const struct clk_parent_data) {
0166 .fw_name = "xo",
0167 },
0168 .num_parents = 1,
0169 .ops = &clk_alpha_pll_fixed_ops,
0170 },
0171 },
0172 };
0173
0174 static struct clk_alpha_pll_postdiv gpll4 = {
0175 .offset = 0x24000,
0176 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0177 .clkr.hw.init = &(struct clk_init_data){
0178 .name = "gpll4",
0179 .parent_hws = (const struct clk_hw*[]){
0180 &gpll4_early.clkr.hw,
0181 },
0182 .num_parents = 1,
0183 .ops = &clk_alpha_pll_postdiv_ro_ops,
0184 },
0185 };
0186
0187 static struct clk_alpha_pll gpll6_early = {
0188 .offset = 0x37000,
0189 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0190 .clkr = {
0191 .enable_reg = 0x45000,
0192 .enable_mask = BIT(7),
0193 .hw.init = &(struct clk_init_data){
0194 .name = "gpll6_early",
0195 .parent_data = &(const struct clk_parent_data) {
0196 .fw_name = "xo",
0197 },
0198 .num_parents = 1,
0199 .ops = &clk_alpha_pll_fixed_ops,
0200 },
0201 },
0202 };
0203
0204 static struct clk_fixed_factor gpll6_early_div = {
0205 .mult = 1,
0206 .div = 2,
0207 .hw.init = &(struct clk_init_data){
0208 .name = "gpll6_early_div",
0209 .parent_hws = (const struct clk_hw*[]){
0210 &gpll6_early.clkr.hw,
0211 },
0212 .num_parents = 1,
0213 .ops = &clk_fixed_factor_ops,
0214 },
0215 };
0216
0217 static struct clk_alpha_pll_postdiv gpll6 = {
0218 .offset = 0x37000,
0219 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0220 .clkr.hw.init = &(struct clk_init_data){
0221 .name = "gpll6",
0222 .parent_hws = (const struct clk_hw*[]){
0223 &gpll6_early.clkr.hw,
0224 },
0225 .num_parents = 1,
0226 .ops = &clk_alpha_pll_postdiv_ro_ops,
0227 },
0228 };
0229
0230 static const struct parent_map gcc_xo_gpll0_gpll0div2_2_map[] = {
0231 { P_XO, 0 },
0232 { P_GPLL0, 1 },
0233 { P_GPLL0_DIV2, 2 },
0234 };
0235
0236 static const struct parent_map gcc_xo_gpll0_gpll0div2_4_map[] = {
0237 { P_XO, 0 },
0238 { P_GPLL0, 1 },
0239 { P_GPLL0_DIV2, 4 },
0240 };
0241
0242 static const struct clk_parent_data gcc_xo_gpll0_gpll0div2_data[] = {
0243 { .fw_name = "xo" },
0244 { .hw = &gpll0.clkr.hw },
0245 { .hw = &gpll0_early_div.hw },
0246 };
0247
0248 static const struct parent_map gcc_apc_droop_detector_map[] = {
0249 { P_XO, 0 },
0250 { P_GPLL0, 1 },
0251 { P_GPLL4, 2 },
0252 };
0253
0254 static const struct clk_parent_data gcc_apc_droop_detector_data[] = {
0255 { .fw_name = "xo" },
0256 { .hw = &gpll0.clkr.hw },
0257 { .hw = &gpll4.clkr.hw },
0258 };
0259
0260 static const struct freq_tbl ftbl_apc_droop_detector_clk_src[] = {
0261 F(19200000, P_XO, 1, 0, 0),
0262 F(400000000, P_GPLL0, 2, 0, 0),
0263 F(576000000, P_GPLL4, 2, 0, 0),
0264 { }
0265 };
0266
0267 static struct clk_rcg2 apc0_droop_detector_clk_src = {
0268 .cmd_rcgr = 0x78008,
0269 .hid_width = 5,
0270 .freq_tbl = ftbl_apc_droop_detector_clk_src,
0271 .parent_map = gcc_apc_droop_detector_map,
0272 .clkr.hw.init = &(struct clk_init_data) {
0273 .name = "apc0_droop_detector_clk_src",
0274 .parent_data = gcc_apc_droop_detector_data,
0275 .num_parents = ARRAY_SIZE(gcc_apc_droop_detector_data),
0276 .ops = &clk_rcg2_ops,
0277 }
0278 };
0279 static struct clk_rcg2 apc1_droop_detector_clk_src = {
0280 .cmd_rcgr = 0x79008,
0281 .hid_width = 5,
0282 .freq_tbl = ftbl_apc_droop_detector_clk_src,
0283 .parent_map = gcc_apc_droop_detector_map,
0284 .clkr.hw.init = &(struct clk_init_data) {
0285 .name = "apc1_droop_detector_clk_src",
0286 .parent_data = gcc_apc_droop_detector_data,
0287 .num_parents = ARRAY_SIZE(gcc_apc_droop_detector_data),
0288 .ops = &clk_rcg2_ops,
0289 }
0290 };
0291
0292 static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
0293 F(19200000, P_XO, 1, 0, 0),
0294 F(25000000, P_GPLL0_DIV2, 16, 0, 0),
0295 F(50000000, P_GPLL0, 16, 0, 0),
0296 F(100000000, P_GPLL0, 8, 0, 0),
0297 F(133330000, P_GPLL0, 6, 0, 0),
0298 { }
0299 };
0300
0301 static struct clk_rcg2 apss_ahb_clk_src = {
0302 .cmd_rcgr = 0x46000,
0303 .hid_width = 5,
0304 .freq_tbl = ftbl_apss_ahb_clk_src,
0305 .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
0306 .clkr.hw.init = &(struct clk_init_data) {
0307 .name = "apss_ahb_clk_src",
0308 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0309 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0310 .ops = &clk_rcg2_ops,
0311 }
0312 };
0313
0314 static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
0315 F(19200000, P_XO, 1, 0, 0),
0316 F(25000000, P_GPLL0_DIV2, 16, 0, 0),
0317 F(50000000, P_GPLL0, 16, 0, 0),
0318 { }
0319 };
0320
0321 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
0322 .cmd_rcgr = 0x0200c,
0323 .hid_width = 5,
0324 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
0325 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0326 .clkr.hw.init = &(struct clk_init_data) {
0327 .name = "blsp1_qup1_i2c_apps_clk_src",
0328 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0329 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0330 .ops = &clk_rcg2_ops,
0331 }
0332 };
0333
0334 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
0335 .cmd_rcgr = 0x03000,
0336 .hid_width = 5,
0337 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
0338 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0339 .clkr.hw.init = &(struct clk_init_data) {
0340 .name = "blsp1_qup2_i2c_apps_clk_src",
0341 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0342 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0343 .ops = &clk_rcg2_ops,
0344 }
0345 };
0346
0347 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
0348 .cmd_rcgr = 0x04000,
0349 .hid_width = 5,
0350 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
0351 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0352 .clkr.hw.init = &(struct clk_init_data) {
0353 .name = "blsp1_qup3_i2c_apps_clk_src",
0354 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0355 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0356 .ops = &clk_rcg2_ops,
0357 }
0358 };
0359
0360 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
0361 .cmd_rcgr = 0x05000,
0362 .hid_width = 5,
0363 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
0364 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0365 .clkr.hw.init = &(struct clk_init_data) {
0366 .name = "blsp1_qup4_i2c_apps_clk_src",
0367 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0368 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0369 .ops = &clk_rcg2_ops,
0370 }
0371 };
0372
0373 static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
0374 .cmd_rcgr = 0x0c00c,
0375 .hid_width = 5,
0376 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
0377 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0378 .clkr.hw.init = &(struct clk_init_data) {
0379 .name = "blsp2_qup1_i2c_apps_clk_src",
0380 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0381 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0382 .ops = &clk_rcg2_ops,
0383 }
0384 };
0385
0386 static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
0387 .cmd_rcgr = 0x0d000,
0388 .hid_width = 5,
0389 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
0390 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0391 .clkr.hw.init = &(struct clk_init_data) {
0392 .name = "blsp2_qup2_i2c_apps_clk_src",
0393 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0394 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0395 .ops = &clk_rcg2_ops,
0396 }
0397 };
0398
0399 static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
0400 .cmd_rcgr = 0x0f000,
0401 .hid_width = 5,
0402 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
0403 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0404 .clkr.hw.init = &(struct clk_init_data) {
0405 .name = "blsp2_qup3_i2c_apps_clk_src",
0406 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0407 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0408 .ops = &clk_rcg2_ops,
0409 }
0410 };
0411
0412 static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
0413 .cmd_rcgr = 0x18000,
0414 .hid_width = 5,
0415 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
0416 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0417 .clkr.hw.init = &(struct clk_init_data) {
0418 .name = "blsp2_qup4_i2c_apps_clk_src",
0419 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0420 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0421 .ops = &clk_rcg2_ops,
0422 }
0423 };
0424
0425 static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = {
0426 F(960000, P_XO, 10, 1, 2),
0427 F(4800000, P_XO, 4, 0, 0),
0428 F(9600000, P_XO, 2, 0, 0),
0429 F(12500000, P_GPLL0_DIV2, 16, 1, 2),
0430 F(16000000, P_GPLL0, 10, 1, 5),
0431 F(19200000, P_XO, 1, 0, 0),
0432 F(25000000, P_GPLL0, 16, 1, 2),
0433 F(50000000, P_GPLL0, 16, 0, 0),
0434 { }
0435 };
0436
0437 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
0438 .cmd_rcgr = 0x02024,
0439 .hid_width = 5,
0440 .mnd_width = 8,
0441 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
0442 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0443 .clkr.hw.init = &(struct clk_init_data) {
0444 .name = "blsp1_qup1_spi_apps_clk_src",
0445 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0446 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0447 .ops = &clk_rcg2_ops,
0448 }
0449 };
0450
0451 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
0452 .cmd_rcgr = 0x03014,
0453 .hid_width = 5,
0454 .mnd_width = 8,
0455 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
0456 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0457 .clkr.hw.init = &(struct clk_init_data) {
0458 .name = "blsp1_qup2_spi_apps_clk_src",
0459 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0460 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0461 .ops = &clk_rcg2_ops,
0462 }
0463 };
0464
0465 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
0466 .cmd_rcgr = 0x04024,
0467 .hid_width = 5,
0468 .mnd_width = 8,
0469 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
0470 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0471 .clkr.hw.init = &(struct clk_init_data) {
0472 .name = "blsp1_qup3_spi_apps_clk_src",
0473 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0474 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0475 .ops = &clk_rcg2_ops,
0476 }
0477 };
0478
0479 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
0480 .cmd_rcgr = 0x05024,
0481 .hid_width = 5,
0482 .mnd_width = 8,
0483 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
0484 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0485 .clkr.hw.init = &(struct clk_init_data) {
0486 .name = "blsp1_qup4_spi_apps_clk_src",
0487 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0488 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0489 .ops = &clk_rcg2_ops,
0490 }
0491 };
0492
0493 static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
0494 .cmd_rcgr = 0x0c024,
0495 .hid_width = 5,
0496 .mnd_width = 8,
0497 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
0498 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0499 .clkr.hw.init = &(struct clk_init_data) {
0500 .name = "blsp2_qup1_spi_apps_clk_src",
0501 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0502 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0503 .ops = &clk_rcg2_ops,
0504 }
0505 };
0506
0507 static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
0508 .cmd_rcgr = 0x0d014,
0509 .hid_width = 5,
0510 .mnd_width = 8,
0511 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
0512 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0513 .clkr.hw.init = &(struct clk_init_data) {
0514 .name = "blsp2_qup2_spi_apps_clk_src",
0515 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0516 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0517 .ops = &clk_rcg2_ops,
0518 }
0519 };
0520
0521 static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
0522 .cmd_rcgr = 0x0f024,
0523 .hid_width = 5,
0524 .mnd_width = 8,
0525 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
0526 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0527 .clkr.hw.init = &(struct clk_init_data) {
0528 .name = "blsp2_qup3_spi_apps_clk_src",
0529 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0530 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0531 .ops = &clk_rcg2_ops,
0532 }
0533 };
0534
0535 static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
0536 .cmd_rcgr = 0x18024,
0537 .hid_width = 5,
0538 .mnd_width = 8,
0539 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
0540 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0541 .clkr.hw.init = &(struct clk_init_data) {
0542 .name = "blsp2_qup4_spi_apps_clk_src",
0543 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0544 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0545 .ops = &clk_rcg2_ops,
0546 }
0547 };
0548
0549 static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
0550 F(3686400, P_GPLL0_DIV2, 1, 144, 15625),
0551 F(7372800, P_GPLL0_DIV2, 1, 288, 15625),
0552 F(14745600, P_GPLL0_DIV2, 1, 576, 15625),
0553 F(16000000, P_GPLL0_DIV2, 5, 1, 5),
0554 F(19200000, P_XO, 1, 0, 0),
0555 F(24000000, P_GPLL0, 1, 3, 100),
0556 F(25000000, P_GPLL0, 16, 1, 2),
0557 F(32000000, P_GPLL0, 1, 1, 25),
0558 F(40000000, P_GPLL0, 1, 1, 20),
0559 F(46400000, P_GPLL0, 1, 29, 500),
0560 F(48000000, P_GPLL0, 1, 3, 50),
0561 F(51200000, P_GPLL0, 1, 8, 125),
0562 F(56000000, P_GPLL0, 1, 7, 100),
0563 F(58982400, P_GPLL0, 1, 1152, 15625),
0564 F(60000000, P_GPLL0, 1, 3, 40),
0565 F(64000000, P_GPLL0, 1, 2, 25),
0566 { }
0567 };
0568
0569 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
0570 .cmd_rcgr = 0x02044,
0571 .hid_width = 5,
0572 .mnd_width = 16,
0573 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
0574 .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
0575 .clkr.hw.init = &(struct clk_init_data) {
0576 .name = "blsp1_uart1_apps_clk_src",
0577 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0578 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0579 .ops = &clk_rcg2_ops,
0580 }
0581 };
0582
0583 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
0584 .cmd_rcgr = 0x03034,
0585 .hid_width = 5,
0586 .mnd_width = 16,
0587 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
0588 .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
0589 .clkr.hw.init = &(struct clk_init_data) {
0590 .name = "blsp1_uart2_apps_clk_src",
0591 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0592 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0593 .ops = &clk_rcg2_ops,
0594 }
0595 };
0596
0597 static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
0598 .cmd_rcgr = 0x0c044,
0599 .hid_width = 5,
0600 .mnd_width = 16,
0601 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
0602 .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
0603 .clkr.hw.init = &(struct clk_init_data) {
0604 .name = "blsp2_uart1_apps_clk_src",
0605 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0606 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0607 .ops = &clk_rcg2_ops,
0608 }
0609 };
0610
0611 static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
0612 .cmd_rcgr = 0x0d034,
0613 .hid_width = 5,
0614 .mnd_width = 16,
0615 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
0616 .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
0617 .clkr.hw.init = &(struct clk_init_data) {
0618 .name = "blsp2_uart2_apps_clk_src",
0619 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0620 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0621 .ops = &clk_rcg2_ops,
0622 }
0623 };
0624
0625 static const struct parent_map gcc_byte0_map[] = {
0626 { P_XO, 0 },
0627 { P_DSI0PLL_BYTE, 1 },
0628 { P_DSI1PLL_BYTE, 3 },
0629 };
0630
0631 static const struct parent_map gcc_byte1_map[] = {
0632 { P_XO, 0 },
0633 { P_DSI0PLL_BYTE, 3 },
0634 { P_DSI1PLL_BYTE, 1 },
0635 };
0636
0637 static const struct clk_parent_data gcc_byte_data[] = {
0638 { .fw_name = "xo" },
0639 { .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" },
0640 { .fw_name = "dsi1pllbyte", .name = "dsi1pllbyte" },
0641 };
0642
0643 static struct clk_rcg2 byte0_clk_src = {
0644 .cmd_rcgr = 0x4d044,
0645 .hid_width = 5,
0646 .parent_map = gcc_byte0_map,
0647 .clkr.hw.init = &(struct clk_init_data) {
0648 .name = "byte0_clk_src",
0649 .parent_data = gcc_byte_data,
0650 .num_parents = ARRAY_SIZE(gcc_byte_data),
0651 .ops = &clk_byte2_ops,
0652 .flags = CLK_SET_RATE_PARENT,
0653 }
0654 };
0655
0656 static struct clk_rcg2 byte1_clk_src = {
0657 .cmd_rcgr = 0x4d0b0,
0658 .hid_width = 5,
0659 .parent_map = gcc_byte1_map,
0660 .clkr.hw.init = &(struct clk_init_data) {
0661 .name = "byte1_clk_src",
0662 .parent_data = gcc_byte_data,
0663 .num_parents = ARRAY_SIZE(gcc_byte_data),
0664 .ops = &clk_byte2_ops,
0665 .flags = CLK_SET_RATE_PARENT,
0666 }
0667 };
0668
0669 static const struct parent_map gcc_gp_map[] = {
0670 { P_XO, 0 },
0671 { P_GPLL0, 1 },
0672 { P_GPLL6, 2 },
0673 { P_GPLL0_DIV2, 4 },
0674 { P_SLEEP_CLK, 6 },
0675 };
0676
0677 static const struct clk_parent_data gcc_gp_data[] = {
0678 { .fw_name = "xo" },
0679 { .hw = &gpll0.clkr.hw },
0680 { .hw = &gpll6.clkr.hw },
0681 { .hw = &gpll0_early_div.hw },
0682 { .fw_name = "sleep", .name = "sleep" },
0683 };
0684
0685 static const struct freq_tbl ftbl_camss_gp_clk_src[] = {
0686 F(50000000, P_GPLL0_DIV2, 8, 0, 0),
0687 F(100000000, P_GPLL0, 8, 0, 0),
0688 F(200000000, P_GPLL0, 4, 0, 0),
0689 F(266670000, P_GPLL0, 3, 0, 0),
0690 { }
0691 };
0692
0693 static struct clk_rcg2 camss_gp0_clk_src = {
0694 .cmd_rcgr = 0x54000,
0695 .hid_width = 5,
0696 .mnd_width = 8,
0697 .freq_tbl = ftbl_camss_gp_clk_src,
0698 .parent_map = gcc_gp_map,
0699 .clkr.hw.init = &(struct clk_init_data) {
0700 .name = "camss_gp0_clk_src",
0701 .parent_data = gcc_gp_data,
0702 .num_parents = ARRAY_SIZE(gcc_gp_data),
0703 .ops = &clk_rcg2_ops,
0704 }
0705 };
0706
0707 static struct clk_rcg2 camss_gp1_clk_src = {
0708 .cmd_rcgr = 0x55000,
0709 .hid_width = 5,
0710 .mnd_width = 8,
0711 .freq_tbl = ftbl_camss_gp_clk_src,
0712 .parent_map = gcc_gp_map,
0713 .clkr.hw.init = &(struct clk_init_data) {
0714 .name = "camss_gp1_clk_src",
0715 .parent_data = gcc_gp_data,
0716 .num_parents = ARRAY_SIZE(gcc_gp_data),
0717 .ops = &clk_rcg2_ops,
0718 }
0719 };
0720
0721 static const struct freq_tbl ftbl_camss_top_ahb_clk_src[] = {
0722 F(40000000, P_GPLL0_DIV2, 10, 0, 0),
0723 F(80000000, P_GPLL0, 10, 0, 0),
0724 { }
0725 };
0726
0727 static struct clk_rcg2 camss_top_ahb_clk_src = {
0728 .cmd_rcgr = 0x5a000,
0729 .hid_width = 5,
0730 .freq_tbl = ftbl_camss_top_ahb_clk_src,
0731 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0732 .clkr.hw.init = &(struct clk_init_data) {
0733 .name = "camss_top_ahb_clk_src",
0734 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0735 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0736 .ops = &clk_rcg2_ops,
0737 }
0738 };
0739
0740 static const struct parent_map gcc_cci_map[] = {
0741 { P_XO, 0 },
0742 { P_GPLL0, 2 },
0743 { P_GPLL0_DIV2, 3 },
0744 { P_SLEEP_CLK, 6 },
0745 };
0746
0747 static const struct clk_parent_data gcc_cci_data[] = {
0748 { .fw_name = "xo" },
0749 { .hw = &gpll0.clkr.hw },
0750 { .hw = &gpll0_early_div.hw },
0751 { .fw_name = "sleep", .name = "sleep" },
0752 };
0753
0754 static const struct freq_tbl ftbl_cci_clk_src[] = {
0755 F(19200000, P_XO, 1, 0, 0),
0756 F(37500000, P_GPLL0_DIV2, 1, 3, 32),
0757 { }
0758 };
0759
0760 static struct clk_rcg2 cci_clk_src = {
0761 .cmd_rcgr = 0x51000,
0762 .hid_width = 5,
0763 .mnd_width = 8,
0764 .freq_tbl = ftbl_cci_clk_src,
0765 .parent_map = gcc_cci_map,
0766 .clkr.hw.init = &(struct clk_init_data) {
0767 .name = "cci_clk_src",
0768 .parent_data = gcc_cci_data,
0769 .num_parents = ARRAY_SIZE(gcc_cci_data),
0770 .ops = &clk_rcg2_ops,
0771 }
0772 };
0773
0774 static const struct parent_map gcc_cpp_map[] = {
0775 { P_XO, 0 },
0776 { P_GPLL0, 1 },
0777 { P_GPLL6, 3 },
0778 { P_GPLL2, 4 },
0779 { P_GPLL0_DIV2, 5 },
0780 };
0781
0782 static const struct clk_parent_data gcc_cpp_data[] = {
0783 { .fw_name = "xo" },
0784 { .hw = &gpll0.clkr.hw },
0785 { .hw = &gpll6.clkr.hw },
0786 { .hw = &gpll2.clkr.hw },
0787 { .hw = &gpll0_early_div.hw },
0788 };
0789
0790 static const struct freq_tbl ftbl_cpp_clk_src[] = {
0791 F(100000000, P_GPLL0_DIV2, 4, 0, 0),
0792 F(200000000, P_GPLL0, 4, 0, 0),
0793 F(266670000, P_GPLL0, 3, 0, 0),
0794 F(320000000, P_GPLL0, 2.5, 0, 0),
0795 F(400000000, P_GPLL0, 2, 0, 0),
0796 F(465000000, P_GPLL2, 2, 0, 0),
0797 { }
0798 };
0799
0800 static struct clk_rcg2 cpp_clk_src = {
0801 .cmd_rcgr = 0x58018,
0802 .hid_width = 5,
0803 .freq_tbl = ftbl_cpp_clk_src,
0804 .parent_map = gcc_cpp_map,
0805 .clkr.hw.init = &(struct clk_init_data) {
0806 .name = "cpp_clk_src",
0807 .parent_data = gcc_cpp_data,
0808 .num_parents = ARRAY_SIZE(gcc_cpp_data),
0809 .ops = &clk_rcg2_ops,
0810 }
0811 };
0812
0813 static const struct freq_tbl ftbl_crypto_clk_src[] = {
0814 F(40000000, P_GPLL0_DIV2, 10, 0, 0),
0815 F(80000000, P_GPLL0, 10, 0, 0),
0816 F(100000000, P_GPLL0, 8, 0, 0),
0817 F(160000000, P_GPLL0, 5, 0, 0),
0818 { }
0819 };
0820
0821 static struct clk_rcg2 crypto_clk_src = {
0822 .cmd_rcgr = 0x16004,
0823 .hid_width = 5,
0824 .freq_tbl = ftbl_crypto_clk_src,
0825 .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
0826 .clkr.hw.init = &(struct clk_init_data) {
0827 .name = "crypto_clk_src",
0828 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0829 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0830 .ops = &clk_rcg2_ops,
0831 }
0832 };
0833
0834 static const struct parent_map gcc_csi0_map[] = {
0835 { P_XO, 0 },
0836 { P_GPLL0, 1 },
0837 { P_GPLL2, 4 },
0838 { P_GPLL0_DIV2, 5 },
0839 };
0840
0841 static const struct parent_map gcc_csi12_map[] = {
0842 { P_XO, 0 },
0843 { P_GPLL0, 1 },
0844 { P_GPLL2, 5 },
0845 { P_GPLL0_DIV2, 4 },
0846 };
0847
0848 static const struct clk_parent_data gcc_csi_data[] = {
0849 { .fw_name = "xo" },
0850 { .hw = &gpll0.clkr.hw },
0851 { .hw = &gpll2.clkr.hw },
0852 { .hw = &gpll0_early_div.hw },
0853 };
0854
0855 static const struct freq_tbl ftbl_csi_clk_src[] = {
0856 F(100000000, P_GPLL0_DIV2, 4, 0, 0),
0857 F(200000000, P_GPLL0, 4, 0, 0),
0858 F(310000000, P_GPLL2, 3, 0, 0),
0859 F(400000000, P_GPLL0, 2, 0, 0),
0860 F(465000000, P_GPLL2, 2, 0, 0),
0861 { }
0862 };
0863
0864 static struct clk_rcg2 csi0_clk_src = {
0865 .cmd_rcgr = 0x4e020,
0866 .hid_width = 5,
0867 .freq_tbl = ftbl_csi_clk_src,
0868 .parent_map = gcc_csi0_map,
0869 .clkr.hw.init = &(struct clk_init_data) {
0870 .name = "csi0_clk_src",
0871 .parent_data = gcc_csi_data,
0872 .num_parents = ARRAY_SIZE(gcc_csi_data),
0873 .ops = &clk_rcg2_ops,
0874 }
0875 };
0876
0877 static struct clk_rcg2 csi1_clk_src = {
0878 .cmd_rcgr = 0x4f020,
0879 .hid_width = 5,
0880 .freq_tbl = ftbl_csi_clk_src,
0881 .parent_map = gcc_csi12_map,
0882 .clkr.hw.init = &(struct clk_init_data) {
0883 .name = "csi1_clk_src",
0884 .parent_data = gcc_csi_data,
0885 .num_parents = ARRAY_SIZE(gcc_csi_data),
0886 .ops = &clk_rcg2_ops,
0887 }
0888 };
0889
0890 static struct clk_rcg2 csi2_clk_src = {
0891 .cmd_rcgr = 0x3c020,
0892 .hid_width = 5,
0893 .freq_tbl = ftbl_csi_clk_src,
0894 .parent_map = gcc_csi12_map,
0895 .clkr.hw.init = &(struct clk_init_data) {
0896 .name = "csi2_clk_src",
0897 .parent_data = gcc_csi_data,
0898 .num_parents = ARRAY_SIZE(gcc_csi_data),
0899 .ops = &clk_rcg2_ops,
0900 }
0901 };
0902
0903 static const struct parent_map gcc_csip_map[] = {
0904 { P_XO, 0 },
0905 { P_GPLL0, 1 },
0906 { P_GPLL4, 3 },
0907 { P_GPLL2, 4 },
0908 { P_GPLL0_DIV2, 5 },
0909 };
0910
0911 static const struct clk_parent_data gcc_csip_data[] = {
0912 { .fw_name = "xo" },
0913 { .hw = &gpll0.clkr.hw },
0914 { .hw = &gpll4.clkr.hw },
0915 { .hw = &gpll2.clkr.hw },
0916 { .hw = &gpll0_early_div.hw },
0917 };
0918
0919 static const struct freq_tbl ftbl_csi_p_clk_src[] = {
0920 F(66670000, P_GPLL0_DIV2, 6, 0, 0),
0921 F(133330000, P_GPLL0, 6, 0, 0),
0922 F(200000000, P_GPLL0, 4, 0, 0),
0923 F(266670000, P_GPLL0, 3, 0, 0),
0924 F(310000000, P_GPLL2, 3, 0, 0),
0925 { }
0926 };
0927
0928 static struct clk_rcg2 csi0p_clk_src = {
0929 .cmd_rcgr = 0x58084,
0930 .hid_width = 5,
0931 .freq_tbl = ftbl_csi_p_clk_src,
0932 .parent_map = gcc_csip_map,
0933 .clkr.hw.init = &(struct clk_init_data) {
0934 .name = "csi0p_clk_src",
0935 .parent_data = gcc_csip_data,
0936 .num_parents = ARRAY_SIZE(gcc_csip_data),
0937 .ops = &clk_rcg2_ops,
0938 }
0939 };
0940
0941 static struct clk_rcg2 csi1p_clk_src = {
0942 .cmd_rcgr = 0x58094,
0943 .hid_width = 5,
0944 .freq_tbl = ftbl_csi_p_clk_src,
0945 .parent_map = gcc_csip_map,
0946 .clkr.hw.init = &(struct clk_init_data) {
0947 .name = "csi1p_clk_src",
0948 .parent_data = gcc_csip_data,
0949 .num_parents = ARRAY_SIZE(gcc_csip_data),
0950 .ops = &clk_rcg2_ops,
0951 }
0952 };
0953
0954 static struct clk_rcg2 csi2p_clk_src = {
0955 .cmd_rcgr = 0x580a4,
0956 .hid_width = 5,
0957 .freq_tbl = ftbl_csi_p_clk_src,
0958 .parent_map = gcc_csip_map,
0959 .clkr.hw.init = &(struct clk_init_data) {
0960 .name = "csi2p_clk_src",
0961 .parent_data = gcc_csip_data,
0962 .num_parents = ARRAY_SIZE(gcc_csip_data),
0963 .ops = &clk_rcg2_ops,
0964 }
0965 };
0966
0967 static const struct freq_tbl ftbl_csi_phytimer_clk_src[] = {
0968 F(100000000, P_GPLL0_DIV2, 4, 0, 0),
0969 F(200000000, P_GPLL0, 4, 0, 0),
0970 F(266670000, P_GPLL0, 3, 0, 0),
0971 { }
0972 };
0973
0974 static struct clk_rcg2 csi0phytimer_clk_src = {
0975 .cmd_rcgr = 0x4e000,
0976 .hid_width = 5,
0977 .freq_tbl = ftbl_csi_phytimer_clk_src,
0978 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0979 .clkr.hw.init = &(struct clk_init_data) {
0980 .name = "csi0phytimer_clk_src",
0981 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0982 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0983 .ops = &clk_rcg2_ops,
0984 }
0985 };
0986
0987 static struct clk_rcg2 csi1phytimer_clk_src = {
0988 .cmd_rcgr = 0x4f000,
0989 .hid_width = 5,
0990 .freq_tbl = ftbl_csi_phytimer_clk_src,
0991 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0992 .clkr.hw.init = &(struct clk_init_data) {
0993 .name = "csi1phytimer_clk_src",
0994 .parent_data = gcc_xo_gpll0_gpll0div2_data,
0995 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0996 .ops = &clk_rcg2_ops,
0997 }
0998 };
0999
1000 static struct clk_rcg2 csi2phytimer_clk_src = {
1001 .cmd_rcgr = 0x4f05c,
1002 .hid_width = 5,
1003 .freq_tbl = ftbl_csi_phytimer_clk_src,
1004 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
1005 .clkr.hw.init = &(struct clk_init_data) {
1006 .name = "csi2phytimer_clk_src",
1007 .parent_data = gcc_xo_gpll0_gpll0div2_data,
1008 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
1009 .ops = &clk_rcg2_ops,
1010 }
1011 };
1012
1013 static const struct parent_map gcc_esc_map[] = {
1014 { P_XO, 0 },
1015 { P_GPLL0, 3 },
1016 };
1017
1018 static const struct clk_parent_data gcc_esc_vsync_data[] = {
1019 { .fw_name = "xo" },
1020 { .hw = &gpll0.clkr.hw },
1021 };
1022
1023 static const struct freq_tbl ftbl_esc0_1_clk_src[] = {
1024 F(19200000, P_XO, 1, 0, 0),
1025 { }
1026 };
1027
1028 static struct clk_rcg2 esc0_clk_src = {
1029 .cmd_rcgr = 0x4d05c,
1030 .hid_width = 5,
1031 .freq_tbl = ftbl_esc0_1_clk_src,
1032 .parent_map = gcc_esc_map,
1033 .clkr.hw.init = &(struct clk_init_data) {
1034 .name = "esc0_clk_src",
1035 .parent_data = gcc_esc_vsync_data,
1036 .num_parents = ARRAY_SIZE(gcc_esc_vsync_data),
1037 .ops = &clk_rcg2_ops,
1038 }
1039 };
1040
1041 static struct clk_rcg2 esc1_clk_src = {
1042 .cmd_rcgr = 0x4d0a8,
1043 .hid_width = 5,
1044 .freq_tbl = ftbl_esc0_1_clk_src,
1045 .parent_map = gcc_esc_map,
1046 .clkr.hw.init = &(struct clk_init_data) {
1047 .name = "esc1_clk_src",
1048 .parent_data = gcc_esc_vsync_data,
1049 .num_parents = ARRAY_SIZE(gcc_esc_vsync_data),
1050 .ops = &clk_rcg2_ops,
1051 }
1052 };
1053
1054 static const struct parent_map gcc_gfx3d_map[] = {
1055 { P_XO, 0 },
1056 { P_GPLL0, 1 },
1057 { P_GPLL3, 2 },
1058 { P_GPLL6, 3 },
1059 { P_GPLL4, 4 },
1060 { P_GPLL0_DIV2, 5 },
1061 { P_GPLL6_DIV2, 6 },
1062 };
1063
1064 static const struct clk_parent_data gcc_gfx3d_data[] = {
1065 { .fw_name = "xo" },
1066 { .hw = &gpll0.clkr.hw },
1067 { .hw = &gpll3.clkr.hw },
1068 { .hw = &gpll6.clkr.hw },
1069 { .hw = &gpll4.clkr.hw },
1070 { .hw = &gpll0_early_div.hw },
1071 { .hw = &gpll6_early_div.hw },
1072 };
1073
1074 static const struct freq_tbl ftbl_gfx3d_clk_src[] = {
1075 F(19200000, P_XO, 1, 0, 0),
1076 F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1077 F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1078 F(100000000, P_GPLL0_DIV2, 4, 0, 0),
1079 F(133330000, P_GPLL0_DIV2, 3, 0, 0),
1080 F(160000000, P_GPLL0_DIV2, 2.5, 0, 0),
1081 F(200000000, P_GPLL0_DIV2, 2, 0, 0),
1082 F(266670000, P_GPLL0, 3.0, 0, 0),
1083 F(320000000, P_GPLL0, 2.5, 0, 0),
1084 F(400000000, P_GPLL0, 2, 0, 0),
1085 F(460800000, P_GPLL4, 2.5, 0, 0),
1086 F(510000000, P_GPLL3, 2, 0, 0),
1087 F(560000000, P_GPLL3, 2, 0, 0),
1088 F(600000000, P_GPLL3, 2, 0, 0),
1089 F(650000000, P_GPLL3, 2, 0, 0),
1090 F(685000000, P_GPLL3, 2, 0, 0),
1091 F(725000000, P_GPLL3, 2, 0, 0),
1092 { }
1093 };
1094
1095 static struct clk_rcg2 gfx3d_clk_src = {
1096 .cmd_rcgr = 0x59000,
1097 .hid_width = 5,
1098 .freq_tbl = ftbl_gfx3d_clk_src,
1099 .parent_map = gcc_gfx3d_map,
1100 .clkr.hw.init = &(struct clk_init_data) {
1101 .name = "gfx3d_clk_src",
1102 .parent_data = gcc_gfx3d_data,
1103 .num_parents = ARRAY_SIZE(gcc_gfx3d_data),
1104 .ops = &clk_rcg2_floor_ops,
1105 .flags = CLK_SET_RATE_PARENT,
1106 }
1107 };
1108
1109 static const struct freq_tbl ftbl_gp_clk_src[] = {
1110 F(19200000, P_XO, 1, 0, 0),
1111 { }
1112 };
1113
1114 static struct clk_rcg2 gp1_clk_src = {
1115 .cmd_rcgr = 0x08004,
1116 .hid_width = 5,
1117 .mnd_width = 8,
1118 .freq_tbl = ftbl_gp_clk_src,
1119 .parent_map = gcc_gp_map,
1120 .clkr.hw.init = &(struct clk_init_data) {
1121 .name = "gp1_clk_src",
1122 .parent_data = gcc_gp_data,
1123 .num_parents = ARRAY_SIZE(gcc_gp_data),
1124 .ops = &clk_rcg2_ops,
1125 }
1126 };
1127
1128 static struct clk_rcg2 gp2_clk_src = {
1129 .cmd_rcgr = 0x09004,
1130 .hid_width = 5,
1131 .mnd_width = 8,
1132 .freq_tbl = ftbl_gp_clk_src,
1133 .parent_map = gcc_gp_map,
1134 .clkr.hw.init = &(struct clk_init_data) {
1135 .name = "gp2_clk_src",
1136 .parent_data = gcc_gp_data,
1137 .num_parents = ARRAY_SIZE(gcc_gp_data),
1138 .ops = &clk_rcg2_ops,
1139 }
1140 };
1141
1142 static struct clk_rcg2 gp3_clk_src = {
1143 .cmd_rcgr = 0x0a004,
1144 .hid_width = 5,
1145 .mnd_width = 8,
1146 .freq_tbl = ftbl_gp_clk_src,
1147 .parent_map = gcc_gp_map,
1148 .clkr.hw.init = &(struct clk_init_data) {
1149 .name = "gp3_clk_src",
1150 .parent_data = gcc_gp_data,
1151 .num_parents = ARRAY_SIZE(gcc_gp_data),
1152 .ops = &clk_rcg2_ops,
1153 }
1154 };
1155
1156 static const struct parent_map gcc_jpeg0_map[] = {
1157 { P_XO, 0 },
1158 { P_GPLL0, 1 },
1159 { P_GPLL6, 2 },
1160 { P_GPLL0_DIV2, 4 },
1161 { P_GPLL2, 5 },
1162 };
1163
1164 static const struct clk_parent_data gcc_jpeg0_data[] = {
1165 { .fw_name = "xo" },
1166 { .hw = &gpll0.clkr.hw },
1167 { .hw = &gpll6.clkr.hw },
1168 { .hw = &gpll0_early_div.hw },
1169 { .hw = &gpll2.clkr.hw },
1170 };
1171
1172 static const struct freq_tbl ftbl_jpeg0_clk_src[] = {
1173 F(66670000, P_GPLL0_DIV2, 6, 0, 0),
1174 F(133330000, P_GPLL0, 6, 0, 0),
1175 F(200000000, P_GPLL0, 4, 0, 0),
1176 F(266670000, P_GPLL0, 3, 0, 0),
1177 F(310000000, P_GPLL2, 3, 0, 0),
1178 F(320000000, P_GPLL0, 2.5, 0, 0),
1179 { }
1180 };
1181
1182 static struct clk_rcg2 jpeg0_clk_src = {
1183 .cmd_rcgr = 0x57000,
1184 .hid_width = 5,
1185 .freq_tbl = ftbl_jpeg0_clk_src,
1186 .parent_map = gcc_jpeg0_map,
1187 .clkr.hw.init = &(struct clk_init_data) {
1188 .name = "jpeg0_clk_src",
1189 .parent_data = gcc_jpeg0_data,
1190 .num_parents = ARRAY_SIZE(gcc_jpeg0_data),
1191 .ops = &clk_rcg2_ops,
1192 }
1193 };
1194
1195 static const struct parent_map gcc_mclk_map[] = {
1196 { P_XO, 0 },
1197 { P_GPLL0, 1 },
1198 { P_GPLL6, 2 },
1199 { P_GPLL0_DIV2, 4 },
1200 { P_GPLL6_DIV2, 5 },
1201 { P_SLEEP_CLK, 6 },
1202 };
1203
1204 static const struct clk_parent_data gcc_mclk_data[] = {
1205 { .fw_name = "xo" },
1206 { .hw = &gpll0.clkr.hw },
1207 { .hw = &gpll6.clkr.hw },
1208 { .hw = &gpll0_early_div.hw },
1209 { .hw = &gpll6_early_div.hw },
1210 { .fw_name = "sleep", .name = "sleep" },
1211 };
1212
1213 static const struct freq_tbl ftbl_mclk_clk_src[] = {
1214 F(19200000, P_GPLL6, 5, 4, 45),
1215 F(24000000, P_GPLL6_DIV2, 1, 2, 45),
1216 F(26000000, P_GPLL0, 1, 4, 123),
1217 F(33330000, P_GPLL0_DIV2, 12, 0, 0),
1218 F(36610000, P_GPLL6, 1, 2, 59),
1219 F(66667000, P_GPLL0, 12, 0, 0),
1220 { }
1221 };
1222
1223 static struct clk_rcg2 mclk0_clk_src = {
1224 .cmd_rcgr = 0x52000,
1225 .hid_width = 5,
1226 .mnd_width = 8,
1227 .freq_tbl = ftbl_mclk_clk_src,
1228 .parent_map = gcc_mclk_map,
1229 .clkr.hw.init = &(struct clk_init_data) {
1230 .name = "mclk0_clk_src",
1231 .parent_data = gcc_mclk_data,
1232 .num_parents = ARRAY_SIZE(gcc_mclk_data),
1233 .ops = &clk_rcg2_ops,
1234 }
1235 };
1236
1237 static struct clk_rcg2 mclk1_clk_src = {
1238 .cmd_rcgr = 0x53000,
1239 .hid_width = 5,
1240 .mnd_width = 8,
1241 .freq_tbl = ftbl_mclk_clk_src,
1242 .parent_map = gcc_mclk_map,
1243 .clkr.hw.init = &(struct clk_init_data) {
1244 .name = "mclk1_clk_src",
1245 .parent_data = gcc_mclk_data,
1246 .num_parents = ARRAY_SIZE(gcc_mclk_data),
1247 .ops = &clk_rcg2_ops,
1248 }
1249 };
1250
1251 static struct clk_rcg2 mclk2_clk_src = {
1252 .cmd_rcgr = 0x5c000,
1253 .hid_width = 5,
1254 .mnd_width = 8,
1255 .freq_tbl = ftbl_mclk_clk_src,
1256 .parent_map = gcc_mclk_map,
1257 .clkr.hw.init = &(struct clk_init_data) {
1258 .name = "mclk2_clk_src",
1259 .parent_data = gcc_mclk_data,
1260 .num_parents = ARRAY_SIZE(gcc_mclk_data),
1261 .ops = &clk_rcg2_ops,
1262 }
1263 };
1264
1265 static struct clk_rcg2 mclk3_clk_src = {
1266 .cmd_rcgr = 0x5e000,
1267 .hid_width = 5,
1268 .mnd_width = 8,
1269 .freq_tbl = ftbl_mclk_clk_src,
1270 .parent_map = gcc_mclk_map,
1271 .clkr.hw.init = &(struct clk_init_data) {
1272 .name = "mclk3_clk_src",
1273 .parent_data = gcc_mclk_data,
1274 .num_parents = ARRAY_SIZE(gcc_mclk_data),
1275 .ops = &clk_rcg2_ops,
1276 }
1277 };
1278
1279 static const struct parent_map gcc_mdp_map[] = {
1280 { P_XO, 0 },
1281 { P_GPLL0, 1 },
1282 { P_GPLL6, 3 },
1283 { P_GPLL0_DIV2, 4 },
1284 };
1285
1286 static const struct clk_parent_data gcc_mdp_data[] = {
1287 { .fw_name = "xo" },
1288 { .hw = &gpll0.clkr.hw },
1289 { .hw = &gpll6.clkr.hw },
1290 { .hw = &gpll0_early_div.hw },
1291 };
1292
1293 static const struct freq_tbl ftbl_mdp_clk_src[] = {
1294 F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1295 F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1296 F(160000000, P_GPLL0_DIV2, 2.5, 0, 0),
1297 F(200000000, P_GPLL0, 4, 0, 0),
1298 F(266670000, P_GPLL0, 3, 0, 0),
1299 F(320000000, P_GPLL0, 2.5, 0, 0),
1300 F(400000000, P_GPLL0, 2, 0, 0),
1301 { }
1302 };
1303
1304 static struct clk_rcg2 mdp_clk_src = {
1305 .cmd_rcgr = 0x4d014,
1306 .hid_width = 5,
1307 .freq_tbl = ftbl_mdp_clk_src,
1308 .parent_map = gcc_mdp_map,
1309 .clkr.hw.init = &(struct clk_init_data) {
1310 .name = "mdp_clk_src",
1311 .parent_data = gcc_mdp_data,
1312 .num_parents = ARRAY_SIZE(gcc_mdp_data),
1313 .ops = &clk_rcg2_ops,
1314 }
1315 };
1316
1317 static const struct parent_map gcc_pclk0_map[] = {
1318 { P_XO, 0 },
1319 { P_DSI0PLL, 1 },
1320 { P_DSI1PLL, 3 },
1321 };
1322
1323 static const struct parent_map gcc_pclk1_map[] = {
1324 { P_XO, 0 },
1325 { P_DSI0PLL, 3 },
1326 { P_DSI1PLL, 1 },
1327 };
1328
1329 static const struct clk_parent_data gcc_pclk_data[] = {
1330 { .fw_name = "xo" },
1331 { .fw_name = "dsi0pll", .name = "dsi0pll" },
1332 { .fw_name = "dsi1pll", .name = "dsi1pll" },
1333 };
1334
1335 static struct clk_rcg2 pclk0_clk_src = {
1336 .cmd_rcgr = 0x4d000,
1337 .hid_width = 5,
1338 .mnd_width = 8,
1339 .parent_map = gcc_pclk0_map,
1340 .clkr.hw.init = &(struct clk_init_data) {
1341 .name = "pclk0_clk_src",
1342 .parent_data = gcc_pclk_data,
1343 .num_parents = ARRAY_SIZE(gcc_pclk_data),
1344 .ops = &clk_pixel_ops,
1345 .flags = CLK_SET_RATE_PARENT,
1346 }
1347 };
1348
1349 static struct clk_rcg2 pclk1_clk_src = {
1350 .cmd_rcgr = 0x4d0b8,
1351 .hid_width = 5,
1352 .mnd_width = 8,
1353 .parent_map = gcc_pclk1_map,
1354 .clkr.hw.init = &(struct clk_init_data) {
1355 .name = "pclk1_clk_src",
1356 .parent_data = gcc_pclk_data,
1357 .num_parents = ARRAY_SIZE(gcc_pclk_data),
1358 .ops = &clk_pixel_ops,
1359 .flags = CLK_SET_RATE_PARENT,
1360 }
1361 };
1362
1363 static const struct freq_tbl ftbl_pdm2_clk_src[] = {
1364 F(32000000, P_GPLL0_DIV2, 12.5, 0, 0),
1365 F(64000000, P_GPLL0, 12.5, 0, 0),
1366 { }
1367 };
1368
1369 static struct clk_rcg2 pdm2_clk_src = {
1370 .cmd_rcgr = 0x44010,
1371 .hid_width = 5,
1372 .freq_tbl = ftbl_pdm2_clk_src,
1373 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
1374 .clkr.hw.init = &(struct clk_init_data) {
1375 .name = "pdm2_clk_src",
1376 .parent_data = gcc_xo_gpll0_gpll0div2_data,
1377 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
1378 .ops = &clk_rcg2_ops,
1379 }
1380 };
1381
1382 static const struct freq_tbl ftbl_rbcpr_gfx_clk_src[] = {
1383 F(19200000, P_XO, 1, 0, 0),
1384 F(50000000, P_GPLL0, 16, 0, 0),
1385 { }
1386 };
1387
1388 static struct clk_rcg2 rbcpr_gfx_clk_src = {
1389 .cmd_rcgr = 0x3a00c,
1390 .hid_width = 5,
1391 .freq_tbl = ftbl_rbcpr_gfx_clk_src,
1392 .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
1393 .clkr.hw.init = &(struct clk_init_data) {
1394 .name = "rbcpr_gfx_clk_src",
1395 .parent_data = gcc_xo_gpll0_gpll0div2_data,
1396 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
1397 .ops = &clk_rcg2_ops,
1398 }
1399 };
1400
1401 static const struct parent_map gcc_sdcc1_ice_core_map[] = {
1402 { P_XO, 0 },
1403 { P_GPLL0, 1 },
1404 { P_GPLL6, 2 },
1405 { P_GPLL0_DIV2, 4 },
1406 };
1407
1408 static const struct clk_parent_data gcc_sdcc1_ice_core_data[] = {
1409 { .fw_name = "xo" },
1410 { .hw = &gpll0.clkr.hw },
1411 { .hw = &gpll6.clkr.hw },
1412 { .hw = &gpll0_early_div.hw },
1413 };
1414
1415 static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
1416 F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1417 F(160000000, P_GPLL0, 5, 0, 0),
1418 F(270000000, P_GPLL6, 4, 0, 0),
1419 { }
1420 };
1421
1422 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
1423 .cmd_rcgr = 0x5d000,
1424 .hid_width = 5,
1425 .freq_tbl = ftbl_sdcc1_ice_core_clk_src,
1426 .parent_map = gcc_sdcc1_ice_core_map,
1427 .clkr.hw.init = &(struct clk_init_data) {
1428 .name = "sdcc1_ice_core_clk_src",
1429 .parent_data = gcc_sdcc1_ice_core_data,
1430 .num_parents = ARRAY_SIZE(gcc_sdcc1_ice_core_data),
1431 .ops = &clk_rcg2_ops,
1432 }
1433 };
1434
1435 static const struct parent_map gcc_sdcc_apps_map[] = {
1436 { P_XO, 0 },
1437 { P_GPLL0, 1 },
1438 { P_GPLL4, 2 },
1439 { P_GPLL0_DIV2, 4 },
1440 };
1441
1442 static const struct clk_parent_data gcc_sdcc_apss_data[] = {
1443 { .fw_name = "xo" },
1444 { .hw = &gpll0.clkr.hw },
1445 { .hw = &gpll4.clkr.hw },
1446 { .hw = &gpll0_early_div.hw },
1447 };
1448
1449 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
1450 F(144000, P_XO, 16, 3, 25),
1451 F(400000, P_XO, 12, 1, 4),
1452 F(20000000, P_GPLL0_DIV2, 5, 1, 4),
1453 F(25000000, P_GPLL0_DIV2, 16, 0, 0),
1454 F(50000000, P_GPLL0, 16, 0, 0),
1455 F(100000000, P_GPLL0, 8, 0, 0),
1456 F(177770000, P_GPLL0, 4.5, 0, 0),
1457 F(192000000, P_GPLL4, 6, 0, 0),
1458 F(384000000, P_GPLL4, 3, 0, 0),
1459 { }
1460 };
1461
1462 static struct clk_rcg2 sdcc1_apps_clk_src = {
1463 .cmd_rcgr = 0x42004,
1464 .hid_width = 5,
1465 .mnd_width = 8,
1466 .freq_tbl = ftbl_sdcc1_apps_clk_src,
1467 .parent_map = gcc_sdcc_apps_map,
1468 .clkr.hw.init = &(struct clk_init_data) {
1469 .name = "sdcc1_apps_clk_src",
1470 .parent_data = gcc_sdcc_apss_data,
1471 .num_parents = ARRAY_SIZE(gcc_sdcc_apss_data),
1472 .ops = &clk_rcg2_floor_ops,
1473 }
1474 };
1475
1476 static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
1477 F(144000, P_XO, 16, 3, 25),
1478 F(400000, P_XO, 12, 1, 4),
1479 F(20000000, P_GPLL0_DIV2, 5, 1, 4),
1480 F(25000000, P_GPLL0_DIV2, 16, 0, 0),
1481 F(50000000, P_GPLL0, 16, 0, 0),
1482 F(100000000, P_GPLL0, 8, 0, 0),
1483 F(177770000, P_GPLL0, 4.5, 0, 0),
1484 F(192000000, P_GPLL4, 6, 0, 0),
1485 F(200000000, P_GPLL0, 4, 0, 0),
1486 { }
1487 };
1488
1489 static struct clk_rcg2 sdcc2_apps_clk_src = {
1490 .cmd_rcgr = 0x43004,
1491 .hid_width = 5,
1492 .mnd_width = 8,
1493 .freq_tbl = ftbl_sdcc2_apps_clk_src,
1494 .parent_map = gcc_sdcc_apps_map,
1495 .clkr.hw.init = &(struct clk_init_data) {
1496 .name = "sdcc2_apps_clk_src",
1497 .parent_data = gcc_sdcc_apss_data,
1498 .num_parents = ARRAY_SIZE(gcc_sdcc_apss_data),
1499 .ops = &clk_rcg2_floor_ops,
1500 }
1501 };
1502
1503 static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
1504 F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1505 F(100000000, P_GPLL0, 8, 0, 0),
1506 F(133330000, P_GPLL0, 6, 0, 0),
1507 { }
1508 };
1509
1510 static struct clk_rcg2 usb30_master_clk_src = {
1511 .cmd_rcgr = 0x3f00c,
1512 .hid_width = 5,
1513 .freq_tbl = ftbl_usb30_master_clk_src,
1514 .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
1515 .clkr.hw.init = &(struct clk_init_data) {
1516 .name = "usb30_master_clk_src",
1517 .parent_data = gcc_xo_gpll0_gpll0div2_data,
1518 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
1519 .ops = &clk_rcg2_ops,
1520 }
1521 };
1522
1523 static const struct parent_map gcc_usb30_mock_utmi_map[] = {
1524 { P_XO, 0 },
1525 { P_GPLL6, 1 },
1526 { P_GPLL6_DIV2, 2 },
1527 { P_GPLL0, 3 },
1528 { P_GPLL0_DIV2, 4 },
1529 };
1530
1531 static const struct clk_parent_data gcc_usb30_mock_utmi_data[] = {
1532 { .fw_name = "xo" },
1533 { .hw = &gpll6.clkr.hw },
1534 { .hw = &gpll6_early_div.hw },
1535 { .hw = &gpll0.clkr.hw },
1536 { .hw = &gpll0_early_div.hw },
1537 };
1538
1539 static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
1540 F(19200000, P_XO, 1, 0, 0),
1541 F(60000000, P_GPLL6_DIV2, 9, 1, 1),
1542 { }
1543 };
1544
1545 static struct clk_rcg2 usb30_mock_utmi_clk_src = {
1546 .cmd_rcgr = 0x3f020,
1547 .hid_width = 5,
1548 .mnd_width = 8,
1549 .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
1550 .parent_map = gcc_usb30_mock_utmi_map,
1551 .clkr.hw.init = &(struct clk_init_data) {
1552 .name = "usb30_mock_utmi_clk_src",
1553 .parent_data = gcc_usb30_mock_utmi_data,
1554 .num_parents = ARRAY_SIZE(gcc_usb30_mock_utmi_data),
1555 .ops = &clk_rcg2_ops,
1556 }
1557 };
1558
1559 static const struct parent_map gcc_usb3_aux_map[] = {
1560 { P_XO, 0 },
1561 { P_SLEEP_CLK, 6 },
1562 };
1563
1564 static const struct clk_parent_data gcc_usb3_aux_data[] = {
1565 { .fw_name = "xo" },
1566 { .fw_name = "sleep", .name = "sleep" },
1567 };
1568
1569 static const struct freq_tbl ftbl_usb3_aux_clk_src[] = {
1570 F(19200000, P_XO, 1, 0, 0),
1571 { }
1572 };
1573
1574 static struct clk_rcg2 usb3_aux_clk_src = {
1575 .cmd_rcgr = 0x3f05c,
1576 .hid_width = 5,
1577 .mnd_width = 8,
1578 .freq_tbl = ftbl_usb3_aux_clk_src,
1579 .parent_map = gcc_usb3_aux_map,
1580 .clkr.hw.init = &(struct clk_init_data) {
1581 .name = "usb3_aux_clk_src",
1582 .parent_data = gcc_usb3_aux_data,
1583 .num_parents = ARRAY_SIZE(gcc_usb3_aux_data),
1584 .ops = &clk_rcg2_ops,
1585 }
1586 };
1587
1588 static const struct parent_map gcc_vcodec0_map[] = {
1589 { P_XO, 0 },
1590 { P_GPLL0, 1 },
1591 { P_GPLL6, 2 },
1592 { P_GPLL2, 3 },
1593 { P_GPLL0_DIV2, 4 },
1594 };
1595
1596 static const struct clk_parent_data gcc_vcodec0_data[] = {
1597 { .fw_name = "xo" },
1598 { .hw = &gpll0.clkr.hw },
1599 { .hw = &gpll6.clkr.hw },
1600 { .hw = &gpll2.clkr.hw },
1601 { .hw = &gpll0_early_div.hw },
1602 };
1603
1604 static const struct freq_tbl ftbl_vcodec0_clk_src[] = {
1605 F(114290000, P_GPLL0_DIV2, 3.5, 0, 0),
1606 F(228570000, P_GPLL0, 3.5, 0, 0),
1607 F(310000000, P_GPLL2, 3, 0, 0),
1608 F(360000000, P_GPLL6, 3, 0, 0),
1609 F(400000000, P_GPLL0, 2, 0, 0),
1610 F(465000000, P_GPLL2, 2, 0, 0),
1611 F(540000000, P_GPLL6, 2, 0, 0),
1612 { }
1613 };
1614
1615 static struct clk_rcg2 vcodec0_clk_src = {
1616 .cmd_rcgr = 0x4c000,
1617 .hid_width = 5,
1618 .freq_tbl = ftbl_vcodec0_clk_src,
1619 .parent_map = gcc_vcodec0_map,
1620 .clkr.hw.init = &(struct clk_init_data) {
1621 .name = "vcodec0_clk_src",
1622 .parent_data = gcc_vcodec0_data,
1623 .num_parents = ARRAY_SIZE(gcc_vcodec0_data),
1624 .ops = &clk_rcg2_ops,
1625 }
1626 };
1627
1628 static const struct parent_map gcc_vfe_map[] = {
1629 { P_XO, 0 },
1630 { P_GPLL0, 1 },
1631 { P_GPLL6, 2 },
1632 { P_GPLL4, 3 },
1633 { P_GPLL2, 4 },
1634 { P_GPLL0_DIV2, 5 },
1635 };
1636
1637 static const struct clk_parent_data gcc_vfe_data[] = {
1638 { .fw_name = "xo" },
1639 { .hw = &gpll0.clkr.hw },
1640 { .hw = &gpll6.clkr.hw },
1641 { .hw = &gpll4.clkr.hw },
1642 { .hw = &gpll2.clkr.hw },
1643 { .hw = &gpll0_early_div.hw },
1644 };
1645
1646 static const struct freq_tbl ftbl_vfe_clk_src[] = {
1647 F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1648 F(100000000, P_GPLL0_DIV2, 4, 0, 0),
1649 F(133330000, P_GPLL0, 6, 0, 0),
1650 F(160000000, P_GPLL0, 5, 0, 0),
1651 F(200000000, P_GPLL0, 4, 0, 0),
1652 F(266670000, P_GPLL0, 3, 0, 0),
1653 F(310000000, P_GPLL2, 3, 0, 0),
1654 F(400000000, P_GPLL0, 2, 0, 0),
1655 F(465000000, P_GPLL2, 2, 0, 0),
1656 { }
1657 };
1658
1659 static struct clk_rcg2 vfe0_clk_src = {
1660 .cmd_rcgr = 0x58000,
1661 .hid_width = 5,
1662 .freq_tbl = ftbl_vfe_clk_src,
1663 .parent_map = gcc_vfe_map,
1664 .clkr.hw.init = &(struct clk_init_data) {
1665 .name = "vfe0_clk_src",
1666 .parent_data = gcc_vfe_data,
1667 .num_parents = ARRAY_SIZE(gcc_vfe_data),
1668 .ops = &clk_rcg2_ops,
1669 }
1670 };
1671
1672 static struct clk_rcg2 vfe1_clk_src = {
1673 .cmd_rcgr = 0x58054,
1674 .hid_width = 5,
1675 .freq_tbl = ftbl_vfe_clk_src,
1676 .parent_map = gcc_vfe_map,
1677 .clkr.hw.init = &(struct clk_init_data) {
1678 .name = "vfe1_clk_src",
1679 .parent_data = gcc_vfe_data,
1680 .num_parents = ARRAY_SIZE(gcc_vfe_data),
1681 .ops = &clk_rcg2_ops,
1682 }
1683 };
1684
1685 static const struct parent_map gcc_vsync_map[] = {
1686 { P_XO, 0 },
1687 { P_GPLL0, 2 },
1688 };
1689
1690 static const struct freq_tbl ftbl_vsync_clk_src[] = {
1691 F(19200000, P_XO, 1, 0, 0),
1692 { }
1693 };
1694
1695 static struct clk_rcg2 vsync_clk_src = {
1696 .cmd_rcgr = 0x4d02c,
1697 .hid_width = 5,
1698 .freq_tbl = ftbl_vsync_clk_src,
1699 .parent_map = gcc_vsync_map,
1700 .clkr.hw.init = &(struct clk_init_data) {
1701 .name = "vsync_clk_src",
1702 .parent_data = gcc_esc_vsync_data,
1703 .num_parents = ARRAY_SIZE(gcc_esc_vsync_data),
1704 .ops = &clk_rcg2_ops,
1705 }
1706 };
1707
1708 static struct clk_branch gcc_apc0_droop_detector_gpll0_clk = {
1709 .halt_reg = 0x78004,
1710 .halt_check = BRANCH_HALT,
1711 .clkr = {
1712 .enable_reg = 0x78004,
1713 .enable_mask = BIT(0),
1714 .hw.init = &(struct clk_init_data) {
1715 .name = "gcc_apc0_droop_detector_gpll0_clk",
1716 .parent_hws = (const struct clk_hw*[]){
1717 &apc0_droop_detector_clk_src.clkr.hw,
1718 },
1719 .num_parents = 1,
1720 .ops = &clk_branch2_ops,
1721 .flags = CLK_SET_RATE_PARENT,
1722 }
1723 }
1724 };
1725
1726 static struct clk_branch gcc_apc1_droop_detector_gpll0_clk = {
1727 .halt_reg = 0x79004,
1728 .halt_check = BRANCH_HALT,
1729 .clkr = {
1730 .enable_reg = 0x79004,
1731 .enable_mask = BIT(0),
1732 .hw.init = &(struct clk_init_data) {
1733 .name = "gcc_apc1_droop_detector_gpll0_clk",
1734 .parent_hws = (const struct clk_hw*[]){
1735 &apc1_droop_detector_clk_src.clkr.hw,
1736 },
1737 .num_parents = 1,
1738 .ops = &clk_branch2_ops,
1739 .flags = CLK_SET_RATE_PARENT,
1740 }
1741 }
1742 };
1743
1744 static struct clk_branch gcc_apss_ahb_clk = {
1745 .halt_reg = 0x4601c,
1746 .halt_check = BRANCH_HALT_VOTED,
1747 .clkr = {
1748 .enable_reg = 0x45004,
1749 .enable_mask = BIT(14),
1750 .hw.init = &(struct clk_init_data) {
1751 .name = "gcc_apss_ahb_clk",
1752 .parent_hws = (const struct clk_hw*[]){
1753 &apss_ahb_clk_src.clkr.hw,
1754 },
1755 .num_parents = 1,
1756 .ops = &clk_branch2_ops,
1757 .flags = CLK_SET_RATE_PARENT,
1758 }
1759 }
1760 };
1761
1762 static struct clk_branch gcc_apss_axi_clk = {
1763 .halt_reg = 0x46020,
1764 .halt_check = BRANCH_HALT_VOTED,
1765 .clkr = {
1766 .enable_reg = 0x45004,
1767 .enable_mask = BIT(13),
1768 .hw.init = &(struct clk_init_data) {
1769 .name = "gcc_apss_axi_clk",
1770 .ops = &clk_branch2_ops,
1771 }
1772 }
1773 };
1774
1775 static struct clk_branch gcc_apss_tcu_async_clk = {
1776 .halt_reg = 0x12018,
1777 .halt_check = BRANCH_HALT_VOTED,
1778 .clkr = {
1779 .enable_reg = 0x4500c,
1780 .enable_mask = BIT(1),
1781 .hw.init = &(struct clk_init_data) {
1782 .name = "gcc_apss_tcu_async_clk",
1783 .ops = &clk_branch2_ops,
1784 }
1785 }
1786 };
1787
1788 static struct clk_branch gcc_bimc_gfx_clk = {
1789 .halt_reg = 0x59034,
1790 .halt_check = BRANCH_HALT,
1791 .clkr = {
1792 .enable_reg = 0x59034,
1793 .enable_mask = BIT(0),
1794 .hw.init = &(struct clk_init_data) {
1795 .name = "gcc_bimc_gfx_clk",
1796 .ops = &clk_branch2_ops,
1797 }
1798 }
1799 };
1800
1801 static struct clk_branch gcc_bimc_gpu_clk = {
1802 .halt_reg = 0x59030,
1803 .halt_check = BRANCH_HALT,
1804 .clkr = {
1805 .enable_reg = 0x59030,
1806 .enable_mask = BIT(0),
1807 .hw.init = &(struct clk_init_data) {
1808 .name = "gcc_bimc_gpu_clk",
1809 .ops = &clk_branch2_ops,
1810 }
1811 }
1812 };
1813
1814 static struct clk_branch gcc_blsp1_ahb_clk = {
1815 .halt_reg = 0x01008,
1816 .halt_check = BRANCH_HALT_VOTED,
1817 .clkr = {
1818 .enable_reg = 0x45004,
1819 .enable_mask = BIT(10),
1820 .hw.init = &(struct clk_init_data) {
1821 .name = "gcc_blsp1_ahb_clk",
1822 .ops = &clk_branch2_ops,
1823 }
1824 }
1825 };
1826
1827 static struct clk_branch gcc_blsp2_ahb_clk = {
1828 .halt_reg = 0x0b008,
1829 .halt_check = BRANCH_HALT_VOTED,
1830 .clkr = {
1831 .enable_reg = 0x45004,
1832 .enable_mask = BIT(20),
1833 .hw.init = &(struct clk_init_data) {
1834 .name = "gcc_blsp2_ahb_clk",
1835 .ops = &clk_branch2_ops,
1836 }
1837 }
1838 };
1839
1840 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1841 .halt_reg = 0x02008,
1842 .halt_check = BRANCH_HALT,
1843 .clkr = {
1844 .enable_reg = 0x02008,
1845 .enable_mask = BIT(0),
1846 .hw.init = &(struct clk_init_data) {
1847 .name = "gcc_blsp1_qup1_i2c_apps_clk",
1848 .parent_hws = (const struct clk_hw*[]){
1849 &blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1850 },
1851 .num_parents = 1,
1852 .ops = &clk_branch2_ops,
1853 .flags = CLK_SET_RATE_PARENT,
1854 }
1855 }
1856 };
1857
1858 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1859 .halt_reg = 0x03010,
1860 .halt_check = BRANCH_HALT,
1861 .clkr = {
1862 .enable_reg = 0x03010,
1863 .enable_mask = BIT(0),
1864 .hw.init = &(struct clk_init_data) {
1865 .name = "gcc_blsp1_qup2_i2c_apps_clk",
1866 .parent_hws = (const struct clk_hw*[]){
1867 &blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1868 },
1869 .num_parents = 1,
1870 .ops = &clk_branch2_ops,
1871 .flags = CLK_SET_RATE_PARENT,
1872 }
1873 }
1874 };
1875
1876 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1877 .halt_reg = 0x04020,
1878 .halt_check = BRANCH_HALT,
1879 .clkr = {
1880 .enable_reg = 0x04020,
1881 .enable_mask = BIT(0),
1882 .hw.init = &(struct clk_init_data) {
1883 .name = "gcc_blsp1_qup3_i2c_apps_clk",
1884 .parent_hws = (const struct clk_hw*[]){
1885 &blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1886 },
1887 .num_parents = 1,
1888 .ops = &clk_branch2_ops,
1889 .flags = CLK_SET_RATE_PARENT,
1890 }
1891 }
1892 };
1893
1894 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1895 .halt_reg = 0x05020,
1896 .halt_check = BRANCH_HALT,
1897 .clkr = {
1898 .enable_reg = 0x05020,
1899 .enable_mask = BIT(0),
1900 .hw.init = &(struct clk_init_data) {
1901 .name = "gcc_blsp1_qup4_i2c_apps_clk",
1902 .parent_hws = (const struct clk_hw*[]){
1903 &blsp1_qup4_i2c_apps_clk_src.clkr.hw,
1904 },
1905 .num_parents = 1,
1906 .ops = &clk_branch2_ops,
1907 .flags = CLK_SET_RATE_PARENT,
1908 }
1909 }
1910 };
1911
1912 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1913 .halt_reg = 0x0c008,
1914 .halt_check = BRANCH_HALT,
1915 .clkr = {
1916 .enable_reg = 0x0c008,
1917 .enable_mask = BIT(0),
1918 .hw.init = &(struct clk_init_data) {
1919 .name = "gcc_blsp2_qup1_i2c_apps_clk",
1920 .parent_hws = (const struct clk_hw*[]){
1921 &blsp2_qup1_i2c_apps_clk_src.clkr.hw,
1922 },
1923 .num_parents = 1,
1924 .ops = &clk_branch2_ops,
1925 .flags = CLK_SET_RATE_PARENT,
1926 }
1927 }
1928 };
1929
1930 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1931 .halt_reg = 0x0d010,
1932 .halt_check = BRANCH_HALT,
1933 .clkr = {
1934 .enable_reg = 0x0d010,
1935 .enable_mask = BIT(0),
1936 .hw.init = &(struct clk_init_data) {
1937 .name = "gcc_blsp2_qup2_i2c_apps_clk",
1938 .parent_hws = (const struct clk_hw*[]){
1939 &blsp2_qup2_i2c_apps_clk_src.clkr.hw,
1940 },
1941 .num_parents = 1,
1942 .ops = &clk_branch2_ops,
1943 .flags = CLK_SET_RATE_PARENT,
1944 }
1945 }
1946 };
1947
1948 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1949 .halt_reg = 0x0f020,
1950 .halt_check = BRANCH_HALT,
1951 .clkr = {
1952 .enable_reg = 0x0f020,
1953 .enable_mask = BIT(0),
1954 .hw.init = &(struct clk_init_data) {
1955 .name = "gcc_blsp2_qup3_i2c_apps_clk",
1956 .parent_hws = (const struct clk_hw*[]){
1957 &blsp2_qup3_i2c_apps_clk_src.clkr.hw,
1958 },
1959 .num_parents = 1,
1960 .ops = &clk_branch2_ops,
1961 .flags = CLK_SET_RATE_PARENT,
1962 }
1963 }
1964 };
1965
1966 static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1967 .halt_reg = 0x18020,
1968 .halt_check = BRANCH_HALT,
1969 .clkr = {
1970 .enable_reg = 0x18020,
1971 .enable_mask = BIT(0),
1972 .hw.init = &(struct clk_init_data) {
1973 .name = "gcc_blsp2_qup4_i2c_apps_clk",
1974 .parent_hws = (const struct clk_hw*[]){
1975 &blsp2_qup4_i2c_apps_clk_src.clkr.hw,
1976 },
1977 .num_parents = 1,
1978 .ops = &clk_branch2_ops,
1979 .flags = CLK_SET_RATE_PARENT,
1980 }
1981 }
1982 };
1983
1984 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1985 .halt_reg = 0x02004,
1986 .halt_check = BRANCH_HALT,
1987 .clkr = {
1988 .enable_reg = 0x02004,
1989 .enable_mask = BIT(0),
1990 .hw.init = &(struct clk_init_data) {
1991 .name = "gcc_blsp1_qup1_spi_apps_clk",
1992 .parent_hws = (const struct clk_hw*[]){
1993 &blsp1_qup1_spi_apps_clk_src.clkr.hw,
1994 },
1995 .num_parents = 1,
1996 .ops = &clk_branch2_ops,
1997 .flags = CLK_SET_RATE_PARENT,
1998 }
1999 }
2000 };
2001
2002 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
2003 .halt_reg = 0x0300c,
2004 .halt_check = BRANCH_HALT,
2005 .clkr = {
2006 .enable_reg = 0x0300c,
2007 .enable_mask = BIT(0),
2008 .hw.init = &(struct clk_init_data) {
2009 .name = "gcc_blsp1_qup2_spi_apps_clk",
2010 .parent_hws = (const struct clk_hw*[]){
2011 &blsp1_qup2_spi_apps_clk_src.clkr.hw,
2012 },
2013 .num_parents = 1,
2014 .ops = &clk_branch2_ops,
2015 .flags = CLK_SET_RATE_PARENT,
2016 }
2017 }
2018 };
2019
2020 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
2021 .halt_reg = 0x0401c,
2022 .halt_check = BRANCH_HALT,
2023 .clkr = {
2024 .enable_reg = 0x0401c,
2025 .enable_mask = BIT(0),
2026 .hw.init = &(struct clk_init_data) {
2027 .name = "gcc_blsp1_qup3_spi_apps_clk",
2028 .parent_hws = (const struct clk_hw*[]){
2029 &blsp1_qup3_spi_apps_clk_src.clkr.hw,
2030 },
2031 .num_parents = 1,
2032 .ops = &clk_branch2_ops,
2033 .flags = CLK_SET_RATE_PARENT,
2034 }
2035 }
2036 };
2037
2038 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
2039 .halt_reg = 0x0501c,
2040 .halt_check = BRANCH_HALT,
2041 .clkr = {
2042 .enable_reg = 0x0501c,
2043 .enable_mask = BIT(0),
2044 .hw.init = &(struct clk_init_data) {
2045 .name = "gcc_blsp1_qup4_spi_apps_clk",
2046 .parent_hws = (const struct clk_hw*[]){
2047 &blsp1_qup4_spi_apps_clk_src.clkr.hw,
2048 },
2049 .num_parents = 1,
2050 .ops = &clk_branch2_ops,
2051 .flags = CLK_SET_RATE_PARENT,
2052 }
2053 }
2054 };
2055
2056 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
2057 .halt_reg = 0x0c004,
2058 .halt_check = BRANCH_HALT,
2059 .clkr = {
2060 .enable_reg = 0x0c004,
2061 .enable_mask = BIT(0),
2062 .hw.init = &(struct clk_init_data) {
2063 .name = "gcc_blsp2_qup1_spi_apps_clk",
2064 .parent_hws = (const struct clk_hw*[]){
2065 &blsp2_qup1_spi_apps_clk_src.clkr.hw,
2066 },
2067 .num_parents = 1,
2068 .ops = &clk_branch2_ops,
2069 .flags = CLK_SET_RATE_PARENT,
2070 }
2071 }
2072 };
2073
2074 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
2075 .halt_reg = 0x0d00c,
2076 .halt_check = BRANCH_HALT,
2077 .clkr = {
2078 .enable_reg = 0x0d00c,
2079 .enable_mask = BIT(0),
2080 .hw.init = &(struct clk_init_data) {
2081 .name = "gcc_blsp2_qup2_spi_apps_clk",
2082 .parent_hws = (const struct clk_hw*[]){
2083 &blsp2_qup2_spi_apps_clk_src.clkr.hw,
2084 },
2085 .num_parents = 1,
2086 .ops = &clk_branch2_ops,
2087 .flags = CLK_SET_RATE_PARENT,
2088 }
2089 }
2090 };
2091
2092 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
2093 .halt_reg = 0x0f01c,
2094 .halt_check = BRANCH_HALT,
2095 .clkr = {
2096 .enable_reg = 0x0f01c,
2097 .enable_mask = BIT(0),
2098 .hw.init = &(struct clk_init_data) {
2099 .name = "gcc_blsp2_qup3_spi_apps_clk",
2100 .parent_hws = (const struct clk_hw*[]){
2101 &blsp2_qup3_spi_apps_clk_src.clkr.hw,
2102 },
2103 .num_parents = 1,
2104 .ops = &clk_branch2_ops,
2105 .flags = CLK_SET_RATE_PARENT,
2106 }
2107 }
2108 };
2109
2110 static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
2111 .halt_reg = 0x1801c,
2112 .halt_check = BRANCH_HALT,
2113 .clkr = {
2114 .enable_reg = 0x1801c,
2115 .enable_mask = BIT(0),
2116 .hw.init = &(struct clk_init_data) {
2117 .name = "gcc_blsp2_qup4_spi_apps_clk",
2118 .parent_hws = (const struct clk_hw*[]){
2119 &blsp2_qup4_spi_apps_clk_src.clkr.hw,
2120 },
2121 .num_parents = 1,
2122 .ops = &clk_branch2_ops,
2123 .flags = CLK_SET_RATE_PARENT,
2124 }
2125 }
2126 };
2127
2128 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
2129 .halt_reg = 0x0203c,
2130 .halt_check = BRANCH_HALT,
2131 .clkr = {
2132 .enable_reg = 0x0203c,
2133 .enable_mask = BIT(0),
2134 .hw.init = &(struct clk_init_data) {
2135 .name = "gcc_blsp1_uart1_apps_clk",
2136 .parent_hws = (const struct clk_hw*[]){
2137 &blsp1_uart1_apps_clk_src.clkr.hw,
2138 },
2139 .num_parents = 1,
2140 .ops = &clk_branch2_ops,
2141 .flags = CLK_SET_RATE_PARENT,
2142 }
2143 }
2144 };
2145
2146 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
2147 .halt_reg = 0x0302c,
2148 .halt_check = BRANCH_HALT,
2149 .clkr = {
2150 .enable_reg = 0x0302c,
2151 .enable_mask = BIT(0),
2152 .hw.init = &(struct clk_init_data) {
2153 .name = "gcc_blsp1_uart2_apps_clk",
2154 .parent_hws = (const struct clk_hw*[]){
2155 &blsp1_uart2_apps_clk_src.clkr.hw,
2156 },
2157 .num_parents = 1,
2158 .ops = &clk_branch2_ops,
2159 .flags = CLK_SET_RATE_PARENT,
2160 }
2161 }
2162 };
2163
2164 static struct clk_branch gcc_blsp2_uart1_apps_clk = {
2165 .halt_reg = 0x0c03c,
2166 .halt_check = BRANCH_HALT,
2167 .clkr = {
2168 .enable_reg = 0x0c03c,
2169 .enable_mask = BIT(0),
2170 .hw.init = &(struct clk_init_data) {
2171 .name = "gcc_blsp2_uart1_apps_clk",
2172 .parent_hws = (const struct clk_hw*[]){
2173 &blsp2_uart1_apps_clk_src.clkr.hw,
2174 },
2175 .num_parents = 1,
2176 .ops = &clk_branch2_ops,
2177 .flags = CLK_SET_RATE_PARENT,
2178 }
2179 }
2180 };
2181
2182 static struct clk_branch gcc_blsp2_uart2_apps_clk = {
2183 .halt_reg = 0x0d02c,
2184 .halt_check = BRANCH_HALT,
2185 .clkr = {
2186 .enable_reg = 0x0d02c,
2187 .enable_mask = BIT(0),
2188 .hw.init = &(struct clk_init_data) {
2189 .name = "gcc_blsp2_uart2_apps_clk",
2190 .parent_hws = (const struct clk_hw*[]){
2191 &blsp2_uart2_apps_clk_src.clkr.hw,
2192 },
2193 .num_parents = 1,
2194 .ops = &clk_branch2_ops,
2195 .flags = CLK_SET_RATE_PARENT,
2196 }
2197 }
2198 };
2199
2200 static struct clk_branch gcc_boot_rom_ahb_clk = {
2201 .halt_reg = 0x1300c,
2202 .halt_check = BRANCH_HALT_VOTED,
2203 .clkr = {
2204 .enable_reg = 0x45004,
2205 .enable_mask = BIT(7),
2206 .hw.init = &(struct clk_init_data) {
2207 .name = "gcc_boot_rom_ahb_clk",
2208 .ops = &clk_branch2_ops,
2209 }
2210 }
2211 };
2212
2213 static struct clk_branch gcc_camss_ahb_clk = {
2214 .halt_reg = 0x56004,
2215 .halt_check = BRANCH_HALT,
2216 .clkr = {
2217 .enable_reg = 0x56004,
2218 .enable_mask = BIT(0),
2219 .hw.init = &(struct clk_init_data) {
2220 .name = "gcc_camss_ahb_clk",
2221 .ops = &clk_branch2_ops,
2222 }
2223 }
2224 };
2225
2226 static struct clk_branch gcc_camss_cci_ahb_clk = {
2227 .halt_reg = 0x5101c,
2228 .halt_check = BRANCH_HALT,
2229 .clkr = {
2230 .enable_reg = 0x5101c,
2231 .enable_mask = BIT(0),
2232 .hw.init = &(struct clk_init_data) {
2233 .name = "gcc_camss_cci_ahb_clk",
2234 .parent_hws = (const struct clk_hw*[]){
2235 &camss_top_ahb_clk_src.clkr.hw,
2236 },
2237 .num_parents = 1,
2238 .ops = &clk_branch2_ops,
2239 .flags = CLK_SET_RATE_PARENT,
2240 }
2241 }
2242 };
2243
2244 static struct clk_branch gcc_camss_cci_clk = {
2245 .halt_reg = 0x51018,
2246 .halt_check = BRANCH_HALT,
2247 .clkr = {
2248 .enable_reg = 0x51018,
2249 .enable_mask = BIT(0),
2250 .hw.init = &(struct clk_init_data) {
2251 .name = "gcc_camss_cci_clk",
2252 .parent_hws = (const struct clk_hw*[]){
2253 &cci_clk_src.clkr.hw,
2254 },
2255 .num_parents = 1,
2256 .ops = &clk_branch2_ops,
2257 .flags = CLK_SET_RATE_PARENT,
2258 }
2259 }
2260 };
2261
2262 static struct clk_branch gcc_camss_cpp_ahb_clk = {
2263 .halt_reg = 0x58040,
2264 .halt_check = BRANCH_HALT,
2265 .clkr = {
2266 .enable_reg = 0x58040,
2267 .enable_mask = BIT(0),
2268 .hw.init = &(struct clk_init_data) {
2269 .name = "gcc_camss_cpp_ahb_clk",
2270 .parent_hws = (const struct clk_hw*[]){
2271 &camss_top_ahb_clk_src.clkr.hw,
2272 },
2273 .num_parents = 1,
2274 .ops = &clk_branch2_ops,
2275 .flags = CLK_SET_RATE_PARENT,
2276 }
2277 }
2278 };
2279
2280 static struct clk_branch gcc_camss_cpp_axi_clk = {
2281 .halt_reg = 0x58064,
2282 .halt_check = BRANCH_HALT,
2283 .clkr = {
2284 .enable_reg = 0x58064,
2285 .enable_mask = BIT(0),
2286 .hw.init = &(struct clk_init_data) {
2287 .name = "gcc_camss_cpp_axi_clk",
2288 .ops = &clk_branch2_ops,
2289 }
2290 }
2291 };
2292
2293 static struct clk_branch gcc_camss_cpp_clk = {
2294 .halt_reg = 0x5803c,
2295 .halt_check = BRANCH_HALT,
2296 .clkr = {
2297 .enable_reg = 0x5803c,
2298 .enable_mask = BIT(0),
2299 .hw.init = &(struct clk_init_data) {
2300 .name = "gcc_camss_cpp_clk",
2301 .parent_hws = (const struct clk_hw*[]){
2302 &cpp_clk_src.clkr.hw,
2303 },
2304 .num_parents = 1,
2305 .ops = &clk_branch2_ops,
2306 .flags = CLK_SET_RATE_PARENT,
2307 }
2308 }
2309 };
2310
2311 static struct clk_branch gcc_camss_csi0_ahb_clk = {
2312 .halt_reg = 0x4e040,
2313 .halt_check = BRANCH_HALT,
2314 .clkr = {
2315 .enable_reg = 0x4e040,
2316 .enable_mask = BIT(0),
2317 .hw.init = &(struct clk_init_data) {
2318 .name = "gcc_camss_csi0_ahb_clk",
2319 .parent_hws = (const struct clk_hw*[]){
2320 &camss_top_ahb_clk_src.clkr.hw,
2321 },
2322 .num_parents = 1,
2323 .ops = &clk_branch2_ops,
2324 .flags = CLK_SET_RATE_PARENT,
2325 }
2326 }
2327 };
2328
2329 static struct clk_branch gcc_camss_csi1_ahb_clk = {
2330 .halt_reg = 0x4f040,
2331 .halt_check = BRANCH_HALT,
2332 .clkr = {
2333 .enable_reg = 0x4f040,
2334 .enable_mask = BIT(0),
2335 .hw.init = &(struct clk_init_data) {
2336 .name = "gcc_camss_csi1_ahb_clk",
2337 .parent_hws = (const struct clk_hw*[]){
2338 &camss_top_ahb_clk_src.clkr.hw,
2339 },
2340 .num_parents = 1,
2341 .ops = &clk_branch2_ops,
2342 .flags = CLK_SET_RATE_PARENT,
2343 }
2344 }
2345 };
2346
2347 static struct clk_branch gcc_camss_csi2_ahb_clk = {
2348 .halt_reg = 0x3c040,
2349 .halt_check = BRANCH_HALT,
2350 .clkr = {
2351 .enable_reg = 0x3c040,
2352 .enable_mask = BIT(0),
2353 .hw.init = &(struct clk_init_data) {
2354 .name = "gcc_camss_csi2_ahb_clk",
2355 .parent_hws = (const struct clk_hw*[]){
2356 &camss_top_ahb_clk_src.clkr.hw,
2357 },
2358 .num_parents = 1,
2359 .ops = &clk_branch2_ops,
2360 .flags = CLK_SET_RATE_PARENT,
2361 }
2362 }
2363 };
2364
2365 static struct clk_branch gcc_camss_csi0_clk = {
2366 .halt_reg = 0x4e03c,
2367 .halt_check = BRANCH_HALT,
2368 .clkr = {
2369 .enable_reg = 0x4e03c,
2370 .enable_mask = BIT(0),
2371 .hw.init = &(struct clk_init_data) {
2372 .name = "gcc_camss_csi0_clk",
2373 .parent_hws = (const struct clk_hw*[]){
2374 &csi0_clk_src.clkr.hw,
2375 },
2376 .num_parents = 1,
2377 .ops = &clk_branch2_ops,
2378 .flags = CLK_SET_RATE_PARENT,
2379 }
2380 }
2381 };
2382
2383 static struct clk_branch gcc_camss_csi1_clk = {
2384 .halt_reg = 0x4f03c,
2385 .halt_check = BRANCH_HALT,
2386 .clkr = {
2387 .enable_reg = 0x4f03c,
2388 .enable_mask = BIT(0),
2389 .hw.init = &(struct clk_init_data) {
2390 .name = "gcc_camss_csi1_clk",
2391 .parent_hws = (const struct clk_hw*[]){
2392 &csi1_clk_src.clkr.hw,
2393 },
2394 .num_parents = 1,
2395 .ops = &clk_branch2_ops,
2396 .flags = CLK_SET_RATE_PARENT,
2397 }
2398 }
2399 };
2400
2401 static struct clk_branch gcc_camss_csi2_clk = {
2402 .halt_reg = 0x3c03c,
2403 .halt_check = BRANCH_HALT,
2404 .clkr = {
2405 .enable_reg = 0x3c03c,
2406 .enable_mask = BIT(0),
2407 .hw.init = &(struct clk_init_data) {
2408 .name = "gcc_camss_csi2_clk",
2409 .parent_hws = (const struct clk_hw*[]){
2410 &csi2_clk_src.clkr.hw,
2411 },
2412 .num_parents = 1,
2413 .ops = &clk_branch2_ops,
2414 .flags = CLK_SET_RATE_PARENT,
2415 }
2416 }
2417 };
2418
2419 static struct clk_branch gcc_camss_csi0_csiphy_3p_clk = {
2420 .halt_reg = 0x58090,
2421 .halt_check = BRANCH_HALT,
2422 .clkr = {
2423 .enable_reg = 0x58090,
2424 .enable_mask = BIT(0),
2425 .hw.init = &(struct clk_init_data) {
2426 .name = "gcc_camss_csi0_csiphy_3p_clk",
2427 .parent_hws = (const struct clk_hw*[]){
2428 &csi0p_clk_src.clkr.hw,
2429 },
2430 .num_parents = 1,
2431 .ops = &clk_branch2_ops,
2432 .flags = CLK_SET_RATE_PARENT,
2433 }
2434 }
2435 };
2436
2437 static struct clk_branch gcc_camss_csi1_csiphy_3p_clk = {
2438 .halt_reg = 0x580a0,
2439 .halt_check = BRANCH_HALT,
2440 .clkr = {
2441 .enable_reg = 0x580a0,
2442 .enable_mask = BIT(0),
2443 .hw.init = &(struct clk_init_data) {
2444 .name = "gcc_camss_csi1_csiphy_3p_clk",
2445 .parent_hws = (const struct clk_hw*[]){
2446 &csi1p_clk_src.clkr.hw,
2447 },
2448 .num_parents = 1,
2449 .ops = &clk_branch2_ops,
2450 .flags = CLK_SET_RATE_PARENT,
2451 }
2452 }
2453 };
2454
2455 static struct clk_branch gcc_camss_csi2_csiphy_3p_clk = {
2456 .halt_reg = 0x580b0,
2457 .halt_check = BRANCH_HALT,
2458 .clkr = {
2459 .enable_reg = 0x580b0,
2460 .enable_mask = BIT(0),
2461 .hw.init = &(struct clk_init_data) {
2462 .name = "gcc_camss_csi2_csiphy_3p_clk",
2463 .parent_hws = (const struct clk_hw*[]){
2464 &csi2p_clk_src.clkr.hw,
2465 },
2466 .num_parents = 1,
2467 .ops = &clk_branch2_ops,
2468 .flags = CLK_SET_RATE_PARENT,
2469 }
2470 }
2471 };
2472
2473 static struct clk_branch gcc_camss_csi0phy_clk = {
2474 .halt_reg = 0x4e048,
2475 .halt_check = BRANCH_HALT,
2476 .clkr = {
2477 .enable_reg = 0x4e048,
2478 .enable_mask = BIT(0),
2479 .hw.init = &(struct clk_init_data) {
2480 .name = "gcc_camss_csi0phy_clk",
2481 .parent_hws = (const struct clk_hw*[]){
2482 &csi0_clk_src.clkr.hw,
2483 },
2484 .num_parents = 1,
2485 .ops = &clk_branch2_ops,
2486 .flags = CLK_SET_RATE_PARENT,
2487 }
2488 }
2489 };
2490
2491 static struct clk_branch gcc_camss_csi1phy_clk = {
2492 .halt_reg = 0x4f048,
2493 .halt_check = BRANCH_HALT,
2494 .clkr = {
2495 .enable_reg = 0x4f048,
2496 .enable_mask = BIT(0),
2497 .hw.init = &(struct clk_init_data) {
2498 .name = "gcc_camss_csi1phy_clk",
2499 .parent_hws = (const struct clk_hw*[]){
2500 &csi1_clk_src.clkr.hw,
2501 },
2502 .num_parents = 1,
2503 .ops = &clk_branch2_ops,
2504 .flags = CLK_SET_RATE_PARENT,
2505 }
2506 }
2507 };
2508
2509 static struct clk_branch gcc_camss_csi2phy_clk = {
2510 .halt_reg = 0x3c048,
2511 .halt_check = BRANCH_HALT,
2512 .clkr = {
2513 .enable_reg = 0x3c048,
2514 .enable_mask = BIT(0),
2515 .hw.init = &(struct clk_init_data) {
2516 .name = "gcc_camss_csi2phy_clk",
2517 .parent_hws = (const struct clk_hw*[]){
2518 &csi2_clk_src.clkr.hw,
2519 },
2520 .num_parents = 1,
2521 .ops = &clk_branch2_ops,
2522 .flags = CLK_SET_RATE_PARENT,
2523 }
2524 }
2525 };
2526
2527 static struct clk_branch gcc_camss_csi0phytimer_clk = {
2528 .halt_reg = 0x4e01c,
2529 .halt_check = BRANCH_HALT,
2530 .clkr = {
2531 .enable_reg = 0x4e01c,
2532 .enable_mask = BIT(0),
2533 .hw.init = &(struct clk_init_data) {
2534 .name = "gcc_camss_csi0phytimer_clk",
2535 .parent_hws = (const struct clk_hw*[]){
2536 &csi0phytimer_clk_src.clkr.hw,
2537 },
2538 .num_parents = 1,
2539 .ops = &clk_branch2_ops,
2540 .flags = CLK_SET_RATE_PARENT,
2541 }
2542 }
2543 };
2544
2545 static struct clk_branch gcc_camss_csi1phytimer_clk = {
2546 .halt_reg = 0x4f01c,
2547 .halt_check = BRANCH_HALT,
2548 .clkr = {
2549 .enable_reg = 0x4f01c,
2550 .enable_mask = BIT(0),
2551 .hw.init = &(struct clk_init_data) {
2552 .name = "gcc_camss_csi1phytimer_clk",
2553 .parent_hws = (const struct clk_hw*[]){
2554 &csi1phytimer_clk_src.clkr.hw,
2555 },
2556 .num_parents = 1,
2557 .ops = &clk_branch2_ops,
2558 .flags = CLK_SET_RATE_PARENT,
2559 }
2560 }
2561 };
2562
2563 static struct clk_branch gcc_camss_csi2phytimer_clk = {
2564 .halt_reg = 0x4f068,
2565 .halt_check = BRANCH_HALT,
2566 .clkr = {
2567 .enable_reg = 0x4f068,
2568 .enable_mask = BIT(0),
2569 .hw.init = &(struct clk_init_data) {
2570 .name = "gcc_camss_csi2phytimer_clk",
2571 .parent_hws = (const struct clk_hw*[]){
2572 &csi2phytimer_clk_src.clkr.hw,
2573 },
2574 .num_parents = 1,
2575 .ops = &clk_branch2_ops,
2576 .flags = CLK_SET_RATE_PARENT,
2577 }
2578 }
2579 };
2580
2581 static struct clk_branch gcc_camss_csi0pix_clk = {
2582 .halt_reg = 0x4e058,
2583 .halt_check = BRANCH_HALT,
2584 .clkr = {
2585 .enable_reg = 0x4e058,
2586 .enable_mask = BIT(0),
2587 .hw.init = &(struct clk_init_data) {
2588 .name = "gcc_camss_csi0pix_clk",
2589 .parent_hws = (const struct clk_hw*[]){
2590 &csi0_clk_src.clkr.hw,
2591 },
2592 .num_parents = 1,
2593 .ops = &clk_branch2_ops,
2594 .flags = CLK_SET_RATE_PARENT,
2595 }
2596 }
2597 };
2598
2599 static struct clk_branch gcc_camss_csi1pix_clk = {
2600 .halt_reg = 0x4f058,
2601 .halt_check = BRANCH_HALT,
2602 .clkr = {
2603 .enable_reg = 0x4f058,
2604 .enable_mask = BIT(0),
2605 .hw.init = &(struct clk_init_data) {
2606 .name = "gcc_camss_csi1pix_clk",
2607 .parent_hws = (const struct clk_hw*[]){
2608 &csi1_clk_src.clkr.hw,
2609 },
2610 .num_parents = 1,
2611 .ops = &clk_branch2_ops,
2612 .flags = CLK_SET_RATE_PARENT,
2613 }
2614 }
2615 };
2616
2617 static struct clk_branch gcc_camss_csi2pix_clk = {
2618 .halt_reg = 0x3c058,
2619 .halt_check = BRANCH_HALT,
2620 .clkr = {
2621 .enable_reg = 0x3c058,
2622 .enable_mask = BIT(0),
2623 .hw.init = &(struct clk_init_data) {
2624 .name = "gcc_camss_csi2pix_clk",
2625 .parent_hws = (const struct clk_hw*[]){
2626 &csi2_clk_src.clkr.hw,
2627 },
2628 .num_parents = 1,
2629 .ops = &clk_branch2_ops,
2630 .flags = CLK_SET_RATE_PARENT,
2631 }
2632 }
2633 };
2634
2635 static struct clk_branch gcc_camss_csi0rdi_clk = {
2636 .halt_reg = 0x4e050,
2637 .halt_check = BRANCH_HALT,
2638 .clkr = {
2639 .enable_reg = 0x4e050,
2640 .enable_mask = BIT(0),
2641 .hw.init = &(struct clk_init_data) {
2642 .name = "gcc_camss_csi0rdi_clk",
2643 .parent_hws = (const struct clk_hw*[]){
2644 &csi0_clk_src.clkr.hw,
2645 },
2646 .num_parents = 1,
2647 .ops = &clk_branch2_ops,
2648 .flags = CLK_SET_RATE_PARENT,
2649 }
2650 }
2651 };
2652
2653 static struct clk_branch gcc_camss_csi1rdi_clk = {
2654 .halt_reg = 0x4f050,
2655 .halt_check = BRANCH_HALT,
2656 .clkr = {
2657 .enable_reg = 0x4f050,
2658 .enable_mask = BIT(0),
2659 .hw.init = &(struct clk_init_data) {
2660 .name = "gcc_camss_csi1rdi_clk",
2661 .parent_hws = (const struct clk_hw*[]){
2662 &csi1_clk_src.clkr.hw,
2663 },
2664 .num_parents = 1,
2665 .ops = &clk_branch2_ops,
2666 .flags = CLK_SET_RATE_PARENT,
2667 }
2668 }
2669 };
2670
2671 static struct clk_branch gcc_camss_csi2rdi_clk = {
2672 .halt_reg = 0x3c050,
2673 .halt_check = BRANCH_HALT,
2674 .clkr = {
2675 .enable_reg = 0x3c050,
2676 .enable_mask = BIT(0),
2677 .hw.init = &(struct clk_init_data) {
2678 .name = "gcc_camss_csi2rdi_clk",
2679 .parent_hws = (const struct clk_hw*[]){
2680 &csi2_clk_src.clkr.hw,
2681 },
2682 .num_parents = 1,
2683 .ops = &clk_branch2_ops,
2684 .flags = CLK_SET_RATE_PARENT,
2685 }
2686 }
2687 };
2688
2689 static struct clk_branch gcc_camss_csi_vfe0_clk = {
2690 .halt_reg = 0x58050,
2691 .halt_check = BRANCH_HALT,
2692 .clkr = {
2693 .enable_reg = 0x58050,
2694 .enable_mask = BIT(0),
2695 .hw.init = &(struct clk_init_data) {
2696 .name = "gcc_camss_csi_vfe0_clk",
2697 .parent_hws = (const struct clk_hw*[]){
2698 &vfe0_clk_src.clkr.hw,
2699 },
2700 .num_parents = 1,
2701 .ops = &clk_branch2_ops,
2702 .flags = CLK_SET_RATE_PARENT,
2703 }
2704 }
2705 };
2706
2707 static struct clk_branch gcc_camss_csi_vfe1_clk = {
2708 .halt_reg = 0x58074,
2709 .halt_check = BRANCH_HALT,
2710 .clkr = {
2711 .enable_reg = 0x58074,
2712 .enable_mask = BIT(0),
2713 .hw.init = &(struct clk_init_data) {
2714 .name = "gcc_camss_csi_vfe1_clk",
2715 .parent_hws = (const struct clk_hw*[]){
2716 &vfe1_clk_src.clkr.hw,
2717 },
2718 .num_parents = 1,
2719 .ops = &clk_branch2_ops,
2720 .flags = CLK_SET_RATE_PARENT,
2721 }
2722 }
2723 };
2724
2725 static struct clk_branch gcc_camss_gp0_clk = {
2726 .halt_reg = 0x54018,
2727 .halt_check = BRANCH_HALT,
2728 .clkr = {
2729 .enable_reg = 0x54018,
2730 .enable_mask = BIT(0),
2731 .hw.init = &(struct clk_init_data) {
2732 .name = "gcc_camss_gp0_clk",
2733 .parent_hws = (const struct clk_hw*[]){
2734 &camss_gp0_clk_src.clkr.hw,
2735 },
2736 .num_parents = 1,
2737 .ops = &clk_branch2_ops,
2738 .flags = CLK_SET_RATE_PARENT,
2739 }
2740 }
2741 };
2742
2743 static struct clk_branch gcc_camss_gp1_clk = {
2744 .halt_reg = 0x55018,
2745 .halt_check = BRANCH_HALT,
2746 .clkr = {
2747 .enable_reg = 0x55018,
2748 .enable_mask = BIT(0),
2749 .hw.init = &(struct clk_init_data) {
2750 .name = "gcc_camss_gp1_clk",
2751 .parent_hws = (const struct clk_hw*[]){
2752 &camss_gp1_clk_src.clkr.hw,
2753 },
2754 .num_parents = 1,
2755 .ops = &clk_branch2_ops,
2756 .flags = CLK_SET_RATE_PARENT,
2757 }
2758 }
2759 };
2760
2761 static struct clk_branch gcc_camss_ispif_ahb_clk = {
2762 .halt_reg = 0x50004,
2763 .halt_check = BRANCH_HALT,
2764 .clkr = {
2765 .enable_reg = 0x50004,
2766 .enable_mask = BIT(0),
2767 .hw.init = &(struct clk_init_data) {
2768 .name = "gcc_camss_ispif_ahb_clk",
2769 .parent_hws = (const struct clk_hw*[]){
2770 &camss_top_ahb_clk_src.clkr.hw,
2771 },
2772 .num_parents = 1,
2773 .ops = &clk_branch2_ops,
2774 .flags = CLK_SET_RATE_PARENT,
2775 }
2776 }
2777 };
2778
2779 static struct clk_branch gcc_camss_jpeg0_clk = {
2780 .halt_reg = 0x57020,
2781 .halt_check = BRANCH_HALT,
2782 .clkr = {
2783 .enable_reg = 0x57020,
2784 .enable_mask = BIT(0),
2785 .hw.init = &(struct clk_init_data) {
2786 .name = "gcc_camss_jpeg0_clk",
2787 .parent_hws = (const struct clk_hw*[]){
2788 &jpeg0_clk_src.clkr.hw,
2789 },
2790 .num_parents = 1,
2791 .ops = &clk_branch2_ops,
2792 .flags = CLK_SET_RATE_PARENT,
2793 }
2794 }
2795 };
2796
2797 static struct clk_branch gcc_camss_jpeg_ahb_clk = {
2798 .halt_reg = 0x57024,
2799 .halt_check = BRANCH_HALT,
2800 .clkr = {
2801 .enable_reg = 0x57024,
2802 .enable_mask = BIT(0),
2803 .hw.init = &(struct clk_init_data) {
2804 .name = "gcc_camss_jpeg_ahb_clk",
2805 .parent_hws = (const struct clk_hw*[]){
2806 &camss_top_ahb_clk_src.clkr.hw,
2807 },
2808 .num_parents = 1,
2809 .ops = &clk_branch2_ops,
2810 .flags = CLK_SET_RATE_PARENT,
2811 }
2812 }
2813 };
2814
2815 static struct clk_branch gcc_camss_jpeg_axi_clk = {
2816 .halt_reg = 0x57028,
2817 .halt_check = BRANCH_HALT,
2818 .clkr = {
2819 .enable_reg = 0x57028,
2820 .enable_mask = BIT(0),
2821 .hw.init = &(struct clk_init_data) {
2822 .name = "gcc_camss_jpeg_axi_clk",
2823 .ops = &clk_branch2_ops,
2824 }
2825 }
2826 };
2827
2828 static struct clk_branch gcc_camss_mclk0_clk = {
2829 .halt_reg = 0x52018,
2830 .halt_check = BRANCH_HALT,
2831 .clkr = {
2832 .enable_reg = 0x52018,
2833 .enable_mask = BIT(0),
2834 .hw.init = &(struct clk_init_data) {
2835 .name = "gcc_camss_mclk0_clk",
2836 .parent_hws = (const struct clk_hw*[]){
2837 &mclk0_clk_src.clkr.hw,
2838 },
2839 .num_parents = 1,
2840 .ops = &clk_branch2_ops,
2841 .flags = CLK_SET_RATE_PARENT,
2842 }
2843 }
2844 };
2845
2846 static struct clk_branch gcc_camss_mclk1_clk = {
2847 .halt_reg = 0x53018,
2848 .halt_check = BRANCH_HALT,
2849 .clkr = {
2850 .enable_reg = 0x53018,
2851 .enable_mask = BIT(0),
2852 .hw.init = &(struct clk_init_data) {
2853 .name = "gcc_camss_mclk1_clk",
2854 .parent_hws = (const struct clk_hw*[]){
2855 &mclk1_clk_src.clkr.hw,
2856 },
2857 .num_parents = 1,
2858 .ops = &clk_branch2_ops,
2859 .flags = CLK_SET_RATE_PARENT,
2860 }
2861 }
2862 };
2863
2864 static struct clk_branch gcc_camss_mclk2_clk = {
2865 .halt_reg = 0x5c018,
2866 .halt_check = BRANCH_HALT,
2867 .clkr = {
2868 .enable_reg = 0x5c018,
2869 .enable_mask = BIT(0),
2870 .hw.init = &(struct clk_init_data) {
2871 .name = "gcc_camss_mclk2_clk",
2872 .parent_hws = (const struct clk_hw*[]){
2873 &mclk2_clk_src.clkr.hw,
2874 },
2875 .num_parents = 1,
2876 .ops = &clk_branch2_ops,
2877 .flags = CLK_SET_RATE_PARENT,
2878 }
2879 }
2880 };
2881
2882 static struct clk_branch gcc_camss_mclk3_clk = {
2883 .halt_reg = 0x5e018,
2884 .halt_check = BRANCH_HALT,
2885 .clkr = {
2886 .enable_reg = 0x5e018,
2887 .enable_mask = BIT(0),
2888 .hw.init = &(struct clk_init_data) {
2889 .name = "gcc_camss_mclk3_clk",
2890 .parent_hws = (const struct clk_hw*[]){
2891 &mclk3_clk_src.clkr.hw,
2892 },
2893 .num_parents = 1,
2894 .ops = &clk_branch2_ops,
2895 .flags = CLK_SET_RATE_PARENT,
2896 }
2897 }
2898 };
2899
2900 static struct clk_branch gcc_camss_micro_ahb_clk = {
2901 .halt_reg = 0x5600c,
2902 .halt_check = BRANCH_HALT,
2903 .clkr = {
2904 .enable_reg = 0x5600c,
2905 .enable_mask = BIT(0),
2906 .hw.init = &(struct clk_init_data) {
2907 .name = "gcc_camss_micro_ahb_clk",
2908 .parent_hws = (const struct clk_hw*[]){
2909 &camss_top_ahb_clk_src.clkr.hw,
2910 },
2911 .num_parents = 1,
2912 .ops = &clk_branch2_ops,
2913 .flags = CLK_SET_RATE_PARENT,
2914 }
2915 }
2916 };
2917
2918 static struct clk_branch gcc_camss_top_ahb_clk = {
2919 .halt_reg = 0x5a014,
2920 .halt_check = BRANCH_HALT,
2921 .clkr = {
2922 .enable_reg = 0x5a014,
2923 .enable_mask = BIT(0),
2924 .hw.init = &(struct clk_init_data) {
2925 .name = "gcc_camss_top_ahb_clk",
2926 .parent_hws = (const struct clk_hw*[]){
2927 &camss_top_ahb_clk_src.clkr.hw,
2928 },
2929 .num_parents = 1,
2930 .ops = &clk_branch2_ops,
2931 .flags = CLK_SET_RATE_PARENT,
2932 }
2933 }
2934 };
2935
2936 static struct clk_branch gcc_camss_vfe0_ahb_clk = {
2937 .halt_reg = 0x58044,
2938 .halt_check = BRANCH_HALT,
2939 .clkr = {
2940 .enable_reg = 0x58044,
2941 .enable_mask = BIT(0),
2942 .hw.init = &(struct clk_init_data) {
2943 .name = "gcc_camss_vfe0_ahb_clk",
2944 .parent_hws = (const struct clk_hw*[]){
2945 &camss_top_ahb_clk_src.clkr.hw,
2946 },
2947 .num_parents = 1,
2948 .ops = &clk_branch2_ops,
2949 .flags = CLK_SET_RATE_PARENT,
2950 }
2951 }
2952 };
2953
2954 static struct clk_branch gcc_camss_vfe0_axi_clk = {
2955 .halt_reg = 0x58048,
2956 .halt_check = BRANCH_HALT,
2957 .clkr = {
2958 .enable_reg = 0x58048,
2959 .enable_mask = BIT(0),
2960 .hw.init = &(struct clk_init_data) {
2961 .name = "gcc_camss_vfe0_axi_clk",
2962 .ops = &clk_branch2_ops,
2963 }
2964 }
2965 };
2966
2967 static struct clk_branch gcc_camss_vfe0_clk = {
2968 .halt_reg = 0x58038,
2969 .halt_check = BRANCH_HALT,
2970 .clkr = {
2971 .enable_reg = 0x58038,
2972 .enable_mask = BIT(0),
2973 .hw.init = &(struct clk_init_data) {
2974 .name = "gcc_camss_vfe0_clk",
2975 .parent_hws = (const struct clk_hw*[]){
2976 &vfe0_clk_src.clkr.hw,
2977 },
2978 .num_parents = 1,
2979 .ops = &clk_branch2_ops,
2980 .flags = CLK_SET_RATE_PARENT,
2981 }
2982 }
2983 };
2984
2985 static struct clk_branch gcc_camss_vfe1_ahb_clk = {
2986 .halt_reg = 0x58060,
2987 .halt_check = BRANCH_HALT,
2988 .clkr = {
2989 .enable_reg = 0x58060,
2990 .enable_mask = BIT(0),
2991 .hw.init = &(struct clk_init_data) {
2992 .name = "gcc_camss_vfe1_ahb_clk",
2993 .parent_hws = (const struct clk_hw*[]){
2994 &camss_top_ahb_clk_src.clkr.hw,
2995 },
2996 .num_parents = 1,
2997 .ops = &clk_branch2_ops,
2998 .flags = CLK_SET_RATE_PARENT,
2999 }
3000 }
3001 };
3002
3003 static struct clk_branch gcc_camss_vfe1_axi_clk = {
3004 .halt_reg = 0x58068,
3005 .halt_check = BRANCH_HALT,
3006 .clkr = {
3007 .enable_reg = 0x58068,
3008 .enable_mask = BIT(0),
3009 .hw.init = &(struct clk_init_data) {
3010 .name = "gcc_camss_vfe1_axi_clk",
3011 .ops = &clk_branch2_ops,
3012 }
3013 }
3014 };
3015
3016 static struct clk_branch gcc_camss_vfe1_clk = {
3017 .halt_reg = 0x5805c,
3018 .halt_check = BRANCH_HALT,
3019 .clkr = {
3020 .enable_reg = 0x5805c,
3021 .enable_mask = BIT(0),
3022 .hw.init = &(struct clk_init_data) {
3023 .name = "gcc_camss_vfe1_clk",
3024 .parent_hws = (const struct clk_hw*[]){
3025 &vfe1_clk_src.clkr.hw,
3026 },
3027 .num_parents = 1,
3028 .ops = &clk_branch2_ops,
3029 .flags = CLK_SET_RATE_PARENT,
3030 }
3031 }
3032 };
3033
3034 static struct clk_branch gcc_cpp_tbu_clk = {
3035 .halt_reg = 0x12040,
3036 .halt_check = BRANCH_HALT_VOTED,
3037 .clkr = {
3038 .enable_reg = 0x4500c,
3039 .enable_mask = BIT(14),
3040 .hw.init = &(struct clk_init_data) {
3041 .name = "gcc_cpp_tbu_clk",
3042 .ops = &clk_branch2_ops,
3043 }
3044 }
3045 };
3046
3047 static struct clk_branch gcc_crypto_ahb_clk = {
3048 .halt_reg = 0x16024,
3049 .halt_check = BRANCH_HALT_VOTED,
3050 .clkr = {
3051 .enable_reg = 0x45004,
3052 .enable_mask = BIT(0),
3053 .hw.init = &(struct clk_init_data) {
3054 .name = "gcc_crypto_ahb_clk",
3055 .ops = &clk_branch2_ops,
3056 }
3057 }
3058 };
3059
3060 static struct clk_branch gcc_crypto_axi_clk = {
3061 .halt_reg = 0x16020,
3062 .halt_check = BRANCH_HALT_VOTED,
3063 .clkr = {
3064 .enable_reg = 0x45004,
3065 .enable_mask = BIT(1),
3066 .hw.init = &(struct clk_init_data) {
3067 .name = "gcc_crypto_axi_clk",
3068 .ops = &clk_branch2_ops,
3069 }
3070 }
3071 };
3072
3073 static struct clk_branch gcc_crypto_clk = {
3074 .halt_reg = 0x1601c,
3075 .halt_check = BRANCH_HALT_VOTED,
3076 .clkr = {
3077 .enable_reg = 0x45004,
3078 .enable_mask = BIT(2),
3079 .hw.init = &(struct clk_init_data) {
3080 .name = "gcc_crypto_clk",
3081 .parent_hws = (const struct clk_hw*[]){
3082 &crypto_clk_src.clkr.hw,
3083 },
3084 .num_parents = 1,
3085 .ops = &clk_branch2_ops,
3086 .flags = CLK_SET_RATE_PARENT,
3087 }
3088 }
3089 };
3090
3091 static struct clk_branch gcc_dcc_clk = {
3092 .halt_reg = 0x77004,
3093 .halt_check = BRANCH_HALT,
3094 .clkr = {
3095 .enable_reg = 0x77004,
3096 .enable_mask = BIT(0),
3097 .hw.init = &(struct clk_init_data) {
3098 .name = "gcc_dcc_clk",
3099 .ops = &clk_branch2_ops,
3100 }
3101 }
3102 };
3103
3104 static struct clk_branch gcc_gp1_clk = {
3105 .halt_reg = 0x08000,
3106 .halt_check = BRANCH_HALT,
3107 .clkr = {
3108 .enable_reg = 0x08000,
3109 .enable_mask = BIT(0),
3110 .hw.init = &(struct clk_init_data) {
3111 .name = "gcc_gp1_clk",
3112 .parent_hws = (const struct clk_hw*[]){
3113 &gp1_clk_src.clkr.hw,
3114 },
3115 .num_parents = 1,
3116 .ops = &clk_branch2_ops,
3117 .flags = CLK_SET_RATE_PARENT,
3118 }
3119 }
3120 };
3121
3122 static struct clk_branch gcc_gp2_clk = {
3123 .halt_reg = 0x09000,
3124 .halt_check = BRANCH_HALT,
3125 .clkr = {
3126 .enable_reg = 0x09000,
3127 .enable_mask = BIT(0),
3128 .hw.init = &(struct clk_init_data) {
3129 .name = "gcc_gp2_clk",
3130 .parent_hws = (const struct clk_hw*[]){
3131 &gp2_clk_src.clkr.hw,
3132 },
3133 .num_parents = 1,
3134 .ops = &clk_branch2_ops,
3135 .flags = CLK_SET_RATE_PARENT,
3136 }
3137 }
3138 };
3139
3140 static struct clk_branch gcc_gp3_clk = {
3141 .halt_reg = 0x0a000,
3142 .halt_check = BRANCH_HALT,
3143 .clkr = {
3144 .enable_reg = 0x0a000,
3145 .enable_mask = BIT(0),
3146 .hw.init = &(struct clk_init_data) {
3147 .name = "gcc_gp3_clk",
3148 .parent_hws = (const struct clk_hw*[]){
3149 &gp3_clk_src.clkr.hw,
3150 },
3151 .num_parents = 1,
3152 .ops = &clk_branch2_ops,
3153 .flags = CLK_SET_RATE_PARENT,
3154 }
3155 }
3156 };
3157
3158 static struct clk_branch gcc_jpeg_tbu_clk = {
3159 .halt_reg = 0x12034,
3160 .halt_check = BRANCH_HALT_VOTED,
3161 .clkr = {
3162 .enable_reg = 0x4500c,
3163 .enable_mask = BIT(10),
3164 .hw.init = &(struct clk_init_data) {
3165 .name = "gcc_jpeg_tbu_clk",
3166 .ops = &clk_branch2_ops,
3167 }
3168 }
3169 };
3170
3171 static struct clk_branch gcc_mdp_tbu_clk = {
3172 .halt_reg = 0x1201c,
3173 .halt_check = BRANCH_HALT_VOTED,
3174 .clkr = {
3175 .enable_reg = 0x4500c,
3176 .enable_mask = BIT(4),
3177 .hw.init = &(struct clk_init_data) {
3178 .name = "gcc_mdp_tbu_clk",
3179 .ops = &clk_branch2_ops,
3180 }
3181 }
3182 };
3183
3184 static struct clk_branch gcc_mdss_ahb_clk = {
3185 .halt_reg = 0x4d07c,
3186 .halt_check = BRANCH_HALT,
3187 .clkr = {
3188 .enable_reg = 0x4d07c,
3189 .enable_mask = BIT(0),
3190 .hw.init = &(struct clk_init_data) {
3191 .name = "gcc_mdss_ahb_clk",
3192 .ops = &clk_branch2_ops,
3193 }
3194 }
3195 };
3196
3197 static struct clk_branch gcc_mdss_axi_clk = {
3198 .halt_reg = 0x4d080,
3199 .halt_check = BRANCH_HALT,
3200 .clkr = {
3201 .enable_reg = 0x4d080,
3202 .enable_mask = BIT(0),
3203 .hw.init = &(struct clk_init_data) {
3204 .name = "gcc_mdss_axi_clk",
3205 .ops = &clk_branch2_ops,
3206 }
3207 }
3208 };
3209
3210 static struct clk_branch gcc_mdss_byte0_clk = {
3211 .halt_reg = 0x4d094,
3212 .halt_check = BRANCH_HALT,
3213 .clkr = {
3214 .enable_reg = 0x4d094,
3215 .enable_mask = BIT(0),
3216 .hw.init = &(struct clk_init_data) {
3217 .name = "gcc_mdss_byte0_clk",
3218 .parent_hws = (const struct clk_hw*[]){
3219 &byte0_clk_src.clkr.hw,
3220 },
3221 .num_parents = 1,
3222 .ops = &clk_branch2_ops,
3223 .flags = CLK_SET_RATE_PARENT,
3224 }
3225 }
3226 };
3227
3228 static struct clk_branch gcc_mdss_byte1_clk = {
3229 .halt_reg = 0x4d0a0,
3230 .halt_check = BRANCH_HALT,
3231 .clkr = {
3232 .enable_reg = 0x4d0a0,
3233 .enable_mask = BIT(0),
3234 .hw.init = &(struct clk_init_data) {
3235 .name = "gcc_mdss_byte1_clk",
3236 .parent_hws = (const struct clk_hw*[]){
3237 &byte1_clk_src.clkr.hw,
3238 },
3239 .num_parents = 1,
3240 .ops = &clk_branch2_ops,
3241 .flags = CLK_SET_RATE_PARENT,
3242 }
3243 }
3244 };
3245
3246 static struct clk_branch gcc_mdss_esc0_clk = {
3247 .halt_reg = 0x4d098,
3248 .halt_check = BRANCH_HALT,
3249 .clkr = {
3250 .enable_reg = 0x4d098,
3251 .enable_mask = BIT(0),
3252 .hw.init = &(struct clk_init_data) {
3253 .name = "gcc_mdss_esc0_clk",
3254 .parent_hws = (const struct clk_hw*[]){
3255 &esc0_clk_src.clkr.hw,
3256 },
3257 .num_parents = 1,
3258 .ops = &clk_branch2_ops,
3259 .flags = CLK_SET_RATE_PARENT,
3260 }
3261 }
3262 };
3263
3264 static struct clk_branch gcc_mdss_esc1_clk = {
3265 .halt_reg = 0x4d09c,
3266 .halt_check = BRANCH_HALT,
3267 .clkr = {
3268 .enable_reg = 0x4d09c,
3269 .enable_mask = BIT(0),
3270 .hw.init = &(struct clk_init_data) {
3271 .name = "gcc_mdss_esc1_clk",
3272 .parent_hws = (const struct clk_hw*[]){
3273 &esc1_clk_src.clkr.hw,
3274 },
3275 .num_parents = 1,
3276 .ops = &clk_branch2_ops,
3277 .flags = CLK_SET_RATE_PARENT,
3278 }
3279 }
3280 };
3281
3282 static struct clk_branch gcc_mdss_mdp_clk = {
3283 .halt_reg = 0x4d088,
3284 .halt_check = BRANCH_HALT,
3285 .clkr = {
3286 .enable_reg = 0x4d088,
3287 .enable_mask = BIT(0),
3288 .hw.init = &(struct clk_init_data) {
3289 .name = "gcc_mdss_mdp_clk",
3290 .parent_hws = (const struct clk_hw*[]){
3291 &mdp_clk_src.clkr.hw,
3292 },
3293 .num_parents = 1,
3294 .ops = &clk_branch2_ops,
3295 .flags = CLK_SET_RATE_PARENT,
3296 }
3297 }
3298 };
3299
3300 static struct clk_branch gcc_mdss_pclk0_clk = {
3301 .halt_reg = 0x4d084,
3302 .halt_check = BRANCH_HALT,
3303 .clkr = {
3304 .enable_reg = 0x4d084,
3305 .enable_mask = BIT(0),
3306 .hw.init = &(struct clk_init_data) {
3307 .name = "gcc_mdss_pclk0_clk",
3308 .parent_hws = (const struct clk_hw*[]){
3309 &pclk0_clk_src.clkr.hw,
3310 },
3311 .num_parents = 1,
3312 .ops = &clk_branch2_ops,
3313 .flags = CLK_SET_RATE_PARENT,
3314 }
3315 }
3316 };
3317
3318 static struct clk_branch gcc_mdss_pclk1_clk = {
3319 .halt_reg = 0x4d0a4,
3320 .halt_check = BRANCH_HALT,
3321 .clkr = {
3322 .enable_reg = 0x4d0a4,
3323 .enable_mask = BIT(0),
3324 .hw.init = &(struct clk_init_data) {
3325 .name = "gcc_mdss_pclk1_clk",
3326 .parent_hws = (const struct clk_hw*[]){
3327 &pclk1_clk_src.clkr.hw,
3328 },
3329 .num_parents = 1,
3330 .ops = &clk_branch2_ops,
3331 .flags = CLK_SET_RATE_PARENT,
3332 }
3333 }
3334 };
3335
3336 static struct clk_branch gcc_mdss_vsync_clk = {
3337 .halt_reg = 0x4d090,
3338 .halt_check = BRANCH_HALT,
3339 .clkr = {
3340 .enable_reg = 0x4d090,
3341 .enable_mask = BIT(0),
3342 .hw.init = &(struct clk_init_data) {
3343 .name = "gcc_mdss_vsync_clk",
3344 .parent_hws = (const struct clk_hw*[]){
3345 &vsync_clk_src.clkr.hw,
3346 },
3347 .num_parents = 1,
3348 .ops = &clk_branch2_ops,
3349 .flags = CLK_SET_RATE_PARENT,
3350 }
3351 }
3352 };
3353
3354 static struct clk_branch gcc_mss_cfg_ahb_clk = {
3355 .halt_reg = 0x49000,
3356 .halt_check = BRANCH_HALT,
3357 .clkr = {
3358 .enable_reg = 0x49000,
3359 .enable_mask = BIT(0),
3360 .hw.init = &(struct clk_init_data) {
3361 .name = "gcc_mss_cfg_ahb_clk",
3362 .ops = &clk_branch2_ops,
3363 }
3364 }
3365 };
3366
3367 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
3368 .halt_reg = 0x49004,
3369 .halt_check = BRANCH_HALT,
3370 .clkr = {
3371 .enable_reg = 0x49004,
3372 .enable_mask = BIT(0),
3373 .hw.init = &(struct clk_init_data) {
3374 .name = "gcc_mss_q6_bimc_axi_clk",
3375 .ops = &clk_branch2_ops,
3376 }
3377 }
3378 };
3379
3380 static struct clk_branch gcc_oxili_ahb_clk = {
3381 .halt_reg = 0x59028,
3382 .halt_check = BRANCH_HALT,
3383 .clkr = {
3384 .enable_reg = 0x59028,
3385 .enable_mask = BIT(0),
3386 .hw.init = &(struct clk_init_data) {
3387 .name = "gcc_oxili_ahb_clk",
3388 .ops = &clk_branch2_ops,
3389 }
3390 }
3391 };
3392
3393 static struct clk_branch gcc_oxili_aon_clk = {
3394 .halt_reg = 0x59044,
3395 .halt_check = BRANCH_HALT,
3396 .clkr = {
3397 .enable_reg = 0x59044,
3398 .enable_mask = BIT(0),
3399 .hw.init = &(struct clk_init_data) {
3400 .name = "gcc_oxili_aon_clk",
3401 .parent_hws = (const struct clk_hw*[]){
3402 &gfx3d_clk_src.clkr.hw,
3403 },
3404 .num_parents = 1,
3405 .ops = &clk_branch2_ops,
3406 }
3407 }
3408 };
3409
3410 static struct clk_branch gcc_oxili_gfx3d_clk = {
3411 .halt_reg = 0x59020,
3412 .halt_check = BRANCH_HALT,
3413 .clkr = {
3414 .enable_reg = 0x59020,
3415 .enable_mask = BIT(0),
3416 .hw.init = &(struct clk_init_data) {
3417 .name = "gcc_oxili_gfx3d_clk",
3418 .parent_hws = (const struct clk_hw*[]){
3419 &gfx3d_clk_src.clkr.hw,
3420 },
3421 .num_parents = 1,
3422 .ops = &clk_branch2_ops,
3423 .flags = CLK_SET_RATE_PARENT,
3424 }
3425 }
3426 };
3427
3428 static struct clk_branch gcc_oxili_timer_clk = {
3429 .halt_reg = 0x59040,
3430 .halt_check = BRANCH_HALT,
3431 .clkr = {
3432 .enable_reg = 0x59040,
3433 .enable_mask = BIT(0),
3434 .hw.init = &(struct clk_init_data) {
3435 .name = "gcc_oxili_timer_clk",
3436 .ops = &clk_branch2_ops,
3437 }
3438 }
3439 };
3440
3441 static struct clk_branch gcc_pcnoc_usb3_axi_clk = {
3442 .halt_reg = 0x3f038,
3443 .halt_check = BRANCH_HALT,
3444 .clkr = {
3445 .enable_reg = 0x3f038,
3446 .enable_mask = BIT(0),
3447 .hw.init = &(struct clk_init_data) {
3448 .name = "gcc_pcnoc_usb3_axi_clk",
3449 .parent_hws = (const struct clk_hw*[]){
3450 &usb30_master_clk_src.clkr.hw,
3451 },
3452 .num_parents = 1,
3453 .ops = &clk_branch2_ops,
3454 .flags = CLK_SET_RATE_PARENT,
3455 }
3456 }
3457 };
3458
3459 static struct clk_branch gcc_pdm2_clk = {
3460 .halt_reg = 0x4400c,
3461 .halt_check = BRANCH_HALT,
3462 .clkr = {
3463 .enable_reg = 0x4400c,
3464 .enable_mask = BIT(0),
3465 .hw.init = &(struct clk_init_data) {
3466 .name = "gcc_pdm2_clk",
3467 .parent_hws = (const struct clk_hw*[]){
3468 &pdm2_clk_src.clkr.hw,
3469 },
3470 .num_parents = 1,
3471 .ops = &clk_branch2_ops,
3472 .flags = CLK_SET_RATE_PARENT,
3473 }
3474 }
3475 };
3476
3477 static struct clk_branch gcc_pdm_ahb_clk = {
3478 .halt_reg = 0x44004,
3479 .halt_check = BRANCH_HALT,
3480 .clkr = {
3481 .enable_reg = 0x44004,
3482 .enable_mask = BIT(0),
3483 .hw.init = &(struct clk_init_data) {
3484 .name = "gcc_pdm_ahb_clk",
3485 .ops = &clk_branch2_ops,
3486 }
3487 }
3488 };
3489
3490 static struct clk_branch gcc_prng_ahb_clk = {
3491 .halt_reg = 0x13004,
3492 .halt_check = BRANCH_HALT_VOTED,
3493 .clkr = {
3494 .enable_reg = 0x45004,
3495 .enable_mask = BIT(8),
3496 .hw.init = &(struct clk_init_data) {
3497 .name = "gcc_prng_ahb_clk",
3498 .ops = &clk_branch2_ops,
3499 }
3500 }
3501 };
3502
3503 static struct clk_branch gcc_qdss_dap_clk = {
3504 .halt_reg = 0x29084,
3505 .halt_check = BRANCH_HALT_VOTED,
3506 .clkr = {
3507 .enable_reg = 0x45004,
3508 .enable_mask = BIT(11),
3509 .hw.init = &(struct clk_init_data) {
3510 .name = "gcc_qdss_dap_clk",
3511 .ops = &clk_branch2_ops,
3512 }
3513 }
3514 };
3515
3516 static struct clk_branch gcc_qusb_ref_clk = {
3517 .halt_reg = 0,
3518 .halt_check = BRANCH_HALT_SKIP,
3519 .clkr = {
3520 .enable_reg = 0x41030,
3521 .enable_mask = BIT(0),
3522 .hw.init = &(struct clk_init_data) {
3523 .name = "gcc_qusb_ref_clk",
3524 .ops = &clk_branch2_ops,
3525 }
3526 }
3527 };
3528
3529 static struct clk_branch gcc_rbcpr_gfx_clk = {
3530 .halt_reg = 0x3a004,
3531 .halt_check = BRANCH_HALT,
3532 .clkr = {
3533 .enable_reg = 0x3a004,
3534 .enable_mask = BIT(0),
3535 .hw.init = &(struct clk_init_data) {
3536 .name = "gcc_rbcpr_gfx_clk",
3537 .parent_hws = (const struct clk_hw*[]){
3538 &rbcpr_gfx_clk_src.clkr.hw,
3539 },
3540 .num_parents = 1,
3541 .ops = &clk_branch2_ops,
3542 .flags = CLK_SET_RATE_PARENT,
3543 }
3544 }
3545 };
3546
3547 static struct clk_branch gcc_sdcc1_ice_core_clk = {
3548 .halt_reg = 0x5d014,
3549 .halt_check = BRANCH_HALT,
3550 .clkr = {
3551 .enable_reg = 0x5d014,
3552 .enable_mask = BIT(0),
3553 .hw.init = &(struct clk_init_data) {
3554 .name = "gcc_sdcc1_ice_core_clk",
3555 .parent_hws = (const struct clk_hw*[]){
3556 &sdcc1_ice_core_clk_src.clkr.hw,
3557 },
3558 .num_parents = 1,
3559 .ops = &clk_branch2_ops,
3560 .flags = CLK_SET_RATE_PARENT,
3561 }
3562 }
3563 };
3564
3565 static struct clk_branch gcc_sdcc1_ahb_clk = {
3566 .halt_reg = 0x4201c,
3567 .halt_check = BRANCH_HALT,
3568 .clkr = {
3569 .enable_reg = 0x4201c,
3570 .enable_mask = BIT(0),
3571 .hw.init = &(struct clk_init_data) {
3572 .name = "gcc_sdcc1_ahb_clk",
3573 .ops = &clk_branch2_ops,
3574 }
3575 }
3576 };
3577
3578 static struct clk_branch gcc_sdcc2_ahb_clk = {
3579 .halt_reg = 0x4301c,
3580 .halt_check = BRANCH_HALT,
3581 .clkr = {
3582 .enable_reg = 0x4301c,
3583 .enable_mask = BIT(0),
3584 .hw.init = &(struct clk_init_data) {
3585 .name = "gcc_sdcc2_ahb_clk",
3586 .ops = &clk_branch2_ops,
3587 }
3588 }
3589 };
3590
3591 static struct clk_branch gcc_sdcc1_apps_clk = {
3592 .halt_reg = 0x42018,
3593 .halt_check = BRANCH_HALT,
3594 .clkr = {
3595 .enable_reg = 0x42018,
3596 .enable_mask = BIT(0),
3597 .hw.init = &(struct clk_init_data) {
3598 .name = "gcc_sdcc1_apps_clk",
3599 .parent_hws = (const struct clk_hw*[]){
3600 &sdcc1_apps_clk_src.clkr.hw,
3601 },
3602 .num_parents = 1,
3603 .ops = &clk_branch2_ops,
3604 .flags = CLK_SET_RATE_PARENT,
3605 }
3606 }
3607 };
3608
3609 static struct clk_branch gcc_sdcc2_apps_clk = {
3610 .halt_reg = 0x43018,
3611 .halt_check = BRANCH_HALT,
3612 .clkr = {
3613 .enable_reg = 0x43018,
3614 .enable_mask = BIT(0),
3615 .hw.init = &(struct clk_init_data) {
3616 .name = "gcc_sdcc2_apps_clk",
3617 .parent_hws = (const struct clk_hw*[]){
3618 &sdcc2_apps_clk_src.clkr.hw,
3619 },
3620 .num_parents = 1,
3621 .ops = &clk_branch2_ops,
3622 .flags = CLK_SET_RATE_PARENT,
3623 }
3624 }
3625 };
3626
3627 static struct clk_branch gcc_smmu_cfg_clk = {
3628 .halt_reg = 0x12038,
3629 .halt_check = BRANCH_HALT_VOTED,
3630 .clkr = {
3631 .enable_reg = 0x4500c,
3632 .enable_mask = BIT(12),
3633 .hw.init = &(struct clk_init_data) {
3634 .name = "gcc_smmu_cfg_clk",
3635 .ops = &clk_branch2_ops,
3636 }
3637 }
3638 };
3639
3640 static struct clk_branch gcc_usb30_master_clk = {
3641 .halt_reg = 0x3f000,
3642 .halt_check = BRANCH_HALT,
3643 .clkr = {
3644 .enable_reg = 0x3f000,
3645 .enable_mask = BIT(0),
3646 .hw.init = &(struct clk_init_data) {
3647 .name = "gcc_usb30_master_clk",
3648 .parent_hws = (const struct clk_hw*[]){
3649 &usb30_master_clk_src.clkr.hw,
3650 },
3651 .num_parents = 1,
3652 .ops = &clk_branch2_ops,
3653 .flags = CLK_SET_RATE_PARENT,
3654 }
3655 }
3656 };
3657
3658 static struct clk_branch gcc_usb30_mock_utmi_clk = {
3659 .halt_reg = 0x3f008,
3660 .halt_check = BRANCH_HALT,
3661 .clkr = {
3662 .enable_reg = 0x3f008,
3663 .enable_mask = BIT(0),
3664 .hw.init = &(struct clk_init_data) {
3665 .name = "gcc_usb30_mock_utmi_clk",
3666 .parent_hws = (const struct clk_hw*[]){
3667 &usb30_mock_utmi_clk_src.clkr.hw,
3668 },
3669 .num_parents = 1,
3670 .ops = &clk_branch2_ops,
3671 .flags = CLK_SET_RATE_PARENT,
3672 }
3673 }
3674 };
3675
3676 static struct clk_branch gcc_usb30_sleep_clk = {
3677 .halt_reg = 0x3f004,
3678 .halt_check = BRANCH_HALT,
3679 .clkr = {
3680 .enable_reg = 0x3f004,
3681 .enable_mask = BIT(0),
3682 .hw.init = &(struct clk_init_data) {
3683 .name = "gcc_usb30_sleep_clk",
3684 .ops = &clk_branch2_ops,
3685 }
3686 }
3687 };
3688
3689 static struct clk_branch gcc_usb3_aux_clk = {
3690 .halt_reg = 0x3f044,
3691 .halt_check = BRANCH_HALT,
3692 .clkr = {
3693 .enable_reg = 0x3f044,
3694 .enable_mask = BIT(0),
3695 .hw.init = &(struct clk_init_data) {
3696 .name = "gcc_usb3_aux_clk",
3697 .parent_hws = (const struct clk_hw*[]){
3698 &usb3_aux_clk_src.clkr.hw,
3699 },
3700 .num_parents = 1,
3701 .ops = &clk_branch2_ops,
3702 .flags = CLK_SET_RATE_PARENT,
3703 }
3704 }
3705 };
3706
3707 static struct clk_branch gcc_usb3_pipe_clk = {
3708 .halt_reg = 0,
3709 .halt_check = BRANCH_HALT_DELAY,
3710 .clkr = {
3711 .enable_reg = 0x3f040,
3712 .enable_mask = BIT(0),
3713 .hw.init = &(struct clk_init_data) {
3714 .name = "gcc_usb3_pipe_clk",
3715 .ops = &clk_branch2_ops,
3716 }
3717 }
3718 };
3719
3720 static struct clk_branch gcc_usb_phy_cfg_ahb_clk = {
3721 .halt_reg = 0x3f080,
3722 .halt_check = BRANCH_VOTED,
3723 .clkr = {
3724 .enable_reg = 0x3f080,
3725 .enable_mask = BIT(0),
3726 .hw.init = &(struct clk_init_data) {
3727 .name = "gcc_usb_phy_cfg_ahb_clk",
3728 .ops = &clk_branch2_ops,
3729 }
3730 }
3731 };
3732
3733 static struct clk_branch gcc_usb_ss_ref_clk = {
3734 .halt_reg = 0,
3735 .halt_check = BRANCH_HALT_SKIP,
3736 .clkr = {
3737 .enable_reg = 0x3f07c,
3738 .enable_mask = BIT(0),
3739 .hw.init = &(struct clk_init_data) {
3740 .name = "gcc_usb_ss_ref_clk",
3741 .ops = &clk_branch2_ops,
3742 }
3743 }
3744 };
3745
3746 static struct clk_branch gcc_venus0_ahb_clk = {
3747 .halt_reg = 0x4c020,
3748 .halt_check = BRANCH_HALT,
3749 .clkr = {
3750 .enable_reg = 0x4c020,
3751 .enable_mask = BIT(0),
3752 .hw.init = &(struct clk_init_data) {
3753 .name = "gcc_venus0_ahb_clk",
3754 .ops = &clk_branch2_ops,
3755 }
3756 }
3757 };
3758
3759 static struct clk_branch gcc_venus0_axi_clk = {
3760 .halt_reg = 0x4c024,
3761 .halt_check = BRANCH_HALT,
3762 .clkr = {
3763 .enable_reg = 0x4c024,
3764 .enable_mask = BIT(0),
3765 .hw.init = &(struct clk_init_data) {
3766 .name = "gcc_venus0_axi_clk",
3767 .ops = &clk_branch2_ops,
3768 }
3769 }
3770 };
3771
3772 static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
3773 .halt_reg = 0x4c02c,
3774 .halt_check = BRANCH_HALT,
3775 .clkr = {
3776 .enable_reg = 0x4c02c,
3777 .enable_mask = BIT(0),
3778 .hw.init = &(struct clk_init_data) {
3779 .name = "gcc_venus0_core0_vcodec0_clk",
3780 .parent_hws = (const struct clk_hw*[]){
3781 &vcodec0_clk_src.clkr.hw,
3782 },
3783 .num_parents = 1,
3784 .ops = &clk_branch2_ops,
3785 .flags = CLK_SET_RATE_PARENT,
3786 }
3787 }
3788 };
3789
3790 static struct clk_branch gcc_venus0_vcodec0_clk = {
3791 .halt_reg = 0x4c01c,
3792 .halt_check = BRANCH_HALT,
3793 .clkr = {
3794 .enable_reg = 0x4c01c,
3795 .enable_mask = BIT(0),
3796 .hw.init = &(struct clk_init_data) {
3797 .name = "gcc_venus0_vcodec0_clk",
3798 .parent_hws = (const struct clk_hw*[]){
3799 &vcodec0_clk_src.clkr.hw,
3800 },
3801 .num_parents = 1,
3802 .ops = &clk_branch2_ops,
3803 .flags = CLK_SET_RATE_PARENT,
3804 }
3805 }
3806 };
3807
3808 static struct clk_branch gcc_venus_tbu_clk = {
3809 .halt_reg = 0x12014,
3810 .halt_check = BRANCH_HALT_VOTED,
3811 .clkr = {
3812 .enable_reg = 0x4500c,
3813 .enable_mask = BIT(5),
3814 .hw.init = &(struct clk_init_data) {
3815 .name = "gcc_venus_tbu_clk",
3816 .ops = &clk_branch2_ops,
3817 }
3818 }
3819 };
3820
3821 static struct clk_branch gcc_vfe1_tbu_clk = {
3822 .halt_reg = 0x12090,
3823 .halt_check = BRANCH_HALT_VOTED,
3824 .clkr = {
3825 .enable_reg = 0x4500c,
3826 .enable_mask = BIT(17),
3827 .hw.init = &(struct clk_init_data) {
3828 .name = "gcc_vfe1_tbu_clk",
3829 .ops = &clk_branch2_ops,
3830 }
3831 }
3832 };
3833
3834 static struct clk_branch gcc_vfe_tbu_clk = {
3835 .halt_reg = 0x1203c,
3836 .halt_check = BRANCH_HALT_VOTED,
3837 .clkr = {
3838 .enable_reg = 0x4500c,
3839 .enable_mask = BIT(9),
3840 .hw.init = &(struct clk_init_data) {
3841 .name = "gcc_vfe_tbu_clk",
3842 .ops = &clk_branch2_ops,
3843 }
3844 }
3845 };
3846
3847 static struct gdsc usb30_gdsc = {
3848 .gdscr = 0x3f078,
3849 .pd = {
3850 .name = "usb30_gdsc",
3851 },
3852 .pwrsts = PWRSTS_OFF_ON,
3853
3854
3855
3856
3857 .flags = ALWAYS_ON,
3858 };
3859
3860 static struct gdsc venus_gdsc = {
3861 .gdscr = 0x4c018,
3862 .cxcs = (unsigned int []){ 0x4c024, 0x4c01c },
3863 .cxc_count = 2,
3864 .pd = {
3865 .name = "venus_gdsc",
3866 },
3867 .pwrsts = PWRSTS_OFF_ON,
3868 };
3869
3870 static struct gdsc venus_core0_gdsc = {
3871 .gdscr = 0x4c028,
3872 .cxcs = (unsigned int []){ 0x4c02c },
3873 .cxc_count = 1,
3874 .pd = {
3875 .name = "venus_core0",
3876 },
3877 .flags = HW_CTRL,
3878 .pwrsts = PWRSTS_OFF_ON,
3879 };
3880
3881 static struct gdsc mdss_gdsc = {
3882 .gdscr = 0x4d078,
3883 .cxcs = (unsigned int []){ 0x4d080, 0x4d088 },
3884 .cxc_count = 2,
3885 .pd = {
3886 .name = "mdss_gdsc",
3887 },
3888 .pwrsts = PWRSTS_OFF_ON,
3889 };
3890
3891 static struct gdsc jpeg_gdsc = {
3892 .gdscr = 0x5701c,
3893 .cxcs = (unsigned int []){ 0x57020, 0x57028 },
3894 .cxc_count = 2,
3895 .pd = {
3896 .name = "jpeg_gdsc",
3897 },
3898 .pwrsts = PWRSTS_OFF_ON,
3899 };
3900
3901 static struct gdsc vfe0_gdsc = {
3902 .gdscr = 0x58034,
3903 .cxcs = (unsigned int []){ 0x58038, 0x58048, 0x5600c, 0x58050 },
3904 .cxc_count = 4,
3905 .pd = {
3906 .name = "vfe0_gdsc",
3907 },
3908 .pwrsts = PWRSTS_OFF_ON,
3909 };
3910
3911 static struct gdsc vfe1_gdsc = {
3912 .gdscr = 0x5806c,
3913 .cxcs = (unsigned int []){ 0x5805c, 0x58068, 0x5600c, 0x58074 },
3914 .cxc_count = 4,
3915 .pd = {
3916 .name = "vfe1_gdsc",
3917 },
3918 .pwrsts = PWRSTS_OFF_ON,
3919 };
3920
3921 static struct gdsc oxili_gx_gdsc = {
3922 .gdscr = 0x5901c,
3923 .clamp_io_ctrl = 0x5b00c,
3924 .cxcs = (unsigned int []){ 0x59000, 0x59024 },
3925 .cxc_count = 2,
3926 .pd = {
3927 .name = "oxili_gx_gdsc",
3928 },
3929 .pwrsts = PWRSTS_OFF_ON,
3930 .flags = CLAMP_IO,
3931 };
3932
3933 static struct gdsc oxili_cx_gdsc = {
3934 .gdscr = 0x5904c,
3935 .cxcs = (unsigned int []){ 0x59020 },
3936 .cxc_count = 1,
3937 .pd = {
3938 .name = "oxili_cx_gdsc",
3939 },
3940 .pwrsts = PWRSTS_OFF_ON,
3941 };
3942
3943 static struct gdsc cpp_gdsc = {
3944 .gdscr = 0x58078,
3945 .cxcs = (unsigned int []){ 0x5803c, 0x58064 },
3946 .cxc_count = 2,
3947 .pd = {
3948 .name = "cpp_gdsc",
3949 },
3950 .flags = ALWAYS_ON,
3951 .pwrsts = PWRSTS_OFF_ON,
3952 };
3953
3954 static struct clk_hw *gcc_msm8953_hws[] = {
3955 &gpll0_early_div.hw,
3956 &gpll6_early_div.hw,
3957 };
3958
3959 static struct clk_regmap *gcc_msm8953_clocks[] = {
3960 [GPLL0] = &gpll0.clkr,
3961 [GPLL0_EARLY] = &gpll0_early.clkr,
3962 [GPLL2] = &gpll2.clkr,
3963 [GPLL2_EARLY] = &gpll2_early.clkr,
3964 [GPLL3] = &gpll3.clkr,
3965 [GPLL3_EARLY] = &gpll3_early.clkr,
3966 [GPLL4] = &gpll4.clkr,
3967 [GPLL4_EARLY] = &gpll4_early.clkr,
3968 [GPLL6] = &gpll6.clkr,
3969 [GPLL6_EARLY] = &gpll6_early.clkr,
3970 [GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,
3971 [GCC_APSS_AXI_CLK] = &gcc_apss_axi_clk.clkr,
3972 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3973 [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
3974 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3975 [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
3976 [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
3977 [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
3978 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3979 [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
3980 [GCC_APSS_TCU_ASYNC_CLK] = &gcc_apss_tcu_async_clk.clkr,
3981 [GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr,
3982 [GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
3983 [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
3984 [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
3985 [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
3986 [GCC_VFE1_TBU_CLK] = &gcc_vfe1_tbu_clk.clkr,
3987 [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
3988 [CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,
3989 [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3990 [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
3991 [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3992 [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3993 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3994 [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
3995 [CPP_CLK_SRC] = &cpp_clk_src.clkr,
3996 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3997 [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
3998 [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
3999 [APC0_DROOP_DETECTOR_CLK_SRC] = &apc0_droop_detector_clk_src.clkr,
4000 [APC1_DROOP_DETECTOR_CLK_SRC] = &apc1_droop_detector_clk_src.clkr,
4001 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
4002 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
4003 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
4004 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
4005 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
4006 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
4007 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
4008 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
4009 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
4010 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
4011 [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
4012 [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
4013 [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
4014 [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
4015 [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
4016 [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
4017 [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
4018 [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
4019 [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
4020 [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
4021 [CCI_CLK_SRC] = &cci_clk_src.clkr,
4022 [CSI0P_CLK_SRC] = &csi0p_clk_src.clkr,
4023 [CSI1P_CLK_SRC] = &csi1p_clk_src.clkr,
4024 [CSI2P_CLK_SRC] = &csi2p_clk_src.clkr,
4025 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
4026 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
4027 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
4028 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
4029 [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
4030 [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
4031 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
4032 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
4033 [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
4034 [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
4035 [GP1_CLK_SRC] = &gp1_clk_src.clkr,
4036 [GP2_CLK_SRC] = &gp2_clk_src.clkr,
4037 [GP3_CLK_SRC] = &gp3_clk_src.clkr,
4038 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
4039 [RBCPR_GFX_CLK_SRC] = &rbcpr_gfx_clk_src.clkr,
4040 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
4041 [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
4042 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
4043 [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
4044 [USB3_AUX_CLK_SRC] = &usb3_aux_clk_src.clkr,
4045 [GCC_APC0_DROOP_DETECTOR_GPLL0_CLK] = &gcc_apc0_droop_detector_gpll0_clk.clkr,
4046 [GCC_APC1_DROOP_DETECTOR_GPLL0_CLK] = &gcc_apc1_droop_detector_gpll0_clk.clkr,
4047 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
4048 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
4049 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
4050 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
4051 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
4052 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
4053 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
4054 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
4055 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
4056 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
4057 [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
4058 [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
4059 [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
4060 [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
4061 [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
4062 [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
4063 [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
4064 [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
4065 [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
4066 [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
4067 [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
4068 [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
4069 [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
4070 [GCC_CAMSS_CPP_AXI_CLK] = &gcc_camss_cpp_axi_clk.clkr,
4071 [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
4072 [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
4073 [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
4074 [GCC_CAMSS_CSI0_CSIPHY_3P_CLK] = &gcc_camss_csi0_csiphy_3p_clk.clkr,
4075 [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
4076 [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
4077 [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
4078 [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
4079 [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
4080 [GCC_CAMSS_CSI1_CSIPHY_3P_CLK] = &gcc_camss_csi1_csiphy_3p_clk.clkr,
4081 [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
4082 [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
4083 [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
4084 [GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,
4085 [GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,
4086 [GCC_CAMSS_CSI2_CSIPHY_3P_CLK] = &gcc_camss_csi2_csiphy_3p_clk.clkr,
4087 [GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr,
4088 [GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,
4089 [GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,
4090 [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
4091 [GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr,
4092 [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
4093 [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
4094 [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
4095 [GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
4096 [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
4097 [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
4098 [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
4099 [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
4100 [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
4101 [GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,
4102 [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
4103 [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
4104 [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
4105 [GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr,
4106 [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
4107 [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
4108 [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
4109 [GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr,
4110 [GCC_CAMSS_VFE0_AXI_CLK] = &gcc_camss_vfe0_axi_clk.clkr,
4111 [GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr,
4112 [GCC_CAMSS_VFE1_AXI_CLK] = &gcc_camss_vfe1_axi_clk.clkr,
4113 [GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr,
4114 [GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
4115 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
4116 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
4117 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
4118 [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
4119 [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
4120 [GCC_PCNOC_USB3_AXI_CLK] = &gcc_pcnoc_usb3_axi_clk.clkr,
4121 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
4122 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
4123 [GCC_RBCPR_GFX_CLK] = &gcc_rbcpr_gfx_clk.clkr,
4124 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
4125 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
4126 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
4127 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
4128 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
4129 [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
4130 [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
4131 [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
4132 [GCC_USB3_AUX_CLK] = &gcc_usb3_aux_clk.clkr,
4133 [GCC_USB_PHY_CFG_AHB_CLK] = &gcc_usb_phy_cfg_ahb_clk.clkr,
4134 [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
4135 [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
4136 [GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
4137 [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
4138 [GCC_QUSB_REF_CLK] = &gcc_qusb_ref_clk.clkr,
4139 [GCC_USB_SS_REF_CLK] = &gcc_usb_ss_ref_clk.clkr,
4140 [GCC_USB3_PIPE_CLK] = &gcc_usb3_pipe_clk.clkr,
4141 [MDP_CLK_SRC] = &mdp_clk_src.clkr,
4142 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
4143 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
4144 [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
4145 [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
4146 [BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
4147 [ESC1_CLK_SRC] = &esc1_clk_src.clkr,
4148 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
4149 [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
4150 [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
4151 [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
4152 [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
4153 [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
4154 [GCC_MDSS_PCLK1_CLK] = &gcc_mdss_pclk1_clk.clkr,
4155 [GCC_MDSS_BYTE1_CLK] = &gcc_mdss_byte1_clk.clkr,
4156 [GCC_MDSS_ESC1_CLK] = &gcc_mdss_esc1_clk.clkr,
4157 [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
4158 [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
4159 [GCC_OXILI_TIMER_CLK] = &gcc_oxili_timer_clk.clkr,
4160 [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
4161 [GCC_OXILI_AON_CLK] = &gcc_oxili_aon_clk.clkr,
4162 [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
4163 [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
4164 [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
4165 [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
4166 };
4167
4168 static const struct qcom_reset_map gcc_msm8953_resets[] = {
4169 [GCC_CAMSS_MICRO_BCR] = { 0x56008 },
4170 [GCC_MSS_BCR] = { 0x71000 },
4171 [GCC_QUSB2_PHY_BCR] = { 0x4103c },
4172 [GCC_USB3PHY_PHY_BCR] = { 0x3f03c },
4173 [GCC_USB3_PHY_BCR] = { 0x3f034 },
4174 [GCC_USB_30_BCR] = { 0x3f070 },
4175 };
4176
4177 static const struct regmap_config gcc_msm8953_regmap_config = {
4178 .reg_bits = 32,
4179 .reg_stride = 4,
4180 .val_bits = 32,
4181 .max_register = 0x80000,
4182 .fast_io = true,
4183 };
4184
4185 static struct gdsc *gcc_msm8953_gdscs[] = {
4186 [CPP_GDSC] = &cpp_gdsc,
4187 [JPEG_GDSC] = &jpeg_gdsc,
4188 [MDSS_GDSC] = &mdss_gdsc,
4189 [OXILI_CX_GDSC] = &oxili_cx_gdsc,
4190 [OXILI_GX_GDSC] = &oxili_gx_gdsc,
4191 [USB30_GDSC] = &usb30_gdsc,
4192 [VENUS_CORE0_GDSC] = &venus_core0_gdsc,
4193 [VENUS_GDSC] = &venus_gdsc,
4194 [VFE0_GDSC] = &vfe0_gdsc,
4195 [VFE1_GDSC] = &vfe1_gdsc,
4196 };
4197
4198 static const struct qcom_cc_desc gcc_msm8953_desc = {
4199 .config = &gcc_msm8953_regmap_config,
4200 .clks = gcc_msm8953_clocks,
4201 .num_clks = ARRAY_SIZE(gcc_msm8953_clocks),
4202 .resets = gcc_msm8953_resets,
4203 .num_resets = ARRAY_SIZE(gcc_msm8953_resets),
4204 .gdscs = gcc_msm8953_gdscs,
4205 .num_gdscs = ARRAY_SIZE(gcc_msm8953_gdscs),
4206 .clk_hws = gcc_msm8953_hws,
4207 .num_clk_hws = ARRAY_SIZE(gcc_msm8953_hws),
4208 };
4209
4210 static int gcc_msm8953_probe(struct platform_device *pdev)
4211 {
4212 struct regmap *regmap;
4213
4214 regmap = qcom_cc_map(pdev, &gcc_msm8953_desc);
4215 if (IS_ERR(regmap))
4216 return PTR_ERR(regmap);
4217
4218 clk_alpha_pll_configure(&gpll3_early, regmap, &gpll3_early_config);
4219
4220 return qcom_cc_really_probe(pdev, &gcc_msm8953_desc, regmap);
4221 }
4222
4223 static const struct of_device_id gcc_msm8953_match_table[] = {
4224 { .compatible = "qcom,gcc-msm8953" },
4225 {},
4226 };
4227
4228 static struct platform_driver gcc_msm8953_driver = {
4229 .probe = gcc_msm8953_probe,
4230 .driver = {
4231 .name = "gcc-msm8953",
4232 .of_match_table = gcc_msm8953_match_table,
4233 },
4234 };
4235
4236 static int __init gcc_msm8953_init(void)
4237 {
4238 return platform_driver_register(&gcc_msm8953_driver);
4239 }
4240 core_initcall(gcc_msm8953_init);
4241
4242 static void __exit gcc_msm8953_exit(void)
4243 {
4244 platform_driver_unregister(&gcc_msm8953_driver);
4245 }
4246 module_exit(gcc_msm8953_exit);
4247
4248 MODULE_DESCRIPTION("Qualcomm GCC MSM8953 Driver");
4249 MODULE_LICENSE("GPL v2");