New simplified flash layout + build flashable images for SoC and videomixer
authorSebastien Bourdeauducq <sebastien@milkymist.org>
Sat, 1 Jun 2013 15:20:40 +0000 (17:20 +0200)
committerSebastien Bourdeauducq <sebastien@milkymist.org>
Sat, 1 Jun 2013 15:20:40 +0000 (17:20 +0200)
.gitignore
Makefile
build.py
load.jtag
software/bios/Makefile
software/bios/boot.c
software/bios/linker.ld
software/bios/main.c
software/include/hw/mem.h
software/videomixer/Makefile
verilog/lm32/lm32_config.v

index 1462cfdf12fd4acb4401bf027d0d919f63c68187..4ad516050361cb81beb4d549163c44a0b30bd818 100644 (file)
@@ -3,8 +3,9 @@ build/*
 *.o
 *.d
 *.a
-*.bin
 *.elf
+*.bin
+*.fbi
 tools/bin2hex
 tools/flterm
 tools/mkmmimg
index 78d1840ced0e838c80e4a1ddb4db11fbd3a37910..0e60158a7a2c750ab5b7f6d4f45c446a23853fc7 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,18 +1,21 @@
 RM ?= rm -f
 
-all: build/top.bit build/top.fpg
+all: build/soc.bit build/soc.fpg
 
-build/top.bit build/top.bin:
+build/soc.bit build/soc.bin:
        ./build.py
 
-build/top.fpg: build/top.bin
+build/soc.fpg: build/soc.bin
        $(MAKE) -C tools
        tools/byteswap $< $@
 
-load: build/top.bit
+load: build/soc.bit
        jtag -n load.jtag
 
+flash: build/soc.fpg
+       m1nor-ng build/soc.fpg
+
 clean:
        $(RM) -r build/*
 
-.PHONY: all load clean
+.PHONY: all load clean flash
index b345a5c91e8c85d0c2c10372d3de9143b1f9bcdd..dc9edce834829499a255b6312806d39fc7ec1c2b 100755 (executable)
--- a/build.py
+++ b/build.py
@@ -69,7 +69,7 @@ TIMESPEC "TSdviclk1" = PERIOD "GRPdviclk1" 26.7 ns HIGH 50%;
                "jtag_tap_spartan6.v", "lm32_itlb.v", "lm32_dtlb.v")
        platform.add_sources(os.path.join("verilog", "lm32"), "lm32_config.v")
 
-       platform.build_cmdline(soc)
+       platform.build_cmdline(soc, build_name="soc")
        csr_header = cif.get_csr_header(soc.csr_base, soc.csrbankarray, soc.interrupt_map)
        write_to_file("software/include/hw/csr.h", csr_header)
 
index 1bea8ee116283853fb771e026a3d658e5e664f61..c20825fb635d7a3e7780d37848f2151fd166f66d 100644 (file)
--- a/load.jtag
+++ b/load.jtag
@@ -1,3 +1,3 @@
 cable milkymist
 detect
-pld load build/top.bit
+pld load build/soc.bit
index 16f2503fdd03e23eea3084e899c4fdecd20cbc88..973fb3abf1258b503703f3873718e85591402034 100644 (file)
@@ -39,7 +39,7 @@ libs:
        $(MAKE) -C $(M2DIR)/software/libnet
 
 flash: bios.bin
-       m1nor bios.bin
+       m1nor-ng bios.bin
 
 clean:
        $(RM) $(OBJECTS) $(OBJECTS:.o=.d) bios.elf bios.bin .*~ *~
index 365bbb509c823006b760286abe5bc9c3102460bf..9d9b33632d3788a0593b4c954334bcb1a157c027 100644 (file)
@@ -196,12 +196,13 @@ static int tftp_get_v(unsigned int ip, const char *filename, char *buffer)
        return r;
 }
 
+static const unsigned char macadr[6] = {0x10, 0xe2, 0xd5, 0x00, 0x00, 0x00};
+
 void netboot(void)
 {
        int size;
        unsigned int cmdline_adr, initrdstart_adr, initrdend_adr;
        unsigned int ip;
-       unsigned char *macadr = (unsigned char *)FLASH_OFFSET_MAC_ADDRESS;
 
        printf("Booting from network...\n");
        printf("Local IP : %d.%d.%d.%d\n", LOCALIP1, LOCALIP2, LOCALIP3, LOCALIP4);
@@ -244,11 +245,11 @@ void flashboot(void)
        unsigned int got_crc;
 
        printf("Booting from flash...\n");
-       flashbase = (unsigned int *)FLASH_OFFSET_REGULAR_APP;
+       flashbase = (unsigned int *)FLASH_OFFSET_APP;
        length = *flashbase++;
        crc = *flashbase++;
        if((length < 32) || (length > 4*1024*1024)) {
-               printf("Error: Invalid flash boot image length\n");
+               printf("Error: Invalid flash boot image length 0x%08x\n", length);
                return;
        }
        
index 955d9e0b6bd7b2619354f1aeaa6b677beffa3046..b21c1e36345013c8e79a9cdb7d58fade7f0d2b59 100644 (file)
@@ -4,7 +4,7 @@ ENTRY(_start)
 __DYNAMIC = 0;
 
 MEMORY {
-       rom  : ORIGIN = 0x00860000, LENGTH = 0x20000 /* 128K */
+       rom  : ORIGIN = 0x00180000, LENGTH = 0x20000 /* 128K */
        sram : ORIGIN = 0x10000000, LENGTH = 0x01000 /* 4K */
 }
 
