From nobody Thu Dec 18 18:52:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1765990489; cv=none; d=zohomail.com; s=zohoarc; b=S7o/qgXUtSGVc385DEYJDdNiXYp1YBnp/p5uzYpG44lVNm986AQFToUTkEUiIMvjCBgpirQXFKT46/3RVsV8lOzKycuu1MPfpq3mR67dOKXpN7hBVvQL/aUWk4tXmFYTeUO1BkmtHtJK44ms5y2iorVPvAZ6aCUGoxszeqFSsj8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1765990489; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Xk8VLGfP89HNwQj29hZGIP9LR5h0D6fyBDqrK9XH7AU=; b=bsMXjLZtNZVxRrOOSMhE0UTpxp9LmgB0G0LNScVMUZWgjdwTMR6FuSu7gxDzKnYA5Kc5EXzevp5dNUw8SWFQ+YgxiwO4RslhOqFy7ueky4ZIXHDDfFyFjwln5LkwhANl6Xbisc1YGWe0030/ibz6FDRpkABLB8aq9SwXdVzQO5c= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1765990489716112.29070430206605; Wed, 17 Dec 2025 08:54:49 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1188964.1509970 (Exim 4.92) (envelope-from ) id 1vVunL-0003Qz-1S; Wed, 17 Dec 2025 16:54:35 +0000 Received: by outflank-mailman (output) from mailman id 1188964.1509970; Wed, 17 Dec 2025 16:54:34 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vVunK-0003Qs-U0; Wed, 17 Dec 2025 16:54:34 +0000 Received: by outflank-mailman (input) for mailman id 1188964; Wed, 17 Dec 2025 16:54:33 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vVunJ-0003An-3A for xen-devel@lists.xenproject.org; Wed, 17 Dec 2025 16:54:33 +0000 Received: from mail-ed1-x529.google.com (mail-ed1-x529.google.com [2a00:1450:4864:20::529]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 0e3aa4cc-db69-11f0-9cce-f158ae23cfc8; Wed, 17 Dec 2025 17:54:30 +0100 (CET) Received: by mail-ed1-x529.google.com with SMTP id 4fb4d7f45d1cf-649820b4b3aso4427797a12.3 for ; Wed, 17 Dec 2025 08:54:30 -0800 (PST) Received: from fedora (user-109-243-71-38.play-internet.pl. [109.243.71.38]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b7cfa5d1e89sm2015077966b.69.2025.12.17.08.54.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Dec 2025 08:54:29 -0800 (PST) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 0e3aa4cc-db69-11f0-9cce-f158ae23cfc8 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765990470; x=1766595270; darn=lists.xenproject.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=Xk8VLGfP89HNwQj29hZGIP9LR5h0D6fyBDqrK9XH7AU=; b=nqeXuKJc5XiRRMXRIuSwfH6pDZnvgwy3bJWCn/Jgisazc9SWBYiaKmxBzuQAUrM+U5 vOl/LfTZLPvywLmEDihU1peIxZgTqbTfZeKcR8l0tGeg1drbyH8W9rezyt7Uql+GYmmK UtYvR/SUGCp0YwfDAxTHQiwK56l6CfvAEACrsDS6YVRUw7vcMKxXnbC7iUFNyA//6PPO 7GwKelkH8rx8oide/KBCTELO2icz7Ept60DVm/euSaq9WMn1xl8uXrtcw4guhRpd1QGg vg4iAE3ZSGBLg8P5+AfeflfJ0GMulCBb9C1j0K/npFnT++yWKb75dViEH4Iyn46KrDFh 6VNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765990470; x=1766595270; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Xk8VLGfP89HNwQj29hZGIP9LR5h0D6fyBDqrK9XH7AU=; b=CM6VZzHxC7MbnNb1agOwZUIT4x8cOHgJ/PAy50DFbh2NpD+hMT/yCSITkBTJFI1lFd iEpG9WHmvfTDipXVHniJ8luVFkJ7GKlufjp7qOFkvEnLVAjOctsPZjmZ2whU5bVxh5Qn Fyo21EFNn14iwznUIIQ4yCPOdImWOR1YnnZ58uuODtIzZecL9fpFN7kuXjviSW+H+k99 5ta1YcvIGPlcmWxdxaZdQQCtY93QfJ24zHXq/DMgLpq9V4L6Hh5v0s0p6QVLBX9hvLrk yQdXw2WVTWcVrztznhgKeJymNs+Wvn6rZ9NWF87UkLv1pssLewnSK/zgRezHbZFwyZey 6/Hw== X-Gm-Message-State: AOJu0Yy9WdgaWtZNLUr9hLxFGwBE3JT5Z4A/xPBwOSgqyr8rYXCChAJS oWTTbm18auy1d5M8S3MY1DiDnqoAkXv02AnlHouZ1dwKqeEAHqPcnzv0SXQFSg== X-Gm-Gg: AY/fxX5HNwywoQ/tdiwWys8Zdr4EJMEKl9G8bRnecp+lbvOUArGMMeYn91eHKHVDGui KkFcHIUzgpI9+so8zhLlRywOLMNzaGeeZ4MsMr3Jj/0utg5v9cgyWCXyJBaEBZfULNtI7m3SjCn ICFR2cGaZDj9ODcP+3YROqq2xm/u+WVGiZt9njcw0QhDMni/0vmOZAqtszEOvdJvyv/3P1esXnE 4EMqSpqVMj9yWyUwNn3IFBdVm/fKUWtnZojf7oAejruCMfE/rTccvxxhK0d2zxRV6EvJGjvpi3s MF1XfNWPWoz7SPPgZ0qGgc9lVCCExVu22D7xR6Xt8NCD7OQc2b3DaIU1UXtfBbKgGtxf4G+g8J8 9wB8HVHYUjyJAcZPk/m5EtbfPlVhCfRANfwYOssa+PAYeH5FwF1og0JGG3/U85GqY7ecZsSf9ZJ Nd56+KYXgQ8Ov18rhyOlMy+m6QvBQB03kARwidV+gmLFgldrezFGqyh5o= X-Google-Smtp-Source: AGHT+IEMdu2XSHa6enoreBym9vX+fgimxJ1D+uQFmMT9LBHk2c/NxVbfJe3zJelR1wqkCmuusah+pw== X-Received: by 2002:a17:907:68a2:b0:b80:448:37f1 with SMTP id a640c23a62f3a-b800448e482mr297467166b.10.1765990469724; Wed, 17 Dec 2025 08:54:29 -0800 (PST) From: Oleksii Kurochko To: xen-devel@lists.xenproject.org Cc: Oleksii Kurochko , Alistair Francis , Bob Eshleman , Connor Davis , Andrew Cooper , Anthony PERARD , Michal Orzel , Jan Beulich , Julien Grall , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Stefano Stabellini Subject: [PATCH v2 2/3] xen/riscv: add RISC-V legacy SBI extension support for guests Date: Wed, 17 Dec 2025 17:54:19 +0100 Message-ID: X-Mailer: git-send-email 2.52.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1765990491121154100 Content-Type: text/plain; charset="utf-8" This commit adds support for legacy SBI extensions (version 0.1) in Xen for guest domains. The changes include: 1. Define all legacy SBI extension IDs (0x0 to 0x8) for better clarity and completeness. 2. Implement handling of legacy SBI extensions, starting with support for SBI_EXT_0_1_CONSOLE_{PUT,GET}CHAR. The implementation uses the existing virtual SBI framework to handle legacy SBI ecalls, ensuring compatibility with older SBI specifications in RISC-V guests. Signed-off-by: Oleksii Kurochko --- Changes in v2: - s/vsbi-legacy-extension.*/legacy-extension.* - Correct padding for SBI_EXT_0_1_* macros. - Set ret =3D SBI_ERR_NOT_SUPPORTED; in the case of vsbi_legacy_ecall_hand= ler() instead of regs->a0 =3D ... as regs->a0 will be overwritten in vsbi_handle_ecall(). - Use domain_crash() instead of panic() in vsbi_legacy_ecall_handler() and add TODO. - Use newly introduced VSBI_EXT macros instead of VSBI_EXT_{START,END}. - Introduce vsbi_print_line() and use it instead of plain printk() in the handler of SBI_EXT_0_1_CONSOLE_PUTCHAR. --- xen/arch/riscv/include/asm/sbi.h | 11 ++++- xen/arch/riscv/vsbi/Makefile | 1 + xen/arch/riscv/vsbi/legacy-extension.c | 65 ++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 xen/arch/riscv/vsbi/legacy-extension.c diff --git a/xen/arch/riscv/include/asm/sbi.h b/xen/arch/riscv/include/asm/= sbi.h index ade24a572d..751bae6d66 100644 --- a/xen/arch/riscv/include/asm/sbi.h +++ b/xen/arch/riscv/include/asm/sbi.h @@ -14,8 +14,15 @@ =20 #include =20 -#define SBI_EXT_0_1_CONSOLE_PUTCHAR 0x1 -#define SBI_EXT_0_1_SHUTDOWN 0x8 +#define SBI_EXT_0_1_SET_TIMER 0x0 +#define SBI_EXT_0_1_CONSOLE_PUTCHAR 0x1 +#define SBI_EXT_0_1_CONSOLE_GETCHAR 0x2 +#define SBI_EXT_0_1_CLEAR_IPI 0x3 +#define SBI_EXT_0_1_SEND_IPI 0x4 +#define SBI_EXT_0_1_REMOTE_FENCE_I 0x5 +#define SBI_EXT_0_1_REMOTE_SFENCE_VMA 0x6 +#define SBI_EXT_0_1_REMOTE_SFENCE_VMA_ASID 0x7 +#define SBI_EXT_0_1_SHUTDOWN 0x8 =20 #define SBI_EXT_BASE 0x10 #define SBI_EXT_RFENCE 0x52464E43 diff --git a/xen/arch/riscv/vsbi/Makefile b/xen/arch/riscv/vsbi/Makefile index 820eb10ac2..bc5755cb13 100644 --- a/xen/arch/riscv/vsbi/Makefile +++ b/xen/arch/riscv/vsbi/Makefile @@ -1 +1,2 @@ obj-y +=3D core.o +obj-y +=3D legacy-extension.o diff --git a/xen/arch/riscv/vsbi/legacy-extension.c b/xen/arch/riscv/vsbi/l= egacy-extension.c new file mode 100644 index 0000000000..75280de3bc --- /dev/null +++ b/xen/arch/riscv/vsbi/legacy-extension.c @@ -0,0 +1,65 @@ + +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include +#include + +#include +#include + +static void vsbi_print_line(char c) +{ + struct domain *cd =3D current->domain; + struct domain_console *cons =3D cd->console; + + if ( !is_console_printable(c) ) + return; + + spin_lock(&cons->lock); + ASSERT(cons->idx < ARRAY_SIZE(cons->buf)); + if ( c !=3D '\n' ) + cons->buf[cons->idx++] =3D c; + if ( (cons->idx =3D=3D (ARRAY_SIZE(cons->buf) - 1)) || (c =3D=3D '\n')= ) + { + cons->buf[cons->idx] =3D '\0'; + guest_printk(cd, XENLOG_G_DEBUG "%s\n", cons->buf); + cons->idx =3D 0; + } + spin_unlock(&cons->lock); +} + +static int vsbi_legacy_ecall_handler(struct vcpu *vcpu, unsigned long eid, + unsigned long fid, + struct cpu_user_regs *regs) +{ + int ret =3D 0; + + switch ( eid ) + { + case SBI_EXT_0_1_CONSOLE_PUTCHAR: + vsbi_print_line((char)regs->a0); + break; + + case SBI_EXT_0_1_CONSOLE_GETCHAR: + ret =3D SBI_ERR_NOT_SUPPORTED; + break; + + default: + /* + * TODO: domain_crash() is acceptable here while things are still = under + * development. + * It shouldn't stay like this in the end though: guests should not + * be punished like this for something Xen hasn't implemented. + */ + domain_crash(vcpu->domain, + "%s: Unsupported ecall: FID: #%lx, EID: #%lx\n", + __func__, fid, eid); + break; + } + + return ret; +} + +VSBI_EXT(legacy, SBI_EXT_0_1_SET_TIMER, SBI_EXT_0_1_SHUTDOWN, + vsbi_legacy_ecall_handler); --=20 2.52.0