| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340 |
- // SPDX-License-Identifier: GPL-2.0-only
- /*
- * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
- */
- #include <linux/clk.h>
- #include <linux/clk-provider.h>
- #include <linux/err.h>
- #include <linux/interconnect-provider.h>
- #include <linux/kernel.h>
- #include <linux/module.h>
- #include <linux/of.h>
- #include <linux/of_device.h>
- #include <linux/platform_device.h>
- #include <linux/pm_clock.h>
- #include <linux/pm_runtime.h>
- #include <linux/regmap.h>
- #include <dt-bindings/clock/qcom,ipq5424-nsscc.h>
- #include <dt-bindings/interconnect/qcom,ipq5424.h>
- #include <dt-bindings/reset/qcom,ipq5424-nsscc.h>
- #include "clk-branch.h"
- #include "clk-rcg.h"
- #include "clk-regmap.h"
- #include "clk-regmap-divider.h"
- #include "common.h"
- #include "reset.h"
- /* Need to match the order of clocks in DT binding */
- enum {
- DT_CMN_PLL_XO_CLK,
- DT_CMN_PLL_NSS_300M_CLK,
- DT_CMN_PLL_NSS_375M_CLK,
- DT_GCC_GPLL0_OUT_AUX,
- DT_UNIPHY0_NSS_RX_CLK,
- DT_UNIPHY0_NSS_TX_CLK,
- DT_UNIPHY1_NSS_RX_CLK,
- DT_UNIPHY1_NSS_TX_CLK,
- DT_UNIPHY2_NSS_RX_CLK,
- DT_UNIPHY2_NSS_TX_CLK,
- };
- enum {
- P_CMN_PLL_XO_CLK,
- P_CMN_PLL_NSS_300M_CLK,
- P_CMN_PLL_NSS_375M_CLK,
- P_GCC_GPLL0_OUT_AUX,
- P_UNIPHY0_NSS_RX_CLK,
- P_UNIPHY0_NSS_TX_CLK,
- P_UNIPHY1_NSS_RX_CLK,
- P_UNIPHY1_NSS_TX_CLK,
- P_UNIPHY2_NSS_RX_CLK,
- P_UNIPHY2_NSS_TX_CLK,
- };
- static const struct parent_map nss_cc_parent_map_0[] = {
- { P_CMN_PLL_XO_CLK, 0 },
- { P_GCC_GPLL0_OUT_AUX, 2 },
- { P_CMN_PLL_NSS_300M_CLK, 5 },
- { P_CMN_PLL_NSS_375M_CLK, 6 },
- };
- static const struct clk_parent_data nss_cc_parent_data_0[] = {
- { .index = DT_CMN_PLL_XO_CLK },
- { .index = DT_GCC_GPLL0_OUT_AUX },
- { .index = DT_CMN_PLL_NSS_300M_CLK },
- { .index = DT_CMN_PLL_NSS_375M_CLK },
- };
- static const struct parent_map nss_cc_parent_map_1[] = {
- { P_CMN_PLL_XO_CLK, 0 },
- { P_GCC_GPLL0_OUT_AUX, 2 },
- { P_UNIPHY0_NSS_RX_CLK, 3 },
- { P_UNIPHY0_NSS_TX_CLK, 4 },
- { P_CMN_PLL_NSS_300M_CLK, 5 },
- { P_CMN_PLL_NSS_375M_CLK, 6 },
- };
- static const struct clk_parent_data nss_cc_parent_data_1[] = {
- { .index = DT_CMN_PLL_XO_CLK },
- { .index = DT_GCC_GPLL0_OUT_AUX },
- { .index = DT_UNIPHY0_NSS_RX_CLK },
- { .index = DT_UNIPHY0_NSS_TX_CLK },
- { .index = DT_CMN_PLL_NSS_300M_CLK },
- { .index = DT_CMN_PLL_NSS_375M_CLK },
- };
- static const struct parent_map nss_cc_parent_map_2[] = {
- { P_CMN_PLL_XO_CLK, 0 },
- { P_GCC_GPLL0_OUT_AUX, 2 },
- { P_UNIPHY1_NSS_RX_CLK, 3 },
- { P_UNIPHY1_NSS_TX_CLK, 4 },
- { P_CMN_PLL_NSS_300M_CLK, 5 },
- { P_CMN_PLL_NSS_375M_CLK, 6 },
- };
- static const struct clk_parent_data nss_cc_parent_data_2[] = {
- { .index = DT_CMN_PLL_XO_CLK },
- { .index = DT_GCC_GPLL0_OUT_AUX },
- { .index = DT_UNIPHY1_NSS_RX_CLK },
- { .index = DT_UNIPHY1_NSS_TX_CLK },
- { .index = DT_CMN_PLL_NSS_300M_CLK },
- { .index = DT_CMN_PLL_NSS_375M_CLK },
- };
- static const struct parent_map nss_cc_parent_map_3[] = {
- { P_CMN_PLL_XO_CLK, 0 },
- { P_GCC_GPLL0_OUT_AUX, 2 },
- { P_UNIPHY2_NSS_RX_CLK, 3 },
- { P_UNIPHY2_NSS_TX_CLK, 4 },
- { P_CMN_PLL_NSS_300M_CLK, 5 },
- { P_CMN_PLL_NSS_375M_CLK, 6 },
- };
- static const struct clk_parent_data nss_cc_parent_data_3[] = {
- { .index = DT_CMN_PLL_XO_CLK },
- { .index = DT_GCC_GPLL0_OUT_AUX },
- { .index = DT_UNIPHY2_NSS_RX_CLK },
- { .index = DT_UNIPHY2_NSS_TX_CLK },
- { .index = DT_CMN_PLL_NSS_300M_CLK },
- { .index = DT_CMN_PLL_NSS_375M_CLK },
- };
- static const struct freq_tbl ftbl_nss_cc_ce_clk_src[] = {
- F(24000000, P_CMN_PLL_XO_CLK, 1, 0, 0),
- F(375000000, P_CMN_PLL_NSS_375M_CLK, 1, 0, 0),
- { }
- };
- static struct clk_rcg2 nss_cc_ce_clk_src = {
- .cmd_rcgr = 0x5e0,
- .mnd_width = 0,
- .hid_width = 5,
- .parent_map = nss_cc_parent_map_0,
- .freq_tbl = ftbl_nss_cc_ce_clk_src,
- .clkr.hw.init = &(const struct clk_init_data){
- .name = "nss_cc_ce_clk_src",
- .parent_data = nss_cc_parent_data_0,
- .num_parents = ARRAY_SIZE(nss_cc_parent_data_0),
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_rcg2_ops,
- },
- };
- static const struct freq_tbl ftbl_nss_cc_cfg_clk_src[] = {
- F(100000000, P_GCC_GPLL0_OUT_AUX, 8, 0, 0),
- { }
- };
- static struct clk_rcg2 nss_cc_cfg_clk_src = {
- .cmd_rcgr = 0x6a8,
- .mnd_width = 0,
- .hid_width = 5,
- .parent_map = nss_cc_parent_map_0,
- .freq_tbl = ftbl_nss_cc_cfg_clk_src,
- .clkr.hw.init = &(const struct clk_init_data){
- .name = "nss_cc_cfg_clk_src",
- .parent_data = nss_cc_parent_data_0,
- .num_parents = ARRAY_SIZE(nss_cc_parent_data_0),
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_rcg2_ops,
- },
- };
- static const struct freq_tbl ftbl_nss_cc_eip_bfdcd_clk_src[] = {
- F(300000000, P_CMN_PLL_NSS_300M_CLK, 1, 0, 0),
- F(375000000, P_CMN_PLL_NSS_375M_CLK, 1, 0, 0),
- { }
- };
- static struct clk_rcg2 nss_cc_eip_bfdcd_clk_src = {
- .cmd_rcgr = 0x644,
- .mnd_width = 0,
- .hid_width = 5,
- .parent_map = nss_cc_parent_map_0,
- .freq_tbl = ftbl_nss_cc_eip_bfdcd_clk_src,
- .clkr.hw.init = &(const struct clk_init_data){
- .name = "nss_cc_eip_bfdcd_clk_src",
- .parent_data = nss_cc_parent_data_0,
- .num_parents = ARRAY_SIZE(nss_cc_parent_data_0),
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_rcg2_ops,
- },
- };
- static const struct freq_conf ftbl_nss_cc_port1_rx_clk_src_25[] = {
- C(P_UNIPHY0_NSS_RX_CLK, 12.5, 0, 0),
- C(P_UNIPHY0_NSS_RX_CLK, 5, 0, 0),
- };
- static const struct freq_conf ftbl_nss_cc_port1_rx_clk_src_125[] = {
- C(P_UNIPHY0_NSS_RX_CLK, 2.5, 0, 0),
- C(P_UNIPHY0_NSS_RX_CLK, 1, 0, 0),
- };
- static const struct freq_multi_tbl ftbl_nss_cc_port1_rx_clk_src[] = {
- FMS(24000000, P_CMN_PLL_XO_CLK, 1, 0, 0),
- FM(25000000, ftbl_nss_cc_port1_rx_clk_src_25),
- FMS(78125000, P_UNIPHY0_NSS_RX_CLK, 4, 0, 0),
- FM(125000000, ftbl_nss_cc_port1_rx_clk_src_125),
- FMS(156250000, P_UNIPHY0_NSS_RX_CLK, 2, 0, 0),
- FMS(312500000, P_UNIPHY0_NSS_RX_CLK, 1, 0, 0),
- { }
- };
- static struct clk_rcg2 nss_cc_port1_rx_clk_src = {
- .cmd_rcgr = 0x4b4,
- .mnd_width = 0,
- .hid_width = 5,
- .parent_map = nss_cc_parent_map_1,
- .freq_multi_tbl = ftbl_nss_cc_port1_rx_clk_src,
- .clkr.hw.init = &(const struct clk_init_data){
- .name = "nss_cc_port1_rx_clk_src",
- .parent_data = nss_cc_parent_data_1,
- .num_parents = ARRAY_SIZE(nss_cc_parent_data_1),
- .ops = &clk_rcg2_fm_ops,
- },
- };
- static const struct freq_conf ftbl_nss_cc_port1_tx_clk_src_25[] = {
- C(P_UNIPHY0_NSS_TX_CLK, 12.5, 0, 0),
- C(P_UNIPHY0_NSS_TX_CLK, 5, 0, 0),
- };
- static const struct freq_conf ftbl_nss_cc_port1_tx_clk_src_125[] = {
- C(P_UNIPHY0_NSS_TX_CLK, 2.5, 0, 0),
- C(P_UNIPHY0_NSS_TX_CLK, 1, 0, 0),
- };
- static const struct freq_multi_tbl ftbl_nss_cc_port1_tx_clk_src[] = {
- FMS(24000000, P_CMN_PLL_XO_CLK, 1, 0, 0),
- FM(25000000, ftbl_nss_cc_port1_tx_clk_src_25),
- FMS(78125000, P_UNIPHY0_NSS_TX_CLK, 4, 0, 0),
- FM(125000000, ftbl_nss_cc_port1_tx_clk_src_125),
- FMS(156250000, P_UNIPHY0_NSS_TX_CLK, 2, 0, 0),
- FMS(312500000, P_UNIPHY0_NSS_TX_CLK, 1, 0, 0),
- { }
- };
- static struct clk_rcg2 nss_cc_port1_tx_clk_src = {
- .cmd_rcgr = 0x4c0,
- .mnd_width = 0,
- .hid_width = 5,
- .parent_map = nss_cc_parent_map_1,
- .freq_multi_tbl = ftbl_nss_cc_port1_tx_clk_src,
- .clkr.hw.init = &(const struct clk_init_data){
- .name = "nss_cc_port1_tx_clk_src",
- .parent_data = nss_cc_parent_data_1,
- .num_parents = ARRAY_SIZE(nss_cc_parent_data_1),
- .ops = &clk_rcg2_fm_ops,
- },
- };
- static const struct freq_conf ftbl_nss_cc_port2_rx_clk_src_25[] = {
- C(P_UNIPHY1_NSS_RX_CLK, 12.5, 0, 0),
- C(P_UNIPHY1_NSS_RX_CLK, 5, 0, 0),
- };
- static const struct freq_conf ftbl_nss_cc_port2_rx_clk_src_125[] = {
- C(P_UNIPHY1_NSS_RX_CLK, 2.5, 0, 0),
- C(P_UNIPHY1_NSS_RX_CLK, 1, 0, 0),
- };
- static const struct freq_multi_tbl ftbl_nss_cc_port2_rx_clk_src[] = {
- FMS(24000000, P_CMN_PLL_XO_CLK, 1, 0, 0),
- FM(25000000, ftbl_nss_cc_port2_rx_clk_src_25),
- FMS(78125000, P_UNIPHY1_NSS_RX_CLK, 4, 0, 0),
- FM(125000000, ftbl_nss_cc_port2_rx_clk_src_125),
- FMS(156250000, P_UNIPHY1_NSS_RX_CLK, 2, 0, 0),
- FMS(312500000, P_UNIPHY1_NSS_RX_CLK, 1, 0, 0),
- { }
- };
- static struct clk_rcg2 nss_cc_port2_rx_clk_src = {
- .cmd_rcgr = 0x4cc,
- .mnd_width = 0,
- .hid_width = 5,
- .parent_map = nss_cc_parent_map_2,
- .freq_multi_tbl = ftbl_nss_cc_port2_rx_clk_src,
- .clkr.hw.init = &(const struct clk_init_data){
- .name = "nss_cc_port2_rx_clk_src",
- .parent_data = nss_cc_parent_data_2,
- .num_parents = ARRAY_SIZE(nss_cc_parent_data_2),
- .ops = &clk_rcg2_fm_ops,
- },
- };
- static const struct freq_conf ftbl_nss_cc_port2_tx_clk_src_25[] = {
- C(P_UNIPHY1_NSS_TX_CLK, 12.5, 0, 0),
- C(P_UNIPHY1_NSS_TX_CLK, 5, 0, 0),
- };
- static const struct freq_conf ftbl_nss_cc_port2_tx_clk_src_125[] = {
- C(P_UNIPHY1_NSS_TX_CLK, 2.5, 0, 0),
- C(P_UNIPHY1_NSS_TX_CLK, 1, 0, 0),
- };
- static const struct freq_multi_tbl ftbl_nss_cc_port2_tx_clk_src[] = {
- FMS(24000000, P_CMN_PLL_XO_CLK, 1, 0, 0),
- FM(25000000, ftbl_nss_cc_port2_tx_clk_src_25),
- FMS(78125000, P_UNIPHY1_NSS_TX_CLK, 4, 0, 0),
- FM(125000000, ftbl_nss_cc_port2_tx_clk_src_125),
- FMS(156250000, P_UNIPHY1_NSS_TX_CLK, 2, 0, 0),
- FMS(312500000, P_UNIPHY1_NSS_TX_CLK, 1, 0, 0),
- { }
- };
- static struct clk_rcg2 nss_cc_port2_tx_clk_src = {
- .cmd_rcgr = 0x4d8,
- .mnd_width = 0,
- .hid_width = 5,
- .parent_map = nss_cc_parent_map_2,
- .freq_multi_tbl = ftbl_nss_cc_port2_tx_clk_src,
- .clkr.hw.init = &(const struct clk_init_data){
- .name = "nss_cc_port2_tx_clk_src",
- .parent_data = nss_cc_parent_data_2,
- .num_parents = ARRAY_SIZE(nss_cc_parent_data_2),
- .ops = &clk_rcg2_fm_ops,
- },
- };
- static const struct freq_conf ftbl_nss_cc_port3_rx_clk_src_25[] = {
- C(P_UNIPHY2_NSS_RX_CLK, 12.5, 0, 0),
- C(P_UNIPHY2_NSS_RX_CLK, 5, 0, 0),
- };
- static const struct freq_conf ftbl_nss_cc_port3_rx_clk_src_125[] = {
- C(P_UNIPHY2_NSS_RX_CLK, 2.5, 0, 0),
- C(P_UNIPHY2_NSS_RX_CLK, 1, 0, 0),
- };
- static const struct freq_multi_tbl ftbl_nss_cc_port3_rx_clk_src[] = {
- FMS(24000000, P_CMN_PLL_XO_CLK, 1, 0, 0),
- FM(25000000, ftbl_nss_cc_port3_rx_clk_src_25),
- FMS(78125000, P_UNIPHY2_NSS_RX_CLK, 4, 0, 0),
- FM(125000000, ftbl_nss_cc_port3_rx_clk_src_125),
- FMS(156250000, P_UNIPHY2_NSS_RX_CLK, 2, 0, 0),
- FMS(312500000, P_UNIPHY2_NSS_RX_CLK, 1, 0, 0),
- { }
- };
- static struct clk_rcg2 nss_cc_port3_rx_clk_src = {
- .cmd_rcgr = 0x4e4,
- .mnd_width = 0,
- .hid_width = 5,
- .parent_map = nss_cc_parent_map_3,
- .freq_multi_tbl = ftbl_nss_cc_port3_rx_clk_src,
- .clkr.hw.init = &(const struct clk_init_data){
- .name = "nss_cc_port3_rx_clk_src",
- .parent_data = nss_cc_parent_data_3,
- .num_parents = ARRAY_SIZE(nss_cc_parent_data_3),
- .ops = &clk_rcg2_fm_ops,
- },
- };
- static const struct freq_conf ftbl_nss_cc_port3_tx_clk_src_25[] = {
- C(P_UNIPHY2_NSS_TX_CLK, 12.5, 0, 0),
- C(P_UNIPHY2_NSS_TX_CLK, 5, 0, 0),
- };
- static const struct freq_conf ftbl_nss_cc_port3_tx_clk_src_125[] = {
- C(P_UNIPHY2_NSS_TX_CLK, 2.5, 0, 0),
- C(P_UNIPHY2_NSS_TX_CLK, 1, 0, 0),
- };
- static const struct freq_multi_tbl ftbl_nss_cc_port3_tx_clk_src[] = {
- FMS(24000000, P_CMN_PLL_XO_CLK, 1, 0, 0),
- FM(25000000, ftbl_nss_cc_port3_tx_clk_src_25),
- FMS(78125000, P_UNIPHY2_NSS_TX_CLK, 4, 0, 0),
- FM(125000000, ftbl_nss_cc_port3_tx_clk_src_125),
- FMS(156250000, P_UNIPHY2_NSS_TX_CLK, 2, 0, 0),
- FMS(312500000, P_UNIPHY2_NSS_TX_CLK, 1, 0, 0),
- { }
- };
- static struct clk_rcg2 nss_cc_port3_tx_clk_src = {
- .cmd_rcgr = 0x4f0,
- .mnd_width = 0,
- .hid_width = 5,
- .parent_map = nss_cc_parent_map_3,
- .freq_multi_tbl = ftbl_nss_cc_port3_tx_clk_src,
- .clkr.hw.init = &(const struct clk_init_data){
- .name = "nss_cc_port3_tx_clk_src",
- .parent_data = nss_cc_parent_data_3,
- .num_parents = ARRAY_SIZE(nss_cc_parent_data_3),
- .ops = &clk_rcg2_fm_ops,
- },
- };
- static struct clk_rcg2 nss_cc_ppe_clk_src = {
- .cmd_rcgr = 0x3ec,
- .mnd_width = 0,
- .hid_width = 5,
- .parent_map = nss_cc_parent_map_0,
- .freq_tbl = ftbl_nss_cc_ce_clk_src,
- .clkr.hw.init = &(const struct clk_init_data){
- .name = "nss_cc_ppe_clk_src",
- .parent_data = nss_cc_parent_data_0,
- .num_parents = ARRAY_SIZE(nss_cc_parent_data_0),
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_rcg2_ops,
- },
- };
- static struct clk_regmap_div nss_cc_port1_rx_div_clk_src = {
- .reg = 0x4bc,
- .shift = 0,
- .width = 9,
- .clkr.hw.init = &(const struct clk_init_data) {
- .name = "nss_cc_port1_rx_div_clk_src",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_port1_rx_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_regmap_div_ops,
- },
- };
- static struct clk_regmap_div nss_cc_port1_tx_div_clk_src = {
- .reg = 0x4c8,
- .shift = 0,
- .width = 9,
- .clkr.hw.init = &(const struct clk_init_data) {
- .name = "nss_cc_port1_tx_div_clk_src",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_port1_tx_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_regmap_div_ops,
- },
- };
- static struct clk_regmap_div nss_cc_port2_rx_div_clk_src = {
- .reg = 0x4d4,
- .shift = 0,
- .width = 9,
- .clkr.hw.init = &(const struct clk_init_data) {
- .name = "nss_cc_port2_rx_div_clk_src",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_port2_rx_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_regmap_div_ops,
- },
- };
- static struct clk_regmap_div nss_cc_port2_tx_div_clk_src = {
- .reg = 0x4e0,
- .shift = 0,
- .width = 9,
- .clkr.hw.init = &(const struct clk_init_data) {
- .name = "nss_cc_port2_tx_div_clk_src",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_port2_tx_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_regmap_div_ops,
- },
- };
- static struct clk_regmap_div nss_cc_port3_rx_div_clk_src = {
- .reg = 0x4ec,
- .shift = 0,
- .width = 9,
- .clkr.hw.init = &(const struct clk_init_data) {
- .name = "nss_cc_port3_rx_div_clk_src",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_port3_rx_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_regmap_div_ops,
- },
- };
- static struct clk_regmap_div nss_cc_port3_tx_div_clk_src = {
- .reg = 0x4f8,
- .shift = 0,
- .width = 9,
- .clkr.hw.init = &(const struct clk_init_data) {
- .name = "nss_cc_port3_tx_div_clk_src",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_port3_tx_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_regmap_div_ops,
- },
- };
- static struct clk_regmap_div nss_cc_xgmac0_ptp_ref_div_clk_src = {
- .reg = 0x3f4,
- .shift = 0,
- .width = 4,
- .clkr.hw.init = &(const struct clk_init_data) {
- .name = "nss_cc_xgmac0_ptp_ref_div_clk_src",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_ppe_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_regmap_div_ro_ops,
- },
- };
- static struct clk_regmap_div nss_cc_xgmac1_ptp_ref_div_clk_src = {
- .reg = 0x3f8,
- .shift = 0,
- .width = 4,
- .clkr.hw.init = &(const struct clk_init_data) {
- .name = "nss_cc_xgmac1_ptp_ref_div_clk_src",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_ppe_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_regmap_div_ro_ops,
- },
- };
- static struct clk_regmap_div nss_cc_xgmac2_ptp_ref_div_clk_src = {
- .reg = 0x3fc,
- .shift = 0,
- .width = 4,
- .clkr.hw.init = &(const struct clk_init_data) {
- .name = "nss_cc_xgmac2_ptp_ref_div_clk_src",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_ppe_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_regmap_div_ro_ops,
- },
- };
- static struct clk_branch nss_cc_ce_apb_clk = {
- .halt_reg = 0x5e8,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x5e8,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_ce_apb_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_ce_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_ce_axi_clk = {
- .halt_reg = 0x5ec,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x5ec,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_ce_axi_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_ce_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_debug_clk = {
- .halt_reg = 0x70c,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x70c,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_debug_clk",
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_eip_clk = {
- .halt_reg = 0x658,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x658,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_eip_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_eip_bfdcd_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_nss_csr_clk = {
- .halt_reg = 0x6b0,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x6b0,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_nss_csr_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_cfg_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_nssnoc_ce_apb_clk = {
- .halt_reg = 0x5f4,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x5f4,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_nssnoc_ce_apb_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_ce_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_nssnoc_ce_axi_clk = {
- .halt_reg = 0x5f8,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x5f8,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_nssnoc_ce_axi_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_ce_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_nssnoc_eip_clk = {
- .halt_reg = 0x660,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x660,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_nssnoc_eip_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_eip_bfdcd_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_nssnoc_nss_csr_clk = {
- .halt_reg = 0x6b4,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x6b4,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_nssnoc_nss_csr_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_cfg_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_nssnoc_ppe_cfg_clk = {
- .halt_reg = 0x444,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x444,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_nssnoc_ppe_cfg_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_ppe_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_nssnoc_ppe_clk = {
- .halt_reg = 0x440,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x440,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_nssnoc_ppe_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_ppe_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_port1_mac_clk = {
- .halt_reg = 0x428,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x428,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_port1_mac_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_ppe_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_port1_rx_clk = {
- .halt_reg = 0x4fc,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x4fc,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_port1_rx_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_port1_rx_div_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_port1_tx_clk = {
- .halt_reg = 0x504,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x504,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_port1_tx_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_port1_tx_div_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_port2_mac_clk = {
- .halt_reg = 0x430,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x430,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_port2_mac_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_ppe_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_port2_rx_clk = {
- .halt_reg = 0x50c,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x50c,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_port2_rx_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_port2_rx_div_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_port2_tx_clk = {
- .halt_reg = 0x514,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x514,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_port2_tx_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_port2_tx_div_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_port3_mac_clk = {
- .halt_reg = 0x438,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x438,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_port3_mac_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_ppe_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_port3_rx_clk = {
- .halt_reg = 0x51c,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x51c,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_port3_rx_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_port3_rx_div_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_port3_tx_clk = {
- .halt_reg = 0x524,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x524,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_port3_tx_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_port3_tx_div_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_ppe_edma_cfg_clk = {
- .halt_reg = 0x424,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x424,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_ppe_edma_cfg_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_ppe_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_ppe_edma_clk = {
- .halt_reg = 0x41c,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x41c,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_ppe_edma_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_ppe_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_ppe_switch_btq_clk = {
- .halt_reg = 0x408,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x408,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_ppe_switch_btq_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_ppe_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_ppe_switch_cfg_clk = {
- .halt_reg = 0x418,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x418,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_ppe_switch_cfg_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_ppe_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_ppe_switch_clk = {
- .halt_reg = 0x410,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x410,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_ppe_switch_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_ppe_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_ppe_switch_ipe_clk = {
- .halt_reg = 0x400,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x400,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_ppe_switch_ipe_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_ppe_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_uniphy_port1_rx_clk = {
- .halt_reg = 0x57c,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x57c,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_uniphy_port1_rx_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_port1_rx_div_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_uniphy_port1_tx_clk = {
- .halt_reg = 0x580,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x580,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_uniphy_port1_tx_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_port1_tx_div_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_uniphy_port2_rx_clk = {
- .halt_reg = 0x584,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x584,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_uniphy_port2_rx_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_port2_rx_div_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_uniphy_port2_tx_clk = {
- .halt_reg = 0x588,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x588,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_uniphy_port2_tx_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_port2_tx_div_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_uniphy_port3_rx_clk = {
- .halt_reg = 0x58c,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x58c,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_uniphy_port3_rx_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_port3_rx_div_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_uniphy_port3_tx_clk = {
- .halt_reg = 0x590,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x590,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_uniphy_port3_tx_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_port3_tx_div_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_xgmac0_ptp_ref_clk = {
- .halt_reg = 0x448,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x448,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_xgmac0_ptp_ref_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_xgmac0_ptp_ref_div_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_xgmac1_ptp_ref_clk = {
- .halt_reg = 0x44c,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x44c,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_xgmac1_ptp_ref_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_xgmac1_ptp_ref_div_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_branch nss_cc_xgmac2_ptp_ref_clk = {
- .halt_reg = 0x450,
- .halt_check = BRANCH_HALT,
- .clkr = {
- .enable_reg = 0x450,
- .enable_mask = BIT(0),
- .hw.init = &(const struct clk_init_data){
- .name = "nss_cc_xgmac2_ptp_ref_clk",
- .parent_hws = (const struct clk_hw*[]){
- &nss_cc_xgmac2_ptp_ref_div_clk_src.clkr.hw,
- },
- .num_parents = 1,
- .flags = CLK_SET_RATE_PARENT,
- .ops = &clk_branch2_ops,
- },
- },
- };
- static struct clk_regmap *nss_cc_ipq5424_clocks[] = {
- [NSS_CC_CE_APB_CLK] = &nss_cc_ce_apb_clk.clkr,
- [NSS_CC_CE_AXI_CLK] = &nss_cc_ce_axi_clk.clkr,
- [NSS_CC_CE_CLK_SRC] = &nss_cc_ce_clk_src.clkr,
- [NSS_CC_CFG_CLK_SRC] = &nss_cc_cfg_clk_src.clkr,
- [NSS_CC_DEBUG_CLK] = &nss_cc_debug_clk.clkr,
- [NSS_CC_EIP_BFDCD_CLK_SRC] = &nss_cc_eip_bfdcd_clk_src.clkr,
- [NSS_CC_EIP_CLK] = &nss_cc_eip_clk.clkr,
- [NSS_CC_NSS_CSR_CLK] = &nss_cc_nss_csr_clk.clkr,
- [NSS_CC_NSSNOC_CE_APB_CLK] = &nss_cc_nssnoc_ce_apb_clk.clkr,
- [NSS_CC_NSSNOC_CE_AXI_CLK] = &nss_cc_nssnoc_ce_axi_clk.clkr,
- [NSS_CC_NSSNOC_EIP_CLK] = &nss_cc_nssnoc_eip_clk.clkr,
- [NSS_CC_NSSNOC_NSS_CSR_CLK] = &nss_cc_nssnoc_nss_csr_clk.clkr,
- [NSS_CC_NSSNOC_PPE_CFG_CLK] = &nss_cc_nssnoc_ppe_cfg_clk.clkr,
- [NSS_CC_NSSNOC_PPE_CLK] = &nss_cc_nssnoc_ppe_clk.clkr,
- [NSS_CC_PORT1_MAC_CLK] = &nss_cc_port1_mac_clk.clkr,
- [NSS_CC_PORT1_RX_CLK] = &nss_cc_port1_rx_clk.clkr,
- [NSS_CC_PORT1_RX_CLK_SRC] = &nss_cc_port1_rx_clk_src.clkr,
- [NSS_CC_PORT1_RX_DIV_CLK_SRC] = &nss_cc_port1_rx_div_clk_src.clkr,
- [NSS_CC_PORT1_TX_CLK] = &nss_cc_port1_tx_clk.clkr,
- [NSS_CC_PORT1_TX_CLK_SRC] = &nss_cc_port1_tx_clk_src.clkr,
- [NSS_CC_PORT1_TX_DIV_CLK_SRC] = &nss_cc_port1_tx_div_clk_src.clkr,
- [NSS_CC_PORT2_MAC_CLK] = &nss_cc_port2_mac_clk.clkr,
- [NSS_CC_PORT2_RX_CLK] = &nss_cc_port2_rx_clk.clkr,
- [NSS_CC_PORT2_RX_CLK_SRC] = &nss_cc_port2_rx_clk_src.clkr,
- [NSS_CC_PORT2_RX_DIV_CLK_SRC] = &nss_cc_port2_rx_div_clk_src.clkr,
- [NSS_CC_PORT2_TX_CLK] = &nss_cc_port2_tx_clk.clkr,
- [NSS_CC_PORT2_TX_CLK_SRC] = &nss_cc_port2_tx_clk_src.clkr,
- [NSS_CC_PORT2_TX_DIV_CLK_SRC] = &nss_cc_port2_tx_div_clk_src.clkr,
- [NSS_CC_PORT3_MAC_CLK] = &nss_cc_port3_mac_clk.clkr,
- [NSS_CC_PORT3_RX_CLK] = &nss_cc_port3_rx_clk.clkr,
- [NSS_CC_PORT3_RX_CLK_SRC] = &nss_cc_port3_rx_clk_src.clkr,
- [NSS_CC_PORT3_RX_DIV_CLK_SRC] = &nss_cc_port3_rx_div_clk_src.clkr,
- [NSS_CC_PORT3_TX_CLK] = &nss_cc_port3_tx_clk.clkr,
- [NSS_CC_PORT3_TX_CLK_SRC] = &nss_cc_port3_tx_clk_src.clkr,
- [NSS_CC_PORT3_TX_DIV_CLK_SRC] = &nss_cc_port3_tx_div_clk_src.clkr,
- [NSS_CC_PPE_CLK_SRC] = &nss_cc_ppe_clk_src.clkr,
- [NSS_CC_PPE_EDMA_CFG_CLK] = &nss_cc_ppe_edma_cfg_clk.clkr,
- [NSS_CC_PPE_EDMA_CLK] = &nss_cc_ppe_edma_clk.clkr,
- [NSS_CC_PPE_SWITCH_BTQ_CLK] = &nss_cc_ppe_switch_btq_clk.clkr,
- [NSS_CC_PPE_SWITCH_CFG_CLK] = &nss_cc_ppe_switch_cfg_clk.clkr,
- [NSS_CC_PPE_SWITCH_CLK] = &nss_cc_ppe_switch_clk.clkr,
- [NSS_CC_PPE_SWITCH_IPE_CLK] = &nss_cc_ppe_switch_ipe_clk.clkr,
- [NSS_CC_UNIPHY_PORT1_RX_CLK] = &nss_cc_uniphy_port1_rx_clk.clkr,
- [NSS_CC_UNIPHY_PORT1_TX_CLK] = &nss_cc_uniphy_port1_tx_clk.clkr,
- [NSS_CC_UNIPHY_PORT2_RX_CLK] = &nss_cc_uniphy_port2_rx_clk.clkr,
- [NSS_CC_UNIPHY_PORT2_TX_CLK] = &nss_cc_uniphy_port2_tx_clk.clkr,
- [NSS_CC_UNIPHY_PORT3_RX_CLK] = &nss_cc_uniphy_port3_rx_clk.clkr,
- [NSS_CC_UNIPHY_PORT3_TX_CLK] = &nss_cc_uniphy_port3_tx_clk.clkr,
- [NSS_CC_XGMAC0_PTP_REF_CLK] = &nss_cc_xgmac0_ptp_ref_clk.clkr,
- [NSS_CC_XGMAC0_PTP_REF_DIV_CLK_SRC] = &nss_cc_xgmac0_ptp_ref_div_clk_src.clkr,
- [NSS_CC_XGMAC1_PTP_REF_CLK] = &nss_cc_xgmac1_ptp_ref_clk.clkr,
- [NSS_CC_XGMAC1_PTP_REF_DIV_CLK_SRC] = &nss_cc_xgmac1_ptp_ref_div_clk_src.clkr,
- [NSS_CC_XGMAC2_PTP_REF_CLK] = &nss_cc_xgmac2_ptp_ref_clk.clkr,
- [NSS_CC_XGMAC2_PTP_REF_DIV_CLK_SRC] = &nss_cc_xgmac2_ptp_ref_div_clk_src.clkr,
- };
- static const struct qcom_reset_map nss_cc_ipq5424_resets[] = {
- [NSS_CC_CE_APB_CLK_ARES] = { 0x5e8, 2 },
- [NSS_CC_CE_AXI_CLK_ARES] = { 0x5ec, 2 },
- [NSS_CC_DEBUG_CLK_ARES] = { 0x70c, 2 },
- [NSS_CC_EIP_CLK_ARES] = { 0x658, 2 },
- [NSS_CC_NSS_CSR_CLK_ARES] = { 0x6b0, 2 },
- [NSS_CC_NSSNOC_CE_APB_CLK_ARES] = { 0x5f4, 2 },
- [NSS_CC_NSSNOC_CE_AXI_CLK_ARES] = { 0x5f8, 2 },
- [NSS_CC_NSSNOC_EIP_CLK_ARES] = { 0x660, 2 },
- [NSS_CC_NSSNOC_NSS_CSR_CLK_ARES] = { 0x6b4, 2 },
- [NSS_CC_NSSNOC_PPE_CLK_ARES] = { 0x440, 2 },
- [NSS_CC_NSSNOC_PPE_CFG_CLK_ARES] = { 0x444, 2 },
- [NSS_CC_PORT1_MAC_CLK_ARES] = { 0x428, 2 },
- [NSS_CC_PORT1_RX_CLK_ARES] = { 0x4fc, 2 },
- [NSS_CC_PORT1_TX_CLK_ARES] = { 0x504, 2 },
- [NSS_CC_PORT2_MAC_CLK_ARES] = { 0x430, 2 },
- [NSS_CC_PORT2_RX_CLK_ARES] = { 0x50c, 2 },
- [NSS_CC_PORT2_TX_CLK_ARES] = { 0x514, 2 },
- [NSS_CC_PORT3_MAC_CLK_ARES] = { 0x438, 2 },
- [NSS_CC_PORT3_RX_CLK_ARES] = { 0x51c, 2 },
- [NSS_CC_PORT3_TX_CLK_ARES] = { 0x524, 2 },
- [NSS_CC_PPE_BCR] = { 0x3e8 },
- [NSS_CC_PPE_EDMA_CLK_ARES] = { 0x41c, 2 },
- [NSS_CC_PPE_EDMA_CFG_CLK_ARES] = { 0x424, 2 },
- [NSS_CC_PPE_SWITCH_BTQ_CLK_ARES] = { 0x408, 2 },
- [NSS_CC_PPE_SWITCH_CLK_ARES] = { 0x410, 2 },
- [NSS_CC_PPE_SWITCH_CFG_CLK_ARES] = { 0x418, 2 },
- [NSS_CC_PPE_SWITCH_IPE_CLK_ARES] = { 0x400, 2 },
- [NSS_CC_UNIPHY_PORT1_RX_CLK_ARES] = { 0x57c, 2 },
- [NSS_CC_UNIPHY_PORT1_TX_CLK_ARES] = { 0x580, 2 },
- [NSS_CC_UNIPHY_PORT2_RX_CLK_ARES] = { 0x584, 2 },
- [NSS_CC_UNIPHY_PORT2_TX_CLK_ARES] = { 0x588, 2 },
- [NSS_CC_UNIPHY_PORT3_RX_CLK_ARES] = { 0x58c, 2 },
- [NSS_CC_UNIPHY_PORT3_TX_CLK_ARES] = { 0x590, 2 },
- [NSS_CC_XGMAC0_PTP_REF_CLK_ARES] = { 0x448, 2 },
- [NSS_CC_XGMAC1_PTP_REF_CLK_ARES] = { 0x44c, 2 },
- [NSS_CC_XGMAC2_PTP_REF_CLK_ARES] = { 0x450, 2 },
- };
- static const struct regmap_config nss_cc_ipq5424_regmap_config = {
- .reg_bits = 32,
- .reg_stride = 4,
- .val_bits = 32,
- .max_register = 0x800,
- .fast_io = true,
- };
- static const struct qcom_icc_hws_data icc_ipq5424_nss_hws[] = {
- { MASTER_NSSNOC_PPE, SLAVE_NSSNOC_PPE, NSS_CC_NSSNOC_PPE_CLK },
- { MASTER_NSSNOC_PPE_CFG, SLAVE_NSSNOC_PPE_CFG, NSS_CC_NSSNOC_PPE_CFG_CLK },
- { MASTER_NSSNOC_NSS_CSR, SLAVE_NSSNOC_NSS_CSR, NSS_CC_NSSNOC_NSS_CSR_CLK },
- { MASTER_NSSNOC_CE_AXI, SLAVE_NSSNOC_CE_AXI, NSS_CC_NSSNOC_CE_AXI_CLK},
- { MASTER_NSSNOC_CE_APB, SLAVE_NSSNOC_CE_APB, NSS_CC_NSSNOC_CE_APB_CLK},
- { MASTER_NSSNOC_EIP, SLAVE_NSSNOC_EIP, NSS_CC_NSSNOC_EIP_CLK},
- };
- #define IPQ_NSSCC_ID (5424 * 2) /* some unique value */
- static const struct qcom_cc_desc nss_cc_ipq5424_desc = {
- .config = &nss_cc_ipq5424_regmap_config,
- .clks = nss_cc_ipq5424_clocks,
- .num_clks = ARRAY_SIZE(nss_cc_ipq5424_clocks),
- .resets = nss_cc_ipq5424_resets,
- .num_resets = ARRAY_SIZE(nss_cc_ipq5424_resets),
- .icc_hws = icc_ipq5424_nss_hws,
- .num_icc_hws = ARRAY_SIZE(icc_ipq5424_nss_hws),
- .icc_first_node_id = IPQ_NSSCC_ID,
- };
- static const struct dev_pm_ops nss_cc_ipq5424_pm_ops = {
- SET_RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
- };
- static const struct of_device_id nss_cc_ipq5424_match_table[] = {
- { .compatible = "qcom,ipq5424-nsscc" },
- { }
- };
- MODULE_DEVICE_TABLE(of, nss_cc_ipq5424_match_table);
- static int nss_cc_ipq5424_probe(struct platform_device *pdev)
- {
- int ret;
- ret = devm_pm_runtime_enable(&pdev->dev);
- if (ret)
- return dev_err_probe(&pdev->dev, ret, "Fail to enable runtime PM\n");
- ret = devm_pm_clk_create(&pdev->dev);
- if (ret)
- return dev_err_probe(&pdev->dev, ret, "Fail to create PM clock\n");
- ret = pm_clk_add(&pdev->dev, "bus");
- if (ret)
- return dev_err_probe(&pdev->dev, ret, "Fail to add bus clock\n");
- ret = pm_runtime_resume_and_get(&pdev->dev);
- if (ret)
- return dev_err_probe(&pdev->dev, ret, "Fail to resume\n");
- ret = qcom_cc_probe(pdev, &nss_cc_ipq5424_desc);
- pm_runtime_put(&pdev->dev);
- return ret;
- }
- static struct platform_driver nss_cc_ipq5424_driver = {
- .probe = nss_cc_ipq5424_probe,
- .driver = {
- .name = "qcom,ipq5424-nsscc",
- .of_match_table = nss_cc_ipq5424_match_table,
- .pm = &nss_cc_ipq5424_pm_ops,
- .sync_state = icc_sync_state,
- },
- };
- module_platform_driver(nss_cc_ipq5424_driver);
- MODULE_DESCRIPTION("Qualcomm Technologies, Inc. NSSCC IPQ5424 Driver");
- MODULE_LICENSE("GPL");
|