From patchwork Fri Aug 23 23:37:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112471 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CA48A14DE for ; Fri, 23 Aug 2019 23:43:39 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9FE6621655 for ; Fri, 23 Aug 2019 23:43:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="J5g8e/8Y" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9FE6621655 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:34920 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JDW-0002Vo-B1 for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 19:43:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49266) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JBa-0000XH-3R for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:41:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JBY-0008SY-EB for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:41:37 -0400 Received: from esa3.hgst.iphmx.com ([216.71.153.141]:59157) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JBY-0008Ru-2R; Fri, 23 Aug 2019 19:41:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603696; x=1598139696; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=HWUFyc+Fo4+HWuoDJwp3NzT6kozLzmjT+cNqe5l9dO0=; b=J5g8e/8YGdjnDBUczMpGZ2IGWJSdY18dI3tc1eEOCaT1/5vfUHZYKHqv ibfJSPbGYz/7tx+aiaK4TB0ZYjREtKwhYA0sWIdjdKSTO4I1pvJrDRAdk CNefMO978e1Mh1o2ieeS0nBHOl930I4fAo5h5r40VNC4D597/ECng/YDy GofRDgXcvbonk5fdp9EMY1qHHLgTH1NXOK8fQJCFouasJUs0dJXbddr2b yEDhoq+chHZrOYw73fVEEn+qM1m9BNoXZCHIrDoBbbK4hkX3ZNQDH0vNl YSfFUZcOe8XW6UzWjsHldSneTqUpKPcq/ldFjpihrNiou+Mpj03BgxN41 w==; IronPort-SDR: IwrwJgtrkT8BwUryDoKWoDHNwz0soExqc9msDyR6Zw7KCScjWg/sP1UpkszNqbiZ6Pr5NPC3uK P/k4VR9icdJ17P6bwK+1756BXQn1ueAoTV6Dx91hgKdN2qEBOt2tbkRGJeiw9e3XKUMQY5qNah 0y5BhQskwvXO0y5tgIOT5hgEYBRsgSI6pAKjVCLBa5Hs9ehBm5odPNmSNWephhx1jjh3v4FWYx 80pHEKL4EIulAgaq/QTM0ozB5HO6iCmMAbNWuaZXJqrJfKK4yOUSu3yanRn9H3Hk3KQ+05JoSN 52M= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="121144249" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:41:33 +0800 IronPort-SDR: tDVVS8DD1EfYJfjgvKTiMTxrvgdeLZLn55RVhQIoo/q3Uq1F+bGdwxQUS54KQXHHCP1DkFrmRV Mvzlmbw4DjkN/1MVM81I2Qt57aFGENfg4L44eucxUd10/87GwHP7yJv6J+53TFsY7LmXQV/lTT RabmGdRIhjURf1t5hbeEiolBaE/NbDAs7qfbs7YGx5Uoho38P6ClNjQ64lIQG2T31kcrnhwE5+ vJhzAXd2Z1Ux2Mza4qw4r96DEO9hwqjGXe1TiEMu1VD+HwC4LSQhnsng2ENg3py3Qw8d5O888Y /T6ugC0QUnGicOXQwI1gt6+M Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:38:50 -0700 IronPort-SDR: VHoc3CLz3S9RsCWJR2y5gQij7bRDOc8Sphp9y+6ULj570siKSeLsgTcIXCGWR3Z+xMGWT8TI5S KvnfFkfk725Vm3+EDLGagbN/sK8P38nqkfRVAlyjHNSFONphnLtcM6ipodiVomX0ff7WT79Sr1 nI5JsauU2K8fuaECk/pXWuBfTOWPDzy8NdIRiK+mr/FkbEV7LRpc4ow3VrJ6JWqfYVsOpdRtkr oA0kD5Qg/fZ7yuE/qrOBvREaPjJlmAl/lw1lLjqt3VkNpcLgGgvTE4z17xxTHlFTkxOqS/icJo 5hQ= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 23 Aug 2019 16:41:33 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:37:52 -0700 Message-Id: <008eba3fe3b65cc5d37a1ced51d3631b23bef330.1566603412.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.153.141 Subject: [Qemu-devel] [PATCH v1 01/28] target/riscv: Add the Hypervisor extension X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu.h | 1 + 1 file changed, 1 insertion(+) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 124ed33ee4..7f54fb8c87 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -67,6 +67,7 @@ #define RVC RV('C') #define RVS RV('S') #define RVU RV('U') +#define RVH RV('H') /* S extension denotes that Supervisor mode exists, however it is possible to have a core that support S mode but does not have an MMU and there From patchwork Fri Aug 23 23:37:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112469 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2719414DB for ; Fri, 23 Aug 2019 23:43:39 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id F105821655 for ; Fri, 23 Aug 2019 23:43:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="qFkVqRiJ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F105821655 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:34916 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JDV-0002UE-GS for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 19:43:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49269) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JBa-0000XI-5a for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:41:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JBY-0008Sf-TY for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:41:37 -0400 Received: from esa3.hgst.iphmx.com ([216.71.153.141]:59165) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JBY-0008SJ-JF; Fri, 23 Aug 2019 19:41:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603697; x=1598139697; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=IHAr6i8MPjYtCWcd0AnEateuP1Thwzh5uOKLFN0AYFI=; b=qFkVqRiJZilLx7E14xmo3/EEzn7lz8UEe7DooJQsgpo1ZsTdUjRmPoEF cR13Ncht4yW7CqPc761dwCzdVCnhxTdtDnQoe1wz5wahTnrbTVbMzKBaO +MGtZtf8Zm9Zs9v/BBpsb+JxDjCrfp6ZtSERsVtWEB+1Y9vsB7xDmEJzz uEv5XdGPE52VNXFzp2e0UASy8mLoiHsBSfIHHROGH+l8KIafRpQXYx8Hg uOb7yiVd50bSBo/hDZm8pL8X/VwkOeQtujA5n3EGX8B7aPXEbz50wtkQZ o5mPya4iu5afTKEMQjjFszaV8WEG7syxeYaUt9tMmeyOobdolle5EAQoZ g==; IronPort-SDR: asHZ+Gp3zdZVb6pUUYiTheOrQRzBuWejVRShS9UyFbzzrG5ZsjXpk/FP9A3nPasKar9q0Zg52u qERGcMm8TFaxyZ7MlipJGAcn7CxAEyOKD86FrqDGrXmh6zHSq8xdW0jqKhVfTP0nMwx6PBAJcp hkUO/dCGl0RLtvvBaToJyCArREnKUUUcC6VoNnTQzwb8SXBP3oZYQkcfmjLEbO4lLs0I0eEbor byt2sFmNgeMRw2vHbeRO7y1EXiJC+7deWDL50+/1z8MyFl7TCtamG62ikKBkPspkgPh8PMFN2X 0NA= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="121144251" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:41:35 +0800 IronPort-SDR: 2sR6CFVaUlAyLuvYUtXi2S9ECGvqNUJBSazUmM3UyFUps1e5Rx+Bq4xj5XxwLQ9/9aKdJirMYI 2KQUQTfhVlehwgkUU0/hoXVTvnLaH7xUA/8BeSLQEJJ1NrC3O2YbB3M+93apc6042pKtxCvrcR q5rsooZw64IfPtJB4eY/n/MgtIodQJQSE+mGtLefVthF4W8ciqHVQZvCa6doHponFYyReVQDMx dZqf7Yox4BClKvSlnD3YMTJcbmKM6U/7394ztNKqtAxpZ2YUbeDBbAfmUp/w21bgub5KAZf/He TvR+vO7uTskqxI5tKJVjZxeA Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:38:52 -0700 IronPort-SDR: DgzDMaWpm6z+L1OhEx521lMQBi3FfvUp3IcY70crlggfiD0a5XC+32WdGpCSUCtKs7ly7YfamB 8P+xto4QuSk9FF5zGLjW04DO6mXINXmhS5+bqElJgypbLhFtNzq31lOyko0NvrCMBgvdf7Z9AT bZEyA6gHzw5F61hkblieKz1rdAzanS3e3DhiXOsrL5z53BCeRfILR6dkK8ZCo6rPdEFCUaiq/I sk6PfO6Fek9bZ3thEnjJidgeVkV/eqjOAYvcTWaSUo72oKunC903zjx5M2BZzSq2V7Ilwdum37 094= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 23 Aug 2019 16:41:35 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:37:54 -0700 Message-Id: <1c1d359caa6633349158debc38e07156a10b63e8.1566603412.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.153.141 Subject: [Qemu-devel] [PATCH v1 02/28] target/riscv: Add the virtulisation mode X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu.h | 4 ++++ target/riscv/cpu_bits.h | 6 ++++++ target/riscv/cpu_helper.c | 23 +++++++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 7f54fb8c87..0ef1ecb0e0 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -117,6 +117,8 @@ struct CPURISCVState { #ifndef CONFIG_USER_ONLY target_ulong priv; + /* This contains QEMU specific information about the virt state. */ + target_ulong virt; target_ulong resetvec; target_ulong mhartid; @@ -257,6 +259,8 @@ int riscv_cpu_gdb_read_register(CPUState *cpu, uint8_t *buf, int reg); int riscv_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg); bool riscv_cpu_exec_interrupt(CPUState *cs, int interrupt_request); bool riscv_cpu_fp_enabled(CPURISCVState *env); +bool riscv_cpu_virt_enabled(CPURISCVState *env); +void riscv_cpu_set_virt_enabled(CPURISCVState *env, bool enable); int riscv_cpu_mmu_index(CPURISCVState *env, bool ifetch); hwaddr riscv_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr); void riscv_cpu_do_unaligned_access(CPUState *cs, vaddr addr, diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index e99834856c..1fbde516be 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -422,6 +422,12 @@ #define PRV_H 2 /* Reserved */ #define PRV_M 3 +/* Virtulisation modes */ +#define VIRT_OFF 0 +#define VIRT_ON 1 +#define VIRT_MODE_SHIFT 0 +#define VIRT_MODE_MASK (1 << VIRT_MODE_SHIFT) + /* RV32 satp CSR field masks */ #define SATP32_MODE 0x80000000 #define SATP32_ASID 0x7fc00000 diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 225e407cff..7b0bb14c01 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -81,6 +81,29 @@ bool riscv_cpu_fp_enabled(CPURISCVState *env) return false; } +bool riscv_cpu_virt_enabled(CPURISCVState *env) +{ + bool tmp; + + if (!riscv_has_ext(env, RVH)) { + return false; + } + + tmp = (env->virt & VIRT_MODE_MASK) >> VIRT_MODE_SHIFT; + + return tmp == VIRT_ON; +} + +void riscv_cpu_set_virt_enabled(CPURISCVState *env, bool enable) +{ + if (!riscv_has_ext(env, RVH)) { + return; + } + + env->virt &= ~VIRT_MODE_MASK; + env->virt |= enable << VIRT_MODE_SHIFT; +} + int riscv_cpu_claim_interrupts(RISCVCPU *cpu, uint32_t interrupts) { CPURISCVState *env = &cpu->env; From patchwork Fri Aug 23 23:37:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112497 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7480A1399 for ; Fri, 23 Aug 2019 23:51:33 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 49EEC2173E for ; Fri, 23 Aug 2019 23:51:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="QIbaJTPl" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 49EEC2173E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35048 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JLA-00028q-5L for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 19:51:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49320) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JBd-0000Ye-Si for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:41:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JBb-0008TU-H1 for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:41:41 -0400 Received: from esa3.hgst.iphmx.com ([216.71.153.141]:59171) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JBb-0008T1-6X; Fri, 23 Aug 2019 19:41:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603699; x=1598139699; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=MkAG/VVwdeaPegkumfVuWkFQ4o+fxkzqvGgyYa5u9Yo=; b=QIbaJTPlyUwuVcoE5aBCDKpk9ZhcMIvjpqd82Cb+BU+E5Tx7RQcisnPD VXt9UN/5fXadZOWzKGZFx39oSJuiZlYy2x1ej4cP89Z6UmoE0rp0JTwsd H3SsrE+PtCT98JWnL5+3+iOzBe5tVcNXWPjB/Ak78woZpZyFCbkanj7+6 c9yCV883NJtQB95Cj2APrdkaqP3grJq1SNZbmaoIEA71nrHASxUMZN41b Vg0JMKTjOLLZWC+MduGUKiqO1xiStrH9OoCu1H/tL5uK21YvuB+dqNpeQ FJMdJqChXpcjPHWmyqlmeY2xsSM+Oc3HsprZiPD7+pO2S0XXzIfegW6op g==; IronPort-SDR: j/eZmZCXPvDnHrgPfeeNWI9cZ8Sk5tyvXj23R2/0gxaOUSwr5ti0Q1wTGzSYr2242t+lKxlEf8 156snnBPflq4OrtExmiLnx5yjK0zQTxWT7qKq8AyWhnZmG0ZeDOvjXlg85P4f2l1VvIG28IJuG m4+ntWM6KkbWZXvF2Agqe/ikfRPrpGXzU4Xmr7pUrNO2CPfIyxILJJjN04VRvdOlY2zFcu/p/D Efmsjr5udHxOyA30kSmqim0yIcilRrCmp2XTimlqydKK8F9Gxb9jCK2xTWSRzyqraVmjXGBVIv 9kE= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="121144253" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:41:38 +0800 IronPort-SDR: hz+bknSYVYFx5qxYqRoq//czlGyN0WkjV9Od2xhGb+k9zCn+Inpso0KL0aQijerYRNQS+gHl1p 1vEqoZEhKPIJt3ZMKp4R4iAnqqZBdUCmclPklfJ7er8ipD4DFWcAOrgs5bxlUl2ftkbBRh8KL7 SmUPtikRSrSkBU7eVx2SamfLvcMsr5+hCVLHZgDsABCysiVF0wCSvihNGwsmDJzxj6Z+MmCen4 8QeiJPymyAJllY3mQQhcIvrPX81f8s7rxCzriHDoL9rIqkvro5Z34M/BvklH90rKcdBQVoh8pI eiLubOj0qUkvdTfQfVEwNV2x Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:38:55 -0700 IronPort-SDR: 1hA7UBIge4s9pp47fxQa/uVP0C9HiddQMptrpWfq7fyzX5ShkhhEn8g3UY/bbdPfoZIEGFwr1T AX5Fq+pGJLrbKCYRIRIRovlARUPaYPBGss5Noxj7b9EP6+wdsdWth9k0AYnyNEL8iSWu+h9Vwc UkZhMm7O9lfYjClMhchJfIN19+KPRqoKeSm9UZOOGsQkTiLdCECfegzAgnRY0XeMc9XNAHlq6/ DQQoJO0yzgdwu3PXNUyPiV/MX0AOOg0hPYtDrxtL9YQAvdme0qbTWBs+/Of0aIA8H7mgN/nqp5 Dkw= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 23 Aug 2019 16:41:38 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:37:57 -0700 Message-Id: <9db2403d223b3e6d2d20086176a975dffabb175b.1566603412.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.153.141 Subject: [Qemu-devel] [PATCH v1 03/28] target/riscv: Add the force HS exception mode X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Alistair Francis --- target/riscv/cpu.h | 2 ++ target/riscv/cpu_bits.h | 6 ++++++ target/riscv/cpu_helper.c | 23 +++++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 0ef1ecb0e0..3a95c41428 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -261,6 +261,8 @@ bool riscv_cpu_exec_interrupt(CPUState *cs, int interrupt_request); bool riscv_cpu_fp_enabled(CPURISCVState *env); bool riscv_cpu_virt_enabled(CPURISCVState *env); void riscv_cpu_set_virt_enabled(CPURISCVState *env, bool enable); +bool riscv_cpu_force_hs_excep_enabled(CPURISCVState *env); +void riscv_cpu_set_force_hs_excep(CPURISCVState *env, bool enable); int riscv_cpu_mmu_index(CPURISCVState *env, bool ifetch); hwaddr riscv_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr); void riscv_cpu_do_unaligned_access(CPUState *cs, vaddr addr, diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index 1fbde516be..204d9d9a79 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -428,6 +428,12 @@ #define VIRT_MODE_SHIFT 0 #define VIRT_MODE_MASK (1 << VIRT_MODE_SHIFT) +/* HS-level exception modes */ +#define CLEAR_HS_EXCEP 0 +#define FORCE_HS_EXCEP 1 +#define FORCE_HS_EXCEP_SHIFT 1 +#define FORCE_HS_EXCEP_MASK (1 << FORCE_HS_EXCEP_SHIFT) + /* RV32 satp CSR field masks */ #define SATP32_MODE 0x80000000 #define SATP32_ASID 0x7fc00000 diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 7b0bb14c01..5bcfc2e090 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -104,6 +104,29 @@ void riscv_cpu_set_virt_enabled(CPURISCVState *env, bool enable) env->virt |= enable << VIRT_MODE_SHIFT; } +bool riscv_cpu_force_hs_excep_enabled(CPURISCVState *env) +{ + bool tmp; + + if (!riscv_has_ext(env, RVH)) { + return false; + } + + tmp = (env->virt & FORCE_HS_EXCEP_MASK) >> FORCE_HS_EXCEP_SHIFT; + + return tmp == FORCE_HS_EXCEP; +} + +void riscv_cpu_set_force_hs_excep(CPURISCVState *env, bool enable) +{ + if (!riscv_has_ext(env, RVH)) { + return; + } + + env->virt &= ~FORCE_HS_EXCEP_MASK; + env->virt |= enable << FORCE_HS_EXCEP_SHIFT; +} + int riscv_cpu_claim_interrupts(RISCVCPU *cpu, uint32_t interrupts) { CPURISCVState *env = &cpu->env; From patchwork Fri Aug 23 23:38:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112473 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4D81414DE for ; Fri, 23 Aug 2019 23:43:46 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 249C021655 for ; Fri, 23 Aug 2019 23:43:46 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="AmnRcncS" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 249C021655 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:34924 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JDc-0002gI-N3 for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 19:43:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49326) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JBe-0000Z3-7P for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:41:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JBd-0008Ty-7y for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:41:42 -0400 Received: from esa3.hgst.iphmx.com ([216.71.153.141]:59171) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JBc-0008T1-SX; Fri, 23 Aug 2019 19:41:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603701; x=1598139701; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=EolHft63t6uTu8IMAST3aFoydFsm2RQTevCGlKxXc4o=; b=AmnRcncSJe3LQSLrUruGrUmGmAGpug8i/vjSPazSl3OIgv7r0sP/qdCK NBzmUMbVHAF/R+FDtXLx9wPSDjXyt2MyGxnCzy2vedNQnYt6cVpx7Q7gu GHiQzmSOwRY31Wmnp0wsE3nQpajTjOyi3vz+1EOdXrQwgdeMjM4hr61U8 sXqpZmefh2/iwxnSZoX8PX+36CjroDYVUBnv+bUnJNC8dRwXjGnZF2uQD c/FTQyQUb2PCSXOFvI8F3V8k1y9gulk8K92gW8PpkdlDsuBPWUXo5EUZm PiNK6LpPVW+7XW3MRjH9J5VhN/pCrNTCH23tRuwkAxvrmX/XxPyi6zuaU g==; IronPort-SDR: wSqaaUYnsmuzyRQoMkt9sTlaCxxPpXDFbQa+Wru1cFgiFTX8lWZe2Tb5Penxs0ALZr35Igj0N6 xO4M4qD13qWoovzvZe9s+Ggy/sh+CSJJYVkx9EklAGmO5Vhh+TUP+AH38NJ2oQUViMz244B64S oHvU3ytBR/r+e0sFLp4eVb43mXxjDvJKnHioLJ9p/KVxq7LdQ3HUFD4G/6mBjnUvioNhnQC9DZ rFEJebzYgFw9AMggqK8PZJcL3uiZvDJ3HQ1q/qHEbECnih4XAmQviFbLNutvEGWiWIYcd1Bc1v f58= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="121144254" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:41:41 +0800 IronPort-SDR: Vk2Gy+no9X2ql3ylETSWYf4iDvmPQKq9OMCWz4FozCg8d8eipzr0iFkcVitE6WfxJ5h/I2a273 gq/VJkpDXr5QsqU6tEQjAP48G6HDpzjDaEncjPll3wNx4ZdNjpgfUdt/PymkSEJxsDB8igQrS0 06p2ChV1PdrUnzKBve+SqXh60CkRX+8dlV8i4NT4OeLxDiUxmaqR8m1TCYamWX1GazrY2ZY8W1 WnoGn+jN31FVYCawPe9UWVoBGvThxd3BRUocs5KrjYx++N5sLyT6dFFn8mK4ao33fdeT0/schO S87flR1JdVzRT/Rl/8vUmwS0 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:38:58 -0700 IronPort-SDR: DXb9Yc1dpkfa9w3M3uTRh38YoGv3G0EkJ3HIymrv1FXO9eziYv/Xz+c7YIFkirnNtY8GZzyILZ CNwjoZFBAWEooUXRZ3uvnG6VPfVXEiebCr7jrtUHszYSTVk5J6hgWh+4tvZdiLm1drLYSe+s1X ZE35U0mnqch/bHv6TANnom0hCl4hra+VaZvVj0q84JPBj7xVgd5XHRxbfU7p++mXcRAzcfqVXu jvKUE2NiH/6RABVIJzgbYjNa7aqgVmeUbdwP3TCIyv2tGKHHz7wI8IplY91waj3zQeWkGBC9TC jOI= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 23 Aug 2019 16:41:41 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:00 -0700 Message-Id: X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.153.141 Subject: [Qemu-devel] [PATCH v1 04/28] target/riscv: Fix CSR perm checking for HS mode X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Update the CSR permission checking to work correctly when we are in HS-mode. Signed-off-by: Alistair Francis --- target/riscv/csr.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/target/riscv/csr.c b/target/riscv/csr.c index f767ad24be..471f23a1d0 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -799,9 +799,15 @@ int riscv_csrrw(CPURISCVState *env, int csrno, target_ulong *ret_value, /* check privileges and return -1 if check fails */ #if !defined(CONFIG_USER_ONLY) - int csr_priv = get_field(csrno, 0x300); + int csr_priv = env->priv; int read_only = get_field(csrno, 0xC00) == 3; - if ((write_mask && read_only) || (env->priv < csr_priv)) { + + if (riscv_has_ext(env, RVH) && !riscv_cpu_virt_enabled(env)) { + /* Plus 1 as we are in HS mode */ + csr_priv++; + } + + if ((write_mask && read_only) || (csr_priv < get_field(csrno, 0x300))) { return -1; } #endif From patchwork Fri Aug 23 23:38:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112479 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A41B9912 for ; Fri, 23 Aug 2019 23:47:49 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7A90021655 for ; Fri, 23 Aug 2019 23:47:49 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="pG1gt+ny" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7A90021655 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:34990 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JHX-0006f6-Uh for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 19:47:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49385) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JBj-0000c8-UW for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:41:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JBi-0008Vc-OZ for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:41:47 -0400 Received: from esa2.hgst.iphmx.com ([68.232.143.124]:50260) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JBg-0008Ui-Qi; Fri, 23 Aug 2019 19:41:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603733; x=1598139733; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=fWPOcwK1QLVia/IV12AzFAZG+JyzmslPbfnxXbr+OYo=; b=pG1gt+nyk+eCq0jnR/Buu6SPIeSYtfqVtl5iqceuFuS3AyVQWdvmvtnm l8suSN3s2igAe3oDw5/s2G8vKKuIxrcsA5hblwrrzZOm7P9IZYBIXmR3j rTNYG1px1W73nT5YsViA8tVTu3lBz6gqYbk7VPZxrCwJ33SeAeDMeWGiV CtC6o/XC6d6RGEQVfMQtqsWKEE7JWW5q290VB8DH/YHhjfjZ6MNrXz6v/ Ak2WwG65QcDjkzRr8xSNYnNzavpD+tOJ2yp/9Gs48VkDCE3I+OkS7nLm8 H1pChqTR+jKAw+5yUE4wRxk+X4R5SaphzIEemBwNQImRfoJyvMFnCWP1T g==; IronPort-SDR: cZocukTPCiZfxPmUXLhnLueZ2Fe9r4iqtYAqM/r/2INeWGFN+YSlAjKVwGveVgLx1gtI7k6nPq nxSDM+++WwFUaHdoriz3YxiN59nE0IGLS8qCC74hVApWvTi7zDhH44AxvFcNjMaEyLMraHymHD sa2fMvK/5+3BEhizO/ZEwekLK+s1RkhUwyY5hzahx/OwXtB3dBLBsosizwAQoJd6A8S35Gn4my ZIj/cx70TIGLP/LFJN5LCHy7/HrMIWv9jWNQ77DFwUSLLuGUwtvP2dmCffDEJfPCvws3bVyVKB E/A= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="217013885" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:10 +0800 IronPort-SDR: pIo/DncM8PUyFDl7sFXj3Fpm6gbs9dcpucWnfpthFTwutY+12ip6BgWz1COmYpCrqcrOpgleDn ZBTxyp3ciJiQHwpDzQKeZUZXCpZHJeZhQzeiyEBizKgKYSqaZQVBDUSGuy4PXnFHK5A+Qu++Ki kHGyWdoHPVoULdeVwa1AtjLLsAfhxXOh4i9pISyA+XqNS+RPVD2LJlrJaUx8zXCFjmzLur7AvS 1BuvJuyIjBBxb87O2bcNUERcNJbZGr3uXCwTrFVtP5OyyEpLrNCg4Jj62Vz158SPlSw3EiOUAs bUnyDtYWZoEBbg5Rxw8CX6lz Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:00 -0700 IronPort-SDR: sPwGntx8ShKaZHw/GwJ/7ZeJ0qNbruMogp6800CKahDohsPgdiJ6SBJBOVzrh+cfVgdjpquIeS BjVMN/fQuebJ/feJWWZCvPNbjR6OBmQOOxFN1uilvOuKF20teVKqyjf3equKgSGppdpPrFl8CR 1mT8IhpP/Jro9K3Ohzs8MLcYGY2V6eB6qQ1Km1jbuMypUDpx9x4n90eV9+24+gEQgcwehca6Vi 8HRXZnHuHhhtDB6vpqPgbsh7xIugwDHWfTWzb8wegbjiwJcwUwO3tqAkn+p4GV6p2SI0d3chq7 p1c= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 23 Aug 2019 16:41:42 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:02 -0700 Message-Id: X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 68.232.143.124 Subject: [Qemu-devel] [PATCH v1 05/28] target/riscv: Add the Hypervisor CSRs to CPUState X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" As the MIP CSR is 32-bits to allow atomic_read on 32-bit hosts the vsip is 32-bit as well. Signed-off-by: Alistair Francis Reviewed-by: Chih-Min Chao Reviewed-by: Palmer Dabbelt --- target/riscv/cpu.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 3a95c41428..4c342e7a79 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -154,6 +154,23 @@ struct CPURISCVState { target_ulong mcause; target_ulong mtval; /* since: priv-1.10.0 */ + /* Hypervisor CSRs */ + target_ulong hstatus; + target_ulong hedeleg; + target_ulong hideleg; + target_ulong hgatp; + + /* Virtual CSRs */ + target_ulong vsstatus; + uint32_t vsip; + target_ulong vsie; + target_ulong vstvec; + target_ulong vsscratch; + target_ulong vsepc; + target_ulong vscause; + target_ulong vstval; + target_ulong vsatp; + target_ulong scounteren; target_ulong mcounteren; From patchwork Fri Aug 23 23:38:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112499 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6B33C1399 for ; Fri, 23 Aug 2019 23:51:40 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4144121655 for ; Fri, 23 Aug 2019 23:51:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="HiqcWhh1" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4144121655 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35052 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JLH-0002G3-Eb for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 19:51:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49393) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JBl-0000cn-GV for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:41:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JBj-0008Vu-2m for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:41:49 -0400 Received: from esa2.hgst.iphmx.com ([68.232.143.124]:50261) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JBi-0008VO-Rq; Fri, 23 Aug 2019 19:41:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603736; x=1598139736; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4fCEIJykJaL9FzeuRrcOgwXmFygv+5KK+9CM95lLsXA=; b=HiqcWhh1SYpvm58Y6BxwxRe1eoMXuoUDy69FbNIjc4jX2OCRpBvoP3I2 MxqOglbd9P/2cSdhuxdcqMda2jH/siw1nV+HPtWZk6Y/MQXLSaIpYMPGH edi4kkubpPeTISwg4HCb1ZeCPmk5+makNSiikaqOVnUzvpK4If1bMl2sS t64E6pT8ofxefW3k8qOyz0tgTXcqhlIkzHu1CRfqFukmBMI44hC851xw0 LVcDSmYHy0Hpm5PZxdIaO+e0BGugZuih1kuODKcMO6bIjeCvSyPi8XCdE CogDbkNVBr5uqeSHoh7dgArZYeiDVXeh7TbseoVm/WDsLu3VjAQkXR3kR w==; IronPort-SDR: w1HfI8idvD5gnZN9fWGmWCXzE8MFrmhJq7XHgGay1Cr8r/INzHIKrM/c/Q+9dvAVUH11lNKa07 H4tu5LKGk5HKZC0jmGrOXgwufq1anKohichpABe02b2beWWY4x9IkTB0LvMRtEaBJY60I1q7EM Jm4hvH/NXXyvVommqNdmbcQk9x+MPge8QvHxEDpQhbdUiszbhgtLw3o8HBWa1chX7/iA2PfhrY S0cavmW6PF9cS65hChZ1bEBUg53wv/pgJVegGxZMuNQMke9r0y1FAQfoIiIGAs3L+2svEKzwTc 65k= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="217013888" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:14 +0800 IronPort-SDR: 0DibZqr2OwVTTf8w711kl3ETWmSpfruFplgRuHxGsGk9H5mzZvKyvj/atnAghhfqSiRVlkYXmj 7Z0VvhyuFsWLGoU+Jetx9EOF+JquMzmIjq+YZLLwalr7mOILgOVQ7Uzneza/oFc2BHeovwBimJ jqPPH1fn51LKe/lz890ILh6GF2q4ykZDJalHn3JW6h+bXWEySrTf+GusIISXtaET4Ag7Y4ClK7 lrnUo+lp6dKxUTCiJgPEhnLVOQNc4C1PoNVbiEiF3AVOrGrNGC2PQC4ZkORvlbmChgfiITJ1qt xrqbhb3XM2175KJIM6oq2BEA Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:03 -0700 IronPort-SDR: yqs5Gvo/AnL1lQUsdRc5WwW+RvUbcR4d4+686/o0EgWDMnGbVke5TLbTu6Q/sPJujGkyfCWfsX n0CPVUMt+BUM/8HeDbok5xdyI3lIVHPBdveeiCGRCcfZtzB22o7J2YDfs0c6UMUosJd/ZPWcHy ZWIBmpjHQ0Jth+HK6uU0G8JYThK2WENg+7TAf1Rov3iYPGuKnB6Nczj+KSi+K+G7OVw1wXEs75 NffPsvGbbneE36q5A5c6+uyFo2DfFXa8OrzLdFXSEwjiX7Agi6NJJA1ZBXVPPgNhqaEHc5ur5Y Snw= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 23 Aug 2019 16:41:45 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:05 -0700 Message-Id: <413539f43f6b9c120efd4c882ce7341ef3530b81.1566603412.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 68.232.143.124 Subject: [Qemu-devel] [PATCH v1 06/28] target/riscv: Print priv and virt in disas log X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/translate.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index adeddb85f6..8ac72c6470 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -810,7 +810,15 @@ static void riscv_tr_tb_stop(DisasContextBase *dcbase, CPUState *cpu) static void riscv_tr_disas_log(const DisasContextBase *dcbase, CPUState *cpu) { +#ifndef CONFIG_USER_ONLY + RISCVCPU *rvcpu = RISCV_CPU(cpu); + CPURISCVState *env = &rvcpu->env; +#endif + qemu_log("IN: %s\n", lookup_symbol(dcbase->pc_first)); +#ifndef CONFIG_USER_ONLY + qemu_log("Priv: "TARGET_FMT_ld"; Virt: "TARGET_FMT_ld"\n", env->priv, env->virt); +#endif log_target_disas(cpu, dcbase->pc_first, dcbase->tb->size); } From patchwork Fri Aug 23 23:38:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112509 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 23CB6912 for ; Fri, 23 Aug 2019 23:55:13 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id ED52C20674 for ; Fri, 23 Aug 2019 23:55:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="C2FjOohc" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org ED52C20674 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35112 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JOh-00063I-OA for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 19:55:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49443) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JBp-0000fL-Ez for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:41:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JBn-00005d-EX for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:41:52 -0400 Received: from esa2.hgst.iphmx.com ([68.232.143.124]:50262) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JBl-0008WT-KQ; Fri, 23 Aug 2019 19:41:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603740; x=1598139740; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=RC1jpnfKpSPVNtO61GtMXn3UdcU0g2g0oxsZ5KiVCFQ=; b=C2FjOohcqTGRxr+9yquB62rW9/1OdrMdArOrmuSHPt58b4sG2JKiV41E qcwU2g8iBe7PooeJ3W3BlQ+sREVlOAM1+PGYXpL6Ymivozy6TgQ3CzcT5 aoWInbMcdKNjoNvZ5bNysEzyvSwoj3BRpAFo7IwkXQSbe1vt1eMdkSw+o 7nUa8bELS+a8+z7pyCh63opUPMs/WiTGCXYcdAjfQiF6D0pXU0cBqEmG8 qNzqyk5g24lKUcF7IwQb8/SaI9G29Dn52A+r3EHhmILfHHI3DvFMImlSN aHeg0+t4VCEVH/6HM+C9qsTweMazCvpm4znnxTkhiOkTmUNG3UKZkpbw+ Q==; IronPort-SDR: frVhyGMooABk6e2sKx7Qz7M40fEttSfkybV/LLyHMZqaj9870zDiItgkEmQLUVCWcPvREXQNT8 loJHnPpgjfPQD/tW+4sKlDIOsMKZb7Ei9m4VF36FS1kizdiY6GrfG+GYZZ9JE74rxaXv1N2Szk pt4LhnddCyTvTqYMHv8VPAPVtmUHuE4Rh0y664JEwl9BZBX/waFut8fFXZIpUnasX+q+RUq3FW HGYC+doES2iu0NzhIm6D4twEvuT11PRgXVdeFkB7da+B4eqdJUxM/vjyo/JanMCh9mkmAO9/Rn IJg= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="217013889" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:18 +0800 IronPort-SDR: cU8l17LKy+3mhYy9lw06rUW0SzFegpWghGInp8pAadSzQSsU6WKbusj4rzxwC790ccapKFCXLO ay78r0FYh6RoESprE7kwX+Vs+SwcG8W3UYiihJsgnY0ZTEhgvugxu8qQUscJ8p9/qy/WzOSFV1 Z+lDsdGZs4fq/uZe3rxFfAxZB+zoPikcMst88m/ZoTuyKsxhxTM9g7WLU5bMNsoSL2jX+1d0HS NkXH4yhDjvNYO66Wjon2b5hJBB9LGOFS9wHW2LUbYuHVn3SZ2wZEoCJR73/4vej+3OFzE3Q7bH +uGDyL223h28k1BFY+9iO3sC Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:05 -0700 IronPort-SDR: 3BQzKctzxbEg58BNiFyS/6JjbxPeI4mZBAm1PF6bLi4swOeD3FBLCXqALStNUancfwVpvCuhv9 UoyRGa/ELAs4LI/GLlzol/D9styOIgmd9Dn/IK92s6lCgbc5TtqQdx2zrILmEkdsApvzUdQ2WE WtNif1bankygh7bHXmYPKHwDl2Vd/XoQFcOv8l4A1yDFSdm2+T8Z9DrVgdMZ6yxPPhi8LC7/Ks c5E2/Uee96WEXTbuMsC7VllRxGkNtMbvCwUQrBekLlScEl4uyAlJTu3wg06TtkMCY+cKG2Hm9d Cyc= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 23 Aug 2019 16:41:49 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:07 -0700 Message-Id: <47e7fd90ce1d2373824799274376b29d751d56c3.1566603412.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 68.232.143.124 Subject: [Qemu-devel] [PATCH v1 07/28] target/riscv: Dump Hypervisor registers if enabled X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Dump the Hypervisor registers and the current Hypervisor state. While we are editing this code let's also dump stvec and scause. Signed-off-by: Alistair Francis Signed-off-by: Atish Patra Reviewed-by: Palmer Dabbelt --- target/riscv/cpu.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index f13e298a36..be8f643fc2 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -220,18 +220,52 @@ static void riscv_cpu_dump_state(CPUState *cs, FILE *f, int flags) CPURISCVState *env = &cpu->env; int i; +#if !defined(CONFIG_USER_ONLY) + if (riscv_has_ext(env, RVH)) { + qemu_fprintf(f, " %s %d\n", "V = ", riscv_cpu_virt_enabled(env)); + } +#endif qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "pc ", env->pc); #ifndef CONFIG_USER_ONLY qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mhartid ", env->mhartid); qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mstatus ", env->mstatus); + if (riscv_has_ext(env, RVH)) { + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "hstatus ", env->hstatus); + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "bstatus ", env->vsstatus); + } qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mip ", (target_ulong)atomic_read(&env->mip)); + if (riscv_has_ext(env, RVH)) { + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "vsip ", + (target_ulong)atomic_read(&env->vsip)); + } qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mie ", env->mie); + if (riscv_has_ext(env, RVH)) { + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "vsie ", env->vsie); + } qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mideleg ", env->mideleg); + if (riscv_has_ext(env, RVH)) { + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "hideleg ", env->hideleg); + } qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "medeleg ", env->medeleg); + if (riscv_has_ext(env, RVH)) { + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "hedeleg ", env->hedeleg); + } qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mtvec ", env->mtvec); + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "stvec ", env->stvec); + if (riscv_has_ext(env, RVH)) { + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "vstvec ", env->vstvec); + } qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mepc ", env->mepc); + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "sepc ", env->sepc); + if (riscv_has_ext(env, RVH)) { + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "vsepc ", env->vsepc); + } qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mcause ", env->mcause); + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "scause ", env->scause); + if (riscv_has_ext(env, RVH)) { + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "vscause ", env->vscause); + } #endif for (i = 0; i < 32; i++) { From patchwork Fri Aug 23 23:38:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112511 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 99758912 for ; Fri, 23 Aug 2019 23:55:16 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6F74F20674 for ; Fri, 23 Aug 2019 23:55:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="mwikRrTM" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6F74F20674 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35116 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JOl-00068J-2d for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 19:55:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49444) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JBp-0000fQ-Ff for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:41:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JBo-000068-0r for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:41:53 -0400 Received: from esa2.hgst.iphmx.com ([68.232.143.124]:50262) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JBn-0008WT-Nw; Fri, 23 Aug 2019 19:41:51 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603743; x=1598139743; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=hGnS7Aac7mIfYIQO11OO+v94Mp+zZko9Z6e39Hi5wek=; b=mwikRrTMqAWcj5jmaWADhVHrS0YngTJH2aXBHPIC2CVFnwwdXwRyNsuo bBx8DZxH0ytc+ljiecRIDpKoukMbkbE+pL+fccjpSu6TuEAZSYoPg5AJW IhtmZIwkhbueFnLgf+M7bLOtM6pYdimKV3Evf3YpqB7qvr04MT/N2cpPj Q1NXSw01uw+EFUI4ge3nt/YZbeYVFxCb9AEN7f5MGf4qwZC+JBmWKIeRl eJwOJW89eXFAweWLXjW4SXeJ4/OeDNJadBT97HLQcsMwLvRe5OW42cSgC PuX45nYu7wteR8GU0pzyWr94Z3Xgh3hryZGXHTETKKJYawLDvMkrsWwNU A==; IronPort-SDR: YaMDbXY1MHtkeVsWuw4aNn2fvfVA1R/oyClGzrviWmVWvVC4tIPXhJ9Kiajn+e2fEleK5M3byR N0D+zk4lT6DiDc7miYEQyR+OCQFhRWD1Qk8oc95FJ7zijsFarLgZWZ+RjklL52kAyBXvxcaS0i Iit44O3t+XeLsQiUdZFs2gszz/KIZvavAdIRbMIk/Fyy465/mwoFjpSDkzL36XgZKtdKtdljgU fsQWR+JfakJkNVexSlHpGhrJG5B3eZBxe09VmG2xdYCsD6yD6Hyl8j7wvVTU8agMLI8+XJi0Kh Joo= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="217013891" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:22 +0800 IronPort-SDR: CNQAjvX/EBVSp7oeHeYQFxUhQsb7llhWnp6UZl98zXT1uHRe/hpwPYJ7bX/ilMU7b9XfhxWc+O dDPxJE63uiMKphxbpTTYQFkhFmGRIxf6gmLum+avNO/2+f9ml1OtfaY2YAbbKtFoL2LbPedffG 1G+l5kVF3NxV7wKuFNVnIBdryjFg9yjUxhpi/2J98ScX3km+qI87nWvkNcTsCMfrNqw7lOJnHi dN7LrfjAUXmFSS3ne/d+Bcjx7us3WfwNKgHh3DsY0zqDgafpv94Jz6LhVOJCMc7M/prYyEZOwb 1H1sqbzQY6zRdcmrc3YipsUc Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:08 -0700 IronPort-SDR: uLWoPAf1/41IXYpYl69tfesewC8EjZiuBN1/Qvc4FSsimgYggLB4+7xcCVHjONm6ytkGyZK/gx 0mlpD6msFHfI+Ct3+Arun+qEIz+HYPGOD0vUajR5GPz9iCK9GKQzCaAGGcAD1vfRFBMQZduAsF NMXJElYFVBZu2Roq3Fn0snjDbDiShCHnk3R3diFv1be27YszfDUCAZGflAmMqTrn/VFmNUWc+9 NfwXcRNpKuqqPyZmzPtJRc+LWZyHBxsELb78MvnIxafAt2QJuaIx2g1ur28f9rKpzi7//qt1Ye Wnk= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 23 Aug 2019 16:41:51 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:10 -0700 Message-Id: X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 68.232.143.124 Subject: [Qemu-devel] [PATCH v1 08/28] target/riscv: Add Hypervisor CSR access functions X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/csr.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/target/riscv/csr.c b/target/riscv/csr.c index 471f23a1d0..388775d45a 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -98,6 +98,20 @@ static int smode(CPURISCVState *env, int csrno) return -!riscv_has_ext(env, RVS); } +static int hmode(CPURISCVState *env, int csrno) +{ + if (riscv_has_ext(env, RVS) && + riscv_has_ext(env, RVH)) { + /* Hypervisor extension is supported */ + if ((env->priv == PRV_S && !riscv_cpu_virt_enabled(env)) || + env->priv == PRV_M) { + return 0; + } + } + + return -1; +} + static int pmp(CPURISCVState *env, int csrno) { return -!riscv_feature(env, RISCV_FEATURE_PMP); @@ -754,6 +768,55 @@ static int write_satp(CPURISCVState *env, int csrno, target_ulong val) return 0; } +/* Hypervisor Extensions */ +static int read_hstatus(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val = env->hstatus; + return 0; +} + +static int write_hstatus(CPURISCVState *env, int csrno, target_ulong val) +{ + env->hstatus = val; + return 0; +} + +static int read_hedeleg(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val = env->hedeleg; + return 0; +} + +static int write_hedeleg(CPURISCVState *env, int csrno, target_ulong val) +{ + env->hedeleg = val; + return 0; +} + +static int read_hideleg(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val = env->hideleg; + return 0; +} + +static int write_hideleg(CPURISCVState *env, int csrno, target_ulong val) +{ + env->hideleg = val; + return 0; +} + +static int read_hgatp(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val = env->hgatp; + return 0; +} + +static int write_hgatp(CPURISCVState *env, int csrno, target_ulong val) +{ + env->hgatp = val; + return 0; +} + /* Physical Memory Protection */ static int read_pmpcfg(CPURISCVState *env, int csrno, target_ulong *val) { @@ -950,6 +1013,11 @@ static riscv_csr_operations csr_ops[CSR_TABLE_SIZE] = { /* Supervisor Protection and Translation */ [CSR_SATP] = { smode, read_satp, write_satp }, + [CSR_HSTATUS] = { hmode, read_hstatus, write_hstatus }, + [CSR_HEDELEG] = { hmode, read_hedeleg, write_hedeleg }, + [CSR_HIDELEG] = { hmode, read_hideleg, write_hideleg }, + [CSR_HGATP] = { hmode, read_hgatp, write_hgatp }, + /* Physical Memory Protection */ [CSR_PMPCFG0 ... CSR_PMPADDR9] = { pmp, read_pmpcfg, write_pmpcfg }, [CSR_PMPADDR0 ... CSR_PMPADDR15] = { pmp, read_pmpaddr, write_pmpaddr }, From patchwork Fri Aug 23 23:38:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112517 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2056F1399 for ; Fri, 23 Aug 2019 23:58:27 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E8BD920674 for ; Fri, 23 Aug 2019 23:58:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="AJjyQLeH" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E8BD920674 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35170 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JRp-0001es-IS for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 19:58:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49498) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JBy-0000qy-5Z for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JBw-0000A0-D2 for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:01 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:13670) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JBw-00007y-5c; Fri, 23 Aug 2019 19:42:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603720; x=1598139720; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Azz2ITTRRdvTER3eGckb2PBXCZpqdradly3KVxTJb48=; b=AJjyQLeH/3I+i8VNsvlq7pDUcvQaOx8hrqqFBlfJfMMEnMqgNOaltv5Z oJv/Mo614qke8qCZGOVI/1CbuqbmBjXW6R9Tm1pv3MNxd3lrdOd0vj3Zk k/A5JSPu8RmkVuQfBSrNED8XeI7Ou/h2qa3rJGT35xlNB5MXTdBYP8sLq 8s1TgESpweAVpZtcLuphWZrPtCfpeDR1VF2V208e82FXnXsQ3Zna/mmNH 35s/Vy9Jim36hi7cGcAY5cqpoZhfA5E7H+imT2bxCQ2/fxfPF7ji0mRV3 EySljgxaqOnvCqFtGoJB2ua2/H0Sp3jYnK0bi9g/5FAysvgD2ijnO5kTS A==; IronPort-SDR: nJQsAu62NK4ayGMVEF7EeGcwnF01sD7NlOwusdnQum+hOX4T+niamqEPyi7UoTHxXYLdnrt0/D EIUC55eHwE/44riqoJBa+lCv3BWn+yzSx3zrcYBWlNBPyPN8rtYWJhff2czjvmEKb82PiMCYkJ n1R0Zt0F2wa+4HGIsMDMsF6eHD2q859TOFS6MsxDoKZ+xyO4J96mPKrcXsNh+70PlyDKOg4Et5 F1Ft/fIV770hoYD+e7/DMxgQrPO+KqzlALEad/EV1mCRWlye4TRFrDkULDJFK8xtSv+KOYw/il dmk= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="118154417" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:41:54 +0800 IronPort-SDR: Hp2Gcp4tmEcprc082WnhnyKxmXbKV1z1bslUTDHPjKCH9sZKOQxhmO9J3qqyAUtBZN1o7x6RQq BKVHANgIhNGrGeNMph84FiIxFQA/U5Sj/YsTdn3NAB76y5Z84nKdPeTVP4PSe+rV7Yem0mPykX Xuu6YSRj/2THSBBv96T+EW/4+qpX5VZ6yCBTtHXJjzW+3j4F9dAHc3xsz2okaIPhDuFwz4sExi tPZMn7T+P9S57vshsaU/Wl7QCo/vW9EVv3YR/XzINhaAdcGd6+HD1TeSnU7Dm52RSLqVzccxzn LyNzL5CUhLRdIm+jRKaIT9OJ Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:11 -0700 IronPort-SDR: E/8jZ10WxetFn8PF8qk42Lqc0ExPV8jDlhj6BBl6ovv/g2zszPuspv7y5Ijp615WJpRwAhZSQ4 P6xiKBcIL8UxWoTLvJs3mtTxx/wRqQpXR0U39wUWc/lQIP9sMUdU6MNKyJiXUk0lUw1vtgafh9 t9MxIkfFeTNIP+hidyk7O6zhUHhFtHEpMWx/bTKYvKzhmuVYZhX+PL9sLMJtjw52f+BCy0rH0H 4QtAcPxipb2ves/n+jiV3yY98oEDhe+FhSlzSPr8EGFxELqPtm9T4hDmRB4l5vPCwhqNBtAl9/ XNk= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 23 Aug 2019 16:41:53 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:13 -0700 Message-Id: <01efc597b0d12ec51e6bb829b4bfe0f6c4dca2a4.1566603412.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.154.45 Subject: [Qemu-devel] [PATCH v1 09/28] target/riscv: Add Hypervisor virtual CSRs accesses X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu_bits.h | 11 ++++ target/riscv/csr.c | 119 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+) diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index 204d9d9a79..78067901a2 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -191,6 +191,17 @@ #define HGATP_PPN SATP64_PPN #endif +/* Virtual CSRs */ +#define CSR_VSSTATUS 0x200 +#define CSR_VSIE 0x204 +#define CSR_VSTVEC 0x205 +#define CSR_VSSCRATCH 0x240 +#define CSR_VSEPC 0x241 +#define CSR_VSCAUSE 0x242 +#define CSR_VSTVAL 0x243 +#define CSR_VSIP 0x244 +#define CSR_VSATP 0x280 + /* Physical Memory Protection */ #define CSR_PMPCFG0 0x3a0 #define CSR_PMPCFG1 0x3a1 diff --git a/target/riscv/csr.c b/target/riscv/csr.c index 388775d45a..e2e908fbc0 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -817,6 +817,115 @@ static int write_hgatp(CPURISCVState *env, int csrno, target_ulong val) return 0; } +/* Virtual CSR Registers */ +static int read_vsstatus(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val = env->vsstatus; + return 0; +} + +static int write_vsstatus(CPURISCVState *env, int csrno, target_ulong val) +{ + env->vsstatus = val; + return 0; +} + +static int read_vsie(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val = env->vsie; + return 0; +} + +static int write_vsie(CPURISCVState *env, int csrno, target_ulong val) +{ + env->vsie = val; + return 0; +} + +static int read_vstvec(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val = env->vstvec; + return 0; +} + +static int write_vstvec(CPURISCVState *env, int csrno, target_ulong val) +{ + env->vstvec = val; + return 0; +} + +static int read_vsscratch(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val = env->vsscratch; + return 0; +} + +static int write_vsscratch(CPURISCVState *env, int csrno, target_ulong val) +{ + env->vsscratch = val; + return 0; +} + +static int read_vsepc(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val = env->vsepc; + return 0; +} + +static int write_vsepc(CPURISCVState *env, int csrno, target_ulong val) +{ + env->vsepc = val; + return 0; +} + +static int read_vscause(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val = env->vscause; + return 0; +} + +static int write_vscause(CPURISCVState *env, int csrno, target_ulong val) +{ + env->vscause = val; + return 0; +} + +static int read_vstval(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val = env->vstval; + return 0; +} + +static int write_vstval(CPURISCVState *env, int csrno, target_ulong val) +{ + env->vstval = val; + return 0; +} + +static int read_vsip(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val = (target_ulong)atomic_read(&env->vsip); + return 0; +} + +static int write_vsip(CPURISCVState *env, int csrno, target_ulong val) +{ + atomic_set(&env->vsip, val); + return 0; +} + +static int read_vsatp(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val = env->vsatp; + return 0; +} + +static int write_vsatp(CPURISCVState *env, int csrno, target_ulong val) +{ + env->vsatp = val; + return 0; +} + /* Physical Memory Protection */ static int read_pmpcfg(CPURISCVState *env, int csrno, target_ulong *val) { @@ -1018,6 +1127,16 @@ static riscv_csr_operations csr_ops[CSR_TABLE_SIZE] = { [CSR_HIDELEG] = { hmode, read_hideleg, write_hideleg }, [CSR_HGATP] = { hmode, read_hgatp, write_hgatp }, + [CSR_VSSTATUS] = { hmode, read_vsstatus, write_vsstatus }, + [CSR_VSIE] = { hmode, read_vsie, write_vsie }, + [CSR_VSTVEC] = { hmode, read_vstvec, write_vstvec }, + [CSR_VSSCRATCH] = { hmode, read_vsscratch, write_vsscratch }, + [CSR_VSEPC] = { hmode, read_vsepc, write_vsepc }, + [CSR_VSCAUSE] = { hmode, read_vscause, write_vscause }, + [CSR_VSTVAL] = { hmode, read_vstval, write_vstval }, + [CSR_VSIP] = { hmode, read_vsip, write_vsip }, + [CSR_VSATP] = { hmode, read_vsatp, write_vsatp }, + /* Physical Memory Protection */ [CSR_PMPCFG0 ... CSR_PMPADDR9] = { pmp, read_pmpcfg, write_pmpcfg }, [CSR_PMPADDR0 ... CSR_PMPADDR15] = { pmp, read_pmpaddr, write_pmpaddr }, From patchwork Fri Aug 23 23:38:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112493 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1244E1399 for ; Fri, 23 Aug 2019 23:48:13 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CAEFD21848 for ; Fri, 23 Aug 2019 23:48:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="BHWffzWs" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CAEFD21848 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:34998 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JHu-0006xL-Gy for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 19:48:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49521) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JC1-0000sM-Bo for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JBx-0000AN-Dc for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:05 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:13670) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JBw-00007y-Lp; Fri, 23 Aug 2019 19:42:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603721; x=1598139721; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=5TbTu98c49OPBoipr06R2f1l90p6DTwSYJjUdP1QSEE=; b=BHWffzWsyjeUZR2AAFPrXzxXs2eR4rxyPDfZ3UNR9zH4dG0Kxko6kpH5 Kb8SdVZD81/WfAP5pEIy4nMw3zDDwMvvvueb/YDO7X526L5zkTp7jvJDh tq6Enw8seKhGezW1tPVB2EziPHU5W6YsA1rBde+K6P7ETDNnP276Us9OL B5TTMoTsgq8pmHY7b+10Ei8gGgrLiNoOj32fzKfQkFRjW5Dys6H7/U+U2 w/G9rv+AcUjN5c2dyR04eXbzBm540tHXI3TGkWNk9IPJo69yrOm0Nax80 bVAQzZy5WAYe89aX9PAnttNQ1IWn7FDgNN5co8MT/Glp3RNoF0rk2CTRo A==; IronPort-SDR: IcC2ujYUURddsjeeVZkpMcOG/P6guWtaJuq7g8SsoxoDYkvScF8tNkxzXRl0wdbb3yZayaKNLl oiix/4DfRUZbbfTFJ8JPwSAxV4mDPiOSovhRdkYVz4k5XzzHe6U5GyJ96L3v/nW3A4meGlIqqj i4urda9x2ieaZsZ57oXCcTiGLEMFe0EhzzIvagQRVC81rASsBBzYL8a1C8HTGQhNzoneJiyT7L 2nel0nlz0+enBw/ml8MkGOHL0tmihjJyt1Y9HDX2Ql7Q8gYHaevNyq5/6cPy3Xl0bTjUXqRCXt DEM= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="118154419" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:41:56 +0800 IronPort-SDR: HfPdJUVujyQcjc3TryUmZtkOJcHr8RQIjyHg88ebTJ9q3Wwwxb8UFeYzEwIYLDSUMktZaI301K H0nq6oCaI1zYypSWKMveEqCdpJSXz0tvlSdy87EKcusv+madW9PUqnLS1MoNEbac81fCmKMSBI UH4zG7nyWxDXwq/aeHdIw1eS2haAJvUJEObm0FI6062i3UPezL+tzF6URfwmyImFUY5I7lbYf4 6Hq8h8rhrHbXcrWlsqDyCrQJkkSsUZ9whr/R1aGpAkQH0CJDJXXpizQcsQCOeTLJ/hyNzDXSx9 oqROIPxnwilsU571fzFXlWBv Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:14 -0700 IronPort-SDR: 1tnjlLTQha9TlgiahZqlI7fnIuNRRn8pQuKq0kcaTTONBoOkvLMvkbOKcqA3kziU35zTnOLs8k mxS/b8D/HYr2YwzHb82SXhwYEndPgeSY7AxVNgKaPZ5oGBzVgY4s6y3oZrcwl//t6qr6l4rlzr RTh6YEghuM92A8qfkOch7FEaI7K6Agd+pZc4ThG/MsP+CQXvnaBWkZ3wiJvs6yei2DE1ptXhav BpI9ETNc0+OtoUTxgsDyIp1L3Co31oI+092DLxW1LdnYmupcR3HrUGWAobo01Mk/jjuOIbvOya 3vI= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 23 Aug 2019 16:41:55 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:15 -0700 Message-Id: <850360df8fc15a3671bf2237f972ebaf09110015.1566603412.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.154.45 Subject: [Qemu-devel] [PATCH v1 10/28] target/riscv: Convert mie and mstatus to pointers X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" To handle the new Hypervisor CSR register swapping let's use pointers. We only need to convert the MIE and MSTATUS CSRs. With the exception of MIP all of the other CSRs that swap with virtulsation changes are S-Mode only, so we can just do a lazy switch. This because more challenging for the M-Mode registers so it ends up being easier to use pointers. As the MIP CSR is always accessed atomicly the pointer swap doesn't work so we leave that as is. Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu.c | 16 ++++++++++++---- target/riscv/cpu.h | 12 ++++++++++-- target/riscv/cpu_helper.c | 32 ++++++++++++++++---------------- target/riscv/csr.c | 28 ++++++++++++++-------------- target/riscv/op_helper.c | 14 +++++++------- 5 files changed, 59 insertions(+), 43 deletions(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index be8f643fc2..371d5845af 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -228,7 +228,7 @@ static void riscv_cpu_dump_state(CPUState *cs, FILE *f, int flags) qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "pc ", env->pc); #ifndef CONFIG_USER_ONLY qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mhartid ", env->mhartid); - qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mstatus ", env->mstatus); + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mstatus ", *env->mstatus); if (riscv_has_ext(env, RVH)) { qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "hstatus ", env->hstatus); qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "bstatus ", env->vsstatus); @@ -239,7 +239,7 @@ static void riscv_cpu_dump_state(CPUState *cs, FILE *f, int flags) qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "vsip ", (target_ulong)atomic_read(&env->vsip)); } - qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mie ", env->mie); + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mie ", *env->mie); if (riscv_has_ext(env, RVH)) { qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "vsie ", env->vsie); } @@ -309,7 +309,7 @@ static bool riscv_cpu_has_work(CPUState *cs) * Definition of the WFI instruction requires it to ignore the privilege * mode and delegation registers, but respect individual enables */ - return (atomic_read(&env->mip) & env->mie) != 0; + return (atomic_read(&env->mip) & *env->mie) != 0; #else return true; #endif @@ -330,7 +330,7 @@ static void riscv_cpu_reset(CPUState *cs) mcc->parent_reset(cs); #ifndef CONFIG_USER_ONLY env->priv = PRV_M; - env->mstatus &= ~(MSTATUS_MIE | MSTATUS_MPRV); + *env->mstatus &= ~(MSTATUS_MIE | MSTATUS_MPRV); env->mcause = 0; env->pc = env->resetvec; #endif @@ -459,8 +459,16 @@ static void riscv_cpu_realize(DeviceState *dev, Error **errp) static void riscv_cpu_init(Object *obj) { RISCVCPU *cpu = RISCV_CPU(obj); +#ifndef CONFIG_USER_ONLY + CPURISCVState *env = &cpu->env; +#endif cpu_set_cpustate_pointers(cpu); + +#ifndef CONFIG_USER_ONLY + env->mie = &env->mie_novirt; + env->mstatus = &env->mstatus_novirt; +#endif } static const VMStateDescription vmstate_riscv_cpu = { diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 4c342e7a79..680592cb60 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -122,7 +122,7 @@ struct CPURISCVState { target_ulong resetvec; target_ulong mhartid; - target_ulong mstatus; + target_ulong *mstatus; /* * CAUTION! Unlike the rest of this struct, mip is accessed asynchonously @@ -136,7 +136,7 @@ struct CPURISCVState { uint32_t mip; uint32_t miclaim; - target_ulong mie; + target_ulong *mie; target_ulong mideleg; target_ulong sptbr; /* until: priv-1.9.1 */ @@ -154,6 +154,14 @@ struct CPURISCVState { target_ulong mcause; target_ulong mtval; /* since: priv-1.10.0 */ + /* The following registers are the "real" versions that the pointer + * versions point to. These should never be used unless you know what you + * are doing. To access these use the pointer versions instead. This is + * required to handle the Hypervisor register swapping. + */ + target_ulong mie_novirt; + target_ulong mstatus_novirt; + /* Hypervisor CSRs */ target_ulong hstatus; target_ulong hedeleg; diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 5bcfc2e090..c597523d74 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -36,9 +36,9 @@ int riscv_cpu_mmu_index(CPURISCVState *env, bool ifetch) #ifndef CONFIG_USER_ONLY static int riscv_cpu_local_irq_pending(CPURISCVState *env) { - target_ulong mstatus_mie = get_field(env->mstatus, MSTATUS_MIE); - target_ulong mstatus_sie = get_field(env->mstatus, MSTATUS_SIE); - target_ulong pending = atomic_read(&env->mip) & env->mie; + target_ulong mstatus_mie = get_field(*env->mstatus, MSTATUS_MIE); + target_ulong mstatus_sie = get_field(*env->mstatus, MSTATUS_SIE); + target_ulong pending = atomic_read(env->mip) & *env->mie; target_ulong mie = env->priv < PRV_M || (env->priv == PRV_M && mstatus_mie); target_ulong sie = env->priv < PRV_S || (env->priv == PRV_S && mstatus_sie); target_ulong irqs = (pending & ~env->mideleg & -mie) | @@ -74,7 +74,7 @@ bool riscv_cpu_exec_interrupt(CPUState *cs, int interrupt_request) /* Return true is floating point support is currently enabled */ bool riscv_cpu_fp_enabled(CPURISCVState *env) { - if (env->mstatus & MSTATUS_FS) { + if (*env->mstatus & MSTATUS_FS) { return true; } @@ -219,8 +219,8 @@ static int get_physical_address(CPURISCVState *env, hwaddr *physical, int mode = mmu_idx; if (mode == PRV_M && access_type != MMU_INST_FETCH) { - if (get_field(env->mstatus, MSTATUS_MPRV)) { - mode = get_field(env->mstatus, MSTATUS_MPP); + if (get_field(*env->mstatus, MSTATUS_MPRV)) { + mode = get_field(*env->mstatus, MSTATUS_MPP); } } @@ -234,11 +234,11 @@ static int get_physical_address(CPURISCVState *env, hwaddr *physical, target_ulong base; int levels, ptidxbits, ptesize, vm, sum; - int mxr = get_field(env->mstatus, MSTATUS_MXR); + int mxr = get_field(*env->mstatus, MSTATUS_MXR); if (env->priv_ver >= PRIV_VERSION_1_10_0) { base = get_field(env->satp, SATP_PPN) << PGSHIFT; - sum = get_field(env->mstatus, MSTATUS_SUM); + sum = get_field(*env->mstatus, MSTATUS_SUM); vm = get_field(env->satp, SATP_MODE); switch (vm) { case VM_1_10_SV32: @@ -258,8 +258,8 @@ static int get_physical_address(CPURISCVState *env, hwaddr *physical, } } else { base = env->sptbr << PGSHIFT; - sum = !get_field(env->mstatus, MSTATUS_PUM); - vm = get_field(env->mstatus, MSTATUS_VM); + sum = !get_field(*env->mstatus, MSTATUS_PUM); + vm = get_field(*env->mstatus, MSTATUS_VM); switch (vm) { case VM_1_09_SV32: levels = 2; ptidxbits = 10; ptesize = 4; break; @@ -505,8 +505,8 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, int size, ret = get_physical_address(env, &pa, &prot, address, access_type, mmu_idx); if (mode == PRV_M && access_type != MMU_INST_FETCH) { - if (get_field(env->mstatus, MSTATUS_MPRV)) { - mode = get_field(env->mstatus, MSTATUS_MPP); + if (get_field(*env->mstatus, MSTATUS_MPRV)) { + mode = get_field(*env->mstatus, MSTATUS_MPP); } } @@ -606,12 +606,12 @@ void riscv_cpu_do_interrupt(CPUState *cs) if (env->priv <= PRV_S && cause < TARGET_LONG_BITS && ((deleg >> cause) & 1)) { /* handle the trap in S-mode */ - target_ulong s = env->mstatus; + target_ulong s = *env->mstatus; s = set_field(s, MSTATUS_SPIE, env->priv_ver >= PRIV_VERSION_1_10_0 ? get_field(s, MSTATUS_SIE) : get_field(s, MSTATUS_UIE << env->priv)); s = set_field(s, MSTATUS_SPP, env->priv); s = set_field(s, MSTATUS_SIE, 0); - env->mstatus = s; + *env->mstatus = s; env->scause = cause | ((target_ulong)async << (TARGET_LONG_BITS - 1)); env->sepc = env->pc; env->sbadaddr = tval; @@ -620,12 +620,12 @@ void riscv_cpu_do_interrupt(CPUState *cs) riscv_cpu_set_mode(env, PRV_S); } else { /* handle the trap in M-mode */ - target_ulong s = env->mstatus; + target_ulong s = *env->mstatus; s = set_field(s, MSTATUS_MPIE, env->priv_ver >= PRIV_VERSION_1_10_0 ? get_field(s, MSTATUS_MIE) : get_field(s, MSTATUS_UIE << env->priv)); s = set_field(s, MSTATUS_MPP, env->priv); s = set_field(s, MSTATUS_MIE, 0); - env->mstatus = s; + *env->mstatus = s; env->mcause = cause | ~(((target_ulong)-1) >> async); env->mepc = env->pc; env->mbadaddr = tval; diff --git a/target/riscv/csr.c b/target/riscv/csr.c index e2e908fbc0..30ec8c0a8e 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -136,7 +136,7 @@ static int write_fflags(CPURISCVState *env, int csrno, target_ulong val) if (!env->debugger && !riscv_cpu_fp_enabled(env)) { return -1; } - env->mstatus |= MSTATUS_FS; + *env->mstatus |= MSTATUS_FS; #endif riscv_cpu_set_fflags(env, val & (FSR_AEXC >> FSR_AEXC_SHIFT)); return 0; @@ -159,7 +159,7 @@ static int write_frm(CPURISCVState *env, int csrno, target_ulong val) if (!env->debugger && !riscv_cpu_fp_enabled(env)) { return -1; } - env->mstatus |= MSTATUS_FS; + *env->mstatus |= MSTATUS_FS; #endif env->frm = val & (FSR_RD >> FSR_RD_SHIFT); return 0; @@ -183,7 +183,7 @@ static int write_fcsr(CPURISCVState *env, int csrno, target_ulong val) if (!env->debugger && !riscv_cpu_fp_enabled(env)) { return -1; } - env->mstatus |= MSTATUS_FS; + *env->mstatus |= MSTATUS_FS; #endif env->frm = (val & FSR_RD) >> FSR_RD_SHIFT; riscv_cpu_set_fflags(env, (val & FSR_AEXC) >> FSR_AEXC_SHIFT); @@ -307,7 +307,7 @@ static int read_mhartid(CPURISCVState *env, int csrno, target_ulong *val) /* Machine Trap Setup */ static int read_mstatus(CPURISCVState *env, int csrno, target_ulong *val) { - *val = env->mstatus; + *val = *env->mstatus; return 0; } @@ -319,7 +319,7 @@ static int validate_vm(CPURISCVState *env, target_ulong vm) static int write_mstatus(CPURISCVState *env, int csrno, target_ulong val) { - target_ulong mstatus = env->mstatus; + target_ulong mstatus = *env->mstatus; target_ulong mask = 0; int dirty; @@ -359,7 +359,7 @@ static int write_mstatus(CPURISCVState *env, int csrno, target_ulong val) ((mstatus & MSTATUS_FS) == MSTATUS_FS)) | ((mstatus & MSTATUS_XS) == MSTATUS_XS); mstatus = set_field(mstatus, MSTATUS_SD, dirty); - env->mstatus = mstatus; + *env->mstatus = mstatus; return 0; } @@ -448,13 +448,13 @@ static int write_mideleg(CPURISCVState *env, int csrno, target_ulong val) static int read_mie(CPURISCVState *env, int csrno, target_ulong *val) { - *val = env->mie; + *val = *env->mie; return 0; } static int write_mie(CPURISCVState *env, int csrno, target_ulong val) { - env->mie = (env->mie & ~all_ints) | (val & all_ints); + *env->mie = (*env->mie & ~all_ints) | (val & all_ints); return 0; } @@ -608,7 +608,7 @@ static int read_sstatus(CPURISCVState *env, int csrno, target_ulong *val) { target_ulong mask = ((env->priv_ver >= PRIV_VERSION_1_10_0) ? sstatus_v1_10_mask : sstatus_v1_9_mask); - *val = env->mstatus & mask; + *val = *env->mstatus & mask; return 0; } @@ -616,19 +616,19 @@ static int write_sstatus(CPURISCVState *env, int csrno, target_ulong val) { target_ulong mask = ((env->priv_ver >= PRIV_VERSION_1_10_0) ? sstatus_v1_10_mask : sstatus_v1_9_mask); - target_ulong newval = (env->mstatus & ~mask) | (val & mask); + target_ulong newval = (*env->mstatus & ~mask) | (val & mask); return write_mstatus(env, CSR_MSTATUS, newval); } static int read_sie(CPURISCVState *env, int csrno, target_ulong *val) { - *val = env->mie & env->mideleg; + *val = *env->mie & env->mideleg; return 0; } static int write_sie(CPURISCVState *env, int csrno, target_ulong val) { - target_ulong newval = (env->mie & ~env->mideleg) | (val & env->mideleg); + target_ulong newval = (*env->mie & ~env->mideleg) | (val & env->mideleg); return write_mie(env, CSR_MIE, newval); } @@ -731,7 +731,7 @@ static int read_satp(CPURISCVState *env, int csrno, target_ulong *val) if (!riscv_feature(env, RISCV_FEATURE_MMU)) { *val = 0; } else if (env->priv_ver >= PRIV_VERSION_1_10_0) { - if (env->priv == PRV_S && get_field(env->mstatus, MSTATUS_TVM)) { + if (env->priv == PRV_S && get_field(*env->mstatus, MSTATUS_TVM)) { return -1; } else { *val = env->satp; @@ -756,7 +756,7 @@ static int write_satp(CPURISCVState *env, int csrno, target_ulong val) validate_vm(env, get_field(val, SATP_MODE)) && ((val ^ env->satp) & (SATP_MODE | SATP_ASID | SATP_PPN))) { - if (env->priv == PRV_S && get_field(env->mstatus, MSTATUS_TVM)) { + if (env->priv == PRV_S && get_field(*env->mstatus, MSTATUS_TVM)) { return -1; } else { if((val ^ env->satp) & SATP_ASID) { diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index 331cc36232..d150551bc9 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -83,11 +83,11 @@ target_ulong helper_sret(CPURISCVState *env, target_ulong cpu_pc_deb) } if (env->priv_ver >= PRIV_VERSION_1_10_0 && - get_field(env->mstatus, MSTATUS_TSR)) { + get_field(*env->mstatus, MSTATUS_TSR)) { riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); } - target_ulong mstatus = env->mstatus; + target_ulong mstatus = *env->mstatus; target_ulong prev_priv = get_field(mstatus, MSTATUS_SPP); mstatus = set_field(mstatus, env->priv_ver >= PRIV_VERSION_1_10_0 ? @@ -96,7 +96,7 @@ target_ulong helper_sret(CPURISCVState *env, target_ulong cpu_pc_deb) mstatus = set_field(mstatus, MSTATUS_SPIE, 0); mstatus = set_field(mstatus, MSTATUS_SPP, PRV_U); riscv_cpu_set_mode(env, prev_priv); - env->mstatus = mstatus; + *env->mstatus = mstatus; return retpc; } @@ -112,7 +112,7 @@ target_ulong helper_mret(CPURISCVState *env, target_ulong cpu_pc_deb) riscv_raise_exception(env, RISCV_EXCP_INST_ADDR_MIS, GETPC()); } - target_ulong mstatus = env->mstatus; + target_ulong mstatus = *env->mstatus; target_ulong prev_priv = get_field(mstatus, MSTATUS_MPP); mstatus = set_field(mstatus, env->priv_ver >= PRIV_VERSION_1_10_0 ? @@ -121,7 +121,7 @@ target_ulong helper_mret(CPURISCVState *env, target_ulong cpu_pc_deb) mstatus = set_field(mstatus, MSTATUS_MPIE, 0); mstatus = set_field(mstatus, MSTATUS_MPP, PRV_U); riscv_cpu_set_mode(env, prev_priv); - env->mstatus = mstatus; + *env->mstatus = mstatus; return retpc; } @@ -132,7 +132,7 @@ void helper_wfi(CPURISCVState *env) if (env->priv == PRV_S && env->priv_ver >= PRIV_VERSION_1_10_0 && - get_field(env->mstatus, MSTATUS_TW)) { + get_field(*env->mstatus, MSTATUS_TW)) { riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); } else { cs->halted = 1; @@ -147,7 +147,7 @@ void helper_tlb_flush(CPURISCVState *env) if (!(env->priv >= PRV_S) || (env->priv == PRV_S && env->priv_ver >= PRIV_VERSION_1_10_0 && - get_field(env->mstatus, MSTATUS_TVM))) { + get_field(*env->mstatus, MSTATUS_TVM))) { riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); } else { tlb_flush(cs); From patchwork Fri Aug 23 23:38:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112481 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3BACF912 for ; Fri, 23 Aug 2019 23:47:55 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 122D921655 for ; Fri, 23 Aug 2019 23:47:55 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="l8LYyTO6" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 122D921655 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:34994 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JHd-0006lt-Mg for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 19:47:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49522) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JC1-0000sN-BQ for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JBy-0000BA-Fp for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:05 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:13678) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JBx-0000A6-Ha; Fri, 23 Aug 2019 19:42:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603722; x=1598139722; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=YdDCHokQ8hIpE80LbgpGrbTwapmRbwefuRuX4jpHcx0=; b=l8LYyTO6gedUft9uPPxsV1rsCd7mkKiEFD9nWfWNbU13eQg5xRVA0B15 drQjg22+yxw+k93MoCQCDOKC3npUKPO16ERSKV4Ee8RMx8OzgywXhse5M uxtXj54eIUhtf2R5+4ESL+Xlg89JMzU6e2hX3NHNa37bmDd6Xu7h+0qpP pYIk7CXGedrcQ5k051rm+zZAYTvw2sgveOhr2FdE0i3+2DRXBy9jA67DD iMykTDEHxduB/6bftB8S06qNbZV1w03QKCfGKjcFLfWQGLF5+XiPstmUm EEMyQgA0oZSvJ8gABvw9oAJ70wF4sPD25XTCzwpLY9659QnZHqdjaW4qk Q==; IronPort-SDR: xPw7Bce0gJtHFe4Vmur67NU0DlBRv+/v+j6FV73ptSatskiaK6Iu1kY/s9mKFH+X5wvbDLc3SP jOnqXjOTW121iBbRWPysH5Xq3gWOZP2jp2ILJlgykhcLWDnxox04jt4yc8Q6hVdxu7ls+Cpp9j G+UX8OkwfjTZXXqYp1nKPhK36lnVP8YrJMifWc62lDnwWnnCXY1gVi3adqvDBUAf5ARlDScnnW vqGjY2LEohSxq0Lx9zBjgmj7mEqhyjo8XQAh1FIZHqmLWpuQcv7iE2Mc8WrwYGHJuEwLCu20np J10= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="118154423" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:41:59 +0800 IronPort-SDR: EF4BRh92KChyYVqvuA78I37C/JgF8YetLwl9bMDIkOoi+7JFqSyG8jKVY08AbHBdZ9Mj/+fMYg xvZWW8/VN7B4CBb4vYmeNiosM3jyfYZguOamsY3mY8DRCOHM8Cz2UkNNCsGWONwSOFTvt5Yehs 615f0ruoQLpjkucsCfoJ+L31IUnTgxLEVrFBtq73hGrbS71emUFTLyWeZcf53cYlPJhLT0yX7+ ZFvqQKUBWCIxMzg2xjJ+t3ZUAYzdedanIJEzPfLsnDRb23bay+i7epwzpu7dCTzFJxbSFu8VLJ b/J4qFSFclI88zcSXw56ifN+ Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:16 -0700 IronPort-SDR: FflD5vFkyIBiZ+kWPZFsMKRQwqYEOCCGwAf6jBTiNQI0xzGiQE+D+HqDc65uxB3yF6RHzGpdlG wHfw4rcz4KMuPVhSlHbLZq1u3OANK5pKB1qvGncwaZBSdNMdnXxX9qqK2kjJ3+IPW6VQDPK7rN go4aG3m08aYgY7uL17LLtX33MrWaOQ66uSudVmsyQeOskKHXUAwPYdRCznpuuiHvVpRn7prWxV I1bLFIOLddb5vYYZ/XpMHZy+MoyNHI1hYnPMV/bRkjgg2tGL+KvX/pE6fkYzoyIRpy4h3X4qk8 0Xs= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 23 Aug 2019 16:41:58 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:18 -0700 Message-Id: X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.154.45 Subject: [Qemu-devel] [PATCH v1 11/28] target/riscv: Add background register swapping function X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Alistair Francis --- target/riscv/cpu.h | 24 ++++++++--- target/riscv/cpu_bits.h | 7 ++++ target/riscv/cpu_helper.c | 88 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+), 6 deletions(-) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 680592cb60..05957f32a8 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -125,15 +125,18 @@ struct CPURISCVState { target_ulong *mstatus; /* - * CAUTION! Unlike the rest of this struct, mip is accessed asynchonously - * by I/O threads. It should be read with atomic_read. It should be updated - * using riscv_cpu_update_mip with the iothread mutex held. The iothread - * mutex must be held because mip must be consistent with the CPU inturrept - * state. riscv_cpu_update_mip calls cpu_interrupt or cpu_reset_interrupt - * wuth the invariant that CPU_INTERRUPT_HARD is set iff mip is non-zero. + * CAUTION! Unlike the rest of this struct, mip and mip_novirt is accessed + * asynchonously by I/O threads. It should be read with atomic_read. It should + * be updated using riscv_cpu_update_mip with the iothread mutex held. The + * iothread mutex must be held because mip must be consistent with the CPU + * inturrept state. riscv_cpu_update_mip calls cpu_interrupt or + * cpu_reset_interrupt wuth the invariant that CPU_INTERRUPT_HARD is set if + * mip is non-zero. * mip is 32-bits to allow atomic_read on 32-bit hosts. */ uint32_t mip; + uint32_t mip_novirt; + uint32_t miclaim; target_ulong *mie; @@ -179,6 +182,14 @@ struct CPURISCVState { target_ulong vstval; target_ulong vsatp; + /* HS Backup CSRs */ + target_ulong stvec_hs; + target_ulong sscratch_hs; + target_ulong sepc_hs; + target_ulong scause_hs; + target_ulong stval_hs; + target_ulong satp_hs; + target_ulong scounteren; target_ulong mcounteren; @@ -306,6 +317,7 @@ void riscv_cpu_list(void); #define cpu_mmu_index riscv_cpu_mmu_index #ifndef CONFIG_USER_ONLY +void riscv_cpu_swap_hypervisor_regs(CPURISCVState *env); int riscv_cpu_claim_interrupts(RISCVCPU *cpu, uint32_t interrupts); uint32_t riscv_cpu_update_mip(RISCVCPU *cpu, uint32_t mask, uint32_t value); #define BOOL_TO_MASK(x) (-!!(x)) /* helper for riscv_cpu_update_mip value */ diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index 78067901a2..5cee72b726 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -556,4 +556,11 @@ #define SIP_STIP MIP_STIP #define SIP_SEIP MIP_SEIP +/* MIE masks */ +#define MIE_SEIE (1 << IRQ_S_EXT) +#define MIE_UEIE (1 << IRQ_U_EXT) +#define MIE_STIE (1 << IRQ_S_TIMER) +#define MIE_UTIE (1 << IRQ_U_TIMER) +#define MIE_SSIE (1 << IRQ_S_SOFT) +#define MIE_USIE (1 << IRQ_U_SOFT) #endif diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index c597523d74..41d4368128 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -81,6 +81,94 @@ bool riscv_cpu_fp_enabled(CPURISCVState *env) return false; } +void riscv_cpu_swap_hypervisor_regs(CPURISCVState *env) +{ + RISCVCPU *cpu = RISCV_CPU(env_cpu(env)); + uint32_t tmp; + target_ulong mstatus_mask = MSTATUS_MXR | MSTATUS_SUM | MSTATUS_FS | + MSTATUS_SPP | MSTATUS_SPIE | MSTATUS_SIE; + target_ulong sie_mask = MIE_SEIE | MIE_STIE | MIE_SSIE | + MIE_UEIE | MIE_UTIE | MIE_USIE; + target_ulong mip_mask = MIP_SSIP | MIP_STIP | MIP_SEIP; + bool current_virt = riscv_cpu_virt_enabled(env); + + g_assert(riscv_has_ext(env, RVH)); + +#if defined(TARGET_RISCV64) + mstatus_mask |= MSTATUS64_UXL; +#endif + + if (current_virt) { + /* Current V=1 and we are about to change to V=0 */ + env->mstatus = &env->mstatus_novirt; + *env->mstatus &= mstatus_mask; + *env->mstatus |= env->vsstatus & ~mstatus_mask; + /* Ensure that vsstatus only holds the correct bits */ + env->vsstatus &= mstatus_mask; + + env->mie = &env->mie_novirt; + *env->mie &= sie_mask; + *env->mie |= env->vsie & ~sie_mask; + /* Ensure that vsie only holds the correct bits */ + env->vsie &= sie_mask; + + env->vstvec = env->stvec; + env->stvec = env->stvec_hs; + + env->vsscratch = env->sscratch; + env->sscratch = env->sscratch_hs; + + env->vsepc = env->sepc; + env->sepc = env->sepc_hs; + + env->vscause = env->scause; + env->scause = env->scause_hs; + + env->vstval = env->sbadaddr; + env->sbadaddr = env->stval_hs; + + env->vsatp = env->satp; + env->satp = env->satp_hs; + + tmp = (uint32_t)atomic_read(&env->mip_novirt); + tmp = riscv_cpu_update_mip(cpu, mip_mask, tmp); + tmp &= mip_mask; + atomic_set(&env->vsip, tmp); + } else { + /* Current V=0 and we are about to change to V=1 */ + env->mstatus = &env->vsstatus; + *env->mstatus &= mstatus_mask; + *env->mstatus |= env->mstatus_novirt & ~mstatus_mask; + + env->mie = &env->vsie; + *env->mie &= sie_mask; + *env->mie |= env->mie_novirt & ~sie_mask; + + env->stvec_hs = env->stvec; + env->stvec = env->vstvec; + + env->sscratch_hs = env->sscratch; + env->sscratch = env->vsscratch; + + env->sepc_hs = env->sepc; + env->sepc = env->vsepc; + + env->scause_hs = env->scause; + env->scause = env->vscause; + + env->stval_hs = env->sbadaddr; + env->sbadaddr = env->vstval; + + env->satp_hs = env->satp; + env->satp = env->vsatp; + + tmp = (uint32_t)atomic_read(&env->vsip); + tmp = riscv_cpu_update_mip(cpu, mip_mask, tmp); + tmp &= mip_mask; + atomic_set(&env->mip_novirt, tmp); + } +} + bool riscv_cpu_virt_enabled(CPURISCVState *env) { bool tmp; From patchwork Fri Aug 23 23:38:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112475 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D85E314DB for ; Fri, 23 Aug 2019 23:44:02 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id AD84421655 for ; Fri, 23 Aug 2019 23:44:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="W/dqnB1m" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AD84421655 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:34928 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JDs-0002xg-Hm for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 19:44:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49520) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JC1-0000sJ-Bw for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JBz-0000BM-0m for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:05 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:13670) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JBy-00007y-3p; Fri, 23 Aug 2019 19:42:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603722; x=1598139722; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Mcb2lfn1YX7evWQUTehGcJy+nBgKj5L443nTWq0/w4I=; b=W/dqnB1m0x3vEAqPwxnGVbm5sGbx2wSIRgxnp+mlugPEyNb+XfMbvtS5 2nvaiTs6wnnqVYwd56gjX7sjj5GqE4eeYhhrmbqWqJnzqngnQhGAfusXJ 7DvBUN2jY+Fc9STRrRqtqpZrlRKeyogZb5ZhGuU4czpKK4GuVNj1woBTm XAnqziZYlyz4KXmWZlnYYBpYLpEFM+k3ahckjlceT4CJdVfYFGgHoCHJS WB9KcvpyWG4/7/QTREm7p2tH4RCytJQDMdERiVTyxWqRpZ+W56aYat9uE 0GHvB/18+dxlYzXfPb5NaO5df0/Rx3s3hbLQmGmvE0p0fo42fnXWQqOrp Q==; IronPort-SDR: wOiKCjpTYACzaOHJBNGVfotuOXBU0C5m5hrtYNG5dfCeQEDq/uybtpvX1cnQgfYws2KocfnPpW HyXdjcBTmJO1ok/KqzFVptyrmZQdeW4ZcO3i+376qDmZ85CysDvnDSXstfYcO45wkRtdSWHCOt RG4AacvdtuQEmsAau9jBdQpb4K1UmvWr/0ymr8/jPfLPfAUaDMo3Dq64DeHWYZigPd7bcyTddN i9qQyc3pTfNoqfHahbfS8DPpnerwxWgrhFOCFN+6AN4/oF4eugQUoDb2n2+jK6V6ZqG0UEyoyS ciw= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="118154426" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:02 +0800 IronPort-SDR: K1Zx/nEn0eHlZoXgIKgyyddacfP4fD7MyVpJlnj2iVG/Vd2uCee8+H2eLe5xvke8O4cR8tMU66 ue9rOuaQIfAIIOcGCH1OagoDMILjkj3+bbfLWBvpKfQ4ksgAU4bSlq2WV7HPe5KtUa0i3WpQL9 EkDUeuo6ZH/C52xAojvOh6T3/HTjxktDmPLbxnNI/nLfykW1YsFM37SdRzFDTP2SOEetWlwdbl MWnGyOCLONOrTW97yMx3Puw/JdV384qsWbKlrYRxT2ZaLUjp24FvvPRK9elAtofFJOABibZLgg bm+J8ODkSgMu4K95hYrY+xl0 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:19 -0700 IronPort-SDR: NmoCdXcQax7LIh6NMOwivIgko4mZztxZad2BxDM6EbTgaQ/QZnjtoBFHRVPiHAlESspV/m0Wfq uHrZJiB+3LYiFfxKYHXHdG+1/2Kz+vxy6jWScYoo4/fJm2GWB45uqBbM3kQpiZG0eIAA/t097B b2u6sy8CVYBWD9Jz8yPKfZhpjunJMpfwWqouG6f0IIzeSCCL1gqHbhatOcd9d0AAXBLgZY6dGd x8LNMbczEOYNmOIBWIWEG2HQ9xUlPNBKFy8A/qpNxkfr5Zlua2KWCeMICP6BJRGTrVF/Tkg6hG 8HM= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 23 Aug 2019 16:42:01 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:21 -0700 Message-Id: X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.154.45 Subject: [Qemu-devel] [PATCH v1 12/28] target/riscv: Add support for virtual interrupt setting X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu_helper.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 41d4368128..afb3e8579e 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -38,12 +38,27 @@ static int riscv_cpu_local_irq_pending(CPURISCVState *env) { target_ulong mstatus_mie = get_field(*env->mstatus, MSTATUS_MIE); target_ulong mstatus_sie = get_field(*env->mstatus, MSTATUS_SIE); - target_ulong pending = atomic_read(env->mip) & *env->mie; - target_ulong mie = env->priv < PRV_M || (env->priv == PRV_M && mstatus_mie); - target_ulong sie = env->priv < PRV_S || (env->priv == PRV_S && mstatus_sie); + target_ulong vsstatus_sie = get_field(env->mstatus_novirt, MSTATUS_SIE); + + target_ulong pending = atomic_read(&env->mip) & *env->mie; + target_ulong hspending = atomic_read(&env->mip_novirt) & env->mie_novirt; + + target_ulong mie = env->priv < PRV_M || (env->priv == PRV_M && mstatus_mie); + target_ulong sie = env->priv < PRV_S || (env->priv == PRV_S && mstatus_sie); + target_ulong vsie = env->priv < PRV_S || (env->priv == PRV_S && vsstatus_sie); + target_ulong irqs = (pending & ~env->mideleg & -mie) | (pending & env->mideleg & -sie); + if (riscv_cpu_virt_enabled(env)) { + target_ulong pending_hs_irq = hspending & -vsie; + + if (pending_hs_irq) { + riscv_cpu_set_force_hs_excep(env, FORCE_HS_EXCEP); + return ctz64(pending_hs_irq); + } + } + if (irqs) { return ctz64(irqs); /* since non-zero */ } else { From patchwork Fri Aug 23 23:38:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112503 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 56578912 for ; Fri, 23 Aug 2019 23:52:05 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2CFE421655 for ; Fri, 23 Aug 2019 23:52:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="IhJxyUfb" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2CFE421655 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35056 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JLf-0002X8-PP for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 19:52:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49573) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JC4-0000v0-BN for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JC3-0000CN-CZ for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:08 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:13684) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JC1-0000Bc-Du; Fri, 23 Aug 2019 19:42:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603726; x=1598139726; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=eGLfoxYeXxEr9rW2HOxWpZPD5WgDqu12jcHTR/npqao=; b=IhJxyUfbjkjFf5yDsYpg8WeszIyBTcSLzt/pK2oSLa4UkeoyB2oyv0BU 2qgGLOSyjXpX7Ie3Ko8ItNMHKHj86jgzBy29vElcdEaPzIb0TKReh72pK nE7uFetoANX6oyu15RNaUmDvLL/z9c3uufxqutmQigm5hQyy0ehcyK5dD cFaHxM4CZOAluiQ5lcQffzYOWGqjQTTYM4iLD3jVM8oHx72r4SkwLXBl5 NWU4v2vY80t4KwdRcYPzA5cS4xSthQWhdS1W30VqWPYolFn4RS+S3FDR0 p0vftKlATOsY/wVBwbjp8IxIe8nxa9rtaA+eS8oStKJ8yCycsQyP7NTuV w==; IronPort-SDR: ucR1o8Y4FNCY1Jxxu10QCo4zaW9MoDX5P1Jre3m4uOHDLtzmqiWAeKKkDvGpQ0P2uUV9NfS97y 0E6Jz0thwFvaXxl4I/savi+TabWVMZAestEPV4+2LLUJkHtW8O93IKpNINxEpGps4ZzG1g3DEG k/3OPKiSZ7m4GUoC07HNRBp5GFaxXACHlXuI4cKVTNwisLQhDEwl0LyrM6rLi3YAxRmkr8XaXR 2EtjVeTCAWpy72HLv6VjjT6FKBz1DjTqxmfmXbXZOyxJ1K2UMR6Co8un1zqgSP6dWSgekrhQz9 9tI= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="118154431" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:04 +0800 IronPort-SDR: XSVsFhyY1TL4sNlSa0R94QfsQEWljcXZnfaa3qrNfM0QPFgUY34HswN2SdQwlk8UAvz1JmALdS 6HUSbhPbSNm5q9jx6S0oT1ucMQRa8eA3JoJl466c+bGj8csfeC41s160QCLmuwsI4S3dKL+ijH jePvu7QcK6wFznr4A/QzHLBr3+g9jmJ8INxwDrpl5uvs5+Jy/ZDXY060xT8rnfkHz9CWnisQQF obdG7bDeDNKtMZBxRrD16ti+G6KEWn04/jWnvPnpeXbASLEtpRzpOJJSOQSoh7gp4lik9SljDI 9OkJeeyO1HPUWcg1Z+R0GCuf Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:21 -0700 IronPort-SDR: 68rApY4qEDjVbM6lGVccmHAeMS2CsjSXyQSYI77E63HmK2DMtJM5SXSbgERfbMIIK0qp17X+SI yMjbzn+hy918mIt/cyJ2mJfuAn1RmEkZloIpp2L8z+SV0rJ5ngKzdLggMbnLYvQcX1sFhWnZef EMJ0bwvB4+Nwu+O/afGDPehrp+cjv0wFELFmbad2LHNVTngU7PdcLNscgm5YInLhGc7wYZ7FMo SotQmqY3ZhWv5msJ0vSEEEZAJ+ewXM2ltOVMvwoopZLjs7OXDC9vKnx+oW/BAUBVB7jx7dCZDv O/I= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 23 Aug 2019 16:42:04 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:23 -0700 Message-Id: <964f729f0c7010cac733b88545f0356a668c9bed.1566603412.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.154.45 Subject: [Qemu-devel] [PATCH v1 13/28] target/ricsv: Flush the TLB on virtulisation mode changes X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" To ensure our TLB isn't out-of-date we flush it on all virt mode changes. Unlike priv mode this isn't saved in the mmu_idx as all guests share V=1. The easiest option is just to flush on all changes. Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu_helper.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index afb3e8579e..8e8b156fc0 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -203,6 +203,11 @@ void riscv_cpu_set_virt_enabled(CPURISCVState *env, bool enable) return; } + /* Flush the TLB on all virt mode changes. */ + if (((env->virt & VIRT_MODE_MASK) >> VIRT_MODE_SHIFT) != enable) { + tlb_flush(env_cpu(env)); + } + env->virt &= ~VIRT_MODE_MASK; env->virt |= enable << VIRT_MODE_SHIFT; } From patchwork Fri Aug 23 23:38:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112505 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 60C051709 for ; Fri, 23 Aug 2019 23:52:05 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 346582173B for ; Fri, 23 Aug 2019 23:52:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="eunTKJAh" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 346582173B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35060 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JLf-0002XZ-Us for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 19:52:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49594) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JC5-0000v2-6x for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JC3-0000D8-TY for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:09 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:13685) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JC3-0000CF-KM; Fri, 23 Aug 2019 19:42:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603728; x=1598139728; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=V5Eonze3Bqz/BwDJKsuRkxnZlbmS3mwZ2MRvo1P6p1Q=; b=eunTKJAhFmdnnKLE0VoX6QsiBrF0c6SyzGQH0EqLGeCIsjlJbAcmQC6G kdozO5gcB1vy28SoifI6CzKLnoSXe5KkwRbavsaNoMEMGzjps5N2UPQTS b6C5ZaE0b8aoRqfhh5doMIyvpE5VfB2UIo5p+zCkHae+LbxzwIMNZ6YnN cGTFQTaglg5BV5hJ3be5duIKm4wDK94rD693oNrMcnltzXBGJWYTityAM LQMesJ7ihJNdLglswO5Qynqf6nd0vKW1M8Iou8VRkd9BNCr/LJLIacjpw OcSdIQ6H1FZo8q38b1ij1LmIIYSNi3nczXrNxE9TfD76gz3OLi0Vfbl3w w==; IronPort-SDR: dLHRLFu616wIb6AyHudpxv0nX8mbvAxlHRA8c1Am/1ai1kGZVnCgtphuWdvjKNLK34Irn/KGb0 Yb3YBxLaTTkBSL6SS++aYNd7oF+cTOlimwSPxJzeAO4P3BTDz9a+hnZ+YtmwOWTFcQgHTTsnnh DSCVduSQ3QLp8kTjCr04Yv33pheISzkOU3dRO0QkWWiMU+P9CAcOcSM1IGn2Gll4ByDoLagwWQ S8Eq7aCNKc12tx53TZ+v88hbz3fcppB6We38MzbG+83Id9LFEGl63dQoDvYuuX53lnZSlf1KN3 nNc= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="118154432" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:07 +0800 IronPort-SDR: QY5mJ1kbGjHuNxiHoszSCgRVQDgvzRtkaGgOn6Wrz5JVmhNEXiwcRbjh2smUT9PVuI7ODInu7h 86+z2KMT3bhGF1n/5i7XWf/yHK7NYHcupzQ6Y+Kcv+lLJx1fW1yiRVUBNqcaxniplT1rz0NCwW 7euPgOcPq2VspHmRNtxyNdFJe1O8wYEt79Fk3lh5RxDz+b83pZKM/0WtuEbxCpbMHIJPGq6Pai RwEbhhmPqcqEWsF2dKrpRsPnWcYhh5pJ7jkSWfyUxgNNpQblKVNe1wxgWz8X6+UE74Wj1n3JH9 g1JkJNJqcvvCVXZ7dpshQ6rz Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:24 -0700 IronPort-SDR: /+y5dSw0/a74jzvyQrpjZlJ2Hv8OhoWMlT43w9PPW0tXUC0fsHPFsdQFn/7TCEOrvcvdJcsggO sfAKO2Y3cID/X1y2jFj/8IL0oXLbWv8ktek4lN17fKvf3uR43JJGwqKa3fjis2acL+1+RxzHUU GKYnFhLYY5D2QN/SlwLXdLvVSGbBoL9lqyJMFl64N/JpXqUO5/fsRrZdH6www6W5rqi7iFhegx P1rZDbYxwTFzg65uAXSJ899JcS9Kaa8dPZmOTa8bCkRbhFJ7E7dFaNibXfbLY6JbB2E1sf1AEv Llw= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 23 Aug 2019 16:42:07 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:26 -0700 Message-Id: X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.154.45 Subject: [Qemu-devel] [PATCH v1 14/28] target/riscv: Generate illegal instruction on WFI when V=1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/op_helper.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index d150551bc9..beb34e705b 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -130,9 +130,10 @@ void helper_wfi(CPURISCVState *env) { CPUState *cs = env_cpu(env); - if (env->priv == PRV_S && + if ((env->priv == PRV_S && env->priv_ver >= PRIV_VERSION_1_10_0 && - get_field(*env->mstatus, MSTATUS_TW)) { + get_field(*env->mstatus, MSTATUS_TW)) || + riscv_cpu_virt_enabled(env)) { riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); } else { cs->halted = 1; From patchwork Fri Aug 23 23:38:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112513 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A71D01399 for ; Fri, 23 Aug 2019 23:55:49 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7C94420674 for ; Fri, 23 Aug 2019 23:55:49 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="iB099Dht" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7C94420674 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35124 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JPI-0006cG-Ji for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 19:55:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49652) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JC9-0000ye-9V for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JC8-0000Ef-9Y for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:13 -0400 Received: from esa2.hgst.iphmx.com ([68.232.143.124]:30783) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JC8-0000Dt-0g; Fri, 23 Aug 2019 19:42:12 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603774; x=1598139774; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ExO6CmSXFUcMYCNVROhGdWjTm1HudMDa7YW2yf4a/Q8=; b=iB099DhtaAwGA330D4FLyyCJRdGYlTuIS+1IWrvkIHz2cXS0qjCkwdGA acWKYsThN4HpTu2xmtDzrUfl9B4VFggbKH2FK0QkZ/56OZxmoIFFmtfTK g3zwgxHAy/+UwFFu5OvFt6W1F/mI26288JQLJjtbrMw4TmK+YdaUbg2h/ Et9pNKXeHyw0+HiLzYq0UVq8BFX4v87etymqDHk4LM1btqzyeidKKkI0n mBLKfqqWouhGYrYnEApR78nELSapqqM5q/ur9dRkM/uAUzOj0rXSZbVy7 qZw3Hy27aVEO19zU5uNmHmQbycX2JHCFRGrldr2NK4DSeTnVWVhztSrHN A==; IronPort-SDR: MP1b4MEVAqg2vmxOfpJCeAISTPYLtQT+iqIv3yT8YqVj8nrIZU/l0Xm4p1x3kVW180EI98Dqrv HVOTe9DbX0gCMSfsty4NP+iYHoa/CCv/4QkWO9PBKvnj0LLECAk4E0D88HEnr1fwoVffFrbBAT o2z8BlFen+/55R+SOH1En8Zhpmeit6fsuzPFx/sO8M7NDu+J3MmUOK0njKFPeedzb69MvVTIrc E2DJ01+5Vlvw+5d6uC4E6A45rsM8nKZYd9R/U5OMqSNCD+6mcjgujItZCsvO0f8hLRhhfct6dW zY4= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="217013903" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:50 +0800 IronPort-SDR: HlP922HmFfO/AlVsSrEbdojUyZr12AKJuy6Asp1Gd6YgY1kLjCNUBNl9yXIp3zg2qklgYHPJAF ModLJRApLFsGlkQEHcEqrjJQrXvhIa73zeK8mDp4w+W/Rexmu5Bb3Z8W7aGE1zdVtWYVoU+Tg8 YL+UI65HfRBEUfpFdsbU7qJ6WWACRwIySZsVJgBUgFR/jbCVAfK1mXCPgFLhaDLs41/tsoJc9v sFpyx0ETIPTKRX2yTTx+jUrBOdPsqJeO82YUUokm4+E4R8wYb6A87dzyf5IG3ofaOoO/a1LrH1 xJBSE2lJpK6vaCRpPL6ed/wG Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:26 -0700 IronPort-SDR: 3InY7wHPz+FSqXd0aNwyQbE7Yoej8RrFJTUigQqQ2RC3nFTzlgetjxw/vZhJDF9ScoepPPtNWj CSOV/CAWt3kn2O4k8Y0pW56o5VJVSNCoSVvPXLFbWEvJQSU/ZlJzrCuyXS+mp2w6aALXeGc3je JYVsPACB82qZIuNXHevDJszPfjmGxG/s9/evt2rsGinrhNDx9zDqQiluH/NkXrddgOTzXW3NAr UGgH8ykEBhCEcgvU+6D21JDuz0vf/qqasAJ0W8/c5VQqJ9xdWe96WIO+eoOWvevP8rgJJKFzbi 8Pk= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 23 Aug 2019 16:42:09 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:29 -0700 Message-Id: <2b2e042b3c80d4f37cf150853a0a040581feb403.1566603412.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 68.232.143.124 Subject: [Qemu-devel] [PATCH v1 15/28] riscv: plic: Always set sip.SEIP bit for HS X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" When the PLIC generates an interrupt ensure we always set it for the SIP CSR that corresponds to the HS (V=0) register. Signed-off-by: Alistair Francis --- hw/riscv/sifive_plic.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/hw/riscv/sifive_plic.c b/hw/riscv/sifive_plic.c index 98e4304b66..8309e96f64 100644 --- a/hw/riscv/sifive_plic.c +++ b/hw/riscv/sifive_plic.c @@ -150,7 +150,17 @@ static void sifive_plic_update(SiFivePLICState *plic) riscv_cpu_update_mip(RISCV_CPU(cpu), MIP_MEIP, BOOL_TO_MASK(level)); break; case PLICMode_S: - riscv_cpu_update_mip(RISCV_CPU(cpu), MIP_SEIP, BOOL_TO_MASK(level)); + if (riscv_cpu_virt_enabled(env)) { + if (level) { + atomic_or(&env->mip_novirt, MIP_SEIP); + g_assert(riscv_cpu_virt_enabled(env)); + } else { + atomic_and(&env->mip_novirt, ~MIP_SEIP); + g_assert(riscv_cpu_virt_enabled(env)); + } + } else { + riscv_cpu_update_mip(RISCV_CPU(cpu), MIP_SEIP, BOOL_TO_MASK(level)); + } break; default: break; From patchwork Fri Aug 23 23:38:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112519 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8A450912 for ; Fri, 23 Aug 2019 23:58:47 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6025E206BA for ; Fri, 23 Aug 2019 23:58:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="OxTxe4aj" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6025E206BA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35178 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JSA-0001nf-38 for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 19:58:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49667) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JCA-0000yi-62 for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JC8-0000Ex-Qu for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:14 -0400 Received: from esa2.hgst.iphmx.com ([68.232.143.124]:30783) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JC8-0000Dt-I8; Fri, 23 Aug 2019 19:42:12 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603775; x=1598139775; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=t/r3M4Y2K/wZDmgVRpnFSqDAZnLrb7FZWSdrui9tnc4=; b=OxTxe4ajjPG+9ejmKNsHV/DsKfnxr9UdISOAEX9MpM4T6bSae0WvF5Fr OzTveV+bfw/oDjMq04/S6sVrqqg4npY94my/i2jOVOX9bKCujVX0Ubsp5 EJbPj3YXvb4+YxHH1J50TzmmvUmTMgX5QAHnPaXDYlMeQz5s4O8x0BxnM yr5TnfeztzzsL+86pfWcqtZXExLi5td1aQNs6P41rdfXilzXW/7IFc3dH jOzgT/eRfT89liZOkx4JZ4CeOpB+Un9sfnON50yVS5JhCWu04ix37KUI5 c2zrMpIKVV00heevz9NUtIBDFKBB9rwvuXzLgCqRYj/yn39DWg+pw47e2 A==; IronPort-SDR: b0cOR73aPBYGKPto8r+DBlJex2IJWAL9oaXRXZU9B9lhQhpFu4ELnuR6L1UHPH8mMmuovD+i3d b5xMrI1txQkzesQ1FGP/W+uupSBg+sbttVvGZJKiby1fc34Axr+RZlV+dcYO2C2twQ5bmpy7eV Gl9ACIroaAhbtaHv+R6GVvpG6HUoyJNLBKPH8GQSZuaB4XatzquYqdLKMUuhzmDPgquYb8xYKz OuSMfJoTRgPNIFuuo3fgfh5tEOTcK8Jc9SmprNOOO5YktEak5ogugVm5ljx8KJ2Isnuohrwevc IfE= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="217013905" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:54 +0800 IronPort-SDR: yp+zHC1BaDiDPTZ9aChnRlx0lzeaYb67kQY87ORCnzaZ34vo39heaBnGN/jWq098H/qfYcFWx8 PLIFpCXTJqqmMr8b6ShxXHqoZrKLC88R2CK/T4XFtQjxwxoqIAiOu/W7SCqlvjzbb6azhJMOev mZg6pUFNilgTAz70wP3RU5I0AimcqVxst3bLUgZAQ30hjpv6x7OVuPRm39XVQY+rNkW1k73qqb kpKUk+Y1lN/2PGCtifH5hUzYA3TyFfyHHetY30AogQK+QvOcsr+XRWt05Ocqs6yy8rYMGvotmZ g7qP0Uy9SbfgI4/in+5mApxw Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:29 -0700 IronPort-SDR: 1H2oMbWBUi+L2sEGxj1zyLiiVJnGDximN+uU9XnRTncU7toxYJGF2useCbGnKVP3cCHhG47vZW JpqpBFeSmFEy/Kppu0+Hq4oBMwARMUzzxmLm0wFwhTRrwtKgz/GAqqGI3kRbos1hP6UmhQe/ec DoAKkXfCj+KLIgkoJpCgMqZ6jQgvZNKSiaIeD3j+rcqHA2mZJ3/iEIuzAz3UPESBClqn2VoHKJ TE3IesYICokZPacPJ3L4cVTFQlykQiXUzisYkiQBIOhZ55C8wwgXKknrdKZpWkz629AObbGgh6 OPc= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 23 Aug 2019 16:42:11 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:31 -0700 Message-Id: X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 68.232.143.124 Subject: [Qemu-devel] [PATCH v1 16/28] target/riscv: Add hypvervisor trap support X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu_bits.h | 4 +-- target/riscv/cpu_helper.c | 71 +++++++++++++++++++++++++++++++++------ target/riscv/csr.c | 4 +-- 3 files changed, 65 insertions(+), 14 deletions(-) diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index 5cee72b726..353fc9a24a 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -513,8 +513,8 @@ #define RISCV_EXCP_STORE_AMO_ADDR_MIS 0x6 #define RISCV_EXCP_STORE_AMO_ACCESS_FAULT 0x7 #define RISCV_EXCP_U_ECALL 0x8 -#define RISCV_EXCP_S_ECALL 0x9 -#define RISCV_EXCP_H_ECALL 0xa +#define RISCV_EXCP_HS_ECALL 0x9 +#define RISCV_EXCP_VS_ECALL 0xa #define RISCV_EXCP_M_ECALL 0xb #define RISCV_EXCP_INST_PAGE_FAULT 0xc /* since: priv-1.10.0 */ #define RISCV_EXCP_LOAD_PAGE_FAULT 0xd /* since: priv-1.10.0 */ diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 8e8b156fc0..17eec6217b 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -668,6 +668,7 @@ void riscv_cpu_do_interrupt(CPUState *cs) RISCVCPU *cpu = RISCV_CPU(cs); CPURISCVState *env = &cpu->env; + target_ulong s; /* cs->exception is 32-bits wide unlike mcause which is XLEN-bits wide * so we mask off the MSB and separate into trap type and cause. @@ -677,13 +678,6 @@ void riscv_cpu_do_interrupt(CPUState *cs) target_ulong deleg = async ? env->mideleg : env->medeleg; target_ulong tval = 0; - static const int ecall_cause_map[] = { - [PRV_U] = RISCV_EXCP_U_ECALL, - [PRV_S] = RISCV_EXCP_S_ECALL, - [PRV_H] = RISCV_EXCP_H_ECALL, - [PRV_M] = RISCV_EXCP_M_ECALL - }; - if (!async) { /* set tval to badaddr for traps with address information */ switch (cause) { @@ -704,7 +698,16 @@ void riscv_cpu_do_interrupt(CPUState *cs) /* ecall is dispatched as one cause so translate based on mode */ if (cause == RISCV_EXCP_U_ECALL) { assert(env->priv <= 3); - cause = ecall_cause_map[env->priv]; + + if (env->priv == PRV_M) { + cause = RISCV_EXCP_M_ECALL; + } else if (env->priv == PRV_S && riscv_cpu_virt_enabled(env)) { + cause = RISCV_EXCP_VS_ECALL; + } else if (env->priv == PRV_S && !riscv_cpu_virt_enabled(env)) { + cause = RISCV_EXCP_HS_ECALL; + } else if (env->priv == PRV_U) { + cause = RISCV_EXCP_U_ECALL; + } } } @@ -714,7 +717,42 @@ void riscv_cpu_do_interrupt(CPUState *cs) if (env->priv <= PRV_S && cause < TARGET_LONG_BITS && ((deleg >> cause) & 1)) { /* handle the trap in S-mode */ - target_ulong s = *env->mstatus; + if (riscv_has_ext(env, RVH)) { + target_ulong hdeleg = async ? env->hideleg : env->hedeleg; + + if (riscv_cpu_virt_enabled(env) && ((hdeleg >> cause) & 1) && + !riscv_cpu_force_hs_excep_enabled(env)) { + /* Trap to VS mode */ + } else if (riscv_cpu_virt_enabled(env)) { + /* Trap into HS mode, from virt */ + riscv_cpu_swap_hypervisor_regs(env); + env->hstatus = set_field(env->hstatus, HSTATUS_SP2V, + get_field(env->hstatus, HSTATUS_SPV)); + env->hstatus = set_field(env->hstatus, HSTATUS_SP2P, + get_field(*env->mstatus, SSTATUS_SPP)); + env->hstatus = set_field(env->hstatus, HSTATUS_SPV, + riscv_cpu_virt_enabled(env)); + + if (riscv_cpu_force_hs_excep_enabled(env)) { + env->hstatus = set_field(env->hstatus, HSTATUS_STL, 1); + } else { + env->hstatus = set_field(env->hstatus, HSTATUS_STL, 0); + } + + riscv_cpu_set_virt_enabled(env, VIRT_OFF); + riscv_cpu_set_force_hs_excep(env, CLEAR_HS_EXCEP); + } else { + /* Trap into HS mode */ + env->hstatus = set_field(env->hstatus, HSTATUS_SP2V, + get_field(env->hstatus, HSTATUS_SPV)); + env->hstatus = set_field(env->hstatus, HSTATUS_SP2P, + get_field(*env->mstatus, SSTATUS_SPP)); + env->hstatus = set_field(env->hstatus, HSTATUS_SPV, + riscv_cpu_virt_enabled(env)); + } + } + + s = *env->mstatus; s = set_field(s, MSTATUS_SPIE, env->priv_ver >= PRIV_VERSION_1_10_0 ? get_field(s, MSTATUS_SIE) : get_field(s, MSTATUS_UIE << env->priv)); s = set_field(s, MSTATUS_SPP, env->priv); @@ -728,7 +766,20 @@ void riscv_cpu_do_interrupt(CPUState *cs) riscv_cpu_set_mode(env, PRV_S); } else { /* handle the trap in M-mode */ - target_ulong s = *env->mstatus; + if (riscv_has_ext(env, RVH)) { + if (riscv_cpu_virt_enabled(env)) { + riscv_cpu_swap_hypervisor_regs(env); + } + *env->mstatus = set_field(*env->mstatus, MSTATUS_MPV, + riscv_cpu_virt_enabled(env)); + *env->mstatus = set_field(*env->mstatus, MSTATUS_MTL, + riscv_cpu_force_hs_excep_enabled(env)); + + /* Trapping to M mode, virt is disabled */ + riscv_cpu_set_virt_enabled(env, VIRT_OFF); + } + + s = *env->mstatus; s = set_field(s, MSTATUS_MPIE, env->priv_ver >= PRIV_VERSION_1_10_0 ? get_field(s, MSTATUS_MIE) : get_field(s, MSTATUS_UIE << env->priv)); s = set_field(s, MSTATUS_MPP, env->priv); diff --git a/target/riscv/csr.c b/target/riscv/csr.c index 30ec8c0a8e..47be4b1d42 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -255,8 +255,8 @@ static const target_ulong delegable_excps = (1ULL << (RISCV_EXCP_STORE_AMO_ADDR_MIS)) | (1ULL << (RISCV_EXCP_STORE_AMO_ACCESS_FAULT)) | (1ULL << (RISCV_EXCP_U_ECALL)) | - (1ULL << (RISCV_EXCP_S_ECALL)) | - (1ULL << (RISCV_EXCP_H_ECALL)) | + (1ULL << (RISCV_EXCP_VS_ECALL)) | + (1ULL << (RISCV_EXCP_HS_ECALL)) | (1ULL << (RISCV_EXCP_M_ECALL)) | (1ULL << (RISCV_EXCP_INST_PAGE_FAULT)) | (1ULL << (RISCV_EXCP_LOAD_PAGE_FAULT)) | From patchwork Fri Aug 23 23:38:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112523 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BCB5914DE for ; Sat, 24 Aug 2019 00:02:31 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9161B206BA for ; Sat, 24 Aug 2019 00:02:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="EppwWF1b" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9161B206BA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35246 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JVm-0004kK-6S for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 20:02:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49683) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JCG-00011z-0u for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JCC-0000Fv-Nj for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:19 -0400 Received: from esa2.hgst.iphmx.com ([68.232.143.124]:42904) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JCB-0000FW-KU; Fri, 23 Aug 2019 19:42:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603779; x=1598139779; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=+y0XBZHdU8b0WbXdYJMfk8x+pHSNEF+3XHeTA/blqYc=; b=EppwWF1b2lzbUeVbEIV2F9lJnGlzG7iv998oBQmK4bRGfKDtXyPUAirY n+7XKq+cFH2IvOIJjCPJYuP1cajOt4zZokkve4SJLbUHCx4/OQGe2qGEr WHoOBNA6s6mFv1M4Z/jEtYMsLCFfMOVGYir9RFO8Fin0nHFC+GX1/pQZL p9XD3q7Xufsua3EkynXTeAUMgeGjBDa3oifJ8DyOS5kcEMa5/cmVjdi/N eA0sX6+X98mQYymqn7OOEMzugwJwX70m6pElOJmvrzQ0mRuBM6W7b1LTw bOnQCg4apiml+VwumpoWBvOXmZl+ngedE7gp7P1jZ6f2L5HqbgDW6Kftw w==; IronPort-SDR: lRo1OA0g0JtTsLWcesOX5tXyU0qojIZ2ruwvtDm1Mx2veBvVFYlFY0ZYELu6JySRK7pSgyjdaU tRbupTLCg6wbBnDr7H4mk2EX5GIeI8+oM+ZhXna2a1RVpxXz6KKCQWQj/irqgOHLU6/LZhKALv CYYt51KnItlbtQUVYwCyAERDNTM2/LMaoDSAsbflVbSpJQqXmyQlBqBtO522QHSFnVwFOECYLi Ix/8Wqqqu+cUf1OHjuZVJCopCP8BMUeFYWifF8lg9DyLQj8ubDaSWtUBOZmplR1sq5EmnlzdjN EvE= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="217013913" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:58 +0800 IronPort-SDR: k7BWIe7ze2t4F8OqCIIzfJRpPNKKnAfAE8cgNm2lQRC+65LFoNagrO+Z1FKA97Rcsz35UIQTMw yig10Hu5W7fq1oCTs9W6P9SpTANrbp2CqtD9kA7Dc7iCrka+/PvlKXlpwD6ZrkGKk1diQX5WGR 7YBdyQKmoFufm3lhtCFyiO3m7XOU1pVJiXGsPNP77SZB8sHnhU/tV9zvd00I/dl1kKJ/uu4hVH aOIV+hi0eLiNk6+8bSxiyjsmDlJMOJMz4L0G3X85hnFQEoP2Fz4yBPWKu3Uui2F6QKPipSvXKB qVGlO8OmUonOKM8Ar0fmtelw Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:32 -0700 IronPort-SDR: 3JbxYXra200AYk6zVx9sTLbV3NQNd2WBJmUZkKkIFMnhY9Qrfk07nvrwstvF/X/Lnj6Fv29kT2 C+aGMlpmh8A4b1j4ArIy5se3MlKaAHLTGgmaefIoxrlC1dcMwRmfkxpu8ifEx+LBAgUMeX0yLJ DpYdreNc3k2YPdbgehhxwwixxKhR/1nA6BIbARKF2XDYowLg+/yGahEyA+r0pAKzkx0tjgj4le biyYtu+BpSj6L/7D4wR4ebYaU2Xacsvs496qhIuyEdp/ExBGgarojybGM9acs/RwmkpGHb5pJi mks= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 23 Aug 2019 16:42:14 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:34 -0700 Message-Id: <6e2920dbef1ed86b8784827200525c5a112468b2.1566603412.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 68.232.143.124 Subject: [Qemu-devel] [PATCH v1 17/28] target/riscv: Add Hypervisor trap return support X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/op_helper.c | 66 ++++++++++++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 12 deletions(-) diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index beb34e705b..5bcf5d2ff7 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -73,6 +73,8 @@ target_ulong helper_csrrc(CPURISCVState *env, target_ulong src, target_ulong helper_sret(CPURISCVState *env, target_ulong cpu_pc_deb) { + target_ulong prev_priv, prev_virt, mstatus; + if (!(env->priv >= PRV_S)) { riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); } @@ -87,16 +89,46 @@ target_ulong helper_sret(CPURISCVState *env, target_ulong cpu_pc_deb) riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); } - target_ulong mstatus = *env->mstatus; - target_ulong prev_priv = get_field(mstatus, MSTATUS_SPP); - mstatus = set_field(mstatus, - env->priv_ver >= PRIV_VERSION_1_10_0 ? - MSTATUS_SIE : MSTATUS_UIE << prev_priv, - get_field(mstatus, MSTATUS_SPIE)); - mstatus = set_field(mstatus, MSTATUS_SPIE, 0); - mstatus = set_field(mstatus, MSTATUS_SPP, PRV_U); + mstatus = *env->mstatus; + + if (riscv_has_ext(env, RVH) && !riscv_cpu_virt_enabled(env)) { + /* We support Hypervisor extensions and virtulisation is disabled */ + target_ulong hstatus = env->hstatus; + + prev_priv = get_field(mstatus, MSTATUS_SPP); + prev_virt = get_field(hstatus, HSTATUS_SPV); + + hstatus = set_field(hstatus, HSTATUS_SPV, + get_field(hstatus, HSTATUS_SP2V)); + mstatus = set_field(mstatus, MSTATUS_SPP, + get_field(hstatus, HSTATUS_SP2P)); + hstatus = set_field(hstatus, HSTATUS_SP2V, 0); + hstatus = set_field(hstatus, HSTATUS_SP2P, 0); + mstatus = set_field(mstatus, SSTATUS_SIE, + get_field(mstatus, SSTATUS_SPIE)); + mstatus = set_field(mstatus, SSTATUS_SPIE, 1); + + *env->mstatus = mstatus; + env->hstatus = hstatus; + + if (prev_virt == VIRT_ON) { + riscv_cpu_swap_hypervisor_regs(env); + } + + riscv_cpu_set_virt_enabled(env, prev_virt); + } else { + prev_priv = get_field(mstatus, MSTATUS_SPP); + + mstatus = set_field(mstatus, + env->priv_ver >= PRIV_VERSION_1_10_0 ? + MSTATUS_SIE : MSTATUS_UIE << prev_priv, + get_field(mstatus, MSTATUS_SPIE)); + mstatus = set_field(mstatus, MSTATUS_SPIE, 0); + mstatus = set_field(mstatus, MSTATUS_SPP, PRV_U); + *env->mstatus = mstatus; + } + riscv_cpu_set_mode(env, prev_priv); - *env->mstatus = mstatus; return retpc; } @@ -114,14 +146,24 @@ target_ulong helper_mret(CPURISCVState *env, target_ulong cpu_pc_deb) target_ulong mstatus = *env->mstatus; target_ulong prev_priv = get_field(mstatus, MSTATUS_MPP); + target_ulong prev_virt = get_field(mstatus, MSTATUS_MPV); mstatus = set_field(mstatus, env->priv_ver >= PRIV_VERSION_1_10_0 ? MSTATUS_MIE : MSTATUS_UIE << prev_priv, get_field(mstatus, MSTATUS_MPIE)); - mstatus = set_field(mstatus, MSTATUS_MPIE, 0); - mstatus = set_field(mstatus, MSTATUS_MPP, PRV_U); - riscv_cpu_set_mode(env, prev_priv); + mstatus = set_field(mstatus, MSTATUS_MPIE, 1); + mstatus = set_field(mstatus, MSTATUS_MPP, 0); + mstatus = set_field(mstatus, MSTATUS_MPV, 0); *env->mstatus = mstatus; + riscv_cpu_set_mode(env, prev_priv); + + if (riscv_has_ext(env, RVH)) { + if (prev_virt == VIRT_ON) { + riscv_cpu_swap_hypervisor_regs(env); + } + + riscv_cpu_set_virt_enabled(env, prev_virt); + } return retpc; } From patchwork Fri Aug 23 23:38:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112515 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7281D1399 for ; Fri, 23 Aug 2019 23:56:52 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 48AC520674 for ; Fri, 23 Aug 2019 23:56:52 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="nIKmDmav" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 48AC520674 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35136 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JQI-0007uC-P0 for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 19:56:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49728) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JCK-00013n-2e for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JCG-0000Gf-J7 for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:23 -0400 Received: from esa5.hgst.iphmx.com ([216.71.153.144]:38470) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JCG-0000G3-8N; Fri, 23 Aug 2019 19:42:20 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603741; x=1598139741; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=vAN1dDLznPPg40l4N7NOvT4m5coY/hzIozIhrKnpjNA=; b=nIKmDmavjY5sBIwFNFSo7fyWxxgHbGKpSj3Zj79w2wv86HfFOkIt1D8A ZVt5gq3S7mu4dXo3Z9pAS8AqDLZu2/at9X2N1lIxeNMuIGdnfXrZWxZlT JXZbvAajtPhmSQNMHPuQW5+D7IWQ6t0KYQsTJk8zgfRlivXaLx5ozl+Wh zFnsOD1HtkoU3EhnlweC5IAiP6X9wbabiuRgCgcEqpDZ/KvZZl6Uffbb6 vNwpdlTwQ0q8kHYD0QOo8MKG5hnshlMv9Gb/sI47ZXkO8jrxmrHW7dfSE ris+lfqQupEsE7n863H4wLD5uZk3BQlIRAKuyfC7LUHVdApzZDV7bE/YE g==; IronPort-SDR: Bem2yzEK2KW99nu8hf0R7/5YcJwiUaHIskjdtZbEQNIGKXEpIrFNsA5XBUwcCfzXnXf1ZqInf6 KSwcmOSGXDxq/HOpUkqNOe5rvCAWq2ein364/ZeOihKYSi3VcGVVfu7FEASKbZp1qy4yHns9Y1 jAf4kT/PuQA2Jj4UJH3oM5mPe/+0Ef8DqryRlizdY7COfHVwhagex77Hq/UYSCY5xKcGwY1aJW DhHdeNDKmhmIKwgzmP3sieDMGkAgZZNPQ5mJaP+II5uE2cxdMmVhFIs0wqmEgLBs5iEyKH/DGd CCE= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="117486899" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:18 +0800 IronPort-SDR: NbnQSKNJGY636EN5RmNOWEHxHPf7sxNh1hnkhT+4Defr4MtWzAOfj3TVRVvtvr5c0SsaggoYp5 mw6H+BVoOqDwpgJIuEafZzFSZa+pdMwgwS4aY4ndfEcqrX6sYT4EzN4zECQJVhLmIr0sNbjPHO 7urtjQlW7EsayGcuauZ/L54gYR9mivfQrEBi/yaAA+EIv/v4ZebSLF0Knu7zXkE+1P85GhO4Hu rH+j5DmSM7UwS7/LrXuKYUso+PnAd70GYI5NEEPUSn6Hl//4ON3qVuL//7KKNLtqIbbWcD6YEc Bz8fcinuVlABIWpGIeNnEFKX Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:35 -0700 IronPort-SDR: 9gORWUnr0Q9e5zFHcsXb9cIRT7Cl94Cuqd/Gh7bkYaw6utYO4fXT4TsLiHtseUh4oUtVlQdb0W m/0v2uzGI/nz5lMedogViKnF1AW0Mw9mDfNBeiak9sC5Jw1NUp6MG5IXLPSePeuAsqoRBIHnhV 3JOhVbqzh4TtPD608l3v40AHB0Bz3Wa6sgbySS9+cPlFislYERcA5G08EY++9GvAxN/IsIzKrc L5eF50LC5aNeH88knC8xBVlhWTEqko9H4MtMLl5a3685W/BFoODopPl4NzG2A2UT9nsRBSi1RE QZc= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 23 Aug 2019 16:42:18 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:36 -0700 Message-Id: X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.153.144 Subject: [Qemu-devel] [PATCH v1 18/28] target/riscv: Add hfence instructions X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/insn32.decode | 23 ++++++----- .../riscv/insn_trans/trans_privileged.inc.c | 40 +++++++++++++++++++ 2 files changed, 54 insertions(+), 9 deletions(-) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 77f794ed70..cfd9ca6d2b 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -63,20 +63,25 @@ @r2_rm ....... ..... ..... ... ..... ....... %rs1 %rm %rd @r2 ....... ..... ..... ... ..... ....... %rs1 %rd +@hfence_gvma ....... ..... ..... ... ..... ....... %rs2 %rs1 +@hfence_bvma ....... ..... ..... ... ..... ....... %rs2 %rs1 + @sfence_vma ....... ..... ..... ... ..... ....... %rs2 %rs1 @sfence_vm ....... ..... ..... ... ..... ....... %rs1 # *** Privileged Instructions *** -ecall 000000000000 00000 000 00000 1110011 -ebreak 000000000001 00000 000 00000 1110011 -uret 0000000 00010 00000 000 00000 1110011 -sret 0001000 00010 00000 000 00000 1110011 -hret 0010000 00010 00000 000 00000 1110011 -mret 0011000 00010 00000 000 00000 1110011 -wfi 0001000 00101 00000 000 00000 1110011 -sfence_vma 0001001 ..... ..... 000 00000 1110011 @sfence_vma -sfence_vm 0001000 00100 ..... 000 00000 1110011 @sfence_vm +ecall 000000000000 00000 000 00000 1110011 +ebreak 000000000001 00000 000 00000 1110011 +uret 0000000 00010 00000 000 00000 1110011 +sret 0001000 00010 00000 000 00000 1110011 +hret 0010000 00010 00000 000 00000 1110011 +mret 0011000 00010 00000 000 00000 1110011 +wfi 0001000 00101 00000 000 00000 1110011 +hfence_gvma 0110001 ..... ..... 000 00000 1110011 @hfence_gvma +hfence_bvma 0010001 ..... ..... 000 00000 1110011 @hfence_bvma +sfence_vma 0001001 ..... ..... 000 00000 1110011 @sfence_vma +sfence_vm 0001000 00100 ..... 000 00000 1110011 @sfence_vm # *** RV32I Base Instruction Set *** lui .................... ..... 0110111 @u diff --git a/target/riscv/insn_trans/trans_privileged.inc.c b/target/riscv/insn_trans/trans_privileged.inc.c index c5e4b3e49a..b9b5a89b52 100644 --- a/target/riscv/insn_trans/trans_privileged.inc.c +++ b/target/riscv/insn_trans/trans_privileged.inc.c @@ -108,3 +108,43 @@ static bool trans_sfence_vm(DisasContext *ctx, arg_sfence_vm *a) #endif return false; } + +static bool trans_hfence_gvma(DisasContext *ctx, arg_sfence_vma *a) +{ +#ifndef CONFIG_USER_ONLY + if (ctx->priv_ver >= PRIV_VERSION_1_10_0 && + has_ext(ctx, RVH)) { + /* Hpervisor extensions exist */ + /* + * if (env->priv == PRV_M || + * (env->priv == PRV_S && + * !riscv_cpu_virt_enabled(env) && + * get_field(ctx->mstatus_fs, MSTATUS_TVM))) { + */ + gen_helper_tlb_flush(cpu_env); + return true; + /* } */ + } +#endif + return false; +} + +static bool trans_hfence_bvma(DisasContext *ctx, arg_sfence_vma *a) +{ +#ifndef CONFIG_USER_ONLY + if (ctx->priv_ver >= PRIV_VERSION_1_10_0 && + has_ext(ctx, RVH)) { + /* Hpervisor extensions exist */ + /* + * if (env->priv == PRV_M || + * (env->priv == PRV_S && + * !riscv_cpu_virt_enabled(env) && + * get_field(ctx->mstatus_fs, MSTATUS_TVM))) { + */ + gen_helper_tlb_flush(cpu_env); + return true; + /* } */ + } +#endif + return false; +} From patchwork Fri Aug 23 23:38:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112531 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6C4DE1709 for ; Sat, 24 Aug 2019 00:06:08 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 430D021670 for ; Sat, 24 Aug 2019 00:06:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="DbB7pHq6" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 430D021670 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35290 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JZH-0007gt-84 for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 20:06:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49731) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JCK-00013p-34 for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JCI-0000H7-H3 for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:23 -0400 Received: from esa5.hgst.iphmx.com ([216.71.153.144]:38470) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JCH-0000G3-3g; Fri, 23 Aug 2019 19:42:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603742; x=1598139742; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=aYADlIrAhjcCUfDyHqGMeqnSX99ip+HPRC6LMPpqQ6k=; b=DbB7pHq6eqjWEcGB9deeCHgUVK2tAdkjcb321aT1G/f6ghXxc2vR9WEY sP2GmYCCOav8UeAlbRejpOPOJPNnwUPiGeF2p9i/9SOBSYQNZTJyQrz84 ek61uAsvociYJObL9hJhIc02eurjR96aLnPgvxHC4pmkwMJycErS+1qkU 2N1nDa9xX+yRPitS8CtUY3ueKme2RtXnmpP5Nti32O64C5bFh2L5bdPub 8eQpVWIC+pI97rbsl13xeQUnSgqV7zASDWwgWq6lWxeEb4TMOg/LCP2Uj HieDodiLOf9boXmDAUnwDw6DuIKbc7LtceMNV4m9B3JKRB3fZ29reIvt4 g==; IronPort-SDR: miX3t3jt2/YGJvuu7DAp4kWAja1COxdvjG+L/KtCK+yKMnK8+5gDCTwAd8y9Gt19n5S2yqSOzd 0KLhDNDAKHBHOjeO08QlpekdVUgQENsPXwM9MrWYOfYoI5OWN6u7QqYOm4eEArHqXUX1J2R1po phTUhbxIZGhYPuJbmDNnChDDCSWmopmVTV/pyFR+UCr1Md/snLnsp7nqwUAaWj3CMI8F+nVz/2 sV1iZE6YW52CybIp6xmwgtYM+SaxmGcBySyhqMPx1+gd1sgrr4YPs9UM4kqGj2V/AuhK00Wd0W WBc= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="117486903" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:21 +0800 IronPort-SDR: teB/V5ePgE8ElJ1vApUV2YhdrM1IRLyHW0tpO0My5T1Xf4Q8nKucK3uXM+yfDWgPHXG2cbxf25 sR2HZ0Avs/m2h+RXANi+lj0qR8rauW5UUaREurHEEZljLsbFinbRfltZIWCOgDK3cv6PMcnQZX O06mQPHRVeX7iBmZGiWZM3bqRe6E6fldrQIB5UKFsxdNbKcqqBkQ3GVsIbC0RRT889LaqzXFuz nnO4zWOCwExoYfJbWw9oKYy+6NDB4Ds6kmITpFnkAbJ9kOC3pHqA4Dvl1+hDOUCRm+Y4EPL9Oh aoUm93MsQP4wXMjLmlVO8l1w Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:37 -0700 IronPort-SDR: svtycSDFOK0kNS1Bf4YJlqoSRk7qRAX6gX5FIKE/yAob1cm8hLMGSTT7IGenmkqJg34Snl6S7K 3nQNY/J8Ft3UL8QstqDSFLCroHmX/sjQk9sAT0lkk3w1NDAN+80Jgu/WFC5XXslh6nFb0XJi1n bGJKqq3q4mjHXisEDaaIKmbHxEUFJFuviuT7ULYWPf8Z8C+MnH0WqZ0/G/IQriGWIaoOwz7HZp sUb7Ehc6I7kYSEW/tY9DWLjqChLzawF2SiDPCtbMmNfYdJfrTIzJNrpQuiRsjhMZ6duWtoVgr9 RPw= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 23 Aug 2019 16:42:19 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:39 -0700 Message-Id: <4f1ff6ef5fb2baa3c461d16b5669d3bd829733a0.1566603412.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.153.144 Subject: [Qemu-devel] [PATCH v1 19/28] target/riscv: Disable guest FP support based on virtual status X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" When the Hypervisor extension is in use we only enable floating point support when both status and vsstatus have enabled floating point support. Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu_helper.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 17eec6217b..098873c83e 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -90,6 +90,9 @@ bool riscv_cpu_exec_interrupt(CPUState *cs, int interrupt_request) bool riscv_cpu_fp_enabled(CPURISCVState *env) { if (*env->mstatus & MSTATUS_FS) { + if (riscv_cpu_virt_enabled(env) && !(env->vsstatus & MSTATUS_FS)) { + return false; + } return true; } From patchwork Fri Aug 23 23:38:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112535 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 92B021395 for ; Sat, 24 Aug 2019 00:08:28 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 69D1D2173B for ; Sat, 24 Aug 2019 00:08:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="bM8p8Dej" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 69D1D2173B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35326 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JbX-0002Yd-AC for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 20:08:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49780) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JCL-00015k-J9 for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JCK-0000IB-Kx for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:25 -0400 Received: from esa5.hgst.iphmx.com ([216.71.153.144]:38474) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JCK-0000HJ-9p; Fri, 23 Aug 2019 19:42:24 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603745; x=1598139745; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=U9unKfj1ZfdPhA1mnGNX5+UqynVjiqRiftLGR7cQg+I=; b=bM8p8DejREqeiKGJRqUqqUJ6WUSd4lV2XJjU6jjd+9o2DkwWTvM164yY Q4/i4BygDnwqQp8PyMFSa2HY6QNUf1cOOOxRIc6TB0LSAnPwFkYtIQ/Iu Svro8r9o/K1NuQbE+wIjcvghFHwNtZl2f/6l8ElGwnswn34Q4BbPa6XGd jPjov+N1LWkQxzr0lnoazKdvALTuJXw0NaJkEHKBaGyGXa+s6aDxx4VbS KiVvG39NjLJ/9zmbKwNVVP7MBhBXXLPs5MQpS6OUejKvGUayDQVRdF5m8 NV6dZu1QjnsPuUa/8tetVtxI1T7crvdxp83hG35AOV9SwFrdMLqvGEpcY Q==; IronPort-SDR: IuvwMd2oTPuHTTnKyb4MSPtPdeqfjkBdQMMt2QExQ1ZRKAXjxZGTUtiTTeYWwG6EPkxP/74/TB iUQSuS/EIUBarb6lsCRyCmJA0vrXdMKSf/+Z7mmvdaeOWHGafvsSOq0twMIJvp8aJxjXeHtxAQ IFnZVzOM7OF5wF0JHugrdGFWJ4IJazaF+B49f+96ZXSvSHh6yvA+4NTIM0ClxoAs2HFRjmuRey QNhxcfwX57Z4eG0p3kb+za69TTKxdp82BE+bSvftjtDxGFmShv96P1YCQ4jF3AfoXqdDnsPrGj 70c= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="117486905" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:23 +0800 IronPort-SDR: DZt9xMX1nxex6O641zNajEFYECaJeDZ/+fWHU9QrIPZbyo3fclVzZe+2SuWpXqZIPVDF2KVv0e E6JGGnZyK534uF9F7y3tXU+Cm6wC1WV4gW7lrrBeXcrCaXUTNThIPLLb/QUObWnFJbJ6d3D+GF sIROzR/Smqn5EoAokAiLVC8bxdn49y3GNhgtOpytCwLs7rn6nBracfjt4z7+VduhHe02U5m7O7 3PIXf/6kntjVnD4sIWauODHN0IvDkneWomR1NFcBAox7j7w+Q2V43HqrSnISzD7GFQlaDjRHSz WGemBtmU+4vL7QvKBNbJbSME Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:40 -0700 IronPort-SDR: OdJriZI0HIhs3MtkHJsgTo/+T3ktPsjikzs+PzdRQJVZBXcdoiMuPMRb42bFwk2qe51JRqH5Bp W7Lj93oo+04rSAqQ0IOYurgZzuIePKrWQkuJLGypPdHo451EvBFrpHdZwC4W8chOq7MU92ZrCf hXAA9DL/LjHZfWRios2SZPqB72cT35sVS7n6VTmiHQ+oNYgkXQsKbiI+cbrsXmMZKluCVzbvuN FLpFp4VEToSg27MNfcGiLCch8hp6y1FC9yVb2lMOyLq1empFGx2/ASXFtGJWoTQRXMXm94PV0w Dgc= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 23 Aug 2019 16:42:22 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:42 -0700 Message-Id: <035e50d6438660130233c472de56b883e369f6d4.1566603412.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.153.144 Subject: [Qemu-devel] [PATCH v1 20/28] target/riscv: Mark both sstatus and vsstatus as dirty X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Mark both sstatus and vsstatus as dirty (3). Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/translate.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 8ac72c6470..19771904f4 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -44,6 +44,7 @@ typedef struct DisasContext { /* pc_succ_insn points to the instruction following base.pc_next */ target_ulong pc_succ_insn; target_ulong priv_ver; + bool virt_enabled; uint32_t opcode; uint32_t mstatus_fs; uint32_t misa; @@ -398,6 +399,12 @@ static void mark_fs_dirty(DisasContext *ctx) tcg_gen_ld_tl(tmp, cpu_env, offsetof(CPURISCVState, mstatus)); tcg_gen_ori_tl(tmp, tmp, MSTATUS_FS); tcg_gen_st_tl(tmp, cpu_env, offsetof(CPURISCVState, mstatus)); + + if (ctx->virt_enabled) { + tcg_gen_ld_tl(tmp, cpu_env, offsetof(CPURISCVState, vsstatus)); + tcg_gen_ori_tl(tmp, tmp, MSTATUS_FS); + tcg_gen_st_tl(tmp, cpu_env, offsetof(CPURISCVState, vsstatus)); + } tcg_temp_free(tmp); } #else @@ -742,6 +749,11 @@ static void riscv_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs) ctx->mem_idx = ctx->base.tb->flags & TB_FLAGS_MMU_MASK; ctx->mstatus_fs = ctx->base.tb->flags & TB_FLAGS_MSTATUS_FS; ctx->priv_ver = env->priv_ver; +#if !defined(CONFIG_USER_ONLY) + ctx->virt_enabled = riscv_cpu_virt_enabled(env); +#else + ctx->virt_enabled = false; +#endif ctx->misa = env->misa; ctx->frm = -1; /* unknown rounding mode */ ctx->ext_ifencei = cpu->cfg.ext_ifencei; From patchwork Fri Aug 23 23:38:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112537 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6BA7914DE for ; Sat, 24 Aug 2019 00:11:06 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 386CA20850 for ; Sat, 24 Aug 2019 00:11:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="QK10wwnj" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 386CA20850 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35378 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1Je5-0005ag-B5 for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 20:11:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49828) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JCO-00018W-5S for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JCN-0000JX-1D for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:28 -0400 Received: from esa5.hgst.iphmx.com ([216.71.153.144]:38476) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JCM-0000Il-LN; Fri, 23 Aug 2019 19:42:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603747; x=1598139747; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Zk6i3nobuH9a+yzfXQLxN8Qyk5ojE8cdGzrGAao+Hwk=; b=QK10wwnjDK+7aJCxWNwT2uNaT8dbI9RIFh1t7RWmRo11ZFohb9tmH8fL xo+7Tsb9WMPUsrUJA50MjMNFX9fYKBJCe378CJatIjPgJt1r/OeZq8dia UlMzEnN8CdGKxyZvFTFWZgzaT6d1vu2yUxu831XyB7iNDWm4nFHJZJxNN 0KdKKNtd9aTL3hTo1G+USV4wTuwfNyGdOex3lC+2HEn1oXx6ryAi0yiIk jMVDhu/bqnkGvyXwfShgAgoZDNkk5bvDRIGVRdQC0/6rCNKH3bCY5WO7j em8ZsrTYobXoU8LdOxBoJEFatq+n9gJ28+P7zU0sgKxvKKhKQrQjpi9+v w==; IronPort-SDR: Z/cH5aUAjdpIEQNWONTXY9uVO9Ckl6xiWC8kiJChlvL8v8Rp2UQqzTsVN/vqtAoj4fXijwuNJD jQ/eZQZ+O/TUfXQey2DFnvy6EVuyj9Pu48GaTs/U9g4EzLZrAeRJXgaxbSMDNeYfaTR3GB6AyY hVKXGk2TSXE9IELd0geFa2A6AKEf5haBbR5nqTvleoO879NgYoESO/OuH+kD9jEnAy67mzs/Ip eWBOopREhH8vcJdjdMLE0vP8SezDixeS1Fs+SECbj9HhvIU2sAnGDgdq3D4uE8Kmyz+EMM0xo4 hkk= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="117486907" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:26 +0800 IronPort-SDR: SpDd8GTqtoJfMFuVUDK6nZizm+FtDduQYKJRgMcEIcwOH8jZ9iaWtvxM9Zx37Be4OT0g/tFARZ OkrBtCcaOuRWVkFAwpw9Ls7zWuj3QoAGzKCwQ6Cp2eqa39X5zynSnh+rvVh7lmltbAZlZXxxuz L6fn+Gfs19rvgYAMBZaG2KPaikCcV/3H0nnCaba84G3/I9VqxIk4i2NAAz49h0fuA8rpB+kjZ4 kLvmkgZX3cMuyY4zez34cWEiIEJnkjGPGSbsbTq1X88aJ8bznnK3920NDUuqP18GLvBSRYtZEx YCG7HLhm89aowP0P/C4Q94l4 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:43 -0700 IronPort-SDR: 7elb/x0ptLLj0i0Sez73m0Di+PGjl5lUQXUgDnEobbiNQmr8x8nU/lVqCNhL4XkXQWyQnmr7Of QANgHSW7CZ5knaFXyR7odRpFQ50eGnqHWqJy75mkFQfMtSHRgfLaJx2BoIXi811cRJ9dmUaDnA E6MtiiHb3KP+FWn4Dyjy0BjDIBXg0WhB4NrVClorqfTEWCpS2E5Lm6Gixa+Lq2YWuvYl4AAeNo pQ4zIZ1d+x9GwUgwdPzxFHy50rPvLPlA7yRNUYSMYOBSuTpsRR7fDXWIATr7rb2xOdDHDA7/BM dpY= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 23 Aug 2019 16:42:24 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:44 -0700 Message-Id: <8a628d1542d547b6d639cdba51db67590d0b56de.1566603412.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.153.144 Subject: [Qemu-devel] [PATCH v1 21/28] target/riscv: Respect MPRV and SPRV for floating point ops X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Respect the contents of MSTATUS.MPRV and HSTATUS.SPRV when performing floating point operations when V=0. Signed-off-by: Alistair Francis --- target/riscv/translate.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 19771904f4..ea19ba9c5d 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -750,7 +750,21 @@ static void riscv_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs) ctx->mstatus_fs = ctx->base.tb->flags & TB_FLAGS_MSTATUS_FS; ctx->priv_ver = env->priv_ver; #if !defined(CONFIG_USER_ONLY) - ctx->virt_enabled = riscv_cpu_virt_enabled(env); + if (riscv_has_ext(env, RVH)) { + ctx->virt_enabled = riscv_cpu_virt_enabled(env); + if (env->priv_ver == PRV_M && + get_field(*env->mstatus, MSTATUS_MPRV) && + get_field(*env->mstatus, MSTATUS_MPV)) { + ctx->virt_enabled = true; + } else if (env->priv == PRV_S && + !riscv_cpu_virt_enabled(env) && + get_field(env->hstatus, HSTATUS_SPRV) && + get_field(env->hstatus, HSTATUS_SPV)) { + ctx->virt_enabled = true; + } + } else { + ctx->virt_enabled = false; + } #else ctx->virt_enabled = false; #endif From patchwork Fri Aug 23 23:38:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112525 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A738214DE for ; Sat, 24 Aug 2019 00:02:34 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7D172206BA for ; Sat, 24 Aug 2019 00:02:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="NcO9BieR" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7D172206BA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35250 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JVp-0004ms-Du for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 20:02:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49860) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JCP-0001BP-VJ for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JCO-0000KR-O3 for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:29 -0400 Received: from esa5.hgst.iphmx.com ([216.71.153.144]:38476) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JCO-0000Il-DH; Fri, 23 Aug 2019 19:42:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603749; x=1598139749; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=2K2heKwYI3ZlRTWb1vXPZVntWORWGCN1A7mMqHQXzJ8=; b=NcO9BieRwZcYOfNcuxPdbMfDDdLsZ7qCKLOOj1MimjYo/2yhxJ3zGbPf S6dqHDOOdPQjbqha64dKQ9nTj4QvDx/XODKCEz694M8pWYgOZ8zmdBhKm JeHgh4Tn6Y2rclJ+rIGkImqJJL92gYHkj6iVyo3iWsuf65glEcXpvfgTw r1V5lMP7p8Tb12GW+wXAZR0FN+R1FlcRnCfi6FiV3LXUk/2futsAg0f4m nbOgakcQLv+0DQLrH0HcuQuSdHyhDh/cSG+VeKartbQQ9+DDSTPNtX6GV 24KOmsURprUVf+P0YdaL4OptBtEvHIgkCLy9TZwrUmSPMZJ35ivL0aZUG g==; IronPort-SDR: GJq8Tcu0MFA2en6CJsBOlGv6c9mbWhewOoAh3cVUVqKwtO17+FFYKSm13vCZIwIZXCP0jQHnPJ tM3rGITwScYmiOotQ9FONXg46GMdS+LQpjNMQ4ywuXAeWkckjx41OieQoaYN92/kHr3zynljxl wMXAa1436Gnu5biorABUmK2UpQQluNzIn52DqaWhi9TIXHUTK8Dxm+IqwTz0j/gOTnjgCrzpu5 eHNmjffZwSVbl0afHD+cfwzdeoj6eu5SfgBkkl60eY2asYPS9it5jOQDxff8WNAKc5zVzl96yb nPc= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="117486911" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:29 +0800 IronPort-SDR: 3UPduKeBdVtNLkqRMurCni0PZnHOyAL2UHY4Tn+zBbEQLw4dg/G5LhPtDrtcLrvT9w6YQ0/I1K pbP7DmvHhaAexQtRiHxRF/ib4G9OZnygym+4+LnQK7KTHngYATb+Oa7yVRSbpNo0x//FmrzoB7 u/ZoekblXL6oNDQgxa2D5+C5NpqYP0CqqErAF3Uy53s6UlORJ95OuhUugSbCMRlN56RYuwQR10 C0fZvPZZXLKf7APEZuxIkUrse0JbCYGX8NuvBkks9lPtamw6tqdGubFUawUWNMPsGfCAgR7vgH fbzdhZECIAlB8/x+3HdXWyQm Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:45 -0700 IronPort-SDR: GLUIVrpebuDeLf9BzATPTNFU10RmE4mzgmE0bTFP2F345YOrNbKs3XZmhhB02hq0MnPUPZtxyY CsqI2AIUk6NnUOMiJx72AgWrBOox1ghMLpkd+cqmWTX9n7jX+yYynGonlnUe/lV5MXlotbQ27d 3q6lAi+TOboke54+nMT3iQUuOsGH9TcZDB+5rmmPY2d+0Mcq8yDDtaP36nD9ykqQiscFnoERo3 rBD7ZJidSm4R7RM5doaQw77vwKyQm8Bcw77JKmndn70wxM03KNoq1CCxqQWPgZfSkcFNT7GAMt yj4= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 23 Aug 2019 16:42:27 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:47 -0700 Message-Id: <4d84c887def558fc178c31e3adc52f1c4b2fb075.1566603412.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.153.144 Subject: [Qemu-devel] [PATCH v1 22/28] target/riscv: Allow specifying MMU stage X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Alistair Francis --- target/riscv/cpu_helper.c | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 098873c83e..9aa6906acd 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -318,10 +318,19 @@ void riscv_cpu_set_mode(CPURISCVState *env, target_ulong newpriv) * * Adapted from Spike's mmu_t::translate and mmu_t::walk * + * @env: CPURISCVState + * @physical: This will be set to the calculated physical address + * @prot: The returned protection attributes + * @addr: The virtual address to be translated + * @access_type: The type of MMU access + * @mmu_idx: Indicates current privilege level + * @first_stage: Are we in first stage translation? + * Second stage is used for hypervisor guest translation */ static int get_physical_address(CPURISCVState *env, hwaddr *physical, int *prot, target_ulong addr, - int access_type, int mmu_idx) + int access_type, int mmu_idx, + bool first_stage) { /* NOTE: the env->pc value visible here will not be * correct, but the value visible to the exception handler @@ -518,13 +527,23 @@ restart: } static void raise_mmu_exception(CPURISCVState *env, target_ulong address, - MMUAccessType access_type, bool pmp_violation) + MMUAccessType access_type, bool pmp_violation, + bool first_stage) { CPUState *cs = env_cpu(env); - int page_fault_exceptions = - (env->priv_ver >= PRIV_VERSION_1_10_0) && - get_field(env->satp, SATP_MODE) != VM_1_10_MBARE && - !pmp_violation; + int page_fault_exceptions; + if (first_stage) { + page_fault_exceptions = + (env->priv_ver >= PRIV_VERSION_1_10_0) && + get_field(env->satp, SATP_MODE) != VM_1_10_MBARE && + !pmp_violation; + riscv_cpu_set_force_hs_excep(env, CLEAR_HS_EXCEP); + } else { + page_fault_exceptions = + get_field(env->hgatp, HGATP_MODE) != VM_1_10_MBARE && + !pmp_violation; + riscv_cpu_set_force_hs_excep(env, FORCE_HS_EXCEP); + } switch (access_type) { case MMU_INST_FETCH: cs->exception_index = page_fault_exceptions ? @@ -551,7 +570,8 @@ hwaddr riscv_cpu_get_phys_page_debug(CPUState *cs, vaddr addr) int prot; int mmu_idx = cpu_mmu_index(&cpu->env, false); - if (get_physical_address(&cpu->env, &phys_addr, &prot, addr, 0, mmu_idx)) { + if (get_physical_address(&cpu->env, &phys_addr, &prot, addr, 0, mmu_idx, + true)) { return -1; } return phys_addr; @@ -613,7 +633,8 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, int size, qemu_log_mask(CPU_LOG_MMU, "%s ad %" VADDR_PRIx " rw %d mmu_idx %d\n", __func__, address, access_type, mmu_idx); - ret = get_physical_address(env, &pa, &prot, address, access_type, mmu_idx); + ret = get_physical_address(env, &pa, &prot, address, access_type, mmu_idx, + true); if (mode == PRV_M && access_type != MMU_INST_FETCH) { if (get_field(*env->mstatus, MSTATUS_MPRV)) { @@ -640,7 +661,7 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, int size, } else if (probe) { return false; } else { - raise_mmu_exception(env, address, access_type, pmp_violation); + raise_mmu_exception(env, address, access_type, pmp_violation, true); riscv_raise_exception(env, cs->exception_index, retaddr); } #else From patchwork Fri Aug 23 23:38:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112529 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4C8291395 for ; Sat, 24 Aug 2019 00:06:08 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1964E206BA for ; Sat, 24 Aug 2019 00:06:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="EYGb2ZWQ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1964E206BA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35292 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JZH-0007gz-0n for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 20:06:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49887) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JCS-0001F3-C8 for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JCR-0000LD-AQ for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:32 -0400 Received: from esa5.hgst.iphmx.com ([216.71.153.144]:38476) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JCR-0000Il-0C; Fri, 23 Aug 2019 19:42:31 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603752; x=1598139752; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=WPGQbBTRtC+Hpo1q+Eow5D21d9Sh3h6nJuJ7fj9l0zw=; b=EYGb2ZWQsoFfdpO4ecsXU2aOQo6V4Tqkt/CqZxZdOkeFVp/x8icPKwdm 57PHin1F+qdWDIHiHEnz5ZKR45B7PtTff71mkQNmYXaaUK5/YL+emUW9Z Bo1kRB0e6JoEvyIR3VH7oOG33NL3ZOWKajVwhizSM2yZT+fZ4jm8h0EN+ ppgz6jS+fKLFU7gB7wgRG498wx+ZLBmrJuFle5REpjtas6lS8bPJa4X+K qc/xlfXv20Tk47ymGnajetbW6YbeiggYGPUTxHb4eorNZ19pnmlM0nfDF b00zpsAqKu+ryHf4b1mvLuwSyn3tqrkH1a9cKYh13Wgygp6GPAXheOkA2 g==; IronPort-SDR: bKL2jHx7c5VxQv8wABeTxFsme5MyAS6K2vR13pFXYpM3BKq2nZoOl5i/JUiWzR7HKBj3hpeY+g XYHufOcW1xjffZ3Zg7eGWO7GQi4yC1yeOSIBgPx74PgyIjKjH2ZX30IR5aV8zjm8UH1gviqjDN W6Ye+pdAZfrRLfJ63FqhOXd6PJvE2ezaMEACA2ptnnUAkQSsfxOd5YK/K9IYSnU9yP3FKzaIfM qeRD/ildAmp+nErvP6ABquGiHKqOEg2MS8++weTYnWk8cp/gV3jH1hUsVl4uVCDFFFa8h8KwH6 fPU= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="117486912" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:31 +0800 IronPort-SDR: n8iysQxMAhoZRpIrMQc84NmWCFQuEJUrRykHqlT5MeHkTYHhfP7leHZK4aKeSyHyXKGMoUDmhx U6dEOrVgiAF/f7PBaUMpMxTpl2B+5M+tNksjDe9NLgWWLMt5thsPNuKhV72GLKhXBNb5SUaRJJ 49NaagS56DK1IOEsw5ky+M3uKTPDFPbbPYCWFLWch6MvLwHmFqDBhmsLtp+vHwOlos19UOg3Gl Kz4m0G7eqNZEc2PeJrQ9j/e4Sh9nHLQTeepKXKKxwCAInoS/b3umhLNZxUz/eq/MmJN5FTm2Tg fX08HNF5JjtXqS66eJ+hzgbl Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:48 -0700 IronPort-SDR: YEOvA2E4jKGth1Rk1dTwoj0VjY53bna5Yk2MtXRLXnGML5lbo6koZOMmn/8FTcprITRBWZnfqa x9B5noUDD3aBhckzYuvWTr3/ssAlJWRK1gDBy/OKp5IM7Ubrt1okuQjFFTqwKOu1EEBeeQ0yBD 9CdJ7Wpv+pZ5XaS8ZpGGCIz/60geGhy+xpArOePcNLQsptKG5oKXE7f1uEI8xfvTQBff1Bcik/ HJf8gOD6hASzEn9DlPjeEgNcIp/q88QbOJXIkjZg6yzjC+JBKbyj0Z6nmyG4sxsFqOIPvXF13U BtQ= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 23 Aug 2019 16:42:31 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:50 -0700 Message-Id: X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.153.144 Subject: [Qemu-devel] [PATCH v1 23/28] target/riscv: Allow specifying number of MMU stages X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Alistair Francis --- target/riscv/cpu_helper.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 9aa6906acd..8b9871f9ea 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -330,7 +330,7 @@ void riscv_cpu_set_mode(CPURISCVState *env, target_ulong newpriv) static int get_physical_address(CPURISCVState *env, hwaddr *physical, int *prot, target_ulong addr, int access_type, int mmu_idx, - bool first_stage) + bool first_stage, bool two_stage) { /* NOTE: the env->pc value visible here will not be * correct, but the value visible to the exception handler @@ -571,9 +571,10 @@ hwaddr riscv_cpu_get_phys_page_debug(CPUState *cs, vaddr addr) int mmu_idx = cpu_mmu_index(&cpu->env, false); if (get_physical_address(&cpu->env, &phys_addr, &prot, addr, 0, mmu_idx, - true)) { + true, false)) { return -1; } + return phys_addr; } @@ -634,7 +635,7 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, int size, __func__, address, access_type, mmu_idx); ret = get_physical_address(env, &pa, &prot, address, access_type, mmu_idx, - true); + true, false); if (mode == PRV_M && access_type != MMU_INST_FETCH) { if (get_field(*env->mstatus, MSTATUS_MPRV)) { From patchwork Fri Aug 23 23:38:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112521 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C3BF2912 for ; Fri, 23 Aug 2019 23:59:09 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 99497206BA for ; Fri, 23 Aug 2019 23:59:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="drlvJJAV" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 99497206BA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35196 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JSW-00022f-9p for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 19:59:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49917) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JCV-0001K4-I8 for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JCU-0000M8-58 for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:35 -0400 Received: from esa5.hgst.iphmx.com ([216.71.153.144]:38476) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JCT-0000Il-My; Fri, 23 Aug 2019 19:42:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603755; x=1598139755; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=5/l8AjmMesb9o3KVwvrFCmJuIi2N9DKlGj66CZQ9yt8=; b=drlvJJAVi9Lcqb+j06JI0pQAkp14rOjWBQqX1sECYBPmZaXBD+0ArLYN sZNYJZdNEZcpKrZK1n0VSFCTZhcRUWz/uO8DmZrW4nxaZMY3wvtrugtrC 90QFc+SMDHhjQ0baaVpQVyQyaewYogRz3FHxBxrvDCX96wwmfK1wiHXcE juNXyAWWmhJv4mGXV3IA36xtSaU+ZZC5aSui8IemQalhzLaxcVwMi+pRa Cjy3H7pZeHqOeQnx8lBD0QpayfXHt+SNmf02zUgkRTy6mLq91a9nwcjgR kZnnsaXwqleMJjOcLF5VL+RP7UwWkvM8C3Bd912gzi3bWiqOKP57tIuz8 w==; IronPort-SDR: kKv+HSofe6pOjipJvmPJSm0MxKNZl6FMxK1JcXyQHZfp6KgeVKrnvBePtYDcNftyJQR/NNLwKi JOKv1BKKzil/BE116Tv5dgoE/NXUCPrrg+gwZZhz7+Q63FYQE8q1E6L6o/3/aU/vTl9aa3xmrs iixQ0PQYD2kxRlBGX7/TWNYRj0vZN+e9NO1htt6KWM014EdvZLxNjAyJ9yDPBNPjfqsG2yk7cU eFuv10yrMEsqNtB7FgHE8iuFBCImFYTosYZCOf5BuDDCkcaw4lAfzTK4/IpRZXlFwpZcnDyEPl grA= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="117486915" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:34 +0800 IronPort-SDR: iO0tTVjcAmbhT62H3shHbqfEuxfuNTaeA3TXStRTZw3GaKYVFns2h2UiCBUAofRkf0EwrWVA7X 9QWAXxSzz721fXPvlTaTCdvHxfGzmfUaCSB2qsfMAqNiuJbFKA1PSeaEKrogYI/kQeJm3dAyaU N7VMI5KUE/bYAQhy081CmsnwkBL8a4F3bnPkfs9eqOphfGc3y0xYRIDOfomEo1D/RjH504MBYk iiysfyQsVVWKrIiJXBV/ataKWMKSAzyR6nafG2cPHBirsyRCPR2jkEvBQe3CLD6n9LEmVr4VDX tZl/562b58mW6h5HTDNtsa8T Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:50 -0700 IronPort-SDR: Qt6pB2EwpELfQxvXKzg4iOFFSjrP1IUbRi+q1IbRaqizhNkZQ7KmbUJLfw7AyyRkQxOtGUZqcv QQ0qW/vyYIENPjT3PXHpVpQbBDBTxTi0lCutkO4ZXr5H2OVmmM5o4O9aX3qgzfC2jrIekUVe4G /DEth/hJQZqmJghfF90Z+EwrL3ol9pWenafc/hZPTlbPMtEIIqfOCL+56/EfqnEiY23Pu5UVBk cl2tShliNzncESbo+VFRB0jF2ldJ1wCEvsRjUAgjktTlNu4dWR5dcJW7dQNUCnpdXM9HTS1R7b NNo= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 23 Aug 2019 16:42:32 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:52 -0700 Message-Id: <67e93a4f45693067abb03441e159b1f4a0a48276.1566603412.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.153.144 Subject: [Qemu-devel] [PATCH v1 24/28] target/riscv: Implement second stage MMU X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu_helper.c | 96 +++++++++++++++++++++++++++++++++++---- 1 file changed, 86 insertions(+), 10 deletions(-) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 8b9871f9ea..188d5cb39f 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -337,13 +337,40 @@ static int get_physical_address(CPURISCVState *env, hwaddr *physical, * (riscv_cpu_do_interrupt) is correct */ int mode = mmu_idx; + bool use_background = false; + /* + * Check if we should use the background registers for the two + * stage translation. We don't need to check if we actually need + * two stage translation as that happened before this function + * was called. Background registers will be used if the guest has + * forced a two stage translation to be on (in HS or M mode). + */ if (mode == PRV_M && access_type != MMU_INST_FETCH) { if (get_field(*env->mstatus, MSTATUS_MPRV)) { mode = get_field(*env->mstatus, MSTATUS_MPP); + + if (riscv_has_ext(env, RVH) && + get_field(*env->mstatus, MSTATUS_MPV)) { + use_background = true; + } } } + if (mode == PRV_S && access_type != MMU_INST_FETCH && + riscv_has_ext(env, RVH) && !riscv_cpu_virt_enabled(env)) { + if (get_field(env->hstatus, HSTATUS_SPRV)) { + mode = get_field(*env->mstatus, SSTATUS_SPP); + use_background = true; + } + } + + if (first_stage == false) { + /* We are in stage 2 translation, this is similar to stage 1. */ + /* Stage 2 is always taken as U-mode */ + mode = PRV_U; + } + if (mode == PRV_M || !riscv_feature(env, RISCV_FEATURE_MMU)) { *physical = addr; *prot = PAGE_READ | PAGE_WRITE | PAGE_EXEC; @@ -353,13 +380,30 @@ static int get_physical_address(CPURISCVState *env, hwaddr *physical, *prot = 0; target_ulong base; - int levels, ptidxbits, ptesize, vm, sum; - int mxr = get_field(*env->mstatus, MSTATUS_MXR); + int levels, ptidxbits, ptesize, vm, sum, mxr, widened; + + if (first_stage == true) { + mxr = get_field(*env->mstatus, MSTATUS_MXR); + } else { + mxr = get_field(env->vsstatus, MSTATUS_MXR); + } if (env->priv_ver >= PRIV_VERSION_1_10_0) { - base = get_field(env->satp, SATP_PPN) << PGSHIFT; + if (first_stage == true) { + if (use_background) { + base = get_field(env->vsatp, SATP_PPN) << PGSHIFT; + vm = get_field(env->vsatp, SATP_MODE); + } else { + base = get_field(env->satp, SATP_PPN) << PGSHIFT; + vm = get_field(env->satp, SATP_MODE); + } + widened = 0; + } else { + base = get_field(env->hgatp, HGATP_PPN) << PGSHIFT; + vm = get_field(env->hgatp, HGATP_MODE); + widened = 2; + } sum = get_field(*env->mstatus, MSTATUS_SUM); - vm = get_field(env->satp, SATP_MODE); switch (vm) { case VM_1_10_SV32: levels = 2; ptidxbits = 10; ptesize = 4; break; @@ -377,6 +421,7 @@ static int get_physical_address(CPURISCVState *env, hwaddr *physical, g_assert_not_reached(); } } else { + widened = 0; base = env->sptbr << PGSHIFT; sum = !get_field(*env->mstatus, MSTATUS_PUM); vm = get_field(*env->mstatus, MSTATUS_VM); @@ -397,9 +442,16 @@ static int get_physical_address(CPURISCVState *env, hwaddr *physical, } CPUState *cs = env_cpu(env); - int va_bits = PGSHIFT + levels * ptidxbits; - target_ulong mask = (1L << (TARGET_LONG_BITS - (va_bits - 1))) - 1; - target_ulong masked_msbs = (addr >> (va_bits - 1)) & mask; + int va_bits = PGSHIFT + levels * ptidxbits + widened; + target_ulong mask, masked_msbs; + + if (TARGET_LONG_BITS > (va_bits - 1)) { + mask = (1L << (TARGET_LONG_BITS - (va_bits - 1))) - 1; + } else { + mask = 0; + } + masked_msbs = (addr >> (va_bits - 1)) & mask; + if (masked_msbs != 0 && masked_msbs != mask) { return TRANSLATE_FAIL; } @@ -411,17 +463,36 @@ static int get_physical_address(CPURISCVState *env, hwaddr *physical, restart: #endif for (i = 0; i < levels; i++, ptshift -= ptidxbits) { - target_ulong idx = (addr >> (PGSHIFT + ptshift)) & + target_ulong idx; + if (i == 0) { + idx = (addr >> (PGSHIFT + ptshift)) & + ((1 << (ptidxbits + widened)) - 1); + } else { + idx = (addr >> (PGSHIFT + ptshift)) & ((1 << ptidxbits) - 1); + } /* check that physical address of PTE is legal */ - target_ulong pte_addr = base + idx * ptesize; + target_ulong pte_addr; + + if (two_stage && first_stage) { + hwaddr vbase; + + /* Do the second stage translation on the base PTE address. */ + get_physical_address(env, &vbase, prot, base, access_type, + mmu_idx, false, true); + + pte_addr = vbase + idx * ptesize; + } else { + pte_addr = base + idx * ptesize; + } if (riscv_feature(env, RISCV_FEATURE_PMP) && !pmp_hart_has_privs(env, pte_addr, sizeof(target_ulong), 1 << MMU_DATA_LOAD, PRV_S)) { return TRANSLATE_PMP_FAIL; } + #if defined(TARGET_RISCV32) target_ulong pte = ldl_phys(cs->as, pte_addr); #elif defined(TARGET_RISCV64) @@ -507,7 +578,12 @@ restart: /* for superpage mappings, make a fake leaf PTE for the TLB's benefit. */ target_ulong vpn = addr >> PGSHIFT; - *physical = (ppn | (vpn & ((1L << ptshift) - 1))) << PGSHIFT; + if (i == 0) { + *physical = (ppn | (vpn & ((1L << (ptshift + widened)) - 1))) << + PGSHIFT; + } else { + *physical = (ppn | (vpn & ((1L << ptshift) - 1))) << PGSHIFT; + } /* set permissions on the TLB entry */ if ((pte & PTE_R) || ((pte & PTE_X) && mxr)) { From patchwork Fri Aug 23 23:38:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112527 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 805361395 for ; Sat, 24 Aug 2019 00:02:47 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 56AC5206BA for ; Sat, 24 Aug 2019 00:02:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="oGTWChG3" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 56AC5206BA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35254 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JW2-0004ui-6r for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 20:02:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49936) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JCY-0001Nv-7K for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JCW-0000Nq-Ov for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:38 -0400 Received: from esa5.hgst.iphmx.com ([216.71.153.144]:38476) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JCW-0000Il-AE; Fri, 23 Aug 2019 19:42:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603757; x=1598139757; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=xbDp2VTa5nkr1Wtzu7iLEtCtDivv5fW+n8VqxwbfJaI=; b=oGTWChG3WPeNA12q2OkVdFBdTCgXG4B+CAz45A2Wd2EftUc70XekVKLC X8aTR/B3bo4assdJP1neWmZ8DfqvRS1GXIGGofPVrNDHb4umqT7pTilCG zrpoOnyglcHYERuUdGP/LLCT2fb2DLllSpBjTESckvSxY/n4BFPFEBuNb rJCfciTHvnY5jvSn3L67e9i0guhCqXq3OuOascqFNKBYzQ67u7AR5zwAC Tp0hAH4eN22zdU5KqENrtEyMMUTBEuQTZZn3r/sJtG3hxp2Jn5+upJ43f q4N18z3ifLXn0HAK5ayWm5q+WiYz6Qk1yjTMcseoxW7+lpLTwpJMCNo/d A==; IronPort-SDR: cMAfVOtJjThnwSurkSw8t1w9PEy3c0/yT4w8N+e9BkoUYlKN8DlXXHAPo+yeJ5KUtygWGDCTTL GEDBmQaK7JyV/VbUUAyiWfd4Y7ck6y9bu0A24tignnHvN6VTgSO/Sjh8Ac6/dPqnWoaKT2uJUo PaBHNN2MK2N9Gvi4oj+6hdC5haaloanGqBO14sfi7fygRvhxDPTaaADfIodLvQUoyTiailGl7Y NMttLQXQY8W/Ay/u3ZfzLlhW5xglWlGTZNdcMNzcLY6Nk6jpRHIsLljxyJyBG0uxWSSCEO+UHA 2MA= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="117486919" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:36 +0800 IronPort-SDR: q6sm5E7OMPszdoQk7XbbLXrMZT9O5g4FTQ9gs0qa/mU8e43p0jqahnmVZ/6Fza27f3n+KJLtoI hgKLnt5pmQawLji3RcP57noJzuSV/EINXuAY8tP7Vgnpp4M0qxZMtniaSjqIF3N19jWvj21yyU QxNC3BzU5IuNdw8J1wEbXe5WfKo1vrDx2b0FgrmEgGAqzH7peA8KLDQczd1NjMeGC6d5kZKBqT yW5S4T7Z7lXBhDVCsC1iHiTI4N1TskbrgE931aZ4YypG1OvGTFOl93OYsmuXcfYTPoB9aAJ+vy 8Mq6HNMv2I/XAHJ6IAwdGn1U Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:53 -0700 IronPort-SDR: 0on1V1Ga0S8c7BQ0id/LN1bp8DD/60ScKbTTbm+97ksvp0YSYRSEDIRu50yrA1HTZR+rtdqDTD 9fucfTG89padnL/tA2OmxpJZjsN1w9LH4KaZH3eHGdY4S7PlcT90vWUgPr/fxaAo75EIY4nRVm KHFHnOPr9gQqRN2VbWEGWOrtoRZe0HVMURmQNePUNImvwCapGDLrhIRK9wI3Y8921sYDTnEJd2 qeDKSTdmCZrMLCwZYwBAgIB2Ng+fV01U2VmJXyJlP/pMYmC5qJCElkkX0f9KAcGXmwwL8sKMHR eeY= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 23 Aug 2019 16:42:35 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:55 -0700 Message-Id: <39abe56d7ba4d0ba392af6df09986af849f19403.1566603412.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.153.144 Subject: [Qemu-devel] [PATCH v1 25/28] target/riscv: Call the second stage MMU in virtualisation mode X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" The qemu_log_mask(CPU_LOG_MMU,... calls trigger false positive checkpatch errors which are being ignored. Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu_helper.c | 94 +++++++++++++++++++++++++++++++++++---- 1 file changed, 86 insertions(+), 8 deletions(-) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 188d5cb39f..0761191f11 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -642,15 +642,23 @@ static void raise_mmu_exception(CPURISCVState *env, target_ulong address, hwaddr riscv_cpu_get_phys_page_debug(CPUState *cs, vaddr addr) { RISCVCPU *cpu = RISCV_CPU(cs); + CPURISCVState *env = &cpu->env; hwaddr phys_addr; int prot; int mmu_idx = cpu_mmu_index(&cpu->env, false); - if (get_physical_address(&cpu->env, &phys_addr, &prot, addr, 0, mmu_idx, - true, false)) { + if (get_physical_address(env, &phys_addr, &prot, addr, 0, mmu_idx, + true, riscv_cpu_virt_enabled(env))) { return -1; } + if (riscv_cpu_virt_enabled(env)) { + if (get_physical_address(env, &phys_addr, &prot, phys_addr, + 0, mmu_idx, false, true)) { + return -1; + } + } + return phys_addr; } @@ -701,17 +709,35 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, int size, #ifndef CONFIG_USER_ONLY RISCVCPU *cpu = RISCV_CPU(cs); CPURISCVState *env = &cpu->env; + vaddr im_address; hwaddr pa = 0; int prot; bool pmp_violation = false; + bool m_mode_two_stage = false; + bool hs_mode_two_stage = false; + bool first_stage_error = true; int ret = TRANSLATE_FAIL; int mode = mmu_idx; qemu_log_mask(CPU_LOG_MMU, "%s ad %" VADDR_PRIx " rw %d mmu_idx %d\n", __func__, address, access_type, mmu_idx); - ret = get_physical_address(env, &pa, &prot, address, access_type, mmu_idx, - true, false); + /* + * Determine if we are in M mode and MPRV is set or in HS mode and SPRV is + * set and we want to access a virtulisation address. + */ + if (riscv_has_ext(env, RVH)) { + m_mode_two_stage = env->priv == PRV_M && + access_type != MMU_INST_FETCH && + get_field(*env->mstatus, MSTATUS_MPRV) && + get_field(*env->mstatus, MSTATUS_MPV); + + hs_mode_two_stage = env->priv == PRV_S && + !riscv_cpu_virt_enabled(env) && + access_type != MMU_INST_FETCH && + get_field(env->hstatus, HSTATUS_SPRV) && + get_field(env->hstatus, HSTATUS_SPV); + } if (mode == PRV_M && access_type != MMU_INST_FETCH) { if (get_field(*env->mstatus, MSTATUS_MPRV)) { @@ -719,10 +745,58 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, int size, } } - qemu_log_mask(CPU_LOG_MMU, - "%s address=%" VADDR_PRIx " ret %d physical " TARGET_FMT_plx - " prot %d\n", __func__, address, ret, pa, prot); + if (riscv_cpu_virt_enabled(env) || m_mode_two_stage || hs_mode_two_stage) { + /* Two stage lookup */ + ret = get_physical_address(env, &pa, &prot, address, access_type, + mmu_idx, true, true); + + qemu_log_mask(CPU_LOG_MMU, + "%s 1st-stage address=%" VADDR_PRIx " ret %d physical " + TARGET_FMT_plx " prot %d\n", + __func__, address, ret, pa, prot); + + if (ret == TRANSLATE_FAIL) { + goto tlb_lookup_done; + } + + /* Second stage lookup */ + im_address = pa; + ret = get_physical_address(env, &pa, &prot, im_address, access_type, mmu_idx, + false, true); + + qemu_log_mask(CPU_LOG_MMU, + "%s 2nd-stage address=%" VADDR_PRIx " ret %d physical " + TARGET_FMT_plx " prot %d\n", + __func__, im_address, ret, pa, prot); + + if (riscv_feature(env, RISCV_FEATURE_PMP) && + (ret == TRANSLATE_SUCCESS) && + !pmp_hart_has_privs(env, pa, size, 1 << access_type, mode)) { + ret = TRANSLATE_PMP_FAIL; + } + + if (ret != TRANSLATE_SUCCESS) { + /* + * Guest physical address translation failed, this is a HS + * level exception + */ + first_stage_error = false; + address = im_address | (address & (TARGET_PAGE_SIZE - 1)); + goto tlb_lookup_done; + } + } else { + /* Single stage lookup */ + ret = get_physical_address(env, &pa, &prot, address, access_type, + mmu_idx, true, false); + + qemu_log_mask(CPU_LOG_MMU, + "%s address=%" VADDR_PRIx " ret %d physical " + TARGET_FMT_plx " prot %d\n", + __func__, address, ret, pa, prot); + } + +tlb_lookup_done: if (riscv_feature(env, RISCV_FEATURE_PMP) && (ret == TRANSLATE_SUCCESS) && !pmp_hart_has_privs(env, pa, size, 1 << access_type, mode)) { @@ -731,6 +805,7 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, int size, if (ret == TRANSLATE_PMP_FAIL) { pmp_violation = true; } + if (ret == TRANSLATE_SUCCESS) { tlb_set_page(cs, address & TARGET_PAGE_MASK, pa & TARGET_PAGE_MASK, prot, mmu_idx, TARGET_PAGE_SIZE); @@ -738,9 +813,12 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, int size, } else if (probe) { return false; } else { - raise_mmu_exception(env, address, access_type, pmp_violation, true); + raise_mmu_exception(env, address, access_type, pmp_violation, first_stage_error); riscv_raise_exception(env, cs->exception_index, retaddr); } + + return true; + #else switch (access_type) { case MMU_INST_FETCH: From patchwork Fri Aug 23 23:38:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112533 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8BA3914DE for ; Sat, 24 Aug 2019 00:08:28 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 616DF20850 for ; Sat, 24 Aug 2019 00:08:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="B6EfHNDx" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 616DF20850 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35322 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JbX-0002YK-0P for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 20:08:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49976) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JCa-0001Rp-PS for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JCZ-0000P8-Ct for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:40 -0400 Received: from esa5.hgst.iphmx.com ([216.71.153.144]:38476) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JCY-0000Il-Uq; Fri, 23 Aug 2019 19:42:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603760; x=1598139760; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=bSg1Zkq8ZzQni09KJX5mI6uvxYi+5BNezHBmLct93A0=; b=B6EfHNDx1Sc4VwaFCG5hobhghCleuZ0GnLrL5zzBcQzjNX+dL63VDtlp 3mzhPpBLgsDWpNxEsS7etV4X8KlbhU6FZsLi2VrFkmfWywdHhiu8+6Nur EeLNU6t2BaGMCJRO2sf6jv7luxtLfgxgNBLEGPVfhEwQRPLl1GFzk3WvH ZhrUn07BwnicaFWlc1aV6gBNlYCzHTuQuP0J5Xy7SXYwu+3ODF8Xwdxql 7syUSICZPeeTOJ8oDkVC1MU6z4aO6A0+Rmwuox0+OEhdtCJlOYvktzH5p o+CF1GGdPM2ePOfMo+idY6A54nYmCCNTgJt/F5PlSuRa7Szxp3+rFlI+a g==; IronPort-SDR: +GPxtk1aj8hcLamUk9Gtix53tXVhy0dK1xn7DIc9Ia1/Nje5c4mbCUbdD44ZkDDgTkKYReg7sc 2YtxlIoGzqSiap7CTlUTDZrPr6TMggEfk7Qp2WXcI1IW/bkDUGUA47b2azQi9R31XdZ2akWHE0 ZBXXwqGukWsvOv6QeTbzEcAjasY4L17xeoziLAMEaMYuJytaDQdsufK4H9F9TLtBmcZOwMfmrW e7jKiFndvr/odok+pmj7k9KpVHGepsHpW9sjFKAJW6gG+7j8WsC2WCi5rDTgxlkKa3nb/PYQc5 1Do= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="117486921" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:39 +0800 IronPort-SDR: JB67y5N4G6jLpu2pdu/X56DcyJikeTro3okDasopgA6HNYS0xVCwWgm6ed3pbvvUvK4FIoUTjQ vTgp2o1dY3Gx4aGBHLXclJwLN+HzeFurHjqsyEaPj+ZEW1EujuJGFV1hjI+jnc4RdmOcKtcK+9 y+FHKe/ZfKXeeIAvHGXb3zYetD/R9ZBcfXi0xp0aK/Syhywpcgf7c47WpVt8kz2pQWw3GTZzWF VGc16NdW5nktOu79jUoXOISe3mxCA8Au2deSzKr9p0fQQOQhVhaDdRvrK1TLQVFoF0r68CR7G2 L6CfMfPeNVqH35LQi8W2qd5N Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:56 -0700 IronPort-SDR: D0w0J12ykULkSt0YsA9puseFk5LS2/430ZAZosLd2quHmfQSr71vcNjwV+M0Zugp+wQZ5A/2uy vMvsFg0BMoKZRPLcZ5jkyoJSx9q8S6aqDxpF+uOMkKEFr6PEkt1ljco2WwHLq4qhpdOXmimsG6 P5LHn4Wft6zXVXdQ7W+UxzcMwdVPU0oOkW/IfDShPnip4OiAZULXypfhYTdcgX/N5/Z9xrbJdL x7vF1hWW507mJZjvpstdxALwUZsMO7V9qDarH4vHGEYOdBBGjcMQjJyquqljVqm9oyFi1+IUMB I3M= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 23 Aug 2019 16:42:38 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:38:58 -0700 Message-Id: X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.153.144 Subject: [Qemu-devel] [PATCH v1 26/28] target/riscv: Add support for the 32-bit MSTATUSH CSR X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Alistair Francis --- target/riscv/cpu.c | 6 ++++++ target/riscv/cpu.h | 7 +++++++ target/riscv/cpu_bits.h | 3 +++ target/riscv/cpu_helper.c | 7 +++++++ target/riscv/csr.c | 23 +++++++++++++++++++++++ target/riscv/op_helper.c | 4 ++++ 6 files changed, 50 insertions(+) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 371d5845af..06ee551ebe 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -229,6 +229,9 @@ static void riscv_cpu_dump_state(CPUState *cs, FILE *f, int flags) #ifndef CONFIG_USER_ONLY qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mhartid ", env->mhartid); qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mstatus ", *env->mstatus); +#ifdef TARGET_RISCV32 + qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mstatush ", *env->mstatush); +#endif if (riscv_has_ext(env, RVH)) { qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "hstatus ", env->hstatus); qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "bstatus ", env->vsstatus); @@ -468,6 +471,9 @@ static void riscv_cpu_init(Object *obj) #ifndef CONFIG_USER_ONLY env->mie = &env->mie_novirt; env->mstatus = &env->mstatus_novirt; +# ifdef TARGET_RISCV32 + env->mstatush = &env->mstatush_novirt; +# endif #endif } diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 05957f32a8..b63f1f3cdc 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -124,6 +124,10 @@ struct CPURISCVState { target_ulong mhartid; target_ulong *mstatus; +#ifdef TARGET_RISCV32 + target_ulong *mstatush; +#endif + /* * CAUTION! Unlike the rest of this struct, mip and mip_novirt is accessed * asynchonously by I/O threads. It should be read with atomic_read. It should @@ -164,6 +168,9 @@ struct CPURISCVState { */ target_ulong mie_novirt; target_ulong mstatus_novirt; +#ifdef TARGET_RISCV32 + target_ulong mstatush_novirt; +#endif /* Hypervisor CSRs */ target_ulong hstatus; diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index 353fc9a24a..55e20af6d9 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -135,6 +135,9 @@ #define CSR_MTVEC 0x305 #define CSR_MCOUNTEREN 0x306 +/* 32-bit only */ +#define CSR_MSTATUSH 0x310 + /* Legacy Counter Setup (priv v1.9.1) */ /* Update to #define CSR_MCOUNTINHIBIT 0x320 for 1.11.0 */ #define CSR_MUCOUNTEREN 0x320 diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 0761191f11..8c80486dd0 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -949,10 +949,17 @@ void riscv_cpu_do_interrupt(CPUState *cs) if (riscv_cpu_virt_enabled(env)) { riscv_cpu_swap_hypervisor_regs(env); } +#ifdef TARGET_RISCV32 + *env->mstatush = set_field(*env->mstatush, MSTATUS_MPV, + riscv_cpu_virt_enabled(env)); + *env->mstatush = set_field(*env->mstatush, MSTATUS_MTL, + riscv_cpu_force_hs_excep_enabled(env)); +#else *env->mstatus = set_field(*env->mstatus, MSTATUS_MPV, riscv_cpu_virt_enabled(env)); *env->mstatus = set_field(*env->mstatus, MSTATUS_MTL, riscv_cpu_force_hs_excep_enabled(env)); +#endif /* Trapping to M mode, virt is disabled */ riscv_cpu_set_virt_enabled(env, VIRT_OFF); diff --git a/target/riscv/csr.c b/target/riscv/csr.c index 47be4b1d42..b7d6d009dc 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -364,6 +364,25 @@ static int write_mstatus(CPURISCVState *env, int csrno, target_ulong val) return 0; } +#ifdef TARGET_RISCV32 +static int read_mstatush(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val = *env->mstatush; + return 0; +} + +static int write_mstatush(CPURISCVState *env, int csrno, target_ulong val) +{ + if ((val ^ *env->mstatush) & (MSTATUS_MPV)) { + tlb_flush(env_cpu(env)); + } + + *env->mstatush = val; + + return 0; +} +#endif + static int read_misa(CPURISCVState *env, int csrno, target_ulong *val) { *val = env->misa; @@ -1095,6 +1114,10 @@ static riscv_csr_operations csr_ops[CSR_TABLE_SIZE] = { [CSR_MTVEC] = { any, read_mtvec, write_mtvec }, [CSR_MCOUNTEREN] = { any, read_mcounteren, write_mcounteren }, +#if defined(TARGET_RISCV32) + [CSR_MSTATUSH] = { any, read_mstatush, write_mstatush }, +#endif + /* Legacy Counter Setup (priv v1.9.1) */ [CSR_MUCOUNTEREN] = { any, read_mucounteren, write_mucounteren }, [CSR_MSCOUNTEREN] = { any, read_mscounteren, write_mscounteren }, diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index 5bcf5d2ff7..8dec1aee99 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -153,7 +153,11 @@ target_ulong helper_mret(CPURISCVState *env, target_ulong cpu_pc_deb) get_field(mstatus, MSTATUS_MPIE)); mstatus = set_field(mstatus, MSTATUS_MPIE, 1); mstatus = set_field(mstatus, MSTATUS_MPP, 0); +#ifdef TARGET_RISCV32 + *env->mstatush = set_field(*env->mstatush, MSTATUS_MPV, 0); +#else mstatus = set_field(mstatus, MSTATUS_MPV, 0); +#endif *env->mstatus = mstatus; riscv_cpu_set_mode(env, prev_priv); From patchwork Fri Aug 23 23:39:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112555 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A9A6814DE for ; Sat, 24 Aug 2019 00:12:28 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8052720850 for ; Sat, 24 Aug 2019 00:12:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="qjTUqum+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8052720850 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35420 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JfP-00073R-JZ for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 20:12:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50015) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JCd-0001Vb-VI for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JCc-0000QH-8J for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:43 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:13713) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JCb-0000Pq-US; Fri, 23 Aug 2019 19:42:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603762; x=1598139762; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=BcKwsJ8UdBDM71IJxhMwOmPklql2SLp8yqEnUlStuz8=; b=qjTUqum+z0DIwS7e6JTax15WJk7ID+Pt8w6AGJIAAe8gs3pnk/544Wu3 JHjKwsZmnYb0V2VfGhT+OuVleh5uTQ5LgVzP7ULj0BDpcyoZN8ChxOICk cKkJLNfwa9Rf/YMeYOOikeXQm4EEI5BsZBDjLhqc+7iluluN46reaTtYn /o/MUiwa60bwzoLeN51eV4EoqZ79Pp0FWJCACxBhHU8kNmrPj8FUggzp3 y7kkj7Ztj0DX+KkyiKOZRVSRSo9yCjdtMkT5m6YrzA62mulRdiJdjHcCH YVNP8QCIeKNuMDZ0JEKVK47k6CGzjiabJGaKJVj1QHdpLzZJ5Te3lyaUB g==; IronPort-SDR: 79cPE2+w4dMo1EtpKVxyViGae5nJ8x4xw6yDgtyh0kxVDhNV/+aT6VktNK2jwhcSuDkPqaxiKM md3n7jHRCmgFavguTMj0ugE02TKmCToE3fiSO7nXN0TH8tdMrTGYGz5BcYN+D6m2Tj96p09oAE dPFQvb/bhHDHiQKHSiw9OG1UO1mWWswfClzDmiIK/dr064tBm6OgsE7O9JA3uwaGhU4D3BDgR+ NwDKmLYYNGhJeRi+4L51nGmK08D97+8oTR9HHqS+b4UqCuTr/ATPX6W8Sy0OKQxu8GjAB5RuTa 8c8= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="118154444" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:41 +0800 IronPort-SDR: RCJ5//b4DFr2/SV1EtDYhZrO7nt1Pfl7HSdk6H9VKwdVROfRLFlwrvqVMW1DwSBASg1spvHo35 ulr0164NyF0B3Mk19ArRWQxcQNh7gx814CnMmE/cxsjV9Hn8ZknEAwyl9p4tXaEV6So/AH6OqX xI44FttrJp4pbIazxUK3a+y1T/XsFAotiCTBTFSzU7y9DI+/NI5lEA+Rjs3PIoeGWF4S3UAmQH g9OfUsi0LUwOqQWuhHwlCwI7mraAm0pFk2YmDa5x3OTVMVmDJ38312l42kZPXEJRcMBvxaMNLn WyvPfDCChyHTd+iRr//J1Kh8 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:39:58 -0700 IronPort-SDR: 0ftYSPLyMbwPbYj7y92iyEUYgRsW2f0QhT/1WD658Twe5/gMP0hIkz0Lw/wumqPXQcusNdfRBy 9O3WRIngg5BaKVhKKGsvu7+BOjv/VN/8K+vaxlYoMx2NVyaSDohrSROxZ0mjmXJBM7yQ+D2xdv boN9IvIjWeFE3P7g0H7Lbd8itPnk0s8fno3563fncnita0FwMsJw31TBxlXlC1wFO2oXFQOhID tqNKkA+e93279yQzGmzac+d9/E0q+oR7tsvhxp1vpdEOVoL4fXy5uB17kXlo5RWg7NsDRKRZwf La0= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip01.wdc.com with ESMTP; 23 Aug 2019 16:42:41 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:39:00 -0700 Message-Id: X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.154.45 Subject: [Qemu-devel] [PATCH v1 27/28] target/riscv: Add the MSTATUS_MPV_ISSET helper macro X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Add a helper macro MSTATUS_MPV_ISSET() which will determine if the MSTATUS_MPV bit is set for both 32-bit and 64-bit RISC-V. Signed-off-by: Alistair Francis --- target/riscv/cpu_bits.h | 11 +++++++++++ target/riscv/cpu_helper.c | 4 ++-- target/riscv/op_helper.c | 2 +- target/riscv/translate.c | 2 +- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index 55e20af6d9..7056d9218b 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -365,8 +365,19 @@ #define MSTATUS_TVM 0x00100000 /* since: priv-1.10 */ #define MSTATUS_TW 0x20000000 /* since: priv-1.10 */ #define MSTATUS_TSR 0x40000000 /* since: priv-1.10 */ +#if defined(TARGET_RISCV64) #define MSTATUS_MTL 0x4000000000ULL #define MSTATUS_MPV 0x8000000000ULL +#elif defined(TARGET_RISCV32) +#define MSTATUS_MTL 0x00000040 +#define MSTATUS_MPV 0x00000080 +#endif + +#ifdef TARGET_RISCV32 +# define MSTATUS_MPV_ISSET(env) get_field(*env->mstatush, MSTATUS_MPV) +#else +# define MSTATUS_MPV_ISSET(env) get_field(*env->mstatus, MSTATUS_MPV) +#endif #define MSTATUS64_UXL 0x0000000300000000ULL #define MSTATUS64_SXL 0x0000000C00000000ULL diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 8c80486dd0..2b88f756bb 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -351,7 +351,7 @@ static int get_physical_address(CPURISCVState *env, hwaddr *physical, mode = get_field(*env->mstatus, MSTATUS_MPP); if (riscv_has_ext(env, RVH) && - get_field(*env->mstatus, MSTATUS_MPV)) { + MSTATUS_MPV_ISSET(env)) { use_background = true; } } @@ -730,7 +730,7 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, int size, m_mode_two_stage = env->priv == PRV_M && access_type != MMU_INST_FETCH && get_field(*env->mstatus, MSTATUS_MPRV) && - get_field(*env->mstatus, MSTATUS_MPV); + MSTATUS_MPV_ISSET(env); hs_mode_two_stage = env->priv == PRV_S && !riscv_cpu_virt_enabled(env) && diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index 8dec1aee99..6149cd9c15 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -146,7 +146,7 @@ target_ulong helper_mret(CPURISCVState *env, target_ulong cpu_pc_deb) target_ulong mstatus = *env->mstatus; target_ulong prev_priv = get_field(mstatus, MSTATUS_MPP); - target_ulong prev_virt = get_field(mstatus, MSTATUS_MPV); + target_ulong prev_virt = MSTATUS_MPV_ISSET(env); mstatus = set_field(mstatus, env->priv_ver >= PRIV_VERSION_1_10_0 ? MSTATUS_MIE : MSTATUS_UIE << prev_priv, diff --git a/target/riscv/translate.c b/target/riscv/translate.c index ea19ba9c5d..f0d9860429 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -754,7 +754,7 @@ static void riscv_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs) ctx->virt_enabled = riscv_cpu_virt_enabled(env); if (env->priv_ver == PRV_M && get_field(*env->mstatus, MSTATUS_MPRV) && - get_field(*env->mstatus, MSTATUS_MPV)) { + MSTATUS_MPV_ISSET(env)) { ctx->virt_enabled = true; } else if (env->priv == PRV_S && !riscv_cpu_virt_enabled(env) && From patchwork Fri Aug 23 23:39:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11112539 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C3EEA1395 for ; Sat, 24 Aug 2019 00:11:09 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 99E3620850 for ; Sat, 24 Aug 2019 00:11:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="DzUSDJtG" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 99E3620850 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35382 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1Je8-0005ez-NG for patchwork-qemu-devel@patchwork.kernel.org; Fri, 23 Aug 2019 20:11:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50039) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1JCi-0001ZG-6E for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1JCh-0000Rl-3O for qemu-devel@nongnu.org; Fri, 23 Aug 2019 19:42:48 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:60088) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i1JCg-0000R2-PN; Fri, 23 Aug 2019 19:42:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1566603766; x=1598139766; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=o2HTtI+4LKfm9DM09fPz6hUY5VIWzNwppTrYYS10GKc=; b=DzUSDJtGdbIFA0PnlTyrz6R0qhlzT67sDsS3wFXKZhmT25tas8k926t9 AO0hJo7OlkgFXB/Av6LEIJDjGQhObnYE7ZyYFZzxWlmI21b7JPEcbg7nu kL4CZdIh7w4zfS28TE3TodVY7a3QkV0oHQQN+kLKBbfBELuuDjQtwHaoH YVaWbnxz6Ixd4jxseSZPxe/J0KbfBUwT4Wt32krPwuIrml92H5AkiBFDS OWYIYmOr33ppksB7bTa/SCLouXkNtsr45gPkcuWYEIOlykdYazZzD2gCQ 8Pjx/Ttx5yfpff8dfZMhwYLd75LC+PXx9/FQJNdqdII0+aN3gjDlgX3E+ g==; IronPort-SDR: BcRfKT71rd6/QYkvPj6GzquI9fKViLtSj4gInY1/ufQ/NUQFOSnzuYdukS4a5bjb0HWJnFp1VP 2/f+BNKgKGr8hoKBS6swX/eUFTZlW8fl4B1+nrf1JdbiyzfW9IqsZSY6qrdZm7TTPy5tW9X0ll IEbriFS+UesdPBmxaBfPH39aV8cKaIiYrSHFkspASQL53d21lmlyhkda4qlu+xkm2Ni6kpixX2 fseHLXOguuQkGNSOAF6iSxdp/fSmbrB8SAWxLjNjdSl6r896W7m0zdMb0hen13PuzfCytVqA3C F8U= X-IronPort-AV: E=Sophos;i="5.64,422,1559491200"; d="scan'208";a="223175147" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 24 Aug 2019 07:42:43 +0800 IronPort-SDR: GVRANIszS/aHv/mG6QESlzRBSJlPelnOSonJB4uCKvyxC+bAHwefbOOWYPMFXc5vIjCLWh9GW7 ERZZQt1l4QfJpaOEvtM9rhmPzZR5CCrCNFpLN7t+n9a0TLzQ75lfZ5Ssi6ygNUrJj1j7Ee8tsQ 2i9he7azA3QWZSkrxh0BXki5JYhK3wc5SRqABh1LC19+8aIS3e8rstybtOlDOMRFXocbN6aPqy VZVaBBS8lBB3QpeHvDrOGTPogaNwktC+h4o31lVyApyDJenQYbpbogccgFgcC5FwLk5PMN7BOZ lJ7ED7yhbg/asEpp6F59Vow+ Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2019 16:40:01 -0700 IronPort-SDR: 17qSDkOpB9QBQxWDRiMg4LRpEvOyGEAVgAmwbugyAoUKeKCVVYI5qXcqCQHla05A1cxLoix/pO P1eAmvMj6nXov637PweCWlIKyRhpe+9NfPe3EUDNd20V/G9L4qIibchfwdBiQZQKiQ6RyPJLtc YUgbfFFYVxB1CZZMZxPCbJyO6oq6VGnfM3uRvktQiyljVr94VxU2n8sv0zQLUf5YfU1JGcuysk DUgO1WCe9vQKgjvjc44+61xwH9A9gmpM03UPUVar2hRurl2Vu7qNrQ9RxX5MWqWSN34k11vxXR Z4k= WDCIronportException: Internal Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.58]) by uls-op-cesaip02.wdc.com with ESMTP; 23 Aug 2019 16:42:43 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 23 Aug 2019 16:39:03 -0700 Message-Id: <8dae4338c8938696dfcecee6e736f6b09cc82877.1566603412.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 68.232.141.245 Subject: [Qemu-devel] [PATCH v1 28/28] target/riscv: Allow enabling the Hypervisor extension X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Anup.Patel@wdc.com, palmer@sifive.com, alistair.francis@wdc.com, Atish.Patra@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu.c | 5 +++++ target/riscv/cpu.h | 1 + 2 files changed, 6 insertions(+) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 06ee551ebe..39e1c130df 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -447,6 +447,9 @@ static void riscv_cpu_realize(DeviceState *dev, Error **errp) if (cpu->cfg.ext_u) { target_misa |= RVU; } + if (cpu->cfg.ext_h) { + target_misa |= RVH; + } set_misa(env, RVXLEN | target_misa); } @@ -493,6 +496,8 @@ static Property riscv_cpu_properties[] = { DEFINE_PROP_BOOL("c", RISCVCPU, cfg.ext_c, true), DEFINE_PROP_BOOL("s", RISCVCPU, cfg.ext_s, true), DEFINE_PROP_BOOL("u", RISCVCPU, cfg.ext_u, true), + /* This is experimental so mark with 'x-' */ + DEFINE_PROP_BOOL("x-h", RISCVCPU, cfg.ext_h, false), DEFINE_PROP_BOOL("Counters", RISCVCPU, cfg.ext_counters, true), DEFINE_PROP_BOOL("Zifencei", RISCVCPU, cfg.ext_ifencei, true), DEFINE_PROP_BOOL("Zicsr", RISCVCPU, cfg.ext_icsr, true), diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index b63f1f3cdc..500496a3be 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -268,6 +268,7 @@ typedef struct RISCVCPU { bool ext_c; bool ext_s; bool ext_u; + bool ext_h; bool ext_counters; bool ext_ifencei; bool ext_icsr;