From patchwork Thu Apr 18 13:54:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 1925025 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=o9aQWyjr; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.a=rsa-sha256 header.s=20230601 header.b=rVMP8xR7; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VKzn33Fjlz1yPv for ; Thu, 18 Apr 2024 23:55:19 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=lCMZGP/fwTt0hG5can2QHUz6Rt0l9hpxiTb14mh/7JI=; b=o9aQWyjrBu1OAJ EOIGqrda/C+eo44R66DjLre/7t0oYpa8k2xhmrWAFk0d3WCtq7WyAhZlPrzbhu348qhh/48DjyRnj AUVyxQaB45JIapnpLwyofn5eqlXymE6zGBRDVruacyw9mkuE0easFC/rgbysNdxCwdpAKWMwCvc8n ix6nnxGQPIpDNl56Zw/yn+VW/PLcF0rjpu1nVzWBOyW109ESMxpX6GqAVJ5wgHl4Rux491/yeaKJz e6gw8zHlUO8YBnf1Rkbo2/8nOwTIFYEMcmXCYorWmp8EV8LW7B2o1+gHJvrqCE04zAGRuFptUK/Re 2LjQWZWX0X1/BkqXMIUg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rxSEH-00000002SQd-3Rje; Thu, 18 Apr 2024 13:55:09 +0000 Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rxSED-00000002SNF-3W5R for opensbi@lists.infradead.org; Thu, 18 Apr 2024 13:55:07 +0000 Received: by mail-wr1-x42b.google.com with SMTP id ffacd0b85a97d-349a35aba9dso159927f8f.3 for ; Thu, 18 Apr 2024 06:55:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1713448503; x=1714053303; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=lSeLUx8OobGb6CO/YYKNZsPIzJfveQ9cDBVkoluaALY=; b=rVMP8xR7EBtkIfr1CiUTyWMwDb0CVZD7aARk1ViSmKEo2hRTp5SCg1fdDKs/gB9i17 HYofAmSFTdVCt8ID6dypsM9u7st2dKt3A0pp0V9YC8E6sleeefxoZ26fUP9JdcGGLxMu HF/gwKS0xzn4uxYjmOim667SsXTw4aDpJ51VofMDZBd4GONu4BhJ0kwEEAyCyC2QTzLh z9pSOdqIrIahOCGi9dWRAFQgGE5t6o/sEFcnqAuStFIZSox2TiGoU8B2m350PvD8+CAZ 3iYP2yMkRO8JHaVhpTifmGeQVnfhKXVpvvDDPGF5SQVadZBEk1nfuR52vZmdvs5mNGos N28w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713448503; x=1714053303; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lSeLUx8OobGb6CO/YYKNZsPIzJfveQ9cDBVkoluaALY=; b=UwJ3o7NSzJJvf229pGkIYoq3Q1LKR7dbBQ/TAgW8dm8Q7FNI5Kmvhcjva9q6IHOrkX 0Wj7proSs/4+FgEA6EyXzoBREzDTqWww+jKFQYpNt3ciUhWJV35ij6h5Ih2B9gyRId5C GHNzUizgk84JaDK4GToxzs9bc8bXrfPX7z78fkWM5gG6ebuTME/UUJPFVUPjMfshs1mJ gbaFV0p8DAcpNox7djsUWoJncMQWYUcSR5UadlrQToozjP6P7Hdo6GAXX69cu5UXkG9u cNvm3oo37g3v9M3gk2YoRiFMMvNpuUG6RAs9J4YBImM2kjUHBflkUCKYjzahoqXbAwtu GbJg== X-Gm-Message-State: AOJu0Yz3khiwX+CVuLrodjNSeE2b6D/nZr8XS6od/O0ytQdXCgqf7aDt vHes6O+wdTCZ0AflGid6KSx8uHWr2NemOwrRHUOgBw7KSuNSgIr2ppfUN6eXa2LoP7GylbLD2qr mVXY= X-Google-Smtp-Source: AGHT+IH5wmGyEtJFppTqTYiNSTP042srijuDD0UHULQrAonlugkCVpXkAILs0t4+TILRRMfhQmqjvQ== X-Received: by 2002:a05:6000:d04:b0:343:7228:f715 with SMTP id dt4-20020a0560000d0400b003437228f715mr1719833wrb.0.1713448502951; Thu, 18 Apr 2024 06:55:02 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:999:a3a0:7b64:4d1d:16d8:e38b]) by smtp.gmail.com with ESMTPSA id n17-20020adfe791000000b00349be95b5cesm1875409wrm.101.2024.04.18.06.55.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Apr 2024 06:55:02 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: opensbi@lists.infradead.org, Atish Patra , Anup Patel Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Ved Shanbhogue Subject: [RFC PATCH 1/4] lib: sbi: factorize previous virtualization mode read from regs Date: Thu, 18 Apr 2024 15:54:17 +0200 Message-ID: <20240418135421.1452709-2-cleger@rivosinc.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240418135421.1452709-1-cleger@rivosinc.com> References: <20240418135421.1452709-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240418_065505_913233_AE688629 X-CRM114-Status: UNSURE ( 9.87 ) X-CRM114-Notice: Please train this message. X-Spam-Score: 0.0 (/) X-Spam-Report: =?unknown-8bit?q?Spam_detection_software=2C_running_on_the_sy?= =?unknown-8bit?q?stem_=22bombadil=2Einfradead=2Eorg=22=2C?= =?unknown-8bit?q?_has_NOT_identified_this_incoming_email_as_spam=2E__The_ori?= =?unknown-8bit?q?ginal?= =?unknown-8bit?q?_message_has_been_attached_to_this_so_you_can_view_it_or_la?= =?unknown-8bit?q?bel?= =?unknown-8bit?q?_similar_future_email=2E__If_you_have_any_questions=2C_see?= =?unknown-8bit?q?_the_administrator_of_that_system_for_details=2E?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_Content_preview=3A__The_same_pattern_is_used_at_multiple_p?= =?unknown-8bit?q?laces_to_verify_in_which?= =?unknown-8bit?q?_mode_the_exception_was_actually_taken=2E_Factorize_it=2E_S?= =?unknown-8bit?q?igned-off-by=3A_Cl=C3=A9ment?= =?unknown-8bit?q?_L=C3=A9ger_=3Ccleger=40rivosinc=2Ecom=3E_---_include/sbi/s?= =?unknown-8bit?q?bi=5Ftrap=2Eh_=7C_9_+++++++++_lib/sbi/sbi=5Femulate=5Fcsr?= =?unknown-8bit?q?=2Ec?= =?unknown-8bit?q?_=7C_12_++_lib/sbi/sbi=5Ftrap=2Ec_=7C_6_+-----_3_files_chan?= =?unknown-8bit?q?ged=2C_12_insertions=28+_=5B=2E=2E=2E=5D?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_Content_analysis_details=3A___=280=2E0_points=2C_5=2E0_req?= =?unknown-8bit?q?uired=29?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_pts_rule_name______________description?= =?unknown-8bit?q?_----_----------------------_------------------------------?= =?unknown-8bit?q?--------------------?= =?unknown-8bit?q?_-0=2E0_RCVD=5FIN=5FDNSWL=5FNONE_____RBL=3A_Sender_listed_a?= =?unknown-8bit?q?t_https=3A//www=2Ednswl=2Eorg/=2C_no?= =?unknown-8bit?q?_trust?= =?unknown-8bit?b?IFsyYTAwOjE0NTA6NDg2NDoyMDowOjA6MDo0MmIgbGlzdGVkIGluXQ==?= =?unknown-8bit?b?IFtsaXN0LmRuc3dsLm9yZ10=?= =?unknown-8bit?q?_0=2E0_SPF=5FHELO=5FNONE__________SPF=3A_HELO_does_not_publ?= =?unknown-8bit?q?ish_an_SPF_Record?= =?unknown-8bit?q?_-0=2E0_SPF=5FPASS_______________SPF=3A_sender_matches_SPF_?= =?unknown-8bit?q?record?= =?unknown-8bit?q?_-0=2E1_DKIM=5FVALID_____________Message_has_at_least_one_v?= =?unknown-8bit?q?alid_DKIM_or_DK_signature?= =?unknown-8bit?q?_0=2E1_DKIM=5FSIGNED____________Message_has_a_DKIM_or_DK_si?= =?unknown-8bit?q?gnature=2C_not_necessarily_valid?= X-BeenThere: opensbi@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "opensbi" Errors-To: opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org The same pattern is used at multiple places to verify in which mode the exception was actually taken. Factorize it. Signed-off-by: Clément Léger Reviewed-by: Anup Patel --- include/sbi/sbi_trap.h | 9 +++++++++ lib/sbi/sbi_emulate_csr.c | 12 ++---------- lib/sbi/sbi_trap.c | 6 +----- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/include/sbi/sbi_trap.h b/include/sbi/sbi_trap.h index f7c170e..b0c47ce 100644 --- a/include/sbi/sbi_trap.h +++ b/include/sbi/sbi_trap.h @@ -236,6 +236,15 @@ static inline unsigned long sbi_regs_gva(const struct sbi_trap_regs *regs) #endif } +static inline bool sbi_regs_from_virt(const struct sbi_trap_regs *regs) +{ +#if __riscv_xlen == 32 + return (regs->mstatusH & MSTATUSH_MPV) ? true : false; +#else + return (regs->mstatus & MSTATUS_MPV) ? true : false; +#endif +} + int sbi_trap_redirect(struct sbi_trap_regs *regs, const struct sbi_trap_info *trap); diff --git a/lib/sbi/sbi_emulate_csr.c b/lib/sbi/sbi_emulate_csr.c index 5f3b111..4036946 100644 --- a/lib/sbi/sbi_emulate_csr.c +++ b/lib/sbi/sbi_emulate_csr.c @@ -48,11 +48,7 @@ int sbi_emulate_csr_read(int csr_num, struct sbi_trap_regs *regs, int ret = 0; struct sbi_scratch *scratch = sbi_scratch_thishart_ptr(); ulong prev_mode = (regs->mstatus & MSTATUS_MPP) >> MSTATUS_MPP_SHIFT; -#if __riscv_xlen == 32 - bool virt = (regs->mstatusH & MSTATUSH_MPV) ? true : false; -#else - bool virt = (regs->mstatus & MSTATUS_MPV) ? true : false; -#endif + bool virt = sbi_regs_from_virt(regs); switch (csr_num) { case CSR_HTIMEDELTA: @@ -163,11 +159,7 @@ int sbi_emulate_csr_write(int csr_num, struct sbi_trap_regs *regs, { int ret = 0; ulong prev_mode = (regs->mstatus & MSTATUS_MPP) >> MSTATUS_MPP_SHIFT; -#if __riscv_xlen == 32 - bool virt = (regs->mstatusH & MSTATUSH_MPV) ? true : false; -#else - bool virt = (regs->mstatus & MSTATUS_MPV) ? true : false; -#endif + bool virt = sbi_regs_from_virt(regs); switch (csr_num) { case CSR_HTIMEDELTA: diff --git a/lib/sbi/sbi_trap.c b/lib/sbi/sbi_trap.c index b4f3a17..8bd2183 100644 --- a/lib/sbi/sbi_trap.c +++ b/lib/sbi/sbi_trap.c @@ -103,11 +103,7 @@ int sbi_trap_redirect(struct sbi_trap_regs *regs, const struct sbi_trap_info *trap) { ulong hstatus, vsstatus, prev_mode; -#if __riscv_xlen == 32 - bool prev_virt = (regs->mstatusH & MSTATUSH_MPV) ? true : false; -#else - bool prev_virt = (regs->mstatus & MSTATUS_MPV) ? true : false; -#endif + bool prev_virt = sbi_regs_from_virt(regs); /* By default, we redirect to HS-mode */ bool next_virt = false; From patchwork Thu Apr 18 13:54:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 1925027 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=selnvYC6; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.a=rsa-sha256 header.s=20230601 header.b=jqml2WpH; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VKzn4382Wz23g3 for ; Thu, 18 Apr 2024 23:55:20 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Z7UqVnzDmfip3tAHu3dk4Bozvz4WEWlA+wMGPtIbEWU=; b=selnvYC6nuPT/o 8R1uVgZMEaJ6cBch8K7/iVYiCMSlM6v72AHspKiOB7pSBeWTLHOuXsmkdaIW7uU7EfV2L0SAkMpEV oGkaQd8cGwq8tE5SntaIhWAc3siGuiUKLioVwKLnm4LsiUrikLP1FWGsQugOcemrbwLicG5bCjQwP tDR8U82LPZY0zCvKSKY0qrbyxt+vfeDyIKOucDDRa/QiiPQHGkxoTkbceHvTTrl3qxHNQps/oEtiW dHshwkFESIcMDc6Kyu5zFESlSMejYBNJPN+HgCmwYX9iFfJ+EypRTLPEllbnV+/DJhNQmjf/wt7mD m6xIPVRzK20/hths8F+g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rxSEI-00000002SRI-3ylp; Thu, 18 Apr 2024 13:55:10 +0000 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rxSEF-00000002SNo-0hzp for opensbi@lists.infradead.org; Thu, 18 Apr 2024 13:55:09 +0000 Received: by mail-wr1-x433.google.com with SMTP id ffacd0b85a97d-349a31b2babso106997f8f.2 for ; Thu, 18 Apr 2024 06:55:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1713448504; x=1714053304; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=PXkVnA+YUrqGp9mWjS5u3ax88VHeT6rkIgiHxnM0IkI=; b=jqml2WpHV9kazcIR7GMXcVaflA8ZpSVhnEl6Mcu517fRkvBrb5Qbef0fiZlxzwmQ/P XO3ue18UfPxDQayk28wiiFGmHRw1dgSRaB19TZh1nyPK+0Ud3BOdBuZ1EN3k1Mrt1anM P852JwI6OUOqNEgsDdhoZIHuWpqQt2knShcCMTuHjwlVuL/aHuY2LF+WJwkQf6W1RLgL JDezClDvH+nzfLkfsjgxHE5rwK9jotsxYc0dE20gXPJqAKmnEXCPWs5+hTHNpMPLw7OV cxjW/y2OiMojMJ4pn89RzCY1UmckP9NHKClI8GtHYd19Al42GI0ZPCsgQdysBSn2q+5k 39dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713448504; x=1714053304; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PXkVnA+YUrqGp9mWjS5u3ax88VHeT6rkIgiHxnM0IkI=; b=sDUFrw/yj0JpVwGzpdo+aQ9BH2RNsAdEOVo3Uf4thWdYaNpLMuYDwpfnG8tX6fbv53 bdgfS5OMnL8+x5z049DbMxd7ulRaFsJAOirZmk5ztG8BH+WDRj4uI7rBVMLloKXlACcL RJw02VqIxrXWQQ2NvREN/urZ11M7tp2vSiUxRAncmCd2Bgmdf4luIkkYHmgLOXRsBkC0 vtQ5SDndpzyoWIssEqlI89+h/Fw2r66v3TxM1PA3RVBnJ53ZYEwTmtorHuyXVC31qVEw P49UrjMTgnKXVvapfmvslZeZuMr84n1Ikhnn93LU/yNN6I8m1ytBp77WZHj60OWIVvhk BzZQ== X-Gm-Message-State: AOJu0YzXZ3JpSC4og2IETiQ2LvNJseKuICFNTKE8VAhTlxlyiThDz41j 0L1GJxK9e6hAMHL3Da25Ej2H5Ht2H/LqzzM7AOF6c+ObVQTUk6/PWftI7J2kkUfLLhUDfmBTZp6 vZ7A= X-Google-Smtp-Source: AGHT+IGf9k+CWa9nSxjz2xjG0yNPvRnkmF1acbU6YYZC9Nn/1Wi9+CkVX4iVc4j2r9ozt8Fd54BTAw== X-Received: by 2002:adf:f9d1:0:b0:349:ec31:8cd3 with SMTP id w17-20020adff9d1000000b00349ec318cd3mr1553617wrr.7.1713448503985; Thu, 18 Apr 2024 06:55:03 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:999:a3a0:7b64:4d1d:16d8:e38b]) by smtp.gmail.com with ESMTPSA id n17-20020adfe791000000b00349be95b5cesm1875409wrm.101.2024.04.18.06.55.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Apr 2024 06:55:03 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: opensbi@lists.infradead.org, Atish Patra , Anup Patel Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Ved Shanbhogue Subject: [RFC PATCH 2/4] lib: riscv: add Ssdbltrp support Date: Thu, 18 Apr 2024 15:54:18 +0200 Message-ID: <20240418135421.1452709-3-cleger@rivosinc.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240418135421.1452709-1-cleger@rivosinc.com> References: <20240418135421.1452709-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240418_065507_889592_A369F566 X-CRM114-Status: GOOD ( 18.48 ) X-Spam-Score: 0.0 (/) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Add Ssdbltrp trap handler support for S-mode double trap handling. If the trap is received while in VS-mode, then the trap is redirected to S-mode. If caught while in HS-mode, then a double trap SSE e [...] Content analysis details: (0.0 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:433 listed in] [list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid X-BeenThere: opensbi@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "opensbi" Errors-To: opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Add Ssdbltrp trap handler support for S-mode double trap handling. If the trap is received while in VS-mode, then the trap is redirected to S-mode. If caught while in HS-mode, then a double trap SSE event is delivered. Signed-off-by: Clément Léger --- include/sbi/riscv_encoding.h | 3 +++ include/sbi/sbi_ecall_interface.h | 1 + include/sbi/sbi_hart.h | 3 ++- include/sbi/sbi_trap_ldst.h | 2 ++ lib/sbi/objects.mk | 1 + lib/sbi/sbi_double_trap.c | 26 ++++++++++++++++++++++++++ lib/sbi/sbi_hart.c | 4 ++++ lib/sbi/sbi_sse.c | 1 + lib/sbi/sbi_trap.c | 4 ++++ 9 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 lib/sbi/sbi_double_trap.c diff --git a/include/sbi/riscv_encoding.h b/include/sbi/riscv_encoding.h index 477fa3a..8628e5a 100644 --- a/include/sbi/riscv_encoding.h +++ b/include/sbi/riscv_encoding.h @@ -32,6 +32,7 @@ #define MSTATUS_TVM _UL(0x00100000) #define MSTATUS_TW _UL(0x00200000) #define MSTATUS_TSR _UL(0x00400000) +#define MSTATUS_SDT _UL(0x01000000) #define MSTATUS32_SD _UL(0x80000000) #if __riscv_xlen == 64 #define MSTATUS_UXL _ULL(0x0000000300000000) @@ -213,6 +214,7 @@ #define ENVCFG_PBMTE (_ULL(1) << 62) #define ENVCFG_ADUE (_ULL(1) << 61) #define ENVCFG_CDE (_ULL(1) << 60) +#define ENVCFG_DTE (_ULL(1) << 59) #define ENVCFG_CBZE (_UL(1) << 7) #define ENVCFG_CBCFE (_UL(1) << 6) #define ENVCFG_CBIE_SHIFT 4 @@ -763,6 +765,7 @@ #define CAUSE_FETCH_PAGE_FAULT 0xc #define CAUSE_LOAD_PAGE_FAULT 0xd #define CAUSE_STORE_PAGE_FAULT 0xf +#define CAUSE_DOUBLE_TRAP 0x10 #define CAUSE_FETCH_GUEST_PAGE_FAULT 0x14 #define CAUSE_LOAD_GUEST_PAGE_FAULT 0x15 #define CAUSE_VIRTUAL_INST_FAULT 0x16 diff --git a/include/sbi/sbi_ecall_interface.h b/include/sbi/sbi_ecall_interface.h index 0a3b77e..fd1f93d 100644 --- a/include/sbi/sbi_ecall_interface.h +++ b/include/sbi/sbi_ecall_interface.h @@ -382,6 +382,7 @@ enum sbi_sse_state { /* SBI SSE Event IDs. */ #define SBI_SSE_EVENT_LOCAL_RAS 0x00000000 +#define SBI_SSE_EVENT_LOCAL_DOUBLE_TRAP 0x00000001 #define SBI_SSE_EVENT_LOCAL_PLAT_0_START 0x00004000 #define SBI_SSE_EVENT_LOCAL_PLAT_0_END 0x00007fff #define SBI_SSE_EVENT_GLOBAL_RAS 0x00008000 diff --git a/include/sbi/sbi_hart.h b/include/sbi/sbi_hart.h index 10dd90c..a89e6f0 100644 --- a/include/sbi/sbi_hart.h +++ b/include/sbi/sbi_hart.h @@ -65,7 +65,8 @@ enum sbi_hart_extensions { SBI_HART_EXT_SSCCFG, /** Hart has Svadu extension */ SBI_HART_EXT_SVADU, - + /** Hart has Ssdbltrp extension */ + SBI_HART_EXT_SSDBLTRP, /** Maximum index of Hart extension */ SBI_HART_EXT_MAX, }; diff --git a/include/sbi/sbi_trap_ldst.h b/include/sbi/sbi_trap_ldst.h index 8aee316..4c5cc37 100644 --- a/include/sbi/sbi_trap_ldst.h +++ b/include/sbi/sbi_trap_ldst.h @@ -28,4 +28,6 @@ int sbi_load_access_handler(struct sbi_trap_context *tcntx); int sbi_store_access_handler(struct sbi_trap_context *tcntx); +int sbi_double_trap_handler(struct sbi_trap_context *tcntx); + #endif diff --git a/lib/sbi/objects.mk b/lib/sbi/objects.mk index 211abad..88bcf10 100644 --- a/lib/sbi/objects.mk +++ b/lib/sbi/objects.mk @@ -66,6 +66,7 @@ libsbi-objs-y += sbi_bitops.o libsbi-objs-y += sbi_console.o libsbi-objs-y += sbi_domain_context.o libsbi-objs-y += sbi_domain.o +libsbi-objs-y += sbi_double_trap.o libsbi-objs-y += sbi_emulate_csr.o libsbi-objs-y += sbi_fifo.o libsbi-objs-y += sbi_fwft.o diff --git a/lib/sbi/sbi_double_trap.c b/lib/sbi/sbi_double_trap.c new file mode 100644 index 0000000..15311ee --- /dev/null +++ b/lib/sbi/sbi_double_trap.c @@ -0,0 +1,26 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2019 Western Digital Corporation or its affiliates. + * + * Authors: + * Anup Patel + */ + +#include +#include +#include +#include + +int sbi_double_trap_handler(struct sbi_trap_context *tcntx) +{ + struct sbi_trap_regs *regs = &tcntx->regs; + const struct sbi_trap_info *trap = &tcntx->trap; + bool prev_virt = sbi_regs_from_virt(regs); + + /* Exception was taken in VS-mode, redirect it to S-mode */ + if (prev_virt) + return sbi_trap_redirect(regs, trap); + + return sbi_sse_inject_event(SBI_SSE_EVENT_LOCAL_DOUBLE_TRAP); +} diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c index 6908d22..8e4b730 100644 --- a/lib/sbi/sbi_hart.c +++ b/lib/sbi/sbi_hart.c @@ -117,6 +117,9 @@ static void mstatus_init(struct sbi_scratch *scratch) menvcfg_val |= ((uint64_t)csr_read(CSR_MENVCFGH)) << 32; #endif + /* Disable double trap by default */ + menvcfg_val &= ~ENVCFG_DTE; + #define __set_menvcfg_ext(__ext, __bits) \ if (sbi_hart_has_extension(scratch, __ext)) \ menvcfg_val |= __bits; @@ -677,6 +680,7 @@ const struct sbi_hart_ext_data sbi_hart_ext[] = { __SBI_HART_EXT_DATA(sscsrind, SBI_HART_EXT_SSCSRIND), __SBI_HART_EXT_DATA(ssccfg, SBI_HART_EXT_SSCCFG), __SBI_HART_EXT_DATA(svadu, SBI_HART_EXT_SVADU), + __SBI_HART_EXT_DATA(ssdbltrp, SBI_HART_EXT_SSDBLTRP), }; _Static_assert(SBI_HART_EXT_MAX == array_size(sbi_hart_ext), diff --git a/lib/sbi/sbi_sse.c b/lib/sbi/sbi_sse.c index f0729f9..daaeb60 100644 --- a/lib/sbi/sbi_sse.c +++ b/lib/sbi/sbi_sse.c @@ -41,6 +41,7 @@ static const uint32_t supported_events[] = { SBI_SSE_EVENT_LOCAL_RAS, + SBI_SSE_EVENT_LOCAL_DOUBLE_TRAP, SBI_SSE_EVENT_GLOBAL_RAS, SBI_SSE_EVENT_LOCAL_PMU, SBI_SSE_EVENT_LOCAL_SOFTWARE, diff --git a/lib/sbi/sbi_trap.c b/lib/sbi/sbi_trap.c index 8bd2183..188f2a5 100644 --- a/lib/sbi/sbi_trap.c +++ b/lib/sbi/sbi_trap.c @@ -330,6 +330,10 @@ struct sbi_trap_context *sbi_trap_handler(struct sbi_trap_context *tcntx) rc = sbi_store_access_handler(tcntx); msg = "store fault handler failed"; break; + case CAUSE_DOUBLE_TRAP: + rc = sbi_double_trap_handler(tcntx); + msg = "double trap handler failed"; + break; default: /* If the trap came from S or U mode, redirect it there */ msg = "trap redirect failed"; From patchwork Thu Apr 18 13:54:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 1925023 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=p7tjafUD; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.a=rsa-sha256 header.s=20230601 header.b=Mi/4yV9k; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VKzn23BDxz1yPv for ; Thu, 18 Apr 2024 23:55:18 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=4p6jak43Z984fBSzGJw+4HLq2AVvo8LzYCFwjjD4eiE=; b=p7tjafUDkBprJp 9Bwz1Ss7XbqEdOVIv+bSYrRxoqZlvz02fgUmIjzEO23KZXaoVobWt5c+E5Os35rNFdua3OMFyh+mJ iDdjtpqaxZkqmunMLmywOuB0KEaIjv/dKGy2a26OGN233OA+5LcCkL58cHZuvARlHJ33t33fZRaRo cyDQz+scJ9uCGjmNU/zFYXpDAHhI5eS2oYsqwS9w0no7OQBMtk3MoIY13APoZuy1yONMYaZF3xDp+ mmD95cO4qPpDiJ6edmIwkoAGmp/xVubRFYhIBuRf5lYCm0nZaO0W9n/AwGQ41+67W21q2XeiHnVBa pA9oTxGFMCUUZDvLk3vw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rxSEI-00000002SQt-1Ows; Thu, 18 Apr 2024 13:55:10 +0000 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rxSEF-00000002SO3-1zYD for opensbi@lists.infradead.org; Thu, 18 Apr 2024 13:55:09 +0000 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-349a35aba9cso74494f8f.2 for ; Thu, 18 Apr 2024 06:55:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1713448504; x=1714053304; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=B1hQVQ10qVRS4HZ6dVC3tVBZEjZ3O6TKe1IWBi/2oX8=; b=Mi/4yV9kF4IpRJQqB2SYj/zTlmn/kYJMSq533JfgQGxy845Swin0nrrYq0uFC3tW5R vBklOD5YC35kzfYqu9QNwDlYkVhOh04Kw9fKVTcJEZBtwu9gc+wtuFzrn+EVyQxusMQN /35BSHxiGuL4vUs4gTeax0vzw1Qx4pdGzYA9rMKxO44asXdcHmDAYwKAoCA420xSKesd kSceflVYQVcBgaZXPzXIERseNySUzEBF2dSFOB/T7H/9iix4HdrqynBxURVUdMVjUfi/ T1drr8YEKk6uj0n4QYBey8/solFbHshUOEJOHRFD+GavCa3wO607t3BpLgHOPD+JkUrr DWsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713448504; x=1714053304; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=B1hQVQ10qVRS4HZ6dVC3tVBZEjZ3O6TKe1IWBi/2oX8=; b=T9CY0KdjaLk6wtd8yeYAAeZal6yX5/dtejxRs3ZyJ4Eo16c0j0GznBh1TiejEQyTDq O+Esm33g8DNVUvQSbQENO6pZ7ZiE6h+SqI2bx/8/t+2bwpSPUVEvrz2lTbBD6RsN6KFi 6nCMvz2BL8DED5ZPUc3esB7bfn28EMDtov6Pu33cdQiMST+GUGKZWb+9ISuyRHxlvIwp IMbTjgZ3oWq26H22L4IHfiz1mpciy1bpaoFRdF2SBXCsq93gl9FEX6Zg/VT6gRZMWmgV kzNvu3pz+GwYYoeEb9bmpKZOkHWGXqfbHeg3StexbPSZCTDh5Ysbcd3fWfylhIEo1b6o MZEw== X-Gm-Message-State: AOJu0YwIwYFUNT10AV2zuQ27D23nhuSPjIT474L5Y8b/thUrrj0EdbTX U9xifjo9exuWgnLTM3yJMUK1KXgljy13OpJ32VOO+9T5EVcmRCLLo6irVg6034M0VTjw1bC+4Js Unb8= X-Google-Smtp-Source: AGHT+IFCoslnlsJZmvXh8G6Et8RdZNsrw1zjNAqsxUaegNBmuRPzoXiKNwrupRGEOmbr1vMh6E/iFg== X-Received: by 2002:adf:fa41:0:b0:346:500f:9297 with SMTP id y1-20020adffa41000000b00346500f9297mr2016881wrr.2.1713448504611; Thu, 18 Apr 2024 06:55:04 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:999:a3a0:7b64:4d1d:16d8:e38b]) by smtp.gmail.com with ESMTPSA id n17-20020adfe791000000b00349be95b5cesm1875409wrm.101.2024.04.18.06.55.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Apr 2024 06:55:04 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: opensbi@lists.infradead.org, Atish Patra , Anup Patel Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Ved Shanbhogue Subject: [RFC PATCH 3/4] lib: sbi: implement SBI_FWFT_DOUBLE_TRAP_ENABLE Date: Thu, 18 Apr 2024 15:54:19 +0200 Message-ID: <20240418135421.1452709-4-cleger@rivosinc.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240418135421.1452709-1-cleger@rivosinc.com> References: <20240418135421.1452709-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240418_065507_743350_ED20ECFC X-CRM114-Status: GOOD ( 11.69 ) X-Spam-Score: 0.0 (/) X-Spam-Report: =?unknown-8bit?q?Spam_detection_software=2C_running_on_the_sy?= =?unknown-8bit?q?stem_=22bombadil=2Einfradead=2Eorg=22=2C?= =?unknown-8bit?q?_has_NOT_identified_this_incoming_email_as_spam=2E__The_ori?= =?unknown-8bit?q?ginal?= =?unknown-8bit?q?_message_has_been_attached_to_this_so_you_can_view_it_or_la?= =?unknown-8bit?q?bel?= =?unknown-8bit?q?_similar_future_email=2E__If_you_have_any_questions=2C_see?= =?unknown-8bit?q?_the_administrator_of_that_system_for_details=2E?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_Content_preview=3A__Add_support_for_double_trap_firmware_f?= =?unknown-8bit?q?eature_Signed-off-by=3A?= =?unknown-8bit?q?_Cl=C3=A9ment_L=C3=A9ger_=3Ccleger=40rivosinc=2Ecom=3E_---_?= =?unknown-8bit?q?lib/sbi/sbi=5Ffwft=2Ec_=7C_53_++++++++++++++++++++++++++++?= =?unknown-8bit?q?+++++++++++++++++-?= =?unknown-8bit?q?_1_file_changed=2C_52_insertions=28+=29=2C_1_deletion=28-?= =?unknown-8bit?q?=29_?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_Content_analysis_details=3A___=280=2E0_points=2C_5=2E0_req?= =?unknown-8bit?q?uired=29?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_pts_rule_name______________description?= =?unknown-8bit?q?_----_----------------------_------------------------------?= =?unknown-8bit?q?--------------------?= =?unknown-8bit?q?_0=2E0_SPF=5FHELO=5FNONE__________SPF=3A_HELO_does_not_publ?= =?unknown-8bit?q?ish_an_SPF_Record?= =?unknown-8bit?q?_-0=2E0_SPF=5FPASS_______________SPF=3A_sender_matches_SPF_?= =?unknown-8bit?q?record?= =?unknown-8bit?q?_-0=2E1_DKIM=5FVALID_____________Message_has_at_least_one_v?= =?unknown-8bit?q?alid_DKIM_or_DK_signature?= =?unknown-8bit?q?_0=2E1_DKIM=5FSIGNED____________Message_has_a_DKIM_or_DK_si?= =?unknown-8bit?q?gnature=2C_not_necessarily_valid?= =?unknown-8bit?q?_-0=2E0_RCVD=5FIN=5FDNSWL=5FNONE_____RBL=3A_Sender_listed_a?= =?unknown-8bit?q?t_https=3A//www=2Ednswl=2Eorg/=2C_no?= =?unknown-8bit?q?_trust?= =?unknown-8bit?b?IFsyYTAwOjE0NTA6NDg2NDoyMDowOjA6MDo0MjkgbGlzdGVkIGluXQ==?= =?unknown-8bit?b?IFtsaXN0LmRuc3dsLm9yZ10=?= X-BeenThere: opensbi@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "opensbi" Errors-To: opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Add support for double trap firmware feature Signed-off-by: Clément Léger --- lib/sbi/sbi_fwft.c | 53 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/lib/sbi/sbi_fwft.c b/lib/sbi/sbi_fwft.c index 78fbd45..965d47a 100644 --- a/lib/sbi/sbi_fwft.c +++ b/lib/sbi/sbi_fwft.c @@ -34,7 +34,7 @@ static unsigned long fwft_ptr_offset; #define MIS_DELEG (1UL << CAUSE_MISALIGNED_LOAD | 1UL << CAUSE_MISALIGNED_STORE) -#define SUPPORTED_FEATURE_COUNT 3 +#define SUPPORTED_FEATURE_COUNT 4 struct fwft_config; @@ -149,6 +149,51 @@ static int sbi_get_adue(struct fwft_config *conf, unsigned long *value) return SBI_OK; } +#if __riscv_xlen == 32 +# define CSR_MENVCFG_DBLTRP CSR_MENVCFGH +# define DBLTRP_DTE (ENVCFG_DTE >> 32) +#else +# define CSR_MENVCFG_DBLTRP CSR_MENVCFG +# define DBLTRP_DTE ENVCFG_DTE +#endif + +static int sbi_double_trap_supported(struct fwft_config *conf) +{ + if (!sbi_hart_has_extension(sbi_scratch_thishart_ptr(), + SBI_HART_EXT_SSDBLTRP)) + return SBI_ENOTSUPP; + + return SBI_OK; +} + +static int sbi_set_double_trap_enable(struct fwft_config *conf, + unsigned long value) +{ + struct sbi_scratch *scratch = sbi_scratch_thishart_ptr(); + + if (!sbi_hart_has_extension(scratch, SBI_HART_EXT_SSDBLTRP)) + return SBI_ENOTSUPP; + + if (value) + csr_set(CSR_MENVCFG_DBLTRP, DBLTRP_DTE); + else + csr_clear(CSR_MENVCFG_DBLTRP, DBLTRP_DTE); + + return SBI_SUCCESS; +} + +static int sbi_get_double_trap_enable(struct fwft_config *conf, + unsigned long *value) +{ + struct sbi_scratch *scratch = sbi_scratch_thishart_ptr(); + + if (!sbi_hart_has_extension(scratch, SBI_HART_EXT_SSDBLTRP)) + return SBI_ENOTSUPP; + + *value = (csr_read(CSR_MENVCFG_DBLTRP) & DBLTRP_DTE) != 0; + + return SBI_SUCCESS; +} static struct fwft_config* get_feature_config(enum sbi_fwft_feature_t feature) { @@ -223,6 +268,12 @@ static const struct fwft_feature features[] = .set = sbi_set_misaligned_delegation, .get = sbi_get_misaligned_delegation, }, + { + .id = SBI_FWFT_DOUBLE_TRAP, + .supported = sbi_double_trap_supported, + .set = sbi_set_double_trap_enable, + .get = sbi_get_double_trap_enable, + }, { .id = SBI_FWFT_USEED, .supported = sbi_useed_supported, From patchwork Thu Apr 18 13:54:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 1925026 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=NclhvDXE; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.a=rsa-sha256 header.s=20230601 header.b=O1LeWFuH; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VKzn34Qv6z1ymh for ; Thu, 18 Apr 2024 23:55:19 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=GU73u+Vuq+zWq1NdOWl+4qU5ufJHrUrn3/oTICijxg4=; b=NclhvDXEOCyvVa +Le/00qLRaeg7MmT9TvzAEiAy8rO7XJ33WRJKAKIUcUjzmmmAGTqA6QK1QaG6pVFRha6FbPqHptQ8 Pj5ephH9mX47DQpPTQ/5dM4I1z8YI9hEloKQ/Is9H05V0OFPBrvGg9Ch6fxvKxBmkMSNrHg1dZ9Sz pV/l1XfRivcnPqNmv4o963hvhXJ0Pe3Jz8IiliqYa7JT9Edg+eglAworjWYuBtxIHOMCGZC1bhnjP BjPaon6dpCQ6awDwpkZNg0WpigQiffq1QfYDmjSxbWMoFtgjCUzwdoFwMMD2f9IVABiDvYEInrdMs ldWkiaJPseV3mYJ2qCzQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rxSEJ-00000002SS8-3rTn; Thu, 18 Apr 2024 13:55:11 +0000 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rxSEF-00000002SOp-0w4s for opensbi@lists.infradead.org; Thu, 18 Apr 2024 13:55:09 +0000 Received: by mail-wr1-x436.google.com with SMTP id ffacd0b85a97d-34a0cc29757so85966f8f.1 for ; Thu, 18 Apr 2024 06:55:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1713448505; x=1714053305; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=XiOLkrIWkfzQVkYjAjl38Krg/Gfo8AMOLsb6hoQio9M=; b=O1LeWFuH68kxpQzbDI2pX7rDaQqjTgAEijChtxMiHuK7iscaX/4uhVOakpgMTueUe+ 3RdpiV2a6JzeHmd3fuAnQlu4F2/gt8PUqdsb6xX/jTZN719SqF7xzNfo64lNpEgKWIeM QMfdkrMupB+IqQJ/yKffeRKdWrya7OqZPzuvNXNwJKlCsdPd04GL8TNtjkYA5r1nErOU zt3YVFi/zM7Yk7v4sC4SAP+Jhul123dsdNHFC3hSfM+pClPan38o6tNthE8ne7heoSwX GjEzYTyJh3pya7UB4DCoI1U3mM+FinMboMta5lzZzuYXyjhoB/2dsoOQel8ADB174awz 1gSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713448505; x=1714053305; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XiOLkrIWkfzQVkYjAjl38Krg/Gfo8AMOLsb6hoQio9M=; b=Opu5hQge/BrUUYplH/ImHd4KGPwaTaVJV1vKIVfGnnqHW8IXu5T5fiXUPN+B6E5SJt jdYb32e+N1GTkgIMSV6fKljNJuHO3sEFoNB0KM5H7ykBANUySBYT2WZU4fCWuaeie8vZ pXCVmSZS0TOuLYWWL+wak++DzR9VQwapkJGifvqQ/F9ZwGWk9ctfuqza00YunMgxqLgU UfVGxDPQNhBr22XnCivpDN422djawLniRYF7tYqrlLu8hBWdNgk/XZ5jBUUrPA6JTm23 bE9tMZl2nwVnQtSdf+fe+aarNDVgvu8k+St9hg07MNw+7e/K4LRWnAw9lJwDufdr91IV bLoA== X-Gm-Message-State: AOJu0Yzo6ViJz/GiiVtmgD5A99g7u21/V36Ps8n+Pjy0HrOn296acCln xx+P6tfqkYMhZK/eL/myz5fcFlleBzGpiKbE/9Kqc1iOibyylXgb2vFVH0kJx4prXl4AOKTuDrg WKF0= X-Google-Smtp-Source: AGHT+IESVs+hvCw3CpFt87AAHbjOLqv9ne7EjdzGvb30v01X7pnDzKbosQmxNeTij6XsdY+RzW8Gpg== X-Received: by 2002:a5d:4c41:0:b0:346:c599:8ef3 with SMTP id n1-20020a5d4c41000000b00346c5998ef3mr1578500wrt.2.1713448505570; Thu, 18 Apr 2024 06:55:05 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:999:a3a0:7b64:4d1d:16d8:e38b]) by smtp.gmail.com with ESMTPSA id n17-20020adfe791000000b00349be95b5cesm1875409wrm.101.2024.04.18.06.55.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Apr 2024 06:55:04 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: opensbi@lists.infradead.org, Atish Patra , Anup Patel Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Ved Shanbhogue Subject: [RFC PATCH 4/4] lib: sbi: add support for the Smdbltrp extension Date: Thu, 18 Apr 2024 15:54:20 +0200 Message-ID: <20240418135421.1452709-5-cleger@rivosinc.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240418135421.1452709-1-cleger@rivosinc.com> References: <20240418135421.1452709-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240418_065507_974126_A8AD0630 X-CRM114-Status: GOOD ( 12.11 ) X-Spam-Score: 0.0 (/) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Add support for the Smdbltrp[1]. Fuirst thing to do is clearing MDT on entry after setting the first MTVEC (since MDT is reste to 1). Additionnaly, during trap handling, clear MDT once all critical CS [...] Content analysis details: (0.0 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:436 listed in] [list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid X-BeenThere: opensbi@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "opensbi" Errors-To: opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Add support for the Smdbltrp[1]. Fuirst thing to do is clearing MDT on entry after setting the first MTVEC (since MDT is reste to 1). Additionnaly, during trap handling, clear MDT once all critical CSRs have been saved and in return path, restore MSTATUS before restoring MEPC to avoid taking another trap which would clobber it. Link: https://github.com/riscv/riscv-double-trap/releases/download/v0.56/riscv-double-trap.pdf [1] Signed-off-by: Clément Léger --- firmware/fw_base.S | 29 ++++++++++++++++++++++++++--- include/sbi/riscv_encoding.h | 2 ++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/firmware/fw_base.S b/firmware/fw_base.S index 9f995a2..cd71ef4 100644 --- a/firmware/fw_base.S +++ b/firmware/fw_base.S @@ -31,6 +31,16 @@ add \__d4, \__s4, zero .endm +.macro CLEAR_MDT tmp, have_mstatush + .if \have_mstatush + li \tmp, MSTATUSH_MDT + csrc CSR_MSTATUSH, \tmp + .else + li \tmp, MSTATUS_MDT + csrc CSR_MSTATUS, \tmp + .endif +.endm + .section .entry, "ax", %progbits .align 3 .globl _start @@ -89,6 +99,13 @@ _bss_zero: lla s4, _start_hang csrw CSR_MTVEC, s4 + /* We are now ready to take a trap, clear MDT */ +#if __riscv_xlen > 32 + CLEAR_MDT t0, 0 +#else + CLEAR_MDT t0, 1 +#endif + /* Setup temporary stack */ lla s4, _fw_end li s5, (SBI_SCRATCH_SIZE * 2) @@ -555,6 +572,9 @@ memcmp: li t0, 0 .endif REG_S t0, (SBI_TRAP_REGS_SIZE + SBI_TRAP_INFO_OFFSET(gva))(sp) + + /* We are ready to take another trap, clear MDT */ + CLEAR_MDT t0, \have_mstatush .endm .macro TRAP_CALL_C_ROUTINE @@ -597,15 +617,18 @@ memcmp: .endm .macro TRAP_RESTORE_MEPC_MSTATUS have_mstatush - /* Restore MEPC and MSTATUS CSRs */ - REG_L t0, SBI_TRAP_REGS_OFFSET(mepc)(a0) - csrw CSR_MEPC, t0 + /* + * Restore MSTATUS and MEPC CSRs starting with MSTATUS to set MDT + * flags since we can not take a trap now or MEPC would be cloberred + */ REG_L t0, SBI_TRAP_REGS_OFFSET(mstatus)(a0) csrw CSR_MSTATUS, t0 .if \have_mstatush REG_L t0, SBI_TRAP_REGS_OFFSET(mstatusH)(a0) csrw CSR_MSTATUSH, t0 .endif + REG_L t0, SBI_TRAP_REGS_OFFSET(mepc)(a0) + csrw CSR_MEPC, t0 .endm .macro TRAP_RESTORE_A0_T0 diff --git a/include/sbi/riscv_encoding.h b/include/sbi/riscv_encoding.h index 8628e5a..eed28f2 100644 --- a/include/sbi/riscv_encoding.h +++ b/include/sbi/riscv_encoding.h @@ -42,12 +42,14 @@ #define MSTATUS_GVA _ULL(0x0000004000000000) #define MSTATUS_GVA_SHIFT 38 #define MSTATUS_MPV _ULL(0x0000008000000000) +#define MSTATUS_MDT _ULL(0x0000200000000000) #else #define MSTATUSH_SBE _UL(0x00000010) #define MSTATUSH_MBE _UL(0x00000020) #define MSTATUSH_GVA _UL(0x00000040) #define MSTATUSH_GVA_SHIFT 6 #define MSTATUSH_MPV _UL(0x00000080) +#define MSTATUSH_MDT _UL(0x00002000) #endif #define MSTATUS32_SD _UL(0x80000000) #define MSTATUS64_SD _ULL(0x8000000000000000)