1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
2989ce049SDarwin Rambo /*
3989ce049SDarwin Rambo * Copyright 2013 Broadcom Corporation.
4989ce049SDarwin Rambo */
5989ce049SDarwin Rambo
6989ce049SDarwin Rambo /*
7989ce049SDarwin Rambo *
8989ce049SDarwin Rambo * bcm281xx-specific clock tables
9989ce049SDarwin Rambo *
10989ce049SDarwin Rambo */
11989ce049SDarwin Rambo
12989ce049SDarwin Rambo #include <common.h>
13989ce049SDarwin Rambo #include <asm/io.h>
141221ce45SMasahiro Yamada #include <linux/errno.h>
15989ce049SDarwin Rambo #include <asm/arch/sysmap.h>
16989ce049SDarwin Rambo #include <asm/kona-common/clk.h>
17989ce049SDarwin Rambo #include "clk-core.h"
18989ce049SDarwin Rambo
19989ce049SDarwin Rambo #define CLOCK_1K 1000
20989ce049SDarwin Rambo #define CLOCK_1M (CLOCK_1K * 1000)
21989ce049SDarwin Rambo
22989ce049SDarwin Rambo /* declare a reference clock */
23989ce049SDarwin Rambo #define DECLARE_REF_CLK(clk_name, clk_parent, clk_rate, clk_div) \
24989ce049SDarwin Rambo static struct refclk clk_name = { \
25989ce049SDarwin Rambo .clk = { \
26989ce049SDarwin Rambo .name = #clk_name, \
27989ce049SDarwin Rambo .parent = clk_parent, \
28989ce049SDarwin Rambo .rate = clk_rate, \
29989ce049SDarwin Rambo .div = clk_div, \
30989ce049SDarwin Rambo .ops = &ref_clk_ops, \
31989ce049SDarwin Rambo }, \
32989ce049SDarwin Rambo }
33989ce049SDarwin Rambo
34989ce049SDarwin Rambo /*
35989ce049SDarwin Rambo * Reference clocks
36989ce049SDarwin Rambo */
37989ce049SDarwin Rambo
38989ce049SDarwin Rambo /* Declare a list of reference clocks */
39989ce049SDarwin Rambo DECLARE_REF_CLK(ref_crystal, 0, 26 * CLOCK_1M, 1);
40989ce049SDarwin Rambo DECLARE_REF_CLK(var_96m, 0, 96 * CLOCK_1M, 1);
41989ce049SDarwin Rambo DECLARE_REF_CLK(ref_96m, 0, 96 * CLOCK_1M, 1);
42989ce049SDarwin Rambo DECLARE_REF_CLK(ref_312m, 0, 312 * CLOCK_1M, 0);
43989ce049SDarwin Rambo DECLARE_REF_CLK(ref_104m, &ref_312m.clk, 104 * CLOCK_1M, 3);
44989ce049SDarwin Rambo DECLARE_REF_CLK(ref_52m, &ref_104m.clk, 52 * CLOCK_1M, 2);
45989ce049SDarwin Rambo DECLARE_REF_CLK(ref_13m, &ref_52m.clk, 13 * CLOCK_1M, 4);
46989ce049SDarwin Rambo DECLARE_REF_CLK(var_312m, 0, 312 * CLOCK_1M, 0);
47989ce049SDarwin Rambo DECLARE_REF_CLK(var_104m, &var_312m.clk, 104 * CLOCK_1M, 3);
48989ce049SDarwin Rambo DECLARE_REF_CLK(var_52m, &var_104m.clk, 52 * CLOCK_1M, 2);
49989ce049SDarwin Rambo DECLARE_REF_CLK(var_13m, &var_52m.clk, 13 * CLOCK_1M, 4);
50989ce049SDarwin Rambo
51989ce049SDarwin Rambo struct refclk_lkup {
52989ce049SDarwin Rambo struct refclk *procclk;
53989ce049SDarwin Rambo const char *name;
54989ce049SDarwin Rambo };
55989ce049SDarwin Rambo
56989ce049SDarwin Rambo /* Lookup table for string to clk tranlation */
57989ce049SDarwin Rambo #define MKSTR(x) {&x, #x}
58989ce049SDarwin Rambo static struct refclk_lkup refclk_str_tbl[] = {
59989ce049SDarwin Rambo MKSTR(ref_crystal), MKSTR(var_96m), MKSTR(ref_96m),
60989ce049SDarwin Rambo MKSTR(ref_312m), MKSTR(ref_104m), MKSTR(ref_52m),
61989ce049SDarwin Rambo MKSTR(ref_13m), MKSTR(var_312m), MKSTR(var_104m),
62989ce049SDarwin Rambo MKSTR(var_52m), MKSTR(var_13m),
63989ce049SDarwin Rambo };
64989ce049SDarwin Rambo
65989ce049SDarwin Rambo int refclk_entries = sizeof(refclk_str_tbl)/sizeof(refclk_str_tbl[0]);
66989ce049SDarwin Rambo
67989ce049SDarwin Rambo /* convert ref clock string to clock structure pointer */
refclk_str_to_clk(const char * name)68989ce049SDarwin Rambo struct refclk *refclk_str_to_clk(const char *name)
69989ce049SDarwin Rambo {
70989ce049SDarwin Rambo int i;
71989ce049SDarwin Rambo struct refclk_lkup *tblp = refclk_str_tbl;
72989ce049SDarwin Rambo for (i = 0; i < refclk_entries; i++, tblp++) {
73989ce049SDarwin Rambo if (!(strcmp(name, tblp->name)))
74989ce049SDarwin Rambo return tblp->procclk;
75989ce049SDarwin Rambo }
76989ce049SDarwin Rambo return NULL;
77989ce049SDarwin Rambo }
78989ce049SDarwin Rambo
79989ce049SDarwin Rambo /* frequency tables indexed by freq_id */
80989ce049SDarwin Rambo unsigned long master_axi_freq_tbl[8] = {
81989ce049SDarwin Rambo 26 * CLOCK_1M,
82989ce049SDarwin Rambo 52 * CLOCK_1M,
83989ce049SDarwin Rambo 104 * CLOCK_1M,
84989ce049SDarwin Rambo 156 * CLOCK_1M,
85989ce049SDarwin Rambo 156 * CLOCK_1M,
86989ce049SDarwin Rambo 208 * CLOCK_1M,
87989ce049SDarwin Rambo 312 * CLOCK_1M,
88989ce049SDarwin Rambo 312 * CLOCK_1M
89989ce049SDarwin Rambo };
90989ce049SDarwin Rambo
91989ce049SDarwin Rambo unsigned long master_ahb_freq_tbl[8] = {
92989ce049SDarwin Rambo 26 * CLOCK_1M,
93989ce049SDarwin Rambo 52 * CLOCK_1M,
94989ce049SDarwin Rambo 52 * CLOCK_1M,
95989ce049SDarwin Rambo 52 * CLOCK_1M,
96989ce049SDarwin Rambo 78 * CLOCK_1M,
97989ce049SDarwin Rambo 104 * CLOCK_1M,
98989ce049SDarwin Rambo 104 * CLOCK_1M,
99989ce049SDarwin Rambo 156 * CLOCK_1M
100989ce049SDarwin Rambo };
101989ce049SDarwin Rambo
102989ce049SDarwin Rambo unsigned long slave_axi_freq_tbl[8] = {
103989ce049SDarwin Rambo 26 * CLOCK_1M,
104989ce049SDarwin Rambo 52 * CLOCK_1M,
105989ce049SDarwin Rambo 78 * CLOCK_1M,
106989ce049SDarwin Rambo 104 * CLOCK_1M,
107989ce049SDarwin Rambo 156 * CLOCK_1M,
108989ce049SDarwin Rambo 156 * CLOCK_1M
109989ce049SDarwin Rambo };
110989ce049SDarwin Rambo
111989ce049SDarwin Rambo unsigned long slave_apb_freq_tbl[8] = {
112989ce049SDarwin Rambo 26 * CLOCK_1M,
113989ce049SDarwin Rambo 26 * CLOCK_1M,
114989ce049SDarwin Rambo 39 * CLOCK_1M,
115989ce049SDarwin Rambo 52 * CLOCK_1M,
116989ce049SDarwin Rambo 52 * CLOCK_1M,
117989ce049SDarwin Rambo 78 * CLOCK_1M
118989ce049SDarwin Rambo };
119989ce049SDarwin Rambo
1202d66a0fdSJiandong Zheng unsigned long esub_freq_tbl[8] = {
1212d66a0fdSJiandong Zheng 78 * CLOCK_1M,
1222d66a0fdSJiandong Zheng 156 * CLOCK_1M,
1232d66a0fdSJiandong Zheng 156 * CLOCK_1M,
1242d66a0fdSJiandong Zheng 156 * CLOCK_1M,
1252d66a0fdSJiandong Zheng 208 * CLOCK_1M,
1262d66a0fdSJiandong Zheng 208 * CLOCK_1M,
1272d66a0fdSJiandong Zheng 208 * CLOCK_1M
1282d66a0fdSJiandong Zheng };
1292d66a0fdSJiandong Zheng
130989ce049SDarwin Rambo static struct bus_clk_data bsc1_apb_data = {
131989ce049SDarwin Rambo .gate = HW_SW_GATE_AUTO(0x0458, 16, 0, 1),
132989ce049SDarwin Rambo };
133989ce049SDarwin Rambo
134989ce049SDarwin Rambo static struct bus_clk_data bsc2_apb_data = {
135989ce049SDarwin Rambo .gate = HW_SW_GATE_AUTO(0x045c, 16, 0, 1),
136989ce049SDarwin Rambo };
137989ce049SDarwin Rambo
138989ce049SDarwin Rambo static struct bus_clk_data bsc3_apb_data = {
139989ce049SDarwin Rambo .gate = HW_SW_GATE_AUTO(0x0484, 16, 0, 1),
140989ce049SDarwin Rambo };
141989ce049SDarwin Rambo
142989ce049SDarwin Rambo /* * Master CCU clocks */
143989ce049SDarwin Rambo static struct peri_clk_data sdio1_data = {
144989ce049SDarwin Rambo .gate = HW_SW_GATE(0x0358, 18, 2, 3),
145989ce049SDarwin Rambo .clocks = CLOCKS("ref_crystal",
146989ce049SDarwin Rambo "var_52m",
147989ce049SDarwin Rambo "ref_52m",
148989ce049SDarwin Rambo "var_96m",
149989ce049SDarwin Rambo "ref_96m"),
150989ce049SDarwin Rambo .sel = SELECTOR(0x0a28, 0, 3),
151989ce049SDarwin Rambo .div = DIVIDER(0x0a28, 4, 14),
152989ce049SDarwin Rambo .trig = TRIGGER(0x0afc, 9),
153989ce049SDarwin Rambo };
154989ce049SDarwin Rambo
155989ce049SDarwin Rambo static struct peri_clk_data sdio2_data = {
156989ce049SDarwin Rambo .gate = HW_SW_GATE(0x035c, 18, 2, 3),
157989ce049SDarwin Rambo .clocks = CLOCKS("ref_crystal",
158989ce049SDarwin Rambo "var_52m",
159989ce049SDarwin Rambo "ref_52m",
160989ce049SDarwin Rambo "var_96m",
161989ce049SDarwin Rambo "ref_96m"),
162989ce049SDarwin Rambo .sel = SELECTOR(0x0a2c, 0, 3),
163989ce049SDarwin Rambo .div = DIVIDER(0x0a2c, 4, 14),
164989ce049SDarwin Rambo .trig = TRIGGER(0x0afc, 10),
165989ce049SDarwin Rambo };
166989ce049SDarwin Rambo
167989ce049SDarwin Rambo static struct peri_clk_data sdio3_data = {
168989ce049SDarwin Rambo .gate = HW_SW_GATE(0x0364, 18, 2, 3),
169989ce049SDarwin Rambo .clocks = CLOCKS("ref_crystal",
170989ce049SDarwin Rambo "var_52m",
171989ce049SDarwin Rambo "ref_52m",
172989ce049SDarwin Rambo "var_96m",
173989ce049SDarwin Rambo "ref_96m"),
174989ce049SDarwin Rambo .sel = SELECTOR(0x0a34, 0, 3),
175989ce049SDarwin Rambo .div = DIVIDER(0x0a34, 4, 14),
176989ce049SDarwin Rambo .trig = TRIGGER(0x0afc, 12),
177989ce049SDarwin Rambo };
178989ce049SDarwin Rambo
179989ce049SDarwin Rambo static struct peri_clk_data sdio4_data = {
180989ce049SDarwin Rambo .gate = HW_SW_GATE(0x0360, 18, 2, 3),
181989ce049SDarwin Rambo .clocks = CLOCKS("ref_crystal",
182989ce049SDarwin Rambo "var_52m",
183989ce049SDarwin Rambo "ref_52m",
184989ce049SDarwin Rambo "var_96m",
185989ce049SDarwin Rambo "ref_96m"),
186989ce049SDarwin Rambo .sel = SELECTOR(0x0a30, 0, 3),
187989ce049SDarwin Rambo .div = DIVIDER(0x0a30, 4, 14),
188989ce049SDarwin Rambo .trig = TRIGGER(0x0afc, 11),
189989ce049SDarwin Rambo };
190989ce049SDarwin Rambo
191989ce049SDarwin Rambo static struct peri_clk_data sdio1_sleep_data = {
192989ce049SDarwin Rambo .clocks = CLOCKS("ref_32k"),
193989ce049SDarwin Rambo .gate = SW_ONLY_GATE(0x0358, 20, 4),
194989ce049SDarwin Rambo };
195989ce049SDarwin Rambo
196989ce049SDarwin Rambo static struct peri_clk_data sdio2_sleep_data = {
197989ce049SDarwin Rambo .clocks = CLOCKS("ref_32k"),
198989ce049SDarwin Rambo .gate = SW_ONLY_GATE(0x035c, 20, 4),
199989ce049SDarwin Rambo };
200989ce049SDarwin Rambo
201989ce049SDarwin Rambo static struct peri_clk_data sdio3_sleep_data = {
202989ce049SDarwin Rambo .clocks = CLOCKS("ref_32k"),
203989ce049SDarwin Rambo .gate = SW_ONLY_GATE(0x0364, 20, 4),
204989ce049SDarwin Rambo };
205989ce049SDarwin Rambo
206989ce049SDarwin Rambo static struct peri_clk_data sdio4_sleep_data = {
207989ce049SDarwin Rambo .clocks = CLOCKS("ref_32k"),
208989ce049SDarwin Rambo .gate = SW_ONLY_GATE(0x0360, 20, 4),
209989ce049SDarwin Rambo };
210989ce049SDarwin Rambo
2114d013d8fSSteve Rae static struct bus_clk_data usb_otg_ahb_data = {
2124d013d8fSSteve Rae .gate = HW_SW_GATE_AUTO(0x0348, 16, 0, 1),
2134d013d8fSSteve Rae };
2144d013d8fSSteve Rae
215989ce049SDarwin Rambo static struct bus_clk_data sdio1_ahb_data = {
216989ce049SDarwin Rambo .gate = HW_SW_GATE_AUTO(0x0358, 16, 0, 1),
217989ce049SDarwin Rambo };
218989ce049SDarwin Rambo
219989ce049SDarwin Rambo static struct bus_clk_data sdio2_ahb_data = {
220989ce049SDarwin Rambo .gate = HW_SW_GATE_AUTO(0x035c, 16, 0, 1),
221989ce049SDarwin Rambo };
222989ce049SDarwin Rambo
223989ce049SDarwin Rambo static struct bus_clk_data sdio3_ahb_data = {
224989ce049SDarwin Rambo .gate = HW_SW_GATE_AUTO(0x0364, 16, 0, 1),
225989ce049SDarwin Rambo };
226989ce049SDarwin Rambo
227989ce049SDarwin Rambo static struct bus_clk_data sdio4_ahb_data = {
228989ce049SDarwin Rambo .gate = HW_SW_GATE_AUTO(0x0360, 16, 0, 1),
229989ce049SDarwin Rambo };
230989ce049SDarwin Rambo
231989ce049SDarwin Rambo /* * Slave CCU clocks */
232989ce049SDarwin Rambo static struct peri_clk_data bsc1_data = {
233989ce049SDarwin Rambo .gate = HW_SW_GATE(0x0458, 18, 2, 3),
234989ce049SDarwin Rambo .clocks = CLOCKS("ref_crystal",
235989ce049SDarwin Rambo "var_104m",
236989ce049SDarwin Rambo "ref_104m",
237989ce049SDarwin Rambo "var_13m",
238989ce049SDarwin Rambo "ref_13m"),
239989ce049SDarwin Rambo .sel = SELECTOR(0x0a64, 0, 3),
240989ce049SDarwin Rambo .trig = TRIGGER(0x0afc, 23),
241989ce049SDarwin Rambo };
242989ce049SDarwin Rambo
243989ce049SDarwin Rambo static struct peri_clk_data bsc2_data = {
244989ce049SDarwin Rambo .gate = HW_SW_GATE(0x045c, 18, 2, 3),
245989ce049SDarwin Rambo .clocks = CLOCKS("ref_crystal",
246989ce049SDarwin Rambo "var_104m",
247989ce049SDarwin Rambo "ref_104m",
248989ce049SDarwin Rambo "var_13m",
249989ce049SDarwin Rambo "ref_13m"),
250989ce049SDarwin Rambo .sel = SELECTOR(0x0a68, 0, 3),
251989ce049SDarwin Rambo .trig = TRIGGER(0x0afc, 24),
252989ce049SDarwin Rambo };
253989ce049SDarwin Rambo
254989ce049SDarwin Rambo static struct peri_clk_data bsc3_data = {
255989ce049SDarwin Rambo .gate = HW_SW_GATE(0x0484, 18, 2, 3),
256989ce049SDarwin Rambo .clocks = CLOCKS("ref_crystal",
257989ce049SDarwin Rambo "var_104m",
258989ce049SDarwin Rambo "ref_104m",
259989ce049SDarwin Rambo "var_13m",
260989ce049SDarwin Rambo "ref_13m"),
261989ce049SDarwin Rambo .sel = SELECTOR(0x0a84, 0, 3),
262989ce049SDarwin Rambo .trig = TRIGGER(0x0b00, 2),
263989ce049SDarwin Rambo };
264989ce049SDarwin Rambo
265989ce049SDarwin Rambo /*
266989ce049SDarwin Rambo * CCU clocks
267989ce049SDarwin Rambo */
268989ce049SDarwin Rambo
269989ce049SDarwin Rambo static struct ccu_clock kpm_ccu_clk = {
270989ce049SDarwin Rambo .clk = {
271989ce049SDarwin Rambo .name = "kpm_ccu_clk",
272989ce049SDarwin Rambo .ops = &ccu_clk_ops,
273989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_MST_CLK_BASE_ADDR,
274989ce049SDarwin Rambo },
275989ce049SDarwin Rambo .num_policy_masks = 1,
276989ce049SDarwin Rambo .policy_freq_offset = 0x00000008,
277989ce049SDarwin Rambo .freq_bit_shift = 8,
278989ce049SDarwin Rambo .policy_ctl_offset = 0x0000000c,
279989ce049SDarwin Rambo .policy0_mask_offset = 0x00000010,
280989ce049SDarwin Rambo .policy1_mask_offset = 0x00000014,
281989ce049SDarwin Rambo .policy2_mask_offset = 0x00000018,
282989ce049SDarwin Rambo .policy3_mask_offset = 0x0000001c,
283989ce049SDarwin Rambo .lvm_en_offset = 0x00000034,
284989ce049SDarwin Rambo .freq_id = 2,
285989ce049SDarwin Rambo .freq_tbl = master_axi_freq_tbl,
286989ce049SDarwin Rambo };
287989ce049SDarwin Rambo
288989ce049SDarwin Rambo static struct ccu_clock kps_ccu_clk = {
289989ce049SDarwin Rambo .clk = {
290989ce049SDarwin Rambo .name = "kps_ccu_clk",
291989ce049SDarwin Rambo .ops = &ccu_clk_ops,
292989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_SLV_CLK_BASE_ADDR,
293989ce049SDarwin Rambo },
294989ce049SDarwin Rambo .num_policy_masks = 2,
295989ce049SDarwin Rambo .policy_freq_offset = 0x00000008,
296989ce049SDarwin Rambo .freq_bit_shift = 8,
297989ce049SDarwin Rambo .policy_ctl_offset = 0x0000000c,
298989ce049SDarwin Rambo .policy0_mask_offset = 0x00000010,
299989ce049SDarwin Rambo .policy1_mask_offset = 0x00000014,
300989ce049SDarwin Rambo .policy2_mask_offset = 0x00000018,
301989ce049SDarwin Rambo .policy3_mask_offset = 0x0000001c,
302989ce049SDarwin Rambo .policy0_mask2_offset = 0x00000048,
303989ce049SDarwin Rambo .policy1_mask2_offset = 0x0000004c,
304989ce049SDarwin Rambo .policy2_mask2_offset = 0x00000050,
305989ce049SDarwin Rambo .policy3_mask2_offset = 0x00000054,
306989ce049SDarwin Rambo .lvm_en_offset = 0x00000034,
307989ce049SDarwin Rambo .freq_id = 2,
308989ce049SDarwin Rambo .freq_tbl = slave_axi_freq_tbl,
309989ce049SDarwin Rambo };
310989ce049SDarwin Rambo
3112d66a0fdSJiandong Zheng #ifdef CONFIG_BCM_SF2_ETH
3122d66a0fdSJiandong Zheng static struct ccu_clock esub_ccu_clk = {
3132d66a0fdSJiandong Zheng .clk = {
3142d66a0fdSJiandong Zheng .name = "esub_ccu_clk",
3152d66a0fdSJiandong Zheng .ops = &ccu_clk_ops,
3162d66a0fdSJiandong Zheng .ccu_clk_mgr_base = ESUB_CLK_BASE_ADDR,
3172d66a0fdSJiandong Zheng },
3182d66a0fdSJiandong Zheng .num_policy_masks = 1,
3192d66a0fdSJiandong Zheng .policy_freq_offset = 0x00000008,
3202d66a0fdSJiandong Zheng .freq_bit_shift = 8,
3212d66a0fdSJiandong Zheng .policy_ctl_offset = 0x0000000c,
3222d66a0fdSJiandong Zheng .policy0_mask_offset = 0x00000010,
3232d66a0fdSJiandong Zheng .policy1_mask_offset = 0x00000014,
3242d66a0fdSJiandong Zheng .policy2_mask_offset = 0x00000018,
3252d66a0fdSJiandong Zheng .policy3_mask_offset = 0x0000001c,
3262d66a0fdSJiandong Zheng .lvm_en_offset = 0x00000034,
3272d66a0fdSJiandong Zheng .freq_id = 2,
3282d66a0fdSJiandong Zheng .freq_tbl = esub_freq_tbl,
3292d66a0fdSJiandong Zheng };
3302d66a0fdSJiandong Zheng #endif
3312d66a0fdSJiandong Zheng
332989ce049SDarwin Rambo /*
333989ce049SDarwin Rambo * Bus clocks
334989ce049SDarwin Rambo */
335989ce049SDarwin Rambo
336989ce049SDarwin Rambo /* KPM bus clocks */
3374d013d8fSSteve Rae static struct bus_clock usb_otg_ahb_clk = {
3384d013d8fSSteve Rae .clk = {
3394d013d8fSSteve Rae .name = "usb_otg_ahb_clk",
3404d013d8fSSteve Rae .parent = &kpm_ccu_clk.clk,
3414d013d8fSSteve Rae .ops = &bus_clk_ops,
3424d013d8fSSteve Rae .ccu_clk_mgr_base = KONA_MST_CLK_BASE_ADDR,
3434d013d8fSSteve Rae },
3444d013d8fSSteve Rae .freq_tbl = master_ahb_freq_tbl,
3454d013d8fSSteve Rae .data = &usb_otg_ahb_data,
3464d013d8fSSteve Rae };
3474d013d8fSSteve Rae
348989ce049SDarwin Rambo static struct bus_clock sdio1_ahb_clk = {
349989ce049SDarwin Rambo .clk = {
350989ce049SDarwin Rambo .name = "sdio1_ahb_clk",
351989ce049SDarwin Rambo .parent = &kpm_ccu_clk.clk,
352989ce049SDarwin Rambo .ops = &bus_clk_ops,
353989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_MST_CLK_BASE_ADDR,
354989ce049SDarwin Rambo },
355989ce049SDarwin Rambo .freq_tbl = master_ahb_freq_tbl,
356989ce049SDarwin Rambo .data = &sdio1_ahb_data,
357989ce049SDarwin Rambo };
358989ce049SDarwin Rambo
359989ce049SDarwin Rambo static struct bus_clock sdio2_ahb_clk = {
360989ce049SDarwin Rambo .clk = {
361989ce049SDarwin Rambo .name = "sdio2_ahb_clk",
362989ce049SDarwin Rambo .parent = &kpm_ccu_clk.clk,
363989ce049SDarwin Rambo .ops = &bus_clk_ops,
364989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_MST_CLK_BASE_ADDR,
365989ce049SDarwin Rambo },
366989ce049SDarwin Rambo .freq_tbl = master_ahb_freq_tbl,
367989ce049SDarwin Rambo .data = &sdio2_ahb_data,
368989ce049SDarwin Rambo };
369989ce049SDarwin Rambo
370989ce049SDarwin Rambo static struct bus_clock sdio3_ahb_clk = {
371989ce049SDarwin Rambo .clk = {
372989ce049SDarwin Rambo .name = "sdio3_ahb_clk",
373989ce049SDarwin Rambo .parent = &kpm_ccu_clk.clk,
374989ce049SDarwin Rambo .ops = &bus_clk_ops,
375989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_MST_CLK_BASE_ADDR,
376989ce049SDarwin Rambo },
377989ce049SDarwin Rambo .freq_tbl = master_ahb_freq_tbl,
378989ce049SDarwin Rambo .data = &sdio3_ahb_data,
379989ce049SDarwin Rambo };
380989ce049SDarwin Rambo
381989ce049SDarwin Rambo static struct bus_clock sdio4_ahb_clk = {
382989ce049SDarwin Rambo .clk = {
383989ce049SDarwin Rambo .name = "sdio4_ahb_clk",
384989ce049SDarwin Rambo .parent = &kpm_ccu_clk.clk,
385989ce049SDarwin Rambo .ops = &bus_clk_ops,
386989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_MST_CLK_BASE_ADDR,
387989ce049SDarwin Rambo },
388989ce049SDarwin Rambo .freq_tbl = master_ahb_freq_tbl,
389989ce049SDarwin Rambo .data = &sdio4_ahb_data,
390989ce049SDarwin Rambo };
391989ce049SDarwin Rambo
392989ce049SDarwin Rambo static struct bus_clock bsc1_apb_clk = {
393989ce049SDarwin Rambo .clk = {
394989ce049SDarwin Rambo .name = "bsc1_apb_clk",
395989ce049SDarwin Rambo .parent = &kps_ccu_clk.clk,
396989ce049SDarwin Rambo .ops = &bus_clk_ops,
397989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_SLV_CLK_BASE_ADDR,
398989ce049SDarwin Rambo },
399989ce049SDarwin Rambo .freq_tbl = slave_apb_freq_tbl,
400989ce049SDarwin Rambo .data = &bsc1_apb_data,
401989ce049SDarwin Rambo };
402989ce049SDarwin Rambo
403989ce049SDarwin Rambo static struct bus_clock bsc2_apb_clk = {
404989ce049SDarwin Rambo .clk = {
405989ce049SDarwin Rambo .name = "bsc2_apb_clk",
406989ce049SDarwin Rambo .parent = &kps_ccu_clk.clk,
407989ce049SDarwin Rambo .ops = &bus_clk_ops,
408989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_SLV_CLK_BASE_ADDR,
409989ce049SDarwin Rambo },
410989ce049SDarwin Rambo .freq_tbl = slave_apb_freq_tbl,
411989ce049SDarwin Rambo .data = &bsc2_apb_data,
412989ce049SDarwin Rambo };
413989ce049SDarwin Rambo
414989ce049SDarwin Rambo static struct bus_clock bsc3_apb_clk = {
415989ce049SDarwin Rambo .clk = {
416989ce049SDarwin Rambo .name = "bsc3_apb_clk",
417989ce049SDarwin Rambo .parent = &kps_ccu_clk.clk,
418989ce049SDarwin Rambo .ops = &bus_clk_ops,
419989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_SLV_CLK_BASE_ADDR,
420989ce049SDarwin Rambo },
421989ce049SDarwin Rambo .freq_tbl = slave_apb_freq_tbl,
422989ce049SDarwin Rambo .data = &bsc3_apb_data,
423989ce049SDarwin Rambo };
424989ce049SDarwin Rambo
425989ce049SDarwin Rambo /* KPM peripheral */
426989ce049SDarwin Rambo static struct peri_clock sdio1_clk = {
427989ce049SDarwin Rambo .clk = {
428989ce049SDarwin Rambo .name = "sdio1_clk",
429989ce049SDarwin Rambo .parent = &ref_52m.clk,
430989ce049SDarwin Rambo .ops = &peri_clk_ops,
431989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_MST_CLK_BASE_ADDR,
432989ce049SDarwin Rambo },
433989ce049SDarwin Rambo .data = &sdio1_data,
434989ce049SDarwin Rambo };
435989ce049SDarwin Rambo
436989ce049SDarwin Rambo static struct peri_clock sdio2_clk = {
437989ce049SDarwin Rambo .clk = {
438989ce049SDarwin Rambo .name = "sdio2_clk",
439989ce049SDarwin Rambo .parent = &ref_52m.clk,
440989ce049SDarwin Rambo .ops = &peri_clk_ops,
441989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_MST_CLK_BASE_ADDR,
442989ce049SDarwin Rambo },
443989ce049SDarwin Rambo .data = &sdio2_data,
444989ce049SDarwin Rambo };
445989ce049SDarwin Rambo
446989ce049SDarwin Rambo static struct peri_clock sdio3_clk = {
447989ce049SDarwin Rambo .clk = {
448989ce049SDarwin Rambo .name = "sdio3_clk",
449989ce049SDarwin Rambo .parent = &ref_52m.clk,
450989ce049SDarwin Rambo .ops = &peri_clk_ops,
451989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_MST_CLK_BASE_ADDR,
452989ce049SDarwin Rambo },
453989ce049SDarwin Rambo .data = &sdio3_data,
454989ce049SDarwin Rambo };
455989ce049SDarwin Rambo
456989ce049SDarwin Rambo static struct peri_clock sdio4_clk = {
457989ce049SDarwin Rambo .clk = {
458989ce049SDarwin Rambo .name = "sdio4_clk",
459989ce049SDarwin Rambo .parent = &ref_52m.clk,
460989ce049SDarwin Rambo .ops = &peri_clk_ops,
461989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_MST_CLK_BASE_ADDR,
462989ce049SDarwin Rambo },
463989ce049SDarwin Rambo .data = &sdio4_data,
464989ce049SDarwin Rambo };
465989ce049SDarwin Rambo
466989ce049SDarwin Rambo static struct peri_clock sdio1_sleep_clk = {
467989ce049SDarwin Rambo .clk = {
468989ce049SDarwin Rambo .name = "sdio1_sleep_clk",
469989ce049SDarwin Rambo .parent = &kpm_ccu_clk.clk,
470989ce049SDarwin Rambo .ops = &bus_clk_ops,
471989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_MST_CLK_BASE_ADDR,
472989ce049SDarwin Rambo },
473989ce049SDarwin Rambo .data = &sdio1_sleep_data,
474989ce049SDarwin Rambo };
475989ce049SDarwin Rambo
476989ce049SDarwin Rambo static struct peri_clock sdio2_sleep_clk = {
477989ce049SDarwin Rambo .clk = {
478989ce049SDarwin Rambo .name = "sdio2_sleep_clk",
479989ce049SDarwin Rambo .parent = &kpm_ccu_clk.clk,
480989ce049SDarwin Rambo .ops = &bus_clk_ops,
481989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_MST_CLK_BASE_ADDR,
482989ce049SDarwin Rambo },
483989ce049SDarwin Rambo .data = &sdio2_sleep_data,
484989ce049SDarwin Rambo };
485989ce049SDarwin Rambo
486989ce049SDarwin Rambo static struct peri_clock sdio3_sleep_clk = {
487989ce049SDarwin Rambo .clk = {
488989ce049SDarwin Rambo .name = "sdio3_sleep_clk",
489989ce049SDarwin Rambo .parent = &kpm_ccu_clk.clk,
490989ce049SDarwin Rambo .ops = &bus_clk_ops,
491989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_MST_CLK_BASE_ADDR,
492989ce049SDarwin Rambo },
493989ce049SDarwin Rambo .data = &sdio3_sleep_data,
494989ce049SDarwin Rambo };
495989ce049SDarwin Rambo
496989ce049SDarwin Rambo static struct peri_clock sdio4_sleep_clk = {
497989ce049SDarwin Rambo .clk = {
498989ce049SDarwin Rambo .name = "sdio4_sleep_clk",
499989ce049SDarwin Rambo .parent = &kpm_ccu_clk.clk,
500989ce049SDarwin Rambo .ops = &bus_clk_ops,
501989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_MST_CLK_BASE_ADDR,
502989ce049SDarwin Rambo },
503989ce049SDarwin Rambo .data = &sdio4_sleep_data,
504989ce049SDarwin Rambo };
505989ce049SDarwin Rambo
506989ce049SDarwin Rambo /* KPS peripheral clock */
507989ce049SDarwin Rambo static struct peri_clock bsc1_clk = {
508989ce049SDarwin Rambo .clk = {
509989ce049SDarwin Rambo .name = "bsc1_clk",
510989ce049SDarwin Rambo .parent = &ref_13m.clk,
511989ce049SDarwin Rambo .rate = 13 * CLOCK_1M,
512989ce049SDarwin Rambo .div = 1,
513989ce049SDarwin Rambo .ops = &peri_clk_ops,
514989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_SLV_CLK_BASE_ADDR,
515989ce049SDarwin Rambo },
516989ce049SDarwin Rambo .data = &bsc1_data,
517989ce049SDarwin Rambo };
518989ce049SDarwin Rambo
519989ce049SDarwin Rambo static struct peri_clock bsc2_clk = {
520989ce049SDarwin Rambo .clk = {
521989ce049SDarwin Rambo .name = "bsc2_clk",
522989ce049SDarwin Rambo .parent = &ref_13m.clk,
523989ce049SDarwin Rambo .rate = 13 * CLOCK_1M,
524989ce049SDarwin Rambo .div = 1,
525989ce049SDarwin Rambo .ops = &peri_clk_ops,
526989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_SLV_CLK_BASE_ADDR,
527989ce049SDarwin Rambo },
528989ce049SDarwin Rambo .data = &bsc2_data,
529989ce049SDarwin Rambo };
530989ce049SDarwin Rambo
531989ce049SDarwin Rambo static struct peri_clock bsc3_clk = {
532989ce049SDarwin Rambo .clk = {
533989ce049SDarwin Rambo .name = "bsc3_clk",
534989ce049SDarwin Rambo .parent = &ref_13m.clk,
535989ce049SDarwin Rambo .rate = 13 * CLOCK_1M,
536989ce049SDarwin Rambo .div = 1,
537989ce049SDarwin Rambo .ops = &peri_clk_ops,
538989ce049SDarwin Rambo .ccu_clk_mgr_base = KONA_SLV_CLK_BASE_ADDR,
539989ce049SDarwin Rambo },
540989ce049SDarwin Rambo .data = &bsc3_data,
541989ce049SDarwin Rambo };
542989ce049SDarwin Rambo
543989ce049SDarwin Rambo /* public table for registering clocks */
544989ce049SDarwin Rambo struct clk_lookup arch_clk_tbl[] = {
545989ce049SDarwin Rambo /* Peripheral clocks */
546989ce049SDarwin Rambo CLK_LK(sdio1),
547989ce049SDarwin Rambo CLK_LK(sdio2),
548989ce049SDarwin Rambo CLK_LK(sdio3),
549989ce049SDarwin Rambo CLK_LK(sdio4),
550989ce049SDarwin Rambo CLK_LK(sdio1_sleep),
551989ce049SDarwin Rambo CLK_LK(sdio2_sleep),
552989ce049SDarwin Rambo CLK_LK(sdio3_sleep),
553989ce049SDarwin Rambo CLK_LK(sdio4_sleep),
554989ce049SDarwin Rambo CLK_LK(bsc1),
555989ce049SDarwin Rambo CLK_LK(bsc2),
556989ce049SDarwin Rambo CLK_LK(bsc3),
557989ce049SDarwin Rambo /* Bus clocks */
5584d013d8fSSteve Rae CLK_LK(usb_otg_ahb),
559989ce049SDarwin Rambo CLK_LK(sdio1_ahb),
560989ce049SDarwin Rambo CLK_LK(sdio2_ahb),
561989ce049SDarwin Rambo CLK_LK(sdio3_ahb),
562989ce049SDarwin Rambo CLK_LK(sdio4_ahb),
563989ce049SDarwin Rambo CLK_LK(bsc1_apb),
564989ce049SDarwin Rambo CLK_LK(bsc2_apb),
565989ce049SDarwin Rambo CLK_LK(bsc3_apb),
5662d66a0fdSJiandong Zheng #ifdef CONFIG_BCM_SF2_ETH
5672d66a0fdSJiandong Zheng CLK_LK(esub_ccu),
5682d66a0fdSJiandong Zheng #endif
569989ce049SDarwin Rambo };
570989ce049SDarwin Rambo
571989ce049SDarwin Rambo /* public array size */
572989ce049SDarwin Rambo unsigned int arch_clk_tbl_array_size = ARRAY_SIZE(arch_clk_tbl);
573