From 8542c9c882834b627072bfe1c61643c9d3643559 Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Sun, 18 Sep 2022 15:59:38 +0200 Subject: [PATCH] ports/stm32: Support the new flash storage configuration. --- src/omv/boards/NICLAV/omv_boardconfig.h | 11 ++++- src/omv/boards/OPENMV1/omv_boardconfig.h | 20 +++++--- src/omv/boards/OPENMV2/omv_boardconfig.h | 11 ++++- src/omv/boards/OPENMV3/omv_boardconfig.h | 11 ++++- src/omv/boards/OPENMV4/omv_boardconfig.h | 11 ++++- src/omv/boards/OPENMV4P/omv_boardconfig.h | 11 ++++- src/omv/boards/OPENMV4_PRO/omv_boardconfig.h | 11 ++++- src/omv/boards/OPENMVPT/omv_boardconfig.h | 11 ++++- src/omv/boards/PORTENTA/omv_boardconfig.h | 15 ++++-- src/omv/ports/stm32/stm32fxxx.ld.S | 49 ++++++++++++-------- src/uvc/stm32fxxx.ld.S | 9 ++-- 11 files changed, 120 insertions(+), 50 deletions(-) diff --git a/src/omv/boards/NICLAV/omv_boardconfig.h b/src/omv/boards/NICLAV/omv_boardconfig.h index b896e6eb3..946d505a3 100644 --- a/src/omv/boards/NICLAV/omv_boardconfig.h +++ b/src/omv/boards/NICLAV/omv_boardconfig.h @@ -151,8 +151,9 @@ #define OMV_FIR_LEPTON_BUF_SIZE (1K) // FIR Lepton Packet Double Buffer (328 bytes) #define OMV_JPEG_BUF_SIZE (32 * 1024) // IDE JPEG buffer (header + data). -#define OMV_TEXT_ORIGIN 0x08040000 -#define OMV_TEXT_LENGTH 1792K +// Memory map. +#define OMV_FLASH_ORIGIN 0x08000000 +#define OMV_FLASH_LENGTH 2048K #define OMV_DTCM_ORIGIN 0x20000000 // Note accessible by CPU and MDMA only. #define OMV_DTCM_LENGTH 128K #define OMV_ITCM_ORIGIN 0x00000000 @@ -167,6 +168,12 @@ #define OMV_SRAM4_LENGTH 64K #define OMV_AXI_SRAM_ORIGIN 0x24000000 #define OMV_AXI_SRAM_LENGTH 512K + +// Flash configuration. +#define OMV_FLASH_FFS_ORIGIN 0x08020000 +#define OMV_FLASH_FFS_LENGTH 128K +#define OMV_FLASH_TXT_ORIGIN 0x08040000 +#define OMV_FLASH_TXT_LENGTH 1792K #define OMV_FLASH_EXT_ORIGIN 0x90000000 #define OMV_FLASH_EXT_LENGTH 16M diff --git a/src/omv/boards/OPENMV1/omv_boardconfig.h b/src/omv/boards/OPENMV1/omv_boardconfig.h index 2f656f4eb..0ca9bd067 100644 --- a/src/omv/boards/OPENMV1/omv_boardconfig.h +++ b/src/omv/boards/OPENMV1/omv_boardconfig.h @@ -44,13 +44,19 @@ // Flash Latency #define OMV_FLASH_LATENCY (FLASH_LATENCY_5) -// Linker script constants (see the linker script template stm32fxxx.ld.S). -#define OMV_TEXT_ORIGIN 0x08010000 -#define OMV_TEXT_LENGTH 448K -#define OMV_SRAM1_ORIGIN 0x20000000 -#define OMV_SRAM1_LENGTH 128K -#define OMV_DTCM_ORIGIN 0x10000000 -#define OMV_DTCM_LENGTH 64K +// Memory map. +#define OMV_FLASH_ORIGIN 0x08000000 +#define OMV_FLASH_LENGTH 512K +#define OMV_SRAM1_ORIGIN 0x20000000 +#define OMV_SRAM1_LENGTH 128K +#define OMV_DTCM_ORIGIN 0x10000000 +#define OMV_DTCM_LENGTH 64K + +// Flash configuration. +#define OMV_FLASH_FFS_ORIGIN 0x08004000 +#define OMV_FLASH_FFS_LENGTH 48K +#define OMV_FLASH_TXT_ORIGIN 0x08010000 +#define OMV_FLASH_TXT_LENGTH 448K /* SCCB/I2C */ #define SCCB_I2C (I2C1) diff --git a/src/omv/boards/OPENMV2/omv_boardconfig.h b/src/omv/boards/OPENMV2/omv_boardconfig.h index 4125daf1d..2ce779388 100644 --- a/src/omv/boards/OPENMV2/omv_boardconfig.h +++ b/src/omv/boards/OPENMV2/omv_boardconfig.h @@ -107,8 +107,9 @@ #define OMV_FFS_BUF_SIZE (16K) // Flash filesystem cache #define OMV_JPEG_BUF_SIZE (8 * 1024) // IDE JPEG buffer size (header + data). -#define OMV_TEXT_ORIGIN 0x08010000 -#define OMV_TEXT_LENGTH 960K +// Memory map. +#define OMV_FLASH_ORIGIN 0x08000000 +#define OMV_FLASH_LENGTH 1024K #define OMV_DTCM_ORIGIN 0x10000000 #define OMV_DTCM_LENGTH 64K #define OMV_SRAM1_ORIGIN 0x20000000 @@ -116,6 +117,12 @@ #define OMV_SRAM2_ORIGIN 0x20028800 #define OMV_SRAM2_LENGTH 30K +// Flash configuration. +#define OMV_FLASH_FFS_ORIGIN 0x08004000 +#define OMV_FLASH_FFS_LENGTH 48K +#define OMV_FLASH_TXT_ORIGIN 0x08010000 +#define OMV_FLASH_TXT_LENGTH 960K + // Image sensor I2C #define ISC_I2C (I2C1) #define ISC_I2C_ID (1) diff --git a/src/omv/boards/OPENMV3/omv_boardconfig.h b/src/omv/boards/OPENMV3/omv_boardconfig.h index f92ad8eab..73df6ffd5 100644 --- a/src/omv/boards/OPENMV3/omv_boardconfig.h +++ b/src/omv/boards/OPENMV3/omv_boardconfig.h @@ -107,8 +107,9 @@ #define OMV_FFS_BUF_SIZE (32K) // Flash filesystem cache #define OMV_JPEG_BUF_SIZE (22 * 1024) // IDE JPEG buffer (header + data). -#define OMV_TEXT_ORIGIN 0x08020000 -#define OMV_TEXT_LENGTH 1920K +// Memory map. +#define OMV_FLASH_ORIGIN 0x08000000 +#define OMV_FLASH_LENGTH 2048K #define OMV_DTCM_ORIGIN 0x20000000 #define OMV_DTCM_LENGTH 128K // Note DTCM/ITCM memory is not cacheable on M7 #define OMV_ITCM_ORIGIN 0x00000000 @@ -116,6 +117,12 @@ #define OMV_SRAM1_ORIGIN 0x20020000 #define OMV_SRAM1_LENGTH 384K +// Flash configuration. +#define OMV_FLASH_FFS_ORIGIN 0x08008000 +#define OMV_FLASH_FFS_LENGTH 96K +#define OMV_FLASH_TXT_ORIGIN 0x08020000 +#define OMV_FLASH_TXT_LENGTH 1920K + // Image sensor I2C #define ISC_I2C (I2C1) #define ISC_I2C_ID (1) diff --git a/src/omv/boards/OPENMV4/omv_boardconfig.h b/src/omv/boards/OPENMV4/omv_boardconfig.h index 88da5b97b..097e23b98 100644 --- a/src/omv/boards/OPENMV4/omv_boardconfig.h +++ b/src/omv/boards/OPENMV4/omv_boardconfig.h @@ -165,8 +165,9 @@ #define OMV_FIR_LEPTON_BUF_SIZE (1K) // FIR Lepton Packet Double Buffer (328 bytes) #define OMV_JPEG_BUF_SIZE (32 * 1024) // IDE JPEG buffer (header + data). -#define OMV_TEXT_ORIGIN 0x08040000 -#define OMV_TEXT_LENGTH 1792K +// Memory map. +#define OMV_FLASH_ORIGIN 0x08000000 +#define OMV_FLASH_LENGTH 2048K #define OMV_DTCM_ORIGIN 0x20000000 // Note accessible by CPU and MDMA only. #define OMV_DTCM_LENGTH 128K #define OMV_ITCM_ORIGIN 0x00000000 @@ -182,6 +183,12 @@ #define OMV_AXI_SRAM_ORIGIN 0x24000000 #define OMV_AXI_SRAM_LENGTH 512K +// Flash configuration. +#define OMV_FLASH_FFS_ORIGIN 0x08020000 +#define OMV_FLASH_FFS_LENGTH 128K +#define OMV_FLASH_TXT_ORIGIN 0x08040000 +#define OMV_FLASH_TXT_LENGTH 1792K + // Domain 1 DMA buffers region. #define OMV_DMA_MEMORY_D1 AXI_SRAM #define OMV_DMA_MEMORY_D1_SIZE (8*1024) // Reserved memory for DMA buffers diff --git a/src/omv/boards/OPENMV4P/omv_boardconfig.h b/src/omv/boards/OPENMV4P/omv_boardconfig.h index 22d854c61..9ee21cfcc 100644 --- a/src/omv/boards/OPENMV4P/omv_boardconfig.h +++ b/src/omv/boards/OPENMV4P/omv_boardconfig.h @@ -161,8 +161,9 @@ #define OMV_FIR_LEPTON_BUF_SIZE (1K) // FIR Lepton Packet Double Buffer (328 bytes) #define OMV_JPEG_BUF_SIZE (1024*1024) // IDE JPEG buffer (header + data). -#define OMV_TEXT_ORIGIN 0x08040000 -#define OMV_TEXT_LENGTH 1792K +// Memory map. +#define OMV_FLASH_ORIGIN 0x08000000 +#define OMV_FLASH_LENGTH 2048K #define OMV_DTCM_ORIGIN 0x20000000 // Note accessible by CPU and MDMA only. #define OMV_DTCM_LENGTH 128K #define OMV_ITCM_ORIGIN 0x00000000 @@ -178,6 +179,12 @@ #define OMV_DRAM_ORIGIN 0xC0000000 #define OMV_DRAM_LENGTH 32M +// Flash configuration. +#define OMV_FLASH_FFS_ORIGIN 0x08020000 +#define OMV_FLASH_FFS_LENGTH 128K +#define OMV_FLASH_TXT_ORIGIN 0x08040000 +#define OMV_FLASH_TXT_LENGTH 1792K + // Domain 1 DMA buffers region. #define OMV_DMA_MEMORY_D1 AXI_SRAM #define OMV_DMA_MEMORY_D1_SIZE (16*1024) // Reserved memory for DMA buffers diff --git a/src/omv/boards/OPENMV4_PRO/omv_boardconfig.h b/src/omv/boards/OPENMV4_PRO/omv_boardconfig.h index 4bf6ba826..c22420340 100644 --- a/src/omv/boards/OPENMV4_PRO/omv_boardconfig.h +++ b/src/omv/boards/OPENMV4_PRO/omv_boardconfig.h @@ -173,8 +173,9 @@ #define OMV_FIR_LEPTON_BUF_SIZE (1K) // FIR Lepton Packet Double Buffer (328 bytes) #define OMV_JPEG_BUF_SIZE (1024*1024) // IDE JPEG buffer (header + data). -#define OMV_TEXT_ORIGIN 0x08040000 -#define OMV_TEXT_LENGTH 1792K +// Memory map. +#define OMV_FLASH_ORIGIN 0x08000000 +#define OMV_FLASH_LENGTH 2048K #define OMV_DTCM_ORIGIN 0x20000000 // Note accessible by CPU and MDMA only. #define OMV_DTCM_LENGTH 128K #define OMV_ITCM_ORIGIN 0x00000000 @@ -189,6 +190,12 @@ #define OMV_AXI_SRAM_LENGTH 512K #define OMV_DRAM_ORIGIN 0xC0000000 #define OMV_DRAM_LENGTH 32M + +// Flash configuration. +#define OMV_FLASH_FFS_ORIGIN 0x08020000 +#define OMV_FLASH_FFS_LENGTH 128K +#define OMV_FLASH_TXT_ORIGIN 0x08040000 +#define OMV_FLASH_TXT_LENGTH 1792K #define OMV_FLASH_EXT_ORIGIN 0x90000000 #define OMV_FLASH_EXT_LENGTH 32M diff --git a/src/omv/boards/OPENMVPT/omv_boardconfig.h b/src/omv/boards/OPENMVPT/omv_boardconfig.h index ab275fc66..d354f91ec 100644 --- a/src/omv/boards/OPENMVPT/omv_boardconfig.h +++ b/src/omv/boards/OPENMVPT/omv_boardconfig.h @@ -164,8 +164,9 @@ #define OMV_FIR_LEPTON_BUF_SIZE (1K) // FIR Lepton Packet Double Buffer (328 bytes) #define OMV_JPEG_BUF_SIZE (1024*1024) // IDE JPEG buffer (header + data). -#define OMV_TEXT_ORIGIN 0x08040000 -#define OMV_TEXT_LENGTH 1792K +// Memory map. +#define OMV_FLASH_ORIGIN 0x08000000 +#define OMV_FLASH_LENGTH 2048K #define OMV_DTCM_ORIGIN 0x20000000 // Note accessible by CPU and MDMA only. #define OMV_DTCM_LENGTH 128K #define OMV_ITCM_ORIGIN 0x00000000 @@ -181,6 +182,12 @@ #define OMV_DRAM_ORIGIN 0xC0000000 #define OMV_DRAM_LENGTH 64M +// Flash configuration. +#define OMV_FLASH_FFS_ORIGIN 0x08020000 +#define OMV_FLASH_FFS_LENGTH 128K +#define OMV_FLASH_TXT_ORIGIN 0x08040000 +#define OMV_FLASH_TXT_LENGTH 1792K + // Domain 1 DMA buffers region. #define OMV_DMA_MEMORY_D1 AXI_SRAM #define OMV_DMA_MEMORY_D1_SIZE (16*1024) // Reserved memory for DMA buffers diff --git a/src/omv/boards/PORTENTA/omv_boardconfig.h b/src/omv/boards/PORTENTA/omv_boardconfig.h index e8259d284..f7b1d2655 100644 --- a/src/omv/boards/PORTENTA/omv_boardconfig.h +++ b/src/omv/boards/PORTENTA/omv_boardconfig.h @@ -169,8 +169,9 @@ #define OMV_FIR_LEPTON_BUF_SIZE (1K) // FIR Lepton Packet Double Buffer (328 bytes) #define OMV_JPEG_BUF_SIZE (1024*1024) // IDE JPEG buffer (header + data). -#define OMV_TEXT_ORIGIN 0x08040000 -#define OMV_TEXT_LENGTH 1792K +// Memory map. +#define OMV_FLASH_ORIGIN 0x08000000 +#define OMV_FLASH_LENGTH 2048K #define OMV_DTCM_ORIGIN 0x20000000 // Note accessible by CPU and MDMA only. #define OMV_DTCM_LENGTH 128K #define OMV_SRAM1_ORIGIN 0x30000000 @@ -183,13 +184,19 @@ #define OMV_AXI_SRAM_LENGTH 512K #define OMV_DRAM_ORIGIN 0xC0000000 #define OMV_DRAM_LENGTH 8M -#define OMV_FLASH_EXT_ORIGIN 0x90000000 -#define OMV_FLASH_EXT_LENGTH 16M #define OMV_CM4_RAM_ORIGIN 0x30044000 // Cortex-M4 memory. #define OMV_CM4_RAM_LENGTH 16K #define OMV_CM4_FLASH_ORIGIN 0x08020000 #define OMV_CM4_FLASH_LENGTH 128K +// Flash configuration. +#define OMV_FLASH_FFS_ORIGIN 0x08020000 +#define OMV_FLASH_FFS_LENGTH 128K +#define OMV_FLASH_TXT_ORIGIN 0x08040000 +#define OMV_FLASH_TXT_LENGTH 1792K +#define OMV_FLASH_EXT_ORIGIN 0x90000000 +#define OMV_FLASH_EXT_LENGTH 16M + // Domain 1 DMA buffers region. #define OMV_DMA_MEMORY_D1 AXI_SRAM #define OMV_DMA_MEMORY_D1_SIZE (16*1024) // Reserved memory for DMA buffers diff --git a/src/omv/ports/stm32/stm32fxxx.ld.S b/src/omv/ports/stm32/stm32fxxx.ld.S index 2acfb932f..3956f6c77 100755 --- a/src/omv/ports/stm32/stm32fxxx.ld.S +++ b/src/omv/ports/stm32/stm32fxxx.ld.S @@ -17,41 +17,39 @@ ENTRY(Reset_Handler) /* Specify the memory areas */ MEMORY { - DTCM (xrw) : ORIGIN = OMV_DTCM_ORIGIN, LENGTH = OMV_DTCM_LENGTH + DTCM (xrw) : ORIGIN = OMV_DTCM_ORIGIN, LENGTH = OMV_DTCM_LENGTH #if defined(OMV_ITCM_ORIGIN) - ITCM (xrw) : ORIGIN = OMV_ITCM_ORIGIN, LENGTH = OMV_ITCM_LENGTH + ITCM (xrw) : ORIGIN = OMV_ITCM_ORIGIN, LENGTH = OMV_ITCM_LENGTH #endif - SRAM1 (xrw) : ORIGIN = OMV_SRAM1_ORIGIN, LENGTH = OMV_SRAM1_LENGTH + SRAM1 (xrw) : ORIGIN = OMV_SRAM1_ORIGIN, LENGTH = OMV_SRAM1_LENGTH #if defined(OMV_SRAM2_ORIGIN) - SRAM2 (xrw) : ORIGIN = OMV_SRAM2_ORIGIN, LENGTH = OMV_SRAM2_LENGTH + SRAM2 (xrw) : ORIGIN = OMV_SRAM2_ORIGIN, LENGTH = OMV_SRAM2_LENGTH #endif #if defined(OMV_SRAM3_ORIGIN) - SRAM3 (xrw) : ORIGIN = OMV_SRAM3_ORIGIN, LENGTH = OMV_SRAM3_LENGTH + SRAM3 (xrw) : ORIGIN = OMV_SRAM3_ORIGIN, LENGTH = OMV_SRAM3_LENGTH #endif #if defined(OMV_SRAM4_ORIGIN) - SRAM4 (xrw) : ORIGIN = OMV_SRAM4_ORIGIN, LENGTH = OMV_SRAM4_LENGTH + SRAM4 (xrw) : ORIGIN = OMV_SRAM4_ORIGIN, LENGTH = OMV_SRAM4_LENGTH #endif #if defined(OMV_AXI_SRAM_ORIGIN) - AXI_SRAM (xrw) : ORIGIN = OMV_AXI_SRAM_ORIGIN, LENGTH = OMV_AXI_SRAM_LENGTH + AXI_SRAM (xrw) : ORIGIN = OMV_AXI_SRAM_ORIGIN, LENGTH = OMV_AXI_SRAM_LENGTH #endif #if defined(OMV_DRAM_ORIGIN) - DRAM (xrw) : ORIGIN = OMV_DRAM_ORIGIN, LENGTH = OMV_DRAM_LENGTH + DRAM (xrw) : ORIGIN = OMV_DRAM_ORIGIN, LENGTH = OMV_DRAM_LENGTH #endif - FLASH_TEXT (rx) : ORIGIN = OMV_TEXT_ORIGIN, LENGTH = OMV_TEXT_LENGTH + #if defined(OMV_FLASH_FFS_ORIGIN) + FLASH_FFS (rx) : ORIGIN = OMV_FLASH_FFS_ORIGIN, LENGTH = OMV_FLASH_FFS_LENGTH + #endif + FLASH_TEXT (rx) : ORIGIN = OMV_FLASH_TXT_ORIGIN, LENGTH = OMV_FLASH_TXT_LENGTH #if defined(OMV_FLASH_EXT_ORIGIN) FLASH_EXT (rx) : ORIGIN = OMV_FLASH_EXT_ORIGIN, LENGTH = OMV_FLASH_EXT_LENGTH #endif } +_heap_size = OMV_HEAP_SIZE; /* required amount of heap */ +_stack_size = OMV_STACK_SIZE; /* minimum amount of stack */ _ram_end = ORIGIN(OMV_MAIN_MEMORY) + LENGTH(OMV_MAIN_MEMORY); -#if defined(OMV_FFS_MEMORY) -#if !defined(OMV_FFS_MEMORY_OFFSET) -#define OMV_FFS_MEMORY_OFFSET (0) -#endif -_ffs_cache = ORIGIN(OMV_FFS_MEMORY) + OMV_FFS_MEMORY_OFFSET; -#endif - #if defined(OMV_JPEG_MEMORY) #if !defined(OMV_JPEG_MEMORY_OFFSET) #define OMV_JPEG_MEMORY_OFFSET (0) @@ -66,8 +64,18 @@ _jpeg_buf = ORIGIN(OMV_JPEG_MEMORY) + OMV_JPEG_MEMORY_OFFSET; _vospi_buf = ORIGIN(OMV_VOSPI_MEMORY) + OMV_VOSPI_MEMORY_OFFSET; #endif -_heap_size = OMV_HEAP_SIZE; /* required amount of heap */ -_stack_size = OMV_STACK_SIZE; /* minimum amount of stack */ +// Location of filesystem flash storage +_micropy_hw_internal_flash_storage_start = ORIGIN(FLASH_FFS); +_micropy_hw_internal_flash_storage_end = ORIGIN(FLASH_FFS) + LENGTH(FLASH_FFS); + +#if defined(OMV_FFS_MEMORY) +#if !defined(OMV_FFS_MEMORY_OFFSET) +#define OMV_FFS_MEMORY_OFFSET (0) +#endif +// Location of filesystem RAM cache +_micropy_hw_internal_flash_storage_ram_cache_start = ORIGIN(OMV_FFS_MEMORY) + OMV_FFS_MEMORY_OFFSET; +_micropy_hw_internal_flash_storage_ram_cache_end = LENGTH(OMV_FFS_MEMORY); +#endif /* Define output sections */ SECTIONS @@ -156,10 +164,11 @@ SECTIONS _fir_lepton_buf = .; // FIR Lepton Packet Double Buffer (328 bytes) . = . + OMV_FIR_LEPTON_BUF_SIZE; - #if !defined(OMV_FFS_MEMORY) && defined(OMV_FFS_BUF_SIZE) + #if defined(OMV_FFS_BUF_SIZE) . = ALIGN(16); - _ffs_cache = .; // Flash filesystem cache + _micropy_hw_internal_flash_storage_ram_cache_start = .; . = . + OMV_FFS_BUF_SIZE; + _micropy_hw_internal_flash_storage_ram_cache_end = .; #endif #if !defined(OMV_JPEG_MEMORY) diff --git a/src/uvc/stm32fxxx.ld.S b/src/uvc/stm32fxxx.ld.S index 35074c763..58c3af73c 100755 --- a/src/uvc/stm32fxxx.ld.S +++ b/src/uvc/stm32fxxx.ld.S @@ -37,9 +37,11 @@ MEMORY #if defined(OMV_DRAM_ORIGIN) DRAM (xrw) : ORIGIN = OMV_DRAM_ORIGIN, LENGTH = OMV_DRAM_LENGTH #endif - FLASH_TEXT (rx) : ORIGIN = OMV_TEXT_ORIGIN, LENGTH = OMV_TEXT_LENGTH + FLASH_TEXT (rx) : ORIGIN = OMV_FLASH_TXT_ORIGIN, LENGTH = OMV_FLASH_TXT_LENGTH } +_heap_size = OMV_HEAP_SIZE; /* required amount of heap */ +_stack_size = OMV_STACK_SIZE; /* minimum amount of stack */ _ram_end = ORIGIN(OMV_MAIN_MEMORY) + LENGTH(OMV_MAIN_MEMORY); #if defined(OMV_FFS_MEMORY) @@ -63,9 +65,6 @@ _jpeg_buf = ORIGIN(OMV_JPEG_MEMORY) + OMV_JPEG_MEMORY_OFFSET; _vospi_buf = ORIGIN(OMV_VOSPI_MEMORY) + OMV_VOSPI_MEMORY_OFFSET; #endif -_heap_size = OMV_HEAP_SIZE; /* required amount of heap */ -_stack_size = OMV_STACK_SIZE; /* minimum amount of stack */ - /* Define output sections */ SECTIONS { @@ -133,7 +132,7 @@ SECTIONS _fir_lepton_buf = .; // FIR Lepton Packet Double Buffer (328 bytes) . = . + OMV_FIR_LEPTON_BUF_SIZE; - #if !defined(OMV_FFS_MEMORY) && defined(OMV_FFS_BUF_SIZE) + #if defined(OMV_FFS_BUF_SIZE) . = ALIGN(16); _ffs_cache = .; // Flash filesystem cache . = . + OMV_FFS_BUF_SIZE;