From nobody Sat Sep 26 20:01:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1788551864; cv=none; d=zohomail.com; s=zohoarc; b=efO5v8WCIGpYLJV7Qt8+nZZI+eZhUqICvwYi/Jygv2LQGejIXo5sDPt0h8cRujg729QsjFxIhvZzEYmOVkJ0UwbOiaTE90WD73mjE2kMVc9Y27yqVnT3eWLg5BobONo0Nal7pfJJB+qowYaFI6VagpMzGRVfST/U3IF/NQc2Md8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788551864; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=vl6d4L1i+c4sykN/zuTBI4TPp/Bc6S5aA+qfuafTrM8=; b=U2dtfpGP5kQvEw6mAywEdycQKBkaZxI6bGwZoEIp2N0kjndbsrU3Yk04YZegRHIK4MiF3UK9fxAoMXm5IknhvlBZAzLqnXLTCMq8WKUe3jSTgYktcned5cZvljdjO75STbDBlZxo7lYPRuLhZhXORsrryCIempD6K//AnHtIkiY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788551863648903.4134332647724; Fri, 4 Sep 2026 12:57:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2a1R-0002wo-J4; Fri, 04 Sep 2026 15:56:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2a1Q-0002w6-NO for qemu-devel@nongnu.org; Fri, 04 Sep 2026 15:56:24 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2a1P-0007ix-4I for qemu-devel@nongnu.org; Fri, 04 Sep 2026 15:56:24 -0400 Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 684HIFBB016111 for ; Fri, 4 Sep 2026 19:56:22 GMT Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gfqqd3yjx-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 04 Sep 2026 19:56:22 +0000 (GMT) Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-92e53b8a302so258651185a.1 for ; Fri, 04 Sep 2026 12:56:22 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-910406871b6sm29117736d6.32.2026.09.04.12.56.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 12:56:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=vl6d4L1i+c4 sykN/zuTBI4TPp/Bc6S5aA+qfuafTrM8=; b=luYsX21+cFWZk6kce4Dgie7CupF PFl6D41LUaTJLtVV3km8eQx+O0tWqZ3uV64Asx6nXjhkWxaG36U7JIF+uQisdak3 Vv/rZSMLT/zoS7kg5OyAWOVMB+gtMsjQRPZ1IAUHMbfivogh5ffPYyduNsdNIf+z ytMG3p3R1/vi2xomiPlFcWChLOkzmRM/0vS4NMWFQ53ytUGCGdXN979uXSzJWheS kSEcRce11BBqJpp2DZT0SVvrWKUuUgmvVmdnEuLcsYoztR75V3BU2yqkQeGbI6WT +nJNIWGHEh8Q8YFhL/AFl447VtUs+7P1tbIBjphynfrJf/UU/UJ4SoW93bg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788551781; x=1789156581; darn=nongnu.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:content-type; bh=vl6d4L1i+c4sykN/zuTBI4TPp/Bc6S5aA+qfuafTrM8=; b=RtsnDEwe5tuZwnxGlOtQGL2t3JdmqvnB+Vn7jnVOhwZzvfe183DywUCTPALCoZ7VFG 9O9YZFnrPmn+wW6dJUAoaPFkQa3lqTND+PyKrFyI2xSKxZ1t/8zkpr9FtupmNk9g2UOk 7nXB2bhzLTBfvCxwuYQqOAFmKpVfBwS5BvEWTlUCvJE9ivgKWG4zOjjC8qgpB772yV4o J4ss3rvxyeQgjGEfqECqUiRejquqcMg9Bqq/RfCWEmHe3Dx0HReqtKapmGpN/rokYvQ5 kC5hK0Ci13ouWDqwLmORdHaeN8kVwD88cZ0bFnDwzAPxbb4b6IUtKrzIEw594eOY8ga6 fmjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788551781; x=1789156581; 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:content-type; bh=vl6d4L1i+c4sykN/zuTBI4TPp/Bc6S5aA+qfuafTrM8=; b=lkE5NQsAA+1SNrCxPrdH+gMBffTtKy7jzImBoarbTpLe0JhcSHqkjJg+CBhdv4nOrR IslQeDqtyJYwOeYSrkuwl1f8TpqlcXUDPpyaAf4we7OOtYsSlRWRzSXNH5EuNOm8IqZj 4ouCNCpvk7nQloB6xEkvpE/VehaxSQ5IWMJKcfvDM8D2x96AhzA2lKKkfA4URCCXUGsY f6wBG0aMPosLZHwCsItN/RftKRAKZ50fjkpCmOWdQqkT30DwNXq18DzOYCFyFE2DUqlX OdQbzFbJf04cIvwRq6qQFpW2XlaOKGpyntkBMdcapGu+N21YKSPgW73jXf7u1kDuYys3 BzMA== X-Gm-Message-State: AFuF++l6d9OillGEghZRccRtz+WPp8oJUPbzbr7KtxxlBR5J7InYRQ77 lKc04bqE3qpY3BGAbHiX8Ki1p85n7doG1YOo9YunCdBu95XSeppJjjjAdRw4Iuxr6haKdlWo4kJ DEP7gh+XSmx0wBlbRLVDGptyaSqFrSO1kmu95IyDEKsTNSTDBhZhGUiI6FHm1QGpLew== X-Gm-Gg: AYBFou3VYdqmYRczq6sKUmhx8/MHy3dy3Y7x19JgwDz4mI88NpGVZdnFC7PvYJvYcoC hNh5ITU+wrvfcs4RIE8APrc4ucX8VJ1/d04bykA/Bzyb/DsLDHReyaT7s/WWT7ZlAkiWCQE5r/7 TuXx19zpgtzlCFDFzBlQWoF51FJ6JY5SlGWhNocZ71uOnW7DBxD7X1tF/maWZStJBayCifIDuPc NkLX6TaTbyVFVaTImO+bf16Ivs4dNAh5NGwD/WaKmLip39j2jT2tGkn2iAEhZmKrrLtAMYOzrxK 6qhkbrFyM3VXtRZBIN7B7LQV6GXpAigUsMOUpMjYTmzBH7YP+OT/yL/V+unQlbkZNZosZQcEcD0 f1u41mmeNG6S9P9cdth/Ib9AnqFFOhvqIw26I X-Received: by 2002:a05:620a:1a03:b0:934:ab73:ac53 with SMTP id af79cd13be357-9398013bb1emr837588885a.0.1788551781262; Fri, 04 Sep 2026 12:56:21 -0700 (PDT) X-Received: by 2002:a05:620a:1a03:b0:934:ab73:ac53 with SMTP id af79cd13be357-9398013bb1emr837585785a.0.1788551780838; Fri, 04 Sep 2026 12:56:20 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, andrew.jones@oss.qualcomm.com, leif.lindholm@oss.qualcomm.com, Daniel Henrique Barboza , Palmer Dabbelt Subject: [PATCH v10 1/5] target/riscv/cpu.c: remove 'bare' condition for .profile Date: Fri, 4 Sep 2026 16:56:06 -0300 Message-ID: <20260904195610.964829-2-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260904195610.964829-1-daniel.barboza@oss.qualcomm.com> References: <20260904195610.964829-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: sWApv1_8U1oOvh80h_uRKm85jLARwkiL X-Proofpoint-ORIG-GUID: sWApv1_8U1oOvh80h_uRKm85jLARwkiL X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDE4MiBTYWx0ZWRfX+ojGIcIVDt/d EAyhZVyEQH5AMUJWOKMtLJXz7EQzIq0pWN3JIJV0SUzB0zA1D6r5AJ4SkueottIawEALJ9Ik/05 EIpwzhZ4ep2kc8M4uQROIANhiRn4MGw= X-Authority-Analysis: v=2.4 cv=XtnK/1F9 c=1 sm=1 tr=0 ts=6a9b2266 cx=c_pps a=50t2pK5VMbmlHzFWWp8p/g==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=JF9118EUAAAA:8 a=FRSEYCzRAAAA:8 a=GhL2bEVCvcqOW28JNKkA:9 a=IoWCM6iH3mJn3m4BftBB:22 a=xVlTc564ipvMDusKsbsT:22 a=H4N_Y-AU75W7NKDNhZlT:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDE4MiBTYWx0ZWRfXzy34qSDB4Gy/ Bv0KVxzsP8Vtnze9SMZfZVdSarNMVcQ3hJPBC7XGGEz0y7L0bdO16P6XemWYLf/pT/Emj0AS1i/ eCYSvucvkk4rJht+aAS3XKlq72OOt6hH+Ysh2AawHpI3Q7+rcNakhntvBdk3yNg/U+ixoR1l4Ln ia2NUo3puca51dFmcGWUR7Qb0fjmDB78Te4wIrkyGQfn3ROHtlqc36I+HIL8wCste+RChzNrtSp QYLMC0RHv2Di/n5WyYB4u8Pq9dnojn35VfFzif2XDDf/U2VNjl+5rLhGNndDntXdoLMO4rXzvao jA8pTaNNP+MLwIGDhM2aJ8vCMvS9beJsr1UVCNX/sxQj9gluakJrFFwRWRcuCT5vqoKtRIRr9x4 +M8dGCGPg5stoS109uFoO8VZdEuGe/6y675IDwaGMiy6VNDK58S3T4vUqIESa7u+8yJYZh5yIbe u6h0F7MEnvNjjWVTc3A== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_05,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 phishscore=0 malwarescore=0 spamscore=0 clxscore=1015 impostorscore=0 bulkscore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040182 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1788551866882158500 Content-Type: text/plain; charset="utf-8" We want to configure other CPU types to use profiles as an alternative to adding every profile extension explicitly, i.e. a profile is nothing more than an extension bundle. This means that a vendor CPU can set .profile=3Drva23s64 while having the same handling as any other vendor CPU. Same thing with all other CPU types. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Andrew Jones Reviewed-by: Alistair Francis Reviewed-by: Chao Liu Reviewed-by: Sunil V L --- target/riscv/cpu.c | 1 - 1 file changed, 1 deletion(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 652311ddef..185474a8cf 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -3096,7 +3096,6 @@ static void riscv_cpu_class_base_init(ObjectClass *c,= const void *data) mcc->def->bare |=3D def->bare; if (def->profile) { assert(profile_extends(def->profile, mcc->def->profile)); - assert(mcc->def->bare); mcc->def->profile =3D def->profile; } if (def->misa_mxl_max) { --=20 2.43.0 From nobody Sat Sep 26 20:01:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1788551875; cv=none; d=zohomail.com; s=zohoarc; b=kz/Kf5oHdI0C6/IlomYSJo/xMryCk810jcdGg9/J0+MOElVLiimzg4vktnDDNk6yY3JjWisC27j5v958SOIiu2t5oFHNXotxxfp3pUWawTKhkdSCYK62aFT6I7a6o8nlk1UpsgfiVDWojaHpD6jVyZb2oZmTQSrogJllnEFB4/Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788551875; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=r/8sgL1kmjYvrAW1FDVUeoWzEXFnZJUmnqHjOyHtAU0=; b=VU8r3L6bqTDw8285OuNOjw0Am/yAh1oVssPwVUrG2j0JslJpcusB+2LKKm8RdIvIq8uWtL6Kzekm78g7aoQqBZCvJnGXdWf6ZwcGlVQeXffSTwByLvP7M430FxeYeFCduaBkK1eRmgBk/++TgyobXFGCJQVwgugfawe+AVKXxUw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788551875337896.3642911463094; Fri, 4 Sep 2026 12:57:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2a1X-0002xu-2E; Fri, 04 Sep 2026 15:56:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2a1V-0002xb-Kf for qemu-devel@nongnu.org; Fri, 04 Sep 2026 15:56:29 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2a1T-0007jj-Ii for qemu-devel@nongnu.org; Fri, 04 Sep 2026 15:56:29 -0400 Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 684HI8eU3521906 for ; Fri, 4 Sep 2026 19:56:26 GMT Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gg010hevd-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 04 Sep 2026 19:56:25 +0000 (GMT) Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-52ffe24490bso31457601cf.1 for ; Fri, 04 Sep 2026 12:56:25 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-910406871b6sm29117736d6.32.2026.09.04.12.56.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 12:56:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=r/8sgL1kmjY vrAW1FDVUeoWzEXFnZJUmnqHjOyHtAU0=; b=FcqAkbut/4+Sh7Cue0sVknJPaTW krwkrgLDCdPTsziMNnF1VBN83oc8OmhmK2eM+o3omXJ8YBn4usVVwvwJ+KnPJY1M ucNFoSb/c55CnWKr2DBLBOdQ/ZHqPrXe7Owr4mU+G6TQCoaJjW7kYZbHRCG1Fkg1 rTEuCrDwmmUzmaa8gH66ZhEc4KVLvcMUzZgb3K88gxcn6i1HVORWznurqZ8WsE7S dVvjABsW0ZuqpBVwsldM34QLa9lWC65LVK36vyg+dAcMB6OpBkEqRstS1Mxl7aQF xQwlLXp5utsaDak4EiSibi3U0tC8EUH3W1z06FQxJI33NcT6hc6TAARTWaw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788551785; x=1789156585; darn=nongnu.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:content-type; bh=r/8sgL1kmjYvrAW1FDVUeoWzEXFnZJUmnqHjOyHtAU0=; b=MD0Ekro/t4CSBIRBKVkkjbfDenpJ4PG9uvTsciJOYBVNggYAAon2J8UwhzcURbUqQZ vl7hAac40PYm7AvXuRA8zKBQxpdkmBVyw8jBSsmVqY6SYeSnGxpLFtsB5mAEJoF1SXCi Od5sDTuDa0nRe0TtFM/KcCibPsSYlguoSf2qTCAyBPF5+rM55gy3O9iJXo1bpHkisR// dq/EOLj8UCGK1Fhtqie08i55KWHu/2nUDDxGB3/gX7zifAZtzilbr+eYvZYqsnIP9yuP yMhbbwratnrPczQ0qFjOWXT2n5WhhIPWdmmo/xFBjTIH+FKSEeYdkipBa8AZ6EH62OPO iAkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788551785; x=1789156585; 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:content-type; bh=r/8sgL1kmjYvrAW1FDVUeoWzEXFnZJUmnqHjOyHtAU0=; b=ZQaJUxljnhRCiUXuVfN9Oec0RS7F9MGgqhy4FJZ2b2kKE1TRBCdk+tOe9EjzlAgGiC +aNksj6+8KgOPbmMxdrPasYBnOyoaMkxj0GfG2H3rm4xdWvOVmIal7dbotzx+VNWFlAV sFdetgD5CUBAzT7YmqnYp9ZvQsK4YfcEJ1dgISfEHagapSCcQ5jpqUh6HeHQb2a5PQsU tBmQNcXOZXs1+zOviVD35OPwkCKFc8rKkmvjMrRId1iH5xRylsov+tXRPO+gheshNP/H x2TrqSor0qR1J1L0CmBJX+Tumkf+c9aoAe03xpxOokt0YhQduiEro0EorkHLTVTLS9fp 4N3w== X-Gm-Message-State: AFuF++nAnR/pa4HkRf8/7Pwa5ZxqhDuVR3gBMvrDQzzhAZ6v0kXvOrfz wavUqd/pLvTkDl+vheie/iL3KQGpZURgy2/AaFhcjFf8lWQqBlAQj41aMDTYgFWDm10IsUs+Eg1 /Vwad/SQaagr4t9fNR4/lsC/54C87kJNzS6TwfzPF+7PJ6M6oQgmLmRsIpKQUR9Bsrw== X-Gm-Gg: AYBFou3GBgMd0lFSe73567xuAI6pN0Frls7630B4R6PNOONKc5WNawJTLlKkdxSjPnv wLrEnwxc7qTGLv1dD1DyFcSbGLmmMrg02m5mkpmiI7Izp+lSO/1gesCgZROu0BmCuiYl6yupPij ZTGO3w97UuMduJuLbuQZ5DVLuy5LhcdscZE9fvBv1TNoaIc+ej5ne9IAdjT3MoffIg0tU96730A SSNUPcAzwWTUYhBQatF1j+GDBaZFjMyLk/vhjV2LnqhB32F2jqwdhKqCyQ8AZHbIQDguma3E1fc neYyqa02mYXf/GmtixXbPel9d4kjVfnRUH/SdMnpQLhWgi8/ehK2Hqv6zVSkyZpGsriq1Mcig8A 9wFAoxtlGDy9EVO3lhXD6uh04e4VbX6+rKfId X-Received: by 2002:a05:622a:1cca:b0:52e:a24:ee52 with SMTP id d75a77b69052e-530544bf2f8mr99810941cf.0.1788551784634; Fri, 04 Sep 2026 12:56:24 -0700 (PDT) X-Received: by 2002:a05:622a:1cca:b0:52e:a24:ee52 with SMTP id d75a77b69052e-530544bf2f8mr99809841cf.0.1788551783823; Fri, 04 Sep 2026 12:56:23 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, andrew.jones@oss.qualcomm.com, leif.lindholm@oss.qualcomm.com, Daniel Henrique Barboza , Icenowy Zheng , Matheus Ferst , Palmer Dabbelt Subject: [PATCH v10 2/5] target/riscv: add riscv-server-ref CPU Date: Fri, 4 Sep 2026 16:56:07 -0300 Message-ID: <20260904195610.964829-3-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260904195610.964829-1-daniel.barboza@oss.qualcomm.com> References: <20260904195610.964829-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDE4MiBTYWx0ZWRfX3Ou0uS5e6Oy7 Ei8gTM0u89wfA7tdZWwFPkbb7l4BX4NjCR1IVp35Pyd7D1EBjYiCwIaFQesuuFhG/aSh+apiEFZ 3PhO0XGOwMdWAPE3R6Qse8VMXbBE5whpe+iUdK0yzTDbhkr0u7VJ7Pqr8jn8kLjY0PBjxfvXPfN +0CmhnOlQVFeh1VMTb9YDMv8sxfAdzQ+msIt/2kDFxlaZGrJUdgdnm1UCZ72WR2DxhlGWOd9roW cbiSEBD9KuAtG2Ui8NkA7KdNDZARSXM2XubBXKSn/qu7ZAk8SaOMagMN3avVWxmJYns4KjKXeV6 vmXCWARpWCkn3VVDuFuG4jbHmIZJXoMXHxtUwr++JxIydsWYs8Xbpy5Wsx8AC249ZYfd4mDqmZ9 chsJRgVdXvU6eTy93hp6jHCEWEalWazEWIWWYNOm1Sod8LQlr2zj5DfwsRUAusNk1JJEog5W4MZ 0HL5rFC05S0uZrooWLg== X-Authority-Analysis: v=2.4 cv=YNavDxGx c=1 sm=1 tr=0 ts=6a9b2269 cx=c_pps a=WeENfcodrlLV9YRTxbY/uA==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=V1jnuoLLAAAA:20 a=EUspDBNiAAAA:8 a=JF9118EUAAAA:8 a=PXcuKL70AAAA:8 a=FRSEYCzRAAAA:8 a=zLUtPzHEVTZWnbMtJKMA:9 a=kacYvNCVWA4VmyqE58fU:22 a=xVlTc564ipvMDusKsbsT:22 a=1qLaeP4TCVy2vqIEy19U:22 a=H4N_Y-AU75W7NKDNhZlT:22 a=bA3UWDv6hWIuX7UZL3qL:22 X-Proofpoint-ORIG-GUID: Ntw35RlnuQsDlQtYiARvyvPHNvpomo0s X-Proofpoint-GUID: Ntw35RlnuQsDlQtYiARvyvPHNvpomo0s X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDE4MiBTYWx0ZWRfX8mjwcOHdocpK xEkW1x1j/kPOzE8aX1RjSutFHx+p3j6e/YJFsmnzPMtXSE6LeoDBwmnN3GkhzTs+hzgAH9tEonm t85nEfMaTTnPcye0WfZ0jF8TeS5dOdA= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_05,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 suspectscore=0 adultscore=0 impostorscore=0 malwarescore=0 spamscore=0 bulkscore=0 priorityscore=1501 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040182 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1788551877013158500 Content-Type: text/plain; charset="utf-8" The harts requirements of RISC-V server platform [1] require RVA23 ISA profile support and others. We're going for a profile-based implementation, instead of a regular CPU that can inherit RVA23, to allow future CPUs to use it internally as a starting base for their own extension sets. There's also a new 'rvserver-ref-1.0' flag that can be used to set the extensions in the command line for other CPUs, which can be used for testing/debugging purposes. Note that for all intents and purposes "riscv-server-ref" is a regular CPU and no, we're not trying to set a precedent of calling the riscv server platform spec a profile. [1] defines in rule SEE_020 that we must support at least 11 debug triggers (4 for insn address, 4 for insn load/store, 1 for icount, one for int, one for excp). We're going for the minimum. If more triggers are needed users can set any trigger amount with: -cpu riscv-server-ref,trigger-count=3DN Note that N must be <=3D 128. [1] https://github.com/riscv-non-isa/riscv-server-platform/blob/main/server= _platform_requirements.adoc Suggested-by: Icenowy Zheng Signed-off-by: Daniel Henrique Barboza Reviewed-by: Alistair Francis Reviewed-by: Matheus Ferst Reviewed-by: Chao Liu Reviewed-by: Sunil V L --- target/riscv/cpu-qom.h | 1 + target/riscv/cpu.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/target/riscv/cpu-qom.h b/target/riscv/cpu-qom.h index 1a28f1369c..61234842e3 100644 --- a/target/riscv/cpu-qom.h +++ b/target/riscv/cpu-qom.h @@ -42,6 +42,7 @@ #define TYPE_RISCV_CPU_RVA22S64 RISCV_CPU_TYPE_NAME("rva22s64") #define TYPE_RISCV_CPU_RVA23U64 RISCV_CPU_TYPE_NAME("rva23u64") #define TYPE_RISCV_CPU_RVA23S64 RISCV_CPU_TYPE_NAME("rva23s64") +#define TYPE_RISCV_CPU_RVSERVER_REF RISCV_CPU_TYPE_NAME("riscv-server-= ref") #define TYPE_RISCV_CPU_IBEX RISCV_CPU_TYPE_NAME("lowrisc-ibex") #define TYPE_RISCV_CPU_SHAKTI_C RISCV_CPU_TYPE_NAME("shakti-c") #define TYPE_RISCV_CPU_SIFIVE_E RISCV_CPU_TYPE_NAME("sifive-e") diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 185474a8cf..b5a75fbc1c 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -2417,11 +2417,35 @@ static RISCVCPUProfile RVA23S64 =3D { } }; =20 +/* + * The riscv-server-ref spec isn't a profile per se but its + * CPU definition can be modelled as a profile that extends + * RVA23, with additional things on top of it, and allowing + * future CPUs to derive from it via + * ".profile =3D &RVServerRef1_0;". + */ +static RISCVCPUProfile RVServerRef1_0 =3D { + .s_parent =3D &RVA23S64, + .name =3D "rvserver-ref-1.0", + .satp_mode =3D VM_1_10_SV48, + .ext_offsets =3D { + CPU_CFG_OFFSET(ext_zkr), + CPU_CFG_OFFSET(ext_sdtrig), + CPU_CFG_OFFSET(ext_ssaia), + CPU_CFG_OFFSET(ext_ssccfg), + /* ssstrict is always enabled for PRIV_VER_1_12 */ + + RISCV_PROFILE_EXT_LIST_END + } +}; + + RISCVCPUProfile *riscv_profiles[] =3D { &RVA22U64, &RVA22S64, &RVA23U64, &RVA23S64, + &RVServerRef1_0, NULL, }; =20 @@ -3759,6 +3783,13 @@ static const TypeInfo riscv_cpu_type_infos[] =3D { #endif ), =20 + DEFINE_RISCV_CPU(TYPE_RISCV_CPU_RVSERVER_REF, TYPE_RISCV_BARE_CPU, + .profile =3D &RVServerRef1_0, + .misa_mxl_max =3D MXL_RV64, + .cfg.max_satp_mode =3D VM_1_10_SV57, + .num_triggers =3D 11, + ), + #if defined(CONFIG_TCG) && !defined(CONFIG_USER_ONLY) DEFINE_RISCV_CPU(TYPE_RISCV_CPU_BASE128, TYPE_RISCV_DYNAMIC_CPU, .cfg.max_satp_mode =3D VM_1_10_SV57, --=20 2.43.0 From nobody Sat Sep 26 20:01:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1788551873; cv=none; d=zohomail.com; s=zohoarc; b=BDk0TRscKVQbOejIbvzfotpM0RdiYSDZXptpEwtq4EZf1usaA1sjbKxWaw094i4Atj76KfRWBMb63hz24MAJu4GB2tsC0TP6eczq6/3iK+GO7jPOG7J5fVulc4cuwy5xSeCtBOvk1/CO99aOyYjpCJ69DKutrOSWUo1oJOqK0/g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788551873; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=KNBLI6fb30+8sx4rNv98jUZ8OnzIGyeokF4MtZqJIIg=; b=U1WQ8zYvOIXNQoYEckQU6Wh9Pz02o5Gu5EqXR2GD7u7Nx692g11fm5SIjdsVeNn/dFFKk1K/sCmwDmPVlFnr6EUYdHmUCeY+bvMmKk22cGYVKeDawAzzxgzN3yilaBgi4LfYPJfMsTFeXDiAdlAkaj9fwNSvfoHP33Gvhs61J3Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788551873548795.5508299147798; Fri, 4 Sep 2026 12:57:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2a1c-0002zl-Ux; Fri, 04 Sep 2026 15:56:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2a1b-0002zI-IQ for qemu-devel@nongnu.org; Fri, 04 Sep 2026 15:56:35 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2a1Y-0007kC-2x for qemu-devel@nongnu.org; Fri, 04 Sep 2026 15:56:35 -0400 Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 684HI3qo548685 for ; Fri, 4 Sep 2026 19:56:31 GMT Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gg0121s6x-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 04 Sep 2026 19:56:30 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-51c0e702df8so42909811cf.2 for ; Fri, 04 Sep 2026 12:56:30 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-910406871b6sm29117736d6.32.2026.09.04.12.56.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 12:56:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=KNBLI6fb30+ 8sx4rNv98jUZ8OnzIGyeokF4MtZqJIIg=; b=n2mMGJDpACTArRoAHUl3PBd/9AV 8pnmm4rHGsIOD1ca1JpVOnRmjaB7f+nBG2MsnVo6p4fKuWjtA9MVYFpMamcXw5uM IQi4HEk5gkipcD8Pl1Y1U7u19J5QlgSE1f2wVkHYaiQrU6aDvhHU6qpIdNpNuumz ZMIh8fZdJKGczfTSm22tohCOycCc0T2PW88diVp4FSV4ROffxzCaf9s3vE6CGHIX zAfIa+vAbWQhOyDjsjso19G/K+RvDq2XHezteqmcQ6bdfWJlFO2B1lJJw64im53S +hty2nsTT5gsVES0uJlszjby8X7jRHeqeZAfQlp5M+5x9VFkXKYqT1B7VpQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788551790; x=1789156590; darn=nongnu.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:content-type; bh=KNBLI6fb30+8sx4rNv98jUZ8OnzIGyeokF4MtZqJIIg=; b=JLFK/NNefqhztFb973k20Q2n+UOG9GSlmtqEzBMJC6kDnzMALkW5+fAiZnIwY2PwNa txTUVW45QklVVP2Y/KqvzAMa2kbPkvMd9rPfIo/Ojrg9wRcIS70D/PZO1GHJQvSQr+72 UQvFWcsVkASyvQkooQvRpLj4ZC6FEXW+18M53YmClstqCn8tI8DAbOqxmmoe1FkWWPco ee0cUL9sW1eva30dHcsObEs5DO79Oo5+MqMPPuZFjOx8C/J+y0GR8AOooXRu1bipLdB1 0kr/ATuVeu1ECDqfObnfsiU+BDObvCnUDnMRE8568/Dky5lghkmwiQ1CyibJ/bTc6wVu aSwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788551790; x=1789156590; 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:content-type; bh=KNBLI6fb30+8sx4rNv98jUZ8OnzIGyeokF4MtZqJIIg=; b=Phlgrgqm6E3zZZXbisGk6gbY7fUXFcu7NdGWkCWPdkXMdypCahMujyZBJ7mRttWSys QV5nEkogijuaFd4GgHJYhqbk5jYKAZxze/cSflwlTesRiBTJJRgFompkcr+BERroEkY0 mSxqGAykqugX/Ixcac5ZSIVlVxhduQ9tSGfayY12b96mXh7pJ5y5ejxhOVcF816lIFvD U576C+h74umSaPy+CWjnWZmi0AB/Wt9Q0cEXadlOTYi6kac6szB1IHpBbGfbVWwn5mrg SU+dyAB+e+7X1ik3sdEwNs+edVe+4k3krZAwOzuiORv6m/KiDrSFk5g/TbHJRbpwpWjS f9lA== X-Gm-Message-State: AFuF++lSDuj+fwSjqWBWP9sgHd9cFSY2c7HCXEPEP1t/0XB4EV2ywt93 WcHPO+lVsygzqoTMr0jmpViKlp3EG+3C+IqbUnmDWkn96DwtEBIWnPrxUGk+7Xca5/9AhYO+Th8 GRKD3Cja40YMgFQ3/AbrCwGpUGrnanL9tLBwfS+MQEVQtcfxpPVrubr++Tib+FAhTXQ== X-Gm-Gg: AYBFou1t4AY9jU5GCJIp3XPTf2oI4hpqc3cr5j6UTlsW8g9PYGuKOtQpYtLo1YB+2nt kcZePfXBnq584DyNPTP0iCCQRGEpYmhG8qD92nOuJZO+hnaERQ5djVZ88MWJIayi96mw3h0ea9A r1XgeXxS+IeA7rBBIEm9SyrxArdZ+vp1QjeK7GohrYnarvy8OscuO2Jl2RV3dheqnk9joZmvPcG cbnmeeESNGhtkazFlKSGs8IHNd0UnHl95LN/zoUedoOmdOi6iUgZqzqKtzRy1C37MhnKMK3lfcJ +lpGAoMRWk4Qxrp/9dja2Q5g2a2NjW4bTuJVKgDM+7JzZmmrUHpCueAbQWvFU+CIAsjYSTSobtP W49ULL+4Itz6UbJwYagtQxsZPMVto8w/Uzrdf X-Received: by 2002:ad4:5c42:0:b0:90e:95d0:927a with SMTP id 6a1803df08f44-9103ef73d55mr96971946d6.6.1788551787926; Fri, 04 Sep 2026 12:56:27 -0700 (PDT) X-Received: by 2002:ad4:5c42:0:b0:90e:95d0:927a with SMTP id 6a1803df08f44-9103ef73d55mr96970806d6.6.1788551786846; Fri, 04 Sep 2026 12:56:26 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, andrew.jones@oss.qualcomm.com, leif.lindholm@oss.qualcomm.com, Daniel Henrique Barboza , Nutty Liu , Paolo Bonzini , Palmer Dabbelt Subject: [PATCH v10 3/5] hw/riscv: server platform reference machine Date: Fri, 4 Sep 2026 16:56:08 -0300 Message-ID: <20260904195610.964829-4-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260904195610.964829-1-daniel.barboza@oss.qualcomm.com> References: <20260904195610.964829-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDE4MiBTYWx0ZWRfX0M5Yzi1x9XBH bADNcCgH8RxDLFC/TC2JEKETP1h2Ww2dNQeUQA3e6x90+FVciFjgBtUBZV3+/3BOXFhhxCXVHIu HhVO4lMdd5GqHRHEhhQqDOhk+qOvbto= X-Proofpoint-GUID: ayqop70r1kf5fuJSgqCGke1C0c1ThWHN X-Authority-Analysis: v=2.4 cv=LreiDHdc c=1 sm=1 tr=0 ts=6a9b226e cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=NEAV23lmAAAA:8 a=NLiCwHATAAAA:8 a=EUspDBNiAAAA:8 a=69EAbJreAAAA:8 a=FRSEYCzRAAAA:8 a=C_ql9cbwDrEbyVCwxTEA:9 a=2KoRbIiLB8rUyhBb:21 a=uxP6HrT_eTzRwkO_Te1X:22 a=F9tHCgz3TLBaZgltkx5D:22 a=H4N_Y-AU75W7NKDNhZlT:22 X-Proofpoint-ORIG-GUID: ayqop70r1kf5fuJSgqCGke1C0c1ThWHN X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDE4MiBTYWx0ZWRfX8dm8zAEkoNyP bSwhN1dsDKeXdeEKMVLtFc/8BYlokkhX+UGFVMu3gR4Zjo/Qdrx4DF2fysSLcubYWWjaTsBf8s8 zI7cDih4nP8Ssn/NhUXT8qRvjtvin5qg1P1n+Nn+d/Bg7U5df6BDAU3IFk8aq4SFPCPIQSQLzpw 8n1L9PaZdb5SQUnhdACsHwopTx5TS5pSuzbzn8ena1NJY0NYxzGASB+y34ST67YO1qxI1Nkkygq /jKCNsS545pHVZZFb29ddfz4+cxUrfTh6bRcG/Sn5TfJ1fI5XjSnhxQ1ActL4CGYUQt6xwrGAq6 nYBVAyQoWV6b5kDjifrUFajW+TFOKWMMkJugeHnyirbQ3YQCjt17JwABTKgC2663pOzvcQeGd0x 5TFt0EC+MUxmeq0ybT16cDAO0FgAV41PMkbgV1NIIrn4mvixCyKFngXtqIh8fnoP6F2gEbE3JfB U0FMmTBy/UTkvhpMIYw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_05,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 bulkscore=0 phishscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 malwarescore=0 lowpriorityscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040182 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1788551876936158500 Content-Type: text/plain; charset="utf-8" The RISC-V Server Platform specification [1] defines a standardized set of hardware and software capabilities, that portable system software, such as OS and hypervisors can rely on being present in a RISC-V server platform. The main features included in this emulation are: - Based on riscv virt machine type; - A new memory map as close as virt machine as possible; - An always present IOMMU platform device (riscv-iommu-sys) that uses IRQs 36 to 39, one IRQ for queue, similar to the 'virt' board; - AIA; - PCIe AHCI; - PCIe NIC; - No virtio device; - No fw_cfg device; - No ACPI table provided; - Only minimal device tree nodes; - a platform bus for TPM support. A note about TPM support: TPM devices in QEMU comes usually in two flavors - emulated or passthrough. A passthrough device requires a host TPM device that the QEMU process can borrow and it's usually coupled with KVM acceleration. To use the TPM emulator we'll need help from an external TPM emulator called swtpm. More info can be found in [2]. For our purposes this is a process that, if running Ubuntu, can be installed via 'swtpm' package. We'll go back to it shortly. For now, adding support for the emulated TPM device 'tpm-tis' (other TPM flavors might work as well, 'tpm-tis' is the one tested with this work) requires a platform bus. Adding a platform bus will open the door for more devices to be added in the board. This is ok - a reference board isn't a restricted board and users are free to add devices at their leisure. Here's how to use tpm-tis with the riscv-server-ref board: - in a separated shell/term run 'swtpm' (--log is optional): $ mkdir /tmp/mytpm1 $ swtpm socket --tpmstate dir=3D/tmp/mytpm1 \ --ctrl type=3Dunixio,path=3D/tmp/mytpm1/swtpm-sock \ --tpm2 \ --log level=3D20 Then start QEMU with: $ qemu-system-riscv64 -M riscv-server-ref (...) \ -chardev socket,id=3Dchrtpm,path=3D/tmp/mytpm1/swtpm-sock \ -tpmdev emulator,id=3Dtpm0,chardev=3Dchrtpm\ -device tpm-tis-device,tpmdev=3Dtpm0 [1] https://github.com/riscv-non-isa/riscv-server-platform [2] https://qemu-project.gitlab.io/qemu/specs/tpm.html Signed-off-by: Daniel Henrique Barboza Reviewed-by: Nutty Liu Reviewed-by: Chao Liu Reviewed-by: Sunil V L --- configs/devices/riscv64-softmmu/default.mak | 1 + hw/riscv/Kconfig | 16 + hw/riscv/meson.build | 1 + hw/riscv/server_platform_ref.c | 769 ++++++++++++++++++++ 4 files changed, 787 insertions(+) create mode 100644 hw/riscv/server_platform_ref.c diff --git a/configs/devices/riscv64-softmmu/default.mak b/configs/devices/= riscv64-softmmu/default.mak index a8e4d0ab33..ae3f62e2d4 100644 --- a/configs/devices/riscv64-softmmu/default.mak +++ b/configs/devices/riscv64-softmmu/default.mak @@ -9,6 +9,7 @@ # CONFIG_SIFIVE_E=3Dn # CONFIG_SIFIVE_U=3Dn # CONFIG_RISCV_VIRT=3Dn +# CONFIG_RISCV_SERVER_PLATFORM_REF=3Dn # CONFIG_MICROCHIP_PFSOC=3Dn # CONFIG_SHAKTI_C=3Dn # CONFIG_XIANGSHAN_KUNMINGHU=3Dn diff --git a/hw/riscv/Kconfig b/hw/riscv/Kconfig index d06ac26648..da59eb2155 100644 --- a/hw/riscv/Kconfig +++ b/hw/riscv/Kconfig @@ -69,6 +69,22 @@ config RISCV_VIRT select ACPI select ACPI_PCI =20 +config RISCV_SERVER_PLATFORM_REF + bool + default y + depends on RISCV64 + imply TPM_TIS_SYSBUS + select RISCV_NUMA + select GOLDFISH_RTC + select PCI + select PCI_EXPRESS_GENERIC_BRIDGE + select PFLASH_CFI01 + select SERIAL + select RISCV_ACLINT + select RISCV_APLIC + select RISCV_IMSIC + select RISCV_IOMMU + config SHAKTI_C bool default y diff --git a/hw/riscv/meson.build b/hw/riscv/meson.build index 7aa3c1578d..cc5a019f7c 100644 --- a/hw/riscv/meson.build +++ b/hw/riscv/meson.build @@ -7,6 +7,7 @@ riscv_ss.add(when: 'CONFIG_RISCV_NUMA', if_true: files('num= a.c')) riscv_ss.add(files('riscv_hart.c')) riscv_ss.add(when: 'CONFIG_OPENTITAN', if_true: files('opentitan.c')) riscv_ss.add(when: 'CONFIG_RISCV_VIRT', if_true: files('virt.c')) +riscv_ss.add(when: 'CONFIG_RISCV_SERVER_PLATFORM_REF', if_true: files('ser= ver_platform_ref.c')) riscv_ss.add(when: 'CONFIG_SHAKTI_C', if_true: files('shakti_c.c')) riscv_ss.add(when: 'CONFIG_SIFIVE_E', if_true: files('sifive_e.c')) riscv_ss.add(when: 'CONFIG_SIFIVE_U', if_true: files('sifive_u.c')) diff --git a/hw/riscv/server_platform_ref.c b/hw/riscv/server_platform_ref.c new file mode 100644 index 0000000000..cc74bf06a1 --- /dev/null +++ b/hw/riscv/server_platform_ref.c @@ -0,0 +1,769 @@ +/* + * QEMU RISC-V Server Platform Reference Board (riscv-server-ref) + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "qemu/units.h" +#include "qemu/error-report.h" +#include "qemu/guest-random.h" +#include "qapi/error.h" +#include "qapi/qapi-visit-common.h" +#include "hw/core/boards.h" +#include "hw/core/platform-bus.h" +#include "hw/core/loader.h" +#include "hw/core/sysbus.h" +#include "hw/core/qdev-properties.h" +#include "hw/char/serial.h" +#include "hw/block/flash.h" +#include "hw/ide/pci.h" +#include "hw/ide/ahci-pci.h" +#include "hw/pci/pci.h" +#include "hw/pci-host/gpex.h" +#include "hw/core/sysbus-fdt.h" +#include "hw/riscv/riscv_hart.h" +#include "hw/riscv/boot.h" +#include "hw/riscv/device-common.h" +#include "hw/riscv/fdt-common.h" +#include "hw/riscv/numa.h" +#include "hw/riscv/iommu.h" +#include "hw/riscv/riscv-iommu.h" +#include "hw/riscv/riscv-iommu-bits.h" +#include "hw/intc/riscv_aclint.h" +#include "hw/intc/riscv_aplic.h" +#include "hw/intc/riscv_imsic.h" +#include "chardev/char.h" +#include "hw/char/serial-mm.h" +#include "system/device_tree.h" +#include "system/runstate.h" +#include "system/system.h" +#include "system/kvm.h" +#include "system/tcg.h" +#include "kvm/kvm_riscv.h" +#include "system/tpm.h" +#include "system/qtest.h" +#include "target/riscv/cpu.h" +#include "net/net.h" + +#include "aia.h" + +#define RVSERVER_CPUS_MAX_BITS 9 +#define RVSERVER_CPUS_MAX (1 << RVSERVER_CPUS_MAX_BITS) +#define RVSERVER_SOCKETS_MAX_BITS 2 +#define RVSERVER_SOCKETS_MAX (1 << RVSERVER_SOCKETS_MAX_BITS) + +#define RVSERVER_IRQCHIP_NUM_MSIS 255 +#define RVSERVER_IRQCHIP_NUM_SOURCES 96 +#define RVSERVER_IRQCHIP_NUM_PRIO_BITS 3 +#define RVSERVER_IRQCHIP_MAX_GUESTS_BITS 3 +#define RVSERVER_IRQCHIP_MAX_GUESTS \ + ((1U << RVSERVER_IRQCHIP_MAX_GUESTS_BITS) - 1U) + +#define NUM_SATA_PORTS 6 + +#define SYSCON_RESET 0x1 +#define SYSCON_POWEROFF 0x2 + +#define RVSERVER_PLATFORM_BUS_NUM_IRQS 8 + +#define TYPE_RISCV_SERVER_REF_MACHINE MACHINE_TYPE_NAME("riscv-server-ref") +OBJECT_DECLARE_SIMPLE_TYPE(RISCVServerRefMachineState, RISCV_SERVER_REF_MA= CHINE) + +struct RISCVServerRefMachineState { + /*< private >*/ + MachineState parent; + + /*< public >*/ + Notifier machine_done; + RISCVHartArrayState soc[RVSERVER_SOCKETS_MAX]; + DeviceState *irqchip[RVSERVER_SOCKETS_MAX]; + PFlashCFI01 *flash[2]; + + int fdt_size; + int aia_guests; + const MemMapEntry *memmap; + + DeviceState *platform_bus_dev; +}; + +enum { + RVSERVER_DEBUG, + RVSERVER_MROM, + RVSERVER_RESET_SYSCON, + RVSERVER_RTC, + RVSERVER_IOMMU_SYS, + RVSERVER_ACLINT, + RVSERVER_APLIC_M, + RVSERVER_APLIC_S, + RVSERVER_UART0, + RVSERVER_IMSIC_M, + RVSERVER_IMSIC_S, + RVSERVER_FLASH, + RVSERVER_DRAM, + RVSERVER_PCIE_MMIO, + RVSERVER_PCIE_PIO, + RVSERVER_PLATFORM_BUS, + RVSERVER_PCIE_ECAM, + RVSERVER_PCIE_MMIO_HIGH +}; + +enum { + RVSERVER_UART0_IRQ =3D 10, + RVSERVER_RTC_IRQ =3D 11, + RVSERVER_PCIE_IRQ =3D 32, /* 32 to 35 */ + IOMMU_SYS_IRQ =3D 36, /* 36 to 39 */ + RVSERVER_PLATFORM_BUS_IRQ =3D 40, /* 40 to 48 */ +}; + +/* + * The server soc reference machine physical address space used by some of= the + * devices namely ACLINT, APLIC and IMSIC depend on number of Sockets, num= ber + * of CPUs, and number of IMSIC guest files. + * + * Various limits defined by RVSERVER_SOCKETS_MAX_BITS, RVSERVER_CPUS_MAX_= BITS, + * and RVSERVER_IRQCHIP_MAX_GUESTS_BITS are tuned for maximum utilization = of + * server reference machine physical address space. + */ + +#define RVSERVER_IMSIC_GROUP_MAX_SIZE (1U << IMSIC_MMIO_GROUP_MIN_SHI= FT) +#if RVSERVER_IMSIC_GROUP_MAX_SIZE < \ + IMSIC_GROUP_SIZE(RVSERVER_CPUS_MAX_BITS, RVSERVER_IRQCHIP_MAX_GUESTS_B= ITS) +#error "Can't accomodate single IMSIC group in address space" +#endif + +#define RVSERVER_IMSIC_MAX_SIZE (RVSERVER_SOCKETS_MAX * \ + RVSERVER_IMSIC_GROUP_MAX_SIZE) +#if 0x4000000 < RVSERVER_IMSIC_MAX_SIZE +#error "Can't accomodate all IMSIC groups in address space" +#endif + +static const MemMapEntry rvserver_ref_memmap[] =3D { + [RVSERVER_DEBUG] =3D { 0x0, 0x100 }, + [RVSERVER_MROM] =3D { 0x1000, 0xf000 }, + [RVSERVER_RESET_SYSCON] =3D { 0x100000, 0x1000 }, + [RVSERVER_RTC] =3D { 0x101000, 0x1000 }, + [RVSERVER_IOMMU_SYS] =3D { 0x102000, 0x1000 }, + [RVSERVER_ACLINT] =3D { 0x2000000, 0x10000 }, + [RVSERVER_PCIE_PIO] =3D { 0x3000000, 0x10000 }, + [RVSERVER_PLATFORM_BUS] =3D { 0x4000000, 0x2000000 }, + [RVSERVER_APLIC_M] =3D { 0xc000000, APLIC_SIZE(RVSERVER_CPUS_M= AX) }, + [RVSERVER_APLIC_S] =3D { 0xd000000, APLIC_SIZE(RVSERVER_CPUS_M= AX) }, + [RVSERVER_UART0] =3D { 0x10000000, 0x100 }, + [RVSERVER_FLASH] =3D { 0x20000000, 0x4000000 }, + [RVSERVER_IMSIC_M] =3D { 0x24000000, RVSERVER_IMSIC_MAX_SIZE }, + [RVSERVER_IMSIC_S] =3D { 0x28000000, RVSERVER_IMSIC_MAX_SIZE }, + [RVSERVER_PCIE_ECAM] =3D { 0x30000000, 0x10000000 }, + [RVSERVER_PCIE_MMIO] =3D { 0x40000000, 0x40000000 }, + [RVSERVER_DRAM] =3D { 0x80000000, 0xff80000000ull }, + [RVSERVER_PCIE_MMIO_HIGH] =3D { 0x10000000000ull, 0x10000000000ull }, +}; + +#define RVSERVER_FLASH_SECTOR_SIZE (256 * KiB) + +static void rvserver_flash_maps(RISCVServerRefMachineState *s, + MemoryRegion *sysmem) +{ + hwaddr flashsize =3D rvserver_ref_memmap[RVSERVER_FLASH].size / 2; + hwaddr flashbase =3D rvserver_ref_memmap[RVSERVER_FLASH].base; + + riscv_init_flash_map(s->flash[0], flashbase, flashsize, + sysmem, RVSERVER_FLASH_SECTOR_SIZE); + riscv_init_flash_map(s->flash[1], flashbase + flashsize, flashsize, + sysmem, RVSERVER_FLASH_SECTOR_SIZE); +} + +static void create_fdt_pmu(RISCVServerRefMachineState *s) +{ + g_autofree char *pmu_name =3D g_strdup_printf("/pmu"); + MachineState *ms =3D MACHINE(s); + RISCVCPU *hart =3D &s->soc[0].harts[0]; + + qemu_fdt_add_subnode(ms->fdt, pmu_name); + qemu_fdt_setprop_string(ms->fdt, pmu_name, "compatible", "riscv,pmu"); + riscv_pmu_generate_fdt_node(ms->fdt, hart->pmu_avail_ctrs, pmu_name); +} + +static void create_fdt_sockets(RISCVServerRefMachineState *s, + const MemMapEntry *memmap, + uint32_t *phandle, + uint32_t *irq_mmio_phandle, + uint32_t *irq_pcie_phandle, + uint32_t *msi_pcie_phandle) +{ + int socket, phandle_pos; + MachineState *ms =3D MACHINE(s); + uint32_t msi_m_phandle =3D 0, msi_s_phandle =3D 0; + uint32_t xplic_phandles[MAX_NODES]; + g_autofree uint32_t *intc_phandles =3D NULL; + int socket_count =3D riscv_socket_count(ms); + bool numa_enabled =3D riscv_numa_enabled(ms); + bool is_32_bit =3D riscv_is_32bit(&s->soc[0]); + IMSICFdtProps imsic_fdt_props; + APLICFdtProps aplic_fdt_props; + ACLINTFdtProps aclint_props; + + riscv_fdt_create_cpu_socket_subnode(ms->fdt, + kvm_enabled() ? kvm_riscv_get_timebase_frequency(&s->soc->harts[0]) + : RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ); + + intc_phandles =3D g_new0(uint32_t, ms->smp.cpus); + + aclint_props.clint =3D &memmap[RVSERVER_ACLINT]; + aclint_props.aia_type =3D AIA_TYPE_APLIC_IMSIC; + aclint_props.numa_enabled =3D numa_enabled; + + phandle_pos =3D ms->smp.cpus; + for (socket =3D (socket_count - 1); socket >=3D 0; socket--) { + hwaddr memaddr =3D s->memmap[RVSERVER_DRAM].base + + riscv_socket_mem_offset(ms, socket); + uint64_t memsize =3D riscv_socket_mem_size(ms, socket); + + phandle_pos -=3D s->soc[socket].num_harts; + + riscv_create_fdt_socket_cpus(ms->fdt, (&s->soc[socket])->harts, so= cket, + s->soc[socket].num_harts, + s->soc[socket].hartid_base, + phandle, &intc_phandles[phandle_pos], + numa_enabled, is_32_bit); + + riscv_create_fdt_socket_memory(ms->fdt, memaddr, memsize, + socket, riscv_numa_enabled(ms)); + + aclint_props.socket =3D socket; + aclint_props.num_harts =3D s->soc[socket].num_harts; + riscv_create_fdt_socket_aclint(ms->fdt, &aclint_props, + &intc_phandles[phandle_pos]); + } + + imsic_fdt_props.soc =3D &s->soc; + imsic_fdt_props.socket_count =3D socket_count; + imsic_fdt_props.smp_cpus =3D ms->smp.cpus; + imsic_fdt_props.imsic_m_base =3D memmap[RVSERVER_IMSIC_M].base; + imsic_fdt_props.imsic_s_base =3D memmap[RVSERVER_IMSIC_S].base; + imsic_fdt_props.imsic_group_max_size =3D RVSERVER_IMSIC_GROUP_MAX_SIZE; + imsic_fdt_props.irqchip_num_msis =3D RVSERVER_IRQCHIP_NUM_MSIS; + imsic_fdt_props.aia_guests =3D s->aia_guests; + + riscv_create_fdt_imsic(ms->fdt, &imsic_fdt_props, phandle, intc_phandl= es, + &msi_m_phandle, &msi_s_phandle); + *msi_pcie_phandle =3D msi_s_phandle; + + aplic_fdt_props.aplic_m =3D !kvm_enabled() + ? &memmap[RVSERVER_APLIC_M] : NULL; + aplic_fdt_props.aplic_s =3D &memmap[RVSERVER_APLIC_S]; + aplic_fdt_props.platform_bus =3D &memmap[RVSERVER_PLATFORM_BUS]; + aplic_fdt_props.platform_bus_irq =3D RVSERVER_PLATFORM_BUS_IRQ; + aplic_fdt_props.num_harts =3D ms->smp.cpus; + aplic_fdt_props.numa_enabled =3D numa_enabled; + aplic_fdt_props.irqchip_num_sources =3D RVSERVER_IRQCHIP_NUM_SOURCES; + aplic_fdt_props.aia_type =3D AIA_TYPE_APLIC_IMSIC; + + phandle_pos =3D ms->smp.cpus; + for (socket =3D (socket_count - 1); socket >=3D 0; socket--) { + phandle_pos -=3D s->soc[socket].num_harts; + + aplic_fdt_props.socket =3D socket; + aplic_fdt_props.num_harts =3D s->soc[socket].num_harts; + riscv_create_fdt_socket_aplic(ms->fdt, &aplic_fdt_props, + msi_m_phandle, msi_s_phandle, phandl= e, + &intc_phandles[phandle_pos], + xplic_phandles); + } + + for (socket =3D 0; socket < socket_count; socket++) { + if (socket =3D=3D 0) { + *irq_mmio_phandle =3D xplic_phandles[socket]; + *irq_pcie_phandle =3D xplic_phandles[socket]; + } + if (socket =3D=3D 1) { + *irq_pcie_phandle =3D xplic_phandles[socket]; + } + } + + riscv_socket_fdt_write_distance_matrix(ms); +} + +static void finalize_fdt(RISCVServerRefMachineState *s) +{ + uint32_t phandle =3D 1, irq_mmio_phandle =3D 1, msi_pcie_phandle =3D 1; + uint32_t irq_pcie_phandle =3D 1, iommu_sys_phandle; + g_autofree char *name =3D NULL; + MachineState *ms =3D MACHINE(s); + + create_fdt_sockets(s, rvserver_ref_memmap, &phandle, &irq_mmio_phandle, + &irq_pcie_phandle, &msi_pcie_phandle); + + iommu_sys_phandle =3D riscv_create_fdt_riscv_iommu_sys(ms->fdt, + s->memmap[RVSERVER_IOMMU_SYS].bas= e, + s->memmap[RVSERVER_IOMMU_SYS].siz= e, + &phandle, irq_mmio_phandle, + msi_pcie_phandle, IOMMU_SYS_IRQ); + + riscv_create_fdt_pcie(ms->fdt, AIA_TYPE_APLIC_IMSIC, true, + &s->memmap[RVSERVER_PCIE_ECAM], + &s->memmap[RVSERVER_PCIE_PIO], + &s->memmap[RVSERVER_PCIE_MMIO], + &s->memmap[RVSERVER_PCIE_MMIO_HIGH], + irq_pcie_phandle, msi_pcie_phandle, + iommu_sys_phandle, RVSERVER_PCIE_IRQ); + + riscv_create_fdt_syscon(ms->fdt, &phandle, + rvserver_ref_memmap[RVSERVER_RESET_SYSCON].bas= e, + rvserver_ref_memmap[RVSERVER_RESET_SYSCON].siz= e, + SYSCON_RESET, SYSCON_POWEROFF, false); + + riscv_create_fdt_uart(ms->fdt, &rvserver_ref_memmap[RVSERVER_UART0], + RVSERVER_UART0_IRQ, AIA_TYPE_APLIC_IMSIC, + irq_mmio_phandle); + name =3D riscv_fdt_get_uart_nodename(rvserver_ref_memmap[RVSERVER_UART= 0].base); + qemu_fdt_setprop_string(ms->fdt, "/chosen", "stdout-path", name); + qemu_fdt_setprop_string(ms->fdt, "/aliases", "serial0", name); + + riscv_create_fdt_rtc(ms->fdt, &rvserver_ref_memmap[RVSERVER_RTC], + RVSERVER_RTC_IRQ, AIA_TYPE_APLIC_IMSIC, + irq_mmio_phandle); +} + +static void create_fdt(RISCVServerRefMachineState *s, + const MemMapEntry *memmap) +{ + MachineState *ms =3D MACHINE(s); + uint8_t rng_seed[32]; + g_autofree char *name =3D NULL; + + ms->fdt =3D riscv_create_board_device_tree(MACHINE_GET_CLASS(s)->desc, + "qemu,riscv-server-ref", + &s->fdt_size); + + /* + * This versioning scheme is for informing platform fw only. It is nei= ther: + * - A QEMU versioned machine type; a given version of QEMU will emula= te + * a given version of the platform. + * - A reflection of level of server platform support provided. + * + * machine-version-major: updated when changes breaking fw compatibili= ty + * are introduced. + * machine-version-minor: updated when features are added that don't b= reak + * fw compatibility. + * + * It's the same as the scheme in arm sbsa-ref. + */ + qemu_fdt_setprop_cell(ms->fdt, "/", "machine-version-major", 0); + qemu_fdt_setprop_cell(ms->fdt, "/", "machine-version-minor", 0); + + /* + * The "/soc/pci@..." node is needed for PCIE hotplugs + * that might happen before finalize_fdt(). + */ + name =3D g_strdup_printf("/soc/pci@%"HWADDR_PRIx, + s->memmap[RVSERVER_PCIE_ECAM].base); + qemu_fdt_add_subnode(ms->fdt, name); + + qemu_fdt_add_subnode(ms->fdt, "/chosen"); + qemu_fdt_add_subnode(ms->fdt, "/aliases"); + + /* Pass seed to RNG */ + qemu_guest_getrandom_nofail(rng_seed, sizeof(rng_seed)); + qemu_fdt_setprop(ms->fdt, "/chosen", "rng-seed", + rng_seed, sizeof(rng_seed)); + + riscv_create_fdt_flash(ms->fdt, rvserver_ref_memmap[RVSERVER_FLASH].ba= se, + rvserver_ref_memmap[RVSERVER_FLASH].size / 2); + create_fdt_pmu(s); + +} + +static void rvserver_init_pci_devices(RISCVServerRefMachineState *s, + DeviceState *gpex_host) +{ + MachineClass *mc =3D MACHINE_GET_CLASS(s); + PCIHostState *pci =3D PCI_HOST_BRIDGE(gpex_host); + PCIDevice *pdev_ahci; + AHCIPCIState *ich9; + DriveInfo *hd[NUM_SATA_PORTS]; + + pci_init_nic_devices(pci->bus, mc->default_nic); + + /* IDE disk setup. */ + pdev_ahci =3D pci_create_simple(pci->bus, -1, TYPE_ICH9_AHCI); + ich9 =3D ICH9_AHCI(pdev_ahci); + g_assert(ARRAY_SIZE(hd) =3D=3D ich9->ahci.ports); + ide_drive_get(hd, ich9->ahci.ports); + ahci_ide_create_devs(&ich9->ahci, hd); +} + +static uint64_t rvserver_reset_syscon_read(void *opaque, hwaddr addr, + unsigned size) +{ + return 0; +} + +static void rvserver_reset_syscon_write(void *opaque, hwaddr addr, + uint64_t val64, unsigned int size) +{ + switch (val64) { + case SYSCON_POWEROFF: + qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN); + return; + case SYSCON_RESET: + qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET); + return; + default: + break; + } +} + +static const MemoryRegionOps rvserver_reset_syscon_ops =3D { + .read =3D rvserver_reset_syscon_read, + .write =3D rvserver_reset_syscon_write, + .endianness =3D DEVICE_LITTLE_ENDIAN +}; + +static void rvserver_ref_machine_done(Notifier *notifier, void *data) +{ + RISCVServerRefMachineState *s =3D container_of( + notifier, RISCVServerRefMachineState, machine_done); + const MemMapEntry *memmap =3D rvserver_ref_memmap; + MachineState *machine =3D MACHINE(s); + hwaddr start_addr =3D memmap[RVSERVER_DRAM].base; + target_ulong firmware_end_addr, kernel_start_addr; + const char *firmware_name =3D riscv_default_firmware_name(&s->soc[0]); + uint64_t fdt_load_addr; + uint64_t kernel_entry =3D 0; + BlockBackend *pflash_blk0; + RISCVBootInfo boot_info; + + /* + * An user provided dtb must include everything, including + * dynamic sysbus devices. Our FDT needs to be finalized. + */ + if (machine->dtb =3D=3D NULL) { + finalize_fdt(s); + } + + riscv_boot_info_init(&boot_info, &s->soc[0]); + + firmware_end_addr =3D riscv_find_and_load_firmware(machine, &boot_info, + firmware_name, + &start_addr, NULL); + + pflash_blk0 =3D pflash_cfi01_get_blk(s->flash[0]); + if (pflash_blk0) { + if (machine->firmware && !strcmp(machine->firmware, "none")) { + /* + * Pflash was supplied but bios is none and not KVM guest, + * let's overwrite the address we jump to after reset to + * the base of the flash. + */ + start_addr =3D rvserver_ref_memmap[RVSERVER_FLASH].base; + } else { + /* + * Pflash was supplied but either KVM guest or bios is not non= e. + * In this case, base of the flash would contain S-mode payloa= d. + */ + riscv_setup_firmware_boot(machine); + kernel_entry =3D rvserver_ref_memmap[RVSERVER_FLASH].base; + } + } + + if (machine->kernel_filename && !kernel_entry) { + kernel_start_addr =3D riscv_calc_kernel_start_addr(&boot_info, + firmware_end_addr= ); + riscv_load_kernel(machine, &boot_info, kernel_start_addr, true, NU= LL); + kernel_entry =3D boot_info.image_low_addr; + } + + fdt_load_addr =3D riscv_compute_fdt_addr(memmap[RVSERVER_DRAM].base, + memmap[RVSERVER_DRAM].size, + machine, &boot_info); + + riscv_load_fdt(fdt_load_addr, machine->fdt); + + /* load the reset vector */ + riscv_setup_rom_reset_vec(machine, &s->soc[0], start_addr, + rvserver_ref_memmap[RVSERVER_MROM].base, + rvserver_ref_memmap[RVSERVER_MROM].size, + kernel_entry, + fdt_load_addr); + +} + +static bool rvserver_aclint_allowed(void) +{ + return tcg_enabled() || qtest_enabled(); +} + +static void rvserver_ref_machine_init(MachineState *machine) +{ + const MemMapEntry *memmap =3D rvserver_ref_memmap; + RISCVServerRefMachineState *s =3D RISCV_SERVER_REF_MACHINE(machine); + MemoryRegion *system_memory =3D get_system_memory(); + MemoryRegion *mask_rom =3D g_new(MemoryRegion, 1); + MemoryRegion *reset_syscon_io =3D g_new(MemoryRegion, 1); + DeviceState *mmio_irqchip, *pcie_irqchip, *gpex_host; + int i, base_hartid, hart_count; + int socket_count =3D riscv_socket_count(machine); + int imsic_bits =3D imsic_num_bits(s->aia_guests + 1); + + /* Check socket count limit */ + if (RVSERVER_SOCKETS_MAX < socket_count) { + error_report("number of sockets/nodes should be less than %d", + RVSERVER_SOCKETS_MAX); + exit(1); + } + + if (!rvserver_aclint_allowed()) { + error_report("'aclint' is only available with TCG acceleration"); + exit(1); + } + + s->memmap =3D rvserver_ref_memmap; + + /* Initialize sockets */ + mmio_irqchip =3D pcie_irqchip =3D NULL; + for (i =3D 0; i < socket_count; i++) { + g_autofree char *soc_name =3D g_strdup_printf("soc%d", i); + + if (!riscv_socket_check_hartids(machine, i)) { + error_report("discontinuous hartids in socket%d", i); + exit(1); + } + + base_hartid =3D riscv_socket_first_hartid(machine, i); + if (base_hartid < 0) { + error_report("can't find hartid base for socket%d", i); + exit(1); + } + + hart_count =3D riscv_socket_hart_count(machine, i); + if (hart_count < 0) { + error_report("can't find hart count for socket%d", i); + exit(1); + } + + object_initialize_child(OBJECT(machine), soc_name, &s->soc[i], + TYPE_RISCV_HART_ARRAY); + object_property_set_str(OBJECT(&s->soc[i]), "cpu-type", + machine->cpu_type, &error_abort); + object_property_set_int(OBJECT(&s->soc[i]), "hartid-base", + base_hartid, &error_abort); + object_property_set_int(OBJECT(&s->soc[i]), "num-harts", + hart_count, &error_abort); + sysbus_realize(SYS_BUS_DEVICE(&s->soc[i]), &error_fatal); + + /* Per-socket ACLINT MTIMER */ + riscv_aclint_mtimer_create(system_memory, + memmap[RVSERVER_ACLINT].base + i * RISCV_ACLINT_DEFAULT_MT= IMER_SIZE, + RISCV_ACLINT_DEFAULT_MTIMER_SIZE, + base_hartid, hart_count, + RISCV_ACLINT_DEFAULT_MTIMECMP, + RISCV_ACLINT_DEFAULT_MTIME, + RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ, true); + + /* Per-socket interrupt controller */ + s->irqchip[i] =3D riscv_create_aia(system_memory, true, s->aia_gue= sts, + IMSIC_HART_SIZE(0), + IMSIC_HART_SIZE(imsic_bits), + RVSERVER_IRQCHIP_NUM_SOURCES, + &s->memmap[RVSERVER_APLIC_M], + &s->memmap[RVSERVER_APLIC_S], + &s->memmap[RVSERVER_IMSIC_M], + &s->memmap[RVSERVER_IMSIC_S], + i, base_hartid, hart_count, + RVSERVER_IRQCHIP_NUM_MSIS, + RVSERVER_IRQCHIP_NUM_PRIO_BITS); + + /* Try to use different IRQCHIP instance based device type */ + if (i =3D=3D 0) { + mmio_irqchip =3D s->irqchip[i]; + pcie_irqchip =3D s->irqchip[i]; + } + if (i =3D=3D 1) { + pcie_irqchip =3D s->irqchip[i]; + } + } + + /* register system main memory (actual RAM) */ + memory_region_add_subregion(system_memory, memmap[RVSERVER_DRAM].base, + machine->ram); + + /* boot rom */ + memory_region_init_rom(mask_rom, NULL, "riscv_rvserver_ref_board.mrom", + memmap[RVSERVER_MROM].size, &error_fatal); + memory_region_add_subregion(system_memory, memmap[RVSERVER_MROM].base, + mask_rom); + + memory_region_init_io(reset_syscon_io, NULL, &rvserver_reset_syscon_op= s, + NULL, "reset_syscon_io", + memmap[RVSERVER_RESET_SYSCON].size); + memory_region_add_subregion(system_memory, + memmap[RVSERVER_RESET_SYSCON].base, + reset_syscon_io); + + gpex_host =3D riscv_gpex_pcie_init(system_memory, pcie_irqchip, + &rvserver_ref_memmap[RVSERVER_PCIE_EC= AM], + &rvserver_ref_memmap[RVSERVER_PCIE_MM= IO], + &rvserver_ref_memmap[RVSERVER_PCIE_MM= IO_HIGH], + &rvserver_ref_memmap[RVSERVER_PCIE_PI= O], + RVSERVER_PCIE_IRQ); + + /* Init nic devices and ICH9 AHCI */ + rvserver_init_pci_devices(s, gpex_host); + + s->platform_bus_dev =3D riscv_create_platform_bus(mmio_irqchip, + &s->memmap[RVSERVER_PL= ATFORM_BUS], + RVSERVER_PLATFORM_BUS_= IRQ, + RVSERVER_PLATFORM_BUS_= NUM_IRQS); + + serial_mm_init(system_memory, memmap[RVSERVER_UART0].base, + 0, qdev_get_gpio_in(mmio_irqchip, RVSERVER_UART0_IRQ), 399193, + serial_hd(0), DEVICE_LITTLE_ENDIAN); + + sysbus_create_simple("goldfish_rtc", memmap[RVSERVER_RTC].base, + qdev_get_gpio_in(mmio_irqchip, RVSERVER_RTC_IRQ)); + + for (i =3D 0; i < ARRAY_SIZE(s->flash); i++) { + /* Map legacy -drive if=3Dpflash to machine properties */ + pflash_cfi01_legacy_drive(s->flash[i], + drive_get(IF_PFLASH, 0, i)); + } + rvserver_flash_maps(s, system_memory); + + /* load/create device tree */ + if (machine->dtb) { + machine->fdt =3D load_device_tree(machine->dtb, &s->fdt_size); + if (!machine->fdt) { + error_report("load_device_tree() failed"); + exit(1); + } + } else { + create_fdt(s, memmap); + } + + riscv_create_iommu_sys(mmio_irqchip, s->memmap[RVSERVER_IOMMU_SYS].bas= e, + IOMMU_SYS_IRQ, false); + + s->machine_done.notify =3D rvserver_ref_machine_done; + qemu_add_machine_init_done_notifier(&s->machine_done); +} + +static void rvserver_ref_machine_instance_init(Object *obj) +{ + RISCVServerRefMachineState *s =3D RISCV_SERVER_REF_MACHINE(obj); + + s->flash[0] =3D riscv_flash_create(OBJECT(s), "riscv-server-ref.flash0= ", + "pflash0", RVSERVER_FLASH_SECTOR_S= IZE); + s->flash[1] =3D riscv_flash_create(OBJECT(s), "riscv-server-ref.flash1= ", + "pflash1", RVSERVER_FLASH_SECTOR_S= IZE); +} + +static char *rvserver_ref_get_aia_guests(Object *obj, Error **errp) +{ + RISCVServerRefMachineState *s =3D RISCV_SERVER_REF_MACHINE(obj); + char val[32]; + + sprintf(val, "%d", s->aia_guests); + return g_strdup(val); +} + +static void rvserver_ref_set_aia_guests(Object *obj, const char *val, + Error **errp) +{ + RISCVServerRefMachineState *s =3D RISCV_SERVER_REF_MACHINE(obj); + + s->aia_guests =3D atoi(val); + if (s->aia_guests < 0 || s->aia_guests > RVSERVER_IRQCHIP_MAX_GUESTS) { + error_setg(errp, "Invalid number of AIA IMSIC guests"); + error_append_hint(errp, "Valid values be between 0 and %d.\n", + RVSERVER_IRQCHIP_MAX_GUESTS); + } +} + +static HotplugHandler *rvserver_machine_get_hotplug_handler(MachineState *= ms, + DeviceState *d= ev) +{ + MachineClass *mc =3D MACHINE_GET_CLASS(ms); + + if (device_is_dynamic_sysbus(mc, dev)) { + return HOTPLUG_HANDLER(ms); + } + + return NULL; +} + +static void rvserver_machine_device_plug_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + RISCVServerRefMachineState *s =3D RISCV_SERVER_REF_MACHINE(hotplug_dev= ); + + if (s->platform_bus_dev) { + MachineClass *mc =3D MACHINE_GET_CLASS(s); + + if (device_is_dynamic_sysbus(mc, dev)) { + platform_bus_link_device(PLATFORM_BUS_DEVICE(s->platform_bus_d= ev), + SYS_BUS_DEVICE(dev)); + } + } +} + +static void rvserver_ref_machine_class_init(ObjectClass *oc, const void *d= ata) +{ + char str[128]; + MachineClass *mc =3D MACHINE_CLASS(oc); + HotplugHandlerClass *hc =3D HOTPLUG_HANDLER_CLASS(oc); + static const char * const valid_cpu_types[] =3D { + TYPE_RISCV_CPU_RVSERVER_REF, + }; + + /* Note: this is used as /model in the FDT. */ + mc->desc =3D "RISC-V Server Platform Reference Board v1.0"; + mc->init =3D rvserver_ref_machine_init; + mc->max_cpus =3D RVSERVER_CPUS_MAX; + mc->default_cpu_type =3D TYPE_RISCV_CPU_RVSERVER_REF; + mc->valid_cpu_types =3D valid_cpu_types; + mc->pci_allow_0_address =3D true; + mc->default_nic =3D "e1000e"; + mc->possible_cpu_arch_ids =3D riscv_numa_possible_cpu_arch_ids; + mc->cpu_index_to_instance_props =3D riscv_numa_cpu_index_to_props; + mc->get_default_cpu_node_id =3D riscv_numa_get_default_cpu_node_id; + mc->numa_mem_supported =3D true; + /* platform instead of architectural choice */ + mc->cpu_cluster_has_numa_boundary =3D true; + mc->default_ram_id =3D "riscv_rvserver_ref_board.ram"; + + object_class_property_add_str(oc, "aia-guests", + rvserver_ref_get_aia_guests, + rvserver_ref_set_aia_guests); + sprintf(str, "Set number of guest MMIO pages for AIA IMSIC. Valid valu= e " + "should be between 0 and %d.", RVSERVER_IRQCHIP_MAX_GUEST= S); + object_class_property_set_description(oc, "aia-guests", str); + + assert(!mc->get_hotplug_handler); + mc->get_hotplug_handler =3D rvserver_machine_get_hotplug_handler; + hc->plug =3D rvserver_machine_device_plug_cb; +#ifdef CONFIG_TPM + machine_class_allow_dynamic_sysbus_dev(mc, TYPE_TPM_TIS_SYSBUS); +#endif +} + +static const TypeInfo rvserver_ref_typeinfo =3D { + .name =3D TYPE_RISCV_SERVER_REF_MACHINE, + .parent =3D TYPE_MACHINE, + .class_init =3D rvserver_ref_machine_class_init, + .instance_init =3D rvserver_ref_machine_instance_init, + .instance_size =3D sizeof(RISCVServerRefMachineState), + .interfaces =3D (const InterfaceInfo[]) { + { TYPE_HOTPLUG_HANDLER }, + { } + }, +}; + +static void rvserver_ref_init_register_types(void) +{ + type_register_static(&rvserver_ref_typeinfo); +} + +type_init(rvserver_ref_init_register_types) --=20 2.43.0 From nobody Sat Sep 26 20:01:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1788551875; cv=none; d=zohomail.com; s=zohoarc; b=LOwo3WlILCKWkwh8mGzhKC4xVD1pr8ssV/J7vNVhKox9mPmuM83TcLJI9XskkZoJcmIqhQ2qO1UoOl7sv5jR166ZE2OAGglgUG+am8EEXV8G36CmEbWCnzj76l/4en538sZto3qMcgsBHyjmPFxl9Eo3JnAiA02hoykqidUZ6Eg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788551875; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=BS+RfMy0mOE+ZYz8zK17/pgZkLuA1Nzqm1+TnjWCQR0=; b=QFjHeGVp+X2ey5P9ab5BM7XlRxwH7nUkOOMYQbmZxL6HPpwAg46nHsTMK9Ddm1U1KPHS18PpbZxCWyOtm16uJ1gKdTKxDT1PIo+PUwje/Lqevy0UUN4qfgLXPewU4obLbA6NhLNCbADH0UZy27HwT/K0t/sktGzI+Wk4VtIkKuA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788551875577120.58763571763632; Fri, 4 Sep 2026 12:57:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2a1c-0002zi-Gk; Fri, 04 Sep 2026 15:56:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2a1b-0002zS-Rx for qemu-devel@nongnu.org; Fri, 04 Sep 2026 15:56:35 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2a1Y-0007kL-T0 for qemu-devel@nongnu.org; Fri, 04 Sep 2026 15:56:35 -0400 Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 684HIGis016220 for ; Fri, 4 Sep 2026 19:56:32 GMT Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gfqqd3yke-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 04 Sep 2026 19:56:31 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-93771aa0379so361263085a.1 for ; Fri, 04 Sep 2026 12:56:31 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-910406871b6sm29117736d6.32.2026.09.04.12.56.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 12:56:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=BS+RfMy0mOE +ZYz8zK17/pgZkLuA1Nzqm1+TnjWCQR0=; b=NEzUH2u1WyzqZ2lzsWqUGCupxtH WqwuIuoIQbwoz5WkeglOmSlFOrVv7z4tDek1mC53sJO2v7hNYkgITtH9g+zOYwmc 5lNdYDRjz+I7fYS2NeFp3iJTGxIuNzxRIeQwKXPfv1/ekP1shAzgG20Fqbyf9KMG vhraXvsfo4uH3OOKchxeYgd9KT7y92S0799XCE5HiGE6T+kwyx1cw89lzgvKEGau dwdodlULyM5/ZVYYKhUKJwPsdxnnEmcwTDqEkNueU5JNC9Cbj8W6bqlS0j9kl1gw 2ePIPDcoEn+144qU9fxYhzDZhe21MxJ0RuvQiRzfH3GHvaefV/eep+N/cVQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788551791; x=1789156591; darn=nongnu.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:content-type; bh=BS+RfMy0mOE+ZYz8zK17/pgZkLuA1Nzqm1+TnjWCQR0=; b=Yds27wD8V4TNYZkzKHd5gRrIy2sQ2PkD51iQ1Mi9YdGJ+IV2McjcRPh/47iXaggohr AOvp00pfEX6IBLf5+SqNc0BsMiKJIxoNrOFGzuFUgyDCxWlSaBLCfbLiqHNpw9XYifGh yiYqDUderaHguFDsmQyLbz9TlE0CESsaFRBO/0GoiY6GjwzUISyyBGSgnDPw80xdfUQZ a+g+Ymx8P3QZfsOd53tfxNXgJ8wIAqrp8DSGieuomejuw4J1z6hEgF33pn16Scd7ZJ3A nhGtKx4eAWZ0hSFNukVycUb7fPl3lucFM9akdULZcKXznaAk9IaRPVjrK8CpgG1uGchX gmpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788551791; x=1789156591; 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:content-type; bh=BS+RfMy0mOE+ZYz8zK17/pgZkLuA1Nzqm1+TnjWCQR0=; b=gNnNrt7dyqTx1isEzeNt10NaWLdsz/f/1RjrI207iYnlmC1c9p7qSyK52m8YLaLpDj B9eGQwsxaUR+h65AG2BYoP6ML2N/4O6sw/tQa+lq6UIX7UGLji7A7RRBIWxirXvIBIgz 8iLyHlPoUQLYQ3QB5LaXZ2aI/ydPzjbHiw6bOzVcV1DpIJMeYbTlDWjRhufj2Hv5MJ9I Fp64gFQyvVZThx0U0qhNNixOikANkK3zptY6e+avx3kl2rK6aZcMan5yA1UjGMC9HqIY v5cRFvT2VqT0ik/adKZHEiG5DQg+7qq2/+mqOfFFqv3CfqdL9HDs5p6rVm8a0VjeOAhj hZtg== X-Gm-Message-State: AFuF++nmhkpL65AO7uzCzHA/r65YlNdNFFMDHQy9WZ2s5YP80cxXzpGS syRnQhEeqRlwxRlIuZcfX+2ppTKbuIJ6C0bjhn+B5uMcmyzHkXG98vxttBAlGFnepDKBOtzxSCu H9G704cF4m2WlTj82HAAeMPamywhrPNH+Yx0C0J0mhbw66lHCUKb72MWAPL2n7P9aEQ== X-Gm-Gg: AYBFou24VYw81Zp0X9ZHsJPvUl4Ioy5qhSx5WzDfKD23s2cwe6oPBjqj7tfAYN5/PWP SKldyD6rnRxye0YCoexbM1FV6+tdVJ4sMF3dJ6IplpdOrDPMDkuHj7gKdTDrj1bqYwDOQCbd51z TtxE7wMWEJ5gOsGpS1v2nsqtwN6jI+BrhfRjYO9jwndFu9cyYWi9O4wGqRHNVvLe2dOLOuvD5Y/ YTxyMBazZ0GpTTq2/C8rmyFJSmw1CKh/SIdBCFsCY2UWJtQNomBErRYCBXd4Kd76bO1S7eDtrjG kY3SipPzi/TQ99U5H3Pos+60S4DWuL3/HtSUyehJHeGgqDBFxa7b8YOKkQNG9g4XJWCR5nIe0Ji aZqoD51qp+5+AQhF1h0KiXyN/hymaF5WQ0c0D X-Received: by 2002:a05:620a:8316:b0:939:6dfa:4975 with SMTP id af79cd13be357-939804c27a2mr761215285a.52.1788551790794; Fri, 04 Sep 2026 12:56:30 -0700 (PDT) X-Received: by 2002:a05:620a:8316:b0:939:6dfa:4975 with SMTP id af79cd13be357-939804c27a2mr761208485a.52.1788551790090; Fri, 04 Sep 2026 12:56:30 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, andrew.jones@oss.qualcomm.com, leif.lindholm@oss.qualcomm.com, Daniel Henrique Barboza , Chao Liu , Nutty Liu , Palmer Dabbelt Subject: [PATCH v10 4/5] tests/functional/riscv64: add riscv-server-ref tests Date: Fri, 4 Sep 2026 16:56:09 -0300 Message-ID: <20260904195610.964829-5-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260904195610.964829-1-daniel.barboza@oss.qualcomm.com> References: <20260904195610.964829-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: njgl73bOHVZUHZJ0vS4vtYSTXqzfQjN_ X-Proofpoint-ORIG-GUID: njgl73bOHVZUHZJ0vS4vtYSTXqzfQjN_ X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDE4MiBTYWx0ZWRfX23lt0Em1kYIh LNN6hlPk8ziGo5ex7ZaVX76qgH7YO83o8XJx+4iCSKOmUMaxVlGim/HOP/tgUtpf9wu1TMd1+MX s5/SNA5e3iTT30Knja4rGUB55jRxzRY= X-Authority-Analysis: v=2.4 cv=XtnK/1F9 c=1 sm=1 tr=0 ts=6a9b226f cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=NEAV23lmAAAA:8 a=EUspDBNiAAAA:8 a=pGLkceISAAAA:8 a=69EAbJreAAAA:8 a=JF9118EUAAAA:8 a=QOu4sXKRH9_VvCpQA3IA:9 a=bTQJ7kPSJx9SKPbeHEYW:22 a=xVlTc564ipvMDusKsbsT:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDE4MiBTYWx0ZWRfX7NHEgM3jPBzk eeUnM8NfvXyipBU0cTHfBA6hTNMOU69wx1OexK+AYfBl/x02lCiGrEh7Rsglf61NUhhvhSw6YsG B7cJDS6BxzBqOkAn+mYHhx/eqr5ZK2VBLHVFbUDZbEv6vEbSSROFDrkdVinXHlVfBNBlGO1NsvL sm6H/RzbQJqbQYZlgjgOYAfWCdUCbPaBQJUhx6wfDbLW9HUjAlC5rQ3jvxAfU5PzcFS0asdh0MH JatOhc8ol2LlwK2e4dipZsH79JppxJrm5pNJEh25qT1rv6At1P1CcNauPH/zqwWMGwW01nF9nFQ WjxgMtGVD3wyras/29G5vLhhuQqGvIzoHj/cbH2F/OWRqFEyqJdC5ZQ2eLaGV2EkMI8AIv6Z6en +OXbMAMx4Bkae5Lcm0zsEdMoSmTv69SF1xZEC1gtnOfugtN+0nUdRqfMbrY2ZsBI4+A3DgUxZS1 69Dh+gctT0WwJ6h6FtA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_05,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 phishscore=0 malwarescore=0 spamscore=0 clxscore=1015 impostorscore=0 bulkscore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040182 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1788551876893158500 Content-Type: text/plain; charset="utf-8" Add tests for the recently added riscv-server-ref machine: - a new test_opensbi.py test. The idea is to have a quick test that can catch trivial regressions that would prevent OpenSBI to finish; - a new Linux boot "thorough" test that will boot the machine up to the buildroot prompt. - a TPM specific selftest for the riscv-server-ref board. The test will be skipped if there's no 'swtpm' in the host. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Chao Liu Reviewed-by: Nutty Liu Reviewed-by: Alistair Francis Reviewed-by: Sunil V L --- tests/functional/riscv64/meson.build | 2 + tests/functional/riscv64/test_opensbi.py | 4 + tests/functional/riscv64/test_server_ref.py | 88 +++++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100755 tests/functional/riscv64/test_server_ref.py diff --git a/tests/functional/riscv64/meson.build b/tests/functional/riscv6= 4/meson.build index d1a3e6c2bf..2d22e49efd 100644 --- a/tests/functional/riscv64/meson.build +++ b/tests/functional/riscv64/meson.build @@ -3,6 +3,7 @@ test_riscv64_timeouts =3D { 'boston' : 120, 'k230' : 120, + 'server_ref' : 120, 'tuxrun' : 120, } =20 @@ -15,6 +16,7 @@ tests_riscv64_system_thorough =3D [ 'endianness', 'boston', 'k230', + 'server_ref', 'sifive_u', 'tt_atlantis', 'tuxrun', diff --git a/tests/functional/riscv64/test_opensbi.py b/tests/functional/ri= scv64/test_opensbi.py index 0f8beb7e7a..367e131164 100755 --- a/tests/functional/riscv64/test_opensbi.py +++ b/tests/functional/riscv64/test_opensbi.py @@ -36,5 +36,9 @@ def test_riscv_virt(self): self.set_machine('virt') self.boot_opensbi() =20 + def test_riscv_server_ref(self): + self.set_machine('riscv-server-ref') + self.boot_opensbi() + if __name__ =3D=3D '__main__': QemuSystemTest.main() diff --git a/tests/functional/riscv64/test_server_ref.py b/tests/functional= /riscv64/test_server_ref.py new file mode 100755 index 0000000000..db3371fafd --- /dev/null +++ b/tests/functional/riscv64/test_server_ref.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +# +# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. +# +# SPDX-License-Identifier: GPL-2.0-or-later +# +""" +riscv-server-ref board test +""" + +import os +import tempfile +import subprocess + +from qemu_test import QemuSystemTest, Asset +from qemu_test import wait_for_console_pattern +from qemu_test import skipIfMissingCommands + +class RiscvServerRefTest(QemuSystemTest): + """ + Test the riscv-server-ref board + """ + + ASSET_KERNEL =3D Asset( + ('https://github.com/danielhb/qemu-machine-boot/raw/refs/heads/' + 'master/riscv/images/virt64/buildroot/Image'), + '6bacc876c769c1bb6057d2bf549eba67fbe83916e8223f9fe21c8e8fff665a36') + + ASSET_ROOTFS =3D Asset( + ('https://github.com/danielhb/qemu-machine-boot/raw/refs/heads/' + 'master/riscv/images/virt64/buildroot/rootfs.ext2'), + 'f00bb88749f945d80675540a1338bd1ccb226574685a5b6c65ab44027d0411a8') + + def do_test_boot_linux_test(self, tpmstate_dir=3DNone): + self.set_machine('riscv-server-ref') + kernel_path =3D self.ASSET_KERNEL.fetch() + rootfs_path =3D self.ASSET_ROOTFS.fetch() + + self.vm.add_args('-kernel', kernel_path) + self.vm.add_args('-append', 'rw rootwait root=3D/dev/sda') + self.vm.add_args('-drive', + f'file=3D{rootfs_path},format=3Draw,id=3Dhd0,snapshot=3Don,if= =3Dnone') + self.vm.add_args('-device', 'ahci,id=3Dahci') + self.vm.add_args('-device', 'ide-hd,drive=3Dhd0,bus=3Dahci.0') + + if tpmstate_dir is not None: + # Note: code taken verbatim from + # tests/functional/arm/test_aspeed_ast2600_buildroot_tpm.py + + # We must put the TPM state dir in /tmp/, not the build dir, + # because some distros use AppArmor to lock down swtpm and + # restrict the set of locations it can access files in. + socket =3D os.path.join(tpmstate_dir, 'swtpm-socket') + subprocess.run(['swtpm', 'socket', '-d', '--tpm2', + '--tpmstate', f'dir=3D{tpmstate_dir}', + '--ctrl', f'type=3Dunixio,path=3D{socket}'], + check=3DTrue) + self.vm.add_args('-chardev', f'socket,id=3Dchrtpm,path=3D{sock= et}') + self.vm.add_args('-tpmdev', 'emulator,id=3Dtpm0,chardev=3Dchrt= pm') + self.vm.add_args('-device', 'tpm-tis-device,tpmdev=3Dtpm0') + + self.vm.set_console() + self.vm.launch() + + # Wait for OpenSBI + wait_for_console_pattern(self, 'OpenSBI') + + # Wait for Linux kernel boot + wait_for_console_pattern(self, 'Linux version') + wait_for_console_pattern(self, 'Machine model: RISC-V Server Platf= orm') + + # Test e1000e network card functionality + wait_for_console_pattern(self, 'e1000e') + wait_for_console_pattern(self, 'Network Connection') + + # Wait for boot to complete - system reaches login prompt + wait_for_console_pattern(self, 'Run /sbin/init as init process') + + def test_boot_linux_test(self): + self.do_test_boot_linux_test() + + @skipIfMissingCommands('swtpm') + def test_boot_linux_test_tpm(self): + with tempfile.TemporaryDirectory(prefix=3D"qemu_") as tpmstate_dir: + self.do_test_boot_linux_test(tpmstate_dir) + +if __name__ =3D=3D '__main__': + QemuSystemTest.main() --=20 2.43.0 From nobody Sat Sep 26 20:01:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1788551863; cv=none; d=zohomail.com; s=zohoarc; b=jmR5HywLfY/1oB7dY3BfDC79meCPg6NlBCSsoLDvooL470fZxFQuHisEaCGdp/kL9jydcpjanxbsO+6XFIG0rSBHEZEUBuHNJNkYjsrvADY/ywkbH5R24c5UI5v3T66Z8fvCJrHRArQu5Xt890LhcFyFf63RpQFpAAgojATDHeQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788551863; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=7j25nlXJ4K86TmSfrmSHsNxcRMwAXuunMLYHGnJWTpM=; b=nJ9sFkmrhZEaPQmeyEi30ulJW2eUQeR+jUt8Jxfg4jGvcIM49kg7hKhHSSejO3XRS6EU6FWcVfzG9lpcovlHiPHJIO6mx4gfIMkfk0zu4XTeuu+Zq7U4SEC/TBfpKSlFfHmdUnf+f/zaRLX0l1QL4PV5LTbRYVAoFgTEJyRHHWc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788551862993984.3736900699205; Fri, 4 Sep 2026 12:57:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2a1f-000318-7J; Fri, 04 Sep 2026 15:56:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2a1d-00030N-Sz for qemu-devel@nongnu.org; Fri, 04 Sep 2026 15:56:37 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2a1c-0007ku-75 for qemu-devel@nongnu.org; Fri, 04 Sep 2026 15:56:37 -0400 Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 684HIGit016220 for ; Fri, 4 Sep 2026 19:56:35 GMT Received: from mail-qv1-f72.google.com (mail-qv1-f72.google.com [209.85.219.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gfqqd3ykk-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 04 Sep 2026 19:56:35 +0000 (GMT) Received: by mail-qv1-f72.google.com with SMTP id 6a1803df08f44-90e853561c5so15483456d6.1 for ; Fri, 04 Sep 2026 12:56:34 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([177.18.66.131]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-910406871b6sm29117736d6.32.2026.09.04.12.56.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 12:56:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=7j25nlXJ4K8 6TmSfrmSHsNxcRMwAXuunMLYHGnJWTpM=; b=dkxxrjQ1/0VM9FB6ecZPlXms/iD sNJQB9HGP3zEaBBxAmFJm5OF5u7kgbdQuaLBYHZ5RJqhXzVsf+YZ5wyRf14mue8c bzqNQx9nkd80tNq8+zp+Z024YsocnMcerykHU48R5xNn89W7PLByDsesxT+mCG+0 f7l138yKJzQvhvZzAaLlmwJ+0zEoJ3K8oPDQi/u1QMfGlAYT8a/gHiqQiq1NJ9k1 JR+qyF1oE8H1JE/tdEgRoIQfKQRXJ+cl6wjwFJeZJzaCM7qLnXkyQhk/zkNfM1x1 3jPii3HmDhrridop3/z7eSjYauw3fWFQe9luaXaa69nRgmUEXpie7lnIqUA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788551794; x=1789156594; darn=nongnu.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:content-type; bh=7j25nlXJ4K86TmSfrmSHsNxcRMwAXuunMLYHGnJWTpM=; b=g920UasOilEB29/6/wK3U5+FvG5mezQ0PLVa52Wqq0wlFpUJpaxSCFhu7cCeS6viNd 0lbvp9DKOpgHUqVtAyQxZz/hb1tkvo+SnOsZN/6bfVc0GQpBYX/0kazv86C3c9YxrvOV zhF9ci5/+9EBVLlPiRVi+4uabOtkU5wr1W29AUrTBboWRiqznz/vDo4EkJFtVYurJuhj mwtQIJ0L+m6qpyw1eOXRaWEly91IFCq2loUFzxzjX15KIIvKxlkeKwYrkIAQNM/4DjHR yNfxcnd+mmlRuTWwGgZv9T8kuRHiCkhR9x2iHc3qjqOEwNlFg8JFdO78qwrsToJeAFXz 5awA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788551794; x=1789156594; 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:content-type; bh=7j25nlXJ4K86TmSfrmSHsNxcRMwAXuunMLYHGnJWTpM=; b=UsS4BKLP3Qy2C3OYSDAUoX7wqW7tYsyNrcUgLHx6KYjKbJtHCjcN41GcWErGoSV5JA rQs4arrCq35rn2Z/RSM9gnMC1e/C+6+ifhuSOYLnjVyZ5yqoUOgh1YsCCb7jGleD0UIw 7o2alzeJh7KusNj8Bip/DuPQ8K0vx0mpedPhUxXERPhOx8H7boONJLZj1TpMkg1KFzCQ o8lF8mKB/4pzzUFtNxgHl+v79Igxb0sFlFX91NZG60Y3Ty7urPkUlRUzjNs7iGGA2Y5u 8dl/kbAuNjfQvVuXb4BruUVwRdLbXKbg5t4V5SBtmPNRFDsWy0f+OFNpyDgz3ToPk9T3 QCZw== X-Gm-Message-State: AFuF++mzpTyJPmdIcj0rbjbaevFvhFfWxKrMqq2acDhbdul9n9XzCg1B YF1uL55xAMQywEVrbvDS2GGGuWG0Yl/L5EaxueqwazU4iXZSZ+5eqiyRpwLi2+mfvifdwfH38d6 nG+p0saZ5dOBhOdYn/+JfsBAqSPqIzOY8x6E0Vhvkhm0d+gLXCkUJWUKl16bP6nVsJg== X-Gm-Gg: AYBFou2er5wZ2/KeRmfY3BecKblij8nbDlX3tO1XjeIRW8G9NNieeO5vx85YpKGS+dU 7NCyo6ur1rUcBdFRP6zzwXbsj2S2YLHBHML8rlSS0ry6ysc2espzYq9AL1jp81MMhQSi3Vf1WO0 +xWdzEukwIbEwq7WQtV8pugwHTE/7osb9WXPOOLiDpFYBz9oD7LkRTPOueLeB8bV8QTjXP8PDc6 cOFf0bdqMmvLw0nt6HverQScg44kkvHR+TjI+QBpxZsQ3fofCss+W2l6J8nZP+Q7sXwLWEzmE55 9axaKF2ZKb5qWKR1/GA4RuCyzi0mNnIvIrcTCa5YYnZq+IXuLR3J4VLolYXWnbqpAKZADwvTygT fZ59PUY6z9XOy4lRvf1lXwOvjsw1QdUU7wOSW X-Received: by 2002:a05:6214:8095:b0:910:33ac:a39b with SMTP id 6a1803df08f44-9103efb9295mr88676356d6.26.1788551793440; Fri, 04 Sep 2026 12:56:33 -0700 (PDT) X-Received: by 2002:a05:6214:8095:b0:910:33ac:a39b with SMTP id 6a1803df08f44-9103efb9295mr88675836d6.26.1788551792920; Fri, 04 Sep 2026 12:56:32 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, andrew.jones@oss.qualcomm.com, leif.lindholm@oss.qualcomm.com, Daniel Henrique Barboza , Pierrick Bouvier , Palmer Dabbelt Subject: [PATCH v10 5/5] docs: add riscv-server-ref.rst Date: Fri, 4 Sep 2026 16:56:10 -0300 Message-ID: <20260904195610.964829-6-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260904195610.964829-1-daniel.barboza@oss.qualcomm.com> References: <20260904195610.964829-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: uqrDo9PL_rK09J2Oe9aFidDUtvyDM_c3 X-Proofpoint-ORIG-GUID: uqrDo9PL_rK09J2Oe9aFidDUtvyDM_c3 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDE4MiBTYWx0ZWRfX+mt2saEXN62s nH8NuskKsrpSQAGm9/G4P10IRWvp0YiOzjyiNAlgjN11MrX25J6J8dtWqwEEcAAVGf3hCVSnxVD BwBGVOnJxV1FrHFFjf8E7CIM6b4ezbk= X-Authority-Analysis: v=2.4 cv=XtnK/1F9 c=1 sm=1 tr=0 ts=6a9b2273 cx=c_pps a=7E5Bxpl4vBhpaufnMqZlrw==:117 a=CQQxcbsX5Byh3TlVSSGwig==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=NEAV23lmAAAA:8 a=NLiCwHATAAAA:8 a=EUspDBNiAAAA:8 a=JF9118EUAAAA:8 a=FRSEYCzRAAAA:8 a=vlmih187C6Ts2ntwv5oA:9 a=pJ04lnu7RYOZP9TFuWaZ:22 a=F9tHCgz3TLBaZgltkx5D:22 a=xVlTc564ipvMDusKsbsT:22 a=H4N_Y-AU75W7NKDNhZlT:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDE4MiBTYWx0ZWRfX2cyo5mej9DKA S2epNH8Gobxk8B3HvYwVzYSJonPl91b7X/Q6oWrn/YQbmlv7X6lAwHzcvbXe/p6uGi/yt1MfOoM 9XAi4yG135C9FQnK4jI2Pcac8aD4JRgA6jeCqXrJq70bMTVzBUFmtJ79z0nkKgsy6XicnHhZ1Aj 6jpYp/GYlOItMT7fbIpcQyoOndTT+PSzdr7kqGO3u4UhaHvni6KQNerrwPuzYwhNeOj32XW8Cx8 0H0vfSGpZaNrxfcpSDG68e/12OaL+/ljRfv/MX/TYings7AoU2j+vYhSd7g/DyLBx/iOzv6POQq vugvQBM9sKqLTFa5Z4ST5lAnoHi8o0myli7vZ8o5XQCgD3Pa7AF9t216d9FET/ca/rCsSCVaOj+ uvt/MUrzUzVa5yUcUTnRQ+hbeSRbbaP4NzoYSX9VLQjyKsVJAPynYeErybMZ9l6eF8wkdTHsMbA q+XZjZlAePC8fptK5sQ== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_05,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 phishscore=0 malwarescore=0 spamscore=0 clxscore=1015 impostorscore=0 bulkscore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040182 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1788551865018158500 Content-Type: text/plain; charset="utf-8" Add documentation for the new riscv-server-ref board. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Alistair Francis Reviewed-by: Chao Liu Reviewed-by: Sunil V L --- docs/system/riscv/riscv-server-ref.rst | 62 ++++++++++++++++++++++++++ docs/system/target-riscv.rst | 1 + 2 files changed, 63 insertions(+) create mode 100644 docs/system/riscv/riscv-server-ref.rst diff --git a/docs/system/riscv/riscv-server-ref.rst b/docs/system/riscv/ris= cv-server-ref.rst new file mode 100644 index 0000000000..0573b4e07c --- /dev/null +++ b/docs/system/riscv/riscv-server-ref.rst @@ -0,0 +1,62 @@ +.. SPDX-License-Identifier: GPL-2.0-or-later + +RISC-V Server Platform Reference board (``riscv-server-ref``) +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +The RISC-V Server Platform specification `spec`_ defines a standardized +set of hardware and software capabilities that portable system software, +such as OS and hypervisors, can rely on being present in a RISC-V server +platform. This machine aims to emulate this specification, providing +an environment for firmware/OS development and testing. + +`spec`_ is version 1.0 at the introduction of this board. New spec versio= ns +might trigger a revision of the emulation itself, which will strive to alw= ays +match the latest version available. In case the emulation changes aren't +backwards compatible we'll introduce a versioning scheme, probably via +a machine property, to allow older SW to run with older spec versions. + +The main features included in the riscv-server-ref board are: + +* IOMMU platform device (riscv-iommu-sys) +* AIA +* PCIe AHCI +* PCIe NIC +* No virtio mmio bus +* No fw_cfg device +* No ACPI table +* Minimal device tree nodes + +There are multiple ways of using this reference board. The spec compliant= way +is using an EDK2 image and a TPM device. The board was tested with the TPM +device ``tpm-tis`` that uses the external ``swtpm`` emulator. More info o= n how +to use this device can be found in `tpm`_. + +To use this board coupled with the tpm-tis device, first start the ``swtpm= `` +process in a shell (the ``log`` parameter is optional): + +.. code-block:: bash + + $ mkdir /tmp/mytpm1 + $ swtpm socket --tpmstate dir=3D/tmp/mytpm1 \ + --ctrl type=3Dunixio,path=3D/tmp/mytpm1/swtpm-sock \ + --tpm2 \ + --log level=3D20 + +And then start QEMU with: + +.. code-block:: bash + + qemu-system-riscv64 -M riscv-server-ref \ + -bios fw_dynamic.bin \ + -kernel EDK2.fd \ + -drive file=3Dnvme_disk.ext2,format=3Draw,id=3Dhd0,if=3Dnone \ + -device ahci,id=3Dahci \ + -device ide-hd,drive=3Dhd0,bus=3Dahci.0 \ + -chardev socket,id=3Dchrtpm,path=3D/tmp/mytpm1/swtpm-sock \ + -tpmdev emulator,id=3Dtpm0,chardev=3Dchrtpm \ + -device tpm-tis-device,tpmdev=3Dtpm0 \ + -nographic + + +.. _spec: https://github.com/riscv-non-isa/riscv-server-platform +.. _tpm: https://qemu-project.gitlab.io/qemu/specs/tpm.html diff --git a/docs/system/target-riscv.rst b/docs/system/target-riscv.rst index 2639866a3e..74e23fa64c 100644 --- a/docs/system/target-riscv.rst +++ b/docs/system/target-riscv.rst @@ -70,6 +70,7 @@ undocumented; you can get a complete list by running riscv/microblaze-v-generic riscv/microchip-icicle-kit riscv/mips + riscv/riscv-server-ref riscv/shakti-c riscv/sifive_u riscv/tt_atlantis --=20 2.43.0