[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 3/3] arm/mpu: Provide access to the MPU region from the C code


  • To: Ayan Kumar Halder <ayan.kumar.halder@xxxxxxx>
  • From: Luca Fancellu <Luca.Fancellu@xxxxxxx>
  • Date: Mon, 9 Jun 2025 08:37:57 +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=bSv3WluM2C0ZHzKojUv6lJqxvK8XihoWm2roduIx/qA=; b=rqKOswlKZNnsoQsWUXJpv/fI8jqStKEkTTiqe8k4VWdyRQ9CehNaIBvDQANRIf41/dBwZdx1Nt2uTq4O44WyMfyJA+6ilcZp57nS0yptZcpjejXbH4pzDSUbpv44A1KIYnSBWtnst738oLL/rdqYrcOxehHDtUiPV6qs/GKMYc0pf+aJJWoyhH7H6aNEMRUg14UQaUNjG+QnfmnYopocAE8KdDGpaUFmo8GDrtdvaVua/Yy7QHuCC5HdgYb5N/3G5Qj2L+IdUAeenD9PtMu5n9q16aZT7u/LNWyN/n5TfmIsVl9InAbtJfugoxajV6Ac8zVOQZvhL+HjVM/z4K7Cnw==
  • 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=bSv3WluM2C0ZHzKojUv6lJqxvK8XihoWm2roduIx/qA=; b=bS0yRkgbZPspa0ASaEZrXtaS5Xc0HLPrhEjlG9kPq59WRhxvQVmL4Dq2KqE9fqlYRajy3sbEM1MmMLfwJdyKBtXUmG87O5ZmOXc5H655u3jN9s5lw7IRolEaN0DvE3jY7iRm/zJozl0uqP+8rrpnagrNBf0TgR9FRsNOQ+QR5fzlshOAADio9Nh/L6fg92j/Leb8eZKWEOap4WMVILQW5LopXu1n5t7+9+P7ss78SyFGf6aMse/8RhWplbvmtVz24ylXUelEYo2XKKrBDeIXUuEDPHDzGdRtE5YSW5BIl3TsEfBqLA3ektpml3T0VHwHrxjTf1EB0AncW4BAzQD4Kw==
  • Arc-seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=ypm1DFotUmNI3WNXSqra9LTl4EfQGfwmNkaqK9GXXl5P+Dh9OWgGlVAhZgNYtqWPPiZjLjKsUXOFfNgWoB+QO8kBgAY5ICRKjjwnM7iFa2VlYDpcc2G5uT92h1XjAI40iiSQI/PJ+Vg3P6TiO3AYR8c2Ln6yRsYTWiBwmyOSUo3/BATXkptNnb0oJTpqvT+Wrwyyh1HECrLzJfJ+cBqcI8BecIAurh3UeljODBohWvySFSRRe7r3VwhmYYll+VHrJul+6u3fgfjSeY2k9xqkdgQNt/rOkuUEsqZ0dplAy1k+1NmD7nFuU68tESQM2fBYp8PDCTUfscx9lTPb/rpU8A==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SHyZQ+XFAck4MORuj2rzZfOjlcCvf0pya2PWUYI0tVhaVpik7QNZUWlWQ5XX3hfmztqrlyTps6MMQPXaXZUErlQyEB2GVQ79WpX/9qXwC/xahqyglwoBaWP+zI1EPx+ke/+5gh9DMI2grzjN0UbEo6+zAU1AGbf6k4Roy0vDb946HrPUR4v+Wjt77BcaLfSlipjs1mb/0unmecEObEaTE1O4FBVak4UHVIOJdl3gCPZhcG/OigaW1Xn+8N0IroNN7Rt9u0W72AzD23tr47pjBujCo/dzmYixOJn+hIBPtvKb8OTTgnFQoP6JHkrzVaYGNggxnn7dyWJhB9HPqm+uAQ==
  • 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: Mon, 09 Jun 2025 08:38:53 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Thread-index: AQHb1wMFgqp5jCI+gEaPA46nKsooErP6hW+A
  • Thread-topic: [PATCH v2 3/3] arm/mpu: Provide access to the MPU region from the C code

Hi Ayan,

If I understand correctly Armv8-R AArch32 supports up to 255 regions, so I 
would expect ...

