3157 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.4 */5 6#include <linux/clk-provider.h>7#include <linux/kernel.h>8#include <linux/platform_device.h>9#include <linux/module.h>10#include <linux/regmap.h>11#include <linux/reset-controller.h>12 13#include <dt-bindings/clock/qcom,mmcc-apq8084.h>14#include <dt-bindings/reset/qcom,mmcc-apq8084.h>15 16#include "common.h"17#include "clk-regmap.h"18#include "clk-pll.h"19#include "clk-rcg.h"20#include "clk-branch.h"21#include "reset.h"22#include "gdsc.h"23 24enum {25 P_XO,26 P_MMPLL0,27 P_EDPLINK,28 P_MMPLL1,29 P_HDMIPLL,30 P_GPLL0,31 P_EDPVCO,32 P_MMPLL4,33 P_DSI0PLL,34 P_DSI0PLL_BYTE,35 P_MMPLL2,36 P_MMPLL3,37 P_GPLL1,38 P_DSI1PLL,39 P_DSI1PLL_BYTE,40 P_MMSLEEP,41};42 43static struct clk_pll mmpll0 = {44 .l_reg = 0x0004,45 .m_reg = 0x0008,46 .n_reg = 0x000c,47 .config_reg = 0x0014,48 .mode_reg = 0x0000,49 .status_reg = 0x001c,50 .status_bit = 17,51 .clkr.hw.init = &(struct clk_init_data){52 .name = "mmpll0",53 .parent_data = (const struct clk_parent_data[]){54 { .fw_name = "xo", .name = "xo_board" },55 },56 .num_parents = 1,57 .ops = &clk_pll_ops,58 },59};60 61static struct clk_regmap mmpll0_vote = {62 .enable_reg = 0x0100,63 .enable_mask = BIT(0),64 .hw.init = &(struct clk_init_data){65 .name = "mmpll0_vote",66 .parent_hws = (const struct clk_hw*[]){67 &mmpll0.clkr.hw68 },69 .num_parents = 1,70 .ops = &clk_pll_vote_ops,71 },72};73 74static struct clk_pll mmpll1 = {75 .l_reg = 0x0044,76 .m_reg = 0x0048,77 .n_reg = 0x004c,78 .config_reg = 0x0050,79 .mode_reg = 0x0040,80 .status_reg = 0x005c,81 .status_bit = 17,82 .clkr.hw.init = &(struct clk_init_data){83 .name = "mmpll1",84 .parent_data = (const struct clk_parent_data[]){85 { .fw_name = "xo", .name = "xo_board" },86 },87 .num_parents = 1,88 .ops = &clk_pll_ops,89 },90};91 92static struct clk_regmap mmpll1_vote = {93 .enable_reg = 0x0100,94 .enable_mask = BIT(1),95 .hw.init = &(struct clk_init_data){96 .name = "mmpll1_vote",97 .parent_hws = (const struct clk_hw*[]){98 &mmpll1.clkr.hw99 },100 .num_parents = 1,101 .ops = &clk_pll_vote_ops,102 },103};104 105static struct clk_pll mmpll2 = {106 .l_reg = 0x4104,107 .m_reg = 0x4108,108 .n_reg = 0x410c,109 .config_reg = 0x4110,110 .mode_reg = 0x4100,111 .status_reg = 0x411c,112 .clkr.hw.init = &(struct clk_init_data){113 .name = "mmpll2",114 .parent_data = (const struct clk_parent_data[]){115 { .fw_name = "xo", .name = "xo_board" },116 },117 .num_parents = 1,118 .ops = &clk_pll_ops,119 },120};121 122static struct clk_pll mmpll3 = {123 .l_reg = 0x0084,124 .m_reg = 0x0088,125 .n_reg = 0x008c,126 .config_reg = 0x0090,127 .mode_reg = 0x0080,128 .status_reg = 0x009c,129 .status_bit = 17,130 .clkr.hw.init = &(struct clk_init_data){131 .name = "mmpll3",132 .parent_data = (const struct clk_parent_data[]){133 { .fw_name = "xo", .name = "xo_board" },134 },135 .num_parents = 1,136 .ops = &clk_pll_ops,137 },138};139 140static struct clk_pll mmpll4 = {141 .l_reg = 0x00a4,142 .m_reg = 0x00a8,143 .n_reg = 0x00ac,144 .config_reg = 0x00b0,145 .mode_reg = 0x0080,146 .status_reg = 0x00bc,147 .clkr.hw.init = &(struct clk_init_data){148 .name = "mmpll4",149 .parent_data = (const struct clk_parent_data[]){150 { .fw_name = "xo", .name = "xo_board" },151 },152 .num_parents = 1,153 .ops = &clk_pll_ops,154 },155};156 157static const struct parent_map mmcc_xo_mmpll0_mmpll1_gpll0_map[] = {158 { P_XO, 0 },159 { P_MMPLL0, 1 },160 { P_MMPLL1, 2 },161 { P_GPLL0, 5 }162};163 164static const struct clk_parent_data mmcc_xo_mmpll0_mmpll1_gpll0[] = {165 { .fw_name = "xo", .name = "xo_board" },166 { .hw = &mmpll0_vote.hw },167 { .hw = &mmpll1_vote.hw },168 { .fw_name = "mmss_gpll0_vote", .name = "mmss_gpll0_vote" },169};170 171static const struct parent_map mmcc_xo_mmpll0_dsi_hdmi_gpll0_map[] = {172 { P_XO, 0 },173 { P_MMPLL0, 1 },174 { P_HDMIPLL, 4 },175 { P_GPLL0, 5 },176 { P_DSI0PLL, 2 },177 { P_DSI1PLL, 3 }178};179 180static const struct clk_parent_data mmcc_xo_mmpll0_dsi_hdmi_gpll0[] = {181 { .fw_name = "xo", .name = "xo_board" },182 { .hw = &mmpll0_vote.hw },183 { .fw_name = "hdmipll", .name = "hdmipll" },184 { .fw_name = "mmss_gpll0_vote", .name = "mmss_gpll0_vote" },185 { .fw_name = "dsi0pll", .name = "dsi0pll" },186 { .fw_name = "dsi1pll", .name = "dsi1pll" },187};188 189static const struct parent_map mmcc_xo_mmpll0_1_2_gpll0_map[] = {190 { P_XO, 0 },191 { P_MMPLL0, 1 },192 { P_MMPLL1, 2 },193 { P_GPLL0, 5 },194 { P_MMPLL2, 3 }195};196 197static const struct clk_parent_data mmcc_xo_mmpll0_1_2_gpll0[] = {198 { .fw_name = "xo", .name = "xo_board" },199 { .hw = &mmpll0_vote.hw },200 { .hw = &mmpll1_vote.hw },201 { .fw_name = "mmss_gpll0_vote", .name = "mmss_gpll0_vote" },202 { .hw = &mmpll2.clkr.hw },203};204 205static const struct parent_map mmcc_xo_mmpll0_1_3_gpll0_map[] = {206 { P_XO, 0 },207 { P_MMPLL0, 1 },208 { P_MMPLL1, 2 },209 { P_GPLL0, 5 },210 { P_MMPLL3, 3 }211};212 213static const struct clk_parent_data mmcc_xo_mmpll0_1_3_gpll0[] = {214 { .fw_name = "xo", .name = "xo_board" },215 { .hw = &mmpll0_vote.hw },216 { .hw = &mmpll1_vote.hw },217 { .fw_name = "mmss_gpll0_vote", .name = "mmss_gpll0_vote" },218 { .hw = &mmpll3.clkr.hw },219};220 221static const struct parent_map mmcc_xo_dsi_hdmi_edp_map[] = {222 { P_XO, 0 },223 { P_EDPLINK, 4 },224 { P_HDMIPLL, 3 },225 { P_EDPVCO, 5 },226 { P_DSI0PLL, 1 },227 { P_DSI1PLL, 2 }228};229 230static const struct clk_parent_data mmcc_xo_dsi_hdmi_edp[] = {231 { .fw_name = "xo", .name = "xo_board" },232 { .fw_name = "edp_link_clk", .name = "edp_link_clk" },233 { .fw_name = "hdmipll", .name = "hdmipll" },234 { .fw_name = "edp_vco_div", .name = "edp_vco_div" },235 { .fw_name = "dsi0pll", .name = "dsi0pll" },236 { .fw_name = "dsi1pll", .name = "dsi1pll" },237};238 239static const struct parent_map mmcc_xo_dsi_hdmi_edp_gpll0_map[] = {240 { P_XO, 0 },241 { P_EDPLINK, 4 },242 { P_HDMIPLL, 3 },243 { P_GPLL0, 5 },244 { P_DSI0PLL, 1 },245 { P_DSI1PLL, 2 }246};247 248static const struct clk_parent_data mmcc_xo_dsi_hdmi_edp_gpll0[] = {249 { .fw_name = "xo", .name = "xo_board" },250 { .fw_name = "edp_link_clk", .name = "edp_link_clk" },251 { .fw_name = "hdmipll", .name = "hdmipll" },252 { .fw_name = "gpll0_vote", .name = "gpll0_vote" },253 { .fw_name = "dsi0pll", .name = "dsi0pll" },254 { .fw_name = "dsi1pll", .name = "dsi1pll" },255};256 257static const struct parent_map mmcc_xo_dsibyte_hdmi_edp_gpll0_map[] = {258 { P_XO, 0 },259 { P_EDPLINK, 4 },260 { P_HDMIPLL, 3 },261 { P_GPLL0, 5 },262 { P_DSI0PLL_BYTE, 1 },263 { P_DSI1PLL_BYTE, 2 }264};265 266static const struct clk_parent_data mmcc_xo_dsibyte_hdmi_edp_gpll0[] = {267 { .fw_name = "xo", .name = "xo_board" },268 { .fw_name = "edp_link_clk", .name = "edp_link_clk" },269 { .fw_name = "hdmipll", .name = "hdmipll" },270 { .fw_name = "gpll0_vote", .name = "gpll0_vote" },271 { .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" },272 { .fw_name = "dsi1pllbyte", .name = "dsi1pllbyte" },273};274 275static const struct parent_map mmcc_xo_mmpll0_1_4_gpll0_map[] = {276 { P_XO, 0 },277 { P_MMPLL0, 1 },278 { P_MMPLL1, 2 },279 { P_GPLL0, 5 },280 { P_MMPLL4, 3 }281};282 283static const struct clk_parent_data mmcc_xo_mmpll0_1_4_gpll0[] = {284 { .fw_name = "xo", .name = "xo_board" },285 { .hw = &mmpll0.clkr.hw },286 { .hw = &mmpll1.clkr.hw },287 { .hw = &mmpll4.clkr.hw },288 { .fw_name = "gpll0", .name = "gpll0" },289};290 291static const struct parent_map mmcc_xo_mmpll0_1_4_gpll1_0_map[] = {292 { P_XO, 0 },293 { P_MMPLL0, 1 },294 { P_MMPLL1, 2 },295 { P_MMPLL4, 3 },296 { P_GPLL0, 5 },297 { P_GPLL1, 4 }298};299 300static const struct clk_parent_data mmcc_xo_mmpll0_1_4_gpll1_0[] = {301 { .fw_name = "xo", .name = "xo_board" },302 { .hw = &mmpll0.clkr.hw },303 { .hw = &mmpll1.clkr.hw },304 { .hw = &mmpll4.clkr.hw },305 { .fw_name = "gpll1", .name = "gpll1" },306 { .fw_name = "gpll0", .name = "gpll0" },307};308 309static const struct parent_map mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map[] = {310 { P_XO, 0 },311 { P_MMPLL0, 1 },312 { P_MMPLL1, 2 },313 { P_MMPLL4, 3 },314 { P_GPLL0, 5 },315 { P_GPLL1, 4 },316 { P_MMSLEEP, 6 }317};318 319static const struct clk_parent_data mmcc_xo_mmpll0_1_4_gpll1_0_sleep[] = {320 { .fw_name = "xo", .name = "xo_board" },321 { .hw = &mmpll0.clkr.hw },322 { .hw = &mmpll1.clkr.hw },323 { .hw = &mmpll4.clkr.hw },324 { .fw_name = "gpll1", .name = "gpll1" },325 { .fw_name = "gpll0", .name = "gpll0" },326 { .fw_name = "sleep_clk", .name = "sleep_clk" },327};328 329static struct clk_rcg2 mmss_ahb_clk_src = {330 .cmd_rcgr = 0x5000,331 .hid_width = 5,332 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,333 .clkr.hw.init = &(struct clk_init_data){334 .name = "mmss_ahb_clk_src",335 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,336 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),337 .ops = &clk_rcg2_ops,338 },339};340 341static const struct freq_tbl ftbl_mmss_axi_clk[] = {342 F(19200000, P_XO, 1, 0, 0),343 F(37500000, P_GPLL0, 16, 0, 0),344 F(50000000, P_GPLL0, 12, 0, 0),345 F(75000000, P_GPLL0, 8, 0, 0),346 F(100000000, P_GPLL0, 6, 0, 0),347 F(150000000, P_GPLL0, 4, 0, 0),348 F(333430000, P_MMPLL1, 3.5, 0, 0),349 F(400000000, P_MMPLL0, 2, 0, 0),350 F(466800000, P_MMPLL1, 2.5, 0, 0),351 { }352};353 354static struct clk_rcg2 mmss_axi_clk_src = {355 .cmd_rcgr = 0x5040,356 .hid_width = 5,357 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,358 .freq_tbl = ftbl_mmss_axi_clk,359 .clkr.hw.init = &(struct clk_init_data){360 .name = "mmss_axi_clk_src",361 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,362 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),363 .ops = &clk_rcg2_ops,364 },365};366 367static const struct freq_tbl ftbl_ocmemnoc_clk[] = {368 F(19200000, P_XO, 1, 0, 0),369 F(37500000, P_GPLL0, 16, 0, 0),370 F(50000000, P_GPLL0, 12, 0, 0),371 F(75000000, P_GPLL0, 8, 0, 0),372 F(109090000, P_GPLL0, 5.5, 0, 0),373 F(150000000, P_GPLL0, 4, 0, 0),374 F(228570000, P_MMPLL0, 3.5, 0, 0),375 F(320000000, P_MMPLL0, 2.5, 0, 0),376 { }377};378 379static struct clk_rcg2 ocmemnoc_clk_src = {380 .cmd_rcgr = 0x5090,381 .hid_width = 5,382 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,383 .freq_tbl = ftbl_ocmemnoc_clk,384 .clkr.hw.init = &(struct clk_init_data){385 .name = "ocmemnoc_clk_src",386 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,387 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),388 .ops = &clk_rcg2_ops,389 },390};391 392static const struct freq_tbl ftbl_camss_csi0_3_clk[] = {393 F(100000000, P_GPLL0, 6, 0, 0),394 F(200000000, P_MMPLL0, 4, 0, 0),395 { }396};397 398static struct clk_rcg2 csi0_clk_src = {399 .cmd_rcgr = 0x3090,400 .hid_width = 5,401 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,402 .freq_tbl = ftbl_camss_csi0_3_clk,403 .clkr.hw.init = &(struct clk_init_data){404 .name = "csi0_clk_src",405 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,406 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),407 .ops = &clk_rcg2_ops,408 },409};410 411static struct clk_rcg2 csi1_clk_src = {412 .cmd_rcgr = 0x3100,413 .hid_width = 5,414 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,415 .freq_tbl = ftbl_camss_csi0_3_clk,416 .clkr.hw.init = &(struct clk_init_data){417 .name = "csi1_clk_src",418 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,419 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),420 .ops = &clk_rcg2_ops,421 },422};423 424static struct clk_rcg2 csi2_clk_src = {425 .cmd_rcgr = 0x3160,426 .hid_width = 5,427 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,428 .freq_tbl = ftbl_camss_csi0_3_clk,429 .clkr.hw.init = &(struct clk_init_data){430 .name = "csi2_clk_src",431 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,432 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),433 .ops = &clk_rcg2_ops,434 },435};436 437static struct clk_rcg2 csi3_clk_src = {438 .cmd_rcgr = 0x31c0,439 .hid_width = 5,440 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,441 .freq_tbl = ftbl_camss_csi0_3_clk,442 .clkr.hw.init = &(struct clk_init_data){443 .name = "csi3_clk_src",444 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,445 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),446 .ops = &clk_rcg2_ops,447 },448};449 450static const struct freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = {451 F(37500000, P_GPLL0, 16, 0, 0),452 F(50000000, P_GPLL0, 12, 0, 0),453 F(60000000, P_GPLL0, 10, 0, 0),454 F(80000000, P_GPLL0, 7.5, 0, 0),455 F(100000000, P_GPLL0, 6, 0, 0),456 F(109090000, P_GPLL0, 5.5, 0, 0),457 F(133330000, P_GPLL0, 4.5, 0, 0),458 F(200000000, P_GPLL0, 3, 0, 0),459 F(228570000, P_MMPLL0, 3.5, 0, 0),460 F(266670000, P_MMPLL0, 3, 0, 0),461 F(320000000, P_MMPLL0, 2.5, 0, 0),462 F(465000000, P_MMPLL4, 2, 0, 0),463 F(600000000, P_GPLL0, 1, 0, 0),464 { }465};466 467static struct clk_rcg2 vfe0_clk_src = {468 .cmd_rcgr = 0x3600,469 .hid_width = 5,470 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,471 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,472 .clkr.hw.init = &(struct clk_init_data){473 .name = "vfe0_clk_src",474 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,475 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),476 .ops = &clk_rcg2_ops,477 },478};479 480static struct clk_rcg2 vfe1_clk_src = {481 .cmd_rcgr = 0x3620,482 .hid_width = 5,483 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,484 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,485 .clkr.hw.init = &(struct clk_init_data){486 .name = "vfe1_clk_src",487 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,488 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),489 .ops = &clk_rcg2_ops,490 },491};492 493static const struct freq_tbl ftbl_mdss_mdp_clk[] = {494 F(37500000, P_GPLL0, 16, 0, 0),495 F(60000000, P_GPLL0, 10, 0, 0),496 F(75000000, P_GPLL0, 8, 0, 0),497 F(85710000, P_GPLL0, 7, 0, 0),498 F(100000000, P_GPLL0, 6, 0, 0),499 F(150000000, P_GPLL0, 4, 0, 0),500 F(160000000, P_MMPLL0, 5, 0, 0),501 F(200000000, P_MMPLL0, 4, 0, 0),502 F(228570000, P_MMPLL0, 3.5, 0, 0),503 F(300000000, P_GPLL0, 2, 0, 0),504 F(320000000, P_MMPLL0, 2.5, 0, 0),505 { }506};507 508static struct clk_rcg2 mdp_clk_src = {509 .cmd_rcgr = 0x2040,510 .hid_width = 5,511 .parent_map = mmcc_xo_mmpll0_dsi_hdmi_gpll0_map,512 .freq_tbl = ftbl_mdss_mdp_clk,513 .clkr.hw.init = &(struct clk_init_data){514 .name = "mdp_clk_src",515 .parent_data = mmcc_xo_mmpll0_dsi_hdmi_gpll0,516 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_dsi_hdmi_gpll0),517 .ops = &clk_rcg2_ops,518 },519};520 521static struct clk_rcg2 gfx3d_clk_src = {522 .cmd_rcgr = 0x4000,523 .hid_width = 5,524 .parent_map = mmcc_xo_mmpll0_1_2_gpll0_map,525 .clkr.hw.init = &(struct clk_init_data){526 .name = "gfx3d_clk_src",527 .parent_data = mmcc_xo_mmpll0_1_2_gpll0,528 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_2_gpll0),529 .ops = &clk_rcg2_ops,530 },531};532 533static const struct freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = {534 F(75000000, P_GPLL0, 8, 0, 0),535 F(133330000, P_GPLL0, 4.5, 0, 0),536 F(200000000, P_GPLL0, 3, 0, 0),537 F(228570000, P_MMPLL0, 3.5, 0, 0),538 F(266670000, P_MMPLL0, 3, 0, 0),539 F(320000000, P_MMPLL0, 2.5, 0, 0),540 { }541};542 543static struct clk_rcg2 jpeg0_clk_src = {544 .cmd_rcgr = 0x3500,545 .hid_width = 5,546 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,547 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,548 .clkr.hw.init = &(struct clk_init_data){549 .name = "jpeg0_clk_src",550 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,551 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),552 .ops = &clk_rcg2_ops,553 },554};555 556static struct clk_rcg2 jpeg1_clk_src = {557 .cmd_rcgr = 0x3520,558 .hid_width = 5,559 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,560 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,561 .clkr.hw.init = &(struct clk_init_data){562 .name = "jpeg1_clk_src",563 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,564 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),565 .ops = &clk_rcg2_ops,566 },567};568 569static struct clk_rcg2 jpeg2_clk_src = {570 .cmd_rcgr = 0x3540,571 .hid_width = 5,572 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,573 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,574 .clkr.hw.init = &(struct clk_init_data){575 .name = "jpeg2_clk_src",576 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,577 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),578 .ops = &clk_rcg2_ops,579 },580};581 582static struct clk_rcg2 pclk0_clk_src = {583 .cmd_rcgr = 0x2000,584 .mnd_width = 8,585 .hid_width = 5,586 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,587 .clkr.hw.init = &(struct clk_init_data){588 .name = "pclk0_clk_src",589 .parent_data = mmcc_xo_dsi_hdmi_edp_gpll0,590 .num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp_gpll0),591 .ops = &clk_pixel_ops,592 .flags = CLK_SET_RATE_PARENT,593 },594};595 596static struct clk_rcg2 pclk1_clk_src = {597 .cmd_rcgr = 0x2020,598 .mnd_width = 8,599 .hid_width = 5,600 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,601 .clkr.hw.init = &(struct clk_init_data){602 .name = "pclk1_clk_src",603 .parent_data = mmcc_xo_dsi_hdmi_edp_gpll0,604 .num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp_gpll0),605 .ops = &clk_pixel_ops,606 .flags = CLK_SET_RATE_PARENT,607 },608};609 610static const struct freq_tbl ftbl_venus0_vcodec0_clk[] = {611 F(50000000, P_GPLL0, 12, 0, 0),612 F(100000000, P_GPLL0, 6, 0, 0),613 F(133330000, P_GPLL0, 4.5, 0, 0),614 F(200000000, P_MMPLL0, 4, 0, 0),615 F(266670000, P_MMPLL0, 3, 0, 0),616 F(465000000, P_MMPLL3, 2, 0, 0),617 { }618};619 620static struct clk_rcg2 vcodec0_clk_src = {621 .cmd_rcgr = 0x1000,622 .mnd_width = 8,623 .hid_width = 5,624 .parent_map = mmcc_xo_mmpll0_1_3_gpll0_map,625 .freq_tbl = ftbl_venus0_vcodec0_clk,626 .clkr.hw.init = &(struct clk_init_data){627 .name = "vcodec0_clk_src",628 .parent_data = mmcc_xo_mmpll0_1_3_gpll0,629 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_3_gpll0),630 .ops = &clk_rcg2_ops,631 },632};633 634static const struct freq_tbl ftbl_avsync_vp_clk[] = {635 F(150000000, P_GPLL0, 4, 0, 0),636 F(320000000, P_MMPLL0, 2.5, 0, 0),637 { }638};639 640static struct clk_rcg2 vp_clk_src = {641 .cmd_rcgr = 0x2430,642 .hid_width = 5,643 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,644 .freq_tbl = ftbl_avsync_vp_clk,645 .clkr.hw.init = &(struct clk_init_data){646 .name = "vp_clk_src",647 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,648 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),649 .ops = &clk_rcg2_ops,650 },651};652 653static const struct freq_tbl ftbl_camss_cci_cci_clk[] = {654 F(19200000, P_XO, 1, 0, 0),655 { }656};657 658static struct clk_rcg2 cci_clk_src = {659 .cmd_rcgr = 0x3300,660 .mnd_width = 8,661 .hid_width = 5,662 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,663 .freq_tbl = ftbl_camss_cci_cci_clk,664 .clkr.hw.init = &(struct clk_init_data){665 .name = "cci_clk_src",666 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0,667 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0),668 .ops = &clk_rcg2_ops,669 },670};671 672static const struct freq_tbl ftbl_camss_gp0_1_clk[] = {673 F(10000, P_XO, 16, 1, 120),674 F(24000, P_XO, 16, 1, 50),675 F(6000000, P_GPLL0, 10, 1, 10),676 F(12000000, P_GPLL0, 10, 1, 5),677 F(13000000, P_GPLL0, 4, 13, 150),678 F(24000000, P_GPLL0, 5, 1, 5),679 { }680};681 682static struct clk_rcg2 camss_gp0_clk_src = {683 .cmd_rcgr = 0x3420,684 .mnd_width = 8,685 .hid_width = 5,686 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map,687 .freq_tbl = ftbl_camss_gp0_1_clk,688 .clkr.hw.init = &(struct clk_init_data){689 .name = "camss_gp0_clk_src",690 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0_sleep,691 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0_sleep),692 .ops = &clk_rcg2_ops,693 },694};695 696static struct clk_rcg2 camss_gp1_clk_src = {697 .cmd_rcgr = 0x3450,698 .mnd_width = 8,699 .hid_width = 5,700 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map,701 .freq_tbl = ftbl_camss_gp0_1_clk,702 .clkr.hw.init = &(struct clk_init_data){703 .name = "camss_gp1_clk_src",704 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0_sleep,705 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0_sleep),706 .ops = &clk_rcg2_ops,707 },708};709 710static const struct freq_tbl ftbl_camss_mclk0_3_clk[] = {711 F(4800000, P_XO, 4, 0, 0),712 F(6000000, P_GPLL0, 10, 1, 10),713 F(8000000, P_GPLL0, 15, 1, 5),714 F(9600000, P_XO, 2, 0, 0),715 F(16000000, P_MMPLL0, 10, 1, 5),716 F(19200000, P_XO, 1, 0, 0),717 F(24000000, P_GPLL0, 5, 1, 5),718 F(32000000, P_MMPLL0, 5, 1, 5),719 F(48000000, P_GPLL0, 12.5, 0, 0),720 F(64000000, P_MMPLL0, 12.5, 0, 0),721 { }722};723 724static struct clk_rcg2 mclk0_clk_src = {725 .cmd_rcgr = 0x3360,726 .mnd_width = 8,727 .hid_width = 5,728 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,729 .freq_tbl = ftbl_camss_mclk0_3_clk,730 .clkr.hw.init = &(struct clk_init_data){731 .name = "mclk0_clk_src",732 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0,733 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0),734 .ops = &clk_rcg2_ops,735 },736};737 738static struct clk_rcg2 mclk1_clk_src = {739 .cmd_rcgr = 0x3390,740 .mnd_width = 8,741 .hid_width = 5,742 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,743 .freq_tbl = ftbl_camss_mclk0_3_clk,744 .clkr.hw.init = &(struct clk_init_data){745 .name = "mclk1_clk_src",746 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0,747 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0),748 .ops = &clk_rcg2_ops,749 },750};751 752static struct clk_rcg2 mclk2_clk_src = {753 .cmd_rcgr = 0x33c0,754 .mnd_width = 8,755 .hid_width = 5,756 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,757 .freq_tbl = ftbl_camss_mclk0_3_clk,758 .clkr.hw.init = &(struct clk_init_data){759 .name = "mclk2_clk_src",760 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0,761 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0),762 .ops = &clk_rcg2_ops,763 },764};765 766static struct clk_rcg2 mclk3_clk_src = {767 .cmd_rcgr = 0x33f0,768 .mnd_width = 8,769 .hid_width = 5,770 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,771 .freq_tbl = ftbl_camss_mclk0_3_clk,772 .clkr.hw.init = &(struct clk_init_data){773 .name = "mclk3_clk_src",774 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0,775 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0),776 .ops = &clk_rcg2_ops,777 },778};779 780static const struct freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = {781 F(100000000, P_GPLL0, 6, 0, 0),782 F(200000000, P_MMPLL0, 4, 0, 0),783 { }784};785 786static struct clk_rcg2 csi0phytimer_clk_src = {787 .cmd_rcgr = 0x3000,788 .hid_width = 5,789 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,790 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,791 .clkr.hw.init = &(struct clk_init_data){792 .name = "csi0phytimer_clk_src",793 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,794 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),795 .ops = &clk_rcg2_ops,796 },797};798 799static struct clk_rcg2 csi1phytimer_clk_src = {800 .cmd_rcgr = 0x3030,801 .hid_width = 5,802 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,803 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,804 .clkr.hw.init = &(struct clk_init_data){805 .name = "csi1phytimer_clk_src",806 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,807 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),808 .ops = &clk_rcg2_ops,809 },810};811 812static struct clk_rcg2 csi2phytimer_clk_src = {813 .cmd_rcgr = 0x3060,814 .hid_width = 5,815 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,816 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,817 .clkr.hw.init = &(struct clk_init_data){818 .name = "csi2phytimer_clk_src",819 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,820 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),821 .ops = &clk_rcg2_ops,822 },823};824 825static const struct freq_tbl ftbl_camss_vfe_cpp_clk[] = {826 F(133330000, P_GPLL0, 4.5, 0, 0),827 F(266670000, P_MMPLL0, 3, 0, 0),828 F(320000000, P_MMPLL0, 2.5, 0, 0),829 F(372000000, P_MMPLL4, 2.5, 0, 0),830 F(465000000, P_MMPLL4, 2, 0, 0),831 F(600000000, P_GPLL0, 1, 0, 0),832 { }833};834 835static struct clk_rcg2 cpp_clk_src = {836 .cmd_rcgr = 0x3640,837 .hid_width = 5,838 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,839 .freq_tbl = ftbl_camss_vfe_cpp_clk,840 .clkr.hw.init = &(struct clk_init_data){841 .name = "cpp_clk_src",842 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,843 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),844 .ops = &clk_rcg2_ops,845 },846};847 848static struct clk_rcg2 byte0_clk_src = {849 .cmd_rcgr = 0x2120,850 .hid_width = 5,851 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,852 .clkr.hw.init = &(struct clk_init_data){853 .name = "byte0_clk_src",854 .parent_data = mmcc_xo_dsibyte_hdmi_edp_gpll0,855 .num_parents = ARRAY_SIZE(mmcc_xo_dsibyte_hdmi_edp_gpll0),856 .ops = &clk_byte2_ops,857 .flags = CLK_SET_RATE_PARENT,858 },859};860 861static struct clk_rcg2 byte1_clk_src = {862 .cmd_rcgr = 0x2140,863 .hid_width = 5,864 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,865 .clkr.hw.init = &(struct clk_init_data){866 .name = "byte1_clk_src",867 .parent_data = mmcc_xo_dsibyte_hdmi_edp_gpll0,868 .num_parents = ARRAY_SIZE(mmcc_xo_dsibyte_hdmi_edp_gpll0),869 .ops = &clk_byte2_ops,870 .flags = CLK_SET_RATE_PARENT,871 },872};873 874static const struct freq_tbl ftbl_mdss_edpaux_clk[] = {875 F(19200000, P_XO, 1, 0, 0),876 { }877};878 879static struct clk_rcg2 edpaux_clk_src = {880 .cmd_rcgr = 0x20e0,881 .hid_width = 5,882 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,883 .freq_tbl = ftbl_mdss_edpaux_clk,884 .clkr.hw.init = &(struct clk_init_data){885 .name = "edpaux_clk_src",886 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,887 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),888 .ops = &clk_rcg2_ops,889 },890};891 892static const struct freq_tbl ftbl_mdss_edplink_clk[] = {893 F(135000000, P_EDPLINK, 2, 0, 0),894 F(270000000, P_EDPLINK, 11, 0, 0),895 { }896};897 898static struct clk_rcg2 edplink_clk_src = {899 .cmd_rcgr = 0x20c0,900 .hid_width = 5,901 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,902 .freq_tbl = ftbl_mdss_edplink_clk,903 .clkr.hw.init = &(struct clk_init_data){904 .name = "edplink_clk_src",905 .parent_data = mmcc_xo_dsi_hdmi_edp_gpll0,906 .num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp_gpll0),907 .ops = &clk_rcg2_ops,908 .flags = CLK_SET_RATE_PARENT,909 },910};911 912static const struct freq_tbl edp_pixel_freq_tbl[] = {913 { .src = P_EDPVCO },914 { }915};916 917static struct clk_rcg2 edppixel_clk_src = {918 .cmd_rcgr = 0x20a0,919 .mnd_width = 8,920 .hid_width = 5,921 .parent_map = mmcc_xo_dsi_hdmi_edp_map,922 .freq_tbl = edp_pixel_freq_tbl,923 .clkr.hw.init = &(struct clk_init_data){924 .name = "edppixel_clk_src",925 .parent_data = mmcc_xo_dsi_hdmi_edp,926 .num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp),927 .ops = &clk_edp_pixel_ops,928 },929};930 931static const struct freq_tbl ftbl_mdss_esc0_1_clk[] = {932 F(19200000, P_XO, 1, 0, 0),933 { }934};935 936static struct clk_rcg2 esc0_clk_src = {937 .cmd_rcgr = 0x2160,938 .hid_width = 5,939 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,940 .freq_tbl = ftbl_mdss_esc0_1_clk,941 .clkr.hw.init = &(struct clk_init_data){942 .name = "esc0_clk_src",943 .parent_data = mmcc_xo_dsibyte_hdmi_edp_gpll0,944 .num_parents = ARRAY_SIZE(mmcc_xo_dsibyte_hdmi_edp_gpll0),945 .ops = &clk_rcg2_ops,946 },947};948 949static struct clk_rcg2 esc1_clk_src = {950 .cmd_rcgr = 0x2180,951 .hid_width = 5,952 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,953 .freq_tbl = ftbl_mdss_esc0_1_clk,954 .clkr.hw.init = &(struct clk_init_data){955 .name = "esc1_clk_src",956 .parent_data = mmcc_xo_dsibyte_hdmi_edp_gpll0,957 .num_parents = ARRAY_SIZE(mmcc_xo_dsibyte_hdmi_edp_gpll0),958 .ops = &clk_rcg2_ops,959 },960};961 962static const struct freq_tbl extpclk_freq_tbl[] = {963 { .src = P_HDMIPLL },964 { }965};966 967static struct clk_rcg2 extpclk_clk_src = {968 .cmd_rcgr = 0x2060,969 .hid_width = 5,970 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,971 .freq_tbl = extpclk_freq_tbl,972 .clkr.hw.init = &(struct clk_init_data){973 .name = "extpclk_clk_src",974 .parent_data = mmcc_xo_dsi_hdmi_edp_gpll0,975 .num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp_gpll0),976 .ops = &clk_byte_ops,977 .flags = CLK_SET_RATE_PARENT,978 },979};980 981static const struct freq_tbl ftbl_mdss_hdmi_clk[] = {982 F(19200000, P_XO, 1, 0, 0),983 { }984};985 986static struct clk_rcg2 hdmi_clk_src = {987 .cmd_rcgr = 0x2100,988 .hid_width = 5,989 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,990 .freq_tbl = ftbl_mdss_hdmi_clk,991 .clkr.hw.init = &(struct clk_init_data){992 .name = "hdmi_clk_src",993 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,994 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),995 .ops = &clk_rcg2_ops,996 },997};998 999static const struct freq_tbl ftbl_mdss_vsync_clk[] = {1000 F(19200000, P_XO, 1, 0, 0),1001 { }1002};1003 1004static struct clk_rcg2 vsync_clk_src = {1005 .cmd_rcgr = 0x2080,1006 .hid_width = 5,1007 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,1008 .freq_tbl = ftbl_mdss_vsync_clk,1009 .clkr.hw.init = &(struct clk_init_data){1010 .name = "vsync_clk_src",1011 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,1012 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),1013 .ops = &clk_rcg2_ops,1014 },1015};1016 1017static const struct freq_tbl ftbl_mmss_rbcpr_clk[] = {1018 F(50000000, P_GPLL0, 12, 0, 0),1019 { }1020};1021 1022static struct clk_rcg2 rbcpr_clk_src = {1023 .cmd_rcgr = 0x4060,1024 .hid_width = 5,1025 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,1026 .freq_tbl = ftbl_mmss_rbcpr_clk,1027 .clkr.hw.init = &(struct clk_init_data){1028 .name = "rbcpr_clk_src",1029 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,1030 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),1031 .ops = &clk_rcg2_ops,1032 },1033};1034 1035static const struct freq_tbl ftbl_oxili_rbbmtimer_clk[] = {1036 F(19200000, P_XO, 1, 0, 0),1037 { }1038};1039 1040static struct clk_rcg2 rbbmtimer_clk_src = {1041 .cmd_rcgr = 0x4090,1042 .hid_width = 5,1043 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,1044 .freq_tbl = ftbl_oxili_rbbmtimer_clk,1045 .clkr.hw.init = &(struct clk_init_data){1046 .name = "rbbmtimer_clk_src",1047 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,1048 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),1049 .ops = &clk_rcg2_ops,1050 },1051};1052 1053static const struct freq_tbl ftbl_vpu_maple_clk[] = {1054 F(50000000, P_GPLL0, 12, 0, 0),1055 F(100000000, P_GPLL0, 6, 0, 0),1056 F(133330000, P_GPLL0, 4.5, 0, 0),1057 F(200000000, P_MMPLL0, 4, 0, 0),1058 F(266670000, P_MMPLL0, 3, 0, 0),1059 F(465000000, P_MMPLL3, 2, 0, 0),1060 { }1061};1062 1063static struct clk_rcg2 maple_clk_src = {1064 .cmd_rcgr = 0x1320,1065 .hid_width = 5,1066 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,1067 .freq_tbl = ftbl_vpu_maple_clk,1068 .clkr.hw.init = &(struct clk_init_data){1069 .name = "maple_clk_src",1070 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,1071 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),1072 .ops = &clk_rcg2_ops,1073 },1074};1075 1076static const struct freq_tbl ftbl_vpu_vdp_clk[] = {1077 F(50000000, P_GPLL0, 12, 0, 0),1078 F(100000000, P_GPLL0, 6, 0, 0),1079 F(200000000, P_MMPLL0, 4, 0, 0),1080 F(320000000, P_MMPLL0, 2.5, 0, 0),1081 F(400000000, P_MMPLL0, 2, 0, 0),1082 { }1083};1084 1085static struct clk_rcg2 vdp_clk_src = {1086 .cmd_rcgr = 0x1300,1087 .hid_width = 5,1088 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,1089 .freq_tbl = ftbl_vpu_vdp_clk,1090 .clkr.hw.init = &(struct clk_init_data){1091 .name = "vdp_clk_src",1092 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,1093 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),1094 .ops = &clk_rcg2_ops,1095 },1096};1097 1098static const struct freq_tbl ftbl_vpu_bus_clk[] = {1099 F(40000000, P_GPLL0, 15, 0, 0),1100 F(80000000, P_MMPLL0, 10, 0, 0),1101 { }1102};1103 1104static struct clk_rcg2 vpu_bus_clk_src = {1105 .cmd_rcgr = 0x1340,1106 .hid_width = 5,1107 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,1108 .freq_tbl = ftbl_vpu_bus_clk,1109 .clkr.hw.init = &(struct clk_init_data){1110 .name = "vpu_bus_clk_src",1111 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,1112 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),1113 .ops = &clk_rcg2_ops,1114 },1115};1116 1117static struct clk_branch mmss_cxo_clk = {1118 .halt_reg = 0x5104,1119 .clkr = {1120 .enable_reg = 0x5104,1121 .enable_mask = BIT(0),1122 .hw.init = &(struct clk_init_data){1123 .name = "mmss_cxo_clk",1124 .parent_data = (const struct clk_parent_data[]){1125 { .fw_name = "xo", .name = "xo_board" },1126 },1127 .num_parents = 1,1128 .flags = CLK_SET_RATE_PARENT,1129 .ops = &clk_branch2_ops,1130 },1131 },1132};1133 1134static struct clk_branch mmss_sleepclk_clk = {1135 .halt_reg = 0x5100,1136 .clkr = {1137 .enable_reg = 0x5100,1138 .enable_mask = BIT(0),1139 .hw.init = &(struct clk_init_data){1140 .name = "mmss_sleepclk_clk",1141 .parent_data = (const struct clk_parent_data[]){1142 { .fw_name = "sleep_clk", .name = "sleep_clk" },1143 },1144 .num_parents = 1,1145 .flags = CLK_SET_RATE_PARENT,1146 .ops = &clk_branch2_ops,1147 },1148 },1149};1150 1151static struct clk_branch avsync_ahb_clk = {1152 .halt_reg = 0x2414,1153 .clkr = {1154 .enable_reg = 0x2414,1155 .enable_mask = BIT(0),1156 .hw.init = &(struct clk_init_data){1157 .name = "avsync_ahb_clk",1158 .parent_hws = (const struct clk_hw*[]){1159 &mmss_ahb_clk_src.clkr.hw1160 },1161 .num_parents = 1,1162 .flags = CLK_SET_RATE_PARENT,1163 .ops = &clk_branch2_ops,1164 },1165 },1166};1167 1168static struct clk_branch avsync_edppixel_clk = {1169 .halt_reg = 0x2418,1170 .clkr = {1171 .enable_reg = 0x2418,1172 .enable_mask = BIT(0),1173 .hw.init = &(struct clk_init_data){1174 .name = "avsync_edppixel_clk",1175 .parent_hws = (const struct clk_hw*[]){1176 &edppixel_clk_src.clkr.hw1177 },1178 .num_parents = 1,1179 .flags = CLK_SET_RATE_PARENT,1180 .ops = &clk_branch2_ops,1181 },1182 },1183};1184 1185static struct clk_branch avsync_extpclk_clk = {1186 .halt_reg = 0x2410,1187 .clkr = {1188 .enable_reg = 0x2410,1189 .enable_mask = BIT(0),1190 .hw.init = &(struct clk_init_data){1191 .name = "avsync_extpclk_clk",1192 .parent_hws = (const struct clk_hw*[]){1193 &extpclk_clk_src.clkr.hw1194 },1195 .num_parents = 1,1196 .flags = CLK_SET_RATE_PARENT,1197 .ops = &clk_branch2_ops,1198 },1199 },1200};1201 1202static struct clk_branch avsync_pclk0_clk = {1203 .halt_reg = 0x241c,1204 .clkr = {1205 .enable_reg = 0x241c,1206 .enable_mask = BIT(0),1207 .hw.init = &(struct clk_init_data){1208 .name = "avsync_pclk0_clk",1209 .parent_hws = (const struct clk_hw*[]){1210 &pclk0_clk_src.clkr.hw1211 },1212 .num_parents = 1,1213 .flags = CLK_SET_RATE_PARENT,1214 .ops = &clk_branch2_ops,1215 },1216 },1217};1218 1219static struct clk_branch avsync_pclk1_clk = {1220 .halt_reg = 0x2420,1221 .clkr = {1222 .enable_reg = 0x2420,1223 .enable_mask = BIT(0),1224 .hw.init = &(struct clk_init_data){1225 .name = "avsync_pclk1_clk",1226 .parent_hws = (const struct clk_hw*[]){1227 &pclk1_clk_src.clkr.hw1228 },1229 .num_parents = 1,1230 .flags = CLK_SET_RATE_PARENT,1231 .ops = &clk_branch2_ops,1232 },1233 },1234};1235 1236static struct clk_branch avsync_vp_clk = {1237 .halt_reg = 0x2404,1238 .clkr = {1239 .enable_reg = 0x2404,1240 .enable_mask = BIT(0),1241 .hw.init = &(struct clk_init_data){1242 .name = "avsync_vp_clk",1243 .parent_hws = (const struct clk_hw*[]){1244 &vp_clk_src.clkr.hw1245 },1246 .num_parents = 1,1247 .flags = CLK_SET_RATE_PARENT,1248 .ops = &clk_branch2_ops,1249 },1250 },1251};1252 1253static struct clk_branch camss_ahb_clk = {1254 .halt_reg = 0x348c,1255 .clkr = {1256 .enable_reg = 0x348c,1257 .enable_mask = BIT(0),1258 .hw.init = &(struct clk_init_data){1259 .name = "camss_ahb_clk",1260 .parent_hws = (const struct clk_hw*[]){1261 &mmss_ahb_clk_src.clkr.hw1262 },1263 .num_parents = 1,1264 .flags = CLK_SET_RATE_PARENT,1265 .ops = &clk_branch2_ops,1266 },1267 },1268};1269 1270static struct clk_branch camss_cci_cci_ahb_clk = {1271 .halt_reg = 0x3348,1272 .clkr = {1273 .enable_reg = 0x3348,1274 .enable_mask = BIT(0),1275 .hw.init = &(struct clk_init_data){1276 .name = "camss_cci_cci_ahb_clk",1277 .parent_hws = (const struct clk_hw*[]){1278 &mmss_ahb_clk_src.clkr.hw1279 },1280 .num_parents = 1,1281 .ops = &clk_branch2_ops,1282 },1283 },1284};1285 1286static struct clk_branch camss_cci_cci_clk = {1287 .halt_reg = 0x3344,1288 .clkr = {1289 .enable_reg = 0x3344,1290 .enable_mask = BIT(0),1291 .hw.init = &(struct clk_init_data){1292 .name = "camss_cci_cci_clk",1293 .parent_hws = (const struct clk_hw*[]){1294 &cci_clk_src.clkr.hw1295 },1296 .num_parents = 1,1297 .flags = CLK_SET_RATE_PARENT,1298 .ops = &clk_branch2_ops,1299 },1300 },1301};1302 1303static struct clk_branch camss_csi0_ahb_clk = {1304 .halt_reg = 0x30bc,1305 .clkr = {1306 .enable_reg = 0x30bc,1307 .enable_mask = BIT(0),1308 .hw.init = &(struct clk_init_data){1309 .name = "camss_csi0_ahb_clk",1310 .parent_hws = (const struct clk_hw*[]){1311 &mmss_ahb_clk_src.clkr.hw1312 },1313 .num_parents = 1,1314 .ops = &clk_branch2_ops,1315 },1316 },1317};1318 1319static struct clk_branch camss_csi0_clk = {1320 .halt_reg = 0x30b4,1321 .clkr = {1322 .enable_reg = 0x30b4,1323 .enable_mask = BIT(0),1324 .hw.init = &(struct clk_init_data){1325 .name = "camss_csi0_clk",1326 .parent_hws = (const struct clk_hw*[]){1327 &csi0_clk_src.clkr.hw1328 },1329 .num_parents = 1,1330 .flags = CLK_SET_RATE_PARENT,1331 .ops = &clk_branch2_ops,1332 },1333 },1334};1335 1336static struct clk_branch camss_csi0phy_clk = {1337 .halt_reg = 0x30c4,1338 .clkr = {1339 .enable_reg = 0x30c4,1340 .enable_mask = BIT(0),1341 .hw.init = &(struct clk_init_data){1342 .name = "camss_csi0phy_clk",1343 .parent_hws = (const struct clk_hw*[]){1344 &csi0_clk_src.clkr.hw1345 },1346 .num_parents = 1,1347 .flags = CLK_SET_RATE_PARENT,1348 .ops = &clk_branch2_ops,1349 },1350 },1351};1352 1353static struct clk_branch camss_csi0pix_clk = {1354 .halt_reg = 0x30e4,1355 .clkr = {1356 .enable_reg = 0x30e4,1357 .enable_mask = BIT(0),1358 .hw.init = &(struct clk_init_data){1359 .name = "camss_csi0pix_clk",1360 .parent_hws = (const struct clk_hw*[]){1361 &csi0_clk_src.clkr.hw1362 },1363 .num_parents = 1,1364 .flags = CLK_SET_RATE_PARENT,1365 .ops = &clk_branch2_ops,1366 },1367 },1368};1369 1370static struct clk_branch camss_csi0rdi_clk = {1371 .halt_reg = 0x30d4,1372 .clkr = {1373 .enable_reg = 0x30d4,1374 .enable_mask = BIT(0),1375 .hw.init = &(struct clk_init_data){1376 .name = "camss_csi0rdi_clk",1377 .parent_hws = (const struct clk_hw*[]){1378 &csi0_clk_src.clkr.hw1379 },1380 .num_parents = 1,1381 .flags = CLK_SET_RATE_PARENT,1382 .ops = &clk_branch2_ops,1383 },1384 },1385};1386 1387static struct clk_branch camss_csi1_ahb_clk = {1388 .halt_reg = 0x3128,1389 .clkr = {1390 .enable_reg = 0x3128,1391 .enable_mask = BIT(0),1392 .hw.init = &(struct clk_init_data){1393 .name = "camss_csi1_ahb_clk",1394 .parent_hws = (const struct clk_hw*[]){1395 &mmss_ahb_clk_src.clkr.hw1396 },1397 .num_parents = 1,1398 .flags = CLK_SET_RATE_PARENT,1399 .ops = &clk_branch2_ops,1400 },1401 },1402};1403 1404static struct clk_branch camss_csi1_clk = {1405 .halt_reg = 0x3124,1406 .clkr = {1407 .enable_reg = 0x3124,1408 .enable_mask = BIT(0),1409 .hw.init = &(struct clk_init_data){1410 .name = "camss_csi1_clk",1411 .parent_hws = (const struct clk_hw*[]){1412 &csi1_clk_src.clkr.hw1413 },1414 .num_parents = 1,1415 .flags = CLK_SET_RATE_PARENT,1416 .ops = &clk_branch2_ops,1417 },1418 },1419};1420 1421static struct clk_branch camss_csi1phy_clk = {1422 .halt_reg = 0x3134,1423 .clkr = {1424 .enable_reg = 0x3134,1425 .enable_mask = BIT(0),1426 .hw.init = &(struct clk_init_data){1427 .name = "camss_csi1phy_clk",1428 .parent_hws = (const struct clk_hw*[]){1429 &csi1_clk_src.clkr.hw1430 },1431 .num_parents = 1,1432 .flags = CLK_SET_RATE_PARENT,1433 .ops = &clk_branch2_ops,1434 },1435 },1436};1437 1438static struct clk_branch camss_csi1pix_clk = {1439 .halt_reg = 0x3154,1440 .clkr = {1441 .enable_reg = 0x3154,1442 .enable_mask = BIT(0),1443 .hw.init = &(struct clk_init_data){1444 .name = "camss_csi1pix_clk",1445 .parent_hws = (const struct clk_hw*[]){1446 &csi1_clk_src.clkr.hw1447 },1448 .num_parents = 1,1449 .flags = CLK_SET_RATE_PARENT,1450 .ops = &clk_branch2_ops,1451 },1452 },1453};1454 1455static struct clk_branch camss_csi1rdi_clk = {1456 .halt_reg = 0x3144,1457 .clkr = {1458 .enable_reg = 0x3144,1459 .enable_mask = BIT(0),1460 .hw.init = &(struct clk_init_data){1461 .name = "camss_csi1rdi_clk",1462 .parent_hws = (const struct clk_hw*[]){1463 &csi1_clk_src.clkr.hw1464 },1465 .num_parents = 1,1466 .flags = CLK_SET_RATE_PARENT,1467 .ops = &clk_branch2_ops,1468 },1469 },1470};1471 1472static struct clk_branch camss_csi2_ahb_clk = {1473 .halt_reg = 0x3188,1474 .clkr = {1475 .enable_reg = 0x3188,1476 .enable_mask = BIT(0),1477 .hw.init = &(struct clk_init_data){1478 .name = "camss_csi2_ahb_clk",1479 .parent_hws = (const struct clk_hw*[]){1480 &mmss_ahb_clk_src.clkr.hw1481 },1482 .num_parents = 1,1483 .ops = &clk_branch2_ops,1484 },1485 },1486};1487 1488static struct clk_branch camss_csi2_clk = {1489 .halt_reg = 0x3184,1490 .clkr = {1491 .enable_reg = 0x3184,1492 .enable_mask = BIT(0),1493 .hw.init = &(struct clk_init_data){1494 .name = "camss_csi2_clk",1495 .parent_hws = (const struct clk_hw*[]){1496 &csi2_clk_src.clkr.hw1497 },1498 .num_parents = 1,1499 .flags = CLK_SET_RATE_PARENT,1500 .ops = &clk_branch2_ops,1501 },1502 },1503};1504 1505static struct clk_branch camss_csi2phy_clk = {1506 .halt_reg = 0x3194,1507 .clkr = {1508 .enable_reg = 0x3194,1509 .enable_mask = BIT(0),1510 .hw.init = &(struct clk_init_data){1511 .name = "camss_csi2phy_clk",1512 .parent_hws = (const struct clk_hw*[]){1513 &csi2_clk_src.clkr.hw1514 },1515 .num_parents = 1,1516 .flags = CLK_SET_RATE_PARENT,1517 .ops = &clk_branch2_ops,1518 },1519 },1520};1521 1522static struct clk_branch camss_csi2pix_clk = {1523 .halt_reg = 0x31b4,1524 .clkr = {1525 .enable_reg = 0x31b4,1526 .enable_mask = BIT(0),1527 .hw.init = &(struct clk_init_data){1528 .name = "camss_csi2pix_clk",1529 .parent_hws = (const struct clk_hw*[]){1530 &csi2_clk_src.clkr.hw1531 },1532 .num_parents = 1,1533 .flags = CLK_SET_RATE_PARENT,1534 .ops = &clk_branch2_ops,1535 },1536 },1537};1538 1539static struct clk_branch camss_csi2rdi_clk = {1540 .halt_reg = 0x31a4,1541 .clkr = {1542 .enable_reg = 0x31a4,1543 .enable_mask = BIT(0),1544 .hw.init = &(struct clk_init_data){1545 .name = "camss_csi2rdi_clk",1546 .parent_hws = (const struct clk_hw*[]){1547 &csi2_clk_src.clkr.hw1548 },1549 .num_parents = 1,1550 .flags = CLK_SET_RATE_PARENT,1551 .ops = &clk_branch2_ops,1552 },1553 },1554};1555 1556static struct clk_branch camss_csi3_ahb_clk = {1557 .halt_reg = 0x31e8,1558 .clkr = {1559 .enable_reg = 0x31e8,1560 .enable_mask = BIT(0),1561 .hw.init = &(struct clk_init_data){1562 .name = "camss_csi3_ahb_clk",1563 .parent_hws = (const struct clk_hw*[]){1564 &mmss_ahb_clk_src.clkr.hw1565 },1566 .num_parents = 1,1567 .ops = &clk_branch2_ops,1568 },1569 },1570};1571 1572static struct clk_branch camss_csi3_clk = {1573 .halt_reg = 0x31e4,1574 .clkr = {1575 .enable_reg = 0x31e4,1576 .enable_mask = BIT(0),1577 .hw.init = &(struct clk_init_data){1578 .name = "camss_csi3_clk",1579 .parent_hws = (const struct clk_hw*[]){1580 &csi3_clk_src.clkr.hw1581 },1582 .num_parents = 1,1583 .flags = CLK_SET_RATE_PARENT,1584 .ops = &clk_branch2_ops,1585 },1586 },1587};1588 1589static struct clk_branch camss_csi3phy_clk = {1590 .halt_reg = 0x31f4,1591 .clkr = {1592 .enable_reg = 0x31f4,1593 .enable_mask = BIT(0),1594 .hw.init = &(struct clk_init_data){1595 .name = "camss_csi3phy_clk",1596 .parent_hws = (const struct clk_hw*[]){1597 &csi3_clk_src.clkr.hw1598 },1599 .num_parents = 1,1600 .flags = CLK_SET_RATE_PARENT,1601 .ops = &clk_branch2_ops,1602 },1603 },1604};1605 1606static struct clk_branch camss_csi3pix_clk = {1607 .halt_reg = 0x3214,1608 .clkr = {1609 .enable_reg = 0x3214,1610 .enable_mask = BIT(0),1611 .hw.init = &(struct clk_init_data){1612 .name = "camss_csi3pix_clk",1613 .parent_hws = (const struct clk_hw*[]){1614 &csi3_clk_src.clkr.hw1615 },1616 .num_parents = 1,1617 .flags = CLK_SET_RATE_PARENT,1618 .ops = &clk_branch2_ops,1619 },1620 },1621};1622 1623static struct clk_branch camss_csi3rdi_clk = {1624 .halt_reg = 0x3204,1625 .clkr = {1626 .enable_reg = 0x3204,1627 .enable_mask = BIT(0),1628 .hw.init = &(struct clk_init_data){1629 .name = "camss_csi3rdi_clk",1630 .parent_hws = (const struct clk_hw*[]){1631 &csi3_clk_src.clkr.hw1632 },1633 .num_parents = 1,1634 .flags = CLK_SET_RATE_PARENT,1635 .ops = &clk_branch2_ops,1636 },1637 },1638};1639 1640static struct clk_branch camss_csi_vfe0_clk = {1641 .halt_reg = 0x3704,1642 .clkr = {1643 .enable_reg = 0x3704,1644 .enable_mask = BIT(0),1645 .hw.init = &(struct clk_init_data){1646 .name = "camss_csi_vfe0_clk",1647 .parent_hws = (const struct clk_hw*[]){1648 &vfe0_clk_src.clkr.hw1649 },1650 .num_parents = 1,1651 .flags = CLK_SET_RATE_PARENT,1652 .ops = &clk_branch2_ops,1653 },1654 },1655};1656 1657static struct clk_branch camss_csi_vfe1_clk = {1658 .halt_reg = 0x3714,1659 .clkr = {1660 .enable_reg = 0x3714,1661 .enable_mask = BIT(0),1662 .hw.init = &(struct clk_init_data){1663 .name = "camss_csi_vfe1_clk",1664 .parent_hws = (const struct clk_hw*[]){1665 &vfe1_clk_src.clkr.hw1666 },1667 .num_parents = 1,1668 .flags = CLK_SET_RATE_PARENT,1669 .ops = &clk_branch2_ops,1670 },1671 },1672};1673 1674static struct clk_branch camss_gp0_clk = {1675 .halt_reg = 0x3444,1676 .clkr = {1677 .enable_reg = 0x3444,1678 .enable_mask = BIT(0),1679 .hw.init = &(struct clk_init_data){1680 .name = "camss_gp0_clk",1681 .parent_hws = (const struct clk_hw*[]){1682 &camss_gp0_clk_src.clkr.hw1683 },1684 .num_parents = 1,1685 .flags = CLK_SET_RATE_PARENT,1686 .ops = &clk_branch2_ops,1687 },1688 },1689};1690 1691static struct clk_branch camss_gp1_clk = {1692 .halt_reg = 0x3474,1693 .clkr = {1694 .enable_reg = 0x3474,1695 .enable_mask = BIT(0),1696 .hw.init = &(struct clk_init_data){1697 .name = "camss_gp1_clk",1698 .parent_hws = (const struct clk_hw*[]){1699 &camss_gp1_clk_src.clkr.hw1700 },1701 .num_parents = 1,1702 .flags = CLK_SET_RATE_PARENT,1703 .ops = &clk_branch2_ops,1704 },1705 },1706};1707 1708static struct clk_branch camss_ispif_ahb_clk = {1709 .halt_reg = 0x3224,1710 .clkr = {1711 .enable_reg = 0x3224,1712 .enable_mask = BIT(0),1713 .hw.init = &(struct clk_init_data){1714 .name = "camss_ispif_ahb_clk",1715 .parent_hws = (const struct clk_hw*[]){1716 &mmss_ahb_clk_src.clkr.hw1717 },1718 .num_parents = 1,1719 .flags = CLK_SET_RATE_PARENT,1720 .ops = &clk_branch2_ops,1721 },1722 },1723};1724 1725static struct clk_branch camss_jpeg_jpeg0_clk = {1726 .halt_reg = 0x35a8,1727 .clkr = {1728 .enable_reg = 0x35a8,1729 .enable_mask = BIT(0),1730 .hw.init = &(struct clk_init_data){1731 .name = "camss_jpeg_jpeg0_clk",1732 .parent_hws = (const struct clk_hw*[]){1733 &jpeg0_clk_src.clkr.hw1734 },1735 .num_parents = 1,1736 .flags = CLK_SET_RATE_PARENT,1737 .ops = &clk_branch2_ops,1738 },1739 },1740};1741 1742static struct clk_branch camss_jpeg_jpeg1_clk = {1743 .halt_reg = 0x35ac,1744 .clkr = {1745 .enable_reg = 0x35ac,1746 .enable_mask = BIT(0),1747 .hw.init = &(struct clk_init_data){1748 .name = "camss_jpeg_jpeg1_clk",1749 .parent_hws = (const struct clk_hw*[]){1750 &jpeg1_clk_src.clkr.hw1751 },1752 .num_parents = 1,1753 .flags = CLK_SET_RATE_PARENT,1754 .ops = &clk_branch2_ops,1755 },1756 },1757};1758 1759static struct clk_branch camss_jpeg_jpeg2_clk = {1760 .halt_reg = 0x35b0,1761 .clkr = {1762 .enable_reg = 0x35b0,1763 .enable_mask = BIT(0),1764 .hw.init = &(struct clk_init_data){1765 .name = "camss_jpeg_jpeg2_clk",1766 .parent_hws = (const struct clk_hw*[]){1767 &jpeg2_clk_src.clkr.hw1768 },1769 .num_parents = 1,1770 .flags = CLK_SET_RATE_PARENT,1771 .ops = &clk_branch2_ops,1772 },1773 },1774};1775 1776static struct clk_branch camss_jpeg_jpeg_ahb_clk = {1777 .halt_reg = 0x35b4,1778 .clkr = {1779 .enable_reg = 0x35b4,1780 .enable_mask = BIT(0),1781 .hw.init = &(struct clk_init_data){1782 .name = "camss_jpeg_jpeg_ahb_clk",1783 .parent_hws = (const struct clk_hw*[]){1784 &mmss_ahb_clk_src.clkr.hw1785 },1786 .num_parents = 1,1787 .ops = &clk_branch2_ops,1788 },1789 },1790};1791 1792static struct clk_branch camss_jpeg_jpeg_axi_clk = {1793 .halt_reg = 0x35b8,1794 .clkr = {1795 .enable_reg = 0x35b8,1796 .enable_mask = BIT(0),1797 .hw.init = &(struct clk_init_data){1798 .name = "camss_jpeg_jpeg_axi_clk",1799 .parent_hws = (const struct clk_hw*[]){1800 &mmss_axi_clk_src.clkr.hw1801 },1802 .num_parents = 1,1803 .ops = &clk_branch2_ops,1804 },1805 },1806};1807 1808static struct clk_branch camss_mclk0_clk = {1809 .halt_reg = 0x3384,1810 .clkr = {1811 .enable_reg = 0x3384,1812 .enable_mask = BIT(0),1813 .hw.init = &(struct clk_init_data){1814 .name = "camss_mclk0_clk",1815 .parent_hws = (const struct clk_hw*[]){1816 &mclk0_clk_src.clkr.hw1817 },1818 .num_parents = 1,1819 .flags = CLK_SET_RATE_PARENT,1820 .ops = &clk_branch2_ops,1821 },1822 },1823};1824 1825static struct clk_branch camss_mclk1_clk = {1826 .halt_reg = 0x33b4,1827 .clkr = {1828 .enable_reg = 0x33b4,1829 .enable_mask = BIT(0),1830 .hw.init = &(struct clk_init_data){1831 .name = "camss_mclk1_clk",1832 .parent_hws = (const struct clk_hw*[]){1833 &mclk1_clk_src.clkr.hw1834 },1835 .num_parents = 1,1836 .flags = CLK_SET_RATE_PARENT,1837 .ops = &clk_branch2_ops,1838 },1839 },1840};1841 1842static struct clk_branch camss_mclk2_clk = {1843 .halt_reg = 0x33e4,1844 .clkr = {1845 .enable_reg = 0x33e4,1846 .enable_mask = BIT(0),1847 .hw.init = &(struct clk_init_data){1848 .name = "camss_mclk2_clk",1849 .parent_hws = (const struct clk_hw*[]){1850 &mclk2_clk_src.clkr.hw1851 },1852 .num_parents = 1,1853 .flags = CLK_SET_RATE_PARENT,1854 .ops = &clk_branch2_ops,1855 },1856 },1857};1858 1859static struct clk_branch camss_mclk3_clk = {1860 .halt_reg = 0x3414,1861 .clkr = {1862 .enable_reg = 0x3414,1863 .enable_mask = BIT(0),1864 .hw.init = &(struct clk_init_data){1865 .name = "camss_mclk3_clk",1866 .parent_hws = (const struct clk_hw*[]){1867 &mclk3_clk_src.clkr.hw1868 },1869 .num_parents = 1,1870 .flags = CLK_SET_RATE_PARENT,1871 .ops = &clk_branch2_ops,1872 },1873 },1874};1875 1876static struct clk_branch camss_micro_ahb_clk = {1877 .halt_reg = 0x3494,1878 .clkr = {1879 .enable_reg = 0x3494,1880 .enable_mask = BIT(0),1881 .hw.init = &(struct clk_init_data){1882 .name = "camss_micro_ahb_clk",1883 .parent_hws = (const struct clk_hw*[]){1884 &mmss_ahb_clk_src.clkr.hw1885 },1886 .num_parents = 1,1887 .ops = &clk_branch2_ops,1888 },1889 },1890};1891 1892static struct clk_branch camss_phy0_csi0phytimer_clk = {1893 .halt_reg = 0x3024,1894 .clkr = {1895 .enable_reg = 0x3024,1896 .enable_mask = BIT(0),1897 .hw.init = &(struct clk_init_data){1898 .name = "camss_phy0_csi0phytimer_clk",1899 .parent_hws = (const struct clk_hw*[]){1900 &csi0phytimer_clk_src.clkr.hw1901 },1902 .num_parents = 1,1903 .flags = CLK_SET_RATE_PARENT,1904 .ops = &clk_branch2_ops,1905 },1906 },1907};1908 1909static struct clk_branch camss_phy1_csi1phytimer_clk = {1910 .halt_reg = 0x3054,1911 .clkr = {1912 .enable_reg = 0x3054,1913 .enable_mask = BIT(0),1914 .hw.init = &(struct clk_init_data){1915 .name = "camss_phy1_csi1phytimer_clk",1916 .parent_hws = (const struct clk_hw*[]){1917 &csi1phytimer_clk_src.clkr.hw1918 },1919 .num_parents = 1,1920 .flags = CLK_SET_RATE_PARENT,1921 .ops = &clk_branch2_ops,1922 },1923 },1924};1925 1926static struct clk_branch camss_phy2_csi2phytimer_clk = {1927 .halt_reg = 0x3084,1928 .clkr = {1929 .enable_reg = 0x3084,1930 .enable_mask = BIT(0),1931 .hw.init = &(struct clk_init_data){1932 .name = "camss_phy2_csi2phytimer_clk",1933 .parent_hws = (const struct clk_hw*[]){1934 &csi2phytimer_clk_src.clkr.hw1935 },1936 .num_parents = 1,1937 .flags = CLK_SET_RATE_PARENT,1938 .ops = &clk_branch2_ops,1939 },1940 },1941};1942 1943static struct clk_branch camss_top_ahb_clk = {1944 .halt_reg = 0x3484,1945 .clkr = {1946 .enable_reg = 0x3484,1947 .enable_mask = BIT(0),1948 .hw.init = &(struct clk_init_data){1949 .name = "camss_top_ahb_clk",1950 .parent_hws = (const struct clk_hw*[]){1951 &mmss_ahb_clk_src.clkr.hw1952 },1953 .num_parents = 1,1954 .flags = CLK_SET_RATE_PARENT,1955 .ops = &clk_branch2_ops,1956 },1957 },1958};1959 1960static struct clk_branch camss_vfe_cpp_ahb_clk = {1961 .halt_reg = 0x36b4,1962 .clkr = {1963 .enable_reg = 0x36b4,1964 .enable_mask = BIT(0),1965 .hw.init = &(struct clk_init_data){1966 .name = "camss_vfe_cpp_ahb_clk",1967 .parent_hws = (const struct clk_hw*[]){1968 &mmss_ahb_clk_src.clkr.hw1969 },1970 .num_parents = 1,1971 .flags = CLK_SET_RATE_PARENT,1972 .ops = &clk_branch2_ops,1973 },1974 },1975};1976 1977static struct clk_branch camss_vfe_cpp_clk = {1978 .halt_reg = 0x36b0,1979 .clkr = {1980 .enable_reg = 0x36b0,1981 .enable_mask = BIT(0),1982 .hw.init = &(struct clk_init_data){1983 .name = "camss_vfe_cpp_clk",1984 .parent_hws = (const struct clk_hw*[]){1985 &cpp_clk_src.clkr.hw1986 },1987 .num_parents = 1,1988 .flags = CLK_SET_RATE_PARENT,1989 .ops = &clk_branch2_ops,1990 },1991 },1992};1993 1994static struct clk_branch camss_vfe_vfe0_clk = {1995 .halt_reg = 0x36a8,1996 .clkr = {1997 .enable_reg = 0x36a8,1998 .enable_mask = BIT(0),1999 .hw.init = &(struct clk_init_data){2000 .name = "camss_vfe_vfe0_clk",2001 .parent_hws = (const struct clk_hw*[]){2002 &vfe0_clk_src.clkr.hw2003 },2004 .num_parents = 1,2005 .flags = CLK_SET_RATE_PARENT,2006 .ops = &clk_branch2_ops,2007 },2008 },2009};2010 2011static struct clk_branch camss_vfe_vfe1_clk = {2012 .halt_reg = 0x36ac,2013 .clkr = {2014 .enable_reg = 0x36ac,2015 .enable_mask = BIT(0),2016 .hw.init = &(struct clk_init_data){2017 .name = "camss_vfe_vfe1_clk",2018 .parent_hws = (const struct clk_hw*[]){2019 &vfe1_clk_src.clkr.hw2020 },2021 .num_parents = 1,2022 .flags = CLK_SET_RATE_PARENT,2023 .ops = &clk_branch2_ops,2024 },2025 },2026};2027 2028static struct clk_branch camss_vfe_vfe_ahb_clk = {2029 .halt_reg = 0x36b8,2030 .clkr = {2031 .enable_reg = 0x36b8,2032 .enable_mask = BIT(0),2033 .hw.init = &(struct clk_init_data){2034 .name = "camss_vfe_vfe_ahb_clk",2035 .parent_hws = (const struct clk_hw*[]){2036 &mmss_ahb_clk_src.clkr.hw2037 },2038 .num_parents = 1,2039 .flags = CLK_SET_RATE_PARENT,2040 .ops = &clk_branch2_ops,2041 },2042 },2043};2044 2045static struct clk_branch camss_vfe_vfe_axi_clk = {2046 .halt_reg = 0x36bc,2047 .clkr = {2048 .enable_reg = 0x36bc,2049 .enable_mask = BIT(0),2050 .hw.init = &(struct clk_init_data){2051 .name = "camss_vfe_vfe_axi_clk",2052 .parent_hws = (const struct clk_hw*[]){2053 &mmss_axi_clk_src.clkr.hw2054 },2055 .num_parents = 1,2056 .flags = CLK_SET_RATE_PARENT,2057 .ops = &clk_branch2_ops,2058 },2059 },2060};2061 2062static struct clk_branch mdss_ahb_clk = {2063 .halt_reg = 0x2308,2064 .clkr = {2065 .enable_reg = 0x2308,2066 .enable_mask = BIT(0),2067 .hw.init = &(struct clk_init_data){2068 .name = "mdss_ahb_clk",2069 .parent_hws = (const struct clk_hw*[]){2070 &mmss_ahb_clk_src.clkr.hw2071 },2072 .num_parents = 1,2073 .flags = CLK_SET_RATE_PARENT,2074 .ops = &clk_branch2_ops,2075 },2076 },2077};2078 2079static struct clk_branch mdss_axi_clk = {2080 .halt_reg = 0x2310,2081 .clkr = {2082 .enable_reg = 0x2310,2083 .enable_mask = BIT(0),2084 .hw.init = &(struct clk_init_data){2085 .name = "mdss_axi_clk",2086 .parent_hws = (const struct clk_hw*[]){2087 &mmss_axi_clk_src.clkr.hw2088 },2089 .num_parents = 1,2090 .flags = CLK_SET_RATE_PARENT,2091 .ops = &clk_branch2_ops,2092 },2093 },2094};2095 2096static struct clk_branch mdss_byte0_clk = {2097 .halt_reg = 0x233c,2098 .clkr = {2099 .enable_reg = 0x233c,2100 .enable_mask = BIT(0),2101 .hw.init = &(struct clk_init_data){2102 .name = "mdss_byte0_clk",2103 .parent_hws = (const struct clk_hw*[]){2104 &byte0_clk_src.clkr.hw2105 },2106 .num_parents = 1,2107 .flags = CLK_SET_RATE_PARENT,2108 .ops = &clk_branch2_ops,2109 },2110 },2111};2112 2113static struct clk_branch mdss_byte1_clk = {2114 .halt_reg = 0x2340,2115 .clkr = {2116 .enable_reg = 0x2340,2117 .enable_mask = BIT(0),2118 .hw.init = &(struct clk_init_data){2119 .name = "mdss_byte1_clk",2120 .parent_hws = (const struct clk_hw*[]){2121 &byte1_clk_src.clkr.hw2122 },2123 .num_parents = 1,2124 .flags = CLK_SET_RATE_PARENT,2125 .ops = &clk_branch2_ops,2126 },2127 },2128};2129 2130static struct clk_branch mdss_edpaux_clk = {2131 .halt_reg = 0x2334,2132 .clkr = {2133 .enable_reg = 0x2334,2134 .enable_mask = BIT(0),2135 .hw.init = &(struct clk_init_data){2136 .name = "mdss_edpaux_clk",2137 .parent_hws = (const struct clk_hw*[]){2138 &edpaux_clk_src.clkr.hw2139 },2140 .num_parents = 1,2141 .flags = CLK_SET_RATE_PARENT,2142 .ops = &clk_branch2_ops,2143 },2144 },2145};2146 2147static struct clk_branch mdss_edplink_clk = {2148 .halt_reg = 0x2330,2149 .clkr = {2150 .enable_reg = 0x2330,2151 .enable_mask = BIT(0),2152 .hw.init = &(struct clk_init_data){2153 .name = "mdss_edplink_clk",2154 .parent_hws = (const struct clk_hw*[]){2155 &edplink_clk_src.clkr.hw2156 },2157 .num_parents = 1,2158 .flags = CLK_SET_RATE_PARENT,2159 .ops = &clk_branch2_ops,2160 },2161 },2162};2163 2164static struct clk_branch mdss_edppixel_clk = {2165 .halt_reg = 0x232c,2166 .clkr = {2167 .enable_reg = 0x232c,2168 .enable_mask = BIT(0),2169 .hw.init = &(struct clk_init_data){2170 .name = "mdss_edppixel_clk",2171 .parent_hws = (const struct clk_hw*[]){2172 &edppixel_clk_src.clkr.hw2173 },2174 .num_parents = 1,2175 .flags = CLK_SET_RATE_PARENT,2176 .ops = &clk_branch2_ops,2177 },2178 },2179};2180 2181static struct clk_branch mdss_esc0_clk = {2182 .halt_reg = 0x2344,2183 .clkr = {2184 .enable_reg = 0x2344,2185 .enable_mask = BIT(0),2186 .hw.init = &(struct clk_init_data){2187 .name = "mdss_esc0_clk",2188 .parent_hws = (const struct clk_hw*[]){2189 &esc0_clk_src.clkr.hw2190 },2191 .num_parents = 1,2192 .flags = CLK_SET_RATE_PARENT,2193 .ops = &clk_branch2_ops,2194 },2195 },2196};2197 2198static struct clk_branch mdss_esc1_clk = {2199 .halt_reg = 0x2348,2200 .clkr = {2201 .enable_reg = 0x2348,2202 .enable_mask = BIT(0),2203 .hw.init = &(struct clk_init_data){2204 .name = "mdss_esc1_clk",2205 .parent_hws = (const struct clk_hw*[]){2206 &esc1_clk_src.clkr.hw2207 },2208 .num_parents = 1,2209 .flags = CLK_SET_RATE_PARENT,2210 .ops = &clk_branch2_ops,2211 },2212 },2213};2214 2215static struct clk_branch mdss_extpclk_clk = {2216 .halt_reg = 0x2324,2217 .clkr = {2218 .enable_reg = 0x2324,2219 .enable_mask = BIT(0),2220 .hw.init = &(struct clk_init_data){2221 .name = "mdss_extpclk_clk",2222 .parent_hws = (const struct clk_hw*[]){2223 &extpclk_clk_src.clkr.hw2224 },2225 .num_parents = 1,2226 .flags = CLK_SET_RATE_PARENT,2227 .ops = &clk_branch2_ops,2228 },2229 },2230};2231 2232static struct clk_branch mdss_hdmi_ahb_clk = {2233 .halt_reg = 0x230c,2234 .clkr = {2235 .enable_reg = 0x230c,2236 .enable_mask = BIT(0),2237 .hw.init = &(struct clk_init_data){2238 .name = "mdss_hdmi_ahb_clk",2239 .parent_hws = (const struct clk_hw*[]){2240 &mmss_ahb_clk_src.clkr.hw2241 },2242 .num_parents = 1,2243 .flags = CLK_SET_RATE_PARENT,2244 .ops = &clk_branch2_ops,2245 },2246 },2247};2248 2249static struct clk_branch mdss_hdmi_clk = {2250 .halt_reg = 0x2338,2251 .clkr = {2252 .enable_reg = 0x2338,2253 .enable_mask = BIT(0),2254 .hw.init = &(struct clk_init_data){2255 .name = "mdss_hdmi_clk",2256 .parent_hws = (const struct clk_hw*[]){2257 &hdmi_clk_src.clkr.hw2258 },2259 .num_parents = 1,2260 .flags = CLK_SET_RATE_PARENT,2261 .ops = &clk_branch2_ops,2262 },2263 },2264};2265 2266static struct clk_branch mdss_mdp_clk = {2267 .halt_reg = 0x231c,2268 .clkr = {2269 .enable_reg = 0x231c,2270 .enable_mask = BIT(0),2271 .hw.init = &(struct clk_init_data){2272 .name = "mdss_mdp_clk",2273 .parent_hws = (const struct clk_hw*[]){2274 &mdp_clk_src.clkr.hw2275 },2276 .num_parents = 1,2277 .flags = CLK_SET_RATE_PARENT,2278 .ops = &clk_branch2_ops,2279 },2280 },2281};2282 2283static struct clk_branch mdss_mdp_lut_clk = {2284 .halt_reg = 0x2320,2285 .clkr = {2286 .enable_reg = 0x2320,2287 .enable_mask = BIT(0),2288 .hw.init = &(struct clk_init_data){2289 .name = "mdss_mdp_lut_clk",2290 .parent_hws = (const struct clk_hw*[]){2291 &mdp_clk_src.clkr.hw2292 },2293 .num_parents = 1,2294 .flags = CLK_SET_RATE_PARENT,2295 .ops = &clk_branch2_ops,2296 },2297 },2298};2299 2300static struct clk_branch mdss_pclk0_clk = {2301 .halt_reg = 0x2314,2302 .clkr = {2303 .enable_reg = 0x2314,2304 .enable_mask = BIT(0),2305 .hw.init = &(struct clk_init_data){2306 .name = "mdss_pclk0_clk",2307 .parent_hws = (const struct clk_hw*[]){2308 &pclk0_clk_src.clkr.hw2309 },2310 .num_parents = 1,2311 .flags = CLK_SET_RATE_PARENT,2312 .ops = &clk_branch2_ops,2313 },2314 },2315};2316 2317static struct clk_branch mdss_pclk1_clk = {2318 .halt_reg = 0x2318,2319 .clkr = {2320 .enable_reg = 0x2318,2321 .enable_mask = BIT(0),2322 .hw.init = &(struct clk_init_data){2323 .name = "mdss_pclk1_clk",2324 .parent_hws = (const struct clk_hw*[]){2325 &pclk1_clk_src.clkr.hw2326 },2327 .num_parents = 1,2328 .flags = CLK_SET_RATE_PARENT,2329 .ops = &clk_branch2_ops,2330 },2331 },2332};2333 2334static struct clk_branch mdss_vsync_clk = {2335 .halt_reg = 0x2328,2336 .clkr = {2337 .enable_reg = 0x2328,2338 .enable_mask = BIT(0),2339 .hw.init = &(struct clk_init_data){2340 .name = "mdss_vsync_clk",2341 .parent_hws = (const struct clk_hw*[]){2342 &vsync_clk_src.clkr.hw2343 },2344 .num_parents = 1,2345 .flags = CLK_SET_RATE_PARENT,2346 .ops = &clk_branch2_ops,2347 },2348 },2349};2350 2351static struct clk_branch mmss_rbcpr_ahb_clk = {2352 .halt_reg = 0x4088,2353 .clkr = {2354 .enable_reg = 0x4088,2355 .enable_mask = BIT(0),2356 .hw.init = &(struct clk_init_data){2357 .name = "mmss_rbcpr_ahb_clk",2358 .parent_hws = (const struct clk_hw*[]){2359 &mmss_ahb_clk_src.clkr.hw2360 },2361 .num_parents = 1,2362 .flags = CLK_SET_RATE_PARENT,2363 .ops = &clk_branch2_ops,2364 },2365 },2366};2367 2368static struct clk_branch mmss_rbcpr_clk = {2369 .halt_reg = 0x4084,2370 .clkr = {2371 .enable_reg = 0x4084,2372 .enable_mask = BIT(0),2373 .hw.init = &(struct clk_init_data){2374 .name = "mmss_rbcpr_clk",2375 .parent_hws = (const struct clk_hw*[]){2376 &rbcpr_clk_src.clkr.hw2377 },2378 .num_parents = 1,2379 .flags = CLK_SET_RATE_PARENT,2380 .ops = &clk_branch2_ops,2381 },2382 },2383};2384 2385static struct clk_branch mmss_misc_ahb_clk = {2386 .halt_reg = 0x502c,2387 .clkr = {2388 .enable_reg = 0x502c,2389 .enable_mask = BIT(0),2390 .hw.init = &(struct clk_init_data){2391 .name = "mmss_misc_ahb_clk",2392 .parent_hws = (const struct clk_hw*[]){2393 &mmss_ahb_clk_src.clkr.hw2394 },2395 .num_parents = 1,2396 .flags = CLK_SET_RATE_PARENT,2397 .ops = &clk_branch2_ops,2398 },2399 },2400};2401 2402static struct clk_branch mmss_mmssnoc_ahb_clk = {2403 .halt_reg = 0x5024,2404 .clkr = {2405 .enable_reg = 0x5024,2406 .enable_mask = BIT(0),2407 .hw.init = &(struct clk_init_data){2408 .name = "mmss_mmssnoc_ahb_clk",2409 .parent_hws = (const struct clk_hw*[]){2410 &mmss_ahb_clk_src.clkr.hw2411 },2412 .num_parents = 1,2413 .ops = &clk_branch2_ops,2414 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,2415 },2416 },2417};2418 2419static struct clk_branch mmss_mmssnoc_bto_ahb_clk = {2420 .halt_reg = 0x5028,2421 .clkr = {2422 .enable_reg = 0x5028,2423 .enable_mask = BIT(0),2424 .hw.init = &(struct clk_init_data){2425 .name = "mmss_mmssnoc_bto_ahb_clk",2426 .parent_hws = (const struct clk_hw*[]){2427 &mmss_ahb_clk_src.clkr.hw2428 },2429 .num_parents = 1,2430 .ops = &clk_branch2_ops,2431 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,2432 },2433 },2434};2435 2436static struct clk_branch mmss_mmssnoc_axi_clk = {2437 .halt_reg = 0x506c,2438 .clkr = {2439 .enable_reg = 0x506c,2440 .enable_mask = BIT(0),2441 .hw.init = &(struct clk_init_data){2442 .name = "mmss_mmssnoc_axi_clk",2443 .parent_hws = (const struct clk_hw*[]){2444 &mmss_axi_clk_src.clkr.hw2445 },2446 .num_parents = 1,2447 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,2448 .ops = &clk_branch2_ops,2449 },2450 },2451};2452 2453static struct clk_branch mmss_s0_axi_clk = {2454 .halt_reg = 0x5064,2455 .clkr = {2456 .enable_reg = 0x5064,2457 .enable_mask = BIT(0),2458 .hw.init = &(struct clk_init_data){2459 .name = "mmss_s0_axi_clk",2460 .parent_hws = (const struct clk_hw*[]){2461 &mmss_axi_clk_src.clkr.hw2462 },2463 .num_parents = 1,2464 .ops = &clk_branch2_ops,2465 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,2466 },2467 },2468};2469 2470static struct clk_branch ocmemcx_ahb_clk = {2471 .halt_reg = 0x405c,2472 .clkr = {2473 .enable_reg = 0x405c,2474 .enable_mask = BIT(0),2475 .hw.init = &(struct clk_init_data){2476 .name = "ocmemcx_ahb_clk",2477 .parent_hws = (const struct clk_hw*[]){2478 &mmss_ahb_clk_src.clkr.hw2479 },2480 .num_parents = 1,2481 .flags = CLK_SET_RATE_PARENT,2482 .ops = &clk_branch2_ops,2483 },2484 },2485};2486 2487static struct clk_branch ocmemcx_ocmemnoc_clk = {2488 .halt_reg = 0x4058,2489 .clkr = {2490 .enable_reg = 0x4058,2491 .enable_mask = BIT(0),2492 .hw.init = &(struct clk_init_data){2493 .name = "ocmemcx_ocmemnoc_clk",2494 .parent_hws = (const struct clk_hw*[]){2495 &ocmemnoc_clk_src.clkr.hw2496 },2497 .num_parents = 1,2498 .flags = CLK_SET_RATE_PARENT,2499 .ops = &clk_branch2_ops,2500 },2501 },2502};2503 2504static struct clk_branch oxili_ocmemgx_clk = {2505 .halt_reg = 0x402c,2506 .clkr = {2507 .enable_reg = 0x402c,2508 .enable_mask = BIT(0),2509 .hw.init = &(struct clk_init_data){2510 .name = "oxili_ocmemgx_clk",2511 .parent_hws = (const struct clk_hw*[]){2512 &gfx3d_clk_src.clkr.hw2513 },2514 .num_parents = 1,2515 .flags = CLK_SET_RATE_PARENT,2516 .ops = &clk_branch2_ops,2517 },2518 },2519};2520 2521static struct clk_branch oxili_gfx3d_clk = {2522 .halt_reg = 0x4028,2523 .clkr = {2524 .enable_reg = 0x4028,2525 .enable_mask = BIT(0),2526 .hw.init = &(struct clk_init_data){2527 .name = "oxili_gfx3d_clk",2528 .parent_hws = (const struct clk_hw*[]){2529 &gfx3d_clk_src.clkr.hw2530 },2531 .num_parents = 1,2532 .flags = CLK_SET_RATE_PARENT,2533 .ops = &clk_branch2_ops,2534 },2535 },2536};2537 2538static struct clk_branch oxili_rbbmtimer_clk = {2539 .halt_reg = 0x40b0,2540 .clkr = {2541 .enable_reg = 0x40b0,2542 .enable_mask = BIT(0),2543 .hw.init = &(struct clk_init_data){2544 .name = "oxili_rbbmtimer_clk",2545 .parent_hws = (const struct clk_hw*[]){2546 &rbbmtimer_clk_src.clkr.hw2547 },2548 .num_parents = 1,2549 .flags = CLK_SET_RATE_PARENT,2550 .ops = &clk_branch2_ops,2551 },2552 },2553};2554 2555static struct clk_branch oxilicx_ahb_clk = {2556 .halt_reg = 0x403c,2557 .clkr = {2558 .enable_reg = 0x403c,2559 .enable_mask = BIT(0),2560 .hw.init = &(struct clk_init_data){2561 .name = "oxilicx_ahb_clk",2562 .parent_hws = (const struct clk_hw*[]){2563 &mmss_ahb_clk_src.clkr.hw2564 },2565 .num_parents = 1,2566 .flags = CLK_SET_RATE_PARENT,2567 .ops = &clk_branch2_ops,2568 },2569 },2570};2571 2572static struct clk_branch venus0_ahb_clk = {2573 .halt_reg = 0x1030,2574 .clkr = {2575 .enable_reg = 0x1030,2576 .enable_mask = BIT(0),2577 .hw.init = &(struct clk_init_data){2578 .name = "venus0_ahb_clk",2579 .parent_hws = (const struct clk_hw*[]){2580 &mmss_ahb_clk_src.clkr.hw2581 },2582 .num_parents = 1,2583 .flags = CLK_SET_RATE_PARENT,2584 .ops = &clk_branch2_ops,2585 },2586 },2587};2588 2589static struct clk_branch venus0_axi_clk = {2590 .halt_reg = 0x1034,2591 .clkr = {2592 .enable_reg = 0x1034,2593 .enable_mask = BIT(0),2594 .hw.init = &(struct clk_init_data){2595 .name = "venus0_axi_clk",2596 .parent_hws = (const struct clk_hw*[]){2597 &mmss_axi_clk_src.clkr.hw2598 },2599 .num_parents = 1,2600 .flags = CLK_SET_RATE_PARENT,2601 .ops = &clk_branch2_ops,2602 },2603 },2604};2605 2606static struct clk_branch venus0_core0_vcodec_clk = {2607 .halt_reg = 0x1048,2608 .clkr = {2609 .enable_reg = 0x1048,2610 .enable_mask = BIT(0),2611 .hw.init = &(struct clk_init_data){2612 .name = "venus0_core0_vcodec_clk",2613 .parent_hws = (const struct clk_hw*[]){2614 &vcodec0_clk_src.clkr.hw2615 },2616 .num_parents = 1,2617 .flags = CLK_SET_RATE_PARENT,2618 .ops = &clk_branch2_ops,2619 },2620 },2621};2622 2623static struct clk_branch venus0_core1_vcodec_clk = {2624 .halt_reg = 0x104c,2625 .clkr = {2626 .enable_reg = 0x104c,2627 .enable_mask = BIT(0),2628 .hw.init = &(struct clk_init_data){2629 .name = "venus0_core1_vcodec_clk",2630 .parent_hws = (const struct clk_hw*[]){2631 &vcodec0_clk_src.clkr.hw2632 },2633 .num_parents = 1,2634 .flags = CLK_SET_RATE_PARENT,2635 .ops = &clk_branch2_ops,2636 },2637 },2638};2639 2640static struct clk_branch venus0_ocmemnoc_clk = {2641 .halt_reg = 0x1038,2642 .clkr = {2643 .enable_reg = 0x1038,2644 .enable_mask = BIT(0),2645 .hw.init = &(struct clk_init_data){2646 .name = "venus0_ocmemnoc_clk",2647 .parent_hws = (const struct clk_hw*[]){2648 &ocmemnoc_clk_src.clkr.hw2649 },2650 .num_parents = 1,2651 .flags = CLK_SET_RATE_PARENT,2652 .ops = &clk_branch2_ops,2653 },2654 },2655};2656 2657static struct clk_branch venus0_vcodec0_clk = {2658 .halt_reg = 0x1028,2659 .clkr = {2660 .enable_reg = 0x1028,2661 .enable_mask = BIT(0),2662 .hw.init = &(struct clk_init_data){2663 .name = "venus0_vcodec0_clk",2664 .parent_hws = (const struct clk_hw*[]){2665 &vcodec0_clk_src.clkr.hw2666 },2667 .num_parents = 1,2668 .flags = CLK_SET_RATE_PARENT,2669 .ops = &clk_branch2_ops,2670 },2671 },2672};2673 2674static struct clk_branch vpu_ahb_clk = {2675 .halt_reg = 0x1430,2676 .clkr = {2677 .enable_reg = 0x1430,2678 .enable_mask = BIT(0),2679 .hw.init = &(struct clk_init_data){2680 .name = "vpu_ahb_clk",2681 .parent_hws = (const struct clk_hw*[]){2682 &mmss_ahb_clk_src.clkr.hw2683 },2684 .num_parents = 1,2685 .flags = CLK_SET_RATE_PARENT,2686 .ops = &clk_branch2_ops,2687 },2688 },2689};2690 2691static struct clk_branch vpu_axi_clk = {2692 .halt_reg = 0x143c,2693 .clkr = {2694 .enable_reg = 0x143c,2695 .enable_mask = BIT(0),2696 .hw.init = &(struct clk_init_data){2697 .name = "vpu_axi_clk",2698 .parent_hws = (const struct clk_hw*[]){2699 &mmss_axi_clk_src.clkr.hw2700 },2701 .num_parents = 1,2702 .flags = CLK_SET_RATE_PARENT,2703 .ops = &clk_branch2_ops,2704 },2705 },2706};2707 2708static struct clk_branch vpu_bus_clk = {2709 .halt_reg = 0x1440,2710 .clkr = {2711 .enable_reg = 0x1440,2712 .enable_mask = BIT(0),2713 .hw.init = &(struct clk_init_data){2714 .name = "vpu_bus_clk",2715 .parent_hws = (const struct clk_hw*[]){2716 &vpu_bus_clk_src.clkr.hw2717 },2718 .num_parents = 1,2719 .flags = CLK_SET_RATE_PARENT,2720 .ops = &clk_branch2_ops,2721 },2722 },2723};2724 2725static struct clk_branch vpu_cxo_clk = {2726 .halt_reg = 0x1434,2727 .clkr = {2728 .enable_reg = 0x1434,2729 .enable_mask = BIT(0),2730 .hw.init = &(struct clk_init_data){2731 .name = "vpu_cxo_clk",2732 .parent_data = (const struct clk_parent_data[]){2733 { .fw_name = "xo", .name = "xo_board" },2734 },2735 .num_parents = 1,2736 .flags = CLK_SET_RATE_PARENT,2737 .ops = &clk_branch2_ops,2738 },2739 },2740};2741 2742static struct clk_branch vpu_maple_clk = {2743 .halt_reg = 0x142c,2744 .clkr = {2745 .enable_reg = 0x142c,2746 .enable_mask = BIT(0),2747 .hw.init = &(struct clk_init_data){2748 .name = "vpu_maple_clk",2749 .parent_hws = (const struct clk_hw*[]){2750 &maple_clk_src.clkr.hw2751 },2752 .num_parents = 1,2753 .flags = CLK_SET_RATE_PARENT,2754 .ops = &clk_branch2_ops,2755 },2756 },2757};2758 2759static struct clk_branch vpu_sleep_clk = {2760 .halt_reg = 0x1438,2761 .clkr = {2762 .enable_reg = 0x1438,2763 .enable_mask = BIT(0),2764 .hw.init = &(struct clk_init_data){2765 .name = "vpu_sleep_clk",2766 .parent_data = (const struct clk_parent_data[]){2767 { .fw_name = "sleep_clk", .name = "sleep_clk" },2768 },2769 .num_parents = 1,2770 .flags = CLK_SET_RATE_PARENT,2771 .ops = &clk_branch2_ops,2772 },2773 },2774};2775 2776static struct clk_branch vpu_vdp_clk = {2777 .halt_reg = 0x1428,2778 .clkr = {2779 .enable_reg = 0x1428,2780 .enable_mask = BIT(0),2781 .hw.init = &(struct clk_init_data){2782 .name = "vpu_vdp_clk",2783 .parent_hws = (const struct clk_hw*[]){2784 &vdp_clk_src.clkr.hw2785 },2786 .num_parents = 1,2787 .flags = CLK_SET_RATE_PARENT,2788 .ops = &clk_branch2_ops,2789 },2790 },2791};2792 2793static const struct pll_config mmpll1_config = {2794 .l = 60,2795 .m = 25,2796 .n = 32,2797 .vco_val = 0x0,2798 .vco_mask = 0x3 << 20,2799 .pre_div_val = 0x0,2800 .pre_div_mask = 0x7 << 12,2801 .post_div_val = 0x0,2802 .post_div_mask = 0x3 << 8,2803 .mn_ena_mask = BIT(24),2804 .main_output_mask = BIT(0),2805};2806 2807static const struct pll_config mmpll3_config = {2808 .l = 48,2809 .m = 7,2810 .n = 16,2811 .vco_val = 0x0,2812 .vco_mask = 0x3 << 20,2813 .pre_div_val = 0x0,2814 .pre_div_mask = 0x7 << 12,2815 .post_div_val = 0x0,2816 .post_div_mask = 0x3 << 8,2817 .mn_ena_mask = BIT(24),2818 .main_output_mask = BIT(0),2819 .aux_output_mask = BIT(1),2820};2821 2822static struct gdsc venus0_gdsc = {2823 .gdscr = 0x1024,2824 .pd = {2825 .name = "venus0",2826 },2827 .pwrsts = PWRSTS_OFF_ON,2828};2829 2830static struct gdsc venus0_core0_gdsc = {2831 .gdscr = 0x1040,2832 .pd = {2833 .name = "venus0_core0",2834 },2835 .pwrsts = PWRSTS_OFF_ON,2836};2837 2838static struct gdsc venus0_core1_gdsc = {2839 .gdscr = 0x1044,2840 .pd = {2841 .name = "venus0_core1",2842 },2843 .pwrsts = PWRSTS_OFF_ON,2844};2845 2846static struct gdsc mdss_gdsc = {2847 .gdscr = 0x2304,2848 .cxcs = (unsigned int []){ 0x231c, 0x2320 },2849 .cxc_count = 2,2850 .pd = {2851 .name = "mdss",2852 },2853 .pwrsts = PWRSTS_OFF_ON,2854};2855 2856static struct gdsc camss_jpeg_gdsc = {2857 .gdscr = 0x35a4,2858 .pd = {2859 .name = "camss_jpeg",2860 },2861 .pwrsts = PWRSTS_OFF_ON,2862};2863 2864static struct gdsc camss_vfe_gdsc = {2865 .gdscr = 0x36a4,2866 .cxcs = (unsigned int []){ 0x36a8, 0x36ac, 0x36b0 },2867 .cxc_count = 3,2868 .pd = {2869 .name = "camss_vfe",2870 },2871 .pwrsts = PWRSTS_OFF_ON,2872};2873 2874static struct gdsc oxili_gdsc = {2875 .gdscr = 0x4024,2876 .cxcs = (unsigned int []){ 0x4028 },2877 .cxc_count = 1,2878 .pd = {2879 .name = "oxili",2880 },2881 .pwrsts = PWRSTS_OFF_ON,2882};2883 2884static struct gdsc oxilicx_gdsc = {2885 .gdscr = 0x4034,2886 .pd = {2887 .name = "oxilicx",2888 },2889 .pwrsts = PWRSTS_OFF_ON,2890};2891 2892static struct clk_regmap *mmcc_apq8084_clocks[] = {2893 [MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr,2894 [MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr,2895 [MMPLL0] = &mmpll0.clkr,2896 [MMPLL0_VOTE] = &mmpll0_vote,2897 [MMPLL1] = &mmpll1.clkr,2898 [MMPLL1_VOTE] = &mmpll1_vote,2899 [MMPLL2] = &mmpll2.clkr,2900 [MMPLL3] = &mmpll3.clkr,2901 [MMPLL4] = &mmpll4.clkr,2902 [CSI0_CLK_SRC] = &csi0_clk_src.clkr,2903 [CSI1_CLK_SRC] = &csi1_clk_src.clkr,2904 [CSI2_CLK_SRC] = &csi2_clk_src.clkr,2905 [CSI3_CLK_SRC] = &csi3_clk_src.clkr,2906 [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,2907 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,2908 [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,2909 [MDP_CLK_SRC] = &mdp_clk_src.clkr,2910 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,2911 [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,2912 [OCMEMNOC_CLK_SRC] = &ocmemnoc_clk_src.clkr,2913 [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,2914 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,2915 [JPEG1_CLK_SRC] = &jpeg1_clk_src.clkr,2916 [JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr,2917 [EDPPIXEL_CLK_SRC] = &edppixel_clk_src.clkr,2918 [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr,2919 [VP_CLK_SRC] = &vp_clk_src.clkr,2920 [CCI_CLK_SRC] = &cci_clk_src.clkr,2921 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,2922 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,2923 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,2924 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,2925 [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,2926 [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,2927 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,2928 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,2929 [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,2930 [CPP_CLK_SRC] = &cpp_clk_src.clkr,2931 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,2932 [BYTE1_CLK_SRC] = &byte1_clk_src.clkr,2933 [EDPAUX_CLK_SRC] = &edpaux_clk_src.clkr,2934 [EDPLINK_CLK_SRC] = &edplink_clk_src.clkr,2935 [ESC0_CLK_SRC] = &esc0_clk_src.clkr,2936 [ESC1_CLK_SRC] = &esc1_clk_src.clkr,2937 [HDMI_CLK_SRC] = &hdmi_clk_src.clkr,2938 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,2939 [MMSS_RBCPR_CLK_SRC] = &rbcpr_clk_src.clkr,2940 [RBBMTIMER_CLK_SRC] = &rbbmtimer_clk_src.clkr,2941 [MAPLE_CLK_SRC] = &maple_clk_src.clkr,2942 [VDP_CLK_SRC] = &vdp_clk_src.clkr,2943 [VPU_BUS_CLK_SRC] = &vpu_bus_clk_src.clkr,2944 [MMSS_CXO_CLK] = &mmss_cxo_clk.clkr,2945 [MMSS_SLEEPCLK_CLK] = &mmss_sleepclk_clk.clkr,2946 [AVSYNC_AHB_CLK] = &avsync_ahb_clk.clkr,2947 [AVSYNC_EDPPIXEL_CLK] = &avsync_edppixel_clk.clkr,2948 [AVSYNC_EXTPCLK_CLK] = &avsync_extpclk_clk.clkr,2949 [AVSYNC_PCLK0_CLK] = &avsync_pclk0_clk.clkr,2950 [AVSYNC_PCLK1_CLK] = &avsync_pclk1_clk.clkr,2951 [AVSYNC_VP_CLK] = &avsync_vp_clk.clkr,2952 [CAMSS_AHB_CLK] = &camss_ahb_clk.clkr,2953 [CAMSS_CCI_CCI_AHB_CLK] = &camss_cci_cci_ahb_clk.clkr,2954 [CAMSS_CCI_CCI_CLK] = &camss_cci_cci_clk.clkr,2955 [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,2956 [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,2957 [CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr,2958 [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,2959 [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,2960 [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,2961 [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,2962 [CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr,2963 [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,2964 [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,2965 [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr,2966 [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr,2967 [CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr,2968 [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr,2969 [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr,2970 [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr,2971 [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr,2972 [CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr,2973 [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr,2974 [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr,2975 [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,2976 [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr,2977 [CAMSS_GP0_CLK] = &camss_gp0_clk.clkr,2978 [CAMSS_GP1_CLK] = &camss_gp1_clk.clkr,2979 [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,2980 [CAMSS_JPEG_JPEG0_CLK] = &camss_jpeg_jpeg0_clk.clkr,2981 [CAMSS_JPEG_JPEG1_CLK] = &camss_jpeg_jpeg1_clk.clkr,2982 [CAMSS_JPEG_JPEG2_CLK] = &camss_jpeg_jpeg2_clk.clkr,2983 [CAMSS_JPEG_JPEG_AHB_CLK] = &camss_jpeg_jpeg_ahb_clk.clkr,2984 [CAMSS_JPEG_JPEG_AXI_CLK] = &camss_jpeg_jpeg_axi_clk.clkr,2985 [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,2986 [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,2987 [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr,2988 [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr,2989 [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,2990 [CAMSS_PHY0_CSI0PHYTIMER_CLK] = &camss_phy0_csi0phytimer_clk.clkr,2991 [CAMSS_PHY1_CSI1PHYTIMER_CLK] = &camss_phy1_csi1phytimer_clk.clkr,2992 [CAMSS_PHY2_CSI2PHYTIMER_CLK] = &camss_phy2_csi2phytimer_clk.clkr,2993 [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,2994 [CAMSS_VFE_CPP_AHB_CLK] = &camss_vfe_cpp_ahb_clk.clkr,2995 [CAMSS_VFE_CPP_CLK] = &camss_vfe_cpp_clk.clkr,2996 [CAMSS_VFE_VFE0_CLK] = &camss_vfe_vfe0_clk.clkr,2997 [CAMSS_VFE_VFE1_CLK] = &camss_vfe_vfe1_clk.clkr,2998 [CAMSS_VFE_VFE_AHB_CLK] = &camss_vfe_vfe_ahb_clk.clkr,2999 [CAMSS_VFE_VFE_AXI_CLK] = &camss_vfe_vfe_axi_clk.clkr,3000 [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,3001 [MDSS_AXI_CLK] = &mdss_axi_clk.clkr,3002 [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,3003 [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr,3004 [MDSS_EDPAUX_CLK] = &mdss_edpaux_clk.clkr,3005 [MDSS_EDPLINK_CLK] = &mdss_edplink_clk.clkr,3006 [MDSS_EDPPIXEL_CLK] = &mdss_edppixel_clk.clkr,3007 [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,3008 [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr,3009 [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr,3010 [MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr,3011 [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr,3012 [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,3013 [MDSS_MDP_LUT_CLK] = &mdss_mdp_lut_clk.clkr,3014 [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,3015 [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr,3016 [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,3017 [MMSS_RBCPR_AHB_CLK] = &mmss_rbcpr_ahb_clk.clkr,3018 [MMSS_RBCPR_CLK] = &mmss_rbcpr_clk.clkr,3019 [MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr,3020 [MMSS_MMSSNOC_AHB_CLK] = &mmss_mmssnoc_ahb_clk.clkr,3021 [MMSS_MMSSNOC_BTO_AHB_CLK] = &mmss_mmssnoc_bto_ahb_clk.clkr,3022 [MMSS_MMSSNOC_AXI_CLK] = &mmss_mmssnoc_axi_clk.clkr,3023 [MMSS_S0_AXI_CLK] = &mmss_s0_axi_clk.clkr,3024 [OCMEMCX_AHB_CLK] = &ocmemcx_ahb_clk.clkr,3025 [OCMEMCX_OCMEMNOC_CLK] = &ocmemcx_ocmemnoc_clk.clkr,3026 [OXILI_OCMEMGX_CLK] = &oxili_ocmemgx_clk.clkr,3027 [OXILI_GFX3D_CLK] = &oxili_gfx3d_clk.clkr,3028 [OXILI_RBBMTIMER_CLK] = &oxili_rbbmtimer_clk.clkr,3029 [OXILICX_AHB_CLK] = &oxilicx_ahb_clk.clkr,3030 [VENUS0_AHB_CLK] = &venus0_ahb_clk.clkr,3031 [VENUS0_AXI_CLK] = &venus0_axi_clk.clkr,3032 [VENUS0_CORE0_VCODEC_CLK] = &venus0_core0_vcodec_clk.clkr,3033 [VENUS0_CORE1_VCODEC_CLK] = &venus0_core1_vcodec_clk.clkr,3034 [VENUS0_OCMEMNOC_CLK] = &venus0_ocmemnoc_clk.clkr,3035 [VENUS0_VCODEC0_CLK] = &venus0_vcodec0_clk.clkr,3036 [VPU_AHB_CLK] = &vpu_ahb_clk.clkr,3037 [VPU_AXI_CLK] = &vpu_axi_clk.clkr,3038 [VPU_BUS_CLK] = &vpu_bus_clk.clkr,3039 [VPU_CXO_CLK] = &vpu_cxo_clk.clkr,3040 [VPU_MAPLE_CLK] = &vpu_maple_clk.clkr,3041 [VPU_SLEEP_CLK] = &vpu_sleep_clk.clkr,3042 [VPU_VDP_CLK] = &vpu_vdp_clk.clkr,3043};3044 3045static const struct qcom_reset_map mmcc_apq8084_resets[] = {3046 [MMSS_SPDM_RESET] = { 0x0200 },3047 [MMSS_SPDM_RM_RESET] = { 0x0300 },3048 [VENUS0_RESET] = { 0x1020 },3049 [VPU_RESET] = { 0x1400 },3050 [MDSS_RESET] = { 0x2300 },3051 [AVSYNC_RESET] = { 0x2400 },3052 [CAMSS_PHY0_RESET] = { 0x3020 },3053 [CAMSS_PHY1_RESET] = { 0x3050 },3054 [CAMSS_PHY2_RESET] = { 0x3080 },3055 [CAMSS_CSI0_RESET] = { 0x30b0 },3056 [CAMSS_CSI0PHY_RESET] = { 0x30c0 },3057 [CAMSS_CSI0RDI_RESET] = { 0x30d0 },3058 [CAMSS_CSI0PIX_RESET] = { 0x30e0 },3059 [CAMSS_CSI1_RESET] = { 0x3120 },3060 [CAMSS_CSI1PHY_RESET] = { 0x3130 },3061 [CAMSS_CSI1RDI_RESET] = { 0x3140 },3062 [CAMSS_CSI1PIX_RESET] = { 0x3150 },3063 [CAMSS_CSI2_RESET] = { 0x3180 },3064 [CAMSS_CSI2PHY_RESET] = { 0x3190 },3065 [CAMSS_CSI2RDI_RESET] = { 0x31a0 },3066 [CAMSS_CSI2PIX_RESET] = { 0x31b0 },3067 [CAMSS_CSI3_RESET] = { 0x31e0 },3068 [CAMSS_CSI3PHY_RESET] = { 0x31f0 },3069 [CAMSS_CSI3RDI_RESET] = { 0x3200 },3070 [CAMSS_CSI3PIX_RESET] = { 0x3210 },3071 [CAMSS_ISPIF_RESET] = { 0x3220 },3072 [CAMSS_CCI_RESET] = { 0x3340 },3073 [CAMSS_MCLK0_RESET] = { 0x3380 },3074 [CAMSS_MCLK1_RESET] = { 0x33b0 },3075 [CAMSS_MCLK2_RESET] = { 0x33e0 },3076 [CAMSS_MCLK3_RESET] = { 0x3410 },3077 [CAMSS_GP0_RESET] = { 0x3440 },3078 [CAMSS_GP1_RESET] = { 0x3470 },3079 [CAMSS_TOP_RESET] = { 0x3480 },3080 [CAMSS_AHB_RESET] = { 0x3488 },3081 [CAMSS_MICRO_RESET] = { 0x3490 },3082 [CAMSS_JPEG_RESET] = { 0x35a0 },3083 [CAMSS_VFE_RESET] = { 0x36a0 },3084 [CAMSS_CSI_VFE0_RESET] = { 0x3700 },3085 [CAMSS_CSI_VFE1_RESET] = { 0x3710 },3086 [OXILI_RESET] = { 0x4020 },3087 [OXILICX_RESET] = { 0x4030 },3088 [OCMEMCX_RESET] = { 0x4050 },3089 [MMSS_RBCRP_RESET] = { 0x4080 },3090 [MMSSNOCAHB_RESET] = { 0x5020 },3091 [MMSSNOCAXI_RESET] = { 0x5060 },3092};3093 3094static struct gdsc *mmcc_apq8084_gdscs[] = {3095 [VENUS0_GDSC] = &venus0_gdsc,3096 [VENUS0_CORE0_GDSC] = &venus0_core0_gdsc,3097 [VENUS0_CORE1_GDSC] = &venus0_core1_gdsc,3098 [MDSS_GDSC] = &mdss_gdsc,3099 [CAMSS_JPEG_GDSC] = &camss_jpeg_gdsc,3100 [CAMSS_VFE_GDSC] = &camss_vfe_gdsc,3101 [OXILI_GDSC] = &oxili_gdsc,3102 [OXILICX_GDSC] = &oxilicx_gdsc,3103};3104 3105static const struct regmap_config mmcc_apq8084_regmap_config = {3106 .reg_bits = 32,3107 .reg_stride = 4,3108 .val_bits = 32,3109 .max_register = 0x5104,3110 .fast_io = true,3111};3112 3113static const struct qcom_cc_desc mmcc_apq8084_desc = {3114 .config = &mmcc_apq8084_regmap_config,3115 .clks = mmcc_apq8084_clocks,3116 .num_clks = ARRAY_SIZE(mmcc_apq8084_clocks),3117 .resets = mmcc_apq8084_resets,3118 .num_resets = ARRAY_SIZE(mmcc_apq8084_resets),3119 .gdscs = mmcc_apq8084_gdscs,3120 .num_gdscs = ARRAY_SIZE(mmcc_apq8084_gdscs),3121};3122 3123static const struct of_device_id mmcc_apq8084_match_table[] = {3124 { .compatible = "qcom,mmcc-apq8084" },3125 { }3126};3127MODULE_DEVICE_TABLE(of, mmcc_apq8084_match_table);3128 3129static int mmcc_apq8084_probe(struct platform_device *pdev)3130{3131 int ret;3132 struct regmap *regmap;3133 3134 ret = qcom_cc_probe(pdev, &mmcc_apq8084_desc);3135 if (ret)3136 return ret;3137 3138 regmap = dev_get_regmap(&pdev->dev, NULL);3139 clk_pll_configure_sr_hpm_lp(&mmpll1, regmap, &mmpll1_config, true);3140 clk_pll_configure_sr_hpm_lp(&mmpll3, regmap, &mmpll3_config, false);3141 3142 return 0;3143}3144 3145static struct platform_driver mmcc_apq8084_driver = {3146 .probe = mmcc_apq8084_probe,3147 .driver = {3148 .name = "mmcc-apq8084",3149 .of_match_table = mmcc_apq8084_match_table,3150 },3151};3152module_platform_driver(mmcc_apq8084_driver);3153 3154MODULE_DESCRIPTION("QCOM MMCC APQ8084 Driver");3155MODULE_LICENSE("GPL v2");3156MODULE_ALIAS("platform:mmcc-apq8084");3157