From 1f2e7f4b52d77b242b64458b5ca0d7cd41b8cc52 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Tue, 5 Jun 2018 10:20:50 -0600 Subject: [PATCH] arch/arm/src/stm32: CONFIG_STM32_FLASH_WORKAROUND_DATA_CACHE_CORRUPTION_ON_RWW option applies only to F2 and F4. --- arch/arm/src/stm32/Kconfig | 3 ++- arch/arm/src/stm32/stm32f10xxf30xx_flash.c | 26 ---------------------- arch/arm/src/stm32/stm32l15xx_flash.c | 18 --------------- 3 files changed, 2 insertions(+), 45 deletions(-) diff --git a/arch/arm/src/stm32/Kconfig b/arch/arm/src/stm32/Kconfig index 4b9b0c5ba6f..3354dc40ed2 100644 --- a/arch/arm/src/stm32/Kconfig +++ b/arch/arm/src/stm32/Kconfig @@ -2927,9 +2927,9 @@ endmenu config STM32_FLASH_PREFETCH bool "Enable FLASH Pre-fetch" - depends on STM32_STM32F207 || STM32_STM32F4XXX default y if STM32_STM32F427 || STM32_STM32F429 || STM32_STM32F446 default n + depends on STM32_STM32F207 || STM32_STM32F4XXX ---help--- Enable FLASH prefetch and F2 and F4 parts (FLASH pre-fetch is always enabled on F1 parts). Some early revisions of F4 parts do not support FLASH pre-fetch @@ -2938,6 +2938,7 @@ config STM32_FLASH_PREFETCH config STM32_FLASH_WORKAROUND_DATA_CACHE_CORRUPTION_ON_RWW bool "Workaround for FLASH data cache corruption" default n + depends on STM32_STM32F20XX || STM32_STM32F4XXX ---help--- Enable the workaround to fix flash data cache corruption when reading from one flash bank while writing on other flash bank. See your STM32 diff --git a/arch/arm/src/stm32/stm32f10xxf30xx_flash.c b/arch/arm/src/stm32/stm32f10xxf30xx_flash.c index f137e55ccb3..d093d35a35e 100644 --- a/arch/arm/src/stm32/stm32f10xxf30xx_flash.c +++ b/arch/arm/src/stm32/stm32f10xxf30xx_flash.c @@ -128,24 +128,6 @@ static void flash_lock(void) modifyreg32(STM32_FLASH_CR, 0, FLASH_CR_LOCK); } -#if defined(CONFIG_STM32_FLASH_WORKAROUND_DATA_CACHE_CORRUPTION_ON_RWW) -static void data_cache_disable(void) -{ - modifyreg32(STM32_FLASH_ACR, FLASH_ACR_DCEN, 0); -} - -static void data_cache_enable(void) -{ - /* Reset data cache */ - - modifyreg32(STM32_FLASH_ACR, 0, FLASH_ACR_DCRST); - - /* Enable data cache */ - - modifyreg32(STM32_FLASH_ACR, 0, FLASH_ACR_DCEN); -} -#endif /* defined(CONFIG_STM32_FLASH_WORKAROUND_DATA_CACHE_CORRUPTION_ON_RWW) */ - /************************************************************************************ * Public Functions ************************************************************************************/ @@ -321,10 +303,6 @@ ssize_t up_progmem_write(size_t addr, const void *buf, size_t count) flash_unlock(); -#if defined(CONFIG_STM32_FLASH_WORKAROUND_DATA_CACHE_CORRUPTION_ON_RWW) - data_cache_disable(); -#endif - modifyreg32(STM32_FLASH_CR, 0, FLASH_CR_PG); for (addr += STM32_FLASH_BASE; count; count -= 2, hword++, addr += 2) @@ -354,10 +332,6 @@ ssize_t up_progmem_write(size_t addr, const void *buf, size_t count) modifyreg32(STM32_FLASH_CR, FLASH_CR_PG, 0); -#if defined(CONFIG_STM32_FLASH_WORKAROUND_DATA_CACHE_CORRUPTION_ON_RWW) - data_cache_enable(); -#endif - sem_unlock(); return written; } diff --git a/arch/arm/src/stm32/stm32l15xx_flash.c b/arch/arm/src/stm32/stm32l15xx_flash.c index f1d68f6a4fd..7f35ef63c61 100644 --- a/arch/arm/src/stm32/stm32l15xx_flash.c +++ b/arch/arm/src/stm32/stm32l15xx_flash.c @@ -121,24 +121,6 @@ static inline void sem_unlock(void) nxsem_post(&g_sem); } -#if defined(CONFIG_STM32_FLASH_WORKAROUND_DATA_CACHE_CORRUPTION_ON_RWW) -static void data_cache_disable(void) -{ - modifyreg32(STM32_FLASH_ACR, FLASH_ACR_DCEN, 0); -} - -static void data_cache_enable(void) -{ - /* Reset data cache */ - - modifyreg32(STM32_FLASH_ACR, 0, FLASH_ACR_DCRST); - - /* Enable data cache */ - - modifyreg32(STM32_FLASH_ACR, 0, FLASH_ACR_DCEN); -} -#endif /* defined(CONFIG_STM32_FLASH_WORKAROUND_DATA_CACHE_CORRUPTION_ON_RWW) */ - static void stm32_eeprom_unlock(void) { while (getreg32(STM32_FLASH_SR) & FLASH_SR_BSY)