PERFORCE change 96632 for review
Warner Losh
imp at FreeBSD.org
Wed May 3 23:16:47 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=96632
Change 96632 by imp at imp_hammer on 2006/05/03 23:16:16
We need to read the pages from the flash one page at a time.
Now FPGA loads on reset *AND* power cycles
Affected files ...
.. //depot/projects/arm/src/sys/boot/arm/at91/bootspi/loader_prompt.c#5 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/fpga.c#3 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/fpga.h#3 edit
Differences ...
==== //depot/projects/arm/src/sys/boot/arm/at91/bootspi/loader_prompt.c#5 (text+ko) ====
@@ -87,11 +87,15 @@
void
fpga_load(void)
{
- int len;
+ int len, off, i, offset;
char *addr = (char *)SDRAM_BASE + (1 << 20); /* Load to base + 1MB */
len = 212608;
- SPI_ReadFlash(15 * FLASH_PAGE_SIZE, addr, len);
+ offset = 15 * FLASH_PAGE_SIZE;
+ for (i = 0; i < len; i+= FLASH_PAGE_SIZE) {
+ off = i + offset;
+ SPI_ReadFlash(off, addr + i, FLASH_PAGE_SIZE);
+ }
printf("Loading %u bytes into the FPGA...\r\n", len);
fpga_init(&main_fpga);
fpga_clear(&main_fpga);
@@ -210,11 +214,9 @@
printf("\r\nDownloaded %u bytes.\r\n", len);
p_memcpy(addr3, addr, (len + FLASH_PAGE_SIZE - 1) /
FLASH_PAGE_SIZE * FLASH_PAGE_SIZE);
- printf("Writing %u bytes to flash at %u\r\n", len, offset);
for (i = 0; i < len; i+= FLASH_PAGE_SIZE) {
for (j = 0; j < 10; j++) {
- off = i + offset * FLASH_PAGE_SIZE;
- printf("%u/%u\r", off, len + offset);
+ off = i + offset;
SPI_WriteFlash(off, addr + i, FLASH_PAGE_SIZE);
SPI_ReadFlash(off, addr2 + i, FLASH_PAGE_SIZE);
if (p_memcmp(addr3 + i, addr2 + i, FLASH_PAGE_SIZE) == 0)
@@ -403,7 +405,7 @@
case COMMAND_REPLACE_FPGA_VIA_XMODEM:
printf("Updating FPGA image\r\n");
- UpdateFlash(15);
+ UpdateFlash(15 * FLASH_PAGE_SIZE);
break;
case COMMAND_REPLACE_FLASH_VIA_XMODEM:
printf("Updating FLASH image\r\n");
==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/fpga.c#3 (text+ko) ====
@@ -52,7 +52,7 @@
fpga->fpga_prog_n_pio->PIO_CODR = fpga->fpga_prog_n_mask;
Delay(1);
fpga->fpga_prog_n_pio->PIO_SODR = fpga->fpga_prog_n_mask;
- Delay(2000);
+ Delay(4000);
}
void
==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/fpga.h#3 (text+ko) ====
More information about the p4-projects
mailing list