From b08a793fb6e6167d635bfbd31605a43db1f5ac5d Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 2 Jul 2020 15:24:01 -0700 Subject: [PATCH] altos: Make AO_STORAGE_TEST use a separate buffer The storage test code needs a buffer which can hold an entire erase block from memory, which means 256 bytes. Signed-off-by: Keith Packard --- src/kernel/ao_storage.c | 47 ++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/src/kernel/ao_storage.c b/src/kernel/ao_storage.c index b649e818..ca5fcb46 100644 --- a/src/kernel/ao_storage.c +++ b/src/kernel/ao_storage.c @@ -214,6 +214,9 @@ ao_storage_zapall(void) #if AO_STORAGE_TEST +#define AO_STORAGE_TEST_SIZE 256 +static uint8_t storage_test[AO_STORAGE_TEST_SIZE]; + static void ao_storage_failure(uint32_t pos, char *format, ...) { @@ -230,16 +233,16 @@ ao_storage_check_block(uint32_t pos, uint8_t value) uint32_t offset; uint32_t byte; - for (offset = 0; offset < ao_storage_block; offset += sizeof (storage_data)) { - if (!ao_storage_read(pos + offset, storage_data, sizeof (storage_data))) { + for (offset = 0; offset < ao_storage_block; offset += sizeof (storage_test)) { + if (!ao_storage_read(pos + offset, storage_test, sizeof (storage_test))) { ao_storage_failure(pos + offset, "read failed\n"); return 0; } - for (byte = 0; byte < sizeof (storage_data); byte++) - if (storage_data[byte] != value) { + for (byte = 0; byte < sizeof (storage_test); byte++) + if (storage_test[byte] != value) { ao_storage_failure(pos + offset + byte, "want %02x got %02x\n", - value, storage_data[byte]); + value, storage_test[byte]); return 0; } } @@ -252,10 +255,10 @@ ao_storage_fill_block(uint32_t pos, uint8_t value) uint32_t offset; uint32_t byte; - for (byte = 0; byte < sizeof (storage_data); byte++) - storage_data[byte] = value; - for (offset = 0; offset < ao_storage_block; offset += sizeof (storage_data)) { - if (!ao_storage_write(pos + offset, storage_data, sizeof (storage_data))) { + for (byte = 0; byte < sizeof (storage_test); byte++) + storage_test[byte] = value; + for (offset = 0; offset < ao_storage_block; offset += sizeof (storage_test)) { + if (!ao_storage_write(pos + offset, storage_test, sizeof (storage_test))) { ao_storage_failure(pos + offset, "write failed\n"); return 0; } @@ -269,17 +272,17 @@ ao_storage_check_incr_block(uint32_t pos) uint32_t offset; uint32_t byte; - for (offset = 0; offset < ao_storage_block; offset += sizeof (storage_data)) { - if (!ao_storage_read(pos + offset, storage_data, sizeof (storage_data))) { + for (offset = 0; offset < ao_storage_block; offset += sizeof (storage_test)) { + if (!ao_storage_read(pos + offset, storage_test, sizeof (storage_test))) { ao_storage_failure(pos + offset, "read failed\n"); return 0; } - for (byte = 0; byte < sizeof (storage_data); byte++) { + for (byte = 0; byte < sizeof (storage_test); byte++) { uint8_t value = offset + byte; - if (storage_data[byte] != value) { + if (storage_test[byte] != value) { ao_storage_failure(pos + offset + byte, "want %02x got %02x\n", - value, storage_data[byte]); + value, storage_test[byte]); return 0; } } @@ -293,10 +296,10 @@ ao_storage_fill_incr_block(uint32_t pos) uint32_t offset; uint32_t byte; - for (offset = 0; offset < ao_storage_block; offset += sizeof (storage_data)) { - for (byte = 0; byte < sizeof (storage_data); byte++) - storage_data[byte] = offset + byte; - if (!ao_storage_write(pos + offset, storage_data, sizeof (storage_data))) { + for (offset = 0; offset < ao_storage_block; offset += sizeof (storage_test)) { + for (byte = 0; byte < sizeof (storage_test); byte++) + storage_test[byte] = offset + byte; + if (!ao_storage_write(pos + offset, storage_test, sizeof (storage_test))) { ao_storage_failure(pos + offset, "write failed\n"); return 0; } @@ -369,13 +372,13 @@ ao_storage_fill(void) return; printf("erase "); flush(); ao_storage_erase(0, ao_storage_log_max); - for (pos = 0; pos < sizeof (storage_data); pos++) - storage_data[pos] = (uint8_t) pos; - for (pos = 0; pos < ao_storage_log_max; pos += sizeof (storage_data)) { + for (pos = 0; pos < sizeof (storage_test); pos++) + storage_test[pos] = (uint8_t) pos; + for (pos = 0; pos < ao_storage_log_max; pos += sizeof (storage_test)) { if ((pos & 0xffff) == 0) { printf("Fill 0x%x\n", pos); flush(); } - ao_storage_write(pos, storage_data, sizeof (storage_data)); + ao_storage_write(pos, storage_test, sizeof (storage_test)); } printf("Fill complete\n"); } -- 2.30.2