drm/amd/amdgpu:flush ttm delayed work before cancel_sync
[linux-2.6-microblaze.git] / drivers / clk / clk-stm32mp1.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) STMicroelectronics 2018 - All Rights Reserved
4  * Author: Olivier Bideau <olivier.bideau@st.com> for STMicroelectronics.
5  * Author: Gabriel Fernandez <gabriel.fernandez@st.com> for STMicroelectronics.
6  */
7
8 #include <linux/clk.h>
9 #include <linux/clk-provider.h>
10 #include <linux/delay.h>
11 #include <linux/err.h>
12 #include <linux/io.h>
13 #include <linux/module.h>
14 #include <linux/of.h>
15 #include <linux/of_address.h>
16 #include <linux/platform_device.h>
17 #include <linux/reset-controller.h>
18 #include <linux/slab.h>
19 #include <linux/spinlock.h>
20
21 #include <dt-bindings/clock/stm32mp1-clks.h>
22
23 static DEFINE_SPINLOCK(rlock);
24
25 #define RCC_OCENSETR            0x0C
26 #define RCC_HSICFGR             0x18
27 #define RCC_RDLSICR             0x144
28 #define RCC_PLL1CR              0x80
29 #define RCC_PLL1CFGR1           0x84
30 #define RCC_PLL1CFGR2           0x88
31 #define RCC_PLL2CR              0x94
32 #define RCC_PLL2CFGR1           0x98
33 #define RCC_PLL2CFGR2           0x9C
34 #define RCC_PLL3CR              0x880
35 #define RCC_PLL3CFGR1           0x884
36 #define RCC_PLL3CFGR2           0x888
37 #define RCC_PLL4CR              0x894
38 #define RCC_PLL4CFGR1           0x898
39 #define RCC_PLL4CFGR2           0x89C
40 #define RCC_APB1ENSETR          0xA00
41 #define RCC_APB2ENSETR          0xA08
42 #define RCC_APB3ENSETR          0xA10
43 #define RCC_APB4ENSETR          0x200
44 #define RCC_APB5ENSETR          0x208
45 #define RCC_AHB2ENSETR          0xA18
46 #define RCC_AHB3ENSETR          0xA20
47 #define RCC_AHB4ENSETR          0xA28
48 #define RCC_AHB5ENSETR          0x210
49 #define RCC_AHB6ENSETR          0x218
50 #define RCC_AHB6LPENSETR        0x318
51 #define RCC_RCK12SELR           0x28
52 #define RCC_RCK3SELR            0x820
53 #define RCC_RCK4SELR            0x824
54 #define RCC_MPCKSELR            0x20
55 #define RCC_ASSCKSELR           0x24
56 #define RCC_MSSCKSELR           0x48
57 #define RCC_SPI6CKSELR          0xC4
58 #define RCC_SDMMC12CKSELR       0x8F4
59 #define RCC_SDMMC3CKSELR        0x8F8
60 #define RCC_FMCCKSELR           0x904
61 #define RCC_I2C46CKSELR         0xC0
62 #define RCC_I2C12CKSELR         0x8C0
63 #define RCC_I2C35CKSELR         0x8C4
64 #define RCC_UART1CKSELR         0xC8
65 #define RCC_QSPICKSELR          0x900
66 #define RCC_ETHCKSELR           0x8FC
67 #define RCC_RNG1CKSELR          0xCC
68 #define RCC_RNG2CKSELR          0x920
69 #define RCC_GPUCKSELR           0x938
70 #define RCC_USBCKSELR           0x91C
71 #define RCC_STGENCKSELR         0xD4
72 #define RCC_SPDIFCKSELR         0x914
73 #define RCC_SPI2S1CKSELR        0x8D8
74 #define RCC_SPI2S23CKSELR       0x8DC
75 #define RCC_SPI2S45CKSELR       0x8E0
76 #define RCC_CECCKSELR           0x918
77 #define RCC_LPTIM1CKSELR        0x934
78 #define RCC_LPTIM23CKSELR       0x930
79 #define RCC_LPTIM45CKSELR       0x92C
80 #define RCC_UART24CKSELR        0x8E8
81 #define RCC_UART35CKSELR        0x8EC
82 #define RCC_UART6CKSELR         0x8E4
83 #define RCC_UART78CKSELR        0x8F0
84 #define RCC_FDCANCKSELR         0x90C
85 #define RCC_SAI1CKSELR          0x8C8
86 #define RCC_SAI2CKSELR          0x8CC
87 #define RCC_SAI3CKSELR          0x8D0
88 #define RCC_SAI4CKSELR          0x8D4
89 #define RCC_ADCCKSELR           0x928
90 #define RCC_MPCKDIVR            0x2C
91 #define RCC_DSICKSELR           0x924
92 #define RCC_CPERCKSELR          0xD0
93 #define RCC_MCO1CFGR            0x800
94 #define RCC_MCO2CFGR            0x804
95 #define RCC_BDCR                0x140
96 #define RCC_AXIDIVR             0x30
97 #define RCC_MCUDIVR             0x830
98 #define RCC_APB1DIVR            0x834
99 #define RCC_APB2DIVR            0x838
100 #define RCC_APB3DIVR            0x83C
101 #define RCC_APB4DIVR            0x3C
102 #define RCC_APB5DIVR            0x40
103 #define RCC_TIMG1PRER           0x828
104 #define RCC_TIMG2PRER           0x82C
105 #define RCC_RTCDIVR             0x44
106 #define RCC_DBGCFGR             0x80C
107
108 #define RCC_CLR 0x4
109
110 static const char * const ref12_parents[] = {
111         "ck_hsi", "ck_hse"
112 };
113
114 static const char * const ref3_parents[] = {
115         "ck_hsi", "ck_hse", "ck_csi"
116 };
117
118 static const char * const ref4_parents[] = {
119         "ck_hsi", "ck_hse", "ck_csi"
120 };
121
122 static const char * const cpu_src[] = {
123         "ck_hsi", "ck_hse", "pll1_p"
124 };
125
126 static const char * const axi_src[] = {
127         "ck_hsi", "ck_hse", "pll2_p"
128 };
129
130 static const char * const per_src[] = {
131         "ck_hsi", "ck_csi", "ck_hse"
132 };
133
134 static const char * const mcu_src[] = {
135         "ck_hsi", "ck_hse", "ck_csi", "pll3_p"
136 };
137
138 static const char * const sdmmc12_src[] = {
139         "ck_axi", "pll3_r", "pll4_p", "ck_hsi"
140 };
141
142 static const char * const sdmmc3_src[] = {
143         "ck_mcu", "pll3_r", "pll4_p", "ck_hsi"
144 };
145
146 static const char * const fmc_src[] = {
147         "ck_axi", "pll3_r", "pll4_p", "ck_per"
148 };
149
150 static const char * const qspi_src[] = {
151         "ck_axi", "pll3_r", "pll4_p", "ck_per"
152 };
153
154 static const char * const eth_src[] = {
155         "pll4_p", "pll3_q"
156 };
157
158 static const char * const rng_src[] = {
159         "ck_csi", "pll4_r", "ck_lse", "ck_lsi"
160 };
161
162 static const char * const usbphy_src[] = {
163         "ck_hse", "pll4_r", "clk-hse-div2"
164 };
165
166 static const char * const usbo_src[] = {
167         "pll4_r", "ck_usbo_48m"
168 };
169
170 static const char * const stgen_src[] = {
171         "ck_hsi", "ck_hse"
172 };
173
174 static const char * const spdif_src[] = {
175         "pll4_p", "pll3_q", "ck_hsi"
176 };
177
178 static const char * const spi123_src[] = {
179         "pll4_p", "pll3_q", "i2s_ckin", "ck_per", "pll3_r"
180 };
181
182 static const char * const spi45_src[] = {
183         "pclk2", "pll4_q", "ck_hsi", "ck_csi", "ck_hse"
184 };
185
186 static const char * const spi6_src[] = {
187         "pclk5", "pll4_q", "ck_hsi", "ck_csi", "ck_hse", "pll3_q"
188 };
189
190 static const char * const cec_src[] = {
191         "ck_lse", "ck_lsi", "ck_csi"
192 };
193
194 static const char * const i2c12_src[] = {
195         "pclk1", "pll4_r", "ck_hsi", "ck_csi"
196 };
197
198 static const char * const i2c35_src[] = {
199         "pclk1", "pll4_r", "ck_hsi", "ck_csi"
200 };
201
202 static const char * const i2c46_src[] = {
203         "pclk5", "pll3_q", "ck_hsi", "ck_csi"
204 };
205
206 static const char * const lptim1_src[] = {
207         "pclk1", "pll4_p", "pll3_q", "ck_lse", "ck_lsi", "ck_per"
208 };
209
210 static const char * const lptim23_src[] = {
211         "pclk3", "pll4_q", "ck_per", "ck_lse", "ck_lsi"
212 };
213
214 static const char * const lptim45_src[] = {
215         "pclk3", "pll4_p", "pll3_q", "ck_lse", "ck_lsi", "ck_per"
216 };
217
218 static const char * const usart1_src[] = {
219         "pclk5", "pll3_q", "ck_hsi", "ck_csi", "pll4_q", "ck_hse"
220 };
221
222 static const char * const usart234578_src[] = {
223         "pclk1", "pll4_q", "ck_hsi", "ck_csi", "ck_hse"
224 };
225
226 static const char * const usart6_src[] = {
227         "pclk2", "pll4_q", "ck_hsi", "ck_csi", "ck_hse"
228 };
229
230 static const char * const fdcan_src[] = {
231         "ck_hse", "pll3_q", "pll4_q", "pll4_r"
232 };
233
234 static const char * const sai_src[] = {
235         "pll4_q", "pll3_q", "i2s_ckin", "ck_per", "pll3_r"
236 };
237
238 static const char * const sai2_src[] = {
239         "pll4_q", "pll3_q", "i2s_ckin", "ck_per", "spdif_ck_symb", "pll3_r"
240 };
241
242 static const char * const adc12_src[] = {
243         "pll4_r", "ck_per", "pll3_q"
244 };
245
246 static const char * const dsi_src[] = {
247         "ck_dsi_phy", "pll4_p"
248 };
249
250 static const char * const rtc_src[] = {
251         "off", "ck_lse", "ck_lsi", "ck_hse"
252 };
253
254 static const char * const mco1_src[] = {
255         "ck_hsi", "ck_hse", "ck_csi", "ck_lsi", "ck_lse"
256 };
257
258 static const char * const mco2_src[] = {
259         "ck_mpu", "ck_axi", "ck_mcu", "pll4_p", "ck_hse", "ck_hsi"
260 };
261
262 static const char * const ck_trace_src[] = {
263         "ck_axi"
264 };
265
266 static const struct clk_div_table axi_div_table[] = {
267         { 0, 1 }, { 1, 2 }, { 2, 3 }, { 3, 4 },
268         { 4, 4 }, { 5, 4 }, { 6, 4 }, { 7, 4 },
269         { 0 },
270 };
271
272 static const struct clk_div_table mcu_div_table[] = {
273         { 0, 1 }, { 1, 2 }, { 2, 4 }, { 3, 8 },
274         { 4, 16 }, { 5, 32 }, { 6, 64 }, { 7, 128 },
275         { 8, 256 }, { 9, 512 }, { 10, 512}, { 11, 512 },
276         { 12, 512 }, { 13, 512 }, { 14, 512}, { 15, 512 },
277         { 0 },
278 };
279
280 static const struct clk_div_table apb_div_table[] = {
281         { 0, 1 }, { 1, 2 }, { 2, 4 }, { 3, 8 },
282         { 4, 16 }, { 5, 16 }, { 6, 16 }, { 7, 16 },
283         { 0 },
284 };
285
286 static const struct clk_div_table ck_trace_div_table[] = {
287         { 0, 1 }, { 1, 2 }, { 2, 4 }, { 3, 8 },
288         { 4, 16 }, { 5, 16 }, { 6, 16 }, { 7, 16 },
289         { 0 },
290 };
291
292 #define MAX_MUX_CLK 2
293
294 struct stm32_mmux {
295         u8 nbr_clk;
296         struct clk_hw *hws[MAX_MUX_CLK];
297 };
298
299 struct stm32_clk_mmux {
300         struct clk_mux mux;
301         struct stm32_mmux *mmux;
302 };
303
304 struct stm32_mgate {
305         u8 nbr_clk;
306         u32 flag;
307 };
308
309 struct stm32_clk_mgate {
310         struct clk_gate gate;
311         struct stm32_mgate *mgate;
312         u32 mask;
313 };
314
315 struct clock_config {
316         u32 id;
317         const char *name;
318         const char *parent_name;
319         const char * const *parent_names;
320         int num_parents;
321         unsigned long flags;
322         void *cfg;
323         struct clk_hw * (*func)(struct device *dev,
324                                 struct clk_hw_onecell_data *clk_data,
325                                 void __iomem *base, spinlock_t *lock,
326                                 const struct clock_config *cfg);
327 };
328
329 #define NO_ID ~0
330
331 struct gate_cfg {
332         u32 reg_off;
333         u8 bit_idx;
334         u8 gate_flags;
335 };
336
337 struct fixed_factor_cfg {
338         unsigned int mult;
339         unsigned int div;
340 };
341
342 struct div_cfg {
343         u32 reg_off;
344         u8 shift;
345         u8 width;
346         u8 div_flags;
347         const struct clk_div_table *table;
348 };
349
350 struct mux_cfg {
351         u32 reg_off;
352         u8 shift;
353         u8 width;
354         u8 mux_flags;
355         u32 *table;
356 };
357
358 struct stm32_gate_cfg {
359         struct gate_cfg         *gate;
360         struct stm32_mgate      *mgate;
361         const struct clk_ops    *ops;
362 };
363
364 struct stm32_div_cfg {
365         struct div_cfg          *div;
366         const struct clk_ops    *ops;
367 };
368
369 struct stm32_mux_cfg {
370         struct mux_cfg          *mux;
371         struct stm32_mmux       *mmux;
372         const struct clk_ops    *ops;
373 };
374
375 /* STM32 Composite clock */
376 struct stm32_composite_cfg {
377         const struct stm32_gate_cfg     *gate;
378         const struct stm32_div_cfg      *div;
379         const struct stm32_mux_cfg      *mux;
380 };
381
382 static struct clk_hw *
383 _clk_hw_register_gate(struct device *dev,
384                       struct clk_hw_onecell_data *clk_data,
385                       void __iomem *base, spinlock_t *lock,
386                       const struct clock_config *cfg)
387 {
388         struct gate_cfg *gate_cfg = cfg->cfg;
389
390         return clk_hw_register_gate(dev,
391                                     cfg->name,
392                                     cfg->parent_name,
393                                     cfg->flags,
394                                     gate_cfg->reg_off + base,
395                                     gate_cfg->bit_idx,
396                                     gate_cfg->gate_flags,
397                                     lock);
398 }
399
400 static struct clk_hw *
401 _clk_hw_register_fixed_factor(struct device *dev,
402                               struct clk_hw_onecell_data *clk_data,
403                               void __iomem *base, spinlock_t *lock,
404                               const struct clock_config *cfg)
405 {
406         struct fixed_factor_cfg *ff_cfg = cfg->cfg;
407
408         return clk_hw_register_fixed_factor(dev, cfg->name, cfg->parent_name,
409                                             cfg->flags, ff_cfg->mult,
410                                             ff_cfg->div);
411 }
412
413 static struct clk_hw *
414 _clk_hw_register_divider_table(struct device *dev,
415                                struct clk_hw_onecell_data *clk_data,
416                                void __iomem *base, spinlock_t *lock,
417                                const struct clock_config *cfg)
418 {
419         struct div_cfg *div_cfg = cfg->cfg;
420
421         return clk_hw_register_divider_table(dev,
422                                              cfg->name,
423                                              cfg->parent_name,
424                                              cfg->flags,
425                                              div_cfg->reg_off + base,
426                                              div_cfg->shift,
427                                              div_cfg->width,
428                                              div_cfg->div_flags,
429                                              div_cfg->table,
430                                              lock);
431 }
432
433 static struct clk_hw *
434 _clk_hw_register_mux(struct device *dev,
435                      struct clk_hw_onecell_data *clk_data,
436                      void __iomem *base, spinlock_t *lock,
437                      const struct clock_config *cfg)
438 {
439         struct mux_cfg *mux_cfg = cfg->cfg;
440
441         return clk_hw_register_mux(dev, cfg->name, cfg->parent_names,
442                                    cfg->num_parents, cfg->flags,
443                                    mux_cfg->reg_off + base, mux_cfg->shift,
444                                    mux_cfg->width, mux_cfg->mux_flags, lock);
445 }
446
447 /* MP1 Gate clock with set & clear registers */
448
449 static int mp1_gate_clk_enable(struct clk_hw *hw)
450 {
451         if (!clk_gate_ops.is_enabled(hw))
452                 clk_gate_ops.enable(hw);
453
454         return 0;
455 }
456
457 static void mp1_gate_clk_disable(struct clk_hw *hw)
458 {
459         struct clk_gate *gate = to_clk_gate(hw);
460         unsigned long flags = 0;
461
462         if (clk_gate_ops.is_enabled(hw)) {
463                 spin_lock_irqsave(gate->lock, flags);
464                 writel_relaxed(BIT(gate->bit_idx), gate->reg + RCC_CLR);
465                 spin_unlock_irqrestore(gate->lock, flags);
466         }
467 }
468
469 static const struct clk_ops mp1_gate_clk_ops = {
470         .enable         = mp1_gate_clk_enable,
471         .disable        = mp1_gate_clk_disable,
472         .is_enabled     = clk_gate_is_enabled,
473 };
474
475 static struct clk_hw *_get_stm32_mux(struct device *dev, void __iomem *base,
476                                      const struct stm32_mux_cfg *cfg,
477                                      spinlock_t *lock)
478 {
479         struct stm32_clk_mmux *mmux;
480         struct clk_mux *mux;
481         struct clk_hw *mux_hw;
482
483         if (cfg->mmux) {
484                 mmux = devm_kzalloc(dev, sizeof(*mmux), GFP_KERNEL);
485                 if (!mmux)
486                         return ERR_PTR(-ENOMEM);
487
488                 mmux->mux.reg = cfg->mux->reg_off + base;
489                 mmux->mux.shift = cfg->mux->shift;
490                 mmux->mux.mask = (1 << cfg->mux->width) - 1;
491                 mmux->mux.flags = cfg->mux->mux_flags;
492                 mmux->mux.table = cfg->mux->table;
493                 mmux->mux.lock = lock;
494                 mmux->mmux = cfg->mmux;
495                 mux_hw = &mmux->mux.hw;
496                 cfg->mmux->hws[cfg->mmux->nbr_clk++] = mux_hw;
497
498         } else {
499                 mux = devm_kzalloc(dev, sizeof(*mux), GFP_KERNEL);
500                 if (!mux)
501                         return ERR_PTR(-ENOMEM);
502
503                 mux->reg = cfg->mux->reg_off + base;
504                 mux->shift = cfg->mux->shift;
505                 mux->mask = (1 << cfg->mux->width) - 1;
506                 mux->flags = cfg->mux->mux_flags;
507                 mux->table = cfg->mux->table;
508                 mux->lock = lock;
509                 mux_hw = &mux->hw;
510         }
511
512         return mux_hw;
513 }
514
515 static struct clk_hw *_get_stm32_div(struct device *dev, void __iomem *base,
516                                      const struct stm32_div_cfg *cfg,
517                                      spinlock_t *lock)
518 {
519         struct clk_divider *div;
520
521         div = devm_kzalloc(dev, sizeof(*div), GFP_KERNEL);
522
523         if (!div)
524                 return ERR_PTR(-ENOMEM);
525
526         div->reg = cfg->div->reg_off + base;
527         div->shift = cfg->div->shift;
528         div->width = cfg->div->width;
529         div->flags = cfg->div->div_flags;
530         div->table = cfg->div->table;
531         div->lock = lock;
532
533         return &div->hw;
534 }
535
536 static struct clk_hw *_get_stm32_gate(struct device *dev, void __iomem *base,
537                                       const struct stm32_gate_cfg *cfg,
538                                       spinlock_t *lock)
539 {
540         struct stm32_clk_mgate *mgate;
541         struct clk_gate *gate;
542         struct clk_hw *gate_hw;
543
544         if (cfg->mgate) {
545                 mgate = devm_kzalloc(dev, sizeof(*mgate), GFP_KERNEL);
546                 if (!mgate)
547                         return ERR_PTR(-ENOMEM);
548
549                 mgate->gate.reg = cfg->gate->reg_off + base;
550                 mgate->gate.bit_idx = cfg->gate->bit_idx;
551                 mgate->gate.flags = cfg->gate->gate_flags;
552                 mgate->gate.lock = lock;
553                 mgate->mask = BIT(cfg->mgate->nbr_clk++);
554
555                 mgate->mgate = cfg->mgate;
556
557                 gate_hw = &mgate->gate.hw;
558
559         } else {
560                 gate = devm_kzalloc(dev, sizeof(*gate), GFP_KERNEL);
561                 if (!gate)
562                         return ERR_PTR(-ENOMEM);
563
564                 gate->reg = cfg->gate->reg_off + base;
565                 gate->bit_idx = cfg->gate->bit_idx;
566                 gate->flags = cfg->gate->gate_flags;
567                 gate->lock = lock;
568
569                 gate_hw = &gate->hw;
570         }
571
572         return gate_hw;
573 }
574
575 static struct clk_hw *
576 clk_stm32_register_gate_ops(struct device *dev,
577                             const char *name,
578                             const char *parent_name,
579                             unsigned long flags,
580                             void __iomem *base,
581                             const struct stm32_gate_cfg *cfg,
582                             spinlock_t *lock)
583 {
584         struct clk_init_data init = { NULL };
585         struct clk_hw *hw;
586         int ret;
587
588         init.name = name;
589         init.parent_names = &parent_name;
590         init.num_parents = 1;
591         init.flags = flags;
592
593         init.ops = &clk_gate_ops;
594
595         if (cfg->ops)
596                 init.ops = cfg->ops;
597
598         hw = _get_stm32_gate(dev, base, cfg, lock);
599         if (IS_ERR(hw))
600                 return ERR_PTR(-ENOMEM);
601
602         hw->init = &init;
603
604         ret = clk_hw_register(dev, hw);
605         if (ret)
606                 hw = ERR_PTR(ret);
607
608         return hw;
609 }
610
611 static struct clk_hw *
612 clk_stm32_register_composite(struct device *dev,
613                              const char *name, const char * const *parent_names,
614                              int num_parents, void __iomem *base,
615                              const struct stm32_composite_cfg *cfg,
616                              unsigned long flags, spinlock_t *lock)
617 {
618         const struct clk_ops *mux_ops, *div_ops, *gate_ops;
619         struct clk_hw *mux_hw, *div_hw, *gate_hw;
620
621         mux_hw = NULL;
622         div_hw = NULL;
623         gate_hw = NULL;
624         mux_ops = NULL;
625         div_ops = NULL;
626         gate_ops = NULL;
627
628         if (cfg->mux) {
629                 mux_hw = _get_stm32_mux(dev, base, cfg->mux, lock);
630
631                 if (!IS_ERR(mux_hw)) {
632                         mux_ops = &clk_mux_ops;
633
634                         if (cfg->mux->ops)
635                                 mux_ops = cfg->mux->ops;
636                 }
637         }
638
639         if (cfg->div) {
640                 div_hw = _get_stm32_div(dev, base, cfg->div, lock);
641
642                 if (!IS_ERR(div_hw)) {
643                         div_ops = &clk_divider_ops;
644
645                         if (cfg->div->ops)
646                                 div_ops = cfg->div->ops;
647                 }
648         }
649
650         if (cfg->gate) {
651                 gate_hw = _get_stm32_gate(dev, base, cfg->gate, lock);
652
653                 if (!IS_ERR(gate_hw)) {
654                         gate_ops = &clk_gate_ops;
655
656                         if (cfg->gate->ops)
657                                 gate_ops = cfg->gate->ops;
658                 }
659         }
660
661         return clk_hw_register_composite(dev, name, parent_names, num_parents,
662                                        mux_hw, mux_ops, div_hw, div_ops,
663                                        gate_hw, gate_ops, flags);
664 }
665
666 #define to_clk_mgate(_gate) container_of(_gate, struct stm32_clk_mgate, gate)
667
668 static int mp1_mgate_clk_enable(struct clk_hw *hw)
669 {
670         struct clk_gate *gate = to_clk_gate(hw);
671         struct stm32_clk_mgate *clk_mgate = to_clk_mgate(gate);
672
673         clk_mgate->mgate->flag |= clk_mgate->mask;
674
675         mp1_gate_clk_enable(hw);
676
677         return  0;
678 }
679
680 static void mp1_mgate_clk_disable(struct clk_hw *hw)
681 {
682         struct clk_gate *gate = to_clk_gate(hw);
683         struct stm32_clk_mgate *clk_mgate = to_clk_mgate(gate);
684
685         clk_mgate->mgate->flag &= ~clk_mgate->mask;
686
687         if (clk_mgate->mgate->flag == 0)
688                 mp1_gate_clk_disable(hw);
689 }
690
691 static const struct clk_ops mp1_mgate_clk_ops = {
692         .enable         = mp1_mgate_clk_enable,
693         .disable        = mp1_mgate_clk_disable,
694         .is_enabled     = clk_gate_is_enabled,
695
696 };
697
698 #define to_clk_mmux(_mux) container_of(_mux, struct stm32_clk_mmux, mux)
699
700 static u8 clk_mmux_get_parent(struct clk_hw *hw)
701 {
702         return clk_mux_ops.get_parent(hw);
703 }
704
705 static int clk_mmux_set_parent(struct clk_hw *hw, u8 index)
706 {
707         struct clk_mux *mux = to_clk_mux(hw);
708         struct stm32_clk_mmux *clk_mmux = to_clk_mmux(mux);
709         struct clk_hw *hwp;
710         int ret, n;
711
712         ret = clk_mux_ops.set_parent(hw, index);
713         if (ret)
714                 return ret;
715
716         hwp = clk_hw_get_parent(hw);
717
718         for (n = 0; n < clk_mmux->mmux->nbr_clk; n++)
719                 if (clk_mmux->mmux->hws[n] != hw)
720                         clk_hw_reparent(clk_mmux->mmux->hws[n], hwp);
721
722         return 0;
723 }
724
725 static const struct clk_ops clk_mmux_ops = {
726         .get_parent     = clk_mmux_get_parent,
727         .set_parent     = clk_mmux_set_parent,
728         .determine_rate = __clk_mux_determine_rate,
729 };
730
731 /* STM32 PLL */
732 struct stm32_pll_obj {
733         /* lock pll enable/disable registers */
734         spinlock_t *lock;
735         void __iomem *reg;
736         struct clk_hw hw;
737         struct clk_mux mux;
738 };
739
740 #define to_pll(_hw) container_of(_hw, struct stm32_pll_obj, hw)
741
742 #define PLL_ON          BIT(0)
743 #define PLL_RDY         BIT(1)
744 #define DIVN_MASK       0x1FF
745 #define DIVM_MASK       0x3F
746 #define DIVM_SHIFT      16
747 #define DIVN_SHIFT      0
748 #define FRAC_OFFSET     0xC
749 #define FRAC_MASK       0x1FFF
750 #define FRAC_SHIFT      3
751 #define FRACLE          BIT(16)
752 #define PLL_MUX_SHIFT   0
753 #define PLL_MUX_MASK    3
754
755 static int __pll_is_enabled(struct clk_hw *hw)
756 {
757         struct stm32_pll_obj *clk_elem = to_pll(hw);
758
759         return readl_relaxed(clk_elem->reg) & PLL_ON;
760 }
761
762 #define TIMEOUT 5
763
764 static int pll_enable(struct clk_hw *hw)
765 {
766         struct stm32_pll_obj *clk_elem = to_pll(hw);
767         u32 reg;
768         unsigned long flags = 0;
769         unsigned int timeout = TIMEOUT;
770         int bit_status = 0;
771
772         spin_lock_irqsave(clk_elem->lock, flags);
773
774         if (__pll_is_enabled(hw))
775                 goto unlock;
776
777         reg = readl_relaxed(clk_elem->reg);
778         reg |= PLL_ON;
779         writel_relaxed(reg, clk_elem->reg);
780
781         /* We can't use readl_poll_timeout() because we can be blocked if
782          * someone enables this clock before clocksource changes.
783          * Only jiffies counter is available. Jiffies are incremented by
784          * interruptions and enable op does not allow to be interrupted.
785          */
786         do {
787                 bit_status = !(readl_relaxed(clk_elem->reg) & PLL_RDY);
788
789                 if (bit_status)
790                         udelay(120);
791
792         } while (bit_status && --timeout);
793
794 unlock:
795         spin_unlock_irqrestore(clk_elem->lock, flags);
796
797         return bit_status;
798 }
799
800 static void pll_disable(struct clk_hw *hw)
801 {
802         struct stm32_pll_obj *clk_elem = to_pll(hw);
803         u32 reg;
804         unsigned long flags = 0;
805
806         spin_lock_irqsave(clk_elem->lock, flags);
807
808         reg = readl_relaxed(clk_elem->reg);
809         reg &= ~PLL_ON;
810         writel_relaxed(reg, clk_elem->reg);
811
812         spin_unlock_irqrestore(clk_elem->lock, flags);
813 }
814
815 static u32 pll_frac_val(struct clk_hw *hw)
816 {
817         struct stm32_pll_obj *clk_elem = to_pll(hw);
818         u32 reg, frac = 0;
819
820         reg = readl_relaxed(clk_elem->reg + FRAC_OFFSET);
821         if (reg & FRACLE)
822                 frac = (reg >> FRAC_SHIFT) & FRAC_MASK;
823
824         return frac;
825 }
826
827 static unsigned long pll_recalc_rate(struct clk_hw *hw,
828                                      unsigned long parent_rate)
829 {
830         struct stm32_pll_obj *clk_elem = to_pll(hw);
831         u32 reg;
832         u32 frac, divm, divn;
833         u64 rate, rate_frac = 0;
834
835         reg = readl_relaxed(clk_elem->reg + 4);
836
837         divm = ((reg >> DIVM_SHIFT) & DIVM_MASK) + 1;
838         divn = ((reg >> DIVN_SHIFT) & DIVN_MASK) + 1;
839         rate = (u64)parent_rate * divn;
840
841         do_div(rate, divm);
842
843         frac = pll_frac_val(hw);
844         if (frac) {
845                 rate_frac = (u64)parent_rate * (u64)frac;
846                 do_div(rate_frac, (divm * 8192));
847         }
848
849         return rate + rate_frac;
850 }
851
852 static int pll_is_enabled(struct clk_hw *hw)
853 {
854         struct stm32_pll_obj *clk_elem = to_pll(hw);
855         unsigned long flags = 0;
856         int ret;
857
858         spin_lock_irqsave(clk_elem->lock, flags);
859         ret = __pll_is_enabled(hw);
860         spin_unlock_irqrestore(clk_elem->lock, flags);
861
862         return ret;
863 }
864
865 static u8 pll_get_parent(struct clk_hw *hw)
866 {
867         struct stm32_pll_obj *clk_elem = to_pll(hw);
868         struct clk_hw *mux_hw = &clk_elem->mux.hw;
869
870         __clk_hw_set_clk(mux_hw, hw);
871
872         return clk_mux_ops.get_parent(mux_hw);
873 }
874
875 static const struct clk_ops pll_ops = {
876         .enable         = pll_enable,
877         .disable        = pll_disable,
878         .recalc_rate    = pll_recalc_rate,
879         .is_enabled     = pll_is_enabled,
880         .get_parent     = pll_get_parent,
881 };
882
883 static struct clk_hw *clk_register_pll(struct device *dev, const char *name,
884                                        const char * const *parent_names,
885                                        int num_parents,
886                                        void __iomem *reg,
887                                        void __iomem *mux_reg,
888                                        unsigned long flags,
889                                        spinlock_t *lock)
890 {
891         struct stm32_pll_obj *element;
892         struct clk_init_data init;
893         struct clk_hw *hw;
894         int err;
895
896         element = devm_kzalloc(dev, sizeof(*element), GFP_KERNEL);
897         if (!element)
898                 return ERR_PTR(-ENOMEM);
899
900         init.name = name;
901         init.ops = &pll_ops;
902         init.flags = flags;
903         init.parent_names = parent_names;
904         init.num_parents = num_parents;
905
906         element->mux.lock = lock;
907         element->mux.reg =  mux_reg;
908         element->mux.shift = PLL_MUX_SHIFT;
909         element->mux.mask =  PLL_MUX_MASK;
910         element->mux.flags =  CLK_MUX_READ_ONLY;
911         element->mux.reg =  mux_reg;
912
913         element->hw.init = &init;
914         element->reg = reg;
915         element->lock = lock;
916
917         hw = &element->hw;
918         err = clk_hw_register(dev, hw);
919
920         if (err)
921                 return ERR_PTR(err);
922
923         return hw;
924 }
925
926 /* Kernel Timer */
927 struct timer_cker {
928         /* lock the kernel output divider register */
929         spinlock_t *lock;
930         void __iomem *apbdiv;
931         void __iomem *timpre;
932         struct clk_hw hw;
933 };
934
935 #define to_timer_cker(_hw) container_of(_hw, struct timer_cker, hw)
936
937 #define APB_DIV_MASK 0x07
938 #define TIM_PRE_MASK 0x01
939
940 static unsigned long __bestmult(struct clk_hw *hw, unsigned long rate,
941                                 unsigned long parent_rate)
942 {
943         struct timer_cker *tim_ker = to_timer_cker(hw);
944         u32 prescaler;
945         unsigned int mult = 0;
946
947         prescaler = readl_relaxed(tim_ker->apbdiv) & APB_DIV_MASK;
948         if (prescaler < 2)
949                 return 1;
950
951         mult = 2;
952
953         if (rate / parent_rate >= 4)
954                 mult = 4;
955
956         return mult;
957 }
958
959 static long timer_ker_round_rate(struct clk_hw *hw, unsigned long rate,
960                                  unsigned long *parent_rate)
961 {
962         unsigned long factor = __bestmult(hw, rate, *parent_rate);
963
964         return *parent_rate * factor;
965 }
966
967 static int timer_ker_set_rate(struct clk_hw *hw, unsigned long rate,
968                               unsigned long parent_rate)
969 {
970         struct timer_cker *tim_ker = to_timer_cker(hw);
971         unsigned long flags = 0;
972         unsigned long factor = __bestmult(hw, rate, parent_rate);
973         int ret = 0;
974
975         spin_lock_irqsave(tim_ker->lock, flags);
976
977         switch (factor) {
978         case 1:
979                 break;
980         case 2:
981                 writel_relaxed(0, tim_ker->timpre);
982                 break;
983         case 4:
984                 writel_relaxed(1, tim_ker->timpre);
985                 break;
986         default:
987                 ret = -EINVAL;
988         }
989         spin_unlock_irqrestore(tim_ker->lock, flags);
990
991         return ret;
992 }
993
994 static unsigned long timer_ker_recalc_rate(struct clk_hw *hw,
995                                            unsigned long parent_rate)
996 {
997         struct timer_cker *tim_ker = to_timer_cker(hw);
998         u32 prescaler, timpre;
999         u32 mul;
1000
1001         prescaler = readl_relaxed(tim_ker->apbdiv) & APB_DIV_MASK;
1002
1003         timpre = readl_relaxed(tim_ker->timpre) & TIM_PRE_MASK;
1004
1005         if (!prescaler)
1006                 return parent_rate;
1007
1008         mul = (timpre + 1) * 2;
1009
1010         return parent_rate * mul;
1011 }
1012
1013 static const struct clk_ops timer_ker_ops = {
1014         .recalc_rate    = timer_ker_recalc_rate,
1015         .round_rate     = timer_ker_round_rate,
1016         .set_rate       = timer_ker_set_rate,
1017
1018 };
1019
1020 static struct clk_hw *clk_register_cktim(struct device *dev, const char *name,
1021                                          const char *parent_name,
1022                                          unsigned long flags,
1023                                          void __iomem *apbdiv,
1024                                          void __iomem *timpre,
1025                                          spinlock_t *lock)
1026 {
1027         struct timer_cker *tim_ker;
1028         struct clk_init_data init;
1029         struct clk_hw *hw;
1030         int err;
1031
1032         tim_ker = devm_kzalloc(dev, sizeof(*tim_ker), GFP_KERNEL);
1033         if (!tim_ker)
1034                 return ERR_PTR(-ENOMEM);
1035
1036         init.name = name;
1037         init.ops = &timer_ker_ops;
1038         init.flags = flags;
1039         init.parent_names = &parent_name;
1040         init.num_parents = 1;
1041
1042         tim_ker->hw.init = &init;
1043         tim_ker->lock = lock;
1044         tim_ker->apbdiv = apbdiv;
1045         tim_ker->timpre = timpre;
1046
1047         hw = &tim_ker->hw;
1048         err = clk_hw_register(dev, hw);
1049
1050         if (err)
1051                 return ERR_PTR(err);
1052
1053         return hw;
1054 }
1055
1056 /* The divider of RTC clock concerns only ck_hse clock */
1057 #define HSE_RTC 3
1058
1059 static unsigned long clk_divider_rtc_recalc_rate(struct clk_hw *hw,
1060                                                  unsigned long parent_rate)
1061 {
1062         if (clk_hw_get_parent(hw) == clk_hw_get_parent_by_index(hw, HSE_RTC))
1063                 return clk_divider_ops.recalc_rate(hw, parent_rate);
1064
1065         return parent_rate;
1066 }
1067
1068 static int clk_divider_rtc_set_rate(struct clk_hw *hw, unsigned long rate,
1069                                     unsigned long parent_rate)
1070 {
1071         if (clk_hw_get_parent(hw) == clk_hw_get_parent_by_index(hw, HSE_RTC))
1072                 return clk_divider_ops.set_rate(hw, rate, parent_rate);
1073
1074         return parent_rate;
1075 }
1076
1077 static int clk_divider_rtc_determine_rate(struct clk_hw *hw, struct clk_rate_request *req)
1078 {
1079         unsigned long best_parent_rate = req->best_parent_rate;
1080
1081         if (req->best_parent_hw == clk_hw_get_parent_by_index(hw, HSE_RTC)) {
1082                 req->rate = clk_divider_ops.round_rate(hw, req->rate, &best_parent_rate);
1083                 req->best_parent_rate = best_parent_rate;
1084         } else {
1085                 req->rate = best_parent_rate;
1086         }
1087
1088         return 0;
1089 }
1090
1091 static const struct clk_ops rtc_div_clk_ops = {
1092         .recalc_rate    = clk_divider_rtc_recalc_rate,
1093         .set_rate       = clk_divider_rtc_set_rate,
1094         .determine_rate = clk_divider_rtc_determine_rate
1095 };
1096
1097 struct stm32_pll_cfg {
1098         u32 offset;
1099         u32 muxoff;
1100 };
1101
1102 static struct clk_hw *_clk_register_pll(struct device *dev,
1103                                         struct clk_hw_onecell_data *clk_data,
1104                                         void __iomem *base, spinlock_t *lock,
1105                                         const struct clock_config *cfg)
1106 {
1107         struct stm32_pll_cfg *stm_pll_cfg = cfg->cfg;
1108
1109         return clk_register_pll(dev, cfg->name, cfg->parent_names,
1110                                 cfg->num_parents,
1111                                 base + stm_pll_cfg->offset,
1112                                 base + stm_pll_cfg->muxoff,
1113                                 cfg->flags, lock);
1114 }
1115
1116 struct stm32_cktim_cfg {
1117         u32 offset_apbdiv;
1118         u32 offset_timpre;
1119 };
1120
1121 static struct clk_hw *_clk_register_cktim(struct device *dev,
1122                                           struct clk_hw_onecell_data *clk_data,
1123                                           void __iomem *base, spinlock_t *lock,
1124                                           const struct clock_config *cfg)
1125 {
1126         struct stm32_cktim_cfg *cktim_cfg = cfg->cfg;
1127
1128         return clk_register_cktim(dev, cfg->name, cfg->parent_name, cfg->flags,
1129                                   cktim_cfg->offset_apbdiv + base,
1130                                   cktim_cfg->offset_timpre + base, lock);
1131 }
1132
1133 static struct clk_hw *
1134 _clk_stm32_register_gate(struct device *dev,
1135                          struct clk_hw_onecell_data *clk_data,
1136                          void __iomem *base, spinlock_t *lock,
1137                          const struct clock_config *cfg)
1138 {
1139         return clk_stm32_register_gate_ops(dev,
1140                                     cfg->name,
1141                                     cfg->parent_name,
1142                                     cfg->flags,
1143                                     base,
1144                                     cfg->cfg,
1145                                     lock);
1146 }
1147
1148 static struct clk_hw *
1149 _clk_stm32_register_composite(struct device *dev,
1150                               struct clk_hw_onecell_data *clk_data,
1151                               void __iomem *base, spinlock_t *lock,
1152                               const struct clock_config *cfg)
1153 {
1154         return clk_stm32_register_composite(dev, cfg->name, cfg->parent_names,
1155                                             cfg->num_parents, base, cfg->cfg,
1156                                             cfg->flags, lock);
1157 }
1158
1159 #define GATE(_id, _name, _parent, _flags, _offset, _bit_idx, _gate_flags)\
1160 {\
1161         .id             = _id,\
1162         .name           = _name,\
1163         .parent_name    = _parent,\
1164         .flags          = _flags,\
1165         .cfg            =  &(struct gate_cfg) {\
1166                 .reg_off        = _offset,\
1167                 .bit_idx        = _bit_idx,\
1168                 .gate_flags     = _gate_flags,\
1169         },\
1170         .func           = _clk_hw_register_gate,\
1171 }
1172
1173 #define FIXED_FACTOR(_id, _name, _parent, _flags, _mult, _div)\
1174 {\
1175         .id             = _id,\
1176         .name           = _name,\
1177         .parent_name    = _parent,\
1178         .flags          = _flags,\
1179         .cfg            =  &(struct fixed_factor_cfg) {\
1180                 .mult = _mult,\
1181                 .div = _div,\
1182         },\
1183         .func           = _clk_hw_register_fixed_factor,\
1184 }
1185
1186 #define DIV_TABLE(_id, _name, _parent, _flags, _offset, _shift, _width,\
1187                   _div_flags, _div_table)\
1188 {\
1189         .id             = _id,\
1190         .name           = _name,\
1191         .parent_name    = _parent,\
1192         .flags          = _flags,\
1193         .cfg            =  &(struct div_cfg) {\
1194                 .reg_off        = _offset,\
1195                 .shift          = _shift,\
1196                 .width          = _width,\
1197                 .div_flags      = _div_flags,\
1198                 .table          = _div_table,\
1199         },\
1200         .func           = _clk_hw_register_divider_table,\
1201 }
1202
1203 #define DIV(_id, _name, _parent, _flags, _offset, _shift, _width, _div_flags)\
1204         DIV_TABLE(_id, _name, _parent, _flags, _offset, _shift, _width,\
1205                   _div_flags, NULL)
1206
1207 #define MUX(_id, _name, _parents, _flags, _offset, _shift, _width, _mux_flags)\
1208 {\
1209         .id             = _id,\
1210         .name           = _name,\
1211         .parent_names   = _parents,\
1212         .num_parents    = ARRAY_SIZE(_parents),\
1213         .flags          = _flags,\
1214         .cfg            =  &(struct mux_cfg) {\
1215                 .reg_off        = _offset,\
1216                 .shift          = _shift,\
1217                 .width          = _width,\
1218                 .mux_flags      = _mux_flags,\
1219         },\
1220         .func           = _clk_hw_register_mux,\
1221 }
1222
1223 #define PLL(_id, _name, _parents, _flags, _offset_p, _offset_mux)\
1224 {\
1225         .id             = _id,\
1226         .name           = _name,\
1227         .parent_names   = _parents,\
1228         .num_parents    = ARRAY_SIZE(_parents),\
1229         .flags          = CLK_IGNORE_UNUSED | (_flags),\
1230         .cfg            =  &(struct stm32_pll_cfg) {\
1231                 .offset = _offset_p,\
1232                 .muxoff = _offset_mux,\
1233         },\
1234         .func           = _clk_register_pll,\
1235 }
1236
1237 #define STM32_CKTIM(_name, _parent, _flags, _offset_apbdiv, _offset_timpre)\
1238 {\
1239         .id             = NO_ID,\
1240         .name           = _name,\
1241         .parent_name    = _parent,\
1242         .flags          = _flags,\
1243         .cfg            =  &(struct stm32_cktim_cfg) {\
1244                 .offset_apbdiv = _offset_apbdiv,\
1245                 .offset_timpre = _offset_timpre,\
1246         },\
1247         .func           = _clk_register_cktim,\
1248 }
1249
1250 #define STM32_TIM(_id, _name, _parent, _offset_set, _bit_idx)\
1251                   GATE_MP1(_id, _name, _parent, CLK_SET_RATE_PARENT,\
1252                            _offset_set, _bit_idx, 0)
1253
1254 /* STM32 GATE */
1255 #define STM32_GATE(_id, _name, _parent, _flags, _gate)\
1256 {\
1257         .id             = _id,\
1258         .name           = _name,\
1259         .parent_name    = _parent,\
1260         .flags          = _flags,\
1261         .cfg            = (struct stm32_gate_cfg *) {_gate},\
1262         .func           = _clk_stm32_register_gate,\
1263 }
1264
1265 #define _STM32_GATE(_gate_offset, _gate_bit_idx, _gate_flags, _mgate, _ops)\
1266         (&(struct stm32_gate_cfg) {\
1267                 &(struct gate_cfg) {\
1268                         .reg_off        = _gate_offset,\
1269                         .bit_idx        = _gate_bit_idx,\
1270                         .gate_flags     = _gate_flags,\
1271                 },\
1272                 .mgate          = _mgate,\
1273                 .ops            = _ops,\
1274         })
1275
1276 #define _STM32_MGATE(_mgate)\
1277         (&per_gate_cfg[_mgate])
1278
1279 #define _GATE(_gate_offset, _gate_bit_idx, _gate_flags)\
1280         _STM32_GATE(_gate_offset, _gate_bit_idx, _gate_flags,\
1281                     NULL, NULL)\
1282
1283 #define _GATE_MP1(_gate_offset, _gate_bit_idx, _gate_flags)\
1284         _STM32_GATE(_gate_offset, _gate_bit_idx, _gate_flags,\
1285                     NULL, &mp1_gate_clk_ops)\
1286
1287 #define _MGATE_MP1(_mgate)\
1288         .gate = &per_gate_cfg[_mgate]
1289
1290 #define GATE_MP1(_id, _name, _parent, _flags, _offset, _bit_idx, _gate_flags)\
1291         STM32_GATE(_id, _name, _parent, _flags,\
1292                    _GATE_MP1(_offset, _bit_idx, _gate_flags))
1293
1294 #define MGATE_MP1(_id, _name, _parent, _flags, _mgate)\
1295         STM32_GATE(_id, _name, _parent, _flags,\
1296                    _STM32_MGATE(_mgate))
1297
1298 #define _STM32_DIV(_div_offset, _div_shift, _div_width,\
1299                    _div_flags, _div_table, _ops)\
1300         .div = &(struct stm32_div_cfg) {\
1301                 &(struct div_cfg) {\
1302                         .reg_off        = _div_offset,\
1303                         .shift          = _div_shift,\
1304                         .width          = _div_width,\
1305                         .div_flags      = _div_flags,\
1306                         .table          = _div_table,\
1307                 },\
1308                 .ops            = _ops,\
1309         }
1310
1311 #define _DIV(_div_offset, _div_shift, _div_width, _div_flags, _div_table)\
1312         _STM32_DIV(_div_offset, _div_shift, _div_width,\
1313                    _div_flags, _div_table, NULL)\
1314
1315 #define _DIV_RTC(_div_offset, _div_shift, _div_width, _div_flags, _div_table)\
1316         _STM32_DIV(_div_offset, _div_shift, _div_width,\
1317                    _div_flags, _div_table, &rtc_div_clk_ops)
1318
1319 #define _STM32_MUX(_offset, _shift, _width, _mux_flags, _mmux, _ops)\
1320         .mux = &(struct stm32_mux_cfg) {\
1321                 &(struct mux_cfg) {\
1322                         .reg_off        = _offset,\
1323                         .shift          = _shift,\
1324                         .width          = _width,\
1325                         .mux_flags      = _mux_flags,\
1326                         .table          = NULL,\
1327                 },\
1328                 .mmux           = _mmux,\
1329                 .ops            = _ops,\
1330         }
1331
1332 #define _MUX(_offset, _shift, _width, _mux_flags)\
1333         _STM32_MUX(_offset, _shift, _width, _mux_flags, NULL, NULL)\
1334
1335 #define _MMUX(_mmux) .mux = &ker_mux_cfg[_mmux]
1336
1337 #define PARENT(_parent) ((const char *[]) { _parent})
1338
1339 #define _NO_MUX .mux = NULL
1340 #define _NO_DIV .div = NULL
1341 #define _NO_GATE .gate = NULL
1342
1343 #define COMPOSITE(_id, _name, _parents, _flags, _gate, _mux, _div)\
1344 {\
1345         .id             = _id,\
1346         .name           = _name,\
1347         .parent_names   = _parents,\
1348         .num_parents    = ARRAY_SIZE(_parents),\
1349         .flags          = _flags,\
1350         .cfg            = &(struct stm32_composite_cfg) {\
1351                 _gate,\
1352                 _mux,\
1353                 _div,\
1354         },\
1355         .func           = _clk_stm32_register_composite,\
1356 }
1357
1358 #define PCLK(_id, _name, _parent, _flags, _mgate)\
1359         MGATE_MP1(_id, _name, _parent, _flags, _mgate)
1360
1361 #define KCLK(_id, _name, _parents, _flags, _mgate, _mmux)\
1362              COMPOSITE(_id, _name, _parents, CLK_OPS_PARENT_ENABLE |\
1363                        CLK_SET_RATE_NO_REPARENT | _flags,\
1364                        _MGATE_MP1(_mgate),\
1365                        _MMUX(_mmux),\
1366                        _NO_DIV)
1367
1368 enum {
1369         G_SAI1,
1370         G_SAI2,
1371         G_SAI3,
1372         G_SAI4,
1373         G_SPI1,
1374         G_SPI2,
1375         G_SPI3,
1376         G_SPI4,
1377         G_SPI5,
1378         G_SPI6,
1379         G_SPDIF,
1380         G_I2C1,
1381         G_I2C2,
1382         G_I2C3,
1383         G_I2C4,
1384         G_I2C5,
1385         G_I2C6,
1386         G_USART2,
1387         G_UART4,
1388         G_USART3,
1389         G_UART5,
1390         G_USART1,
1391         G_USART6,
1392         G_UART7,
1393         G_UART8,
1394         G_LPTIM1,
1395         G_LPTIM2,
1396         G_LPTIM3,
1397         G_LPTIM4,
1398         G_LPTIM5,
1399         G_LTDC,
1400         G_DSI,
1401         G_QSPI,
1402         G_FMC,
1403         G_SDMMC1,
1404         G_SDMMC2,
1405         G_SDMMC3,
1406         G_USBO,
1407         G_USBPHY,
1408         G_RNG1,
1409         G_RNG2,
1410         G_FDCAN,
1411         G_DAC12,
1412         G_CEC,
1413         G_ADC12,
1414         G_GPU,
1415         G_STGEN,
1416         G_DFSDM,
1417         G_ADFSDM,
1418         G_TIM2,
1419         G_TIM3,
1420         G_TIM4,
1421         G_TIM5,
1422         G_TIM6,
1423         G_TIM7,
1424         G_TIM12,
1425         G_TIM13,
1426         G_TIM14,
1427         G_MDIO,
1428         G_TIM1,
1429         G_TIM8,
1430         G_TIM15,
1431         G_TIM16,
1432         G_TIM17,
1433         G_SYSCFG,
1434         G_VREF,
1435         G_TMPSENS,
1436         G_PMBCTRL,
1437         G_HDP,
1438         G_IWDG2,
1439         G_STGENRO,
1440         G_DMA1,
1441         G_DMA2,
1442         G_DMAMUX,
1443         G_DCMI,
1444         G_CRYP2,
1445         G_HASH2,
1446         G_CRC2,
1447         G_HSEM,
1448         G_IPCC,
1449         G_GPIOA,
1450         G_GPIOB,
1451         G_GPIOC,
1452         G_GPIOD,
1453         G_GPIOE,
1454         G_GPIOF,
1455         G_GPIOG,
1456         G_GPIOH,
1457         G_GPIOI,
1458         G_GPIOJ,
1459         G_GPIOK,
1460         G_MDMA,
1461         G_ETHCK,
1462         G_ETHTX,
1463         G_ETHRX,
1464         G_ETHMAC,
1465         G_CRC1,
1466         G_USBH,
1467         G_ETHSTP,
1468         G_RTCAPB,
1469         G_TZC1,
1470         G_TZC2,
1471         G_TZPC,
1472         G_IWDG1,
1473         G_BSEC,
1474         G_GPIOZ,
1475         G_CRYP1,
1476         G_HASH1,
1477         G_BKPSRAM,
1478         G_DDRPERFM,
1479
1480         G_LAST
1481 };
1482
1483 static struct stm32_mgate mp1_mgate[G_LAST];
1484
1485 #define _K_GATE(_id, _gate_offset, _gate_bit_idx, _gate_flags,\
1486                _mgate, _ops)\
1487         [_id] = {\
1488                 &(struct gate_cfg) {\
1489                         .reg_off        = _gate_offset,\
1490                         .bit_idx        = _gate_bit_idx,\
1491                         .gate_flags     = _gate_flags,\
1492                 },\
1493                 .mgate          = _mgate,\
1494                 .ops            = _ops,\
1495         }
1496
1497 #define K_GATE(_id, _gate_offset, _gate_bit_idx, _gate_flags)\
1498         _K_GATE(_id, _gate_offset, _gate_bit_idx, _gate_flags,\
1499                NULL, &mp1_gate_clk_ops)
1500
1501 #define K_MGATE(_id, _gate_offset, _gate_bit_idx, _gate_flags)\
1502         _K_GATE(_id, _gate_offset, _gate_bit_idx, _gate_flags,\
1503                &mp1_mgate[_id], &mp1_mgate_clk_ops)
1504
1505 /* Peripheral gates */
1506 static struct stm32_gate_cfg per_gate_cfg[G_LAST] = {
1507         /* Multi gates */
1508         K_GATE(G_MDIO,          RCC_APB1ENSETR, 31, 0),
1509         K_MGATE(G_DAC12,        RCC_APB1ENSETR, 29, 0),
1510         K_MGATE(G_CEC,          RCC_APB1ENSETR, 27, 0),
1511         K_MGATE(G_SPDIF,        RCC_APB1ENSETR, 26, 0),
1512         K_MGATE(G_I2C5,         RCC_APB1ENSETR, 24, 0),
1513         K_MGATE(G_I2C3,         RCC_APB1ENSETR, 23, 0),
1514         K_MGATE(G_I2C2,         RCC_APB1ENSETR, 22, 0),
1515         K_MGATE(G_I2C1,         RCC_APB1ENSETR, 21, 0),
1516         K_MGATE(G_UART8,        RCC_APB1ENSETR, 19, 0),
1517         K_MGATE(G_UART7,        RCC_APB1ENSETR, 18, 0),
1518         K_MGATE(G_UART5,        RCC_APB1ENSETR, 17, 0),
1519         K_MGATE(G_UART4,        RCC_APB1ENSETR, 16, 0),
1520         K_MGATE(G_USART3,       RCC_APB1ENSETR, 15, 0),
1521         K_MGATE(G_USART2,       RCC_APB1ENSETR, 14, 0),
1522         K_MGATE(G_SPI3,         RCC_APB1ENSETR, 12, 0),
1523         K_MGATE(G_SPI2,         RCC_APB1ENSETR, 11, 0),
1524         K_MGATE(G_LPTIM1,       RCC_APB1ENSETR, 9, 0),
1525         K_GATE(G_TIM14,         RCC_APB1ENSETR, 8, 0),
1526         K_GATE(G_TIM13,         RCC_APB1ENSETR, 7, 0),
1527         K_GATE(G_TIM12,         RCC_APB1ENSETR, 6, 0),
1528         K_GATE(G_TIM7,          RCC_APB1ENSETR, 5, 0),
1529         K_GATE(G_TIM6,          RCC_APB1ENSETR, 4, 0),
1530         K_GATE(G_TIM5,          RCC_APB1ENSETR, 3, 0),
1531         K_GATE(G_TIM4,          RCC_APB1ENSETR, 2, 0),
1532         K_GATE(G_TIM3,          RCC_APB1ENSETR, 1, 0),
1533         K_GATE(G_TIM2,          RCC_APB1ENSETR, 0, 0),
1534
1535         K_MGATE(G_FDCAN,        RCC_APB2ENSETR, 24, 0),
1536         K_GATE(G_ADFSDM,        RCC_APB2ENSETR, 21, 0),
1537         K_GATE(G_DFSDM,         RCC_APB2ENSETR, 20, 0),
1538         K_MGATE(G_SAI3,         RCC_APB2ENSETR, 18, 0),
1539         K_MGATE(G_SAI2,         RCC_APB2ENSETR, 17, 0),
1540         K_MGATE(G_SAI1,         RCC_APB2ENSETR, 16, 0),
1541         K_MGATE(G_USART6,       RCC_APB2ENSETR, 13, 0),
1542         K_MGATE(G_SPI5,         RCC_APB2ENSETR, 10, 0),
1543         K_MGATE(G_SPI4,         RCC_APB2ENSETR, 9, 0),
1544         K_MGATE(G_SPI1,         RCC_APB2ENSETR, 8, 0),
1545         K_GATE(G_TIM17,         RCC_APB2ENSETR, 4, 0),
1546         K_GATE(G_TIM16,         RCC_APB2ENSETR, 3, 0),
1547         K_GATE(G_TIM15,         RCC_APB2ENSETR, 2, 0),
1548         K_GATE(G_TIM8,          RCC_APB2ENSETR, 1, 0),
1549         K_GATE(G_TIM1,          RCC_APB2ENSETR, 0, 0),
1550
1551         K_GATE(G_HDP,           RCC_APB3ENSETR, 20, 0),
1552         K_GATE(G_PMBCTRL,       RCC_APB3ENSETR, 17, 0),
1553         K_GATE(G_TMPSENS,       RCC_APB3ENSETR, 16, 0),
1554         K_GATE(G_VREF,          RCC_APB3ENSETR, 13, 0),
1555         K_GATE(G_SYSCFG,        RCC_APB3ENSETR, 11, 0),
1556         K_MGATE(G_SAI4,         RCC_APB3ENSETR, 8, 0),
1557         K_MGATE(G_LPTIM5,       RCC_APB3ENSETR, 3, 0),
1558         K_MGATE(G_LPTIM4,       RCC_APB3ENSETR, 2, 0),
1559         K_MGATE(G_LPTIM3,       RCC_APB3ENSETR, 1, 0),
1560         K_MGATE(G_LPTIM2,       RCC_APB3ENSETR, 0, 0),
1561
1562         K_GATE(G_STGENRO,       RCC_APB4ENSETR, 20, 0),
1563         K_MGATE(G_USBPHY,       RCC_APB4ENSETR, 16, 0),
1564         K_GATE(G_IWDG2,         RCC_APB4ENSETR, 15, 0),
1565         K_GATE(G_DDRPERFM,      RCC_APB4ENSETR, 8, 0),
1566         K_MGATE(G_DSI,          RCC_APB4ENSETR, 4, 0),
1567         K_MGATE(G_LTDC,         RCC_APB4ENSETR, 0, 0),
1568
1569         K_GATE(G_STGEN,         RCC_APB5ENSETR, 20, 0),
1570         K_GATE(G_BSEC,          RCC_APB5ENSETR, 16, 0),
1571         K_GATE(G_IWDG1,         RCC_APB5ENSETR, 15, 0),
1572         K_GATE(G_TZPC,          RCC_APB5ENSETR, 13, 0),
1573         K_GATE(G_TZC2,          RCC_APB5ENSETR, 12, 0),
1574         K_GATE(G_TZC1,          RCC_APB5ENSETR, 11, 0),
1575         K_GATE(G_RTCAPB,        RCC_APB5ENSETR, 8, 0),
1576         K_MGATE(G_USART1,       RCC_APB5ENSETR, 4, 0),
1577         K_MGATE(G_I2C6,         RCC_APB5ENSETR, 3, 0),
1578         K_MGATE(G_I2C4,         RCC_APB5ENSETR, 2, 0),
1579         K_MGATE(G_SPI6,         RCC_APB5ENSETR, 0, 0),
1580
1581         K_MGATE(G_SDMMC3,       RCC_AHB2ENSETR, 16, 0),
1582         K_MGATE(G_USBO,         RCC_AHB2ENSETR, 8, 0),
1583         K_MGATE(G_ADC12,        RCC_AHB2ENSETR, 5, 0),
1584         K_GATE(G_DMAMUX,        RCC_AHB2ENSETR, 2, 0),
1585         K_GATE(G_DMA2,          RCC_AHB2ENSETR, 1, 0),
1586         K_GATE(G_DMA1,          RCC_AHB2ENSETR, 0, 0),
1587
1588         K_GATE(G_IPCC,          RCC_AHB3ENSETR, 12, 0),
1589         K_GATE(G_HSEM,          RCC_AHB3ENSETR, 11, 0),
1590         K_GATE(G_CRC2,          RCC_AHB3ENSETR, 7, 0),
1591         K_MGATE(G_RNG2,         RCC_AHB3ENSETR, 6, 0),
1592         K_GATE(G_HASH2,         RCC_AHB3ENSETR, 5, 0),
1593         K_GATE(G_CRYP2,         RCC_AHB3ENSETR, 4, 0),
1594         K_GATE(G_DCMI,          RCC_AHB3ENSETR, 0, 0),
1595
1596         K_GATE(G_GPIOK,         RCC_AHB4ENSETR, 10, 0),
1597         K_GATE(G_GPIOJ,         RCC_AHB4ENSETR, 9, 0),
1598         K_GATE(G_GPIOI,         RCC_AHB4ENSETR, 8, 0),
1599         K_GATE(G_GPIOH,         RCC_AHB4ENSETR, 7, 0),
1600         K_GATE(G_GPIOG,         RCC_AHB4ENSETR, 6, 0),
1601         K_GATE(G_GPIOF,         RCC_AHB4ENSETR, 5, 0),
1602         K_GATE(G_GPIOE,         RCC_AHB4ENSETR, 4, 0),
1603         K_GATE(G_GPIOD,         RCC_AHB4ENSETR, 3, 0),
1604         K_GATE(G_GPIOC,         RCC_AHB4ENSETR, 2, 0),
1605         K_GATE(G_GPIOB,         RCC_AHB4ENSETR, 1, 0),
1606         K_GATE(G_GPIOA,         RCC_AHB4ENSETR, 0, 0),
1607
1608         K_GATE(G_BKPSRAM,       RCC_AHB5ENSETR, 8, 0),
1609         K_MGATE(G_RNG1,         RCC_AHB5ENSETR, 6, 0),
1610         K_GATE(G_HASH1,         RCC_AHB5ENSETR, 5, 0),
1611         K_GATE(G_CRYP1,         RCC_AHB5ENSETR, 4, 0),
1612         K_GATE(G_GPIOZ,         RCC_AHB5ENSETR, 0, 0),
1613
1614         K_GATE(G_USBH,          RCC_AHB6ENSETR, 24, 0),
1615         K_GATE(G_CRC1,          RCC_AHB6ENSETR, 20, 0),
1616         K_MGATE(G_SDMMC2,       RCC_AHB6ENSETR, 17, 0),
1617         K_MGATE(G_SDMMC1,       RCC_AHB6ENSETR, 16, 0),
1618         K_MGATE(G_QSPI,         RCC_AHB6ENSETR, 14, 0),
1619         K_MGATE(G_FMC,          RCC_AHB6ENSETR, 12, 0),
1620         K_GATE(G_ETHMAC,        RCC_AHB6ENSETR, 10, 0),
1621         K_GATE(G_ETHRX,         RCC_AHB6ENSETR, 9, 0),
1622         K_GATE(G_ETHTX,         RCC_AHB6ENSETR, 8, 0),
1623         K_GATE(G_ETHCK,         RCC_AHB6ENSETR, 7, 0),
1624         K_MGATE(G_GPU,          RCC_AHB6ENSETR, 5, 0),
1625         K_GATE(G_MDMA,          RCC_AHB6ENSETR, 0, 0),
1626         K_GATE(G_ETHSTP,        RCC_AHB6LPENSETR, 11, 0),
1627 };
1628
1629 enum {
1630         M_SDMMC12,
1631         M_SDMMC3,
1632         M_FMC,
1633         M_QSPI,
1634         M_RNG1,
1635         M_RNG2,
1636         M_USBPHY,
1637         M_USBO,
1638         M_STGEN,
1639         M_SPDIF,
1640         M_SPI1,
1641         M_SPI23,
1642         M_SPI45,
1643         M_SPI6,
1644         M_CEC,
1645         M_I2C12,
1646         M_I2C35,
1647         M_I2C46,
1648         M_LPTIM1,
1649         M_LPTIM23,
1650         M_LPTIM45,
1651         M_USART1,
1652         M_UART24,
1653         M_UART35,
1654         M_USART6,
1655         M_UART78,
1656         M_SAI1,
1657         M_SAI2,
1658         M_SAI3,
1659         M_SAI4,
1660         M_DSI,
1661         M_FDCAN,
1662         M_ADC12,
1663         M_ETHCK,
1664         M_CKPER,
1665         M_LAST
1666 };
1667
1668 static struct stm32_mmux ker_mux[M_LAST];
1669
1670 #define _K_MUX(_id, _offset, _shift, _width, _mux_flags, _mmux, _ops)\
1671         [_id] = {\
1672                 &(struct mux_cfg) {\
1673                         .reg_off        = _offset,\
1674                         .shift          = _shift,\
1675                         .width          = _width,\
1676                         .mux_flags      = _mux_flags,\
1677                         .table          = NULL,\
1678                 },\
1679                 .mmux           = _mmux,\
1680                 .ops            = _ops,\
1681         }
1682
1683 #define K_MUX(_id, _offset, _shift, _width, _mux_flags)\
1684         _K_MUX(_id, _offset, _shift, _width, _mux_flags,\
1685                         NULL, NULL)
1686
1687 #define K_MMUX(_id, _offset, _shift, _width, _mux_flags)\
1688         _K_MUX(_id, _offset, _shift, _width, _mux_flags,\
1689                         &ker_mux[_id], &clk_mmux_ops)
1690
1691 static const struct stm32_mux_cfg ker_mux_cfg[M_LAST] = {
1692         /* Kernel multi mux */
1693         K_MMUX(M_SDMMC12, RCC_SDMMC12CKSELR, 0, 3, 0),
1694         K_MMUX(M_SPI23, RCC_SPI2S23CKSELR, 0, 3, 0),
1695         K_MMUX(M_SPI45, RCC_SPI2S45CKSELR, 0, 3, 0),
1696         K_MMUX(M_I2C12, RCC_I2C12CKSELR, 0, 3, 0),
1697         K_MMUX(M_I2C35, RCC_I2C35CKSELR, 0, 3, 0),
1698         K_MMUX(M_LPTIM23, RCC_LPTIM23CKSELR, 0, 3, 0),
1699         K_MMUX(M_LPTIM45, RCC_LPTIM45CKSELR, 0, 3, 0),
1700         K_MMUX(M_UART24, RCC_UART24CKSELR, 0, 3, 0),
1701         K_MMUX(M_UART35, RCC_UART35CKSELR, 0, 3, 0),
1702         K_MMUX(M_UART78, RCC_UART78CKSELR, 0, 3, 0),
1703         K_MMUX(M_SAI1, RCC_SAI1CKSELR, 0, 3, 0),
1704         K_MMUX(M_ETHCK, RCC_ETHCKSELR, 0, 2, 0),
1705         K_MMUX(M_I2C46, RCC_I2C46CKSELR, 0, 3, 0),
1706
1707         /*  Kernel simple mux */
1708         K_MUX(M_RNG2, RCC_RNG2CKSELR, 0, 2, 0),
1709         K_MUX(M_SDMMC3, RCC_SDMMC3CKSELR, 0, 3, 0),
1710         K_MUX(M_FMC, RCC_FMCCKSELR, 0, 2, 0),
1711         K_MUX(M_QSPI, RCC_QSPICKSELR, 0, 2, 0),
1712         K_MUX(M_USBPHY, RCC_USBCKSELR, 0, 2, 0),
1713         K_MUX(M_USBO, RCC_USBCKSELR, 4, 1, 0),
1714         K_MUX(M_SPDIF, RCC_SPDIFCKSELR, 0, 2, 0),
1715         K_MUX(M_SPI1, RCC_SPI2S1CKSELR, 0, 3, 0),
1716         K_MUX(M_CEC, RCC_CECCKSELR, 0, 2, 0),
1717         K_MUX(M_LPTIM1, RCC_LPTIM1CKSELR, 0, 3, 0),
1718         K_MUX(M_USART6, RCC_UART6CKSELR, 0, 3, 0),
1719         K_MUX(M_FDCAN, RCC_FDCANCKSELR, 0, 2, 0),
1720         K_MUX(M_SAI2, RCC_SAI2CKSELR, 0, 3, 0),
1721         K_MUX(M_SAI3, RCC_SAI3CKSELR, 0, 3, 0),
1722         K_MUX(M_SAI4, RCC_SAI4CKSELR, 0, 3, 0),
1723         K_MUX(M_ADC12, RCC_ADCCKSELR, 0, 2, 0),
1724         K_MUX(M_DSI, RCC_DSICKSELR, 0, 1, 0),
1725         K_MUX(M_CKPER, RCC_CPERCKSELR, 0, 2, 0),
1726         K_MUX(M_RNG1, RCC_RNG1CKSELR, 0, 2, 0),
1727         K_MUX(M_STGEN, RCC_STGENCKSELR, 0, 2, 0),
1728         K_MUX(M_USART1, RCC_UART1CKSELR, 0, 3, 0),
1729         K_MUX(M_SPI6, RCC_SPI6CKSELR, 0, 3, 0),
1730 };
1731
1732 static const struct clock_config stm32mp1_clock_cfg[] = {
1733         /*  External / Internal Oscillators */
1734         GATE_MP1(CK_HSE, "ck_hse", "clk-hse", 0, RCC_OCENSETR, 8, 0),
1735         /* ck_csi is used by IO compensation and should be critical */
1736         GATE_MP1(CK_CSI, "ck_csi", "clk-csi", CLK_IS_CRITICAL,
1737                  RCC_OCENSETR, 4, 0),
1738         COMPOSITE(CK_HSI, "ck_hsi", PARENT("clk-hsi"), 0,
1739                   _GATE_MP1(RCC_OCENSETR, 0, 0),
1740                   _NO_MUX,
1741                   _DIV(RCC_HSICFGR, 0, 2, CLK_DIVIDER_POWER_OF_TWO |
1742                        CLK_DIVIDER_READ_ONLY, NULL)),
1743         GATE(CK_LSI, "ck_lsi", "clk-lsi", 0, RCC_RDLSICR, 0, 0),
1744         GATE(CK_LSE, "ck_lse", "clk-lse", 0, RCC_BDCR, 0, 0),
1745
1746         FIXED_FACTOR(CK_HSE_DIV2, "clk-hse-div2", "ck_hse", 0, 1, 2),
1747
1748         /* PLLs */
1749         PLL(PLL1, "pll1", ref12_parents, 0, RCC_PLL1CR, RCC_RCK12SELR),
1750         PLL(PLL2, "pll2", ref12_parents, 0, RCC_PLL2CR, RCC_RCK12SELR),
1751         PLL(PLL3, "pll3", ref3_parents, 0, RCC_PLL3CR, RCC_RCK3SELR),
1752         PLL(PLL4, "pll4", ref4_parents, 0, RCC_PLL4CR, RCC_RCK4SELR),
1753
1754         /* ODF */
1755         COMPOSITE(PLL1_P, "pll1_p", PARENT("pll1"), 0,
1756                   _GATE(RCC_PLL1CR, 4, 0),
1757                   _NO_MUX,
1758                   _DIV(RCC_PLL1CFGR2, 0, 7, 0, NULL)),
1759
1760         COMPOSITE(PLL2_P, "pll2_p", PARENT("pll2"), 0,
1761                   _GATE(RCC_PLL2CR, 4, 0),
1762                   _NO_MUX,
1763                   _DIV(RCC_PLL2CFGR2, 0, 7, 0, NULL)),
1764
1765         COMPOSITE(PLL2_Q, "pll2_q", PARENT("pll2"), 0,
1766                   _GATE(RCC_PLL2CR, 5, 0),
1767                   _NO_MUX,
1768                   _DIV(RCC_PLL2CFGR2, 8, 7, 0, NULL)),
1769
1770         COMPOSITE(PLL2_R, "pll2_r", PARENT("pll2"), CLK_IS_CRITICAL,
1771                   _GATE(RCC_PLL2CR, 6, 0),
1772                   _NO_MUX,
1773                   _DIV(RCC_PLL2CFGR2, 16, 7, 0, NULL)),
1774
1775         COMPOSITE(PLL3_P, "pll3_p", PARENT("pll3"), 0,
1776                   _GATE(RCC_PLL3CR, 4, 0),
1777                   _NO_MUX,
1778                   _DIV(RCC_PLL3CFGR2, 0, 7, 0, NULL)),
1779
1780         COMPOSITE(PLL3_Q, "pll3_q", PARENT("pll3"), 0,
1781                   _GATE(RCC_PLL3CR, 5, 0),
1782                   _NO_MUX,
1783                   _DIV(RCC_PLL3CFGR2, 8, 7, 0, NULL)),
1784
1785         COMPOSITE(PLL3_R, "pll3_r", PARENT("pll3"), 0,
1786                   _GATE(RCC_PLL3CR, 6, 0),
1787                   _NO_MUX,
1788                   _DIV(RCC_PLL3CFGR2, 16, 7, 0, NULL)),
1789
1790         COMPOSITE(PLL4_P, "pll4_p", PARENT("pll4"), 0,
1791                   _GATE(RCC_PLL4CR, 4, 0),
1792                   _NO_MUX,
1793                   _DIV(RCC_PLL4CFGR2, 0, 7, 0, NULL)),
1794
1795         COMPOSITE(PLL4_Q, "pll4_q", PARENT("pll4"), 0,
1796                   _GATE(RCC_PLL4CR, 5, 0),
1797                   _NO_MUX,
1798                   _DIV(RCC_PLL4CFGR2, 8, 7, 0, NULL)),
1799
1800         COMPOSITE(PLL4_R, "pll4_r", PARENT("pll4"), 0,
1801                   _GATE(RCC_PLL4CR, 6, 0),
1802                   _NO_MUX,
1803                   _DIV(RCC_PLL4CFGR2, 16, 7, 0, NULL)),
1804
1805         /* MUX system clocks */
1806         MUX(CK_PER, "ck_per", per_src, CLK_OPS_PARENT_ENABLE,
1807             RCC_CPERCKSELR, 0, 2, 0),
1808
1809         MUX(CK_MPU, "ck_mpu", cpu_src, CLK_OPS_PARENT_ENABLE |
1810              CLK_IS_CRITICAL, RCC_MPCKSELR, 0, 2, 0),
1811
1812         COMPOSITE(CK_AXI, "ck_axi", axi_src, CLK_IS_CRITICAL |
1813                    CLK_OPS_PARENT_ENABLE,
1814                    _NO_GATE,
1815                    _MUX(RCC_ASSCKSELR, 0, 2, 0),
1816                    _DIV(RCC_AXIDIVR, 0, 3, 0, axi_div_table)),
1817
1818         COMPOSITE(CK_MCU, "ck_mcu", mcu_src, CLK_IS_CRITICAL |
1819                    CLK_OPS_PARENT_ENABLE,
1820                    _NO_GATE,
1821                    _MUX(RCC_MSSCKSELR, 0, 2, 0),
1822                    _DIV(RCC_MCUDIVR, 0, 4, 0, mcu_div_table)),
1823
1824         DIV_TABLE(NO_ID, "pclk1", "ck_mcu", CLK_IGNORE_UNUSED, RCC_APB1DIVR, 0,
1825                   3, CLK_DIVIDER_READ_ONLY, apb_div_table),
1826
1827         DIV_TABLE(NO_ID, "pclk2", "ck_mcu", CLK_IGNORE_UNUSED, RCC_APB2DIVR, 0,
1828                   3, CLK_DIVIDER_READ_ONLY, apb_div_table),
1829
1830         DIV_TABLE(NO_ID, "pclk3", "ck_mcu", CLK_IGNORE_UNUSED, RCC_APB3DIVR, 0,
1831                   3, CLK_DIVIDER_READ_ONLY, apb_div_table),
1832
1833         DIV_TABLE(NO_ID, "pclk4", "ck_axi", CLK_IGNORE_UNUSED, RCC_APB4DIVR, 0,
1834                   3, CLK_DIVIDER_READ_ONLY, apb_div_table),
1835
1836         DIV_TABLE(NO_ID, "pclk5", "ck_axi", CLK_IGNORE_UNUSED, RCC_APB5DIVR, 0,
1837                   3, CLK_DIVIDER_READ_ONLY, apb_div_table),
1838
1839         /* Kernel Timers */
1840         STM32_CKTIM("ck1_tim", "pclk1", 0, RCC_APB1DIVR, RCC_TIMG1PRER),
1841         STM32_CKTIM("ck2_tim", "pclk2", 0, RCC_APB2DIVR, RCC_TIMG2PRER),
1842
1843         STM32_TIM(TIM2_K, "tim2_k", "ck1_tim", RCC_APB1ENSETR, 0),
1844         STM32_TIM(TIM3_K, "tim3_k", "ck1_tim", RCC_APB1ENSETR, 1),
1845         STM32_TIM(TIM4_K, "tim4_k", "ck1_tim", RCC_APB1ENSETR, 2),
1846         STM32_TIM(TIM5_K, "tim5_k", "ck1_tim", RCC_APB1ENSETR, 3),
1847         STM32_TIM(TIM6_K, "tim6_k", "ck1_tim", RCC_APB1ENSETR, 4),
1848         STM32_TIM(TIM7_K, "tim7_k", "ck1_tim", RCC_APB1ENSETR, 5),
1849         STM32_TIM(TIM12_K, "tim12_k", "ck1_tim", RCC_APB1ENSETR, 6),
1850         STM32_TIM(TIM13_K, "tim13_k", "ck1_tim", RCC_APB1ENSETR, 7),
1851         STM32_TIM(TIM14_K, "tim14_k", "ck1_tim", RCC_APB1ENSETR, 8),
1852         STM32_TIM(TIM1_K, "tim1_k", "ck2_tim", RCC_APB2ENSETR, 0),
1853         STM32_TIM(TIM8_K, "tim8_k", "ck2_tim", RCC_APB2ENSETR, 1),
1854         STM32_TIM(TIM15_K, "tim15_k", "ck2_tim", RCC_APB2ENSETR, 2),
1855         STM32_TIM(TIM16_K, "tim16_k", "ck2_tim", RCC_APB2ENSETR, 3),
1856         STM32_TIM(TIM17_K, "tim17_k", "ck2_tim", RCC_APB2ENSETR, 4),
1857
1858         /* Peripheral clocks */
1859         PCLK(TIM2, "tim2", "pclk1", CLK_IGNORE_UNUSED, G_TIM2),
1860         PCLK(TIM3, "tim3", "pclk1", CLK_IGNORE_UNUSED, G_TIM3),
1861         PCLK(TIM4, "tim4", "pclk1", CLK_IGNORE_UNUSED, G_TIM4),
1862         PCLK(TIM5, "tim5", "pclk1", CLK_IGNORE_UNUSED, G_TIM5),
1863         PCLK(TIM6, "tim6", "pclk1", CLK_IGNORE_UNUSED, G_TIM6),
1864         PCLK(TIM7, "tim7", "pclk1", CLK_IGNORE_UNUSED, G_TIM7),
1865         PCLK(TIM12, "tim12", "pclk1", CLK_IGNORE_UNUSED, G_TIM12),
1866         PCLK(TIM13, "tim13", "pclk1", CLK_IGNORE_UNUSED, G_TIM13),
1867         PCLK(TIM14, "tim14", "pclk1", CLK_IGNORE_UNUSED, G_TIM14),
1868         PCLK(LPTIM1, "lptim1", "pclk1", 0, G_LPTIM1),
1869         PCLK(SPI2, "spi2", "pclk1", 0, G_SPI2),
1870         PCLK(SPI3, "spi3", "pclk1", 0, G_SPI3),
1871         PCLK(USART2, "usart2", "pclk1", 0, G_USART2),
1872         PCLK(USART3, "usart3", "pclk1", 0, G_USART3),
1873         PCLK(UART4, "uart4", "pclk1", 0, G_UART4),
1874         PCLK(UART5, "uart5", "pclk1", 0, G_UART5),
1875         PCLK(UART7, "uart7", "pclk1", 0, G_UART7),
1876         PCLK(UART8, "uart8", "pclk1", 0, G_UART8),
1877         PCLK(I2C1, "i2c1", "pclk1", 0, G_I2C1),
1878         PCLK(I2C2, "i2c2", "pclk1", 0, G_I2C2),
1879         PCLK(I2C3, "i2c3", "pclk1", 0, G_I2C3),
1880         PCLK(I2C5, "i2c5", "pclk1", 0, G_I2C5),
1881         PCLK(SPDIF, "spdif", "pclk1", 0, G_SPDIF),
1882         PCLK(CEC, "cec", "pclk1", 0, G_CEC),
1883         PCLK(DAC12, "dac12", "pclk1", 0, G_DAC12),
1884         PCLK(MDIO, "mdio", "pclk1", 0, G_MDIO),
1885         PCLK(TIM1, "tim1", "pclk2", CLK_IGNORE_UNUSED, G_TIM1),
1886         PCLK(TIM8, "tim8", "pclk2", CLK_IGNORE_UNUSED, G_TIM8),
1887         PCLK(TIM15, "tim15", "pclk2", CLK_IGNORE_UNUSED, G_TIM15),
1888         PCLK(TIM16, "tim16", "pclk2", CLK_IGNORE_UNUSED, G_TIM16),
1889         PCLK(TIM17, "tim17", "pclk2", CLK_IGNORE_UNUSED, G_TIM17),
1890         PCLK(SPI1, "spi1", "pclk2", 0, G_SPI1),
1891         PCLK(SPI4, "spi4", "pclk2", 0, G_SPI4),
1892         PCLK(SPI5, "spi5", "pclk2", 0, G_SPI5),
1893         PCLK(USART6, "usart6", "pclk2", 0, G_USART6),
1894         PCLK(SAI1, "sai1", "pclk2", 0, G_SAI1),
1895         PCLK(SAI2, "sai2", "pclk2", 0, G_SAI2),
1896         PCLK(SAI3, "sai3", "pclk2", 0, G_SAI3),
1897         PCLK(DFSDM, "dfsdm", "pclk2", 0, G_DFSDM),
1898         PCLK(FDCAN, "fdcan", "pclk2", 0, G_FDCAN),
1899         PCLK(LPTIM2, "lptim2", "pclk3", 0, G_LPTIM2),
1900         PCLK(LPTIM3, "lptim3", "pclk3", 0, G_LPTIM3),
1901         PCLK(LPTIM4, "lptim4", "pclk3", 0, G_LPTIM4),
1902         PCLK(LPTIM5, "lptim5", "pclk3", 0, G_LPTIM5),
1903         PCLK(SAI4, "sai4", "pclk3", 0, G_SAI4),
1904         PCLK(SYSCFG, "syscfg", "pclk3", 0, G_SYSCFG),
1905         PCLK(VREF, "vref", "pclk3", 13, G_VREF),
1906         PCLK(TMPSENS, "tmpsens", "pclk3", 0, G_TMPSENS),
1907         PCLK(PMBCTRL, "pmbctrl", "pclk3", 0, G_PMBCTRL),
1908         PCLK(HDP, "hdp", "pclk3", 0, G_HDP),
1909         PCLK(LTDC, "ltdc", "pclk4", 0, G_LTDC),
1910         PCLK(DSI, "dsi", "pclk4", 0, G_DSI),
1911         PCLK(IWDG2, "iwdg2", "pclk4", 0, G_IWDG2),
1912         PCLK(USBPHY, "usbphy", "pclk4", 0, G_USBPHY),
1913         PCLK(STGENRO, "stgenro", "pclk4", 0, G_STGENRO),
1914         PCLK(SPI6, "spi6", "pclk5", 0, G_SPI6),
1915         PCLK(I2C4, "i2c4", "pclk5", 0, G_I2C4),
1916         PCLK(I2C6, "i2c6", "pclk5", 0, G_I2C6),
1917         PCLK(USART1, "usart1", "pclk5", 0, G_USART1),
1918         PCLK(RTCAPB, "rtcapb", "pclk5", CLK_IGNORE_UNUSED |
1919              CLK_IS_CRITICAL, G_RTCAPB),
1920         PCLK(TZC1, "tzc1", "ck_axi", CLK_IGNORE_UNUSED, G_TZC1),
1921         PCLK(TZC2, "tzc2", "ck_axi", CLK_IGNORE_UNUSED, G_TZC2),
1922         PCLK(TZPC, "tzpc", "pclk5", CLK_IGNORE_UNUSED, G_TZPC),
1923         PCLK(IWDG1, "iwdg1", "pclk5", 0, G_IWDG1),
1924         PCLK(BSEC, "bsec", "pclk5", CLK_IGNORE_UNUSED, G_BSEC),
1925         PCLK(STGEN, "stgen", "pclk5", CLK_IGNORE_UNUSED, G_STGEN),
1926         PCLK(DMA1, "dma1", "ck_mcu", 0, G_DMA1),
1927         PCLK(DMA2, "dma2", "ck_mcu",  0, G_DMA2),
1928         PCLK(DMAMUX, "dmamux", "ck_mcu", 0, G_DMAMUX),
1929         PCLK(ADC12, "adc12", "ck_mcu", 0, G_ADC12),
1930         PCLK(USBO, "usbo", "ck_mcu", 0, G_USBO),
1931         PCLK(SDMMC3, "sdmmc3", "ck_mcu", 0, G_SDMMC3),
1932         PCLK(DCMI, "dcmi", "ck_mcu", 0, G_DCMI),
1933         PCLK(CRYP2, "cryp2", "ck_mcu", 0, G_CRYP2),
1934         PCLK(HASH2, "hash2", "ck_mcu", 0, G_HASH2),
1935         PCLK(RNG2, "rng2", "ck_mcu", 0, G_RNG2),
1936         PCLK(CRC2, "crc2", "ck_mcu", 0, G_CRC2),
1937         PCLK(HSEM, "hsem", "ck_mcu", 0, G_HSEM),
1938         PCLK(IPCC, "ipcc", "ck_mcu", 0, G_IPCC),
1939         PCLK(GPIOA, "gpioa", "ck_mcu", 0, G_GPIOA),
1940         PCLK(GPIOB, "gpiob", "ck_mcu", 0, G_GPIOB),
1941         PCLK(GPIOC, "gpioc", "ck_mcu", 0, G_GPIOC),
1942         PCLK(GPIOD, "gpiod", "ck_mcu", 0, G_GPIOD),
1943         PCLK(GPIOE, "gpioe", "ck_mcu", 0, G_GPIOE),
1944         PCLK(GPIOF, "gpiof", "ck_mcu", 0, G_GPIOF),
1945         PCLK(GPIOG, "gpiog", "ck_mcu", 0, G_GPIOG),
1946         PCLK(GPIOH, "gpioh", "ck_mcu", 0, G_GPIOH),
1947         PCLK(GPIOI, "gpioi", "ck_mcu", 0, G_GPIOI),
1948         PCLK(GPIOJ, "gpioj", "ck_mcu", 0, G_GPIOJ),
1949         PCLK(GPIOK, "gpiok", "ck_mcu", 0, G_GPIOK),
1950         PCLK(GPIOZ, "gpioz", "ck_axi", CLK_IGNORE_UNUSED, G_GPIOZ),
1951         PCLK(CRYP1, "cryp1", "ck_axi", CLK_IGNORE_UNUSED, G_CRYP1),
1952         PCLK(HASH1, "hash1", "ck_axi", CLK_IGNORE_UNUSED, G_HASH1),
1953         PCLK(RNG1, "rng1", "ck_axi", 0, G_RNG1),
1954         PCLK(BKPSRAM, "bkpsram", "ck_axi", CLK_IGNORE_UNUSED, G_BKPSRAM),
1955         PCLK(MDMA, "mdma", "ck_axi", 0, G_MDMA),
1956         PCLK(GPU, "gpu", "ck_axi", 0, G_GPU),
1957         PCLK(ETHTX, "ethtx", "ck_axi", 0, G_ETHTX),
1958         PCLK(ETHRX, "ethrx", "ck_axi", 0, G_ETHRX),
1959         PCLK(ETHMAC, "ethmac", "ck_axi", 0, G_ETHMAC),
1960         PCLK(FMC, "fmc", "ck_axi", CLK_IGNORE_UNUSED, G_FMC),
1961         PCLK(QSPI, "qspi", "ck_axi", CLK_IGNORE_UNUSED, G_QSPI),
1962         PCLK(SDMMC1, "sdmmc1", "ck_axi", 0, G_SDMMC1),
1963         PCLK(SDMMC2, "sdmmc2", "ck_axi", 0, G_SDMMC2),
1964         PCLK(CRC1, "crc1", "ck_axi", 0, G_CRC1),
1965         PCLK(USBH, "usbh", "ck_axi", 0, G_USBH),
1966         PCLK(ETHSTP, "ethstp", "ck_axi", 0, G_ETHSTP),
1967         PCLK(DDRPERFM, "ddrperfm", "pclk4", 0, G_DDRPERFM),
1968
1969         /* Kernel clocks */
1970         KCLK(SDMMC1_K, "sdmmc1_k", sdmmc12_src, 0, G_SDMMC1, M_SDMMC12),
1971         KCLK(SDMMC2_K, "sdmmc2_k", sdmmc12_src, 0, G_SDMMC2, M_SDMMC12),
1972         KCLK(SDMMC3_K, "sdmmc3_k", sdmmc3_src, 0, G_SDMMC3, M_SDMMC3),
1973         KCLK(FMC_K, "fmc_k", fmc_src, 0, G_FMC, M_FMC),
1974         KCLK(QSPI_K, "qspi_k", qspi_src, 0, G_QSPI, M_QSPI),
1975         KCLK(RNG1_K, "rng1_k", rng_src, 0, G_RNG1, M_RNG1),
1976         KCLK(RNG2_K, "rng2_k", rng_src, 0, G_RNG2, M_RNG2),
1977         KCLK(USBPHY_K, "usbphy_k", usbphy_src, 0, G_USBPHY, M_USBPHY),
1978         KCLK(STGEN_K, "stgen_k", stgen_src, CLK_IS_CRITICAL, G_STGEN, M_STGEN),
1979         KCLK(SPDIF_K, "spdif_k", spdif_src, 0, G_SPDIF, M_SPDIF),
1980         KCLK(SPI1_K, "spi1_k", spi123_src, 0, G_SPI1, M_SPI1),
1981         KCLK(SPI2_K, "spi2_k", spi123_src, 0, G_SPI2, M_SPI23),
1982         KCLK(SPI3_K, "spi3_k", spi123_src, 0, G_SPI3, M_SPI23),
1983         KCLK(SPI4_K, "spi4_k", spi45_src, 0, G_SPI4, M_SPI45),
1984         KCLK(SPI5_K, "spi5_k", spi45_src, 0, G_SPI5, M_SPI45),
1985         KCLK(SPI6_K, "spi6_k", spi6_src, 0, G_SPI6, M_SPI6),
1986         KCLK(CEC_K, "cec_k", cec_src, 0, G_CEC, M_CEC),
1987         KCLK(I2C1_K, "i2c1_k", i2c12_src, 0, G_I2C1, M_I2C12),
1988         KCLK(I2C2_K, "i2c2_k", i2c12_src, 0, G_I2C2, M_I2C12),
1989         KCLK(I2C3_K, "i2c3_k", i2c35_src, 0, G_I2C3, M_I2C35),
1990         KCLK(I2C5_K, "i2c5_k", i2c35_src, 0, G_I2C5, M_I2C35),
1991         KCLK(I2C4_K, "i2c4_k", i2c46_src, 0, G_I2C4, M_I2C46),
1992         KCLK(I2C6_K, "i2c6_k", i2c46_src, 0, G_I2C6, M_I2C46),
1993         KCLK(LPTIM1_K, "lptim1_k", lptim1_src, 0, G_LPTIM1, M_LPTIM1),
1994         KCLK(LPTIM2_K, "lptim2_k", lptim23_src, 0, G_LPTIM2, M_LPTIM23),
1995         KCLK(LPTIM3_K, "lptim3_k", lptim23_src, 0, G_LPTIM3, M_LPTIM23),
1996         KCLK(LPTIM4_K, "lptim4_k", lptim45_src, 0, G_LPTIM4, M_LPTIM45),
1997         KCLK(LPTIM5_K, "lptim5_k", lptim45_src, 0, G_LPTIM5, M_LPTIM45),
1998         KCLK(USART1_K, "usart1_k", usart1_src, 0, G_USART1, M_USART1),
1999         KCLK(USART2_K, "usart2_k", usart234578_src, 0, G_USART2, M_UART24),
2000         KCLK(USART3_K, "usart3_k", usart234578_src, 0, G_USART3, M_UART35),
2001         KCLK(UART4_K, "uart4_k", usart234578_src, 0, G_UART4, M_UART24),
2002         KCLK(UART5_K, "uart5_k", usart234578_src, 0, G_UART5, M_UART35),
2003         KCLK(USART6_K, "uart6_k", usart6_src, 0, G_USART6, M_USART6),
2004         KCLK(UART7_K, "uart7_k", usart234578_src, 0, G_UART7, M_UART78),
2005         KCLK(UART8_K, "uart8_k", usart234578_src, 0, G_UART8, M_UART78),
2006         KCLK(FDCAN_K, "fdcan_k", fdcan_src, 0, G_FDCAN, M_FDCAN),
2007         KCLK(SAI1_K, "sai1_k", sai_src, 0, G_SAI1, M_SAI1),
2008         KCLK(SAI2_K, "sai2_k", sai2_src, 0, G_SAI2, M_SAI2),
2009         KCLK(SAI3_K, "sai3_k", sai_src, 0, G_SAI3, M_SAI3),
2010         KCLK(SAI4_K, "sai4_k", sai_src, 0, G_SAI4, M_SAI4),
2011         KCLK(ADC12_K, "adc12_k", adc12_src, 0, G_ADC12, M_ADC12),
2012         KCLK(DSI_K, "dsi_k", dsi_src, 0, G_DSI, M_DSI),
2013         KCLK(ADFSDM_K, "adfsdm_k", sai_src, 0, G_ADFSDM, M_SAI1),
2014         KCLK(USBO_K, "usbo_k", usbo_src, 0, G_USBO, M_USBO),
2015         KCLK(ETHCK_K, "ethck_k", eth_src, 0, G_ETHCK, M_ETHCK),
2016
2017         /* Particulary Kernel Clocks (no mux or no gate) */
2018         MGATE_MP1(DFSDM_K, "dfsdm_k", "ck_mcu", 0, G_DFSDM),
2019         MGATE_MP1(DSI_PX, "dsi_px", "pll4_q", CLK_SET_RATE_PARENT, G_DSI),
2020         MGATE_MP1(LTDC_PX, "ltdc_px", "pll4_q", CLK_SET_RATE_PARENT, G_LTDC),
2021         MGATE_MP1(GPU_K, "gpu_k", "pll2_q", 0, G_GPU),
2022         MGATE_MP1(DAC12_K, "dac12_k", "ck_lsi", 0, G_DAC12),
2023
2024         COMPOSITE(ETHPTP_K, "ethptp_k", eth_src, CLK_OPS_PARENT_ENABLE |
2025                   CLK_SET_RATE_NO_REPARENT,
2026                   _NO_GATE,
2027                   _MMUX(M_ETHCK),
2028                   _DIV(RCC_ETHCKSELR, 4, 4, 0, NULL)),
2029
2030         /* RTC clock */
2031         COMPOSITE(RTC, "ck_rtc", rtc_src, CLK_OPS_PARENT_ENABLE,
2032                   _GATE(RCC_BDCR, 20, 0),
2033                   _MUX(RCC_BDCR, 16, 2, 0),
2034                   _DIV_RTC(RCC_RTCDIVR, 0, 6, 0, NULL)),
2035
2036         /* MCO clocks */
2037         COMPOSITE(CK_MCO1, "ck_mco1", mco1_src, CLK_OPS_PARENT_ENABLE |
2038                   CLK_SET_RATE_NO_REPARENT,
2039                   _GATE(RCC_MCO1CFGR, 12, 0),
2040                   _MUX(RCC_MCO1CFGR, 0, 3, 0),
2041                   _DIV(RCC_MCO1CFGR, 4, 4, 0, NULL)),
2042
2043         COMPOSITE(CK_MCO2, "ck_mco2", mco2_src, CLK_OPS_PARENT_ENABLE |
2044                   CLK_SET_RATE_NO_REPARENT,
2045                   _GATE(RCC_MCO2CFGR, 12, 0),
2046                   _MUX(RCC_MCO2CFGR, 0, 3, 0),
2047                   _DIV(RCC_MCO2CFGR, 4, 4, 0, NULL)),
2048
2049         /* Debug clocks */
2050         GATE(CK_DBG, "ck_sys_dbg", "ck_axi", CLK_IGNORE_UNUSED,
2051              RCC_DBGCFGR, 8, 0),
2052
2053         COMPOSITE(CK_TRACE, "ck_trace", ck_trace_src, CLK_OPS_PARENT_ENABLE,
2054                   _GATE(RCC_DBGCFGR, 9, 0),
2055                   _NO_MUX,
2056                   _DIV(RCC_DBGCFGR, 0, 3, 0, ck_trace_div_table)),
2057 };
2058
2059 static const u32 stm32mp1_clock_secured[] = {
2060         CK_HSE,
2061         CK_HSI,
2062         CK_CSI,
2063         CK_LSI,
2064         CK_LSE,
2065         PLL1,
2066         PLL2,
2067         PLL1_P,
2068         PLL2_P,
2069         PLL2_Q,
2070         PLL2_R,
2071         CK_MPU,
2072         CK_AXI,
2073         SPI6,
2074         I2C4,
2075         I2C6,
2076         USART1,
2077         RTCAPB,
2078         TZC1,
2079         TZC2,
2080         TZPC,
2081         IWDG1,
2082         BSEC,
2083         STGEN,
2084         GPIOZ,
2085         CRYP1,
2086         HASH1,
2087         RNG1,
2088         BKPSRAM,
2089         RNG1_K,
2090         STGEN_K,
2091         SPI6_K,
2092         I2C4_K,
2093         I2C6_K,
2094         USART1_K,
2095         RTC,
2096 };
2097
2098 static bool stm32_check_security(const struct clock_config *cfg)
2099 {
2100         int i;
2101
2102         for (i = 0; i < ARRAY_SIZE(stm32mp1_clock_secured); i++)
2103                 if (cfg->id == stm32mp1_clock_secured[i])
2104                         return true;
2105         return false;
2106 }
2107
2108 struct stm32_rcc_match_data {
2109         const struct clock_config *cfg;
2110         unsigned int num;
2111         unsigned int maxbinding;
2112         u32 clear_offset;
2113         bool (*check_security)(const struct clock_config *cfg);
2114 };
2115
2116 static struct stm32_rcc_match_data stm32mp1_data = {
2117         .cfg            = stm32mp1_clock_cfg,
2118         .num            = ARRAY_SIZE(stm32mp1_clock_cfg),
2119         .maxbinding     = STM32MP1_LAST_CLK,
2120         .clear_offset   = RCC_CLR,
2121 };
2122
2123 static struct stm32_rcc_match_data stm32mp1_data_secure = {
2124         .cfg            = stm32mp1_clock_cfg,
2125         .num            = ARRAY_SIZE(stm32mp1_clock_cfg),
2126         .maxbinding     = STM32MP1_LAST_CLK,
2127         .clear_offset   = RCC_CLR,
2128         .check_security = &stm32_check_security
2129 };
2130
2131 static const struct of_device_id stm32mp1_match_data[] = {
2132         {
2133                 .compatible = "st,stm32mp1-rcc",
2134                 .data = &stm32mp1_data,
2135         },
2136         {
2137                 .compatible = "st,stm32mp1-rcc-secure",
2138                 .data = &stm32mp1_data_secure,
2139         },
2140         { }
2141 };
2142 MODULE_DEVICE_TABLE(of, stm32mp1_match_data);
2143
2144 static int stm32_register_hw_clk(struct device *dev,
2145                                  struct clk_hw_onecell_data *clk_data,
2146                                  void __iomem *base, spinlock_t *lock,
2147                                  const struct clock_config *cfg)
2148 {
2149         struct clk_hw **hws;
2150         struct clk_hw *hw = ERR_PTR(-ENOENT);
2151
2152         hws = clk_data->hws;
2153
2154         if (cfg->func)
2155                 hw = (*cfg->func)(dev, clk_data, base, lock, cfg);
2156
2157         if (IS_ERR(hw)) {
2158                 pr_err("Unable to register %s\n", cfg->name);
2159                 return  PTR_ERR(hw);
2160         }
2161
2162         if (cfg->id != NO_ID)
2163                 hws[cfg->id] = hw;
2164
2165         return 0;
2166 }
2167
2168 #define STM32_RESET_ID_MASK GENMASK(15, 0)
2169
2170 struct stm32_reset_data {
2171         /* reset lock */
2172         spinlock_t                      lock;
2173         struct reset_controller_dev     rcdev;
2174         void __iomem                    *membase;
2175         u32                             clear_offset;
2176 };
2177
2178 static inline struct stm32_reset_data *
2179 to_stm32_reset_data(struct reset_controller_dev *rcdev)
2180 {
2181         return container_of(rcdev, struct stm32_reset_data, rcdev);
2182 }
2183
2184 static int stm32_reset_update(struct reset_controller_dev *rcdev,
2185                               unsigned long id, bool assert)
2186 {
2187         struct stm32_reset_data *data = to_stm32_reset_data(rcdev);
2188         int reg_width = sizeof(u32);
2189         int bank = id / (reg_width * BITS_PER_BYTE);
2190         int offset = id % (reg_width * BITS_PER_BYTE);
2191
2192         if (data->clear_offset) {
2193                 void __iomem *addr;
2194
2195                 addr = data->membase + (bank * reg_width);
2196                 if (!assert)
2197                         addr += data->clear_offset;
2198
2199                 writel(BIT(offset), addr);
2200
2201         } else {
2202                 unsigned long flags;
2203                 u32 reg;
2204
2205                 spin_lock_irqsave(&data->lock, flags);
2206
2207                 reg = readl(data->membase + (bank * reg_width));
2208
2209                 if (assert)
2210                         reg |= BIT(offset);
2211                 else
2212                         reg &= ~BIT(offset);
2213
2214                 writel(reg, data->membase + (bank * reg_width));
2215
2216                 spin_unlock_irqrestore(&data->lock, flags);
2217         }
2218
2219         return 0;
2220 }
2221
2222 static int stm32_reset_assert(struct reset_controller_dev *rcdev,
2223                               unsigned long id)
2224 {
2225         return stm32_reset_update(rcdev, id, true);
2226 }
2227
2228 static int stm32_reset_deassert(struct reset_controller_dev *rcdev,
2229                                 unsigned long id)
2230 {
2231         return stm32_reset_update(rcdev, id, false);
2232 }
2233
2234 static int stm32_reset_status(struct reset_controller_dev *rcdev,
2235                               unsigned long id)
2236 {
2237         struct stm32_reset_data *data = to_stm32_reset_data(rcdev);
2238         int reg_width = sizeof(u32);
2239         int bank = id / (reg_width * BITS_PER_BYTE);
2240         int offset = id % (reg_width * BITS_PER_BYTE);
2241         u32 reg;
2242
2243         reg = readl(data->membase + (bank * reg_width));
2244
2245         return !!(reg & BIT(offset));
2246 }
2247
2248 static const struct reset_control_ops stm32_reset_ops = {
2249         .assert         = stm32_reset_assert,
2250         .deassert       = stm32_reset_deassert,
2251         .status         = stm32_reset_status,
2252 };
2253
2254 static int stm32_rcc_reset_init(struct device *dev, void __iomem *base,
2255                                 const struct of_device_id *match)
2256 {
2257         const struct stm32_rcc_match_data *data = match->data;
2258         struct stm32_reset_data *reset_data = NULL;
2259
2260         data = match->data;
2261
2262         reset_data = kzalloc(sizeof(*reset_data), GFP_KERNEL);
2263         if (!reset_data)
2264                 return -ENOMEM;
2265
2266         spin_lock_init(&reset_data->lock);
2267         reset_data->membase = base;
2268         reset_data->rcdev.owner = THIS_MODULE;
2269         reset_data->rcdev.ops = &stm32_reset_ops;
2270         reset_data->rcdev.of_node = dev_of_node(dev);
2271         reset_data->rcdev.nr_resets = STM32_RESET_ID_MASK;
2272         reset_data->clear_offset = data->clear_offset;
2273
2274         return reset_controller_register(&reset_data->rcdev);
2275 }
2276
2277 static int stm32_rcc_clock_init(struct device *dev, void __iomem *base,
2278                                 const struct of_device_id *match)
2279 {
2280         const struct stm32_rcc_match_data *data = match->data;
2281         struct clk_hw_onecell_data *clk_data;
2282         struct clk_hw **hws;
2283         int err, n, max_binding;
2284
2285         max_binding =  data->maxbinding;
2286
2287         clk_data = devm_kzalloc(dev, struct_size(clk_data, hws, max_binding),
2288                                 GFP_KERNEL);
2289         if (!clk_data)
2290                 return -ENOMEM;
2291
2292         clk_data->num = max_binding;
2293
2294         hws = clk_data->hws;
2295
2296         for (n = 0; n < max_binding; n++)
2297                 hws[n] = ERR_PTR(-ENOENT);
2298
2299         for (n = 0; n < data->num; n++) {
2300                 if (data->check_security && data->check_security(&data->cfg[n]))
2301                         continue;
2302
2303                 err = stm32_register_hw_clk(dev, clk_data, base, &rlock,
2304                                             &data->cfg[n]);
2305                 if (err) {
2306                         dev_err(dev, "Can't register clk %s: %d\n",
2307                                 data->cfg[n].name, err);
2308
2309                         return err;
2310                 }
2311         }
2312
2313         return of_clk_add_hw_provider(dev_of_node(dev), of_clk_hw_onecell_get, clk_data);
2314 }
2315
2316 static int stm32_rcc_init(struct device *dev, void __iomem *base,
2317                           const struct of_device_id *match_data)
2318 {
2319         const struct of_device_id *match;
2320         int err;
2321
2322         match = of_match_node(match_data, dev_of_node(dev));
2323         if (!match) {
2324                 dev_err(dev, "match data not found\n");
2325                 return -ENODEV;
2326         }
2327
2328         /* RCC Reset Configuration */
2329         err = stm32_rcc_reset_init(dev, base, match);
2330         if (err) {
2331                 pr_err("stm32mp1 reset failed to initialize\n");
2332                 return err;
2333         }
2334
2335         /* RCC Clock Configuration */
2336         err = stm32_rcc_clock_init(dev, base, match);
2337         if (err) {
2338                 pr_err("stm32mp1 clock failed to initialize\n");
2339                 return err;
2340         }
2341
2342         return 0;
2343 }
2344
2345 static int stm32mp1_rcc_init(struct device *dev)
2346 {
2347         void __iomem *base;
2348         int ret;
2349
2350         base = of_iomap(dev_of_node(dev), 0);
2351         if (!base) {
2352                 pr_err("%pOFn: unable to map resource", dev_of_node(dev));
2353                 ret = -ENOMEM;
2354                 goto out;
2355         }
2356
2357         ret = stm32_rcc_init(dev, base, stm32mp1_match_data);
2358
2359 out:
2360         if (ret) {
2361                 if (base)
2362                         iounmap(base);
2363
2364                 of_node_put(dev_of_node(dev));
2365         }
2366
2367         return ret;
2368 }
2369
2370 static int get_clock_deps(struct device *dev)
2371 {
2372         static const char * const clock_deps_name[] = {
2373                 "hsi", "hse", "csi", "lsi", "lse",
2374         };
2375         size_t deps_size = sizeof(struct clk *) * ARRAY_SIZE(clock_deps_name);
2376         struct clk **clk_deps;
2377         int i;
2378
2379         clk_deps = devm_kzalloc(dev, deps_size, GFP_KERNEL);
2380         if (!clk_deps)
2381                 return -ENOMEM;
2382
2383         for (i = 0; i < ARRAY_SIZE(clock_deps_name); i++) {
2384                 struct clk *clk = of_clk_get_by_name(dev_of_node(dev),
2385                                                      clock_deps_name[i]);
2386
2387                 if (IS_ERR(clk)) {
2388                         if (PTR_ERR(clk) != -EINVAL && PTR_ERR(clk) != -ENOENT)
2389                                 return PTR_ERR(clk);
2390                 } else {
2391                         /* Device gets a reference count on the clock */
2392                         clk_deps[i] = devm_clk_get(dev, __clk_get_name(clk));
2393                         clk_put(clk);
2394                 }
2395         }
2396
2397         return 0;
2398 }
2399
2400 static int stm32mp1_rcc_clocks_probe(struct platform_device *pdev)
2401 {
2402         struct device *dev = &pdev->dev;
2403         int ret = get_clock_deps(dev);
2404
2405         if (!ret)
2406                 ret = stm32mp1_rcc_init(dev);
2407
2408         return ret;
2409 }
2410
2411 static int stm32mp1_rcc_clocks_remove(struct platform_device *pdev)
2412 {
2413         struct device *dev = &pdev->dev;
2414         struct device_node *child, *np = dev_of_node(dev);
2415
2416         for_each_available_child_of_node(np, child)
2417                 of_clk_del_provider(child);
2418
2419         return 0;
2420 }
2421
2422 static struct platform_driver stm32mp1_rcc_clocks_driver = {
2423         .driver = {
2424                 .name = "stm32mp1_rcc",
2425                 .of_match_table = stm32mp1_match_data,
2426         },
2427         .probe = stm32mp1_rcc_clocks_probe,
2428         .remove = stm32mp1_rcc_clocks_remove,
2429 };
2430
2431 static int __init stm32mp1_clocks_init(void)
2432 {
2433         return platform_driver_register(&stm32mp1_rcc_clocks_driver);
2434 }
2435 core_initcall(stm32mp1_clocks_init);