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

gcc-ipq806x.c (76215B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Copyright (c) 2014, The Linux Foundation. All rights reserved.
      4 */
      5
      6#include <linux/kernel.h>
      7#include <linux/bitops.h>
      8#include <linux/err.h>
      9#include <linux/platform_device.h>
     10#include <linux/module.h>
     11#include <linux/of.h>
     12#include <linux/of_device.h>
     13#include <linux/clk-provider.h>
     14#include <linux/regmap.h>
     15#include <linux/reset-controller.h>
     16
     17#include <dt-bindings/clock/qcom,gcc-ipq806x.h>
     18#include <dt-bindings/reset/qcom,gcc-ipq806x.h>
     19
     20#include "common.h"
     21#include "clk-regmap.h"
     22#include "clk-pll.h"
     23#include "clk-rcg.h"
     24#include "clk-branch.h"
     25#include "clk-hfpll.h"
     26#include "reset.h"
     27
     28static const struct clk_parent_data gcc_pxo[] = {
     29	{ .fw_name = "pxo", .name = "pxo" },
     30};
     31
     32static struct clk_pll pll0 = {
     33	.l_reg = 0x30c4,
     34	.m_reg = 0x30c8,
     35	.n_reg = 0x30cc,
     36	.config_reg = 0x30d4,
     37	.mode_reg = 0x30c0,
     38	.status_reg = 0x30d8,
     39	.status_bit = 16,
     40	.clkr.hw.init = &(struct clk_init_data){
     41		.name = "pll0",
     42		.parent_data = gcc_pxo,
     43		.num_parents = 1,
     44		.ops = &clk_pll_ops,
     45	},
     46};
     47
     48static struct clk_regmap pll0_vote = {
     49	.enable_reg = 0x34c0,
     50	.enable_mask = BIT(0),
     51	.hw.init = &(struct clk_init_data){
     52		.name = "pll0_vote",
     53		.parent_hws = (const struct clk_hw*[]){
     54			&pll0.clkr.hw,
     55		},
     56		.num_parents = 1,
     57		.ops = &clk_pll_vote_ops,
     58	},
     59};
     60
     61static struct clk_pll pll3 = {
     62	.l_reg = 0x3164,
     63	.m_reg = 0x3168,
     64	.n_reg = 0x316c,
     65	.config_reg = 0x3174,
     66	.mode_reg = 0x3160,
     67	.status_reg = 0x3178,
     68	.status_bit = 16,
     69	.clkr.hw.init = &(struct clk_init_data){
     70		.name = "pll3",
     71		.parent_data = gcc_pxo,
     72		.num_parents = 1,
     73		.ops = &clk_pll_ops,
     74	},
     75};
     76
     77static struct clk_regmap pll4_vote = {
     78	.enable_reg = 0x34c0,
     79	.enable_mask = BIT(4),
     80	.hw.init = &(struct clk_init_data){
     81		.name = "pll4_vote",
     82		.parent_names = (const char *[]){ "pll4" },
     83		.num_parents = 1,
     84		.ops = &clk_pll_vote_ops,
     85	},
     86};
     87
     88static struct clk_pll pll8 = {
     89	.l_reg = 0x3144,
     90	.m_reg = 0x3148,
     91	.n_reg = 0x314c,
     92	.config_reg = 0x3154,
     93	.mode_reg = 0x3140,
     94	.status_reg = 0x3158,
     95	.status_bit = 16,
     96	.clkr.hw.init = &(struct clk_init_data){
     97		.name = "pll8",
     98		.parent_data = gcc_pxo,
     99		.num_parents = 1,
    100		.ops = &clk_pll_ops,
    101	},
    102};
    103
    104static struct clk_regmap pll8_vote = {
    105	.enable_reg = 0x34c0,
    106	.enable_mask = BIT(8),
    107	.hw.init = &(struct clk_init_data){
    108		.name = "pll8_vote",
    109		.parent_hws = (const struct clk_hw*[]){
    110			&pll8.clkr.hw,
    111		},
    112		.num_parents = 1,
    113		.ops = &clk_pll_vote_ops,
    114	},
    115};
    116
    117static struct hfpll_data hfpll0_data = {
    118	.mode_reg = 0x3200,
    119	.l_reg = 0x3208,
    120	.m_reg = 0x320c,
    121	.n_reg = 0x3210,
    122	.config_reg = 0x3204,
    123	.status_reg = 0x321c,
    124	.config_val = 0x7845c665,
    125	.droop_reg = 0x3214,
    126	.droop_val = 0x0108c000,
    127	.min_rate = 600000000UL,
    128	.max_rate = 1800000000UL,
    129};
    130
    131static struct clk_hfpll hfpll0 = {
    132	.d = &hfpll0_data,
    133	.clkr.hw.init = &(struct clk_init_data){
    134		.parent_data = gcc_pxo,
    135		.num_parents = 1,
    136		.name = "hfpll0",
    137		.ops = &clk_ops_hfpll,
    138		.flags = CLK_IGNORE_UNUSED,
    139	},
    140	.lock = __SPIN_LOCK_UNLOCKED(hfpll0.lock),
    141};
    142
    143static struct hfpll_data hfpll1_data = {
    144	.mode_reg = 0x3240,
    145	.l_reg = 0x3248,
    146	.m_reg = 0x324c,
    147	.n_reg = 0x3250,
    148	.config_reg = 0x3244,
    149	.status_reg = 0x325c,
    150	.config_val = 0x7845c665,
    151	.droop_reg = 0x3314,
    152	.droop_val = 0x0108c000,
    153	.min_rate = 600000000UL,
    154	.max_rate = 1800000000UL,
    155};
    156
    157static struct clk_hfpll hfpll1 = {
    158	.d = &hfpll1_data,
    159	.clkr.hw.init = &(struct clk_init_data){
    160		.parent_data = gcc_pxo,
    161		.num_parents = 1,
    162		.name = "hfpll1",
    163		.ops = &clk_ops_hfpll,
    164		.flags = CLK_IGNORE_UNUSED,
    165	},
    166	.lock = __SPIN_LOCK_UNLOCKED(hfpll1.lock),
    167};
    168
    169static struct hfpll_data hfpll_l2_data = {
    170	.mode_reg = 0x3300,
    171	.l_reg = 0x3308,
    172	.m_reg = 0x330c,
    173	.n_reg = 0x3310,
    174	.config_reg = 0x3304,
    175	.status_reg = 0x331c,
    176	.config_val = 0x7845c665,
    177	.droop_reg = 0x3314,
    178	.droop_val = 0x0108c000,
    179	.min_rate = 600000000UL,
    180	.max_rate = 1800000000UL,
    181};
    182
    183static struct clk_hfpll hfpll_l2 = {
    184	.d = &hfpll_l2_data,
    185	.clkr.hw.init = &(struct clk_init_data){
    186		.parent_data = gcc_pxo,
    187		.num_parents = 1,
    188		.name = "hfpll_l2",
    189		.ops = &clk_ops_hfpll,
    190		.flags = CLK_IGNORE_UNUSED,
    191	},
    192	.lock = __SPIN_LOCK_UNLOCKED(hfpll_l2.lock),
    193};
    194
    195static struct clk_pll pll14 = {
    196	.l_reg = 0x31c4,
    197	.m_reg = 0x31c8,
    198	.n_reg = 0x31cc,
    199	.config_reg = 0x31d4,
    200	.mode_reg = 0x31c0,
    201	.status_reg = 0x31d8,
    202	.status_bit = 16,
    203	.clkr.hw.init = &(struct clk_init_data){
    204		.name = "pll14",
    205		.parent_data = gcc_pxo,
    206		.num_parents = 1,
    207		.ops = &clk_pll_ops,
    208	},
    209};
    210
    211static struct clk_regmap pll14_vote = {
    212	.enable_reg = 0x34c0,
    213	.enable_mask = BIT(14),
    214	.hw.init = &(struct clk_init_data){
    215		.name = "pll14_vote",
    216		.parent_hws = (const struct clk_hw*[]){
    217			&pll14.clkr.hw,
    218		},
    219		.num_parents = 1,
    220		.ops = &clk_pll_vote_ops,
    221	},
    222};
    223
    224#define NSS_PLL_RATE(f, _l, _m, _n, i) \
    225	{  \
    226		.freq = f,  \
    227		.l = _l, \
    228		.m = _m, \
    229		.n = _n, \
    230		.ibits = i, \
    231	}
    232
    233static struct pll_freq_tbl pll18_freq_tbl[] = {
    234	NSS_PLL_RATE(550000000, 44, 0, 1, 0x01495625),
    235	NSS_PLL_RATE(600000000, 48, 0, 1, 0x01495625),
    236	NSS_PLL_RATE(733000000, 58, 16, 25, 0x014b5625),
    237	NSS_PLL_RATE(800000000, 64, 0, 1, 0x01495625),
    238};
    239
    240static struct clk_pll pll18 = {
    241	.l_reg = 0x31a4,
    242	.m_reg = 0x31a8,
    243	.n_reg = 0x31ac,
    244	.config_reg = 0x31b4,
    245	.mode_reg = 0x31a0,
    246	.status_reg = 0x31b8,
    247	.status_bit = 16,
    248	.post_div_shift = 16,
    249	.post_div_width = 1,
    250	.freq_tbl = pll18_freq_tbl,
    251	.clkr.hw.init = &(struct clk_init_data){
    252		.name = "pll18",
    253		.parent_data = gcc_pxo,
    254		.num_parents = 1,
    255		.ops = &clk_pll_ops,
    256	},
    257};
    258
    259static struct clk_pll pll11 = {
    260	.l_reg = 0x3184,
    261	.m_reg = 0x3188,
    262	.n_reg = 0x318c,
    263	.config_reg = 0x3194,
    264	.mode_reg = 0x3180,
    265	.status_reg = 0x3198,
    266	.status_bit = 16,
    267	.clkr.hw.init = &(struct clk_init_data){
    268		.name = "pll11",
    269		.parent_data = &(const struct clk_parent_data){
    270			.fw_name = "pxo",
    271		},
    272		.num_parents = 1,
    273		.ops = &clk_pll_ops,
    274	},
    275};
    276
    277enum {
    278	P_PXO,
    279	P_PLL8,
    280	P_PLL3,
    281	P_PLL0,
    282	P_CXO,
    283	P_PLL14,
    284	P_PLL18,
    285	P_PLL11,
    286};
    287
    288static const struct parent_map gcc_pxo_pll8_map[] = {
    289	{ P_PXO, 0 },
    290	{ P_PLL8, 3 }
    291};
    292
    293static const struct clk_parent_data gcc_pxo_pll8[] = {
    294	{ .fw_name = "pxo", .name = "pxo" },
    295	{ .hw = &pll8_vote.hw },
    296};
    297
    298static const struct parent_map gcc_pxo_pll8_cxo_map[] = {
    299	{ P_PXO, 0 },
    300	{ P_PLL8, 3 },
    301	{ P_CXO, 5 }
    302};
    303
    304static const struct clk_parent_data gcc_pxo_pll8_cxo[] = {
    305	{ .fw_name = "pxo", .name = "pxo" },
    306	{ .hw = &pll8_vote.hw },
    307	{ .fw_name = "cxo", .name = "cxo" },
    308};
    309
    310static const struct parent_map gcc_pxo_pll3_map[] = {
    311	{ P_PXO, 0 },
    312	{ P_PLL3, 1 }
    313};
    314
    315static const struct parent_map gcc_pxo_pll3_sata_map[] = {
    316	{ P_PXO, 0 },
    317	{ P_PLL3, 6 }
    318};
    319
    320static const struct clk_parent_data gcc_pxo_pll3[] = {
    321	{ .fw_name = "pxo", .name = "pxo" },
    322	{ .hw = &pll3.clkr.hw },
    323};
    324
    325static const struct parent_map gcc_pxo_pll8_pll0_map[] = {
    326	{ P_PXO, 0 },
    327	{ P_PLL8, 3 },
    328	{ P_PLL0, 2 }
    329};
    330
    331static const struct clk_parent_data gcc_pxo_pll8_pll0[] = {
    332	{ .fw_name = "pxo", .name = "pxo" },
    333	{ .hw = &pll8_vote.hw },
    334	{ .hw = &pll0_vote.hw },
    335};
    336
    337static const struct parent_map gcc_pxo_pll8_pll14_pll18_pll0_map[] = {
    338	{ P_PXO, 0 },
    339	{ P_PLL8, 4 },
    340	{ P_PLL0, 2 },
    341	{ P_PLL14, 5 },
    342	{ P_PLL18, 1 }
    343};
    344
    345static const struct clk_parent_data gcc_pxo_pll8_pll14_pll18_pll0[] = {
    346	{ .fw_name = "pxo", .name = "pxo" },
    347	{ .hw = &pll8_vote.hw },
    348	{ .hw = &pll0_vote.hw },
    349	{ .hw = &pll14.clkr.hw },
    350	{ .hw = &pll18.clkr.hw },
    351};
    352
    353static const struct parent_map gcc_pxo_pll8_pll0_pll14_pll18_pll11_map[] = {
    354	{ P_PXO, 0 },
    355	{ P_PLL8, 4 },
    356	{ P_PLL0, 2 },
    357	{ P_PLL14, 5 },
    358	{ P_PLL18, 1 },
    359	{ P_PLL11, 3 },
    360};
    361
    362static const struct clk_parent_data gcc_pxo_pll8_pll0_pll14_pll18_pll11[] = {
    363	{ .fw_name = "pxo" },
    364	{ .hw = &pll8_vote.hw },
    365	{ .hw = &pll0_vote.hw },
    366	{ .hw = &pll14.clkr.hw },
    367	{ .hw = &pll18.clkr.hw },
    368	{ .hw = &pll11.clkr.hw },
    369
    370};
    371
    372static const struct parent_map gcc_pxo_pll3_pll0_pll14_pll18_pll11_map[] = {
    373	{ P_PXO, 0 },
    374	{ P_PLL3, 6 },
    375	{ P_PLL0, 2 },
    376	{ P_PLL14, 5 },
    377	{ P_PLL18, 1 },
    378	{ P_PLL11, 3 },
    379};
    380
    381static const struct clk_parent_data gcc_pxo_pll3_pll0_pll14_pll18_pll11[] = {
    382	{ .fw_name = "pxo" },
    383	{ .hw = &pll3.clkr.hw },
    384	{ .hw = &pll0_vote.hw },
    385	{ .hw = &pll14.clkr.hw },
    386	{ .hw = &pll18.clkr.hw },
    387	{ .hw = &pll11.clkr.hw },
    388
    389};
    390
    391static struct freq_tbl clk_tbl_gsbi_uart[] = {
    392	{  1843200, P_PLL8, 2,  6, 625 },
    393	{  3686400, P_PLL8, 2, 12, 625 },
    394	{  7372800, P_PLL8, 2, 24, 625 },
    395	{ 14745600, P_PLL8, 2, 48, 625 },
    396	{ 16000000, P_PLL8, 4,  1,   6 },
    397	{ 24000000, P_PLL8, 4,  1,   4 },
    398	{ 32000000, P_PLL8, 4,  1,   3 },
    399	{ 40000000, P_PLL8, 1,  5,  48 },
    400	{ 46400000, P_PLL8, 1, 29, 240 },
    401	{ 48000000, P_PLL8, 4,  1,   2 },
    402	{ 51200000, P_PLL8, 1,  2,  15 },
    403	{ 56000000, P_PLL8, 1,  7,  48 },
    404	{ 58982400, P_PLL8, 1, 96, 625 },
    405	{ 64000000, P_PLL8, 2,  1,   3 },
    406	{ }
    407};
    408
    409static struct clk_rcg gsbi1_uart_src = {
    410	.ns_reg = 0x29d4,
    411	.md_reg = 0x29d0,
    412	.mn = {
    413		.mnctr_en_bit = 8,
    414		.mnctr_reset_bit = 7,
    415		.mnctr_mode_shift = 5,
    416		.n_val_shift = 16,
    417		.m_val_shift = 16,
    418		.width = 16,
    419	},
    420	.p = {
    421		.pre_div_shift = 3,
    422		.pre_div_width = 2,
    423	},
    424	.s = {
    425		.src_sel_shift = 0,
    426		.parent_map = gcc_pxo_pll8_map,
    427	},
    428	.freq_tbl = clk_tbl_gsbi_uart,
    429	.clkr = {
    430		.enable_reg = 0x29d4,
    431		.enable_mask = BIT(11),
    432		.hw.init = &(struct clk_init_data){
    433			.name = "gsbi1_uart_src",
    434			.parent_data = gcc_pxo_pll8,
    435			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
    436			.ops = &clk_rcg_ops,
    437			.flags = CLK_SET_PARENT_GATE,
    438		},
    439	},
    440};
    441
    442static struct clk_branch gsbi1_uart_clk = {
    443	.halt_reg = 0x2fcc,
    444	.halt_bit = 12,
    445	.clkr = {
    446		.enable_reg = 0x29d4,
    447		.enable_mask = BIT(9),
    448		.hw.init = &(struct clk_init_data){
    449			.name = "gsbi1_uart_clk",
    450			.parent_hws = (const struct clk_hw*[]){
    451				&gsbi1_uart_src.clkr.hw,
    452			},
    453			.num_parents = 1,
    454			.ops = &clk_branch_ops,
    455			.flags = CLK_SET_RATE_PARENT,
    456		},
    457	},
    458};
    459
    460static struct clk_rcg gsbi2_uart_src = {
    461	.ns_reg = 0x29f4,
    462	.md_reg = 0x29f0,
    463	.mn = {
    464		.mnctr_en_bit = 8,
    465		.mnctr_reset_bit = 7,
    466		.mnctr_mode_shift = 5,
    467		.n_val_shift = 16,
    468		.m_val_shift = 16,
    469		.width = 16,
    470	},
    471	.p = {
    472		.pre_div_shift = 3,
    473		.pre_div_width = 2,
    474	},
    475	.s = {
    476		.src_sel_shift = 0,
    477		.parent_map = gcc_pxo_pll8_map,
    478	},
    479	.freq_tbl = clk_tbl_gsbi_uart,
    480	.clkr = {
    481		.enable_reg = 0x29f4,
    482		.enable_mask = BIT(11),
    483		.hw.init = &(struct clk_init_data){
    484			.name = "gsbi2_uart_src",
    485			.parent_data = gcc_pxo_pll8,
    486			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
    487			.ops = &clk_rcg_ops,
    488			.flags = CLK_SET_PARENT_GATE,
    489		},
    490	},
    491};
    492
    493static struct clk_branch gsbi2_uart_clk = {
    494	.halt_reg = 0x2fcc,
    495	.halt_bit = 8,
    496	.clkr = {
    497		.enable_reg = 0x29f4,
    498		.enable_mask = BIT(9),
    499		.hw.init = &(struct clk_init_data){
    500			.name = "gsbi2_uart_clk",
    501			.parent_hws = (const struct clk_hw*[]){
    502				&gsbi2_uart_src.clkr.hw,
    503			},
    504			.num_parents = 1,
    505			.ops = &clk_branch_ops,
    506			.flags = CLK_SET_RATE_PARENT,
    507		},
    508	},
    509};
    510
    511static struct clk_rcg gsbi4_uart_src = {
    512	.ns_reg = 0x2a34,
    513	.md_reg = 0x2a30,
    514	.mn = {
    515		.mnctr_en_bit = 8,
    516		.mnctr_reset_bit = 7,
    517		.mnctr_mode_shift = 5,
    518		.n_val_shift = 16,
    519		.m_val_shift = 16,
    520		.width = 16,
    521	},
    522	.p = {
    523		.pre_div_shift = 3,
    524		.pre_div_width = 2,
    525	},
    526	.s = {
    527		.src_sel_shift = 0,
    528		.parent_map = gcc_pxo_pll8_map,
    529	},
    530	.freq_tbl = clk_tbl_gsbi_uart,
    531	.clkr = {
    532		.enable_reg = 0x2a34,
    533		.enable_mask = BIT(11),
    534		.hw.init = &(struct clk_init_data){
    535			.name = "gsbi4_uart_src",
    536			.parent_data = gcc_pxo_pll8,
    537			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
    538			.ops = &clk_rcg_ops,
    539			.flags = CLK_SET_PARENT_GATE,
    540		},
    541	},
    542};
    543
    544static struct clk_branch gsbi4_uart_clk = {
    545	.halt_reg = 0x2fd0,
    546	.halt_bit = 26,
    547	.clkr = {
    548		.enable_reg = 0x2a34,
    549		.enable_mask = BIT(9),
    550		.hw.init = &(struct clk_init_data){
    551			.name = "gsbi4_uart_clk",
    552			.parent_hws = (const struct clk_hw*[]){
    553				&gsbi4_uart_src.clkr.hw,
    554			},
    555			.num_parents = 1,
    556			.ops = &clk_branch_ops,
    557			.flags = CLK_SET_RATE_PARENT,
    558		},
    559	},
    560};
    561
    562static struct clk_rcg gsbi5_uart_src = {
    563	.ns_reg = 0x2a54,
    564	.md_reg = 0x2a50,
    565	.mn = {
    566		.mnctr_en_bit = 8,
    567		.mnctr_reset_bit = 7,
    568		.mnctr_mode_shift = 5,
    569		.n_val_shift = 16,
    570		.m_val_shift = 16,
    571		.width = 16,
    572	},
    573	.p = {
    574		.pre_div_shift = 3,
    575		.pre_div_width = 2,
    576	},
    577	.s = {
    578		.src_sel_shift = 0,
    579		.parent_map = gcc_pxo_pll8_map,
    580	},
    581	.freq_tbl = clk_tbl_gsbi_uart,
    582	.clkr = {
    583		.enable_reg = 0x2a54,
    584		.enable_mask = BIT(11),
    585		.hw.init = &(struct clk_init_data){
    586			.name = "gsbi5_uart_src",
    587			.parent_data = gcc_pxo_pll8,
    588			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
    589			.ops = &clk_rcg_ops,
    590			.flags = CLK_SET_PARENT_GATE,
    591		},
    592	},
    593};
    594
    595static struct clk_branch gsbi5_uart_clk = {
    596	.halt_reg = 0x2fd0,
    597	.halt_bit = 22,
    598	.clkr = {
    599		.enable_reg = 0x2a54,
    600		.enable_mask = BIT(9),
    601		.hw.init = &(struct clk_init_data){
    602			.name = "gsbi5_uart_clk",
    603			.parent_hws = (const struct clk_hw*[]){
    604				&gsbi5_uart_src.clkr.hw,
    605			},
    606			.num_parents = 1,
    607			.ops = &clk_branch_ops,
    608			.flags = CLK_SET_RATE_PARENT,
    609		},
    610	},
    611};
    612
    613static struct clk_rcg gsbi6_uart_src = {
    614	.ns_reg = 0x2a74,
    615	.md_reg = 0x2a70,
    616	.mn = {
    617		.mnctr_en_bit = 8,
    618		.mnctr_reset_bit = 7,
    619		.mnctr_mode_shift = 5,
    620		.n_val_shift = 16,
    621		.m_val_shift = 16,
    622		.width = 16,
    623	},
    624	.p = {
    625		.pre_div_shift = 3,
    626		.pre_div_width = 2,
    627	},
    628	.s = {
    629		.src_sel_shift = 0,
    630		.parent_map = gcc_pxo_pll8_map,
    631	},
    632	.freq_tbl = clk_tbl_gsbi_uart,
    633	.clkr = {
    634		.enable_reg = 0x2a74,
    635		.enable_mask = BIT(11),
    636		.hw.init = &(struct clk_init_data){
    637			.name = "gsbi6_uart_src",
    638			.parent_data = gcc_pxo_pll8,
    639			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
    640			.ops = &clk_rcg_ops,
    641			.flags = CLK_SET_PARENT_GATE,
    642		},
    643	},
    644};
    645
    646static struct clk_branch gsbi6_uart_clk = {
    647	.halt_reg = 0x2fd0,
    648	.halt_bit = 18,
    649	.clkr = {
    650		.enable_reg = 0x2a74,
    651		.enable_mask = BIT(9),
    652		.hw.init = &(struct clk_init_data){
    653			.name = "gsbi6_uart_clk",
    654			.parent_hws = (const struct clk_hw*[]){
    655				&gsbi6_uart_src.clkr.hw,
    656			},
    657			.num_parents = 1,
    658			.ops = &clk_branch_ops,
    659			.flags = CLK_SET_RATE_PARENT,
    660		},
    661	},
    662};
    663
    664static struct clk_rcg gsbi7_uart_src = {
    665	.ns_reg = 0x2a94,
    666	.md_reg = 0x2a90,
    667	.mn = {
    668		.mnctr_en_bit = 8,
    669		.mnctr_reset_bit = 7,
    670		.mnctr_mode_shift = 5,
    671		.n_val_shift = 16,
    672		.m_val_shift = 16,
    673		.width = 16,
    674	},
    675	.p = {
    676		.pre_div_shift = 3,
    677		.pre_div_width = 2,
    678	},
    679	.s = {
    680		.src_sel_shift = 0,
    681		.parent_map = gcc_pxo_pll8_map,
    682	},
    683	.freq_tbl = clk_tbl_gsbi_uart,
    684	.clkr = {
    685		.enable_reg = 0x2a94,
    686		.enable_mask = BIT(11),
    687		.hw.init = &(struct clk_init_data){
    688			.name = "gsbi7_uart_src",
    689			.parent_data = gcc_pxo_pll8,
    690			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
    691			.ops = &clk_rcg_ops,
    692			.flags = CLK_SET_PARENT_GATE,
    693		},
    694	},
    695};
    696
    697static struct clk_branch gsbi7_uart_clk = {
    698	.halt_reg = 0x2fd0,
    699	.halt_bit = 14,
    700	.clkr = {
    701		.enable_reg = 0x2a94,
    702		.enable_mask = BIT(9),
    703		.hw.init = &(struct clk_init_data){
    704			.name = "gsbi7_uart_clk",
    705			.parent_hws = (const struct clk_hw*[]){
    706				&gsbi7_uart_src.clkr.hw,
    707			},
    708			.num_parents = 1,
    709			.ops = &clk_branch_ops,
    710			.flags = CLK_SET_RATE_PARENT,
    711		},
    712	},
    713};
    714
    715static struct freq_tbl clk_tbl_gsbi_qup[] = {
    716	{  1100000, P_PXO,  1, 2, 49 },
    717	{  5400000, P_PXO,  1, 1,  5 },
    718	{ 10800000, P_PXO,  1, 2,  5 },
    719	{ 15060000, P_PLL8, 1, 2, 51 },
    720	{ 24000000, P_PLL8, 4, 1,  4 },
    721	{ 25000000, P_PXO,  1, 0,  0 },
    722	{ 25600000, P_PLL8, 1, 1, 15 },
    723	{ 48000000, P_PLL8, 4, 1,  2 },
    724	{ 51200000, P_PLL8, 1, 2, 15 },
    725	{ }
    726};
    727
    728static struct clk_rcg gsbi1_qup_src = {
    729	.ns_reg = 0x29cc,
    730	.md_reg = 0x29c8,
    731	.mn = {
    732		.mnctr_en_bit = 8,
    733		.mnctr_reset_bit = 7,
    734		.mnctr_mode_shift = 5,
    735		.n_val_shift = 16,
    736		.m_val_shift = 16,
    737		.width = 8,
    738	},
    739	.p = {
    740		.pre_div_shift = 3,
    741		.pre_div_width = 2,
    742	},
    743	.s = {
    744		.src_sel_shift = 0,
    745		.parent_map = gcc_pxo_pll8_map,
    746	},
    747	.freq_tbl = clk_tbl_gsbi_qup,
    748	.clkr = {
    749		.enable_reg = 0x29cc,
    750		.enable_mask = BIT(11),
    751		.hw.init = &(struct clk_init_data){
    752			.name = "gsbi1_qup_src",
    753			.parent_data = gcc_pxo_pll8,
    754			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
    755			.ops = &clk_rcg_ops,
    756			.flags = CLK_SET_PARENT_GATE,
    757		},
    758	},
    759};
    760
    761static struct clk_branch gsbi1_qup_clk = {
    762	.halt_reg = 0x2fcc,
    763	.halt_bit = 11,
    764	.clkr = {
    765		.enable_reg = 0x29cc,
    766		.enable_mask = BIT(9),
    767		.hw.init = &(struct clk_init_data){
    768			.name = "gsbi1_qup_clk",
    769			.parent_hws = (const struct clk_hw*[]){
    770				&gsbi1_qup_src.clkr.hw,
    771			},
    772			.num_parents = 1,
    773			.ops = &clk_branch_ops,
    774			.flags = CLK_SET_RATE_PARENT,
    775		},
    776	},
    777};
    778
    779static struct clk_rcg gsbi2_qup_src = {
    780	.ns_reg = 0x29ec,
    781	.md_reg = 0x29e8,
    782	.mn = {
    783		.mnctr_en_bit = 8,
    784		.mnctr_reset_bit = 7,
    785		.mnctr_mode_shift = 5,
    786		.n_val_shift = 16,
    787		.m_val_shift = 16,
    788		.width = 8,
    789	},
    790	.p = {
    791		.pre_div_shift = 3,
    792		.pre_div_width = 2,
    793	},
    794	.s = {
    795		.src_sel_shift = 0,
    796		.parent_map = gcc_pxo_pll8_map,
    797	},
    798	.freq_tbl = clk_tbl_gsbi_qup,
    799	.clkr = {
    800		.enable_reg = 0x29ec,
    801		.enable_mask = BIT(11),
    802		.hw.init = &(struct clk_init_data){
    803			.name = "gsbi2_qup_src",
    804			.parent_data = gcc_pxo_pll8,
    805			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
    806			.ops = &clk_rcg_ops,
    807			.flags = CLK_SET_PARENT_GATE,
    808		},
    809	},
    810};
    811
    812static struct clk_branch gsbi2_qup_clk = {
    813	.halt_reg = 0x2fcc,
    814	.halt_bit = 6,
    815	.clkr = {
    816		.enable_reg = 0x29ec,
    817		.enable_mask = BIT(9),
    818		.hw.init = &(struct clk_init_data){
    819			.name = "gsbi2_qup_clk",
    820			.parent_hws = (const struct clk_hw*[]){
    821				&gsbi2_qup_src.clkr.hw,
    822			},
    823			.num_parents = 1,
    824			.ops = &clk_branch_ops,
    825			.flags = CLK_SET_RATE_PARENT,
    826		},
    827	},
    828};
    829
    830static struct clk_rcg gsbi4_qup_src = {
    831	.ns_reg = 0x2a2c,
    832	.md_reg = 0x2a28,
    833	.mn = {
    834		.mnctr_en_bit = 8,
    835		.mnctr_reset_bit = 7,
    836		.mnctr_mode_shift = 5,
    837		.n_val_shift = 16,
    838		.m_val_shift = 16,
    839		.width = 8,
    840	},
    841	.p = {
    842		.pre_div_shift = 3,
    843		.pre_div_width = 2,
    844	},
    845	.s = {
    846		.src_sel_shift = 0,
    847		.parent_map = gcc_pxo_pll8_map,
    848	},
    849	.freq_tbl = clk_tbl_gsbi_qup,
    850	.clkr = {
    851		.enable_reg = 0x2a2c,
    852		.enable_mask = BIT(11),
    853		.hw.init = &(struct clk_init_data){
    854			.name = "gsbi4_qup_src",
    855			.parent_data = gcc_pxo_pll8,
    856			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
    857			.ops = &clk_rcg_ops,
    858			.flags = CLK_SET_PARENT_GATE | CLK_IGNORE_UNUSED,
    859		},
    860	},
    861};
    862
    863static struct clk_branch gsbi4_qup_clk = {
    864	.halt_reg = 0x2fd0,
    865	.halt_bit = 24,
    866	.clkr = {
    867		.enable_reg = 0x2a2c,
    868		.enable_mask = BIT(9),
    869		.hw.init = &(struct clk_init_data){
    870			.name = "gsbi4_qup_clk",
    871			.parent_hws = (const struct clk_hw*[]){
    872				&gsbi4_qup_src.clkr.hw,
    873			},
    874			.num_parents = 1,
    875			.ops = &clk_branch_ops,
    876			.flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
    877		},
    878	},
    879};
    880
    881static struct clk_rcg gsbi5_qup_src = {
    882	.ns_reg = 0x2a4c,
    883	.md_reg = 0x2a48,
    884	.mn = {
    885		.mnctr_en_bit = 8,
    886		.mnctr_reset_bit = 7,
    887		.mnctr_mode_shift = 5,
    888		.n_val_shift = 16,
    889		.m_val_shift = 16,
    890		.width = 8,
    891	},
    892	.p = {
    893		.pre_div_shift = 3,
    894		.pre_div_width = 2,
    895	},
    896	.s = {
    897		.src_sel_shift = 0,
    898		.parent_map = gcc_pxo_pll8_map,
    899	},
    900	.freq_tbl = clk_tbl_gsbi_qup,
    901	.clkr = {
    902		.enable_reg = 0x2a4c,
    903		.enable_mask = BIT(11),
    904		.hw.init = &(struct clk_init_data){
    905			.name = "gsbi5_qup_src",
    906			.parent_data = gcc_pxo_pll8,
    907			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
    908			.ops = &clk_rcg_ops,
    909			.flags = CLK_SET_PARENT_GATE,
    910		},
    911	},
    912};
    913
    914static struct clk_branch gsbi5_qup_clk = {
    915	.halt_reg = 0x2fd0,
    916	.halt_bit = 20,
    917	.clkr = {
    918		.enable_reg = 0x2a4c,
    919		.enable_mask = BIT(9),
    920		.hw.init = &(struct clk_init_data){
    921			.name = "gsbi5_qup_clk",
    922			.parent_hws = (const struct clk_hw*[]){
    923				&gsbi5_qup_src.clkr.hw,
    924			},
    925			.num_parents = 1,
    926			.ops = &clk_branch_ops,
    927			.flags = CLK_SET_RATE_PARENT,
    928		},
    929	},
    930};
    931
    932static struct clk_rcg gsbi6_qup_src = {
    933	.ns_reg = 0x2a6c,
    934	.md_reg = 0x2a68,
    935	.mn = {
    936		.mnctr_en_bit = 8,
    937		.mnctr_reset_bit = 7,
    938		.mnctr_mode_shift = 5,
    939		.n_val_shift = 16,
    940		.m_val_shift = 16,
    941		.width = 8,
    942	},
    943	.p = {
    944		.pre_div_shift = 3,
    945		.pre_div_width = 2,
    946	},
    947	.s = {
    948		.src_sel_shift = 0,
    949		.parent_map = gcc_pxo_pll8_map,
    950	},
    951	.freq_tbl = clk_tbl_gsbi_qup,
    952	.clkr = {
    953		.enable_reg = 0x2a6c,
    954		.enable_mask = BIT(11),
    955		.hw.init = &(struct clk_init_data){
    956			.name = "gsbi6_qup_src",
    957			.parent_data = gcc_pxo_pll8,
    958			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
    959			.ops = &clk_rcg_ops,
    960			.flags = CLK_SET_PARENT_GATE | CLK_IGNORE_UNUSED,
    961		},
    962	},
    963};
    964
    965static struct clk_branch gsbi6_qup_clk = {
    966	.halt_reg = 0x2fd0,
    967	.halt_bit = 16,
    968	.clkr = {
    969		.enable_reg = 0x2a6c,
    970		.enable_mask = BIT(9),
    971		.hw.init = &(struct clk_init_data){
    972			.name = "gsbi6_qup_clk",
    973			.parent_hws = (const struct clk_hw*[]){
    974				&gsbi6_qup_src.clkr.hw,
    975			},
    976			.num_parents = 1,
    977			.ops = &clk_branch_ops,
    978			.flags = CLK_SET_RATE_PARENT,
    979		},
    980	},
    981};
    982
    983static struct clk_rcg gsbi7_qup_src = {
    984	.ns_reg = 0x2a8c,
    985	.md_reg = 0x2a88,
    986	.mn = {
    987		.mnctr_en_bit = 8,
    988		.mnctr_reset_bit = 7,
    989		.mnctr_mode_shift = 5,
    990		.n_val_shift = 16,
    991		.m_val_shift = 16,
    992		.width = 8,
    993	},
    994	.p = {
    995		.pre_div_shift = 3,
    996		.pre_div_width = 2,
    997	},
    998	.s = {
    999		.src_sel_shift = 0,
   1000		.parent_map = gcc_pxo_pll8_map,
   1001	},
   1002	.freq_tbl = clk_tbl_gsbi_qup,
   1003	.clkr = {
   1004		.enable_reg = 0x2a8c,
   1005		.enable_mask = BIT(11),
   1006		.hw.init = &(struct clk_init_data){
   1007			.name = "gsbi7_qup_src",
   1008			.parent_data = gcc_pxo_pll8,
   1009			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
   1010			.ops = &clk_rcg_ops,
   1011			.flags = CLK_SET_PARENT_GATE,
   1012		},
   1013	},
   1014};
   1015
   1016static struct clk_branch gsbi7_qup_clk = {
   1017	.halt_reg = 0x2fd0,
   1018	.halt_bit = 12,
   1019	.clkr = {
   1020		.enable_reg = 0x2a8c,
   1021		.enable_mask = BIT(9),
   1022		.hw.init = &(struct clk_init_data){
   1023			.name = "gsbi7_qup_clk",
   1024			.parent_hws = (const struct clk_hw*[]){
   1025				&gsbi7_qup_src.clkr.hw,
   1026			},
   1027			.num_parents = 1,
   1028			.ops = &clk_branch_ops,
   1029			.flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
   1030		},
   1031	},
   1032};
   1033
   1034static struct clk_branch gsbi1_h_clk = {
   1035	.hwcg_reg = 0x29c0,
   1036	.hwcg_bit = 6,
   1037	.halt_reg = 0x2fcc,
   1038	.halt_bit = 13,
   1039	.clkr = {
   1040		.enable_reg = 0x29c0,
   1041		.enable_mask = BIT(4),
   1042		.hw.init = &(struct clk_init_data){
   1043			.name = "gsbi1_h_clk",
   1044			.ops = &clk_branch_ops,
   1045		},
   1046	},
   1047};
   1048
   1049static struct clk_branch gsbi2_h_clk = {
   1050	.hwcg_reg = 0x29e0,
   1051	.hwcg_bit = 6,
   1052	.halt_reg = 0x2fcc,
   1053	.halt_bit = 9,
   1054	.clkr = {
   1055		.enable_reg = 0x29e0,
   1056		.enable_mask = BIT(4),
   1057		.hw.init = &(struct clk_init_data){
   1058			.name = "gsbi2_h_clk",
   1059			.ops = &clk_branch_ops,
   1060		},
   1061	},
   1062};
   1063
   1064static struct clk_branch gsbi4_h_clk = {
   1065	.hwcg_reg = 0x2a20,
   1066	.hwcg_bit = 6,
   1067	.halt_reg = 0x2fd0,
   1068	.halt_bit = 27,
   1069	.clkr = {
   1070		.enable_reg = 0x2a20,
   1071		.enable_mask = BIT(4),
   1072		.hw.init = &(struct clk_init_data){
   1073			.name = "gsbi4_h_clk",
   1074			.ops = &clk_branch_ops,
   1075			.flags = CLK_IGNORE_UNUSED,
   1076		},
   1077	},
   1078};
   1079
   1080static struct clk_branch gsbi5_h_clk = {
   1081	.hwcg_reg = 0x2a40,
   1082	.hwcg_bit = 6,
   1083	.halt_reg = 0x2fd0,
   1084	.halt_bit = 23,
   1085	.clkr = {
   1086		.enable_reg = 0x2a40,
   1087		.enable_mask = BIT(4),
   1088		.hw.init = &(struct clk_init_data){
   1089			.name = "gsbi5_h_clk",
   1090			.ops = &clk_branch_ops,
   1091		},
   1092	},
   1093};
   1094
   1095static struct clk_branch gsbi6_h_clk = {
   1096	.hwcg_reg = 0x2a60,
   1097	.hwcg_bit = 6,
   1098	.halt_reg = 0x2fd0,
   1099	.halt_bit = 19,
   1100	.clkr = {
   1101		.enable_reg = 0x2a60,
   1102		.enable_mask = BIT(4),
   1103		.hw.init = &(struct clk_init_data){
   1104			.name = "gsbi6_h_clk",
   1105			.ops = &clk_branch_ops,
   1106		},
   1107	},
   1108};
   1109
   1110static struct clk_branch gsbi7_h_clk = {
   1111	.hwcg_reg = 0x2a80,
   1112	.hwcg_bit = 6,
   1113	.halt_reg = 0x2fd0,
   1114	.halt_bit = 15,
   1115	.clkr = {
   1116		.enable_reg = 0x2a80,
   1117		.enable_mask = BIT(4),
   1118		.hw.init = &(struct clk_init_data){
   1119			.name = "gsbi7_h_clk",
   1120			.ops = &clk_branch_ops,
   1121		},
   1122	},
   1123};
   1124
   1125static const struct freq_tbl clk_tbl_gp[] = {
   1126	{ 12500000, P_PXO,  2, 0, 0 },
   1127	{ 25000000, P_PXO,  1, 0, 0 },
   1128	{ 64000000, P_PLL8, 2, 1, 3 },
   1129	{ 76800000, P_PLL8, 1, 1, 5 },
   1130	{ 96000000, P_PLL8, 4, 0, 0 },
   1131	{ 128000000, P_PLL8, 3, 0, 0 },
   1132	{ 192000000, P_PLL8, 2, 0, 0 },
   1133	{ }
   1134};
   1135
   1136static struct clk_rcg gp0_src = {
   1137	.ns_reg = 0x2d24,
   1138	.md_reg = 0x2d00,
   1139	.mn = {
   1140		.mnctr_en_bit = 8,
   1141		.mnctr_reset_bit = 7,
   1142		.mnctr_mode_shift = 5,
   1143		.n_val_shift = 16,
   1144		.m_val_shift = 16,
   1145		.width = 8,
   1146	},
   1147	.p = {
   1148		.pre_div_shift = 3,
   1149		.pre_div_width = 2,
   1150	},
   1151	.s = {
   1152		.src_sel_shift = 0,
   1153		.parent_map = gcc_pxo_pll8_cxo_map,
   1154	},
   1155	.freq_tbl = clk_tbl_gp,
   1156	.clkr = {
   1157		.enable_reg = 0x2d24,
   1158		.enable_mask = BIT(11),
   1159		.hw.init = &(struct clk_init_data){
   1160			.name = "gp0_src",
   1161			.parent_data = gcc_pxo_pll8_cxo,
   1162			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_cxo),
   1163			.ops = &clk_rcg_ops,
   1164			.flags = CLK_SET_PARENT_GATE,
   1165		},
   1166	}
   1167};
   1168
   1169static struct clk_branch gp0_clk = {
   1170	.halt_reg = 0x2fd8,
   1171	.halt_bit = 7,
   1172	.clkr = {
   1173		.enable_reg = 0x2d24,
   1174		.enable_mask = BIT(9),
   1175		.hw.init = &(struct clk_init_data){
   1176			.name = "gp0_clk",
   1177			.parent_hws = (const struct clk_hw*[]){
   1178				&gp0_src.clkr.hw,
   1179			},
   1180			.num_parents = 1,
   1181			.ops = &clk_branch_ops,
   1182			.flags = CLK_SET_RATE_PARENT,
   1183		},
   1184	},
   1185};
   1186
   1187static struct clk_rcg gp1_src = {
   1188	.ns_reg = 0x2d44,
   1189	.md_reg = 0x2d40,
   1190	.mn = {
   1191		.mnctr_en_bit = 8,
   1192		.mnctr_reset_bit = 7,
   1193		.mnctr_mode_shift = 5,
   1194		.n_val_shift = 16,
   1195		.m_val_shift = 16,
   1196		.width = 8,
   1197	},
   1198	.p = {
   1199		.pre_div_shift = 3,
   1200		.pre_div_width = 2,
   1201	},
   1202	.s = {
   1203		.src_sel_shift = 0,
   1204		.parent_map = gcc_pxo_pll8_cxo_map,
   1205	},
   1206	.freq_tbl = clk_tbl_gp,
   1207	.clkr = {
   1208		.enable_reg = 0x2d44,
   1209		.enable_mask = BIT(11),
   1210		.hw.init = &(struct clk_init_data){
   1211			.name = "gp1_src",
   1212			.parent_data = gcc_pxo_pll8_cxo,
   1213			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_cxo),
   1214			.ops = &clk_rcg_ops,
   1215			.flags = CLK_SET_RATE_GATE,
   1216		},
   1217	}
   1218};
   1219
   1220static struct clk_branch gp1_clk = {
   1221	.halt_reg = 0x2fd8,
   1222	.halt_bit = 6,
   1223	.clkr = {
   1224		.enable_reg = 0x2d44,
   1225		.enable_mask = BIT(9),
   1226		.hw.init = &(struct clk_init_data){
   1227			.name = "gp1_clk",
   1228			.parent_hws = (const struct clk_hw*[]){
   1229				&gp1_src.clkr.hw,
   1230			},
   1231			.num_parents = 1,
   1232			.ops = &clk_branch_ops,
   1233			.flags = CLK_SET_RATE_PARENT,
   1234		},
   1235	},
   1236};
   1237
   1238static struct clk_rcg gp2_src = {
   1239	.ns_reg = 0x2d64,
   1240	.md_reg = 0x2d60,
   1241	.mn = {
   1242		.mnctr_en_bit = 8,
   1243		.mnctr_reset_bit = 7,
   1244		.mnctr_mode_shift = 5,
   1245		.n_val_shift = 16,
   1246		.m_val_shift = 16,
   1247		.width = 8,
   1248	},
   1249	.p = {
   1250		.pre_div_shift = 3,
   1251		.pre_div_width = 2,
   1252	},
   1253	.s = {
   1254		.src_sel_shift = 0,
   1255		.parent_map = gcc_pxo_pll8_cxo_map,
   1256	},
   1257	.freq_tbl = clk_tbl_gp,
   1258	.clkr = {
   1259		.enable_reg = 0x2d64,
   1260		.enable_mask = BIT(11),
   1261		.hw.init = &(struct clk_init_data){
   1262			.name = "gp2_src",
   1263			.parent_data = gcc_pxo_pll8_cxo,
   1264			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_cxo),
   1265			.ops = &clk_rcg_ops,
   1266			.flags = CLK_SET_RATE_GATE,
   1267		},
   1268	}
   1269};
   1270
   1271static struct clk_branch gp2_clk = {
   1272	.halt_reg = 0x2fd8,
   1273	.halt_bit = 5,
   1274	.clkr = {
   1275		.enable_reg = 0x2d64,
   1276		.enable_mask = BIT(9),
   1277		.hw.init = &(struct clk_init_data){
   1278			.name = "gp2_clk",
   1279			.parent_hws = (const struct clk_hw*[]){
   1280				&gp2_src.clkr.hw,
   1281			},
   1282			.num_parents = 1,
   1283			.ops = &clk_branch_ops,
   1284			.flags = CLK_SET_RATE_PARENT,
   1285		},
   1286	},
   1287};
   1288
   1289static struct clk_branch pmem_clk = {
   1290	.hwcg_reg = 0x25a0,
   1291	.hwcg_bit = 6,
   1292	.halt_reg = 0x2fc8,
   1293	.halt_bit = 20,
   1294	.clkr = {
   1295		.enable_reg = 0x25a0,
   1296		.enable_mask = BIT(4),
   1297		.hw.init = &(struct clk_init_data){
   1298			.name = "pmem_clk",
   1299			.ops = &clk_branch_ops,
   1300		},
   1301	},
   1302};
   1303
   1304static struct clk_rcg prng_src = {
   1305	.ns_reg = 0x2e80,
   1306	.p = {
   1307		.pre_div_shift = 3,
   1308		.pre_div_width = 4,
   1309	},
   1310	.s = {
   1311		.src_sel_shift = 0,
   1312		.parent_map = gcc_pxo_pll8_map,
   1313	},
   1314	.clkr = {
   1315		.enable_reg = 0x2e80,
   1316		.enable_mask = BIT(11),
   1317		.hw.init = &(struct clk_init_data){
   1318			.name = "prng_src",
   1319			.parent_data = gcc_pxo_pll8,
   1320			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
   1321			.ops = &clk_rcg_ops,
   1322		},
   1323	},
   1324};
   1325
   1326static struct clk_branch prng_clk = {
   1327	.halt_reg = 0x2fd8,
   1328	.halt_check = BRANCH_HALT_VOTED,
   1329	.halt_bit = 10,
   1330	.clkr = {
   1331		.enable_reg = 0x3080,
   1332		.enable_mask = BIT(10),
   1333		.hw.init = &(struct clk_init_data){
   1334			.name = "prng_clk",
   1335			.parent_hws = (const struct clk_hw*[]){
   1336				&prng_src.clkr.hw,
   1337			},
   1338			.num_parents = 1,
   1339			.ops = &clk_branch_ops,
   1340		},
   1341	},
   1342};
   1343
   1344static const struct freq_tbl clk_tbl_sdc[] = {
   1345	{    200000, P_PXO,   2, 2, 125 },
   1346	{    400000, P_PLL8,  4, 1, 240 },
   1347	{  16000000, P_PLL8,  4, 1,   6 },
   1348	{  17070000, P_PLL8,  1, 2,  45 },
   1349	{  20210000, P_PLL8,  1, 1,  19 },
   1350	{  24000000, P_PLL8,  4, 1,   4 },
   1351	{  48000000, P_PLL8,  4, 1,   2 },
   1352	{  51200000, P_PLL8,  1, 2,  15 },
   1353	{  64000000, P_PLL8,  3, 1,   2 },
   1354	{  96000000, P_PLL8,  4, 0,   0 },
   1355	{ 192000000, P_PLL8,  2, 0,   0 },
   1356	{ }
   1357};
   1358
   1359static struct clk_rcg sdc1_src = {
   1360	.ns_reg = 0x282c,
   1361	.md_reg = 0x2828,
   1362	.mn = {
   1363		.mnctr_en_bit = 8,
   1364		.mnctr_reset_bit = 7,
   1365		.mnctr_mode_shift = 5,
   1366		.n_val_shift = 16,
   1367		.m_val_shift = 16,
   1368		.width = 8,
   1369	},
   1370	.p = {
   1371		.pre_div_shift = 3,
   1372		.pre_div_width = 2,
   1373	},
   1374	.s = {
   1375		.src_sel_shift = 0,
   1376		.parent_map = gcc_pxo_pll8_map,
   1377	},
   1378	.freq_tbl = clk_tbl_sdc,
   1379	.clkr = {
   1380		.enable_reg = 0x282c,
   1381		.enable_mask = BIT(11),
   1382		.hw.init = &(struct clk_init_data){
   1383			.name = "sdc1_src",
   1384			.parent_data = gcc_pxo_pll8,
   1385			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
   1386			.ops = &clk_rcg_floor_ops,
   1387		},
   1388	}
   1389};
   1390
   1391static struct clk_branch sdc1_clk = {
   1392	.halt_reg = 0x2fc8,
   1393	.halt_bit = 6,
   1394	.clkr = {
   1395		.enable_reg = 0x282c,
   1396		.enable_mask = BIT(9),
   1397		.hw.init = &(struct clk_init_data){
   1398			.name = "sdc1_clk",
   1399			.parent_hws = (const struct clk_hw*[]){
   1400				&sdc1_src.clkr.hw,
   1401			},
   1402			.num_parents = 1,
   1403			.ops = &clk_branch_ops,
   1404			.flags = CLK_SET_RATE_PARENT,
   1405		},
   1406	},
   1407};
   1408
   1409static struct clk_rcg sdc3_src = {
   1410	.ns_reg = 0x286c,
   1411	.md_reg = 0x2868,
   1412	.mn = {
   1413		.mnctr_en_bit = 8,
   1414		.mnctr_reset_bit = 7,
   1415		.mnctr_mode_shift = 5,
   1416		.n_val_shift = 16,
   1417		.m_val_shift = 16,
   1418		.width = 8,
   1419	},
   1420	.p = {
   1421		.pre_div_shift = 3,
   1422		.pre_div_width = 2,
   1423	},
   1424	.s = {
   1425		.src_sel_shift = 0,
   1426		.parent_map = gcc_pxo_pll8_map,
   1427	},
   1428	.freq_tbl = clk_tbl_sdc,
   1429	.clkr = {
   1430		.enable_reg = 0x286c,
   1431		.enable_mask = BIT(11),
   1432		.hw.init = &(struct clk_init_data){
   1433			.name = "sdc3_src",
   1434			.parent_data = gcc_pxo_pll8,
   1435			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
   1436			.ops = &clk_rcg_ops,
   1437		},
   1438	}
   1439};
   1440
   1441static struct clk_branch sdc3_clk = {
   1442	.halt_reg = 0x2fc8,
   1443	.halt_bit = 4,
   1444	.clkr = {
   1445		.enable_reg = 0x286c,
   1446		.enable_mask = BIT(9),
   1447		.hw.init = &(struct clk_init_data){
   1448			.name = "sdc3_clk",
   1449			.parent_hws = (const struct clk_hw*[]){
   1450				&sdc3_src.clkr.hw,
   1451			},
   1452			.num_parents = 1,
   1453			.ops = &clk_branch_ops,
   1454			.flags = CLK_SET_RATE_PARENT,
   1455		},
   1456	},
   1457};
   1458
   1459static struct clk_branch sdc1_h_clk = {
   1460	.hwcg_reg = 0x2820,
   1461	.hwcg_bit = 6,
   1462	.halt_reg = 0x2fc8,
   1463	.halt_bit = 11,
   1464	.clkr = {
   1465		.enable_reg = 0x2820,
   1466		.enable_mask = BIT(4),
   1467		.hw.init = &(struct clk_init_data){
   1468			.name = "sdc1_h_clk",
   1469			.ops = &clk_branch_ops,
   1470		},
   1471	},
   1472};
   1473
   1474static struct clk_branch sdc3_h_clk = {
   1475	.hwcg_reg = 0x2860,
   1476	.hwcg_bit = 6,
   1477	.halt_reg = 0x2fc8,
   1478	.halt_bit = 9,
   1479	.clkr = {
   1480		.enable_reg = 0x2860,
   1481		.enable_mask = BIT(4),
   1482		.hw.init = &(struct clk_init_data){
   1483			.name = "sdc3_h_clk",
   1484			.ops = &clk_branch_ops,
   1485		},
   1486	},
   1487};
   1488
   1489static const struct freq_tbl clk_tbl_tsif_ref[] = {
   1490	{ 105000, P_PXO,  1, 1, 256 },
   1491	{ }
   1492};
   1493
   1494static struct clk_rcg tsif_ref_src = {
   1495	.ns_reg = 0x2710,
   1496	.md_reg = 0x270c,
   1497	.mn = {
   1498		.mnctr_en_bit = 8,
   1499		.mnctr_reset_bit = 7,
   1500		.mnctr_mode_shift = 5,
   1501		.n_val_shift = 16,
   1502		.m_val_shift = 16,
   1503		.width = 16,
   1504	},
   1505	.p = {
   1506		.pre_div_shift = 3,
   1507		.pre_div_width = 2,
   1508	},
   1509	.s = {
   1510		.src_sel_shift = 0,
   1511		.parent_map = gcc_pxo_pll8_map,
   1512	},
   1513	.freq_tbl = clk_tbl_tsif_ref,
   1514	.clkr = {
   1515		.enable_reg = 0x2710,
   1516		.enable_mask = BIT(11),
   1517		.hw.init = &(struct clk_init_data){
   1518			.name = "tsif_ref_src",
   1519			.parent_data = gcc_pxo_pll8,
   1520			.num_parents = ARRAY_SIZE(gcc_pxo_pll8),
   1521			.ops = &clk_rcg_ops,
   1522		},
   1523	}
   1524};
   1525
   1526static struct clk_branch tsif_ref_clk = {
   1527	.halt_reg = 0x2fd4,
   1528	.halt_bit = 5,
   1529	.clkr = {
   1530		.enable_reg = 0x2710,
   1531		.enable_mask = BIT(9),
   1532		.hw.init = &(struct clk_init_data){
   1533			.name = "tsif_ref_clk",
   1534			.parent_hws = (const struct clk_hw*[]){
   1535				&tsif_ref_src.clkr.hw,
   1536			},
   1537			.num_parents = 1,
   1538			.ops = &clk_branch_ops,
   1539			.flags = CLK_SET_RATE_PARENT,
   1540		},
   1541	},
   1542};
   1543
   1544static struct clk_branch tsif_h_clk = {
   1545	.hwcg_reg = 0x2700,
   1546	.hwcg_bit = 6,
   1547	.halt_reg = 0x2fd4,
   1548	.halt_bit = 7,
   1549	.clkr = {
   1550		.enable_reg = 0x2700,
   1551		.enable_mask = BIT(4),
   1552		.hw.init = &(struct clk_init_data){
   1553			.name = "tsif_h_clk",
   1554			.ops = &clk_branch_ops,
   1555		},
   1556	},
   1557};
   1558
   1559static struct clk_branch dma_bam_h_clk = {
   1560	.hwcg_reg = 0x25c0,
   1561	.hwcg_bit = 6,
   1562	.halt_reg = 0x2fc8,
   1563	.halt_bit = 12,
   1564	.clkr = {
   1565		.enable_reg = 0x25c0,
   1566		.enable_mask = BIT(4),
   1567		.hw.init = &(struct clk_init_data){
   1568			.name = "dma_bam_h_clk",
   1569			.ops = &clk_branch_ops,
   1570		},
   1571	},
   1572};
   1573
   1574static struct clk_branch adm0_clk = {
   1575	.halt_reg = 0x2fdc,
   1576	.halt_check = BRANCH_HALT_VOTED,
   1577	.halt_bit = 12,
   1578	.clkr = {
   1579		.enable_reg = 0x3080,
   1580		.enable_mask = BIT(2),
   1581		.hw.init = &(struct clk_init_data){
   1582			.name = "adm0_clk",
   1583			.ops = &clk_branch_ops,
   1584		},
   1585	},
   1586};
   1587
   1588static struct clk_branch adm0_pbus_clk = {
   1589	.hwcg_reg = 0x2208,
   1590	.hwcg_bit = 6,
   1591	.halt_reg = 0x2fdc,
   1592	.halt_check = BRANCH_HALT_VOTED,
   1593	.halt_bit = 11,
   1594	.clkr = {
   1595		.enable_reg = 0x3080,
   1596		.enable_mask = BIT(3),
   1597		.hw.init = &(struct clk_init_data){
   1598			.name = "adm0_pbus_clk",
   1599			.ops = &clk_branch_ops,
   1600		},
   1601	},
   1602};
   1603
   1604static struct clk_branch pmic_arb0_h_clk = {
   1605	.halt_reg = 0x2fd8,
   1606	.halt_check = BRANCH_HALT_VOTED,
   1607	.halt_bit = 22,
   1608	.clkr = {
   1609		.enable_reg = 0x3080,
   1610		.enable_mask = BIT(8),
   1611		.hw.init = &(struct clk_init_data){
   1612			.name = "pmic_arb0_h_clk",
   1613			.ops = &clk_branch_ops,
   1614		},
   1615	},
   1616};
   1617
   1618static struct clk_branch pmic_arb1_h_clk = {
   1619	.halt_reg = 0x2fd8,
   1620	.halt_check = BRANCH_HALT_VOTED,
   1621	.halt_bit = 21,
   1622	.clkr = {
   1623		.enable_reg = 0x3080,
   1624		.enable_mask = BIT(9),
   1625		.hw.init = &(struct clk_init_data){
   1626			.name = "pmic_arb1_h_clk",
   1627			.ops = &clk_branch_ops,
   1628		},
   1629	},
   1630};
   1631
   1632static struct clk_branch pmic_ssbi2_clk = {
   1633	.halt_reg = 0x2fd8,
   1634	.halt_check = BRANCH_HALT_VOTED,
   1635	.halt_bit = 23,
   1636	.clkr = {
   1637		.enable_reg = 0x3080,
   1638		.enable_mask = BIT(7),
   1639		.hw.init = &(struct clk_init_data){
   1640			.name = "pmic_ssbi2_clk",
   1641			.ops = &clk_branch_ops,
   1642		},
   1643	},
   1644};
   1645
   1646static struct clk_branch rpm_msg_ram_h_clk = {
   1647	.hwcg_reg = 0x27e0,
   1648	.hwcg_bit = 6,
   1649	.halt_reg = 0x2fd8,
   1650	.halt_check = BRANCH_HALT_VOTED,
   1651	.halt_bit = 12,
   1652	.clkr = {
   1653		.enable_reg = 0x3080,
   1654		.enable_mask = BIT(6),
   1655		.hw.init = &(struct clk_init_data){
   1656			.name = "rpm_msg_ram_h_clk",
   1657			.ops = &clk_branch_ops,
   1658		},
   1659	},
   1660};
   1661
   1662static const struct freq_tbl clk_tbl_pcie_ref[] = {
   1663	{ 100000000, P_PLL3,  12, 0, 0 },
   1664	{ }
   1665};
   1666
   1667static struct clk_rcg pcie_ref_src = {
   1668	.ns_reg = 0x3860,
   1669	.p = {
   1670		.pre_div_shift = 3,
   1671		.pre_div_width = 4,
   1672	},
   1673	.s = {
   1674		.src_sel_shift = 0,
   1675		.parent_map = gcc_pxo_pll3_map,
   1676	},
   1677	.freq_tbl = clk_tbl_pcie_ref,
   1678	.clkr = {
   1679		.enable_reg = 0x3860,
   1680		.enable_mask = BIT(11),
   1681		.hw.init = &(struct clk_init_data){
   1682			.name = "pcie_ref_src",
   1683			.parent_data = gcc_pxo_pll3,
   1684			.num_parents = ARRAY_SIZE(gcc_pxo_pll3),
   1685			.ops = &clk_rcg_ops,
   1686			.flags = CLK_SET_RATE_GATE,
   1687		},
   1688	},
   1689};
   1690
   1691static struct clk_branch pcie_ref_src_clk = {
   1692	.halt_reg = 0x2fdc,
   1693	.halt_bit = 30,
   1694	.clkr = {
   1695		.enable_reg = 0x3860,
   1696		.enable_mask = BIT(9),
   1697		.hw.init = &(struct clk_init_data){
   1698			.name = "pcie_ref_src_clk",
   1699			.parent_hws = (const struct clk_hw*[]){
   1700				&pcie_ref_src.clkr.hw,
   1701			},
   1702			.num_parents = 1,
   1703			.ops = &clk_branch_ops,
   1704			.flags = CLK_SET_RATE_PARENT,
   1705		},
   1706	},
   1707};
   1708
   1709static struct clk_branch pcie_a_clk = {
   1710	.halt_reg = 0x2fc0,
   1711	.halt_bit = 13,
   1712	.clkr = {
   1713		.enable_reg = 0x22c0,
   1714		.enable_mask = BIT(4),
   1715		.hw.init = &(struct clk_init_data){
   1716			.name = "pcie_a_clk",
   1717			.ops = &clk_branch_ops,
   1718		},
   1719	},
   1720};
   1721
   1722static struct clk_branch pcie_aux_clk = {
   1723	.halt_reg = 0x2fdc,
   1724	.halt_bit = 31,
   1725	.clkr = {
   1726		.enable_reg = 0x22c8,
   1727		.enable_mask = BIT(4),
   1728		.hw.init = &(struct clk_init_data){
   1729			.name = "pcie_aux_clk",
   1730			.ops = &clk_branch_ops,
   1731		},
   1732	},
   1733};
   1734
   1735static struct clk_branch pcie_h_clk = {
   1736	.halt_reg = 0x2fd4,
   1737	.halt_bit = 8,
   1738	.clkr = {
   1739		.enable_reg = 0x22cc,
   1740		.enable_mask = BIT(4),
   1741		.hw.init = &(struct clk_init_data){
   1742			.name = "pcie_h_clk",
   1743			.ops = &clk_branch_ops,
   1744		},
   1745	},
   1746};
   1747
   1748static struct clk_branch pcie_phy_clk = {
   1749	.halt_reg = 0x2fdc,
   1750	.halt_bit = 29,
   1751	.clkr = {
   1752		.enable_reg = 0x22d0,
   1753		.enable_mask = BIT(4),
   1754		.hw.init = &(struct clk_init_data){
   1755			.name = "pcie_phy_clk",
   1756			.ops = &clk_branch_ops,
   1757		},
   1758	},
   1759};
   1760
   1761static struct clk_rcg pcie1_ref_src = {
   1762	.ns_reg = 0x3aa0,
   1763	.p = {
   1764		.pre_div_shift = 3,
   1765		.pre_div_width = 4,
   1766	},
   1767	.s = {
   1768		.src_sel_shift = 0,
   1769		.parent_map = gcc_pxo_pll3_map,
   1770	},
   1771	.freq_tbl = clk_tbl_pcie_ref,
   1772	.clkr = {
   1773		.enable_reg = 0x3aa0,
   1774		.enable_mask = BIT(11),
   1775		.hw.init = &(struct clk_init_data){
   1776			.name = "pcie1_ref_src",
   1777			.parent_data = gcc_pxo_pll3,
   1778			.num_parents = ARRAY_SIZE(gcc_pxo_pll3),
   1779			.ops = &clk_rcg_ops,
   1780			.flags = CLK_SET_RATE_GATE,
   1781		},
   1782	},
   1783};
   1784
   1785static struct clk_branch pcie1_ref_src_clk = {
   1786	.halt_reg = 0x2fdc,
   1787	.halt_bit = 27,
   1788	.clkr = {
   1789		.enable_reg = 0x3aa0,
   1790		.enable_mask = BIT(9),
   1791		.hw.init = &(struct clk_init_data){
   1792			.name = "pcie1_ref_src_clk",
   1793			.parent_hws = (const struct clk_hw*[]){
   1794				&pcie1_ref_src.clkr.hw,
   1795			},
   1796			.num_parents = 1,
   1797			.ops = &clk_branch_ops,
   1798			.flags = CLK_SET_RATE_PARENT,
   1799		},
   1800	},
   1801};
   1802
   1803static struct clk_branch pcie1_a_clk = {
   1804	.halt_reg = 0x2fc0,
   1805	.halt_bit = 10,
   1806	.clkr = {
   1807		.enable_reg = 0x3a80,
   1808		.enable_mask = BIT(4),
   1809		.hw.init = &(struct clk_init_data){
   1810			.name = "pcie1_a_clk",
   1811			.ops = &clk_branch_ops,
   1812		},
   1813	},
   1814};
   1815
   1816static struct clk_branch pcie1_aux_clk = {
   1817	.halt_reg = 0x2fdc,
   1818	.halt_bit = 28,
   1819	.clkr = {
   1820		.enable_reg = 0x3a88,
   1821		.enable_mask = BIT(4),
   1822		.hw.init = &(struct clk_init_data){
   1823			.name = "pcie1_aux_clk",
   1824			.ops = &clk_branch_ops,
   1825		},
   1826	},
   1827};
   1828
   1829static struct clk_branch pcie1_h_clk = {
   1830	.halt_reg = 0x2fd4,
   1831	.halt_bit = 9,
   1832	.clkr = {
   1833		.enable_reg = 0x3a8c,
   1834		.enable_mask = BIT(4),
   1835		.hw.init = &(struct clk_init_data){
   1836			.name = "pcie1_h_clk",
   1837			.ops = &clk_branch_ops,
   1838		},
   1839	},
   1840};
   1841
   1842static struct clk_branch pcie1_phy_clk = {
   1843	.halt_reg = 0x2fdc,
   1844	.halt_bit = 26,
   1845	.clkr = {
   1846		.enable_reg = 0x3a90,
   1847		.enable_mask = BIT(4),
   1848		.hw.init = &(struct clk_init_data){
   1849			.name = "pcie1_phy_clk",
   1850			.ops = &clk_branch_ops,
   1851		},
   1852	},
   1853};
   1854
   1855static struct clk_rcg pcie2_ref_src = {
   1856	.ns_reg = 0x3ae0,
   1857	.p = {
   1858		.pre_div_shift = 3,
   1859		.pre_div_width = 4,
   1860	},
   1861	.s = {
   1862		.src_sel_shift = 0,
   1863		.parent_map = gcc_pxo_pll3_map,
   1864	},
   1865	.freq_tbl = clk_tbl_pcie_ref,
   1866	.clkr = {
   1867		.enable_reg = 0x3ae0,
   1868		.enable_mask = BIT(11),
   1869		.hw.init = &(struct clk_init_data){
   1870			.name = "pcie2_ref_src",
   1871			.parent_data = gcc_pxo_pll3,
   1872			.num_parents = ARRAY_SIZE(gcc_pxo_pll3),
   1873			.ops = &clk_rcg_ops,
   1874			.flags = CLK_SET_RATE_GATE,
   1875		},
   1876	},
   1877};
   1878
   1879static struct clk_branch pcie2_ref_src_clk = {
   1880	.halt_reg = 0x2fdc,
   1881	.halt_bit = 24,
   1882	.clkr = {
   1883		.enable_reg = 0x3ae0,
   1884		.enable_mask = BIT(9),
   1885		.hw.init = &(struct clk_init_data){
   1886			.name = "pcie2_ref_src_clk",
   1887			.parent_hws = (const struct clk_hw*[]){
   1888				&pcie2_ref_src.clkr.hw,
   1889			},
   1890			.num_parents = 1,
   1891			.ops = &clk_branch_ops,
   1892			.flags = CLK_SET_RATE_PARENT,
   1893		},
   1894	},
   1895};
   1896
   1897static struct clk_branch pcie2_a_clk = {
   1898	.halt_reg = 0x2fc0,
   1899	.halt_bit = 9,
   1900	.clkr = {
   1901		.enable_reg = 0x3ac0,
   1902		.enable_mask = BIT(4),
   1903		.hw.init = &(struct clk_init_data){
   1904			.name = "pcie2_a_clk",
   1905			.ops = &clk_branch_ops,
   1906		},
   1907	},
   1908};
   1909
   1910static struct clk_branch pcie2_aux_clk = {
   1911	.halt_reg = 0x2fdc,
   1912	.halt_bit = 25,
   1913	.clkr = {
   1914		.enable_reg = 0x3ac8,
   1915		.enable_mask = BIT(4),
   1916		.hw.init = &(struct clk_init_data){
   1917			.name = "pcie2_aux_clk",
   1918			.ops = &clk_branch_ops,
   1919		},
   1920	},
   1921};
   1922
   1923static struct clk_branch pcie2_h_clk = {
   1924	.halt_reg = 0x2fd4,
   1925	.halt_bit = 10,
   1926	.clkr = {
   1927		.enable_reg = 0x3acc,
   1928		.enable_mask = BIT(4),
   1929		.hw.init = &(struct clk_init_data){
   1930			.name = "pcie2_h_clk",
   1931			.ops = &clk_branch_ops,
   1932		},
   1933	},
   1934};
   1935
   1936static struct clk_branch pcie2_phy_clk = {
   1937	.halt_reg = 0x2fdc,
   1938	.halt_bit = 23,
   1939	.clkr = {
   1940		.enable_reg = 0x3ad0,
   1941		.enable_mask = BIT(4),
   1942		.hw.init = &(struct clk_init_data){
   1943			.name = "pcie2_phy_clk",
   1944			.ops = &clk_branch_ops,
   1945		},
   1946	},
   1947};
   1948
   1949static const struct freq_tbl clk_tbl_sata_ref[] = {
   1950	{ 100000000, P_PLL3,  12, 0, 0 },
   1951	{ }
   1952};
   1953
   1954static struct clk_rcg sata_ref_src = {
   1955	.ns_reg = 0x2c08,
   1956	.p = {
   1957		.pre_div_shift = 3,
   1958		.pre_div_width = 4,
   1959	},
   1960	.s = {
   1961		.src_sel_shift = 0,
   1962		.parent_map = gcc_pxo_pll3_sata_map,
   1963	},
   1964	.freq_tbl = clk_tbl_sata_ref,
   1965	.clkr = {
   1966		.enable_reg = 0x2c08,
   1967		.enable_mask = BIT(7),
   1968		.hw.init = &(struct clk_init_data){
   1969			.name = "sata_ref_src",
   1970			.parent_data = gcc_pxo_pll3,
   1971			.num_parents = ARRAY_SIZE(gcc_pxo_pll3),
   1972			.ops = &clk_rcg_ops,
   1973			.flags = CLK_SET_RATE_GATE,
   1974		},
   1975	},
   1976};
   1977
   1978static struct clk_branch sata_rxoob_clk = {
   1979	.halt_reg = 0x2fdc,
   1980	.halt_bit = 20,
   1981	.clkr = {
   1982		.enable_reg = 0x2c0c,
   1983		.enable_mask = BIT(4),
   1984		.hw.init = &(struct clk_init_data){
   1985			.name = "sata_rxoob_clk",
   1986			.parent_hws = (const struct clk_hw*[]){
   1987				&sata_ref_src.clkr.hw,
   1988			},
   1989			.num_parents = 1,
   1990			.ops = &clk_branch_ops,
   1991			.flags = CLK_SET_RATE_PARENT,
   1992		},
   1993	},
   1994};
   1995
   1996static struct clk_branch sata_pmalive_clk = {
   1997	.halt_reg = 0x2fdc,
   1998	.halt_bit = 19,
   1999	.clkr = {
   2000		.enable_reg = 0x2c10,
   2001		.enable_mask = BIT(4),
   2002		.hw.init = &(struct clk_init_data){
   2003			.name = "sata_pmalive_clk",
   2004			.parent_hws = (const struct clk_hw*[]){
   2005				&sata_ref_src.clkr.hw,
   2006			},
   2007			.num_parents = 1,
   2008			.ops = &clk_branch_ops,
   2009			.flags = CLK_SET_RATE_PARENT,
   2010		},
   2011	},
   2012};
   2013
   2014static struct clk_branch sata_phy_ref_clk = {
   2015	.halt_reg = 0x2fdc,
   2016	.halt_bit = 18,
   2017	.clkr = {
   2018		.enable_reg = 0x2c14,
   2019		.enable_mask = BIT(4),
   2020		.hw.init = &(struct clk_init_data){
   2021			.name = "sata_phy_ref_clk",
   2022			.parent_data = gcc_pxo,
   2023			.num_parents = 1,
   2024			.ops = &clk_branch_ops,
   2025		},
   2026	},
   2027};
   2028
   2029static struct clk_branch sata_a_clk = {
   2030	.halt_reg = 0x2fc0,
   2031	.halt_bit = 12,
   2032	.clkr = {
   2033		.enable_reg = 0x2c20,
   2034		.enable_mask = BIT(4),
   2035		.hw.init = &(struct clk_init_data){
   2036			.name = "sata_a_clk",
   2037			.ops = &clk_branch_ops,
   2038		},
   2039	},
   2040};
   2041
   2042static struct clk_branch sata_h_clk = {
   2043	.halt_reg = 0x2fdc,
   2044	.halt_bit = 21,
   2045	.clkr = {
   2046		.enable_reg = 0x2c00,
   2047		.enable_mask = BIT(4),
   2048		.hw.init = &(struct clk_init_data){
   2049			.name = "sata_h_clk",
   2050			.ops = &clk_branch_ops,
   2051		},
   2052	},
   2053};
   2054
   2055static struct clk_branch sfab_sata_s_h_clk = {
   2056	.halt_reg = 0x2fc4,
   2057	.halt_bit = 14,
   2058	.clkr = {
   2059		.enable_reg = 0x2480,
   2060		.enable_mask = BIT(4),
   2061		.hw.init = &(struct clk_init_data){
   2062			.name = "sfab_sata_s_h_clk",
   2063			.ops = &clk_branch_ops,
   2064		},
   2065	},
   2066};
   2067
   2068static struct clk_branch sata_phy_cfg_clk = {
   2069	.halt_reg = 0x2fcc,
   2070	.halt_bit = 14,
   2071	.clkr = {
   2072		.enable_reg = 0x2c40,
   2073		.enable_mask = BIT(4),
   2074		.hw.init = &(struct clk_init_data){
   2075			.name = "sata_phy_cfg_clk",
   2076			.ops = &clk_branch_ops,
   2077		},
   2078	},
   2079};
   2080
   2081static const struct freq_tbl clk_tbl_usb30_master[] = {
   2082	{ 125000000, P_PLL0,  1, 5, 32 },
   2083	{ }
   2084};
   2085
   2086static struct clk_rcg usb30_master_clk_src = {
   2087	.ns_reg = 0x3b2c,
   2088	.md_reg = 0x3b28,
   2089	.mn = {
   2090		.mnctr_en_bit = 8,
   2091		.mnctr_reset_bit = 7,
   2092		.mnctr_mode_shift = 5,
   2093		.n_val_shift = 16,
   2094		.m_val_shift = 16,
   2095		.width = 8,
   2096	},
   2097	.p = {
   2098		.pre_div_shift = 3,
   2099		.pre_div_width = 2,
   2100	},
   2101	.s = {
   2102		.src_sel_shift = 0,
   2103		.parent_map = gcc_pxo_pll8_pll0_map,
   2104	},
   2105	.freq_tbl = clk_tbl_usb30_master,
   2106	.clkr = {
   2107		.enable_reg = 0x3b2c,
   2108		.enable_mask = BIT(11),
   2109		.hw.init = &(struct clk_init_data){
   2110			.name = "usb30_master_ref_src",
   2111			.parent_data = gcc_pxo_pll8_pll0,
   2112			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_pll0),
   2113			.ops = &clk_rcg_ops,
   2114			.flags = CLK_SET_RATE_GATE,
   2115		},
   2116	},
   2117};
   2118
   2119static struct clk_branch usb30_0_branch_clk = {
   2120	.halt_reg = 0x2fc4,
   2121	.halt_bit = 22,
   2122	.clkr = {
   2123		.enable_reg = 0x3b24,
   2124		.enable_mask = BIT(4),
   2125		.hw.init = &(struct clk_init_data){
   2126			.name = "usb30_0_branch_clk",
   2127			.parent_hws = (const struct clk_hw*[]){
   2128				&usb30_master_clk_src.clkr.hw,
   2129			},
   2130			.num_parents = 1,
   2131			.ops = &clk_branch_ops,
   2132			.flags = CLK_SET_RATE_PARENT,
   2133		},
   2134	},
   2135};
   2136
   2137static struct clk_branch usb30_1_branch_clk = {
   2138	.halt_reg = 0x2fc4,
   2139	.halt_bit = 17,
   2140	.clkr = {
   2141		.enable_reg = 0x3b34,
   2142		.enable_mask = BIT(4),
   2143		.hw.init = &(struct clk_init_data){
   2144			.name = "usb30_1_branch_clk",
   2145			.parent_hws = (const struct clk_hw*[]){
   2146				&usb30_master_clk_src.clkr.hw,
   2147			},
   2148			.num_parents = 1,
   2149			.ops = &clk_branch_ops,
   2150			.flags = CLK_SET_RATE_PARENT,
   2151		},
   2152	},
   2153};
   2154
   2155static const struct freq_tbl clk_tbl_usb30_utmi[] = {
   2156	{ 60000000, P_PLL8,  1, 5, 32 },
   2157	{ }
   2158};
   2159
   2160static struct clk_rcg usb30_utmi_clk = {
   2161	.ns_reg = 0x3b44,
   2162	.md_reg = 0x3b40,
   2163	.mn = {
   2164		.mnctr_en_bit = 8,
   2165		.mnctr_reset_bit = 7,
   2166		.mnctr_mode_shift = 5,
   2167		.n_val_shift = 16,
   2168		.m_val_shift = 16,
   2169		.width = 8,
   2170	},
   2171	.p = {
   2172		.pre_div_shift = 3,
   2173		.pre_div_width = 2,
   2174	},
   2175	.s = {
   2176		.src_sel_shift = 0,
   2177		.parent_map = gcc_pxo_pll8_pll0_map,
   2178	},
   2179	.freq_tbl = clk_tbl_usb30_utmi,
   2180	.clkr = {
   2181		.enable_reg = 0x3b44,
   2182		.enable_mask = BIT(11),
   2183		.hw.init = &(struct clk_init_data){
   2184			.name = "usb30_utmi_clk",
   2185			.parent_data = gcc_pxo_pll8_pll0,
   2186			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_pll0),
   2187			.ops = &clk_rcg_ops,
   2188			.flags = CLK_SET_RATE_GATE,
   2189		},
   2190	},
   2191};
   2192
   2193static struct clk_branch usb30_0_utmi_clk_ctl = {
   2194	.halt_reg = 0x2fc4,
   2195	.halt_bit = 21,
   2196	.clkr = {
   2197		.enable_reg = 0x3b48,
   2198		.enable_mask = BIT(4),
   2199		.hw.init = &(struct clk_init_data){
   2200			.name = "usb30_0_utmi_clk_ctl",
   2201			.parent_hws = (const struct clk_hw*[]){
   2202				&usb30_utmi_clk.clkr.hw,
   2203			},
   2204			.num_parents = 1,
   2205			.ops = &clk_branch_ops,
   2206			.flags = CLK_SET_RATE_PARENT,
   2207		},
   2208	},
   2209};
   2210
   2211static struct clk_branch usb30_1_utmi_clk_ctl = {
   2212	.halt_reg = 0x2fc4,
   2213	.halt_bit = 15,
   2214	.clkr = {
   2215		.enable_reg = 0x3b4c,
   2216		.enable_mask = BIT(4),
   2217		.hw.init = &(struct clk_init_data){
   2218			.name = "usb30_1_utmi_clk_ctl",
   2219			.parent_hws = (const struct clk_hw*[]){
   2220				&usb30_utmi_clk.clkr.hw,
   2221			},
   2222			.num_parents = 1,
   2223			.ops = &clk_branch_ops,
   2224			.flags = CLK_SET_RATE_PARENT,
   2225		},
   2226	},
   2227};
   2228
   2229static const struct freq_tbl clk_tbl_usb[] = {
   2230	{ 60000000, P_PLL8,  1, 5, 32 },
   2231	{ }
   2232};
   2233
   2234static struct clk_rcg usb_hs1_xcvr_clk_src = {
   2235	.ns_reg = 0x290C,
   2236	.md_reg = 0x2908,
   2237	.mn = {
   2238		.mnctr_en_bit = 8,
   2239		.mnctr_reset_bit = 7,
   2240		.mnctr_mode_shift = 5,
   2241		.n_val_shift = 16,
   2242		.m_val_shift = 16,
   2243		.width = 8,
   2244	},
   2245	.p = {
   2246		.pre_div_shift = 3,
   2247		.pre_div_width = 2,
   2248	},
   2249	.s = {
   2250		.src_sel_shift = 0,
   2251		.parent_map = gcc_pxo_pll8_pll0_map,
   2252	},
   2253	.freq_tbl = clk_tbl_usb,
   2254	.clkr = {
   2255		.enable_reg = 0x2968,
   2256		.enable_mask = BIT(11),
   2257		.hw.init = &(struct clk_init_data){
   2258			.name = "usb_hs1_xcvr_src",
   2259			.parent_data = gcc_pxo_pll8_pll0,
   2260			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_pll0),
   2261			.ops = &clk_rcg_ops,
   2262			.flags = CLK_SET_RATE_GATE,
   2263		},
   2264	},
   2265};
   2266
   2267static struct clk_branch usb_hs1_xcvr_clk = {
   2268	.halt_reg = 0x2fcc,
   2269	.halt_bit = 17,
   2270	.clkr = {
   2271		.enable_reg = 0x290c,
   2272		.enable_mask = BIT(9),
   2273		.hw.init = &(struct clk_init_data){
   2274			.name = "usb_hs1_xcvr_clk",
   2275			.parent_hws = (const struct clk_hw*[]){
   2276				&usb_hs1_xcvr_clk_src.clkr.hw,
   2277			},
   2278			.num_parents = 1,
   2279			.ops = &clk_branch_ops,
   2280			.flags = CLK_SET_RATE_PARENT,
   2281		},
   2282	},
   2283};
   2284
   2285static struct clk_branch usb_hs1_h_clk = {
   2286	.hwcg_reg = 0x2900,
   2287	.hwcg_bit = 6,
   2288	.halt_reg = 0x2fc8,
   2289	.halt_bit = 1,
   2290	.clkr = {
   2291		.enable_reg = 0x2900,
   2292		.enable_mask = BIT(4),
   2293		.hw.init = &(struct clk_init_data){
   2294			.name = "usb_hs1_h_clk",
   2295			.ops = &clk_branch_ops,
   2296		},
   2297	},
   2298};
   2299
   2300static struct clk_rcg usb_fs1_xcvr_clk_src = {
   2301	.ns_reg = 0x2968,
   2302	.md_reg = 0x2964,
   2303	.mn = {
   2304		.mnctr_en_bit = 8,
   2305		.mnctr_reset_bit = 7,
   2306		.mnctr_mode_shift = 5,
   2307		.n_val_shift = 16,
   2308		.m_val_shift = 16,
   2309		.width = 8,
   2310	},
   2311	.p = {
   2312		.pre_div_shift = 3,
   2313		.pre_div_width = 2,
   2314	},
   2315	.s = {
   2316		.src_sel_shift = 0,
   2317		.parent_map = gcc_pxo_pll8_pll0_map,
   2318	},
   2319	.freq_tbl = clk_tbl_usb,
   2320	.clkr = {
   2321		.enable_reg = 0x2968,
   2322		.enable_mask = BIT(11),
   2323		.hw.init = &(struct clk_init_data){
   2324			.name = "usb_fs1_xcvr_src",
   2325			.parent_data = gcc_pxo_pll8_pll0,
   2326			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_pll0),
   2327			.ops = &clk_rcg_ops,
   2328			.flags = CLK_SET_RATE_GATE,
   2329		},
   2330	},
   2331};
   2332
   2333static struct clk_branch usb_fs1_xcvr_clk = {
   2334	.halt_reg = 0x2fcc,
   2335	.halt_bit = 17,
   2336	.clkr = {
   2337		.enable_reg = 0x2968,
   2338		.enable_mask = BIT(9),
   2339		.hw.init = &(struct clk_init_data){
   2340			.name = "usb_fs1_xcvr_clk",
   2341			.parent_hws = (const struct clk_hw*[]){
   2342				&usb_fs1_xcvr_clk_src.clkr.hw,
   2343			},
   2344			.num_parents = 1,
   2345			.ops = &clk_branch_ops,
   2346			.flags = CLK_SET_RATE_PARENT,
   2347		},
   2348	},
   2349};
   2350
   2351static struct clk_branch usb_fs1_sys_clk = {
   2352	.halt_reg = 0x2fcc,
   2353	.halt_bit = 18,
   2354	.clkr = {
   2355		.enable_reg = 0x296c,
   2356		.enable_mask = BIT(4),
   2357		.hw.init = &(struct clk_init_data){
   2358			.name = "usb_fs1_sys_clk",
   2359			.parent_hws = (const struct clk_hw*[]){
   2360				&usb_fs1_xcvr_clk_src.clkr.hw,
   2361			},
   2362			.num_parents = 1,
   2363			.ops = &clk_branch_ops,
   2364			.flags = CLK_SET_RATE_PARENT,
   2365		},
   2366	},
   2367};
   2368
   2369static struct clk_branch usb_fs1_h_clk = {
   2370	.halt_reg = 0x2fcc,
   2371	.halt_bit = 19,
   2372	.clkr = {
   2373		.enable_reg = 0x2960,
   2374		.enable_mask = BIT(4),
   2375		.hw.init = &(struct clk_init_data){
   2376			.name = "usb_fs1_h_clk",
   2377			.ops = &clk_branch_ops,
   2378		},
   2379	},
   2380};
   2381
   2382static struct clk_branch ebi2_clk = {
   2383	.hwcg_reg = 0x3b00,
   2384	.hwcg_bit = 6,
   2385	.halt_reg = 0x2fcc,
   2386	.halt_bit = 1,
   2387	.clkr = {
   2388		.enable_reg = 0x3b00,
   2389		.enable_mask = BIT(4),
   2390		.hw.init = &(struct clk_init_data){
   2391			.name = "ebi2_clk",
   2392			.ops = &clk_branch_ops,
   2393		},
   2394	},
   2395};
   2396
   2397static struct clk_branch ebi2_aon_clk = {
   2398	.halt_reg = 0x2fcc,
   2399	.halt_bit = 0,
   2400	.clkr = {
   2401		.enable_reg = 0x3b00,
   2402		.enable_mask = BIT(8),
   2403		.hw.init = &(struct clk_init_data){
   2404			.name = "ebi2_always_on_clk",
   2405			.ops = &clk_branch_ops,
   2406		},
   2407	},
   2408};
   2409
   2410static const struct freq_tbl clk_tbl_gmac[] = {
   2411	{ 133000000, P_PLL0, 1,  50, 301 },
   2412	{ 266000000, P_PLL0, 1, 127, 382 },
   2413	{ }
   2414};
   2415
   2416static struct clk_dyn_rcg gmac_core1_src = {
   2417	.ns_reg[0] = 0x3cac,
   2418	.ns_reg[1] = 0x3cb0,
   2419	.md_reg[0] = 0x3ca4,
   2420	.md_reg[1] = 0x3ca8,
   2421	.bank_reg = 0x3ca0,
   2422	.mn[0] = {
   2423		.mnctr_en_bit = 8,
   2424		.mnctr_reset_bit = 7,
   2425		.mnctr_mode_shift = 5,
   2426		.n_val_shift = 16,
   2427		.m_val_shift = 16,
   2428		.width = 8,
   2429	},
   2430	.mn[1] = {
   2431		.mnctr_en_bit = 8,
   2432		.mnctr_reset_bit = 7,
   2433		.mnctr_mode_shift = 5,
   2434		.n_val_shift = 16,
   2435		.m_val_shift = 16,
   2436		.width = 8,
   2437	},
   2438	.s[0] = {
   2439		.src_sel_shift = 0,
   2440		.parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map,
   2441	},
   2442	.s[1] = {
   2443		.src_sel_shift = 0,
   2444		.parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map,
   2445	},
   2446	.p[0] = {
   2447		.pre_div_shift = 3,
   2448		.pre_div_width = 2,
   2449	},
   2450	.p[1] = {
   2451		.pre_div_shift = 3,
   2452		.pre_div_width = 2,
   2453	},
   2454	.mux_sel_bit = 0,
   2455	.freq_tbl = clk_tbl_gmac,
   2456	.clkr = {
   2457		.enable_reg = 0x3ca0,
   2458		.enable_mask = BIT(1),
   2459		.hw.init = &(struct clk_init_data){
   2460			.name = "gmac_core1_src",
   2461			.parent_data = gcc_pxo_pll8_pll14_pll18_pll0,
   2462			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_pll14_pll18_pll0),
   2463			.ops = &clk_dyn_rcg_ops,
   2464		},
   2465	},
   2466};
   2467
   2468static struct clk_branch gmac_core1_clk = {
   2469	.halt_reg = 0x3c20,
   2470	.halt_bit = 4,
   2471	.hwcg_reg = 0x3cb4,
   2472	.hwcg_bit = 6,
   2473	.clkr = {
   2474		.enable_reg = 0x3cb4,
   2475		.enable_mask = BIT(4),
   2476		.hw.init = &(struct clk_init_data){
   2477			.name = "gmac_core1_clk",
   2478			.parent_hws = (const struct clk_hw*[]){
   2479				&gmac_core1_src.clkr.hw,
   2480			},
   2481			.num_parents = 1,
   2482			.ops = &clk_branch_ops,
   2483			.flags = CLK_SET_RATE_PARENT,
   2484		},
   2485	},
   2486};
   2487
   2488static struct clk_dyn_rcg gmac_core2_src = {
   2489	.ns_reg[0] = 0x3ccc,
   2490	.ns_reg[1] = 0x3cd0,
   2491	.md_reg[0] = 0x3cc4,
   2492	.md_reg[1] = 0x3cc8,
   2493	.bank_reg = 0x3ca0,
   2494	.mn[0] = {
   2495		.mnctr_en_bit = 8,
   2496		.mnctr_reset_bit = 7,
   2497		.mnctr_mode_shift = 5,
   2498		.n_val_shift = 16,
   2499		.m_val_shift = 16,
   2500		.width = 8,
   2501	},
   2502	.mn[1] = {
   2503		.mnctr_en_bit = 8,
   2504		.mnctr_reset_bit = 7,
   2505		.mnctr_mode_shift = 5,
   2506		.n_val_shift = 16,
   2507		.m_val_shift = 16,
   2508		.width = 8,
   2509	},
   2510	.s[0] = {
   2511		.src_sel_shift = 0,
   2512		.parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map,
   2513	},
   2514	.s[1] = {
   2515		.src_sel_shift = 0,
   2516		.parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map,
   2517	},
   2518	.p[0] = {
   2519		.pre_div_shift = 3,
   2520		.pre_div_width = 2,
   2521	},
   2522	.p[1] = {
   2523		.pre_div_shift = 3,
   2524		.pre_div_width = 2,
   2525	},
   2526	.mux_sel_bit = 0,
   2527	.freq_tbl = clk_tbl_gmac,
   2528	.clkr = {
   2529		.enable_reg = 0x3cc0,
   2530		.enable_mask = BIT(1),
   2531		.hw.init = &(struct clk_init_data){
   2532			.name = "gmac_core2_src",
   2533			.parent_data = gcc_pxo_pll8_pll14_pll18_pll0,
   2534			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_pll14_pll18_pll0),
   2535			.ops = &clk_dyn_rcg_ops,
   2536		},
   2537	},
   2538};
   2539
   2540static struct clk_branch gmac_core2_clk = {
   2541	.halt_reg = 0x3c20,
   2542	.halt_bit = 5,
   2543	.hwcg_reg = 0x3cd4,
   2544	.hwcg_bit = 6,
   2545	.clkr = {
   2546		.enable_reg = 0x3cd4,
   2547		.enable_mask = BIT(4),
   2548		.hw.init = &(struct clk_init_data){
   2549			.name = "gmac_core2_clk",
   2550			.parent_hws = (const struct clk_hw*[]){
   2551				&gmac_core2_src.clkr.hw,
   2552			},
   2553			.num_parents = 1,
   2554			.ops = &clk_branch_ops,
   2555			.flags = CLK_SET_RATE_PARENT,
   2556		},
   2557	},
   2558};
   2559
   2560static struct clk_dyn_rcg gmac_core3_src = {
   2561	.ns_reg[0] = 0x3cec,
   2562	.ns_reg[1] = 0x3cf0,
   2563	.md_reg[0] = 0x3ce4,
   2564	.md_reg[1] = 0x3ce8,
   2565	.bank_reg = 0x3ce0,
   2566	.mn[0] = {
   2567		.mnctr_en_bit = 8,
   2568		.mnctr_reset_bit = 7,
   2569		.mnctr_mode_shift = 5,
   2570		.n_val_shift = 16,
   2571		.m_val_shift = 16,
   2572		.width = 8,
   2573	},
   2574	.mn[1] = {
   2575		.mnctr_en_bit = 8,
   2576		.mnctr_reset_bit = 7,
   2577		.mnctr_mode_shift = 5,
   2578		.n_val_shift = 16,
   2579		.m_val_shift = 16,
   2580		.width = 8,
   2581	},
   2582	.s[0] = {
   2583		.src_sel_shift = 0,
   2584		.parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map,
   2585	},
   2586	.s[1] = {
   2587		.src_sel_shift = 0,
   2588		.parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map,
   2589	},
   2590	.p[0] = {
   2591		.pre_div_shift = 3,
   2592		.pre_div_width = 2,
   2593	},
   2594	.p[1] = {
   2595		.pre_div_shift = 3,
   2596		.pre_div_width = 2,
   2597	},
   2598	.mux_sel_bit = 0,
   2599	.freq_tbl = clk_tbl_gmac,
   2600	.clkr = {
   2601		.enable_reg = 0x3ce0,
   2602		.enable_mask = BIT(1),
   2603		.hw.init = &(struct clk_init_data){
   2604			.name = "gmac_core3_src",
   2605			.parent_data = gcc_pxo_pll8_pll14_pll18_pll0,
   2606			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_pll14_pll18_pll0),
   2607			.ops = &clk_dyn_rcg_ops,
   2608		},
   2609	},
   2610};
   2611
   2612static struct clk_branch gmac_core3_clk = {
   2613	.halt_reg = 0x3c20,
   2614	.halt_bit = 6,
   2615	.hwcg_reg = 0x3cf4,
   2616	.hwcg_bit = 6,
   2617	.clkr = {
   2618		.enable_reg = 0x3cf4,
   2619		.enable_mask = BIT(4),
   2620		.hw.init = &(struct clk_init_data){
   2621			.name = "gmac_core3_clk",
   2622			.parent_hws = (const struct clk_hw*[]){
   2623				&gmac_core3_src.clkr.hw,
   2624			},
   2625			.num_parents = 1,
   2626			.ops = &clk_branch_ops,
   2627			.flags = CLK_SET_RATE_PARENT,
   2628		},
   2629	},
   2630};
   2631
   2632static struct clk_dyn_rcg gmac_core4_src = {
   2633	.ns_reg[0] = 0x3d0c,
   2634	.ns_reg[1] = 0x3d10,
   2635	.md_reg[0] = 0x3d04,
   2636	.md_reg[1] = 0x3d08,
   2637	.bank_reg = 0x3d00,
   2638	.mn[0] = {
   2639		.mnctr_en_bit = 8,
   2640		.mnctr_reset_bit = 7,
   2641		.mnctr_mode_shift = 5,
   2642		.n_val_shift = 16,
   2643		.m_val_shift = 16,
   2644		.width = 8,
   2645	},
   2646	.mn[1] = {
   2647		.mnctr_en_bit = 8,
   2648		.mnctr_reset_bit = 7,
   2649		.mnctr_mode_shift = 5,
   2650		.n_val_shift = 16,
   2651		.m_val_shift = 16,
   2652		.width = 8,
   2653	},
   2654	.s[0] = {
   2655		.src_sel_shift = 0,
   2656		.parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map,
   2657	},
   2658	.s[1] = {
   2659		.src_sel_shift = 0,
   2660		.parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map,
   2661	},
   2662	.p[0] = {
   2663		.pre_div_shift = 3,
   2664		.pre_div_width = 2,
   2665	},
   2666	.p[1] = {
   2667		.pre_div_shift = 3,
   2668		.pre_div_width = 2,
   2669	},
   2670	.mux_sel_bit = 0,
   2671	.freq_tbl = clk_tbl_gmac,
   2672	.clkr = {
   2673		.enable_reg = 0x3d00,
   2674		.enable_mask = BIT(1),
   2675		.hw.init = &(struct clk_init_data){
   2676			.name = "gmac_core4_src",
   2677			.parent_data = gcc_pxo_pll8_pll14_pll18_pll0,
   2678			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_pll14_pll18_pll0),
   2679			.ops = &clk_dyn_rcg_ops,
   2680		},
   2681	},
   2682};
   2683
   2684static struct clk_branch gmac_core4_clk = {
   2685	.halt_reg = 0x3c20,
   2686	.halt_bit = 7,
   2687	.hwcg_reg = 0x3d14,
   2688	.hwcg_bit = 6,
   2689	.clkr = {
   2690		.enable_reg = 0x3d14,
   2691		.enable_mask = BIT(4),
   2692		.hw.init = &(struct clk_init_data){
   2693			.name = "gmac_core4_clk",
   2694			.parent_hws = (const struct clk_hw*[]){
   2695				&gmac_core4_src.clkr.hw,
   2696			},
   2697			.num_parents = 1,
   2698			.ops = &clk_branch_ops,
   2699			.flags = CLK_SET_RATE_PARENT,
   2700		},
   2701	},
   2702};
   2703
   2704static const struct freq_tbl clk_tbl_nss_tcm[] = {
   2705	{ 266000000, P_PLL0, 3, 0, 0 },
   2706	{ 400000000, P_PLL0, 2, 0, 0 },
   2707	{ }
   2708};
   2709
   2710static struct clk_dyn_rcg nss_tcm_src = {
   2711	.ns_reg[0] = 0x3dc4,
   2712	.ns_reg[1] = 0x3dc8,
   2713	.bank_reg = 0x3dc0,
   2714	.s[0] = {
   2715		.src_sel_shift = 0,
   2716		.parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map,
   2717	},
   2718	.s[1] = {
   2719		.src_sel_shift = 0,
   2720		.parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map,
   2721	},
   2722	.p[0] = {
   2723		.pre_div_shift = 3,
   2724		.pre_div_width = 4,
   2725	},
   2726	.p[1] = {
   2727		.pre_div_shift = 3,
   2728		.pre_div_width = 4,
   2729	},
   2730	.mux_sel_bit = 0,
   2731	.freq_tbl = clk_tbl_nss_tcm,
   2732	.clkr = {
   2733		.enable_reg = 0x3dc0,
   2734		.enable_mask = BIT(1),
   2735		.hw.init = &(struct clk_init_data){
   2736			.name = "nss_tcm_src",
   2737			.parent_data = gcc_pxo_pll8_pll14_pll18_pll0,
   2738			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_pll14_pll18_pll0),
   2739			.ops = &clk_dyn_rcg_ops,
   2740		},
   2741	},
   2742};
   2743
   2744static struct clk_branch nss_tcm_clk = {
   2745	.halt_reg = 0x3c20,
   2746	.halt_bit = 14,
   2747	.clkr = {
   2748		.enable_reg = 0x3dd0,
   2749		.enable_mask = BIT(6) | BIT(4),
   2750		.hw.init = &(struct clk_init_data){
   2751			.name = "nss_tcm_clk",
   2752			.parent_hws = (const struct clk_hw*[]){
   2753				&nss_tcm_src.clkr.hw,
   2754			},
   2755			.num_parents = 1,
   2756			.ops = &clk_branch_ops,
   2757			.flags = CLK_SET_RATE_PARENT,
   2758		},
   2759	},
   2760};
   2761
   2762static const struct freq_tbl clk_tbl_nss_ipq8064[] = {
   2763	{ 110000000, P_PLL18, 1, 1, 5 },
   2764	{ 275000000, P_PLL18, 2, 0, 0 },
   2765	{ 550000000, P_PLL18, 1, 0, 0 },
   2766	{ 733000000, P_PLL18, 1, 0, 0 },
   2767	{ }
   2768};
   2769
   2770static const struct freq_tbl clk_tbl_nss_ipq8065[] = {
   2771	{ 110000000, P_PLL18, 1, 1, 5 },
   2772	{ 275000000, P_PLL18, 2, 0, 0 },
   2773	{ 600000000, P_PLL18, 1, 0, 0 },
   2774	{ 800000000, P_PLL18, 1, 0, 0 },
   2775	{ }
   2776};
   2777
   2778static struct clk_dyn_rcg ubi32_core1_src_clk = {
   2779	.ns_reg[0] = 0x3d2c,
   2780	.ns_reg[1] = 0x3d30,
   2781	.md_reg[0] = 0x3d24,
   2782	.md_reg[1] = 0x3d28,
   2783	.bank_reg = 0x3d20,
   2784	.mn[0] = {
   2785		.mnctr_en_bit = 8,
   2786		.mnctr_reset_bit = 7,
   2787		.mnctr_mode_shift = 5,
   2788		.n_val_shift = 16,
   2789		.m_val_shift = 16,
   2790		.width = 8,
   2791	},
   2792	.mn[1] = {
   2793		.mnctr_en_bit = 8,
   2794		.mnctr_reset_bit = 7,
   2795		.mnctr_mode_shift = 5,
   2796		.n_val_shift = 16,
   2797		.m_val_shift = 16,
   2798		.width = 8,
   2799	},
   2800	.s[0] = {
   2801		.src_sel_shift = 0,
   2802		.parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map,
   2803	},
   2804	.s[1] = {
   2805		.src_sel_shift = 0,
   2806		.parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map,
   2807	},
   2808	.p[0] = {
   2809		.pre_div_shift = 3,
   2810		.pre_div_width = 2,
   2811	},
   2812	.p[1] = {
   2813		.pre_div_shift = 3,
   2814		.pre_div_width = 2,
   2815	},
   2816	.mux_sel_bit = 0,
   2817	/* nss freq table is selected based on the SoC compatible */
   2818	.clkr = {
   2819		.enable_reg = 0x3d20,
   2820		.enable_mask = BIT(1),
   2821		.hw.init = &(struct clk_init_data){
   2822			.name = "ubi32_core1_src_clk",
   2823			.parent_data = gcc_pxo_pll8_pll14_pll18_pll0,
   2824			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_pll14_pll18_pll0),
   2825			.ops = &clk_dyn_rcg_ops,
   2826			.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
   2827		},
   2828	},
   2829};
   2830
   2831static struct clk_dyn_rcg ubi32_core2_src_clk = {
   2832	.ns_reg[0] = 0x3d4c,
   2833	.ns_reg[1] = 0x3d50,
   2834	.md_reg[0] = 0x3d44,
   2835	.md_reg[1] = 0x3d48,
   2836	.bank_reg = 0x3d40,
   2837	.mn[0] = {
   2838		.mnctr_en_bit = 8,
   2839		.mnctr_reset_bit = 7,
   2840		.mnctr_mode_shift = 5,
   2841		.n_val_shift = 16,
   2842		.m_val_shift = 16,
   2843		.width = 8,
   2844	},
   2845	.mn[1] = {
   2846		.mnctr_en_bit = 8,
   2847		.mnctr_reset_bit = 7,
   2848		.mnctr_mode_shift = 5,
   2849		.n_val_shift = 16,
   2850		.m_val_shift = 16,
   2851		.width = 8,
   2852	},
   2853	.s[0] = {
   2854		.src_sel_shift = 0,
   2855		.parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map,
   2856	},
   2857	.s[1] = {
   2858		.src_sel_shift = 0,
   2859		.parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map,
   2860	},
   2861	.p[0] = {
   2862		.pre_div_shift = 3,
   2863		.pre_div_width = 2,
   2864	},
   2865	.p[1] = {
   2866		.pre_div_shift = 3,
   2867		.pre_div_width = 2,
   2868	},
   2869	.mux_sel_bit = 0,
   2870	/* nss freq table is selected based on the SoC compatible */
   2871	.clkr = {
   2872		.enable_reg = 0x3d40,
   2873		.enable_mask = BIT(1),
   2874		.hw.init = &(struct clk_init_data){
   2875			.name = "ubi32_core2_src_clk",
   2876			.parent_data = gcc_pxo_pll8_pll14_pll18_pll0,
   2877			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_pll14_pll18_pll0),
   2878			.ops = &clk_dyn_rcg_ops,
   2879			.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
   2880		},
   2881	},
   2882};
   2883
   2884static const struct freq_tbl clk_tbl_ce5_core[] = {
   2885	{ 150000000, P_PLL3, 8, 1, 1 },
   2886	{ 213200000, P_PLL11, 5, 1, 1 },
   2887	{ }
   2888};
   2889
   2890static struct clk_dyn_rcg ce5_core_src = {
   2891	.ns_reg[0] = 0x36C4,
   2892	.ns_reg[1] = 0x36C8,
   2893	.bank_reg = 0x36C0,
   2894	.s[0] = {
   2895		.src_sel_shift = 0,
   2896		.parent_map = gcc_pxo_pll3_pll0_pll14_pll18_pll11_map,
   2897	},
   2898	.s[1] = {
   2899		.src_sel_shift = 0,
   2900		.parent_map = gcc_pxo_pll3_pll0_pll14_pll18_pll11_map,
   2901	},
   2902	.p[0] = {
   2903		.pre_div_shift = 3,
   2904		.pre_div_width = 4,
   2905	},
   2906	.p[1] = {
   2907		.pre_div_shift = 3,
   2908		.pre_div_width = 4,
   2909	},
   2910	.mux_sel_bit = 0,
   2911	.freq_tbl = clk_tbl_ce5_core,
   2912	.clkr = {
   2913		.enable_reg = 0x36C0,
   2914		.enable_mask = BIT(1),
   2915		.hw.init = &(struct clk_init_data){
   2916			.name = "ce5_core_src",
   2917			.parent_data = gcc_pxo_pll3_pll0_pll14_pll18_pll11,
   2918			.num_parents = ARRAY_SIZE(gcc_pxo_pll3_pll0_pll14_pll18_pll11),
   2919			.ops = &clk_dyn_rcg_ops,
   2920		},
   2921	},
   2922};
   2923
   2924static struct clk_branch ce5_core_clk = {
   2925	.halt_reg = 0x2FDC,
   2926	.halt_bit = 5,
   2927	.hwcg_reg = 0x36CC,
   2928	.hwcg_bit = 6,
   2929	.clkr = {
   2930		.enable_reg = 0x36CC,
   2931		.enable_mask = BIT(4),
   2932		.hw.init = &(struct clk_init_data){
   2933			.name = "ce5_core_clk",
   2934			.parent_hws = (const struct clk_hw*[]){
   2935				&ce5_core_src.clkr.hw,
   2936			},
   2937			.num_parents = 1,
   2938			.ops = &clk_branch_ops,
   2939			.flags = CLK_SET_RATE_PARENT,
   2940		},
   2941	},
   2942};
   2943
   2944static const struct freq_tbl clk_tbl_ce5_a_clk[] = {
   2945	{ 160000000, P_PLL0, 5, 1, 1 },
   2946	{ 213200000, P_PLL11, 5, 1, 1 },
   2947	{ }
   2948};
   2949
   2950static struct clk_dyn_rcg ce5_a_clk_src = {
   2951	.ns_reg[0] = 0x3d84,
   2952	.ns_reg[1] = 0x3d88,
   2953	.bank_reg = 0x3d80,
   2954	.s[0] = {
   2955		.src_sel_shift = 0,
   2956		.parent_map = gcc_pxo_pll8_pll0_pll14_pll18_pll11_map,
   2957	},
   2958	.s[1] = {
   2959		.src_sel_shift = 0,
   2960		.parent_map = gcc_pxo_pll8_pll0_pll14_pll18_pll11_map,
   2961	},
   2962	.p[0] = {
   2963		.pre_div_shift = 3,
   2964		.pre_div_width = 4,
   2965	},
   2966	.p[1] = {
   2967		.pre_div_shift = 3,
   2968		.pre_div_width = 4,
   2969	},
   2970	.mux_sel_bit = 0,
   2971	.freq_tbl = clk_tbl_ce5_a_clk,
   2972	.clkr = {
   2973		.enable_reg = 0x3d80,
   2974		.enable_mask = BIT(1),
   2975		.hw.init = &(struct clk_init_data){
   2976			.name = "ce5_a_clk_src",
   2977			.parent_data = gcc_pxo_pll8_pll0_pll14_pll18_pll11,
   2978			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_pll0_pll14_pll18_pll11),
   2979			.ops = &clk_dyn_rcg_ops,
   2980		},
   2981	},
   2982};
   2983
   2984static struct clk_branch ce5_a_clk = {
   2985	.halt_reg = 0x3c20,
   2986	.halt_bit = 12,
   2987	.hwcg_reg = 0x3d8c,
   2988	.hwcg_bit = 6,
   2989	.clkr = {
   2990		.enable_reg = 0x3d8c,
   2991		.enable_mask = BIT(4),
   2992		.hw.init = &(struct clk_init_data){
   2993			.name = "ce5_a_clk",
   2994			.parent_hws = (const struct clk_hw*[]){
   2995				&ce5_a_clk_src.clkr.hw,
   2996			},
   2997			.num_parents = 1,
   2998			.ops = &clk_branch_ops,
   2999			.flags = CLK_SET_RATE_PARENT,
   3000		},
   3001	},
   3002};
   3003
   3004static const struct freq_tbl clk_tbl_ce5_h_clk[] = {
   3005	{ 160000000, P_PLL0, 5, 1, 1 },
   3006	{ 213200000, P_PLL11, 5, 1, 1 },
   3007	{ }
   3008};
   3009
   3010static struct clk_dyn_rcg ce5_h_clk_src = {
   3011	.ns_reg[0] = 0x3c64,
   3012	.ns_reg[1] = 0x3c68,
   3013	.bank_reg = 0x3c60,
   3014	.s[0] = {
   3015		.src_sel_shift = 0,
   3016		.parent_map = gcc_pxo_pll8_pll0_pll14_pll18_pll11_map,
   3017	},
   3018	.s[1] = {
   3019		.src_sel_shift = 0,
   3020		.parent_map = gcc_pxo_pll8_pll0_pll14_pll18_pll11_map,
   3021	},
   3022	.p[0] = {
   3023		.pre_div_shift = 3,
   3024		.pre_div_width = 4,
   3025	},
   3026	.p[1] = {
   3027		.pre_div_shift = 3,
   3028		.pre_div_width = 4,
   3029	},
   3030	.mux_sel_bit = 0,
   3031	.freq_tbl = clk_tbl_ce5_h_clk,
   3032	.clkr = {
   3033		.enable_reg = 0x3c60,
   3034		.enable_mask = BIT(1),
   3035		.hw.init = &(struct clk_init_data){
   3036			.name = "ce5_h_clk_src",
   3037			.parent_data = gcc_pxo_pll8_pll0_pll14_pll18_pll11,
   3038			.num_parents = ARRAY_SIZE(gcc_pxo_pll8_pll0_pll14_pll18_pll11),
   3039			.ops = &clk_dyn_rcg_ops,
   3040		},
   3041	},
   3042};
   3043
   3044static struct clk_branch ce5_h_clk = {
   3045	.halt_reg = 0x3c20,
   3046	.halt_bit = 11,
   3047	.hwcg_reg = 0x3c6c,
   3048	.hwcg_bit = 6,
   3049	.clkr = {
   3050		.enable_reg = 0x3c6c,
   3051		.enable_mask = BIT(4),
   3052		.hw.init = &(struct clk_init_data){
   3053			.name = "ce5_h_clk",
   3054			.parent_hws = (const struct clk_hw*[]){
   3055				&ce5_h_clk_src.clkr.hw,
   3056			},
   3057			.num_parents = 1,
   3058			.ops = &clk_branch_ops,
   3059			.flags = CLK_SET_RATE_PARENT,
   3060		},
   3061	},
   3062};
   3063
   3064static struct clk_regmap *gcc_ipq806x_clks[] = {
   3065	[PLL0] = &pll0.clkr,
   3066	[PLL0_VOTE] = &pll0_vote,
   3067	[PLL3] = &pll3.clkr,
   3068	[PLL4_VOTE] = &pll4_vote,
   3069	[PLL8] = &pll8.clkr,
   3070	[PLL8_VOTE] = &pll8_vote,
   3071	[PLL11] = &pll11.clkr,
   3072	[PLL14] = &pll14.clkr,
   3073	[PLL14_VOTE] = &pll14_vote,
   3074	[PLL18] = &pll18.clkr,
   3075	[GSBI1_UART_SRC] = &gsbi1_uart_src.clkr,
   3076	[GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr,
   3077	[GSBI2_UART_SRC] = &gsbi2_uart_src.clkr,
   3078	[GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr,
   3079	[GSBI4_UART_SRC] = &gsbi4_uart_src.clkr,
   3080	[GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr,
   3081	[GSBI5_UART_SRC] = &gsbi5_uart_src.clkr,
   3082	[GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr,
   3083	[GSBI6_UART_SRC] = &gsbi6_uart_src.clkr,
   3084	[GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr,
   3085	[GSBI7_UART_SRC] = &gsbi7_uart_src.clkr,
   3086	[GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr,
   3087	[GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr,
   3088	[GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr,
   3089	[GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr,
   3090	[GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr,
   3091	[GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr,
   3092	[GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr,
   3093	[GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr,
   3094	[GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr,
   3095	[GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr,
   3096	[GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr,
   3097	[GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr,
   3098	[GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr,
   3099	[GP0_SRC] = &gp0_src.clkr,
   3100	[GP0_CLK] = &gp0_clk.clkr,
   3101	[GP1_SRC] = &gp1_src.clkr,
   3102	[GP1_CLK] = &gp1_clk.clkr,
   3103	[GP2_SRC] = &gp2_src.clkr,
   3104	[GP2_CLK] = &gp2_clk.clkr,
   3105	[PMEM_A_CLK] = &pmem_clk.clkr,
   3106	[PRNG_SRC] = &prng_src.clkr,
   3107	[PRNG_CLK] = &prng_clk.clkr,
   3108	[SDC1_SRC] = &sdc1_src.clkr,
   3109	[SDC1_CLK] = &sdc1_clk.clkr,
   3110	[SDC3_SRC] = &sdc3_src.clkr,
   3111	[SDC3_CLK] = &sdc3_clk.clkr,
   3112	[TSIF_REF_SRC] = &tsif_ref_src.clkr,
   3113	[TSIF_REF_CLK] = &tsif_ref_clk.clkr,
   3114	[DMA_BAM_H_CLK] = &dma_bam_h_clk.clkr,
   3115	[GSBI1_H_CLK] = &gsbi1_h_clk.clkr,
   3116	[GSBI2_H_CLK] = &gsbi2_h_clk.clkr,
   3117	[GSBI4_H_CLK] = &gsbi4_h_clk.clkr,
   3118	[GSBI5_H_CLK] = &gsbi5_h_clk.clkr,
   3119	[GSBI6_H_CLK] = &gsbi6_h_clk.clkr,
   3120	[GSBI7_H_CLK] = &gsbi7_h_clk.clkr,
   3121	[TSIF_H_CLK] = &tsif_h_clk.clkr,
   3122	[SDC1_H_CLK] = &sdc1_h_clk.clkr,
   3123	[SDC3_H_CLK] = &sdc3_h_clk.clkr,
   3124	[ADM0_CLK] = &adm0_clk.clkr,
   3125	[ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr,
   3126	[PCIE_A_CLK] = &pcie_a_clk.clkr,
   3127	[PCIE_AUX_CLK] = &pcie_aux_clk.clkr,
   3128	[PCIE_H_CLK] = &pcie_h_clk.clkr,
   3129	[PCIE_PHY_CLK] = &pcie_phy_clk.clkr,
   3130	[SFAB_SATA_S_H_CLK] = &sfab_sata_s_h_clk.clkr,
   3131	[PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr,
   3132	[PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr,
   3133	[PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr,
   3134	[RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr,
   3135	[SATA_H_CLK] = &sata_h_clk.clkr,
   3136	[SATA_CLK_SRC] = &sata_ref_src.clkr,
   3137	[SATA_RXOOB_CLK] = &sata_rxoob_clk.clkr,
   3138	[SATA_PMALIVE_CLK] = &sata_pmalive_clk.clkr,
   3139	[SATA_PHY_REF_CLK] = &sata_phy_ref_clk.clkr,
   3140	[SATA_A_CLK] = &sata_a_clk.clkr,
   3141	[SATA_PHY_CFG_CLK] = &sata_phy_cfg_clk.clkr,
   3142	[PCIE_ALT_REF_SRC] = &pcie_ref_src.clkr,
   3143	[PCIE_ALT_REF_CLK] = &pcie_ref_src_clk.clkr,
   3144	[PCIE_1_A_CLK] = &pcie1_a_clk.clkr,
   3145	[PCIE_1_AUX_CLK] = &pcie1_aux_clk.clkr,
   3146	[PCIE_1_H_CLK] = &pcie1_h_clk.clkr,
   3147	[PCIE_1_PHY_CLK] = &pcie1_phy_clk.clkr,
   3148	[PCIE_1_ALT_REF_SRC] = &pcie1_ref_src.clkr,
   3149	[PCIE_1_ALT_REF_CLK] = &pcie1_ref_src_clk.clkr,
   3150	[PCIE_2_A_CLK] = &pcie2_a_clk.clkr,
   3151	[PCIE_2_AUX_CLK] = &pcie2_aux_clk.clkr,
   3152	[PCIE_2_H_CLK] = &pcie2_h_clk.clkr,
   3153	[PCIE_2_PHY_CLK] = &pcie2_phy_clk.clkr,
   3154	[PCIE_2_ALT_REF_SRC] = &pcie2_ref_src.clkr,
   3155	[PCIE_2_ALT_REF_CLK] = &pcie2_ref_src_clk.clkr,
   3156	[USB30_MASTER_SRC] = &usb30_master_clk_src.clkr,
   3157	[USB30_0_MASTER_CLK] = &usb30_0_branch_clk.clkr,
   3158	[USB30_1_MASTER_CLK] = &usb30_1_branch_clk.clkr,
   3159	[USB30_UTMI_SRC] = &usb30_utmi_clk.clkr,
   3160	[USB30_0_UTMI_CLK] = &usb30_0_utmi_clk_ctl.clkr,
   3161	[USB30_1_UTMI_CLK] = &usb30_1_utmi_clk_ctl.clkr,
   3162	[USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr,
   3163	[USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_clk_src.clkr,
   3164	[USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr,
   3165	[USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr,
   3166	[USB_FS1_XCVR_SRC] = &usb_fs1_xcvr_clk_src.clkr,
   3167	[USB_FS1_XCVR_CLK] = &usb_fs1_xcvr_clk.clkr,
   3168	[USB_FS1_SYSTEM_CLK] = &usb_fs1_sys_clk.clkr,
   3169	[EBI2_CLK] = &ebi2_clk.clkr,
   3170	[EBI2_AON_CLK] = &ebi2_aon_clk.clkr,
   3171	[GMAC_CORE1_CLK_SRC] = &gmac_core1_src.clkr,
   3172	[GMAC_CORE1_CLK] = &gmac_core1_clk.clkr,
   3173	[GMAC_CORE2_CLK_SRC] = &gmac_core2_src.clkr,
   3174	[GMAC_CORE2_CLK] = &gmac_core2_clk.clkr,
   3175	[GMAC_CORE3_CLK_SRC] = &gmac_core3_src.clkr,
   3176	[GMAC_CORE3_CLK] = &gmac_core3_clk.clkr,
   3177	[GMAC_CORE4_CLK_SRC] = &gmac_core4_src.clkr,
   3178	[GMAC_CORE4_CLK] = &gmac_core4_clk.clkr,
   3179	[UBI32_CORE1_CLK_SRC] = &ubi32_core1_src_clk.clkr,
   3180	[UBI32_CORE2_CLK_SRC] = &ubi32_core2_src_clk.clkr,
   3181	[NSSTCM_CLK_SRC] = &nss_tcm_src.clkr,
   3182	[NSSTCM_CLK] = &nss_tcm_clk.clkr,
   3183	[PLL9] = &hfpll0.clkr,
   3184	[PLL10] = &hfpll1.clkr,
   3185	[PLL12] = &hfpll_l2.clkr,
   3186	[CE5_A_CLK_SRC] = &ce5_a_clk_src.clkr,
   3187	[CE5_A_CLK] = &ce5_a_clk.clkr,
   3188	[CE5_H_CLK_SRC] = &ce5_h_clk_src.clkr,
   3189	[CE5_H_CLK] = &ce5_h_clk.clkr,
   3190	[CE5_CORE_CLK_SRC] = &ce5_core_src.clkr,
   3191	[CE5_CORE_CLK] = &ce5_core_clk.clkr,
   3192};
   3193
   3194static const struct qcom_reset_map gcc_ipq806x_resets[] = {
   3195	[QDSS_STM_RESET] = { 0x2060, 6 },
   3196	[AFAB_SMPSS_S_RESET] = { 0x20b8, 2 },
   3197	[AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 },
   3198	[AFAB_SMPSS_M0_RESET] = { 0x20b8, 0 },
   3199	[AFAB_EBI1_CH0_RESET] = { 0x20c0, 7 },
   3200	[AFAB_EBI1_CH1_RESET] = { 0x20c4, 7 },
   3201	[SFAB_ADM0_M0_RESET] = { 0x21e0, 7 },
   3202	[SFAB_ADM0_M1_RESET] = { 0x21e4, 7 },
   3203	[SFAB_ADM0_M2_RESET] = { 0x21e8, 7 },
   3204	[ADM0_C2_RESET] = { 0x220c, 4 },
   3205	[ADM0_C1_RESET] = { 0x220c, 3 },
   3206	[ADM0_C0_RESET] = { 0x220c, 2 },
   3207	[ADM0_PBUS_RESET] = { 0x220c, 1 },
   3208	[ADM0_RESET] = { 0x220c, 0 },
   3209	[QDSS_CLKS_SW_RESET] = { 0x2260, 5 },
   3210	[QDSS_POR_RESET] = { 0x2260, 4 },
   3211	[QDSS_TSCTR_RESET] = { 0x2260, 3 },
   3212	[QDSS_HRESET_RESET] = { 0x2260, 2 },
   3213	[QDSS_AXI_RESET] = { 0x2260, 1 },
   3214	[QDSS_DBG_RESET] = { 0x2260, 0 },
   3215	[SFAB_PCIE_M_RESET] = { 0x22d8, 1 },
   3216	[SFAB_PCIE_S_RESET] = { 0x22d8, 0 },
   3217	[PCIE_EXT_RESET] = { 0x22dc, 6 },
   3218	[PCIE_PHY_RESET] = { 0x22dc, 5 },
   3219	[PCIE_PCI_RESET] = { 0x22dc, 4 },
   3220	[PCIE_POR_RESET] = { 0x22dc, 3 },
   3221	[PCIE_HCLK_RESET] = { 0x22dc, 2 },
   3222	[PCIE_ACLK_RESET] = { 0x22dc, 0 },
   3223	[SFAB_LPASS_RESET] = { 0x23a0, 7 },
   3224	[SFAB_AFAB_M_RESET] = { 0x23e0, 7 },
   3225	[AFAB_SFAB_M0_RESET] = { 0x2420, 7 },
   3226	[AFAB_SFAB_M1_RESET] = { 0x2424, 7 },
   3227	[SFAB_SATA_S_RESET] = { 0x2480, 7 },
   3228	[SFAB_DFAB_M_RESET] = { 0x2500, 7 },
   3229	[DFAB_SFAB_M_RESET] = { 0x2520, 7 },
   3230	[DFAB_SWAY0_RESET] = { 0x2540, 7 },
   3231	[DFAB_SWAY1_RESET] = { 0x2544, 7 },
   3232	[DFAB_ARB0_RESET] = { 0x2560, 7 },
   3233	[DFAB_ARB1_RESET] = { 0x2564, 7 },
   3234	[PPSS_PROC_RESET] = { 0x2594, 1 },
   3235	[PPSS_RESET] = { 0x2594, 0 },
   3236	[DMA_BAM_RESET] = { 0x25c0, 7 },
   3237	[SPS_TIC_H_RESET] = { 0x2600, 7 },
   3238	[SFAB_CFPB_M_RESET] = { 0x2680, 7 },
   3239	[SFAB_CFPB_S_RESET] = { 0x26c0, 7 },
   3240	[TSIF_H_RESET] = { 0x2700, 7 },
   3241	[CE1_H_RESET] = { 0x2720, 7 },
   3242	[CE1_CORE_RESET] = { 0x2724, 7 },
   3243	[CE1_SLEEP_RESET] = { 0x2728, 7 },
   3244	[CE2_H_RESET] = { 0x2740, 7 },
   3245	[CE2_CORE_RESET] = { 0x2744, 7 },
   3246	[SFAB_SFPB_M_RESET] = { 0x2780, 7 },
   3247	[SFAB_SFPB_S_RESET] = { 0x27a0, 7 },
   3248	[RPM_PROC_RESET] = { 0x27c0, 7 },
   3249	[PMIC_SSBI2_RESET] = { 0x280c, 12 },
   3250	[SDC1_RESET] = { 0x2830, 0 },
   3251	[SDC2_RESET] = { 0x2850, 0 },
   3252	[SDC3_RESET] = { 0x2870, 0 },
   3253	[SDC4_RESET] = { 0x2890, 0 },
   3254	[USB_HS1_RESET] = { 0x2910, 0 },
   3255	[USB_HSIC_RESET] = { 0x2934, 0 },
   3256	[USB_FS1_XCVR_RESET] = { 0x2974, 1 },
   3257	[USB_FS1_RESET] = { 0x2974, 0 },
   3258	[GSBI1_RESET] = { 0x29dc, 0 },
   3259	[GSBI2_RESET] = { 0x29fc, 0 },
   3260	[GSBI3_RESET] = { 0x2a1c, 0 },
   3261	[GSBI4_RESET] = { 0x2a3c, 0 },
   3262	[GSBI5_RESET] = { 0x2a5c, 0 },
   3263	[GSBI6_RESET] = { 0x2a7c, 0 },
   3264	[GSBI7_RESET] = { 0x2a9c, 0 },
   3265	[SPDM_RESET] = { 0x2b6c, 0 },
   3266	[SEC_CTRL_RESET] = { 0x2b80, 7 },
   3267	[TLMM_H_RESET] = { 0x2ba0, 7 },
   3268	[SFAB_SATA_M_RESET] = { 0x2c18, 0 },
   3269	[SATA_RESET] = { 0x2c1c, 0 },
   3270	[TSSC_RESET] = { 0x2ca0, 7 },
   3271	[PDM_RESET] = { 0x2cc0, 12 },
   3272	[MPM_H_RESET] = { 0x2da0, 7 },
   3273	[MPM_RESET] = { 0x2da4, 0 },
   3274	[SFAB_SMPSS_S_RESET] = { 0x2e00, 7 },
   3275	[PRNG_RESET] = { 0x2e80, 12 },
   3276	[SFAB_CE3_M_RESET] = { 0x36c8, 1 },
   3277	[SFAB_CE3_S_RESET] = { 0x36c8, 0 },
   3278	[CE3_SLEEP_RESET] = { 0x36d0, 7 },
   3279	[PCIE_1_M_RESET] = { 0x3a98, 1 },
   3280	[PCIE_1_S_RESET] = { 0x3a98, 0 },
   3281	[PCIE_1_EXT_RESET] = { 0x3a9c, 6 },
   3282	[PCIE_1_PHY_RESET] = { 0x3a9c, 5 },
   3283	[PCIE_1_PCI_RESET] = { 0x3a9c, 4 },
   3284	[PCIE_1_POR_RESET] = { 0x3a9c, 3 },
   3285	[PCIE_1_HCLK_RESET] = { 0x3a9c, 2 },
   3286	[PCIE_1_ACLK_RESET] = { 0x3a9c, 0 },
   3287	[PCIE_2_M_RESET] = { 0x3ad8, 1 },
   3288	[PCIE_2_S_RESET] = { 0x3ad8, 0 },
   3289	[PCIE_2_EXT_RESET] = { 0x3adc, 6 },
   3290	[PCIE_2_PHY_RESET] = { 0x3adc, 5 },
   3291	[PCIE_2_PCI_RESET] = { 0x3adc, 4 },
   3292	[PCIE_2_POR_RESET] = { 0x3adc, 3 },
   3293	[PCIE_2_HCLK_RESET] = { 0x3adc, 2 },
   3294	[PCIE_2_ACLK_RESET] = { 0x3adc, 0 },
   3295	[SFAB_USB30_S_RESET] = { 0x3b54, 1 },
   3296	[SFAB_USB30_M_RESET] = { 0x3b54, 0 },
   3297	[USB30_0_PORT2_HS_PHY_RESET] = { 0x3b50, 5 },
   3298	[USB30_0_MASTER_RESET] = { 0x3b50, 4 },
   3299	[USB30_0_SLEEP_RESET] = { 0x3b50, 3 },
   3300	[USB30_0_UTMI_PHY_RESET] = { 0x3b50, 2 },
   3301	[USB30_0_POWERON_RESET] = { 0x3b50, 1 },
   3302	[USB30_0_PHY_RESET] = { 0x3b50, 0 },
   3303	[USB30_1_MASTER_RESET] = { 0x3b58, 4 },
   3304	[USB30_1_SLEEP_RESET] = { 0x3b58, 3 },
   3305	[USB30_1_UTMI_PHY_RESET] = { 0x3b58, 2 },
   3306	[USB30_1_POWERON_RESET] = { 0x3b58, 1 },
   3307	[USB30_1_PHY_RESET] = { 0x3b58, 0 },
   3308	[NSSFB0_RESET] = { 0x3b60, 6 },
   3309	[NSSFB1_RESET] = { 0x3b60, 7 },
   3310	[UBI32_CORE1_CLKRST_CLAMP_RESET] = { 0x3d3c, 3},
   3311	[UBI32_CORE1_CLAMP_RESET] = { 0x3d3c, 2 },
   3312	[UBI32_CORE1_AHB_RESET] = { 0x3d3c, 1 },
   3313	[UBI32_CORE1_AXI_RESET] = { 0x3d3c, 0 },
   3314	[UBI32_CORE2_CLKRST_CLAMP_RESET] = { 0x3d5c, 3 },
   3315	[UBI32_CORE2_CLAMP_RESET] = { 0x3d5c, 2 },
   3316	[UBI32_CORE2_AHB_RESET] = { 0x3d5c, 1 },
   3317	[UBI32_CORE2_AXI_RESET] = { 0x3d5c, 0 },
   3318	[GMAC_CORE1_RESET] = { 0x3cbc, 0 },
   3319	[GMAC_CORE2_RESET] = { 0x3cdc, 0 },
   3320	[GMAC_CORE3_RESET] = { 0x3cfc, 0 },
   3321	[GMAC_CORE4_RESET] = { 0x3d1c, 0 },
   3322	[GMAC_AHB_RESET] = { 0x3e24, 0 },
   3323	[CRYPTO_ENG1_RESET] = { 0x3e00, 0},
   3324	[CRYPTO_ENG2_RESET] = { 0x3e04, 0},
   3325	[CRYPTO_ENG3_RESET] = { 0x3e08, 0},
   3326	[CRYPTO_ENG4_RESET] = { 0x3e0c, 0},
   3327	[CRYPTO_AHB_RESET] = { 0x3e10, 0},
   3328	[NSS_CH0_RST_RX_CLK_N_RESET] = { 0x3b60, 0 },
   3329	[NSS_CH0_RST_TX_CLK_N_RESET] = { 0x3b60, 1 },
   3330	[NSS_CH0_RST_RX_125M_N_RESET] = { 0x3b60, 2 },
   3331	[NSS_CH0_HW_RST_RX_125M_N_RESET] = { 0x3b60, 3 },
   3332	[NSS_CH0_RST_TX_125M_N_RESET] = { 0x3b60, 4 },
   3333	[NSS_CH1_RST_RX_CLK_N_RESET] = { 0x3b60, 5 },
   3334	[NSS_CH1_RST_TX_CLK_N_RESET] = { 0x3b60, 6 },
   3335	[NSS_CH1_RST_RX_125M_N_RESET] = { 0x3b60, 7 },
   3336	[NSS_CH1_HW_RST_RX_125M_N_RESET] = { 0x3b60, 8 },
   3337	[NSS_CH1_RST_TX_125M_N_RESET] = { 0x3b60, 9 },
   3338	[NSS_CH2_RST_RX_CLK_N_RESET] = { 0x3b60, 10 },
   3339	[NSS_CH2_RST_TX_CLK_N_RESET] = { 0x3b60, 11 },
   3340	[NSS_CH2_RST_RX_125M_N_RESET] = { 0x3b60, 12 },
   3341	[NSS_CH2_HW_RST_RX_125M_N_RESET] = { 0x3b60, 13 },
   3342	[NSS_CH2_RST_TX_125M_N_RESET] = { 0x3b60, 14 },
   3343	[NSS_CH3_RST_RX_CLK_N_RESET] = { 0x3b60, 15 },
   3344	[NSS_CH3_RST_TX_CLK_N_RESET] = { 0x3b60, 16 },
   3345	[NSS_CH3_RST_RX_125M_N_RESET] = { 0x3b60, 17 },
   3346	[NSS_CH3_HW_RST_RX_125M_N_RESET] = { 0x3b60, 18 },
   3347	[NSS_CH3_RST_TX_125M_N_RESET] = { 0x3b60, 19 },
   3348	[NSS_RST_RX_250M_125M_N_RESET] = { 0x3b60, 20 },
   3349	[NSS_RST_TX_250M_125M_N_RESET] = { 0x3b60, 21 },
   3350	[NSS_QSGMII_TXPI_RST_N_RESET] = { 0x3b60, 22 },
   3351	[NSS_QSGMII_CDR_RST_N_RESET] = { 0x3b60, 23 },
   3352	[NSS_SGMII2_CDR_RST_N_RESET] = { 0x3b60, 24 },
   3353	[NSS_SGMII3_CDR_RST_N_RESET] = { 0x3b60, 25 },
   3354	[NSS_CAL_PRBS_RST_N_RESET] = { 0x3b60, 26 },
   3355	[NSS_LCKDT_RST_N_RESET] = { 0x3b60, 27 },
   3356	[NSS_SRDS_N_RESET] = { 0x3b60, 28 },
   3357};
   3358
   3359static const struct regmap_config gcc_ipq806x_regmap_config = {
   3360	.reg_bits	= 32,
   3361	.reg_stride	= 4,
   3362	.val_bits	= 32,
   3363	.max_register	= 0x3e40,
   3364	.fast_io	= true,
   3365};
   3366
   3367static const struct qcom_cc_desc gcc_ipq806x_desc = {
   3368	.config = &gcc_ipq806x_regmap_config,
   3369	.clks = gcc_ipq806x_clks,
   3370	.num_clks = ARRAY_SIZE(gcc_ipq806x_clks),
   3371	.resets = gcc_ipq806x_resets,
   3372	.num_resets = ARRAY_SIZE(gcc_ipq806x_resets),
   3373};
   3374
   3375static const struct of_device_id gcc_ipq806x_match_table[] = {
   3376	{ .compatible = "qcom,gcc-ipq8064" },
   3377	{ }
   3378};
   3379MODULE_DEVICE_TABLE(of, gcc_ipq806x_match_table);
   3380
   3381static int gcc_ipq806x_probe(struct platform_device *pdev)
   3382{
   3383	struct device *dev = &pdev->dev;
   3384	struct regmap *regmap;
   3385	int ret;
   3386
   3387	ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 25000000);
   3388	if (ret)
   3389		return ret;
   3390
   3391	ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 25000000);
   3392	if (ret)
   3393		return ret;
   3394
   3395	if (of_machine_is_compatible("qcom,ipq8065")) {
   3396		ubi32_core1_src_clk.freq_tbl = clk_tbl_nss_ipq8065;
   3397		ubi32_core2_src_clk.freq_tbl = clk_tbl_nss_ipq8065;
   3398	} else {
   3399		ubi32_core1_src_clk.freq_tbl = clk_tbl_nss_ipq8064;
   3400		ubi32_core2_src_clk.freq_tbl = clk_tbl_nss_ipq8064;
   3401	}
   3402
   3403	ret = qcom_cc_probe(pdev, &gcc_ipq806x_desc);
   3404	if (ret)
   3405		return ret;
   3406
   3407	regmap = dev_get_regmap(dev, NULL);
   3408	if (!regmap)
   3409		return -ENODEV;
   3410
   3411	/* Setup PLL18 static bits */
   3412	regmap_update_bits(regmap, 0x31a4, 0xffffffc0, 0x40000400);
   3413	regmap_write(regmap, 0x31b0, 0x3080);
   3414
   3415	/* Set GMAC footswitch sleep/wakeup values */
   3416	regmap_write(regmap, 0x3cb8, 8);
   3417	regmap_write(regmap, 0x3cd8, 8);
   3418	regmap_write(regmap, 0x3cf8, 8);
   3419	regmap_write(regmap, 0x3d18, 8);
   3420
   3421	return of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev);
   3422}
   3423
   3424static struct platform_driver gcc_ipq806x_driver = {
   3425	.probe		= gcc_ipq806x_probe,
   3426	.driver		= {
   3427		.name	= "gcc-ipq806x",
   3428		.of_match_table = gcc_ipq806x_match_table,
   3429	},
   3430};
   3431
   3432static int __init gcc_ipq806x_init(void)
   3433{
   3434	return platform_driver_register(&gcc_ipq806x_driver);
   3435}
   3436core_initcall(gcc_ipq806x_init);
   3437
   3438static void __exit gcc_ipq806x_exit(void)
   3439{
   3440	platform_driver_unregister(&gcc_ipq806x_driver);
   3441}
   3442module_exit(gcc_ipq806x_exit);
   3443
   3444MODULE_DESCRIPTION("QCOM GCC IPQ806x Driver");
   3445MODULE_LICENSE("GPL v2");
   3446MODULE_ALIAS("platform:gcc-ipq806x");