> /*
>  * Armv8-R supports direct access and indirect access to the MPU regions 
> through
>  * registers:
> @@ -85,6 +87,7 @@ static void __init __maybe_unused build_assertions(void)
>  */
> static void prepare_selector(uint8_t *sel)
> {
> +#ifdef CONFIG_ARM_64
>     uint8_t cur_sel = *sel;
> 
>     /*
> @@ -98,7 +101,8 @@ static void prepare_selector(uint8_t *sel)
>         WRITE_SYSREG(cur_sel, PRSELR_EL2);
>         isb();
>     }
> -    *sel &= 0xFU;
> +    *sel = *sel & 0xFU;
> +#endif

something here to check if the selector is 0-31 or not and:

- set the selector to 0 if set is 0-31
- set the selector to 32-255 if sel > 32

And ...


> }
> 
> void read_protection_region(pr_t *pr_read, uint8_t sel)
> @@ -123,6 +127,24 @@ void read_protection_region(pr_t *pr_read, uint8_t sel)
>         GENERATE_READ_PR_REG_CASE(13, pr_read);
>         GENERATE_READ_PR_REG_CASE(14, pr_read);
>         GENERATE_READ_PR_REG_CASE(15, pr_read);
> +#ifdef CONFIG_ARM_32
> +        GENERATE_READ_PR_REG_CASE(16, pr_read);
> +        GENERATE_READ_PR_REG_CASE(17, pr_read);
> +        GENERATE_READ_PR_REG_CASE(18, pr_read);
> +        GENERATE_READ_PR_REG_CASE(19, pr_read);
> +        GENERATE_READ_PR_REG_CASE(20, pr_read);
> +        GENERATE_READ_PR_REG_CASE(21, pr_read);
> +        GENERATE_READ_PR_REG_CASE(22, pr_read);
> +        GENERATE_READ_PR_REG_CASE(23, pr_read);
> +        GENERATE_READ_PR_REG_CASE(24, pr_read);
> +        GENERATE_READ_PR_REG_CASE(25, pr_read);
> +        GENERATE_READ_PR_REG_CASE(26, pr_read);
> +        GENERATE_READ_PR_REG_CASE(27, pr_read);
> +        GENERATE_READ_PR_REG_CASE(28, pr_read);
> +        GENERATE_READ_PR_REG_CASE(29, pr_read);
> +        GENERATE_READ_PR_REG_CASE(30, pr_read);
> +        GENERATE_READ_PR_REG_CASE(31, pr_read);
> +#endif
>     default:

have something here for Arm32 to access the regions 32-255


>         BUG(); /* Can't happen */
>         break;
> @@ -151,6 +173,24 @@ void write_protection_region(const pr_t *pr_write, 
> uint8_t sel)
>         GENERATE_WRITE_PR_REG_CASE(13, pr_write);
>         GENERATE_WRITE_PR_REG_CASE(14, pr_write);
>         GENERATE_WRITE_PR_REG_CASE(15, pr_write);
> +#ifdef CONFIG_ARM_32
> +        GENERATE_WRITE_PR_REG_CASE(16, pr_write);
> +        GENERATE_WRITE_PR_REG_CASE(17, pr_write);
> +        GENERATE_WRITE_PR_REG_CASE(18, pr_write);
> +        GENERATE_WRITE_PR_REG_CASE(19, pr_write);
> +        GENERATE_WRITE_PR_REG_CASE(20, pr_write);
> +        GENERATE_WRITE_PR_REG_CASE(21, pr_write);
> +        GENERATE_WRITE_PR_REG_CASE(22, pr_write);
> +        GENERATE_WRITE_PR_REG_CASE(23, pr_write);
> +        GENERATE_WRITE_PR_REG_CASE(24, pr_write);
> +        GENERATE_WRITE_PR_REG_CASE(25, pr_write);
> +        GENERATE_WRITE_PR_REG_CASE(26, pr_write);
> +        GENERATE_WRITE_PR_REG_CASE(27, pr_write);
> +        GENERATE_WRITE_PR_REG_CASE(28, pr_write);
> +        GENERATE_WRITE_PR_REG_CASE(29, pr_write);
> +        GENERATE_WRITE_PR_REG_CASE(30, pr_write);
> +        GENERATE_WRITE_PR_REG_CASE(31, pr_write);
> +#endif
>     default:

also here have something for Arm32 to access the regions 32-255

>         BUG(); /* Can't happen */
>         break;


Please let me know your thoughts.

Cheers,
Luca





 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.