mirror of
https://github.com/antonblanchard/microwatt.git
synced 2026-04-11 06:37:58 +00:00
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 <benh@kernel.crashing.org>
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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 $@, $@)
|
||||
|
||||
@@ -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 */ \
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user