diff --git a/README.md b/README.md index d58bc4e..2395012 100644 --- a/README.md +++ b/README.md @@ -115,7 +115,7 @@ line, the platform-specific static library *libplatsbi.a* and firmware examples are built for the platform ** present in the directory *platform* in the OpenSBI top directory. For example, to compile the platform library and the firmware examples for the QEMU RISC-V *virt* machine, -** should be *qemu/virt*. +** should be *generic*. To build *libsbi.a*, *libplatsbi.a* and the firmware for one of the supported platforms, run: diff --git a/docs/platform/generic.md b/docs/platform/generic.md index 73b6fca..f4281a2 100644 --- a/docs/platform/generic.md +++ b/docs/platform/generic.md @@ -39,4 +39,6 @@ The *Generic* platform does not have any platform-specific options. RISC-V Platforms Using Generic Platform --------------------------------------- -To be added later. +* **QEMU RISC-V Virt Machine** (*[qemu_virt.md]*) + +[qemu_virt.md]: qemu_virt.md diff --git a/docs/platform/qemu_virt.md b/docs/platform/qemu_virt.md index 6d8a3d0..2196e5a 100644 --- a/docs/platform/qemu_virt.md +++ b/docs/platform/qemu_virt.md @@ -7,7 +7,7 @@ software development and testing. It is also referred to as storage, and other types of IO. To build the platform-specific library and firmware images, provide the -*PLATFORM=qemu/virt* parameter to the top level `make` command. +*PLATFORM=generic* parameter to the top level `make` command. Platform Options ---------------- @@ -22,13 +22,13 @@ Execution on QEMU RISC-V 64-bit Build: ``` -make PLATFORM=qemu/virt +make PLATFORM=generic ``` Run: ``` qemu-system-riscv64 -M virt -m 256M -nographic \ - -kernel build/platform/qemu/virt/firmware/fw_payload.elf + -kernel build/platform/generic/firmware/fw_payload.bin ``` **U-Boot Payload** @@ -38,19 +38,19 @@ the `qemu-riscv64_smode_defconfig` configuration. Build: ``` -make PLATFORM=qemu/virt FW_PAYLOAD_PATH=/u-boot.bin +make PLATFORM=generic FW_PAYLOAD_PATH=/u-boot.bin ``` Run: ``` qemu-system-riscv64 -M virt -m 256M -nographic \ - -kernel build/platform/qemu/virt/firmware/fw_payload.elf + -kernel build/platform/generic/firmware/fw_payload.elf ``` or ``` qemu-system-riscv64 -M virt -m 256M -nographic \ - -kernel build/platform/qemu/virt/firmware/fw_jump.elf \ - -device loader,file=/u-boot.bin,addr=0x80200000 + -bios build/platform/generic/firmware/fw_jump.bin \ + -kernel /u-boot.bin ``` **Linux Kernel Payload** @@ -60,13 +60,13 @@ Note: We assume that the Linux kernel is compiled using Build: ``` -make PLATFORM=qemu/virt FW_PAYLOAD_PATH=/arch/riscv/boot/Image +make PLATFORM=generic FW_PAYLOAD_PATH=/arch/riscv/boot/Image ``` Run: ``` qemu-system-riscv64 -M virt -m 256M -nographic \ - -kernel build/platform/qemu/virt/firmware/fw_payload.elf \ + -kernel build/platform/generic/firmware/fw_payload.elf \ -drive file=,format=raw,id=hd0 \ -device virtio-blk-device,drive=hd0 \ -append "root=/dev/vda rw console=ttyS0" @@ -74,8 +74,8 @@ qemu-system-riscv64 -M virt -m 256M -nographic \ or ``` qemu-system-riscv64 -M virt -m 256M -nographic \ - -kernel build/platform/qemu/virt/firmware/fw_jump.elf \ - -device loader,file=/arch/riscv/boot/Image,addr=0x80200000 \ + -bios build/platform/generic/firmware/fw_jump.bin \ + -kernel /arch/riscv/boot/Image \ -drive file=,format=raw,id=hd0 \ -device virtio-blk-device,drive=hd0 \ -append "root=/dev/vda rw console=ttyS0" @@ -89,13 +89,13 @@ Execution on QEMU RISC-V 32-bit Build: ``` -make PLATFORM=qemu/virt +make PLATFORM=generic PLATFORM_RISCV_XLEN=32 ``` Run: ``` qemu-system-riscv32 -M virt -m 256M -nographic \ - -kernel build/platform/qemu/virt/firmware/fw_payload.elf + -kernel build/platform/generic/firmware/fw_payload.bin ``` **U-Boot Payload** @@ -105,37 +105,35 @@ the `qemu-riscv32_smode_defconfig` configuration. Build: ``` -make PLATFORM=qemu/virt FW_PAYLOAD_PATH=/u-boot.bin +make PLATFORM=generic PLATFORM_RISCV_XLEN=32 FW_PAYLOAD_PATH=/u-boot.bin ``` Run: ``` qemu-system-riscv32 -M virt -m 256M -nographic \ - -kernel build/platform/qemu/virt/firmware/fw_payload.elf + -kernel build/platform/generic/firmware/fw_payload.elf ``` or ``` qemu-system-riscv32 -M virt -m 256M -nographic \ - -kernel build/platform/qemu/virt/firmware/fw_jump.elf \ - -device loader,file=/u-boot.bin,addr=0x80400000 + -bios build/platform/generic/firmware/fw_jump.bin \ + -kernel /u-boot.bin ``` **Linux Kernel Payload** Note: We assume that the Linux kernel is compiled using -*arch/riscv/configs/rv32_defconfig* (kernel 5.1 and newer) -respectively using *arch/riscv/configs/defconfig* plus setting -CONFIG_ARCH_RV32I=y (kernel 5.0 and older). +*arch/riscv/configs/rv32_defconfig*. Build: ``` -make PLATFORM=qemu/virt FW_PAYLOAD_PATH=/arch/riscv/boot/Image +make PLATFORM=generic PLATFORM_RISCV_XLEN=32 FW_PAYLOAD_PATH=/arch/riscv/boot/Image ``` Run: ``` qemu-system-riscv32 -M virt -m 256M -nographic \ - -kernel build/platform/qemu/virt/firmware/fw_payload.elf \ + -kernel build/platform/generic/firmware/fw_payload.elf \ -drive file=,format=raw,id=hd0 \ -device virtio-blk-device,drive=hd0 \ -append "root=/dev/vda rw console=ttyS0" @@ -143,8 +141,8 @@ qemu-system-riscv32 -M virt -m 256M -nographic \ or ``` qemu-system-riscv32 -M virt -m 256M -nographic \ - -kernel build/platform/qemu/virt/firmware/fw_jump.elf \ - -device loader,file=/arch/riscv/boot/Image,addr=0x80400000 \ + -bios build/platform/generic/firmware/fw_jump.bin \ + -kernel /arch/riscv/boot/Image \ -drive file=,format=raw,id=hd0 \ -device virtio-blk-device,drive=hd0 \ -append "root=/dev/vda rw console=ttyS0" diff --git a/platform/qemu/virt/config.mk b/platform/qemu/virt/config.mk deleted file mode 100644 index 025cd61..0000000 --- a/platform/qemu/virt/config.mk +++ /dev/null @@ -1,40 +0,0 @@ -# -# SPDX-License-Identifier: BSD-2-Clause -# -# Copyright (c) 2019 Western Digital Corporation or its affiliates. -# -# Authors: -# Anup Patel -# - -# Compiler flags -platform-cppflags-y = -platform-cflags-y = -platform-asflags-y = -platform-ldflags-y = - -# Command for platform specific "make run" -platform-runcmd = qemu-system-riscv$(PLATFORM_RISCV_XLEN) -M virt -m 256M \ - -nographic -kernel $(build_dir)/platform/qemu/virt/firmware/fw_payload.elf - -# Blobs to build -FW_TEXT_START=0x80000000 -FW_DYNAMIC=y -FW_JUMP=y -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=0x82200000 -FW_PAYLOAD=y -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=0x82200000 diff --git a/platform/qemu/virt/objects.mk b/platform/qemu/virt/objects.mk deleted file mode 100644 index c382cbf..0000000 --- a/platform/qemu/virt/objects.mk +++ /dev/null @@ -1,10 +0,0 @@ -# -# SPDX-License-Identifier: BSD-2-Clause -# -# Copyright (c) 2019 Western Digital Corporation or its affiliates. -# -# Authors: -# Anup Patel -# - -platform-objs-y += platform.o diff --git a/platform/qemu/virt/platform.c b/platform/qemu/virt/platform.c deleted file mode 100644 index 7836bee..0000000 --- a/platform/qemu/virt/platform.c +++ /dev/null @@ -1,135 +0,0 @@ -/* - * SPDX-License-Identifier: BSD-2-Clause - * - * Copyright (c) 2019 Western Digital Corporation or its affiliates. - * - * Authors: - * Anup Patel - * Nick Kossifidis - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* clang-format off */ - -#define VIRT_HART_COUNT 8 - -#define VIRT_TEST_ADDR 0x100000 - -#define VIRT_CLINT_ADDR 0x2000000 - -#define VIRT_PLIC_ADDR 0xc000000 -#define VIRT_PLIC_NUM_SOURCES 127 -#define VIRT_PLIC_NUM_PRIORITIES 7 - -#define VIRT_UART16550_ADDR 0x10000000 -#define VIRT_UART_BAUDRATE 115200 -#define VIRT_UART_SHIFTREG_ADDR 1843200 - -/* clang-format on */ - -static int virt_early_init(bool cold_boot) -{ - if (!cold_boot) - return 0; - - return sifive_test_init(VIRT_TEST_ADDR); -} - -static int virt_final_init(bool cold_boot) -{ - void *fdt; - - if (!cold_boot) - return 0; - - fdt = sbi_scratch_thishart_arg1_ptr(); - fdt_fixups(fdt); - - return 0; -} - -static int virt_console_init(void) -{ - return uart8250_init(VIRT_UART16550_ADDR, VIRT_UART_SHIFTREG_ADDR, - VIRT_UART_BAUDRATE, 0, 1); -} - -static int virt_irqchip_init(bool cold_boot) -{ - int rc; - u32 hartid = current_hartid(); - - if (cold_boot) { - rc = plic_cold_irqchip_init( - VIRT_PLIC_ADDR, VIRT_PLIC_NUM_SOURCES, VIRT_HART_COUNT); - if (rc) - return rc; - } - - return plic_warm_irqchip_init(hartid, (2 * hartid), (2 * hartid + 1)); -} - -static int virt_ipi_init(bool cold_boot) -{ - int rc; - - if (cold_boot) { - rc = clint_cold_ipi_init(VIRT_CLINT_ADDR, VIRT_HART_COUNT); - if (rc) - return rc; - } - - return clint_warm_ipi_init(); -} - -static int virt_timer_init(bool cold_boot) -{ - int rc; - - if (cold_boot) { - rc = clint_cold_timer_init(VIRT_CLINT_ADDR, - VIRT_HART_COUNT, TRUE); - if (rc) - return rc; - } - - return clint_warm_timer_init(); -} - -const struct sbi_platform_operations platform_ops = { - .early_init = virt_early_init, - .final_init = virt_final_init, - .console_putc = uart8250_putc, - .console_getc = uart8250_getc, - .console_init = virt_console_init, - .irqchip_init = virt_irqchip_init, - .ipi_send = clint_ipi_send, - .ipi_clear = clint_ipi_clear, - .ipi_init = virt_ipi_init, - .timer_value = clint_timer_value, - .timer_event_stop = clint_timer_event_stop, - .timer_event_start = clint_timer_event_start, - .timer_init = virt_timer_init, - .system_reset = sifive_test_system_reset, -}; - -const struct sbi_platform platform = { - .opensbi_version = OPENSBI_VERSION, - .platform_version = SBI_PLATFORM_VERSION(0x0, 0x01), - .name = "QEMU Virt Machine", - .features = SBI_PLATFORM_DEFAULT_FEATURES, - .hart_count = VIRT_HART_COUNT, - .hart_stack_size = SBI_PLATFORM_DEFAULT_HART_STACK_SIZE, - .platform_ops_addr = (unsigned long)&platform_ops -}; diff --git a/scripts/create-binary-archive.sh b/scripts/create-binary-archive.sh index c2575ab..32e53cf 100755 --- a/scripts/create-binary-archive.sh +++ b/scripts/create-binary-archive.sh @@ -95,14 +95,12 @@ build_opensbi() { case "${BUILD_RISCV_XLEN}" in 32) # Setup 32-bit platform list - BUILD_PLATFORM_SUBDIR=("qemu/virt") - BUILD_PLATFORM_SUBDIR+=("sifive/fu540") + BUILD_PLATFORM_SUBDIR=("sifive/fu540") BUILD_PLATFORM_SUBDIR+=("generic") ;; 64) # Setup 64-bit platform list - BUILD_PLATFORM_SUBDIR=("qemu/virt") - BUILD_PLATFORM_SUBDIR+=("sifive/fu540") + BUILD_PLATFORM_SUBDIR=("sifive/fu540") BUILD_PLATFORM_SUBDIR+=("nuclei/ux600") BUILD_PLATFORM_SUBDIR+=("kendryte/k210") BUILD_PLATFORM_SUBDIR+=("fpga/ariane")