Bläddra i källkod

fw: make ROM offset a defined constant; support test-only image

For a test-only image, tp will not be set, and as all CPU registers
are initialized to 0 when the FPGA is loaded, it should be zero; in
that case set it to the normal ROM base offset.
H. Peter Anvin 3 år sedan
förälder
incheckning
c9f5f1a433
4 ändrade filer med 16 tillägg och 5 borttagningar
  1. 2 2
      fw/boot.mif
  2. 1 1
      fw/main.c
  3. 3 0
      fw/sys.h
  4. 10 2
      fw/test/main.c

+ 2 - 2
fw/boot.mif

@@ -5204,8 +5204,8 @@ CONTENT BEGIN
 144D : 20313320;
 144E : 31323032;
 144F : 3A353120;
-1450 : 333A3034;
-1451 : 000A0A37;
+1450 : 343A3334;
+1451 : 000A0A38;
 1452 : 3A435452;
 1453 : 43324920;
 1454 : 41445320;

+ 1 - 1
fw/main.c

@@ -41,7 +41,7 @@ IRQHANDLER(romcopy)
     case 0:
 	/* Copy testdata */
 	ROMCOPY_RAMADDR = (size_t)__dram_init_start;
-	ROMCOPY_ROMADDR = 0x100000;
+	ROMCOPY_ROMADDR = ROM_OFFSET;
 	ROMCOPY_DATALEN = (size_t)__dram_init_len;
 	break;
     case 1:

+ 3 - 0
fw/sys.h

@@ -23,4 +23,7 @@
 #define SDRAM_MASK      (SDRAM_SIZE - 1)
 #define SDRAM_END       (SDRAM_ADDR + SDRAM_SIZE)
 
+/* Starting offset in flash for non-FPGA use */
+#define ROM_OFFSET	0x100000
+
 #endif /* SYS_H */

+ 10 - 2
fw/test/main.c

@@ -217,14 +217,22 @@ IRQHANDLER(romcopy)
 {
     size_t rombase;
 
-    /* The handover code from the normal startup will set tp to our ROM area */
+    /*
+     * The handover code from the normal startup will set tp to
+     * our ROM area, not including the SRAM image.
+     */
     asm("mv %0,tp" : "=r" (rombase));
 
+    if (rombase) {
+	/* Test-only ROM image? */
+	rombase = ROM_OFFSET;
+    }
+
     switch (romcopy_state++) {
     case 0:
 	/* Copy testdata */
 	ROMCOPY_RAMADDR = (size_t)__dram_init_start;
-	ROMCOPY_ROMADDR = rombase + SRAM_SIZE;
+	ROMCOPY_ROMADDR = rombase;
 	ROMCOPY_DATALEN = (size_t)__dram_init_len;
 	break;
     case 1: