diff options
Diffstat (limited to 'ports/stm32/vfs_rom_ioctl.c')
-rw-r--r-- | ports/stm32/vfs_rom_ioctl.c | 21 |
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); |