From 03d3075dc8d7ce05b0a26bcd1a8110d839b13715 Mon Sep 17 00:00:00 2001 From: Youssef Zini Date: Wed, 28 May 2025 11:14:03 +0200 Subject: [PATCH] drivers: clock_control: add uart clock handling Add clock bindings for UART/USART (1-9) peripherals in the `stm32mp2_clock.h`. Add UART/USART clocks rate reading to the STM32MP2 clock driver. Signed-off-by: Youssef Zini --- drivers/clock_control/clock_stm32_ll_mp2.c | 33 +++++++++++++++++-- .../zephyr/dt-bindings/clock/stm32mp2_clock.h | 13 +++++++- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/drivers/clock_control/clock_stm32_ll_mp2.c b/drivers/clock_control/clock_stm32_ll_mp2.c index 0164c67a9e0..96e45533377 100644 --- a/drivers/clock_control/clock_stm32_ll_mp2.c +++ b/drivers/clock_control/clock_stm32_ll_mp2.c @@ -46,10 +46,37 @@ static int stm32_clock_control_off(const struct device *dev, clock_control_subsy static int stm32_clock_control_get_subsys_rate(const struct device *dev, clock_control_subsys_t sub_system, uint32_t *rate) { + struct stm32_pclken *pclken = (struct stm32_pclken *)(sub_system); + ARG_UNUSED(dev); - ARG_UNUSED(sub_system); - ARG_UNUSED(rate); - return -ENOTSUP; + + switch (pclken->bus) { + case STM32_CLOCK_PERIPH_USART1: + *rate = LL_RCC_GetUARTClockFreq(LL_RCC_USART1_CLKSOURCE); + break; + case STM32_CLOCK_PERIPH_USART2: + case STM32_CLOCK_PERIPH_UART4: + *rate = LL_RCC_GetUARTClockFreq(LL_RCC_UART24_CLKSOURCE); + break; + case STM32_CLOCK_PERIPH_USART3: + case STM32_CLOCK_PERIPH_UART5: + *rate = LL_RCC_GetUARTClockFreq(LL_RCC_USART35_CLKSOURCE); + break; + case STM32_CLOCK_PERIPH_USART6: + *rate = LL_RCC_GetUARTClockFreq(LL_RCC_USART6_CLKSOURCE); + break; + case STM32_CLOCK_PERIPH_UART7: + case STM32_CLOCK_PERIPH_UART8: + *rate = LL_RCC_GetUARTClockFreq(LL_RCC_UART78_CLKSOURCE); + break; + case STM32_CLOCK_PERIPH_UART9: + *rate = LL_RCC_GetUARTClockFreq(LL_RCC_UART9_CLKSOURCE); + break; + default: + return -ENOTSUP; + } + + return 0; } static DEVICE_API(clock_control, stm32_clock_control_api) = { diff --git a/include/zephyr/dt-bindings/clock/stm32mp2_clock.h b/include/zephyr/dt-bindings/clock/stm32mp2_clock.h index 8ccffd5e2c7..ba462a0f287 100644 --- a/include/zephyr/dt-bindings/clock/stm32mp2_clock.h +++ b/include/zephyr/dt-bindings/clock/stm32mp2_clock.h @@ -39,7 +39,18 @@ #define STM32_CLOCK_PERIPH_GPIOK 0x554 #define STM32_CLOCK_PERIPH_GPIOZ 0x558 +/* USART/UART Peripheral */ +#define STM32_CLOCK_PERIPH_USART1 0x77C +#define STM32_CLOCK_PERIPH_USART2 0x780 +#define STM32_CLOCK_PERIPH_USART3 0x784 +#define STM32_CLOCK_PERIPH_UART4 0x788 +#define STM32_CLOCK_PERIPH_UART5 0x78C +#define STM32_CLOCK_PERIPH_USART6 0x790 +#define STM32_CLOCK_PERIPH_UART7 0x794 +#define STM32_CLOCK_PERIPH_UART8 0x798 +#define STM32_CLOCK_PERIPH_UART9 0x79C + #define STM32_CLOCK_PERIPH_MIN STM32_CLOCK_PERIPH_GPIOA -#define STM32_CLOCK_PERIPH_MAX STM32_CLOCK_PERIPH_GPIOZ +#define STM32_CLOCK_PERIPH_MAX STM32_CLOCK_PERIPH_UART9 #endif /* ZEPHYR_INCLUDE_DT_BINDINGS_CLOCK_STM32MP2_CLOCK_H_ */