瀏覽代碼

fw: move sdram downloader test data to assembly

Put the sdram downloader test data in an assembly file instead of
Perl. This slots much better into the new infrastructure (dram.hex)
but also appears to be 10-100x faster.
H. Peter Anvin 3 年之前
父節點
當前提交
0855fd5684
共有 10 個文件被更改,包括 5684 次插入5675 次删除
  1. 二進制
      fpga/output_files/max80.jbc
  2. 二進制
      fpga/output_files/max80.jic
  3. 二進制
      fpga/output_files/max80.pof
  4. 二進制
      fpga/output_files/max80.sof
  5. 4 9
      fw/Makefile
  6. 5650 5650
      fw/boot.mif
  7. 5 2
      fw/hello.c
  8. 11 3
      fw/max80.ld
  9. 14 0
      fw/testdata.S
  10. 0 11
      fw/testdata.pl

二進制
fpga/output_files/max80.jbc


二進制
fpga/output_files/max80.jic


二進制
fpga/output_files/max80.pof


二進制
fpga/output_files/max80.sof


+ 4 - 9
fw/Makefile

@@ -38,7 +38,7 @@ boot_stride := 1
 
 max80.elf: head.o die.o dummy.o irqtable.o irqasm.o sbrk.o hello.o \
 	  console.o sdcard.o rtc.o memset.o \
-	  abcdrive.o fatfs.a
+	  abcdrive.o testdata.o fatfs.a
 
 FATFS_C = $(wildcard fatfs/source/*.c)
 FATFS_O = $(FATFS_C:.c=.o)
@@ -63,6 +63,9 @@ boot.bin: max80.elf
 dram.bin: max80.elf
 	$(OBJCOPY) -O binary -j '.dram*' $< $@
 
+dram.hex: max80.elf
+	$(OBJCOPY) -O ihex -j '.dram*' $< $@
+
 %.elf: $(LDSCRIPT)
 	$(CC) $(LDFLAGS) -o $@ $(filter-out $(LDSCRIPT),$^)
 
@@ -93,14 +96,6 @@ iodevs.h: ../iodevs.conf ../tools/iodevs.pl
 irqtable.c: ../iodevs.conf ../tools/iodevs.pl
 	$(PERL) ../tools/iodevs.pl c $< $@
 
-testdata.bin: testdata.pl
-	$(PERL) $< > $@
-
-dram.hex: testdata.bin dram.bin
-	cat $^ > $@.bin
-	$(OBJCOPY) -I binary -O ihex $@.bin $@
-	rm -f $@.bin
-
 clean:
 	rm -f *.o *.i *.s *.elf *.bin .*.d *.ild $(genhdrs) $(gensrcs)
 

File diff suppressed because it is too large
+ 5650 - 5650
fw/boot.mif


+ 5 - 2
fw/hello.c

@@ -91,10 +91,13 @@ static void test_sdram(void)
 #endif
 }
 
+#define TESTDATA_WORDS (128*1024)
+extern uint32_t testdata[TESTDATA_WORDS];
+
 static void test_download(void)
 {
-    volatile uint32_t *p = (uint32_t *)SDRAM_ADDR;
-    const unsigned int words = 128*1024;
+    const unsigned int words = TESTDATA_WORDS;
+    volatile uint32_t *p = testdata;
     unsigned int ok = words;
     uint32_t val = 0x00001111;
     unsigned int ratelimit = ERROR_RATELIMIT;

+ 11 - 3
fw/max80.ld

@@ -145,11 +145,19 @@ SECTIONS
 
 	/* Sections in SDRAM */
 
-	.dram.data (NOLOAD) : {
-		. = . + 512*1024; /* testdata hack */
+	.dram.text : ALIGN(4) {
+		*(.dram.text*)
 	} >DRAM
 
-	.dram.bss (NOLOAD) : {
+	.dram.rodata : ALIGN(4) {
+		*(.dram.rodata*)
+	} >DRAM
+
+	.dram.data : ALIGN(4) {
+		*(.dram.data*)
+	} >DRAM
+
+	.dram.bss (NOLOAD) : ALIGN(4) {
 		*(.dram.bss*)
 	} >DRAM
 }

+ 14 - 0
fw/testdata.S

@@ -0,0 +1,14 @@
+	.section ".dram.rodata","a"
+	.globl testdata
+testdata:
+	x = 0x00001111
+	y = 0
+
+	.rept 0x20000
+	.long x
+	x = ((x * 0x89abcdef) + ((x * 0x89abcdef) >> 32) + (y * 0x76543210)) & 0xffffffff
+	y = y + 1
+	.endr
+
+	.type testdata,@object
+	.size testdata,. - testdata

+ 0 - 11
fw/testdata.pl

@@ -1,11 +0,0 @@
-#!/usr/bin/perl
-
-use bigint;
-use strict;
-
-my $x = 0x00001111;
-for (my $i = 0; $i < 128*1024; $i++) {
-    print pack("V", $x);
-    $x = (($x * 0x89abcdef) + (($x * 0x89abcdef) >> 32) + ($i * 0x76543210))
-	& 0xffffffff;
-}

Some files were not shown because too many files changed in this diff