[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 6/6] arm/mpu: Enable read/write to protection regions for arm32
- To: Ayan Kumar Halder <ayan.kumar.halder@xxxxxxx>
- From: Luca Fancellu <Luca.Fancellu@xxxxxxx>
- Date: Thu, 12 Jun 2025 09:35:30 +0000
- Accept-language: en-GB, en-US
- Arc-authentication-results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=amd.com smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com])
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
- Arc-message-signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hlbuVXEhrs9MyyeX4BvQmIBKEboRfF+W/4hIcY4UHXw=; b=BhmhD3hzx+xHA3FXTmmdgwBaSgPuUaZgfwER2+x7duqLBnMQpEtQu1pmeN0/FS0zg5ipdunXqyYaNWgEAMq8YBluVRSbqlBNC+985QOjCoRy4QSOb9Nm7uoTpjsi9aDIVsTZKe7b38tH9mR9mLYlJFFnCvzsE30DyETWCLeL7FH1sQoARVGiCFatPDAK9UpYRCK0zfiAE7WVZW8QMSsF0MkAiojghCe5ZdUudD+EQTFujUM7r1hJMRwrIorqJ/XlTzavQDIaIpIx1m49hHtDFQ37xOqMssE0MQPcjg+nsQiA9eLWSTl0QHs83NUSQkAvPPrsuKSxaHQ8B+r0mBOjww==
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hlbuVXEhrs9MyyeX4BvQmIBKEboRfF+W/4hIcY4UHXw=; b=UC6J5Ik+L+hhhoLXhFVaw4lsy1BKvVcHzIISGGCJEWYAIVSapDyXngT0Eyyk+2Z6ElCR/mpP4a5A3tTKQIBVB9Oadhi8EgruoctKtou+lqNM8Oac5V5jtXb0XGfVSLXkXHLvYfRv2e3p9//4ATdhaFHPf5ZoAnQqzth2zL+MsPM3nzWb1WtuIyV8q6Tjtyhwf4DYURD1suJ1fEVhHc/mkQNJjlONDqJe2d0dvantBKy2/VwHQdOmGQuB5HeY1SMrZE1FYC38cD3IvbAXSSSWxzy58h/4ohJfYdcwVBdVzochbiUZkXK1YLf9IjhbhAuErrX6SqOPDhH4c1GDXgJurg==
- Arc-seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=sE74iQKNFmKp4QeCIHHkaKumBPffEBtGe+cq4BIuisITOsgIdeNy0Y+qQD8dzLUYH1bsnnTpQBrvhyuzpN8b9vDY8sk7ZP4KGqyj0kQhz5deV4fqvDCkI1DNnjF5EsOfRs3sWq3iGGc5QXcqHsNz6Qn9Tw/eVdd0vulenLOw4W2UI0H94W5TvnTQ6+/S+8y0PN2gOj4q8XCL0A5egJeHbR8ula4GThG1c1YieK7jb/EmmWCoST3/dMeo6LTlV7m0cJf4bNYPhUOw58ixfs/nwpc2d2l9IwTw0U8LkClZfdrZIrQOU8Daqur79Did1z/YO5WRBMgHGKIfV9/8PrDhvQ==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lFBR/iTdK1iKa6xB76Wdy3WajzQgrkI093r7JFYNwE4k7d/59YeqklaD89ggL8CcTeIYp4Jp6sagVt2DApk6yICZQhdCFcvKAMzxqV3qfs3ZbBfc7qm3X6KsjAZitrHzU8lGG4JKhBq3GfO6ZiaZ2HZkVBhLhafjfx9qU1MbMj5yckbf4seqWCPqxCyKd+W87I6mxH6MFFf0626H682HzP2dcmvGkuk9yT1w5zuKiVn/1K7lK9447rnb0yF6XRQlSvXaGyzRMRgs1ZN3ctOKy0H5oLckNjA+5hC/U4dLXX8mkaRNW03A818AbRdkt920n85r0Dqsk8Lz5PxiEJq00w==
- Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
- Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <Bertrand.Marquis@xxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
- Delivery-date: Thu, 12 Jun 2025 09:36:18 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
- Nodisclaimer: true
- Thread-index: AQHb2t7jddptbtJu60em4gEBgB1jlLP/RMoA
- Thread-topic: [PATCH v3 6/6] arm/mpu: Enable read/write to protection regions for arm32
Hi Ayan,
> On 11 Jun 2025, at 15:35, Ayan Kumar Halder <ayan.kumar.halder@xxxxxxx> wrote:
>
> Define prepare_selector(), read_protection_region() and
> write_protection_region() for arm32. Also, define
> GENERATE_{READ/WRITE}_PR_REG_OTHERS to access MPU regions from 32 to 255.
>
> Enable pr_{get/set}_{base/limit}(), region_is_valid() for arm32.
> Enable pr_of_addr() for arm32.
>
> Signed-off-by: Ayan Kumar Halder <ayan.kumar.halder@xxxxxxx>
> ---
Based on your v2
(https://patchwork.kernel.org/project/xen-devel/patch/20250606164854.1551148-4-ayan.kumar.halder@xxxxxxx/)
I was imaging something like this:
diff --git a/xen/arch/arm/mpu/mm.c b/xen/arch/arm/mpu/mm.c
index 74e96ca57137..5d324b2d4ca5 100644
--- a/xen/arch/arm/mpu/mm.c
+++ b/xen/arch/arm/mpu/mm.c
@@ -87,20 +87,28 @@ static void __init __maybe_unused build_assertions(void)
*/
static void prepare_selector(uint8_t *sel)
{
-#ifdef CONFIG_ARM_64
uint8_t cur_sel = *sel;
+#ifdef CONFIG_ARM_64
/*
- * {read,write}_protection_region works using the direct access to the
0..15
- * regions, so in order to save the isb() overhead, change the PRSELR_EL2
- * only when needed, so when the upper 4 bits of the selector will change.
+ * {read,write}_protection_region works using the Arm64 direct access to
the
+ * 0..15 regions, so in order to save the isb() overhead, change the
+ * PRSELR_EL2 only when needed, so when the upper 4 bits of the selector
+ * will change.
*/
cur_sel &= 0xF0U;
+#else
+ /* Arm32 MPU can use direct access for 0-31 */
+ if ( cur_sel > 31 )
+ cur_sel = 0;
+#endif
if ( READ_SYSREG(PRSELR_EL2) != cur_sel )
{
WRITE_SYSREG(cur_sel, PRSELR_EL2);
isb();
}
+
+#ifdef CONFIG_ARM_64
*sel = *sel & 0xFU;
#endif
}
@@ -144,6 +152,12 @@ void read_protection_region(pr_t *pr_read, uint8_t sel)
GENERATE_READ_PR_REG_CASE(29, pr_read);
GENERATE_READ_PR_REG_CASE(30, pr_read);
GENERATE_READ_PR_REG_CASE(31, pr_read);
+ case 32 ... 255:
+ {
+ pr->prbar.bits = READ_SYSREG(PRBAR_EL2);
+ pr->prlar.bits = READ_SYSREG(PRLAR_EL2);
+ break;
+ }
#endif
default:
BUG(); /* Can't happen */
@@ -190,6 +204,12 @@ void write_protection_region(const pr_t *pr_write, uint8_t
sel)
GENERATE_WRITE_PR_REG_CASE(29, pr_write);
GENERATE_WRITE_PR_REG_CASE(30, pr_write);
GENERATE_WRITE_PR_REG_CASE(31, pr_write);
+ case 32 ... 255:
+ {
+ WRITE_SYSREG(pr->prbar.bits & ~MPU_REGION_RES0, PRBAR_EL2);
+ WRITE_SYSREG(pr->prlar.bits & ~MPU_REGION_RES0, PRLAR_EL2);
+ break;
+ }
#endif
default:
BUG(); /* Can't happen */
Is it using too ifdefs in your opinion that would benefit the split you do in
v3?
|