After writing data to flash space, next instruction is checking if flash
controller is busy writing to the flash memory. Memory barrier is required here
to avoid transaction re-ordering for data write and busy status check.

Signed-off-by: Vikas Manocha <vikas.mano...@st.com>
---
 drivers/mtd/stm32_flash.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/mtd/stm32_flash.c b/drivers/mtd/stm32_flash.c
index 71f4854..e16b6cd 100644
--- a/drivers/mtd/stm32_flash.c
+++ b/drivers/mtd/stm32_flash.c
@@ -137,6 +137,10 @@ int write_buff(flash_info_t *info, uchar *src, ulong addr, 
ulong cnt)
        /* To make things simple use byte writes only */
        for (i = 0; i < cnt; i++) {
                *(uchar *)(addr + i) = src[i];
+               /*  avoid re-ordering flash data write and busy status
+                *  check as flash memory space attributes are generally Normal
+                */
+               mb();
                while (readl(&STM32_FLASH->sr) & STM32_FLASH_SR_BSY)
                        ;
        }
-- 
1.9.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to