Skip to content

Commit 3eaea6e

Browse files
lbmengalistair23
authored andcommitted
hw/riscv: sifive_u: Add a dummy DDR memory controller device
It is enough to simply map the SiFive FU540 DDR memory controller into the MMIO space using create_unimplemented_device(), to make the upstream U-Boot v2020.07 DDR memory initialization codes happy. Note we do not generate device tree fragment for the DDR memory controller. Since the controller data in device tree consumes a very large space (see fu540-hifive-unleashed-a00-ddr.dtsi in the U-Boot source), and it is only needed by U-Boot SPL but not any operating system, we choose not to generate the fragment here. This also means when testing with U-Boot SPL, the device tree has to come from U-Boot SPL itself, but not the one generated by QEMU on the fly. The memory has to be set to 8GiB to match the real HiFive Unleashed board when invoking QEMU (-m 8G). With this commit, QEMU can boot U-Boot SPL built for SiFive FU540 all the way up to loading U-Boot proper from MMC: $ qemu-system-riscv64 -nographic -M sifive_u,msel=6 -m 8G -bios u-boot-spl.bin U-Boot SPL 2020.07-rc3-00208-g88bd5b1 (Jun 08 2020 - 20:16:10 +0800) Trying to boot from MMC1 Unhandled exception: Load access fault EPC: 0000000008009be6 TVAL: 0000000010050014 The above exception is expected because QSPI is unsupported yet. Signed-off-by: Bin Meng <[email protected]> Reviewed-by: Alistair Francis <[email protected]> Message-id: [email protected] Message-Id: <[email protected]> Signed-off-by: Alistair Francis <[email protected]>
1 parent 4909391 commit 3eaea6e

File tree

2 files changed

+5
-0
lines changed

2 files changed

+5
-0
lines changed

hw/riscv/sifive_u.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ static const struct MemmapEntry {
8282
[SIFIVE_U_OTP] = { 0x10070000, 0x1000 },
8383
[SIFIVE_U_GEM] = { 0x10090000, 0x2000 },
8484
[SIFIVE_U_GEM_MGMT] = { 0x100a0000, 0x1000 },
85+
[SIFIVE_U_DMC] = { 0x100b0000, 0x10000 },
8586
[SIFIVE_U_FLASH0] = { 0x20000000, 0x10000000 },
8687
[SIFIVE_U_DRAM] = { 0x80000000, 0x0 },
8788
};
@@ -714,6 +715,9 @@ static void sifive_u_soc_realize(DeviceState *dev, Error **errp)
714715

715716
create_unimplemented_device("riscv.sifive.u.gem-mgmt",
716717
memmap[SIFIVE_U_GEM_MGMT].base, memmap[SIFIVE_U_GEM_MGMT].size);
718+
719+
create_unimplemented_device("riscv.sifive.u.dmc",
720+
memmap[SIFIVE_U_DMC].base, memmap[SIFIVE_U_DMC].size);
717721
}
718722

719723
static Property sifive_u_soc_props[] = {

include/hw/riscv/sifive_u.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ enum {
7878
SIFIVE_U_UART1,
7979
SIFIVE_U_GPIO,
8080
SIFIVE_U_OTP,
81+
SIFIVE_U_DMC,
8182
SIFIVE_U_FLASH0,
8283
SIFIVE_U_DRAM,
8384
SIFIVE_U_GEM,

0 commit comments

Comments
 (0)