PERFORCE change 97903 for review
Warner Losh
imp at FreeBSD.org
Fri May 26 12:59:55 PDT 2006
http://perforce.freebsd.org/chv.cgi?CH=97903
Change 97903 by imp at imp_lighthouse on 2006/05/26 19:57:51
Comment out the SD good for the moment. It's just a little too big
to have it, xmodem and tftp in the 12k, alas. I need to get more
clever if I'm to work this out.
Add support for loading a kernel into spi and loading it to a
specified location. Cheap, but ugly :-(
Affected files ...
.. //depot/projects/arm/src/sys/boot/arm/at91/Makefile#8 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/bootspi/Makefile#10 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/bootspi/loader_prompt.c#10 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/bootspi/loader_prompt.h#6 edit
Differences ...
==== //depot/projects/arm/src/sys/boot/arm/at91/Makefile#8 (text+ko) ====
==== //depot/projects/arm/src/sys/boot/arm/at91/bootspi/Makefile#10 (text+ko) ====
@@ -2,19 +2,14 @@
P=bootspi
FILES=${P}
-SRCS=arm_init.S main.c loader_prompt.c env_vars.c ints.c \
- mci_device.c sd-card.c stormy16-lib2.c
+SRCS=arm_init.S main.c loader_prompt.c env_vars.c \
+#SRCS+=ints.c mci_device.c sd-card.c stormy16-lib2.c
NO_MAN=
LDFLAGS=-e 0 -T ${.CURDIR}/../linker.cfg
OBJS+= ${SRCS:N*.h:R:S/$/.o/g}
.include <bsd.prog.mk>
-.if ${MK_TAG_LIST} != "no"
-CFLAGS += -I${.CURDIR}/.. -DSUPPORT_TAG_LIST
-SRCS+=tag_list.c
-.endif
-
.if ${MK_FPGA} != "no"
CFLAGS += -DTSC_FPGA
.endif
==== //depot/projects/arm/src/sys/boot/arm/at91/bootspi/loader_prompt.c#10 (text+ko) ====
@@ -43,6 +43,11 @@
// argv pointer are either NULL or point to locations in inputBuffer
static char *argv[MAX_COMMAND_PARAMS];
+#define FLASH_OFFSET (0 * FLASH_PAGE_SIZE)
+#define FPGA_OFFSET (15 * FLASH_PAGE_SIZE)
+#define FPGA_LEN (212608)
+#define KERNEL_OFFSET (220 * FLASH_PAGE_SIZE)
+#define KERNEL_LEN (3 * 1024 * FLASH_PAGE_SIZE)
static const char *backspaceString = "\010 \010";
static const command_entry_t CommandTable[] = {
@@ -56,6 +61,8 @@
{COMMAND_WRITE, "w"},
{COMMAND_XMODEM, "x"},
{COMMAND_RESET, "R"},
+ {COMMAND_LOAD_SPI_KERNEL, "k"},
+ {COMMAND_REPLACE_KERNEL_VIA_XMODEM, "K"},
{COMMAND_REPLACE_FLASH_VIA_XMODEM, "I"},
{COMMAND_REPLACE_FPGA_VIA_XMODEM, "F"},
{COMMAND_FINAL_FLAG, 0}
@@ -78,8 +85,8 @@
int len, off, i, offset;
char *addr = (char *)SDRAM_BASE + (1 << 20); /* Load to base + 1MB */
- len = 212608;
- offset = 15 * FLASH_PAGE_SIZE;
+ len = FPGA_LEN;
+ offset = FPGA_OFFSET;
for (i = 0; i < len; i+= FLASH_PAGE_SIZE) {
off = i + offset;
SPI_ReadFlash(off, addr + i, FLASH_PAGE_SIZE);
@@ -203,6 +210,17 @@
}
}
+static void
+LoadKernelFromSpi(char *addr)
+{
+ int i, off;
+
+ for (i = 0; i < KERNEL_LEN; i+= FLASH_PAGE_SIZE) {
+ off = i + KERNEL_OFFSET;
+ SPI_ReadFlash(off, addr + i, FLASH_PAGE_SIZE);
+ }
+}
+
/*
* .KB_C_FN_DEFINITION_START
* void ParseCommand(char *)
@@ -302,6 +320,12 @@
WriteCommandTable();
break;
+ case COMMAND_LOAD_SPI_KERNEL:
+ // "k <address>"
+ if (argc > 1)
+ LoadKernelFromSpi((char *)p_ASCIIToHex(argv[1]));
+ break;
+
case COMMAND_XMODEM:
// "x <address>"
// download X-modem record at address
@@ -315,13 +339,17 @@
while (1) continue;
break;
+ case COMMAND_REPLACE_KERNEL_VIA_XMODEM:
+ printf("Updating KERNEL image\r\n");
+ UpdateFlash(KERNEL_OFFSET);
+ break;
case COMMAND_REPLACE_FPGA_VIA_XMODEM:
printf("Updating FPGA image\r\n");
- UpdateFlash(15 * FLASH_PAGE_SIZE);
+ UpdateFlash(FPGA_OFFSET);
break;
case COMMAND_REPLACE_FLASH_VIA_XMODEM:
printf("Updating FLASH image\r\n");
- UpdateFlash(0);
+ UpdateFlash(FLASH_OFFSET);
break;
default:
break;
==== //depot/projects/arm/src/sys/boot/arm/at91/bootspi/loader_prompt.h#6 (text+ko) ====
@@ -41,6 +41,8 @@
COMMAND_WRITE,
COMMAND_XMODEM,
COMMAND_RESET,
+ COMMAND_LOAD_SPI_KERNEL,
+ COMMAND_REPLACE_KERNEL_VIA_XMODEM,
COMMAND_REPLACE_FLASH_VIA_XMODEM,
COMMAND_REPLACE_FPGA_VIA_XMODEM,
COMMAND_FINAL_FLAG
More information about the p4-projects
mailing list