summaryrefslogtreecommitdiff
path: root/fw/fe310/eos/dev/flash.c
diff options
context:
space:
mode:
Diffstat (limited to 'fw/fe310/eos/dev/flash.c')
-rw-r--r--fw/fe310/eos/dev/flash.c37
1 files changed, 26 insertions, 11 deletions
diff --git a/fw/fe310/eos/dev/flash.c b/fw/fe310/eos/dev/flash.c
index c8f4c98..15811a2 100644
--- a/fw/fe310/eos/dev/flash.c
+++ b/fw/fe310/eos/dev/flash.c
@@ -9,6 +9,21 @@
#include "flash.h"
+#define FLASH_RDSR 0x05
+
+#define FLASH_NORD 0x03
+#define FLASH_FRD 0x0b
+
+#define FLASH_WREN 0x06
+#define FLASH_SER 0x20
+#define FLASH_PP 0x02
+
+#define FLASH_QPIEN 0x35
+#define FLASH_QPIDI 0xF5
+
+#define FLASH_WIP 0x01
+#define FLASH_WEL 0x02
+
#define IDLE_TICKS 10
__attribute__ ((section (".itim.flash")))
@@ -42,7 +57,7 @@ void eos_flash_norm(void) {
SPI0_REG(SPI_REG_SCKDIV) = 3;
if (SPI0_REG(SPI_REG_FMT) & SPI_FMT_PROTO(SPI_PROTO_Q)) {
- send(EOS_FLASH_QPIDI);
+ send(FLASH_QPIDI);
while (!(SPI0_REG(SPI_REG_IP) & SPI_IP_TXWM));
}
@@ -59,7 +74,7 @@ void eos_flash_norm(void) {
SPI_INSN_CMD_PROTO(SPI_PROTO_S) |
SPI_INSN_ADDR_PROTO(SPI_PROTO_S) |
SPI_INSN_DATA_PROTO(SPI_PROTO_S) |
- SPI_INSN_CMD_CODE(EOS_FLASH_NORD) |
+ SPI_INSN_CMD_CODE(FLASH_NORD) |
SPI_INSN_PAD_CODE(0x00);
mtime0 = *mtime;
@@ -79,7 +94,7 @@ void eos_flash_fast(void) {
SPI0_REG(SPI_REG_SCKDIV) = 2;
if (!(SPI0_REG(SPI_REG_FMT) & SPI_FMT_PROTO(SPI_PROTO_Q))) {
- send(EOS_FLASH_QPIEN);
+ send(FLASH_QPIEN);
while (!(SPI0_REG(SPI_REG_IP) & SPI_IP_TXWM));
}
@@ -96,7 +111,7 @@ void eos_flash_fast(void) {
SPI_INSN_CMD_PROTO(SPI_PROTO_Q) |
SPI_INSN_ADDR_PROTO(SPI_PROTO_Q) |
SPI_INSN_DATA_PROTO(SPI_PROTO_Q) |
- SPI_INSN_CMD_CODE(EOS_FLASH_FRD) |
+ SPI_INSN_CMD_CODE(FLASH_FRD) |
SPI_INSN_PAD_CODE(0x00);
mtime0 = *mtime;
@@ -112,31 +127,31 @@ void eos_flash_wip(void) {
do {
SPI0_REG(SPI_REG_CSMODE) = SPI_CSMODE_HOLD;
- xfer(EOS_FLASH_RDSR);
+ xfer(FLASH_RDSR);
status = xfer(0);
SPI0_REG(SPI_REG_CSMODE) = SPI_CSMODE_AUTO;
- } while (status & EOS_FLASH_WIP);
+ } while (status & FLASH_WIP);
}
__attribute__ ((section (".itim.flash")))
void eos_flash_wren(void) {
uint8_t status;
- xfer(EOS_FLASH_WREN);
+ xfer(FLASH_WREN);
#if 0
do {
SPI0_REG(SPI_REG_CSMODE) = SPI_CSMODE_HOLD;
- xfer(EOS_FLASH_RDSR);
+ xfer(FLASH_RDSR);
status = xfer(0);
SPI0_REG(SPI_REG_CSMODE) = SPI_CSMODE_AUTO;
- } while (!(status & EOS_FLASH_WEL));
+ } while (!(status & FLASH_WEL));
#endif
}
__attribute__ ((section (".itim.flash")))
void eos_flash_ser(uint32_t addr) {
SPI0_REG(SPI_REG_CSMODE) = SPI_CSMODE_HOLD;
- xfer(EOS_FLASH_SER);
+ xfer(FLASH_SER);
xfer(addr >> 16);
xfer(addr >> 8);
xfer(addr);
@@ -149,7 +164,7 @@ void eos_flash_pp(uint32_t addr, uint8_t *buf) {
SPI0_REG(SPI_REG_FMT) |= SPI_FMT_DIR(SPI_DIR_TX);
SPI0_REG(SPI_REG_CSMODE) = SPI_CSMODE_HOLD;
- send(EOS_FLASH_PP);
+ send(FLASH_PP);
send(addr >> 16);
send(addr >> 8);
send(addr);