From nobody Sun Mar 22 15:46:45 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1773962857; cv=none; d=zohomail.com; s=zohoarc; b=cSY09YMrHwqj323CjVpiQOEvVLZEkX4NO8HR9xuCntyKD2wJuub9P24laMeNKc11sPBfBQWbjDxBeeP67Zyrr+kY0ujQYkIJqnoX4sXsxU6ADHRIn7fT0UG3Lm1JVJqyex9FC7+c2FQHJaRjMrgMjNxK/sH14PAOZtS3E2ffM/0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773962857; 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=7g1o79/xiI7Xs46q9zIQv9CFVhyUUYrJ+M0IIOYvaIM=; b=TRorHrxkMPK6S5mTHNOmn3akAJj7LSJKK+G9hnhBREjRjMm1LkbYhgT2Vo1lJgVBjsbjw+2BYp9xXmyJ8TG8wDcWRBOlW5TSPO0cgwESlgkmRMpItNfA5arzXpEF2I+MKn/wT96wr0bxtRx66B50b0q8Rohku4PsCxrCmhuuuis= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773962857181606.0503054223292; Thu, 19 Mar 2026 16:27:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w3Mks-0000ri-0h; Thu, 19 Mar 2026 19:26:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w3Mkq-0000rG-NK for qemu-devel@nongnu.org; Thu, 19 Mar 2026 19:26:16 -0400 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w3Mko-0007ep-V8 for qemu-devel@nongnu.org; Thu, 19 Mar 2026 19:26:16 -0400 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-2ad21f437eeso12358575ad.0 for ; Thu, 19 Mar 2026 16:26:14 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:6209:4521:6813:45b7]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b083516ae1sm2979165ad.13.2026.03.19.16.26.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Mar 2026 16:26:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773962773; x=1774567573; 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; bh=7g1o79/xiI7Xs46q9zIQv9CFVhyUUYrJ+M0IIOYvaIM=; b=O1Duqzpv7RonYnY+NvPrewybF4YRgdwu8bYV8gAh10WQ350UUNHiWhk6sBo0ftp1Q2 5mpPHjqzGtNBUCDVppQyjV6xMkyPo0axNAxNF0MmQANb0yIguEEkliRHS14JbGvc7bg3 kJUJ0kmjefY7Bxi5Z1VpRjckv+0xfvkyqh9hJ8v26Ep1RHCIUlnTdMwEveGux/D0Y+AN saur7jua1v0xn52EFXj3K+2rH8BTOnSE41JvKiFNUxIbMh8GYFcRCQkEa53pSzM5hJNS POS6dhzmXi3l/zkEqwrLmZfI8rqYQJ+BphWSzMJSUr+jdhLZsx3dNWpywDuH0Q6fFQvg jTig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773962773; x=1774567573; 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=7g1o79/xiI7Xs46q9zIQv9CFVhyUUYrJ+M0IIOYvaIM=; b=bPYG2npvMwgqVKSmDie9cuh0Ljt4azRecRD6x2uz6p3oTNOEtlmRaH14JFhMDUeKnS tPkg8GRdFdf6FjCZmYOaGNlAg4Nj/Vt14Sxk82uDD5s94Na/pCrlONP5tOqDXMFJroSl mSS9Pa9Ap35wCMm6eC0n3B8Pulr0pLGy032mT67bpSvYs8QGgLtbKCUuW7quld9LSsQH QBCPhspByJidbTq3Zt5//0rl96ZMF7H13iUqAZPUulAbSJ6RUmiNFQuKnaTqADlfN28b OkBDC2pRfNxbhPZQUPz/FcgGbWx6nDKzDPsxjIO1EN+6qryogNIEEeH6k8yRmfLxoMO8 8vSQ== X-Gm-Message-State: AOJu0Yx88U1DHIdPDMAE1KXFFAQTxp8a9cD/mxpZXnOrZfBFCAH18Rrk veJoZ698Np5ZCXfBsN38hFW45Ci8StNPg+3iK7kqos7SimDyFP4M1VRo43AFCw== X-Gm-Gg: ATEYQzyuovGrz26MAppe2ZFjgDYVFBN+hytli6FonR/YkDsxZfUQLTzaQ7QsGTzGxpX DtusROxBwjTmWgIQzXMZ1bfIC3uWqn5nXYaQraBjIC//Zc3QCql12tvDDCsT5w2rxVyl0iPUGqb FtmCkCcxAcw3L+VN+k1EOpDbrBSeFvsXHFc3u5HSKijAO469dDF7mAvB8+Wb9uitaVkugHlhLot oq2rdfJjPUmzWioZYFNvfprtCBy6KHCtGbmryBG1UycjwzLXJ5877RlCJzoOIXKMU42NFW1Ix8E 916Mz0/Mp0/LFQsrkBKPsSAXlyLvbrs6qBF4PPwtINa+Mrjdy+eNRjsgSs6TnRpkhbxqkHvZQwS RzWTO2z13akqXCawjudU4Kz2kOIRO02JzyQHZGFrl27OcNEBt9niojRpdM2KqmnmeEv3N8pK79D 0IEUntOavhmflgkjHd1Oe2oc043KiQLEpq0dTY6V4DbrXwj6sYPMqH X-Received: by 2002:a17:902:ccca:b0:2b0:53b6:d0a4 with SMTP id d9443c01a7336-2b07717eda0mr39169455ad.12.1773962771658; Thu, 19 Mar 2026 16:26:11 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: alistair23@gmail.com, Jay Chang , Daniel Henrique Barboza , Frank Chang , Alistair Francis Subject: [PULL 10/17] target/riscv: Support Smpmpmt extension Date: Fri, 20 Mar 2026 09:25:15 +1000 Message-ID: <20260319232522.1867400-11-alistair.francis@wdc.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319232522.1867400-1-alistair.francis@wdc.com> References: <20260319232522.1867400-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::636; envelope-from=alistair23@gmail.com; helo=mail-pl1-x636.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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 @gmail.com) X-ZM-MESSAGEID: 1773962858488154100 Content-Type: text/plain; charset="utf-8" From: Jay Chang The Smpmpmt extension provides a mechanism to control memory attributes at the granularity of PMP (Physical Memory Protection) registers, similar to how Svpbmt controls memory attributes at the page level. Version 0.6 https://github.com/riscv/riscv-isa-manual/blob/smpmpmt/src/smpmpmt.adoc#svp= bmt Signed-off-by: Jay Chang Reviewed-by: Daniel Henrique Barboza Reviewed-by: Frank Chang Reviewed-by: Alistair Francis Message-ID: <20260305034429.74739-1-jay.chang@sifive.com> Signed-off-by: Alistair Francis --- target/riscv/pmp.h | 1 + target/riscv/cpu_cfg_fields.h.inc | 1 + target/riscv/cpu.c | 2 ++ target/riscv/pmp.c | 16 ++++++++++++++++ 4 files changed, 20 insertions(+) diff --git a/target/riscv/pmp.h b/target/riscv/pmp.h index 271cf24169..467fb6b4b1 100644 --- a/target/riscv/pmp.h +++ b/target/riscv/pmp.h @@ -29,6 +29,7 @@ typedef enum { PMP_WRITE =3D 1 << 1, PMP_EXEC =3D 1 << 2, PMP_AMATCH =3D (3 << 3), + PMP_MTMATCH =3D (3 << 5), PMP_LOCK =3D 1 << 7 } pmp_priv_t; =20 diff --git a/target/riscv/cpu_cfg_fields.h.inc b/target/riscv/cpu_cfg_field= s.h.inc index 70ec650abf..cd1a5ec56b 100644 --- a/target/riscv/cpu_cfg_fields.h.inc +++ b/target/riscv/cpu_cfg_fields.h.inc @@ -59,6 +59,7 @@ BOOL_FIELD(ext_svadu) BOOL_FIELD(ext_svinval) BOOL_FIELD(ext_svnapot) BOOL_FIELD(ext_svpbmt) +BOOL_FIELD(ext_smpmpmt) BOOL_FIELD(ext_svrsw60t59b) BOOL_FIELD(ext_svvptc) BOOL_FIELD(ext_svukte) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 9be79622f4..8ac935ac06 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -223,6 +223,7 @@ const RISCVIsaExtData isa_edata_arr[] =3D { ISA_EXT_DATA_ENTRY(smcsrind, PRIV_VERSION_1_13_0, ext_smcsrind), ISA_EXT_DATA_ENTRY(smdbltrp, PRIV_VERSION_1_13_0, ext_smdbltrp), ISA_EXT_DATA_ENTRY(smepmp, PRIV_VERSION_1_12_0, ext_smepmp), + ISA_EXT_DATA_ENTRY(smpmpmt, PRIV_VERSION_1_12_0, ext_smpmpmt), ISA_EXT_DATA_ENTRY(smrnmi, PRIV_VERSION_1_12_0, ext_smrnmi), ISA_EXT_DATA_ENTRY(smmpm, PRIV_VERSION_1_13_0, ext_smmpm), ISA_EXT_DATA_ENTRY(smnpm, PRIV_VERSION_1_13_0, ext_smnpm), @@ -1276,6 +1277,7 @@ const RISCVCPUMultiExtConfig riscv_cpu_extensions[] = =3D { MULTI_EXT_CFG_BOOL("smaia", ext_smaia, false), MULTI_EXT_CFG_BOOL("smdbltrp", ext_smdbltrp, false), MULTI_EXT_CFG_BOOL("smepmp", ext_smepmp, false), + MULTI_EXT_CFG_BOOL("smpmpmt", ext_smpmpmt, false), MULTI_EXT_CFG_BOOL("smrnmi", ext_smrnmi, false), MULTI_EXT_CFG_BOOL("smmpm", ext_smmpm, false), MULTI_EXT_CFG_BOOL("smnpm", ext_smnpm, false), diff --git a/target/riscv/pmp.c b/target/riscv/pmp.c index 3ef62d26ad..5391caa59c 100644 --- a/target/riscv/pmp.c +++ b/target/riscv/pmp.c @@ -165,6 +165,18 @@ static bool pmp_write_cfg(CPURISCVState *env, uint32_t= pmp_index, uint8_t val) "ignoring pmpcfg write - invalid\n"); } else { uint8_t a_field =3D pmp_get_a_field(val); + + if (!riscv_cpu_cfg(env)->ext_smpmpmt) { + /* If smpmpmt not supported, clear the MTMATCH bit */ + val &=3D ~PMP_MTMATCH; + } else if ((val & PMP_MTMATCH) =3D=3D PMP_MTMATCH) { + /* + * If trying to set reserved value (0x3) for MT field, + * preserve the original MT field from current config. + */ + val =3D (val & ~PMP_MTMATCH) | + (env->pmp_state.pmp[pmp_index].cfg_reg & PMP_MTMATCH); + } /* * When granularity g >=3D 1 (i.e., granularity > 4 bytes), * the NA4 (Naturally Aligned 4-byte) mode is not selectable @@ -355,6 +367,10 @@ static bool pmp_hart_has_privs_default(CPURISCVState *= env, pmp_priv_t privs, * Check if the address has required RWX privs to complete desired operati= on * Return true if a pmp rule match or default match * Return false if no match + * + * Note: The MT (Memory Type) field from Smpmpmt extension is stored in + * pmpcfg but is not acted upon during access checks. Cache attributes + * have no functional impact in QEMU emulation. */ bool pmp_hart_has_privs(CPURISCVState *env, hwaddr addr, target_ulong size, pmp_priv_t privs, --=20 2.53.0