1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Copyright 2015 Vladimir Zapolskiy <vz@mleia.com>
4 */
5
6#include <linux/clk.h>
7#include <linux/clk-provider.h>
8#include <linux/io.h>
9#include <linux/of_address.h>
10#include <linux/regmap.h>
11
12#include <dt-bindings/clock/lpc32xx-clock.h>
13
14#undef pr_fmt
15#define pr_fmt(fmt) "%s: " fmt, __func__
16
17/* Common bitfield definitions for x397 PLL (lock), USB PLL and HCLK PLL */
18#define PLL_CTRL_ENABLE			BIT(16)
19#define PLL_CTRL_BYPASS			BIT(15)
20#define PLL_CTRL_DIRECT			BIT(14)
21#define PLL_CTRL_FEEDBACK		BIT(13)
22#define PLL_CTRL_POSTDIV		(BIT(12)|BIT(11))
23#define PLL_CTRL_PREDIV			(BIT(10)|BIT(9))
24#define PLL_CTRL_FEEDDIV		(0xFF << 1)
25#define PLL_CTRL_LOCK			BIT(0)
26
27/* Clock registers on System Control Block */
28#define LPC32XX_CLKPWR_DEBUG_CTRL	0x00
29#define LPC32XX_CLKPWR_USB_DIV		0x1C
30#define LPC32XX_CLKPWR_HCLKDIV_CTRL	0x40
31#define LPC32XX_CLKPWR_PWR_CTRL		0x44
32#define LPC32XX_CLKPWR_PLL397_CTRL	0x48
33#define LPC32XX_CLKPWR_OSC_CTRL		0x4C
34#define LPC32XX_CLKPWR_SYSCLK_CTRL	0x50
35#define LPC32XX_CLKPWR_LCDCLK_CTRL	0x54
36#define LPC32XX_CLKPWR_HCLKPLL_CTRL	0x58
37#define LPC32XX_CLKPWR_ADCCLK_CTRL1	0x60
38#define LPC32XX_CLKPWR_USB_CTRL		0x64
39#define LPC32XX_CLKPWR_SSP_CTRL		0x78
40#define LPC32XX_CLKPWR_I2S_CTRL		0x7C
41#define LPC32XX_CLKPWR_MS_CTRL		0x80
42#define LPC32XX_CLKPWR_MACCLK_CTRL	0x90
43#define LPC32XX_CLKPWR_TEST_CLK_CTRL	0xA4
44#define LPC32XX_CLKPWR_I2CCLK_CTRL	0xAC
45#define LPC32XX_CLKPWR_KEYCLK_CTRL	0xB0
46#define LPC32XX_CLKPWR_ADCCLK_CTRL	0xB4
47#define LPC32XX_CLKPWR_PWMCLK_CTRL	0xB8
48#define LPC32XX_CLKPWR_TIMCLK_CTRL	0xBC
49#define LPC32XX_CLKPWR_TIMCLK_CTRL1	0xC0
50#define LPC32XX_CLKPWR_SPI_CTRL		0xC4
51#define LPC32XX_CLKPWR_FLASHCLK_CTRL	0xC8
52#define LPC32XX_CLKPWR_UART3_CLK_CTRL	0xD0
53#define LPC32XX_CLKPWR_UART4_CLK_CTRL	0xD4
54#define LPC32XX_CLKPWR_UART5_CLK_CTRL	0xD8
55#define LPC32XX_CLKPWR_UART6_CLK_CTRL	0xDC
56#define LPC32XX_CLKPWR_IRDA_CLK_CTRL	0xE0
57#define LPC32XX_CLKPWR_UART_CLK_CTRL	0xE4
58#define LPC32XX_CLKPWR_DMA_CLK_CTRL	0xE8
59
60/* Clock registers on USB controller */
61#define LPC32XX_USB_CLK_CTRL		0xF4
62#define LPC32XX_USB_CLK_STS		0xF8
63
64static struct regmap_config lpc32xx_scb_regmap_config = {
65	.name = "scb",
66	.reg_bits = 32,
67	.val_bits = 32,
68	.reg_stride = 4,
69	.val_format_endian = REGMAP_ENDIAN_LITTLE,
70	.max_register = 0x114,
71	.fast_io = true,
72};
73
74static struct regmap *clk_regmap;
75static void __iomem *usb_clk_vbase;
76
77enum {
78	LPC32XX_USB_CLK_OTG = LPC32XX_USB_CLK_HOST + 1,
79	LPC32XX_USB_CLK_AHB,
80
81	LPC32XX_USB_CLK_MAX = LPC32XX_USB_CLK_AHB + 1,
82};
83
84enum {
85	/* Start from the last defined clock in dt bindings */
86	LPC32XX_CLK_ADC_DIV = LPC32XX_CLK_PERIPH + 1,
87	LPC32XX_CLK_ADC_RTC,
88	LPC32XX_CLK_TEST1,
89	LPC32XX_CLK_TEST2,
90
91	/* System clocks, PLL 397x and HCLK PLL clocks */
92	LPC32XX_CLK_OSC,
93	LPC32XX_CLK_SYS,
94	LPC32XX_CLK_PLL397X,
95	LPC32XX_CLK_HCLK_DIV_PERIPH,
96	LPC32XX_CLK_HCLK_DIV,
97	LPC32XX_CLK_HCLK,
98	LPC32XX_CLK_ARM,
99	LPC32XX_CLK_ARM_VFP,
100
101	/* USB clocks */
102	LPC32XX_CLK_USB_PLL,
103	LPC32XX_CLK_USB_DIV,
104	LPC32XX_CLK_USB,
105
106	/* Only one control PWR_CTRL[10] for both muxes */
107	LPC32XX_CLK_PERIPH_HCLK_MUX,
108	LPC32XX_CLK_PERIPH_ARM_MUX,
109
110	/* Only one control PWR_CTRL[2] for all three muxes */
111	LPC32XX_CLK_SYSCLK_PERIPH_MUX,
112	LPC32XX_CLK_SYSCLK_HCLK_MUX,
113	LPC32XX_CLK_SYSCLK_ARM_MUX,
114
115	/* Two clock sources external to the driver */
116	LPC32XX_CLK_XTAL_32K,
117	LPC32XX_CLK_XTAL,
118
119	/* Renumbered USB clocks, may have a parent from SCB table */
120	LPC32XX_CLK_USB_OFFSET,
121	LPC32XX_CLK_USB_I2C = LPC32XX_USB_CLK_I2C + LPC32XX_CLK_USB_OFFSET,
122	LPC32XX_CLK_USB_DEV = LPC32XX_USB_CLK_DEVICE + LPC32XX_CLK_USB_OFFSET,
123	LPC32XX_CLK_USB_HOST = LPC32XX_USB_CLK_HOST + LPC32XX_CLK_USB_OFFSET,
124	LPC32XX_CLK_USB_OTG = LPC32XX_USB_CLK_OTG + LPC32XX_CLK_USB_OFFSET,
125	LPC32XX_CLK_USB_AHB = LPC32XX_USB_CLK_AHB + LPC32XX_CLK_USB_OFFSET,
126
127	/* Stub for composite clocks */
128	LPC32XX_CLK__NULL,
129
130	/* Subclocks of composite clocks, clocks above are for CCF */
131	LPC32XX_CLK_PWM1_MUX,
132	LPC32XX_CLK_PWM1_DIV,
133	LPC32XX_CLK_PWM1_GATE,
134	LPC32XX_CLK_PWM2_MUX,
135	LPC32XX_CLK_PWM2_DIV,
136	LPC32XX_CLK_PWM2_GATE,
137	LPC32XX_CLK_UART3_MUX,
138	LPC32XX_CLK_UART3_DIV,
139	LPC32XX_CLK_UART3_GATE,
140	LPC32XX_CLK_UART4_MUX,
141	LPC32XX_CLK_UART4_DIV,
142	LPC32XX_CLK_UART4_GATE,
143	LPC32XX_CLK_UART5_MUX,
144	LPC32XX_CLK_UART5_DIV,
145	LPC32XX_CLK_UART5_GATE,
146	LPC32XX_CLK_UART6_MUX,
147	LPC32XX_CLK_UART6_DIV,
148	LPC32XX_CLK_UART6_GATE,
149	LPC32XX_CLK_TEST1_MUX,
150	LPC32XX_CLK_TEST1_GATE,
151	LPC32XX_CLK_TEST2_MUX,
152	LPC32XX_CLK_TEST2_GATE,
153	LPC32XX_CLK_USB_DIV_DIV,
154	LPC32XX_CLK_USB_DIV_GATE,
155	LPC32XX_CLK_SD_DIV,
156	LPC32XX_CLK_SD_GATE,
157	LPC32XX_CLK_LCD_DIV,
158	LPC32XX_CLK_LCD_GATE,
159
160	LPC32XX_CLK_HW_MAX,
161	LPC32XX_CLK_MAX = LPC32XX_CLK_SYSCLK_ARM_MUX + 1,
162	LPC32XX_CLK_CCF_MAX = LPC32XX_CLK_USB_AHB + 1,
163};
164
165static struct clk *clk[LPC32XX_CLK_MAX];
166static struct clk_onecell_data clk_data = {
167	.clks = clk,
168	.clk_num = LPC32XX_CLK_MAX,
169};
170
171static struct clk *usb_clk[LPC32XX_USB_CLK_MAX];
172static struct clk_onecell_data usb_clk_data = {
173	.clks = usb_clk,
174	.clk_num = LPC32XX_USB_CLK_MAX,
175};
176
177#define LPC32XX_CLK_PARENTS_MAX			5
178
179struct clk_proto_t {
180	const char *name;
181	const u8 parents[LPC32XX_CLK_PARENTS_MAX];
182	u8 num_parents;
183	unsigned long flags;
184};
185
186#define CLK_PREFIX(LITERAL)		LPC32XX_CLK_ ## LITERAL
187#define NUMARGS(...)	(sizeof((int[]){__VA_ARGS__})/sizeof(int))
188
189#define LPC32XX_CLK_DEFINE(_idx, _name, _flags, ...)		\
190	[CLK_PREFIX(_idx)] = {					\
191		.name = _name,					\
192		.flags = _flags,				\
193		.parents = { __VA_ARGS__ },			\
194		.num_parents = NUMARGS(__VA_ARGS__),		\
195	 }
196
197static const struct clk_proto_t clk_proto[LPC32XX_CLK_CCF_MAX] __initconst = {
198	LPC32XX_CLK_DEFINE(XTAL, "xtal", 0x0),
199	LPC32XX_CLK_DEFINE(XTAL_32K, "xtal_32k", 0x0),
200
201	LPC32XX_CLK_DEFINE(RTC, "rtc", 0x0, LPC32XX_CLK_XTAL_32K),
202	LPC32XX_CLK_DEFINE(OSC, "osc", CLK_IGNORE_UNUSED, LPC32XX_CLK_XTAL),
203	LPC32XX_CLK_DEFINE(SYS, "sys", CLK_IGNORE_UNUSED,
204		LPC32XX_CLK_OSC, LPC32XX_CLK_PLL397X),
205	LPC32XX_CLK_DEFINE(PLL397X, "pll_397x", CLK_IGNORE_UNUSED,
206		LPC32XX_CLK_RTC),
207	LPC32XX_CLK_DEFINE(HCLK_PLL, "hclk_pll", CLK_IGNORE_UNUSED,
208		LPC32XX_CLK_SYS),
209	LPC32XX_CLK_DEFINE(HCLK_DIV_PERIPH, "hclk_div_periph",
210		CLK_IGNORE_UNUSED, LPC32XX_CLK_HCLK_PLL),
211	LPC32XX_CLK_DEFINE(HCLK_DIV, "hclk_div", CLK_IGNORE_UNUSED,
212		LPC32XX_CLK_HCLK_PLL),
213	LPC32XX_CLK_DEFINE(HCLK, "hclk", CLK_IGNORE_UNUSED,
214		LPC32XX_CLK_PERIPH_HCLK_MUX),
215	LPC32XX_CLK_DEFINE(PERIPH, "pclk", CLK_IGNORE_UNUSED,
216		LPC32XX_CLK_SYSCLK_PERIPH_MUX),
217	LPC32XX_CLK_DEFINE(ARM, "arm", CLK_IGNORE_UNUSED,
218		LPC32XX_CLK_PERIPH_ARM_MUX),
219
220	LPC32XX_CLK_DEFINE(PERIPH_HCLK_MUX, "periph_hclk_mux",
221		CLK_IGNORE_UNUSED,
222		LPC32XX_CLK_SYSCLK_HCLK_MUX, LPC32XX_CLK_SYSCLK_PERIPH_MUX),
223	LPC32XX_CLK_DEFINE(PERIPH_ARM_MUX, "periph_arm_mux", CLK_IGNORE_UNUSED,
224		LPC32XX_CLK_SYSCLK_ARM_MUX, LPC32XX_CLK_SYSCLK_PERIPH_MUX),
225	LPC32XX_CLK_DEFINE(SYSCLK_PERIPH_MUX, "sysclk_periph_mux",
226		CLK_IGNORE_UNUSED,
227		LPC32XX_CLK_SYS, LPC32XX_CLK_HCLK_DIV_PERIPH),
228	LPC32XX_CLK_DEFINE(SYSCLK_HCLK_MUX, "sysclk_hclk_mux",
229		CLK_IGNORE_UNUSED,
230		LPC32XX_CLK_SYS, LPC32XX_CLK_HCLK_DIV),
231	LPC32XX_CLK_DEFINE(SYSCLK_ARM_MUX, "sysclk_arm_mux", CLK_IGNORE_UNUSED,
232		LPC32XX_CLK_SYS, LPC32XX_CLK_HCLK_PLL),
233
234	LPC32XX_CLK_DEFINE(ARM_VFP, "vfp9", CLK_IGNORE_UNUSED,
235		LPC32XX_CLK_ARM),
236	LPC32XX_CLK_DEFINE(USB_PLL, "usb_pll",
237		CLK_SET_RATE_GATE | CLK_SET_RATE_PARENT, LPC32XX_CLK_USB_DIV),
238	LPC32XX_CLK_DEFINE(USB_DIV, "usb_div", 0x0, LPC32XX_CLK_OSC),
239	LPC32XX_CLK_DEFINE(USB, "usb", 0x0, LPC32XX_CLK_USB_PLL),
240	LPC32XX_CLK_DEFINE(DMA, "dma", 0x0, LPC32XX_CLK_HCLK),
241	LPC32XX_CLK_DEFINE(MLC, "mlc", 0x0, LPC32XX_CLK_HCLK),
242	LPC32XX_CLK_DEFINE(SLC, "slc", 0x0, LPC32XX_CLK_HCLK),
243	LPC32XX_CLK_DEFINE(LCD, "lcd", 0x0, LPC32XX_CLK_HCLK),
244	LPC32XX_CLK_DEFINE(MAC, "mac", 0x0, LPC32XX_CLK_HCLK),
245	LPC32XX_CLK_DEFINE(SD, "sd", 0x0, LPC32XX_CLK_ARM),
246	LPC32XX_CLK_DEFINE(DDRAM, "ddram", CLK_GET_RATE_NOCACHE,
247		LPC32XX_CLK_SYSCLK_ARM_MUX),
248	LPC32XX_CLK_DEFINE(SSP0, "ssp0", 0x0, LPC32XX_CLK_HCLK),
249	LPC32XX_CLK_DEFINE(SSP1, "ssp1", 0x0, LPC32XX_CLK_HCLK),
250
251	/*
252	 * CLK_GET_RATE_NOCACHE is needed, if UART clock is disabled, its
253	 * divider register does not contain information about selected rate.
254	 */
255	LPC32XX_CLK_DEFINE(UART3, "uart3", CLK_GET_RATE_NOCACHE,
256		LPC32XX_CLK_PERIPH, LPC32XX_CLK_HCLK),
257	LPC32XX_CLK_DEFINE(UART4, "uart4", CLK_GET_RATE_NOCACHE,
258		LPC32XX_CLK_PERIPH, LPC32XX_CLK_HCLK),
259	LPC32XX_CLK_DEFINE(UART5, "uart5", CLK_GET_RATE_NOCACHE,
260		LPC32XX_CLK_PERIPH, LPC32XX_CLK_HCLK),
261	LPC32XX_CLK_DEFINE(UART6, "uart6", CLK_GET_RATE_NOCACHE,
262		LPC32XX_CLK_PERIPH, LPC32XX_CLK_HCLK),
263	LPC32XX_CLK_DEFINE(IRDA, "irda", 0x0, LPC32XX_CLK_PERIPH),
264	LPC32XX_CLK_DEFINE(I2C1, "i2c1", 0x0, LPC32XX_CLK_HCLK),
265	LPC32XX_CLK_DEFINE(I2C2, "i2c2", 0x0, LPC32XX_CLK_HCLK),
266	LPC32XX_CLK_DEFINE(TIMER0, "timer0", 0x0, LPC32XX_CLK_PERIPH),
267	LPC32XX_CLK_DEFINE(TIMER1, "timer1", 0x0, LPC32XX_CLK_PERIPH),
268	LPC32XX_CLK_DEFINE(TIMER2, "timer2", 0x0, LPC32XX_CLK_PERIPH),
269	LPC32XX_CLK_DEFINE(TIMER3, "timer3", 0x0, LPC32XX_CLK_PERIPH),
270	LPC32XX_CLK_DEFINE(TIMER4, "timer4", 0x0, LPC32XX_CLK_PERIPH),
271	LPC32XX_CLK_DEFINE(TIMER5, "timer5", 0x0, LPC32XX_CLK_PERIPH),
272	LPC32XX_CLK_DEFINE(WDOG, "watchdog", 0x0, LPC32XX_CLK_PERIPH),
273	LPC32XX_CLK_DEFINE(I2S0, "i2s0", 0x0, LPC32XX_CLK_HCLK),
274	LPC32XX_CLK_DEFINE(I2S1, "i2s1", 0x0, LPC32XX_CLK_HCLK),
275	LPC32XX_CLK_DEFINE(SPI1, "spi1", 0x0, LPC32XX_CLK_HCLK),
276	LPC32XX_CLK_DEFINE(SPI2, "spi2", 0x0, LPC32XX_CLK_HCLK),
277	LPC32XX_CLK_DEFINE(MCPWM, "mcpwm", 0x0, LPC32XX_CLK_HCLK),
278	LPC32XX_CLK_DEFINE(HSTIMER, "hstimer", 0x0, LPC32XX_CLK_PERIPH),
279	LPC32XX_CLK_DEFINE(KEY, "key", 0x0, LPC32XX_CLK_RTC),
280	LPC32XX_CLK_DEFINE(PWM1, "pwm1", 0x0,
281		LPC32XX_CLK_RTC, LPC32XX_CLK_PERIPH),
282	LPC32XX_CLK_DEFINE(PWM2, "pwm2", 0x0,
283		LPC32XX_CLK_RTC, LPC32XX_CLK_PERIPH),
284	LPC32XX_CLK_DEFINE(ADC, "adc", 0x0,
285		LPC32XX_CLK_ADC_RTC, LPC32XX_CLK_ADC_DIV),
286	LPC32XX_CLK_DEFINE(ADC_DIV, "adc_div", 0x0, LPC32XX_CLK_PERIPH),
287	LPC32XX_CLK_DEFINE(ADC_RTC, "adc_rtc", 0x0, LPC32XX_CLK_RTC),
288	LPC32XX_CLK_DEFINE(TEST1, "test1", 0x0,
289		LPC32XX_CLK_PERIPH, LPC32XX_CLK_RTC, LPC32XX_CLK_OSC),
290	LPC32XX_CLK_DEFINE(TEST2, "test2", 0x0,
291		LPC32XX_CLK_HCLK, LPC32XX_CLK_PERIPH, LPC32XX_CLK_USB,
292		LPC32XX_CLK_OSC, LPC32XX_CLK_PLL397X),
293
294	/* USB controller clocks */
295	LPC32XX_CLK_DEFINE(USB_AHB, "usb_ahb", 0x0, LPC32XX_CLK_USB),
296	LPC32XX_CLK_DEFINE(USB_OTG, "usb_otg", 0x0, LPC32XX_CLK_USB_AHB),
297	LPC32XX_CLK_DEFINE(USB_I2C, "usb_i2c", 0x0, LPC32XX_CLK_USB_AHB),
298	LPC32XX_CLK_DEFINE(USB_DEV, "usb_dev", 0x0, LPC32XX_CLK_USB_OTG),
299	LPC32XX_CLK_DEFINE(USB_HOST, "usb_host", 0x0, LPC32XX_CLK_USB_OTG),
300};
301
302struct lpc32xx_clk {
303	struct clk_hw hw;
304	u32 reg;
305	u32 enable;
306	u32 enable_mask;
307	u32 disable;
308	u32 disable_mask;
309	u32 busy;
310	u32 busy_mask;
311};
312
313enum clk_pll_mode {
314	PLL_UNKNOWN,
315	PLL_DIRECT,
316	PLL_BYPASS,
317	PLL_DIRECT_BYPASS,
318	PLL_INTEGER,
319	PLL_NON_INTEGER,
320};
321
322struct lpc32xx_pll_clk {
323	struct clk_hw hw;
324	u32 reg;
325	u32 enable;
326	unsigned long m_div;
327	unsigned long n_div;
328	unsigned long p_div;
329	enum clk_pll_mode mode;
330};
331
332struct lpc32xx_usb_clk {
333	struct clk_hw hw;
334	u32 ctrl_enable;
335	u32 ctrl_disable;
336	u32 ctrl_mask;
337	u32 enable;
338	u32 busy;
339};
340
341struct lpc32xx_clk_mux {
342	struct clk_hw	hw;
343	u32		reg;
344	u32		mask;
345	u8		shift;
346	u32		*table;
347	u8		flags;
348};
349
350struct lpc32xx_clk_div {
351	struct clk_hw	hw;
352	u32		reg;
353	u8		shift;
354	u8		width;
355	const struct clk_div_table	*table;
356	u8		flags;
357};
358
359struct lpc32xx_clk_gate {
360	struct clk_hw	hw;
361	u32		reg;
362	u8		bit_idx;
363	u8		flags;
364};
365
366#define to_lpc32xx_clk(_hw)	container_of(_hw, struct lpc32xx_clk, hw)
367#define to_lpc32xx_pll_clk(_hw)	container_of(_hw, struct lpc32xx_pll_clk, hw)
368#define to_lpc32xx_usb_clk(_hw)	container_of(_hw, struct lpc32xx_usb_clk, hw)
369#define to_lpc32xx_mux(_hw)	container_of(_hw, struct lpc32xx_clk_mux, hw)
370#define to_lpc32xx_div(_hw)	container_of(_hw, struct lpc32xx_clk_div, hw)
371#define to_lpc32xx_gate(_hw)	container_of(_hw, struct lpc32xx_clk_gate, hw)
372
373static inline bool pll_is_valid(u64 val0, u64 val1, u64 min, u64 max)
374{
375	return (val0 >= (val1 * min) && val0 <= (val1 * max));
376}
377
378static inline u32 lpc32xx_usb_clk_read(struct lpc32xx_usb_clk *clk)
379{
380	return readl(usb_clk_vbase + LPC32XX_USB_CLK_STS);
381}
382
383static inline void lpc32xx_usb_clk_write(struct lpc32xx_usb_clk *clk, u32 val)
384{
385	writel(val, usb_clk_vbase + LPC32XX_USB_CLK_CTRL);
386}
387
388static int clk_mask_enable(struct clk_hw *hw)
389{
390	struct lpc32xx_clk *clk = to_lpc32xx_clk(hw);
391	u32 val;
392
393	regmap_read(clk_regmap, clk->reg, &val);
394
395	if (clk->busy_mask && (val & clk->busy_mask) == clk->busy)
396		return -EBUSY;
397
398	return regmap_update_bits(clk_regmap, clk->reg,
399				  clk->enable_mask, clk->enable);
400}
401
402static void clk_mask_disable(struct clk_hw *hw)
403{
404	struct lpc32xx_clk *clk = to_lpc32xx_clk(hw);
405
406	regmap_update_bits(clk_regmap, clk->reg,
407			   clk->disable_mask, clk->disable);
408}
409
410static int clk_mask_is_enabled(struct clk_hw *hw)
411{
412	struct lpc32xx_clk *clk = to_lpc32xx_clk(hw);
413	u32 val;
414
415	regmap_read(clk_regmap, clk->reg, &val);
416
417	return ((val & clk->enable_mask) == clk->enable);
418}
419
420static const struct clk_ops clk_mask_ops = {
421	.enable = clk_mask_enable,
422	.disable = clk_mask_disable,
423	.is_enabled = clk_mask_is_enabled,
424};
425
426static int clk_pll_enable(struct clk_hw *hw)
427{
428	struct lpc32xx_pll_clk *clk = to_lpc32xx_pll_clk(hw);
429	u32 val, count;
430
431	regmap_update_bits(clk_regmap, clk->reg, clk->enable, clk->enable);
432
433	for (count = 0; count < 1000; count++) {
434		regmap_read(clk_regmap, clk->reg, &val);
435		if (val & PLL_CTRL_LOCK)
436			break;
437	}
438
439	if (val & PLL_CTRL_LOCK)
440		return 0;
441
442	return -ETIMEDOUT;
443}
444
445static void clk_pll_disable(struct clk_hw *hw)
446{
447	struct lpc32xx_pll_clk *clk = to_lpc32xx_pll_clk(hw);
448
449	regmap_update_bits(clk_regmap, clk->reg, clk->enable, 0x0);
450}
451
452static int clk_pll_is_enabled(struct clk_hw *hw)
453{
454	struct lpc32xx_pll_clk *clk = to_lpc32xx_pll_clk(hw);
455	u32 val;
456
457	regmap_read(clk_regmap, clk->reg, &val);
458
459	val &= clk->enable | PLL_CTRL_LOCK;
460	if (val == (clk->enable | PLL_CTRL_LOCK))
461		return 1;
462
463	return 0;
464}
465
466static unsigned long clk_pll_397x_recalc_rate(struct clk_hw *hw,
467					      unsigned long parent_rate)
468{
469	return parent_rate * 397;
470}
471
472static unsigned long clk_pll_recalc_rate(struct clk_hw *hw,
473					 unsigned long parent_rate)
474{
475	struct lpc32xx_pll_clk *clk = to_lpc32xx_pll_clk(hw);
476	bool is_direct, is_bypass, is_feedback;
477	unsigned long rate, cco_rate, ref_rate;
478	u32 val;
479
480	regmap_read(clk_regmap, clk->reg, &val);
481	is_direct = val & PLL_CTRL_DIRECT;
482	is_bypass = val & PLL_CTRL_BYPASS;
483	is_feedback = val & PLL_CTRL_FEEDBACK;
484
485	clk->m_div = ((val & PLL_CTRL_FEEDDIV) >> 1) + 1;
486	clk->n_div = ((val & PLL_CTRL_PREDIV) >> 9) + 1;
487	clk->p_div = ((val & PLL_CTRL_POSTDIV) >> 11) + 1;
488
489	if (is_direct && is_bypass) {
490		clk->p_div = 0;
491		clk->mode = PLL_DIRECT_BYPASS;
492		return parent_rate;
493	}
494	if (is_bypass) {
495		clk->mode = PLL_BYPASS;
496		return parent_rate / (1 << clk->p_div);
497	}
498	if (is_direct) {
499		clk->p_div = 0;
500		clk->mode = PLL_DIRECT;
501	}
502
503	ref_rate = parent_rate / clk->n_div;
504	rate = cco_rate = ref_rate * clk->m_div;
505
506	if (!is_direct) {
507		if (is_feedback) {
508			cco_rate *= (1 << clk->p_div);
509			clk->mode = PLL_INTEGER;
510		} else {
511			rate /= (1 << clk->p_div);
512			clk->mode = PLL_NON_INTEGER;
513		}
514	}
515
516	pr_debug("%s: %lu: 0x%x: %d/%d/%d, %lu/%lu/%d => %lu\n",
517		 clk_hw_get_name(hw),
518		 parent_rate, val, is_direct, is_bypass, is_feedback,
519		 clk->n_div, clk->m_div, (1 << clk->p_div), rate);
520
521	if (clk_pll_is_enabled(hw) &&
522	    !(pll_is_valid(parent_rate, 1, 1000000, 20000000)
523	      && pll_is_valid(cco_rate, 1, 156000000, 320000000)
524	      && pll_is_valid(ref_rate, 1, 1000000, 27000000)))
525		pr_err("%s: PLL clocks are not in valid ranges: %lu/%lu/%lu\n",
526		       clk_hw_get_name(hw),
527		       parent_rate, cco_rate, ref_rate);
528
529	return rate;
530}
531
532static int clk_pll_set_rate(struct clk_hw *hw, unsigned long rate,
533			    unsigned long parent_rate)
534{
535	struct lpc32xx_pll_clk *clk = to_lpc32xx_pll_clk(hw);
536	u32 val;
537	unsigned long new_rate;
538
539	/* Validate PLL clock parameters computed on round rate stage */
540	switch (clk->mode) {
541	case PLL_DIRECT:
542		val = PLL_CTRL_DIRECT;
543		val |= (clk->m_div - 1) << 1;
544		val |= (clk->n_div - 1) << 9;
545		new_rate = (parent_rate * clk->m_div) / clk->n_div;
546		break;
547	case PLL_BYPASS:
548		val = PLL_CTRL_BYPASS;
549		val |= (clk->p_div - 1) << 11;
550		new_rate = parent_rate / (1 << (clk->p_div));
551		break;
552	case PLL_DIRECT_BYPASS:
553		val = PLL_CTRL_DIRECT | PLL_CTRL_BYPASS;
554		new_rate = parent_rate;
555		break;
556	case PLL_INTEGER:
557		val = PLL_CTRL_FEEDBACK;
558		val |= (clk->m_div - 1) << 1;
559		val |= (clk->n_div - 1) << 9;
560		val |= (clk->p_div - 1) << 11;
561		new_rate = (parent_rate * clk->m_div) / clk->n_div;
562		break;
563	case PLL_NON_INTEGER:
564		val = 0x0;
565		val |= (clk->m_div - 1) << 1;
566		val |= (clk->n_div - 1) << 9;
567		val |= (clk->p_div - 1) << 11;
568		new_rate = (parent_rate * clk->m_div) /
569				(clk->n_div * (1 << clk->p_div));
570		break;
571	default:
572		return -EINVAL;
573	}
574
575	/* Sanity check that round rate is equal to the requested one */
576	if (new_rate != rate)
577		return -EINVAL;
578
579	return regmap_update_bits(clk_regmap, clk->reg, 0x1FFFF, val);
580}
581
582static long clk_hclk_pll_round_rate(struct clk_hw *hw, unsigned long rate,
583				    unsigned long *parent_rate)
584{
585	struct lpc32xx_pll_clk *clk = to_lpc32xx_pll_clk(hw);
586	u64 m_i, o = rate, i = *parent_rate, d = (u64)rate << 6;
587	u64 m = 0, n = 0, p = 0;
588	int p_i, n_i;
589
590	pr_debug("%s: %lu/%lu\n", clk_hw_get_name(hw), *parent_rate, rate);
591
592	if (rate > 266500000)
593		return -EINVAL;
594
595	/* Have to check all 20 possibilities to find the minimal M */
596	for (p_i = 4; p_i >= 0; p_i--) {
597		for (n_i = 4; n_i > 0; n_i--) {
598			m_i = div64_u64(o * n_i * (1 << p_i), i);
599
600			/* Check for valid PLL parameter constraints */
601			if (!(m_i && m_i <= 256
602			      && pll_is_valid(i, n_i, 1000000, 27000000)
603			      && pll_is_valid(i * m_i * (1 << p_i), n_i,
604					      156000000, 320000000)))
605				continue;
606
607			/* Store some intermediate valid parameters */
608			if (o * n_i * (1 << p_i) - i * m_i <= d) {
609				m = m_i;
610				n = n_i;
611				p = p_i;
612				d = o * n_i * (1 << p_i) - i * m_i;
613			}
614		}
615	}
616
617	if (d == (u64)rate << 6) {
618		pr_err("%s: %lu: no valid PLL parameters are found\n",
619		       clk_hw_get_name(hw), rate);
620		return -EINVAL;
621	}
622
623	clk->m_div = m;
624	clk->n_div = n;
625	clk->p_div = p;
626
627	/* Set only direct or non-integer mode of PLL */
628	if (!p)
629		clk->mode = PLL_DIRECT;
630	else
631		clk->mode = PLL_NON_INTEGER;
632
633	o = div64_u64(i * m, n * (1 << p));
634
635	if (!d)
636		pr_debug("%s: %lu: found exact match: %llu/%llu/%llu\n",
637			 clk_hw_get_name(hw), rate, m, n, p);
638	else
639		pr_debug("%s: %lu: found closest: %llu/%llu/%llu - %llu\n",
640			 clk_hw_get_name(hw), rate, m, n, p, o);
641
642	return o;
643}
644
645static long clk_usb_pll_round_rate(struct clk_hw *hw, unsigned long rate,
646				   unsigned long *parent_rate)
647{
648	struct lpc32xx_pll_clk *clk = to_lpc32xx_pll_clk(hw);
649	struct clk_hw *usb_div_hw, *osc_hw;
650	u64 d_i, n_i, m, o;
651
652	pr_debug("%s: %lu/%lu\n", clk_hw_get_name(hw), *parent_rate, rate);
653
654	/*
655	 * The only supported USB clock is 48MHz, with PLL internal constraints
656	 * on Fclkin, Fcco and Fref this implies that Fcco must be 192MHz
657	 * and post-divider must be 4, this slightly simplifies calculation of
658	 * USB divider, USB PLL N and M parameters.
659	 */
660	if (rate != 48000000)
661		return -EINVAL;
662
663	/* USB divider clock */
664	usb_div_hw = clk_hw_get_parent_by_index(hw, 0);
665	if (!usb_div_hw)
666		return -EINVAL;
667
668	/* Main oscillator clock */
669	osc_hw = clk_hw_get_parent_by_index(usb_div_hw, 0);
670	if (!osc_hw)
671		return -EINVAL;
672	o = clk_hw_get_rate(osc_hw);	/* must be in range 1..20 MHz */
673
674	/* Check if valid USB divider and USB PLL parameters exists */
675	for (d_i = 16; d_i >= 1; d_i--) {
676		for (n_i = 1; n_i <= 4; n_i++) {
677			m = div64_u64(192000000 * d_i * n_i, o);
678			if (!(m && m <= 256
679			      && m * o == 192000000 * d_i * n_i
680			      && pll_is_valid(o, d_i, 1000000, 20000000)
681			      && pll_is_valid(o, d_i * n_i, 1000000, 27000000)))
682				continue;
683
684			clk->n_div = n_i;
685			clk->m_div = m;
686			clk->p_div = 2;
687			clk->mode = PLL_NON_INTEGER;
688			*parent_rate = div64_u64(o, d_i);
689
690			return rate;
691		}
692	}
693
694	return -EINVAL;
695}
696
697#define LPC32XX_DEFINE_PLL_OPS(_name, _rc, _sr, _rr)			\
698	static const struct clk_ops clk_ ##_name ## _ops = {		\
699		.enable = clk_pll_enable,				\
700		.disable = clk_pll_disable,				\
701		.is_enabled = clk_pll_is_enabled,			\
702		.recalc_rate = _rc,					\
703		.set_rate = _sr,					\
704		.round_rate = _rr,					\
705	}
706
707LPC32XX_DEFINE_PLL_OPS(pll_397x, clk_pll_397x_recalc_rate, NULL, NULL);
708LPC32XX_DEFINE_PLL_OPS(hclk_pll, clk_pll_recalc_rate,
709		       clk_pll_set_rate, clk_hclk_pll_round_rate);
710LPC32XX_DEFINE_PLL_OPS(usb_pll,  clk_pll_recalc_rate,
711		       clk_pll_set_rate, clk_usb_pll_round_rate);
712
713static int clk_ddram_is_enabled(struct clk_hw *hw)
714{
715	struct lpc32xx_clk *clk = to_lpc32xx_clk(hw);
716	u32 val;
717
718	regmap_read(clk_regmap, clk->reg, &val);
719	val &= clk->enable_mask | clk->busy_mask;
720
721	return (val == (BIT(7) | BIT(0)) ||
722		val == (BIT(8) | BIT(1)));
723}
724
725static int clk_ddram_enable(struct clk_hw *hw)
726{
727	struct lpc32xx_clk *clk = to_lpc32xx_clk(hw);
728	u32 val, hclk_div;
729
730	regmap_read(clk_regmap, clk->reg, &val);
731	hclk_div = val & clk->busy_mask;
732
733	/*
734	 * DDRAM clock must be 2 times higher than HCLK,
735	 * this implies DDRAM clock can not be enabled,
736	 * if HCLK clock rate is equal to ARM clock rate
737	 */
738	if (hclk_div == 0x0 || hclk_div == (BIT(1) | BIT(0)))
739		return -EINVAL;
740
741	return regmap_update_bits(clk_regmap, clk->reg,
742				  clk->enable_mask, hclk_div << 7);
743}
744
745static unsigned long clk_ddram_recalc_rate(struct clk_hw *hw,
746					   unsigned long parent_rate)
747{
748	struct lpc32xx_clk *clk = to_lpc32xx_clk(hw);
749	u32 val;
750
751	if (!clk_ddram_is_enabled(hw))
752		return 0;
753
754	regmap_read(clk_regmap, clk->reg, &val);
755	val &= clk->enable_mask;
756
757	return parent_rate / (val >> 7);
758}
759
760static const struct clk_ops clk_ddram_ops = {
761	.enable = clk_ddram_enable,
762	.disable = clk_mask_disable,
763	.is_enabled = clk_ddram_is_enabled,
764	.recalc_rate = clk_ddram_recalc_rate,
765};
766
767static unsigned long lpc32xx_clk_uart_recalc_rate(struct clk_hw *hw,
768						  unsigned long parent_rate)
769{
770	struct lpc32xx_clk *clk = to_lpc32xx_clk(hw);
771	u32 val, x, y;
772
773	regmap_read(clk_regmap, clk->reg, &val);
774	x = (val & 0xFF00) >> 8;
775	y = val & 0xFF;
776
777	if (x && y)
778		return (parent_rate * x) / y;
779	else
780		return 0;
781}
782
783static const struct clk_ops lpc32xx_uart_div_ops = {
784	.recalc_rate = lpc32xx_clk_uart_recalc_rate,
785};
786
787static const struct clk_div_table clk_hclk_div_table[] = {
788	{ .val = 0, .div = 1 },
789	{ .val = 1, .div = 2 },
790	{ .val = 2, .div = 4 },
791	{ },
792};
793
794static u32 test1_mux_table[] = { 0, 1, 2, };
795static u32 test2_mux_table[] = { 0, 1, 2, 5, 7, };
796
797static int clk_usb_enable(struct clk_hw *hw)
798{
799	struct lpc32xx_usb_clk *clk = to_lpc32xx_usb_clk(hw);
800	u32 val, ctrl_val, count;
801
802	pr_debug("%s: 0x%x\n", clk_hw_get_name(hw), clk->enable);
803
804	if (clk->ctrl_mask) {
805		regmap_read(clk_regmap, LPC32XX_CLKPWR_USB_CTRL, &ctrl_val);
806		regmap_update_bits(clk_regmap, LPC32XX_CLKPWR_USB_CTRL,
807				   clk->ctrl_mask, clk->ctrl_enable);
808	}
809
810	val = lpc32xx_usb_clk_read(clk);
811	if (clk->busy && (val & clk->busy) == clk->busy) {
812		if (clk->ctrl_mask)
813			regmap_write(clk_regmap, LPC32XX_CLKPWR_USB_CTRL,
814				     ctrl_val);
815		return -EBUSY;
816	}
817
818	val |= clk->enable;
819	lpc32xx_usb_clk_write(clk, val);
820
821	for (count = 0; count < 1000; count++) {
822		val = lpc32xx_usb_clk_read(clk);
823		if ((val & clk->enable) == clk->enable)
824			break;
825	}
826
827	if ((val & clk->enable) == clk->enable)
828		return 0;
829
830	if (clk->ctrl_mask)
831		regmap_write(clk_regmap, LPC32XX_CLKPWR_USB_CTRL, ctrl_val);
832
833	return -ETIMEDOUT;
834}
835
836static void clk_usb_disable(struct clk_hw *hw)
837{
838	struct lpc32xx_usb_clk *clk = to_lpc32xx_usb_clk(hw);
839	u32 val = lpc32xx_usb_clk_read(clk);
840
841	val &= ~clk->enable;
842	lpc32xx_usb_clk_write(clk, val);
843
844	if (clk->ctrl_mask)
845		regmap_update_bits(clk_regmap, LPC32XX_CLKPWR_USB_CTRL,
846				   clk->ctrl_mask, clk->ctrl_disable);
847}
848
849static int clk_usb_is_enabled(struct clk_hw *hw)
850{
851	struct lpc32xx_usb_clk *clk = to_lpc32xx_usb_clk(hw);
852	u32 ctrl_val, val;
853
854	if (clk->ctrl_mask) {
855		regmap_read(clk_regmap, LPC32XX_CLKPWR_USB_CTRL, &ctrl_val);
856		if ((ctrl_val & clk->ctrl_mask) != clk->ctrl_enable)
857			return 0;
858	}
859
860	val = lpc32xx_usb_clk_read(clk);
861
862	return ((val & clk->enable) == clk->enable);
863}
864
865static unsigned long clk_usb_i2c_recalc_rate(struct clk_hw *hw,
866					     unsigned long parent_rate)
867{
868	return clk_get_rate(clk[LPC32XX_CLK_PERIPH]);
869}
870
871static const struct clk_ops clk_usb_ops = {
872	.enable = clk_usb_enable,
873	.disable = clk_usb_disable,
874	.is_enabled = clk_usb_is_enabled,
875};
876
877static const struct clk_ops clk_usb_i2c_ops = {
878	.enable = clk_usb_enable,
879	.disable = clk_usb_disable,
880	.is_enabled = clk_usb_is_enabled,
881	.recalc_rate = clk_usb_i2c_recalc_rate,
882};
883
884static int lpc32xx_clk_gate_enable(struct clk_hw *hw)
885{
886	struct lpc32xx_clk_gate *clk = to_lpc32xx_gate(hw);
887	u32 mask = BIT(clk->bit_idx);
888	u32 val = (clk->flags & CLK_GATE_SET_TO_DISABLE ? 0x0 : mask);
889
890	return regmap_update_bits(clk_regmap, clk->reg, mask, val);
891}
892
893static void lpc32xx_clk_gate_disable(struct clk_hw *hw)
894{
895	struct lpc32xx_clk_gate *clk = to_lpc32xx_gate(hw);
896	u32 mask = BIT(clk->bit_idx);
897	u32 val = (clk->flags & CLK_GATE_SET_TO_DISABLE ? mask : 0x0);
898
899	regmap_update_bits(clk_regmap, clk->reg, mask, val);
900}
901
902static int lpc32xx_clk_gate_is_enabled(struct clk_hw *hw)
903{
904	struct lpc32xx_clk_gate *clk = to_lpc32xx_gate(hw);
905	u32 val;
906	bool is_set;
907
908	regmap_read(clk_regmap, clk->reg, &val);
909	is_set = val & BIT(clk->bit_idx);
910
911	return (clk->flags & CLK_GATE_SET_TO_DISABLE ? !is_set : is_set);
912}
913
914static const struct clk_ops lpc32xx_clk_gate_ops = {
915	.enable = lpc32xx_clk_gate_enable,
916	.disable = lpc32xx_clk_gate_disable,
917	.is_enabled = lpc32xx_clk_gate_is_enabled,
918};
919
920#define div_mask(width)	((1 << (width)) - 1)
921
922static unsigned int _get_table_div(const struct clk_div_table *table,
923							unsigned int val)
924{
925	const struct clk_div_table *clkt;
926
927	for (clkt = table; clkt->div; clkt++)
928		if (clkt->val == val)
929			return clkt->div;
930	return 0;
931}
932
933static unsigned int _get_div(const struct clk_div_table *table,
934			     unsigned int val, unsigned long flags, u8 width)
935{
936	if (flags & CLK_DIVIDER_ONE_BASED)
937		return val;
938	if (table)
939		return _get_table_div(table, val);
940	return val + 1;
941}
942
943static unsigned long clk_divider_recalc_rate(struct clk_hw *hw,
944		unsigned long parent_rate)
945{
946	struct lpc32xx_clk_div *divider = to_lpc32xx_div(hw);
947	unsigned int val;
948
949	regmap_read(clk_regmap, divider->reg, &val);
950
951	val >>= divider->shift;
952	val &= div_mask(divider->width);
953
954	return divider_recalc_rate(hw, parent_rate, val, divider->table,
955				   divider->flags, divider->width);
956}
957
958static long clk_divider_round_rate(struct clk_hw *hw, unsigned long rate,
959				unsigned long *prate)
960{
961	struct lpc32xx_clk_div *divider = to_lpc32xx_div(hw);
962	unsigned int bestdiv;
963
964	/* if read only, just return current value */
965	if (divider->flags & CLK_DIVIDER_READ_ONLY) {
966		regmap_read(clk_regmap, divider->reg, &bestdiv);
967		bestdiv >>= divider->shift;
968		bestdiv &= div_mask(divider->width);
969		bestdiv = _get_div(divider->table, bestdiv, divider->flags,
970			divider->width);
971		return DIV_ROUND_UP(*prate, bestdiv);
972	}
973
974	return divider_round_rate(hw, rate, prate, divider->table,
975				  divider->width, divider->flags);
976}
977
978static int clk_divider_set_rate(struct clk_hw *hw, unsigned long rate,
979				unsigned long parent_rate)
980{
981	struct lpc32xx_clk_div *divider = to_lpc32xx_div(hw);
982	unsigned int value;
983
984	value = divider_get_val(rate, parent_rate, divider->table,
985				divider->width, divider->flags);
986
987	return regmap_update_bits(clk_regmap, divider->reg,
988				  div_mask(divider->width) << divider->shift,
989				  value << divider->shift);
990}
991
992static const struct clk_ops lpc32xx_clk_divider_ops = {
993	.recalc_rate = clk_divider_recalc_rate,
994	.round_rate = clk_divider_round_rate,
995	.set_rate = clk_divider_set_rate,
996};
997
998static u8 clk_mux_get_parent(struct clk_hw *hw)
999{
1000	struct lpc32xx_clk_mux *mux = to_lpc32xx_mux(hw);
1001	u32 num_parents = clk_hw_get_num_parents(hw);
1002	u32 val;
1003
1004	regmap_read(clk_regmap, mux->reg, &val);
1005	val >>= mux->shift;
1006	val &= mux->mask;
1007
1008	if (mux->table) {
1009		u32 i;
1010
1011		for (i = 0; i < num_parents; i++)
1012			if (mux->table[i] == val)
1013				return i;
1014		return -EINVAL;
1015	}
1016
1017	if (val >= num_parents)
1018		return -EINVAL;
1019
1020	return val;
1021}
1022
1023static int clk_mux_set_parent(struct clk_hw *hw, u8 index)
1024{
1025	struct lpc32xx_clk_mux *mux = to_lpc32xx_mux(hw);
1026
1027	if (mux->table)
1028		index = mux->table[index];
1029
1030	return regmap_update_bits(clk_regmap, mux->reg,
1031			  mux->mask << mux->shift, index << mux->shift);
1032}
1033
1034static const struct clk_ops lpc32xx_clk_mux_ro_ops = {
1035	.get_parent = clk_mux_get_parent,
1036};
1037
1038static const struct clk_ops lpc32xx_clk_mux_ops = {
1039	.get_parent = clk_mux_get_parent,
1040	.set_parent = clk_mux_set_parent,
1041	.determine_rate = __clk_mux_determine_rate,
1042};
1043
1044enum lpc32xx_clk_type {
1045	CLK_FIXED,
1046	CLK_MUX,
1047	CLK_DIV,
1048	CLK_GATE,
1049	CLK_COMPOSITE,
1050	CLK_LPC32XX,
1051	CLK_LPC32XX_PLL,
1052	CLK_LPC32XX_USB,
1053};
1054
1055struct clk_hw_proto0 {
1056	const struct clk_ops *ops;
1057	union {
1058		struct lpc32xx_pll_clk pll;
1059		struct lpc32xx_clk clk;
1060		struct lpc32xx_usb_clk usb_clk;
1061		struct lpc32xx_clk_mux mux;
1062		struct lpc32xx_clk_div div;
1063		struct lpc32xx_clk_gate gate;
1064	};
1065};
1066
1067struct clk_hw_proto1 {
1068	struct clk_hw_proto0 *mux;
1069	struct clk_hw_proto0 *div;
1070	struct clk_hw_proto0 *gate;
1071};
1072
1073struct clk_hw_proto {
1074	enum lpc32xx_clk_type type;
1075
1076	union {
1077		struct clk_fixed_rate f;
1078		struct clk_hw_proto0 hw0;
1079		struct clk_hw_proto1 hw1;
1080	};
1081};
1082
1083#define LPC32XX_DEFINE_FIXED(_idx, _rate)			\
1084[CLK_PREFIX(_idx)] = {							\
1085	.type = CLK_FIXED,						\
1086	{								\
1087		.f = {							\
1088			.fixed_rate = (_rate),				\
1089		},							\
1090	},								\
1091}
1092
1093#define LPC32XX_DEFINE_PLL(_idx, _name, _reg, _enable)			\
1094[CLK_PREFIX(_idx)] = {							\
1095	.type = CLK_LPC32XX_PLL,					\
1096	{								\
1097		.hw0 = {						\
1098			.ops = &clk_ ##_name ## _ops,			\
1099			{						\
1100				.pll = {				\
1101					.reg = LPC32XX_CLKPWR_ ## _reg,	\
1102					.enable = (_enable),		\
1103				},					\
1104			},						\
1105		},							\
1106	},								\
1107}
1108
1109#define LPC32XX_DEFINE_MUX(_idx, _reg, _shift, _mask, _table, _flags)	\
1110[CLK_PREFIX(_idx)] = {							\
1111	.type = CLK_MUX,						\
1112	{								\
1113		.hw0 = {						\
1114			.ops = (_flags & CLK_MUX_READ_ONLY ?		\
1115				&lpc32xx_clk_mux_ro_ops :		\
1116				&lpc32xx_clk_mux_ops),			\
1117			{						\
1118				.mux = {				\
1119					.reg = LPC32XX_CLKPWR_ ## _reg,	\
1120					.mask = (_mask),		\
1121					.shift = (_shift),		\
1122					.table = (_table),		\
1123					.flags = (_flags),		\
1124				},					\
1125			},						\
1126		},							\
1127	},								\
1128}
1129
1130#define LPC32XX_DEFINE_DIV(_idx, _reg, _shift, _width, _table, _flags)	\
1131[CLK_PREFIX(_idx)] = {							\
1132	.type = CLK_DIV,						\
1133	{								\
1134		.hw0 = {						\
1135			.ops = &lpc32xx_clk_divider_ops,		\
1136			{						\
1137				.div = {				\
1138					.reg = LPC32XX_CLKPWR_ ## _reg,	\
1139					.shift = (_shift),		\
1140					.width = (_width),		\
1141					.table = (_table),		\
1142					.flags = (_flags),		\
1143				 },					\
1144			},						\
1145		 },							\
1146	},								\
1147}
1148
1149#define LPC32XX_DEFINE_GATE(_idx, _reg, _bit, _flags)			\
1150[CLK_PREFIX(_idx)] = {							\
1151	.type = CLK_GATE,						\
1152	{								\
1153		.hw0 = {						\
1154			.ops = &lpc32xx_clk_gate_ops,			\
1155			{						\
1156				.gate = {				\
1157					.reg = LPC32XX_CLKPWR_ ## _reg,	\
1158					.bit_idx = (_bit),		\
1159					.flags = (_flags),		\
1160				},					\
1161			},						\
1162		},							\
1163	},								\
1164}
1165
1166#define LPC32XX_DEFINE_CLK(_idx, _reg, _e, _em, _d, _dm, _b, _bm, _ops)	\
1167[CLK_PREFIX(_idx)] = {							\
1168	.type = CLK_LPC32XX,						\
1169	{								\
1170		.hw0 = {						\
1171			.ops = &(_ops),					\
1172			{						\
1173				.clk = {				\
1174					.reg = LPC32XX_CLKPWR_ ## _reg,	\
1175					.enable = (_e),			\
1176					.enable_mask = (_em),		\
1177					.disable = (_d),		\
1178					.disable_mask = (_dm),		\
1179					.busy = (_b),			\
1180					.busy_mask = (_bm),		\
1181				},					\
1182			},						\
1183		},							\
1184	},								\
1185}
1186
1187#define LPC32XX_DEFINE_USB(_idx, _ce, _cd, _cm, _e, _b, _ops)		\
1188[CLK_PREFIX(_idx)] = {							\
1189	.type = CLK_LPC32XX_USB,					\
1190	{								\
1191		.hw0 = {						\
1192			.ops = &(_ops),					\
1193			{						\
1194				.usb_clk = {				\
1195					.ctrl_enable = (_ce),		\
1196					.ctrl_disable = (_cd),		\
1197					.ctrl_mask = (_cm),		\
1198					.enable = (_e),			\
1199					.busy = (_b),			\
1200				}					\
1201			},						\
1202		}							\
1203	},								\
1204}
1205
1206#define LPC32XX_DEFINE_COMPOSITE(_idx, _mux, _div, _gate)		\
1207[CLK_PREFIX(_idx)] = {							\
1208	.type = CLK_COMPOSITE,						\
1209	{								\
1210		.hw1 = {						\
1211		.mux = (CLK_PREFIX(_mux) == LPC32XX_CLK__NULL ? NULL :	\
1212			&clk_hw_proto[CLK_PREFIX(_mux)].hw0),		\
1213		.div = (CLK_PREFIX(_div) == LPC32XX_CLK__NULL ? NULL :	\
1214			&clk_hw_proto[CLK_PREFIX(_div)].hw0),		\
1215		.gate = (CLK_PREFIX(_gate) == LPC32XX_CLK__NULL ? NULL :\
1216			 &clk_hw_proto[CLK_PREFIX(_gate)].hw0),		\
1217		},							\
1218	},								\
1219}
1220
1221static struct clk_hw_proto clk_hw_proto[LPC32XX_CLK_HW_MAX] = {
1222	LPC32XX_DEFINE_FIXED(RTC, 32768),
1223	LPC32XX_DEFINE_PLL(PLL397X, pll_397x, HCLKPLL_CTRL, BIT(1)),
1224	LPC32XX_DEFINE_PLL(HCLK_PLL, hclk_pll, HCLKPLL_CTRL, PLL_CTRL_ENABLE),
1225	LPC32XX_DEFINE_PLL(USB_PLL, usb_pll, USB_CTRL, PLL_CTRL_ENABLE),
1226	LPC32XX_DEFINE_GATE(OSC, OSC_CTRL, 0, CLK_GATE_SET_TO_DISABLE),
1227	LPC32XX_DEFINE_GATE(USB, USB_CTRL, 18, 0),
1228
1229	LPC32XX_DEFINE_DIV(HCLK_DIV_PERIPH, HCLKDIV_CTRL, 2, 5, NULL,
1230			   CLK_DIVIDER_READ_ONLY),
1231	LPC32XX_DEFINE_DIV(HCLK_DIV, HCLKDIV_CTRL, 0, 2, clk_hclk_div_table,
1232			   CLK_DIVIDER_READ_ONLY),
1233
1234	/* Register 3 read-only muxes with a single control PWR_CTRL[2] */
1235	LPC32XX_DEFINE_MUX(SYSCLK_PERIPH_MUX, PWR_CTRL, 2, 0x1, NULL,
1236			   CLK_MUX_READ_ONLY),
1237	LPC32XX_DEFINE_MUX(SYSCLK_HCLK_MUX, PWR_CTRL, 2, 0x1, NULL,
1238			   CLK_MUX_READ_ONLY),
1239	LPC32XX_DEFINE_MUX(SYSCLK_ARM_MUX, PWR_CTRL, 2, 0x1, NULL,
1240			   CLK_MUX_READ_ONLY),
1241	/* Register 2 read-only muxes with a single control PWR_CTRL[10] */
1242	LPC32XX_DEFINE_MUX(PERIPH_HCLK_MUX, PWR_CTRL, 10, 0x1, NULL,
1243			   CLK_MUX_READ_ONLY),
1244	LPC32XX_DEFINE_MUX(PERIPH_ARM_MUX, PWR_CTRL, 10, 0x1, NULL,
1245			   CLK_MUX_READ_ONLY),
1246
1247	/* 3 always on gates with a single control PWR_CTRL[0] same as OSC */
1248	LPC32XX_DEFINE_GATE(PERIPH, PWR_CTRL, 0, CLK_GATE_SET_TO_DISABLE),
1249	LPC32XX_DEFINE_GATE(HCLK, PWR_CTRL, 0, CLK_GATE_SET_TO_DISABLE),
1250	LPC32XX_DEFINE_GATE(ARM, PWR_CTRL, 0, CLK_GATE_SET_TO_DISABLE),
1251
1252	LPC32XX_DEFINE_GATE(ARM_VFP, DEBUG_CTRL, 4, 0),
1253	LPC32XX_DEFINE_GATE(DMA, DMA_CLK_CTRL, 0, 0),
1254	LPC32XX_DEFINE_CLK(DDRAM, HCLKDIV_CTRL, 0x0, BIT(8) | BIT(7),
1255		   0x0, BIT(8) | BIT(7), 0x0, BIT(1) | BIT(0), clk_ddram_ops),
1256
1257	LPC32XX_DEFINE_GATE(TIMER0, TIMCLK_CTRL1, 2, 0),
1258	LPC32XX_DEFINE_GATE(TIMER1, TIMCLK_CTRL1, 3, 0),
1259	LPC32XX_DEFINE_GATE(TIMER2, TIMCLK_CTRL1, 4, 0),
1260	LPC32XX_DEFINE_GATE(TIMER3, TIMCLK_CTRL1, 5, 0),
1261	LPC32XX_DEFINE_GATE(TIMER4, TIMCLK_CTRL1, 0, 0),
1262	LPC32XX_DEFINE_GATE(TIMER5, TIMCLK_CTRL1, 1, 0),
1263
1264	LPC32XX_DEFINE_GATE(SSP0, SSP_CTRL, 0, 0),
1265	LPC32XX_DEFINE_GATE(SSP1, SSP_CTRL, 1, 0),
1266	LPC32XX_DEFINE_GATE(SPI1, SPI_CTRL, 0, 0),
1267	LPC32XX_DEFINE_GATE(SPI2, SPI_CTRL, 4, 0),
1268	LPC32XX_DEFINE_GATE(I2S0, I2S_CTRL, 0, 0),
1269	LPC32XX_DEFINE_GATE(I2S1, I2S_CTRL, 1, 0),
1270	LPC32XX_DEFINE_GATE(I2C1, I2CCLK_CTRL, 0, 0),
1271	LPC32XX_DEFINE_GATE(I2C2, I2CCLK_CTRL, 1, 0),
1272	LPC32XX_DEFINE_GATE(WDOG, TIMCLK_CTRL, 0, 0),
1273	LPC32XX_DEFINE_GATE(HSTIMER, TIMCLK_CTRL, 1, 0),
1274
1275	LPC32XX_DEFINE_GATE(KEY, KEYCLK_CTRL, 0, 0),
1276	LPC32XX_DEFINE_GATE(MCPWM, TIMCLK_CTRL1, 6, 0),
1277
1278	LPC32XX_DEFINE_MUX(PWM1_MUX, PWMCLK_CTRL, 1, 0x1, NULL, 0),
1279	LPC32XX_DEFINE_DIV(PWM1_DIV, PWMCLK_CTRL, 4, 4, NULL,
1280			   CLK_DIVIDER_ONE_BASED),
1281	LPC32XX_DEFINE_GATE(PWM1_GATE, PWMCLK_CTRL, 0, 0),
1282	LPC32XX_DEFINE_COMPOSITE(PWM1, PWM1_MUX, PWM1_DIV, PWM1_GATE),
1283
1284	LPC32XX_DEFINE_MUX(PWM2_MUX, PWMCLK_CTRL, 3, 0x1, NULL, 0),
1285	LPC32XX_DEFINE_DIV(PWM2_DIV, PWMCLK_CTRL, 8, 4, NULL,
1286			   CLK_DIVIDER_ONE_BASED),
1287	LPC32XX_DEFINE_GATE(PWM2_GATE, PWMCLK_CTRL, 2, 0),
1288	LPC32XX_DEFINE_COMPOSITE(PWM2, PWM2_MUX, PWM2_DIV, PWM2_GATE),
1289
1290	LPC32XX_DEFINE_MUX(UART3_MUX, UART3_CLK_CTRL, 16, 0x1, NULL, 0),
1291	LPC32XX_DEFINE_CLK(UART3_DIV, UART3_CLK_CTRL,
1292			   0, 0, 0, 0, 0, 0, lpc32xx_uart_div_ops),
1293	LPC32XX_DEFINE_GATE(UART3_GATE, UART_CLK_CTRL, 0, 0),
1294	LPC32XX_DEFINE_COMPOSITE(UART3, UART3_MUX, UART3_DIV, UART3_GATE),
1295
1296	LPC32XX_DEFINE_MUX(UART4_MUX, UART4_CLK_CTRL, 16, 0x1, NULL, 0),
1297	LPC32XX_DEFINE_CLK(UART4_DIV, UART4_CLK_CTRL,
1298			   0, 0, 0, 0, 0, 0, lpc32xx_uart_div_ops),
1299	LPC32XX_DEFINE_GATE(UART4_GATE, UART_CLK_CTRL, 1, 0),
1300	LPC32XX_DEFINE_COMPOSITE(UART4, UART4_MUX, UART4_DIV, UART4_GATE),
1301
1302	LPC32XX_DEFINE_MUX(UART5_MUX, UART5_CLK_CTRL, 16, 0x1, NULL, 0),
1303	LPC32XX_DEFINE_CLK(UART5_DIV, UART5_CLK_CTRL,
1304			   0, 0, 0, 0, 0, 0, lpc32xx_uart_div_ops),
1305	LPC32XX_DEFINE_GATE(UART5_GATE, UART_CLK_CTRL, 2, 0),
1306	LPC32XX_DEFINE_COMPOSITE(UART5, UART5_MUX, UART5_DIV, UART5_GATE),
1307
1308	LPC32XX_DEFINE_MUX(UART6_MUX, UART6_CLK_CTRL, 16, 0x1, NULL, 0),
1309	LPC32XX_DEFINE_CLK(UART6_DIV, UART6_CLK_CTRL,
1310			   0, 0, 0, 0, 0, 0, lpc32xx_uart_div_ops),
1311	LPC32XX_DEFINE_GATE(UART6_GATE, UART_CLK_CTRL, 3, 0),
1312	LPC32XX_DEFINE_COMPOSITE(UART6, UART6_MUX, UART6_DIV, UART6_GATE),
1313
1314	LPC32XX_DEFINE_CLK(IRDA, IRDA_CLK_CTRL,
1315			   0, 0, 0, 0, 0, 0, lpc32xx_uart_div_ops),
1316
1317	LPC32XX_DEFINE_MUX(TEST1_MUX, TEST_CLK_CTRL, 5, 0x3,
1318			   test1_mux_table, 0),
1319	LPC32XX_DEFINE_GATE(TEST1_GATE, TEST_CLK_CTRL, 4, 0),
1320	LPC32XX_DEFINE_COMPOSITE(TEST1, TEST1_MUX, _NULL, TEST1_GATE),
1321
1322	LPC32XX_DEFINE_MUX(TEST2_MUX, TEST_CLK_CTRL, 1, 0x7,
1323			   test2_mux_table, 0),
1324	LPC32XX_DEFINE_GATE(TEST2_GATE, TEST_CLK_CTRL, 0, 0),
1325	LPC32XX_DEFINE_COMPOSITE(TEST2, TEST2_MUX, _NULL, TEST2_GATE),
1326
1327	LPC32XX_DEFINE_MUX(SYS, SYSCLK_CTRL, 0, 0x1, NULL, CLK_MUX_READ_ONLY),
1328
1329	LPC32XX_DEFINE_DIV(USB_DIV_DIV, USB_DIV, 0, 4, NULL, 0),
1330	LPC32XX_DEFINE_GATE(USB_DIV_GATE, USB_CTRL, 17, 0),
1331	LPC32XX_DEFINE_COMPOSITE(USB_DIV, _NULL, USB_DIV_DIV, USB_DIV_GATE),
1332
1333	LPC32XX_DEFINE_DIV(SD_DIV, MS_CTRL, 0, 4, NULL, CLK_DIVIDER_ONE_BASED),
1334	LPC32XX_DEFINE_CLK(SD_GATE, MS_CTRL, BIT(5) | BIT(9), BIT(5) | BIT(9),
1335			   0x0, BIT(5) | BIT(9), 0x0, 0x0, clk_mask_ops),
1336	LPC32XX_DEFINE_COMPOSITE(SD, _NULL, SD_DIV, SD_GATE),
1337
1338	LPC32XX_DEFINE_DIV(LCD_DIV, LCDCLK_CTRL, 0, 5, NULL, 0),
1339	LPC32XX_DEFINE_GATE(LCD_GATE, LCDCLK_CTRL, 5, 0),
1340	LPC32XX_DEFINE_COMPOSITE(LCD, _NULL, LCD_DIV, LCD_GATE),
1341
1342	LPC32XX_DEFINE_CLK(MAC, MACCLK_CTRL,
1343			   BIT(2) | BIT(1) | BIT(0), BIT(2) | BIT(1) | BIT(0),
1344			   BIT(2) | BIT(1) | BIT(0), BIT(2) | BIT(1) | BIT(0),
1345			   0x0, 0x0, clk_mask_ops),
1346	LPC32XX_DEFINE_CLK(SLC, FLASHCLK_CTRL,
1347			   BIT(2) | BIT(0), BIT(2) | BIT(0), 0x0,
1348			   BIT(0), BIT(1), BIT(2) | BIT(1), clk_mask_ops),
1349	LPC32XX_DEFINE_CLK(MLC, FLASHCLK_CTRL,
1350			   BIT(1), BIT(2) | BIT(1), 0x0, BIT(1),
1351			   BIT(2) | BIT(0), BIT(2) | BIT(0), clk_mask_ops),
1352	/*
1353	 * ADC/TS clock unfortunately cannot be registered as a composite one
1354	 * due to a different connection of gate, div and mux, e.g. gating it
1355	 * won't mean that the clock is off, if peripheral clock is its parent:
1356	 *
1357	 * rtc-->[gate]-->|     |
1358	 *                | mux |--> adc/ts
1359	 * pclk-->[div]-->|     |
1360	 *
1361	 * Constraints:
1362	 * ADC --- resulting clock must be <= 4.5 MHz
1363	 * TS  --- resulting clock must be <= 400 KHz
1364	 */
1365	LPC32XX_DEFINE_DIV(ADC_DIV, ADCCLK_CTRL1, 0, 8, NULL, 0),
1366	LPC32XX_DEFINE_GATE(ADC_RTC, ADCCLK_CTRL, 0, 0),
1367	LPC32XX_DEFINE_MUX(ADC, ADCCLK_CTRL1, 8, 0x1, NULL, 0),
1368
1369	/* USB controller clocks */
1370	LPC32XX_DEFINE_USB(USB_AHB,
1371			   BIT(24), 0x0, BIT(24), BIT(4), 0, clk_usb_ops),
1372	LPC32XX_DEFINE_USB(USB_OTG,
1373			   0x0, 0x0, 0x0, BIT(3), 0, clk_usb_ops),
1374	LPC32XX_DEFINE_USB(USB_I2C,
1375			   0x0, BIT(23), BIT(23), BIT(2), 0, clk_usb_i2c_ops),
1376	LPC32XX_DEFINE_USB(USB_DEV,
1377			   BIT(22), 0x0, BIT(22), BIT(1), BIT(0), clk_usb_ops),
1378	LPC32XX_DEFINE_USB(USB_HOST,
1379			   BIT(21), 0x0, BIT(21), BIT(0), BIT(1), clk_usb_ops),
1380};
1381
1382static struct clk * __init lpc32xx_clk_register(u32 id)
1383{
1384	const struct clk_proto_t *lpc32xx_clk = &clk_proto[id];
1385	struct clk_hw_proto *clk_hw = &clk_hw_proto[id];
1386	const char *parents[LPC32XX_CLK_PARENTS_MAX];
1387	struct clk *clk;
1388	unsigned int i;
1389
1390	for (i = 0; i < lpc32xx_clk->num_parents; i++)
1391		parents[i] = clk_proto[lpc32xx_clk->parents[i]].name;
1392
1393	pr_debug("%s: derived from '%s', clock type %d\n", lpc32xx_clk->name,
1394		 parents[0], clk_hw->type);
1395
1396	switch (clk_hw->type) {
1397	case CLK_LPC32XX:
1398	case CLK_LPC32XX_PLL:
1399	case CLK_LPC32XX_USB:
1400	case CLK_MUX:
1401	case CLK_DIV:
1402	case CLK_GATE:
1403	{
1404		struct clk_init_data clk_init = {
1405			.name = lpc32xx_clk->name,
1406			.parent_names = parents,
1407			.num_parents = lpc32xx_clk->num_parents,
1408			.flags = lpc32xx_clk->flags,
1409			.ops = clk_hw->hw0.ops,
1410		};
1411		struct clk_hw *hw;
1412
1413		if (clk_hw->type == CLK_LPC32XX)
1414			hw = &clk_hw->hw0.clk.hw;
1415		else if (clk_hw->type == CLK_LPC32XX_PLL)
1416			hw = &clk_hw->hw0.pll.hw;
1417		else if (clk_hw->type == CLK_LPC32XX_USB)
1418			hw = &clk_hw->hw0.usb_clk.hw;
1419		else if (clk_hw->type == CLK_MUX)
1420			hw = &clk_hw->hw0.mux.hw;
1421		else if (clk_hw->type == CLK_DIV)
1422			hw = &clk_hw->hw0.div.hw;
1423		else if (clk_hw->type == CLK_GATE)
1424			hw = &clk_hw->hw0.gate.hw;
1425		else
1426			return ERR_PTR(-EINVAL);
1427
1428		hw->init = &clk_init;
1429		clk = clk_register(NULL, hw);
1430		break;
1431	}
1432	case CLK_COMPOSITE:
1433	{
1434		struct clk_hw *mux_hw = NULL, *div_hw = NULL, *gate_hw = NULL;
1435		const struct clk_ops *mops = NULL, *dops = NULL, *gops = NULL;
1436		struct clk_hw_proto0 *mux0, *div0, *gate0;
1437
1438		mux0 = clk_hw->hw1.mux;
1439		div0 = clk_hw->hw1.div;
1440		gate0 = clk_hw->hw1.gate;
1441		if (mux0) {
1442			mops = mux0->ops;
1443			mux_hw = &mux0->clk.hw;
1444		}
1445		if (div0) {
1446			dops = div0->ops;
1447			div_hw = &div0->clk.hw;
1448		}
1449		if (gate0) {
1450			gops = gate0->ops;
1451			gate_hw = &gate0->clk.hw;
1452		}
1453
1454		clk = clk_register_composite(NULL, lpc32xx_clk->name,
1455				parents, lpc32xx_clk->num_parents,
1456				mux_hw, mops, div_hw, dops,
1457				gate_hw, gops, lpc32xx_clk->flags);
1458		break;
1459	}
1460	case CLK_FIXED:
1461	{
1462		struct clk_fixed_rate *fixed = &clk_hw->f;
1463
1464		clk = clk_register_fixed_rate(NULL, lpc32xx_clk->name,
1465			parents[0], 0, fixed->fixed_rate);
1466		break;
1467	}
1468	default:
1469		clk = ERR_PTR(-EINVAL);
1470	}
1471
1472	return clk;
1473}
1474
1475static void __init lpc32xx_clk_div_quirk(u32 reg, u32 div_mask, u32 gate)
1476{
1477	u32 val;
1478
1479	regmap_read(clk_regmap, reg, &val);
1480
1481	if (!(val & div_mask)) {
1482		val &= ~gate;
1483		val |= BIT(__ffs(div_mask));
1484	}
1485
1486	regmap_update_bits(clk_regmap, reg, gate | div_mask, val);
1487}
1488
1489static void __init lpc32xx_clk_init(struct device_node *np)
1490{
1491	unsigned int i;
1492	struct clk *clk_osc, *clk_32k;
1493	void __iomem *base = NULL;
1494
1495	/* Ensure that parent clocks are available and valid */
1496	clk_32k = of_clk_get_by_name(np, clk_proto[LPC32XX_CLK_XTAL_32K].name);
1497	if (IS_ERR(clk_32k)) {
1498		pr_err("failed to find external 32KHz clock: %ld\n",
1499		       PTR_ERR(clk_32k));
1500		return;
1501	}
1502	if (clk_get_rate(clk_32k) != 32768) {
1503		pr_err("invalid clock rate of external 32KHz oscillator\n");
1504		return;
1505	}
1506
1507	clk_osc = of_clk_get_by_name(np, clk_proto[LPC32XX_CLK_XTAL].name);
1508	if (IS_ERR(clk_osc)) {
1509		pr_err("failed to find external main oscillator clock: %ld\n",
1510		       PTR_ERR(clk_osc));
1511		return;
1512	}
1513
1514	base = of_iomap(np, 0);
1515	if (!base) {
1516		pr_err("failed to map system control block registers\n");
1517		return;
1518	}
1519
1520	clk_regmap = regmap_init_mmio(NULL, base, &lpc32xx_scb_regmap_config);
1521	if (IS_ERR(clk_regmap)) {
1522		pr_err("failed to regmap system control block: %ld\n",
1523			PTR_ERR(clk_regmap));
1524		iounmap(base);
1525		return;
1526	}
1527
1528	/*
1529	 * Divider part of PWM and MS clocks requires a quirk to avoid
1530	 * a misinterpretation of formally valid zero value in register
1531	 * bitfield, which indicates another clock gate. Instead of
1532	 * adding complexity to a gate clock ensure that zero value in
1533	 * divider clock is never met in runtime.
1534	 */
1535	lpc32xx_clk_div_quirk(LPC32XX_CLKPWR_PWMCLK_CTRL, 0xf0, BIT(0));
1536	lpc32xx_clk_div_quirk(LPC32XX_CLKPWR_PWMCLK_CTRL, 0xf00, BIT(2));
1537	lpc32xx_clk_div_quirk(LPC32XX_CLKPWR_MS_CTRL, 0xf, BIT(5) | BIT(9));
1538
1539	for (i = 1; i < LPC32XX_CLK_MAX; i++) {
1540		clk[i] = lpc32xx_clk_register(i);
1541		if (IS_ERR(clk[i])) {
1542			pr_err("failed to register %s clock: %ld\n",
1543				clk_proto[i].name, PTR_ERR(clk[i]));
1544			clk[i] = NULL;
1545		}
1546	}
1547
1548	of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
1549
1550	/* Set 48MHz rate of USB PLL clock */
1551	clk_set_rate(clk[LPC32XX_CLK_USB_PLL], 48000000);
1552
1553	/* These two clocks must be always on independently on consumers */
1554	clk_prepare_enable(clk[LPC32XX_CLK_ARM]);
1555	clk_prepare_enable(clk[LPC32XX_CLK_HCLK]);
1556
1557	/* Enable ARM VFP by default */
1558	clk_prepare_enable(clk[LPC32XX_CLK_ARM_VFP]);
1559
1560	/* Disable enabled by default clocks for NAND MLC and SLC */
1561	clk_mask_disable(&clk_hw_proto[LPC32XX_CLK_SLC].hw0.clk.hw);
1562	clk_mask_disable(&clk_hw_proto[LPC32XX_CLK_MLC].hw0.clk.hw);
1563}
1564CLK_OF_DECLARE(lpc32xx_clk, "nxp,lpc3220-clk", lpc32xx_clk_init);
1565
1566static void __init lpc32xx_usb_clk_init(struct device_node *np)
1567{
1568	unsigned int i;
1569
1570	usb_clk_vbase = of_iomap(np, 0);
1571	if (!usb_clk_vbase) {
1572		pr_err("failed to map address range\n");
1573		return;
1574	}
1575
1576	for (i = 1; i < LPC32XX_USB_CLK_MAX; i++) {
1577		usb_clk[i] = lpc32xx_clk_register(i + LPC32XX_CLK_USB_OFFSET);
1578		if (IS_ERR(usb_clk[i])) {
1579			pr_err("failed to register %s clock: %ld\n",
1580				clk_proto[i].name, PTR_ERR(usb_clk[i]));
1581			usb_clk[i] = NULL;
1582		}
1583	}
1584
1585	of_clk_add_provider(np, of_clk_src_onecell_get, &usb_clk_data);
1586}
1587CLK_OF_DECLARE(lpc32xx_usb_clk, "nxp,lpc3220-usb-clk", lpc32xx_usb_clk_init);
1588