loongarch queue

-----BEGIN PGP SIGNATURE-----
 
 iHUEABYKAB0WIQQNhkKjomWfgLCz0aQfewwSUazn0QUCZ9zfpQAKCRAfewwSUazn
 0VVzAQDtmH3TGh1e5hX/y9g5W733DmUlG1haJ2VNYS+FljXdZQEAkZAe3opRuuoK
 FhXCHiMhCT0+bVfOuZ6sc6pVQb29Ag0=
 =vJ5O
 -----END PGP SIGNATURE-----

Merge tag 'pull-loongarch-20250321' of https://gitlab.com/bibo-mao/qemu into staging

loongarch queue

# -----BEGIN PGP SIGNATURE-----
#
# iHUEABYKAB0WIQQNhkKjomWfgLCz0aQfewwSUazn0QUCZ9zfpQAKCRAfewwSUazn
# 0VVzAQDtmH3TGh1e5hX/y9g5W733DmUlG1haJ2VNYS+FljXdZQEAkZAe3opRuuoK
# FhXCHiMhCT0+bVfOuZ6sc6pVQb29Ag0=
# =vJ5O
# -----END PGP SIGNATURE-----
# gpg: Signature made Thu 20 Mar 2025 23:40:21 EDT
# gpg:                using EDDSA key 0D8642A3A2659F80B0B3D1A41F7B0C1251ACE7D1
# gpg: Good signature from "bibo mao <maobibo@loongson.cn>" [unknown]
# gpg: WARNING: This key is not certified with a trusted signature!
# gpg:          There is no indication that the signature belongs to the owner.
# Primary key fingerprint: 7044 3A00 19C0 E97A 31C7  13C4 8E86 8FB7 A176 9D4C
#      Subkey fingerprint: 0D86 42A3 A265 9F80 B0B3  D1A4 1F7B 0C12 51AC E7D1

* tag 'pull-loongarch-20250321' of https://gitlab.com/bibo-mao/qemu:
  target/loongarch: fix bad shift in check_ps()
  docs/system: Add entry for LoongArch system
  host/include/loongarch64: Fix inline assembly compatibility with Clang

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Stefan Hajnoczi 2025-03-23 11:03:14 -04:00
commit 5eb0849562
9 changed files with 44 additions and 33 deletions

View file

@ -12,14 +12,15 @@ Supported devices
----------------- -----------------
The ``virt`` machine supports: The ``virt`` machine supports:
- Gpex host bridge
- Ls7a RTC device * Gpex host bridge
- Ls7a IOAPIC device * Ls7a RTC device
- ACPI GED device * Ls7a IOAPIC device
- Fw_cfg device * ACPI GED device
- PCI/PCIe devices * Fw_cfg device
- Memory device * PCI/PCIe devices
- CPU device. Type: la464. * Memory device
* CPU device. Type: la464.
CPU and machine Type CPU and machine Type
-------------------- --------------------
@ -39,13 +40,7 @@ can be accessed by following steps.
.. code-block:: bash .. code-block:: bash
./configure --disable-rdma --prefix=/usr \ ./configure --target-list="loongarch64-softmmu"
--target-list="loongarch64-softmmu" \
--disable-libiscsi --disable-libnfs --disable-libpmem \
--disable-glusterfs --enable-libusb --enable-usb-redir \
--disable-opengl --disable-xen --enable-spice \
--enable-debug --disable-capstone --disable-kvm \
--enable-profiler
make -j8 make -j8
(2) Set cross tools: (2) Set cross tools:
@ -53,9 +48,7 @@ can be accessed by following steps.
.. code-block:: bash .. code-block:: bash
wget https://github.com/loongson/build-tools/releases/download/2022.09.06/loongarch64-clfs-6.3-cross-tools-gcc-glibc.tar.xz wget https://github.com/loongson/build-tools/releases/download/2022.09.06/loongarch64-clfs-6.3-cross-tools-gcc-glibc.tar.xz
tar -vxf loongarch64-clfs-6.3-cross-tools-gcc-glibc.tar.xz -C /opt tar -vxf loongarch64-clfs-6.3-cross-tools-gcc-glibc.tar.xz -C /opt
export PATH=/opt/cross-tools/bin:$PATH export PATH=/opt/cross-tools/bin:$PATH
export LD_LIBRARY_PATH=/opt/cross-tools/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=/opt/cross-tools/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/cross-tools/loongarch64-unknown-linux-gnu/lib/:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=/opt/cross-tools/loongarch64-unknown-linux-gnu/lib/:$LD_LIBRARY_PATH
@ -74,13 +67,9 @@ Note: To build the release version of the bios, set --buildtarget=RELEASE,
.. code-block:: bash .. code-block:: bash
git clone https://github.com/loongson/linux.git git clone https://github.com/loongson/linux.git
cd linux cd linux
git checkout loongarch-next git checkout loongarch-next
make ARCH=loongarch CROSS_COMPILE=loongarch64-unknown-linux-gnu- loongson3_defconfig make ARCH=loongarch CROSS_COMPILE=loongarch64-unknown-linux-gnu- loongson3_defconfig
make ARCH=loongarch CROSS_COMPILE=loongarch64-unknown-linux-gnu- -j32 make ARCH=loongarch CROSS_COMPILE=loongarch64-unknown-linux-gnu- -j32
Note: The branch of linux source code is loongarch-next. Note: The branch of linux source code is loongarch-next.

View file

