diff --git a/drivers/flash/spi_nor.c b/drivers/flash/spi_nor.c index 207801261b7..fdfa7f0b72e 100644 --- a/drivers/flash/spi_nor.c +++ b/drivers/flash/spi_nor.c @@ -382,16 +382,30 @@ static int spi_nor_init(struct device *dev) return spi_nor_configure(dev); } +#if defined(CONFIG_FLASH_PAGE_LAYOUT) +static const struct flash_pages_layout dev_layout = { + .pages_count = KB(CONFIG_FLASH_SIZE) / FLASH_ERASE_BLOCK_SIZE, + .pages_size = FLASH_ERASE_BLOCK_SIZE, +}; + +static void spi_nor_pages_layout(struct device *dev, + const struct flash_pages_layout **layout, + size_t *layout_size) +{ + *layout = &dev_layout; + *layout_size = 1; +} +#endif /* CONFIG_FLASH_PAGE_LAYOUT */ + static const struct flash_driver_api spi_nor_api = { .read = spi_nor_read, .write = spi_nor_write, .erase = spi_nor_erase, .write_protection = spi_nor_write_protection_set, #if defined(CONFIG_FLASH_PAGE_LAYOUT) - .page_layout = (flash_api_pages_layout) - flash_page_layout_not_implemented, + .page_layout = spi_nor_pages_layout, #endif - .write_block_size = 1, + .write_block_size = FLASH_WRITE_BLOCK_SIZE, }; static const struct spi_nor_config flash_id = { diff --git a/subsys/storage/flash_map/flash_map.c b/subsys/storage/flash_map/flash_map.c index 1f6db7ffa8d..382a710e50e 100644 --- a/subsys/storage/flash_map/flash_map.c +++ b/subsys/storage/flash_map/flash_map.c @@ -38,6 +38,9 @@ static const struct driver_map_entry flash_drivers_map[] = { #ifdef CONFIG_SPI_FLASH_W25QXXDV {SPI_FLASH_0_ID, CONFIG_SPI_FLASH_W25QXXDV_DRV_NAME}, #endif +#ifdef DT_SPI_NOR_DRV_NAME + {SPI_FLASH_0_ID, DT_SPI_NOR_DRV_NAME}, +#endif }; extern const struct flash_area *flash_map; diff --git a/subsys/storage/flash_map/flash_map_default.c b/subsys/storage/flash_map/flash_map_default.c index e33810ec33a..c310237afdb 100644 --- a/subsys/storage/flash_map/flash_map_default.c +++ b/subsys/storage/flash_map/flash_map_default.c @@ -8,11 +8,17 @@ #include #include +#if defined(DT_FLASH_DEV_NAME) +#define FA_DEV_ID SOC_FLASH_0_ID +#elif defined(CONFIG_SPI_FLASH_W25QXXDV) || defined(DT_SPI_NOR_DRV_NAME) +#define FA_DEV_ID SPI_FLASH_0_ID +#endif + const struct flash_area default_flash_map[] = { /* FLASH_AREA_BOOTLOADER */ { .fa_id = 0, - .fa_device_id = SOC_FLASH_0_ID, + .fa_device_id = FA_DEV_ID, .fa_off = FLASH_AREA_MCUBOOT_OFFSET, .fa_size = FLASH_AREA_MCUBOOT_SIZE, }, @@ -20,7 +26,7 @@ const struct flash_area default_flash_map[] = { /* FLASH_AREA_IMAGE_0 */ { .fa_id = 1, - .fa_device_id = SOC_FLASH_0_ID, + .fa_device_id = FA_DEV_ID, .fa_off = FLASH_AREA_IMAGE_0_OFFSET, .fa_size = FLASH_AREA_IMAGE_0_SIZE, }, @@ -28,7 +34,7 @@ const struct flash_area default_flash_map[] = { /* FLASH_AREA_IMAGE_1 */ { .fa_id = 2, - .fa_device_id = SOC_FLASH_0_ID, + .fa_device_id = FA_DEV_ID, .fa_off = FLASH_AREA_IMAGE_1_OFFSET, .fa_size = FLASH_AREA_IMAGE_1_SIZE, }, @@ -36,7 +42,7 @@ const struct flash_area default_flash_map[] = { /* FLASH_AREA_IMAGE_SCRATCH */ { .fa_id = 3, - .fa_device_id = SOC_FLASH_0_ID, + .fa_device_id = FA_DEV_ID, .fa_off = FLASH_AREA_IMAGE_SCRATCH_OFFSET, .fa_size = FLASH_AREA_IMAGE_SCRATCH_SIZE, }, @@ -45,7 +51,7 @@ const struct flash_area default_flash_map[] = { /* FLASH_AREA_STORAGE */ { .fa_id = 4, - .fa_device_id = SOC_FLASH_0_ID, + .fa_device_id = FA_DEV_ID, .fa_off = FLASH_AREA_STORAGE_OFFSET, .fa_size = FLASH_AREA_STORAGE_SIZE, },