aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--firmware/zpu/usrp2p/spi_flash_read.c40
1 files changed, 14 insertions, 26 deletions
diff --git a/firmware/zpu/usrp2p/spi_flash_read.c b/firmware/zpu/usrp2p/spi_flash_read.c
index 36c326e96..75721b0f7 100644
--- a/firmware/zpu/usrp2p/spi_flash_read.c
+++ b/firmware/zpu/usrp2p/spi_flash_read.c
@@ -21,7 +21,8 @@
#include <stdlib.h> // abort
#include <nonstdio.h>
-static size_t _spi_flash_log2_memory_size;
+//FIXME cannot be zero or it gets optimized out and the get size functions break...
+#define UNINITIALIZED 0xdeadbeef
uint32_t
spi_flash_rdid(void)
@@ -32,42 +33,29 @@ spi_flash_rdid(void)
size_t
spi_flash_log2_sector_size(void)
{
- static size_t _spi_flash_log2_sector_size;
-
- if (_spi_flash_log2_sector_size != 0)
- return _spi_flash_log2_sector_size;
-
-
- uint32_t id = spi_flash_rdid();
- int type = (id >> 8) & 0xff;
- int size = id & 0xff;
- if (type != 0x20 || size < 22 || size > 24)
- abort();
-
static unsigned char log2_sector_size[3] = {
- 16, /* M25P32 */
+ 16, /* M25P32 */
16, /* M25P64 */
18, /* M25P128 */
};
-
- _spi_flash_log2_sector_size = log2_sector_size[size - 22];
- _spi_flash_log2_memory_size = size; //while we're at it
- return _spi_flash_log2_sector_size;
+ return log2_sector_size[spi_flash_log2_memory_size() - 22];
}
size_t
spi_flash_log2_memory_size(void)
{
- if (_spi_flash_log2_memory_size != 0)
- return _spi_flash_log2_memory_size;
+ static size_t _spi_flash_log2_memory_size = UNINITIALIZED;
+
+ if (_spi_flash_log2_memory_size == UNINITIALIZED){
+ uint32_t id = spi_flash_rdid();
+ uint8_t type = (id >> 8) & 0xff;
+ uint8_t size = (id >> 0) & 0xff;
+ if (type != 0x20 || size < 22 || size > 24)
+ abort();
- uint32_t id = spi_flash_rdid();
- int type = (id >> 8) & 0xff;
- int size = id & 0xff;
- if (type != 0x20 || size < 22 || size > 24)
- abort();
+ _spi_flash_log2_memory_size = size;
+ }
- _spi_flash_log2_memory_size = size;
return _spi_flash_log2_memory_size;
}