From: Richard Henderson <richard.henderson@linaro.org>
To: Xiaojuan Yang <yangxiaojuan@loongson.cn>, qemu-devel@nongnu.org
Cc: mark.cave-ayland@ilande.co.uk, gaosong@loongson.cn
Subject: Re: [PATCH v2 26/43] target/loongarch: Add LoongArch IOCSR instruction
Date: Tue, 26 Apr 2022 18:37:12 -0700 [thread overview]
Message-ID: <0417ac11-2386-a00b-5ec7-d4f260b5fca5@linaro.org> (raw)
In-Reply-To: <20220425091027.2877892-27-yangxiaojuan@loongson.cn>
On 4/25/22 02:10, Xiaojuan Yang wrote:
> This includes:
> - IOCSR{RD/WR}.{B/H/W/D}
>
> Signed-off-by: Xiaojuan Yang <yangxiaojuan@loongson.cn>
> Signed-off-by: Song Gao <gaosong@loongson.cn>
> ---
> target/loongarch/cpu.c | 52 ++++++
> target/loongarch/cpu.h | 25 +++
> target/loongarch/disas.c | 8 +
> target/loongarch/helper.h | 8 +
> .../insn_trans/trans_privileged.c.inc | 35 ++++
> target/loongarch/insns.decode | 9 +
> target/loongarch/iocsr_helper.c | 174 ++++++++++++++++++
> target/loongarch/meson.build | 1 +
> 8 files changed, 312 insertions(+)
> create mode 100644 target/loongarch/iocsr_helper.c
>
> diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
> index 6d6216a846..3167323821 100644
> --- a/target/loongarch/cpu.c
> +++ b/target/loongarch/cpu.c
> @@ -17,6 +17,8 @@
> #include "internals.h"
> #include "fpu/softfloat-helpers.h"
> #include "cpu-csr.h"
> +#include "sysemu/reset.h"
> +#include "hw/loader.h"
>
> const char * const regnames[32] = {
> "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
> @@ -483,14 +485,64 @@ static void loongarch_cpu_realizefn(DeviceState *dev, Error **errp)
> lacc->parent_realize(dev, errp);
> }
>
> +static void loongarch_qemu_write(void *opaque, hwaddr addr,
> + uint64_t val, unsigned size)
> +{
> +}
> +
> +static uint64_t loongarch_qemu_read(void *opaque, hwaddr addr, unsigned size)
> +{
> + switch (addr) {
> + case FEATURE_REG:
> + return 1UL << IOCSRF_MSI | 1UL << IOCSRF_EXTIOI |
> + 1UL << IOCSRF_CSRIPI;
> + case VENDOR_REG:
> + return 0x6e6f73676e6f6f4c; /* "Loongson" */
> + case CPUNAME_REG:
> + return 0x303030354133; /* "3A5000" */
> + case MISC_FUNC_REG:
> + return 1UL << IOCSRM_EXTIOI_EN;
> + }
> + return 0;
> +}
> +
> +static const MemoryRegionOps loongarch_qemu_ops = {
> + .read = loongarch_qemu_read,
> + .write = loongarch_qemu_write,
> + .endianness = DEVICE_LITTLE_ENDIAN,
> + .valid = {
> + .min_access_size = 4,
> + .max_access_size = 8,
> + },
> + .impl = {
> + .min_access_size = 8,
> + .max_access_size = 8,
> + },
> +};
> +
> +static void do_cpu_reset(void *opaque)
> +{
> + LoongArchCPU *cpu = opaque;
> +
> + cpu_reset(CPU(cpu));
> +}
> +
> static void loongarch_cpu_init(Object *obj)
> {
> LoongArchCPU *cpu = LOONGARCH_CPU(obj);
> + CPULoongArchState *env = &cpu->env;
>
> cpu_set_cpustate_pointers(cpu);
> qdev_init_gpio_in(DEVICE(cpu), loongarch_cpu_set_irq, N_IRQS);
> timer_init_ns(&cpu->timer, QEMU_CLOCK_VIRTUAL,
> &loongarch_constant_timer_cb, cpu);
> + memory_region_init_io(&env->system_iocsr, OBJECT(cpu), NULL,
> + env, "iocsr", UINT64_MAX);
> + address_space_init(&env->address_space_iocsr, &env->system_iocsr, "IOCSR");
> + qemu_register_reset(do_cpu_reset, cpu);
> + memory_region_init_io(&env->iocsr_mem, OBJECT(cpu), &loongarch_qemu_ops,
> + NULL, "iocsr_misc", 0x428);
> + memory_region_add_subregion(&env->system_iocsr, 0, &env->iocsr_mem);
> }
>
> static ObjectClass *loongarch_cpu_class_by_name(const char *cpu_model)
> diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h
> index e907fe3c51..734f90168e 100644
> --- a/target/loongarch/cpu.h
> +++ b/target/loongarch/cpu.h
> @@ -12,6 +12,27 @@
> #include "fpu/softfloat-types.h"
> #include "hw/registerfields.h"
> #include "qemu/timer.h"
> +#include "exec/memory.h"
> +#include "hw/sysbus.h"
> +
> +#define IOCSRF_TEMP 0
> +#define IOCSRF_NODECNT 1
> +#define IOCSRF_MSI 2
> +#define IOCSRF_EXTIOI 3
> +#define IOCSRF_CSRIPI 4
> +#define IOCSRF_FREQCSR 5
> +#define IOCSRF_FREQSCALE 6
> +#define IOCSRF_DVFSV1 7
> +#define IOCSRF_GMOD 9
> +#define IOCSRF_VM 11
> +
> +#define FEATURE_REG 0x8
> +#define VENDOR_REG 0x10
> +#define CPUNAME_REG 0x20
> +#define MISC_FUNC_REG 0x420
> +#define IOCSRM_EXTIOI_EN 48
> +
> +#define IOCSR_MEM_SIZE 0x428
>
> #define TCG_GUEST_DEFAULT_MO (0)
>
> @@ -284,6 +305,10 @@ typedef struct CPUArchState {
> uint64_t CSR_DSAVE;
>
> LoongArchTLB tlb[LOONGARCH_TLB_MAX];
> +
> + AddressSpace address_space_iocsr;
> + MemoryRegion system_iocsr;
> + MemoryRegion iocsr_mem;
> } CPULoongArchState;
>
> /**
> diff --git a/target/loongarch/disas.c b/target/loongarch/disas.c
> index c76b82dfdf..fcc06abc6b 100644
> --- a/target/loongarch/disas.c
> +++ b/target/loongarch/disas.c
> @@ -609,6 +609,14 @@ INSN(bgeu, rr_offs)
> INSN(csrrd, r_csr)
> INSN(csrwr, r_csr)
> INSN(csrxchg, rr_csr)
> +INSN(iocsrrd_b, rr)
> +INSN(iocsrrd_h, rr)
> +INSN(iocsrrd_w, rr)
> +INSN(iocsrrd_d, rr)
> +INSN(iocsrwr_b, rr)
> +INSN(iocsrwr_h, rr)
> +INSN(iocsrwr_w, rr)
> +INSN(iocsrwr_d, rr)
>
> #define output_fcmp(C, PREFIX, SUFFIX) \
> { \
> diff --git a/target/loongarch/helper.h b/target/loongarch/helper.h
> index 5a6754eb65..4664a02dcf 100644
> --- a/target/loongarch/helper.h
> +++ b/target/loongarch/helper.h
> @@ -100,3 +100,11 @@ DEF_HELPER_2(csrwr_estat, i64, env, tl)
> DEF_HELPER_2(csrwr_asid, i64, env, tl)
> DEF_HELPER_2(csrwr_tcfg, i64, env, tl)
> DEF_HELPER_2(csrwr_ticlr, i64, env, tl)
> +DEF_HELPER_2(iocsrrd_b, i64, env, tl)
> +DEF_HELPER_2(iocsrrd_h, i64, env, tl)
> +DEF_HELPER_2(iocsrrd_w, i64, env, tl)
> +DEF_HELPER_2(iocsrrd_d, i64, env, tl)
> +DEF_HELPER_3(iocsrwr_b, void, env, tl, tl)
> +DEF_HELPER_3(iocsrwr_h, void, env, tl, tl)
> +DEF_HELPER_3(iocsrwr_w, void, env, tl, tl)
> +DEF_HELPER_3(iocsrwr_d, void, env, tl, tl)
> diff --git a/target/loongarch/insn_trans/trans_privileged.c.inc b/target/loongarch/insn_trans/trans_privileged.c.inc
> index 0fc5d7935c..8a1c5b8511 100644
> --- a/target/loongarch/insn_trans/trans_privileged.c.inc
> +++ b/target/loongarch/insn_trans/trans_privileged.c.inc
> @@ -256,3 +256,38 @@ static bool trans_csrxchg(DisasContext *ctx, arg_csrxchg *a)
> tcg_temp_free(oldv);
> return true;
> }
> +
> +static bool gen_iocsrrd(DisasContext *ctx, arg_rr *a,
> + void (*func)(TCGv, TCGv_ptr, TCGv))
> +{
> + TCGv dest = gpr_dst(ctx, a->rd, EXT_NONE);
> + TCGv src1 = gpr_src(ctx, a->rj, EXT_NONE);
> +
> + if (check_plv(ctx)) {
> + return false;
> + }
> + func(dest, cpu_env, src1);
> + return true;
> +}
> +
> +static bool gen_iocsrwr(DisasContext *ctx, arg_rr *a,
> + void (*func)(TCGv_ptr, TCGv, TCGv))
> +{
> + TCGv val = gpr_src(ctx, a->rd, EXT_NONE);
> + TCGv addr = gpr_src(ctx, a->rj, EXT_NONE);
> +
> + if (check_plv(ctx)) {
> + return false;
> + }
> + func(cpu_env, addr, val);
> + return true;
> +}
> +
> +TRANS(iocsrrd_b, gen_iocsrrd, gen_helper_iocsrrd_b)
> +TRANS(iocsrrd_h, gen_iocsrrd, gen_helper_iocsrrd_h)
> +TRANS(iocsrrd_w, gen_iocsrrd, gen_helper_iocsrrd_w)
> +TRANS(iocsrrd_d, gen_iocsrrd, gen_helper_iocsrrd_d)
> +TRANS(iocsrwr_b, gen_iocsrwr, gen_helper_iocsrwr_b)
> +TRANS(iocsrwr_h, gen_iocsrwr, gen_helper_iocsrwr_h)
> +TRANS(iocsrwr_w, gen_iocsrwr, gen_helper_iocsrwr_w)
> +TRANS(iocsrwr_d, gen_iocsrwr, gen_helper_iocsrwr_d)
> diff --git a/target/loongarch/insns.decode b/target/loongarch/insns.decode
> index 43005ca283..2b436d3cd6 100644
> --- a/target/loongarch/insns.decode
> +++ b/target/loongarch/insns.decode
> @@ -450,3 +450,12 @@ bgeu 0110 11 ................ ..... ..... @rr_offs16
> csrwr 0000 0100 .............. 00001 ..... @r_csr
> csrxchg 0000 0100 .............. ..... ..... @rr_csr
> }
> +
> +iocsrrd_b 0000 01100100 10000 00000 ..... ..... @rr
> +iocsrrd_h 0000 01100100 10000 00001 ..... ..... @rr
> +iocsrrd_w 0000 01100100 10000 00010 ..... ..... @rr
> +iocsrrd_d 0000 01100100 10000 00011 ..... ..... @rr
> +iocsrwr_b 0000 01100100 10000 00100 ..... ..... @rr
> +iocsrwr_h 0000 01100100 10000 00101 ..... ..... @rr
> +iocsrwr_w 0000 01100100 10000 00110 ..... ..... @rr
> +iocsrwr_d 0000 01100100 10000 00111 ..... ..... @rr
> diff --git a/target/loongarch/iocsr_helper.c b/target/loongarch/iocsr_helper.c
> new file mode 100644
> index 0000000000..ce8e17fb12
> --- /dev/null
> +++ b/target/loongarch/iocsr_helper.c
> @@ -0,0 +1,174 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +/*
> + * Copyright (c) 2021 Loongson Technology Corporation Limited
> + *
> + * Helpers for IOCSR reads/writes
> + */
> +
> +#include "qemu/osdep.h"
> +#include "qemu/main-loop.h"
> +#include "cpu.h"
> +#include "internals.h"
> +#include "qemu/host-utils.h"
> +#include "exec/helper-proto.h"
> +#include "exec/exec-all.h"
> +#include "exec/cpu_ldst.h"
> +#include "tcg/tcg-ldst.h"
> +
> +uint64_t helper_iocsrrd_b(CPULoongArchState *env, target_ulong r_addr)
> +{
> + return address_space_ldub(&env->address_space_iocsr, r_addr,
> + MEMTXATTRS_UNSPECIFIED, NULL);
> +}
> +
> +uint64_t helper_iocsrrd_h(CPULoongArchState *env, target_ulong r_addr)
> +{
> + return address_space_lduw(&env->address_space_iocsr, r_addr,
> + MEMTXATTRS_UNSPECIFIED, NULL);
> +}
> +
> +uint64_t helper_iocsrrd_w(CPULoongArchState *env, target_ulong r_addr)
> +{
> + return address_space_ldl(&env->address_space_iocsr, r_addr,
> + MEMTXATTRS_UNSPECIFIED, NULL);
> +}
> +
> +uint64_t helper_iocsrrd_d(CPULoongArchState *env, target_ulong r_addr)
> +{
> + return address_space_ldq(&env->address_space_iocsr, r_addr,
> + MEMTXATTRS_UNSPECIFIED, NULL);
> +}
> +
> +static int get_ipi_data(target_ulong val)
> +{
> + int i, mask, data;
> +
> + data = val >> 32;
> + mask = (val >> 27) & 0xf;
> +
> + for (i = 0; i < 4; i++) {
> + if ((mask >> i) & 1) {
> + data &= ~(0xff << (i * 8));
> + }
> + }
> + return data;
> +}
> +
> +static void check_ipi_send(CPULoongArchState *env, target_ulong val)
Don't pass in env...
> +{
> + int cpuid;
> + target_ulong data;
> +
> + cpuid = (val >> 16) & 0x3ff;
> + /* IPI status vector */
> + data = 1 << (val & 0x1f);
> +
> + qemu_mutex_lock_iothread();
> + CPUState *cs = qemu_get_cpu(cpuid);
> + env = cs->env_ptr;
... only to override it here ...
> + LoongArchCPU *cpu = LOONGARCH_CPU(cs);
... and better to use env = &cpu->env when you have the choice.
> + loongarch_cpu_set_irq(cpu, IRQ_IPI, 1);
> + qemu_mutex_unlock_iothread();
> +
> + address_space_stl(&env->address_space_iocsr, 0x1008,
> + data, MEMTXATTRS_UNSPECIFIED, NULL);
> +}
> +
> +static void check_mail_send(CPULoongArchState *env, target_ulong w_addr,
> + target_ulong val)
> +{
> + int cpuid;
> + uint32_t data;
> +
> + cpuid = (val >> 16) & 0x3ff;
> + w_addr = 0x1020 + (val & 0x1c);
> + env = (qemu_get_cpu(cpuid))->env_ptr;
> + data = get_ipi_data(val);
> +
> + address_space_stl(&env->address_space_iocsr, w_addr,
> + data, MEMTXATTRS_UNSPECIFIED, NULL);
> +}
> +
> +static void check_any_send(CPULoongArchState *env, target_ulong w_addr,
> + target_ulong val)
> +{
> + int cpuid;
> + uint32_t data;
> +
> + cpuid = (val >> 16) & 0x3ff;
> + w_addr = val & 0xffff;
> + env = (qemu_get_cpu(cpuid))->env_ptr;
> + data = get_ipi_data(val);
> +
> + address_space_stl(&env->address_space_iocsr, w_addr,
> + data, MEMTXATTRS_UNSPECIFIED, NULL);
> +}
> +
> +static bool check_iocsrwr(CPULoongArchState *env, target_ulong w_addr,
> + target_ulong val)
> +{
> + bool ret = true;
> +
> + /*
> + * For IPI send, Mailbox send and ANY send, adjust the addr and
> + * val accordingly. The IOCSR writes are turned to different
> + * MMIO writes respectively
> + */
> + switch (w_addr) {
> + case 0x1040: /* IPI send */
> + check_ipi_send(env, val);
> + ret = false;
> + break;
> + case 0x1048: /* Mail send */
> + check_mail_send(env, w_addr, val);
> + ret = false;
> + break;
> + case 0x1158: /* ANY send */
> + check_any_send(env, w_addr, val);
> + ret = false;
> + break;
> + default:
> + break;
> + }
Note that none of these make sense with stores smaller than 32-bit, since they derive the
cpuid from val >> 16.
Ideally these would be MemoryRegionOps on the iocsr region, so that you need do nothing
special within the following helpers (or from anywhere else).
> +void helper_iocsrwr_b(CPULoongArchState *env, target_ulong w_addr,
> + target_ulong val)
> +{
> + if (!check_iocsrwr(env, w_addr, val)) {
> + return;
> + }
> + address_space_stb(&env->address_space_iocsr, w_addr,
> + val, MEMTXATTRS_UNSPECIFIED, NULL);
> +}
> +
> +void helper_iocsrwr_h(CPULoongArchState *env, target_ulong w_addr,
> + target_ulong val)
> +{
> + if (!check_iocsrwr(env, w_addr, val)) {
> + return;
> + }
> + address_space_stw(&env->address_space_iocsr, w_addr,
> + val, MEMTXATTRS_UNSPECIFIED, NULL);
> +}
> +
> +void helper_iocsrwr_w(CPULoongArchState *env, target_ulong w_addr,
> + target_ulong val)
> +{
> + if (!check_iocsrwr(env, w_addr, val)) {
> + return;
> + }
> + address_space_stl(&env->address_space_iocsr, w_addr,
> + val, MEMTXATTRS_UNSPECIFIED, NULL);
> +}
> +
> +void helper_iocsrwr_d(CPULoongArchState *env, target_ulong w_addr,
> + target_ulong val)
> +{
> + if (!check_iocsrwr(env, w_addr, val)) {
> + return;
> + }
> + address_space_stq(&env->address_space_iocsr, w_addr,
> + val, MEMTXATTRS_UNSPECIFIED, NULL);
> +}
r~
next prev parent reply other threads:[~2022-04-27 1:38 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-25 9:09 [PATCH v2 00/43] Add LoongArch softmmu support Xiaojuan Yang
2022-04-25 9:09 ` [PATCH v2 01/43] target/loongarch: Add README Xiaojuan Yang
2022-04-25 9:09 ` [PATCH v2 02/43] target/loongarch: Add core definition Xiaojuan Yang
2022-04-25 9:09 ` [PATCH v2 03/43] target/loongarch: Add main translation routines Xiaojuan Yang
2022-04-25 9:09 ` [PATCH v2 04/43] target/loongarch: Add fixed point arithmetic instruction translation Xiaojuan Yang
2022-04-25 9:09 ` [PATCH v2 05/43] target/loongarch: Add fixed point shift " Xiaojuan Yang
2022-04-25 9:09 ` [PATCH v2 06/43] target/loongarch: Add fixed point bit " Xiaojuan Yang
2022-04-25 9:09 ` [PATCH v2 07/43] target/loongarch: Add fixed point load/store " Xiaojuan Yang
2022-04-25 9:09 ` [PATCH v2 08/43] target/loongarch: Add fixed point atomic " Xiaojuan Yang
2022-04-25 9:09 ` [PATCH v2 09/43] target/loongarch: Add fixed point extra " Xiaojuan Yang
2022-04-25 9:09 ` [PATCH v2 10/43] target/loongarch: Add floating point arithmetic " Xiaojuan Yang
2022-04-25 9:09 ` [PATCH v2 11/43] target/loongarch: Add floating point comparison " Xiaojuan Yang
2022-04-25 9:09 ` [PATCH v2 12/43] target/loongarch: Add floating point conversion " Xiaojuan Yang
2022-04-25 9:09 ` [PATCH v2 13/43] target/loongarch: Add floating point move " Xiaojuan Yang
2022-04-25 9:09 ` [PATCH v2 14/43] target/loongarch: Add floating point load/store " Xiaojuan Yang
2022-04-25 9:09 ` [PATCH v2 15/43] target/loongarch: Add branch " Xiaojuan Yang
2022-04-25 9:10 ` [PATCH v2 16/43] target/loongarch: Add disassembler Xiaojuan Yang
2022-04-25 9:10 ` [PATCH v2 17/43] target/loongarch: Add target build suport Xiaojuan Yang
2022-04-25 9:10 ` [PATCH v2 18/43] target/loongarch: Add system emulation introduction Xiaojuan Yang
2022-04-25 9:10 ` [PATCH v2 19/43] target/loongarch: Add CSRs definition Xiaojuan Yang
2022-04-25 22:36 ` Richard Henderson
2022-04-25 9:10 ` [PATCH v2 20/43] target/loongarch: Add basic vmstate description of CPU Xiaojuan Yang
2022-04-25 22:46 ` Richard Henderson
2022-04-25 9:10 ` [PATCH v2 21/43] target/loongarch: Implement qmp_query_cpu_definitions() Xiaojuan Yang
2022-04-25 9:10 ` [PATCH v2 22/43] target/loongarch: Add MMU support for LoongArch CPU Xiaojuan Yang
2022-04-25 9:10 ` [PATCH v2 23/43] target/loongarch: Add LoongArch interrupt and exception handle Xiaojuan Yang
2022-04-25 22:30 ` Richard Henderson
2022-04-25 9:10 ` [PATCH v2 24/43] target/loongarch: Add constant timer support Xiaojuan Yang
2022-04-25 9:10 ` [PATCH v2 25/43] target/loongarch: Add LoongArch CSR instruction Xiaojuan Yang
2022-04-25 22:55 ` Richard Henderson
2022-04-26 9:03 ` yangxiaojuan
2022-04-26 14:52 ` Richard Henderson
2022-04-25 9:10 ` [PATCH v2 26/43] target/loongarch: Add LoongArch IOCSR instruction Xiaojuan Yang
2022-04-27 1:37 ` Richard Henderson [this message]
2022-04-25 9:10 ` [PATCH v2 27/43] target/loongarch: Add TLB instruction support Xiaojuan Yang
2022-04-25 9:10 ` [PATCH v2 28/43] target/loongarch: Add other core instructions support Xiaojuan Yang
2022-04-25 9:10 ` [PATCH v2 29/43] target/loongarch: Add timer related " Xiaojuan Yang
2022-04-26 0:06 ` Richard Henderson
2022-04-25 9:10 ` [PATCH v2 30/43] hw/loongarch: Add support loongson3 virt machine type Xiaojuan Yang
2022-04-27 1:43 ` Richard Henderson
2022-04-25 9:10 ` [PATCH v2 31/43] hw/loongarch: Add LoongArch ipi interrupt support(IPI) Xiaojuan Yang
2022-04-27 1:49 ` Richard Henderson
2022-04-25 9:10 ` [PATCH v2 32/43] hw/intc: Add LoongArch ls7a interrupt controller support(PCH-PIC) Xiaojuan Yang
2022-04-28 8:15 ` Mark Cave-Ayland
2022-04-25 9:10 ` [PATCH v2 33/43] hw/intc: Add LoongArch ls7a msi interrupt controller support(PCH-MSI) Xiaojuan Yang
2022-04-27 2:01 ` Richard Henderson
2022-04-28 7:40 ` Mark Cave-Ayland
2022-04-28 8:16 ` Mark Cave-Ayland
2022-04-25 9:10 ` [PATCH v2 34/43] hw/intc: Add LoongArch extioi interrupt controller(EIOINTC) Xiaojuan Yang
2022-04-25 16:27 ` Mark Cave-Ayland
2022-04-27 10:02 ` yangxiaojuan
2022-04-27 2:07 ` Richard Henderson
2022-04-25 9:10 ` [PATCH v2 35/43] hw/loongarch: Add irq hierarchy for the system Xiaojuan Yang
2022-04-25 9:10 ` [PATCH v2 36/43] Enable common virtio pci support for LoongArch Xiaojuan Yang
2022-04-25 9:10 ` [PATCH v2 37/43] hw/loongarch: Add some devices support for 3A5000 Xiaojuan Yang
2022-04-27 2:21 ` Richard Henderson
2022-04-25 9:10 ` [PATCH v2 38/43] hw/loongarch: Add LoongArch ls7a rtc device support Xiaojuan Yang
2022-04-25 9:10 ` [PATCH v2 39/43] hw/loongarch: Add LoongArch load elf function Xiaojuan Yang
2022-04-27 2:23 ` Richard Henderson
2022-04-25 9:10 ` [PATCH v2 40/43] hw/loongarch: Add LoongArch ls7a acpi device support Xiaojuan Yang
2022-04-25 9:10 ` [PATCH v2 41/43] target/loongarch: Add gdb support Xiaojuan Yang
2022-04-27 2:24 ` Richard Henderson
2022-04-25 9:10 ` [PATCH v2 42/43] tests/tcg/loongarch64: Add hello/memory test in loongarch64 system Xiaojuan Yang
2022-04-25 9:10 ` [PATCH v2 43/43] target/loongarch: 'make check-tcg' support Xiaojuan Yang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0417ac11-2386-a00b-5ec7-d4f260b5fca5@linaro.org \
--to=richard.henderson@linaro.org \
--cc=gaosong@loongson.cn \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=qemu-devel@nongnu.org \
--cc=yangxiaojuan@loongson.cn \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).