1/*
2 * common clks module for all SiRF SoCs
3 *
4 * Copyright (c) 2011 - 2014 Cambridge Silicon Radio Limited, a CSR plc group
5 * company.
6 *
7 * Licensed under GPLv2 or later.
8 */
9
10#define KHZ     1000
11#define MHZ     (KHZ * KHZ)
12
13static void *sirfsoc_clk_vbase;
14static void *sirfsoc_rsc_vbase;
15static struct clk_onecell_data clk_data;
16
17/*
18 * SiRFprimaII clock controller
19 * - 2 oscillators: osc-26MHz, rtc-32.768KHz
20 * - 3 standard configurable plls: pll1, pll2 & pll3
21 * - 2 exclusive plls: usb phy pll and sata phy pll
22 * - 8 clock domains: cpu/cpudiv, mem/memdiv, sys/io, dsp, graphic, multimedia,
23 *     display and sdphy.
24 *     Each clock domain can select its own clock source from five clock sources,
25 *     X_XIN, X_XINW, PLL1, PLL2 and PLL3. The domain clock is used as the source
26 *     clock of the group clock.
27 *     - dsp domain: gps, mf
28 *     - io domain: dmac, nand, audio, uart, i2c, spi, usp, pwm, pulse
29 *     - sys domain: security
30 */
31
32struct clk_pll {
33	struct clk_hw hw;
34	unsigned short regofs;  /* register offset */
35};
36
37#define to_pllclk(_hw) container_of(_hw, struct clk_pll, hw)
38
39struct clk_dmn {
40	struct clk_hw hw;
41	signed char enable_bit; /* enable bit: 0 ~ 63 */
42	unsigned short regofs;  /* register offset */
43};
44
45#define to_dmnclk(_hw) container_of(_hw, struct clk_dmn, hw)
46
47struct clk_std {
48	struct clk_hw hw;
49	signed char enable_bit; /* enable bit: 0 ~ 63 */
50};
51
52#define to_stdclk(_hw) container_of(_hw, struct clk_std, hw)
53
54static int std_clk_is_enabled(struct clk_hw *hw);
55static int std_clk_enable(struct clk_hw *hw);
56static void std_clk_disable(struct clk_hw *hw);
57
58static inline unsigned long clkc_readl(unsigned reg)
59{
60	return readl(sirfsoc_clk_vbase + reg);
61}
62
63static inline void clkc_writel(u32 val, unsigned reg)
64{
65	writel(val, sirfsoc_clk_vbase + reg);
66}
67
68/*
69 * std pll
70 */
71
72static unsigned long pll_clk_recalc_rate(struct clk_hw *hw,
73	unsigned long parent_rate)
74{
75	unsigned long fin = parent_rate;
76	struct clk_pll *clk = to_pllclk(hw);
77	u32 regcfg2 = clk->regofs + SIRFSOC_CLKC_PLL1_CFG2 -
78		SIRFSOC_CLKC_PLL1_CFG0;
79
80	if (clkc_readl(regcfg2) & BIT(2)) {
81		/* pll bypass mode */
82		return fin;
83	} else {
84		/* fout = fin * nf / nr / od */
85		u32 cfg0 = clkc_readl(clk->regofs);
86		u32 nf = (cfg0 & (BIT(13) - 1)) + 1;
87		u32 nr = ((cfg0 >> 13) & (BIT(6) - 1)) + 1;
88		u32 od = ((cfg0 >> 19) & (BIT(4) - 1)) + 1;
89		WARN_ON(fin % MHZ);
90		return fin / MHZ * nf / nr / od * MHZ;
91	}
92}
93
94static long pll_clk_round_rate(struct clk_hw *hw, unsigned long rate,
95	unsigned long *parent_rate)
96{
97	unsigned long fin, nf, nr, od;
98	u64 dividend;
99
100	/*
101	 * fout = fin * nf / (nr * od);
102	 * set od = 1, nr = fin/MHz, so fout = nf * MHz
103	 */
104	rate = rate - rate % MHZ;
105
106	nf = rate / MHZ;
107	if (nf > BIT(13))
108		nf = BIT(13);
109	if (nf < 1)
110		nf = 1;
111
112	fin = *parent_rate;
113
114	nr = fin / MHZ;
115	if (nr > BIT(6))
116		nr = BIT(6);
117	od = 1;
118
119	dividend = (u64)fin * nf;
120	do_div(dividend, nr * od);
121
122	return (long)dividend;
123}
124
125static int pll_clk_set_rate(struct clk_hw *hw, unsigned long rate,
126	unsigned long parent_rate)
127{
128	struct clk_pll *clk = to_pllclk(hw);
129	unsigned long fin, nf, nr, od, reg;
130
131	/*
132	 * fout = fin * nf / (nr * od);
133	 * set od = 1, nr = fin/MHz, so fout = nf * MHz
134	 */
135
136	nf = rate / MHZ;
137	if (unlikely((rate % MHZ) || nf > BIT(13) || nf < 1))
138		return -EINVAL;
139
140	fin = parent_rate;
141	BUG_ON(fin < MHZ);
142
143	nr = fin / MHZ;
144	BUG_ON((fin % MHZ) || nr > BIT(6));
145
146	od = 1;
147
148	reg = (nf - 1) | ((nr - 1) << 13) | ((od - 1) << 19);
149	clkc_writel(reg, clk->regofs);
150
151	reg = clk->regofs + SIRFSOC_CLKC_PLL1_CFG1 - SIRFSOC_CLKC_PLL1_CFG0;
152	clkc_writel((nf >> 1) - 1, reg);
153
154	reg = clk->regofs + SIRFSOC_CLKC_PLL1_CFG2 - SIRFSOC_CLKC_PLL1_CFG0;
155	while (!(clkc_readl(reg) & BIT(6)))
156		cpu_relax();
157
158	return 0;
159}
160
161static long cpu_clk_round_rate(struct clk_hw *hw, unsigned long rate,
162	unsigned long *parent_rate)
163{
164	/*
165	 * SiRF SoC has not cpu clock control,
166	 * So bypass to it's parent pll.
167	 */
168	struct clk *parent_clk = clk_get_parent(hw->clk);
169	struct clk *pll_parent_clk = clk_get_parent(parent_clk);
170	unsigned long pll_parent_rate = clk_get_rate(pll_parent_clk);
171	return pll_clk_round_rate(__clk_get_hw(parent_clk), rate, &pll_parent_rate);
172}
173
174static unsigned long cpu_clk_recalc_rate(struct clk_hw *hw,
175	unsigned long parent_rate)
176{
177	/*
178	 * SiRF SoC has not cpu clock control,
179	 * So return the parent pll rate.
180	 */
181	struct clk *parent_clk = clk_get_parent(hw->clk);
182	return __clk_get_rate(parent_clk);
183}
184
185static struct clk_ops std_pll_ops = {
186	.recalc_rate = pll_clk_recalc_rate,
187	.round_rate = pll_clk_round_rate,
188	.set_rate = pll_clk_set_rate,
189};
190
191static const char *pll_clk_parents[] = {
192	"osc",
193};
194
195static struct clk_init_data clk_pll1_init = {
196	.name = "pll1",
197	.ops = &std_pll_ops,
198	.parent_names = pll_clk_parents,
199	.num_parents = ARRAY_SIZE(pll_clk_parents),
200};
201
202static struct clk_init_data clk_pll2_init = {
203	.name = "pll2",
204	.ops = &std_pll_ops,
205	.parent_names = pll_clk_parents,
206	.num_parents = ARRAY_SIZE(pll_clk_parents),
207};
208
209static struct clk_init_data clk_pll3_init = {
210	.name = "pll3",
211	.ops = &std_pll_ops,
212	.parent_names = pll_clk_parents,
213	.num_parents = ARRAY_SIZE(pll_clk_parents),
214};
215
216static struct clk_pll clk_pll1 = {
217	.regofs = SIRFSOC_CLKC_PLL1_CFG0,
218	.hw = {
219		.init = &clk_pll1_init,
220	},
221};
222
223static struct clk_pll clk_pll2 = {
224	.regofs = SIRFSOC_CLKC_PLL2_CFG0,
225	.hw = {
226		.init = &clk_pll2_init,
227	},
228};
229
230static struct clk_pll clk_pll3 = {
231	.regofs = SIRFSOC_CLKC_PLL3_CFG0,
232	.hw = {
233		.init = &clk_pll3_init,
234	},
235};
236
237/*
238 * usb uses specified pll
239 */
240
241static int usb_pll_clk_enable(struct clk_hw *hw)
242{
243	u32 reg = readl(sirfsoc_rsc_vbase + SIRFSOC_USBPHY_PLL_CTRL);
244	reg &= ~(SIRFSOC_USBPHY_PLL_POWERDOWN | SIRFSOC_USBPHY_PLL_BYPASS);
245	writel(reg, sirfsoc_rsc_vbase + SIRFSOC_USBPHY_PLL_CTRL);
246	while (!(readl(sirfsoc_rsc_vbase + SIRFSOC_USBPHY_PLL_CTRL) &
247			SIRFSOC_USBPHY_PLL_LOCK))
248		cpu_relax();
249
250	return 0;
251}
252
253static void usb_pll_clk_disable(struct clk_hw *clk)
254{
255	u32 reg = readl(sirfsoc_rsc_vbase + SIRFSOC_USBPHY_PLL_CTRL);
256	reg |= (SIRFSOC_USBPHY_PLL_POWERDOWN | SIRFSOC_USBPHY_PLL_BYPASS);
257	writel(reg, sirfsoc_rsc_vbase + SIRFSOC_USBPHY_PLL_CTRL);
258}
259
260static unsigned long usb_pll_clk_recalc_rate(struct clk_hw *hw, unsigned long parent_rate)
261{
262	u32 reg = readl(sirfsoc_rsc_vbase + SIRFSOC_USBPHY_PLL_CTRL);
263	return (reg & SIRFSOC_USBPHY_PLL_BYPASS) ? parent_rate : 48*MHZ;
264}
265
266static struct clk_ops usb_pll_ops = {
267	.enable = usb_pll_clk_enable,
268	.disable = usb_pll_clk_disable,
269	.recalc_rate = usb_pll_clk_recalc_rate,
270};
271
272static struct clk_init_data clk_usb_pll_init = {
273	.name = "usb_pll",
274	.ops = &usb_pll_ops,
275	.parent_names = pll_clk_parents,
276	.num_parents = ARRAY_SIZE(pll_clk_parents),
277};
278
279static struct clk_hw usb_pll_clk_hw = {
280	.init = &clk_usb_pll_init,
281};
282
283/*
284 * clock domains - cpu, mem, sys/io, dsp, gfx
285 */
286
287static const char *dmn_clk_parents[] = {
288	"rtc",
289	"osc",
290	"pll1",
291	"pll2",
292	"pll3",
293};
294
295static u8 dmn_clk_get_parent(struct clk_hw *hw)
296{
297	struct clk_dmn *clk = to_dmnclk(hw);
298	u32 cfg = clkc_readl(clk->regofs);
299
300	/* parent of io domain can only be pll3 */
301	if (strcmp(hw->init->name, "io") == 0)
302		return 4;
303
304	WARN_ON((cfg & (BIT(3) - 1)) > 4);
305
306	return cfg & (BIT(3) - 1);
307}
308
309static int dmn_clk_set_parent(struct clk_hw *hw, u8 parent)
310{
311	struct clk_dmn *clk = to_dmnclk(hw);
312	u32 cfg = clkc_readl(clk->regofs);
313
314	/* parent of io domain can only be pll3 */
315	if (strcmp(hw->init->name, "io") == 0)
316		return -EINVAL;
317
318	cfg &= ~(BIT(3) - 1);
319	clkc_writel(cfg | parent, clk->regofs);
320	/* BIT(3) - switching status: 1 - busy, 0 - done */
321	while (clkc_readl(clk->regofs) & BIT(3))
322		cpu_relax();
323
324	return 0;
325}
326
327static unsigned long dmn_clk_recalc_rate(struct clk_hw *hw,
328	unsigned long parent_rate)
329
330{
331	unsigned long fin = parent_rate;
332	struct clk_dmn *clk = to_dmnclk(hw);
333
334	u32 cfg = clkc_readl(clk->regofs);
335
336	if (cfg & BIT(24)) {
337		/* fcd bypass mode */
338		return fin;
339	} else {
340		/*
341		 * wait count: bit[19:16], hold count: bit[23:20]
342		 */
343		u32 wait = (cfg >> 16) & (BIT(4) - 1);
344		u32 hold = (cfg >> 20) & (BIT(4) - 1);
345
346		return fin / (wait + hold + 2);
347	}
348}
349
350static long dmn_clk_round_rate(struct clk_hw *hw, unsigned long rate,
351	unsigned long *parent_rate)
352{
353	unsigned long fin;
354	unsigned ratio, wait, hold;
355	unsigned bits = (strcmp(hw->init->name, "mem") == 0) ? 3 : 4;
356
357	fin = *parent_rate;
358	ratio = fin / rate;
359
360	if (ratio < 2)
361		ratio = 2;
362	if (ratio > BIT(bits + 1))
363		ratio = BIT(bits + 1);
364
365	wait = (ratio >> 1) - 1;
366	hold = ratio - wait - 2;
367
368	return fin / (wait + hold + 2);
369}
370
371static int dmn_clk_set_rate(struct clk_hw *hw, unsigned long rate,
372	unsigned long parent_rate)
373{
374	struct clk_dmn *clk = to_dmnclk(hw);
375	unsigned long fin;
376	unsigned ratio, wait, hold, reg;
377	unsigned bits = (strcmp(hw->init->name, "mem") == 0) ? 3 : 4;
378
379	fin = parent_rate;
380	ratio = fin / rate;
381
382	if (unlikely(ratio < 2 || ratio > BIT(bits + 1)))
383		return -EINVAL;
384
385	WARN_ON(fin % rate);
386
387	wait = (ratio >> 1) - 1;
388	hold = ratio - wait - 2;
389
390	reg = clkc_readl(clk->regofs);
391	reg &= ~(((BIT(bits) - 1) << 16) | ((BIT(bits) - 1) << 20));
392	reg |= (wait << 16) | (hold << 20) | BIT(25);
393	clkc_writel(reg, clk->regofs);
394
395	/* waiting FCD been effective */
396	while (clkc_readl(clk->regofs) & BIT(25))
397		cpu_relax();
398
399	return 0;
400}
401
402static int cpu_clk_set_rate(struct clk_hw *hw, unsigned long rate,
403		unsigned long parent_rate)
404{
405	int ret1, ret2;
406	struct clk *cur_parent;
407
408	if (rate == clk_get_rate(clk_pll1.hw.clk)) {
409		ret1 = clk_set_parent(hw->clk, clk_pll1.hw.clk);
410		return ret1;
411	}
412
413	if (rate == clk_get_rate(clk_pll2.hw.clk)) {
414		ret1 = clk_set_parent(hw->clk, clk_pll2.hw.clk);
415		return ret1;
416	}
417
418	if (rate == clk_get_rate(clk_pll3.hw.clk)) {
419		ret1 = clk_set_parent(hw->clk, clk_pll3.hw.clk);
420		return ret1;
421	}
422
423	cur_parent = clk_get_parent(hw->clk);
424
425	/* switch to tmp pll before setting parent clock's rate */
426	if (cur_parent ==  clk_pll1.hw.clk) {
427		ret1 = clk_set_parent(hw->clk, clk_pll2.hw.clk);
428		BUG_ON(ret1);
429	}
430
431	ret2 = clk_set_rate(clk_pll1.hw.clk, rate);
432
433	ret1 = clk_set_parent(hw->clk, clk_pll1.hw.clk);
434
435	return ret2 ? ret2 : ret1;
436}
437
438static struct clk_ops msi_ops = {
439	.set_rate = dmn_clk_set_rate,
440	.round_rate = dmn_clk_round_rate,
441	.recalc_rate = dmn_clk_recalc_rate,
442	.set_parent = dmn_clk_set_parent,
443	.get_parent = dmn_clk_get_parent,
444};
445
446static struct clk_init_data clk_mem_init = {
447	.name = "mem",
448	.ops = &msi_ops,
449	.parent_names = dmn_clk_parents,
450	.num_parents = ARRAY_SIZE(dmn_clk_parents),
451};
452
453static struct clk_dmn clk_mem = {
454	.regofs = SIRFSOC_CLKC_MEM_CFG,
455	.hw = {
456		.init = &clk_mem_init,
457	},
458};
459
460static struct clk_init_data clk_sys_init = {
461	.name = "sys",
462	.ops = &msi_ops,
463	.parent_names = dmn_clk_parents,
464	.num_parents = ARRAY_SIZE(dmn_clk_parents),
465	.flags = CLK_SET_RATE_GATE,
466};
467
468static struct clk_dmn clk_sys = {
469	.regofs = SIRFSOC_CLKC_SYS_CFG,
470	.hw = {
471		.init = &clk_sys_init,
472	},
473};
474
475static struct clk_init_data clk_io_init = {
476	.name = "io",
477	.ops = &msi_ops,
478	.parent_names = dmn_clk_parents,
479	.num_parents = ARRAY_SIZE(dmn_clk_parents),
480};
481
482static struct clk_dmn clk_io = {
483	.regofs = SIRFSOC_CLKC_IO_CFG,
484	.hw = {
485		.init = &clk_io_init,
486	},
487};
488
489static struct clk_ops cpu_ops = {
490	.set_parent = dmn_clk_set_parent,
491	.get_parent = dmn_clk_get_parent,
492	.set_rate = cpu_clk_set_rate,
493	.round_rate = cpu_clk_round_rate,
494	.recalc_rate = cpu_clk_recalc_rate,
495};
496
497static struct clk_init_data clk_cpu_init = {
498	.name = "cpu",
499	.ops = &cpu_ops,
500	.parent_names = dmn_clk_parents,
501	.num_parents = ARRAY_SIZE(dmn_clk_parents),
502	.flags = CLK_SET_RATE_PARENT,
503};
504
505static struct clk_dmn clk_cpu = {
506	.regofs = SIRFSOC_CLKC_CPU_CFG,
507	.hw = {
508		.init = &clk_cpu_init,
509	},
510};
511
512static struct clk_ops dmn_ops = {
513	.is_enabled = std_clk_is_enabled,
514	.enable = std_clk_enable,
515	.disable = std_clk_disable,
516	.set_rate = dmn_clk_set_rate,
517	.round_rate = dmn_clk_round_rate,
518	.recalc_rate = dmn_clk_recalc_rate,
519	.set_parent = dmn_clk_set_parent,
520	.get_parent = dmn_clk_get_parent,
521};
522
523/* dsp, gfx, mm, lcd and vpp domain */
524
525static struct clk_init_data clk_dsp_init = {
526	.name = "dsp",
527	.ops = &dmn_ops,
528	.parent_names = dmn_clk_parents,
529	.num_parents = ARRAY_SIZE(dmn_clk_parents),
530};
531
532static struct clk_dmn clk_dsp = {
533	.regofs = SIRFSOC_CLKC_DSP_CFG,
534	.enable_bit = 0,
535	.hw = {
536		.init = &clk_dsp_init,
537	},
538};
539
540static struct clk_init_data clk_gfx_init = {
541	.name = "gfx",
542	.ops = &dmn_ops,
543	.parent_names = dmn_clk_parents,
544	.num_parents = ARRAY_SIZE(dmn_clk_parents),
545};
546
547static struct clk_dmn clk_gfx = {
548	.regofs = SIRFSOC_CLKC_GFX_CFG,
549	.enable_bit = 8,
550	.hw = {
551		.init = &clk_gfx_init,
552	},
553};
554
555static struct clk_init_data clk_mm_init = {
556	.name = "mm",
557	.ops = &dmn_ops,
558	.parent_names = dmn_clk_parents,
559	.num_parents = ARRAY_SIZE(dmn_clk_parents),
560};
561
562static struct clk_dmn clk_mm = {
563	.regofs = SIRFSOC_CLKC_MM_CFG,
564	.enable_bit = 9,
565	.hw = {
566		.init = &clk_mm_init,
567	},
568};
569
570/*
571 * for atlas6, gfx2d holds the bit of prima2's clk_mm
572 */
573#define clk_gfx2d clk_mm
574
575static struct clk_init_data clk_lcd_init = {
576	.name = "lcd",
577	.ops = &dmn_ops,
578	.parent_names = dmn_clk_parents,
579	.num_parents = ARRAY_SIZE(dmn_clk_parents),
580};
581
582static struct clk_dmn clk_lcd = {
583	.regofs = SIRFSOC_CLKC_LCD_CFG,
584	.enable_bit = 10,
585	.hw = {
586		.init = &clk_lcd_init,
587	},
588};
589
590static struct clk_init_data clk_vpp_init = {
591	.name = "vpp",
592	.ops = &dmn_ops,
593	.parent_names = dmn_clk_parents,
594	.num_parents = ARRAY_SIZE(dmn_clk_parents),
595};
596
597static struct clk_dmn clk_vpp = {
598	.regofs = SIRFSOC_CLKC_LCD_CFG,
599	.enable_bit = 11,
600	.hw = {
601		.init = &clk_vpp_init,
602	},
603};
604
605static struct clk_init_data clk_mmc01_init = {
606	.name = "mmc01",
607	.ops = &dmn_ops,
608	.parent_names = dmn_clk_parents,
609	.num_parents = ARRAY_SIZE(dmn_clk_parents),
610};
611
612static struct clk_init_data clk_mmc23_init = {
613	.name = "mmc23",
614	.ops = &dmn_ops,
615	.parent_names = dmn_clk_parents,
616	.num_parents = ARRAY_SIZE(dmn_clk_parents),
617};
618
619static struct clk_init_data clk_mmc45_init = {
620	.name = "mmc45",
621	.ops = &dmn_ops,
622	.parent_names = dmn_clk_parents,
623	.num_parents = ARRAY_SIZE(dmn_clk_parents),
624};
625
626/*
627 * peripheral controllers in io domain
628 */
629
630static int std_clk_is_enabled(struct clk_hw *hw)
631{
632	u32 reg;
633	int bit;
634	struct clk_std *clk = to_stdclk(hw);
635
636	bit = clk->enable_bit % 32;
637	reg = clk->enable_bit / 32;
638	reg = SIRFSOC_CLKC_CLK_EN0 + reg * sizeof(reg);
639
640	return !!(clkc_readl(reg) & BIT(bit));
641}
642
643static int std_clk_enable(struct clk_hw *hw)
644{
645	u32 val, reg;
646	int bit;
647	struct clk_std *clk = to_stdclk(hw);
648
649	BUG_ON(clk->enable_bit < 0 || clk->enable_bit > 63);
650
651	bit = clk->enable_bit % 32;
652	reg = clk->enable_bit / 32;
653	reg = SIRFSOC_CLKC_CLK_EN0 + reg * sizeof(reg);
654
655	val = clkc_readl(reg) | BIT(bit);
656	clkc_writel(val, reg);
657	return 0;
658}
659
660static void std_clk_disable(struct clk_hw *hw)
661{
662	u32 val, reg;
663	int bit;
664	struct clk_std *clk = to_stdclk(hw);
665
666	BUG_ON(clk->enable_bit < 0 || clk->enable_bit > 63);
667
668	bit = clk->enable_bit % 32;
669	reg = clk->enable_bit / 32;
670	reg = SIRFSOC_CLKC_CLK_EN0 + reg * sizeof(reg);
671
672	val = clkc_readl(reg) & ~BIT(bit);
673	clkc_writel(val, reg);
674}
675
676static const char *std_clk_io_parents[] = {
677	"io",
678};
679
680static struct clk_ops ios_ops = {
681	.is_enabled = std_clk_is_enabled,
682	.enable = std_clk_enable,
683	.disable = std_clk_disable,
684};
685
686static struct clk_init_data clk_cphif_init = {
687	.name = "cphif",
688	.ops = &ios_ops,
689	.parent_names = std_clk_io_parents,
690	.num_parents = ARRAY_SIZE(std_clk_io_parents),
691};
692
693static struct clk_std clk_cphif = {
694	.enable_bit = 20,
695	.hw = {
696		.init = &clk_cphif_init,
697	},
698};
699
700static struct clk_init_data clk_dmac0_init = {
701	.name = "dmac0",
702	.ops = &ios_ops,
703	.parent_names = std_clk_io_parents,
704	.num_parents = ARRAY_SIZE(std_clk_io_parents),
705};
706
707static struct clk_std clk_dmac0 = {
708	.enable_bit = 32,
709	.hw = {
710		.init = &clk_dmac0_init,
711	},
712};
713
714static struct clk_init_data clk_dmac1_init = {
715	.name = "dmac1",
716	.ops = &ios_ops,
717	.parent_names = std_clk_io_parents,
718	.num_parents = ARRAY_SIZE(std_clk_io_parents),
719};
720
721static struct clk_std clk_dmac1 = {
722	.enable_bit = 33,
723	.hw = {
724		.init = &clk_dmac1_init,
725	},
726};
727
728static struct clk_init_data clk_audio_init = {
729	.name = "audio",
730	.ops = &ios_ops,
731	.parent_names = std_clk_io_parents,
732	.num_parents = ARRAY_SIZE(std_clk_io_parents),
733};
734
735static struct clk_std clk_audio = {
736	.enable_bit = 35,
737	.hw = {
738		.init = &clk_audio_init,
739	},
740};
741
742static struct clk_init_data clk_uart0_init = {
743	.name = "uart0",
744	.ops = &ios_ops,
745	.parent_names = std_clk_io_parents,
746	.num_parents = ARRAY_SIZE(std_clk_io_parents),
747};
748
749static struct clk_std clk_uart0 = {
750	.enable_bit = 36,
751	.hw = {
752		.init = &clk_uart0_init,
753	},
754};
755
756static struct clk_init_data clk_uart1_init = {
757	.name = "uart1",
758	.ops = &ios_ops,
759	.parent_names = std_clk_io_parents,
760	.num_parents = ARRAY_SIZE(std_clk_io_parents),
761};
762
763static struct clk_std clk_uart1 = {
764	.enable_bit = 37,
765	.hw = {
766		.init = &clk_uart1_init,
767	},
768};
769
770static struct clk_init_data clk_uart2_init = {
771	.name = "uart2",
772	.ops = &ios_ops,
773	.parent_names = std_clk_io_parents,
774	.num_parents = ARRAY_SIZE(std_clk_io_parents),
775};
776
777static struct clk_std clk_uart2 = {
778	.enable_bit = 38,
779	.hw = {
780		.init = &clk_uart2_init,
781	},
782};
783
784static struct clk_init_data clk_usp0_init = {
785	.name = "usp0",
786	.ops = &ios_ops,
787	.parent_names = std_clk_io_parents,
788	.num_parents = ARRAY_SIZE(std_clk_io_parents),
789};
790
791static struct clk_std clk_usp0 = {
792	.enable_bit = 39,
793	.hw = {
794		.init = &clk_usp0_init,
795	},
796};
797
798static struct clk_init_data clk_usp1_init = {
799	.name = "usp1",
800	.ops = &ios_ops,
801	.parent_names = std_clk_io_parents,
802	.num_parents = ARRAY_SIZE(std_clk_io_parents),
803};
804
805static struct clk_std clk_usp1 = {
806	.enable_bit = 40,
807	.hw = {
808		.init = &clk_usp1_init,
809	},
810};
811
812static struct clk_init_data clk_usp2_init = {
813	.name = "usp2",
814	.ops = &ios_ops,
815	.parent_names = std_clk_io_parents,
816	.num_parents = ARRAY_SIZE(std_clk_io_parents),
817};
818
819static struct clk_std clk_usp2 = {
820	.enable_bit = 41,
821	.hw = {
822		.init = &clk_usp2_init,
823	},
824};
825
826static struct clk_init_data clk_vip_init = {
827	.name = "vip",
828	.ops = &ios_ops,
829	.parent_names = std_clk_io_parents,
830	.num_parents = ARRAY_SIZE(std_clk_io_parents),
831};
832
833static struct clk_std clk_vip = {
834	.enable_bit = 42,
835	.hw = {
836		.init = &clk_vip_init,
837	},
838};
839
840static struct clk_init_data clk_spi0_init = {
841	.name = "spi0",
842	.ops = &ios_ops,
843	.parent_names = std_clk_io_parents,
844	.num_parents = ARRAY_SIZE(std_clk_io_parents),
845};
846
847static struct clk_std clk_spi0 = {
848	.enable_bit = 43,
849	.hw = {
850		.init = &clk_spi0_init,
851	},
852};
853
854static struct clk_init_data clk_spi1_init = {
855	.name = "spi1",
856	.ops = &ios_ops,
857	.parent_names = std_clk_io_parents,
858	.num_parents = ARRAY_SIZE(std_clk_io_parents),
859};
860
861static struct clk_std clk_spi1 = {
862	.enable_bit = 44,
863	.hw = {
864		.init = &clk_spi1_init,
865	},
866};
867
868static struct clk_init_data clk_tsc_init = {
869	.name = "tsc",
870	.ops = &ios_ops,
871	.parent_names = std_clk_io_parents,
872	.num_parents = ARRAY_SIZE(std_clk_io_parents),
873};
874
875static struct clk_std clk_tsc = {
876	.enable_bit = 45,
877	.hw = {
878		.init = &clk_tsc_init,
879	},
880};
881
882static struct clk_init_data clk_i2c0_init = {
883	.name = "i2c0",
884	.ops = &ios_ops,
885	.parent_names = std_clk_io_parents,
886	.num_parents = ARRAY_SIZE(std_clk_io_parents),
887};
888
889static struct clk_std clk_i2c0 = {
890	.enable_bit = 46,
891	.hw = {
892		.init = &clk_i2c0_init,
893	},
894};
895
896static struct clk_init_data clk_i2c1_init = {
897	.name = "i2c1",
898	.ops = &ios_ops,
899	.parent_names = std_clk_io_parents,
900	.num_parents = ARRAY_SIZE(std_clk_io_parents),
901};
902
903static struct clk_std clk_i2c1 = {
904	.enable_bit = 47,
905	.hw = {
906		.init = &clk_i2c1_init,
907	},
908};
909
910static struct clk_init_data clk_pwmc_init = {
911	.name = "pwmc",
912	.ops = &ios_ops,
913	.parent_names = std_clk_io_parents,
914	.num_parents = ARRAY_SIZE(std_clk_io_parents),
915};
916
917static struct clk_std clk_pwmc = {
918	.enable_bit = 48,
919	.hw = {
920		.init = &clk_pwmc_init,
921	},
922};
923
924static struct clk_init_data clk_efuse_init = {
925	.name = "efuse",
926	.ops = &ios_ops,
927	.parent_names = std_clk_io_parents,
928	.num_parents = ARRAY_SIZE(std_clk_io_parents),
929};
930
931static struct clk_std clk_efuse = {
932	.enable_bit = 49,
933	.hw = {
934		.init = &clk_efuse_init,
935	},
936};
937
938static struct clk_init_data clk_pulse_init = {
939	.name = "pulse",
940	.ops = &ios_ops,
941	.parent_names = std_clk_io_parents,
942	.num_parents = ARRAY_SIZE(std_clk_io_parents),
943};
944
945static struct clk_std clk_pulse = {
946	.enable_bit = 50,
947	.hw = {
948		.init = &clk_pulse_init,
949	},
950};
951
952static const char *std_clk_dsp_parents[] = {
953	"dsp",
954};
955
956static struct clk_init_data clk_gps_init = {
957	.name = "gps",
958	.ops = &ios_ops,
959	.parent_names = std_clk_dsp_parents,
960	.num_parents = ARRAY_SIZE(std_clk_dsp_parents),
961};
962
963static struct clk_std clk_gps = {
964	.enable_bit = 1,
965	.hw = {
966		.init = &clk_gps_init,
967	},
968};
969
970static struct clk_init_data clk_mf_init = {
971	.name = "mf",
972	.ops = &ios_ops,
973	.parent_names = std_clk_io_parents,
974	.num_parents = ARRAY_SIZE(std_clk_io_parents),
975};
976
977static struct clk_std clk_mf = {
978	.enable_bit = 2,
979	.hw = {
980		.init = &clk_mf_init,
981	},
982};
983
984static const char *std_clk_sys_parents[] = {
985	"sys",
986};
987
988static struct clk_init_data clk_security_init = {
989	.name = "security",
990	.ops = &ios_ops,
991	.parent_names = std_clk_sys_parents,
992	.num_parents = ARRAY_SIZE(std_clk_sys_parents),
993};
994
995static struct clk_std clk_security = {
996	.enable_bit = 19,
997	.hw = {
998		.init = &clk_security_init,
999	},
1000};
1001
1002static const char *std_clk_usb_parents[] = {
1003	"usb_pll",
1004};
1005
1006static struct clk_init_data clk_usb0_init = {
1007	.name = "usb0",
1008	.ops = &ios_ops,
1009	.parent_names = std_clk_usb_parents,
1010	.num_parents = ARRAY_SIZE(std_clk_usb_parents),
1011};
1012
1013static struct clk_std clk_usb0 = {
1014	.enable_bit = 16,
1015	.hw = {
1016		.init = &clk_usb0_init,
1017	},
1018};
1019
1020static struct clk_init_data clk_usb1_init = {
1021	.name = "usb1",
1022	.ops = &ios_ops,
1023	.parent_names = std_clk_usb_parents,
1024	.num_parents = ARRAY_SIZE(std_clk_usb_parents),
1025};
1026
1027static struct clk_std clk_usb1 = {
1028	.enable_bit = 17,
1029	.hw = {
1030		.init = &clk_usb1_init,
1031	},
1032};
1033