Skip to content

Commit 9c18186

Browse files
juickarHardevsinh-Palaniya
authored andcommitted
drivers: clock: stm32: Move the MSI init after the LSE init
Moved the MSI init after the LSE init to respect the initialization flow of the MSI PLL mode that need LSE to be enabled and ready. Signed-off-by: Julien Racki <[email protected]>
1 parent dcf379c commit 9c18186

File tree

2 files changed

+35
-31
lines changed

2 files changed

+35
-31
lines changed

drivers/clock_control/clock_stm32_ll_common.c

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -931,37 +931,6 @@ static void set_up_fixed_clock_sources(void)
931931
#endif
932932
}
933933

934-
#if defined(STM32_MSI_ENABLED)
935-
if (IS_ENABLED(STM32_MSI_ENABLED)) {
936-
/* Set MSI Range */
937-
#if defined(RCC_CR_MSIRGSEL)
938-
LL_RCC_MSI_EnableRangeSelection();
939-
#endif /* RCC_CR_MSIRGSEL */
940-
941-
#if defined(CONFIG_SOC_SERIES_STM32L0X) || defined(CONFIG_SOC_SERIES_STM32L1X)
942-
LL_RCC_MSI_SetRange(STM32_MSI_RANGE << RCC_ICSCR_MSIRANGE_Pos);
943-
#else
944-
LL_RCC_MSI_SetRange(STM32_MSI_RANGE << RCC_CR_MSIRANGE_Pos);
945-
#endif /* CONFIG_SOC_SERIES_STM32L0X || CONFIG_SOC_SERIES_STM32L1X */
946-
947-
#if STM32_MSI_PLL_MODE
948-
/* Enable MSI hardware auto calibration */
949-
LL_RCC_MSI_EnablePLLMode();
950-
#endif
951-
952-
LL_RCC_MSI_SetCalibTrimming(0);
953-
954-
/* Enable MSI if not enabled */
955-
if (LL_RCC_MSI_IsReady() != 1) {
956-
/* Enable MSI */
957-
LL_RCC_MSI_Enable();
958-
while (LL_RCC_MSI_IsReady() != 1) {
959-
/* Wait for MSI ready */
960-
}
961-
}
962-
}
963-
#endif /* STM32_MSI_ENABLED */
964-
965934
if (IS_ENABLED(STM32_LSI_ENABLED)) {
966935
#if defined(CONFIG_SOC_SERIES_STM32WBX)
967936
LL_RCC_LSI1_Enable();
@@ -1009,6 +978,37 @@ static void set_up_fixed_clock_sources(void)
1009978
z_stm32_hsem_unlock(CFG_HW_RCC_SEMID);
1010979
}
1011980

981+
#if defined(STM32_MSI_ENABLED)
982+
if (IS_ENABLED(STM32_MSI_ENABLED)) {
983+
/* Set MSI Range */
984+
#if defined(RCC_CR_MSIRGSEL)
985+
LL_RCC_MSI_EnableRangeSelection();
986+
#endif /* RCC_CR_MSIRGSEL */
987+
988+
#if defined(CONFIG_SOC_SERIES_STM32L0X) || defined(CONFIG_SOC_SERIES_STM32L1X)
989+
LL_RCC_MSI_SetRange(STM32_MSI_RANGE << RCC_ICSCR_MSIRANGE_Pos);
990+
#else
991+
LL_RCC_MSI_SetRange(STM32_MSI_RANGE << RCC_CR_MSIRANGE_Pos);
992+
#endif /* CONFIG_SOC_SERIES_STM32L0X || CONFIG_SOC_SERIES_STM32L1X */
993+
994+
#if STM32_MSI_PLL_MODE
995+
/* Enable MSI hardware auto calibration */
996+
LL_RCC_MSI_EnablePLLMode();
997+
#endif
998+
999+
LL_RCC_MSI_SetCalibTrimming(0);
1000+
1001+
/* Enable MSI if not enabled */
1002+
if (LL_RCC_MSI_IsReady() != 1) {
1003+
/* Enable MSI */
1004+
LL_RCC_MSI_Enable();
1005+
while (LL_RCC_MSI_IsReady() != 1) {
1006+
/* Wait for MSI ready */
1007+
}
1008+
}
1009+
}
1010+
#endif /* STM32_MSI_ENABLED */
1011+
10121012
#if defined(STM32_HSI14_ENABLED)
10131013
/* For all series with HSI 14 clock support */
10141014
if (IS_ENABLED(STM32_HSI14_ENABLED)) {

include/zephyr/drivers/clock_control/stm32_clock_control.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,10 @@
574574
#define STM32_MSI_PLL_MODE DT_PROP(DT_NODELABEL(clk_msi), msi_pll_mode)
575575
#endif
576576

577+
#if defined(CONFIG_SOC_SERIES_STM32L4X) && STM32_MSI_PLL_MODE && !STM32_LSE_ENABLED
578+
#error "On STM32L4 series, MSI PLL mode requires LSE to be enabled"
579+
#endif
580+
577581
#if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_msis), st_stm32u5_msi_clock, okay) || \
578582
DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_msis), st_stm32u3_msi_clock, okay)
579583
#define STM32_MSIS_ENABLED 1

0 commit comments

Comments
 (0)