| /* |
| * Copyright (c) 2017 Nordic Semiconductor ASA |
| * Copyright (c) 2015 Runtime Inc |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #define DT_DRV_COMPAT fixed_partitions |
| |
| #include <zephyr.h> |
| #include <storage/flash_map.h> |
| |
| /* Get the grand parent of a node */ |
| #define GPARENT(node_id) DT_PARENT(DT_PARENT(node_id)) |
| |
| /* if 'soc-nv-flash' return controller label or punt to _else_code */ |
| #define IS_SOC_NV_FLASH(part, _else_code) \ |
| COND_CODE_1(DT_NODE_HAS_COMPAT(GPARENT(part), soc_nv_flash), \ |
| (DT_LABEL(DT_PARENT(GPARENT(part)))), (_else_code)) |
| |
| /* if 'jedec,spi-nor' return controller label or punt to _else_code */ |
| #define IS_JEDEC_SPI_NOR(part, _else_code) \ |
| COND_CODE_1(DT_NODE_HAS_COMPAT(GPARENT(part), jedec_spi_nor), \ |
| (DT_LABEL(GPARENT(part))), (_else_code)) |
| |
| /* if 'nordic,qspi-nor' return controller label or punt to _else_code */ |
| #define IS_NORDIC_QSPI_NOR(part, _else_code) \ |
| COND_CODE_1(DT_NODE_HAS_COMPAT(GPARENT(part), nordic_qspi_nor), \ |
| (DT_LABEL(GPARENT(part))), (_else_code)) |
| |
| /* return flash controller label based on matching compatible or NULL */ |
| #define DT_FLASH_DEV_FROM_PART(part) \ |
| IS_SOC_NV_FLASH(part, \ |
| IS_JEDEC_SPI_NOR(part, \ |
| IS_NORDIC_QSPI_NOR(part, NULL))) |
| |
| #define FLASH_AREA_FOO(part) \ |
| {.fa_id = DT_FIXED_PARTITION_ID(part), \ |
| .fa_off = DT_REG_ADDR(part), \ |
| .fa_dev_name = DT_FLASH_DEV_FROM_PART(part), \ |
| .fa_size = DT_REG_SIZE(part),}, |
| |
| #define FOREACH_PARTION(n) DT_FOREACH_CHILD(DT_DRV_INST(n), FLASH_AREA_FOO) |
| |
| /* We iterate over all compatible 'fixed-partions' nodes and |
| * use DT_FOREACH_CHILD to iterate over all the partitions for that |
| * 'fixed-partions' node. This way we build a global partition map |
| */ |
| const struct flash_area default_flash_map[] = { |
| DT_INST_FOREACH_STATUS_OKAY(FOREACH_PARTION) |
| }; |
| |
| const int flash_map_entries = ARRAY_SIZE(default_flash_map); |
| const struct flash_area *flash_map = default_flash_map; |