mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 02:24:58 -06:00
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:
commit
5eb0849562
9 changed files with 44 additions and 33 deletions
|
@ -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.
|
||||||
|
|
19
docs/system/target-loongarch.rst
Normal file
19
docs/system/target-loongarch.rst
Normal 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
|
|
@ -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
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -19,9 +19,9 @@
|
||||||
#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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue