407 lines
12 KiB
Plaintext
407 lines
12 KiB
Plaintext
# 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
|
|
default y
|
|
select USE_STM32_LL_UTILS
|
|
select USE_STM32_LL_RCC if (SOC_SERIES_STM32MP1X || SOC_SERIES_STM32H7X || \
|
|
SOC_SERIES_STM32H7RSX || SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X)
|
|
select RUNTIME_NMI if ($(dt_nodelabel_enabled,clk_hse) && \
|
|
$(dt_nodelabel_has_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
|
|
# Although deprecated, MCO configuration via Kconfig takes priority over Device Tree.
|
|
# Prevent DT-based MCO driver from compiling when Kconfig is used.
|
|
depends on CLOCK_STM32_MCO1_SRC_NOCLOCK && CLOCK_STM32_MCO2_SRC_NOCLOCK
|
|
|
|
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_EXT_HSE
|
|
bool "EXT_HSE"
|
|
depends on SOC_STM32F10X_CONNECTIVITY_LINE_DEVICE
|
|
select DEPRECATED
|
|
help
|
|
Use EXT_HSE as source of MCO1
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO1_SRC_LSE
|
|
bool "LSE"
|
|
depends on SOC_SERIES_STM32F4X || \
|
|
SOC_SERIES_STM32F7X || \
|
|
SOC_SERIES_STM32L4X || \
|
|
SOC_SERIES_STM32H7X || \
|
|
SOC_SERIES_STM32H7RSX || \
|
|
SOC_SERIES_STM32H5X || \
|
|
SOC_SERIES_STM32U5X
|
|
select DEPRECATED
|
|
help
|
|
Use LSE as source of MCO1
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO1_SRC_HSE
|
|
bool "HSE"
|
|
depends on SOC_SERIES_STM32F1X || \
|
|
SOC_SERIES_STM32F4X || \
|
|
SOC_SERIES_STM32F7X || \
|
|
SOC_SERIES_STM32L4X || \
|
|
SOC_SERIES_STM32H7X || \
|
|
SOC_SERIES_STM32H7RSX || \
|
|
SOC_SERIES_STM32H5X || \
|
|
SOC_SERIES_STM32U5X
|
|
select DEPRECATED
|
|
help
|
|
Use HSE as source of MCO1
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO1_SRC_LSI
|
|
bool "LSI"
|
|
depends on SOC_SERIES_STM32L4X || \
|
|
SOC_SERIES_STM32U5X
|
|
select DEPRECATED
|
|
help
|
|
Use LSI as source of MCO1
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO1_SRC_MSI
|
|
bool "MSI"
|
|
depends on SOC_SERIES_STM32L4X
|
|
select DEPRECATED
|
|
help
|
|
Use MSI as source of MCO1
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO1_SRC_MSIK
|
|
bool "MSIK"
|
|
depends on SOC_SERIES_STM32U5X
|
|
select DEPRECATED
|
|
help
|
|
Use MSIK as source of MCO1
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO1_SRC_MSIS
|
|
bool "MSIS"
|
|
depends on SOC_SERIES_STM32U5X
|
|
select DEPRECATED
|
|
help
|
|
Use MSIS as source of MCO1
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO1_SRC_HSI
|
|
bool "HSI"
|
|
depends on SOC_SERIES_STM32F1X || \
|
|
SOC_SERIES_STM32F4X || \
|
|
SOC_SERIES_STM32F7X || \
|
|
SOC_SERIES_STM32H7X || \
|
|
SOC_SERIES_STM32H7RSX || \
|
|
SOC_SERIES_STM32H5X
|
|
select DEPRECATED
|
|
help
|
|
Use HSI as source of MCO1
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO1_SRC_HSI16
|
|
bool "HSI16"
|
|
depends on SOC_SERIES_STM32L4X || \
|
|
SOC_SERIES_STM32U5X
|
|
select DEPRECATED
|
|
help
|
|
Use HSI16 as source of MCO1
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO1_SRC_HSI48
|
|
bool "HSI48"
|
|
depends on SOC_SERIES_STM32L4X || \
|
|
SOC_SERIES_STM32H7X || \
|
|
SOC_SERIES_STM32H7RSX || \
|
|
SOC_SERIES_STM32H5X || \
|
|
SOC_SERIES_STM32U5X
|
|
select DEPRECATED
|
|
help
|
|
Use HSI48 as source of MCO1
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO1_SRC_PLLCLK
|
|
bool "PLLCLK"
|
|
depends on SOC_SERIES_STM32F4X || \
|
|
SOC_SERIES_STM32F7X || \
|
|
SOC_SERIES_STM32L4X || \
|
|
SOC_SERIES_STM32U5X
|
|
select DEPRECATED
|
|
help
|
|
Use PLLCLK as source of MCO1
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO1_SRC_PLLQCLK
|
|
bool "PLLQ"
|
|
depends on SOC_SERIES_STM32H7X || \
|
|
SOC_SERIES_STM32H7RSX || \
|
|
SOC_SERIES_STM32H5X
|
|
select DEPRECATED
|
|
help
|
|
Use PLLQ as source of MCO1
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO1_SRC_PLLCLK_DIV2
|
|
bool "PLLCLK_DIV2"
|
|
depends on SOC_SERIES_STM32F1X
|
|
select DEPRECATED
|
|
help
|
|
Use PLLCLK/2 as source of MCO1
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO1_SRC_PLL2CLK
|
|
bool "PLL2CLK"
|
|
depends on SOC_STM32F10X_CONNECTIVITY_LINE_DEVICE
|
|
select DEPRECATED
|
|
help
|
|
Use PLL2CLK as source of MCO1
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO1_SRC_PLLI2SCLK
|
|
bool "PLLI2SCLK"
|
|
depends on SOC_STM32F10X_CONNECTIVITY_LINE_DEVICE
|
|
select DEPRECATED
|
|
help
|
|
Use PLLI2SCLK as source of MCO1
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO1_SRC_PLLI2SCLK_DIV2
|
|
bool "PLLI2SCLK_DIV2"
|
|
depends on SOC_STM32F10X_CONNECTIVITY_LINE_DEVICE
|
|
select DEPRECATED
|
|
help
|
|
Use PLLI2SCLK/2 as source of MCO1
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO1_SRC_SYSCLK
|
|
bool "SYSCLK"
|
|
depends on SOC_SERIES_STM32F1X || \
|
|
SOC_SERIES_STM32L4X || \
|
|
SOC_SERIES_STM32U5X
|
|
select DEPRECATED
|
|
help
|
|
Use SYSCLK as source of MCO1
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
endchoice
|
|
|
|
config CLOCK_STM32_MCO1_DIV
|
|
int "MCO1 prescaler"
|
|
depends on !CLOCK_STM32_MCO1_SRC_NOCLOCK && (\
|
|
SOC_SERIES_STM32F4X || \
|
|
SOC_SERIES_STM32F7X || \
|
|
SOC_SERIES_STM32L4X || \
|
|
SOC_SERIES_STM32H7X || \
|
|
SOC_SERIES_STM32H7RSX || \
|
|
SOC_SERIES_STM32H5X || \
|
|
SOC_SERIES_STM32U5X \
|
|
)
|
|
default 1
|
|
range 1 5 if SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X
|
|
range 1 15 if SOC_SERIES_STM32H7X || SOC_SERIES_STM32H7RSX || SOC_SERIES_STM32H5X
|
|
range 1 16 if SOC_SERIES_STM32L4X || SOC_SERIES_STM32U5X
|
|
help
|
|
Prescaler for MCO1 output clock
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
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 || \
|
|
SOC_SERIES_STM32F7X || \
|
|
SOC_SERIES_STM32H7X || \
|
|
SOC_SERIES_STM32H7RSX || \
|
|
SOC_SERIES_STM32H5X
|
|
select DEPRECATED
|
|
help
|
|
Use SYSCLK as source of MCO2
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO2_SRC_PLLI2S
|
|
bool "PLLI2S"
|
|
depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X
|
|
select DEPRECATED
|
|
help
|
|
Use PLLI2S as source of MCO2
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO2_SRC_HSE
|
|
bool "HSE"
|
|
depends on SOC_SERIES_STM32F4X || \
|
|
SOC_SERIES_STM32F7X || \
|
|
SOC_SERIES_STM32H7X || \
|
|
SOC_SERIES_STM32H7RSX || \
|
|
SOC_SERIES_STM32H5X
|
|
select DEPRECATED
|
|
help
|
|
Use HSE as source of MCO2
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO2_SRC_LSI
|
|
bool "LSI"
|
|
depends on SOC_SERIES_STM32H7X || \
|
|
SOC_SERIES_STM32H7RSX || \
|
|
SOC_SERIES_STM32H5X
|
|
help
|
|
Use LSI as source of MCO2
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO2_SRC_CSI
|
|
bool "CSI"
|
|
depends on SOC_SERIES_STM32H7X || \
|
|
SOC_SERIES_STM32H7RSX || \
|
|
SOC_SERIES_STM32H5X
|
|
select DEPRECATED
|
|
help
|
|
Use CSI as source of MCO2
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO2_SRC_PLLCLK
|
|
bool "PLLCLK"
|
|
depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X
|
|
select DEPRECATED
|
|
help
|
|
Use PLLCLK as source of MCO2
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO2_SRC_PLLPCLK
|
|
bool "PLLPCLK"
|
|
depends on SOC_SERIES_STM32H7X || \
|
|
SOC_SERIES_STM32H7RSX || \
|
|
SOC_SERIES_STM32H5X
|
|
select DEPRECATED
|
|
help
|
|
Use PLLPCLK as source of MC02
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
config CLOCK_STM32_MCO2_SRC_PLL2PCLK
|
|
bool "PLL2PCLK"
|
|
depends on SOC_SERIES_STM32H7X || \
|
|
SOC_SERIES_STM32H7RSX || \
|
|
SOC_SERIES_STM32H5X
|
|
select DEPRECATED
|
|
help
|
|
Use PLL2PCLK as source of MC02
|
|
This option is deprecated, please use devicetree instead.
|
|
|
|
endchoice
|
|
|
|
config CLOCK_STM32_MCO2_DIV
|
|
int "MCO2 prescaler"
|
|
depends on !CLOCK_STM32_MCO2_SRC_NOCLOCK && (\
|
|
SOC_SERIES_STM32F4X || \
|
|
SOC_SERIES_STM32F7X || \
|
|
SOC_SERIES_STM32H5X || \
|
|
SOC_SERIES_STM32H7X || \
|
|
SOC_SERIES_STM32H7RSX \
|
|
)
|
|
default 1
|
|
range 1 5 if SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X
|
|
range 1 15 if SOC_SERIES_STM32H7X || SOC_SERIES_STM32H7RSX || SOC_SERIES_STM32H5X
|
|
help
|
|
Prescaler for MCO2 output clock
|
|
|
|
endif # CLOCK_CONTROL_STM32_CUBE
|