cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

mmcc-apq8084.c (78975B)


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