| # STM32 MCU clock control driver config |
| |
| # Copyright (c) 2017 Linaro |
| # Copyright (c) 2017 RnDity Sp. z o.o. |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| menuconfig CLOCK_CONTROL_STM32_CUBE |
| bool "STM32 Reset & Clock Control" |
| depends on SOC_FAMILY_STM32 |
| select USE_STM32_LL_UTILS |
| select USE_STM32_LL_RCC if SOC_SERIES_STM32MP1X |
| help |
| Enable driver for Reset & Clock Control subsystem found |
| in STM32 family of MCUs |
| |
| if CLOCK_CONTROL_STM32_CUBE |
| |
| config CLOCK_CONTROL_STM32_DEVICE_INIT_PRIORITY |
| int "Clock Control Device Priority" |
| default 1 |
| help |
| This option controls the priority of clock control |
| device initialization. Higher priority ensures that the device |
| is initialized earlier in the startup cycle. If unsure, leave |
| at default value 1 |
| |
| DT_STM32_HSE_CLOCK := $(dt_nodelabel_path,clk_hse) |
| DT_STM32_HSE_CLOCK_FREQ := $(dt_node_int_prop_int,$(DT_STM32_HSE_CLOCK),clock-frequency) |
| |
| config CLOCK_STM32_HSE_CLOCK |
| int "HSE clock value" |
| default "$(DT_STM32_HSE_CLOCK_FREQ)" if "$(dt_nodelabel_enabled,clk_hse)" |
| default 8000000 |
| help |
| Value of external high-speed clock (HSE). This symbol could be optionally |
| configured using device tree by setting "clock-frequency" value of clk_hse |
| node. For instance: |
| &clk_hse{ |
| status = "okay"; |
| clock-frequency = <DT_FREQ_M(25)>; |
| }; |
| Note: Device tree configuration is overridden when current symbol is set: |
| CONFIG_CLOCK_STM32_HSE_CLOCK=32000000 |
| |
| config CLOCK_CONTROL_STM32_HAS_DTS |
| bool |
| default y if "$(dt_node_has_prop,rcc,clocks)" |
| help |
| This symbol is added to prevent default use of CLOCK_CONTROL_STM32_* symbols |
| when board make use of device tree to configure clocks. |
| |
| if !CLOCK_CONTROL_STM32_HAS_DTS |
| |
| choice CLOCK_STM32_SYSCLK_SRC |
| prompt "STM32 System Clock Source" |
| |
| config CLOCK_STM32_SYSCLK_SRC_HSE |
| bool "HSE" |
| help |
| Use HSE as source of SYSCLK |
| |
| config CLOCK_STM32_SYSCLK_SRC_HSI |
| bool "HSI" |
| help |
| Use HSI as source of SYSCLK |
| |
| config CLOCK_STM32_SYSCLK_SRC_MSI |
| bool "MSI" |
| depends on SOC_SERIES_STM32L0X || SOC_SERIES_STM32L4X || SOC_SERIES_STM32L5X || SOC_SERIES_STM32WBX || SOC_SERIES_STM32WLX |
| help |
| Use MSI as source of SYSCLK |
| |
| config CLOCK_STM32_SYSCLK_SRC_PLL |
| bool "PLL" |
| help |
| Use PLL as source of SYSCLK |
| |
| config CLOCK_STM32_SYSCLK_SRC_CSI |
| bool "CSI" |
| depends on SOC_SERIES_STM32H7X |
| help |
| Use CSI as source of SYSCLK |
| |
| endchoice #CLOCK_STM32_SYSCLK_SRC |
| |
| config CLOCK_STM32_HSE_BYPASS |
| bool "HSE bypass" |
| depends on CLOCK_STM32_SYSCLK_SRC_HSE || CLOCK_STM32_PLL_SRC_HSE |
| help |
| Enable this option to bypass external high-speed clock (HSE). |
| |
| config CLOCK_STM32_MSI_RANGE |
| int "MSI frequency range" |
| depends on CLOCK_STM32_SYSCLK_SRC_MSI || CLOCK_STM32_PLL_SRC_MSI |
| default 8 |
| help |
| Frequency range of MSI when MSI range is provided in RCC_CR register |
| Range 0: 100kHz |
| Range 1: 200kHz |
| Range 2 around 400 kHz |
| Range 3 around 800 kHz |
| Range 4: 1 MHz |
| Range 5: 2 MHz |
| Range 6: 4 MHz (reset value) |
| Range 7: 8 MHz |
| Range 8: 16 MHz |
| Range 9: 24 MHz |
| Range 10: 32 MHz |
| Range 11: 48 MHz |
| |
| choice |
| prompt "STM32 PLL Clock Source" |
| default CLOCK_STM32_PLL_SRC_HSI |
| depends on CLOCK_STM32_SYSCLK_SRC_PLL |
| |
| config CLOCK_STM32_PLL_SRC_MSI |
| bool "MSI" |
| depends on SOC_SERIES_STM32L0X || SOC_SERIES_STM32L4X || SOC_SERIES_STM32L5X || SOC_SERIES_STM32WBX || SOC_SERIES_STM32WLX |
| help |
| Use MSI as source of PLL |
| |
| config CLOCK_STM32_PLL_SRC_HSI |
| bool "HSI" |
| help |
| Use HSI as source of PLL |
| |
| config CLOCK_STM32_PLL_SRC_HSE |
| bool "HSE" |
| help |
| Use HSE as source of PLL |
| |
| config CLOCK_STM32_PLL_SRC_PLL2 |
| bool "PLL2" |
| depends on SOC_STM32F10X_CONNECTIVITY_LINE_DEVICE |
| help |
| Use PLL2 as source of main PLL. This is equivalent of defining |
| PLL2 as source PREDIV1SCR. If not selected, default source is HSE. |
| |
| config CLOCK_STM32_PLL_SRC_CSI |
| bool "CSI" |
| depends on SOC_SERIES_STM32H7X |
| help |
| Use CSI 4MHz as source of the main PLL. |
| |
| endchoice |
| |
| |
| # Source series specific files for PLL settings |
| |
| source "drivers/clock_control/Kconfig.stm32f0_f3" |
| source "drivers/clock_control/Kconfig.stm32f1" |
| source "drivers/clock_control/Kconfig.stm32f2_f4_f7" |
| source "drivers/clock_control/Kconfig.stm32h7" |
| source "drivers/clock_control/Kconfig.stm32l0_l1" |
| source "drivers/clock_control/Kconfig.stm32l4_l5_wb_wl" |
| source "drivers/clock_control/Kconfig.stm32g0" |
| source "drivers/clock_control/Kconfig.stm32g4" |
| |
| # Bus clocks configuration options |
| |
| if !SOC_SERIES_STM32H7X |
| |
| config CLOCK_STM32_AHB_PRESCALER |
| int "AHB prescaler" |
| default 1 |
| range 1 512 |
| depends on !SOC_SERIES_STM32WBX && !SOC_SERIES_STM32WLX |
| help |
| AHB prescaler, allowed values: 1, 2, 4, 8, 16, 64, 128, |
| 256, 512. |
| |
| config CLOCK_STM32_APB1_PRESCALER |
| int "APB1 prescaler" |
| default 1 |
| range 1 16 |
| help |
| APB1 Low speed clock (PCLK1) prescaler, allowed values: |
| 1, 2, 4, 8, 16 |
| |
| config CLOCK_STM32_APB2_PRESCALER |
| int "APB2 prescaler" |
| default 1 |
| range 1 16 |
| depends on !SOC_SERIES_STM32F0X && !SOC_SERIES_STM32G0X |
| help |
| APB2 High speed clock (PCLK2) prescaler, allowed values: |
| 1, 2, 4, 8, 16 |
| |
| config CLOCK_STM32_CPU1_PRESCALER |
| int "CPU1 HCLK prescaler" |
| default 1 |
| range 1 512 |
| depends on SOC_SERIES_STM32WBX || SOC_SERIES_STM32WLX |
| help |
| CPU1 HCLK prescaler, allowed values: 1, 2, 3, 4, 5, 6, 8, 10, 16, 32, |
| 64, 128, 256, 512. |
| |
| config CLOCK_STM32_CPU2_PRESCALER |
| int "CPU2 HCLK prescaler" |
| default 1 |
| range 1 512 |
| depends on SOC_SERIES_STM32WBX || SOC_SERIES_STM32WLX |
| help |
| CPU2 HCLK prescaler, allowed values: 1, 2, 3, 4, 5, 6, 8, 10, 16, 32, |
| 64, 128, 256, 512. |
| |
| config CLOCK_STM32_AHB3_PRESCALER |
| int "AHB3 HCLK prescaler" |
| default 1 |
| range 1 512 |
| depends on SOC_SERIES_STM32WLX |
| help |
| HCLK4 prescaler, allowed values: 1, 2, 3, 4, 5, 6, 8, 10, 16, 32, |
| 64, 128, 256, 512. |
| |
| config CLOCK_STM32_AHB4_PRESCALER |
| int "AHB4 HCLK prescaler" |
| default 1 |
| range 1 512 |
| depends on SOC_SERIES_STM32WBX |
| help |
| HCLK4 prescaler, allowed values: 1, 2, 3, 4, 5, 6, 8, 10, 16, 32, |
| 64, 128, 256, 512. |
| |
| endif # !SOC_SERIES_STM32H7X |
| |
| endif # CLOCK_CONTROL_STM32_HAS_DTS |
| |
| # Micro-controller Clock output configuration options |
| |
| choice |
| prompt "STM32 MCO1 Clock Source" |
| default CLOCK_STM32_MCO1_SRC_NOCLOCK |
| |
| config CLOCK_STM32_MCO1_SRC_NOCLOCK |
| bool "NOCLOCK" |
| help |
| MCO1 output disabled, no clock on MCO1 |
| |
| config CLOCK_STM32_MCO1_SRC_LSE |
| bool "LSE" |
| depends on SOC_SERIES_STM32F4X |
| help |
| Use LSE as source of MCO1 |
| |
| config CLOCK_STM32_MCO1_SRC_HSE |
| bool "HSE" |
| depends on SOC_SERIES_STM32F4X |
| help |
| Use HSE as source of MCO1 |
| |
| config CLOCK_STM32_MCO1_SRC_HSI |
| bool "HSI" |
| depends on SOC_SERIES_STM32F4X |
| help |
| Use HSI as source of MCO1 |
| |
| config CLOCK_STM32_MCO1_SRC_PLLCLK |
| bool "PLLCLK" |
| depends on SOC_SERIES_STM32F4X |
| help |
| Use PLLCLK as source of MCO1 |
| |
| endchoice |
| |
| config CLOCK_STM32_MCO1_DIV |
| int "MCO1 prescaler" |
| depends on !CLOCK_STM32_MCO1_SRC_NOCLOCK |
| default 1 |
| range 1 5 |
| help |
| allowed values: 1, 2, 3, 4, 5 |
| |
| choice |
| prompt "STM32 MCO2 Clock Source" |
| default CLOCK_STM32_MCO2_SRC_NOCLOCK |
| |
| config CLOCK_STM32_MCO2_SRC_NOCLOCK |
| bool "NOCLOCK" |
| help |
| MCO2 output disabled, no clock on MCO2 |
| |
| config CLOCK_STM32_MCO2_SRC_SYSCLK |
| bool "SYSCLK" |
| depends on SOC_SERIES_STM32F4X |
| help |
| Use SYSCLK as source of MCO2 |
| |
| config CLOCK_STM32_MCO2_SRC_PLLI2S |
| bool "PLLI2S" |
| depends on SOC_SERIES_STM32F4X |
| help |
| Use PLLI2S as source of MCO2 |
| |
| config CLOCK_STM32_MCO2_SRC_HSE |
| bool "HSE" |
| depends on SOC_SERIES_STM32F4X |
| help |
| Use HSE as source of MCO2 |
| |
| config CLOCK_STM32_MCO2_SRC_PLLCLK |
| bool "PLLCLK" |
| depends on SOC_SERIES_STM32F4X |
| help |
| Use PLLCLK as source of MCO2 |
| |
| endchoice |
| |
| config CLOCK_STM32_MCO2_DIV |
| int "MCO2 prescaler" |
| depends on !CLOCK_STM32_MCO2_SRC_NOCLOCK |
| default 1 |
| range 1 5 |
| help |
| allowed values: 1, 2, 3, 4, 5 |
| |
| endif # CLOCK_CONTROL_STM32_CUBE |