|
@@ -14,7 +14,7 @@ enum romcmd {
|
|
|
ROM_JEDEC_ID = 0x9f,
|
|
|
ROM_READ_UNIQUE_ID = 0x4b,
|
|
|
ROM_READ_DATA = 0x03, /* DO NOT USE */
|
|
|
- ROM_FAST_READ = 0x0b, /* Only for non-DMA */
|
|
|
+ ROM_FAST_READ = 0x0b,
|
|
|
ROM_PAGE_PROGRAM = 0x02,
|
|
|
ROM_ERASE_4K = 0x20,
|
|
|
ROM_ERASE_32K = 0x52,
|
|
@@ -45,20 +45,30 @@ enum romcmd {
|
|
|
|
|
|
size_t __sbss romcopy_log[15];
|
|
|
|
|
|
+#define SPIROM_DUAL_MODE 0
|
|
|
+
|
|
|
void __hot romcopy_download(void *dst, size_t offset, size_t len)
|
|
|
{
|
|
|
+ unsigned int cmd;
|
|
|
+ unsigned int flags = ROMCOPY_SPI_CMDLEN(5) | ROMCOPY_WRITE_RAM;
|
|
|
+
|
|
|
+ if (SPIROM_DUAL_MODE) {
|
|
|
+ cmd = ROM_FAST_READ_DUAL;
|
|
|
+ flags |= ROMCOPY_SPI_DUAL;
|
|
|
+ } else {
|
|
|
+ cmd = ROM_FAST_READ;
|
|
|
+ }
|
|
|
+
|
|
|
ROMCOPY_RAMADDR = (size_t)dst;
|
|
|
- ROMCOPY_ROMCMD = __rom_offset + offset + (ROM_FAST_READ_DUAL << 24);
|
|
|
- ROMCOPY_DATALEN =
|
|
|
- len | ROMCOPY_SPI_CMDLEN(5) | /*ROMCOPY_SPI_DUAL |*/ ROMCOPY_WRITE_RAM;
|
|
|
+ ROMCOPY_ROMCMD = __rom_offset + offset + (cmd << 24);
|
|
|
+ ROMCOPY_DATALEN = len | flags;
|
|
|
}
|
|
|
|
|
|
void __hot romcopy_bzero(void *dst, size_t len)
|
|
|
{
|
|
|
ROMCOPY_RAMADDR = (size_t)dst;
|
|
|
ROMCOPY_ROMCMD = 0;
|
|
|
- ROMCOPY_DATALEN =
|
|
|
- len | ROMCOPY_ZERO_BUFFER | ROMCOPY_WRITE_RAM;
|
|
|
+ ROMCOPY_DATALEN = len | ROMCOPY_ZERO_BUFFER | ROMCOPY_WRITE_RAM;
|
|
|
}
|
|
|
|
|
|
uint32_t __sbss romcopy_time[2];
|