aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGabriel Fernandez <gabriel.fernandez@st.com>2018-03-08 11:54:02 -0500
committerMichael Turquette <mturquette@baylibre.com>2018-03-11 18:40:33 -0400
commit1f80590b6bdabffc90b9ed6a2d05dd9d24122879 (patch)
tree1c62332733e520721dd2d8b8457bcf33c1a9f1ea
parent799b6a125ef0187579611bc153558bf01766d103 (diff)
clk: stm32mp1: add Peripheral & Kernel Clocks
Each peripheral requires a bus interface clock. Some peripherals need also a dedicated clock for their communication interface, this clock is generally asynchronous with respect to the bus interface clock (peripheral clock), and is named kernel clock. For each IP, Peripheral clock and Kernel are generally gating with same gate. Also, Kernel clocks can share a same multiplexer. This patch introduces a mechanism to manage a gate with several clocks and to manage a shared multiplexer (mgate and mmux). Signed-off-by: Gabriel Fernandez <gabriel.fernandez@st.com> Signed-off-by: Michael Turquette <mturquette@baylibre.com>
-rw-r--r--drivers/clk/clk-stm32mp1.c847
1 files changed, 820 insertions, 27 deletions
diff --git a/drivers/clk/clk-stm32mp1.c b/drivers/clk/clk-stm32mp1.c
index 0470a1364eee..b5379a224183 100644
--- a/drivers/clk/clk-stm32mp1.c
+++ b/drivers/clk/clk-stm32mp1.c
@@ -132,6 +132,122 @@ static const char * const mcu_src[] = {
132 "ck_hsi", "ck_hse", "ck_csi", "pll3_p" 132 "ck_hsi", "ck_hse", "ck_csi", "pll3_p"
133}; 133};
134 134
135static const char * const sdmmc12_src[] = {
136 "ck_axi", "pll3_r", "pll4_p", "ck_hsi"
137};
138
139static const char * const sdmmc3_src[] = {
140 "ck_mcu", "pll3_r", "pll4_p", "ck_hsi"
141};
142
143static const char * const fmc_src[] = {
144 "ck_axi", "pll3_r", "pll4_p", "ck_per"
145};
146
147static const char * const qspi_src[] = {
148 "ck_axi", "pll3_r", "pll4_p", "ck_per"
149};
150
151static const char * const eth_src[] = {
152 "pll4_p", "pll3_q"
153};
154
155static const char * const rng_src[] = {
156 "ck_csi", "pll4_r", "ck_lse", "ck_lsi"
157};
158
159static const char * const usbphy_src[] = {
160 "ck_hse", "pll4_r", "clk-hse-div2"
161};
162
163static const char * const usbo_src[] = {
164 "pll4_r", "ck_usbo_48m"
165};
166
167static const char * const stgen_src[] = {
168 "ck_hsi", "ck_hse"
169};
170
171static const char * const spdif_src[] = {
172 "pll4_p", "pll3_q", "ck_hsi"
173};
174
175static const char * const spi123_src[] = {
176 "pll4_p", "pll3_q", "i2s_ckin", "ck_per", "pll3_r"
177};
178
179static const char * const spi45_src[] = {
180 "pclk2", "pll4_q", "ck_hsi", "ck_csi", "ck_hse"
181};
182
183static const char * const spi6_src[] = {
184 "pclk5", "pll4_q", "ck_hsi", "ck_csi", "ck_hse", "pll3_q"
185};
186
187static const char * const cec_src[] = {
188 "ck_lse", "ck_lsi", "ck_csi"
189};
190
191static const char * const i2c12_src[] = {
192 "pclk1", "pll4_r", "ck_hsi", "ck_csi"
193};
194
195static const char * const i2c35_src[] = {
196 "pclk1", "pll4_r", "ck_hsi", "ck_csi"
197};
198
199static const char * const i2c46_src[] = {
200 "pclk5", "pll3_q", "ck_hsi", "ck_csi"
201};
202
203static const char * const lptim1_src[] = {
204 "pclk1", "pll4_p", "pll3_q", "ck_lse", "ck_lsi", "ck_per"
205};
206
207static const char * const lptim23_src[] = {
208 "pclk3", "pll4_q", "ck_per", "ck_lse", "ck_lsi"
209};
210
211static const char * const lptim45_src[] = {
212 "pclk3", "pll4_p", "pll3_q", "ck_lse", "ck_lsi", "ck_per"
213};
214
215static const char * const usart1_src[] = {
216 "pclk5", "pll3_q", "ck_hsi", "ck_csi", "pll4_q", "ck_hse"
217};
218
219const char * const usart234578_src[] = {
220 "pclk1", "pll4_q", "ck_hsi", "ck_csi", "ck_hse"
221};
222
223static const char * const usart6_src[] = {
224 "pclk2", "pll4_q", "ck_hsi", "ck_csi", "ck_hse"
225};
226
227static const char * const dfsdm_src[] = {
228 "pclk2", "ck_mcu"
229};
230
231static const char * const fdcan_src[] = {
232 "ck_hse", "pll3_q", "pll4_q"
233};
234
235static const char * const sai_src[] = {
236 "pll4_q", "pll3_q", "i2s_ckin", "ck_per"
237};
238
239static const char * const sai2_src[] = {
240 "pll4_q", "pll3_q", "i2s_ckin", "ck_per", "spdif_ck_symb"
241};
242
243static const char * const adc12_src[] = {
244 "pll4_q", "ck_per"
245};
246
247static const char * const dsi_src[] = {
248 "ck_dsi_phy", "pll4_p"
249};
250
135static const struct clk_div_table axi_div_table[] = { 251static const struct clk_div_table axi_div_table[] = {
136 { 0, 1 }, { 1, 2 }, { 2, 3 }, { 3, 4 }, 252 { 0, 1 }, { 1, 2 }, { 2, 3 }, { 3, 4 },
137 { 4, 4 }, { 5, 4 }, { 6, 4 }, { 7, 4 }, 253 { 4, 4 }, { 5, 4 }, { 6, 4 }, { 7, 4 },
@@ -152,6 +268,29 @@ static const struct clk_div_table apb_div_table[] = {
152 { 0 }, 268 { 0 },
153}; 269};
154 270
271#define MAX_MUX_CLK 2
272
273struct stm32_mmux {
274 u8 nbr_clk;
275 struct clk_hw *hws[MAX_MUX_CLK];
276};
277
278struct stm32_clk_mmux {
279 struct clk_mux mux;
280 struct stm32_mmux *mmux;
281};
282
283struct stm32_mgate {
284 u8 nbr_clk;
285 u32 flag;
286};
287
288struct stm32_clk_mgate {
289 struct clk_gate gate;
290 struct stm32_mgate *mgate;
291 u32 mask;
292};
293
155struct clock_config { 294struct clock_config {
156 u32 id; 295 u32 id;
157 const char *name; 296 const char *name;
@@ -199,6 +338,7 @@ struct mux_cfg {
199 338
200struct stm32_gate_cfg { 339struct stm32_gate_cfg {
201 struct gate_cfg *gate; 340 struct gate_cfg *gate;
341 struct stm32_mgate *mgate;
202 const struct clk_ops *ops; 342 const struct clk_ops *ops;
203}; 343};
204 344
@@ -209,6 +349,7 @@ struct stm32_div_cfg {
209 349
210struct stm32_mux_cfg { 350struct stm32_mux_cfg {
211 struct mux_cfg *mux; 351 struct mux_cfg *mux;
352 struct stm32_mmux *mmux;
212 const struct clk_ops *ops; 353 const struct clk_ops *ops;
213}; 354};
214 355
@@ -316,22 +457,38 @@ static struct clk_hw *_get_stm32_mux(void __iomem *base,
316 const struct stm32_mux_cfg *cfg, 457 const struct stm32_mux_cfg *cfg,
317 spinlock_t *lock) 458 spinlock_t *lock)
318{ 459{
460 struct stm32_clk_mmux *mmux;
319 struct clk_mux *mux; 461 struct clk_mux *mux;
320 struct clk_hw *mux_hw; 462 struct clk_hw *mux_hw;
321 463
322 mux = kzalloc(sizeof(*mux), GFP_KERNEL); 464 if (cfg->mmux) {
323 if (!mux) 465 mmux = kzalloc(sizeof(*mmux), GFP_KERNEL);
324 return ERR_PTR(-ENOMEM); 466 if (!mmux)
325 467 return ERR_PTR(-ENOMEM);
326 mux->reg = cfg->mux->reg_off + base; 468
327 mux->shift = cfg->mux->shift; 469 mmux->mux.reg = cfg->mux->reg_off + base;
328 mux->mask = (1 << cfg->mux->width) - 1; 470 mmux->mux.shift = cfg->mux->shift;
329 mux->flags = cfg->mux->mux_flags; 471 mmux->mux.mask = (1 << cfg->mux->width) - 1;
330 mux->table = cfg->mux->table; 472 mmux->mux.flags = cfg->mux->mux_flags;
331 473 mmux->mux.table = cfg->mux->table;
332 mux->lock = lock; 474 mmux->mux.lock = lock;
333 475 mmux->mmux = cfg->mmux;
334 mux_hw = &mux->hw; 476 mux_hw = &mmux->mux.hw;
477 cfg->mmux->hws[cfg->mmux->nbr_clk++] = mux_hw;
478
479 } else {
480 mux = kzalloc(sizeof(*mux), GFP_KERNEL);
481 if (!mux)
482 return ERR_PTR(-ENOMEM);
483
484 mux->reg = cfg->mux->reg_off + base;
485 mux->shift = cfg->mux->shift;
486 mux->mask = (1 << cfg->mux->width) - 1;
487 mux->flags = cfg->mux->mux_flags;
488 mux->table = cfg->mux->table;
489 mux->lock = lock;
490 mux_hw = &mux->hw;
491 }
335 492
336 return mux_hw; 493 return mux_hw;
337} 494}
@@ -361,18 +518,37 @@ static struct clk_hw *
361_get_stm32_gate(void __iomem *base, 518_get_stm32_gate(void __iomem *base,
362 const struct stm32_gate_cfg *cfg, spinlock_t *lock) 519 const struct stm32_gate_cfg *cfg, spinlock_t *lock)
363{ 520{
521 struct stm32_clk_mgate *mgate;
364 struct clk_gate *gate; 522 struct clk_gate *gate;
365 struct clk_hw *gate_hw; 523 struct clk_hw *gate_hw;
366 524
367 gate = kzalloc(sizeof(*gate), GFP_KERNEL); 525 if (cfg->mgate) {
368 if (!gate) 526 mgate = kzalloc(sizeof(*mgate), GFP_KERNEL);
369 return ERR_PTR(-ENOMEM); 527 if (!mgate)
528 return ERR_PTR(-ENOMEM);
529
530 mgate->gate.reg = cfg->gate->reg_off + base;
531 mgate->gate.bit_idx = cfg->gate->bit_idx;
532 mgate->gate.flags = cfg->gate->gate_flags;
533 mgate->gate.lock = lock;
534 mgate->mask = BIT(cfg->mgate->nbr_clk++);
535
536 mgate->mgate = cfg->mgate;
537
538 gate_hw = &mgate->gate.hw;
539
540 } else {
541 gate = kzalloc(sizeof(*gate), GFP_KERNEL);
542 if (!gate)
543 return ERR_PTR(-ENOMEM);
370 544
371 gate->reg = cfg->gate->reg_off + base; 545 gate->reg = cfg->gate->reg_off + base;
372 gate->bit_idx = cfg->gate->bit_idx; 546 gate->bit_idx = cfg->gate->bit_idx;
373 gate->flags = cfg->gate->gate_flags; 547 gate->flags = cfg->gate->gate_flags;
374 gate->lock = lock; 548 gate->lock = lock;
375 gate_hw = &gate->hw; 549
550 gate_hw = &gate->hw;
551 }
376 552
377 return gate_hw; 553 return gate_hw;
378} 554}
@@ -475,8 +651,72 @@ clk_stm32_register_composite(struct device *dev,
475 gate_hw, gate_ops, flags); 651 gate_hw, gate_ops, flags);
476} 652}
477 653
478/* STM32 PLL */ 654#define to_clk_mgate(_gate) container_of(_gate, struct stm32_clk_mgate, gate)
655
656static int mp1_mgate_clk_enable(struct clk_hw *hw)
657{
658 struct clk_gate *gate = to_clk_gate(hw);
659 struct stm32_clk_mgate *clk_mgate = to_clk_mgate(gate);
660
661 clk_mgate->mgate->flag |= clk_mgate->mask;
662
663 mp1_gate_clk_enable(hw);
664
665 return 0;
666}
667
668static void mp1_mgate_clk_disable(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 if (clk_mgate->mgate->flag == 0)
676 mp1_gate_clk_disable(hw);
677}
678
679const struct clk_ops mp1_mgate_clk_ops = {
680 .enable = mp1_mgate_clk_enable,
681 .disable = mp1_mgate_clk_disable,
682 .is_enabled = clk_gate_is_enabled,
683
684};
685
686#define to_clk_mmux(_mux) container_of(_mux, struct stm32_clk_mmux, mux)
687
688static u8 clk_mmux_get_parent(struct clk_hw *hw)
689{
690 return clk_mux_ops.get_parent(hw);
691}
692
693static int clk_mmux_set_parent(struct clk_hw *hw, u8 index)
694{
695 struct clk_mux *mux = to_clk_mux(hw);
696 struct stm32_clk_mmux *clk_mmux = to_clk_mmux(mux);
697 struct clk_hw *hwp;
698 int ret, n;
699
700 ret = clk_mux_ops.set_parent(hw, index);
701 if (ret)
702 return ret;
703
704 hwp = clk_hw_get_parent(hw);
705
706 for (n = 0; n < clk_mmux->mmux->nbr_clk; n++)
707 if (clk_mmux->mmux->hws[n] != hw)
708 clk_hw_reparent(clk_mmux->mmux->hws[n], hwp);
709
710 return 0;
711}
479 712
713const struct clk_ops clk_mmux_ops = {
714 .get_parent = clk_mmux_get_parent,
715 .set_parent = clk_mmux_set_parent,
716 .determine_rate = __clk_mux_determine_rate,
717};
718
719/* STM32 PLL */
480struct stm32_pll_obj { 720struct stm32_pll_obj {
481 /* lock pll enable/disable registers */ 721 /* lock pll enable/disable registers */
482 spinlock_t *lock; 722 spinlock_t *lock;
@@ -944,28 +1184,39 @@ _clk_stm32_register_composite(struct device *dev,
944 .func = _clk_stm32_register_gate,\ 1184 .func = _clk_stm32_register_gate,\
945} 1185}
946 1186
947#define _STM32_GATE(_gate_offset, _gate_bit_idx, _gate_flags, _ops)\ 1187#define _STM32_GATE(_gate_offset, _gate_bit_idx, _gate_flags, _mgate, _ops)\
948 (&(struct stm32_gate_cfg) {\ 1188 (&(struct stm32_gate_cfg) {\
949 &(struct gate_cfg) {\ 1189 &(struct gate_cfg) {\
950 .reg_off = _gate_offset,\ 1190 .reg_off = _gate_offset,\
951 .bit_idx = _gate_bit_idx,\ 1191 .bit_idx = _gate_bit_idx,\
952 .gate_flags = _gate_flags,\ 1192 .gate_flags = _gate_flags,\
953 },\ 1193 },\
1194 .mgate = _mgate,\
954 .ops = _ops,\ 1195 .ops = _ops,\
955 }) 1196 })
956 1197
1198#define _STM32_MGATE(_mgate)\
1199 (&per_gate_cfg[_mgate])
1200
957#define _GATE(_gate_offset, _gate_bit_idx, _gate_flags)\ 1201#define _GATE(_gate_offset, _gate_bit_idx, _gate_flags)\
958 _STM32_GATE(_gate_offset, _gate_bit_idx, _gate_flags,\ 1202 _STM32_GATE(_gate_offset, _gate_bit_idx, _gate_flags,\
959 NULL)\ 1203 NULL, NULL)\
960 1204
961#define _GATE_MP1(_gate_offset, _gate_bit_idx, _gate_flags)\ 1205#define _GATE_MP1(_gate_offset, _gate_bit_idx, _gate_flags)\
962 _STM32_GATE(_gate_offset, _gate_bit_idx, _gate_flags,\ 1206 _STM32_GATE(_gate_offset, _gate_bit_idx, _gate_flags,\
963 &mp1_gate_clk_ops)\ 1207 NULL, &mp1_gate_clk_ops)\
1208
1209#define _MGATE_MP1(_mgate)\
1210 .gate = &per_gate_cfg[_mgate]
964 1211
965#define GATE_MP1(_id, _name, _parent, _flags, _offset, _bit_idx, _gate_flags)\ 1212#define GATE_MP1(_id, _name, _parent, _flags, _offset, _bit_idx, _gate_flags)\
966 STM32_GATE(_id, _name, _parent, _flags,\ 1213 STM32_GATE(_id, _name, _parent, _flags,\
967 _GATE_MP1(_offset, _bit_idx, _gate_flags)) 1214 _GATE_MP1(_offset, _bit_idx, _gate_flags))
968 1215
1216#define MGATE_MP1(_id, _name, _parent, _flags, _mgate)\
1217 STM32_GATE(_id, _name, _parent, _flags,\
1218 _STM32_MGATE(_mgate))
1219
969#define _STM32_DIV(_div_offset, _div_shift, _div_width,\ 1220#define _STM32_DIV(_div_offset, _div_shift, _div_width,\
970 _div_flags, _div_table, _ops)\ 1221 _div_flags, _div_table, _ops)\
971 .div = &(struct stm32_div_cfg) {\ 1222 .div = &(struct stm32_div_cfg) {\
@@ -983,7 +1234,7 @@ _clk_stm32_register_composite(struct device *dev,
983 _STM32_DIV(_div_offset, _div_shift, _div_width,\ 1234 _STM32_DIV(_div_offset, _div_shift, _div_width,\
984 _div_flags, _div_table, NULL)\ 1235 _div_flags, _div_table, NULL)\
985 1236
986#define _STM32_MUX(_offset, _shift, _width, _mux_flags, _ops)\ 1237#define _STM32_MUX(_offset, _shift, _width, _mux_flags, _mmux, _ops)\
987 .mux = &(struct stm32_mux_cfg) {\ 1238 .mux = &(struct stm32_mux_cfg) {\
988 &(struct mux_cfg) {\ 1239 &(struct mux_cfg) {\
989 .reg_off = _offset,\ 1240 .reg_off = _offset,\
@@ -992,11 +1243,14 @@ _clk_stm32_register_composite(struct device *dev,
992 .mux_flags = _mux_flags,\ 1243 .mux_flags = _mux_flags,\
993 .table = NULL,\ 1244 .table = NULL,\
994 },\ 1245 },\
1246 .mmux = _mmux,\
995 .ops = _ops,\ 1247 .ops = _ops,\
996 } 1248 }
997 1249
998#define _MUX(_offset, _shift, _width, _mux_flags)\ 1250#define _MUX(_offset, _shift, _width, _mux_flags)\
999 _STM32_MUX(_offset, _shift, _width, _mux_flags, NULL)\ 1251 _STM32_MUX(_offset, _shift, _width, _mux_flags, NULL, NULL)\
1252
1253#define _MMUX(_mmux) .mux = &ker_mux_cfg[_mmux]
1000 1254
1001#define PARENT(_parent) ((const char *[]) { _parent}) 1255#define PARENT(_parent) ((const char *[]) { _parent})
1002 1256
@@ -1019,6 +1273,375 @@ _clk_stm32_register_composite(struct device *dev,
1019 .func = _clk_stm32_register_composite,\ 1273 .func = _clk_stm32_register_composite,\
1020} 1274}
1021 1275
1276#define PCLK(_id, _name, _parent, _flags, _mgate)\
1277 MGATE_MP1(_id, _name, _parent, _flags, _mgate)
1278
1279#define KCLK(_id, _name, _parents, _flags, _mgate, _mmux)\
1280 COMPOSITE(_id, _name, _parents, CLK_OPS_PARENT_ENABLE | _flags,\
1281 _MGATE_MP1(_mgate),\
1282 _MMUX(_mmux),\
1283 _NO_DIV)
1284
1285enum {
1286 G_SAI1,
1287 G_SAI2,
1288 G_SAI3,
1289 G_SAI4,
1290 G_SPI1,
1291 G_SPI2,
1292 G_SPI3,
1293 G_SPI4,
1294 G_SPI5,
1295 G_SPI6,
1296 G_SPDIF,
1297 G_I2C1,
1298 G_I2C2,
1299 G_I2C3,
1300 G_I2C4,
1301 G_I2C5,
1302 G_I2C6,
1303 G_USART2,
1304 G_UART4,
1305 G_USART3,
1306 G_UART5,
1307 G_USART1,
1308 G_USART6,
1309 G_UART7,
1310 G_UART8,
1311 G_LPTIM1,
1312 G_LPTIM2,
1313 G_LPTIM3,
1314 G_LPTIM4,
1315 G_LPTIM5,
1316 G_LTDC,
1317 G_DSI,
1318 G_QSPI,
1319 G_FMC,
1320 G_SDMMC1,
1321 G_SDMMC2,
1322 G_SDMMC3,
1323 G_USBO,
1324 G_USBPHY,
1325 G_RNG1,
1326 G_RNG2,
1327 G_FDCAN,
1328 G_DAC12,
1329 G_CEC,
1330 G_ADC12,
1331 G_GPU,
1332 G_STGEN,
1333 G_DFSDM,
1334 G_ADFSDM,
1335 G_TIM2,
1336 G_TIM3,
1337 G_TIM4,
1338 G_TIM5,
1339 G_TIM6,
1340 G_TIM7,
1341 G_TIM12,
1342 G_TIM13,
1343 G_TIM14,
1344 G_MDIO,
1345 G_TIM1,
1346 G_TIM8,
1347 G_TIM15,
1348 G_TIM16,
1349 G_TIM17,
1350 G_SYSCFG,
1351 G_VREF,
1352 G_TMPSENS,
1353 G_PMBCTRL,
1354 G_HDP,
1355 G_IWDG2,
1356 G_STGENRO,
1357 G_DMA1,
1358 G_DMA2,
1359 G_DMAMUX,
1360 G_DCMI,
1361 G_CRYP2,
1362 G_HASH2,
1363 G_CRC2,
1364 G_HSEM,
1365 G_IPCC,
1366 G_GPIOA,
1367 G_GPIOB,
1368 G_GPIOC,
1369 G_GPIOD,
1370 G_GPIOE,
1371 G_GPIOF,
1372 G_GPIOG,
1373 G_GPIOH,
1374 G_GPIOI,
1375 G_GPIOJ,
1376 G_GPIOK,
1377 G_MDMA,
1378 G_ETHCK,
1379 G_ETHTX,
1380 G_ETHRX,
1381 G_ETHMAC,
1382 G_CRC1,
1383 G_USBH,
1384 G_ETHSTP,
1385 G_RTCAPB,
1386 G_TZC,
1387 G_TZPC,
1388 G_IWDG1,
1389 G_BSEC,
1390 G_GPIOZ,
1391 G_CRYP1,
1392 G_HASH1,
1393 G_BKPSRAM,
1394
1395 G_LAST
1396};
1397
1398struct stm32_mgate mp1_mgate[G_LAST];
1399
1400#define _K_GATE(_id, _gate_offset, _gate_bit_idx, _gate_flags,\
1401 _mgate, _ops)\
1402 [_id] = {\
1403 &(struct gate_cfg) {\
1404 .reg_off = _gate_offset,\
1405 .bit_idx = _gate_bit_idx,\
1406 .gate_flags = _gate_flags,\
1407 },\
1408 .mgate = _mgate,\
1409 .ops = _ops,\
1410 }
1411
1412#define K_GATE(_id, _gate_offset, _gate_bit_idx, _gate_flags)\
1413 _K_GATE(_id, _gate_offset, _gate_bit_idx, _gate_flags,\
1414 NULL, &mp1_gate_clk_ops)
1415
1416#define K_MGATE(_id, _gate_offset, _gate_bit_idx, _gate_flags)\
1417 _K_GATE(_id, _gate_offset, _gate_bit_idx, _gate_flags,\
1418 &mp1_mgate[_id], &mp1_mgate_clk_ops)
1419
1420/* Peripheral gates */
1421struct stm32_gate_cfg per_gate_cfg[G_LAST] = {
1422 /* Multi gates */
1423 K_GATE(G_MDIO, RCC_APB1ENSETR, 31, 0),
1424 K_MGATE(G_DAC12, RCC_APB1ENSETR, 29, 0),
1425 K_MGATE(G_CEC, RCC_APB1ENSETR, 27, 0),
1426 K_MGATE(G_SPDIF, RCC_APB1ENSETR, 26, 0),
1427 K_MGATE(G_I2C5, RCC_APB1ENSETR, 24, 0),
1428 K_MGATE(G_I2C3, RCC_APB1ENSETR, 23, 0),
1429 K_MGATE(G_I2C2, RCC_APB1ENSETR, 22, 0),
1430 K_MGATE(G_I2C1, RCC_APB1ENSETR, 21, 0),
1431 K_MGATE(G_UART8, RCC_APB1ENSETR, 19, 0),
1432 K_MGATE(G_UART7, RCC_APB1ENSETR, 18, 0),
1433 K_MGATE(G_UART5, RCC_APB1ENSETR, 17, 0),
1434 K_MGATE(G_UART4, RCC_APB1ENSETR, 16, 0),
1435 K_MGATE(G_USART3, RCC_APB1ENSETR, 15, 0),
1436 K_MGATE(G_USART2, RCC_APB1ENSETR, 14, 0),
1437 K_MGATE(G_SPI3, RCC_APB1ENSETR, 12, 0),
1438 K_MGATE(G_SPI2, RCC_APB1ENSETR, 11, 0),
1439 K_MGATE(G_LPTIM1, RCC_APB1ENSETR, 9, 0),
1440 K_GATE(G_TIM14, RCC_APB1ENSETR, 8, 0),
1441 K_GATE(G_TIM13, RCC_APB1ENSETR, 7, 0),
1442 K_GATE(G_TIM12, RCC_APB1ENSETR, 6, 0),
1443 K_GATE(G_TIM7, RCC_APB1ENSETR, 5, 0),
1444 K_GATE(G_TIM6, RCC_APB1ENSETR, 4, 0),
1445 K_GATE(G_TIM5, RCC_APB1ENSETR, 3, 0),
1446 K_GATE(G_TIM4, RCC_APB1ENSETR, 2, 0),
1447 K_GATE(G_TIM3, RCC_APB1ENSETR, 1, 0),
1448 K_GATE(G_TIM2, RCC_APB1ENSETR, 0, 0),
1449
1450 K_MGATE(G_FDCAN, RCC_APB2ENSETR, 24, 0),
1451 K_GATE(G_ADFSDM, RCC_APB2ENSETR, 21, 0),
1452 K_GATE(G_DFSDM, RCC_APB2ENSETR, 20, 0),
1453 K_MGATE(G_SAI3, RCC_APB2ENSETR, 18, 0),
1454 K_MGATE(G_SAI2, RCC_APB2ENSETR, 17, 0),
1455 K_MGATE(G_SAI1, RCC_APB2ENSETR, 16, 0),
1456 K_MGATE(G_USART6, RCC_APB2ENSETR, 13, 0),
1457 K_MGATE(G_SPI5, RCC_APB2ENSETR, 10, 0),
1458 K_MGATE(G_SPI4, RCC_APB2ENSETR, 9, 0),
1459 K_MGATE(G_SPI1, RCC_APB2ENSETR, 8, 0),
1460 K_GATE(G_TIM17, RCC_APB2ENSETR, 4, 0),
1461 K_GATE(G_TIM16, RCC_APB2ENSETR, 3, 0),
1462 K_GATE(G_TIM15, RCC_APB2ENSETR, 2, 0),
1463 K_GATE(G_TIM8, RCC_APB2ENSETR, 1, 0),
1464 K_GATE(G_TIM1, RCC_APB2ENSETR, 0, 0),
1465
1466 K_GATE(G_HDP, RCC_APB3ENSETR, 20, 0),
1467 K_GATE(G_PMBCTRL, RCC_APB3ENSETR, 17, 0),
1468 K_GATE(G_TMPSENS, RCC_APB3ENSETR, 16, 0),
1469 K_GATE(G_VREF, RCC_APB3ENSETR, 13, 0),
1470 K_GATE(G_SYSCFG, RCC_APB3ENSETR, 11, 0),
1471 K_MGATE(G_SAI4, RCC_APB3ENSETR, 8, 0),
1472 K_MGATE(G_LPTIM5, RCC_APB3ENSETR, 3, 0),
1473 K_MGATE(G_LPTIM4, RCC_APB3ENSETR, 2, 0),
1474 K_MGATE(G_LPTIM3, RCC_APB3ENSETR, 1, 0),
1475 K_MGATE(G_LPTIM2, RCC_APB3ENSETR, 0, 0),
1476
1477 K_GATE(G_STGENRO, RCC_APB4ENSETR, 20, 0),
1478 K_MGATE(G_USBPHY, RCC_APB4ENSETR, 16, 0),
1479 K_GATE(G_IWDG2, RCC_APB4ENSETR, 15, 0),
1480 K_MGATE(G_DSI, RCC_APB4ENSETR, 4, 0),
1481 K_MGATE(G_LTDC, RCC_APB4ENSETR, 0, 0),
1482
1483 K_GATE(G_STGEN, RCC_APB5ENSETR, 20, 0),
1484 K_GATE(G_BSEC, RCC_APB5ENSETR, 16, 0),
1485 K_GATE(G_IWDG1, RCC_APB5ENSETR, 15, 0),
1486 K_GATE(G_TZPC, RCC_APB5ENSETR, 13, 0),
1487 K_GATE(G_TZC, RCC_APB5ENSETR, 12, 0),
1488 K_GATE(G_RTCAPB, RCC_APB5ENSETR, 8, 0),
1489 K_MGATE(G_USART1, RCC_APB5ENSETR, 4, 0),
1490 K_MGATE(G_I2C6, RCC_APB5ENSETR, 3, 0),
1491 K_MGATE(G_I2C4, RCC_APB5ENSETR, 2, 0),
1492 K_MGATE(G_SPI6, RCC_APB5ENSETR, 0, 0),
1493
1494 K_MGATE(G_SDMMC3, RCC_AHB2ENSETR, 16, 0),
1495 K_MGATE(G_USBO, RCC_AHB2ENSETR, 8, 0),
1496 K_MGATE(G_ADC12, RCC_AHB2ENSETR, 5, 0),
1497 K_GATE(G_DMAMUX, RCC_AHB2ENSETR, 2, 0),
1498 K_GATE(G_DMA2, RCC_AHB2ENSETR, 1, 0),
1499 K_GATE(G_DMA1, RCC_AHB2ENSETR, 0, 0),
1500
1501 K_GATE(G_IPCC, RCC_AHB3ENSETR, 12, 0),
1502 K_GATE(G_HSEM, RCC_AHB3ENSETR, 11, 0),
1503 K_GATE(G_CRC2, RCC_AHB3ENSETR, 7, 0),
1504 K_MGATE(G_RNG2, RCC_AHB3ENSETR, 6, 0),
1505 K_GATE(G_HASH2, RCC_AHB3ENSETR, 5, 0),
1506 K_GATE(G_CRYP2, RCC_AHB3ENSETR, 4, 0),
1507 K_GATE(G_DCMI, RCC_AHB3ENSETR, 0, 0),
1508
1509 K_GATE(G_GPIOK, RCC_AHB4ENSETR, 10, 0),
1510 K_GATE(G_GPIOJ, RCC_AHB4ENSETR, 9, 0),
1511 K_GATE(G_GPIOI, RCC_AHB4ENSETR, 8, 0),
1512 K_GATE(G_GPIOH, RCC_AHB4ENSETR, 7, 0),
1513 K_GATE(G_GPIOG, RCC_AHB4ENSETR, 6, 0),
1514 K_GATE(G_GPIOF, RCC_AHB4ENSETR, 5, 0),
1515 K_GATE(G_GPIOE, RCC_AHB4ENSETR, 4, 0),
1516 K_GATE(G_GPIOD, RCC_AHB4ENSETR, 3, 0),
1517 K_GATE(G_GPIOC, RCC_AHB4ENSETR, 2, 0),
1518 K_GATE(G_GPIOB, RCC_AHB4ENSETR, 1, 0),
1519 K_GATE(G_GPIOA, RCC_AHB4ENSETR, 0, 0),
1520
1521 K_GATE(G_BKPSRAM, RCC_AHB5ENSETR, 8, 0),
1522 K_MGATE(G_RNG1, RCC_AHB5ENSETR, 6, 0),
1523 K_GATE(G_HASH1, RCC_AHB5ENSETR, 5, 0),
1524 K_GATE(G_CRYP1, RCC_AHB5ENSETR, 4, 0),
1525 K_GATE(G_GPIOZ, RCC_AHB5ENSETR, 0, 0),
1526
1527 K_GATE(G_USBH, RCC_AHB6ENSETR, 24, 0),
1528 K_GATE(G_CRC1, RCC_AHB6ENSETR, 20, 0),
1529 K_MGATE(G_SDMMC2, RCC_AHB6ENSETR, 17, 0),
1530 K_MGATE(G_SDMMC1, RCC_AHB6ENSETR, 16, 0),
1531 K_MGATE(G_QSPI, RCC_AHB6ENSETR, 14, 0),
1532 K_MGATE(G_FMC, RCC_AHB6ENSETR, 12, 0),
1533 K_GATE(G_ETHMAC, RCC_AHB6ENSETR, 10, 0),
1534 K_GATE(G_ETHRX, RCC_AHB6ENSETR, 9, 0),
1535 K_GATE(G_ETHTX, RCC_AHB6ENSETR, 8, 0),
1536 K_GATE(G_ETHCK, RCC_AHB6ENSETR, 7, 0),
1537 K_MGATE(G_GPU, RCC_AHB6ENSETR, 5, 0),
1538 K_GATE(G_MDMA, RCC_AHB6ENSETR, 0, 0),
1539 K_GATE(G_ETHSTP, RCC_AHB6LPENSETR, 11, 0),
1540};
1541
1542enum {
1543 M_SDMMC12,
1544 M_SDMMC3,
1545 M_FMC,
1546 M_QSPI,
1547 M_RNG1,
1548 M_RNG2,
1549 M_USBPHY,
1550 M_USBO,
1551 M_STGEN,
1552 M_SPDIF,
1553 M_SPI1,
1554 M_SPI23,
1555 M_SPI45,
1556 M_SPI6,
1557 M_CEC,
1558 M_I2C12,
1559 M_I2C35,
1560 M_I2C46,
1561 M_LPTIM1,
1562 M_LPTIM23,
1563 M_LPTIM45,
1564 M_USART1,
1565 M_UART24,
1566 M_UART35,
1567 M_USART6,
1568 M_UART78,
1569 M_SAI1,
1570 M_SAI2,
1571 M_SAI3,
1572 M_SAI4,
1573 M_DSI,
1574 M_FDCAN,
1575 M_ADC12,
1576 M_ETHCK,
1577 M_CKPER,
1578 M_LAST
1579};
1580
1581struct stm32_mmux ker_mux[M_LAST];
1582
1583#define _K_MUX(_id, _offset, _shift, _width, _mux_flags, _mmux, _ops)\
1584 [_id] = {\
1585 &(struct mux_cfg) {\
1586 .reg_off = _offset,\
1587 .shift = _shift,\
1588 .width = _width,\
1589 .mux_flags = _mux_flags,\
1590 .table = NULL,\
1591 },\
1592 .mmux = _mmux,\
1593 .ops = _ops,\
1594 }
1595
1596#define K_MUX(_id, _offset, _shift, _width, _mux_flags)\
1597 _K_MUX(_id, _offset, _shift, _width, _mux_flags,\
1598 NULL, NULL)
1599
1600#define K_MMUX(_id, _offset, _shift, _width, _mux_flags)\
1601 _K_MUX(_id, _offset, _shift, _width, _mux_flags,\
1602 &ker_mux[_id], &clk_mmux_ops)
1603
1604const struct stm32_mux_cfg ker_mux_cfg[M_LAST] = {
1605 /* Kernel multi mux */
1606 K_MMUX(M_SDMMC12, RCC_SDMMC12CKSELR, 0, 3, 0),
1607 K_MMUX(M_SPI23, RCC_SPI2S23CKSELR, 0, 3, 0),
1608 K_MMUX(M_SPI45, RCC_SPI2S45CKSELR, 0, 3, 0),
1609 K_MMUX(M_I2C12, RCC_I2C12CKSELR, 0, 3, 0),
1610 K_MMUX(M_I2C35, RCC_I2C35CKSELR, 0, 3, 0),
1611 K_MMUX(M_LPTIM23, RCC_LPTIM23CKSELR, 0, 3, 0),
1612 K_MMUX(M_LPTIM45, RCC_LPTIM45CKSELR, 0, 3, 0),
1613 K_MMUX(M_UART24, RCC_UART24CKSELR, 0, 3, 0),
1614 K_MMUX(M_UART35, RCC_UART35CKSELR, 0, 3, 0),
1615 K_MMUX(M_UART78, RCC_UART78CKSELR, 0, 3, 0),
1616 K_MMUX(M_SAI1, RCC_SAI1CKSELR, 0, 3, 0),
1617 K_MMUX(M_ETHCK, RCC_ETHCKSELR, 0, 2, 0),
1618 K_MMUX(M_I2C46, RCC_I2C46CKSELR, 0, 3, 0),
1619
1620 /* Kernel simple mux */
1621 K_MUX(M_RNG2, RCC_RNG2CKSELR, 0, 2, 0),
1622 K_MUX(M_SDMMC3, RCC_SDMMC3CKSELR, 0, 3, 0),
1623 K_MUX(M_FMC, RCC_FMCCKSELR, 0, 2, 0),
1624 K_MUX(M_QSPI, RCC_QSPICKSELR, 0, 2, 0),
1625 K_MUX(M_USBPHY, RCC_USBCKSELR, 0, 2, 0),
1626 K_MUX(M_USBO, RCC_USBCKSELR, 4, 1, 0),
1627 K_MUX(M_SPDIF, RCC_SPDIFCKSELR, 0, 2, 0),
1628 K_MUX(M_SPI1, RCC_SPI2S1CKSELR, 0, 3, 0),
1629 K_MUX(M_CEC, RCC_CECCKSELR, 0, 2, 0),
1630 K_MUX(M_LPTIM1, RCC_LPTIM1CKSELR, 0, 3, 0),
1631 K_MUX(M_USART6, RCC_UART6CKSELR, 0, 3, 0),
1632 K_MUX(M_FDCAN, RCC_FDCANCKSELR, 0, 2, 0),
1633 K_MUX(M_SAI2, RCC_SAI2CKSELR, 0, 3, 0),
1634 K_MUX(M_SAI3, RCC_SAI3CKSELR, 0, 3, 0),
1635 K_MUX(M_SAI4, RCC_SAI4CKSELR, 0, 3, 0),
1636 K_MUX(M_ADC12, RCC_ADCCKSELR, 0, 2, 0),
1637 K_MUX(M_DSI, RCC_DSICKSELR, 0, 1, 0),
1638 K_MUX(M_CKPER, RCC_CPERCKSELR, 0, 2, 0),
1639 K_MUX(M_RNG1, RCC_RNG1CKSELR, 0, 2, 0),
1640 K_MUX(M_STGEN, RCC_STGENCKSELR, 0, 2, 0),
1641 K_MUX(M_USART1, RCC_UART1CKSELR, 0, 3, 0),
1642 K_MUX(M_SPI6, RCC_SPI6CKSELR, 0, 3, 0),
1643};
1644
1022static const struct clock_config stm32mp1_clock_cfg[] = { 1645static const struct clock_config stm32mp1_clock_cfg[] = {
1023 /* Oscillator divider */ 1646 /* Oscillator divider */
1024 DIV(NO_ID, "clk-hsi-div", "clk-hsi", 0, RCC_HSICFGR, 0, 2, 1647 DIV(NO_ID, "clk-hsi-div", "clk-hsi", 0, RCC_HSICFGR, 0, 2,
@@ -1152,6 +1775,176 @@ static const struct clock_config stm32mp1_clock_cfg[] = {
1152 STM32_TIM(TIM15_K, "tim15_k", "ck2_tim", RCC_APB2ENSETR, 2), 1775 STM32_TIM(TIM15_K, "tim15_k", "ck2_tim", RCC_APB2ENSETR, 2),
1153 STM32_TIM(TIM16_K, "tim16_k", "ck2_tim", RCC_APB2ENSETR, 3), 1776 STM32_TIM(TIM16_K, "tim16_k", "ck2_tim", RCC_APB2ENSETR, 3),
1154 STM32_TIM(TIM17_K, "tim17_k", "ck2_tim", RCC_APB2ENSETR, 4), 1777 STM32_TIM(TIM17_K, "tim17_k", "ck2_tim", RCC_APB2ENSETR, 4),
1778
1779 /* Peripheral clocks */
1780 PCLK(TIM2, "tim2", "pclk1", CLK_IGNORE_UNUSED, G_TIM2),
1781 PCLK(TIM3, "tim3", "pclk1", CLK_IGNORE_UNUSED, G_TIM3),
1782 PCLK(TIM4, "tim4", "pclk1", CLK_IGNORE_UNUSED, G_TIM4),
1783 PCLK(TIM5, "tim5", "pclk1", CLK_IGNORE_UNUSED, G_TIM5),
1784 PCLK(TIM6, "tim6", "pclk1", CLK_IGNORE_UNUSED, G_TIM6),
1785 PCLK(TIM7, "tim7", "pclk1", CLK_IGNORE_UNUSED, G_TIM7),
1786 PCLK(TIM12, "tim12", "pclk1", CLK_IGNORE_UNUSED, G_TIM12),
1787 PCLK(TIM13, "tim13", "pclk1", CLK_IGNORE_UNUSED, G_TIM13),
1788 PCLK(TIM14, "tim14", "pclk1", CLK_IGNORE_UNUSED, G_TIM14),
1789 PCLK(LPTIM1, "lptim1", "pclk1", 0, G_LPTIM1),
1790 PCLK(SPI2, "spi2", "pclk1", 0, G_SPI2),
1791 PCLK(SPI3, "spi3", "pclk1", 0, G_SPI3),
1792 PCLK(USART2, "usart2", "pclk1", 0, G_USART2),
1793 PCLK(USART3, "usart3", "pclk1", 0, G_USART3),
1794 PCLK(UART4, "uart4", "pclk1", 0, G_UART4),
1795 PCLK(UART5, "uart5", "pclk1", 0, G_UART5),
1796 PCLK(UART7, "uart7", "pclk1", 0, G_UART7),
1797 PCLK(UART8, "uart8", "pclk1", 0, G_UART8),
1798 PCLK(I2C1, "i2c1", "pclk1", 0, G_I2C1),
1799 PCLK(I2C2, "i2c2", "pclk1", 0, G_I2C2),
1800 PCLK(I2C3, "i2c3", "pclk1", 0, G_I2C3),
1801 PCLK(I2C5, "i2c5", "pclk1", 0, G_I2C5),
1802 PCLK(SPDIF, "spdif", "pclk1", 0, G_SPDIF),
1803 PCLK(CEC, "cec", "pclk1", 0, G_CEC),
1804 PCLK(DAC12, "dac12", "pclk1", 0, G_DAC12),
1805 PCLK(MDIO, "mdio", "pclk1", 0, G_MDIO),
1806 PCLK(TIM1, "tim1", "pclk2", CLK_IGNORE_UNUSED, G_TIM1),
1807 PCLK(TIM8, "tim8", "pclk2", CLK_IGNORE_UNUSED, G_TIM8),
1808 PCLK(TIM15, "tim15", "pclk2", CLK_IGNORE_UNUSED, G_TIM15),
1809 PCLK(TIM16, "tim16", "pclk2", CLK_IGNORE_UNUSED, G_TIM16),
1810 PCLK(TIM17, "tim17", "pclk2", CLK_IGNORE_UNUSED, G_TIM17),
1811 PCLK(SPI1, "spi1", "pclk2", 0, G_SPI1),
1812 PCLK(SPI4, "spi4", "pclk2", 0, G_SPI4),
1813 PCLK(SPI5, "spi5", "pclk2", 0, G_SPI5),
1814 PCLK(USART6, "usart6", "pclk2", 0, G_USART6),
1815 PCLK(SAI1, "sai1", "pclk2", 0, G_SAI1),
1816 PCLK(SAI2, "sai2", "pclk2", 0, G_SAI2),
1817 PCLK(SAI3, "sai3", "pclk2", 0, G_SAI3),
1818 PCLK(DFSDM, "dfsdm", "pclk2", 0, G_DFSDM),
1819 PCLK(FDCAN, "fdcan", "pclk2", 0, G_FDCAN),
1820 PCLK(LPTIM2, "lptim2", "pclk3", 0, G_LPTIM2),
1821 PCLK(LPTIM3, "lptim3", "pclk3", 0, G_LPTIM3),
1822 PCLK(LPTIM4, "lptim4", "pclk3", 0, G_LPTIM4),
1823 PCLK(LPTIM5, "lptim5", "pclk3", 0, G_LPTIM5),
1824 PCLK(SAI4, "sai4", "pclk3", 0, G_SAI4),
1825 PCLK(SYSCFG, "syscfg", "pclk3", 0, G_SYSCFG),
1826 PCLK(VREF, "vref", "pclk3", 13, G_VREF),
1827 PCLK(TMPSENS, "tmpsens", "pclk3", 0, G_TMPSENS),
1828 PCLK(PMBCTRL, "pmbctrl", "pclk3", 0, G_PMBCTRL),
1829 PCLK(HDP, "hdp", "pclk3", 0, G_HDP),
1830 PCLK(LTDC, "ltdc", "pclk4", 0, G_LTDC),
1831 PCLK(DSI, "dsi", "pclk4", 0, G_DSI),
1832 PCLK(IWDG2, "iwdg2", "pclk4", 0, G_IWDG2),
1833 PCLK(USBPHY, "usbphy", "pclk4", 0, G_USBPHY),
1834 PCLK(STGENRO, "stgenro", "pclk4", 0, G_STGENRO),
1835 PCLK(SPI6, "spi6", "pclk5", 0, G_SPI6),
1836 PCLK(I2C4, "i2c4", "pclk5", 0, G_I2C4),
1837 PCLK(I2C6, "i2c6", "pclk5", 0, G_I2C6),
1838 PCLK(USART1, "usart1", "pclk5", 0, G_USART1),
1839 PCLK(RTCAPB, "rtcapb", "pclk5", CLK_IGNORE_UNUSED |
1840 CLK_IS_CRITICAL, G_RTCAPB),
1841 PCLK(TZC, "tzc", "pclk5", CLK_IGNORE_UNUSED, G_TZC),
1842 PCLK(TZPC, "tzpc", "pclk5", CLK_IGNORE_UNUSED, G_TZPC),
1843 PCLK(IWDG1, "iwdg1", "pclk5", 0, G_IWDG1),
1844 PCLK(BSEC, "bsec", "pclk5", CLK_IGNORE_UNUSED, G_BSEC),
1845 PCLK(STGEN, "stgen", "pclk5", CLK_IGNORE_UNUSED, G_STGEN),
1846 PCLK(DMA1, "dma1", "ck_mcu", 0, G_DMA1),
1847 PCLK(DMA2, "dma2", "ck_mcu", 0, G_DMA2),
1848 PCLK(DMAMUX, "dmamux", "ck_mcu", 0, G_DMAMUX),
1849 PCLK(ADC12, "adc12", "ck_mcu", 0, G_ADC12),
1850 PCLK(USBO, "usbo", "ck_mcu", 0, G_USBO),
1851 PCLK(SDMMC3, "sdmmc3", "ck_mcu", 0, G_SDMMC3),
1852 PCLK(DCMI, "dcmi", "ck_mcu", 0, G_DCMI),
1853 PCLK(CRYP2, "cryp2", "ck_mcu", 0, G_CRYP2),
1854 PCLK(HASH2, "hash2", "ck_mcu", 0, G_HASH2),
1855 PCLK(RNG2, "rng2", "ck_mcu", 0, G_RNG2),
1856 PCLK(CRC2, "crc2", "ck_mcu", 0, G_CRC2),
1857 PCLK(HSEM, "hsem", "ck_mcu", 0, G_HSEM),
1858 PCLK(IPCC, "ipcc", "ck_mcu", 0, G_IPCC),
1859 PCLK(GPIOA, "gpioa", "ck_mcu", 0, G_GPIOA),
1860 PCLK(GPIOB, "gpiob", "ck_mcu", 0, G_GPIOB),
1861 PCLK(GPIOC, "gpioc", "ck_mcu", 0, G_GPIOC),
1862 PCLK(GPIOD, "gpiod", "ck_mcu", 0, G_GPIOD),
1863 PCLK(GPIOE, "gpioe", "ck_mcu", 0, G_GPIOE),
1864 PCLK(GPIOF, "gpiof", "ck_mcu", 0, G_GPIOF),
1865 PCLK(GPIOG, "gpiog", "ck_mcu", 0, G_GPIOG),
1866 PCLK(GPIOH, "gpioh", "ck_mcu", 0, G_GPIOH),
1867 PCLK(GPIOI, "gpioi", "ck_mcu", 0, G_GPIOI),
1868 PCLK(GPIOJ, "gpioj", "ck_mcu", 0, G_GPIOJ),
1869 PCLK(GPIOK, "gpiok", "ck_mcu", 0, G_GPIOK),
1870 PCLK(GPIOZ, "gpioz", "ck_axi", CLK_IGNORE_UNUSED, G_GPIOZ),
1871 PCLK(CRYP1, "cryp1", "ck_axi", CLK_IGNORE_UNUSED, G_CRYP1),
1872 PCLK(HASH1, "hash1", "ck_axi", CLK_IGNORE_UNUSED, G_HASH1),
1873 PCLK(RNG1, "rng1", "ck_axi", 0, G_RNG1),
1874 PCLK(BKPSRAM, "bkpsram", "ck_axi", CLK_IGNORE_UNUSED, G_BKPSRAM),
1875 PCLK(MDMA, "mdma", "ck_axi", 0, G_MDMA),
1876 PCLK(GPU, "gpu", "ck_axi", 0, G_GPU),
1877 PCLK(ETHTX, "ethtx", "ck_axi", 0, G_ETHTX),
1878 PCLK(ETHRX, "ethrx", "ck_axi", 0, G_ETHRX),
1879 PCLK(ETHMAC, "ethmac", "ck_axi", 0, G_ETHMAC),
1880 PCLK(FMC, "fmc", "ck_axi", CLK_IGNORE_UNUSED, G_FMC),
1881 PCLK(QSPI, "qspi", "ck_axi", CLK_IGNORE_UNUSED, G_QSPI),
1882 PCLK(SDMMC1, "sdmmc1", "ck_axi", 0, G_SDMMC1),
1883 PCLK(SDMMC2, "sdmmc2", "ck_axi", 0, G_SDMMC2),
1884 PCLK(CRC1, "crc1", "ck_axi", 0, G_CRC1),
1885 PCLK(USBH, "usbh", "ck_axi", 0, G_USBH),
1886 PCLK(ETHSTP, "ethstp", "ck_axi", 0, G_ETHSTP),
1887
1888 /* Kernel clocks */
1889 KCLK(SDMMC1_K, "sdmmc1_k", sdmmc12_src, 0, G_SDMMC1, M_SDMMC12),
1890 KCLK(SDMMC2_K, "sdmmc2_k", sdmmc12_src, 0, G_SDMMC2, M_SDMMC12),
1891 KCLK(SDMMC3_K, "sdmmc3_k", sdmmc3_src, 0, G_SDMMC3, M_SDMMC3),
1892 KCLK(FMC_K, "fmc_k", fmc_src, 0, G_FMC, M_FMC),
1893 KCLK(QSPI_K, "qspi_k", qspi_src, 0, G_QSPI, M_QSPI),
1894 KCLK(RNG1_K, "rng1_k", rng_src, 0, G_RNG1, M_RNG1),
1895 KCLK(RNG2_K, "rng2_k", rng_src, 0, G_RNG2, M_RNG2),
1896 KCLK(USBPHY_K, "usbphy_k", usbphy_src, 0, G_USBPHY, M_USBPHY),
1897 KCLK(STGEN_K, "stgen_k", stgen_src, CLK_IGNORE_UNUSED,
1898 G_STGEN, M_STGEN),
1899 KCLK(SPDIF_K, "spdif_k", spdif_src, 0, G_SPDIF, M_SPDIF),
1900 KCLK(SPI1_K, "spi1_k", spi123_src, 0, G_SPI1, M_SPI1),
1901 KCLK(SPI2_K, "spi2_k", spi123_src, 0, G_SPI2, M_SPI23),
1902 KCLK(SPI3_K, "spi3_k", spi123_src, 0, G_SPI3, M_SPI23),
1903 KCLK(SPI4_K, "spi4_k", spi45_src, 0, G_SPI4, M_SPI45),
1904 KCLK(SPI5_K, "spi5_k", spi45_src, 0, G_SPI5, M_SPI45),
1905 KCLK(SPI6_K, "spi6_k", spi6_src, 0, G_SPI6, M_SPI6),
1906 KCLK(CEC_K, "cec_k", cec_src, 0, G_CEC, M_CEC),
1907 KCLK(I2C1_K, "i2c1_k", i2c12_src, 0, G_I2C1, M_I2C12),
1908 KCLK(I2C2_K, "i2c2_k", i2c12_src, 0, G_I2C2, M_I2C12),
1909 KCLK(I2C3_K, "i2c3_k", i2c35_src, 0, G_I2C3, M_I2C35),
1910 KCLK(I2C5_K, "i2c5_k", i2c35_src, 0, G_I2C5, M_I2C35),
1911 KCLK(I2C4_K, "i2c4_k", i2c46_src, 0, G_I2C4, M_I2C46),
1912 KCLK(I2C6_K, "i2c6_k", i2c46_src, 0, G_I2C6, M_I2C46),
1913 KCLK(LPTIM1_K, "lptim1_k", lptim1_src, 0, G_LPTIM1, M_LPTIM1),
1914 KCLK(LPTIM2_K, "lptim2_k", lptim23_src, 0, G_LPTIM2, M_LPTIM23),
1915 KCLK(LPTIM3_K, "lptim3_k", lptim23_src, 0, G_LPTIM3, M_LPTIM23),
1916 KCLK(LPTIM4_K, "lptim4_k", lptim45_src, 0, G_LPTIM4, M_LPTIM45),
1917 KCLK(LPTIM5_K, "lptim5_k", lptim45_src, 0, G_LPTIM5, M_LPTIM45),
1918 KCLK(USART1_K, "usart1_k", usart1_src, 0, G_USART1, M_USART1),
1919 KCLK(USART2_K, "usart2_k", usart234578_src, 0, G_USART2, M_UART24),
1920 KCLK(USART3_K, "usart3_k", usart234578_src, 0, G_USART3, M_UART35),
1921 KCLK(UART4_K, "uart4_k", usart234578_src, 0, G_UART4, M_UART24),
1922 KCLK(UART5_K, "uart5_k", usart234578_src, 0, G_UART5, M_UART35),
1923 KCLK(USART6_K, "uart6_k", usart6_src, 0, G_USART6, M_USART6),
1924 KCLK(UART7_K, "uart7_k", usart234578_src, 0, G_UART7, M_UART78),
1925 KCLK(UART8_K, "uart8_k", usart234578_src, 0, G_UART8, M_UART78),
1926 KCLK(FDCAN_K, "fdcan_k", fdcan_src, 0, G_FDCAN, M_FDCAN),
1927 KCLK(SAI1_K, "sai1_k", sai_src, 0, G_SAI1, M_SAI1),
1928 KCLK(SAI2_K, "sai2_k", sai2_src, 0, G_SAI2, M_SAI2),
1929 KCLK(SAI3_K, "sai3_k", sai_src, 0, G_SAI2, M_SAI3),
1930 KCLK(SAI4_K, "sai4_k", sai_src, 0, G_SAI2, M_SAI4),
1931 KCLK(ADC12_K, "adc12_k", adc12_src, 0, G_ADC12, M_ADC12),
1932 KCLK(DSI_K, "dsi_k", dsi_src, 0, G_DSI, M_DSI),
1933 KCLK(ADFSDM_K, "adfsdm_k", sai_src, 0, G_ADFSDM, M_SAI1),
1934 KCLK(USBO_K, "usbo_k", usbo_src, 0, G_USBO, M_USBO),
1935 KCLK(ETHCK_K, "ethck_k", eth_src, 0, G_ETHCK, M_ETHCK),
1936
1937 /* Particulary Kernel Clocks (no mux or no gate) */
1938 MGATE_MP1(DFSDM_K, "dfsdm_k", "ck_mcu", 0, G_DFSDM),
1939 MGATE_MP1(DSI_PX, "dsi_px", "pll4_q", CLK_SET_RATE_PARENT, G_DSI),
1940 MGATE_MP1(LTDC_PX, "ltdc_px", "pll4_q", CLK_SET_RATE_PARENT, G_LTDC),
1941 MGATE_MP1(GPU_K, "gpu_k", "pll2_q", 0, G_GPU),
1942 MGATE_MP1(DAC12_K, "dac12_k", "ck_lsi", 0, G_DAC12),
1943
1944 COMPOSITE(ETHPTP_K, "ethptp_k", eth_src, CLK_OPS_PARENT_ENABLE,
1945 _NO_GATE,
1946 _MMUX(M_ETHCK),
1947 _DIV(RCC_ETHCKSELR, 4, 4, CLK_DIVIDER_ALLOW_ZERO, NULL)),
1155}; 1948};
1156 1949
1157struct stm32_clock_match_data { 1950struct stm32_clock_match_data {