200 #define ALT_48MHZ_NO 0
201 #define ALT_48MHZ_I2S 1
202 #define ALT_48MHZ_SAI 2
204 #define ALT_48MHZ_Q 0
205 #define ALT_48MHZ_P 4
208 #define STM32F(x) [STM32F##x] = x
209 #define STM32F0(x) [STM32F0##x] = x
212 static const unsigned stm32_f_model[] = {
276 #define STM32MP(x) [STM32MP##x] = x
279 static const unsigned stm32_model_mp[] = {
284 #define stm32f2_4_192_pll_cfg { \
285 .min_vco_input = 1000000U, \
286 .max_vco_input = 2000000U, \
287 .min_vco_output = 192000000U, \
288 .max_vco_output = 432000000U, \
304 #define stm32f4_7_pll_cfg { \
305 .min_vco_input = 1000000U, \
306 .max_vco_input = 2000000U, \
307 .min_vco_output = 192000000U, \
308 .max_vco_output = 432000000U, \
324 #define stm32mp1_pll_cfg { \
325 .min_vco_input = 4000000U, \
326 .max_vco_input = 16000000U, \
327 .min_vco_output = 400000000U, \
328 .max_vco_output = 800000000U, \
346 static const clk_cfg_t stm32_f_clk_cfg[] = {
347 [STM32F030 ... STM32F098] = {
349 .max_coreclock = 48000000U,
350 .max_apb1 = 48000000U,
354 .min_vco_input = 1000000U,
355 .max_vco_input = 24000000U,
356 .min_vco_output = 16000000U,
357 .max_vco_output = 48000000U,
368 .has_pll_i2s =
false,
369 .has_pll_sai =
false,
370 .has_pll_i2s_alt_input =
false,
377 .max_coreclock = 24000000U,
378 .max_apb1 = 24000000U,
379 .max_apb2 = 24000000U,
382 .min_vco_input = 1000000U,
383 .max_vco_input = 24000000U,
384 .min_vco_output = 16000000U,
385 .max_vco_output = 24000000U,
396 .has_pll_i2s =
false,
397 .has_pll_sai =
false,
398 .has_pll_i2s_alt_input =
false,
403 [STM32F101 ... STM32F103] = {
405 .max_coreclock = 72000000U,
406 .max_apb1 = 36000000U,
407 .max_apb2 = 72000000U,
410 .min_vco_input = 1000000U,
411 .max_vco_input = 25000000U,
412 .min_vco_output = 1000000U,
413 .max_vco_output = 72000000U,
424 .has_pll_i2s =
false,
425 .has_pll_sai =
false,
426 .has_pll_i2s_alt_input =
false,
431 [STM32F205 ... STM32F217] = {
433 .max_coreclock = 120000000U,
434 .max_apb1 = 30000000U,
435 .max_apb2 = 60000000U,
437 .pll = stm32f2_4_192_pll_cfg,
439 .has_pll_sai =
false,
440 .has_pll_i2s_alt_input =
false,
444 [STM32F301 ... STM32F398] = {
446 .max_coreclock = 72000000U,
447 .max_apb1 = 36000000U,
448 .max_apb2 = 72000000U,
451 .min_vco_input = 1000000U,
452 .max_vco_input = 25000000U,
453 .min_vco_output = 1000000U,
454 .max_vco_output = 72000000U,
465 .has_pll_i2s =
false,
466 .has_pll_sai =
false,
467 .has_pll_i2s_alt_input =
false,
474 .max_coreclock = 84000000U,
475 .max_apb1 = 42000000U,
476 .max_apb2 = 84000000U,
478 .pll = stm32f2_4_192_pll_cfg,
480 .has_pll_sai =
false,
481 .has_pll_i2s_m =
false,
482 .has_pll_i2s_alt_input =
false,
486 [STM32F405 ... STM32F407] = {
488 .max_coreclock = 168000000U,
489 .max_apb1 = 42000000U,
490 .max_apb2 = 84000000U,
492 .pll = stm32f4_7_pll_cfg,
494 .has_pll_sai =
false,
495 .has_pll_i2s_m =
false,
496 .has_pll_i2s_alt_input =
false,
502 .max_coreclock = 100000000U,
503 .max_apb1 = 50000000U,
504 .max_apb2 = 100000000U,
506 .pll = stm32f4_7_pll_cfg,
507 .has_pll_i2s =
false,
508 .has_pll_sai =
false,
509 .has_pll_i2s_m =
false,
510 .has_pll_i2s_alt_input =
false,
516 .max_coreclock = 100000000U,
517 .max_apb1 = 50000000U,
518 .max_apb2 = 100000000U,
520 .pll = stm32f4_7_pll_cfg,
522 .has_pll_sai =
false,
523 .has_pll_i2s_m =
true,
524 .has_pll_i2s_alt_input =
false,
528 [STM32F412 ... STM32F413] = {
530 .max_coreclock = 100000000U,
531 .max_apb1 = 50000000U,
532 .max_apb2 = 100000000U,
534 .pll = stm32f4_7_pll_cfg,
537 .has_pll_i2s_m =
true,
538 .has_pll_sai_m =
false,
539 .has_pll_i2s_alt_input =
true,
540 .has_alt_48MHz = ALT_48MHZ_I2S,
543 [STM32F415 ... STM32F417] = {
545 .max_coreclock = 168000000U,
546 .max_apb1 = 42000000U,
547 .max_apb2 = 84000000U,
549 .pll = stm32f4_7_pll_cfg,
551 .has_pll_sai =
false,
552 .has_pll_i2s_m =
false,
553 .has_pll_i2s_alt_input =
false,
559 .max_coreclock = 100000000U,
560 .max_apb1 = 50000000U,
561 .max_apb2 = 100000000U,
563 .pll = stm32f4_7_pll_cfg,
566 .has_pll_i2s_m =
true,
567 .has_pll_sai_m =
false,
568 .has_pll_i2s_alt_input =
true,
569 .has_alt_48MHz = ALT_48MHZ_I2S,
572 [STM32F427 ... STM32F439] = {
574 .max_coreclock = 180000000U,
575 .max_apb1 = 45000000U,
576 .max_apb2 = 90000000U,
578 .pll = stm32f4_7_pll_cfg,
581 .has_pll_i2s_m =
false,
582 .has_pll_sai_m =
false,
583 .has_pll_i2s_alt_input =
false,
589 .max_coreclock = 180000000U,
590 .max_apb1 = 45000000U,
591 .max_apb2 = 90000000U,
593 .pll = stm32f4_7_pll_cfg,
596 .has_pll_i2s_m =
true,
597 .has_pll_sai_m =
true,
598 .has_pll_i2s_alt_input =
false,
599 .has_alt_48MHz = ALT_48MHZ_SAI | ALT_48MHZ_P,
602 [STM32F469 ... STM32F479] = {
604 .max_coreclock = 180000000U,
605 .max_apb1 = 45000000U,
606 .max_apb2 = 90000000U,
608 .pll = stm32f4_7_pll_cfg,
611 .has_pll_i2s_m =
false,
612 .has_pll_sai_m =
false,
613 .has_pll_i2s_alt_input =
false,
614 .has_alt_48MHz = ALT_48MHZ_SAI | ALT_48MHZ_P,
617 [STM32F722 ... STM32F779] = {
619 .max_coreclock = 216000000U,
620 .max_apb1 = 54000000U,
621 .max_apb2 = 108000000U,
623 .pll = stm32f4_7_pll_cfg,
626 .has_pll_i2s_m =
false,
627 .has_pll_sai_m =
false,
628 .has_pll_i2s_alt_input =
false,
629 .has_alt_48MHz = ALT_48MHZ_SAI | ALT_48MHZ_P,
637 static const clk_cfg_t stm32_mp_clk_cfg[] = {
640 .max_coreclock = 209000000U,
641 .max_apb1 = 104500000U,
642 .max_apb2 = 104500000U,
643 .max_apb3 = 104500000U,
645 .pll = stm32mp1_pll_cfg,
646 .has_pll_i2s =
false,
647 .has_pll_sai =
false,
648 .has_pll_i2s_m =
false,
649 .has_pll_sai_m =
false,
650 .has_pll_i2s_alt_input =
false,