Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright (c) 2013, The Linux Foundation. All rights reserved.
0004  */
0005 
0006 #include <linux/kernel.h>
0007 #include <linux/bitops.h>
0008 #include <linux/err.h>
0009 #include <linux/platform_device.h>
0010 #include <linux/module.h>
0011 #include <linux/of.h>
0012 #include <linux/of_device.h>
0013 #include <linux/clk-provider.h>
0014 #include <linux/regmap.h>
0015 #include <linux/reset-controller.h>
0016 
0017 #include <dt-bindings/clock/qcom,gcc-msm8660.h>
0018 #include <dt-bindings/reset/qcom,gcc-msm8660.h>
0019 
0020 #include "common.h"
0021 #include "clk-regmap.h"
0022 #include "clk-pll.h"
0023 #include "clk-rcg.h"
0024 #include "clk-branch.h"
0025 #include "reset.h"
0026 
0027 static struct clk_pll pll8 = {
0028     .l_reg = 0x3144,
0029     .m_reg = 0x3148,
0030     .n_reg = 0x314c,
0031     .config_reg = 0x3154,
0032     .mode_reg = 0x3140,
0033     .status_reg = 0x3158,
0034     .status_bit = 16,
0035     .clkr.hw.init = &(struct clk_init_data){
0036         .name = "pll8",
0037         .parent_names = (const char *[]){ "pxo" },
0038         .num_parents = 1,
0039         .ops = &clk_pll_ops,
0040     },
0041 };
0042 
0043 static struct clk_regmap pll8_vote = {
0044     .enable_reg = 0x34c0,
0045     .enable_mask = BIT(8),
0046     .hw.init = &(struct clk_init_data){
0047         .name = "pll8_vote",
0048         .parent_names = (const char *[]){ "pll8" },
0049         .num_parents = 1,
0050         .ops = &clk_pll_vote_ops,
0051     },
0052 };
0053 
0054 enum {
0055     P_PXO,
0056     P_PLL8,
0057     P_CXO,
0058 };
0059 
0060 static const struct parent_map gcc_pxo_pll8_map[] = {
0061     { P_PXO, 0 },
0062     { P_PLL8, 3 }
0063 };
0064 
0065 static const char * const gcc_pxo_pll8[] = {
0066     "pxo",
0067     "pll8_vote",
0068 };
0069 
0070 static const struct parent_map gcc_pxo_pll8_cxo_map[] = {
0071     { P_PXO, 0 },
0072     { P_PLL8, 3 },
0073     { P_CXO, 5 }
0074 };
0075 
0076 static const char * const gcc_pxo_pll8_cxo[] = {
0077     "pxo",
0078     "pll8_vote",
0079     "cxo",
0080 };
0081 
0082 static struct freq_tbl clk_tbl_gsbi_uart[] = {
0083     {  1843200, P_PLL8, 2,  6, 625 },
0084     {  3686400, P_PLL8, 2, 12, 625 },
0085     {  7372800, P_PLL8, 2, 24, 625 },
0086     { 14745600, P_PLL8, 2, 48, 625 },
0087     { 16000000, P_PLL8, 4,  1,   6 },
0088     { 24000000, P_PLL8, 4,  1,   4 },
0089     { 32000000, P_PLL8, 4,  1,   3 },
0090     { 40000000, P_PLL8, 1,  5,  48 },
0091     { 46400000, P_PLL8, 1, 29, 240 },
0092     { 48000000, P_PLL8, 4,  1,   2 },
0093     { 51200000, P_PLL8, 1,  2,  15 },
0094     { 56000000, P_PLL8, 1,  7,  48 },
0095     { 58982400, P_PLL8, 1, 96, 625 },
0096     { 64000000, P_PLL8, 2,  1,   3 },
0097     { }
0098 };
0099 
0100 static struct clk_rcg gsbi1_uart_src = {
0101     .ns_reg = 0x29d4,
0102     .md_reg = 0x29d0,
0103     .mn = {
0104         .mnctr_en_bit = 8,
0105         .mnctr_reset_bit = 7,
0106         .mnctr_mode_shift = 5,
0107         .n_val_shift = 16,
0108         .m_val_shift = 16,
0109         .width = 16,
0110     },
0111     .p = {
0112         .pre_div_shift = 3,
0113         .pre_div_width = 2,
0114     },
0115     .s = {
0116         .src_sel_shift = 0,
0117         .parent_map = gcc_pxo_pll8_map,
0118     },
0119     .freq_tbl = clk_tbl_gsbi_uart,
0120     .clkr = {
0121         .enable_reg = 0x29d4,
0122         .enable_mask = BIT(11),
0123         .hw.init = &(struct clk_init_data){
0124             .name = "gsbi1_uart_src",
0125             .parent_names = gcc_pxo_pll8,
0126             .num_parents = 2,
0127             .ops = &clk_rcg_ops,
0128             .flags = CLK_SET_PARENT_GATE,
0129         },
0130     },
0131 };
0132 
0133 static struct clk_branch gsbi1_uart_clk = {
0134     .halt_reg = 0x2fcc,
0135     .halt_bit = 10,
0136     .clkr = {
0137         .enable_reg = 0x29d4,
0138         .enable_mask = BIT(9),
0139         .hw.init = &(struct clk_init_data){
0140             .name = "gsbi1_uart_clk",
0141             .parent_names = (const char *[]){
0142                 "gsbi1_uart_src",
0143             },
0144             .num_parents = 1,
0145             .ops = &clk_branch_ops,
0146             .flags = CLK_SET_RATE_PARENT,
0147         },
0148     },
0149 };
0150 
0151 static struct clk_rcg gsbi2_uart_src = {
0152     .ns_reg = 0x29f4,
0153     .md_reg = 0x29f0,
0154     .mn = {
0155         .mnctr_en_bit = 8,
0156         .mnctr_reset_bit = 7,
0157         .mnctr_mode_shift = 5,
0158         .n_val_shift = 16,
0159         .m_val_shift = 16,
0160         .width = 16,
0161     },
0162     .p = {
0163         .pre_div_shift = 3,
0164         .pre_div_width = 2,
0165     },
0166     .s = {
0167         .src_sel_shift = 0,
0168         .parent_map = gcc_pxo_pll8_map,
0169     },
0170     .freq_tbl = clk_tbl_gsbi_uart,
0171     .clkr = {
0172         .enable_reg = 0x29f4,
0173         .enable_mask = BIT(11),
0174         .hw.init = &(struct clk_init_data){
0175             .name = "gsbi2_uart_src",
0176             .parent_names = gcc_pxo_pll8,
0177             .num_parents = 2,
0178             .ops = &clk_rcg_ops,
0179             .flags = CLK_SET_PARENT_GATE,
0180         },
0181     },
0182 };
0183 
0184 static struct clk_branch gsbi2_uart_clk = {
0185     .halt_reg = 0x2fcc,
0186     .halt_bit = 6,
0187     .clkr = {
0188         .enable_reg = 0x29f4,
0189         .enable_mask = BIT(9),
0190         .hw.init = &(struct clk_init_data){
0191             .name = "gsbi2_uart_clk",
0192             .parent_names = (const char *[]){
0193                 "gsbi2_uart_src",
0194             },
0195             .num_parents = 1,
0196             .ops = &clk_branch_ops,
0197             .flags = CLK_SET_RATE_PARENT,
0198         },
0199     },
0200 };
0201 
0202 static struct clk_rcg gsbi3_uart_src = {
0203     .ns_reg = 0x2a14,
0204     .md_reg = 0x2a10,
0205     .mn = {
0206         .mnctr_en_bit = 8,
0207         .mnctr_reset_bit = 7,
0208         .mnctr_mode_shift = 5,
0209         .n_val_shift = 16,
0210         .m_val_shift = 16,
0211         .width = 16,
0212     },
0213     .p = {
0214         .pre_div_shift = 3,
0215         .pre_div_width = 2,
0216     },
0217     .s = {
0218         .src_sel_shift = 0,
0219         .parent_map = gcc_pxo_pll8_map,
0220     },
0221     .freq_tbl = clk_tbl_gsbi_uart,
0222     .clkr = {
0223         .enable_reg = 0x2a14,
0224         .enable_mask = BIT(11),
0225         .hw.init = &(struct clk_init_data){
0226             .name = "gsbi3_uart_src",
0227             .parent_names = gcc_pxo_pll8,
0228             .num_parents = 2,
0229             .ops = &clk_rcg_ops,
0230             .flags = CLK_SET_PARENT_GATE,
0231         },
0232     },
0233 };
0234 
0235 static struct clk_branch gsbi3_uart_clk = {
0236     .halt_reg = 0x2fcc,
0237     .halt_bit = 2,
0238     .clkr = {
0239         .enable_reg = 0x2a14,
0240         .enable_mask = BIT(9),
0241         .hw.init = &(struct clk_init_data){
0242             .name = "gsbi3_uart_clk",
0243             .parent_names = (const char *[]){
0244                 "gsbi3_uart_src",
0245             },
0246             .num_parents = 1,
0247             .ops = &clk_branch_ops,
0248             .flags = CLK_SET_RATE_PARENT,
0249         },
0250     },
0251 };
0252 
0253 static struct clk_rcg gsbi4_uart_src = {
0254     .ns_reg = 0x2a34,
0255     .md_reg = 0x2a30,
0256     .mn = {
0257         .mnctr_en_bit = 8,
0258         .mnctr_reset_bit = 7,
0259         .mnctr_mode_shift = 5,
0260         .n_val_shift = 16,
0261         .m_val_shift = 16,
0262         .width = 16,
0263     },
0264     .p = {
0265         .pre_div_shift = 3,
0266         .pre_div_width = 2,
0267     },
0268     .s = {
0269         .src_sel_shift = 0,
0270         .parent_map = gcc_pxo_pll8_map,
0271     },
0272     .freq_tbl = clk_tbl_gsbi_uart,
0273     .clkr = {
0274         .enable_reg = 0x2a34,
0275         .enable_mask = BIT(11),
0276         .hw.init = &(struct clk_init_data){
0277             .name = "gsbi4_uart_src",
0278             .parent_names = gcc_pxo_pll8,
0279             .num_parents = 2,
0280             .ops = &clk_rcg_ops,
0281             .flags = CLK_SET_PARENT_GATE,
0282         },
0283     },
0284 };
0285 
0286 static struct clk_branch gsbi4_uart_clk = {
0287     .halt_reg = 0x2fd0,
0288     .halt_bit = 26,
0289     .clkr = {
0290         .enable_reg = 0x2a34,
0291         .enable_mask = BIT(9),
0292         .hw.init = &(struct clk_init_data){
0293             .name = "gsbi4_uart_clk",
0294             .parent_names = (const char *[]){
0295                 "gsbi4_uart_src",
0296             },
0297             .num_parents = 1,
0298             .ops = &clk_branch_ops,
0299             .flags = CLK_SET_RATE_PARENT,
0300         },
0301     },
0302 };
0303 
0304 static struct clk_rcg gsbi5_uart_src = {
0305     .ns_reg = 0x2a54,
0306     .md_reg = 0x2a50,
0307     .mn = {
0308         .mnctr_en_bit = 8,
0309         .mnctr_reset_bit = 7,
0310         .mnctr_mode_shift = 5,
0311         .n_val_shift = 16,
0312         .m_val_shift = 16,
0313         .width = 16,
0314     },
0315     .p = {
0316         .pre_div_shift = 3,
0317         .pre_div_width = 2,
0318     },
0319     .s = {
0320         .src_sel_shift = 0,
0321         .parent_map = gcc_pxo_pll8_map,
0322     },
0323     .freq_tbl = clk_tbl_gsbi_uart,
0324     .clkr = {
0325         .enable_reg = 0x2a54,
0326         .enable_mask = BIT(11),
0327         .hw.init = &(struct clk_init_data){
0328             .name = "gsbi5_uart_src",
0329             .parent_names = gcc_pxo_pll8,
0330             .num_parents = 2,
0331             .ops = &clk_rcg_ops,
0332             .flags = CLK_SET_PARENT_GATE,
0333         },
0334     },
0335 };
0336 
0337 static struct clk_branch gsbi5_uart_clk = {
0338     .halt_reg = 0x2fd0,
0339     .halt_bit = 22,
0340     .clkr = {
0341         .enable_reg = 0x2a54,
0342         .enable_mask = BIT(9),
0343         .hw.init = &(struct clk_init_data){
0344             .name = "gsbi5_uart_clk",
0345             .parent_names = (const char *[]){
0346                 "gsbi5_uart_src",
0347             },
0348             .num_parents = 1,
0349             .ops = &clk_branch_ops,
0350             .flags = CLK_SET_RATE_PARENT,
0351         },
0352     },
0353 };
0354 
0355 static struct clk_rcg gsbi6_uart_src = {
0356     .ns_reg = 0x2a74,
0357     .md_reg = 0x2a70,
0358     .mn = {
0359         .mnctr_en_bit = 8,
0360         .mnctr_reset_bit = 7,
0361         .mnctr_mode_shift = 5,
0362         .n_val_shift = 16,
0363         .m_val_shift = 16,
0364         .width = 16,
0365     },
0366     .p = {
0367         .pre_div_shift = 3,
0368         .pre_div_width = 2,
0369     },
0370     .s = {
0371         .src_sel_shift = 0,
0372         .parent_map = gcc_pxo_pll8_map,
0373     },
0374     .freq_tbl = clk_tbl_gsbi_uart,
0375     .clkr = {
0376         .enable_reg = 0x2a74,
0377         .enable_mask = BIT(11),
0378         .hw.init = &(struct clk_init_data){
0379             .name = "gsbi6_uart_src",
0380             .parent_names = gcc_pxo_pll8,
0381             .num_parents = 2,
0382             .ops = &clk_rcg_ops,
0383             .flags = CLK_SET_PARENT_GATE,
0384         },
0385     },
0386 };
0387 
0388 static struct clk_branch gsbi6_uart_clk = {
0389     .halt_reg = 0x2fd0,
0390     .halt_bit = 18,
0391     .clkr = {
0392         .enable_reg = 0x2a74,
0393         .enable_mask = BIT(9),
0394         .hw.init = &(struct clk_init_data){
0395             .name = "gsbi6_uart_clk",
0396             .parent_names = (const char *[]){
0397                 "gsbi6_uart_src",
0398             },
0399             .num_parents = 1,
0400             .ops = &clk_branch_ops,
0401             .flags = CLK_SET_RATE_PARENT,
0402         },
0403     },
0404 };
0405 
0406 static struct clk_rcg gsbi7_uart_src = {
0407     .ns_reg = 0x2a94,
0408     .md_reg = 0x2a90,
0409     .mn = {
0410         .mnctr_en_bit = 8,
0411         .mnctr_reset_bit = 7,
0412         .mnctr_mode_shift = 5,
0413         .n_val_shift = 16,
0414         .m_val_shift = 16,
0415         .width = 16,
0416     },
0417     .p = {
0418         .pre_div_shift = 3,
0419         .pre_div_width = 2,
0420     },
0421     .s = {
0422         .src_sel_shift = 0,
0423         .parent_map = gcc_pxo_pll8_map,
0424     },
0425     .freq_tbl = clk_tbl_gsbi_uart,
0426     .clkr = {
0427         .enable_reg = 0x2a94,
0428         .enable_mask = BIT(11),
0429         .hw.init = &(struct clk_init_data){
0430             .name = "gsbi7_uart_src",
0431             .parent_names = gcc_pxo_pll8,
0432             .num_parents = 2,
0433             .ops = &clk_rcg_ops,
0434             .flags = CLK_SET_PARENT_GATE,
0435         },
0436     },
0437 };
0438 
0439 static struct clk_branch gsbi7_uart_clk = {
0440     .halt_reg = 0x2fd0,
0441     .halt_bit = 14,
0442     .clkr = {
0443         .enable_reg = 0x2a94,
0444         .enable_mask = BIT(9),
0445         .hw.init = &(struct clk_init_data){
0446             .name = "gsbi7_uart_clk",
0447             .parent_names = (const char *[]){
0448                 "gsbi7_uart_src",
0449             },
0450             .num_parents = 1,
0451             .ops = &clk_branch_ops,
0452             .flags = CLK_SET_RATE_PARENT,
0453         },
0454     },
0455 };
0456 
0457 static struct clk_rcg gsbi8_uart_src = {
0458     .ns_reg = 0x2ab4,
0459     .md_reg = 0x2ab0,
0460     .mn = {
0461         .mnctr_en_bit = 8,
0462         .mnctr_reset_bit = 7,
0463         .mnctr_mode_shift = 5,
0464         .n_val_shift = 16,
0465         .m_val_shift = 16,
0466         .width = 16,
0467     },
0468     .p = {
0469         .pre_div_shift = 3,
0470         .pre_div_width = 2,
0471     },
0472     .s = {
0473         .src_sel_shift = 0,
0474         .parent_map = gcc_pxo_pll8_map,
0475     },
0476     .freq_tbl = clk_tbl_gsbi_uart,
0477     .clkr = {
0478         .enable_reg = 0x2ab4,
0479         .enable_mask = BIT(11),
0480         .hw.init = &(struct clk_init_data){
0481             .name = "gsbi8_uart_src",
0482             .parent_names = gcc_pxo_pll8,
0483             .num_parents = 2,
0484             .ops = &clk_rcg_ops,
0485             .flags = CLK_SET_PARENT_GATE,
0486         },
0487     },
0488 };
0489 
0490 static struct clk_branch gsbi8_uart_clk = {
0491     .halt_reg = 0x2fd0,
0492     .halt_bit = 10,
0493     .clkr = {
0494         .enable_reg = 0x2ab4,
0495         .enable_mask = BIT(9),
0496         .hw.init = &(struct clk_init_data){
0497             .name = "gsbi8_uart_clk",
0498             .parent_names = (const char *[]){ "gsbi8_uart_src" },
0499             .num_parents = 1,
0500             .ops = &clk_branch_ops,
0501             .flags = CLK_SET_RATE_PARENT,
0502         },
0503     },
0504 };
0505 
0506 static struct clk_rcg gsbi9_uart_src = {
0507     .ns_reg = 0x2ad4,
0508     .md_reg = 0x2ad0,
0509     .mn = {
0510         .mnctr_en_bit = 8,
0511         .mnctr_reset_bit = 7,
0512         .mnctr_mode_shift = 5,
0513         .n_val_shift = 16,
0514         .m_val_shift = 16,
0515         .width = 16,
0516     },
0517     .p = {
0518         .pre_div_shift = 3,
0519         .pre_div_width = 2,
0520     },
0521     .s = {
0522         .src_sel_shift = 0,
0523         .parent_map = gcc_pxo_pll8_map,
0524     },
0525     .freq_tbl = clk_tbl_gsbi_uart,
0526     .clkr = {
0527         .enable_reg = 0x2ad4,
0528         .enable_mask = BIT(11),
0529         .hw.init = &(struct clk_init_data){
0530             .name = "gsbi9_uart_src",
0531             .parent_names = gcc_pxo_pll8,
0532             .num_parents = 2,
0533             .ops = &clk_rcg_ops,
0534             .flags = CLK_SET_PARENT_GATE,
0535         },
0536     },
0537 };
0538 
0539 static struct clk_branch gsbi9_uart_clk = {
0540     .halt_reg = 0x2fd0,
0541     .halt_bit = 6,
0542     .clkr = {
0543         .enable_reg = 0x2ad4,
0544         .enable_mask = BIT(9),
0545         .hw.init = &(struct clk_init_data){
0546             .name = "gsbi9_uart_clk",
0547             .parent_names = (const char *[]){ "gsbi9_uart_src" },
0548             .num_parents = 1,
0549             .ops = &clk_branch_ops,
0550             .flags = CLK_SET_RATE_PARENT,
0551         },
0552     },
0553 };
0554 
0555 static struct clk_rcg gsbi10_uart_src = {
0556     .ns_reg = 0x2af4,
0557     .md_reg = 0x2af0,
0558     .mn = {
0559         .mnctr_en_bit = 8,
0560         .mnctr_reset_bit = 7,
0561         .mnctr_mode_shift = 5,
0562         .n_val_shift = 16,
0563         .m_val_shift = 16,
0564         .width = 16,
0565     },
0566     .p = {
0567         .pre_div_shift = 3,
0568         .pre_div_width = 2,
0569     },
0570     .s = {
0571         .src_sel_shift = 0,
0572         .parent_map = gcc_pxo_pll8_map,
0573     },
0574     .freq_tbl = clk_tbl_gsbi_uart,
0575     .clkr = {
0576         .enable_reg = 0x2af4,
0577         .enable_mask = BIT(11),
0578         .hw.init = &(struct clk_init_data){
0579             .name = "gsbi10_uart_src",
0580             .parent_names = gcc_pxo_pll8,
0581             .num_parents = 2,
0582             .ops = &clk_rcg_ops,
0583             .flags = CLK_SET_PARENT_GATE,
0584         },
0585     },
0586 };
0587 
0588 static struct clk_branch gsbi10_uart_clk = {
0589     .halt_reg = 0x2fd0,
0590     .halt_bit = 2,
0591     .clkr = {
0592         .enable_reg = 0x2af4,
0593         .enable_mask = BIT(9),
0594         .hw.init = &(struct clk_init_data){
0595             .name = "gsbi10_uart_clk",
0596             .parent_names = (const char *[]){ "gsbi10_uart_src" },
0597             .num_parents = 1,
0598             .ops = &clk_branch_ops,
0599             .flags = CLK_SET_RATE_PARENT,
0600         },
0601     },
0602 };
0603 
0604 static struct clk_rcg gsbi11_uart_src = {
0605     .ns_reg = 0x2b14,
0606     .md_reg = 0x2b10,
0607     .mn = {
0608         .mnctr_en_bit = 8,
0609         .mnctr_reset_bit = 7,
0610         .mnctr_mode_shift = 5,
0611         .n_val_shift = 16,
0612         .m_val_shift = 16,
0613         .width = 16,
0614     },
0615     .p = {
0616         .pre_div_shift = 3,
0617         .pre_div_width = 2,
0618     },
0619     .s = {
0620         .src_sel_shift = 0,
0621         .parent_map = gcc_pxo_pll8_map,
0622     },
0623     .freq_tbl = clk_tbl_gsbi_uart,
0624     .clkr = {
0625         .enable_reg = 0x2b14,
0626         .enable_mask = BIT(11),
0627         .hw.init = &(struct clk_init_data){
0628             .name = "gsbi11_uart_src",
0629             .parent_names = gcc_pxo_pll8,
0630             .num_parents = 2,
0631             .ops = &clk_rcg_ops,
0632             .flags = CLK_SET_PARENT_GATE,
0633         },
0634     },
0635 };
0636 
0637 static struct clk_branch gsbi11_uart_clk = {
0638     .halt_reg = 0x2fd4,
0639     .halt_bit = 17,
0640     .clkr = {
0641         .enable_reg = 0x2b14,
0642         .enable_mask = BIT(9),
0643         .hw.init = &(struct clk_init_data){
0644             .name = "gsbi11_uart_clk",
0645             .parent_names = (const char *[]){ "gsbi11_uart_src" },
0646             .num_parents = 1,
0647             .ops = &clk_branch_ops,
0648             .flags = CLK_SET_RATE_PARENT,
0649         },
0650     },
0651 };
0652 
0653 static struct clk_rcg gsbi12_uart_src = {
0654     .ns_reg = 0x2b34,
0655     .md_reg = 0x2b30,
0656     .mn = {
0657         .mnctr_en_bit = 8,
0658         .mnctr_reset_bit = 7,
0659         .mnctr_mode_shift = 5,
0660         .n_val_shift = 16,
0661         .m_val_shift = 16,
0662         .width = 16,
0663     },
0664     .p = {
0665         .pre_div_shift = 3,
0666         .pre_div_width = 2,
0667     },
0668     .s = {
0669         .src_sel_shift = 0,
0670         .parent_map = gcc_pxo_pll8_map,
0671     },
0672     .freq_tbl = clk_tbl_gsbi_uart,
0673     .clkr = {
0674         .enable_reg = 0x2b34,
0675         .enable_mask = BIT(11),
0676         .hw.init = &(struct clk_init_data){
0677             .name = "gsbi12_uart_src",
0678             .parent_names = gcc_pxo_pll8,
0679             .num_parents = 2,
0680             .ops = &clk_rcg_ops,
0681             .flags = CLK_SET_PARENT_GATE,
0682         },
0683     },
0684 };
0685 
0686 static struct clk_branch gsbi12_uart_clk = {
0687     .halt_reg = 0x2fd4,
0688     .halt_bit = 13,
0689     .clkr = {
0690         .enable_reg = 0x2b34,
0691         .enable_mask = BIT(9),
0692         .hw.init = &(struct clk_init_data){
0693             .name = "gsbi12_uart_clk",
0694             .parent_names = (const char *[]){ "gsbi12_uart_src" },
0695             .num_parents = 1,
0696             .ops = &clk_branch_ops,
0697             .flags = CLK_SET_RATE_PARENT,
0698         },
0699     },
0700 };
0701 
0702 static struct freq_tbl clk_tbl_gsbi_qup[] = {
0703     {  1100000, P_PXO,  1, 2, 49 },
0704     {  5400000, P_PXO,  1, 1,  5 },
0705     { 10800000, P_PXO,  1, 2,  5 },
0706     { 15060000, P_PLL8, 1, 2, 51 },
0707     { 24000000, P_PLL8, 4, 1,  4 },
0708     { 25600000, P_PLL8, 1, 1, 15 },
0709     { 27000000, P_PXO,  1, 0,  0 },
0710     { 48000000, P_PLL8, 4, 1,  2 },
0711     { 51200000, P_PLL8, 1, 2, 15 },
0712     { }
0713 };
0714 
0715 static struct clk_rcg gsbi1_qup_src = {
0716     .ns_reg = 0x29cc,
0717     .md_reg = 0x29c8,
0718     .mn = {
0719         .mnctr_en_bit = 8,
0720         .mnctr_reset_bit = 7,
0721         .mnctr_mode_shift = 5,
0722         .n_val_shift = 16,
0723         .m_val_shift = 16,
0724         .width = 8,
0725     },
0726     .p = {
0727         .pre_div_shift = 3,
0728         .pre_div_width = 2,
0729     },
0730     .s = {
0731         .src_sel_shift = 0,
0732         .parent_map = gcc_pxo_pll8_map,
0733     },
0734     .freq_tbl = clk_tbl_gsbi_qup,
0735     .clkr = {
0736         .enable_reg = 0x29cc,
0737         .enable_mask = BIT(11),
0738         .hw.init = &(struct clk_init_data){
0739             .name = "gsbi1_qup_src",
0740             .parent_names = gcc_pxo_pll8,
0741             .num_parents = 2,
0742             .ops = &clk_rcg_ops,
0743             .flags = CLK_SET_PARENT_GATE,
0744         },
0745     },
0746 };
0747 
0748 static struct clk_branch gsbi1_qup_clk = {
0749     .halt_reg = 0x2fcc,
0750     .halt_bit = 9,
0751     .clkr = {
0752         .enable_reg = 0x29cc,
0753         .enable_mask = BIT(9),
0754         .hw.init = &(struct clk_init_data){
0755             .name = "gsbi1_qup_clk",
0756             .parent_names = (const char *[]){ "gsbi1_qup_src" },
0757             .num_parents = 1,
0758             .ops = &clk_branch_ops,
0759             .flags = CLK_SET_RATE_PARENT,
0760         },
0761     },
0762 };
0763 
0764 static struct clk_rcg gsbi2_qup_src = {
0765     .ns_reg = 0x29ec,
0766     .md_reg = 0x29e8,
0767     .mn = {
0768         .mnctr_en_bit = 8,
0769         .mnctr_reset_bit = 7,
0770         .mnctr_mode_shift = 5,
0771         .n_val_shift = 16,
0772         .m_val_shift = 16,
0773         .width = 8,
0774     },
0775     .p = {
0776         .pre_div_shift = 3,
0777         .pre_div_width = 2,
0778     },
0779     .s = {
0780         .src_sel_shift = 0,
0781         .parent_map = gcc_pxo_pll8_map,
0782     },
0783     .freq_tbl = clk_tbl_gsbi_qup,
0784     .clkr = {
0785         .enable_reg = 0x29ec,
0786         .enable_mask = BIT(11),
0787         .hw.init = &(struct clk_init_data){
0788             .name = "gsbi2_qup_src",
0789             .parent_names = gcc_pxo_pll8,
0790             .num_parents = 2,
0791             .ops = &clk_rcg_ops,
0792             .flags = CLK_SET_PARENT_GATE,
0793         },
0794     },
0795 };
0796 
0797 static struct clk_branch gsbi2_qup_clk = {
0798     .halt_reg = 0x2fcc,
0799     .halt_bit = 4,
0800     .clkr = {
0801         .enable_reg = 0x29ec,
0802         .enable_mask = BIT(9),
0803         .hw.init = &(struct clk_init_data){
0804             .name = "gsbi2_qup_clk",
0805             .parent_names = (const char *[]){ "gsbi2_qup_src" },
0806             .num_parents = 1,
0807             .ops = &clk_branch_ops,
0808             .flags = CLK_SET_RATE_PARENT,
0809         },
0810     },
0811 };
0812 
0813 static struct clk_rcg gsbi3_qup_src = {
0814     .ns_reg = 0x2a0c,
0815     .md_reg = 0x2a08,
0816     .mn = {
0817         .mnctr_en_bit = 8,
0818         .mnctr_reset_bit = 7,
0819         .mnctr_mode_shift = 5,
0820         .n_val_shift = 16,
0821         .m_val_shift = 16,
0822         .width = 8,
0823     },
0824     .p = {
0825         .pre_div_shift = 3,
0826         .pre_div_width = 2,
0827     },
0828     .s = {
0829         .src_sel_shift = 0,
0830         .parent_map = gcc_pxo_pll8_map,
0831     },
0832     .freq_tbl = clk_tbl_gsbi_qup,
0833     .clkr = {
0834         .enable_reg = 0x2a0c,
0835         .enable_mask = BIT(11),
0836         .hw.init = &(struct clk_init_data){
0837             .name = "gsbi3_qup_src",
0838             .parent_names = gcc_pxo_pll8,
0839             .num_parents = 2,
0840             .ops = &clk_rcg_ops,
0841             .flags = CLK_SET_PARENT_GATE,
0842         },
0843     },
0844 };
0845 
0846 static struct clk_branch gsbi3_qup_clk = {
0847     .halt_reg = 0x2fcc,
0848     .halt_bit = 0,
0849     .clkr = {
0850         .enable_reg = 0x2a0c,
0851         .enable_mask = BIT(9),
0852         .hw.init = &(struct clk_init_data){
0853             .name = "gsbi3_qup_clk",
0854             .parent_names = (const char *[]){ "gsbi3_qup_src" },
0855             .num_parents = 1,
0856             .ops = &clk_branch_ops,
0857             .flags = CLK_SET_RATE_PARENT,
0858         },
0859     },
0860 };
0861 
0862 static struct clk_rcg gsbi4_qup_src = {
0863     .ns_reg = 0x2a2c,
0864     .md_reg = 0x2a28,
0865     .mn = {
0866         .mnctr_en_bit = 8,
0867         .mnctr_reset_bit = 7,
0868         .mnctr_mode_shift = 5,
0869         .n_val_shift = 16,
0870         .m_val_shift = 16,
0871         .width = 8,
0872     },
0873     .p = {
0874         .pre_div_shift = 3,
0875         .pre_div_width = 2,
0876     },
0877     .s = {
0878         .src_sel_shift = 0,
0879         .parent_map = gcc_pxo_pll8_map,
0880     },
0881     .freq_tbl = clk_tbl_gsbi_qup,
0882     .clkr = {
0883         .enable_reg = 0x2a2c,
0884         .enable_mask = BIT(11),
0885         .hw.init = &(struct clk_init_data){
0886             .name = "gsbi4_qup_src",
0887             .parent_names = gcc_pxo_pll8,
0888             .num_parents = 2,
0889             .ops = &clk_rcg_ops,
0890             .flags = CLK_SET_PARENT_GATE,
0891         },
0892     },
0893 };
0894 
0895 static struct clk_branch gsbi4_qup_clk = {
0896     .halt_reg = 0x2fd0,
0897     .halt_bit = 24,
0898     .clkr = {
0899         .enable_reg = 0x2a2c,
0900         .enable_mask = BIT(9),
0901         .hw.init = &(struct clk_init_data){
0902             .name = "gsbi4_qup_clk",
0903             .parent_names = (const char *[]){ "gsbi4_qup_src" },
0904             .num_parents = 1,
0905             .ops = &clk_branch_ops,
0906             .flags = CLK_SET_RATE_PARENT,
0907         },
0908     },
0909 };
0910 
0911 static struct clk_rcg gsbi5_qup_src = {
0912     .ns_reg = 0x2a4c,
0913     .md_reg = 0x2a48,
0914     .mn = {
0915         .mnctr_en_bit = 8,
0916         .mnctr_reset_bit = 7,
0917         .mnctr_mode_shift = 5,
0918         .n_val_shift = 16,
0919         .m_val_shift = 16,
0920         .width = 8,
0921     },
0922     .p = {
0923         .pre_div_shift = 3,
0924         .pre_div_width = 2,
0925     },
0926     .s = {
0927         .src_sel_shift = 0,
0928         .parent_map = gcc_pxo_pll8_map,
0929     },
0930     .freq_tbl = clk_tbl_gsbi_qup,
0931     .clkr = {
0932         .enable_reg = 0x2a4c,
0933         .enable_mask = BIT(11),
0934         .hw.init = &(struct clk_init_data){
0935             .name = "gsbi5_qup_src",
0936             .parent_names = gcc_pxo_pll8,
0937             .num_parents = 2,
0938             .ops = &clk_rcg_ops,
0939             .flags = CLK_SET_PARENT_GATE,
0940         },
0941     },
0942 };
0943 
0944 static struct clk_branch gsbi5_qup_clk = {
0945     .halt_reg = 0x2fd0,
0946     .halt_bit = 20,
0947     .clkr = {
0948         .enable_reg = 0x2a4c,
0949         .enable_mask = BIT(9),
0950         .hw.init = &(struct clk_init_data){
0951             .name = "gsbi5_qup_clk",
0952             .parent_names = (const char *[]){ "gsbi5_qup_src" },
0953             .num_parents = 1,
0954             .ops = &clk_branch_ops,
0955             .flags = CLK_SET_RATE_PARENT,
0956         },
0957     },
0958 };
0959 
0960 static struct clk_rcg gsbi6_qup_src = {
0961     .ns_reg = 0x2a6c,
0962     .md_reg = 0x2a68,
0963     .mn = {
0964         .mnctr_en_bit = 8,
0965         .mnctr_reset_bit = 7,
0966         .mnctr_mode_shift = 5,
0967         .n_val_shift = 16,
0968         .m_val_shift = 16,
0969         .width = 8,
0970     },
0971     .p = {
0972         .pre_div_shift = 3,
0973         .pre_div_width = 2,
0974     },
0975     .s = {
0976         .src_sel_shift = 0,
0977         .parent_map = gcc_pxo_pll8_map,
0978     },
0979     .freq_tbl = clk_tbl_gsbi_qup,
0980     .clkr = {
0981         .enable_reg = 0x2a6c,
0982         .enable_mask = BIT(11),
0983         .hw.init = &(struct clk_init_data){
0984             .name = "gsbi6_qup_src",
0985             .parent_names = gcc_pxo_pll8,
0986             .num_parents = 2,
0987             .ops = &clk_rcg_ops,
0988             .flags = CLK_SET_PARENT_GATE,
0989         },
0990     },
0991 };
0992 
0993 static struct clk_branch gsbi6_qup_clk = {
0994     .halt_reg = 0x2fd0,
0995     .halt_bit = 16,
0996     .clkr = {
0997         .enable_reg = 0x2a6c,
0998         .enable_mask = BIT(9),
0999         .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 
1009 static 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 
1042 static 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 
1058 static 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 
1091 static 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 
1107 static 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 
1140 static 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 
1156 static 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 
1189 static 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 
1205 static 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 
1238 static 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 
1254 static 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 
1287 static 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 
1303 static 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 
1316 static 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 
1349 static 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 
1365 static 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 
1398 static 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 
1414 static 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 
1447 static 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 
1463 static 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 
1478 static 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 
1498 static 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 
1514 static 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 
1525 static 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 
1557 static 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 
1573 static 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 
1605 static 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 
1621 static 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 
1653 static 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 
1669 static 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 
1701 static 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 
1717 static 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 
1749 static 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 
1765 static const struct freq_tbl clk_tbl_tsif_ref[] = {
1766     { 105000, P_PXO,  1, 1, 256 },
1767     { }
1768 };
1769 
1770 static 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 
1803 static 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 
1819 static const struct freq_tbl clk_tbl_usb[] = {
1820     { 60000000, P_PLL8, 1, 5, 32 },
1821     { }
1822 };
1823 
1824 static 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 
1857 static 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 
1873 static 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 
1906 static const char * const usb_fs1_xcvr_fs_src_p[] = { "usb_fs1_xcvr_fs_src" };
1907 
1908 static 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 
1924 static 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 
1940 static 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 
1973 static const char * const usb_fs2_xcvr_fs_src_p[] = { "usb_fs2_xcvr_fs_src" };
1974 
1975 static 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 
1991 static 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 
2007 static 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 
2020 static 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 
2033 static 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 
2046 static 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 
2059 static 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 
2072 static 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 
2085 static 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 
2098 static 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 
2111 static 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 
2124 static 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 
2137 static 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 
2150 static 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 
2163 static 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 
2176 static 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 
2189 static 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 
2202 static 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 
2215 static 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 
2228 static 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 
2241 static 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 
2254 static 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 
2267 static 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 
2280 static 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 
2293 static 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 
2306 static 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 
2320 static 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 
2334 static 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 
2348 static 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 
2362 static 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 
2376 static 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 
2390 static 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 
2404 static 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 
2418 static 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 
2432 static 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 
2448 static 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 
2563 static 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 
2682 static 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 
2690 static 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 
2698 static const struct of_device_id gcc_msm8660_match_table[] = {
2699     { .compatible = "qcom,gcc-msm8660" },
2700     { }
2701 };
2702 MODULE_DEVICE_TABLE(of, gcc_msm8660_match_table);
2703 
2704 static 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 
2720 static 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 
2728 static int __init gcc_msm8660_init(void)
2729 {
2730     return platform_driver_register(&gcc_msm8660_driver);
2731 }
2732 core_initcall(gcc_msm8660_init);
2733 
2734 static void __exit gcc_msm8660_exit(void)
2735 {
2736     platform_driver_unregister(&gcc_msm8660_driver);
2737 }
2738 module_exit(gcc_msm8660_exit);
2739 
2740 MODULE_DESCRIPTION("GCC MSM 8660 Driver");
2741 MODULE_LICENSE("GPL v2");
2742 MODULE_ALIAS("platform:gcc-msm8660");