summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2018-05-28 10:57:27 +1000
committerDamien George <damien.p.george@gmail.com>2018-05-28 21:45:46 +1000
commitf497723802406c00d84b20fe5fc74b973a128ebc (patch)
tree897b566ccabc26b52ed559f80f0cdd63479f8761
parentaa4a7a8732a8594c932503b50152f8e60053e498 (diff)
stm32: Allow to have no storage support if there are no block devices.
If no block devices are defined by a board then storage support will be disabled. This means there is no filesystem provided by either the internal flash or external SPI flash. But the VFS system can still be enabled and filesystems provided on external devices like an SD card.
-rw-r--r--ports/stm32/main.c11
-rw-r--r--ports/stm32/modmachine.c2
-rw-r--r--ports/stm32/mpconfigboard_common.h7
-rw-r--r--ports/stm32/spibdev.c4
-rw-r--r--ports/stm32/stm32_it.c4
-rw-r--r--ports/stm32/storage.c4
6 files changed, 31 insertions, 1 deletions
diff --git a/ports/stm32/main.c b/ports/stm32/main.c
index 5c7535542..d24200ba0 100644
--- a/ports/stm32/main.c
+++ b/ports/stm32/main.c
@@ -130,6 +130,7 @@ STATIC mp_obj_t pyb_main(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_a
}
MP_DEFINE_CONST_FUN_OBJ_KW(pyb_main_obj, 1, pyb_main);
+#if MICROPY_HW_ENABLE_STORAGE
static const char fresh_boot_py[] =
"# boot.py -- run on boot-up\r\n"
"# can run arbitrary Python, but best to keep it minimal\r\n"
@@ -264,6 +265,7 @@ MP_NOINLINE STATIC bool init_flash_fs(uint reset_mode) {
return true;
}
+#endif
#if MICROPY_HW_HAS_SDCARD
STATIC bool init_sdcard_fs(void) {
@@ -512,7 +514,9 @@ void stm32_main(uint32_t reset_mode) {
#if MICROPY_HW_HAS_SDCARD
sdcard_init();
#endif
+ #if MICROPY_HW_ENABLE_STORAGE
storage_init();
+ #endif
#if MICROPY_PY_LWIP
// lwIP doesn't allow to reinitialise itself by subsequent calls to this function
// because the system timeout list (next_timeout) is only ever reset by BSS clearing.
@@ -599,7 +603,10 @@ soft_reset:
// Initialise the local flash filesystem.
// Create it if needed, mount in on /flash, and set it as current dir.
- bool mounted_flash = init_flash_fs(reset_mode);
+ bool mounted_flash = false;
+ #if MICROPY_HW_ENABLE_STORAGE
+ mounted_flash = init_flash_fs(reset_mode);
+ #endif
bool mounted_sdcard = false;
#if MICROPY_HW_HAS_SDCARD
@@ -727,8 +734,10 @@ soft_reset_exit:
// soft reset
+ #if MICROPY_HW_ENABLE_STORAGE
printf("PYB: sync filesystems\n");
storage_flush();
+ #endif
printf("PYB: soft reboot\n");
#if MICROPY_PY_NETWORK
diff --git a/ports/stm32/modmachine.c b/ports/stm32/modmachine.c
index 73442719b..ff1eaec95 100644
--- a/ports/stm32/modmachine.c
+++ b/ports/stm32/modmachine.c
@@ -231,7 +231,9 @@ STATIC NORETURN mp_obj_t machine_bootloader(void) {
#if MICROPY_HW_ENABLE_USB
pyb_usb_dev_deinit();
#endif
+ #if MICROPY_HW_ENABLE_STORAGE
storage_flush();
+ #endif
HAL_RCC_DeInit();
HAL_DeInit();
diff --git a/ports/stm32/mpconfigboard_common.h b/ports/stm32/mpconfigboard_common.h
index 7449a6895..919598de4 100644
--- a/ports/stm32/mpconfigboard_common.h
+++ b/ports/stm32/mpconfigboard_common.h
@@ -169,6 +169,13 @@
#define MICROPY_HW_BDEV_WRITEBLOCK flash_bdev_writeblock
#endif
+// Enable the storage sub-system if a block device is defined
+#if defined(MICROPY_HW_BDEV_IOCTL)
+#define MICROPY_HW_ENABLE_STORAGE (1)
+#else
+#define MICROPY_HW_ENABLE_STORAGE (0)
+#endif
+
// Enable hardware I2C if there are any peripherals defined
#if defined(MICROPY_HW_I2C1_SCL) || defined(MICROPY_HW_I2C2_SCL) \
|| defined(MICROPY_HW_I2C3_SCL) || defined(MICROPY_HW_I2C4_SCL)
diff --git a/ports/stm32/spibdev.c b/ports/stm32/spibdev.c
index 91ec4df5e..b73058c6a 100644
--- a/ports/stm32/spibdev.c
+++ b/ports/stm32/spibdev.c
@@ -30,6 +30,8 @@
#include "led.h"
#include "storage.h"
+#if MICROPY_HW_ENABLE_STORAGE
+
int32_t spi_bdev_ioctl(spi_bdev_t *bdev, uint32_t op, uint32_t arg) {
switch (op) {
case BDEV_IOCTL_INIT:
@@ -79,3 +81,5 @@ int spi_bdev_writeblocks(spi_bdev_t *bdev, const uint8_t *src, uint32_t block_nu
return ret;
}
+
+#endif
diff --git a/ports/stm32/stm32_it.c b/ports/stm32/stm32_it.c
index b7124de89..b05138287 100644
--- a/ports/stm32/stm32_it.c
+++ b/ports/stm32/stm32_it.c
@@ -310,9 +310,11 @@ void SysTick_Handler(void) {
// be generalised in the future then a dispatch table can be used as
// follows: ((void(*)(void))(systick_dispatch[uwTick & 0xf]))();
+ #if MICROPY_HW_ENABLE_STORAGE
if (STORAGE_IDLE_TICK(uwTick)) {
NVIC->STIR = FLASH_IRQn;
}
+ #endif
if (DMA_IDLE_ENABLED() && DMA_IDLE_TICK(uwTick)) {
dma_idle_handler(uwTick);
@@ -459,8 +461,10 @@ void FLASH_IRQHandler(void) {
HAL_FLASH_IRQHandler();
}
*/
+ #if MICROPY_HW_ENABLE_STORAGE
// This call the storage IRQ handler, to check if the flash cache needs flushing
storage_irq_handler();
+ #endif
IRQ_EXIT(FLASH_IRQn);
}
diff --git a/ports/stm32/storage.c b/ports/stm32/storage.c
index 2ac54a401..761db0b52 100644
--- a/ports/stm32/storage.c
+++ b/ports/stm32/storage.c
@@ -34,6 +34,8 @@
#include "storage.h"
#include "irq.h"
+#if MICROPY_HW_ENABLE_STORAGE
+
#define FLASH_PART1_START_BLOCK (0x100)
#if defined(MICROPY_HW_BDEV2_IOCTL)
@@ -284,3 +286,5 @@ void pyb_flash_init_vfs(fs_user_mount_t *vfs) {
vfs->u.ioctl[0] = (mp_obj_t)&pyb_flash_ioctl_obj;
vfs->u.ioctl[1] = (mp_obj_t)&pyb_flash_obj;
}
+
+#endif