Parcourir la source

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 il y a 3 ans
Parent
commit
0855fd5684
10 fichiers modifiés avec 5684 ajouts et 5675 suppressions
  1. BIN
      fpga/output_files/max80.jbc
  2. BIN
      fpga/output_files/max80.jic
  3. BIN
      fpga/output_files/max80.pof
  4. BIN
      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

BIN
fpga/output_files/max80.jbc


BIN
fpga/output_files/max80.jic


BIN
fpga/output_files/max80.pof


BIN
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)
 

Fichier diff supprimé car celui-ci est trop grand
+ 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;
-}

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff