litedram: Update generator to work with latest LiteX
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 8 Jul 2020 07:30:10 +0000 (17:30 +1000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 8 Jul 2020 07:32:21 +0000 (17:32 +1000)
Some changes in LiteX broke us. Adapt the build system and
increase the init RAM size to 24KB.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
litedram/gen-src/dram-init-mem.vhdl
litedram/gen-src/generate.py
litedram/gen-src/sdram_init/Makefile
litedram/gen-src/sdram_init/head.S
litedram/gen-src/sdram_init/include/system.h
litedram/gen-src/sdram_init/main.c

index a1b87d38846d779e5ad6cc6956837131380060fb..395602bb1d9216d2a8a8c494f19048971ff4a095 100644 (file)
@@ -21,7 +21,7 @@ end entity dram_init_mem;
 
 architecture rtl of dram_init_mem is
 
-    constant INIT_RAM_SIZE    : integer := 16384;
+    constant INIT_RAM_SIZE    : integer := 24576;
     constant RND_PAYLOAD_SIZE : integer := round_up(EXTRA_PAYLOAD_SIZE, 8);
     constant TOTAL_RAM_SIZE   : integer := INIT_RAM_SIZE + RND_PAYLOAD_SIZE;
     constant INIT_RAM_ABITS   : integer := log2ceil(TOTAL_RAM_SIZE-1);
index cb6aab277368396dcf4f139ee2248c74b6b25228..08d42fbcb5d6cf556994921a940f6ffa45e4fd4c 100755 (executable)
@@ -38,16 +38,14 @@ def build_init_code(build_dir, is_sim):
     sw_inc_dir = os.path.join(sw_dir, "include")
     gen_inc_dir = os.path.join(sw_inc_dir, "generated")
     src_dir = os.path.join(gen_src_dir, "sdram_init")
-    lxbios_src_dir = os.path.join(soc_directory, "software", "liblitedram")
-    lxbios_inc_dir = os.path.join(soc_directory, "software", "include")
+    lxbios_src_dir = os.path.join(soc_directory, "software")
     print("     sw dir:", sw_dir)
     print("gen_inc_dir:", gen_inc_dir)
     print("    src dir:", src_dir)
     print(" lx src dir:", lxbios_src_dir)
-    print(" lx inc dir:", lxbios_inc_dir)
 
-    # Generate mem.h
-    mem_h = "#define MAIN_RAM_BASE 0x40000000"
+    # Generate mem.h (hard wire size, it's not important)
+    mem_h = "#define MAIN_RAM_BASE 0x40000000\n#define MAIN_RAM_SIZE 0x10000000"
     write_to_file(os.path.join(gen_inc_dir, "mem.h"), mem_h)
 
     # Environment
@@ -61,7 +59,6 @@ def build_init_code(build_dir, is_sim):
     add_var("SRC_DIR", src_dir)
     add_var("GENINC_DIR", sw_inc_dir)
     add_var("LXSRC_DIR", lxbios_src_dir)
-    add_var("LXINC_DIR", lxbios_inc_dir)
     if is_sim:
         add_var("EXTRA_CFLAGS", "-D__SIM__")
     write_to_file(os.path.join(gen_inc_dir, "variables.mak"), "".join(env_vars))
index b28d7e47a7f2e6d2cf1b43e149c7388bf5ede14c..2e622d4c54a1801742bc201616e9859eec018923 100644 (file)
@@ -3,8 +3,10 @@
 include variables.mak
 OBJ = $(BUILD_DIR)/obj
 
+LXINC_DIR=$(LXSRC_DIR)/include
+
 PROGRAM = sdram_init
-OBJECTS = $(OBJ)/head.o $(OBJ)/main.o $(OBJ)/sdram.o $(OBJ)/console.o
+OBJECTS = $(OBJ)/head.o $(OBJ)/main.o $(OBJ)/sdram.o $(OBJ)/memtest.o $(OBJ)/console.o
 
 #### Compiler
 
@@ -22,7 +24,13 @@ OBJCOPY = $(CROSS_COMPILE)objcopy
 #### Flags
 
 CPPFLAGS = -nostdinc -D__USE_LIBC $(EXTRA_CFLAGS)
-CPPFLAGS += -I$(SRC_DIR)/libc/include -I$(LXSRC_DIR) -I$(LXINC_DIR) -I$(GENINC_DIR) -I$(SRC_DIR)/include -I$(SRC_DIR)/../../../include
+
+# These includes must be first ...
+CPPFLAGS += -I$(GENINC_DIR) -I$(SRC_DIR)/include -I$(SRC_DIR)/../../../include -I$(SRC_DIR)/libc/include 
+
+# .. and these last, otherwise litex overrides some of our stuff
+CPPFLAGS += -I$(LXSRC_DIR) -I$(LXINC_DIR) -I$(LXINC_DIR)/base -I$(LXSRC_DIR)/liblitedram
+
 CPPFLAGS += -isystem $(shell $(CC) -print-file-name=include)
 CFLAGS = -Os -g -Wall -std=c99 -m64 -mabi=elfv2 -msoft-float -mno-string -mno-multiple -mno-vsx -mno-altivec -mlittle-endian -fno-stack-protector -mstrict-align -ffreestanding -fdata-sections -ffunction-sections -fno-delete-null-pointer-checks 
 ASFLAGS = $(CPPFLAGS) $(CFLAGS)
@@ -48,7 +56,9 @@ endif
 
 all: objdir $(OBJ)/$(PROGRAM).hex
 
-$(OBJ)/sdram.o: $(LXSRC_DIR)/sdram.c
+$(OBJ)/sdram.o: $(LXSRC_DIR)/liblitedram/sdram.c
+       $(call Q,CC, $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@, $@)
+$(OBJ)/memtest.o: $(LXSRC_DIR)/libbase/memtest.c
        $(call Q,CC, $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@, $@)
 $(OBJ)/console.o: $(SRC_DIR)/../../../lib/console.c
        $(call Q,CC, $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@, $@)
index e9d517386f575530f4f4e02aa623748fc2186742..2e9f0531f95415f1876cde40f1a6edf5b11df198 100644 (file)
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#define STACK_TOP      0xff004000
+#define STACK_TOP      0xff006000
 
 #define FIXUP_ENDIAN                                              \
        tdi   0,0,0x48;   /* Reverse endian of b . + 8          */ \
index 6d4068c7d719f3b4fd34a2f614b682fa379bbaec..0151977be9ff37d8abf0e5f879216040bf916836 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef __SYSTEM_H
 #define __SYSTEM_H
 
+#include <stdint.h>
+
 #include "microwatt_soc.h"
 #include "io.h"
 
@@ -32,6 +34,9 @@ static inline uint64_t timer0_value_read(void)
        return val;
 }
 
+static inline void init_progression_bar(int max) { }
+static inline void show_progress(int now) { }
+
 static inline void csr_write_simple(unsigned long v, unsigned long a)
 {
        return writel(v, a);
index 19cc2ad4ce2954f7c824e1763cf3c1b40c1aa64c..9ba4fd16f1b36467193477cd005f94912205ee8b 100644 (file)
@@ -7,10 +7,10 @@
 
 #include <generated/git.h>
 
+#include "console.h"
 #include "microwatt_soc.h"
 #include "io.h"
 #include "sdram.h"
-#include "console.h"
 #include "elf64.h"
 
 #define FLASH_LOADER_USE_MAP
@@ -225,9 +225,9 @@ dump:
 
 static void boot_sdram(void)
 {
-       void *s = (void *)(DRAM_INIT_BASE + 0x4000);
+       void *s = (void *)(DRAM_INIT_BASE + 0x6000);
        void *d = (void *)DRAM_BASE;
-       int  sz = (0x10000 - 0x4000);
+       int  sz = (0x10000 - 0x6000);
        printf("Copying payload to DRAM...\n");
        memcpy(d, s, sz);
        printf("Booting from DRAM...\n");