aboutsummaryrefslogtreecommitdiff
path: root/arch/riscv/bios
diff options
context:
space:
mode:
authorMiquel Sabaté Solà <mikisabate@gmail.com>2024-08-28 22:25:56 +0200
committerMiquel Sabaté Solà <mikisabate@gmail.com>2024-12-05 16:02:49 +0100
commitab03d3be21f229be8c28dba292d5da237a929a73 (patch)
tree8bc53e3031f644532fec255bb392a90cd4ad59fb /arch/riscv/bios
parent1a36e6211674f1a39c7cc0ddff705357a4add65a (diff)
downloadfarga-ab03d3be21f229be8c28dba292d5da237a929a73.tar.gz
farga-ab03d3be21f229be8c28dba292d5da237a929a73.zip
Restructure the whole thing
It will be something more than just messing around with RISC-V stuff. Signed-off-by: Miquel Sabaté Solà <mikisabate@gmail.com>
Diffstat (limited to 'arch/riscv/bios')
-rw-r--r--arch/riscv/bios/Makefile25
-rw-r--r--arch/riscv/bios/config.ld9
-rw-r--r--arch/riscv/bios/hello.s23
3 files changed, 57 insertions, 0 deletions
diff --git a/arch/riscv/bios/Makefile b/arch/riscv/bios/Makefile
new file mode 100644
index 0000000..60e3cc4
--- /dev/null
+++ b/arch/riscv/bios/Makefile
@@ -0,0 +1,25 @@
+NAME = hello
+
+CROSS_AS ?= riscv64-suse-linux-as
+CROSS_LD ?= riscv64-suse-linux-ld
+CROSS_DUMP ?= riscv64-suse-linux-objdump
+ASFLAGS = -march=rv64g -mabi=lp64
+
+EMU ?= qemu-system-riscv64
+
+##
+# Targets
+
+.PHONY: run
+run: clean build
+ $(CROSS_DUMP) -D $(NAME)
+ $(EMU) -machine virt -bios hello
+
+.PHONY: build
+build:
+ $(CROSS_AS) $(ASFLAGS) -o $(NAME).o -c $(NAME).s
+ $(CROSS_LD) -T config.ld $(NAME).o -o $(NAME)
+
+.PHONY: clean
+clean:
+ @rm -f $(NAME).o $(NAME)
diff --git a/arch/riscv/bios/config.ld b/arch/riscv/bios/config.ld
new file mode 100644
index 0000000..085caa3
--- /dev/null
+++ b/arch/riscv/bios/config.ld
@@ -0,0 +1,9 @@
+MEMORY {
+ dram_space (rwx) : ORIGIN = 0x80000000, LENGTH = 128
+}
+
+SECTIONS {
+ .text : {
+ hello.o(.text.bios)
+ } > dram_space
+}
diff --git a/arch/riscv/bios/hello.s b/arch/riscv/bios/hello.s
new file mode 100644
index 0000000..f3aa20a
--- /dev/null
+++ b/arch/riscv/bios/hello.s
@@ -0,0 +1,23 @@
+# From: https://github.com/qemu/qemu/blob/23fa74974d8c96bc95cbecc0d4e2d90f984939f6/hw/riscv/virt.c#L82.
+.set QEMU_UART0_ADDRESS, 0x10000000
+
+.global _start
+.section .text.bios
+
+_start: li a0, 0x68
+ li a1, QEMU_UART0_ADDRESS
+ sb a0, (a1) # 'h'
+
+ li a0, 0x65
+ sb a0, (a1) # 'e'
+
+ li a0, 0x6C
+ sb a0, (a1) # 'l'
+
+ li a0, 0x6C
+ sb a0, (a1) # 'l'
+
+ li a0, 0x6F
+ sb a0, (a1) # 'o'
+
+loop: j loop