diff options
Diffstat (limited to 'roms/u-boot/board/emulation/qemu-riscv')
-rw-r--r-- | roms/u-boot/board/emulation/qemu-riscv/Kconfig | 68 | ||||
-rw-r--r-- | roms/u-boot/board/emulation/qemu-riscv/MAINTAINERS | 11 | ||||
-rw-r--r-- | roms/u-boot/board/emulation/qemu-riscv/Makefile | 5 | ||||
-rw-r--r-- | roms/u-boot/board/emulation/qemu-riscv/qemu-riscv.c | 71 |
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 |