LCOV - code coverage report
Current view: top level - zephyr/drivers/clock_control - stm32_clock_control.h Coverage Total Hit
Test: new.info Lines: 19.0 % 58 11
Test Date: 2025-09-25 19:22:35

            Line data    Source code
       1            0 : /*
       2              :  * Copyright (c) 2016 Open-RnD Sp. z o.o.
       3              :  * Copyright (c) 2016 BayLibre, SAS
       4              :  * Copyright (c) 2017-2022 Linaro Limited.
       5              :  * Copyright (c) 2017 RnDity Sp. z o.o.
       6              :  * Copyright (c) 2023 STMicroelectronics
       7              :  *
       8              :  * SPDX-License-Identifier: Apache-2.0
       9              :  */
      10              : #ifndef ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_STM32_CLOCK_CONTROL_H_
      11              : #define ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_STM32_CLOCK_CONTROL_H_
      12              : 
      13              : #include <zephyr/drivers/clock_control.h>
      14              : 
      15              : #if defined(CONFIG_SOC_SERIES_STM32C0X)
      16              : #include <zephyr/dt-bindings/clock/stm32c0_clock.h>
      17              : #elif defined(CONFIG_SOC_SERIES_STM32F0X)
      18              : #include <zephyr/dt-bindings/clock/stm32f0_clock.h>
      19              : #elif defined(CONFIG_SOC_SERIES_STM32F1X)
      20              : #if defined(CONFIG_SOC_STM32F10X_CONNECTIVITY_LINE_DEVICE)
      21              : #include <zephyr/dt-bindings/clock/stm32f10x_clock.h>
      22              : #else
      23              : #include <zephyr/dt-bindings/clock/stm32f1_clock.h>
      24              : #endif
      25              : #elif defined(CONFIG_SOC_SERIES_STM32F3X)
      26              : #include <zephyr/dt-bindings/clock/stm32f3_clock.h>
      27              : #elif defined(CONFIG_SOC_SERIES_STM32F2X) || \
      28              :         defined(CONFIG_SOC_SERIES_STM32F4X)
      29              : #include <zephyr/dt-bindings/clock/stm32f4_clock.h>
      30              : #include <zephyr/dt-bindings/clock/stm32f410_clock.h>
      31              : #elif defined(CONFIG_SOC_SERIES_STM32F7X)
      32              : #include <zephyr/dt-bindings/clock/stm32f7_clock.h>
      33              : #elif defined(CONFIG_SOC_SERIES_STM32G0X)
      34              : #include <zephyr/dt-bindings/clock/stm32g0_clock.h>
      35              : #elif defined(CONFIG_SOC_SERIES_STM32G4X)
      36              : #include <zephyr/dt-bindings/clock/stm32g4_clock.h>
      37              : #elif defined(CONFIG_SOC_SERIES_STM32L0X)
      38              : #include <zephyr/dt-bindings/clock/stm32l0_clock.h>
      39              : #elif defined(CONFIG_SOC_SERIES_STM32L1X)
      40              : #include <zephyr/dt-bindings/clock/stm32l1_clock.h>
      41              : #elif defined(CONFIG_SOC_SERIES_STM32L4X) || \
      42              :         defined(CONFIG_SOC_SERIES_STM32L5X)
      43              : #include <zephyr/dt-bindings/clock/stm32l4_clock.h>
      44              : #elif defined(CONFIG_SOC_SERIES_STM32MP2X)
      45              : #include <zephyr/dt-bindings/clock/stm32mp2_clock.h>
      46              : #elif defined(CONFIG_SOC_SERIES_STM32WBX)
      47              : #include <zephyr/dt-bindings/clock/stm32wb_clock.h>
      48              : #elif defined(CONFIG_SOC_SERIES_STM32WB0X)
      49              : #include <zephyr/dt-bindings/clock/stm32wb0_clock.h>
      50              : #elif defined(CONFIG_SOC_SERIES_STM32WLX)
      51              : #include <zephyr/dt-bindings/clock/stm32wl_clock.h>
      52              : #elif defined(CONFIG_SOC_SERIES_STM32H5X)
      53              : #include <zephyr/dt-bindings/clock/stm32h5_clock.h>
      54              : #elif defined(CONFIG_SOC_SERIES_STM32H7X)
      55              : #include <zephyr/dt-bindings/clock/stm32h7_clock.h>
      56              : #elif defined(CONFIG_SOC_SERIES_STM32H7RSX)
      57              : #include <zephyr/dt-bindings/clock/stm32h7rs_clock.h>
      58              : #elif defined(CONFIG_SOC_SERIES_STM32MP13X)
      59              : #include <zephyr/dt-bindings/clock/stm32mp13_clock.h>
      60              : #elif defined(CONFIG_SOC_SERIES_STM32N6X)
      61              : #include <zephyr/dt-bindings/clock/stm32n6_clock.h>
      62              : #elif defined(CONFIG_SOC_SERIES_STM32U0X)
      63              : #include <zephyr/dt-bindings/clock/stm32u0_clock.h>
      64              : #elif defined(CONFIG_SOC_SERIES_STM32U3X)
      65              : #include <zephyr/dt-bindings/clock/stm32u3_clock.h>
      66              : #elif defined(CONFIG_SOC_SERIES_STM32U5X)
      67              : #include <zephyr/dt-bindings/clock/stm32u5_clock.h>
      68              : #elif defined(CONFIG_SOC_SERIES_STM32WBAX)
      69              : #include <zephyr/dt-bindings/clock/stm32wba_clock.h>
      70              : #else
      71              : #include <zephyr/dt-bindings/clock/stm32_clock.h>
      72              : #endif
      73              : 
      74              : /** Common clock control device node for all STM32 chips */
      75            1 : #define STM32_CLOCK_CONTROL_NODE DT_NODELABEL(rcc)
      76              : 
      77              : /** RCC node related symbols */
      78              : 
      79            1 : #define STM32_AHB_PRESCALER     DT_PROP(DT_NODELABEL(rcc), ahb_prescaler)
      80            0 : #define STM32_APB1_PRESCALER    DT_PROP(DT_NODELABEL(rcc), apb1_prescaler)
      81            0 : #define STM32_APB2_PRESCALER    DT_PROP(DT_NODELABEL(rcc), apb2_prescaler)
      82            0 : #define STM32_APB3_PRESCALER    DT_PROP(DT_NODELABEL(rcc), apb3_prescaler)
      83            0 : #define STM32_APB4_PRESCALER    DT_PROP(DT_NODELABEL(rcc), apb4_prescaler)
      84            0 : #define STM32_APB5_PRESCALER    DT_PROP(DT_NODELABEL(rcc), apb5_prescaler)
      85            0 : #define STM32_APB7_PRESCALER    DT_PROP(DT_NODELABEL(rcc), apb7_prescaler)
      86            0 : #define STM32_AHB3_PRESCALER    DT_PROP(DT_NODELABEL(rcc), ahb3_prescaler)
      87            0 : #define STM32_AHB4_PRESCALER    DT_PROP(DT_NODELABEL(rcc), ahb4_prescaler)
      88            0 : #define STM32_AHB5_PRESCALER    DT_PROP_OR(DT_NODELABEL(rcc), ahb5_prescaler, 1)
      89            0 : #define STM32_CPU1_PRESCALER    DT_PROP(DT_NODELABEL(rcc), cpu1_prescaler)
      90            0 : #define STM32_CPU2_PRESCALER    DT_PROP(DT_NODELABEL(rcc), cpu2_prescaler)
      91              : 
      92              : #if DT_NODE_HAS_PROP(DT_NODELABEL(rcc), ahb_prescaler)
      93              : #define STM32_CORE_PRESCALER    STM32_AHB_PRESCALER
      94              : #elif DT_NODE_HAS_PROP(DT_NODELABEL(rcc), cpu1_prescaler)
      95              : #define STM32_CORE_PRESCALER    STM32_CPU1_PRESCALER
      96              : #endif
      97              : 
      98              : #if DT_NODE_HAS_PROP(DT_NODELABEL(rcc), ahb3_prescaler)
      99              : #define STM32_FLASH_PRESCALER   STM32_AHB3_PRESCALER
     100              : #elif DT_NODE_HAS_PROP(DT_NODELABEL(rcc), ahb4_prescaler)
     101              : #define STM32_FLASH_PRESCALER   STM32_AHB4_PRESCALER
     102              : #else
     103            0 : #define STM32_FLASH_PRESCALER   STM32_CORE_PRESCALER
     104              : #endif
     105              : 
     106            0 : #define STM32_ADC_PRESCALER     DT_PROP(DT_NODELABEL(rcc), adc_prescaler)
     107            0 : #define STM32_ADC12_PRESCALER   DT_PROP(DT_NODELABEL(rcc), adc12_prescaler)
     108            0 : #define STM32_ADC34_PRESCALER   DT_PROP(DT_NODELABEL(rcc), adc34_prescaler)
     109              : 
     110            0 : #define STM32_TIMER_PRESCALER   DT_PROP(DT_NODELABEL(rcc), timpre)
     111              : 
     112              : /** STM2H7RS specific RCC dividers */
     113              : #if defined(CONFIG_SOC_SERIES_STM32H7RSX)
     114              : #define STM32_D1CPRE    DT_PROP(DT_NODELABEL(rcc), dcpre)
     115              : #define STM32_HPRE      DT_PROP(DT_NODELABEL(rcc), hpre)
     116              : #define STM32_PPRE1     DT_PROP(DT_NODELABEL(rcc), ppre1)
     117              : #define STM32_PPRE2     DT_PROP(DT_NODELABEL(rcc), ppre2)
     118              : #define STM32_PPRE4     DT_PROP(DT_NODELABEL(rcc), ppre4)
     119              : #define STM32_PPRE5     DT_PROP(DT_NODELABEL(rcc), ppre5)
     120              : #else
     121            1 : #define STM32_D1CPRE    DT_PROP(DT_NODELABEL(rcc), d1cpre)
     122            0 : #define STM32_HPRE      DT_PROP(DT_NODELABEL(rcc), hpre)
     123            0 : #define STM32_D2PPRE1   DT_PROP(DT_NODELABEL(rcc), d2ppre1)
     124            0 : #define STM32_D2PPRE2   DT_PROP(DT_NODELABEL(rcc), d2ppre2)
     125            0 : #define STM32_D1PPRE    DT_PROP(DT_NODELABEL(rcc), d1ppre)
     126            0 : #define STM32_D3PPRE    DT_PROP(DT_NODELABEL(rcc), d3ppre)
     127              : #endif /* CONFIG_SOC_SERIES_STM32H7RSX */
     128              : 
     129              : /** STM2WBA specifics RCC dividers */
     130            1 : #define STM32_AHB5_DIV  DT_PROP(DT_NODELABEL(rcc), ahb5_div)
     131              : 
     132            0 : #define DT_RCC_CLOCKS_CTRL      DT_CLOCKS_CTLR(DT_NODELABEL(rcc))
     133              : 
     134              : /* To enable use of IS_ENABLED utility macro, these symbols
     135              :  * should not be defined directly using DT_SAME_NODE.
     136              :  */
     137              : #if DT_SAME_NODE(DT_RCC_CLOCKS_CTRL, DT_NODELABEL(pll))
     138              : #define STM32_SYSCLK_SRC_PLL    1
     139              : #endif
     140              : #if DT_SAME_NODE(DT_RCC_CLOCKS_CTRL, DT_NODELABEL(clk_hsi))
     141              : #define STM32_SYSCLK_SRC_HSI    1
     142              : #endif
     143              : #if DT_SAME_NODE(DT_RCC_CLOCKS_CTRL, DT_NODELABEL(clk_hse))
     144              : #define STM32_SYSCLK_SRC_HSE    1
     145              : #endif
     146              : #if DT_SAME_NODE(DT_RCC_CLOCKS_CTRL, DT_NODELABEL(clk_msi))
     147              : #define STM32_SYSCLK_SRC_MSI    1
     148              : #endif
     149              : #if DT_SAME_NODE(DT_RCC_CLOCKS_CTRL, DT_NODELABEL(clk_msis))
     150              : #define STM32_SYSCLK_SRC_MSIS   1
     151              : #endif
     152              : #if DT_SAME_NODE(DT_RCC_CLOCKS_CTRL, DT_NODELABEL(clk_csi))
     153              : #define STM32_SYSCLK_SRC_CSI    1
     154              : #endif
     155              : #if DT_SAME_NODE(DT_RCC_CLOCKS_CTRL, DT_NODELABEL(ic2))
     156              : #define STM32_SYSCLK_SRC_IC2    1
     157              : #endif
     158              : 
     159              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(rcc), st_stm32n6_rcc, okay)
     160              : #if (DT_SAME_NODE(DT_CLOCKS_CTLR_BY_IDX(DT_NODELABEL(cpusw), 0), DT_NODELABEL(rcc)))
     161              : #if (DT_CLOCKS_CELL_BY_IDX(DT_NODELABEL(cpusw), 0, bus) == STM32_SRC_HSI)
     162              : #define STM32_CPUCLK_SRC_HSI    1
     163              : #elif (DT_CLOCKS_CELL_BY_IDX(DT_NODELABEL(cpusw), 0, bus) == STM32_SRC_MSI)
     164              : #define STM32_CPUCLK_SRC_MSI    1
     165              : #elif (DT_CLOCKS_CELL_BY_IDX(DT_NODELABEL(cpusw), 0, bus) == STM32_SRC_HSE)
     166              : #define STM32_CPUCLK_SRC_HSE    1
     167              : #elif (DT_CLOCKS_CELL_BY_IDX(DT_NODELABEL(cpusw), 0, bus) == STM32_SRC_IC1)
     168              : #define STM32_CPUCLK_SRC_IC1    1
     169              : #endif
     170              : #endif /* cpusw clk source is rcc */
     171              : 
     172              : #define STM32_TIMG_PRESCALER    DT_PROP(DT_NODELABEL(rcc), timg_prescaler)
     173              : #endif /* rcc node compatible st_stm32n6_rcc and okay */
     174              : 
     175              : /** PLL node related symbols */
     176              : 
     177              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32f2_pll_clock, okay) || \
     178              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32f4_pll_clock, okay)  || \
     179              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32f7_pll_clock, okay)  || \
     180              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32g0_pll_clock, okay)  || \
     181              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32g4_pll_clock, okay)  || \
     182              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32l4_pll_clock, okay)  || \
     183              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32u0_pll_clock, okay)  || \
     184              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32u5_pll_clock, okay)  || \
     185              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32wb_pll_clock, okay)  || \
     186              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32wba_pll_clock, okay) || \
     187              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32h7_pll_clock, okay) || \
     188              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32h7rs_pll_clock, okay) || \
     189              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32mp13_pll_clock, okay)
     190              : #define STM32_PLL_ENABLED       1
     191              : #define STM32_PLL_M_DIVISOR     DT_PROP(DT_NODELABEL(pll), div_m)
     192              : #define STM32_PLL_N_MULTIPLIER  DT_PROP(DT_NODELABEL(pll), mul_n)
     193              : #define STM32_PLL_P_ENABLED     DT_NODE_HAS_PROP(DT_NODELABEL(pll), div_p)
     194              : #define STM32_PLL_P_DIVISOR     DT_PROP_OR(DT_NODELABEL(pll), div_p, 1)
     195              : #define STM32_PLL_Q_ENABLED     DT_NODE_HAS_PROP(DT_NODELABEL(pll), div_q)
     196              : #define STM32_PLL_Q_DIVISOR     DT_PROP_OR(DT_NODELABEL(pll), div_q, 1)
     197              : #define STM32_PLL_R_ENABLED     DT_NODE_HAS_PROP(DT_NODELABEL(pll), div_r)
     198              : #define STM32_PLL_R_DIVISOR     DT_PROP_OR(DT_NODELABEL(pll), div_r, 1)
     199              : #define STM32_PLL_S_ENABLED     DT_NODE_HAS_PROP(DT_NODELABEL(pll), div_s)
     200              : #define STM32_PLL_S_DIVISOR     DT_PROP_OR(DT_NODELABEL(pll), div_s, 1)
     201              : #define STM32_PLL_FRACN_ENABLED DT_NODE_HAS_PROP(DT_NODELABEL(pll), fracn)
     202              : #define STM32_PLL_FRACN_VALUE   DT_PROP_OR(DT_NODELABEL(pll), fracn, 1)
     203              : #endif
     204              : 
     205              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(plli2s), st_stm32f4_plli2s_clock, okay)
     206              : #define STM32_PLLI2S_ENABLED    1
     207              : #define STM32_PLLI2S_M_DIVISOR          STM32_PLL_M_DIVISOR
     208              : #define STM32_PLLI2S_N_MULTIPLIER       DT_PROP(DT_NODELABEL(plli2s), mul_n)
     209              : #define STM32_PLLI2S_R_ENABLED          DT_NODE_HAS_PROP(DT_NODELABEL(plli2s), div_r)
     210              : #define STM32_PLLI2S_R_DIVISOR          DT_PROP_OR(DT_NODELABEL(plli2s), div_r, 1)
     211              : #endif
     212              : 
     213              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(plli2s), st_stm32f411_plli2s_clock, okay)
     214              : #define STM32_PLLI2S_ENABLED    1
     215              : #define STM32_PLLI2S_M_DIVISOR          DT_PROP(DT_NODELABEL(plli2s), div_m)
     216              : #define STM32_PLLI2S_N_MULTIPLIER       DT_PROP(DT_NODELABEL(plli2s), mul_n)
     217              : #define STM32_PLLI2S_Q_ENABLED          DT_NODE_HAS_PROP(DT_NODELABEL(plli2s), div_q)
     218              : #define STM32_PLLI2S_Q_DIVISOR          DT_PROP_OR(DT_NODELABEL(plli2s), div_q, 1)
     219              : #define STM32_PLLI2S_R_ENABLED          DT_NODE_HAS_PROP(DT_NODELABEL(plli2s), div_r)
     220              : #define STM32_PLLI2S_R_DIVISOR          DT_PROP_OR(DT_NODELABEL(plli2s), div_r, 1)
     221              : #endif
     222              : 
     223              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pllsai), st_stm32fx_pllsai_clock, okay)
     224              : #define STM32_PLLSAI_ENABLED    1
     225              : #define STM32_PLLSAI_M_DIVISOR          DT_PROP(DT_NODELABEL(pllsai), div_m)
     226              : #define STM32_PLLSAI_N_MULTIPLIER       DT_PROP(DT_NODELABEL(pllsai), mul_n)
     227              : #define STM32_PLLSAI_P_ENABLED          DT_NODE_HAS_PROP(DT_NODELABEL(pllsai), div_p)
     228              : #define STM32_PLLSAI_P_DIVISOR          DT_PROP_OR(DT_NODELABEL(pllsai), div_p, 1)
     229              : #define STM32_PLLSAI_Q_ENABLED          DT_NODE_HAS_PROP(DT_NODELABEL(pllsai), div_q)
     230              : #define STM32_PLLSAI_DIVQ_ENABLED       DT_NODE_HAS_PROP(DT_NODELABEL(pllsai), div_divq)
     231              : #if (STM32_PLLSAI_Q_ENABLED && !STM32_PLLSAI_DIVQ_ENABLED) || \
     232              :         (!STM32_PLLSAI_Q_ENABLED && STM32_PLLSAI_DIVQ_ENABLED)
     233              : #error "On STM32F4/STM32F7, both div_q and div_divq must be present if one of them is present"
     234              : #endif
     235              : #define STM32_PLLSAI_Q_DIVISOR          DT_PROP_OR(DT_NODELABEL(pllsai), div_q, 1)
     236              : #define STM32_PLLSAI_DIVQ_DIVISOR       DT_PROP_OR(DT_NODELABEL(pllsai), div_divq, 1)
     237              : #define STM32_PLLSAI_R_ENABLED          DT_NODE_HAS_PROP(DT_NODELABEL(pllsai), div_r)
     238              : #define STM32_PLLSAI_DIVR_ENABLED       DT_NODE_HAS_PROP(DT_NODELABEL(pllsai), div_divr)
     239              : #if (STM32_PLLSAI_R_ENABLED && !STM32_PLLSAI_DIVR_ENABLED) || \
     240              :         (!STM32_PLLSAI_R_ENABLED && STM32_PLLSAI_DIVR_ENABLED)
     241              : #error "On STM32F4/STM32F7, both div_r and div_divr must be present if one of them is present"
     242              : #endif
     243              : #define STM32_PLLSAI_R_DIVISOR          DT_PROP_OR(DT_NODELABEL(pllsai), div_r, 1)
     244              : #define STM32_PLLSAI_DIVR_DIVISOR       DT_PROP_OR(DT_NODELABEL(pllsai), div_divr, 1)
     245              : #endif
     246              : 
     247              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pllsai1), st_stm32l4_pllsai_clock, okay)
     248              : #define STM32_PLLSAI1_ENABLED   1
     249              : #define STM32_PLLSAI1_M_DIVISOR         DT_PROP(DT_NODELABEL(pllsai1), div_m)
     250              : #define STM32_PLLSAI1_N_MULTIPLIER      DT_PROP(DT_NODELABEL(pllsai1), mul_n)
     251              : #define STM32_PLLSAI1_P_ENABLED         DT_NODE_HAS_PROP(DT_NODELABEL(pllsai1), div_p)
     252              : #define STM32_PLLSAI1_P_DIVISOR         DT_PROP_OR(DT_NODELABEL(pllsai1), div_p, 1)
     253              : #define STM32_PLLSAI1_Q_ENABLED         DT_NODE_HAS_PROP(DT_NODELABEL(pllsai1), div_q)
     254              : #define STM32_PLLSAI1_Q_DIVISOR         DT_PROP_OR(DT_NODELABEL(pllsai1), div_q, 1)
     255              : #define STM32_PLLSAI1_R_ENABLED         DT_NODE_HAS_PROP(DT_NODELABEL(pllsai1), div_r)
     256              : #define STM32_PLLSAI1_R_DIVISOR         DT_PROP_OR(DT_NODELABEL(pllsai1), div_r, 1)
     257              : #endif
     258              : 
     259              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pllsai2), st_stm32l4_pllsai_clock, okay)
     260              : #define STM32_PLLSAI2_ENABLED   1
     261              : #define STM32_PLLSAI2_M_DIVISOR         DT_PROP(DT_NODELABEL(pllsai2), div_m)
     262              : #define STM32_PLLSAI2_N_MULTIPLIER      DT_PROP(DT_NODELABEL(pllsai2), mul_n)
     263              : #define STM32_PLLSAI2_P_ENABLED         DT_NODE_HAS_PROP(DT_NODELABEL(pllsai2), div_p)
     264              : #define STM32_PLLSAI2_P_DIVISOR         DT_PROP_OR(DT_NODELABEL(pllsai2), div_p, 1)
     265              : #define STM32_PLLSAI2_Q_ENABLED         DT_NODE_HAS_PROP(DT_NODELABEL(pllsai2), div_q)
     266              : #define STM32_PLLSAI2_Q_DIVISOR         DT_PROP_OR(DT_NODELABEL(pllsai2), div_q, 1)
     267              : #define STM32_PLLSAI2_R_ENABLED         DT_NODE_HAS_PROP(DT_NODELABEL(pllsai2), div_r)
     268              : #define STM32_PLLSAI2_R_DIVISOR         DT_PROP_OR(DT_NODELABEL(pllsai2), div_r, 1)
     269              : #define STM32_PLLSAI2_DIVR_ENABLED      DT_NODE_HAS_PROP(DT_NODELABEL(pllsai2), div_divr)
     270              : #define STM32_PLLSAI2_DIVR_DIVISOR      DT_PROP_OR(DT_NODELABEL(pllsai2), div_divr, 1)
     271              : #endif
     272              : 
     273              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll2), st_stm32u5_pll_clock, okay) || \
     274              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll2), st_stm32h7_pll_clock, okay) || \
     275              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll2), st_stm32h7rs_pll_clock, okay) || \
     276              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll2), st_stm32mp13_pll_clock, okay)
     277              : #define STM32_PLL2_ENABLED      1
     278              : #define STM32_PLL2_M_DIVISOR    DT_PROP(DT_NODELABEL(pll2), div_m)
     279              : #define STM32_PLL2_N_MULTIPLIER DT_PROP(DT_NODELABEL(pll2), mul_n)
     280              : #define STM32_PLL2_P_ENABLED    DT_NODE_HAS_PROP(DT_NODELABEL(pll2), div_p)
     281              : #define STM32_PLL2_P_DIVISOR    DT_PROP_OR(DT_NODELABEL(pll2), div_p, 1)
     282              : #define STM32_PLL2_Q_ENABLED    DT_NODE_HAS_PROP(DT_NODELABEL(pll2), div_q)
     283              : #define STM32_PLL2_Q_DIVISOR    DT_PROP_OR(DT_NODELABEL(pll2), div_q, 1)
     284              : #define STM32_PLL2_R_ENABLED    DT_NODE_HAS_PROP(DT_NODELABEL(pll2), div_r)
     285              : #define STM32_PLL2_R_DIVISOR    DT_PROP_OR(DT_NODELABEL(pll2), div_r, 1)
     286              : #define STM32_PLL2_S_ENABLED    DT_NODE_HAS_PROP(DT_NODELABEL(pll2), div_s)
     287              : #define STM32_PLL2_S_DIVISOR    DT_PROP_OR(DT_NODELABEL(pll2), div_s, 1)
     288              : #define STM32_PLL2_T_ENABLED    DT_NODE_HAS_PROP(DT_NODELABEL(pll2), div_t)
     289              : #define STM32_PLL2_T_DIVISOR    DT_PROP_OR(DT_NODELABEL(pll2), div_t, 1)
     290              : #define STM32_PLL2_FRACN_ENABLED        DT_NODE_HAS_PROP(DT_NODELABEL(pll2), fracn)
     291              : #define STM32_PLL2_FRACN_VALUE  DT_PROP_OR(DT_NODELABEL(pll2), fracn, 1)
     292              : #endif
     293              : 
     294              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll3), st_stm32h7_pll_clock, okay) || \
     295              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll3), st_stm32u5_pll_clock, okay) || \
     296              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll3), st_stm32h7rs_pll_clock, okay) || \
     297              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll3), st_stm32mp13_pll_clock, okay)
     298              : #define STM32_PLL3_ENABLED      1
     299              : #define STM32_PLL3_M_DIVISOR    DT_PROP(DT_NODELABEL(pll3), div_m)
     300              : #define STM32_PLL3_N_MULTIPLIER DT_PROP(DT_NODELABEL(pll3), mul_n)
     301              : #define STM32_PLL3_P_ENABLED    DT_NODE_HAS_PROP(DT_NODELABEL(pll3), div_p)
     302              : #define STM32_PLL3_P_DIVISOR    DT_PROP_OR(DT_NODELABEL(pll3), div_p, 1)
     303              : #define STM32_PLL3_Q_ENABLED    DT_NODE_HAS_PROP(DT_NODELABEL(pll3), div_q)
     304              : #define STM32_PLL3_Q_DIVISOR    DT_PROP_OR(DT_NODELABEL(pll3), div_q, 1)
     305              : #define STM32_PLL3_R_ENABLED    DT_NODE_HAS_PROP(DT_NODELABEL(pll3), div_r)
     306              : #define STM32_PLL3_R_DIVISOR    DT_PROP_OR(DT_NODELABEL(pll3), div_r, 1)
     307              : #define STM32_PLL3_S_ENABLED    DT_NODE_HAS_PROP(DT_NODELABEL(pll3), div_s)
     308              : #define STM32_PLL3_S_DIVISOR    DT_PROP_OR(DT_NODELABEL(pll3), div_s, 1)
     309              : #define STM32_PLL3_FRACN_ENABLED        DT_NODE_HAS_PROP(DT_NODELABEL(pll3), fracn)
     310              : #define STM32_PLL3_FRACN_VALUE  DT_PROP_OR(DT_NODELABEL(pll3), fracn, 1)
     311              : #endif
     312              : 
     313              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll4), st_stm32mp13_pll_clock, okay)
     314              : #define STM32_PLL4_ENABLED      1
     315              : #define STM32_PLL4_M_DIVISOR    DT_PROP(DT_NODELABEL(pll4), div_m)
     316              : #define STM32_PLL4_N_MULTIPLIER DT_PROP(DT_NODELABEL(pll4), mul_n)
     317              : #define STM32_PLL4_P_ENABLED    DT_NODE_HAS_PROP(DT_NODELABEL(pll4), div_p)
     318              : #define STM32_PLL4_P_DIVISOR    DT_PROP_OR(DT_NODELABEL(pll4), div_p, 1)
     319              : #define STM32_PLL4_Q_ENABLED    DT_NODE_HAS_PROP(DT_NODELABEL(pll4), div_q)
     320              : #define STM32_PLL4_Q_DIVISOR    DT_PROP_OR(DT_NODELABEL(pll4), div_q, 1)
     321              : #define STM32_PLL4_R_ENABLED    DT_NODE_HAS_PROP(DT_NODELABEL(pll4), div_r)
     322              : #define STM32_PLL4_R_DIVISOR    DT_PROP_OR(DT_NODELABEL(pll4), div_r, 1)
     323              : #define STM32_PLL4_FRACN_ENABLED        DT_NODE_HAS_PROP(DT_NODELABEL(pll4), fracn)
     324              : #define STM32_PLL4_FRACN_VALUE  DT_PROP_OR(DT_NODELABEL(pll4), fracn, 1)
     325              : #endif
     326              : 
     327              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32f1_pll_clock, okay)
     328              : #define STM32_PLL_ENABLED       1
     329              : #define STM32_PLL_XTPRE         DT_PROP(DT_NODELABEL(pll), xtpre)
     330              : #define STM32_PLL_MULTIPLIER    DT_PROP(DT_NODELABEL(pll), mul)
     331              : #define STM32_PLL_USBPRE        DT_PROP(DT_NODELABEL(pll), usbpre)
     332              : #elif DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32f0_pll_clock, okay) || \
     333              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32f100_pll_clock, okay) || \
     334              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32f105_pll_clock, okay)
     335              : #define STM32_PLL_ENABLED       1
     336              : #define STM32_PLL_MULTIPLIER    DT_PROP(DT_NODELABEL(pll), mul)
     337              : #define STM32_PLL_PREDIV        DT_PROP(DT_NODELABEL(pll), prediv)
     338              : #define STM32_PLL_USBPRE        DT_PROP(DT_NODELABEL(pll), otgfspre)
     339              : #elif DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32l0_pll_clock, okay)
     340              : #define STM32_PLL_ENABLED       1
     341              : #define STM32_PLL_DIVISOR       DT_PROP(DT_NODELABEL(pll), div)
     342              : #define STM32_PLL_MULTIPLIER    DT_PROP(DT_NODELABEL(pll), mul)
     343              : #endif
     344              : 
     345              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll2), st_stm32f105_pll2_clock, okay)
     346              : #define STM32_PLL2_ENABLED      1
     347              : #define STM32_PLL2_MULTIPLIER   DT_PROP(DT_NODELABEL(pll2), mul)
     348              : #define STM32_PLL2_PREDIV       DT_PROP(DT_NODELABEL(pll2), prediv)
     349              : #endif
     350              : 
     351              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll1), st_stm32n6_pll_clock, okay)
     352              : #define STM32_PLL1_ENABLED      1
     353              : #define STM32_PLL1_M_DIVISOR    DT_PROP(DT_NODELABEL(pll1), div_m)
     354              : #define STM32_PLL1_N_MULTIPLIER DT_PROP(DT_NODELABEL(pll1), mul_n)
     355              : #define STM32_PLL1_P1_DIVISOR   DT_PROP(DT_NODELABEL(pll1), div_p1)
     356              : #define STM32_PLL1_P2_DIVISOR   DT_PROP(DT_NODELABEL(pll1), div_p2)
     357              : #endif
     358              : 
     359              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll2), st_stm32n6_pll_clock, okay)
     360              : #define STM32_PLL2_ENABLED      1
     361              : #define STM32_PLL2_M_DIVISOR    DT_PROP(DT_NODELABEL(pll2), div_m)
     362              : #define STM32_PLL2_N_MULTIPLIER DT_PROP(DT_NODELABEL(pll2), mul_n)
     363              : #define STM32_PLL2_P1_DIVISOR   DT_PROP(DT_NODELABEL(pll2), div_p1)
     364              : #define STM32_PLL2_P2_DIVISOR   DT_PROP(DT_NODELABEL(pll2), div_p2)
     365              : #endif
     366              : 
     367              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll3), st_stm32n6_pll_clock, okay)
     368              : #define STM32_PLL3_ENABLED      1
     369              : #define STM32_PLL3_M_DIVISOR    DT_PROP(DT_NODELABEL(pll3), div_m)
     370              : #define STM32_PLL3_N_MULTIPLIER DT_PROP(DT_NODELABEL(pll3), mul_n)
     371              : #define STM32_PLL3_P1_DIVISOR   DT_PROP(DT_NODELABEL(pll3), div_p1)
     372              : #define STM32_PLL3_P2_DIVISOR   DT_PROP(DT_NODELABEL(pll3), div_p2)
     373              : #endif
     374              : 
     375              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll4), st_stm32n6_pll_clock, okay)
     376              : #define STM32_PLL4_ENABLED      1
     377              : #define STM32_PLL4_M_DIVISOR    DT_PROP(DT_NODELABEL(pll4), div_m)
     378              : #define STM32_PLL4_N_MULTIPLIER DT_PROP(DT_NODELABEL(pll4), mul_n)
     379              : #define STM32_PLL4_P1_DIVISOR   DT_PROP(DT_NODELABEL(pll4), div_p1)
     380              : #define STM32_PLL4_P2_DIVISOR   DT_PROP(DT_NODELABEL(pll4), div_p2)
     381              : #endif
     382              : 
     383              : /** PLL/PLL1 clock source */
     384              : #if DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(pll)) && \
     385              :         DT_NODE_HAS_PROP(DT_NODELABEL(pll), clocks)
     386              : #define DT_PLL_CLOCKS_CTRL      DT_CLOCKS_CTLR(DT_NODELABEL(pll))
     387              : #if DT_SAME_NODE(DT_PLL_CLOCKS_CTRL, DT_NODELABEL(clk_msi))
     388              : #define STM32_PLL_SRC_MSI       1
     389              : #endif
     390              : #if DT_SAME_NODE(DT_PLL_CLOCKS_CTRL, DT_NODELABEL(clk_msis))
     391              : #define STM32_PLL_SRC_MSIS      1
     392              : #endif
     393              : #if DT_SAME_NODE(DT_PLL_CLOCKS_CTRL, DT_NODELABEL(clk_hsi))
     394              : #define STM32_PLL_SRC_HSI       1
     395              : #endif
     396              : #if DT_SAME_NODE(DT_PLL_CLOCKS_CTRL, DT_NODELABEL(clk_csi))
     397              : #define STM32_PLL_SRC_CSI       1
     398              : #endif
     399              : #if DT_SAME_NODE(DT_PLL_CLOCKS_CTRL, DT_NODELABEL(clk_hse))
     400              : #define STM32_PLL_SRC_HSE       1
     401              : #endif
     402              : #if DT_SAME_NODE(DT_PLL_CLOCKS_CTRL, DT_NODELABEL(pll2))
     403              : #define STM32_PLL_SRC_PLL2      1
     404              : #endif
     405              : 
     406              : #endif
     407              : 
     408              : /** PLL2 clock source */
     409              : #if DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(pll2)) && \
     410              :         DT_NODE_HAS_PROP(DT_NODELABEL(pll2), clocks)
     411              : #define DT_PLL2_CLOCKS_CTRL     DT_CLOCKS_CTLR(DT_NODELABEL(pll2))
     412              : #if DT_SAME_NODE(DT_PLL2_CLOCKS_CTRL, DT_NODELABEL(clk_msi))
     413              : #define STM32_PLL2_SRC_MSI      1
     414              : #endif
     415              : #if DT_SAME_NODE(DT_PLL2_CLOCKS_CTRL, DT_NODELABEL(clk_msis))
     416              : #define STM32_PLL2_SRC_MSIS     1
     417              : #endif
     418              : #if DT_SAME_NODE(DT_PLL2_CLOCKS_CTRL, DT_NODELABEL(clk_hsi))
     419              : #define STM32_PLL2_SRC_HSI      1
     420              : #endif
     421              : #if DT_SAME_NODE(DT_PLL2_CLOCKS_CTRL, DT_NODELABEL(clk_hse))
     422              : #define STM32_PLL2_SRC_HSE      1
     423              : #endif
     424              : 
     425              : #endif
     426              : 
     427              : /** PLL3 clock source */
     428              : #if DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(pll3)) && \
     429              :         DT_NODE_HAS_PROP(DT_NODELABEL(pll3), clocks)
     430              : #define DT_PLL3_CLOCKS_CTRL     DT_CLOCKS_CTLR(DT_NODELABEL(pll3))
     431              : #if DT_SAME_NODE(DT_PLL3_CLOCKS_CTRL, DT_NODELABEL(clk_msi))
     432              : #define STM32_PLL3_SRC_MSI      1
     433              : #endif
     434              : #if DT_SAME_NODE(DT_PLL3_CLOCKS_CTRL, DT_NODELABEL(clk_msis))
     435              : #define STM32_PLL3_SRC_MSIS     1
     436              : #endif
     437              : #if DT_SAME_NODE(DT_PLL3_CLOCKS_CTRL, DT_NODELABEL(clk_hsi))
     438              : #define STM32_PLL3_SRC_HSI      1
     439              : #endif
     440              : #if DT_SAME_NODE(DT_PLL3_CLOCKS_CTRL, DT_NODELABEL(clk_hse))
     441              : #define STM32_PLL3_SRC_HSE      1
     442              : #endif
     443              : 
     444              : #endif
     445              : 
     446              : /** PLL4 clock source */
     447              : #if DT_NODE_HAS_STATUS(DT_NODELABEL(pll4), okay) && \
     448              :         DT_NODE_HAS_PROP(DT_NODELABEL(pll4), clocks)
     449              : #define DT_PLL4_CLOCKS_CTRL     DT_CLOCKS_CTLR(DT_NODELABEL(pll4))
     450              : #if DT_SAME_NODE(DT_PLL4_CLOCKS_CTRL, DT_NODELABEL(clk_msi))
     451              : #define STM32_PLL4_SRC_MSI      1
     452              : #endif
     453              : #if DT_SAME_NODE(DT_PLL4_CLOCKS_CTRL, DT_NODELABEL(clk_hsi))
     454              : #define STM32_PLL4_SRC_HSI      1
     455              : #endif
     456              : #if DT_SAME_NODE(DT_PLL4_CLOCKS_CTRL, DT_NODELABEL(clk_hse))
     457              : #define STM32_PLL4_SRC_HSE      1
     458              : #endif
     459              : 
     460              : #endif
     461              : 
     462              : /** PLLSAI clock source */
     463              : #if DT_NODE_HAS_STATUS(DT_NODELABEL(pllsai), okay) && \
     464              :         DT_NODE_HAS_PROP(DT_NODELABEL(pllsai), clocks)
     465              : #define DT_PLLSAI_CLOCKS_CTRL   DT_CLOCKS_CTLR(DT_NODELABEL(pllsai))
     466              : #if DT_SAME_NODE(DT_PLLSAI_CLOCKS_CTRL, DT_NODELABEL(clk_hsi))
     467              : #define STM32_PLLSAI_SRC_HSI    1
     468              : #endif
     469              : #if DT_SAME_NODE(DT_PLLSAI_CLOCKS_CTRL, DT_NODELABEL(clk_hse))
     470              : #define STM32_PLLSAI_SRC_HSE    1
     471              : #endif
     472              : 
     473              : #endif
     474              : 
     475              : /** PLLSAI1 clock source */
     476              : #if DT_NODE_HAS_STATUS(DT_NODELABEL(pllsai1), okay) && \
     477              :         DT_NODE_HAS_PROP(DT_NODELABEL(pllsai1), clocks)
     478              : #define DT_PLLSAI1_CLOCKS_CTRL  DT_CLOCKS_CTLR(DT_NODELABEL(pllsai1))
     479              : #if DT_SAME_NODE(DT_PLLSAI1_CLOCKS_CTRL, DT_NODELABEL(clk_msi))
     480              : #define STM32_PLLSAI1_SRC_MSI   1
     481              : #endif
     482              : #if DT_SAME_NODE(DT_PLLSAI1_CLOCKS_CTRL, DT_NODELABEL(clk_hsi))
     483              : #define STM32_PLLSAI1_SRC_HSI   1
     484              : #endif
     485              : #if DT_SAME_NODE(DT_PLLSAI1_CLOCKS_CTRL, DT_NODELABEL(clk_hse))
     486              : #define STM32_PLLSAI1_SRC_HSE   1
     487              : #endif
     488              : 
     489              : #endif
     490              : 
     491              : /** PLLSAI2 clock source */
     492              : #if DT_NODE_HAS_STATUS(DT_NODELABEL(pllsai2), okay) && \
     493              :         DT_NODE_HAS_PROP(DT_NODELABEL(pllsai2), clocks)
     494              : #define DT_PLLSAI2_CLOCKS_CTRL  DT_CLOCKS_CTLR(DT_NODELABEL(pllsai2))
     495              : #if DT_SAME_NODE(DT_PLLSAI2_CLOCKS_CTRL, DT_NODELABEL(clk_msi))
     496              : #define STM32_PLLSAI2_SRC_MSI   1
     497              : #endif
     498              : #if DT_SAME_NODE(DT_PLLSAI2_CLOCKS_CTRL, DT_NODELABEL(clk_hsi))
     499              : #define STM32_PLLSAI2_SRC_HSI   1
     500              : #endif
     501              : #if DT_SAME_NODE(DT_PLLSAI2_CLOCKS_CTRL, DT_NODELABEL(clk_hse))
     502              : #define STM32_PLLSAI2_SRC_HSE   1
     503              : #endif
     504              : 
     505              : #endif
     506              : 
     507              : /* On STM32F4 series - PLL and PLLSAI share the same source */
     508              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32f4_pll_clock, okay) && \
     509              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pllsai), st_stm32fx_pllsai_clock, okay) && \
     510              :         !DT_SAME_NODE(DT_PLL_CLOCKS_CTRL, DT_PLLSAI_CLOCKS_CTRL)
     511              : #error "On STM32F4 series, PLL and PLLSAI must have the same source"
     512              : #endif
     513              : 
     514              : /* On STM32F7 series - PLL and PLLSAI share the same source */
     515              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32f7_pll_clock, okay) && \
     516              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pllsai), st_stm32fx_pllsai_clock, okay) && \
     517              :         !DT_SAME_NODE(DT_PLL_CLOCKS_CTRL, DT_PLLSAI_CLOCKS_CTRL)
     518              : #error "On STM32F7 series, PLL and PLLSAI must have the same source"
     519              : #endif
     520              : 
     521              : /* On STM32L4 series - PLL / PLLSAI1 and PLLSAI2 shared same source */
     522              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32l4_pll_clock, okay) && \
     523              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pllsai1), st_stm32l4_pllsai_clock, okay) && \
     524              :         !DT_SAME_NODE(DT_PLL_CLOCKS_CTRL, DT_PLLSAI1_CLOCKS_CTRL)
     525              : #error "On STM32L4 series, PLL / PLLSAI1 must have the same source"
     526              : #endif
     527              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32l4_pll_clock, okay) && \
     528              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pllsai2), st_stm32l4_pllsai_clock, okay) && \
     529              :         !DT_SAME_NODE(DT_PLL_CLOCKS_CTRL, DT_PLLSAI2_CLOCKS_CTRL)
     530              : #error "On STM32L4 series, PLL / PLLSAI2 must have the same source"
     531              : #endif
     532              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pllsai1), st_stm32l4_pllsai_clock, okay) && \
     533              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pllsai2), st_stm32l4_pllsai_clock, okay) && \
     534              :         !DT_SAME_NODE(DT_PLLSAI1_CLOCKS_CTRL, DT_PLLSAI2_CLOCKS_CTRL)
     535              : #error "On STM32L4 series, PLLSAI1 / PLLSAI2 must have the same source"
     536              : #endif
     537              : 
     538              : /** Fixed clocks related symbols */
     539              : 
     540              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_lse), fixed_clock, okay)
     541              : #define STM32_LSE_ENABLED       1
     542              : #define STM32_LSE_FREQ          DT_PROP(DT_NODELABEL(clk_lse), clock_frequency)
     543              : #define STM32_LSE_DRIVING       0
     544              : #define STM32_LSE_BYPASS        DT_PROP(DT_NODELABEL(clk_lse), lse_bypass)
     545              : #elif DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_lse), st_stm32_lse_clock, okay)
     546              : #define STM32_LSE_ENABLED       1
     547              : #define STM32_LSE_FREQ          DT_PROP(DT_NODELABEL(clk_lse), clock_frequency)
     548              : #define STM32_LSE_DRIVING       DT_PROP(DT_NODELABEL(clk_lse), driving_capability)
     549              : #define STM32_LSE_BYPASS        DT_PROP(DT_NODELABEL(clk_lse), lse_bypass)
     550              : #else
     551            1 : #define STM32_LSE_ENABLED       0
     552            0 : #define STM32_LSE_FREQ          0
     553            0 : #define STM32_LSE_DRIVING       0
     554            0 : #define STM32_LSE_BYPASS        0
     555              : #endif
     556              : 
     557              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_msi), st_stm32_msi_clock, okay) || \
     558              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_msi), st_stm32l0_msi_clock, okay)
     559              : #define STM32_MSI_ENABLED       1
     560              : #define STM32_MSI_RANGE         DT_PROP(DT_NODELABEL(clk_msi), msi_range)
     561              : #endif
     562              : 
     563              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_msi), st_stm32_msi_clock, okay)
     564              : #define STM32_MSI_ENABLED       1
     565              : #define STM32_MSI_PLL_MODE      DT_PROP(DT_NODELABEL(clk_msi), msi_pll_mode)
     566              : #endif
     567              : 
     568              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_msis), st_stm32u5_msi_clock, okay) || \
     569              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_msis), st_stm32u3_msi_clock, okay)
     570              : #define STM32_MSIS_ENABLED      1
     571              : #define STM32_MSIS_RANGE        DT_PROP(DT_NODELABEL(clk_msis), msi_range)
     572              : #define STM32_MSIS_PLL_MODE     DT_PROP(DT_NODELABEL(clk_msis), msi_pll_mode)
     573              : #else
     574            0 : #define STM32_MSIS_ENABLED      0
     575            0 : #define STM32_MSIS_RANGE        0
     576            0 : #define STM32_MSIS_PLL_MODE     0
     577              : #endif
     578              : 
     579              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_msik), st_stm32u5_msi_clock, okay) || \
     580              :         DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_msik), st_stm32u3_msi_clock, okay)
     581              : #define STM32_MSIK_ENABLED      1
     582              : #define STM32_MSIK_RANGE        DT_PROP(DT_NODELABEL(clk_msik), msi_range)
     583              : #define STM32_MSIK_PLL_MODE     DT_PROP(DT_NODELABEL(clk_msik), msi_pll_mode)
     584              : #else
     585            0 : #define STM32_MSIK_ENABLED      0
     586            0 : #define STM32_MSIK_RANGE        0
     587            0 : #define STM32_MSIK_PLL_MODE     0
     588              : #endif
     589              : 
     590              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_csi), fixed_clock, okay)
     591              : #define STM32_CSI_ENABLED       1
     592              : #define STM32_CSI_FREQ          DT_PROP(DT_NODELABEL(clk_csi), clock_frequency)
     593              : #else
     594            0 : #define STM32_CSI_FREQ          0
     595              : #endif
     596              : 
     597              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_lsi), fixed_clock, okay)
     598              : #define STM32_LSI_ENABLED       1
     599              : #define STM32_LSI_FREQ          DT_PROP(DT_NODELABEL(clk_lsi), clock_frequency)
     600              : #elif DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_lsi1), fixed_clock, okay)
     601              : #define STM32_LSI_ENABLED       1
     602              : #define STM32_LSI_FREQ          DT_PROP(DT_NODELABEL(clk_lsi1), clock_frequency)
     603              : #elif DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_lsi2), fixed_clock, okay)
     604              : #define STM32_LSI_ENABLED       1
     605              : #define STM32_LSI_FREQ          DT_PROP(DT_NODELABEL(clk_lsi2), clock_frequency)
     606              : #else
     607            0 : #define STM32_LSI_FREQ          0
     608              : #endif
     609              : 
     610              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_hsi), fixed_clock, okay)
     611              : #define STM32_HSI_DIV_ENABLED   0
     612              : #define STM32_HSI_ENABLED       1
     613              : #define STM32_HSI_FREQ          DT_PROP(DT_NODELABEL(clk_hsi), clock_frequency)
     614              : #elif DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_hsi), st_stm32h7_hsi_clock, okay) \
     615              :         || DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_hsi), st_stm32l0_hsi_clock, okay) \
     616              :         || DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_hsi), st_stm32g0_hsi_clock, okay) \
     617              :         || DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_hsi), st_stm32c0_hsi_clock, okay) \
     618              :         || DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_hsi), st_stm32n6_hsi_clock, okay)
     619              : #define STM32_HSI_DIV_ENABLED   1
     620              : #define STM32_HSI_ENABLED       1
     621              : #define STM32_HSI_DIVISOR       DT_PROP(DT_NODELABEL(clk_hsi), hsi_div)
     622              : #define STM32_HSI_FREQ          DT_PROP(DT_NODELABEL(clk_hsi), clock_frequency)
     623              : #else
     624            0 : #define STM32_HSI_DIV_ENABLED   0
     625            0 : #define STM32_HSI_DIVISOR       1
     626            0 : #define STM32_HSI_FREQ          0
     627              : #endif
     628              : 
     629              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_hse), fixed_clock, okay)
     630              : #define STM32_HSE_ENABLED       1
     631              : #define STM32_HSE_FREQ          DT_PROP(DT_NODELABEL(clk_hse), clock_frequency)
     632              : #elif DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_hse), st_stm32_hse_clock, okay)
     633              : #define STM32_HSE_ENABLED       1
     634              : #define STM32_HSE_BYPASS        DT_PROP(DT_NODELABEL(clk_hse), hse_bypass)
     635              : #define STM32_HSE_FREQ          DT_PROP(DT_NODELABEL(clk_hse), clock_frequency)
     636              : #define STM32_HSE_CSS           DT_PROP(DT_NODELABEL(clk_hse), css_enabled)
     637              : #elif DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_hse), st_stm32wl_hse_clock, okay)
     638              : #define STM32_HSE_ENABLED       1
     639              : #define STM32_HSE_TCXO          DT_PROP(DT_NODELABEL(clk_hse), hse_tcxo)
     640              : #define STM32_HSE_DIV2          DT_PROP(DT_NODELABEL(clk_hse), hse_div2)
     641              : #define STM32_HSE_FREQ          DT_PROP(DT_NODELABEL(clk_hse), clock_frequency)
     642              : #elif DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_hse), st_stm32wba_hse_clock, okay)
     643              : #define STM32_HSE_ENABLED       1
     644              : #define STM32_HSE_DIV2          DT_PROP(DT_NODELABEL(clk_hse), hse_div2)
     645              : #define STM32_HSE_FREQ          DT_PROP(DT_NODELABEL(clk_hse), clock_frequency)
     646              : #elif DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_hse), st_stm32n6_hse_clock, okay)
     647              : #define STM32_HSE_ENABLED       1
     648              : #define STM32_HSE_BYPASS        DT_PROP(DT_NODELABEL(clk_hse), hse_bypass)
     649              : #define STM32_HSE_DIV2          DT_PROP(DT_NODELABEL(clk_hse), hse_div2)
     650              : #define STM32_HSE_FREQ          DT_PROP(DT_NODELABEL(clk_hse), clock_frequency)
     651              : #else
     652            0 : #define STM32_HSE_FREQ          0
     653              : #endif
     654              : 
     655              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_hsi48), fixed_clock, okay)
     656              : #define STM32_HSI48_ENABLED     1
     657              : #define STM32_HSI48_FREQ        DT_PROP(DT_NODELABEL(clk_hsi48), clock_frequency)
     658              : #elif DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_hsi48), st_stm32_hsi48_clock, okay)
     659              : #define STM32_HSI48_ENABLED     1
     660              : #define STM32_HSI48_FREQ        DT_PROP(DT_NODELABEL(clk_hsi48), clock_frequency)
     661              : #define STM32_HSI48_CRS_USB_SOF DT_PROP(DT_NODELABEL(clk_hsi48), crs_usb_sof)
     662              : #endif
     663              : 
     664              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(perck), st_stm32_clock_mux, okay)
     665              : #define STM32_CKPER_ENABLED     1
     666              : #endif
     667              : 
     668              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(cpusw), st_stm32_clock_mux, okay)
     669              : #define STM32_CPUSW_ENABLED     1
     670              : #endif
     671              : 
     672              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic1), st_stm32n6_ic_clock_mux, okay)
     673              : #define STM32_IC1_ENABLED       1
     674              : #define STM32_IC1_PLL_SRC       DT_PROP(DT_NODELABEL(ic1), pll_src)
     675              : #define STM32_IC1_DIV           DT_PROP(DT_NODELABEL(ic1), ic_div)
     676              : #endif
     677              : 
     678              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic2), st_stm32n6_ic_clock_mux, okay)
     679              : #define STM32_IC2_ENABLED       1
     680              : #define STM32_IC2_PLL_SRC       DT_PROP(DT_NODELABEL(ic2), pll_src)
     681              : #define STM32_IC2_DIV           DT_PROP(DT_NODELABEL(ic2), ic_div)
     682              : #endif
     683              : 
     684              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic3), st_stm32n6_ic_clock_mux, okay)
     685              : #define STM32_IC3_ENABLED       1
     686              : #define STM32_IC3_PLL_SRC       DT_PROP(DT_NODELABEL(ic3), pll_src)
     687              : #define STM32_IC3_DIV           DT_PROP(DT_NODELABEL(ic3), ic_div)
     688              : #endif
     689              : 
     690              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic4), st_stm32n6_ic_clock_mux, okay)
     691              : #define STM32_IC4_ENABLED       1
     692              : #define STM32_IC4_PLL_SRC       DT_PROP(DT_NODELABEL(ic4), pll_src)
     693              : #define STM32_IC4_DIV           DT_PROP(DT_NODELABEL(ic4), ic_div)
     694              : #endif
     695              : 
     696              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic5), st_stm32n6_ic_clock_mux, okay)
     697              : #define STM32_IC5_ENABLED       1
     698              : #define STM32_IC5_PLL_SRC       DT_PROP(DT_NODELABEL(ic5), pll_src)
     699              : #define STM32_IC5_DIV           DT_PROP(DT_NODELABEL(ic5), ic_div)
     700              : #endif
     701              : 
     702              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic6), st_stm32n6_ic_clock_mux, okay)
     703              : #define STM32_IC6_ENABLED       1
     704              : #define STM32_IC6_PLL_SRC       DT_PROP(DT_NODELABEL(ic6), pll_src)
     705              : #define STM32_IC6_DIV           DT_PROP(DT_NODELABEL(ic6), ic_div)
     706              : #endif
     707              : 
     708              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic7), st_stm32n6_ic_clock_mux, okay)
     709              : #define STM32_IC7_ENABLED       1
     710              : #define STM32_IC7_PLL_SRC       DT_PROP(DT_NODELABEL(ic7), pll_src)
     711              : #define STM32_IC7_DIV           DT_PROP(DT_NODELABEL(ic7), ic_div)
     712              : #endif
     713              : 
     714              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic8), st_stm32n6_ic_clock_mux, okay)
     715              : #define STM32_IC8_ENABLED       1
     716              : #define STM32_IC8_PLL_SRC       DT_PROP(DT_NODELABEL(ic8), pll_src)
     717              : #define STM32_IC8_DIV           DT_PROP(DT_NODELABEL(ic8), ic_div)
     718              : #endif
     719              : 
     720              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic9), st_stm32n6_ic_clock_mux, okay)
     721              : #define STM32_IC9_ENABLED       1
     722              : #define STM32_IC9_PLL_SRC       DT_PROP(DT_NODELABEL(ic9), pll_src)
     723              : #define STM32_IC9_DIV           DT_PROP(DT_NODELABEL(ic9), ic_div)
     724              : #endif
     725              : 
     726              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic10), st_stm32n6_ic_clock_mux, okay)
     727              : #define STM32_IC10_ENABLED      1
     728              : #define STM32_IC10_PLL_SRC      DT_PROP(DT_NODELABEL(ic10), pll_src)
     729              : #define STM32_IC10_DIV          DT_PROP(DT_NODELABEL(ic10), ic_div)
     730              : #endif
     731              : 
     732              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic11), st_stm32n6_ic_clock_mux, okay)
     733              : #define STM32_IC11_ENABLED      1
     734              : #define STM32_IC11_PLL_SRC      DT_PROP(DT_NODELABEL(ic11), pll_src)
     735              : #define STM32_IC11_DIV          DT_PROP(DT_NODELABEL(ic11), ic_div)
     736              : #endif
     737              : 
     738              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic12), st_stm32n6_ic_clock_mux, okay)
     739              : #define STM32_IC12_ENABLED      1
     740              : #define STM32_IC12_PLL_SRC      DT_PROP(DT_NODELABEL(ic12), pll_src)
     741              : #define STM32_IC12_DIV          DT_PROP(DT_NODELABEL(ic12), ic_div)
     742              : #endif
     743              : 
     744              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic13), st_stm32n6_ic_clock_mux, okay)
     745              : #define STM32_IC13_ENABLED      1
     746              : #define STM32_IC13_PLL_SRC      DT_PROP(DT_NODELABEL(ic13), pll_src)
     747              : #define STM32_IC13_DIV          DT_PROP(DT_NODELABEL(ic13), ic_div)
     748              : #endif
     749              : 
     750              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic14), st_stm32n6_ic_clock_mux, okay)
     751              : #define STM32_IC14_ENABLED      1
     752              : #define STM32_IC14_PLL_SRC      DT_PROP(DT_NODELABEL(ic14), pll_src)
     753              : #define STM32_IC14_DIV          DT_PROP(DT_NODELABEL(ic14), ic_div)
     754              : #endif
     755              : 
     756              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic15), st_stm32n6_ic_clock_mux, okay)
     757              : #define STM32_IC15_ENABLED      1
     758              : #define STM32_IC15_PLL_SRC      DT_PROP(DT_NODELABEL(ic15), pll_src)
     759              : #define STM32_IC15_DIV          DT_PROP(DT_NODELABEL(ic15), ic_div)
     760              : #endif
     761              : 
     762              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic16), st_stm32n6_ic_clock_mux, okay)
     763              : #define STM32_IC16_ENABLED      1
     764              : #define STM32_IC16_PLL_SRC      DT_PROP(DT_NODELABEL(ic16), pll_src)
     765              : #define STM32_IC16_DIV          DT_PROP(DT_NODELABEL(ic16), ic_div)
     766              : #endif
     767              : 
     768              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic17), st_stm32n6_ic_clock_mux, okay)
     769              : #define STM32_IC17_ENABLED      1
     770              : #define STM32_IC17_PLL_SRC      DT_PROP(DT_NODELABEL(ic17), pll_src)
     771              : #define STM32_IC17_DIV          DT_PROP(DT_NODELABEL(ic17), ic_div)
     772              : #endif
     773              : 
     774              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic18), st_stm32n6_ic_clock_mux, okay)
     775              : #define STM32_IC18_ENABLED      1
     776              : #define STM32_IC18_PLL_SRC      DT_PROP(DT_NODELABEL(ic18), pll_src)
     777              : #define STM32_IC18_DIV          DT_PROP(DT_NODELABEL(ic18), ic_div)
     778              : #endif
     779              : 
     780              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic19), st_stm32n6_ic_clock_mux, okay)
     781              : #define STM32_IC19_ENABLED      1
     782              : #define STM32_IC19_PLL_SRC      DT_PROP(DT_NODELABEL(ic19), pll_src)
     783              : #define STM32_IC19_DIV          DT_PROP(DT_NODELABEL(ic19), ic_div)
     784              : #endif
     785              : 
     786              : #if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(ic20), st_stm32n6_ic_clock_mux, okay)
     787              : #define STM32_IC20_ENABLED      1
     788              : #define STM32_IC20_PLL_SRC      DT_PROP(DT_NODELABEL(ic20), pll_src)
     789              : #define STM32_IC20_DIV          DT_PROP(DT_NODELABEL(ic20), ic_div)
     790              : #endif
     791              : 
     792              : /** Driver structure definition */
     793              : 
     794            1 : struct stm32_pclken {
     795            0 :         uint32_t bus : STM32_CLOCK_DIV_SHIFT;
     796            0 :         uint32_t div : (32 - STM32_CLOCK_DIV_SHIFT);
     797            0 :         uint32_t enr;
     798              : };
     799              : 
     800              : /** Device tree clocks helpers  */
     801              : 
     802            1 : #define STM32_CLOCK_INFO(clk_index, node_id)                            \
     803              :         {                                                               \
     804              :         .enr = DT_CLOCKS_CELL_BY_IDX(node_id, clk_index, bits),         \
     805              :         .bus = DT_CLOCKS_CELL_BY_IDX(node_id, clk_index, bus) &         \
     806              :                 GENMASK(STM32_CLOCK_DIV_SHIFT - 1, 0),                   \
     807              :         .div = DT_CLOCKS_CELL_BY_IDX(node_id, clk_index, bus) >>  \
     808              :                 STM32_CLOCK_DIV_SHIFT,                                  \
     809              :         }
     810            0 : #define STM32_DT_CLOCKS(node_id)                                        \
     811              :         {                                                               \
     812              :                 LISTIFY(DT_NUM_CLOCKS(node_id),                         \
     813              :                         STM32_CLOCK_INFO, (,), node_id)                 \
     814              :         }
     815              : 
     816            0 : #define STM32_DT_INST_CLOCKS(inst)                                      \
     817              :         STM32_DT_CLOCKS(DT_DRV_INST(inst))
     818              : 
     819            0 : #define STM32_DOMAIN_CLOCK_INST_SUPPORT(inst) DT_INST_CLOCKS_HAS_IDX(inst, 1) ||
     820            0 : #define STM32_DT_INST_DEV_DOMAIN_CLOCK_SUPPORT                          \
     821              :                 (DT_INST_FOREACH_STATUS_OKAY(STM32_DOMAIN_CLOCK_INST_SUPPORT) 0)
     822              : 
     823            0 : #define STM32_DOMAIN_CLOCK_SUPPORT(id) DT_CLOCKS_HAS_IDX(DT_NODELABEL(id), 1) ||
     824            0 : #define STM32_DT_DEV_DOMAIN_CLOCK_SUPPORT                                       \
     825              :                 (DT_FOREACH_STATUS_OKAY(STM32_DOMAIN_CLOCK_SUPPORT) 0)
     826              : 
     827              : /** Clock source binding accessors */
     828              : 
     829              : /**
     830              :  * @brief Obtain register field from clock source selection configuration.
     831              :  *
     832              :  * @param clock clock bit field value.
     833              :  */
     834            1 : #define STM32_DT_CLKSEL_REG_GET(clock) \
     835              :         (((clock) >> STM32_DT_CLKSEL_REG_SHIFT) & STM32_DT_CLKSEL_REG_MASK)
     836              : 
     837              : /**
     838              :  * @brief Obtain position field from clock source selection configuration.
     839              :  *
     840              :  * @param clock Clock bit field value.
     841              :  */
     842            1 : #define STM32_DT_CLKSEL_SHIFT_GET(clock) \
     843              :         (((clock) >> STM32_DT_CLKSEL_SHIFT_SHIFT) & STM32_DT_CLKSEL_SHIFT_MASK)
     844              : 
     845              : /**
     846              :  * @brief Obtain mask field from clock source selection configuration.
     847              :  *
     848              :  * @param clock Clock bit field value.
     849              :  */
     850            1 : #define STM32_DT_CLKSEL_MASK_GET(clock) \
     851              :         (((clock) >> STM32_DT_CLKSEL_MASK_SHIFT) & STM32_DT_CLKSEL_MASK_MASK)
     852              : 
     853              : /**
     854              :  * @brief Obtain value field from clock source selection configuration.
     855              :  *
     856              :  * @param clock Clock bit field value.
     857              :  */
     858            1 : #define STM32_DT_CLKSEL_VAL_GET(clock) \
     859              :         (((clock) >> STM32_DT_CLKSEL_VAL_SHIFT) & STM32_DT_CLKSEL_VAL_MASK)
     860              : 
     861              : #if defined(STM32_HSE_CSS)
     862              : /**
     863              :  * @brief Called if the HSE clock security system detects a clock fault.
     864              :  *
     865              :  * The function is called in interrupt context.
     866              :  *
     867              :  * The default (weakly-linked) implementation does nothing and should be
     868              :  * overridden.
     869              :  */
     870              : void stm32_hse_css_callback(void);
     871              : #endif
     872              : 
     873              : #ifdef CONFIG_SOC_SERIES_STM32WB0X
     874              : /**
     875              :  * @internal
     876              :  * @brief Type definition for LSI frequency update callbacks
     877              :  */
     878              : typedef void (*lsi_update_cb_t)(uint32_t new_lsi_frequency);
     879              : 
     880              : /**
     881              :  * @internal
     882              :  * @brief Registers a callback to invoke after each runtime measure and
     883              :  * update of the LSI frequency is completed.
     884              :  *
     885              :  * @param cb            Callback to invoke
     886              :  * @return 0            Registration successful
     887              :  * @return ENOMEM       Too many callbacks registered
     888              :  *
     889              :  * @note Callbacks are NEVER invoked if runtime LSI measurement is disabled
     890              :  */
     891              : int stm32wb0_register_lsi_update_callback(lsi_update_cb_t cb);
     892              : #endif /* CONFIG_SOC_SERIES_STM32WB0X */
     893              : 
     894              : #endif /* ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_STM32_CLOCK_CONTROL_H_ */
        

Generated by: LCOV version 2.0-1