-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Arm-Cortex-R82: Add MPU support #1347
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Arm-Cortex-R82: Add MPU support #1347
Conversation
portable/GCC/ARM_CR82/port.c
Outdated
| * regions are invalidated. | ||
| * The minimum region size is 64 Bytes. | ||
| */ | ||
| if( ( xRegions != NULL ) && ( xRegions[ ucIndex ].ulLengthInBytes > 64UL ) ) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should the check be >= 64. Also, should we add an assert to help application writers to catch invalid length instead of silently ignoring them.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, that's correct. A new check has been added to help application writers catch invalid MPU region sizes.
portable/GCC/ARM_CR82/portmacro.h
Outdated
| #define portUNPRIVILEGED_FLASH_REGION ( 1ULL ) | ||
| #define portUNPRIVILEGED_SYSCALLS_REGION ( 2ULL ) | ||
| #define portPRIVILEGED_RAM_REGION ( 3ULL ) | ||
| #define portSTACK_REGION ( 0ULL ) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
portSTACK_REGION is used to index the region in xRegionsSettings array but portSTACK_REGION and portPRIVILEGED_FLASH_REGION both being 0 makes it feel like we are using same MPU region for unprivileged flash and stack.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch, a new macro portSTACK_REGION_INDEX along with some comments have been introduced to make it clearer.
portable/GCC/ARM_CR82/portASM.S
Outdated
| .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.*/ |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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.
4ccbfac to
91c7ebb
Compare
|
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 <Ahmed.Ismail@arm.com>
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 <Ahmed.Ismail@arm.com>
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 <Ahmed.Ismail@arm.com>
91c7ebb to
6c6df4f
Compare



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:
port.cto set up memory regions and their attributes.portASM.Sto include assembly routines for MPU and context switching with MPU support.mpu_wrappers_v2_asm.cto provide assembly wrappers for MPU operations.portmacro.hto include MPU-related macros and definitions.task.hto include MPU-related task attributes.CMakeLists.txtto include the new MPU source file.README.mdwith 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:
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.