aboutsummaryrefslogtreecommitdiffstats
path: root/roms/u-boot/board/emulation/qemu-riscv
diff options
context:
space:
mode:
Diffstat (limited to 'roms/u-boot/board/emulation/qemu-riscv')
-rw-r--r--roms/u-boot/board/emulation/qemu-riscv/Kconfig68
-rw-r--r--roms/u-boot/board/emulation/qemu-riscv/MAINTAINERS11
-rw-r--r--roms/u-boot/board/emulation/qemu-riscv/Makefile5
-rw-r--r--roms/u-boot/board/emulation/qemu-riscv/qemu-riscv.c71
4 files changed, 155 insertions, 0 deletions
diff --git a/roms/u-boot/board/emulation/qemu-riscv/Kconfig b/roms/u-boot/board/emulation/qemu-riscv/Kconfig
new file mode 100644
index 000000000..0818048ba
--- /dev/null
+++ b/roms/u-boot/board/emulation/qemu-riscv/Kconfig
@@ -0,0 +1,68 @@
+if TARGET_QEMU_VIRT
+
+config SYS_BOARD
+ default "qemu-riscv"
+
+config SYS_VENDOR
+ default "emulation"
+
+config SYS_CPU
+ default "generic"
+
+config SYS_CONFIG_NAME
+ default "qemu-riscv"
+
+config SYS_TEXT_BASE
+ default 0x81200000 if SPL
+ default 0x80000000 if !RISCV_SMODE
+ default 0x80200000 if RISCV_SMODE && ARCH_RV64I
+ default 0x80400000 if RISCV_SMODE && ARCH_RV32I
+
+config SPL_TEXT_BASE
+ default 0x80000000
+
+config SPL_OPENSBI_LOAD_ADDR
+ hex
+ default 0x81000000
+
+config BOARD_SPECIFIC_OPTIONS # dummy
+ def_bool y
+ select GENERIC_RISCV
+ select SUPPORT_SPL
+ imply AHCI
+ imply SMP
+ imply BOARD_LATE_INIT
+ imply PCI_INIT_R
+ imply SPL_RAM_SUPPORT
+ imply SPL_RAM_DEVICE
+ imply CMD_PCI
+ imply CMD_POWEROFF
+ imply CMD_SCSI
+ imply CMD_PING
+ imply CMD_EXT2
+ imply CMD_EXT4
+ imply CMD_FAT
+ imply CMD_FS_GENERIC
+ imply DOS_PARTITION
+ imply ISO_PARTITION
+ imply EFI_PARTITION
+ imply SCSI_AHCI
+ imply AHCI_PCI
+ imply E1000
+ imply NVME
+ imply PCI
+ imply DM_PCI
+ imply PCIE_ECAM_GENERIC
+ imply SCSI
+ imply DM_SCSI
+ imply SYS_NS16550
+ imply SIFIVE_SERIAL
+ imply SYSRESET
+ imply SYSRESET_CMD_POWEROFF
+ imply SYSRESET_SYSCON
+ imply VIRTIO_MMIO
+ imply VIRTIO_PCI
+ imply VIRTIO_NET
+ imply VIRTIO_BLK
+
+endif
diff --git a/roms/u-boot/board/emulation/qemu-riscv/MAINTAINERS b/roms/u-boot/board/emulation/qemu-riscv/MAINTAINERS
new file mode 100644
index 000000000..78969ed6b
--- /dev/null
+++ b/roms/u-boot/board/emulation/qemu-riscv/MAINTAINERS
@@ -0,0 +1,11 @@
+QEMU RISC-V 'VIRT' BOARD
+M: Bin Meng <bmeng.cn@gmail.com>
+S: Maintained
+F: board/emulation/qemu-riscv/
+F: include/configs/qemu-riscv.h
+F: configs/qemu-riscv32_defconfig
+F: configs/qemu-riscv32_smode_defconfig
+F: configs/qemu-riscv32_spl_defconfig
+F: configs/qemu-riscv64_defconfig
+F: configs/qemu-riscv64_smode_defconfig
+F: configs/qemu-riscv64_spl_defconfig
diff --git a/roms/u-boot/board/emulation/qemu-riscv/Makefile b/roms/u-boot/board/emulation/qemu-riscv/Makefile
new file mode 100644
index 000000000..3f29b90a4
--- /dev/null
+++ b/roms/u-boot/board/emulation/qemu-riscv/Makefile
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0+
+#
+# Copyright (C) 2018, Bin Meng <bmeng.cn@gmail.com>
+
+obj-y += qemu-riscv.o
diff --git a/roms/u-boot/board/emulation/qemu-riscv/qemu-riscv.c b/roms/u-boot/board/emulation/qemu-riscv/qemu-riscv.c
new file mode 100644
index 000000000..dcfd3f20b
--- /dev/null
+++ b/roms/u-boot/board/emulation/qemu-riscv/qemu-riscv.c
@@ -0,0 +1,71 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2018, Bin Meng <bmeng.cn@gmail.com>
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <env.h>
+#include <fdtdec.h>
+#include <image.h>
+#include <log.h>
+#include <spl.h>
+#include <init.h>
+#include <virtio_types.h>
+#include <virtio.h>
+
+int board_init(void)
+{
+ /*
+ * Make sure virtio bus is enumerated so that peripherals
+ * on the virtio bus can be discovered by their drivers
+ */
+ virtio_init();
+
+ return 0;
+}
+
+int board_late_init(void)
+{
+ ulong kernel_start;
+ ofnode chosen_node;
+ int ret;
+
+ chosen_node = ofnode_path("/chosen");
+ if (!ofnode_valid(chosen_node)) {
+ debug("No chosen node found, can't get kernel start address\n");
+ return 0;
+ }
+
+#ifdef CONFIG_ARCH_RV64I
+ ret = ofnode_read_u64(chosen_node, "riscv,kernel-start",
+ (u64 *)&kernel_start);
+#else
+ ret = ofnode_read_u32(chosen_node, "riscv,kernel-start",
+ (u32 *)&kernel_start);
+#endif
+ if (ret) {
+ debug("Can't find kernel start address in device tree\n");
+ return 0;
+ }
+
+ env_set_hex("kernel_start", kernel_start);
+
+ return 0;
+}
+
+#ifdef CONFIG_SPL
+u32 spl_boot_device(void)
+{
+ /* RISC-V QEMU only supports RAM as SPL boot device */
+ return BOOT_DEVICE_RAM;
+}
+#endif
+
+#ifdef CONFIG_SPL_LOAD_FIT
+int board_fit_config_name_match(const char *name)
+{
+ /* boot using first FIT config */
+ return 0;
+}
+#endif