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-msm8660.c (58452B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Copyright (c) 2013, 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-msm8660.h>
     18#include <dt-bindings/reset/qcom,gcc-msm8660.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 "reset.h"
     26
     27static struct clk_pll pll8 = {
     28	.l_reg = 0x3144,
     29	.m_reg = 0x3148,
     30	.n_reg = 0x314c,
     31	.config_reg = 0x3154,
     32	.mode_reg = 0x3140,
     33	.status_reg = 0x3158,
     34	.status_bit = 16,
     35	.clkr.hw.init = &(struct clk_init_data){
     36		.name = "pll8",
     37		.parent_names = (const char *[]){ "pxo" },
     38		.num_parents = 1,
     39		.ops = &clk_pll_ops,
     40	},
     41};
     42
     43static struct clk_regmap pll8_vote = {
     44	.enable_reg = 0x34c0,
     45	.enable_mask = BIT(8),
     46	.hw.init = &(struct clk_init_data){
     47		.name = "pll8_vote",
     48		.parent_names = (const char *[]){ "pll8" },
     49		.num_parents = 1,
     50		.ops = &clk_pll_vote_ops,
     51	},
     52};
     53
     54enum {
     55	P_PXO,
     56	P_PLL8,
     57	P_CXO,
     58};
     59
     60static const struct parent_map gcc_pxo_pll8_map[] = {
     61	{ P_PXO, 0 },
     62	{ P_PLL8, 3 }
     63};
     64
     65static const char * const gcc_pxo_pll8[] = {
     66	"pxo",
     67	"pll8_vote",
     68};
     69
     70static const struct parent_map gcc_pxo_pll8_cxo_map[] = {
     71	{ P_PXO, 0 },
     72	{ P_PLL8, 3 },
     73	{ P_CXO, 5 }
     74};
     75
     76static const char * const gcc_pxo_pll8_cxo[] = {
     77	"pxo",
     78	"pll8_vote",
     79	"cxo",
     80};
     81
     82static struct freq_tbl clk_tbl_gsbi_uart[] = {
     83	{  1843200, P_PLL8, 2,  6, 625 },
     84	{  3686400, P_PLL8, 2, 12, 625 },
     85	{  7372800, P_PLL8, 2, 24, 625 },
     86	{ 14745600, P_PLL8, 2, 48, 625 },
     87	{ 16000000, P_PLL8, 4,  1,   6 },
     88	{ 24000000, P_PLL8, 4,  1,   4 },
     89	{ 32000000, P_PLL8, 4,  1,   3 },
     90	{ 40000000, P_PLL8, 1,  5,  48 },
     91	{ 46400000, P_PLL8, 1, 29, 240 },
     92	{ 48000000, P_PLL8, 4,  1,   2 },
     93	{ 51200000, P_PLL8, 1,  2,  15 },
     94	{ 56000000, P_PLL8, 1,  7,  48 },
     95	{ 58982400, P_PLL8, 1, 96, 625 },
     96	{ 64000000, P_PLL8, 2,  1,   3 },
     97	{ }
     98};
     99
    100static struct clk_rcg gsbi1_uart_src = {
    101	.ns_reg = 0x29d4,
    102	.md_reg = 0x29d0,
    103	.mn = {
    104		.mnctr_en_bit = 8,
    105		.mnctr_reset_bit = 7,
    106		.mnctr_mode_shift = 5,
    107		.n_val_shift = 16,
    108		.m_val_shift = 16,
    109		.width = 16,
    110	},
    111	.p = {
    112		.pre_div_shift = 3,
    113		.pre_div_width = 2,
    114	},
    115	.s = {
    116		.src_sel_shift = 0,
    117		.parent_map = gcc_pxo_pll8_map,
    118	},
    119	.freq_tbl = clk_tbl_gsbi_uart,
    120	.clkr = {
    121		.enable_reg = 0x29d4,
    122		.enable_mask = BIT(11),
    123		.hw.init = &(struct clk_init_data){
    124			.name = "gsbi1_uart_src",
    125			.parent_names = gcc_pxo_pll8,
    126			.num_parents = 2,
    127			.ops = &clk_rcg_ops,
    128			.flags = CLK_SET_PARENT_GATE,
    129		},
    130	},
    131};
    132
    133static struct clk_branch gsbi1_uart_clk = {
    134	.halt_reg = 0x2fcc,
    135	.halt_bit = 10,
    136	.clkr = {
    137		.enable_reg = 0x29d4,
    138		.enable_mask = BIT(9),
    139		.hw.init = &(struct clk_init_data){
    140			.name = "gsbi1_uart_clk",
    141			.parent_names = (const char *[]){
    142				"gsbi1_uart_src",
    143			},
    144			.num_parents = 1,
    145			.ops = &clk_branch_ops,
    146			.flags = CLK_SET_RATE_PARENT,
    147		},
    148	},
    149};
    150
    151static struct clk_rcg gsbi2_uart_src = {
    152	.ns_reg = 0x29f4,
    153	.md_reg = 0x29f0,
    154	.mn = {
    155		.mnctr_en_bit = 8,
    156		.mnctr_reset_bit = 7,
    157		.mnctr_mode_shift = 5,
    158		.n_val_shift = 16,
    159		.m_val_shift = 16,
    160		.width = 16,
    161	},
    162	.p = {
    163		.pre_div_shift = 3,
    164		.pre_div_width = 2,
    165	},
    166	.s = {
    167		.src_sel_shift = 0,
    168		.parent_map = gcc_pxo_pll8_map,
    169	},
    170	.freq_tbl = clk_tbl_gsbi_uart,
    171	.clkr = {
    172		.enable_reg = 0x29f4,
    173		.enable_mask = BIT(11),
    174		.hw.init = &(struct clk_init_data){
    175			.name = "gsbi2_uart_src",
    176			.parent_names = gcc_pxo_pll8,
    177			.num_parents = 2,
    178			.ops = &clk_rcg_ops,
    179			.flags = CLK_SET_PARENT_GATE,
    180		},
    181	},
    182};
    183
    184static struct clk_branch gsbi2_uart_clk = {
    185	.halt_reg = 0x2fcc,
    186	.halt_bit = 6,
    187	.clkr = {
    188		.enable_reg = 0x29f4,
    189		.enable_mask = BIT(9),
    190		.hw.init = &(struct clk_init_data){
    191			.name = "gsbi2_uart_clk",
    192			.parent_names = (const char *[]){
    193				"gsbi2_uart_src",
    194			},
    195			.num_parents = 1,
    196			.ops = &clk_branch_ops,
    197			.flags = CLK_SET_RATE_PARENT,
    198		},
    199	},
    200};
    201
    202static struct clk_rcg gsbi3_uart_src = {
    203	.ns_reg = 0x2a14,
    204	.md_reg = 0x2a10,
    205	.mn = {
    206		.mnctr_en_bit = 8,
    207		.mnctr_reset_bit = 7,
    208		.mnctr_mode_shift = 5,
    209		.n_val_shift = 16,
    210		.m_val_shift = 16,
    211		.width = 16,
    212	},
    213	.p = {
    214		.pre_div_shift = 3,
    215		.pre_div_width = 2,
    216	},
    217	.s = {
    218		.src_sel_shift = 0,
    219		.parent_map = gcc_pxo_pll8_map,
    220	},
    221	.freq_tbl = clk_tbl_gsbi_uart,
    222	.clkr = {
    223		.enable_reg = 0x2a14,
    224		.enable_mask = BIT(11),
    225		.hw.init = &(struct clk_init_data){
    226			.name = "gsbi3_uart_src",
    227			.parent_names = gcc_pxo_pll8,
    228			.num_parents = 2,
    229			.ops = &clk_rcg_ops,
    230			.flags = CLK_SET_PARENT_GATE,
    231		},
    232	},
    233};
    234
    235static struct clk_branch gsbi3_uart_clk = {
    236	.halt_reg = 0x2fcc,
    237	.halt_bit = 2,
    238	.clkr = {
    239		.enable_reg = 0x2a14,
    240		.enable_mask = BIT(9),
    241		.hw.init = &(struct clk_init_data){
    242			.name = "gsbi3_uart_clk",
    243			.parent_names = (const char *[]){
    244				"gsbi3_uart_src",
    245			},
    246			.num_parents = 1,
    247			.ops = &clk_branch_ops,
    248			.flags = CLK_SET_RATE_PARENT,
    249		},
    250	},
    251};
    252
    253static struct clk_rcg gsbi4_uart_src = {
    254	.ns_reg = 0x2a34,
    255	.md_reg = 0x2a30,
    256	.mn = {
    257		.mnctr_en_bit = 8,
    258		.mnctr_reset_bit = 7,
    259		.mnctr_mode_shift = 5,
    260		.n_val_shift = 16,
    261		.m_val_shift = 16,
    262		.width = 16,
    263	},
    264	.p = {
    265		.pre_div_shift = 3,
    266		.pre_div_width = 2,
    267	},
    268	.s = {
    269		.src_sel_shift = 0,
    270		.parent_map = gcc_pxo_pll8_map,
    271	},
    272	.freq_tbl = clk_tbl_gsbi_uart,
    273	.clkr = {
    274		.enable_reg = 0x2a34,
    275		.enable_mask = BIT(11),
    276		.hw.init = &(struct clk_init_data){
    277			.name = "gsbi4_uart_src",
    278			.parent_names = gcc_pxo_pll8,
    279			.num_parents = 2,
    280			.ops = &clk_rcg_ops,
    281			.flags = CLK_SET_PARENT_GATE,
    282		},
    283	},
    284};
    285
    286static struct clk_branch gsbi4_uart_clk = {
    287	.halt_reg = 0x2fd0,
    288	.halt_bit = 26,
    289	.clkr = {
    290		.enable_reg = 0x2a34,
    291		.enable_mask = BIT(9),
    292		.hw.init = &(struct clk_init_data){
    293			.name = "gsbi4_uart_clk",
    294			.parent_names = (const char *[]){
    295				"gsbi4_uart_src",
    296			},
    297			.num_parents = 1,
    298			.ops = &clk_branch_ops,
    299			.flags = CLK_SET_RATE_PARENT,
    300		},
    301	},
    302};
    303
    304static struct clk_rcg gsbi5_uart_src = {
    305	.ns_reg = 0x2a54,
    306	.md_reg = 0x2a50,
    307	.mn = {
    308		.mnctr_en_bit = 8,
    309		.mnctr_reset_bit = 7,
    310		.mnctr_mode_shift = 5,
    311		.n_val_shift = 16,
    312		.m_val_shift = 16,
    313		.width = 16,
    314	},
    315	.p = {
    316		.pre_div_shift = 3,
    317		.pre_div_width = 2,
    318	},
    319	.s = {
    320		.src_sel_shift = 0,
    321		.parent_map = gcc_pxo_pll8_map,
    322	},
    323	.freq_tbl = clk_tbl_gsbi_uart,
    324	.clkr = {
    325		.enable_reg = 0x2a54,
    326		.enable_mask = BIT(11),
    327		.hw.init = &(struct clk_init_data){
    328			.name = "gsbi5_uart_src",
    329			.parent_names = gcc_pxo_pll8,
    330			.num_parents = 2,
    331			.ops = &clk_rcg_ops,
    332			.flags = CLK_SET_PARENT_GATE,
    333		},
    334	},
    335};
    336
    337static struct clk_branch gsbi5_uart_clk = {
    338	.halt_reg = 0x2fd0,
    339	.halt_bit = 22,
    340	.clkr = {
    341		.enable_reg = 0x2a54,
    342		.enable_mask = BIT(9),
    343		.hw.init = &(struct clk_init_data){
    344			.name = "gsbi5_uart_clk",
    345			.parent_names = (const char *[]){
    346				"gsbi5_uart_src",
    347			},
    348			.num_parents = 1,
    349			.ops = &clk_branch_ops,
    350			.flags = CLK_SET_RATE_PARENT,
    351		},
    352	},
    353};
    354
    355static struct clk_rcg gsbi6_uart_src = {
    356	.ns_reg = 0x2a74,
    357	.md_reg = 0x2a70,
    358	.mn = {
    359		.mnctr_en_bit = 8,
    360		.mnctr_reset_bit = 7,
    361		.mnctr_mode_shift = 5,
    362		.n_val_shift = 16,
    363		.m_val_shift = 16,
    364		.width = 16,
    365	},
    366	.p = {
    367		.pre_div_shift = 3,
    368		.pre_div_width = 2,
    369	},
    370	.s = {
    371		.src_sel_shift = 0,
    372		.parent_map = gcc_pxo_pll8_map,
    373	},
    374	.freq_tbl = clk_tbl_gsbi_uart,
    375	.clkr = {
    376		.enable_reg = 0x2a74,
    377		.enable_mask = BIT(11),
    378		.hw.init = &(struct clk_init_data){
    379			.name = "gsbi6_uart_src",
    380			.parent_names = gcc_pxo_pll8,
    381			.num_parents = 2,
    382			.ops = &clk_rcg_ops,
    383			.flags = CLK_SET_PARENT_GATE,
    384		},
    385	},
    386};
    387
    388static struct clk_branch gsbi6_uart_clk = {
    389	.halt_reg = 0x2fd0,
    390	.halt_bit = 18,
    391	.clkr = {
    392		.enable_reg = 0x2a74,
    393		.enable_mask = BIT(9),
    394		.hw.init = &(struct clk_init_data){
    395			.name = "gsbi6_uart_clk",
    396			.parent_names = (const char *[]){
    397				"gsbi6_uart_src",
    398			},
    399			.num_parents = 1,
    400			.ops = &clk_branch_ops,
    401			.flags = CLK_SET_RATE_PARENT,
    402		},
    403	},
    404};
    405
    406static struct clk_rcg gsbi7_uart_src = {
    407	.ns_reg = 0x2a94,
    408	.md_reg = 0x2a90,
    409	.mn = {
    410		.mnctr_en_bit = 8,
    411		.mnctr_reset_bit = 7,
    412		.mnctr_mode_shift = 5,
    413		.n_val_shift = 16,
    414		.m_val_shift = 16,
    415		.width = 16,
    416	},
    417	.p = {
    418		.pre_div_shift = 3,
    419		.pre_div_width = 2,
    420	},
    421	.s = {
    422		.src_sel_shift = 0,
    423		.parent_map = gcc_pxo_pll8_map,
    424	},
    425	.freq_tbl = clk_tbl_gsbi_uart,
    426	.clkr = {
    427		.enable_reg = 0x2a94,
    428		.enable_mask = BIT(11),
    429		.hw.init = &(struct clk_init_data){
    430			.name = "gsbi7_uart_src",
    431			.parent_names = gcc_pxo_pll8,
    432			.num_parents = 2,
    433			.ops = &clk_rcg_ops,
    434			.flags = CLK_SET_PARENT_GATE,
    435		},
    436	},
    437};
    438
    439static struct clk_branch gsbi7_uart_clk = {
    440	.halt_reg = 0x2fd0,
    441	.halt_bit = 14,
    442	.clkr = {
    443		.enable_reg = 0x2a94,
    444		.enable_mask = BIT(9),
    445		.hw.init = &(struct clk_init_data){
    446			.name = "gsbi7_uart_clk",
    447			.parent_names = (const char *[]){
    448				"gsbi7_uart_src",
    449			},
    450			.num_parents = 1,
    451			.ops = &clk_branch_ops,
    452			.flags = CLK_SET_RATE_PARENT,
    453		},
    454	},
    455};
    456
    457static struct clk_rcg gsbi8_uart_src = {
    458	.ns_reg = 0x2ab4,
    459	.md_reg = 0x2ab0,
    460	.mn = {
    461		.mnctr_en_bit = 8,
    462		.mnctr_reset_bit = 7,
    463		.mnctr_mode_shift = 5,
    464		.n_val_shift = 16,
    465		.m_val_shift = 16,
    466		.width = 16,
    467	},
    468	.p = {
    469		.pre_div_shift = 3,
    470		.pre_div_width = 2,
    471	},
    472	.s = {
    473		.src_sel_shift = 0,
    474		.parent_map = gcc_pxo_pll8_map,
    475	},
    476	.freq_tbl = clk_tbl_gsbi_uart,
    477	.clkr = {
    478		.enable_reg = 0x2ab4,
    479		.enable_mask = BIT(11),
    480		.hw.init = &(struct clk_init_data){
    481			.name = "gsbi8_uart_src",
    482			.parent_names = gcc_pxo_pll8,
    483			.num_parents = 2,
    484			.ops = &clk_rcg_ops,
    485			.flags = CLK_SET_PARENT_GATE,
    486		},
    487	},
    488};
    489
    490static struct clk_branch gsbi8_uart_clk = {
    491	.halt_reg = 0x2fd0,
    492	.halt_bit = 10,
    493	.clkr = {
    494		.enable_reg = 0x2ab4,
    495		.enable_mask = BIT(9),
    496		.hw.init = &(struct clk_init_data){
    497			.name = "gsbi8_uart_clk",
    498			.parent_names = (const char *[]){ "gsbi8_uart_src" },
    499			.num_parents = 1,
    500			.ops = &clk_branch_ops,
    501			.flags = CLK_SET_RATE_PARENT,
    502		},
    503	},
    504};
    505
    506static struct clk_rcg gsbi9_uart_src = {
    507	.ns_reg = 0x2ad4,
    508	.md_reg = 0x2ad0,
    509	.mn = {
    510		.mnctr_en_bit = 8,
    511		.mnctr_reset_bit = 7,
    512		.mnctr_mode_shift = 5,
    513		.n_val_shift = 16,
    514		.m_val_shift = 16,
    515		.width = 16,
    516	},
    517	.p = {
    518		.pre_div_shift = 3,
    519		.pre_div_width = 2,
    520	},
    521	.s = {
    522		.src_sel_shift = 0,
    523		.parent_map = gcc_pxo_pll8_map,
    524	},
    525	.freq_tbl = clk_tbl_gsbi_uart,
    526	.clkr = {
    527		.enable_reg = 0x2ad4,
    528		.enable_mask = BIT(11),
    529		.hw.init = &(struct clk_init_data){
    530			.name = "gsbi9_uart_src",
    531			.parent_names = gcc_pxo_pll8,
    532			.num_parents = 2,
    533			.ops = &clk_rcg_ops,
    534			.flags = CLK_SET_PARENT_GATE,
    535		},
    536	},
    537};
    538
    539static struct clk_branch gsbi9_uart_clk = {
    540	.halt_reg = 0x2fd0,
    541	.halt_bit = 6,
    542	.clkr = {
    543		.enable_reg = 0x2ad4,
    544		.enable_mask = BIT(9),
    545		.hw.init = &(struct clk_init_data){
    546			.name = "gsbi9_uart_clk",
    547			.parent_names = (const char *[]){ "gsbi9_uart_src" },
    548			.num_parents = 1,
    549			.ops = &clk_branch_ops,
    550			.flags = CLK_SET_RATE_PARENT,
    551		},
    552	},
    553};
    554
    555static struct clk_rcg gsbi10_uart_src = {
    556	.ns_reg = 0x2af4,
    557	.md_reg = 0x2af0,
    558	.mn = {
    559		.mnctr_en_bit = 8,
    560		.mnctr_reset_bit = 7,
    561		.mnctr_mode_shift = 5,
    562		.n_val_shift = 16,
    563		.m_val_shift = 16,
    564		.width = 16,
    565	},
    566	.p = {
    567		.pre_div_shift = 3,
    568		.pre_div_width = 2,
    569	},
    570	.s = {
    571		.src_sel_shift = 0,
    572		.parent_map = gcc_pxo_pll8_map,
    573	},
    574	.freq_tbl = clk_tbl_gsbi_uart,
    575	.clkr = {
    576		.enable_reg = 0x2af4,
    577		.enable_mask = BIT(11),
    578		.hw.init = &(struct clk_init_data){
    579			.name = "gsbi10_uart_src",
    580			.parent_names = gcc_pxo_pll8,
    581			.num_parents = 2,
    582			.ops = &clk_rcg_ops,
    583			.flags = CLK_SET_PARENT_GATE,
    584		},
    585	},
    586};
    587
    588static struct clk_branch gsbi10_uart_clk = {
    589	.halt_reg = 0x2fd0,
    590	.halt_bit = 2,
    591	.clkr = {
    592		.enable_reg = 0x2af4,
    593		.enable_mask = BIT(9),
    594		.hw.init = &(struct clk_init_data){
    595			.name = "gsbi10_uart_clk",
    596			.parent_names = (const char *[]){ "gsbi10_uart_src" },
    597			.num_parents = 1,
    598			.ops = &clk_branch_ops,
    599			.flags = CLK_SET_RATE_PARENT,
    600		},
    601	},
    602};
    603
    604static struct clk_rcg gsbi11_uart_src = {
    605	.ns_reg = 0x2b14,
    606	.md_reg = 0x2b10,
    607	.mn = {
    608		.mnctr_en_bit = 8,
    609		.mnctr_reset_bit = 7,
    610		.mnctr_mode_shift = 5,
    611		.n_val_shift = 16,
    612		.m_val_shift = 16,
    613		.width = 16,
    614	},
    615	.p = {
    616		.pre_div_shift = 3,
    617		.pre_div_width = 2,
    618	},
    619	.s = {
    620		.src_sel_shift = 0,
    621		.parent_map = gcc_pxo_pll8_map,
    622	},
    623	.freq_tbl = clk_tbl_gsbi_uart,
    624	.clkr = {
    625		.enable_reg = 0x2b14,
    626		.enable_mask = BIT(11),
    627		.hw.init = &(struct clk_init_data){
    628			.name = "gsbi11_uart_src",
    629			.parent_names = gcc_pxo_pll8,
    630			.num_parents = 2,
    631			.ops = &clk_rcg_ops,
    632			.flags = CLK_SET_PARENT_GATE,
    633		},
    634	},
    635};
    636
    637static struct clk_branch gsbi11_uart_clk = {
    638	.halt_reg = 0x2fd4,
    639	.halt_bit = 17,
    640	.clkr = {
    641		.enable_reg = 0x2b14,
    642		.enable_mask = BIT(9),
    643		.hw.init = &(struct clk_init_data){
    644			.name = "gsbi11_uart_clk",
    645			.parent_names = (const char *[]){ "gsbi11_uart_src" },
    646			.num_parents = 1,
    647			.ops = &clk_branch_ops,
    648			.flags = CLK_SET_RATE_PARENT,
    649		},
    650	},
    651};
    652
    653static struct clk_rcg gsbi12_uart_src = {
    654	.ns_reg = 0x2b34,
    655	.md_reg = 0x2b30,
    656	.mn = {
    657		.mnctr_en_bit = 8,
    658		.mnctr_reset_bit = 7,
    659		.mnctr_mode_shift = 5,
    660		.n_val_shift = 16,
    661		.m_val_shift = 16,
    662		.width = 16,
    663	},
    664	.p = {
    665		.pre_div_shift = 3,
    666		.pre_div_width = 2,
    667	},
    668	.s = {
    669		.src_sel_shift = 0,
    670		.parent_map = gcc_pxo_pll8_map,
    671	},
    672	.freq_tbl = clk_tbl_gsbi_uart,
    673	.clkr = {
    674		.enable_reg = 0x2b34,
    675		.enable_mask = BIT(11),
    676		.hw.init = &(struct clk_init_data){
    677			.name = "gsbi12_uart_src",
    678			.parent_names = gcc_pxo_pll8,
    679			.num_parents = 2,
    680			.ops = &clk_rcg_ops,
    681			.flags = CLK_SET_PARENT_GATE,
    682		},
    683	},
    684};
    685
    686static struct clk_branch gsbi12_uart_clk = {
    687	.halt_reg = 0x2fd4,
    688	.halt_bit = 13,
    689	.clkr = {
    690		.enable_reg = 0x2b34,
    691		.enable_mask = BIT(9),
    692		.hw.init = &(struct clk_init_data){
    693			.name = "gsbi12_uart_clk",
    694			.parent_names = (const char *[]){ "gsbi12_uart_src" },
    695			.num_parents = 1,
    696			.ops = &clk_branch_ops,
    697			.flags = CLK_SET_RATE_PARENT,
    698		},
    699	},
    700};
    701
    702static struct freq_tbl clk_tbl_gsbi_qup[] = {
    703	{  1100000, P_PXO,  1, 2, 49 },
    704	{  5400000, P_PXO,  1, 1,  5 },
    705	{ 10800000, P_PXO,  1, 2,  5 },
    706	{ 15060000, P_PLL8, 1, 2, 51 },
    707	{ 24000000, P_PLL8, 4, 1,  4 },
    708	{ 25600000, P_PLL8, 1, 1, 15 },
    709	{ 27000000, P_PXO,  1, 0,  0 },
    710	{ 48000000, P_PLL8, 4, 1,  2 },
    711	{ 51200000, P_PLL8, 1, 2, 15 },
    712	{ }
    713};
    714
    715static struct clk_rcg gsbi1_qup_src = {
    716	.ns_reg = 0x29cc,
    717	.md_reg = 0x29c8,
    718	.mn = {
    719		.mnctr_en_bit = 8,
    720		.mnctr_reset_bit = 7,
    721		.mnctr_mode_shift = 5,
    722		.n_val_shift = 16,
    723		.m_val_shift = 16,
    724		.width = 8,
    725	},
    726	.p = {
    727		.pre_div_shift = 3,
    728		.pre_div_width = 2,
    729	},
    730	.s = {
    731		.src_sel_shift = 0,
    732		.parent_map = gcc_pxo_pll8_map,
    733	},
    734	.freq_tbl = clk_tbl_gsbi_qup,
    735	.clkr = {
    736		.enable_reg = 0x29cc,
    737		.enable_mask = BIT(11),
    738		.hw.init = &(struct clk_init_data){
    739			.name = "gsbi1_qup_src",
    740			.parent_names = gcc_pxo_pll8,
    741			.num_parents = 2,
    742			.ops = &clk_rcg_ops,
    743			.flags = CLK_SET_PARENT_GATE,
    744		},
    745	},
    746};
    747
    748static struct clk_branch gsbi1_qup_clk = {
    749	.halt_reg = 0x2fcc,
    750	.halt_bit = 9,
    751	.clkr = {
    752		.enable_reg = 0x29cc,
    753		.enable_mask = BIT(9),
    754		.hw.init = &(struct clk_init_data){
    755			.name = "gsbi1_qup_clk",
    756			.parent_names = (const char *[]){ "gsbi1_qup_src" },
    757			.num_parents = 1,
    758			.ops = &clk_branch_ops,
    759			.flags = CLK_SET_RATE_PARENT,
    760		},
    761	},
    762};
    763
    764static struct clk_rcg gsbi2_qup_src = {
    765	.ns_reg = 0x29ec,
    766	.md_reg = 0x29e8,
    767	.mn = {
    768		.mnctr_en_bit = 8,
    769		.mnctr_reset_bit = 7,
    770		.mnctr_mode_shift = 5,
    771		.n_val_shift = 16,
    772		.m_val_shift = 16,
    773		.width = 8,
    774	},
    775	.p = {
    776		.pre_div_shift = 3,
    777		.pre_div_width = 2,
    778	},
    779	.s = {
    780		.src_sel_shift = 0,
    781		.parent_map = gcc_pxo_pll8_map,
    782	},
    783	.freq_tbl = clk_tbl_gsbi_qup,
    784	.clkr = {
    785		.enable_reg = 0x29ec,
    786		.enable_mask = BIT(11),
    787		.hw.init = &(struct clk_init_data){
    788			.name = "gsbi2_qup_src",
    789			.parent_names = gcc_pxo_pll8,
    790			.num_parents = 2,
    791			.ops = &clk_rcg_ops,
    792			.flags = CLK_SET_PARENT_GATE,
    793		},
    794	},
    795};
    796
    797static struct clk_branch gsbi2_qup_clk = {
    798	.halt_reg = 0x2fcc,
    799	.halt_bit = 4,
    800	.clkr = {
    801		.enable_reg = 0x29ec,
    802		.enable_mask = BIT(9),
    803		.hw.init = &(struct clk_init_data){
    804			.name = "gsbi2_qup_clk",
    805			.parent_names = (const char *[]){ "gsbi2_qup_src" },
    806			.num_parents = 1,
    807			.ops = &clk_branch_ops,
    808			.flags = CLK_SET_RATE_PARENT,
    809		},
    810	},
    811};
    812
    813static struct clk_rcg gsbi3_qup_src = {
    814	.ns_reg = 0x2a0c,
    815	.md_reg = 0x2a08,
    816	.mn = {
    817		.mnctr_en_bit = 8,
    818		.mnctr_reset_bit = 7,
    819		.mnctr_mode_shift = 5,
    820		.n_val_shift = 16,
    821		.m_val_shift = 16,
    822		.width = 8,
    823	},
    824	.p = {
    825		.pre_div_shift = 3,
    826		.pre_div_width = 2,
    827	},
    828	.s = {
    829		.src_sel_shift = 0,
    830		.parent_map = gcc_pxo_pll8_map,
    831	},
    832	.freq_tbl = clk_tbl_gsbi_qup,
    833	.clkr = {
    834		.enable_reg = 0x2a0c,
    835		.enable_mask = BIT(11),
    836		.hw.init = &(struct clk_init_data){
    837			.name = "gsbi3_qup_src",
    838			.parent_names = gcc_pxo_pll8,
    839			.num_parents = 2,
    840			.ops = &clk_rcg_ops,
    841			.flags = CLK_SET_PARENT_GATE,
    842		},
    843	},
    844};
    845
    846static struct clk_branch gsbi3_qup_clk = {
    847	.halt_reg = 0x2fcc,
    848	.halt_bit = 0,
    849	.clkr = {
    850		.enable_reg = 0x2a0c,
    851		.enable_mask = BIT(9),
    852		.hw.init = &(struct clk_init_data){
    853			.name = "gsbi3_qup_clk",
    854			.parent_names = (const char *[]){ "gsbi3_qup_src" },
    855			.num_parents = 1,
    856			.ops = &clk_branch_ops,
    857			.flags = CLK_SET_RATE_PARENT,
    858		},
    859	},
    860};
    861
    862static struct clk_rcg gsbi4_qup_src = {
    863	.ns_reg = 0x2a2c,
    864	.md_reg = 0x2a28,
    865	.mn = {
    866		.mnctr_en_bit = 8,
    867		.mnctr_reset_bit = 7,
    868		.mnctr_mode_shift = 5,
    869		.n_val_shift = 16,
    870		.m_val_shift = 16,
    871		.width = 8,
    872	},
    873	.p = {
    874		.pre_div_shift = 3,
    875		.pre_div_width = 2,
    876	},
    877	.s = {
    878		.src_sel_shift = 0,
    879		.parent_map = gcc_pxo_pll8_map,
    880	},
    881	.freq_tbl = clk_tbl_gsbi_qup,
    882	.clkr = {
    883		.enable_reg = 0x2a2c,
    884		.enable_mask = BIT(11),
    885		.hw.init = &(struct clk_init_data){
    886			.name = "gsbi4_qup_src",
    887			.parent_names = gcc_pxo_pll8,
    888			.num_parents = 2,
    889			.ops = &clk_rcg_ops,
    890			.flags = CLK_SET_PARENT_GATE,
    891		},
    892	},
    893};
    894
    895static struct clk_branch gsbi4_qup_clk = {
    896	.halt_reg = 0x2fd0,
    897	.halt_bit = 24,
    898	.clkr = {
    899		.enable_reg = 0x2a2c,
    900		.enable_mask = BIT(9),
    901		.hw.init = &(struct clk_init_data){
    902			.name = "gsbi4_qup_clk",
    903			.parent_names = (const char *[]){ "gsbi4_qup_src" },
    904			.num_parents = 1,
    905			.ops = &clk_branch_ops,
    906			.flags = CLK_SET_RATE_PARENT,
    907		},
    908	},
    909};
    910
    911static struct clk_rcg gsbi5_qup_src = {
    912	.ns_reg = 0x2a4c,
    913	.md_reg = 0x2a48,
    914	.mn = {
    915		.mnctr_en_bit = 8,
    916		.mnctr_reset_bit = 7,
    917		.mnctr_mode_shift = 5,
    918		.n_val_shift = 16,
    919		.m_val_shift = 16,
    920		.width = 8,
    921	},
    922	.p = {
    923		.pre_div_shift = 3,
    924		.pre_div_width = 2,
    925	},
    926	.s = {
    927		.src_sel_shift = 0,
    928		.parent_map = gcc_pxo_pll8_map,
    929	},
    930	.freq_tbl = clk_tbl_gsbi_qup,
    931	.clkr = {
    932		.enable_reg = 0x2a4c,
    933		.enable_mask = BIT(11),
    934		.hw.init = &(struct clk_init_data){
    935			.name = "gsbi5_qup_src",
    936			.parent_names = gcc_pxo_pll8,
    937			.num_parents = 2,
    938			.ops = &clk_rcg_ops,
    939			.flags = CLK_SET_PARENT_GATE,
    940		},
    941	},
    942};
    943
    944static struct clk_branch gsbi5_qup_clk = {
    945	.halt_reg = 0x2fd0,
    946	.halt_bit = 20,
    947	.clkr = {
    948		.enable_reg = 0x2a4c,
    949		.enable_mask = BIT(9),
    950		.hw.init = &(struct clk_init_data){
    951			.name = "gsbi5_qup_clk",
    952			.parent_names = (const char *[]){ "gsbi5_qup_src" },
    953			.num_parents = 1,
    954			.ops = &clk_branch_ops,
    955			.flags = CLK_SET_RATE_PARENT,
    956		},
    957	},
    958};
    959
    960static struct clk_rcg gsbi6_qup_src = {
    961	.ns_reg = 0x2a6c,
    962	.md_reg = 0x2a68,
    963	.mn = {
    964		.mnctr_en_bit = 8,
    965		.mnctr_reset_bit = 7,
    966		.mnctr_mode_shift = 5,
    967		.n_val_shift = 16,
    968		.m_val_shift = 16,
    969		.width = 8,
    970	},
    971	.p = {
    972		.pre_div_shift = 3,
    973		.pre_div_width = 2,
    974	},
    975	.s = {
    976		.src_sel_shift = 0,
    977		.parent_map = gcc_pxo_pll8_map,
    978	},
    979	.freq_tbl = clk_tbl_gsbi_qup,
    980	.clkr = {
    981		.enable_reg = 0x2a6c,
    982		.enable_mask = BIT(11),
    983		.hw.init = &(struct clk_init_data){
    984			.name = "gsbi6_qup_src",
    985			.parent_names = gcc_pxo_pll8,
    986			.num_parents = 2,
    987			.ops = &clk_rcg_ops,
    988			.flags = CLK_SET_PARENT_GATE,
    989		},
    990	},
    991};
    992
    993static struct clk_branch gsbi6_qup_clk = {
    994	.halt_reg = 0x2fd0,
    995	.halt_bit = 16,
    996	.clkr = {
    997		.enable_reg = 0x2a6c,
    998		.enable_mask = BIT(9),
    999		.hw.init = &(struct clk_init_data){
   1000			.name = "gsbi6_qup_clk",
   1001			.parent_names = (const char *[]){ "gsbi6_qup_src" },
   1002			.num_parents = 1,
   1003			.ops = &clk_branch_ops,
   1004			.flags = CLK_SET_RATE_PARENT,
   1005		},
   1006	},
   1007};
   1008
   1009static struct clk_rcg gsbi7_qup_src = {
   1010	.ns_reg = 0x2a8c,
   1011	.md_reg = 0x2a88,
   1012	.mn = {
   1013		.mnctr_en_bit = 8,
   1014		.mnctr_reset_bit = 7,
   1015		.mnctr_mode_shift = 5,
   1016		.n_val_shift = 16,
   1017		.m_val_shift = 16,
   1018		.width = 8,
   1019	},
   1020	.p = {
   1021		.pre_div_shift = 3,
   1022		.pre_div_width = 2,
   1023	},
   1024	.s = {
   1025		.src_sel_shift = 0,
   1026		.parent_map = gcc_pxo_pll8_map,
   1027	},
   1028	.freq_tbl = clk_tbl_gsbi_qup,
   1029	.clkr = {
   1030		.enable_reg = 0x2a8c,
   1031		.enable_mask = BIT(11),
   1032		.hw.init = &(struct clk_init_data){
   1033			.name = "gsbi7_qup_src",
   1034			.parent_names = gcc_pxo_pll8,
   1035			.num_parents = 2,
   1036			.ops = &clk_rcg_ops,
   1037			.flags = CLK_SET_PARENT_GATE,
   1038		},
   1039	},
   1040};
   1041
   1042static struct clk_branch gsbi7_qup_clk = {
   1043	.halt_reg = 0x2fd0,
   1044	.halt_bit = 12,
   1045	.clkr = {
   1046		.enable_reg = 0x2a8c,
   1047		.enable_mask = BIT(9),
   1048		.hw.init = &(struct clk_init_data){
   1049			.name = "gsbi7_qup_clk",
   1050			.parent_names = (const char *[]){ "gsbi7_qup_src" },
   1051			.num_parents = 1,
   1052			.ops = &clk_branch_ops,
   1053			.flags = CLK_SET_RATE_PARENT,
   1054		},
   1055	},
   1056};
   1057
   1058static struct clk_rcg gsbi8_qup_src = {
   1059	.ns_reg = 0x2aac,
   1060	.md_reg = 0x2aa8,
   1061	.mn = {
   1062		.mnctr_en_bit = 8,
   1063		.mnctr_reset_bit = 7,
   1064		.mnctr_mode_shift = 5,
   1065		.n_val_shift = 16,
   1066		.m_val_shift = 16,
   1067		.width = 8,
   1068	},
   1069	.p = {
   1070		.pre_div_shift = 3,
   1071		.pre_div_width = 2,
   1072	},
   1073	.s = {
   1074		.src_sel_shift = 0,
   1075		.parent_map = gcc_pxo_pll8_map,
   1076	},
   1077	.freq_tbl = clk_tbl_gsbi_qup,
   1078	.clkr = {
   1079		.enable_reg = 0x2aac,
   1080		.enable_mask = BIT(11),
   1081		.hw.init = &(struct clk_init_data){
   1082			.name = "gsbi8_qup_src",
   1083			.parent_names = gcc_pxo_pll8,
   1084			.num_parents = 2,
   1085			.ops = &clk_rcg_ops,
   1086			.flags = CLK_SET_PARENT_GATE,
   1087		},
   1088	},
   1089};
   1090
   1091static struct clk_branch gsbi8_qup_clk = {
   1092	.halt_reg = 0x2fd0,
   1093	.halt_bit = 8,
   1094	.clkr = {
   1095		.enable_reg = 0x2aac,
   1096		.enable_mask = BIT(9),
   1097		.hw.init = &(struct clk_init_data){
   1098			.name = "gsbi8_qup_clk",
   1099			.parent_names = (const char *[]){ "gsbi8_qup_src" },
   1100			.num_parents = 1,
   1101			.ops = &clk_branch_ops,
   1102			.flags = CLK_SET_RATE_PARENT,
   1103		},
   1104	},
   1105};
   1106
   1107static struct clk_rcg gsbi9_qup_src = {
   1108	.ns_reg = 0x2acc,
   1109	.md_reg = 0x2ac8,
   1110	.mn = {
   1111		.mnctr_en_bit = 8,
   1112		.mnctr_reset_bit = 7,
   1113		.mnctr_mode_shift = 5,
   1114		.n_val_shift = 16,
   1115		.m_val_shift = 16,
   1116		.width = 8,
   1117	},
   1118	.p = {
   1119		.pre_div_shift = 3,
   1120		.pre_div_width = 2,
   1121	},
   1122	.s = {
   1123		.src_sel_shift = 0,
   1124		.parent_map = gcc_pxo_pll8_map,
   1125	},
   1126	.freq_tbl = clk_tbl_gsbi_qup,
   1127	.clkr = {
   1128		.enable_reg = 0x2acc,
   1129		.enable_mask = BIT(11),
   1130		.hw.init = &(struct clk_init_data){
   1131			.name = "gsbi9_qup_src",
   1132			.parent_names = gcc_pxo_pll8,
   1133			.num_parents = 2,
   1134			.ops = &clk_rcg_ops,
   1135			.flags = CLK_SET_PARENT_GATE,
   1136		},
   1137	},
   1138};
   1139
   1140static struct clk_branch gsbi9_qup_clk = {
   1141	.halt_reg = 0x2fd0,
   1142	.halt_bit = 4,
   1143	.clkr = {
   1144		.enable_reg = 0x2acc,
   1145		.enable_mask = BIT(9),
   1146		.hw.init = &(struct clk_init_data){
   1147			.name = "gsbi9_qup_clk",
   1148			.parent_names = (const char *[]){ "gsbi9_qup_src" },
   1149			.num_parents = 1,
   1150			.ops = &clk_branch_ops,
   1151			.flags = CLK_SET_RATE_PARENT,
   1152		},
   1153	},
   1154};
   1155
   1156static struct clk_rcg gsbi10_qup_src = {
   1157	.ns_reg = 0x2aec,
   1158	.md_reg = 0x2ae8,
   1159	.mn = {
   1160		.mnctr_en_bit = 8,
   1161		.mnctr_reset_bit = 7,
   1162		.mnctr_mode_shift = 5,
   1163		.n_val_shift = 16,
   1164		.m_val_shift = 16,
   1165		.width = 8,
   1166	},
   1167	.p = {
   1168		.pre_div_shift = 3,
   1169		.pre_div_width = 2,
   1170	},
   1171	.s = {
   1172		.src_sel_shift = 0,
   1173		.parent_map = gcc_pxo_pll8_map,
   1174	},
   1175	.freq_tbl = clk_tbl_gsbi_qup,
   1176	.clkr = {
   1177		.enable_reg = 0x2aec,
   1178		.enable_mask = BIT(11),
   1179		.hw.init = &(struct clk_init_data){
   1180			.name = "gsbi10_qup_src",
   1181			.parent_names = gcc_pxo_pll8,
   1182			.num_parents = 2,
   1183			.ops = &clk_rcg_ops,
   1184			.flags = CLK_SET_PARENT_GATE,
   1185		},
   1186	},
   1187};
   1188
   1189static struct clk_branch gsbi10_qup_clk = {
   1190	.halt_reg = 0x2fd0,
   1191	.halt_bit = 0,
   1192	.clkr = {
   1193		.enable_reg = 0x2aec,
   1194		.enable_mask = BIT(9),
   1195		.hw.init = &(struct clk_init_data){
   1196			.name = "gsbi10_qup_clk",
   1197			.parent_names = (const char *[]){ "gsbi10_qup_src" },
   1198			.num_parents = 1,
   1199			.ops = &clk_branch_ops,
   1200			.flags = CLK_SET_RATE_PARENT,
   1201		},
   1202	},
   1203};
   1204
   1205static struct clk_rcg gsbi11_qup_src = {
   1206	.ns_reg = 0x2b0c,
   1207	.md_reg = 0x2b08,
   1208	.mn = {
   1209		.mnctr_en_bit = 8,
   1210		.mnctr_reset_bit = 7,
   1211		.mnctr_mode_shift = 5,
   1212		.n_val_shift = 16,
   1213		.m_val_shift = 16,
   1214		.width = 8,
   1215	},
   1216	.p = {
   1217		.pre_div_shift = 3,
   1218		.pre_div_width = 2,
   1219	},
   1220	.s = {
   1221		.src_sel_shift = 0,
   1222		.parent_map = gcc_pxo_pll8_map,
   1223	},
   1224	.freq_tbl = clk_tbl_gsbi_qup,
   1225	.clkr = {
   1226		.enable_reg = 0x2b0c,
   1227		.enable_mask = BIT(11),
   1228		.hw.init = &(struct clk_init_data){
   1229			.name = "gsbi11_qup_src",
   1230			.parent_names = gcc_pxo_pll8,
   1231			.num_parents = 2,
   1232			.ops = &clk_rcg_ops,
   1233			.flags = CLK_SET_PARENT_GATE,
   1234		},
   1235	},
   1236};
   1237
   1238static struct clk_branch gsbi11_qup_clk = {
   1239	.halt_reg = 0x2fd4,
   1240	.halt_bit = 15,
   1241	.clkr = {
   1242		.enable_reg = 0x2b0c,
   1243		.enable_mask = BIT(9),
   1244		.hw.init = &(struct clk_init_data){
   1245			.name = "gsbi11_qup_clk",
   1246			.parent_names = (const char *[]){ "gsbi11_qup_src" },
   1247			.num_parents = 1,
   1248			.ops = &clk_branch_ops,
   1249			.flags = CLK_SET_RATE_PARENT,
   1250		},
   1251	},
   1252};
   1253
   1254static struct clk_rcg gsbi12_qup_src = {
   1255	.ns_reg = 0x2b2c,
   1256	.md_reg = 0x2b28,
   1257	.mn = {
   1258		.mnctr_en_bit = 8,
   1259		.mnctr_reset_bit = 7,
   1260		.mnctr_mode_shift = 5,
   1261		.n_val_shift = 16,
   1262		.m_val_shift = 16,
   1263		.width = 8,
   1264	},
   1265	.p = {
   1266		.pre_div_shift = 3,
   1267		.pre_div_width = 2,
   1268	},
   1269	.s = {
   1270		.src_sel_shift = 0,
   1271		.parent_map = gcc_pxo_pll8_map,
   1272	},
   1273	.freq_tbl = clk_tbl_gsbi_qup,
   1274	.clkr = {
   1275		.enable_reg = 0x2b2c,
   1276		.enable_mask = BIT(11),
   1277		.hw.init = &(struct clk_init_data){
   1278			.name = "gsbi12_qup_src",
   1279			.parent_names = gcc_pxo_pll8,
   1280			.num_parents = 2,
   1281			.ops = &clk_rcg_ops,
   1282			.flags = CLK_SET_PARENT_GATE,
   1283		},
   1284	},
   1285};
   1286
   1287static struct clk_branch gsbi12_qup_clk = {
   1288	.halt_reg = 0x2fd4,
   1289	.halt_bit = 11,
   1290	.clkr = {
   1291		.enable_reg = 0x2b2c,
   1292		.enable_mask = BIT(9),
   1293		.hw.init = &(struct clk_init_data){
   1294			.name = "gsbi12_qup_clk",
   1295			.parent_names = (const char *[]){ "gsbi12_qup_src" },
   1296			.num_parents = 1,
   1297			.ops = &clk_branch_ops,
   1298			.flags = CLK_SET_RATE_PARENT,
   1299		},
   1300	},
   1301};
   1302
   1303static const struct freq_tbl clk_tbl_gp[] = {
   1304	{ 9600000, P_CXO,  2, 0, 0 },
   1305	{ 13500000, P_PXO,  2, 0, 0 },
   1306	{ 19200000, P_CXO,  1, 0, 0 },
   1307	{ 27000000, P_PXO,  1, 0, 0 },
   1308	{ 64000000, P_PLL8, 2, 1, 3 },
   1309	{ 76800000, P_PLL8, 1, 1, 5 },
   1310	{ 96000000, P_PLL8, 4, 0, 0 },
   1311	{ 128000000, P_PLL8, 3, 0, 0 },
   1312	{ 192000000, P_PLL8, 2, 0, 0 },
   1313	{ }
   1314};
   1315
   1316static struct clk_rcg gp0_src = {
   1317	.ns_reg = 0x2d24,
   1318	.md_reg = 0x2d00,
   1319	.mn = {
   1320		.mnctr_en_bit = 8,
   1321		.mnctr_reset_bit = 7,
   1322		.mnctr_mode_shift = 5,
   1323		.n_val_shift = 16,
   1324		.m_val_shift = 16,
   1325		.width = 8,
   1326	},
   1327	.p = {
   1328		.pre_div_shift = 3,
   1329		.pre_div_width = 2,
   1330	},
   1331	.s = {
   1332		.src_sel_shift = 0,
   1333		.parent_map = gcc_pxo_pll8_cxo_map,
   1334	},
   1335	.freq_tbl = clk_tbl_gp,
   1336	.clkr = {
   1337		.enable_reg = 0x2d24,
   1338		.enable_mask = BIT(11),
   1339		.hw.init = &(struct clk_init_data){
   1340			.name = "gp0_src",
   1341			.parent_names = gcc_pxo_pll8_cxo,
   1342			.num_parents = 3,
   1343			.ops = &clk_rcg_ops,
   1344			.flags = CLK_SET_PARENT_GATE,
   1345		},
   1346	}
   1347};
   1348
   1349static struct clk_branch gp0_clk = {
   1350	.halt_reg = 0x2fd8,
   1351	.halt_bit = 7,
   1352	.clkr = {
   1353		.enable_reg = 0x2d24,
   1354		.enable_mask = BIT(9),
   1355		.hw.init = &(struct clk_init_data){
   1356			.name = "gp0_clk",
   1357			.parent_names = (const char *[]){ "gp0_src" },
   1358			.num_parents = 1,
   1359			.ops = &clk_branch_ops,
   1360			.flags = CLK_SET_RATE_PARENT,
   1361		},
   1362	},
   1363};
   1364
   1365static struct clk_rcg gp1_src = {
   1366	.ns_reg = 0x2d44,
   1367	.md_reg = 0x2d40,
   1368	.mn = {
   1369		.mnctr_en_bit = 8,
   1370		.mnctr_reset_bit = 7,
   1371		.mnctr_mode_shift = 5,
   1372		.n_val_shift = 16,
   1373		.m_val_shift = 16,
   1374		.width = 8,
   1375	},
   1376	.p = {
   1377		.pre_div_shift = 3,
   1378		.pre_div_width = 2,
   1379	},
   1380	.s = {
   1381		.src_sel_shift = 0,
   1382		.parent_map = gcc_pxo_pll8_cxo_map,
   1383	},
   1384	.freq_tbl = clk_tbl_gp,
   1385	.clkr = {
   1386		.enable_reg = 0x2d44,
   1387		.enable_mask = BIT(11),
   1388		.hw.init = &(struct clk_init_data){
   1389			.name = "gp1_src",
   1390			.parent_names = gcc_pxo_pll8_cxo,
   1391			.num_parents = 3,
   1392			.ops = &clk_rcg_ops,
   1393			.flags = CLK_SET_RATE_GATE,
   1394		},
   1395	}
   1396};
   1397
   1398static struct clk_branch gp1_clk = {
   1399	.halt_reg = 0x2fd8,
   1400	.halt_bit = 6,
   1401	.clkr = {
   1402		.enable_reg = 0x2d44,
   1403		.enable_mask = BIT(9),
   1404		.hw.init = &(struct clk_init_data){
   1405			.name = "gp1_clk",
   1406			.parent_names = (const char *[]){ "gp1_src" },
   1407			.num_parents = 1,
   1408			.ops = &clk_branch_ops,
   1409			.flags = CLK_SET_RATE_PARENT,
   1410		},
   1411	},
   1412};
   1413
   1414static struct clk_rcg gp2_src = {
   1415	.ns_reg = 0x2d64,
   1416	.md_reg = 0x2d60,
   1417	.mn = {
   1418		.mnctr_en_bit = 8,
   1419		.mnctr_reset_bit = 7,
   1420		.mnctr_mode_shift = 5,
   1421		.n_val_shift = 16,
   1422		.m_val_shift = 16,
   1423		.width = 8,
   1424	},
   1425	.p = {
   1426		.pre_div_shift = 3,
   1427		.pre_div_width = 2,
   1428	},
   1429	.s = {
   1430		.src_sel_shift = 0,
   1431		.parent_map = gcc_pxo_pll8_cxo_map,
   1432	},
   1433	.freq_tbl = clk_tbl_gp,
   1434	.clkr = {
   1435		.enable_reg = 0x2d64,
   1436		.enable_mask = BIT(11),
   1437		.hw.init = &(struct clk_init_data){
   1438			.name = "gp2_src",
   1439			.parent_names = gcc_pxo_pll8_cxo,
   1440			.num_parents = 3,
   1441			.ops = &clk_rcg_ops,
   1442			.flags = CLK_SET_RATE_GATE,
   1443		},
   1444	}
   1445};
   1446
   1447static struct clk_branch gp2_clk = {
   1448	.halt_reg = 0x2fd8,
   1449	.halt_bit = 5,
   1450	.clkr = {
   1451		.enable_reg = 0x2d64,
   1452		.enable_mask = BIT(9),
   1453		.hw.init = &(struct clk_init_data){
   1454			.name = "gp2_clk",
   1455			.parent_names = (const char *[]){ "gp2_src" },
   1456			.num_parents = 1,
   1457			.ops = &clk_branch_ops,
   1458			.flags = CLK_SET_RATE_PARENT,
   1459		},
   1460	},
   1461};
   1462
   1463static struct clk_branch pmem_clk = {
   1464	.hwcg_reg = 0x25a0,
   1465	.hwcg_bit = 6,
   1466	.halt_reg = 0x2fc8,
   1467	.halt_bit = 20,
   1468	.clkr = {
   1469		.enable_reg = 0x25a0,
   1470		.enable_mask = BIT(4),
   1471		.hw.init = &(struct clk_init_data){
   1472			.name = "pmem_clk",
   1473			.ops = &clk_branch_ops,
   1474		},
   1475	},
   1476};
   1477
   1478static struct clk_rcg prng_src = {
   1479	.ns_reg = 0x2e80,
   1480	.p = {
   1481		.pre_div_shift = 3,
   1482		.pre_div_width = 4,
   1483	},
   1484	.s = {
   1485		.src_sel_shift = 0,
   1486		.parent_map = gcc_pxo_pll8_map,
   1487	},
   1488	.clkr.hw = {
   1489		.init = &(struct clk_init_data){
   1490			.name = "prng_src",
   1491			.parent_names = gcc_pxo_pll8,
   1492			.num_parents = 2,
   1493			.ops = &clk_rcg_ops,
   1494		},
   1495	},
   1496};
   1497
   1498static struct clk_branch prng_clk = {
   1499	.halt_reg = 0x2fd8,
   1500	.halt_check = BRANCH_HALT_VOTED,
   1501	.halt_bit = 10,
   1502	.clkr = {
   1503		.enable_reg = 0x3080,
   1504		.enable_mask = BIT(10),
   1505		.hw.init = &(struct clk_init_data){
   1506			.name = "prng_clk",
   1507			.parent_names = (const char *[]){ "prng_src" },
   1508			.num_parents = 1,
   1509			.ops = &clk_branch_ops,
   1510		},
   1511	},
   1512};
   1513
   1514static const struct freq_tbl clk_tbl_sdc[] = {
   1515	{    144000, P_PXO,   3, 2, 125 },
   1516	{    400000, P_PLL8,  4, 1, 240 },
   1517	{  16000000, P_PLL8,  4, 1,   6 },
   1518	{  17070000, P_PLL8,  1, 2,  45 },
   1519	{  20210000, P_PLL8,  1, 1,  19 },
   1520	{  24000000, P_PLL8,  4, 1,   4 },
   1521	{  48000000, P_PLL8,  4, 1,   2 },
   1522	{ }
   1523};
   1524
   1525static struct clk_rcg sdc1_src = {
   1526	.ns_reg = 0x282c,
   1527	.md_reg = 0x2828,
   1528	.mn = {
   1529		.mnctr_en_bit = 8,
   1530		.mnctr_reset_bit = 7,
   1531		.mnctr_mode_shift = 5,
   1532		.n_val_shift = 16,
   1533		.m_val_shift = 16,
   1534		.width = 8,
   1535	},
   1536	.p = {
   1537		.pre_div_shift = 3,
   1538		.pre_div_width = 2,
   1539	},
   1540	.s = {
   1541		.src_sel_shift = 0,
   1542		.parent_map = gcc_pxo_pll8_map,
   1543	},
   1544	.freq_tbl = clk_tbl_sdc,
   1545	.clkr = {
   1546		.enable_reg = 0x282c,
   1547		.enable_mask = BIT(11),
   1548		.hw.init = &(struct clk_init_data){
   1549			.name = "sdc1_src",
   1550			.parent_names = gcc_pxo_pll8,
   1551			.num_parents = 2,
   1552			.ops = &clk_rcg_ops,
   1553		},
   1554	}
   1555};
   1556
   1557static struct clk_branch sdc1_clk = {
   1558	.halt_reg = 0x2fc8,
   1559	.halt_bit = 6,
   1560	.clkr = {
   1561		.enable_reg = 0x282c,
   1562		.enable_mask = BIT(9),
   1563		.hw.init = &(struct clk_init_data){
   1564			.name = "sdc1_clk",
   1565			.parent_names = (const char *[]){ "sdc1_src" },
   1566			.num_parents = 1,
   1567			.ops = &clk_branch_ops,
   1568			.flags = CLK_SET_RATE_PARENT,
   1569		},
   1570	},
   1571};
   1572
   1573static struct clk_rcg sdc2_src = {
   1574	.ns_reg = 0x284c,
   1575	.md_reg = 0x2848,
   1576	.mn = {
   1577		.mnctr_en_bit = 8,
   1578		.mnctr_reset_bit = 7,
   1579		.mnctr_mode_shift = 5,
   1580		.n_val_shift = 16,
   1581		.m_val_shift = 16,
   1582		.width = 8,
   1583	},
   1584	.p = {
   1585		.pre_div_shift = 3,
   1586		.pre_div_width = 2,
   1587	},
   1588	.s = {
   1589		.src_sel_shift = 0,
   1590		.parent_map = gcc_pxo_pll8_map,
   1591	},
   1592	.freq_tbl = clk_tbl_sdc,
   1593	.clkr = {
   1594		.enable_reg = 0x284c,
   1595		.enable_mask = BIT(11),
   1596		.hw.init = &(struct clk_init_data){
   1597			.name = "sdc2_src",
   1598			.parent_names = gcc_pxo_pll8,
   1599			.num_parents = 2,
   1600			.ops = &clk_rcg_ops,
   1601		},
   1602	}
   1603};
   1604
   1605static struct clk_branch sdc2_clk = {
   1606	.halt_reg = 0x2fc8,
   1607	.halt_bit = 5,
   1608	.clkr = {
   1609		.enable_reg = 0x284c,
   1610		.enable_mask = BIT(9),
   1611		.hw.init = &(struct clk_init_data){
   1612			.name = "sdc2_clk",
   1613			.parent_names = (const char *[]){ "sdc2_src" },
   1614			.num_parents = 1,
   1615			.ops = &clk_branch_ops,
   1616			.flags = CLK_SET_RATE_PARENT,
   1617		},
   1618	},
   1619};
   1620
   1621static struct clk_rcg sdc3_src = {
   1622	.ns_reg = 0x286c,
   1623	.md_reg = 0x2868,
   1624	.mn = {
   1625		.mnctr_en_bit = 8,
   1626		.mnctr_reset_bit = 7,
   1627		.mnctr_mode_shift = 5,
   1628		.n_val_shift = 16,
   1629		.m_val_shift = 16,
   1630		.width = 8,
   1631	},
   1632	.p = {
   1633		.pre_div_shift = 3,
   1634		.pre_div_width = 2,
   1635	},
   1636	.s = {
   1637		.src_sel_shift = 0,
   1638		.parent_map = gcc_pxo_pll8_map,
   1639	},
   1640	.freq_tbl = clk_tbl_sdc,
   1641	.clkr = {
   1642		.enable_reg = 0x286c,
   1643		.enable_mask = BIT(11),
   1644		.hw.init = &(struct clk_init_data){
   1645			.name = "sdc3_src",
   1646			.parent_names = gcc_pxo_pll8,
   1647			.num_parents = 2,
   1648			.ops = &clk_rcg_ops,
   1649		},
   1650	}
   1651};
   1652
   1653static struct clk_branch sdc3_clk = {
   1654	.halt_reg = 0x2fc8,
   1655	.halt_bit = 4,
   1656	.clkr = {
   1657		.enable_reg = 0x286c,
   1658		.enable_mask = BIT(9),
   1659		.hw.init = &(struct clk_init_data){
   1660			.name = "sdc3_clk",
   1661			.parent_names = (const char *[]){ "sdc3_src" },
   1662			.num_parents = 1,
   1663			.ops = &clk_branch_ops,
   1664			.flags = CLK_SET_RATE_PARENT,
   1665		},
   1666	},
   1667};
   1668
   1669static struct clk_rcg sdc4_src = {
   1670	.ns_reg = 0x288c,
   1671	.md_reg = 0x2888,
   1672	.mn = {
   1673		.mnctr_en_bit = 8,
   1674		.mnctr_reset_bit = 7,
   1675		.mnctr_mode_shift = 5,
   1676		.n_val_shift = 16,
   1677		.m_val_shift = 16,
   1678		.width = 8,
   1679	},
   1680	.p = {
   1681		.pre_div_shift = 3,
   1682		.pre_div_width = 2,
   1683	},
   1684	.s = {
   1685		.src_sel_shift = 0,
   1686		.parent_map = gcc_pxo_pll8_map,
   1687	},
   1688	.freq_tbl = clk_tbl_sdc,
   1689	.clkr = {
   1690		.enable_reg = 0x288c,
   1691		.enable_mask = BIT(11),
   1692		.hw.init = &(struct clk_init_data){
   1693			.name = "sdc4_src",
   1694			.parent_names = gcc_pxo_pll8,
   1695			.num_parents = 2,
   1696			.ops = &clk_rcg_ops,
   1697		},
   1698	}
   1699};
   1700
   1701static struct clk_branch sdc4_clk = {
   1702	.halt_reg = 0x2fc8,
   1703	.halt_bit = 3,
   1704	.clkr = {
   1705		.enable_reg = 0x288c,
   1706		.enable_mask = BIT(9),
   1707		.hw.init = &(struct clk_init_data){
   1708			.name = "sdc4_clk",
   1709			.parent_names = (const char *[]){ "sdc4_src" },
   1710			.num_parents = 1,
   1711			.ops = &clk_branch_ops,
   1712			.flags = CLK_SET_RATE_PARENT,
   1713		},
   1714	},
   1715};
   1716
   1717static struct clk_rcg sdc5_src = {
   1718	.ns_reg = 0x28ac,
   1719	.md_reg = 0x28a8,
   1720	.mn = {
   1721		.mnctr_en_bit = 8,
   1722		.mnctr_reset_bit = 7,
   1723		.mnctr_mode_shift = 5,
   1724		.n_val_shift = 16,
   1725		.m_val_shift = 16,
   1726		.width = 8,
   1727	},
   1728	.p = {
   1729		.pre_div_shift = 3,
   1730		.pre_div_width = 2,
   1731	},
   1732	.s = {
   1733		.src_sel_shift = 0,
   1734		.parent_map = gcc_pxo_pll8_map,
   1735	},
   1736	.freq_tbl = clk_tbl_sdc,
   1737	.clkr = {
   1738		.enable_reg = 0x28ac,
   1739		.enable_mask = BIT(11),
   1740		.hw.init = &(struct clk_init_data){
   1741			.name = "sdc5_src",
   1742			.parent_names = gcc_pxo_pll8,
   1743			.num_parents = 2,
   1744			.ops = &clk_rcg_ops,
   1745		},
   1746	}
   1747};
   1748
   1749static struct clk_branch sdc5_clk = {
   1750	.halt_reg = 0x2fc8,
   1751	.halt_bit = 2,
   1752	.clkr = {
   1753		.enable_reg = 0x28ac,
   1754		.enable_mask = BIT(9),
   1755		.hw.init = &(struct clk_init_data){
   1756			.name = "sdc5_clk",
   1757			.parent_names = (const char *[]){ "sdc5_src" },
   1758			.num_parents = 1,
   1759			.ops = &clk_branch_ops,
   1760			.flags = CLK_SET_RATE_PARENT,
   1761		},
   1762	},
   1763};
   1764
   1765static const struct freq_tbl clk_tbl_tsif_ref[] = {
   1766	{ 105000, P_PXO,  1, 1, 256 },
   1767	{ }
   1768};
   1769
   1770static struct clk_rcg tsif_ref_src = {
   1771	.ns_reg = 0x2710,
   1772	.md_reg = 0x270c,
   1773	.mn = {
   1774		.mnctr_en_bit = 8,
   1775		.mnctr_reset_bit = 7,
   1776		.mnctr_mode_shift = 5,
   1777		.n_val_shift = 16,
   1778		.m_val_shift = 16,
   1779		.width = 16,
   1780	},
   1781	.p = {
   1782		.pre_div_shift = 3,
   1783		.pre_div_width = 2,
   1784	},
   1785	.s = {
   1786		.src_sel_shift = 0,
   1787		.parent_map = gcc_pxo_pll8_map,
   1788	},
   1789	.freq_tbl = clk_tbl_tsif_ref,
   1790	.clkr = {
   1791		.enable_reg = 0x2710,
   1792		.enable_mask = BIT(11),
   1793		.hw.init = &(struct clk_init_data){
   1794			.name = "tsif_ref_src",
   1795			.parent_names = gcc_pxo_pll8,
   1796			.num_parents = 2,
   1797			.ops = &clk_rcg_ops,
   1798			.flags = CLK_SET_RATE_GATE,
   1799		},
   1800	}
   1801};
   1802
   1803static struct clk_branch tsif_ref_clk = {
   1804	.halt_reg = 0x2fd4,
   1805	.halt_bit = 5,
   1806	.clkr = {
   1807		.enable_reg = 0x2710,
   1808		.enable_mask = BIT(9),
   1809		.hw.init = &(struct clk_init_data){
   1810			.name = "tsif_ref_clk",
   1811			.parent_names = (const char *[]){ "tsif_ref_src" },
   1812			.num_parents = 1,
   1813			.ops = &clk_branch_ops,
   1814			.flags = CLK_SET_RATE_PARENT,
   1815		},
   1816	},
   1817};
   1818
   1819static const struct freq_tbl clk_tbl_usb[] = {
   1820	{ 60000000, P_PLL8, 1, 5, 32 },
   1821	{ }
   1822};
   1823
   1824static struct clk_rcg usb_hs1_xcvr_src = {
   1825	.ns_reg = 0x290c,
   1826	.md_reg = 0x2908,
   1827	.mn = {
   1828		.mnctr_en_bit = 8,
   1829		.mnctr_reset_bit = 7,
   1830		.mnctr_mode_shift = 5,
   1831		.n_val_shift = 16,
   1832		.m_val_shift = 16,
   1833		.width = 8,
   1834	},
   1835	.p = {
   1836		.pre_div_shift = 3,
   1837		.pre_div_width = 2,
   1838	},
   1839	.s = {
   1840		.src_sel_shift = 0,
   1841		.parent_map = gcc_pxo_pll8_map,
   1842	},
   1843	.freq_tbl = clk_tbl_usb,
   1844	.clkr = {
   1845		.enable_reg = 0x290c,
   1846		.enable_mask = BIT(11),
   1847		.hw.init = &(struct clk_init_data){
   1848			.name = "usb_hs1_xcvr_src",
   1849			.parent_names = gcc_pxo_pll8,
   1850			.num_parents = 2,
   1851			.ops = &clk_rcg_ops,
   1852			.flags = CLK_SET_RATE_GATE,
   1853		},
   1854	}
   1855};
   1856
   1857static struct clk_branch usb_hs1_xcvr_clk = {
   1858	.halt_reg = 0x2fc8,
   1859	.halt_bit = 0,
   1860	.clkr = {
   1861		.enable_reg = 0x290c,
   1862		.enable_mask = BIT(9),
   1863		.hw.init = &(struct clk_init_data){
   1864			.name = "usb_hs1_xcvr_clk",
   1865			.parent_names = (const char *[]){ "usb_hs1_xcvr_src" },
   1866			.num_parents = 1,
   1867			.ops = &clk_branch_ops,
   1868			.flags = CLK_SET_RATE_PARENT,
   1869		},
   1870	},
   1871};
   1872
   1873static struct clk_rcg usb_fs1_xcvr_fs_src = {
   1874	.ns_reg = 0x2968,
   1875	.md_reg = 0x2964,
   1876	.mn = {
   1877		.mnctr_en_bit = 8,
   1878		.mnctr_reset_bit = 7,
   1879		.mnctr_mode_shift = 5,
   1880		.n_val_shift = 16,
   1881		.m_val_shift = 16,
   1882		.width = 8,
   1883	},
   1884	.p = {
   1885		.pre_div_shift = 3,
   1886		.pre_div_width = 2,
   1887	},
   1888	.s = {
   1889		.src_sel_shift = 0,
   1890		.parent_map = gcc_pxo_pll8_map,
   1891	},
   1892	.freq_tbl = clk_tbl_usb,
   1893	.clkr = {
   1894		.enable_reg = 0x2968,
   1895		.enable_mask = BIT(11),
   1896		.hw.init = &(struct clk_init_data){
   1897			.name = "usb_fs1_xcvr_fs_src",
   1898			.parent_names = gcc_pxo_pll8,
   1899			.num_parents = 2,
   1900			.ops = &clk_rcg_ops,
   1901			.flags = CLK_SET_RATE_GATE,
   1902		},
   1903	}
   1904};
   1905
   1906static const char * const usb_fs1_xcvr_fs_src_p[] = { "usb_fs1_xcvr_fs_src" };
   1907
   1908static struct clk_branch usb_fs1_xcvr_fs_clk = {
   1909	.halt_reg = 0x2fcc,
   1910	.halt_bit = 15,
   1911	.clkr = {
   1912		.enable_reg = 0x2968,
   1913		.enable_mask = BIT(9),
   1914		.hw.init = &(struct clk_init_data){
   1915			.name = "usb_fs1_xcvr_fs_clk",
   1916			.parent_names = usb_fs1_xcvr_fs_src_p,
   1917			.num_parents = 1,
   1918			.ops = &clk_branch_ops,
   1919			.flags = CLK_SET_RATE_PARENT,
   1920		},
   1921	},
   1922};
   1923
   1924static struct clk_branch usb_fs1_system_clk = {
   1925	.halt_reg = 0x2fcc,
   1926	.halt_bit = 16,
   1927	.clkr = {
   1928		.enable_reg = 0x296c,
   1929		.enable_mask = BIT(4),
   1930		.hw.init = &(struct clk_init_data){
   1931			.parent_names = usb_fs1_xcvr_fs_src_p,
   1932			.num_parents = 1,
   1933			.name = "usb_fs1_system_clk",
   1934			.ops = &clk_branch_ops,
   1935			.flags = CLK_SET_RATE_PARENT,
   1936		},
   1937	},
   1938};
   1939
   1940static struct clk_rcg usb_fs2_xcvr_fs_src = {
   1941	.ns_reg = 0x2988,
   1942	.md_reg = 0x2984,
   1943	.mn = {
   1944		.mnctr_en_bit = 8,
   1945		.mnctr_reset_bit = 7,
   1946		.mnctr_mode_shift = 5,
   1947		.n_val_shift = 16,
   1948		.m_val_shift = 16,
   1949		.width = 8,
   1950	},
   1951	.p = {
   1952		.pre_div_shift = 3,
   1953		.pre_div_width = 2,
   1954	},
   1955	.s = {
   1956		.src_sel_shift = 0,
   1957		.parent_map = gcc_pxo_pll8_map,
   1958	},
   1959	.freq_tbl = clk_tbl_usb,
   1960	.clkr = {
   1961		.enable_reg = 0x2988,
   1962		.enable_mask = BIT(11),
   1963		.hw.init = &(struct clk_init_data){
   1964			.name = "usb_fs2_xcvr_fs_src",
   1965			.parent_names = gcc_pxo_pll8,
   1966			.num_parents = 2,
   1967			.ops = &clk_rcg_ops,
   1968			.flags = CLK_SET_RATE_GATE,
   1969		},
   1970	}
   1971};
   1972
   1973static const char * const usb_fs2_xcvr_fs_src_p[] = { "usb_fs2_xcvr_fs_src" };
   1974
   1975static struct clk_branch usb_fs2_xcvr_fs_clk = {
   1976	.halt_reg = 0x2fcc,
   1977	.halt_bit = 12,
   1978	.clkr = {
   1979		.enable_reg = 0x2988,
   1980		.enable_mask = BIT(9),
   1981		.hw.init = &(struct clk_init_data){
   1982			.name = "usb_fs2_xcvr_fs_clk",
   1983			.parent_names = usb_fs2_xcvr_fs_src_p,
   1984			.num_parents = 1,
   1985			.ops = &clk_branch_ops,
   1986			.flags = CLK_SET_RATE_PARENT,
   1987		},
   1988	},
   1989};
   1990
   1991static struct clk_branch usb_fs2_system_clk = {
   1992	.halt_reg = 0x2fcc,
   1993	.halt_bit = 13,
   1994	.clkr = {
   1995		.enable_reg = 0x298c,
   1996		.enable_mask = BIT(4),
   1997		.hw.init = &(struct clk_init_data){
   1998			.name = "usb_fs2_system_clk",
   1999			.parent_names = usb_fs2_xcvr_fs_src_p,
   2000			.num_parents = 1,
   2001			.ops = &clk_branch_ops,
   2002			.flags = CLK_SET_RATE_PARENT,
   2003		},
   2004	},
   2005};
   2006
   2007static struct clk_branch gsbi1_h_clk = {
   2008	.halt_reg = 0x2fcc,
   2009	.halt_bit = 11,
   2010	.clkr = {
   2011		.enable_reg = 0x29c0,
   2012		.enable_mask = BIT(4),
   2013		.hw.init = &(struct clk_init_data){
   2014			.name = "gsbi1_h_clk",
   2015			.ops = &clk_branch_ops,
   2016		},
   2017	},
   2018};
   2019
   2020static struct clk_branch gsbi2_h_clk = {
   2021	.halt_reg = 0x2fcc,
   2022	.halt_bit = 7,
   2023	.clkr = {
   2024		.enable_reg = 0x29e0,
   2025		.enable_mask = BIT(4),
   2026		.hw.init = &(struct clk_init_data){
   2027			.name = "gsbi2_h_clk",
   2028			.ops = &clk_branch_ops,
   2029		},
   2030	},
   2031};
   2032
   2033static struct clk_branch gsbi3_h_clk = {
   2034	.halt_reg = 0x2fcc,
   2035	.halt_bit = 3,
   2036	.clkr = {
   2037		.enable_reg = 0x2a00,
   2038		.enable_mask = BIT(4),
   2039		.hw.init = &(struct clk_init_data){
   2040			.name = "gsbi3_h_clk",
   2041			.ops = &clk_branch_ops,
   2042		},
   2043	},
   2044};
   2045
   2046static struct clk_branch gsbi4_h_clk = {
   2047	.halt_reg = 0x2fd0,
   2048	.halt_bit = 27,
   2049	.clkr = {
   2050		.enable_reg = 0x2a20,
   2051		.enable_mask = BIT(4),
   2052		.hw.init = &(struct clk_init_data){
   2053			.name = "gsbi4_h_clk",
   2054			.ops = &clk_branch_ops,
   2055		},
   2056	},
   2057};
   2058
   2059static struct clk_branch gsbi5_h_clk = {
   2060	.halt_reg = 0x2fd0,
   2061	.halt_bit = 23,
   2062	.clkr = {
   2063		.enable_reg = 0x2a40,
   2064		.enable_mask = BIT(4),
   2065		.hw.init = &(struct clk_init_data){
   2066			.name = "gsbi5_h_clk",
   2067			.ops = &clk_branch_ops,
   2068		},
   2069	},
   2070};
   2071
   2072static struct clk_branch gsbi6_h_clk = {
   2073	.halt_reg = 0x2fd0,
   2074	.halt_bit = 19,
   2075	.clkr = {
   2076		.enable_reg = 0x2a60,
   2077		.enable_mask = BIT(4),
   2078		.hw.init = &(struct clk_init_data){
   2079			.name = "gsbi6_h_clk",
   2080			.ops = &clk_branch_ops,
   2081		},
   2082	},
   2083};
   2084
   2085static struct clk_branch gsbi7_h_clk = {
   2086	.halt_reg = 0x2fd0,
   2087	.halt_bit = 15,
   2088	.clkr = {
   2089		.enable_reg = 0x2a80,
   2090		.enable_mask = BIT(4),
   2091		.hw.init = &(struct clk_init_data){
   2092			.name = "gsbi7_h_clk",
   2093			.ops = &clk_branch_ops,
   2094		},
   2095	},
   2096};
   2097
   2098static struct clk_branch gsbi8_h_clk = {
   2099	.halt_reg = 0x2fd0,
   2100	.halt_bit = 11,
   2101	.clkr = {
   2102		.enable_reg = 0x2aa0,
   2103		.enable_mask = BIT(4),
   2104		.hw.init = &(struct clk_init_data){
   2105			.name = "gsbi8_h_clk",
   2106			.ops = &clk_branch_ops,
   2107		},
   2108	},
   2109};
   2110
   2111static struct clk_branch gsbi9_h_clk = {
   2112	.halt_reg = 0x2fd0,
   2113	.halt_bit = 7,
   2114	.clkr = {
   2115		.enable_reg = 0x2ac0,
   2116		.enable_mask = BIT(4),
   2117		.hw.init = &(struct clk_init_data){
   2118			.name = "gsbi9_h_clk",
   2119			.ops = &clk_branch_ops,
   2120		},
   2121	},
   2122};
   2123
   2124static struct clk_branch gsbi10_h_clk = {
   2125	.halt_reg = 0x2fd0,
   2126	.halt_bit = 3,
   2127	.clkr = {
   2128		.enable_reg = 0x2ae0,
   2129		.enable_mask = BIT(4),
   2130		.hw.init = &(struct clk_init_data){
   2131			.name = "gsbi10_h_clk",
   2132			.ops = &clk_branch_ops,
   2133		},
   2134	},
   2135};
   2136
   2137static struct clk_branch gsbi11_h_clk = {
   2138	.halt_reg = 0x2fd4,
   2139	.halt_bit = 18,
   2140	.clkr = {
   2141		.enable_reg = 0x2b00,
   2142		.enable_mask = BIT(4),
   2143		.hw.init = &(struct clk_init_data){
   2144			.name = "gsbi11_h_clk",
   2145			.ops = &clk_branch_ops,
   2146		},
   2147	},
   2148};
   2149
   2150static struct clk_branch gsbi12_h_clk = {
   2151	.halt_reg = 0x2fd4,
   2152	.halt_bit = 14,
   2153	.clkr = {
   2154		.enable_reg = 0x2b20,
   2155		.enable_mask = BIT(4),
   2156		.hw.init = &(struct clk_init_data){
   2157			.name = "gsbi12_h_clk",
   2158			.ops = &clk_branch_ops,
   2159		},
   2160	},
   2161};
   2162
   2163static struct clk_branch tsif_h_clk = {
   2164	.halt_reg = 0x2fd4,
   2165	.halt_bit = 7,
   2166	.clkr = {
   2167		.enable_reg = 0x2700,
   2168		.enable_mask = BIT(4),
   2169		.hw.init = &(struct clk_init_data){
   2170			.name = "tsif_h_clk",
   2171			.ops = &clk_branch_ops,
   2172		},
   2173	},
   2174};
   2175
   2176static struct clk_branch usb_fs1_h_clk = {
   2177	.halt_reg = 0x2fcc,
   2178	.halt_bit = 17,
   2179	.clkr = {
   2180		.enable_reg = 0x2960,
   2181		.enable_mask = BIT(4),
   2182		.hw.init = &(struct clk_init_data){
   2183			.name = "usb_fs1_h_clk",
   2184			.ops = &clk_branch_ops,
   2185		},
   2186	},
   2187};
   2188
   2189static struct clk_branch usb_fs2_h_clk = {
   2190	.halt_reg = 0x2fcc,
   2191	.halt_bit = 14,
   2192	.clkr = {
   2193		.enable_reg = 0x2980,
   2194		.enable_mask = BIT(4),
   2195		.hw.init = &(struct clk_init_data){
   2196			.name = "usb_fs2_h_clk",
   2197			.ops = &clk_branch_ops,
   2198		},
   2199	},
   2200};
   2201
   2202static struct clk_branch usb_hs1_h_clk = {
   2203	.halt_reg = 0x2fc8,
   2204	.halt_bit = 1,
   2205	.clkr = {
   2206		.enable_reg = 0x2900,
   2207		.enable_mask = BIT(4),
   2208		.hw.init = &(struct clk_init_data){
   2209			.name = "usb_hs1_h_clk",
   2210			.ops = &clk_branch_ops,
   2211		},
   2212	},
   2213};
   2214
   2215static struct clk_branch sdc1_h_clk = {
   2216	.halt_reg = 0x2fc8,
   2217	.halt_bit = 11,
   2218	.clkr = {
   2219		.enable_reg = 0x2820,
   2220		.enable_mask = BIT(4),
   2221		.hw.init = &(struct clk_init_data){
   2222			.name = "sdc1_h_clk",
   2223			.ops = &clk_branch_ops,
   2224		},
   2225	},
   2226};
   2227
   2228static struct clk_branch sdc2_h_clk = {
   2229	.halt_reg = 0x2fc8,
   2230	.halt_bit = 10,
   2231	.clkr = {
   2232		.enable_reg = 0x2840,
   2233		.enable_mask = BIT(4),
   2234		.hw.init = &(struct clk_init_data){
   2235			.name = "sdc2_h_clk",
   2236			.ops = &clk_branch_ops,
   2237		},
   2238	},
   2239};
   2240
   2241static struct clk_branch sdc3_h_clk = {
   2242	.halt_reg = 0x2fc8,
   2243	.halt_bit = 9,
   2244	.clkr = {
   2245		.enable_reg = 0x2860,
   2246		.enable_mask = BIT(4),
   2247		.hw.init = &(struct clk_init_data){
   2248			.name = "sdc3_h_clk",
   2249			.ops = &clk_branch_ops,
   2250		},
   2251	},
   2252};
   2253
   2254static struct clk_branch sdc4_h_clk = {
   2255	.halt_reg = 0x2fc8,
   2256	.halt_bit = 8,
   2257	.clkr = {
   2258		.enable_reg = 0x2880,
   2259		.enable_mask = BIT(4),
   2260		.hw.init = &(struct clk_init_data){
   2261			.name = "sdc4_h_clk",
   2262			.ops = &clk_branch_ops,
   2263		},
   2264	},
   2265};
   2266
   2267static struct clk_branch sdc5_h_clk = {
   2268	.halt_reg = 0x2fc8,
   2269	.halt_bit = 7,
   2270	.clkr = {
   2271		.enable_reg = 0x28a0,
   2272		.enable_mask = BIT(4),
   2273		.hw.init = &(struct clk_init_data){
   2274			.name = "sdc5_h_clk",
   2275			.ops = &clk_branch_ops,
   2276		},
   2277	},
   2278};
   2279
   2280static struct clk_branch ebi2_2x_clk = {
   2281	.halt_reg = 0x2fcc,
   2282	.halt_bit = 18,
   2283	.clkr = {
   2284		.enable_reg = 0x2660,
   2285		.enable_mask = BIT(4),
   2286		.hw.init = &(struct clk_init_data){
   2287			.name = "ebi2_2x_clk",
   2288			.ops = &clk_branch_ops,
   2289		},
   2290	},
   2291};
   2292
   2293static struct clk_branch ebi2_clk = {
   2294	.halt_reg = 0x2fcc,
   2295	.halt_bit = 19,
   2296	.clkr = {
   2297		.enable_reg = 0x2664,
   2298		.enable_mask = BIT(4),
   2299		.hw.init = &(struct clk_init_data){
   2300			.name = "ebi2_clk",
   2301			.ops = &clk_branch_ops,
   2302		},
   2303	},
   2304};
   2305
   2306static struct clk_branch adm0_clk = {
   2307	.halt_reg = 0x2fdc,
   2308	.halt_check = BRANCH_HALT_VOTED,
   2309	.halt_bit = 14,
   2310	.clkr = {
   2311		.enable_reg = 0x3080,
   2312		.enable_mask = BIT(2),
   2313		.hw.init = &(struct clk_init_data){
   2314			.name = "adm0_clk",
   2315			.ops = &clk_branch_ops,
   2316		},
   2317	},
   2318};
   2319
   2320static struct clk_branch adm0_pbus_clk = {
   2321	.halt_reg = 0x2fdc,
   2322	.halt_check = BRANCH_HALT_VOTED,
   2323	.halt_bit = 13,
   2324	.clkr = {
   2325		.enable_reg = 0x3080,
   2326		.enable_mask = BIT(3),
   2327		.hw.init = &(struct clk_init_data){
   2328			.name = "adm0_pbus_clk",
   2329			.ops = &clk_branch_ops,
   2330		},
   2331	},
   2332};
   2333
   2334static struct clk_branch adm1_clk = {
   2335	.halt_reg = 0x2fdc,
   2336	.halt_bit = 12,
   2337	.halt_check = BRANCH_HALT_VOTED,
   2338	.clkr = {
   2339		.enable_reg = 0x3080,
   2340		.enable_mask = BIT(4),
   2341		.hw.init = &(struct clk_init_data){
   2342			.name = "adm1_clk",
   2343			.ops = &clk_branch_ops,
   2344		},
   2345	},
   2346};
   2347
   2348static struct clk_branch adm1_pbus_clk = {
   2349	.halt_reg = 0x2fdc,
   2350	.halt_bit = 11,
   2351	.halt_check = BRANCH_HALT_VOTED,
   2352	.clkr = {
   2353		.enable_reg = 0x3080,
   2354		.enable_mask = BIT(5),
   2355		.hw.init = &(struct clk_init_data){
   2356			.name = "adm1_pbus_clk",
   2357			.ops = &clk_branch_ops,
   2358		},
   2359	},
   2360};
   2361
   2362static struct clk_branch modem_ahb1_h_clk = {
   2363	.halt_reg = 0x2fdc,
   2364	.halt_bit = 8,
   2365	.halt_check = BRANCH_HALT_VOTED,
   2366	.clkr = {
   2367		.enable_reg = 0x3080,
   2368		.enable_mask = BIT(0),
   2369		.hw.init = &(struct clk_init_data){
   2370			.name = "modem_ahb1_h_clk",
   2371			.ops = &clk_branch_ops,
   2372		},
   2373	},
   2374};
   2375
   2376static struct clk_branch modem_ahb2_h_clk = {
   2377	.halt_reg = 0x2fdc,
   2378	.halt_bit = 7,
   2379	.halt_check = BRANCH_HALT_VOTED,
   2380	.clkr = {
   2381		.enable_reg = 0x3080,
   2382		.enable_mask = BIT(1),
   2383		.hw.init = &(struct clk_init_data){
   2384			.name = "modem_ahb2_h_clk",
   2385			.ops = &clk_branch_ops,
   2386		},
   2387	},
   2388};
   2389
   2390static struct clk_branch pmic_arb0_h_clk = {
   2391	.halt_reg = 0x2fd8,
   2392	.halt_check = BRANCH_HALT_VOTED,
   2393	.halt_bit = 22,
   2394	.clkr = {
   2395		.enable_reg = 0x3080,
   2396		.enable_mask = BIT(8),
   2397		.hw.init = &(struct clk_init_data){
   2398			.name = "pmic_arb0_h_clk",
   2399			.ops = &clk_branch_ops,
   2400		},
   2401	},
   2402};
   2403
   2404static struct clk_branch pmic_arb1_h_clk = {
   2405	.halt_reg = 0x2fd8,
   2406	.halt_check = BRANCH_HALT_VOTED,
   2407	.halt_bit = 21,
   2408	.clkr = {
   2409		.enable_reg = 0x3080,
   2410		.enable_mask = BIT(9),
   2411		.hw.init = &(struct clk_init_data){
   2412			.name = "pmic_arb1_h_clk",
   2413			.ops = &clk_branch_ops,
   2414		},
   2415	},
   2416};
   2417
   2418static struct clk_branch pmic_ssbi2_clk = {
   2419	.halt_reg = 0x2fd8,
   2420	.halt_check = BRANCH_HALT_VOTED,
   2421	.halt_bit = 23,
   2422	.clkr = {
   2423		.enable_reg = 0x3080,
   2424		.enable_mask = BIT(7),
   2425		.hw.init = &(struct clk_init_data){
   2426			.name = "pmic_ssbi2_clk",
   2427			.ops = &clk_branch_ops,
   2428		},
   2429	},
   2430};
   2431
   2432static struct clk_branch rpm_msg_ram_h_clk = {
   2433	.hwcg_reg = 0x27e0,
   2434	.hwcg_bit = 6,
   2435	.halt_reg = 0x2fd8,
   2436	.halt_check = BRANCH_HALT_VOTED,
   2437	.halt_bit = 12,
   2438	.clkr = {
   2439		.enable_reg = 0x3080,
   2440		.enable_mask = BIT(6),
   2441		.hw.init = &(struct clk_init_data){
   2442			.name = "rpm_msg_ram_h_clk",
   2443			.ops = &clk_branch_ops,
   2444		},
   2445	},
   2446};
   2447
   2448static struct clk_regmap *gcc_msm8660_clks[] = {
   2449	[PLL8] = &pll8.clkr,
   2450	[PLL8_VOTE] = &pll8_vote,
   2451	[GSBI1_UART_SRC] = &gsbi1_uart_src.clkr,
   2452	[GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr,
   2453	[GSBI2_UART_SRC] = &gsbi2_uart_src.clkr,
   2454	[GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr,
   2455	[GSBI3_UART_SRC] = &gsbi3_uart_src.clkr,
   2456	[GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr,
   2457	[GSBI4_UART_SRC] = &gsbi4_uart_src.clkr,
   2458	[GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr,
   2459	[GSBI5_UART_SRC] = &gsbi5_uart_src.clkr,
   2460	[GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr,
   2461	[GSBI6_UART_SRC] = &gsbi6_uart_src.clkr,
   2462	[GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr,
   2463	[GSBI7_UART_SRC] = &gsbi7_uart_src.clkr,
   2464	[GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr,
   2465	[GSBI8_UART_SRC] = &gsbi8_uart_src.clkr,
   2466	[GSBI8_UART_CLK] = &gsbi8_uart_clk.clkr,
   2467	[GSBI9_UART_SRC] = &gsbi9_uart_src.clkr,
   2468	[GSBI9_UART_CLK] = &gsbi9_uart_clk.clkr,
   2469	[GSBI10_UART_SRC] = &gsbi10_uart_src.clkr,
   2470	[GSBI10_UART_CLK] = &gsbi10_uart_clk.clkr,
   2471	[GSBI11_UART_SRC] = &gsbi11_uart_src.clkr,
   2472	[GSBI11_UART_CLK] = &gsbi11_uart_clk.clkr,
   2473	[GSBI12_UART_SRC] = &gsbi12_uart_src.clkr,
   2474	[GSBI12_UART_CLK] = &gsbi12_uart_clk.clkr,
   2475	[GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr,
   2476	[GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr,
   2477	[GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr,
   2478	[GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr,
   2479	[GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr,
   2480	[GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr,
   2481	[GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr,
   2482	[GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr,
   2483	[GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr,
   2484	[GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr,
   2485	[GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr,
   2486	[GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr,
   2487	[GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr,
   2488	[GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr,
   2489	[GSBI8_QUP_SRC] = &gsbi8_qup_src.clkr,
   2490	[GSBI8_QUP_CLK] = &gsbi8_qup_clk.clkr,
   2491	[GSBI9_QUP_SRC] = &gsbi9_qup_src.clkr,
   2492	[GSBI9_QUP_CLK] = &gsbi9_qup_clk.clkr,
   2493	[GSBI10_QUP_SRC] = &gsbi10_qup_src.clkr,
   2494	[GSBI10_QUP_CLK] = &gsbi10_qup_clk.clkr,
   2495	[GSBI11_QUP_SRC] = &gsbi11_qup_src.clkr,
   2496	[GSBI11_QUP_CLK] = &gsbi11_qup_clk.clkr,
   2497	[GSBI12_QUP_SRC] = &gsbi12_qup_src.clkr,
   2498	[GSBI12_QUP_CLK] = &gsbi12_qup_clk.clkr,
   2499	[GP0_SRC] = &gp0_src.clkr,
   2500	[GP0_CLK] = &gp0_clk.clkr,
   2501	[GP1_SRC] = &gp1_src.clkr,
   2502	[GP1_CLK] = &gp1_clk.clkr,
   2503	[GP2_SRC] = &gp2_src.clkr,
   2504	[GP2_CLK] = &gp2_clk.clkr,
   2505	[PMEM_CLK] = &pmem_clk.clkr,
   2506	[PRNG_SRC] = &prng_src.clkr,
   2507	[PRNG_CLK] = &prng_clk.clkr,
   2508	[SDC1_SRC] = &sdc1_src.clkr,
   2509	[SDC1_CLK] = &sdc1_clk.clkr,
   2510	[SDC2_SRC] = &sdc2_src.clkr,
   2511	[SDC2_CLK] = &sdc2_clk.clkr,
   2512	[SDC3_SRC] = &sdc3_src.clkr,
   2513	[SDC3_CLK] = &sdc3_clk.clkr,
   2514	[SDC4_SRC] = &sdc4_src.clkr,
   2515	[SDC4_CLK] = &sdc4_clk.clkr,
   2516	[SDC5_SRC] = &sdc5_src.clkr,
   2517	[SDC5_CLK] = &sdc5_clk.clkr,
   2518	[TSIF_REF_SRC] = &tsif_ref_src.clkr,
   2519	[TSIF_REF_CLK] = &tsif_ref_clk.clkr,
   2520	[USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr,
   2521	[USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr,
   2522	[USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr,
   2523	[USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr,
   2524	[USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr,
   2525	[USB_FS2_XCVR_FS_SRC] = &usb_fs2_xcvr_fs_src.clkr,
   2526	[USB_FS2_XCVR_FS_CLK] = &usb_fs2_xcvr_fs_clk.clkr,
   2527	[USB_FS2_SYSTEM_CLK] = &usb_fs2_system_clk.clkr,
   2528	[GSBI1_H_CLK] = &gsbi1_h_clk.clkr,
   2529	[GSBI2_H_CLK] = &gsbi2_h_clk.clkr,
   2530	[GSBI3_H_CLK] = &gsbi3_h_clk.clkr,
   2531	[GSBI4_H_CLK] = &gsbi4_h_clk.clkr,
   2532	[GSBI5_H_CLK] = &gsbi5_h_clk.clkr,
   2533	[GSBI6_H_CLK] = &gsbi6_h_clk.clkr,
   2534	[GSBI7_H_CLK] = &gsbi7_h_clk.clkr,
   2535	[GSBI8_H_CLK] = &gsbi8_h_clk.clkr,
   2536	[GSBI9_H_CLK] = &gsbi9_h_clk.clkr,
   2537	[GSBI10_H_CLK] = &gsbi10_h_clk.clkr,
   2538	[GSBI11_H_CLK] = &gsbi11_h_clk.clkr,
   2539	[GSBI12_H_CLK] = &gsbi12_h_clk.clkr,
   2540	[TSIF_H_CLK] = &tsif_h_clk.clkr,
   2541	[USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr,
   2542	[USB_FS2_H_CLK] = &usb_fs2_h_clk.clkr,
   2543	[USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr,
   2544	[SDC1_H_CLK] = &sdc1_h_clk.clkr,
   2545	[SDC2_H_CLK] = &sdc2_h_clk.clkr,
   2546	[SDC3_H_CLK] = &sdc3_h_clk.clkr,
   2547	[SDC4_H_CLK] = &sdc4_h_clk.clkr,
   2548	[SDC5_H_CLK] = &sdc5_h_clk.clkr,
   2549	[EBI2_2X_CLK] = &ebi2_2x_clk.clkr,
   2550	[EBI2_CLK] = &ebi2_clk.clkr,
   2551	[ADM0_CLK] = &adm0_clk.clkr,
   2552	[ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr,
   2553	[ADM1_CLK] = &adm1_clk.clkr,
   2554	[ADM1_PBUS_CLK] = &adm1_pbus_clk.clkr,
   2555	[MODEM_AHB1_H_CLK] = &modem_ahb1_h_clk.clkr,
   2556	[MODEM_AHB2_H_CLK] = &modem_ahb2_h_clk.clkr,
   2557	[PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr,
   2558	[PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr,
   2559	[PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr,
   2560	[RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr,
   2561};
   2562
   2563static const struct qcom_reset_map gcc_msm8660_resets[] = {
   2564	[AFAB_CORE_RESET] = { 0x2080, 7 },
   2565	[SCSS_SYS_RESET] = { 0x20b4, 1 },
   2566	[SCSS_SYS_POR_RESET] = { 0x20b4 },
   2567	[AFAB_SMPSS_S_RESET] = { 0x20b8, 2 },
   2568	[AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 },
   2569	[AFAB_SMPSS_M0_RESET] = { 0x20b8 },
   2570	[AFAB_EBI1_S_RESET] = { 0x20c0, 7 },
   2571	[SFAB_CORE_RESET] = { 0x2120, 7 },
   2572	[SFAB_ADM0_M0_RESET] = { 0x21e0, 7 },
   2573	[SFAB_ADM0_M1_RESET] = { 0x21e4, 7 },
   2574	[SFAB_ADM0_M2_RESET] = { 0x21e4, 7 },
   2575	[ADM0_C2_RESET] = { 0x220c, 4 },
   2576	[ADM0_C1_RESET] = { 0x220c, 3 },
   2577	[ADM0_C0_RESET] = { 0x220c, 2 },
   2578	[ADM0_PBUS_RESET] = { 0x220c, 1 },
   2579	[ADM0_RESET] = { 0x220c },
   2580	[SFAB_ADM1_M0_RESET] = { 0x2220, 7 },
   2581	[SFAB_ADM1_M1_RESET] = { 0x2224, 7 },
   2582	[SFAB_ADM1_M2_RESET] = { 0x2228, 7 },
   2583	[MMFAB_ADM1_M3_RESET] = { 0x2240, 7 },
   2584	[ADM1_C3_RESET] = { 0x226c, 5 },
   2585	[ADM1_C2_RESET] = { 0x226c, 4 },
   2586	[ADM1_C1_RESET] = { 0x226c, 3 },
   2587	[ADM1_C0_RESET] = { 0x226c, 2 },
   2588	[ADM1_PBUS_RESET] = { 0x226c, 1 },
   2589	[ADM1_RESET] = { 0x226c },
   2590	[IMEM0_RESET] = { 0x2280, 7 },
   2591	[SFAB_LPASS_Q6_RESET] = { 0x23a0, 7 },
   2592	[SFAB_AFAB_M_RESET] = { 0x23e0, 7 },
   2593	[AFAB_SFAB_M0_RESET] = { 0x2420, 7 },
   2594	[AFAB_SFAB_M1_RESET] = { 0x2424, 7 },
   2595	[DFAB_CORE_RESET] = { 0x24ac, 7 },
   2596	[SFAB_DFAB_M_RESET] = { 0x2500, 7 },
   2597	[DFAB_SFAB_M_RESET] = { 0x2520, 7 },
   2598	[DFAB_SWAY0_RESET] = { 0x2540, 7 },
   2599	[DFAB_SWAY1_RESET] = { 0x2544, 7 },
   2600	[DFAB_ARB0_RESET] = { 0x2560, 7 },
   2601	[DFAB_ARB1_RESET] = { 0x2564, 7 },
   2602	[PPSS_PROC_RESET] = { 0x2594, 1 },
   2603	[PPSS_RESET] = { 0x2594 },
   2604	[PMEM_RESET] = { 0x25a0, 7 },
   2605	[DMA_BAM_RESET] = { 0x25c0, 7 },
   2606	[SIC_RESET] = { 0x25e0, 7 },
   2607	[SPS_TIC_RESET] = { 0x2600, 7 },
   2608	[CFBP0_RESET] = { 0x2650, 7 },
   2609	[CFBP1_RESET] = { 0x2654, 7 },
   2610	[CFBP2_RESET] = { 0x2658, 7 },
   2611	[EBI2_RESET] = { 0x2664, 7 },
   2612	[SFAB_CFPB_M_RESET] = { 0x2680, 7 },
   2613	[CFPB_MASTER_RESET] = { 0x26a0, 7 },
   2614	[SFAB_CFPB_S_RESET] = { 0x26c0, 7 },
   2615	[CFPB_SPLITTER_RESET] = { 0x26e0, 7 },
   2616	[TSIF_RESET] = { 0x2700, 7 },
   2617	[CE1_RESET] = { 0x2720, 7 },
   2618	[CE2_RESET] = { 0x2740, 7 },
   2619	[SFAB_SFPB_M_RESET] = { 0x2780, 7 },
   2620	[SFAB_SFPB_S_RESET] = { 0x27a0, 7 },
   2621	[RPM_PROC_RESET] = { 0x27c0, 7 },
   2622	[RPM_BUS_RESET] = { 0x27c4, 7 },
   2623	[RPM_MSG_RAM_RESET] = { 0x27e0, 7 },
   2624	[PMIC_ARB0_RESET] = { 0x2800, 7 },
   2625	[PMIC_ARB1_RESET] = { 0x2804, 7 },
   2626	[PMIC_SSBI2_RESET] = { 0x280c, 12 },
   2627	[SDC1_RESET] = { 0x2830 },
   2628	[SDC2_RESET] = { 0x2850 },
   2629	[SDC3_RESET] = { 0x2870 },
   2630	[SDC4_RESET] = { 0x2890 },
   2631	[SDC5_RESET] = { 0x28b0 },
   2632	[USB_HS1_RESET] = { 0x2910 },
   2633	[USB_HS2_XCVR_RESET] = { 0x2934, 1 },
   2634	[USB_HS2_RESET] = { 0x2934 },
   2635	[USB_FS1_XCVR_RESET] = { 0x2974, 1 },
   2636	[USB_FS1_RESET] = { 0x2974 },
   2637	[USB_FS2_XCVR_RESET] = { 0x2994, 1 },
   2638	[USB_FS2_RESET] = { 0x2994 },
   2639	[GSBI1_RESET] = { 0x29dc },
   2640	[GSBI2_RESET] = { 0x29fc },
   2641	[GSBI3_RESET] = { 0x2a1c },
   2642	[GSBI4_RESET] = { 0x2a3c },
   2643	[GSBI5_RESET] = { 0x2a5c },
   2644	[GSBI6_RESET] = { 0x2a7c },
   2645	[GSBI7_RESET] = { 0x2a9c },
   2646	[GSBI8_RESET] = { 0x2abc },
   2647	[GSBI9_RESET] = { 0x2adc },
   2648	[GSBI10_RESET] = { 0x2afc },
   2649	[GSBI11_RESET] = { 0x2b1c },
   2650	[GSBI12_RESET] = { 0x2b3c },
   2651	[SPDM_RESET] = { 0x2b6c },
   2652	[SEC_CTRL_RESET] = { 0x2b80, 7 },
   2653	[TLMM_H_RESET] = { 0x2ba0, 7 },
   2654	[TLMM_RESET] = { 0x2ba4, 7 },
   2655	[MARRM_PWRON_RESET] = { 0x2bd4, 1 },
   2656	[MARM_RESET] = { 0x2bd4 },
   2657	[MAHB1_RESET] = { 0x2be4, 7 },
   2658	[SFAB_MSS_S_RESET] = { 0x2c00, 7 },
   2659	[MAHB2_RESET] = { 0x2c20, 7 },
   2660	[MODEM_SW_AHB_RESET] = { 0x2c48, 1 },
   2661	[MODEM_RESET] = { 0x2c48 },
   2662	[SFAB_MSS_MDM1_RESET] = { 0x2c4c, 1 },
   2663	[SFAB_MSS_MDM0_RESET] = { 0x2c4c },
   2664	[MSS_SLP_RESET] = { 0x2c60, 7 },
   2665	[MSS_MARM_SAW_RESET] = { 0x2c68, 1 },
   2666	[MSS_WDOG_RESET] = { 0x2c68 },
   2667	[TSSC_RESET] = { 0x2ca0, 7 },
   2668	[PDM_RESET] = { 0x2cc0, 12 },
   2669	[SCSS_CORE0_RESET] = { 0x2d60, 1 },
   2670	[SCSS_CORE0_POR_RESET] = { 0x2d60 },
   2671	[SCSS_CORE1_RESET] = { 0x2d80, 1 },
   2672	[SCSS_CORE1_POR_RESET] = { 0x2d80 },
   2673	[MPM_RESET] = { 0x2da4, 1 },
   2674	[EBI1_1X_DIV_RESET] = { 0x2dec, 9 },
   2675	[EBI1_RESET] = { 0x2dec, 7 },
   2676	[SFAB_SMPSS_S_RESET] = { 0x2e00, 7 },
   2677	[USB_PHY0_RESET] = { 0x2e20 },
   2678	[USB_PHY1_RESET] = { 0x2e40 },
   2679	[PRNG_RESET] = { 0x2e80, 12 },
   2680};
   2681
   2682static const struct regmap_config gcc_msm8660_regmap_config = {
   2683	.reg_bits	= 32,
   2684	.reg_stride	= 4,
   2685	.val_bits	= 32,
   2686	.max_register	= 0x363c,
   2687	.fast_io	= true,
   2688};
   2689
   2690static const struct qcom_cc_desc gcc_msm8660_desc = {
   2691	.config = &gcc_msm8660_regmap_config,
   2692	.clks = gcc_msm8660_clks,
   2693	.num_clks = ARRAY_SIZE(gcc_msm8660_clks),
   2694	.resets = gcc_msm8660_resets,
   2695	.num_resets = ARRAY_SIZE(gcc_msm8660_resets),
   2696};
   2697
   2698static const struct of_device_id gcc_msm8660_match_table[] = {
   2699	{ .compatible = "qcom,gcc-msm8660" },
   2700	{ }
   2701};
   2702MODULE_DEVICE_TABLE(of, gcc_msm8660_match_table);
   2703
   2704static int gcc_msm8660_probe(struct platform_device *pdev)
   2705{
   2706	int ret;
   2707	struct device *dev = &pdev->dev;
   2708
   2709	ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 19200000);
   2710	if (ret)
   2711		return ret;
   2712
   2713	ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 27000000);
   2714	if (ret)
   2715		return ret;
   2716
   2717	return qcom_cc_probe(pdev, &gcc_msm8660_desc);
   2718}
   2719
   2720static struct platform_driver gcc_msm8660_driver = {
   2721	.probe		= gcc_msm8660_probe,
   2722	.driver		= {
   2723		.name	= "gcc-msm8660",
   2724		.of_match_table = gcc_msm8660_match_table,
   2725	},
   2726};
   2727
   2728static int __init gcc_msm8660_init(void)
   2729{
   2730	return platform_driver_register(&gcc_msm8660_driver);
   2731}
   2732core_initcall(gcc_msm8660_init);
   2733
   2734static void __exit gcc_msm8660_exit(void)
   2735{
   2736	platform_driver_unregister(&gcc_msm8660_driver);
   2737}
   2738module_exit(gcc_msm8660_exit);
   2739
   2740MODULE_DESCRIPTION("GCC MSM 8660 Driver");
   2741MODULE_LICENSE("GPL v2");
   2742MODULE_ALIAS("platform:gcc-msm8660");