clock_control: Add MCO support for STM32 U5 series

Add microcontroller clock output (MCO) support for the STM32
U5 series of devices.

Signed-off-by: Joakim Andersson <joerchan@gmail.com>
diff --git a/drivers/clock_control/Kconfig.stm32 b/drivers/clock_control/Kconfig.stm32
index 484b331..8dffa9b 100644
--- a/drivers/clock_control/Kconfig.stm32
+++ b/drivers/clock_control/Kconfig.stm32
@@ -70,7 +70,8 @@
 	           SOC_SERIES_STM32L4X || \
 	           SOC_SERIES_STM32H7X || \
 	           SOC_SERIES_STM32H7RSX || \
-	           SOC_SERIES_STM32H5X
+	           SOC_SERIES_STM32H5X || \
+	           SOC_SERIES_STM32U5X
 	help
 	  Use LSE as source of MCO1
 
@@ -82,13 +83,15 @@
 	           SOC_SERIES_STM32L4X || \
 	           SOC_SERIES_STM32H7X || \
 	           SOC_SERIES_STM32H7RSX || \
-	           SOC_SERIES_STM32H5X
+	           SOC_SERIES_STM32H5X || \
+	           SOC_SERIES_STM32U5X
 	help
 	  Use HSE as source of MCO1
 
 config CLOCK_STM32_MCO1_SRC_LSI
 	bool "LSI"
-	depends on SOC_SERIES_STM32L4X
+	depends on SOC_SERIES_STM32L4X || \
+	           SOC_SERIES_STM32U5X
 	help
 	  Use LSI as source of MCO1
 
@@ -98,6 +101,18 @@
 	help
 	  Use MSI as source of MCO1
 
+config CLOCK_STM32_MCO1_SRC_MSIK
+	bool "MSIK"
+	depends on SOC_SERIES_STM32U5X
+	help
+	  Use MSIK as source of MCO1
+
+config CLOCK_STM32_MCO1_SRC_MSIS
+	bool "MSIS"
+	depends on SOC_SERIES_STM32U5X
+	help
+	  Use MSIS as source of MCO1
+
 config CLOCK_STM32_MCO1_SRC_HSI
 	bool "HSI"
 	depends on SOC_SERIES_STM32F1X || \
@@ -111,7 +126,8 @@
 
 config CLOCK_STM32_MCO1_SRC_HSI16
 	bool "HSI16"
-	depends on SOC_SERIES_STM32L4X
+	depends on SOC_SERIES_STM32L4X || \
+		   SOC_SERIES_STM32U5X
 	help
 	  Use HSI16 as source of MCO1
 
@@ -120,13 +136,17 @@
 	depends on SOC_SERIES_STM32L4X || \
 	           SOC_SERIES_STM32H7X || \
 	           SOC_SERIES_STM32H7RSX || \
-	           SOC_SERIES_STM32H5X
+	           SOC_SERIES_STM32H5X || \
+	           SOC_SERIES_STM32U5X
 	help
 	  Use HSI48 as source of MCO1
 
 config CLOCK_STM32_MCO1_SRC_PLLCLK
 	bool "PLLCLK"
-	depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X || SOC_SERIES_STM32L4X
+	depends on SOC_SERIES_STM32F4X || \
+	           SOC_SERIES_STM32F7X || \
+		   SOC_SERIES_STM32L4X || \
+		   SOC_SERIES_STM32U5X
 	help
 	  Use PLLCLK as source of MCO1
 
@@ -164,7 +184,9 @@
 
 config CLOCK_STM32_MCO1_SRC_SYSCLK
 	bool "SYSCLK"
-	depends on SOC_SERIES_STM32F1X || SOC_SERIES_STM32L4X
+	depends on SOC_SERIES_STM32F1X || \
+	           SOC_SERIES_STM32L4X || \
+	           SOC_SERIES_STM32U5X
 	help
 	  Use SYSCLK as source of MCO1
 endchoice
@@ -177,12 +199,13 @@
 	             SOC_SERIES_STM32L4X || \
 	             SOC_SERIES_STM32H7X || \
 	             SOC_SERIES_STM32H7RSX || \
-	             SOC_SERIES_STM32H5X \
+	             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
+	range 1   16 if SOC_SERIES_STM32L4X || SOC_SERIES_STM32U5X
 	help
 	  Prescaler for MCO1 output clock
 
diff --git a/drivers/clock_control/clock_stm32_ll_mco.h b/drivers/clock_control/clock_stm32_ll_mco.h
index b526f13..22e2043 100644
--- a/drivers/clock_control/clock_stm32_ll_mco.h
+++ b/drivers/clock_control/clock_stm32_ll_mco.h
@@ -22,6 +22,10 @@
 	#define MCO1_SOURCE		LL_RCC_MCO1SOURCE_LSI
 #elif CONFIG_CLOCK_STM32_MCO1_SRC_MSI
 	#define MCO1_SOURCE		LL_RCC_MCO1SOURCE_MSI
+#elif CONFIG_CLOCK_STM32_MCO1_SRC_MSIK
+	#define MCO1_SOURCE		LL_RCC_MCO1SOURCE_MSIK
+#elif CONFIG_CLOCK_STM32_MCO1_SRC_MSIS
+	#define MCO1_SOURCE		LL_RCC_MCO1SOURCE_MSIS
 #elif CONFIG_CLOCK_STM32_MCO1_SRC_HSI
 	#define MCO1_SOURCE		LL_RCC_MCO1SOURCE_HSI
 #elif CONFIG_CLOCK_STM32_MCO1_SRC_HSI16
diff --git a/drivers/clock_control/clock_stm32_ll_u5.c b/drivers/clock_control/clock_stm32_ll_u5.c
index bec41e2..0c5d587 100644
--- a/drivers/clock_control/clock_stm32_ll_u5.c
+++ b/drivers/clock_control/clock_stm32_ll_u5.c
@@ -17,6 +17,7 @@
 #include <zephyr/drivers/clock_control.h>
 #include <zephyr/sys/util.h>
 #include <zephyr/drivers/clock_control/stm32_clock_control.h>
+#include "clock_stm32_ll_mco.h"
 
 /* Macros to fill up prescaler values */
 #define z_ahb_prescaler(v) LL_RCC_SYSCLK_DIV_ ## v
@@ -895,6 +896,9 @@
 	/* Update CMSIS variable */
 	SystemCoreClock = CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC;
 
+	/* configure MCO1/MCO2 based on Kconfig */
+	stm32_clock_control_mco_init();
+
 	return 0;
 }