RISC-V Server Platform Reference board (riscv-server-ref)

The RISC-V Server Platform specification spec defines a standardized set of hardware and software capabilities that portable system software, such as OS and hypervisors, can rely on being present in a RISC-V server platform. This machine aims to emulate this specification, providing an environment for firmware/OS development and testing.

spec is version 1.0 at the introduction of this board. For each new supported spec version a new versioned board will be added, keeping “riscv-server-ref” as an alias for the newest version supported. E.g. for spec version 2.0:

  • riscv-server-ref-1.0 - board that complies with spec version 1.0

  • riscv-server-ref-2.0 - board that complies with spec version 2.0

  • riscv-server-ref - alias for riscv-server-ref-2.0

The main features included in the riscv-server-ref board are:

  • IOMMU platform device (riscv-iommu-sys)

  • AIA

  • No AHCI (can be added via command line)

  • No NIC (can be added via command line)

  • No virtio mmio bus

  • No fw_cfg device

  • No ACPI table

  • Minimal device tree nodes

There are multiple ways of using this reference board. The spec compliant way is using an EDK2 image and a TPM device. The board was tested with the TPM device tpm-tis that uses the external swtpm emulator. More info on how to use this device can be found in tpm.

To use this board coupled with the tpm-tis device, first start the swtpm process in a shell (the log parameter is optional):

$ mkdir /tmp/mytpm1
$ swtpm socket --tpmstate dir=/tmp/mytpm1 \
        --ctrl type=unixio,path=/tmp/mytpm1/swtpm-sock \
        --tpm2 \
        --log level=20

And then start QEMU with:

qemu-system-riscv64 -M riscv-server-ref \
    -bios fw_dynamic.bin \
    -kernel EDK2.fd \
    -drive file=nvme_disk.ext2,format=raw,id=hd0,if=none \
    -device nvme,drive=hd0,serial=ddaaddaa \
    -chardev socket,id=chrtpm,path=/tmp/mytpm1/swtpm-sock \
    -tpmdev emulator,id=tpm0,chardev=chrtpm \
    -device tpm-tis-device,tpmdev=tpm0 \
    -netdev user,id=net0 -device e1000e,netdev=net0 \
    -nographic