qemu/target/loongarch
Xiaojuan Yang fda3f15b00 hw/loongarch: Add fdt support
Add LoongArch flatted device tree, adding cpu device node, firmware cfg node,
pcie node into it, and create fdt rom memory region. Now fdt info is not
full since only uefi bios uses fdt, linux kernel does not use fdt.
Loongarch Linux kernel uses acpi table which is full in qemu virt
machine.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Xiaojuan Yang <yangxiaojuan@loongson.cn>
Message-Id: <20220712083206.4187715-7-yangxiaojuan@loongson.cn>
[rth: Set TARGET_NEED_FDT, add fdt to meson.build]
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2022-07-19 22:55:10 +05:30
..
insn_trans target/loongarch: Adjust functions and structure to support user-mode 2022-07-04 11:08:58 +05:30
constant_timer.c target/loongarch: Add constant timer support 2022-06-06 18:09:03 +00:00
cpu-csr.h target/loongarch: Add CSRs definition 2022-06-06 18:09:03 +00:00
cpu-param.h target/loongarch: Add MMU support for LoongArch CPU. 2022-06-06 18:09:03 +00:00
cpu.c hw/loongarch: Add fdt support 2022-07-19 22:55:10 +05:30
cpu.h hw/loongarch: Add fdt support 2022-07-19 22:55:10 +05:30
csr_helper.c target/loongarch: Add lock when writing timer clear reg 2022-07-04 11:08:58 +05:30
disas.c target/loongarch: Add timer related instructions support. 2022-06-06 18:09:03 +00:00
fpu_helper.c target/loongarch: Fix float_convd/float_convs test failing 2022-07-19 21:53:58 +05:30
gdbstub.c target/loongarch: remove badaddr from CPULoongArch 2022-07-04 11:08:58 +05:30
helper.h target/loongarch: Adjust functions and structure to support user-mode 2022-07-04 11:08:58 +05:30
insns.decode target/loongarch: Add timer related instructions support. 2022-06-06 18:09:03 +00:00
internals.h target/loongarch: Adjust functions and structure to support user-mode 2022-07-04 11:08:58 +05:30
iocsr_helper.c target/loongarch: Add LoongArch IOCSR instruction 2022-06-06 18:09:03 +00:00
Kconfig hw/loongarch: Add support loongson3 virt machine type. 2022-06-06 18:09:03 +00:00
machine.c target/loongarch: Add MMU support for LoongArch CPU. 2022-06-06 18:09:03 +00:00
meson.build target/loongarch: Add gdb support. 2022-06-06 18:14:13 +00:00
op_helper.c target/loongarch/op_helper: Fix coverity cond_at_most error 2022-07-19 21:53:58 +05:30
README target/loongarch: Update README 2022-07-04 11:08:58 +05:30
tlb_helper.c target/loongarch/tlb_helper: Fix coverity integer overflow error 2022-07-19 21:53:58 +05:30
translate.c target/loongarch: Add timer related instructions support. 2022-06-06 18:09:03 +00:00
translate.h target/loongarch: Add fixed point arithmetic instruction translation 2022-06-06 18:09:03 +00:00

- Introduction

  LoongArch is the general processor architecture of Loongson.

  The following versions of the LoongArch core are supported
    core: 3A5000
    https://github.com/loongson/LoongArch-Documentation/releases/download/2021.08.17/LoongArch-Vol1-v1.00-EN.pdf

  We can get the latest loongarch documents at https://github.com/loongson/LoongArch-Documentation/tags.


- System emulation

  Mainly emulate a virt 3A5000 board and ls7a bridge that is not exactly the same as the host.
  3A5000 support multiple interrupt cascading while here we just emulate the extioi interrupt
  cascading. LS7A1000 host bridge support multiple devices, such as sata, gmac, uart, rtc
  and so on. But we just realize the rtc. Others use the qemu common devices. It does not affect
  the general use. We also introduced the emulation of devices at docs/system/loongarch/loongson3.rst.

  This version only supports running binary files in ELF format, and does not depend on BIOS and kernel file.
  You can compile the test program with 'make & make check-tcg' and run the test case with the following command:

  1. Install LoongArch cross-tools on X86 machines.

    Download cross-tools.

      wget https://github.com/loongson/build-tools/releases/download/2022.05.29/loongarch64-clfs-5.0-cross-tools-gcc-full.tar.xz

      tar -vxf loongarch64-clfs-5.0-cross-tools-gcc-full.tar.xz -C /opt

    Config cross-tools env.

      . setenv.sh

      setenv.sh:

          #!/bin/sh
          set -x
          CC_PREFIX=/opt/cross-tools

          export PATH=$CC_PREFIX/bin:$PATH
          export LD_LIBRARY_PATH=$CC_PREFIX/lib:$LD_LIBRARY_PATH
          export LD_LIBRARY_PATH=$CC_PREFIX/loongarch64-unknown-linux-gnu/lib/:$LD_LIBRARY_PATH
          set +x

  2. Test tests/tcg/multiarch.

    ./configure --disable-rdma --disable-pvrdma --prefix=/usr  \
            --target-list="loongarch64-softmmu"  \
            --disable-libiscsi --disable-libnfs --disable-libpmem \
            --disable-glusterfs --enable-libusb --enable-usb-redir \
            --disable-opengl --disable-xen --enable-spice --disable-werror \
            --enable-debug --disable-capstone --disable-kvm --enable-profiler

    cd  build/

    make && make check-tcg

    or

    ./build/qemu-system-loongarch64 -machine virt -m 4G -cpu Loongson-3A5000 -smp 1 -kernel build/tests/tcg/loongarch64-softmmu/hello -monitor none -display none -chardev file,path=hello.out,id=output -serial chardev:output

- Linux-user emulation

  We already support Linux user emulation. We can use LoongArch cross-tools to build LoongArch executables on X86 machines,
  and We can also use qemu-loongarch64 to run LoongArch executables.

  1. Config cross-tools env.

     see System emulation.

  2. Test tests/tcg/multiarch.

     ./configure  --static  --prefix=/usr  --disable-werror --target-list="loongarch64-linux-user" --enable-debug

     cd build

     make && make check-tcg

  3. Run LoongArch system basic command with loongarch-clfs-system.

     - Config clfs env.

       wget https://github.com/loongson/build-tools/releases/download/2022.05.29/loongarch64-clfs-system-5.0.tar.bz2

       tar -vxf loongarch64-clfs-system-5.0.tar.bz2 -C /opt/clfs

       cp /opt/clfs/lib64/ld-linux-loongarch-lp64d.so.1  /lib64

       export LD_LIBRARY_PATH="/opt/clfs/lib64"

     - Run LoongArch system basic command.

       ./qemu-loongarch64  /opt/clfs/usr/bin/bash
       ./qemu-loongarch64  /opt/clfs/usr/bin/ls
       ./qemu-loongarch64  /opt/clfs/usr/bin/pwd

- Note.
  We can get the latest LoongArch documents or LoongArch tools at https://github.com/loongson/