aboutsummaryrefslogtreecommitdiffstats
path: root/firmware/microblaze/usrp2p/spi_flash_read.c
diff options
context:
space:
mode:
authorNick Foster <nick@nerdnetworks.org>2010-08-17 18:35:11 -0700
committerNick Foster <nick@nerdnetworks.org>2010-08-17 18:35:11 -0700
commit9d10efa5f0f81e1a971e92b28ba7f38e0384fdab (patch)
tree7b797016a4da8625dabc41c9bcc9ee0216092507 /firmware/microblaze/usrp2p/spi_flash_read.c
parent40faee2e6d87f7364a0c0c2cf310f1483c0331cf (diff)
downloaduhd-9d10efa5f0f81e1a971e92b28ba7f38e0384fdab.tar.gz
uhd-9d10efa5f0f81e1a971e92b28ba7f38e0384fdab.tar.bz2
uhd-9d10efa5f0f81e1a971e92b28ba7f38e0384fdab.zip
UDP firmware update support for USRP2P.
The hooks are in there for USRP2, but without CPLD changes it won't support it. Added an app host/utils/usrp2p_fw_update.py to write to USRP2P over the wire. Lots of TODOs in that file. Caveat -- fw_common.h, bootloader_utils.h, and the .py app MUST ALL AGREE!
Diffstat (limited to 'firmware/microblaze/usrp2p/spi_flash_read.c')
-rw-r--r--firmware/microblaze/usrp2p/spi_flash_read.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/firmware/microblaze/usrp2p/spi_flash_read.c b/firmware/microblaze/usrp2p/spi_flash_read.c
index 1c65350f7..4682c5fe6 100644
--- a/firmware/microblaze/usrp2p/spi_flash_read.c
+++ b/firmware/microblaze/usrp2p/spi_flash_read.c
@@ -20,6 +20,8 @@
#include "spi_flash_private.h"
#include <stdlib.h> // abort
+static size_t _spi_flash_log2_memory_size;
+
uint32_t
spi_flash_rdid(void)
{
@@ -48,9 +50,26 @@ spi_flash_log2_sector_size(void)
};
_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;
}
+size_t
+spi_flash_log2_memory_size(void)
+{
+ if (_spi_flash_log2_memory_size != 0)
+ return _spi_flash_log2_memory_size;
+
+ 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;
+ return _spi_flash_log2_memory_size;
+}
+
void
spi_flash_read(uint32_t flash_addr, size_t nbytes, void *buf)
{