|  | # 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)" || "$(dt_node_has_prop,rcc,d1cpre)" | 
|  | 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 && !SOC_SERIES_STM32MP1X | 
|  |  | 
|  | 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 && !SOC_SERIES_STM32MP1X | 
|  |  | 
|  | 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 |