aboutsummaryrefslogtreecommitdiff
path: root/ports/stm32/mboot/fsload.c
diff options
context:
space:
mode:
Diffstat (limited to 'ports/stm32/mboot/fsload.c')
-rw-r--r--ports/stm32/mboot/fsload.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/ports/stm32/mboot/fsload.c b/ports/stm32/mboot/fsload.c
index 591b670aa..fe98426be 100644
--- a/ports/stm32/mboot/fsload.c
+++ b/ports/stm32/mboot/fsload.c
@@ -31,6 +31,11 @@
#include "pack.h"
#include "vfs.h"
+// Default block size used for mount operations if none given.
+#ifndef MBOOT_FSLOAD_DEFAULT_BLOCK_SIZE
+#define MBOOT_FSLOAD_DEFAULT_BLOCK_SIZE (4096)
+#endif
+
#if MBOOT_FSLOAD
#if !(MBOOT_VFS_FAT || MBOOT_VFS_LFS1 || MBOOT_VFS_LFS2)
@@ -213,8 +218,19 @@ int fsload_process(void) {
elem = ELEM_DATA_START;
for (;;) {
elem = elem_search(elem, ELEM_TYPE_MOUNT);
- if (elem == NULL || elem[-1] != 10) {
- // End of elements, or invalid MOUNT element
+ if (elem == NULL) {
+ // End of elements.
+ return -1;
+ }
+ uint32_t block_size;
+ if (elem[-1] == 10) {
+ // No block size given, use default.
+ block_size = MBOOT_FSLOAD_DEFAULT_BLOCK_SIZE;
+ } else if (elem[-1] == 14) {
+ // Block size given, extract it.
+ block_size = get_le32(&elem[10]);
+ } else {
+ // Invalid MOUNT element.
return -1;
}
if (elem[0] == mount_point) {
@@ -235,19 +251,20 @@ int fsload_process(void) {
const stream_methods_t *methods;
#if MBOOT_VFS_FAT
if (elem[1] == ELEM_MOUNT_FAT) {
+ (void)block_size;
ret = vfs_fat_mount(&ctx.fat, base_addr, byte_len);
methods = &vfs_fat_stream_methods;
} else
#endif
#if MBOOT_VFS_LFS1
if (elem[1] == ELEM_MOUNT_LFS1) {
- ret = vfs_lfs1_mount(&ctx.lfs1, base_addr, byte_len);
+ ret = vfs_lfs1_mount(&ctx.lfs1, base_addr, byte_len, block_size);
methods = &vfs_lfs1_stream_methods;
} else
#endif
#if MBOOT_VFS_LFS2
if (elem[1] == ELEM_MOUNT_LFS2) {
- ret = vfs_lfs2_mount(&ctx.lfs2, base_addr, byte_len);
+ ret = vfs_lfs2_mount(&ctx.lfs2, base_addr, byte_len, block_size);
methods = &vfs_lfs2_stream_methods;
} else
#endif