Patchdescription
This page is a brief overview of the coding for initial v8-R64 support, and to help with code reviews . More specifically the goals are:
- To briefly summarize the coding done, then
- clarify the nature of the files of the three necessarily large patches into more-manageable review slices, and
- to clarify some aspects of the patches that are not easy to see from the Gerrit reviews alone.
The Gerrit reviews created for this new platform are, necessarily, large. It’s not really feasible to break them down into much-smaller patches, with each independently-compilable pieces. For example, we originally wanted to split https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/10518 into one patch for No-EL3, and another for MPU. However, they had to be implemented simultaneously because:
- We couldn't do the MPU changes before No-EL3, because no platform that has both EL3 and an MPU exists, and
- we couldn't practically do the No-EL3 changes before MPU support, because many (perhaps most) of the EL3-system-register references are in the MMU-library code. We would have had to make many No-EL3 changes to the MMU-library code, only to abandon all of those changes when we switch over to MPU.
Overview of Implementation and Gerrit Reviews
The v8-R64 support was added in three distinct steps, each with its associated patch (Gerrit review).
- Creating the firmware framework for the new FVP_R platform.
- Changes to divert EL3-system-register accesses to corresponding EL2 registers, and creating .../trusted-firmware-a/lib/xlat_mpu, an MPU equivalent of the .../trusted-firmware-a/lib/xlat_tables_v2 MMU library.
- Loading System Validation OS as a mockup of the Partner/Customer runtime environment, then transfering control to it.
Firmware Framework
This initial patchset is the platform creation of .../trusted-firmware-a/plat/arm/board/fvp_r, which includes the framework files adapted from .../trusted-firmware-a/plat/arm/board/fvp with some references removed such at BL2, BL31, etc. and different features removed that are not applicable for fvp_r. Most of this patch is new files that create the patch, with a few memory map changes needed for R.
Link to patch:
https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/10512
No-EL3 and MPU
This second patch primarily consists of creating alternative functions to those that access EL3 system registers. The alternative functions similarly access the corresponding EL2 system registers. In many cases, new alternative functions were added in new .../trusted-firmware-a/plat/arm/board/fvp_r/ files. In some cases though, the #defined label NO_EL3 was used to choose between EL3 and EL2 code pieces within an existing function. (This label may be changed to BL1_AT_EL2.)
Sometimes we used macro parameterization to avoid duplicating too much code, such as with the el3_common_macros.S being changed to el_max_common_macros.S with a parameter to specify the max EL for the particular core. All references to that had to also change.
This patch also involved creating an MPU alternative to the existing .../trusted-firmware-a/lib/xlat_tables_v2 MMU library. Because MPUs are inherently much-more-limited than MMUs, this new .../trusted-firmware-a/lib/xlat_mpu library is considerably simpler than the MMU libraries. Nevertheless, they are still setup via two NULL-terminated (in essence - zero length) arrays of mmap_region_t, called bl_regions and plat_regions.
Link to patch:
https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/10518
Load and Hand-off to Customer/Partner Runtime System
This patchset includes the changes required for loading and jumping to the customer/partner runtime system, in other words jumping from BL1 directly to BL33. In this case, BL33 is intended to be an test-OS binary which we are using to represent the customer/partner runtime system.
- Creation of bl1_load_bl33() function, much like bl1_load_bl2() function in common code to specifically load BL33 that loads and authenticates the partner runtime image.
- Addition of disable_mpu_icache_el2() and disable_mpu_el2() helper functions to disable the MPU before jumping to the next image.
- Changes to bl1_transfer_bl33() function for preparing the context of the next BL33 image.
- Addition of a bl1_run_next_image() function where the exception return takes place to jump to the runtime image.
- General changes from hardcoded BL2 to BL33 as the next image for BL1.
- Move of FIP from NOR Flash0 to DRAM due to the size of the FIP required for our testing purposes for our test-OS.
- Instantiation of the BL33 image based on our test-OS.
Note: This patch allows BL1 to jump to the test-OS image.
Link to patch:
https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/10519
Files to Review
How to use this table:
- Please see the first column below, "Review Types(s)," describing the high-level nature of – impetus for – that file's edits. It may make sense for a single person to review all of, say, the "MPU" changes.
- Each of the three patches has a column – 10512, 10518, and 10519. (Note that number that text functions as a link to the Gerrit review.)
- The entries in those three columns chronicle the history of the file for that particular row. For example, the eighth row, for file .../trusted-firmware-a/plat/arm/board/fvp_r/fvp_r_common.c...
- Was created in the first patch, 10512, thus the "Created" in that column, then
- was modifed in the second patch, 10518, thus the "Modified" in that column.
- Each of the "Created" or "Modified" markings in these three columns are working links to the particular files in that particular Gerrit review.
- Click on them to review that file's changes in that particular patch.
- In the case of new files (see the New File? column), please also see the link in the Review Information.
- As usual, the Gerrit review for new files shows that file "appearing out of thin air," so to speak.
- As you would expect, these were not really created from scratch.
- The links in the Review Information column take you to an sdiff of the final form of that file (prior to incorporating review comments) compared to the previously existing file from which it was originally made.
- Please make review comments in the Gerrit reviews based upon these sdiff outputs in the Gerrit reviews as usual. We'll respond and/or make modifications as requested.
Review Type(s) | File Name: | 10512(Oldest Check-In) | 10518 | 10519 (Newest Check-In) | New file? | Review Information | Review Notes | |
Max EL = EL2 | plat/intel/soc/common/aarch64/plat_helpers.S | Modified | No | v8-R64 cores do not support EL3, so el3_entrypoint_common changed to el_max_entrypoint_common with a parameter to specify the max EL for the particular core. | ||||
MPU | plat/arm/common/arm_common.mk | Modified | No | |||||
MPU | plat/arm/common/arm_bl1_setup.c | Modified | Modified | No | ||||
Platform Setup, Max EL = EL2, MPU | plat/arm/board/fvp_r/platform.mk | Created | Modified | Modified | Yes | plat/arm/board/fvp/platform.mk vs. plat/arm/board/fvp_r/platform.mk | ||
Platform Setup | plat/arm/board/fvp_r/jmptbl.i | Created | Yes | plat/arm/board/fvp/jmptbl.i vs. plat/arm/board/fvp_r/jmptbl.i | ||||
Platform Setup, Address Remap | plat/arm/board/fvp_r/include/platform_def.h | Created | Modified | Modified | Yes | plat/arm/board/fvp/include/platform_def.h vs. plat/arm/board/fvp_r/include/platform_def.h | Address map for addresses 0-0xffffffff on v8-R64 platform are mapped addresses same as v8-A FVP, except that bit 31 is toggled. | |
Platform Setup | plat/arm/board/fvp_r/include/plat.ld.S | Created | Yes | plat/arm/board/fvp/include/plat.ld.S vs. plat/arm/board/fvp_r/include/plat.ld.S | ||||
Platform Setup | plat/arm/board/fvp_r/fvp_r_trusted_boot.c | Created | Yes | plat/arm/board/fvp/fvp_trusted_boot.c vs. plat/arm/board/fvp_r/fvp_r_trusted_boot.c | ||||
Platform Setup | plat/arm/board/fvp_r/fvp_r_stack_protector.c | Created | Yes | plat/arm/board/fvp/fvp_stack_protector.c vs. plat/arm/board/fvp_r/fvp_r_stack_protector.c | ||||
Platform Setup | plat/arm/board/fvp_r/fvp_r_security.c | Created | Yes | plat/arm/board/fvp/fvp_security.c vs. plat/arm/board/fvp_r/fvp_r_security.c | ||||
Platform Setup | plat/arm/board/fvp_r/fvp_r_private.h | Created | Yes | plat/arm/board/fvp/fvp_private.h vs. plat/arm/board/fvp_r/fvp_r_private.h | ||||
Max EL = EL2 | plat/arm/board/fvp_r/fvp_r_pauth_helpers.S | Created | Yes | ./lib/extensions/pauth/pauth_helpers.S vs. plat/arm/board/fvp_r/fvp_r_pauth_helpers.S | ||||
Max EL = EL2 | plat/arm/board/fvp_r/fvp_r_misc_helpers.S | Created | Yes | lib/aarch64/misc_helpers.S vs. plat/arm/board/fvp_r/fvp_r_misc_helpers.S | ||||
Platform Setup, Runtime Env. Handoff | plat/arm/board/fvp_r/fvp_r_io_storage.c | Created | Modified | Yes | plat/arm/board/fvp/fvp_io_storage.c vs. plat/arm/board/fvp_r/fvp_r_io_storage.c | |||
Platform Setup | plat/arm/board/fvp_r/fvp_r_helpers.S | Created | Yes | plat/arm/board/fvp/aarch64/fvp_helpers.S vs. plat/arm/board/fvp_r/fvp_r_helpers.S | ||||
Platform Setup | plat/arm/board/fvp_r/fvp_r_err.c | Created | Yes | plat/arm/board/fvp/fvp_err.c vs. plat/arm/board/fvp_r/fvp_r_err.c | ||||
Max EL = EL2 | plat/arm/board/fvp_r/fvp_r_el_max_common_macros.S | Created | Yes | include/arch/aarch64/el3_common_macros.S vs. plat/arm/board/fvp_r/fvp_r_el_max_common_macros.S | ||||
Platform Setup, Address Remap | plat/arm/board/fvp_r/fvp_r_def.h | Created | Modified | Yes | plat/arm/board/fvp/fvp_def.h vs. plat/arm/board/fvp_r/fvp_r_def.h | Address map for addresses 0-0xffffffff on v8-R64 platform are mapped addresses same as v8-A FVP, except that bit 31 is toggled. | ||
Max EL = EL2 | plat/arm/board/fvp_r/fvp_r_debug.S | Created | Yes | common/aarch64/debug.S vs. plat/arm/board/fvp_r/fvp_r_debug.S | ||||
Max EL = EL2 | plat/arm/board/fvp_r/fvp_r_context_mgmt.c | Created | Yes | lib/el3_runtime/aarch64/context_mgmt.c vs. plat/arm/board/fvp_r/fvp_r_context_mgmt.c | ||||
Max EL = EL2 | plat/arm/board/fvp_r/fvp_r_context.S | Created | Yes | lib/el3_runtime/aarch64/context.S vs. lib/el3_runtime/aarch64/context.S | No change from lib/el3_runtime/aarch64/context.S. | |||
Max EL = EL2 | plat/arm/board/fvp_r/fvp_r_common.c | Created | Modified | Yes | plat/arm/board/fvp/fvp_common.c vs. plat/arm/board/fvp_r/fvp_r_common.c | |||
Platform Setup, Runtime Env. Handoff | plat/arm/board/fvp_r/fvp_r_bl1_setup.c | Created | Modified | Modified | Yes | plat/arm/board/fvp/fvp_bl1_setup.c vs. plat/arm/board/fvp_r/fvp_r_bl1_setup.c | ||
Max EL = EL2, Runtime Env. Handoff | plat/arm/board/fvp_r/fvp_r_bl1_main.c | Created | Modified | Yes | bl1/bl1_main.c vs. plat/arm/board/fvp_r/fvp_r_bl1_main.c | |||
Max EL = EL2 | plat/arm/board/fvp_r/fvp_r_bl1_exceptions.S | Created | Yes | bl1/aarch64/bl1_exceptions.S vs. plat/arm/board/fvp_r/fvp_r_bl1_exceptions.S | ||||
Max EL = EL2, Runtime Env. Handoff | plat/arm/board/fvp_r/fvp_r_bl1_entrypoint.S | Created | Modified | Yes | bl1/aarch64/bl1_entrypoint.S vs. plat/arm/board/fvp_r/fvp_r_bl1_entrypoint.S | |||
Max EL = EL2, Runtime Env. Handoff | plat/arm/board/fvp_r/fvp_r_bl1_context_mgmt.c | Created | Modified | Yes | bl1/aarch64/bl1_context_mgmt.c vs. plat/arm/board/fvp_r/fvp_r_bl1_context_mgmt.c | |||
Max EL = EL2 | plat/arm/board/fvp_r/fvp_r_bl1_arch_setup.c | Created | Yes | bl1/aarch64/bl1_arch_setup.c vs. plat/arm/board/fvp_r/fvp_r_bl1_arch_setup.c | ||||
Platform Setup | plat/arm/board/fvp_r/fdts/fvp_r_tb_fw_config.dts | Created | Yes | plat/arm/board/fvp/fdts/fvp_tb_fw_config.dts vs. plat/arm/board/fvp_r/fdts/fvp_r_tb_fw_config.dts | ||||
Platform Setup | plat/arm/board/fvp_r/fdts/fvp_r_soc_fw_config.dts | Created | Yes | plat/arm/board/fvp/fdts/fvp_soc_fw_config.dts vs. plat/arm/board/fvp_r/fdts/fvp_r_soc_fw_config.dts | ||||
Platform Setup | plat/arm/board/fvp_r/fdts/fvp_r_nt_fw_config.dts | Created | Yes | plat/arm/board/fvp/fdts/fvp_nt_fw_config.dts vs. plat/arm/board/fvp_r/fdts/fvp_r_nt_fw_config.dts | ||||
Platform Setup | plat/arm/board/fvp_r/fdts/fvp_r_fw_config.dts | Created | Yes | plat/arm/board/fvp/fdts/fvp_fw_config.dts vs. plat/arm/board/fvp_r/fdts/fvp_r_soc_fw_config.dts | ||||
MPU | lib/xlat_tables/aarch64/xlat_tables.c | Modified | ||||||
MPU | lib/xlat_mpu/xlat_mpu_utils.c | Created | Yes | lib/xlat_tables_v2/xlat_tables_utils.c vs. lib/xlat_mpu/xlat_mpu_utils.c | ||||
MPU | lib/xlat_mpu/xlat_mpu_private.h | Created | Yes | lib/xlat_tables_v2/xlat_tables_private.h vs. lib/xlat_mpu/xlat_mpu_private.h | ||||
MPU | lib/xlat_mpu/xlat_mpu_core.c | Created | Yes | lib/xlat_tables_v2/xlat_tables_core.c vs. lib/xlat_mpu/xlat_mpu_core.c | ||||
MPU | lib/xlat_mpu/xlat_mpu_context.c | Created | Yes | lib/xlat_tables_v2/xlat_tables_context.c vs. lib/xlat_mpu/xlat_mpu_context.c | ||||
MPU | lib/xlat_mpu/xlat_mpu.mk | Created | Yes | lib/xlat_tables_v2/xlat_tables.mk vs. lib/xlat_mpu/xlat_mpu.mk | ||||
MPU | lib/xlat_mpu/ro_xlat_mpu.mk | Created | Yes | lib/xlat_tables_v2/ro_xlat_tables.mk vs. lib/xlat_mpu/ro_xlat_mpu.mk | ||||
MPU | lib/xlat_mpu/aarch64/xlat_mpu_arch.c | Created | Yes | lib/xlat_tables_v2/aarch64/xlat_tables_arch.c vs. lib/xlat_mpu/aarch64/xlat_mpu_arch.c | ||||
MPU | lib/xlat_mpu/aarch64/enable_mmu.S | Created | Yes | lib/xlat_tables_v2/aarch64/enable_mmu.S vs. lib/xlat_mpu/aarch64/enable_mmu.S | ||||
Max EL = EL2, Runtime Env. Handoff | lib/aarch64/misc_helpers.S | Modified | No | |||||
MPU | include/plat/arm/common/plat_arm.h | Modified | No | |||||
Platform Setup, Address Remap | include/plat/arm/common/arm_def.h | Modified | Modified | No | Address map for addresses 0-0xffffffff on v8-R64 platform are mapped addresses same as v8-A FVP, except that bit 31 is toggled. | |||
Platform Setup, Address Remap | include/plat/arm/board/common/v2m_def.h | Modified | No | Address map for addresses 0-0xffffffff on v8-R64 platform are mapped addresses same as v8-A FVP, except that bit 31 is toggled. | ||||
Max EL = EL2 | include/arch/aarch64/el3_common_macros.S | Modified | No | |||||
Max EL = EL2, Runtime Env. Handoff | include/arch/aarch64/arch_helpers.h | Modified | Modified | No | ||||
Max EL = EL2 | include/arch/aarch64/arch.h | Modified | No | |||||
Max EL = EL2 | bl31/aarch64/bl31_entrypoint.S | Modified | No | v8-R64 cores do not support EL3, so el3_entrypoint_common changed to el_max_entrypoint_common with a parameter to specify the max EL for the particular core. | ||||
Max EL = EL2 | bl2/aarch64/bl2_el3_entrypoint.S | Modified | No | v8-R64 cores do not support EL3, so el3_entrypoint_common changed to el_max_entrypoint_common with a parameter to specify the max EL for the particular core. | ||||
Max EL = EL2 | bl1/bl1_main.c | Modified | No | |||||
Max EL = EL2 | bl1/aarch64/bl1_exceptions.S | Modified | No | |||||
Max EL = EL2 | bl1/aarch64/bl1_entrypoint.S | Modified | No | v8-R64 cores do not support EL3, so el3_entrypoint_common changed to el_max_entrypoint_common with a parameter to specify the max EL for the particular core. | ||||
Max EL = EL2 | bl1/aarch64/bl1_context_mgmt.c | Modified | No | |||||
Max EL = EL2 | bl1/aarch64/bl1_arch_setup.c | Modified | No |
- Last Author
- garymorrison-arm
- Last Edited
- Jul 2 2021, 11:48 PM
Document Hierarchy
- Bl1aarch64bl1 Arch Setupcvsplatarmboardfvp Rfvp R Bl1 Arch Setupc
- Bl1aarch64bl1 Entrypointsvsplatarmboardfvp Rfvp R Bl1 Entrypoints
- Bl1aarch64bl1 Exceptionssvsplatarmboardfvp Rfvp R Bl1 Exceptionss
- Bl1bl1 Maincvsplatarmboardfvp Rfvp R Bl1 Mainc
- Commonaarch64debugsvsplatarmboardfvp Rfvp R Debugs
- Includearchaarch64el3 Common Macrossvsplatarmboardel Max Common Macross
- Libaarch64misc Helperssvsplatarmboardfvp Rfvp R Misc Helperss
- Libel3 Runtimeaarch64context Mgmtcvsplatarmboardfvp Rfvp R Context Mgmtc
- Libel3 Runtimeaarch64contextsvslibel3 Runtimeaarch64contexts
- Libextensionspauthpauth Helperssvsplatarmboardfvp Rfvp R Pauth Helperss
- Libxlat Tables V2aarch64xlat Tables Archcvslibxlat Mpuaarch64xlat Mpu Archc
- Libxlat Tables V2ro Xlat Tablesmkvslibxlat Mpuro Xlat Mpumk
- Libxlat Tables V2xlat Tables Contextcvslibxlat Mpuxlat Mpu Contextc
- Libxlat Tables V2xlat Tables Corecvslibxlat Mpuxlat Mpu Corec
- Libxlat Tables V2xlat Tables Privatehvslibxlat Mpuxlat Mpu Privateh
- Libxlat Tables V2xlat Tables Utilscvslibxlat Mpuxlat Mpu Utilsc
- Libxlat Tables V2xlat Tablesmkvslibxlat Mpuxlat Mpumk
- Platarmboardfvpaarch64fvp Helperssvsplatarmboardfvp Rfvp R Helperss
- Platarmboardfvpfvp Bl1 Setupcvsplatarmboardfvp Rfvp R Bl1 Setupc
- Platarmboardfvpfvp Commoncvsplatarmboardfvp Rfvp R Commonc
- Platarmboardfvpfvp Defhvsplatarmboardfvp Rfvp R Defh
- Platarmboardfvpfvp Errcvsplatarmboardfvp Rfvp R Errc
- Platarmboardfvpfvp Io Storagecvsplatarmboardfvp Rfvp R Io Storagec
- Platarmboardfvpfvp Privatehvsplatarmboardfvp Rfvp R Privateh
- Platarmboardfvpfvp Stack Protectorcvsplatarmboardfvp Rfvp R Stack Protectorc
- Platarmboardfvpfvp Trusted Bootcvsplatarmboardfvp Rfvp R Trusted Bootc
- Platarmboardfvpincludeplatform Defhvsplatarmboardfvp Rincludeplatform Defh
- Platarmboardfvpincludeplatldsvsplatarmboardfvp Rincludeplatlds
- Platarmboardfvpplatformmkvsplatarmboardfvp Rplatformmk
Event Timeline
Further, you can get the best companion in the form of a Goa call girl whom you can take with you outside if you want so. It gives you a token of Escorts in Goa happiness and love and spends some quality time relaxing and calming down.
Our Call Girl service is dedicated to providing the best possible Call Girl service. Our Delhi Call Girls are here to provide you with the best possible experience in bed. To experience our fantastic hot surprises beyond the door and to spend your days and nights with our sizzling independent Call Girls, all you have to do is knock on our door.