From bbcbe4ac3f80123c66fbd14669f30defed2c867d Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Wed, 21 Oct 2020 14:20:34 +0200 Subject: [PATCH 1/4] Make RNG clock source configurable. --- src/cmsis/src/st/system_stm32fxxx.c | 4 ++-- src/omv/boards/OPENMV4/omv_boardconfig.h | 2 ++ src/omv/boards/OPENMV4P/omv_boardconfig.h | 2 ++ src/omv/boards/OPENMVPURETHERMAL/omv_boardconfig.h | 2 ++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/cmsis/src/st/system_stm32fxxx.c b/src/cmsis/src/st/system_stm32fxxx.c index 3b4e2366d..3eab44fff 100644 --- a/src/cmsis/src/st/system_stm32fxxx.c +++ b/src/cmsis/src/st/system_stm32fxxx.c @@ -275,7 +275,7 @@ void SystemClock_Config(void) PeriphClkInitStruct.PLL3.PLL3FRACN = OMV_OSC_PLL3FRAC; #endif - #if defined(STM32H743xx) || defined(STM32H747xx) + #if defined(MCU_SERIES_H7) PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_FDCAN |RCC_PERIPHCLK_SPI3|RCC_PERIPHCLK_SPI2 |RCC_PERIPHCLK_SDMMC|RCC_PERIPHCLK_I2C2 @@ -292,7 +292,7 @@ void SystemClock_Config(void) PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI; PeriphClkInitStruct.I2c123ClockSelection = RCC_I2C123CLKSOURCE_D2PCLK1; PeriphClkInitStruct.Spi45ClockSelection = RCC_SPI45CLKSOURCE_PLL2; - PeriphClkInitStruct.RngClockSelection = RCC_RNGCLKSOURCE_HSI48; + PeriphClkInitStruct.RngClockSelection = OMV_OSC_RNG_CLKSOURCE; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { // Initialization Error diff --git a/src/omv/boards/OPENMV4/omv_boardconfig.h b/src/omv/boards/OPENMV4/omv_boardconfig.h index 4380a76d9..93766c611 100644 --- a/src/omv/boards/OPENMV4/omv_boardconfig.h +++ b/src/omv/boards/OPENMV4/omv_boardconfig.h @@ -110,11 +110,13 @@ // Clock Sources #define OMV_OSC_USB_CLKSOURCE RCC_USBCLKSOURCE_PLL +#define OMV_OSC_RNG_CLKSOURCE RCC_RNGCLKSOURCE_HSI48 #define OMV_OSC_ADC_CLKSOURCE RCC_ADCCLKSOURCE_PLL3 #define OMV_OSC_SPI123_CLKSOURCE RCC_SPI123CLKSOURCE_PLL3 // HSE/HSI/CSI State #define OMV_OSC_HSE_STATE (RCC_HSE_ON) +#define OMV_OSC_HSI48_STATE (RCC_HSI48_ON) // Flash Latency #define OMV_FLASH_LATENCY (FLASH_LATENCY_2) diff --git a/src/omv/boards/OPENMV4P/omv_boardconfig.h b/src/omv/boards/OPENMV4P/omv_boardconfig.h index 4b1959899..92c04474c 100644 --- a/src/omv/boards/OPENMV4P/omv_boardconfig.h +++ b/src/omv/boards/OPENMV4P/omv_boardconfig.h @@ -114,11 +114,13 @@ // Clock Sources #define OMV_OSC_USB_CLKSOURCE RCC_USBCLKSOURCE_PLL +#define OMV_OSC_RNG_CLKSOURCE RCC_RNGCLKSOURCE_HSI48 #define OMV_OSC_ADC_CLKSOURCE RCC_ADCCLKSOURCE_PLL3 #define OMV_OSC_SPI123_CLKSOURCE RCC_SPI123CLKSOURCE_PLL3 // HSE/HSI/CSI State #define OMV_OSC_HSE_STATE (RCC_HSE_ON) +#define OMV_OSC_HSI48_STATE (RCC_HSI48_ON) // Flash Latency #define OMV_FLASH_LATENCY (FLASH_LATENCY_2) diff --git a/src/omv/boards/OPENMVPURETHERMAL/omv_boardconfig.h b/src/omv/boards/OPENMVPURETHERMAL/omv_boardconfig.h index 047f1bda8..9600bb8e9 100644 --- a/src/omv/boards/OPENMVPURETHERMAL/omv_boardconfig.h +++ b/src/omv/boards/OPENMVPURETHERMAL/omv_boardconfig.h @@ -81,6 +81,7 @@ // Clock Sources #define OMV_OSC_USB_CLKSOURCE RCC_USBCLKSOURCE_PLL +#define OMV_OSC_RNG_CLKSOURCE RCC_RNGCLKSOURCE_HSI48 #define OMV_OSC_ADC_CLKSOURCE RCC_ADCCLKSOURCE_PLL2 #define OMV_OSC_SPI123_CLKSOURCE RCC_SPI123CLKSOURCE_PLL2 @@ -116,6 +117,7 @@ // HSE/HSI/CSI State #define OMV_OSC_HSE_STATE (RCC_HSE_ON) +#define OMV_OSC_HSI48_STATE (RCC_HSI48_ON) // Flash Latency #define OMV_FLASH_LATENCY (FLASH_LATENCY_2) From 93dbd7529dfcdeb07339bb44d6915c4696d7dfad Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Wed, 21 Oct 2020 14:21:22 +0200 Subject: [PATCH 2/4] OPENMV4: Switch USB clock source to HSI48. --- src/omv/boards/OPENMV4/omv_boardconfig.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/omv/boards/OPENMV4/omv_boardconfig.h b/src/omv/boards/OPENMV4/omv_boardconfig.h index 93766c611..c8d3f42b0 100644 --- a/src/omv/boards/OPENMV4/omv_boardconfig.h +++ b/src/omv/boards/OPENMV4/omv_boardconfig.h @@ -109,7 +109,7 @@ #define OMV_OSC_PLL3FRAC (0) // Clock Sources -#define OMV_OSC_USB_CLKSOURCE RCC_USBCLKSOURCE_PLL +#define OMV_OSC_USB_CLKSOURCE RCC_USBCLKSOURCE_HSI48 #define OMV_OSC_RNG_CLKSOURCE RCC_RNGCLKSOURCE_HSI48 #define OMV_OSC_ADC_CLKSOURCE RCC_ADCCLKSOURCE_PLL3 #define OMV_OSC_SPI123_CLKSOURCE RCC_SPI123CLKSOURCE_PLL3 From 4405fb3ea782c64cad545f127a4efba6b622b2ff Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Wed, 21 Oct 2020 14:24:40 +0200 Subject: [PATCH 3/4] H7: Override PLL1 frequency for revision Y devices. * Some rev Y devices fail with 480MHz overclocking. Override PLL settings to set a maximum frequency of 400MHz CPU 200MHz Bus for rev Y devices. --- src/cmsis/src/st/system_stm32fxxx.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/cmsis/src/st/system_stm32fxxx.c b/src/cmsis/src/st/system_stm32fxxx.c index 3eab44fff..e30a19fd9 100644 --- a/src/cmsis/src/st/system_stm32fxxx.c +++ b/src/cmsis/src/st/system_stm32fxxx.c @@ -229,12 +229,24 @@ void SystemClock_Config(void) RCC_OscInitStruct.HSI48State = OMV_OSC_HSI48_STATE; RCC_OscInitStruct.OscillatorType |= RCC_OSCILLATORTYPE_HSI48; #endif + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = OMV_OSC_PLL1M; RCC_OscInitStruct.PLL.PLLN = OMV_OSC_PLL1N; RCC_OscInitStruct.PLL.PLLQ = OMV_OSC_PLL1Q; RCC_OscInitStruct.PLL.PLLP = OMV_OSC_PLL1P; + + #if defined(MCU_SERIES_H7) + // Override PLL1 frequency for revision Y devices, + // with maximum frequency of 400MHz CPU 200MHz Bus. + if (HAL_GetREVID() < 0x2003) { + // 400MHz/200MHz + RCC_OscInitStruct.PLL.PLLN = 200; + RCC_OscInitStruct.PLL.PLLQ = 16; + } + #endif + #if defined(OMV_OSC_PLL1R) RCC_OscInitStruct.PLL.PLLR = OMV_OSC_PLL1R; #endif From 0b0c8eaeeaca6e0092b2f3830a3a85ba6e996acc Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Wed, 21 Oct 2020 14:54:30 +0200 Subject: [PATCH 4/4] PORTENTA: Set RNG clock source. --- src/omv/boards/PORTENTA/omv_boardconfig.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/omv/boards/PORTENTA/omv_boardconfig.h b/src/omv/boards/PORTENTA/omv_boardconfig.h index a1f0a0e8f..eae36a7e4 100644 --- a/src/omv/boards/PORTENTA/omv_boardconfig.h +++ b/src/omv/boards/PORTENTA/omv_boardconfig.h @@ -109,6 +109,7 @@ // Clock Sources #define OMV_OSC_USB_CLKSOURCE RCC_USBCLKSOURCE_HSI48 +#define OMV_OSC_RNG_CLKSOURCE RCC_RNGCLKSOURCE_HSI48 #define OMV_OSC_ADC_CLKSOURCE RCC_ADCCLKSOURCE_PLL3 #define OMV_OSC_SPI123_CLKSOURCE RCC_SPI123CLKSOURCE_PLL3