initial commit

This commit is contained in:
Howard Mao
2016-10-21 16:03:26 -07:00
commit 7074420aba
17 changed files with 274 additions and 0 deletions

2
bootrom/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
*.elf
*.dump

16
bootrom/Makefile Normal file
View File

@@ -0,0 +1,16 @@
bootrom_img = bootrom.img
GCC=riscv64-unknown-elf-gcc
OBJCOPY=riscv64-unknown-elf-objcopy
OBJDUMP=riscv64-unknown-elf-objdump
all: $(bootrom_img)
%.img: %.elf
$(OBJCOPY) -O binary --change-addresses=-0x1000 --only-section .text $< $@
%.elf: %.S linker.ld
$(GCC) -Tlinker.ld $< -nostdlib -static -o $@
%.dump: %.elf
$(OBJDUMP) -d $< > $@

35
bootrom/bootrom.S Normal file
View File

@@ -0,0 +1,35 @@
.text
.global _start
_start:
// This boot ROM doesn't know about any boot devices, so it just spins,
// waiting for the serial interface to load the program and interrupt it
j setup_wfi_loop // reset vector
.word 0 // reserved
.word 0 // reserved
.word 0 // pointer to config string
default_trap_vec:
j boot_trap // default trap vector
.word 0
.word 0
.word 0
setup_wfi_loop:
la a0, default_trap_vec
csrw mtvec, a0
li a0, 8 // MIE or MSIP bit
csrw mie, a0 // set only MSIP in mie CSR
csrw mideleg, zero // no delegation
csrs mstatus, a0 // set MIE in mstatus CSR
wfi_loop:
wfi
j wfi_loop
boot_trap:
csrr a0, mhartid
sll a0, a0, 2 // offset for hart msip
li a1, 0x2000000 // base address of clint
add a0, a0, a1
sw zero, 0(a0) // clear the interrupt
li a0, 0x80000000 // program reset vector
csrw mepc, a0 // return from interrupt to start of user program
mret

BIN
bootrom/bootrom.img Executable file

Binary file not shown.

5
bootrom/linker.ld Normal file
View File

@@ -0,0 +1,5 @@
SECTIONS
{
. = 0x1000;
.text : { *(.text) }
}