From patchwork Wed Jun 19 09:42:39 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: 1949602 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=wiP1Nsd6; 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=iOwrVBPJ; 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 4W3zFh1Sxgz20XZ for ; Wed, 19 Jun 2024 19:43: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=M0cyP80fBusdq4ARr4GXmAiQlMasTdG/n4DcQVqWdYc=; b=wiP1Nsd6TvcgSx UON1OJmAiW0ojk0bDFZN6HYsBvdxdVZsFjK/nYcWl8ead59rhOBkoj3rYeE2iALn8RxaBqzydeVmy yA0lzUf7wvrwyKTWJhuZX3FWacVw1hdoXnJlhnsp3wgkIudqmAC5I4ZvTiGj6VHPAuF23kEJrOWEm PxoCcNq0sp3Aqah2N+QE+LWFFishg7yi4Cc/GivPdwggDCVNQJZjPhFWTGM5Mw759b1jc8J8uw1dw prgvvwVPOK5VF9MiNJFozIroPTkUt4K5pm7wTv4K6zGkVZuZSvnHhZ6Iy+8i10uhO2eevt0mbos8T FwFje3pCOFlC/9fcWU/g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sJrqS-00000000d9Q-1elf; Wed, 19 Jun 2024 09:43:12 +0000 Received: from mail-io1-xd30.google.com ([2607:f8b0:4864:20::d30]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sJrqP-00000000d8P-3fQu for opensbi@lists.infradead.org; Wed, 19 Jun 2024 09:43:11 +0000 Received: by mail-io1-xd30.google.com with SMTP id ca18e2360f4ac-7eb82f68af9so18066539f.0 for ; Wed, 19 Jun 2024 02:43:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1718790188; x=1719394988; 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=iOwrVBPJlbXPvebpXZZAeIdzT1sOjbus9TNcHvFrti5iTC9WlHunuwwCX+ed0n++u8 qrcjgYDbkdsDinRS2DnJUcyfKgLdM6+ofd8ZccsjcfCfVNEJSuz+/K7ly3s2nqENJJR2 njW4nQMcVDDNev4/XhaLcKQLx4bR7hELboy1bPZMpFCU4K/l02WJ7fZYxR+S1hZtQB/7 5maTXaZhRWQq0WzTZLkU/X2yioItAte11UDKR9JuDurI3xXv5Z87cmL7wzChfJfpAjKJ lwC8bQt0tCsc6i109w8Xfm/zyvBX1LhqrcE/vxsch/t8zf8K4xCSKGGTPfqo0SdUhtku F2Ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718790188; x=1719394988; 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=IokKU1IImgp200hKNwoa0XuF9D4++N7Wm7egmEIwS6bcMpUUdFMN3LzT/Q2YJcuygG uN1crmr4eDgD0AP5NJpxujBovuCBXmwUW13DNI6ynW82XhlWp+XEakApfJTs5i7tp5y8 or4OxCkSi7n4DnPnQml1Z5XqAGGA6uAZQ3FShbvWHqiNLfSgMS+9rf0ks9wdEOFQGZSx cG+31cMbPP5+bo1iZJfa4fpu6cN+8mDgXYlwZab8TwQkv6ref9r7sQuussduYkjh5C9l dYTk61UanvppqdRD5skvrmc9pR1bcHe9a/oVvOyF8lxH9zl66JbBIN0bwcrwfbndNGaN 3k8Q== X-Gm-Message-State: AOJu0YxvwSM/iBGbnia9ww6+XH4IgRFsqpKuvJpwhDUToziBXzyCvPwv YRFb7LG3ptya9l3UD6ZJYGrJZsj+eo47rP/VZet1oj1bWBXhGlMQK3hR31nlGeDdTHspNqLhcVk Owzg= X-Google-Smtp-Source: AGHT+IFazvyO1gFH4Y6VW5mHjo//vFDsi1Ci8v+EWrI99fEO/hu5kbBm3PamgEsMW8pu6e4/SBQwfw== X-Received: by 2002:a05:6602:19c7:b0:7eb:6a6e:c830 with SMTP id ca18e2360f4ac-7f13ee8ac50mr230825139f.2.1718790187911; Wed, 19 Jun 2024 02:43:07 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:999:a3a0:b69:7f57:35a2:8f92]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-705cc97af20sm10259067b3a.70.2024.06.19.02.43.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jun 2024 02:43:07 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: opensbi@lists.infradead.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Anup Patel , Atish Patra Subject: [PATCH v3 1/4] lib: sbi: add support for firmware features extension Date: Wed, 19 Jun 2024 11:42:39 +0200 Message-ID: <20240619094244.603628-2-cleger@rivosinc.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240619094244.603628-1-cleger@rivosinc.com> References: <20240619094244.603628-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240619_024309_972950_6063F1DA X-CRM114-Status: GOOD ( 21.02 ) 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_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?IFsyNjA3OmY4YjA6NDg2NDoyMDowOjA6MDpkMzAgbGlzdGVkIGluXQ==?= =?unknown-8bit?b?IFtsaXN0LmRuc3dsLm9yZ10=?= =?unknown-8bit?q?_-0=2E0_SPF=5FPASS_______________SPF=3A_sender_matches_SPF_?= =?unknown-8bit?q?record?= =?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=2E1_DKIM=5FSIGNED____________Message_has_a_DKIM_or_DK_si?= =?unknown-8bit?q?gnature=2C_not_necessarily_valid?= =?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=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 Wed Jun 19 09:42:40 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: 1949604 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=vtU5y11K; 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=CDcs3IsQ; 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 4W3zFm0Q8Lz20Wb for ; Wed, 19 Jun 2024 19:43:24 +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=uh9TVPl7lltaVTHtTizPCyuNfksgdPwlqwhYAKap5Ok=; b=vtU5y11KPM9KFH 9j+TAPcJtMUqJ63bDkYZe59eOCFNyEZoUyWOd5VsvVMdzFFrB46wVrweOVhlv50zVCya2a9YbC37s 5/kDRFXVbEohP+f+5YnqGrqh8N+zfdDXHXy2NPPF22GWQd1O0HHZWvFGhd08CHbeL2nWFCDG0vCM3 evKW8o5VDRr6i2Q+1BcjMHjSRP6DqcT4CIQSuGnlyuXqEhPgnuimXZCbmBsucolq9B3Io16gWHVYv b2964QUjFVYvxEbABM+zWOY1sSAgWaH5w5w1w5lQ8Vg+LOHPQtooB93t9gS8Q/eoVD7ikJuAv2sx8 v5lq4I849/VQobpgjclA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sJrqX-00000000dB3-1rhe; Wed, 19 Jun 2024 09:43:17 +0000 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sJrqU-00000000d9u-0sHC for opensbi@lists.infradead.org; Wed, 19 Jun 2024 09:43:15 +0000 Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-7063478ff2eso11411b3a.0 for ; Wed, 19 Jun 2024 02:43:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1718790192; x=1719394992; 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=biywBaYH3kIGoB14Z/xF7VjnNljbdhlW2wgjP/6bsk4=; b=CDcs3IsQdxUEyvibeef38vp2rwEOYGcBYDvb3koQ+KWaCZF6FLd+2kEkEqTkLhWv2j 1Xau8/7/yISTqTJKZ9OdY5Z6UWVXhdx8XyKsqqVtv/1n1JlgV3gE7y+R7LlJsW7KU7I/ ikRq3wfWDRrPuWeYPAxyPE7/oUH279nq1bfqM86Ta+6kX7Va2H5cZJPxGEctwBg9fcSK rvteRPydNcXoIjSDRlzml3TP1lA0c4bTLYc+rbo7QhPAyiIFYT4CzTzYWXVo8QCn3XH8 aOuzTOx7dhfgP1bBYkF7Zv7UKLdfu0FwL7kHqtWC/ISWkOF4yPG3RdhU0jXgH602CE5U JQtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718790192; x=1719394992; 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=biywBaYH3kIGoB14Z/xF7VjnNljbdhlW2wgjP/6bsk4=; b=YWSbf7AEdpkVcTOl0FtbfxxrdwWOldmQaShzo+7rWE8b8sy/Lq6/RIF7Y4MHc30KRV dPDBIA+k/OIKp8kOsaTJqfhrYFEkCzFsrKr+cIZLcjpv7l01FS+DLEWn4V8+61TvNBJ1 qf+qy7sWcn/xkBZVJcwouZqFQ8Ks/ING7UheIvgCUQSj1+iboQzcRCi63tPWgCOwAen1 glDd7M0/vIy6GOnlYbwlciJeWnDJOM1veyGbUNF6mDt3QZ7P5lv8tg1O7KIJPBhbrAhk Q7FTjHn62uytUWZS3wmYCX4L+Ryrrc0DCbYYlB5R/XpJ3G9BlJHSwFC+vXLf8VdQv/MS rbEg== X-Gm-Message-State: AOJu0YzWuMdHoCfFjqQkD9vBwze5iSpPRbPvLBD4RncSBtDJuhv9PFQ2 FJd0OcUYSInXL2byDULrKNqu3jpfs0MO8OMbao9XAW0ePtpl64spxLw25nZ+msCtt2Hm9TpeMav SDao= X-Google-Smtp-Source: AGHT+IFmZjhJc67C/i8CGsXEZ5MIIekxfUm5IjUNCTm7u7Wcb+CXW2dokhNaZLrBGE3W1fU+MCgv8A== X-Received: by 2002:aa7:91cc:0:b0:705:d820:de3c with SMTP id d2e1a72fcca58-70629cc0848mr2016743b3a.2.1718790192191; Wed, 19 Jun 2024 02:43:12 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:999:a3a0:b69:7f57:35a2:8f92]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-705cc97af20sm10259067b3a.70.2024.06.19.02.43.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jun 2024 02:43:11 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: opensbi@lists.infradead.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Anup Patel , Atish Patra Subject: [PATCH v3 2/4] lib: sbi: fwft: add support for SBI_FWFT_MISALIGNED_EXC_DELEG Date: Wed, 19 Jun 2024 11:42:40 +0200 Message-ID: <20240619094244.603628-3-cleger@rivosinc.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240619094244.603628-1-cleger@rivosinc.com> References: <20240619094244.603628-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240619_024314_360978_2E2A7CF2 X-CRM114-Status: GOOD ( 13.26 ) 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_SPF=5FPASS_______________SPF=3A_sender_matches_SPF_?= =?unknown-8bit?q?record?= =?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=2E1_DKIM=5FSIGNED____________Message_has_a_DKIM_or_DK_si?= =?unknown-8bit?q?gnature=2C_not_necessarily_valid?= =?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=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?IFsyNjA3OmY4YjA6NDg2NDoyMDowOjA6MDo0MzUgbGlzdGVkIGluXQ==?= =?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_MISALIGNED_EXC_DELEG withing FWFT support. This support allows to delegate misaligned accesses traps. Signed-off-by: Clément Léger Reviewed-by: Anup Patel --- 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..2b23e13 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_medeleg; 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_medeleg = csr_read(CSR_MEDELEG); } 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_MEDELEG, hdata->saved_medeleg); csr_write(CSR_MIE, hdata->saved_mie); csr_set(CSR_MIP, (hdata->saved_mip & (MIP_SSIP | MIP_STIP))); } From patchwork Wed Jun 19 09:42:41 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: 1949605 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=IfTSpLy4; 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=jod9lNqJ; 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 4W3zFr0fbjz20Wb for ; Wed, 19 Jun 2024 19:43:28 +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=UwcqbsKggOR6S/rlS4D0ll71N7O3NoGaa+ALBYf5Ads=; b=IfTSpLy4QwQ3MT mOlXlGQ7/E2BTkNUWfS5dVwddKXBHFlA99dZ+sCkso4fKwdXEpxLqrkeX4t34mcVzLLF/6qZu2em/ Yrs8uZrvoUgh2T7lEZHTUgMXmD7h9hOemWOnnixZwrMlhGTeZwJgKRkcKyCNad65Mea7oeLxzKGGr dxkAcudve8xQGU3XpH4KfP+Na8Vlz102e8mn3UDQB3xL9+bxlfsz/27pOre47mQVBgaL1A/L58OCS MGNIWPDGlUNBqasxM9hxhcCwWR6QfPQ6FGJPYAJUokAhRJ4C7s9rHzyAzJE48O7GjK9BlNA/D0z5i jh/zq1KLwwAPskNRhxdQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sJrqc-00000000dDm-0rCO; Wed, 19 Jun 2024 09:43:22 +0000 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sJrqY-00000000dBX-1nNr for opensbi@lists.infradead.org; Wed, 19 Jun 2024 09:43:20 +0000 Received: by mail-pg1-x52f.google.com with SMTP id 41be03b00d2f7-6c2d04b0833so202467a12.2 for ; Wed, 19 Jun 2024 02:43:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1718790196; x=1719394996; 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=YtLeSEeo5PlvydV3EFgAX0FrVunLIvkVlW/OTv0qKBg=; b=jod9lNqJEKdVy1IJZmvkQoWgPy39g3HL3P5RNEjbdzHR4gWPn9JKA9NZEj2TxtKScq 8dY84NKxvUuYAB31GvmCXJgSJYnsv0D2pr4ENIE9UcaM9eA9MxIbl3x1hYIBlDqkYlF3 rrx/SkTltK8p8MI1e/FwKMC+tNPrSgNjDo6/nWB9AsdjE/UCakA4INasFpaIt5eIxmJt 1XdiOY2qy0HpIcxxZSiMxEbyYI3EjkyBvhK+bbIrIVWt2SHyazhXjFAHGNHaTt4r6DCv QgJQFpT8AeRFhL/U7R8KgQ55hKfNBE/H4xk5bp+BaZ6HfsfMg5AAJQelQKRGmVrP7CQO 7Dfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718790196; x=1719394996; 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=YtLeSEeo5PlvydV3EFgAX0FrVunLIvkVlW/OTv0qKBg=; b=Z7zbw+bdzRGyiaI4QpWjyxzizT2sPBVeig9yRGTuCXPEi+HN6gXv8SrOa1E3CL58lT ed6vern/13mbA30LvnKjpP1mZ9t9Bk4Yuns74WvEeQK2uU0p9B4+wh7QZzpTdl6/yKri wGkx9kmrdJdXeeppACcZvHfaW+PdbZN3oU0OKo5a9eQJyxa4AMBMEk36Yx5hllpEva4a AAilRV8xxuf4yJD/wqhQSP0s+9pInBvSjae18o6G4JQdUp2r1BBeF00ngSxd/0Q7ek4v TgYlOiBkBQ0nFO/6cEj6U8AcBQZOpYs1jmLMg0zXNC59rimegerDiTEXr/UebbcbHjZC p9Dg== X-Gm-Message-State: AOJu0Yygd6+O2ueEkP8yMH9CO8teZAlQ7HIJxLpbrDR11DZikx9HXprn o6DidgEfyh2rkvbbrj09sBNMJ+EqH+D2oMVsL+dUU1eeIZ1g97mBEf3V3X4Fblj3c/3zLBFqkCC NJWE= X-Google-Smtp-Source: AGHT+IGwW0k2ak+d0GomVvT0ZI4icCIgDTby5on4fIKlUrt3Prp20OzWG+eU7NFqGAh/sXOOoddyuA== X-Received: by 2002:a05:6a00:c90:b0:705:d88f:4a94 with SMTP id d2e1a72fcca58-70629c6c508mr2132545b3a.1.1718790196290; Wed, 19 Jun 2024 02:43:16 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:999:a3a0:b69:7f57:35a2:8f92]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-705cc97af20sm10259067b3a.70.2024.06.19.02.43.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jun 2024 02:43:15 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: opensbi@lists.infradead.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Anup Patel , Atish Patra Subject: [PATCH v3 3/4] lib: sbi: fwft: add support for SBI_FWFT_PTE_AD_HW_UPDATING Date: Wed, 19 Jun 2024 11:42:41 +0200 Message-ID: <20240619094244.603628-4-cleger@rivosinc.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240619094244.603628-1-cleger@rivosinc.com> References: <20240619094244.603628-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240619_024318_535293_FDAFFFD2 X-CRM114-Status: GOOD ( 12.10 ) 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_47_++++++++++++++++++++++++++++++++++++++++++++++_lib/?= =?unknown-8bit?q?sbi/sbi=5Fhsm=2Ec_=7C_12?= =?unknown-8bit?q?_++++++++++++_2_files_changed=2C_59_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=5FPASS_______________SPF=3A_sender_matches_SPF_?= =?unknown-8bit?q?record?= =?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=2E1_DKIM=5FSIGNED____________Message_has_a_DKIM_or_DK_si?= =?unknown-8bit?q?gnature=2C_not_necessarily_valid?= =?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=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?IFsyNjA3OmY4YjA6NDg2NDoyMDowOjA6MDo1MmYgbGlzdGVkIGluXQ==?= =?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 | 47 ++++++++++++++++++++++++++++++++++++++++++++++ lib/sbi/sbi_hsm.c | 12 ++++++++++++ 2 files changed, 59 insertions(+) diff --git a/lib/sbi/sbi_fwft.c b/lib/sbi/sbi_fwft.c index 289a344..aff087f 100644 --- a/lib/sbi/sbi_fwft.c +++ b/lib/sbi/sbi_fwft.c @@ -100,6 +100,47 @@ 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 +226,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 2b23e13..7e32af3 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_medeleg; + 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_medeleg = csr_read(CSR_MEDELEG); +#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_MEDELEG, hdata->saved_medeleg); csr_write(CSR_MIE, hdata->saved_mie); csr_set(CSR_MIP, (hdata->saved_mip & (MIP_SSIP | MIP_STIP))); From patchwork Wed Jun 19 09:42:42 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: 1949606 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=MT4ygP/A; 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=UcJipxX4; 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 4W3zFw34LGz20Wb for ; Wed, 19 Jun 2024 19:43:32 +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=MT4ygP/AXNlV6K rU1GkhOp4+yQ+2Nal3/CyoBLSMAn6kKLoDpZU3HO/cUDv6REuqu3/EOx15yTNVdtLrndr56+LYt88 gkIW1hc8x69D1v3KyhUYuicEmdteljfSJWlcmK2blJQvEneiJaTM/dT7rRRMZCDS+ZxNkwIZbIusz n6+Txwe1KW+d6Uz/3AWhHhDA0AL1JpHZt4al30TIxSFafRUePKTuLnvyEZLlDI2GMdxfupGRsN6uQ nnjwWFI3C5cseZg2Ene34HM/yOoiv1tzxCAraT75ovTL6EGON+qQitFRZQTZrnkqCMAxX3LE9+2ce mp1hvr++yDwqgBNpILzQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sJrqg-00000000dH8-1odb; Wed, 19 Jun 2024 09:43:26 +0000 Received: from mail-oa1-x30.google.com ([2001:4860:4864:20::30]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sJrqc-00000000dDg-21Nm for opensbi@lists.infradead.org; Wed, 19 Jun 2024 09:43:24 +0000 Received: by mail-oa1-x30.google.com with SMTP id 586e51a60fabf-254976d3327so486373fac.1 for ; Wed, 19 Jun 2024 02:43:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1718790200; x=1719395000; 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=UcJipxX4fhW6vcRJMYxnCKOWeOSXVx1kdqFGwtFPpHRkwnOUXqLCJm1wbqN8i5Jy+f 3VZpjj+VRawcqFw4L8wB4bPQR0jyZ+YHvZbz+VTS/ii8pCAtC+QVKG+7QuFvafSLLnFt K7hYO7zY3TpmPDOw/L5Y1QZB0PKH+Aap+zjy8j+m0LPU07ydfADoCle1j/2ZYEPTqco/ 6mGSE30a+nCl7VtpphgJndHmnoDKmmoikkncOodfL4tpdBf2iOIOyDKbvp6AQT1AORBi ebU7Cv6eAmQZBzhF1XmmbFhlVEKzln3I/kOWglqZmlXchGuRf/W8IlcB+azbwLd9S75y q6Jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718790200; x=1719395000; 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=vP7q69w+GqyaEbmCH4bLbRkpdOU0zW+Xvo2citBSIxGPCFbLBLrsfH0HiJUv0gyfim v7XtEu2JBleANL7mlS4qhGKz1DKAR6Nucx7xo76quob73vH2MPIYb6jj75HaasDC8zYS dHD0qoeA5iTfH4Lv3UuM2FjkjmaubztYTHswnIMVD1FKEJVv/q45vo81H7Z/LFYs48vZ GrdhiZ5bb4FzI9vPxSjCeaA4K3peMNrehZykRjaMOX6yBTOCwngnwPEzDNHuMTa0myKN S95tDjrCxiHDrECcxIKgDLqGveXz8WtENioLjdFk85YaQHj9u0jesliUiUBnWzNptEYA bXJQ== X-Gm-Message-State: AOJu0Yx85d7fAquJWbLdGoGLvbG3JL5U8S9cLLit7eFfiC+IYkTVskfJ UHczTB5ZtJfXVN6PspGyK541Z3H5FWE6KRmOp2kVSuZVq9PszAxArjkqvDo2ze925guhwARd9g0 ZFSw= X-Google-Smtp-Source: AGHT+IHX/FSYw4h030VDORPNmTPyQ6KtG6IYMQvsgxUSjHB2XMY40jzs0KNubaNMC/zQck25PXkkdw== X-Received: by 2002:a05:6870:819e:b0:24f:e599:9168 with SMTP id 586e51a60fabf-25c948fe195mr2209573fac.1.1718790200457; Wed, 19 Jun 2024 02:43:20 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:999:a3a0:b69:7f57:35a2:8f92]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-705cc97af20sm10259067b3a.70.2024.06.19.02.43.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jun 2024 02:43:19 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: opensbi@lists.infradead.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Anup Patel , Atish Patra Subject: [PATCH v3 4/4] lib: sbi: implement SBI FWFT extension Date: Wed, 19 Jun 2024 11:42:42 +0200 Message-ID: <20240619094244.603628-5-cleger@rivosinc.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240619094244.603628-1-cleger@rivosinc.com> References: <20240619094244.603628-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240619_024322_570699_E4BC666B X-CRM114-Status: GOOD ( 14.71 ) 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 [2001:4860:4864:20:0:0:0:30 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -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, +};