storage/flash_map: Added function for get erased byte value

Added flash_area_erased_val() function for get value of erased
byte of memory which is under flash area.
This function already exist in MCUBoot and zephyr dfu subsystem
which makes simultaneous usage of both impossible.

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
This commit is contained in:
Andrzej Puzdrowski 2020-09-18 18:19:39 +02:00 committed by Carles Cufí
commit 053857e09a
4 changed files with 39 additions and 9 deletions

View file

@ -245,6 +245,17 @@ int flash_area_has_driver(const struct flash_area *fa);
*/ */
const struct device *flash_area_get_device(const struct flash_area *fa); const struct device *flash_area_get_device(const struct flash_area *fa);
/**
* Get the value expected to be read when accessing any erased
* flash byte.
* This API is compatible with the MCUBoot's porting layer.
*
* @param fa Flash area.
*
* @return Byte value of erase memory.
*/
uint8_t flash_area_erased_val(const struct flash_area *fa);
#define FLASH_AREA_LABEL_EXISTS(label) \ #define FLASH_AREA_LABEL_EXISTS(label) \
DT_HAS_FIXED_PARTITION_LABEL(label) DT_HAS_FIXED_PARTITION_LABEL(label)

View file

@ -205,15 +205,6 @@ static int boot_flag_decode(uint8_t flag)
return BOOT_FLAG_SET; return BOOT_FLAG_SET;
} }
/* TODO: this function should be moved to flash_area api in future */
uint8_t flash_area_erased_val(const struct flash_area *fa)
{
#define ERASED_VAL 0xff
(void)fa;
return ERASED_VAL;
}
/* TODO: this function should be moved to flash_area api in future */ /* TODO: this function should be moved to flash_area api in future */
int flash_area_read_is_empty(const struct flash_area *fa, uint32_t off, int flash_area_read_is_empty(const struct flash_area *fa, uint32_t off,
void *dst, uint32_t len) void *dst, uint32_t len)

View file

@ -270,6 +270,15 @@ const struct device *flash_area_get_device(const struct flash_area *fa)
return device_get_binding(fa->fa_dev_name); return device_get_binding(fa->fa_dev_name);
} }
uint8_t flash_area_erased_val(const struct flash_area *fa)
{
const struct flash_parameters *param;
param = flash_get_parameters(device_get_binding(fa->fa_dev_name));
return param->erase_value;
}
#if defined(CONFIG_FLASH_AREA_CHECK_INTEGRITY) #if defined(CONFIG_FLASH_AREA_CHECK_INTEGRITY)
int flash_area_check_int_sha256(const struct flash_area *fa, int flash_area_check_int_sha256(const struct flash_area *fa,
const struct flash_area_check *fac) const struct flash_area_check *fac)

View file

@ -158,9 +158,28 @@ void test_flash_area_check_int_sha256(void)
flash_area_close(fa); flash_area_close(fa);
} }
void test_flash_area_erased_val(void)
{
const struct flash_parameters *param;
const struct flash_area *fa;
uint8_t val;
int rc;
rc = flash_area_open(FLASH_AREA_ID(image_1), &fa);
zassert_true(rc == 0, "flash_area_open() fail");
val = flash_area_erased_val(fa);
param = flash_get_parameters(device_get_binding(fa->fa_dev_name));
zassert_equal(param->erase_value, val,
"value different than the flash erase value");
}
void test_main(void) void test_main(void)
{ {
ztest_test_suite(test_flash_map, ztest_test_suite(test_flash_map,
ztest_unit_test(test_flash_area_erased_val),
ztest_unit_test(test_flash_area_get_sectors), ztest_unit_test(test_flash_area_get_sectors),
ztest_unit_test(test_flash_area_check_int_sha256) ztest_unit_test(test_flash_area_check_int_sha256)
); );