sw: Add full memory map to .h and use it for litedram .lds
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Fri, 15 May 2020 07:43:51 +0000 (17:43 +1000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Mon, 25 May 2020 01:33:09 +0000 (11:33 +1000)
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
include/microwatt_soc.h
litedram/gen-src/sdram_init/Makefile
litedram/gen-src/sdram_init/sdram_init.lds [deleted file]
litedram/gen-src/sdram_init/sdram_init.lds.S [new file with mode: 0644]
soc.vhdl

index 16871a425040525af47aff0794f4e286583a36a9..b0dab8397d00ae91c3a0c633794fb1db575b88a5 100644 (file)
@@ -2,9 +2,21 @@
 #define __MICROWATT_SOC_H
 
 /*
- * Definitions for the syscon registers
+ * Microwatt SoC memory map
+ */
+
+#define MEMORY_BASE     0x00000000  /* "Main" memory alias, either BRAM or DRAM */
+#define DRAM_BASE       0x40000000  /* DRAM if present */
+#define SYSCON_BASE    0xc0000000  /* System control regs */
+#define UART_BASE      0xc0002000  /* UART */
+#define XICS_BASE      0xc0004000  /* Interrupt controller */
+#define DRAM_CTRL_BASE 0xc0100000  /* LiteDRAM control registers */
+#define BRAM_BASE       0xf0000000  /* Internal BRAM */
+#define DRAM_INIT_BASE  0xffff0000  /* Internal DRAM init firmware */
+
+/*
+ * Register definitions for the syscon registers
  */
-#define SYSCON_BASE    0xc0000000
 
 #define SYS_REG_SIGNATURE              0x00
 #define SYS_REG_INFO                   0x08
@@ -18,9 +30,9 @@
 #define   SYS_REG_CTRL_CORE_RESET              (1ull << 1)
 #define   SYS_REG_CTRL_SOC_RESET               (1ull << 2)
 
-/* Definition for the "Potato" UART */
-#define UART_BASE      0xc0002000
-
+/*
+ * Register definitions for the potato UART
+ */
 #define POTATO_CONSOLE_TX              0x00
 #define POTATO_CONSOLE_RX              0x08
 #define POTATO_CONSOLE_STATUS          0x10
@@ -31,7 +43,5 @@
 #define POTATO_CONSOLE_CLOCK_DIV       0x18
 #define POTATO_CONSOLE_IRQ_EN          0x20
 
-/* Definition for the LiteDRAM control registers */
-#define DRAM_CTRL_BASE 0xc0100000
 
 #endif /* __MICROWATT_SOC_H */
index 4bc3e7b634775b054d6721c876eafd4283420c0e..420072ec1067f55a6af8d84d0aaf63ec21f1184e 100644 (file)
@@ -26,7 +26,7 @@ CPPFLAGS += -I$(SRC_DIR)/libc/include -I$(LXSRC_DIR) -I$(LXINC_DIR) -I$(GENINC_D
 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)
-LDFLAGS = -static -nostdlib -Ttext-segment=0xffff0000 -T $(SRC_DIR)/$(PROGRAM).lds --gc-sections
+LDFLAGS = -static -nostdlib -T $(OBJ)/$(PROGRAM).lds --gc-sections
 
 #### Pretty print
 
@@ -58,13 +58,15 @@ $(OBJ)/%.o : $(SRC_DIR)/%.S
        $(call Q,AS, $(CC) $(ASFLAGS) -c $< -o $@, $@)
 $(OBJ)/%.o : $(SRC_DIR)/libc/src/%.c
        $(call Q,CC, $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@, $@)
+$(OBJ)/%.lds : $(SRC_DIR)/%.lds.S
+       $(call Q,CC, $(CC) $(CPPFLAGS) -P -E $< -o $@, $@)
 
 LIBC_SRC := $(wildcard $(SRC_DIR)/libc/src/*.c)
 LIBC_OBJ := $(patsubst $(SRC_DIR)/libc/src/%.c, $(OBJ)/%.o,$(LIBC_SRC))
 $(OBJ)/libc.o: $(LIBC_OBJ)
        $(call Q,LD, $(LD) -r -o $@ $^, $@)
 
-$(OBJ)/$(PROGRAM).elf: $(OBJECTS) $(OBJ)/libc.o
+$(OBJ)/$(PROGRAM).elf: $(OBJECTS) $(OBJ)/libc.o $(OBJ)/$(PROGRAM).lds
        $(call Q,LD, $(LD) $(LDFLAGS) -o $@ $^, $@)
 
 $(OBJ)/$(PROGRAM).bin: $(OBJ)/$(PROGRAM).elf
diff --git a/litedram/gen-src/sdram_init/sdram_init.lds b/litedram/gen-src/sdram_init/sdram_init.lds
deleted file mode 100644 (file)
index f76e77f..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-SECTIONS
-{
-       . = 0xffff0000;
-       start = .;
-       .head : {
-               KEEP(*(.head))
-       }
-       . = 0xffff1000;
-       .text : { *(.text*) *(.sfpr) *(.rodata*) }
-       .data : { *(.data*) }
-       .bss : { *(.bss*) }
-}
diff --git a/litedram/gen-src/sdram_init/sdram_init.lds.S b/litedram/gen-src/sdram_init/sdram_init.lds.S
new file mode 100644 (file)
index 0000000..f1bc291
--- /dev/null
@@ -0,0 +1,14 @@
+#include "microwatt_soc.h"
+
+SECTIONS
+{
+       . = DRAM_INIT_BASE;
+       start = .;
+       .head : {
+               KEEP(*(.head))
+       }
+       . = DRAM_INIT_BASE | 0x1000;
+       .text : { *(.text*) *(.sfpr) *(.rodata*) }
+       .data : { *(.data*) }
+       .bss : { *(.bss*) }
+}
index caa62cd56e45472251ed4f5eccb807d947984c24..a42e071c3994dd2a750bb31ba1c584878b63d811 100644 (file)
--- a/soc.vhdl
+++ b/soc.vhdl
@@ -10,7 +10,7 @@ use work.common.all;
 use work.wishbone_types.all;
 
 
--- Memory map:
+-- Memory map. *** Keep include/microwatt_soc.h updated on changes ***
 --
 -- 0x00000000: Block RAM (MEMORY_SIZE) or DRAM depending on syscon
 -- 0x40000000: DRAM (when present)