Skip to content

Arm-Cortex-R82: Add MPU support#1347

Merged
aggarg merged 3 commits intoFreeRTOS:mainfrom
AhmedIsmail02:add-cortex-r82-mpu-support
Feb 11, 2026
Merged

Arm-Cortex-R82: Add MPU support#1347
aggarg merged 3 commits intoFreeRTOS:mainfrom
AhmedIsmail02:add-cortex-r82-mpu-support

Conversation

@AhmedIsmail02
Copy link
Member

@AhmedIsmail02 AhmedIsmail02 commented Dec 22, 2025

Description

This PR introduces the following:

  • Support for the Memory Protection Unit (MPU) to the ARM Cortex-R82 port. The MPU enhances system security by allowing the definition of memory regions with specific access permissions. The following changes have been made:

    • Added MPU configuration functions in port.c to set up memory regions and their attributes.
    • Updated portASM.S to include assembly routines for MPU and context switching with MPU support.
    • Created mpu_wrappers_v2_asm.c to provide assembly wrappers for MPU operations.
    • Updated portmacro.h to include MPU-related macros and definitions.
    • Modified task.h to include MPU-related task attributes.
    • Updated CMakeLists.txt to include the new MPU source file.
    • Enhanced the README.md with instructions on MPU configuration.
  • Minor code improvements to enhance readability and maintainability of the Cortex-R82 port files. Changes include refactoring variable names and optimising comments without altering functionality.

This PR blocks Arm-Cortex-R82: Add SMP MPU examples PR.

Test Steps

Checklist:

  • I have tested my changes. No regression in existing tests.
  • I have modified and/or added unit-tests to cover the code changes in this Pull Request.

Related Issue

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

.macro saveallgpregisters
/* Save all general-purpose registers on stack. */
.macro portLOAD_MPU_REGIONS_ADDRESSES
MOV X3, #4 /* i = 4 First four MPU regions are already programmed.*/
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Possible to use some macro for this 4?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Certainly, the portSTACK_REGION macro which is now defined with a value of 4 is used instead, also a comment has been added for better readability.

@AhmedIsmail02 AhmedIsmail02 force-pushed the add-cortex-r82-mpu-support branch 3 times, most recently from 91c7ebb to 6c6df4f Compare January 26, 2026 10:56
aggarg
aggarg previously approved these changes Feb 3, 2026
kstribrnAmzn
kstribrnAmzn previously approved these changes Feb 6, 2026
Comment on lines 1260 to 1264
#if ( configENABLE_MPU == 1 )
xSchedulerRunning = pdTRUE;
#endif /* ( configENABLE_MPU == 1 ) */

#if ( configENABLE_MPU == 1 )
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Non-blocking: Why keep these as separate preprocessor conditionals?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch, these are now merged.

/* Use SVC to obtain the core ID in a way that is safe when called
* from EL0 tasks. ISRs and EL1 code should use
* ucPortGetCoreIDFromIsr()/portGET_CORE_ID_FROM_ISR().
*/
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider swapping the xCoreID to a uint8_t type

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

@AhmedIsmail02 AhmedIsmail02 dismissed stale reviews from kstribrnAmzn and aggarg via bce08c8 February 10, 2026 11:29
@AhmedIsmail02 AhmedIsmail02 force-pushed the add-cortex-r82-mpu-support branch from 612971c to bce08c8 Compare February 10, 2026 11:29
This commit introduces support for the Memory Protection Unit (MPU)
to the ARM Cortex-R82 port. The MPU enhances system security
by allowing the definition of memory regions with specific access
permissions. The following changes have been made:
- Added MPU configuration functions in `port.c` to set up memory
  regions and their attributes.
- Updated `portASM.S` to include assembly routines for MPU
  and context switching with MPU support.
- Created `mpu_wrappers_v2_asm.c` to provide assembly wrappers for
  MPU operations.
- Updated `portmacro.h` to include MPU-related macros and definitions.
- Modified `task.h` to include MPU-related task attributes.
- Updated `CMakeLists.txt` to include the new MPU source file.
- Enhanced the `README.md` with instructions on MPU configuration.

Signed-off-by: Ahmed Ismail <[email protected]>
This commit includes minor code improvements to enhance readability
and maintainability of the Cortex-R82 port files. Changes include
refactoring variable names, optimizing comments, and improving code
structure without altering functionality.

Signed-off-by: Ahmed Ismail <[email protected]>
This stack-depth check should not be performed for ports
where portUSING_MPU_WRAPPERS is set to 1.
In this case, pxTopOfStack and pxNewTCB->pxTopOfStack reside
in different memory regions: pxTopOfStack is in unprivileged SRAM,
while pxNewTCB->pxTopOfStack is in privileged SRAM.
This is because pxPortInitialiseStack() returns the address of
`ullContext` array rather than the decremented pxTopOfStack,
as is done in the non-MPU case.
Consequently, this check is not valid in this scenario.

Signed-off-by: Ahmed Ismail <[email protected]>
@AhmedIsmail02 AhmedIsmail02 force-pushed the add-cortex-r82-mpu-support branch from bce08c8 to 90dd76f Compare February 10, 2026 11:47
@sonarqubecloud
Copy link

@aggarg aggarg merged commit 6cd736c into FreeRTOS:main Feb 11, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants