From patchwork Mon Jun 17 15:41:01 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: 1948674 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=FZOMp3FE; 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=AHoqdwNZ; 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 4W2vHv2wkMz20Z6 for ; Tue, 18 Jun 2024 01:41:29 +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=M0cyP80fBusdq4ARr4GXmAiQlMasTdG/n4DcQVqWdYc=; b=FZOMp3FECmj3n0 ntxz9A+VOlw3Uoh/8UAQyccaTHcVkLGzIBkmKBwuT55J9dzntF90D/ULlv2PuVY7hIcTBtg8Df4eK z+8EfbnjjgSmHSjYVrKwfTCbJRI5zXPHPw7MdijGaRvRuBAYKF6QwC/7O/Kh7T4YvpNL1bK7gq1Ak mt7+0MTiwz2kEMAD6VeXS+kh12fM0sUN3gXln/h+b65p2/PJSydyazRgfdTu/MUX2G9dAF5QgbJMI BMbGbi+pdCmsxTZ1Sad80CsgIluZ8arOFX0/uQVW/dOCfFZJfB3tTpaZ2oqFbXiJZrzcNFhvBaEGC 5KDt5rKM/VetB31Nlndw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sJETw-0000000BWnu-00iq; Mon, 17 Jun 2024 15:41:20 +0000 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sJETs-0000000BWlL-1Bxy for opensbi@lists.infradead.org; Mon, 17 Jun 2024 15:41:18 +0000 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-421de6e748aso3129655e9.2 for ; Mon, 17 Jun 2024 08:41:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1718638874; x=1719243674; 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=xEMR8WKfAgBTxBOGettlJE7DC16RBC31jO6w80JjFko=; b=AHoqdwNZi4hmju1cL7LVfZbfMThEI/AOuxTmB12SCbtrwwzH4y23IZN2OvHUfgz5US LWsh8owbf5EzBcuDtKFDCLwyxR4kkn/x7QqVE1Robv+CUCz9bZGei4E1I8CQFrNKrmm5 e9glqqwzA7qC0vf51PlbputCcjn8aGV1zOX4LBdfXMMpdaY98nYlWA1cXVg9f5+CcDvX axqAm43g7cYGAYFZxydWlj2Twfft6Y4DuKgb309pBTOo7mybhJHE0DbUgqckgbBr/eLo g4e2f45QM+HuO7RXzhuprD3tyDyyru3dKzxvQhjQk3KeF6GVUp+EzIMWCyakp1ww/O0G ZJVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718638874; x=1719243674; 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=xEMR8WKfAgBTxBOGettlJE7DC16RBC31jO6w80JjFko=; b=AJuc+qtX6f47hrYSESy1beex7cI1Qx7WVB5iygbRLA7NuQtjctP/rZgdTZhZL13aWX jlkJ+icYIqXDzkGe3gtCU+FZN3EFPvYJ3bVN9VqLQuSjXrdwYuw01DzqcoWAP+4lK8tu iVzwFXIqVLhP2TfRw87wjRAJwwOCOgoajwvFaJeHhzgPvH99epYH9v5THybe6Rhn/vwM 6AU9Iyb+VI3CYvCQLtplxdc0V+bXPO8qANX9M9iFSwCzSv2ookHCalzqLWblzGCenL8Q 01ngTA/uAWe78FD/OuLEsPfEUcAFQmZjy8wU9/BDfQg8FvRf9nSiSrgQBRkybMZamaHC Fh8A== X-Gm-Message-State: AOJu0Yynwdm1B9tJIubCdUOQDooQHC83keftDTLuNf+4+iXNmMaDmsMI k8SGK3IvjowFArrctPGmhM/7eOyDxCHVb2rlEFbmdOwaSuVcVKs5VYUuFBYlOB8jXPUnmD4nvSH vqdo= X-Google-Smtp-Source: AGHT+IEJw4EF3vP8X51nut02K9x7SCRadizewyFOki8XLksKOw48Q2uBc2Gcn7jH6BrfMiIjRYTyTQ== X-Received: by 2002:a1c:4b05:0:b0:423:573:ab2a with SMTP id 5b1f17b1804b1-4230573af35mr66879885e9.0.1718638874252; Mon, 17 Jun 2024 08:41:14 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:999:a3a0:9f43:3ca4:162c:d540]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-36075104d88sm12097923f8f.104.2024.06.17.08.41.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Jun 2024 08:41:13 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: opensbi@lists.infradead.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Anup Patel , Atish Patra Subject: [PATCH v2 1/4] lib: sbi: add support for firmware features extension Date: Mon, 17 Jun 2024 17:41:01 +0200 Message-ID: <20240617154110.4007865-2-cleger@rivosinc.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240617154110.4007865-1-cleger@rivosinc.com> References: <20240617154110.4007865-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240617_084116_575537_FBA1C500 X-CRM114-Status: GOOD ( 20.47 ) 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__This_extension_allows_the_software_run?= =?unknown-8bit?q?ning_in_supervisor_mode?= =?unknown-8bit?q?_to_control_the_behavior_of_various_features_of_the_SBI_=5B?= =?unknown-8bit?q?1=5D=2E_Implement_the?= =?unknown-8bit?q?_support_for_such_extension=2E_Link=3A_https=3A//lists=2Eri?= =?unknown-8bit?q?scv=2Eorg/g/tech-prs/message/924?= =?unknown-8bit?q?_=5B1=5D_Signed-off-by=3A_Cl=C3=A9ment_L=C3=A9ger_=3Ccleger?= =?unknown-8bit?q?=40rivosinc=2Ecom=3E_---_include/sbi/sbi=5Fecall=5Finterfa?= =?unknown-8bit?q?ce=2Eh?= =?unknown-8bit?q?_=7C_27_+++++_include/sbi/sbi=5Ffwft=2Eh_=7C_23_++++_lib/sb?= =?unknown-8bit?q?i/_=5B=2E=2E=2E=5D_?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_Content_analysis_details=3A___=28-0=2E0_points=2C_5=2E0_re?= =?unknown-8bit?q?quired=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?IFsyYTAwOjE0NTA6NDg2NDoyMDowOjA6MDozMmQgbGlzdGVkIGluXQ==?= =?unknown-8bit?b?IFtsaXN0LmRuc3dsLm9yZ10=?= =?unknown-8bit?q?_-0=2E0_T=5FSCC=5FBODY=5FTEXT=5FLINE___No_description_avail?= =?unknown-8bit?q?able=2E?= 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 This extension allows the software running in supervisor mode to control the behavior of various features of the SBI [1]. Implement the support for such extension. Link: https://lists.riscv.org/g/tech-prs/message/924 [1] Signed-off-by: Clément Léger Reviewed-by: Anup Patel --- include/sbi/sbi_ecall_interface.h | 27 +++++ include/sbi/sbi_fwft.h | 23 ++++ lib/sbi/objects.mk | 1 + lib/sbi/sbi_fwft.c | 178 ++++++++++++++++++++++++++++++ lib/sbi/sbi_init.c | 11 ++ 5 files changed, 240 insertions(+) create mode 100644 include/sbi/sbi_fwft.h create mode 100644 lib/sbi/sbi_fwft.c diff --git a/include/sbi/sbi_ecall_interface.h b/include/sbi/sbi_ecall_interface.h index 2600b66..e9a8167 100644 --- a/include/sbi/sbi_ecall_interface.h +++ b/include/sbi/sbi_ecall_interface.h @@ -34,6 +34,7 @@ #define SBI_EXT_CPPC 0x43505043 #define SBI_EXT_DBTR 0x44425452 #define SBI_EXT_SSE 0x535345 +#define SBI_EXT_FWFT 0x46574654 /* SBI function IDs for BASE extension*/ #define SBI_EXT_BASE_GET_SPEC_VERSION 0x0 @@ -117,6 +118,32 @@ #define SBI_EXT_DBTR_TRIGGER_ENABLE 0x6 #define SBI_EXT_DBTR_TRIGGER_DISABLE 0x7 +/* SBI function IDs for FW feature extension */ +#define SBI_EXT_FWFT_SET 0x0 +#define SBI_EXT_FWFT_GET 0x1 + +enum sbi_fwft_feature_t { + SBI_FWFT_MISALIGNED_EXC_DELEG = 0x0, + SBI_FWFT_LANDING_PAD = 0x1, + SBI_FWFT_SHADOW_STACK = 0x2, + SBI_FWFT_DOUBLE_TRAP = 0x3, + SBI_FWFT_PTE_AD_HW_UPDATING = 0x4, + SBI_FWFT_LOCAL_RESERVED_START = 0x5, + SBI_FWFT_LOCAL_RESERVED_END = 0x3fffffff, + SBI_FWFT_LOCAL_PLATFORM_START = 0x40000000, + SBI_FWFT_LOCAL_PLATFORM_END = 0x7fffffff, + + SBI_FWFT_GLOBAL_RESERVED_START = 0x80000000, + SBI_FWFT_GLOBAL_RESERVED_END = 0xbfffffff, + SBI_FWFT_GLOBAL_PLATFORM_START = 0xc0000000, + SBI_FWFT_GLOBAL_PLATFORM_END = 0xffffffff, +}; + +#define SBI_FWFT_GLOBAL_FEATURE_BIT (1 << 31) +#define SBI_FWFT_PLATFORM_FEATURE_BIT (1 << 30) + +#define SBI_FWFT_SET_FLAG_LOCK (1 << 0) + /** General pmu event codes specified in SBI PMU extension */ enum sbi_pmu_hw_generic_events_t { SBI_PMU_HW_NO_EVENT = 0, diff --git a/include/sbi/sbi_fwft.h b/include/sbi/sbi_fwft.h new file mode 100644 index 0000000..2148820 --- /dev/null +++ b/include/sbi/sbi_fwft.h @@ -0,0 +1,23 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2024 Rivos Inc. + * + * Authors: + * Clément Léger + */ + +#ifndef __SBI_FW_FEATURE_H__ +#define __SBI_FW_FEATURE_H__ + +#include + +struct sbi_scratch; + +int sbi_fwft_set(enum sbi_fwft_feature_t feature, unsigned long value, + unsigned long flags); +int sbi_fwft_get(enum sbi_fwft_feature_t feature, unsigned long *out_val); + +int sbi_fwft_init(struct sbi_scratch *scratch, bool cold_boot); + +#endif diff --git a/lib/sbi/objects.mk b/lib/sbi/objects.mk index b1c4a50..221e72c 100644 --- a/lib/sbi/objects.mk +++ b/lib/sbi/objects.mk @@ -65,6 +65,7 @@ libsbi-objs-y += sbi_domain_context.o libsbi-objs-y += sbi_domain.o libsbi-objs-y += sbi_emulate_csr.o libsbi-objs-y += sbi_fifo.o +libsbi-objs-y += sbi_fwft.o libsbi-objs-y += sbi_hart.o libsbi-objs-y += sbi_heap.o libsbi-objs-y += sbi_math.o diff --git a/lib/sbi/sbi_fwft.c b/lib/sbi/sbi_fwft.c new file mode 100644 index 0000000..b302b5d --- /dev/null +++ b/lib/sbi/sbi_fwft.c @@ -0,0 +1,178 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2024 Rivos Inc. + * + * Authors: + * Clément Léger + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +/** Offset of pointer to FWFT HART state in scratch space */ +static unsigned long fwft_ptr_offset; + +#define fwft_get_hart_state_ptr(__scratch) \ + sbi_scratch_read_type((__scratch), void *, fwft_ptr_offset) + +#define fwft_thishart_state_ptr() \ + fwft_get_hart_state_ptr(sbi_scratch_thishart_ptr()) + +#define fwft_set_hart_state_ptr(__scratch, __phs) \ + sbi_scratch_write_type((__scratch), void *, fwft_ptr_offset, (__phs)) + +struct fwft_config; + +struct fwft_feature { + enum sbi_fwft_feature_t id; + int (*supported)(struct fwft_config *conf); + int (*set)(struct fwft_config *conf, unsigned long value); + int (*get)(struct fwft_config *conf, unsigned long *value); +}; + +struct fwft_config { + const struct fwft_feature *feature; + unsigned long flags; +}; + +struct fwft_hart_state { + unsigned int config_count; + struct fwft_config configs[]; +}; + +static const unsigned long fwft_defined_features[] = { + SBI_FWFT_MISALIGNED_EXC_DELEG, + SBI_FWFT_LANDING_PAD, + SBI_FWFT_SHADOW_STACK, + SBI_FWFT_DOUBLE_TRAP, + SBI_FWFT_PTE_AD_HW_UPDATING, +}; + +static bool fwft_is_defined_feature(enum sbi_fwft_feature_t feature) +{ + int i; + + for (i = 0; i < array_size(fwft_defined_features); i++) { + if (fwft_defined_features[i] == feature) + return true; + } + + return false; +} + +static struct fwft_config* get_feature_config(enum sbi_fwft_feature_t feature) +{ + int i; + struct fwft_hart_state *fhs = fwft_thishart_state_ptr(); + + if (feature & SBI_FWFT_GLOBAL_FEATURE_BIT) + return NULL; + + for (i = 0; i < fhs->config_count; i++){ + if (feature == fhs->configs[i].feature->id) + return &fhs->configs[i]; + } + + return NULL; +} + +static int fwft_get_feature(enum sbi_fwft_feature_t feature, + struct fwft_config **conf) +{ + int ret; + struct fwft_config *tconf; + + tconf = get_feature_config(feature); + if (!tconf) { + if (fwft_is_defined_feature(feature)) + return SBI_ENOTSUPP; + + return SBI_EDENIED; + } + + if (tconf->feature->supported) { + ret = tconf->feature->supported(tconf); + if (ret) + return ret; + } + *conf = tconf; + + return SBI_SUCCESS; +} + +int sbi_fwft_set(enum sbi_fwft_feature_t feature, unsigned long value, + unsigned long flags) +{ + int ret; + struct fwft_config *conf; + + ret = fwft_get_feature(feature, &conf); + if (ret) + return ret; + + if ((flags & ~SBI_FWFT_SET_FLAG_LOCK) != 0) + return SBI_ERR_INVALID_PARAM; + + if (conf->flags & SBI_FWFT_SET_FLAG_LOCK) + return SBI_EDENIED; + + ret = conf->feature->set(conf, value); + if (ret) + return ret; + + conf->flags = flags; + + return SBI_OK; +} + +int sbi_fwft_get(enum sbi_fwft_feature_t feature, unsigned long *out_val) +{ + int ret; + struct fwft_config *conf; + + ret = fwft_get_feature(feature, &conf); + if (ret) + return ret; + + return conf->feature->get(conf, out_val); +} + +static const struct fwft_feature features[] = {}; + +int sbi_fwft_init(struct sbi_scratch *scratch, bool cold_boot) +{ + int i; + struct fwft_hart_state *fhs; + + if (cold_boot) { + fwft_ptr_offset = sbi_scratch_alloc_type_offset(void *); + if (!fwft_ptr_offset) + return SBI_ENOMEM; + } + + fhs = fwft_get_hart_state_ptr(scratch); + if (!fhs) { + fhs = sbi_zalloc(sizeof(fhs) + array_size(features) * sizeof(struct fwft_config)); + if (!fhs) + return SBI_ENOMEM; + + fhs->config_count = array_size(features); + for (i = 0; i < array_size(features); i++) + fhs->configs[i].feature = &features[i]; + + fwft_set_hart_state_ptr(scratch, fhs); + } + + return 0; +} diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c index 389172a..0f9e14c 100644 --- a/lib/sbi/sbi_init.c +++ b/lib/sbi/sbi_init.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -308,6 +309,12 @@ static void __noreturn init_coldboot(struct sbi_scratch *scratch, u32 hartid) sbi_hart_hang(); } + rc = sbi_fwft_init(scratch, true); + if (rc) { + sbi_printf("%s: fwft init failed (error %d)\n", __func__, rc); + sbi_hart_hang(); + } + /* * Note: Finalize domains after HSM initialization so that we * can startup non-root domains. @@ -423,6 +430,10 @@ static void __noreturn init_warm_startup(struct sbi_scratch *scratch, if (rc) sbi_hart_hang(); + rc = sbi_fwft_init(scratch, false); + if (rc) + sbi_hart_hang(); + rc = sbi_platform_final_init(plat, false); if (rc) sbi_hart_hang(); From patchwork Mon Jun 17 15:41:02 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: 1948675 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=bReMDDaF; 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=JKuHGCVz; 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 4W2vJF20cPz20KL for ; Tue, 18 Jun 2024 01:41:49 +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=4Kz9Bito3XAKowXKnDVIVe1kPuFm+nIBOPMZsvRR71c=; b=bReMDDaFBKqmF0 Y44T7tyIDYJJH2xK+ryYZIsID1fOiLiCUKuoJ/7znSU0dJCUwyiqB6QUi+O5nrJdvgr7HzwhGfJI+ il2BVUpeiW9azxoMmevjy24GWDl4MRkX97XySV9ObSpc/7zbEKSQsliujAXmr0rY91PCPiT7kh+n4 UZfunWfWuONnKkHE2TEVwilvLLWwCIKIYJKmRqxgOEYJP8Op+CXSD96oUgQFPSb5enIBz+doqkhPE j2t9GSmV8L4jhKrPoWuOXjabulwThzsDMyYfT1nvkJdgVR+tP6J0+TBvYovDI0o7TQonC5ZliGA3v ikrkXTkq6++eJDZp71dg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sJEUG-0000000BWxM-48Og; Mon, 17 Jun 2024 15:41:40 +0000 Received: from mail-ej1-x634.google.com ([2a00:1450:4864:20::634]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sJEUE-0000000BWvG-1Mae for opensbi@lists.infradead.org; Mon, 17 Jun 2024 15:41:40 +0000 Received: by mail-ej1-x634.google.com with SMTP id a640c23a62f3a-a6f2f5ad1d1so31931166b.1 for ; Mon, 17 Jun 2024 08:41:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1718638896; x=1719243696; 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=XrtkknkD7ZsY20aY+1W+NOqr3PyEBJNio5mr92p4au8=; b=JKuHGCVzD/P04tuv8qe1p4dGdDlHek173iq/Pd2t8KDj8SZID6mDrkNri2Cx39ZBii POs9j8tkzAKbeu/WYH0tReNZy0PFNEDfDUe9AtpPC0QbVHTahK5J/Rs2zTTEqJPhsTvJ WkU62KzNMvnYAmjU6+f2PK7x7GPBTIPMzJ0TFztBfWfjh0LMynu6HKipRpDsjaK+ZHpY KPiXNuyb236aXJLuTGCfq3Zx1z3PZzcS7BLs1x1olDJeYJP1iZf6zp0zG8eXav5wdCGE nyceZWbCUpiADug+8BRXEBWaXbpvlZb7qyiucJJy9aA1xjGbDtRa0D2ZwEEDYvcwLWp/ 9QNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718638896; x=1719243696; 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=XrtkknkD7ZsY20aY+1W+NOqr3PyEBJNio5mr92p4au8=; b=vAsXduT2HkIzL0KlCfvK8bv/Y7NRcbk9shLo12BYHuTggXwbdpjPG/+D7iWoUg7NYz VGzvILnJ/ZV2KE7aAsMX1QMC2GoXxdbWE2W3uCS/uNwmORTCBUD59TPXGjeqwN2/NDb4 svkvgBMEycy4cDWM4rng2AgimzPZV30GJ+P11qUL2SMQzbIQtEcW52WRZ2QVj8ZwHpBx Neok/yEwe9g5xsWA2AACQwD3j0/G5k8VlF4eKRcC7chwtgLOhv+C0A2yyBVQwxH2lVCL HdQjqKd0uXhbo8nCK9MqKSM1GLUez5aNv0Pk3ns8Wn8zy+ZeRi1Qz83xtYgJDLUefkUs /gQQ== X-Gm-Message-State: AOJu0YyTg5NUL3x1cDtUEjl+kzQfKuS/8by2lHOFFIsuNRE5kkVj00yk jAHrHx+biliTlGGMQG7/+7qTBvb5qqjE7PU29nn+39vb07pecY5lfcYAqSLVEdQo0TgIT0WFgpV LBGU= X-Google-Smtp-Source: AGHT+IH+Krh0pDfOErQPn5rMfJvdmAVMeEqTcq3KqxeHlqbcmL5HamMW9npdPYixH5JhIqQ9nkM4jA== X-Received: by 2002:a05:6000:2ad:b0:35f:1edb:4695 with SMTP id ffacd0b85a97d-3607a79f435mr7141190f8f.6.1718638875158; Mon, 17 Jun 2024 08:41:15 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:999:a3a0:9f43:3ca4:162c:d540]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-36075104d88sm12097923f8f.104.2024.06.17.08.41.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Jun 2024 08:41:14 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: opensbi@lists.infradead.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Anup Patel , Atish Patra Subject: [PATCH v2 2/4] lib: sbi: fwft: add support for SBI_FWFT_MISALIGNED_EXC_DELEG Date: Mon, 17 Jun 2024 17:41:02 +0200 Message-ID: <20240617154110.4007865-3-cleger@rivosinc.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240617154110.4007865-1-cleger@rivosinc.com> References: <20240617154110.4007865-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240617_084138_451113_E77FCD2F X-CRM114-Status: GOOD ( 12.60 ) 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_SBI=5FFWFT=5FMISALIGNE?= =?unknown-8bit?q?D=5FEXC=5FDELEG_withing_FWFT?= =?unknown-8bit?q?_support=2E_This_support_allows_to_delegate_misaligned_acce?= =?unknown-8bit?q?sses_traps=2E_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_39_++++++++++++++++++++++++++++?= =?unknown-8bit?q?++++++++++-?= =?unknown-8bit?q?_lib/sbi/sbi=5Fhsm=2Ec_=7C_3_+++_2_files_changed=2C_41_inse?= =?unknown-8bit?q?rtions=28+=29=2C_1_deletion=28-=29?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_Content_analysis_details=3A___=28-0=2E0_points=2C_5=2E0_re?= =?unknown-8bit?q?quired=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?IFsyYTAwOjE0NTA6NDg2NDoyMDowOjA6MDo2MzQgbGlzdGVkIGluXQ==?= =?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?= =?unknown-8bit?q?_-0=2E0_T=5FSCC=5FBODY=5FTEXT=5FLINE___No_description_avail?= =?unknown-8bit?q?able=2E?= 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 SBI_FWFT_MISALIGNED_EXC_DELEG withing FWFT support. This support allows to delegate misaligned accesses traps. Signed-off-by: Clément Léger --- lib/sbi/sbi_fwft.c | 39 ++++++++++++++++++++++++++++++++++++++- lib/sbi/sbi_hsm.c | 3 +++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/lib/sbi/sbi_fwft.c b/lib/sbi/sbi_fwft.c index b302b5d..289a344 100644 --- a/lib/sbi/sbi_fwft.c +++ b/lib/sbi/sbi_fwft.c @@ -32,6 +32,8 @@ static unsigned long fwft_ptr_offset; #define fwft_set_hart_state_ptr(__scratch, __phs) \ sbi_scratch_write_type((__scratch), void *, fwft_ptr_offset, (__phs)) +#define MIS_DELEG (1UL << CAUSE_MISALIGNED_LOAD | 1UL << CAUSE_MISALIGNED_STORE) + struct fwft_config; struct fwft_feature { @@ -71,6 +73,33 @@ static bool fwft_is_defined_feature(enum sbi_fwft_feature_t feature) return false; } +static int fwft_misaligned_delegation_supported(struct fwft_config *conf) +{ + if (!misa_extension('S')) + return SBI_ENOTSUPP; + + return SBI_OK; +} + +static int fwft_set_misaligned_delegation(struct fwft_config *conf, + unsigned long value) +{ + if (value) + csr_set(CSR_MEDELEG, MIS_DELEG); + else + csr_clear(CSR_MEDELEG, MIS_DELEG); + + return SBI_OK; +} + +static int fwft_get_misaligned_delegation(struct fwft_config *conf, + unsigned long *value) +{ + *value = (csr_read(CSR_MEDELEG) & MIS_DELEG) != 0; + + return SBI_OK; +} + static struct fwft_config* get_feature_config(enum sbi_fwft_feature_t feature) { int i; @@ -148,7 +177,15 @@ int sbi_fwft_get(enum sbi_fwft_feature_t feature, unsigned long *out_val) return conf->feature->get(conf, out_val); } -static const struct fwft_feature features[] = {}; +static const struct fwft_feature features[] = +{ + { + .id = SBI_FWFT_MISALIGNED_EXC_DELEG, + .supported = fwft_misaligned_delegation_supported, + .set = fwft_set_misaligned_delegation, + .get = fwft_get_misaligned_delegation, + }, +}; int sbi_fwft_init(struct sbi_scratch *scratch, bool cold_boot) { diff --git a/lib/sbi/sbi_hsm.c b/lib/sbi/sbi_hsm.c index be48d64..47edab2 100644 --- a/lib/sbi/sbi_hsm.c +++ b/lib/sbi/sbi_hsm.c @@ -44,6 +44,7 @@ struct sbi_hsm_data { unsigned long suspend_type; unsigned long saved_mie; unsigned long saved_mip; + unsigned long saved_hedeleg; atomic_t start_ticket; }; @@ -417,6 +418,7 @@ void __sbi_hsm_suspend_non_ret_save(struct sbi_scratch *scratch) hdata->saved_mie = csr_read(CSR_MIE); hdata->saved_mip = csr_read(CSR_MIP) & (MIP_SSIP | MIP_STIP); + hdata->saved_hedeleg = csr_read(CSR_HEDELEG); } static void __sbi_hsm_suspend_non_ret_restore(struct sbi_scratch *scratch) @@ -424,6 +426,7 @@ static void __sbi_hsm_suspend_non_ret_restore(struct sbi_scratch *scratch) struct sbi_hsm_data *hdata = sbi_scratch_offset_ptr(scratch, hart_data_offset); + csr_write(CSR_HEDELEG, hdata->saved_hedeleg); csr_write(CSR_MIE, hdata->saved_mie); csr_set(CSR_MIP, (hdata->saved_mip & (MIP_SSIP | MIP_STIP))); } From patchwork Mon Jun 17 15:41:03 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: 1948676 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=aejoKhr9; 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=fBZ8rSQ/; 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 4W2vJJ5psWz20KL for ; Tue, 18 Jun 2024 01:41:52 +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=22Mw01OFtW5Qp2k5bn2iTIMdnuN2PfPS5paKbeb87yc=; b=aejoKhr9ZV5S8H B+glTetiZ3o7vEdQDA9w5GGIOdNBR/BxmEcJCG9I56LFsz7uYbryl/9Ka5FuXcELMLcalqzzc//Ju LxsN/ss6g31/aBCwXkbcKk/SH2YsTEMtmzk0u6URFRha/ZxAj90uSfRqOEPHglY0x3AEgyQNe4d9t 7QYRnXPGmLzb28dFhEhB4qCoNofAxJF9Xsw8u8VREgk/SvXWcVhfgc1N71ylPG5ABvxYMRa0l+lwX XeoZ6Kb0Vr/pQlmQckK0em3JBg/b3dzAzcl0esZqCQTqEOKdT/fkkr4GwcevsWc+RGmT1+Rw7csQN tHuR5C0wQoOkBCFKy8Lw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sJEUJ-0000000BWz9-1R40; Mon, 17 Jun 2024 15:41:43 +0000 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sJEUE-0000000BWvJ-2i5t for opensbi@lists.infradead.org; Mon, 17 Jun 2024 15:41:40 +0000 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-422948b9140so3252875e9.1 for ; Mon, 17 Jun 2024 08:41:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1718638896; x=1719243696; 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=nCqz8wZ/EPOxH7itOELZyIbPBq2giEg5HU86z2gB+RU=; b=fBZ8rSQ/iPEiRsGscHz5vjEAnsRlnMthUd/kqLteNDZ2kGWCJfPsZXFxBilfC8clp/ T6GAluQU5raBnh4P4c+XK3Tw0tLoVLZApkPYLoG6iymNmxNB7vdKS7BK0/aZiJ9ZYy/+ vyQYhy/QmuaG9WW1QN8x2aJcYlNxVXp+kP8jRYs5G0bSICzsqyr6V1yiLJFwg96hqoBz 1H1zur217ck/ZYyipMTQsoY80FywLwX8ORAbFRTXFjO5k3aLZxChbNHuvGvYUjwKPYzy B91uGpvUR5/gJx1eUFFR1yvOl60HP6zqu57DyX1HFVHK96pRxhzmFkdiXwIoQ0dcZVbr M8Ow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718638896; x=1719243696; 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=nCqz8wZ/EPOxH7itOELZyIbPBq2giEg5HU86z2gB+RU=; b=g5qMZ+SKwkEBxbQx2UOFlRbyhf0sZWtbguHdVYtyB+yyAMSl9R+5MEWs+MlD8WNsx0 2OlmskFawuJgvmzdE/OuEusT/tBGIfIF2PKbr2uRzgLyq21EM6RV6RPDru0yA8CbKueI J7pPAU5OrjfnERwJAwt/EBQNxtMR0p9ZDOxROx+jHn8pALMMIMGeihSPwGTPUC+tA6pe XKJBUziS0sgQa51f6sroh2aQAsfXCd+vJW922rSCASNcbA66OypTYGjKjSq5WQ2XCinT azhIokoxiYVIXIJvNVZtbxgzY1LIK3dQwlWdCS7t60uLGnvM++YA8+V2iWJAdceGfuoT eiCw== X-Gm-Message-State: AOJu0YwXy2MkTYSCL3dinTY8g/r9DWq1aHYkaZiHkE9DnvayDCK+zfYB 8l0JN4WZNwDO8DwP4jrq63sdtQPVZf4yLQDVQBzHU7Ttv+TWhLg2MUNCVPtJ3Fg3DI0BUJdFhfy OBag= X-Google-Smtp-Source: AGHT+IFARrHtxLo9c2jksa9gguvId2+SbKjaL4RksXn5rjgKiWoWI2h78KkOpUp2wZciS5CxY6jXJQ== X-Received: by 2002:a5d:6c69:0:b0:35f:2929:8460 with SMTP id ffacd0b85a97d-3607a791438mr7194976f8f.3.1718638875914; Mon, 17 Jun 2024 08:41:15 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:999:a3a0:9f43:3ca4:162c:d540]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-36075104d88sm12097923f8f.104.2024.06.17.08.41.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Jun 2024 08:41:15 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: opensbi@lists.infradead.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Anup Patel , Atish Patra Subject: [PATCH v2 3/4] lib: sbi: fwft: add support for SBI_FWFT_PTE_AD_HW_UPDATING Date: Mon, 17 Jun 2024 17:41:03 +0200 Message-ID: <20240617154110.4007865-4-cleger@rivosinc.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240617154110.4007865-1-cleger@rivosinc.com> References: <20240617154110.4007865-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240617_084138_919690_60804BF2 X-CRM114-Status: GOOD ( 11.44 ) 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_SBI=5FFWFT=5FPTE=5FAD?= =?unknown-8bit?q?=5FHW=5FUPDATING_based_on_SVADU?= =?unknown-8bit?q?_presence=2E_Signed-off-by=3A_Cl=C3=A9ment_L=C3=A9ger_=3Ccl?= =?unknown-8bit?q?eger=40rivosinc=2Ecom=3E_---_lib/sbi/sbi=5Ffwft=2Ec?= =?unknown-8bit?q?_=7C_46_++++++++++++++++++++++++++++++++++++++++++++++_lib/?= =?unknown-8bit?q?sbi/sbi=5Fhsm=2Ec_=7C_12?= =?unknown-8bit?q?_++++++++++++_2_files_changed=2C_58_insertions=28+=29_?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_Content_analysis_details=3A___=28-0=2E0_points=2C_5=2E0_re?= =?unknown-8bit?q?quired=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?IFsyYTAwOjE0NTA6NDg2NDoyMDowOjA6MDozMzMgbGlzdGVkIGluXQ==?= =?unknown-8bit?b?IFtsaXN0LmRuc3dsLm9yZ10=?= =?unknown-8bit?q?_-0=2E0_T=5FSCC=5FBODY=5FTEXT=5FLINE___No_description_avail?= =?unknown-8bit?q?able=2E?= 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 SBI_FWFT_PTE_AD_HW_UPDATING based on SVADU presence. Signed-off-by: Clément Léger Reviewed-by: Anup Patel --- lib/sbi/sbi_fwft.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ lib/sbi/sbi_hsm.c | 12 ++++++++++++ 2 files changed, 58 insertions(+) diff --git a/lib/sbi/sbi_fwft.c b/lib/sbi/sbi_fwft.c index 289a344..3fbfb90 100644 --- a/lib/sbi/sbi_fwft.c +++ b/lib/sbi/sbi_fwft.c @@ -100,6 +100,46 @@ static int fwft_get_misaligned_delegation(struct fwft_config *conf, return SBI_OK; } +static int fwft_adue_supported(struct fwft_config *conf) +{ + if (!sbi_hart_has_extension(sbi_scratch_thishart_ptr(), + SBI_HART_EXT_SVADU)) + return SBI_ENOTSUPP; + + return SBI_OK; +} + +static int fwft_set_adue(struct fwft_config *conf, unsigned long value) +{ + if (value) +#if __riscv_xlen == 32 + csr_set(CSR_MENVCFGH, ENVCFG_ADUE >> 32); +#else + csr_set(CSR_MENVCFG, ENVCFG_ADUE); +#endif + else +#if __riscv_xlen == 32 + csr_clear(CSR_MENVCFGH, ENVCFG_ADUE >> 32); +#else + csr_clear(CSR_MENVCFG, ENVCFG_ADUE); +#endif + + return SBI_OK; +} + +static int fwft_get_adue(struct fwft_config *conf, unsigned long *value) +{ + unsigned long cfg; +#if __riscv_xlen == 32 + cfg = csr_read(CSR_MENVCFGH) & (ENVCFG_ADUE >> 32); +#else + cfg = csr_read(CSR_MENVCFG) & ENVCFG_ADUE; +#endif + *value = cfg != 0; + + return SBI_OK; +} + static struct fwft_config* get_feature_config(enum sbi_fwft_feature_t feature) { int i; @@ -185,6 +225,12 @@ static const struct fwft_feature features[] = .set = fwft_set_misaligned_delegation, .get = fwft_get_misaligned_delegation, }, + { + .id = SBI_FWFT_PTE_AD_HW_UPDATING, + .supported = fwft_adue_supported, + .set = fwft_set_adue, + .get = fwft_get_adue, + }, }; int sbi_fwft_init(struct sbi_scratch *scratch, bool cold_boot) diff --git a/lib/sbi/sbi_hsm.c b/lib/sbi/sbi_hsm.c index 47edab2..9a74d2c 100644 --- a/lib/sbi/sbi_hsm.c +++ b/lib/sbi/sbi_hsm.c @@ -45,6 +45,10 @@ struct sbi_hsm_data { unsigned long saved_mie; unsigned long saved_mip; unsigned long saved_hedeleg; + unsigned long saved_menvcfg; +#if __riscv_xlen == 32 + unsigned long saved_menvcfgh; +#endif atomic_t start_ticket; }; @@ -419,6 +423,10 @@ void __sbi_hsm_suspend_non_ret_save(struct sbi_scratch *scratch) hdata->saved_mie = csr_read(CSR_MIE); hdata->saved_mip = csr_read(CSR_MIP) & (MIP_SSIP | MIP_STIP); hdata->saved_hedeleg = csr_read(CSR_HEDELEG); +#if __riscv_xlen == 32 + hdata->saved_menvcfgh = csr_read(CSR_MENVCFGH); +#endif + hdata->saved_menvcfg = csr_read(CSR_MENVCFG); } static void __sbi_hsm_suspend_non_ret_restore(struct sbi_scratch *scratch) @@ -426,6 +434,10 @@ static void __sbi_hsm_suspend_non_ret_restore(struct sbi_scratch *scratch) struct sbi_hsm_data *hdata = sbi_scratch_offset_ptr(scratch, hart_data_offset); + csr_write(CSR_MENVCFG, hdata->saved_menvcfg); +#if __riscv_xlen == 32 + csr_write(CSR_MENVCFGH, hdata->saved_menvcfgh); +#endif csr_write(CSR_HEDELEG, hdata->saved_hedeleg); csr_write(CSR_MIE, hdata->saved_mie); csr_set(CSR_MIP, (hdata->saved_mip & (MIP_SSIP | MIP_STIP))); From patchwork Mon Jun 17 15:41:04 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: 1948677 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=fdc232Cy; 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=ucVkzXnf; 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 4W2vJL5LD0z20KL for ; Tue, 18 Jun 2024 01:41:54 +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=xnoyJkmNacpSLnxkodWrRFf+eMAVd88srijqbFdF0sM=; b=fdc232CyQp+d7v y/Ftt/w1uU+QqIGYsQ7RzRKBt2AfVLSqKzx/KwoFT8Vm4yxPhHNcTEadqoWw5F2VqATtg4DdhyJZ8 uIBUm9UGdTRJKejcU50RTqI41uOwwFQINWr2sbWERf8byUNV6dRDroVGPaINNOsH5sl3w9ZJW73uu k5tvDU7FwuV1HOJW4J9qjfvZyr/WlkmXVgYl0SbhHKo46Mlld8hwUf1G7CePqWlyyR0Jv7g1X3YZH BHeUF19w8qQxvCUBc1ZE25Nyu6ybH1gbp5SXJrjFhVveZB/YvC2QIfrSX7U7Wx0TVSUAuJxJ5zD6X /O+vGZzkCGnlA/bFvahQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sJEUM-0000000BX0f-01qi; Mon, 17 Jun 2024 15:41:46 +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 1sJEUF-0000000BWvg-310Z for opensbi@lists.infradead.org; Mon, 17 Jun 2024 15:41:41 +0000 Received: by mail-wr1-x436.google.com with SMTP id ffacd0b85a97d-35f1d407fc2so362081f8f.1 for ; Mon, 17 Jun 2024 08:41:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1718638897; x=1719243697; 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=v1xHjbFk0bmx3tuzfB9+yj0XxWTa/UGzDUGubo0vbjM=; b=ucVkzXnfB/g2PPoJY1+Mf2DGLgTZWLaslzpbRYX6Je2o/HJDPeE2C312LakK41xxg0 5zLGhViUXBo5RFYKCrTydXv1/Y9P0MhpSsb6BzxxlTw1Fq0EG0u8RAZBPRdjLCW2c9aO CDM63gA6t91B8bjhIw7rIBHe5Dxc1GyzfMze1ROGu/Qw1+syV3RIkeDdw8lNWLAQbavN b+9z0a6jU1fBDkHSuEpuN4sH8MkX43dMhP34bjsyjbzKA4E8JASg8LWvFzubB9nMMyOj vDQRl2UqLy2hVWExb1SwDNCoc90dCBle05EN2G9MPPcB1mJQ0KR9sr8Tc6W12ZgKH3Gr tSZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718638897; x=1719243697; 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=v1xHjbFk0bmx3tuzfB9+yj0XxWTa/UGzDUGubo0vbjM=; b=Seq7ZRJFzRaxvpmrqr24mWxwsJlvx6p5uTkaXR+BBK8b5N3V49C5Dpgrk+41xyA2Cw suqY0TXIM7uDHsNHLQKoub8YSY5Ab90gqXA85pv18dl3URT2AKbnjoXWvN46OveFIDG4 ogJV9n1asP19t7o3kuZhSmwusEsaU9dvIeEzZN1YESoA8K2X+Ge+wIk9ceZ9MWxXcQvx NpEFNT4+chsWKHGpWLkrxZuV+wa+rOa8FlJwnI/uu8y1rwi/SZ2DYiVdsb/igqhgu92u TPBw7XrXWVxX6tHhDI3DXT+ODBvqNklUdxPwhq/oRYcK3B2gyMFaU5p9bkiUrflfDSxn Z+Pw== X-Gm-Message-State: AOJu0YzTaU82d5sCya/ETCpoorTeCIAQn1DpqUd1KoK27ExWQNVT0dq9 7V5jPq+/RDDp/wR0Rg9ibz9M/1roYSX2Ar1R+4XPlVBfKfirs/6xXClGDrg82xX4421fpTjReeV 2n+Q= X-Google-Smtp-Source: AGHT+IE3w1kRVU+1UT8fyZRlR4G8qpmdC2eKM8n8xCsy2uxVnrdYqimlNRgxb1j7nMEruQw0F+1fAQ== X-Received: by 2002:a05:6000:2ad:b0:35f:1edb:4695 with SMTP id ffacd0b85a97d-3607a79f435mr7141263f8f.6.1718638876635; Mon, 17 Jun 2024 08:41:16 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:999:a3a0:9f43:3ca4:162c:d540]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-36075104d88sm12097923f8f.104.2024.06.17.08.41.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Jun 2024 08:41:16 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: opensbi@lists.infradead.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Anup Patel , Atish Patra Subject: [PATCH v2 4/4] lib: sbi: implement SBI FWFT extension Date: Mon, 17 Jun 2024 17:41:04 +0200 Message-ID: <20240617154110.4007865-5-cleger@rivosinc.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240617154110.4007865-1-cleger@rivosinc.com> References: <20240617154110.4007865-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240617_084139_883182_94EBC981 X-CRM114-Status: GOOD ( 14.06 ) 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: The SBI FWFT extension defines a set of function that can be called to control the configuration of some platform features (misaligned trap delegation, etc). This patch implements sbi_fwft_set() and s [...] 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 -0.0 T_SCC_BODY_TEXT_LINE No description available. 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 SBI FWFT extension defines a set of function that can be called to control the configuration of some platform features (misaligned trap delegation, etc). This patch implements sbi_fwft_set() and sbi_fwft_get() as defined in the specification [1]. Link: https://lists.riscv.org/g/tech-prs/message/924 [1] Signed-off-by: Clément Léger Reviewed-by: Anup Patel --- lib/sbi/Kconfig | 4 ++++ lib/sbi/objects.mk | 3 +++ lib/sbi/sbi_ecall_fwft.c | 49 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 lib/sbi/sbi_ecall_fwft.c diff --git a/lib/sbi/Kconfig b/lib/sbi/Kconfig index cc8e031..6cf54ce 100644 --- a/lib/sbi/Kconfig +++ b/lib/sbi/Kconfig @@ -38,6 +38,10 @@ config SBI_ECALL_CPPC bool "CPPC extension" default y +config SBI_ECALL_FWFT + bool "Firmware Feature extension" + default y + config SBI_ECALL_LEGACY bool "SBI v0.1 legacy extensions" default y diff --git a/lib/sbi/objects.mk b/lib/sbi/objects.mk index 221e72c..211abad 100644 --- a/lib/sbi/objects.mk +++ b/lib/sbi/objects.mk @@ -46,6 +46,9 @@ libsbi-objs-$(CONFIG_SBI_ECALL_DBCN) += sbi_ecall_dbcn.o carray-sbi_ecall_exts-$(CONFIG_SBI_ECALL_CPPC) += ecall_cppc libsbi-objs-$(CONFIG_SBI_ECALL_CPPC) += sbi_ecall_cppc.o +carray-sbi_ecall_exts-$(CONFIG_SBI_ECALL_FWFT) += ecall_fwft +libsbi-objs-$(CONFIG_SBI_ECALL_FWFT) += sbi_ecall_fwft.o + carray-sbi_ecall_exts-$(CONFIG_SBI_ECALL_LEGACY) += ecall_legacy libsbi-objs-$(CONFIG_SBI_ECALL_LEGACY) += sbi_ecall_legacy.o diff --git a/lib/sbi/sbi_ecall_fwft.c b/lib/sbi/sbi_ecall_fwft.c new file mode 100644 index 0000000..267cbab --- /dev/null +++ b/lib/sbi/sbi_ecall_fwft.c @@ -0,0 +1,49 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2024 Rivos Inc. + * + * Authors: + * Clément Léger + */ + +#include +#include +#include +#include +#include + +static int sbi_ecall_fwft_handler(unsigned long extid, unsigned long funcid, + struct sbi_trap_regs *regs, + struct sbi_ecall_return *out) +{ + int ret = 0; + + switch (funcid) { + case SBI_EXT_FWFT_SET: + ret = sbi_fwft_set(regs->a0, regs->a1, regs->a2); + break; + case SBI_EXT_FWFT_GET: + ret = sbi_fwft_get(regs->a0, &out->value); + break; + default: + ret = SBI_ENOTSUPP; + break; + } + + return ret; +} + +struct sbi_ecall_extension ecall_fwft; + +static int sbi_ecall_fwft_register_extensions(void) +{ + return sbi_ecall_register_extension(&ecall_fwft); +} + +struct sbi_ecall_extension ecall_fwft = { + .extid_start = SBI_EXT_FWFT, + .extid_end = SBI_EXT_FWFT, + .register_extensions = sbi_ecall_fwft_register_extensions, + .handle = sbi_ecall_fwft_handler, +};