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