svn commit: r238188 - head/sys/boot/arm/at91/boot0spi

Warner Losh imp at FreeBSD.org
Sat Jul 7 04:55:43 UTC 2012


Author: imp
Date: Sat Jul  7 04:55:42 2012
New Revision: 238188
URL: http://svn.freebsd.org/changeset/base/238188

Log:
  Generalize this for loading the loader into the SPI. Plus trim about
  100 bytes from the binary with silly tricks.  Hope to get this small
  enough to run on the models that have 4k SRAM.  We are close compiled
  for the at91rm9200, but still need to trim for the target.

Modified:
  head/sys/boot/arm/at91/boot0spi/main.c

Modified: head/sys/boot/arm/at91/boot0spi/main.c
==============================================================================
--- head/sys/boot/arm/at91/boot0spi/main.c	Sat Jul  7 04:51:59 2012	(r238187)
+++ head/sys/boot/arm/at91/boot0spi/main.c	Sat Jul  7 04:55:42 2012	(r238188)
@@ -29,31 +29,26 @@
 #include "at91rm9200_lowlevel.h"
 #include "spi_flash.h"
 
-#define LOADER_OFFSET 0
-#define FPGA_OFFSET  (15 * FLASH_PAGE_SIZE)
-#define OFFSET FPGA_OFFSET
+#define OFFSET 0
 
-int
+void
 main(void)
 {
 	int len, i, j, off, sec;
 	char *addr = (char *)SDRAM_BASE + (1 << 20); /* download at + 1MB */
 	char *addr2 = (char *)SDRAM_BASE + (2 << 20); /* readback to + 2MB */
-	char *addr3 = (char *)SDRAM_BASE + (3 << 20); /* extra copy at + 3MB */
 
 	SPI_InitFlash();
 	printf("Waiting for data\n");
 	while ((len = xmodem_rx(addr)) == -1)
 		continue;
-	// Need extra copy at addr3
-	memcpy(addr3, addr, (len + FLASH_PAGE_SIZE - 1) / FLASH_PAGE_SIZE * FLASH_PAGE_SIZE);
-	printf("Writing %u bytes to flash at %u\n", len, OFFSET);
+	printf("Writing %u bytes at %u\n", len, OFFSET);
 	for (i = 0; i < len; i+= FLASH_PAGE_SIZE) {
+		off = i + OFFSET;
 		for (j = 0; j < 10; j++) {
-			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)
+			if (p_memcmp(addr + i, addr2 + i, FLASH_PAGE_SIZE) == 0)
 				break;
 		}
 		if (j >= 10)
@@ -64,5 +59,4 @@ main(void)
 	    continue;
 	printf("Done\n");
 	reset();
-	return (1);
 }


More information about the svn-src-all mailing list