summaryrefslogtreecommitdiffstatshomepage
path: root/ports/stm32/vfs_rom_ioctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'ports/stm32/vfs_rom_ioctl.c')
-rw-r--r--ports/stm32/vfs_rom_ioctl.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/ports/stm32/vfs_rom_ioctl.c b/ports/stm32/vfs_rom_ioctl.c
index 7592aa22d6..5dbc855861 100644
--- a/ports/stm32/vfs_rom_ioctl.c
+++ b/ports/stm32/vfs_rom_ioctl.c
@@ -33,6 +33,7 @@
#include "flash.h"
#include "qspi.h"
#include "storage.h"
+#include "xspi.h"
#if MICROPY_VFS_ROM_IOCTL
@@ -142,6 +143,18 @@ mp_obj_t mp_vfs_rom_ioctl(size_t n_args, const mp_obj_t *args) {
return MP_OBJ_NEW_SMALL_INT(4);
}
#endif
+
+ #if MICROPY_HW_ROMFS_ENABLE_EXTERNAL_XSPI
+ if (xspi_is_valid_addr(&xspi_flash2, dest)) {
+ dest -= xspi_get_xip_base(&xspi_flash2);
+ dest_max -= xspi_get_xip_base(&xspi_flash2);
+ int ret = spi_bdev_eraseblocks_raw(MICROPY_HW_ROMFS_XSPI_SPIBDEV_OBJ, dest / MP_SPIFLASH_ERASE_BLOCK_SIZE, dest_max - dest + MP_SPIFLASH_ERASE_BLOCK_SIZE - 1);
+ if (ret < 0) {
+ return MP_OBJ_NEW_SMALL_INT(ret);
+ }
+ return MP_OBJ_NEW_SMALL_INT(4);
+ }
+ #endif
}
if (cmd == MP_VFS_ROM_IOCTL_WRITE) {
@@ -170,6 +183,14 @@ mp_obj_t mp_vfs_rom_ioctl(size_t n_args, const mp_obj_t *args) {
return MP_OBJ_NEW_SMALL_INT(ret);
}
#endif
+
+ #if MICROPY_HW_ROMFS_ENABLE_EXTERNAL_XSPI
+ if (xspi_is_valid_addr(&xspi_flash2, dest)) {
+ dest -= xspi_get_xip_base(&xspi_flash2);
+ int ret = spi_bdev_writeblocks_raw(MICROPY_HW_ROMFS_XSPI_SPIBDEV_OBJ, bufinfo.buf, 0, dest, bufinfo.len);
+ return MP_OBJ_NEW_SMALL_INT(ret);
+ }
+ #endif
}
return MP_OBJ_NEW_SMALL_INT(-MP_EINVAL);