From 079af6443ef6d2ce1c51939033ce6a5e84c83234 Mon Sep 17 00:00:00 2001 From: Benjamin Herrenschmidt Date: Wed, 8 Jul 2020 17:30:10 +1000 Subject: [PATCH] litedram: Update generator to work with latest LiteX Some changes in LiteX broke us. Adapt the build system and increase the init RAM size to 24KB. Signed-off-by: Benjamin Herrenschmidt --- litedram/gen-src/dram-init-mem.vhdl | 2 +- litedram/gen-src/generate.py | 9 +++------ litedram/gen-src/sdram_init/Makefile | 16 +++++++++++++--- litedram/gen-src/sdram_init/head.S | 2 +- litedram/gen-src/sdram_init/include/system.h | 5 +++++ litedram/gen-src/sdram_init/main.c | 6 +++--- 6 files changed, 26 insertions(+), 14 deletions(-) diff --git a/litedram/gen-src/dram-init-mem.vhdl b/litedram/gen-src/dram-init-mem.vhdl index a1b87d3..395602b 100644 --- a/litedram/gen-src/dram-init-mem.vhdl +++ b/litedram/gen-src/dram-init-mem.vhdl @@ -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); diff --git a/litedram/gen-src/generate.py b/litedram/gen-src/generate.py index cb6aab2..08d42fb 100755 --- a/litedram/gen-src/generate.py +++ b/litedram/gen-src/generate.py @@ -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)) diff --git a/litedram/gen-src/sdram_init/Makefile b/litedram/gen-src/sdram_init/Makefile index b28d7e4..2e622d4 100644 --- a/litedram/gen-src/sdram_init/Makefile +++ b/litedram/gen-src/sdram_init/Makefile @@ -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 $@, $@) diff --git a/litedram/gen-src/sdram_init/head.S b/litedram/gen-src/sdram_init/head.S index e9d5173..2e9f053 100644 --- a/litedram/gen-src/sdram_init/head.S +++ b/litedram/gen-src/sdram_init/head.S @@ -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 */ \ diff --git a/litedram/gen-src/sdram_init/include/system.h b/litedram/gen-src/sdram_init/include/system.h index 6d4068c..0151977 100644 --- a/litedram/gen-src/sdram_init/include/system.h +++ b/litedram/gen-src/sdram_init/include/system.h @@ -1,6 +1,8 @@ #ifndef __SYSTEM_H #define __SYSTEM_H +#include + #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); diff --git a/litedram/gen-src/sdram_init/main.c b/litedram/gen-src/sdram_init/main.c index 19cc2ad..9ba4fd1 100644 --- a/litedram/gen-src/sdram_init/main.c +++ b/litedram/gen-src/sdram_init/main.c @@ -7,10 +7,10 @@ #include +#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");