diff --git a/docs/firmware/fw_jump.md b/docs/firmware/fw_jump.md index 21161b0..4faaf50 100644 --- a/docs/firmware/fw_jump.md +++ b/docs/firmware/fw_jump.md @@ -44,9 +44,8 @@ follows: *FW_JUMP* Example ----------------- -The *[qemu/virt]* and *[qemu/sifive_u]* platforms illustrate how to configure -and use a *FW_JUMP* firmware. Detailed information regarding these platforms -can be found in the platform documentation files. +The *[qemu/virt]* platform illustrates how to configure and use a *FW_JUMP* +firmware. Detailed information regarding these platforms can be found in the +platform documentation files. [qemu/virt]: ../platform/qemu_virt.md -[qemu/sifive_u]: ../platform/qemu_sifive_u.md diff --git a/docs/firmware/fw_payload.md b/docs/firmware/fw_payload.md index 1efe765..3fb3ffc 100644 --- a/docs/firmware/fw_payload.md +++ b/docs/firmware/fw_payload.md @@ -79,12 +79,11 @@ file. The parameters currently defined are as follows: *FW_PAYLOAD* Example -------------------- -The *[qemu/virt]* and *[qemu/sifive_u]* platforms illustrate how to configure -and use a *FW_PAYLOAD* firmware. Detailed information regarding these platforms -can be found in the platform documentation files. +The *[qemu/virt]* platforms illustrate how to configure and use a *FW_PAYLOAD* +firmware. Detailed information regarding these platforms can be found in the +platform documentation files. The *kendryte/k210* platform also enables a build of a *FW_PAYLOAD* using an internally defined device tree file (*FW_PAYLOAD_FDT*). [qemu/virt]: ../platform/qemu_virt.md -[qemu/sifive_u]: ../platform/qemu_sifive_u.md diff --git a/docs/platform/platform.md b/docs/platform/platform.md index 17cbfb8..d977646 100644 --- a/docs/platform/platform.md +++ b/docs/platform/platform.md @@ -8,14 +8,9 @@ OpenSBI currently supports the following virtual and hardware platforms: development and tests. More details on this platform can be found in the file *[qemu_virt.md]*. -* **QEMU SiFive Unleashed Machine**: Platform support for the *sifive_u* QEMU - virtual RISC-V machine. This is an emulation machine of the HiFive Unleashed - board by SiFive. More details on this platform can be found in the file - *[qemu_sifive_u.md]*. - * **SiFive FU540 SoC**: Platform support for SiFive FU540 SoC used on the - HiFive Unleashed board. This platform is very similar to the *QEMU sifive_u* - platform. More details on this platform can be found in the file + HiFive Unleashed board, as well as the *sifive_u* QEMU virtual RISC-V + machine. More details on this platform can be found in the file *[sifive_fu540.md]*. * **Kendryte K210 SoC**: Platform support for the Kendryte K210 SoC used on @@ -35,7 +30,6 @@ template files for implementing support for a new platform. The *object.mk*, facilitate the implementation. [qemu_virt.md]: qemu_virt.md -[qemu_sifive_u.md]: qemu_sifive_u.md [sifive_fu540.md]: sifive_fu540.md [ariane-fpga.md]: ariane-fpga.md [andes_ae350.md]: andes-ae350.md diff --git a/docs/platform/qemu_sifive_u.md b/docs/platform/qemu_sifive_u.md deleted file mode 100644 index b5c4f0e..0000000 --- a/docs/platform/qemu_sifive_u.md +++ /dev/null @@ -1,60 +0,0 @@ -QEMU SiFive Unleashed Machine Platform -====================================== - -The **QEMU SiFive Unleashed Machine** is an emulation of the SiFive Unleashed -platform. - -To build this platform specific library and firmwares, provide the -*PLATFORM=qemu/sifive_u* parameter to the top level `make` command line. - -Note with QEMU v4.2 release, the QEMU *sifive_u* machine has been updated to -closely match the SiFive HiFive Unleashed hardware and can therefore run the -same firmware as what gets loaded onto the board, and OpenSBI's *qemu/sifive_u* -platform should only be used with QEMU v4.1 release or before. - -The special *qemu/sifive_u* platform support will be dropped in the future -OpenSBI release. - -Platform Options ----------------- - -The *QEMU SiFive Unleashed Machine* platform does not have any platform specific -options. - -Executing on QEMU RISC-V 64-bit -------------------------------- - -**No Payload Case** - -Build: -``` -make PLATFORM=qemu/sifive_u -``` - -Run: -``` -qemu-system-riscv64 -M sifive_u -m 256M -display none -serial stdio \ - -kernel build/platform/qemu/sifive_u/firmware/fw_payload.elf -``` - -**U-Boot as a Payload** - -Note: the command line examples here assume that U-Boot was compiled using -the `sifive_fu540_defconfig` configuration. - -Build: -``` -make PLATFORM=qemu/sifive_u FW_PAYLOAD_PATH=/u-boot.bin -``` - -Run: -``` -qemu-system-riscv64 -M sifive_u -m 256M -display none -serial stdio \ - -kernel build/platform/qemu/sifive_u/firmware/fw_payload.elf -``` -or -``` -qemu-system-riscv64 -M sifive_u -m 256M -display none -serial stdio \ - -kernel build/platform/qemu/sifive_u/firmware/fw_jump.elf \ - -device loader,file=/u-boot.bin,addr=0x80200000 -``` diff --git a/platform/qemu/sifive_u/config.mk b/platform/qemu/sifive_u/config.mk deleted file mode 100644 index f66a555..0000000 --- a/platform/qemu/sifive_u/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 sifive_u -m 256M \ - -nographic -kernel $(build_dir)/platform/qemu/sifive_u/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 alligned for 32-bit system - FW_JUMP_ADDR=0x80400000 -else - # This needs to be 2MB alligned 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 alligned for 32-bit system - FW_PAYLOAD_OFFSET=0x400000 -else - # This needs to be 2MB alligned for 64-bit system - FW_PAYLOAD_OFFSET=0x200000 -endif -FW_PAYLOAD_FDT_ADDR=0x82200000 diff --git a/platform/qemu/sifive_u/objects.mk b/platform/qemu/sifive_u/objects.mk deleted file mode 100644 index c382cbf..0000000 --- a/platform/qemu/sifive_u/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/sifive_u/platform.c b/platform/qemu/sifive_u/platform.c deleted file mode 100644 index 47d6b23..0000000 --- a/platform/qemu/sifive_u/platform.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - * SPDX-License-Identifier: BSD-2-Clause - * - * Copyright (c) 2019 Western Digital Corporation or its affiliates. - * - * Authors: - * Anup Patel - */ - -#include -#include -#include -#include -#include -#include -#include - -/* clang-format off */ - -#define SIFIVE_U_HART_COUNT 4 -#define SIFIVE_U_HART_STACK_SIZE 8192 - -#define SIFIVE_U_SYS_CLK 1000000000 -#define SIFIVE_U_PERIPH_CLK (SIFIVE_U_SYS_CLK / 2) - -#define SIFIVE_U_CLINT_ADDR 0x2000000 - -#define SIFIVE_U_PLIC_ADDR 0xc000000 -#define SIFIVE_U_PLIC_NUM_SOURCES 0x35 -#define SIFIVE_U_PLIC_NUM_PRIORITIES 7 - -#define SIFIVE_U_UART0_ADDR 0x10010000 -#define SIFIVE_U_UART1_ADDR 0x10011000 - -/* clang-format on */ - -static int sifive_u_final_init(bool cold_boot) -{ - void *fdt; - - if (!cold_boot) - return 0; - - fdt = sbi_scratch_thishart_arg1_ptr(); - plic_fdt_fixup(fdt, "riscv,plic0"); - - return 0; -} - -static u32 sifive_u_pmp_region_count(u32 hartid) -{ - return 1; -} - -static int sifive_u_pmp_region_info(u32 hartid, u32 index, ulong *prot, - ulong *addr, ulong *log2size) -{ - int ret = 0; - - switch (index) { - case 0: - *prot = PMP_R | PMP_W | PMP_X; - *addr = 0; - *log2size = __riscv_xlen; - break; - default: - ret = -1; - break; - }; - - return ret; -} - -static int sifive_u_console_init(void) -{ - return sifive_uart_init(SIFIVE_U_UART0_ADDR, SIFIVE_U_PERIPH_CLK, - 115200); -} - -static int sifive_u_irqchip_init(bool cold_boot) -{ - int rc; - u32 hartid = sbi_current_hartid(); - - if (cold_boot) { - rc = plic_cold_irqchip_init(SIFIVE_U_PLIC_ADDR, - SIFIVE_U_PLIC_NUM_SOURCES, - SIFIVE_U_HART_COUNT); - if (rc) - return rc; - } - - return plic_warm_irqchip_init(hartid, (2 * hartid), (2 * hartid + 1)); -} - -static int sifive_u_ipi_init(bool cold_boot) -{ - int rc; - - if (cold_boot) { - rc = clint_cold_ipi_init(SIFIVE_U_CLINT_ADDR, - SIFIVE_U_HART_COUNT); - if (rc) - return rc; - } - - return clint_warm_ipi_init(); -} - -static int sifive_u_timer_init(bool cold_boot) -{ - int rc; - - if (cold_boot) { - rc = clint_cold_timer_init(SIFIVE_U_CLINT_ADDR, - SIFIVE_U_HART_COUNT, TRUE); - if (rc) - return rc; - } - - return clint_warm_timer_init(); -} - -static int sifive_u_system_down(u32 type) -{ - /* For now nothing to do. */ - return 0; -} - -const struct sbi_platform_operations platform_ops = { - .pmp_region_count = sifive_u_pmp_region_count, - .pmp_region_info = sifive_u_pmp_region_info, - .final_init = sifive_u_final_init, - .console_putc = sifive_uart_putc, - .console_getc = sifive_uart_getc, - .console_init = sifive_u_console_init, - .irqchip_init = sifive_u_irqchip_init, - .ipi_send = clint_ipi_send, - .ipi_clear = clint_ipi_clear, - .ipi_init = sifive_u_ipi_init, - .timer_value = clint_timer_value, - .timer_event_stop = clint_timer_event_stop, - .timer_event_start = clint_timer_event_start, - .timer_init = sifive_u_timer_init, - .system_reboot = sifive_u_system_down, - .system_shutdown = sifive_u_system_down -}; - -const struct sbi_platform platform = { - .opensbi_version = OPENSBI_VERSION, - .platform_version = SBI_PLATFORM_VERSION(0x0, 0x01), - .name = "QEMU SiFive Unleashed", - .features = SBI_PLATFORM_DEFAULT_FEATURES, - .hart_count = SIFIVE_U_HART_COUNT, - .hart_stack_size = SIFIVE_U_HART_STACK_SIZE, - .disabled_hart_mask = 0, - .platform_ops_addr = (unsigned long)&platform_ops -}; diff --git a/scripts/create-binary-archive.sh b/scripts/create-binary-archive.sh index 014dd55..3301cf2 100755 --- a/scripts/create-binary-archive.sh +++ b/scripts/create-binary-archive.sh @@ -85,12 +85,10 @@ case "${BUILD_RISCV_XLEN}" in 32) # Setup 32-bit platform list BUILD_PLATFORM_SUBDIR=("qemu/virt") - BUILD_PLATFORM_SUBDIR+=("qemu/sifive_u") ;; 64) # Setup 64-bit platform list BUILD_PLATFORM_SUBDIR=("qemu/virt") - BUILD_PLATFORM_SUBDIR+=("qemu/sifive_u") BUILD_PLATFORM_SUBDIR+=("sifive/fu540") BUILD_PLATFORM_SUBDIR+=("kendryte/k210") BUILD_PLATFORM_SUBDIR+=("ariane-fpga")