index 4d326f43cd3589f129f577264be504238581a9ad..618217e74f1a2951372cd3d1cd27e291e54ce539 100644 (file)
@@ -390,7 +390,7 @@ static void crcbios(void)
         * We also use the address of _edata to know the length
         * of our code.
         */
-       offset_bios = FLASH_OFFSET_REGULAR_BIOS;
+       offset_bios = FLASH_OFFSET_BIOS;
        expected_crc = _edata;
        length = (unsigned int)&_edata - offset_bios;
        actual_crc = crc32((unsigned char *)offset_bios, length);
@@ -402,13 +402,6 @@ static void crcbios(void)
        }
 }
 
-static void print_mac(void)
-{
-       unsigned char *macadr = (unsigned char *)FLASH_OFFSET_MAC_ADDRESS;
-
-       printf("MAC address: %02x:%02x:%02x:%02x:%02x:%02x\n", macadr[0], macadr[1], macadr[2], macadr[3], macadr[4], macadr[5]);
-}
-
 static const char banner[] =
        "\nMILKYMIST(tm) v"VERSION" BIOS   http://www.milkymist.org\n"
        "(c) Copyright 2007-2013 Sebastien Bourdeauducq\n"
@@ -506,7 +499,6 @@ int main(int i, char **c)
        crcbios();
        id_print();
        ethreset();
-       print_mac();
        ddr_ok = ddrinit();
        if(ddr_ok)
                boot_sequence();
index b36082a59a50abf7dec2ce178f049815902b6a98..5df288943112cb827f82696b6970347d3908ce90 100644 (file)
@@ -1,19 +1,9 @@
 #ifndef __HW_MEM_H
 #define __HW_MEM_H
 
-#define FLASH_OFFSET_STANDBY_BITSTREAM 0x00000000 /* 640k */
-
-#define FLASH_OFFSET_RESCUE_BITSTREAM  0x000A0000 /* 1536k */
-#define FLASH_OFFSET_RESCUE_BIOS       0x00220000 /* 128k */
-#define FLASH_OFFSET_RESCUE_APP                0x00240000 /* 4736k */
-
-#define FLASH_OFFSET_REGULAR_BITSTREAM 0x006E0000 /* 1536k */
-#define FLASH_OFFSET_REGULAR_BIOS      0x00860000 /* 128k */
-#define FLASH_OFFSET_REGULAR_APP       0x00880000 /* 4736k */
-
-#define FLASH_OFFSET_FILESYSTEM                0x00D20000 /* 19328k (remaining space) */
-
-#define FLASH_OFFSET_MAC_ADDRESS       0x002200E0 /* within rescue BIOS */
+#define FLASH_OFFSET_BITSTREAM 0x00000000 /* 1536k */
+#define FLASH_OFFSET_BIOS              0x00180000 /* 128k */
+#define FLASH_OFFSET_APP               0x001A0000 /* remaining space */
 
 #define SDRAM_BASE                     0x40000000
 
index 41b1fcfa6892c63b95e8b19796525863931c14e4..fa3ae2334818c43e76c09ade8f3e9835f99a6684 100644 (file)
@@ -3,7 +3,7 @@ include $(M2DIR)/software/common.mak
 
 OBJECTS=crt0.o isr.o time.o dvisampler0.o dvisampler1.o main.o
 
-all: videomixer.bin
+all: videomixer.bin videomixer.fbi
 
 # pull in dependency info for *existing* .o files
 -include $(OBJECTS:.o=.d)
@@ -12,6 +12,9 @@ all: videomixer.bin
        $(OBJCOPY) -O binary $< $@
        chmod -x $@
 
+%.fbi: %.bin
+       $(M2DIR)/tools/mkmmimg $< write $@
+
 videomixer.elf: linker.ld $(OBJECTS) libs
 
 %.elf:
@@ -62,8 +65,12 @@ load: videomixer.bin
        $(MAKE) -C $(M2DIR)/tools
        $(M2DIR)/tools/flterm --port /dev/ttyUSB0 --kernel videomixer.bin
 
+flash: videomixer.fbi
+       m1nor-ng videomixer.fbi
+
 clean:
-       $(RM) $(OBJECTS) $(OBJECTS:.o=.d) videomixer.elf videomixer.bin .*~ *~
+       $(RM) $(OBJECTS) $(OBJECTS:.o=.d) videomixer.elf videomixer.bin videomixer.fbi
+       $(RM) .*~ *~
        $(RM) dvisampler0.h dvisampler0.c dvisampler1.h dvisampler1.c
 
 .PHONY: all main.o clean libs load
index 45f95ec2c373ade257e6ded1d637aee3dd3e1e6d..df2a0a7e644c1e763fc212220d838450a56e9f26 100644 (file)
@@ -7,7 +7,7 @@
 //
 
 // Base address for exception vectors
-`define CFG_EBA_RESET 32'h00860000
+`define CFG_EBA_RESET 32'h00180000
 
 // Base address for the debug exception vectors. If the DC_RE flag is
 // set or the at_debug signal is asserted (see CFG_ALTERNATE_EBA) this