From e1d8446752f62d8b11de1a82a732667071c07ada Mon Sep 17 00:00:00 2001 From: marqs Date: Tue, 25 Sep 2018 22:34:52 +0300 Subject: [PATCH] BSP and sw modifications --- software/sys_controller/Makefile | 39 ++++---- software/sys_controller/memory/flash.c | 2 +- software/sys_controller/ossc/firmware.c | 4 +- software/sys_controller_bsp/HAL/inc/io.h | 16 ++-- software/sys_controller_bsp/Makefile | 90 ++---------------- software/sys_controller_bsp/alt_sys_init.c | 10 +- .../src/altera_avalon_jtag_uart_init.c | 2 +- .../src/altera_avalon_jtag_uart_read.c | 2 +- .../src/altera_avalon_jtag_uart_write.c | 2 +- software/sys_controller_bsp/libhal_bsp.a | Bin 104226 -> 27058 bytes software/sys_controller_bsp/public.mk | 11 ++- software/sys_controller_bsp/settings.bsp | 4 +- software/sys_controller_bsp/system.h | 10 +- 13 files changed, 60 insertions(+), 132 deletions(-) diff --git a/software/sys_controller/Makefile b/software/sys_controller/Makefile index 2865ed4..c0ee74d 100644 --- a/software/sys_controller/Makefile +++ b/software/sys_controller/Makefile @@ -17,7 +17,7 @@ ALT_LIBRARY_NAMES := # List of library names for -msys-lib linker option (-msys-lib added when used). # These are libraries that might be located in the BSP and depend on the BSP # library, or vice versa -ALT_BSP_DEP_LIBRARY_NAMES := +ALT_BSP_DEP_LIBRARY_NAMES := libhal_bsp.a # List of dependencies for the linker. This is usually the full pathname # of each library (*.a) file. @@ -168,7 +168,7 @@ C_SRCS += ossc/userdata.c C_SRCS += ulibSD/sd_io.c C_SRCS += ulibSD/spi_io.c CXX_SRCS := -ASM_SRCS := +ASM_SRCS := crt0.boot.S # Path to root of object file tree. @@ -344,12 +344,12 @@ ifneq ($(AVOID_NIOS2_GCC3_OPTIONS),) # Detect if small newlib C library is requested. # If yes, remove the -msmallc option because it is # now handled by other means. -ifneq ($(filter -msmallc,$(ALT_LDFLAGS)),) - ALT_LDFLAGS := $(filter-out -msmallc,$(ALT_LDFLAGS)) - ALT_C_LIBRARY := smallc -else - ALT_C_LIBRARY := c -endif +#ifneq ($(filter -msmallc,$(ALT_LDFLAGS)),) + #ALT_LDFLAGS := $(filter-out -msmallc,$(ALT_LDFLAGS)) + #ALT_C_LIBRARY := smallc +#else + #ALT_C_LIBRARY := c +#endif # Put each BSP dependent library in a group to avoid circular dependencies. APP_BSP_DEP_LIBS := $(foreach l,$(ALT_BSP_DEP_LIBRARY_NAMES),-Wl,--start-group -l$(ALT_C_LIBRARY) -lgcc -l$(l) -Wl,--end-group) @@ -359,7 +359,8 @@ else # !AVOID_NIOS2_GCC3_OPTIONS # # Use Nios II GCC 3.X options. # -APP_BSP_DEP_LIBS := $(addprefix -msys-lib=, $(ALT_BSP_DEP_LIBRARY_NAMES)) +#APP_BSP_DEP_LIBS := $(addprefix -msys-lib=, $(ALT_BSP_DEP_LIBRARY_NAMES)) +APP_BSP_DEP_LIBS := $(addprefix -l:, $(ALT_BSP_DEP_LIBRARY_NAMES)) endif # !AVOID_NIOS2_GCC3_OPTIONS @@ -389,7 +390,7 @@ APP_ASFLAGS := $(APP_ASM_INC_DIRS) \ $(ASFLAGS) # Arguments only for the linker. -APP_LDFLAGS := $(APP_LDFLAGS_USER) +APP_LDFLAGS := $(APP_LDFLAGS_USER) --specs=nano.specs -nostartfiles ifneq ($(LINKER_SCRIPT),) APP_LDFLAGS += -T'$(LINKER_SCRIPT)' @@ -410,17 +411,16 @@ else # !AVOID_NIOS2_GCC3_OPTIONS # Use Nios II GCC 3.x options. ifneq ($(CRT0),) -APP_LDFLAGS += -msys-crt0='$(CRT0)' +#APP_LDFLAGS += -msys-crt0='$(CRT0)' endif ifneq ($(SYS_LIB),) -APP_LDFLAGS += -msys-lib=$(SYS_LIB) +#APP_LDFLAGS += -msys-lib=$(SYS_LIB) endif endif # !AVOID_NIOS2_GCC3_OPTIONS APP_LDFLAGS += \ $(APP_LIB_DIRS) \ - $(ALT_LDFLAGS) \ $(LDFLAGS) LINKER_MAP_NAME := $(APP_NAME).map @@ -651,23 +651,24 @@ build_post_process : # included makefile fragment. # ifeq ($(DEFAULT_CROSS_COMPILE),) -DEFAULT_CROSS_COMPILE := nios2-elf- +DEFAULT_CROSS_COMPILE := riscv64-unknown-elf- endif ifeq ($(DEFAULT_STACKREPORT),) -DEFAULT_STACKREPORT := nios2-stackreport +DEFAULT_STACKREPORT := riscv64-unknown-elf-size endif ifeq ($(DEFAULT_DOWNLOAD),) -DEFAULT_DOWNLOAD := nios2-download +DEFAULT_DOWNLOAD := anios2-download endif ifeq ($(DEFAULT_FLASHPROG),) -DEFAULT_FLASHPROG := nios2-flash-programmer +DEFAULT_FLASHPROG := anios2-flash-programmer endif +DISABLE_ELFPATCH := 1 ifeq ($(DEFAULT_ELFPATCH),) -DEFAULT_ELFPATCH := nios2-elf-insert +DEFAULT_ELFPATCH := anios2-elf-insert endif ifeq ($(DEFAULT_RM),) @@ -732,7 +733,7 @@ OBJCOPY := $(CROSS_COMPILE)objcopy endif ifeq ($(STACKREPORT),) -STACKREPORT := $(DEFAULT_STACKREPORT) --prefix $(CROSS_COMPILE) +STACKREPORT := $(DEFAULT_STACKREPORT) else DISABLE_STACKREPORT := 1 endif diff --git a/software/sys_controller/memory/flash.c b/software/sys_controller/memory/flash.c index 455ecf7..df146f8 100644 --- a/software/sys_controller/memory/flash.c +++ b/software/sys_controller/memory/flash.c @@ -95,7 +95,7 @@ int verify_flash(alt_u32 offset, alt_u32 length, alt_u32 golden_crc, alt_u8 *tmp if (retval != 0) return retval; - crcval = crcCI(tmpbuf, bytes_to_read, (i==0)); + //crcval = crcCI(tmpbuf, bytes_to_read, (i==0)); } if (crcval != golden_crc) diff --git a/software/sys_controller/ossc/firmware.c b/software/sys_controller/ossc/firmware.c index 569522a..6f490f9 100644 --- a/software/sys_controller/ossc/firmware.c +++ b/software/sys_controller/ossc/firmware.c @@ -60,7 +60,7 @@ static int check_fw_header(alt_u8 *databuf, fw_hdr *hdr) if (hdr->hdr_len < 26 || hdr->hdr_len > 508) return FW_HDR_ERROR; - crcval = crcCI(databuf, hdr->hdr_len, 1); + //crcval = crcCI(databuf, hdr->hdr_len, 1); if (crcval != hdr->hdr_crc) return FW_HDR_CRC_ERROR; @@ -81,7 +81,7 @@ static int check_fw_image(alt_u32 offset, alt_u32 size, alt_u32 golden_crc, alt_ if (retval != SD_OK) return retval; - crcval = crcCI(tmpbuf, bytes_to_read, (i==0)); + //crcval = crcCI(tmpbuf, bytes_to_read, (i==0)); } if (crcval != golden_crc) diff --git a/software/sys_controller_bsp/HAL/inc/io.h b/software/sys_controller_bsp/HAL/inc/io.h index 912b286..8053c41 100644 --- a/software/sys_controller_bsp/HAL/inc/io.h +++ b/software/sys_controller_bsp/HAL/inc/io.h @@ -51,18 +51,18 @@ extern "C" ((void *)(((alt_u8*)BASE) + (OFFSET))) #define IORD_32DIRECT(BASE, OFFSET) \ - __builtin_ldwio (__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET))) + (*(volatile alt_u32*)(__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET)))) #define IORD_16DIRECT(BASE, OFFSET) \ - __builtin_ldhuio (__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET))) + (*(volatile alt_u16*)(__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET)))) #define IORD_8DIRECT(BASE, OFFSET) \ - __builtin_ldbuio (__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET))) + (*(volatile alt_u8*)(__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET)))) #define IOWR_32DIRECT(BASE, OFFSET, DATA) \ - __builtin_stwio (__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET)), (DATA)) + (*(volatile alt_u32*)(__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET))) = (DATA)) #define IOWR_16DIRECT(BASE, OFFSET, DATA) \ - __builtin_sthio (__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET)), (DATA)) + (*(volatile alt_u16*)(__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET))) = (DATA)) #define IOWR_8DIRECT(BASE, OFFSET, DATA) \ - __builtin_stbio (__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET)), (DATA)) + (*(volatile alt_u8*)(__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET))) = (DATA)) /* Native bus access functions */ @@ -70,9 +70,9 @@ extern "C" ((void *)(((alt_u8*)BASE) + ((REGNUM) * (SYSTEM_BUS_WIDTH/8)))) #define IORD(BASE, REGNUM) \ - __builtin_ldwio (__IO_CALC_ADDRESS_NATIVE ((BASE), (REGNUM))) + (*(volatile alt_u32*)(__IO_CALC_ADDRESS_NATIVE ((BASE), (REGNUM)))) #define IOWR(BASE, REGNUM, DATA) \ - __builtin_stwio (__IO_CALC_ADDRESS_NATIVE ((BASE), (REGNUM)), (DATA)) + (*(volatile alt_u32*)(__IO_CALC_ADDRESS_NATIVE ((BASE), (REGNUM))) = (DATA)) #ifdef __cplusplus } diff --git a/software/sys_controller_bsp/Makefile b/software/sys_controller_bsp/Makefile index aa3ece7..37e1e44 100644 --- a/software/sys_controller_bsp/Makefile +++ b/software/sys_controller_bsp/Makefile @@ -112,10 +112,10 @@ SOPC_FILE := ../../sys.sopcinfo #------------------------------------------------------------------------------- # Archiver command. Creates library files. -AR = nios2-elf-ar +AR = riscv64-unknown-elf-ar # Assembler command. Note that CC is used for .S files. -AS = nios2-elf-gcc +AS = riscv64-unknown-elf-gcc # Custom flags only passed to the archiver. This content of this variable is # directly passed to the archiver rather than the more standard "ARFLAGS". The @@ -139,10 +139,10 @@ BSP_CFLAGS_OPTIMIZATION = -Os BSP_CFLAGS_WARNINGS = -Wall # C compiler command. -CC = nios2-elf-gcc -xc +CC = riscv64-unknown-elf-gcc -xc # C++ compiler command. -CXX = nios2-elf-gcc -xc++ +CXX = riscv64-unknown-elf-gcc -xc++ # Command used to remove files during 'clean' target. RM = rm -f @@ -222,7 +222,6 @@ altera_avalon_timer_driver_SRCS_ROOT := drivers # altera_avalon_timer_driver sources altera_avalon_timer_driver_C_LIB_SRCS := \ - $(altera_avalon_timer_driver_SRCS_ROOT)/src/altera_avalon_timer_sc.c \ $(altera_avalon_timer_driver_SRCS_ROOT)/src/altera_avalon_timer_ts.c \ $(altera_avalon_timer_driver_SRCS_ROOT)/src/altera_avalon_timer_vars.c @@ -238,96 +237,25 @@ altera_nios2_gen2_hal_driver_SRCS_ROOT := HAL # altera_nios2_gen2_hal_driver sources altera_nios2_gen2_hal_driver_C_LIB_SRCS := \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/altera_nios2_gen2_irq.c \ $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_usleep.c \ $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_busy_sleep.c \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_irq_vars.c \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_icache_flush.c \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_icache_flush_all.c \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_dcache_flush.c \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_dcache_flush_all.c \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_dcache_flush_no_writeback.c \ $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_ecc_fatal_exception.c \ $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_instruction_exception_entry.c \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_irq_register.c \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_iic.c \ $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_remap_cached.c \ $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_remap_uncached.c \ $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_uncached_free.c \ $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_uncached_malloc.c \ $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_do_ctors.c \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_do_dtors.c \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_gmon.c - -altera_nios2_gen2_hal_driver_ASM_LIB_SRCS := \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_ecc_fatal_entry.S \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_exception_entry.S \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_exception_trap.S \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_exception_muldiv.S \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_irq_entry.S \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_software_exception.S \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_mcount.S \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_log_macro.S \ - $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/crt0.S + $(altera_nios2_gen2_hal_driver_SRCS_ROOT)/src/alt_do_dtors.c # hal sources root hal_SRCS_ROOT := HAL # hal sources hal_C_LIB_SRCS := \ - $(hal_SRCS_ROOT)/src/alt_alarm_start.c \ - $(hal_SRCS_ROOT)/src/alt_close.c \ - $(hal_SRCS_ROOT)/src/alt_dev.c \ $(hal_SRCS_ROOT)/src/alt_dev_llist_insert.c \ - $(hal_SRCS_ROOT)/src/alt_dma_rxchan_open.c \ - $(hal_SRCS_ROOT)/src/alt_dma_txchan_open.c \ - $(hal_SRCS_ROOT)/src/alt_environ.c \ - $(hal_SRCS_ROOT)/src/alt_env_lock.c \ $(hal_SRCS_ROOT)/src/alt_errno.c \ - $(hal_SRCS_ROOT)/src/alt_execve.c \ - $(hal_SRCS_ROOT)/src/alt_exit.c \ - $(hal_SRCS_ROOT)/src/alt_fcntl.c \ - $(hal_SRCS_ROOT)/src/alt_fd_lock.c \ - $(hal_SRCS_ROOT)/src/alt_fd_unlock.c \ - $(hal_SRCS_ROOT)/src/alt_find_dev.c \ - $(hal_SRCS_ROOT)/src/alt_find_file.c \ $(hal_SRCS_ROOT)/src/alt_flash_dev.c \ - $(hal_SRCS_ROOT)/src/alt_fork.c \ - $(hal_SRCS_ROOT)/src/alt_fs_reg.c \ - $(hal_SRCS_ROOT)/src/alt_fstat.c \ - $(hal_SRCS_ROOT)/src/alt_get_fd.c \ - $(hal_SRCS_ROOT)/src/alt_getchar.c \ - $(hal_SRCS_ROOT)/src/alt_getpid.c \ - $(hal_SRCS_ROOT)/src/alt_gettod.c \ - $(hal_SRCS_ROOT)/src/alt_iic_isr_register.c \ - $(hal_SRCS_ROOT)/src/alt_instruction_exception_register.c \ - $(hal_SRCS_ROOT)/src/alt_ioctl.c \ - $(hal_SRCS_ROOT)/src/alt_io_redirect.c \ - $(hal_SRCS_ROOT)/src/alt_irq_handler.c \ - $(hal_SRCS_ROOT)/src/alt_isatty.c \ - $(hal_SRCS_ROOT)/src/alt_kill.c \ - $(hal_SRCS_ROOT)/src/alt_link.c \ - $(hal_SRCS_ROOT)/src/alt_load.c \ - $(hal_SRCS_ROOT)/src/alt_log_printf.c \ - $(hal_SRCS_ROOT)/src/alt_lseek.c \ - $(hal_SRCS_ROOT)/src/alt_main.c \ - $(hal_SRCS_ROOT)/src/alt_malloc_lock.c \ - $(hal_SRCS_ROOT)/src/alt_open.c \ - $(hal_SRCS_ROOT)/src/alt_printf.c \ - $(hal_SRCS_ROOT)/src/alt_putchar.c \ - $(hal_SRCS_ROOT)/src/alt_putcharbuf.c \ - $(hal_SRCS_ROOT)/src/alt_putstr.c \ - $(hal_SRCS_ROOT)/src/alt_read.c \ - $(hal_SRCS_ROOT)/src/alt_release_fd.c \ - $(hal_SRCS_ROOT)/src/alt_rename.c \ - $(hal_SRCS_ROOT)/src/alt_sbrk.c \ - $(hal_SRCS_ROOT)/src/alt_settod.c \ - $(hal_SRCS_ROOT)/src/alt_stat.c \ - $(hal_SRCS_ROOT)/src/alt_tick.c \ - $(hal_SRCS_ROOT)/src/alt_times.c \ - $(hal_SRCS_ROOT)/src/alt_unlink.c \ - $(hal_SRCS_ROOT)/src/alt_wait.c \ - $(hal_SRCS_ROOT)/src/alt_write.c # i2c_opencores_driver sources root i2c_opencores_driver_SRCS_ROOT := drivers @@ -339,11 +267,6 @@ i2c_opencores_driver_C_LIB_SRCS := \ # nios2_hw_crc32_driver sources root nios2_hw_crc32_driver_SRCS_ROOT := drivers -# nios2_hw_crc32_driver sources -nios2_hw_crc32_driver_C_LIB_SRCS := \ - $(nios2_hw_crc32_driver_SRCS_ROOT)/src/ci_crc.c \ - $(nios2_hw_crc32_driver_SRCS_ROOT)/src/crc.c - # Assemble all component C source files COMPONENT_C_LIB_SRCS += \ @@ -444,8 +367,7 @@ GENERATED_H_FILES := $(ABS_BSP_ROOT)/system.h GENERATED_LINKER_SCRIPT := $(ABS_BSP_ROOT)/linker.x -GENERATED_FILES += $(GENERATED_H_FILES) \ - $(GENERATED_LINKER_SCRIPT) +GENERATED_FILES += $(GENERATED_H_FILES) #------------------------------------------------------------------------------ diff --git a/software/sys_controller_bsp/alt_sys_init.c b/software/sys_controller_bsp/alt_sys_init.c index 562b9ae..ea8e0b6 100644 --- a/software/sys_controller_bsp/alt_sys_init.c +++ b/software/sys_controller_bsp/alt_sys_init.c @@ -49,7 +49,7 @@ */ #include "system.h" -#include "sys/alt_irq.h" +//#include "sys/alt_irq.h" #include "sys/alt_sys_init.h" #include @@ -58,7 +58,7 @@ * Device headers */ -#include "altera_nios2_gen2_irq.h" +//#include "altera_nios2_gen2_irq.h" #include "altera_avalon_jtag_uart.h" #include "altera_avalon_timer.h" #include "altera_epcq_controller_mod.h" @@ -68,7 +68,7 @@ * Allocate the device storage */ -ALTERA_NIOS2_GEN2_IRQ_INSTANCE ( NIOS2_QSYS_0, nios2_qsys_0); +//ALTERA_NIOS2_GEN2_IRQ_INSTANCE ( NIOS2_QSYS_0, nios2_qsys_0); ALTERA_AVALON_JTAG_UART_INSTANCE ( JTAG_UART_0, jtag_uart_0); ALTERA_AVALON_TIMER_INSTANCE ( TIMER_0, timer_0); ALTERA_EPCQ_CONTROLLER_MOD_AVL_MEM_AVL_CSR_INSTANCE ( EPCQ_CONTROLLER_0, EPCQ_CONTROLLER_0_AVL_MEM, EPCQ_CONTROLLER_0_AVL_CSR, epcq_controller_0); @@ -83,11 +83,11 @@ I2C_OPENCORES_INSTANCE ( I2C_OPENCORES_1, i2c_opencores_1); * present for backwards-compatibility. */ -void alt_irq_init ( const void* base ) +/*void alt_irq_init ( const void* base ) { ALTERA_NIOS2_GEN2_IRQ_INIT ( NIOS2_QSYS_0, nios2_qsys_0); alt_irq_cpu_enable_interrupts(); -} +}*/ /* * Initialize the non-interrupt controller devices. diff --git a/software/sys_controller_bsp/drivers/src/altera_avalon_jtag_uart_init.c b/software/sys_controller_bsp/drivers/src/altera_avalon_jtag_uart_init.c index 7317bec..b08f1f7 100644 --- a/software/sys_controller_bsp/drivers/src/altera_avalon_jtag_uart_init.c +++ b/software/sys_controller_bsp/drivers/src/altera_avalon_jtag_uart_init.c @@ -35,7 +35,7 @@ #include -#include "sys/alt_irq.h" +//#include "sys/alt_irq.h" #include "sys/alt_alarm.h" #include "sys/ioctl.h" #include "alt_types.h" diff --git a/software/sys_controller_bsp/drivers/src/altera_avalon_jtag_uart_read.c b/software/sys_controller_bsp/drivers/src/altera_avalon_jtag_uart_read.c index 5657adb..bf4a916 100644 --- a/software/sys_controller_bsp/drivers/src/altera_avalon_jtag_uart_read.c +++ b/software/sys_controller_bsp/drivers/src/altera_avalon_jtag_uart_read.c @@ -35,7 +35,7 @@ #include -#include "sys/alt_irq.h" +//#include "sys/alt_irq.h" #include "sys/alt_alarm.h" #include "sys/ioctl.h" #include "alt_types.h" diff --git a/software/sys_controller_bsp/drivers/src/altera_avalon_jtag_uart_write.c b/software/sys_controller_bsp/drivers/src/altera_avalon_jtag_uart_write.c index cf41ba8..2cfc417 100644 --- a/software/sys_controller_bsp/drivers/src/altera_avalon_jtag_uart_write.c +++ b/software/sys_controller_bsp/drivers/src/altera_avalon_jtag_uart_write.c @@ -35,7 +35,7 @@ #include -#include "sys/alt_irq.h" +//#include "sys/alt_irq.h" #include "sys/alt_alarm.h" #include "sys/ioctl.h" #include "alt_types.h" diff --git a/software/sys_controller_bsp/libhal_bsp.a b/software/sys_controller_bsp/libhal_bsp.a index 39829ddae6bc4ccb4215f5bac0cf78bd04751c7e..b07326cbd18f87a400ce0f0653d752f077231182 100644 GIT binary patch literal 27058 zcmeHQ3v`v$l|DDgO#+0P2O?r}&saZ;;<|#D+;hb!xvY%FJ@{J};?Nw^posp1Nrqo53DOK>AQiVxM6}_WW zDe#JCBH`jMD8*2ZycZ$9u`&`qjWQTk7R3%Nh(9$nw}t#`Hg<3Jcee$D8x+Zw;5GiX zw$|>DzqO+~*cDR#mQH^l)Y;Xou@;R{Fc=8<*EWZm+x)>zf#8NvYiEbQE4U6RgIzkO z2se2yRL9?ZO>-MsClb>YMD5n< zszi;ywyQN198G{3#LQi%)^8AMZ4Y*bn%g({@fUr`ehc$PQhe>JU0G7J%OC0aBVETSR7H7(!&^O`eG;+3qRwK?ahsv=Bc>EqeTjm-hPpNe zv>}Eg{XwYaW)ZRNU?fj;UARJPYdD2z48mbY)!?-)qs6khM~&|cgxW?EV4sW@ulwax z0a55!G1oMAbz5<6Eotx6g%%sfAMRCqWWXqZ*zn)V3UqX7S(%e!_4t3OZ(Qi{crZX1 z@TlLZ2⋙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 diff --git a/software/sys_controller_bsp/public.mk b/software/sys_controller_bsp/public.mk index cff38a9..34bc070 100644 --- a/software/sys_controller_bsp/public.mk +++ b/software/sys_controller_bsp/public.mk @@ -19,7 +19,7 @@ # Path to the provided linker script. -BSP_LINKER_SCRIPT := $(ALT_LIBRARY_ROOT_DIR)/linker.x +BSP_LINKER_SCRIPT := link.riscv.ld # Include paths: # The path to root of all header files that a library wishes to make @@ -119,15 +119,15 @@ ELF_PATCH_FLAG += --cpu_name $(CPU_NAME) # Hardware Divider present. # setting HARDWARE_DIVIDE is false -ALT_CFLAGS += -mno-hw-div +#ALT_CFLAGS += -mno-hw-div # Hardware Multiplier present. # setting HARDWARE_MULTIPLY is false -ALT_CFLAGS += -mno-hw-mul +#ALT_CFLAGS += -mno-hw-mul # Hardware Mulx present. # setting HARDWARE_MULX is false -ALT_CFLAGS += -mno-hw-mulx +#ALT_CFLAGS += -mno-hw-mulx # Debug Core present. # setting HAS_DEBUG_CORE is true @@ -258,7 +258,8 @@ ALT_CPPFLAGS += -DSMALL_C_LIB # generate GP-relative accesses for small data objects that are external, weak, # or common. none # setting hal.make.cflags_mgpopt is -mgpopt=global -ALT_CFLAGS += -mgpopt=global +#ALT_CFLAGS += -mgpopt=global +ALT_CFLAGS += -march=rv32imc -mabi=ilp32 # Enable BSP generation to query if SOPC system is big endian. If true ignores # export of 'ALT_CFLAGS += -meb' to public.mk if big endian system. none diff --git a/software/sys_controller_bsp/settings.bsp b/software/sys_controller_bsp/settings.bsp index 9476c51..6657c70 100644 --- a/software/sys_controller_bsp/settings.bsp +++ b/software/sys_controller_bsp/settings.bsp @@ -2,8 +2,8 @@ hal default - Apr 18, 2018 10:30:05 PM - 1524079805195 + Sep 25, 2018 9:18:49 PM + 1537899529022 ./ settings.bsp ../../sys.sopcinfo diff --git a/software/sys_controller_bsp/system.h b/software/sys_controller_bsp/system.h index 3b8af96..e07c2c7 100644 --- a/software/sys_controller_bsp/system.h +++ b/software/sys_controller_bsp/system.h @@ -133,14 +133,18 @@ * */ -#define ALT_CI_NIOS2_HW_CRC32_0(n,A) __builtin_custom_ini(ALT_CI_NIOS2_HW_CRC32_0_N+(n&ALT_CI_NIOS2_HW_CRC32_0_N_MASK),(A)) +//#define ALT_CI_NIOS2_HW_CRC32_0(n,A) __builtin_custom_ini(ALT_CI_NIOS2_HW_CRC32_0_N+(n&ALT_CI_NIOS2_HW_CRC32_0_N_MASK),(A)) #define ALT_CI_NIOS2_HW_CRC32_0_N 0x0 #define ALT_CI_NIOS2_HW_CRC32_0_N_MASK ((1<<3)-1) -#define ALT_CI_NIOS_CUSTOM_INSTR_BITSWAP_0(A) __builtin_custom_ini(ALT_CI_NIOS_CUSTOM_INSTR_BITSWAP_0_N,(A)) +//#define ALT_CI_NIOS_CUSTOM_INSTR_BITSWAP_0(A) __builtin_custom_ini(ALT_CI_NIOS_CUSTOM_INSTR_BITSWAP_0_N,(A)) #define ALT_CI_NIOS_CUSTOM_INSTR_BITSWAP_0_N 0x9 -#define ALT_CI_NIOS_CUSTOM_INSTR_ENDIANCONVERTER_0(A) __builtin_custom_ini(ALT_CI_NIOS_CUSTOM_INSTR_ENDIANCONVERTER_0_N,(A)) +//#define ALT_CI_NIOS_CUSTOM_INSTR_ENDIANCONVERTER_0(A) __builtin_custom_ini(ALT_CI_NIOS_CUSTOM_INSTR_ENDIANCONVERTER_0_N,(A)) #define ALT_CI_NIOS_CUSTOM_INSTR_ENDIANCONVERTER_0_N 0x8 +#define ALT_CI_NIOS2_HW_CRC32_0(n,A) n +#define ALT_CI_NIOS_CUSTOM_INSTR_BITSWAP_0(A) A +#define ALT_CI_NIOS_CUSTOM_INSTR_ENDIANCONVERTER_0(A) A + /* * Define for each module class mastered by the CPU