summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/platform/sifive_fu540.md4
-rw-r--r--platform/sifive/fu540/config.mk16
2 files changed, 18 insertions, 2 deletions
diff --git a/docs/platform/sifive_fu540.md b/docs/platform/sifive_fu540.md
index 7b14001..065fd4d 100644
--- a/docs/platform/sifive_fu540.md
+++ b/docs/platform/sifive_fu540.md
@@ -193,5 +193,9 @@ generated by QEMU, and u-boot.bin should be used as the payload image, like:
make PLATFORM=sifive/fu540 FW_PAYLOAD_PATH=<u-boot_build_dir>/u-boot.bin
```
+While the real hardware operates at the 64-bit mode, it's possible for QEMU to
+test the 32-bit OpenSBI firmware. This can be helpful for testing 32-bit SiFive
+specific drivers.
+
[U-Boot]: https://gitlab.denx.de/u-boot/u-boot/blob/master/doc/board/sifive/fu540.rst
[FSBL]: https://github.com/sifive/freedom-u540-c000-bootloader
diff --git a/platform/sifive/fu540/config.mk b/platform/sifive/fu540/config.mk
index ad099cc..e76adcd 100644
--- a/platform/sifive/fu540/config.mk
+++ b/platform/sifive/fu540/config.mk
@@ -21,8 +21,20 @@ platform-runcmd = qemu-system-riscv$(PLATFORM_RISCV_XLEN) -M sifive_u -m 256M \
FW_TEXT_START=0x80000000
FW_DYNAMIC=y
FW_JUMP=y
-FW_JUMP_ADDR=0x80200000
+ifeq ($(PLATFORM_RISCV_XLEN), 32)
+ # This needs to be 4MB aligned for 32-bit system
+ FW_JUMP_ADDR=0x80400000
+else
+ # This needs to be 2MB aligned for 64-bit system
+ FW_JUMP_ADDR=0x80200000
+endif
FW_JUMP_FDT_ADDR=0x88000000
FW_PAYLOAD=y
-FW_PAYLOAD_OFFSET=0x200000
+ifeq ($(PLATFORM_RISCV_XLEN), 32)
+ # This needs to be 4MB aligned for 32-bit system
+ FW_PAYLOAD_OFFSET=0x400000
+else
+ # This needs to be 2MB aligned for 64-bit system
+ FW_PAYLOAD_OFFSET=0x200000
+endif
FW_PAYLOAD_FDT_ADDR=0x88000000