diff --git a/drivers/entropy/Kconfig.stm32 b/drivers/entropy/Kconfig.stm32 index 00b10a61a9d..27eb6cac427 100644 --- a/drivers/entropy/Kconfig.stm32 +++ b/drivers/entropy/Kconfig.stm32 @@ -13,4 +13,4 @@ menuconfig ENTROPY_STM32_RNG This option enables the RNG processor, which is a entropy number generator, based on a continuous analog noise, that provides a entropy 32-bit value to the host when read. It is available for - F4 (except STM32F401 & STM32F411), L4 and F7 series. + F4 (except STM32F401 & STM32F411), L4, F7 and G4 series. diff --git a/drivers/entropy/entropy_stm32.c b/drivers/entropy/entropy_stm32.c index 32ffc451769..d2b327be982 100644 --- a/drivers/entropy/entropy_stm32.c +++ b/drivers/entropy/entropy_stm32.c @@ -17,8 +17,8 @@ #include #include -#if !defined(CONFIG_SOC_SERIES_STM32L4X) && !defined(CONFIG_SOC_SERIES_STM32F4X) && !defined(CONFIG_SOC_SERIES_STM32F7X) -#error RNG only available on STM32F4, STM32F7 and STM32L4 series +#if !defined(CONFIG_SOC_SERIES_STM32L4X) && !defined(CONFIG_SOC_SERIES_STM32F4X) && !defined(CONFIG_SOC_SERIES_STM32F7X) && !defined(CONFIG_SOC_SERIES_STM32G4X) +#error RNG only available on STM32F4, STM32F7, STM32L4 and STM32G4 series #elif defined(CONFIG_SOC_STM32F401XE) #error RNG not available on STM32F401 based SoCs #elif defined(CONFIG_SOC_STM32F411XE) @@ -182,6 +182,14 @@ static int entropy_stm32_rng_init(struct device *dev) * Linear Feedback Shift Register */ LL_RCC_SetRNGClockSource(LL_RCC_RNG_CLKSOURCE_PLLSAI1); +#elif CONFIG_SOC_SERIES_STM32G4X + /* Use the HSI48 for the RNG */ + LL_RCC_HSI48_Enable(); + while (!LL_RCC_HSI48_IsReady()) { + /* Wait for HSI48 to become ready */ + } + + LL_RCC_SetRNGClockSource(LL_RCC_RNG_CLKSOURCE_HSI48); #endif /* CONFIG_SOC_SERIES_STM32L4X */ dev_data->clock = device_get_binding(STM32_CLOCK_CONTROL_NAME); diff --git a/soc/arm/st_stm32/stm32g4/Kconfig.defconfig.series b/soc/arm/st_stm32/stm32g4/Kconfig.defconfig.series index 928c8d1b45e..5fa1ea6fb25 100644 --- a/soc/arm/st_stm32/stm32g4/Kconfig.defconfig.series +++ b/soc/arm/st_stm32/stm32g4/Kconfig.defconfig.series @@ -35,5 +35,12 @@ config I2C_STM32_V2 endif # I2C_STM32 +if ENTROPY_GENERATOR + +config ENTROPY_STM32_RNG + default y + +endif # ENTROPY_GENERATOR + endif # GPIO_STM32 endif # SOC_SERIES_STM32G4X diff --git a/soc/arm/st_stm32/stm32g4/soc.h b/soc/arm/st_stm32/stm32g4/soc.h index b2e837fa0b9..b4c68671596 100644 --- a/soc/arm/st_stm32/stm32g4/soc.h +++ b/soc/arm/st_stm32/stm32g4/soc.h @@ -60,6 +60,10 @@ #include #endif +#ifdef CONFIG_ENTROPY_STM32_RNG +#include +#endif + #if defined(CONFIG_COUNTER_RTC_STM32) #include #include