storage: flash_map: Don't generate flash area when no device

Change in default flash map generation, where partitions hanging of
disabled devices will not have flash area generated.

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
This commit is contained in:
Dominik Ermel 2024-11-11 18:47:12 +01:00 committed by Henrik Brix Andersen
commit 77ebf82b3e
3 changed files with 10 additions and 6 deletions

View file

@ -39,7 +39,7 @@ int flash_area_open(uint8_t id, const struct flash_area **fap)
return -ENOENT;
}
if (!area->fa_dev || !device_is_ready(area->fa_dev)) {
if (!device_is_ready(area->fa_dev)) {
return -ENODEV;
}

View file

@ -16,18 +16,22 @@
#define FLASH_AREA_FOO(part) \
{.fa_id = DT_FIXED_PARTITION_ID(part), \
.fa_off = DT_REG_ADDR(part), \
.fa_dev = DEVICE_DT_GET_OR_NULL(DT_MTD_FROM_FIXED_PARTITION(part)), \
.fa_dev = DEVICE_DT_GET(DT_MTD_FROM_FIXED_PARTITION(part)), \
.fa_size = DT_REG_SIZE(part), \
.fa_label = DT_PROP_OR(part, label, NULL), },
#else
#define FLASH_AREA_FOO(part) \
{.fa_id = DT_FIXED_PARTITION_ID(part), \
.fa_off = DT_REG_ADDR(part), \
.fa_dev = DEVICE_DT_GET_OR_NULL(DT_MTD_FROM_FIXED_PARTITION(part)), \
.fa_dev = DEVICE_DT_GET(DT_MTD_FROM_FIXED_PARTITION(part)), \
.fa_size = DT_REG_SIZE(part), },
#endif
#define FOREACH_PARTITION(n) DT_FOREACH_CHILD(DT_DRV_INST(n), FLASH_AREA_FOO)
#define FLASH_AREA_FOOO(part) \
COND_CODE_1(DT_NODE_HAS_STATUS_OKAY(DT_MTD_FROM_FIXED_PARTITION(part)), \
(FLASH_AREA_FOO(part)), ())
#define FOREACH_PARTITION(n) DT_FOREACH_CHILD(DT_DRV_INST(n), FLASH_AREA_FOOO)
/* We iterate over all compatible 'fixed-partitions' nodes and
* use DT_FOREACH_CHILD to iterate over all the partitions for that

View file

@ -27,9 +27,9 @@ ZTEST(flash_map, test_flash_area_disabled_device)
/* Test that attempting to open a disabled flash area fails */
rc = flash_area_open(FIXED_PARTITION_ID(disabled_a), &fa);
zassert_equal(rc, -ENODEV, "Open did not fail");
zassert_equal(rc, -ENOENT, "Open did not fail");
rc = flash_area_open(FIXED_PARTITION_ID(disabled_b), &fa);
zassert_equal(rc, -ENODEV, "Open did not fail");
zassert_equal(rc, -ENOENT, "Open did not fail");
}
/**