From nobody Tue Feb 10 05:45:21 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1518054604797482.94290962788705; Wed, 7 Feb 2018 17:50:04 -0800 (PST) Received: from localhost ([::1]:55161 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ejbLb-0002Tk-HF for importer@patchew.org; Wed, 07 Feb 2018 20:49:59 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33288) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ejb3s-0003ui-2j for qemu-devel@nongnu.org; Wed, 07 Feb 2018 20:31:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ejb3q-0003H9-F7 for qemu-devel@nongnu.org; Wed, 07 Feb 2018 20:31:40 -0500 Received: from mail-pl0-x243.google.com ([2607:f8b0:400e:c01::243]:46484) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ejb3q-0003G5-6N for qemu-devel@nongnu.org; Wed, 07 Feb 2018 20:31:38 -0500 Received: by mail-pl0-x243.google.com with SMTP id 36-v6so1213141ple.13 for ; Wed, 07 Feb 2018 17:31:38 -0800 (PST) Received: from localhost.localdomain (125-237-39-90.jetstream.xtra.co.nz. [125.237.39.90]) by smtp.gmail.com with ESMTPSA id k3sm5097653pff.41.2018.02.07.17.31.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 07 Feb 2018 17:31:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=bJZBmMivW1/6/odSfqrL1kRAxDgEaR2LHhSZsnLrnwk=; b=BT3y+GXhG3+HqoIN3nZVMJJKf3w659NcYJRL3jw2qJnYoz0MjjCallEosQm3aHdQCK gnj1NQ/IUGsTwsMZCsto/mFnFUh2YDCS3bKmg2Q9dK621kGD8/aXj9qWPVrbWzTx5mrv f0Z27/fH0HuaHgxmH2FRKE7dOMCtGj5lulGwQSakPSJe6H4F0T5E8vCJbYsK5XzsrmCN QDbzd/2eZE19d6tKqPBE2KhVCCma0dYdkv6nVwP2wsrdeUi22GcsqnbqhS3jSffG6gOY Uchql0t8KKsV74qAaC8uAddRpSC+PO8ijByD8OY3TtCSxZvsMLak7sqiX8sY1cKwAdBE U8dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=bJZBmMivW1/6/odSfqrL1kRAxDgEaR2LHhSZsnLrnwk=; b=o5lN9Qp7/BDZzZRILQsZJUo4vSS1d4cEjDuwh+sWcemXUpceVuwDg3LKzDjEeA3Q77 QAj5nmxcHRYo0JnVTFqwkRp5cDVT0/wwCkfAnt5RwbwnZrmFi9PSIs5+mcrIWzUCCo4k AhKKLjNCGs5bL83wDOU6LfA/0ec8+aV+WonwlgfeOkpThZa5HU32h4ePdf7qA0Po0CcZ lVf9/MqXu+2S4lrAcuuVgM2ef/lGQTU894RPE4QH4ZFKSzn1p4+RQStgGiMvNy82Ftww BotzDMdM9LBLTZzyD+OPKvXpY1vlCBwUNmgTFkS/WBHOI53xiW9Ge+Gm9FZeJXx9nHyY U87g== X-Gm-Message-State: APf1xPDCjy0DtOzTa81F5vfRRmiU2WEihgZE/4/MVhBA9bCpLzUAC16P hF0/helpuOicXD7JRYiNNM84Akrw3UA= X-Google-Smtp-Source: AH8x224eucm5/8pmbCfF5rebQxQjzCINqOYoVb99hzXcbTNlpZi/pJ4Fwi/q54BqM504bQHXh3qm5A== X-Received: by 2002:a17:902:5814:: with SMTP id m20-v6mr7770097pli.434.1518053497142; Wed, 07 Feb 2018 17:31:37 -0800 (PST) From: Michael Clark To: qemu-devel@nongnu.org Date: Thu, 8 Feb 2018 14:28:48 +1300 Message-Id: <1518053328-34687-24-git-send-email-mjc@sifive.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1518053328-34687-1-git-send-email-mjc@sifive.com> References: <1518053328-34687-1-git-send-email-mjc@sifive.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c01::243 Subject: [Qemu-devel] [PATCH v5 23/23] RISC-V Build Infrastructure X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Bastian Koppelmann , Michael Clark , Palmer Dabbelt , Sagar Karandikar , RISC-V Patches Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This adds RISC-V into the build system enabling the following targets: - riscv32-softmmu - riscv64-softmmu - riscv32-linux-user - riscv64-linux-user This adds defaults configs for RISC-V, enables the build for the RISC-V CPU core, hardware, and Linux User Emulation. The 'qemu-binfmt-conf.sh' script is updated to add the RISC-V ELF magic. Expected checkpatch errors for consistency reasons: ERROR: line over 90 characters FILE: scripts/qemu-binfmt-conf.sh Reviewed-by: Richard Henderson Signed-off-by: Michael Clark --- Makefile.objs | 1 + arch_init.c | 2 ++ configure | 11 +++++++++++ cpus.c | 6 ++++++ default-configs/riscv32-linux-user.mak | 1 + default-configs/riscv32-softmmu.mak | 4 ++++ default-configs/riscv64-linux-user.mak | 1 + default-configs/riscv64-softmmu.mak | 4 ++++ hw/riscv/Makefile.objs | 13 +++++++++++++ include/sysemu/arch_init.h | 1 + qapi-schema.json | 16 +++++++++++++++- scripts/qemu-binfmt-conf.sh | 13 ++++++++++++- target/riscv/Makefile.objs | 1 + target/riscv/trace-events | 1 + 14 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 default-configs/riscv32-linux-user.mak create mode 100644 default-configs/riscv32-softmmu.mak create mode 100644 default-configs/riscv64-linux-user.mak create mode 100644 default-configs/riscv64-softmmu.mak create mode 100644 hw/riscv/Makefile.objs create mode 100644 target/riscv/Makefile.objs create mode 100644 target/riscv/trace-events diff --git a/Makefile.objs b/Makefile.objs index 2efba6d..86f3499 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -168,6 +168,7 @@ trace-events-subdirs +=3D target/mips trace-events-subdirs +=3D target/sparc trace-events-subdirs +=3D target/s390x trace-events-subdirs +=3D target/ppc +trace-events-subdirs +=3D target/riscv trace-events-subdirs +=3D qom trace-events-subdirs +=3D linux-user trace-events-subdirs +=3D qapi diff --git a/arch_init.c b/arch_init.c index 4c36f2b..e157619 100644 --- a/arch_init.c +++ b/arch_init.c @@ -71,6 +71,8 @@ int graphic_depth =3D 32; #define QEMU_ARCH QEMU_ARCH_OPENRISC #elif defined(TARGET_PPC) #define QEMU_ARCH QEMU_ARCH_PPC +#elif defined(TARGET_RISCV) +#define QEMU_ARCH QEMU_ARCH_RISCV #elif defined(TARGET_S390X) #define QEMU_ARCH QEMU_ARCH_S390X #elif defined(TARGET_SH4) diff --git a/configure b/configure index 831ebf2..de94ac7 100755 --- a/configure +++ b/configure @@ -6715,6 +6715,14 @@ case "$target_name" in echo "TARGET_ABI32=3Dy" >> $config_target_mak gdb_xml_files=3D"power64-core.xml power-fpu.xml power-altivec.xml powe= r-spe.xml power-vsx.xml" ;; + riscv32) + TARGET_BASE_ARCH=3Driscv + TARGET_ABI_DIR=3Driscv + ;; + riscv64) + TARGET_BASE_ARCH=3Driscv + TARGET_ABI_DIR=3Driscv + ;; sh4|sh4eb) TARGET_ARCH=3Dsh4 bflt=3D"yes" @@ -6883,6 +6891,9 @@ for i in $ARCH $TARGET_BASE_ARCH ; do ppc*) disas_config "PPC" ;; + riscv) + disas_config "RISCV" + ;; s390*) disas_config "S390" ;; diff --git a/cpus.c b/cpus.c index 182caf7..8a0d711 100644 --- a/cpus.c +++ b/cpus.c @@ -2094,6 +2094,9 @@ CpuInfoList *qmp_query_cpus(Error **errp) #elif defined(TARGET_SPARC) SPARCCPU *sparc_cpu =3D SPARC_CPU(cpu); CPUSPARCState *env =3D &sparc_cpu->env; +#elif defined(TARGET_RISCV) + RISCVCPU *riscv_cpu =3D RISCV_CPU(cpu); + CPURISCVState *env =3D &riscv_cpu->env; #elif defined(TARGET_MIPS) MIPSCPU *mips_cpu =3D MIPS_CPU(cpu); CPUMIPSState *env =3D &mips_cpu->env; @@ -2127,6 +2130,9 @@ CpuInfoList *qmp_query_cpus(Error **errp) #elif defined(TARGET_TRICORE) info->value->arch =3D CPU_INFO_ARCH_TRICORE; info->value->u.tricore.PC =3D env->PC; +#elif defined(TARGET_RISCV) + info->value->arch =3D CPU_INFO_ARCH_RISCV; + info->value->u.riscv.pc =3D env->pc; #else info->value->arch =3D CPU_INFO_ARCH_OTHER; #endif diff --git a/default-configs/riscv32-linux-user.mak b/default-configs/riscv= 32-linux-user.mak new file mode 100644 index 0000000..865b362 --- /dev/null +++ b/default-configs/riscv32-linux-user.mak @@ -0,0 +1 @@ +# Default configuration for riscv-linux-user diff --git a/default-configs/riscv32-softmmu.mak b/default-configs/riscv32-= softmmu.mak new file mode 100644 index 0000000..f9e7421 --- /dev/null +++ b/default-configs/riscv32-softmmu.mak @@ -0,0 +1,4 @@ +# Default configuration for riscv-softmmu + +CONFIG_SERIAL=3Dy +CONFIG_VIRTIO=3Dy diff --git a/default-configs/riscv64-linux-user.mak b/default-configs/riscv= 64-linux-user.mak new file mode 100644 index 0000000..865b362 --- /dev/null +++ b/default-configs/riscv64-linux-user.mak @@ -0,0 +1 @@ +# Default configuration for riscv-linux-user diff --git a/default-configs/riscv64-softmmu.mak b/default-configs/riscv64-= softmmu.mak new file mode 100644 index 0000000..f9e7421 --- /dev/null +++ b/default-configs/riscv64-softmmu.mak @@ -0,0 +1,4 @@ +# Default configuration for riscv-softmmu + +CONFIG_SERIAL=3Dy +CONFIG_VIRTIO=3Dy diff --git a/hw/riscv/Makefile.objs b/hw/riscv/Makefile.objs new file mode 100644 index 0000000..1e475e9 --- /dev/null +++ b/hw/riscv/Makefile.objs @@ -0,0 +1,13 @@ +obj-y +=3D riscv_elf.o +obj-y +=3D riscv_htif.o +obj-y +=3D riscv_hart.o +obj-y +=3D sifive_e300.o +obj-y +=3D sifive_clint.o +obj-y +=3D sifive_prci.o +obj-y +=3D sifive_plic.o +obj-y +=3D sifive_test.o +obj-y +=3D sifive_u500.o +obj-y +=3D sifive_uart.o +obj-y +=3D spike_v1_09.o +obj-y +=3D spike_v1_10.o +obj-y +=3D virt.o diff --git a/include/sysemu/arch_init.h b/include/sysemu/arch_init.h index f999bfd..00c305f 100644 --- a/include/sysemu/arch_init.h +++ b/include/sysemu/arch_init.h @@ -25,6 +25,7 @@ enum { QEMU_ARCH_TRICORE =3D (1 << 16), QEMU_ARCH_NIOS2 =3D (1 << 17), QEMU_ARCH_HPPA =3D (1 << 18), + QEMU_ARCH_RISCV =3D (1 << 19), }; =20 extern const uint32_t arch_type; diff --git a/qapi-schema.json b/qapi-schema.json index 5c06745..79a2f62 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -410,10 +410,12 @@ # An enumeration of cpu types that enable additional information during # @query-cpus. # +# @riscv: since 2.12 +# # Since: 2.6 ## { 'enum': 'CpuInfoArch', - 'data': ['x86', 'sparc', 'ppc', 'mips', 'tricore', 'other' ] } + 'data': ['x86', 'sparc', 'ppc', 'mips', 'tricore', 'riscv', 'other' ] } =20 ## # @CpuInfo: @@ -452,6 +454,7 @@ 'ppc': 'CpuInfoPPC', 'mips': 'CpuInfoMIPS', 'tricore': 'CpuInfoTricore', + 'riscv': 'CpuInfoRISCV', 'other': 'CpuInfoOther' } } =20 ## @@ -512,6 +515,17 @@ { 'struct': 'CpuInfoTricore', 'data': { 'PC': 'int' } } =20 ## +# @CpuInfoRISCV: +# +# Additional information about a virtual RISCV CPU +# +# @pc: the instruction pointer +# +# Since 2.12 +## +{ 'struct': 'CpuInfoRISCV', 'data': { 'pc': 'int' } } + +## # @CpuInfoOther: # # No additional information is available about the virtual CPU diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh index ea5a748..bdb21bd 100755 --- a/scripts/qemu-binfmt-conf.sh +++ b/scripts/qemu-binfmt-conf.sh @@ -4,7 +4,7 @@ =20 qemu_target_list=3D"i386 i486 alpha arm armeb sparc32plus ppc ppc64 ppc64l= e m68k \ mips mipsel mipsn32 mipsn32el mips64 mips64el \ -sh4 sh4eb s390x aarch64 aarch64_be hppa" +sh4 sh4eb s390x aarch64 aarch64_be hppa riscv32 riscv64" =20 i386_magic=3D'\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\= x00\x03\x00' i386_mask=3D'\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\= xff\xfe\xff\xff\xff' @@ -100,6 +100,14 @@ hppa_magic=3D'\x7f\x45\x4c\x46\x01\x02\x01\x00\x00\x00= \x00\x00\x00\x00\x00\x00\x00 hppa_mask=3D'\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\= xff\xff\xfe\xff\xff' hppa_family=3Dhppa =20 +riscv32_magic=3D'\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x= 02\x00\xf3\x00' +riscv32_mask=3D'\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\x= ff\xff\xfe\xff\xff\xff' +riscv32_family=3Driscv + +riscv64_magic=3D'\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x= 02\x00\xf3\x00' +riscv64_mask=3D'\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\x= ff\xff\xfe\xff\xff\xff' +riscv64_family=3Driscv + qemu_get_family() { cpu=3D${HOST_ARCH:-$(uname -m)} case "$cpu" in @@ -124,6 +132,9 @@ qemu_get_family() { sparc*) echo "sparc" ;; + riscv*) + echo "riscv" + ;; *) echo "$cpu" ;; diff --git a/target/riscv/Makefile.objs b/target/riscv/Makefile.objs new file mode 100644 index 0000000..abd0a7c --- /dev/null +++ b/target/riscv/Makefile.objs @@ -0,0 +1 @@ +obj-y +=3D translate.o op_helper.o helper.o cpu.o fpu_helper.o gdbstub.o p= mp.o diff --git a/target/riscv/trace-events b/target/riscv/trace-events new file mode 100644 index 0000000..9284b1f --- /dev/null +++ b/target/riscv/trace-events @@ -0,0 +1 @@ +# See docs/devel/tracing.txt for syntax documentation. --=20 2.7.0