		Basic Firmware on Virt-v8 Guest

The basic firmware currently sets up PIC, Timer, and UART and emulates
a dummy terminal which reponds to various commands. It also includes an
extensive MMU test suite and dhrystone benchmark.

Hardware features tested by Basic Firmware:
  - Crucial EL1 instructions
  - Virtual IRQs
  - Generic Interrupt Controller (GIC)
  - ARMv8 Generic Timers
  - VirtIO console emergency write   

Please follow the steps below to build & run Basic Firmware on Virt-v8
Guest with Xvisor running on Foundation v8 Model:

  [1. Build environment for Xvisor]
  # CROSS_COMPILE=aarch64-linux-gnu-

  [2. GoTo Xvisor source directory]
  # cd <xvisor_source_directory>

  [3. Configure Xvisor with Generic-v8 default settings]
  # make ARCH=arm generic-v8-defconfig

  [4. Build Xvisor & DTBs]
  # make; make dtbs

  [5. Build Basic Firmware]
  # make -C tests/arm64/virt-v8/basic

  [6. Create disk image for Xvisor]
  # mkdir -p ./build/disk/images/arm64/virt-v8
  # ./build/tools/dtc/dtc -I dts -O dtb -o ./build/disk/images/arm64/virt-v8x2.dtb ./tests/arm64/virt-v8/virt-v8x2.dts
  # cp -f ./build/tests/arm64/virt-v8/basic/firmware.bin ./build/disk/images/arm64/virt-v8/firmware.bin
  # cp -f ./tests/arm64/virt-v8/basic/nor_flash.list ./build/disk/images/arm64/virt-v8/nor_flash.list
  # genext2fs -B 1024 -b 16384 -d ./build/disk ./build/disk.img

  [7. Create foundation_v8_boot.axf for running it on Foundation v8 Model]
  # ${CROSS_COMPILE}gcc -nostdlib -nostdinc -e _start -Wl,--build-id=none -Wl,-Ttext=0x80000000 -DGENTIMER_FREQ=100000000 -DUART_PL011 -DUART_PL011_BASE=0x1c090000 DGICv2 -DGIC_DIST_BASE=0x2c001000 -DGIC_CPU_BASE=0x2c002000 -DSPIN_LOOP_ADDR=0x8000fff8 -DIMAGE=./build/vmm.bin -DDTB=./build/arch/arm/board/generic/dts/foundation-v8/one_guest_virt-v8.dtb -DINITRD=./build/disk.img ./docs/arm/foundation_v8_boot.S -o ./build/foundation_v8_boot.axf

  [8. Launch Foundation v8 Model]
  # <foundation_v8_install_directory>/models/Linux64_GCC-<xxxx>/Foundation_v8 --image ./build/foundation_v8_boot.axf --network=nat

  [9. Kick Guest0 for starting Basic Firmware]
  XVisor# guest kick guest0

  [10. Bind to virtual UART]
  XVisor# vserial bind guest0/uart0

  [11. Say 'hi' to Basic Firmware]
  [guest0/uart0] basic# hi

  [12. Say 'hello' to Basic Firmware]
  [guest0/uart0] basic# hello

  [13. Check various commands of Basic Firmware]
  [guest0/uart0] basic# help

  [14. Enter character seqence 'ESCAPE+x+q" return to Xvisor prompt]
  [guest0/uart0] basic# 

  (Note: replace all <> brackets based on your workspace)

