|  | # STM32 MCU clock control driver config | 
|  |  | 
|  | # Copyright (c) 2017 Linaro | 
|  | # Copyright (c) 2017 RnDity Sp. z o.o. | 
|  | # Copyright (C) 2025 Savoir-faire Linux, Inc. | 
|  | # SPDX-License-Identifier: Apache-2.0 | 
|  |  | 
|  | menuconfig CLOCK_CONTROL_STM32_CUBE | 
|  | bool "STM32 Reset & Clock Control" | 
|  | depends on SOC_FAMILY_STM32 | 
|  | default y | 
|  | select USE_STM32_LL_UTILS | 
|  | select USE_STM32_LL_RCC if (SOC_SERIES_STM32MP1X || SOC_SERIES_STM32MP13X || \ | 
|  | SOC_SERIES_STM32MP2X || SOC_SERIES_STM32H7X || SOC_SERIES_STM32H7RSX || \ | 
|  | SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X || \ | 
|  | SOC_SERIES_STM32N6X) | 
|  | select RUNTIME_NMI if ($(dt_nodelabel_enabled,clk_hse) && \ | 
|  | $(dt_nodelabel_bool_prop,clk_hse,css-enabled)) | 
|  | help | 
|  | Enable driver for Reset & Clock Control subsystem found | 
|  | in STM32 family of MCUs | 
|  |  | 
|  | if CLOCK_CONTROL_STM32_CUBE | 
|  |  | 
|  | 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_STM32_MUX | 
|  | bool "STM32 clock mux driver" | 
|  | default y | 
|  | depends on DT_HAS_ST_STM32_CLOCK_MUX_ENABLED | 
|  | help | 
|  | Enable driver for STM32 clock mux which don't match an | 
|  | existing clock hardware block but allows to select a clock | 
|  | for a specific domain. For instance per_ck clock on STM32H7 or | 
|  | CLK48 clock | 
|  |  | 
|  | menu "STM32WB0 LSI options" | 
|  | depends on DT_HAS_ST_STM32WB0_LSI_CLOCK_ENABLED | 
|  |  | 
|  | config STM32WB0_LSI_MEASUREMENT_WINDOW | 
|  | int "Size of LSI measurement window (in periods)" | 
|  | default 32 | 
|  | range 23 256 | 
|  | help | 
|  | Size of the LSI measurement window (# of LSI periods) | 
|  |  | 
|  | The measurement process involves waiting for a certain amount of LSI periods | 
|  | to occur, in order to determine precisely the LSI period, and thus frequency. | 
|  |  | 
|  | This property controls how much LSI periods are required for each measure. | 
|  | Bigger window sizes increase accuracy of the measure, but increase the time | 
|  | needed to complete it. Since fLSI >= 24kHz, increasing the measurement window | 
|  | size makes each measure roughly 42µs slower in the worst case. | 
|  |  | 
|  | Minimal value is a recommendation from RM0505 Rev.1 §25.8.2, and maximum | 
|  | value is a hardware limitation. | 
|  |  | 
|  | config STM32WB0_LSI_RUNTIME_MEASUREMENT_INTERVAL | 
|  | int "LSI run-time measurement interval (ms)" | 
|  | default 0 | 
|  | help | 
|  | Interval at which runtime measurements should be performed, in milliseconds | 
|  |  | 
|  | Since the LSI RC frequency is affected by temperature, which is not stable | 
|  | across time, it is recommended to perform measurements of the LSI frequency | 
|  | at regular intervals to obtain better accuracy. | 
|  |  | 
|  | This property enables runtime LSI measurement if present. In this case, | 
|  | a background thread is created and performs LSI measurements, sleeping | 
|  | the amount of time specified in this property between each measure. This | 
|  | thread is also tasked with updating the control registers of peripherals | 
|  | affected by slow clock drift such as RTC or IWDG, in collaboration with | 
|  | the peripherals' drivers. Note that this increases the memory footprint | 
|  | of the clock control driver, and may increase power consumption. | 
|  |  | 
|  | Setting this option to the default value of "0" disables runtime frequency | 
|  | measurements - the result of a single measure performed at boot will be | 
|  | treated as LSI frequency for the lifetime of the application. | 
|  |  | 
|  | endmenu # DT_HAS_ST_STM32WB0_LSI_CLOCK_ENABLED | 
|  |  | 
|  | # Micro-controller Clock Output (MCO) configuration options | 
|  | config CLOCK_STM32_MCO | 
|  | bool | 
|  | default y | 
|  | depends on DT_HAS_ST_STM32_CLOCK_MCO_ENABLED || DT_HAS_ST_STM32F1_CLOCK_MCO_ENABLED | 
|  | help | 
|  | Allows to output various different clock sources onto the MCO pin | 
|  | using a configurable prescaler. | 
|  |  | 
|  | endif # CLOCK_CONTROL_STM32_CUBE |