From nobody Mon Feb 9 08:28:40 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2578121D3E2 for ; Fri, 6 Feb 2026 00:24:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770337449; cv=none; b=NSnxl1HweXswJVZw7jH3F8KpVKUS3zobuhKg6B1cu7jMSMcA0Kxf/EhZj9qMaXLaAkYw0Oq5v0wGCh2wSiHYIiOQ57ZBUhw525C+Rcu01Askx9rsW2F99aqSbCE4sDMTXf46x7LdM9oXauqxILnQgaF6LI+XAjHM6NcIJnyGrW8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770337449; c=relaxed/simple; bh=el+9iyp9Kb6C+XZIh6xrSVS+J9uONj+EjdtS8ZNjOyM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=K6UcjILwbz9f5E/o894RIkn9DD0R1XB/fMXwLqs/GK/sqhltWagl1T3hocRrcjek+KMWvFeSt2rkvbBg6E4ohczw2OvfDlZYFV2+qAVKx1mL3dpOA7o92kqzFhbuFL+FoF5r7DAKrSZiGYn+vPN5pzrjxdWWm7tXWjn92UWBBWw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=YjrvwlzD; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=HjBu9qnH; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="YjrvwlzD"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="HjBu9qnH" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 615IERGQ571541 for ; Fri, 6 Feb 2026 00:24:08 GMT 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=sbwpOSu2blZ uBmMZ8XQFEq8p5mZGYu2zJLM2rrJqZa8=; b=YjrvwlzDvneXTB3dSzpKCCf8akB 1JrtE2QiXhLTBuoQEwjhAmgGCD7Lh/sSBF3T57zD8u8J10U6Ho/Dd7+wP26sSxk/ Gt19aZhLnrWUr/ifHNUv0f4yQmi64/b958Bz6Ucl27dkjIUzagK5ljM0BfhNQ8yg HhYSKDF7RCU9zxjPK4m/x2Ai/dzQpV9zkYD27NE1yR5P2wj/tLfhPSA5LC6wkZZ1 oelnglszmthjo3XY4j3MeuUv2CurHnE7F6/NPTh0C1Jd9NVcrOnGKdZ8QTflmNL6 xVQJ7cDlunThr2Nj9uqfKdGgfQyMey4DzDXH1uqbkbLESRx7wbvazXK8bwQ== Received: from mail-dy1-f197.google.com (mail-dy1-f197.google.com [74.125.82.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4c50a992mn-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 06 Feb 2026 00:24:07 +0000 (GMT) Received: by mail-dy1-f197.google.com with SMTP id 5a478bee46e88-2b708fa4093so1104301eec.0 for ; Thu, 05 Feb 2026 16:24:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1770337447; x=1770942247; darn=vger.kernel.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=sbwpOSu2blZuBmMZ8XQFEq8p5mZGYu2zJLM2rrJqZa8=; b=HjBu9qnHkZ/QDxujwaMmMun0R2jaPxSEwh26cxDALmQSDpZqAD7mlixXrs7X1b1xsp oMZl09fsRA+43IgBRGGqmauKJajkfqP5kKVIaQ/AED9/O/X59eTSBYqMB12P94CJ+ruo hyCgAleKT+MHV2B296zcI7t/cf9W8wdgK0V4xn5bLHLkHtmKXr7utDpNNI1fzYT+GOTG Sk3KiLUANKcDn7hQQMmJOiYa2BqbOeHUlFr+rhgb90pSmfTudZb0421IQ2YjUR/sznOd Nwjhy0oZN2o+3UzNDU0OOV94gchTsbdbbYwxG+0RcnOpXoZf4REiaCd9l5aAxf3fjqj4 2d/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770337447; x=1770942247; 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=sbwpOSu2blZuBmMZ8XQFEq8p5mZGYu2zJLM2rrJqZa8=; b=UcAvuLlEdiwtB+F1h3CrrjDOJAvxGl5MGmjoGLUA11hi0jo9vmmpGSEzQXObxvyAey anzzW/IFbM+vfK6dteMJDOoajh5ssEssjNa0Ra5aDBBfK5dJXxESppgbmhjHIOBUjMt+ Vov80KS3O0P2Y3VdLYAiMSMo0jav0oQwVjDSs81zdngvLlGuxzePlUWMY6L7Q68A04xC YUL08qygX8SUO6S7aZtFPRS9UnKgvaOYGCkT4XX41WHAe2fTf/YC2pM4aKj7RlCXjVnv k6US+ed9XU+YubvbBUJLHUS9r2cwkNefRE51GoKj9PCW+rFsjhY1JIKFucg0GqyMg2K+ eyDg== X-Gm-Message-State: AOJu0YwePxd1KX8Asan94piE9Nnz61mZmTohxViURlUxRYpvvZTxaEc6 daQDU40scjvwMsHQG67A2YfcK5Ql0otTm1IbqsbaNur8iF9ttY5EBryxuQRSE3bdTYp5qFrw/Da u7sV6doly9KJUgCmzttB0Rh0lOT8qz15ZYGChHFN/GUcWPv0EgIm2tAad+ExNozFUcevqMYI6AK g= X-Gm-Gg: AZuq6aIoTvqiVCnql7W36q5fjRLpNMDsF1F8CcaSHGRjJNn6/Xk22q8QTFTbifCNx0j 9NeTlNCcd6Aj19T2visMZv5nf5r27VssF+r6yhZbBIXgNhe2ZN9Ul19dvcyrRLL0gtQreiB4LOT pLXsgQIPGl/jXH7MKH56G1MMG7GfMe7iJZTZRP+sr+Y+RLJg95rag/WT4byYZZczt4YNQlsie8t 0YI8HdayFobIuD6C4QTmftvBT5jRk4uNqvGFX1R1Yeyajx/Rd+F6oXrq7jjbbJiJepXm6LMekDb AYxkr9shQtELWTCYowUMciJ6uKL9Y5tJ97JeTz11OWTcC3pWbaS38iPfOBs45ACkGLHxz/jKh1w omvPHJS5P7fXcQ3kw4yo= X-Received: by 2002:a05:7300:8c03:b0:2b7:fdb6:ccf2 with SMTP id 5a478bee46e88-2b856484d25mr468695eec.13.1770337446902; Thu, 05 Feb 2026 16:24:06 -0800 (PST) X-Received: by 2002:a05:7300:8c03:b0:2b7:fdb6:ccf2 with SMTP id 5a478bee46e88-2b856484d25mr468671eec.13.1770337446284; Thu, 05 Feb 2026 16:24:06 -0800 (PST) Received: from localhost ([140.82.166.162]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2b855b0f624sm847825eec.14.2026.02.05.16.24.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Feb 2026 16:24:05 -0800 (PST) From: Andrew Jones To: linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, kvm-riscv@lists.infradead.org Cc: Paul Walmsley , Palmer Dabbelt , Anup Patel , =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Conor Dooley , Guodong Xu , Charlie Jenkins , Charlie Jenkins , Samuel Holland Subject: [RFC PATCH v1 08/11] riscv: hwprobe: Introduce rva23u64 base behavior Date: Thu, 5 Feb 2026 18:23:46 -0600 Message-ID: <20260206002349.96740-9-andrew.jones@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260206002349.96740-1-andrew.jones@oss.qualcomm.com> References: <20260206002349.96740-1-andrew.jones@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: kfbySs49kyC6hWfYxA1po7PcG_7-fGJ_ X-Proofpoint-ORIG-GUID: kfbySs49kyC6hWfYxA1po7PcG_7-fGJ_ X-Authority-Analysis: v=2.4 cv=e6ALiKp/ c=1 sm=1 tr=0 ts=698534a7 cx=c_pps a=Uww141gWH0fZj/3QKPojxA==:117 a=cvcws7F5//HeuvjG1O1erQ==:17 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=EUspDBNiAAAA:8 a=It5_YO3Bqo782jOVlSYA:9 a=PxkB5W3o20Ba91AHUih5:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjA2MDAwMSBTYWx0ZWRfX/KD2FINUAYfT 4ATK2kcJmQqEJ8stGqzUxGChKOnqv/UyGMi5NFGynJw32ad+D8T1L/ZoExjIPHvK/YnGhS/yvpU Ht066jCAGAU79Cz99D109PWl5CIGCGJHlKRQ4I/pEoDCihlUDVax/x/FiJEXRQ7lgbA+Sz1J1oN cjir9WIs40/pv2kqW0UEoIDqeb/hymgQeVWyCa3vIgpsbzbwSZ8okmG4K1RRjcF05SDwB+XmDgk eWBr0kUME29qcpZjUPGZJWNkuh5Yp4BOMfKSazqr8k8/VjGFUu8MT8EUP3/OELuOR4in6jeilPE Ch8892Zbika7e/GAp83UG7nXsMCMwVI/oAhb172uLIaCFskMHMhCbtkEl9UpSFTwL6tLxxybrH2 4lbdkbs4afdHRStxuxNlzJBOJZllF4wxqMlLfncmrprMplLfZKN1ouc7mQo0sowHD7+ggGcsuDx zloV0vKHJr+ULfPqbfg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-05_06,2026-02-05_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 adultscore=0 clxscore=1015 lowpriorityscore=0 bulkscore=0 suspectscore=0 phishscore=0 malwarescore=0 impostorscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602060001 Content-Type: text/plain; charset="utf-8" Provide a bit to conveniently determine when RVA23U64 is supported. While it's already possible to determine RVA23U64 support with five hwprobe calls and four prctl calls it would be error-prone to require anything (and we presume eventually almost everything) that needs to check for RVA23U64 support to all implement those calls and specific checks. And, while RVA23U64 is the IMA base with mandated extensions, most software will consider it a new base. For these reasons, add the RVA23U64 bit as a base behavior bit. Signed-off-by: Andrew Jones --- Documentation/arch/riscv/hwprobe.rst | 8 +++ arch/riscv/include/uapi/asm/hwprobe.h | 3 +- arch/riscv/kernel/sys_hwprobe.c | 72 +++++++++++++++++++ .../selftests/riscv/hwprobe/which-cpus.c | 2 +- 4 files changed, 83 insertions(+), 2 deletions(-) diff --git a/Documentation/arch/riscv/hwprobe.rst b/Documentation/arch/risc= v/hwprobe.rst index 97226b7c5936..6d915e7ba58a 100644 --- a/Documentation/arch/riscv/hwprobe.rst +++ b/Documentation/arch/riscv/hwprobe.rst @@ -67,6 +67,14 @@ The following keys are defined: programs (it may still be executed in userspace via a kernel-controlled mechanism such as the vDSO). =20 + * :c:macro:`RISCV_HWPROBE_BASE_BEHAVIOR_RVA23U64`: Support for all manda= tory + extensions of RVA23U64, as defined in the RISC-V Profiles specification + starting from commit b1d80660 ("Updated to ratified state.") + + The RVA23U64 base is based upon the IMA base and therefore IMA extensi= on + keys (e.g. :c:macro:`RISCV_HWPROBE_KEY_IMA_EXT_0`:) may be used to pro= be + optional extensions. + * :c:macro:`RISCV_HWPROBE_KEY_IMA_EXT_0`: A bitmask containing the extensi= ons that are compatible with the :c:macro:`RISCV_HWPROBE_BASE_BEHAVIOR_IMA`: base system behavior. diff --git a/arch/riscv/include/uapi/asm/hwprobe.h b/arch/riscv/include/uap= i/asm/hwprobe.h index fed9ea6fd2b5..72d2a4d0b733 100644 --- a/arch/riscv/include/uapi/asm/hwprobe.h +++ b/arch/riscv/include/uapi/asm/hwprobe.h @@ -21,7 +21,8 @@ struct riscv_hwprobe { #define RISCV_HWPROBE_KEY_MARCHID 1 #define RISCV_HWPROBE_KEY_MIMPID 2 #define RISCV_HWPROBE_KEY_BASE_BEHAVIOR 3 -#define RISCV_HWPROBE_BASE_BEHAVIOR_IMA (1 << 0) +#define RISCV_HWPROBE_BASE_BEHAVIOR_IMA (1 << 0) +#define RISCV_HWPROBE_BASE_BEHAVIOR_RVA23U64 (1 << 1) #define RISCV_HWPROBE_KEY_IMA_EXT_0 4 #define RISCV_HWPROBE_IMA_FD (1 << 0) #define RISCV_HWPROBE_IMA_C (1 << 1) diff --git a/arch/riscv/kernel/sys_hwprobe.c b/arch/riscv/kernel/sys_hwprob= e.c index 31d222301bf0..4b9981b15ebe 100644 --- a/arch/riscv/kernel/sys_hwprobe.c +++ b/arch/riscv/kernel/sys_hwprobe.c @@ -23,6 +23,7 @@ #include #include =20 +extern bool riscv_have_user_pmlen_7; =20 #define EXT_KEY(isa_arg, ext, pv, missing) \ do { \ @@ -222,6 +223,75 @@ static bool hwprobe_ext0_has(const struct cpumask *cpu= s, u64 ext) return (pair.value & ext); } =20 +#define HWPROBE_EXT0_RVA23U64 ( \ + /* IMA is always supported */ \ + RISCV_HWPROBE_IMA_FD | \ + RISCV_HWPROBE_IMA_C | \ + /* B is Zba, Zbb and Zbs */ \ + RISCV_HWPROBE_EXT_ZBA | \ + RISCV_HWPROBE_EXT_ZBB | \ + RISCV_HWPROBE_EXT_ZBS | \ + /* ZICSR is always supported */ \ + RISCV_HWPROBE_EXT_ZICNTR | \ + RISCV_HWPROBE_EXT_ZIHPM | \ + /* ZICCIF is in EXT1 */ \ + /* ZICCRSE is in EXT1 */ \ + /* ZICCAMOA is in EXT1 */ \ + RISCV_HWPROBE_EXT_ZICCLSM | \ + /* ZA64RS is in EXT1 */ \ + RISCV_HWPROBE_EXT_ZIHINTPAUSE | \ + /* ZIC64B (check block sizes are 64b) */ \ + RISCV_HWPROBE_EXT_ZICBOM | \ + RISCV_HWPROBE_EXT_ZICBOP | \ + RISCV_HWPROBE_EXT_ZICBOZ | \ + RISCV_HWPROBE_EXT_ZFHMIN | \ + RISCV_HWPROBE_EXT_ZKT | \ + RISCV_HWPROBE_IMA_V | \ + RISCV_HWPROBE_EXT_ZVFHMIN | \ + RISCV_HWPROBE_EXT_ZVBB | \ + RISCV_HWPROBE_EXT_ZVKT | \ + RISCV_HWPROBE_EXT_ZIHINTNTL | \ + RISCV_HWPROBE_EXT_ZICOND | \ + RISCV_HWPROBE_EXT_ZIMOP | \ + RISCV_HWPROBE_EXT_ZCMOP | \ + RISCV_HWPROBE_EXT_ZCB | \ + RISCV_HWPROBE_EXT_ZFA | \ + RISCV_HWPROBE_EXT_ZAWRS | \ + RISCV_HWPROBE_EXT_SUPM /* (check PMLEN=3D7 support) */ \ +) + +#define HWPROBE_EXT1_RVA23U64 ( \ + RISCV_HWPROBE_EXT_ZICCIF | \ + RISCV_HWPROBE_EXT_ZICCRSE | \ + RISCV_HWPROBE_EXT_ZICCAMOA | \ + RISCV_HWPROBE_EXT_ZA64RS \ +) + +static bool hwprobe_has_rva23u64(const struct cpumask *cpus) +{ + struct riscv_hwprobe pair; + + if (!IS_ENABLED(CONFIG_64BIT)) + return false; + + /* Additional mandates for Zic64b and Supm */ + if (riscv_cbom_block_size !=3D 64 || + riscv_cbop_block_size !=3D 64 || + riscv_cboz_block_size !=3D 64 || + !riscv_have_user_pmlen_7) + return false; + + hwprobe_isa_ext0(&pair, cpus); + if ((pair.value & HWPROBE_EXT0_RVA23U64) !=3D HWPROBE_EXT0_RVA23U64) + return false; + + hwprobe_isa_ext1(&pair, cpus); + if ((pair.value & HWPROBE_EXT1_RVA23U64) !=3D HWPROBE_EXT1_RVA23U64) + return false; + + return true; +} + #if defined(CONFIG_RISCV_PROBE_UNALIGNED_ACCESS) static u64 hwprobe_misaligned(const struct cpumask *cpus) { @@ -312,6 +382,8 @@ static void hwprobe_one_pair(struct riscv_hwprobe *pair, */ case RISCV_HWPROBE_KEY_BASE_BEHAVIOR: pair->value =3D RISCV_HWPROBE_BASE_BEHAVIOR_IMA; + if (hwprobe_has_rva23u64(cpus)) + pair->value |=3D RISCV_HWPROBE_BASE_BEHAVIOR_RVA23U64; break; =20 case RISCV_HWPROBE_KEY_IMA_EXT_0: diff --git a/tools/testing/selftests/riscv/hwprobe/which-cpus.c b/tools/tes= ting/selftests/riscv/hwprobe/which-cpus.c index 587feb198c04..f8c797b1d0fd 100644 --- a/tools/testing/selftests/riscv/hwprobe/which-cpus.c +++ b/tools/testing/selftests/riscv/hwprobe/which-cpus.c @@ -105,7 +105,7 @@ int main(int argc, char **argv) pairs[0] =3D (struct riscv_hwprobe){ .key =3D RISCV_HWPROBE_KEY_BASE_BEHA= VIOR, }; rc =3D riscv_hwprobe(pairs, 1, 0, NULL, 0); assert(rc =3D=3D 0 && pairs[0].key =3D=3D RISCV_HWPROBE_KEY_BASE_BEHAVIOR= && - pairs[0].value =3D=3D RISCV_HWPROBE_BASE_BEHAVIOR_IMA); + (pairs[0].value & RISCV_HWPROBE_BASE_BEHAVIOR_IMA)); =20 pairs[0] =3D (struct riscv_hwprobe){ .key =3D RISCV_HWPROBE_KEY_IMA_EXT_0= , }; rc =3D riscv_hwprobe(pairs, 1, 0, NULL, 0); --=20 2.43.0