@ -0,0 +1,19 @@
.. _LoongArch-System-emulator:
LoongArch System emulator
-------------------------
QEMU can emulate loongArch 64 bit systems via the
``qemu-system-loongarch64`` binary. Only one machine type ``virt`` is
supported.
When using KVM as accelerator, QEMU can emulate la464 cpu model. And when
using the default cpu model with TCG as accelerator, QEMU will emulate a
subset of la464 cpu features that should be enough to run distributions
built for the la464.
Board-specific documentation
============================
.. toctree::
loongarch/virt

View file

@ -18,6 +18,7 @@ Contents:
target-arm target-arm
target-avr target-avr
target-loongarch
target-m68k target-m68k
target-mips target-mips
target-ppc target-ppc

View file

@ -28,7 +28,7 @@ static inline Int128 atomic16_read_ro(const Int128 *ptr)
asm("vld $vr0, %2, 0\n\t" asm("vld $vr0, %2, 0\n\t"
"vpickve2gr.d %0, $vr0, 0\n\t" "vpickve2gr.d %0, $vr0, 0\n\t"
"vpickve2gr.d %1, $vr0, 1" "vpickve2gr.d %1, $vr0, 1"
: "=r"(l), "=r"(h) : "r"(ptr), "m"(*ptr) : "f0"); : "=r"(l), "=r"(h) : "r"(ptr), "m"(*ptr) : "$f0");
return int128_make128(l, h); return int128_make128(l, h);
} }
@ -46,7 +46,7 @@ static inline void atomic16_set(Int128 *ptr, Int128 val)
asm("vinsgr2vr.d $vr0, %1, 0\n\t" asm("vinsgr2vr.d $vr0, %1, 0\n\t"
"vinsgr2vr.d $vr0, %2, 1\n\t" "vinsgr2vr.d $vr0, %2, 1\n\t"
"vst $vr0, %3, 0" "vst $vr0, %3, 0"
: "=m"(*ptr) : "r"(l), "r"(h), "r"(ptr) : "f0"); : "=m"(*ptr) : "r"(l), "r"(h), "r"(ptr) : "$f0");
} }
#endif /* LOONGARCH_ATOMIC128_LDST_H */ #endif /* LOONGARCH_ATOMIC128_LDST_H */

View file

@ -61,7 +61,8 @@ static bool buffer_is_zero_lsx(const void *buf, size_t len)
"2:" "2:"
: "=&r"(ret), "+r"(p) : "=&r"(ret), "+r"(p)
: "r"(buf), "r"(e), "r"(l) : "r"(buf), "r"(e), "r"(l)
: "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "fcc0"); : "$f0", "$f1", "$f2", "$f3", "$f4", "$f5", "$f6", "$f7", "$f8",
"$fcc0");
return ret; return ret;
} }
@ -119,7 +120,8 @@ static bool buffer_is_zero_lasx(const void *buf, size_t len)
"3:" "3:"
: "=&r"(ret), "+r"(p) : "=&r"(ret), "+r"(p)
: "r"(buf), "r"(e), "r"(l) : "r"(buf), "r"(e), "r"(l)
: "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "fcc0"); : "$f0", "$f1", "$f2", "$f3", "$f4", "$f5", "$f6", "$f7", "$f8",
"$fcc0");
return ret; return ret;
} }

View file

@ -31,7 +31,7 @@ static inline uint64_t load_atom_extract_al16_or_al8(void *pv, int s)
asm("vld $vr0, %2, 0\n\t" asm("vld $vr0, %2, 0\n\t"
"vpickve2gr.d %0, $vr0, 0\n\t" "vpickve2gr.d %0, $vr0, 0\n\t"
"vpickve2gr.d %1, $vr0, 1" "vpickve2gr.d %1, $vr0, 1"
: "=r"(l), "=r"(h) : "r"(ptr_align), "m"(*ptr_align) : "f0"); : "=r"(l), "=r"(h) : "r"(ptr_align), "m"(*ptr_align) : "$f0");
return (l >> shr) | (h << (-shr & 63)); return (l >> shr) | (h << (-shr & 63));
} }

View file

@ -43,7 +43,7 @@ enum {
TLBRET_PE = 7, TLBRET_PE = 7,
}; };
bool check_ps(CPULoongArchState *ent, int ps); bool check_ps(CPULoongArchState *ent, uint8_t ps);
extern const VMStateDescription vmstate_loongarch_cpu; extern const VMStateDescription vmstate_loongarch_cpu;

View file

@ -115,7 +115,7 @@ target_ulong helper_csrwr_ticlr(CPULoongArchState *env, target_ulong val)
target_ulong helper_csrwr_pwcl(CPULoongArchState *env, target_ulong val) target_ulong helper_csrwr_pwcl(CPULoongArchState *env, target_ulong val)
{ {
int shift, ptbase; uint8_t shift, ptbase;
int64_t old_v = env->CSR_PWCL; int64_t old_v = env->CSR_PWCL;
/* /*

View file

@ -19,12 +19,12 @@
#include "exec/log.h" #include "exec/log.h"
#include "cpu-csr.h" #include "cpu-csr.h"
bool check_ps(CPULoongArchState *env, int tlb_ps) bool check_ps(CPULoongArchState *env, uint8_t tlb_ps)
{ {
if (tlb_ps > 64) { if (tlb_ps >= 64) {
return false; return false;
} }
return BIT_ULL(tlb_ps) & (env->CSR_PRCFG2); return BIT_ULL(tlb_ps) & (env->CSR_PRCFG2);
} }
void get_dir_base_width(CPULoongArchState *env, uint64_t *dir_base, void get_dir_base_width(CPULoongArchState *env, uint64_t *dir_base,