Skip to content

Commit 4af2c9d

Browse files
author
David Saada
committed
Support erasing of more than one erase unit in the exhaustible block device
1 parent 24cebba commit 4af2c9d

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

features/filesystem/bd/ExhaustibleBlockDevice.cpp

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ int ExhaustibleBlockDevice::program(const void *buffer, bd_addr_t addr, bd_size_
6868
MBED_ASSERT(is_valid_program(addr, size));
6969

7070
if (_erase_array[addr / get_erase_size()] == 0) {
71-
// TODO possibly something more destructive here
7271
return 0;
7372
}
7473

@@ -79,17 +78,25 @@ int ExhaustibleBlockDevice::erase(bd_addr_t addr, bd_size_t size)
7978
{
8079
MBED_ASSERT(is_valid_erase(addr, size));
8180

82-
// use an erase cycle
83-
if (_erase_array[addr / get_erase_size()] > 0) {
84-
_erase_array[addr / get_erase_size()] -= 1;
85-
}
81+
bd_size_t eu_size = get_erase_size();
82+
while (size) {
83+
// use an erase cycle
84+
if (_erase_array[addr / eu_size] > 0) {
85+
_erase_array[addr / eu_size] -= 1;
86+
}
8687

87-
if (_erase_array[addr / get_erase_size()] == 0) {
88-
// TODO possibly something more destructive here
89-
return 0;
88+
if (_erase_array[addr / eu_size] > 0) {
89+
int err = _bd->erase(addr, eu_size);
90+
if (err) {
91+
return err;
92+
}
93+
}
94+
95+
addr += eu_size;
96+
size -= eu_size;
9097
}
9198

92-
return _bd->erase(addr, size);
99+
return 0;
93100
}
94101

95102
bd_size_t ExhaustibleBlockDevice::get_read_size() const

0 commit comments

Comments
 (0)