From d6919e9af611ccc607bf8518c6a7e87170fa8d07 Mon Sep 17 00:00:00 2001 From: gabriel Date: Sat, 27 Jan 2024 16:54:25 +0100 Subject: [PATCH] making hello-world run on all Boards --- env/common-gcc.mk | 24 ++++++++++++++++-------- env/ehrenberg/{flash.lds => link.lds} | 0 env/hifive1/{flash.lds => link.lds} | 0 include/sifive/const.h | 18 ++++++++++++++++++ include/tgc-vp/const.h | 17 +++++++++++++++++ libwrap/sys/puts.c | 4 ++++ libwrap/sys/read.c | 13 +++++++++++++ libwrap/sys/write.c | 4 ++++ 8 files changed, 72 insertions(+), 8 deletions(-) rename env/ehrenberg/{flash.lds => link.lds} (100%) rename env/hifive1/{flash.lds => link.lds} (100%) create mode 100644 include/sifive/const.h create mode 100644 include/tgc-vp/const.h diff --git a/env/common-gcc.mk b/env/common-gcc.mk index 92ebf02..8cdb0f2 100644 --- a/env/common-gcc.mk +++ b/env/common-gcc.mk @@ -6,15 +6,16 @@ TL_TARGET?=all .PHONY: $(TL_TARGET) $(TL_TARGET): $(TARGET) +ENV_DIR:=$(dir $(lastword $(MAKEFILE_LIST))) +BSP_BASE=$(ENV_DIR)/.. +PLATFORM_DIR = $(ENV_DIR)/$(BOARD) + include $(BSP_BASE)/libwrap/libwrap.mk BOARD?=iss -ENV_DIR = $(BSP_BASE)/env -PLATFORM_DIR = $(ENV_DIR)/$(BOARD) -ASM_SRCS += $(ENV_DIR)/start.S -ASM_SRCS += $(ENV_DIR)/entry.S -C_SRCS += $(PLATFORM_DIR)/init.c +ASM_SRCS += $(ENV_DIR)/start.S $(ENV_DIR)/entry.S +C_SRCS += $(PLATFORM_DIR)/init.c LINKER_SCRIPT ?= $(PLATFORM_DIR)/$(LINK_TARGET).lds @@ -26,7 +27,13 @@ INCLUDES += -I$(PLATFORM_DIR) LDFLAGS += -march=$(RISCV_ARCH) -mabi=$(RISCV_ABI) LDFLAGS += -L$(ENV_DIR) LD_SCRIPT += -T $(LINKER_SCRIPT) -Wl,--no-warn-rwx-segments -Wl,-Map=$(TARGET).map -nostartfiles -# --specs=nano.specs + +ifneq (,$(findstring specs=nano.specs,$(LDFLAGS), LD_SCRIPT)) + # Found +else + # Not found +endif + ASM_OBJS := $(ASM_SRCS:.S=.o) C_OBJS := $(C_SRCS:.c=.o) @@ -56,8 +63,9 @@ OBJDUMP := $(TOOL_DIR)$(TRIPLET)-objdump OBJCOPY := $(TOOL_DIR)$(TRIPLET)-objcopy ifndef NO_DEFAULT_LINK -$(TARGET).elf: $(LINK_OBJS) $(LINK_DEPS) - $(LD) $(LINK_OBJS) $(LDFLAGS) $(LIBWRAP) $(LD_SCRIPT) -o $@ +$(TARGET): $(LINK_OBJS) $(LINK_DEPS) + echo LINK_OBJS: $(LINK_OBJS) + $(LD) $(LINK_OBJS) $(LDFLAGS) $(LIBWRAP_LDFLAGS) $(LIBWRAP) $(LD_SCRIPT) -o $@ $(OBJDUMP) -d -S $@ > $(TARGET).dis endif diff --git a/env/ehrenberg/flash.lds b/env/ehrenberg/link.lds similarity index 100% rename from env/ehrenberg/flash.lds rename to env/ehrenberg/link.lds diff --git a/env/hifive1/flash.lds b/env/hifive1/link.lds similarity index 100% rename from env/hifive1/flash.lds rename to env/hifive1/link.lds diff --git a/include/sifive/const.h b/include/sifive/const.h new file mode 100644 index 0000000..8dcffbb --- /dev/null +++ b/include/sifive/const.h @@ -0,0 +1,18 @@ +// See LICENSE for license details. +/* Derived from */ + +#ifndef _SIFIVE_CONST_H +#define _SIFIVE_CONST_H + +#ifdef __ASSEMBLER__ +#define _AC(X,Y) X +#define _AT(T,X) X +#else +#define _AC(X,Y) (X##Y) +#define _AT(T,X) ((T)(X)) +#endif /* !__ASSEMBLER__*/ + +#define _BITUL(x) (_AC(1,UL) << (x)) +#define _BITULL(x) (_AC(1,ULL) << (x)) + +#endif /* _SIFIVE_CONST_H */ diff --git a/include/tgc-vp/const.h b/include/tgc-vp/const.h new file mode 100644 index 0000000..3e0a681 --- /dev/null +++ b/include/tgc-vp/const.h @@ -0,0 +1,17 @@ +/* Derived from */ + +#ifndef _SIFIVE_CONST_H +#define _SIFIVE_CONST_H + +#ifdef __ASSEMBLER__ +#define _AC(X,Y) X +#define _AT(T,X) X +#else +#define _AC(X,Y) (X##Y) +#define _AT(T,X) ((T)(X)) +#endif /* !__ASSEMBLER__*/ + +#define _BITUL(x) (_AC(1,UL) << (x)) +#define _BITULL(x) (_AC(1,ULL) << (x)) + +#endif /* _SIFIVE_CONST_H */ diff --git a/libwrap/sys/puts.c b/libwrap/sys/puts.c index c036cb7..fd82e4f 100644 --- a/libwrap/sys/puts.c +++ b/libwrap/sys/puts.c @@ -15,6 +15,10 @@ int __wrap_puts(const char *s) #if defined(BOARD_ehrenberg) while (uart_get_tx_free(uart)==0) ; uart_write(uart, *s); +#elif defined(BOARD_iss) + *((uint32_t*) 0xFFFF0000) = *s; +#elif defined(BOARD_TGC5L) + //TODO: implement #else while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ; UART0_REG(UART_REG_TXFIFO) = *s; diff --git a/libwrap/sys/read.c b/libwrap/sys/read.c index db11a8f..c6e1a0d 100644 --- a/libwrap/sys/read.c +++ b/libwrap/sys/read.c @@ -17,6 +17,10 @@ ssize_t __wrap_read(int fd, void* ptr, size_t len) #if defined(BOARD_hifive1) volatile uint32_t * uart_rx = (uint32_t *)(UART0_CTRL_ADDR + UART_REG_RXFIFO); volatile uint8_t * uart_rx_cnt = (uint8_t *)(UART0_CTRL_ADDR + UART_REG_RXCTRL + 2); +#elif defined(BOARD_iss) + volatile uint32_t * uart_rx = (uint32_t*)0xFFFF0000; +#elif defined(BOARD_TGC5L) + //TODO: implement #elif !defined(BOARD_ehrenberg) volatile uint32_t * uart_rx = (uint32_t *)(UART0_BASE_ADDR + UART_REG_RXFIFO); volatile uint8_t * uart_rx_cnt = (uint8_t *)(UART0_BASE_ADDR + UART_REG_RXCTRL + 2); @@ -30,6 +34,15 @@ ssize_t __wrap_read(int fd, void* ptr, size_t len) *current = uart_read(uart); result++; } +#elif defined(BOARD_iss) + for (current = (uint8_t *)ptr; + (current < ((uint8_t *)ptr) + len); + current ++) { + *current = *uart_rx; + result++; + } +#elif defined(BOARD_TGC5L) + //TODO: implement #else for (current = (uint8_t *)ptr; (current < ((uint8_t *)ptr) + len) && (*uart_rx_cnt > 0); diff --git a/libwrap/sys/write.c b/libwrap/sys/write.c index c1ab0a0..46e0788 100644 --- a/libwrap/sys/write.c +++ b/libwrap/sys/write.c @@ -21,6 +21,10 @@ ssize_t __wrap_write(int fd, const void* ptr, size_t len) while (uart_get_tx_free(uart)==0) ; uart_write(uart, '\r'); } +#elif defined(BOARD_iss) + *((uint32_t*) 0xFFFF0000) = current[jj]; +#elif defined(BOARD_TGC5L) + //TODO: implement #else while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ; UART0_REG(UART_REG_TXFIFO) = current[jj];