Flash fixes
authorlekernel <sebastien.bourdeauducq@lekernel.net>
Fri, 25 Jun 2010 14:59:40 +0000 (16:59 +0200)
committerlekernel <sebastien.bourdeauducq@lekernel.net>
Fri, 25 Jun 2010 14:59:40 +0000 (16:59 +0200)
README
boards/milkymist-one/flash/Makefile
boards/milkymist-one/flash/flash.cmd
boards/milkymist-one/rtl/system.v
software/bios/Makefile
software/bios/linker.ld
software/bios/main.c
software/demo/Makefile
software/include/hw/flash.h
software/libhpdmc/Makefile
software/libhpdmc/libhpdmc.S

diff --git a/README b/README
index a33506a..a9a29ea 100644 (file)
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-[> Milkymist(tm) system-on-chip
+[> Milkymist(tm) System-on-Chip
 -------------------------------
 
 This is the complete core source code and documentation for the opensource
@@ -13,7 +13,6 @@ For the latest releases, binary distributions and more:
  /boards/     Top-level design files, constraint files and Makefiles
               for supported FPGA boards.
  /software/   Software for the SoC.
- /std/        Definitions for Milkymist protocols and formats.
  /doc/        System documentation.
  /tools/      Small tools for developers.
  /patches/    Example patches.
@@ -26,6 +25,7 @@ You will need:
  - Xilinx ISE for synthesizing the FPGA bitstream (WebPack is enough),
  - LatticeMico32 toolchain for building the SoC software,
  - SRecord,
+ - xxd,
 For the host-side tools:
  - native Clang/LLVM toolchain,
  - libGD,
@@ -42,41 +42,17 @@ NB. Before switching synthesis tools, don't forget to run "make clean" in the
 synthesis directory.
 
 
-[> Scripts
-[>> Building
+[> Output files
  /boards/xxx/synthesis/build/system.bit build_bitstream.sh FPGA bitstream.
- /software/bios/bios_splash.bin         build_bios.sh      BIOS image.
+ /software/bios/bios.bin                build_bios.sh      BIOS image.
  /software/demo/boot.bin                build_demo.sh      Demonstration firmware image.
+ /boards/xxx/flash/yyy.mcs                                 Flash images.
  /doc/xxx.pdf                           build_doc.sh       System-wide documentation.
  /cores/xxx/doc/xxx.pdf                 build_doc.sh       Core-specific documentation.
 
-[>> Loading
- - load_bitstream.sh  : loads bitstream in volatile memory.
- - flash_bitstream.sh : loads bitstream in non-volatile memory.
- - flash_bios.sh      : loads BIOS into NOR flash (currently no way of storing it
-                        in volatile memory).
- - load_demo.sh       : runs a SFL server and terminal program that downloads the
-                        demo firmware at device boot.
-
-
-[> Quickstart
-1- connect serial and JTAG cables
-2- connect VGA monitor
-3- build & load:
-./build_bitstream.sh
-./build_bios.sh
-./build_demo.sh
-./flash_bios.sh
-./load_demo.sh # will stay attached to display system debug messages
-./load_bitstream.sh # from another terminal
-
-# if you like it
-./flash_bitstream.sh
-cp software/demo/image.bin /memory_card/
-
 
 [> Development
-For Verilog simulations, the scripts (usually Makefiles) shipped with the test benches 
+For Verilog simulations, the scripts (usually Makefiles) shipped with the test benches
 take care of running the simulator.
 
 Depending on the IP core, one or more of these free simulators are supported:
index 3186966..d5b8216 100644 (file)
@@ -6,10 +6,10 @@ bitstream.mcs:
 
 bios.mcs:
        make -C ../../../software/bios
-       promgen -w -p mcs -o bios.mcs -s 32768 -b -data_file up 0x000C0000 ../../../software/bios/bios.bin -bpi_dc parallel -data_width 16
+       srec_cat -Output bios.mcs -Intel ../../../software/bios/bios.bin -Binary -offset 0x00180000
 
 splash.mcs: splash.raw
-       promgen -w -p mcs -o splash.mcs -s 32768 -b -data_file up 0x000D0000 splash.raw -bpi_dc parallel -data_width 16
+       srec_cat -Output splash.mcs -Intel splash.raw -Binary -offset 0x001C0000
 
 splash.raw: splash.png
        $(MMDIR)/tools/makeraw splash.png
@@ -23,7 +23,7 @@ flash: all
 clean:
        rm -rf impact_sucks
        rm -f bitstream.mcs bitstream.prm bitstream.cfi
-       rm -f bios.mcs bios.prm bios.cfi
-       rm -f splash.raw splash.mcs splash.prm splash.cfi
+       rm -f bios.mcs
+       rm -f splash.raw splash.mcs
 
 .PHONY: flash clean
index e07aa7b..011a576 100644 (file)
@@ -6,7 +6,7 @@ attachflash -position 1 -bpi "28F256J3F"
 assignfiletoattachedflash -position 1 -file "../bitstream.mcs"
 program -p 1 -dataWidth 16 -rs1 NONE -rs0 NONE -bpionly -e
 assignfiletoattachedflash -position 1 -file "../bios.mcs"
-program -p 1 -dataWidth 16 -rs1 NONE -rs0 NONE -bpionly
+program -p 1 -dataWidth 16 -rs1 NONE -rs0 NONE -bpionly -e
 assignfiletoattachedflash -position 1 -file "../splash.mcs"
-program -p 1 -dataWidth 16 -rs1 NONE -rs0 NONE -bpionly
+program -p 1 -dataWidth 16 -rs1 NONE -rs0 NONE -bpionly -e
 quit
index 3ba41fd..bad097f 100644 (file)
@@ -196,13 +196,14 @@ assign sys_clk = clkin;
 assign sys_clk_n = ~clkin;
 `endif
 
-/* Debounce it and generate power-on reset. */
+reg trigger_reset;
+always @(posedge sys_clk) trigger_reset <= hard_reset|reset_button;
 reg [19:0] rst_debounce;
 reg sys_rst;
 initial rst_debounce <= 20'hFFFFF;
 initial sys_rst <= 1'b1;
 always @(posedge sys_clk) begin
-       if(hard_reset|reset_button)
+       if(trigger_reset)
                rst_debounce <= 20'hFFFFF;
        else if(rst_debounce != 20'd0)
                rst_debounce <= rst_debounce - 20'd1;
@@ -224,7 +225,7 @@ assign phy_rst_n = ~sys_rst;
 reg [7:0] flash_rstcounter;
 initial flash_rstcounter <= 8'd0;
 always @(posedge sys_clk) begin
-       if(hard_reset|reset_button)
+       if(trigger_reset)
                flash_rstcounter <= 8'd0;
        else if(~flash_rstcounter[7])
                flash_rstcounter <= flash_rstcounter + 8'd1;
index ee05690..0ba6fb8 100644 (file)
@@ -7,6 +7,7 @@ SEGMENTS=-j .text -j .data -j .rodata
 all: bios.bin
 
 %.bin: %.elf
+       $(MAKE) -C $(MMDIR)/tools
        $(OBJCOPY) $(SEGMENTS) -O binary $< $@
        chmod -x $@
        $(MMDIR)/tools/crc32 $@ write
index 008ccef..937aa10 100644 (file)
@@ -5,7 +5,7 @@ __DYNAMIC = 0;
 
 MEMORY {
        flash : ORIGIN = 0x00180000, LENGTH = 0x20000    /* 128K */
-       sdram : ORIGIN = 0x42000000, LENGTH = 0x2000000
+       sdram : ORIGIN = 0x42000000, LENGTH = 0x2000000  /* (FIXME: should be) upper 64M of SDRAM */
 }
 
 SECTIONS
index b906cba..10d5202 100644 (file)
@@ -32,6 +32,7 @@
 #include <hw/gpio.h>
 #include <hw/uart.h>
 #include <hw/hpdmc.h>
+#include <hw/flash.h>
 
 #include "boot.h"
 #include "splash.h"
@@ -378,8 +379,8 @@ static void crcbios()
         * of our code.
         */
        expected_crc = _edata;
-       length = (unsigned int)&_edata;
-       actual_crc = crc32((unsigned char *)0, length);
+       length = (unsigned int)&_edata - FLASH_OFFSET_BIOS;
+       actual_crc = crc32((unsigned char *)FLASH_OFFSET_BIOS, length);
        if(expected_crc == actual_crc)
                printf("I: BIOS CRC passed (%08x)\n", actual_crc);
        else {
index 0ee82aa..03ca7bf 100644 (file)
@@ -10,12 +10,14 @@ bandfilters.h: bandfilters.sce
        scilab -nw -nwni -nogui -nb -f bandfilters.sce
 
 spam.raw: spam.png
+       $(MAKE) -C $(MMDIR)/tools
        $(MMDIR)/tools/makeraw spam.png
 
 spam.h: spam.raw
        xxd -i spam.raw spam.h
 
 %.bin: %.elf
+       $(MAKE) -C $(MMDIR)/tools
        $(OBJCOPY) $(SEGMENTS) -O binary $< $@
        chmod -x $@
        $(MMDIR)/tools/crc32 $@
index 62999b7..305fbb9 100644 (file)
@@ -20,6 +20,6 @@
 
 #define FLASH_OFFSET_BITSTREAM (0x00000000)
 #define FLASH_OFFSET_BIOS      (0x00180000)
-#define FLASH_OFFSET_SPLASH    (0x001A0000)
+#define FLASH_OFFSET_SPLASH    (0x001C0000)
 
 #endif /* __HW_FLASH_H */
index 32cc383..00e0141 100644 (file)
@@ -13,6 +13,7 @@ libhpdmc.a: libhpdmc.o
        $(RANLIB) libhpdmc.a
 
 %.bin: %.elf
+       $(MAKE) -C $(MMDIR)/tools
        $(OBJCOPY) $(SEGMENTS) -O binary $< $@
        chmod -x $@
        $(MMDIR)/tools/crc32 $@
index 8ae8552..6282411 100644 (file)
@@ -374,7 +374,7 @@ getkey:
 memtest:
        /* 1. fill with pattern */
        mvhi    r5, 0x4000      /* r5 - current address */
-       mvhi    r3, 0x100       /* r3 - remaining words */
+       mvhi    r3, 0x200       /* r3 - remaining words */
        mv      r4, r3          /* r4 - number of words to test */
        mv      r6, r2          /* r6 - current value of the PRNG */
        mvhi    r7, hi(22695477)