summaryrefslogtreecommitdiff
path: root/firmware/src/dfu/flash.c
blob: 2aaf760d8a4c7e19e263235859e98c05a1613231 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45


#define EFCS_CMD_WRITE_PAGE		0x01
#define EFCS_CMD_SET_LOCK_BIT		0x02
#define EFCS_CMD_WRITE_PAGE_LOCK	0x03
#define EFCS_CMD_CLEAR_LOCK		0x04
#define EFCS_CMD_ERASE_ALL		0x08
#define EFCS_CMD_SET_NVM_BIT		0x0b
#define EFCS_CMD_CLEAR_NVM_BIT		0x0d
#define EFCS_CMD_SET_SECURITY_BIT	0x0f


int unlock_page(u_int16_t page)
{
	AT91C_MC_FCMD_UNLOCK | AT91C_MC_CORRECT_KEY | 

}

int flash_sector(unsigned int sector, const u_int8_t *data, unsigned int len)
{
	volatile u_int32_t *p = (volatile u_int32_t *)0;
	u_int32_t *src32 = (u_int32_t *)data;
	int i;

	/* hand-code memcpy because we need to make sure only 32bit accesses
	 * are used */
	for (i = 0; i < len/4; i++)
		p[i] = src32[i];

	AT91F_MC_EFC_PerformCmd(pmc , AT91C_MC_FCMD_START_PROG|
				AT91C_MC_CORRECT_KEY | );
}


void flash_init(void)
{
	unsigned int fmcn = AT91F_MC_EFC_ComputerFMCN(48000000);

	AT91F_MC_EFC_CfgModeReg(ff, fmcn << 16 | AT91C_MC_FWS_3FWS |
				AT91C_MC_FRDY | AT91C_MC_LOCKE | 
				AT91C_MC_PROGE);

	AT91F_AIC_EnableIt();

}
personal git repositories of Harald Welte. Your mileage may vary