Skip to content

Commit 1d9771f

Browse files
committedApr 27, 2015
spiflash: use SoC defines, add write_to_flash function
1 parent 0b1a2e1 commit 1d9771f

File tree

3 files changed

+39
-18
lines changed

3 files changed

+39
-18
lines changed
 

Diff for: ‎software/include/base/spiflash.h

+1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33

44
void write_to_flash_page(unsigned int addr, unsigned char *c, unsigned int len);
55
void erase_flash_sector(unsigned int addr);
6+
void write_to_flash(unsigned int addr, unsigned char *c, unsigned int len);
67

78
#endif /* __SPIFLASH_H */

Diff for: ‎software/libbase/spiflash.c

+36-18
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,20 @@
11
#include <generated/csr.h>
22

3-
#include <spiflash.h>
3+
#if (defined CSR_SPIFLASH_BASE && defined SPIFLASH_PAGE_SIZE)
44

5-
#ifdef CSR_SPIFLASH_BASE
5+
#include <spiflash.h>
66

7-
#define PAGE_PROGRAM_CMD (0x02)
8-
#define WRDI_CMD (0x04)
9-
#define RDSR_CMD (0x05)
10-
#define WREN_CMD (0x06)
11-
#define SE_CMD (0x20)
7+
#define PAGE_PROGRAM_CMD (0x02)
8+
#define WRDI_CMD (0x04)
9+
#define RDSR_CMD (0x05)
10+
#define WREN_CMD (0x06)
11+
#define SE_CMD (0x20)
1212

13-
#define BITBANG_CLK (1 << 1)
13+
#define BITBANG_CLK (1 << 1)
1414
#define BITBANG_CS_N (1 << 2)
1515
#define BITBANG_DQ_INPUT (1 << 3)
1616

17-
#define SR_WIP (1)
18-
19-
#define PAGE_SIZE (256)
20-
#define PAGE_MASK (PAGE_SIZE - 1)
21-
#define SECTOR_SIZE (4096)
22-
#define SECTOR_MASK (SECTOR_SIZE - 1)
17+
#define SR_WIP (1)
2318

2419
static void flash_write_byte(unsigned char b);
2520
static void flash_write_addr(unsigned int addr);
@@ -76,7 +71,7 @@ static void wait_for_device_ready(void)
7671

7772
void erase_flash_sector(unsigned int addr)
7873
{
79-
unsigned int sector_addr = addr & ~(SECTOR_MASK);
74+
unsigned int sector_addr = addr & ~(SPIFLASH_SECTOR_SIZE - 1);
8075

8176
spiflash_bitbang_en_write(1);
8277

@@ -98,8 +93,8 @@ void write_to_flash_page(unsigned int addr, unsigned char *c, unsigned int len)
9893
{
9994
unsigned int i;
10095

101-
if(len > PAGE_SIZE)
102-
len = PAGE_SIZE;
96+
if(len > SPIFLASH_PAGE_SIZE)
97+
len = SPIFLASH_PAGE_SIZE;
10398

10499
spiflash_bitbang_en_write(1);
105100

@@ -120,4 +115,27 @@ void write_to_flash_page(unsigned int addr, unsigned char *c, unsigned int len)
120115
spiflash_bitbang_en_write(0);
121116
}
122117

123-
#endif
118+
#define SPIFLASH_PAGE_MASK (SPIFLASH_PAGE_SIZE - 1)
119+
120+
void write_to_flash(unsigned int addr, unsigned char *c, unsigned int len)
121+
{
122+
unsigned int written = 0;
123+
124+
if(addr & SPIFLASH_PAGE_MASK) {
125+
written = min(SPIFLASH_PAGE_SIZE - (addr & SPIFLASH_PAGE_MASK), len);
126+
write_to_flash_page(addr, c, written);
127+
c += written;
128+
addr += written;
129+
len -= written;
130+
}
131+
132+
while(len > 0) {
133+
written = min(len, SPIFLASH_PAGE_SIZE);
134+
write_to_flash_page(addr, c, written);
135+
c += written;
136+
addr += written;
137+
len -= written;
138+
}
139+
}
140+
141+
#endif /* CSR_SPIFLASH_BASE && SPIFLASH_PAGE_SIZE */

Diff for: ‎targets/kc705.py

+2
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ def __init__(self, platform, sdram_controller_settings=LASMIconSettings(), **kwa
9898
i_CLK=0, i_GSR=0, i_GTS=0, i_KEYCLEARB=0, i_PACK=0,
9999
i_USRCCLKO=spiflash_pads.clk, i_USRCCLKTS=0, i_USRDONEO=1, i_USRDONETS=1)
100100
self.submodules.spiflash = spiflash.SpiFlash(spiflash_pads, dummy=11, div=2)
101+
self.add_constant("SPIFLASH_PAGE_SIZE", 256)
102+
self.add_constant("SPIFLASH_SECTOR_SIZE", 0x10000)
101103
self.flash_boot_address = 0xb00000
102104
self.register_rom(self.spiflash.bus)
103105

0 commit comments

Comments
 (0)
Please sign in to comment.