Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2230813/?format=api
{ "id": 2230813, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2230813/?format=api", "web_url": "http://patchwork.ozlabs.org/project/opensbi/patch/20260430045528.420437-5-npiggin@gmail.com/", "project": { "id": 67, "url": "http://patchwork.ozlabs.org/api/1.1/projects/67/?format=api", "name": "OpenSBI development", "link_name": "opensbi", "list_id": "opensbi.lists.infradead.org", "list_email": "opensbi@lists.infradead.org", "web_url": "https://github.com/riscv/opensbi", "scm_url": "", "webscm_url": "" }, "msgid": "<20260430045528.420437-5-npiggin@gmail.com>", "date": "2026-04-30T04:55:21", "name": "[3/7] lib: sbi: Move non-HART PMP functions to sbi_pmp.c", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "f08eb4d7e022e8282971545aab04fe1597ca2d70", "submitter": { "id": 69518, "url": "http://patchwork.ozlabs.org/api/1.1/people/69518/?format=api", "name": "Nicholas Piggin", "email": "npiggin@gmail.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/opensbi/patch/20260430045528.420437-5-npiggin@gmail.com/mbox/", "series": [ { "id": 502194, "url": "http://patchwork.ozlabs.org/api/1.1/series/502194/?format=api", "web_url": "http://patchwork.ozlabs.org/project/opensbi/list/?series=502194", "date": "2026-04-30T04:55:21", "name": null, "version": 1, "mbox": "http://patchwork.ozlabs.org/series/502194/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2230813/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2230813/checks/", "tags": {}, "headers": { "Return-Path": "\n <opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=lists.infradead.org header.i=@lists.infradead.org\n header.a=rsa-sha256 header.s=bombadil.20210309 header.b=piB/gqNT;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=XIDeq9Dk;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=none (no SPF record) smtp.mailfrom=lists.infradead.org\n (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org;\n envelope-from=opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from bombadil.infradead.org (bombadil.infradead.org\n [IPv6:2607:7c80:54:3::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g5hhN3jmtz1yGq\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 14:56:04 +1000 (AEST)", "from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1wIJRP-00000004g9N-0mdw;\n\tThu, 30 Apr 2026 04:55:59 +0000", "from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1wIJRM-00000004g81-42GJ\n\tfor opensbi@lists.infradead.org;\n\tThu, 30 Apr 2026 04:55:58 +0000", "by mail-pg1-x535.google.com with SMTP id\n 41be03b00d2f7-c79662668bbso158512a12.1\n for <opensbi@lists.infradead.org>;\n Wed, 29 Apr 2026 21:55:56 -0700 (PDT)", "from localhost ([124.158.97.178])\n by smtp.gmail.com with ESMTPSA id\n 41be03b00d2f7-c7fd6506f0csm4504626a12.27.2026.04.29.21.55.54\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 29 Apr 2026 21:55:54 -0700 (PDT)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20210309; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:\n\tList-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:\n\tMessage-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=lv9a4nszYfjpeDVwu68CnkMNSmKmP/GYCi6/PecebPM=; b=piB/gqNTPG/Q65\n\ttGP21tNqO3KbTo5TDDxyu7bSFq7ZQBA2bE29nOKTYIr193u1wdqf9fstd96w/SxiXW8+jd81bHrlg\n\tmsbbD5Mm44F3wD7W22ereVth29u/6svlO7mSR0OiLuyvYlGLQcHon5x6rwCvVdIA6Ch2izqSIpi/1\n\tuVJBYT8cYcnpI2EuyEmf1hZiqdU8EkslJ99bWIeQl4ek3o0JprIFQ38R8GA+dG60yho+IwwLlRRh7\n\tJ3e9jyWFINqV8AKM7DtCrmFliSIEcYM/9/V7gA1+ou6iEUYv3qfeWaosCiabgBTyYrt0efZwzXqcW\n\tl38VQ/TBPI3kXMQZD/jg==;", "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20251104; t=1777524955; x=1778129755;\n darn=lists.infradead.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=4kmUs9vb/vcr2mUVAAZf1T7BVHH8HGZpC2peAj4cQSM=;\n b=XIDeq9DkVP4dmpKbV3u0grTItijwmk2CEUA97y9aytm7vtUFEOTpkcGIbrs2CTyJJL\n nCkvr7etj9DZ5y4Gc38s0iy2PpnghdC1mMxnN1xBZxytvePpleIuCvpPQDjH+ZDxieNv\n ECKjbFYn+ab5E1gAmrFMxwk2w93hj2zcjTAYkZDeRZZ0IsejGZAlr5G5bJyldnR02gif\n PiCwHGm9aUCOJE3qphO3Ujk6ZGibpiTzuIcSW46InVWVstIKoqXMYnnJgAfO3b/b3dzP\n chrikus+CcxeXECHXOwtiwH8fA6rSp7zYrq8yYUxo5q7sg6Tez/WN78loU/XJtzmd6pT\n FidA==" ], "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777524955; x=1778129755;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=4kmUs9vb/vcr2mUVAAZf1T7BVHH8HGZpC2peAj4cQSM=;\n b=OyuAhQVyDAhM0xLj7AzTBsnIod4+L+NqQwLeXv/0XmutsYiaAW+AB1kGkHBJrLUB5h\n 4pNaQ46lqc4NB/kHKbVWZHNfmo0sDQNl9m1h1Pr+2RF9kJHPG8175VqewkTB97aEUEF8\n OJOIhW2ObjOf6cEfHgGfAl0wpigFzJnUjO6MQ4hl1umM97AurhNSXfkX6KZOgF22qgXi\n CgB70U3jZsU3G37lFJLBGPoyJrINw292p0rtqINWVOgAu/4iwQTE4SPzyDz8hlYGA6ft\n IHOzrKBGAGyn0+l09OQ1qhYrWn/wZUtutXCEk0kbV+giJE7WJhNsn6FSxraN7CTwGCPo\n 0HKQ==", "X-Gm-Message-State": "AOJu0YzHP76ioGc8L/jLxFwxe8ZgZDwk6Jm0xOIJ7axw3EGE0gEimaB9\n\tULKV4SjuT/eb2KZEdpMtYoAOgFAnMyXgUukQcYCsiyJsei2l4Ngd/diVv3homw==", "X-Gm-Gg": "AeBDieuZcv4AmGe2nVnrtsmgiAKGgmLbfJBzlsL+gzm2Ei+6AS8IAfDealoub3gaUam\n\taH+dBpa0ky9yDmz75rTkP+J61tpZIHcLYkDMe64i0D+zF8yzQOy04OQ8ePZI7ZgWIozY2lQK20/\n\tPmO7Yz7nOWz6SFlnoWUDPI1XLIQziTSJvYxqpqQbOORt9hwnlpj9xFmhWcPx7gLHP+gsxyKUSHn\n\ttHQuwWfAkOz7VN59kKVB9UGClz+5EdCvC22GycoUKPQy26wPh2FKcG9XdUENcUgR54EZ4DQWxmy\n\trJhtO99c5tWSpjc2Bnw0MLk4149sCutR68nkbkEulRT2OwwiwbnTZ8K8PPhzqM6VvMJ02JsE8K1\n\tEuW4chIgGWxEX40bvqwV+AY+dURo5EdQt/goxFaDewLh1xkFFczrVd0uwEWu7BGnTC9B6YqrIcr\n\tl5pwOs+MQicj5pwXHjkZ5IkyFBXnr5XUYMl5KT7Pn9epw=", "X-Received": "by 2002:a05:6a20:7f82:b0:3a2:ecb8:56d7 with SMTP id\n adf61e73a8af0-3a3cf8612c3mr1433331637.45.1777524955387;\n Wed, 29 Apr 2026 21:55:55 -0700 (PDT)", "From": "Nicholas Piggin <npiggin@gmail.com>", "To": "opensbi@lists.infradead.org", "Cc": "Nicholas Piggin <npiggin@gmail.com>", "Subject": "[PATCH 3/7] lib: sbi: Move non-HART PMP functions to sbi_pmp.c", "Date": "Thu, 30 Apr 2026 14:55:21 +1000", "Message-ID": "<20260430045528.420437-5-npiggin@gmail.com>", "X-Mailer": "git-send-email 2.53.0", "In-Reply-To": "<20260430045528.420437-1-npiggin@gmail.com>", "References": "<20260430045528.420437-1-npiggin@gmail.com>", "MIME-Version": "1.0", "X-CRM114-Version": "20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ", "X-CRM114-CacheID": "sfid-20260429_215557_008917_E55041A4 ", "X-CRM114-Status": "GOOD ( 19.99 )", "X-Spam-Score": "-2.1 (--)", "X-Spam-Report": "Spam detection software,\n running on the system \"bombadil.infradead.org\",\n has NOT identified this incoming email as spam. The original\n message has been attached to this so you can view it or label\n similar future email. If you have any questions, see\n the administrator of that system for details.\n Content preview: Create a new file for handling the RISC-V PMP format.\n Signed-off-by:\n Nicholas Piggin --- include/sbi/sbi_pmp.h | 22 ++++++++++\n lib/sbi/objects.mk\n | 1 + lib/sbi/riscv_asm.c | 89 + lib/sbi/sbi_pmp.c | 96 ++++++++++++ [...] \n Content analysis details: (-2.1 points, 5.0 required)\n pts rule name description\n ---- ----------------------\n --------------------------------------------------\n -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no\n trust\n [2607:f8b0:4864:20:0:0:0:535 listed in]\n [list.dnswl.org]\n 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record\n -0.0 SPF_PASS SPF: sender matches SPF record\n -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from\n author's\n domain\n 0.1 DKIM_SIGNED Message has a DKIM or DK signature,\n not necessarily valid\n -0.1 DKIM_VALID Message has at least one valid DKIM or DK\n signature\n -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from\n envelope-from domain\n -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1%\n [score: 0.0000]\n 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail\n provider\n [npiggin(at)gmail.com]", "X-BeenThere": "opensbi@lists.infradead.org", "X-Mailman-Version": "2.1.34", "Precedence": "list", "List-Id": "<opensbi.lists.infradead.org>", "List-Unsubscribe": "<http://lists.infradead.org/mailman/options/opensbi>,\n <mailto:opensbi-request@lists.infradead.org?subject=unsubscribe>", "List-Archive": "<http://lists.infradead.org/pipermail/opensbi/>", "List-Post": "<mailto:opensbi@lists.infradead.org>", "List-Help": "<mailto:opensbi-request@lists.infradead.org?subject=help>", "List-Subscribe": "<http://lists.infradead.org/mailman/listinfo/opensbi>,\n <mailto:opensbi-request@lists.infradead.org?subject=subscribe>", "Content-Type": "text/plain; charset=\"us-ascii\"", "Content-Transfer-Encoding": "7bit", "Sender": "\"opensbi\" <opensbi-bounces@lists.infradead.org>", "Errors-To": "opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org" }, "content": "Create a new file for handling the RISC-V PMP format.\n\nSigned-off-by: Nicholas Piggin <npiggin@gmail.com>\n---\n include/sbi/sbi_pmp.h | 22 ++++++++++\n lib/sbi/objects.mk | 1 +\n lib/sbi/riscv_asm.c | 89 +--------------------------------------\n lib/sbi/sbi_pmp.c | 96 +++++++++++++++++++++++++++++++++++++++++++\n 4 files changed, 120 insertions(+), 88 deletions(-)\n create mode 100644 include/sbi/sbi_pmp.h\n create mode 100644 lib/sbi/sbi_pmp.c", "diff": "diff --git a/include/sbi/sbi_pmp.h b/include/sbi/sbi_pmp.h\nnew file mode 100644\nindex 00000000..66a5cc75\n--- /dev/null\n+++ b/include/sbi/sbi_pmp.h\n@@ -0,0 +1,22 @@\n+/*\n+ * SPDX-FileCopyrightText: (c) 2025-2026 Tenstorrent USA, Inc.\n+ * SPDX-License-Identifier: BSD-2-Clause\n+ */\n+\n+#ifndef __SBI_PMP_H__\n+#define __SBI_PMP_H__\n+\n+#include <sbi/sbi_types.h>\n+\n+struct pmp {\n+\tunsigned long addr;\n+\tu8 cfg;\n+};\n+typedef struct pmp pmp_t;\n+\n+int pmp_encode(pmp_t *pmp, unsigned long prot, unsigned long addr,\n+\t unsigned long log2len);\n+int pmp_decode(pmp_t *pmp, unsigned long *prot, unsigned long *addr,\n+\t unsigned long *log2len);\n+\n+#endif\ndiff --git a/lib/sbi/objects.mk b/lib/sbi/objects.mk\nindex 07d13229..0e29a277 100644\n--- a/lib/sbi/objects.mk\n+++ b/lib/sbi/objects.mk\n@@ -87,6 +87,7 @@ libsbi-objs-y += sbi_init.o\n libsbi-objs-y += sbi_ipi.o\n libsbi-objs-y += sbi_irqchip.o\n libsbi-objs-y += sbi_platform.o\n+libsbi-objs-y += sbi_pmp.o\n libsbi-objs-y += sbi_pmu.o\n libsbi-objs-y += sbi_dbtr.o\n libsbi-objs-y += sbi_mpxy.o\ndiff --git a/lib/sbi/riscv_asm.c b/lib/sbi/riscv_asm.c\nindex e33e3c36..9b45805c 100644\n--- a/lib/sbi/riscv_asm.c\n+++ b/lib/sbi/riscv_asm.c\n@@ -12,6 +12,7 @@\n #include <sbi/sbi_error.h>\n #include <sbi/sbi_platform.h>\n #include <sbi/sbi_console.h>\n+#include <sbi/sbi_pmp.h>\n \n /* determine CPU extension, return non-zero support */\n int misa_extension_imp(char ext)\n@@ -272,27 +273,6 @@ void csr_write_num(int csr_num, unsigned long val)\n #undef switchcase_csr_write\n }\n \n-struct pmp {\n-\tunsigned long addr;\n-\tu8 cfg;\n-};\n-typedef struct pmp pmp_t;\n-\n-static unsigned long ctz(unsigned long x)\n-{\n-\tunsigned long ret = 0;\n-\n-\tif (x == 0)\n-\t\treturn 8 * sizeof(x);\n-\n-\twhile (!(x & 1UL)) {\n-\t\tret++;\n-\t\tx = x >> 1;\n-\t}\n-\n-\treturn ret;\n-}\n-\n int pmp_disable(unsigned int n)\n {\n \tint pmpcfg_csr, pmpcfg_shift;\n@@ -336,35 +316,6 @@ int is_pmp_entry_mapped(unsigned long entry)\n \treturn false;\n }\n \n-static int pmp_encode(pmp_t *pmp, unsigned long prot, unsigned long addr,\n-\t\t unsigned long log2len)\n-{\n-\t/* check parameters */\n-\tif (log2len > __riscv_xlen || log2len < PMP_SHIFT)\n-\t\treturn SBI_EINVAL;\n-\n-\t/* encode PMP config */\n-\tprot &= ~PMP_A;\n-\tprot |= (log2len == PMP_SHIFT) ? PMP_A_NA4 : PMP_A_NAPOT;\n-\tpmp->cfg = prot;\n-\n-\t/* encode PMP address */\n-\tif (log2len == PMP_SHIFT) {\n-\t\tpmp->addr = (addr >> PMP_SHIFT);\n-\t} else {\n-\t\tif (log2len == __riscv_xlen) {\n-\t\t\tpmp->addr = -1UL;\n-\t\t} else {\n-\t\t\tunsigned long addrmask;\n-\t\t\taddrmask = (1UL << (log2len - PMP_SHIFT)) - 1;\n-\t\t\tpmp->addr = ((addr >> PMP_SHIFT) & ~addrmask);\n-\t\t\tpmp->addr |= (addrmask >> 1);\n-\t\t}\n-\t}\n-\n-\treturn SBI_OK;\n-}\n-\n int pmp_set(unsigned int n, unsigned long prot, unsigned long addr,\n \t unsigned long log2len)\n {\n@@ -403,44 +354,6 @@ int pmp_set(unsigned int n, unsigned long prot, unsigned long addr,\n \treturn 0;\n }\n \n-static int pmp_decode(pmp_t *pmp, unsigned long *prot_out, unsigned long *addr_out,\n-\t\t unsigned long *log2len)\n-{\n-\tunsigned long prot;\n-\tunsigned long t1, addr, len;\n-\n-\t/* check parameters */\n-\tif (!prot_out || !addr_out || !log2len)\n-\t\treturn SBI_EINVAL;\n-\t*prot_out = *addr_out = *log2len = 0;\n-\n-\t/* decode PMP config */\n-\tprot = pmp->cfg;\n-\n-\t/* decode PMP address */\n-\tif ((prot & PMP_A) == PMP_A_NAPOT) {\n-\t\taddr = pmp->addr;\n-\t\tif (addr == -1UL) {\n-\t\t\taddr\t= 0;\n-\t\t\tlen\t= __riscv_xlen;\n-\t\t} else {\n-\t\t\tt1\t= ctz(~addr);\n-\t\t\taddr\t= (addr & ~((1UL << t1) - 1)) << PMP_SHIFT;\n-\t\t\tlen\t= (t1 + PMP_SHIFT + 1);\n-\t\t}\n-\t} else {\n-\t\taddr\t= pmp->addr << PMP_SHIFT;\n-\t\tlen\t= PMP_SHIFT;\n-\t}\n-\n-\t/* return details */\n-\t*prot_out = prot;\n-\t*addr_out = addr;\n-\t*log2len = len;\n-\n-\treturn SBI_OK;\n-}\n-\n int pmp_get(unsigned int n, unsigned long *prot_out, unsigned long *addr_out,\n \t unsigned long *log2len)\n {\ndiff --git a/lib/sbi/sbi_pmp.c b/lib/sbi/sbi_pmp.c\nnew file mode 100644\nindex 00000000..91eab87f\n--- /dev/null\n+++ b/lib/sbi/sbi_pmp.c\n@@ -0,0 +1,96 @@\n+/*\n+ * SPDX-License-Identifier: BSD-2-Clause\n+ *\n+ * Copyright (c) 2019 Western Digital Corporation or its affiliates.\n+ *\n+ * Authors:\n+ * Anup Patel <anup.patel@wdc.com>\n+ */\n+\n+#include <sbi/riscv_asm.h>\n+#include <sbi/riscv_encoding.h>\n+#include <sbi/sbi_error.h>\n+#include <sbi/sbi_console.h>\n+#include <sbi/sbi_pmp.h>\n+\n+static unsigned long ctz(unsigned long x)\n+{\n+\tunsigned long ret = 0;\n+\n+\tif (x == 0)\n+\t\treturn 8 * sizeof(x);\n+\n+\twhile (!(x & 1UL)) {\n+\t\tret++;\n+\t\tx = x >> 1;\n+\t}\n+\n+\treturn ret;\n+}\n+\n+int pmp_encode(pmp_t *pmp, unsigned long prot, unsigned long addr,\n+\t unsigned long log2len)\n+{\n+\t/* check parameters */\n+\tif (log2len > __riscv_xlen || log2len < PMP_SHIFT)\n+\t\treturn SBI_EINVAL;\n+\n+\t/* encode PMP config */\n+\tprot &= ~PMP_A;\n+\tprot |= (log2len == PMP_SHIFT) ? PMP_A_NA4 : PMP_A_NAPOT;\n+\tpmp->cfg = prot;\n+\n+\t/* encode PMP address */\n+\tif (log2len == PMP_SHIFT) {\n+\t\tpmp->addr = (addr >> PMP_SHIFT);\n+\t} else {\n+\t\tif (log2len == __riscv_xlen) {\n+\t\t\tpmp->addr = -1UL;\n+\t\t} else {\n+\t\t\tunsigned long addrmask;\n+\t\t\taddrmask = (1UL << (log2len - PMP_SHIFT)) - 1;\n+\t\t\tpmp->addr = ((addr >> PMP_SHIFT) & ~addrmask);\n+\t\t\tpmp->addr |= (addrmask >> 1);\n+\t\t}\n+\t}\n+\n+\treturn SBI_OK;\n+}\n+\n+int pmp_decode(pmp_t *pmp, unsigned long *prot_out, unsigned long *addr_out,\n+\t unsigned long *log2len)\n+{\n+\tunsigned long prot;\n+\tunsigned long t1, addr, len;\n+\n+\t/* check parameters */\n+\tif (!prot_out || !addr_out || !log2len)\n+\t\treturn SBI_EINVAL;\n+\t*prot_out = *addr_out = *log2len = 0;\n+\n+\t/* decode PMP config */\n+\tprot = pmp->cfg;\n+\n+\t/* decode PMP address */\n+\tif ((prot & PMP_A) == PMP_A_NAPOT) {\n+\t\taddr = pmp->addr;\n+\t\tif (addr == -1UL) {\n+\t\t\taddr\t= 0;\n+\t\t\tlen\t= __riscv_xlen;\n+\t\t} else {\n+\t\t\tt1\t= ctz(~addr);\n+\t\t\taddr\t= (addr & ~((1UL << t1) - 1)) << PMP_SHIFT;\n+\t\t\tlen\t= (t1 + PMP_SHIFT + 1);\n+\t\t}\n+\t} else {\n+\t\taddr\t= pmp->addr << PMP_SHIFT;\n+\t\tlen\t= PMP_SHIFT;\n+\t}\n+\n+\t/* return details */\n+\t*prot_out = prot;\n+\t*addr_out = addr;\n+\t*log2len = len;\n+\n+\treturn SBI_OK;\n+}\n", "prefixes": [ "3/7" ] }